%global appLoc; %let compiled_apploc=/30.SASApps/3030.Projects/303001.DataController/build2/DataController; %let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc)); /** * The serverName represents the SAS 9 logical server context * There is no programmatic (SAS code) way to obtain this * So it is taken from the sasjsconfig file OR supplied at runtime, eg: * * %let apploc=/my/apploc; * %let serverName=SASAppDC; * %inc thisfile; * * / %global serverName; %let compiled_serverName=SASApp; %let serverName=%sysfunc(coalescec(&serverName,&compiled_serverName)); %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 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_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 mf_verifymacvars( verifyVars /* list of macro variable NAMES */ ,makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */ ,mAbort=SOFT )/*/STORE SOURCE*/; %local verifyIterator verifyVar abortmsg; %do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( ))); %let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( )); %if not %symexist(&verifyvar) %then %do; %let abortmsg= Variable &verifyVar is MISSING; %goto exit_err; %end; %if %length(%trim(&&&verifyVar))=0 %then %do; %let abortmsg= Variable &verifyVar is EMPTY; %goto exit_err; %end; %if &makeupcase=YES %then %do; %let &verifyVar=%upcase(&&&verifyvar); %end; %end; %goto exit_success; %exit_err: %put &abortmsg; %mf_abort(iftrue=(&mabort ne SOFT), mac=mf_verifymacvars, msg=%str(&abortmsg) ) 0 %return; %exit_success: 1 %mend mf_verifymacvars; %macro mm_getDirectories( path= ,outds=work.mm_getDirectories ,mDebug=0 )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_getDirectories.sas; %&mD.put _local_; data &outds (keep=directoryuri name directoryname directorydesc ); length directoryuri name directoryname directorydesc $256; call missing(of _all_); __i+1; %if %length(&path)=0 %then %do; do while (metadata_getnobj("omsobj:Directory?@Id contains '.'",__i,directoryuri)>0); %end; %else %do; do while( metadata_getnobj("omsobj:Directory?@DirectoryName='&path'",__i,directoryuri) >0 ); %end; __rc1=metadata_getattr(directoryuri, "Name", name); __rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname); __rc3=metadata_getattr(directoryuri, "Desc", directorydesc); &mD.putlog (_all_) (=); drop __:; __i+1; if sum(of __rc1-__rc3)=0 then output; end; run; %mend mm_getDirectories; %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 mm_updatestpsourcecode(stp= ,stpcode= ,minify=NO ,mdebug=0 ); /* first, check if STP exists */ %local tsuri; %let tsuri=stopifempty ; data _null_; format type uri tsuri value $200.; call missing (of _all_); path="&stp.(StoredProcess)"; /* first, find the STP ID */ if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do; /* get sourcecode */ cnt=1; do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0); rc=metadata_getattr(tsuri,"Name",value); %if &mdebug=1 %then %do; put tsuri= value=; %end; if value="SourceCode" then do; /* found it! */ rc=metadata_getattr(tsuri,"Id",value); call symputx('tsuri',value,'l'); stop; end; cnt+1; end; end; else put (_all_)(=); run; %if &tsuri=stopifempty %then %do; %put %str(WARN)ING: &stp.(StoredProcess) not found!; %return; %end; %if %length(&stpcode)<2 %then %do; %put %str(WARN)ING: No SAS code supplied!!; %return; %end; %local frefin frefout; %let frefin=%mf_getuniquefileref(); %let frefout=%mf_getuniquefileref(); /* write header XML */ data _null_; file &frefin; put "$METAREPOSITORY ','>'); outstr=tranwrd(outstr,"'",'''); outstr=tranwrd(outstr,'"','"'); outstr=tranwrd(outstr,'0A'x,' '); outstr=tranwrd(outstr,'0D'x,' '); outstr=tranwrd(outstr,'$','$'); %if &minify=YES %then %do; outstr=cats(outstr); if outstr ne ''; if not (outstr=:'/*' and subpad(left(reverse(outstr)),1,2)='/*'); %end; outstr=trim(outstr); put outstr ' '; run; %end; data _null_; file &frefin mod; put "'>SAS268435456 "; run; proc metadata in= &frefin out=&frefout; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=32767; input; put _infile_; run; %end; %else %do; filename &frefin clear; filename &frefout clear; %end; %mend mm_updatestpsourcecode; %macro mm_getrepos( outds=work.mm_getrepos )/*/STORE SOURCE*/; * use a temporary fileref to hold the response; filename response temp; /* get list of libraries */ proc metadata in= "1" out=response; run; /* write the response to the log for debugging */ /* data _null_; infile response lrecl=1048576; input; put _infile_; run; */ /* create an XML map to read the response */ filename sxlemap temp; data _null_; file sxlemap; put ''; put "/GetRepositories/Repositories/Repository"; put ""; put ''; put "/GetRepositories/Repositories/Repository/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Name"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Desc"; put ""; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@DefaultNS"; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryType"; put "characterstring20"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryFormat"; put "characterstring10"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@Access"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@CurrentAccess"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@PauseState"; put "characterstring16"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Path"; put ""; put "characterstring256"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Engine"; put ""; put "characterstring8"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Options"; put ""; put "characterstring32"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataCreated"; put "characterstring24"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataUpdated"; put "characterstring24"; put ''; put '
'; run; libname _XML_ xml xmlfileref=response xmlmap=sxlemap; proc sort data= _XML_.SASRepos out=&outds; by name; run; /* clear references */ filename sxlemap clear; filename response clear; libname _XML_ clear; %mend mm_getrepos; %macro mm_getservercontexts( outds=work.mm_getrepos )/*/STORE SOURCE*/; %local repo repocnt x; %let repo=%sysfunc(getoption(metarepository)); /* first get list of available repos */ %mm_getrepos(outds=work.repos) %let repocnt=0; data _null_; set repos; where repositorytype in('CUSTOM','FOUNDATION'); keep id name ; call symputx(cats('repo',_n_),name,'l'); call symputx('repocnt',_n_,'l'); run; filename __mc1 temp; filename __mc2 temp; data &outds; length serveruri servername $200; call missing (of _all_); stop; run; %do x=1 %to &repocnt; options metarepository=&&repo&x; proc metadata in= "$METAREPOSITORY ServerContextSAS 0" out=__mc1; run; /* data _null_; infile __mc1 lrecl=1048576; input; put _infile_; run; */ data _null_; file __mc2; put ''; put "/GetMetadataObjects/Objects/ServerContext"; put ""; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Name"; put ""; put "characterstring200"; put ''; put '
'; run; libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2; proc append base=&outds data=__mc3.SASContexts;run; libname __mc3 clear; %end; options metarepository=&repo; filename __mc1 clear; filename __mc2 clear; %mend mm_getservercontexts; %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_isblank(param )/*/STORE SOURCE*/; %sysevalf(%superq(param)=,boolean) %mend mf_isblank; %macro mp_dropmembers( list /* space separated list of datasets / views */ ,libref=WORK /* can only drop from a single library at a time */ ,iftrue=%str(1=1) )/*/STORE SOURCE*/; %if not(%eval(%unquote(&iftrue))) %then %return; %if %mf_isblank(&list) %then %do; %put NOTE: nothing to drop!; %return; %end; proc datasets lib=&libref nolist; delete &list; delete &list /mtype=view; run; %mend mp_dropmembers; %macro mm_createstp( stpname=SASjs Default STP ,stpdesc=This stp was created automatically by the mm_createstp macro ,filename=mm_createstp.sas ,directory=SASEnvironment/SASCode ,tree=/User Folders/sasdemo ,package=false ,streaming=true ,outds=work.mm_createstp ,mDebug=0 ,server=SASApp ,stptype=1 ,minify=NO ,frefin=mm_in ,frefout=mm_out ,LogicalServerType=Sps )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_CreateSTP.sas; %&mD.put _local_; %mp_abort( iftrue=(%mf_verifymacvars(stpname filename directory tree)=0) ,mac=&sysmacroname ,msg=%str(Empty inputs: stpname filename directory tree) ) %mp_dropmembers(%scan(&outds,2,.)) /* check LogicalServerType validity */ %mp_abort( iftrue=( &LogicalServerType ne Sps and &LogicalServerType ne Wks and &LogicalServerType ne Any ) ,mac=&sysmacroname ,msg=%str(Invalid value for LogicalServerType (&LogicalServerType)) ) /** * check tree exists */ data _null_; length type uri $256; rc=metadata_pathobj("","&tree","Folder",type,uri); call symputx('foldertype',type,'l'); call symputx('treeuri',uri,'l'); run; %if &foldertype ne Tree %then %do; %put %str(WARN)ING: Tree &tree does not exist!; %return; %end; /** * Check STP does not exist already */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&tree/&stpname",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype = ClassifierMap %then %do; %put %str(WARN)ING: Stored Process &stpname already exists in &tree!; %return; %end; /** * Check that the physical file exists */ %if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do; %put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!; %return; %end; %if &stptype=1 %then %do; /* type 1 STP - where code is stored on filesystem */ %if %sysevalf(&sysver lt 9.2) %then %do; %put %str(WARN)ING: Version 9.2 or later required; %return; %end; /* check directory object (where 9.2 source code reference is stored) */ data _null_; length id $20 dirtype $256; rc=metadata_resolve("&directory",dirtype,id); call symputx('checkdirtype',dirtype,'l'); run; %if &checkdirtype ne Directory %then %do; %mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug) %if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do; %put %str(WARN)ING: The directory object does not exist for &directory; %return; %end; %end; %else %do; data &outds; directoryuri="&directory"; run; %end; data &outds (keep=stpuri prompturi fileuri texturi); length stpuri prompturi fileuri texturi serveruri $256 ; if _n_=1 then call missing (of _all_); set &outds; /* final checks on uris */ length id $20 type $256; __rc=metadata_resolve("&treeuri",type,id); if type ne 'Tree' then do; putlog "%str(WARN)ING: Invalid tree URI: &treeuri"; stopme=1; end; __rc=metadata_resolve(directoryuri,type,id); if type ne 'Directory' then do; putlog "%str(WARN)ING: Invalid directory URI: " directoryuri; stopme=1; end; /* get server info */ __rc=metadata_resolve("&server",type,serveruri); if type ne 'LogicalServer' then do; __rc=metadata_getnobj("omsobj:LogicalServer?@Name='&server'",1,serveruri); if serveruri='' then do; putlog "%str(WARN)ING: Invalid server: &server"; stopme=1; end; end; if stopme=1 then do; putlog (_all_)(=); stop; end; /* create empty prompt */ rc1=METADATA_NEWOBJ('PromptGroup',prompturi,'Parameters'); rc2=METADATA_SETATTR(prompturi, 'UsageVersion', '1000000'); rc3=METADATA_SETATTR(prompturi, 'GroupType','2'); rc4=METADATA_SETATTR(prompturi, 'Name','Parameters'); rc5=METADATA_SETATTR(prompturi, 'PublicType','Embedded:PromptGroup'); GroupInfo= ""; rc6 = METADATA_SETATTR(prompturi, 'GroupInfo',groupinfo); if sum(of rc1-rc6) ne 0 then do; putlog "%str(WARN)ING: Issue creating prompt."; if prompturi ne . then do; putlog ' Removing orphan: ' prompturi; rc = METADATA_DELOBJ(prompturi); put rc=; end; stop; end; /* create a file uri */ rc7=METADATA_NEWOBJ('File',fileuri,'SP Source File'); rc8=METADATA_SETATTR(fileuri, 'FileName',"&filename"); rc9=METADATA_SETATTR(fileuri, 'IsARelativeName','1'); rc10=METADATA_SETASSN(fileuri, 'Directories','MODIFY',directoryuri); if sum(of rc7-rc10) ne 0 then do; putlog "%str(WARN)ING: Issue creating file."; if fileuri ne . then do; putlog ' Removing orphans:' prompturi fileuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); put (_all_)(=); end; stop; end; /* create a TextStore object */ rc11= METADATA_NEWOBJ('TextStore',texturi,'Stored Process'); rc12= METADATA_SETATTR(texturi, 'TextRole','StoredProcessConfiguration'); rc13= METADATA_SETATTR(texturi, 'TextType','XML'); storedtext='' !!"" !!""; rc14= METADATA_SETATTR(texturi, 'StoredText',storedtext); if sum(of rc11-rc14) ne 0 then do; putlog "%str(WARN)ING: Issue creating TextStore."; if texturi ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); put (_all_)(=); end; stop; end; /* create meta obj */ rc15= METADATA_NEWOBJ('ClassifierMap',stpuri,"&stpname"); rc16= METADATA_SETASSN(stpuri, 'Trees','MODIFY',treeuri); rc17= METADATA_SETASSN(stpuri, 'ComputeLocations','MODIFY',serveruri); rc18= METADATA_SETASSN(stpuri, 'SourceCode','MODIFY',fileuri); rc19= METADATA_SETASSN(stpuri, 'Prompts','MODIFY',prompturi); rc20= METADATA_SETASSN(stpuri, 'Notes','MODIFY',texturi); rc21= METADATA_SETATTR(stpuri, 'PublicType', 'StoredProcess'); rc22= METADATA_SETATTR(stpuri, 'TransformRole', 'StoredProcess'); rc23= METADATA_SETATTR(stpuri, 'UsageVersion', '1000000'); rc24= METADATA_SETATTR(stpuri, 'Desc', "&stpdesc"); /* tidy up if err */ if sum(of rc15-rc24) ne 0 then do; putlog "%str(WARN)ING: Issue creating STP."; if stpuri ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi stpuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); rc = METADATA_DELOBJ(stpuri); put (_all_)(=); end; end; else do; fullpath=cats('_program=',treepath,"/&stpname"); putlog "NOTE: Stored Process Created!"; putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath; putlog "NOTE- "; putlog "NOTE-"; end; output; stop; run; %end; %else %if &stptype=2 %then %do; /* type 2 stp - code is stored in metadata */ %if %sysevalf(&sysver lt 9.3) %then %do; %put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs; %return; %end; /* check we have the correct ServerContext */ %mm_getservercontexts(outds=contexts) %local serveruri; %let serveruri=NOTFOUND; data _null_; set contexts; where upcase(servername)="%upcase(&server)"; call symputx('serveruri',serveruri); run; %if &serveruri=NOTFOUND %then %do; %put %str(WARN)ING: ServerContext *&server* not found!; %return; %end; /** * First, create a Hello World type 2 stored process */ filename &frefin temp; data _null_; file &frefin; treeuri=quote(symget('treeuri')); serveruri=quote(symget('serveruri')); stpdesc=quote(symget('stpdesc')); stpname=quote(symget('stpname')); put "$METAREPOSITORY "/ ''/ " "/ " "/ " "/ " "/ ' '/ ' ' / " "/ " "/ ' '/ " "/ ""/ "SAS"/ "268435456"; run; filename &frefout temp; proc metadata in= &frefin out=&frefout ; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=1048576; input; put _infile_; run; %end; /** * Next, add the source code */ %mm_updatestpsourcecode(stp=&tree/&stpname ,stpcode="&directory/&filename" ,mdebug=&mdebug ,minify=&minify) %end; %else %do; %put %str(WARN)ING: STPTYPE=*&stptype* not recognised!; %end; %mend mm_createstp; %macro mf_getuser( )/*/STORE SOURCE*/; %local user; %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; %let user=&SYS_COMPUTE_SESSION_OWNER; %end; %else %if %symexist(_metaperson) %then %do; %if %length(&_metaperson)=0 %then %let user=&sysuserid; /* sometimes SAS will add @domain extension - remove for consistency */ /* but be sure to quote in case of usernames with commas */ %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); %end; %else %let user=&sysuserid; %quote(&user) %mend mf_getuser; %macro mm_createfolder(path=,mDebug=0); %put &sysmacroname: execution started for &path; %local dbg errorcheck; %if &mDebug=0 %then %let dbg=*; %local parentFolderObjId child errorcheck paths; %let paths=0; %let errorcheck=1; %if &syscc ge 4 %then %do; %put SYSCC=&syscc - this macro requires a clean session; %return; %end; data _null_; length objId parentId objType parent child $200 folderPath $1000; call missing (of _all_); folderPath = "%trim(&path)"; * remove any trailing slash ; if ( substr(folderPath,length(folderPath),1) = '/' ) then folderPath=substr(folderPath,1,length(folderPath)-1); * name must not be blank; if ( folderPath = '' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank"; end; * must have a starting slash ; if ( substr(folderPath,1,1) ne '/' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH param value must have starting slash"; stop; end; * check if folder already exists ; rc=metadata_pathobj('',cats(folderPath,"(Folder)"),"",objType,objId); if rc ge 1 then do; put "NOTE: Folder " folderPath " already exists!"; stop; end; * do not create a root (one level) folder ; if countc(folderPath,'/')=1 then do; put 'ERR' +(-1) "OR: &sysmacroname will not create a new ROOT folder"; stop; end; * check that root folder exists ; root=cats('/',scan(folderpath,1,'/'),"(Folder)"); if metadata_pathobj('',root,"",objType,parentId)<1 then do; put 'ERR' +(-1) "OR: " root " does not exist!"; stop; end; * check that parent folder exists ; child=scan(folderPath,-1,'/'); parent=substr(folderpath,1,length(folderpath)-length(child)-1); rc=metadata_pathobj('',cats(parent,"(Folder)"),"",objType,parentId); if rc<1 then do; putlog 'The following folders will be created:'; /* folder does not exist - so start from top and work down */ length newpath $1000; paths=0; do x=2 to countw(folderpath,'/'); newpath=''; do i=1 to x; newpath=cats(newpath,'/',scan(folderpath,i,'/')); end; rc=metadata_pathobj('',cats(newpath,"(Folder)"),"",objType,parentId); if rc<1 then do; paths+1; call symputx(cats('path',paths),newpath); putlog newpath; end; call symputx('paths',paths); end; end; else putlog "parent " parent " exists"; call symputx('parentFolderObjId',parentId,'l'); call symputx('child',child,'l'); call symputx('errorcheck',0,'l'); &dbg put (_all_)(=); run; %if &errorcheck=1 or &syscc ge 4 %then %return; %if &paths>0 %then %do x=1 %to &paths; %put executing recursive call for &&path&x; %mm_createfolder(path=&&path&x) %end; %else %do; filename __newdir temp; options noquotelenmax; %local inmeta; %put creating: &path; %let inmeta=$METAREPOSITORY SAS268435456 ; proc metadata in="&inmeta" out=__newdir verbose; run ; /* check it was successful */ data _null_; length objId parentId objType parent child $200 ; call missing (of _all_); rc=metadata_pathobj('',cats("&path","(Folder)"),"",objType,objId); if rc ge 1 then do; putlog "SUCCCESS! &path created."; end; else do; putlog 'ERR' +(-1) "OR: unsuccessful attempt to create &path"; call symputx('syscc',8); end; run; /* write the response to the log for debugging */ %if &mDebug ne 0 %then %do; data _null_; infile __newdir lrecl=32767; input; put _infile_; run; %end; filename __newdir clear; %end; %put &sysmacroname: execution finished for &path; %mend mm_createfolder; %macro mm_deletestp( target= )/*/STORE SOURCE*/; /** * Check STP does exist */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&target",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype ne ClassifierMap %then %do; %put NOTE: No Stored Process found at ⌖ %return; %end; filename __in temp lrecl=10000; filename __out temp lrecl=10000; data _null_ ; file __in ; put ""; put "SAS268436480"; put ""; run ; proc metadata in=__in out=__out verbose;run; /* list the result */ data _null_;infile __out; input; list; run; filename __in clear; filename __out clear; /** * Check deletion */ %local isgone; data _null_; length type uri $256; call missing (of _all_); rc=metadata_pathobj("","&target",'Note',type,uri); call symputx('isgone',type,'l'); run; %if &isgone = ClassifierMap %then %do; %put %str(ERR)OR: STP not deleted from ⌖ %let syscc=4; %return; %end; %mend mm_deletestp; /* system macro dependencies for build process end*/ /* system macros for build process */ %macro mm_createwebservice(path= ,name=initService ,precode= ,code=ft15f001 ,desc=This stp was created automagically by the mm_createwebservice macro ,mDebug=0 ,server=SASApp ,replace=YES ,adapter=sasjs )/*/STORE SOURCE*/; %if &syscc ge 4 %then %do; %put &=syscc - &sysmacroname will not execute in this state; %return; %end; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_createwebservice.sas; %&mD.put _local_; * remove any trailing slash ; %if "%substr(&path,%length(&path),1)" = "/" %then %let path=%substr(&path,1,%length(&path)-1); /** * Add webout macro * These put statements are auto generated - to change the macro, change the * source (mm_webout) and run `build.py` */ filename sasjs temp; data _null_; file sasjs lrecl=3000 ; put "/* Created on %sysfunc(datetime(),datetime19.) by %mf_getuser() */"; /* 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 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 ' '; 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 ' '; put ' '; 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 ' '; put '%else %if &action=OPEN %then %do; '; put ' /* fix encoding */ '; put ' OPTIONS NOBOMFILE; '; put ' '; 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 ' '; 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 ' '; put '%end; '; put ' '; 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 ' '; put '%end; '; put ' '; put '%mend mm_webout; '; /* WEBOUT END */ put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO'; put ' ,maxobs=MAX'; put ');'; put ' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing'; put ' ,showmeta=&showmeta,maxobs=&maxobs'; put ' )'; put '%mend;'; run; /* add precode and code */ %local work tmpfile; %let work=%sysfunc(pathname(work)); %let tmpfile=__mm_createwebservice.temp; %local x fref freflist mod; %let freflist= &adapter &precode &code ; %do x=1 %to %sysfunc(countw(&freflist)); %if &x>1 %then %let mod=mod; %let fref=%scan(&freflist,&x); %&mD.put &sysmacroname: adding &fref; data _null_; file "&work/&tmpfile" lrecl=3000 &mod; infile &fref; input; put _infile_; run; %end; /* create the metadata folder if not already there */ %mm_createfolder(path=&path) %if &syscc ge 4 %then %return; %if %upcase(&replace)=YES %then %do; %mm_deletestp(target=&path/&name) %end; /* create the web service */ %mm_createstp(stpname=&name ,filename=&tmpfile ,directory=&work ,tree=&path ,stpdesc=&desc ,mDebug=&mdebug ,server=&server ,stptype=2) /* find the web app url */ %local url; %let url=localhost/SASStoredProcess; data _null_; length url $128; rc=METADATA_GETURI("Stored Process Web App",url); if rc=0 then call symputx('url',url,'l'); run; %put &sysmacroname: STP &name successfully created in &path; %put Check it out here:; %put ;%put ;%put ; %put &url?_PROGRAM=&path/&name; %put ;%put ;%put ; %mend mm_createwebservice; /* system macros for build process end */ * BuildInit start; /** @file @brief Initialise build program for SAS 9 DC

SAS Macros

**/ options nomprint; %global _metaperson _url dcpath; /* set webout if not running in STP mode */ data _null_; if "&sysprocessmode" ne "SAS Stored Process Server" then do; call execute('filename _webout temp;'); end; run; * BuildInit end; %let path=services; %let service=clickme; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put '''';'; put 'put '' '';'; put 'put '' Data Controller'';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '''';'; put 'run;'; put '%sasjsout(HTML)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/admin; %let service=configurator; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief provides the web service to create the control tables'; put '@details'; put '

SAS Macros

'; put '@li dc_getusergroups.sas'; put '@li mf_getuser.sas'; put '@li mf_getapploc.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 '%let root=%mf_getapploc();'; put '/* create web page */'; put 'data _null_;'; put 'file _webout;'; put 'infile datalines ;'; put 'input;'; put 'put _infile_;'; put 'datalines4;'; put ''; put ''; put ''; put ''; put 'Data Controller'; put ''; put ''; put ''; put ''; put ''; put '
'; put '
'; put ''; put 'Data Controller'; put '
'; put '
'; put '
'; put '
'; put '
'; put '
'; put ''; put '
'; put '
'; put 'Terms and Conditions'; put '
'; put '
'; put '
'; put '

Due to the way the Demo version is compiled (in an easy-to-deploy but'; put 'inefficient-to-run format), it should not be deployed to production servers.'; put 'Before proceeding with configuration, please confirm that you have read,'; put 'understood, and agreed to the'; put 'Data Controller for SAS© Evaluation Agreement.'; put '

'; put '
'; put '
'; put '>'; put ''; put '
'; put '
'; put '
'; put ''; put ''; put '
'; put '
'; put '
'; put ''; put ''; put ';;;;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=dirlist; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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_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 $2000 fref fref2 $8 file_or_folder $6 filename $255'; 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 '* 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Fetches directories to facilitate configuration'; put '@details The service can also be invoked using the following URL param:'; put '@li &parent= (parent path)'; put '

SAS Macros

'; put '@li mp_dirlist.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 parent;'; put '/* if no flavour is specified, default to root */'; put '%let parent=%sysfunc(coalescec(&parent,/));'; put '%mp_dirlist(path=&parent,outds=dirlist, maxdepth=2)'; put '%webout(OPEN)'; put '%webout(OBJ,dirlist)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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_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_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_REQUEST_LOGS"'; put ',var_value="YES"'; put ',var_active=1'; put ',var_desc=''Setting to NO will prevent each request being logged to the'''; put '!!'' MPE_REQUESTS table Default=YES.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_VIEWER"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''YES will restrict the list of libraries and tables in VIEWER to'''; put '!!'' those explicitly set to VIEW in the MPE_SECURITY table. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_EDITRECORD"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''Setting YES will prevent the EDIT RECORD dialog appearing in the'''; put '!!'' EDIT screen by removing the "Edit Row" option in the right click menu'''; put '!!'', and the "ADD RECORD" button in the bottom left. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_CATALOG"'; put ',var_name="DC_IGNORELIBS"'; put ',var_value="|MAPSSAS|MAPS|"'; put ',var_active=1'; put ',var_desc=''Pipe seperated list of librefs (uppercase) to be ignored when'''; put '!!'' running the Data Catalog refresh process. This can enable a clean'''; put '!!'' run when invalid librefs are returned by the mpe_refreshlibs macro.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LOCALE"'; put ',var_value="SYSTEM"'; put ',var_active=1'; put ',var_desc=''Set to a locale (such as en_gb or en_be) to override the system'''; put '!!'' value (which can be driven from the browser settings). This is '''; put '!!''useful when importing ambiguous dates from CSV or Excel (eg 1/2/20 vs '''; put '!!''2/1/20) as DC uses the anydtdtm informats for import. Default=SYSTEM.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BULKLOAD"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to enable BULKLOAD=YES in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_BUCKET"'; put ',var_value="''your-aws-bucket/Exchange''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS bucket to'''; put '!!'' use for s3 uploads in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_AWS_CREDENTIALS_FILE"'; put ',var_value="''/path/to/your/aws/s3/.credentials''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS creds file'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_REGION"'; put ',var_value="''eu-west-1''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) AWS region in use'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_COMPRESS"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to perform compression ahead of the COPY command'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_USE_SSL"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to use SSL encryption'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_REVIEW"'; put ',var_name="HISTORY_ROWS"'; put ',var_value=''100'''; put ',var_active=1'; put ',var_desc=''Number of rows (or additional rows) to return in the HISTORY '''; put '!!''page'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LICENCE_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Licence Key'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_ACTIVATION_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Activation Key'';'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''LIBRARY'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Data Controller Control Tables"'; put ',DD_LONGDESC="# The Data Controller Library"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib..MPE_TABLES"'; put ',DD_SHORTDESC="Configuration of new tables for Data Controller"'; put ',DD_LONGDESC="# MPE_TABLES - adding new tabels to Data Controller"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_TABLES.DSN"'; put ',DD_SHORTDESC="Dataset Name to be edited"'; put ',DD_LONGDESC="_DSN_ - must be UPCASE"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''DIRECTORY'''; put ',DD_SOURCE="/some/directory"'; put ',DD_SHORTDESC="Directory for some purpose"'; put ',DD_LONGDESC="This directory is great. It''s great directory.'; put 'It trumps all other directories."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Transaction table for capturing Data Controller users"'; put ',DD_LONGDESC="After a user accepts the Data Controller EULA they are "'; put '!!"registered as a user in this table."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_CONFIG.VAR_ACTIVE"'; put ',DD_SHORTDESC="Set to 1 to make an option active"'; put ',DD_LONGDESC="This value is used as a filter by data controller whenever "'; put '!!"querying for option settings."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* mpe_xlmap_info'; put '*/'; put 'insert into &lib..mpe_xlmap_info set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_description=''Basel 3 Key Metrics report'''; put ',XLMAP_TARGETLIBDS="&lib..MPE_XLMAP_DATA";'; put '/**'; put '* mpe_xlmap_rules'; put '*/'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:a'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:b'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:c'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:d'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:e'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:f'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[1]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[2]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[3]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[4]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE D10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/b'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''ABSOLUTE E10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/c'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[6]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/d'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[8]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/e'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[9]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/f'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[10]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE H11'''; put ',xlmap_finish=''RELATIVE R[0]C[1]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:3'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''RELATIVE R[12]C[4]'''; put ',xlmap_finish=''ABSOLUTE I13'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec1'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D8'''; put ',xlmap_finish=''BLANKROW'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec2'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D18'''; put ',xlmap_finish=''LASTDOWN'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''header'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B3'''; put ',xlmap_finish=''ABSOLUTE B8'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''data'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B13'''; put ',xlmap_finish=''ABSOLUTE E16'';'; put '/**'; put '* MPE_GROUPS'; put '*/'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="allbow"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="dctestuser1"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="mihmed"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="sec-sas9-prd-ext-sasplatform-300115datacontroller"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="DCTest"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_ROW_LEVEL_SECURITY'; put '*/'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=1'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib."'; put ',RLS_TABLE="MPE_GROUPS"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''GROUP_NAME'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''-1''"'; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=2'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''RLS_RK'''; put ',RLS_OPERATOR_NM=''>'''; put ',RLS_RAW_VALUE=''0'''; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=3'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''DC Demo Group'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''ACCESS_LEVEL'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''N/A''"'; put ',RLS_ACTIVE=1;'; put '/**'; put '* MPE_SECURITY'; put '*/'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* mpe_selectbox */'; put '%let rk=1;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=&rk'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''LOCKED'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''UNLOCKED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''EDIT'''; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''APPROVE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''VIEW'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''SIGNOFF'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''UPDATE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''REPLACE'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''TXTEMPORAL'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''BITEMPORAL'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''FORMAT_CAT'''; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''SUBMITTED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''APPROVED'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''REJECTED'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 1'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 2'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 3'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value="This is a long option. This option is very long. "'; put '!!"It is optional, though."'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="CASE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MINVAL"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MAXVAL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT"'; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT"'; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="NOTNULL"'; put ',selectbox_order=6'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="SOME_DATASET"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="EXAMPLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="COLUMN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="TABLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="LIBRARY"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="CATALOG"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="FORMAT"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="LIBREF"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''AUDIT'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="="'; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="BETWEEN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NOT IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="CONTAINS"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_EXCEL_CONFIG"'; put ',base_column="XL_RULE"'; put ',selectbox_value="FORMULA"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="0"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="1"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_TABLES'; put '*/'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_COLUMN_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM'''; put ',notes=''Docs: https://docs.datacontroller.io/column-level-security'''; put ',post_edit_hook=''services/hooks/mpe_column_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_INFO'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_info_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_RULES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID XLMAP_RANGE_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_rules_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_DATA'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOAD_REF XLMAP_ID XLMAP_RANGE_ID ROW_NO COL_NO'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_LOCKANYTABLE'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOCK_LIB LOCK_DS'''; put ',notes=''This table may be edited when a process failed and left a lock'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_TABLES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''This entry allows the MP Editor to edit itself!'''; put ',post_edit_hook=''services/hooks/mpe_tables_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN ACCESS_LEVEL SAS_GROUP'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''Determines which groups can view/edit/approve which tables'''; put ',post_edit_hook=''services/hooks/mpe_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SELECTBOX'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''SELECTBOX_RK'''; put ',var_txfrom=''VER_FROM_DTTM'''; put ',var_txto=''VER_TO_DTTM'''; put ',notes=''Can configure dropdowns for the front end'''; put ',rk_underlying=''SELECT_LIB SELECT_DS BASE_COLUMN SELECTBOX_VALUE'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_TEST'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''PRIMARY_KEY_FIELD'''; put ',notes=''Test table for controller'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EMAILS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''USER_NAME'''; put ',notes=''Primary Emails Table (backup is metadata)'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''VAR_SCOPE VAR_NAME'''; put ',notes=''Configuration variables for Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ALERTS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''ALERT_EVENT ALERT_LIB ALERT_DS ALERT_USER'''; put ',notes=''Configuration for alert email events'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_GROUPS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''GROUP_NAME USER_NAME'''; put ',notes=''Configuration for additional groups within Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_VALIDATIONS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''BASE_LIB BASE_DS BASE_COL RULE_TYPE'''; put ',notes=''Configuration of data quality rules in Editor component'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',post_edit_hook=''services/hooks/mpe_validations_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_DATADICTIONARY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''DD_TYPE DD_SOURCE'''; put ',notes=''Configuration of data dictionary'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EXCEL_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''XL_LIBREF XL_TABLE XL_COLUMN'''; put ',notes=''Configuration of the excel import rules'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ROW_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''RLS_RK'''; put ',notes=''Configuration of Row Level Security'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',rk_underlying=''RLS_SCOPE RLS_GROUP RLS_LIBREF RLS_TABLE RLS_GROUP_LOGIC '''; put '!!''RLS_SUBGROUP_LOGIC RLS_SUBGROUP_ID RLS_VARIABLE_NM RLS_OPERATOR_NM '''; put '!!''RLS_RAW_VALUE '''; put ',post_edit_hook=''services/hooks/mpe_row_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_CATALOG-FC'''; put ',num_of_approvals_required=1'; put ',loadtype=''FORMAT_CAT'''; put ',buskey=''TYPE FMTNAME FMTROW'''; put ',notes=''Sample Format Catalog'''; put ';'; put '/* mpe_validations */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_SCOPE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_HIDE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ALERTS"'; put ',base_col="ALERT_LIB"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_alerts.alert_lib"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_RULES"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="NUM_OF_APPROVALS_REQUIRED"'; put ',rule_type=''MINVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''NOTNULL'''; put ',rule_value=" "'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="&lib..MPE_TABLES.LIBREF"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_TABLES.DSN"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="SAS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_COL"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value="0"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value="1"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/mpe_tables.dsn"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="BASE_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_SUBGROUP_ID"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* test softselect on numeric var (should be ordered numerically) */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_BESTNUM"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_X_TEST.SOME_BESTNUM"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_NUM"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_x_test.some_num"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_XLMAP_RULES.XLMAP_ID"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_X_TEST'; put '*/'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=0'; put ',some_char=''this is dummy data'''; put ',some_dropdown=''Option 1'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=42'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=1'; put ',some_char=''more dummy data'''; put ',some_dropdown=''Option 2'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=422'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=2'; put ',some_char=''even more dummy data'''; put ',some_dropdown=''Option 3'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=142'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=3'; put ',some_char=repeat(''It was a dark and stormy night. The wind was blowing'''; put '!!'' a gale! The captain said to his mate - mate, tell us a tale. And'''; put '!!'' this, is the tale he told: '',3)'; put ',some_dropdown=''Option 2'''; put ',some_num=1613.001'; put ',some_date=423'; put ',some_datetime=423'; put ',some_time=44'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=4'; put ',some_char=''if you can fill the unforgiving minute'''; put ',some_dropdown=''Option 1'''; put ',some_num=1613.001123456'; put ',some_date=4231'; put ',some_datetime=423123123'; put ',some_time=412'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put '%do x=10 %to 500;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=10&x'; put ',some_char="&x bottles of beer on the wall"'; put ',some_dropdown=''Option 1'''; put ',some_num=ranuni(0)'; put ',some_date=round(ranuni(0)*1000,1)'; put ',some_datetime=round(ranuni(0)*50000,1)'; put ',some_time=round(ranuni(0)*100,1)'; put ',some_shortnum=round(ranuni(0)*100,1)'; put ',some_bestnum=round(ranuni(0)*100,1);'; put '%end;'; put '/* https://support.sas.com/resources/papers/proceedings/proceedings/sugi27/p056-27.pdf */'; put 'proc format library=&lib..mpe_x_catalog;'; put 'value otdate'; put '.Z = ''Some Zs'''; put '.N = ''Some 9s'''; put 'other = [date9.]'; put ';'; put 'invalue disc'; put '''ABC'' = 0.20'; put '''DEF'' = 0.25'; put '''XYZ'' = 0.00'; put 'other = 0.00'; put ';'; put 'invalue indate'; put '''00000000'' = .Z'; put '''99999999'' = .N'; put 'other = [yymmdd8.]'; put ';'; put 'value age(multilabel)'; put '20 - 29 = ''20 - 29'''; put '30 - 39 = ''30 - 39'''; put '40 - 49 = ''40 - 49'''; put '50 - 59 = ''50 - 59'''; put '60 - high = ''60 +++'''; put '20 - 35 = ''20 - 35'''; put '36 - 55 = ''36 - 55'''; put '55 - high = ''55 +++'''; put ';'; put '/* https://libguides.library.kent.edu/SAS/UserDefinedFormats */'; put 'VALUE $GENDERLABEL'; put '"M" = "Male"'; put '"F" = "Female"'; put ';'; put 'VALUE LIKERT_SEVEN'; put '1 = "Strongly Disagree"'; put '2 = "Disagree"'; put '3 = "Slightly Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5 = "Slightly Agree"'; put '6 = "Agree"'; put '7 = "Strongly Agree"'; put ';'; put 'VALUE LIKERT7_ELEVEN'; put '1,2,3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5,6,7 = "Agree"'; put ';'; put 'VALUE LIKERT7_SISTERS'; put '1-3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5-7 = "Agree"'; put ';'; put 'VALUE INCOME'; put 'LOW -< 20000 = "Low"'; put '20000 -< 60000 = "Middle"'; put '60000 - HIGH = "High"'; put ';'; put 'VALUE RACE'; put '1 = "White"'; put '2 = "Black"'; put 'OTHER = "Other"'; put ';'; put 'VALUE GENDERCODE'; put '0 = ''Male'''; put '1 = ''Female'';'; put 'VALUE ATHLETECODE'; put '0 = ''Non-athlete'''; put '1 = ''Athlete'';'; put 'VALUE SMOKINGCODE'; put '0 = ''Nonsmoker'''; put '1 = ''Past smoker'''; put '2 = ''Current smoker'';'; put '/* https://documentation.sas.com/doc/en/pgmsascdc/v_017/proc/p1upn25lbfo6mkn1wncu4dyh9q91.htm */'; put 'value $state'; put '''Delaware''=''DE'''; put '''Florida''=''FL'''; put '''Ohio''=''OH'';'; put 'value MYfmt'; put '/* Format dates prior to 31DEC2011 using only a year. */'; put 'low-''31DEC2011''d=[year4.]'; put '/* Format 2012 dates using the month and year. */'; put '''01jan2012''d-''31DEC12''d=[monyy7.]'; put '/* Format dates 01JAN2013 and beyond using the day, month, and year. */'; put '''01JAN2013''d-high=[date9.]'; put '/* Catch missing values. */'; put 'other=''n/a'';'; put 'value newfmt .=''N/A'' other=[12.1];'; put '/* https://www.lexjansen.com/nesug/nesug08/cc/cc14.pdf */'; put 'value $genderml (multilabel)'; put '''1''=''Male'''; put '''2''=''Female'''; put '''1'',''2'','' ''=''Total people'';'; put 'value agemla (multilabel)'; put '1-4=''Preschool'''; put '1-18=''Children'''; put '19-120=''Adults'';'; put 'value agemlb (multilabel)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put 'value agemlc (multilabel notsorted)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put '%mend mpe_makedata;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mpe_makedatamodel(lib=);'; put '%if &syscc ne 0 %then %do;'; put '%put syscc=&syscc exiting &sysmacroname;'; put '%return;'; put '%end;'; put '%local notnull;'; put '%if %mf_existfeature(COLCONSTRAINTS)=1 %then %let notnull=not null;'; put '%put &=notnull;'; put 'proc sql;'; put 'create table &lib..mpe_alerts('; put 'tx_from num format=datetime19.3,'; put 'alert_event char(20),'; put 'alert_lib char(8),'; put 'alert_ds char(32),'; put 'alert_user char(100) ,'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_alerts;'; put 'index create'; put 'pk_mpealerts=(tx_from alert_event alert_lib alert_ds alert_user)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_audit('; put 'load_ref char(36) label=''unique load reference'','; put 'libref char(8) label=''Library Reference (8 chars)'','; put 'dsn char(32) label=''Dataset Name (32 chars)'','; put 'key_hash char(32) label='; put '''MD5 Hash of primary key values (pipe seperated)'','; put 'tgtvar_nm char(32) label=''Target variable name (32 chars)'','; put 'move_type char(1) label=''Either (A)ppended, (D)eleted or (M)odified'','; put 'processed_dttm num format=E8601DT26.6 label=''Processed at timestamp'','; put 'is_pk num label=''Is Primary Key Field? (1/0)'','; put 'is_diff num label='; put '''Did value change? (1/0/-1). Always -1 for appends and deletes.'','; put 'tgtvar_type char(1) label=''Either (C)haracter or (N)umeric'','; put 'oldval_num num format=best32. label=''Old (numeric) value'','; put 'newval_num num format=best32. label=''New (numeric) value'','; put 'oldval_char char(32765) label=''Old (character) value'','; put 'newval_char char(32765) label=''New (character) value'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_audit;'; put 'index create'; put 'pk_mpe_audit=(load_ref libref dsn key_hash tgtvar_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_column_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'CLS_SCOPE char(4) ¬null,'; put 'CLS_GROUP char(64) ¬null,'; put 'CLS_LIBREF char(8) ¬null,'; put 'CLS_TABLE char(32) ¬null,'; put 'CLS_VARIABLE_NM char(32) ¬null,'; put 'CLS_ACTIVE num ¬null,'; put 'CLS_HIDE num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_column_level_security;'; put 'index create'; put 'pk_mpe_column_level_security='; put '(tx_to CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_config('; put 'tx_from num ¬null format=datetime19.3'; put ',tx_to num ¬null format=datetime19.3'; put ',var_scope varchar(10) ¬null'; put ',var_name varchar(32) ¬null'; put ',var_value varchar(5000)'; put ',var_active num'; put ',var_desc varchar(300)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_config;'; put 'index create'; put 'pk_mpe_config=(tx_to var_scope var_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_CATS('; put 'TX_FROM float ¬null format=datetime19.,'; put 'TX_TO float format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_CATS;'; put 'index create'; put 'pk_mpe_datacatalog_CATS=(tx_to libref memname)'; 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_OBJS('; put 'TX_FROM num ¬null format=datetime19.,'; put 'TX_TO num ¬null format=datetime19.,'; put 'libref char(8) ¬null label=''Library Name'','; put 'memname char(64) ¬null label=''Member Name'','; put 'objname char(32) ¬null label=''Object Name'','; put 'objtype char(8) ¬null label=''Object Type'','; put 'objdesc char(256) label=''Object Description'','; put 'alias char(32) label=''Object Alias'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_OBJS;'; put 'index create'; put 'pk_mpe_datacatalog_OBJS=(libref memname objname objtype 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 - in a constraint being 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_CATS('; put 'TX_FROM float format=datetime19.,'; put 'TX_TO float format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'','; put 'nobjs num ¬null label=''Number of objects'','; put 'created num ¬null format=DATETIME. label=''Date Created'','; put 'modified num format=DATETIME. label=''Date Modified'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_CATS;'; put 'index create'; put 'pk_mpe_datastatus_cats=(libref memname 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 'catalog_cnt num label=''Number of Catalogs'''; 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_OBJS('; put 'TX_FROM float ¬null format=datetime19.,'; put 'TX_TO float ¬null format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'','; put 'objname char(32) label=''Object Name'','; put 'objtype char(8) label=''Object Type'','; put 'created num ¬null format=DATETIME. label=''Date Created'','; put 'modified num format=DATETIME. label=''Date Modified'','; put 'level num label=''Library Concatenation Level'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_OBJS;'; put 'index create'; put 'pk_mpe_datastatus_OBJS=(libref memname objname objtype 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. label=''Date Created'','; put 'modate num format=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 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_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 mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; 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 mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; 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 mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; put '%macro mm_getstpinfo(pgm'; put ',outds=work.mm_getstpinfo'; put ',mDebug=0'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length type stp_uri tsuri servercontext value $200'; put 'StoredProcessConfiguration $1000 sourcecode_first32k $32767;'; put 'keep path stp_uri sourcecode_first32k StoredProcessConfiguration'; put 'servercontext;'; put 'call missing (of _all_);'; put 'path="&pgm(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,stp_uri)>0 then do;'; put '/* get attributes */'; put 'cnt=1;'; put 'do while (metadata_getnasn(stp_uri,"Notes",cnt,tsuri)>0);'; put 'rc1=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put 'rc2=metadata_getattr(tsuri,"StoredText",sourcecode_first32k);'; put 'end;'; put 'else if value="Stored Process" then do;'; put 'rc3=metadata_getattr(tsuri,"StoredText",StoredProcessConfiguration);'; put 'end;'; put 'cnt+1;'; put 'end;'; put '/* get context (should only be one) */'; put 'rc4=metadata_getnasn(stp_uri,"ComputeLocations",1,tsuri);'; put 'rc5=metadata_getattr(tsuri,"Name",servercontext);'; put 'end;'; put 'else do;'; put 'put ''ERR'' +(-1) "OR: could not find " path;'; put 'put (_all_)(=);'; put 'end;'; put '&md.put (_all_)(=);'; put 'run;'; put '%mend mm_getstpinfo ;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief service for creating the configuration tables in DEMO mode.'; put '@details'; put 'STP for creating the configuration tables in DEMO mode.'; put 'It also adds the STAGING directory as subdirectory to the BASE'; put 'library location.'; put 'Note - the CURLIB var is added during the build process.'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mf_getapploc.sas'; put '@li mf_getuser.sas'; put '@li mf_mkdir.sas'; put '@li mm_createdocument.sas'; put '@li mm_createlibrary.sas'; put '@li mm_createstp.sas'; put '@li mm_deletedocument.sas'; put '@li mm_deletestp.sas'; put '@li mm_getstpcode.sas'; put '@li mm_getstpinfo.sas'; put '@li mp_abort.sas'; put '@li mp_init.sas'; put '@li mpe_makedata.sas'; put '@li mpe_makedatamodel.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 '%mp_init()'; put '%global admin repo path; /* URL params from configurator */'; put '%let repo=%sysfunc(coalescec(&repo,Foundation));'; put '%let admin=%sysfunc(coalescec(&admin,dc-admin));'; put '%let dcpath=%sysfunc(coalescec(&path,NOTFOUND));'; put '%mp_abort(iftrue= ("&dcpath" = "NOTFOUND")'; put ',mac=&_program'; put ',msg=%str(PATH variable was not provided)'; put ')'; put '%let root=%mf_getapploc();'; put '%let work=%sysfunc(pathname(work));'; put '%let dc_libref=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let DC_LIBNAME=Data Controller(&dc_libref);'; put '%let dcpath=&dcpath/&dc_libref;'; put '%put _all_;'; put '%mf_mkdir(&dcpath/dc_staging)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Unable to create &dcpath using &sysuserid)'; put ')'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&root/services/admin,name=permTest)'; put '%mm_deletedocument(target=&root/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(User &_metaperson does not have WriteMetadata on metadata folder:'; put '&root )'; put ')'; put '/* check we have physical permissions to the DCLIB folder */'; put 'data _null_;'; put 'putlog "dcpath=&dcpath/permTest.txt";'; put 'putlog "sysuserid=&sysuserid";'; put 'data _null_;'; put 'file "&dcpath/permTest.txt";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(User &sysuserid does not have WRITE permissions on physical'; put 'directory: &dcpath )'; put ')'; put 'filename delfile "&dcpath/permTest.txt";'; put 'data _null_;'; put 'rc=fdelete(''delfile'');'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid could create (but not delete) &dcpath/permTest.txt )'; put ')'; put '/* get the server context from the current STP */'; put '%mm_getstpinfo(&_program,outds=work.stpinfo)'; put 'data _null_;'; put 'set work.stpinfo;'; put 'call symputx(''serverContext'',serverContext);'; put 'run;'; put '/* create the library */'; put '%mm_createlibrary('; put 'libname=&DC_LIBNAME'; put ',libref=&dc_libref'; put ',libdesc=Data Controller for SAS configuration tables'; put ',engine=BASE'; put ',tree=&root/data'; put ',servercontext=&serverContext'; put ',directory=&dcpath'; put ',mDebug=1'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to create &dc_libref library)'; put ')'; put '/* assign the library */'; put 'libname &dc_libref "&dcpath";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to assign the &dc_libref library)'; put ')'; put '/* make the tables */'; put '/* SASAdministrators */'; put '%mpe_makedatamodel(lib=&dc_libref)'; put '%mpe_makedata(lib=&DC_LIBREF,mpeadmins=&admin,path=%str(&dcpath))'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem creating tables in &DC_LIBREF library\n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT)'; put ')'; put '/* register tables in metadata */'; put 'proc metalib;'; put 'omr (library="&DC_LIBNAME");'; put 'folder="&root/data";'; put 'update_rule=(delete);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem registering metadata for tables in &DC_LIBREF library \n'; put 'os user=&sysuserid \n'; put 'metaperson=%mf_getuser() \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put '/* finally, update the app component. The user will need WM perms for this. */'; put 'data _null_;'; put 'file "&work/settings.sas" mod ;'; put 'put '' '';'; put 'put ''%global DC_LIBREF DC_LIBNAME DC_LIBLOC DC_STAGING_AREA DC_ADMIN_GROUP'';'; put 'put '' DC_REPO_USERS DC_DTTMTFMT DC_MACROS;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&DC_LIBREF;";'; put 'put ''%let DC_LIBNAME='' "&DC_LIBNAME;";'; put 'put ''%let DC_LIBLOC='' "&dcpath;";'; put 'put '' '';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'put ''/* This metadata group has unrestricted access to Data Controller */'';'; put 'put ''%let dc_admin_group='' "&admin;";'; put 'put '' '';'; put 'put ''/* This repository is used to query for users and groups */'';'; put 'put ''%let dc_repo_users='' "&repo;";'; put 'put '' '';'; put 'put ''/* This physical location is used for staging data and audit history */'';'; put 'put ''%let dc_staging_area=&dc_libloc/dc_staging;'';'; put 'put '' '';'; put 'put ''data _null_;'';'; put 'put '' set &DC_LIBREF..mpe_config(where=('';'; put 'put '' var_scope="DC" '';'; put 'put '' and &dc_dttmtfmt. lt tx_to'';'; put 'put '' and var_active=1'';'; put 'put " ));";'; put 'put " call symputx(var_name,var_value,''G'');";'; put 'put '' putlog var_name "=" var_value;'';'; put 'put "run;";'; put 'put '' '';'; put 'put ''/* to override any DC macros with client versions, place them below */'';'; put 'put ''options insert=(sasautos=("&dc_macros"));'';'; put 'run;'; put '/*'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put '*/'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=syscc=&syscc when preparing data_controller_settings)'; put ')'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=settings.sas'; put ',directory=&work'; put ',tree=&root/services/public'; put ',Server=&serverContext'; put ',stptype=2'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str('; put 'Problem updating the dc_staging area in'; put '&root/services/public/DataController Settings \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put ''

Data Controller Config

'';'; put 'put ''

The following items have been successfully configured:

'';'; put 'put "";'; put 'put "

Next Steps:

";'; put 'put "
  1. Populate ";'; put 'put "Table Lineage
  2. ";'; put 'put "
  3. Populate";'; put 'put "Data Catalog
  4. ";'; put 'put "
  5. Now, ";'; put 'put "hereLaunch!
";'; put 'run;'; put '/* We ran successfully, now remove configurator and makedata STPs */'; put '%mm_deletestp(target=&root/services/admin/configurator)'; put '%mm_deletestp(target=&_program)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=makelib; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; put '%macro mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; 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 mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; 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 mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; 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 '* 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Create a demo (base engine) library'; put '@details'; put 'Creates the library'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mm_createlibrary.sas'; put '@li mm_createdocument.sas'; put '@li mm_deletedocument.sas'; put '@li mp_abort.sas'; put '@li dc_assignlib.sas'; put '@li mm_deletestp.sas'; put '@li mm_createstp.sas'; put '@li mf_mkdir.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 dcpath;'; put '%let dclib=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let dclibname=Data Controller(&dclib);'; put '%let work=%sysfunc(pathname(work));'; put '%let dcpath=&dcpath/&dclib;'; put '%mf_mkdir(&dcpath)'; put '%mf_mkdir(&work)'; put '%put &=dcpath;'; put '/* check we have physical permissions to the DCLIB folder */'; put 'data _null_;'; put 'file "&dcpath/permTest.txt";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid does not have WRITE permissions on physical'; put 'directory: &dcpath )'; put ')'; put 'filename delfile "&dcpath/permTest.txt";'; put 'data _null_;'; put 'rc=fdelete(''delfile'');'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid could create (but not delete) &dcpath/permTest.txt )'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to write to &dcpath)'; put ')'; put 'data _null_;'; put 'pgm="&_program";'; put 'rootlen=length(trim(pgm))-length("/services/admin/makelib");'; put 'root=substr(pgm,1,rootlen);'; put 'putlog root=;'; put 'call symputx(''deploy_dir'',root);'; put 'run;'; put 'options noquotelenmax ps=max;'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&deploy_dir/services/admin,name=permTest)'; put '%mm_deletedocument(target=&deploy_dir/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &_metaperson does not have WriteMetadata on SAS folder:'; put '&deploy_dir )'; put ')'; put '/**'; put '* Create library and load data'; put '*/'; put '%let mpelibname=Data Controller (&dclib);'; put '%mm_createlibrary('; put 'libname=&mpelibname'; put ',libref=&dclib'; put ',libdesc=Configuration tables for the MacroPeople Data Controller application'; put ',engine=BASE'; put ',tree=&deploy_dir/data'; put ',servercontext=SASApp'; put ',directory=&dcpath'; put ',mDebug=1)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to create &dclib library)'; put ')'; put '/* get direct libref */'; put '%dc_assignlib(READ,&dclib)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to assign &dclib library)'; put ')'; put '/* create an initial settings service (this will be overwritten in the'; put 'data update step)'; put '*/'; put '%let temploc=&work/temp.txt;'; put 'data _null_;'; put 'file "&temploc" ;'; put 'put ''/* Data Controller Precode */'' / / ;'; put 'put '' '';'; put 'put ''options noquotelenmax ps=max;'';'; put 'put ''%global DC_LIBREF DC_LIBNAME;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&dclib;";'; put 'put ''%let DC_LIBNAME='' "&mpelibname;";'; put 'put '' '';'; put 'put ''/* get physical path for direct libname - needed to track requests */'';'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref=''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'run;'; put '%mm_deletestp(target=&deploy_dir/services/public/Data_Controller_Settings)'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=temp.txt'; put ',directory=&work'; put ',tree=&deploy_dir/services/public'; put ',Server=SASApp'; put ',stptype=2'; put ',mdebug=1'; put ',stpdesc=Data Controller Configuration'; put ',minify=NO)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue creating settings stp)'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put "

Library &dclib successfully assigned

";'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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(),8.6);'; 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=##%mf_getuniquefileref(prefix=BTMP);'; 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 work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.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=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '%macro mpe_refreshcatalogs(lib,cat=#all);'; put '%let lib=%upcase(&lib);'; put '%let cat=%upcase(&cat);'; put '%put running &sysmacroname &lib for &cat;'; put 'proc sql;'; put 'create table work.catdata as'; put 'select libname as libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'created,'; put 'modified,'; put 'alias,'; put 'level'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put '%if &cat ne #ALL %then %do;'; put 'and upcase(memname)="&cat"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib objects extraction)'; put ')'; put '/* load mpe_datacatalog_CATS */'; put 'proc sql;'; put 'create table datacats as select distinct libref,memname from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_CATS'; put ',append_dsn=datacats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* load mpe_datacatalog_objsS */'; put 'proc sql;'; put 'create table dataobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'alias'; put 'from catdata;'; put 'quit;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_OBJS'; put ',append_dsn=dataobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_OBJS;'; put 'proc sql;'; put 'create table statusobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'created,'; put 'modified,'; put 'level'; put 'from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_OBJS'; put ',append_dsn=statusobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_cats;'; put 'proc sql;'; put 'create table statuscats as'; put 'select libref,'; put 'memname,'; put 'count(*) as nobjs,'; put 'min(created) as created,'; put 'max(modified) as modified'; put 'from catdata'; put 'group by 1,2;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_cats'; put ',append_dsn=statuscats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%mend mpe_refreshcatalogs;'; 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 '%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 '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; 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 work.sumcat as'; put 'select libname as libref,'; put 'count(distinct memname) as catalog_cnt'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put 'group by 1;'; put 'create table work.sumdsn as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put 'create table work.statuslibs as'; put 'select coalesce(a.libref,b.libref) as libref,'; put 'a.libsize,'; put 'a.table_cnt,'; put 'b.catalog_cnt'; put 'from work.sumdsn a'; put 'full join work.sumcat b'; put 'on a.libref=b.libref;'; 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(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%mpe_refreshcatalogs(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%mpe_refreshcatalogs(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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(),8.6);'; 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=##%mf_getuniquefileref(prefix=BTMP);'; 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 work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.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=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshtablelineage; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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(),8.6);'; 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=##%mf_getuniquefileref(prefix=BTMP);'; 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 work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.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=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"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 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshtablelineage.sas'; put '@brief updates the table level lineage'; put '@details extracts all sources/targets from every job'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li bitemporal_dataloader.sas'; put '@li mp_binarycopy.sas'; put '@li mf_getuniquefileref.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 '/* get list of libraries */'; put '%let fileref1=%mf_getuniquefileref();'; put 'filename &fileref1 temp;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'JobSAS'; put ''; put '8452'; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put '"'; put 'out=&fileref1'; put ';'; put 'run;'; put '/* create an XML map and extract dependencies from response */'; put '%macro getTables(type=);'; put '%local x;'; put '%do x=1 %to 2;'; put '%local dir;'; put '%if &x=1 %then %let dir=Source;'; put '%else %let dir=Target;'; put '%local y;'; put '%do y=1 %to 3;'; put '%local maptype;'; put '%if &y=1 %then %let maptype=ClassifierMap;'; put '%else %if &y=2 %then %let maptype=Select;'; put '%else %if &y=3 %then %let maptype=Join;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "";'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities/TransformationActivi"@;'; put 'put "ty/Steps/TransformationStep/Transformations/&maptype/Classifier"@;'; put 'put "&dir.s/&type";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Name";'; put 'put "characterstring128";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations"@;'; put 'put "/&maptype/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations/"@;'; put 'put "&maptype/Classifier&dir.s/&type/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=&fileref1 xmlmap=sxlemap;'; put 'data work.&dir.&type/view=work.&dir.&type;'; put 'set _xml_.&dir.&type;'; put 'length tabletype maptype $16 tabledirection $1;'; put 'jobname=upcase(jobname);'; put 'tabletype="&type";'; put 'maptype="&maptype";'; put 'if "&dir"="Source" then tabledirection="R";'; put 'else tabledirection=''F'';'; put 'run;'; put 'proc append base=work.alldata data=work.&dir.&type;'; put 'run;'; put 'libname _XML_ clear;'; put '%end;'; put '%end;'; put '%mend getTables;'; put '/* list of types:'; put 'https://support.sas.com/documentation/cdl/en/omamodref/63903/HTML/default/viewer.htm#classifiermap.htm'; put '*/'; put '%getTables(type=PhysicalTable)'; put '%getTables(type=ExternalTable)'; put '%getTables(type=QueryTable)'; put '%getTables(type=RelationalTable)'; put '%getTables(type=Report)'; put '%getTables(type=Cube)'; put '%getTables(type=DataTable)'; put '/* remove dups and get tables */'; put 'proc sort data=work.alldata(keep=jobid jobname tableid tabletype tabledirection)'; put 'out=work.sorted nodupkey;'; put 'by _all_;'; put 'run;'; put 'proc sort data=work.sorted(keep=tableid) out=work.tables nodupkey;'; put 'by tableid;'; put 'run;'; put '/* this bit is slow due to lookups but given the different table types'; put 'it was the easiest approach */'; put 'data work.tables2;'; put 'length tablename liburi puri $64 libref schemaname $8 ;'; put 'if _n_=1 then call missing(tablename, liburi, puri, libref, schemaname);'; put 'set work.tables;'; put 'drop rc liburi;'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc= metadata_getattr(liburi, "SchemaName", SchemaName);'; put 'if ^missing(SchemaName) then do;'; put 'if metadata_getnasn(liburi,"UsedByPackages",1,puri)>0 then do;'; put 'rc=metadata_getattr(puri,"Libref",libref);'; put 'end;'; put 'end;'; put 'else rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'tablename=upcase(tablename);'; put 'run;'; put 'proc sql;'; put 'create table work.augmented as'; put 'select a.*'; put ',b.tablename'; put ',b.libref'; put 'from work.sorted a'; put 'left join work.tables2 b'; put 'on a.tableid=b.tableid;'; put 'create table work.mpe_lineage_tabs as'; put 'select distinct'; put 'coalesce(a.jobid,b.jobid) as jobid,'; put 'coalesce(a.jobname,b.jobname) as jobname,'; put 'coalesce(a.tableid,"N/A") as srctableid,'; put 'a.tabletype as srctabletype,'; put 'a.tablename as srctablename,'; put 'coalesce(a.libref,''nolib'') as srclibref,'; put 'coalesce(b.tableid,"N/A") as tgttableid,'; put 'b.tabletype as tgttabletype,'; put 'b.tablename as tgttablename,'; put 'coalesce(b.libref,''nolib'') as tgtlibref'; put 'from work.augmented(where=(tabledirection=''R'')) a'; put 'full join work.augmented(where=(tabledirection=''F'')) b'; put 'on a.jobid=b.jobid'; put ';'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=MPE_LINEAGE_TABS'; put ',append_dsn=MPE_LINEAGE_TABS'; put ',PK=jobid srctableid tgttableid'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%mp_binarycopy(inref=&fileref1, outref=_webout)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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(),8.6);'; 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=##%mf_getuniquefileref(prefix=BTMP);'; 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 work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.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=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '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 ';'; put '/* get latest reason text */'; put 'create table work.reviews as'; put 'select a.*'; put ',b.reviewed_on_dttm'; put ',b.reviewed_by_nm as approver'; put ',b.review_reason_txt'; put 'from work.submits a'; put 'left join &mpelib..mpe_review b'; put 'on a.table_id=b.table_id'; put 'order by a.table_id desc, b.reviewed_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.reviews;'; put 'by descending table_id descending reviewed_on_dttm;'; put 'if first.table_id;'; 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,missing=STRING)'; put '%webout(OBJ,histparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 'end;'; put 'else do;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 $2000 fref fref2 $8 file_or_folder $6 filename $255'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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(),8.6);'; 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=##%mf_getuniquefileref(prefix=BTMP);'; 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 work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.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=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 'end;'; put 'else do;'; 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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=%sysfunc(datetime())'; 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 %str(WARN)ING: 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 '%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 '* 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 'putlog (_all_)(=);'; 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 %str(WARN)ING: &=authcheck &=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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 memname;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%if "%scan(&libds,2,-)" ne "FC" %then %do;'; put '%let memname=%scan(&libds,2,.);'; put '%mp_dsmeta(&libds, outds=&outds)'; put '%end;'; put '%else %do;'; put '%let memname=%scan(&libds,2,.-);'; put 'data &outds;'; put '&lenstmt;'; put 'set sashelp.vcatalg;'; put 'ods_table=cats(objtype);'; put 'name=cats(objname);'; put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');'; put 'where libname="%scan(&libds,1,.)" and memname="&memname";'; put 'keep ods_table name value;'; put 'run;'; put 'proc sort; by ods_table name;run;'; put '%end;'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mm_getgroupmembers('; put 'group /* metadata group for which to bring back members */'; put ',outds=work.mm_getgroupmembers /* output dataset to contain the results */'; put ',emails=NO /* set to yes to bring back emails also */'; put ',id=NO /* set to yes if passing an ID rather than group name */'; put ')/*/STORE SOURCE*/;'; put 'data &outds ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'euri email length=$64'; put 'GroupDesc length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp uriMem rcGrp rcMem rc i j arc ;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put '%if &id=NO %then %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Name=''&group''",i,uriGrp);'; put '%end;'; put '%else %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Id=''&group''",i,uriGrp);'; put '%end;'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName, MemberType, email);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'if membertype=''User'' and "&emails"=''YES'' then do;'; put 'if metadata_getnasn(uriMem,"EmailAddresses",1,euri)>0 then do;'; put 'arc=metadata_getattr(euri,"Address",email);'; put 'end;'; put 'end;'; put 'output;'; put 'j+1;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_getgroupmembers;'; put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);'; put '%mm_getgroupmembers(&group,outds=&outds)'; 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'' or format=:''NLDATM'''; put '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'' or format=:''NLDATE'''; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '
versions
'; put 'history of DC versions for this particular table'; 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_getversions.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'' or format=:''NLDATM'''; put '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'' or format=:''NLDATE'''; put 'then do;'; put '/* see bottom of file for more date formats!! */'; put '/* also when updating, update stagedata.sas and mp_getcols.sas'; put 'and mpe_loader.sas */'; put 'colType=cats(coltype,'',"type":"date","dateFormat":"YYYY-MM-DD"'''; put '/*colType=cats(coltype,'',"type":"date","dateFormat":"MM/DD/YYYY"''*/'; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript dates */'; put 'call symput(''jsdtvars'',symget(''jsdtvars'')!!'' ''!!name);'; put 'end;'; put 'else if format=:''TIME'' or format=:''HHMM'' then do;'; put 'colType=cats(coltype,'',"type":"time","timeFormat":"HH:mm:ss"'''; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript times */'; put 'call symput(''jstmvars'',symget(''jstmvars'')!!'' ''!!name);'; put 'end;'; put 'else do;'; put '/* is standard numeric but need to ascertain precision */'; put 'retain base ''000000000000000000'';'; put 'if formatd>0 then numFormat=cats(''.'',substr(base,1,formatd));'; put 'colType=cats(coltype,'',"type":"numeric","format":"0'',numFormat,''"}'');'; put 'end;'; put 'end;'; put 'else colType=cats(coltype,''}'');'; put 'length concatcoltype $32767;'; put 'retain concatcoltype;'; put 'concatcoltype=cats(concatcoltype,coltype);'; put 'if last then call symputx(''colType'',strip(concatcoltype),''g'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at 283 (null step) in &_program)'; put ')'; put 'PROC FORMAT;'; put 'picture yymmddThhmmss (default=28) other=''%0Y-%0m-%0d %0H:%0M:%0s'''; put '(datatype=datetime);'; put 'picture JSyymmdd other=''%0Y-%0m-%0d'' (datatype=date);'; put 'picture JShhmmss (default=16) other=''%0H:%0M:%0s'' (datatype=time);'; put 'RUN;'; put '/* before we send the data, need to rebuild all date & datetime vars as char*/'; put '%let finalvars=%mf_getvarlist(work.outdata);'; put 'data sasdata;'; put '/* set formats & col order ahead of rename+import */'; put 'informat &finalvars ;'; put '/* read dataset and rename date / datetime vars as necessary */'; put 'set outdata'; put '%if %length(&jsdttmvars&jsdtvars&jstmvars)>0 %then %do;'; put '(rename=('; put '%local dtvarnum dtvar tmvar;'; put '/* temp datetime vars end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars ,&dtvarnum);'; put '&dtvar=_____&dtvarnum._____'; put '%end;'; put '/* temp date vars do not end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan( &jsdtvars,&dtvarnum);'; put '&dtvar=_____&dtvarnum'; put '%end;'; put '/* temp time vars end in ___tm */'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan( &jstmvars,&tmvarnum);'; put '&tmvar=_____&tmvarnum.___tm'; put '%end;'; put '))'; put '%end;'; put ';'; put '%if %length(&jsdttmvars)>0 %then %do ;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum._____,yymmddThhmmss28.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum._____;'; put '%end;'; put '%end;'; put '%if %length(&jsdtvars)>0 %then %do;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan(&jsdtvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum,JSyymmdd.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum;'; put '%end;'; put '%end;'; put '%if %length(&jstmvars)>0 %then %do;'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan(&jstmvars,&tmvarnum);'; put '&tmvar=cats(put(_____&tmvarnum.___tm,JShhmmss14.));'; put 'if &tmvar="ERROR" then call missing(&tmvar);'; put 'drop _____&tmvarnum.___tm;'; put '%end;'; put '%end;'; put 'output;'; put 'run;'; put '/* get the relevant approvers for the drop down */'; put '%put getting approvers;'; put '%local sas_groups sas_i sas_group;'; put 'proc sql noprint;'; put 'select distinct sas_Group into: sas_groups separated by "|"'; put 'from &mpelib..mpe_security'; put 'where libref="%scan(&orig_libds,1,.)"'; put 'and dsn="%scan(&orig_libds,2,.)"'; put 'and access_level=''APPROVE'''; put 'and &dc_dttmtfmt. lt TX_TO;'; put '%if %length(&sas_groups)=0 %then %do;'; put '%dc_getgroupmembers(&dc_admin_group,outds=work.access1)'; put '%end;'; put '%else %do sas_i=1 %to %sysfunc(countw(&sas_groups,%str(|)));'; put '%let sas_group=%scan(&sas_Groups,&sas_i,%str(|));'; put '%dc_getgroupmembers(&sas_group,outds=work.temp&sas_i)'; put 'proc append base=work.access1 data=work.temp&sas_i;run;'; put '%end;'; put '%mend mpestp_getdata;'; put '%mpestp_getdata()'; put '%mp_abort(mode=INCLUDE)'; put '/* extract column level security rules */'; put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.sasdata'; put ',mode=EDIT'; put ',clsds=&mpelib..mpe_column_level_security'; put ',groupds=work.groups /* was created in mpe_filtermaster */'; put ',outds=work.sasdata1'; put ',outmeta=work.cls_rules'; put ')'; put '/* get labels */'; put '%mpe_getlabels(COLUMNS,sasdata1,outds=spec)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc extracting spec info)'; put ')'; put '/* extract col info */'; put '%mp_getcols(&libds, outds=cols1)'; put '/* join with cls rules */'; put 'proc sql;'; put 'create table work.cols as'; put 'select a.NAME'; put ',a.VARNUM'; put ',a.LABEL'; put ',a.FMTNAME'; put ',a.DDTYPE'; put ',case b.cls_hide'; put 'when 1 then ''HIDE'''; put 'when 0 then ''EDIT'''; put 'else ''READ'' end as CLS_RULE'; put ',c.memlabel'; put ',c.desc'; put ',c.longdesc'; put 'from work.cols1 a'; put 'left join work.cls_rules b'; put 'on a.NAME=b.CLS_VARIABLE_NM'; put 'left join work.spec c'; put 'on a.NAME=c.NAME;'; put 'proc sql;'; put 'create table approvers as select distinct membername as personname'; put ',membername as email, membername as userid'; put 'from work.access1;'; put '/*'; put 'create table access3 as select b.userid,b.email'; put 'from access2 a'; put ',support.users b'; put 'where a.personname=b.userid'; put 'and a.personname ne "%mf_getuser()"'; put 'and %sysfunc(datetime()) lt b.tx_to_dttm'; put 'order by 1;'; put '*/'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'input;'; put 'length filter_text $32767;'; put 'retain filter_text;'; put 'filter_text=catx('' '',filter_text,_infile_);'; put 'if eof then do;'; put 'if cats(filter_text)=''1=1'' then filter_text='''';'; put 'call symputx(''filter_text'',filter_text);'; put 'end;'; put 'run;'; put '%put params;'; put '%let ismap=0;'; put 'proc sql noprint;'; put 'select count(*) into: ismap from &mpelib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&orig_libds" and &dc_dttmtfmt. le TX_TO;'; put 'data sasparams;'; put 'length colHeaders $20000 filter_text $32767;'; put 'colHeaders=cats(upcase("%mf_getvarlist(sasdata1,dlm=%str(,))"));'; put 'pkCnt=countw("&pk");'; put 'pk="&pk";'; put 'dtvars=compbl("&jsdtvars");'; put 'dttmvars=compbl("&jsdttmvars");'; put 'tmvars=compbl("&jstmvars");'; put 'length coltype $32000;'; put 'coltype=symget(''coltype'');'; put 'loadtype=symget(''loadtype'');'; put 'if trim(symget(''rk_underlying'')) ne '''' then rk_flag=1;'; put 'else rk_flag=0;'; put 'filter_text=symget(''filter_text'');'; put 'if %mf_nobs(work.cls_rules)=0 then cls_flag=0;'; put 'else cls_flag=1;'; put 'put (_all_)(=);'; put 'if "&orig_libds"="&mpelib..MPE_XLMAP_DATA" or &ismap ne 0 then ismap=1;'; put 'else ismap=0;'; put 'run;'; put '/* Extract validation DQ Rules */'; put 'proc sort data=&mpelib..mpe_validations'; put '(where=(&dc_dttmtfmt. le TX_TO'; put 'and BASE_LIB="%scan(&orig_libds,1,.)" and BASE_DS="%scan(&orig_libds,2,.)"'; put 'and rule_active=1))'; put 'out=dqrules (keep=base_col rule_type rule_value);'; put 'by base_col rule_type rule_value;'; put 'run;'; put '/* merge with NOTNULL constraints in the physical table */'; put 'proc sql;'; put 'create table _data_ as'; put 'select * from dqrules'; put 'union'; put 'select upcase(name) as base_col'; put ',''NOTNULL'' as rule_type'; put ','''' as rule_value'; put 'from dictionary.columns'; put 'where upcase(libname)="%scan(&orig_libds,1,.)"'; put 'and upcase(memname)="%scan(&orig_libds,2,.)"'; put 'and upcase(name) in (select name from vars3)'; put 'and notnull=''yes'''; put 'order by 1,2,3;'; put 'data dqrules;'; put 'set &syslast;'; put 'by base_col rule_type rule_value;'; put 'if last.rule_type;'; put 'if rule_type in (''HARDSELECT'',''SOFTSELECT'') and countw(rule_value)=3 then'; put 'do;'; put 'retain x 0; x+1;'; put 'call symputx(cats(''source'',x),rule_value);'; put '%let sourcecnt=0;'; put 'call symputx(''sourcecnt'',x);'; put 'call symputx(cats(''base_col'',x),base_col);'; put 'end;'; put 'run;'; put 'proc sql;'; put 'create table dqdata as'; put 'select distinct base_column as base_col length=32'; put ',upcase(base_column) as rule_value length=74 /* deprecated */'; put ',selectbox_value as rule_data length=1000'; put ',selectbox_order'; put 'from &mpelib..mpe_selectbox'; put 'where &dc_dttmtfmt. lt ver_to_dttm'; put 'and select_lib="%scan(&orig_libds,1,.)"'; put 'and select_ds="%scan(&orig_libds,2,.)";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc during DQ rule validation)'; put ')'; put '/* extract selectbox data */'; put '%macro dq_selects();'; put '%local x source lib ds col;'; put '%do x=1 %to &sourcecnt;'; put '%let source=&&source&x;'; put '%let lib=%scan(&source,1,.);'; put '%let ds=%scan(&source,2,.);'; put '%let col=%scan(&source,3,.);'; put '%put &=source;'; put '%put &=lib;'; put '%dc_assignlib(READ,&lib)'; put 'proc sql;'; put 'create table dqdata&x as'; put 'select distinct "&&base_col&x" as base_col length=32'; put ',"&source" as rule_value length=74'; put ',cats(&col) as rule_data length=1000'; put ',&col as tmp_order'; put 'from &lib..&ds'; put 'order by tmp_order;'; put '/* ensure both numerics and char vals are ordered correctly */'; put 'data work.dqdata&x (drop=tmp_order);'; put 'set work.dqdata&x;'; put 'selectbox_order=_n_;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)'; put ')'; put 'proc append base=dqdata data=dqdata&x;run;'; put 'proc sql; drop table dqdata&x;'; put '%end;'; put '%mend dq_selects;'; put '%dq_selects()'; put 'proc sort data=dqdata;'; put '/* order by selectbox_order then the value */'; put 'by base_col selectbox_order rule_data;'; put 'run;'; put '%mp_getmaxvarlengths(work.sasdata1,outds=maxvarlengths)'; put 'data maxvarlengths;'; put 'set maxvarlengths;'; put 'if name=''_____DELETE__THIS__RECORD_____'' then mAXLEN=3;'; put 'run;'; put 'data xl_rules;'; put 'set &mpelib..mpe_excel_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(xl_libref)="%scan(&orig_libds,1,.)";'; put 'where also upcase(xl_table)="%scan(&orig_libds,2,.)";'; put 'where also xl_active=1;'; put 'keep xl_column xl_rule;'; put 'run;'; put '%mpe_dsmeta(&orig_libds, outds=dsmeta)'; put '%mpe_getversions(&mpelib,'; put '%scan(&orig_libds,1,.),'; put '%scan(&orig_libds,2,.),'; put 'outds=versions'; put ')'; put '/* send to the client */'; put '%webout(OPEN)'; put '%webout(OBJ,approvers)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,dqdata,missing=STRING)'; 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,versions)'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 $2000 fref fref2 $8 file_or_folder $6 filename $255'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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,missing=STRING)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 'end;'; put 'else do;'; 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 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 $2000 fref fref2 $8 file_or_folder $6 filename $255'; 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 ',reason_txt = symget(''submitted_reason_txt'');'; 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'' or format2=:''NLDATM'''; put '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 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; 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 '/* 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 _____DELETE__THIS__RECORD_____ length=$3 &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 warnings */'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=restore; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mpe_checkrestore(load_ref,'; put 'outresult=ALLOW_RESTORE,'; put 'outreason=REASON'; put ');'; put '%global &outresult &outreason;'; put '%let &outresult=NO;'; put '%let &outreason=NOTFOUND;'; put '/* check if there is actually a version to restore */'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &dc_libref..mpe_audit'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No entry for &load_ref in MPE_AUDIT;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let allow_restore=YES;'; put '%let reason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%local libds;'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: libds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let allow_restore=YES;'; put '%let reason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; 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 'end;'; put 'else do;'; 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 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 $2000 fref fref2 $8 file_or_folder $6 filename $255'; 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 ',reason_txt = symget(''submitted_reason_txt'');'; 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'' or format2=:''NLDATM'''; put '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 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; 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 '/* 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 _____DELETE__THIS__RECORD_____ length=$3 &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 warnings */'; 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 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 ',''NLDATM'') 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'',''NLDATE'') 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 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; 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 '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; 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 '%local vlen&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 '%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 '/** @cond */'; put '%macro mp_stripdiffs(libds'; put ',loadref'; put ',difftable'; put ',filtervar=0'; put ',outds=work.mp_stripdiffs'; 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 '%let libds=%upcase(&libds);'; put '/* safety checks */'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc on entry. Clean session required!)'; put ')'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= (%mf_islibds(&libds)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid library.dataset reference - %superq(libds))'; put ')'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 ds5 fref1 filterstr;'; put '%let fref1=%mf_getuniquefileref();'; put '%if &filtervar ne 0 %then %let filterstr=%superq(&filtervar);'; put '%else %let filterstr=%str(1=1);'; put '/* get timestamp of the diff to be reverted */'; put '%local ts;'; put 'proc sql noprint;'; put 'select put(processed_dttm,datetime19.6) into: ts'; put 'from &difftable where load_ref="&loadref";'; put '%mp_abort(iftrue= (&sqlobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Load ref %superq(loadref) not found!)'; put ')'; put '/* extract diffs for this base table from this timestamp onwards */'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_diffs));'; put 'create table &ds1 (drop=libref dsn) as'; put 'select * from &difftable'; put 'where upcase(cats(libref))="%scan(&libds,1,.)"'; put 'and upcase(cats(dsn))="%scan(&libds,2,.)"'; put 'and processed_dttm ge "&ts"dt'; put 'order by processed_dttm desc, key_hash, is_pk;'; put '/* extract key values only */'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_pks));'; put '%local keyhash processed;'; put '%let keyhash=%upcase(%mf_getuniquename(prefix=mpsdvar_keyhash));'; put '%let processed=%upcase(%mf_getuniquename(prefix=mpsdvar_processed));'; put 'create table &ds2 as'; put 'select key_hash as &keyhash,'; put 'tgtvar_nm,'; put 'tgtvar_type,'; put 'coalescec(oldval_char,newval_char) as charval,'; put 'coalesce(oldval_num, newval_num) as numval,'; put 'processed_dttm as &processed'; put 'from &ds1'; put 'where is_pk=1'; put 'order by &keyhash, &processed;'; put '/* grab pk values */'; put '%local pk;'; put 'select distinct upcase(tgtvar_nm) into: pk separated by '' '' from &ds2;'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_keychar));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''C''))'; put 'out=&ds3(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var charval;'; put 'run;'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_keynum));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''N''))'; put 'out=&ds4(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var numval;'; put 'run;'; put '/* shorten the lengths */'; put '%mp_ds2squeeze(&ds3,outds=&ds3)'; put '%mp_ds2squeeze(&ds4,outds=&ds4)'; put '/* now merge to get all key values and de-dup */'; put '%let ds5=%upcase(work.%mf_getuniquename(prefix=mpsd_merged));'; put 'data &ds5;'; put 'length &keyhash $32 &processed 8;'; put 'merge &ds3 &ds4;'; put 'by &keyhash &processed;'; put 'if not missing(&keyhash);'; put 'run;'; put 'proc sort data=&ds5 nodupkey;'; put 'by &pk;'; put 'run;'; put '/* join to base table for preliminary stage DS */'; put 'proc sql;'; put 'create table &outds as select "No " as _____DELETE__THIS__RECORD_____'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put ',a.%scan(&pk,&x,%str( ))'; put '%end;'; put '%local notpkcols;'; put '%let notpkcols=%upcase(%mf_getvarlist(&libds));'; put '%let notpkcols=%mf_wordsinstr1butnotstr2(str1=¬pkcols,str2=&pk);'; put '%do x=1 %to %sysfunc(countw(¬pkcols,%str( )));'; put ',b.%scan(¬pkcols,&x,%str( ))'; put '%end;'; put 'from &ds5 a'; put 'left join &libds (where=(&filterstr)) b'; put 'on 1=1'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put 'and a.%scan(&pk,&x,%str( ))=b.%scan(&pk,&x,%str( ))'; put '%end;'; put ';'; put '/* create SAS code to apply to stage_ds */'; put 'data _null_;'; put 'set &ds1;'; put 'file &fref1 lrecl=33000;'; put 'length charval $32767;'; put 'if _n_=1 then put ''proc sql noprint;'';'; put 'by descending processed_dttm key_hash is_pk;'; put 'if move_type=''M'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'if not last.is_pk then put '','';'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'else if move_type=''A'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''Yes'' where 1=1 "@@;'; put 'end;'; put '/* gating if - as only need PK now */'; put 'if is_pk=1;'; put 'put '' AND '' tgtvar_nm ''='' @@;'; put 'cnt=count(newval_char,''"'');'; put 'charval=quote(trim(substr(newval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put newval_num @@;'; put 'end;'; put 'else if move_type=''D'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''No'' " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " ," tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'if last.key_hash then put '';'';'; put 'run;'; put '/* apply the modification statements */'; put '%inc &fref1/source2 lrecl=33000;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4, &ds5;'; put 'file &fref1 clear;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'infile &fref1;'; put 'input;'; put 'if _n_=1 then putlog "Contents of SQL adjustments";'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_stripdiffs;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file restore.sas'; put '@brief Restores a data version'; put '@details Only applies if the history is stored in the audit table'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_nobs.sas'; put '@li mp_abort.sas'; put '@li mp_ds2csv.sas'; put '@li mp_stripdiffs.sas'; put '@li mpeinit.sas'; put '@li mpe_checkrestore.sas'; put '@li mpe_loader.sas'; put '

Service Inputs

'; put '
restore_in
'; put '|LOAD_REF:$32|'; put '|---|'; put '|DCXXXXXX|'; 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 loadref=;'; put 'data _null_;'; put 'set work.restore_in;'; put 'call symputx(''loadref'',load_ref);'; put 'run;'; put '/**'; put '* Check if user has basic access permission to RESTORE the table'; put '*/'; put '%put checking access;'; put '%global allow_restore reason;'; put '%mpe_checkrestore(&loadref,outresult=ALLOW_RESTORE,outreason=REASON)'; put '%mp_abort(iftrue= (&ALLOW_RESTORE ne YES)'; put ',mac=&_program..sas'; put ',msg=%str(Cannot restore because: &reason)'; put ')'; put '/* grab the base DS */'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: tgtds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&loadref";'; put '/* find the audit table */'; put 'select coalescec(audit_libds,"&mpelib..MPE_AUDIT"), loadtype, var_txto'; put 'into: difftable, :loadtype, :txto'; put 'from &mpelib..MPE_TABLES'; put 'where libref="%scan(&tgtds,1,.)"'; put '& dsn="%scan(&tgtds,2,.)"'; put '& &dc_dttmtfmt0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after stripdiffs)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.mp_stripdiffs)=0)'; put ',mac=&_program..sas'; put ',msg=%str(THERE ARE NO DIFFERENCES TO APPLY)'; put ')'; put '/* create a new load ref */'; 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 */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put 'options notes mprint;'; put 'libname approve "&dir";'; 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 '/* copy the diffs dataset */'; put 'data approve.jsdset;'; put 'length _____DELETE__THIS__RECORD_____ $3;'; put 'if 0 then call missing(_____DELETE__THIS__RECORD_____);'; put 'set work.mp_stripdiffs;'; put 'run;'; put '/* export to csv */'; put '%mp_ds2csv(approve.jsdset'; put ',dlm=COMMA'; put ',outfile="&dir/%trim(&tgtds).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=Restoring &loadref'; 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 work.restore_out;'; put 'loadref="&mperef";'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,restore_out)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 'end;'; put 'else do;'; 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 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 $2000 fref fref2 $8 file_or_folder $6 filename $255'; 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 ',reason_txt = symget(''submitted_reason_txt'');'; 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'' or format2=:''NLDATM'''; put '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 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; 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 '/* 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 _____DELETE__THIS__RECORD_____ length=$3 &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 warnings */'; 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 ',''NLDATM'') 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'',''NLDATE'') 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 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; 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 '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; 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 '%local vlen&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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '/* PK fields should not be upcased if we are trying to delete records */'; put 'if upcase(_____DELETE__THIS__RECORD_____) ne "YES" then do;'; put 'LIBREF=upcase(LIBREF);'; put 'DSN=upcase(DSN);'; put 'end;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/lineage; %let service=fetchcollineage; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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(),8.6);'; 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=##%mf_getuniquefileref(prefix=BTMP);'; 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 work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.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=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"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 meta_mapper('; put 'baseds=work.allmap /* base table to contain metamapping (two level) */'; put ', stageds=col_meta /* temp table to append to base*/'; put ', metaid=OMSOBJ:Column\A5HOSDWY.BF00LWQT'; put ', direction=REVERSE /* either REVERSE or FORWARDS */'; put ', level=0 /* system var - show level of nesting */'; put ', job= /* system var - avoid looping same source */'; put ', levelcheck=50 /* system var - avoid going too deep down the rabbit hole */'; put ', append=NO /* system var - when YES means appending within nested loop */'; put ');'; put '%if &level>&levelcheck %then %return;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%if &direction=REVERSE %then %do;'; put '%let start=Target;'; put '%let finish=Source;'; put '%end;'; put '%else %do;'; put '%let start=Source;'; put '%let finish=Target;'; put '%end;'; put '%if &append=NO %then %do;'; put 'proc datasets lib=work;'; put 'delete %scan(&baseds,2,.);'; put 'quit;'; put '%let index_statement=(index=(HASH/unique));'; put '%end;'; put '%else %let index_statement=;'; put 'data &stageds &index_statement ;'; put 'length HASH $32'; put 'jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform targettablename targetcolname targetcoluri'; put 'uri targettableuri tfmuri sourcetableuri scuri tpuri tmpuri mturi $256'; put 'Derived_Rule $500 Marker_ID Name_ID N_Name LibRef engine sourcePublicType'; put 'targetPublicType $64;'; put 'keep HASH jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform'; put 'targettablename targetcolname targetcoluri Derived_Rule level;'; put '/* proc transpose logic only */'; put 'length sourceshorttablename sourcemembertype sourcelocation'; put 'assoc assocuri name sturi foundrefuri foundfinishuri'; put 'targetshorttablename targetlocation targetmembertype trafoName $256'; put 'sourceshorttableuri sourceshortcoluri checkrdm targetshorttableuri'; put 'targetshortcoluri selected_direction $17'; put 'lturi _location $200;'; put 'call missing (of _all_);'; put '&start.coluri="&METAID";'; put 'level=&level;'; put '/* first get table associated with the column */'; put 'if metadata_getnasn(&start.coluri,''Table'',1,&start.tableuri)=0 then do;'; put 'putlog "ERR" "OR: Table not found";'; put 'stop;'; put 'end;'; put 'rc=metadata_getattr(&start.tableuri,"Name",&start.tablename);'; put 'rc=metadata_getattr(&start.coluri,"Name",&start.colname);'; put 'rc=metadata_getattr(&start.tableuri,''PublicType'',&start.PublicType);'; put 'if (metadata_getnasn(&start.tableuri, "TablePackage",1, tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&start.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&start.tablename'; put ');'; put 'end;'; put 'else if (&start.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&start.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&start.tablename);'; put 'end;'; put 'else &start.tablename = ''work. ''||trim(lowcase(&start.tablename));'; put '/* now loop the Source / TargetFeatureMaps */'; put 'tfm=1;'; put 'do while(metadata_getnasn(&start.coluri,"&start.FeatureMaps",tfm,tfmuri)>0);'; put 'call missing(derived_rule);'; put 'rc=metadata_getattr(tfmuri,''TransformRole'',map_type);'; put '/* get job and step name */'; put 'if (metadata_getnasn(tfmuri,''AssociatedClassifierMap'',1,tmpuri)<1) then'; put 'do;'; put 'rc=metadata_getnasn(tfmuri,"&finish.Transformations",1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''AssociatedClassifierMap'',1,tmpuri);'; put 'end ;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',map_transform);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'if Map_Type = ''DERIVED'' then do;'; put 'if(metadata_getnasn(tfmuri,"SourceCode",1, scuri)>0) then do;'; put '/* standard */'; put 'mturi=tfmuri;'; put 'end;'; put 'else do;'; put '/* some SQL joins store transform rules elsewhere */'; put 'rc=metadata_getnasn(tfmuri,"Feature&start.s",1, tmpuri);'; put 'if (metadata_getnasn(tmpuri,"Variables",1, tmpuri)>0)'; put 'then rc=metadata_getnasn(tmpuri,"OwningTransformation",1, mturi);'; put 'else rc=metadata_getnasn(tfmuri,"Transformation&start.s",1, mturi);'; put 'rc=metadata_getnasn(mturi,"SourceCode",1, scuri);'; put 'end;'; put 'rc=metadata_getattr(scuri,"StoredText",Derived_Rule);'; put 'Derived_Rule = compress(Derived_Rule,''0A''x);'; put '/* loop to generate derived rule (swap ref numbers for col descs) */'; put 'sv=1;'; put 'do while(metadata_getnasn(mturi,"SubstitutionVariables",sv,tmpuri)>0);'; put 'rc=metadata_getattr(tmpuri,"Marker",Marker_ID);'; put 'rc=metadata_getattr(tmpuri,"Name",Name_ID);'; put 'N_Name = compress(scan(Name_ID,2,''-''));'; put 'Derived_Rule=tranwrd('; put 'Derived_Rule,compress(Marker_ID),compress(N_Name)'; put ');'; put 'sv+1;'; put 'end;'; put 'end;'; put '/* get source col attributes */'; put 'fs=1;'; put 'do while(metadata_getnasn(tfmuri,"Feature&finish.s",fs,&finish.coluri)>0);'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put 'rc=metadata_getattr(&finish.tableuri,''PublicType'',&finish.PublicType);'; put 'if (metadata_getnasn(&finish.tableuri,"TablePackage",1,tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put 'else if (&finish.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&finish.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&finish.tablename);'; put 'end;'; put 'else &finish.tablename=compress(''work.''||lowcase(&finish.tablename));'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'fs+1;'; put 'end;'; put 'tfm+1;'; put 'end;'; put '/* No finish URI found - so proceed to see if this is due to transpose */'; put 'if missing(&finish.coluri)'; put 'and (metadata_getnasn(&start.tableuri,"&start.ClassifierMaps",1,tmpuri)>0)'; put 'then do;'; put 'length trafoname $256;'; put 'call missing(trafoName);'; put 'rc=metadata_getattr(tmpuri,''Name'',trafoName);'; put '/* get &finsh.tablename and jobname */'; put 'rc=metadata_getnasn(tmpuri,"Classifier&finish.s",1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put 'rc1=metadata_getnasl(&finish.tableuri,n1,assoc);'; put 'if (assoc="Columns") then do;'; put 'rc2=1;n2=1;'; put 'do while(rc2>0 and missing(foundfinishuri));'; put '/* Walk through all column associations: SpecSourceTransformations*/'; put 'rc2=metadata_getnasn(&finish.tableuri,trim(assoc),n2,assocuri);'; put '/* REVERSE */'; put '%if ("&direction." = "REVERSE") %then %do;'; put 'if metadata_getnasn(assocuri,"SpecSourceTransformations",1,sturi)>0'; put 'then do;'; put 'rc=metadata_getattr(sturi,"Name",name);'; put '/* SAS Transpose: varColumns */'; put 'if (name ="varColumns") then do;'; put 'foundfinishuri = "true"; /* do a while exit */'; put 'put "scource colname name=" name;'; put 'put "scource colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOONE";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get SAS Folder location of the table */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose vertical";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end; /* (name = "_VALUE_COLUMN") */'; put 'end; /* (metadata_getnasn(assocuri2,"Spec&finish.xxx",1,sturi)>0) */'; put '%end; /* &direction = "REVERSE" */'; put '/* FORWARDS: if TargetFeatureMaps not available: -> target! */'; put '%if ("&direction." = "FORWARDS") %then %do;'; put 'if (metadata_getnasn(assocuri,"TargetFeatureMaps",1,sfuri)<0)'; put 'then do;'; put 'rc=metadata_getattr(assocuri,"Name",name);'; put 'if not missing(assocuri) then do;'; put 'put "target colname name=" name;'; put 'put "target colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOMANY";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get table''s SAS Folder location */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose horizontal";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end;'; put 'end;'; put '%end; /* (&direction = "FORWARDS" */'; put 'call missing(assocuri);'; put 'n2+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* (assoc="Columns") */'; put 'call missing(assoc);'; put 'n1+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* missing(&finish.coluri) */'; put '/* ################# end mapping for Transpose flat ################# */'; put 'stop;'; put 'run;'; put 'proc append base=&baseds data=&stageds;'; put 'run;'; put 'data _null_;'; put 'set &stageds;'; put 'call execute(''%meta_mapper(metaid=''!!&finish.coluri'; put '!!",baseds=&baseds"'; put '!!",direction=&direction"'; put '!!",level=%eval(&level+1)"'; put '!!",levelcheck=&levelcheck"'; put '!!",job="!!jobname'; put '!!",append=YES)");'; put 'run;'; put '%mend meta_mapper;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch the metadata and server as dotlang'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li bitemporal_dataloader.sas'; put '@li meta_mapper.sas'; put '@version 9.4'; 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 column_id direction refresh;'; put '/* enable col id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%let max_depth=50;'; put '%put &=inds;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''column_id'',coluri);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''refresh'',refresh);'; put 'if input(max_depth,8.)>0 then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth &=refresh;'; put 'data info;'; put 'length coluri colname taburi tabname liburi libref $256;'; put 'call missing(of _all_);'; put 'if metadata_getattr("&column_id","Name",colname)<0 then do;'; put 'putlog "Col &column_id not found";'; put 'call symputx(''syscc'',''1234'');'; put 'stop;'; put 'end;'; put 'rc=metadata_getnasn("&column_id","Table",1,taburi);'; put 'rc=metadata_getattr(taburi,"Name",tabname);'; put 'rc=metadata_getnasn(taburi,"TablePackage",1,liburi);'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'call symputx(''lib'',libref);'; put 'call symputx(''tab'',tabname);'; put 'call symputx(''col'',colname);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro launcher();'; put '/* check whether a lineage run already taken place */'; put 'proc sql noprint;'; put 'create table existing_data as'; put 'select * from &mpelib..mpe_lineage_cols'; put 'where col_id="&column_id"'; put 'and direction="%substr(&direction,1,1)";'; put '/* no data, so make some, and append it */'; put '%if &sqlobs=0 or &refresh=1 %then %do;'; put '%meta_mapper(metaid=&column_id'; put ', direction=&direction /* either REVERSE or FORWARDS */'; put ', baseds=work.allmap'; put ', levelcheck=%eval(&max_depth-1)'; put ')'; put 'data append;'; put 'length col_id $32 direction $1 modified_by $64;'; put 'retain col_id "&column_id";'; put 'retain direction "%substr(&direction,1,1)";'; put '%global modified_by modified_dttm;'; put '%let modified_dttm=%sysfunc(datetime());'; put 'retain modified_dttm &modified_dttm;'; put 'retain modified_by "%mf_getuser()";'; put '%let modified_by=%mf_getuser();'; put 'set allmap;'; put 'drop hash;'; put 'run;'; put 'proc sort data=append out=appendme nodupkey;'; put 'by col_id direction sourcecoluri targetcoluri map_type map_transform;'; put 'run;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_lineage_cols'; put ',append_dsn=appendme'; put ',PK=col_id direction sourcecoluri targetcoluri map_type map_transform'; put ',etlsource=&_program'; put ',loadtype=UPDATE'; put ',close_vars=col_id direction'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%else %do;'; put '/* data exists, so use it */'; put 'data work.allmap(drop=modified_by modified_dttm);'; put 'set existing_data(drop=col_id direction );'; put 'if _n_=1 then do;'; put 'call symputx(''modified_by'',modified_by,''g'');'; put 'call symputx(''modified_dttm'',modified_dttm,''g'');'; put 'end;'; put 'where level < &max_depth;'; put 'run;'; put '%end;'; put '%mend launcher;'; put '%launcher()'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put 'options noquotelenmax;'; put '%macro fcmpconditional();'; put '%if &sysver=9.3 and &sysscp=WIN %then %do;'; put '/* nothing - as the FCMP function causes an exception err in this case */'; put '%end;'; put '%else %do;'; put '/* prepare quick func to enable word wrapping of transformations */'; put 'options cmplib=work.funcs;'; put 'proc fcmp outlib=work.funcs.macrocore;'; put 'function wordwrap(str $,cols,splitchar $) $;'; put 'length outstr $32767 curstr $5000;'; put 'base=0;'; put 'put str=;'; put 'do i=1 to countw(str,'' '','' '');'; put 'curstr=scan(str,i,'' '');'; put 'outstr=trim(outstr)!!'' ''!!curstr;'; put 'base=base+length(curstr)+1;'; put 'if base>cols then do;'; put 'outstr=cats(outstr,splitchar);'; put 'base=0;'; put 'end;'; put 'end;'; put 'return (outstr);'; put 'endsub;'; put 'run;'; put '%end;'; put '%mend fcmpconditional;'; put '%fcmpconditional()'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table jobs as select distinct jobname as job from work.allmap ;'; put 'create table cols as select distinct upcase(scan(cat,1,''.-'')) as tmplib'; put ',cats(calculated tmplib,''.'',upcase(scan(cat,2,''.''))) as tmptab'; put ',cats(calculated tmptab,''.'',upcase(col)) as col'; put 'from (select sourcetablename as cat, sourcecolname as col from work.allmap'; put 'union select targettablename as cat, targetcolname as col from work.allmap )'; put 'having findc(tmplib,''/\'')=0 and tmplib ne ''WORK'';'; put 'create table files as select distinct file'; put 'from (select sourcetablename as file from work.allmap'; put 'where findc(sourcetablename,''/\'')>0'; put 'union select targettablename as file from work.allmap'; put 'where findc(targettablename,''/\'')>0'; put ') ;'; put 'create table libs as select distinct tmplib as lib from cols;'; put 'create table tabs as select distinct tmptab as tab from cols;'; put 'data _null_;'; put 'file tmp;'; put 'put ''digraph G {'; put 'concentrate=true;'; put 'node [style=filled,shape=plain];'; put 'labelloc = "t";'; put ''';'; put 'label= "label=<'; put ''; put ''; put ''; put ''; put ''; put ''; put '
&direction Lineage for &col
Library:
&libGenerated by:&modified_by
Table:&tabGenerated on:'; put '%sysfunc(round(&modified_dttm,2),datetime19.)
>";'; put 'put label;'; put 'if "FORWARD"="&direction" then call symputx(''dirdesc'',''Impacted'');'; put 'else call symputx(''dirdesc'',''Source'');'; put '/* close out if there is no lineage */'; put 'if nobs=0 then put ''x [label="No lineage found" shape=Mdiamond]}'';'; put 'set work.allmap nobs=nobs;'; put 'stop;'; put 'run;'; put 'data graphviz1;'; put 'file tmp mod;'; put 'length line arrow $1000 stab ttab slib tlib $100 sbox tbox tooltip $500;'; put 'if _n_=1 then call missing(line, sbox, tbox, tooltip);'; put 'set work.allmap ;'; put 'sourceid=sourcecoluri;'; put 'targetid=targetcoluri;'; put 'if index(sourcetablename,'':'') then do;'; put 'slib='''';'; put 'stab=sourcetablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'stab=scan(sourcetablename,-1,''/\'');'; put 'slib=subpad(sourcetablename,1,length(sourcetablename)-length(stab));'; put 'end;'; put 'else do;'; put 'slib=scan(sourcetablename,1,''.'');'; put 'stab=scan(sourcetablename,2,''.'');'; put 'end;'; put 'if index(targettablename,'':'') then do;'; put 'tlib='''';'; put 'ttab=targettablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'ttab=scan(targettablename,-1,''/\'');'; put 'tlib=subpad(targettablename,1,length(targettablename)-length(ttab));'; put 'end;'; put 'else do;'; put 'tlib=scan(targettablename,1,''.'');'; put 'ttab=scan(targettablename,2,''.'');'; put 'end;'; put 'if trim(derived_rule) ne '''' then do;'; put 'derived_rule=tranwrd(derived_rule,''"'',''\"'');'; put '%macro quick();'; put '%if "&sysver"="9.3" and "&sysscp"="WIN" %then %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',derived_rule,''"]'');'; put '%end;'; put '%else %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',wordwrap(derived_rule,24,''\n''),''"]'');'; put '%end;'; put '%mend quick; %quick()'; put 'end;'; put 'else arrow=cats(''[ label="'',map_transform,''"]'');'; put 'source=quote(strip(sourceid));'; put 'target=quote(strip(targetid));'; put 'put '' '' source '' -> '' target arrow;'; put 'run;'; put 'data graphviz2 (keep=id tab lib col tooltip map_transform);'; put 'set graphviz1 (rename=(source=id stab=tab slib=lib sourcecolname=col ))'; put 'graphviz1 (rename=(target=id ttab=tab tlib=lib targetcolname=col ));'; put 'if upcase(lib)=:''WORK'' then tooltip=cats('',tooltip="Job:'',jobname,''"'');'; put 'else tooltip='''';'; put 'run;'; put 'proc sort data=graphviz2 out=graphviz3 noduprec; by _all_; run;'; put 'data _null_;'; put 'length shape $100 ;'; put 'set graphviz3 end=last;'; put 'file tmp mod;'; put 'tab=tranwrd(tab,''\'',''\\'');'; put 'tab=tranwrd(tab,''&'',''&'');'; put 'lib=tranwrd(lib,''&'',''&'');'; put 'if upcase(lib)=:''WORK'' then do;'; put 'lib=''WORK'';'; put 'put id ''[label=<
Table'' tab'; put '''
Column'' col'; put '''
> ,fillcolor=lightgrey, shape=" " '' tooltip '']'';'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'put id ''[label="Location: '' lib ''\nFile:'' tab ''\nColumn: '' col'; put '''",shape=parallelogram, fillcolor="#00b300"'' tooltip '']'';'; put 'end;'; put 'else do;'; put 'engine=scan(lib,2,''-'');'; put 'lib=scan(lib,1,''-'');'; put 'if engine=''BASE'' then fillcolour=''lightyellow '';'; put 'else fillcolour=''lightblue'';'; put 'shape='' shape=cylinder, fillcolor= ''!!fillcolour;'; put 'put id ''[label=<
Library'' lib'; put '''
Table'' tab'; put '''
Column'' col'; put '''
> ,'' shape tooltip '']'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file tmp mod;'; put '/* close out if records exist */'; put 'set work.allmap;'; put 'put ''}'';'; put 'stop;'; put 'run;'; put 'data flatdata;'; put 'length type $8 item $256;'; put 'keep type item;'; put 'set cols(in=cols) tabs(in=tabs) files(in=files) libs(in=libs) jobs(in=jobs);'; put 'if cols then do;'; put 'type=''Column'';'; put 'item=col;'; put 'end;'; put 'else if tabs then do;'; put 'type=''Table'';'; put 'item=tab;'; put 'end;'; put 'else if files then do;'; put 'type=''File'';'; put 'item=file;'; put 'end;'; put 'else if libs then do;'; put 'type=''Library'';'; put 'item=lib;'; put 'end;'; put 'else if jobs then do;'; put 'type=''Job'';'; put 'item=job;'; put 'end;'; put 'run;'; put 'data fromSAS;'; put 'infile tmp end=last;'; put 'file tmp;'; put 'input ;'; put 'string=_infile_;'; put 'put string;'; put 'run;'; put 'filename tmp clear;'; put '/* get list of IDs so frontend can make a clickable list */'; put 'proc sql;'; put 'create table ids as select distinct id from graphviz3;'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(OBJ,ids,dslabel=clickableIDS)'; put '%webout(OBJ,info)'; put '%webout(OBJ,flatdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=fetchtablelineage; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch Table Lineage for SAS 9'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; 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 '%global table_id direction graphOrientation;'; put '/* enable table id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put '%let max_depth=50;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''table_id'',table_id);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''graphOrientation'',''LR'');'; put 'if max_depth>''0'' then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth;'; put '%mp_abort(iftrue= (&table_id=undefined)'; put ',mac=&_program'; put ',msg=%str(Table_id UNDEFINED provided from frontend)'; put ')'; put 'data work.info;'; put 'length tableid tablename liburi $64 libref $8;'; put 'drop rc;'; put 'tableid="&table_id";'; put 'call missing(liburi);'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'tablename=upcase(tablename);'; put 'if missing(libref) then libref=''nolib'';'; put 'call symputx(''libds'',cats(libref,''.'',tablename));'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%let src=%sysfunc(ifc(&direction=REVERSE,src,tgt));'; put '%let tgt=%sysfunc(ifc(&direction=REVERSE,tgt,src));'; put 'data work.sourcetable/view=work.sourcetable;'; put 'set &mpelib..MPE_LINEAGE_TABS;'; put 'where &dc_dttmtfmt. lt tx_to ;'; put 'drop tx_from tx_to;'; put 'run;'; put '%macro recursivejoin(iter=0'; put ',maxiter=&max_depth /* avoid infinite loop */'; put ');'; put '%if &iter=0 %then %do;'; put 'data work.baseds ;'; put 'retain level 0;'; put 'set work.sourcetable;'; put 'where &tgt.tableid="&table_id";'; put 'run;'; put '%let iter=1;'; put 'proc sql;'; put '%end;'; put '%else %if &iter>&maxiter %then %return;'; put 'create table work.appendds as'; put 'select distinct &iter as level'; put ',b.*'; put 'from work.baseds a'; put 'left join work.sourcetable b'; put 'on a.&src.tableid=b.&tgt.tableid'; put 'where a.level=%eval(&iter.-1)'; put 'and b.&src.tableid is not null'; put 'and a.&src.tableid is not null'; put 'and a.&src.tableid ne ''N/A'';'; put '%let obs=&sqlobs;'; put 'insert into work.baseds select * from work.appendds;'; put '%if &obs %then %do;'; put '%recursivejoin(iter=%eval(&iter.+1) )'; put '%end;'; put '%mend recursivejoin;'; put '%recursivejoin()'; put 'proc sql;'; put 'create table work.final as'; put 'select distinct *'; put 'from work.baseds(drop=level)'; put 'where jobid is not null;'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table work.jobs as'; put 'select distinct jobid'; put ', jobname'; put ',quote(cats(jobid))||'' [label=''||quote(cats(jobname))||''];'' as line'; put 'from work.final;'; put 'create table work.tables as'; put 'select distinct &src.tableid as tableid'; put ',&src.tablename as tablename'; put ',&src.libref as libref'; put 'from work.final'; put 'where &src.tableid ne ''N/A'''; put 'union select'; put '&tgt.tableid as tableid'; put ',&tgt.tablename as tablename'; put ',&tgt.libref as libref'; put 'from work.final'; put 'where &tgt.tableid ne ''N/A'''; put 'order by libref, tablename;'; put 'create table idlookup as'; put 'select tableid as metaid'; put ',''TABLE'' as metatype'; put ',cats(libref,''.'',tablename) as metaname'; put 'from work.tables'; put 'union'; put 'select jobid as metaid'; put ',''JOB'' as metatype'; put ',jobname as metaname'; put 'from work.jobs'; put 'order by metaid;'; put 'data CRAYONS;'; put 'length attribute value $8;'; put 'infile datalines4 dsd;'; put 'input attribute value;'; put 'call symput(cats(''col'',_n_),quote(trim(value)));'; put 'datalines;'; put 'red,#e6194b'; put 'green,#3cb44b'; put 'blue,#4363d8'; put 'orange,#f58231'; put 'purple,#911eb4'; put 'cyan,#46f0f0'; put 'magenta,#f032e6'; put 'lime,#bcf60c'; put 'pink,#fabebe'; put 'teal,#008080'; put 'lavender,#e6beff'; put 'brown,#9a6324'; put 'beige,#fffac8'; put 'maroon,#800000'; put 'mint,#aaffc3'; put 'olive,#808000'; put 'apricot,#ffd8b1'; put 'navy,#000075'; put 'gray,#808080'; put 'black,#00000'; put 'yellow,#ffe119'; put 'white,#ffffff'; put 'bazaar,#98777b'; put 'beaver,#9f8170'; put 'bisque,#ffe4c4'; put 'blond,#faf0be'; put 'blush,#de5d83'; put 'bole,#79443b'; put 'bone,#e3dac9'; put 'brass,#b5a642'; put 'bronze,#cd7f32'; put 'bubbles,#e7feff'; put 'buff,#f0dc82'; put 'camel,#c19a6b'; put 'canary,#ffff99'; put 'capri,#00bfff'; put 'cardinal,#c41e3a'; put 'carmine,#ff0040'; put 'celadon,#ace1af'; put 'celeste,#b2ffff'; put 'cerise,#de3163'; put 'cerulean,#007ba7'; put 'cherry,#de3163'; put 'chestnut,#cd5c5c'; put 'cinnabar,#e34234'; put 'cinnamon,#d2691e'; put 'citrine,#e4d00a'; put 'cobalt,#0047ab'; put 'coffee,#6f4e37'; put 'copper,#b87333'; put 'coral,#ff7f50'; put 'corn,#fbec5d'; put 'cornsilk,#fff8dc'; put 'cream,#fffdd0'; put 'crimson,#dc143c'; put 'daffodil,#ffff31'; put 'denim,#1560bd'; put 'desert,#c19a6b'; put 'drab,#967117'; put 'ecru,#c2b280'; put 'eggplant,#614051'; put 'eggshell,#f0ead6'; put 'emerald,#50c878'; put 'fallow,#c19a6b'; put 'fawn,#e5aa70'; put 'fern,#71bc78'; put 'flame,#e25822'; put 'flax,#eedc82'; put 'folly,#ff004f'; put 'fuchsia,#ff00ff'; put 'fulvous,#e48400'; put 'gamboge,#e49b0f'; put 'ginger,#b06500'; put 'glaucous,#6082b6'; put 'glitter,#e6e8fa'; put 'gold,#ffd700'; put 'grullo,#a99a86'; put 'icterine,#fcf75e'; put 'indigo,#4b0082'; put 'iris,#5a4fcf'; put 'ivory,#fffff0'; put 'jade,#00a86b'; put ';;;;'; put 'run;'; put 'proc sort data=work.tables out=work.libs nodupkey;'; put 'by libref;'; put 'run;'; put 'data work.alllibs;'; put 'set work.libs end=last;'; put 'length line $1000. ;'; put 'crayon=symget(cats(''col'',_n_));'; put 'call symputx(libref,crayon);'; put 'if _n_=1 then do;'; put 'line=''subgraph cluster_libs { label="Libraries";'';output;'; put 'end;'; put 'line=cats(libref)!!'' [label=''||quote(cats(libref))||''; style="filled"; color='''; put '||cats(crayon)||'', shape = Mrecord, fontcolor=white]'';output;'; put 'if last then do;'; put 'line=''}'';output;'; put 'end;'; put 'run;'; put 'data alltables;'; put 'length line $1000. ;'; put 'set work.tables;'; put 'crayon=symget(libref);'; put 'line=quote(cats(tableid))||'' [label="''||cats(tablename)'; put '!!''", color=''!!cats(crayon)'; put '!!'', shape=cylinder,style=filled,fontcolor=white];'';'; put 'output;'; put 'run;'; put 'proc sort'; put 'data=final(keep=&src.tableid jobid &src.libref) out=&src.relations nodupkey;'; put 'by &src.tableid jobid;'; put 'proc sort'; put 'data=final(keep=&tgt.tableid jobid &tgt.libref) out=&tgt.relations nodupkey;'; put 'by jobid &tgt.tableid;'; put 'run;'; put 'data srcrelations;'; put 'set srcrelations;'; put 'length line $1000;'; put 'where srctableid ne ''N/A'';'; put 'line=cats('; put '''"'',cats(srctableid),''" -> "'',jobid,''" [color='',symget(srclibref),''];'''; put ');'; put 'data tgtrelations;'; put 'set tgtrelations;'; put 'where tgttableid ne ''N/A'';'; put 'length line $1000;'; put 'line=cats('; put '''"'',cats(jobid),''" -> "'',tgttableid,''" [color='',symget(tgtlibref),''];'''; put ');'; put 'run;'; put 'data finalfinal;'; put 'set work.alllibs(keep=line) work.alltables (keep=line) work.jobs(keep=line)'; put 'work.&src.relations(keep=line) work.&tgt.relations(keep=line) end=last;'; put 'if _N_ = 1 then do;'; put 'firstline=line;'; put 'line=''strict digraph "''!!"&libds"!!''" {''; output;'; put 'line="rankdir=&graphOrientation; nodesep=0.5; node [shape = octagon];";output;'; put 'line=firstline;'; put 'end;'; put 'output;'; put 'if last then do;'; put 'line=''}'';'; put 'output;'; put 'end;'; put 'drop firstline;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,finalfinal)'; put '%webout(OBJ,info)'; put '%webout(OBJ,final,dslabel=flatdata)'; put '%webout(OBJ,idlookup)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetacols; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetacols.sas'; put '@brief List the cols as defined in metadata'; put '@details Provide a table uri and get list of columns'; put '

SAS Macros

'; put '@li mm_getcols.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 '%global tableuri;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''tableuri'',scan(tableuri,-1,''\''));'; put 'run;'; put '%put &=tableuri;'; put '/* load parameters */'; put '%mm_getcols(tableuri=&tableuri,outds=metacols)'; put 'data out;'; put 'set metacols;'; put 'keep col:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,out,dslabel=metacols)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetatables; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetatables.sas'; put '@brief List the tables as defined in metadata'; put '@details Provide a library uri and get list of tables'; put '

SAS Macros

'; put '@li mm_gettables.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 '%global liburi;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''liburi'',liburi);'; put 'run;'; put '/* load parameters */'; put '%mm_gettables(uri=&liburi,outds=metatables,getauth=NO)'; put 'data out;'; put 'set metatables;'; put 'keep table:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,metatables)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/metanav; %let service=metadetails; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 mm_getdetails(uri'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ',sortoptions='; put ')/*/STORE SOURCE*/;'; put 'data &outassocs;'; put 'keep assoc assocuri name;'; put 'length assoc assocuri name $256;'; put 'call missing(of _all_);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put '/* Walk through all possible associations of this object. */'; put 'rc1=metadata_getnasl("&uri",n1,assoc);'; put 'rc2=1;n2=1;'; put 'do while(rc2>0);'; put '/* Walk through all the associations on this machine object. */'; put 'rc2=metadata_getnasn("&uri",trim(assoc),n2,assocuri);'; put 'if (rc2>0) then do;'; put 'rc3=metadata_getattr(assocuri,"Name",name);'; put 'output;'; put 'end;'; put 'call missing(name,assocuri);'; put 'n2+1;'; put 'end;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort &sortoptions;'; put 'by assoc name;'; put 'run;'; put 'data &outattrs;'; put 'keep type name value;'; put 'length type $4 name $256 value $32767;'; put 'rc1=1;n1=1;type=''Prop'';name='''';value='''';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnprp("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'rc1=1;n1=1;type=''Attr'';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnatr("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort &sortoptions;'; put 'by type name;'; put 'run;'; put '%mend mm_getdetails;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metadetails.sas'; put '@brief Retrieves metadata attributes and associations for a particular object'; put '@details'; put '

SAS Macros

'; put '@li mm_getdetails.sas'; put '@li mpe_getvars.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 '%mpe_getvars(SASControlTable, SASControlTable)'; put '%mm_getdetails(&objecturi'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ',sortoptions=SORTSEQ=LINGUISTIC'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,attributes, missing=STRING)'; put '%webout(OBJ,associations)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metaobjects; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 mm_getobjects('; put 'type=SASLibrary'; put ',outds=work.mm_getobjects'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"$METAREPOSITORY'; put '&typeSAS'; put '0"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Id";'; put 'put "characterstring200";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Name";'; put 'put "characterstring200";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getobjects;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metaobjects.sas'; put '@brief Retrieves list of objects for a particular metadata type'; put '@details'; put '

SAS Macros

'; put '@li mm_getobjects.sas'; put '@li mpe_getvars.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 '%mpe_getvars(SASControlTable, SASControlTable)'; put 'options metarepository=&repo;'; put '%mm_getobjects('; put 'type=&metatype'; put ',outds=work.objects'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,objects,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metarepos; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metarepos.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_getrepos.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 '%mm_getrepos(outds=work.repos)'; put 'data outrepos;'; put 'set repos;'; put 'if repositorytype in (''CUSTOM'',''FOUNDATION'');'; put 'keep id name description;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,outrepos)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metatypes; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_gettypes('; put 'outds=work.mm_gettypes'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put ''; put 'SAS'; put ''; put '2048'; put ''; put ''; put '$METAREPOSITORY'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put ''//GetTypes/Types/Type'';'; put 'put ''64'';'; put 'put ''//GetTypes/Types/Type/@Id'';'; put 'put ''256'';'; put 'put ''//GetTypes/Types/Type/@Desc'';'; put 'put '''';'; put 'put ''//GetTypes/Types/Type/@HasSubtypes'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.sastypes out=&outds;'; put 'by id;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_gettypes;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metatypes.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_gettypes.sas'; 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 '%mm_gettypes(outds=work.types)'; put '%webout(OPEN)'; put '%webout(OBJ,types)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mpe_checkrestore(load_ref,'; put 'outresult=ALLOW_RESTORE,'; put 'outreason=REASON'; put ');'; put '%global &outresult &outreason;'; put '%let &outresult=NO;'; put '%let &outreason=NOTFOUND;'; put '/* check if there is actually a version to restore */'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &dc_libref..mpe_audit'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No entry for &load_ref in MPE_AUDIT;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let allow_restore=YES;'; put '%let reason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%local libds;'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: libds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let allow_restore=YES;'; put '%let reason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 mp_abort.sas'; put '@li mpe_checkrestore.sas'; put '

Service Inputs

'; put '
sascontroltable
'; put '@li table table ID or LOAD_REF used to uniquely identify a staged change'; put '

Service Outputs

'; put '
work.jsparams
'; put 'Mainly sourced from MPE_SUBMIT plus some extra cols:'; put '@li LIB_ENGINE Library engine'; put '@li allow_restore YES if a user can restore, else NO'; put '@li REASON reason why a restore is / is no possible'; put '

Data Inputs

'; put '@li MPE_AUDIT'; put '@li MPE_COLUMN_LEVEL_SECURITY'; put '@li MPE_ROW_LEVEL_SECURITY'; put '@li MPE_SUBMIT'; 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 '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 '/**'; put '* Check if user has basic access permission to RESTORE the table'; put '*/'; put '%put checking access;'; put '%global allow_restore reason;'; put '%mpe_checkrestore(&table,outresult=ALLOW_RESTORE,outreason=REASON)'; put 'data work.jsParams;'; put 'set approve1;'; put 'LIB_ENGINE="%mf_getEngine(&base_lib)";'; put 'allow_restore="&allow_restore";'; put 'REASON="&reason";'; 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,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 'run;'; put '/* if a format, extract relevant info */'; put 'data _null_;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getversion; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '* 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getversion.sas'; put '@brief get a specific (previous) version of a particular table'; put '@details Used to fetch a version of a table as at a previous point in time'; put 'Delivered as part of this issue: https://git.datacontroller.io/dc/dc/issues/84'; put '

Service Inputs

'; put '
getversion_input
'; put '|LIBREF:$char8.|DS:$char32.|TS: 8.|'; put '|---|---|---|'; put '|SOMELIB|SOMEDS|1341344.804|'; put '

Service Outputs

'; put '
work.getversion_output
'; put 'The data for a particular version'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mpeinit.sas'; put '@li mpe_getvars.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '**/'; put '%mpeinit()'; put '%global LIBREF DS;'; put '/* load parameters */'; put '%mpe_getvars(getversion_input, getversion_input)'; put '%mp_abort(iftrue= (&syscc ne 0 )'; put ',mac=&_program'; put ',msg=%str(Issue on startup)'; put ')'; put '/* todo */'; put '%webout(OPEN)'; put '%webout(OBJ,getversion_output)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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(),8.6);'; 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=##%mf_getuniquefileref(prefix=BTMP);'; 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 work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.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=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '%macro mpe_refreshcatalogs(lib,cat=#all);'; put '%let lib=%upcase(&lib);'; put '%let cat=%upcase(&cat);'; put '%put running &sysmacroname &lib for &cat;'; put 'proc sql;'; put 'create table work.catdata as'; put 'select libname as libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'created,'; put 'modified,'; put 'alias,'; put 'level'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put '%if &cat ne #ALL %then %do;'; put 'and upcase(memname)="&cat"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib objects extraction)'; put ')'; put '/* load mpe_datacatalog_CATS */'; put 'proc sql;'; put 'create table datacats as select distinct libref,memname from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_CATS'; put ',append_dsn=datacats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* load mpe_datacatalog_objsS */'; put 'proc sql;'; put 'create table dataobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'alias'; put 'from catdata;'; put 'quit;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_OBJS'; put ',append_dsn=dataobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_OBJS;'; put 'proc sql;'; put 'create table statusobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'created,'; put 'modified,'; put 'level'; put 'from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_OBJS'; put ',append_dsn=statusobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_cats;'; put 'proc sql;'; put 'create table statuscats as'; put 'select libref,'; put 'memname,'; put 'count(*) as nobjs,'; put 'min(created) as created,'; put 'max(modified) as modified'; put 'from catdata'; put 'group by 1,2;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_cats'; put ',append_dsn=statuscats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%mend mpe_refreshcatalogs;'; 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 '%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 '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; 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 work.sumcat as'; put 'select libname as libref,'; put 'count(distinct memname) as catalog_cnt'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put 'group by 1;'; put 'create table work.sumdsn as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put 'create table work.statuslibs as'; put 'select coalesce(a.libref,b.libref) as libref,'; put 'a.libsize,'; put 'a.table_cnt,'; put 'b.catalog_cnt'; put 'from work.sumdsn a'; put 'full join work.sumcat b'; put 'on a.libref=b.libref;'; 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(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%mpe_refreshcatalogs(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%mpe_refreshcatalogs(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 'b.catalog_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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 memname;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%if "%scan(&libds,2,-)" ne "FC" %then %do;'; put '%let memname=%scan(&libds,2,.);'; put '%mp_dsmeta(&libds, outds=&outds)'; put '%end;'; put '%else %do;'; put '%let memname=%scan(&libds,2,.-);'; put 'data &outds;'; put '&lenstmt;'; put 'set sashelp.vcatalg;'; put 'ods_table=cats(objtype);'; put 'name=cats(objname);'; put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');'; put 'where libname="%scan(&libds,1,.)" and memname="&memname";'; put 'keep ods_table name value;'; put 'run;'; put 'proc sort; by ods_table name;run;'; put '%end;'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & 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_dttmtfmt0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; put '%macro mm_createdataset(libds=,tableuri=,outds=work.mm_createdataset,mDebug=0);'; put '%local dbg errorcheck tempds1 tempds2 tempds3;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%let errorcheck=1;'; put '%if %index(&libds,.)>0 %then %do;'; put '/* get lib uri */'; put 'data;run;%let tempds1=&syslast;'; put '%mm_getlibs(outds=&tempds1)'; put 'data _null_;'; put 'set &tempds1;'; put 'if upcase(libraryref)="%upcase(%scan(&libds,1,.))";'; put 'call symputx(''liburi'',LibraryId,''l'');'; put 'run;'; put '/* get ds uri */'; put 'data;run;%let tempds2=&syslast;'; put '%mm_gettables(uri=&liburi,outds=&tempds2)'; put 'data _null_;'; put 'set &tempds2;'; put 'where upcase(tablename)="%upcase(%scan(&libds,2,.))";'; put '&dbg putlog tableuri=;'; put 'call symputx(''tableuri'',tableuri);'; put 'run;'; put '%end;'; put 'data;run;'; put '%let tempds3=&syslast;'; put '%mm_getcols(tableuri=&tableuri,outds=&tempds3)'; put '%if %mf_nobs(&tempds3)=0 %then %do;'; put '%put &libds (&tableuri) has no columns defined!!;'; put 'data &outds;'; put 'run;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'set &tempds3 end=last;'; put 'if _n_=1 then call execute(''data &outds;'');'; put 'length attrib $32767;'; put 'if SAScolumntype=''C'' then type=''$'';'; put 'attrib=''attrib ''!!cats(colname)!!'' length=''!!cats(type,SASColumnLength,''.'');'; put 'if not missing(sasformat) then fmt='' format=''!!cats(sasformat);'; put 'if not missing(sasinformat) then infmt='' informat=''!!cats(sasinformat);'; put 'if not missing(coldesc) then desc='' label=''!!quote(cats(coldesc));'; put 'attrib=trim(attrib)!!fmt!!infmt!!desc!!'';'';'; put 'call execute(attrib);'; put 'if last then call execute(''call missing(of _all_);stop;run;'');'; put 'run;'; put '%mend mm_createdataset;'; put '%macro dc_createdataset(libds=mm_getlibs,outds=viewdata);'; put '%mm_createdataset(libds=&libds,outds=viewdata)'; put '%mend dc_createdataset;'; put '%macro mm_gettableid('; put 'libref='; put ',ds='; put ',outds=work.mm_gettableid'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length uri usingpkguri id type tableuri tablename tmpuri $256;'; put 'call missing(of _all_);'; put 'keep tableuri tablename;'; put 'n=1;'; put 'rc=0;'; put 'if metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",n,uri)<1 then do;'; put 'put "Library &libref not found";'; put 'stop;'; put 'end;'; put '&mD.putlog "uri is " uri;'; put 'if metadata_getnasn(uri, "UsingPackages", 1, usingpkguri)>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put '&mD.putlog "Type is " type;'; put 'end;'; put 'if type=''DatabaseSchema'' then tmpuri=usingpkguri;'; put 'else tmpuri=uri;'; put 't=1;'; put 'do while(metadata_getnasn(tmpuri, "Tables", t, tableuri)>0);'; put 't+1;'; put 'rc= metadata_getattr(tableuri, "Name", tablename);'; put '&mD.putlog "Table is " tablename;'; put 'if upcase(tablename)="%upcase(&ds)" then do;'; put 'output;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_gettableid;'; put '%macro dc_gettableid(libref='; put ',ds='; put ',outds=);'; put '%mm_gettableid(libref=&libref,ds=&ds,outds=&outds)'; put '%if %mf_nobs(&outds)=0 %then %do;'; put 'data &outds;'; put 'tableuri='''';'; put 'tablename="&ds";'; put 'run;'; put '%end;'; 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'' or format=:''NLDATM'''; put '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'' or format=:''NLDATE'''; 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 '%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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '
versions
'; put 'history of DC versions for this particular table'; 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_getversions.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 'call symputx(''orig_libds'',libds);'; 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(&orig_libds, outds=dsmeta)'; put '%mpe_getversions(&mpelib,'; put '%scan(&orig_libds,1,.),'; put '%scan(&orig_libds,2,.),'; put 'outds=versions'; put ')'; 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,versions)'; put '%webout(OBJ,viewData2,fmt=Y,missing=STRING,showmeta=YES,dslabel=viewdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 'coalesce(b.catalog_cnt,0) as catalog_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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/usernav; %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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 mp_abort.sas'; put '@li mm_getusers.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 '%macro x();'; put '%if %sysfunc(exist(work.iwant)) ne 1 %then %do;'; put '/* macro called by configurator - grab the URI of calling user */'; put '%mm_getusers(user=&_metaperson, outds=work.iwant)'; put '%end;'; put '%mend x;'; put '%x()'; put 'data groups'; put 'roles(rename=(groupuri=roleuri groupname=rolename groupdesc=roledesc)) ;'; put 'length uri groupuri groupname groupdesc publictype str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No groups found for ";'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri, "PublicType", PublicType);'; put 'a+1;'; put 'if PublicType = ''Role'' then output roles;'; put 'else output groups;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'keep groupuri groupname groupdesc;'; put 'if _n_=1 then delete; /* no content so don''t send empty row */'; put 'run;'; put 'data emails;'; put 'keep email type;'; put 'length emailuri email type uri str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put '/* credit'; put 'https://seleritysas.com/data-step-view-of-email-addresses-in-sas-metadata'; put '*/'; put 'emailrc=1;email_count=1;'; put 'do while(emailrc>0);'; put '/* Get Email from Person */'; put 'emailrc=metadata_getnasn(uri,"EmailAddresses",email_count,emailuri);'; put 'arc=1;'; put 'if (emailrc>0) then do;'; put 'arc=metadata_getattr(emailuri,"Address",email);'; put 'arc=metadata_getattr(emailuri,"EmailType",type);'; put 'end;'; put 'if (arc=0) then output emails;'; put 'email_count=email_count+1;'; put 'end;'; put 'run;'; put 'data logins;'; put 'length domain userid loginuri domainuri uri $256;'; put 'keep domain userid;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'login_count=1;'; put 'do while(metadata_getnasn(uri,"Logins",login_count,loginuri)>0);'; put 'rc=metadata_getattr(loginuri,"UserID",userid);'; put 'rc=metadata_getnasn(loginuri,"Domain",1,domainuri);'; put 'rc=metadata_getattr(domainuri,"Name",domain);'; put 'output;'; put 'login_count+1;'; put 'end;'; put 'run;'; put 'data info;'; put 'length uri name displayname metadatacreated metadataupdated $256;'; put 'keep name displayname metadatacreated metadataupdated;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'rc=metadata_getattr(uri,"Name",name);'; put 'rc=metadata_getattr(uri,"DisplayName",displayname);'; put 'rc=metadata_getattr(uri,"MetadataCreated",MetadataCreated);'; put 'rc=metadata_getattr(uri,"MetadataUpdated",MetadataUpdated);'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,emails)'; put '%webout(OBJ,groups)'; put '%webout(OBJ,roles)'; put '%webout(OBJ,logins)'; put '%webout(OBJ,info)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getusers;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getusers(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getusers(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getusers(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '@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 sasMembers ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'GroupDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp rcGrp rcMem rc i j;'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(groupid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'output;'; put 'j+1;'; put 'call missing(email,emailuri);'; put 'end;'; put 'end;'; put 'if _n_=1 then delete;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembersbyrole; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembersbyrole.sas'; put '@brief List the members of a role'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.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 'data sasMembers sasgroups;'; put 'attrib uriGrp uriMem roleId roleName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'roleDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(roleid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,roleId,roleName,Group_or_Role'; put ',MemberName,MemberType,roleDesc);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",roleId);'; put 'rc = metadata_getattr(uriGrp,"Name",roleName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",roleDesc);'; put 'j=1;'; put 'if Group_or_Role=''Role'' then do while'; put '(metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'call missing(email,emailuri);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'if membertype=''UserGroup'' then output sasgroups;'; put 'else output sasmembers;'; put 'j+1;'; put 'end;'; put 'end;'; put 'if _n_=1 then delete; /* no roles so don''t send empty row */'; put 'keep uriMem membertype membername MemberCreated MemberUpdated email;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasGroups)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=userroles; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getroles('; put 'outds=work.mm_getroles'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put 'options noquotelenmax;'; put 'proc metadata in= ''$METAREPOSITORY'; put 'IdentityGroupSAS388'; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Id";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Name";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Desc";'; put 'put "";'; put 'put "characterstring500";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.roles out=&outds;'; put 'by rolename;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getroles;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getroles(outds=mm_getroles);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getroles(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getroles(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getroles;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file userroles.sas'; put '@brief List all SAS Roles'; put '@details Gets a list of all SAS Roles'; put '

SAS Macros

'; put '@li dc_getroles.sas'; put '@li mpeinit.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 '%dc_getroles(outds=roles)'; put '%webout(OPEN)'; put '%webout(OBJ,roles)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* turn off with dsoptions=nonote2err */'; 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 '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; 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 '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; 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 'and &DC_REQUEST_LOGS ne NO'; 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 '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9; %let service=411.26896d93e056dcb9-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBEcj0xMjAwLFJ0PTEyNTIsRGM9Wzg3NCw5MzIsOTM2LDk0OSw5NTAsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxMjU3LDEyNTgsMWU0XSxMMD17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEz''@;'; put 'put ''MDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LGUwPWZ1bmN0aW9uKGUpey0xIT1EYy5pbmRleE9mKGUpJiYoUnQ9TDBbMF09''@;'; put 'put ''ZSl9LE1yPWZ1bmN0aW9uKGUpe0RyPWUsZTAoZSl9O2Z1bmN0aW9uIHIwKCl7TXIoMTIwMCksZnVuY3Rpb24gT2MoKXtlMCgxMjUyKX0oKX1mdW5jdGlvbiB0MChlKXtmb3IodmFyIHQ9W10scj0wLGE9ZS5sZW5ndGg7cjxhOysrcil0W3JdPWUuY2hhckNvZGVBdChyKTtyZXR1cm4gdH1mdW5j''@;'; put 'put ''dGlvbiBhaShlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg+PjE7KytyKXRbcl09U3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlQXQoMipyKzEpKyhlLmNoYXJDb2RlQXQoMipyKTw8OCkpO3JldHVybiB0LmpvaW4oIiIpfXZhciBPZSxRdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkscj1lLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09dCYmMjU0PT1yP2Z1bmN0aW9uIEljKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aD4+MTsrK3IpdFtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCgyKnIpKyhlLmNoYXJDb2RlQXQoMipyKzEp''@;'; put 'put ''PDw4KSk7cmV0dXJuIHQuam9pbigiIil9KGUuc2xpY2UoMikpOjI1ND09dCYmMjU1PT1yP2FpKGUuc2xpY2UoMikpOjY1Mjc5PT10P2Uuc2xpY2UoMSk6ZX0scGE9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LEIwPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKHQpfSx6ZT1udWxsLGd0PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7ZnVuY3Rpb24gZ2EoZSl7Zm9yKHZhciB0PSIiLHI9MCxhPTAsbj0wLGk9MCxzPTAsZj0wLGM9MCxvPTA7bzxlLmxlbmd0''@;'; put 'put ''aDspaT0ocj1lLmNoYXJDb2RlQXQobysrKSk+PjIscz0oMyZyKTw8NHwoYT1lLmNoYXJDb2RlQXQobysrKSk+PjQsZj0oMTUmYSk8PDJ8KG49ZS5jaGFyQ29kZUF0KG8rKykpPj42LGM9NjMmbixpc05hTihhKT9mPWM9NjQ6aXNOYU4obikmJihjPTY0KSx0Kz1ndC5jaGFyQXQoaSkrZ3QuY2hh''@;'; put 'put ''ckF0KHMpK2d0LmNoYXJBdChmKStndC5jaGFyQXQoYyk7cmV0dXJuIHR9ZnVuY3Rpb24gT3IoZSl7dmFyIHQ9IiIsaT0wLHM9MCxmPTAsYz0wO2U9ZS5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIiKTtmb3IodmFyIG89MDtvPGUubGVuZ3RoOylpPWd0LmluZGV4T2YoZS5jaGFyQXQobysrKSks''@;'; put 'put ''cz1ndC5pbmRleE9mKGUuY2hhckF0KG8rKykpLHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaTw8MnxzPj40KSw2NCE9PShmPWd0LmluZGV4T2YoZS5jaGFyQXQobysrKSkpJiYodCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmcyk8PDR8Zj4+MikpLDY0IT09KGM9Z3QuaW5kZXhPZihlLmNoYXJB''@;'; put 'put ''dChvKyspKSkmJih0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzJmYpPDw2fGMpKTtyZXR1cm4gdH12YXIgU2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEJ1ZmZlcjwidSImJnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYhIXByb2Nlc3MudmVyc2lv''@;'; put 'put ''bnMubm9kZX0oKSxvdD1mdW5jdGlvbigpe2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgZT0hQnVmZmVyLmZyb207aWYoIWUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7ZT0hMH1yZXR1cm4gZT9mdW5jdGlvbih0LHIpe3JldHVybiByP25ldyBCdWZmZXIodCxyKTpuZXcg''@;'; put 'put ''QnVmZmVyKHQpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlcil9cmV0dXJuIGZ1bmN0aW9uKCl7fX0oKTtmdW5jdGlvbiBfdChlKXtyZXR1cm4gU2U/QnVmZmVyLmFsbG9jP0J1ZmZlci5hbGxvYyhlKTpuZXcgQnVmZmVyKGUpOnR5cGVvZiBVaW50OEFycmF5PCJ1Ij9uZXcgVWludDhBcnJheShl''@;'; put 'put ''KTpuZXcgQXJyYXkoZSl9ZnVuY3Rpb24gbmkoZSl7cmV0dXJuIFNlP0J1ZmZlci5hbGxvY1Vuc2FmZT9CdWZmZXIuYWxsb2NVbnNhZmUoZSk6bmV3IEJ1ZmZlcihlKTp0eXBlb2YgVWludDhBcnJheTwidSI/bmV3IFVpbnQ4QXJyYXkoZSk6bmV3IEFycmF5KGUpfXZhciBJcj1mdW5jdGlvbih0''@;'; put 'put ''KXtyZXR1cm4gU2U/b3QodCwiYmluYXJ5Iik6dC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHIpe3JldHVybiAyNTUmci5jaGFyQ29kZUF0KDApfSl9O2Z1bmN0aW9uIHd0KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcuZnJvbUNo''@;'; put 'put ''YXJDb2RlKGEpfSkuam9pbigiIik7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gTTAoZSl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3Vw''@;'; put 'put ''cG9ydGVkIik7aWYoZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBNMChuZXcgVWludDhBcnJheShlKSk7Zm9yKHZhciB0PW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7KytyKXRbcl09ZVtyXTtyZXR1cm4gdH12YXIgZnI9U2U/ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1''@;'; put 'put ''ZmZlci5jb25jYXQoZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KT90Om90KHQpfSkpfTpmdW5jdGlvbihlKXtpZih0eXBlb2YgVWludDhBcnJheTwidSIpe3ZhciB0PTAscj0wO2Zvcih0PTA7dDxlLmxlbmd0aDsrK3Qpcis9ZVt0XS5sZW5ndGg7dmFyIGE9bmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkociksbj0wO2Zvcih0PTAscj0wO3Q8ZS5sZW5ndGg7cis9biwrK3QpaWYobj1lW3RdLmxlbmd0aCxlW3RdaW5zdGFuY2VvZiBVaW50OEFycmF5KWEuc2V0KGVbdF0scik7ZWxzZXtpZigic3RyaW5nIj09dHlwZW9mIGVbdF0pdGhyb3cid3RmIjthLnNldChuZXcgVWludDhB''@;'; put 'put ''cnJheShlW3RdKSxyKX1yZXR1cm4gYX1yZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sZS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/aTpbXS5zbGljZS5jYWxsKGkpfSkpfSxkcj0vXHUwMDAwL2csd2E9L1tcdTAwMDEtXHUwMDA2XS9nO2Z1bmN0aW9uIGVhKGUpe2Zv''@;'; put 'put ''cih2YXIgdD0iIixyPWUubGVuZ3RoLTE7cj49MDspdCs9ZS5jaGFyQXQoci0tKTtyZXR1cm4gdH1mdW5jdGlvbiBZcihlLHQpe3ZhciByPSIiK2U7cmV0dXJuIHIubGVuZ3RoPj10P3I6amUoIjAiLHQtci5sZW5ndGgpK3J9ZnVuY3Rpb24gVTAoZSx0KXt2YXIgcj0iIitlO3JldHVybiByLmxl''@;'; put 'put ''bmd0aD49dD9yOmplKCIgIix0LXIubGVuZ3RoKStyfWZ1bmN0aW9uIGEwKGUsdCl7dmFyIHI9IiIrZTtyZXR1cm4gci5sZW5ndGg+PXQ/cjpyK2plKCIgIix0LXIubGVuZ3RoKX12YXIgaWk9TWF0aC5wb3coMiwzMik7ZnVuY3Rpb24gcmEoZSx0KXtyZXR1cm4gZT5paXx8ZTwtaWk/ZnVuY3Rp''@;'; put 'put ''b24gYmMoZSx0KXt2YXIgcj0iIitNYXRoLnJvdW5kKGUpO3JldHVybiByLmxlbmd0aD49dD9yOmplKCIwIix0LXIubGVuZ3RoKStyfShlLHQpOmZ1bmN0aW9uIFBjKGUsdCl7dmFyIHI9IiIrZTtyZXR1cm4gci5sZW5ndGg+PXQ/cjpqZSgiMCIsdC1yLmxlbmd0aCkrcn0oTWF0aC5yb3VuZChl''@;'; put 'put ''KSx0KX1mdW5jdGlvbiBuMChlLHQpe3JldHVybiBlLmxlbmd0aD49NysodD10fHwwKSYmMTAzPT0oMzJ8ZS5jaGFyQ29kZUF0KHQpKSYmMTAxPT0oMzJ8ZS5jaGFyQ29kZUF0KHQrMSkpJiYxMTA9PSgzMnxlLmNoYXJDb2RlQXQodCsyKSkmJjEwMT09KDMyfGUuY2hhckNvZGVBdCh0KzMpKSYm''@;'; put 'put ''MTE0PT0oMzJ8ZS5jaGFyQ29kZUF0KHQrNCkpJiY5Nz09KDMyfGUuY2hhckNvZGVBdCh0KzUpKSYmMTA4PT0oMzJ8ZS5jaGFyQ29kZUF0KHQrNikpfXZhciBzaT1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwiV2VkbmVzZGF5Il0s''@;'; put 'put ''WyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxXMD1bWyJKIiwiSmFuIiwiSmFudWFyeSJdLFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1heSIsIk1heSJdLFsi''@;'; put 'put ''SiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0sWyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV0scGU9ezA6IkdlbmVyYWwi''@;'; put 'put ''LDE6IjAiLDI6IjAuMDAiLDM6IiMsIyMwIiw0OiIjLCMjMC4wMCIsOToiMCUiLDEwOiIwLjAwJSIsMTE6IjAuMDBFKzAwIiwxMjoiIyA/Lz8iLDEzOiIjID8/Lz8/IiwxNDoibS9kL3l5IiwxNToiZC1tbW0teXkiLDE2OiJkLW1tbSIsMTc6Im1tbS15eSIsMTg6Img6bW0gQU0vUE0iLDE5OiJo''@;'; put 'put ''Om1tOnNzIEFNL1BNIiwyMDoiaDptbSIsMjE6Img6bW06c3MiLDIyOiJtL2QveXkgaDptbSIsMzc6IiMsIyMwIDsoIywjIzApIiwzODoiIywjIzAgO1tSZWRdKCMsIyMwKSIsMzk6IiMsIyMwLjAwOygjLCMjMC4wMCkiLDQwOiIjLCMjMC4wMDtbUmVkXSgjLCMjMC4wMCkiLDQ1OiJtbTpzcyIs''@;'; put 'put ''NDY6IltoXTptbTpzcyIsNDc6Im1tc3MuMCIsNDg6IiMjMC4wRSswIiw0OToiQCIsNTY6JyJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4ICJoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiAiJ30sZmk9ezU6MzcsNjozOCw3OjM5LDg6NDAsMjM6MCwyNDowLDI1OjAsMjY6MCwyNzoxNCwy''@;'; put 'put ''ODoxNCwyOToxNCwzMDoxNCwzMToxNCw1MDoxNCw1MToxNCw1MjoxNCw1MzoxNCw1NDoxNCw1NToxNCw1NjoxNCw1NzoxNCw1ODoxNCw1OToxLDYwOjIsNjE6Myw2Mjo0LDY3OjksNjg6MTAsNjk6MTIsNzA6MTMsNzE6MTQsNzI6MTQsNzM6MTUsNzQ6MTYsNzU6MTcsNzY6MjAsNzc6MjEsNzg6''@;'; put 'put ''MjIsNzk6NDUsODA6NDYsODE6NDcsODI6MH0sQmM9ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDY0OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDc6''@;'; put 'put ''JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDQxOidfKCogIywj''@;'; put 'put ''IzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiBcXCgjLCMjMC4wMFxcKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAj''@;'; put 'put ''LCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKSd9O2Z1bmN0aW9uIGkwKGUsdCxyKXtmb3IodmFyIGE9ZTwwPy0xOjEsbj1lKmEsaT0wLHM9MSxmPTAsYz0xLG89MCxsPTAsaD1NYXRoLmZsb29yKG4pO288dCYmKGY9KGg9TWF0aC5mbG9vcihuKSkq''@;'; put 'put ''cytpLGw9aCpvK2MsIShuLWg8NWUtOCkpOyluPTEvKG4taCksaT1zLHM9ZixjPW8sbz1sO2lmKGw+dCYmKG8+dD8obD1jLGY9aSk6KGw9byxmPXMpKSwhcilyZXR1cm5bMCxhKmYsbF07dmFyIHg9TWF0aC5mbG9vcihhKmYvbCk7cmV0dXJuW3gsYSpmLXgqbCxsXX1mdW5jdGlvbiBrdChlLHQs''@;'; put 'put ''cil7aWYoZT4yOTU4NDY1fHxlPDApcmV0dXJuIG51bGw7dmFyIGE9MHxlLG49TWF0aC5mbG9vcig4NjQwMCooZS1hKSksaT0wLHM9W10sZj17RDphLFQ6bix1Ojg2NDAwKihlLWEpLW4seTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhmLnUpPDFlLTYmJihmLnU9MCks''@;'; put 'put ''dCYmdC5kYXRlMTkwNCYmKGErPTE0NjIpLGYudT4uOTk5OSYmKGYudT0wLDg2NDAwPT0rK24mJihmLlQ9bj0wLCsrYSwrK2YuRCkpLDYwPT09YSlzPXI/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLGk9MztlbHNlIGlmKDA9PT1hKXM9cj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLGk9NjtlbHNl''@;'; put 'put ''e2E+NjAmJi0tYTt2YXIgYz1uZXcgRGF0ZSgxOTAwLDAsMSk7Yy5zZXREYXRlKGMuZ2V0RGF0ZSgpK2EtMSkscz1bYy5nZXRGdWxsWWVhcigpLGMuZ2V0TW9udGgoKSsxLGMuZ2V0RGF0ZSgpXSxpPWMuZ2V0RGF5KCksYTw2MCYmKGk9KGkrNiklNyksciYmKGk9ZnVuY3Rpb24gWGMoZSx0KXt0''@;'; put 'put ''WzBdLT01ODE7dmFyIHI9ZS5nZXREYXkoKTtyZXR1cm4gZTw2MCYmKHI9KHIrNiklNykscn0oYyxzKSl9cmV0dXJuIGYueT1zWzBdLGYubT1zWzFdLGYuZD1zWzJdLGYuUz1uJTYwLG49TWF0aC5mbG9vcihuLzYwKSxmLk09biU2MCxuPU1hdGguZmxvb3Iobi82MCksZi5IPW4sZi5xPWksZn12''@;'; put 'put ''YXIgY2k9bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksTWM9Y2kuZ2V0VGltZSgpLFVjPW5ldyBEYXRlKDE5MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiBvaShlLHQpe3ZhciByPWUuZ2V0VGltZSgpO3JldHVybiB0P3ItPTEyNjIzMDRlNTplPj1VYyYmKHIrPTg2NGU1KSwoci0oTWMrNmU0Kihl''@;'; put 'put ''LmdldFRpbWV6b25lT2Zmc2V0KCktY2kuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX1mdW5jdGlvbiBIMChlKXtyZXR1cm4tMT09ZS5pbmRleE9mKCIuIik/ZTplLnJlcGxhY2UoLyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC8sIiQxIil9ZnVuY3Rpb24ga2EoZSl7dmFyIHIsdD1NYXRo''@;'; put 'put ''LmZsb29yKE1hdGgubG9nKE1hdGguYWJzKGUpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIHI9dD49LTQmJnQ8PS0xP2UudG9QcmVjaXNpb24oMTArdCk6TWF0aC5hYnModCk8PTk/ZnVuY3Rpb24gSGMoZSl7dmFyIHQ9ZTwwPzEyOjExLHI9SDAoZS50b0ZpeGVkKDEyKSk7cmV0dXJuIHIubGVuZ3Ro''@;'; put 'put ''PD10fHwocj1lLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD10P3I6ZS50b0V4cG9uZW50aWFsKDUpfShlKToxMD09PXQ/ZS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gVmMoZSl7dmFyIHQ9SDAoZS50b0ZpeGVkKDExKSk7cmV0dXJuIHQubGVuZ3RoPihlPDA/MTI6MTEpfHwi''@;'; put 'put ''MCI9PT10fHwiLTAiPT09dD9lLnRvUHJlY2lzaW9uKDYpOnR9KGUpLEgwKGZ1bmN0aW9uIFdjKGUpe3JldHVybi0xPT1lLmluZGV4T2YoIkUiKT9lOmUucmVwbGFjZSgvKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLywiJDFFIikucmVwbGFjZSgvKEVbKy1dKShcZCkkLywiJDEwJDIiKX0o''@;'; put 'put ''ci50b1VwcGVyQ2FzZSgpKSl9ZnVuY3Rpb24gTnQoZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gZTtjYXNlImJvb2xlYW4iOnJldHVybiBlPyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxlKT09PWU/ZS50b1N0cmluZygxMCk6a2EoZSk7Y2Fz''@;'; put 'put ''ZSJ1bmRlZmluZWQiOnJldHVybiIiO2Nhc2Uib2JqZWN0IjppZihudWxsPT1lKXJldHVybiIiO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBScigxNCxvaShlLHQmJnQuZGF0ZTE5MDQpLHQpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUgaW4gR2VuZXJhbCBmb3JtYXQ6''@;'; put 'put ''ICIrZSl9ZnVuY3Rpb24gR2MoZSx0LHIsYSl7dmFyIGMsbj0iIixpPTAscz0wLGY9ci55LG89MDtzd2l0Y2goZSl7Y2FzZSA5ODpmPXIueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ZiUxMDAsbz0yO2JyZWFrO2RlZmF1bHQ6Yz1mJTFlNCxvPTR9YnJl''@;'; put 'put ''YWs7Y2FzZSAxMDk6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ci5tLG89dC5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBXMFtyLm0tMV1bMV07Y2FzZSA1OnJldHVybiBXMFtyLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gVzBbci5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3''@;'; put 'put ''aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIuZCxvPXQubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gc2lbci5xXVswXTtkZWZhdWx0OnJldHVybiBzaVtyLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPTErKHIuSCsxMSklMTIs''@;'; put 'put ''bz10Lmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIit0fWJyZWFrO2Nhc2UgNzI6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ci5ILG89dC5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrdH1icmVhaztjYXNl''@;'; put 'put ''IDc3OnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIuTSxvPXQubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrdH1icmVhaztjYXNlIDExNTppZigicyIhPXQmJiJzcyIhPXQmJiIuMCIhPXQmJiIuMDAiIT10JiYiLjAwMCIhPXQpdGhyb3ci''@;'; put 'put ''YmFkIHNlY29uZCBmb3JtYXQ6ICIrdDtyZXR1cm4gMCE9PXIudXx8InMiIT10JiYic3MiIT10PyhzPWE+PTI/Mz09PWE/MWUzOjEwMDoxPT09YT8xMDoxLChpPU1hdGgucm91bmQocyooci5TK3IudSkpKT49NjAqcyYmKGk9MCksInMiPT09dD8wPT09aT8iMCI6IiIraS9zOihuPVlyKGksMith''@;'; put 'put ''KSwic3MiPT09dD9uLnN1YnN0cigwLDIpOiIuIituLnN1YnN0cigyLHQubGVuZ3RoLTEpKSk6WXIoci5TLHQubGVuZ3RoKTtjYXNlIDkwOnN3aXRjaCh0KXtjYXNlIltoXSI6Y2FzZSJbaGhdIjpjPTI0KnIuRCtyLkg7YnJlYWs7Y2FzZSJbbV0iOmNhc2UiW21tXSI6Yz02MCooMjQqci5EK3Iu''@;'; put 'put ''SCkrci5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmM9NjAqKDYwKigyNCpyLkQrci5IKStyLk0pK01hdGgucm91bmQoci5TK3IudSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIrdH1vPTM9PT10Lmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6Yz1mLG89''@;'; put 'put ''MX1yZXR1cm4gbz4wP1lyKGMsbyk6IiJ9ZnVuY3Rpb24gRXQoZSl7aWYoZS5sZW5ndGg8PTMpcmV0dXJuIGU7Zm9yKHZhciByPWUubGVuZ3RoJTMsYT1lLnN1YnN0cigwLHIpO3IhPWUubGVuZ3RoO3IrPTMpYSs9KGEubGVuZ3RoPjA/IiwiOiIiKStlLnN1YnN0cihyLDMpO3JldHVybiBhfXZh''@;'; put 'put ''ciBsaT0vJS9nO2Z1bmN0aW9uIHVpKGUsdCl7dmFyIHIsYT1lLmluZGV4T2YoIkUiKS1lLmluZGV4T2YoIi4iKS0xO2lmKGUubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PXQpcmV0dXJuIjAuMEUrMCI7aWYodDwwKXJldHVybiItIit1aShlLC10KTt2YXIgbj1lLmluZGV4T2YoIi4iKTst''@;'; put 'put ''MT09PW4mJihuPWUuaW5kZXhPZigiRSIpKTt2YXIgaT1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKSVuO2lmKGk8MCYmKGkrPW4pLC0xPT09KHI9KHQvTWF0aC5wb3coMTAsaSkpLnRvUHJlY2lzaW9uKGErMSsobitpKSVuKSkuaW5kZXhPZigiZSIpKXt2YXIgcz1NYXRoLmZs''@;'; put 'put ''b29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1yLmluZGV4T2YoIi4iKT9yPXIuY2hhckF0KDApKyIuIityLnN1YnN0cigxKSsiRSsiKyhzLXIubGVuZ3RoK2kpOnIrPSJFKyIrKHMtaSk7IjAuIj09PXIuc3Vic3RyKDAsMik7KXI9KHI9ci5jaGFyQXQoMCkrci5zdWJzdHIo''@;'; put 'put ''MixuKSsiLiIrci5zdWJzdHIoMituKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO3I9ci5yZXBsYWNlKC9cKy0vLCItIil9cj1yLnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oZixjLG8sbCl7cmV0dXJuIGMrbyts''@;'; put 'put ''LnN1YnN0cigwLChuK2kpJW4pKyIuIitsLnN1YnN0cihpKSsiRSJ9KX1lbHNlIHI9dC50b0V4cG9uZW50aWFsKGEpO3JldHVybiBlLm1hdGNoKC9FXCswMCQvKSYmci5tYXRjaCgvZVsrLV1cZCQvKSYmKHI9ci5zdWJzdHIoMCxyLmxlbmd0aC0xKSsiMCIrci5jaGFyQXQoci5sZW5ndGgtMSkp''@;'; put 'put ''LGUubWF0Y2goL0VcLS8pJiZyLm1hdGNoKC9lXCsvKSYmKHI9ci5yZXBsYWNlKC9lXCsvLCJlIikpLHIucmVwbGFjZSgiZSIsIkUiKX12YXIgaGk9LyMgKFw/KykoID8pXC8oID8pKFxkKykvLHhpPS9eIyowKlwuKFswI10rKS8sZGk9L1wpLipbMCNdLyx2aT0vXCgjIyNcKSAjIyNcXD8tIyMj''@;'; put 'put ''Iy87ZnVuY3Rpb24gVHIoZSl7Zm9yKHZhciByLHQ9IiIsYT0wO2EhPWUubGVuZ3RoOysrYSlzd2l0Y2gocj1lLmNoYXJDb2RlQXQoYSkpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2Mzp0Kz0iICI7YnJlYWs7Y2FzZSA0ODp0Kz0iMCI7YnJlYWs7ZGVmYXVsdDp0Kz1TdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''KHIpfXJldHVybiB0fWZ1bmN0aW9uIHBpKGUsdCl7dmFyIHI9TWF0aC5wb3coMTAsdCk7cmV0dXJuIiIrTWF0aC5yb3VuZChlKnIpL3J9ZnVuY3Rpb24gbWkoZSx0KXt2YXIgcj1lLU1hdGguZmxvb3IoZSksYT1NYXRoLnBvdygxMCx0KTtyZXR1cm4gdDwoIiIrTWF0aC5yb3VuZChyKmEpKS5s''@;'; put 'put ''ZW5ndGg/MDpNYXRoLnJvdW5kKHIqYSl9ZnVuY3Rpb24gVXIoZSx0LHIpe2lmKDQwPT09ZS5jaGFyQ29kZUF0KDApJiYhdC5tYXRjaChkaSkpe3ZhciBhPXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHI+PTA/VXIoIm4iLGEs''@;'; put 'put ''cik6IigiK1VyKCJuIixhLC1yKSsiKSJ9aWYoNDQ9PT10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uICRjKGUsdCxyKXtmb3IodmFyIGE9dC5sZW5ndGgtMTs0ND09PXQuY2hhckNvZGVBdChhLTEpOyktLWE7cmV0dXJuIGx0KGUsdC5zdWJzdHIoMCxhKSxyL01hdGgu''@;'; put 'put ''cG93KDEwLDMqKHQubGVuZ3RoLWEpKSl9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiB6YyhlLHQscil7dmFyIGE9dC5yZXBsYWNlKGxpLCIiKSxuPXQubGVuZ3RoLWEubGVuZ3RoO3JldHVybiBsdChlLGEscipNYXRoLnBvdygxMCwyKm4pKStqZSgiJSIs''@;'; put 'put ''bil9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiRSIpKXJldHVybiB1aSh0LHIpO2lmKDM2PT09dC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitVcihlLHQuc3Vic3RyKCIgIj09dC5jaGFyQXQoMSk/MjoxKSxyKTt2YXIgbixpLHMsZixjPU1hdGguYWJzKHIpLG89cjwwPyItIjoiIjtpZih0''@;'; put 'put ''Lm1hdGNoKC9eMDArJC8pKXJldHVybiBvK3JhKGMsdC5sZW5ndGgpO2lmKHQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4iMCI9PT0obj1yYShyLDApKSYmKG49IiIpLG4ubGVuZ3RoPnQubGVuZ3RoP246VHIodC5zdWJzdHIoMCx0Lmxlbmd0aC1uLmxlbmd0aCkpK247aWYoaT10Lm1hdGNoKGhp''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gamMoZSx0LHIpe3ZhciBhPXBhcnNlSW50KGVbNF0sMTApLG49TWF0aC5yb3VuZCh0KmEpLGk9TWF0aC5mbG9vcihuL2EpLHM9bi1pKmEsZj1hO3JldHVybiByKygwPT09aT8iIjoiIitpKSsiICIrKDA9PT1zP2plKCIgIixlWzFdLmxlbmd0aCsxK2VbNF0ubGVu''@;'; put 'put ''Z3RoKTpVMChzLGVbMV0ubGVuZ3RoKStlWzJdKyIvIitlWzNdK1lyKGYsZVs0XS5sZW5ndGgpKX0oaSxjLG8pO2lmKHQubWF0Y2goL14jKzArJC8pKXJldHVybiBvK3JhKGMsdC5sZW5ndGgtdC5pbmRleE9mKCIwIikpO2lmKGk9dC5tYXRjaCh4aSkpcmV0dXJuIG49cGkocixpWzFdLmxlbmd0''@;'; put 'put ''aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrVHIoaVsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK1RyKGlbMV0pKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24odix1KXtyZXR1cm4iLiIrdStqZSgiMCIsVHIoaVsxXSkubGVuZ3RoLXUubGVuZ3RoKX0pLC0xIT09dC5pbmRleE9mKCIw''@;'; put 'put ''LiIpP246bi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKHQ9dC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLGk9dC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIG8rcGkoYyxpWzJdLmxlbmd0aCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikk''@;'; put 'put ''LywiJDEuIikucmVwbGFjZSgvXjBcLi8saVsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGk9dC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gbytFdChyYShjLDApKTtpZihpPXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrVXIoZSx0LC1yKTpFdCgi''@;'; put 'put ''IisoTWF0aC5mbG9vcihyKStmdW5jdGlvbiBZYyhlLHQpe3JldHVybiB0PCgiIitNYXRoLnJvdW5kKChlLU1hdGguZmxvb3IoZSkpKk1hdGgucG93KDEwLHQpKSkubGVuZ3RoPzE6MH0ocixpWzFdLmxlbmd0aCkpKSsiLiIrWXIobWkocixpWzFdLmxlbmd0aCksaVsxXS5sZW5ndGgpO2lmKGk9''@;'; put 'put ''dC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gVXIoZSx0LnJlcGxhY2UoL14jLCMqLC8sIiIpLHIpO2lmKGk9dC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gbj1lYShVcihlLHQucmVwbGFjZSgvW1xcLV0vZywiIikscikpLHM9MCxlYShlYSh0LnJlcGxhY2UoL1xc''@;'; put 'put ''L2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24odil7cmV0dXJuIHM8bi5sZW5ndGg/bi5jaGFyQXQocysrKToiMCI9PT12PyIwIjoiIn0pKTtpZih0Lm1hdGNoKHZpKSlyZXR1cm4iKCIrKG49VXIoZSwiIyMjIyMjIyMjIyIscikpLnN1YnN0cigwLDMpKyIpICIrbi5zdWJzdHIoMywz''@;'; put 'put ''KSsiLSIrbi5zdWJzdHIoNik7dmFyIGw9IiI7aWYoaT10Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gcz1NYXRoLm1pbihpWzRdLmxlbmd0aCw3KSxmPWkwKGMsTWF0aC5wb3coMTAscyktMSwhMSksbj0iIitvLCIgIj09KGw9bHQoIm4iLGlbMV0sZlsxXSkp''@;'; put 'put ''LmNoYXJBdChsLmxlbmd0aC0xKSYmKGw9bC5zdWJzdHIoMCxsLmxlbmd0aC0xKSsiMCIpLG4rPWwraVsyXSsiLyIraVszXSwobD1hMChmWzJdLHMpKS5sZW5ndGg8aVs0XS5sZW5ndGgmJihsPVRyKGlbNF0uc3Vic3RyKGlbNF0ubGVuZ3RoLWwubGVuZ3RoKSkrbCksbis9bDtpZihpPXQubWF0''@;'; put 'put ''Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHM9TWF0aC5taW4oTWF0aC5tYXgoaVsxXS5sZW5ndGgsaVs0XS5sZW5ndGgpLDcpLG8rKChmPWkwKGMsTWF0aC5wb3coMTAscyktMSwhMCkpWzBdfHwoZlsxXT8iIjoiMCIpKSsiICIrKGZbMV0/VTAoZlsxXSxzKStp''@;'; put 'put ''WzJdKyIvIitpWzNdK2EwKGZbMl0scyk6amUoIiAiLDIqcysxK2lbMl0ubGVuZ3RoK2lbM10ubGVuZ3RoKSk7aWYoaT10Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBuPXJhKHIsMCksdC5sZW5ndGg8PW4ubGVuZ3RoP246VHIodC5zdWJzdHIoMCx0Lmxlbmd0aC1uLmxlbmd0aCkpK247aWYo''@;'; put 'put ''aT10Lm1hdGNoKC9eKFsjMD9dKylcLihbIzBdKykkLykpe249IiIrci50b0ZpeGVkKE1hdGgubWluKGlbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxzPW4uaW5kZXhPZigiLiIpO3ZhciBoPXQuaW5kZXhPZigiLiIpLXMseD10Lmxlbmd0aC1uLmxlbmd0aC1oO3Jl''@;'; put 'put ''dHVybiBUcih0LnN1YnN0cigwLGgpK24rdC5zdWJzdHIodC5sZW5ndGgteCkpfWlmKGk9dC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHM9bWkocixpWzFdLmxlbmd0aCkscjwwPyItIitVcihlLHQsLXIpOkV0KGZ1bmN0aW9uIEpjKGUpe3JldHVybiBlPDIxNDc0ODM2NDcm''@;'; put 'put ''JmU+LTIxNDc0ODM2NDg/IiIrKGU+PTA/MHxlOmUtMXwwKToiIitNYXRoLmZsb29yKGUpfShyKSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbih2KXtyZXR1cm4iMDAsIisodi5sZW5ndGg8Mz9ZcigwLDMtdi5sZW5ndGgpOiIiKSt2fSkrIi4i''@;'; put 'put ''K1lyKHMsaVsxXS5sZW5ndGgpO3N3aXRjaCh0KXtjYXNlIiMjIywjIzAuMDAiOnJldHVybiBVcihlLCIjLCMjMC4wMCIscik7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIGQ9RXQocmEoYywwKSk7cmV0dXJuIjAiIT09ZD9vK2Q6IiI7Y2FzZSIjIyMsIyMjLjAw''@;'; put 'put ''IjpyZXR1cm4gVXIoZSwiIyMjLCMjMC4wMCIscikucmVwbGFjZSgvXjBcLi8sIi4iKTtjYXNlIiMsIyMjLjAwIjpyZXR1cm4gVXIoZSwiIywjIzAuMDAiLHIpLnJlcGxhY2UoL14wXC4vLCIuIil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrdCsifCIpfWZ1bmN0aW9u''@;'; put 'put ''IGdpKGUsdCl7dmFyIHIsYT1lLmluZGV4T2YoIkUiKS1lLmluZGV4T2YoIi4iKS0xO2lmKGUubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PXQpcmV0dXJuIjAuMEUrMCI7aWYodDwwKXJldHVybiItIitnaShlLC10KTt2YXIgbj1lLmluZGV4T2YoIi4iKTstMT09PW4mJihuPWUuaW5kZXhP''@;'; put 'put ''ZigiRSIpKTt2YXIgaT1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKSVuO2lmKGk8MCYmKGkrPW4pLCEocj0odC9NYXRoLnBvdygxMCxpKSkudG9QcmVjaXNpb24oYSsxKyhuK2kpJW4pKS5tYXRjaCgvW0VlXS8pKXt2YXIgcz1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGgu''@;'; put 'put ''TE9HMTBFKTstMT09PXIuaW5kZXhPZigiLiIpP3I9ci5jaGFyQXQoMCkrIi4iK3Iuc3Vic3RyKDEpKyJFKyIrKHMtci5sZW5ndGgraSk6cis9IkUrIisocy1pKSxyPXIucmVwbGFjZSgvXCstLywiLSIpfXI9ci5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKGYs''@;'; put 'put ''YyxvLGwpe3JldHVybiBjK28rbC5zdWJzdHIoMCwobitpKSVuKSsiLiIrbC5zdWJzdHIoaSkrIkUifSl9ZWxzZSByPXQudG9FeHBvbmVudGlhbChhKTtyZXR1cm4gZS5tYXRjaCgvRVwrMDAkLykmJnIubWF0Y2goL2VbKy1dXGQkLykmJihyPXIuc3Vic3RyKDAsci5sZW5ndGgtMSkrIjAiK3Iu''@;'; put 'put ''Y2hhckF0KHIubGVuZ3RoLTEpKSxlLm1hdGNoKC9FXC0vKSYmci5tYXRjaCgvZVwrLykmJihyPXIucmVwbGFjZSgvZVwrLywiZSIpKSxyLnJlcGxhY2UoImUiLCJFIil9ZnVuY3Rpb24gUXIoZSx0LHIpe2lmKDQwPT09ZS5jaGFyQ29kZUF0KDApJiYhdC5tYXRjaChkaSkpe3ZhciBhPXQucmVw''@;'; put 'put ''bGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHI+PTA/UXIoIm4iLGEscik6IigiK1FyKCJuIixhLC1yKSsiKSJ9aWYoNDQ9PT10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIHFjKGUsdCxyKXtmb3IodmFyIGE9''@;'; put 'put ''dC5sZW5ndGgtMTs0ND09PXQuY2hhckNvZGVBdChhLTEpOyktLWE7cmV0dXJuIGx0KGUsdC5zdWJzdHIoMCxhKSxyL01hdGgucG93KDEwLDMqKHQubGVuZ3RoLWEpKSl9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBaYyhlLHQscil7dmFyIGE9dC5yZXBs''@;'; put 'put ''YWNlKGxpLCIiKSxuPXQubGVuZ3RoLWEubGVuZ3RoO3JldHVybiBsdChlLGEscipNYXRoLnBvdygxMCwyKm4pKStqZSgiJSIsbil9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiRSIpKXJldHVybiBnaSh0LHIpO2lmKDM2PT09dC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitRcihlLHQuc3Vi''@;'; put 'put ''c3RyKCIgIj09dC5jaGFyQXQoMSk/MjoxKSxyKTt2YXIgbixpLHMsZixjPU1hdGguYWJzKHIpLG89cjwwPyItIjoiIjtpZih0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBvK1lyKGMsdC5sZW5ndGgpO2lmKHQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4gbj0iIityLDA9PT1yJiYobj0iIiksbi5s''@;'; put 'put ''ZW5ndGg+dC5sZW5ndGg/bjpUcih0LnN1YnN0cigwLHQubGVuZ3RoLW4ubGVuZ3RoKSkrbjtpZihpPXQubWF0Y2goaGkpKXJldHVybiBmdW5jdGlvbiBLYyhlLHQscil7cmV0dXJuIHIrKDA9PT10PyIiOiIiK3QpK2plKCIgIixlWzFdLmxlbmd0aCsyK2VbNF0ubGVuZ3RoKX0oaSxjLG8pO2lm''@;'; put 'put ''KHQubWF0Y2goL14jKzArJC8pKXJldHVybiBvK1lyKGMsdC5sZW5ndGgtdC5pbmRleE9mKCIwIikpO2lmKGk9dC5tYXRjaCh4aSkpcmV0dXJuIG49KG49KCIiK3IpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK1RyKGlbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitUcihpWzFdKSkpLnJlcGxh''@;'; put 'put ''Y2UoL1wuKFxkKikkLyxmdW5jdGlvbih2LHUpe3JldHVybiIuIit1K2plKCIwIixUcihpWzFdKS5sZW5ndGgtdS5sZW5ndGgpfSksLTEhPT10LmluZGV4T2YoIjAuIik/bjpuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYodD10LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksaT10Lm1hdGNoKC9e''@;'; put 'put ''KDAqKVwuKCMqKSQvKSlyZXR1cm4gbysoIiIrYykucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8saVsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGk9dC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1''@;'; put 'put ''cm4gbytFdCgiIitjKTtpZihpPXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrUXIoZSx0LC1yKTpFdCgiIityKSsiLiIramUoIjAiLGlbMV0ubGVuZ3RoKTtpZihpPXQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIFFyKGUsdC5yZXBsYWNlKC9eIywjKiwvLCIi''@;'; put 'put ''KSxyKTtpZihpPXQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIG49ZWEoUXIoZSx0LnJlcGxhY2UoL1tcXC1dL2csIiIpLHIpKSxzPTAsZWEoZWEodC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKHYpe3JldHVybiBzPG4ubGVuZ3Ro''@;'; put 'put ''P24uY2hhckF0KHMrKyk6IjAiPT09dj8iMCI6IiJ9KSk7aWYodC5tYXRjaCh2aSkpcmV0dXJuIigiKyhuPVFyKGUsIiMjIyMjIyMjIyMiLHIpKS5zdWJzdHIoMCwzKSsiKSAiK24uc3Vic3RyKDMsMykrIi0iK24uc3Vic3RyKDYpO3ZhciBsPSIiO2lmKGk9dC5tYXRjaCgvXihbIzA/XSspKCA/''@;'; put 'put ''KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHM9TWF0aC5taW4oaVs0XS5sZW5ndGgsNyksZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITEpLG49IiIrbywiICI9PShsPWx0KCJuIixpWzFdLGZbMV0pKS5jaGFyQXQobC5sZW5ndGgtMSkmJihsPWwuc3Vic3RyKDAsbC5sZW5ndGgtMSkrIjAiKSxu''@;'; put 'put ''Kz1sK2lbMl0rIi8iK2lbM10sKGw9YTAoZlsyXSxzKSkubGVuZ3RoPGlbNF0ubGVuZ3RoJiYobD1UcihpWzRdLnN1YnN0cihpWzRdLmxlbmd0aC1sLmxlbmd0aCkpK2wpLG4rPWw7aWYoaT10Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBzPU1hdGgubWlu''@;'; put 'put ''KE1hdGgubWF4KGlbMV0ubGVuZ3RoLGlbNF0ubGVuZ3RoKSw3KSxvKygoZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITApKVswXXx8KGZbMV0/IiI6IjAiKSkrIiAiKyhmWzFdP1UwKGZbMV0scykraVsyXSsiLyIraVszXSthMChmWzJdLHMpOmplKCIgIiwyKnMrMStpWzJdLmxlbmd0aCtpWzNd''@;'; put 'put ''Lmxlbmd0aCkpO2lmKGk9dC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gdC5sZW5ndGg8PShuPSIiK3IpLmxlbmd0aD9uOlRyKHQuc3Vic3RyKDAsdC5sZW5ndGgtbi5sZW5ndGgpKStuO2lmKGk9dC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe249IiIrci50b0ZpeGVkKE1hdGgubWlu''@;'; put 'put ''KGlbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxzPW4uaW5kZXhPZigiLiIpO3ZhciBoPXQuaW5kZXhPZigiLiIpLXMseD10Lmxlbmd0aC1uLmxlbmd0aC1oO3JldHVybiBUcih0LnN1YnN0cigwLGgpK24rdC5zdWJzdHIodC5sZW5ndGgteCkpfWlmKGk9dC5tYXRj''@;'; put 'put ''aCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrUXIoZSx0LC1yKTpFdCgiIityKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKHYpe3JldHVybiIwMCwiKyh2Lmxlbmd0aDwzP1lyKDAsMy12Lmxlbmd0aCk6IiIpK3Z9KSsi''@;'; put 'put ''LiIrWXIoMCxpWzFdLmxlbmd0aCk7c3dpdGNoKHQpe2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciBkPUV0KCIiK2MpO3JldHVybiIwIiE9PWQ/bytkOiIiO2RlZmF1bHQ6aWYodC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIFFyKGUsdC5zbGljZSgwLHQubGFz''@;'; put 'put ''dEluZGV4T2YoIi4iKSkscikrVHIodC5zbGljZSh0Lmxhc3RJbmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8Iit0KyJ8Iil9ZnVuY3Rpb24gbHQoZSx0LHIpe3JldHVybigwfHIpPT09cj9RcihlLHQscik6VXIoZSx0LHIpfXZhciBfaT0vXFtbSGhN''@;'; put 'put ''bVNzXHUwRTBBXHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gYnQoZSl7Zm9yKHZhciB0PTAscj0iIixhPSIiO3Q8ZS5sZW5ndGg7KXN3aXRjaChyPWUuY2hhckF0KHQpKXtjYXNlIkciOm4wKGUsdCkmJih0Kz02KSx0Kys7YnJlYWs7Y2FzZSciJzpmb3IoOzM0IT09ZS5jaGFyQ29kZUF0KCsr''@;'; put 'put ''dCkmJnQ8ZS5sZW5ndGg7KTsrK3Q7YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjp0Kz0yO2JyZWFrO2Nhc2UiQCI6Kyt0O2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1lLmNoYXJBdCh0KzEpfHwiMiI9PT1lLmNoYXJBdCh0KzEpKXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJEIjpjYXNlIlki''@;'; put 'put ''OmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjppZigiQS9QIj09PWUuc3Vic3RyKHQsMykudG9VcHBlckNhc2UoKXx8IkFNL1BN''@;'; put 'put ''Ij09PWUuc3Vic3RyKHQsNSkudG9VcHBlckNhc2UoKXx8Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09ZS5zdWJzdHIodCw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysrdDticmVhaztjYXNlIlsiOmZvcihhPXI7Il0iIT09ZS5jaGFyQXQodCsrKSYmdDxlLmxlbmd0aDspYSs9ZS5j''@;'; put 'put ''aGFyQXQodCk7aWYoYS5tYXRjaChfaSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDt0PGUubGVuZ3RoJiYoIjAjPy4sRSstJSIuaW5kZXhPZihyPWUuY2hhckF0KCsrdCkpPi0xfHwiXFwiPT1yJiYiLSI9PWUuY2hhckF0KHQrMSkmJiIwIyIuaW5kZXhPZihl''@;'; put 'put ''LmNoYXJBdCh0KzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7ZS5jaGFyQXQoKyt0KT09PXI7KTticmVhaztjYXNlIioiOisrdCwoIiAiPT1lLmNoYXJBdCh0KXx8IioiPT1lLmNoYXJBdCh0KSkmJisrdDticmVhaztjYXNlIigiOmNhc2UiKSI6Kyt0O2JyZWFrO2Nhc2UiMSI6Y2FzZSIy''@;'; put 'put ''IjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcig7dDxlLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoZS5jaGFyQXQoKyt0KSk+LTE7KTticmVhaztkZWZhdWx0OisrdH1yZXR1cm4hMX12YXIgd2k9L1xbKD18Pls9XT98PFs+''@;'; put 'put ''PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIGtpKGUsdCl7aWYobnVsbD09dClyZXR1cm4hMTt2YXIgcj1wYXJzZUZsb2F0KHRbMl0pO3N3aXRjaCh0WzFdKXtjYXNlIj0iOmlmKGU9PXIpcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZihlPnIpcmV0dXJuITA7YnJlYWs7Y2FzZSI8''@;'; put 'put ''IjppZihlPHIpcmV0dXJuITA7YnJlYWs7Y2FzZSI8PiI6aWYoZSE9cilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihlPj1yKXJldHVybiEwO2JyZWFrO2Nhc2UiPD0iOmlmKGU8PXIpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUnIoZSx0LHIpe251bGw9PXImJihyPXt9KTt2YXIgYT0i''@;'; put 'put ''Ijtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjphPSJtL2QveXkiPT1lJiZyLmRhdGVORj9yLmRhdGVORjplO2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oYT0xND09ZSYmci5kYXRlTkY/ci5kYXRlTkY6KG51bGwhPXIudGFibGU/ci50YWJsZTpwZSlbZV0pJiYoYT1yLnRhYmxlJiZy''@;'; put 'put ''LnRhYmxlW2ZpW2VdXXx8cGVbZmlbZV1dKSxudWxsPT1hJiYoYT1CY1tlXXx8IkdlbmVyYWwiKX1pZihuMChhLDApKXJldHVybiBOdCh0LHIpO3QgaW5zdGFuY2VvZiBEYXRlJiYodD1vaSh0LHIuZGF0ZTE5MDQpKTt2YXIgbj1mdW5jdGlvbiBybyhlLHQpe3ZhciByPWZ1bmN0aW9uIFFjKGUp''@;'; put 'put ''e2Zvcih2YXIgdD1bXSxyPSExLGE9MCxuPTA7YTxlLmxlbmd0aDsrK2Epc3dpdGNoKGUuY2hhckNvZGVBdChhKSl7Y2FzZSAzNDpyPSFyO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrYTticmVhaztjYXNlIDU5OnRbdC5sZW5ndGhdPWUuc3Vic3RyKG4sYS1uKSxuPWErMX1pZih0''@;'; put 'put ''W3QubGVuZ3RoXT1lLnN1YnN0cihuKSwhMD09PXIpdGhyb3cgbmV3IEVycm9yKCJGb3JtYXQgfCIrZSsifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiB0fShlKSxhPXIubGVuZ3RoLG49clthLTFdLmluZGV4T2YoIkAiKTtpZihhPDQmJm4+LTEmJi0tYSxyLmxlbmd0aD40KXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IityLmpvaW4oInwiKSsifCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm5bNCw0PT09ci5sZW5ndGh8fG4+LTE/cltyLmxlbmd0aC0xXToiQCJdO3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnI9bj4tMT9bIkdl''@;'; put 'put ''bmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsclswXV06W3JbMF0sclswXSxyWzBdLCJAIl07YnJlYWs7Y2FzZSAyOnI9bj4tMT9bclswXSxyWzBdLHJbMF0sclsxXV06W3JbMF0sclsxXSxyWzBdLCJAIl07YnJlYWs7Y2FzZSAzOnI9bj4tMT9bclswXSxyWzFdLHJbMF0sclsyXV06W3JbMF0s''@;'; put 'put ''clsxXSxyWzJdLCJAIl19dmFyIGk9dD4wP3JbMF06dDwwP3JbMV06clsyXTtpZigtMT09PXJbMF0uaW5kZXhPZigiWyIpJiYtMT09PXJbMV0uaW5kZXhPZigiWyIpKXJldHVyblthLGldO2lmKG51bGwhPXJbMF0ubWF0Y2goL1xbWz08Pl0vKXx8bnVsbCE9clsxXS5tYXRjaCgvXFtbPTw+XS8p''@;'; put 'put ''KXt2YXIgcz1yWzBdLm1hdGNoKHdpKSxmPXJbMV0ubWF0Y2god2kpO3JldHVybiBraSh0LHMpP1thLHJbMF1dOmtpKHQsZik/W2EsclsxXV06W2EscltudWxsIT1zJiZudWxsIT1mPzI6MV1dfXJldHVyblthLGldfShhLHQpO2lmKG4wKG5bMV0pKXJldHVybiBOdCh0LHIpO2lmKCEwPT09dCl0''@;'; put 'put ''PSJUUlVFIjtlbHNlIGlmKCExPT09dCl0PSJGQUxTRSI7ZWxzZSBpZigiIj09PXR8fG51bGw9PXQpcmV0dXJuIiI7cmV0dXJuIGZ1bmN0aW9uIGVvKGUsdCxyLGEpe2Zvcih2YXIgbyxsLGgsbj1bXSxpPSIiLHM9MCxmPSIiLGM9InQiLHg9IkgiO3M8ZS5sZW5ndGg7KXN3aXRjaChmPWUuY2hh''@;'; put 'put ''ckF0KHMpKXtjYXNlIkciOmlmKCFuMChlLHMpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK2YrIiBpbiAiK2UpO25bbi5sZW5ndGhdPXt0OiJHIix2OiJHZW5lcmFsIn0scys9NzticmVhaztjYXNlJyInOmZvcihpPSIiOzM0IT09KGg9ZS5jaGFyQ29kZUF0KCsr''@;'; put 'put ''cykpJiZzPGUubGVuZ3RoOylpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpO25bbi5sZW5ndGhdPXt0OiJ0Iix2Oml9LCsrczticmVhaztjYXNlIlxcIjp2YXIgZD1lLmNoYXJBdCgrK3MpO25bbi5sZW5ndGhdPXt0OiIoIj09PWR8fCIpIj09PWQ/ZDoidCIsdjpkfSwrK3M7YnJlYWs7Y2FzZSJf''@;'; put 'put ''IjpuW24ubGVuZ3RoXT17dDoidCIsdjoiICJ9LHMrPTI7YnJlYWs7Y2FzZSJAIjpuW24ubGVuZ3RoXT17dDoiVCIsdjp0fSwrK3M7YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PWUuY2hhckF0KHMrMSl8fCIyIj09PWUuY2hhckF0KHMrMSkpe2lmKG51bGw9PW8mJm51bGw9PShvPWt0''@;'; put 'put ''KHQsciwiMiI9PT1lLmNoYXJBdChzKzEpKSkpcmV0dXJuIiI7bltuLmxlbmd0aF09e3Q6IlgiLHY6ZS5zdWJzdHIocywyKX0sYz1mLHMrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Zj1mLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNl''@;'; put 'put ''ImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjppZih0PDB8fG51bGw9PW8mJm51bGw9PShvPWt0KHQscikpKXJldHVybiIiO2ZvcihpPWY7KytzPGUubGVuZ3RoJiZlLmNoYXJBdChzKS50b0xvd2VyQ2FzZSgpPT09ZjspaSs9ZjsibSI9PT1mJiYiaCI9PT1jLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkmJihmPSJNIiksImgiPT09ZiYmKGY9eCksbltuLmxlbmd0aF09e3Q6Zix2Oml9LGM9ZjticmVhaztjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOnZhciB1PXt0OmYsdjpmfTtpZihudWxsPT1vJiYobz1rdCh0LHIpKSwiQS9QIj09PWUuc3Vic3RyKHMsMykudG9VcHBl''@;'; put 'put ''ckNhc2UoKT8obnVsbCE9byYmKHUudj1vLkg+PTEyPyJQIjoiQSIpLHUudD0iVCIseD0iaCIscys9Myk6IkFNL1BNIj09PWUuc3Vic3RyKHMsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9byYmKHUudj1vLkg+PTEyPyJQTSI6IkFNIiksdS50PSJUIixzKz01LHg9ImgiKToiXHU0ZTBhXHU1MzQ4''@;'; put 'put ''L1x1NGUwYlx1NTM0OCI9PT1lLnN1YnN0cihzLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPW8mJih1LnY9by5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksdS50PSJUIixzKz01LHg9ImgiKToodS50PSJ0IiwrK3MpLG51bGw9PW8mJiJUIj09PXUudClyZXR1cm4iIjtuW24u''@;'; put 'put ''bGVuZ3RoXT11LGM9ZjticmVhaztjYXNlIlsiOmZvcihpPWY7Il0iIT09ZS5jaGFyQXQocysrKSYmczxlLmxlbmd0aDspaSs9ZS5jaGFyQXQocyk7aWYoIl0iIT09aS5zbGljZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVkICJbIiBibG9jazogfCcraSsifCI7aWYoaS5tYXRjaChfaSkpe2lmKG51''@;'; put 'put ''bGw9PW8mJm51bGw9PShvPWt0KHQscikpKXJldHVybiIiO25bbi5sZW5ndGhdPXt0OiJaIix2OmkudG9Mb3dlckNhc2UoKX0sYz1pLmNoYXJBdCgxKX1lbHNlIGkuaW5kZXhPZigiJCIpPi0xJiYoaT0oaS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIixidChlKXx8KG5bbi5s''@;'; put 'put ''ZW5ndGhdPXt0OiJ0Iix2Oml9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1vKXtmb3IoaT1mOysrczxlLmxlbmd0aCYmIjAiPT09KGY9ZS5jaGFyQXQocykpOylpKz1mO25bbi5sZW5ndGhdPXt0OiJzIix2Oml9O2JyZWFrfWNhc2UiMCI6Y2FzZSIjIjpmb3IoaT1mOysrczxlLmxlbmd0aCYm''@;'; put 'put ''IjAjPy4sRSstJSIuaW5kZXhPZihmPWUuY2hhckF0KHMpKT4tMTspaSs9ZjtuW24ubGVuZ3RoXT17dDoibiIsdjppfTticmVhaztjYXNlIj8iOmZvcihpPWY7ZS5jaGFyQXQoKytzKT09PWY7KWkrPWY7bltuLmxlbmd0aF09e3Q6Zix2Oml9LGM9ZjticmVhaztjYXNlIioiOisrcywoIiAiPT1l''@;'; put 'put ''LmNoYXJBdChzKXx8IioiPT1lLmNoYXJBdChzKSkmJisrczticmVhaztjYXNlIigiOmNhc2UiKSI6bltuLmxlbmd0aF09e3Q6MT09PWE/InQiOmYsdjpmfSwrK3M7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNh''@;'; put 'put ''c2UiOSI6Zm9yKGk9ZjtzPGUubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihlLmNoYXJBdCgrK3MpKT4tMTspaSs9ZS5jaGFyQXQocyk7bltuLmxlbmd0aF09e3Q6IkQiLHY6aX07YnJlYWs7Y2FzZSIgIjpuW24ubGVuZ3RoXT17dDpmLHY6Zn0sKytzO2JyZWFrO2Nhc2UiJCI6bltuLmxl''@;'; put 'put ''bmd0aF09e3Q6InQiLHY6IiQifSwrK3M7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YoZikpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrZisiIGluICIrZSk7bltuLmxlbmd0''@;'; put 'put ''aF09e3Q6InQiLHY6Zn0sKytzfXZhciBULHA9MCxrPTA7Zm9yKHM9bi5sZW5ndGgtMSxjPSJ0IjtzPj0wOy0tcylzd2l0Y2gobltzXS50KXtjYXNlImgiOmNhc2UiSCI6bltzXS50PXgsYz0iaCIscDwxJiYocD0xKTticmVhaztjYXNlInMiOihUPW5bc10udi5tYXRjaCgvXC4wKyQvKSkmJihr''@;'; put 'put ''PU1hdGgubWF4KGssVFswXS5sZW5ndGgtMSkpLHA8MyYmKHA9Myk7Y2FzZSJkIjpjYXNlInkiOmNhc2UiTSI6Y2FzZSJlIjpjPW5bc10udDticmVhaztjYXNlIm0iOiJzIj09PWMmJihuW3NdLnQ9Ik0iLHA8MiYmKHA9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjpwPDEmJm5bc10u''@;'; put 'put ''di5tYXRjaCgvW0hoXS8pJiYocD0xKSxwPDImJm5bc10udi5tYXRjaCgvW01tXS8pJiYocD0yKSxwPDMmJm5bc10udi5tYXRjaCgvW1NzXS8pJiYocD0zKX1zd2l0Y2gocCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnU+PS41JiYoby51PTAsKytvLlMpLG8uUz49NjAmJihvLlM9MCwrK28uTSks''@;'; put 'put ''by5NPj02MCYmKG8uTT0wLCsrby5IKTticmVhaztjYXNlIDI6by51Pj0uNSYmKG8udT0wLCsrby5TKSxvLlM+PTYwJiYoby5TPTAsKytvLk0pfXZhciBOLGc9IiI7Zm9yKHM9MDtzPG4ubGVuZ3RoOysrcylzd2l0Y2gobltzXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJy''@;'; put 'put ''ZWFrO2Nhc2UiWCI6bltzXS52PSIiLG5bc10udD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpuW3NdLnY9R2MobltzXS50LmNoYXJDb2RlQXQoMCksbltzXS52LG8sayksbltz''@;'; put 'put ''XS50PSJ0IjticmVhaztjYXNlIm4iOmNhc2UiPyI6Zm9yKE49cysxO251bGwhPW5bTl0mJigiPyI9PT0oZj1uW05dLnQpfHwiRCI9PT1mfHwoIiAiPT09Znx8InQiPT09ZikmJm51bGwhPW5bTisxXSYmKCI/Ij09PW5bTisxXS50fHwidCI9PT1uW04rMV0udCYmIi8iPT09bltOKzFdLnYpfHwi''@;'; put 'put ''KCI9PT1uW3NdLnQmJigiICI9PT1mfHwibiI9PT1mfHwiKSI9PT1mKXx8InQiPT09ZiYmKCIvIj09PW5bTl0udnx8IiAiPT09bltOXS52JiZudWxsIT1uW04rMV0mJiI/Ij09bltOKzFdLnQpKTspbltzXS52Kz1uW05dLnYsbltOXT17djoiIix0OiI7In0sKytOO2crPW5bc10udixzPU4tMTti''@;'; put 'put ''cmVhaztjYXNlIkciOm5bc10udD0idCIsbltzXS52PU50KHQscil9dmFyIEkseSxNPSIiO2lmKGcubGVuZ3RoPjApezQwPT1nLmNoYXJDb2RlQXQoMCk/KEk9dDwwJiY0NT09PWcuY2hhckNvZGVBdCgwKT8tdDp0LHk9bHQoIm4iLGcsSSkpOih5PWx0KCJuIixnLEk9dDwwJiZhPjE/LXQ6dCks''@;'; put 'put ''STwwJiZuWzBdJiYidCI9PW5bMF0udCYmKHk9eS5zdWJzdHIoMSksblswXS52PSItIituWzBdLnYpKSxOPXkubGVuZ3RoLTE7dmFyIFA9bi5sZW5ndGg7Zm9yKHM9MDtzPG4ubGVuZ3RoOysrcylpZihudWxsIT1uW3NdJiYidCIhPW5bc10udCYmbltzXS52LmluZGV4T2YoIi4iKT4tMSl7UD1z''@;'; put 'put ''O2JyZWFrfXZhciBSPW4ubGVuZ3RoO2lmKFA9PT1uLmxlbmd0aCYmLTE9PT15LmluZGV4T2YoIkUiKSl7Zm9yKHM9bi5sZW5ndGgtMTtzPj0wOy0tcyludWxsPT1uW3NdfHwtMT09PSJuPyIuaW5kZXhPZihuW3NdLnQpfHwoTj49bltzXS52Lmxlbmd0aC0xP25bc10udj15LnN1YnN0cigxKyhO''@;'; put 'put ''LT1uW3NdLnYubGVuZ3RoKSxuW3NdLnYubGVuZ3RoKTpOPDA/bltzXS52PSIiOihuW3NdLnY9eS5zdWJzdHIoMCxOKzEpLE49LTEpLG5bc10udD0idCIsUj1zKTtOPj0wJiZSPG4ubGVuZ3RoJiYobltSXS52PXkuc3Vic3RyKDAsTisxKStuW1JdLnYpfWVsc2UgaWYoUCE9PW4ubGVuZ3RoJiYt''@;'; put 'put ''MT09PXkuaW5kZXhPZigiRSIpKXtmb3IoTj15LmluZGV4T2YoIi4iKS0xLHM9UDtzPj0wOy0tcylpZihudWxsIT1uW3NdJiYtMSE9PSJuPyIuaW5kZXhPZihuW3NdLnQpKXtmb3IobD1uW3NdLnYuaW5kZXhPZigiLiIpPi0xJiZzPT09UD9uW3NdLnYuaW5kZXhPZigiLiIpLTE6bltzXS52Lmxl''@;'; put 'put ''bmd0aC0xLE09bltzXS52LnN1YnN0cihsKzEpO2w+PTA7LS1sKU4+PTAmJigiMCI9PT1uW3NdLnYuY2hhckF0KGwpfHwiIyI9PT1uW3NdLnYuY2hhckF0KGwpKSYmKE09eS5jaGFyQXQoTi0tKStNKTtuW3NdLnY9TSxuW3NdLnQ9InQiLFI9c31mb3IoTj49MCYmUjxuLmxlbmd0aCYmKG5bUl0u''@;'; put 'put ''dj15LnN1YnN0cigwLE4rMSkrbltSXS52KSxOPXkuaW5kZXhPZigiLiIpKzEscz1QO3M8bi5sZW5ndGg7KytzKWlmKG51bGwhPW5bc10mJigtMSE9PSJuPygiLmluZGV4T2YobltzXS50KXx8cz09PVApKXtmb3IobD1uW3NdLnYuaW5kZXhPZigiLiIpPi0xJiZzPT09UD9uW3NdLnYuaW5kZXhP''@;'; put 'put ''ZigiLiIpKzE6MCxNPW5bc10udi5zdWJzdHIoMCxsKTtsPG5bc10udi5sZW5ndGg7KytsKU48eS5sZW5ndGgmJihNKz15LmNoYXJBdChOKyspKTtuW3NdLnY9TSxuW3NdLnQ9InQiLFI9c319fWZvcihzPTA7czxuLmxlbmd0aDsrK3MpbnVsbCE9bltzXSYmIm4/Ii5pbmRleE9mKG5bc10udCk+''@;'; put 'put ''LTEmJihuW3NdLnY9bHQobltzXS50LG5bc10udixJPWE+MSYmdDwwJiZzPjAmJiItIj09PW5bcy0xXS52Py10OnQpLG5bc10udD0idCIpO3ZhciBWPSIiO2ZvcihzPTA7cyE9PW4ubGVuZ3RoOysrcyludWxsIT1uW3NdJiYoVis9bltzXS52KTtyZXR1cm4gVn0oblsxXSx0LHIsblswXSl9ZnVu''@;'; put 'put ''Y3Rpb24gZXQoZSx0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpe3Q9K3R8fC0xO2Zvcih2YXIgcj0wO3I8MzkyOysrcilpZihudWxsIT1wZVtyXSl7aWYocGVbcl09PWUpe3Q9cjticmVha319ZWxzZSB0PDAmJih0PXIpO3Q8MCYmKHQ9MzkxKX1yZXR1cm4gcGVbdF09ZSx0fWZ1bmN0aW9uIHRh''@;'; put 'put ''KCl7cGU9ZnVuY3Rpb24gTGMoZSl7cmV0dXJuIGV8fChlPXt9KSxlWzBdPSJHZW5lcmFsIixlWzFdPSIwIixlWzJdPSIwLjAwIixlWzNdPSIjLCMjMCIsZVs0XT0iIywjIzAuMDAiLGVbOV09IjAlIixlWzEwXT0iMC4wMCUiLGVbMTFdPSIwLjAwRSswMCIsZVsxMl09IiMgPy8/IixlWzEzXT0i''@;'; put 'put ''IyA/Py8/PyIsZVsxNF09Im0vZC95eSIsZVsxNV09ImQtbW1tLXl5IixlWzE2XT0iZC1tbW0iLGVbMTddPSJtbW0teXkiLGVbMThdPSJoOm1tIEFNL1BNIixlWzE5XT0iaDptbTpzcyBBTS9QTSIsZVsyMF09Img6bW0iLGVbMjFdPSJoOm1tOnNzIixlWzIyXT0ibS9kL3l5IGg6bW0iLGVbMzdd''@;'; put 'put ''PSIjLCMjMCA7KCMsIyMwKSIsZVszOF09IiMsIyMwIDtbUmVkXSgjLCMjMCkiLGVbMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixlWzQwXT0iIywjIzAuMDA7W1JlZF0oIywjIzAuMDApIixlWzQ1XT0ibW06c3MiLGVbNDZdPSJbaF06bW06c3MiLGVbNDddPSJtbXNzLjAiLGVbNDhdPSIjIzAu''@;'; put 'put ''MEUrMCIsZVs0OV09IkAiLGVbNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsZX0oKX12YXIgYW89ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNzon''@;'; put 'put ''IiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJywyMzoiR2VuZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJHZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6Im0vZC95eSIsMzA6''@;'; put 'put ''Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJoOm1tOnNzIiwzNDoiaDptbTpzcyIsMzU6Img6bW06c3MiLDM2OiJtL2QveXkiLDQxOidfKCogIywjIzBfKTtfKCogKCMsIyMwKTtfKCogIi0iXyk7XyhAXyknLDQyOidfKCIkIiogIywjIzBfKTtfKCIkIiogKCMsIyMwKTtf''@;'; put 'put ''KCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogKCMsIyMwLjAwKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiAoIywjIzAuMDApO18oIiQiKiAiLSI/P18pO18oQF8pJyw1MDoibS9kL3l5Iiw1MToibS9kL3l5Iiw1MjoibS9k''@;'; put 'put ''L3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5Iiw1NjoibS9kL3l5Iiw1NzoibS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToiMCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIsNjI6IiMsIyMwLjAwIiw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6JyIkIiMsIyMwXyk7''@;'; put 'put ''W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY3OiIwJSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8iLDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5Iiw3MjoibS9kL3l5''@;'; put 'put ''Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIsNzY6Img6bW0iLDc3OiJoOm1tOnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5OiJtbTpzcyIsODA6IltoXTptbTpzcyIsODE6Im1tc3MuMCJ9LEVpPS9bZERdK3xbbU1dK3xbeVllRV0rfFtIaF0rfFtTc10rL2csc289ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgZT17dmVyc2lvbjoiMS4yLjAifSxyPWZ1bmN0aW9uIHQoKXtmb3IodmFyIHk9MCxQPW5ldyBBcnJheSgyNTYpLFI9MDsyNTYhPVI7KytSKVBbUl09eT0xJih5PTEmKHk9MSYoeT0xJih5PTEmKHk9MSYoeT0xJih5PTEmKHk9Uik/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMw''@;'; put 'put ''NjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MTty''@;'; put 'put ''ZXR1cm4gdHlwZW9mIEludDMyQXJyYXk8InUiP25ldyBJbnQzMkFycmF5KFApOlB9KCksbj1mdW5jdGlvbiBhKHkpe3ZhciBQPTAsUj0wLFY9MCxYPXR5cGVvZiBJbnQzMkFycmF5PCJ1Ij9uZXcgSW50MzJBcnJheSg0MDk2KTpuZXcgQXJyYXkoNDA5Nik7Zm9yKFY9MDsyNTYhPVY7KytWKVhb''@;'; put 'put ''Vl09eVtWXTtmb3IoVj0wOzI1NiE9VjsrK1YpZm9yKFI9eVtWXSxQPTI1NitWO1A8NDA5NjtQKz0yNTYpUj1YW1BdPVI+Pj44XnlbMjU1JlJdO3ZhciBiPVtdO2ZvcihWPTE7MTYhPVY7KytWKWJbVi0xXT10eXBlb2YgSW50MzJBcnJheTwidSI/WC5zdWJhcnJheSgyNTYqViwyNTYqVisyNTYp''@;'; put 'put ''Olguc2xpY2UoMjU2KlYsMjU2KlYrMjU2KTtyZXR1cm4gYn0ociksaT1uWzBdLHM9blsxXSxmPW5bMl0sYz1uWzNdLG89bls0XSxsPW5bNV0saD1uWzZdLHg9bls3XSxkPW5bOF0sdj1uWzldLHU9blsxMF0scD1uWzExXSxrPW5bMTJdLFQ9blsxM10sZz1uWzE0XTtyZXR1cm4gZS50YWJsZT1y''@;'; put 'put ''LGUuYnN0cj1mdW5jdGlvbiBOKHksUCl7Zm9yKHZhciBSPX5QLFY9MCxYPXkubGVuZ3RoO1Y8WDspUj1SPj4+OF5yWzI1NSYoUl55LmNoYXJDb2RlQXQoVisrKSldO3JldHVybn5SfSxlLmJ1Zj1mdW5jdGlvbiBNKHksUCl7Zm9yKHZhciBSPX5QLFY9eS5sZW5ndGgtMTUsWD0wO1g8VjspUj1n''@;'; put 'put ''W3lbWCsrXV4yNTUmUl1eVFt5W1grK11eUj4+OCYyNTVdXmtbeVtYKytdXlI+PjE2JjI1NV1ecFt5W1grK11eUj4+PjI0XV51W3lbWCsrXV1edlt5W1grK11dXmRbeVtYKytdXV54W3lbWCsrXV1eaFt5W1grK11dXmxbeVtYKytdXV5vW3lbWCsrXV1eY1t5W1grK11dXmZbeVtYKytdXV5zW3lb''@;'; put 'put ''WCsrXV1eaVt5W1grK11dXnJbeVtYKytdXTtmb3IoVis9MTU7WDxWOylSPVI+Pj44XnJbMjU1JihSXnlbWCsrXSldO3JldHVybn5SfSxlLnN0cj1mdW5jdGlvbiBJKHksUCl7Zm9yKHZhciBSPX5QLFY9MCxYPXkubGVuZ3RoLGI9MCxlZT0wO1Y8WDspKGI9eS5jaGFyQ29kZUF0KFYrKykpPDEy''@;'; put 'put ''OD9SPVI+Pj44XnJbMjU1JihSXmIpXTpiPDIwNDg/Uj0oUj1SPj4+OF5yWzI1NSYoUl4oMTkyfGI+PjYmMzEpKV0pPj4+OF5yWzI1NSYoUl4oMTI4fDYzJmIpKV06Yj49NTUyOTYmJmI8NTczNDQ/KGI9NjQrKDEwMjMmYiksZWU9MTAyMyZ5LmNoYXJDb2RlQXQoVisrKSxSPShSPShSPShSPVI+''@;'; put 'put ''Pj44XnJbMjU1JihSXigyNDB8Yj4+OCY3KSldKT4+PjheclsyNTUmKFJeKDEyOHxiPj4yJjYzKSldKT4+PjheclsyNTUmKFJeKDEyOHxlZT4+NiYxNXwoMyZiKTw8NCkpXSk+Pj44XnJbMjU1JihSXigxMjh8NjMmZWUpKV0pOlI9KFI9KFI9Uj4+PjheclsyNTUmKFJeKDIyNHxiPj4xMiYxNSkp''@;'; put 'put ''XSk+Pj44XnJbMjU1JihSXigxMjh8Yj4+NiY2MykpXSk+Pj44XnJbMjU1JihSXigxMjh8NjMmYikpXTtyZXR1cm5+Un0sZX0oKSx2ZT1mdW5jdGlvbigpe3ZhciBjLHQ9e307ZnVuY3Rpb24gYShtKXtpZigiLyI9PW0uY2hhckF0KG0ubGVuZ3RoLTEpKXJldHVybi0xPT09bS5zbGljZSgwLC0x''@;'; put 'put ''KS5pbmRleE9mKCIvIik/bTphKG0uc2xpY2UoMCwtMSkpO3ZhciBFPW0ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PUU/bTptLnNsaWNlKDAsRSsxKX1mdW5jdGlvbiBuKG0pe2lmKCIvIj09bS5jaGFyQXQobS5sZW5ndGgtMSkpcmV0dXJuIG4obS5zbGljZSgwLC0xKSk7dmFyIEU9bS5s''@;'; put 'put ''YXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09RT9tOm0uc2xpY2UoRSsxKX1mdW5jdGlvbiBpKG0sRSl7InN0cmluZyI9PXR5cGVvZiBFJiYoRT1uZXcgRGF0ZShFKSk7dmFyIF89RS5nZXRIb3VycygpO189KF89Xzw8NnxFLmdldE1pbnV0ZXMoKSk8PDV8RS5nZXRTZWNvbmRzKCk+Pj4xLG0u''@;'; put 'put ''d3JpdGVfc2hpZnQoMixfKTt2YXIgdz1FLmdldEZ1bGxZZWFyKCktMTk4MDt3PSh3PXc8PDR8RS5nZXRNb250aCgpKzEpPDw1fEUuZ2V0RGF0ZSgpLG0ud3JpdGVfc2hpZnQoMix3KX1mdW5jdGlvbiBmKG0pe2hyKG0sMCk7Zm9yKHZhciBFPXt9LF89MDttLmw8PW0ubGVuZ3RoLTQ7KXt2YXIg''@;'; put 'put ''dz1tLnJlYWRfc2hpZnQoMiksUz1tLnJlYWRfc2hpZnQoMiksRj1tLmwrUyxMPXt9OzIxNTg5PT09dyYmKDEmKF89bS5yZWFkX3NoaWZ0KDEpKSYmKEwubXRpbWU9bS5yZWFkX3NoaWZ0KDQpKSxTPjUmJigyJl8mJihMLmF0aW1lPW0ucmVhZF9zaGlmdCg0KSksNCZfJiYoTC5jdGltZT1tLnJl''@;'; put 'put ''YWRfc2hpZnQoNCkpKSxMLm10aW1lJiYoTC5tdD1uZXcgRGF0ZSgxZTMqTC5tdGltZSkpKSxtLmw9RixFW3ddPUx9cmV0dXJuIEV9ZnVuY3Rpb24gbygpe3JldHVybiBjfHwoYz17fSl9ZnVuY3Rpb24gbChtLEUpe2lmKDgwPT1tWzBdJiY3NT09bVsxXSlyZXR1cm4gQ2MobSxFKTtpZigxMDk9''@;'; put 'put ''PSgzMnxtWzBdKSYmMTA1PT0oMzJ8bVsxXSkpcmV0dXJuIGZ1bmN0aW9uIE5nKG0sRSl7aWYoIm1pbWUtdmVyc2lvbjoiIT1jZShtLnNsaWNlKDAsMTMpKS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTUFEIGhlYWRlciIpO3ZhciBfPUUmJkUucm9vdHx8IiIs''@;'; put 'put ''dz0oU2UmJkJ1ZmZlci5pc0J1ZmZlcihtKT9tLnRvU3RyaW5nKCJiaW5hcnkiKTpjZShtKSkuc3BsaXQoIlxyXG4iKSxTPTAsRj0iIjtmb3IoUz0wO1M8dy5sZW5ndGg7KytTKWlmKC9eQ29udGVudC1Mb2NhdGlvbjovaS50ZXN0KEY9d1tTXSkmJihGPUYuc2xpY2UoRi5pbmRleE9mKCJmaWxl''@;'; put 'put ''IikpLF98fChfPUYuc2xpY2UoMCxGLmxhc3RJbmRleE9mKCIvIikrMSkpLEYuc2xpY2UoMCxfLmxlbmd0aCkhPV8pKWZvcig7Xy5sZW5ndGg+MCYmKF89KF89Xy5zbGljZSgwLF8ubGVuZ3RoLTEpKS5zbGljZSgwLF8ubGFzdEluZGV4T2YoIi8iKSsxKSxGLnNsaWNlKDAsXy5sZW5ndGgpIT1f''@;'; put 'put ''KTspO3ZhciBMPSh3WzFdfHwiIikubWF0Y2goL2JvdW5kYXJ5PSIoLio/KSIvKTtpZighTCl0aHJvdyBuZXcgRXJyb3IoIk1BRCBjYW5ub3QgZmluZCBib3VuZGFyeSIpO3ZhciB6PSItLSIrKExbMV18fCIiKSxIPXtGaWxlSW5kZXg6W10sRnVsbFBhdGhzOltdfTt5KEgpO3ZhciBxLG5lPTA7''@;'; put 'put ''Zm9yKFM9MDtTPHcubGVuZ3RoOysrUyl7dmFyIGhlPXdbU107aGUhPT16JiZoZSE9PXorIi0tInx8KG5lKysmJlJnKEgsdy5zbGljZShxLFMpLF8pLHE9Uyl9cmV0dXJuIEh9KG0sRSk7aWYobS5sZW5ndGg8NTEyKXRocm93IG5ldyBFcnJvcigiQ0ZCIGZpbGUgc2l6ZSAiK20ubGVuZ3RoKyIg''@;'; put 'put ''PCA1MTIiKTt2YXIgXyxTLEYsTCx6LFcsdz01MTIsQj1bXSxIPW0uc2xpY2UoMCw1MTIpO2hyKEgsMCk7dmFyIHE9ZnVuY3Rpb24gaChtKXtpZig4MD09bVttLmxdJiY3NT09bVttLmwrMV0pcmV0dXJuWzAsMF07bS5jaGsobGUsIkhlYWRlciBTaWduYXR1cmU6ICIpLG0ubCs9MTY7dmFyIEU9''@;'; put 'put ''bS5yZWFkX3NoaWZ0KDIsInUiKTtyZXR1cm5bbS5yZWFkX3NoaWZ0KDIsInUiKSxFXX0oSCk7c3dpdGNoKF89cVswXSl7Y2FzZSAzOnc9NTEyO2JyZWFrO2Nhc2UgNDp3PTQwOTY7YnJlYWs7Y2FzZSAwOmlmKDA9PXFbMV0pcmV0dXJuIENjKG0sRSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Ik1ham9yIFZlcnNpb246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIitfKX01MTIhPT13JiZocihIPW0uc2xpY2UoMCx3KSwyOCk7dmFyIG5lPW0uc2xpY2UoMCx3KTshZnVuY3Rpb24geChtLEUpe3ZhciBfO3N3aXRjaChtLmwrPTIsXz1tLnJlYWRfc2hpZnQoMikpe2Nhc2UgOTppZigzIT1FKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IHNhdyAiK18pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9RSl0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgMTIgc2F3ICIrXyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlm''@;'; put 'put ''dDogRXhwZWN0ZWQgOSBvciAxMiBzYXcgIitfKX1tLmNoaygiMDYwMCIsIk1pbmkgU2VjdG9yIFNoaWZ0OiAiKSxtLmNoaygiMDAwMDAwMDAwMDAwIiwiUmVzZXJ2ZWQ6ICIpfShILF8pO3ZhciBoZT1ILnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT1fJiYwIT09aGUpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK2hlKTtILmwrPTQsTD1ILnJlYWRfc2hpZnQoNCwiaSIpLEgubCs9NCxILmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZTogIiksej1ILnJlYWRfc2hpZnQoNCwiaSIpLFM9SC5yZWFkX3NoaWZ0KDQs''@;'; put 'put ''ImkiKSxXPUgucmVhZF9zaGlmdCg0LCJpIiksRj1ILnJlYWRfc2hpZnQoNCwiaSIpO2Zvcih2YXIgaWU9LTEsZmU9MDtmZTwxMDkmJiEoKGllPUgucmVhZF9zaGlmdCg0LCJpIikpPDApOysrZmUpQltmZV09aWU7dmFyIF9lPWZ1bmN0aW9uIGQobSxFKXtmb3IodmFyIF89TWF0aC5jZWlsKG0u''@;'; put 'put ''bGVuZ3RoL0UpLTEsdz1bXSxTPTE7UzxfOysrUyl3W1MtMV09bS5zbGljZShTKkUsKFMrMSkqRSk7cmV0dXJuIHdbXy0xXT1tLnNsaWNlKF8qRSksd30obSx3KTtwKFcsRixfZSx3LEIpO3ZhciBWZT1mdW5jdGlvbiBUKG0sRSxfLHcpe3ZhciBTPW0ubGVuZ3RoLEY9W10sTD1bXSx6PVtdLFc9''@;'; put 'put ''W10sQj13LTEsSD0wLHE9MCxuZT0wLGhlPTA7Zm9yKEg9MDtIPFM7KytIKWlmKHo9W10sKG5lPUgrRSk+PVMmJihuZS09UyksIUxbbmVdKXtXPVtdO3ZhciBpZT1bXTtmb3IocT1uZTtxPj0wOyl7aWVbcV09ITAsTFtxXT0hMCx6W3oubGVuZ3RoXT1xLFcucHVzaChtW3FdKTt2YXIgZmU9X1tN''@;'; put 'put ''YXRoLmZsb29yKDQqcS93KV07aWYodzw0KyhoZT00KnEmQikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitxKyIgNCAiK3cpO2lmKCFtW2ZlXXx8aWVbcT1MdChtW2ZlXSxoZSldKWJyZWFrfUZbbmVdPXtub2Rlczp6LGRhdGE6emkoW1ddKX19cmV0dXJuIEZ9KF9l''@;'; put 'put ''LEwsQix3KTtWZVtMXS5uYW1lPSIhRGlyZWN0b3J5IixTPjAmJnohPT1lZSYmKFZlW3pdLm5hbWU9IiFNaW5pRkFUIiksVmVbQlswXV0ubmFtZT0iIUZBVCIsVmUuZmF0X2FkZHJzPUIsVmUuc3N6PXc7dmFyIG5yPVtdLEJyPVtdLFphPVtdOyhmdW5jdGlvbiBnKG0sRSxfLHcsUyxGLEwseil7''@;'; put 'put ''Zm9yKHZhciBoZSxXPTAsQj13Lmxlbmd0aD8yOjAsSD1FW21dLmRhdGEscT0wLG5lPTA7cTxILmxlbmd0aDtxKz0xMjgpe3ZhciBpZT1ILnNsaWNlKHEscSsxMjgpO2hyKGllLDY0KSxuZT1pZS5yZWFkX3NoaWZ0KDIpLGhlPXUwKGllLDAsbmUtQiksdy5wdXNoKGhlKTt2YXIgZmU9e25hbWU6''@;'; put 'put ''aGUsdHlwZTppZS5yZWFkX3NoaWZ0KDEpLGNvbG9yOmllLnJlYWRfc2hpZnQoMSksTDppZS5yZWFkX3NoaWZ0KDQsImkiKSxSOmllLnJlYWRfc2hpZnQoNCwiaSIpLEM6aWUucmVhZF9zaGlmdCg0LCJpIiksY2xzaWQ6aWUucmVhZF9zaGlmdCgxNiksc3RhdGU6aWUucmVhZF9zaGlmdCg0LCJp''@;'; put 'put ''Iiksc3RhcnQ6MCxzaXplOjB9OzAhPT1pZS5yZWFkX3NoaWZ0KDIpK2llLnJlYWRfc2hpZnQoMikraWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpJiYoZmUuY3Q9TihpZSxpZS5sLTgpKSwwIT09aWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpK2llLnJlYWRfc2hpZnQo''@;'; put 'put ''MikraWUucmVhZF9zaGlmdCgyKSYmKGZlLm10PU4oaWUsaWUubC04KSksZmUuc3RhcnQ9aWUucmVhZF9zaGlmdCg0LCJpIiksZmUuc2l6ZT1pZS5yZWFkX3NoaWZ0KDQsImkiKSxmZS5zaXplPDAmJmZlLnN0YXJ0PDAmJihmZS5zaXplPWZlLnR5cGU9MCxmZS5zdGFydD1lZSxmZS5uYW1lPSIi''@;'; put 'put ''KSw1PT09ZmUudHlwZT8oVz1mZS5zdGFydCxTPjAmJlchPT1lZSYmKEVbV10ubmFtZT0iIVN0cmVhbURhdGEiKSk6ZmUuc2l6ZT49NDA5Nj8oZmUuc3RvcmFnZT0iZmF0Iix2b2lkIDA9PT1FW2ZlLnN0YXJ0XSYmKEVbZmUuc3RhcnRdPWsoXyxmZS5zdGFydCxFLmZhdF9hZGRycyxFLnNzeikp''@;'; put 'put ''LEVbZmUuc3RhcnRdLm5hbWU9ZmUubmFtZSxmZS5jb250ZW50PUVbZmUuc3RhcnRdLmRhdGEuc2xpY2UoMCxmZS5zaXplKSk6KGZlLnN0b3JhZ2U9Im1pbmlmYXQiLGZlLnNpemU8MD9mZS5zaXplPTA6VyE9PWVlJiZmZS5zdGFydCE9PWVlJiZFW1ddJiYoZmUuY29udGVudD11KGZlLEVbV10u''@;'; put 'put ''ZGF0YSwoRVt6XXx8e30pLmRhdGEpKSksZmUuY29udGVudCYmaHIoZmUuY29udGVudCwwKSxGW2hlXT1mZSxMLnB1c2goZmUpfX0pKEwsVmUsX2UsbnIsUyx7fSxCcix6KSxmdW5jdGlvbiB2KG0sRSxfKXtmb3IodmFyIHc9MCxTPTAsRj0wLEw9MCx6PTAsVz1fLmxlbmd0aCxCPVtdLEg9W107''@;'; put 'put ''dzxXOysrdylCW3ddPUhbd109dyxFW3ddPV9bd107Zm9yKDt6PEgubGVuZ3RoOysreilTPW1bdz1IW3pdXS5MLEY9bVt3XS5SLEw9bVt3XS5DLEJbd109PT13JiYoLTEhPT1TJiZCW1NdIT09UyYmKEJbd109QltTXSksLTEhPT1GJiZCW0ZdIT09RiYmKEJbd109QltGXSkpLC0xIT09TCYmKEJb''@;'; put 'put ''TF09dyksLTEhPT1TJiZ3IT1CW3ddJiYoQltTXT1CW3ddLEgubGFzdEluZGV4T2YoUyk8eiYmSC5wdXNoKFMpKSwtMSE9PUYmJnchPUJbd10mJihCW0ZdPUJbd10sSC5sYXN0SW5kZXhPZihGKTx6JiZILnB1c2goRikpO2Zvcih3PTE7dzxXOysrdylCW3ddPT09dyYmKC0xIT09RiYmQltGXSE9''@;'; put 'put ''PUY/Qlt3XT1CW0ZdOi0xIT09UyYmQltTXSE9PVMmJihCW3ddPUJbU10pKTtmb3Iodz0xO3c8VzsrK3cpaWYoMCE9PW1bd10udHlwZSl7aWYoKHo9dykhPUJbel0pZG97RVt3XT1FW3o9Qlt6XV0rIi8iK0Vbd119d2hpbGUoMCE9PXomJi0xIT09Qlt6XSYmeiE9Qlt6XSk7Qlt3XT0tMX1mb3Io''@;'; put 'put ''RVswXSs9Ii8iLHc9MTt3PFc7Kyt3KTIhPT1tW3ddLnR5cGUmJihFW3ddKz0iLyIpfShCcixaYSxuciksbnIuc2hpZnQoKTt2YXIgUWE9e0ZpbGVJbmRleDpCcixGdWxsUGF0aHM6WmF9O3JldHVybiBFJiZFLnJhdyYmKFFhLnJhdz17aGVhZGVyOm5lLHNlY3RvcnM6X2V9KSxRYX1mdW5jdGlv''@;'; put 'put ''biB1KG0sRSxfKXtmb3IodmFyIFM9bS5zaXplLEY9W10sTD1tLnN0YXJ0O18mJlM+MCYmTD49MDspRi5wdXNoKEUuc2xpY2UoTCpiLEwqYitiKSksUy09YixMPUx0KF8sNCpMKTtyZXR1cm4gMD09PUYubGVuZ3RoP0coMCk6ZnIoRikuc2xpY2UoMCxtLnNpemUpfWZ1bmN0aW9uIHAobSxFLF8s''@;'; put 'put ''dyxTKXt2YXIgRj1lZTtpZihtPT09ZWUpe2lmKDAhPT1FKXRocm93IG5ldyBFcnJvcigiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigtMSE9PW0pe3ZhciBMPV9bbV0sej0odz4+PjIpLTE7aWYoIUwpcmV0dXJuO2Zvcih2YXIgVz0wO1c8eiYmKEY9THQoTCw0''@;'; put 'put ''KlcpKSE9PWVlOysrVylTLnB1c2goRik7cChMdChMLHctNCksRS0xLF8sdyxTKX19ZnVuY3Rpb24gayhtLEUsXyx3LFMpe3ZhciBGPVtdLEw9W107U3x8KFM9W10pO3ZhciB6PXctMSxXPTAsQj0wO2ZvcihXPUU7Vz49MDspe1NbV109ITAsRltGLmxlbmd0aF09VyxMLnB1c2gobVtXXSk7dmFy''@;'; put 'put ''IEg9X1tNYXRoLmZsb29yKDQqVy93KV07aWYodzw0KyhCPTQqVyZ6KSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK1crIiA0ICIrdyk7aWYoIW1bSF0pYnJlYWs7Vz1MdChtW0hdLEIpfXJldHVybntub2RlczpGLGRhdGE6emkoW0xdKX19ZnVuY3Rpb24gTihtLEUp''@;'; put 'put ''e3JldHVybiBuZXcgRGF0ZSgxZTMqKGNyKG0sRSs0KS8xZTcqTWF0aC5wb3coMiwzMikrY3IobSxFKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiB5KG0sRSl7dmFyIF89RXx8e30sdz1fLnJvb3R8fCJSb290IEVudHJ5IjtpZihtLkZ1bGxQYXRoc3x8KG0uRnVsbFBhdGhzPVtdKSxtLkZp''@;'; put 'put ''bGVJbmRleHx8KG0uRmlsZUluZGV4PVtdKSxtLkZ1bGxQYXRocy5sZW5ndGghPT1tLkZpbGVJbmRleC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpbmNvbnNpc3RlbnQgQ0ZCIHN0cnVjdHVyZSIpOzA9PT1tLkZ1bGxQYXRocy5sZW5ndGgmJihtLkZ1bGxQYXRoc1swXT13KyIvIixtLkZpbGVJ''@;'; put 'put ''bmRleFswXT17bmFtZTp3LHR5cGU6NX0pLF8uQ0xTSUQmJihtLkZpbGVJbmRleFswXS5jbHNpZD1fLkNMU0lEKSxmdW5jdGlvbiBQKG0pe3ZhciBFPSJceDAxU2gzM3RKNSI7aWYoIXZlLmZpbmQobSwiLyIrRSkpe3ZhciBfPUcoNCk7X1swXT01NSxfWzFdPV9bM109NTAsX1syXT01NCxtLkZp''@;'; put 'put ''bGVJbmRleC5wdXNoKHtuYW1lOkUsdHlwZToyLGNvbnRlbnQ6XyxzaXplOjQsTDo2OSxSOjY5LEM6Njl9KSxtLkZ1bGxQYXRocy5wdXNoKG0uRnVsbFBhdGhzWzBdK0UpLFIobSl9fShtKX1mdW5jdGlvbiBSKG0sRSl7eShtKTtmb3IodmFyIF89ITEsdz0hMSxTPW0uRnVsbFBhdGhzLmxlbmd0''@;'; put 'put ''aC0xO1M+PTA7LS1TKXt2YXIgRj1tLkZpbGVJbmRleFtTXTtzd2l0Y2goRi50eXBlKXtjYXNlIDA6dz9fPSEwOihtLkZpbGVJbmRleC5wb3AoKSxtLkZ1bGxQYXRocy5wb3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNlIDU6dz0hMCxpc05hTihGLlIqRi5MKkYuQykmJihfPSEwKSxGLlI+''@;'; put 'put ''LTEmJkYuTD4tMSYmRi5SPT1GLkwmJihfPSEwKTticmVhaztkZWZhdWx0Ol89ITB9fWlmKF98fEUpe3ZhciBMPW5ldyBEYXRlKDE5ODcsMSwxOSksej0wLFc9T2JqZWN0LmNyZWF0ZT9PYmplY3QuY3JlYXRlKG51bGwpOnt9LEI9W107Zm9yKFM9MDtTPG0uRnVsbFBhdGhzLmxlbmd0aDsrK1Mp''@;'; put 'put ''V1ttLkZ1bGxQYXRoc1tTXV09ITAsMCE9PW0uRmlsZUluZGV4W1NdLnR5cGUmJkIucHVzaChbbS5GdWxsUGF0aHNbU10sbS5GaWxlSW5kZXhbU11dKTtmb3IoUz0wO1M8Qi5sZW5ndGg7KytTKXt2YXIgSD1hKEJbU11bMF0pOyh3PVdbSF0pfHwoQi5wdXNoKFtILHtuYW1lOm4oSCkucmVwbGFj''@;'; put 'put ''ZSgiLyIsIiIpLHR5cGU6MSxjbHNpZDpkZSxjdDpMLG10OkwsY29udGVudDpudWxsfV0pLFdbSF09ITApfWZvcihCLnNvcnQoZnVuY3Rpb24oaGUsaWUpe3JldHVybiBmdW5jdGlvbiByKG0sRSl7Zm9yKHZhciBfPW0uc3BsaXQoIi8iKSx3PUUuc3BsaXQoIi8iKSxTPTAsRj0wLEw9TWF0aC5t''@;'; put 'put ''aW4oXy5sZW5ndGgsdy5sZW5ndGgpO1M8TDsrK1Mpe2lmKEY9X1tTXS5sZW5ndGgtd1tTXS5sZW5ndGgpcmV0dXJuIEY7aWYoX1tTXSE9d1tTXSlyZXR1cm4gX1tTXTx3W1NdPy0xOjF9cmV0dXJuIF8ubGVuZ3RoLXcubGVuZ3RofShoZVswXSxpZVswXSl9KSxtLkZ1bGxQYXRocz1bXSxtLkZp''@;'; put 'put ''bGVJbmRleD1bXSxTPTA7UzxCLmxlbmd0aDsrK1MpbS5GdWxsUGF0aHNbU109QltTXVswXSxtLkZpbGVJbmRleFtTXT1CW1NdWzFdO2ZvcihTPTA7UzxCLmxlbmd0aDsrK1Mpe3ZhciBxPW0uRmlsZUluZGV4W1NdLG5lPW0uRnVsbFBhdGhzW1NdO2lmKHEubmFtZT1uKG5lKS5yZXBsYWNlKCIv''@;'; put 'put ''IiwiIikscS5MPXEuUj1xLkM9LShxLmNvbG9yPTEpLHEuc2l6ZT1xLmNvbnRlbnQ/cS5jb250ZW50Lmxlbmd0aDowLHEuc3RhcnQ9MCxxLmNsc2lkPXEuY2xzaWR8fGRlLDA9PT1TKXEuQz1CLmxlbmd0aD4xPzE6LTEscS5zaXplPTAscS50eXBlPTU7ZWxzZSBpZigiLyI9PW5lLnNsaWNlKC0x''@;'; put 'put ''KSl7Zm9yKHo9UysxO3o8Qi5sZW5ndGgmJmEobS5GdWxsUGF0aHNbel0pIT1uZTsrK3opO2ZvcihxLkM9ej49Qi5sZW5ndGg/LTE6eix6PVMrMTt6PEIubGVuZ3RoJiZhKG0uRnVsbFBhdGhzW3pdKSE9YShuZSk7Kyt6KTtxLlI9ej49Qi5sZW5ndGg/LTE6eixxLnR5cGU9MX1lbHNlIGEobS5G''@;'; put 'put ''dWxsUGF0aHNbUysxXXx8IiIpPT1hKG5lKSYmKHEuUj1TKzEpLHEudHlwZT0yfX19ZnVuY3Rpb24gVihtLEUpe3ZhciBfPUV8fHt9O2lmKCJtYWQiPT1fLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiBiZyhtLEUpe2Zvcih2YXIgXz1FfHx7fSx3PV8uYm91bmRhcnl8fCJTaGVldEpTIixTPVsi''@;'; put 'put ''TUlNRS1WZXJzaW9uOiAxLjAiLCdDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iJysodz0iLS0tLS0tPSIrdykuc2xpY2UoMikrJyInLCIiLCIiLCIiXSxGPW0uRnVsbFBhdGhzWzBdLEw9Rix6PW0uRmlsZUluZGV4WzBdLFc9MTtXPG0uRnVsbFBhdGhzLmxlbmd0''@;'; put 'put ''aDsrK1cpaWYoTD1tLkZ1bGxQYXRoc1tXXS5zbGljZShGLmxlbmd0aCksKHo9bS5GaWxlSW5kZXhbV10pLnNpemUmJnouY29udGVudCYmIlx4MDFTaDMzdEo1IiE9TCl7TD1MLnJlcGxhY2UoL1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0UtXHhGRl0vZyxmdW5jdGlvbihfZSl7cmV0''@;'; put 'put ''dXJuIl94IitfZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiXyJ9KS5yZXBsYWNlKC9bXHUwMDgwLVx1RkZGRl0vZyxmdW5jdGlvbihfZSl7cmV0dXJuIl91IitfZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiXyJ9KTtmb3IodmFyIEI9ei5jb250ZW50LEg9U2UmJkJ1ZmZlci5p''@;'; put 'put ''c0J1ZmZlcihCKT9CLnRvU3RyaW5nKCJiaW5hcnkiKTpjZShCKSxxPTAsbmU9TWF0aC5taW4oMTAyNCxILmxlbmd0aCksaGU9MCxpZT0wO2llPD1uZTsrK2llKShoZT1ILmNoYXJDb2RlQXQoaWUpKT49MzImJmhlPDEyOCYmKytxO3ZhciBmZT1xPj00Km5lLzU7Uy5wdXNoKHcpLFMucHVzaCgi''@;'; put 'put ''Q29udGVudC1Mb2NhdGlvbjogIisoXy5yb290fHwiZmlsZTovLy9DOi9TaGVldEpTLyIpK0wpLFMucHVzaCgiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIisoZmU/InF1b3RlZC1wcmludGFibGUiOiJiYXNlNjQiKSksUy5wdXNoKCJDb250ZW50LVR5cGU6ICIrQ2coeixMKSksUy5wdXNo''@;'; put 'put ''KCIiKSxTLnB1c2goZmU/T2coSCk6RGcoSCkpfXJldHVybiBTLnB1c2godysiLS1cclxuIiksUy5qb2luKCJcclxuIil9KG0sXyk7aWYoInppcCI9PT0oUihtKSxfLmZpbGVUeXBlKSlyZXR1cm4gZnVuY3Rpb24gQWcobSxFKXt2YXIgXz1FfHx7fSx3PVtdLFM9W10sRj1HKDEpLEw9Xy5jb21w''@;'; put 'put ''cmVzc2lvbj84OjAsej0wLEI9MCxIPTAscT0wLG5lPTAsaGU9bS5GdWxsUGF0aHNbMF0saWU9aGUsZmU9bS5GaWxlSW5kZXhbMF0sX2U9W10sVmU9MDtmb3IoQj0xO0I8bS5GdWxsUGF0aHMubGVuZ3RoOysrQilpZihpZT1tLkZ1bGxQYXRoc1tCXS5zbGljZShoZS5sZW5ndGgpLChmZT1tLkZp''@;'; put 'put ''bGVJbmRleFtCXSkuc2l6ZSYmZmUuY29udGVudCYmIlx4MDFTaDMzdEo1IiE9aWUpe3ZhciBDcj1xLG5yPUcoaWUubGVuZ3RoKTtmb3IoSD0wO0g8aWUubGVuZ3RoOysrSCluci53cml0ZV9zaGlmdCgxLDEyNyZpZS5jaGFyQ29kZUF0KEgpKTtucj1uci5zbGljZSgwLG5yLmwpLF9lW25lXT1z''@;'; put 'put ''by5idWYoZmUuY29udGVudCwwKTt2YXIgQnI9ZmUuY29udGVudDs4PT1MJiYoQnI9TyhCcikpLChGPUcoMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSxGLndyaXRlX3NoaWZ0KDIsMjApLEYud3JpdGVfc2hpZnQoMix6KSxGLndyaXRlX3NoaWZ0KDIsTCksZmUubXQ/aShGLGZlLm10KTpG''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMCksRi53cml0ZV9zaGlmdCgtNCw4Jno/MDpfZVtuZV0pLEYud3JpdGVfc2hpZnQoNCw4Jno/MDpCci5sZW5ndGgpLEYud3JpdGVfc2hpZnQoNCw4Jno/MDpmZS5jb250ZW50Lmxlbmd0aCksRi53cml0ZV9zaGlmdCgyLG5yLmxlbmd0aCksRi53cml0ZV9zaGlmdCgy''@;'; put 'put ''LDApLHErPUYubGVuZ3RoLHcucHVzaChGKSxxKz1uci5sZW5ndGgsdy5wdXNoKG5yKSxxKz1Cci5sZW5ndGgsdy5wdXNoKEJyKSw4JnomJigoRj1HKDEyKSkud3JpdGVfc2hpZnQoLTQsX2VbbmVdKSxGLndyaXRlX3NoaWZ0KDQsQnIubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDQsZmUuY29udGVu''@;'; put 'put ''dC5sZW5ndGgpLHErPUYubCx3LnB1c2goRikpLChGPUcoNDYpKS53cml0ZV9zaGlmdCg0LDMzNjM5MjQ4KSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCgyLDIwKSxGLndyaXRlX3NoaWZ0KDIseiksRi53cml0ZV9zaGlmdCgyLEwpLEYud3JpdGVfc2hpZnQoNCwwKSxGLndyaXRl''@;'; put 'put ''X3NoaWZ0KC00LF9lW25lXSksRi53cml0ZV9zaGlmdCg0LEJyLmxlbmd0aCksRi53cml0ZV9zaGlmdCg0LGZlLmNvbnRlbnQubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDIsbnIubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMiwwKSxG''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCg0LDApLEYud3JpdGVfc2hpZnQoNCxDciksVmUrPUYubCxTLnB1c2goRiksVmUrPW5yLmxlbmd0aCxTLnB1c2gobnIpLCsrbmV9cmV0dXJuKEY9RygyMikpLndyaXRlX3NoaWZ0KDQsMTAxMDEwMjU2KSxGLndyaXRlX3NoaWZ0KDIsMCks''@;'; put 'put ''Ri53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMixuZSksRi53cml0ZV9zaGlmdCgyLG5lKSxGLndyaXRlX3NoaWZ0KDQsVmUpLEYud3JpdGVfc2hpZnQoNCxxKSxGLndyaXRlX3NoaWZ0KDIsMCksZnIoW2ZyKHcpLGZyKFMpLEZdKX0obSxfKTt2YXIgdz1mdW5jdGlvbihoZSl7Zm9y''@;'; put 'put ''KHZhciBpZT0wLGZlPTAsX2U9MDtfZTxoZS5GaWxlSW5kZXgubGVuZ3RoOysrX2Upe3ZhciBWZT1oZS5GaWxlSW5kZXhbX2VdO2lmKFZlLmNvbnRlbnQpe3ZhciBDcj1WZS5jb250ZW50Lmxlbmd0aDtDcj4wJiYoQ3I8NDA5Nj9pZSs9Q3IrNjM+PjY6ZmUrPUNyKzUxMT4+OSl9fWZvcih2YXIg''@;'; put 'put ''bnI9aGUuRnVsbFBhdGhzLmxlbmd0aCszPj4yLFphPWllKzEyNz4+NyxRYT0oaWUrNz4+MykrZmUrbnIrWmEsWnQ9UWErMTI3Pj43LHRpPVp0PD0xMDk/MDpNYXRoLmNlaWwoKFp0LTEwOSkvMTI3KTtRYStadCt0aSsxMjc+Pjc+WnQ7KXRpPSsrWnQ8PTEwOT8wOk1hdGguY2VpbCgoWnQtMTA5''@;'; put 'put ''KS8xMjcpO3ZhciBtdD1bMSx0aSxadCxaYSxucixmZSxpZSwwXTtyZXR1cm4gaGUuRmlsZUluZGV4WzBdLnNpemU9aWU8PDYsbXRbN109KGhlLkZpbGVJbmRleFswXS5zdGFydD1tdFswXSttdFsxXSttdFsyXSttdFszXSttdFs0XSttdFs1XSkrKG10WzZdKzc+PjMpLG10fShtKSxTPUcod1s3''@;'; put 'put ''XTw8OSksRj0wLEw9MDtmb3IoRj0wO0Y8ODsrK0YpUy53cml0ZV9zaGlmdCgxLHJlW0ZdKTtmb3IoRj0wO0Y8ODsrK0YpUy53cml0ZV9zaGlmdCgyLDApO2ZvcihTLndyaXRlX3NoaWZ0KDIsNjIpLFMud3JpdGVfc2hpZnQoMiwzKSxTLndyaXRlX3NoaWZ0KDIsNjU1MzQpLFMud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiw5KSxTLndyaXRlX3NoaWZ0KDIsNiksRj0wO0Y8MzsrK0YpUy53cml0ZV9zaGlmdCgyLDApO2ZvcihTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LHdbMl0pLFMud3JpdGVfc2hpZnQoNCx3WzBdK3dbMV0rd1syXSt3WzNdLTEpLFMud3JpdGVfc2hpZnQoNCwwKSxTLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsNDA5NiksUy53cml0ZV9zaGlmdCg0LHdbM10/d1swXSt3WzFdK3dbMl0tMTplZSksUy53cml0ZV9zaGlmdCg0LHdbM10pLFMud3JpdGVfc2hpZnQoLTQsd1sxXT93WzBdLTE6ZWUpLFMud3JpdGVfc2hpZnQoNCx3WzFdKSxGPTA7RjwxMDk7KytGKVMud3JpdGVfc2hpZnQo''@;'; put 'put ''LTQsRjx3WzJdP3dbMV0rRjotMSk7aWYod1sxXSlmb3IoTD0wO0w8d1sxXTsrK0wpe2Zvcig7RjwyMzYrMTI3Kkw7KytGKVMud3JpdGVfc2hpZnQoLTQsRjx3WzJdP3dbMV0rRjotMSk7Uy53cml0ZV9zaGlmdCgtNCxMPT09d1sxXS0xP2VlOkwrMSl9dmFyIHo9ZnVuY3Rpb24oaGUpe2ZvcihM''@;'; put 'put ''Kz1oZTtGPEwtMTsrK0YpUy53cml0ZV9zaGlmdCgtNCxGKzEpO2hlJiYoKytGLFMud3JpdGVfc2hpZnQoLTQsZWUpKX07Zm9yKEw9Rj0wLEwrPXdbMV07RjxMOysrRilTLndyaXRlX3NoaWZ0KC00LHVlLkRJRlNFQ1QpO2ZvcihMKz13WzJdO0Y8TDsrK0YpUy53cml0ZV9zaGlmdCgtNCx1ZS5G''@;'; put 'put ''QVRTRUNUKTt6KHdbM10pLHood1s0XSk7Zm9yKHZhciBXPTAsQj0wLEg9bS5GaWxlSW5kZXhbMF07VzxtLkZpbGVJbmRleC5sZW5ndGg7KytXKShIPW0uRmlsZUluZGV4W1ddKS5jb250ZW50JiYhKChCPUguY29udGVudC5sZW5ndGgpPDQwOTYpJiYoSC5zdGFydD1MLHooQis1MTE+PjkpKTtm''@;'; put 'put ''b3Ioeih3WzZdKzc+PjMpOzUxMSZTLmw7KVMud3JpdGVfc2hpZnQoLTQsdWUuRU5ET0ZDSEFJTik7Zm9yKEw9Rj0wLFc9MDtXPG0uRmlsZUluZGV4Lmxlbmd0aDsrK1cpKEg9bS5GaWxlSW5kZXhbV10pLmNvbnRlbnQmJihCPUguY29udGVudC5sZW5ndGgpJiYhKEI+PTQwOTYpJiYoSC5zdGFy''@;'; put 'put ''dD1MLHooQis2Mz4+NikpO2Zvcig7NTExJlMubDspUy53cml0ZV9zaGlmdCgtNCx1ZS5FTkRPRkNIQUlOKTtmb3IoRj0wO0Y8d1s0XTw8MjsrK0Ype3ZhciBxPW0uRnVsbFBhdGhzW0ZdO2lmKHEmJjAhPT1xLmxlbmd0aCl7SD1tLkZpbGVJbmRleFtGXSwwPT09RiYmKEguc3RhcnQ9SC5zaXpl''@;'; put 'put ''P0guc3RhcnQtMTplZSk7dmFyIG5lPTA9PT1GJiZfLnJvb3R8fEgubmFtZTtpZihCPTIqKG5lLmxlbmd0aCsxKSxTLndyaXRlX3NoaWZ0KDY0LG5lLCJ1dGYxNmxlIiksUy53cml0ZV9zaGlmdCgyLEIpLFMud3JpdGVfc2hpZnQoMSxILnR5cGUpLFMud3JpdGVfc2hpZnQoMSxILmNvbG9yKSxT''@;'; put 'put ''LndyaXRlX3NoaWZ0KC00LEguTCksUy53cml0ZV9zaGlmdCgtNCxILlIpLFMud3JpdGVfc2hpZnQoLTQsSC5DKSxILmNsc2lkKVMud3JpdGVfc2hpZnQoMTYsSC5jbHNpZCwiaGV4Iik7ZWxzZSBmb3IoVz0wO1c8NDsrK1cpUy53cml0ZV9zaGlmdCg0LDApO1Mud3JpdGVfc2hpZnQoNCxILnN0''@;'; put 'put ''YXRlfHwwKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LDApLFMud3JpdGVfc2hpZnQoNCwwKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LEguc3RhcnQpLFMud3JpdGVfc2hpZnQoNCxILnNpemUpLFMud3JpdGVfc2hpZnQoNCwwKX1lbHNle2ZvcihXPTA7''@;'; put 'put ''VzwxNzsrK1cpUy53cml0ZV9zaGlmdCg0LDApO2ZvcihXPTA7VzwzOysrVylTLndyaXRlX3NoaWZ0KDQsLTEpO2ZvcihXPTA7VzwxMjsrK1cpUy53cml0ZV9zaGlmdCg0LDApfX1mb3IoRj0xO0Y8bS5GaWxlSW5kZXgubGVuZ3RoOysrRilpZigoSD1tLkZpbGVJbmRleFtGXSkuc2l6ZT49NDA5''@;'; put 'put ''NilpZihTLmw9SC5zdGFydCsxPDw5LFNlJiZCdWZmZXIuaXNCdWZmZXIoSC5jb250ZW50KSlILmNvbnRlbnQuY29weShTLFMubCwwLEguc2l6ZSksUy5sKz1ILnNpemUrNTExJi01MTI7ZWxzZXtmb3IoVz0wO1c8SC5zaXplOysrVylTLndyaXRlX3NoaWZ0KDEsSC5jb250ZW50W1ddKTtmb3Io''@;'; put 'put ''OzUxMSZXOysrVylTLndyaXRlX3NoaWZ0KDEsMCl9Zm9yKEY9MTtGPG0uRmlsZUluZGV4Lmxlbmd0aDsrK0YpaWYoKEg9bS5GaWxlSW5kZXhbRl0pLnNpemU+MCYmSC5zaXplPDQwOTYpaWYoU2UmJkJ1ZmZlci5pc0J1ZmZlcihILmNvbnRlbnQpKUguY29udGVudC5jb3B5KFMsUy5sLDAsSC5z''@;'; put 'put ''aXplKSxTLmwrPUguc2l6ZSs2MyYtNjQ7ZWxzZXtmb3IoVz0wO1c8SC5zaXplOysrVylTLndyaXRlX3NoaWZ0KDEsSC5jb250ZW50W1ddKTtmb3IoOzYzJlc7KytXKVMud3JpdGVfc2hpZnQoMSwwKX1pZihTZSlTLmw9Uy5sZW5ndGg7ZWxzZSBmb3IoO1MubDxTLmxlbmd0aDspUy53cml0ZV9z''@;'; put 'put ''aGlmdCgxLDApO3JldHVybiBTfXQudmVyc2lvbj0iMS4yLjEiO3ZhciBLLGI9NjQsZWU9LTIsbGU9ImQwY2YxMWUwYTFiMTFhZTEiLHJlPVsyMDgsMjA3LDE3LDIyNCwxNjEsMTc3LDI2LDIyNV0sZGU9IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIix1ZT17TUFYUkVHU0VDVDot''@;'; put 'put ''NixESUZTRUNUOi00LEZBVFNFQ1Q6LTMsRU5ET0ZDSEFJTjplZSxGUkVFU0VDVDotMSxIRUFERVJfU0lHTkFUVVJFOmxlLEhFQURFUl9NSU5PUl9WRVJTSU9OOiIzZTAwIixNQVhSRUdTSUQ6LTYsTk9TVFJFQU06LTEsSEVBREVSX0NMU0lEOmRlLEVudHJ5VHlwZXM6WyJ1bmtub3duIiwic3Rv''@;'; put 'put ''cmFnZSIsInN0cmVhbSIsImxvY2tieXRlcyIsInByb3BlcnR5Iiwicm9vdCJdfTtmdW5jdGlvbiBjZShtKXtmb3IodmFyIEU9bmV3IEFycmF5KG0ubGVuZ3RoKSxfPTA7XzxtLmxlbmd0aDsrK18pRVtfXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG1bX10pO3JldHVybiBFLmpvaW4oIiIpfWZ1bmN0''@;'; put 'put ''aW9uIE8obSl7cmV0dXJuIEs/Sy5kZWZsYXRlUmF3U3luYyhtKTp5ZShtKX1mb3IodmFyIG0sRSxEPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxqPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3''@;'; put 'put ''LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4XSxzZT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3XSxRPXR5cGVvZiBVaW50OEFy''@;'; put 'put ''cmF5PCJ1IixZPVE/bmV3IFVpbnQ4QXJyYXkoMjU2KTpbXSxFZT0wO0VlPDI1NjsrK0VlKVlbRWVdPSh2b2lkIDAsMjU1JigoRT0xMzk1MzYmKChtPUVlKTw8MXxtPDwxMSl8NTU4MTQ0JihtPDw1fG08PDE1KSk+PjE2fEU+Pjh8RSkpO2Z1bmN0aW9uIEEobSxFKXt2YXIgXz1ZWzI1NSZtXTty''@;'; put 'put ''ZXR1cm4gRTw9OD9fPj4+OC1FOihfPV88PDh8WVttPj44JjI1NV0sRTw9MTY/Xz4+PjE2LUU6KF89Xzw8OHxZW20+PjE2JjI1NV0pPj4+MjQtRSl9ZnVuY3Rpb24gUGUobSxFKXt2YXIgXz03JkUsdz1FPj4+MztyZXR1cm4obVt3XXwoXzw9Nj8wOm1bdysxXTw8OCkpPj4+XyYzfWZ1bmN0aW9u''@;'; put 'put ''IEFlKG0sRSl7dmFyIF89NyZFLHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTU/MDptW3crMV08PDgpKT4+Pl8mN31mdW5jdGlvbiBDZShtLEUpe3ZhciBfPTcmRSx3PUU+Pj4zO3JldHVybihtW3ddfChfPD0zPzA6bVt3KzFdPDw4KSk+Pj5fJjMxfWZ1bmN0aW9uIG9lKG0sRSl7dmFyIF89NyZF''@;'; put 'put ''LHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTE/MDptW3crMV08PDgpKT4+Pl8mMTI3fWZ1bmN0aW9uIHFlKG0sRSxfKXt2YXIgdz03JkUsUz1FPj4+MyxMPW1bU10+Pj53O3JldHVybiBfPDgtd3x8KEx8PW1bUysxXTw8OC13LF88MTYtdyl8fChMfD1tW1MrMl08PDE2LXcsXzwyNC13KXx8KEx8''@;'; put 'put ''PW1bUyszXTw8MjQtdyksTCYoMTw8XyktMX1mdW5jdGlvbiBqcihtLEUsXyl7dmFyIHc9NyZFLFM9RT4+PjM7cmV0dXJuIHc8PTU/bVtTXXw9KDcmXyk8PHc6KG1bU118PV88PHcmMjU1LG1bUysxXT0oNyZfKT4+OC13KSxFKzN9ZnVuY3Rpb24gZnQobSxFLF8pe3JldHVybiBtW0U+Pj4zXXw9''@;'; put 'put ''Xz0oMSZfKTw8KDcmRSksRSsxfWZ1bmN0aW9uIHZ0KG0sRSxfKXt2YXIgUz1FPj4+MztyZXR1cm4gbVtTXXw9MjU1JihfPDw9NyZFKSxtW1MrMV09Xz4+Pj04LEUrOH1mdW5jdGlvbiBKYShtLEUsXyl7dmFyIFM9RT4+PjM7cmV0dXJuIG1bU118PTI1NSYoXzw8PTcmRSksbVtTKzFdPTI1NSYo''@;'; put 'put ''Xz4+Pj04KSxtW1MrMl09Xz4+PjgsRSsxNn1mdW5jdGlvbiBPdChtLEUpe3ZhciBfPW0ubGVuZ3RoLHc9MipfPkU/MipfOkUrNSxTPTA7aWYoXz49RSlyZXR1cm4gbTtpZihTZSl7dmFyIEY9bmkodyk7aWYobS5jb3B5KW0uY29weShGKTtlbHNlIGZvcig7UzxtLmxlbmd0aDsrK1MpRltTXT1t''@;'; put 'put ''W1NdO3JldHVybiBGfWlmKFEpe3ZhciBMPW5ldyBVaW50OEFycmF5KHcpO2lmKEwuc2V0KUwuc2V0KG0pO2Vsc2UgZm9yKDtTPF87KytTKUxbU109bVtTXTtyZXR1cm4gTH1yZXR1cm4gbS5sZW5ndGg9dyxtfWZ1bmN0aW9uIExyKG0pe2Zvcih2YXIgRT1uZXcgQXJyYXkobSksXz0wO188bTsr''@;'; put 'put ''K18pRVtfXT0wO3JldHVybiBFfWZ1bmN0aW9uIHB0KG0sRSxfKXt2YXIgdz0xLFM9MCxGPTAsTD0wLHo9MCxXPW0ubGVuZ3RoLEI9UT9uZXcgVWludDE2QXJyYXkoMzIpOkxyKDMyKTtmb3IoRj0wO0Y8MzI7KytGKUJbRl09MDtmb3IoRj1XO0Y8XzsrK0YpbVtGXT0wO1c9bS5sZW5ndGg7dmFy''@;'; put 'put ''IEg9UT9uZXcgVWludDE2QXJyYXkoVyk6THIoVyk7Zm9yKEY9MDtGPFc7KytGKUJbUz1tW0ZdXSsrLHc8UyYmKHc9UyksSFtGXT0wO2ZvcihCWzBdPTAsRj0xO0Y8PXc7KytGKUJbRisxNl09ej16K0JbRi0xXTw8MTtmb3IoRj0wO0Y8VzsrK0YpMCE9KHo9bVtGXSkmJihIW0ZdPUJbeisxNl0r''@;'; put 'put ''Kyk7dmFyIHE9MDtmb3IoRj0wO0Y8VzsrK0YpaWYoMCE9KHE9bVtGXSkpZm9yKHo9QShIW0ZdLHcpPj53LXEsTD0oMTw8dys0LXEpLTE7TD49MDstLUwpRVt6fEw8PHFdPTE1JnF8Rjw8NDtyZXR1cm4gd312YXIgSXQ9UT9uZXcgVWludDE2QXJyYXkoNTEyKTpMcig1MTIpLHFhPVE/bmV3IFVp''@;'; put 'put ''bnQxNkFycmF5KDMyKTpMcigzMik7aWYoIVEpe2Zvcih2YXIgeXI9MDt5cjw1MTI7Kyt5cilJdFt5cl09MDtmb3IoeXI9MDt5cjwzMjsrK3lyKXFhW3lyXT0wfSFmdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxFPTA7RTwzMjtFKyspbS5wdXNoKDUpO3B0KG0scWEsMzIpO3ZhciBfPVtdO2ZvcihF''@;'; put 'put ''PTA7RTw9MTQzO0UrKylfLnB1c2goOCk7Zm9yKDtFPD0yNTU7RSsrKV8ucHVzaCg5KTtmb3IoO0U8PTI3OTtFKyspXy5wdXNoKDcpO2Zvcig7RTw9Mjg3O0UrKylfLnB1c2goOCk7cHQoXyxJdCwyODgpfSgpO3ZhciBjdD1mdW5jdGlvbigpe2Zvcih2YXIgRT1RP25ldyBVaW50OEFycmF5KDMy''@;'; put 'put ''NzY4KTpbXSxfPTAsdz0wO188c2UubGVuZ3RoLTE7KytfKWZvcig7dzxzZVtfKzFdOysrdylFW3ddPV87Zm9yKDt3PDMyNzY4OysrdylFW3ddPTI5O3ZhciBTPVE/bmV3IFVpbnQ4QXJyYXkoMjU5KTpbXTtmb3IoXz0wLHc9MDtfPGoubGVuZ3RoLTE7KytfKWZvcig7dzxqW18rMV07Kyt3KVNb''@;'; put 'put ''d109XztyZXR1cm4gZnVuY3Rpb24oVyxCKXtyZXR1cm4gVy5sZW5ndGg8OD9mdW5jdGlvbiBGKHosVyl7Zm9yKHZhciBCPTA7Qjx6Lmxlbmd0aDspe3ZhciBIPU1hdGgubWluKDY1NTM1LHoubGVuZ3RoLUIpO2ZvcihXLndyaXRlX3NoaWZ0KDEsKyhCK0g9PXoubGVuZ3RoKSksVy53cml0ZV9z''@;'; put 'put ''aGlmdCgyLEgpLFcud3JpdGVfc2hpZnQoMiw2NTUzNSZ+SCk7SC0tID4wOylXW1cubCsrXT16W0IrK119cmV0dXJuIFcubH0oVyxCKTpmdW5jdGlvbiBMKHosVyl7Zm9yKHZhciBCPTAsSD0wLHE9UT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOltdO0g8ei5sZW5ndGg7KXt2YXIgbmU9TWF0aC5t''@;'; put 'put ''aW4oNjU1MzUsei5sZW5ndGgtSCk7aWYobmU8MTApe2Zvcig3JihCPWpyKFcsQiwrKEgrbmU9PXoubGVuZ3RoKSkpJiYoQis9OC0oNyZCKSksVy5sPUIvOHwwLFcud3JpdGVfc2hpZnQoMixuZSksVy53cml0ZV9zaGlmdCgyLDY1NTM1Jn5uZSk7bmUtLSA+MDspV1tXLmwrK109eltIKytdO0I9''@;'; put 'put ''OCpXLmx9ZWxzZXtCPWpyKFcsQiwrKEgrbmU9PXoubGVuZ3RoKSsyKTtmb3IodmFyIGhlPTA7bmUtLSA+MDspe3ZhciBpZT16W0hdLGZlPS0xLF9lPTA7aWYoKGZlPXFbaGU9MzI3NjcmKGhlPDw1XmllKV0pJiYoKGZlfD0tMzI3NjgmSCk+SCYmKGZlLT0zMjc2OCksZmU8SCkpZm9yKDt6W2Zl''@;'; put 'put ''K19lXT09eltIK19lXSYmX2U8MjUwOykrK19lO2lmKF9lPjIpeyhpZT1TW19lXSk8PTIyP0I9dnQoVyxCLFlbaWUrMV0+PjEpLTE6KHZ0KFcsQiwzKSx2dChXLEIrPTUsWVtpZS0yM10+PjUpLEIrPTMpO3ZhciBWZT1pZTw4PzA6aWUtND4+MjtWZT4wJiYoSmEoVyxCLF9lLWpbaWVdKSxCKz1W''@;'; put 'put ''ZSksQj12dChXLEIsWVtpZT1FW0gtZmVdXT4+MyksQi09Mzt2YXIgQ3I9aWU8ND8wOmllLTI+PjE7Q3I+MCYmKEphKFcsQixILWZlLXNlW2llXSksQis9Q3IpO2Zvcih2YXIgbnI9MDtucjxfZTsrK25yKXFbaGVdPTMyNzY3JkgsaGU9MzI3NjcmKGhlPDw1XnpbSF0pLCsrSDtuZS09X2UtMX1l''@;'; put 'put ''bHNlIGllPD0xNDM/aWUrPTQ4OkI9ZnQoVyxCLDEpLEI9dnQoVyxCLFlbaWVdKSxxW2hlXT0zMjc2NyZILCsrSH1CPXZ0KFcsQiwwKS0xfX1yZXR1cm4gVy5sPShCKzcpLzh8MCxXLmx9KFcsQil9fSgpO2Z1bmN0aW9uIHllKG0pe3ZhciBFPUcoNTArTWF0aC5mbG9vcigxLjEqbS5sZW5ndGgp''@;'; put 'put ''KSxfPWN0KG0sRSk7cmV0dXJuIEUuc2xpY2UoMCxfKX12YXIgWmU9UT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOkxyKDMyNzY4KSxLcj1RP25ldyBVaW50MTZBcnJheSgzMjc2OCk6THIoMzI3NjgpLHNyPVE/bmV3IFVpbnQxNkFycmF5KDEyOCk6THIoMTI4KSxxdD0xLEZjPTE7ZnVuY3Rpb24g''@;'; put 'put ''U2cobSxFKXt2YXIgXz1DZShtLEUpKzI1Nyx3PUNlKG0sRSs9NSkrMSxTPWZ1bmN0aW9uIExlKG0sRSl7dmFyIF89NyZFLHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTQ/MDptW3crMV08PDgpKT4+Pl8mMTV9KG0sRSs9NSkrNDtFKz00O2Zvcih2YXIgRj0wLEw9UT9uZXcgVWludDhBcnJheSgx''@;'; put 'put ''OSk6THIoMTkpLHo9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLFc9MSxCPVE/bmV3IFVpbnQ4QXJyYXkoOCk6THIoOCksSD1RP25ldyBVaW50OEFycmF5KDgpOkxyKDgpLHE9TC5sZW5ndGgsbmU9MDtuZTxTOysrbmUpTFtEW25lXV09Rj1BZShtLEUpLFc8RiYmKFc9''@;'; put 'put ''RiksQltGXSsrLEUrPTM7dmFyIGhlPTA7Zm9yKEJbMF09MCxuZT0xO25lPD1XOysrbmUpSFtuZV09aGU9aGUrQltuZS0xXTw8MTtmb3IobmU9MDtuZTxxOysrbmUpMCE9KGhlPUxbbmVdKSYmKHpbbmVdPUhbaGVdKyspO3ZhciBpZT0wO2ZvcihuZT0wO25lPHE7KytuZSlpZigwIT0oaWU9TFtu''@;'; put 'put ''ZV0pKXtoZT1ZW3pbbmVdXT4+OC1pZTtmb3IodmFyIGZlPSgxPDw3LWllKS0xO2ZlPj0wOy0tZmUpc3JbaGV8ZmU8PGllXT03JmllfG5lPDwzfXZhciBfZT1bXTtmb3IoVz0xO19lLmxlbmd0aDxfK3c7KXN3aXRjaChoZT1zcltvZShtLEUpXSxFKz03JmhlLGhlPj4+PTMpe2Nhc2UgMTY6Zm9y''@;'; put 'put ''KEY9MytQZShtLEUpLEUrPTIsaGU9X2VbX2UubGVuZ3RoLTFdO0YtLSA+MDspX2UucHVzaChoZSk7YnJlYWs7Y2FzZSAxNzpmb3IoRj0zK0FlKG0sRSksRSs9MztGLS0gPjA7KV9lLnB1c2goMCk7YnJlYWs7Y2FzZSAxODpmb3IoRj0xMStvZShtLEUpLEUrPTc7Ri0tID4wOylfZS5wdXNoKDAp''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6X2UucHVzaChoZSksVzxoZSYmKFc9aGUpfXZhciBWZT1fZS5zbGljZSgwLF8pLENyPV9lLnNsaWNlKF8pO2ZvcihuZT1fO25lPDI4NjsrK25lKVZlW25lXT0wO2ZvcihuZT13O25lPDMwOysrbmUpQ3JbbmVdPTA7cmV0dXJuIHF0PXB0KFZlLFplLDI4NiksRmM9cHQo''@;'; put 'put ''Q3IsS3IsMzApLEV9ZnVuY3Rpb24geWMobSxFKXt2YXIgdz1mdW5jdGlvbiBGZyhtLEUpe2lmKDM9PW1bMF0mJiEoMyZtWzFdKSlyZXR1cm5bX3QoRSksMl07Zm9yKHZhciBfPTAsdz0wLFM9bmkoRXx8MTw8MTgpLEY9MCxMPVMubGVuZ3RoPj4+MCx6PTAsVz0wOyEoMSZ3KTspaWYodz1BZSht''@;'; put 'put ''LF8pLF8rPTMsdz4+PjEpZm9yKHc+PjE9PTE/KHo9OSxXPTUpOihfPVNnKG0sXyksej1xdCxXPUZjKTs7KXshRSYmTDxGKzMyNzY3JiYoTD0oUz1PdChTLEYrMzI3NjcpKS5sZW5ndGgpO3ZhciBIPXFlKG0sXyx6KSxxPXc+Pj4xPT0xP0l0W0hdOlplW0hdO2lmKF8rPTE1JnEsKHE+Pj49NCk+''@;'; put 'put ''Pj44JjI1NSl7aWYoMjU2PT1xKWJyZWFrO3ZhciBuZT0ocS09MjU3KTw4PzA6cS00Pj4yO25lPjUmJihuZT0wKTt2YXIgaGU9RitqW3FdO25lPjAmJihoZSs9cWUobSxfLG5lKSxfKz1uZSksSD1xZShtLF8sVyksXys9MTUmKHE9dz4+PjE9PTE/cWFbSF06S3JbSF0pO3ZhciBpZT0ocT4+Pj00''@;'; put 'put ''KTw0PzA6cS0yPj4xLGZlPXNlW3FdO2ZvcihpZT4wJiYoZmUrPXFlKG0sXyxpZSksXys9aWUpLCFFJiZMPGhlJiYoTD0oUz1PdChTLGhlKzEwMCkpLmxlbmd0aCk7RjxoZTspU1tGXT1TW0YtZmVdLCsrRn1lbHNlIFNbRisrXT1xfWVsc2V7NyZfJiYoXys9OC0oNyZfKSk7dmFyIEI9bVtfPj4+''@;'; put 'put ''M118bVsxKyhfPj4+MyldPDw4O2lmKF8rPTMyLEI+MClmb3IoIUUmJkw8RitCJiYoTD0oUz1PdChTLEYrQikpLmxlbmd0aCk7Qi0tID4wOylTW0YrK109bVtfPj4+M10sXys9OH1yZXR1cm4gRT9bUyxfKzc+Pj4zXTpbUy5zbGljZSgwLEYpLF8rNz4+PjNdfShtLnNsaWNlKG0ubHx8MCksRSk7''@;'; put 'put ''cmV0dXJuIG0ubCs9d1sxXSx3WzBdfWZ1bmN0aW9uIEFjKG0sRSl7aWYoIW0pdGhyb3cgbmV3IEVycm9yKEUpO3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS5lcnJvcihFKX1mdW5jdGlvbiBDYyhtLEUpe3ZhciBfPW07aHIoXywwKTt2YXIgRj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpb''@;'; put 'put ''XX07eShGLHtyb290OkUucm9vdH0pO2Zvcih2YXIgTD1fLmxlbmd0aC00Oyg4MCE9X1tMXXx8NzUhPV9bTCsxXXx8NSE9X1tMKzJdfHw2IT1fW0wrM10pJiZMPj0wOyktLUw7Xy5sPUwrNCxfLmwrPTQ7dmFyIHo9Xy5yZWFkX3NoaWZ0KDIpO18ubCs9Njt2YXIgVz1fLnJlYWRfc2hpZnQoNCk7''@;'; put 'put ''Zm9yKF8ubD1XLEw9MDtMPHo7KytMKXtfLmwrPTIwO3ZhciBCPV8ucmVhZF9zaGlmdCg0KSxIPV8ucmVhZF9zaGlmdCg0KSxxPV8ucmVhZF9zaGlmdCgyKSxuZT1fLnJlYWRfc2hpZnQoMiksaGU9Xy5yZWFkX3NoaWZ0KDIpO18ubCs9ODt2YXIgaWU9Xy5yZWFkX3NoaWZ0KDQpLGZlPWYoXy5z''@;'; put 'put ''bGljZShfLmwrcSxfLmwrcStuZSkpO18ubCs9cStuZStoZTt2YXIgX2U9Xy5sO18ubD1pZSs0LHlnKF8sQixILEYsZmUpLF8ubD1fZX1yZXR1cm4gRn1mdW5jdGlvbiB5ZyhtLEUsXyx3LFMpe20ubCs9Mjt2YXIgRj1tLnJlYWRfc2hpZnQoMiksTD1tLnJlYWRfc2hpZnQoMiksej1mdW5jdGlv''@;'; put 'put ''biBzKG0pe3ZhciBFPTY1NTM1Jm0ucmVhZF9zaGlmdCgyKSxfPTY1NTM1Jm0ucmVhZF9zaGlmdCgyKSx3PW5ldyBEYXRlLFM9MzEmXyxGPTE1JihfPj4+PTUpO18+Pj49NCx3LnNldE1pbGxpc2Vjb25kcygwKSx3LnNldEZ1bGxZZWFyKF8rMTk4MCksdy5zZXRNb250aChGLTEpLHcuc2V0RGF0''@;'; put 'put ''ZShTKTt2YXIgTD0zMSZFLHo9NjMmKEU+Pj49NSk7cmV0dXJuIHcuc2V0SG91cnMoRT4+Pj02KSx3LnNldE1pbnV0ZXMoeiksdy5zZXRTZWNvbmRzKEw8PDEpLHd9KG0pO2lmKDgyNTcmRil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7bS5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpO2Zvcih2YXIgQj1tLnJlYWRfc2hpZnQoNCksSD1tLnJlYWRfc2hpZnQoNCkscT1tLnJlYWRfc2hpZnQoMiksbmU9bS5yZWFkX3NoaWZ0KDIpLGhlPSIiLGllPTA7aWU8cTsrK2llKWhlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG1bbS5sKytdKTtpZihuZSl7dmFyIGZlPWYobS5zbGljZSht''@;'; put 'put ''LmwsbS5sK25lKSk7KGZlWzIxNTg5XXx8e30pLm10JiYoej1mZVsyMTU4OV0ubXQpLCgoU3x8e30pWzIxNTg5XXx8e30pLm10JiYoej1TWzIxNTg5XS5tdCl9bS5sKz1uZTt2YXIgX2U9bS5zbGljZShtLmwsbS5sK0IpO3N3aXRjaChMKXtjYXNlIDg6X2U9ZnVuY3Rpb24gVShtLEUpe2lmKCFL''@;'; put 'put ''KXJldHVybiB5YyhtLEUpO3ZhciB3PW5ldygwLEsuSW5mbGF0ZVJhdyksUz13Ll9wcm9jZXNzQ2h1bmsobS5zbGljZShtLmwpLHcuX2ZpbmlzaEZsdXNoRmxhZyk7cmV0dXJuIG0ubCs9dy5ieXRlc1JlYWQsU30obSxIKTticmVhaztjYXNlIDA6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVuc3VwcG9ydGVkIFpJUCBDb21wcmVzc2lvbiBtZXRob2QgIitMKX12YXIgVmU9ITE7OCZGJiYoMTM0Njk1NzYwPT1tLnJlYWRfc2hpZnQoNCkmJihtLnJlYWRfc2hpZnQoNCksVmU9ITApLEI9bS5yZWFkX3NoaWZ0KDQpLEg9bS5yZWFkX3NoaWZ0KDQpKSxCIT1FJiZBYyhWZSwiQmFk''@;'; put 'put ''IGNvbXByZXNzZWQgc2l6ZTogIitFKyIgIT0gIitCKSxIIT1fJiZBYyhWZSwiQmFkIHVuY29tcHJlc3NlZCBzaXplOiAiK18rIiAhPSAiK0gpLHJpKHcsaGUsX2Use3Vuc2FmZTohMCxtdDp6fSl9dmFyIFAwPXtodG06InRleHQvaHRtbCIseG1sOiJ0ZXh0L3htbCIsZ2lmOiJpbWFnZS9naWYi''@;'; put 'put ''LGpwZzoiaW1hZ2UvanBlZyIscG5nOiJpbWFnZS9wbmciLG1zbzoiYXBwbGljYXRpb24veC1tc28iLHRobXg6ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2V0aGVtZSIsc2gzM3RqNToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn07ZnVuY3Rpb24gQ2cobSxFKXtpZihtLmN0eXBlKXJldHVy''@;'; put 'put ''biBtLmN0eXBlO3ZhciBfPW0ubmFtZXx8IiIsdz1fLm1hdGNoKC9cLihbXlwuXSspJC8pO3JldHVybiB3JiZQMFt3WzFdXXx8RSYmKHc9KF89RSkubWF0Y2goL1tcLlxcXShbXlwuXFxdKSskLykpJiZQMFt3WzFdXT9QMFt3WzFdXToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn1mdW5jdGlv''@;'; put 'put ''biBEZyhtKXtmb3IodmFyIEU9Z2EobSksXz1bXSx3PTA7dzxFLmxlbmd0aDt3Kz03NilfLnB1c2goRS5zbGljZSh3LHcrNzYpKTtyZXR1cm4gXy5qb2luKCJcclxuIikrIlxyXG4ifWZ1bmN0aW9uIE9nKG0pe3ZhciBFPW0ucmVwbGFjZSgvW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3''@;'; put 'put ''RS1ceEZGPV0vZyxmdW5jdGlvbihCKXt2YXIgSD1CLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIj0iKygxPT1ILmxlbmd0aD8iMCIrSDpIKX0pOyJcbiI9PShFPUUucmVwbGFjZSgvICQvZ20sIj0yMCIpLnJlcGxhY2UoL1x0JC9nbSwiPTA5IikpLmNo''@;'; put 'put ''YXJBdCgwKSYmKEU9Ij0wRCIrRS5zbGljZSgxKSk7Zm9yKHZhciBfPVtdLHc9KEU9RS5yZXBsYWNlKC9ccig/IVxuKS9nbSwiPTBEIikucmVwbGFjZSgvXG5cbi9nbSwiXG49MEEiKS5yZXBsYWNlKC8oW15cclxuXSlcbi9nbSwiJDE9MEEiKSkuc3BsaXQoIlxyXG4iKSxTPTA7Uzx3Lmxlbmd0''@;'; put 'put ''aDsrK1Mpe3ZhciBGPXdbU107aWYoMCE9Ri5sZW5ndGgpZm9yKHZhciBMPTA7TDxGLmxlbmd0aDspe3ZhciB6PTc2LFc9Ri5zbGljZShMLEwreik7Ij0iPT1XLmNoYXJBdCh6LTEpP3otLToiPSI9PVcuY2hhckF0KHotMik/ei09MjoiPSI9PVcuY2hhckF0KHotMykmJih6LT0zKSxXPUYuc2xp''@;'; put 'put ''Y2UoTCxMK3opLChMKz16KTxGLmxlbmd0aCYmKFcrPSI9IiksXy5wdXNoKFcpfWVsc2UgXy5wdXNoKCIiKX1yZXR1cm4gXy5qb2luKCJcclxuIil9ZnVuY3Rpb24gUmcobSxFLF8pe2Zvcih2YXIgTCx3PSIiLFM9IiIsRj0iIix6PTA7ejwxMDsrK3ope3ZhciBXPUVbel07aWYoIVd8fFcubWF0''@;'; put 'put ''Y2goL15ccyokLykpYnJlYWs7dmFyIEI9Vy5tYXRjaCgvXiguKj8pOlxzKihbXlxzXS4qKSQvKTtpZihCKXN3aXRjaChCWzFdLnRvTG93ZXJDYXNlKCkpe2Nhc2UiY29udGVudC1sb2NhdGlvbiI6dz1CWzJdLnRyaW0oKTticmVhaztjYXNlImNvbnRlbnQtdHlwZSI6Rj1CWzJdLnRyaW0oKTti''@;'; put 'put ''cmVhaztjYXNlImNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmciOlM9QlsyXS50cmltKCl9fXN3aXRjaCgrK3osUy50b0xvd2VyQ2FzZSgpKXtjYXNlImJhc2U2NCI6TD1JcihPcihFLnNsaWNlKHopLmpvaW4oIiIpKSk7YnJlYWs7Y2FzZSJxdW90ZWQtcHJpbnRhYmxlIjpMPWZ1bmN0aW9uIEln''@;'; put 'put ''KG0pe2Zvcih2YXIgRT1bXSxfPTA7XzxtLmxlbmd0aDsrK18pe2Zvcih2YXIgdz1tW19dO188PW0ubGVuZ3RoJiYiPSI9PXcuY2hhckF0KHcubGVuZ3RoLTEpOyl3PXcuc2xpY2UoMCx3Lmxlbmd0aC0xKSttWysrX107RS5wdXNoKHcpfWZvcih2YXIgUz0wO1M8RS5sZW5ndGg7KytTKUVbU109''@;'; put 'put ''RVtTXS5yZXBsYWNlKC9bPV1bMC05QS1GYS1mXXsyfS9nLGZ1bmN0aW9uKEYpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KEYuc2xpY2UoMSksMTYpKX0pO3JldHVybiBJcihFLmpvaW4oIlxyXG4iKSl9KEUuc2xpY2UoeikpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbnN1cHBvcnRlZCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nICIrUyl9dmFyIEg9cmkobSx3LnNsaWNlKF8ubGVuZ3RoKSxMLHt1bnNhZmU6ITB9KTtGJiYoSC5jdHlwZT1GKX1mdW5jdGlvbiByaShtLEUsXyx3KXt2YXIgUz13JiZ3LnVuc2FmZTtTfHx5KG0pO3ZhciBGPSFTJiZ2''@;'; put 'put ''ZS5maW5kKG0sRSk7aWYoIUYpe3ZhciBMPW0uRnVsbFBhdGhzWzBdO0Uuc2xpY2UoMCxMLmxlbmd0aCk9PUw/TD1FOigiLyIhPUwuc2xpY2UoLTEpJiYoTCs9Ii8iKSxMPShMK0UpLnJlcGxhY2UoIi8vIiwiLyIpKSxGPXtuYW1lOm4oRSksdHlwZToyfSxtLkZpbGVJbmRleC5wdXNoKEYpLG0u''@;'; put 'put ''RnVsbFBhdGhzLnB1c2goTCksU3x8dmUudXRpbHMuY2ZiX2djKG0pfXJldHVybiBGLmNvbnRlbnQ9XyxGLnNpemU9Xz9fLmxlbmd0aDowLHcmJih3LkNMU0lEJiYoRi5jbHNpZD13LkNMU0lEKSx3Lm10JiYoRi5tdD13Lm10KSx3LmN0JiYoRi5jdD13LmN0KSksRn1yZXR1cm4gdC5maW5kPWZ1''@;'; put 'put ''bmN0aW9uIFgobSxFKXt2YXIgXz1tLkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oVyl7cmV0dXJuIFcudG9VcHBlckNhc2UoKX0pLHc9Xy5tYXAoZnVuY3Rpb24oVyl7dmFyIEI9Vy5zcGxpdCgiLyIpO3JldHVybiBCW0IubGVuZ3RoLSgiLyI9PVcuc2xpY2UoLTEpPzI6MSldfSksUz0hMTs0Nz09''@;'; put 'put ''PUUuY2hhckNvZGVBdCgwKT8oUz0hMCxFPV9bMF0uc2xpY2UoMCwtMSkrRSk6Uz0tMSE9PUUuaW5kZXhPZigiLyIpO3ZhciBGPUUudG9VcHBlckNhc2UoKSxMPSEwPT09Uz9fLmluZGV4T2YoRik6dy5pbmRleE9mKEYpO2lmKC0xIT09TClyZXR1cm4gbS5GaWxlSW5kZXhbTF07dmFyIHo9IUYu''@;'; put 'put ''bWF0Y2god2EpO2ZvcihGPUYucmVwbGFjZShkciwiIikseiYmKEY9Ri5yZXBsYWNlKHdhLCIhIikpLEw9MDtMPF8ubGVuZ3RoOysrTClpZigoej9fW0xdLnJlcGxhY2Uod2EsIiEiKTpfW0xdKS5yZXBsYWNlKGRyLCIiKT09Rnx8KHo/d1tMXS5yZXBsYWNlKHdhLCIhIik6d1tMXSkucmVwbGFj''@;'; put 'put ''ZShkciwiIik9PUYpcmV0dXJuIG0uRmlsZUluZGV4W0xdO3JldHVybiBudWxsfSx0LnJlYWQ9ZnVuY3Rpb24gSShtLEUpe3ZhciBfPUUmJkUudHlwZTtzd2l0Y2goX3x8U2UmJkJ1ZmZlci5pc0J1ZmZlcihtKSYmKF89ImJ1ZmZlciIpLF98fCJiYXNlNjQiKXtjYXNlImZpbGUiOnJldHVybiBm''@;'; put 'put ''dW5jdGlvbiBNKG0sRSl7cmV0dXJuIG8oKSxsKGMucmVhZEZpbGVTeW5jKG0pLEUpfShtLEUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gbChJcihPcihtKSksRSk7Y2FzZSJiaW5hcnkiOnJldHVybiBsKElyKG0pLEUpfXJldHVybiBsKG0sRSl9LHQucGFyc2U9bCx0LndyaXRlPWZ1bmN0aW9uIHhl''@;'; put 'put ''KG0sRSl7dmFyIF89VihtLEUpO3N3aXRjaChFJiZFLnR5cGV8fCJidWZmZXIiKXtjYXNlImZpbGUiOnJldHVybiBvKCksYy53cml0ZUZpbGVTeW5jKEUuZmlsZW5hbWUsXyksXztjYXNlImJpbmFyeSI6cmV0dXJuInN0cmluZyI9PXR5cGVvZiBfP186Y2UoXyk7Y2FzZSJiYXNlNjQiOnJldHVy''@;'; put 'put ''biBnYSgic3RyaW5nIj09dHlwZW9mIF8/XzpjZShfKSk7Y2FzZSJidWZmZXIiOmlmKFNlKXJldHVybiBCdWZmZXIuaXNCdWZmZXIoXyk/XzpvdChfKTtjYXNlImFycmF5IjpyZXR1cm4ic3RyaW5nIj09dHlwZW9mIF8/SXIoXyk6X31yZXR1cm4gX30sdC53cml0ZUZpbGU9ZnVuY3Rpb24gRmUo''@;'; put 'put ''bSxFLF8pe28oKTt2YXIgdz1WKG0sXyk7Yy53cml0ZUZpbGVTeW5jKEUsdyl9LHQudXRpbHM9e2NmYl9uZXc6ZnVuY3Rpb24gUGcobSl7dmFyIEU9e307cmV0dXJuIHkoRSxtKSxFfSxjZmJfYWRkOnJpLGNmYl9kZWw6ZnVuY3Rpb24gTGcobSxFKXt5KG0pO3ZhciBfPXZlLmZpbmQobSxFKTtp''@;'; put 'put ''ZihfKWZvcih2YXIgdz0wO3c8bS5GaWxlSW5kZXgubGVuZ3RoOysrdylpZihtLkZpbGVJbmRleFt3XT09XylyZXR1cm4gbS5GaWxlSW5kZXguc3BsaWNlKHcsMSksbS5GdWxsUGF0aHMuc3BsaWNlKHcsMSksITA7cmV0dXJuITF9LGNmYl9tb3Y6ZnVuY3Rpb24gQmcobSxFLF8pe3kobSk7dmFy''@;'; put 'put ''IHc9dmUuZmluZChtLEUpO2lmKHcpZm9yKHZhciBTPTA7UzxtLkZpbGVJbmRleC5sZW5ndGg7KytTKWlmKG0uRmlsZUluZGV4W1NdPT13KXJldHVybiBtLkZpbGVJbmRleFtTXS5uYW1lPW4oXyksbS5GdWxsUGF0aHNbU109XywhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIE1nKG0pe1Io''@;'; put 'put ''bSwhMCl9LFJlYWRTaGlmdDpBYSxDaGVja0ZpZWxkOmFzLHByZXBfYmxvYjpocixiY29uY2F0OmZyLHVzZV96bGliOmZ1bmN0aW9uIEMobSl7dHJ5e3ZhciBfPW5ldygwLG0uSW5mbGF0ZVJhdyk7aWYoXy5fcHJvY2Vzc0NodW5rKG5ldyBVaW50OEFycmF5KFszLDBdKSxfLl9maW5pc2hGbHVz''@;'; put 'put ''aEZsYWcpLCFfLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO0s9bX1jYXRjaCh3KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyh3Lm1lc3NhZ2V8fHcpKX19LF9kZWZsYXRlUmF3OnllLF9pbmZsYXRl''@;'; put 'put ''UmF3OnljLGNvbnN0czp1ZX0sdH0oKTtmdW5jdGlvbiAkZShlKXtmb3IodmFyIHQ9T2JqZWN0LmtleXMoZSkscj1bXSxhPTA7YTx0Lmxlbmd0aDsrK2EpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdFthXSkmJnIucHVzaCh0W2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBz''@;'; put 'put ''MChlKXtmb3IodmFyIHQ9W10scj0kZShlKSxhPTA7YSE9PXIubGVuZ3RoOysrYSl0W2VbclthXV1dPXJbYV07cmV0dXJuIHR9dmFyIGMwPW5ldyBEYXRlKDE4OTksMTEsMzAsMCwwLDApO2Z1bmN0aW9uIGlyKGUsdCl7dmFyIHI9ZS5nZXRUaW1lKCk7cmV0dXJuIHQmJihyLT0xMjYzMTY4ZTUp''@;'; put 'put ''LChyLShjMC5nZXRUaW1lKCkrNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktYzAuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX12YXIgU2k9bmV3IERhdGUsbG89YzAuZ2V0VGltZSgpKzZlNCooU2kuZ2V0VGltZXpvbmVPZmZzZXQoKS1jMC5nZXRUaW1lem9uZU9mZnNldCgpKSxGaT1T''@;'; put 'put ''aS5nZXRUaW1lem9uZU9mZnNldCgpO2Z1bmN0aW9uIG8wKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldFRpbWUoMjQqZSo2MCo2MCoxZTMrbG8pLHQuZ2V0VGltZXpvbmVPZmZzZXQoKSE9PUZpJiZ0LnNldFRpbWUodC5nZXRUaW1lKCkrNmU0Kih0LmdldFRpbWV6b25lT2Zmc2V0KCkt''@;'; put 'put ''RmkpKSx0fWZ1bmN0aW9uIHVvKGUpe3ZhciB0PTAscj0wLGE9ITEsbj1lLm1hdGNoKC9QKFswLTlcLl0rWSk/KFswLTlcLl0rTSk/KFswLTlcLl0rRCk/VChbMC05XC5dK0gpPyhbMC05XC5dK00pPyhbMC05XC5dK1MpPy8pO2lmKCFuKXRocm93IG5ldyBFcnJvcigifCIrZSsifCBpcyBub3Qg''@;'; put 'put ''YW4gSVNPODYwMSBEdXJhdGlvbiIpO2Zvcih2YXIgaT0xO2khPW4ubGVuZ3RoOysraSlpZihuW2ldKXtzd2l0Y2gocj0xLGk+MyYmKGE9ITApLG5baV0uc2xpY2UobltpXS5sZW5ndGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6''@;'; put 'put ''ICIrbltpXS5zbGljZShuW2ldLmxlbmd0aC0xKSk7Y2FzZSJEIjpyKj0yNDtjYXNlIkgiOnIqPTYwO2Nhc2UiTSI6aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6IE0iKTtyKj02MH10Kz1yKnBhcnNlSW50KG5baV0sMTApfXJldHVybiB0fXZh''@;'; put 'put ''ciB5aT1uZXcgRGF0ZSgiMjAxNy0wMi0xOVQxOTowNjowOS4wMDBaIiksQWk9aXNOYU4oeWkuZ2V0RnVsbFllYXIoKSk/bmV3IERhdGUoIjIvMTkvMTciKTp5aSxobz0yMDE3PT1BaS5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIFhlKGUsdCl7dmFyIHI9bmV3IERhdGUoZSk7aWYoaG8pcmV0dXJu''@;'; put 'put ''IHQ+MD9yLnNldFRpbWUoci5nZXRUaW1lKCkrNjAqci5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6dDwwJiZyLnNldFRpbWUoci5nZXRUaW1lKCktNjAqci5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykscjtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZTtpZigxOTE3PT1BaS5nZXRGdWxs''@;'; put 'put ''WWVhcigpJiYhaXNOYU4oci5nZXRGdWxsWWVhcigpKSl7dmFyIGE9ci5nZXRGdWxsWWVhcigpO3JldHVybiBlLmluZGV4T2YoIiIrYSk+LTF8fHIuc2V0RnVsbFllYXIoci5nZXRGdWxsWWVhcigpKzEwMCkscn12YXIgbj1lLm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIiLCIxOSIsIjAiLCIw''@;'; put 'put ''IiwiMCJdLGk9bmV3IERhdGUoK25bMF0sK25bMV0tMSwrblsyXSwrblszXXx8MCwrbls0XXx8MCwrbls1XXx8MCk7cmV0dXJuIGUuaW5kZXhPZigiWiIpPi0xJiYoaT1uZXcgRGF0ZShpLmdldFRpbWUoKS02MCppLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSksaX1mdW5jdGlvbiBQdChlLHQp''@;'; put 'put ''e2lmKFNlJiZCdWZmZXIuaXNCdWZmZXIoZSkpe2lmKHQpe2lmKDI1NT09ZVswXSYmMjU0PT1lWzFdKXJldHVybiB0dChlLnNsaWNlKDIpLnRvU3RyaW5nKCJ1dGYxNmxlIikpO2lmKDI1ND09ZVsxXSYmMjU1PT1lWzJdKXJldHVybiB0dChhaShlLnNsaWNlKDIpLnRvU3RyaW5nKCJiaW5hcnki''@;'; put 'put ''KSkpfXJldHVybiBlLnRvU3RyaW5nKCJiaW5hcnkiKX1pZih0eXBlb2YgVGV4dERlY29kZXI8InUiKXRyeXtpZih0KXtpZigyNTU9PWVbMF0mJjI1ND09ZVsxXSlyZXR1cm4gdHQobmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpLmRlY29kZShlLnNsaWNlKDIpKSk7aWYoMjU0PT1lWzBdJiYy''@;'; put 'put ''NTU9PWVbMV0pcmV0dXJuIHR0KG5ldyBUZXh0RGVjb2RlcigidXRmLTE2YmUiKS5kZWNvZGUoZS5zbGljZSgyKSkpfXZhciByPXsiXHUyMGFjIjoiXHg4MCIsIlx1MjAxYSI6Ilx4ODIiLFx1MDE5MjoiXHg4MyIsIlx1MjAxZSI6Ilx4ODQiLCJcdTIwMjYiOiJceDg1IiwiXHUyMDIwIjoiXHg4''@;'; put 'put ''NiIsIlx1MjAyMSI6Ilx4ODciLFx1MDJjNjoiXHg4OCIsIlx1MjAzMCI6Ilx4ODkiLFx1MDE2MDoiXHg4YSIsIlx1MjAzOSI6Ilx4OGIiLFx1MDE1MjoiXHg4YyIsXHUwMTdkOiJceDhlIiwiXHUyMDE4IjoiXHg5MSIsIlx1MjAxOSI6Ilx4OTIiLCJcdTIwMWMiOiJceDkzIiwiXHUyMDFkIjoi''@;'; put 'put ''XHg5NCIsIlx1MjAyMiI6Ilx4OTUiLCJcdTIwMTMiOiJceDk2IiwiXHUyMDE0IjoiXHg5NyIsIlx1MDJkYyI6Ilx4OTgiLCJcdTIxMjIiOiJceDk5IixcdTAxNjE6Ilx4OWEiLCJcdTIwM2EiOiJceDliIixcdTAxNTM6Ilx4OWMiLFx1MDE3ZToiXHg5ZSIsXHUwMTc4OiJceDlmIn07cmV0dXJu''@;'; put 'put ''IEFycmF5LmlzQXJyYXkoZSkmJihlPW5ldyBVaW50OEFycmF5KGUpKSxuZXcgVGV4dERlY29kZXIoImxhdGluMSIpLmRlY29kZShlKS5yZXBsYWNlKC9bXHUyMGFjXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHUwMTdk''@;'; put 'put ''XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHUwMTdlXHUwMTc4XS9nLGZ1bmN0aW9uKGkpe3JldHVybiByW2ldfHxpfSl9Y2F0Y2h7fWZvcih2YXIgYT1bXSxuPTA7biE9ZS5sZW5ndGg7KytuKWEucHVzaChT''@;'; put 'put ''dHJpbmcuZnJvbUNoYXJDb2RlKGVbbl0pKTtyZXR1cm4gYS5qb2luKCIiKX1mdW5jdGlvbiBNZShlKXtpZih0eXBlb2YgSlNPTjwidSImJiFBcnJheS5pc0FycmF5KGUpKXJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKTtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PWUp''@;'; put 'put ''cmV0dXJuIGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUuZ2V0VGltZSgpKTt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKHRbcl09TWUoZVtyXSkpO3JldHVybiB0fWZ1bmN0aW9uIGplKGUs''@;'; put 'put ''dCl7Zm9yKHZhciByPSIiO3IubGVuZ3RoPHQ7KXIrPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gSnIoZSl7dmFyIHQ9TnVtYmVyKGUpO2lmKCFpc05hTih0KSlyZXR1cm4gaXNGaW5pdGUodCk/dDpOYU47aWYoIS9cZC8udGVzdChlKSlyZXR1cm4gdDt2YXIgcj0xLGE9ZS5yZXBsYWNlKC8oW1xkXSks''@;'; put 'put ''KFtcZF0pL2csIiQxJDIiKS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gcio9MTAwLCIifSk7cmV0dXJuIGlzTmFOKHQ9TnVtYmVyKGEpKSYmKGE9YS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihuLGkpe3JldHVybiByPS1yLGl9KSxp''@;'; put 'put ''c05hTih0PU51bWJlcihhKSkpP3Q6dC9yfXZhciB4bz1bImphbnVhcnkiLCJmZWJydWFyeSIsIm1hcmNoIiwiYXByaWwiLCJtYXkiLCJqdW5lIiwianVseSIsImF1Z3VzdCIsInNlcHRlbWJlciIsIm9jdG9iZXIiLCJub3ZlbWJlciIsImRlY2VtYmVyIl07ZnVuY3Rpb24gYWEoZSl7dmFyIHQ9''@;'; put 'put ''bmV3IERhdGUoZSkscj1uZXcgRGF0ZShOYU4pLGE9dC5nZXRZZWFyKCksbj10LmdldE1vbnRoKCksaT10LmdldERhdGUoKTtpZihpc05hTihpKSlyZXR1cm4gcjt2YXIgcz1lLnRvTG93ZXJDYXNlKCk7aWYocy5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0''@;'; put 'put ''fG5vdnxkZWMvKSl7aWYoKHM9cy5yZXBsYWNlKC9bXmEtel0vZywiIikucmVwbGFjZSgvKFteYS16XXxeKVthcF1tPyhbXmEtel18JCkvLCIiKSkubGVuZ3RoPjMmJi0xPT14by5pbmRleE9mKHMpKXJldHVybiByfWVsc2UgaWYocy5tYXRjaCgvW2Etel0vKSlyZXR1cm4gcjtyZXR1cm4gYTww''@;'; put 'put ''fHxhPjgwOTk/cjoobj4wfHxpPjEpJiYxMDEhPWE/dDplLm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/cjp0fXZhciB2bz1mdW5jdGlvbigpe3ZhciBlPTU9PSJhYmFjYWJhIi5zcGxpdCgvKDo/YikvaSkubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyLGEsbil7aWYoZXx8InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBhKXJldHVybiByLnNwbGl0KGEpO2Zvcih2YXIgaT1yLnNwbGl0KGEpLHM9W2lbMF1dLGY9MTtmPGkubGVuZ3RoOysrZilzLnB1c2gobikscy5wdXNoKGlbZl0pO3JldHVybiBzfX0oKTtmdW5jdGlvbiBDaShlKXtyZXR1cm4gZT9lLmNvbnRlbnQmJmUudHlwZT9QdChlLmNvbnRlbnQsITAp''@;'; put 'put ''OmUuZGF0YT9RdChlLmRhdGEpOmUuYXNOb2RlQnVmZmVyJiZTZT9RdChlLmFzTm9kZUJ1ZmZlcigpLnRvU3RyaW5nKCJiaW5hcnkiKSk6ZS5hc0JpbmFyeT9RdChlLmFzQmluYXJ5KCkpOmUuX2RhdGEmJmUuX2RhdGEuZ2V0Q29udGVudD9RdChQdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs''@;'; put 'put ''bChlLl9kYXRhLmdldENvbnRlbnQoKSwwKSkpOm51bGw6bnVsbH1mdW5jdGlvbiBEaShlKXtpZighZSlyZXR1cm4gbnVsbDtpZihlLmRhdGEpcmV0dXJuIHQwKGUuZGF0YSk7aWYoZS5hc05vZGVCdWZmZXImJlNlKXJldHVybiBlLmFzTm9kZUJ1ZmZlcigpO2lmKGUuX2RhdGEmJmUuX2RhdGEu''@;'; put 'put ''Z2V0Q29udGVudCl7dmFyIHQ9ZS5fZGF0YS5nZXRDb250ZW50KCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QwKHQpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfXJldHVybiBlLmNvbnRlbnQmJmUudHlwZT9lLmNvbnRlbnQ6bnVsbH1mdW5jdGlvbiBXcihlLHQpe2Zvcih2YXIg''@;'; put 'put ''cj1lLkZ1bGxQYXRoc3x8JGUoZS5maWxlcyksYT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW1wvXS9nLCJcXCIpLG49YS5yZXBsYWNlKC9cXC9nLCIvIiksaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgcz1yW2ldLnJlcGxhY2UoL15Sb290IEVudHJ5W1wvXS8sIiIpLnRvTG93ZXJDYXNlKCk7''@;'; put 'put ''aWYoYT09c3x8bj09cylyZXR1cm4gZS5maWxlcz9lLmZpbGVzW3JbaV1dOmUuRmlsZUluZGV4W2ldfXJldHVybiBudWxsfWZ1bmN0aW9uIFYwKGUsdCl7dmFyIHI9V3IoZSx0KTtpZihudWxsPT1yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZmlsZSAiK3QrIiBpbiB6aXAiKTtyZXR1''@;'; put 'put ''cm4gcn1mdW5jdGlvbiBRZShlLHQscil7aWYoIXIpcmV0dXJuIGZ1bmN0aW9uIHBvKGUpe3JldHVybiBlJiYiLmJpbiI9PT1lLm5hbWUuc2xpY2UoLTQpP0RpKGUpOkNpKGUpfShWMChlLHQpKTtpZighdClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFFlKGUsdCl9Y2F0Y2h7cmV0dXJuIG51bGx9''@;'; put 'put ''fWZ1bmN0aW9uIE5yKGUsdCxyKXtpZighcilyZXR1cm4gQ2koVjAoZSx0KSk7aWYoIXQpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBOcihlLHQpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBPaShlLHQscil7aWYoIXIpcmV0dXJuIERpKFYwKGUsdCkpO2lmKCF0KXJldHVybiBudWxsO3Ry''@;'; put 'put ''eXtyZXR1cm4gT2koZSx0KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gSWkoZSl7Zm9yKHZhciB0PWUuRnVsbFBhdGhzfHwkZShlLmZpbGVzKSxyPVtdLGE9MDthPHQubGVuZ3RoOysrYSkiLyIhPXRbYV0uc2xpY2UoLTEpJiZyLnB1c2godFthXS5yZXBsYWNlKC9eUm9vdCBFbnRyeVtc''@;'; put 'put ''L10vLCIiKSk7cmV0dXJuIHIuc29ydCgpfWZ1bmN0aW9uIFJpKGUsdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiB2ZS5yZWFkKGUse3R5cGU6ImJhc2U2NCJ9KTtjYXNlImJpbmFyeSI6cmV0dXJuIHZlLnJlYWQoZSx7dHlwZToiYmluYXJ5In0pO2Nhc2UiYnVmZmVyIjpj''@;'; put 'put ''YXNlImFycmF5IjpyZXR1cm4gdmUucmVhZChlLHt0eXBlOiJidWZmZXIifSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK3QudHlwZSl9ZnVuY3Rpb24gU2EoZSx0KXtpZigiLyI9PWUuY2hhckF0KDApKXJldHVybiBlLnNsaWNlKDEpO3ZhciByPXQuc3BsaXQoIi8iKTsi''@;'; put 'put ''LyIhPXQuc2xpY2UoLTEpJiZyLnBvcCgpO2Zvcih2YXIgYT1lLnNwbGl0KCIvIik7MCE9PWEubGVuZ3RoOyl7dmFyIG49YS5zaGlmdCgpOyIuLiI9PT1uP3IucG9wKCk6Ii4iIT09biYmci5wdXNoKG4pfXJldHVybiByLmpvaW4oIi8iKX12YXIgZXI9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5j''@;'; put 'put ''b2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz5cclxuJyxtbz0vKFteIlxzPz5cL10rKVxzKj1ccyooKD86IikoW14iXSopKD86Iil8KD86JykoW14nXSopKD86Jyl8KFteJyI+XHNdKykpL2csTmk9LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/PlwvXStccyo9XHMq''@;'; put 'put ''KD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccypbXC9cP10/Pi9nbSx2cj1lci5tYXRjaChOaSk/Tmk6LzxbXj5dKj4vZyxfbz0vPFx3KjovLHdvPS88KFwvPylcdys6LztmdW5jdGlvbiBtZShlLHQscil7Zm9yKHZhciBhPXt9LG49MCxpPTA7biE9PWUubGVuZ3RoJiYzMiE9PShp''@;'; put 'put ''PWUuY2hhckNvZGVBdChuKSkmJjEwIT09aSYmMTMhPT1pOysrbik7aWYodHx8KGFbMF09ZS5zbGljZSgwLG4pKSxuPT09ZS5sZW5ndGgpcmV0dXJuIGE7dmFyIHM9ZS5tYXRjaChtbyksZj0wLGM9IiIsbz0wLGw9IiIsaD0iIix4PTE7aWYocylmb3Iobz0wO28hPXMubGVuZ3RoOysrbyl7Zm9y''@;'; put 'put ''KGg9c1tvXSxpPTA7aSE9aC5sZW5ndGgmJjYxIT09aC5jaGFyQ29kZUF0KGkpOysraSk7Zm9yKGw9aC5zbGljZSgwLGkpLnRyaW0oKTszMj09aC5jaGFyQ29kZUF0KGkrMSk7KSsraTtmb3IoeD0zND09KG49aC5jaGFyQ29kZUF0KGkrMSkpfHwzOT09bj8xOjAsYz1oLnNsaWNlKGkrMSt4LGgu''@;'; put 'put ''bGVuZ3RoLXgpLGY9MDtmIT1sLmxlbmd0aCYmNTghPT1sLmNoYXJDb2RlQXQoZik7KytmKTtpZihmPT09bC5sZW5ndGgpbC5pbmRleE9mKCJfIik+MCYmKGw9bC5zbGljZSgwLGwuaW5kZXhPZigiXyIpKSksYVtsXT1jLHJ8fChhW2wudG9Mb3dlckNhc2UoKV09Yyk7ZWxzZXt2YXIgZD0oNT09''@;'; put 'put ''PWYmJiJ4bWxucyI9PT1sLnNsaWNlKDAsNSk/InhtbG5zIjoiIikrbC5zbGljZShmKzEpO2lmKGFbZF0mJiJleHQiPT1sLnNsaWNlKGYtMyxmKSljb250aW51ZTthW2RdPWMscnx8KGFbZC50b0xvd2VyQ2FzZSgpXT1jKX19cmV0dXJuIGF9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIGUucmVwbGFj''@;'; put 'put ''ZSh3bywiPCQxIil9dmFyIGJpPXsiJnF1b3Q7IjonIicsIiZhcG9zOyI6IiciLCImZ3Q7IjoiPiIsIiZsdDsiOiI8IiwiJmFtcDsiOiImIn0sRzA9czAoYmkpLEllPWZ1bmN0aW9uKCl7dmFyIGU9LyYoPzpxdW90fGFwb3N8Z3R8bHR8YW1wfCN4PyhbXGRhLWZBLUZdKykpOy9naSx0PS9feChb''@;'; put 'put ''XGRhLWZBLUZdezR9KV8vZ2k7cmV0dXJuIGZ1bmN0aW9uIHIoYSl7dmFyIG49YSsiIixpPW4uaW5kZXhPZigiPCFbQ0RBVEFbIik7aWYoLTE9PWkpcmV0dXJuIG4ucmVwbGFjZShlLGZ1bmN0aW9uKGYsYyl7cmV0dXJuIGJpW2ZdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMsZi5p''@;'; put 'put ''bmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8Zn0pLnJlcGxhY2UodCxmdW5jdGlvbihmLGMpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMsMTYpKX0pO3ZhciBzPW4uaW5kZXhPZigiXV0+Iik7cmV0dXJuIHIobi5zbGljZSgwLGkpKStuLnNsaWNlKGkrOSxzKStyKG4uc2xp''@;'; put 'put ''Y2UocyszKSl9fSgpLHowPS9bJjw+JyJdL2csTGk9L1tcdTAwMDAtXHUwMDFmXS9nO2Z1bmN0aW9uICQwKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKHowLGZ1bmN0aW9uKHIpe3JldHVybiBHMFtyXX0pLnJlcGxhY2UoL1xuL2csIjxici8+IikucmVwbGFjZShMaSxmdW5jdGlvbihyKXtyZXR1''@;'; put 'put ''cm4iJiN4IisoIjAwMCIrci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyI7In0pfXZhciBCaT1mdW5jdGlvbigpe3ZhciBlPS8mIyhcZCspOy9nO2Z1bmN0aW9uIHQocixhKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhLDEwKSl9cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoZSx0KX19KCk7ZnVuY3Rpb24gV2UoZSl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlITA6Y2FzZSIxIjpjYXNlInRydWUiOmNhc2UiVFJVRSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gajAoZSl7Zm9yKHZhciB0PSIiLHI9MCxh''@;'; put 'put ''PTAsbj0wLGk9MCxzPTAsZj0wO3I8ZS5sZW5ndGg7KShhPWUuY2hhckNvZGVBdChyKyspKTwxMjg/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShhKToobj1lLmNoYXJDb2RlQXQocisrKSxhPjE5MSYmYTwyMjQ/KHM9KDMxJmEpPDw2LHN8PTYzJm4sdCs9U3RyaW5nLmZyb21DaGFyQ29kZShzKSk6''@;'; put 'put ''KGk9ZS5jaGFyQ29kZUF0KHIrKyksYTwyNDA/dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmYSk8PDEyfCg2MyZuKTw8Nnw2MyZpKTooZj0oKDcmYSk8PDE4fCg2MyZuKTw8MTJ8KDYzJmkpPDw2fDYzJihzPWUuY2hhckNvZGVBdChyKyspKSktNjU1MzYsdCs9U3RyaW5nLmZyb21DaGFyQ29k''@;'; put 'put ''ZSg1NTI5NisoZj4+PjEwJjEwMjMpKSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmYpKSkpKTtyZXR1cm4gdH1mdW5jdGlvbiBNaShlKXt2YXIgcixhLGYsdD1fdCgyKmUubGVuZ3RoKSxuPTEsaT0wLHM9MDtmb3IoYT0wO2E8ZS5sZW5ndGg7YSs9biluPTEsKGY9ZS5jaGFy''@;'; put 'put ''Q29kZUF0KGEpKTwxMjg/cj1mOmY8MjI0PyhyPTY0KigzMSZmKSsoNjMmZS5jaGFyQ29kZUF0KGErMSkpLG49Mik6ZjwyNDA/KHI9NDA5NiooMTUmZikrNjQqKDYzJmUuY2hhckNvZGVBdChhKzEpKSsoNjMmZS5jaGFyQ29kZUF0KGErMikpLG49Myk6KG49NCxyPTI2MjE0NCooNyZmKSs0MDk2''@;'; put 'put ''Kig2MyZlLmNoYXJDb2RlQXQoYSsxKSkrNjQqKDYzJmUuY2hhckNvZGVBdChhKzIpKSsoNjMmZS5jaGFyQ29kZUF0KGErMykpLHM9NTUyOTYrKChyLT02NTUzNik+Pj4xMCYxMDIzKSxyPTU2MzIwKygxMDIzJnIpKSwwIT09cyYmKHRbaSsrXT0yNTUmcyx0W2krK109cz4+Pjgscz0wKSx0W2kr''@;'; put 'put ''K109ciUyNTYsdFtpKytdPXI+Pj44O3JldHVybiB0LnNsaWNlKDAsaSkudG9TdHJpbmcoInVjczIiKX1mdW5jdGlvbiBVaShlKXtyZXR1cm4gb3QoZSwiYmluYXJ5IikudG9TdHJpbmcoInV0ZjgiKX12YXIgbDA9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyIsQmU9''@;'; put 'put ''U2UmJihVaShsMCk9PWowKGwwKSYmVWl8fE1pKGwwKT09ajAobDApJiZNaSl8fGowLHR0PVNlP2Z1bmN0aW9uKGUpe3JldHVybiBvdChlLCJ1dGY4IikudG9TdHJpbmcoImJpbmFyeSIpfTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLGE9MCxuPTA7cjxlLmxlbmd0aDspc3dpdGNoKGE9''@;'; put 'put ''ZS5jaGFyQ29kZUF0KHIrKyksITApe2Nhc2UgYTwxMjg6dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYSkpO2JyZWFrO2Nhc2UgYTwyMDQ4OnQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5MisoYT4+NikpKSx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJmEpKSk7YnJl''@;'; put 'put ''YWs7Y2FzZSBhPj01NTI5NiYmYTw1NzM0NDphLT01NTI5NixuPWUuY2hhckNvZGVBdChyKyspLTU2MzIwKyhhPDwxMCksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhuPj4xOCY3KSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsobj4+MTImNjMpKSksdC5wdXNoKFN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhuPj42JjYzKSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmbikpKTticmVhaztkZWZhdWx0OnQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoYT4+MTIpKSksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhhPj42''@;'; put 'put ''JjYzKSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmYSkpKX1yZXR1cm4gdC5qb2luKCIiKX0sRmE9ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixhKXt2YXIgbj1yKyJ8IisoYXx8IiIpO3JldHVybiBlW25dP2Vbbl06ZVtuXT1uZXcgUmVnRXhwKCI8''@;'; put 'put ''KD86XFx3KzopPyIrcisnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytyKyI+IixhfHwiIil9fSgpLFdpPWZ1bmN0aW9uKCl7dmFyIGU9W1sibmJzcCIsIiAiXSxbIm1pZGRvdCIsIlx4YjciXSxbInF1b3QiLCciJ10sWyJhcG9z''@;'; put 'put ''IiwiJyJdLFsiZ3QiLCI+Il0sWyJsdCIsIjwiXSxbImFtcCIsIiYiXV0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybltuZXcgUmVnRXhwKCImIit0WzBdKyI7IiwiaWciKSx0WzFdXX0pO3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIGE9ci5yZXBsYWNlKC9eW1x0XG5cciBdKy8sIiIpLnJlcGxh''@;'; put 'put ''Y2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvPlxzKy9nLCI+IikucmVwbGFjZSgvXHMrPC9nLCI8IikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2UoLzxbXj5dKj4vZywiIiksbj0wO248ZS5sZW5ndGg7''@;'; put 'put ''KytuKWE9YS5yZXBsYWNlKGVbbl1bMF0sZVtuXVsxXSk7cmV0dXJuIGF9fSgpLFNvPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB2b2lkIDAhPT1lW3JdP2Vbcl06ZVtyXT1uZXcgUmVnRXhwKCI8KD86dnQ6KT8iK3IrIj4oW1xcc1xcU10qPyk8Lyg/OnZ0''@;'; put 'put ''Oik/IityKyI+IiwiZyIpfX0oKSxGbz0vPFwvPyg/OnZ0Oik/dmFyaWFudD4vZyx5bz0vPCg/OnZ0OikoW14+XSopPihbXHNcU10qKTwvO2Z1bmN0aW9uIEhpKGUsdCl7dmFyIHI9bWUoZSksYT1lLm1hdGNoKFNvKHIuYmFzZVR5cGUpKXx8W10sbj1bXTtpZihhLmxlbmd0aCE9ci5zaXplKXtp''@;'; put 'put ''Zih0LldURil0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdmVjdG9yIGxlbmd0aCAiK2EubGVuZ3RoKyIgIT0gIityLnNpemUpO3JldHVybiBufXJldHVybiBhLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9aS5yZXBsYWNlKEZvLCIiKS5tYXRjaCh5byk7cyYmbi5wdXNoKHt2OkJlKHNb''@;'; put 'put ''Ml0pLHQ6c1sxXX0pfSksbn1mdW5jdGlvbiBZMChlKXtpZihTZSYmQnVmZmVyLmlzQnVmZmVyKGUpKXJldHVybiBlLnRvU3RyaW5nKCJ1dGY4Iik7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkp''@;'; put 'put ''cmV0dXJuIEJlKHd0KE0wKGUpKSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIHlhPS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXSspKD86W1xzPzpcL11bXj5dKik/Pi9nbSxycj17Q09SRV9QUk9Q''@;'; put 'put ''UzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLENVU1RfUFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIixFWFRf''@;'; put 'put ''UFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLENUOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMiLFJFTFM6Imh0dHA6Ly9zY2hl''@;'; put 'put ''bWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyIsVENNTlQ6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxOC90aHJlYWRlZGNvbW1lbnRzIixkYzoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEu''@;'; put 'put ''MS8iLGRjdGVybXM6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLGRjbWl0eXBlOiJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvIixteDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvbWFjL2V4Y2VsLzIwMDgvbWFpbiIscjoiaHR0cDovL3NjaGVtYXMub3Blbnht''@;'; put 'put ''bGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsc2pzOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzIix2dDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m''@;'; put 'put ''ZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiLHhzaToiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLHhzZDoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEifSxTdD1bImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJl''@;'; put 'put ''YWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2Vs''@;'; put 'put ''LzIwMDYvMiJdLEdpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxhPTA7YTxlWzBdLmxlbmd0aDsrK2EpaWYoZVswXVthXSlmb3IodmFyIG49MCxpPWVbMF1bYV0ubGVuZ3RoO248aTtuKz0xMDI0MCl0LnB1c2guYXBwbHkodCxlWzBdW2FdLnNsaWNlKG4sbisxMDI0MCkpO3JldHVybiB0fSx6''@;'; put 'put ''aT1TZT9mdW5jdGlvbihlKXtyZXR1cm4gZVswXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKGVbMF1bMF0pP0J1ZmZlci5jb25jYXQoZVswXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KT90Om90KHQpfSkpOkdpKGUpfTpHaSwkaT1mdW5jdGlvbihlLHQscil7''@;'; put 'put ''Zm9yKHZhciBhPVtdLG49dDtuPHI7bis9MilhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh1dChlLG4pKSk7cmV0dXJuIGEuam9pbigiIikucmVwbGFjZShkciwiIil9LHUwPVNlP2Z1bmN0aW9uKGUsdCxyKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpP2UudG9TdHJpbmcoInV0ZjE2bGUi''@;'; put 'put ''LHQscikucmVwbGFjZShkciwiIik6JGkoZSx0LHIpfTokaSxqaT1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhPVtdLG49dDtuPHQrcjsrK24pYS5wdXNoKCgiMCIrZVtuXS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7cmV0dXJuIGEuam9pbigiIil9LEtpPVNlP2Z1bmN0aW9uKGUsdCxyKXty''@;'; put 'put ''ZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpP2UudG9TdHJpbmcoImhleCIsdCx0K3IpOmppKGUsdCxyKX06amksWWk9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT1bXSxuPXQ7bjxyO24rKylhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpYShlLG4pKSk7cmV0dXJuIGEuam9pbigiIil9LG5h''@;'; put 'put ''PVNlP2Z1bmN0aW9uKHQscixhKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHQpP3QudG9TdHJpbmcoInV0ZjgiLHIsYSk6WWkodCxyLGEpfTpZaSxKaT1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9uYShlLHQrNCx0KzQrci0xKToiIn0sSjA9SmkscWk9ZnVuY3Rpb24o''@;'; put 'put ''ZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3ItMSk6IiJ9LHEwPXFpLFppPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MipjcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3ItMSk6IiJ9LFowPVppLFFpPWZ1bmN0aW9uKHQscil7dmFyIGE9Y3IodCxyKTtyZXR1''@;'; put 'put ''cm4gYT4wP3UwKHQscis0LHIrNCthKToiIn0sUTA9UWksZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3IpOiIifSxlbj1lcyxycz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbiBDbyhlLHQpe2Zvcih2YXIgcj0xLTIqKGVbdCs3XT4+''@;'; put 'put ''PjcpLGE9KCgxMjcmZVt0KzddKTw8NCkrKGVbdCs2XT4+PjQmMTUpLG49MTUmZVt0KzZdLGk9NTtpPj0wOy0taSluPTI1NipuK2VbdCtpXTtyZXR1cm4gMjA0Nz09YT8wPT1uP3IqKDEvMCk6TmFOOigwPT1hP2E9LTEwMjI6KGEtPTEwMjMsbis9TWF0aC5wb3coMiw1MikpLHIqTWF0aC5wb3co''@;'; put 'put ''MixhLTUyKSpuKX0oZSx0KX0saDA9cnMscm49ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl9O1NlJiYoSjA9ZnVuY3Rpb24odCxyKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXJldHVybiBK''@;'; put 'put ''aSh0LHIpO3ZhciBhPXQucmVhZFVJbnQzMkxFKHIpO3JldHVybiBhPjA/dC50b1N0cmluZygidXRmOCIscis0LHIrNCthLTEpOiIifSxxMD1mdW5jdGlvbih0LHIpe2lmKCFCdWZmZXIuaXNCdWZmZXIodCkpcmV0dXJuIHFpKHQscik7dmFyIGE9dC5yZWFkVUludDMyTEUocik7cmV0dXJuIGE+''@;'; put 'put ''MD90LnRvU3RyaW5nKCJ1dGY4IixyKzQscis0K2EtMSk6IiJ9LFowPWZ1bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSlyZXR1cm4gWmkodCxyKTt2YXIgYT0yKnQucmVhZFVJbnQzMkxFKHIpO3JldHVybiB0LnRvU3RyaW5nKCJ1dGYxNmxlIixyKzQscis0K2EtMSl9LFEwPWZ1''@;'; put 'put ''bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSlyZXR1cm4gUWkodCxyKTt2YXIgYT10LnJlYWRVSW50MzJMRShyKTtyZXR1cm4gdC50b1N0cmluZygidXRmMTZsZSIscis0LHIrNCthKX0sZW49ZnVuY3Rpb24odCxyKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXJldHVybiBlcyh0''@;'; put 'put ''LHIpO3ZhciBhPXQucmVhZFVJbnQzMkxFKHIpO3JldHVybiB0LnRvU3RyaW5nKCJ1dGY4IixyKzQscis0K2EpfSxoMD1mdW5jdGlvbih0LHIpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIodCk/dC5yZWFkRG91YmxlTEUocik6cnModCxyKX0scm49ZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5p''@;'; put 'put ''c0J1ZmZlcih0KXx8QXJyYXkuaXNBcnJheSh0KXx8dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0IGluc3RhbmNlb2YgVWludDhBcnJheX0pLHR5cGVvZiBPZTwidSImJmZ1bmN0aW9uIHRzKCl7dTA9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBPZS51dGlscy5kZWNvZGUoMTIwMCxlLnNsaWNlKHQs''@;'; put 'put ''cikpLnJlcGxhY2UoZHIsIiIpfSxuYT1mdW5jdGlvbihlLHQscil7cmV0dXJuIE9lLnV0aWxzLmRlY29kZSg2NTAwMSxlLnNsaWNlKHQscikpfSxKMD1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9PZS51dGlscy5kZWNvZGUoUnQsZS5zbGljZSh0KzQsdCs0K3ItMSkp''@;'; put 'put ''OiIifSxxMD1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9PZS51dGlscy5kZWNvZGUoRHIsZS5zbGljZSh0KzQsdCs0K3ItMSkpOiIifSxaMD1mdW5jdGlvbihlLHQpe3ZhciByPTIqY3IoZSx0KTtyZXR1cm4gcj4wP09lLnV0aWxzLmRlY29kZSgxMjAwLGUuc2xpY2Uo''@;'; put 'put ''dCs0LHQrNCtyLTEpKToiIn0sUTA9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/T2UudXRpbHMuZGVjb2RlKDEyMDAsZS5zbGljZSh0KzQsdCs0K3IpKToiIn0sZW49ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/T2UudXRpbHMuZGVjb2RlKDY1''@;'; put 'put ''MDAxLGUuc2xpY2UodCs0LHQrNCtyKSk6IiJ9fSgpO3ZhciBpYT1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdfSx1dD1mdW5jdGlvbihlLHQpe3JldHVybiAyNTYqZVt0KzFdK2VbdF19LE9vPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MjU2KmVbdCsxXStlW3RdO3JldHVybiByPDMyNzY4P3I6LTEq''@;'; put 'put ''KDY1NTM1LXIrMSl9LGNyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdCszXSooMTw8MjQpKyhlW3QrMl08PDE2KSsoZVt0KzFdPDw4KStlW3RdfSxMdD1mdW5jdGlvbihlLHQpe3JldHVybiBlW3QrM108PDI0fGVbdCsyXTw8MTZ8ZVt0KzFdPDw4fGVbdF19LElvPWZ1bmN0aW9uKGUsdCl7cmV0''@;'; put 'put ''dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX07ZnVuY3Rpb24gQWEoZSx0KXt2YXIgYSxuLHMsZixjLG8scj0iIixpPVtdO3N3aXRjaCh0KXtjYXNlImRiY3MiOmlmKG89dGhpcy5sLFNlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpcj10aGlzLnNsaWNlKHRoaXMubCx0''@;'; put 'put ''aGlzLmwrMiplKS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKGM9MDtjPGU7KytjKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodXQodGhpcyxvKSksbys9MjtlKj0yO2JyZWFrO2Nhc2UidXRmOCI6cj1uYSh0aGlzLHRoaXMubCx0aGlzLmwrZSk7YnJlYWs7Y2FzZSJ1dGYxNmxlIjpyPXUw''@;'; put 'put ''KHRoaXMsdGhpcy5sLHRoaXMubCsoZSo9MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgT2U8InUiKSlyZXR1cm4gQWEuY2FsbCh0aGlzLGUsImRiY3MiKTtyPU9lLnV0aWxzLmRlY29kZShEcix0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMiplKSksZSo9MjticmVhaztjYXNlImxw''@;'; put 'put ''c3RyLWFuc2kiOnI9SjAodGhpcyx0aGlzLmwpLGU9NCtjcih0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHN0ci1jcCI6cj1xMCh0aGlzLHRoaXMubCksZT00K2NyKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwd3N0ciI6cj1aMCh0aGlzLHRoaXMubCksZT00KzIqY3IodGhpcyx0aGlzLmwp''@;'; put 'put ''O2JyZWFrO2Nhc2UibHBwNCI6ZT00K2NyKHRoaXMsdGhpcy5sKSxyPVEwKHRoaXMsdGhpcy5sKSwyJmUmJihlKz0yKTticmVhaztjYXNlIjhscHA0IjplPTQrY3IodGhpcyx0aGlzLmwpLHI9ZW4odGhpcyx0aGlzLmwpLDMmZSYmKGUrPTQtKDMmZSkpO2JyZWFrO2Nhc2UiY3N0ciI6Zm9yKGU9''@;'; put 'put ''MCxyPSIiOzAhPT0ocz1pYSh0aGlzLHRoaXMubCtlKyspKTspaS5wdXNoKHBhKHMpKTtyPWkuam9pbigiIik7YnJlYWs7Y2FzZSJfd3N0ciI6Zm9yKGU9MCxyPSIiOzAhPT0ocz11dCh0aGlzLHRoaXMubCtlKSk7KWkucHVzaChwYShzKSksZSs9MjtlKz0yLHI9aS5qb2luKCIiKTticmVhaztj''@;'; put 'put ''YXNlImRiY3MtY29udCI6Zm9yKHI9IiIsbz10aGlzLmwsYz0wO2M8ZTsrK2Mpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihvKSlyZXR1cm4gcz1pYSh0aGlzLG8pLHRoaXMubD1vKzEsZj1BYS5jYWxsKHRoaXMsZS1jLHM/ImRiY3MtY29udCI6InNiY3MtY29udCIpLGku''@;'; put 'put ''am9pbigiIikrZjtpLnB1c2gocGEodXQodGhpcyxvKSkpLG8rPTJ9cj1pLmpvaW4oIiIpLGUqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIE9lPCJ1Iil7cj1PZS51dGlscy5kZWNvZGUoRHIsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sK2UpKTticmVha31jYXNlInNiY3MtY29udCI6''@;'; put 'put ''Zm9yKHI9IiIsbz10aGlzLmwsYz0wO2MhPWU7KytjKXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YobykpcmV0dXJuIHM9aWEodGhpcyxvKSx0aGlzLmw9bysxLGY9QWEuY2FsbCh0aGlzLGUtYyxzPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxpLmpvaW4oIiIpK2Y7aS5w''@;'; put 'put ''dXNoKHBhKGlhKHRoaXMsbykpKSxvKz0xfXI9aS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaChlKXtjYXNlIDE6cmV0dXJuIGE9aWEodGhpcyx0aGlzLmwpLHRoaXMubCsrLGE7Y2FzZSAyOnJldHVybiBhPSgiaSI9PT10P09vOnV0KSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLGE7Y2Fz''@;'; put 'put ''ZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT10JiYxMjgmdGhpc1t0aGlzLmwrM10/KG49Y3IodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxuKTooYT0oZT4wP0x0OklvKSh0aGlzLHRoaXMubCksdGhpcy5sKz00LGEpO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09dClyZXR1cm4gbj04PT1lP2gwKHRoaXMs''@;'; put 'put ''dGhpcy5sKTpoMChbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlzLmwrNF0sdGhpc1t0aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxuO2U9ODtjYXNlIDE2OnI9S2ko''@;'; put 'put ''dGhpcyx0aGlzLmwsZSl9fXJldHVybiB0aGlzLmwrPWUscn12YXIgUm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pj44JjI1NSxlW3IrMl09dD4+PjE2JjI1NSxlW3IrM109dD4+PjI0JjI1NX0sTm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pjgm''@;'; put 'put ''MjU1LGVbcisyXT10Pj4xNiYyNTUsZVtyKzNdPXQ+PjI0JjI1NX0sYm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pj44JjI1NX07ZnVuY3Rpb24gUG8oZSx0LHIpe3ZhciBhPTAsbj0wO2lmKCJkYmNzIj09PXIpe2ZvcihuPTA7biE9dC5sZW5ndGg7KytuKWJvKHRoaXMs''@;'; put 'put ''dC5jaGFyQ29kZUF0KG4pLHRoaXMubCsyKm4pO2E9Mip0Lmxlbmd0aH1lbHNlIGlmKCJzYmNzIj09PXIpe2lmKHR5cGVvZiBPZTwidSImJjg3ND09UnQpZm9yKG49MDtuIT10Lmxlbmd0aDsrK24pe3ZhciBpPU9lLnV0aWxzLmVuY29kZShSdCx0LmNoYXJBdChuKSk7dGhpc1t0aGlzLmwrbl09''@;'; put 'put ''aVswXX1lbHNlIGZvcih0PXQucmVwbGFjZSgvW15ceDAwLVx4N0ZdL2csIl8iKSxuPTA7biE9dC5sZW5ndGg7KytuKXRoaXNbdGhpcy5sK25dPTI1NSZ0LmNoYXJDb2RlQXQobik7YT10Lmxlbmd0aH1lbHNle2lmKCJoZXgiPT09cil7Zm9yKDtuPGU7KytuKXRoaXNbdGhpcy5sKytdPXBhcnNl''@;'; put 'put ''SW50KHQuc2xpY2UoMipuLDIqbisyKSwxNil8fDA7cmV0dXJuIHRoaXN9aWYoInV0ZjE2bGUiPT09cil7dmFyIHM9TWF0aC5taW4odGhpcy5sK2UsdGhpcy5sZW5ndGgpO2ZvcihuPTA7bjxNYXRoLm1pbih0Lmxlbmd0aCxlKTsrK24pe3ZhciBmPXQuY2hhckNvZGVBdChuKTt0aGlzW3RoaXMu''@;'; put 'put ''bCsrXT0yNTUmZix0aGlzW3RoaXMubCsrXT1mPj44fWZvcig7dGhpcy5sPHM7KXRoaXNbdGhpcy5sKytdPTA7cmV0dXJuIHRoaXN9c3dpdGNoKGUpe2Nhc2UgMTphPTEsdGhpc1t0aGlzLmxdPTI1NSZ0O2JyZWFrO2Nhc2UgMjphPTIsdGhpc1t0aGlzLmxdPTI1NSZ0LHRoaXNbdGhpcy5sKzFd''@;'; put 'put ''PTI1NSYodD4+Pj04KTticmVhaztjYXNlIDM6YT0zLHRoaXNbdGhpcy5sXT0yNTUmdCx0aGlzW3RoaXMubCsxXT0yNTUmKHQ+Pj49OCksdGhpc1t0aGlzLmwrMl09MjU1Jih0Pj4+PTgpO2JyZWFrO2Nhc2UgNDphPTQsUm8odGhpcyx0LHRoaXMubCk7YnJlYWs7Y2FzZSA4OmlmKGE9OCwiZiI9''@;'; put 'put ''PT1yKXshZnVuY3Rpb24gRG8oZSx0LHIpe3ZhciBhPSh0PDB8fDEvdD09LTEvMD8xOjApPDw3LG49MCxpPTAscz1hPy10OnQ7aXNGaW5pdGUocyk/MD09cz9uPWk9MDoobj1NYXRoLmZsb29yKE1hdGgubG9nKHMpL01hdGguTE4yKSxpPXMqTWF0aC5wb3coMiw1Mi1uKSxuPD0tMTAyMyYmKCFp''@;'; put 'put ''c0Zpbml0ZShpKXx8aTxNYXRoLnBvdygyLDUyKSk/bj0tMTAyMjooaS09TWF0aC5wb3coMiw1Miksbis9MTAyMykpOihuPTIwNDcsaT1pc05hTih0KT8yNjk4NTowKTtmb3IodmFyIGY9MDtmPD01OysrZixpLz0yNTYpZVtyK2ZdPTI1NSZpO2Vbcis2XT0oMTUmbik8PDR8MTUmaSxlW3IrN109''@;'; put 'put ''bj4+NHxhfSh0aGlzLHQsdGhpcy5sKTticmVha31jYXNlIDE2OmJyZWFrO2Nhc2UtNDphPTQsTm8odGhpcyx0LHRoaXMubCl9fXJldHVybiB0aGlzLmwrPWEsdGhpc31mdW5jdGlvbiBhcyhlLHQpe3ZhciByPUtpKHRoaXMsdGhpcy5sLGUubGVuZ3RoPj4xKTtpZihyIT09ZSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IodCsiRXhwZWN0ZWQgIitlKyIgc2F3ICIrcik7dGhpcy5sKz1lLmxlbmd0aD4+MX1mdW5jdGlvbiBocihlLHQpe2UubD10LGUucmVhZF9zaGlmdD1BYSxlLmNoaz1hcyxlLndyaXRlX3NoaWZ0PVBvfWZ1bmN0aW9uIHByKGUsdCl7ZS5sKz10fWZ1bmN0aW9uIEcoZSl7dmFyIHQ9X3Qo''@;'; put 'put ''ZSk7cmV0dXJuIGhyKHQsMCksdH1mdW5jdGlvbiBodChlLHQscil7aWYoZSl7dmFyIGEsbixpO2hyKGUsZS5sfHwwKTtmb3IodmFyIHM9ZS5sZW5ndGgsZj0wLGM9MDtlLmw8czspezEyOCYoZj1lLnJlYWRfc2hpZnQoMSkpJiYoZj0oMTI3JmYpKygoMTI3JmUucmVhZF9zaGlmdCgxKSk8PDcp''@;'; put 'put ''KTt2YXIgbz0kYVtmXXx8JGFbNjU1MzVdO2ZvcihpPTEyNyYoYT1lLnJlYWRfc2hpZnQoMSkpLG49MTtuPDQmJjEyOCZhOysrbilpKz0oMTI3JihhPWUucmVhZF9zaGlmdCgxKSkpPDw3Km47Yz1lLmwraTt2YXIgbD1vLmYmJm8uZihlLGkscik7aWYoZS5sPWMsdChsLG8sZikpcmV0dXJufX19''@;'; put 'put ''ZnVuY3Rpb24gU3IoKXt2YXIgZT1bXSx0PVNlPzI1NjoyMDQ4LHI9ZnVuY3Rpb24obyl7dmFyIGw9RyhvKTtyZXR1cm4gaHIobCwwKSxsfSxhPXIodCksbj1mdW5jdGlvbigpe2EmJihhLmxlbmd0aD5hLmwmJigoYT1hLnNsaWNlKDAsYS5sKSkubD1hLmxlbmd0aCksYS5sZW5ndGg+MCYmZS5w''@;'; put 'put ''dXNoKGEpLGE9bnVsbCl9LGk9ZnVuY3Rpb24obyl7cmV0dXJuIGEmJm88YS5sZW5ndGgtYS5sP2E6KG4oKSxhPXIoTWF0aC5tYXgobysxLHQpKSl9O3JldHVybntuZXh0OmkscHVzaDpmdW5jdGlvbihvKXtuKCksbnVsbD09KGE9bykubCYmKGEubD1hLmxlbmd0aCksaSh0KX0sZW5kOmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIG4oKSxmcihlKX0sX2J1ZnM6ZX19ZnVuY3Rpb24gQ2EoZSx0LHIpe3ZhciBhPU1lKGUpO2lmKHQucz8oYS5jUmVsJiYoYS5jKz10LnMuYyksYS5yUmVsJiYoYS5yKz10LnMucikpOihhLmNSZWwmJihhLmMrPXQuYyksYS5yUmVsJiYoYS5yKz10LnIpKSwhcnx8ci5iaWZm''@;'; put 'put ''PDEyKXtmb3IoO2EuYz49MjU2OylhLmMtPTI1Njtmb3IoO2Eucj49NjU1MzY7KWEuci09NjU1MzZ9cmV0dXJuIGF9ZnVuY3Rpb24gbnMoZSx0LHIpe3ZhciBhPU1lKGUpO3JldHVybiBhLnM9Q2EoYS5zLHQucyxyKSxhLmU9Q2EoYS5lLHQucyxyKSxhfWZ1bmN0aW9uIERhKGUsdCl7aWYoZS5j''@;'; put 'put ''UmVsJiZlLmM8MClmb3IoZT1NZShlKTtlLmM8MDspZS5jKz10Pjg/MTYzODQ6MjU2O2lmKGUuclJlbCYmZS5yPDApZm9yKGU9TWUoZSk7ZS5yPDA7KWUucis9dD44PzEwNDg1NzY6dD41PzY1NTM2OjE2Mzg0O3ZhciByPWdlKGUpO3JldHVybiFlLmNSZWwmJm51bGwhPWUuY1JlbCYmKHI9ZnVu''@;'; put 'put ''Y3Rpb24gTW8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KHIpKSwhZS5yUmVsJiZudWxsIT1lLnJSZWwmJihyPWZ1bmN0aW9uIExvKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbQS1aXXxeKShcZCspJC8sIiQxJCQkMiIpfShyKSkscn1mdW5jdGlvbiB0bihlLHQpe3Jl''@;'; put 'put ''dHVybiAwIT1lLnMucnx8ZS5zLnJSZWx8fGUuZS5yIT0odC5iaWZmPj0xMj8xMDQ4NTc1OnQuYmlmZj49OD82NTUzNjoxNjM4NCl8fGUuZS5yUmVsPzAhPWUucy5jfHxlLnMuY1JlbHx8ZS5lLmMhPSh0LmJpZmY+PTEyPzE2MzgzOjI1NSl8fGUuZS5jUmVsP0RhKGUucyx0LmJpZmYpKyI6IitE''@;'; put 'put ''YShlLmUsdC5iaWZmKTooZS5zLnJSZWw/IiI6IiQiKStLZShlLnMucikrIjoiKyhlLmUuclJlbD8iIjoiJCIpK0tlKGUuZS5yKTooZS5zLmNSZWw/IiI6IiQiKStIZShlLnMuYykrIjoiKyhlLmUuY1JlbD8iIjoiJCIpK0hlKGUuZS5jKX1mdW5jdGlvbiBhbihlKXtyZXR1cm4gcGFyc2VJbnQo''@;'; put 'put ''ZnVuY3Rpb24gQm8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXCQoXGQrKSQvLCIkMSIpfShlKSwxMCktMX1mdW5jdGlvbiBLZShlKXtyZXR1cm4iIisoZSsxKX1mdW5jdGlvbiBubihlKXtmb3IodmFyIHQ9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9''@;'; put 'put ''KGUpLHI9MCxhPTA7YSE9PXQubGVuZ3RoOysrYSlyPTI2KnIrdC5jaGFyQ29kZUF0KGEpLTY0O3JldHVybiByLTF9ZnVuY3Rpb24gSGUoZSl7aWYoZTwwKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb2x1bW4gIitlKTt2YXIgdD0iIjtmb3IoKytlO2U7ZT1NYXRoLmZsb29yKChlLTEpLzI2''@;'; put 'put ''KSl0PVN0cmluZy5mcm9tQ2hhckNvZGUoKGUtMSklMjYrNjUpK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gR2UoZSl7Zm9yKHZhciB0PTAscj0wLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG49ZS5jaGFyQ29kZUF0KGEpO24+PTQ4JiZuPD01Nz90PTEwKnQrKG4tNDgpOm4+PTY1JiZuPD05MCYmKHI9''@;'; put 'put ''MjYqcisobi02NCkpfXJldHVybntjOnItMSxyOnQtMX19ZnVuY3Rpb24gZ2UoZSl7Zm9yKHZhciB0PWUuYysxLHI9IiI7dDt0PSh0LTEpLzI2fDApcj1TdHJpbmcuZnJvbUNoYXJDb2RlKCh0LTEpJTI2KzY1KStyO3JldHVybiByKyhlLnIrMSl9ZnVuY3Rpb24gUHIoZSl7dmFyIHQ9ZS5pbmRl''@;'; put 'put ''eE9mKCI6Iik7cmV0dXJuLTE9PXQ/e3M6R2UoZSksZTpHZShlKX06e3M6R2UoZS5zbGljZSgwLHQpKSxlOkdlKGUuc2xpY2UodCsxKSl9fWZ1bmN0aW9uIHdlKGUsdCl7cmV0dXJuIHR5cGVvZiB0PiJ1Inx8Im51bWJlciI9PXR5cGVvZiB0P3dlKGUucyxlLmUpOigic3RyaW5nIiE9dHlwZW9m''@;'; put 'put ''IGUmJihlPWdlKGUpKSwic3RyaW5nIiE9dHlwZW9mIHQmJih0PWdlKHQpKSxlPT10P2U6ZSsiOiIrdCl9ZnVuY3Rpb24gRGUoZSl7dmFyIHQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSxyPTAsYT0wLG49MCxpPWUubGVuZ3RoO2ZvcihyPTA7YTxpJiYhKChuPWUuY2hhckNvZGVBdChhKS02''@;'; put 'put ''NCk8MXx8bj4yNik7KythKXI9MjYqcituO2Zvcih0LnMuYz0tLXIscj0wO2E8aSYmISgobj1lLmNoYXJDb2RlQXQoYSktNDgpPDB8fG4+OSk7KythKXI9MTAqcituO2lmKHQucy5yPS0tcixhPT09aXx8MTAhPW4pcmV0dXJuIHQuZS5jPXQucy5jLHQuZS5yPXQucy5yLHQ7Zm9yKCsrYSxyPTA7''@;'; put 'put ''YSE9aSYmISgobj1lLmNoYXJDb2RlQXQoYSktNjQpPDF8fG4+MjYpOysrYSlyPTI2KnIrbjtmb3IodC5lLmM9LS1yLHI9MDthIT1pJiYhKChuPWUuY2hhckNvZGVBdChhKS00OCk8MHx8bj45KTsrK2Epcj0xMCpyK247cmV0dXJuIHQuZS5yPS0tcix0fWZ1bmN0aW9uIGF0KGUsdCxyKXtyZXR1''@;'; put 'put ''cm4gbnVsbD09ZXx8bnVsbD09ZS50fHwieiI9PWUudD8iIjp2b2lkIDAhPT1lLnc/ZS53OigiZCI9PWUudCYmIWUueiYmciYmci5kYXRlTkYmJihlLno9ci5kYXRlTkYpLCJlIj09ZS50P3h0W2Uudl18fGUudjpmdW5jdGlvbiBpcyhlLHQpe3ZhciByPSJkIj09ZS50JiZ0IGluc3RhbmNlb2Yg''@;'; put 'put ''RGF0ZTtpZihudWxsIT1lLnopdHJ5e3JldHVybiBlLnc9UnIoZS56LHI/aXIodCk6dCl9Y2F0Y2h7fXRyeXtyZXR1cm4gZS53PVJyKChlLlhGfHx7fSkubnVtRm10SWR8fChyPzE0OjApLHI/aXIodCk6dCl9Y2F0Y2h7cmV0dXJuIiIrdH19KGUsbnVsbD09dD9lLnY6dCkpfWZ1bmN0aW9uIEZ0''@;'; put 'put ''KGUsdCl7dmFyIHI9dCYmdC5zaGVldD90LnNoZWV0OiJTaGVldDEiLGE9e307cmV0dXJuIGFbcl09ZSx7U2hlZXROYW1lczpbcl0sU2hlZXRzOmF9fWZ1bmN0aW9uIHNhKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHNzKGUsdCxyKXt2YXIgYT1yfHx7fSxuPWU/QXJyYXkuaXNBcnJheShlKTphLmRl''@;'; put 'put ''bnNlO251bGwhPXplJiZudWxsPT1uJiYobj16ZSk7dmFyIGk9ZXx8KG4/W106e30pLHM9MCxmPTA7aWYoaSYmbnVsbCE9YS5vcmlnaW4pe2lmKCJudW1iZXIiPT10eXBlb2YgYS5vcmlnaW4pcz1hLm9yaWdpbjtlbHNle3ZhciBjPSJzdHJpbmciPT10eXBlb2YgYS5vcmlnaW4/R2UoYS5vcmln''@;'; put 'put ''aW4pOmEub3JpZ2luO3M9Yy5yLGY9Yy5jfWlbIiFyZWYiXXx8KGlbIiFyZWYiXT0iQTE6QTEiKX12YXIgbz17czp7YzoxZTcscjoxZTd9LGU6e2M6MCxyOjB9fTtpZihpWyIhcmVmIl0pe3ZhciBsPURlKGlbIiFyZWYiXSk7by5zLmM9bC5zLmMsby5zLnI9bC5zLnIsby5lLmM9TWF0aC5tYXgo''@;'; put 'put ''by5lLmMsbC5lLmMpLG8uZS5yPU1hdGgubWF4KG8uZS5yLGwuZS5yKSwtMT09cyYmKG8uZS5yPXM9bC5lLnIrMSl9Zm9yKHZhciBoPTA7aCE9dC5sZW5ndGg7KytoKWlmKHRbaF0pe2lmKCFBcnJheS5pc0FycmF5KHRbaF0pKXRocm93IG5ldyBFcnJvcigiYW9hX3RvX3NoZWV0IGV4cGVjdHMg''@;'; put 'put ''YW4gYXJyYXkgb2YgYXJyYXlzIik7Zm9yKHZhciB4PTA7eCE9dFtoXS5sZW5ndGg7Kyt4KWlmKCEodHlwZW9mIHRbaF1beF0+InUiKSl7dmFyIGQ9e3Y6dFtoXVt4XX0sdj1zK2gsdT1mK3g7aWYoby5zLnI+diYmKG8ucy5yPXYpLG8ucy5jPnUmJihvLnMuYz11KSxvLmUucjx2JiYoby5lLnI9''@;'; put 'put ''diksby5lLmM8dSYmKG8uZS5jPXUpLCF0W2hdW3hdfHwib2JqZWN0IiE9dHlwZW9mIHRbaF1beF18fEFycmF5LmlzQXJyYXkodFtoXVt4XSl8fHRbaF1beF1pbnN0YW5jZW9mIERhdGUpaWYoQXJyYXkuaXNBcnJheShkLnYpJiYoZC5mPXRbaF1beF1bMV0sZC52PWQudlswXSksbnVsbD09PWQu''@;'; put 'put ''dilpZihkLmYpZC50PSJuIjtlbHNlIGlmKGEubnVsbEVycm9yKWQudD0iZSIsZC52PTA7ZWxzZXtpZighYS5zaGVldFN0dWJzKWNvbnRpbnVlO2QudD0ieiJ9ZWxzZSJudW1iZXIiPT10eXBlb2YgZC52P2QudD0ibiI6ImJvb2xlYW4iPT10eXBlb2YgZC52P2QudD0iYiI6ZC52IGluc3RhbmNl''@;'; put 'put ''b2YgRGF0ZT8oZC56PWEuZGF0ZU5GfHxwZVsxNF0sYS5jZWxsRGF0ZXM/KGQudD0iZCIsZC53PVJyKGQueixpcihkLnYpKSk6KGQudD0ibiIsZC52PWlyKGQudiksZC53PVJyKGQueixkLnYpKSk6ZC50PSJzIjtlbHNlIGQ9dFtoXVt4XTtpZihuKWlbdl18fChpW3ZdPVtdKSxpW3ZdW3VdJiZp''@;'; put 'put ''W3ZdW3VdLnomJihkLno9aVt2XVt1XS56KSxpW3ZdW3VdPWQ7ZWxzZXt2YXIgcD1nZSh7Yzp1LHI6dn0pO2lbcF0mJmlbcF0ueiYmKGQuej1pW3BdLnopLGlbcF09ZH19fXJldHVybiBvLnMuYzwxZTcmJihpWyIhcmVmIl09d2UobykpLGl9KG51bGwsZSx0KX1mdW5jdGlvbiBtcihlKXt2YXIg''@;'; put 'put ''dD1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT10PyIiOmUucmVhZF9zaGlmdCh0LCJkYmNzIil9ZnVuY3Rpb24gVm8oZSl7cmV0dXJue2ljaDplLnJlYWRfc2hpZnQoMiksaWZudDplLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIHNuKGUsdCl7dmFyIHI9ZS5sLGE9ZS5yZWFkX3NoaWZ0KDEp''@;'; put 'put ''LG49bXIoZSksaT1bXSxzPXt0Om4saDpufTtpZigxJmEpe2Zvcih2YXIgZj1lLnJlYWRfc2hpZnQoNCksYz0wO2MhPWY7KytjKWkucHVzaChWbyhlKSk7cy5yPWl9ZWxzZSBzLnI9W3tpY2g6MCxpZm50OjB9XTtyZXR1cm4gZS5sPXIrdCxzfXZhciBHbz1zbjtmdW5jdGlvbiBIcihlKXt2YXIg''@;'; put 'put ''dD1lLnJlYWRfc2hpZnQoNCkscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIHIrPWUucmVhZF9zaGlmdCgxKTw8MTYsZS5sKysse2M6dCxpU3R5bGVSZWY6cn19ZnVuY3Rpb24gTXQoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiB0Kz1lLnJlYWRfc2hpZnQoMSk8PDE2LGUubCsrLHtj''@;'; put 'put ''Oi0xLGlTdHlsZVJlZjp0fX12YXIgJG89bXI7ZnVuY3Rpb24gZm4oZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09dHx8NDI5NDk2NzI5NT09PXQ/IiI6ZS5yZWFkX3NoaWZ0KHQsImRiY3MiKX12YXIgam89bXIsb249Zm47ZnVuY3Rpb24gdW4oZSl7dmFyIHQ9ZS5zbGljZShl''@;'; put 'put ''LmwsZS5sKzQpLHI9MSZ0WzBdLGE9MiZ0WzBdO2UubCs9NDt2YXIgbj0wPT09YT9oMChbMCwwLDAsMCwyNTImdFswXSx0WzFdLHRbMl0sdFszXV0sMCk6THQodCwwKT4+MjtyZXR1cm4gcj9uLzEwMDpufWZ1bmN0aW9uIG9zKGUpe3ZhciB0PXtzOnt9LGU6e319O3JldHVybiB0LnMucj1lLnJl''@;'; put 'put ''YWRfc2hpZnQoNCksdC5lLnI9ZS5yZWFkX3NoaWZ0KDQpLHQucy5jPWUucmVhZF9zaGlmdCg0KSx0LmUuYz1lLnJlYWRfc2hpZnQoNCksdH12YXIgV3Q9b3M7ZnVuY3Rpb24gZ3IoZSl7aWYoZS5sZW5ndGgtZS5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVuZGVyZmxvdyI7cmV0dXJuIGUu''@;'; put 'put ''cmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24gbHMoZSx0KXt2YXIgYT1lLnJlYWRfc2hpZnQoNCk7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5I''@;'; put 'put ''TUVUQUZJTEUifVtlLnJlYWRfc2hpZnQoNCldfHwiIn1pZihhPjQwMCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENsaXBib2FyZDogIithLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGUubC09NCxlLnJlYWRfc2hpZnQoMCwxPT10PyJscHN0ciI6Imxwd3N0ciIpfXZhciBobj0yLEFyPTMs''@;'; put 'put ''dXM9MTIsaHM9ODEsYWw9WzgwLGhzXSx4bj17MTp7bjoiQ29kZVBhZ2UiLHQ6aG59LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDpBcn0sNTp7bjoiTGluZUNvdW50Iix0OkFyfSw2OntuOiJQYXJhZ3JhcGhD''@;'; put 'put ''b3VudCIsdDpBcn0sNzp7bjoiU2xpZGVDb3VudCIsdDpBcn0sODp7bjoiTm90ZUNvdW50Iix0OkFyfSw5OntuOiJIaWRkZW5Db3VudCIsdDpBcn0sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6QXJ9LDExOntuOiJTY2FsZUNyb3AiLHQ6MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6''@;'; put 'put ''NDEwOH0sMTM6e246IlRpdGxlc09mUGFydHMiLHQ6NDEyNn0sMTQ6e246Ik1hbmFnZXIiLHQ6ODB9LDE1OntuOiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNoYXJhY3RlckNvdW50Iix0OkFyfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7''@;'; put 'put ''bjoiSHlwZXJsaW5rc0NoYW5nZWQiLHQ6MTF9LDIzOntuOiJBcHBWZXJzaW9uIix0OkFyLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5''@;'; put 'put ''OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sZG49ezE6e246IkNvZGVQYWdlIix0OmhufSwyOntuOiJUaXRsZSIsdDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4''@;'; put 'put ''MH0sNDp7bjoiQXV0aG9yIix0OjgwfSw1OntuOiJLZXl3b3JkcyIsdDo4MH0sNjp7bjoiQ29tbWVudHMiLHQ6ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5OntuOiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntuOiJFZGl0VGltZSIsdDo2NH0sMTE6e246''@;'; put 'put ''Ikxhc3RQcmludGVkIix0OjY0fSwxMjp7bjoiQ3JlYXRlZERhdGUiLHQ6NjR9LDEzOntuOiJNb2RpZmllZERhdGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6QXJ9LDE1OntuOiJXb3JkQ291bnQiLHQ6QXJ9LDE2OntuOiJDaGFyQ291bnQiLHQ6QXJ9LDE3OntuOiJUaHVtYm5haWwiLHQ6''@;'; put 'put ''NzF9LDE4OntuOiJBcHBsaWNhdGlvbiIsdDo4MH0sMTk6e246IkRvY1NlY3VyaXR5Iix0OkFyfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0seHM9ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJS''@;'; put 'put ''VSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2''@;'; put 'put ''OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oiLDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2''@;'; put 'put ''NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LG5sPVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJr''@;'; put 'put ''VXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiBpbChlKXtyZXR1cm4gZS5tYXAoZnVu''@;'; put 'put ''Y3Rpb24odCl7cmV0dXJuW3Q+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF19KX12YXIgVnQ9TWUoaWwoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1''@;'; put 'put ''LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4''@;'; put 'put ''ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2''@;'; put 'put ''LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDE2Nzc3MjE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSx4dD17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToiI1ZBTFVFISIsMjM6IiNSRUYhIiwyOToiI05BTUU/IiwzNjoiI05V''@;'; put 'put ''TSEiLDQyOiIjTi9BIiw0MzoiI0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9LGRzPXsiI05VTEwhIjowLCIjRElWLzAhIjo3LCIjVkFMVUUhIjoxNSwiI1JFRiEiOjIzLCIjTkFNRT8iOjI5LCIjTlVNISI6MzYsIiNOL0EiOjQyLCIjR0VUVElOR19EQVRBIjo0MywiI1dURj8iOjI1NX0sdm49''@;'; put 'put ''eyJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNh''@;'; put 'put ''dGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZp''@;'; put 'put ''Y2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCI6InNoZWV0cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl''@;'; put 'put ''bC53b3Jrc2hlZXQiOiJzaGVldHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbCI6ImNoYXJ0cyIsImFwcGxpY2F0aW9u''@;'; put 'put ''L3ZuZC5tcy1leGNlbC5jaGFydHNoZWV0IjoiY2hhcnRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQreG1sIjoibWFjcm9zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQiOiJtYWNyb3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1h''@;'; put 'put ''Y3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sIjoiZGlhbG9ncyIsImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5tcy1leGNlbC5kaWFsb2dzaGVldCI6ImRpYWxvZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCI6InN0cnMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hhcmVkU3RyaW5ncyI6InN0''@;'; put 'put ''cnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIjoic3R5bGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlcyI6InN0eWxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNr''@;'; put 'put ''YWdlLmNvcmUtcHJvcGVydGllcyt4bWwiOiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50''@;'; put 'put ''LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sIjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNw''@;'; put 'put ''cmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIjoiY29tbWVudHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMiOiJjb21tZW50''@;'; put 'put ''cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50aHJlYWRlZGNvbW1lbnRzK3htbCI6InRocmVhZGVkY29tbWVudHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGVyc29uK3htbCI6InBlb3BsZSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5z''@;'; put 'put ''cHJlYWRzaGVldG1sLnNoZWV0TWV0YWRhdGEreG1sIjoibWV0YWRhdGEiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRhZGF0YSI6Im1ldGFkYXRhIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFy''@;'; put 'put ''dGNvbG9yc3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRzdHlsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGV4K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2No''@;'; put 'put ''YWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNl''@;'; put 'put ''dHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0''@;'; put 'put ''aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayI6Imxp''@;'; put 'put ''bmtzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmlj''@;'; put 'put ''ZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5''@;'; put 'put ''VGFibGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJUT0RPIiwiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWwiOiJUT0RP''@;'; put 'put ''IiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZVNpbmdsZUNlbGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''bXMtZXhjZWwuc2xpY2VyK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIjoiVE9ETyIsImFw''@;'; put 'put ''cGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54''@;'; put 'put ''bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVwZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk''@;'; put 'put ''b2N1bWVudC5tb2RlbCtkYXRhIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdpbmdzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54''@;'; put 'put ''bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3Blbnht''@;'; put 'put ''bGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5y''@;'; put 'put ''ZWxhdGlvbnNoaXBzK3htbCI6InJlbHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0IjoiVE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LGtlPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m''@;'; put 'put ''ZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1h''@;'; put 'put ''cy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3Np''@;'; put 'put ''bmciLFhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw''@;'; put 'put ''cy9jdXN0b21YbWwiLENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixDTU5UOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9y''@;'; put 'put ''ZWxhdGlvbnNoaXBzL2NvbW1lbnRzIixDT1JFX1BST1BTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIixFWFRfUFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9y''@;'; put 'put ''Zy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyIsQ1VTVF9QUk9QUzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b20tcHJvcGVydGllcyIsU1NUOiJodHRw''@;'; put 'put ''Oi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3MiLFNUWToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiLFRIRU1F''@;'; put 'put ''OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIixDSEFSVDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIsQ0hBUlRF''@;'; put 'put ''WDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiLENTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0c2hlZXQiLFdTOlsiaHR0cDovL3Nj''@;'; put 'put ''aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdLERTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0IixNUzoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9zaGVldCIsSU1HOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0''@;'; put 'put ''cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixEUkFXOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RyYXdpbmciLFhMTUVUQToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGVldE1ldGFkYXRhIixUQ01OVDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNy8xMC9yZWxhdGlvbnNoaXBzL3RocmVhZGVkQ29tbWVudCIsUEVPUExFOiJodHRwOi8vc2NoZW1hcy5taWNy''@;'; put 'put ''b3NvZnQuY29tL29mZmljZS8yMDE3LzEwL3JlbGF0aW9uc2hpcHMvcGVyc29uIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07ZnVuY3Rpb24gT2EoZSl7dmFyIHQ9ZS5sYXN0SW5kZXhPZigiLyIpO3JldHVy''@;'; put 'put ''biBlLnNsaWNlKDAsdCsxKSsiX3JlbHMvIitlLnNsaWNlKHQrMSkrIi5yZWxzIn1mdW5jdGlvbiBJYShlLHQpe3ZhciByPXsiIWlkIjp7fX07aWYoIWUpcmV0dXJuIHI7Ii8iIT09dC5jaGFyQXQoMCkmJih0PSIvIit0KTt2YXIgYT17fTtyZXR1cm4oZS5tYXRjaCh2cil8fFtdKS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKG4pe3ZhciBpPW1lKG4pO2lmKCI8UmVsYXRpb25zaGlwIj09PWlbMF0pe3ZhciBzPXt9O3MuVHlwZT1pLlR5cGUscy5UYXJnZXQ9aS5UYXJnZXQscy5JZD1pLklkLGkuVGFyZ2V0TW9kZSYmKHMuVGFyZ2V0TW9kZT1pLlRhcmdldE1vZGUpO3ZhciBmPSJFeHRlcm5hbCI9PT1p''@;'; put 'put ''LlRhcmdldE1vZGU/aS5UYXJnZXQ6U2EoaS5UYXJnZXQsdCk7cltmXT1zLGFbaS5JZF09c319KSxyWyIhaWQiXT1hLHJ9dmFyIGNsPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IixWcj1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250''@;'; put 'put ''ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIs''@;'; put 'put ''IlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRs''@;'; put 'put ''ZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXSxkbD1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgQXJyYXkoVnIubGVuZ3RoKSx0PTA7dDxWci5sZW5ndGg7Kyt0KXt2YXIgcj1Wclt0''@;'; put 'put ''XSxhPSIoPzoiK3JbMF0uc2xpY2UoMCxyWzBdLmluZGV4T2YoIjoiKSkrIjopIityWzBdLnNsaWNlKHJbMF0uaW5kZXhPZigiOiIpKzEpO2VbdF09bmV3IFJlZ0V4cCgiPCIrYSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK2ErIj4iKX1yZXR1cm4gZX0oKTtmdW5jdGlvbiBtcyhlKXt2YXIgdD17''@;'; put 'put ''fTtlPUJlKGUpO2Zvcih2YXIgcj0wO3I8VnIubGVuZ3RoOysrcil7dmFyIGE9VnJbcl0sbj1lLm1hdGNoKGRsW3JdKTtudWxsIT1uJiZuLmxlbmd0aD4wJiYodFthWzFdXT1JZShuWzFdKSksImRhdGUiPT09YVsyXSYmdFthWzFdXSYmKHRbYVsxXV09WGUodFthWzFdXSkpfXJldHVybiB0fXZh''@;'; put 'put ''ciBYdD1bWyJBcHBsaWNhdGlvbiIsIkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJpbmciXSxbIkRvY1NlY3VyaXR5IiwiRG9jU2VjdXJpdHkiLCJzdHJpbmciXSxbIk1hbmFnZXIiLCJN''@;'; put 'put ''YW5hZ2VyIiwic3RyaW5nIl0sWyJIeXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NVcFRvRGF0ZSIsIkxpbmtzVXBUb0RhdGUiLCJib29sIl0sWyJTY2FsZUNyb3AiLCJTY2FsZUNyb3Ai''@;'; put 'put ''LCJib29sIl0sWyJIZWFkaW5nUGFpcnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIHdzKGUsdCxyLGEpe3ZhciBuPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgZSluPUhpKGUsYSk7ZWxzZSBmb3IodmFyIGk9''@;'; put 'put ''MDtpPGUubGVuZ3RoOysraSluPW4uY29uY2F0KGVbaV0ubWFwKGZ1bmN0aW9uKGwpe3JldHVybnt2Omx9fSkpO3ZhciBzPSJzdHJpbmciPT10eXBlb2YgdD9IaSh0LGEpLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC52fSk6dCxmPTAsYz0wO2lmKHMubGVuZ3RoPjApZm9yKHZhciBvPTA7byE9''@;'; put 'put ''PW4ubGVuZ3RoO28rPTIpe3N3aXRjaChjPStuW28rMV0udixuW29dLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRiIjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhl''@;'; put 'put ''NHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMg''@;'; put 'put ''ZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjpyLldvcmtzaGVldHM9YyxyLlNoZWV0TmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJOYW1lZCBSYW5nZXMiOmNhc2UiUmFuZ29zIGNvbiBub21icmUiOmNhc2UiXHU1NDBkXHU1MjRkXHU0ZWQ4XHUzMDRkXHU0ZTAwXHU4OWE3''@;'; put 'put ''IjpjYXNlIkJlbmFubnRlIEJlcmVpY2hlIjpjYXNlIk5hdm5naXZuZSBvbXJceGU1ZGVyIjpyLk5hbWVkUmFuZ2VzPWMsci5EZWZpbmVkTmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjpyLkNoYXJ0c2hlZXRzPWMsci5DaGFydE5hbWVzPXMu''@;'; put 'put ''c2xpY2UoZixmK2MpfWYrPWN9fXZhciBfbixwbD0vPFtePl0rPltePF0qL2csZ249e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixS''@;'; put 'put ''ZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3JlYXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29t''@;'; put 'put ''cGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFuZ3VhZ2U6Ikxhbmd1YWdlIn07ZnVuY3Rpb24gZ2woZSx0LHIpe19ufHwoX249czAoZ24pKSxlW3Q9X25bdF18fHRdPXJ9ZnVuY3Rpb24gd24o''@;'; put 'put ''ZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKHIvMWU3Kk1hdGgucG93KDIsMzIpK3QvMWU3LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIFRzKGUsdCxyKXt2YXIgYT1l''@;'; put 'put ''Lmwsbj1lLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihyKWZvcig7ZS5sLWEmMzspKytlLmw7cmV0dXJuIG59ZnVuY3Rpb24gU3MoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gciYmKGUubCs9NC0oYS5sZW5ndGgrMSYzKSYzKSxhfWZ1bmN0aW9uIEZz''@;'; put 'put ''KGUsdCxyKXtyZXR1cm4gMzE9PT10P1NzKGUpOlRzKGUsMCxyKX1mdW5jdGlvbiBrbihlLHQscil7cmV0dXJuIEZzKGUsdCwhMT09PXI/MDo0KX1mdW5jdGlvbiBGbChlKXt2YXIgdD1lLmwscj1fMChlLGhzKTtyZXR1cm4gMD09ZVtlLmxdJiYwPT1lW2UubCsxXSYmZS5sLXQmMiYmKGUubCs9''@;'; put 'put ''MiksW3IsXzAoZSxBcildfWZ1bmN0aW9uIHlzKGUsdCl7Zm9yKHZhciByPWUucmVhZF9zaGlmdCg0KSxhPXt9LG49MDtuIT1yOysrbil7dmFyIGk9ZS5yZWFkX3NoaWZ0KDQpLHM9ZS5yZWFkX3NoaWZ0KDQpO2FbaV09ZS5yZWFkX3NoaWZ0KHMsMTIwMD09PXQ/InV0ZjE2bGUiOiJ1dGY4Iiku''@;'; put 'put ''cmVwbGFjZShkciwiIikucmVwbGFjZSh3YSwiISIpLDEyMDA9PT10JiZzJTImJihlLmwrPTIpfXJldHVybiAzJmUubCYmKGUubD1lLmw+PjM8PDIpLGF9ZnVuY3Rpb24gQXMoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5zbGljZShlLmwsZS5sK3QpO3JldHVybiBlLmwrPXQsKDMmdCk+''@;'; put 'put ''MCYmKGUubCs9NC0oMyZ0KSYzKSxyfWZ1bmN0aW9uIF8wKGUsdCxyKXt2YXIgbixhPWUucmVhZF9zaGlmdCgyKSxpPXJ8fHt9O2lmKGUubCs9Mix0IT09dXMmJmEhPT10JiYtMT09PWFsLmluZGV4T2YodCkmJig0MTI2IT0oNjU1MzQmdCl8fDQxMjYhPSg2NTUzNCZhKSkpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJFeHBlY3RlZCB0eXBlICIrdCsiIHNhdyAiK2EpO3N3aXRjaCh0PT09dXM/YTp0KXtjYXNlIDI6cmV0dXJuIG49ZS5yZWFkX3NoaWZ0KDIsImkiKSxpLnJhd3x8KGUubCs9MiksbjtjYXNlIDM6cmV0dXJuIGUucmVhZF9zaGlmdCg0LCJpIik7Y2FzZSAxMTpyZXR1cm4gMCE9PWUucmVh''@;'; put 'put ''ZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiBlLnJlYWRfc2hpZnQoNCk7Y2FzZSAzMDpyZXR1cm4gVHMoZSwwLDQpLnJlcGxhY2UoZHIsIiIpO2Nhc2UgMzE6cmV0dXJuIFNzKGUpO2Nhc2UgNjQ6cmV0dXJuIHduKGUpO2Nhc2UgNjU6cmV0dXJuIEFzKGUpO2Nhc2UgNzE6cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIEFsKGUpe3ZhciB0PXt9O3JldHVybiB0LlNpemU9ZS5yZWFkX3NoaWZ0KDQpLGUubCs9dC5TaXplKzMtKHQuU2l6ZS0xKSU0LHR9KGUpO2Nhc2UgODA6cmV0dXJuIGtuKGUsYSwhaS5yYXcpLnJlcGxhY2UoZHIsIiIpO2Nhc2UgODE6cmV0dXJuIGZ1bmN0aW9uIEVsKGUsdCl7aWYoIXQp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJWdFVuYWxpZ25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIEZzKGUsdCwwKX0oZSxhKS5yZXBsYWNlKGRyLCIiKTtjYXNlIDQxMDg6cmV0dXJuIGZ1bmN0aW9uIHlsKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1bXSxh''@;'; put 'put ''PTA7YTx0LzI7KythKXIucHVzaChGbChlKSk7cmV0dXJuIHJ9KGUpO2Nhc2UgNDEyNjpjYXNlIDQxMjc6cmV0dXJuIDQxMjc9PWE/ZnVuY3Rpb24gVGwoZSl7Zm9yKHZhciB0PWUucmVhZF9zaGlmdCg0KSxyPVtdLGE9MDthIT10OysrYSl7dmFyIG49ZS5sO3JbYV09ZS5yZWFkX3NoaWZ0KDAs''@;'; put 'put ''Imxwd3N0ciIpLnJlcGxhY2UoZHIsIiIpLGUubC1uJjImJihlLmwrPTIpfXJldHVybiByfShlKTpmdW5jdGlvbiBTbChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9W10sYT0wO2EhPXQ7KythKXJbYV09ZS5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIikucmVwbGFjZShkciwiIik7cmV0''@;'; put 'put ''dXJuIHJ9KGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIit0KyIgIithKX19ZnVuY3Rpb24gRHMoZSx0KXt2YXIgcj1lLmwsYT1lLnJlYWRfc2hpZnQoNCksbj1lLnJlYWRfc2hpZnQoNCksaT1bXSxzPTAsZj0wLGM9LTEs''@;'; put 'put ''bz17fTtmb3Iocz0wO3MhPW47KytzKXt2YXIgbD1lLnJlYWRfc2hpZnQoNCksaD1lLnJlYWRfc2hpZnQoNCk7aVtzXT1bbCxoK3JdfWkuc29ydChmdW5jdGlvbihULGcpe3JldHVybiBUWzFdLWdbMV19KTt2YXIgeD17fTtmb3Iocz0wO3MhPW47KytzKXtpZihlLmwhPT1pW3NdWzFdKXt2YXIg''@;'; put 'put ''ZD0hMDtpZihzPjAmJnQpc3dpdGNoKHRbaVtzLTFdWzBdXS50KXtjYXNlIDI6ZS5sKzI9PT1pW3NdWzFdJiYoZS5sKz0yLGQ9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OmUubDw9aVtzXVsxXSYmKGUubD1pW3NdWzFdLGQ9ITEpfWlmKCghdHx8MD09cykmJmUubDw9aVtzXVsxXSYmKGQ9''@;'; put 'put ''ITEsZS5sPWlbc11bMV0pLGQpdGhyb3cgbmV3IEVycm9yKCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzICIraVtzXVsxXSsiIGF0ICIrZS5sKyIgOiIrcyl9aWYodCl7dmFyIHY9dFtpW3NdWzBdXTtpZih4W3Yubl09XzAoZSx2LnQse3JhdzohMH0pLCJ2ZXJzaW9uIj09PXYucCYmKHhb''@;'; put 'put ''di5uXT1TdHJpbmcoeFt2Lm5dPj4xNikrIi4iKygiMDAwMCIrU3RyaW5nKDY1NTM1Jnhbdi5uXSkpLnNsaWNlKC00KSksIkNvZGVQYWdlIj09di5uKXN3aXRjaCh4W3Yubl0pe2Nhc2UgMDp4W3Yubl09MTI1MjtjYXNlIDg3NDpjYXNlIDkzMjpjYXNlIDkzNjpjYXNlIDk0OTpjYXNlIDk1MDpj''@;'; put 'put ''YXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2FzZSAxMjU4OmNhc2UgMWU0OmNhc2UgMTIwMDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVlMzpjYXNlLTUzNjpjYXNlIDY1MDAxOmNhc2UtNTM1Ok1yKGY9eFt2''@;'; put 'put ''Lm5dPj4+MCY2NTUzNSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAiK3hbdi5uXSl9fWVsc2UgaWYoMT09PWlbc11bMF0pe2lmKGY9eC5Db2RlUGFnZT1fMChlLGhuKSxNcihmKSwtMSE9PWMpe3ZhciB1PWUubDtlLmw9aVtjXVsxXSxvPXlz''@;'; put 'put ''KGUsZiksZS5sPXV9fWVsc2UgaWYoMD09PWlbc11bMF0pe2lmKDA9PT1mKXtjPXMsZS5sPWlbcysxXVsxXTtjb250aW51ZX1vPXlzKGUsZil9ZWxzZXt2YXIgayxwPW9baVtzXVswXV07c3dpdGNoKGVbZS5sXSl7Y2FzZSA2NTplLmwrPTQsaz1BcyhlKTticmVhaztjYXNlIDMwOmNhc2UgMzE6''@;'; put 'put ''ZS5sKz00LGs9a24oZSxlW2UubC00XSkucmVwbGFjZSgvXHUwMDAwKyQvLCIiKTticmVhaztjYXNlIDM6ZS5sKz00LGs9ZS5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIDE5OmUubCs9NCxrPWUucmVhZF9zaGlmdCg0KTticmVhaztjYXNlIDU6ZS5sKz00LGs9ZS5yZWFkX3NoaWZ0KDgs''@;'; put 'put ''ImYiKTticmVhaztjYXNlIDExOmUubCs9NCxrPUplKGUsNCk7YnJlYWs7Y2FzZSA2NDplLmwrPTQsaz1YZSh3bihlKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucGFyc2VkIHZhbHVlOiAiK2VbZS5sXSl9eFtwXT1rfX1yZXR1cm4gZS5sPXIrYSx4fWZ1bmN0aW9uIFJzKGUs''@;'; put 'put ''dCxyKXt2YXIgYT1lLmNvbnRlbnQ7aWYoIWEpcmV0dXJue307aHIoYSwwKTt2YXIgbixpLHMsZixjPTA7YS5jaGsoImZlZmYiLCJCeXRlIE9yZGVyOiAiKSxhLnJlYWRfc2hpZnQoMik7dmFyIG89YS5yZWFkX3NoaWZ0KDQpLGw9YS5yZWFkX3NoaWZ0KDE2KTtpZihsIT09dmUudXRpbHMuY29u''@;'; put 'put ''c3RzLkhFQURFUl9DTFNJRCYmbCE9PXIpdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitsKTtpZigxIT09KG49YS5yZWFkX3NoaWZ0KDQpKSYmMiE9PW4pdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrbik7aWYoaT1hLnJlYWRfc2hpZnQoMTYp''@;'; put 'put ''LGY9YS5yZWFkX3NoaWZ0KDQpLDE9PT1uJiZmIT09YS5sKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoOiAiK2YrIiAhPT0gIithLmwpOzI9PT1uJiYocz1hLnJlYWRfc2hpZnQoMTYpLGM9YS5yZWFkX3NoaWZ0KDQpKTt2YXIgdixoPURzKGEsdCkseD17U3lzdGVtSWRlbnRpZmll''@;'; put 'put ''cjpvfTtmb3IodmFyIGQgaW4gaCl4W2RdPWhbZF07aWYoeC5GTVRJRD1pLDE9PT1uKXJldHVybiB4O2lmKGMtYS5sPT0yJiYoYS5sKz0yKSxhLmwhPT1jKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrYS5sKyIgIT09ICIrYyk7dHJ5e3Y9RHMoYSxudWxsKX1jYXRjaHt9''@;'; put 'put ''Zm9yKGQgaW4gdil4W2RdPXZbZF07cmV0dXJuIHguRk1USUQ9W2ksc10seH1mdW5jdGlvbiB5dChlLHQpe3JldHVybiBlLnJlYWRfc2hpZnQodCksbnVsbH1mdW5jdGlvbiBKZShlLHQpe3JldHVybiAxPT09ZS5yZWFkX3NoaWZ0KHQpfWZ1bmN0aW9uIHRyKGUpe3JldHVybiBlLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiwidSIpfWZ1bmN0aW9uIGJzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIE9sKGUsdCxyKXtmb3IodmFyIGE9W10sbj1lLmwrdDtlLmw8bjspYS5wdXNoKHIoZSxuLWUubCkpO2lmKG4hPT1lLmwpdGhyb3cgbmV3IEVycm9yKCJTbHVycCBlcnJvciIpO3JldHVybiBhfShlLHQsdHIpfWZ1bmN0''@;'; put 'put ''aW9uIFJhKGUsdCxyKXt2YXIgYT1lLnJlYWRfc2hpZnQociYmci5iaWZmPj0xMj8yOjEpLG49InNiY3MtY29udCIsaT1EcjtyJiZyLmJpZmY+PTgmJihEcj0xMjAwKSxyJiY4IT1yLmJpZmY/MTI9PXIuYmlmZiYmKG49IndzdHIiKTplLnJlYWRfc2hpZnQoMSkmJihuPSJkYmNzLWNvbnQiKSxy''@;'; put 'put ''LmJpZmY+PTImJnIuYmlmZjw9NSYmKG49ImNwc3RyIik7dmFyIGY9YT9lLnJlYWRfc2hpZnQoYSxuKToiIjtyZXR1cm4gRHI9aSxmfWZ1bmN0aW9uIFJsKGUpe3ZhciB0PURyO0RyPTEyMDA7dmFyIGMscj1lLnJlYWRfc2hpZnQoMiksYT1lLnJlYWRfc2hpZnQoMSksbj00JmEsaT04JmEscz0x''@;'; put 'put ''KygxJmEpLGY9MCxvPXt9O2kmJihmPWUucmVhZF9zaGlmdCgyKSksbiYmKGM9ZS5yZWFkX3NoaWZ0KDQpKTt2YXIgaD0wPT09cj8iIjplLnJlYWRfc2hpZnQociwyPT1zPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtyZXR1cm4gaSYmKGUubCs9NCpmKSxuJiYoZS5sKz1jKSxvLnQ9aCxpfHwo''@;'; put 'put ''by5yYXc9Ijx0PiIrby50KyI8L3Q+IixvLnI9by50KSxEcj10LG99ZnVuY3Rpb24gR3QoZSx0LHIpe2lmKHIpe2lmKHIuYmlmZj49MiYmci5iaWZmPD01KXJldHVybiBlLnJlYWRfc2hpZnQodCwiY3BzdHIiKTtpZihyLmJpZmY+PTEyKXJldHVybiBlLnJlYWRfc2hpZnQodCwiZGJjcy1jb250''@;'; put 'put ''Iil9dmFyIG49ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLnJlYWRfc2hpZnQodCwwPT09bj8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rpb24gTmEoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKTtyZXR1cm4gMD09PWE/KGUubCsrLCIiKTpHdChlLGEs''@;'; put 'put ''cil9ZnVuY3Rpb24genQoZSx0LHIpe2lmKHIuYmlmZj41KXJldHVybiBOYShlLDAscik7dmFyIGE9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09YT8oZS5sKyssIiIpOmUucmVhZF9zaGlmdChhLHIuYmlmZjw9NHx8IWUubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiB3MChl''@;'; put 'put ''KXt2YXIgdD1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHQ+MD9lLnJlYWRfc2hpZnQodCwidXRmMTZsZSIpLnJlcGxhY2UoZHIsIiIpOiIifWZ1bmN0aW9uIE1zKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMSksZS5yZWFkX3NoaWZ0KDEpLGUucmVhZF9zaGlmdCgxKSxlLnJlYWRfc2hpZnQoMSld''@;'; put 'put ''fWZ1bmN0aW9uIFVzKGUsdCl7dmFyIHI9TXMoZSk7cmV0dXJuIHJbM109MCxyfWZ1bmN0aW9uIG50KGUpe3JldHVybntyOmUucmVhZF9zaGlmdCgyKSxjOmUucmVhZF9zaGlmdCgyKSxpeGZlOmUucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gVmwoZSx0LHIpe3ZhciBhPXIuYmlmZj44PzQ6Mjty''@;'; put 'put ''ZXR1cm5bZS5yZWFkX3NoaWZ0KGEpLGUucmVhZF9zaGlmdChhLCJpIiksZS5yZWFkX3NoaWZ0KGEsImkiKV19ZnVuY3Rpb24gV3MoZSl7cmV0dXJuW2UucmVhZF9zaGlmdCgyKSx1bihlKV19ZnVuY3Rpb24gazAoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpO3Jl''@;'; put 'put ''dHVybntzOntjOmUucmVhZF9zaGlmdCgyKSxyOnR9LGU6e2M6ZS5yZWFkX3NoaWZ0KDIpLHJ9fX1mdW5jdGlvbiBWcyhlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6ZS5yZWFkX3NoaWZ0KDEpLHI6dH0sZTp7YzplLnJlYWRfc2hpZnQoMSks''@;'; put 'put ''cn19fXZhciBHbD1WcztmdW5jdGlvbiBYcyhlKXtlLmwrPTQ7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTEyLFtyLHQsYV19ZnVuY3Rpb24gX3IoZSl7ZS5sKz0yLGUubCs9ZS5yZWFkX3NoaWZ0KDIpfXZhciBq''@;'; put 'put ''bD17MDpfciw0Ol9yLDU6X3IsNjpfciw3OmZ1bmN0aW9uICRsKGUpe3JldHVybiBlLmwrPTQsZS5jZj1lLnJlYWRfc2hpZnQoMikse319LDg6X3IsOTpfciwxMDpfciwxMTpfciwxMjpfciwxMzpmdW5jdGlvbiB6bChlKXt2YXIgdD17fTtyZXR1cm4gZS5sKz00LGUubCs9MTYsdC5mU2hhcmVk''@;'; put 'put ''Tm90ZT1lLnJlYWRfc2hpZnQoMiksZS5sKz00LHR9LDE0Ol9yLDE1Ol9yLDE2Ol9yLDE3Ol9yLDE4Ol9yLDE5Ol9yLDIwOl9yLDIxOlhzfTtmdW5jdGlvbiBFMChlLHQpe3ZhciByPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKHIuQklGRlZlcj1lLnJlYWRfc2hpZnQoMiksKHQtPTIpPj0yJiYo''@;'; put 'put ''ci5kdD1lLnJlYWRfc2hpZnQoMiksZS5sLT0yKSxyLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZih0PjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIrci5C''@;'; put 'put ''SUZGVmVyKX1yZXR1cm4gZS5yZWFkX3NoaWZ0KHQpLHJ9ZnVuY3Rpb24gR3MoZSx0LHIpe3ZhciBhPTA7ciYmMj09ci5iaWZmfHwoYT1lLnJlYWRfc2hpZnQoMikpO3ZhciBuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gciYmMj09ci5iaWZmJiYoYT0xLShuPj4xNSksbiY9MzI3NjcpLFt7VW5z''@;'; put 'put ''eW5jZWQ6MSZhLER5WmVybzooMiZhKT4+MSxFeEFzYzooNCZhKT4+MixFeERzYzooOCZhKT4+M30sbl19dmFyIHd1PXp0O2Z1bmN0aW9uIHpzKGUsdCxyKXt2YXIgYT1lLmwrdCxuPTghPXIuYmlmZiYmci5iaWZmPzI6NCxpPWUucmVhZF9zaGlmdChuKSxzPWUucmVhZF9zaGlmdChuKSxmPWUu''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxjPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gZS5sPWEse3M6e3I6aSxjOmZ9LGU6e3I6cyxjfX19ZnVuY3Rpb24ganMoZSx0LHIpe3ZhciBhPW50KGUpOygyPT1yLmJpZmZ8fDk9PXQpJiYrK2UubDt2YXIgbj1mdW5jdGlvbiBJbChlKXt2YXIgdD1lLnJlYWRfc2hpZnQo''@;'; put 'put ''MSk7cmV0dXJuIDE9PT1lLnJlYWRfc2hpZnQoMSk/dDoxPT09dH0oZSk7cmV0dXJuIGEudmFsPW4sYS50PSEwPT09bnx8ITE9PT1uPyJiIjoiZSIsYX12YXIgS3M9ZnVuY3Rpb24gSGwoZSx0LHIpe3JldHVybiAwPT09dD8iIjp6dChlLDAscil9O2Z1bmN0aW9uIFlzKGUsdCxyKXt2YXIgbixh''@;'; put 'put ''PWUucmVhZF9zaGlmdCgyKSxpPXtmQnVpbHRJbjoxJmEsZldhbnRBZHZpc2U6YT4+PjEmMSxmV2FudFBpY3Q6YT4+PjImMSxmT2xlOmE+Pj4zJjEsZk9sZUxpbms6YT4+PjQmMSxjZjphPj4+NSYxMDIzLGZJY29uOmE+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1yLnNiY2NoJiYobj1mdW5jdGlv''@;'; put 'put ''biBYbChlLHQscil7ZS5sKz00O3ZhciBhPWUubCsodC09NCksbj1SYShlLDAsciksaT1lLnJlYWRfc2hpZnQoMik7aWYoaSE9PShhLT1lLmwpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIithKyIgIT0gIitpKTtyZXR1cm4gZS5sKz1pLG59KGUsdC0y''@;'; put 'put ''LHIpKSxpLmJvZHk9bnx8ZS5yZWFkX3NoaWZ0KHQtMiksInN0cmluZyI9PXR5cGVvZiBuJiYoaS5OYW1lPW4pLGl9dmFyIE51PVsiX3hsbm0uQ29uc29saWRhdGVfQXJlYSIsIl94bG5tLkF1dG9fT3BlbiIsIl94bG5tLkF1dG9fQ2xvc2UiLCJfeGxubS5FeHRyYWN0IiwiX3hsbm0uRGF0YWJh''@;'; put 'put ''c2UiLCJfeGxubS5Dcml0ZXJpYSIsIl94bG5tLlByaW50X0FyZWEiLCJfeGxubS5QcmludF9UaXRsZXMiLCJfeGxubS5SZWNvcmRlciIsIl94bG5tLkRhdGFfRm9ybSIsIl94bG5tLkF1dG9fQWN0aXZhdGUiLCJfeGxubS5BdXRvX0RlYWN0aXZhdGUiLCJfeGxubS5TaGVldF9UaXRsZSIsIl94''@;'; put 'put ''bG5tLl9GaWx0ZXJEYXRhYmFzZSJdO2Z1bmN0aW9uIEpzKGUsdCxyKXt2YXIgYT1lLmwrdCxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgxKSxzPWUucmVhZF9zaGlmdCgxKSxmPWUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKSxjPTA7KCFyfHxyLmJpZmY+PTUpJiYoNSE9''@;'; put 'put ''ci5iaWZmJiYoZS5sKz0yKSxjPWUucmVhZF9zaGlmdCgyKSw1PT1yLmJpZmYmJihlLmwrPTIpLGUubCs9NCk7dmFyIG89R3QoZSxzLHIpOzMyJm4mJihvPU51W28uY2hhckNvZGVBdCgwKV0pO3ZhciBsPWEtZS5sO3ImJjI9PXIuYmlmZiYmLS1sO3ZhciBoPWEhPWUubCYmMCE9PWYmJmw+MD9m''@;'; put 'put ''dW5jdGlvbiBLZChlLHQscixhKXt2YXIgcyxuPWUubCt0LGk9SGEoZSxhLHIpO3JldHVybiBuIT09ZS5sJiYocz1XYShlLG4tZS5sLGkscikpLFtpLHNdfShlLGwscixmKTpbXTtyZXR1cm57Y2hLZXk6aSxOYW1lOm8saXRhYjpjLHJnY2U6aH19ZnVuY3Rpb24gcXMoZSx0LHIpe2lmKHIuYmlm''@;'; put 'put ''Zjw4KXJldHVybiBmdW5jdGlvbiBidShlLHQscil7Mz09ZVtlLmwrMV0mJmVbZS5sXSsrO3ZhciBhPVJhKGUsMCxyKTtyZXR1cm4gMz09YS5jaGFyQ29kZUF0KDApP2Euc2xpY2UoMSk6YX0oZSwwLHIpO2Zvcih2YXIgYT1bXSxuPWUubCt0LGk9ZS5yZWFkX3NoaWZ0KHIuYmlmZj44PzQ6Mik7''@;'; put 'put ''MCE9aS0tOylhLnB1c2goVmwoZSwwLHIpKTtpZihlLmwhPW4pdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIrZS5sKyIgIT0gIituKTtyZXR1cm4gYX1mdW5jdGlvbiBacyhlLHQscil7dmFyIGE9R2woZSw2KTtzd2l0Y2goci5iaWZmKXtjYXNlIDI6ZS5sKyssdC09NzticmVh''@;'; put 'put ''aztjYXNlIDM6Y2FzZSA0OmUubCs9Mix0LT04O2JyZWFrO2RlZmF1bHQ6ZS5sKz02LHQtPTEyfXJldHVyblthLCRkKGUsdCxyKV19dmFyIFh1PXs4OmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5sK3Q7ZS5sKz0xMDt2YXIgYT1lLnJlYWRfc2hpZnQoMik7ZS5sKz00LGUubCs9MixlLmwrPTIsZS5s''@;'; put 'put ''Kz0yLGUubCs9NDt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUubCs9bixlLmw9cix7Zm10OmF9fX07ZnVuY3Rpb24gUXMoZSx0LHIpe2lmKCFyLmNlbGxTdHlsZXMpcmV0dXJuIHByKGUsdCk7dmFyIGE9ciYmci5iaWZmPj0xMj80OjIsbj1lLnJlYWRfc2hpZnQoYSksaT1lLnJlYWRf''@;'; put 'put ''c2hpZnQoYSkscz1lLnJlYWRfc2hpZnQoYSksZj1lLnJlYWRfc2hpZnQoYSksYz1lLnJlYWRfc2hpZnQoMik7Mj09YSYmKGUubCs9Mik7dmFyIG89e3M6bixlOmksdzpzLGl4ZmU6ZixmbGFnczpjfTtyZXR1cm4oci5iaWZmPj01fHwhci5iaWZmKSYmKG8ubGV2ZWw9Yz4+OCY3KSxvfXZhciBp''@;'; put 'put ''aD1udCxzaD1icyxmaD1OYSxtaD1bMiwzLDQ4LDQ5LDEzMSwxMzksMTQwLDI0NV0sVG49ZnVuY3Rpb24oKXt2YXIgZT17MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUw''@;'; put 'put ''LDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyNyw4Ojg2NSw5OjQzNywxMDo4NTAsMTE6NDM3LDEzOjQzNywxNDo4NTAs''@;'; put 'put ''MTU6NDM3LDE2Ojg1MCwxNzo0MzcsMTg6ODUwLDE5OjkzMiwyMDo4NTAsMjE6NDM3LDIyOjg1MCwyMzo4NjUsMjQ6NDM3LDI1OjQzNywyNjo4NTAsMjc6NDM3LDI4Ojg2MywyOTo4NTAsMzE6ODUyLDM0Ojg1MiwzNTo4NTIsMzY6ODYwLDM3Ojg1MCwzODo4NjYsNTU6ODUwLDY0Ojg1Miw3Nzo5''@;'; put 'put ''MzYsNzg6OTQ5LDc5Ojk1MCw4MDo4NzQsODc6MTI1Miw4ODoxMjUyLDg5OjEyNTIsMTA4Ojg2MywxMzQ6NzM3LDEzNTo4NTIsMTM2Ojg1NywyMDQ6MTI1NywyNTU6MTY5Njl9LHQ9czAoezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEw''@;'; put 'put ''NDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjd9KTtm''@;'; put 'put ''dW5jdGlvbiBhKGYsYyl7dmFyIG89Y3x8e307by5kYXRlTkZ8fChvLmRhdGVORj0ieXl5eW1tZGQiKTt2YXIgbD1zYShmdW5jdGlvbiByKGYsYyl7dmFyIG89W10sbD1fdCgxKTtzd2l0Y2goYy50eXBlKXtjYXNlImJhc2U2NCI6bD1JcihPcihmKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmw9SXIo''@;'; put 'put ''Zik7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOmw9Zn1ocihsLDApO3ZhciBoPWwucmVhZF9zaGlmdCgxKSx4PSEhKDEzNiZoKSxkPSExLHY9ITE7c3dpdGNoKGgpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmQ9''@;'; put 'put ''ITAseD0hMDticmVhaztjYXNlIDE0MDp2PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitoLnRvU3RyaW5nKDE2KSl9dmFyIHU9MCxwPTUyMTsyPT1oJiYodT1sLnJlYWRfc2hpZnQoMikpLGwubCs9MywyIT1oJiYodT1sLnJlYWRf''@;'; put 'put ''c2hpZnQoNCkpLHU+MTA0ODU3NiYmKHU9MWU2KSwyIT1oJiYocD1sLnJlYWRfc2hpZnQoMikpO3ZhciBrPWwucmVhZF9zaGlmdCgyKSxUPWMuY29kZXBhZ2V8fDEyNTI7MiE9aCYmKGwubCs9MTYsbC5yZWFkX3NoaWZ0KDEpLDAhPT1sW2wubF0mJihUPWVbbFtsLmxdXSksbC5sKz0xLGwubCs9''@;'; put 'put ''MiksdiYmKGwubCs9MzYpO2Zvcih2YXIgZz1bXSxOPXt9LE09TWF0aC5taW4obC5sZW5ndGgsMj09aD81MjE6cC0xMC0oZD8yNjQ6MCkpLEk9dj8zMjoxMTtsLmw8TSYmMTMhPWxbbC5sXTspc3dpdGNoKE49e30sTi5uYW1lPU9lLnV0aWxzLmRlY29kZShULGwuc2xpY2UobC5sLGwubCtJKSku''@;'; put 'put ''cmVwbGFjZSgvW1x1MDAwMFxyXG5dLiokL2csIiIpLGwubCs9SSxOLnR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZShsLnJlYWRfc2hpZnQoMSkpLDIhPWgmJiF2JiYoTi5vZmZzZXQ9bC5yZWFkX3NoaWZ0KDQpKSxOLmxlbj1sLnJlYWRfc2hpZnQoMSksMj09aCYmKE4ub2Zmc2V0PWwucmVhZF9z''@;'; put 'put ''aGlmdCgyKSksTi5kZWM9bC5yZWFkX3NoaWZ0KDEpLE4ubmFtZS5sZW5ndGgmJmcucHVzaChOKSwyIT1oJiYobC5sKz12PzEzOjE0KSxOLnR5cGUpe2Nhc2UiQiI6KCFkfHw4IT1OLmxlbikmJmMuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitOLm5hbWUrIjoiK04udHlwZSk7YnJlYWs7''@;'; put 'put ''Y2FzZSJHIjpjYXNlIlAiOmMuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitOLm5hbWUrIjoiK04udHlwZSk7YnJlYWs7Y2FzZSIrIjpjYXNlIjAiOmNhc2UiQCI6Y2FzZSJDIjpjYXNlIkQiOmNhc2UiRiI6Y2FzZSJJIjpjYXNlIkwiOmNhc2UiTSI6Y2FzZSJOIjpjYXNlIk8iOmNhc2Ui''@;'; put 'put ''VCI6Y2FzZSJZIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBGaWVsZCBUeXBlOiAiK04udHlwZSl9aWYoMTMhPT1sW2wubF0mJihsLmw9cC0xKSwxMyE9PWwucmVhZF9zaGlmdCgxKSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBUZXJtaW5hdG9yIG5vdCBmb3VuZCAiK2wu''@;'; put 'put ''bCsiICIrbFtsLmxdKTtsLmw9cDt2YXIgeT0wLFA9MDtmb3Iob1swXT1bXSxQPTA7UCE9Zy5sZW5ndGg7KytQKW9bMF1bUF09Z1tQXS5uYW1lO2Zvcig7dS0tID4wOylpZig0MiE9PWxbbC5sXSlmb3IoKytsLmwsb1srK3ldPVtdLFA9MCxQPTA7UCE9Zy5sZW5ndGg7KytQKXt2YXIgUj1sLnNs''@;'; put 'put ''aWNlKGwubCxsLmwrZ1tQXS5sZW4pO2wubCs9Z1tQXS5sZW4saHIoUiwwKTt2YXIgVj1PZS51dGlscy5kZWNvZGUoVCxSKTtzd2l0Y2goZ1tQXS50eXBlKXtjYXNlIkMiOlYudHJpbSgpLmxlbmd0aCYmKG9beV1bUF09Vi5yZXBsYWNlKC9ccyskLywiIikpO2JyZWFrO2Nhc2UiRCI6b1t5XVtQ''@;'; put 'put ''XT04PT09Vi5sZW5ndGg/bmV3IERhdGUoK1Yuc2xpY2UoMCw0KSwrVi5zbGljZSg0LDYpLTEsK1Yuc2xpY2UoNiw4KSk6VjticmVhaztjYXNlIkYiOm9beV1bUF09cGFyc2VGbG9hdChWLnRyaW0oKSk7YnJlYWs7Y2FzZSIrIjpjYXNlIkkiOm9beV1bUF09dj8yMTQ3NDgzNjQ4XlIucmVhZF9z''@;'; put 'put ''aGlmdCgtNCwiaSIpOlIucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSJMIjpzd2l0Y2goVi50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZIjpjYXNlIlQiOm9beV1bUF09ITA7YnJlYWs7Y2FzZSJOIjpjYXNlIkYiOm9beV1bUF09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8IitWKyJ8Iil9YnJlYWs7Y2FzZSJNIjppZigheCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgIitoLnRvU3RyaW5nKDE2KSk7b1t5XVtQXT0iIyNNRU1PIyMiKyh2P3BhcnNl''@;'; put 'put ''SW50KFYudHJpbSgpLDEwKTpSLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiTiI6KFY9Vi5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT1WJiYob1t5XVtQXT0rVnx8MCk7YnJlYWs7Y2FzZSJAIjpvW3ldW1BdPW5ldyBEYXRlKFIucmVhZF9zaGlmdCgtOCwiZiIpLTYyMTM1''@;'; put 'put ''NjgzMmU1KTticmVhaztjYXNlIlQiOm9beV1bUF09bmV3IERhdGUoODY0ZTUqKFIucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStSLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiWSI6b1t5XVtQXT1SLnJlYWRfc2hpZnQoNCwiaSIpLzFlNCtSLnJlYWRfc2hpZnQoNCwiaSIpLzFlNCpNYXRoLnBv''@;'; put 'put ''dygyLDMyKTticmVhaztjYXNlIk8iOm9beV1bUF09LVIucmVhZF9zaGlmdCgtOCwiZiIpO2JyZWFrO2Nhc2UiQiI6aWYoZCYmOD09Z1tQXS5sZW4pe29beV1bUF09Ui5yZWFkX3NoaWZ0KDgsImYiKTticmVha31jYXNlIkciOmNhc2UiUCI6Ui5sKz1nW1BdLmxlbjticmVhaztjYXNlIjAiOmlm''@;'; put 'put ''KCJfTnVsbEZsYWdzIj09PWdbUF0ubmFtZSlicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAiK2dbUF0udHlwZSl9fWVsc2UgbC5sKz1rO2lmKDIhPWgmJmwubDxsLmxlbmd0aCYmMjYhPWxbbC5sKytdKXRocm93IG5ldyBFcnJvcigiREJG''@;'; put 'put ''IEVPRiBNYXJrZXIgbWlzc2luZyAiKyhsLmwtMSkrIiBvZiAiK2wubGVuZ3RoKyIgIitsW2wubC0xXS50b1N0cmluZygxNikpO3JldHVybiBjJiZjLnNoZWV0Um93cyYmKG89by5zbGljZSgwLGMuc2hlZXRSb3dzKSksYy5EQkY9ZyxvfShmLG8pLG8pO3JldHVybiBsWyIhY29scyJdPW8uREJG''@;'; put 'put ''Lm1hcChmdW5jdGlvbihoKXtyZXR1cm57d2NoOmgubGVuLERCRjpofX0pLGRlbGV0ZSBvLkRCRixsfXZhciBpPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gbihmLGMpe3RyeXtyZXR1cm4gRnQoYShmLGMpLGMpfWNhdGNoKG8pe2lm''@;'; put 'put ''KGMmJmMuV1RGKXRocm93IG99cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sdG9fc2hlZXQ6YSxmcm9tX3NoZWV0OmZ1bmN0aW9uIHMoZixjKXt2YXIgbz1jfHx7fTtpZigrby5jb2RlcGFnZT49MCYmTXIoK28uY29kZXBhZ2UpLCJzdHJpbmciPT1vLnR5cGUpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBsPVNyKCksaD1mdW5jdGlvbiBOMChlLHQpe2lmKG51bGw9PWV8fG51bGw9PWVbIiFyZWYiXSlyZXR1cm5bXTt2YXIgcj17dDoibiIsdjowfSxhPTAsbj0xLGk9W10scz0wLGY9IiIsYz17czp7cjowLGM6MH0sZTp7cjow''@;'; put 'put ''LGM6MH19LG89dHx8e30sbD1udWxsIT1vLnJhbmdlP28ucmFuZ2U6ZVsiIXJlZiJdO3N3aXRjaCgxPT09by5oZWFkZXI/YT0xOiJBIj09PW8uaGVhZGVyP2E9MjpBcnJheS5pc0FycmF5KG8uaGVhZGVyKT9hPTM6bnVsbD09by5oZWFkZXImJihhPTApLHR5cGVvZiBsKXtjYXNlInN0cmluZyI6''@;'; put 'put ''Yz1EZShsKTticmVhaztjYXNlIm51bWJlciI6KGM9RGUoZVsiIXJlZiJdKSkucy5yPWw7YnJlYWs7ZGVmYXVsdDpjPWx9YT4wJiYobj0wKTt2YXIgaD1LZShjLnMucikseD1bXSxkPVtdLHY9MCx1PTAscD1BcnJheS5pc0FycmF5KGUpLGs9Yy5zLnIsVD0wLGc9e307cCYmIWVba10mJihlW2td''@;'; put 'put ''PVtdKTt2YXIgTj1vLnNraXBIaWRkZW4mJmVbIiFjb2xzIl18fFtdLE09by5za2lwSGlkZGVuJiZlWyIhcm93cyJdfHxbXTtmb3IoVD1jLnMuYztUPD1jLmUuYzsrK1QpaWYoIShOW1RdfHx7fSkuaGlkZGVuKXN3aXRjaCh4W1RdPUhlKFQpLHI9cD9lW2tdW1RdOmVbeFtUXStoXSxhKXtjYXNl''@;'; put 'put ''IDE6aVtUXT1ULWMucy5jO2JyZWFrO2Nhc2UgMjppW1RdPXhbVF07YnJlYWs7Y2FzZSAzOmlbVF09by5oZWFkZXJbVC1jLnMuY107YnJlYWs7ZGVmYXVsdDppZihudWxsPT1yJiYocj17dzoiX19FTVBUWSIsdDoicyJ9KSxmPXM9YXQocixudWxsLG8pLHU9Z1tzXXx8MCl7ZG97Zj1zKyJfIit1''@;'; put 'put ''Kyt9d2hpbGUoZ1tmXSk7Z1tzXT11LGdbZl09MX1lbHNlIGdbc109MTtpW1RdPWZ9Zm9yKGs9Yy5zLnIrbjtrPD1jLmUucjsrK2spaWYoIShNW2tdfHx7fSkuaGlkZGVuKXt2YXIgST1fYyhlLGMsayx4LGEsaSxwLG8pOyghMT09PUkuaXNlbXB0eXx8KDE9PT1hPyExIT09by5ibGFua3Jvd3M6''@;'; put 'put ''by5ibGFua3Jvd3MpKSYmKGRbdisrXT1JLnJvdyl9cmV0dXJuIGQubGVuZ3RoPXYsZH0oZix7aGVhZGVyOjEscmF3OiEwLGNlbGxEYXRlczohMH0pLHg9aFswXSxkPWguc2xpY2UoMSksdj1mWyIhY29scyJdfHxbXSx1PTAscD0wLGs9MCxUPTE7Zm9yKHU9MDt1PHgubGVuZ3RoOysrdSlpZigo''@;'; put 'put ''KHZbdV18fHt9KS5EQkZ8fHt9KS5uYW1lKXhbdV09dlt1XS5EQkYubmFtZSwrK2s7ZWxzZSBpZihudWxsIT14W3VdKXtpZigrK2ssIm51bWJlciI9PXR5cGVvZiB4W3VdJiYoeFt1XT14W3VdLnRvU3RyaW5nKDEwKSksInN0cmluZyIhPXR5cGVvZiB4W3VdKXRocm93IG5ldyBFcnJvcigiREJG''@;'; put 'put ''IEludmFsaWQgY29sdW1uIG5hbWUgIit4W3VdKyIgfCIrdHlwZW9mIHhbdV0rInwiKTtpZih4LmluZGV4T2YoeFt1XSkhPT11KWZvcihwPTA7cDwxMDI0OysrcClpZigtMT09eC5pbmRleE9mKHhbdV0rIl8iK3ApKXt4W3VdKz0iXyIrcDticmVha319dmFyIGc9RGUoZlsiIXJlZiJdKSxOPVtd''@;'; put 'put ''LE09W10sST1bXTtmb3IodT0wO3U8PWcuZS5jLWcucy5jOysrdSl7dmFyIHk9IiIsUD0iIixSPTAsVj1bXTtmb3IocD0wO3A8ZC5sZW5ndGg7KytwKW51bGwhPWRbcF1bdV0mJlYucHVzaChkW3BdW3VdKTtpZigwIT1WLmxlbmd0aCYmbnVsbCE9eFt1XSl7Zm9yKHA9MDtwPFYubGVuZ3RoOysr''@;'; put 'put ''cCl7c3dpdGNoKHR5cGVvZiBWW3BdKXtjYXNlIm51bWJlciI6UD0iQiI7YnJlYWs7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6UD0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjpQPSJMIjticmVhaztjYXNlIm9iamVjdCI6UD1WW3BdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9Uj1NYXRoLm1heChSLFN0''@;'; put 'put ''cmluZyhWW3BdKS5sZW5ndGgpLHk9eSYmeSE9UD8iQyI6UH1SPjI1MCYmKFI9MjUwKSwiQyI9PShQPSgodlt1XXx8e30pLkRCRnx8e30pLnR5cGUpJiZ2W3VdLkRCRi5sZW4+UiYmKFI9dlt1XS5EQkYubGVuKSwiQiI9PXkmJiJOIj09UCYmKHk9Ik4iLElbdV09dlt1XS5EQkYuZGVjLFI9dlt1''@;'; put 'put ''XS5EQkYubGVuKSxNW3VdPSJDIj09eXx8Ik4iPT1QP1I6aVt5XXx8MCxUKz1NW3VdLE5bdV09eX1lbHNlIE5bdV09Ij8ifXZhciBYPWwubmV4dCgzMik7Zm9yKFgud3JpdGVfc2hpZnQoNCwzMTg5MDI1NzYpLFgud3JpdGVfc2hpZnQoNCxkLmxlbmd0aCksWC53cml0ZV9zaGlmdCgyLDI5Nisz''@;'; put 'put ''MiprKSxYLndyaXRlX3NoaWZ0KDIsVCksdT0wO3U8NDsrK3UpWC53cml0ZV9zaGlmdCg0LDApO2ZvcihYLndyaXRlX3NoaWZ0KDQsKCt0W1J0XXx8Myk8PDgpLHU9MCxwPTA7dTx4Lmxlbmd0aDsrK3UpaWYobnVsbCE9eFt1XSl7dmFyIGI9bC5uZXh0KDMyKSxlZT0oeFt1XS5zbGljZSgtMTAp''@;'; put 'put ''KyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2UoMCwxMSk7Yi53cml0ZV9zaGlmdCgxLGVlLCJzYmNzIiksYi53cml0ZV9zaGlmdCgxLCI/Ij09Tlt1XT8iQyI6Tlt1XSwic2JjcyIpLGIud3JpdGVfc2hpZnQoNCxwKSxiLndyaXRlX3NoaWZ0KDEsTVt1XXx8aVtOW3VdXXx8MCksYi53''@;'; put 'put ''cml0ZV9zaGlmdCgxLElbdV18fDApLGIud3JpdGVfc2hpZnQoMSwyKSxiLndyaXRlX3NoaWZ0KDQsMCksYi53cml0ZV9zaGlmdCgxLDApLGIud3JpdGVfc2hpZnQoNCwwKSxiLndyaXRlX3NoaWZ0KDQsMCkscCs9TVt1XXx8aVtOW3VdXXx8MH12YXIgbGU9bC5uZXh0KDI2NCk7Zm9yKGxlLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsMTMpLHU9MDt1PDY1OysrdSlsZS53cml0ZV9zaGlmdCg0LDApO2Zvcih1PTA7dTxkLmxlbmd0aDsrK3Upe3ZhciByZT1sLm5leHQoVCk7Zm9yKHJlLndyaXRlX3NoaWZ0KDEsMCkscD0wO3A8eC5sZW5ndGg7KytwKWlmKG51bGwhPXhbcF0pc3dpdGNoKE5bcF0pe2Nhc2Ui''@;'; put 'put ''TCI6cmUud3JpdGVfc2hpZnQoMSxudWxsPT1kW3VdW3BdPzYzOmRbdV1bcF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6cmUud3JpdGVfc2hpZnQoOCxkW3VdW3BdfHwwLCJmIik7YnJlYWs7Y2FzZSJOIjp2YXIgZGU9IjAiO2ZvcigibnVtYmVyIj09dHlwZW9mIGRbdV1bcF0mJihkZT1kW3VdW3Bd''@;'; put 'put ''LnRvRml4ZWQoSVtwXXx8MCkpLGs9MDtrPE1bcF0tZGUubGVuZ3RoOysraylyZS53cml0ZV9zaGlmdCgxLDMyKTtyZS53cml0ZV9zaGlmdCgxLGRlLCJzYmNzIik7YnJlYWs7Y2FzZSJEIjpkW3VdW3BdPyhyZS53cml0ZV9zaGlmdCg0LCgiMDAwMCIrZFt1XVtwXS5nZXRGdWxsWWVhcigpKS5z''@;'; put 'put ''bGljZSgtNCksInNiY3MiKSxyZS53cml0ZV9zaGlmdCgyLCgiMDAiKyhkW3VdW3BdLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSwic2JjcyIpLHJlLndyaXRlX3NoaWZ0KDIsKCIwMCIrZFt1XVtwXS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2JjcyIpKTpyZS53cml0ZV9zaGlmdCg4LCIwMDAw''@;'; put 'put ''MDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciB1ZT1TdHJpbmcobnVsbCE9ZFt1XVtwXT9kW3VdW3BdOiIiKS5zbGljZSgwLE1bcF0pO2ZvcihyZS53cml0ZV9zaGlmdCgxLHVlLCJzYmNzIiksaz0wO2s8TVtwXS11ZS5sZW5ndGg7KytrKXJlLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1''@;'; put 'put ''cm4gbC5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLGwuZW5kKCl9fX0oKSxlZj1mdW5jdGlvbigpe3ZhciBlPXtBQToiXHhjMCIsQkE6Ilx4YzEiLENBOiJceGMyIixEQToxOTUsSEE6Ilx4YzQiLEpBOjE5NyxBRToiXHhjOCIsQkU6Ilx4YzkiLENFOiJceGNhIixIRToiXHhjYiIsQUk6Ilx4''@;'; put 'put ''Y2MiLEJJOiJceGNkIixDSToiXHhjZSIsSEk6Ilx4Y2YiLEFPOiJceGQyIixCTzoiXHhkMyIsQ086Ilx4ZDQiLERPOjIxMyxITzoiXHhkNiIsQVU6Ilx4ZDkiLEJVOiJceGRhIixDVToiXHhkYiIsSFU6Ilx4ZGMiLEFhOiJceGUwIixCYToiXHhlMSIsQ2E6Ilx4ZTIiLERhOjIyNyxIYToiXHhl''@;'; put 'put ''NCIsSmE6MjI5LEFlOiJceGU4IixCZToiXHhlOSIsQ2U6Ilx4ZWEiLEhlOiJceGViIixBaToiXHhlYyIsQmk6Ilx4ZWQiLENpOiJceGVlIixIaToiXHhlZiIsQW86Ilx4ZjIiLEJvOiJceGYzIixDbzoiXHhmNCIsRG86MjQ1LEhvOiJceGY2IixBdToiXHhmOSIsQnU6Ilx4ZmEiLEN1OiJceGZi''@;'; put 'put ''IixIdToiXHhmYyIsS0M6Ilx4YzciLEtjOiJceGU3IixxOiJceGU2Iix6OiJcdTAxNTMiLGE6Ilx4YzYiLGo6Ilx1MDE1MiIsRE46MjA5LERuOjI0MSxIeToyNTUsUzoxNjksYzoxNzAsUjoxNzQsIkIgIjoxODAsMDoxNzYsMToxNzcsMjoxNzgsMzoxNzksNToxODEsNjoxODIsNzoxODMsUTox''@;'; put 'put ''ODUsazoxODYsYjoyMDgsaToyMTYsbDoyMjIsczoyNDAseToyNDgsIiEiOjE2MSwnIic6MTYyLCIjIjoxNjMsIigiOjE2NCwiJSI6MTY1LCInIjoxNjcsIkggIjoxNjgsIisiOjE3MSwiOyI6MTg3LCI8IjoxODgsIj0iOjE4OSwiPiI6MTkwLCI/IjoxOTEsInsiOjIyM30sdD1uZXcgUmVnRXhw''@;'; put 'put ''KCJceDFiTigiKyRlKGUpLmpvaW4oInwiKS5yZXBsYWNlKC9cfFx8XHwvLCJ8XFx8fCIpLnJlcGxhY2UoLyhbPygpK10pL2csIlxcJDEiKSsifFxcfCkiLCJnbSIpLHI9ZnVuY3Rpb24oeCxkKXt2YXIgdj1lW2RdO3JldHVybiJudW1iZXIiPT10eXBlb2Ygdj9CMCh2KTp2fSxhPWZ1bmN0aW9u''@;'; put 'put ''KHgsZCx2KXt2YXIgdT1kLmNoYXJDb2RlQXQoMCktMzI8PDR8di5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiA1OT09dT94OkIwKHUpfTtmdW5jdGlvbiBpKHgsZCl7dmFyIFgsdj14LnNwbGl0KC9bXG5ccl0rLyksdT0tMSxwPS0xLGs9MCxUPTAsZz1bXSxOPVtdLE09bnVsbCxJPXt9LHk9W10s''@;'; put 'put ''UD1bXSxSPVtdLFY9MDtmb3IoK2QuY29kZXBhZ2U+PTAmJk1yKCtkLmNvZGVwYWdlKTtrIT09di5sZW5ndGg7KytrKXtWPTA7dmFyIHJlLGI9dltrXS50cmltKCkucmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAtXHgzRl0pL2csYSkucmVwbGFjZSh0LHIpLGVlPWIucmVwbGFjZSgv''@;'; put 'put ''OzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5yZXBsYWNlKC9cdTAwMDAvZywiOyIpfSk7aWYoYi5sZW5ndGg+MClzd2l0Y2goZWVbMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2FzZSJQIjoiUCI9PWVlWzFd''@;'; put 'put ''LmNoYXJBdCgwKSYmTi5wdXNoKGIuc2xpY2UoMykucmVwbGFjZSgvOzsvZywiOyIpKTticmVhaztjYXNlIkMiOnZhciBkZT0hMSx1ZT0hMSxGZT0hMSxjZT0hMSx4ZT0tMSxLPS0xO2ZvcihUPTE7VDxlZS5sZW5ndGg7KytUKXN3aXRjaChlZVtUXS5jaGFyQXQoMCkpe2Nhc2UiQSI6Y2FzZSJH''@;'; put 'put ''IjpicmVhaztjYXNlIlgiOnA9cGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpLTEsdWU9ITA7YnJlYWs7Y2FzZSJZIjpmb3IodT1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMSx1ZXx8KHA9MCksWD1nLmxlbmd0aDtYPD11OysrWClnW1hdPVtdO2JyZWFrO2Nhc2UiSyI6JyInPT09KHJlPWVlW1Rd''@;'; put 'put ''LnNsaWNlKDEpKS5jaGFyQXQoMCk/cmU9cmUuc2xpY2UoMSxyZS5sZW5ndGgtMSk6IlRSVUUiPT09cmU/cmU9ITA6IkZBTFNFIj09PXJlP3JlPSExOmlzTmFOKEpyKHJlKSk/aXNOYU4oYWEocmUpLmdldERhdGUoKSl8fChyZT1YZShyZSkpOihyZT1KcihyZSksbnVsbCE9PU0mJmJ0KE0pJiYo''@;'; put 'put ''cmU9bzAocmUpKSksdHlwZW9mIE9lPCJ1IiYmInN0cmluZyI9PXR5cGVvZiByZSYmInN0cmluZyIhPShkfHx7fSkudHlwZSYmKGR8fHt9KS5jb2RlcGFnZSYmKHJlPU9lLnV0aWxzLmRlY29kZShkLmNvZGVwYWdlLHJlKSksZGU9ITA7YnJlYWs7Y2FzZSJFIjpjZT0hMDt2YXIgQz11YShlZVtU''@;'; put 'put ''XS5zbGljZSgxKSx7cjp1LGM6cH0pO2dbdV1bcF09W2dbdV1bcF0sQ107YnJlYWs7Y2FzZSJTIjpGZT0hMCxnW3VdW3BdPVtnW3VdW3BdLCJTNVMiXTticmVhaztjYXNlIlIiOnhlPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xO2JyZWFrO2Nhc2UiQyI6Sz1wYXJzZUludChlZVtUXS5zbGlj''@;'; put 'put ''ZSgxKSktMTticmVhaztkZWZhdWx0OmlmKGQmJmQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYil9aWYoZGUmJihnW3VdW3BdJiYyPT1nW3VdW3BdLmxlbmd0aD9nW3VdW3BdWzBdPXJlOmdbdV1bcF09cmUsTT1udWxsKSxGZSl7aWYoY2UpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIFU9eGU+LTEmJmdbeGVdW0tdO2lmKCFVfHwhVVsxXSl0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGZpbmQgYmFzZSIpO2dbdV1bcF1bMV09a2YoVVsxXSx7cjp1LXhl''@;'; put 'put ''LGM6cC1LfSl9YnJlYWs7Y2FzZSJGIjp2YXIgTz0wO2ZvcihUPTE7VDxlZS5sZW5ndGg7KytUKXN3aXRjaChlZVtUXS5jaGFyQXQoMCkpe2Nhc2UiWCI6cD1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMSwrK087YnJlYWs7Y2FzZSJZIjpmb3IodT1wYXJzZUludChlZVtUXS5zbGljZSgxKSkt''@;'; put 'put ''MSxYPWcubGVuZ3RoO1g8PXU7KytYKWdbWF09W107YnJlYWs7Y2FzZSJNIjpWPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS8yMDticmVhaztjYXNlIkYiOmNhc2UiRyI6Y2FzZSJTIjpjYXNlIkQiOmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjpNPU5bcGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpXTti''@;'; put 'put ''cmVhaztjYXNlIlciOmZvcihSPWVlW1RdLnNsaWNlKDEpLnNwbGl0KCIgIiksWD1wYXJzZUludChSWzBdLDEwKTtYPD1wYXJzZUludChSWzFdLDEwKTsrK1gpVj1wYXJzZUludChSWzJdLDEwKSxQW1gtMV09MD09PVY/e2hpZGRlbjohMH06e3djaDpWfSxLdChQW1gtMV0pO2JyZWFrO2Nhc2Ui''@;'; put 'put ''QyI6UFtwPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xXXx8KFBbcF09e30pO2JyZWFrO2Nhc2UiUiI6eVt1PXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xXXx8KHlbdV09e30pLFY+MD8oeVt1XS5ocHQ9Vix5W3VdLmhweD1vYShWKSk6MD09PVYmJih5W3VdLmhpZGRlbj0hMCk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDppZihkJiZkLldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2IpfU88MSYmKE09bnVsbCk7YnJlYWs7ZGVmYXVsdDppZihkJiZkLldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2IpfX1yZXR1cm4geS5sZW5ndGg+MCYmKElbIiFyb3dz''@;'; put 'put ''Il09eSksUC5sZW5ndGg+MCYmKElbIiFjb2xzIl09UCksZCYmZC5zaGVldFJvd3MmJihnPWcuc2xpY2UoMCxkLnNoZWV0Um93cykpLFtnLEldfWZ1bmN0aW9uIHMoeCxkKXt2YXIgdj1mdW5jdGlvbiBuKHgsZCl7c3dpdGNoKGQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBpKE9yKHgpLGQp''@;'; put 'put ''O2Nhc2UiYmluYXJ5IjpyZXR1cm4gaSh4LGQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gaShTZSYmQnVmZmVyLmlzQnVmZmVyKHgpP3gudG9TdHJpbmcoImJpbmFyeSIpOnd0KHgpLGQpO2Nhc2UiYXJyYXkiOnJldHVybiBpKFB0KHgpLGQpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5''@;'; put 'put ''cGUgIitkLnR5cGUpfSh4LGQpLHA9dlsxXSxrPXNhKHZbMF0sZCk7cmV0dXJuICRlKHApLmZvckVhY2goZnVuY3Rpb24oVCl7a1tUXT1wW1RdfSksa31mdW5jdGlvbiBjKHgsZCx2LHUpe3ZhciBwPSJDO1kiKyh2KzEpKyI7WCIrKHUrMSkrIjtLIjtzd2l0Y2goeC50KXtjYXNlIm4iOnArPXgu''@;'; put 'put ''dnx8MCx4LmYmJiF4LkYmJihwKz0iO0UiK0luKHguZix7cjp2LGM6dX0pKTticmVhaztjYXNlImIiOnArPXgudj8iVFJVRSI6IkZBTFNFIjticmVhaztjYXNlImUiOnArPXgud3x8eC52O2JyZWFrO2Nhc2UiZCI6cCs9JyInKyh4Lnd8fHgudikrJyInO2JyZWFrO2Nhc2UicyI6cCs9JyInK3gu''@;'; put 'put ''di5yZXBsYWNlKC8iL2csIiIpLnJlcGxhY2UoLzsvZywiOzsiKSsnIid9cmV0dXJuIHB9cmV0dXJuIGVbInwiXT0yNTQse3RvX3dvcmtib29rOmZ1bmN0aW9uIGYoeCxkKXtyZXR1cm4gRnQocyh4LGQpLGQpfSx0b19zaGVldDpzLGZyb21fc2hlZXQ6ZnVuY3Rpb24gaCh4LGQpe3ZhciBrLHY9''@;'; put 'put ''WyJJRDtQV1hMO047RSJdLHU9W10scD1EZSh4WyIhcmVmIl0pLFQ9QXJyYXkuaXNBcnJheSh4KSxnPSJcclxuIjt2LnB1c2goIlA7UEdlbmVyYWwiKSx2LnB1c2goIkY7UDA7REcwRzg7TTI1NSIpLHhbIiFjb2xzIl0mJmZ1bmN0aW9uIG8oeCxkKXtkLmZvckVhY2goZnVuY3Rpb24odix1KXt2''@;'; put 'put ''YXIgcD0iRjtXIisodSsxKSsiICIrKHUrMSkrIiAiO3YuaGlkZGVuP3ArPSIwIjooIm51bWJlciI9PXR5cGVvZiB2LndpZHRoJiYhdi53cHgmJih2LndweD1QYSh2LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiB2LndweCYmIXYud2NoJiYodi53Y2g9TGEodi53cHgpKSwibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIHYud2NoJiYocCs9TWF0aC5yb3VuZCh2LndjaCkpKSwiICIhPXAuY2hhckF0KHAubGVuZ3RoLTEpJiZ4LnB1c2gocCl9KX0odix4WyIhY29scyJdKSx4WyIhcm93cyJdJiZmdW5jdGlvbiBsKHgsZCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKHYsdSl7dmFyIHA9IkY7Ijt2LmhpZGRlbj9wKz0i''@;'; put 'put ''TTA7Ijp2LmhwdD9wKz0iTSIrMjAqdi5ocHQrIjsiOnYuaHB4JiYocCs9Ik0iKzIwKkJhKHYuaHB4KSsiOyIpLHAubGVuZ3RoPjImJngucHVzaChwKyJSIisodSsxKSl9KX0odix4WyIhcm93cyJdKSx2LnB1c2goIkI7WSIrKHAuZS5yLXAucy5yKzEpKyI7WCIrKHAuZS5jLXAucy5jKzEpKyI7''@;'; put 'put ''RCIrW3Aucy5jLHAucy5yLHAuZS5jLHAuZS5yXS5qb2luKCIgIikpO2Zvcih2YXIgTj1wLnMucjtOPD1wLmUucjsrK04pZm9yKHZhciBNPXAucy5jO008PXAuZS5jOysrTSl7dmFyIEk9Z2Uoe3I6TixjOk19KTsoaz1UPyh4W05dfHxbXSlbTV06eFtJXSkmJihudWxsIT1rLnZ8fGsuZiYmIWsu''@;'; put 'put ''RikmJnUucHVzaChjKGssMCxOLE0pKX1yZXR1cm4gdi5qb2luKGcpK2crdS5qb2luKGcpK2crIkUiK2d9fX0oKSxyZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxzKXtmb3IodmFyIGY9aS5zcGxpdCgiXG4iKSxjPS0xLG89LTEsbD0wLGg9W107bCE9PWYubGVuZ3RoOysrbClpZigiQk9UIiE9''@;'; put 'put ''PWZbbF0udHJpbSgpKXtpZighKGM8MCkpe2Zvcih2YXIgeD1mW2xdLnRyaW0oKS5zcGxpdCgiLCIpLGQ9eFswXSx2PXhbMV0sdT1mWysrbF18fCIiOzEmKHUubWF0Y2goL1siXS9nKXx8W10pLmxlbmd0aCYmbDxmLmxlbmd0aC0xOyl1Kz0iXG4iK2ZbKytsXTtzd2l0Y2godT11LnRyaW0oKSwr''@;'; put 'put ''ZCl7Y2FzZS0xOmlmKCJCT1QiPT09dSl7aFsrK2NdPVtdLG89MDtjb250aW51ZX1pZigiRU9EIiE9PXUpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK3UpO2JyZWFrO2Nhc2UgMDpoW2NdW29dPSJUUlVFIj09PXV8fCJGQUxTRSIhPT11JiYoaXNO''@;'; put 'put ''YU4oSnIodikpP2lzTmFOKGFhKHYpLmdldERhdGUoKSk/djpYZSh2KTpKcih2KSksKytvO2JyZWFrO2Nhc2UgMToodT0odT11LnNsaWNlKDEsdS5sZW5ndGgtMSkpLnJlcGxhY2UoLyIiL2csJyInKSkmJnUubWF0Y2goL149Ii4qIiQvKSYmKHU9dS5zbGljZSgyLC0xKSksaFtjXVtvKytdPSIi''@;'; put 'put ''IT09dT91Om51bGx9aWYoIkVPRCI9PT11KWJyZWFrfX1lbHNlIGhbKytjXT1bXSxvPTA7cmV0dXJuIHMmJnMuc2hlZXRSb3dzJiYoaD1oLnNsaWNlKDAscy5zaGVldFJvd3MpKSxofWZ1bmN0aW9uIHIoaSxzKXtyZXR1cm4gc2EoZnVuY3Rpb24gZShpLHMpe3N3aXRjaChzLnR5cGUpe2Nhc2Ui''@;'; put 'put ''YmFzZTY0IjpyZXR1cm4gdChPcihpKSxzKTtjYXNlImJpbmFyeSI6cmV0dXJuIHQoaSxzKTtjYXNlImJ1ZmZlciI6cmV0dXJuIHQoU2UmJkJ1ZmZlci5pc0J1ZmZlcihpKT9pLnRvU3RyaW5nKCJiaW5hcnkiKTp3dChpKSxzKTtjYXNlImFycmF5IjpyZXR1cm4gdChQdChpKSxzKX10aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrcy50eXBlKX0oaSxzKSxzKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gYShpLHMpe3JldHVybiBGdChyKGkscykscyl9LHRvX3NoZWV0OnIsZnJvbV9zaGVldDpmdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKGMsbyxsLGgseCl7Yy5w''@;'; put 'put ''dXNoKG8pLGMucHVzaChsKyIsIitoKSxjLnB1c2goJyInK3gucmVwbGFjZSgvIi9nLCciIicpKyciJyl9LHM9ZnVuY3Rpb24oYyxvLGwsaCl7Yy5wdXNoKG8rIiwiK2wpLGMucHVzaCgxPT1vPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aCl9O3JldHVybiBmdW5jdGlvbihjKXt2YXIg''@;'; put 'put ''aCxvPVtdLGw9RGUoY1siIXJlZiJdKSx4PUFycmF5LmlzQXJyYXkoYyk7aShvLCJUQUJMRSIsMCwxLCJzaGVldGpzIiksaShvLCJWRUNUT1JTIiwwLGwuZS5yLWwucy5yKzEsIiIpLGkobywiVFVQTEVTIiwwLGwuZS5jLWwucy5jKzEsIiIpLGkobywiREFUQSIsMCwwLCIiKTtmb3IodmFyIGQ9''@;'; put 'put ''bC5zLnI7ZDw9bC5lLnI7KytkKXtzKG8sLTEsMCwiQk9UIik7Zm9yKHZhciB2PWwucy5jO3Y8PWwuZS5jOysrdil7dmFyIHU9Z2Uoe3I6ZCxjOnZ9KTtpZihoPXg/KGNbZF18fFtdKVt2XTpjW3VdKXN3aXRjaChoLnQpe2Nhc2UibiI6dmFyIHA9aC53OyFwJiZudWxsIT1oLnYmJihwPWgudiks''@;'; put 'put ''bnVsbD09cD9zKG8sMSwwLGguZiYmIWguRj8iPSIraC5mOiIiKTpzKG8sMCxwLCJWIik7YnJlYWs7Y2FzZSJiIjpzKG8sMCxoLnY/MTowLGgudj8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJzIjpzKG8sMSwwLGlzTmFOKGgudik/aC52Oic9IicraC52KyciJyk7YnJlYWs7Y2FzZSJkIjpo''@;'; put 'put ''Lnd8fChoLnc9UnIoaC56fHxwZVsxNF0saXIoWGUoaC52KSkpKSxzKG8sMCxoLncsIlYiKTticmVhaztkZWZhdWx0OnMobywxLDAsIiIpfWVsc2UgcyhvLDEsMCwiIil9fXJldHVybiBzKG8sLTEsMCwiRU9EIiksby5qb2luKCJcclxuIil9fSgpfX0oKSx0Zj1mdW5jdGlvbigpe2Z1bmN0aW9u''@;'; put 'put ''IGUoaCl7cmV0dXJuIGgucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlvbiB0KGgpe3JldHVybiBoLnJlcGxhY2UoL1xcL2csIlxcYiIpLnJlcGxhY2UoLzovZywiXFxjIikucmVwbGFjZSgvXG4vZywiXFxuIil9ZnVu''@;'; put 'put ''Y3Rpb24gYShoLHgpe3JldHVybiBzYShmdW5jdGlvbiByKGgseCl7Zm9yKHZhciBkPWguc3BsaXQoIlxuIiksdj0tMSx1PS0xLHA9MCxrPVtdO3AhPT1kLmxlbmd0aDsrK3Ape3ZhciBUPWRbcF0udHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09VFswXSl7dmFyIGc9R2UoVFsxXSk7aWYo''@;'; put 'put ''ay5sZW5ndGg8PWcucilmb3Iodj1rLmxlbmd0aDt2PD1nLnI7Kyt2KWtbdl18fChrW3ZdPVtdKTtzd2l0Y2godj1nLnIsdT1nLmMsVFsyXSl7Y2FzZSJ0IjprW3ZdW3VdPWUoVFszXSk7YnJlYWs7Y2FzZSJ2IjprW3ZdW3VdPStUWzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgTj1UW1QubGVuZ3Ro''@;'; put 'put ''LTFdO2Nhc2UidnRjIjprW3ZdW3VdPSJubCI9PT1UWzNdPyEhK1RbNF06K1RbNF0sInZ0ZiI9PVRbMl0mJihrW3ZdW3VdPVtrW3ZdW3VdLE5dKX19fXJldHVybiB4JiZ4LnNoZWV0Um93cyYmKGs9ay5zbGljZSgwLHguc2hlZXRSb3dzKSksa30oaCx4KSx4KX12YXIgaT1bInNvY2lhbGNhbGM6''@;'; put 'put ''dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIikscz1bIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250''@;'; put 'put ''ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiXS5qb2luKCJcbiIpKyJcbiIsZj1bIiMgU29jaWFsQ2FsYyBTcHJlYWRzaGVldCBDb250cm9sIFNhdmUiLCJwYXJ0OnNoZWV0Il0uam9pbigiXG4iKSxjPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1''@;'; put 'put ''bmN0aW9uIG8oaCl7aWYoIWh8fCFoWyIhcmVmIl0pcmV0dXJuIiI7Zm9yKHZhciB2LHg9W10sZD1bXSx1PSIiLHA9UHIoaFsiIXJlZiJdKSxrPUFycmF5LmlzQXJyYXkoaCksVD1wLnMucjtUPD1wLmUucjsrK1QpZm9yKHZhciBnPXAucy5jO2c8PXAuZS5jOysrZylpZih1PWdlKHtyOlQsYzpn''@;'; put 'put ''fSksKHY9az8oaFtUXXx8W10pW2ddOmhbdV0pJiZudWxsIT12LnYmJiJ6IiE9PXYudCl7c3dpdGNoKGQ9WyJjZWxsIix1LCJ0Il0sdi50KXtjYXNlInMiOmNhc2Uic3RyIjpkLnB1c2godCh2LnYpKTticmVhaztjYXNlIm4iOnYuZj8oZFsyXT0idnRmIixkWzNdPSJuIixkWzRdPXYudixkWzVd''@;'; put 'put ''PXQodi5mKSk6KGRbMl09InYiLGRbM109di52KTticmVhaztjYXNlImIiOmRbMl09InZ0Iisodi5mPyJmIjoiYyIpLGRbM109Im5sIixkWzRdPXYudj8iMSI6IjAiLGRbNV09dCh2LmZ8fCh2LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBOPWlyKFhlKHYudikpO2RbMl09''@;'; put 'put ''InZ0YyIsZFszXT0ibmQiLGRbNF09IiIrTixkWzVdPXYud3x8UnIodi56fHxwZVsxNF0sTik7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX14LnB1c2goZC5qb2luKCI6IikpfXJldHVybiB4LnB1c2goInNoZWV0OmM6IisocC5lLmMtcC5zLmMrMSkrIjpyOiIrKHAuZS5yLXAucy5yKzEpKyI6dHZm''@;'; put 'put ''OjEiKSx4LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIikseC5qb2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBuKGgseCl7cmV0dXJuIEZ0KGEoaCx4KSx4KX0sdG9fc2hlZXQ6YSxmcm9tX3NoZWV0OmZ1bmN0aW9uIGwoaCl7cmV0dXJuW2kscyxmLHMsbyhoKSxj''@;'; put 'put ''XS5qb2luKCJcbiIpfX19KCksY2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGwsaCx4LGQsdil7di5yYXc/aFt4XVtkXT1sOiIiPT09bHx8KGhbeF1bZF09IlRSVUUiPT09bHx8IkZBTFNFIiE9PWwmJihpc05hTihKcihsKSk/aXNOYU4oYWEobCkuZ2V0RGF0ZSgpKT9sOlhlKGwpOkpyKGwpKSl9''@;'; put 'put ''dmFyIHI9ezQ0OiIsIiw5OiJcdCIsNTk6IjsiLDEyNDoifCJ9LGE9ezQ0OjMsOToyLDU5OjEsMTI0OjB9O2Z1bmN0aW9uIG4obCl7Zm9yKHZhciBoPXt9LHg9ITEsZD0wLHY9MDtkPGwubGVuZ3RoOysrZCkzND09KHY9bC5jaGFyQ29kZUF0KGQpKT94PSF4OiF4JiZ2IGluIHImJihoW3ZdPSho''@;'; put 'put ''W3ZdfHwwKSsxKTtmb3IoZCBpbiB2PVtdLGgpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGgsZCkmJnYucHVzaChbaFtkXSxkXSk7aWYoIXYubGVuZ3RoKWZvcihkIGluIGg9YSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCxkKSYmdi5wdXNoKFto''@;'; put 'put ''W2RdLGRdKTtyZXR1cm4gdi5zb3J0KGZ1bmN0aW9uKHUscCl7cmV0dXJuIHVbMF0tcFswXXx8YVt1WzFdXS1hW3BbMV1dfSksclt2LnBvcCgpWzFdXXx8NDR9ZnVuY3Rpb24gcyhsLGgpe3JldHVybiFofHwhaC5QUk58fGguRlN8fCJzZXA9Ij09bC5zbGljZSgwLDQpfHxsLmluZGV4T2YoIlx0''@;'; put 'put ''Iik+PTB8fGwuaW5kZXhPZigiLCIpPj0wfHxsLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBpKGwsaCl7dmFyIHg9aHx8e30sZD0iIjtudWxsIT16ZSYmbnVsbD09eC5kZW5zZSYmKHguZGVuc2U9emUpO3ZhciB2PXguZGVuc2U/W106e30sdT17czp7YzowLHI6MH0sZTp7YzowLHI6MH19OyJz''@;'; put 'put ''ZXA9Ij09bC5zbGljZSgwLDQpPzEzPT1sLmNoYXJDb2RlQXQoNSkmJjEwPT1sLmNoYXJDb2RlQXQoNik/KGQ9bC5jaGFyQXQoNCksbD1sLnNsaWNlKDcpKToxMz09bC5jaGFyQ29kZUF0KDUpfHwxMD09bC5jaGFyQ29kZUF0KDUpPyhkPWwuY2hhckF0KDQpLGw9bC5zbGljZSg2KSk6ZD1uKGwu''@;'; put 'put ''c2xpY2UoMCwxMDI0KSk6ZD14JiZ4LkZTP3guRlM6bihsLnNsaWNlKDAsMTAyNCkpO3ZhciBwPTAsaz0wLFQ9MCxnPTAsTj0wLE09ZC5jaGFyQ29kZUF0KDApLEk9ITEseT0wLFA9bC5jaGFyQ29kZUF0KDApO2w9bC5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciBSPW51bGwhPXguZGF0ZU5G''@;'; put 'put ''P2Z1bmN0aW9uIG5vKGUpe3ZhciB0PSJudW1iZXIiPT10eXBlb2YgZT9wZVtlXTplO3JldHVybiB0PXQucmVwbGFjZShFaSwiKFxcZCspIiksbmV3IFJlZ0V4cCgiXiIrdCsiJCIpfSh4LmRhdGVORik6bnVsbDtmdW5jdGlvbiBWKCl7dmFyIFg9bC5zbGljZShnLE4pLGI9e307aWYoJyInPT1Y''@;'; put 'put ''LmNoYXJBdCgwKSYmJyInPT1YLmNoYXJBdChYLmxlbmd0aC0xKSYmKFg9WC5zbGljZSgxLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpLDA9PT1YLmxlbmd0aCliLnQ9InoiO2Vsc2UgaWYoeC5yYXcpYi50PSJzIixiLnY9WDtlbHNlIGlmKDA9PT1YLnRyaW0oKS5sZW5ndGgpYi50PSJzIixiLnY9''@;'; put 'put ''WDtlbHNlIGlmKDYxPT1YLmNoYXJDb2RlQXQoMCkpMzQ9PVguY2hhckNvZGVBdCgxKSYmMzQ9PVguY2hhckNvZGVBdChYLmxlbmd0aC0xKT8oYi50PSJzIixiLnY9WC5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIFJ4KGUpe3JldHVybiAxIT1lLmxlbmd0aH0oWCk/''@;'; put 'put ''KGIudD0ibiIsYi5mPVguc2xpY2UoMSkpOihiLnQ9InMiLGIudj1YKTtlbHNlIGlmKCJUUlVFIj09WCliLnQ9ImIiLGIudj0hMDtlbHNlIGlmKCJGQUxTRSI9PVgpYi50PSJiIixiLnY9ITE7ZWxzZSBpZihpc05hTihUPUpyKFgpKSlpZighaXNOYU4oYWEoWCkuZ2V0RGF0ZSgpKXx8UiYmWC5t''@;'; put 'put ''YXRjaChSKSl7Yi56PXguZGF0ZU5GfHxwZVsxNF07dmFyIGVlPTA7UiYmWC5tYXRjaChSKSYmKFg9ZnVuY3Rpb24gaW8oZSx0LHIpe3ZhciBhPS0xLG49LTEsaT0tMSxzPS0xLGY9LTEsYz0tMTsodC5tYXRjaChFaSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGgseCl7dmFyIGQ9cGFyc2VJbnQo''@;'; put 'put ''clt4KzFdLDEwKTtzd2l0Y2goaC50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjphPWQ7YnJlYWs7Y2FzZSJkIjppPWQ7YnJlYWs7Y2FzZSJoIjpzPWQ7YnJlYWs7Y2FzZSJzIjpjPWQ7YnJlYWs7Y2FzZSJtIjpzPj0wP2Y9ZDpuPWR9fSksYz49MCYmLTE9PWYmJm4+PTAmJihmPW4s''@;'; put 'put ''bj0tMSk7dmFyIG89KCIiKyhhPj0wP2E6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSkuc2xpY2UoLTQpKyItIisoIjAwIisobj49MT9uOjEpKS5zbGljZSgtMikrIi0iKygiMDAiKyhpPj0xP2k6MSkpLnNsaWNlKC0yKTs3PT1vLmxlbmd0aCYmKG89IjAiK28pLDg9PW8ubGVuZ3RoJiYobz0i''@;'; put 'put ''MjAiK28pO3ZhciBsPSgiMDAiKyhzPj0wP3M6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKGY+PTA/ZjowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoYz49MD9jOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PXMmJi0xPT1mJiYtMT09Yz9vOi0xPT1hJiYtMT09biYmLTE9PWk/bDpvKyJUIitsfSgw''@;'; put 'put ''LHguZGF0ZU5GLFgubWF0Y2goUil8fFtdKSxlZT0xKSx4LmNlbGxEYXRlcz8oYi50PSJkIixiLnY9WGUoWCxlZSkpOihiLnQ9Im4iLGIudj1pcihYZShYLGVlKSkpLCExIT09eC5jZWxsVGV4dCYmKGIudz1ScihiLnosYi52IGluc3RhbmNlb2YgRGF0ZT9pcihiLnYpOmIudikpLHguY2VsbE5G''@;'; put 'put ''fHxkZWxldGUgYi56fWVsc2UgYi50PSJzIixiLnY9WDtlbHNlIGIudD0ibiIsITEhPT14LmNlbGxUZXh0JiYoYi53PVgpLGIudj1UO2lmKCJ6Ij09Yi50fHwoeC5kZW5zZT8odltwXXx8KHZbcF09W10pLHZbcF1ba109Yik6dltnZSh7YzprLHI6cH0pXT1iKSxQPWwuY2hhckNvZGVBdChnPU4r''@;'; put 'put ''MSksdS5lLmM8ayYmKHUuZS5jPWspLHUuZS5yPHAmJih1LmUucj1wKSx5PT1NKSsraztlbHNlIGlmKGs9MCwrK3AseC5zaGVldFJvd3MmJnguc2hlZXRSb3dzPD1wKXJldHVybiEwfWU6Zm9yKDtOPGwubGVuZ3RoOysrTilzd2l0Y2goeT1sLmNoYXJDb2RlQXQoTikpe2Nhc2UgMzQ6MzQ9PT1Q''@;'; put 'put ''JiYoST0hSSk7YnJlYWs7Y2FzZSBNOmNhc2UgMTA6Y2FzZSAxMzppZighSSYmVigpKWJyZWFrIGV9cmV0dXJuIE4tZz4wJiZWKCksdlsiIXJlZiJdPXdlKHUpLHZ9KGwsaCk6c2EoZnVuY3Rpb24gdChsLGgpe3ZhciB4PWh8fHt9LGQ9W107aWYoIWx8fDA9PT1sLmxlbmd0aClyZXR1cm4gZDtm''@;'; put 'put ''b3IodmFyIHY9bC5zcGxpdCgvW1xyXG5dLyksdT12Lmxlbmd0aC0xO3U+PTAmJjA9PT12W3VdLmxlbmd0aDspLS11O2Zvcih2YXIgcD0xMCxrPTAsVD0wO1Q8PXU7KytUKS0xPT0oaz12W1RdLmluZGV4T2YoIiAiKSk/az12W1RdLmxlbmd0aDprKysscD1NYXRoLm1heChwLGspO2ZvcihUPTA7''@;'; put 'put ''VDw9dTsrK1Qpe2RbVF09W107dmFyIGc9MDtmb3IoZSh2W1RdLnNsaWNlKDAscCkudHJpbSgpLGQsVCxnLHgpLGc9MTtnPD0odltUXS5sZW5ndGgtcCkvMTArMTsrK2cpZSh2W1RdLnNsaWNlKHArMTAqKGctMSkscCsxMCpnKS50cmltKCksZCxULGcseCl9cmV0dXJuIHguc2hlZXRSb3dzJiYo''@;'; put 'put ''ZD1kLnNsaWNlKDAseC5zaGVldFJvd3MpKSxkfShsLGgpLGgpfWZ1bmN0aW9uIGYobCxoKXt2YXIgeD0iIixkPSJzdHJpbmciPT1oLnR5cGU/WzAsMCwwLDBdOktuKGwsaCk7c3dpdGNoKGgudHlwZSl7Y2FzZSJiYXNlNjQiOng9T3IobCk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5n''@;'; put 'put ''Ijp4PWw7YnJlYWs7Y2FzZSJidWZmZXIiOng9NjUwMDE9PWguY29kZXBhZ2U/bC50b1N0cmluZygidXRmOCIpOmguY29kZXBhZ2UmJnR5cGVvZiBPZTwidSI/T2UudXRpbHMuZGVjb2RlKGguY29kZXBhZ2UsbCk6U2UmJkJ1ZmZlci5pc0J1ZmZlcihsKT9sLnRvU3RyaW5nKCJiaW5hcnkiKTp3''@;'; put 'put ''dChsKTticmVhaztjYXNlImFycmF5Ijp4PVB0KGwpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2gudHlwZSl9cmV0dXJuIDIzOT09ZFswXSYmMTg3PT1kWzFdJiYxOTE9PWRbMl0/eD1CZSh4LnNsaWNlKDMpKToic3RyaW5nIiE9aC50eXBlJiYi''@;'; put 'put ''YnVmZmVyIiE9aC50eXBlJiY2NTAwMT09aC5jb2RlcGFnZT94PUJlKHgpOiJiaW5hcnkiPT1oLnR5cGUmJnR5cGVvZiBPZTwidSImJmguY29kZXBhZ2UmJih4PU9lLnV0aWxzLmRlY29kZShoLmNvZGVwYWdlLE9lLnV0aWxzLmVuY29kZSgyODU5MSx4KSkpLCJzb2NpYWxjYWxjOnZlcnNpb246''@;'; put 'put ''Ij09eC5zbGljZSgwLDE5KT90Zi50b19zaGVldCgic3RyaW5nIj09aC50eXBlP3g6QmUoeCksaCk6cyh4LGgpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBjKGwsaCl7cmV0dXJuIEZ0KGYobCxoKSxoKX0sdG9fc2hlZXQ6Zixmcm9tX3NoZWV0OmZ1bmN0aW9uIG8obCl7Zm9yKHZhciBk''@;'; put 'put ''LGg9W10seD1EZShsWyIhcmVmIl0pLHY9QXJyYXkuaXNBcnJheShsKSx1PXgucy5yO3U8PXguZS5yOysrdSl7Zm9yKHZhciBwPVtdLGs9eC5zLmM7azw9eC5lLmM7KytrKXt2YXIgVD1nZSh7cjp1LGM6a30pO2lmKChkPXY/KGxbdV18fFtdKVtrXTpsW1RdKSYmbnVsbCE9ZC52KXtmb3IodmFy''@;'; put 'put ''IGc9KGQud3x8KGF0KGQpLGQudyl8fCIiKS5zbGljZSgwLDEwKTtnLmxlbmd0aDwxMDspZys9IiAiO3AucHVzaChnKygwPT09az8iICI6IiIpKX1lbHNlIHAucHVzaCgiICAgICAgICAgICIpfWgucHVzaChwLmpvaW4oIiIpKX1yZXR1cm4gaC5qb2luKCJcbiIpfX19KCksanQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtmdW5jdGlvbiBlKEMsVSxPKXtpZihDKXtocihDLEMubHx8MCk7Zm9yKHZhciBEPU8uRW51bXx8eGU7Qy5sPEMubGVuZ3RoOyl7dmFyIGo9Qy5yZWFkX3NoaWZ0KDIpLHNlPURbal18fERbNjU1MzVdLFo9Qy5yZWFkX3NoaWZ0KDIpLFE9Qy5sK1osWT1zZS5mJiZzZS5mKEMsWixPKTtpZihD''@;'; put 'put ''Lmw9USxVKFksc2UsaikpcmV0dXJufX19ZnVuY3Rpb24gcihDLFUpe2lmKCFDKXJldHVybiBDO3ZhciBPPVV8fHt9O251bGwhPXplJiZudWxsPT1PLmRlbnNlJiYoTy5kZW5zZT16ZSk7dmFyIEQ9Ty5kZW5zZT9bXTp7fSxqPSJTaGVldDEiLHNlPSIiLFo9MCxRPXt9LFk9W10sRWU9W10sQT17''@;'; put 'put ''czp7cjowLGM6MH0sZTp7cjowLGM6MH19LFBlPU8uc2hlZXRSb3dzfHwwO2lmKDA9PUNbMl0mJig4PT1DWzNdfHw5PT1DWzNdKSYmQy5sZW5ndGg+PTE2JiY1PT1DWzE0XSYmMTA4PT09Q1sxNV0pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBXb3JrcyAzIGZvciBNYWMgZmlsZSIpO2lm''@;'; put 'put ''KDI9PUNbMl0pTy5FbnVtPXhlLGUoQyxmdW5jdGlvbihvZSxxZSxqcil7c3dpdGNoKGpyKXtjYXNlIDA6Ty52ZXJzPW9lLG9lPj00MDk2JiYoTy5xcHJvPSEwKTticmVhaztjYXNlIDY6QT1vZTticmVhaztjYXNlIDIwNDpvZSYmKHNlPW9lKTticmVhaztjYXNlIDIyMjpzZT1vZTticmVhaztj''@;'; put 'put ''YXNlIDE1OmNhc2UgNTE6Ty5xcHJvfHwob2VbMV0udj1vZVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09anImJiEoMTEyJn5vZVsyXSkmJigxNSZvZVsyXSk+MSYmKDE1Jm9lWzJdKTwxNSYmKG9lWzFdLno9Ty5kYXRlTkZ8fHBlWzE0XSxPLmNlbGxEYXRlcyYm''@;'; put 'put ''KG9lWzFdLnQ9ImQiLG9lWzFdLnY9bzAob2VbMV0udikpKSxPLnFwcm8mJm9lWzNdPlomJihEWyIhcmVmIl09d2UoQSksUVtqXT1ELFkucHVzaChqKSxEPU8uZGVuc2U/W106e30sQT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LFo9b2VbM10saj1zZXx8IlNoZWV0IisoWisxKSxzZT0iIik7''@;'; put 'put ''dmFyIGZ0PU8uZGVuc2U/KERbb2VbMF0ucl18fFtdKVtvZVswXS5jXTpEW2dlKG9lWzBdKV07aWYoZnQpe2Z0LnQ9b2VbMV0udCxmdC52PW9lWzFdLnYsbnVsbCE9b2VbMV0ueiYmKGZ0Lno9b2VbMV0ueiksbnVsbCE9b2VbMV0uZiYmKGZ0LmY9b2VbMV0uZik7YnJlYWt9Ty5kZW5zZT8oRFtv''@;'; put 'put ''ZVswXS5yXXx8KERbb2VbMF0ucl09W10pLERbb2VbMF0ucl1bb2VbMF0uY109b2VbMV0pOkRbZ2Uob2VbMF0pXT1vZVsxXX19LE8pO2Vsc2V7aWYoMjYhPUNbMl0mJjE0IT1DWzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK0NbMl0pO08uRW51bT1LLDE0PT1D''@;'; put 'put ''WzJdJiYoTy5xcHJvPSEwLEMubD0wKSxlKEMsZnVuY3Rpb24ob2UscWUsanIpe3N3aXRjaChqcil7Y2FzZSAyMDQ6aj1vZTticmVhaztjYXNlIDIyOm9lWzFdLnY9b2VbMV0udi5zbGljZSgxKTtjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNTpjYXNlIDM3OmNhc2UgMzk6Y2FzZSA0MDppZihvZVsz''@;'; put 'put ''XT5aJiYoRFsiIXJlZiJdPXdlKEEpLFFbal09RCxZLnB1c2goaiksRD1PLmRlbnNlP1tdOnt9LEE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxqPSJTaGVldCIrKChaPW9lWzNdKSsxKSksUGU+MCYmb2VbMF0ucj49UGUpYnJlYWs7Ty5kZW5zZT8oRFtvZVswXS5yXXx8KERbb2VbMF0ucl09''@;'; put 'put ''W10pLERbb2VbMF0ucl1bb2VbMF0uY109b2VbMV0pOkRbZ2Uob2VbMF0pXT1vZVsxXSxBLmUuYzxvZVswXS5jJiYoQS5lLmM9b2VbMF0uYyksQS5lLnI8b2VbMF0uciYmKEEuZS5yPW9lWzBdLnIpO2JyZWFrO2Nhc2UgMjc6b2VbMTRlM10mJihFZVtvZVsxNGUzXVswXV09b2VbMTRlM11bMV0p''@;'; put 'put ''O2JyZWFrO2Nhc2UgMTUzNzpFZVtvZVswXV09b2VbMV0sb2VbMF09PVomJihqPW9lWzFdKX19LE8pfWlmKERbIiFyZWYiXT13ZShBKSxRW3NlfHxqXT1ELFkucHVzaChzZXx8aiksIUVlLmxlbmd0aClyZXR1cm57U2hlZXROYW1lczpZLFNoZWV0czpRfTtmb3IodmFyIEFlPXt9LExlPVtdLENl''@;'; put 'put ''PTA7Q2U8RWUubGVuZ3RoOysrQ2UpUVtZW0NlXV0/KExlLnB1c2goRWVbQ2VdfHxZW0NlXSksQWVbRWVbQ2VdXT1RW0VlW0NlXV18fFFbWVtDZV1dKTooTGUucHVzaChFZVtDZV0pLEFlW0VlW0NlXV09eyIhcmVmIjoiQTEifSk7cmV0dXJue1NoZWV0TmFtZXM6TGUsU2hlZXRzOkFlfX1mdW5j''@;'; put 'put ''dGlvbiBvKEMsVSxPKXt2YXIgRD1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDAsMF07cmV0dXJuIE8ucXBybyYmMjA3NjghPU8udmVycz8oRFswXS5jPUMucmVhZF9zaGlmdCgxKSxEWzNdPUMucmVhZF9zaGlmdCgxKSxEWzBdLnI9Qy5yZWFkX3NoaWZ0KDIpLEMubCs9Mik6KERbMl09Qy5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpLERbMF0uYz1DLnJlYWRfc2hpZnQoMiksRFswXS5yPUMucmVhZF9zaGlmdCgyKSksRH1mdW5jdGlvbiBsKEMsVSxPKXt2YXIgRD1DLmwrVSxqPW8oQywwLE8pO2lmKGpbMV0udD0icyIsMjA3Njg9PU8udmVycyl7Qy5sKys7dmFyIHNlPUMucmVhZF9zaGlmdCgxKTtyZXR1cm4g''@;'; put 'put ''alsxXS52PUMucmVhZF9zaGlmdChzZSwidXRmOCIpLGp9cmV0dXJuIE8ucXBybyYmQy5sKyssalsxXS52PUMucmVhZF9zaGlmdChELUMubCwiY3N0ciIpLGp9ZnVuY3Rpb24gaChDLFUsTyl7dmFyIEQ9Ryg3K08ubGVuZ3RoKTtELndyaXRlX3NoaWZ0KDEsMjU1KSxELndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''VSksRC53cml0ZV9zaGlmdCgyLEMpLEQud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBqPTA7ajxELmxlbmd0aDsrK2ope3ZhciBzZT1PLmNoYXJDb2RlQXQoaik7RC53cml0ZV9zaGlmdCgxLHNlPj0xMjg/OTU6c2UpfXJldHVybiBELndyaXRlX3NoaWZ0KDEsMCksRH1mdW5jdGlvbiBkKEMs''@;'; put 'put ''VSxPKXt2YXIgRD1HKDcpO3JldHVybiBELndyaXRlX3NoaWZ0KDEsMjU1KSxELndyaXRlX3NoaWZ0KDIsVSksRC53cml0ZV9zaGlmdCgyLEMpLEQud3JpdGVfc2hpZnQoMixPLCJpIiksRH1mdW5jdGlvbiB1KEMsVSxPKXt2YXIgRD1HKDEzKTtyZXR1cm4gRC53cml0ZV9zaGlmdCgxLDI1NSks''@;'; put 'put ''RC53cml0ZV9zaGlmdCgyLFUpLEQud3JpdGVfc2hpZnQoMixDKSxELndyaXRlX3NoaWZ0KDgsTywiZiIpLER9ZnVuY3Rpb24gayhDLFUsTyl7dmFyIEQ9MzI3NjgmVTtyZXR1cm4gVT0oRD9DOjApKygoVSY9LTMyNzY5KT49ODE5Mj9VLTE2Mzg0OlUpLChEPyIiOiIkIikrKE8/SGUoVSk6S2Uo''@;'; put 'put ''VSkpfXZhciBUPXs1MTpbIkZBTFNFIiwwXSw1MjpbIlRSVUUiLDBdLDcwOlsiTEVOIiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0OlsiTUFYQSIsNjldLDExMTpbIlQiLDFdfSxnPVsiIiwiIiwiIiwiIiwiIiwi''@;'; put 'put ''IiwiIiwiIiwiIiwiKyIsIi0iLCIqIiwiLyIsIl4iLCI9IiwiPD4iLCI8PSIsIj49IiwiPCIsIj4iLCIiLCIiLCIiLCIiLCImIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl07ZnVuY3Rpb24gTShDKXt2YXIgVT1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiBVWzBdLnI9Qy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpLFVbM109Q1tDLmwrK10sVVswXS5jPUNbQy5sKytdLFV9ZnVuY3Rpb24geShDLFUsTyxEKXt2YXIgaj1HKDYrRC5sZW5ndGgpO2oud3JpdGVfc2hpZnQoMixDKSxqLndyaXRlX3NoaWZ0KDEsTyksai53cml0ZV9zaGlmdCgxLFUpLGoud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBz''@;'; put 'put ''ZT0wO3NlPEQubGVuZ3RoOysrc2Upe3ZhciBaPUQuY2hhckNvZGVBdChzZSk7ai53cml0ZV9zaGlmdCgxLFo+PTEyOD85NTpaKX1yZXR1cm4gai53cml0ZV9zaGlmdCgxLDApLGp9ZnVuY3Rpb24gUihDLFUpe3ZhciBPPU0oQyksRD1DLnJlYWRfc2hpZnQoNCksaj1DLnJlYWRfc2hpZnQoNCks''@;'; put 'put ''c2U9Qy5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1zZSlyZXR1cm4gMD09PUQmJjMyMjEyMjU0NzI9PT1qPyhPWzFdLnQ9ImUiLE9bMV0udj0xNSk6MD09PUQmJjM0ODk2NjA5Mjg9PT1qPyhPWzFdLnQ9ImUiLE9bMV0udj00Mik6T1sxXS52PTAsTzt2YXIgWj0zMjc2OCZzZTtyZXR1cm4gc2U9''@;'; put 'put ''KDMyNzY3JnNlKS0xNjQ0NixPWzFdLnY9KDEtMipaKSooaipNYXRoLnBvdygyLHNlKzMyKStEKk1hdGgucG93KDIsc2UpKSxPfWZ1bmN0aW9uIFYoQyxVLE8sRCl7dmFyIGo9RygxNCk7aWYoai53cml0ZV9zaGlmdCgyLEMpLGoud3JpdGVfc2hpZnQoMSxPKSxqLndyaXRlX3NoaWZ0KDEsVSks''@;'; put 'put ''MD09RClyZXR1cm4gai53cml0ZV9zaGlmdCg0LDApLGoud3JpdGVfc2hpZnQoNCwwKSxqLndyaXRlX3NoaWZ0KDIsNjU1MzUpLGo7dmFyIHNlPTAsWj0wLFk9MDtyZXR1cm4gRDwwJiYoc2U9MSxEPS1EKSxaPTB8TWF0aC5sb2cyKEQpLDIxNDc0ODM2NDgmKFk9KEQvPU1hdGgucG93KDIsWi0z''@;'; put 'put ''MSkpPj4+MCl8fCgrK1osWT0oRC89Mik+Pj4wKSxELT1ZLFl8PTIxNDc0ODM2NDgsWT4+Pj0wLEQqPU1hdGgucG93KDIsMzIpLGoud3JpdGVfc2hpZnQoNCxEPj4+MCksai53cml0ZV9zaGlmdCg0LFkpLGoud3JpdGVfc2hpZnQoMixaKz0xNjM4Mysoc2U/MzI3Njg6MCkpLGp9ZnVuY3Rpb24g''@;'; put 'put ''ZWUoQyxVKXt2YXIgTz1NKEMpLEQ9Qy5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gT1sxXS52PUQsT31mdW5jdGlvbiByZShDLFUpe3JldHVybiAwPT1DW0MubCtVLTFdP0MucmVhZF9zaGlmdChVLCJjc3RyIik6IiJ9ZnVuY3Rpb24gY2UoQyxVKXt2YXIgTz1HKDUrQy5sZW5ndGgpO08ud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiwxNGUzKSxPLndyaXRlX3NoaWZ0KDIsVSk7Zm9yKHZhciBEPTA7RDxDLmxlbmd0aDsrK0Qpe3ZhciBqPUMuY2hhckNvZGVBdChEKTtPW08ubCsrXT1qPjEyNz85NTpqfXJldHVybiBPW08ubCsrXT0wLE99dmFyIHhlPXswOntuOiJCT0YiLGY6dHJ9LDE6e246IkVPRiJ9LDI6''@;'; put 'put ''e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gZihDLFUsTyl7dmFyIEQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTtyZXR1cm4gOD09VSYmTy5xcHJvPyhELnMuYz1DLnJlYWRfc2hpZnQo''@;'; put 'put ''MSksQy5sKyssRC5zLnI9Qy5yZWFkX3NoaWZ0KDIpLEQuZS5jPUMucmVhZF9zaGlmdCgxKSxDLmwrKyxELmUucj1DLnJlYWRfc2hpZnQoMiksRCk6KEQucy5jPUMucmVhZF9zaGlmdCgyKSxELnMucj1DLnJlYWRfc2hpZnQoMiksMTI9PVUmJk8ucXBybyYmKEMubCs9MiksRC5lLmM9Qy5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLEQuZS5yPUMucmVhZF9zaGlmdCgyKSwxMj09VSYmTy5xcHJvJiYoQy5sKz0yKSw2NTUzNT09RC5zLmMmJihELnMuYz1ELmUuYz1ELnMucj1ELmUucj0wKSxEKX19LDc6e246IldJTkRPVzEifSw4OntuOiJDT0xXMSJ9LDk6e246IldJTlRXTyJ9LDEwOntuOiJDT0xXMiJ9LDEx''@;'; put 'put ''OntuOiJOQU1FIn0sMTI6e246IkJMQU5LIn0sMTM6e246IklOVEVHRVIiLGY6ZnVuY3Rpb24geChDLFUsTyl7dmFyIEQ9byhDLDAsTyk7cmV0dXJuIERbMV0udj1DLnJlYWRfc2hpZnQoMiwiaSIpLER9fSwxNDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIHYoQyxVLE8pe3ZhciBEPW8oQywwLE8p''@;'; put 'put ''O3JldHVybiBEWzFdLnY9Qy5yZWFkX3NoaWZ0KDgsImYiKSxEfX0sMTU6e246IkxBQkVMIixmOmx9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0aW9uIHAoQyxVLE8pe3ZhciBEPUMubCtVLGo9byhDLDAsTyk7aWYoalsxXS52PUMucmVhZF9zaGlmdCg4LCJmIiksTy5xcHJvKUMubD1EO2Vsc2V7''@;'; put 'put ''dmFyIHNlPUMucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gTihDLFUpe2hyKEMsMCk7Zm9yKHZhciBPPVtdLEQ9MCxqPSIiLHNlPSIiLFo9IiIsUT0iIjtDLmw8Qy5sZW5ndGg7KXt2YXIgWT1DW0MubCsrXTtzd2l0Y2goWSl7Y2FzZSAwOk8ucHVzaChDLnJlYWRfc2hpZnQoOCwiZiIpKTticmVh''@;'; put 'put ''aztjYXNlIDE6c2U9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxqPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSksTy5wdXNoKHNlK2opO2JyZWFrO2Nhc2UgMjp2YXIgRWU9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxBPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSk7''@;'; put 'put ''c2U9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxqPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSksTy5wdXNoKEVlK0ErIjoiK3NlK2opO2JyZWFrO2Nhc2UgMzppZihDLmw8Qy5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVu''@;'; put 'put ''ZCIpO2JyZWFrO2Nhc2UgNDpPLnB1c2goIigiK08ucG9wKCkrIikiKTticmVhaztjYXNlIDU6Ty5wdXNoKEMucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgUGU9IiI7WT1DW0MubCsrXTspUGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWSk7Ty5wdXNoKCciJytQZS5yZXBsYWNl''@;'; put 'put ''KC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6Ty5wdXNoKCItIitPLnBvcCgpKTticmVhaztjYXNlIDIzOk8ucHVzaCgiKyIrTy5wb3AoKSk7YnJlYWs7Y2FzZSAyMjpPLnB1c2goIk5PVCgiK08ucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6UT1PLnBvcCgpLFo9Ty5wb3Ao''@;'; put 'put ''KSxPLnB1c2goWyJBTkQiLCJPUiJdW1ktMjBdKyIoIitaKyIsIitRKyIpIik7YnJlYWs7ZGVmYXVsdDppZihZPDMyJiZnW1ldKVE9Ty5wb3AoKSxaPU8ucG9wKCksTy5wdXNoKForZ1tZXStRKTtlbHNle2lmKCFUW1ldKXJldHVybiBZPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9w''@;'; put 'put ''Y29kZSAiK1kudG9TdHJpbmcoMTYpKTpZPD0yND9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgb3AgIitZLnRvU3RyaW5nKDE2KSk6WTw9MzA/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrWS50b1N0cmluZygxNikpOlk8PTExNT9jb25zb2xlLmVycm9yKCJXSzEg''@;'; put 'put ''dW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIrWS50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bjb2RlICIrWS50b1N0cmluZygxNikpO2lmKDY5PT0oRD1UW1ldWzFdKSYmKEQ9Q1tDLmwrK10pLEQ+Ty5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29s''@;'; put 'put ''ZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4IitZLnRvU3RyaW5nKDE2KSsiOnwiK08uam9pbigifCIpKyJ8Iik7dmFyIEFlPU8uc2xpY2UoLUQpO08ubGVuZ3RoLT1ELE8ucHVzaChUW1ldWzBdKyIoIitBZS5qb2luKCIsIikrIikiKX19fTE9PU8ubGVuZ3RoP1VbMV0uZj0iIitP''@;'; put 'put ''WzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8IitPLmpvaW4oInwiKSsifCIpfSkoQy5zbGljZShDLmwsQy5sK3NlKSxqKSxDLmwrPXNlfXJldHVybiBqfX0sMjQ6e246IlRBQkxFIn0sMjU6e246Ik9SQU5HRSJ9LDI2OntuOiJQUkFOR0UifSwyNzp7bjoiU1JBTkdF''@;'; put 'put ''In0sMjg6e246IkZSQU5HRSJ9LDI5OntuOiJLUkFOR0UxIn0sMzI6e246IkhSQU5HRSJ9LDM1OntuOiJLUkFOR0UyIn0sMzY6e246IlBST1RFQyJ9LDM3OntuOiJGT09URVIifSwzODp7bjoiSEVBREVSIn0sMzk6e246IlNFVFVQIn0sNDA6e246Ik1BUkdJTlMifSw0MTp7bjoiTEFCRUxGTVQi''@;'; put 'put ''fSw0Mjp7bjoiVElUTEVTIn0sNDM6e246IlNIRUVUSlMifSw0NTp7bjoiR1JBUEgifSw0Njp7bjoiTkdSQVBIIn0sNDc6e246IkNBTENDT1VOVCJ9LDQ4OntuOiJVTkZPUk1BVFRFRCJ9LDQ5OntuOiJDVVJTT1JXMTIifSw1MDp7bjoiV0lORE9XIn0sNTE6e246IlNUUklORyIsZjpsfSw1NTp7''@;'; put 'put ''bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0s''@;'; put 'put ''Njg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9''@;'; put 'put ''LDEwNTp7bjoiTVJBTkdFUz8/In0sMjA0OntuOiJTSEVFVE5BTUVDUyIsZjpyZX0sMjIyOntuOiJTSEVFVE5BTUVMUCIsZjpmdW5jdGlvbiBkZShDLFUpe3ZhciBPPUNbQy5sKytdO08+VS0xJiYoTz1VLTEpO2Zvcih2YXIgRD0iIjtELmxlbmd0aDxPOylEKz1TdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''KENbQy5sKytdKTtyZXR1cm4gRH19LDY1NTM1OntuOiIifX0sSz17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xV''@;'; put 'put ''TU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlO''@;'; put 'put ''In0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIEkoQyxVKXt2YXIgTz1NKEMpO3JldHVybiBPWzFd''@;'; put 'put ''LnQ9InMiLE9bMV0udj1DLnJlYWRfc2hpZnQoVS00LCJjc3RyIiksT319LDIzOntuOiJOVU1CRVIxNyIsZjpSfSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gUChDLFUpe3ZhciBPPU0oQyk7T1sxXS52PUMucmVhZF9zaGlmdCgyKTt2YXIgRD1PWzFdLnY+PjE7aWYoMSZPWzFdLnYpc3dp''@;'; put 'put ''dGNoKDcmRCl7Y2FzZSAwOkQ9NWUzKihEPj4zKTticmVhaztjYXNlIDE6RD01MDAqKEQ+PjMpO2JyZWFrO2Nhc2UgMjpEPShEPj4zKS8yMDticmVhaztjYXNlIDM6RD0oRD4+MykvMjAwO2JyZWFrO2Nhc2UgNDpEPShEPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OkQ9KEQ+PjMpLzJlNDticmVhaztj''@;'; put 'put ''YXNlIDY6RD0oRD4+MykvMTY7YnJlYWs7Y2FzZSA3OkQ9KEQ+PjMpLzY0fXJldHVybiBPWzFdLnY9RCxPfX0sMjU6e246IkZPUk1VTEExOSIsZjpmdW5jdGlvbiBYKEMsVSl7dmFyIE89UihDKTtyZXR1cm4gQy5sKz1VLTE0LE99fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQi''@;'; put 'put ''LGY6ZnVuY3Rpb24gRmUoQyxVKXtmb3IodmFyIE89e30sRD1DLmwrVTtDLmw8RDspe3ZhciBqPUMucmVhZF9zaGlmdCgyKTtpZigxNGUzPT1qKXtmb3IoT1tqXT1bMCwiIl0sT1tqXVswXT1DLnJlYWRfc2hpZnQoMik7Q1tDLmxdOylPW2pdWzFdKz1TdHJpbmcuZnJvbUNoYXJDb2RlKENbQy5s''@;'; put 'put ''XSksQy5sKys7Qy5sKyt9fXJldHVybiBPfX0sMjg6e246IkRUTEFCRUxNSVNDIn0sMjk6e246IkRUTEFCRUxDRUxMIn0sMzA6e246IkdSQVBIV0lORE9XIn0sMzE6e246IkNQQSJ9LDMyOntuOiJMUExBVVRPIn0sMzM6e246IlFVRVJZIn0sMzQ6e246IkhJRERFTlNIRUVUIn0sMzU6e246Ij8/''@;'; put 'put ''In0sMzc6e246Ik5VTUJFUjI1IixmOmZ1bmN0aW9uIGIoQyxVKXt2YXIgTz1NKEMpLEQ9Qy5yZWFkX3NoaWZ0KDQpO3JldHVybiBPWzFdLnY9RD4+NixPfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOmVlfSw0MDp7bjoiRk9STVVMQTI4IixmOmZ1bmN0aW9uIGxlKEMsVSl7dmFy''@;'; put 'put ''IE89ZWUoQyk7cmV0dXJuIEMubCs9VS0xMCxPfX0sMTQyOntuOiI/PyJ9LDE0Nzp7bjoiPz8ifSwxNTA6e246Ij8/In0sMTUxOntuOiI/PyJ9LDE1Mjp7bjoiPz8ifSwxNTM6e246Ij8/In0sMTU0OntuOiI/PyJ9LDE1NTp7bjoiPz8ifSwxNTY6e246Ij8/In0sMTYzOntuOiI/PyJ9LDE3NDp7''@;'; put 'put ''bjoiPz8ifSwxNzU6e246Ij8/In0sMTc2OntuOiI/PyJ9LDE3Nzp7bjoiPz8ifSwxODQ6e246Ij8/In0sMTg1OntuOiI/PyJ9LDE4Njp7bjoiPz8ifSwxODc6e246Ij8/In0sMTg4OntuOiI/PyJ9LDE5NTp7bjoiPz8ifSwyMDE6e246Ij8/In0sMjA0OntuOiJTSEVFVE5BTUVDUyIsZjpyZX0s''@;'; put 'put ''MjA1OntuOiI/PyJ9LDIwNjp7bjoiPz8ifSwyMDc6e246Ij8/In0sMjA4OntuOiI/PyJ9LDI1Njp7bjoiPz8ifSwyNTk6e246Ij8/In0sMjYwOntuOiI/PyJ9LDI2MTp7bjoiPz8ifSwyNjI6e246Ij8/In0sMjYzOntuOiI/PyJ9LDI2NTp7bjoiPz8ifSwyNjY6e246Ij8/In0sMjY3OntuOiI/''@;'; put 'put ''PyJ9LDI2ODp7bjoiPz8ifSwyNzA6e246Ij8/In0sMjcxOntuOiI/PyJ9LDM4NDp7bjoiPz8ifSwzODk6e246Ij8/In0sMzkwOntuOiI/PyJ9LDM5Mzp7bjoiPz8ifSwzOTY6e246Ij8/In0sNTEyOntuOiI/PyJ9LDUxNDp7bjoiPz8ifSw1MTM6e246Ij8/In0sNTE2OntuOiI/PyJ9LDUxNzp7''@;'; put 'put ''bjoiPz8ifSw2NDA6e246Ij8/In0sNjQxOntuOiI/PyJ9LDY0Mjp7bjoiPz8ifSw2NDM6e246Ij8/In0sNjQ0OntuOiI/PyJ9LDY0NTp7bjoiPz8ifSw2NDY6e246Ij8/In0sNjQ3OntuOiI/PyJ9LDY0ODp7bjoiPz8ifSw2NTg6e246Ij8/In0sNjU5OntuOiI/PyJ9LDY2MDp7bjoiPz8ifSw2''@;'; put 'put ''NjE6e246Ij8/In0sNjYyOntuOiI/PyJ9LDY2NTp7bjoiPz8ifSw2NjY6e246Ij8/In0sNzY4OntuOiI/PyJ9LDc3Mjp7bjoiPz8ifSwxNTM3OntuOiJTSEVFVElORk9RUCIsZjpmdW5jdGlvbiB1ZShDLFUsTyl7aWYoTy5xcHJvJiYhKFU8MjEpKXt2YXIgRD1DLnJlYWRfc2hpZnQoMSk7cmV0''@;'; put 'put ''dXJuIEMubCs9MTcsQy5sKz0xLEMubCs9MixbRCxDLnJlYWRfc2hpZnQoVS0yMSwiY3N0ciIpXX19fSwxNjAwOntuOiI/PyJ9LDE2MDI6e246Ij8/In0sMTc5Mzp7bjoiPz8ifSwxNzk0OntuOiI/PyJ9LDE3OTU6e246Ij8/In0sMTc5Njp7bjoiPz8ifSwxOTIwOntuOiI/PyJ9LDIwNDg6e246''@;'; put 'put ''Ij8/In0sMjA0OTp7bjoiPz8ifSwyMDUyOntuOiI/PyJ9LDI2ODg6e246Ij8/In0sMTA5OTg6e246Ij8/In0sMTI4NDk6e246Ij8/In0sMjgyMzM6e246Ij8/In0sMjg0ODQ6e246Ij8/In0sNjU1MzU6e246IiJ9fTtyZXR1cm57c2hlZXRfdG9fd2sxOmZ1bmN0aW9uIGEoQyxVKXt2YXIgTz1V''@;'; put 'put ''fHx7fTtpZigrTy5jb2RlcGFnZT49MCYmTXIoK08uY29kZXBhZ2UpLCJzdHJpbmciPT1PLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0sxIHRvIEpTIHN0cmluZyIpO3ZhciBEPVNyKCksaj1EZShDWyIhcmVmIl0pLHNlPUFycmF5LmlzQXJyYXkoQyksWj1bXTthZShELDAs''@;'; put 'put ''ZnVuY3Rpb24gaShDKXt2YXIgVT1HKDIpO3JldHVybiBVLndyaXRlX3NoaWZ0KDIsQyksVX0oMTAzMCkpLGFlKEQsNixmdW5jdGlvbiBjKEMpe3ZhciBVPUcoOCk7cmV0dXJuIFUud3JpdGVfc2hpZnQoMixDLnMuYyksVS53cml0ZV9zaGlmdCgyLEMucy5yKSxVLndyaXRlX3NoaWZ0KDIsQy5l''@;'; put 'put ''LmMpLFUud3JpdGVfc2hpZnQoMixDLmUuciksVX0oaikpO2Zvcih2YXIgUT1NYXRoLm1pbihqLmUuciw4MTkxKSxZPWoucy5yO1k8PVE7KytZKWZvcih2YXIgRWU9S2UoWSksQT1qLnMuYztBPD1qLmUuYzsrK0Epe1k9PT1qLnMuciYmKFpbQV09SGUoQSkpO3ZhciBBZT1zZT8oQ1tZXXx8W10p''@;'; put 'put ''W0FdOkNbWltBXStFZV07QWUmJiJ6IiE9QWUudCYmKCJuIj09QWUudD8oMHxBZS52KT09QWUudiYmQWUudj49LTMyNzY4JiZBZS52PD0zMjc2Nz9hZShELDEzLGQoWSxBLEFlLnYpKTphZShELDE0LHUoWSxBLEFlLnYpKTphZShELDE1LGgoWSxBLGF0KEFlKS5zbGljZSgwLDIzOSkpKSl9cmV0''@;'; put 'put ''dXJuIGFlKEQsMSksRC5lbmQoKX0sYm9va190b193azM6ZnVuY3Rpb24gbihDLFUpe3ZhciBPPVV8fHt9O2lmKCtPLmNvZGVwYWdlPj0wJiZNcigrTy5jb2RlcGFnZSksInN0cmluZyI9PU8udHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzMgdG8gSlMgc3RyaW5nIik7dmFy''@;'; put 'put ''IEQ9U3IoKTthZShELDAsZnVuY3Rpb24gcyhDKXt2YXIgVT1HKDI2KTtVLndyaXRlX3NoaWZ0KDIsNDA5NiksVS53cml0ZV9zaGlmdCgyLDQpLFUud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIE89MCxEPTAsaj0wLHNlPTA7c2U8Qy5TaGVldE5hbWVzLmxlbmd0aDsrK3NlKXt2YXIgUT1DLlNo''@;'; put 'put ''ZWV0c1tDLlNoZWV0TmFtZXNbc2VdXTtpZihRJiZRWyIhcmVmIl0peysrajt2YXIgWT1QcihRWyIhcmVmIl0pO088WS5lLnImJihPPVkuZS5yKSxEPFkuZS5jJiYoRD1ZLmUuYyl9fXJldHVybiBPPjgxOTEmJihPPTgxOTEpLFUud3JpdGVfc2hpZnQoMixPKSxVLndyaXRlX3NoaWZ0KDEsaiks''@;'; put 'put ''VS53cml0ZV9zaGlmdCgxLEQpLFUud3JpdGVfc2hpZnQoMiwwKSxVLndyaXRlX3NoaWZ0KDIsMCksVS53cml0ZV9zaGlmdCgxLDEpLFUud3JpdGVfc2hpZnQoMSwyKSxVLndyaXRlX3NoaWZ0KDQsMCksVS53cml0ZV9zaGlmdCg0LDApLFV9KEMpKTtmb3IodmFyIGo9MCxzZT0wO2o8Qy5TaGVl''@;'; put 'put ''dE5hbWVzLmxlbmd0aDsrK2opKEMuU2hlZXRzW0MuU2hlZXROYW1lc1tqXV18fHt9KVsiIXJlZiJdJiZhZShELDI3LGNlKEMuU2hlZXROYW1lc1tqXSxzZSsrKSk7dmFyIFo9MDtmb3Ioaj0wO2o8Qy5TaGVldE5hbWVzLmxlbmd0aDsrK2ope3ZhciBRPUMuU2hlZXRzW0MuU2hlZXROYW1lc1tq''@;'; put 'put ''XV07aWYoUSYmUVsiIXJlZiJdKXtmb3IodmFyIFk9RGUoUVsiIXJlZiJdKSxFZT1BcnJheS5pc0FycmF5KFEpLEE9W10sUGU9TWF0aC5taW4oWS5lLnIsODE5MSksQWU9WS5zLnI7QWU8PVBlOysrQWUpZm9yKHZhciBMZT1LZShBZSksQ2U9WS5zLmM7Q2U8PVkuZS5jOysrQ2Upe0FlPT09WS5z''@;'; put 'put ''LnImJihBW0NlXT1IZShDZSkpO3ZhciBxZT1FZT8oUVtBZV18fFtdKVtDZV06UVtBW0NlXStMZV07cWUmJiJ6IiE9cWUudCYmKCJuIj09cWUudD9hZShELDIzLFYoQWUsQ2UsWixxZS52KSk6YWUoRCwyMix5KEFlLENlLFosYXQocWUpLnNsaWNlKDAsMjM5KSkpKX0rK1p9fXJldHVybiBhZShE''@;'; put 'put ''LDEpLEQuZW5kKCl9LHRvX3dvcmtib29rOmZ1bmN0aW9uIHQoQyxVKXtzd2l0Y2goVS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHIoSXIoT3IoQykpLFUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gcihJcihDKSxVKTtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6cmV0dXJuIHIoQyxVKX10aHJv''@;'; put 'put ''dyJVbnN1cHBvcnRlZCB0eXBlICIrVS50eXBlfX19KCksd2g9ZnVuY3Rpb24oKXt2YXIgZT1GYSgidCIpLHQ9RmEoInJQciIpO2Z1bmN0aW9uIHIoaSl7dmFyIHM9aS5tYXRjaChlKTtpZighcylyZXR1cm57dDoicyIsdjoiIn07dmFyIGY9e3Q6InMiLHY6SWUoc1sxXSl9LGM9aS5tYXRjaCh0''@;'; put 'put ''KTtyZXR1cm4gYyYmKGYucz1mdW5jdGlvbiBfaChlKXt2YXIgdD17fSxyPWUubWF0Y2godnIpLGE9MCxuPSExO2lmKHIpZm9yKDthIT1yLmxlbmd0aDsrK2Epe3ZhciBpPW1lKHJbYV0pO3N3aXRjaChpWzBdLnJlcGxhY2UoL1x3KjovZywiIikpe2Nhc2UiPGNvbmRlbnNlIjpjYXNlIjxleHRl''@;'; put 'put ''bmQiOmJyZWFrO2Nhc2UiPHNoYWRvdyI6aWYoIWkudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+Ijp0LnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PWkudmFsKWJyZWFrO3QuY3A9TDBbcGFyc2VJbnQoaS52''@;'; put 'put ''YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZighaS52YWwpYnJlYWs7Y2FzZSI8b3V0bGluZT4iOmNhc2UiPG91dGxpbmUvPiI6dC5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8L291dGxpbmU+IjpicmVhaztjYXNlIjxyRm9udCI6dC5uYW1lPWkudmFsO2JyZWFrO2Nhc2UiPHN6Ijp0LnN6''@;'; put 'put ''PWkudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYoIWkudmFsKWJyZWFrO2Nhc2UiPHN0cmlrZT4iOmNhc2UiPHN0cmlrZS8+Ijp0LnN0cmlrZT0xO2JyZWFrO2Nhc2UiPC9zdHJpa2U+IjpicmVhaztjYXNlIjx1IjppZighaS52YWwpYnJlYWs7c3dpdGNoKGkudmFsKXtjYXNlImRvdWJsZSI6''@;'; put 'put ''dC51dmFsPSJkb3VibGUiO2JyZWFrO2Nhc2Uic2luZ2xlQWNjb3VudGluZyI6dC51dmFsPSJzaW5nbGUtYWNjb3VudGluZyI7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjp0LnV2YWw9ImRvdWJsZS1hY2NvdW50aW5nIn1jYXNlIjx1PiI6Y2FzZSI8dS8+Ijp0LnU9MTticmVhaztjYXNl''@;'; put 'put ''IjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09aS52YWwpYnJlYWs7Y2FzZSI8Yj4iOmNhc2UiPGIvPiI6dC5iPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjppZigiMCI9PWkudmFsKWJyZWFrO2Nhc2UiPGk+IjpjYXNlIjxpLz4iOnQuaT0xO2JyZWFrO2Nhc2UiPC9pPiI6''@;'; put 'put ''YnJlYWs7Y2FzZSI8Y29sb3IiOmkucmdiJiYodC5jb2xvcj1pLnJnYi5zbGljZSgyLDgpKTticmVhaztjYXNlIjxjb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmJyZWFrO2Nhc2UiPGZhbWlseSI6dC5mYW1pbHk9aS52YWw7YnJlYWs7Y2FzZSI8ZmFtaWx5PiI6Y2FzZSI8''@;'; put 'put ''ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOnQudmFsaWduPWkudmFsO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbj4iOmNhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6Y2FzZSI8c2NoZW1lIjpjYXNlIjxzY2hlbWU+IjpjYXNlIjxzY2hl''@;'; put 'put ''bWUvPiI6Y2FzZSI8L3NjaGVtZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6bj0hMDticmVhaztjYXNlIjwvZXh0PiI6bj0hMTticmVhaztkZWZhdWx0OmlmKDQ3IT09aVswXS5jaGFyQ29kZUF0KDEpJiYhbil0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK2lbMF0pfX1yZXR1cm4gdH0oY1sxXSkpLGZ9dmFyIGE9LzwoPzpcdys6KT9yPi9nLG49LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZShhLCIiKS5zcGxpdChuKS5tYXAocikuZmls''@;'; put 'put ''dGVyKGZ1bmN0aW9uKGYpe3JldHVybiBmLnZ9KX19KCksa2g9ZnVuY3Rpb24oKXt2YXIgdD0vKFxyXG58XG4pL2c7ZnVuY3Rpb24gYShuKXt2YXIgaT1bW10sbi52LFtdXTtyZXR1cm4gbi52PyhuLnMmJmZ1bmN0aW9uIHIobixpLHMpe3ZhciBmPVtdO24udSYmZi5wdXNoKCJ0ZXh0LWRlY29y''@;'; put 'put ''YXRpb246IHVuZGVybGluZTsiKSxuLnV2YWwmJmYucHVzaCgidGV4dC11bmRlcmxpbmUtc3R5bGU6IituLnV2YWwrIjsiKSxuLnN6JiZmLnB1c2goImZvbnQtc2l6ZToiK24uc3orInB0OyIpLG4ub3V0bGluZSYmZi5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxuLnNoYWRvdyYmZi5w''@;'; put 'put ''dXNoKCJ0ZXh0LXNoYWRvdzogYXV0bzsiKSxpLnB1c2goJzxzcGFuIHN0eWxlPSInK2Yuam9pbigiIikrJyI+Jyksbi5iJiYoaS5wdXNoKCI8Yj4iKSxzLnB1c2goIjwvYj4iKSksbi5pJiYoaS5wdXNoKCI8aT4iKSxzLnB1c2goIjwvaT4iKSksbi5zdHJpa2UmJihpLnB1c2goIjxzPiIpLHMu''@;'; put 'put ''cHVzaCgiPC9zPiIpKTt2YXIgYz1uLnZhbGlnbnx8IiI7InN1cGVyc2NyaXB0Ij09Y3x8InN1cGVyIj09Yz9jPSJzdXAiOiJzdWJzY3JpcHQiPT1jJiYoYz0ic3ViIiksIiIhPWMmJihpLnB1c2goIjwiK2MrIj4iKSxzLnB1c2goIjwvIitjKyI+IikpLHMucHVzaCgiPC9zcGFuPiIpfShuLnMs''@;'; put 'put ''aVswXSxpWzJdKSxpWzBdLmpvaW4oIiIpK2lbMV0ucmVwbGFjZSh0LCI8YnIvPiIpK2lbMl0uam9pbigiIikpOiIifXJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gaS5tYXAoYSkuam9pbigiIil9fSgpLEVoPS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLFRoPS88''@;'; put 'put ''KD86XHcrOik/cj4vLFNoPS88KD86XHcrOik/clBoLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT9yUGg+L2c7ZnVuY3Rpb24gU24oZSx0KXt2YXIgcj0hdHx8dC5jZWxsSFRNTCxhPXt9O3JldHVybiBlPyhlLm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5dKj4vKT8oYS50PUllKEJlKGUuc2xp''@;'; put 'put ''Y2UoZS5pbmRleE9mKCI+IikrMSkuc3BsaXQoLzxcLyg/Olx3KzopP3Q+LylbMF18fCIiKSksYS5yPUJlKGUpLHImJihhLmg9JDAoYS50KSkpOmUubWF0Y2goVGgpJiYoYS5yPUJlKGUpLGEudD1JZShCZSgoZS5yZXBsYWNlKFNoLCIiKS5tYXRjaChFaCl8fFtdKS5qb2luKCIiKS5yZXBsYWNl''@;'; put 'put ''KHZyLCIiKSkpLHImJihhLmg9a2god2goYS5yKSkpKSxhKTp7dDoiIn19dmFyIEZoPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+Lyx5aD0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLEFoPS88XC8oPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vO2Z1''@;'; put 'put ''bmN0aW9uIG5mKGUpe2lmKHR5cGVvZiBPZTwidSIpcmV0dXJuIE9lLnV0aWxzLmVuY29kZShSdCxlKTtmb3IodmFyIHQ9W10scj1lLnNwbGl0KCIiKSxhPTA7YTxyLmxlbmd0aDsrK2EpdFthXT1yW2FdLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHR9ZnVuY3Rpb24gZHQoZSx0KXt2YXIgcj17fTty''@;'; put 'put ''ZXR1cm4gci5NYWpvcj1lLnJlYWRfc2hpZnQoMiksci5NaW5vcj1lLnJlYWRfc2hpZnQoMiksdD49NCYmKGUubCs9dC00KSxyfWZ1bmN0aW9uIExoKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1lLmwrdC00LGE9e30sbj1lLnJlYWRfc2hpZnQoNCksaT1bXTtuLS0gPjA7KWkucHVz''@;'; put 'put ''aCh7dDplLnJlYWRfc2hpZnQoNCksdjplLnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7aWYoYS5uYW1lPWUucmVhZF9zaGlmdCgwLCJscHA0IiksYS5jb21wcz1pLGUubCE9cil0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTogIitlLmwrIiAhPSAiK3IpO3JldHVybiBhfWZ1''@;'; put 'put ''bmN0aW9uIHNmKGUsdCl7dmFyIHI9ZS5sK3QsYT17fTthLkZsYWdzPTYzJmUucmVhZF9zaGlmdCg0KSxlLmwrPTQsYS5BbGdJRD1lLnJlYWRfc2hpZnQoNCk7dmFyIG49ITE7c3dpdGNoKGEuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4Om49MzY9PWEuRmxhZ3M7YnJl''@;'; put 'put ''YWs7Y2FzZSAyNjYyNTpuPTQ9PWEuRmxhZ3M7YnJlYWs7Y2FzZSAwOm49MTY9PWEuRmxhZ3N8fDQ9PWEuRmxhZ3N8fDM2PT1hLkZsYWdzO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkIGVuY3J5cHRpb24gYWxnb3JpdGhtOiAiK2EuQWxnSUR9aWYoIW4pdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21hdGNoIik7cmV0dXJuIGEuQWxnSURIYXNoPWUucmVhZF9zaGlmdCg0KSxhLktleVNpemU9ZS5yZWFkX3NoaWZ0KDQpLGEuUHJvdmlkZXJUeXBlPWUucmVhZF9zaGlmdCg0KSxlLmwrPTgsYS5DU1BOYW1lPWUucmVhZF9zaGlmdChyLWUubD4+''@;'; put 'put ''MSwidXRmMTZsZSIpLGUubD1yLGF9ZnVuY3Rpb24gZmYoZSx0KXt2YXIgcj17fSxhPWUubCt0O3JldHVybiBlLmwrPTQsci5TYWx0PWUuc2xpY2UoZS5sLGUubCsxNiksZS5sKz0xNixyLlZlcmlmaWVyPWUuc2xpY2UoZS5sLGUubCsxNiksZS5sKz0xNixlLnJlYWRfc2hpZnQoNCksci5WZXJp''@;'; put 'put ''Zmllckhhc2g9ZS5zbGljZShlLmwsYSksZS5sPWEscn1mdW5jdGlvbiBWaChlKXtpZigzNiE9KDYzJmUucmVhZF9zaGlmdCg0KSkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uSW5mbyBtaXNtYXRjaCIpO3ZhciByPWUucmVhZF9zaGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOnNmKGUsciks''@;'; put 'put ''djpmZihlLGUubGVuZ3RoLWUubCl9fWZ1bmN0aW9uIFhoKCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIEdoKGUpe3ZhciB0PVsic2FsdFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNp''@;'; put 'put ''emUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTtlLmwrPTQ7dmFyIHI9ZS5yZWFkX3NoaWZ0KGUubGVuZ3RoLWUubCwidXRmOCIpLGE9e307cmV0dXJuIHIucmVwbGFjZSh2cixmdW5jdGlvbihpKXt2YXIgcz1tZShpKTtz''@;'; put 'put ''d2l0Y2gocnQoc1swXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5cHRpb24iOmNhc2UiPC9lbmNyeXB0aW9uPiI6Y2FzZSI8L2tleUVuY3J5cHRvcnM+IjpjYXNlIjwva2V5RW5jcnlwdG9yPiI6YnJlYWs7Y2FzZSI8a2V5RGF0YSI6dC5mb3JFYWNoKGZ1bmN0aW9uKGYpe2FbZl09c1tmXX0p''@;'; put 'put ''O2JyZWFrO2Nhc2UiPGRhdGFJbnRlZ3JpdHkiOmEuZW5jcnlwdGVkSG1hY0tleT1zLmVuY3J5cHRlZEhtYWNLZXksYS5lbmNyeXB0ZWRIbWFjVmFsdWU9cy5lbmNyeXB0ZWRIbWFjVmFsdWU7YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMiOmEuZW5jcz1b''@;'; put 'put ''XTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOmEudXJpPXMudXJpO2JyZWFrO2Nhc2UiPGVuY3J5cHRlZEtleSI6YS5lbmNzLnB1c2gocyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBzWzBdfX0pLGF9dmFyIGNmPWZ1bmN0aW9uKCl7dmFyIGU9WzE4NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwx''@;'; put 'put ''MjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sdD1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwyMDE2M10scj1bNDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUs''@;'; put 'put ''NjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIxODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcw''@;'; put 'put ''LDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0''@;'; put 'put ''OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIw''@;'; put 'put ''LDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0sbj1mdW5jdGlvbihzLGYpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gMjU1JihzLzJ8MTI4KnMpfShzXmYpfTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHZhciBmPW5mKHMpLGM9ZnVu''@;'; put 'put ''Y3Rpb24ocyl7Zm9yKHZhciBmPXRbcy5sZW5ndGgtMV0sYz0xMDQsbz1zLmxlbmd0aC0xO28+PTA7LS1vKWZvcih2YXIgbD1zW29dLGg9MDs3IT1oOysraCk2NCZsJiYoZl49cltjXSksbCo9MiwtLWM7cmV0dXJuIGZ9KGYpLG89Zi5sZW5ndGgsbD1fdCgxNiksaD0wOzE2IT1oOysraClsW2hd''@;'; put 'put ''PTA7dmFyIHY7Zm9yKCEoMSZ+bykmJihsW29dPW4oZVswXSxjPj44KSxsWy0tb109bihmW2YubGVuZ3RoLTFdLDI1NSZjKSk7bz4wOylsWy0tb109bihmW29dLGM+PjgpLGxbLS1vXT1uKGZbb10sMjU1JmMpO2ZvcihvPTE1LHY9MTUtZi5sZW5ndGg7dj4wOylsW29dPW4oZVt2XSxjPj44KSwt''@;'; put 'put ''LXYsbFstLW9dPW4oZltvXSwyNTUmYyksLS1vLC0tdjtyZXR1cm4gbH19KCk7dmFyIG9mPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShuLGkpe3N3aXRjaChpLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gdChPcihuKSxpKTtjYXNlImJpbmFyeSI6cmV0dXJuIHQobixpKTtjYXNlImJ1ZmZlciI6''@;'; put 'put ''cmV0dXJuIHQoU2UmJkJ1ZmZlci5pc0J1ZmZlcihuKT9uLnRvU3RyaW5nKCJiaW5hcnkiKTp3dChuKSxpKTtjYXNlImFycmF5IjpyZXR1cm4gdChQdChuKSxpKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIraS50eXBlKX1mdW5jdGlvbiB0KG4saSl7dmFyIGY9KGl8fHt9''@;'; put 'put ''KS5kZW5zZT9bXTp7fSxjPW4ubWF0Y2goL1xcdHJvd2QuKj9cXHJvd1xiL2cpO2lmKCFjLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlJURiBtaXNzaW5nIHRhYmxlIik7dmFyIG89e3M6e2M6MCxyOjB9LGU6e2M6MCxyOmMubGVuZ3RoLTF9fTtyZXR1cm4gYy5mb3JFYWNoKGZ1bmN0aW9uKGws''@;'; put 'put ''aCl7QXJyYXkuaXNBcnJheShmKSYmKGZbaF09W10pO2Zvcih2YXIgdix4PS9cXFx3K1xiL2csZD0wLHU9LTE7dj14LmV4ZWMobCk7KXtpZigiXFxjZWxsIj09PXZbMF0pe3ZhciBwPWwuc2xpY2UoZCx4Lmxhc3RJbmRleC12WzBdLmxlbmd0aCk7aWYoIiAiPT1wWzBdJiYocD1wLnNsaWNlKDEp''@;'; put 'put ''KSwrK3UscC5sZW5ndGgpe3ZhciBrPXt2OnAsdDoicyJ9O0FycmF5LmlzQXJyYXkoZik/ZltoXVt1XT1rOmZbZ2Uoe3I6aCxjOnV9KV09a319ZD14Lmxhc3RJbmRleH11Pm8uZS5jJiYoby5lLmM9dSl9KSxmWyIhcmVmIl09d2UobyksZn1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gcihu''@;'; put 'put ''LGkpe3JldHVybiBGdChlKG4saSksaSl9LHRvX3NoZWV0OmUsZnJvbV9zaGVldDpmdW5jdGlvbiBhKG4pe2Zvcih2YXIgZixpPVsie1xccnRmMVxcYW5zaSJdLHM9RGUoblsiIXJlZiJdKSxjPUFycmF5LmlzQXJyYXkobiksbz1zLnMucjtvPD1zLmUucjsrK28pe2kucHVzaCgiXFx0cm93ZFxc''@;'; put 'put ''dHJhdXRvZml0MSIpO2Zvcih2YXIgbD1zLnMuYztsPD1zLmUuYzsrK2wpaS5wdXNoKCJcXGNlbGx4IisobCsxKSk7Zm9yKGkucHVzaCgiXFxwYXJkXFxpbnRibCIpLGw9cy5zLmM7bDw9cy5lLmM7KytsKXt2YXIgaD1nZSh7cjpvLGM6bH0pOyhmPWM/KG5bb118fFtdKVtsXTpuW2hdKSYmKG51''@;'; put 'put ''bGwhPWYudnx8Zi5mJiYhZi5GKSYmKGkucHVzaCgiICIrKGYud3x8KGF0KGYpLGYudykpKSxpLnB1c2goIlxcY2VsbCIpKX1pLnB1c2goIlxccGFyZFxcaW50YmxcXHJvdyIpfXJldHVybiBpLmpvaW4oIiIpKyJ9In19fSgpO2Z1bmN0aW9uIGJhKGUpe2Zvcih2YXIgdD0wLHI9MTszIT10Oysr''@;'; put 'put ''dClyPTI1NipyKyhlW3RdPjI1NT8yNTU6ZVt0XTwwPzA6ZVt0XSk7cmV0dXJuIHIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gVDAoZSx0KXtpZigwPT09dClyZXR1cm4gZTt2YXIgcj1mdW5jdGlvbiBRaChlKXt2YXIgdD1lWzBdLzI1NSxyPWVbMV0vMjU1''@;'; put 'put ''LGE9ZVsyXS8yNTUsbj1NYXRoLm1heCh0LHIsYSksaT1NYXRoLm1pbih0LHIsYSkscz1uLWk7aWYoMD09PXMpcmV0dXJuWzAsMCx0XTt2YXIgYyxmPTAsbz1uK2k7c3dpdGNoKGM9cy8obz4xPzItbzpvKSxuKXtjYXNlIHQ6Zj0oKHItYSkvcys2KSU2O2JyZWFrO2Nhc2UgcjpmPShhLXQpL3Mr''@;'; put 'put ''MjticmVhaztjYXNlIGE6Zj0odC1yKS9zKzR9cmV0dXJuW2YvNixjLG8vMl19KGZ1bmN0aW9uIFpoKGUpe3ZhciB0PWUuc2xpY2UoIiMiPT09ZVswXT8xOjApLnNsaWNlKDAsNik7cmV0dXJuW3BhcnNlSW50KHQuc2xpY2UoMCwyKSwxNikscGFyc2VJbnQodC5zbGljZSgyLDQpLDE2KSxwYXJz''@;'; put 'put ''ZUludCh0LnNsaWNlKDQsNiksMTYpXX0oZSkpO3JldHVybiByWzJdPXQ8MD9yWzJdKigxK3QpOjEtKDEtclsyXSkqKDEtdCksYmEoZnVuY3Rpb24gZTEoZSl7dmFyIGMscj1lWzFdLGE9ZVsyXSxuPTIqciooYTwuNT9hOjEtYSksaT1hLW4vMixzPVtpLGksaV0sZj02KmVbMF07aWYoMCE9PXIp''@;'; put 'put ''c3dpdGNoKDB8Zil7Y2FzZSAwOmNhc2UgNjpjPW4qZixzWzBdKz1uLHNbMV0rPWM7YnJlYWs7Y2FzZSAxOnNbMF0rPWM9biooMi1mKSxzWzFdKz1uO2JyZWFrO2Nhc2UgMjpjPW4qKGYtMiksc1sxXSs9bixzWzJdKz1jO2JyZWFrO2Nhc2UgMzpzWzFdKz1jPW4qKDQtZiksc1syXSs9bjticmVh''@;'; put 'put ''aztjYXNlIDQ6Yz1uKihmLTQpLHNbMl0rPW4sc1swXSs9YzticmVhaztjYXNlIDU6c1syXSs9Yz1uKig2LWYpLHNbMF0rPW59Zm9yKHZhciBvPTA7MyE9bzsrK28pc1tvXT1NYXRoLnJvdW5kKDI1NSpzW29dKTtyZXR1cm4gc30ocikpfXZhciBsZj02LHIxPTE1LHQxPTEsd3I9bGY7ZnVuY3Rp''@;'; put 'put ''b24gUGEoZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUrTWF0aC5yb3VuZCgxMjgvd3IpLzI1Nikqd3IpfWZ1bmN0aW9uIExhKGUpe3JldHVybiBNYXRoLmZsb29yKChlLTUpL3dyKjEwMCsuNSkvMTAwfWZ1bmN0aW9uIFMwKGUpe3JldHVybiBNYXRoLnJvdW5kKChlKndyKzUpL3dyKjI1NikvMjU2''@;'; put 'put ''fWZ1bmN0aW9uIHluKGUpe3JldHVybiBTMChMYShQYShlKSkpfWZ1bmN0aW9uIEFuKGUpe3ZhciB0PU1hdGguYWJzKGUteW4oZSkpLHI9d3I7aWYodD4uMDA1KWZvcih3cj10MTt3cjxyMTsrK3dyKU1hdGguYWJzKGUteW4oZSkpPD10JiYodD1NYXRoLmFicyhlLXluKGUpKSxyPXdyKTt3cj1y''@;'; put 'put ''fWZ1bmN0aW9uIEt0KGUpe2Uud2lkdGg/KGUud3B4PVBhKGUud2lkdGgpLGUud2NoPUxhKGUud3B4KSxlLk1EVz13cik6ZS53cHg/KGUud2NoPUxhKGUud3B4KSxlLndpZHRoPVMwKGUud2NoKSxlLk1EVz13cik6Im51bWJlciI9PXR5cGVvZiBlLndjaCYmKGUud2lkdGg9UzAoZS53Y2gpLGUu''@;'; put 'put ''d3B4PVBhKGUud2lkdGgpLGUuTURXPXdyKSxlLmN1c3RvbVdpZHRoJiZkZWxldGUgZS5jdXN0b21XaWR0aH12YXIgdWY9OTY7ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIDk2KmUvdWZ9ZnVuY3Rpb24gb2EoZSl7cmV0dXJuIGUqdWYvOTZ9dmFyIG4xPXtOb25lOiJub25lIixTb2xpZDoic29saWQi''@;'; put 'put ''LEdyYXk1MDoibWVkaXVtR3JheSIsR3JheTc1OiJkYXJrR3JheSIsR3JheTI1OiJsaWdodEdyYXkiLEhvcnpTdHJpcGU6ImRhcmtIb3Jpem9udGFsIixWZXJ0U3RyaXBlOiJkYXJrVmVydGljYWwiLFJldmVyc2VEaWFnU3RyaXBlOiJkYXJrRG93biIsRGlhZ1N0cmlwZToiZGFya1VwIixEaWFn''@;'; put 'put ''Q3Jvc3M6ImRhcmtHcmlkIixUaGlja0RpYWdDcm9zczoiZGFya1RyZWxsaXMiLFRoaW5Ib3J6U3RyaXBlOiJsaWdodEhvcml6b250YWwiLFRoaW5WZXJ0U3RyaXBlOiJsaWdodFZlcnRpY2FsIixUaGluUmV2ZXJzZURpYWdTdHJpcGU6ImxpZ2h0RG93biIsVGhpbkhvcnpDcm9zczoibGlnaHRH''@;'; put 'put ''cmlkIn0sRjA9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRlcklkIiwieGZJZCJdLHkwPVsiYXBwbHlBbGlnbm1lbnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIsImFwcGx5Rm9udCIsImFwcGx5TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0aW9uIiwicGl2b3RCdXR0''@;'; put 'put ''b24iLCJxdW90ZVByZWZpeCJdLGgxPWZ1bmN0aW9uKCl7dmFyIHQ9LzwoPzpcdys6KT9udW1GbXRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP251bUZtdHM+LyxyPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZzPi8sYT0vPCg/Olx3Kzop''@;'; put 'put ''P2ZpbGxzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGxzPi8sbj0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnRzPi8saT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihmLGMsbyl7dmFyIGgsbD17fTtyZXR1cm4gZj8oKGg9KGY9Zi5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaCh0KSkmJmZ1bmN0aW9uIGMxKGUsdCxyKXt0Lk51bWJlckZtdD1bXTtm''@;'; put 'put ''b3IodmFyIGE9JGUocGUpLG49MDtuPGEubGVuZ3RoOysrbil0Lk51bWJlckZtdFthW25dXT1wZVthW25dXTt2YXIgaT1lWzBdLm1hdGNoKHZyKTtpZihpKWZvcihuPTA7bjxpLmxlbmd0aDsrK24pe3ZhciBzPW1lKGlbbl0pO3N3aXRjaChydChzWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8''@;'; put 'put ''L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgZj1JZShCZShzLmZvcm1hdENvZGUpKSxjPXBhcnNlSW50KHMubnVtRm10SWQsMTApO2lmKHQuTnVtYmVyRm10W2NdPWYsYz4wKXtpZihjPjM5''@;'; put 'put ''Mil7Zm9yKGM9MzkyO2M+NjAmJm51bGwhPXQuTnVtYmVyRm10W2NdOy0tYyk7dC5OdW1iZXJGbXRbY109Zn1ldChmLGMpfWJyZWFrO2RlZmF1bHQ6aWYoci5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzWzBdKyIgaW4gbnVtRm10cyIpfX19KGgsbCxvKSwoaD1mLm1hdGNo''@;'; put 'put ''KG4pKSYmZnVuY3Rpb24gZjEoZSx0LHIsYSl7dC5Gb250cz1bXTt2YXIgbj17fSxpPSExOyhlWzBdLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9bWUocyk7c3dpdGNoKHJ0KGZbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+Ijpj''@;'; put 'put ''YXNlIjxmb250IjpjYXNlIjxmb250PiI6Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4iOmNhc2UiPHN6Lz4iOmNhc2UiPC9zej4iOmNhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpjYXNlIjxzY2hlbWUvPiI6Y2Fz''@;'; put 'put ''ZSI8L3NjaGVtZT4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+Ijp0LkZvbnRzLnB1c2gobiksbj17fTticmVhaztjYXNlIjxuYW1lIjpmLnZh''@;'; put 'put ''bCYmKG4ubmFtZT1CZShmLnZhbCkpO2JyZWFrO2Nhc2UiPGIiOm4uYm9sZD1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOm4uYm9sZD0xO2JyZWFrO2Nhc2UiPGkiOm4uaXRhbGljPWYudmFsP1dlKGYudmFsKToxO2JyZWFrO2Nhc2UiPGkvPiI6bi5pdGFsaWM9MTticmVhaztj''@;'; put 'put ''YXNlIjx1Ijpzd2l0Y2goZi52YWwpe2Nhc2Uibm9uZSI6bi51bmRlcmxpbmU9MDticmVhaztjYXNlInNpbmdsZSI6bi51bmRlcmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6bi51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOm4udW5kZXJsaW5lPTMzO2JyZWFrO2Nh''@;'; put 'put ''c2UiZG91YmxlQWNjb3VudGluZyI6bi51bmRlcmxpbmU9MzR9YnJlYWs7Y2FzZSI8dS8+IjpuLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiPHN0cmlrZSI6bi5zdHJpa2U9Zi52YWw/V2UoZi52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOm4uc3RyaWtlPTE7YnJlYWs7Y2FzZSI8b3V0bGlu''@;'; put 'put ''ZSI6bi5vdXRsaW5lPWYudmFsP1dlKGYudmFsKToxO2JyZWFrO2Nhc2UiPG91dGxpbmUvPiI6bi5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8c2hhZG93IjpuLnNoYWRvdz1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6bi5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5z''@;'; put 'put ''ZSI6bi5jb25kZW5zZT1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpuLmNvbmRlbnNlPTE7YnJlYWs7Y2FzZSI8ZXh0ZW5kIjpuLmV4dGVuZD1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxleHRlbmQvPiI6bi5leHRlbmQ9MTticmVhaztjYXNlIjxzeiI6''@;'; put 'put ''Zi52YWwmJihuLnN6PStmLnZhbCk7YnJlYWs7Y2FzZSI8dmVydEFsaWduIjpmLnZhbCYmKG4udmVydEFsaWduPWYudmFsKTticmVhaztjYXNlIjxmYW1pbHkiOmYudmFsJiYobi5mYW1pbHk9cGFyc2VJbnQoZi52YWwsMTApKTticmVhaztjYXNlIjxzY2hlbWUiOmYudmFsJiYobi5zY2hlbWU9''@;'; put 'put ''Zi52YWwpO2JyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09Zi52YWwpYnJlYWs7Zi5jb2RlcGFnZT1MMFtwYXJzZUludChmLnZhbCwxMCldO2JyZWFrO2Nhc2UiPGNvbG9yIjppZihuLmNvbG9yfHwobi5jb2xvcj17fSksZi5hdXRvJiYobi5jb2xvci5hdXRvPVdlKGYuYXV0bykpLGYucmdi''@;'; put 'put ''KW4uY29sb3IucmdiPWYucmdiLnNsaWNlKC02KTtlbHNlIGlmKGYuaW5kZXhlZCl7bi5jb2xvci5pbmRleD1wYXJzZUludChmLmluZGV4ZWQsMTApO3ZhciBjPVZ0W24uY29sb3IuaW5kZXhdOzgxPT1uLmNvbG9yLmluZGV4JiYoYz1WdFsxXSksY3x8KGM9VnRbMV0pLG4uY29sb3IucmdiPWNb''@;'; put 'put ''MF0udG9TdHJpbmcoMTYpK2NbMV0udG9TdHJpbmcoMTYpK2NbMl0udG9TdHJpbmcoMTYpfWVsc2UgZi50aGVtZSYmKG4uY29sb3IudGhlbWU9cGFyc2VJbnQoZi50aGVtZSwxMCksZi50aW50JiYobi5jb2xvci50aW50PXBhcnNlRmxvYXQoZi50aW50KSksZi50aGVtZSYmci50aGVtZUVsZW1l''@;'; put 'put ''bnRzJiZyLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYobi5jb2xvci5yZ2I9VDAoci50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtuLmNvbG9yLnRoZW1lXS5yZ2Isbi5jb2xvci50aW50fHwwKSkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6aT0hMDticmVhaztj''@;'; put 'put ''YXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjppPSExO2JyZWFrO2RlZmF1bHQ6aWYoYSYmYS5XVEYmJiFpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZlswXSsiIGluIGZvbnRzIil9fSl9KGgsbCxjLG8pLChoPWYubWF0Y2goYSkpJiZmdW5jdGlvbiBzMShl''@;'; put 'put ''LHQscixhKXt0LkZpbGxzPVtdO3ZhciBuPXt9LGk9ITE7KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgZj1tZShzKTtzd2l0Y2gocnQoZlswXSkpe2Nhc2UiPGZpbGxzIjpjYXNlIjxmaWxscz4iOmNhc2UiPC9maWxscz4iOmNhc2UiPC9maWxsPiI6Y2FzZSI8''@;'; put 'put ''Z3JhZGllbnRGaWxsPiI6Y2FzZSI8cGF0dGVybkZpbGwvPiI6Y2FzZSI8L3BhdHRlcm5GaWxsPiI6Y2FzZSI8YmdDb2xvci8+IjpjYXNlIjwvYmdDb2xvcj4iOmNhc2UiPGZnQ29sb3IvPiI6Y2FzZSI8L2ZnQ29sb3I+IjpjYXNlIjxzdG9wIjpjYXNlIjxzdG9wLz4iOmNhc2UiPC9zdG9wPiI6''@;'; put 'put ''Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGZpbGw+IjpjYXNlIjxmaWxsIjpjYXNlIjxmaWxsLz4iOnQuRmlsbHMucHVzaChuPXt9KTticmVhaztjYXNlIjxn''@;'; put 'put ''cmFkaWVudEZpbGwiOmNhc2UiPC9ncmFkaWVudEZpbGw+Ijp0LkZpbGxzLnB1c2gobiksbj17fTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbCI6Y2FzZSI8cGF0dGVybkZpbGw+IjpmLnBhdHRlcm5UeXBlJiYobi5wYXR0ZXJuVHlwZT1mLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxiZ0NvbG9y''@;'; put 'put ''IjpuLmJnQ29sb3J8fChuLmJnQ29sb3I9e30pLGYuaW5kZXhlZCYmKG4uYmdDb2xvci5pbmRleGVkPXBhcnNlSW50KGYuaW5kZXhlZCwxMCkpLGYudGhlbWUmJihuLmJnQ29sb3IudGhlbWU9cGFyc2VJbnQoZi50aGVtZSwxMCkpLGYudGludCYmKG4uYmdDb2xvci50aW50PXBhcnNlRmxvYXQo''@;'; put 'put ''Zi50aW50KSksZi5yZ2ImJihuLmJnQ29sb3IucmdiPWYucmdiLnNsaWNlKC02KSk7YnJlYWs7Y2FzZSI8ZmdDb2xvciI6bi5mZ0NvbG9yfHwobi5mZ0NvbG9yPXt9KSxmLnRoZW1lJiYobi5mZ0NvbG9yLnRoZW1lPXBhcnNlSW50KGYudGhlbWUsMTApKSxmLnRpbnQmJihuLmZnQ29sb3IudGlu''@;'; put 'put ''dD1wYXJzZUZsb2F0KGYudGludCkpLG51bGwhPWYucmdiJiYobi5mZ0NvbG9yLnJnYj1mLnJnYi5zbGljZSgtNikpO2JyZWFrO2Nhc2UiPGV4dCI6aT0hMDticmVhaztjYXNlIjwvZXh0PiI6aT0hMTticmVhaztkZWZhdWx0OmlmKGEmJmEuV1RGJiYhaSl0aHJvdyBuZXcgRXJyb3IoInVucmVj''@;'; put 'put ''b2duaXplZCAiK2ZbMF0rIiBpbiBmaWxscyIpfX0pfShoLGwsMCxvKSwoaD1mLm1hdGNoKGkpKSYmZnVuY3Rpb24gaTEoZSx0LHIsYSl7dC5Cb3JkZXJzPVtdO3ZhciBuPXt9LGk9ITE7KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgZj1tZShzKTtzd2l0Y2go''@;'; put 'put ''cnQoZlswXSkpe2Nhc2UiPGJvcmRlcnMiOmNhc2UiPGJvcmRlcnM+IjpjYXNlIjwvYm9yZGVycz4iOmNhc2UiPC9ib3JkZXI+IjpjYXNlIjxsZWZ0Lz4iOmNhc2UiPGxlZnQiOmNhc2UiPGxlZnQ+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPHJpZ2h0IjpjYXNlIjxyaWdo''@;'; put 'put ''dD4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjx0b3AiOmNhc2UiPHRvcD4iOmNhc2UiPC90b3A+IjpjYXNlIjxib3R0b20vPiI6Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpjYXNlIjwvYm90dG9tPiI6Y2FzZSI8ZGlhZ29uYWwiOmNhc2UiPGRpYWdvbmFsPiI6Y2Fz''@;'; put 'put ''ZSI8ZGlhZ29uYWwvPiI6Y2FzZSI8L2RpYWdvbmFsPiI6Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9yaXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8L2hvcml6b250YWw+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+IjpjYXNl''@;'; put 'put ''IjwvdmVydGljYWw+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yPiI6Y2FzZSI8Y29sb3IvPiI6Y2Fz''@;'; put 'put ''ZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6bj17fSxmLmRpYWdvbmFsVXAmJihuLmRpYWdvbmFsVXA9V2UoZi5kaWFnb25hbFVwKSksZi5kaWFn''@;'; put 'put ''b25hbERvd24mJihuLmRpYWdvbmFsRG93bj1XZShmLmRpYWdvbmFsRG93bikpLHQuQm9yZGVycy5wdXNoKG4pO2JyZWFrO2Nhc2UiPGV4dCI6aT0hMDticmVhaztjYXNlIjwvZXh0PiI6aT0hMTticmVhaztkZWZhdWx0OmlmKGEmJmEuV1RGJiYhaSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2du''@;'; put 'put ''aXplZCAiK2ZbMF0rIiBpbiBib3JkZXJzIil9fSl9KGgsbCwwLG8pLChoPWYubWF0Y2gocikpJiZmdW5jdGlvbiBsMShlLHQscil7dC5DZWxsWGY9W107dmFyIGEsbj0hMTsoZVswXS5tYXRjaCh2cil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPW1lKGkpLGY9MDtzd2l0Y2gocnQo''@;'; put 'put ''c1swXSkpe2Nhc2UiPGNlbGxYZnMiOmNhc2UiPGNlbGxYZnM+IjpjYXNlIjxjZWxsWGZzLz4iOmNhc2UiPC9jZWxsWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPHByb3RlY3Rpb24iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNl''@;'; put 'put ''IjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShhPXMpWzBdLGY9MDtmPEYwLmxlbmd0aDsrK2YpYVtGMFtmXV0mJihhW0YwW2ZdXT1wYXJzZUludChhW0YwW2ZdXSwxMCkpO2ZvcihmPTA7Zjx5MC5s''@;'; put 'put ''ZW5ndGg7KytmKWFbeTBbZl1dJiYoYVt5MFtmXV09V2UoYVt5MFtmXV0pKTtpZih0Lk51bWJlckZtdCYmYS5udW1GbXRJZD4zOTIpZm9yKGY9MzkyO2Y+NjA7LS1mKWlmKHQuTnVtYmVyRm10W2EubnVtRm10SWRdPT10Lk51bWJlckZtdFtmXSl7YS5udW1GbXRJZD1mO2JyZWFrfXQuQ2VsbFhm''@;'; put 'put ''LnB1c2goYSk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIGM9e307cy52ZXJ0aWNhbCYmKGMudmVydGljYWw9cy52ZXJ0aWNhbCkscy5ob3Jpem9udGFsJiYoYy5ob3Jpem9udGFsPXMuaG9yaXpvbnRhbCksbnVsbCE9cy50ZXh0Um90YXRpb24mJihjLnRl''@;'; put 'put ''eHRSb3RhdGlvbj1zLnRleHRSb3RhdGlvbikscy5pbmRlbnQmJihjLmluZGVudD1zLmluZGVudCkscy53cmFwVGV4dCYmKGMud3JhcFRleHQ9V2Uocy53cmFwVGV4dCkpLGEuYWxpZ25tZW50PWM7YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8ZXh0IjpuPSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Y2FzZSI8L2V4dD4iOm49ITE7YnJlYWs7ZGVmYXVsdDppZihyJiZyLldURiYmIW4pdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzWzBdKyIgaW4gY2VsbFhmcyIpfX0pfShoLGwsbyksbCk6bH19KCksZzE9cHIsdzE9cHIsUDE9WyI8L2E6''@;'; put 'put ''bHQxPiIsIjwvYTpkazE+IiwiPC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTphY2NlbnQyPiIsIjwvYTphY2NlbnQzPiIsIjwvYTphY2NlbnQ0PiIsIjwvYTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8L2E6Zm9sSGxpbms+Il07ZnVuY3Rp''@;'; put 'put ''b24gTDEoZSx0LHIpe3QudGhlbWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIGE9e307KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1tZShuKTtzd2l0Y2goaVswXSl7Y2FzZSI8YTpjbHJTY2hlbWUiOmNhc2UiPC9hOmNsclNjaGVtZT4iOmJyZWFrO2Nh''@;'; put 'put ''c2UiPGE6c3JnYkNsciI6YS5yZ2I9aS52YWw7YnJlYWs7Y2FzZSI8YTpzeXNDbHIiOmEucmdiPWkubGFzdENscjticmVhaztjYXNlIjxhOmRrMT4iOmNhc2UiPC9hOmRrMT4iOmNhc2UiPGE6bHQxPiI6Y2FzZSI8L2E6bHQxPiI6Y2FzZSI8YTpkazI+IjpjYXNlIjwvYTpkazI+IjpjYXNlIjxh''@;'; put 'put ''Omx0Mj4iOmNhc2UiPC9hOmx0Mj4iOmNhc2UiPGE6YWNjZW50MT4iOmNhc2UiPC9hOmFjY2VudDE+IjpjYXNlIjxhOmFjY2VudDI+IjpjYXNlIjwvYTphY2NlbnQyPiI6Y2FzZSI8YTphY2NlbnQzPiI6Y2FzZSI8L2E6YWNjZW50Mz4iOmNhc2UiPGE6YWNjZW50ND4iOmNhc2UiPC9hOmFjY2Vu''@;'; put 'put ''dDQ+IjpjYXNlIjxhOmFjY2VudDU+IjpjYXNlIjwvYTphY2NlbnQ1PiI6Y2FzZSI8YTphY2NlbnQ2PiI6Y2FzZSI8L2E6YWNjZW50Nj4iOmNhc2UiPGE6aGxpbms+IjpjYXNlIjwvYTpobGluaz4iOmNhc2UiPGE6Zm9sSGxpbms+IjpjYXNlIjwvYTpmb2xIbGluaz4iOiIvIj09PWlbMF0uY2hh''@;'; put 'put ''ckF0KDEpPyh0LnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1AxLmluZGV4T2YoaVswXSldPWEsYT17fSk6YS5uYW1lPWlbMF0uc2xpY2UoMyxpWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKHImJnIuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIraVswXSsiIGluIGNs''@;'; put 'put ''clNjaGVtZSIpfX0pfWZ1bmN0aW9uIEIxKCl7fWZ1bmN0aW9uIE0xKCl7fXZhciBVMT0vPGE6Y2xyU2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpjbHJTY2hlbWU+LyxXMT0vPGE6Zm9udFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm9udFNjaGVtZT4vLEgxPS88YTpmbXRTY2hlbWUoW14+''@;'; put 'put ''XSopPltcc1xTXSo8XC9hOmZtdFNjaGVtZT4vLFgxPS88YTp0aGVtZUVsZW1lbnRzKFtePl0qKT5bXHNcU10qPFwvYTp0aGVtZUVsZW1lbnRzPi87ZnVuY3Rpb24gdmYoZSx0KXsoIWV8fDA9PT1lLmxlbmd0aCkmJihlPWZ1bmN0aW9uIERuKGUsdCl7aWYodCYmdC50aGVtZVhMU1gpcmV0dXJu''@;'; put 'put ''IHQudGhlbWVYTFNYO2lmKGUmJiJzdHJpbmciPT10eXBlb2YgZS5yYXcpcmV0dXJuIGUucmF3O3ZhciByPVtlcl07cmV0dXJuIHJbci5sZW5ndGhdPSc8YTp0aGVtZSB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFtZT0i''@;'; put 'put ''T2ZmaWNlIFRoZW1lIj4nLHJbci5sZW5ndGhdPSI8YTp0aGVtZUVsZW1lbnRzPiIscltyLmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPicscltyLmxlbmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsxPics''@;'; put 'put ''cltyLmxlbmd0aF09JzxhOmx0MT48YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxhc3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+JyxyW3IubGVuZ3RoXT0nPGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicscltyLmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0iRUVF''@;'; put 'put ''Q0UxIi8+PC9hOmx0Mj4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQxPjxhOnNyZ2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQz''@;'; put 'put ''PjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz48L2E6YWNjZW50Mz4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz48L2E6YWNjZW50ND4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50NT4n''@;'; put 'put ''LHJbci5sZW5ndGhdPSc8YTphY2NlbnQ2PjxhOnNyZ2JDbHIgdmFsPSJGNzk2NDYiLz48L2E6YWNjZW50Nj4nLHJbci5sZW5ndGhdPSc8YTpobGluaz48YTpzcmdiQ2xyIHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicscltyLmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPSI4''@;'; put 'put ''MDAwODAiLz48L2E6Zm9sSGxpbms+JyxyW3IubGVuZ3RoXT0iPC9hOmNsclNjaGVtZT4iLHJbci5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxyW3IubGVuZ3RoXT0iPGE6bWFqb3JGb250PiIscltyLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlhIi8+''@;'; put 'put ''JyxyW3IubGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicscltyLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLHJb''@;'; put 'put ''ci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJI''@;'; put 'put ''YW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBS''@;'; put 'put ''b21hbiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0i''@;'; put 'put ''VnJpbmRhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBl''@;'; put 'put ''ZmFjZT0iVHVuZ2EiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0''@;'; put 'put ''eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlh''@;'; put 'put ''Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9Ikdh''@;'; put 'put ''dXRhbWkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlh''@;'; put 'put ''IiB0eXBlZmFjZT0iS2FsaW5nYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+''@;'; put 'put ''JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxyW3IubGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLHJbci5sZW5ndGhd''@;'; put 'put ''PSI8YTptaW5vckZvbnQ+IixyW3IubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz4nLHJbci5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxyW3IubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0''@;'; put 'put ''eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5z''@;'; put 'put ''IiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+JyxyW3IubGVu''@;'; put 'put ''Z3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicscltyLmxl''@;'; put 'put ''bmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+Jyxy''@;'; put 'put ''W3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+''@;'; put 'put ''JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicscltyLmxlbmd0''@;'; put 'put ''aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3Nh''@;'; put 'put ''Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJE''@;'; put 'put ''b2tDaGFtcGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicscltyLmxlbmd0aF09''@;'; put 'put ''IjwvYTptaW5vckZvbnQ+IixyW3IubGVuZ3RoXT0iPC9hOmZvbnRTY2hlbWU+IixyW3IubGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxyW3IubGVuZ3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIscltyLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJw''@;'; put 'put ''aENsciIvPjwvYTpzb2xpZEZpbGw+JyxyW3IubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLHJbci5sZW5ndGhdPSI8YTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48''@;'; put 'put ''YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6''@;'; put 'put ''Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3Ro''@;'; put 'put ''XT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMSIvPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicscltyLmxlbmd0aF09IjxhOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6''@;'; put 'put ''c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxMDAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJw''@;'; put 'put ''aENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0i''@;'; put 'put ''MCIvPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSI8L2E6ZmlsbFN0eWxlTHN0PiIscltyLmxlbmd0aF09IjxhOmxuU3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRG''@;'; put 'put ''aWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9Ijk1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxyW3IubGVuZ3RoXT0nPGE6bG4gdz0iMjU0MDAi''@;'; put 'put ''IGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLHJbci5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBk''@;'; put 'put ''PSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicscltyLmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIscltyLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlTHN0''@;'; put 'put ''PiIscltyLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAw''@;'; put 'put ''MDAwMCI+PGE6YWxwaGEgdmFsPSIzODAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3RoXT0iPGE6ZWZm''@;'; put 'put ''ZWN0THN0PiIscltyLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hk''@;'; put 'put ''dz4nLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIscltyLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBk''@;'; put 'put ''aXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicscltyLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0nPGE6c2Nl''@;'; put 'put ''bmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTpsaWdodFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGlnaHRS''@;'; put 'put ''aWc+PC9hOnNjZW5lM2Q+JyxyW3IubGVuZ3RoXT0nPGE6c3AzZD48YTpiZXZlbFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+JyxyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSI8YTpiZ0Zp''@;'; put 'put ''bGxTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicscltyLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxyW3IubGVuZ3RoXT0iPGE6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6''@;'; put 'put ''Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRp''@;'; put 'put ''bnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRlIHZhbD0iOTkwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAiLz48''@;'; put 'put ''YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPjwv''@;'; put 'put ''YTpwYXRoPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicscltyLmxlbmd0aF09IjxhOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQg''@;'; put 'put ''dmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIvPjwv''@;'; put 'put ''YTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09IjwvYTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicscltyLmxlbmd0aF09IjwvYTpn''@;'; put 'put ''cmFkRmlsbD4iLHJbci5sZW5ndGhdPSI8L2E6YmdGaWxsU3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLHJbci5sZW5ndGhdPSI8L2E6dGhlbWVFbGVtZW50cz4iLHJbci5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLHJbci5sZW5ndGhdPSI8YTpzcERlZj4iLHJb''@;'; put 'put ''ci5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJl''@;'; put 'put ''Zj48YTplZmZlY3RSZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLHJbci5sZW5ndGhdPSI8L2E6c3BEZWY+IixyW3Iu''@;'; put 'put ''bGVuZ3RoXT0iPGE6bG5EZWY+IixyW3IubGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIgdmFs''@;'; put 'put ''PSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxyW3IubGVu''@;'; put 'put ''Z3RoXT0iPC9hOmxuRGVmPiIscltyLmxlbmd0aF09IjwvYTpvYmplY3REZWZhdWx0cz4iLHJbci5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+IixyW3IubGVuZ3RoXT0iPC9hOnRoZW1lPiIsci5qb2luKCIiKX0oKSk7dmFyIHIsYT17fTtpZighKHI9ZS5tYXRjaChYMSkpKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91bmQgaW4gdGhlbWUiKTtyZXR1cm4gZnVuY3Rpb24gVjEoZSx0LHIpe3ZhciBhO3QudGhlbWVFbGVtZW50cz17fSxbWyJjbHJTY2hlbWUiLFUxLEwxXSxbImZvbnRTY2hlbWUiLFcxLEIxXSxbImZtdFNjaGVtZSIsSDEsTTFdXS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKG4pe2lmKCEoYT1lLm1hdGNoKG5bMV0pKSl0aHJvdyBuZXcgRXJyb3IoblswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7blsyXShhLHQscil9KX0oclswXSxhLHQpLGEucmF3PWUsYX1mdW5jdGlvbiBZMShlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1l''@;'; put 'put ''LnJlYWRfc2hpZnQoMiktNCxhPVt0XTtzd2l0Y2godCl7Y2FzZSA0OmNhc2UgNTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzphWzFdPWZ1bmN0aW9uICQxKGUpe3ZhciB0PXt9O3N3aXRjaCh0LnhjbHJUeXBlPWUucmVhZF9zaGlmdCgyKSx0Lm5UaW50U2hh''@;'; put 'put ''ZGU9ZS5yZWFkX3NoaWZ0KDIpLHQueGNsclR5cGUpe2Nhc2UgMDpjYXNlIDQ6ZS5sKz00O2JyZWFrO2Nhc2UgMTp0LnhjbHJWYWx1ZT1mdW5jdGlvbiBqMShlLHQpe3JldHVybiBwcihlLHQpfShlLDQpO2JyZWFrO2Nhc2UgMjp0LnhjbHJWYWx1ZT1NcyhlKTticmVhaztjYXNlIDM6dC54Y2xy''@;'; put 'put ''VmFsdWU9ZnVuY3Rpb24gejEoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCg0KX0oZSl9cmV0dXJuIGUubCs9OCx0fShlKTticmVhaztjYXNlIDY6YVsxXT1mdW5jdGlvbiBLMShlLHQpe3JldHVybiBwcihlLHQpfShlLHIpO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTphWzFdPWUucmVhZF9zaGlmdCgx''@;'; put 'put ''PT09cj8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK3QrIiAiK3IpfXJldHVybiBhfWZ1bmN0aW9uIHExKGUsdCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHIpe30pfWZ1bmN0aW9uIGdmKGUsdCxyLGEpe3ZhciBpLG49QXJyYXku''@;'; put 'put ''aXNBcnJheShlKTt0LmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9R2Uocy5yZWYpO2lmKG4/KGVbZi5yXXx8KGVbZi5yXT1bXSksaT1lW2Yucl1bZi5jXSk6aT1lW3MucmVmXSwhaSl7aT17dDoieiJ9LG4/ZVtmLnJdW2YuY109aTplW3MucmVmXT1pO3ZhciBjPURlKGVbIiFyZWYiXXx8IkJE''@;'; put 'put ''V0dPMTAwMDAwMTpBMSIpO2Mucy5yPmYuciYmKGMucy5yPWYuciksYy5lLnI8Zi5yJiYoYy5lLnI9Zi5yKSxjLnMuYz5mLmMmJihjLnMuYz1mLmMpLGMuZS5jPGYuYyYmKGMuZS5jPWYuYyk7dmFyIG89d2UoYyk7byE9PWVbIiFyZWYiXSYmKGVbIiFyZWYiXT1vKX1pLmN8fChpLmM9W10pO3Zh''@;'; put 'put ''ciBsPXthOnMuYXV0aG9yLHQ6cy50LHI6cy5yLFQ6cn07cy5oJiYobC5oPXMuaCk7Zm9yKHZhciBoPWkuYy5sZW5ndGgtMTtoPj0wOy0taCl7aWYoIXImJmkuY1toXS5UKXJldHVybjtyJiYhaS5jW2hdLlQmJmkuYy5zcGxpY2UoaCwxKX1pZihyJiZhKWZvcihoPTA7aDxhLmxlbmd0aDsrK2gp''@;'; put 'put ''aWYobC5hPT1hW2hdLmlkKXtsLmE9YVtoXS5uYW1lfHxsLmE7YnJlYWt9aS5jLnB1c2gobCl9KX12YXIgd3g9bXIsU3g9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsdWE9ZnVuY3Rpb24oKXt2YXIgZT0vKF58W15BLVphLXpfXSlSKFxbPy0/XGQrXF18WzEtOV1cZCp8''@;'; put 'put ''KUMoXFs/LT9cZCtcXXxbMS05XVxkKnwpKD8hW0EtWmEtejAtOV9dKS9nLHQ9e3I6MCxjOjB9O2Z1bmN0aW9uIHIoYSxuLGkscyl7dmFyIGY9ITEsYz0hMTswPT1pLmxlbmd0aD9jPSEwOiJbIj09aS5jaGFyQXQoMCkmJihjPSEwLGk9aS5zbGljZSgxLC0xKSksMD09cy5sZW5ndGg/Zj0hMDoi''@;'; put 'put ''WyI9PXMuY2hhckF0KDApJiYoZj0hMCxzPXMuc2xpY2UoMSwtMSkpO3ZhciBvPWkubGVuZ3RoPjA/MHxwYXJzZUludChpLDEwKTowLGw9cy5sZW5ndGg+MD8wfHBhcnNlSW50KHMsMTApOjA7cmV0dXJuIGY/bCs9dC5jOi0tbCxjP28rPXQucjotLW8sbisoZj8iIjoiJCIpK0hlKGwpKyhjPyIi''@;'; put 'put ''OiIkIikrS2Uobyl9cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIHQ9aSxuLnJlcGxhY2UoZSxyKX19KCksT249LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7''@;'; put 'put ''M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2csSW49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5yZXBsYWNlKE9uLGZ1bmN0aW9uKGEsbixpLHMsZixjKXt2YXIgbz1ubihz''@;'; put 'put ''KS0oaT8wOnIuYyksbD1hbihjKS0oZj8wOnIucik7cmV0dXJuIG4rIlIiKygwPT1sPyIiOmY/bCsxOiJbIitsKyJdIikrIkMiKygwPT1vPyIiOmk/bysxOiJbIitvKyJdIil9KX19KCk7ZnVuY3Rpb24ga2YoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKE9uLGZ1bmN0aW9uKHIsYSxuLGkscyxmKXty''@;'; put 'put ''ZXR1cm4gYSsoIiQiPT1uP24raTpIZShubihpKSt0LmMpKSsoIiQiPT1zP3MrZjpLZShhbihmKSt0LnIpKX0pfWZ1bmN0aW9uIEl4KGUsdCxyKXt2YXIgbj1Qcih0KS5zLGk9R2Uocik7cmV0dXJuIGtmKGUse3I6aS5yLW4ucixjOmkuYy1uLmN9KX1mdW5jdGlvbiBFZihlKXtyZXR1cm4gZS5y''@;'; put 'put ''ZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIGFyKGUpe2UubCs9MX1mdW5jdGlvbiBBdChlLHQpe3ZhciByPWUucmVhZF9zaGlmdCgxPT10PzE6Mik7cmV0dXJuWzE2MzgzJnIscj4+MTQmMSxyPj4xNSYxXX1mdW5jdGlvbiBUZihlLHQscil7dmFyIGE9MjtpZihyKXtpZihyLmJpZmY+''@;'; put 'put ''PTImJnIuYmlmZjw9NSlyZXR1cm4gU2YoZSk7MTI9PXIuYmlmZiYmKGE9NCl9dmFyIG49ZS5yZWFkX3NoaWZ0KGEpLGk9ZS5yZWFkX3NoaWZ0KGEpLHM9QXQoZSwyKSxmPUF0KGUsMik7cmV0dXJue3M6e3I6bixjOnNbMF0sY1JlbDpzWzFdLHJSZWw6c1syXX0sZTp7cjppLGM6ZlswXSxjUmVs''@;'; put 'put ''OmZbMV0sclJlbDpmWzJdfX19ZnVuY3Rpb24gU2YoZSl7dmFyIHQ9QXQoZSwyKSxyPUF0KGUsMiksYT1lLnJlYWRfc2hpZnQoMSksbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6dFswXSxjOmEsY1JlbDp0WzFdLHJSZWw6dFsyXX0sZTp7cjpyWzBdLGM6bixjUmVsOnJbMV0sclJlbDpy''@;'; put 'put ''WzJdfX19ZnVuY3Rpb24gRmYoZSx0LHIpe2lmKHImJnIuYmlmZj49MiYmci5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBieChlKXt2YXIgdD1BdChlLDIpLHI9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybntyOnRbMF0sYzpyLGNSZWw6dFsxXSxyUmVsOnRbMl19fShlKTt2YXIgYT1lLnJlYWRfc2hp''@;'; put 'put ''ZnQociYmMTI9PXIuYmlmZj80OjIpLG49QXQoZSwyKTtyZXR1cm57cjphLGM6blswXSxjUmVsOm5bMV0sclJlbDpuWzJdfX1mdW5jdGlvbiBQeChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJue3I6dCxjOjI1NSZyLGZRdW90ZWQ6ISEoMTYzODQmciks''@;'; put 'put ''Y1JlbDpyPj4xNSxyUmVsOnI+PjE1fX1mdW5jdGlvbiB5ZihlKXt2YXIgdD0xJmVbZS5sKzFdO3JldHVybiBlLmwrPTQsW3QsMV19ZnVuY3Rpb24gQWYoZSl7cmV0dXJuW2UucmVhZF9zaGlmdCgxKSxlLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIGxkKGUsdCl7dmFyIHI9W2UucmVhZF9zaGlm''@;'; put 'put ''dCgxKV07aWYoMTI9PXQpc3dpdGNoKHJbMF0pe2Nhc2UgMjpyWzBdPTQ7YnJlYWs7Y2FzZSA0OnJbMF09MTY7YnJlYWs7Y2FzZSAwOnJbMF09MTticmVhaztjYXNlIDE6clswXT0yfXN3aXRjaChyWzBdKXtjYXNlIDQ6clsxXT1KZShlLDEpPyJUUlVFIjoiRkFMU0UiLDEyIT10JiYoZS5sKz03''@;'; put 'put ''KTticmVhaztjYXNlIDM3OmNhc2UgMTY6clsxXT14dFtlW2UubF1dLGUubCs9MTI9PXQ/NDo4O2JyZWFrO2Nhc2UgMDplLmwrPTg7YnJlYWs7Y2FzZSAxOnJbMV09Z3IoZSk7YnJlYWs7Y2FzZSAyOnJbMV09enQoZSwwLHtiaWZmOnQ+MCYmdDw4PzI6dH0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJCYWQgU2VyQXI6ICIrclswXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWQoZSx0LHIpe2Zvcih2YXIgYT1lLnJlYWRfc2hpZnQoMTI9PXIuYmlmZj80OjIpLG49W10saT0wO2khPWE7KytpKW4ucHVzaCgoMTI9PXIuYmlmZj9XdDprMCkoZSw4KSk7cmV0dXJuIG59ZnVuY3Rpb24g''@;'; put 'put ''aGQoZSx0LHIpe3ZhciBhPTAsbj0wOzEyPT1yLmJpZmY/KGE9ZS5yZWFkX3NoaWZ0KDQpLG49ZS5yZWFkX3NoaWZ0KDQpKToobj0xK2UucmVhZF9zaGlmdCgxKSxhPTErZS5yZWFkX3NoaWZ0KDIpKSxyLmJpZmY+PTImJnIuYmlmZjw4JiYoLS1hLDA9PS0tbiYmKG49MjU2KSk7Zm9yKHZhciBp''@;'; put 'put ''PTAscz1bXTtpIT1hJiYoc1tpXT1bXSk7KytpKWZvcih2YXIgZj0wO2YhPW47KytmKXNbaV1bZl09bGQoZSxyLmJpZmYpO3JldHVybiBzfWZ1bmN0aW9uIFVhKGUsdCxyKXtyZXR1cm4gZS5sKz0yLFtQeChlKV19ZnVuY3Rpb24gUm4oZSl7cmV0dXJuIGUubCs9NixbXX1mdW5jdGlvbiBDZihl''@;'; put 'put ''KXtyZXR1cm4gZS5sKz0yLFt0cihlKSwxJmUucmVhZF9zaGlmdCgyKV19dmFyIFJkPVsiRGF0YSIsIkFsbCIsIkhlYWRlcnMiLCI/PyIsIj9EYXRhMiIsIj8/IiwiP0RhdGFIZWFkZXJzIiwiPz8iLCJUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/RGF0YVRvdGFscyIsIj8/IiwiPz8iLCI/PyIs''@;'; put 'put ''Ij9DdXJyZW50Il0sRGY9ezE6e246IlB0Z0V4cCIsZjpmdW5jdGlvbiBuZChlLHQscil7cmV0dXJuIGUubCsrLHImJjEyPT1yLmJpZmY/W2UucmVhZF9zaGlmdCg0LCJpIiksMF06W2UucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6MildfX0sMjp7bjoiUHRnVGJs''@;'; put 'put ''IixmOnByfSwzOntuOiJQdGdBZGQiLGY6YXJ9LDQ6e246IlB0Z1N1YiIsZjphcn0sNTp7bjoiUHRnTXVsIixmOmFyfSw2OntuOiJQdGdEaXYiLGY6YXJ9LDc6e246IlB0Z1Bvd2VyIixmOmFyfSw4OntuOiJQdGdDb25jYXQiLGY6YXJ9LDk6e246IlB0Z0x0IixmOmFyfSwxMDp7bjoiUHRnTGUi''@;'; put 'put ''LGY6YXJ9LDExOntuOiJQdGdFcSIsZjphcn0sMTI6e246IlB0Z0dlIixmOmFyfSwxMzp7bjoiUHRnR3QiLGY6YXJ9LDE0OntuOiJQdGdOZSIsZjphcn0sMTU6e246IlB0Z0lzZWN0IixmOmFyfSwxNjp7bjoiUHRnVW5pb24iLGY6YXJ9LDE3OntuOiJQdGdSYW5nZSIsZjphcn0sMTg6e246IlB0''@;'; put 'put ''Z1VwbHVzIixmOmFyfSwxOTp7bjoiUHRnVW1pbnVzIixmOmFyfSwyMDp7bjoiUHRnUGVyY2VudCIsZjphcn0sMjE6e246IlB0Z1BhcmVuIixmOmFyfSwyMjp7bjoiUHRnTWlzc0FyZyIsZjphcn0sMjM6e246IlB0Z1N0ciIsZjpmdW5jdGlvbiBvZChlLHQscil7cmV0dXJuIGUubCsrLFJhKGUs''@;'; put 'put ''MCxyKX19LDI2OntuOiJQdGdTaGVldCIsZjpmdW5jdGlvbiBQZChlLHQscil7cmV0dXJuIGUubCs9NSxlLmwrPTIsZS5sKz0yPT1yLmJpZmY/MTo0LFsiUFRHU0hFRVQiXX19LDI3OntuOiJQdGdFbmRTaGVldCIsZjpmdW5jdGlvbiBMZChlLHQscil7cmV0dXJuIGUubCs9Mj09ci5iaWZmPzQ6''@;'; put 'put ''NSxbIlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uIGlkKGUpe3JldHVybiBlLmwrKyx4dFtlLnJlYWRfc2hpZnQoMSldfX0sMjk6e246IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24gZmQoZSl7cmV0dXJuIGUubCsrLDAhPT1lLnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRn''@;'; put 'put ''SW50IixmOmZ1bmN0aW9uIHNkKGUpe3JldHVybiBlLmwrKyxlLnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixmOmZ1bmN0aW9uIGNkKGUpe3JldHVybiBlLmwrKyxncihlKX19LDMyOntuOiJQdGdBcnJheSIsZjpmdW5jdGlvbiBYeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+''@;'; put 'put ''NTtyZXR1cm4gZS5sKz0yPT1yLmJpZmY/NjoxMj09ci5iaWZmPzE0OjcsW2FdfX0sMzM6e246IlB0Z0Z1bmMiLGY6ZnVuY3Rpb24gZWQoZSx0LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O2UubCs9MTt2YXIgbj1lLnJlYWRfc2hpZnQociYmci5iaWZmPD0zPzE6Mik7cmV0dXJuW2F2W25dLFJm''@;'; put 'put ''W25dLGFdfX0sMzQ6e246IlB0Z0Z1bmNWYXIiLGY6ZnVuY3Rpb24gcmQoZSx0LHIpe3ZhciBhPWVbZS5sKytdLG49ZS5yZWFkX3NoaWZ0KDEpLGk9ciYmci5iaWZmPD0zP1s4OD09YT8tMTowLGUucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gdGQoZSl7cmV0dXJuW2VbZS5sKzFdPj43LDMyNzY3''@;'; put 'put ''JmUucmVhZF9zaGlmdCgyKV19KGUpO3JldHVybltuLCgwPT09aVswXT9SZjp0dilbaVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24geGQoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgxKT4+PjUmMyxpPWUucmVhZF9zaGlmdCghcnx8ci5iaWZmPj04PzQ6Mik7c3dpdGNoKHIu''@;'; put 'put ''YmlmZil7Y2FzZSAyOmUubCs9NTticmVhaztjYXNlIDM6Y2FzZSA0OmUubCs9ODticmVhaztjYXNlIDU6ZS5sKz0xMn1yZXR1cm5bYSwwLGldfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlvbiBxeChlLHQscil7dmFyIGE9KDk2JmVbZS5sXSk+PjU7cmV0dXJuIGUubCs9MSxbYSxGZihlLDAs''@;'; put 'put ''cildfX0sMzc6e246IlB0Z0FyZWEiLGY6ZnVuY3Rpb24gTXgoZSx0LHIpe3JldHVyblsoOTYmZVtlLmwrK10pPj41LFRmKGUsMCxyKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlvbiBwZChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBlLmwrPXImJjI9''@;'; put 'put ''PXIuYmlmZj8zOjQsW2EsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDM5OntuOiJQdGdNZW1FcnIiLGY6cHJ9LDQwOntuOiJQdGdNZW1Ob01lbSIsZjpwcn0sNDE6e246IlB0Z01lbUZ1bmMiLGY6ZnVuY3Rpb24gbWQoZSx0LHIpe3JldHVybltlLnJlYWRfc2hpZnQoMSk+Pj41''@;'; put 'put ''JjMsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDQyOntuOiJQdGdSZWZFcnIiLGY6ZnVuY3Rpb24gZ2QoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gZS5sKz00LHIuYmlmZjw4JiZlLmwtLSwxMj09ci5iaWZmJiYoZS5sKz0yKSxbYV19fSw0Mzp7''@;'; put 'put ''bjoiUHRnQXJlYUVyciIsZjpmdW5jdGlvbiBXeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+NTtyZXR1cm4gZS5sKz1yJiZyLmJpZmY+OD8xMjpyLmJpZmY8OD82OjgsW2FdfX0sNDQ6e246IlB0Z1JlZk4iLGY6ZnVuY3Rpb24gWngoZSx0LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O2Uu''@;'; put 'put ''bCs9MTt2YXIgbj1mdW5jdGlvbiBMeChlLHQscil7dmFyIGE9ciYmci5iaWZmP3IuYmlmZjo4O2lmKGE+PTImJmE8PTUpcmV0dXJuIGZ1bmN0aW9uIEJ4KGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgxKSxhPSgzMjc2OCZ0KT4+MTUsbj0oMTYzODQmdCk+PjE0O3Jl''@;'; put 'put ''dHVybiB0Jj0xNjM4MywxPT1hJiZ0Pj04MTkyJiYodC09MTYzODQpLDE9PW4mJnI+PTEyOCYmKHItPTI1Nikse3I6dCxjOnIsY1JlbDpuLHJSZWw6YX19KGUpO3ZhciBuPWUucmVhZF9zaGlmdChhPj0xMj80OjIpLGk9ZS5yZWFkX3NoaWZ0KDIpLHM9KDE2Mzg0JmkpPj4xNCxmPSgzMjc2OCZp''@;'; put 'put ''KT4+MTU7aWYoaSY9MTYzODMsMT09Zilmb3IoO24+NTI0Mjg3OyluLT0xMDQ4NTc2O2lmKDE9PXMpZm9yKDtpPjgxOTE7KWktPTE2Mzg0O3JldHVybntyOm4sYzppLGNSZWw6cyxyUmVsOmZ9fShlLDAscik7cmV0dXJuW2Esbl19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gVngoZSx0''@;'; put 'put ''LHIpe3ZhciBhPSg5NiZlW2UubCsrXSk+PjUsbj1mdW5jdGlvbiBOeChlLHQscil7aWYoci5iaWZmPDgpcmV0dXJuIFNmKGUpO3ZhciBhPWUucmVhZF9zaGlmdCgxMj09ci5iaWZmPzQ6Miksbj1lLnJlYWRfc2hpZnQoMTI9PXIuYmlmZj80OjIpLGk9QXQoZSwyKSxzPUF0KGUsMik7cmV0dXJu''@;'; put 'put ''e3M6e3I6YSxjOmlbMF0sY1JlbDppWzFdLHJSZWw6aVsyXX0sZTp7cjpuLGM6c1swXSxjUmVsOnNbMV0sclJlbDpzWzJdfX19KGUsMCxyKTtyZXR1cm5bYSxuXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBCZChlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDEpPj4+NSYzLGUucmVh''@;'; put 'put ''ZF9zaGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0aW9uIE1kKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMSk+Pj41JjMsZS5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBkZChlLHQscil7cmV0dXJuIDU9PXIuYmlmZj9mdW5jdGlvbiB2''@;'; put 'put ''ZChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk+Pj41JjMscj1lLnJlYWRfc2hpZnQoMiwiaSIpO2UubCs9ODt2YXIgYT1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIGUubCs9MTIsW3QscixhXX0oZSk6W2UucmVhZF9zaGlmdCgxKT4+PjUmMyxlLnJlYWRfc2hpZnQoMiksZS5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''XX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBReChlLHQscil7dmFyIGE9KDk2JmVbZS5sXSk+PjU7ZS5sKz0xO3ZhciBuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gciYmNT09ci5iaWZmJiYoZS5sKz0xMiksW2EsbixGZihlLDAscildfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpmdW5j''@;'; put 'put ''dGlvbiBVeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+NSxuPWUucmVhZF9zaGlmdCgyLCJpIik7aWYociYmNT09PXIuYmlmZillLmwrPTEyO3JldHVyblthLG4sVGYoZSwwLHIpXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBfZChlLHQscil7dmFyIGE9KDk2JmVbZS5s''@;'; put 'put ''KytdKT4+NSxuPWUucmVhZF9zaGlmdCgyKSxpPTQ7aWYocilzd2l0Y2goci5iaWZmKXtjYXNlIDU6aT0xNTticmVhaztjYXNlIDEyOmk9Nn1yZXR1cm4gZS5sKz1pLFthLG5dfX0sNjE6e246IlB0Z0FyZWFFcnIzZCIsZjpmdW5jdGlvbiBIeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+''@;'; put 'put ''NSxuPWUucmVhZF9zaGlmdCgyKSxpPTg7aWYocilzd2l0Y2goci5iaWZmKXtjYXNlIDU6ZS5sKz0xMixpPTY7YnJlYWs7Y2FzZSAxMjppPTEyfXJldHVybiBlLmwrPWksW2Esbl19fSwyNTU6e319LFdkPXs2NDozMiw5NjozMiw2NTozMyw5NzozMyw2NjozNCw5ODozNCw2NzozNSw5OTozNSw2''@;'; put 'put ''ODozNiwxMDA6MzYsNjk6MzcsMTAxOjM3LDcwOjM4LDEwMjozOCw3MTozOSwxMDM6MzksNzI6NDAsMTA0OjQwLDczOjQxLDEwNTo0MSw3NDo0MiwxMDY6NDIsNzU6NDMsMTA3OjQzLDc2OjQ0LDEwODo0NCw3Nzo0NSwxMDk6NDUsNzg6NDYsMTEwOjQ2LDc5OjQ3LDExMTo0Nyw4ODozNCwxMjA6''@;'; put 'put ''MzQsODk6NTcsMTIxOjU3LDkwOjU4LDEyMjo1OCw5MTo1OSwxMjM6NTksOTI6NjAsMTI0OjYwLDkzOjYxLDEyNTo2MX0sSGQ9ezE6e246IlB0Z0VsZkxlbCIsZjpDZn0sMjp7bjoiUHRnRWxmUnciLGY6VWF9LDM6e246IlB0Z0VsZkNvbCIsZjpVYX0sNjp7bjoiUHRnRWxmUndWIixmOlVhfSw3''@;'; put 'put ''OntuOiJQdGdFbGZDb2xWIixmOlVhfSwxMDp7bjoiUHRnRWxmUmFkaWNhbCIsZjpVYX0sMTE6e246IlB0Z0VsZlJhZGljYWxTIixmOlJufSwxMzp7bjoiUHRnRWxmQ29sUyIsZjpSbn0sMTU6e246IlB0Z0VsZkNvbFNWIixmOlJufSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjpDZn0sMjU6''@;'; put 'put ''e246IlB0Z0xpc3QiLGY6ZnVuY3Rpb24gTmQoZSl7ZS5sKz0yO3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgyKSxhPWUucmVhZF9zaGlmdCg0KSxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTp0LGNvbHR5cGU6MyZyLHJ0OlJkW3I+''@;'; put 'put ''PjImMzFdLGlkeDphLGM6bixDOml9fX0sMjk6e246IlB0Z1N4TmFtZSIsZjpmdW5jdGlvbiBiZChlKXtyZXR1cm4gZS5sKz0yLFtlLnJlYWRfc2hpZnQoNCldfX0sMjU1Ont9fSxWZD17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gVWQoZSl7cmV0dXJuIGUubCs9NCxbMCwwXX19LDE6''@;'; put 'put ''e246IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIEt4KGUsdCxyKXt2YXIgYT0yNTUmZVtlLmwrMV0/MTowO3JldHVybiBlLmwrPXImJjI9PXIuYmlmZj8zOjQsW2FdfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uICR4KGUsdCxyKXt2YXIgYT0yNTUmZVtlLmwrMV0/MTowO3JldHVybiBl''@;'; put 'put ''LmwrPTIsW2EsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gR3goZSx0LHIpe2UubCs9Mjtmb3IodmFyIGE9ZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpLG49W10saT0wO2k8PWE7KytpKW4ucHVzaChlLnJlYWRf''@;'; put 'put ''c2hpZnQociYmMj09ci5iaWZmPzE6MikpO3JldHVybiBufX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gengoZSx0LHIpe3ZhciBhPTI1NSZlW2UubCsxXT8xOjA7cmV0dXJuIGUubCs9MixbYSxlLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6MildfX0sMTY6e246IlB0Z0F0dHJT''@;'; put 'put ''dW0iLGY6ZnVuY3Rpb24gYWQoZSx0LHIpe2UubCs9ciYmMj09ci5iaWZmPzM6NH19LDMyOntuOiJQdGdBdHRyQmF4Y2VsIixmOnlmfSwzMzp7bjoiUHRnQXR0ckJheGNlbCIsZjp5Zn0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiBZeChlKXtyZXR1cm4gZS5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LEFmKGUpfX0sNjU6e246IlB0Z0F0dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gSngoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCgyKSxBZihlKX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gangoZSl7dmFyIHQ9MjU1JmVbZS5sKzFdPzE6MDtyZXR1cm4gZS5sKz0yLFt0LGUu''@;'; put 'put ''cmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIFdhKGUsdCxyLGEpe2lmKGEuYmlmZjw4KXJldHVybiBwcihlLHQpO2Zvcih2YXIgbj1lLmwrdCxpPVtdLHM9MDtzIT09ci5sZW5ndGg7KytzKXN3aXRjaChyW3NdWzBdKXtjYXNlIlB0Z0FycmF5IjpyW3NdWzFdPWhkKGUsMCxhKSxp''@;'; put 'put ''LnB1c2gocltzXVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjpyW3NdWzJdPXVkKGUsMCxhKSxpLnB1c2gocltzXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOmEmJjEyPT1hLmJpZmYmJihyW3NdWzFdWzFdPWUucmVhZF9zaGlmdCg0KSxpLnB1c2gocltzXVsxXSkpO2JyZWFrO2Nhc2UiUHRn''@;'; put 'put ''TGlzdCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjp0aHJvdyJVbnN1cHBvcnRlZCAiK3Jbc11bMF19cmV0dXJuIDAhPSh0PW4tZS5sKSYmaS5wdXNoKHByKGUsdCkpLGl9ZnVuY3Rpb24gSGEoZSx0LHIpe2Zvcih2YXIgbixpLGE9ZS5s''@;'; put 'put ''K3Qscz1bXTthIT1lLmw7KXQ9YS1lLmwsbj1EZltpPWVbZS5sXV18fERmW1dkW2ldXSwoMjQ9PT1pfHwyNT09PWkpJiYobj0oMjQ9PT1pP0hkOlZkKVtlW2UubCsxXV0pLG4mJm4uZj9zLnB1c2goW24ubixuLmYoZSx0LHIpXSk6cHIoZSx0KTtyZXR1cm4gc31mdW5jdGlvbiBYZChlKXtmb3Io''@;'; put 'put ''dmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXtmb3IodmFyIGE9ZVtyXSxuPVtdLGk9MDtpPGEubGVuZ3RoOysraSl7dmFyIHM9YVtpXTtuLnB1c2gocz8yPT09c1swXT8nIicrc1sxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOnNbMV06IiIpfXQucHVzaChuLmpvaW4oIiwiKSl9cmV0dXJu''@;'; put 'put ''IHQuam9pbigiOyIpfXZhciBHZD17UHRnQWRkOiIrIixQdGdDb25jYXQ6IiYiLFB0Z0RpdjoiLyIsUHRnRXE6Ij0iLFB0Z0dlOiI+PSIsUHRnR3Q6Ij4iLFB0Z0xlOiI8PSIsUHRnTHQ6IjwiLFB0Z011bDoiKiIsUHRnTmU6Ijw+IixQdGdQb3dlcjoiXiIsUHRnU3ViOiItIn07ZnVuY3Rpb24g''@;'; put 'put ''T2YoZSx0LHIpe2lmKCFlKXJldHVybiJTSDMzVEpTRVJSMCI7aWYoci5iaWZmPjgmJighZS5YVEl8fCFlLlhUSVt0XSkpcmV0dXJuIGUuU2hlZXROYW1lc1t0XTtpZighZS5YVEkpcmV0dXJuIlNIMzNUSlNFUlI2Ijt2YXIgYT1lLlhUSVt0XTtpZihyLmJpZmY8OClyZXR1cm4gdD4xZTQmJih0''@;'; put 'put ''LT02NTUzNiksdDwwJiYodD0tdCksMD09dD8iIjplLlhUSVt0LTFdO2lmKCFhKXJldHVybiJTSDMzVEpTRVJSMSI7dmFyIG49IiI7aWYoci5iaWZmPjgpc3dpdGNoKGVbYVswXV1bMF0pe2Nhc2UgMzU3OnJldHVybiBuPS0xPT1hWzFdPyIjUkVGIjplLlNoZWV0TmFtZXNbYVsxXV0sYVsxXT09''@;'; put 'put ''YVsyXT9uOm4rIjoiK2UuU2hlZXROYW1lc1thWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVsbCE9ci5TSUQ/ZS5TaGVldE5hbWVzW3IuU0lEXToiU0gzM1RKU1NBTUUiK2VbYVswXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIrZVthWzBdXVswXX1zd2l0Y2goZVthWzBdXVswXVswXSl7''@;'; put 'put ''Y2FzZSAxMDI1OnJldHVybiBuPS0xPT1hWzFdPyIjUkVGIjplLlNoZWV0TmFtZXNbYVsxXV18fCJTSDMzVEpTRVJSMyIsYVsxXT09YVsyXT9uOm4rIjoiK2UuU2hlZXROYW1lc1thWzJdXTtjYXNlIDE0ODQ5OnJldHVybiBlW2FbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihpKXtyZXR1cm4g''@;'; put 'put ''aS5OYW1lfSkuam9pbigiOzsiKTtkZWZhdWx0OnJldHVybiBlW2FbMF1dWzBdWzNdPyhuPS0xPT1hWzFdPyIjUkVGIjplW2FbMF1dWzBdWzNdW2FbMV1dfHwiU0gzM1RKU0VSUjQiLGFbMV09PWFbMl0/bjpuKyI6IitlW2FbMF1dWzBdWzNdW2FbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlv''@;'; put 'put ''biBJZihlLHQscil7dmFyIGE9T2YoZSx0LHIpO3JldHVybiIjUkVGIj09YT9hOmZ1bmN0aW9uIHpkKGUsdCl7aWYoIShlfHx0JiZ0LmJpZmY8PTUmJnQuYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJuL1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1''@;'; put 'put ''MzBGRl0vLnRlc3QoZSk/IiciK2UrIiciOmV9KGEscil9ZnVuY3Rpb24ga3IoZSx0LHIsYSxuKXt2YXIgYyxvLGwsZCxpPW4mJm4uYmlmZnx8OCxzPXtzOntjOjAscjowfSxlOntjOjAscjowfX0sZj1bXSxoPTAseD0wLHY9IiI7aWYoIWVbMF18fCFlWzBdWzBdKXJldHVybiIiO2Zvcih2YXIg''@;'; put 'put ''dT0tMSxwPSIiLGs9MCxUPWVbMF0ubGVuZ3RoO2s8VDsrK2spe3ZhciBnPWVbMF1ba107c3dpdGNoKGdbMF0pe2Nhc2UiUHRnVW1pbnVzIjpmLnB1c2goIi0iK2YucG9wKCkpO2JyZWFrO2Nhc2UiUHRnVXBsdXMiOmYucHVzaCgiKyIrZi5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdQZXJjZW50Ijpm''@;'; put 'put ''LnB1c2goZi5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRnTGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2Vy''@;'; put 'put ''IjpjYXNlIlB0Z1N1YiI6aWYoYz1mLnBvcCgpLG89Zi5wb3AoKSx1Pj0wKXtzd2l0Y2goZVswXVt1XVsxXVswXSl7Y2FzZSAwOnA9amUoIiAiLGVbMF1bdV1bMV1bMV0pO2JyZWFrO2Nhc2UgMTpwPWplKCJcciIsZVswXVt1XVsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihwPSIiLG4uV1RGKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrZVswXVt1XVsxXVswXSl9bys9cCx1PS0xfWYucHVzaChvK0dkW2dbMF1dK2MpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIiAiK2MpO2JyZWFrO2Nhc2UiUHRnVW5p''@;'; put 'put ''b24iOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIiwiK2MpO2JyZWFrO2Nhc2UiUHRnUmFuZ2UiOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIjoiK2MpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6Y2FzZSJQdGdBdHRyR290byI6Y2FzZSJQdGdBdHRySWYiOmNhc2UiUHRn''@;'; put 'put ''QXR0cklmRXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQdGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRnTWVtTm9NZW1OIjpjYXNlIlB0Z0F0dHJOb29wIjpjYXNlIlB0Z1NoZWV0''@;'; put 'put ''IjpjYXNlIlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJyZWFrO2Nhc2UiUHRnUmVmIjpsPUNhKGdbMV1bMV0scyxuKSxmLnB1c2goRGEobCxpKSk7YnJlYWs7Y2FzZSJQdGdSZWZOIjpsPXI/Q2EoZ1sxXVsxXSxyLG4pOmdbMV1bMV0sZi5wdXNoKERh''@;'; put 'put ''KGwsaSkpO2JyZWFrO2Nhc2UiUHRnUmVmM2QiOmg9Z1sxXVsxXSxsPUNhKGdbMV1bMl0scyxuKSx2PUlmKGEsaCxuKSxmLnB1c2godisiISIrRGEobCxpKSk7YnJlYWs7Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNWYXIiOnZhciBNPWdbMV1bMF0sST1nWzFdWzFdO018fChNPTApO3ZhciB5''@;'; put 'put ''PTA9PShNJj0xMjcpP1tdOmYuc2xpY2UoLU0pO2YubGVuZ3RoLT1NLCJVc2VyIj09PUkmJihJPXkuc2hpZnQoKSksZi5wdXNoKEkrIigiK3kuam9pbigiLCIpKyIpIik7YnJlYWs7Y2FzZSJQdGdCb29sIjpmLnB1c2goZ1sxXT8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJQdGdJbnQiOmNh''@;'; put 'put ''c2UiUHRnRXJyIjpmLnB1c2goZ1sxXSk7YnJlYWs7Y2FzZSJQdGdOdW0iOmYucHVzaChTdHJpbmcoZ1sxXSkpO2JyZWFrO2Nhc2UiUHRnU3RyIjpmLnB1c2goJyInK2dbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdBcmVhTiI6ZD1ucyhnWzFdWzFdLHI/e3M6cn06''@;'; put 'put ''cyxuKSxmLnB1c2godG4oZCxuKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjpkPW5zKGdbMV1bMV0scyxuKSxmLnB1c2godG4oZCxuKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOmQ9Z1sxXVsyXSx2PUlmKGEsaD1nWzFdWzFdLG4pLGYucHVzaCh2KyIhIit0bihkLG4pKTticmVhaztjYXNlIlB0Z0F0''@;'; put 'put ''dHJTdW0iOmYucHVzaCgiU1VNKCIrZi5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UiUHRnTmFtZSI6dmFyIFA9KGEubmFtZXN8fFtdKVsoeD1nWzFdWzJdKS0xXXx8KGFbMF18fFtdKVt4XSxSPVA/UC5OYW1lOiJTSDMzVEpTTkFNRSIrU3RyaW5nKHgpO1ImJiJfeGxmbi4iPT1SLnNsaWNlKDAsNikm''@;'; put 'put ''JiFuLnhsZm4mJihSPVIuc2xpY2UoNikpLGYucHVzaChSKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgWCxWPWdbMV1bMV07aWYoeD1nWzFdWzJdLCEobi5iaWZmPD01KSl7dmFyIGI9IiI7aWYoMTQ4NDk9PSgoYVtWXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKGFbVl18fFtdKVswXXx8''@;'; put 'put ''W10pWzBdP2FbVl1beF0mJmFbVl1beF0uaXRhYj4wJiYoYj1hLlNoZWV0TmFtZXNbYVtWXVt4XS5pdGFiLTFdKyIhIik6Yj1hLlNoZWV0TmFtZXNbeC0xXSsiISIpLGFbVl0mJmFbVl1beF0pYis9YVtWXVt4XS5OYW1lO2Vsc2UgaWYoYVswXSYmYVswXVt4XSliKz1hWzBdW3hdLk5hbWU7ZWxz''@;'; put 'put ''ZXt2YXIgZWU9KE9mKGEsVixuKXx8IiIpLnNwbGl0KCI7OyIpO2VlW3gtMV0/Yj1lZVt4LTFdOmIrPSJTSDMzVEpTRVJSWCJ9Zi5wdXNoKGIpO2JyZWFrfVY8MCYmKFY9LVYpLGFbVl0mJihYPWFbVl1beF0pLFh8fChYPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSxmLnB1c2goWC5OYW1lKTticmVh''@;'; put 'put ''aztjYXNlIlB0Z1BhcmVuIjp2YXIgbGU9IigiLHJlPSIpIjtpZih1Pj0wKXtzd2l0Y2gocD0iIixlWzBdW3VdWzFdWzBdKXtjYXNlIDI6bGU9amUoIiAiLGVbMF1bdV1bMV1bMV0pK2xlO2JyZWFrO2Nhc2UgMzpsZT1qZSgiXHIiLGVbMF1bdV1bMV1bMV0pK2xlO2JyZWFrO2Nhc2UgNDpyZT1q''@;'; put 'put ''ZSgiICIsZVswXVt1XVsxXVsxXSkrcmU7YnJlYWs7Y2FzZSA1OnJlPWplKCJcciIsZVswXVt1XVsxXVsxXSkrcmU7YnJlYWs7ZGVmYXVsdDppZihuLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2VbMF1bdV1bMV1bMF0pfXU9LTF9Zi5wdXNoKGxl''@;'; put 'put ''K2YucG9wKCkrcmUpO2JyZWFrO2Nhc2UiUHRnUmVmRXJyIjpjYXNlIlB0Z1JlZkVycjNkIjpjYXNlIlB0Z0FyZWFFcnIiOmNhc2UiUHRnQXJlYUVycjNkIjpmLnB1c2goIiNSRUYhIik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciBkZT17YzpyLmMscjpyLnJ9O2lmKGEuc2hhcmVkZltnZShsPXtj''@;'; put 'put ''OmdbMV1bMV0scjpnWzFdWzBdfSldKXt2YXIgdWU9YS5zaGFyZWRmW2dlKGwpXTtmLnB1c2goa3IodWUsMCxkZSxhLG4pKX1lbHNle3ZhciBGZT0hMTtmb3IoYz0wO2MhPWEuYXJyYXlmLmxlbmd0aDsrK2MpaWYoIShsLmM8KG89YS5hcnJheWZbY10pWzBdLnMuY3x8bC5jPm9bMF0uZS5jfHxs''@;'; put 'put ''LnI8b1swXS5zLnJ8fGwucj5vWzBdLmUucikpe2YucHVzaChrcihvWzFdLDAsZGUsYSxuKSksRmU9ITA7YnJlYWt9RmV8fGYucHVzaChnWzFdKX1icmVhaztjYXNlIlB0Z0FycmF5IjpmLnB1c2goInsiK1hkKGdbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNhc2UiUHRnQXR0''@;'; put 'put ''clNwYWNlU2VtaSI6dT1rO2JyZWFrO2Nhc2UiUHRnTWlzc0FyZyI6Zi5wdXNoKCIiKTticmVhaztjYXNlIlB0Z0xpc3QiOmYucHVzaCgiVGFibGUiK2dbMV0uaWR4KyJbIyIrZ1sxXS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29s''@;'; put 'put ''U1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZz''@;'; put 'put ''Iik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAiK1N0cmluZyhnKSl9aWYoMyE9bi5iaWZmJiZ1Pj0wJiYtMT09WyJQdGdBdHRyU3BhY2UiLCJQdGdBdHRyU3BhY2VTZW1pIiwiUHRnQXR0ckdvdG8iXS5pbmRleE9mKGVbMF1ba11bMF0pKXt2''@;'; put 'put ''YXIgeGU9ITA7c3dpdGNoKChnPWVbMF1bdV0pWzFdWzBdKXtjYXNlIDQ6eGU9ITE7Y2FzZSAwOnA9amUoIiAiLGdbMV1bMV0pO2JyZWFrO2Nhc2UgNTp4ZT0hMTtjYXNlIDE6cD1qZSgiXHIiLGdbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYocD0iIixuLldURil0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''ZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2dbMV1bMF0pfWYucHVzaCgoeGU/cDoiIikrZi5wb3AoKSsoeGU/IiI6cCkpLHU9LTF9fWlmKGYubGVuZ3RoPjEmJm4uV1RGKXRocm93IG5ldyBFcnJvcigiYmFkIGZvcm11bGEgc3RhY2siKTtyZXR1cm4gZlswXX1mdW5jdGlvbiAkZChlLHQs''@;'; put 'put ''cil7dmFyIGksYT1lLmwrdCxuPTI9PXIuYmlmZj8xOjIscz1lLnJlYWRfc2hpZnQobik7aWYoNjU1MzU9PXMpcmV0dXJuW1tdLHByKGUsdC0yKV07dmFyIGY9SGEoZSxzLHIpO3JldHVybiB0IT09cytuJiYoaT1XYShlLHQtcy1uLGYscikpLGUubD1hLFtmLGldfWZ1bmN0aW9uIFlkKGUsdCxy''@;'; put 'put ''KXt2YXIgbixhPWUubCt0LGk9ZS5yZWFkX3NoaWZ0KDIpLHM9SGEoZSxpLHIpO3JldHVybiA2NTUzNT09aT9bW10scHIoZSx0LTIpXToodCE9PWkrMiYmKG49V2EoZSxhLWktMixzLHIpKSxbcyxuXSl9ZnVuY3Rpb24gTm4oZSx0LHIpe3ZhciBhPWUubCt0LG49bnQoZSk7Mj09ci5iaWZmJiYr''@;'; put 'put ''K2UubDt2YXIgaT1mdW5jdGlvbiBKZChlKXt2YXIgdDtpZig2NTUzNSE9PXV0KGUsZS5sKzYpKXJldHVybltncihlKSwibiJdO3N3aXRjaChlW2UubF0pe2Nhc2UgMDpyZXR1cm4gZS5sKz04LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4gdD0xPT09ZVtlLmwrMl0sZS5sKz04LFt0LCJi''@;'; put 'put ''Il07Y2FzZSAyOnJldHVybiB0PWVbZS5sKzJdLGUubCs9OCxbdCwiZSJdO2Nhc2UgMzpyZXR1cm4gZS5sKz04LFsiIiwicyJdfXJldHVybltdfShlKSxzPWUucmVhZF9zaGlmdCgxKTsyIT1yLmJpZmYmJihlLnJlYWRfc2hpZnQoMSksci5iaWZmPj01JiZlLnJlYWRfc2hpZnQoNCkpO3ZhciBm''@;'; put 'put ''PWZ1bmN0aW9uIGpkKGUsdCxyKXt2YXIgaSxhPWUubCt0LG49Mj09ci5iaWZmPzE6MixzPWUucmVhZF9zaGlmdChuKTtpZig2NTUzNT09cylyZXR1cm5bW10scHIoZSx0LTIpXTt2YXIgZj1IYShlLHMscik7cmV0dXJuIHQhPT1zK24mJihpPVdhKGUsdC1zLW4sZixyKSksZS5sPWEsW2YsaV19''@;'; put 'put ''KGUsYS1lLmwscik7cmV0dXJue2NlbGw6bix2YWw6aVswXSxmb3JtdWxhOmYsc2hhcmVkOnM+PjMmMSx0dDppWzFdfX1mdW5jdGlvbiBBMChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0KDQpLG49SGEoZSxhLHIpLGk9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybltuLGk+MD9XYShlLGksbixyKTpu''@;'; put 'put ''dWxsXX12YXIgUWQ9QTAsQzA9QTAsZXY9QTAscnY9QTAsdHY9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwx''@;'; put 'put ''MDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVB''@;'; put 'put ''SyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2''@;'; put 'put ''OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9O''@;'; put 'put ''Iiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1F''@;'; put 'put ''Iiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVS''@;'; put 'put ''WS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVY''@;'; put 'put ''VCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIs''@;'; put 'put ''OTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEu''@;'; put 'put ''RklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEw''@;'; put 'put ''OiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQ''@;'; put 'put ''Qk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlT''@;'; put 'put ''IiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VU''@;'; put 'put ''TElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQi''@;'; put 'put ''LDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwx''@;'; put 'put ''Njc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4''@;'; put 'put ''NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4z''@;'; put 'put ''RC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9N''@;'; put 'put ''T1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJB''@;'; put 'put ''U1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5U''@;'; put 'put ''LlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIu''@;'; put 'put ''REFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJ''@;'; put 'put ''TkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFV''@;'; put 'put ''VE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JL''@;'; put 'put ''Qk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFku''@;'; put 'put ''VE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIs''@;'; put 'put ''MzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElW''@;'; put 'put ''T1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BU''@;'; put 'put ''SU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJH''@;'; put 'put ''QUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5B''@;'; put 'put ''REQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJP''@;'; put 'put ''UEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6''@;'; put 'put ''IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToi''@;'; put 'put ''U1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIs''@;'; put 'put ''NDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFD''@;'; put 'put ''RVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9Y''@;'; put 'put ''LlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5E''@;'; put 'put ''SUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVD''@;'; put 'put ''VC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9S''@;'; put 'put ''QkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04u''@;'; put 'put ''U0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFU''@;'; put 'put ''QVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToi''@;'; put 'put ''U0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFS''@;'; put 'put ''RUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lP''@;'; put 'put ''TlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LFJmPXswOiJDT1VOVCIsMToiSUYi''@;'; put 'put ''LDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIs''@;'; put 'put ''MTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxT''@;'; put 'put ''RSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9H''@;'; put 'put ''RVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4''@;'; put 'put ''OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNF''@;'; put 'put ''QVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVD''@;'; put 'put ''VElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJT''@;'; put 'put ''RVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RF''@;'; put 'put ''IiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJG''@;'; put 'put ''UkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0''@;'; put 'put ''ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1''@;'; put 'put ''ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5''@;'; put 'put ''OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQ''@;'; put 'put ''IiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5P''@;'; put 'put ''VEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VB''@;'; put 'put ''UkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRP''@;'; put 'put ''REFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5I''@;'; put 'put ''IiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoi''@;'; put 'put ''SU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxV''@;'; put 'put ''QVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIs''@;'; put 'put ''MjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0Ui''@;'; put 'put ''LDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9N''@;'; put 'put ''RElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9J''@;'; put 'put ''U1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBF''@;'; put 'put ''QVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2''@;'; put 'put ''OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4''@;'; put 'put ''OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxB''@;'; put 'put ''TksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklF''@;'; put 'put ''Vy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJU''@;'; put 'put ''SEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFI''@;'; put 'put ''VFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklO''@;'; put 'put ''IiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0''@;'; put 'put ''MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0''@;'; put 'put ''MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6''@;'; put 'put ''IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNF''@;'; put 'put ''RElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMi''@;'; put 'put ''LDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6''@;'; put 'put ''Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpT''@;'; put 'put ''Iiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRD''@;'; put 'put ''T1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LGF2PXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6Miwz''@;'; put 'put ''MDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4''@;'; put 'put ''MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMx''@;'; put 'put ''OjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMs''@;'; put 'put ''MTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0''@;'; put 'put ''OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMs''@;'; put 'put ''MzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUx''@;'; put 'put ''OjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEs''@;'; put 'put ''NDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4''@;'; put 'put ''OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH07ZnVuY3Rpb24gTmYoZSl7cmV0dXJuIm9mOiI9PWUuc2xpY2UoMCwzKSYmKGU9ZS5zbGljZSgzKSksNjE9PWUuY2hhckNvZGVBdCgwKSYmNjE9PShlPWUuc2xpY2UoMSkpLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihlPWUuc2xpY2UoMSkpLChlPShlPShlPWUucmVwbGFjZSgvQ09NXC5NSUNST1NPRlRcLi9nLCIiKSkucmVwbGFjZSgvXFsoKD86XC5bQS1aXStbMC05XSspKD86OlwuW0EtWl0rWzAtOV0rKT8pXF0vZyxmdW5jdGlvbih0LHIpe3JldHVybiByLnJlcGxhY2UoL1wuL2csIiIpfSkpLnJlcGxh''@;'; put 'put ''Y2UoL1xbLigjW0EtWl0qWz8hXSlcXS9nLCIkMSIpKS5yZXBsYWNlKC9bO35dL2csIiwiKS5yZXBsYWNlKC9cfC9nLCI7Iil9ZnVuY3Rpb24gYm4oZSl7dmFyIHQ9ZS5zcGxpdCgiOiIpO3JldHVyblt0WzBdLnNwbGl0KCIuIilbMF0sdFswXS5zcGxpdCgiLiIpWzFdKyh0Lmxlbmd0aD4xPyI6''@;'; put 'put ''IisodFsxXS5zcGxpdCgiLiIpWzFdfHx0WzFdLnNwbGl0KCIuIilbMF0pOiIiKV19dmFyIFZhPXt9LGhhPXt9O2Z1bmN0aW9uIFl0KGUsdCl7aWYoZSl7dmFyIHI9Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09dCYmKHI9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1lLmxlZnQmJihlLmxl''@;'; put 'put ''ZnQ9clswXSksbnVsbD09ZS5yaWdodCYmKGUucmlnaHQ9clsxXSksbnVsbD09ZS50b3AmJihlLnRvcD1yWzJdKSxudWxsPT1lLmJvdHRvbSYmKGUuYm90dG9tPXJbM10pLG51bGw9PWUuaGVhZGVyJiYoZS5oZWFkZXI9cls0XSksbnVsbD09ZS5mb290ZXImJihlLmZvb3Rlcj1yWzVdKX19ZnVu''@;'; put 'put ''Y3Rpb24gYmYoZSx0LHIsYSxuLGkpe3RyeXthLmNlbGxORiYmKGUuej1wZVt0XSl9Y2F0Y2goZil7aWYoYS5XVEYpdGhyb3cgZn1pZigieiIhPT1lLnR8fGEuY2VsbFN0eWxlcyl7aWYoImQiPT09ZS50JiYic3RyaW5nIj09dHlwZW9mIGUudiYmKGUudj1YZShlLnYpKSwoIWF8fCExIT09YS5j''@;'; put 'put ''ZWxsVGV4dCkmJiJ6IiE9PWUudCl0cnl7aWYobnVsbD09cGVbdF0mJmV0KGFvW3RdfHwiR2VuZXJhbCIsdCksImUiPT09ZS50KWUudz1lLnd8fHh0W2Uudl07ZWxzZSBpZigwPT09dClpZigibiI9PT1lLnQpZS53PSgwfGUudik9PT1lLnY/ZS52LnRvU3RyaW5nKDEwKTprYShlLnYpO2Vsc2Ug''@;'; put 'put ''aWYoImQiPT09ZS50KXt2YXIgcz1pcihlLnYpO2Uudz0oMHxzKT09PXM/cy50b1N0cmluZygxMCk6a2Eocyl9ZWxzZXtpZih2b2lkIDA9PT1lLnYpcmV0dXJuIiI7ZS53PU50KGUudixoYSl9ZWxzZSBlLnc9UnIodCwiZCI9PT1lLnQ/aXIoZS52KTplLnYsaGEpfWNhdGNoKGYpe2lmKGEuV1RG''@;'; put 'put ''KXRocm93IGZ9aWYoYS5jZWxsU3R5bGVzJiZudWxsIT1yKXRyeXtlLnM9aS5GaWxsc1tyXSxlLnMuZmdDb2xvciYmZS5zLmZnQ29sb3IudGhlbWUmJiFlLnMuZmdDb2xvci5yZ2ImJihlLnMuZmdDb2xvci5yZ2I9VDAobi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtlLnMuZmdDb2xvci50aGVt''@;'; put 'put ''ZV0ucmdiLGUucy5mZ0NvbG9yLnRpbnR8fDApLGEuV1RGJiYoZS5zLmZnQ29sb3IucmF3X3JnYj1uLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2Uucy5mZ0NvbG9yLnRoZW1lXS5yZ2IpKSxlLnMuYmdDb2xvciYmZS5zLmJnQ29sb3IudGhlbWUmJihlLnMuYmdDb2xvci5yZ2I9VDAobi50aGVt''@;'; put 'put ''ZUVsZW1lbnRzLmNsclNjaGVtZVtlLnMuYmdDb2xvci50aGVtZV0ucmdiLGUucy5iZ0NvbG9yLnRpbnR8fDApLGEuV1RGJiYoZS5zLmJnQ29sb3IucmF3X3JnYj1uLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2Uucy5iZ0NvbG9yLnRoZW1lXS5yZ2IpKX1jYXRjaChmKXtpZihhLldURiYmaS5G''@;'; put 'put ''aWxscyl0aHJvdyBmfX19dmFyIHN2PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLGZ2PS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sY3Y9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20s''@;'; put 'put ''b3Y9LyIoXHcqOlx3KikiLyxsdj0vPCg/Olx3Oik/Y29sXGJbXj5dKltcL10/Pi9nLHV2PS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyxodj0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLFBmPS88KD86XHc6''@;'; put 'put ''KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8seHY9LzwoPzpcdzopP3NoZWV0UHJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRQcik+Lyxkdj0vPCg/Olx3Oik/c2hlZXRWaWV3c1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFZpZXdz''@;'; put 'put ''KT4vO2Z1bmN0aW9uIExuKGUsdCxyLGEpe3ZhciBuPW1lKGUpO3IuU2hlZXRzW2FdfHwoci5TaGVldHNbYV09e30pLG4uY29kZU5hbWUmJihyLlNoZWV0c1thXS5Db2RlTmFtZT1JZShCZShuLmNvZGVOYW1lKSkpfXZhciBEdj0vPCg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9c''@;'; put 'put ''Lz8+LyxOdj1mdW5jdGlvbigpe3ZhciBlPS88KD86XHcrOik/Y1sgXC8+XS8sdD0vPFwvKD86XHcrOik/cm93Pi8scj0vcj1bIiddKFteIiddKilbIiddLyxhPS88KD86XHcrOik/aXM+KFtcU1xzXSo/KTxcLyg/Olx3KzopP2lzPi8sbj0vcmVmPVsiJ10oW14iJ10qKVsiJ10vLGk9RmEoInYi''@;'; put 'put ''KSxzPUZhKCJmIik7cmV0dXJuIGZ1bmN0aW9uKGMsbyxsLGgseCxkKXtmb3IodmFyIEkseSxWLFgscmUsdj0wLHU9IiIscD1bXSxrPVtdLFQ9MCxnPTAsTj0wLE09IiIsUD0wLFI9MCxiPTAsZWU9MCxsZT1BcnJheS5pc0FycmF5KGQuQ2VsbFhmKSxkZT1bXSx1ZT1bXSxGZT1BcnJheS5pc0Fy''@;'; put 'put ''cmF5KG8pLGNlPVtdLHhlPXt9LEs9ITEsQz0hIWwuc2hlZXRTdHVicyxVPWMuc3BsaXQodCksTz0wLEQ9VS5sZW5ndGg7TyE9RDsrK08pe3ZhciBqPSh1PVVbT10udHJpbSgpKS5sZW5ndGg7aWYoMCE9PWope3ZhciBzZT0wO2U6Zm9yKHY9MDt2PGo7Kyt2KXN3aXRjaCh1W3ZdKXtjYXNlIj4i''@;'; put 'put ''OmlmKCIvIiE9dVt2LTFdKXsrK3Y7YnJlYWsgZX1pZihsJiZsLmNlbGxTdHlsZXMpe2lmKFA9bnVsbCE9KHk9bWUodS5zbGljZShzZSx2KSwhMCkpLnI/cGFyc2VJbnQoeS5yLDEwKTpQKzEsUj0tMSxsLnNoZWV0Um93cyYmbC5zaGVldFJvd3M8UCljb250aW51ZTt4ZT17fSxLPSExLHkuaHQm''@;'; put 'put ''JihLPSEwLHhlLmhwdD1wYXJzZUZsb2F0KHkuaHQpLHhlLmhweD1vYSh4ZS5ocHQpKSwiMSI9PXkuaGlkZGVuJiYoSz0hMCx4ZS5oaWRkZW49ITApLG51bGwhPXkub3V0bGluZUxldmVsJiYoSz0hMCx4ZS5sZXZlbD0reS5vdXRsaW5lTGV2ZWwpLEsmJihjZVtQLTFdPXhlKX1icmVhaztjYXNl''@;'; put 'put ''IjwiOnNlPXZ9aWYoc2U+PXYpYnJlYWs7aWYoUD1udWxsIT0oeT1tZSh1LnNsaWNlKHNlLHYpLCEwKSkucj9wYXJzZUludCh5LnIsMTApOlArMSxSPS0xLCEobC5zaGVldFJvd3MmJmwuc2hlZXRSb3dzPFApKXtoLnMucj5QLTEmJihoLnMucj1QLTEpLGguZS5yPFAtMSYmKGguZS5yPVAtMSks''@;'; put 'put ''bCYmbC5jZWxsU3R5bGVzJiYoeGU9e30sSz0hMSx5Lmh0JiYoSz0hMCx4ZS5ocHQ9cGFyc2VGbG9hdCh5Lmh0KSx4ZS5ocHg9b2EoeGUuaHB0KSksIjEiPT15LmhpZGRlbiYmKEs9ITAseGUuaGlkZGVuPSEwKSxudWxsIT15Lm91dGxpbmVMZXZlbCYmKEs9ITAseGUubGV2ZWw9K3kub3V0bGlu''@;'; put 'put ''ZUxldmVsKSxLJiYoY2VbUC0xXT14ZSkpLHA9dS5zbGljZSh2KS5zcGxpdChlKTtmb3IodmFyIFo9MDtaIT1wLmxlbmd0aCYmIjwiPT1wW1pdLnRyaW0oKS5jaGFyQXQoMCk7KytaKTtmb3IocD1wLnNsaWNlKFopLHY9MDt2IT1wLmxlbmd0aDsrK3YpaWYoMCE9PSh1PXBbdl0udHJpbSgpKS5s''@;'; put 'put ''ZW5ndGgpe2lmKGs9dS5tYXRjaChyKSxUPXYsZz0wLE49MCx1PSI8YyAiKygiPCI9PXUuc2xpY2UoMCwxKT8iPiI6IiIpK3UsbnVsbCE9ayYmMj09PWsubGVuZ3RoKXtmb3IoVD0wLE09a1sxXSxnPTA7ZyE9TS5sZW5ndGgmJiEoKE49TS5jaGFyQ29kZUF0KGcpLTY0KTwxfHxOPjI2KTsrK2cp''@;'; put 'put ''VD0yNipUK047Uj0tLVR9ZWxzZSsrUjtmb3IoZz0wO2chPXUubGVuZ3RoJiY2MiE9PXUuY2hhckNvZGVBdChnKTsrK2cpO2lmKCsrZywoeT1tZSh1LnNsaWNlKDAsZyksITApKS5yfHwoeS5yPWdlKHtyOlAtMSxjOlJ9KSksST17dDoiIn0sbnVsbCE9KGs9KE09dS5zbGljZShnKSkubWF0Y2go''@;'; put 'put ''aSkpJiYiIiE9PWtbMV0mJihJLnY9SWUoa1sxXSkpLGwuY2VsbEZvcm11bGEpe2lmKG51bGwhPShrPU0ubWF0Y2gocykpJiYiIiE9PWtbMV0pe2lmKEkuZj1JZShCZShrWzFdKSkucmVwbGFjZSgvXHJcbi9nLCJcbiIpLGwueGxmbnx8KEkuZj1FZihJLmYpKSxrWzBdLmluZGV4T2YoJ3Q9ImFy''@;'; put 'put ''cmF5IicpPi0xKUkuRj0oTS5tYXRjaChuKXx8W10pWzFdLEkuRi5pbmRleE9mKCI6Iik+LTEmJmRlLnB1c2goW0RlKEkuRiksSS5GXSk7ZWxzZSBpZihrWzBdLmluZGV4T2YoJ3Q9InNoYXJlZCInKT4tMSl7WD1tZShrWzBdKTt2YXIgUT1JZShCZShrWzFdKSk7bC54bGZufHwoUT1FZihRKSks''@;'; put 'put ''dWVbcGFyc2VJbnQoWC5zaSwxMCldPVtYLFEseS5yXX19ZWxzZShrPU0ubWF0Y2goLzxmW14+XSpcLz4vKSkmJnVlWyhYPW1lKGtbMF0pKS5zaV0mJihJLmY9SXgodWVbWC5zaV1bMV0sdWVbWC5zaV1bMl0seS5yKSk7dmFyIFk9R2UoeS5yKTtmb3IoZz0wO2c8ZGUubGVuZ3RoOysrZylZLnI+''@;'; put 'put ''PWRlW2ddWzBdLnMuciYmWS5yPD1kZVtnXVswXS5lLnImJlkuYz49ZGVbZ11bMF0ucy5jJiZZLmM8PWRlW2ddWzBdLmUuYyYmKEkuRj1kZVtnXVsxXSl9aWYobnVsbD09eS50JiZ2b2lkIDA9PT1JLnYpaWYoSS5mfHxJLkYpSS52PTAsSS50PSJuIjtlbHNle2lmKCFDKWNvbnRpbnVlO0kudD0i''@;'; put 'put ''eiJ9ZWxzZSBJLnQ9eS50fHwibiI7c3dpdGNoKGgucy5jPlImJihoLnMuYz1SKSxoLmUuYzxSJiYoaC5lLmM9UiksSS50KXtjYXNlIm4iOmlmKCIiPT1JLnZ8fG51bGw9PUkudil7aWYoIUMpY29udGludWU7SS50PSJ6In1lbHNlIEkudj1wYXJzZUZsb2F0KEkudik7YnJlYWs7Y2FzZSJzIjpp''@;'; put 'put ''Zih0eXBlb2YgSS52PiJ1Iil7aWYoIUMpY29udGludWU7SS50PSJ6In1lbHNlIFY9VmFbcGFyc2VJbnQoSS52LDEwKV0sSS52PVYudCxJLnI9Vi5yLGwuY2VsbEhUTUwmJihJLmg9Vi5oKTticmVhaztjYXNlInN0ciI6SS50PSJzIixJLnY9bnVsbCE9SS52P0JlKEkudik6IiIsbC5jZWxsSFRN''@;'; put 'put ''TCYmKEkuaD0kMChJLnYpKTticmVhaztjYXNlImlubGluZVN0ciI6az1NLm1hdGNoKGEpLEkudD0icyIsbnVsbCE9ayYmKFY9U24oa1sxXSkpPyhJLnY9Vi50LGwuY2VsbEhUTUwmJihJLmg9Vi5oKSk6SS52PSIiO2JyZWFrO2Nhc2UiYiI6SS52PVdlKEkudik7YnJlYWs7Y2FzZSJkIjpsLmNl''@;'; put 'put ''bGxEYXRlcz9JLnY9WGUoSS52LDEpOihJLnY9aXIoWGUoSS52LDEpKSxJLnQ9Im4iKTticmVhaztjYXNlImUiOighbHx8ITEhPT1sLmNlbGxUZXh0KSYmKEkudz1JLnYpLEkudj1kc1tJLnZdfWlmKGI9ZWU9MCxyZT1udWxsLGxlJiZ2b2lkIDAhPT15LnMmJm51bGwhPShyZT1kLkNlbGxYZlt5''@;'; put 'put ''LnNdKSYmKG51bGwhPXJlLm51bUZtdElkJiYoYj1yZS5udW1GbXRJZCksbC5jZWxsU3R5bGVzJiZudWxsIT1yZS5maWxsSWQmJihlZT1yZS5maWxsSWQpKSxiZihJLGIsZWUsbCx4LGQpLGwuY2VsbERhdGVzJiZsZSYmIm4iPT1JLnQmJmJ0KHBlW2JdKSYmKEkudD0iZCIsSS52PW8wKEkudikp''@;'; put 'put ''LHkuY20mJmwueGxtZXRhKXt2YXIgRWU9KGwueGxtZXRhLkNlbGx8fFtdKVsreS5jbS0xXTtFZSYmIlhMREFQUiI9PUVlLnR5cGUmJihJLkQ9ITApfWlmKEZlKXt2YXIgQT1HZSh5LnIpO29bQS5yXXx8KG9bQS5yXT1bXSksb1tBLnJdW0EuY109SX1lbHNlIG9beS5yXT1JfX19fWNlLmxlbmd0''@;'; put 'put ''aD4wJiYob1siIXJvd3MiXT1jZSl9fSgpLE12PVd0O2Z1bmN0aW9uIEJmKGUpe3JldHVybltNdChlKSxncihlKSwibiJdfXZhciBrMj1XdCxNZj1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdO3ZhciBCbj1bWyJhbGxvd1JlZnJlc2hRdWVyeSIsITEs''@;'; put 'put ''ImJvb2wiXSxbImF1dG9Db21wcmVzc1BpY3R1cmVzIiwhMCwiYm9vbCJdLFsiYmFja3VwRmlsZSIsITEsImJvb2wiXSxbImNoZWNrQ29tcGF0aWJpbGl0eSIsITEsImJvb2wiXSxbIkNvZGVOYW1lIiwiIl0sWyJkYXRlMTkwNCIsITEsImJvb2wiXSxbImRlZmF1bHRUaGVtZVZlcnNpb24iLDAs''@;'; put 'put ''ImludCJdLFsiZmlsdGVyUHJpdmFjeSIsITEsImJvb2wiXSxbImhpZGVQaXZvdEZpZWxkTGlzdCIsITEsImJvb2wiXSxbInByb21wdGVkU29sdXRpb25zIiwhMSwiYm9vbCJdLFsicHVibGlzaEl0ZW1zIiwhMSwiYm9vbCJdLFsicmVmcmVzaEFsbENvbm5lY3Rpb25zIiwhMSwiYm9vbCJdLFsi''@;'; put 'put ''c2F2ZUV4dGVybmFsTGlua1ZhbHVlcyIsITAsImJvb2wiXSxbInNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzIiwhMCwiYm9vbCJdLFsic2hvd0lua0Fubm90YXRpb24iLCEwLCJib29sIl0sWyJzaG93T2JqZWN0cyIsImFsbCJdLFsic2hvd1Bpdm90Q2hhcnRGaWx0ZXIiLCExLCJib29sIl0s''@;'; put 'put ''WyJ1cGRhdGVMaW5rcyIsInVzZXJTZXQiXV0sYXA9W1siYWN0aXZlVGFiIiwwLCJpbnQiXSxbImF1dG9GaWx0ZXJEYXRlR3JvdXBpbmciLCEwLCJib29sIl0sWyJmaXJzdFNoZWV0IiwwLCJpbnQiXSxbIm1pbmltaXplZCIsITEsImJvb2wiXSxbInNob3dIb3Jpem9udGFsU2Nyb2xsIiwhMCwi''@;'; put 'put ''Ym9vbCJdLFsic2hvd1NoZWV0VGFicyIsITAsImJvb2wiXSxbInNob3dWZXJ0aWNhbFNjcm9sbCIsITAsImJvb2wiXSxbInRhYlJhdGlvIiw2MDAsImludCJdLFsidmlzaWJpbGl0eSIsInZpc2libGUiXV0sbnA9W10saXA9W1siY2FsY0NvbXBsZXRlZCIsInRydWUiXSxbImNhbGNNb2RlIiwi''@;'; put 'put ''YXV0byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwidHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJdLFsiZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUiLCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50IiwiMTAwIl0sWyJpdGVyYXRlRGVsdGEi''@;'; put 'put ''LCIwLjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIFVmKGUsdCl7Zm9yKHZhciByPTA7ciE9ZS5sZW5ndGg7KytyKWZvcih2YXIgYT1lW3JdLG49MDtuIT10Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl07aWYobnVsbD09YVtpWzBdXSlhW2lbMF1dPWlbMV07ZWxzZSBzd2l0Y2goaVsy''@;'; put 'put ''XSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIGFbaVswXV0mJihhW2lbMF1dPVdlKGFbaVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBhW2lbMF1dJiYoYVtpWzBdXT1wYXJzZUludChhW2lbMF1dLDEwKSl9fX1mdW5jdGlvbiBXZihlLHQpe2Zvcih2YXIgcj0w''@;'; put 'put ''O3IhPXQubGVuZ3RoOysrcil7dmFyIGE9dFtyXTtpZihudWxsPT1lW2FbMF1dKWVbYVswXV09YVsxXTtlbHNlIHN3aXRjaChhWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgZVthWzBdXSYmKGVbYVswXV09V2UoZVthWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIGVbYVswXV0mJihlW2FbMF1dPXBhcnNlSW50KGVbYVswXV0sMTApKX19fWZ1bmN0aW9uIEhmKGUpe1dmKGUuV0JQcm9wcyxCbiksV2YoZS5DYWxjUHIsaXApLFVmKGUuV0JWaWV3LGFwKSxVZihlLlNoZWV0cyxucCksaGEuZGF0ZTE5MDQ9V2UoZS5XQlByb3BzLmRhdGUxOTA0KX12YXIg''@;'; put 'put ''ZnA9Il1bKj8vXFwiLnNwbGl0KCIiKTt2YXIgb3A9Lzxcdys6d29ya2Jvb2svO2Z1bmN0aW9uIHZwKGUsdCl7dmFyIHI9e307cmV0dXJuIGUucmVhZF9zaGlmdCg0KSxyLkFyY2hJRD1lLnJlYWRfc2hpZnQoNCksZS5sKz10LTgscn1mdW5jdGlvbiBTcChlLHQscixhLG4saSxzLGYpe3JldHVy''@;'; put 'put ''biIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIE0yKGUsdCxyLGEsbixpLHMpe2lmKCFlKXJldHVybiBlO3ZhciBmPXR8fHt9O2F8fChhPXsiIWlkIjp7fX0pLG51bGwhPXplJiZudWxsPT1mLmRlbnNlJiYoZi5kZW5zZT16ZSk7dmFyIG8sdix1LHAsayxULGcsTixNLEksYz1mLmRlbnNl''@;'; put 'put ''P1tdOnt9LGw9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0saD1bXSx4PSExLGQ9ITEseT1bXTtmLmJpZmY9MTIsZlsiIXJvdyJdPTA7dmFyIFA9MCxSPSExLFY9W10sWD17fSxiPWYuc3VwYm9va3N8fG4uc3VwYm9va3N8fFtbXV07aWYoYi5zaGFyZWRmPVgsYi5hcnJheWY9VixiLlNo''@;'; put 'put ''ZWV0TmFtZXM9bi5TaGVldE5hbWVzfHxuLlNoZWV0cy5tYXAoZnVuY3Rpb24oeGUpe3JldHVybiB4ZS5uYW1lfSksIWYuc3VwYm9va3MmJihmLnN1cGJvb2tzPWIsbi5OYW1lcykpZm9yKHZhciBlZT0wO2VlPG4uTmFtZXMubGVuZ3RoOysrZWUpYlswXVtlZSsxXT1uLk5hbWVzW2VlXTt2YXIg''@;'; put 'put ''dWUsRmUsbGU9W10scmU9W10sZGU9ITE7aWYoJGFbMTZdPXtuOiJCcnRTaG9ydFJlYWwiLGY6QmZ9LGh0KGUsZnVuY3Rpb24oSyxDLFUpe2lmKCFkKXN3aXRjaChVKXtjYXNlIDE0ODpvPUs7YnJlYWs7Y2FzZSAwOnY9SyxmLnNoZWV0Um93cyYmZi5zaGVldFJvd3M8PXYuciYmKGQ9ITApLE09''@;'; put 'put ''S2Uoaz12LnIpLGZbIiFyb3ciXT12LnIsKEsuaGlkZGVufHxLLmhwdHx8bnVsbCE9Sy5sZXZlbCkmJihLLmhwdCYmKEsuaHB4PW9hKEsuaHB0KSkscmVbSy5yXT1LKTticmVhaztjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6''@;'; put 'put ''Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDYyOnN3aXRjaCh1PXt0OktbMl19LEtbMl0pe2Nhc2UibiI6dS52PUtbMV07YnJlYWs7Y2FzZSJzIjp1LnY9KE49VmFbS1sxXV0pLnQsdS5yPU4ucjticmVhaztjYXNlImIiOnUudj0h''@;'; put 'put ''IUtbMV07YnJlYWs7Y2FzZSJlIjp1LnY9S1sxXSwhMSE9PWYuY2VsbFRleHQmJih1Lnc9eHRbdS52XSk7YnJlYWs7Y2FzZSJzdHIiOnUudD0icyIsdS52PUtbMV07YnJlYWs7Y2FzZSJpcyI6dS50PSJzIix1LnY9S1sxXS50fWlmKChwPXMuQ2VsbFhmW0tbMF0uaVN0eWxlUmVmXSkmJmJmKHUs''@;'; put 'put ''cC5udW1GbXRJZCxudWxsLGYsaSxzKSxUPS0xPT1LWzBdLmM/VCsxOktbMF0uYyxmLmRlbnNlPyhjW2tdfHwoY1trXT1bXSksY1trXVtUXT11KTpjW0hlKFQpK01dPXUsZi5jZWxsRm9ybXVsYSl7Zm9yKFI9ITEsUD0wO1A8Vi5sZW5ndGg7KytQKXt2YXIgTz1WW1BdO3Yucj49T1swXS5zLnIm''@;'; put 'put ''JnYucjw9T1swXS5lLnImJlQ+PU9bMF0ucy5jJiZUPD1PWzBdLmUuYyYmKHUuRj13ZShPWzBdKSxSPSEwKX0hUiYmSy5sZW5ndGg+MyYmKHUuZj1LWzNdKX1pZihsLnMucj52LnImJihsLnMucj12LnIpLGwucy5jPlQmJihsLnMuYz1UKSxsLmUucjx2LnImJihsLmUucj12LnIpLGwuZS5jPFQm''@;'; put 'put ''JihsLmUuYz1UKSxmLmNlbGxEYXRlcyYmcCYmIm4iPT11LnQmJmJ0KHBlW3AubnVtRm10SWRdKSl7dmFyIEQ9a3QodS52KTtEJiYodS50PSJkIix1LnY9bmV3IERhdGUoRC55LEQubS0xLEQuZCxELkgsRC5NLEQuUyxELnUpKX11ZSYmKCJYTERBUFIiPT11ZS50eXBlJiYodS5EPSEwKSx1ZT12''@;'; put 'put ''b2lkIDApLEZlJiYoRmU9dm9pZCAwKTticmVhaztjYXNlIDE6Y2FzZSAxMjppZighZi5zaGVldFN0dWJzfHx4KWJyZWFrO3U9e3Q6InoiLHY6dm9pZCAwfSxUPS0xPT1LWzBdLmM/VCsxOktbMF0uYyxmLmRlbnNlPyhjW2tdfHwoY1trXT1bXSksY1trXVtUXT11KTpjW0hlKFQpK01dPXUsbC5z''@;'; put 'put ''LnI+di5yJiYobC5zLnI9di5yKSxsLnMuYz5UJiYobC5zLmM9VCksbC5lLnI8di5yJiYobC5lLnI9di5yKSxsLmUuYzxUJiYobC5lLmM9VCksdWUmJigiWExEQVBSIj09dWUudHlwZSYmKHUuRD0hMCksdWU9dm9pZCAwKSxGZSYmKEZlPXZvaWQgMCk7YnJlYWs7Y2FzZSAxNzY6eS5wdXNoKEsp''@;'; put 'put ''O2JyZWFrO2Nhc2UgNDk6dWU9KChmLnhsbWV0YXx8e30pLkNlbGx8fFtdKVtLLTFdO2JyZWFrO2Nhc2UgNDk0OnZhciBqPWFbIiFpZCJdW0sucmVsSWRdO2ZvcihqPyhLLlRhcmdldD1qLlRhcmdldCxLLmxvYyYmKEsuVGFyZ2V0Kz0iIyIrSy5sb2MpLEsuUmVsPWopOiIiPT1LLnJlbElkJiYo''@;'; put 'put ''Sy5UYXJnZXQ9IiMiK0subG9jKSxrPUsucmZ4LnMucjtrPD1LLnJmeC5lLnI7KytrKWZvcihUPUsucmZ4LnMuYztUPD1LLnJmeC5lLmM7KytUKWYuZGVuc2U/KGNba118fChjW2tdPVtdKSxjW2tdW1RdfHwoY1trXVtUXT17dDoieiIsdjp2b2lkIDB9KSxjW2tdW1RdLmw9Syk6KGc9Z2Uoe2M6''@;'; put 'put ''VCxyOmt9KSxjW2ddfHwoY1tnXT17dDoieiIsdjp2b2lkIDB9KSxjW2ddLmw9Syk7YnJlYWs7Y2FzZSA0MjY6aWYoIWYuY2VsbEZvcm11bGEpYnJlYWs7Vi5wdXNoKEspLChJPWYuZGVuc2U/Y1trXVtUXTpjW0hlKFQpK01dKS5mPWtyKEtbMV0sMCx7cjp2LnIsYzpUfSxiLGYpLEkuRj13ZShL''@;'; put 'put ''WzBdKTticmVhaztjYXNlIDQyNzppZighZi5jZWxsRm9ybXVsYSlicmVhaztYW2dlKEtbMF0ucyldPUtbMV0sKEk9Zi5kZW5zZT9jW2tdW1RdOmNbSGUoVCkrTV0pLmY9a3IoS1sxXSwwLHtyOnYucixjOlR9LGIsZik7YnJlYWs7Y2FzZSA2MDppZighZi5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7''@;'; put 'put ''Sy5lPj1LLnM7KWxlW0suZS0tXT17d2lkdGg6Sy53LzI1NixoaWRkZW46ISEoMSZLLmZsYWdzKSxsZXZlbDpLLmxldmVsfSxkZXx8KGRlPSEwLEFuKEsudy8yNTYpKSxLdChsZVtLLmUrMV0pO2JyZWFrO2Nhc2UgMTYxOmNbIiFhdXRvZmlsdGVyIl09e3JlZjp3ZShLKX07YnJlYWs7Y2FzZSA0''@;'; put 'put ''NzY6Y1siIW1hcmdpbnMiXT1LO2JyZWFrO2Nhc2UgMTQ3Om4uU2hlZXRzW3JdfHwobi5TaGVldHNbcl09e30pLEsubmFtZSYmKG4uU2hlZXRzW3JdLkNvZGVOYW1lPUsubmFtZSksKEsuYWJvdmV8fEsubGVmdCkmJihjWyIhb3V0bGluZSJdPXthYm92ZTpLLmFib3ZlLGxlZnQ6Sy5sZWZ0fSk7''@;'; put 'put ''YnJlYWs7Y2FzZSAxMzc6bi5WaWV3c3x8KG4uVmlld3M9W3t9XSksbi5WaWV3c1swXXx8KG4uVmlld3NbMF09e30pLEsuUlRMJiYobi5WaWV3c1swXS5SVEw9ITApO2JyZWFrO2Nhc2UgNDg1OmNhc2UgNjQ6Y2FzZSAxMDUzOmNhc2UgMTUxOmNhc2UgMTUyOmNhc2UgMTc1OmNhc2UgNjQ0OmNh''@;'; put 'put ''c2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDU4OTpjYXNlIDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAxNjg6Y2FzZSAxNzQ6Y2FzZSAxMTgwOmNhc2UgNDk5OmNhc2UgNTA3''@;'; put 'put ''OmNhc2UgNTUwOmNhc2UgMTcxOmNhc2UgMTY3OmNhc2UgMTE3NzpjYXNlIDE2OTpjYXNlIDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2FzZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1MzY6Y2FzZSAxMTAzOmNhc2UgNjgwOmNhc2UgMTEwNDpjYXNlIDEw''@;'; put 'put ''MjQ6Y2FzZSA2NjM6Y2FzZSA1MzU6Y2FzZSA2Nzg6Y2FzZSA1MDQ6Y2FzZSAxMDQzOmNhc2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpjYXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTp4PSEwO2JyZWFrO2Nhc2UgMzY6eD0hMTticmVhaztjYXNlIDM3OmgucHVzaChV''@;'; put 'put ''KSx4PSEwO2JyZWFrO2Nhc2UgMzg6aC5wb3AoKSx4PSExO2JyZWFrO2RlZmF1bHQ6aWYoIUMuVCYmKCF4fHxmLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIrVS50b1N0cmluZygxNikpfX0sZiksZGVsZXRlIGYuc3VwYm9va3MsZGVsZXRlIGZbIiFyb3ciXSwh''@;'; put 'put ''Y1siIXJlZiJdJiYobC5zLnI8MmU2fHxvJiYoby5lLnI+MHx8by5lLmM+MHx8by5zLnI+MHx8by5zLmM+MCkpJiYoY1siIXJlZiJdPXdlKG98fGwpKSxmLnNoZWV0Um93cyYmY1siIXJlZiJdKXt2YXIgY2U9RGUoY1siIXJlZiJdKTtmLnNoZWV0Um93czw9K2NlLmUuciYmKGNlLmUucj1mLnNo''@;'; put 'put ''ZWV0Um93cy0xLGNlLmUucj5sLmUuciYmKGNlLmUucj1sLmUuciksY2UuZS5yPGNlLnMuciYmKGNlLnMucj1jZS5lLnIpLGNlLmUuYz5sLmUuYyYmKGNlLmUuYz1sLmUuYyksY2UuZS5jPGNlLnMuYyYmKGNlLnMuYz1jZS5lLmMpLGNbIiFmdWxscmVmIl09Y1siIXJlZiJdLGNbIiFyZWYiXT13''@;'; put 'put ''ZShjZSkpfXJldHVybiB5Lmxlbmd0aD4wJiYoY1siIW1lcmdlcyJdPXkpLGxlLmxlbmd0aD4wJiYoY1siIWNvbHMiXT1sZSkscmUubGVuZ3RoPjAmJihjWyIhcm93cyJdPXJlKSxjfShlLGEscixuLGkscyxmKTpmdW5jdGlvbiB2dihlLHQscixhLG4saSxzKXtpZighZSlyZXR1cm4gZTthfHwo''@;'; put 'put ''YT17IiFpZCI6e319KSxudWxsIT16ZSYmbnVsbD09dC5kZW5zZSYmKHQuZGVuc2U9emUpO3ZhciBmPXQuZGVuc2U/W106e30sYz17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxvPSIiLGw9IiIsaD1lLm1hdGNoKGZ2KTtoPyhvPWUuc2xpY2UoMCxoLmluZGV4KSxsPWUuc2xpY2UoaC5p''@;'; put 'put ''bmRleCtoWzBdLmxlbmd0aCkpOm89bD1lO3ZhciB4PW8ubWF0Y2goUGYpO3g/TG4oeFswXSwwLG4scik6KHg9by5tYXRjaCh4dikpJiZmdW5jdGlvbiBtdihlLHQscixhLG4pe0xuKGUuc2xpY2UoMCxlLmluZGV4T2YoIj4iKSksMCxhLG4pfSh4WzBdLDAsMCxuLHIpO3ZhciBkPShvLm1hdGNo''@;'; put 'put ''KC88KD86XHcqOik/ZGltZW5zaW9uLyl8fHtpbmRleDotMX0pLmluZGV4O2lmKGQ+MCl7dmFyIHY9by5zbGljZShkLGQrNTApLm1hdGNoKG92KTt2JiZmdW5jdGlvbiBpdihlLHQpe3ZhciByPURlKHQpO3Iucy5yPD1yLmUuciYmci5zLmM8PXIuZS5jJiZyLnMucj49MCYmci5zLmM+PTAmJihl''@;'; put 'put ''WyIhcmVmIl09d2UocikpfShmLHZbMV0pfXZhciB1PW8ubWF0Y2goZHYpO3UmJnVbMV0mJmZ1bmN0aW9uIE92KGUsdCl7dC5WaWV3c3x8KHQuVmlld3M9W3t9XSksKGUubWF0Y2goRHYpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyLGEpe3ZhciBuPW1lKHIpO3QuVmlld3NbYV18fCh0LlZpZXdz''@;'; put 'put ''W2FdPXt9KSwrbi56b29tU2NhbGUmJih0LlZpZXdzW2FdLnpvb209K24uem9vbVNjYWxlKSxXZShuLnJpZ2h0VG9MZWZ0KSYmKHQuVmlld3NbYV0uUlRMPSEwKX0pfSh1WzFdLG4pO3ZhciBwPVtdO2lmKHQuY2VsbFN0eWxlcyl7dmFyIGs9by5tYXRjaChsdik7ayYmZnVuY3Rpb24gRnYoZSx0''@;'; put 'put ''KXtmb3IodmFyIHI9ITEsYT0wO2EhPXQubGVuZ3RoOysrYSl7dmFyIG49bWUodFthXSwhMCk7bi5oaWRkZW4mJihuLmhpZGRlbj1XZShuLmhpZGRlbikpO3ZhciBpPXBhcnNlSW50KG4ubWluLDEwKS0xLHM9cGFyc2VJbnQobi5tYXgsMTApLTE7Zm9yKG4ub3V0bGluZUxldmVsJiYobi5sZXZl''@;'; put 'put ''bD0rbi5vdXRsaW5lTGV2ZWx8fDApLGRlbGV0ZSBuLm1pbixkZWxldGUgbi5tYXgsbi53aWR0aD0rbi53aWR0aCwhciYmbi53aWR0aCYmKHI9ITAsQW4obi53aWR0aCkpLEt0KG4pO2k8PXM7KWVbaSsrXT1NZShuKX19KHAsayl9aCYmTnYoaFsxXSxmLHQsYyxpLHMpO3ZhciBUPWwubWF0Y2go''@;'; put 'put ''dXYpO1QmJihmWyIhYXV0b2ZpbHRlciJdPWZ1bmN0aW9uIEF2KGUpe3JldHVybntyZWY6KGUubWF0Y2goL3JlZj0iKFteIl0qKSIvKXx8W10pWzFdfX0oVFswXSkpO3ZhciBnPVtdLE49bC5tYXRjaChzdik7aWYoTilmb3IoZD0wO2QhPU4ubGVuZ3RoOysrZClnW2RdPURlKE5bZF0uc2xpY2Uo''@;'; put 'put ''TltkXS5pbmRleE9mKCciJykrMSkpO3ZhciBNPWwubWF0Y2goY3YpO00mJmZ1bmN0aW9uIEV2KGUsdCxyKXtmb3IodmFyIGE9QXJyYXkuaXNBcnJheShlKSxuPTA7biE9dC5sZW5ndGg7KytuKXt2YXIgaT1tZShCZSh0W25dKSwhMCk7aWYoIWkucmVmKXJldHVybjt2YXIgcz0oKHJ8fHt9KVsi''@;'; put 'put ''IWlkIl18fFtdKVtpLmlkXTtzPyhpLlRhcmdldD1zLlRhcmdldCxpLmxvY2F0aW9uJiYoaS5UYXJnZXQrPSIjIitJZShpLmxvY2F0aW9uKSkpOihpLlRhcmdldD0iIyIrSWUoaS5sb2NhdGlvbikscz17VGFyZ2V0OmkuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLGkuUmVsPXMsaS50''@;'; put 'put ''b29sdGlwJiYoaS5Ub29sdGlwPWkudG9vbHRpcCxkZWxldGUgaS50b29sdGlwKTtmb3IodmFyIGY9RGUoaS5yZWYpLGM9Zi5zLnI7Yzw9Zi5lLnI7KytjKWZvcih2YXIgbz1mLnMuYztvPD1mLmUuYzsrK28pe3ZhciBsPWdlKHtjOm8scjpjfSk7YT8oZVtjXXx8KGVbY109W10pLGVbY11bb118''@;'; put 'put ''fChlW2NdW29dPXt0OiJ6Iix2OnZvaWQgMH0pLGVbY11bb10ubD1pKTooZVtsXXx8KGVbbF09e3Q6InoiLHY6dm9pZCAwfSksZVtsXS5sPWkpfX19KGYsTSxhKTt2YXIgST1sLm1hdGNoKGh2KTtpZihJJiYoZlsiIW1hcmdpbnMiXT1mdW5jdGlvbiBUdihlKXt2YXIgdD17fTtyZXR1cm5bImxl''@;'; put 'put ''ZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24ocil7ZVtyXSYmKHRbcl09cGFyc2VGbG9hdChlW3JdKSl9KSx0fShtZShJWzBdKSkpLCFmWyIhcmVmIl0mJmMuZS5jPj1jLnMuYyYmYy5lLnI+PWMucy5yJiYoZlsiIXJlZiJdPXdl''@;'; put 'put ''KGMpKSx0LnNoZWV0Um93cz4wJiZmWyIhcmVmIl0pe3ZhciB5PURlKGZbIiFyZWYiXSk7dC5zaGVldFJvd3M8PSt5LmUuciYmKHkuZS5yPXQuc2hlZXRSb3dzLTEseS5lLnI+Yy5lLnImJih5LmUucj1jLmUucikseS5lLnI8eS5zLnImJih5LnMucj15LmUucikseS5lLmM+Yy5lLmMmJih5LmUu''@;'; put 'put ''Yz1jLmUuYykseS5lLmM8eS5zLmMmJih5LnMuYz15LmUuYyksZlsiIWZ1bGxyZWYiXT1mWyIhcmVmIl0sZlsiIXJlZiJdPXdlKHkpKX1yZXR1cm4gcC5sZW5ndGg+MCYmKGZbIiFjb2xzIl09cCksZy5sZW5ndGg+MCYmKGZbIiFtZXJnZXMiXT1nKSxmfShlLGEscixuLGkscyxmKX12YXIgR2Es''@;'; put 'put ''emY9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkvZywkZj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIFpyKGUsdCl7dmFyIHI9ZS5zcGxpdCgvXHMrLyksYT1bXTtpZih0fHwoYVswXT1y''@;'; put 'put ''WzBdKSwxPT09ci5sZW5ndGgpcmV0dXJuIGE7dmFyIGkscyxjLG49ZS5tYXRjaCh6Zik7aWYobilmb3IoYz0wO2MhPW4ubGVuZ3RoOysrYyktMT09PShzPShpPW5bY10ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP2FbaVsxXV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpOmFbInht''@;'; put 'put ''bG5zOiI9PT1pWzFdLnNsaWNlKDAsNik/InhtbG5zIitpWzFdLnNsaWNlKDYpOmlbMV0uc2xpY2UocysxKV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpO3JldHVybiBhfWZ1bmN0aW9uIEhwKGUpe3ZhciByPXt9O2lmKDE9PT1lLnNwbGl0KC9ccysvKS5sZW5ndGgpcmV0dXJuIHI7dmFy''@;'; put 'put ''IG4saSxmLGE9ZS5tYXRjaCh6Zik7aWYoYSlmb3IoZj0wO2YhPWEubGVuZ3RoOysrZiktMT09PShpPShuPWFbZl0ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP3JbblsxXV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpOnJbInhtbG5zOiI9PT1uWzFdLnNsaWNlKDAsNik/InhtbG5z''@;'; put 'put ''IituWzFdLnNsaWNlKDYpOm5bMV0uc2xpY2UoaSsxKV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpO3JldHVybiByfWZ1bmN0aW9uIFhwKGUsdCxyLGEpe3ZhciBuPWE7c3dpdGNoKChyWzBdLm1hdGNoKC9kdDpkdD0iKFtcdy5dKykiLyl8fFsiIiwiIl0pWzFdKXtjYXNlImJvb2xlYW4i''@;'; put 'put ''Om49V2UoYSk7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOm49cGFyc2VJbnQoYSwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJmbG9hdCI6bj1wYXJzZUZsb2F0KGEpO2JyZWFrO2Nhc2UiZGF0ZSI6Y2FzZSJkYXRlVGltZS50eiI6bj1YZShhKTticmVhaztjYXNlImk4IjpjYXNlInN0cmluZyI6''@;'; put 'put ''Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IityWzBdKX1lW0llKHQpXT1ufWZ1bmN0aW9uIHpwKGUsdCxyKXtpZihyLmNlbGxTdHlsZXMmJnQuSW50ZXJpb3Ipe3ZhciBhPXQuSW50ZXJp''@;'; put 'put ''b3I7YS5QYXR0ZXJuJiYoYS5wYXR0ZXJuVHlwZT1uMVthLlBhdHRlcm5dfHxhLlBhdHRlcm4pfWVbdC5JRF09dH1mdW5jdGlvbiAkcChlLHQscixhLG4saSxzLGYsYyxvKXt2YXIgbD0iR2VuZXJhbCIsaD1hLlN0eWxlSUQseD17fTtvPW98fHt9O3ZhciBkPVtdLHY9MDtmb3Iodm9pZCAwPT09''@;'; put 'put ''aCYmZiYmKGg9Zi5TdHlsZUlEKSx2b2lkIDA9PT1oJiZzJiYoaD1zLlN0eWxlSUQpO3ZvaWQgMCE9PWlbaF0mJihpW2hdLm5mJiYobD1pW2hdLm5mKSxpW2hdLkludGVyaW9yJiZkLnB1c2goaVtoXS5JbnRlcmlvciksaVtoXS5QYXJlbnQpOyloPWlbaF0uUGFyZW50O3N3aXRjaChyLlR5cGUp''@;'; put 'put ''e2Nhc2UiQm9vbGVhbiI6YS50PSJiIixhLnY9V2UoZSk7YnJlYWs7Y2FzZSJTdHJpbmciOmEudD0icyIsYS5yPUJpKEllKGUpKSxhLnY9ZS5pbmRleE9mKCI8Iik+LTE/SWUodHx8ZSkucmVwbGFjZSgvPC4qPz4vZywiIik6YS5yO2JyZWFrO2Nhc2UiRGF0ZVRpbWUiOiJaIiE9ZS5zbGljZSgt''@;'; put 'put ''MSkmJihlKz0iWiIpLGEudj0oWGUoZSktbmV3IERhdGUoRGF0ZS5VVEMoMTg5OSwxMSwzMCkpKS84NjRlNSxhLnYhPWEudj9hLnY9SWUoZSk6YS52PDYwJiYoYS52PWEudi0xKSwoIWx8fCJHZW5lcmFsIj09bCkmJihsPSJ5eXl5LW1tLWRkIik7Y2FzZSJOdW1iZXIiOnZvaWQgMD09PWEudiYm''@;'; put 'put ''KGEudj0rZSksYS50fHwoYS50PSJuIik7YnJlYWs7Y2FzZSJFcnJvciI6YS50PSJlIixhLnY9ZHNbZV0sITEhPT1vLmNlbGxUZXh0JiYoYS53PWUpO2JyZWFrO2RlZmF1bHQ6IiI9PWUmJiIiPT10P2EudD0ieiI6KGEudD0icyIsYS52PUJpKHR8fGUpKX1pZihmdW5jdGlvbiBHcChlLHQscil7''@;'; put 'put ''aWYoInoiIT09ZS50KXtpZighcnx8ITEhPT1yLmNlbGxUZXh0KXRyeXtlLnc9ImUiPT09ZS50P2Uud3x8eHRbZS52XToiR2VuZXJhbCI9PT10PyJuIj09PWUudD8oMHxlLnYpPT09ZS52P2Uudi50b1N0cmluZygxMCk6a2EoZS52KTpOdChlLnYpOmZ1bmN0aW9uIFZwKGUsdCl7dmFyIHI9R2Fb''@;'; put 'put ''ZV18fEllKGUpO3JldHVybiJHZW5lcmFsIj09PXI/TnQodCk6UnIocix0KX0odHx8IkdlbmVyYWwiLGUudil9Y2F0Y2goaSl7aWYoci5XVEYpdGhyb3cgaX10cnl7dmFyIGE9R2FbdF18fHR8fCJHZW5lcmFsIjtpZihyLmNlbGxORiYmKGUuej1hKSxyLmNlbGxEYXRlcyYmIm4iPT1lLnQmJmJ0''@;'; put 'put ''KGEpKXt2YXIgbj1rdChlLnYpO24mJihlLnQ9ImQiLGUudj1uZXcgRGF0ZShuLnksbi5tLTEsbi5kLG4uSCxuLk0sbi5TLG4udSkpfX1jYXRjaChpKXtpZihyLldURil0aHJvdyBpfX19KGEsbCxvKSwhMSE9PW8uY2VsbEZvcm11bGEpaWYoYS5Gb3JtdWxhKXt2YXIgdT1JZShhLkZvcm11bGEp''@;'; put 'put ''OzYxPT11LmNoYXJDb2RlQXQoMCkmJih1PXUuc2xpY2UoMSkpLGEuZj11YSh1LG4pLGRlbGV0ZSBhLkZvcm11bGEsIlJDIj09YS5BcnJheVJhbmdlP2EuRj11YSgiUkM6UkMiLG4pOmEuQXJyYXlSYW5nZSYmKGEuRj11YShhLkFycmF5UmFuZ2UsbiksYy5wdXNoKFtEZShhLkYpLGEuRl0pKX1l''@;'; put 'put ''bHNlIGZvcih2PTA7djxjLmxlbmd0aDsrK3Ypbi5yPj1jW3ZdWzBdLnMuciYmbi5yPD1jW3ZdWzBdLmUuciYmbi5jPj1jW3ZdWzBdLnMuYyYmbi5jPD1jW3ZdWzBdLmUuYyYmKGEuRj1jW3ZdWzFdKTtvLmNlbGxTdHlsZXMmJihkLmZvckVhY2goZnVuY3Rpb24ocCl7IXgucGF0dGVyblR5cGUm''@;'; put 'put ''JnAucGF0dGVyblR5cGUmJih4LnBhdHRlcm5UeXBlPXAucGF0dGVyblR5cGUpfSksYS5zPXgpLHZvaWQgMCE9PWEuU3R5bGVJRCYmKGEuaXhmZT1hLlN0eWxlSUQpfWZ1bmN0aW9uIGpwKGUpe2UudD1lLnZ8fCIiLGUudD1lLnQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2cs''@;'; put 'put ''IlxuIiksZS52PWUudz1lLml4ZmU9dm9pZCAwfWZ1bmN0aW9uIE1uKGUsdCl7dmFyIHI9dHx8e307dGEoKTt2YXIgYT1RdChZMChlKSk7KCJiaW5hcnkiPT1yLnR5cGV8fCJhcnJheSI9PXIudHlwZXx8ImJhc2U2NCI9PXIudHlwZSkmJihhPXR5cGVvZiBPZTwidSI/T2UudXRpbHMuZGVjb2Rl''@;'; put 'put ''KDY1MDAxLHQwKGEpKTpCZShhKSk7dmFyIG49YS5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCksaT0hMTtpZigoMTAyMyYobj1uLnJlcGxhY2UoLyIuKj8iL2csIiIpKS5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmbi5pbmRleE9mKCIsIiksMTAyMyZuLmluZGV4T2YoIjsiKSkpe3Zh''@;'; put 'put ''ciBzPU1lKHIpO3JldHVybiBzLnR5cGU9InN0cmluZyIsY2EudG9fd29ya2Jvb2soYSxzKX1pZigtMT09bi5pbmRleE9mKCI8P3htbCIpJiZbImh0bWwiLCJ0YWJsZSIsImhlYWQiLCJtZXRhIiwic2NyaXB0Iiwic3R5bGUiLCJkaXYiXS5mb3JFYWNoKGZ1bmN0aW9uKHFlKXtuLmluZGV4T2Yo''@;'; put 'put ''IjwiK3FlKT49MCYmKGk9ITApfSksaSlyZXR1cm4gZnVuY3Rpb24gRG0oZSx0KXt2YXIgcj1lLm1hdGNoKC88dGFibGVbXHNcU10qPz5bXHNcU10qPzxcL3RhYmxlPi9naSk7aWYoIXJ8fDA9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIVE1MOiBjb3VsZCBub3QgZmluZCA8''@;'; put 'put ''dGFibGU+Iik7aWYoMT09ci5sZW5ndGgpcmV0dXJuIEZ0KEpmKHJbMF0sdCksdCk7dmFyIGE9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7ZWkoYSxKZihuLHQpLCJTaGVldCIrKGkrMSkpfSksYX0oYSxyKTtHYT17IkdlbmVyYWwgTnVt''@;'; put 'put ''YmVyIjoiR2VuZXJhbCIsIkdlbmVyYWwgRGF0ZSI6cGVbMjJdLCJMb25nIERhdGUiOiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOnBlWzE1XSwiU2hvcnQgRGF0ZSI6cGVbMTRdLCJMb25nIFRpbWUiOnBlWzE5XSwiTWVkaXVtIFRpbWUiOnBlWzE4XSwiU2hvcnQgVGltZSI6''@;'; put 'put ''cGVbMjBdLEN1cnJlbmN5OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOnBlWzJdLFN0YW5kYXJkOnBlWzRdLFBlcmNlbnQ6cGVbMTBdLFNjaWVudGlmaWM6cGVbMTFdLCJZZXMvTm8iOiciWWVzIjsiWWVzIjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjonIlRydWUi''@;'; put 'put ''OyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfTt2YXIgZixvLGM9W107bnVsbCE9emUmJm51bGw9PXIuZGVuc2UmJihyLmRlbnNlPXplKTt2YXIgdWUsbD17fSxoPVtdLHg9ci5kZW5zZT9bXTp7fSxkPSIiLHY9e30sdT17fSxwPVpyKCc8RGF0YSBzczpU''@;'; put 'put ''eXBlPSJTdHJpbmciPicpLGs9MCxUPTAsZz0wLE49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sTT17fSxJPXt9LHk9IiIsUD0wLFI9W10sVj17fSxYPXt9LGI9MCxlZT1bXSxsZT1bXSxyZT17fSxkZT1bXSxGZT0hMSxjZT1bXSx4ZT1bXSxLPXt9LEM9MCxVPTAsTz17U2hlZXRzOltd''@;'; put 'put ''LFdCUHJvcHM6e2RhdGUxOTA0OiExfX0sRD17fTt5YS5sYXN0SW5kZXg9MCxhPWEucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpO2Zvcih2YXIgaj0iIjtmPXlhLmV4ZWMoYSk7KXN3aXRjaChmWzNdPShqPWZbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEi''@;'; put 'put ''PT1qKXtpZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UiLyIhPT1mWzBdLmNoYXJBdChmWzBdLmxlbmd0aC0yKSYmYy5wdXNoKFtmWzNdLCEwXSk7YnJlYWt9aWYoY1tjLmxlbmd0aC0x''@;'; put 'put ''XVsxXSlicmVhazsiLyI9PT1mWzFdPyRwKGEuc2xpY2UoayxmLmluZGV4KSx5LHAsImNvbW1lbnQiPT1jW2MubGVuZ3RoLTFdWzBdP3JlOnYse2M6VCxyOmd9LE0sZGVbVF0sdSxjZSxyKTooeT0iIixwPVpyKGZbMF0pLGs9Zi5pbmRleCtmWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJjZWxsIjpp''@;'; put 'put ''ZigiLyI9PT1mWzFdKWlmKGxlLmxlbmd0aD4wJiYodi5jPWxlKSwoIXIuc2hlZXRSb3dzfHxyLnNoZWV0Um93cz5nKSYmdm9pZCAwIT09di52JiYoci5kZW5zZT8oeFtnXXx8KHhbZ109W10pLHhbZ11bVF09dik6eFtIZShUKStLZShnKV09diksdi5IUmVmJiYodi5sPXtUYXJnZXQ6SWUodi5I''@;'; put 'put ''UmVmKX0sdi5IUmVmU2NyZWVuVGlwJiYodi5sLlRvb2x0aXA9di5IUmVmU2NyZWVuVGlwKSxkZWxldGUgdi5IUmVmLGRlbGV0ZSB2LkhSZWZTY3JlZW5UaXApLCh2Lk1lcmdlQWNyb3NzfHx2Lk1lcmdlRG93bikmJihDPVQrKDB8cGFyc2VJbnQodi5NZXJnZUFjcm9zcywxMCkpLFU9ZysoMHxw''@;'; put 'put ''YXJzZUludCh2Lk1lcmdlRG93biwxMCkpLFIucHVzaCh7czp7YzpULHI6Z30sZTp7YzpDLHI6VX19KSksci5zaGVldFN0dWJzKWlmKHYuTWVyZ2VBY3Jvc3N8fHYuTWVyZ2VEb3duKXtmb3IodmFyIHNlPVQ7c2U8PUM7KytzZSlmb3IodmFyIFo9ZztaPD1VOysrWikoc2U+VHx8Wj5nKSYmKHIu''@;'; put 'put ''ZGVuc2U/KHhbWl18fCh4W1pdPVtdKSx4W1pdW3NlXT17dDoieiJ9KTp4W0hlKHNlKStLZShaKV09e3Q6InoifSk7VD1DKzF9ZWxzZSsrVDtlbHNlIHYuTWVyZ2VBY3Jvc3M/VD1DKzE6KytUO2Vsc2Uodj1IcChmWzBdKSkuSW5kZXgmJihUPSt2LkluZGV4LTEpLFQ8Ti5zLmMmJihOLnMuYz1U''@;'; put 'put ''KSxUPk4uZS5jJiYoTi5lLmM9VCksIi8+Ij09PWZbMF0uc2xpY2UoLTIpJiYrK1QsbGU9W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PWZbMV18fCIvPiI9PT1mWzBdLnNsaWNlKC0yKT8oZzxOLnMuciYmKE4ucy5yPWcpLGc+Ti5lLnImJihOLmUucj1nKSwiLz4iPT09ZlswXS5zbGljZSgtMikm''@;'; put 'put ''Jih1PVpyKGZbMF0pKS5JbmRleCYmKGc9K3UuSW5kZXgtMSksVD0wLCsrZyk6KCh1PVpyKGZbMF0pKS5JbmRleCYmKGc9K3UuSW5kZXgtMSksSz17fSwoIjAiPT11LkF1dG9GaXRIZWlnaHR8fHUuSGVpZ2h0KSYmKEsuaHB4PXBhcnNlSW50KHUuSGVpZ2h0LDEwKSxLLmhwdD1CYShLLmhweCks''@;'; put 'put ''eGVbZ109SyksIjEiPT11LkhpZGRlbiYmKEsuaGlkZGVuPSEwLHhlW2ddPUspKTticmVhaztjYXNlIndvcmtzaGVldCI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK28uam9pbigifCIpKTtoLnB1c2goZCksTi5z''@;'; put 'put ''LnI8PU4uZS5yJiZOLnMuYzw9Ti5lLmMmJih4WyIhcmVmIl09d2UoTiksci5zaGVldFJvd3MmJnIuc2hlZXRSb3dzPD1OLmUuciYmKHhbIiFmdWxscmVmIl09eFsiIXJlZiJdLE4uZS5yPXIuc2hlZXRSb3dzLTEseFsiIXJlZiJdPXdlKE4pKSksUi5sZW5ndGgmJih4WyIhbWVyZ2VzIl09Uiks''@;'; put 'put ''ZGUubGVuZ3RoPjAmJih4WyIhY29scyJdPWRlKSx4ZS5sZW5ndGg+MCYmKHhbIiFyb3dzIl09eGUpLGxbZF09eH1lbHNlIE49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sZz1UPTAsYy5wdXNoKFtmWzNdLCExXSksbz1acihmWzBdKSxkPUllKG8uTmFtZSkseD1yLmRlbnNlP1tdOnt9''@;'; put 'put ''LFI9W10sY2U9W10seGU9W10sTy5TaGVldHMucHVzaChEPXtuYW1lOmQsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2V7aWYoIi8+''@;'; put 'put ''Ij09ZlswXS5zbGljZSgtMikpYnJlYWs7Yy5wdXNoKFtmWzNdLCExXSksZGU9W10sRmU9ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09ZlsxXT96cChNLEkscik6ST1acihmWzBdKTticmVhaztjYXNlIm51bWJlcmZvcm1hdCI6SS5uZj1JZShacihmWzBdKS5Gb3JtYXR8fCJHZW5lcmFsIiks''@;'; put 'put ''R2FbSS5uZl0mJihJLm5mPUdhW0kubmZdKTtmb3IodmFyIFE9MDszOTIhPVEmJnBlW1FdIT1JLm5mOysrUSk7aWYoMzkyPT1RKWZvcihRPTU3OzM5MiE9UTsrK1EpaWYobnVsbD09cGVbUV0pe2V0KEkubmYsUSk7YnJlYWt9YnJlYWs7Y2FzZSJjb2x1bW4iOmlmKCJ0YWJsZSIhPT1jW2MubGVu''@;'; put 'put ''Z3RoLTFdWzBdKWJyZWFrO2lmKCh1ZT1acihmWzBdKSkuSGlkZGVuJiYodWUuaGlkZGVuPSEwLGRlbGV0ZSB1ZS5IaWRkZW4pLHVlLldpZHRoJiYodWUud3B4PXBhcnNlSW50KHVlLldpZHRoLDEwKSksIUZlJiZ1ZS53cHg+MTApe0ZlPSEwLHdyPWxmO2Zvcih2YXIgWT0wO1k8ZGUubGVuZ3Ro''@;'; put 'put ''OysrWSlkZVtZXSYmS3QoZGVbWV0pfUZlJiZLdCh1ZSksZGVbdWUuSW5kZXgtMXx8ZGUubGVuZ3RoXT11ZTtmb3IodmFyIEVlPTA7RWU8K3VlLlNwYW47KytFZSlkZVtkZS5sZW5ndGhdPU1lKHVlKTticmVhaztjYXNlIm5hbWVkcmFuZ2UiOmlmKCIvIj09PWZbMV0pYnJlYWs7Ty5OYW1lc3x8''@;'; put 'put ''KE8uTmFtZXM9W10pO3ZhciBBPW1lKGZbMF0pLFBlPXtOYW1lOkEuTmFtZSxSZWY6dWEoQS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtPLlNoZWV0cy5sZW5ndGg+MCYmKFBlLlNoZWV0PU8uU2hlZXRzLmxlbmd0aC0xKSxPLk5hbWVzLnB1c2goUGUpO2JyZWFrO2Nhc2UibmFtZWRj''@;'; put 'put ''ZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlImFsaWdubWVudCI6Y2FzZSJib3JkZXJzIjpjYXNlImJvcmRlciI6Y2FzZSJwcm90ZWN0aW9uIjpjYXNlInBhcmFn''@;'; put 'put ''cmFwaHMiOmNhc2UibmFtZSI6Y2FzZSJwaXhlbHNwZXJpbmNoIjpjYXNlIm51bGwiOmJyZWFrO2Nhc2UiZm9udCI6aWYoIi8+Ij09PWZbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PWZbMV0/eSs9YS5zbGljZShQLGYuaW5kZXgpOlA9Zi5pbmRleCtmWzBdLmxlbmd0aDticmVhaztjYXNlImlu''@;'; put 'put ''dGVyaW9yIjppZighci5jZWxsU3R5bGVzKWJyZWFrO0kuSW50ZXJpb3I9WnIoZlswXSk7YnJlYWs7Y2FzZSJhdXRob3IiOmNhc2UidGl0bGUiOmNhc2UiZGVzY3JpcHRpb24iOmNhc2UiY3JlYXRlZCI6Y2FzZSJrZXl3b3JkcyI6Y2FzZSJzdWJqZWN0IjpjYXNlImNhdGVnb3J5IjpjYXNlImNv''@;'; put 'put ''bXBhbnkiOmNhc2UibGFzdGF1dGhvciI6Y2FzZSJsYXN0c2F2ZWQiOmNhc2UibGFzdHByaW50ZWQiOmNhc2UidmVyc2lvbiI6Y2FzZSJyZXZpc2lvbiI6Y2FzZSJ0b3RhbHRpbWUiOmNhc2UiaHlwZXJsaW5rYmFzZSI6Y2FzZSJtYW5hZ2VyIjpjYXNlImNvbnRlbnRzdGF0dXMiOmNhc2UiaWRl''@;'; put 'put ''bnRpZmllciI6Y2FzZSJsYW5ndWFnZSI6Y2FzZSJhcHBuYW1lIjppZigiLz4iPT09ZlswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09ZlsxXT9nbChWLGosYS5zbGljZShiLGYuaW5kZXgpKTpiPWYuaW5kZXgrZlswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Uid29ya2Jvb2siOmlm''@;'; put 'put ''KCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSl9ZWxzZSBjLnB1c2goW2ZbM10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSk7anAocmUpLGxlLnB1c2gocmUpfWVsc2UgYy5wdXNoKFtmWzNdLCExXSkscmU9e2E6KG89WnIoZlswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVsw''@;'; put 'put ''XSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09ZlswXS5jaGFyQXQoZlswXS5sZW5ndGgtMikpe3ZhciBBZT1acihmWzBdKTt4WyIhYXV0b2ZpbHRlciJdPXtyZWY6dWEoQWUuUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxj''@;'; put 'put ''LnB1c2goW2ZbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UiLyIhPT1mWzBdLmNoYXJBdChmWzBdLmxlbmd0aC0yKSYm''@;'; put 'put ''Yy5wdXNoKFtmWzNdLCEwXSk7YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpjYXNlImRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiOmNhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUi''@;'; put 'put ''OmNhc2UibmFtZXMiOmNhc2UibWFwaW5mbyI6Y2FzZSJwYWdlYnJlYWtzIjpjYXNlInF1ZXJ5dGFibGUiOmNhc2Uic29ydGluZyI6Y2FzZSJzY2hlbWEiOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpjYXNlInNtYXJ0dGFndHlwZSI6Y2FzZSJzbWFydHRhZ3MiOmNhc2UiZXhjZWx3b3Jr''@;'; put 'put ''Ym9vayI6Y2FzZSJ3b3JrYm9va29wdGlvbnMiOmNhc2Uid29ya3NoZWV0b3B0aW9ucyI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK28uam9pbigifCIpKX1lbHNlIi8iIT09ZlswXS5jaGFyQXQoZlswXS5sZW5n''@;'; put 'put ''dGgtMikmJmMucHVzaChbZlszXSwhMF0pO2JyZWFrO2RlZmF1bHQ6aWYoMD09Yy5sZW5ndGgmJiJkb2N1bWVudCI9PWZbM118fDA9PWMubGVuZ3RoJiYidW9mIj09ZlszXSlyZXR1cm4gY2MoYSxyKTt2YXIgTGU9ITA7c3dpdGNoKGNbYy5sZW5ndGgtMV1bMF0pe2Nhc2Uib2ZmaWNlZG9jdW1l''@;'; put 'put ''bnRzZXR0aW5ncyI6c3dpdGNoKGZbM10pe2Nhc2UiYWxsb3dwbmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBvbmVudHMiOmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2UiY29sb3JzIjpjYXNlImNvbG9yIjpjYXNlImluZGV4IjpjYXNl''@;'; put 'put ''InJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJlYWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpzd2l0Y2goZlszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNo''@;'; put 'put ''ZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2goZlszXSl7Y2FzZSJkYXRlMTkwNCI6''@;'; put 'put ''Ty5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Uid2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Uid2luZG93dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0c3RydWN0dXJlIjpjYXNlInByb3RlY3R3aW5kb3ciOmNhc2UicHJv''@;'; put 'put ''dGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNhc2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJvb2siOmNhc2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNhc2Uic2hlZXRpbmRleGZpcnN0IjpjYXNlInNoZWV0aW5kZXhsYXN0''@;'; put 'put ''IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZvcm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNlIm1heGl0ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBhdGgiOmNhc2UieGN0IjpjYXNlImNvdW50IjpjYXNlInNlbGVjdGVk''@;'; put 'put ''c2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVuY2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUiOmNhc2UiZm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xsYXN0IjpjYXNlIndhbnRhZHZpc2UiOmNhc2UiYm9vbGVhbiI6Y2Fz''@;'; put 'put ''ZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2FzZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3VsYXRlYmVmb3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9kZXIxYzEiOmNhc2UiZW1iZWRzYXZlc21hcnR0YWdzIjpicmVhaztk''@;'; put 'put ''ZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tvcHRpb25zIjpzd2l0Y2goZlszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaChmWzNdKXtjYXNlInZp''@;'; put 'put ''c2libGUiOmlmKCIvPiIhPT1mWzBdLnNsaWNlKC0yKSlpZigiLyI9PT1mWzFdKXN3aXRjaChhLnNsaWNlKGIsZi5pbmRleCkpe2Nhc2UiU2hlZXRIaWRkZW4iOkQuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOkQuSGlkZGVuPTJ9ZWxzZSBiPWYuaW5kZXgrZlswXS5sZW5n''@;'; put 'put ''dGg7YnJlYWs7Y2FzZSJoZWFkZXIiOnhbIiFtYXJnaW5zIl18fFl0KHhbIiFtYXJnaW5zIl09e30sInhsbWwiKSxpc05hTigrbWUoZlswXSkuTWFyZ2luKXx8KHhbIiFtYXJnaW5zIl0uaGVhZGVyPSttZShmWzBdKS5NYXJnaW4pO2JyZWFrO2Nhc2UiZm9vdGVyIjp4WyIhbWFyZ2lucyJdfHxZ''@;'; put 'put ''dCh4WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksaXNOYU4oK21lKGZbMF0pLk1hcmdpbil8fCh4WyIhbWFyZ2lucyJdLmZvb3Rlcj0rbWUoZlswXSkuTWFyZ2luKTticmVhaztjYXNlInBhZ2VtYXJnaW5zIjp2YXIgQ2U9bWUoZlswXSk7eFsiIW1hcmdpbnMiXXx8WXQoeFsiIW1hcmdpbnMiXT17''@;'; put 'put ''fSwieGxtbCIpLGlzTmFOKCtDZS5Ub3ApfHwoeFsiIW1hcmdpbnMiXS50b3A9K0NlLlRvcCksaXNOYU4oK0NlLkxlZnQpfHwoeFsiIW1hcmdpbnMiXS5sZWZ0PStDZS5MZWZ0KSxpc05hTigrQ2UuUmlnaHQpfHwoeFsiIW1hcmdpbnMiXS5yaWdodD0rQ2UuUmlnaHQpLGlzTmFOKCtDZS5Cb3R0''@;'; put 'put ''b20pfHwoeFsiIW1hcmdpbnMiXS5ib3R0b209K0NlLkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOk8uVmlld3N8fChPLlZpZXdzPVtdKSxPLlZpZXdzWzBdfHwoTy5WaWV3c1swXT17fSksTy5WaWV3c1swXS5SVEw9ITA7YnJlYWs7Y2FzZSJmcmVlemVwYW5lcyI6Y2Fz''@;'; put 'put ''ZSJmcm96ZW5ub3NwbGl0IjpjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjpjYXNlImRvbm90ZGlzcGxheWdyaWRsaW5lcyI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFu''@;'; put 'put ''ZSI6Y2FzZSJ1bnN5bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNl''@;'; put 'put ''ImVuYWJsZXNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93''@;'; put 'put ''dmlzaWJsZSI6Y2FzZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2Fz''@;'; put 'put ''ZSJmaXRoZWlnaHQiOmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxs''@;'; put 'put ''b3dpbnNlcnRjb2xzIjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXlo''@;'; put 'put ''ZWFkaW5ncyI6Y2FzZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlv''@;'; put 'put ''biI6Y2FzZSJhbGxvd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlIm5vc3VtbWFyeXJvd3NiZWxvd2RldGFpbCI6eFsiIW91dGxpbmUiXXx8KHhbIiFvdXRs''@;'; put 'put ''aW5lIl09e30pLHhbIiFvdXRsaW5lIl0uYWJvdmU9ITA7YnJlYWs7Y2FzZSJub3N1bW1hcnljb2x1bW5zcmlnaHRkZXRhaWwiOnhbIiFvdXRsaW5lIl18fCh4WyIhb3V0bGluZSJdPXt9KSx4WyIhb3V0bGluZSJdLmxlZnQ9ITA7YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlInBpdm90''@;'; put 'put ''dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6c3dpdGNoKGZbM10pe2Nhc2UiaW1tZWRpYXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0aXBsZWl0ZW1sYWJlbCI6Y2FzZSJjb21wYWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNhc2Uib3JpZW50YXRp''@;'; put 'put ''b24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxvY2F0aW9uIjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9zaXRpb24iOmNhc2UicGl2b3RpdGVtIjpjYXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpjYXNlInBhcmVudGZp''@;'; put 'put ''ZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNhc2UiY291bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0ZW10eXBlIjpjYXNlInB0c291cmNlIjpjYXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2FzZSJmaWxlbmFtZSI6''@;'; put 'put ''Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJub3Jvd2dyYW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNhc2UiaGlkZGVuIjpjYXNlInN1YnRvdGFsIjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0aW9uIjpjYXNlInJl''@;'; put 'put ''ZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNlIm1lcmdlbGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNlInJlZnJlc2huYW1lIjpjYXNlInJlZnJlc2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmNhc2Ui''@;'; put 'put ''dmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVtaW4iOmNhc2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNhbGN1bGF0aW9uIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKGZbM10pe2Nhc2UiY29sYnJlYWtzIjpj''@;'; put 'put ''YXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKGZbM10pe2Nhc2UiYXV0b2ZpbHRlcmNvbHVtbiI6''@;'; put 'put ''Y2FzZSJhdXRvZmlsdGVyY29uZGl0aW9uIjpjYXNlImF1dG9maWx0ZXJhbmQiOmNhc2UiYXV0b2ZpbHRlcm9yIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UicXVlcnl0YWJsZSI6c3dpdGNoKGZbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQiOmNhc2UiYXV0b2Zvcm1h''@;'; put 'put ''dHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0eXBlIjpjYXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZyZXNoZWRpbnhsOSI6Y2FzZSJ1cmxzdHJpbmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1hbmR0ZXh0IjpjYXNlInJl''@;'; put 'put ''ZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6Y2FzZSJjb2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpjYXNlImRvbm90cHJvbXB0Zm9yZmlsZSI6Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJlciI6Y2FzZSJkZWNpbWFs''@;'; put 'put ''IjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5nbWludXNudW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNlImZpZWxkdHlwZSI6Y2FzZSJkZWxpbWl0ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6Y2FzZSJ2ZXJzaW9ubGFz''@;'; put 'put ''dGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOnN3aXRjaChmWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNh''@;'; put 'put ''c2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhpZGUiOmNh''@;'; put 'put ''c2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2Uic29ydGluZyI6Y2FzZSJjb25kaXRpb25hbGZvcm1h''@;'; put 'put ''dHRpbmciOnN3aXRjaChmWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVz''@;'; put 'put ''c2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZh''@;'; put 'put ''bHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UibWFwaW5mbyI6Y2FzZSJzY2hlbWEiOmNhc2UiZGF0YSI6c3dpdGNoKGZbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxk''@;'; put 'put ''IjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJp''@;'; put 'put ''YnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1pZihMZXx8ZlszXS5tYXRjaCgvIVxbQ0RBVEEvKSlicmVhaztpZighY1tjLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6''@;'; put 'put ''ZWQgdGFnOiAiK2ZbM10rInwiK2Muam9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiPT09Y1tjLmxlbmd0aC0xXVswXSl7aWYoIi8+Ij09PWZbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PWZbMV0/WHAoWCxqLGVlLGEuc2xpY2UoYixmLmluZGV4KSk6KGVlPWYsYj1mLmlu''@;'; put 'put ''ZGV4K2ZbMF0ubGVuZ3RoKTticmVha31pZihyLldURil0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK2ZbM10rInwiK2Muam9pbigifCIpfXZhciBvZT17fTtyZXR1cm4hci5ib29rU2hlZXRzJiYhci5ib29rUHJvcHMmJihvZS5TaGVldHM9bCksb2UuU2hlZXROYW1lcz1oLG9lLldvcmtib29r''@;'; put 'put ''PU8sb2UuU1NGPU1lKHBlKSxvZS5Qcm9wcz1WLG9lLkN1c3Rwcm9wcz1YLG9lfWZ1bmN0aW9uIFVuKGUsdCl7c3dpdGNoKCRuKHQ9dHx8e30pLHQudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gTW4oT3IoZSksdCk7Y2FzZSJiaW5hcnkiOmNhc2UiYnVmZmVyIjpjYXNlImZp''@;'; put 'put ''bGUiOnJldHVybiBNbihlLHQpO2Nhc2UiYXJyYXkiOnJldHVybiBNbih3dChlKSx0KX19dmFyIGZtPVs2MCwxMDg0LDIwNjYsMjE2NSwyMTc1XTtmdW5jdGlvbiBjbShlLHQscixhLG4pe3ZhciBpPWEscz1bXSxmPXIuc2xpY2Uoci5sLHIubCtpKTtpZihuJiZuLmVuYyYmbi5lbmMuaW5zaXR1''@;'; put 'put ''JiZmLmxlbmd0aD4wKXN3aXRjaChlKXtjYXNlIDk6Y2FzZSA1MjE6Y2FzZSAxMDMzOmNhc2UgMjA1NzpjYXNlIDQ3OmNhc2UgNDA1OmNhc2UgMjI1OmNhc2UgNDA2OmNhc2UgMzEyOmNhc2UgNDA0OmNhc2UgMTA6Y2FzZSAxMzM6YnJlYWs7ZGVmYXVsdDpuLmVuYy5pbnNpdHUoZil9cy5wdXNo''@;'; put 'put ''KGYpLHIubCs9aTtmb3IodmFyIGM9dXQocixyLmwpLG89V25bY10sbD0wO251bGwhPW8mJmZtLmluZGV4T2YoYyk+LTE7KWk9dXQocixyLmwrMiksbD1yLmwrNCwyMDY2PT1jP2wrPTQ6KDIxNjU9PWN8fDIxNzU9PWMpJiYobCs9MTIpLGY9ci5zbGljZShsLHIubCs0K2kpLHMucHVzaChmKSxy''@;'; put 'put ''LmwrPTQraSxvPVduW2M9dXQocixyLmwpXTt2YXIgaD1mcihzKTtocihoLDApO3ZhciB4PTA7aC5sZW5zPVtdO2Zvcih2YXIgZD0wO2Q8cy5sZW5ndGg7KytkKWgubGVucy5wdXNoKHgpLHgrPXNbZF0ubGVuZ3RoO2lmKGgubGVuZ3RoPGEpdGhyb3ciWExTIFJlY29yZCAweCIrZS50b1N0cmlu''@;'; put 'put ''ZygxNikrIiBUcnVuY2F0ZWQ6ICIraC5sZW5ndGgrIiA8ICIrYTtyZXR1cm4gdC5mKGgsaC5sZW5ndGgsbil9ZnVuY3Rpb24gaXQoZSx0LHIpe2lmKCJ6IiE9PWUudCYmZS5YRil7dmFyIGE9MDt0cnl7YT1lLnp8fGUuWEYubnVtRm10SWR8fDAsdC5jZWxsTkYmJihlLno9cGVbYV0pfWNhdGNo''@;'; put 'put ''KGkpe2lmKHQuV1RGKXRocm93IGl9aWYoIXR8fCExIT09dC5jZWxsVGV4dCl0cnl7ZS53PSJlIj09PWUudD9lLnd8fHh0W2Uudl06MD09PWF8fCJHZW5lcmFsIj09YT8ibiI9PT1lLnQ/KDB8ZS52KT09PWUudj9lLnYudG9TdHJpbmcoMTApOmthKGUudik6TnQoZS52KTpScihhLGUudix7ZGF0''@;'; put 'put ''ZTE5MDQ6ISFyLGRhdGVORjp0JiZ0LmRhdGVORn0pfWNhdGNoKGkpe2lmKHQuV1RGKXRocm93IGl9aWYodC5jZWxsRGF0ZXMmJmEmJiJuIj09ZS50JiZidChwZVthXXx8U3RyaW5nKGEpKSl7dmFyIG49a3QoZS52KTtuJiYoZS50PSJkIixlLnY9bmV3IERhdGUobi55LG4ubS0xLG4uZCxuLkgs''@;'; put 'put ''bi5NLG4uUyxuLnUpKX19fWZ1bmN0aW9uIE8wKGUsdCxyKXtyZXR1cm57djplLGl4ZmU6dCx0OnJ9fXZhciB6YT17U0k6ImUwODU5ZmYyZjk0ZjY4MTBhYjkxMDgwMDJiMjdiM2Q5IixEU0k6IjAyZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIixVREk6IjA1ZDVjZGQ1OWMyZTFiMTA5''@;'; put 'put ''Mzk3MDgwMDJiMmNmOWFlIn07ZnVuY3Rpb24gS2YoZSx0KXt2YXIgcixhLG4saTtpZih0fHwodD17fSksJG4odCkscjAoKSx0LmNvZGVwYWdlJiZlMCh0LmNvZGVwYWdlKSxlLkZ1bGxQYXRocyl7aWYodmUuZmluZChlLCIvZW5jcnlwdGlvbiIpKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBw''@;'; put 'put ''YXNzd29yZC1wcm90ZWN0ZWQiKTtyPXZlLmZpbmQoZSwiIUNvbXBPYmoiKSxhPXZlLmZpbmQoZSwiL1dvcmtib29rIil8fHZlLmZpbmQoZSwiL0Jvb2siKX1lbHNle3N3aXRjaCh0LnR5cGUpe2Nhc2UiYmFzZTY0IjplPUlyKE9yKGUpKTticmVhaztjYXNlImJpbmFyeSI6ZT1JcihlKTticmVh''@;'; put 'put ''aztjYXNlImJ1ZmZlciI6YnJlYWs7Y2FzZSJhcnJheSI6QXJyYXkuaXNBcnJheShlKXx8KGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpfWhyKGUsMCksYT17Y29udGVudDplfX1pZihyJiZmdW5jdGlvbiBzbShlKXt2YXIgdD17fSxyPWUuY29udGVudDtpZihyLmw9MjgsdC5BbnNp''@;'; put 'put ''VXNlclR5cGU9ci5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSx0LkFuc2lDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIGxzKGUsMSl9KHIpLHIubGVuZ3RoLXIubDw9NClyZXR1cm4gdDt2YXIgYT1yLnJlYWRfc2hpZnQoNCk7aWYoMD09YXx8YT40MHx8KHIubC09NCx0''@;'; put 'put ''LlJlc2VydmVkMT1yLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLHIubGVuZ3RoLXIubDw9NCl8fDE5MDc1MDU2NTIhPT0oYT1yLnJlYWRfc2hpZnQoNCkpfHwodC5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIFpvKGUpe3JldHVybiBscyhlLDIpfShyKSwwPT0oYT1yLnJlYWRf''@;'; put 'put ''c2hpZnQoNCkpfHxhPjQwKSlyZXR1cm4gdDtyLmwtPTQsdC5SZXNlcnZlZDI9ci5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpfShyKSx0LmJvb2tQcm9wcyYmIXQuYm9va1NoZWV0cyluPXt9O2Vsc2V7dmFyIHM9U2U/ImJ1ZmZlciI6ImFycmF5IjtpZihhJiZhLmNvbnRlbnQpbj1mdW5jdGlvbiBv''@;'; put 'put ''bShlLHQpe3ZhciByPXtvcHRzOnt9fSxhPXt9O251bGwhPXplJiZudWxsPT10LmRlbnNlJiYodC5kZW5zZT16ZSk7dmFyIGgsZCx1LHAsZyxOLG49dC5kZW5zZT9bXTp7fSxpPXt9LHM9e30sZj1udWxsLGM9W10sbz0iIixsPXt9LHg9IiIsaz17fSxUPVtdLE09W10sST1bXSx5PXtTaGVldHM6''@;'; put 'put ''W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9LFZpZXdzOlt7fV19LFA9e30sUj1mdW5jdGlvbih5ZSl7cmV0dXJuIHllPDg/VnRbeWVdOnllPDY0JiZJW3llLThdfHxWdFt5ZV19LFg9ZnVuY3Rpb24oeWUsWmUsS3Ipe2lmKCEoSz4xfHxLci5zaGVldFJvd3MmJnllLnI+PUtyLnNoZWV0Um93cykp''@;'; put 'put ''e2lmKEtyLmNlbGxTdHlsZXMmJlplLlhGJiZaZS5YRi5kYXRhJiZmdW5jdGlvbih5ZSxaZSxLcil7dmFyIHF0LHNyPVplLlhGLmRhdGE7c3ImJnNyLnBhdHRlcm5UeXBlJiZLciYmS3IuY2VsbFN0eWxlcyYmKFplLnM9e30sWmUucy5wYXR0ZXJuVHlwZT1zci5wYXR0ZXJuVHlwZSwocXQ9YmEo''@;'; put 'put ''Uihzci5pY3ZGb3JlKSkpJiYoWmUucy5mZ0NvbG9yPXtyZ2I6cXR9KSwocXQ9YmEoUihzci5pY3ZCYWNrKSkpJiYoWmUucy5iZ0NvbG9yPXtyZ2I6cXR9KSl9KDAsWmUsS3IpLGRlbGV0ZSBaZS5peGZlLGRlbGV0ZSBaZS5YRixoPXllLHg9Z2UoeWUpLCghc3x8IXMuc3x8IXMuZSkmJihzPXtz''@;'; put 'put ''OntyOjAsYzowfSxlOntyOjAsYzowfX0pLHllLnI8cy5zLnImJihzLnMucj15ZS5yKSx5ZS5jPHMucy5jJiYocy5zLmM9eWUuYykseWUucisxPnMuZS5yJiYocy5lLnI9eWUucisxKSx5ZS5jKzE+cy5lLmMmJihzLmUuYz15ZS5jKzEpLEtyLmNlbGxGb3JtdWxhJiZaZS5mKWZvcih2YXIgc3I9''@;'; put 'put ''MDtzcjxULmxlbmd0aDsrK3NyKWlmKCEoVFtzcl1bMF0ucy5jPnllLmN8fFRbc3JdWzBdLnMucj55ZS5yfHxUW3NyXVswXS5lLmM8eWUuY3x8VFtzcl1bMF0uZS5yPHllLnIpKXtaZS5GPXdlKFRbc3JdWzBdKSwoVFtzcl1bMF0ucy5jIT15ZS5jfHxUW3NyXVswXS5zLnIhPXllLnIpJiZkZWxl''@;'; put 'put ''dGUgWmUuZixaZS5mJiYoWmUuZj0iIitrcihUW3NyXVsxXSwwLHllLGNlLGIpKTticmVha31Lci5kZW5zZT8oblt5ZS5yXXx8KG5beWUucl09W10pLG5beWUucl1beWUuY109WmUpOm5beF09WmV9fSxiPXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjprLGFycmF5ZjpULHJydGFi''@;'; put 'put ''aWQ6W10sbGFzdHVzZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0eWxlczohIXQmJiEhdC5jZWxsU3R5bGVzLFdURjohIXQmJiEhdC53dGZ9O3QucGFzc3dvcmQmJihiLnBhc3N3b3JkPXQucGFzc3dvcmQpO3ZhciBlZSxsZT1bXSxyZT1bXSxkZT1bXSx1ZT1bXSxG''@;'; put 'put ''ZT0hMSxjZT1bXTtjZS5TaGVldE5hbWVzPWIuc25hbWVzLGNlLnNoYXJlZGY9Yi5zaGFyZWRmLGNlLmFycmF5Zj1iLmFycmF5ZixjZS5uYW1lcz1bXSxjZS5YVEk9W107dmFyIEQseGU9MCxLPTAsQz0wLFU9W10sTz1bXTtiLmNvZGVwYWdlPTEyMDAsTXIoMTIwMCk7Zm9yKHZhciBqPSExO2Uu''@;'; put 'put ''bDxlLmxlbmd0aC0xOyl7dmFyIHNlPWUubCxaPWUucmVhZF9zaGlmdCgyKTtpZigwPT09WiYmMTA9PT14ZSlicmVhazt2YXIgUT1lLmw9PT1lLmxlbmd0aD8wOmUucmVhZF9zaGlmdCgyKSxZPVduW1pdO2lmKFkmJlkuZil7aWYodC5ib29rU2hlZXRzJiYxMzM9PT14ZSYmMTMzIT09WilicmVh''@;'; put 'put ''aztpZih4ZT1aLDI9PT1ZLnJ8fDEyPT1ZLnIpe3ZhciBFZT1lLnJlYWRfc2hpZnQoMik7aWYoUS09MiwhYi5lbmMmJkVlIT09WiYmKCgyNTUmRWUpPDw4fEVlPj44KSE9PVopdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRjaDogIitFZSsiIT0iK1opOzEyPT1ZLnImJihlLmwrPTEwLFEtPTEw''@;'; put 'put ''KX12YXIgQT17fTtpZihBPTEwPT09Wj9ZLmYoZSxRLGIpOmNtKFosWSxlLFEsYiksMD09SyYmLTE9PT1bOSw1MjEsMTAzMywyMDU3XS5pbmRleE9mKHhlKSljb250aW51ZTtzd2l0Y2goWil7Y2FzZSAzNDpyLm9wdHMuRGF0ZTE5MDQ9eS5XQlByb3BzLmRhdGUxOTA0PUE7YnJlYWs7Y2FzZSAx''@;'; put 'put ''MzQ6ci5vcHRzLldyaXRlUHJvdGVjdD0hMDticmVhaztjYXNlIDQ3OmlmKGIuZW5jfHwoZS5sPTApLGIuZW5jPUEsIXQucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PUEudmFsaWQpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0''@;'; put 'put ''aW9uIHNjaGVtZSB1bnN1cHBvcnRlZCIpO2lmKCFBLnZhbGlkKXRocm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMgaW5jb3JyZWN0Iik7YnJlYWs7Y2FzZSA5MjpiLmxhc3R1c2VyPUE7YnJlYWs7Y2FzZSA2Njp2YXIgUGU9TnVtYmVyKEEpO3N3aXRjaChQZSl7Y2FzZSAyMTAxMDpQZT0xMjAw''@;'; put 'put ''O2JyZWFrO2Nhc2UgMzI3Njg6UGU9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6UGU9MTI1Mn1NcihiLmNvZGVwYWdlPVBlKSxqPSEwO2JyZWFrO2Nhc2UgMzE3OmIucnJ0YWJpZD1BO2JyZWFrO2Nhc2UgMjU6Yi53aW5sb2NrZWQ9QTticmVhaztjYXNlIDQzOTpyLm9wdHMuUmVmcmVzaEFsbD1BO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMTI6ci5vcHRzLkNhbGNDb3VudD1BO2JyZWFrO2Nhc2UgMTY6ci5vcHRzLkNhbGNEZWx0YT1BO2JyZWFrO2Nhc2UgMTc6ci5vcHRzLkNhbGNJdGVyPUE7YnJlYWs7Y2FzZSAxMzpyLm9wdHMuQ2FsY01vZGU9QTticmVhaztjYXNlIDE0OnIub3B0cy5DYWxjUHJlY2lzaW9uPUE7''@;'; put 'put ''YnJlYWs7Y2FzZSA5NTpyLm9wdHMuQ2FsY1NhdmVSZWNhbGM9QTticmVhaztjYXNlIDE1OmIuQ2FsY1JlZk1vZGU9QTticmVhaztjYXNlIDIyMTE6ci5vcHRzLkZ1bGxDYWxjPUE7YnJlYWs7Y2FzZSAxMjk6QS5mRGlhbG9nJiYoblsiIXR5cGUiXT0iZGlhbG9nIiksQS5mQmVsb3d8fCgoblsi''@;'; put 'put ''IW91dGxpbmUiXXx8KG5bIiFvdXRsaW5lIl09e30pKS5hYm92ZT0hMCksQS5mUmlnaHR8fCgoblsiIW91dGxpbmUiXXx8KG5bIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIDIyNDpNLnB1c2goQSk7YnJlYWs7Y2FzZSA0MzA6Y2UucHVzaChbQV0pLGNlW2NlLmxlbmd0aC0x''@;'; put 'put ''XS5YVEk9W107YnJlYWs7Y2FzZSAzNTpjYXNlIDU0NzpjZVtjZS5sZW5ndGgtMV0ucHVzaChBKTticmVhaztjYXNlIDI0OmNhc2UgNTM2OkQ9e05hbWU6QS5OYW1lLFJlZjprcihBLnJnY2UsMCxudWxsLGNlLGIpfSxBLml0YWI+MCYmKEQuU2hlZXQ9QS5pdGFiLTEpLGNlLm5hbWVzLnB1c2go''@;'; put 'put ''RCksY2VbMF18fChjZVswXT1bXSxjZVswXS5YVEk9W10pLGNlW2NlLmxlbmd0aC0xXS5wdXNoKEEpLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1BLk5hbWUmJkEuaXRhYj4wJiZBLnJnY2UmJkEucmdjZVswXSYmQS5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09QS5yZ2NlWzBdWzBdWzBdJiYo''@;'; put 'put ''T1tBLml0YWItMV09e3JlZjp3ZShBLnJnY2VbMF1bMF1bMV1bMl0pfSk7YnJlYWs7Y2FzZSAyMjpiLkV4dGVybkNvdW50PUE7YnJlYWs7Y2FzZSAyMzowPT1jZS5sZW5ndGgmJihjZVswXT1bXSxjZVswXS5YVEk9W10pLGNlW2NlLmxlbmd0aC0xXS5YVEk9Y2VbY2UubGVuZ3RoLTFdLlhUSS5j''@;'; put 'put ''b25jYXQoQSksY2UuWFRJPWNlLlhUSS5jb25jYXQoQSk7YnJlYWs7Y2FzZSAyMTk2OmlmKGIuYmlmZjw4KWJyZWFrO251bGwhPUQmJihELkNvbW1lbnQ9QVsxXSk7YnJlYWs7Y2FzZSAxODpuWyIhcHJvdGVjdCJdPUE7YnJlYWs7Y2FzZSAxOTowIT09QSYmYi5XVEYmJmNvbnNvbGUuZXJyb3Io''@;'; put 'put ''IlBhc3N3b3JkIHZlcmlmaWVyOiAiK0EpO2JyZWFrO2Nhc2UgMTMzOmlbQS5wb3NdPUEsYi5zbmFtZXMucHVzaChBLm5hbWUpO2JyZWFrO2Nhc2UgMTA6aWYoLS1LKWJyZWFrO2lmKHMuZSl7aWYocy5lLnI+MCYmcy5lLmM+MCl7aWYocy5lLnItLSxzLmUuYy0tLG5bIiFyZWYiXT13ZShzKSx0''@;'; put 'put ''LnNoZWV0Um93cyYmdC5zaGVldFJvd3M8PXMuZS5yKXt2YXIgQWU9cy5lLnI7cy5lLnI9dC5zaGVldFJvd3MtMSxuWyIhZnVsbHJlZiJdPW5bIiFyZWYiXSxuWyIhcmVmIl09d2Uocykscy5lLnI9QWV9cy5lLnIrKyxzLmUuYysrfWxlLmxlbmd0aD4wJiYoblsiIW1lcmdlcyJdPWxlKSxyZS5s''@;'; put 'put ''ZW5ndGg+MCYmKG5bIiFvYmplY3RzIl09cmUpLGRlLmxlbmd0aD4wJiYoblsiIWNvbHMiXT1kZSksdWUubGVuZ3RoPjAmJihuWyIhcm93cyJdPXVlKSx5LlNoZWV0cy5wdXNoKFApfSIiPT09bz9sPW46YVtvXT1uLG49dC5kZW5zZT9bXTp7fTticmVhaztjYXNlIDk6Y2FzZSA1MjE6Y2FzZSAx''@;'; put 'put ''MDMzOmNhc2UgMjA1NzppZig4PT09Yi5iaWZmJiYoYi5iaWZmPXs5OjIsNTIxOjMsMTAzMzo0fVtaXXx8ezUxMjoyLDc2ODozLDEwMjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W0EuQklGRlZlcl18fDgpLGIuYmlmZmd1ZXNzPTA9PUEuQklGRlZlciwwPT1BLkJJRkZWZXImJjQwOTY9PUEu''@;'; put 'put ''ZHQmJihiLmJpZmY9NSxqPSEwLE1yKGIuY29kZXBhZ2U9Mjg1OTEpKSw4PT1iLmJpZmYmJjA9PUEuQklGRlZlciYmMTY9PUEuZHQmJihiLmJpZmY9MiksSysrKWJyZWFrO2lmKG49dC5kZW5zZT9bXTp7fSxiLmJpZmY8OCYmIWomJihqPSEwLE1yKGIuY29kZXBhZ2U9dC5jb2RlcGFnZXx8MTI1''@;'; put 'put ''MikpLGIuYmlmZjw1fHwwPT1BLkJJRkZWZXImJjQwOTY9PUEuZHQpeyIiPT09byYmKG89IlNoZWV0MSIpLHM9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTt2YXIgTGU9e3BvczplLmwtUSxuYW1lOm99O2lbTGUucG9zXT1MZSxiLnNuYW1lcy5wdXNoKG8pfWVsc2Ugbz0oaVtzZV18fHtuYW1l''@;'; put 'put ''OiIifSkubmFtZTszMj09QS5kdCYmKG5bIiF0eXBlIl09ImNoYXJ0IiksNjQ9PUEuZHQmJihuWyIhdHlwZSJdPSJtYWNybyIpLGxlPVtdLHJlPVtdLGIuYXJyYXlmPVQ9W10sZGU9W10sdWU9W10sRmU9ITEsUD17SGlkZGVuOihpW3NlXXx8e2hzOjB9KS5ocyxuYW1lOm99O2JyZWFrO2Nhc2Ug''@;'; put 'put ''NTE1OmNhc2UgMzpjYXNlIDI6ImNoYXJ0Ij09blsiIXR5cGUiXSYmKHQuZGVuc2U/KG5bQS5yXXx8W10pW0EuY106bltnZSh7YzpBLmMscjpBLnJ9KV0pJiYrK0EuYyxnPXtpeGZlOkEuaXhmZSxYRjpNW0EuaXhmZV18fHt9LHY6QS52YWwsdDoibiJ9LEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2''@;'; put 'put ''M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6QS5yfSxnLHQpO2JyZWFrO2Nhc2UgNTpjYXNlIDUxNzpnPXtpeGZlOkEuaXhmZSxYRjpNW0EuaXhmZV0sdjpBLnZhbCx0OkEudH0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCks''@;'; put 'put ''WCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSA2Mzg6Zz17aXhmZTpBLml4ZmUsWEY6TVtBLml4ZmVdLHY6QS5ya251bSx0OiJuIn0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSAx''@;'; put 'put ''ODk6Zm9yKHZhciBDZT1BLmM7Q2U8PUEuQzsrK0NlKXt2YXIgb2U9QS5ya3JlY1tDZS1BLmNdWzBdO2c9e2l4ZmU6b2UsWEY6TVtvZV0sdjpBLnJrcmVjW0NlLUEuY11bMV0sdDoibiJ9LEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6Q2Us''@;'; put 'put ''cjpBLnJ9LGcsdCl9YnJlYWs7Y2FzZSA2OmNhc2UgNTE4OmNhc2UgMTAzMDppZigiU3RyaW5nIj09QS52YWwpe2Y9QTticmVha31pZigoZz1PMChBLnZhbCxBLmNlbGwuaXhmZSxBLnR0KSkuWEY9TVtnLml4ZmVdLHQuY2VsbEZvcm11bGEpe3ZhciBxZT1BLmZvcm11bGE7aWYocWUmJnFlWzBd''@;'; put 'put ''JiZxZVswXVswXSYmIlB0Z0V4cCI9PXFlWzBdWzBdWzBdKXt2YXIganI9cWVbMF1bMF1bMV1bMF0sZnQ9cWVbMF1bMF1bMV1bMV0sdnQ9Z2Uoe3I6anIsYzpmdH0pO2tbdnRdP2cuZj0iIitrcihBLmZvcm11bGEsMCxBLmNlbGwsY2UsYik6Zy5GPSgodC5kZW5zZT8obltqcl18fFtdKVtmdF06''@;'; put 'put ''blt2dF0pfHx7fSkuRn1lbHNlIGcuZj0iIitrcihBLmZvcm11bGEsMCxBLmNlbGwsY2UsYil9Qz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWChBLmNlbGwsZyx0KSxmPUE7YnJlYWs7Y2FzZSA3OmNhc2UgNTE5OmlmKCFmKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiU3RyaW5nIHJlY29yZCBleHBlY3RzIEZvcm11bGEiKTtmLnZhbD1BLChnPU8wKEEsZi5jZWxsLml4ZmUsInMiKSkuWEY9TVtnLml4ZmVdLHQuY2VsbEZvcm11bGEmJihnLmY9IiIra3IoZi5mb3JtdWxhLDAsZi5jZWxsLGNlLGIpKSxDPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChn''@;'; put 'put ''LHQsci5vcHRzLkRhdGUxOTA0KSxYKGYuY2VsbCxnLHQpLGY9bnVsbDticmVhaztjYXNlIDMzOmNhc2UgNTQ1OlQucHVzaChBKTt2YXIgSmE9Z2UoQVswXS5zKTtpZihkPXQuZGVuc2U/KG5bQVswXS5zLnJdfHxbXSlbQVswXS5zLmNdOm5bSmFdLHQuY2VsbEZvcm11bGEmJmQpe2lmKCFmfHwh''@;'; put 'put ''SmF8fCFkKWJyZWFrO2QuZj0iIitrcihBWzFdLDAsQVswXSxjZSxiKSxkLkY9d2UoQVswXSl9YnJlYWs7Y2FzZSAxMjEyOmlmKCF0LmNlbGxGb3JtdWxhKWJyZWFrO2lmKHgpe2lmKCFmKWJyZWFrO2tbZ2UoZi5jZWxsKV09QVswXSwoKGQ9dC5kZW5zZT8obltmLmNlbGwucl18fFtdKVtmLmNl''@;'; put 'put ''bGwuY106bltnZShmLmNlbGwpXSl8fHt9KS5mPSIiK2tyKEFbMF0sMCxoLGNlLGIpfWJyZWFrO2Nhc2UgMjUzOmc9TzAoY1tBLmlzc3RdLnQsQS5peGZlLCJzIiksY1tBLmlzc3RdLmgmJihnLmg9Y1tBLmlzc3RdLmgpLGcuWEY9TVtnLml4ZmVdLEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10p''@;'; put 'put ''LGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6QS5yfSxnLHQpO2JyZWFrO2Nhc2UgNTEzOnQuc2hlZXRTdHVicyYmKGc9e2l4ZmU6QS5peGZlLFhGOk1bQS5peGZlXSx0OiJ6In0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7''@;'; put 'put ''YzpBLmMscjpBLnJ9LGcsdCkpO2JyZWFrO2Nhc2UgMTkwOmlmKHQuc2hlZXRTdHVicylmb3IodmFyIE90PUEuYztPdDw9QS5DOysrT3Qpe3ZhciBMcj1BLml4ZmVbT3QtQS5jXTtnPXtpeGZlOkxyLFhGOk1bTHJdLHQ6InoifSxDPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChnLHQsci5v''@;'; put 'put ''cHRzLkRhdGUxOTA0KSxYKHtjOk90LHI6QS5yfSxnLHQpfWJyZWFrO2Nhc2UgMjE0OmNhc2UgNTE2OmNhc2UgNDooZz1PMChBLnZhbCxBLml4ZmUsInMiKSkuWEY9TVtnLml4ZmVdLEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6''@;'; put 'put ''QS5yfSxnLHQpO2JyZWFrO2Nhc2UgMDpjYXNlIDUxMjoxPT09SyYmKHM9QSk7YnJlYWs7Y2FzZSAyNTI6Yz1BO2JyZWFrO2Nhc2UgMTA1NDppZig0PT1iLmJpZmYpe1VbQysrXT1BWzFdO2Zvcih2YXIgcHQ9MDtwdDxDKzE2MyYmcGVbcHRdIT1BWzFdOysrcHQpO3B0Pj0xNjMmJmV0KEFbMV0s''@;'; put 'put ''QysxNjMpfWVsc2UgZXQoQVsxXSxBWzBdKTticmVhaztjYXNlIDMwOlVbQysrXT1BO2Zvcih2YXIgSXQ9MDtJdDxDKzE2MyYmcGVbSXRdIT1BOysrSXQpO0l0Pj0xNjMmJmV0KEEsQysxNjMpO2JyZWFrO2Nhc2UgMjI5OmxlPWxlLmNvbmNhdChBKTticmVhaztjYXNlIDkzOnJlW0EuY21vWzBd''@;'; put 'put ''XT1iLmxhc3RvYmo9QTticmVhaztjYXNlIDQzODpiLmxhc3RvYmouVHhPPUE7YnJlYWs7Y2FzZSAxMjc6Yi5sYXN0b2JqLkltRGF0YT1BO2JyZWFrO2Nhc2UgNDQwOmZvcihwPUFbMF0ucy5yO3A8PUFbMF0uZS5yOysrcClmb3IodT1BWzBdLnMuYzt1PD1BWzBdLmUuYzsrK3UpKGQ9dC5kZW5z''@;'; put 'put ''ZT8obltwXXx8W10pW3VdOm5bZ2Uoe2M6dSxyOnB9KV0pJiYoZC5sPUFbMV0pO2JyZWFrO2Nhc2UgMjA0ODpmb3IocD1BWzBdLnMucjtwPD1BWzBdLmUucjsrK3ApZm9yKHU9QVswXS5zLmM7dTw9QVswXS5lLmM7Kyt1KShkPXQuZGVuc2U/KG5bcF18fFtdKVt1XTpuW2dlKHtjOnUscjpwfSld''@;'; put 'put ''KSYmZC5sJiYoZC5sLlRvb2x0aXA9QVsxXSk7YnJlYWs7Y2FzZSAyODppZihiLmJpZmY8PTUmJmIuYmlmZj49MilicmVhaztkPXQuZGVuc2U/KG5bQVswXS5yXXx8W10pW0FbMF0uY106bltnZShBWzBdKV07dmFyIHFhPXJlW0FbMl1dO2R8fCh0LmRlbnNlPyhuW0FbMF0ucl18fChuW0FbMF0u''@;'; put 'put ''cl09W10pLGQ9bltBWzBdLnJdW0FbMF0uY109e3Q6InoifSk6ZD1uW2dlKEFbMF0pXT17dDoieiJ9LHMuZS5yPU1hdGgubWF4KHMuZS5yLEFbMF0ucikscy5zLnI9TWF0aC5taW4ocy5zLnIsQVswXS5yKSxzLmUuYz1NYXRoLm1heChzLmUuYyxBWzBdLmMpLHMucy5jPU1hdGgubWluKHMucy5j''@;'; put 'put ''LEFbMF0uYykpLGQuY3x8KGQuYz1bXSksZC5jLnB1c2goe2E6QVsxXSx0OnFhLlR4Ty50fSk7YnJlYWs7Y2FzZSAyMTczOnExKDAsQS5leHQpO2JyZWFrO2Nhc2UgMTI1OmlmKCFiLmNlbGxTdHlsZXMpYnJlYWs7Zm9yKDtBLmU+PUEuczspZGVbQS5lLS1dPXt3aWR0aDpBLncvMjU2LGxldmVs''@;'; put 'put ''OkEubGV2ZWx8fDAsaGlkZGVuOiEhKDEmQS5mbGFncyl9LEZlfHwoRmU9ITAsQW4oQS53LzI1NikpLEt0KGRlW0EuZSsxXSk7YnJlYWs7Y2FzZSA1MjA6dmFyIHlyPXt9O251bGwhPUEubGV2ZWwmJih1ZVtBLnJdPXlyLHlyLmxldmVsPUEubGV2ZWwpLEEuaGlkZGVuJiYodWVbQS5yXT15cix5''@;'; put 'put ''ci5oaWRkZW49ITApLEEuaHB0JiYodWVbQS5yXT15cix5ci5ocHQ9QS5ocHQseXIuaHB4PW9hKEEuaHB0KSk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpuWyIhbWFyZ2lucyJdfHxZdChuWyIhbWFyZ2lucyJdPXt9KSxuWyIhbWFyZ2lucyJdW3szODoibGVmdCIsMzk6''@;'; put 'put ''InJpZ2h0Iiw0MDoidG9wIiw0MToiYm90dG9tIn1bWl1dPUE7YnJlYWs7Y2FzZSAxNjE6blsiIW1hcmdpbnMiXXx8WXQoblsiIW1hcmdpbnMiXT17fSksblsiIW1hcmdpbnMiXS5oZWFkZXI9QS5oZWFkZXIsblsiIW1hcmdpbnMiXS5mb290ZXI9QS5mb290ZXI7YnJlYWs7Y2FzZSA1NzQ6QS5S''@;'; put 'put ''VEwmJih5LlZpZXdzWzBdLlJUTD0hMCk7YnJlYWs7Y2FzZSAxNDY6ST1BO2JyZWFrO2Nhc2UgMjE5ODplZT1BO2JyZWFrO2Nhc2UgMTQwOk49QTticmVhaztjYXNlIDQ0MjpvP1AuQ29kZU5hbWU9QXx8UC5uYW1lOnkuV0JQcm9wcy5Db2RlTmFtZT1BfHwiVGhpc1dvcmtib29rIn19ZWxzZSBZ''@;'; put 'put ''fHxjb25zb2xlLmVycm9yKCJNaXNzaW5nIEluZm8gZm9yIFhMUyBSZWNvcmQgMHgiK1oudG9TdHJpbmcoMTYpKSxlLmwrPVF9cmV0dXJuIHIuU2hlZXROYW1lcz0kZShpKS5zb3J0KGZ1bmN0aW9uKGN0LHllKXtyZXR1cm4gTnVtYmVyKGN0KS1OdW1iZXIoeWUpfSkubWFwKGZ1bmN0aW9uKGN0''@;'; put 'put ''KXtyZXR1cm4gaVtjdF0ubmFtZX0pLHQuYm9va1NoZWV0c3x8KHIuU2hlZXRzPWEpLCFyLlNoZWV0TmFtZXMubGVuZ3RoJiZsWyIhcmVmIl0/KHIuU2hlZXROYW1lcy5wdXNoKCJTaGVldDEiKSxyLlNoZWV0cyYmKHIuU2hlZXRzLlNoZWV0MT1sKSk6ci5QcmVhbWJsZT1sLHIuU2hlZXRzJiZP''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oY3QseWUpe3IuU2hlZXRzW3IuU2hlZXROYW1lc1t5ZV1dWyIhYXV0b2ZpbHRlciJdPWN0fSksci5TdHJpbmdzPWMsci5TU0Y9TWUocGUpLGIuZW5jJiYoci5FbmNyeXB0aW9uPWIuZW5jKSxlZSYmKHIuVGhlbWVzPWVlKSxyLk1ldGFkYXRhPXt9LHZvaWQgMCE9''@;'; put 'put ''PU4mJihyLk1ldGFkYXRhLkNvdW50cnk9TiksY2UubmFtZXMubGVuZ3RoPjAmJih5Lk5hbWVzPWNlLm5hbWVzKSxyLldvcmtib29rPXkscn0oYS5jb250ZW50LHQpO2Vsc2UgaWYoKGk9dmUuZmluZChlLCJQZXJmZWN0T2ZmaWNlX01BSU4iKSkmJmkuY29udGVudCluPWp0LnRvX3dvcmtib29r''@;'; put 'put ''KGkuY29udGVudCwodC50eXBlPXMsdCkpO2Vsc2V7aWYoIShpPXZlLmZpbmQoZSwiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhaS5jb250ZW50KXRocm93KGk9dmUuZmluZChlLCJNTjAiKSkmJmkuY29udGVudD9uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFdvcmtzIDQgZm9yIE1hYyBmaWxlIik6''@;'; put 'put ''bmV3IEVycm9yKCJDYW5ub3QgZmluZCBXb3JrYm9vayBzdHJlYW0iKTtuPWp0LnRvX3dvcmtib29rKGkuY29udGVudCwodC50eXBlPXMsdCkpfXQuYm9va1ZCQSYmZS5GdWxsUGF0aHMmJnZlLmZpbmQoZSwiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYobi52YmFyYXc9ZnVuY3Rpb24g''@;'; put 'put ''RngoZSl7dmFyIHQ9dmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4gZS5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihyLGEpe2lmKCIvIiE9PXIuc2xpY2UoLTEpJiZyLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciBuPXIucmVwbGFjZSgvXlteXC9dKi8sIlIiKS5y''@;'; put 'put ''ZXBsYWNlKC9cL19WQkFfUFJPSkVDVF9DVVJcdTAwMDAqLywiIik7dmUudXRpbHMuY2ZiX2FkZCh0LG4sZS5GaWxlSW5kZXhbYV0uY29udGVudCl9fSksdmUud3JpdGUodCl9KGUpKX12YXIgZj17fTtyZXR1cm4gZS5GdWxsUGF0aHMmJmZ1bmN0aW9uIGxtKGUsdCxyKXt2YXIgYT12ZS5maW5k''@;'; put 'put ''KGUsIi8hRG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihhJiZhLnNpemU+MCl0cnl7dmFyIG49UnMoYSx4bix6YS5EU0kpO2Zvcih2YXIgaSBpbiBuKXRbaV09bltpXX1jYXRjaChvKXtpZihyLldURil0aHJvdyBvfXZhciBzPXZlLmZpbmQoZSwiLyFTdW1tYXJ5SW5mb3JtYXRpb24i''@;'; put 'put ''KTtpZihzJiZzLnNpemU+MCl0cnl7dmFyIGY9UnMocyxkbix6YS5TSSk7Zm9yKHZhciBjIGluIGYpbnVsbD09dFtjXSYmKHRbY109ZltjXSl9Y2F0Y2gobyl7aWYoci5XVEYpdGhyb3cgb310LkhlYWRpbmdQYWlycyYmdC5UaXRsZXNPZlBhcnRzJiYod3ModC5IZWFkaW5nUGFpcnMsdC5UaXRs''@;'; put 'put ''ZXNPZlBhcnRzLHQsciksZGVsZXRlIHQuSGVhZGluZ1BhaXJzLGRlbGV0ZSB0LlRpdGxlc09mUGFydHMpfShlLGYsdCksbi5Qcm9wcz1uLkN1c3Rwcm9wcz1mLHQuYm9va0ZpbGVzJiYobi5jZmI9ZSksbn12YXIgJGE9ezA6e2Y6ZnVuY3Rpb24gUHYoZSx0KXt2YXIgcj17fSxhPWUubCt0O3Iu''@;'; put 'put ''cj1lLnJlYWRfc2hpZnQoNCksZS5sKz00O3ZhciBuPWUucmVhZF9zaGlmdCgyKTtlLmwrPTE7dmFyIGk9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmw9YSw3JmkmJihyLmxldmVsPTcmaSksMTYmaSYmKHIuaGlkZGVuPSEwKSwzMiZpJiYoci5ocHQ9bi8yMCkscn19LDE6e2Y6ZnVuY3Rpb24g''@;'; put 'put ''WHYoZSl7cmV0dXJuW0hyKGUpXX19LDI6e2Y6ZnVuY3Rpb24gYzIoZSl7cmV0dXJuW0hyKGUpLHVuKGUpLCJuIl19fSwzOntmOmZ1bmN0aW9uIHF2KGUpe3JldHVybltIcihlKSxlLnJlYWRfc2hpZnQoMSksImUiXX19LDQ6e2Y6ZnVuY3Rpb24ganYoZSl7cmV0dXJuW0hyKGUpLGUucmVhZF9z''@;'; put 'put ''aGlmdCgxKSwiYiJdfX0sNTp7ZjpmdW5jdGlvbiBpMihlKXtyZXR1cm5bSHIoZSksZ3IoZSksIm4iXX19LDY6e2Y6ZnVuY3Rpb24geDIoZSl7cmV0dXJuW0hyKGUpLG1yKGUpLCJzdHIiXX19LDc6e2Y6ZnVuY3Rpb24gcjIoZSl7cmV0dXJuW0hyKGUpLGUucmVhZF9zaGlmdCg0KSwicyJdfX0s''@;'; put 'put ''ODp7ZjpmdW5jdGlvbiB3MihlLHQscil7dmFyIGE9ZS5sK3Qsbj1IcihlKTtuLnI9clsiIXJvdyJdO3ZhciBzPVtuLG1yKGUpLCJzdHIiXTtpZihyLmNlbGxGb3JtdWxhKXtlLmwrPTI7dmFyIGY9QzAoZSxhLWUubCxyKTtzWzNdPWtyKGYsMCxuLHIuc3VwYm9va3Mscil9ZWxzZSBlLmw9YTty''@;'; put 'put ''ZXR1cm4gc319LDk6e2Y6ZnVuY3Rpb24gXzIoZSx0LHIpe3ZhciBhPWUubCt0LG49SHIoZSk7bi5yPXJbIiFyb3ciXTt2YXIgcz1bbixncihlKSwibiJdO2lmKHIuY2VsbEZvcm11bGEpe2UubCs9Mjt2YXIgZj1DMChlLGEtZS5sLHIpO3NbM109a3IoZiwwLG4sci5zdXBib29rcyxyKX1lbHNl''@;'; put 'put ''IGUubD1hO3JldHVybiBzfX0sMTA6e2Y6ZnVuY3Rpb24gbTIoZSx0LHIpe3ZhciBhPWUubCt0LG49SHIoZSk7bi5yPXJbIiFyb3ciXTt2YXIgcz1bbixlLnJlYWRfc2hpZnQoMSksImIiXTtpZihyLmNlbGxGb3JtdWxhKXtlLmwrPTI7dmFyIGY9QzAoZSxhLWUubCxyKTtzWzNdPWtyKGYsMCxu''@;'; put 'put ''LHIuc3VwYm9va3Mscil9ZWxzZSBlLmw9YTtyZXR1cm4gc319LDExOntmOmZ1bmN0aW9uIGcyKGUsdCxyKXt2YXIgYT1lLmwrdCxuPUhyKGUpO24ucj1yWyIhcm93Il07dmFyIHM9W24sZS5yZWFkX3NoaWZ0KDEpLCJlIl07aWYoci5jZWxsRm9ybXVsYSl7ZS5sKz0yO3ZhciBmPUMwKGUsYS1l''@;'; put 'put ''Lmwscik7c1szXT1rcihmLDAsbixyLnN1cGJvb2tzLHIpfWVsc2UgZS5sPWE7cmV0dXJuIHN9fSwxMjp7ZjpmdW5jdGlvbiB6dihlKXtyZXR1cm5bTXQoZSldfX0sMTM6e2Y6ZnVuY3Rpb24gbDIoZSl7cmV0dXJuW010KGUpLHVuKGUpLCJuIl19fSwxNDp7ZjpmdW5jdGlvbiBRdihlKXtyZXR1''@;'; put 'put ''cm5bTXQoZSksZS5yZWFkX3NoaWZ0KDEpLCJlIl19fSwxNTp7ZjpmdW5jdGlvbiBZdihlKXtyZXR1cm5bTXQoZSksZS5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7ZjpCZn0sMTc6e2Y6ZnVuY3Rpb24gdjIoZSl7cmV0dXJuW010KGUpLG1yKGUpLCJzdHIiXX19LDE4OntmOmZ1bmN0aW9uIGEy''@;'; put 'put ''KGUpe3JldHVybltNdChlKSxlLnJlYWRfc2hpZnQoNCksInMiXX19LDE5OntmOnNufSwyMDp7fSwyMTp7fSwyMjp7fSwyMzp7fSwyNDp7fSwyNTp7fSwyNjp7fSwyNzp7fSwyODp7fSwyOTp7fSwzMDp7fSwzMTp7fSwzMjp7fSwzMzp7fSwzNDp7fSwzNTp7VDoxfSwzNjp7VDotMX0sMzc6e1Q6''@;'; put 'put ''MX0sMzg6e1Q6LTF9LDM5OntmOmZ1bmN0aW9uIHBwKGUsdCxyKXt2YXIgYT1lLmwrdDtlLmwrPTQsZS5sKz0xO3ZhciBuPWUucmVhZF9zaGlmdCg0KSxpPWpvKGUpLHM9ZXYoZSwwLHIpLGY9Zm4oZSk7ZS5sPWE7dmFyIGM9e05hbWU6aSxQdGc6c307cmV0dXJuIG48MjY4NDM1NDU1JiYoYy5T''@;'; put 'put ''aGVldD1uKSxmJiYoYy5Db21tZW50PWYpLGN9fSw0MDp7fSw0Mjp7fSw0Mzp7ZjpmdW5jdGlvbiB2MShlLHQscil7dmFyIGE9e307YS5zej1lLnJlYWRfc2hpZnQoMikvMjA7dmFyIG49ZnVuY3Rpb24gWW8oZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmwrKyx7ZkJvbGQ6MSZ0''@;'; put 'put ''LGZJdGFsaWM6MiZ0LGZVbmRlcmxpbmU6NCZ0LGZTdHJpa2VvdXQ6OCZ0LGZPdXRsaW5lOjE2JnQsZlNoYWRvdzozMiZ0LGZDb25kZW5zZTo2NCZ0LGZFeHRlbmQ6MTI4JnR9fShlKTtzd2l0Y2gobi5mSXRhbGljJiYoYS5pdGFsaWM9MSksbi5mQ29uZGVuc2UmJihhLmNvbmRlbnNlPTEpLG4u''@;'; put 'put ''ZkV4dGVuZCYmKGEuZXh0ZW5kPTEpLG4uZlNoYWRvdyYmKGEuc2hhZG93PTEpLG4uZk91dGxpbmUmJihhLm91dGxpbmU9MSksbi5mU3RyaWtlb3V0JiYoYS5zdHJpa2U9MSksNzAwPT09ZS5yZWFkX3NoaWZ0KDIpJiYoYS5ib2xkPTEpLGUucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOmEudmVydEFs''@;'; put 'put ''aWduPSJzdXBlcnNjcmlwdCI7YnJlYWs7Y2FzZSAyOmEudmVydEFsaWduPSJzdWJzY3JpcHQifXZhciBzPWUucmVhZF9zaGlmdCgxKTswIT1zJiYoYS51bmRlcmxpbmU9cyk7dmFyIGY9ZS5yZWFkX3NoaWZ0KDEpO2Y+MCYmKGEuZmFtaWx5PWYpO3ZhciBjPWUucmVhZF9zaGlmdCgxKTtzd2l0''@;'; put 'put ''Y2goYz4wJiYoYS5jaGFyc2V0PWMpLGUubCsrLGEuY29sb3I9ZnVuY3Rpb24gS28oZSl7dmFyIHQ9e30sYT1lLnJlYWRfc2hpZnQoMSk+Pj4xLG49ZS5yZWFkX3NoaWZ0KDEpLGk9ZS5yZWFkX3NoaWZ0KDIsImkiKSxzPWUucmVhZF9zaGlmdCgxKSxmPWUucmVhZF9zaGlmdCgxKSxjPWUucmVh''@;'; put 'put ''ZF9zaGlmdCgxKTtzd2l0Y2goZS5sKyssYSl7Y2FzZSAwOnQuYXV0bz0xO2JyZWFrO2Nhc2UgMTp0LmluZGV4PW47dmFyIG89VnRbbl07byYmKHQucmdiPWJhKG8pKTticmVhaztjYXNlIDI6dC5yZ2I9YmEoW3MsZixjXSk7YnJlYWs7Y2FzZSAzOnQudGhlbWU9bn1yZXR1cm4gMCE9aSYmKHQu''@;'; put 'put ''dGludD1pPjA/aS8zMjc2NzppLzMyNzY4KSx0fShlKSxlLnJlYWRfc2hpZnQoMSkpe2Nhc2UgMTphLnNjaGVtZT0ibWFqb3IiO2JyZWFrO2Nhc2UgMjphLnNjaGVtZT0ibWlub3IifXJldHVybiBhLm5hbWU9bXIoZSksYX19LDQ0OntmOmZ1bmN0aW9uIHgxKGUsdCl7cmV0dXJuW2UucmVhZF9z''@;'; put 'put ''aGlmdCgyKSxtcihlKV19fSw0NTp7ZjpnMX0sNDY6e2Y6dzF9LDQ3OntmOmZ1bmN0aW9uIF8xKGUsdCl7dmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoMiksbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIGUubD1yLHtpeGZlOmEsbnVtRm10SWQ6bn19fSw0ODp7fSw0OTp7ZjpmdW5jdGlvbiBI''@;'; put 'put ''byhlKXtyZXR1cm4gZS5yZWFkX3NoaWZ0KDQsImkiKX19LDUwOnt9LDUxOntmOmZ1bmN0aW9uIGV4KGUpe2Zvcih2YXIgdD1bXSxyPWUucmVhZF9zaGlmdCg0KTtyLS0gPjA7KXQucHVzaChbZS5yZWFkX3NoaWZ0KDQpLGUucmVhZF9zaGlmdCg0KV0pO3JldHVybiB0fX0sNTI6e1Q6MX0sNTM6''@;'; put 'put ''e1Q6LTF9LDU0OntUOjF9LDU1OntUOi0xfSw1Njp7VDoxfSw1Nzp7VDotMX0sNTg6e30sNTk6e30sNjA6e2Y6UXN9LDYyOntmOmZ1bmN0aW9uIGgyKGUpe3JldHVybltIcihlKSxzbihlKSwiaXMiXX19LDYzOntmOmZ1bmN0aW9uIG94KGUpe3ZhciB0PXt9O3QuaT1lLnJlYWRfc2hpZnQoNCk7''@;'; put 'put ''dmFyIHI9e307ci5yPWUucmVhZF9zaGlmdCg0KSxyLmM9ZS5yZWFkX3NoaWZ0KDQpLHQucj1nZShyKTt2YXIgYT1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDImYSYmKHQubD0iMSIpLDgmYSYmKHQuYT0iMSIpLHR9fSw2NDp7ZjpmdW5jdGlvbiBMMigpe319LDY1Ont9LDY2Ont9LDY3Ont9LDY4''@;'; put 'put ''Ont9LDY5Ont9LDcwOnt9LDEyODp7fSwxMjk6e1Q6MX0sMTMwOntUOi0xfSwxMzE6e1Q6MSxmOnByLHA6MH0sMTMyOntUOi0xfSwxMzM6e1Q6MX0sMTM0OntUOi0xfSwxMzU6e1Q6MX0sMTM2OntUOi0xfSwxMzc6e1Q6MSxmOmZ1bmN0aW9uIFIyKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKTty''@;'; put 'put ''ZXR1cm4gZS5sKz0yOCx7UlRMOjMyJnR9fX0sMTM4OntUOi0xfSwxMzk6e1Q6MX0sMTQwOntUOi0xfSwxNDE6e1Q6MX0sMTQyOntUOi0xfSwxNDM6e1Q6MX0sMTQ0OntUOi0xfSwxNDU6e1Q6MX0sMTQ2OntUOi0xfSwxNDc6e2Y6ZnVuY3Rpb24gSHYoZSx0KXt2YXIgcj17fSxhPWVbZS5sXTty''@;'; put 'put ''ZXR1cm4rK2UubCxyLmFib3ZlPSEoNjQmYSksci5sZWZ0PSEoMTI4JmEpLGUubCs9MTgsci5uYW1lPSRvKGUsdC0xOSkscn19LDE0ODp7ZjpNdixwOjE2fSwxNTE6e2Y6ZnVuY3Rpb24geTIoKXt9fSwxNTI6e30sMTUzOntmOmZ1bmN0aW9uIHhwKGUsdCl7dmFyIHI9e30sYT1lLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCk7ci5kZWZhdWx0VGhlbWVWZXJzaW9uPWUucmVhZF9zaGlmdCg0KTt2YXIgbj10Pjg/bXIoZSk6IiI7cmV0dXJuIG4ubGVuZ3RoPjAmJihyLkNvZGVOYW1lPW4pLHIuYXV0b0NvbXByZXNzUGljdHVyZXM9ISEoNjU1MzYmYSksci5iYWNrdXBGaWxlPSEhKDY0JmEpLHIuY2hlY2tDb21w''@;'; put 'put ''YXRpYmlsaXR5PSEhKDQwOTYmYSksci5kYXRlMTkwND0hISgxJmEpLHIuZmlsdGVyUHJpdmFjeT0hISg4JmEpLHIuaGlkZVBpdm90RmllbGRMaXN0PSEhKDEwMjQmYSksci5wcm9tcHRlZFNvbHV0aW9ucz0hISgxNiZhKSxyLnB1Ymxpc2hJdGVtcz0hISgyMDQ4JmEpLHIucmVmcmVzaEFsbENv''@;'; put 'put ''bm5lY3Rpb25zPSEhKDI2MjE0NCZhKSxyLnNhdmVFeHRlcm5hbExpbmtWYWx1ZXM9ISEoMTI4JmEpLHIuc2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXM9ISEoNCZhKSxyLnNob3dJbmtBbm5vdGF0aW9uPSEhKDMyJmEpLHIuc2hvd09iamVjdHM9WyJhbGwiLCJwbGFjZWhvbGRlcnMiLCJub25l''@;'; put 'put ''Il1bYT4+MTMmM10sci5zaG93UGl2b3RDaGFydEZpbHRlcj0hISgzMjc2OCZhKSxyLnVwZGF0ZUxpbmtzPVsidXNlclNldCIsIm5ldmVyIiwiYWx3YXlzIl1bYT4+OCYzXSxyfX0sMTU0Ont9LDE1NTp7fSwxNTY6e2Y6ZnVuY3Rpb24gdXAoZSx0KXt2YXIgcj17fTtyZXR1cm4gci5IaWRkZW49''@;'; put 'put ''ZS5yZWFkX3NoaWZ0KDQpLHIuaVRhYklEPWUucmVhZF9zaGlmdCg0KSxyLnN0clJlbElEPW9uKGUsdC04KSxyLm5hbWU9bXIoZSkscn19LDE1Nzp7fSwxNTg6e30sMTU5OntUOjEsZjpmdW5jdGlvbiBPaChlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDQpLGUucmVhZF9zaGlmdCg0KV19fSwxNjA6''@;'; put 'put ''e1Q6LTF9LDE2MTp7VDoxLGY6V3R9LDE2Mjp7VDotMX0sMTYzOntUOjF9LDE2NDp7VDotMX0sMTY1OntUOjF9LDE2Njp7VDotMX0sMTY3Ont9LDE2ODp7fSwxNjk6e30sMTcwOnt9LDE3MTp7fSwxNzI6e1Q6MX0sMTczOntUOi0xfSwxNzQ6e30sMTc1Ont9LDE3Njp7ZjprMn0sMTc3OntUOjF9''@;'; put 'put ''LDE3ODp7VDotMX0sMTc5OntUOjF9LDE4MDp7VDotMX0sMTgxOntUOjF9LDE4Mjp7VDotMX0sMTgzOntUOjF9LDE4NDp7VDotMX0sMTg1OntUOjF9LDE4Njp7VDotMX0sMTg3OntUOjF9LDE4ODp7VDotMX0sMTg5OntUOjF9LDE5MDp7VDotMX0sMTkxOntUOjF9LDE5Mjp7VDotMX0sMTkzOntU''@;'; put 'put ''OjF9LDE5NDp7VDotMX0sMTk1OntUOjF9LDE5Njp7VDotMX0sMTk3OntUOjF9LDE5ODp7VDotMX0sMTk5OntUOjF9LDIwMDp7VDotMX0sMjAxOntUOjF9LDIwMjp7VDotMX0sMjAzOntUOjF9LDIwNDp7VDotMX0sMjA1OntUOjF9LDIwNjp7VDotMX0sMjA3OntUOjF9LDIwODp7VDotMX0sMjA5''@;'; put 'put ''OntUOjF9LDIxMDp7VDotMX0sMjExOntUOjF9LDIxMjp7VDotMX0sMjEzOntUOjF9LDIxNDp7VDotMX0sMjE1OntUOjF9LDIxNjp7VDotMX0sMjE3OntUOjF9LDIxODp7VDotMX0sMjE5OntUOjF9LDIyMDp7VDotMX0sMjIxOntUOjF9LDIyMjp7VDotMX0sMjIzOntUOjF9LDIyNDp7VDotMX0s''@;'; put 'put ''MjI1OntUOjF9LDIyNjp7VDotMX0sMjI3OntUOjF9LDIyODp7VDotMX0sMjI5OntUOjF9LDIzMDp7VDotMX0sMjMxOntUOjF9LDIzMjp7VDotMX0sMjMzOntUOjF9LDIzNDp7VDotMX0sMjM1OntUOjF9LDIzNjp7VDotMX0sMjM3OntUOjF9LDIzODp7VDotMX0sMjM5OntUOjF9LDI0MDp7VDot''@;'; put 'put ''MX0sMjQxOntUOjF9LDI0Mjp7VDotMX0sMjQzOntUOjF9LDI0NDp7VDotMX0sMjQ1OntUOjF9LDI0Njp7VDotMX0sMjQ3OntUOjF9LDI0ODp7VDotMX0sMjQ5OntUOjF9LDI1MDp7VDotMX0sMjUxOntUOjF9LDI1Mjp7VDotMX0sMjUzOntUOjF9LDI1NDp7VDotMX0sMjU1OntUOjF9LDI1Njp7''@;'; put 'put ''VDotMX0sMjU3OntUOjF9LDI1ODp7VDotMX0sMjU5OntUOjF9LDI2MDp7VDotMX0sMjYxOntUOjF9LDI2Mjp7VDotMX0sMjYzOntUOjF9LDI2NDp7VDotMX0sMjY1OntUOjF9LDI2Njp7VDotMX0sMjY3OntUOjF9LDI2ODp7VDotMX0sMjY5OntUOjF9LDI3MDp7VDotMX0sMjcxOntUOjF9LDI3''@;'; put 'put ''Mjp7VDotMX0sMjczOntUOjF9LDI3NDp7VDotMX0sMjc1OntUOjF9LDI3Njp7VDotMX0sMjc3Ont9LDI3ODp7VDoxfSwyNzk6e1Q6LTF9LDI4MDp7VDoxfSwyODE6e1Q6LTF9LDI4Mjp7VDoxfSwyODM6e1Q6MX0sMjg0OntUOi0xfSwyODU6e1Q6MX0sMjg2OntUOi0xfSwyODc6e1Q6MX0sMjg4''@;'; put 'put ''OntUOi0xfSwyODk6e1Q6MX0sMjkwOntUOi0xfSwyOTE6e1Q6MX0sMjkyOntUOi0xfSwyOTM6e1Q6MX0sMjk0OntUOi0xfSwyOTU6e1Q6MX0sMjk2OntUOi0xfSwyOTc6e1Q6MX0sMjk4OntUOi0xfSwyOTk6e1Q6MX0sMzAwOntUOi0xfSwzMDE6e1Q6MX0sMzAyOntUOi0xfSwzMDM6e1Q6MX0s''@;'; put 'put ''MzA0OntUOi0xfSwzMDU6e1Q6MX0sMzA2OntUOi0xfSwzMDc6e1Q6MX0sMzA4OntUOi0xfSwzMDk6e1Q6MX0sMzEwOntUOi0xfSwzMTE6e1Q6MX0sMzEyOntUOi0xfSwzMTM6e1Q6LTF9LDMxNDp7VDoxfSwzMTU6e1Q6LTF9LDMxNjp7VDoxfSwzMTc6e1Q6LTF9LDMxODp7VDoxfSwzMTk6e1Q6''@;'; put 'put ''LTF9LDMyMDp7VDoxfSwzMjE6e1Q6LTF9LDMyMjp7VDoxfSwzMjM6e1Q6LTF9LDMyNDp7VDoxfSwzMjU6e1Q6LTF9LDMyNjp7VDoxfSwzMjc6e1Q6LTF9LDMyODp7VDoxfSwzMjk6e1Q6LTF9LDMzMDp7VDoxfSwzMzE6e1Q6LTF9LDMzMjp7VDoxfSwzMzM6e1Q6LTF9LDMzNDp7VDoxfSwzMzU6''@;'; put 'put ''e2Y6ZnVuY3Rpb24gWjEoZSx0KXtyZXR1cm57ZmxhZ3M6ZS5yZWFkX3NoaWZ0KDQpLHZlcnNpb246ZS5yZWFkX3NoaWZ0KDQpLG5hbWU6bXIoZSl9fX0sMzM2OntUOi0xfSwzMzc6e2Y6ZnVuY3Rpb24gYXgoZSl7cmV0dXJuIGUubCs9NCwwIT1lLnJlYWRfc2hpZnQoNCl9LFQ6MX0sMzM4OntU''@;'; put 'put ''Oi0xfSwzMzk6e1Q6MX0sMzQwOntUOi0xfSwzNDE6e1Q6MX0sMzQyOntUOi0xfSwzNDM6e1Q6MX0sMzQ0OntUOi0xfSwzNDU6e1Q6MX0sMzQ2OntUOi0xfSwzNDc6e1Q6MX0sMzQ4OntUOi0xfSwzNDk6e1Q6MX0sMzUwOntUOi0xfSwzNTE6e30sMzUyOnt9LDM1Mzp7VDoxfSwzNTQ6e1Q6LTF9''@;'; put 'put ''LDM1NTp7Zjpvbn0sMzU3Ont9LDM1ODp7fSwzNTk6e30sMzYwOntUOjF9LDM2MTp7fSwzNjI6e2Y6cXN9LDM2Mzp7fSwzNjQ6e30sMzY2Ont9LDM2Nzp7fSwzNjg6e30sMzY5Ont9LDM3MDp7fSwzNzE6e30sMzcyOntUOjF9LDM3Mzp7VDotMX0sMzc0OntUOjF9LDM3NTp7VDotMX0sMzc2OntU''@;'; put 'put ''OjF9LDM3Nzp7VDotMX0sMzc4OntUOjF9LDM3OTp7VDotMX0sMzgwOntUOjF9LDM4MTp7VDotMX0sMzgyOntUOjF9LDM4Mzp7VDotMX0sMzg0OntUOjF9LDM4NTp7VDotMX0sMzg2OntUOjF9LDM4Nzp7VDotMX0sMzg4OntUOjF9LDM4OTp7VDotMX0sMzkwOntUOjF9LDM5MTp7VDotMX0sMzky''@;'; put 'put ''OntUOjF9LDM5Mzp7VDotMX0sMzk0OntUOjF9LDM5NTp7VDotMX0sMzk2Ont9LDM5Nzp7fSwzOTg6e30sMzk5Ont9LDQwMDp7fSw0MDE6e1Q6MX0sNDAzOnt9LDQwNDp7fSw0MDU6e30sNDA2Ont9LDQwNzp7fSw0MDg6e30sNDA5Ont9LDQxMDp7fSw0MTE6e30sNDEyOnt9LDQxMzp7fSw0MTQ6''@;'; put 'put ''e30sNDE1Ont9LDQxNjp7fSw0MTc6e30sNDE4Ont9LDQxOTp7fSw0MjA6e30sNDIxOnt9LDQyMjp7VDoxfSw0MjM6e1Q6MX0sNDI0OntUOi0xfSw0MjU6e1Q6LTF9LDQyNjp7ZjpmdW5jdGlvbiBBMihlLHQscil7dmFyIGE9ZS5sK3Qsbj1vcyhlKSxpPWUucmVhZF9zaGlmdCgxKSxzPVtuXTtp''@;'; put 'put ''ZihzWzJdPWksci5jZWxsRm9ybXVsYSl7dmFyIGY9UWQoZSxhLWUubCxyKTtzWzFdPWZ9ZWxzZSBlLmw9YTtyZXR1cm4gc319LDQyNzp7ZjpmdW5jdGlvbiBDMihlLHQscil7dmFyIGE9ZS5sK3QsaT1bV3QoZSwxNildO2lmKHIuY2VsbEZvcm11bGEpe3ZhciBzPXJ2KGUsYS1lLmwscik7aVsx''@;'; put 'put ''XT1zLGUubD1hfWVsc2UgZS5sPWE7cmV0dXJuIGl9fSw0Mjg6e30sNDI5OntUOjF9LDQzMDp7VDotMX0sNDMxOntUOjF9LDQzMjp7VDotMX0sNDMzOntUOjF9LDQzNDp7VDotMX0sNDM1OntUOjF9LDQzNjp7VDotMX0sNDM3OntUOjF9LDQzODp7VDotMX0sNDM5OntUOjF9LDQ0MDp7VDotMX0s''@;'; put 'put ''NDQxOntUOjF9LDQ0Mjp7VDotMX0sNDQzOntUOjF9LDQ0NDp7VDotMX0sNDQ1OntUOjF9LDQ0Njp7VDotMX0sNDQ3OntUOjF9LDQ0ODp7VDotMX0sNDQ5OntUOjF9LDQ1MDp7VDotMX0sNDUxOntUOjF9LDQ1Mjp7VDotMX0sNDUzOntUOjF9LDQ1NDp7VDotMX0sNDU1OntUOjF9LDQ1Njp7VDot''@;'; put 'put ''MX0sNDU3OntUOjF9LDQ1ODp7VDotMX0sNDU5OntUOjF9LDQ2MDp7VDotMX0sNDYxOntUOjF9LDQ2Mjp7VDotMX0sNDYzOntUOjF9LDQ2NDp7VDotMX0sNDY1OntUOjF9LDQ2Njp7VDotMX0sNDY3OntUOjF9LDQ2ODp7VDotMX0sNDY5OntUOjF9LDQ3MDp7VDotMX0sNDcxOnt9LDQ3Mjp7fSw0''@;'; put 'put ''NzM6e1Q6MX0sNDc0OntUOi0xfSw0NzU6e30sNDc2OntmOmZ1bmN0aW9uIE8yKGUpe3ZhciB0PXt9O3JldHVybiBNZi5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Rbcl09Z3IoZSl9KSx0fX0sNDc3Ont9LDQ3ODp7fSw0Nzk6e1Q6MX0sNDgwOntUOi0xfSw0ODE6e1Q6MX0sNDgyOntUOi0xfSw0ODM6''@;'; put 'put ''e1Q6MX0sNDg0OntUOi0xfSw0ODU6e2Y6ZnVuY3Rpb24gV3YoKXt9fSw0ODY6e1Q6MX0sNDg3OntUOi0xfSw0ODg6e1Q6MX0sNDg5OntUOi0xfSw0OTA6e1Q6MX0sNDkxOntUOi0xfSw0OTI6e1Q6MX0sNDkzOntUOi0xfSw0OTQ6e2Y6ZnVuY3Rpb24gUzIoZSx0KXt2YXIgcj1lLmwrdCxhPVd0''@;'; put 'put ''KGUsMTYpLG49Zm4oZSksaT1tcihlKSxzPW1yKGUpLGY9bXIoZSk7ZS5sPXI7dmFyIGM9e3JmeDphLHJlbElkOm4sbG9jOmksZGlzcGxheTpmfTtyZXR1cm4gcyYmKGMuVG9vbHRpcD1zKSxjfX0sNDk1OntUOjF9LDQ5Njp7VDotMX0sNDk3OntUOjF9LDQ5ODp7VDotMX0sNDk5Ont9LDUwMDp7''@;'; put 'put ''VDoxfSw1MDE6e1Q6LTF9LDUwMjp7VDoxfSw1MDM6e1Q6LTF9LDUwNDp7fSw1MDU6e1Q6MX0sNTA2OntUOi0xfSw1MDc6e30sNTA4OntUOjF9LDUwOTp7VDotMX0sNTEwOntUOjF9LDUxMTp7VDotMX0sNTEyOnt9LDUxMzp7fSw1MTQ6e1Q6MX0sNTE1OntUOi0xfSw1MTY6e1Q6MX0sNTE3OntU''@;'; put 'put ''Oi0xfSw1MTg6e1Q6MX0sNTE5OntUOi0xfSw1MjA6e1Q6MX0sNTIxOntUOi0xfSw1MjI6e30sNTIzOnt9LDUyNDp7fSw1MjU6e30sNTI2Ont9LDUyNzp7fSw1Mjg6e1Q6MX0sNTI5OntUOi0xfSw1MzA6e1Q6MX0sNTMxOntUOi0xfSw1MzI6e1Q6MX0sNTMzOntUOi0xfSw1MzQ6e30sNTM1Ont9''@;'; put 'put ''LDUzNjp7fSw1Mzc6e30sNTM4OntUOjF9LDUzOTp7VDotMX0sNTQwOntUOjF9LDU0MTp7VDotMX0sNTQyOntUOjF9LDU0ODp7fSw1NDk6e30sNTUwOntmOm9ufSw1NTE6e30sNTUyOnt9LDU1Mzp7fSw1NTQ6e1Q6MX0sNTU1OntUOi0xfSw1NTY6e1Q6MX0sNTU3OntUOi0xfSw1NTg6e1Q6MX0s''@;'; put 'put ''NTU5OntUOi0xfSw1NjA6e1Q6MX0sNTYxOntUOi0xfSw1NjI6e30sNTY0Ont9LDU2NTp7VDoxfSw1NjY6e1Q6LTF9LDU2OTp7VDoxfSw1NzA6e1Q6LTF9LDU3Mjp7fSw1NzM6e1Q6MX0sNTc0OntUOi0xfSw1Nzc6e30sNTc4Ont9LDU3OTp7fSw1ODA6e30sNTgxOnt9LDU4Mjp7fSw1ODM6e30s''@;'; put 'put ''NTg0Ont9LDU4NTp7fSw1ODY6e30sNTg3Ont9LDU4ODp7VDotMX0sNTg5Ont9LDU5MDp7VDoxfSw1OTE6e1Q6LTF9LDU5Mjp7VDoxfSw1OTM6e1Q6LTF9LDU5NDp7VDoxfSw1OTU6e1Q6LTF9LDU5Njp7fSw1OTc6e1Q6MX0sNTk4OntUOi0xfSw1OTk6e1Q6MX0sNjAwOntUOi0xfSw2MDE6e1Q6''@;'; put 'put ''MX0sNjAyOntUOi0xfSw2MDM6e1Q6MX0sNjA0OntUOi0xfSw2MDU6e1Q6MX0sNjA2OntUOi0xfSw2MDc6e30sNjA4OntUOjF9LDYwOTp7VDotMX0sNjEwOnt9LDYxMTp7VDoxfSw2MTI6e1Q6LTF9LDYxMzp7VDoxfSw2MTQ6e1Q6LTF9LDYxNTp7VDoxfSw2MTY6e1Q6LTF9LDYxNzp7VDoxfSw2''@;'; put 'put ''MTg6e1Q6LTF9LDYxOTp7VDoxfSw2MjA6e1Q6LTF9LDYyNTp7fSw2MjY6e1Q6MX0sNjI3OntUOi0xfSw2Mjg6e1Q6MX0sNjI5OntUOi0xfSw2MzA6e1Q6MX0sNjMxOntUOi0xfSw2MzI6e2Y6d3h9LDYzMzp7VDoxfSw2MzQ6e1Q6LTF9LDYzNTp7VDoxLGY6ZnVuY3Rpb24gZ3goZSl7dmFyIHQ9''@;'; put 'put ''e307dC5pYXV0aG9yPWUucmVhZF9zaGlmdCg0KTt2YXIgcj1XdChlLDE2KTtyZXR1cm4gdC5yZng9ci5zLHQucmVmPWdlKHIucyksZS5sKz0xNix0fX0sNjM2OntUOi0xfSw2Mzc6e2Y6R299LDYzODp7VDoxfSw2Mzk6e30sNjQwOntUOi0xfSw2NDE6e1Q6MX0sNjQyOntUOi0xfSw2NDM6e1Q6''@;'; put 'put ''MX0sNjQ0Ont9LDY0NTp7VDotMX0sNjQ2OntUOjF9LDY0ODp7VDoxfSw2NDk6e30sNjUwOntUOi0xfSw2NTE6e2Y6ZnVuY3Rpb24gZXAoZSx0KXtyZXR1cm4gZS5sKz0xMCx7bmFtZTptcihlKX19fSw2NTI6e30sNjUzOntUOjF9LDY1NDp7VDotMX0sNjU1OntUOjF9LDY1Njp7VDotMX0sNjU3''@;'; put 'put ''OntUOjF9LDY1ODp7VDotMX0sNjU5Ont9LDY2MDp7VDoxfSw2NjE6e30sNjYyOntUOi0xfSw2NjM6e30sNjY0OntUOjF9LDY2NTp7fSw2NjY6e1Q6LTF9LDY2Nzp7fSw2Njg6e30sNjY5Ont9LDY3MTp7VDoxfSw2NzI6e1Q6LTF9LDY3Mzp7VDoxfSw2NzQ6e1Q6LTF9LDY3NTp7fSw2NzY6e30s''@;'; put 'put ''Njc3Ont9LDY3ODp7fSw2Nzk6e30sNjgwOnt9LDY4MTp7fSwxMDI0Ont9LDEwMjU6e30sMTAyNjp7VDoxfSwxMDI3OntUOi0xfSwxMDI4OntUOjF9LDEwMjk6e1Q6LTF9LDEwMzA6e30sMTAzMTp7VDoxfSwxMDMyOntUOi0xfSwxMDMzOntUOjF9LDEwMzQ6e1Q6LTF9LDEwMzU6e30sMTAzNjp7''@;'; put 'put ''fSwxMDM3Ont9LDEwMzg6e1Q6MX0sMTAzOTp7VDotMX0sMTA0MDp7fSwxMDQxOntUOjF9LDEwNDI6e1Q6LTF9LDEwNDM6e30sMTA0NDp7fSwxMDQ1Ont9LDEwNDY6e1Q6MX0sMTA0Nzp7VDotMX0sMTA0ODp7VDoxfSwxMDQ5OntUOi0xfSwxMDUwOnt9LDEwNTE6e1Q6MX0sMTA1Mjp7VDoxfSwx''@;'; put 'put ''MDUzOntmOmZ1bmN0aW9uIEIyKCl7fX0sMTA1NDp7VDoxfSwxMDU1Ont9LDEwNTY6e1Q6MX0sMTA1Nzp7VDotMX0sMTA1ODp7VDoxfSwxMDU5OntUOi0xfSwxMDYxOnt9LDEwNjI6e1Q6MX0sMTA2Mzp7VDotMX0sMTA2NDp7VDoxfSwxMDY1OntUOi0xfSwxMDY2OntUOjF9LDEwNjc6e1Q6LTF9''@;'; put 'put ''LDEwNjg6e1Q6MX0sMTA2OTp7VDotMX0sMTA3MDp7VDoxfSwxMDcxOntUOi0xfSwxMDcyOntUOjF9LDEwNzM6e1Q6LTF9LDEwNzU6e1Q6MX0sMTA3Njp7VDotMX0sMTA3Nzp7VDoxfSwxMDc4OntUOi0xfSwxMDc5OntUOjF9LDEwODA6e1Q6LTF9LDEwODE6e1Q6MX0sMTA4Mjp7VDotMX0sMTA4''@;'; put 'put ''Mzp7VDoxfSwxMDg0OntUOi0xfSwxMDg1Ont9LDEwODY6e1Q6MX0sMTA4Nzp7VDotMX0sMTA4ODp7VDoxfSwxMDg5OntUOi0xfSwxMDkwOntUOjF9LDEwOTE6e1Q6LTF9LDEwOTI6e1Q6MX0sMTA5Mzp7VDotMX0sMTA5NDp7VDoxfSwxMDk1OntUOi0xfSwxMDk2Ont9LDEwOTc6e1Q6MX0sMTA5''@;'; put 'put ''ODp7fSwxMDk5OntUOi0xfSwxMTAwOntUOjF9LDExMDE6e1Q6LTF9LDExMDI6e30sMTEwMzp7fSwxMTA0Ont9LDExMDU6e30sMTExMTp7fSwxMTEyOnt9LDExMTM6e1Q6MX0sMTExNDp7VDotMX0sMTExNTp7VDoxfSwxMTE2OntUOi0xfSwxMTE3Ont9LDExMTg6e1Q6MX0sMTExOTp7VDotMX0s''@;'; put 'put ''MTEyMDp7VDoxfSwxMTIxOntUOi0xfSwxMTIyOntUOjF9LDExMjM6e1Q6LTF9LDExMjQ6e1Q6MX0sMTEyNTp7VDotMX0sMTEyNjp7fSwxMTI4OntUOjF9LDExMjk6e1Q6LTF9LDExMzA6e30sMTEzMTp7VDoxfSwxMTMyOntUOi0xfSwxMTMzOntUOjF9LDExMzQ6e1Q6LTF9LDExMzU6e1Q6MX0s''@;'; put 'put ''MTEzNjp7VDotMX0sMTEzNzp7VDoxfSwxMTM4OntUOi0xfSwxMTM5OntUOjF9LDExNDA6e1Q6LTF9LDExNDE6e30sMTE0Mjp7VDoxfSwxMTQzOntUOi0xfSwxMTQ0OntUOjF9LDExNDU6e1Q6LTF9LDExNDY6e30sMTE0Nzp7VDoxfSwxMTQ4OntUOi0xfSwxMTQ5OntUOjF9LDExNTA6e1Q6LTF9''@;'; put 'put ''LDExNTI6e1Q6MX0sMTE1Mzp7VDotMX0sMTE1NDp7VDotMX0sMTE1NTp7VDotMX0sMTE1Njp7VDotMX0sMTE1Nzp7VDoxfSwxMTU4OntUOi0xfSwxMTU5OntUOjF9LDExNjA6e1Q6LTF9LDExNjE6e1Q6MX0sMTE2Mjp7VDotMX0sMTE2Mzp7VDoxfSwxMTY0OntUOi0xfSwxMTY1OntUOjF9LDEx''@;'; put 'put ''NjY6e1Q6LTF9LDExNjc6e1Q6MX0sMTE2ODp7VDotMX0sMTE2OTp7VDoxfSwxMTcwOntUOi0xfSwxMTcxOnt9LDExNzI6e1Q6MX0sMTE3Mzp7VDotMX0sMTE3Nzp7fSwxMTc4OntUOjF9LDExODA6e30sMTE4MTp7fSwxMTgyOnt9LDIwNDg6e1Q6MX0sMjA0OTp7VDotMX0sMjA1MDp7fSwyMDUx''@;'; put 'put ''OntUOjF9LDIwNTI6e1Q6LTF9LDIwNTM6e30sMjA1NDp7fSwyMDU1OntUOjF9LDIwNTY6e1Q6LTF9LDIwNTc6e1Q6MX0sMjA1ODp7VDotMX0sMjA2MDp7fSwyMDY3Ont9LDIwNjg6e1Q6MX0sMjA2OTp7VDotMX0sMjA3MDp7fSwyMDcxOnt9LDIwNzI6e1Q6MX0sMjA3Mzp7VDotMX0sMjA3NTp7''@;'; put 'put ''fSwyMDc2Ont9LDIwNzc6e1Q6MX0sMjA3ODp7VDotMX0sMjA3OTp7fSwyMDgwOntUOjF9LDIwODE6e1Q6LTF9LDIwODI6e30sMjA4Mzp7VDoxfSwyMDg0OntUOi0xfSwyMDg1OntUOjF9LDIwODY6e1Q6LTF9LDIwODc6e1Q6MX0sMjA4ODp7VDotMX0sMjA4OTp7VDoxfSwyMDkwOntUOi0xfSwy''@;'; put 'put ''MDkxOnt9LDIwOTI6e30sMjA5Mzp7VDoxfSwyMDk0OntUOi0xfSwyMDk1Ont9LDIwOTY6e1Q6MX0sMjA5Nzp7VDotMX0sMjA5ODp7VDoxfSwyMDk5OntUOi0xfSwyMTAwOntUOjF9LDIxMDE6e1Q6LTF9LDIxMDI6e30sMjEwMzp7VDoxfSwyMTA0OntUOi0xfSwyMTA1Ont9LDIxMDY6e1Q6MX0s''@;'; put 'put ''MjEwNzp7VDotMX0sMjEwODp7fSwyMTA5OntUOjF9LDIxMTA6e1Q6LTF9LDIxMTE6e1Q6MX0sMjExMjp7VDotMX0sMjExMzp7VDoxfSwyMTE0OntUOi0xfSwyMTE1Ont9LDIxMTY6e30sMjExNzp7fSwyMTE4OntUOjF9LDIxMTk6e1Q6LTF9LDIxMjA6e30sMjEyMTp7VDoxfSwyMTIyOntUOi0x''@;'; put 'put ''fSwyMTIzOntUOjF9LDIxMjQ6e1Q6LTF9LDIxMjU6e30sMjEyNjp7VDoxfSwyMTI3OntUOi0xfSwyMTI4Ont9LDIxMjk6e1Q6MX0sMjEzMDp7VDotMX0sMjEzMTp7VDoxfSwyMTMyOntUOi0xfSwyMTMzOntUOjF9LDIxMzQ6e30sMjEzNTp7fSwyMTM2Ont9LDIxMzc6e1Q6MX0sMjEzODp7VDot''@;'; put 'put ''MX0sMjEzOTp7VDoxfSwyMTQwOntUOi0xfSwyMTQxOnt9LDMwNzI6e30sMzA3Mzp7fSw0MDk2OntUOjF9LDQwOTc6e1Q6LTF9LDUwMDI6e1Q6MX0sNTAwMzp7VDotMX0sNTA4MTp7VDoxfSw1MDgyOntUOi0xfSw1MDgzOnt9LDUwODQ6e1Q6MX0sNTA4NTp7VDotMX0sNTA4Njp7VDoxfSw1MDg3''@;'; put 'put ''OntUOi0xfSw1MDg4Ont9LDUwODk6e30sNTA5MDp7fSw1MDkyOntUOjF9LDUwOTM6e1Q6LTF9LDUwOTQ6e30sNTA5NTp7VDoxfSw1MDk2OntUOi0xfSw1MDk3Ont9LDUwOTk6e30sNjU1MzU6e246IiJ9fSxXbj17Njp7ZjpObn0sMTA6e2Y6eXR9LDEyOntmOnRyfSwxMzp7Zjp0cn0sMTQ6e2Y6''@;'; put 'put ''SmV9LDE1OntmOkplfSwxNjp7Zjpncn0sMTc6e2Y6SmV9LDE4OntmOkplfSwxOTp7Zjp0cn0sMjA6e2Y6S3N9LDIxOntmOktzfSwyMzp7Zjpxc30sMjQ6e2Y6SnN9LDI1OntmOkplfSwyNjp7fSwyNzp7fSwyODp7ZjpmdW5jdGlvbiBVdShlLHQscil7cmV0dXJuIGZ1bmN0aW9uIE11KGUsdCxy''@;'; put 'put ''KXtpZighKHIuYmlmZjw4KSl7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpLG49ZS5yZWFkX3NoaWZ0KDIpLGk9ZS5yZWFkX3NoaWZ0KDIpLHM9ZS5yZWFkX3NoaWZ0KDIpLGY9enQoZSwwLHIpO3JldHVybiByLmJpZmY8OCYmZS5yZWFkX3NoaWZ0KDEpLFt7cjphLGM6bn0sZixzLGldfX0oZSwwLHIp''@;'; put 'put ''fX0sMjk6e30sMzQ6e2Y6SmV9LDM1OntmOllzfSwzODp7Zjpncn0sMzk6e2Y6Z3J9LDQwOntmOmdyfSw0MTp7Zjpncn0sNDI6e2Y6SmV9LDQzOntmOkplfSw0Nzp7ZjpmdW5jdGlvbiBxaChlLHQscil7dmFyIGE9e1R5cGU6ci5iaWZmPj04P2UucmVhZF9zaGlmdCgyKTowfTtyZXR1cm4gYS5U''@;'; put 'put ''eXBlP2Z1bmN0aW9uIEpoKGUsdCxyKXt2YXIgYT1yfHx7fTtyZXR1cm4gYS5JbmZvPWUucmVhZF9zaGlmdCgyKSxlLmwtPTIsYS5EYXRhPTE9PT1hLkluZm8/ZnVuY3Rpb24gJGgoZSl7dmFyIHQ9e30scj10LkVuY3J5cHRpb25WZXJzaW9uSW5mbz1kdChlLDQpO2lmKDEhPXIuTWFqb3J8fDEh''@;'; put 'put ''PXIuTWlub3IpdGhyb3cidW5yZWNvZ25pemVkIHZlcnNpb24gY29kZSAiK3IuTWFqb3IrIiA6ICIrci5NaW5vcjtyZXR1cm4gdC5TYWx0PWUucmVhZF9zaGlmdCgxNiksdC5FbmNyeXB0ZWRWZXJpZmllcj1lLnJlYWRfc2hpZnQoMTYpLHQuRW5jcnlwdGVkVmVyaWZpZXJIYXNoPWUucmVhZF9z''@;'; put 'put ''aGlmdCgxNiksdH0oZSk6ZnVuY3Rpb24gemgoZSx0KXt2YXIgcj17fSxhPXIuRW5jcnlwdGlvblZlcnNpb25JbmZvPWR0KGUsNCk7aWYodC09NCwyIT1hLk1pbm9yKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1pbm9yIHZlcnNpb24gY29kZTogIithLk1pbm9yKTtpZihhLk1ham9y''@;'; put 'put ''PjR8fGEuTWFqb3I8Mil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtYWpvciB2ZXJzaW9uIGNvZGU6ICIrYS5NYWpvcik7ci5GbGFncz1lLnJlYWRfc2hpZnQoNCksdC09NDt2YXIgbj1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHQtPTQsci5FbmNyeXB0aW9uSGVhZGVyPXNmKGUsbiks''@;'; put 'put ''ci5FbmNyeXB0aW9uVmVyaWZpZXI9ZmYoZSx0LT1uKSxyfShlLHQpLGF9KGUsdC0yLGEpOmZ1bmN0aW9uIFloKGUsdCxyLGEpe3ZhciBuPXtrZXk6dHIoZSksdmVyaWZpY2F0aW9uQnl0ZXM6dHIoZSl9O3IucGFzc3dvcmQmJihuLnZlcmlmaWVyPWZ1bmN0aW9uIEZuKGUpe3ZhciByLGksdD0w''@;'; put 'put ''LGE9bmYoZSksbj1hLmxlbmd0aCsxO2Zvcigocj1fdChuKSlbMF09YS5sZW5ndGgsaT0xO2khPW47KytpKXJbaV09YVtpLTFdO2ZvcihpPW4tMTtpPj0wOy0taSl0PSgoMTYzODQmdD8xOjApfHQ8PDEmMzI3NjcpXnJbaV07cmV0dXJuIDUyODExXnR9KHIucGFzc3dvcmQpKSxhLnZhbGlkPW4u''@;'; put 'put ''dmVyaWZpY2F0aW9uQnl0ZXM9PT1uLnZlcmlmaWVyLGEudmFsaWQmJihhLmluc2l0dT1mdW5jdGlvbihlKXt2YXIgdD0wLHI9Y2YoZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBuPWZ1bmN0aW9uKGUsdCxyLGEsbil7dmFyIGkscztmb3Iobnx8KG49dCksYXx8KGE9Y2YoIiIpKSxpPTA7aSE9''@;'; put 'put ''dC5sZW5ndGg7KytpKXM9dFtpXSxuW2ldPXM9MjU1Jigoc149YVtyXSk+PjV8czw8MyksKytyO3JldHVybltuLHIsYV19KDAsYSx0LHIpO3JldHVybiB0PW5bMV0sblswXX19KHIucGFzc3dvcmQpKX0oZSwwLHIsYSksYX19LDQ5OntmOmZ1bmN0aW9uIGh1KGUsdCxyKXt2YXIgYT17ZHlIZWln''@;'; put 'put ''aHQ6ZS5yZWFkX3NoaWZ0KDIpLGZsOmUucmVhZF9zaGlmdCgyKX07c3dpdGNoKHImJnIuYmlmZnx8OCl7Y2FzZSAyOmJyZWFrO2Nhc2UgMzpjYXNlIDQ6ZS5sKz0yO2JyZWFrO2RlZmF1bHQ6ZS5sKz0xMH1yZXR1cm4gYS5uYW1lPVJhKGUsMCxyKSxhfX0sNTE6e2Y6dHJ9LDYwOnt9LDYxOntm''@;'; put 'put ''OmZ1bmN0aW9uIGZ1KGUpe3JldHVybntQb3M6W2UucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQoMildLERpbTpbZS5yZWFkX3NoaWZ0KDIpLGUucmVhZF9zaGlmdCgyKV0sRmxhZ3M6ZS5yZWFkX3NoaWZ0KDIpLEN1clRhYjplLnJlYWRfc2hpZnQoMiksRmlyc3RUYWI6ZS5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLFNlbGVjdGVkOmUucmVhZF9zaGlmdCgyKSxUYWJSYXRpbzplLnJlYWRfc2hpZnQoMil9fX0sNjQ6e2Y6SmV9LDY1OntmOmZ1bmN0aW9uIHV1KCl7fX0sNjY6e2Y6dHJ9LDc3Ont9LDgwOnt9LDgxOnt9LDgyOnt9LDg1OntmOnRyfSw4OTp7fSw5MDp7fSw5MTp7fSw5Mjp7ZjpmdW5jdGlv''@;'; put 'put ''biBKbChlLHQscil7aWYoci5lbmMpcmV0dXJuIGUubCs9dCwiIjt2YXIgYT1lLmwsbj16dChlLDAscik7cmV0dXJuIGUucmVhZF9zaGlmdCh0K2EtZS5sKSxufX0sOTM6e2Y6ZnVuY3Rpb24gVnUoZSx0LHIpe2lmKHImJnIuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBHdShlLHQscil7ZS5sKz00''@;'; put 'put ''O3ZhciBhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgyKTtlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTY7dmFyIHM9W107cmV0dXJuIHMucHVzaCgoWHVbYV18fHByKShl''@;'; put 'put ''LHQtPTM2LHIpKSx7Y21vOltuLGEsaV0sZnQ6c319KGUsdCxyKTt2YXIgYT1YcyhlKSxuPWZ1bmN0aW9uIEtsKGUsdCl7Zm9yKHZhciByPWUubCt0LGE9W107ZS5sPHI7KXt2YXIgbj1lLnJlYWRfc2hpZnQoMik7ZS5sLT0yO3RyeXthLnB1c2goamxbbl0oZSxyLWUubCkpfWNhdGNoe3JldHVy''@;'; put 'put ''biBlLmw9cixhfX1yZXR1cm4gZS5sIT1yJiYoZS5sPXIpLGF9KGUsdC0yMik7cmV0dXJue2NtbzphLGZ0Om59fX0sOTQ6e30sOTU6e2Y6SmV9LDk2Ont9LDk3Ont9LDk5OntmOkplfSwxMjU6e2Y6UXN9LDEyODp7ZjpmdW5jdGlvbiBBdShlKXtlLmwrPTQ7dmFyIHQ9W2UucmVhZF9zaGlmdCgy''@;'; put 'put ''KSxlLnJlYWRfc2hpZnQoMildO2lmKDAhPT10WzBdJiZ0WzBdLS0sMCE9PXRbMV0mJnRbMV0tLSx0WzBdPjd8fHRbMV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK3Quam9pbigifCIpKTtyZXR1cm4gdH19LDEyOTp7ZjpmdW5jdGlvbiBabChlLHQscil7dmFyIGE9ciYmOD09''@;'; put 'put ''ci5iaWZmfHwyPT10P2UucmVhZF9zaGlmdCgyKTooZS5sKz10LDApO3JldHVybntmRGlhbG9nOjE2JmEsZkJlbG93OjY0JmEsZlJpZ2h0OjEyOCZhfX19LDEzMDp7Zjp0cn0sMTMxOntmOkplfSwxMzI6e2Y6SmV9LDEzMzp7ZjpmdW5jdGlvbiBRbChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLG49MyZlLnJlYWRfc2hpZnQoMSksaT1lLnJlYWRfc2hpZnQoMSk7c3dpdGNoKGkpe2Nhc2UgMDppPSJXb3Jrc2hlZXQiO2JyZWFrO2Nhc2UgMTppPSJNYWNyb3NoZWV0IjticmVhaztjYXNlIDI6aT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2Omk9IlZCQU1vZHVsZSJ9dmFyIHM9UmEo''@;'; put 'put ''ZSwwLHIpO3JldHVybiAwPT09cy5sZW5ndGgmJihzPSJTaGVldDEiKSx7cG9zOmEsaHM6bixkdDppLG5hbWU6c319fSwxMzQ6e30sMTQwOntmOmZ1bmN0aW9uIEp1KGUpe3ZhciByLHQ9WzAsMF07cmV0dXJuIHI9ZS5yZWFkX3NoaWZ0KDIpLHRbMF09eHNbcl18fHIscj1lLnJlYWRfc2hpZnQo''@;'; put 'put ''MiksdFsxXT14c1tyXXx8cix0fX0sMTQxOntmOnRyfSwxNDQ6e30sMTQ2OntmOmZ1bmN0aW9uIFF1KGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1bXTt0LS0gPjA7KXIucHVzaChVcyhlKSk7cmV0dXJuIHJ9fSwxNTE6e30sMTUyOnt9LDE1Mzp7fSwxNTQ6e30sMTU1Ont9LDE1Njp7''@;'; put 'put ''Zjp0cn0sMTU3Ont9LDE1ODp7fSwxNjA6e2Y6c2h9LDE2MTp7ZjpmdW5jdGlvbiB0aChlLHQpe3ZhciByPXt9O3JldHVybiB0PDMyfHwoZS5sKz0xNixyLmhlYWRlcj1ncihlKSxyLmZvb3Rlcj1ncihlKSxlLmwrPTIpLHJ9fSwxNzQ6e30sMTc1Ont9LDE3Njp7fSwxNzc6e30sMTc4Ont9LDE4''@;'; put 'put ''MDp7fSwxODE6e30sMTgyOnt9LDE4NDp7fSwxODU6e30sMTg5OntmOmZ1bmN0aW9uIFR1KGUsdCl7Zm9yKHZhciByPWUubCt0LTIsYT1lLnJlYWRfc2hpZnQoMiksbj1lLnJlYWRfc2hpZnQoMiksaT1bXTtlLmw8cjspaS5wdXNoKFdzKGUpKTtpZihlLmwhPT1yKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''TXVsUksgcmVhZCBlcnJvciIpO3ZhciBzPWUucmVhZF9zaGlmdCgyKTtpZihpLmxlbmd0aCE9cy1uKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjphLGM6bixDOnMscmtyZWM6aX19fSwxOTA6e2Y6ZnVuY3Rpb24gU3UoZSx0KXtmb3IodmFyIHI9''@;'; put 'put ''ZS5sK3QtMixhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKSxpPVtdO2UubDxyOylpLnB1c2goZS5yZWFkX3NoaWZ0KDIpKTtpZihlLmwhPT1yKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgcmVhZCBlcnJvciIpO3ZhciBzPWUucmVhZF9zaGlmdCgyKTtpZihpLmxlbmd0aCE9''@;'; put 'put ''cy1uKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjphLGM6bixDOnMsaXhmZTppfX19LDE5Mzp7Zjp5dH0sMTk3Ont9LDE5ODp7fSwxOTk6e30sMjAwOnt9LDIwMTp7fSwyMDI6e2Y6SmV9LDIwMzp7fSwyMDQ6e30sMjA1Ont9LDIwNjp7fSwy''@;'; put 'put ''MDc6e30sMjA4Ont9LDIwOTp7fSwyMTA6e30sMjExOnt9LDIxMzp7fSwyMTU6e30sMjE2Ont9LDIxNzp7fSwyMTg6e2Y6dHJ9LDIyMDp7fSwyMjE6e2Y6SmV9LDIyMjp7fSwyMjQ6e2Y6ZnVuY3Rpb24geXUoZSx0LHIpe3ZhciBhPXt9O3JldHVybiBhLmlmbnQ9ZS5yZWFkX3NoaWZ0KDIpLGEu''@;'; put 'put ''bnVtRm10SWQ9ZS5yZWFkX3NoaWZ0KDIpLGEuZmxhZ3M9ZS5yZWFkX3NoaWZ0KDIpLGEuZlN0eWxlPWEuZmxhZ3M+PjImMSxhLmRhdGE9ZnVuY3Rpb24gRnUoZSx0LHIsYSl7dmFyIG49e30saT1lLnJlYWRfc2hpZnQoNCkscz1lLnJlYWRfc2hpZnQoNCksZj1lLnJlYWRfc2hpZnQoNCksYz1l''@;'; put 'put ''LnJlYWRfc2hpZnQoMik7cmV0dXJuIG4ucGF0dGVyblR5cGU9bmxbZj4+MjZdLGEuY2VsbFN0eWxlcyYmKG4uYWxjPTcmaSxuLmZXcmFwPWk+PjMmMSxuLmFsY1Y9aT4+NCY3LG4uZkp1c3RMYXN0PWk+PjcmMSxuLnRyb3Q9aT4+OCYyNTUsbi5jSW5kZW50PWk+PjE2JjE1LG4uZlNocmlua1Rv''@;'; put 'put ''Rml0PWk+PjIwJjEsbi5pUmVhZE9yZGVyPWk+PjIyJjIsbi5mQXRyTnVtPWk+PjI2JjEsbi5mQXRyRm50PWk+PjI3JjEsbi5mQXRyQWxjPWk+PjI4JjEsbi5mQXRyQmRyPWk+PjI5JjEsbi5mQXRyUGF0PWk+PjMwJjEsbi5mQXRyUHJvdD1pPj4zMSYxLG4uZGdMZWZ0PTE1JnMsbi5kZ1JpZ2h0''@;'; put 'put ''PXM+PjQmMTUsbi5kZ1RvcD1zPj44JjE1LG4uZGdCb3R0b209cz4+MTImMTUsbi5pY3ZMZWZ0PXM+PjE2JjEyNyxuLmljdlJpZ2h0PXM+PjIzJjEyNyxuLmdyYml0RGlhZz1zPj4zMCYzLG4uaWN2VG9wPTEyNyZmLG4uaWN2Qm90dG9tPWY+PjcmMTI3LG4uaWN2RGlhZz1mPj4xNCYxMjcsbi5k''@;'; put 'put ''Z0RpYWc9Zj4+MjEmMTUsbi5pY3ZGb3JlPTEyNyZjLG4uaWN2QmFjaz1jPj43JjEyNyxuLmZzeEJ1dHRvbj1jPj4xNCYxKSxufShlLDAsMCxyKSxhfX0sMjI1OntmOmZ1bmN0aW9uIFlsKGUsdCl7cmV0dXJuIDA9PT10fHxlLnJlYWRfc2hpZnQoMiksMTIwMH19LDIyNjp7Zjp5dH0sMjI3Ont9''@;'; put 'put ''LDIyOTp7ZjpmdW5jdGlvbiBXdShlLHQpe2Zvcih2YXIgcj1bXSxhPWUucmVhZF9zaGlmdCgyKTthLS07KXIucHVzaChrMChlKSk7cmV0dXJuIHJ9fSwyMzM6e30sMjM1Ont9LDIzNjp7fSwyMzc6e30sMjM5Ont9LDI0MDp7fSwyNDE6e30sMjQyOnt9LDI0NDp7fSwyNDU6e30sMjQ2Ont9LDI0''@;'; put 'put ''Nzp7fSwyNDg6e30sMjQ5Ont9LDI1MTp7fSwyNTI6e2Y6ZnVuY3Rpb24gcnUoZSx0KXtmb3IodmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoNCksbj1lLnJlYWRfc2hpZnQoNCksaT1bXSxzPTA7cyE9biYmZS5sPHI7KytzKWkucHVzaChSbChlKSk7cmV0dXJuIGkuQ291bnQ9YSxpLlVuaXF1''@;'; put 'put ''ZT1uLGl9fSwyNTM6e2Y6ZnVuY3Rpb24gZHUoZSl7dmFyIHQ9bnQoZSk7cmV0dXJuIHQuaXNzdD1lLnJlYWRfc2hpZnQoNCksdH19LDI1NTp7ZjpmdW5jdGlvbiBhdShlLHQpe3ZhciByPXt9O3JldHVybiByLmRzc3Q9ZS5yZWFkX3NoaWZ0KDIpLGUubCs9dC0yLHJ9fSwyNTY6e30sMjU5Ont9''@;'; put 'put ''LDI5MDp7fSwzMTE6e30sMzEyOnt9LDMxNTp7fSwzMTc6e2Y6YnN9LDMxODp7fSwzMTk6e30sMzIwOnt9LDMzMDp7fSwzMzE6e30sMzMzOnt9LDMzNDp7fSwzMzU6e30sMzM2Ont9LDMzNzp7fSwzMzg6e30sMzM5Ont9LDM0MDp7fSwzNTE6e30sMzUyOntmOkplfSwzNTM6e2Y6eXR9LDQwMTp7''@;'; put 'put ''fSw0MDI6e30sNDAzOnt9LDQwNDp7fSw0MDU6e30sNDA2Ont9LDQwNzp7fSw0MDg6e30sNDI1Ont9LDQyNjp7fSw0Mjc6e30sNDI4Ont9LDQyOTp7fSw0MzA6e2Y6ZnVuY3Rpb24gUnUoZSx0LHIpe3ZhciBhPWUubCt0LG49ZS5yZWFkX3NoaWZ0KDIpLGk9ZS5yZWFkX3NoaWZ0KDIpO2lmKHIu''@;'; put 'put ''c2JjY2g9aSwxMDI1PT1pfHwxNDg0OT09aSlyZXR1cm5baSxuXTtpZihpPDF8fGk+MjU1KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTdXBCb29rIHR5cGU6ICIraSk7Zm9yKHZhciBzPUd0KGUsaSksZj1bXTthPmUubDspZi5wdXNoKE5hKGUpKTtyZXR1cm5baSxuLHMsZl19fSw0MzE6''@;'; put 'put ''e2Y6SmV9LDQzMjp7fSw0MzM6e30sNDM0Ont9LDQzNzp7fSw0Mzg6e2Y6ZnVuY3Rpb24genUoZSx0LHIpe3ZhciBhPWUubCxuPSIiO3RyeXtlLmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoci5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT9lLmwrPTY6ZnVuY3Rpb24g''@;'; put 'put ''YmwoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDEpO2UubCsrO3ZhciByPWUucmVhZF9zaGlmdCgyKTtlLmwrPTJ9KGUpO3ZhciBmPWUucmVhZF9zaGlmdCgyKTtlLnJlYWRfc2hpZnQoMiksdHIoZSk7dmFyIGM9ZS5yZWFkX3NoaWZ0KDIpO2UubCs9Yztmb3IodmFyIG89MTtvPGUubGVucy5sZW5n''@;'; put 'put ''dGgtMTsrK28pe2lmKGUubC1hIT1lLmxlbnNbb10pdGhyb3cgbmV3IEVycm9yKCJUeE86IGJhZCBjb250aW51ZSByZWNvcmQiKTt2YXIgbD1lW2UubF07aWYoKG4rPUd0KGUsZS5sZW5zW28rMV0tZS5sZW5zW29dLTEpKS5sZW5ndGg+PShsP2Y6MipmKSlicmVha31pZihuLmxlbmd0aCE9PWYm''@;'; put 'put ''Jm4ubGVuZ3RoIT09MipmKXRocm93IG5ldyBFcnJvcigiY2NoVGV4dDogIitmKyIgIT0gIituLmxlbmd0aCk7cmV0dXJuIGUubD1hK3Qse3Q6bn19Y2F0Y2h7cmV0dXJuIGUubD1hK3Qse3Q6bn19fX0sNDM5OntmOkplfSw0NDA6e2Y6ZnVuY3Rpb24gJHUoZSx0KXt2YXIgcj1rMChlKTtlLmwr''@;'; put 'put ''PTE2O3ZhciBhPWZ1bmN0aW9uIE1sKGUsdCl7dmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoNCk7aWYoMiE9PWEpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc3RyZWFtVmVyc2lvbjogIithKTt2YXIgbj1lLnJlYWRfc2hpZnQoMik7ZS5sKz0yO3ZhciBpLHMsZixjLGwsaCxvPSIi''@;'; put 'put ''OzE2Jm4mJihpPXcwKGUpKSwxMjgmbiYmKHM9dzAoZSkpLCEoMjU3Jn5uKSYmKGY9dzAoZSkpLDE9PSgyNTcmbikmJihjPWZ1bmN0aW9uIEJsKGUsdCl7dmFyIHI9ZS5yZWFkX3NoaWZ0KDE2KTtzd2l0Y2gocil7Y2FzZSJlMGM5ZWE3OWY5YmFjZTExOGM4MjAwYWEwMDRiYTkwYiI6cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIFBsKGUpe3ZhciB0PWUucmVhZF9zaGlmdCg0KSxyPWUubCxhPSExO3Q+MjQmJihlLmwrPXQtMjQsIjc5NTg4MWY0M2IxZDdmNDhhZjJjODI1ZGM0ODUyNzYzIj09PWUucmVhZF9zaGlmdCgxNikmJihhPSEwKSxlLmw9cik7dmFyIG49ZS5yZWFkX3NoaWZ0KChhP3QtMjQ6dCk+''@;'; put 'put ''PjEsInV0ZjE2bGUiKS5yZXBsYWNlKGRyLCIiKTtyZXR1cm4gYSYmKGUubCs9MjQpLG59KGUpO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBMbChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9IiI7dC0tID4wOylyKz0iLi4vIjt2''@;'; put 'put ''YXIgYT1lLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lmKGUubCs9Miw1NzAwNSE9ZS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PWUucmVhZF9zaGlmdCg0KSlyZXR1cm4gcithLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgaT1lLnJl''@;'; put 'put ''YWRfc2hpZnQoNCk7aWYoMyE9ZS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7cmV0dXJuIHIrZS5yZWFkX3NoaWZ0KGk+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKGRyLCIiKX0oZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1v''@;'; put 'put ''bmlrZXIgIityKX19KGUpKSw4Jm4mJihvPXcwKGUpKSwzMiZuJiYobD1lLnJlYWRfc2hpZnQoMTYpKSw2NCZuJiYoaD13bihlKSksZS5sPXI7dmFyIHg9c3x8Znx8Y3x8IiI7eCYmbyYmKHgrPSIjIitvKSx4fHwoeD0iIyIrbyksMiZuJiYiLyI9PXguY2hhckF0KDApJiYiLyIhPXguY2hhckF0''@;'; put 'put ''KDEpJiYoeD0iZmlsZTovLyIreCk7dmFyIGQ9e1RhcmdldDp4fTtyZXR1cm4gbCYmKGQuZ3VpZD1sKSxoJiYoZC50aW1lPWgpLGkmJihkLlRvb2x0aXA9aSksZH0oZSx0LTI0KTtyZXR1cm5bcixhXX19LDQ0MTp7fSw0NDI6e2Y6TmF9LDQ0Mzp7fSw0NDQ6e2Y6dHJ9LDQ0NTp7fSw0NDY6e30s''@;'; put 'put ''NDQ4OntmOnl0fSw0NDk6e2Y6ZnVuY3Rpb24gc3UoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQoNCl9LHI6Mn0sNDUwOntmOnl0fSw1MTI6e2Y6enN9LDUxMzp7ZjppaH0sNTE1OntmOmZ1bmN0aW9uIE91KGUsdCxyKXtyLmJpZmZndWVzcyYmMj09ci5iaWZmJiYoci5i''@;'; put 'put ''aWZmPTUpO3ZhciBhPW50KGUpLG49Z3IoZSk7cmV0dXJuIGEudmFsPW4sYX19LDUxNjp7ZjpmdW5jdGlvbiBwdShlLHQscil7ci5iaWZmZ3Vlc3MmJjI9PXIuYmlmZiYmKHIuYmlmZj01KTt2YXIgbj1udChlKTsyPT1yLmJpZmYmJmUubCsrO3ZhciBpPU5hKGUsMCxyKTtyZXR1cm4gbi52YWw9''@;'; put 'put ''aSxufX0sNTE3OntmOmpzfSw1MTk6e2Y6Zmh9LDUyMDp7ZjpmdW5jdGlvbiBudShlKXt2YXIgdD17fTt0LnI9ZS5yZWFkX3NoaWZ0KDIpLHQuYz1lLnJlYWRfc2hpZnQoMiksdC5jbnQ9ZS5yZWFkX3NoaWZ0KDIpLXQuYzt2YXIgcj1lLnJlYWRfc2hpZnQoMik7ZS5sKz00O3ZhciBhPWUucmVh''@;'; put 'put ''ZF9zaGlmdCgxKTtyZXR1cm4gZS5sKz0zLDcmYSYmKHQubGV2ZWw9NyZhKSwzMiZhJiYodC5oaWRkZW49ITApLDY0JmEmJih0LmhwdD1yLzIwKSx0fX0sNTIzOnt9LDU0NTp7Zjpac30sNTQ5OntmOkdzfSw1NjY6e30sNTc0OntmOmZ1bmN0aW9uIG91KGUsdCxyKXtyZXR1cm4gciYmci5iaWZm''@;'; put 'put ''Pj0yJiZyLmJpZmY8NT97fTp7UlRMOjY0JmUucmVhZF9zaGlmdCgyKX19fSw2Mzg6e2Y6ZnVuY3Rpb24gRXUoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9V3MoZSk7cmV0dXJue3I6dCxjOnIsaXhmZTphWzBdLHJrbnVtOmFbMV19fX0sNjU5Ont9LDEwNDg6''@;'; put 'put ''e30sMTA1NDp7ZjpmdW5jdGlvbiBndShlLHQscil7cmV0dXJuW2UucmVhZF9zaGlmdCgyKSx6dChlLDAscildfX0sMTA4NDp7fSwxMjEyOntmOmZ1bmN0aW9uIEx1KGUsdCxyKXt2YXIgYT1WcyhlKTtlLmwrKzt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuW1lkKGUsdC09OCxyKSxuLGFd''@;'; put 'put ''fX0sMjA0ODp7ZjpmdW5jdGlvbiBLdShlLHQpe2UucmVhZF9zaGlmdCgyKTt2YXIgcj1rMChlKSxhPWUucmVhZF9zaGlmdCgodC0xMCkvMiwiZGJjcy1jb250Iik7cmV0dXJuW3IsYT1hLnJlcGxhY2UoZHIsIiIpXX19LDIwNDk6e30sMjA1MDp7fSwyMDUxOnt9LDIwNTI6e30sMjA1Mzp7fSwy''@;'; put 'put ''MDU0Ont9LDIwNTU6e30sMjA1Njp7fSwyMDU3OntmOkUwfSwyMDU4Ont9LDIwNTk6e30sMjA2MDp7fSwyMDYxOnt9LDIwNjI6e30sMjA2Mzp7fSwyMDY0Ont9LDIwNjY6e30sMjA2Nzp7fSwyMTI4Ont9LDIxMjk6e30sMjEzMDp7fSwyMTMxOnt9LDIxMzI6e30sMjEzMzp7fSwyMTM0Ont9LDIx''@;'; put 'put ''MzU6e30sMjEzNjp7fSwyMTM3Ont9LDIxMzg6e30sMjE0Njp7fSwyMTQ3OntyOjEyfSwyMTQ4Ont9LDIxNDk6e30sMjE1MDp7fSwyMTUxOntmOnl0fSwyMTUyOnt9LDIxNTQ6e30sMjE1NTp7fSwyMTU2Ont9LDIxNjE6e30sMjE2Mjp7fSwyMTY0Ont9LDIxNjU6e30sMjE2Njp7fSwyMTY3Ont9''@;'; put 'put ''LDIxNjg6e30sMjE2OTp7fSwyMTcwOnt9LDIxNzE6e30sMjE3Mjp7ZjpmdW5jdGlvbiBlaChlKXtlLmwrPTI7dmFyIHQ9e2N4ZnM6MCxjcmM6MH07cmV0dXJuIHQuY3hmcz1lLnJlYWRfc2hpZnQoMiksdC5jcmM9ZS5yZWFkX3NoaWZ0KDQpLHR9LHI6MTJ9LDIxNzM6e2Y6ZnVuY3Rpb24gSjEo''@;'; put 'put ''ZSx0KXtlLmwrPTI7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpO2UubCs9Mjtmb3IodmFyIG49ZS5yZWFkX3NoaWZ0KDIpLGk9W107bi0tID4wOylpLnB1c2goWTEoZSkpO3JldHVybntpeGZlOmEsZXh0Oml9fSxyOjEyfSwyMTc0Ont9LDIxNzU6e30sMjE4MDp7fSwyMTgxOnt9LDIxODI6e30sMjE4''@;'; put 'put ''Mzp7fSwyMTg0Ont9LDIxODU6e30sMjE4Njp7fSwyMTg3Ont9LDIxODg6e2Y6SmUscjoxMn0sMjE4OTp7fSwyMTkwOntyOjEyfSwyMTkxOnt9LDIxOTI6e30sMjE5NDp7fSwyMTk1Ont9LDIxOTY6e2Y6ZnVuY3Rpb24gUHUoZSx0LHIpe2lmKCEoci5iaWZmPDgpKXt2YXIgYT1lLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiksbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuW0d0KGUsYSxyKSxHdChlLG4scildfWUubCs9dH0scjoxMn0sMjE5Nzp7fSwyMTk4OntmOmZ1bmN0aW9uIEcxKGUsdCxyKXt2YXIgYT1lLmwrdDtpZigxMjQyMjYhPT1lLnJlYWRfc2hpZnQoNCkpe2lmKCFyLmNlbGxTdHlsZXMpcmV0dXJu''@;'; put 'put ''IHZvaWQoZS5sPWEpO3ZhciBzLGk9ZS5zbGljZShlLmwpO2UubD1hO3RyeXtzPVJpKGkse3R5cGU6ImFycmF5In0pfWNhdGNoe3JldHVybn12YXIgZj1OcihzLCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYoZilyZXR1cm4gdmYoZixyKX19LHI6MTJ9LDIxOTk6e30sMjIwMDp7fSwy''@;'; put 'put ''MjAxOnt9LDIyMDI6e2Y6ZnVuY3Rpb24gQnUoZSl7cmV0dXJuWzAhPT1lLnJlYWRfc2hpZnQoNCksMCE9PWUucmVhZF9zaGlmdCg0KSxlLnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAzOntmOnl0fSwyMjA0Ont9LDIyMDU6e30sMjIwNjp7fSwyMjA3Ont9LDIyMTE6e2Y6ZnVuY3Rpb24gaXUo''@;'; put 'put ''ZSl7dmFyIHQ9ZnVuY3Rpb24gV2woZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTgse3R5cGU6dCxmbGFnczpyfX0oZSk7aWYoMjIxMSE9dC50eXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIrdC50eXBlKTty''@;'; put 'put ''ZXR1cm4gMCE9PWUucmVhZF9zaGlmdCg0KX19LDIyMTI6e30sMjIxMzp7fSwyMjE0Ont9LDIyMTU6e30sNDA5Nzp7fSw0MDk4Ont9LDQwOTk6e30sNDEwMjp7fSw0MTAzOnt9LDQxMDU6e30sNDEwNjp7fSw0MTA3Ont9LDQxMDg6e30sNDEwOTp7fSw0MTE2Ont9LDQxMTc6e30sNDExODp7fSw0''@;'; put 'put ''MTE5Ont9LDQxMjA6e30sNDEyMTp7fSw0MTIyOnt9LDQxMjM6e30sNDEyNDp7fSw0MTI1Ont9LDQxMjY6e30sNDEyNzp7fSw0MTI4Ont9LDQxMjk6e30sNDEzMDp7fSw0MTMyOnt9LDQxMzM6e30sNDEzNDp7Zjp0cn0sNDEzNTp7fSw0MTQ2Ont9LDQxNDc6e30sNDE0ODp7fSw0MTQ5Ont9LDQx''@;'; put 'put ''NTQ6e30sNDE1Njp7fSw0MTU3Ont9LDQxNTg6e30sNDE1OTp7fSw0MTYwOnt9LDQxNjE6e30sNDE2Mzp7fSw0MTY0OntmOmZ1bmN0aW9uIGFoKGUsdCxyKXt2YXIgYT17YXJlYTohMX07aWYoNSE9ci5iaWZmKXJldHVybiBlLmwrPXQsYTt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUu''@;'; put 'put ''bCs9MywxNiZuJiYoYS5hcmVhPSEwKSxhfX0sNDE2NTp7fSw0MTY2Ont9LDQxNjg6e30sNDE3MDp7fSw0MTcxOnt9LDQxNzQ6e30sNDE3NTp7fSw0MTc2Ont9LDQxNzc6e30sNDE4Nzp7fSw0MTg4OntmOmZ1bmN0aW9uIFp1KGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1bXTt0LS0g''@;'; put 'put ''PjA7KXIucHVzaChVcyhlKSk7cmV0dXJuIHJ9fSw0MTg5Ont9LDQxOTE6e30sNDE5Mjp7fSw0MTkzOnt9LDQxOTQ6e30sNDE5NTp7fSw0MTk2Ont9LDQxOTc6e30sNDE5ODp7fSw0MTk5Ont9LDQyMDA6e30sMDp7Zjp6c30sMTp7fSwyOntmOmZ1bmN0aW9uIGhoKGUpe3ZhciB0PW50KGUpOysr''@;'; put 'put ''ZS5sO3ZhciByPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gdC50PSJuIix0LnZhbD1yLHR9fSwzOntmOmZ1bmN0aW9uIGxoKGUpe3ZhciB0PW50KGUpOysrZS5sO3ZhciByPWdyKGUpO3JldHVybiB0LnQ9Im4iLHQudmFsPXIsdH19LDQ6e2Y6ZnVuY3Rpb24gb2goZSx0LHIpe3IuYmlmZmd1ZXNz''@;'; put 'put ''JiY1PT1yLmJpZmYmJihyLmJpZmY9Mik7dmFyIGE9bnQoZSk7KytlLmw7dmFyIG49enQoZSwwLHIpO3JldHVybiBhLnQ9InN0ciIsYS52YWw9bixhfX0sNTp7Zjpqc30sNzp7ZjpmdW5jdGlvbiBkaChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT10PyhlLmwrKywiIik6ZS5y''@;'; put 'put ''ZWFkX3NoaWZ0KHQsInNiY3MtY29udCIpfX0sODp7fSw5OntmOkUwfSwxMTp7fSwyMjp7Zjp0cn0sMzA6e2Y6d3V9LDMxOnt9LDMyOnt9LDMzOntmOlpzfSwzNjp7fSwzNzp7ZjpHc30sNTA6e2Y6ZnVuY3Rpb24gdmgoZSx0KXtlLmwrPTYsZS5sKz0yLGUubCs9MSxlLmwrPTMsZS5sKz0xLGUu''@;'; put 'put ''bCs9dC0xM319LDYyOnt9LDUyOnt9LDY3Ont9LDY4OntmOnRyfSw2OTp7fSw4Njp7fSwxMjY6e30sMTI3OntmOmZ1bmN0aW9uIGNoKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgyKSxhPWUucmVhZF9zaGlmdCg0KSxuPXtmbXQ6dCxlbnY6cixsZW46YSxkYXRhOmUu''@;'; put 'put ''c2xpY2UoZS5sLGUubCthKX07cmV0dXJuIGUubCs9YSxufX0sMTM1Ont9LDEzNjp7fSwxMzc6e30sMTQ1Ont9LDE0ODp7fSwxNDk6e30sMTUwOnt9LDE2OTp7fSwxNzE6e30sMTg4Ont9LDE5MTp7fSwxOTI6e30sMTk0Ont9LDE5NTp7fSwyMTQ6e2Y6ZnVuY3Rpb24gcGgoZSx0LHIpe3ZhciBh''@;'; put 'put ''PWUubCt0LG49bnQoZSksaT1lLnJlYWRfc2hpZnQoMikscz1HdChlLGkscik7cmV0dXJuIGUubD1hLG4udD0ic3RyIixuLnZhbD1zLG59fSwyMjM6e30sMjM0Ont9LDM1NDp7fSw0MjE6e30sNTE4OntmOk5ufSw1MjE6e2Y6RTB9LDUzNjp7ZjpKc30sNTQ3OntmOllzfSw1NjE6e30sNTc5Ont9''@;'; put 'put ''LDEwMzA6e2Y6Tm59LDEwMzM6e2Y6RTB9LDEwOTE6e30sMjE1Nzp7fSwyMTYzOnt9LDIxNzc6e30sMjI0MDp7fSwyMjQxOnt9LDIyNDI6e30sMjI0Mzp7fSwyMjQ0Ont9LDIyNDU6e30sMjI0Njp7fSwyMjQ3Ont9LDIyNDg6e30sMjI0OTp7fSwyMjUwOnt9LDIyNTE6e30sMjI2Mjp7cjoxMn0s''@;'; put 'put ''MjkyODI6e319O2Z1bmN0aW9uIGFlKGUsdCxyLGEpe3ZhciBuPXQ7aWYoIWlzTmFOKG4pKXt2YXIgaT1hfHwocnx8W10pLmxlbmd0aHx8MCxzPWUubmV4dCg0KTtzLndyaXRlX3NoaWZ0KDIsbikscy53cml0ZV9zaGlmdCgyLGkpLGk+MCYmcm4ocikmJmUucHVzaChyKX19ZnVuY3Rpb24gSmYo''@;'; put 'put ''ZSx0KXt2YXIgcj10fHx7fTtudWxsIT16ZSYmbnVsbD09ci5kZW5zZSYmKHIuZGVuc2U9emUpO3ZhciBhPXIuZGVuc2U/W106e30sbj0oZT1lLnJlcGxhY2UoLzwhLS0uKj8tLT4vZywiIikpLm1hdGNoKC88dGFibGUvaSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNv''@;'; put 'put ''dWxkIG5vdCBmaW5kIDx0YWJsZT4iKTt2YXIgaT1lLm1hdGNoKC88XC90YWJsZS9pKSxzPW4uaW5kZXgsZj1pJiZpLmluZGV4fHxlLmxlbmd0aCxjPXZvKGUuc2xpY2UocyxmKSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+Iiksbz0tMSxsPTAsaD0wLHg9MCxkPXtzOntyOjFlNyxjOjFlN30sZTp7''@;'; put 'put ''cjowLGM6MH19LHY9W107Zm9yKHM9MDtzPGMubGVuZ3RoOysrcyl7dmFyIHU9Y1tzXS50cmltKCkscD11LnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9cCl7aWYoIjx0ZCI9PXB8fCI8dGgiPT1wKXt2YXIgaz11LnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKGY9MDtmPGsubGVu''@;'; put 'put ''Z3RoOysrZil7dmFyIFQ9a1tmXS50cmltKCk7aWYoVC5tYXRjaCgvPHRbZGhdL2kpKXtmb3IodmFyIGc9VCxOPTA7IjwiPT1nLmNoYXJBdCgwKSYmKE49Zy5pbmRleE9mKCI+IikpPi0xOylnPWcuc2xpY2UoTisxKTtmb3IodmFyIE09MDtNPHYubGVuZ3RoOysrTSl7dmFyIEk9dltNXTtJLnMu''@;'; put 'put ''Yz09bCYmSS5zLnI8byYmbzw9SS5lLnImJihsPUkuZS5jKzEsTT0tMSl9dmFyIHk9bWUoVC5zbGljZSgwLFQuaW5kZXhPZigiPiIpKSk7eD15LmNvbHNwYW4/K3kuY29sc3BhbjoxLCgoaD0reS5yb3dzcGFuKT4xfHx4PjEpJiZ2LnB1c2goe3M6e3I6byxjOmx9LGU6e3I6bysoaHx8MSktMSxj''@;'; put 'put ''OmwreC0xfX0pO3ZhciBQPXkudHx8eVsiZGF0YS10Il18fCIiO2lmKCFnLmxlbmd0aCl7bCs9eDtjb250aW51ZX1pZihnPVdpKGcpLGQucy5yPm8mJihkLnMucj1vKSxkLmUucjxvJiYoZC5lLnI9byksZC5zLmM+bCYmKGQucy5jPWwpLGQuZS5jPGwmJihkLmUuYz1sKSwhZy5sZW5ndGgpe2wr''@;'; put 'put ''PXg7Y29udGludWV9dmFyIFI9e3Q6InMiLHY6Z307ci5yYXd8fCFnLnRyaW0oKS5sZW5ndGh8fCJzIj09UHx8KCJUUlVFIj09PWc/Uj17dDoiYiIsdjohMH06IkZBTFNFIj09PWc/Uj17dDoiYiIsdjohMX06aXNOYU4oSnIoZykpP2lzTmFOKGFhKGcpLmdldERhdGUoKSl8fChSPXt0OiJkIix2''@;'; put 'put ''OlhlKGcpfSxyLmNlbGxEYXRlc3x8KFI9e3Q6Im4iLHY6aXIoUi52KX0pLFIuej1yLmRhdGVORnx8cGVbMTRdKTpSPXt0OiJuIix2OkpyKGcpfSksci5kZW5zZT8oYVtvXXx8KGFbb109W10pLGFbb11bbF09Uik6YVtnZSh7cjpvLGM6bH0pXT1SLGwrPXh9fX19ZWxzZXtpZigrK28sci5zaGVl''@;'; put 'put ''dFJvd3MmJnIuc2hlZXRSb3dzPD1vKXstLW87YnJlYWt9bD0wfX1yZXR1cm4gYVsiIXJlZiJdPXdlKGQpLHYubGVuZ3RoJiYoYVsiIW1lcmdlcyJdPXYpLGF9ZnVuY3Rpb24gUm0oZSl7dmFyIHQ9ZS5yZXBsYWNlKC9bXHRcclxuXS9nLCIgIikudHJpbSgpLnJlcGxhY2UoLyArL2csIiAiKS5y''@;'; put 'put ''ZXBsYWNlKC88dGV4dDpzXC8+L2csIiAiKS5yZXBsYWNlKC88dGV4dDpzIHRleHQ6Yz0iKFxkKykiXC8+L2csZnVuY3Rpb24oYSxuKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQobiwxMCkrMSkuam9pbigiICIpfSkucmVwbGFjZSgvPHRleHQ6dGFiW14+XSpcLz4vZywiXHQiKS5yZXBsYWNlKC88''@;'; put 'put ''dGV4dDpsaW5lLWJyZWFrXC8+L2csIlxuIik7cmV0dXJuW0llKHQucmVwbGFjZSgvPFtePl0qPi9nLCIiKSldfXZhciBpYz17ZGF5OlsiZCIsImRkIl0sbW9udGg6WyJtIiwibW0iXSx5ZWFyOlsieSIsInl5Il0saG91cnM6WyJoIiwiaGgiXSxtaW51dGVzOlsibSIsIm1tIl0sc2Vjb25kczpb''@;'; put 'put ''InMiLCJzcyJdLCJhbS1wbSI6WyJBL1AiLCJBTS9QTSJdLCJkYXktb2Ytd2VlayI6WyJkZGQiLCJkZGRkIl0sZXJhOlsiZSIsImVlIl0scXVhcnRlcjpbIlxcUW0iLCdtXFwidGggcXVhcnRlciInXX07ZnVuY3Rpb24gc2MoZSx0KXt2YXIgcj10fHx7fTtudWxsIT16ZSYmbnVsbD09ci5kZW5z''@;'; put 'put ''ZSYmKHIuZGVuc2U9emUpO3ZhciBpLHMsbCxoLHUscCxhPVkwKGUpLG49W10sZj17bmFtZToiIn0sYz0iIixvPTAseD17fSxkPVtdLHY9ci5kZW5zZT9bXTp7fSxrPXt2YWx1ZToiIn0sVD0iIixnPTAsTT1bXSxJPS0xLHk9LTEsUD17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxSPTAs''@;'; put 'put ''Vj17fSxYPVtdLGI9e30sZWU9MCxsZT0wLHJlPVtdLGRlPTEsdWU9MSxGZT1bXSxjZT17TmFtZXM6W119LHhlPXt9LEs9WyIiLCIiXSxDPVtdLFU9e30sTz0iIixEPTAsaj0hMSxzZT0hMSxaPTA7Zm9yKHlhLmxhc3RJbmRleD0wLGE9YS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwi''@;'; put 'put ''IikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO3U9eWEuZXhlYyhhKTspc3dpdGNoKHVbM109dVszXS5yZXBsYWNlKC9fLiokLywiIikpe2Nhc2UidGFibGUiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjoiLyI9PT11WzFdPyh2WyIhcmVmIl09UC5lLmM+PVAu''@;'; put 'put ''cy5jJiZQLmUucj49UC5zLnI/d2UoUCk6IkExOkExIixyLnNoZWV0Um93cz4wJiZyLnNoZWV0Um93czw9UC5lLnImJih2WyIhZnVsbHJlZiJdPXZbIiFyZWYiXSxQLmUucj1yLnNoZWV0Um93cy0xLHZbIiFyZWYiXT13ZShQKSksWC5sZW5ndGgmJih2WyIhbWVyZ2VzIl09WCkscmUubGVuZ3Ro''@;'; put 'put ''JiYodlsiIXJvd3MiXT1yZSksbC5uYW1lPWwuXHU1NDBkXHU3OWYwfHxsLm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShsKSxkLnB1c2gobC5uYW1lKSx4W2wubmFtZV09dixzZT0hMSk6Ii8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJihsPW1lKHVbMF0sITEp''@;'; put 'put ''LEk9eT0tMSxQLnMucj1QLnMuYz0xZTcsUC5lLnI9UC5lLmM9MCx2PXIuZGVuc2U/W106e30sWD1bXSxyZT1bXSxzZT0hMCk7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ctZ3JvdXAiOiIvIj09PXVbMV0/LS1SOisrUjticmVhaztjYXNlInRhYmxlLXJvdyI6Y2FzZSJcdTg4NGMiOmlmKCIvIj09PXVb''@;'; put 'put ''MV0pe0krPWRlLGRlPTE7YnJlYWt9aWYoKGg9bWUodVswXSwhMSkpLlx1ODg0Y1x1NTNmNz9JPWguXHU4ODRjXHU1M2Y3LTE6LTE9PUkmJihJPTApLChkZT0raFsibnVtYmVyLXJvd3MtcmVwZWF0ZWQiXXx8MSk8MTApZm9yKFo9MDtaPGRlOysrWilSPjAmJihyZVtJK1pdPXtsZXZlbDpSfSk7''@;'; put 'put ''eT0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09dVsxXSYmKyt5LHIuc2hlZXRTdHVicyYmKHIuZGVuc2U/KHZbSV18fCh2W0ldPVtdKSx2W0ldW3ldPXt0OiJ6In0pOnZbZ2Uoe3I6SSxjOnl9KV09e3Q6InoifSksVD0iIixNPVtdO2JyZWFrO2Nhc2UidGFibGUtY2Vs''@;'; put 'put ''bCI6Y2FzZSJcdTY1NzBcdTYzNmUiOmlmKCIvIj09PXVbMF0uY2hhckF0KHVbMF0ubGVuZ3RoLTIpKSsreSxrPW1lKHVbMF0sITEpLHVlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkscD17dDoieiIsdjpudWxsfSxrLmZvcm11bGEmJjAhPXIuY2VsbEZv''@;'; put 'put ''cm11bGEmJihwLmY9TmYoSWUoay5mb3JtdWxhKSkpLCJzdHJpbmciPT0oay5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fGtbInZhbHVlLXR5cGUiXSkmJihwLnQ9InMiLHAudj1JZShrWyJzdHJpbmctdmFsdWUiXXx8IiIpLHIuZGVuc2U/KHZbSV18fCh2W0ldPVtdKSx2W0ldW3ldPXApOnZb''@;'; put 'put ''Z2Uoe3I6SSxjOnl9KV09cCkseSs9dWUtMTtlbHNlIGlmKCIvIiE9PXVbMV0pe1Q9IiIsZz0wLE09W10sdWU9MTt2YXIgUT1kZT9JK2RlLTE6STtpZigrK3k+UC5lLmMmJihQLmUuYz15KSx5PFAucy5jJiYoUC5zLmM9eSksSTxQLnMuciYmKFAucy5yPUkpLFE+UC5lLnImJihQLmUucj1RKSxD''@;'; put 'put ''PVtdLFU9e30scD17dDooaz1tZSh1WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxrWyJ2YWx1ZS10eXBlIl0sdjpudWxsfSxyLmNlbGxGb3JtdWxhKWlmKGsuZm9ybXVsYSYmKGsuZm9ybXVsYT1JZShrLmZvcm11bGEpKSxrWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5l''@;'; put 'put ''ZCJdJiZrWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdJiYoZWU9cGFyc2VJbnQoa1sibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsbGU9cGFyc2VJbnQoa1sibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAscC5GPXdlKGI9e3M6e3I6SSxjOnl9''@;'; put 'put ''LGU6e3I6SStlZS0xLGM6eStsZS0xfX0pLEZlLnB1c2goW2IscC5GXSkpLGsuZm9ybXVsYSlwLmY9TmYoay5mb3JtdWxhKTtlbHNlIGZvcihaPTA7WjxGZS5sZW5ndGg7KytaKUk+PUZlW1pdWzBdLnMuciYmSTw9RmVbWl1bMF0uZS5yJiZ5Pj1GZVtaXVswXS5zLmMmJnk8PUZlW1pdWzBdLmUu''@;'; put 'put ''YyYmKHAuRj1GZVtaXVsxXSk7c3dpdGNoKChrWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl18fGtbIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJihlZT1wYXJzZUludChrWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLGxlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5zLXNwYW5uZWQi''@;'; put 'put ''XSwxMCl8fDAsWC5wdXNoKGI9e3M6e3I6SSxjOnl9LGU6e3I6SStlZS0xLGM6eStsZS0xfX0pKSxrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdJiYodWU9cGFyc2VJbnQoa1sibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLHAudCl7Y2FzZSJib29sZWFuIjpwLnQ9ImIiLHAudj1X''@;'; put 'put ''ZShrWyJib29sZWFuLXZhbHVlIl0pO2JyZWFrO2Nhc2UiZmxvYXQiOmNhc2UicGVyY2VudGFnZSI6Y2FzZSJjdXJyZW5jeSI6cC50PSJuIixwLnY9cGFyc2VGbG9hdChrLnZhbHVlKTticmVhaztjYXNlImRhdGUiOnAudD0iZCIscC52PVhlKGtbImRhdGUtdmFsdWUiXSksci5jZWxsRGF0ZXN8''@;'; put 'put ''fChwLnQ9Im4iLHAudj1pcihwLnYpKSxwLno9Im0vZC95eSI7YnJlYWs7Y2FzZSJ0aW1lIjpwLnQ9Im4iLHAudj11byhrWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLHIuY2VsbERhdGVzJiYocC50PSJkIixwLnY9bzAocC52KSkscC56PSJISDpNTTpTUyI7YnJlYWs7Y2FzZSJudW1iZXIiOnAudD0i''@;'; put 'put ''biIscC52PXBhcnNlRmxvYXQoay5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1bHQ6aWYoInN0cmluZyIhPT1wLnQmJiJ0ZXh0IiE9PXAudCYmcC50KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAiK3AudCk7cC50PSJzIixudWxsIT1rWyJzdHJp''@;'; put 'put ''bmctdmFsdWUiXSYmKFQ9SWUoa1sic3RyaW5nLXZhbHVlIl0pLE09W10pfX1lbHNle2lmKGo9ITEsInMiPT09cC50JiYocC52PVR8fCIiLE0ubGVuZ3RoJiYocC5SPU0pLGo9MD09ZykseGUuVGFyZ2V0JiYocC5sPXhlKSxDLmxlbmd0aD4wJiYocC5jPUMsQz1bXSksVCYmITEhPT1yLmNlbGxU''@;'; put 'put ''ZXh0JiYocC53PVQpLGomJihwLnQ9InoiLGRlbGV0ZSBwLnYpLCghanx8ci5zaGVldFN0dWJzKSYmIShyLnNoZWV0Um93cyYmci5zaGVldFJvd3M8PUkpKWZvcih2YXIgWT0wO1k8ZGU7KytZKXtpZih1ZT1wYXJzZUludChrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLHIu''@;'; put 'put ''ZGVuc2UpZm9yKHZbSStZXXx8KHZbSStZXT1bXSksdltJK1ldW3ldPTA9PVk/cDpNZShwKTstLXVlPjA7KXZbSStZXVt5K3VlXT1NZShwKTtlbHNlIGZvcih2W2dlKHtyOkkrWSxjOnl9KV09cDstLXVlPjA7KXZbZ2Uoe3I6SStZLGM6eSt1ZX0pXT1NZShwKTtQLmUuYzw9eSYmKFAuZS5jPXkp''@;'; put 'put ''fXkrPSh1ZT1wYXJzZUludChrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLHVlPTAscD17fSxUPSIiLE09W119eGU9e307YnJlYWs7Y2FzZSJkb2N1bWVudCI6Y2FzZSJkb2N1bWVudC1jb250ZW50IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzY1x1NjU4N1x1''@;'; put 'put ''Njg2MyI6Y2FzZSJzcHJlYWRzaGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1hc3Rlci1zdHlsZXMiOmlmKCIvIj09PXVbMV0pe2lmKChpPW4ucG9wKCkpWzBdIT09dVszXSl0aHJvdyJCYWQgc3Rh''@;'; put 'put ''dGU6ICIraX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJm4ucHVzaChbdVszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYoIi8iPT09dVsxXSl7aWYoKGk9bi5wb3AoKSlbMF0hPT11WzNdKXRocm93IkJhZCBzdGF0ZTogIitpO1UudD1ULE0ubGVuZ3RoJiYo''@;'; put 'put ''VS5SPU0pLFUuYT1PLEMucHVzaChVKX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJm4ucHVzaChbdVszXSwhMV0pO089IiIsRD0wLFQ9IiIsZz0wLE09W107YnJlYWs7Y2FzZSJjcmVhdG9yIjoiLyI9PT11WzFdP089YS5zbGljZShELHUuaW5kZXgpOkQ9dS5pbmRleCt1''@;'; put 'put ''WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEiOmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWctaXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0t''@;'; put 'put ''bWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2FzZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpjYXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6''@;'; put 'put ''aWYoIi8iPT09dVsxXSl7aWYoKGk9bi5wb3AoKSlbMF0hPT11WzNdKXRocm93IkJhZCBzdGF0ZTogIitpfWVsc2UiLyIhPT11WzBdLmNoYXJBdCh1WzBdLmxlbmd0aC0yKSYmbi5wdXNoKFt1WzNdLCExXSk7VD0iIixnPTAsTT1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNl''@;'; put 'put ''ImN1cnJlbmN5LXN5bWJvbCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdlLWxheW91dCI6Y2FzZSJzdHlsZSI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNl''@;'; put 'put ''IjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4t''@;'; put 'put ''c3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1j''@;'; put 'put ''b2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJvd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRhdGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNl''@;'; put 'put ''ImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2Ui''@;'; put 'put ''bGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNlInMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNlIjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6''@;'; put 'put ''Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZpbHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZp''@;'; put 'put ''bHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Uic2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0''@;'; put 'put ''aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNhc2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55IjpjYXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRl''@;'; put 'put ''ci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHkiOmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRob3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJm''@;'; put 'put ''aWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFtZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2UiZ2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3Rp''@;'; put 'put ''YyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2UiZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNhc2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0''@;'; put 'put ''aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJoaWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmllbGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJk''@;'; put 'put ''YXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJkYXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBp''@;'; put 'put ''bG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2UicmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6''@;'; put 'put ''Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpjYXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3JhbmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNv''@;'; put 'put ''bW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmlmKCIvIj09PXVbMV0pe2lmKFZbZi5uYW1lXT1jLChpPW4ucG9wKCkpWzBdIT09dVszXSl0aHJvdyJCYWQgc3RhdGU6ICIr''@;'; put 'put ''aX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJihjPSIiLGY9bWUodVswXSwhMSksbi5wdXNoKFt1WzNdLCEwXSkpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3''@;'; put 'put ''ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNlY29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaChuW24ubGVuZ3RoLTFdWzBdKXtjYXNlInRpbWUtc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6cz1tZSh1WzBdLCExKSxjKz1pY1t1WzNdXVsi''@;'; put 'put ''bG9uZyI9PT1zLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09dVswXS5zbGljZSgtMikpYnJlYWs7aWYoIi8iPT09dVsxXSlzd2l0Y2gobltuLmxlbmd0aC0xXVswXSl7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjpjKz1h''@;'; put 'put ''LnNsaWNlKG8sdS5pbmRleCl9ZWxzZSBvPXUuaW5kZXgrdVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6Sz1ibigocz1tZSh1WzBdLCExKSlbImNlbGwtcmFuZ2UtYWRkcmVzcyJdKTt2YXIgRWU9e05hbWU6cy5uYW1lLFJlZjpLWzBdKyIhIitLWzFdfTtzZSYmKEVlLlNoZWV0''@;'; put 'put ''PWQubGVuZ3RoKSxjZS5OYW1lcy5wdXNoKEVlKTticmVhaztjYXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKG5bbi5sZW5ndGgtMV1bMF0pPi0xKWJyZWFrO2lmKCIvIiE9PXVbMV18fGsmJmtbInN0cmluZy12YWx1ZSJdKW1lKHVb''@;'; put 'put ''MF0sITEpLGc9dS5pbmRleCt1WzBdLmxlbmd0aDtlbHNle3ZhciBBPVJtKGEuc2xpY2UoZyx1LmluZGV4KSk7VD0oVC5sZW5ndGg+MD9UKyJcbiI6IiIpK0FbMF19YnJlYWs7Y2FzZSJkYXRhYmFzZS1yYW5nZSI6aWYoIi8iPT09dVsxXSlicmVhazt0cnl7eFsoSz1ibihtZSh1WzBdKVsidGFy''@;'; put 'put ''Z2V0LXJhbmdlLWFkZHJlc3MiXSkpWzBdXVsiIWF1dG9maWx0ZXIiXT17cmVmOktbMV19fWNhdGNoe31icmVhaztjYXNlImEiOmlmKCIvIiE9PXVbMV0pe2lmKCEoeGU9bWUodVswXSwhMSkpLmhyZWYpYnJlYWs7eGUuVGFyZ2V0PUllKHhlLmhyZWYpLGRlbGV0ZSB4ZS5ocmVmLCIjIj09eGUu''@;'; put 'put ''VGFyZ2V0LmNoYXJBdCgwKSYmeGUuVGFyZ2V0LmluZGV4T2YoIi4iKT4tMT8oSz1ibih4ZS5UYXJnZXQuc2xpY2UoMSkpLHhlLlRhcmdldD0iIyIrS1swXSsiISIrS1sxXSk6eGUuVGFyZ2V0Lm1hdGNoKC9eXC5cLltcXFwvXS8pJiYoeGUuVGFyZ2V0PXhlLlRhcmdldC5zbGljZSgzKSl9YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDpzd2l0Y2godVsyXSl7Y2FzZSJkYzoiOmNhc2UiY2FsY2V4dDoiOmNhc2UibG9leHQ6IjpjYXNlIm9vbzoiOmNhc2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxlOiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6Ijpj''@;'; put 'put ''YXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6aWYoci5XVEYpdGhyb3cgbmV3IEVycm9yKHUpfX12YXIgUGU9e1NoZWV0czp4LFNoZWV0TmFtZXM6ZCxXb3JrYm9vazpjZX07cmV0dXJuIHIuYm9va1NoZWV0cyYmZGVsZXRlIFBlLlNoZWV0cyxQZX1mdW5jdGlvbiBjYyhlLHQpe3JldHVybiBz''@;'; put 'put ''YyhlLHQpfWZ1bmN0aW9uIEp0KGUpe3JldHVybiBuZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIHR5cGVvZiBUZXh0RGVjb2RlcjwidSI/KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGUpOkJlKHd0KGUpKX1mdW5j''@;'; put 'put ''dGlvbiBEdChlKXt2YXIgdD1lLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuK2kubGVuZ3RofSwwKSxyPW5ldyBVaW50OEFycmF5KHQpLGE9MDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Iuc2V0KG4sYSksYSs9bi5sZW5ndGh9KSxyfWZ1bmN0aW9uIHVjKGUpe3JldHVybiAx''@;'; put 'put ''Njg0MzAwOSooKGU9KDg1ODk5MzQ1OSYoZS09ZT4+MSYxNDMxNjU1NzY1KSkrKGU+PjImODU4OTkzNDU5KSkrKGU+PjQpJjI1MjY0NTEzNSk+Pj4yNH1mdW5jdGlvbiBLYShlLHQpe3ZhciByPXQ/dFswXTowLGE9MTI3JmVbcl07ZTppZihlW3IrK10+PTEyOCYmKGF8PSgxMjcmZVtyXSk8PDcs''@;'; put 'put ''ZVtyKytdPDEyOHx8KGF8PSgxMjcmZVtyXSk8PDE0LGVbcisrXTwxMjgpfHwoYXw9KDEyNyZlW3JdKTw8MjEsZVtyKytdPDEyOCl8fChhKz0oMTI3JmVbcl0pKk1hdGgucG93KDIsMjgpLCsrcixlW3IrK108MTI4KXx8KGErPSgxMjcmZVtyXSkqTWF0aC5wb3coMiwzNSksKytyLGVbcisrXTwx''@;'; put 'put ''MjgpfHwoYSs9KDEyNyZlW3JdKSpNYXRoLnBvdygyLDQyKSwrK3IsZVtyKytdPDEyOCkpKWJyZWFrIGU7cmV0dXJuIHQmJih0WzBdPXIpLGF9ZnVuY3Rpb24gWWUoZSl7dmFyIHQ9MCxyPTEyNyZlW3RdO2U6aWYoZVt0KytdPj0xMjgpe2lmKHJ8PSgxMjcmZVt0XSk8PDcsZVt0KytdPDEyOHx8''@;'; put 'put ''KHJ8PSgxMjcmZVt0XSk8PDE0LGVbdCsrXTwxMjgpfHwocnw9KDEyNyZlW3RdKTw8MjEsZVt0KytdPDEyOCkpYnJlYWsgZTtyfD0oMTI3JmVbdF0pPDwyOH1yZXR1cm4gcn1mdW5jdGlvbiBSZShlKXtmb3IodmFyIHQ9W10scj1bMF07clswXTxlLmxlbmd0aDspe3ZhciBmLGE9clswXSxuPUth''@;'; put 'put ''KGUsciksaT03Jm4scz0wO2lmKDA9PShuPU1hdGguZmxvb3Iobi84KSkpYnJlYWs7c3dpdGNoKGkpe2Nhc2UgMDpmb3IodmFyIGM9clswXTtlW3JbMF0rK10+PTEyODspO2Y9ZS5zbGljZShjLHJbMF0pO2JyZWFrO2Nhc2UgNTpmPWUuc2xpY2UoclswXSxyWzBdKyhzPTQpKSxyWzBdKz1zO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMTpmPWUuc2xpY2UoclswXSxyWzBdKyhzPTgpKSxyWzBdKz1zO2JyZWFrO2Nhc2UgMjpzPUthKGUsciksZj1lLnNsaWNlKHJbMF0sclswXStzKSxyWzBdKz1zO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJQQiBUeXBlICIuY29uY2F0KGksIiBmb3IgRmllbGQgIiku''@;'; put 'put ''Y29uY2F0KG4sIiBhdCBvZmZzZXQgIikuY29uY2F0KGEpKX12YXIgbz17ZGF0YTpmLHR5cGU6aX07bnVsbD09dFtuXT90W25dPVtvXTp0W25dLnB1c2gobyl9cmV0dXJuIHR9ZnVuY3Rpb24gVm4oZSx0KXtyZXR1cm4gZT8ubWFwKGZ1bmN0aW9uKHIpe3JldHVybiB0KHIuZGF0YSl9KXx8W119''@;'; put 'put ''ZnVuY3Rpb24gTW0oZSx0KXtpZigwIT1lKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTbmFwcHkgY2h1bmsgdHlwZSAiLmNvbmNhdChlKSk7Zm9yKHZhciByPVswXSxhPUthKHQsciksbj1bXTtyWzBdPHQubGVuZ3RoOyl7dmFyIGk9MyZ0W3JbMF1dO2lmKDAhPWkpe3ZhciBjPTAsbz0w''@;'; put 'put ''O2lmKDE9PWk/KG89NCsodFtyWzBdXT4+MiY3KSxjPSgyMjQmdFtyWzBdKytdKTw8MyxjfD10W3JbMF0rK10pOihvPTErKHRbclswXSsrXT4+MiksMj09aT8oYz10W3JbMF1dfHRbclswXSsxXTw8OCxyWzBdKz0yKTooYz0odFtyWzBdXXx0W3JbMF0rMV08PDh8dFtyWzBdKzJdPDwxNnx0W3Jb''@;'; put 'put ''MF0rM108PDI0KT4+PjAsclswXSs9NCkpLG49W0R0KG4pXSwwPT1jKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBvZmZzZXQgMCIpO2lmKGM+blswXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG9mZnNldCBiZXlvbmQgbGVuZ3RoIik7aWYobz49Yylmb3Iobi5wdXNoKG5bMF0u''@;'; put 'put ''c2xpY2UoLWMpKSxvLT1jO28+PW5bbi5sZW5ndGgtMV0ubGVuZ3RoOyluLnB1c2gobltuLmxlbmd0aC0xXSksby09bltuLmxlbmd0aC0xXS5sZW5ndGg7bi5wdXNoKG5bMF0uc2xpY2UoLWMsLWMrbykpfWVsc2V7dmFyIHM9dFtyWzBdKytdPj4yO2lmKHM8NjApKytzO2Vsc2V7dmFyIGY9cy01''@;'; put 'put ''OTtzPXRbclswXV0sZj4xJiYoc3w9dFtyWzBdKzFdPDw4KSxmPjImJihzfD10W3JbMF0rMl08PDE2KSxmPjMmJihzfD10W3JbMF0rM108PDI0KSxzPj4+PTAscysrLHJbMF0rPWZ9bi5wdXNoKHQuc2xpY2UoclswXSxyWzBdK3MpKSxyWzBdKz1zfX12YXIgbD1EdChuKTtpZihsLmxlbmd0aCE9''@;'; put 'put ''YSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbGVuZ3RoOiAiLmNvbmNhdChsLmxlbmd0aCwiICE9ICIpLmNvbmNhdChhKSk7cmV0dXJuIGx9ZnVuY3Rpb24gSG0oZSx0LHIpe3N3aXRjaChlWzBdKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uIFVtKGUs''@;'; put 'put ''dCxyLGEpe3ZhciBoLG49SnQoZSksaT1uLmdldFVpbnQzMig0LCEwKSxzPShhPjE/MTI6OCkrNCp1YyhpJihhPjE/MzQ3MDozOTgpKSxmPS0xLGM9LTEsbz1OYU4sbD1uZXcgRGF0ZSgyMDAxLDAsMSk7c3dpdGNoKDUxMiZpJiYoZj1uLmdldFVpbnQzMihzLCEwKSxzKz00KSxzKz00KnVjKGkm''@;'; put 'put ''KGE+MT8xMjI4ODo0MDk2KSksMTYmaSYmKGM9bi5nZXRVaW50MzIocywhMCkscys9NCksMzImaSYmKG89bi5nZXRGbG9hdDY0KHMsITApLHMrPTgpLDY0JmkmJihsLnNldFRpbWUobC5nZXRUaW1lKCkrMWUzKm4uZ2V0RmxvYXQ2NChzLCEwKSkscys9OCksZVsyXSl7Y2FzZSAwOmJyZWFrO2Nh''@;'; put 'put ''c2UgMjpoPXt0OiJuIix2Om99O2JyZWFrO2Nhc2UgMzpoPXt0OiJzIix2OnRbY119O2JyZWFrO2Nhc2UgNTpoPXt0OiJkIix2Omx9O2JyZWFrO2Nhc2UgNjpoPXt0OiJiIix2Om8+MH07YnJlYWs7Y2FzZSA3Omg9e3Q6Im4iLHY6by84NjQwMH07YnJlYWs7Y2FzZSA4Omg9e3Q6ImUiLHY6MH07''@;'; put 'put ''YnJlYWs7Y2FzZSA5OmlmKGY+LTEpaD17dDoicyIsdjpyW2ZdfTtlbHNlIGlmKGM+LTEpaD17dDoicyIsdjp0W2NdfTtlbHNle2lmKGlzTmFOKG8pKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGUuc2xpY2UoMCw0KSkpO2g9e3Q6Im4iLHY6b319YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNlbGwgdHlwZSAiLmNvbmNhdChlLnNsaWNlKDAsNCkpKX1yZXR1cm4gaH0oZSx0LHIsZVswXSk7Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBXbShlLHQscil7dmFyIGgsYT1KdChlKSxuPWEuZ2V0VWludDMyKDgsITApLGk9''@;'; put 'put ''MTIscz0tMSxmPS0xLGM9TmFOLG89TmFOLGw9bmV3IERhdGUoMjAwMSwwLDEpO3N3aXRjaCgxJm4mJihjPWZ1bmN0aW9uIExtKGUsdCl7Zm9yKHZhciByPSgxMjcmZVt0KzE1XSk8PDd8ZVt0KzE0XT4+MSxhPTEmZVt0KzE0XSxuPXQrMTM7bj49dDstLW4pYT0yNTYqYStlW25dO3JldHVybigx''@;'; put 'put ''MjgmZVt0KzE1XT8tYTphKSpNYXRoLnBvdygxMCxyLTYxNzYpfShlLGkpLGkrPTE2KSwyJm4mJihvPWEuZ2V0RmxvYXQ2NChpLCEwKSxpKz04KSw0Jm4mJihsLnNldFRpbWUobC5nZXRUaW1lKCkrMWUzKmEuZ2V0RmxvYXQ2NChpLCEwKSksaSs9OCksOCZuJiYoZj1hLmdldFVpbnQzMihpLCEw''@;'; put 'put ''KSxpKz00KSwxNiZuJiYocz1hLmdldFVpbnQzMihpLCEwKSxpKz00KSxlWzFdKXtjYXNlIDA6YnJlYWs7Y2FzZSAyOmNhc2UgMTA6aD17dDoibiIsdjpjfTticmVhaztjYXNlIDM6aD17dDoicyIsdjp0W2ZdfTticmVhaztjYXNlIDU6aD17dDoiZCIsdjpsfTticmVhaztjYXNlIDY6aD17dDoi''@;'; put 'put ''YiIsdjpvPjB9O2JyZWFrO2Nhc2UgNzpoPXt0OiJuIix2Om8vODY0MDB9O2JyZWFrO2Nhc2UgODpoPXt0OiJlIix2OjB9O2JyZWFrO2Nhc2UgOTppZighKHM+LTEpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGVbMV0sIiA6ICIpLmNvbmNhdCgzMSZu''@;'; put 'put ''LCIgOiAiKS5jb25jYXQoZS5zbGljZSgwLDQpKSk7aD17dDoicyIsdjpyW3NdfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGVbMV0sIiA6ICIpLmNvbmNhdCgzMSZuLCIgOiAiKS5jb25jYXQoZS5zbGljZSgwLDQpKSl9cmV0''@;'; put 'put ''dXJuIGh9KGUsdCxyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgcGF5bG9hZCB2ZXJzaW9uICIuY29uY2F0KGVbMF0pKX19ZnVuY3Rpb24gRXIoZSl7cmV0dXJuIEthKFJlKGUpWzFdWzBdLmRhdGEpfWZ1bmN0aW9uIGhjKGUsdCl7dmFyIHI9UmUodC5kYXRhKSxhPVll''@;'; put 'put ''KHJbMV1bMF0uZGF0YSksaT1bXTtyZXR1cm4oclszXXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9UmUocy5kYXRhKSxjPVllKGZbMV1bMF0uZGF0YSk+Pj4wO3N3aXRjaChhKXtjYXNlIDE6aVtjXT1IbihmWzNdWzBdLmRhdGEpO2JyZWFrO2Nhc2UgODp2YXIgbD1SZShlW0VyKGZb''@;'; put 'put ''OV1bMF0uZGF0YSldWzBdLmRhdGEpLGg9ZVtFcihsWzFdWzBdLmRhdGEpXVswXSx4PVllKGgubWV0YVsxXVswXS5kYXRhKTtpZigyMDAxIT14KXRocm93IG5ldyBFcnJvcigiMjAwMCB1bmV4cGVjdGVkIHJlZmVyZW5jZSB0byAiLmNvbmNhdCh4KSk7dmFyIGQ9UmUoaC5kYXRhKTtpW2NdPWRb''@;'; put 'put ''M10ubWFwKGZ1bmN0aW9uKHYpe3JldHVybiBIbih2LmRhdGEpfSkuam9pbigiIil9fSksaX1mdW5jdGlvbiB6bShlLHQpe3ZhciBhPXsiIXJlZiI6IkExIn0sbj1lW0VyKFJlKHQuZGF0YSlbMl1bMF0uZGF0YSldLGk9WWUoblswXS5tZXRhWzFdWzBdLmRhdGEpO2lmKDYwMDEhPWkpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCI2MDAwIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRvICIuY29uY2F0KGkpKTtyZXR1cm4gZnVuY3Rpb24gR20oZSx0LHIpe3ZhciBhLG49UmUodC5kYXRhKSxpPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07aWYoaS5lLnI9KFllKG5bNl1bMF0uZGF0YSk+Pj4wKS0xLGkuZS5y''@;'; put 'put ''PDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdyB2YXJpbnQgIi5jb25jYXQobls2XVswXS5kYXRhKSk7aWYoaS5lLmM9KFllKG5bN11bMF0uZGF0YSk+Pj4wKS0xLGkuZS5jPDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbCB2YXJpbnQgIi5jb25jYXQobls3XVswXS5kYXRhKSk7''@;'; put 'put ''clsiIXJlZiJdPXdlKGkpO3ZhciBzPVJlKG5bNF1bMF0uZGF0YSksZj1oYyhlLGVbRXIoc1s0XVswXS5kYXRhKV1bMF0pLGM9bnVsbCE9KGE9c1sxN10pJiZhWzBdP2hjKGUsZVtFcihzWzE3XVswXS5kYXRhKV1bMF0pOltdLG89UmUoc1szXVswXS5kYXRhKSxsPTA7b1sxXS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKGgpe3ZhciB4PVJlKGguZGF0YSksZD1lW0VyKHhbMl1bMF0uZGF0YSldWzBdLHY9WWUoZC5tZXRhWzFdWzBdLmRhdGEpO2lmKDYwMDIhPXYpdGhyb3cgbmV3IEVycm9yKCI2MDAxIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRvICIuY29uY2F0KHYpKTt2YXIgdT1mdW5jdGlvbiBYbShl''@;'; put 'put ''LHQpe3ZhciByLGE9UmUodC5kYXRhKSxuPW51bGwhPShyPWE/Lls3XSkmJnJbMF0/WWUoYVs3XVswXS5kYXRhKT4+PjA+MD8xOjA6LTEsaT1WbihhWzVdLGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbiBWbShlLHQpe3ZhciByLGEsbixpLHMsZixjLG8sbCxoLHgsZCx2LHUsTixNLHA9UmUo''@;'; put 'put ''ZSksaz1ZZShwWzFdWzBdLmRhdGEpPj4+MCxUPVllKHBbMl1bMF0uZGF0YSk+Pj4wLGc9KG51bGw9PShhPW51bGw9PShyPXBbOF0pP3ZvaWQgMDpyWzBdKT92b2lkIDA6YS5kYXRhKSYmWWUocFs4XVswXS5kYXRhKT4wfHwhMTtpZihudWxsIT0oaT1udWxsPT0obj1wWzddKT92b2lkIDA6blsw''@;'; put 'put ''XSkmJmkuZGF0YSYmMCE9dClOPW51bGw9PShmPW51bGw9PShzPXBbN10pP3ZvaWQgMDpzWzBdKT92b2lkIDA6Zi5kYXRhLE09bnVsbD09KG89bnVsbD09KGM9cFs2XSk/dm9pZCAwOmNbMF0pP3ZvaWQgMDpvLmRhdGE7ZWxzZXtpZihudWxsPT0oaD1udWxsPT0obD1wWzRdKT92b2lkIDA6bFsw''@;'; put 'put ''XSl8fCFoLmRhdGF8fDE9PXQpdGhyb3ciTlVNQkVSUyBUaWxlIG1pc3NpbmcgIi5jb25jYXQodCwiIGNlbGwgc3RvcmFnZSIpO049bnVsbD09KGQ9bnVsbD09KHg9cFs0XSk/dm9pZCAwOnhbMF0pP3ZvaWQgMDpkLmRhdGEsTT1udWxsPT0odT1udWxsPT0odj1wWzNdKT92b2lkIDA6dlswXSk/''@;'; put 'put ''dm9pZCAwOnUuZGF0YX1mb3IodmFyIEk9Zz80OjEseT1KdChOKSxQPVtdLFI9MDtSPE4ubGVuZ3RoLzI7KytSKXt2YXIgVj15LmdldFVpbnQxNigyKlIsITApO1Y8NjU1MzUmJlAucHVzaChbUixWXSl9aWYoUC5sZW5ndGghPVQpdGhyb3ciRXhwZWN0ZWQgIi5jb25jYXQoVCwiIGNlbGxzLCBm''@;'; put 'put ''b3VuZCAiKS5jb25jYXQoUC5sZW5ndGgpO3ZhciBYPVtdO2ZvcihSPTA7UjxQLmxlbmd0aC0xOysrUilYW1BbUl1bMF1dPU0uc3ViYXJyYXkoUFtSXVsxXSpJLFBbUisxXVsxXSpJKTtyZXR1cm4gUC5sZW5ndGg+PTEmJihYW1BbUC5sZW5ndGgtMV1bMF1dPU0uc3ViYXJyYXkoUFtQLmxlbmd0''@;'; put 'put ''aC0xXVsxXSpJKSkse1I6ayxjZWxsczpYfX0ocyxuKX0pO3JldHVybntucm93czpZZShhWzRdWzBdLmRhdGEpPj4+MCxkYXRhOmkucmVkdWNlKGZ1bmN0aW9uKHMsZil7cmV0dXJuIHNbZi5SXXx8KHNbZi5SXT1bXSksZi5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGMsbyl7aWYoc1tmLlJdW29d''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIGNlbGwgcj0iLmNvbmNhdChmLlIsIiBjPSIpLmNvbmNhdChvKSk7c1tmLlJdW29dPWN9KSxzfSxbXSl9fSgwLGQpO3UuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHAsayl7cC5mb3JFYWNoKGZ1bmN0aW9uKFQsZyl7dmFyIE49Z2Uoe3I6bCtrLGM6''@;'; put 'put ''Z30pLE09SG0oVCxmLGMpO00mJihyW05dPU0pfSl9KSxsKz11Lm5yb3dzfSl9KGUsblswXSxhKSxhfWZ1bmN0aW9uIHpuKGUpe3ZhciB0LHIsYSxuLGk9e30scz1bXTtpZihlLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKGMubWF0Y2goL1wuaXdwdjIvKSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVuc3VwcG9ydGVkIHBhc3N3b3JkIHByb3RlY3Rpb24iKX0pLGUuRmlsZUluZGV4LmZvckVhY2goZnVuY3Rpb24oYyl7aWYoYy5uYW1lLm1hdGNoKC9cLml3YSQvKSl7dmFyIG8sbDt0cnl7bz1mdW5jdGlvbiB6cihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KXt2YXIgYT1l''@;'; put 'put ''W3IrK10sbj1lW3JdfGVbcisxXTw8OHxlW3IrMl08PDE2O3QucHVzaChNbShhLGUuc2xpY2Uocis9MyxyK24pKSkscis9bn1pZihyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJkYXRhIGlzIG5vdCBhIHZhbGlkIGZyYW1lZCBzdHJlYW0hIik7cmV0dXJuIER0KHQpfShjLmNvbnRlbnQp''@;'; put 'put ''fWNhdGNoKGgpe3JldHVybiBjb25zb2xlLmxvZygiPz8gIitjLmNvbnRlbnQubGVuZ3RoKyIgIisoaC5tZXNzYWdlfHxoKSl9dHJ5e2w9ZnVuY3Rpb24gR3IoZSl7Zm9yKHZhciB0LHI9W10sYT1bMF07YVswXTxlLmxlbmd0aDspe3ZhciBuPUthKGUsYSksaT1SZShlLnNsaWNlKGFbMF0sYVsw''@;'; put 'put ''XStuKSk7YVswXSs9bjt2YXIgcz17aWQ6WWUoaVsxXVswXS5kYXRhKSxtZXNzYWdlczpbXX07aVsyXS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZhciBjPVJlKGYuZGF0YSksbz1ZZShjWzNdWzBdLmRhdGEpO3MubWVzc2FnZXMucHVzaCh7bWV0YTpjLGRhdGE6ZS5zbGljZShhWzBdLGFbMF0rbyl9''@;'; put 'put ''KSxhWzBdKz1vfSksbnVsbCE9KHQ9aVszXSkmJnRbMF0mJihzLm1lcmdlPVllKGlbM11bMF0uZGF0YSk+Pj4wPjApLHIucHVzaChzKX1yZXR1cm4gcn0obyl9Y2F0Y2goaCl7cmV0dXJuIGNvbnNvbGUubG9nKCIjIyAiKyhoLm1lc3NhZ2V8fGgpKX1sLmZvckVhY2goZnVuY3Rpb24oaCl7aVto''@;'; put 'put ''LmlkXT1oLm1lc3NhZ2VzLHMucHVzaChoLmlkKX0pfX0pLCFzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaGFzIG5vIG1lc3NhZ2VzIik7dmFyIGY9KG51bGw9PShuPW51bGw9PShhPW51bGw9PShyPW51bGw9PSh0PWk/LlsxXSk/dm9pZCAwOnRbMF0pP3ZvaWQgMDpyLm1ldGEpP3Zv''@;'; put 'put ''aWQgMDphWzFdKT92b2lkIDA6blswXS5kYXRhKSYmMT09WWUoaVsxXVswXS5tZXRhWzFdWzBdLmRhdGEpJiZpWzFdWzBdO2lmKGZ8fHMuZm9yRWFjaChmdW5jdGlvbihjKXtpW2NdLmZvckVhY2goZnVuY3Rpb24obyl7aWYoMT09WWUoby5tZXRhWzFdWzBdLmRhdGEpPj4+MCl7aWYoZil0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkRvY3VtZW50IGhhcyBtdWx0aXBsZSByb290cyIpO2Y9b319KX0pLCFmKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgRG9jdW1lbnQgcm9vdCIpO3JldHVybiBmdW5jdGlvbiBqbShlLHQpe3ZhciByPXtTaGVldE5hbWVzOltdLFNoZWV0czp7fX07aWYoVm4oUmUo''@;'; put 'put ''dC5kYXRhKVsxXSxFcikuZm9yRWFjaChmdW5jdGlvbihpKXtlW2ldLmZvckVhY2goZnVuY3Rpb24ocyl7aWYoMj09WWUocy5tZXRhWzFdWzBdLmRhdGEpKXt2YXIgYz1mdW5jdGlvbiAkbShlLHQpe3ZhciByLGE9UmUodC5kYXRhKSxuPXtuYW1lOm51bGwhPShyPWFbMV0pJiZyWzBdP0huKGFb''@;'; put 'put ''MV1bMF0uZGF0YSk6IiIsc2hlZXRzOltdfTtyZXR1cm4gVm4oYVsyXSxFcikuZm9yRWFjaChmdW5jdGlvbihzKXtlW3NdLmZvckVhY2goZnVuY3Rpb24oZil7NmUzPT1ZZShmLm1ldGFbMV1bMF0uZGF0YSkmJm4uc2hlZXRzLnB1c2goem0oZSxmKSl9KX0pLG59KGUscyk7Yy5zaGVldHMuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihvLGwpe2VpKHIsbywwPT1sP2MubmFtZTpjLm5hbWUrIl8iK2wsITApfSl9fSl9KSwwPT1yLlNoZWV0TmFtZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRW1wdHkgTlVNQkVSUyBmaWxlIik7cmV0dXJuIHJ9KGksZil9ZnVuY3Rpb24gJG4oZSl7IWZ1bmN0aW9uIHhj''@;'; put 'put ''KGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIGE9MDthIT1lLmxlbmd0aDsrK2Epe3ZhciBuPWVbYV07dm9pZCAwPT09cltuWzBdXSYmKHJbblswXV09blsxXSksIm4iPT09blsyXSYmKHJbblswXV09TnVtYmVyKHJbblswXV0pKX19fShbWyJjZWxsTkYiLCExXSxbImNlbGxIVE1MIiwh''@;'; put 'put ''MF0sWyJjZWxsRm9ybXVsYSIsITBdLFsiY2VsbFN0eWxlcyIsITFdLFsiY2VsbFRleHQiLCEwXSxbImNlbGxEYXRlcyIsITFdLFsic2hlZXRTdHVicyIsITFdLFsic2hlZXRSb3dzIiwwLCJuIl0sWyJib29rRGVwcyIsITFdLFsiYm9va1NoZWV0cyIsITFdLFsiYm9va1Byb3BzIiwhMV0sWyJi''@;'; put 'put ''b29rRmlsZXMiLCExXSxbImJvb2tWQkEiLCExXSxbInBhc3N3b3JkIiwiIl0sWyJXVEYiLCExXV0pKGUpfWZ1bmN0aW9uIEptKGUpe3JldHVybiBrZS5XUy5pbmRleE9mKGUpPi0xPyJzaGVldCI6a2UuQ1MmJmU9PWtlLkNTPyJjaGFydCI6a2UuRFMmJmU9PWtlLkRTPyJkaWFsb2ciOmtlLk1T''@;'; put 'put ''JiZlPT1rZS5NUz8ibWFjcm8iOmUmJmUubGVuZ3RoP2U6InNoZWV0In1mdW5jdGlvbiBabShlLHQscixhLG4saSxzLGYsYyxvLGwsaCl7dHJ5e2lbYV09SWEoTnIoZSxyLCEwKSx0KTt2YXIgZCx4PVFlKGUsdCk7c3dpdGNoKGYpe2Nhc2Uic2hlZXQiOmQ9U3AoeCx0LG4sYyxpW2FdLG8sbCxo''@;'; put 'put ''KTticmVhaztjYXNlImNoYXJ0IjppZighKGQ9ZnVuY3Rpb24gRnAoZSx0LHIsYSxuLGkscyxmKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBycChlLHQscixhLG4pe2lmKCFlKXJldHVybiBlO2F8fChhPXsiIWlkIjp7fX0pO3ZhciBpPXsiIXR5cGUiOiJjaGFydCIsIiFk''@;'; put 'put ''cmF3ZWwiOm51bGwsIiFyZWwiOiIifSxzPVtdLGY9ITE7cmV0dXJuIGh0KGUsZnVuY3Rpb24obyxsLGgpe3N3aXRjaChoKXtjYXNlIDU1MDppWyIhcmVsIl09bzticmVhaztjYXNlIDY1MTpuLlNoZWV0c1tyXXx8KG4uU2hlZXRzW3JdPXt9KSxvLm5hbWUmJihuLlNoZWV0c1tyXS5Db2RlTmFt''@;'; put 'put ''ZT1vLm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1OmY9ITA7YnJlYWs7Y2FzZSAzNjpmPSExO2JyZWFrO2Nhc2UgMzc6cy5wdXNoKGgpO2JyZWFrO2Nhc2UgMzg6''@;'; put 'put ''cy5wb3AoKTticmVhaztkZWZhdWx0OmlmKGwuVD4wKXMucHVzaChoKTtlbHNlIGlmKGwuVDwwKXMucG9wKCk7ZWxzZSBpZighZnx8dC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIraC50b1N0cmluZygxNikpfX0sdCksYVsiIWlkIl1baVsiIXJlbCJdXSYmKGlb''@;'; put 'put ''IiFkcmF3ZWwiXT1hWyIhaWQiXVtpWyIhcmVsIl1dKSxpfShlLGEscixuLGkpOmZ1bmN0aW9uIFoyKGUsdCxyLGEsbil7aWYoIWUpcmV0dXJuIGU7YXx8KGE9eyIhaWQiOnt9fSk7dmFyIHMsaT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sZj1lLm1hdGNoKFBm''@;'; put 'put ''KTtyZXR1cm4gZiYmTG4oZlswXSwwLG4sciksKHM9ZS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihpWyIhcmVsIl09c1sxXSksYVsiIWlkIl1baVsiIXJlbCJdXSYmKGlbIiFkcmF3ZWwiXT1hWyIhaWQiXVtpWyIhcmVsIl1dKSxpfShlLDAscixuLGkpfSh4LHQsbixjLGlbYV0s''@;'; put 'put ''bykpfHwhZFsiIWRyYXdlbCJdKWJyZWFrO3ZhciB2PVNhKGRbIiFkcmF3ZWwiXS5UYXJnZXQsdCksdT1PYSh2KSxwPWZ1bmN0aW9uIGh4KGUsdCl7aWYoIWUpcmV0dXJuIj8/Ijt2YXIgcj0oZS5tYXRjaCgvPGM6Y2hhcnQgW14+XSpyOmlkPSIoW14iXSopIi8pfHxbIiIsIiJdKVsxXTtyZXR1''@;'; put 'put ''cm4gdFsiIWlkIl1bcl0uVGFyZ2V0fShOcihlLHYsITApLElhKE5yKGUsdSwhMCksdikpLGs9U2EocCx2KSxUPU9hKGspO2Q9ZnVuY3Rpb24gcTIoZSx0LHIsYSxuLGkpe3ZhciBzPWl8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCFlKXJldHVybiBpO3ZhciBmPTAsYz0wLG89IkEiLGw9e3M6e3I6''@;'; put 'put ''MmU2LGM6MmU2fSxlOntyOjAsYzowfX07cmV0dXJuKGUubWF0Y2goLzxjOm51bUNhY2hlPltcc1xTXSo/PFwvYzpudW1DYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgeD1mdW5jdGlvbiBKMihlKXt2YXIgYSx0PVtdLHI9ZS5tYXRjaCgvXjxjOm51bUNhY2hlPi8pOyhl''@;'; put 'put ''Lm1hdGNoKC88YzpwdCBpZHg9IihcZCopIj4oLio/KTxcL2M6cHQ+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9aS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqPykiPjxjOnY+KC4qKTxcL2M6dj48XC9jOnB0Pi8pO3MmJih0WytzWzFdXT1yPytzWzJdOnNbMl0pfSk7dmFyIG49''@;'; put 'put ''SWUoKGUubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oZS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihpKXthPWkucmVwbGFjZSgvPC4qPz4vZywiIil9''@;'; put 'put ''KSxbdCxuLGFdfShoKTtsLnMucj1sLnMuYz0wLGwuZS5jPWYsbz1IZShmKSx4WzBdLmZvckVhY2goZnVuY3Rpb24oZCx2KXtzW28rS2UodildPXt0OiJuIix2OmQsejp4WzFdfSxjPXZ9KSxsLmUucjxjJiYobC5lLnI9YyksKytmfSksZj4wJiYoc1siIXJlZiJdPXdlKGwpKSxzfShOcihlLGss''@;'; put 'put ''ITApLDAsMCxJYShOcihlLFQsITApLGspLDAsZCk7YnJlYWs7Y2FzZSJtYWNybyI6ZD1mdW5jdGlvbiB5cChlLHQscixhLG4saSxzLGYpe3JldHVybiB0LnNsaWNlKC00KSx7IiF0eXBlIjoibWFjcm8ifX0oMCx0KTticmVhaztjYXNlImRpYWxvZyI6ZD1mdW5jdGlvbiBBcChlLHQscixhLG4s''@;'; put 'put ''aSxzLGYpe3JldHVybiB0LnNsaWNlKC00KSx7IiF0eXBlIjoiZGlhbG9nIn19KDAsdCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIrZil9c1thXT1kO3ZhciBnPVtdO2kmJmlbYV0mJiRlKGlbYV0pLmZvckVhY2goZnVuY3Rpb24oTil7''@;'; put 'put ''dmFyIE09IiI7aWYoaVthXVtOXS5UeXBlPT1rZS5DTU5UKXtNPVNhKGlbYV1bTl0uVGFyZ2V0LHQpO3ZhciBJPWZ1bmN0aW9uIElwKGUsdCxyKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBFeChlLHQpe3ZhciByPVtdLGE9W10sbj17fSxpPSExO3JldHVybiBodChlLGZ1''@;'; put 'put ''bmN0aW9uKGYsYyxvKXtzd2l0Y2gobyl7Y2FzZSA2MzI6YS5wdXNoKGYpO2JyZWFrO2Nhc2UgNjM1Om49ZjticmVhaztjYXNlIDYzNzpuLnQ9Zi50LG4uaD1mLmgsbi5yPWYucjticmVhaztjYXNlIDYzNjppZihuLmF1dGhvcj1hW24uaWF1dGhvcl0sZGVsZXRlIG4uaWF1dGhvcix0LnNoZWV0''@;'; put 'put ''Um93cyYmbi5yZngmJnQuc2hlZXRSb3dzPD1uLnJmeC5yKWJyZWFrO24udHx8KG4udD0iIiksZGVsZXRlIG4ucmZ4LHIucHVzaChuKTticmVhaztjYXNlIDMwNzI6Y2FzZSAzNzpjYXNlIDM4OmJyZWFrO2Nhc2UgMzU6aT0hMDticmVhaztjYXNlIDM2Omk9ITE7YnJlYWs7ZGVmYXVsdDppZigh''@;'; put 'put ''Yy5UJiYoIWl8fHQuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitvLnRvU3RyaW5nKDE2KSl9fSkscn0oZSxyKTpmdW5jdGlvbiB4eChlLHQpe2lmKGUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIHI9W10sYT1bXSxuPWUu''@;'; put 'put ''bWF0Y2goLzwoPzpcdys6KT9hdXRob3JzPihbXHNcU10qKTxcLyg/Olx3KzopP2F1dGhvcnM+Lyk7biYmblsxXSYmblsxXS5zcGxpdCgvPFwvXHcqOj9hdXRob3I+LykuZm9yRWFjaChmdW5jdGlvbihzKXtpZigiIiE9PXMmJiIiIT09cy50cmltKCkpe3ZhciBmPXMubWF0Y2goLzwoPzpcdys6''@;'; put 'put ''KT9hdXRob3JbXj5dKj4oLiopLyk7ZiYmci5wdXNoKGZbMV0pfX0pO3ZhciBpPWUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9jb21tZW50TGlzdD4vKTtyZXR1cm4gaSYmaVsxXSYmaVsxXS5zcGxpdCgvPFwvXHcqOj9jb21tZW50Pi8pLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24ocyl7aWYoIiIhPT1zJiYiIiE9PXMudHJpbSgpKXt2YXIgZj1zLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKGYpe3ZhciBjPW1lKGZbMF0pLG89e2F1dGhvcjpjLmF1dGhvcklkJiZyW2MuYXV0aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6Yy5yZWYs''@;'; put 'put ''Z3VpZDpjLmd1aWR9LGw9R2UoYy5yZWYpO2lmKCEodC5zaGVldFJvd3MmJnQuc2hlZXRSb3dzPD1sLnIpKXt2YXIgaD1zLm1hdGNoKC88KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90ZXh0Pi8pLHg9ISFoJiYhIWhbMV0mJlNuKGhbMV0pfHx7cjoiIix0OiIiLGg6IiJ9O28u''@;'; put 'put ''cj14LnIsIjx0PjwvdD4iPT14LnImJih4LnQ9eC5oPSIiKSxvLnQ9KHgudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLHQuY2VsbEhUTUwmJihvLmg9eC5oKSxhLnB1c2gobyl9fX19KSxhfShlLHIpfShRZShlLE0sITApLE0sYyk7aWYoIUl8fCFJLmxl''@;'; put 'put ''bmd0aClyZXR1cm47Z2YoZCxJLCExKX1pW2FdW05dLlR5cGU9PWtlLlRDTU5UJiYoTT1TYShpW2FdW05dLlRhcmdldCx0KSxnPWcuY29uY2F0KGZ1bmN0aW9uIGR4KGUsdCl7dmFyIHI9W10sYT0hMSxuPXt9LGk9MDtyZXR1cm4gZS5yZXBsYWNlKHZyLGZ1bmN0aW9uKGYsYyl7dmFyIG89bWUo''@;'; put 'put ''Zik7c3dpdGNoKHJ0KG9bMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxUaHJlYWRlZENvbW1lbnRzIjpjYXNlIjwvVGhyZWFkZWRDb21tZW50cz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjx0aHJlYWRlZENv''@;'; put 'put ''bW1lbnQiOm49e2F1dGhvcjpvLnBlcnNvbklkLGd1aWQ6by5pZCxyZWY6by5yZWYsVDoxfTticmVhaztjYXNlIjwvdGhyZWFkZWRDb21tZW50PiI6bnVsbCE9bi50JiZyLnB1c2gobik7YnJlYWs7Y2FzZSI8dGV4dD4iOmNhc2UiPHRleHQiOmk9YytmLmxlbmd0aDticmVhaztjYXNlIjwvdGV4''@;'; put 'put ''dD4iOm4udD1lLnNsaWNlKGksYykucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIik7YnJlYWs7Y2FzZSI8bWVudGlvbnMiOmNhc2UiPG1lbnRpb25zPiI6Y2FzZSI8ZXh0IjphPSEwO2JyZWFrO2Nhc2UiPC9tZW50aW9ucz4iOmNhc2UiPC9leHQ+IjphPSExO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6aWYoIWEmJnQuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrb1swXSsiIGluIHRocmVhZGVkIGNvbW1lbnRzIil9cmV0dXJuIGZ9KSxyfShRZShlLE0sITApLGMpKSl9KSxnJiZnLmxlbmd0aCYmZ2YoZCxnLCEwLGMucGVvcGxlfHxbXSl9Y2F0Y2goTil7aWYo''@;'; put 'put ''Yy5XVEYpdGhyb3cgTn19ZnVuY3Rpb24gJHIoZSl7cmV0dXJuIi8iPT1lLmNoYXJBdCgwKT9lLnNsaWNlKDEpOmV9ZnVuY3Rpb24gUW0oZSx0KXtpZih0YSgpLCRuKHQ9dHx8e30pLFdyKGUsIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpfHxXcihlLCJvYmplY3RkYXRhLnhtbCIpKXJldHVybiBm''@;'; put 'put ''dW5jdGlvbiBmYyhlLHQpe3Q9dHx8e30sV3IoZSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIikmJmZ1bmN0aW9uIG9sKGUsdCl7Zm9yKHZhciBhLG4scj1ZMChlKTthPXlhLmV4ZWMocik7KXN3aXRjaChhWzNdKXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnkiOmlmKCIvIj09''@;'; put 'put ''KG49bWUoYVswXSwhMSkpLnBhdGgmJm4udHlwZSE9PWNsKXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24tZGF0YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNh''@;'; put 'put ''c2Uia2V5LWRlcml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKHQmJnQuV1RGKXRocm93IGF9fShRZShlLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSx0KTt2YXIgcj1OcihlLCJjb250ZW50LnhtbCIpO2lmKCFyKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiTWlzc2luZyBjb250ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBhPXNjKEJlKHIpLHQpO3JldHVybiBXcihlLCJtZXRhLnhtbCIpJiYoYS5Qcm9wcz1tcyhRZShlLCJtZXRhLnhtbCIpKSksYX0oZSx0KTtpZihXcihlLCJJbmRleC9Eb2N1bWVudC5pd2EiKSl7''@;'; put 'put ''aWYodHlwZW9mIFVpbnQ4QXJyYXk+InUiKXRocm93IG5ldyBFcnJvcigiTlVNQkVSUyBmaWxlIHBhcnNpbmcgcmVxdWlyZXMgVWludDhBcnJheSBzdXBwb3J0Iik7aWYoZS5GaWxlSW5kZXgpcmV0dXJuIHpuKGUpO3ZhciByPXZlLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gSWkoZSkuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihsZSl7IWZ1bmN0aW9uIFRlKGUsdCxyKXtpZihlLkZ1bGxQYXRocyl7dmFyIGE7aWYoInN0cmluZyI9PXR5cGVvZiByKXJldHVybiBhPVNlP290KHIpOmZ1bmN0aW9uIE5jKGUpe2Zvcih2YXIgdD1bXSxyPTAsYT1lLmxlbmd0aCsyNTAsbj1fdChlLmxlbmd0aCsyNTUpLGk9''@;'; put 'put ''MDtpPGUubGVuZ3RoOysraSl7dmFyIHM9ZS5jaGFyQ29kZUF0KGkpO2lmKHM8MTI4KW5bcisrXT1zO2Vsc2UgaWYoczwyMDQ4KW5bcisrXT0xOTJ8cz4+NiYzMSxuW3IrK109MTI4fDYzJnM7ZWxzZSBpZihzPj01NTI5NiYmczw1NzM0NCl7cz02NCsoMTAyMyZzKTt2YXIgZj0xMDIzJmUuY2hh''@;'; put 'put ''ckNvZGVBdCgrK2kpO25bcisrXT0yNDB8cz4+OCY3LG5bcisrXT0xMjh8cz4+MiY2MyxuW3IrK109MTI4fGY+PjYmMTV8KDMmcyk8PDQsbltyKytdPTEyOHw2MyZmfWVsc2UgbltyKytdPTIyNHxzPj4xMiYxNSxuW3IrK109MTI4fHM+PjYmNjMsbltyKytdPTEyOHw2MyZzO3I+YSYmKHQucHVz''@;'; put 'put ''aChuLnNsaWNlKDAscikpLHI9MCxuPV90KDY1NTM1KSxhPTY1NTMwKX1yZXR1cm4gdC5wdXNoKG4uc2xpY2UoMCxyKSksZnIodCl9KHIpLHZlLnV0aWxzLmNmYl9hZGQoZSx0LGEpO3ZlLnV0aWxzLmNmYl9hZGQoZSx0LHIpfWVsc2UgZS5maWxlKHQscil9KHIsbGUsT2koZSxsZSkpfSksem4o''@;'; put 'put ''cil9aWYoIVdyKGUsIltDb250ZW50X1R5cGVzXS54bWwiKSl0aHJvdyBXcihlLCJpbmRleC54bWwuZ3oiKT9uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE5VTUJFUlMgMDggZmlsZSIpOldyKGUsImluZGV4LnhtbCIpP25ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTlVNQkVSUyAwOSBmaWxlIik6bmV3''@;'; put 'put ''IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgZmlsZSIpO3ZhciBzLGYsYT1JaShlKSxuPWZ1bmN0aW9uIGZsKGUpe3ZhciB0PXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sdGhyZWFkZWRjb21t''@;'; put 'put ''ZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10sbWV0YWRhdGE6W10scGVvcGxlOltdLFRPRE86W10seG1sbnM6IiJ9O2lmKCFlfHwhZS5tYXRjaCly''@;'; put 'put ''ZXR1cm4gdDt2YXIgcj17fTtpZigoZS5tYXRjaCh2cil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBuPW1lKGEpO3N3aXRjaChuWzBdLnJlcGxhY2UoX28sIjwiKSl7Y2FzZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOnQueG1sbnM9blsieG1sbnMiKyhuWzBdLm1hdGNoKC88KFx3''@;'; put 'put ''Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjpyW24uRXh0ZW5zaW9uXT1uLkNvbnRlbnRUeXBlO2JyZWFrO2Nhc2UiPE92ZXJyaWRlIjp2b2lkIDAhPT10W3ZuW24uQ29udGVudFR5cGVdXSYmdFt2bltuLkNvbnRlbnRUeXBlXV0ucHVzaChuLlBhcnROYW1lKX19KSx0''@;'; put 'put ''LnhtbG5zIT09cnIuQ1QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIit0LnhtbG5zKTtyZXR1cm4gdC5jYWxjY2hhaW49dC5jYWxjY2hhaW5zLmxlbmd0aD4wP3QuY2FsY2NoYWluc1swXToiIix0LnNzdD10LnN0cnMubGVuZ3RoPjA/dC5zdHJzWzBdOiIiLHQuc3R5bGU9''@;'; put 'put ''dC5zdHlsZXMubGVuZ3RoPjA/dC5zdHlsZXNbMF06IiIsdC5kZWZhdWx0cz1yLGRlbGV0ZSB0LmNhbGNjaGFpbnMsdH0oTnIoZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxpPSExO2lmKDA9PT1uLndvcmtib29rcy5sZW5ndGgmJlFlKGUsZj0ieGwvd29ya2Jvb2sueG1sIiwhMCkmJm4ud29y''@;'; put 'put ''a2Jvb2tzLnB1c2goZiksMD09PW4ud29ya2Jvb2tzLmxlbmd0aCl7aWYoIVFlKGUsZj0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO24ud29ya2Jvb2tzLnB1c2goZiksaT0hMH0iYmluIj09bi53b3JrYm9va3NbMF0uc2xp''@;'; put 'put ''Y2UoLTMpJiYoaT0hMCk7dmFyIGM9e30sbz17fTtpZighdC5ib29rU2hlZXRzJiYhdC5ib29rUHJvcHMpe2lmKFZhPVtdLG4uc3N0KXRyeXtWYT1mdW5jdGlvbiBPcChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gSWgoZSx0KXt2YXIgcj1bXSxhPSExO3JldHVy''@;'; put 'put ''biBodChlLGZ1bmN0aW9uKGkscyxmKXtzd2l0Y2goZil7Y2FzZSAxNTk6ci5Db3VudD1pWzBdLHIuVW5pcXVlPWlbMV07YnJlYWs7Y2FzZSAxOTpyLnB1c2goaSk7YnJlYWs7Y2FzZSAxNjA6cmV0dXJuITA7Y2FzZSAzNTphPSEwO2JyZWFrO2Nhc2UgMzY6YT0hMTticmVhaztkZWZhdWx0Omlm''@;'; put 'put ''KCFhfHx0LldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitmLnRvU3RyaW5nKDE2KSl9fSkscn0oZSxyKTpmdW5jdGlvbiBDaChlLHQpe3ZhciByPVtdLGE9IiI7aWYoIWUpcmV0dXJuIHI7dmFyIG49ZS5tYXRjaChGaCk7aWYobil7YT1uWzJdLnJlcGxhY2UoeWgs''@;'; put 'put ''IiIpLnNwbGl0KEFoKTtmb3IodmFyIGk9MDtpIT1hLmxlbmd0aDsrK2kpe3ZhciBzPVNuKGFbaV0udHJpbSgpLHQpO251bGwhPXMmJihyW3IubGVuZ3RoXT1zKX1uPW1lKG5bMV0pLHIuQ291bnQ9bi5jb3VudCxyLlVuaXF1ZT1uLnVuaXF1ZUNvdW50fXJldHVybiByfShlLHIpfShRZShlLCRy''@;'; put 'put ''KG4uc3N0KSksbi5zc3QsdCl9Y2F0Y2gobGUpe2lmKHQuV1RGKXRocm93IGxlfXQuY2VsbFN0eWxlcyYmbi50aGVtZXMubGVuZ3RoJiYoYz1mdW5jdGlvbiBEcChlLHQscil7cmV0dXJuIHZmKGUscil9KE5yKGUsbi50aGVtZXNbMF0ucmVwbGFjZSgvXlwvLywiIiksITApfHwiIiwwLHQpKSxu''@;'; put 'put ''LnN0eWxlJiYobz1mdW5jdGlvbiBDcChlLHQscixhKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBTMShlLHQscil7dmFyIGE9e051bWJlckZtdDpbXX07Zm9yKHZhciBuIGluIHBlKWEuTnVtYmVyRm10W25dPXBlW25dO2EuQ2VsbFhmPVtdLGEuRm9udHM9W107dmFyIGk9''@;'; put 'put ''W10scz0hMTtyZXR1cm4gaHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgNDQ6YS5OdW1iZXJGbXRbY1swXV09Y1sxXSxldChjWzFdLGNbMF0pO2JyZWFrO2Nhc2UgNDM6YS5Gb250cy5wdXNoKGMpLG51bGwhPWMuY29sb3IudGhlbWUmJnQmJnQudGhlbWVFbGVtZW50cyYmdC50''@;'; put 'put ''aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKGMuY29sb3IucmdiPVQwKHQudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbYy5jb2xvci50aGVtZV0ucmdiLGMuY29sb3IudGludHx8MCkpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ1OmNhc2UgNDY6Y2FzZSA0ODpjYXNlIDUwNzpjYXNlIDU3MjpjYXNl''@;'; put 'put ''IDQ3NTpjYXNlIDExNzE6Y2FzZSAyMTAyOmNhc2UgMTEzMDpjYXNlIDUxMjpjYXNlIDIwOTU6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgNDc6NjE3PT1pW2kubGVuZ3RoLTFdJiZhLkNlbGxYZi5wdXNoKGMpO2JyZWFrO2Nhc2UgMzU6cz0hMDticmVhaztjYXNlIDM2OnM9ITE7YnJlYWs7Y2FzZSAz''@;'; put 'put ''NzppLnB1c2gobCkscz0hMDticmVhaztjYXNlIDM4OmkucG9wKCkscz0hMTticmVhaztkZWZhdWx0OmlmKG8uVD4wKWkucHVzaChsKTtlbHNlIGlmKG8uVDwwKWkucG9wKCk7ZWxzZSBpZighc3x8ci5XVEYmJjM3IT1pW2kubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBy''@;'; put 'put ''ZWNvcmQgMHgiK2wudG9TdHJpbmcoMTYpKX19KSxhfShlLHIsYSk6aDEoZSxyLGEpfShRZShlLCRyKG4uc3R5bGUpKSxuLnN0eWxlLGMsdCkpfW4ubGlua3MubWFwKGZ1bmN0aW9uKGxlKXt0cnl7cmV0dXJuIElhKE5yKGUsT2EoJHIobGUpKSksbGUpLGZ1bmN0aW9uIE5wKGUsdCxyLGEpe3Jl''@;'; put 'put ''dHVybiIuYmluIj09PXIuc2xpY2UoLTQpP2Z1bmN0aW9uIHV4KGUsdCxyLGEpe2lmKCFlKXJldHVybiBlO3ZhciBuPWF8fHt9LGk9ITE7aHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgMzU5OmNhc2UgMzYzOmNhc2UgMzY0OmNhc2UgMzY2OmNhc2UgMzY3OmNhc2UgMzY4OmNh''@;'; put 'put ''c2UgMzY5OmNhc2UgMzcwOmNhc2UgMzcxOmNhc2UgNDcyOmNhc2UgNTc3OmNhc2UgNTc4OmNhc2UgNTc5OmNhc2UgNTgwOmNhc2UgNTgxOmNhc2UgNTgyOmNhc2UgNTgzOmNhc2UgNTg0OmNhc2UgNTg1OmNhc2UgNTg2OmNhc2UgNTg3OmJyZWFrO2Nhc2UgMzU6aT0hMDticmVhaztjYXNlIDM2''@;'; put 'put ''Omk9ITE7YnJlYWs7ZGVmYXVsdDppZighby5UJiYoIWl8fG4uV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSxuKX0oZSwwLDAsYSk6dm9pZCAwfShRZShlLCRyKGxlKSksMCxsZSx0KX1jYXRjaHt9fSk7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''VHAoZSx0LHIpe3JldHVybiIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIG1wKGUsdCl7dmFyIHI9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sYT1bXSxuPSExO3R8fCh0PXt9KSx0LmJpZmY9MTI7dmFyIGk9W10s''@;'; put 'put ''cz1bW11dO3JldHVybiBzLlNoZWV0TmFtZXM9W10scy5YVEk9W10sJGFbMTZdPXtuOiJCcnRGUlRBcmNoSUQkIixmOnZwfSxodChlLGZ1bmN0aW9uKGMsbyxsKXtzd2l0Y2gobCl7Y2FzZSAxNTY6cy5TaGVldE5hbWVzLnB1c2goYy5uYW1lKSxyLlNoZWV0cy5wdXNoKGMpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MTUzOnIuV0JQcm9wcz1jO2JyZWFrO2Nhc2UgMzk6bnVsbCE9Yy5TaGVldCYmKHQuU0lEPWMuU2hlZXQpLGMuUmVmPWtyKGMuUHRnLDAsbnVsbCxzLHQpLGRlbGV0ZSB0LlNJRCxkZWxldGUgYy5QdGcsaS5wdXNoKGMpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAx''@;'; put 'put ''NTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNl''@;'; put 'put ''IDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2UgMjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3OnNbMF0ubGVuZ3RoP3Mu''@;'; put 'put ''cHVzaChbbCxjXSk6c1swXT1bbCxjXSxzW3MubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09cy5sZW5ndGgmJihzWzBdPVtdLHNbMF0uWFRJPVtdKSxzW3MubGVuZ3RoLTFdLlhUST1zW3MubGVuZ3RoLTFdLlhUSS5jb25jYXQoYykscy5YVEk9cy5YVEkuY29uY2F0KGMpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMzU6Y2FzZSAzNzphLnB1c2gobCksbj0hMDticmVhaztjYXNlIDM2OmNhc2UgMzg6YS5wb3AoKSxuPSExO2JyZWFrO2RlZmF1bHQ6aWYoIW8uVCYmKCFufHx0LldURiYmMzchPWFbYS5sZW5ndGgtMV0mJjM1IT1hW2EubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhw''@;'; put 'put ''ZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSx0KSxIZihyKSxyLk5hbWVzPWksci5zdXBib29rcz1zLHJ9KGUscik6ZnVuY3Rpb24gbHAoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIgcj17QXBwVmVyc2lvbjp7fSxXQlByb3Bz''@;'; put 'put ''Ont9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLHhtbG5zOiIifSxhPSExLG49InhtbG5zIixpPXt9LHM9MDtpZihlLnJlcGxhY2UodnIsZnVuY3Rpb24oYyxvKXt2YXIgbD1tZShjKTtzd2l0Y2gocnQobFswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC93b3JrYm9vaz4i''@;'; put 'put ''OmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nIjpjYXNlIjxmaWxlU2hhcmluZy8+IjpjYXNlIjwvd29ya2Jvb2tQcj4iOmNhc2UiPHdvcmtib29rUHJvdGVjdGlvbiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJv''@;'; put 'put ''b2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxzaGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25H''@;'; put 'put ''cm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOmNhc2UiPGRlZmluZWROYW1lcy8+IjpjYXNlIjxk''@;'; put 'put ''ZWZpbmVkTmFtZS8+IjpjYXNlIjwvY2FsY1ByPiI6Y2FzZSI8b2xlU2l6ZSI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cyI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3IjpjYXNlIjwvY3Vz''@;'; put 'put ''dG9tV29ya2Jvb2tWaWV3PiI6Y2FzZSI8cGl2b3RDYWNoZXM+IjpjYXNlIjwvcGl2b3RDYWNoZXM+IjpjYXNlIjxwaXZvdENhY2hlcyI6Y2FzZSI8cGl2b3RDYWNoZSI6Y2FzZSI8c21hcnRUYWdQciI6Y2FzZSI8c21hcnRUYWdQci8+IjpjYXNlIjxzbWFydFRhZ1R5cGVzIjpjYXNlIjxzbWFy''@;'; put 'put ''dFRhZ1R5cGVzPiI6Y2FzZSI8L3NtYXJ0VGFnVHlwZXM+IjpjYXNlIjxzbWFydFRhZ1R5cGUiOmNhc2UiPHdlYlB1Ymxpc2hpbmciOmNhc2UiPHdlYlB1Ymxpc2hpbmcvPiI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIiOmNhc2UiPGZpbGVSZWNvdmVyeVByLz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmpl''@;'; put 'put ''Y3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHMiOmNhc2UiPC93ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3QiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpjYXNlIjxBcmNoSUQiOmNhc2UiPHJl''@;'; put 'put ''dmlzaW9uUHRyIjpicmVhaztjYXNlIjx3b3JrYm9vayI6Yy5tYXRjaChvcCkmJihuPSJ4bWxucyIrYy5tYXRjaCgvPChcdyspOi8pWzFdKSxyLnhtbG5zPWxbbl07YnJlYWs7Y2FzZSI8ZmlsZVZlcnNpb24iOmRlbGV0ZSBsWzBdLHIuQXBwVmVyc2lvbj1sO2JyZWFrO2Nhc2UiPHdvcmtib29r''@;'; put 'put ''UHIiOmNhc2UiPHdvcmtib29rUHIvPiI6Qm4uZm9yRWFjaChmdW5jdGlvbihoKXtpZihudWxsIT1sW2hbMF1dKXN3aXRjaChoWzJdKXtjYXNlImJvb2wiOnIuV0JQcm9wc1toWzBdXT1XZShsW2hbMF1dKTticmVhaztjYXNlImludCI6ci5XQlByb3BzW2hbMF1dPXBhcnNlSW50KGxbaFswXV0s''@;'; put 'put ''MTApO2JyZWFrO2RlZmF1bHQ6ci5XQlByb3BzW2hbMF1dPWxbaFswXV19fSksbC5jb2RlTmFtZSYmKHIuV0JQcm9wcy5Db2RlTmFtZT1CZShsLmNvZGVOYW1lKSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIGxbMF0sci5XQlZpZXcucHVz''@;'; put 'put ''aChsKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKGwuc3RhdGUpe2Nhc2UiaGlkZGVuIjpsLkhpZGRlbj0xO2JyZWFrO2Nhc2UidmVyeUhpZGRlbiI6bC5IaWRkZW49MjticmVhaztkZWZhdWx0OmwuSGlkZGVuPTB9ZGVsZXRlIGwuc3RhdGUsbC5uYW1lPUllKEJlKGwubmFtZSkpLGRlbGV0''@;'; put 'put ''ZSBsWzBdLHIuU2hlZXRzLnB1c2gobCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjphPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+Ijpj''@;'; put 'put ''YXNlIjwvZXh0PiI6Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjphPSExO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lIjooaT17fSkuTmFtZT1CZShsLm5hbWUpLGwuY29tbWVudCYmKGkuQ29tbWVudD1sLmNvbW1lbnQpLGwubG9jYWxTaGVldElkJiYoaS5TaGVldD0rbC5sb2NhbFNoZWV0SWQp''@;'; put 'put ''LFdlKGwuaGlkZGVufHwiMCIpJiYoaS5IaWRkZW49ITApLHM9bytjLmxlbmd0aDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWU+IjppLlJlZj1JZShCZShlLnNsaWNlKHMsbykpKSxyLk5hbWVzLnB1c2goaSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIGxbMF0s''@;'; put 'put ''ci5DYWxjUHI9bDticmVhaztkZWZhdWx0OmlmKCFhJiZ0LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2xbMF0rIiBpbiB3b3JrYm9vayIpfXJldHVybiBjfSksLTE9PT1TdC5pbmRleE9mKHIueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIr''@;'; put 'put ''ci54bWxucyk7cmV0dXJuIEhmKHIpLHJ9KGUscil9KFFlKGUsJHIobi53b3JrYm9va3NbMF0pKSxuLndvcmtib29rc1swXSx0KSxoPXt9LHg9IiI7bi5jb3JlcHJvcHMubGVuZ3RoJiYoKHg9UWUoZSwkcihuLmNvcmVwcm9wc1swXSksITApKSYmKGg9bXMoeCkpLDAhPT1uLmV4dHByb3BzLmxl''@;'; put 'put ''bmd0aCYmKHg9UWUoZSwkcihuLmV4dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlvbiB2bChlLHQscil7dmFyIGE9e307dHx8KHQ9e30pLGU9QmUoZSksWHQuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT0oZS5tYXRjaChGYShuWzBdKSl8fFtdKVsxXTtzd2l0Y2goblsyXSl7Y2FzZSJzdHJpbmci''@;'; put 'put ''OmkmJih0W25bMV1dPUllKGkpKTticmVhaztjYXNlImJvb2wiOnRbblsxXV09InRydWUiPT09aTticmVhaztjYXNlInJhdyI6dmFyIHM9ZS5tYXRjaChuZXcgUmVnRXhwKCI8IituWzBdKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrblswXSsiPiIpKTtzJiZzLmxlbmd0aD4wJiYoYVtuWzFdXT1z''@;'; put 'put ''WzFdKX19KSxhLkhlYWRpbmdQYWlycyYmYS5UaXRsZXNPZlBhcnRzJiZ3cyhhLkhlYWRpbmdQYWlycyxhLlRpdGxlc09mUGFydHMsdCxyKX0oeCxoLHQpKTt2YXIgZD17fTsoIXQuYm9va1NoZWV0c3x8dC5ib29rUHJvcHMpJiYwIT09bi5jdXN0cHJvcHMubGVuZ3RoJiYoeD1OcihlLCRyKG4u''@;'; put 'put ''Y3VzdHByb3BzWzBdKSwhMCkpJiYoZD1mdW5jdGlvbiBtbChlLHQpe3ZhciByPXt9LGE9IiIsbj1lLm1hdGNoKHBsKTtpZihuKWZvcih2YXIgaT0wO2khPW4ubGVuZ3RoOysraSl7dmFyIHM9bltpXSxmPW1lKHMpO3N3aXRjaChmWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxQcm9wZXJ0aWVzIjpi''@;'; put 'put ''cmVhaztjYXNlIjxwcm9wZXJ0eSI6YT1JZShmLm5hbWUpO2JyZWFrO2Nhc2UiPC9wcm9wZXJ0eT4iOmE9bnVsbDticmVhaztkZWZhdWx0OmlmKDA9PT1zLmluZGV4T2YoIjx2dDoiKSl7dmFyIGM9cy5zcGxpdCgiPiIpLG89Y1swXS5zbGljZSg0KSxsPWNbMV07c3dpdGNoKG8pe2Nhc2UibHBz''@;'; put 'put ''dHIiOmNhc2UiYnN0ciI6Y2FzZSJscHdzdHIiOmNhc2UiY3kiOmNhc2UiZXJyb3IiOnJbYV09SWUobCk7YnJlYWs7Y2FzZSJib29sIjpyW2FdPVdlKGwpO2JyZWFrO2Nhc2UiaTEiOmNhc2UiaTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOnJbYV09cGFyc2VJbnQo''@;'; put 'put ''bCwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJyOCI6Y2FzZSJkZWNpbWFsIjpyW2FdPXBhcnNlRmxvYXQobCk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjpyW2FdPVhlKGwpO2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1vLnNsaWNlKC0xKSlicmVhazt0LldURiYmdHlwZW9mIGNvbnNv''@;'; put 'put ''bGU8InUiJiZjb25zb2xlLndhcm4oIlVuZXhwZWN0ZWQiLHMsbyxjKX19ZWxzZSBpZigiPC8iIT09cy5zbGljZSgwLDIpJiZ0LldURil0aHJvdyBuZXcgRXJyb3Iocyl9fXJldHVybiByfSh4LHQpKTt2YXIgdj17fTtpZigodC5ib29rU2hlZXRzfHx0LmJvb2tQcm9wcykmJihsLlNoZWV0cz9z''@;'; put 'put ''PWwuU2hlZXRzLm1hcChmdW5jdGlvbihyZSl7cmV0dXJuIHJlLm5hbWV9KTpoLldvcmtzaGVldHMmJmguU2hlZXROYW1lcy5sZW5ndGg+MCYmKHM9aC5TaGVldE5hbWVzKSx0LmJvb2tQcm9wcyYmKHYuUHJvcHM9aCx2LkN1c3Rwcm9wcz1kKSx0LmJvb2tTaGVldHMmJnR5cGVvZiBzPCJ1IiYm''@;'; put 'put ''KHYuU2hlZXROYW1lcz1zKSx0LmJvb2tTaGVldHM/di5TaGVldE5hbWVzOnQuYm9va1Byb3BzKSlyZXR1cm4gdjtzPXt9O3ZhciB1PXt9O3QuYm9va0RlcHMmJm4uY2FsY2NoYWluJiYodT1mdW5jdGlvbiBScChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gbHgo''@;'; put 'put ''ZSx0LHIpe3ZhciBhPVtdO3JldHVybiBodChlLGZ1bmN0aW9uKHMsZixjKXtpZig2Mz09PWMpYS5wdXNoKHMpO2Vsc2UgaWYoIWYuVCl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitjLnRvU3RyaW5nKDE2KSl9KSxhfShlKTpmdW5jdGlvbiBjeChlKXt2YXIgdD1bXTtp''@;'; put 'put ''ZighZSlyZXR1cm4gdDt2YXIgcj0xO3JldHVybihlLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIG49bWUoYSk7c3dpdGNoKG5bMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nh''@;'; put 'put ''c2UiPGMiOmRlbGV0ZSBuWzBdLG4uaT9yPW4uaTpuLmk9cix0LnB1c2gobil9fSksdH0oZSl9KFFlKGUsJHIobi5jYWxjY2hhaW4pKSxuLmNhbGNjaGFpbikpO3ZhciBULGcscD0wLGs9e30sTj1sLlNoZWV0cztoLldvcmtzaGVldHM9Ti5sZW5ndGgsaC5TaGVldE5hbWVzPVtdO2Zvcih2YXIg''@;'; put 'put ''TT0wO00hPU4ubGVuZ3RoOysrTSloLlNoZWV0TmFtZXNbTV09TltNXS5uYW1lO3ZhciBJPWk/ImJpbiI6InhtbCIseT1uLndvcmtib29rc1swXS5sYXN0SW5kZXhPZigiLyIpLFA9KG4ud29ya2Jvb2tzWzBdLnNsaWNlKDAseSsxKSsiX3JlbHMvIituLndvcmtib29rc1swXS5zbGljZSh5KzEp''@;'; put 'put ''KyIucmVscyIpLnJlcGxhY2UoL15cLy8sIiIpO1dyKGUsUCl8fChQPSJ4bC9fcmVscy93b3JrYm9vay4iK0krIi5yZWxzIik7dmFyIFI9SWEoTnIoZSxQLCEwKSxQLnJlcGxhY2UoL19yZWxzLiovLCJzNXMiKSk7KG4ubWV0YWRhdGF8fFtdKS5sZW5ndGg+PTEmJih0LnhsbWV0YT1mdW5jdGlv''@;'; put 'put ''biBicChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gaXgoZSx0LHIpe3ZhciBhPXtUeXBlczpbXSxDZWxsOltdLFZhbHVlOltdfSxuPXJ8fHt9LGk9W10scz0hMSxmPTI7cmV0dXJuIGh0KGUsZnVuY3Rpb24oYyxvLGwpe3N3aXRjaChsKXtjYXNlIDMzNTphLlR5''@;'; put 'put ''cGVzLnB1c2goe25hbWU6Yy5uYW1lfSk7YnJlYWs7Y2FzZSA1MTpjLmZvckVhY2goZnVuY3Rpb24oaCl7MT09Zj9hLkNlbGwucHVzaCh7dHlwZTphLlR5cGVzW2hbMF0tMV0ubmFtZSxpbmRleDpoWzFdfSk6MD09ZiYmYS5WYWx1ZS5wdXNoKHt0eXBlOmEuVHlwZXNbaFswXS0xXS5uYW1lLGlu''@;'; put 'put ''ZGV4OmhbMV19KX0pO2JyZWFrO2Nhc2UgMzM3OmY9Yz8xOjA7YnJlYWs7Y2FzZSAzMzg6Zj0yO2JyZWFrO2Nhc2UgMzU6aS5wdXNoKGwpLHM9ITA7YnJlYWs7Y2FzZSAzNjppLnBvcCgpLHM9ITE7YnJlYWs7ZGVmYXVsdDppZighby5UJiYoIXN8fG4uV1RGJiYzNSE9aVtpLmxlbmd0aC0xXSkp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIrbC50b1N0cmluZygxNikpfX0pLGF9KGUsMCxyKTpmdW5jdGlvbiBmeChlLHQscil7dmFyIGE9e1R5cGVzOltdLENlbGw6W10sVmFsdWU6W119O2lmKCFlKXJldHVybiBhO3ZhciBzLG49ITEsaT0yO3JldHVybiBlLnJlcGxh''@;'; put 'put ''Y2UodnIsZnVuY3Rpb24oZil7dmFyIGM9bWUoZik7c3dpdGNoKHJ0KGNbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxtZXRhZGF0YSI6Y2FzZSI8L21ldGFkYXRhPiI6Y2FzZSI8bWV0YWRhdGFUeXBlcyI6Y2FzZSI8L21ldGFkYXRhVHlwZXM+IjpjYXNlIjwvbWV0YWRhdGFUeXBlPiI6Y2FzZSI8''@;'; put 'put ''L2Z1dHVyZU1ldGFkYXRhPiI6Y2FzZSI8Yms+IjpjYXNlIjwvYms+IjpjYXNlIjwvcmM+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6YnJlYWs7Y2FzZSI8bWV0YWRhdGFUeXBlIjphLlR5cGVzLnB1c2goe25hbWU6Yy5uYW1l''@;'; put 'put ''fSk7YnJlYWs7Y2FzZSI8ZnV0dXJlTWV0YWRhdGEiOmZvcih2YXIgbz0wO288YS5UeXBlcy5sZW5ndGg7KytvKWEuVHlwZXNbb10ubmFtZT09Yy5uYW1lJiYocz1hLlR5cGVzW29dKTticmVhaztjYXNlIjxyYyI6MT09aT9hLkNlbGwucHVzaCh7dHlwZTphLlR5cGVzW2MudC0xXS5uYW1lLGlu''@;'; put 'put ''ZGV4OitjLnZ9KTowPT1pJiZhLlZhbHVlLnB1c2goe3R5cGU6YS5UeXBlc1tjLnQtMV0ubmFtZSxpbmRleDorYy52fSk7YnJlYWs7Y2FzZSI8Y2VsbE1ldGFkYXRhIjppPTE7YnJlYWs7Y2FzZSI8L2NlbGxNZXRhZGF0YT4iOmNhc2UiPC92YWx1ZU1ldGFkYXRhPiI6aT0yO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PHZhbHVlTWV0YWRhdGEiOmk9MDticmVhaztjYXNlIjxleHQiOm49ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOm49ITE7YnJlYWs7Y2FzZSI8cnZiIjppZighcylicmVhaztzLm9mZnNldHN8fChzLm9mZnNldHM9W10pLHMub2Zmc2V0cy5wdXNoKCtjLmkpO2JyZWFrO2RlZmF1bHQ6aWYoIW4mJnIu''@;'; put 'put ''V1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrY1swXSsiIGluIG1ldGFkYXRhIil9cmV0dXJuIGZ9KSxhfShlLDAscil9KFFlKGUsJHIobi5tZXRhZGF0YVswXSkpLG4ubWV0YWRhdGFbMF0sdCkpLChuLnBlb3BsZXx8W10pLmxlbmd0aD49MSYmKHQucGVvcGxlPWZ1bmN0aW9u''@;'; put 'put ''IHB4KGUsdCl7dmFyIHI9W10sYT0hMTtyZXR1cm4gZS5yZXBsYWNlKHZyLGZ1bmN0aW9uKGkpe3ZhciBzPW1lKGkpO3N3aXRjaChydChzWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8cGVyc29uTGlzdCI6Y2FzZSI8L3BlcnNvbkxpc3Q+IjpjYXNlIjwvcGVyc29uPiI6Y2FzZSI8ZXh0THN0Ijpj''@;'; put 'put ''YXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nhc2UiPHBlcnNvbiI6ci5wdXNoKHtuYW1lOnMuZGlzcGxheW5hbWUsaWQ6cy5pZH0pO2JyZWFrO2Nhc2UiPGV4dCI6YT0hMDticmVhaztjYXNlIjwvZXh0PiI6YT0hMTticmVhaztkZWZhdWx0Omlm''@;'; put 'put ''KCFhJiZ0LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3NbMF0rIiBpbiB0aHJlYWRlZCBjb21tZW50cyIpfXJldHVybiBpfSkscn0oUWUoZSwkcihuLnBlb3BsZVswXSkpLHQpKSxSJiYoUj1mdW5jdGlvbiBxbShlLHQpe2lmKCFlKXJldHVybiAwO3RyeXtlPXQubWFwKGZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBhLmlkfHwoYS5pZD1hLnN0clJlbElEKSxbYS5uYW1lLGVbIiFpZCJdW2EuaWRdLlRhcmdldCxKbShlWyIhaWQiXVthLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gZSYmMCE9PWUubGVuZ3RoP2U6bnVsbH0oUixsLlNoZWV0cykpO3ZhciBW''@;'; put 'put ''PVFlKGUsInhsL3dvcmtzaGVldHMvc2hlZXQueG1sIiwhMCk/MTowO2U6Zm9yKHA9MDtwIT1oLldvcmtzaGVldHM7KytwKXt2YXIgWD0ic2hlZXQiO2lmKFImJlJbcF0/KFQ9InhsLyIrUltwXVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxXcihlLFQpfHwoVD1SW3BdWzFdKSxXcihlLFQp''@;'; put 'put ''fHwoVD1QLnJlcGxhY2UoL19yZWxzXC8uKiQvLCIiKStSW3BdWzFdKSxYPVJbcF1bMl0pOlQ9KFQ9InhsL3dvcmtzaGVldHMvc2hlZXQiKyhwKzEtVikrIi4iK0kpLnJlcGxhY2UoL3NoZWV0MFwuLywic2hlZXQuIiksZz1ULnJlcGxhY2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxz''@;'; put 'put ''LyQzLnJlbHMiKSx0JiZudWxsIT10LnNoZWV0cylzd2l0Y2godHlwZW9mIHQuc2hlZXRzKXtjYXNlIm51bWJlciI6aWYocCE9dC5zaGVldHMpY29udGludWUgZTticmVhaztjYXNlInN0cmluZyI6aWYoaC5TaGVldE5hbWVzW3BdLnRvTG93ZXJDYXNlKCkhPXQuc2hlZXRzLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkodC5zaGVldHMpKXtmb3IodmFyIGI9ITEsZWU9MDtlZSE9dC5zaGVldHMubGVuZ3RoOysrZWUpIm51bWJlciI9PXR5cGVvZiB0LnNoZWV0c1tlZV0mJnQuc2hlZXRzW2VlXT09cCYmKGI9''@;'; put 'put ''MSksInN0cmluZyI9PXR5cGVvZiB0LnNoZWV0c1tlZV0mJnQuc2hlZXRzW2VlXS50b0xvd2VyQ2FzZSgpPT1oLlNoZWV0TmFtZXNbcF0udG9Mb3dlckNhc2UoKSYmKGI9MSk7aWYoIWIpY29udGludWUgZX19Wm0oZSxULGcsaC5TaGVldE5hbWVzW3BdLHAsayxzLFgsdCxsLGMsbyl9cmV0dXJu''@;'; put 'put ''IHY9e0RpcmVjdG9yeTpuLFdvcmtib29rOmwsUHJvcHM6aCxDdXN0cHJvcHM6ZCxEZXBzOnUsU2hlZXRzOnMsU2hlZXROYW1lczpoLlNoZWV0TmFtZXMsU3RyaW5nczpWYSxTdHlsZXM6byxUaGVtZXM6YyxTU0Y6TWUocGUpfSx0JiZ0LmJvb2tGaWxlcyYmKGUuZmlsZXM/KHYua2V5cz1hLHYu''@;'; put 'put ''ZmlsZXM9ZS5maWxlcyk6KHYua2V5cz1bXSx2LmZpbGVzPXt9LGUuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24obGUscmUpe2xlPWxlLnJlcGxhY2UoL15Sb290IEVudHJ5W1wvXS8sIiIpLHYua2V5cy5wdXNoKGxlKSx2LmZpbGVzW2xlXT1lLkZpbGVJbmRleFtyZV19KSkpLHQmJnQuYm9v''@;'; put 'put ''a1ZCQSYmKG4udmJhLmxlbmd0aD4wP3YudmJhcmF3PVFlKGUsJHIobi52YmFbMF0pLCEwKTpuLmRlZmF1bHRzJiZuLmRlZmF1bHRzLmJpbj09PVN4JiYodi52YmFyYXc9UWUoZSwieGwvdmJhUHJvamVjdC5iaW4iLCEwKSkpLHZ9ZnVuY3Rpb24gZWcoZSx0KXt2YXIgcj10fHx7fSxhPSJXb3Jr''@;'; put 'put ''Ym9vayIsbj12ZS5maW5kKGUsYSk7dHJ5e2lmKCEobj12ZS5maW5kKGUsYT0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7aWYoZnVuY3Rpb24gUGgoZSl7dmFyIHQ9e307dC5p''@;'; put 'put ''ZD1lLnJlYWRfc2hpZnQoMCwibHBwNCIpLHQuUj1kdChlLDQpLHQuVT1kdChlLDQpLHQuVz1kdChlLDQpfShuLmNvbnRlbnQpLCEobj12ZS5maW5kKGUsYT0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IW4uY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRl''@;'; put 'put ''ZCBmaWxlIG1pc3NpbmcgIithKTt2YXIgaT1mdW5jdGlvbiBCaChlKXt2YXIgdD1bXTtlLmwrPTQ7Zm9yKHZhciByPWUucmVhZF9zaGlmdCg0KTtyLS0gPjA7KXQucHVzaChMaChlKSk7cmV0dXJuIHR9KG4uY29udGVudCk7aWYoMSE9PWkubGVuZ3RofHwxIT09aVswXS5jb21wcy5sZW5ndGh8''@;'; put 'put ''fDAhPT1pWzBdLmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PWlbMF0ubmFtZXx8IkVuY3J5cHRlZFBhY2thZ2UiIT09aVswXS5jb21wc1swXS52KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrYSk7aWYoIShuPXZlLmZpbmQo''@;'; put 'put ''ZSxhPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhbi5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2EpO3ZhciBzPWZ1bmN0aW9uIE1oKGUpe3ZhciB0PVtdO2UubCs9NDtm''@;'; put 'put ''b3IodmFyIHI9ZS5yZWFkX3NoaWZ0KDQpO3ItLSA+MDspdC5wdXNoKGUucmVhZF9zaGlmdCgwLCJscHA0IikpO3JldHVybiB0fShuLmNvbnRlbnQpO2lmKDEhPXMubGVuZ3RofHwiU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybSIhPXNbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNy''@;'; put 'put ''eXB0ZWQgZmlsZSBiYWQgIithKTtpZighKG49dmUuZmluZChlLGE9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5n''@;'; put 'put ''ICIrYSk7IWZ1bmN0aW9uIFdoKGUpe3ZhciB0PWZ1bmN0aW9uIFVoKGUpe3ZhciB0PXt9O3JldHVybiBlLnJlYWRfc2hpZnQoNCksZS5sKz00LHQuaWQ9ZS5yZWFkX3NoaWZ0KDAsImxwcDQiKSx0Lm5hbWU9ZS5yZWFkX3NoaWZ0KDAsImxwcDQiKSx0LlI9ZHQoZSw0KSx0LlU9ZHQoZSw0KSx0''@;'; put 'put ''Llc9ZHQoZSw0KSx0fShlKTtpZih0LmVuYW1lPWUucmVhZF9zaGlmdCgwLCI4bHBwNCIpLHQuYmxrc3o9ZS5yZWFkX3NoaWZ0KDQpLHQuY21vZGU9ZS5yZWFkX3NoaWZ0KDQpLDQhPWUucmVhZF9zaGlmdCg0KSl0aHJvdyBuZXcgRXJyb3IoIkJhZCAhUHJpbWFyeSByZWNvcmQiKTtyZXR1cm4g''@;'; put 'put ''dH0obi5jb250ZW50KX1jYXRjaHt9aWYoIShuPXZlLmZpbmQoZSxhPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7dmFyIGY9ZnVuY3Rpb24gSGgoZSl7dmFyIHQ9ZHQoZSk7c3dpdGNo''@;'; put 'put ''KHQuTWlub3Ipe2Nhc2UgMjpyZXR1cm5bdC5NaW5vcixWaChlKV07Y2FzZSAzOnJldHVyblt0Lk1pbm9yLFhoKCldO2Nhc2UgNDpyZXR1cm5bdC5NaW5vcixHaChlKV19dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSB1bnJlY29nbml6ZWQgVmVyc2lvbjogIit0Lk1p''@;'; put 'put ''bm9yKX0obi5jb250ZW50KTtpZighKG49dmUuZmluZChlLGE9Ii9FbmNyeXB0ZWRQYWNrYWdlIikpfHwhbi5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2EpO2lmKDQ9PWZbMF0mJnR5cGVvZiBkZWNyeXB0X2FnaWxlPCJ1IilyZXR1''@;'; put 'put ''cm4gZGVjcnlwdF9hZ2lsZShmWzFdLG4uY29udGVudCxyLnBhc3N3b3JkfHwiIixyKTtpZigyPT1mWzBdJiZ0eXBlb2YgZGVjcnlwdF9zdGQ3NjwidSIpcmV0dXJuIGRlY3J5cHRfc3RkNzYoZlsxXSxuLmNvbnRlbnQsci5wYXNzd29yZHx8IiIscik7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlz''@;'; put 'put ''IHBhc3N3b3JkLXByb3RlY3RlZCIpfWZ1bmN0aW9uIEtuKGUsdCl7dmFyIHI9IiI7c3dpdGNoKCh0fHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm5bZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSxlWzddXTtjYXNlImJhc2U2NCI6''@;'; put 'put ''cj1PcihlLnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFyeSI6cj1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyh0JiZ0LnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW3IuY2hhckNvZGVBdCgwKSxyLmNoYXJDb2RlQXQoMSksci5jaGFy''@;'; put 'put ''Q29kZUF0KDIpLHIuY2hhckNvZGVBdCgzKSxyLmNoYXJDb2RlQXQoNCksci5jaGFyQ29kZUF0KDUpLHIuY2hhckNvZGVBdCg2KSxyLmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIHZjKGUsdCl7dmFyIHI9MDtlOmZvcig7cjxlLmxlbmd0aDspc3dpdGNoKGUuY2hhckNvZGVBdChyKSl7Y2FzZSAx''@;'; put 'put ''MDpjYXNlIDEzOmNhc2UgMzI6KytyO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIFVuKGUuc2xpY2UociksdCk7ZGVmYXVsdDpicmVhayBlfXJldHVybiBjYS50b193b3JrYm9vayhlLHQpfWZ1bmN0aW9uIFluKGUsdCxyLGEpe3JldHVybiBhPyhyLnR5cGU9InN0cmluZyIsY2EudG9fd29ya2Jvb2so''@;'; put 'put ''ZSxyKSk6Y2EudG9fd29ya2Jvb2sodCxyKX1mdW5jdGlvbiBJMChlLHQpe3IwKCk7dmFyIHI9dHx8e307aWYodHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBJMChuZXcgVWludDhBcnJheShlKSwoKHI9TWUocikpLnR5cGU9ImFycmF5Iixy''@;'; put 'put ''KSk7dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZlIGluc3RhbmNlb2YgVWludDhBcnJheSYmIXIudHlwZSYmKHIudHlwZT10eXBlb2YgRGVubzwidSI/ImJ1ZmZlciI6ImFycmF5Iik7dmFyIG4sYT1lLGk9ITE7aWYoci5jZWxsU3R5bGVzJiYoci5jZWxsTkY9ITAsci5zaGVldFN0dWJzPSEwKSxo''@;'; put 'put ''YT17fSxyLmRhdGVORiYmKGhhLmRhdGVORj1yLmRhdGVORiksci50eXBlfHwoci50eXBlPVNlJiZCdWZmZXIuaXNCdWZmZXIoZSk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09ci50eXBlJiYoci50eXBlPVNlPyJidWZmZXIiOiJiaW5hcnkiLGE9ZnVuY3Rpb24gY28oZSl7aWYodHlwZW9m''@;'; put 'put ''IERlbm88InUiKXJldHVybiBEZW5vLnJlYWRGaWxlU3luYyhlKTtpZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciB0PUZpbGUoZSk7dC5vcGVuKCJyIiksdC5lbmNvZGluZz0iYmluYXJ5Ijt2YXIgcj10LnJlYWQoKTtyZXR1cm4gdC5j''@;'; put 'put ''bG9zZSgpLHJ9Y2F0Y2goYSl7aWYoIWEubWVzc2FnZXx8IWEubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBhfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIrZSl9KGUpLHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmIVNlJiYoci50eXBlPSJhcnJheSIpKSwic3Ry''@;'; put 'put ''aW5nIj09ci50eXBlJiYoaT0hMCxyLnR5cGU9ImJpbmFyeSIsci5jb2RlcGFnZT02NTAwMSxhPWZ1bmN0aW9uIGZnKGUpe3JldHVybiBlLm1hdGNoKC9bXlx4MDAtXHg3Rl0vKT90dChlKTplfShlKSksImFycmF5Ij09ci50eXBlJiZ0eXBlb2YgVWludDhBcnJheTwidSImJmUgaW5zdGFuY2Vv''@;'; put 'put ''ZiBVaW50OEFycmF5JiZ0eXBlb2YgQXJyYXlCdWZmZXI8InUiKXt2YXIgcz1uZXcgQXJyYXlCdWZmZXIoMyksZj1uZXcgVWludDhBcnJheShzKTtpZihmLmZvbz0iYmFyIiwhZi5mb28pcmV0dXJuKHI9TWUocikpLnR5cGU9ImFycmF5IixJMChNMChhKSxyKX1zd2l0Y2goKG49S24oYSxyKSlb''@;'; put 'put ''MF0pe2Nhc2UgMjA4OmlmKDIwNz09PW5bMV0mJjE3PT09blsyXSYmMjI0PT09blszXSYmMTYxPT09bls0XSYmMTc3PT09bls1XSYmMjY9PT1uWzZdJiYyMjU9PT1uWzddKXJldHVybiBmdW5jdGlvbiBhZyhlLHQpe3JldHVybiB2ZS5maW5kKGUsIkVuY3J5cHRlZFBhY2thZ2UiKT9lZyhlLHQp''@;'; put 'put ''OktmKGUsdCl9KHZlLnJlYWQoYSxyKSxyKTticmVhaztjYXNlIDk6aWYoblsxXTw9OClyZXR1cm4gS2YoYSxyKTticmVhaztjYXNlIDYwOnJldHVybiBVbihhLHIpO2Nhc2UgNzM6aWYoNzM9PT1uWzFdJiY0Mj09PW5bMl0mJjA9PT1uWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJbWFnZSBG''@;'; put 'put ''aWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1uWzFdKXJldHVybiBmdW5jdGlvbiBnaChlLHQpe3ZhciByPXR8fHt9LGE9ISFyLldURjtyLldURj0hMDt0cnl7dmFyIG49ZWYudG9fd29ya2Jvb2soZSxyKTtyZXR1cm4gci5XVEY9YSxufWNhdGNoKGkpe2lmKHIuV1RGPWEsIWku''@;'; put 'put ''bWVzc2FnZS5tYXRjaCgvU1lMSyBiYWQgcmVjb3JkIElELykmJmEpdGhyb3cgaTtyZXR1cm4gY2EudG9fd29ya2Jvb2soZSx0KX19KGEscik7YnJlYWs7Y2FzZSA4NDppZig2NT09PW5bMV0mJjY2PT09blsyXSYmNzY9PT1uWzNdKXJldHVybiByZi50b193b3JrYm9vayhhLHIpO2JyZWFrO2Nh''@;'; put 'put ''c2UgODA6cmV0dXJuIDc1PT09blsxXSYmblsyXTw5JiZuWzNdPDk/ZnVuY3Rpb24gbmcoZSx0KXt2YXIgYT1lLG49dHx8e307cmV0dXJuIG4udHlwZXx8KG4udHlwZT1TZSYmQnVmZmVyLmlzQnVmZmVyKGUpPyJidWZmZXIiOiJiYXNlNjQiKSxRbShSaShhLG4pLG4pfShhLHIpOlluKGUsYSxy''@;'; put 'put ''LGkpO2Nhc2UgMjM5OnJldHVybiA2MD09PW5bM10/VW4oYSxyKTpZbihlLGEscixpKTtjYXNlIDI1NTppZigyNTQ9PT1uWzFdKXJldHVybiBmdW5jdGlvbiBzZyhlLHQpe3ZhciByPWU7cmV0dXJuImJhc2U2NCI9PXQudHlwZSYmKHI9T3IocikpLHI9T2UudXRpbHMuZGVjb2RlKDEyMDAsci5z''@;'; put 'put ''bGljZSgyKSwic3RyIiksdC50eXBlPSJiaW5hcnkiLHZjKHIsdCl9KGEscik7aWYoMD09PW5bMV0mJjI9PT1uWzJdJiYwPT09blszXSlyZXR1cm4ganQudG9fd29ya2Jvb2soYSxyKTticmVhaztjYXNlIDA6aWYoMD09PW5bMV0mJihuWzJdPj0yJiYwPT09blszXXx8MD09PW5bMl0mJig4PT09''@;'; put 'put ''blszXXx8OT09PW5bM10pKSlyZXR1cm4ganQudG9fd29ya2Jvb2soYSxyKTticmVhaztjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAxNDA6cmV0dXJuIFRuLnRvX3dvcmtib29rKGEscik7Y2FzZSAxMjM6aWYoOTI9PT1uWzFdJiYxMTQ9PT1uWzJdJiYxMTY9PT1uWzNdKXJldHVybiBv''@;'; put 'put ''Zi50b193b3JrYm9vayhhLHIpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBmdW5jdGlvbiBpZyhlLHQpe3ZhciByPSIiLGE9S24oZSx0KTtzd2l0Y2godC50eXBlKXtjYXNlImJhc2U2NCI6cj1PcihlKTticmVhaztjYXNlImJpbmFyeSI6cj1lO2JyZWFrO2Nhc2UiYnVm''@;'; put 'put ''ZmVyIjpyPWUudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOnI9UHQoZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrdC50eXBlKX1yZXR1cm4gMjM5PT1hWzBdJiYxODc9PWFbMV0mJjE5MT09YVsyXSYmKHI9QmUocikpLHQu''@;'; put 'put ''dHlwZT0iYmluYXJ5Iix2YyhyLHQpfShhLHIpO2Nhc2UgMTM3OmlmKDgwPT09blsxXSYmNzg9PT1uWzJdJiY3MT09PW5bM10pdGhyb3cgbmV3IEVycm9yKCJQTkcgSW1hZ2UgRmlsZSBpcyBub3QgYSBzcHJlYWRzaGVldCIpfXJldHVybiBtaC5pbmRleE9mKG5bMF0pPi0xJiZuWzJdPD0xMiYm''@;'; put 'put ''blszXTw9MzE/VG4udG9fd29ya2Jvb2soYSxyKTpZbihlLGEscixpKX1mdW5jdGlvbiBfYyhlLHQscixhLG4saSxzLGYpe3ZhciBjPUtlKHIpLG89Zi5kZWZ2YWwsbD1mLnJhd3x8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLCJyYXciKSxoPSEwLHg9MT09PW4/W106''@;'; put 'put ''e307aWYoMSE9PW4paWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeCwiX19yb3dOdW1fXyIse3ZhbHVlOnIsZW51bWVyYWJsZTohMX0pfWNhdGNoe3guX19yb3dOdW1fXz1yfWVsc2UgeC5fX3Jvd051bV9fPXI7aWYoIXN8fGVbcl0pZm9yKHZhciBk''@;'; put 'put ''PXQucy5jO2Q8PXQuZS5jOysrZCl7dmFyIHY9cz9lW3JdW2RdOmVbYVtkXStjXTtpZih2b2lkIDAhPT12JiZ2b2lkIDAhPT12LnQpe3ZhciB1PXYudjtzd2l0Y2godi50KXtjYXNlInoiOmlmKG51bGw9PXUpYnJlYWs7Y29udGludWU7Y2FzZSJlIjp1PTA9PXU/bnVsbDp2b2lkIDA7YnJlYWs7''@;'; put 'put ''Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5cGUgIit2LnQpfWlmKG51bGwhPWlbZF0pe2lmKG51bGw9PXUpaWYoImUiPT12LnQmJm51bGw9PT11KXhbaVtkXV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9''@;'; put 'put ''PW8peFtpW2RdXT1vO2Vsc2V7aWYoIWx8fG51bGwhPT11KWNvbnRpbnVlO3hbaVtkXV09bnVsbH1lbHNlIHhbaVtkXV09bCYmKCJuIiE9PXYudHx8Im4iPT09di50JiYhMSE9PWYucmF3TnVtYmVycyk/dTphdCh2LHUsZik7bnVsbCE9dSYmKGg9ITEpfX1lbHNle2lmKHZvaWQgMD09PW8pY29u''@;'; put 'put ''dGludWU7bnVsbCE9aVtkXSYmKHhbaVtkXV09byl9fXJldHVybntyb3c6eCxpc2VtcHR5Omh9fWZ1bmN0aW9uIGVpKGUsdCxyLGEpe3ZhciBuPTE7aWYoIXIpZm9yKDtuPD02NTUzNSYmLTEhPWUuU2hlZXROYW1lcy5pbmRleE9mKHI9IlNoZWV0IituKTsrK24scj12b2lkIDApO2lmKCFyfHxl''@;'; put 'put ''LlNoZWV0TmFtZXMubGVuZ3RoPj02NTUzNSl0aHJvdyBuZXcgRXJyb3IoIlRvbyBtYW55IHdvcmtzaGVldHMiKTtpZihhJiZlLlNoZWV0TmFtZXMuaW5kZXhPZihyKT49MCl7dmFyIGk9ci5tYXRjaCgvKF4uKj8pKFxkKykkLyk7bj1pJiYraVsyXXx8MDt2YXIgcz1pJiZpWzFdfHxyO2Zvcigr''@;'; put 'put ''K247bjw9NjU1MzUmJi0xIT1lLlNoZWV0TmFtZXMuaW5kZXhPZihyPXMrbik7KytuKTt9aWYoZnVuY3Rpb24gVmYoZSx0KXtpZihlLmxlbmd0aD4zMSl7aWYodClyZXR1cm4hMTt0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWVzIGNhbm5vdCBleGNlZWQgMzEgY2hhcnMiKX12YXIgcj0hMDty''@;'; put 'put ''ZXR1cm4gZnAuZm9yRWFjaChmdW5jdGlvbihhKXtpZigtMSE9ZS5pbmRleE9mKGEpKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWUgY2Fubm90IGNvbnRhaW4gOiBcXCAvID8gKiBbIF0iKTtyPSExfX0pLHJ9KHIpLGUuU2hlZXROYW1lcy5pbmRleE9mKHIpPj0wKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8IityKyJ8IGFscmVhZHkgZXhpc3RzISIpO3JldHVybiBlLlNoZWV0TmFtZXMucHVzaChyKSxlLlNoZWV0c1tyXT10LHJ9YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtkYXRhOmV9KT0+e2NvbnN0e2RhdGE6dCxvcHRzOnJ9PWU7dHJ5''@;'; put 'put ''e2NvbnN0IGE9STAodCxyKTtwb3N0TWVzc2FnZSh7ZXZlbnQ6InJlYWRpbmdfZW5kIix3b3JrYm9vazphfSl9Y2F0Y2goYSl7YS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikmJnBvc3RNZXNzYWdlKHtlcnJvcjphfSl9fSl9KSgpOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=index-html; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+CiAgICA8dGl0bGU+RGF0YSBDb250cm9sbGVyPC90aXRsZT4KICAgIDwhLS0gPGJhc2UgaHJlZj0iLyI+IC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPG1l''@;'; put 'put ''dGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJuYW1lIiBjb250ZW50PSJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU8KuIi8+CiAgICA8bWV0YSBpdGVtcHJvcD0iZGVzY3JpcHRpb24iIGNvbnRl''@;'; put 'put ''bnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJpbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVu''@;'; put 'put ''dD0iaHR0cDovL2RlbW8uZGF0YWNvbnRyb2xsZXIuaW8iLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIHBy''@;'; put 'put ''b3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+Cgog''@;'; put 'put ''ICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4KICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uv''@;'; put 'put ''eC1pY29uIiBocmVmPSJpbWFnZXMvZmF2aWNvbi5pY28iLz4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy5lNDU4NTQ2ODE5MzRlOTg2LmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6''@;'; put 'put ''IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIgU0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNl''@;'; put 'put ''ci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJl''@;'; put 'put ''c3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3RhZ2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAg''@;'; put 'put ''ICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxzYXNqcyBzZXJ2ZXJ1cmw9IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kYyIgc2VydmVydHlwZT0iU0FTSlMiIGxvZ2lubWVjaGFuaXNtPSJSZWRpcmVjdGVkIiBkZWJ1Zz0iZmFsc2UiIHVzZWNv''@;'; put 'put ''bXB1dGVhcGk9InRydWUiIGNvbnRleHRuYW1lPSJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiIGFkbWluZ3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIiBkY3BhdGg9Ii90bXAvZGMiIGhvdGxpY2VuY2VrZXk9Im5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj4KICA8L3Nh''@;'; put 'put ''c2pzPgoKICA8Ym9keSBjZHMtdGhlbWU9ImxpZ2h0IiBjbGFzcz0ibS0wIj4KICAgIDxteS1hcHA+PC9teS1hcHA+CiAgPHNjcmlwdCBzcmM9InJ1bnRpbWUuNDAyZmMzY2ZiYzdlMWJkNC5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48c2NyaXB0IHNyYz0icG9seWZpbGxzLmRmMjdhMjQ2''@;'; put 'put ''NTQwZWE1ZWUuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InNjcmlwdHMuZjQxOGQ3ZTcxZGJmZDMwOS5qcyIgZGVmZXI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Im1haW4uYmM5NzdmMjc5Yjk4OWI4MC5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48L2JvZHk+Cjwv''@;'; put 'put ''aHRtbD4K'';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.bc977f279b989b80-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNzQ4MjpmdW5jdGlvbih1ZSl7dWUuZXhwb3J0cz1mdW5jdGlvbihYKXt2YXIgeT17fTtmdW5jdGlvbiBJKF8pe2lmKHlbX10pcmV0dXJuIHlb''@;'; put 'put ''X10uZXhwb3J0czt2YXIgZz15W19dPXtpOl8sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gWFtfXS5jYWxsKGcuZXhwb3J0cyxnLGcuZXhwb3J0cyxJKSxnLmw9ITAsZy5leHBvcnRzfXJldHVybiBJLm09WCxJLmM9eSxJLmQ9ZnVuY3Rpb24oXyxnLEIpe0kubyhfLGcpfHxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoXyxnLHtlbnVtZXJhYmxlOiEwLGdldDpCfSl9LEkucj1mdW5jdGlvbihfKXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxJLnQ9ZnVuY3Rpb24oXyxnKXtpZigxJmcmJihfPUkoXykpLDgmZ3x8NCZnJiYib2JqZWN0Ij09dHlwZW9mIF8mJl8mJl8uX19lc01vZHVsZSlyZXR1cm4gXzt2YXIgQj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKEkucihCKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoQiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6X30pLDImZyYmInN0cmluZyIhPXR5cGVvZiBfKWZvcih2YXIgdyBpbiBfKUkuZChCLHcsZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19LmJpbmQobnVsbCx3KSk7cmV0dXJuIEJ9LEkubj1mdW5jdGlv''@;'; put 'put ''bihfKXt2YXIgZz1fJiZfLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gXy5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBffTtyZXR1cm4gSS5kKGcsImEiLGcpLGd9LEkubz1mdW5jdGlvbihfLGcpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXyxn''@;'; put 'put ''KX0sSS5wPSIiLEkoSS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoq''@;'; put 'put ''KiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5DbGFyaXR5SWNvbnNBcGk9dm9pZCAwO3ZhciBfPUkoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1w''@;'; put 'put ''bGF0ZS1vYnNlcnZlci50cyIpLGc9e30sQj1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB3LnNpbmdsZUluc3RhbmNlfHwody5zaW5nbGVJbnN0YW5jZT1uZXcgdyksdy5zaW5n''@;'; put 'put ''bGVJbnN0YW5jZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx3LnByb3RvdHlwZS52YWxpZGF0ZU5hbWU9ZnVuY3Rpb24oUCl7aWYoMD09PVAubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyEiKTtp''@;'; put 'put ''ZigvXHMvLnRlc3QoUCkpdGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3Qgbm90IGNvbnRhaW4gYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVycyEiKTtyZXR1cm4hMH0sdy5wcm90b3R5cGUubm9ybWFsaXplU2hhcGVOYW1lPWZ1bmN0aW9uKFApe3JldHVybiBQLnRvTG93''@;'; put 'put ''ZXJDYXNlKCl9LHcucHJvdG90eXBlLnNldEljb25UZW1wbGF0ZT1mdW5jdGlvbihQLEYpe3ZhciBPPUYudHJpbSgpO3RoaXMudmFsaWRhdGVOYW1lKFApJiYoUD10aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShQKSxnW1BdJiZkZWxldGUgZ1tQXSxnW1BdPU8sXy5TaGFwZVRlbXBsYXRlT2JzZXJ2''@;'; put 'put ''ZXIuaW5zdGFuY2UuZW1pdENoYW5nZXMoUCxPKSl9LHcucHJvdG90eXBlLnNldEljb25BbGlhc2VzPWZ1bmN0aW9uKFAsRixPKXtmb3IodmFyIHo9MCxOPU87ejxOLmxlbmd0aDt6Kyspe3ZhciBMPU5bel07dGhpcy52YWxpZGF0ZU5hbWUoTCkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShQLEws''@;'; put 'put ''e2dldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFApe2lmKCJvYmplY3QiIT10eXBlb2YgUCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRl''@;'; put 'put ''cmFsIHBhc3NlZCBpbiB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6ICJzaGFwZS10ZW1wbGF0ZSIgfScpO2Zvcih2YXIgRiBpbiBQKVAuaGFzT3duUHJvcGVydHkoRikmJnRoaXMuc2V0SWNvblRlbXBsYXRlKEYsUFtGXSl9LHcucHJvdG90''@;'; put 'put ''eXBlLmhhcz1mdW5jdGlvbihQKXtyZXR1cm4hIWdbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCldfSx3LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oUCl7aWYoIVApcmV0dXJuIGc7aWYoInN0cmluZyIhPXR5cGVvZiBQKXRocm93IG5ldyBUeXBlRXJyb3IoIk9ubHkgc3RyaW5nIGFyZ3VtZW50''@;'; put 'put ''IGlzIGFsbG93ZWQgaW4gdGhpcyBtZXRob2QuIik7cmV0dXJuIGdbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCldfSx3LnByb3RvdHlwZS5hbGlhcz1mdW5jdGlvbihQKXtpZigib2JqZWN0IiE9dHlwZW9mIFApdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmpl''@;'; put 'put ''Y3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiBbImFsaWFzLW5hbWUiLCAuLi5dIH0nKTtmb3IodmFyIEYgaW4gUClpZihQLmhhc093blByb3BlcnR5KEYpKXtpZighZy5oYXNPd25Qcm9wZXJ0eShGKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoJ0FuIGljb24gIicrRisiXCIgeW91IGFyZSB0cnlpbmcgdG8gc2V0IGFsaWFzZXMgdG8gZG9lc24ndCBleGlzdCBpbiB0aGUgQ2xhcml0eSBJY29ucyBzZXRzISIpO3RoaXMuc2V0SWNvbkFsaWFzZXMoZyxGLFBbRl0pfX0sd30oKTt5LkNsYXJpdHlJY29uc0FwaT1C''@;'; put 'put ''fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQu''@;'; put 'put ''dHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSkseS5DbGFyaXR5SWNvbkVsZW1lbnQ9dm9pZCAwO3ZhciBfPUkoCi8qISAuL2Nsci1pY29ucy1hcGkgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiKSxnPUkoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICov''@;'; put 'put ''CiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLEI9MCx3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt3LmNsYXNzTmFtZT0iaXMtb2ZmLXNjcmVlbiI7dmFyIFA9ZnVuY3Rpb24oKXtyZXR1cm4gSFRNTEVsZW1lbnQuYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBGKCl7dmFyIE89UC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIE8uY2xySWNvblVuaXFJZD0iX2Nscl9pY29uXyIrQixCKyssT30ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJihQPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3Ry''@;'; put 'put ''dWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLHkuQ2xhcml0eUljb25FbGVtZW50PUYsRi5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChGLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7''@;'; put 'put ''Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpGfX0pKS5jb25zdHJ1Y3Rvcj1GLEYucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciBPPXcuY2xvbmVOb2RlKCExKTtPLmlkPXRoaXMuY2xySWNvblVuaXFJZCxPLnRleHRDb250''@;'; put 'put ''ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKE8pfSxGLnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oTyl7IU51bWJlcihPKXx8TnVtYmVyKE8pPDA/KHRoaXMuc3R5bGUud2lkdGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5z''@;'; put 'put ''dHlsZS53aWR0aD1PKyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9TysicHgiKX0sRi5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKE8pe3JldHVybiBPLnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LEYucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIE89dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgej10aGlzLmdldEF0dHJpYnV0ZSgic2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09eiYmKHRo''@;'; put 'put ''aXMuY3VycmVudFNpemVBdHRyVmFsPXosdGhpcy5fc2V0SWNvblNpemUoeikpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgTj10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hhcGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv''@;'; put 'put ''bj1nLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhOLGZ1bmN0aW9uKFUpe08uX2luamVjdFRlbXBsYXRlKFUpfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPU4sIV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJW''@;'; put 'put ''YWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgTD1fLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihMPT09dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVU''@;'; put 'put ''ZW1wbGF0ZT1MfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgSz10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1LJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUspLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0''@;'; put 'put ''dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LEYucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihPLHosTil7dmFyIEw9dGhpcztpZigic2l6ZSI9PT1PJiZ0aGlzLl9zZXRJY29uU2l6ZShOKSwic2hhcGUiPT09Tyl7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRy''@;'; put 'put ''VmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKE4pLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1nLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJz''@;'; put 'put ''Y3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oSyl7TC5faW5qZWN0VGVtcGxhdGUoSyl9KSksIV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUo''@;'; put 'put ''KTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT1PJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPU4sIXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVj''@;'; put 'put ''dFRlbXBsYXRlKCl9LEYucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxGLnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgTz10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksTj10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO08/TyYmTy5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmTi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsTysiICIrdGhpcy5jbHJJ''@;'; put 'put ''Y29uVW5pcUlkKTpOLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxGLnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oTyl7TyYmTyE9PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRl''@;'; put 'put ''PU8pLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0sRi5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgs''@;'; put 'put ''eSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuQ2xhcml0eUljb25zPXZvaWQgMDt2YXIgXz1JKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksZz1J''@;'; put 'put ''KAovKiEgLi9jbHItaWNvbnMtZWxlbWVudCAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiKSxCPUkoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1fLkNsYXJpdHlJ''@;'; put 'put ''Y29uc0FwaS5pbnN0YW5jZTt5LkNsYXJpdHlJY29ucz13LHcuYWRkKEIuQ29yZVNoYXBlcyksdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpfHwod2luZG93LkNsYXJpdHlJY29ucz13KSxjdXN0b21FbGVtZW50cy5nZXQoImNsci1pY29u''@;'; put 'put ''Iil8fGN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY2xyLWljb24iLGcuQ2xhcml0eUljb25FbGVtZW50KSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAog''@;'; put 'put ''ICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZv''@;'; put 'put ''dW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Db3JlU2hhcGVzPXkuQ2xyU2hhcGVBcnJvdz15LkNsclNoYXBlU3RlcEZvcndhcmQyPXkuQ2xyU2hhcGVFeWVIaWRlPXkuQ2xyU2hhcGVF''@;'; put 'put ''eWU9eS5DbHJTaGFwZUV2ZW50PXkuQ2xyU2hhcGVDYWxlbmRhcj15LkNsclNoYXBlQW5nbGVEb3VibGU9eS5DbHJTaGFwZVZpZXdDb2x1bW5zPXkuQ2xyU2hhcGVTZWFyY2g9eS5DbHJTaGFwZVZtQnVnPXkuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPXkuQ2xyU2hhcGVGaWx0ZXJHcmlkPXku''@;'; put 'put ''Q2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPXkuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9eS5DbHJTaGFwZUNsb3VkPXkuQ2xyU2hhcGVJbWFnZT15LkNsclNoYXBlQmVsbD15LkNsclNoYXBlRm9sZGVyT3Blbj15LkNsclNoYXBlRm9sZGVyPXkuQ2xyU2hhcGVBbmdsZT15LkNsclNoYXBl''@;'; put 'put ''VXNlcj15LkNsclNoYXBlQmFycz15LkNsclNoYXBlSGVscEluZm89eS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD15LkNsclNoYXBlRXJyb3JTdGFuZGFyZD15LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPXkuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9eS5DbHJTaGFwZUluZm9DaXJjbGU9eS5DbHJT''@;'; put 'put ''aGFwZUNoZWNrQ2lyY2xlPXkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT15LkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT15LkNsclNoYXBlVGltZXM9eS5DbHJTaGFwZUNoZWNrPXkuQ2xyU2hhcGVDb2c9eS5DbHJTaGFwZUhvbWU9eS5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAw''@;'; put 'put ''O3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3Zn''@;'; put 'put ''LXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMy''@;'; put 'put ''LDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4n''@;'; put 'put ''KSx5LkNsclNoYXBlSG9tZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjks''@;'; put 'put ''MTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwx''@;'; put 'put ''LDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZa''@;'; put 'put ''Ii8+JykseS5DbHJTaGFwZUNvZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIz''@;'; put 'put ''Yy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQt''@;'; put 'put ''Mi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiww''@;'; put 'put ''LjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEu''@;'; put 'put ''NWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40''@;'; put 'put ''YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIx''@;'; put 'put ''Yy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wt''@;'; put 'put ''My4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43''@;'; put 'put ''LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIu''@;'; put 'put ''OC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdM''@;'; put 'put ''MzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4z''@;'; put 'put ''Yy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0''@;'; put 'put ''LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAu''@;'; put 'put ''OGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4''@;'; put 'put ''LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRj''@;'; put 'put ''MC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42''@;'; put 'put ''LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwx''@;'; put 'put ''LjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40''@;'; put 'put ''LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhs''@;'; put 'put ''MC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIs''@;'; put 'put ''NC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4z''@;'; put 'put ''LDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAu''@;'; put 'put ''MiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdj''@;'; put 'put ''My45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYt''@;'; put 'put ''MS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3''@;'; put 'put ''YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAs''@;'; put 'put ''MCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYy''@;'; put 'put ''LDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgt''@;'; put 'put ''LjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThW''@;'; put 'put ''MTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMu''@;'; put 'put ''M2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQz''@;'; put 'put ''LjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEu''@;'; put 'put ''NjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42''@;'; put 'put ''MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1''@;'; put 'put ''QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgs''@;'; put 'put ''MWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAs''@;'; put 'put ''MCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4z''@;'; put 'put ''OGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYx''@;'; put 'put ''LjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywx''@;'; put 'put ''M0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlQ2hlY2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''My43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSx5LkNsclNoYXBlVGltZXM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+''@;'; put 'put ''JykseS5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywx''@;'; put 'put ''LjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEt''@;'; put 'put ''Ljg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywz''@;'; put 'put ''LDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEu''@;'; put 'put ''NzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSx5LkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4''@;'; put 'put ''LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEs''@;'; put 'put ''MSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43''@;'; put 'put ''MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSx5LkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZa''@;'; put 'put ''bTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYu''@;'; put 'put ''NzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAt''@;'; put 'put ''Mi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLHkuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIx''@;'; put 'put ''MS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEs''@;'; put 'put ''MSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSx5LkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEw''@;'; put 'put ''LjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEs''@;'; put 'put ''MSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSx5LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJN''@;'; put 'put ''MjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i''@;'; put 'put ''TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JykseS5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAs''@;'; put 'put ''Zy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i''@;'; put 'put ''TTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYs''@;'; put 'put ''MTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4''@;'; put 'put ''LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JykseS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxnLmNsckljb25TVkcpKCc8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwx''@;'; put 'put ''LTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2''@;'; put 'put ''LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQz''@;'; put 'put ''NDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYz''@;'; put 'put ''MzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4w''@;'; put 'put ''NDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3''@;'; put 'put ''OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIy''@;'; put 'put ''MTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEz''@;'; put 'put ''LjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44''@;'; put 'put ''LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLHkuQ2xyU2hhcGVIZWxwSW5mbz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEu''@;'; put 'put ''MTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUu''@;'; put 'put ''NzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0w''@;'; put 'put ''LTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4z''@;'; put 'put ''LjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2Mt''@;'; put 'put ''MS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3''@;'; put 'put ''LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4''@;'; put 'put ''LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJT''@;'; put 'put ''aGFwZUJhcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJh''@;'; put 'put ''MSwxLDAsMCwxLDAsMloiLz4nKSx5LkNsclNoYXBlVXNlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFI''@;'; put 'put ''N1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk''@;'; put 'put ''Z2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2''@;'; put 'put ''LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4z''@;'; put 'put ''OSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUx''@;'; put 'put ''LDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEs''@;'; put 'put ''MCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUFuZ2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1''@;'; put 'put ''LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSx5LkNsclNoYXBlRm9sZGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx''@;'; put 'put ''Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0y''@;'; put 'put ''SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAs''@;'; put 'put ''MTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40Mkwx''@;'; put 'put ''NC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIy''@;'; put 'put ''LjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAs''@;'; put 'put ''MTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgx''@;'; put 'put ''LjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5''@;'; put 'put ''LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAs''@;'; put 'put ''MCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIs''@;'; put 'put ''MiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTks''@;'; put 'put ''MCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlB''@;'; put 'put ''MS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42''@;'; put 'put ''MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCww''@;'; put 'put ''LDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4y''@;'; put 'put ''Ni0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVI''@;'; put 'put ''NkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEu''@;'; put 'put ''NTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwz''@;'; put 'put ''MUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1Ii8+JykseS5DbHJTaGFwZUJlbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQu''@;'; put 'put ''ODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCww''@;'; put 'put ''LDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3''@;'; put 'put ''LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIw''@;'; put 'put ''LjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUu''@;'; put 'put ''MzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYz''@;'; put 'put ''LDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYu''@;'; put 'put ''MTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMu''@;'; put 'put ''MzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcu''@;'; put 'put ''OGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCww''@;'; put 'put ''LDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUs''@;'; put 'put ''MjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFW''@;'; put 'put ''My4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlSW1hZ2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45''@;'; put 'put ''MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwx''@;'; put 'put ''LTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNB''@;'; put 'put ''MywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUNsb3VkPSgwLGcuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42''@;'; put 'put ''NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywy''@;'; put 'put ''NC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0i''@;'; put 'put ''TTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMx''@;'; put 'put ''SDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkEx''@;'; put 'put ''MC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5''@;'; put 'put ''LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDku''@;'; put 'put ''OSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVy''@;'; put 'put ''dCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42''@;'; put 'put ''NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFh''@;'; put 'put ''Ny40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5''@;'; put 'put ''LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwx''@;'; put 'put ''LDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNIb3Jp''@;'; put 'put ''em9udGFsPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0i''@;'; put 'put ''Mi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIu''@;'; put 'put ''OSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5D''@;'; put 'put ''bHJTaGFwZUZpbHRlckdyaWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjku''@;'; put 'put ''N0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1''@;'; put 'put ''YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSx5LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw''@;'; put 'put ''LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwu''@;'; put 'put ''MTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JykseS5DbHJTaGFwZVZtQnVnPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNv''@;'; put 'put ''bGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAs''@;'; put 'put ''MCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1''@;'; put 'put ''LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAs''@;'; put 'put ''MCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVh''@;'; put 'put ''MS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAs''@;'; put 'put ''MCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0i''@;'; put 'put ''I2ZmZmZmZiIvPicpLHkuQ2xyU2hhcGVTZWFyY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIu''@;'; put 'put ''MDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1''@;'; put 'put ''LDMzLjI5WiIvPicpLHkuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIs''@;'; put 'put ''MiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JykseS5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlM''@;'; put 'put ''MTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCww''@;'; put 'put ''LDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLHkuQ2xyU2hhcGVDYWxlbmRhcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''MSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSww''@;'; put 'put ''LDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCww''@;'; put 'put ''LDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdl''@;'; put 'put ''ZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''MS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFW''@;'; put 'put ''MzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIg''@;'; put 'put ''aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1h''@;'; put 'put ''bGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiww''@;'; put 'put ''LDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgy''@;'; put 'put ''Wm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCww''@;'; put 'put ''LDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEs''@;'; put 'put ''MSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4''@;'; put 'put ''LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01''@;'; put 'put ''SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42''@;'; put 'put ''OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4''@;'; put 'put ''VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRXZlbnQ9KDAsZy5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwz''@;'; put 'put ''MC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1''@;'; put 'put ''LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4''@;'; put 'put ''SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAs''@;'; put 'put ''MCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40''@;'; put 'put ''MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAy''@;'; put 'put ''MC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0y''@;'; put 'put ''Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2Ex''@;'; put 'put ''LDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZo''@;'; put 'put ''LTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwx''@;'; put 'put ''Mi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwx''@;'; put 'put ''LDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5''@;'; put 'put ''LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMu''@;'; put 'put ''NzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3''@;'; put 'put ''LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQu''@;'; put 'put ''MDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVFeWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40''@;'; put 'put ''OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQz''@;'; put 'put ''LDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAs''@;'; put 'put ''MSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUz''@;'; put 'put ''TDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMu''@;'; put 'put ''MjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSx5''@;'; put 'put ''LkNsclNoYXBlRXllSGlkZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0''@;'; put 'put ''Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2''@;'; put 'put ''LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4z''@;'; put 'put ''Ny0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwx''@;'; put 'put ''LjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEu''@;'; put 'put ''MTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUz''@;'; put 'put ''Yy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTku''@;'; put 'put ''OTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgs''@;'; put 'put ''MTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwx''@;'; put 'put ''Ny4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSx5LkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcu''@;'; put 'put ''MDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNh''@;'; put 'put ''MS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUFycm93PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUu''@;'; put 'put ''NjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JykseS5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOnku''@;'; put 'put ''Q2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6eS5DbHJTaGFwZUhvbWUsY29nOnkuQ2xyU2hhcGVDb2csY2hlY2s6eS5DbHJTaGFwZUNoZWNrLHRpbWVzOnkuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1h''@;'; put 'put ''dGlvbi1jaXJjbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjp5LkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjp5LkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6eS5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFu''@;'; put 'put ''ZGFyZCI6eS5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOnkuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjp5LkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOnkuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOnkuQ2xyU2hhcGVC''@;'; put 'put ''YXJzLHVzZXI6eS5DbHJTaGFwZVVzZXIsYW5nbGU6eS5DbHJTaGFwZUFuZ2xlLGZvbGRlcjp5LkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6eS5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDp5LkNsclNoYXBlQmVsbCxpbWFnZTp5LkNsclNoYXBlSW1hZ2UsY2xvdWQ6eS5DbHJTaGFwZUNs''@;'; put 'put ''b3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjp5LkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6eS5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjp5LkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjp5LkNsclNo''@;'; put 'put ''YXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjp5LkNsclNoYXBlVm1CdWcsc2VhcmNoOnkuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6eS5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOnkuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjp5LkNsclNoYXBlQ2Fs''@;'; put 'put ''ZW5kYXIsZXZlbnQ6eS5DbHJTaGFwZUV2ZW50LGV5ZTp5LkNsclNoYXBlRXllLCJleWUtaGlkZSI6eS5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjp5LkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OnkuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuQ29y''@;'; put 'put ''ZVNoYXBlcywiaG91c2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KHkuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJjbG9zZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsImVycm9yIiwoMCxfLmRlc2NyaXB0b3JDb25maWcp''@;'; put 'put ''KHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJpbmZvIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFw''@;'; put 'put ''ZXMsIm1lbnUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5D''@;'; put 'put ''b3JlU2hhcGVzLCJjYXJldCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1si''@;'; put 'put ''YW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAseS5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIF8oZyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHZhbHVlOmd9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4v''@;'; put 'put ''cHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3Vu''@;'; put 'put ''ZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPXkuY2hhbmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAseS5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9''@;'; put 'put ''O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZygpe3RoaXMuY2FsbGJhY2tzPXkuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuc2luZ2xlSW5zdGFuY2V8fChnLnNpbmdsZUlu''@;'; put 'put ''c3RhbmNlPW5ldyBnKSxnLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGcucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKEIsdyl7dmFyIFA9dGhpcztyZXR1cm4gdGhpcy5jYWxsYmFja3NbQl0/LTE9PT10aGlzLmNhbGxiYWNrc1tCXS5pbmRl''@;'; put 'put ''eE9mKHcpJiZ0aGlzLmNhbGxiYWNrc1tCXS5wdXNoKHcpOnRoaXMuY2FsbGJhY2tzW0JdPVt3XSxmdW5jdGlvbigpe3ZhciBGPVAuY2FsbGJhY2tzW0JdLmluZGV4T2Yodyk7UC5jYWxsYmFja3NbQl0uc3BsaWNlKEYsMSksMD09PVAuY2FsbGJhY2tzW0JdLmxlbmd0aCYmZGVsZXRlIFAuY2Fs''@;'; put 'put ''bGJhY2tzW0JdfX0sZy5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24oQix3KXt0aGlzLmNhbGxiYWNrc1tCXSYmdGhpcy5jYWxsYmFja3NbQl0ubWFwKGZ1bmN0aW9uKFApe1Aodyl9KX0sZ30oKTt5LlNoYXBlVGVtcGxhdGVPYnNlcnZlcj1ffSwiLi9wcm9qZWN0cy9pY29ucy9zcmMv''@;'; put 'put ''dXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioq''@;'; put 'put ''IQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSkseS5jbHJJY29uU1ZHPXZvaWQgMDt5LmNsckljb25TVkc9ZnVuY3Rpb24gdyhQKXt2YXIgRj0iIjtyZXR1cm4gUC5pbmRleE9mKCItLWJhZGdlZCIpPi0xJiYoRis9ImNhbi1iYWRnZSAiKSxQLmluZGV4T2YoIi0tYWxlcnRlZCIpPi0xJiYoRis9ImNhbi1h''@;'; put 'put ''bGVydCAiKSxQLmluZGV4T2YoImNsci1pLXNvbGlkIik+LTEmJihGKz0iaGFzLXNvbGlkICIpLChGPyc8c3ZnIHZlcnNpb249IjEuMSIgY2xhc3M9IicrRisnIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6''@;'; put 'put ''Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nOic8c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1p''@;'; put 'put ''ZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JykrUCsiPC9zdmc+In19fSl9LDgwNjg1OmZ1bmN0aW9uKHVlKXt1ZS5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uKFgpe3ZhciB5PXt9O2Z1bmN0aW9uIEkoXyl7aWYoeVtfXSlyZXR1cm4geVtfXS5leHBvcnRzO3ZhciBnPXlbX109e2k6XyxsOiExLGV4cG9ydHM6e319O3JldHVybiBYW19dLmNhbGwoZy5leHBvcnRzLGcsZy5leHBvcnRzLEkpLGcubD0hMCxnLmV4cG9ydHN9cmV0dXJu''@;'; put 'put ''IEkubT1YLEkuYz15LEkuZD1mdW5jdGlvbihfLGcsQil7SS5vKF8sZyl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLGcse2VudW1lcmFibGU6ITAsZ2V0OkJ9KX0sSS5yPWZ1bmN0aW9uKF8pe3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShfLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LEkudD1mdW5jdGlvbihfLGcpe2lmKDEmZyYmKF89SShfKSksOCZnfHw0JmcmJiJvYmplY3QiPT10eXBlb2YgXyYmXyYmXy5f''@;'; put 'put ''X2VzTW9kdWxlKXJldHVybiBfO3ZhciBCPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoSS5yKEIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpffSksMiZnJiYic3RyaW5nIiE9dHlwZW9mIF8pZm9yKHZhciB3IGluIF8pSS5kKEIsdyxmdW5j''@;'; put 'put ''dGlvbihQKXtyZXR1cm4gX1tQXX0uYmluZChudWxsLHcpKTtyZXR1cm4gQn0sSS5uPWZ1bmN0aW9uKF8pe3ZhciBnPV8mJl8uX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBfLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIF99O3JldHVybiBJLmQoZywiYSIsZyksZ30sSS5vPWZ1bmN0''@;'; put 'put ''aW9uKF8sZyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLGcpfSxJLnA9IiIsSShJLnM9Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzIil9KHsiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiOgov''@;'; put 'put ''KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5BbGxTaGFwZXM9dm9pZCAwO3ZhciBfPUko''@;'; put 'put ''Ci8qISAuL2NoYXJ0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyIpLGc9SSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksQj1JKAovKiEgLi9jb3Jl''@;'; put 'put ''LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1JKAovKiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLFA9SSgKLyohIC4vbWVkaWEtc2hhcGVzICov''@;'; put 'put ''CiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIiksRj1JKAovKiEgLi9zb2NpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvc29jaWFsLXNoYXBlcy50cyIpLE89SSgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVj''@;'; put 'put ''dHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLHo9SSgKLyohIC4vdGV4dC1lZGl0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RleHQtZWRpdC1zaGFwZXMudHMiKSxOPUkoCi8qISAuL3RyYXZlbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIiksTD1bQi5Db3JlU2hhcGVzLGcuQ29tbWVyY2VTaGFwZXMsdy5Fc3NlbnRpYWxTaGFwZXMsUC5NZWRpYVNoYXBlcyxGLlNvY2lhbFNoYXBlcyxPLlRlY2hub2xvZ3lTaGFwZXMsTi5UcmF2ZWxTaGFwZXMsXy5DaGFydFNoYXBlcyx6''@;'; put 'put ''LlRleHRFZGl0U2hhcGVzXSxLPXt9O3kuQWxsU2hhcGVzPUs7Zm9yKHZhciBVPTAsVz1MO1U8Vy5sZW5ndGg7VSsrKXt2YXIgWT1XW1VdO2Zvcih2YXIgcSBpbiBZKVkuaGFzT3duUHJvcGVydHkocSkmJihLW3FdPVlbcV0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChLKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAg''@;'; put 'put ''ICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu''@;'; put 'put ''Y3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5DaGFydFNoYXBlcz15LkNsclNoYXBlQmVsbEN1cnZlPXkuQ2xyU2hhcGVUaWNrQ2hhcnQ9eS5DbHJTaGFwZVNjYXR0ZXJQbG90PXkuQ2xyU2hhcGVQaWVD''@;'; put 'put ''aGFydD15LkNsclNoYXBlTGluZUNoYXJ0PXkuQ2xyU2hhcGVIZWF0TWFwPXkuQ2xyU2hhcGVHcmlkQ2hhcnQ9eS5DbHJTaGFwZUN1cnZlQ2hhcnQ9eS5DbHJTaGFwZUNsb3VkQ2hhcnQ9eS5DbHJTaGFwZUJ1YmJsZUNoYXJ0PXkuQ2xyU2hhcGVCb3hQbG90PXkuQ2xyU2hhcGVCYXJDaGFydD15''@;'; put 'put ''LkNsclNoYXBlQXhpc0NoYXJ0PXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksZz1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJv''@;'; put 'put ''amVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7eS5DbHJTaGFwZUF4aXNDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1''@;'; put 'put ''Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEg''@;'; put 'put ''QyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcg''@;'; put 'put ''MjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMg''@;'; put 'put ''Mi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYg''@;'; put 'put ''TCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAz''@;'; put 'put ''MSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA2LjAwNyAyNi43MzEgTCAy''@;'; put 'put ''Ny43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42''@;'; put 'put ''NSA2IDExLjAxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwg''@;'; put 'put ''MzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3''@;'; put 'put ''IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4''@;'; put 'put ''IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5''@;'; put 'put ''OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg''@;'; put 'put ''MiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNi4wMDcgMjYuNzMxIEwg''@;'; put 'put ''MjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAu''@;'; put 'put ''NjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcg''@;'; put 'put ''MTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEu''@;'; put 'put ''MTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+JykseS5DbHJTaGFwZUJhckNoYXJ0PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3''@;'; put 'put ''VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIzIDE2IEwgMjkgMTYgTCAyOSAyNiBMIDI3LjQgMjYgTCAyNy40IDE3LjYgTCAyNC42IDE3LjYgTCAyNC42IDI2IEwgMjMgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiPjwvcGF0''@;'; put 'put ''aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBD''@;'; put 'put ''IDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44''@;'; put 'put ''OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwg''@;'; put 'put ''MTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIx''@;'; put 'put ''IDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAy''@;'; put 'put ''Ny40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUg''@;'; put 'put ''MzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4w''@;'; put 'put ''MzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcg''@;'; put 'put ''MTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEg''@;'; put 'put ''MTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwg''@;'; put 'put ''MjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMu''@;'; put 'put ''MDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+''@;'; put 'put ''PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5''@;'; put 'put ''NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNyAyNiBMIDEzIDI2IEwgMTMgMTAgTCA3IDEw''@;'; put 'put ''IFogTSAxNSAyNiBMIDIxIDI2IEwgMjEgMTkgTCAxNSAxOSBaIE0gMjMgMjYgTCAyOSAyNiBMIDI5IDE2IEwgMjMgMTYgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2''@;'; put 'put ''Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44''@;'; put 'put ''NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLHkuQ2xyU2hhcGVCb3hQbG90PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMiBM''@;'; put 'put ''IDE3IDEyIEwgMTcgMjYgTCA3IDI2IEwgNyAxMiBaIE0gOC42IDI0LjQgTCAxNS40IDI0LjQgTCAxNS40IDE4LjggTCA4LjYgMTguOCBMIDguNiAyNC40IFogTSAxNS40IDEzLjYgTCA4LjYgMTMuNiBMIDguNiAxNy4yIEwgMTUuNCAxNy4yIEwgMTUuNCAxMy42IFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMjQgTCAyOSAyNCBMIDI5IDEwIEwgMTkgMTAgTCAxOSAyNCBaIE0gMjAuNiAxMS42IEwgMjcuNCAxMS42IEwgMjcuNCAxNy4yIEwgMjAuNiAxNy4yIEwgMjAuNiAxMS42IFogTSAyNy40IDIyLjQg''@;'; put 'put ''TCAyMC42IDIyLjQgTCAyMC42IDE4LjggTCAyNy40IDE4LjggTCAyNy40IDIyLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQg''@;'; put 'put ''MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBM''@;'; put 'put ''IDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDE5IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIFogTSAyMSAxMiBMIDI3IDEyIEwgMjcgMTcgTCAyMSAxNyBaIE0gMjcgMjIgTCAyMSAyMiBMIDIxIDE5IEwgMjcgMTkgWiI+PC9wYXRo''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUg''@;'; put 'put ''MjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIg''@;'; put 'put ''WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcu''@;'; put 'put ''MiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjAuNiAx''@;'; put 'put ''MS42IEwgMjAuNiAxNy4yIEwgMjcuNCAxNy4yIEwgMjcuNCAxMi45ODcgQyAyNy45MDkgMTMuMTc3IDI4LjQ0NSAxMy4zMTMgMjkgMTMuMzg3IEwgMjkgMjQgTCAxOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAuNiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu''@;'; put 'put ''ODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIyLjMxMiA2LjgxNyAyMi43MzIgOC41NjYgMjMuNjMzIDEwIEwgMTkgMTAgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTMuNDI3IEMgMjkuMTAzIDEzLjQ0IDI5LjIwNiAxMy40NTEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40Mjkg''@;'; put 'put ''MzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNyAyNiBMIDE3IDI2IEwgMTcgMTIgTCA3IDEyIFogTSA5IDE5IEwgMTUgMTkgTCAxNSAyNCBMIDkgMjQgWiBNIDE1IDE3IEwgOSAxNyBMIDkgMTQgTCAxNSAxNCBaIE0gMjEgMTIgTCAyNS40NzIgMTIgQyAyNS45NCAxMi4zNTIgMjYuNDUyIDEy''@;'; put 'put ''LjY1IDI3IDEyLjg4NSBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0i''@;'; put 'put ''NiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3''@;'; put 'put ''IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwg''@;'; put 'put ''MTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDI0IEwgMTkgMjQgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDIwLjYgMTUuMzYgMjAuNiAxNS4zNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTUuMzYgTCAyOSAxNS4zNTcgTCAyOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAu''@;'; put 'put ''NiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IEwgMjcuNCAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEz''@;'; put 'put ''LjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1''@;'; put 'put ''OCA1IEwgMTkuMDI4IDEwIEwgMTkgMTAgTCAxOSAxMC4wNDggTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDI0IEwgMjkgMjQgTCAyOSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBa''@;'; put 'put ''IE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDI3IDE3IEwgMjEgMTcgTCAyMSAxNS4zNTcgTCAyNyAxNS4zNTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAx''@;'; put 'put ''My4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkg''@;'; put 'put ''MjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSx5LkNsclNoYXBlQnViYmxlQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBD''@;'; put 'put ''IDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcg''@;'; put 'put ''MjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIy''@;'; put 'put ''NyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBD''@;'; put 'put ''IDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMgNyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42''@;'; put 'put ''NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEzLjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjEgMjMg''@;'; put 'put ''QyAyMSAyNC42NTcgMTkuNjU3IDI2IDE4IDI2IEMgMTYuMzQzIDI2IDE1IDI0LjY1NyAxNSAyMyBDIDE1IDIxLjM0MyAxNi4zNDMgMjAgMTggMjAgQyAxOS42NTcgMjAgMjEgMjEuMzQzIDIxIDIzIFogTSAxOCAyMS42IEMgMTcuMjI3IDIxLjYgMTYuNiAyMi4yMjcgMTYuNiAyMyBDIDE2LjYg''@;'; put 'put ''MjMuNzczIDE3LjIyNyAyNC40IDE4IDI0LjQgQyAxOC43NzMgMjQuNCAxOS40IDIzLjc3MyAxOS40IDIzIEMgMTkuNCAyMi4yMjcgMTguNzczIDIxLjYgMTggMjEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0''@;'; put 'put ''IDUuODk2IDM0IDcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1IDIzIDE2LjM0MyAyMyAx''@;'; put 'put ''OCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAy''@;'; put 'put ''MSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcg''@;'; put 'put ''NyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0''@;'; put 'put ''IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAx''@;'; put 'put ''NSBDIDI3LjY1NyAxNSAyOSAxNi4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMg''@;'; put 'put ''MTYuNiAyNiAxNi42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMg''@;'; put 'put ''NyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEz''@;'; put 'put ''LjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAy''@;'; put 'put ''NiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0''@;'; put 'put ''LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQg''@;'; put 'put ''MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMu''@;'; put 'put ''NDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1''@;'; put 'put ''IDIzIDE2LjM0MyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAy''@;'; put 'put ''NiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcg''@;'; put 'put ''MjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43''@;'; put 'put ''NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4''@;'; put 'put ''IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEy''@;'; put 'put ''LjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMg''@;'; put 'put ''MjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIz''@;'; put 'put ''Ljc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHJ4PSIzIj48''@;'; put 'put ''L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAw''@;'; put 'put ''MSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBD''@;'; put 'put ''IDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAy''@;'; put 'put ''Ljg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBM''@;'; put 'put ''IDI0LjU3OSAxNS4zNTcgQyAyMy42MzkgMTUuODYzIDIzIDE2Ljg1NyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuODU3IDI4LjM2MSAxNS44NjMgMjcuNDIxIDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gMTEgMTAg''@;'; put 'put ''QyA4Ljc5MSAxMCA3IDExLjc5MSA3IDE0IEMgNyAxNi4yMDkgOC43OTEgMTggMTEgMTggQyAxMy4yMDkgMTggMTUgMTYuMjA5IDE1IDE0IEMgMTUgMTEuNzkxIDEzLjIwOSAxMCAxMSAxMCBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAy''@;'; put 'put ''NiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQg''@;'; put 'put ''MS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDEx''@;'; put 'put ''LjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSx5LkNsclNoYXBlQ2xvdWRDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAx''@;'; put 'put ''MS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3''@;'; put 'put ''MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcg''@;'; put 'put ''MTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIg''@;'; put 'put ''QyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNyAyMC42IDIzLjYgMjEuMjI3IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjcgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYu''@;'; put 'put ''NCAyMiBDIDI2LjQgMjEuMjI3IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkg''@;'; put 'put ''QyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3''@;'; put 'put ''IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIy''@;'; put 'put ''IDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMg''@;'; put 'put ''MiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjAuOTcxIDExLjI0MyBDIDIzLjMxNCAxMy41ODYgMjIu''@;'; put 'put ''MzY0IDE4LjMzNSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuODc5IDkuODQ5IDE4LjYyOCA4LjkgMjAuOTcxIDExLjI0MyBaIE0gMTEuNjM2IDE0LjYz''@;'; put 'put ''NyBDIDguODI0IDE3LjQ0OSA3Ljg3NSAyMS4wNTggOS41MTUgMjIuNjk4IEMgMTEuMTU1IDI0LjMzOCAxNC43NjQgMjMuMzg5IDE3LjU3NiAyMC41NzcgQyAyMC4zODggMTcuNzY1IDIxLjMzOCAxNC4xNTYgMTkuNjk3IDEyLjUxNiBDIDE4LjA1NyAxMC44NzYgMTQuNDQ4IDExLjgyNSAxMS42''@;'; put 'put ''MzYgMTQuNjM3IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4z''@;'; put 'put ''NDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2''@;'; put 'put ''LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSI3Ij48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg''@;'; put 'put ''MzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBa''@;'; put 'put ''IE0gMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIyLjM2NCAxOC4zMzUgMjMuMzE0IDEzLjU4NiAyMC45NzEgMTEuMjQzIEMgMTguNjI4IDguOSAxMy44Nzkg''@;'; put 'put ''OS44NDkgMTAuMzY0IDEzLjM2NCBaIE0gMjUgMTkgQyAyMy4zNDMgMTkgMjIgMjAuMzQzIDIyIDIyIEMgMjIgMjMuNjU3IDIzLjM0MyAyNSAyNSAyNSBDIDI2LjY1NyAyNSAyOCAyMy42NTcgMjggMjIgQyAyOCAyMC4zNDMgMjYuNjU3IDE5IDI1IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''IiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4z''@;'; put 'put ''NTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy4wNDkgMTAuNjc5IDE2LjQ1MyA5LjQ5MiAxOC45NTYgMTAu''@;'; put 'put ''MTI0IEwgMTguMDA4IDExLjc0MSBDIDE2LjE4IDExLjUxOCAxMy42OTUgMTIuNTc4IDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMTkuMjI4IDE4LjkyNSAy''@;'; put 'put ''MC4yMzcgMTYuOTk4IDIwLjQ1NiAxNS4zNTcgTCAyMi4yMiAxNS4zNTcgQyAyMi4wMDYgMTcuNDc3IDIwLjgzOCAxOS44NjEgMTguODQ5IDIxLjg0OSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIz''@;'; put 'put ''LjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjky''@;'; put 'put ''OCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwg''@;'; put 'put ''MjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMy''@;'; put 'put ''IDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAxOC45NTYgMTAuMTI0IEMgMTYuNDUzIDkuNDkyIDEzLjA0OSAxMC42NzkgMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4y''@;'; put 'put ''NDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIwLjgzOCAxOS44NjEgMjIuMDA2IDE3LjQ3NyAyMi4yMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMg''@;'; put 'put ''MjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0''@;'; put 'put ''IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAx''@;'; put 'put ''MS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JykseS5DbHJTaGFwZUN1cnZlQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44''@;'; put 'put ''OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIg''@;'; put 'put ''MTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5''@;'; put 'put ''LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIw''@;'; put 'put ''MyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDEzIDEy''@;'; put 'put ''IEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAy''@;'; put 'put ''OS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDgg''@;'; put 'put ''NiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYu''@;'; put 'put ''NjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4z''@;'; put 'put ''NCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAx''@;'; put 'put ''MS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQu''@;'; put 'put ''MiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0''@;'; put 'put ''IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEy''@;'; put 'put ''LjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAz''@;'; put 'put ''MS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5''@;'; put 'put ''IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2''@;'; put 'put ''MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDggNiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1''@;'; put 'put ''IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBD''@;'; put 'put ''IDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIgMTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3''@;'; put 'put ''Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4''@;'; put 'put ''LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIwMyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3''@;'; put 'put ''OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDEx''@;'; put 'put ''LjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAz''@;'; put 'put ''NCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTcuNDc2IDEyLjYxMiAxNy4zNzkgMTIuODQzIDE3LjMzIDEzLjA3NyBDIDE3LjI2MiAx''@;'; put 'put ''Mi45NDggMTcuMTkyIDEyLjgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIEwgMTMgMTIgQyAxNC44MTcgMTIgMTUuNjc0IDEzLjQ5OSAxNy4wMzkgMTgu''@;'; put 'put ''Mjc1IEMgMTcuODEzIDIwLjk4NCAxOC4yMDEgMjIuMTE4IDE4Ljg4MiAyMy4zMDkgQyAxOS44NyAyNS4wMzggMjEuMjA1IDI2IDIzIDI2IEwgMjkgMjYgQyAyOS41NTIgMjYgMzAgMjUuNTUyIDMwIDI1IEMgMzAgMjQuNDQ4IDI5LjU1MiAyNCAyOSAyNCBMIDIzIDI0IEMgMjEuMTgzIDI0IDIw''@;'; put 'put ''LjMyNiAyMi41MDEgMTguOTYyIDE3LjcyNSBDIDE4LjY0IDE2LjU5OCAxOC4zODUgMTUuNzQ0IDE4LjE0NyAxNS4wNDQgQyAxOC40MDcgMTUuMjE1IDE4LjcxNyAxNS4zMjYgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4z''@;'; put 'put ''NTcgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEz''@;'; put 'put ''LjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0''@;'; put 'put ''NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLHkuQ2xyU2hhcGVHcmlkQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCww''@;'; put 'put ''LDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE3SDIxYTIsMiwwLDAsMS0yLTJWOGEyLDIsMCwwLDEs''@;'; put 'put ''Mi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMTdaTTIxLDh2N0gzMlY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwy''@;'; put 'put ''LDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwz''@;'; put 'put ''MiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2''@;'; put 'put ''Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAx''@;'; put 'put ''OS44OTUgNiAyMSA2IEwgMzIgNiBDIDMzLjEwNSA2IDM0IDYuODk1IDM0IDggTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIg''@;'; put 'put ''MjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLWFsZXJ0ZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItYWxlcnRlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMjAuMDE0IDE3IDE5LjE5NSAxNi4yODcgMTkuMDMgMTUuMzQ4IEMgMTkuMDQxIDE1LjM0OSAxOS4wNTMgMTUuMzUgMTkuMDY0IDE1LjM1MSBD''@;'; put 'put ''IDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzMy45NjggMTUuMzU3IEMgMzMuOCAxNi4yOTIgMzIuOTgzIDE3IDMyIDE3IFogTSAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIxLjM3MiA2IEwgMTkgMTAuMDQ4IFoiLz5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy1hbGVydGVkIiBkPSJNMTUsMzBINGEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwzMFpNNCwyMXY3SDE1VjIxWiIvPlxuICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LWFsZXJ0ZWQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4x''@;'; put 'put ''ODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAu''@;'; put 'put ''Mjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2''@;'; put 'put ''IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAx''@;'; put 'put ''OS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkg''@;'; put 'put ''OCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBM''@;'; put 'put ''IDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBa''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIu''@;'; put 'put ''MTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcg''@;'; put 'put ''MC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3''@;'; put 'put ''QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAxOS44OTUgMTcgMTkgMTYuMTA1IDE5IDE1IEwgMTkgOCBDIDE5IDYuODk1''@;'; put 'put ''IDE5Ljg5NSA2IDIxIDYgTCAyMi41OSA2IEMgMjIuNTkgNi4wMTkgMjIuNTkgNi4wMzcgMjIuNTkgNi4wNTYgQyAyMi41OSA2LjcyOSAyMi42OCA3LjM4MSAyMi44NDggOCBMIDIxIDggTCAyMSAxNSBMIDMyIDE1IEwgMzIgMTMuMTc1IEMgMzIuNzE3IDEyLjk3MiAzMy4zODkgMTIuNjY0IDM0''@;'; put 'put ''IDEyLjI2OSBMIDM0IDE1IEMgMzQgMTYuMTA1IDMzLjEwNSAxNyAzMiAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIs''@;'; put 'put ''MiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIs''@;'; put 'put ''MiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBD''@;'; put 'put ''IDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44''@;'; put 'put ''OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIyLjU5IDYuMDU2IEMgMjIuNTkgMTAuMTQxIDI1LjkwMSAxMy40NTIgMjkuOTg2IDEzLjQ1MiBDIDMxLjQ2NiAxMy40NTIgMzIuODQ0IDEzLjAxOCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4x''@;'; put 'put ''MDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBD''@;'; put 'put ''IDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5''@;'; put 'put ''IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlSGVhdE1hcD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBM''@;'; put 'put ''IDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0''@;'; put 'put ''aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjggMTAgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAx''@;'; put 'put ''OC44IEwgMjEuOSAyNCBaIE0gMjYgMTEuNiBMIDIxLjkgMTEuNiBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgWiBNIDE1LjcgMTEuNiBMIDE1LjcgMTcuMiBMIDIwLjMgMTcuMiBMIDIwLjMgMTEuNiBaIE0gMTUuNyAyNCBMIDIwLjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUy''@;'; put 'put ''NCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQg''@;'; put 'put ''MTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjMuNzI4IDEwIEMgMjQuMTA1IDEwLjU5NiAyNC41NjQgMTEuMTM1IDI1LjA5IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAyNiAxNy4yIEwgMjYg''@;'; put 'put ''MTIuMjg3IEMgMjYuNjExIDEyLjY3OSAyNy4yODQgMTIuOTgzIDI4IDEzLjE4MiBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBM''@;'; put 'put ''IDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIw''@;'; put 'put ''Ljc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMTkuMDI4IDEwIEwgMTguMDkxIDExLjYgTCAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDE1LjM1NyBMIDIxLjkg''@;'; put 'put ''MTUuMzU3IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDE1LjM1NyBMIDI4IDE1LjM1NyBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAy''@;'; put 'put ''NiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAw''@;'; put 'put ''NSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcu''@;'; put 'put ''MzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3''@;'; put 'put ''IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA4IDI2IEwgMjggMjYgTCAyOCAxMCBMIDggMTAgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkg''@;'; put 'put ''TCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI2IDEyIFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAxNCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIg''@;'; put 'put ''Ni44MTcgMjIuNzMyIDguNTY2IDIzLjYzMyAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxMy4yMzIgQyAyOC40MjEgMTMuMzQ1IDI4Ljg1OSAxMy40MjIgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTAg''@;'; put 'put ''MTkgTCAxNCAxOSBMIDE0IDI0IEwgMTAgMjQgWiBNIDIyIDI0IEwgMjIgMTkgTCAyNiAxOSBMIDI2IDI0IFogTSAyMCAxOSBMIDIwIDI0IEwgMTYgMjQgTCAxNiAxOSBaIE0gMjYgMTcgTCAyMiAxNyBMIDIyIDEyIEwgMjUuNTg0IDEyIEMgMjUuNzE5IDEyLjEgMjUuODU4IDEyLjE5NiAyNiAx''@;'; put 'put ''Mi4yODcgWiBNIDIwIDEyIEwgMjAgMTcgTCAxNiAxNyBMIDE2IDEyIFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAy''@;'; put 'put ''OSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAy''@;'; put 'put ''NCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxNS4zNTcgTCAyNiAxNS4zNTcgWiBNIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBMIDE3Ljg1NiAxMiBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTku''@;'; put 'put ''MDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyMCAxNS4zNTcgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMg''@;'; put 'put ''MzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JykseS5DbHJTaGFwZUxp''@;'; put 'put ''bmVDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1''@;'; put 'put ''IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDku''@;'; put 'put ''MzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wb2x5Z29uPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTYgMzMuMTA1IDUgMzIgNSBaIE0gMjIuNTYg''@;'; put 'put ''MjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2IEwgMjIuNjUgMjIuMjcgTCAyOS42NSAxMyBMIDMxLjM1IDE0LjI4IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUg''@;'; put 'put ''NSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42''@;'; put 'put ''MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDkuMzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcG9seWdvbj5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMC4zMiAxMy40OCBMIDMxLjM4IDE0LjI4IEwgMjIuNTYgMjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2''@;'; put 'put ''IEwgMjIuNjUgMjIuMjcgTCAyOS4zMSAxMy40NiBDIDI1LjA1IDEzLjEgMjEuOTY5IDkuMjMzIDIyLjU3IDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCAx''@;'; put 'put ''Mi4zNCBDIDMyLjg5NSAxMy4wMzYgMzEuNjI2IDEzLjQyOSAzMC4zMiAxMy40OCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xl''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUg''@;'; put 'put ''NSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNS42MiAxNS4yMjIgTCA5LjYwMiAyMy45NjggTCA1LjU1IDIwLjM4NCBMIDYuNjEgMTkuMTg2IEwgOS4zMDggMjEu''@;'; put 'put ''NTcyIEwgMTUuNjM0IDEyLjM4IEwgMjIuMzg0IDIyLjM5NSBMIDI3LjcxNyAxNS4zNDggTCAyOS43MjQgMTUuMzQ4IEwgMjIuMzA4IDI1LjE0NSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1''@;'; put 'put ''IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4z''@;'; put 'put ''NDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUg''@;'; put 'put ''MiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNy40NTIgMTUuMzU3IEwg''@;'; put 'put ''MjIuMzggMjIuMDYgTCAxNS42MyAxMiBMIDkuMjggMjEuMjggTCA2Ljc1IDE5LjA0IEwgNS40MiAyMC41MyBMIDkuNjUgMjQuMjggTCAxNS42MSAxNS41NiBMIDIyLjI4IDI1LjUgTCAyOS45NTkgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIu''@;'; put 'put ''MjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEu''@;'; put 'put ''MTQ0IFoiPjwvcGF0aD4nKSx5LkNsclNoYXBlUGllQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIu''@;'; put 'put ''ODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAx''@;'; put 'put ''OSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1''@;'; put 'put ''IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwg''@;'; put 'put ''MTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBDIDMyIDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBD''@;'; put 'put ''IDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44''@;'; put 'put ''OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBD''@;'; put 'put ''IDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAx''@;'; put 'put ''OCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwgMTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAy''@;'; put 'put ''NS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3''@;'; put 'put ''IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg''@;'; put 'put ''MiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEg''@;'; put 'put ''MTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMg''@;'; put 'put ''MjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjcgMTcgTCAxOSAxNyBMIDE5IDE1LjM0NSBDIDE5LjAyMSAxNS4z''@;'; put 'put ''NDggMTkuMDQzIDE1LjM0OSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI2LjgzMSAxNS4zNTcgQyAyNi45NDIgMTUuODg3IDI3IDE2LjQzNyAyNyAxNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4x''@;'; put 'put ''MTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAx''@;'; put 'put ''MS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4x''@;'; put 'put ''MDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi44MDcgMTMuNTgzIDE3LjU3MSAxNS4xOTcgMTkgMTUuMzQ1IEwgMTkgMTcgTCAyNyAxNyBDIDI3IDE2LjQz''@;'; put 'put ''NyAyNi45NDIgMTUuODg3IDI2LjgzMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIj48L3BhdGg+XG4gIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAw''@;'; put 'put ''NSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcu''@;'; put 'put ''MzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JykseS5DbHJTaGFwZVNjYXR0ZXJQbG90PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIg''@;'; put 'put ''NyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUu''@;'; put 'put ''MjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEw''@;'; put 'put ''LjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTku''@;'; put 'put ''NzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAy''@;'; put 'put ''MC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAy''@;'; put 'put ''NC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAu''@;'; put 'put ''MzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAx''@;'; put 'put ''Ni41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4z''@;'; put 'put ''NTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcg''@;'; put 'put ''TCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAx''@;'; put 'put ''Ni4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBD''@;'; put 'put ''IDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEu''@;'; put 'put ''ODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFogTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40''@;'; put 'put ''NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2''@;'; put 'put ''IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIx''@;'; put 'put ''Ljg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIE0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIg''@;'; put 'put ''MTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYg''@;'; put 'put ''MTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYu''@;'; put 'put ''NjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0i''@;'; put 'put ''TSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUg''@;'; put 'put ''MzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIg''@;'; put 'put ''ZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgx''@;'; put 'put ''IDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2''@;'; put 'put ''MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44''@;'; put 'put ''MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4''@;'; put 'put ''LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMg''@;'; put 'put ''MTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0''@;'; put 'put ''LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMg''@;'; put 'put ''MjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIu''@;'; put 'put ''NTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMy''@;'; put 'put ''IDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQg''@;'; put 'put ''WiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEg''@;'; put 'put ''MTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYz''@;'; put 'put ''IDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44''@;'; put 'put ''NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYg''@;'; put 'put ''TCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0''@;'; put 'put ''Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0''@;'; put 'put ''IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwg''@;'; put 'put ''MjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIu''@;'; put 'put ''Njg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEz''@;'; put 'put ''LjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAx''@;'; put 'put ''MS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkg''@;'; put 'put ''MTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYg''@;'; put 'put ''MjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIw''@;'; put 'put ''Ljk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3''@;'; put 'put ''NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVk''@;'; put 'put ''IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTku''@;'; put 'put ''NDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43''@;'; put 'put ''NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAy''@;'; put 'put ''Mi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41''@;'; put 'put ''NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAz''@;'; put 'put ''MC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcg''@;'; put 'put ''WiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEg''@;'; put 'put ''MTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYz''@;'; put 'put ''IDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44''@;'; put 'put ''NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYg''@;'; put 'put ''TCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0''@;'; put 'put ''Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0''@;'; put 'put ''IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwg''@;'; put 'put ''MjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIu''@;'; put 'put ''Njg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0''@;'; put 'put ''IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxu''@;'; put 'put ''ICA8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbGwtb3BhY2l0eT0iMCIvPicpLHkuQ2xyU2hhcGVUaWNrQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5''@;'; put 'put ''NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIy''@;'; put 'put ''IEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYu''@;'; put 'put ''OTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAx''@;'; put 'put ''MyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3''@;'; put 'put ''IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAz''@;'; put 'put ''NCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1''@;'; put 'put ''IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYg''@;'; put 'put ''MjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1''@;'; put 'put ''IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4''@;'; put 'put ''LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAy''@;'; put 'put ''NSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1''@;'; put 'put ''NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4''@;'; put 'put ''IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIyIEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEg''@;'; put 'put ''WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEg''@;'; put 'put ''QyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAy''@;'; put 'put ''OC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEg''@;'; put 'put ''MiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4z''@;'; put 'put ''NTcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIy''@;'; put 'put ''IEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJN''@;'; put 'put ''IDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAz''@;'; put 'put ''NC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLHkuQ2xyU2hhcGVCZWxsQ3VydmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTMzLDI5SDNBMSwxLDAsMSwxLDMsMjdIMzNBMSwxLDAsMSwxLDMzLDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI1aC0uNjJhOC4xMSw4LjExLDAsMCwxLTgtNi42N0MyMy42MiwxNC40NCwyMS44OSw3Ljk0LDE4LDcuOTRz''@;'; put 'put ''LTUuNjksNi41MS02LjM4LDEwLjM5YTguMTEsOC4xMSwwLDAsMS04LDYuNjVIM2ExLDEsMCwxLDEsMC0yaC42QTYuMTEsNi4xMSwwLDAsMCw5LjYsMThjMS40MS03Ljg4LDQuMy0xMiw4LjM1LTEyczYuOTMsNC4xNiw4LjMzLDEyYTYuMTEsNi4xMSwwLDAsMCw2LDVIMzNhMSwxLDAsMCwxLDAs''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2hhcnRTaGFwZXM9eyJheGlzLWNoYXJ0Ijp5LkNsclNoYXBlQXhpc0NoYXJ0LCJiYXItY2hhcnQiOnkuQ2xyU2hhcGVCYXJDaGFydCwiYnViYmxlLWNoYXJ0Ijp5LkNsclNoYXBlQnViYmxlQ2hh''@;'; put 'put ''cnQsImNsb3VkLWNoYXJ0Ijp5LkNsclNoYXBlQ2xvdWRDaGFydCwiY3VydmUtY2hhcnQiOnkuQ2xyU2hhcGVDdXJ2ZUNoYXJ0LCJncmlkLWNoYXJ0Ijp5LkNsclNoYXBlR3JpZENoYXJ0LCJsaW5lLWNoYXJ0Ijp5LkNsclNoYXBlTGluZUNoYXJ0LCJwaWUtY2hhcnQiOnkuQ2xyU2hhcGVQaWVD''@;'; put 'put ''aGFydCwidGljay1jaGFydCI6eS5DbHJTaGFwZVRpY2tDaGFydCwic2NhdHRlci1wbG90Ijp5LkNsclNoYXBlU2NhdHRlclBsb3QsImJveC1wbG90Ijp5LkNsclNoYXBlQm94UGxvdCwiaGVhdC1tYXAiOnkuQ2xyU2hhcGVIZWF0TWFwLCJiZWxsLWN1cnZlIjp5LkNsclNoYXBlQmVsbEN1cnZl''@;'; put 'put ''fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5DaGFydFNoYXBlcywiYW5hbHl0aWNzIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ2hhcnRTaGFwZXNbImxpbmUtY2hhcnQiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5k''@;'; put 'put ''b3cuQ2xhcml0eUljb25zLmFkZCh5LkNoYXJ0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb21tZXJjZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAg''@;'; put 'put ''ISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu''@;'; put 'put ''Y3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Db21tZXJjZVNoYXBlcz15LkNsclNoYXBlRmFjdG9yeT15LkNsclNoYXBlRW1wbG95ZWU9eS5DbHJTaGFwZUVtcGxveWVlR3JvdXA9eS5DbHJTaGFwZVJ1''@;'; put 'put ''YmxlPXkuQ2xyU2hhcGVQZXNvPXkuQ2xyU2hhcGVDb2luQmFnPXkuQ2xyU2hhcGVCaXRjb2luPXkuQ2xyU2hhcGVZZW49eS5DbHJTaGFwZVdvbj15LkNsclNoYXBlUnVwZWU9eS5DbHJTaGFwZVBvdW5kPXkuQ2xyU2hhcGVFQ2hlY2s9eS5DbHJTaGFwZURvbGxhckJpbGw9eS5DbHJTaGFwZUJh''@;'; put 'put ''bms9eS5DbHJTaGFwZUNyZWRpdENhcmQ9eS5DbHJTaGFwZURvbGxhcj15LkNsclNoYXBlRXVybz15LkNsclNoYXBlU3RvcmU9eS5DbHJTaGFwZVdhbGxldD15LkNsclNoYXBlU2hvcHBpbmdDYXJ0PXkuQ2xyU2hhcGVQaWdneUJhbms9eS5DbHJTaGFwZVNob3BwaW5nQmFnPXkuQ2xyU2hhcGVD''@;'; put 'put ''YWxjdWxhdG9yPXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksZz1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNv''@;'; put 'put ''bnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7eS5DbHJTaGFwZUNhbGN1bGF0b3I9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNOCwzMlY0SDI4VjMyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiw4SDI1LjY3VjZIMTFhMSwxLDAsMCwwLTEsMXY0LjY3aDJaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMiAxNiAxMCAxNiAxMCAxOCAxNCAxOCAxNCAxNCAxMiAxNCAxMiAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIHBvaW50cz0iMjQgMTYgMjIgMTYgMjIgMTggMjYgMTggMjYgMTQgMjQgMTQgMjQgMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBwb2ludHM9IjE4IDE2IDE2IDE2IDE2IDE4IDIwIDE4IDIw''@;'; put 'put ''IDE0IDE4IDE0IDE4IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgcG9pbnRzPSIxMiAyMiAxMCAyMiAxMCAyNCAxNCAyNCAxNCAyMCAxMiAyMCAxMiAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHBvaW50cz0iMjQgMjIgMjIgMjIgMjIgMjQgMjYgMjQgMjYgMjAgMjQgMjAgMjQgMjIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiBwb2ludHM9IjE4''@;'; put 'put ''IDIyIDE2IDIyIDE2IDI0IDIwIDI0IDIwIDIwIDE4IDIwIDE4IDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgcG9pbnRzPSIxMiAyOCAxMCAyOCAxMCAzMCAxNCAzMCAxNCAyNiAxMiAyNiAxMiAyOCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiBwb2ludHM9IjI0IDI4IDIyIDI4IDIyIDMwIDI2IDMwIDI2IDI2IDI0IDI2IDI0IDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMTEiIHBvaW50cz0iMTggMjggMTYgMjggMTYgMzAgMjAgMzAgMjAgMjYgMTggMjYgMTggMjgiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNMTIsMjhIMTBWMjZoMlptMC02SDEwVjIwaDJabTAtNkgxMFYxNGgyWm03LDEySDE3VjI2aDJabTAtNkgxN1YyMGgyWm0wLTZIMTdWMTRoMlptNywxMkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptMC02SDI0VjE0aDJabTAtN0gx''@;'; put 'put ''MFY1SDI2WiIvPicpLHkuQ2xyU2hhcGVTaG9wcGluZ0JhZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LDEyVjkuMDVhNyw3LDAsMSwwLTE0LDB2N2ExLDEsMCwwLDAsMiwwVjE0aDhWMTJIMTNWOS4wNWE1''@;'; put 'put ''LDUsMCwxLDEsMTAsMFYxNmExLDEsMCwxLDAsMiwwVjE0aDVWMzJINlYxNEg5VjEySDRWMzIuMDlBMS45MSwxLjkxLDAsMCwwLDUuOTEsMzRIMzAuMDlBMS45MSwxLjkxLDAsMCwwLDMyLDMyLjA5VjEyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgZD0iTTEzLDkuMjJhNSw1LDAsMSwxLDEwLDBWMTJoMlY5LjIyYTcsNywwLDEsMC0xNCwwVjEyaDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjUsMTJ2My4xYTEsMSwwLDEsMS0yLDBWMTJIMTN2''@;'; put 'put ''My4xYTEsMSwwLDAsMS0yLDBWMTJINFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJaIi8+JykseS5DbHJTaGFwZVBpZ2d5QmFuaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjcyLDEw''@;'; put 'put ''LjQ3YTExLjY1LDExLjY1LDAsMCwwLTYuMzEuNTJBLjguOCwwLDEsMCwxNCwxMi40OCwxMC4xMSwxMC4xMSwwLDAsMSwxOS40NCwxMmEuOC44LDAsMSwwLC4yOC0xLjU3WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Y3g9IjI1LjM4IiBjeT0iMTYuNzEiIHI9IjEuMzYiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzUuNTEsMTguNjNhMSwxLDAsMCwwLS44NC0uNDQsMy40MiwzLjQyLDAsMCwxLTIuMDktMS4xMiwxNy4zNSwxNy4z''@;'; put 'put ''NSwwLDAsMS0yLjYzLTMuNzhsMi44OC00LjVBMS44OSwxLjg5LDAsMCwwLDMzLDdhMS43NywxLjc3LDAsMCwwLTEuMzMtMSwxMC4xMiwxMC4xMiwwLDAsMC01LjM5Ljc1LDEyLjcyLDEyLjcyLDAsMCwwLTIuNzIsMS42MywxNi45NCwxNi45NCwwLDAsMC01LjE2LTEuMzlDMTEuMzEsNi4zLDQu''@;'; put 'put ''ODMsMTAuOSw0LDE3SDRhMi41NiwyLjU2LDAsMCwxLTEuMzgtMS41MywxLjgxLDEuODEsMCwwLDEsLjE0LTEuNCwxLjE5LDEuMTksMCwwLDEsLjQzLS40MywxLjA4LDEuMDgsMCwwLDAtMS4xMi0xLjg1QTMuMzEsMy4zMSwwLDAsMCwuOTEsMTNhNCw0LDAsMCwwLS4zMywzLjA4QTQuNzYsNC43''@;'; put 'put ''NiwwLDAsMCwzLDE4Ljk1bC45Mi40NmExNy41OCwxNy41OCwwLDAsMCwxLjgyLDdsLjE3LjM4QTIzLDIzLDAsMCwwLDkuMiwzMS44OGExLDEsMCwwLDAsLjc1LjM0aDQuNTJhMSwxLDAsMCwwLC45Mi0xLjM4TDE1LDI5Ljk0bDEuMTguMTNhMjAuMzMsMjAuMzMsMCwwLDAsNCwwYy4zNy42Ljc3''@;'; put 'put ''LDEuMiwxLjIxLDEuNzlhMSwxLDAsMCwwLC44LjQxaDQuMzRhMSwxLDAsMCwwLC45Mi0xLjM5Yy0uMTctLjQtLjM0LS44My0uNDctMS4yLS4xOC0uNTMtLjMyLTEtLjQzLTEuNDVBMTMuMTgsMTMuMTgsMCwwLDAsMjkuNTYsMjZhMTIuNSwxMi41LDAsMCwwLDMsMCwxLDEsMCwwLDAsLjc4LS42''@;'; put 'put ''MmwyLjI2LTUuODFBMSwxLDAsMCwwLDM1LjUxLDE4LjYzWm0tMy43OCw1LjQ0YTExLjM3LDExLjM3LDAsMCwxLTIuMzUtLjExaDBhOC4yLDguMiwwLDAsMS0yLjUzLS44NywxLDEsMCwwLDAtLjkzLDEuNzcsMTEuNzIsMTEuNzIsMCwwLDAsMS4yOS41OCw4LDgsMCwwLDEtMS44LDEuMTZsLTEu''@;'; put 'put ''MDYuNDhzLjQ5LDIuMTkuODIsMy4xNkgyMi43OWMtLjI0LS4zNC0xLjQ1LTIuMzYtMS40NS0yLjM2bC0uNjcuMDlhMTguNTMsMTguNTMsMCwwLDEtNC4yNS4xMmMtLjY2LS4wNi0xLjc2LS4yLTIuNjItLjM1bC0xLjU1LS4yN3MuNjMsMi40My43NSwyLjc0djBIMTAuNDJBMjAuNTcsMjAuNTcs''@;'; put 'put ''MCwwLDEsNy43NiwyNmwtLjE4LS4zOUExNC42MiwxNC42MiwwLDAsMSw2LDE3LjQ4Yy41NC01LjE5LDYuMTItOS4xMSwxMi4xOS04LjU0YTE1LjQ3LDE1LjQ3LDAsMCwxLDUuMDgsMS40OGwuNjIuMjkuNS0uNDdBMTAuMjksMTAuMjksMCwwLDEsMjcsOC41NGE4LjI1LDguMjUsMCwwLDEsNC0u''@;'; put 'put ''NjVsLTMuMzgsNS4yOS4yNS41aDBhMjEuMTYsMjEuMTYsMCwwLDAsMy4zMSw0Ljg0LDYuNDksNi40OSwwLDAsMCwyLjE0LDEuMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUsMTguODdBNS44Myw1LjgzLDAsMCwx''@;'; put 'put ''LDMzLDE3LjYxYTIxLjYzLDIxLjYzLDAsMCwxLTMuMjktNC44NGwzLjM5LTUuMjlhLjkuOSwwLDAsMC0uNTQtMS4zOCw5LjY3LDkuNjcsMCwwLDAtNS4xMy43MiwxMiwxMiwwLDAsMC0zLjEzLDJBMTcuMzcsMTcuMzcsMCwwLDAsMTguNiw3LjE1QzExLjgsNi41Miw1LjI3LDEwLjksNC41NCwx''@;'; put 'put ''N2wtLjE0LS4wN0EyLjc2LDIuNzYsMCwwLDEsMi45LDE1LjI5YTIsMiwwLDAsMSwuMTUtMS41NSwxLjMyLDEuMzIsMCwwLDEsLjQ3LS40OCwxLjA4LDEuMDgsMCwxLDAtMS4xMi0xLjg1LDMuNDUsMy40NSwwLDAsMC0xLjIzLDEuMjVBNC4xNiw0LjE2LDAsMCwwLC44NCwxNS45YTUsNSwwLDAs''@;'; put 'put ''MCwyLjU3LDNsMSwuNTRhMTguNjIsMTguNjIsMCwwLDAsMiw3LjMsMjMsMjMsMCwwLDAsMyw0Ljc5LDEsMSwwLDAsMCwuOC4zOGgzLjYxYS41Mi41MiwwLDAsMCwuNC0uNzVMMTQsMzAuMzhhMTEsMTEsMCwwLDEtLjMzLTEuMThjLjkxLjE2LDIuMDguMzEsMi44Ny4zOGEyMC4wNywyMC4wNyww''@;'; put 'put ''LDAsMCwzLjEyLDBjLjM5LjcuNzksMS4zMywxLjE1LDEuODVhLjkzLjkzLDAsMCwwLC43Ny40MWgzLjExYS42NS42NSwwLDAsMCwuNjEtLjg1Yy0uMjMtLjc0LS41My0xLjc1LS43MS0yLjM3YTE1LjksMTUuOSwwLDAsMCwzLjc1LTEuNzZjLjE2LS4xMS4zMi0uMjYuNDgtLjM5YTEzLjc3LDEz''@;'; put 'put ''Ljc3LDAsMCwxLTIuNDItMSwuOC44LDAsMCwxLC43NC0xLjQyLDExLjY0LDExLjY0LDAsMCwwLDMuMTgsMS4xLDEzLjMxLDEzLjMxLDAsMCwwLDIuNjguMTIsMSwxLDAsMCwwLC45LS42NmwxLjczLTQuNDRBMSwxLDAsMCwwLDM1LDE4Ljg3Wk0xMy43OSwxMS41OWEuODYuODYsMCwwLDEtLjMu''@;'; put 'put ''MDUuODUuODUsMCwwLDEtLjMtMS42NCwxMi40MSwxMi40MSwwLDAsMSw2LjY5LS41NS44NS44NSwwLDEsMS0uMywxLjY3QTEwLjc1LDEwLjc1LDAsMCwwLDEzLjc5LDExLjU5Wm0xMi41Miw2LjEyYTEuNDQsMS40NCwwLDEsMSwxLjQ0LTEuNDRBMS40NCwxLjQ0LDAsMCwxLDI2LjMyLDE3Ljcy''@;'; put 'put ''WiIvPicpLHkuQ2xyU2hhcGVTaG9wcGluZ0NhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9''@;'; put 'put ''IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4wOCw1LjM3QTEsMSwwLDAsMCwzMi4zMSw1SDExLjQ5bC42NSwySDMxTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42''@;'; put 'put ''Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0y''@;'; put 'put ''SDI5LjEzYTEsMSwwLDAsMCwxLS43OGwzLjE3LTE0QTEsMSwwLDAsMCwzMy4wOCw1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMC43MSA3IDIxLjg3IDUgMTEuNDkgNSAxMi4xNCA3IDIwLjcxIDciIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjE1LDE1''@;'; put 'put ''LjQsMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVMOS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCww''@;'; put 'put ''LDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDEuMDktNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1''@;'; put 'put ''LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1h''@;'; put 'put ''bGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjci''@;'; put 'put ''IGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjU3LDdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUgxMS40OWwu''@;'; put 'put ''NjUsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41bC0uNDIsMEwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42MmExLDEsMCwxLDAt''@;'; put 'put ''LjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0uNzhs''@;'; put 'put ''MS41Ny02LjkxQTcuNTEsNy41MSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMSw2LjM5QTEsMSwwLDAsMCwzMi4zMSw2SDkuMjFMOC43Niw0LjU3YTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwx''@;'; put 'put ''LDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEt''@;'; put 'put ''Ljc2bDMuMi0xM0ExLDEsMCwwLDAsMzMuMSw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42''@;'; put 'put ''OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAs''@;'; put 'put ''MTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjE5LTQuODRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0u''@;'; put 'put ''NjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgy''@;'; put 'put ''OS4xMmExLDEsMCwwLDAsMS0uNzZsMS43MS03QTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlV2FsbGV0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTVIMzFWOWExLDEs''@;'; put 'put ''MCwwLDAtMS0xSDZhMSwxLDAsMCwxLTEtLjgyVjYuODJBMSwxLDAsMCwxLDYsNkgyOS41OGExLDEsMCwwLDAsMC0ySDZBMywzLDAsMCwwLDMsN2EzLjA4LDMuMDgsMCwwLDAsMCwuMzZWMjcuOTNBNC4xLDQuMSwwLDAsMCw3LjEzLDMySDMwYTEsMSwwLDAsMCwxLTFWMjVoMWExLDEsMCwwLDAs''@;'; put 'put ''MS0xVjE2QTEsMSwwLDAsMCwzMiwxNVpNMjksMzBINy4xM0EyLjExLDIuMTEsMCwwLDEsNSwyNy45M1Y5Ljg4QTMuMTEsMy4xMSwwLDAsMCw2LDEwSDI5djVIMjJhNSw1LDAsMCwwLDAsMTBoN1ptMi03SDIyYTMsMywwLDAsMSwwLTZIMzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjMuMDEiIGN5PSIyMCIgcj0iMS41Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuOTQsMTRIMzFWOWExLDEsMCwwLDAtMS0xSDZBMSwxLDAs''@;'; put 'put ''MCwxLDUsN0g1VjdBMSwxLDAsMCwxLDYsNkgyOS42YTEsMSwwLDEsMCwwLTJINkEyLjk0LDIuOTQsMCwwLDAsMyw2Ljg4djIxQTQuMTMsNC4xMywwLDAsMCw3LjE1LDMySDMwYTEsMSwwLDAsMCwxLTFWMjZoMS45NGEuOTMuOTMsMCwwLDAsMS0uOTF2LTEwQTEuMDgsMS4wOCwwLDAsMCwzMi45''@;'; put 'put ''NCwxNFpNMzIsMjRsLTguNTgsMGEzLjg3LDMuODcsMCwwLDEtMy43My00LDMuODcsMy44NywwLDAsMSwzLjczLTRMMzIsMTZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIyNC4wNCIgY3k9IjE5LjkyIiByPSIxLjUi''@;'; put 'put ''Lz4nKSx5LkNsclNoYXBlU3RvcmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIsNEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCww''@;'; put 'put ''LDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0''@;'; put 'put ''LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMzAsMTguMTNBMi42OCwyLjY4LDAsMCwxLDI3LjgyLDE3TDI3LDE1Ljg4LDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODgsMjAuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwxNSwxNS44OCwxNC4xOSwxN2EyLjcx''@;'; put 'put ''LDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODgsOC4xOCwxN0EyLjY4LDIuNjgsMCwwLDEsNiwxOC4xM2EyLjY0LDIuNjQsMCwwLDEtMi0uODhWMTQuMTdMOC4wOCw2SDI3LjkyTDMyLDE0LjE2di42N2wwLDIuMzlBMi42NywyLjY3LDAsMCwxLDMwLDE4LjEzWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4yOSw1LjExTDIuMjEsMTMuMjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42NywwLDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAs''@;'; put 'put ''MCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Miw0LjcyLDAsMCwwLDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMuMjdaTTE1LDE0LjR2MS41MkwxNC4xOCwxN2Ey''@;'; put 'put ''LjcxLDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODhWMTQuNEwxMS41OSw2SDE2Wm0xMiwxLjQ4TDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODhsMCwwVjE0LjRMMjAsNmg0LjQ1TDI3LDE0LjRaIi8+JykseS5DbHJTaGFwZUV1cm89KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40OCwyOC40OWExLDEsMCwwLDAtMS4zOC0uMzJBMTIsMTIsMCwwLDEsMTIuNDUsMjJIMjQuMTZhMSwxLDAsMCwwLDAtMkgxMS45M2ExMS4xNiwxMS4xNiwwLDAsMSwwLTRIMjQuMTZhMSwxLDAsMCww''@;'; put 'put ''LDAtMkgxMi40NUExMiwxMiwwLDAsMSwzMC4wNiw3LjhhMSwxLDAsMCwwLDEuMDYtMS43QTE0LDE0LDAsMCwwLDEwLjM0LDE0SDMuNTRhMSwxLDAsMSwwLDAsMkg5LjkxYTE0LDE0LDAsMCwwLS4xNiwyLDE0LDE0LDAsMCwwLC4xNiwySDMuNTRhMSwxLDAsMSwwLDAsMmg2LjhhMTQsMTQsMCww''@;'; put 'put ''LDAsMjAuODMsNy44N0ExLDEsMCwwLDAsMzEuNDgsMjguNDlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjQyLDI1LjE2QTEwLjg4LDEwLjg4''@;'; put 'put ''LDAsMCwxLDkuMjMsMjFINS44NGExLDEsMCwwLDEsMC0yaDNjMC0uMzUtLjA1LS43MS0uMDUtMS4wN3MwLS42MywwLS45M2gtM2ExLDEsMCwwLDEsMC0ySDkuMTlBMTAuODYsMTAuODYsMCwwLDEsMjUuMzgsOC42OWExLjI1LDEuMjUsMCwwLDEtMS4zMiwyLjEyQTguMzYsOC4zNiwwLDAsMCwx''@;'; put 'put ''MS44MiwxNWg5LjM2YTEsMSwwLDAsMSwwLDJIMTEuMzNhNy43Miw3LjcyLDAsMCwwLDAsMmg5LjgyYTEsMSwwLDAsMSwwLDJIMTEuODdhOC4zNiw4LjM2LDAsMCwwLDEyLjIyLDQsMS4yNSwxLjI1LDAsMSwxLDEuMzMsMi4xMloiLz4nKSx5LkNsclNoYXBlRG9sbGFyPSgwLGcuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMjEuMTVhNi45MSw2LjkxLDAsMCwwLTQuMzgtMy4zMkEyNiwyNiwwLDAsMCwxOSwxNy4xOVY4LjEyQTEwLjA1LDEwLjA1LDAsMCwxLDIzLjg2LDEwYTEsMSwwLDAsMCwxLjMzLTEuNUEx''@;'; put 'put ''MS43NSwxMS43NSwwLDAsMCwxOSw2LjFWM2ExLDEsMCwwLDAtMiwwVjZjLTQuNC4xLTYuODMsMi4yOS03LjU3LDQuMThBNS41Niw1LjU2LDAsMCwwLDExLjY2LDE3LDEzLjIsMTMuMiwwLDAsMCwxNywxOC44NFYyOGExMi4zLDEyLjMsMCwwLDEtNy4xNC0yLjc0QTEsMSwwLDEsMCw4LjQ5LDI2''@;'; put 'put ''LjcsMTQuMDksMTQuMDksMCwwLDAsMTcsMzB2M2ExLDEsMCwwLDAsMiwwVjMwYzIuODItLjE5LDYuMDctMS4wOSw3LjMtNC43NkE1LjMzLDUuMzMsMCwwLDAsMjYsMjEuMTVaTTEyLjc5LDE1LjMyYTMuNTcsMy41NywwLDAsMS0xLjQ5LTQuMzlDMTEuNDEsMTAuNjMsMTIuNTMsOC4xMiwxNyw4''@;'; put 'put ''djguOEExMC43LDEwLjcsMCwwLDEsMTIuNzksMTUuMzJaTTI0LjQsMjQuNTZjLS43MiwyLjE0LTIuMzIsMy4xNy01LjQsMy40VjE5LjIzYy42NC4xNCwxLjMuMywyLC41MWE1LDUsMCwwLDEsMy4xOSwyLjMyQTMuMzQsMy4zNCwwLDAsMSwyNC40LDI0LjU2WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjY1LDIxLjU5Yy0xLDMtMy42MSwzLjg0LTUuOSw0djJhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI3LjU5''@;'; put 'put ''QTExLjQ3LDExLjQ3LDAsMCwxLDExLDI1YTEuMjUsMS4yNSwwLDEsMSwxLjcxLTEuODMsOS4xMSw5LjExLDAsMCwwLDQuNTUsMS45NFYxOC44M2E5LjYzLDkuNjMsMCwwLDEtMy43My0xLjQxLDQuOCw0LjgsMCwwLDEtMS45MS01Ljg0Yy41OS0xLjUxLDIuNDItMy4yMyw1LjY0LTMuNTFWNi4y''@;'; put 'put ''NWExLjI1LDEuMjUsMCwwLDEsMi41LDBWOC4xMWE5LjY3LDkuNjcsMCwwLDEsNC45LDJBMS4yNSwxLjI1LDAsMCwxLDIzLDExLjk1YTcuMTQsNy4xNCwwLDAsMC0zLjI0LTEuMzF2Ni4xM2MuNi4xMywxLjI0LjI3LDEuOTEuNDhhNS44NSw1Ljg1LDAsMCwxLDMuNjksMi44MkE0LjY0LDQuNjQs''@;'; put 'put ''MCwwLDEsMjUuNjUsMjMuNTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuOTIsMTkuNjRjLS40LS4xMi0uNzktLjIyLTEuMTctLjN2NS43NmMyLS4yLDMuMDctLjksMy41My0yLjNhMi4xNSwyLjE1LDAsMCwwLS4x''@;'; put 'put ''NS0xLjU4QTMuNDksMy40OSwwLDAsMCwyMC45MiwxOS42NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMy45NCwxMi40OGEyLjMxLDIuMzEsMCwwLDAsMSwyLjg3LDYuNTMsNi41MywwLDAsMCwyLjMyLjkyVjEwLjU1''@;'; put 'put ''QzE1LjE2LDEwLjgsMTQuMTksMTEuODQsMTMuOTQsMTIuNDhaIi8+JykseS5DbHJTaGFwZUNyZWRpdENhcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0w''@;'; put 'put ''LDIsMCwxMkg0TDQsOFpNNCwyOFYyNEgzMnY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIzIiB3aWR0aD0iMjIiIGhlaWdodD0iMzAiIHJ4PSIwLjk2IiByeT0iMC45NiIgdHJhbnNmb3JtPSJ0cmFu''@;'; put 'put ''c2xhdGUoMzYpIHJvdGF0ZSg5MCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIs''@;'; put 'put ''MCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDE4SDRWMjBIMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVCYW5rPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0z''@;'; put 'put ''LjUsMTMuNTYsMTgsNS4yM2wxNC41LDguMzNhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwx''@;'; put 'put ''LDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNS4wMiIgeT0iMTQiIHdp''@;'; put 'put ''ZHRoPSIyNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBWMTcuNjNIOFYyNUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgz''@;'; put 'put ''M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMTUsMTEuNThoMy4yMUwxOC42NSw3LjcyYS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45''@;'; put 'put ''LTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIyLjc3''@;'; put 'put ''LDhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjk0LDEzLjI0bC41Ni4zMmExLDEsMCwwLDAsMS40NC0xLjE5QTcuNDUsNy40NSwwLDAs''@;'; put 'put ''MSwzMS45NCwxMy4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFs''@;'; put 'put ''ZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDE1QTMuNTEsMy41MSwwLDAsMSwyMCwxNEg1djJIMzFWMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQ2''@;'; put 'put ''LDkuNzRsLjY4LTEuMTctMS40OS0uODVhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNCwxLjEuNjNDMTkuMzksOS44OSwxOS40Miw5LjgxLDE5LjQ2LDkuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjA1LDUuMjUsMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIxLjA1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjUsMTMuNTYsNSwxMi42OFYxNkgzMVYxMi43MWwxLjQ4Ljg1YTEsMSwwLDAsMCwxLTEuNzNMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M1pNMTcuODUsNy4xMWEu''@;'; put 'put ''OC44LDAsMCwxLC44LDBMMjUuMzcsMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4''@;'; put 'put ''VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwyN0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUEx''@;'; put 'put ''LjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCwwLDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40Nyw3LjQ3LDAsMCwx''@;'; put 'put ''LDI0LjM5LDExSDIyLjE1bC0zLjktMi4yNEwxNC4zNSwxMUgxMS4xNGw2LjcyLTMuODZhLjguOCwwLDAsMSwuOCwwbDUsMi44N0E3LjQ1LDcuNDUsMCwwLDEsMjIuNSw2YzAtLjE2LDAtLjMyLDAtLjQ4TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYx''@;'; put 'put ''My40MkE3LjUzLDcuNTMsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEuMTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVB''@;'; put 'put ''MS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVhMy41MSwzLjUxLDAs''@;'; put 'put ''MCwxLTMtNS4yNmwuMTQtLjI0LTEuMzUtLjc4TDE0LjM1LDExSDExLjE0bDYuNzItMy44NmEuOC44LDAsMCwxLC44LDBsMS43NSwxLDEuNjUtMi44NkwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDUsMTIuNjhWMTZIMzFWMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1''@;'; put 'put ''LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JykseS5DbHJTaGFwZURvbGxhckJpbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsNmE0LjI1LDQuMjUsMCwwLDEtMy45LTRIMzJabTAsMS42MnY0LjgzQTUuODcsNS44NywwLDAsMCwyNi40OSwyNmgtMTdBNS44Nyw1Ljg3LDAs''@;'; put 'put ''MCwwLDQsMjAuNDRWMTUuNkE1Ljg3LDUuODcsMCwwLDAsOS41MSwxMGgxN0E1Ljg3LDUuODcsMCwwLDAsMzIsMTUuNlpNNy45LDEwQTQuMjUsNC4yNSwwLDAsMSw0LDE0VjEwWk00LDIyLjA2QTQuMjUsNC4yNSwwLDAsMSw3LjksMjZINFpNMjguMSwyNkE0LjI1LDQuMjUsMCwwLDEsMzIsMjIu''@;'; put 'put ''MDZWMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDEwLjg1Yy0zLjQ3LDAtNi4zLDMuMjEtNi4zLDcuMTVzMi44Myw3LjE1LDYuMyw3LjE1LDYuMy0zLjIxLDYuMy03LjE1UzIxLjQ3LDEwLjg1LDE4LDEw''@;'; put 'put ''Ljg1Wm0wLDEyLjY5Yy0yLjU5LDAtNC43LTIuNDktNC43LTUuNTVzMi4xMS01LjU1LDQuNy01LjU1LDQuNywyLjQ5LDQuNyw1LjU1UzIwLjU5LDIzLjU1LDE4LDIzLjU1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMy''@;'; put 'put ''LDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNCwyNlYyMS4xNUE1LjE4LDUuMTgsMCwwLDEsOC43OSwyNlpNNCwxNC44NVYxMEg4Ljc5QTUuMTgsNS4xOCwwLDAsMSw0LDE0Ljg1Wk0xOCwyNS4xNWMtMy40Nyww''@;'; put 'put ''LTYuMy0zLjIxLTYuMy03LjE1czIuODMtNy4xNSw2LjMtNy4xNSw2LjMsMy4yMSw2LjMsNy4xNVMyMS40NywyNS4xNSwxOCwyNS4xNVpNMzIsMjZIMjcuMjVBNS4xOCw1LjE4LDAsMCwxLDMyLDIxLjE1Wm0wLTExLjE1QTUuMTgsNS4xOCwwLDAsMSwyNy4yNSwxMEgzMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxlbGxpcHNlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjE4IiByeD0iNCIgcnk9IjQuNzIiLz4nKSx5LkNsclNoYXBlRUNoZWNrPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjAiIHk9IjIxIiB3aWR0aD0iMTEiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNCw4SDEyLjkzYTguMzUsOC4zNSwwLDAsMSwuNzksMkgzM1YyNkgzVjE5LjlhNy44Myw3LjgzLDAsMCwxLTItMS4zNFYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQs''@;'; put 'put ''OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNNi41NywxOC42OGE2LjE3LDYuMTcsMCwwLDAsNC4zMi0xLjU5LDEuMiwxLjIsMCwwLDAsLjM2LS44NCwxLjA4LDEuMDgsMCwwLDAtMS4wOS0xLjExLDEsMSwwLDAs''@;'; put 'put ''MC0uNzEuMjUsNC4zMiw0LjMyLDAsMCwxLTIuODQsMSwzLjM1LDMuMzUsMCwwLDEtMy40Ni0zaDcuNTNBMS4yOSwxLjI5LDAsMCwwLDEyLDEyLjA2LDUuNjgsNS42OCwwLDAsMCw2LjI3LDYuMTQsNiw2LDAsMCwwLC40LDEyLjR2MEE2LDYsMCwwLDAsNi41NywxOC42OFpNNi4yNSw4LjM5YzEu''@;'; put 'put ''ODIsMCwyLjg3LDEuMzksMywzLjE2SDMuMTNDMy4zOCw5LjY5LDQuNTYsOC4zOSw2LjI1LDguMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsOEgxMi45MWE4LjYxLDguNjEsMCwwLDEsMS4yLDQuMzksOCw4LDAs''@;'; put 'put ''MCwxLTcuNzgsOC4yN0E3LjUxLDcuNTEsMCwwLDEsMSwxOC40MVYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQsOFpNMzEsMjNIMjBWMjFIMzFabTAtNUgxNlYxNkgzMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIGQ9Ik02LjU3LDE4LjY4QTYsNiwwLDAsMSwuNCwxMi40NHYwQTYsNiwwLDAsMSw2LjI3LDYuMTQsNS42OCw1LjY4LDAsMCwxLDEyLDEyLjA2YTEuMjksMS4yOSwwLDAsMS0xLjMsMS4zMkgzLjE1YTMuMzUsMy4zNSwwLDAsMCwzLjQ2LDMsNC4zMiw0LjMyLDAsMCww''@;'; put 'put ''LDIuODQtMSwxLDEsMCwwLDEsLjcxLS4yNSwxLjA4LDEuMDgsMCwwLDEsMS4wOSwxLjExLDEuMiwxLjIsMCwwLDEtLjM2Ljg0QTYuMTcsNi4xNywwLDAsMSw2LjU3LDE4LjY4Wk05LjMsMTEuNTVjLS4xOC0xLjc3LTEuMjMtMy4xNi0zLTMuMTZzLTIuODcsMS4zLTMuMTIsMy4xNloiLz4nKSx5''@;'; put 'put ''LkNsclNoYXBlUG91bmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy45LDMwSDEzLjRBOC40NSw4LjQ1LDAsMCwwLDE1LDI0LjY1VjIxaDQuMzFhMSwxLDAsMCwwLDAtMkgxNVYxMS4zMUE1LjI0LDUuMjQs''@;'; put 'put ''MCwwLDEsMjAuMjEsNiw1LjE5LDUuMTksMCwwLDEsMjQsNy43M2ExLDEsMCwwLDAsMS40OC0xLjM1QTcuMTksNy4xOSwwLDAsMCwxMywxMS4zMVYxOUg4LjcyYTEsMSwwLDEsMCwwLDJIMTN2My42NUMxMywyOS4zOCwxMC4xMiwzMCwxMCwzMGExLDEsMCwwLDAsLjE3LDJIMjcuOWExLDEsMCwx''@;'; put 'put ''LDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNi41LDI1LjkySDExLjc0YTEuMjUsMS4yNSwwLDAsMS0uMjItMi40OGMuMTUsMCwxLjcy''@;'; put 'put ''LS40OSwxLjcyLTMuNTRWMTloLTIuNWExLDEsMCwwLDEsMC0yaDIuNVYxMS44OGE1Ljg1LDUuODUsMCwwLDEsNS43Mi02LDUuNjMsNS42MywwLDAsMSw0LjIxLDEuOTRBMS4yNSwxLjI1LDAsMSwxLDIxLjMsOS41MSwzLjA4LDMuMDgsMCwwLDAsMTksOC40MmEzLjM1LDMuMzUsMCwwLDAtMy4y''@;'; put 'put ''MiwzLjQ2VjE3aDNhMSwxLDAsMCwxLDAsMmgtM3YyLjlBNy42NSw3LjY1LDAsMCwxLDE1LDI1LjQySDI0LjVhMS4yNSwxLjI1LDAsMCwxLDAsMi41WiIvPicpLHkuQ2xyU2hhcGVSdXBlZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTI4LDhIMjQuMTRBNy41Miw3LjUyLDAsMCwwLDIyLjYsNkgyOGExLDEsMCwwLDAsMC0ySDEwYTEsMSwwLDAsMCwwLDJoNy41NWE1LjQyLDUuNDIsMCwwLDEsNC4yLDJIMTBhMSwxLDAsMCwwLDAsMkgyMi43OUE1LjU0LDUuNTQsMCwwLDEsMjMsMTEuNTEsNS40OCw1LjQ4''@;'; put 'put ''LDAsMCwxLDE3LjU1LDE3SDExLjE0YTEsMSwwLDAsMC0uNzUsMS42NkwyMi4wNiwzMmExLDEsMCwxLDAsMS41LTEuMzJMMTMuMzUsMTloNC4yMWE3LjUxLDcuNTEsMCwwLDAsNy4zLTlIMjhhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTUuODgsOUgyNmExLDEsMCwwLDEsMCwySDI0LjI2YzAsLjA2LDAsLjEyLDAsLjE5YTYuMDksNi4wOSwwLDAsMS02LDYuMmgtMmw2LjgyLDguMDZhMS4yNSwxLjI1LDAsMCwxLTEu''@;'; put 'put ''OTEsMS42MkwxMi42MywxOC45NGExLjI1LDEuMjUsMCwwLDEsMS0yLjA2aDQuNzFhMy41OSwzLjU5LDAsMCwwLDMuNDgtMy42OWMwLS4wNywwLS4xMywwLS4yaC05YTEsMSwwLDAsMSwwLTJoOC4zMmEzLjQxLDMuNDEsMCwwLDAtMi43OC0xLjVIMTIuNzVhMS4yNSwxLjI1LDAsMCwxLDAtMi41''@;'; put 'put ''SDI2YTEsMSwwLDAsMSwwLDJIMjIuNjhBNi4yMyw2LjIzLDAsMCwxLDIzLjg4LDExWiIvPicpLHkuQ2xyU2hhcGVXb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywxOEgyOC43NWwuNS0ySDMzYTEsMSww''@;'; put 'put ''LDAsMCwwLTJIMjkuNzRsMi4xNy04Ljc2QTEsMSwwLDAsMCwzMCw0Ljc2TDI3LjY4LDE0SDIxLjMxTDE5LDQuNzZhMSwxLDAsMCwwLTEuOTQsMEwxNC43OSwxNEg4LjQyTDYuMTMsNC43NmExLDEsMCwwLDAtMS45NC40OEw2LjM2LDE0SDNhMSwxLDAsMCwwLDAsMkg2Ljg1bC41LDJIM2ExLDEs''@;'; put 'put ''MCwwLDAsMCwySDcuODRsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDE1LjM2LDIwaDUuMzhsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDI4LjI1LDIwSDMzYTEsMSwwLDAsMCwwLTJabS01LjgyLTItLjUsMkgyMi4zbC0uNS0yWk0xOCw5LjE2LDE5LjI1LDE0aC0yLjRaTTguOTEs''@;'; put 'put ''MTZoNS4zOGwtLjUsMkg5LjQxWk0xMS42LDI2Ljg0LDkuOTEsMjBIMTMuM1pNMTUuODUsMThsLjUtMmgzLjM5bC41LDJabTguNjQsOC44NEwyMi44LDIwaDMuMzlaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBwb2ludHM9''@;'; put 'put ''IjE3Ljc0IDE2IDE3LjIyIDE4IDE4Ljg1IDE4IDE4LjMyIDE2IDE3Ljc0IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBwb2ludHM9IjExLjk0IDE4IDE0LjYzIDE4IDE1LjE2IDE2IDExLjQxIDE2IDExLjk0IDE4Ii8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBwb2ludHM9IjEzLjI5IDIzLjEgMTQuMSAyMCAxMi40NyAyMCAxMy4yOSAyMy4xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC00IiBwb2ludHM9IjIxLjQ0IDE4IDI0LjEzIDE4IDI0LjY2IDE2IDIwLjkxIDE2IDIxLjQ0IDE4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiBwb2ludHM9IjIyLjc4IDIzLjEgMjMuNiAyMCAyMS45NyAyMCAyMi43''@;'; put 'put ''OCAyMy4xIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOSwyMEgyNi4xOUwyNCwyOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDE5LjM4LDIw''@;'; put 'put ''SDE2LjY5bC0yLjE5LDguMzJhMS4yNSwxLjI1LDAsMCwxLTIuNDIsMEw5Ljg4LDIwSDdhMSwxLDAsMCwxLDAtMkg5LjM1bC0uNTMtMkg3YTEsMSwwLDAsMSwwLTJIOC4zbC0xLTMuNjhhMS4yNSwxLjI1LDAsMCwxLDIuNDItLjY0TDEwLjg4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAs''@;'; put 'put ''MCwxLDIuNDIsMEwyMC4zOCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLjY0bC0xLDMuNjhIMjlhMSwxLDAsMCwxLDAsMkgyNy4yNGwtLjUzLDJIMjlhMSwxLDAsMCwxLDAsMloiLz4nKSx5LkNsclNoYXBlWWVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMzQsNC41NWExLDEsMCwxLDAtMS42Ny0xLjFMMTgsMTguMjMsOC4zMywzLjQ1YTEsMSwwLDAsMC0xLjY3LDEuMUwxNywyMC4zNVYyMi4ySDEyYS44LjgsMCwwLDAsMCwxLjZoNXYyLjRIMTJhLjguOCwwLDAsMCwwLDEu''@;'; put 'put ''Nmg1VjMyYTEsMSwwLDAsMCwyLDBWMjcuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjMuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjAuMzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwz''@;'; put 'put ''NCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjA3LDcuOTFMMTkuNzQsMjBIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYySDIyYTEsMSwwLDAsMSwwLDJIMTkuMjV2Mi43NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjZIMTRhMSwxLDAsMSwxLDAtMmgyLjc1VjIySDE0YTEsMSwwLDEsMSwwLTJoMi4y''@;'; put 'put ''Nkw5LjkzLDkuOTFhMS4yNSwxLjI1LDAsMSwxLDIuMTItMS4zM0wxOCwxOC4wOGw1Ljk1LTkuNDlhMS4yNSwxLjI1LDAsMSwxLDIuMTIsMS4zM1oiLz4nKSx5LkNsclNoYXBlQml0Y29pbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMTEsMTYuODhBNS40OSw1LjQ5LDAsMCwwLDIx''@;'; put 'put ''LDdWNGExLDEsMCwwLDAtMiwwVjdIMTZWNGExLDEsMCwwLDAtMiwwVjdIMTFhMSwxLDAsMCwwLTEsMVYyOGExLDEsMCwwLDAsMSwxaDN2M2ExLDEsMCwwLDAsMiwwVjI5aDN2M2ExLDEsMCwwLDAsMiwwVjI5aC4wOEE2LjA3LDYuMDcsMCwwLDAsMjcsMjIuODF2LS42MkE2LjI1LDYuMjUsMCww''@;'; put 'put ''LDAsMjQuMTEsMTYuODhaTTEyLDloOC42OWEzLjU5LDMuNTksMCwwLDEsMy40MywyLjM2QTMuNTEsMy41MSwwLDAsMSwyMC43OSwxNkgxMlpNMjUsMjIuODFBNC4wOCw0LjA4LDAsMCwxLDIxLjA2LDI3SDEyVjE4aDkuMDZBNC4wOCw0LjA4LDAsMCwxLDI1LDIyLjE5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTgsMTguNDdIMTQuNXY2aDYuNjhhMi43LDIuNywwLDAsMCwyLjYzLTIuNzd2LS40OEEyLjcxLDIuNzEsMCwwLDAsMjEuMTgsMTguNDdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDEzLjc1YTIuMjQsMi4yNCwwLDAsMC0yLjIzLTIuMjVIMTQuNVYxNmg2LjNBMi4yMiwyLjIyLDAsMCwwLDIzLDEzLjc1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMzEsMTkuNzNBNS4yMiw1LjIyLDAsMCwxLDIxLjE4LDI3SDIxdjEuOWExLDEsMCwwLDEtMiwwVjI3SDE3djEuOWExLDEsMCwwLDEtMiwwVjI3SDEzLjI1QTEuMjUsMS4yNSwwLDAsMSwxMiwy''@;'; put 'put ''NS43NVYxNy4yM2gwdi03QTEuMjUsMS4yNSwwLDAsMSwxMy4yNSw5SDE1VjcuMDdhMSwxLDAsMCwxLDIsMFY5aDJWNy4wN2ExLDEsMCwwLDEsMiwwVjlhNC43Miw0LjcyLDAsMCwxLDMuMiw4LDUuMzEsNS4zMSwwLDAsMSwyLjExLDQuMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVDb2luQmFnPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS42LDI5YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAsMCwyMS42LDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+PHBhdGggZD0iTTIyLjU0LDI0aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLDMySDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjcsMzJoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuNywyOGgtN2ExLDEsMCwwLDAsMCwy''@;'; put 'put ''aDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy43NCwyNmEyOCwyOCwwLDAsMC0yLjgyLTEwLjEyQTIwLjI0LDIwLjI0LDAsMCwwLDI0LjYsOC43MUwyNywzLjQyYTEsMSwwLDAsMC0uMDctMUExLDEsMCww''@;'; put 'put ''LDAsMjYuMTMsMkg5LjhhMSwxLDAsMCwwLS45MSwxLjQybDIuNDUsNS4zMWEyMC4zMywyMC4zMywwLDAsMC02LjI4LDcuMTVjLTIuMTUsNC0yLjgyLDguODktMywxMi4yOGEzLjYsMy42LDAsMCwwLDEsMi43MUEzLjc5LDMuNzksMCwwLDAsNS44LDMxLjk0SDEyVjMwSDUuNzJhMS42OCwxLjY4''@;'; put 'put ''LDAsMCwxLTEuMjEtLjUyLDEuNjIsMS42MiwwLDAsMS0uNDUtMS4yM2MuMTQtMi42MS42OS03LjU4LDIuNzYtMTEuNDVBMTgsMTgsMCwwLDEsMTMuMDgsMTBoMWEzMC44MSwzMC44MSwwLDAsMC0xLjg3LDIuOTIsMjIuNzgsMjIuNzgsMCwwLDAtMS40NywzLjM0bDEuMzcuOTJhMjQsMjQsMCww''@;'; put 'put ''LDEsMS40OS0zLjQ3QTI5LjEsMjkuMSwwLDAsMSwxNi4wNSwxMGgxYTIxLjQ1LDIxLjQ1LDAsMCwxLDEuNDEsNSwyMi41NCwyMi41NCwwLDAsMSwuMzIsMy44NmwxLjU4LTEuMTFhMjQuMTUsMjQuMTUsMCwwLDAtLjMyLTNBMjQuODIsMjQuODIsMCwwLDAsMTguNzYsMTBoLjc4bC45MS0ySDEz''@;'; put 'put ''LjIxTDExLjM2LDRIMjQuNTdsLTIuNSw1LjQ3YTkuOTMsOS45MywwLDAsMSwxLjIzLjc4LDE4LjYzLDE4LjYzLDAsMCwxLDUuODYsNi41N0EyNi41OSwyNi41OSwwLDAsMSwzMS43MywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNC44OSwyNmg3Ljg2Yy0uNjYtOC43MS00LjQxLTE0LjEyLTkuMjItMTcuMzJMMjUuNzIsMy45YTEsMSwwLDAsMC0uOTEtMS40SDExLjFhMSwxLDAsMCwwLS45MSwxLjRsMS4yLDIuNkgyMS41MWwtLjksMkgxOC43NkEyNC45LDI0LjksMCwwLDEsMjAsMTMuMTlhMjQuNDksMjQuNDks''@;'; put 'put ''MCwwLDEsLjMyLDNsLTEuNTgsMS4xMWEyMi41NCwyMi41NCwwLDAsMC0uMzItMy44NkEyMS43NCwyMS43NCwwLDAsMCwxNyw4LjVoLTFhMjguMjIsMjguMjIsMCwwLDAtMi40OCwzLjcsMjMuOTEsMjMuOTEsMCwwLDAtMS40OSwzLjQ2bC0xLjM3LS45MWEyMi43OCwyMi43OCwwLDAsMSwxLjQ3''@;'; put 'put ''LTMuMzRBMzAuODEsMzAuODEsMCwwLDEsMTQuMDUsOC41SDEyLjNsLjA4LjE3QzcuMDgsMTIuMiwzLjA1LDE4LjQsMy4wNSwyOC43NUExLjY1LDEuNjUsMCwwLDAsNC42MSwzMC41aDhBMi42NywyLjY3LDAsMCwxLDE0LjIxLDI2YTIuNjcsMi42NywwLDAsMS0uMzctMS4zNCwyLjcsMi43LDAs''@;'; put 'put ''MCwxLDIuNy0yLjdoNmEyLjcsMi43LDAsMCwxLDIuNywyLjdBMi42MywyLjYzLDAsMCwxLDI0Ljg5LDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuNiwyOC41YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAs''@;'; put 'put ''MCwyMS42LDI4LjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi41NCwyMy41aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjIs''@;'; put 'put ''MzEuNUgxNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjcsMzEuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjcsMjcuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JykseS5DbHJTaGFwZVBlc289KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDEzLjJIMjcu''@;'; put 'put ''ODlBNi44MSw2LjgxLDAsMCwwLDI4LDEyYTcuODUsNy44NSwwLDAsMC0uMS0xLjE5aDIuOTNhLjguOCwwLDAsMCwwLTEuNkgyNy40NkE4LjQ0LDguNDQsMCwwLDAsMTkuNTcsNEgxMWExLDEsMCwwLDAtMSwxVjkuMkg3YS44LjgsMCwwLDAsMCwxLjZoM3YyLjRIN2EuOC44LDAsMCwwLDAsMS42''@;'; put 'put ''aDNWMzFhMSwxLDAsMCwwLDIsMFYyMGg3LjU3YTguNDUsOC40NSwwLDAsMCw3Ljg5LTUuMkgzMWEuOC44LDAsMCwwLDAtMS42Wk0xMiw2aDcuNTdhNi41MSw2LjUxLDAsMCwxLDUuNjgsMy4ySDEyWm0wLDQuOEgyNS44N2E1LjYsNS42LDAsMCwxLDAsMi40SDEyWk0xOS41NywxOEgxMlYxNC44''@;'; put 'put ''SDI1LjI1QTYuNTEsNi41MSwwLDAsMSwxOS41NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxMy44VjE2aDkuNDVhNS4yNiw1LjI2LDAsMCwwLC4wOC0uODksNC43Miw0LjcyLDAsMCwwLS4yLTEuMzFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxOS43aDUuMTlhNC4yOCw0LjI4LDAsMCwwLDMuNS0xLjlIMTQuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zNywxMC41MUgxNC4xOFYxMmg4''@;'; put 'put ''LjM3QTQuMjEsNC4yMSwwLDAsMCwxOS4zNywxMC41MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjY3LDJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTcuNjcsMlptMTAuNSwxNS44SDI1LjdhNi44Nyw2Ljg3LDAsMCwxLTYu''@;'; put 'put ''MzMsNC40SDE0LjE4djYuNTRhMS4yNSwxLjI1LDAsMSwxLTIuNSwwVjE3LjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWMTMuOEg4Ljc2YS45LjksMCwxLDEsMC0xLjhoMi45MlY5LjI2QTEuMjUsMS4yNSwwLDAsMSwxMi45Myw4aDYuNDRhNi44NCw2Ljg0LDAsMCwxLDYuMTUsNGgyLjY1''@;'; put 'put ''YS45LjksMCwwLDEsMCwxLjhIMjYuMDlhNi45MSw2LjkxLDAsMCwxLC4xMiwxLjMsNi44LDYuOCwwLDAsMS0uMDYuOWgyYS45LjksMCwwLDEsMCwxLjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVSdWJsZT0oMCxnLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMjAuNTcsMjBBOC4yMyw4LjIzLDAsMCwwLDI5LDEyYTguMjMsOC4yMywwLDAsMC04LjQzLThIMTJhMSwxLDAsMCwwLTEsMVYxOEg5YTEsMSwwLDAsMCwwLDJoMnYySDlhMSwxLDAsMCwwLDAsMmgydjdhMSwxLDAsMCwwLDIsMFYyNGg5YTEsMSwwLDAsMCwwLTJIMTNWMjBa''@;'; put 'put ''TTEzLDZoNy41N0E2LjI0LDYuMjQsMCwwLDEsMjcsMTJhNi4yMyw2LjIzLDAsMCwxLTYuNDMsNkgxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMC43NSw5LjI1SDE1djguODFoNS43OWE0LjY2LDQuNjYsMCwwLDAsNC44Ni00LjRB''@;'; put 'put ''NC42NSw0LjY1LDAsMCwwLDIwLjc1LDkuMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTIuNzUsMTguNTZIMTVWMjJoOC4yOWExLDEsMCwwLDEsMCwySDE1djVhMS4y''@;'; put 'put ''NSwxLjI1LDAsMCwxLTIuNSwwVjI0SDExLjI1YTEsMSwwLDAsMSwwLTJoMS4yMVYyMC41NkgxMS4yNWExLjI1LDEuMjUsMCwwLDEsMC0yLjVoMS4yMVY4YTEuMjUsMS4yNSwwLDAsMSwxLjI1LTEuMjVoN2E3LjE0LDcuMTQsMCwwLDEsNy4zNiw2LjlBNy4xNSw3LjE1LDAsMCwxLDIwLjc1LDIw''@;'; put 'put ''LjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlRW1wbG95ZWVHcm91cD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCwwLDEsMTguNDIsMTYuMzFa''@;'; put 'put ''bTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCww''@;'; put 'put ''LDEsMTguNDIsMTYuMzFabTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuOTEsMTcuNjVhMjAuNiwyMC42LDAsMCwwLTEzLDJB''@;'; put 'put ''MS43NywxLjc3LDAsMCwwLDgsMjEuMjV2My41NmExLDEsMCwwLDAsMiwwVjIxLjM4YTE4LjkyLDE4LjkyLDAsMCwxLDEyLTEuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzMsMjJIMjYuM1YyMC41MmExLDEsMCwwLDAtMiww''@;'; put 'put ''VjIySDE3YTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIzQTEsMSwwLDAsMCwzMywyMlpNMzIsMzJIMThWMjRoNi4zdi40MWExLDEsMCwwLDAsMiwwVjI0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAg''@;'; put 'put ''PHJlY3QgeD0iMjEuODEiIHk9IjI3LjQyIiB3aWR0aD0iNS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMC44NCwxMi4yNGExOCwxOCwwLDAsMC03Ljk1LDJBMS42NywxLjY3LDAsMCwwLDIsMTUuNzF2''@;'; put 'put ''My4xYTEsMSwwLDAsMCwyLDB2LTIuOWExNiwxNiwwLDAsMSw3LjU4LTEuNjdBNy4yOCw3LjI4LDAsMCwxLDEwLjg0LDEyLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMzLjExLDE0LjIzYTE3LjgsMTcuOCwwLDAsMC03LjEy''@;'; put 'put ''LTIsNy40Niw3LjQ2LDAsMCwxLS43MywyQTE1Ljg5LDE1Ljg5LDAsMCwxLDMyLDE1LjkxdjIuOWExLDEsMCwxLDAsMiwwdi0zLjFBMS42NywxLjY3LDAsMCwwLDMzLjExLDE0LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHBhdGggZD0iTTEw''@;'; put 'put ''LjY2LDEwLjYxYzAtLjIzLDAtLjQ1LDAtLjY3YTMuMDcsMy4wNywwLDAsMSwuNTQtNi4xMSwzLjE1LDMuMTUsMCwwLDEsMi4yLjg5LDguMTYsOC4xNiwwLDAsMSwxLjctMS4wOCw1LjEzLDUuMTMsMCwwLDAtOSwzLjI3LDUuMSw1LjEsMCwwLDAsNC43LDVBNy40Miw3LjQyLDAsMCwxLDEwLjY2''@;'; put 'put ''LDEwLjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHBhdGggZD0iTTI0Ljc3LDEuODNhNS4xNyw1LjE3LDAsMCwwLTMuNjksMS41NSw3Ljg3LDcuODcsMCwwLDEsMS45LDEsMy4xNCwzLjE0LDAsMCwxLDQuOTMsMi41MiwzLjA5LDMuMDksMCww''@;'; put 'put ''LDEtMS43OSwyLjc3LDcuMTQsNy4xNCwwLDAsMSwuMDYuOTMsNy44OCw3Ljg4LDAsMCwxLS4xLDEuMiw1LjEsNS4xLDAsMCwwLDMuODMtNC45QTUuMTIsNS4xMiwwLDAsMCwyNC43NywxLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgXG4gIDxl''@;'; put 'put ''bGxpcHNlIGN4PSIxOCIgY3k9IjExLjI4IiByeD0iNC43NiIgcnk9IjQuNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTAuNzgsMTEuNzVjLjE2LDAsLjMyLDAsLjQ4LDAsMC0uMTUsMC0uMjgsMC0uNDNhNi43LDYuNywwLDAsMSwzLjc1''@;'; put 'put ''LTYsNC42Miw0LjYyLDAsMSwwLTQuMjEsNi40NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTI0Ljc2LDExLjI4YzAsLjE1LDAsLjI4LDAsLjQzLjE2LDAsLjMyLDAsLjQ4LDBBNC41OCw0LjU4LDAsMSwwLDIxLDUuMjksNi43LDYuNyww''@;'; put 'put ''LDAsMSwyNC43NiwxMS4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTIyLjI5LDE2LjQ1YTIxLjQ1LDIxLjQ1LDAsMCwxLDUuNzEsMiwyLjcxLDIuNzEsMCwwLDEsLjY4LjUzSDM0VjE1LjU2YS43Mi43MiwwLDAsMC0uMzgtLjY0LDE4''@;'; put 'put ''LDE4LDAsMCwwLTguNC0yLjA1bC0uNjYsMEE2LjY2LDYuNjYsMCwwLDEsMjIuMjksMTYuNDVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik02LjUzLDIwLjkyQTIuNzYsMi43NiwwLDAsMSw4LDE4LjQ3YTIxLjQ1LDIxLjQ1LDAsMCwxLDUu''@;'; put 'put ''NzEtMiw2LjY2LDYuNjYsMCwwLDEtMi4yNy0zLjU1bC0uNjYsMGExOCwxOCwwLDAsMC04LjQsMi4wNS43Mi43MiwwLDAsMC0uMzguNjRWMjJINi41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iMjEuNDYiIHk9IjI2LjY5IiB3aWR0aD0i''@;'; put 'put ''NS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMyLjgxLDIxLjI2SDI1Ljk0di0xYTEsMSwwLDAsMC0yLDB2MUgyMlYxOC40M0EyMC4xNywyMC4xNywwLDAsMCwxOCwxOGExOS4yNywxOS4yNywwLDAsMC05LjA2''@;'; put 'put ''LDIuMjIuNzYuNzYsMCwwLDAtLjQxLjY4djUuNjFoNy4xMXY2LjA5YTEsMSwwLDAsMCwxLDFIMzIuODFhMSwxLDAsMCwwLDEtMVYyMi4yNkExLDEsMCwwLDAsMzIuODEsMjEuMjZabS0xLDEwLjM2SDE3LjY0VjIzLjI2aDYuM3YuOTFhMSwxLDAsMCwwLDIsMHYtLjkxaDUuODdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+JykseS5DbHJTaGFwZUVtcGxveWVlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNi40MywxNi42OWE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNi40MywxNi42OVptMC0xMS45MmE1LDUsMCwxLDAsNSw1QTUsNSwwLDAsMCwx''@;'; put 'put ''Ni40Myw0Ljc3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDE3LjlBMjUuNDEsMjUuNDEsMCwwLDAsNS44OCwxOS41N2E0LjA2LDQuMDYsMCwwLDAtMi4zMSwzLjY4VjI5LjJhMSwxLDAsMSwwLDIsMFYyMy4yNWEyLDIsMCww''@;'; put 'put ''LDEsMS4xNi0xLjg2LDIyLjkxLDIyLjkxLDAsMCwxLDkuNy0yLjExLDIzLjU4LDIzLjU4LDAsMCwxLDUuNTcuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4xNCIgeT0iMjcuNDEiIHdpZHRoPSI2LjE0IiBoZWlnaHQ9IjEu''@;'; put 'put ''NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMzLjE3LDIxLjQ3SDI4djJoNC4xN3Y4LjM3SDE4VjIzLjQ3aDYuM3YuNDJhMSwxLDAsMCwwLDIsMFYyMGExLDEsMCwwLDAtMiwwdjEuNDdIMTdhMSwxLDAsMCwwLTEsMVYzMi44NGEx''@;'; put 'put ''LDEsMCwwLDAsMSwxSDMzLjE3YTEsMSwwLDAsMCwxLTFWMjIuNDdBMSwxLDAsMCwwLDMzLjE3LDIxLjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgXG4gIDxjaXJjbGUgY3g9IjE2Ljg2IiBjeT0iOS43MyIgcj0iNi40NiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMSIgeT0iMjgiIHdpZHRoPSI3IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTUsMzB2M2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwx''@;'; put 'put ''LTFWMjNhMSwxLDAsMCwwLTEtMUgyNlYyMC41M2ExLDEsMCwwLDAtMiwwVjIySDIyVjE4LjQyQTMyLjEyLDMyLjEyLDAsMCwwLDE2Ljg2LDE4YTI2LDI2LDAsMCwwLTExLDIuMzksMy4yOCwzLjI4LDAsMCwwLTEuODgsM1YzMFptMTcsMkgxN1YyNGg3di40MmExLDEsMCwwLDAsMiwwVjI0aDZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JykseS5DbHJTaGFwZUZhY3Rvcnk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ3LDcuMzdhMSwxLDAsMCwwLTEsLjA2TDIzLDEzLjc3VjguMjZhMSwxLDAsMCwwLTEuNjQtLjc3TDEzLjQ4LDE0SDEwVjQu''@;'; put 'put ''NjJhMSwxLDAsMCwwLS43OC0xbC00LS45YTEsMSwwLDAsMC0uODUuMkExLDEsMCwwLDAsNCwzLjczVjE0SDNhMSwxLDAsMCwwLTEsMVYzMWExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWOC4yNkExLDEsMCwwLDAsMzMuNDcsNy4zN1pNNiw1bDIsLjQ0VjE0SDZaTTMyLDMwSDRWMTZo''@;'; put 'put ''OS44M2ExLDEsMCwwLDAsLjY0LS4yM0wyMSwxMC4zN3Y1LjI4YTEsMSwwLDAsMCwxLjU2LjgzTDMyLDEwLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMTcuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjIxLjk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSI2IiB5PSIyNS45OSIgd2lkdGg9IjgiIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHJlY3QgeD0iMTkiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIxOSIgeT0i''@;'; put 'put ''MjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjIzIiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5c''@;'; put 'put ''biAgPHJlY3QgeD0iMjMiIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIvPlxuICA8cmVjdCB4PSIyNyIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gIFxuICA8cGF0aCBkPSJNMzIuNDUsOC40NCwyMiwxNS4zVjkuNTFhMSwxLDAsMCwwLTEu''@;'; put 'put ''NjMtLjc4TDE0LjA3LDE0SDEwVjQuMDZMNCwyLjcxVjE0SDJWMzFhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjkuMjdBMSwxLDAsMCwwLDMyLjQ1LDguNDRaTTE0LDI5SDZWMjdoOFptMC00SDZWMjNoOFptMC00SDZWMTloOFptOCw4SDIwVjI2aDJabTAtNkgyMFYyMGgyWm00LDZI''@;'; put 'put ''MjRWMjZoMlptMC02SDI0VjIwaDJabTQsNkgyOFYyNmgyWm0wLTZIMjhWMjBoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSx5LkNvbW1lcmNlU2hhcGVzPXtjYWxjdWxhdG9yOnkuQ2xyU2hhcGVDYWxjdWxhdG9yLCJwaWdneS1iYW5rIjp5LkNsclNoYXBl''@;'; put 'put ''UGlnZ3lCYW5rLCJzaG9wcGluZy1iYWciOnkuQ2xyU2hhcGVTaG9wcGluZ0JhZywic2hvcHBpbmctY2FydCI6eS5DbHJTaGFwZVNob3BwaW5nQ2FydCx3YWxsZXQ6eS5DbHJTaGFwZVdhbGxldCxzdG9yZTp5LkNsclNoYXBlU3RvcmUsZXVybzp5LkNsclNoYXBlRXVybyxkb2xsYXI6eS5DbHJT''@;'; put 'put ''aGFwZURvbGxhcixwZXNvOnkuQ2xyU2hhcGVQZXNvLCJjcmVkaXQtY2FyZCI6eS5DbHJTaGFwZUNyZWRpdENhcmQsYmFuazp5LkNsclNoYXBlQmFuaywiZG9sbGFyLWJpbGwiOnkuQ2xyU2hhcGVEb2xsYXJCaWxsLCJlLWNoZWNrIjp5LkNsclNoYXBlRUNoZWNrLHBvdW5kOnkuQ2xyU2hhcGVQ''@;'; put 'put ''b3VuZCxydXBlZTp5LkNsclNoYXBlUnVwZWUsd29uOnkuQ2xyU2hhcGVXb24seWVuOnkuQ2xyU2hhcGVZZW4sYml0Y29pbjp5LkNsclNoYXBlQml0Y29pbixydWJsZTp5LkNsclNoYXBlUnVibGUsImNvaW4tYmFnIjp5LkNsclNoYXBlQ29pbkJhZywiZW1wbG95ZWUtZ3JvdXAiOnkuQ2xyU2hh''@;'; put 'put ''cGVFbXBsb3llZUdyb3VwLGVtcGxveWVlOnkuQ2xyU2hhcGVFbXBsb3llZSxmYWN0b3J5OnkuQ2xyU2hhcGVGYWN0b3J5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db21tZXJjZVNoYXBlcywic2F2aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvbW1lcmNlU2hhcGVzWyJwaWdn''@;'; put 'put ''eS1iYW5rIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoeS5Db21tZXJjZVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Db3JlU2hhcGVzPXkuQ2xyU2hhcGVBcnJvdz15''@;'; put 'put ''LkNsclNoYXBlU3RlcEZvcndhcmQyPXkuQ2xyU2hhcGVFeWVIaWRlPXkuQ2xyU2hhcGVFeWU9eS5DbHJTaGFwZUV2ZW50PXkuQ2xyU2hhcGVDYWxlbmRhcj15LkNsclNoYXBlQW5nbGVEb3VibGU9eS5DbHJTaGFwZVZpZXdDb2x1bW5zPXkuQ2xyU2hhcGVTZWFyY2g9eS5DbHJTaGFwZVZtQnVn''@;'; put 'put ''PXkuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPXkuQ2xyU2hhcGVGaWx0ZXJHcmlkPXkuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPXkuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9eS5DbHJTaGFwZUNsb3VkPXkuQ2xyU2hhcGVJbWFnZT15LkNsclNoYXBlQmVsbD15LkNsclNoYXBlRm9s''@;'; put 'put ''ZGVyT3Blbj15LkNsclNoYXBlRm9sZGVyPXkuQ2xyU2hhcGVBbmdsZT15LkNsclNoYXBlVXNlcj15LkNsclNoYXBlQmFycz15LkNsclNoYXBlSGVscEluZm89eS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD15LkNsclNoYXBlRXJyb3JTdGFuZGFyZD15LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJk''@;'; put 'put ''PXkuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9eS5DbHJTaGFwZUluZm9DaXJjbGU9eS5DbHJTaGFwZUNoZWNrQ2lyY2xlPXkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT15LkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT15LkNsclNoYXBlVGltZXM9eS5DbHJTaGFwZUNoZWNrPXkuQ2xyU2hh''@;'; put 'put ''cGVDb2c9eS5DbHJTaGFwZUhvbWU9eS5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9z''@;'; put 'put ''dmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBj''@;'; put 'put ''eD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4z''@;'; put 'put ''NCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSww''@;'; put 'put ''LDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4nKSx5LkNsclNoYXBlSG9tZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCww''@;'; put 'put ''LDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEz''@;'; put 'put ''VjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgs''@;'; put 'put ''NC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44''@;'; put 'put ''M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZaIi8+JykseS5DbHJTaGFwZUNvZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcs''@;'; put 'put ''N3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40''@;'; put 'put ''Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIs''@;'; put 'put ''MTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEu''@;'; put 'put ''MWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQs''@;'; put 'put ''MTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwt''@;'; put 'put ''MS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJs''@;'; put 'put ''MC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAu''@;'; put 'put ''NywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdz''@;'; put 'put ''LTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYs''@;'; put 'put ''MS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwx''@;'; put 'put ''LjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0w''@;'; put 'put ''LjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAu''@;'; put 'put ''My0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4x''@;'; put 'put ''bDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZs''@;'; put 'put ''Mi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjls''@;'; put 'put ''LTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMw''@;'; put 'put ''LjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41''@;'; put 'put ''LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40''@;'; put 'put ''YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4z''@;'; put 'put ''LTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMz''@;'; put 'put ''LjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0w''@;'; put 'put ''LjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0w''@;'; put 'put ''LjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3''@;'; put 'put ''LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42''@;'; put 'put ''OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYx''@;'; put 'put ''LDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45''@;'; put 'put ''NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42''@;'; put 'put ''MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEu''@;'; put 'put ''NjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4z''@;'; put 'put ''N2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwx''@;'; put 'put ''MS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43''@;'; put 'put ''MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMx''@;'; put 'put ''YS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40''@;'; put 'put ''My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdh''@;'; put 'put ''LjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42Myww''@;'; put 'put ''LDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlQ2hlY2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSx5LkNsclNoYXBlVGltZXM9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwx''@;'; put 'put ''LjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+JykseS5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmEx''@;'; put 'put ''LjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9''@;'; put 'put ''IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42''@;'; put 'put ''NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEu''@;'; put 'put ''NDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSx5LkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1''@;'; put 'put ''IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEu''@;'; put 'put ''NDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSx5LkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9''@;'; put 'put ''Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEs''@;'; put 'put ''MSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLHkuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwy''@;'; put 'put ''aDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAs''@;'; put 'put ''MCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIs''@;'; put 'put ''MiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSx5LkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAs''@;'; put 'put ''MmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQs''@;'; put 'put ''MTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwx''@;'; put 'put ''LTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSx5LkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLGcuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVh''@;'; put 'put ''MS40LDEuNCwwLDEsMSwyLDJaIi8+JykseS5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+''@;'; put 'put ''JykseS5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi''@;'; put 'put ''IGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwz''@;'; put 'put ''NC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMy''@;'; put 'put ''Ljg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3''@;'; put 'put ''NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTgg''@;'; put 'put ''MzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0''@;'; put 'put ''MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCww''@;'; put 'put ''djEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLHkuQ2xyU2hhcGVIZWxwSW5mbz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEu''@;'; put 'put ''NDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUu''@;'; put 'put ''NTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTku''@;'; put 'put ''MywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIu''@;'; put 'put ''NjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIw''@;'; put 'put ''Ljc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2''@;'; put 'put ''LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40Nywy''@;'; put 'put ''LjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUJhcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwx''@;'; put 'put ''LDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSx5LkNsclNoYXBlVXNlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwx''@;'; put 'put ''LTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgy''@;'; put 'put ''OWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4z''@;'; put 'put ''N2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4''@;'; put 'put ''LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcu''@;'; put 'put ''MTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42''@;'; put 'put ''MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYx''@;'; put 'put ''LDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu''@;'; put 'put ''MTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEu''@;'; put 'put ''NSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3''@;'; put 'put ''LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUFuZ2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIu''@;'; put 'put ''NTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSx5LkNsclNoYXBlRm9sZGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDls''@;'; put 'put ''Mi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy''@;'; put 'put ''LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMu''@;'; put 'put ''NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQu''@;'; put 'put ''MTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIs''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5''@;'; put 'put ''LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEz''@;'; put 'put ''LjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PicpLHkuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIs''@;'; put 'put ''MSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAs''@;'; put 'put ''MCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSww''@;'; put 'put ''LDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYu''@;'; put 'put ''OWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAs''@;'; put 'put ''MSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJM''@;'; put 'put ''MTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz''@;'; put 'put ''NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwy''@;'; put 'put ''LjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAs''@;'; put 'put ''NS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUu''@;'; put 'put ''NEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEs''@;'; put 'put ''MTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAs''@;'; put 'put ''MCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43''@;'; put 'put ''MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx''@;'; put 'put ''Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JykseS5DbHJTaGFwZUJlbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44''@;'; put 'put ''M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42''@;'; put 'put ''MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywx''@;'; put 'put ''NC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIg''@;'; put 'put ''ZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4y''@;'; put 'put ''NCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDks''@;'; put 'put ''MCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAs''@;'; put 'put ''MS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0Ljlh''@;'; put 'put ''MTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQu''@;'; put 'put ''NCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwx''@;'; put 'put ''LDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40''@;'; put 'put ''NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlSW1hZ2U9KDAs''@;'; put 'put ''Zy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1''@;'; put 'put ''LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAs''@;'; put 'put ''MCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEs''@;'; put 'put ''MS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYx''@;'; put 'put ''Mi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEs''@;'; put 'put ''MEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUNsb3VkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAu''@;'; put 'put ''MTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywy''@;'; put 'put ''My4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2''@;'; put 'put ''LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4''@;'; put 'put ''LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44''@;'; put 'put ''Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4x''@;'; put 'put ''OGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5''@;'; put 'put ''LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4''@;'; put 'put ''LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0y''@;'; put 'put ''OSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMz''@;'; put 'put ''LDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44''@;'; put 'put ''OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxnLmNsckljb25TVkcp''@;'; put 'put ''KCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAs''@;'; put 'put ''MCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUs''@;'; put 'put ''MCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSx5LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAs''@;'; put 'put ''MC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQs''@;'; put 'put ''MCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwx''@;'; put 'put ''NCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1''@;'; put 'put ''bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JykseS5DbHJTaGFwZVZtQnVnPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMi''@;'; put 'put ''IGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywy''@;'; put 'put ''Miw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwx''@;'; put 'put ''LjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCww''@;'; put 'put ''LDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywx''@;'; put 'put ''NC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0x''@;'; put 'put ''LjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43Nywx''@;'; put 'put ''Ljc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0iI2ZmZmZmZiIvPicpLHkuQ2xyU2hhcGVTZWFyY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEw''@;'; put 'put ''Ljk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0z''@;'; put 'put ''NSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1LDMzLjI5WiIvPicpLHkuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEy''@;'; put 'put ''LDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JykseS5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLHkuQ2xyU2hhcGVDYWxlbmRhcj0o''@;'; put 'put ''MCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx''@;'; put 'put ''Ljc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIg''@;'; put 'put ''eT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIg''@;'; put 'put ''eT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIg''@;'; put 'put ''ZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJo''@;'; put 'put ''MjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t''@;'; put 'put ''YmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMz''@;'; put 'put ''LjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0''@;'; put 'put ''IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24g''@;'; put 'put ''cG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJN''@;'; put 'put ''MzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgs''@;'; put 'put ''MCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgy''@;'; put 'put ''NlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1i''@;'; put 'put ''YWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcu''@;'; put 'put ''NSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwy''@;'; put 'put ''Nkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlRXZlbnQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcs''@;'; put 'put ''MjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4x''@;'; put 'put ''OUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBh''@;'; put 'put ''MSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSww''@;'; put 'put ''LDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9''@;'; put 'put ''Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1''@;'; put 'put ''LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00Vjlh''@;'; put 'put ''Mi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2''@;'; put 'put ''Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBk''@;'; put 'put ''PSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2''@;'; put 'put ''aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43''@;'; put 'put ''OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVFeWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYu''@;'; put 'put ''MjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMu''@;'; put 'put ''OC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwx''@;'; put 'put ''OCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIs''@;'; put 'put ''MTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5''@;'; put 'put ''LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9''@;'; put 'put ''IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSx5LkNsclNoYXBlRXllSGlkZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYu''@;'; put 'put ''NzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIs''@;'; put 'put ''MS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYu''@;'; put 'put ''NDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42''@;'; put 'put ''MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgs''@;'; put 'put ''OC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41Miwx''@;'; put 'put ''OS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEs''@;'; put 'put ''MCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSx5LkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUFycm93PSgw''@;'; put 'put ''LGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIi8+JykseS5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOnkuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6eS5DbHJTaGFwZUhvbWUsY29nOnkuQ2xyU2hhcGVDb2csY2hlY2s6eS5DbHJTaGFwZUNoZWNrLHRpbWVzOnkuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRp''@;'; put 'put ''b24tdHJpYW5nbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1hdGlvbi1jaXJjbGUiOnkuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjp5LkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjp5LkNsclNoYXBlSW5mb0NpcmNsZSwi''@;'; put 'put ''aW5mby1zdGFuZGFyZCI6eS5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFuZGFyZCI6eS5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOnkuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjp5LkNsclNoYXBlV2FybmluZ1N0YW5k''@;'; put 'put ''YXJkLCJoZWxwLWluZm8iOnkuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOnkuQ2xyU2hhcGVCYXJzLHVzZXI6eS5DbHJTaGFwZVVzZXIsYW5nbGU6eS5DbHJTaGFwZUFuZ2xlLGZvbGRlcjp5LkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6eS5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDp5LkNs''@;'; put 'put ''clNoYXBlQmVsbCxpbWFnZTp5LkNsclNoYXBlSW1hZ2UsY2xvdWQ6eS5DbHJTaGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjp5LkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6eS5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlk''@;'; put 'put ''Ijp5LkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjp5LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjp5LkNsclNoYXBlVm1CdWcsc2VhcmNoOnkuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6eS5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1k''@;'; put 'put ''b3VibGUiOnkuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjp5LkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6eS5DbHJTaGFwZUV2ZW50LGV5ZTp5LkNsclNoYXBlRXllLCJleWUtaGlkZSI6eS5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjp5LkNsclNoYXBlU3RlcEZvcndhcmQy''@;'; put 'put ''LGFycm93OnkuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuQ29yZVNoYXBlcywiaG91c2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsXy5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJjbG9zZSIs''@;'; put 'put ''KDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSh5LkNvcmVTaGFwZXMsImVycm9yIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJpbmZvIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBl''@;'; put 'put ''c1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsIm1lbnUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLF8uZGVzY3JpcHRvckNv''@;'; put 'put ''bmZpZykoeS5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJjYXJldCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLF8u''@;'; put 'put ''ZGVzY3JpcHRvckNvbmZpZykoeS5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkNvcmVTaGFw''@;'; put 'put ''ZXMsImNvbGxhcHNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuQ29yZVNoYXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuQ2xyU2hhcGVMb2dvdXQ9eS5DbHJTaGFwZUxvZ2luPXkuQ2xyU2hhcGVIZWxwPXkuQ2xy''@;'; put 'put ''U2hhcGVDb3B5PXkuQ2xyU2hhcGVDaGlsZEFycm93PXkuQ2xyU2hhcGVDaXJjbGVBcnJvdz15LkNsclNoYXBlQWxhcm1DbG9jaz15LkNsclNoYXBlQ2xvY2s9eS5DbHJTaGFwZUhpc3Rvcnk9eS5DbHJTaGFwZVRhZ3M9eS5DbHJTaGFwZVRhZz15LkNsclNoYXBlVHJhc2g9eS5DbHJTaGFwZVRp''@;'; put 'put ''bWVzQ2lyY2xlPXkuQ2xyU2hhcGVCYW49eS5DbHJTaGFwZVBsdXNDaXJjbGU9eS5DbHJTaGFwZU1pbnVzQ2lyY2xlPXkuQ2xyU2hhcGVNaW51cz15LkNsclNoYXBlUGx1cz15LkNsclNoYXBlRmlsZT15LkNsclNoYXBlUGluPXkuQ2xyU2hhcGVGaWx0ZXI9eS5DbHJTaGFwZVBvcE91dD15LkNs''@;'; put 'put ''clNoYXBlVXNlcnM9eS5DbHJTaGFwZVVubG9jaz15LkNsclNoYXBlTG9jaz15LkNsclNoYXBlVXBsb2FkPXkuQ2xyU2hhcGVEb3dubG9hZD15LkNsclNoYXBlTGlnaHRidWxiPXkuQ2xyU2hhcGVWaWV3Q2FyZHM9eS5DbHJTaGFwZVZpZXdMaXN0PXkuQ2xyU2hhcGVTeW5jPXkuQ2xyU2hhcGVS''@;'; put 'put ''ZWZyZXNoPXkuQ2xyU2hhcGVOb3RlPXkuQ2xyU2hhcGVQZW5jaWw9eS5DbHJTaGFwZVRoZXJtb21ldGVyPXkuQ2xyU2hhcGVCdWc9eS5DbHJTaGFwZVNjaXNzb3JzPXkuQ2xyU2hhcGVBc3Rlcmlzaz15LkNsclNoYXBlQm9vaz15LkNsclNoYXBlT2JqZWN0cz15LkNsclNoYXBlUmVzaXplPXku''@;'; put 'put ''Q2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9eS5DbHJTaGFwZUN1cnNvckhhbmQ9eS5DbHJTaGFwZUN1cnNvckFycm93PXkuQ2xyU2hhcGVHcmlkVmlldz15LkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249eS5DbHJTaGFwZU5ldz15LkNsclNoYXBlQWxhcm1PZmY9eS5DbHJTaGFwZVBpbmJvYXJk''@;'; put 'put ''PXkuQ2xyU2hhcGVBZGRUZXh0PXZvaWQgMCx5LkNsclNoYXBlQ2xvbmU9eS5DbHJTaGFwZUN1cnNvck1vdmU9eS5DbHJTaGFwZVdhbmQ9eS5DbHJTaGFwZVN1bj15LkNsclNoYXBlTW9vbj15LkNsclNoYXBlRmlsdGVyMj15LkNsclNoYXBlRHJhZ0hhbmRsZT15LkNsclNoYXBlQ29weVRvQ2xp''@;'; put 'put ''cGJvYXJkPXkuQ2xyU2hhcGVDb2xvclBpY2tlcj15LkNsclNoYXBlQnJpZWZjYXNlPXkuQ2xyU2hhcGVFeHBhbmRDYXJkPXkuQ2xyU2hhcGVDb2xsYXBzZUNhcmQ9eS5DbHJTaGFwZVNvcnRCeT15LkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9eS5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPXkuQ2xy''@;'; put 'put ''U2hhcGVTaHJpbms9eS5DbHJTaGFwZVBhcGVyY2xpcD15LkNsclNoYXBlRmlsZUdyb3VwPXkuQ2xyU2hhcGVSZXBlYXQ9eS5DbHJTaGFwZUlkQmFkZ2U9eS5DbHJTaGFwZUJhbGFuY2U9eS5DbHJTaGFwZU9yZ2FuaXphdGlvbj15LkNsclNoYXBlTm9BY2Nlc3M9eS5DbHJTaGFwZUhvdXJnbGFz''@;'; put 'put ''cz15LkNsclNoYXBlRmxhbWU9eS5DbHJTaGFwZVRhcmdldD15LkNsclNoYXBlQnVsbHNleWU9eS5DbHJTaGFwZVdyZW5jaD15LkNsclNoYXBlQm9sdD15LkNsclNoYXBlTGlicmFyeT15LkNsclNoYXBlS2V5PXkuQ2xyU2hhcGVab29tT3V0PXkuQ2xyU2hhcGVab29tSW49eS5DbHJTaGFwZVdp''@;'; put 'put ''bmRvd1Jlc3RvcmU9eS5DbHJTaGFwZVdpbmRvd01pbj15LkNsclNoYXBlV2luZG93TWF4PXkuQ2xyU2hhcGVXaW5kb3dDbG9zZT15LkNsclNoYXBlVG9vbHM9eS5DbHJTaGFwZVN3aXRjaD15LkNsclNoYXBlVHdvV2F5QXJyb3dzPXkuQ2xyU2hhcGVGaWxlU2V0dGluZ3M9eS5DbHJTaGFwZVNj''@;'; put 'put ''cm9sbD15LkNsclNoYXBlVW5kbz15LkNsclNoYXBlUmVkbz15LkNsclNoYXBlTGlzdD15LkNsclNoYXBlRmlyZXdhbGw9eS5DbHJTaGFwZUNsaXBib2FyZD15LkNsclNoYXBlU2xpZGVyPXkuQ2xyU2hhcGVXb3JsZD15LkNsclNoYXBlUHJpbnRlcj12b2lkIDAseS5Fc3NlbnRpYWxTaGFwZXM9''@;'; put 'put ''eS5DbHJTaGFwZUNvbG9yUGFsZXR0ZT15LkNsclNoYXBlRmlyc3RBaWQ9eS5DbHJTaGFwZUJldGE9eS5DbHJTaGFwZURvdENpcmNsZT15LkNsclNoYXBlQ2lyY2xlPXkuQ2xyU2hhcGVDcm9zc2hhaXJzPXkuQ2xyU2hhcGVWb2x1bWU9eS5DbHJTaGFwZVRhYmxlPXkuQ2xyU2hhcGVTbm93Zmxh''@;'; put 'put ''a2U9eS5DbHJTaGFwZUZ1ZWw9eS5DbHJTaGFwZUZvcm09eS5DbHJTaGFwZUZpc2g9eS5DbHJTaGFwZVRyZWU9eS5DbHJTaGFwZVJlY3ljbGU9eS5DbHJTaGFwZUZpbHRlck9mZj15LkNsclNoYXBlRmlsZVppcD15LkNsclNoYXBlQ3Vyc29ySGFuZE9wZW49eS5DbHJTaGFwZUN1cnNvckhhbmRH''@;'; put 'put ''cmFiPXkuQ2xyU2hhcGVUcmVlVmlldz15LkNsclNoYXBlUG9ydHJhaXQ9eS5DbHJTaGFwZVBhc3RlPXkuQ2xyU2hhcGVMYW5kc2NhcGU9eS5DbHJTaGFwZUVyYXNlcj15LkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj15LkNsclNoYXBlRGV0YWlscz12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0''@;'; put 'put ''aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLGc9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp''@;'; put 'put ''LEI9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO3kuQ2xyU2hhcGVBZGRUZXh0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEs''@;'; put 'put ''MjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYzLjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSx5LkNsclNoYXBlUGluYm9hcmQ9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUxLDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNs''@;'; put 'put ''Mi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjljLjc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTct''@;'; put 'put ''N2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgs''@;'; put 'put ''MS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLHkuQ2xyU2hhcGVBbGFybU9mZj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2''@;'; put 'put ''LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIy''@;'; put 'put ''QS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIuNzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRs''@;'; put 'put ''Mi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIs''@;'; put 'put ''MjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wxNywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0''@;'; put 'put ''bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQuMTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLHkuQ2xyU2hhcGVOZXc9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4w''@;'; put 'put ''OC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkzLDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCww''@;'; put 'put ''LDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIuODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4''@;'; put 'put ''IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAx''@;'; put 'put ''Ni44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44''@;'; put 'put ''NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMuMzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0x''@;'; put 'put ''LjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEuMzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLHkuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgs''@;'; put 'put ''Mi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0''@;'; put 'put ''LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRz''@;'; put 'put ''Ny4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEs''@;'; put 'put ''MCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEsMSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLHkuQ2xyU2hhcGVHcmlkVmlldz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAs''@;'; put 'put ''NEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAs''@;'; put 'put ''MCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2''@;'; put 'put ''OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9''@;'; put 'put ''IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4''@;'; put 'put ''PSIyIiByeT0iMiIvPicpLHkuQ2xyU2hhcGVDdXJzb3JBcnJvdz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3''@;'; put 'put ''bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcsOC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCww''@;'; put 'put ''LDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwyLjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAs''@;'; put 'put ''MCwwLDI5LDEyLjM2WiIvPicpLHkuQ2xyU2hhcGVDdXJzb3JIYW5kPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4''@;'; put 'put ''LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMuNCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEu''@;'; put 'put ''NDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAs''@;'; put 'put ''MS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQuMTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40''@;'; put 'put ''MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4y''@;'; put 'put ''OGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMu''@;'; put 'put ''MjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0uNDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYx''@;'; put 'put ''NS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkzLDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAs''@;'; put 'put ''MTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JykseS5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0w''@;'; put 'put ''LjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTExLjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQt''@;'; put 'put ''MS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywxLjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUu''@;'; put 'put ''OFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYsMTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYt''@;'; put 'put ''My4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUuMkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2''@;'; put 'put ''LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4zLTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjks''@;'; put 'put ''MC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYzbDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwx''@;'; put 'put ''LjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAgICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JykseS5DbHJTaGFwZVJlc2l6ZT0oMCxnLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JykseS5DbHJTaGFwZU9iamVjdHM9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41''@;'; put 'put ''Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgz''@;'; put 'put ''MlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSww''@;'; put 'put ''LDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0wLDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUs''@;'; put 'put ''MjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEsMSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwxdjRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMi''@;'; put 'put ''IGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSx5LkNsclNoYXBlQm9vaz0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDks''@;'; put 'put ''MSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlhMSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5''@;'; put 'put ''LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4w''@;'; put 'put ''NiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFoiLz4nKSx5LkNsclNoYXBlQXN0ZXJpc2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44''@;'; put 'put ''NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0''@;'; put 'put ''LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEt''@;'; put 'put ''MS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcyTDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4''@;'; put 'put ''bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JykseS5DbHJTaGFwZVNjaXNz''@;'; put 'put ''b3JzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1''@;'; put 'put ''Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwxLjc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41Nyww''@;'; put 'put ''LDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMu''@;'; put 'put ''NzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYsMCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYs''@;'; put 'put ''MEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0zLjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwx''@;'; put 'put ''LDcuNDUsMTMuMjNaIi8+JykseS5DbHJTaGFwZUJ1Zz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIyLjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44''@;'; put 'put ''MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcy''@;'; put 'put ''YTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJhMSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwz''@;'; put 'put ''MS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMuNjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMu''@;'; put 'put ''MTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4xNy0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEs''@;'; put 'put ''NS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMsMy4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4z''@;'; put 'put ''OCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCww''@;'; put 'put ''LDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0x''@;'; put 'put ''NCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgsMS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45''@;'; put 'put ''NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRB''@;'; put 'put ''MTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwxLjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAs''@;'; put 'put ''MSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDkuMDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4''@;'; put 'put ''LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLHkuQ2xyU2hhcGVUaGVybW9tZXRlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSww''@;'; put 'put ''LDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4zNi00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSx5LkNsclNoYXBlUGVuY2lsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwyOCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAs''@;'; put 'put ''MCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wxLjc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQu''@;'; put 'put ''MjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4z''@;'; put 'put ''MmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcyLDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLHkuQ2xyU2hhcGVOb3RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwy''@;'; put 'put ''LDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4y''@;'; put 'put ''OCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wy''@;'; put 'put ''LjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2''@;'; put 'put ''SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwz''@;'; put 'put ''LjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVSZWZyZXNoPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDks''@;'; put 'put ''MCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAsMSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDEx''@;'; put 'put ''LjY1WiIvPicpLHkuQ2xyU2hhcGVTeW5jPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDgu''@;'; put 'put ''NywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAsMiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSww''@;'; put 'put ''LDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCww''@;'; put 'put ''LDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwxLDAsMCwwLDMwLjA2LDFaIi8+JykseS5DbHJTaGFwZVZpZXdMaXN0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSww''@;'; put 'put ''LDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLHkuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLHkuQ2xyU2hhcGVMaWdodGJ1bGI9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40Niwx''@;'; put 'put ''OC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEtMS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRh''@;'; put 'put ''MTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCww''@;'; put 'put ''LDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0x''@;'; put 'put ''LjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0x''@;'; put 'put ''LjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywx''@;'; put 'put ''OC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQs''@;'; put 'put ''MCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwx''@;'; put 'put ''LC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQu''@;'; put 'put ''NjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwx''@;'; put 'put ''LC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40''@;'; put 'put ''NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywzLjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIx''@;'; put 'put ''LjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41''@;'; put 'put ''LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44LjgsMCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSx5LkNsclNoYXBlRG93bmxvYWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQx''@;'; put 'put ''LTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1''@;'; put 'put ''YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5''@;'; put 'put ''LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAt''@;'; put 'put ''MS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JykseS5DbHJTaGFwZVVwbG9hZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVh''@;'; put 'put ''MSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAs''@;'; put 'put ''MS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQs''@;'; put 'put ''MSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwx''@;'; put 'put ''czEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEzLjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05Ljlj''@;'; put 'put ''LTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEs''@;'; put 'put ''MSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40''@;'; put 'put ''MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicp''@;'; put 'put ''LHkuQ2xyU2hhcGVMb2NrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVa''@;'; put 'put ''TTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAs''@;'; put 'put ''MCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMyYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAs''@;'; put 'put ''MSw2LDYuMzZaIi8+JykseS5DbHJTaGFwZVVubG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2''@;'; put 'put ''LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgy''@;'; put 'put ''VjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEs''@;'; put 'put ''MSwyLC4wOVoiLz4nKSx5LkNsclNoYXBlVXNlcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44''@;'; put 'put ''LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcuM3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDku''@;'; put 'put ''NnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEt''@;'; put 'put ''MC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVoMnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIs''@;'; put 'put ''MC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIuMiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00''@;'; put 'put ''LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4yLDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAu''@;'; put 'put ''NSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMwLTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMw''@;'; put 'put ''LjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0xLjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9''@;'; put 'put ''Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwz''@;'; put 'put ''MEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0wLjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4x''@;'; put 'put ''LDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4x''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEt''@;'; put 'put ''MS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4''@;'; put 'put ''LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1Yy''@;'; put 'put ''My41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40Niww''@;'; put 'put ''LDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMuNjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDks''@;'; put 'put ''MCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEsNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2''@;'; put 'put ''LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0''@;'; put 'put ''LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwx''@;'; put 'put ''Ny44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcsMi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTgu''@;'; put 'put ''MSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4yOHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIz''@;'; put 'put ''LjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwxLDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQy''@;'; put 'put ''LDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCwwLDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUu''@;'; put 'put ''MjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAt''@;'; put 'put ''My40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgs''@;'; put 'put ''Ni41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4x''@;'; put 'put ''MSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43''@;'; put 'put ''bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTgu''@;'; put 'put ''NjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNB''@;'; put 'put ''OS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwx''@;'; put 'put ''LDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcsOWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0y''@;'; put 'put ''Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4x''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCww''@;'; put 'put ''LDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwu''@;'; put 'put ''MiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40''@;'; put 'put ''NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41''@;'; put 'put ''NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMs''@;'; put 'put ''MTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSx5LkNsclNoYXBlUG9wT3V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNINWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjkuNTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSx5LkNsclNoYXBlRmlsdGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5''@;'; put 'put ''bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44''@;'; put 'put ''MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywx''@;'; put 'put ''LjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTkuMTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVBpbj0oMCxnLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAs''@;'; put 'put ''MCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgw''@;'; put 'put ''YTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEu''@;'; put 'put ''NDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwx''@;'; put 'put ''LjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JykseS5DbHJTaGFwZUZpbGU9KDAsZy5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0u''@;'; put 'put ''MywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSww''@;'; put 'put ''LTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUuNFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUu''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4w''@;'; put 'put ''OUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIg''@;'; put 'put ''ZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcs''@;'; put 'put ''MCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwx''@;'; put 'put ''LjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0w''@;'; put 'put ''LjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLHkuQ2xyU2hhcGVQbHVz''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEs''@;'; put 'put ''MCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSx5LkNsclNoYXBlTWludXM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp''@;'; put 'put ''LHkuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEs''@;'; put 'put ''MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdIOS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThB''@;'; put 'put ''MTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTguNDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVCYW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJa''@;'; put 'put ''TTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLHkuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43''@;'; put 'put ''Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQs''@;'; put 'put ''MCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJs''@;'; put 'put ''LTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4wOCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLHkuQ2xyU2hhcGVUcmFzaD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0''@;'; put 'put ''LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSx5LkNsclNoYXBlVGFnPSgwLGcuY2xySWNvblNWRykoJzxjaXJj''@;'; put 'put ''bGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5Ljky''@;'; put 'put ''YTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIy''@;'; put 'put ''LDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEsMS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5''@;'; put 'put ''LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEu''@;'; put 'put ''NDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5''@;'; put 'put ''LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCww''@;'; put 'put ''LDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEs''@;'; put 'put ''OS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwy''@;'; put 'put ''LDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIs''@;'; put 'put ''MiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIv''@;'; put 'put ''PicpLHkuQ2xyU2hhcGVUYWdzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45''@;'; put 'put ''MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4y''@;'; put 'put ''MUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIx''@;'; put 'put ''LjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2Ljkz''@;'; put 'put ''djkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43Myww''@;'; put 'put ''bDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwx''@;'; put 'put ''Mi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4y''@;'; put 'put ''MSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTku''@;'; put 'put ''MTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwx''@;'; put 'put ''OS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIs''@;'; put 'put ''MCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43Mywx''@;'; put 'put ''LjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAs''@;'; put 'put ''MTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEs''@;'; put 'put ''NUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAs''@;'; put 'put ''Mi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwx''@;'; put 'put ''LTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCww''@;'; put 'put ''LDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUs''@;'; put 'put ''MS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0Ii8+JykseS5DbHJTaGFwZUhpc3Rvcnk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1''@;'; put 'put ''LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JykseS5DbHJTaGFwZUNsb2NrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQs''@;'; put 'put ''MTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcu''@;'; put 'put ''OTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5''@;'; put 'put ''LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3''@;'; put 'put ''LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCwwLDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAs''@;'; put 'put ''MCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz''@;'; put 'put ''NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0''@;'; put 'put ''LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEz''@;'; put 'put ''LDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAt''@;'; put 'put ''Mi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAs''@;'; put 'put ''MCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2''@;'; put 'put ''bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3''@;'; put 'put ''LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSx5''@;'; put 'put ''LkNsclNoYXBlQWxhcm1DbG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFM''@;'; put 'put ''MjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwyOS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljky''@;'; put 'put ''LDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03''@;'; put 'put ''LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSww''@;'; put 'put ''LDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAs''@;'; put 'put ''MzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTlsMS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2''@;'; put 'put ''LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQu''@;'; put 'put ''NDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCww''@;'; put 'put ''LDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwx''@;'; put 'put ''LDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYs''@;'; put 'put ''MzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSww''@;'; put 'put ''LDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEu''@;'; put 'put ''MjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMu''@;'; put 'put ''ODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1''@;'; put 'put ''Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4''@;'; put 'put ''TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5''@;'; put 'put ''YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLHkuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwx''@;'; put 'put ''OCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEu''@;'; put 'put ''NDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUuMjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2''@;'; put 'put ''LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIsMEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JykseS5DbHJTaGFwZUNoaWxkQXJyb3c9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUNvcHk9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYyNEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYsMCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSx5LkNsclNoYXBlSGVscD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkEx''@;'; put 'put ''NiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4z''@;'; put 'put ''OCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCww''@;'; put 'put ''LDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4y''@;'; put 'put ''YTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1''@;'; put 'put ''YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAs''@;'; put 'put ''MS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2''@;'; put 'put ''LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0u''@;'; put 'put ''NDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0x''@;'; put 'put ''LDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEu''@;'; put 'put ''NjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0x''@;'; put 'put ''LjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMs''@;'; put 'put ''Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSx5LkNsclNoYXBlTG9naW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYy''@;'; put 'put ''MC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5''@;'; put 'put ''LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAs''@;'; put 'put ''MCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQxLTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVMb2dvdXQ9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0yLTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''OC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAsMCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiLz4nKSx5LkNsclNoYXBlUHJpbnRlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5''@;'; put 'put ''Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhh''@;'; put 'put ''MSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIy''@;'; put 'put ''LjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwz''@;'; put 'put ''LjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3''@;'; put 'put ''LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1YxM0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwx''@;'; put 'put ''LDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgy''@;'; put 'put ''N1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUy''@;'; put 'put ''LDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLHkuQ2xyU2hhcGVXb3JsZD0oMCxnLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRoMy42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMt''@;'; put 'put ''LjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTku''@;'; put 'put ''MzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRj''@;'; put 'put ''LjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCww''@;'; put 'put ''LDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44''@;'; put 'put ''MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQuNzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQs''@;'; put 'put ''MTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAsMCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEt''@;'; put 'put ''My43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTkuMzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4z''@;'; put 'put ''My0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4zNmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNa''@;'; put 'put ''TTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj''@;'; put 'put ''eT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41''@;'; put 'put ''NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIs''@;'; put 'put ''MjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVjLS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhh''@;'; put 'put ''MTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIsMCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3''@;'; put 'put ''LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRjLjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3''@;'; put 'put ''YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkuNTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44''@;'; put 'put ''LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAs''@;'; put 'put ''MCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIy''@;'; put 'put ''LjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAs''@;'; put 'put ''MCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcuNDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLHkuQ2xyU2hhcGVTbGlkZXI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDgu''@;'; put 'put ''NDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCwwLDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwx''@;'; put 'put ''Ny44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0''@;'; put 'put ''LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAs''@;'; put 'put ''MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMuMjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCww''@;'; put 'put ''LDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAs''@;'; put 'put ''MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLHkuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMy''@;'; put 'put ''SDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIuMzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEs''@;'; put 'put ''NCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyNiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNB''@;'; put 'put ''LjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEs''@;'; put 'put ''MjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4z''@;'; put 'put ''MUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0''@;'; put 'put ''LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEs''@;'; put 'put ''MCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEuMzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4zMVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjEx''@;'; put 'put ''LTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1''@;'; put 'put ''Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZUZpcmV3YWxsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMy''@;'; put 'put ''djUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMydjYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEu''@;'; put 'put ''NzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUs''@;'; put 'put ''Ny41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45''@;'; put 'put ''MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhW''@;'; put 'put ''MjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRINFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0x''@;'; put 'put ''NCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLHkuQ2xyU2hhcGVMaXN0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdp''@;'; put 'put ''ZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTki''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCww''@;'; put 'put ''LDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00''@;'; put 'put ''SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicp''@;'; put 'put ''LHkuQ2xyU2hhcGVSZWRvPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEz''@;'; put 'put ''bC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVVbmRvPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwx''@;'; put 'put ''Miw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVTY3JvbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQu''@;'; put 'put ''NSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMy''@;'; put 'put ''LDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0''@;'; put 'put ''LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAs''@;'; put 'put ''MSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSww''@;'; put 'put ''djQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAs''@;'; put 'put ''MCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCww''@;'; put 'put ''LDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwxNS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44''@;'; put 'put ''SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEs''@;'; put 'put ''NSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLGcuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEuMTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1''@;'; put 'put ''Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGExLjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40''@;'; put 'put ''YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwx''@;'; put 'put ''LjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiwwLDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4Ljct''@;'; put 'put ''LjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQyLTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41''@;'; put 'put ''LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIxLDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCww''@;'; put 'put ''LDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMuMDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEu''@;'; put 'put ''MTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTItMSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40''@;'; put 'put ''NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0u''@;'; put 'put ''MTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYs''@;'; put 'put ''MCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1''@;'; put 'put ''LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIu''@;'; put 'put ''MjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEu''@;'; put 'put ''NDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgy''@;'; put 'put ''My40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wx''@;'; put 'put ''OC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41''@;'; put 'put ''LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43''@;'; put 'put ''NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGEx''@;'; put 'put ''LjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4x''@;'; put 'put ''NiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4y''@;'; put 'put ''OWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwx''@;'; put 'put ''LjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwx''@;'; put 'put ''LDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEy''@;'; put 'put ''QTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAsNC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0''@;'; put 'put ''LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyNnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1''@;'; put 'put ''LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCwwLDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3''@;'; put 'put ''LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCww''@;'; put 'put ''LDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCww''@;'; put 'put ''LDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwx''@;'; put 'put ''OGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0y''@;'; put 'put ''LC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3''@;'; put 'put ''LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4z''@;'; put 'put ''Ny4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1h''@;'; put 'put ''bGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwy''@;'; put 'put ''Ni42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwx''@;'; put 'put ''LjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYx''@;'; put 'put ''LDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDIt''@;'; put 'put ''LjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC00LS1iYWRnZWQiIC8+JykseS5DbHJTaGFwZVR3b1dheUFycm93cz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjku''@;'; put 'put ''NTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMuMjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlU3dpdGNoPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFM''@;'; put 'put ''OS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4yMSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIg''@;'; put 'put ''eT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC02IiAvPicpLHkuQ2xyU2hhcGVUb29scz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCww''@;'; put 'put ''LDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFM''@;'; put 'put ''MzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgxNmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwx''@;'; put 'put ''LDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCwwLDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlV2luZG93Q2xvc2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5''@;'; put 'put ''LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlV2luZG93TWF4PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcu''@;'; put 'put ''ODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVdpbmRvd01pbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAs''@;'; put 'put ''MjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZVpvb21Jbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEw''@;'; put 'put ''LDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEt''@;'; put 'put ''MS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVab29tT3V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCww''@;'; put 'put ''LDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNo''@;'; put 'put ''YXBlS2V5PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0u''@;'; put 'put ''NEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQs''@;'; put 'put ''MGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5''@;'; put 'put ''PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCww''@;'; put 'put ''LDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwyOC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBM''@;'; put 'put ''MjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4''@;'; put 'put ''PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUs''@;'; put 'put ''NSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEu''@;'; put 'put ''NzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2''@;'; put 'put ''MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgy''@;'; put 'put ''My40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAs''@;'; put 'put ''MSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4z''@;'; put 'put ''NywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwz''@;'; put 'put ''MiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCww''@;'; put 'put ''LDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEs''@;'; put 'put ''MSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIgLz4nKSx5LkNsclNoYXBlTGlicmFyeT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4''@;'; put 'put ''LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBhMSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMu''@;'; put 'put ''OTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUJvbHQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgz''@;'; put 'put ''MC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGExLDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSww''@;'; put 'put ''LDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUu''@;'; put 'put ''NywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiAvPicpLHkuQ2xyU2hhcGVXcmVuY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcs''@;'; put 'put ''MCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCwwLDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42''@;'; put 'put ''MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4z''@;'; put 'put ''IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAu''@;'; put 'put ''NUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSwwLDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAs''@;'; put 'put ''MSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUJ1bGxzZXllPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBs''@;'; put 'put ''LTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4z''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4''@;'; put 'put ''LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRM''@;'; put 'put ''MTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEs''@;'; put 'put ''MSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgsNC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjksNC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEz''@;'; put 'put ''LjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQuMDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSx5LkNsclNoYXBlVGFyZ2V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcu''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgs''@;'; put 'put ''NC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcsMCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVGbGFtZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwx''@;'; put 'put ''Ny43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMsMjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQz''@;'; put 'put ''LDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4yMSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3''@;'; put 'put ''LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0y''@;'; put 'put ''LjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIs''@;'; put 'put ''Ny44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCww''@;'; put 'put ''LDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgyMi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0''@;'; put 'put ''bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43NywwLS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlSG91cmdsYXNzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2''@;'; put 'put ''LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAsMjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwu''@;'; put 'put ''NjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2Ex''@;'; put 'put ''LDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4z''@;'; put 'put ''NGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45''@;'; put 'put ''MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCww''@;'; put 'put ''LDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAs''@;'; put 'put ''MSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAs''@;'; put 'put ''Mi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs''@;'; put 'put ''MS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2''@;'; put 'put ''LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAs''@;'; put 'put ''MCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAs''@;'; put 'put ''MCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIu''@;'; put 'put ''NjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEu''@;'; put 'put ''MTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYu''@;'; put 'put ''MDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEu''@;'; put 'put ''MjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwx''@;'; put 'put ''MS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwxMS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZU5vQWNjZXNzPSgwLGcuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4y''@;'; put 'put ''NUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4yNSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAs''@;'; put 'put ''MSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYuODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZU9yZ2FuaXphdGlvbj0oMCxnLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAx''@;'; put 'put ''Ny4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVB''@;'; put 'put ''MiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiww''@;'; put 'put ''LDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4''@;'; put 'put ''LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIxLjg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIy''@;'; put 'put ''IiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JykseS5DbHJTaGFwZUJhbGFuY2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEy''@;'; put 'put ''YTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIz''@;'; put 'put ''LDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEuNi44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcu''@;'; put 'put ''MjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0u''@;'; put 'put ''NjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTguMTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLHkuQ2xyU2hhcGVJZEJhZGdlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0''@;'; put 'put ''LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4y''@;'; put 'put ''Ni0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwx''@;'; put 'put ''LDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEt''@;'; put 'put ''Mi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIw''@;'; put 'put ''LDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4y''@;'; put 'put ''OWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRn''@;'; put 'put ''ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3''@;'; put 'put ''LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40''@;'; put 'put ''VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIx''@;'; put 'put ''LjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIs''@;'; put 'put ''MiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjcz''@;'; put 'put ''QTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4''@;'; put 'put ''VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZVJlcGVhdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYs''@;'; put 'put ''MTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4yOCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3''@;'; put 'put ''LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02LjFsLTIsMi4xMloiLz4nKSx5LkNsclNoYXBlRmlsZUdyb3VwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwx''@;'; put 'put ''LTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFWMzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIg''@;'; put 'put ''aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAs''@;'; put 'put ''MCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLHkuQ2xyU2hhcGVQYXBlcmNsaXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMywwLDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDks''@;'; put 'put ''MCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYsMzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSww''@;'; put 'put ''LDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUtLjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQu''@;'; put 'put ''NjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEsMjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLHkuQ2xyU2hhcGVTaHJpbms9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JykseS5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLGcuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4xMiw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAs''@;'; put 'put ''MCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAs''@;'; put 'put ''Ljc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEt''@;'; put 'put ''LjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5''@;'; put 'put ''LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4yOSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4x''@;'; put 'put ''MiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjks''@;'; put 'put ''Ny4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwxMS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQz''@;'; put 'put ''LDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEs''@;'; put 'put ''MCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWExLDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuOTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwz''@;'; put 'put ''My4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCwwLC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhh''@;'; put 'put ''MSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JykseS5DbHJTaGFwZVNvcnRCeT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAtMmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywy''@;'; put 'put ''MUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1''@;'; put 'put ''LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAsMC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAt''@;'; put 'put ''MS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4zN2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEs''@;'; put 'put ''MCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjdsNC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JykseS5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcuMzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCww''@;'; put 'put ''LDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAs''@;'; put 'put ''MCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlQnJpZWZjYXNlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQsNi43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwx''@;'; put 'put ''LDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSww''@;'; put 'put ''LDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYxOEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAs''@;'; put 'put ''MCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2''@;'; put 'put ''OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQz''@;'; put 'put ''QS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEsLjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUNvbG9yUGlja2Vy''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2Ey''@;'; put 'put ''LjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4wNywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAs''@;'; put 'put ''MS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQu''@;'; put 'put ''MDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAsMCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwxNi43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40''@;'; put 'put ''MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLGcuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcuMzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCww''@;'; put 'put ''LDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQy''@;'; put 'put ''LTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhB''@;'; put 'put ''MS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMz''@;'; put 'put ''SDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLHkuQ2xyU2hhcGVGaWx0ZXIyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCww''@;'; put 'put ''LDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+''@;'; put 'put ''XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JykseS5DbHJTaGFwZU1vb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0x''@;'; put 'put ''LS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQuOTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAs''@;'; put 'put ''MzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwxLDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIuMDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVN1bj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0xOCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4z''@;'; put 'put ''Miw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSww''@;'; put 'put ''LTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwxLDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAs''@;'; put 'put ''MmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQxYTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywx''@;'; put 'put ''MGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4''@;'; put 'put ''LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAuMDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAs''@;'; put 'put ''MCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0x''@;'; put 'put ''LTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYuNDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwyNi4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDku''@;'; put 'put ''ODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTksOC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC05IiAvPicpLHkuQ2xyU2hhcGVXYW5kPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40''@;'; put 'put ''NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwyLjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjha''@;'; put 'put ''TTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMtNS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEz''@;'; put 'put ''bC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywxLjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSww''@;'; put 'put ''LDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAsMCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEu''@;'; put 'put ''MTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wxLjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JykseS5DbHJT''@;'; put 'put ''aGFwZUN1cnNvck1vdmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVh''@;'; put 'put ''MSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUuODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5''@;'; put 'put ''LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFMMTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlQ2xvbmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIxIDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0''@;'; put 'put ''aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwzMCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlRGV0YWlscz0oMCxnLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCww''@;'; put 'put ''LDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiww''@;'; put 'put ''LDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwxLDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPicpLHkuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC02IiAvPicpLHkuQ2xyU2hhcGVFcmFzZXI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMy''@;'; put 'put ''SDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04''@;'; put 'put ''LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBsNy4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwy''@;'; put 'put ''OC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCwwLDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgz''@;'; put 'put ''LDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgsMTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlTGFuZHNjYXBlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1''@;'; put 'put ''LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wtMS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNs''@;'; put 'put ''MS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0xLjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwy''@;'; put 'put ''LDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4w''@;'; put 'put ''NiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0uMzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVBhc3RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0''@;'; put 'put ''LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0''@;'; put 'put ''djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBI''@;'; put 'put ''Mjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAv''@;'; put 'put ''PjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02''@;'; put 'put ''IiAvPicpLHkuQ2xyU2hhcGVQb3J0cmFpdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTgu''@;'; put 'put ''OCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgtMS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAs''@;'; put 'put ''MCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEu''@;'; put 'put ''MzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlVHJlZVZpZXc9KDAsZy5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAsMS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwx''@;'; put 'put ''LDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJINFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAs''@;'; put 'put ''MC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCww''@;'; put 'put ''LDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCww''@;'; put 'put ''LDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JykseS5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLGcuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAsMC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44''@;'; put 'put ''OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAs''@;'; put 'put ''MCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIu''@;'; put 'put ''MzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwxLDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5''@;'; put 'put ''aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJjLjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+JykseS5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2''@;'; put 'put ''LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4yOC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3''@;'; put 'put ''LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4y''@;'; put 'put ''NVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwuNDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgx''@;'; put 'put ''Ljh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZhMS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVGaWxlWmlwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIw''@;'; put 'put ''LjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMwLDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0''@;'; put 'put ''YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0xMy40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAu''@;'; put 'put ''NC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQsMSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0w''@;'; put 'put ''LjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMt''@;'; put 'put ''M3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFI''@;'; put 'put ''MTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlRmlsdGVyT2ZmPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJIMzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIuMSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAu''@;'; put 'put ''MWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwy''@;'; put 'put ''My45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFs''@;'; put 'put ''OCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVSZWN5Y2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCww''@;'; put 'put ''LjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAuNS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCww''@;'; put 'put ''LjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcu''@;'; put 'put ''Nyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwx''@;'; put 'put ''LjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRc''@;'; put 'put ''dGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUu''@;'; put 'put ''MiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjkt''@;'; put 'put ''My42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAuMy0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwy''@;'; put 'put ''LjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAsMC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4xYy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQs''@;'; put 'put ''MC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCww''@;'; put 'put ''LjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEuOCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4y''@;'; put 'put ''LTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEtMC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0''@;'; put 'put ''XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAu''@;'; put 'put ''MS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2''@;'; put 'put ''LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIyLjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlVHJlZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43''@;'; put 'put ''QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0xMywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0x''@;'; put 'put ''LTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01''@;'; put 'put ''LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQuOSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAu''@;'; put 'put ''OCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcuNywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQt''@;'; put 'put ''MC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wzLjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5''@;'; put 'put ''LkNsclNoYXBlRmlzaD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44''@;'; put 'put ''MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEu''@;'; put 'put ''OTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZjLTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0u''@;'; put 'put ''MTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBhMjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4x''@;'; put 'put ''MywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkExLDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVGb3JtPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSww''@;'; put 'put ''LDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEs''@;'; put 'put ''MCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCwwLDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEy''@;'; put 'put ''LjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFhMSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAs''@;'; put 'put ''MCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCww''@;'; put 'put ''LDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCwwLDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSx5LkNsclNoYXBlRnVlbD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEu''@;'; put 'put ''MTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcuODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUsMy41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1''@;'; put 'put ''LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCwwLDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0x''@;'; put 'put ''OCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEsMSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLHkuQ2xyU2hhcGVTbm93Zmxha2U9KDAsZy5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSwwLDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4w''@;'; put 'put ''NywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwz''@;'; put 'put ''MS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAuODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEsMSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwyLjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQuOCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAsMCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTci''@;'; put 'put ''IC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4yNiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSx5LkNsclNoYXBlVGFibGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAsMCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEt''@;'; put 'put ''MVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMz''@;'; put 'put ''YTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSx5LkNsclNoYXBlVm9sdW1lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEt''@;'; put 'put ''LjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCwwLDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwx''@;'; put 'put ''LDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJN''@;'; put 'put ''MjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSx5LkNsclNoYXBlQ3Jvc3NoYWlycz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh''@;'; put 'put ''dGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwxLDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAs''@;'; put 'put ''MSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMu''@;'; put 'put ''MSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JykseS5DbHJTaGFwZUNpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYs''@;'; put 'put ''MCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZURvdENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0''@;'; put 'put ''aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVCZXRhPSgwLGcuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYxLDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdz''@;'; put 'put ''LS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZI''@;'; put 'put ''MTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4zOC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTgu''@;'; put 'put ''MDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcuMDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAs''@;'; put 'put ''MCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgxOVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwxNy41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0wLjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiww''@;'; put 'put ''LTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAu''@;'; put 'put ''NCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjktMC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwx''@;'; put 'put ''NS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4yaC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4''@;'; put 'put ''LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4nKSx5LkNsclNoYXBlRmlyc3RBaWQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZI''@;'; put 'put ''NEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgxNi43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMs''@;'; put 'put ''MS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCwwLDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYu''@;'; put 'put ''OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQuNWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41''@;'; put 'put ''YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSx5LkNsclNo''@;'; put 'put ''YXBlQ29sb3JQYWxldHRlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgs''@;'; put 'put ''Mi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSwwLDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4x''@;'; put 'put ''LDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEuMUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcy''@;'; put 'put ''LDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAtNC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43Miwy''@;'; put 'put ''LjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgtLjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIy''@;'; put 'put ''LDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYsNCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAt''@;'; put 'put ''LjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4zOS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44Myww''@;'; put 'put ''LDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEu''@;'; put 'put ''MTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYsMS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAs''@;'; put 'put ''MS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxNS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0u''@;'; put 'put ''NS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3''@;'; put 'put ''LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4w''@;'; put 'put ''NmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2''@;'; put 'put ''LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwxLjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAs''@;'; put 'put ''MC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwy''@;'; put 'put ''Ljg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAsMCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUu''@;'; put 'put ''NTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQuMUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMs''@;'; put 'put ''MzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIzLDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAs''@;'; put 'put ''MSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwyLjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwy''@;'; put 'put ''Ljg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4y''@;'; put 'put ''MiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEtMi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAs''@;'; put 'put ''MCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIsMy4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuRXNzZW50aWFsU2hhcGVzPXsi''@;'; put 'put ''YWRkLXRleHQiOnkuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYiOnkuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDp5LkNsclNoYXBlUGluYm9hcmQsbmV3OnkuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6eS5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXci''@;'; put 'put ''OnkuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93Ijp5LkNsclNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjp5LkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOnkuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOnkuQ2xyU2hh''@;'; put 'put ''cGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6eS5DbHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6eS5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6eS5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTp5LkNsclNoYXBlUmVzaXplLG9iamVjdHM6eS5DbHJT''@;'; put 'put ''aGFwZU9iamVjdHMsYm9vazp5LkNsclNoYXBlQm9vayxhc3Rlcmlzazp5LkNsclNoYXBlQXN0ZXJpc2ssYnVnOnkuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6eS5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOnkuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6eS5DbHJTaGFwZVBlbmNpbCxu''@;'; put 'put ''b3RlOnkuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6eS5DbHJTaGFwZVJlZnJlc2gsc3luYzp5LkNsclNoYXBlU3luYywidmlldy1saXN0Ijp5LkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOnkuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6eS5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0''@;'; put 'put ''YnVsYjp5LkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOnkuQ2xyU2hhcGVEb3dubG9hZCx1cGxvYWQ6eS5DbHJTaGFwZVVwbG9hZCxsb2NrOnkuQ2xyU2hhcGVMb2NrLHVubG9jazp5LkNsclNoYXBlVW5sb2NrLHVzZXJzOnkuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6eS5DbHJTaGFwZVBv''@;'; put 'put ''cE91dCxmaWx0ZXI6eS5DbHJTaGFwZUZpbHRlcixwaW46eS5DbHJTaGFwZVBpbixmaWxlOnkuQ2xyU2hhcGVGaWxlLHBsdXM6eS5DbHJTaGFwZVBsdXMsbWludXM6eS5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOnkuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOnkuQ2xy''@;'; put 'put ''U2hhcGVQbHVzQ2lyY2xlLGJhbjp5LkNsclNoYXBlQmFuLCJ0aW1lcy1jaXJjbGUiOnkuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDp5LkNsclNoYXBlVHJhc2gsY2lyY2xlOnkuQ2xyU2hhcGVDaXJjbGUsdGFnOnkuQ2xyU2hhcGVUYWcsdGFnczp5LkNsclNoYXBlVGFncyxoaXN0b3J5Onku''@;'; put 'put ''Q2xyU2hhcGVIaXN0b3J5LGNsb2NrOnkuQ2xyU2hhcGVDbG9jaywiYWxhcm0tY2xvY2siOnkuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OkIuQ2xyU2hhcGVBcnJvdywiY2lyY2xlLWFycm93Ijp5LkNsclNoYXBlQ2lyY2xlQXJyb3csImNoaWxkLWFycm93Ijp5LkNsclNoYXBlQ2hpbGRBcnJv''@;'; put 'put ''dyxjb3B5OnkuQ2xyU2hhcGVDb3B5LGhlbHA6eS5DbHJTaGFwZUhlbHAsbG9naW46eS5DbHJTaGFwZUxvZ2luLGxvZ291dDp5LkNsclNoYXBlTG9nb3V0LHByaW50ZXI6eS5DbHJTaGFwZVByaW50ZXIsd29ybGQ6eS5DbHJTaGFwZVdvcmxkLHNsaWRlcjp5LkNsclNoYXBlU2xpZGVyLGNsaXBi''@;'; put 'put ''b2FyZDp5LkNsclNoYXBlQ2xpcGJvYXJkLGZpcmV3YWxsOnkuQ2xyU2hhcGVGaXJld2FsbCxsaXN0OnkuQ2xyU2hhcGVMaXN0LHJlZG86eS5DbHJTaGFwZVJlZG8sdW5kbzp5LkNsclNoYXBlVW5kbyxzY3JvbGw6eS5DbHJTaGFwZVNjcm9sbCwiZmlsZS1zZXR0aW5ncyI6eS5DbHJTaGFwZUZp''@;'; put 'put ''bGVTZXR0aW5ncywidHdvLXdheS1hcnJvd3MiOnkuQ2xyU2hhcGVUd29XYXlBcnJvd3Msc3dpdGNoOnkuQ2xyU2hhcGVTd2l0Y2gsdG9vbHM6eS5DbHJTaGFwZVRvb2xzLCJ3aW5kb3ctY2xvc2UiOnkuQ2xyU2hhcGVXaW5kb3dDbG9zZSwid2luZG93LW1heCI6eS5DbHJTaGFwZVdpbmRvd01h''@;'; put 'put ''eCwid2luZG93LW1pbiI6eS5DbHJTaGFwZVdpbmRvd01pbiwid2luZG93LXJlc3RvcmUiOnkuQ2xyU2hhcGVXaW5kb3dSZXN0b3JlLCJ6b29tLWluIjp5LkNsclNoYXBlWm9vbUluLCJ6b29tLW91dCI6eS5DbHJTaGFwZVpvb21PdXQsa2V5OnkuQ2xyU2hhcGVLZXksbGlicmFyeTp5LkNsclNo''@;'; put 'put ''YXBlTGlicmFyeSxib2x0OnkuQ2xyU2hhcGVCb2x0LHdyZW5jaDp5LkNsclNoYXBlV3JlbmNoLGJ1bGxzZXllOnkuQ2xyU2hhcGVCdWxsc2V5ZSx0YXJnZXQ6eS5DbHJTaGFwZVRhcmdldCxmbGFtZTp5LkNsclNoYXBlRmxhbWUsaG91cmdsYXNzOnkuQ2xyU2hhcGVIb3VyZ2xhc3MsIm5vLWFj''@;'; put 'put ''Y2VzcyI6eS5DbHJTaGFwZU5vQWNjZXNzLG9yZ2FuaXphdGlvbjp5LkNsclNoYXBlT3JnYW5pemF0aW9uLGJhbGFuY2U6eS5DbHJTaGFwZUJhbGFuY2UsImlkLWJhZGdlIjp5LkNsclNoYXBlSWRCYWRnZSxyZXBlYXQ6eS5DbHJTaGFwZVJlcGVhdCwiZmlsZS1ncm91cCI6eS5DbHJTaGFwZUZp''@;'; put 'put ''bGVHcm91cCxwYXBlcmNsaXA6eS5DbHJTaGFwZVBhcGVyY2xpcCxzaHJpbms6eS5DbHJTaGFwZVNocmluaywiYWNjZXNzaWJpbGl0eS0xIjp5LkNsclNoYXBlQWNjZXNzaWJpbGl0eTEsImFjY2Vzc2liaWxpdHktMiI6eS5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyLCJzb3J0LWJ5Ijp5LkNsclNo''@;'; put 'put ''YXBlU29ydEJ5LCJjb2xsYXBzZS1jYXJkIjp5LkNsclNoYXBlQ29sbGFwc2VDYXJkLCJleHBhbmQtY2FyZCI6eS5DbHJTaGFwZUV4cGFuZENhcmQsYnJpZWZjYXNlOnkuQ2xyU2hhcGVCcmllZmNhc2UsImNvbG9yLXBpY2tlciI6eS5DbHJTaGFwZUNvbG9yUGlja2VyLCJjb3B5LXRvLWNsaXBi''@;'; put 'put ''b2FyZCI6eS5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZCwiZmlsdGVyLTIiOnkuQ2xyU2hhcGVGaWx0ZXIyLCJkcmFnLWhhbmRsZSI6eS5DbHJTaGFwZURyYWdIYW5kbGUsbW9vbjp5LkNsclNoYXBlTW9vbixzdW46eS5DbHJTaGFwZVN1bix3YW5kOnkuQ2xyU2hhcGVXYW5kLGNsb25lOnkuQ2xy''@;'; put 'put ''U2hhcGVDbG9uZSxkZXRhaWxzOnkuQ2xyU2hhcGVEZXRhaWxzLCJkcmFnLWhhbmRsZS1jb3JuZXIiOnkuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyLGVyYXNlcjp5LkNsclNoYXBlRXJhc2VyLGxhbmRzY2FwZTp5LkNsclNoYXBlTGFuZHNjYXBlLHBhc3RlOnkuQ2xyU2hhcGVQYXN0ZSxwb3J0''@;'; put 'put ''cmFpdDp5LkNsclNoYXBlUG9ydHJhaXQsImZpbGUtemlwIjp5LkNsclNoYXBlRmlsZVppcCwiZmlsdGVyLW9mZiI6eS5DbHJTaGFwZUZpbHRlck9mZixyZWN5Y2xlOnkuQ2xyU2hhcGVSZWN5Y2xlLHRyZWU6eS5DbHJTaGFwZVRyZWUsZmlzaDp5LkNsclNoYXBlRmlzaCxmb3JtOnkuQ2xyU2hh''@;'; put 'put ''cGVGb3JtLGZ1ZWw6eS5DbHJTaGFwZUZ1ZWwsc25vd2ZsYWtlOnkuQ2xyU2hhcGVTbm93Zmxha2UsdGFibGU6eS5DbHJTaGFwZVRhYmxlLCJkb3QtY2lyY2xlIjp5LkNsclNoYXBlRG90Q2lyY2xlLHZvbHVtZTp5LkNsclNoYXBlVm9sdW1lLGNyb3NzaGFpcnM6eS5DbHJTaGFwZUNyb3NzaGFp''@;'; put 'put ''cnMsYmV0YTp5LkNsclNoYXBlQmV0YSwiY29sb3ItcGFsZXR0ZSI6eS5DbHJTaGFwZUNvbG9yUGFsZXR0ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVzLCJlZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnBlbmNpbCkpLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywibm90ZS1lZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLm5vdGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Fc3NlbnRpYWxTaGFwZXMsImdyb3VwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcp''@;'; put 'put ''KHkuRXNzZW50aWFsU2hhcGVzLnVzZXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVzLCJkb2N1bWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkVzc2VudGlhbFNoYXBlcy5maWxlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVz''@;'; put 'put ''LCJhZGQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Fc3NlbnRpYWxTaGFwZXMucGx1cykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywiY2FuY2VsIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLmJhbikpLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywicmVtb3ZlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzWyJ0aW1lcy1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywic2lnbi1pbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmln''@;'; put 'put ''KSh5LkVzc2VudGlhbFNoYXBlcy5sb2dpbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywic2lnbi1vdXQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Fc3NlbnRpYWxTaGFwZXMubG9nb3V0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hh''@;'; put 'put ''cGVzLCJsaWdodG5pbmciLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5Fc3NlbnRpYWxTaGFwZXMuYm9sdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywiZmxvdy1jaGFydCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkVzc2VudGlhbFNoYXBlcy5vcmdhbml6''@;'; put 'put ''YXRpb24pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Fc3NlbnRpYWxTaGFwZXMsImFsZXJ0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzWyJidWJibGUtZXhjbGFtYXRpb24iXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywicGlu''@;'; put 'put ''bmVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnBpbmJvYXJkKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuRXNzZW50aWFsU2hhcGVzLCJhdHRhY2htZW50IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnBhcGVyY2xpcCkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS1kb3duIiwoMCxfLmRl''@;'; put 'put ''c2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnNocmluaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LkVzc2VudGlhbFNoYXBlcywicmVzaXplLXVwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuRXNzZW50aWFsU2hhcGVzLnJlc2l6ZSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3''@;'; put 'put ''aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZCh5LkVzc2VudGlhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov''@;'; put 'put ''Ci8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuTWVkaWFTaGFwZXM9eS5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPXkuQ2xyU2hhcGVNaWNyb3Bo''@;'; put 'put ''b25lPXkuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9eS5DbHJTaGFwZVJlcGxheU9uZT15LkNsclNoYXBlUmVwbGF5QWxsPXkuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9eS5DbHJTaGFwZU11c2ljTm90ZT15LkNsclNoYXBlRmlsbVN0cmlwPXkuQ2xyU2hhcGVIZWFkcGhvbmVzPXkuQ2xyU2hhcGVWb2x1''@;'; put 'put ''bWVNdXRlPXkuQ2xyU2hhcGVWb2x1bWVVcD15LkNsclNoYXBlVm9sdW1lRG93bj15LkNsclNoYXBlU2h1ZmZsZT15LkNsclNoYXBlVmlkZW9DYW1lcmE9eS5DbHJTaGFwZUNhbWVyYT15LkNsclNoYXBlRmFzdEZvcndhcmQ9eS5DbHJTaGFwZVJld2luZD15LkNsclNoYXBlUG93ZXI9eS5DbHJT''@;'; put 'put ''aGFwZVN0b3A9eS5DbHJTaGFwZVN0ZXBGb3J3YXJkPXkuQ2xyU2hhcGVQYXVzZT15LkNsclNoYXBlUGxheT12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO3ku''@;'; put 'put ''Q2xyU2hhcGVQbGF5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC4wNywzMS42QTIuMDcsMi4wNywwLDAsMSw2LDI5LjUzVjYuMzJBMi4wNywyLjA3LDAsMCwxLDksNC40N0wzMi4yMSwxNi4wOGEyLjA3LDIu''@;'; put 'put ''MDcsMCwwLDEsMCwzLjdMOSwzMS4zOEEyLjA2LDIuMDYsMCwwLDEsOC4wNywzMS42Wm0wLTI1LjM0TDgsNi4zMlYyOS41M2wuMS4wNkwzMS4zMSwxOGEuMDYuMDYsMCwwLDAsMC0uMDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTMyLjE2LDE2LjA4LDguOTQsNC40N0EyLjA3LDIuMDcsMCwwLDAsNiw2LjMyVjI5LjUzYTIuMDYsMi4wNiwwLDAsMCwzLDEuODVMMzIuMTYsMTkuNzdhMi4wNywyLjA3LDAsMCwwLDAtMy43WiIvPicpLHkuQ2xyU2hhcGVQYXVzZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLjkzLDMySDYuMDdBMi4wNywyLjA3LDAsMCwxLDQsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsNi4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDE1LDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDEy''@;'; put 'put ''LjkzLDMyWk0xMyw2SDZWMzBoN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LjkzLDMySDIzLjA3QTIuMDcsMi4wNywwLDAsMSwyMSwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSwyMy4wNyw0aDYu''@;'; put 'put ''ODdBMi4wNywyLjA3LDAsMCwxLDMyLDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDI5LjkzLDMyWk0zMCw2SDIzVjMwaDdaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NSIgeT0iNCIgd2lkdGg9IjExIiBo''@;'; put 'put ''ZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMC45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz4nKSx5LkNsclNo''@;'; put 'put ''YXBlU3RlcEZvcndhcmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik01LDMyLjIzYTIsMiwwLDAsMS0yLTJWNS43N0EyLDIsMCwwLDEsNi4xNyw0LjE0TDIzLjIzLDE2LjM4YTIsMiwwLDAsMSwwLDMuMjVoMEw2''@;'; put 'put ''LjE3LDMxLjg2QTIsMiwwLDAsMSw1LDMyLjIzWk01LDUuNzdWMzAuMjNMMjIuMDcsMThaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMSwzMkgyOGEyLDIsMCwwLDEtMi0yVjZhMiwyLDAsMCwxLDItMmgz''@;'; put 'put ''YTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMxLDMyWk0yOCw2VjMwaDNWNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNSwzMS45YTIsMiwwLDAsMS0yLTJWNS40NEEyLDIsMCwwLDEsNi4xMiwzLjgxTDIz''@;'; put 'put ''LjE4LDE2YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjEyLDMxLjUyQTIsMiwwLDAsMSw1LDMxLjlaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjUuOTUiIHk9IjMuNjciIHdpZHRoPSI3IiBoZWlnaHQ9IjI4IiByeD0i''@;'; put 'put ''MiIgcnk9IjIiLz4nKSx5LkNsclNoYXBlU3RvcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDMySDZhMiwyLDAsMCwxLTItMlY2QTIsMiwwLDAsMSw2LDRIMzBhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCww''@;'; put 'put ''LDEsMzAsMzJaTTYsNlYzMEgzMFY2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTYiIHk9IjQiIHdpZHRoPSIyNy45OSIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JykseS5DbHJTaGFwZVBvd2VyPSgw''@;'; put 'put ''LF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMTVhMTUsMTUsMCwwLDEtNy41Mi0yOCwxLDEsMCwwLDEsMSwxLjczLDEzLDEzLDAsMSwwLDEzLDAsMSwxLDAsMSwxLDEtMS43MywxNSwxNSwwLDAsMS03LjUyLDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTgsMjFhMSwxLDAsMCwwLDEtMVY0YTEsMSwwLDAsMC0yLDBWMjBBMSwxLDAsMCwwLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTEsMTUuNEgzMC40NGExMywxMywwLDEsMS0xOS03LjUsMSwxLDAsMCwwLTEtMS43M0ExNSwxNSwwLDEsMCwzMywxOS4xNSwxNC45LDE0LjksMCwwLDAsMzIuNTEsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx''@;'; put 'put ''LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSww''@;'; put 'put ''LDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41bC0uMzEsMEExMywxMywwLDEsMSwxMS40OCw3LjlhMSwxLDAsMCwwLTEtMS43MywxNSwxNSwwLDEs''@;'; put 'put ''MCwyMS4zMSw3LjFBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0uMDYsMTcuNjhhMS4yOCwxLjI4LDAsMCwxLTEuMjktMS4yOFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBW''@;'; put 'put ''MTguNEExLjI4LDEuMjgsMCwwLDEsMTguMDYsMTkuNjhaTTE4LDI3Ljc5QTkuODgsOS44OCwwLDAsMSwxMi4xNyw5Ljg1YTEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2''@;'; put 'put ''QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuNCwxLjQsMCwwLDEsMS45NC0uMjlBOS44OCw5Ljg4LDAsMCwxLDE4LDI3Ljc5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42''@;'; put 'put ''OCwxNS40aC02QTkuNyw5LjcsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wOCw3LjA4LDAsMCwwLS40NS0yLjQ5SDIyLjIzQTMuNjksMy42''@;'; put 'put ''OSwwLDAsMSwxOS4zNSwxNHY0LjRhMS4yOSwxLjI5LDAsMCwxLTIuNTgsMFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDB2LjcxbDMuNzYtNi41MUExNiwxNiwwLDEsMCwzNCwxOGExNiwxNiwwLDAsMC0uMjMtMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2''@;'; put 'put ''Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0zLjU3LS45QTkuODMsOS44MywwLDAsMSwyOCwxNy44OWExMCwxMCwwLDEsMS0x''@;'; put 'put ''NS44My04LDEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuMzgsMS4zOCwwLDAsMSwxLjUyLS40OSw3LjQ1LDcuNDUsMCww''@;'; put 'put ''LDEtLjMtNi44MywxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE2Ljc3LDguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgsMFYxOC40YTEuMjksMS4yOSwwLDAsMS0yLjU4LDBaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVSZXdpbmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xNy4wOSwzMS41OGwtMTUuMzItMTJhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMS43NywxLjc3LDAsMCwxLDIwLDZ2Ni43TDMwLjgzLDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzNCw2VjMwYTIsMiwwLDAs''@;'; put 'put ''MS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuNzcsMS43NywwLDAsMS0uODUsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaTTMyLDMwbC4wNi0yNEwxOCwxNi44VjZMMywxOCwxOCwzMFYxOS4yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE2LjkyLDMxLjU4LDEuNiwxOS41N2EyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyQTEuOTMsMS45MywwLDAsMSwxOSw0LjIsMS44OSwxLjg5LDAsMCwxLDIwLDZ2Ni43TDMwLjY2LDQuNDJhMS45MywxLjkzLDAsMCwxLDIu''@;'; put 'put ''MDYtLjIyQTIsMiwwLDAsMSwzMy44Myw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuODksMS44OSwwLDAsMS0xLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWiIvPicpLHkuQ2xyU2hhcGVGYXN0Rm9yd2FyZD0oMCxf''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3Ljc3LDMxLjkyYTIsMiwwLDAsMS0uODYtLjJBMS44MSwxLjgxLDAsMCwxLDE2LDI5Ljkzdi02LjdMNS4yNCwzMS41YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyLDIsMiww''@;'; put 'put ''LDAsMS0xLjExLTEuNzl2LTI0QTIsMiwwLDAsMSwzLjE4LDQuMTJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjFWNS45MWExLjgxLDEuODEsMCwwLDEsLjkxLTEuNzlBMS45MywxLjkzLDAsMCwxLDE5LDQuMzRsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNUwxOSwzMS41QTIsMiww''@;'; put 'put ''LDAsMSwxNy43NywzMS45MlptMC0xMi44VjI5LjkzbDE1LjI2LTEyLTE1LjMyLTEyLC4wNiwxMC44MUw0LDUuOTF2MjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuNzEsMzJhMiwyLDAsMCwxLS44Ni0uMkExLjc3''@;'; put 'put ''LDEuNzcsMCwwLDEsMTYsMzB2LTYuN0w1LjE3LDMxLjU4YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyQTIsMiwwLDAsMSwyLDMwVjZBMiwyLDAsMCwxLDMuMTEsNC4yYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjY5VjZhMS43NywxLjc3LDAsMCwxLC44NS0xLjc5LDEuOTMsMS45Myww''@;'; put 'put ''LDAsMSwyLjA2LjIybDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVsLTE1LjMyLDEyQTIsMiwwLDAsMSwxNy43MSwzMloiLz4nKSx5LkNsclNoYXBlQ2FtZXJhPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEy''@;'; put 'put ''LDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDIySDRWMTBoOC42N2wxLjU1LTRoNy41NmwxLjU1LDRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksMTlhOSw5LDAsMSwwLDktOUE5LDksMCwwLDAsOSwxOVptMTYuNCwwQTcuNCw3LjQsMCwxLDEsMTgsMTEuNiw3LjQxLDcuNDEsMCwwLDEsMjUuNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS4zNywxMi44M2EuOC44LDAsMCwwLS44LS44SDYuMTdhLjguOCwwLDAsMCwwLDEuNmgyLjRBLjguOCwwLDAsMCw5LjM3LDEyLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMi4zNCwxOWE1LjU3LDUuNTcsMCwwLDAsMy4yNCw1bC44NS0xLjM3YTQsNCwwLDEsMSw0LjExLTYuNjFsLjg2LTEuMzhBNS41Niw1LjU2LDAsMCwwLDEyLjM0LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk02LjE3LDEzLjYzYS44''@;'; put 'put ''LjgsMCwwLDEsMC0xLjZoMi40YS44LjgsMCwwLDEsMCwxLjZaTTE4LDI4YTksOSwwLDEsMSw5LTlBOSw5LDAsMCwxLDE4LDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjExLDE5LjA2YTcuMDcsNy4wNywwLDAs''@;'; put 'put ''MCw0LjExLDYuNDFsMS4wOS0xLjc0YTUsNSwwLDEsMSw1LjIyLTguMzlsMS4wOS0xLjc2YTcuMDYsNy4wNiwwLDAsMC0xMS41MSw1LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLHkuQ2xyU2hhcGVWaWRlb0NhbWVyYT0oMCxfLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDEwLjM0YTIuMTEsMi4xMSwwLDAsMC0xLjE2LTEuOSwyLDIsMCwwLDAtMi4xMy4xNUwyNiwxMS42VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjI0LjRsNC42NCwzYTIuMDcsMi4wNywwLDAsMCwyLjIuMkEyLjExLDIuMTEsMCwwLDAsMzQsMjUuNjZaTTMxLjkzLDI1Ljc3Yy0uMDYsMC0uMTEsMC0uMTktLjA2TDI0LDIwLjc3VjI4SDZhMiwyLDAsMCwxLTItMlYxMEEyLDIsMCwwLDEsNiw4SDI0djcuMjNsNy44LTVh''@;'; put 'put ''LjExLjExLDAsMCwxLC4xMywwLC4xMS4xMSwwLDAsMSwuMDcuMTFWMjUuNjZBLjExLjExLDAsMCwxLDMxLjkzLDI1Ljc3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMsOS4zNSwyNiwxMi45VjhhMiwyLDAsMCww''@;'; put 'put ''LTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjIzLjA4bDYuMywzLjU1QTEuMSwxLjEsMCwwLDAsMzQsMjUuNzdWMTAuMkExLjEsMS4xLDAsMCwwLDMyLjMsOS4zNVoiLz4nKSx5LkNsclNoYXBlU2h1ZmZsZT0oMCxfLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIxLjYxLDExaDguNjJsLTMuMywzLjNhMSwxLDAsMSwwLDEuNDEsMS40MkwzNCwxMC4wOGwtLjcxLS43MWgwTDI4LjM0LDQuNDNhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xMSw5SDIxYTEsMSwwLDAs''@;'; put 'put ''MC0uODYuNUwxNy41LDE0LjA5bDEuMTYsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuMDcsMjUuMDdIM2ExLDEsMCwwLDAsMCwyaDguNjVhMSwxLDAsMCwwLC44Ni0uNUwxNS4xOCwyMiwxNCwyMFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjguMzQsMjAuMTdhMSwxLDAsMCwwLTEuNDEsMS40MmwzLjUsMy41SDIxLjYxTDEyLjUxLDkuNTNhMSwxLDAsMCwwLS44Ni0uNUgzYTEsMSwwLDEsMCwwLDJoOC4wN2w5LjEs''@;'; put 'put ''MTUuNTVhMSwxLDAsMCwwLC44Ni41SDI5LjlsLTMsM2ExLDEsMCwwLDAsMS40MSwxLjQybDQuOTUtNC45NGgwbC43MS0uNzFaIi8+JykseS5DbHJTaGFwZVZvbHVtZURvd249KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwyNSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDMyYTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjQxQTIsMiwwLDAsMSwyMCw2VjMwYTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMy''@;'; put 'put ''Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjI4TDE4LDMwVjZsLTcuNjUsNy42OGExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0x''@;'; put 'put ''Ljg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LjM0''@;'; put 'put ''LDMuODcsOSwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVY0LjYyQTEsMSwwLDAsMCwxOC4zNCwzLjg3WiIvPicpLHkuQ2xyU2hhcGVWb2x1bWVVcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEsMCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs''@;'; put 'put ''MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDMyLjA2YTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4z''@;'; put 'put ''My03LjM5QTIsMiwwLDAsMSwyMCw2djI0YTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyLjA2Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjNMMTgsMzAuMDZWNkwxMC4zNSwxMy43YTEsMSwwLDAsMS0uNzEuM1pNMTgsNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs''@;'; put 'put ''MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTguMzMsNCw5LjA3LDEyaC02YTEsMSwwLDAsMC0xLDF2OS45MmExLDEsMCwwLDAsMSwxSDguODhsOS40Niw4LjI0QTEsMSwwLDAsMCwyMCwz''@;'; put 'put ''MS40M1Y0LjcyQTEsMSwwLDAsMCwxOC4zMyw0WiIvPicpLHkuQ2xyU2hhcGVWb2x1bWVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMy42MSw2LjQxLDkuMTksMTJINGEyLDIsMCwwLDAtMiwydjhhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkg5LjE0bDcuNDEsNy40N0EyLDIsMCwwLDAsMTgsMzJhMiwyLDAsMCwwLC43Ni0uMTVBMiwyLDAsMCwwLDIwLDMwVjIyLjc3bDUuODksNS44OWMtLjI1LjE1LS40OS4yOS0uNzUuNDJhMSwxLDAsMCwwLC45LDEuNzksMTQuNCwxNC40LDAsMCwwLDEuMzEtLjc1bDIuMjgsMi4y''@;'; put 'put ''OEwzMSwzMSw1LDVaTTE4LDMwbC03LjczLTcuNzdBMSwxLDAsMCwwLDkuNTYsMjJINFYxNEg5LjY0YTEsMSwwLDAsMCwuNzEtLjNsLjI2LS4yNkwxOCwyMC44MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQu''@;'; put 'put ''ODksNi42OUExMi40MiwxMi40MiwwLDAsMSwyOSwyNi4xbDEuNDIsMS40MkExNC40MiwxNC40MiwwLDAsMCwyNS43Niw0Ljg4YTEsMSwwLDEsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi42''@;'; put 'put ''OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS4yNCwzLjcxTDI2LDIzLjEzQTguMTUsOC4xNSwwLDAsMCwyNy44LDE4YTguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCw2djkuMTVsMiwyVjZhMiwyLDAsMCwwLTMuNDItMS40MUwxMiw5LjE3bDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNC44Nyw2''@;'; put 'put ''LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI4Ljc1LDI2LjNsMS40MiwxLjQyQTE0LjQzLDE0LjQzLDAsMCwwLDI1Ljc0LDQuODhhMSwxLDAsMCwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjcuMywyNy42''@;'; put 'put ''N2gwbC0zLjg0LTMuODQtLjU3LS41N2gwTDQuNjMsNSwzLjIxLDYuNDEsOC44LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEsMCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIwLDMxLjU1VjIzLjJsNS41OSw1LjU5Yy0uMTcuMS0uMzQuMi0uNTEuMjlhMSwxLDAsMCwwLC45LDEu''@;'; put 'put ''NzljLjM3LS4xOS43Mi0uNCwxLjA4LS42MmwyLjE0LDIuMTRMMzAuNjEsMzFsLTMuMjUtMy4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYu''@;'; put 'put ''MTcsMCwwLDEtMS40MiwzLjkybDEuNDIsMS40MmE4LjE2LDguMTYsMCwwLDAsMi01LjM0LDguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIwLDQu''@;'; put 'put ''NjJhMSwxLDAsMCwwLTEuNjYtLjc1bC02LjQyLDUuNkwyMCwxNy41NFoiLz4nKSx5LkNsclNoYXBlSGVhZHBob25lcz0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwx''@;'; put 'put ''Ny41VjMxSDkuMkEyLjc0LDIuNzQsMCwwLDAsMTIsMjguMzNWMjEuNjdBMi43NCwyLjc0LDAsMCwwLDkuMiwxOUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjE5SDI2LjhBMi43NCwyLjc0LDAsMCwwLDI0LDIxLjY3djYuNjdBMi43NCwy''@;'; put 'put ''Ljc0LDAsMCwwLDI2LjgsMzFIMzJWMTcuNUExNC4yNywxNC4yNywwLDAsMCwxOCwzWk05LjIsMjFhLjc1Ljc1LDAsMCwxLC44LjY3djYuNjdhLjc1Ljc1LDAsMCwxLS44LjY3SDZWMjFaTTI2LDI4LjMzVjIxLjY3YS43NS43NSwwLDAsMSwuOC0uNjdIMzB2OEgyNi44QS43NS43NSwwLDAsMSwy''@;'; put 'put ''NiwyOC4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg4LjJBMS43NCwxLjc0LDAsMCwwLDEwLDI5LjMzVjIyLjY3QTEuNzQsMS43NCwwLDAsMCw4LjIsMjFI''@;'; put 'put ''NlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYyMUgyNy44QTEuNzQsMS43NCwwLDAsMCwyNiwyMi42N3Y2LjY3QTEuNzQsMS43NCwwLDAsMCwyNy44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcsMCwwLDAsMTgsM1oiLz4nKSx5LkNsclNoYXBl''@;'; put 'put ''RmlsbVN0cmlwPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRabTAsMjZINlY2SDMw''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNC42LDIzLjA3YTEuMjksMS4yOSwwLDAsMCwxLjI0LjA5bDguNzMtNGExLjMsMS4zLDAsMCwwLDAtMi4zN2gwbC04LjczLTRBMS4zLDEuMywwLDAsMCwxNCwxNHY4''@;'; put 'put ''QTEuMjksMS4yOSwwLDAsMCwxNC42LDIzLjA3Wm0xLTguNkwyMy4zMSwxOCwxNS42LDIxLjUxWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjgiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxNCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIwIiB5PSI3IiB3''@;'; put 'put ''aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjYiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC03IiB4PSI4IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjE0IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjIwIiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSIyNiIgeT0iMjYiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjAsN2gydjNI''@;'; put 'put ''MjBaTTE0LDdoMnYzSDE0Wk0xMCwyOUg4VjI2aDJabTAtMTlIOFY3aDJabTYsMTlIMTRWMjZoMlptNiwwSDIwVjI2aDJabTMuMTYtMTAuMTZMMTUuMzksMjMuMkExLDEsMCwwLDEsMTQsMjIuMjhWMTMuNTdhMSwxLDAsMCwxLDEuNDEtLjkxTDI1LjE2LDE3QTEsMSwwLDAsMSwyNS4xNiwxOC44''@;'; put 'put ''NFpNMjgsMjlIMjZWMjZoMlptMC0xOUgyNlY3aDJaIi8+JykseS5DbHJTaGFwZU11c2ljTm90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMt''@;'; put 'put ''MTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4zNGE1Ljg5LDUuODksMCwwLDAtLjgyLS41Niw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFDNy41NywyMi43LDQuOTIsMjYuNSw1Ljc4LDI5Ljg0YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5''@;'; put 'put ''LjU0LDAsMCwwLDE1LDMzLjU3YzMuNjctMS4xOCw2LjE3LTQuMzMsNi4wNi03LjM2VjkuMzRhMjkuMTQsMjkuMTQsMCwwLDEsNi41NSwxLjQzLDEsMSwwLDEsMCwuNzItMS44N0EzMS4zNywzMS4zNywwLDAsMCwyMSw3LjMzVjQuMTdjMy4zMy4zNiw4LDEuMzgsOC45MiwzLDIsMy40MS0yLjMz''@;'; put 'put ''LDcuMzYtMi4zNyw3LjRhMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaTTE0LjM1LDMxLjY3YTYuNDMsNi40MywwLDAsMS01LS4yNiwzLjMxLDMuMzEsMCwwLDEtMS42OS0yLjA3Yy0uNi0yLjMzLDEuNDUtNS4wNSw0LjU4LTYuMDZhNy41Miw3LjUy''@;'; put 'put ''LDAsMCwxLDIuMy0uMzcsNS41Miw1LjUyLDAsMCwxLDIuNjUuNjIsMy4zMSwzLjMxLDAsMCwxLDEuNjksMi4wN0MxOS41NCwyNy45NCwxNy40OSwzMC42NiwxNC4zNSwzMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMjlhNS44OCw1Ljg4LDAsMCwwLS44MS0uNTUsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxYy00LjEyLDEuMzMtNi43Nyw1LjEzLTUuOTEsOC40N2E1LjMzLDUuMzMsMCwwLDAs''@;'; put 'put ''Mi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41MmMzLjctMS4xOSw2LjItNC4zNyw2LjA2LTcuNDIsMCwwLDAsMCwwLDBWOC40OWMxLC4xMiwyLjM3LjMzLDMuODIuNjRhMTEuMTcsMTEuMTcsMCwwLDEsNC4wNiwxLjQ2YzEsLjY2LjM4LDEu''@;'; put 'put ''OS4zMywyYTExLjgsMTEuOCwwLDAsMS0xLjY2LDIsMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaIi8+JykseS5DbHJTaGFwZUltYWdlR2FsbGVyeT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCww''@;'; put 'put ''LDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEySDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''PHBhdGggZD0iTTguNTYsMTkuNDVhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC41NiwxOS40NVptMC00LjZBMS42LDEuNiwwLDEsMSw3LDE2LjQ1LDEuNiwxLjYsMCwwLDEsOC41NiwxNC44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik03LjksMjhsNi02LDMuMTgsMy4xOEwxNC4yNiwyOGgybDcuNDYtNy40NkwzMCwyNi43N3YtMkwyNC4yLDE5YS43MS43MSwwLDAsMC0xLDBsLTUuMTYsNS4xNkwxNC4zNywyMC41YS43MS43MSwwLDAsMC0xLDBMNS45MiwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0x''@;'; put 'put ''LDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCww''@;'; put 'put ''LDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNOC41NiwxMy40NWEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjU2LDEzLjQ1Wk0zMCwyOGgtMjRsNy40Ni03LjQ3YS43MS43MSwwLDAsMSwxLDBsMy42OCwzLjY4''@;'; put 'put ''TDIzLjIxLDE5YS43MS43MSwwLDAsMSwxLDBMMzAsMjQuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVSZXBsYXlBbGw9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE3LjQ2LDI2LjIyYTEuNCwxLjQsMCwwLDAsMS0uNDJsNS41''@;'; put 'put ''OS01LjU2YTEuNDMsMS40MywwLDAsMCwuNDItMSwxLjQ2LDEuNDYsMCwwLDAtLjQyLTFsLTUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAtMi40NCwxVjI0Ljc5YTEuNDEsMS40MSwwLDAsMCwuODgsMS4zMkExLjU0LDEuNTQsMCwwLDAsMTcuNDYsMjYuMjJabS4xNi0xMi4xNiw1LjE5LDUuMTYt''@;'; put 'put ''NS4xOSw1LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSww''@;'; put 'put ''LDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlUmVwbGF5''@;'; put 'put ''T25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwyNy4yN2ExLDEsMCwwLDAsMS0xVjE0YTEsMSwwLDAsMC0xLTFIMTlhMy44LDMuOCwwLDAsMC0xLjEuMjNsLTIsLjYyYS45Mi45MiwwLDAsMC0uNzIuODYuODguODgsMCwwLDAsLjg4Ljg2LDEuNDYsMS40NiwwLDAsMCwuNDMtLjA4''@;'; put 'put ''TDE4LDE1LjA3djExLjJBMSwxLDAsMCwwLDE5LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2''@;'; put 'put ''LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz4nKSx5LkNsclNoYXBlVmlkZW9HYWxsZXJ5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEEx''@;'; put 'put ''Ljg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMwSDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi44MiwyNi43OWExLjc0LDEuNzQs''@;'; put 'put ''MCwwLDAsLjkzLjI4LDEuNjgsMS42OCwwLDAsMCwuNjktLjE1bDkuNzctNC4zNmExLjY5LDEuNjksMCwwLDAsMC0zLjFMMTQuNDQsMTUuMWExLjcsMS43LDAsMCwwLTIuMzksMS41NXY4LjcyQTEuNywxLjcsMCwwLDAsMTIuODIsMjYuNzlabS42My0xMC4xNGEuMjkuMjksMCwwLDEsLjE0LS4y''@;'; put 'put ''NS4zLjMsMCwwLDEsLjE2LDAsLjI3LjI3LDAsMCwxLC4xMiwwbDkuNzcsNC4zNWEuMjkuMjksMCwwLDEsLjE4LjI4LjI4LjI4LDAsMCwxLS4xOC4yN2wtOS43Nyw0LjM2YS4yOC4yOCwwLDAsMS0uMjgsMCwuMzEuMzEsMCwwLDEtLjE0LS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTI0LjE4''@;'; put 'put ''LDIxLjgzbC05Ljc3LDQuMzZBMSwxLDAsMCwxLDEzLDI1LjI4VjE2LjU2YTEsMSwwLDAsMSwxLjQxLS45MUwyNC4xOCwyMEExLDEsMCwwLDEsMjQuMTgsMjEuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCww''@;'; put 'put ''LTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVNaWNyb3Bob25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHogTTEzLDljMC0yLjgsMi4yLTUsNS01czUsMi4y''@;'; put 'put ''LDUsNXY4XG5cdFx0YzAsMi44LTIuMiw1LTUsNXMtNS0yLjItNS01Vjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYz''@;'; put 'put ''MmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgsMjRjMy45''@;'; put 'put ''LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYu''@;'; put 'put ''Myw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks''@;'; put 'put ''eS5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0xOCw0YzIuOCwwLDUsMi4yLDUsNXY4YzAsMC40LTAuMSwwLjgtMC4yLDEuMmwxLjYsMS42YzAuNC0wLjksMC42LTEuOCwwLjYtMi44VjljMC0zLjktMy4yLTctNy4xLTYuOVxuXHRcdGMtMi45LDAtNS42LDEuOS02LjUsNC43TDEzLDguM0MxMy41LDUuOSwxNS42LDQuMiwxOCw0''@;'; put 'put ''eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4x''@;'; put 'put ''LDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44''@;'; put 'put ''LDIzLjQsMjgsMjUuMiwyNi42eiBNMTMuOCwxOS43QzEzLjMsMTguOSwxMywxOCwxMywxN3YtMi42bDcuMSw3LjFDMTcuOSwyMi41LDE1LjIsMjEuOCwxMy44LDE5Ljd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCwx''@;'; put 'put ''LjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNSwxN1Y5YzAtMy45LTMuMi03LTcuMS02LjljLTIuOSwwLTUuNiwxLjktNi41LDQuN2wxMywxM0MyNC44''@;'; put 'put ''LDE4LjksMjUsMTcuOSwyNSwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4y''@;'; put 'put ''QzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFo''@;'; put 'put ''LTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSx5Lk1lZGlhU2hhcGVzPXtwbGF5OnkuQ2xyU2hhcGVQbGF5LHBhdXNlOnkuQ2xyU2hhcGVQYXVzZSwic3RlcC1mb3J3YXJkIjp5LkNsclNoYXBlU3Rl''@;'; put 'put ''cEZvcndhcmQsc3RvcDp5LkNsclNoYXBlU3RvcCxwb3dlcjp5LkNsclNoYXBlUG93ZXIscmV3aW5kOnkuQ2xyU2hhcGVSZXdpbmQsImZhc3QtZm9yd2FyZCI6eS5DbHJTaGFwZUZhc3RGb3J3YXJkLGNhbWVyYTp5LkNsclNoYXBlQ2FtZXJhLCJ2aWRlby1jYW1lcmEiOnkuQ2xyU2hhcGVWaWRl''@;'; put 'put ''b0NhbWVyYSxzaHVmZmxlOnkuQ2xyU2hhcGVTaHVmZmxlLCJ2b2x1bWUtdXAiOnkuQ2xyU2hhcGVWb2x1bWVVcCwidm9sdW1lLWRvd24iOnkuQ2xyU2hhcGVWb2x1bWVEb3duLCJ2b2x1bWUtbXV0ZSI6eS5DbHJTaGFwZVZvbHVtZU11dGUsaGVhZHBob25lczp5LkNsclNoYXBlSGVhZHBob25l''@;'; put 'put ''cywiZmlsbS1zdHJpcCI6eS5DbHJTaGFwZUZpbG1TdHJpcCwibXVzaWMtbm90ZSI6eS5DbHJTaGFwZU11c2ljTm90ZSwiaW1hZ2UtZ2FsbGVyeSI6eS5DbHJTaGFwZUltYWdlR2FsbGVyeSwicmVwbGF5LWFsbCI6eS5DbHJTaGFwZVJlcGxheUFsbCwicmVwbGF5LW9uZSI6eS5DbHJTaGFwZVJl''@;'; put 'put ''cGxheU9uZSwidmlkZW8tZ2FsbGVyeSI6eS5DbHJTaGFwZVZpZGVvR2FsbGVyeSxtaWNyb3Bob25lOnkuQ2xyU2hhcGVNaWNyb3Bob25lLCJtaWNyb3Bob25lLW11dGUiOnkuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZX0sdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgi''@;'; put 'put ''Q2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKHkuTWVkaWFTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAg''@;'; put 'put ''ICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz''@;'; put 'put ''IGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5Tb2NpYWxTaGFwZXM9eS5DbHJTaGFwZUhhc2h0YWc9eS5DbHJTaGFwZUNyb3duPXkuQ2xyU2hhcGVUaHVtYnNEb3duPXkuQ2xyU2hh''@;'; put 'put ''cGVUaHVtYnNVcD15LkNsclNoYXBlU2FkRmFjZT15LkNsclNoYXBlTmV1dHJhbEZhY2U9eS5DbHJTaGFwZUhhcHB5RmFjZT15LkNsclNoYXBlUGljdHVyZT15LkNsclNoYXBlQ2hhdEJ1YmJsZT15LkNsclNoYXBlVGFsa0J1YmJsZXM9eS5DbHJTaGFwZUhlYXJ0QnJva2VuPXkuQ2xyU2hhcGVI''@;'; put 'put ''ZWFydD15LkNsclNoYXBlSW5ib3g9eS5DbHJTaGFwZUZsYWc9eS5DbHJTaGFwZVRhc2tzPXkuQ2xyU2hhcGVFbnZlbG9wZT15LkNsclNoYXBlQm9va21hcms9eS5DbHJTaGFwZUhhbGZTdGFyPXkuQ2xyU2hhcGVTdGFyPXkuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0''@;'; put 'put ''aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLGc9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp''@;'; put 'put ''LEI9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO3kuQ2xyU2hhcGVTaGFyZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjUz''@;'; put 'put ''LDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwx''@;'; put 'put ''LDAsNS01Wm0wLTIwYTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDI3LjUzLDRaTTcsMjFhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsNywyMVpNMjcuNTMsMzJhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsMjcuNTMsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3''@;'; put 'put ''QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01WiIvPicpLHkuQ2xyU2hhcGVTdGFyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTksMzRhMi4yMiwyLjIyLDAsMCwxLTEuMjQtLjM4''@;'; put 'put ''bC03LjQ2LTVhLjIyLjIyLDAsMCwwLS4yNSwwbC03LjQ2LDVBMi4yMiwyLjIyLDAsMCwxLDcuNCwzMS4yMWwyLjQ1LTguNjRhLjIzLjIzLDAsMCwwLS4wOC0uMjRMMi43MSwxNi43OGEyLjIyLDIuMjIsMCwwLDEsMS4yOS00bDktLjM0YS4yMy4yMywwLDAsMCwuMi0uMTVsMy4xLTguNDNhMi4y''@;'; put 'put ''MiwyLjIyLDAsMCwxLDQuMTcsMGwzLjEsOC40M2EuMjMuMjMsMCwwLDAsLjIuMTVsOSwuMzRhMi4yMiwyLjIyLDAsMCwxLDEuMjksNEwyNywyMi4zM2EuMjIuMjIsMCwwLDAtLjA4LjI0bDIuNDUsOC42NEEyLjIzLDIuMjMsMCwwLDEsMjcuMTksMzRabS04LjgyLTcuNDJBMi4yMSwyLjIxLDAs''@;'; put 'put ''MCwxLDE5LjYsMjdsNy40Niw1YS4yMi4yMiwwLDAsMCwuMzQtLjI1bC0yLjQ1LTguNjRhMi4yMSwyLjIxLDAsMCwxLC43Ny0yLjM1bDcuMDYtNS41NWEuMjIuMjIsMCwwLDAtLjEzLS40bC05LS4zNGEyLjIyLDIuMjIsMCwwLDEtMi0xLjQ2bC0zLjEtOC40M2EuMjIuMjIsMCwwLDAtLjQyLDBM''@;'; put 'put ''MTUuMDYsMTNhMi4yMiwyLjIyLDAsMCwxLTIsMS40NmwtOSwuMzRhLjIyLjIyLDAsMCwwLS4xMy40TDExLDIwLjc2YTIuMjIsMi4yMiwwLDAsMSwuNzcsMi4zNUw5LjMzLDMxLjc1YS4yMS4yMSwwLDAsMCwuMDguMjQuMi4yLDAsMCwwLC4yNiwwbDcuNDYtNUEyLjIyLDIuMjIsMCwwLDEsMTgu''@;'; put 'put ''MzYsMjYuNjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00''@;'; put 'put ''LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIzLjIzLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxYTIuMjIsMi4yMiwwLDAsMCwzLjM4LDIuNDVsNy40Ni01YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVh''@;'; put 'put ''Mi4yLDIuMiwwLDAsMCwyLjU1LDAsMi4yLDIuMiwwLDAsMCwuODMtMi40bC0yLjQ1LTguNjRhLjIyLjIyLDAsMCwxLC4wOC0uMjRaIi8+JykseS5DbHJTaGFwZUhhbGZTdGFyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41''@;'; put 'put ''NWEuMjIuMjIsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFBMi4yMywyLjIzLDAsMCwwLDkuNDksMzRhMi4yMiwyLjIyLDAsMCwwLDEuMjQtLjM4bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMjIsMi4yMiwwLDAsMCwzLjM4LTIuNDVsLTIuNDUtOC42NGEuMjMuMjMsMCwwLDEs''@;'; put 'put ''LjA4LS4yNFpNMTguMzMsMjYuNjJoMGEyLjIxLDIuMjEsMCwwLDAtMS4yNC4zOEw5LjYyLDMyYS4yMi4yMiwwLDAsMS0uMzQtLjI1bDIuNDUtOC42NEEyLjIxLDIuMjEsMCwwLDAsMTEsMjAuNzZMMy45LDE1LjIxYS4yMi4yMiwwLDAsMSwuMTMtLjRsOS0uMzRBMi4yMiwyLjIyLDAsMCwwLDE1''@;'; put 'put ''LDEzbDMuMS04LjQzYS4yLjIsMCwwLDEsLjIxLS4xNWgwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIw''@;'; put 'put ''LjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEu''@;'; put 'put ''MjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIsMCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0Wk0yNC45LDIzLjExbDIuNDUsOC42NEEuMjIuMjIsMCwwLDEsMjcsMzJsLTcuNDYtNWEyLjIxLDIuMjEsMCwwLDAt''@;'; put 'put ''MS4yNC0uMzhoMFY0LjQ0aDBhLjIuMiwwLDAsMSwuMjEuMTVMMjEuNjIsMTNhMi4yMiwyLjIyLDAsMCwwLDIsMS40Nmw5LC4zNGEuMjIuMjIsMCwwLDEsLjEzLjRsLTcuMDYsNS41NUEyLjIxLDIuMjEsMCwwLDAsMjQuOSwyMy4xMVoiLz4nKSx5LkNsclNoYXBlQm9va21hcms9KDAsZy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNiwzNGEyLDIsMCwwLDEtMS40MS0uNThMMTgsMjYuODJsLTYuNTQsNi41MkEyLDIsMCwwLDEsOCwzMS45M1Y0YTIsMiwwLDAsMSwyLTJIMjZhMiwyLDAsMCwxLDIsMlYzMmEyLDIs''@;'; put 'put ''MCwwLDEtMiwyWm0wLTJoMFY0SDEwVjMxLjkzTDE4LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwySDEwQTIsMiwwLDAsMCw4LDRWMzEuOTNhMiwyLDAsMCwwLDMuNDIsMS40MWw2LjU0LTYuNTIsNi42''@;'; put 'put ''Myw2LjZBMiwyLDAsMCwwLDI4LDMyVjRBMiwyLDAsMCwwLDI2LDJaIi8+JykseS5DbHJTaGFwZUVudmVsb3BlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMEwzMiw5LjIxdjE3LjVsLTcuMzYtNy4zNi0xLjQxLDEuNDFaTTUuMzEsOEgzMC4zOEwx''@;'; put 'put ''Ny44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4wOFYyNi43MWwtNy4zNi03LjM2LTEuNDEsMS40MUwzMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEu''@;'; put 'put ''MzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBsOC44My04Ljc4YTcuNDQsNy40NCwwLDAsMS0yLS44NWwtOC4yNiw4LjIxTDUuMzEsOEgyMi44MWE3LjQ5LDcuNDksMCwwLDEtLjMxLTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAs''@;'; put 'put ''MCwwLDItMlYxMi4yQTcuNDUsNy40NSwwLDAsMSwzMiwxMy4wOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuMjZIMzJWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYu''@;'; put 'put ''ODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwbDYuNjYtNi42M0gyMy4wOGwtNS4yNCw1LjIxTDUuMzEsOEgyMC4wNmwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMzLDZhMiwyLDAsMCwwLS40MSwwaC0yOGEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy44MSw3LjM5LDE5LjI1LDIxLjg5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMy44''@;'; put 'put ''MSw3LjM5Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIgZD0iTTI2LDEyLjM0QTcuNDksNy40OSwwLDAsMSwyMi41LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjlsLTguNzEsOC42OGEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWMTIuMzlBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTUuMywyOEgzLjkxVjI2LjU3bDcu''@;'; put 'put ''MjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNS43N2wtNi41Miw2LjQ5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4w''@;'; put 'put ''Ny41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlYxNS4zOFpNNS4zLDI4SDMuOTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIyLjk0LDE1LjRoLS43QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjYuODUsMS4xNFoiLz4nKSx5LkNsclNoYXBlVGFza3M9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4yOSwzNEg2LjcxQTEuNywxLjcsMCwwLDEsNSwzMi4zMVY2LjY5QTEuNzUsMS43NSwwLDAs''@;'; put 'put ''MSw3LDVIOVY3SDdWMzJIMjlWN0gyN1Y1aDIuMjVBMS43LDEuNywwLDAsMSwzMSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDEsMjkuMjksMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi42NiwyNS43''@;'; put 'put ''NiwxMS4zLDIwLjRBMSwxLDAsMCwxLDEyLjcyLDE5bDMuOTQsMy45NCw4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI2LDExSDEwVjcuMzNBMi4zNCwy''@;'; put 'put ''LjM0LDAsMCwxLDEyLjMzLDVoMS43OWE0LDQsMCwwLDEsNy43NSwwaDEuNzlBMi4zNCwyLjM0LDAsMCwxLDI2LDcuMzNaTTEyLDlIMjRWNy4zM0EuMzMuMzMsMCwwLDAsMjMuNjcsN0gyMFY2YTIsMiwwLDAsMC00LDBWN0gxMi4zM2EuMzMuMzMsMCwwLDAtLjMzLjMzWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoLjcxbDEuMTYtMmE0LDQsMCwwLDAt''@;'; put 'put ''Ny43NCwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExaDguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yNC4x''@;'; put 'put ''OSwxNS40bC03LjUzLDcuNTNMMTIuNzIsMTlBMSwxLDAsMCwwLDExLjMsMjAuNGw1LjM2LDUuMzZMMjYuNzEsMTUuNzFhMSwxLDAsMCwwLC4yLS4zMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTTI5LDE1LjRWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLjcyLDE5QTEsMSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMC0xLjQxLTEu''@;'; put 'put ''NDFsLTguNjQsOC42NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41''@;'; put 'put ''N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAs''@;'; put 'put ''MCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOS4yOSw0Ljk1aC03LjJhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlB''@;'; put 'put ''MS43LDEuNywwLDAsMCwzMSwzMi4yNlY2LjY0QTEuNywxLjcsMCwwLDAsMjkuMjksNC45NVptLTE4LDNhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aDMuNDRhMSwxLDAsMCwxLDEsMVY5LjhIMTEuMjVabTE0LjUyLDkuMjMtOS4xMiw5LjEyLTUuMjQt''@;'; put 'put ''NS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yNS44OCwxNS40YTEuMzgs''@;'; put 'put ''MS4zOCwwLDAsMS0uMTEsMS44MWwtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy03SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDAtLjA5SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3''@;'; put 'put ''aC40MkwyMiw0Ljc2YTQuMyw0LjMsMCwwLDAtOC4wOS4xOUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu''@;'; put 'put ''ODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTYuNDYtMy43SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwy''@;'; put 'put ''LjMxLDAsMCwxLDQuNjMsMFY3aDIuMjZhNy41Myw3LjUzLDAsMCwxLS4wNy0xLDcuNTMsNy41MywwLDAsMSwuMDgtMS4wNWgtLjVhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEu''@;'; put 'put ''NywwLDAsMCwzMSwzMi4yNlYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVptLTQuMjMsMy43MS05LjEyLDkuMTItNS4yNC01LjI0YTEuNCwxLjQsMCwwLDEsMi0ybDMuMjYsMy4yNiw3LjE0LTcuMTRhMS40LDEuNCwwLDEsMSwyLDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLHkuQ2xyU2hhcGVGbGFnPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNNiwzNGExLDEsMCwwLDEtMS0xVjNBMSwxLDAsMCwxLDcsM1YzM0ExLDEsMCwwLDEsNiwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjU1LDMuODJhMSwxLDAsMCwwLTEsMCwx''@;'; put 'put ''NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjUuMDhBOC44LDguOCwwLDAsMSwxMy4yNSw0YTExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0''@;'; put 'put ''Ljg0LDAsMCwwLDYsMS42NkExOC43NSwxOC43NSwwLDAsMCwyOSw2LjEyVjE4Ljk1YTE2LjE2LDE2LjE2LDAsMCwxLTUuNTguOTMsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5LDEyLjc4LDEyLjc4LDAsMCwwLTUtMS40NUExMC44NiwxMC44NiwwLDAsMCw5LDE3Ljc5VjIwYTguOCw4Ljgs''@;'; put 'put ''MCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNTUsMy44MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNS45MiwyYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDIsMFYzQTEsMSwwLDAsMCw1LjkyLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''ZD0iTTMwLjUsMy44MmExLDEsMCwwLDAtMSwwLDE0LjksMTQuOSwwLDAsMS02LjEzLDEuMTYsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5QTEyLjc4LDEyLjc4LDAsMCwwLDEzLjIsMiwxMC44NiwxMC44NiwwLDAsMCw5LDIuODVWMjBhOC44LDguOCwwLDAsMSw0LjI1LTEuMDgsMTEuMjIs''@;'; put 'put ''MTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2LDE2Ljc5LDE2Ljc5LDAsMCwwLDctMS4zNywxLDEsMCwwLDAsLjU1LS44OVY0LjY3QTEsMSwwLDAsMCwzMC41LDMuODJaIi8+JykseS5DbHJTaGFwZUluYm94PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0x''@;'; put 'put ''Mi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjUsNUgyMlY3aDdWMjFIMjMuNjFsLS4xLjg5YTUuNDIsNS40MiwwLDAsMS0xMC43NywwbC0uMS0uODlIN1Y3aDdWNUg2LjVBMS41LDEuNSwwLDAsMCw1LDYuNXYyNUExLjUsMS41LDAsMCwwLDYuNSwz''@;'; put 'put ''M2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjVWNi41QTEuNSwxLjUsMCwwLDAsMjkuNSw1Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTEyLjIzLDEzLjA5YTEsMSwwLDAsMCwwLDEuNDFMMTgsMjAuM2w1Ljc5LTUuNzlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwxNi40N1YyQTEsMSwwLDAsMCwxOCwxYTEsMSwwLDAsMC0xLDF2MTQuNWwtMy4zOC0zLjM4QTEsMSwwLDAsMCwxMi4yMywxMy4wOVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy41Miw3LjUyLDAsMCwxLTEtLjA3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUs''@;'; put 'put ''MCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUhlYXJ0''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMi40M2ExLDEsMCwwLDEtLjYxLS4yMUMxMS44MywyNy45LDgsMjQuMTgsNS4zMiwyMC41MSwxLjksMTUuODIsMS4xMiwxMS40OSwzLDcuNjRjMS4zNC0yLjc1LDUuMTktNSw5LjY5LTMuNjlBOS44Nyw5Ljg3LDAsMCwxLDE4LDcuNzJh''@;'; put 'put ''OS44Nyw5Ljg3LDAsMCwxLDUuMzEtMy43N2M0LjQ5LTEuMjksOC4zNS45NCw5LjY5LDMuNjksMS44OCwzLjg1LDEuMSw4LjE4LTIuMzIsMTIuODdDMjgsMjQuMTgsMjQuMTcsMjcuOSwxOC42MSwzMi4yMkExLDEsMCwwLDEsMTgsMzIuNDNaTTEwLjEzLDUuNThBNS45LDUuOSwwLDAsMCw0Ljgs''@;'; put 'put ''OC41MWMtMS41NSwzLjE4LS44NSw2LjcyLDIuMTQsMTAuODFBNTcuMTMsNTcuMTMsMCwwLDAsMTgsMzAuMTYsNTcuMTMsNTcuMTMsMCwwLDAsMjkuMDYsMTkuMzNjMy00LjEsMy42OS03LjY0LDIuMTQtMTAuODEtMS0yLTQtMy41OS03LjM0LTIuNjVhOCw4LDAsMCwwLTQuOTQsNC4yLDEsMSww''@;'; put 'put ''LDAsMS0xLjg1LDAsNy45Myw3LjkzLDAsMCwwLTQuOTQtNC4yQTcuMzEsNy4zMSwwLDAsMCwxMC4xMyw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw3LjY0Yy0xLjM0LTIuNzUtNS4yLTUtOS42OS0z''@;'; put 'put ''LjY5QTkuODcsOS44NywwLDAsMCwxOCw3LjcyYTkuODcsOS44NywwLDAsMC01LjMxLTMuNzdDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUt''@;'; put 'put ''NC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVIZWFydEJyb2tlbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0y''@;'; put 'put ''Ljc1LTUuMDktNS05LjY5LTMuNjlhOS44Nyw5Ljg3LDAsMCwwLTYsNC44NCwxOC45LDE4LjksMCwwLDAtMi4yMyw1LjMzbDUuMjgsMi4zNC00LjYsNC4zNywzLjQ5LDQuMSwxLjUyLTEuM0wxOC41NCwyMWw1LjQtNS4xM0wxNy41OCwxM0ExNi4yMywxNi4yMywwLDAsMSwxOS43NSw4LjlhNy42''@;'; put 'put ''OCw3LjY4LDAsMCwxLDQuMTEtM2MzLjM0LS44OSw2LjM0LjYsNy4zNCwyLjY1LDEuNTUsMy4xOC44NSw2LjcyLTIuMTQsMTAuODFBNTcuMTYsNTcuMTYsMCwwLDEsMTgsMzAuMTYsNTcuMTYsNTcuMTYsMCwwLDEsNi45NCwxOS4zM2MtMy00LjEtMy42OS03LjY0LTIuMTQtMTAuODFhNS45LDUu''@;'; put 'put ''OSwwLDAsMSw1LjMzLTIuOTMsNy4zMSw3LjMxLDAsMCwxLDIsLjI5LDcuNyw3LjcsMCwwLDEsMy4zOCwybC4xNS0uM2ExMC42NiwxMC42NiwwLDAsMSwxLTEuNDEsOS42NCw5LjY0LDAsMCwwLTMuOTQtMi4yMkM4LjIsMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgs''@;'; put 'put ''Mi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUExMS41NSwxMS41NSwwLDAsMCwxOC4xOSw3LjVhMTYuODksMTYuODksMCwwLDAtMi40OCw0LjU2TDIyLjI3LDE1LDE2LjcsMjAuMjYsMTksMjNsLTEuNTcsMS4zNC0zLjYtNC4yMiw0Ljc0''@;'; put 'put ''LTQuNTEtNS40NC0yLjQxYTE5LjQ5LDE5LjQ5LDAsMCwxLDIuMy01LjUsMTQuNzcsMTQuNzcsMCwwLDEsMS4wNi0xLjU0bC4wNiwwYTkuNjYsOS42NiwwLDAsMC0zLjg5LTIuMThDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQu''@;'; put 'put ''MTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVUYWxrQnVi''@;'; put 'put ''Ymxlcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgy''@;'; put 'put ''Mi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDRIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEs''@;'; put 'put ''MCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVY3QTMsMywwLDAsMCwzMSw0Wk0zMiwyMi45NCwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0xLTFWN2ExLDEsMCwwLDEsMS0xSDMxQTEuMSwxLjEsMCwwLDEsMzIsNy4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCww''@;'; put 'put ''LDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY5LjcyTDI4LjUsMjAuMjFhMSwx''@;'; put 'put ''LDAsMCwwLS42MS0uMjFIMTRhMSwxLDAsMCwxLTEtMVY3YTEsMSwwLDAsMSwxLTFIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVYxMi4zN0E3''@;'; put 'put ''LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2''@;'; put 'put ''LDYsMCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTct''@;'; put 'put ''LjlWN0EzLDMsMCwwLDAsMzEsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE5VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43Nywy''@;'; put 'put ''Ljc3LDAsMCwwLDI1LDI2LjEzVjI1SDE0QTYsNiwwLDAsMSw4LDE5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDE0YTMsMywwLDAs''@;'; put 'put ''MC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLHkuQ2xyU2hhcGVDaGF0QnViYmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyLjVj''@;'; put 'put ''LTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjguMjksMjQuNjFhMSwxLDAsMCwwLS4zMi43''@;'; put 'put ''M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4LjVjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4wOCwxMS4wOCwwLDAsMSwyOC4yOSwyNC42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjVIMTFhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNzUsMjAu''@;'; put 'put ''NWgtNy41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4yOCwxMi41SDI0LjcyYTEsMSwwLDAsMCwwLTJIMTEuMjhhMSwxLDAsMCwwLDAsMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjM4LDEyLjY5YTcuNDMsNy40MywwLDAsMS0xLjg5LjY2QTEwLjM1LDEwLjM1LDAsMCwxLDMyLDE2LjVhMTEuMDgsMTEuMDgsMCwwLDEtMy43MSw4LjExLDEsMSwwLDAs''@;'; put 'put ''MC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyYTE2LDE2LDAsMCwxLDQuNTUuNjZBNy40NCw3LjQ0LDAsMCwxLDIzLDMuMjJhMTgsMTgsMCwwLDAtNS0uNzJjLTgu''@;'; put 'put ''ODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QTEyLjMyLDEyLjMyLDAsMCwwLDMzLjM4LDEyLjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDE1LjVhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI1LDIwLjVhMSwxLDAsMCwwLDAsMmg3LjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yOCwxMS41YTEs''@;'; put 'put ''MSwwLDAsMCwxLDFIMjQuNzJhMSwxLDAsMCwwLC44My0uNDdBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjVIMTEuMjhBMSwxLDAsMCwwLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2''@;'; put 'put ''LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVabTgsMTRhMSwxLDAsMCwxLTEsMUgxMWExLDEsMCwwLDEsMC0ySDI1QTEsMSwwLDAsMSwyNiwxNi41Wm0t''@;'; put 'put ''My4yNSw1YTEsMSwwLDAsMS0xLDFoLTcuNWExLDEsMCwwLDEsMC0yaDcuNUExLDEsMCwwLDEsMjIuNzUsMjEuNVptLTEyLjQ3LTEwYTEsMSwwLDAsMSwxLTFIMjQuNzJhMSwxLDAsMCwxLDAsMkgxMS4yOEExLDEsMCwwLDEsMTAuMjgsMTEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuMjVhNy40Niw3LjQ2LDAsMCwxLTQuMzUtMS40LDEsMSwwLDAsMS0uOTMuNjVIMTEuMjhhMSwxLDAsMCwxLDAtMkgyNC4yQTcuNDYsNy40NiwwLDAsMSwyMywzLjJhMTgsMTgsMCwwLDAtNS0uN2MtOC44MiwwLTE2''@;'; put 'put ''LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjcsMTIuMzQsMTIuMzQsMCwwLDAtLjY4LTRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjI1Wk0yMS43NSwyMi41aC03''@;'; put 'put ''LjVhMSwxLDAsMCwxLDAtMmg3LjVhMSwxLDAsMCwxLDAsMlptMy4yNS01SDExYTEsMSwwLDAsMSwwLTJIMjVhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi''@;'; put 'put ''IGN5PSI1Ljc1IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JykseS5DbHJTaGFwZVBpY3R1cmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45Miwx''@;'; put 'put ''NFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEs''@;'; put 'put ''MEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMs''@;'; put 'put ''M0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywz''@;'; put 'put ''LDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JykseS5DbHJTaGFwZUhhcHB5RmFjZT0oMCxnLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjEwLjg5IiBjeT0iMTMuODkiIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4wNSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE4LjEzLDI4LjIxYTguNjcsOC42NywwLDAsMCw4LjI2LTZIOS44N0E4LjY3LDguNjcsMCwwLDAsMTguMTMsMjguMjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJB''@;'; put 'put ''MTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNOC44OSwxMy44OWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSw4Ljg5LDEzLjg5Wm05LjI0LDE0LjMyYTguNjcsOC42NywwLDAsMS04LjI2LTZIMjYuMzhBOC42Nyw4LjY3LDAsMCwxLDE4LjEzLDI4LjIxWm02LjkzLTEyLjMyYTIs''@;'; put 'put ''MiwwLDEsMSwyLTJBMiwyLDAsMCwxLDI1LjA1LDE1Ljg5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuQ2xyU2hhcGVOZXV0cmFsRmFjZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMDUsMjIuMDZoLTEyYTEsMSwwLDAsMCwwLDJoMTJhMSwx''@;'; put 'put ''LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1LjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjExLjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuMDUsMjEuMDZhMSwxLDAsMCwxLTEsMWgtMTJh''@;'; put 'put ''MSwxLDAsMCwxLDAtMmgxMkExLDEsMCwwLDEsMjUuMDUsMjMuMDZaTTI3LDE0LjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuOCwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuMTYsMTYuMDhaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JykseS5DbHJTaGFwZVNhZEZhY2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx''@;'; put 'put ''MS40MSIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMTYsMjBhOSw5LDAsMCwwLTcuMzMsMy43OCwxLDEsMCwxLDAsMS42MywxLjE2LDcsNywwLDAsMSwxMS4zMS0uMTMsMSwx''@;'; put 'put ''LDAsMCwwLDEuNi0xLjJBOSw5LDAsMCwwLDE4LjE2LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTksMTIuMjhhMS44LDEuOCwwLDEs''@;'; put 'put ''MS0xLjgtMS44QTEuOCwxLjgsMCwwLDEsMjcsMTQuMjhabS0xNS41NSwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuNDEsMTYuMDhabTE0LDcuNTNhMSwxLDAsMCwxLTEuNiwxLjIsNyw3LDAsMCwwLTExLjMxLjEzLDEsMSwwLDEsMS0xLjYzLTEuMTYsOSw5LDAs''@;'; put 'put ''MCwxLDE0LjU0LS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSx5LkNsclNoYXBlVGh1bWJzVXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDI2Yy0yLjkyLDEuODItNy4zLDQtOS4zNyw0aC02YTE2LjY4LDE2LjY4LDAsMCwxLTMuMzEtNi4w''@;'; put 'put ''OEEyNi43MSwyNi43MSwwLDAsMSw0LDE2aDlWNmEyLjA1LDIuMDUsMCwwLDEsMS4yNi0xLjY5Yy43NywyLDIuNjIsNi41Nyw0LjIzLDguNzJBMTEuMzksMTEuMzksMCwwLDAsMjQsMTYuOTFWMTQuNzhhOS4xMyw5LjEzLDAsMCwxLTMuOTEtM2MtMS44OC0yLjUxLTQuMjktOS4xMS00LjMxLTku''@;'; put 'put ''MTdBMSwxLDAsMCwwLDE0LjU5LDJDMTMuMjUsMi4zOCwxMSwzLjYsMTEsNnY4SDNhMSwxLDAsMCwwLTEsMSwyOSwyOSwwLDAsMCwxLjQsOS42MmMxLjg5LDUuNCw0LjEsNy4xNCw0LjIsNy4yMmExLDEsMCwwLDAsLjYxLjIxaDYuNDJjMi40MywwLDYuNTUtMiw5LjM3LTMuNjNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwzMUgyN2ExLDEsMCwwLDEtMS0xVjE0YTEsMSwwLDAsMSwxLTFoN1ptLTYtMmg0VjE1SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNjMsMTIuMTJDMTcuNTEsOS4yOCwxNC44OCwyLDE0Ljg4LDJTMTIsMi44MywxMiw1LjI1VjE1SDIuMjNhMjkuNDYsMjkuNDYsMCwwLDAsMS40NCw5Ljc0QzUuNjEsMzAuMjcsNy44LDMyLDcuOCwzMmg2Ljg2QzE2LjksMzIsMjEsMzAuMDYsMjQs''@;'; put 'put ''MjguMzFWMTUuNTFBMTAuODQsMTAuODQsMCwwLDEsMTkuNjMsMTIuMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEzYTEsMSwwLDAsMC0xLDFWMzBhMSwxLDAsMCwwLDEsMWg3VjEzWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlVGh1bWJzRG93bj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIsMTBjMi45Mi0xLjgyLDcuMy00LDkuMzctNGg2YTE2LjY4LDE2LjY4LDAsMCwxLDMuMzEsNi4wOEEyNi43MSwyNi43MSwwLDAsMSwzMiwyMEgy''@;'; put 'put ''M1YzMGEyLjA1LDIuMDUsMCwwLDEtMS4yNiwxLjY5Yy0uNzctMi0yLjYyLTYuNTctNC4yMy04LjcyQTExLjM5LDExLjM5LDAsMCwwLDEyLDE5LjA5djIuMTNhOS4xMyw5LjEzLDAsMCwxLDMuOTEsM2MxLjg4LDIuNTEsNC4yOSw5LjExLDQuMzEsOS4xN2ExLDEsMCwwLDAsMS4xOS42M0MyMi43''@;'; put 'put ''NSwzMy42MiwyNSwzMi40LDI1LDMwVjIyaDhhMSwxLDAsMCwwLDEtMSwyOSwyOSwwLDAsMC0xLjQtOS42MmMtMS44OS01LjQtNC4xLTcuMTQtNC4yLTcuMjJBMSwxLDAsMCwwLDI3Ljc5LDRIMjEuMzdDMTguOTQsNCwxNC44Myw2LDEyLDcuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLDVIOWExLDEsMCwwLDEsMSwxVjIyYTEsMSwwLDAsMS0xLDFIMlpNOCw3SDRWMjFIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE2LjM3LDIzLjg0YzIuMTIsMi44NCw0Ljc2LDEwLjA3LDQuNzYsMTAuMDdTMjQsMzMuMTMsMjQsMzAuNzFWMjFoOS43N2EyOS40NiwyOS40NiwwLDAsMC0xLjQ0LTkuNzRDMzAuMzksNS42OCwyOC4yLDQsMjguMiw0SDIxLjM1QzE5LjEsNCwxNSw1LjksMTIsNy42NXYxMi44QTEwLjg0LDEw''@;'; put 'put ''Ljg0LDAsMCwxLDE2LjM3LDIzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDIzYTEsMSwwLDAsMCwxLTFWNkExLDEsMCwwLDAsOSw1SDJWMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yIiAvPicpLHkuQ2xyU2hhcGVDcm93bj0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTQsMTMuMzNBMS4zOSwxLjM5LDAsMSwwLDIuNiwxNC43MiwxLjM5LDEuMzksMCwwLDAsNCwxMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMS44MSwxNS44NGEyMC4zNSwyMC4zNSwwLDAsMC00LjU4LDEuNDMsMjIuNywyMi43LDAsMCwwLTMuNDgsMi4xQTE3LjY5LDE3LjY5LDAsMCwxLDIyLDE2LjU3YTQ3LjY1LDQ3LjY1LDAsMCwxLTIuOC03LjY5LDEsMSwwLDAsMC0xLS43NCwxLDEsMCwwLDAtMSwuNzQsNDYu''@;'; put 'put ''NzEsNDYuNzEsMCwwLDEtMi44LDcuNjksMTcsMTcsMCwwLDEtMS43NiwyLjgsMjIuNywyMi43LDAsMCwwLTMuNDgtMi4xLDIwLjY2LDIwLjY2LDAsMCwwLTQuNTgtMS40MywxLDEsMCwwLDAtMSwuMzksMSwxLDAsMCwwLS4wOSwxLjA1QTUwLjEzLDUwLjEzLDAsMCwxLDcuODIsMzEuMTdhMSwx''@;'; put 'put ''LDAsMCwwLDEsLjgzSDI3LjYyYTEsMSwwLDAsMCwxLS44Myw1MC4xNSw1MC4xNSwwLDAsMSw0LjI2LTEzLjg5LDEsMSwwLDAsMC0uMDktMS4wNUExLDEsMCwwLDAsMzEuODEsMTUuODRaTTI2Ljc5LDMwSDkuNjRhNTUuNjYsNTUuNjYsMCwwLDAtMy40LTExLjcxLDE1Ljc1LDE1Ljc1LDAsMCwx''@;'; put 'put ''LDIuMDkuNzgsMjAsMjAsMCwwLDEsMy44NSwyLjQ1LDEsMSwwLDAsMCwxLjM5LS4wOSwxOS4yOCwxOS4yOCwwLDAsMCwyLjY3LTQsNDMuNDYsNDMuNDYsMCwwLDAsMi00Ljg5LDQxLjc0LDQxLjc0LDAsMCwwLDIsNC44OSwxOS45MiwxOS45MiwwLDAsMCwyLjY2LDQsMSwxLDAsMCwwLDEuNC4w''@;'; put 'put ''OSwxOS4yMSwxOS4yMSwwLDAsMSwzLjg1LTIuNDUsMTQuNzcsMTQuNzcsMCwwLDEsMi4wOS0uNzhBNTUuMDcsNTUuMDcsMCwwLDAsMjYuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIg''@;'; put 'put ''cng9IjEuMzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC4yMywyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDE4LjIzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEyLjU4LDI2''@;'; put 'put ''LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMTIuNTgsMjYuMzRaIi8+PHBhdGggZD0iTTIzLjg5LDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMjMuODksMjYuMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNiIvPlxuXG4gIDxwYXRoIGQ9Ik0yLjYsMTEuOTNBMS40LDEuNCwwLDEsMCw0LDEzLjMzLDEuNCwxLjQsMCwwLDAsMi42LDExLjkzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIgcng9IjEu''@;'; put 'put ''MzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOC4yMiw2LjM5QTEuMzksMS4zOSwwLDEsMCwxNi44NCw1LDEuMzksMS4zOSwwLDAsMCwxOC4yMiw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuNjMsMTYuMUExOC42MSwxOC42MSwwLDAsMCwyOCwxNy4zNGEyMS41NywyMS41NywwLDAsMC00LDIuNDksMTkuMiwxOS4yLDAsMCwxLTIuMjYtMy40OSw0OC45Miw0OC45MiwwLDAsMS0yLjUyLTYuNTgsMSwxLDAsMCwwLTEtLjcxaDBhMSwxLDAsMCww''@;'; put 'put ''LTEsLjcxLDQ4LjQyLDQ4LjQyLDAsMCwxLTIuNTIsNi41OCwxOC42OSwxOC42OSwwLDAsMS0yLjI2LDMuNDgsMjIuODEsMjIuODEsMCwwLDAtNC0yLjQ4QTE4LjgzLDE4LjgzLDAsMCwwLDQuOSwxNi4xYTEsMSwwLDAsMC0xLC4zMywxLDEsMCwwLDAtLjEzLDEuMDcsNTUuOSw1NS45LDAsMCwx''@;'; put 'put ''LDQsMTMuNSwxLDEsMCwwLDAsMSwuODNoMTlhMSwxLDAsMCwwLDEtLjgzLDU1LjksNTUuOSwwLDAsMSw0LTEzLjUsMSwxLDAsMCwwLS4xMy0xLjA3QTEsMSwwLDAsMCwzMS42MywxNi4xWk0xMS4wOCwyOC41NWExLjExLDEuMTEsMCwxLDEsMS4xLTEuMTFBMS4xMSwxLjExLDAsMCwxLDExLjA4''@;'; put 'put ''LDI4LjU1Wm03LjE1LDBhMS4xMSwxLjExLDAsMCwxLDAtMi4yMSwxLjExLDEuMTEsMCwwLDEsMCwyLjIxWm03LjE2LDBhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwyNS4zOSwyOC41NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5c''@;'; put 'put ''biAgJykseS5DbHJTaGFwZUhhc2h0YWc9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiwxMkgyNS4zNGwxLjU1LTcuNzRhMSwxLDAsMCwwLTItLjM5TDIzLjMsMTJIMTUuMTFsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwxMy4wNywxMkg2YTEsMSwwLDAsMCwwLDJoNi42N2wt''@;'; put 'put ''MS42LDhINGExLDEsMCwwLDAsMCwyaDYuNjZMOS4xMSwzMS43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjguNjgsMCwwLDAsLjIsMCwxLDEsMCwwLDAsMS0uOEwxMi43LDI0aDguMTlsLTEuNTUsNy43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjIuNjIsMCwwLDAsLjE5LDAsMSwxLDAsMCwwLDEtLjhM''@;'; put 'put ''MjIuOTMsMjRIMzBhMSwxLDAsMCwwLDAtMkgyMy4zM2wxLjYxLThIMzJhMSwxLDAsMCwwLDAtMlpNMjEuMjksMjJIMTMuMWwxLjYxLThIMjIuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG5cbiAgPHBhdGggZD0iTTMxLjg3LDEwSDI2LjMybDEtNC44''@;'; put 'put ''M0ExLDEsMCwwLDAsMjYuMzUsNGgtMmExLDEsMCwwLDAtMSwuNzhMMjIuMzMsMTBoLTUuNGwxLTQuODNBMSwxLDAsMCwwLDE3LDRIMTVhMSwxLDAsMCwwLTEsLjc4TDEzLDEwSDdhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMmg1LjU1TDEwLjUsMjJoLTZhMSwxLDAsMCww''@;'; put 'put ''LTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMkg5LjY4bC0xLDQuODNhMSwxLDAsMCwwLDEsMS4xN2gyYTEsMSwwLDAsMCwuOTUtLjc4TDEzLjY3LDI2aDUuNGwtMSw0LjgzQTEsMSwwLDAsMCwxOSwzMmgyYTEsMSwwLDAsMCwxLS43OEwyMy4wNSwyNmg2YTEsMSwwLDAsMCwxLS44bC40LTJh''@;'; put 'put ''MSwxLDAsMCwwLTEtMS4ySDIzLjg3bDEuNjMtOGg2YTEsMSwwLDAsMCwxLS44bC40MS0yQTEsMSwwLDAsMCwzMS44NywxMFptLTEyLDEyaC01LjRsMS42NC04aDUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJykseS5Tb2NpYWxTaGFwZXM9e2Nyb3du''@;'; put 'put ''OnkuQ2xyU2hhcGVDcm93bixzaGFyZTp5LkNsclNoYXBlU2hhcmUsc3Rhcjp5LkNsclNoYXBlU3RhciwiaGFsZi1zdGFyIjp5LkNsclNoYXBlSGFsZlN0YXIsYm9va21hcms6eS5DbHJTaGFwZUJvb2ttYXJrLGVudmVsb3BlOnkuQ2xyU2hhcGVFbnZlbG9wZSxjYWxlbmRhcjpCLkNsclNoYXBl''@;'; put 'put ''Q2FsZW5kYXIsZXZlbnQ6Qi5DbHJTaGFwZUV2ZW50LHRhc2tzOnkuQ2xyU2hhcGVUYXNrcyxmbGFnOnkuQ2xyU2hhcGVGbGFnLGluYm94OnkuQ2xyU2hhcGVJbmJveCxoYXNodGFnOnkuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OnkuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjp5LkNsclNo''@;'; put 'put ''YXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxlcyI6eS5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6eS5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTp5LkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6eS5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjp5LkNs''@;'; put 'put ''clNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNlIjp5LkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjp5LkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjp5LkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAs''@;'; put 'put ''Xy5kZXNjcmlwdG9yQ29uZmlnKSh5LlNvY2lhbFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlNvY2lh''@;'; put 'put ''bFNoYXBlcywiZGF0ZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZCh5LlNvY2lhbFNoYXBlcyl9LCIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90''@;'; put 'put ''ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCx5LEkpeyJ1c2Ugc3RyaWN0IjtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseS5DbHJTaGFwZVZNV0FwcD15LkNsclNoYXBlVk09eS5DbHJTaGFwZVJvdXRlcj15LkNsclNoYXBlTmV0d29ya1N3aXRjaD15LkNsclNoYXBlTmV0d29ya1NldHRpbmdzPXkuQ2xyU2hhcGVOZXR3b3JrR2xvYmU9''@;'; put 'put ''eS5DbHJTaGFwZVRhYmxldD15LkNsclNoYXBlTW9iaWxlPXkuQ2xyU2hhcGVCYXR0ZXJ5PXkuQ2xyU2hhcGVBcHBsaWNhdGlvbj15LkNsclNoYXBlQ29kZT15LkNsclNoYXBlVGVybWluYWw9eS5DbHJTaGFwZURpc3BsYXk9eS5DbHJTaGFwZUNvbXB1dGVyPXkuQ2xyU2hhcGVGbG9wcHk9eS5D''@;'; put 'put ''bHJTaGFwZVBsdWdpbj15LkNsclNoYXBlRG93bmxvYWRDbG91ZD15LkNsclNoYXBlVXBsb2FkQ2xvdWQ9eS5DbHJTaGFwZUV4cG9ydD15LkNsclNoYXBlSW1wb3J0PXkuQ2xyU2hhcGVTaGllbGRYPXkuQ2xyU2hhcGVTaGllbGQ9eS5DbHJTaGFwZVNoaWVsZENoZWNrPXkuQ2xyU2hhcGVSZXNv''@;'; put 'put ''dXJjZVBvb2w9eS5DbHJTaGFwZURhdGFDbHVzdGVyPXkuQ2xyU2hhcGVNZW1vcnk9eS5DbHJTaGFwZUNQVT15LkNsclNoYXBlQnVpbGRpbmc9eS5DbHJTaGFwZUFwcGxpY2F0aW9ucz15LkNsclNoYXBlQ2x1c3Rlcj15LkNsclNoYXBlU3RvcmFnZT15LkNsclNoYXBlSG9zdD15LkNsclNoYXBl''@;'; put 'put ''RGFzaGJvYXJkPXkuQ2xyU2hhcGVNb3VzZT15LkNsclNoYXBlS2V5Ym9hcmQ9eS5DbHJTaGFwZURldmljZXM9eS5DbHJTaGFwZUJhY2t1cD15LkNsclNoYXBlQmFja3VwUmVzdG9yZT15LkNsclNoYXBlSGFyZERpc2s9eS5DbHJTaGFwZVJhY2tTZXJ2ZXI9eS5DbHJTaGFwZVdpZmk9eS5DbHJT''@;'; put 'put ''aGFwZUJ1bmRsZT15LkNsclNoYXBlQmxvY2tzR3JvdXA9eS5DbHJTaGFwZUJsb2NrPXkuQ2xyU2hhcGVMYXllcnM9eS5DbHJTaGFwZVVuaW5zdGFsbD15LkNsclNoYXBlSW5zdGFsbD15LkNsclNoYXBlTm9XaWZpPXkuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9eS5DbHJTaGFwZVJ1bGVyUGVuY2ls''@;'; put 'put ''PXZvaWQgMCx5LlRlY2hub2xvZ3lTaGFwZXM9eS5DbHJTaGFwZUZpbGVTaGFyZTI9eS5DbHJTaGFwZUNpQ2Q9eS5DbHJTaGFwZUFuaW1hdGlvbj15LkNsclNoYXBlVGFwZURyaXZlPXkuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9eS5DbHJDb250cm9sTHVuPXkuQ2xyU2hhcGVQb2Q9eS5DbHJTaGFw''@;'; put 'put ''ZU5vZGU9eS5DbHJTaGFwZU5hbWVzcGFjZT15LkNsclNoYXBlTm9kZXM9eS5DbHJTaGFwZU5vZGVHcm91cD15LkNsclNoYXBlU3RvcmFnZUFkYXB0ZXI9eS5DbHJTaGFwZUhvc3RHcm91cD15LkNsclNoYXBlU3F1aWQ9eS5DbHJTaGFwZUNhcGFjaXRvcj15LkNsclNoYXBlUmVzaXN0b3I9eS5D''@;'; put 'put ''bHJTaGFwZUluZHVjdG9yPXkuQ2xyU2hhcGVSYWRhcj15LkNsclNoYXBlVXNiPXkuQ2xyU2hhcGVRckNvZGU9eS5DbHJTaGFwZUZpbGVTaGFyZT15LkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPXkuQ2xyU2hhcGVDb250YWluZXI9eS5DbHJTaGFwZUNkRHZkPXkuQ2xyU2hhcGVCYXJDb2RlPXku''@;'; put 'put ''Q2xyU2hhcGVBdG9tPXkuQ2xyU2hhcGVBc3NpZ25Vc2VyPXkuQ2xyU2hhcGVQcm9jZXNzT25WTT15LkNsclNoYXBlQmx1ZXRvb3RoT2ZmPXkuQ2xyU2hhcGVCbHVldG9vdGg9eS5DbHJTaGFwZVNTRD15LkNsclNoYXBlTlZNZT15LkNsclNoYXBlSGFyZERyaXZlRGlza3M9eS5DbHJTaGFwZUhh''@;'; put 'put ''cmREcml2ZT15LkNsclNoYXBlQWRtaW5pc3RyYXRvcj15LkNsclNoYXBlRmxhc2s9eS5DbHJTaGFwZUhlbGl4PXkuQ2xyU2hhcGVEZXBsb3k9eS5DbHJTaGFwZUNsb3VkVHJhZmZpYz15LkNsclNoYXBlQ2xvdWRTY2FsZT15LkNsclNoYXBlQ2xvdWROZXR3b3JrPXkuQ2xyU2hhcGVVbmxpbms9''@;'; put 'put ''eS5DbHJTaGFwZUxpbms9eS5DbHJTaGFwZURpc2Nvbm5lY3Q9eS5DbHJTaGFwZUNvbm5lY3Q9eS5DbHJTaGFwZVVuYXJjaGl2ZT15LkNsclNoYXBlQXJjaGl2ZT15LkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoi''@;'; put 'put ''Li9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlUnVsZXJQZW5jaWw9KDAs''@;'; put 'put ''Zy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAxNy40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQu''@;'; put 'put ''MTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4w''@;'; put 'put ''OEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4z''@;'; put 'put ''N1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBINC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0x''@;'; put 'put ''MCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicpLHkuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwzMi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODds''@;'; put 'put ''NSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMu''@;'; put 'put ''ODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5''@;'; put 'put ''LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCwwLDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEz''@;'; put 'put ''My43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJMMTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLHkuQ2xyU2hhcGVO''@;'; put 'put ''b1dpZmk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNi4yMSwyMS44NWExLDEsMCwwLDAtLjIzLTEuNCwxMy41NiwxMy41NiwwLDAsMC01LTIuMjNsMy44NywzLjg3QTEsMSwwLDAsMCwyNi4yMSwyMS44NVoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTAuNzJhMjAuODgsMjAuODgsMCwwLDAtNC4xNi40M2wxLjc0LDEuNzRhMTksMTksMCwwLDEsMi40Mi0uMTdBMTguNzYsMTguNzYsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTIt''@;'; put 'put ''MS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzMuNTUsOC4yQTI4LjExLDI4LjExLDAsMCwwLDguMTEsNS4zNkw5LjY5LDYuOTNBMjYsMjYsMCwwLDEs''@;'; put 'put ''MzIuNDUsOS44N2ExLDEsMCwwLDAsMS4xLTEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTEuODQsNC43NSw0LjI3LDcuMThjLS42Mi4zNC0xLjIzLjctMS44MywxLjFBMSwxLDAsMSwwLDMuNTYsOS45NEM0''@;'; put 'put ''LjI2LDkuNDcsNSw5LDUuNzQsOC42NWwzLjg3LDMuODdBMjAuNTksMjAuNTksMCwwLDAsNi4yMywxNC40LDEsMSwwLDAsMCw3LjM2LDE2YTE4LjgyLDE4LjgyLDAsMCwxLDMuNzctMmw0LjE2LDQuMTZBMTMuNTEsMTMuNTEsMCwwLDAsMTAsMjAuNTVhMSwxLDAsMCwwLDEuMTgsMS42MUExMS41''@;'; put 'put ''MiwxMS41MiwwLDAsMSwxNywyMGwxMC44LDEwLjgsMS40MS0xLjQxLTI2LTI2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LjE4LDE3LjcxbC4xMS0uMTdhMS41MSwxLjUxLDAsMCwwLS40Ny0yLjFBMjAuNTcsMjAuNTcsMCwwLDAsMTgsMTIuMzdjLS41NiwwLTEuMTEsMC0xLjY1LjA3bDMuMjEsMy4yMWExNy40MSwxNy40MSwwLDAsMSw3LjYsMi41MkEx''@;'; put 'put ''LjQ5LDEuNDksMCwwLDAsMjkuMTgsMTcuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuNzYsOS4zOEEyNy45LDI3LjksMCwwLDAsMTAuMTgsNi4yN0wxMi44MSw4LjlBMjQuNjgsMjQuNjgsMCwwLDEsMzEuMSwx''@;'; put 'put ''Mi4xMmExLjQ5LDEuNDksMCwwLDAsMi0uNDZsLjExLS4xN0ExLjUxLDEuNTEsMCwwLDAsMzIuNzYsOS4zOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0zLDQuNzVsMy4xLDMuMUEyNy4yOCwyNy4yOCwwLDAsMCwzLjE4''@;'; put 'put ''LDkuNDJhMS41MSwxLjUxLDAsMCwwLS40OCwyLjExbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMjQuNjksMjQuNjksMCwwLDEsMy42Ny0xLjlsMy4xNCwzLjE0YTIwLjYzLDIwLjYzLDAsMCwwLTQuNTMsMi4wOSwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5''@;'; put 'put ''LDAsMCwwLDIsLjQ2QTE3LjQ2LDE3LjQ2LDAsMCwxLDE0LjI1LDE2bDMuNiwzLjZhMTMuMzksMTMuMzksMCwwLDAtNi43OSwxLjkzLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMiwxMC4yLDAsMCwxLDktLjdMMjksMzAuNzVsMS40MS0x''@;'; put 'put ''LjQxLTI2LTI2WiIvPlxuJykseS5DbHJTaGFwZUluc3RhbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJI''@;'; put 'put ''NS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3''@;'; put 'put ''LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEs''@;'; put 'put ''MTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0x''@;'; put 'put ''MC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJykseS5DbHJTaGFwZVVuaW5zdGFsbD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDls''@;'; put 'put ''NS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiww''@;'; put 'put ''LDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNB''@;'; put 'put ''MSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44''@;'; put 'put ''N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwz''@;'; put 'put ''LjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIvPlxuJykseS5DbHJTaGFwZUxheWVycz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEs''@;'; put 'put ''MSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEsLjg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwx''@;'; put 'put ''LDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEs''@;'; put 'put ''MzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0''@;'; put 'put ''LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLHkuQ2xyU2hhcGVCbG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh''@;'; put 'put ''MSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsNS4xLDI4LjYxLDEwLDE4LDE0LjksNy4zOSwxMFpNNiwxMS41NmwxMSw1LjA4djE0LjhMNiwyNi4zNlpNMTksMzEuNDRWMTYuNjRsMTEt''@;'; put 'put ''NS4wOHYxNC44WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNTNWMjYuMzZMMTksMzEuNDRWMTYuNjRsMi41Ny0xLjE5YTMuNjcsMy42NywwLDAsMS0yLjExLTEuMjJMMTgsMTQuOSw3LjM5LDEwLDE4''@;'; put 'put ''LDUuMWwzLjA4LDEuNDIsMS0xLjc0TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuNTNaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEs''@;'; put 'put ''NS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg3LDEuMjZsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTJIMzMuN2ExLjI4LDEuMjgsMCwwLDAsMS4x''@;'; put 'put ''LTEuOTJMMjkuMDgsMS4yNkExLjI4LDEuMjgsMCwwLDAsMjYuODcsMS4yNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEu''@;'; put 'put ''NDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh''@;'; put 'put ''MSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMzEuNDQsNiwyNi4zNlYxMS41NmwxMSw1LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMS40Miw5LjA5bC0xMy02YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjEwQTEsMSwwLDAsMCwzMS40Miw5LjA5Wk0xOCwxNC45LDcuMzksMTAs''@;'; put 'put ''MTgsNS4xLDI4LjYxLDEwWk0zMCwyNi4zNiwxOSwzMS40NFYxNi42NGwxMS01LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS4zOHYxMUwxOSwzMS40NFYxNi42NGwyLjc5LTEuMjlhMy42OCwzLjY4LDAs''@;'; put 'put ''MCwxLTIuMjUtMS4xNkwxOCwxNC45LDcuMzksMTAsMTgsNS4xbDMsMS4zOSwxLTEuNzVMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxNS4z''@;'; put 'put ''OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xMiwyMS4xMywxMWExLjI3LDEuMjcsMCwwLDAsMS4xLDEuOTFIMzMuNjhBMS4yNywxLjI3LDAsMCwwLDM0Ljc4LDExTDI5''@;'; put 'put ''LjA2LDEuMTJBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4w''@;'; put 'put ''OC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41''@;'; put 'put ''OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSx5LkNsclNoYXBlQmxvY2tzR3JvdXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0Ex''@;'; put 'put ''LDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4w''@;'; put 'put ''OCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTIuODEuOTFMMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzVaTTE4LjEsNC4wOGw1LjExLDIuMzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYs''@;'; put 'put ''MTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzLTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFpNMTEuNiwxNS41N2gwVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDI0LjYsOHY3LjU4aDBsLTYuNSwzWk0zMi4x''@;'; put 'put ''MSwyOC44MWwtNi41LDMtNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdoLTJ2MGwtNi41LDMtNi41LTNWOGw2''@;'; put 'put ''LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBsLjI0LS4xMWE0LjE3LDQuMTcsMCwwLDEsLjI5LS42NWwxLjMzLTIuMzEtMi4yOCwxTDEzLDYuNDNsNS4xLTIuMzUsMy40NywxLjYsMS0xLjczTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwt''@;'; put 'put ''Ni45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpN''@;'; put 'put ''MTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1''@;'; put 'put ''LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbjxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMz''@;'; put 'put ''LjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTgu''@;'; put 'put ''NzYsMjYuNiwxNS41N1YxMi43YTcuNTgsNy41OCwwLDAsMS0yLTEuNTF2NC4zOWwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBMMjMsOC43MmE3LjA1LDcuMDUsMCwwLDEtLjQ3LTJsLTQuNDcsMkwxMyw2LjQzbDUuMS0yLjM1LDQuNDQsMnMwLS4wNiwwLS4wOWE3LjU1''@;'; put 'put ''LDcuNTUsMCwwLDEsLjI3LTJsLTQuMy0yYTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4y''@;'; put 'put ''NmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTAsMTQuNDktNi41LTNWMjEuMjNMMTAuMTgsMjRBMSwxLDAsMCwwLDExLDI0bDYuMDgt''@;'; put 'put ''Mi44LDAsNy42Wm0xNS0xNC40OCw1LjExLDIuMzVMMjUuNjEsMjIsMjAuNSwxOS42N1ptMCwxNC40OS02LjUxLTNWMjEuMjJMMjUuMTksMjRBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIgLz5cbjxjaXJjbGUgY3g9IjMwLjAzIiBjeT0iNi4wMyIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEs''@;'; put 'put ''MCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwz''@;'; put 'put ''LjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzUsNS4xMSwyLjM1Wm0tMS02LjQ0LTYuNDQsM1YxMC44N2ExLDEsMCwwLDAsLjM1LS4wOEwyNC42LDh2''@;'; put 'put ''Ny41OFpNMTguMSw0LjA4bDUuMTEsMi4zNUwxOC4xLDguNzgsMTMsNi40M1pNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm02LjUsMTEuNDktNi41LDNoMFYyNC4xMWgwQTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFptMTUsMC02LjQ2LDNWMjQuMTFBMSwxLDAsMCww''@;'; put 'put ''LDI2LDI0bDYuMDgtMi44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3djBoLTJ2MGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4bC4xNC0uMDZBMy4yMywzLjIzLDAsMCwxLDE5''@;'; put 'put ''LDEwbDEuMjgtMi4yMi0yLjE0LDFMMTMsNi40M2w1LjEtMi4zNSwzLjM5LDEuNTYsMS0xLjczLTQtMS44M2ExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMu''@;'; put 'put ''NDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUEx''@;'; put 'put ''LjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODksMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yNywxM0gzMy43MmExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMSwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44OSwxLjE0WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjEyLjY5YTcuNjYsNy42NiwwLDAsMS0yLTEuNDd2NC4zNGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4''@;'; put 'put ''TDIzLDguNzNhNy42NSw3LjY1LDAsMCwxLS40OC0ybC00LjQyLDJMMTMsNi40M2w1LjEtMi4zNSw0LjM4LDJWNmE3LjU1LDcuNTUsMCwwLDEsLjI3LTJMMTguNSwyLjA4YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAt''@;'; put 'put ''LjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wm0tMjgsLjkxLDUuMTEtMi4zNiw1''@;'; put 'put ''LjExLDIuMzVMMTAuNiwyMlpNMTAuNiwzMS44VjI0LjExQTEuMDgsMS4wOCwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptOS45LTEyLjEzLDUuMTEtMi4zNSw1LjExLDIuMzVMMjUuNjEsMjJaTTI1LjY0LDMxLjhWMjQuMTFBLjg5Ljg5LDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4PSIyOS45OCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLHku''@;'; put 'put ''Q2xyU2hhcGVCdW5kbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42''@;'; put 'put ''LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIu''@;'; put 'put ''MTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGEx''@;'; put 'put ''LDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2''@;'; put 'put ''LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSx5LkNsclNoYXBlV2lmaT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4''@;'; put 'put ''LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0uMDcsMSwxLDAsMCwwLDEuMS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43''@;'; put 'put ''MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIuNjQsMSwxLDAsMCwwLDEuMTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUyLDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDI0LjQyYTQsNCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0IiByPSIzIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIuNzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0y''@;'; put 'put ''OS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY4LDI0LjY4LDAsMCwxLDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTksMjAuNTksMCwwLDAtMjEuNywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcuNCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwx''@;'; put 'put ''LjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEzLjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSww''@;'; put 'put ''LDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJykseS5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAsZy5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIyNSIgd2lk''@;'; put 'put ''dGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguNjQsMTFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxMHYyWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjIxSDRWMTVIMjAuNThBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDRWN0gyMC43MWwxLjE1''@;'; put 'put ''LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI2IiB5PSIxNyIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjYiIHk9IjI1IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQi''@;'; put 'put ''IHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTEwLDExSDI0di0uNTFBNy40OCw3LjQ4LDAsMCwxLDIzLjEzLDlIMTBaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjY4LS41SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4w''@;'; put 'put ''Ny0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxMCIgeT0iOSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI2IiB5''@;'; put 'put ''PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMnY2SDRabTAsOEgzMnY2SDRaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOSw5Ljg5LDE5LjU2LDlIMTBWN0gyMC43MWwxLjczLTNINEEyLDIsMCwwLDAsMiw2djZIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlaTTgsOUg2''@;'; put 'put ''VjdIOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEgydjhIMzRWMTUuMzhaTTgsMTlINlYxN0g4Wm0xNiwwSDEw''@;'; put 'put ''VjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDE0djhIMzRWMTRabTYsNUg2VjE3SDhabTE2LDBI''@;'; put 'put ''MTBWMTdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTIsMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0SDJabTgtM0gyNHYySDEwWk02LDI3SDh2Mkg2WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEwVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZ2NkgyNS41MUE3LjUy''@;'; put 'put ''LDcuNTIsMCwwLDEsMjMuMTMsOVpNOCw5SDZWN0g4WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIsMjJIMzRWMTRIMlptOC01SDI0djJIMTBaTTYsMTdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIsNEg0QTIsMiwwLDAsMCwy''@;'; put 'put ''LDZ2NkgzNFY2QTIsMiwwLDAsMCwzMiw0Wk04LDlINlY3SDhaTTI0LDlIMTBWN0gyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2''@;'; put 'put ''MkgxMFpNNiwyN0g4djJINloiLz5cbicpLHkuQ2xyU2hhcGVIYXJkRGlzaz0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTM0LDIxLjA4bC0xLjQtNS42OEgzMC41MWwxLjQ5LDZWMjlINFYyMS40NEw3LjA2LDloMTIuNWwxLjE1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zNCwyMS4wOCwzMiwxMy4yMWE3LjQ5LDcuNDksMCwwLDEtMiwuMjlsMiw3Ljk0VjI5SDRWMjEuNDRMNy4wNiw5SDIzLjEzYTcuNDUsNy40NSwwLDAsMS0u''@;'; put 'put ''NTUtMkg3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMiwyMS4wOGExLDEsMCwwLDAsMCwuMjRWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIxLjMxQTEsMSwwLDAsMCwzNCwyMS4wOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDIxLjA4LDMwLjg2LDguNDNBMiwyLDAsMCwwLDI4''@;'; put 'put ''Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaTTQsMjlWMjEuNDRMNy4wNiw5SDI4LjkzTDMyLDIxLjQ0VjI5WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjI2IiB5PSIyNCIg''@;'; put 'put ''d2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMi41OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjFBNy40Nyw3LjQ3LDAsMCwxLDIyLjU3LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBI''@;'; put 'put ''MzMuNzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiBkPSJNMzAuODYsOC40M0EyLDIsMCwwLDAsMjguOTQsN0g3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMi4yOSwyMEgzMy43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yLDIydjdhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4nKSx5LkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIg''@;'; put 'put ''eT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOWExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcu''@;'; put 'put ''MDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlh''@;'; put 'put ''MSwxLDAsMSwwLDIsMFY2bDQsMy45NWExLDEsMCwwLDAsLjcxLjI5bC4xMSwwYTcuNDYsNy40NiwwLDAsMS0xLjI1LTMuNTJMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwx''@;'; put 'put ''NEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00IiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjJoNy45NUMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIs''@;'; put 'put ''MjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBk''@;'; put 'put ''PSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwx''@;'; put 'put ''LDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDIyLjIzQTMu''@;'; put 'put ''NjIsMy42MiwwLDAsMSwyMSwxNS4xNlYxOGEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc5LDIxLjQ5LDMzLjI4LDIwLjA3LDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUy''@;'; put 'put ''TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40Niww''@;'; put 'put ''LDAsMSwyNS41MSwxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTUsMTkuNywzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDI0djZhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjZhMywzLDAsMSwxLTYsMFYxMkg3''@;'; put 'put ''LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43NywyMS40MywzMy4xNCwxOS42OSwzMC44NCwxMy4zN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJykseS5DbHJTaGFwZUJhY2t1cD0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYi''@;'; put 'put ''IHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjcsMy42NywwLDAsMS0yLS42MUwxOSwx''@;'; put 'put ''NlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDI5LjQ2YzEsMi44NSwyLjMx''@;'; put 'put ''LDYuMzcsMi41NCw3LjA4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIOS41OGEzLDMsMCwwLDEtLjE0LTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzND''@;'; put 'put ''MzQsMjIuMTIsMzQsMjIsMzEuNTgsMTUuNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu''@;'; put 'put ''MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9''@;'; put 'put ''IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMwLjg3LDEzLjQ1YTcuNTUsNy41NSwwLDAsMS0uODcuMDUsNy40Niw3LjQ2LDAsMCwxLTMuMzUtLjgsMywzLDAsMCwxLS4yNCwxLjNoMi41NEMzMCwxNi45NCwz''@;'; put 'put ''MS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIy''@;'; put 'put ''LjMzQzM0LDIyLjEsMzQsMjIsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiXG4gICAgICAgICAgICAgICAgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyNi41NWEzLDMsMCwwLDEtLjE0LDJoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwx''@;'; put 'put ''NCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3''@;'; put 'put ''LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE1LS41MS0uNjUtMS45My0yLjM1LTYuNkgyNS4zbC01Ljg5LDUuODZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTgsMTkuODRsNC40Ny00LjQ0aC0uMjNhMy42NCwzLjY0LDAsMCwxLTItLjYxTDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00''@;'; put 'put ''LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45Miww''@;'; put 'put ''LDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE3LS41Ny0uNzktMi4zLTMuMDYtOC41NWE3LjU1LDcuNTUsMCwwLDEtLjg3''@;'; put 'put ''LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uODYsMi4yMWwtNi4zOCw2LjM1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOS40MSwyMS4yNmwtLjc0Ljc0SDMzLjkzYy0uMTctLjU3LS43OS0yLjMxLTMuMDktOC42M0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS43NiwyLjky''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcs''@;'; put 'put ''MjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJykseS5DbHJTaGFwZURldmljZXM9KDAsZy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhW''@;'; put 'put ''MzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIySDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEy''@;'; put 'put ''LDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''aDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJWNkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLHkuQ2xyU2hhcGVLZXlib2FyZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwxOEg0VjEwSDMyWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIHg9IjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTUiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTkiIHk9IjEzIiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNyIgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iNyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIxMSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMTUiIHk9IjE3IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE5IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEyIiB4PSIyMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIHg9IjI3IiB5PSIyMiIgd2lkdGg9IjEuOTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiB4PSI3IiB5PSIy''@;'; put 'put ''MiIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMS4xMyIgeT0iMjIiIHdpZHRoPSIxMy43NSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk0xOSwxM2gydjJIMTlabTAsNGgydjJIMTlabS00LTRoMnYySDE1Wm0wLDRoMnYySDE1Wm0tNC00aDJ2Mkgx''@;'; put 'put ''MVpNOSwyNEg3VjIySDlabTAtNUg3VjE3SDlabTAtNEg3VjEzSDlabTIsMmgydjJIMTFabTEzLjg4LDdIMTEuMTNWMjJIMjQuODhaTTI1LDE5SDIzVjE3aDJabTAtNEgyM1YxM2gyWm0zLjk0LDlIMjdWMjJoMS45NFpNMjksMTlIMjdWMTdoMlptMC00SDI3VjEzaDJaIi8+XG4nKSx5LkNsclNo''@;'; put 'put ''YXBlTW91c2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYy''@;'; put 'put ''NGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAsOCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMs''@;'; put 'put ''MCwwLDEsMi42LDBaIi8+XG4nKSx5LkNsclNoYXBlRGFzaGJvYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptMTEuMzQsMjUuNUg2''@;'; put 'put ''LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM2ExNC40NywxNC40NywwLDAsMSwxMy40LDEzLjYxSDI4''@;'; put 'put ''LjkydjJoMy41M0ExNC40MywxNC40MywwLDAsMSwyOS4zNCwyOS43NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS44NSwxOC42OWEzLDMsMCwxLDAsNC44My44NWw1Ljky''@;'; put 'put ''LTUuODEtMS40MS0xLjQxLTUuOTEsNS44MUEzLDMsMCwwLDAsMTUuODUsMTguNjlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTgsMTNhNy40NSw3LjQ1LDAsMCwxLTIu''@;'; put 'put ''MDYuNDQsMTQuNCwxNC40LDAsMCwxLDEuOTMsNi40M0gyOC45MnYyaDMuNTNhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMSw3Ljg0SDYuNjZhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMS03Ljg0SDd2LTJIMy41NUExNC40MSwxNC40MSwwLDAsMSw3LDExLjI5bDIuNDUsMi40NSwxLjQxLTEuNDFMOC40''@;'; put 'put ''Myw5Ljg3QTE0LjQxLDE0LjQxLDAsMCwxLDE3LDYuMjl2My41aDJWNi4zQTE0LjQxLDE0LjQxLDAsMCwxLDIyLjU4LDdhNy41Miw3LjUyLDAsMCwxLS4wOC0xLDcuNTIsNy41MiwwLDAsMSwuMDktMS4wOUExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40''@;'; put 'put ''NSwxNi40NSwwLDAsMCwyLTE4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptOC42LDkuNDgtNS45Miw1LjgxYTMsMywwLDEsMS0xLjQxLTEuNDJs''@;'; put 'put ''NS45MS01LjgxWm0tMjMsNi4xN0g3djJIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3UzMuNTMsMjAuMTgsMy41NSwxOS45Wm00Ljg4LTEwLDIuNDYsMi40Nkw5LjQ3LDEzLjc0LDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3Wk0xOSw5Ljc5SDE3VjYuMjljLjMyLDAsLjYz''@;'; put 'put ''LDAsMSwwcy43LDAsMSwuMDVaTTMyLjQ5LDIwLjc0YzAsLjM5LDAsLjc5LS4wNSwxLjE3SDI4Ljkydi0yaDMuNTNDMzIuNDcsMjAuMTgsMzIuNDksMjAuNDYsMzIuNDksMjAuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41OCwxM2E3LjQ2LDcuNDYsMCwwLDEtMTAtOC4xMkExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2Wk0xNyw2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1djMu''@;'; put 'put ''NUgxN1pNNywyMS45MUgzLjU2YzAtLjM5LS4wNS0uNzctLjA1LTEuMTdzMC0uNTYsMC0uODNIN1ptMi41MS04LjE2TDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3bDIuNDYsMi40NlptMTAuNjIsOS4xOWEzLDMsMCwxLDEtLjgyLTQuODFsNS45MS01LjgxLDEuNDEsMS40MS01''@;'; put 'put ''LjkyLDUuODFBMywzLDAsMCwxLDIwLjA5LDIyLjkzWm0xMi4zNS0xSDI4Ljkydi0yaDMuNTNjMCwuMjgsMCwuNTUsMCwuODNTMzIuNDcsMjEuNTIsMzIuNDQsMjEuOTFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJykseS5DbHJTaGFwZUhvc3Q9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwy''@;'; put 'put ''LjQ4LDIuNDdBMi40OCwyLjQ4LDAsMCwwLDE4LDI0LjNabTAsMy42YTEuMTMsMS4xMywwLDEsMSwxLjEzLTEuMTJBMS4xMywxLjEzLDAsMCwxLDE4LDI3LjlaIi8+PHJlY3QgeD0iMTMuNSIgeT0iMjAuNyIgd2lkdGg9IjkiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjUsMy42SDEwLjM1QTEuMzUsMS4zNSwwLDAsMCw5LDQuOTVWMzIuNEgyN1Y0Ljk1QTEuMzUsMS4zNSwwLDAsMCwyNS42NSwzLjZabS0uNDUsMjdIMTAuOFY1LjRIMjUuMloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTIuNiIgeT0iNy4yIiB3aWR0aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi''@;'; put 'put ''IHg9IjEyLjYiIHk9IjEwLjgiIHdpZHRoPSIxMC44IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwy''@;'; put 'put ''LjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMTMiIHk9IjIxIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42Ii8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMyw2IDEyLDYgMTIsNy42IDIwLjQsNy42Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xMiwxMS42aDYuNmMw''@;'; put 'put ''LTAuNiwwLjItMS4xLDAuNC0xLjZoLTdWMTEuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTI2LDE1LjRWMzJIMTBWNGgxMi41bDEuMS0ySDkuNUM4LjcsMiw4LDIuNyw4''@;'; put 'put ''LDMuNVYzNGgyMFYxNS40SDI2eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhj''@;'; put 'put ''MC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEu''@;'; put 'put ''MiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9''@;'; put 'put ''IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTI0LDEwLjVjLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41SDEydjEuNmgxMlYxMC41eiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTEyLDZ2MS42aDEwLjdjLTAuMS0wLjUtMC4yLTEuMS0wLjItMS42SDEyeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTI2LDEyLjNWMzJIMTBWNGgxMi44YzAuMi0wLjcsMC41LTEuNCwwLjktMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTMuMkMyNy4zLDEzLDI2LjYsMTIuNywyNiwxMi4zeiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTI2LjUsMmgtMTdDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMy41QzI4LDIuNywyNy4zLDIsMjYuNSwyeiBNMTgsMzAuNWMtMS41LDAtMi44LTEuMi0yLjgtMi44UzE2LjUsMjUsMTgsMjVzMi44LDEuMiwyLjgsMi44UzE5LjUsMzAuNSwxOCwzMC41eiBNMjMsMjIuNkgxM1YyMWgx''@;'; put 'put ''MFYyMi42eiBNMjQsMTEuNkgxMlYxMGgxMlYxMS42eiBNMjQsNy42SDEyVjZoMTJWNy42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMjcuOCIgcj0iMS4yIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIsMTUuM2MtMiwwLTMuNy0xLjYtMy43LTMuN0gxMlYxMGg2LjljMC0wLjEsMC4xLTAuMiwwLjEtMC4ybDEuMi0yLjJIMTJWNmg5LjJsMi4zLTRoLTE0QzguNywyLDgs''@;'; put 'put ''Mi43LDgsMy41VjM0aDIwVjE1LjNIMjIuMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''YWxlcnQiIGQ9Ik0yNi45LDFsLTUuNyw5LjljLTAuMywwLjYtMC4xLDEuNCwwLjUsMS43YzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yaDExLjRjMC43LDAsMS4zLTAuNiwxLjMtMS4zYzAtMC4yLTAuMS0wLjQtMC4yLTAuNkwyOS4xLDFjLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC43''@;'; put 'put ''LDI3LDAuOCwyNi45LDF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNCwxMC4zdjEuMkgxMlYxMGgxMS44Yy0wLjUtMC43LTAuOC0xLjUtMS0yLjRIMTJWNmgxMC41YzAsMCwwLTAu''@;'; put 'put ''MSwwLTAuMWMwLTEuNCwwLjQtMi43LDEuMS0zLjlIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjFDMjYuNCwxMi42LDI1LDExLjcsMjQsMTAuM3ogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgs''@;'; put 'put ''MzAuNXpNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuOSIgcj0iNSIvPlxuJykseS5DbHJTaGFwZVN0b3JhZ2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik0zMyw2LjY5aDBjLS4xOC0zLjQxLTkuNDctNC4zMy0xNS00LjMzUzMsMy4yOSwzLDYuNzhWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjYuNzhzMCwwLDAsMFMzMyw2LjcsMzMsNi42OVptLTIsNy41NmMtLjMzLjg2LTUu''@;'; put 'put ''MDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMiw0My4zMiwwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1YTQzLjMyLDQzLjMyLDAs''@;'; put 'put ''MCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmM3Ljc3LDAsMTIuNDYsMS41MywxMywyLjM3LS41Mi44Ny01LjIxLDIuMzktMTMsMi4zOUEzNy42LDM3LjYs''@;'; put 'put ''MCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2M0LDAsOS45My0uNDgsMTMtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LjUxLDkuMDks''@;'; put 'put ''MTgsOS4xMUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2guNjFBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQiIGQ9Ik0yOC44MywxNS40QTM4LjM3LDM4LjM3LDAsMCwxLDE4LDE2LjcsMzcuNDUsMzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1''@;'; put 'put ''LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNSwwLDIuODkuMDYsNC4xNS4xNmwx''@;'; put 'put ''LjEtMS45Yy0xLjg2LS4xOC0zLjctLjI2LTUuMjUtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4zN2MwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDN2LTE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yNyw1NC44Miw1NC44MiwwLDAsMCw2LjItLjM2LDcuNSw3LjUsMCwwLDEtMS4x''@;'; put 'put ''My0xLjg4Yy0xLjUuMTUtMy4yLjI0LTUuMDcuMjRBMzcuNiwzNy42LDAsMCwxLDcsNy43NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMSwxMy40M3YuODJjLS4zMy44Ni01''@;'; put 'put ''LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzMsNDMuMzMsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMyw0My4zMyww''@;'; put 'put ''LDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjMS43LDAsMy4yNS4wOCw0LjY0LjJhNy40NCw3LjQ0LDAsMCwxLC42Ny0xLjk0Yy0xLjg4LS4xOC0zLjc1''@;'; put 'put ''LS4yNi01LjMxLS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43''@;'; put 'put ''NCwxNS4wOS0zLjk0VjguNTljLS40MywyLjItNywzLjk0LTE1LjA5LDMuOTRBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MUMyNiwxMC41MywzMi41Miw4Ljc5LDMzLDYuNjFoMEMzMi44LDMuMiwyMy41MiwyLjI4LDE4LDIuMjhTMywzLjIxLDMs''@;'; put 'put ''Ni43MVYyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5''@;'; put 'put ''VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIiBkPSJNMTcuOTEsMjAuMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTguNzd2LTJhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFjNi45LDAsMTIuNy0xLjI3LDE0LjUxLTNIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuNTUtMi43NWgtLjc3QTM5LjQsMzkuNCwwLDAsMSw2LjI1''@;'; put 'put ''LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFoLjgyQTMuNjQsMy42NCwwLDAsMSwxOSw5Ljc1bDQuMTctNy4yMmMtMS44NS0uMTgtMy42OC0uMjUtNS4yMS0uMjUtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjI5YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40''@;'; put 'put ''M1YyNC4wOUMzMi41NywyNi4yOCwyNiwyOCwxNy45MSwyOEEzOS40LDM5LjQsMCwwLDEsNi4yNSwyNi41MnYtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMjZDMjYsMjYsMzIuNTcsMjQuMjgsMzMsMjIuMDlWMTYuMzRDMzIuNTcsMTguNTMsMjYsMjAuMjgsMTcuOTEsMjAuMjhaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkx''@;'; put 'put ''TDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0di0xLjZh''@;'; put 'put ''Ny40Nyw3LjQ3LDAsMCwxLTcuMzgtLjgsNDguMyw0OC4zLDAsMCwxLTcuNzEuNTlBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MSw1MSw1MSwwLDAsMCw2LS4zNCw3LjQ2LDcuNDYsMCwwLDEtLjU5LTcuNjVjLTEuODctLjE4LTMuNzMtLjI2LTUu''@;'; put 'put ''MjgtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2''@;'; put 'put ''LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2IiByPSI1Ii8+XG4nKSx5LkNsclNoYXBlQ2x1c3Rlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwx''@;'; put 'put ''LjY1LDAsMCwwLDMxLjM2LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiLz48ZWxsaXBzZSBjeD0iMTguMDEiIGN5PSIyNS45OSIgcng9IjEuOCIgcnk9IjEuNzkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCww''@;'; put 'put ''LDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0yNCwzMEgxMlY2SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEu''@;'; put 'put ''NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1hbGVydGVkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDkuODls''@;'; put 'put ''LjM5LS42OEgxMy41djEuNmg1LjE3QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwzMEgxMlY2aDkuMjlsMS4xNS0ySDExLjY4QTEu''@;'; put 'put ''NjgsMS42OCwwLDAsMCwxMCw1LjY4VjMySDI2VjE1LjRIMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMwIDI3LjUgMzAgMjcuNSAzMiAzMyAz''@;'; put 'put ''MiAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhI''@;'; put 'put ''NC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTAuNDlWMzBIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwxMy40M1YzMEgyNy41djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM2LDhIMjcuNVYzMkgz''@;'; put 'put ''M1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwx''@;'; put 'put ''OCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy41IiB5PSIxNS40IiB3aWR0aD0iNS41IiBoZWlnaHQ9IjE2LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjMxLTNIMTNWOWg2LjU2bDIuODktNUgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2''@;'; put 'put ''LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMyw5LjY3VjMySDgu''@;'; put 'put ''NVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAs''@;'; put 'put ''MTAsNS42OFYzMkgyNlYxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjUtLjQ0VjMySDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxnLmNsckljb25TVkcpKCc8cG9s''@;'; put 'put ''eWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDggMTUgOCAxNSAxMCAyMSAxMCAyMSA0IDE5IDQgMTkgOCIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgNCAzMCA4IDI2IDggMjYgMTAgMzIgMTAgMzIgNCAzMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1''@;'; put 'put ''IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAz''@;'; put 'put ''MiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBv''@;'; put 'put ''bHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAx''@;'; put 'put ''MCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDE5IDI2IDE5IDI2IDIxIDMyIDIxIDMyIDE1IDMwIDE1IDMwIDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAzMCAyNiAzMCAyNiAzMiAzMiAz''@;'; put 'put ''MiAzMiAyNiAzMCAyNiAzMCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5''@;'; put 'put ''IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxNSAzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAx''@;'; put 'put ''NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTks''@;'; put 'put ''OEgxNXYyaDRMMTksOS44OSwyMSw2LjVWNEgxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMu''@;'; put 'put ''NjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''NCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWln''@;'; put 'put ''aHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIy''@;'; put 'put ''NiIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhl''@;'; put 'put ''aWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMGg0TDE5LDku''@;'; put 'put ''ODksMjEsNi41VjRIMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC05LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSI0IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIg''@;'; put 'put ''aGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQnVpbGRpbmc9KDAsZy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMzEsMTMuNDNWMzFIMjN2MkgzM1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIxLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2''@;'; put 'put ''IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3''@;'; put 'put ''aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''NS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwzMUgxN1Yy''@;'; put 'put ''OEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMlY4LjI0bDItMy40MUEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWMTUuMzhhMy42OCwzLjY4LDAsMCwxLTItLjc0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMxIDE1LjQgMzEgMzEgMjMgMzEgMjMgMzMgMzMgMzMgMzMgMTUuNCAzMSAxNS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu''@;'; put 'put ''ODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjJWMzNIMzNWMTBBMiwyLDAsMCwwLDMxLDhaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYx''@;'; put 'put ''OGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMlptMC01SDI4VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYz''@;'; put 'put ''MGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlpt''@;'; put 'put ''MC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVYxNC42NGEzLjY3LDMuNjcsMCwwLDEtMS00''@;'; put 'put ''Ljc2bDEtMS42NVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMTho''@;'; put 'put ''MlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNGwtLjIzLDBWMzNIMzNWMTUuNFpNMjYsMjVIMjRWMjNoMlptMC01SDI0VjE4''@;'; put 'put ''aDJabTQsNUgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44OCwz''@;'; put 'put ''SDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0g5VjMwaDZ2M2g1VjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE3Ljg4LDNaTTksMjVIN1YyM0g5Wm0wLTVIN1YxOEg5Wm0wLTVIN1YxM0g5Wm0wLTVIN1Y4SDlabTQsMTVIMTFWMjNoMlptMC01SDExVjE4aDJabTAtNUgxMVYxM2gyWm0wLTVI''@;'; put 'put ''MTFWOGgyWm00LDE1SDE1VjIzaDJabTAtNUgxNVYxOGgyWm0wLTVIMTVWMTNoMlptMC01SDE1VjhoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYxNUgyOFYxMy4yMkE3LjUs''@;'; put 'put ''Ny41LDAsMCwxLDIyLjc4LDhIMjJWMzNIMzNWMTIuODdBNy40Nyw3LjQ3LDAsMCwxLDMwLDEzLjVaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsOEgyM3YyaDhW''@;'; put 'put ''MzFIMjN2MkgzM1YxMEEyLDIsMCwwLDAsMzEsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTku''@;'; put 'put ''ODgsM1pNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTExIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE4Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUNQVT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEu''@;'; put 'put ''NUgyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxMS4zM2gtMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEu''@;'; put 'put ''NkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZI''@;'; put 'put ''NnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYz''@;'; put 'put ''MEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40Wk0yOCwyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOEgyNy45YS4xLjEsMCwwLDEsLjEuMVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVYyMy4wN2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEs''@;'; put 'put ''OC4xLDhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwx''@;'; put 'put ''LjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAs''@;'; put 'put ''MjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTUuNEgyOFYyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFB''@;'; put 'put ''LjEuMSwwLDAsMSw4LjEsOGgxMmwxLjE1LTJIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUu''@;'; put 'put ''NEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1''@;'; put 'put ''LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4wNiwyNC41N0gyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxNS40aC0xLjV2Ny42''@;'; put 'put ''N2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIu''@;'; put 'put ''MmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjV2OC40MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTUuNGgtLjc3QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZI''@;'; put 'put ''OC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2''@;'; put 'put ''Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxMy41YTcuNDYsNy40NiwwLDAsMS01LTEuOTJWMjMuODFBMS4xOCwxLjE4LDAsMCwxLDI0''@;'; put 'put ''LDI1SDEzVjIzSDIzVjExaDEuNDJBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44''@;'; put 'put ''LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4x''@;'; put 'put ''LDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMTguMTVhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjguMUEyLjEsMi4xLDAsMCwwLDI3LjksNkgyNi4zNVYzLjhh''@;'; put 'put ''LjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjgu''@;'; put 'put ''OCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEu''@;'; put 'put ''OC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlTWVtb3J5PSgwLGcuY2xySWNvblNWRykoJzxyZWN0''@;'; put 'put ''IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDdINEEyLDIsMCwwLDAsMiw5djRINFY5SDMydjRoMlY5QTIsMiwwLDAsMCwzMiw3WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyN0gxOXYySDMyYTIsMiwwLDAsMCwyLTJWMTdIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdp''@;'; put 'put ''ZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIMTZ2OGg0VjE0LjY0QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1h''@;'; put 'put ''bGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNCIgeT0iMTUuNCIgd2lkdGg9IjQiIGhlaWdodD0iNC42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgxOS41Nmwx''@;'; put 'put ''LjE1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIg''@;'; put 'put ''eT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJB''@;'; put 'put ''Ny40Niw3LjQ2LDAsMCwxLDI1LjUxLDEySDI0djhoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINEEyLDIsMCwwLDAsMiw5''@;'; put 'put ''djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxM1Y5YTIsMiwwLDAsMC0yLTJINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyVjEzWk0xMiwyMEg4VjEyaDRabTgs''@;'; put 'put ''MEgxNlYxMmg0Wm04LDBIMjRWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxN1YxNS4wN0gyOFYyMEgyNFYxNS4wN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMjAsMTQuMzFWMjBIMTZWMTJoMi42MUEzLjY4''@;'; put 'put ''LDMuNjgsMCwwLDEsMTksOS41NUwyMC41Miw3SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LjhBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LjhaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTMuMjJhNy4zMyw3LjMzLDAsMCwxLTQsMFYyMEgyNFYxMmgxLjUxYTcuNDgsNy40OCwwLDAsMS0yLjk0LTVINEEyLDIsMCwwLDAsMiw5djRI''@;'; put 'put ''NHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3Wk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhD''@;'; put 'put ''MjIuNzcsNC4wOCwxOSw1LjQsMTksNy45MVY5LjVhMTguNzUsMTguNzUsMCwwLDEsMiwuMlY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMzMiw3LjI3LDMyLDcuOTFWMTguMjRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0''@;'; put 'put ''LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1''@;'; put 'put ''LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVabTYuNjUsNy42N2MtLjg1''@;'; put 'put ''LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMs''@;'; put 'put ''MCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4czYuNjUsMS40Myw2LjY1LDIuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUu''@;'; put 'put ''NCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC42NSwx''@;'; put 'put ''OC41MmMtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYu''@;'; put 'put ''MzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4bC43NSwwYTMuNjksMy42OSwwLDAsMS0uMDgtMmwtLjY2''@;'; put 'put ''LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS40aC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yMiw0LjhjLTEuNzUuNjMtMywxLjY4LTMsMy4xMlY5LjVsLjI1LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2Mi44NGMwLC41''@;'; put 'put ''NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQs''@;'; put 'put ''NC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1''@;'; put 'put ''LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywx''@;'; put 'put ''Ni4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIu''@;'; put 'put ''NjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjEsNy45MWMwLS4zMy41NS0uOCwxLjU0LTEuMTgsMC0uMjQsMC0uNDgsMC0uNzNhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjQxQzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY1YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzV2LTUuOUE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS40OGM1LjMuMjYsOSwyLjYsOSw1Ljc2djYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcs''@;'; put 'put ''OS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQu''@;'; put 'put ''MzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAu''@;'; put 'put ''MjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4''@;'; put 'put ''VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2YTMuNjgsMy42OCwwLDAsMS0uMzktMi43bC0uNjYsMGMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4''@;'; put 'put ''LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSww''@;'; put 'put ''LDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44''@;'; put 'put ''Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS40OGwuMjcsMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDI4djYuNTNsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45''@;'; put 'put ''LTMuNzVWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3''@;'; put 'put ''LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQu''@;'; put 'put ''NSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMTEsOC42My0zLjExVjE1LjIzQzI2LjY1''@;'; put 'put ''LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjRDMjAuNTUsNS4xOSwxOSw2LjMsMTksNy45''@;'; put 'put ''MVY5LjQ4YTE1LjMzLDE1LjMzLDAsMCwxLDUsMUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjcuMzUs''@;'; put 'put ''MTNhNCw0LDAsMCwxLC43LDIuMjN2Ni43bC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjEyLjMzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjUuOTkiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4''@;'; put 'put ''LDE1LjRIMzEuNzNhMTQsMTQsMCwwLDEsLjIyLDEuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuMDksNC42MmwxLTEuNzZBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaTTE4LDMyYTEzLjkxLDEzLjkxLDAsMCwxLTguMTYtMi42NUwxOC40MywxOUgzMS45''@;'; put 'put ''NUExNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYs''@;'; put 'put ''MTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNCwxOGExNCwxNCwwLDAsMSwyNy45NS0xSDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSw0LDE4Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjIsMTMuNGExMy45MSwxMy45MSwwLDAsMSwuNzUsMy42SDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSwyMi42MSw0LjhhNy40Myw3LjQzLDAsMCwxLC41OC0xLjkyLDE2''@;'; put 'put ''LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQzLDcuNDMsMCwwLDEsMzEuMiwxMy40Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45''@;'; put 'put ''QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3QTE2LDE2LDAsMSwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE1Ljkx''@;'; put 'put ''LDE1LjkxLDAsMCwwLS44NC00LjE4LDcuNDksNy40OSwwLDAsMS05LjkyLTkuOTRBMTYsMTYsMCwwLDAsNywyOS42TDE3LjQ5LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj''@;'; put 'put ''eT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTUsMTdhMTYsMTYsMCwwLDAtLjE4LTEuNjFIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsNC4wNi03QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3''@;'; put 'put ''LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4x''@;'; put 'put ''Mi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4''@;'; put 'put ''LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSww''@;'; put 'put ''LDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41''@;'; put 'put ''NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0''@;'; put 'put ''LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVNoaWVsZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42Niwx''@;'; put 'put ''OC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODIt''@;'; put 'put ''Myw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNHYuNTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0x''@;'; put 'put ''Mi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItM2MxLC42NCwyLjIsMS4yNywzLjQzLDEuODlsMS0xLjc0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwz''@;'; put 'put ''LjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjV2Mi40M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0''@;'; put 'put ''Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ2LjE5LDQ2LjE5LDAsMCwwLDQuNTEsMi40MmMwLS4xLDAtLjE5LDAtLjI5YTcuNDksNy40OSwwLDAsMSwuMjMtMS44Myw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUs''@;'; put 'put ''MCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0''@;'; put 'put ''YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42''@;'; put 'put ''OCwwLDAsMSwxOSw5Ljg5TDIyLjQzLDRhNDEuMSw0MS4xLDAsMCwxLTMuODktMi4xOEwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4z''@;'; put 'put ''NC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIz''@;'; put 'put ''LDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTcuMjctOS4zMyw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42''@;'; put 'put ''NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i''@;'; put 'put ''MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlU2hpZWxkWD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5''@;'; put 'put ''LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCww''@;'; put 'put ''LDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1Ljgy''@;'; put 'put ''LDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00Ljgx''@;'; put 'put ''LDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwx''@;'; put 'put ''My42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEuNCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40''@;'; put 'put ''LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlSW1wb3J0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3''@;'; put 'put ''TDgsMTAuODZWMTVoMlYxMy42MWg3LjYxVjZIMjhWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS43LDZIMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTExLjk0LDI2LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTksMjJsLTUuNjgtNS42OGExLDEsMCwwLDAtMS40MSwxLjQxTDE1LjIsMjFIM2ExLDEsMCwxLDAsMCwySDE1LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMCwxMy42MWg3LjYxVjZoMy42OGwxLjE1LTJIMTQuODdMOCwxMC44NlYxNWgyWm0wLTEuOTJMMTUuNyw2SDE2djZIMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTQuODdMOCwxMC44NlYyMUgxNS4ybC0zLjI1LTMuMjVhMSwxLDAsMCwxLDEu''@;'; put 'put ''NDEtMS40MUwxOSwyMmwtNS42OCw1LjY4YTEsMSwwLDAsMS0xLjQxLTEuNDFMMTUuMjMsMjNIOHY3YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0Wk0xNiwxMkgxMHYtLjMyTDE1LjY5LDZIMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMywyMWExLDEsMCwxLDAsMCwySDhWMjFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCww''@;'; put 'put ''LDEsMTksOS44OUwyMi40NSw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFpNMTYsMTJI''@;'; put 'put ''MTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAs''@;'; put 'put ''Mkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQx''@;'; put 'put ''LTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNlpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFw''@;'; put 'put ''ZUV4cG9ydD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2aDcuNjhsMS4xNS0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAt''@;'; put 'put ''MS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2''@;'; put 'put ''LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yNiwxMi4zNGE3LjUzLDcuNTMsMCwwLDEtMi0xLjg1djMuODloMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3''@;'; put 'put ''LjQ5LDAsMCwxLC4yOC0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWNmEyLDIsMCwwLDAtMi0ySDEw''@;'; put 'put ''Ljg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIs''@;'; put 'put ''MTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSww''@;'; put 'put ''LDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEs''@;'; put 'put ''MCwwLDEsMS0xaDhWMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTls''@;'; put 'put ''LTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDIy''@;'; put 'put ''Ljc4LDRIMTAuODdMNCwxMC44NlYzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMjNIMThBMSwxLDAsMCwxLDE3LDIyWk0xMiwxMkg2di0uMzJMMTEuNjksNkgxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42NSw3LjY1LDAsMCwxLDExLDEw''@;'; put 'put ''Ljc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguMjYsOC4yNiwwLDAsMSw4LjQ1LDgsNy43NSw3Ljc1LDAsMCwxLDAsLjhsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDMuOTMtMTVaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwy''@;'; put 'put ''MS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwy''@;'; put 'put ''LjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0u''@;'; put 'put ''NjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguODEsOC44MSwwLDAsMSwyLC4yNWwxLTEuOGExMC44LDEwLjgsMCwwLDAtMy4wNy0uNDUsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1''@;'; put 'put ''QTcuNjYsNy42NiwwLDAsMSwzLjYsMTguMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4QTgsOCww''@;'; put 'put ''LDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUEx''@;'; put 'put ''LDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDQuNTQtMTQuNTZaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcu''@;'; put 'put ''NDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1iYWRnZSIvPlxuICAgICAgICAnKSx5LkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww''@;'; put 'put ''LDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZI''@;'; put 'put ''MjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEs''@;'; put 'put ''MC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDI2LjA3YTEsMSwwLDAsMC0uNzEu''@;'; put 'put ''MjlMMTksMjguOTRWMTYuNjhhMSwxLDAsMSwwLTIsMFYyOC45NGwtMi41Ny0yLjU3QTEsMSwwLDAsMCwxMywyNy43OGw1LDUsNS01YTEsMSwwLDAsMC0uNzEtMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDEx''@;'; put 'put ''LDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYu''@;'; put 'put ''MzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS44Nyw0LjY5YTguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAs''@;'; put 'put ''MCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyNS4wOWEzLDMsMCwwLDEsMCwyaDEuMjhhOCw4LDAsMCwwLDQuNTQt''@;'; put 'put ''MTQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVQbHVnaW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0y''@;'; put 'put ''LDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZabTIuNDEsN0EzLDMs''@;'; put 'put ''MCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g4VjE4aDIuODFBMy4xMywzLjEzLDAs''@;'; put 'put ''MCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjl2LS42SDI3VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwz''@;'; put 'put ''Mi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2guNjZMMjEsNi41''@;'; put 'put ''OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2''@;'; put 'put ''aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjQ1LDcuNDUsMCwwLDEtMi0uNTVWMThoMi44MUEzLjEzLDMuMTMsMCwwLDEsMzMsMjAuNjksMywzLDAsMCwxLDMyLjIyLDIzLDMsMywwLDAsMSwzMCwyNEgyN3Y3LjgzSDRWMjVINWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4x''@;'; put 'put ''NSwwLDAsMCw0LjgxLDE1SDRWOC44M2g5VjdhMywzLDAsMCwxLDEtMi4yMkEzLDMsMCwwLDEsMTYuMzEsNCwzLjEzLDMuMTMsMCwwLDEsMTksNy4xOVY4LjgzaDQuMDZhNy40NCw3LjQ0LDAsMCwxLS41MS0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRh''@;'; put 'put ''MiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAs''@;'; put 'put ''MCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMSw2LjU5QTUuMTIsNS4xMiwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAs''@;'; put 'put ''MSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjUsNy41LDAsMCwxLTYuNDUtNi41OUgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIs''@;'; put 'put ''MiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIv''@;'; put 'put ''PlxuICAgICAgICAnKSx5LkNsclNoYXBlRmxvcHB5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDEx''@;'; put 'put ''YTIsMiwwLDAsMC0yLDJ2OEg2VjZoNHY2YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkgxMlY2SDI2LjUxTDMwLDkuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41aDBWMzBIMjdWMjJh''@;'; put 'put ''MiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTEuNjhsLS40My0uM0gxMlY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI1LDMwSDExVjIySDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjRWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwyaDcuMzVhMy41NCwz''@;'; put 'put ''LjU0LDAsMCwxLS43Ny0ySDEyVjZoOS4yOWwxLjE1LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjM2LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY4Ljc4Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCww''@;'; put 'put ''LDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaTTI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjZBMiwyLDAsMCwxLDI0LDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Niw3''@;'; put 'put ''LjQ2LDAsMCwxLTQtMS4xOEEyLDIsMCwwLDEsMjQsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2NkgyNS41NGE3LjQ1LDcuNDUsMCwwLDEtMi43Ni04SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVa''@;'; put 'put ''TTI2LDMwSDEwVjIxLjVBMS41LDEuNSwwLDAsMSwxMS41LDIwaDEzQTEuNSwxLjUsMCwwLDEsMjYsMjEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2Nmg2LjU4QTMuNjcsMy42Nyww''@;'; put 'put ''LDAsMSwxOSw5Ljg5TDIyLjQ1LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1''@;'; put 'put ''LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVDb21wdXRlcj0oMCxnLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAy''@;'; put 'put ''NC40IDEwLjYgMjUuOTggOSA4IDkgOCAyMi44OCA5LjYgMjIuODgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDMwVjIzaDJWNi41QTEuNSwxLjUsMCwwLDAsMzAuNSw1SDUuNUExLjUsMS41LDAsMCwwLDQs''@;'; put 'put ''Ni41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgz''@;'; put 'put ''LjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIu''@;'; put 'put ''NiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuNiwyMi44OFYxMC42aDkuMTRBMy42NCwzLjY0LDAsMCwxLDE5LDkuODlMMTkuNTYsOUg4VjIyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDdIMjAuNzFsMS4xNS0ySDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMzAiIHk9IjE1LjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjcuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0''@;'; put 'put ''LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMSwyNXYzLjRBMi42LDIuNiwwLDAsMCwzLjYsMzFIMzIuMzRhMi42LDIuNiwwLDAsMCwyLjYtMi42VjI1Wm0zMiwzLjRhLjYuNiwwLDAsMS0uNi42SDMuNTZhLjYuNiwwLDAsMS0uNi0uNlYyNi41M2g5Ljk1YTEuNjQsMS42''@;'; put 'put ''NCwwLDAsMCwxLjUsMWg3LjEzYTEuNjQsMS42NCwwLDAsMCwxLjUtMUgzM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjA3LTFINS41QTEu''@;'; put 'put ''NSwxLjUsMCwwLDAsNCw2LjVWMjNINlY3SDIyLjU3QTcuNTIsNy41MiwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjIzaDJWMTMuMjJBNy40OSw3''@;'; put 'put ''LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDhWMjIuODhIOS42VjEwLjZIMjQuMDhBNy40OSw3LjQ5LDAsMCwxLDIzLjEzLDlaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNywxMEgyOVYyNGgzVjcuNTdBMS41NCwxLjU0LDAsMCwwLDMwLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjkiIHk9IjE1LjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjguNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMTlMMTksOS44OSwyMS4yOSw2SDUuNUExLjU0LDEuNTQsMCwwLDAsNCw3LjU3VjI0SDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUs''@;'; put 'put ''MjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjMuNjZBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMmE3LjE0LDcuMTQsMCwwLDEtMywuMlYyNGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZURpc3BsYXk9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMiwyNUg0VjVIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgOC43NiAyOC4xMyA4Ljc2IDI5Ljk0IDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyA3LjcgOC43NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwx''@;'; put 'put ''LDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRW''@;'; put 'put ''MjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI1SDRWNUgyMS44N0wyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEu''@;'; put 'put ''NSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcuNyAyMyA3LjcgOC43NiAxOS43IDguNzYgMjAuNjIgNy4xNiA2LjEgNy4x''@;'; put 'put ''NiA2LjEgMjMgNy43IDIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEz''@;'; put 'put ''LjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45''@;'; put 'put ''MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi4xLDIzSDcuN1Y4Ljc2SDIzYTcuNDQsNy40NCwwLDAsMS0uNDMtMS42SDYuMVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjI1SDRWNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAs''@;'; put 'put ''MCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiBy''@;'; put 'put ''PSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEs''@;'; put 'put ''MCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwy''@;'; put 'put ''LDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMSwyMS44M0g1VjdIMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYs''@;'; put 'put ''MzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxdjYuNDNINVY3SDIwLjcxTDIzLDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjE1LjM4''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41''@;'; put 'put ''MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzdjguNDFINVY3SDIyLjU3YTcuMjksNy4yOSwwLDAsMSwuNTUtNEgzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTIuMzRBNy40NCw3LjQ0LDAsMCwxLDMxLDEz''@;'; put 'put ''LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVRlcm1pbmFsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhI''@;'; put 'put ''MzJWMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cG9seWdvbiBwb2ludHM9IjcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5''@;'; put 'put ''PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4''@;'; put 'put ''IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI5SDRWMTAuOEgxOC42OEEzLjY2LDMuNjYsMCwwLDEsMTks''@;'; put 'put ''OS44OWwuNC0uNjlINFY3SDIwLjcxbDEuMTUtMkg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwb2x5Z29uIHBvaW50cz0iNyAyNC4xMSAxNi42IDE5LjcgMTYuNiAxNy44OSA3IDEzLjQ4IDcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMiwxMy4yMlYyOUg0VjEwLjhIMjQuMjRhNy41MSw3LjUxLDAsMCwxLTEtMS42SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIu''@;'; put 'put ''MzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk02LjgsMTUuODFWMTMuMTdsMTAsNC41OXYy''@;'; put 'put ''LjA4bC0xMCw0LjU5VjIxLjc4bDYuNTEtM1pNMjMuNCwyNS40SDE3VjIzaDYuNFpNNCw5LjJWN0gzMlY5LjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5''@;'; put 'put ''LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEu''@;'; put 'put ''MTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02Ljc4LTQuM0g0VjdI''@;'; put 'put ''MjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi44LDE5LjgzbC0xMCw0LjU5VjIxLjc4bDYuNTEtMy02''@;'; put 'put ''LjUxLTNWMTMuMTdsMTAsNC41OVptNi42LDUuNTdIMTdWMjNoNi40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUNvZGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41''@;'; put 'put ''Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtNi41My00LjQ1QTEs''@;'; put 'put ''MSwwLDEsMCwyMi41NSwxNGw1LjMyLDMuNjMtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCwwLTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5Ljgz''@;'; put 'put ''YS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC41NiwxMS42MiwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OEwxOS43MywxNC40YTMuNTksMy41OSwwLDAs''@;'; put 'put ''MS0xLjE2LTIuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtMi0xLjM4SDI0LjY0bDMuMjQsMi4yMS01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42''@;'; put 'put ''NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMz''@;'; put 'put ''LjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDkuODNhLjkuOSwwLDAsMC0xLjA5LjY2TDE1LjQxLDI0LjI5YS45LjksMCwwLDAsLjY2LDEuMDlsLjIyLDBhLjkuOSwwLDAs''@;'; put 'put ''MCwuODctLjY4bDMuNDQtMTMuODFBLjkuOSwwLDAsMCwxOS45NCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQXBwbGljYXRpb249KDAsZy5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMy''@;'; put 'put ''djQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIs''@;'; put 'put ''NFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVCYXR0ZXJ5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4w''@;'; put 'put ''NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjEyLDRIMjNWMy41OEExLjU4LDEuNTgsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAs''@;'; put 'put ''MCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlY1Ljg4QTEuODgsMS44OCwwLDAsMCwyNS4xMiw0Wk0yNSwzMkgxMVY2aDRWNGg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNFYzMkgxMVY2aDRWNGg2VjZoLjI4bDEuNjQtMi44NUExLjU3LDEuNTcsMCwwLDAsMjEuNDIsMkgxNC41''@;'; put 'put ''OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjUsMTEuNThWMzJIMTFWNmg0VjRoNlY2SDIyLjVBNy40Nyw3LjQ3LDAsMCwxLDIzLDMuMzgsMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEu''@;'; put 'put ''ODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTIuODdBNy41LDcuNSwwLDAsMSwyNSwxMS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yMiw0VjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0di0yOEExLjA5LDEuMDksMCwwLDAsMjYsNFpNMjAuMjYsMjUuNDRhMS4y''@;'; put 'put ''LDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQs''@;'; put 'put ''MjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY2LDMuNjYsMCwwLDEsMjAuNTUsMTVsMi43Niw0Ljc5TDE2LjksMTguN2wzLjM2LDYuNzNhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIu''@;'; put 'put ''MDgtMS4ybC4wOS4xNUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwyMi40NSw0SDIyVjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0VjE1''@;'; put 'put ''LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2''@;'; put 'put ''YTEsMSwwLDAsMCwxLS45NFYxMi44N0E3LjUsNy41LDAsMCwxLDIyLjUsNlpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZU1vYmlsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAs''@;'; put 'put ''MCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlVGFibGV0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv''@;'; put 'put ''PlxuICAgICAgICAnKSx5LkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJabTAsMmExMiwxMiwwLDAsMSw4LjQ0LDMuNDhjMCwuMzMsMCwuNjYsMCwxQTE4LjUxLDE4LjUxLDAsMCwwLDE0LDguNTNhMi4zMywyLjMz''@;'; put 'put ''LDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDE3Ljc1LDRabS0zLDUuODdBMTcsMTcsMCwwLDEsMjUuOTIsMTBhMTYuOSwxNi45LDAsMCwxLTMuMTEsNywyLjI4LDIuMjgsMCwwLDAtMi41''@;'; put 'put ''OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzdabS00LTMuNmMwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0''@;'; put 'put ''LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41''@;'; put 'put ''MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4z''@;'; put 'put ''NCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhabTYuNTEtOC45YTIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC40LDE4LjQsMCww''@;'; put 'put ''LDAsMy4zOS03LjM3cS43NS4zNSwxLjQ4Ljc4YTEyLDEyLDAsMCwxLC40Miw4LjJBMTYsMTYsMCwwLDEsMjQuMjcsMTkuMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSww''@;'; put 'put ''LDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNGgtMmMwLC4yLDAsLjQsMCwuNjFhMTIsMTIsMCwwLDEtLjUzLDMuNTIsMTYs''@;'; put 'put ''MTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4Ljg3LDE4Ljg3LDAsMCwwLDEuNjItMi41MkgyMy44M2ExNy4yOSwxNy4yOSwwLDAsMS0xLDEuNTQsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMs''@;'; put 'put ''Mi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3QTE3LjA4LDE3LjA4LDAsMCwxLDE5LjU2LDlsLjg3LTEuNTFhMTguNTksMTguNTksMCwwLDAtNi4zOSwxLDIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS44''@;'; put 'put ''OCwxMS44OCwwLDAsMSwyMiw0Ljc5TDIzLDNBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMCwwLDMxLjc2LDE2QzMxLjc2LDE1LjgsMzEuNzQsMTUuNiwzMS43MywxNS40Wm0tMjEtOS4xM2MwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3''@;'; put 'put ''LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYu''@;'; put 'put ''OSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwx''@;'; put 'put ''MC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEs''@;'; put 'put ''MTcuNzUsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwx''@;'; put 'put ''LDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjUsMTMuMzVhNy41NCw3LjU0LDAsMCwxLTEuNS4xNWwtLjUxLDBhMTEuOTEsMTEu''@;'; put 'put ''OTEsMCwwLDEtLjI1LDYsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4LjU5LDE4LjU5LDAsMCwwLDIuNzgtNS4xOCw3LjQ5LDcuNDksMCwwLDEtMS4zMS0uODIsMTcsMTcsMCwwLDEtMi42MSw1LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjct''@;'; put 'put ''LjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43NywxNywxNywwLDAsMSw4LjUzLS42Miw3LjQzLDcuNDMsMCwwLDEtLjU2LTEuNTlBMTguNTYsMTguNTYsMCwwLDAsMTQsOC41M2EyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTIt''@;'; put 'put ''LjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuOTIsMTEuOTIsMCwwLDEsMjIuNTcsNWE3LjQ1LDcuNDUsMCwwLDEsLjUzLTJBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwYTE0LDE0LDAsMSwwLDI3LjY4LTRaTTEwLjc2LDYuMjdj''@;'; put 'put ''MCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0''@;'; put 'put ''LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAs''@;'; put 'put ''MS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAs''@;'; put 'put ''MCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE0LjcyLDkuODdhMi4yNSwyLjI1LDAsMCwxLS40NywxLjc3LDE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE2LjksMTYuOSwwLDAsMCwzLjExLTdBMTcsMTcsMCwwLDAsMTQuNzIs''@;'; put 'put ''OS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJaTTI4LjEsMjEuMDlhMTcuNDEsMTcu''@;'; put 'put ''NDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYu''@;'; put 'put ''OTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEy''@;'; put 'put ''LDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwx''@;'; put 'put ''LjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjUxLDE4LjUxLDAsMCwxLDEyLjExLS4wN2MwLS4zMiwwLS42NSwwLTFoMGExMiwxMiwwLDAsMSwyLjYyLDMuODVoMHEtLjczLS40My0xLjQ4LS43OGExOC40LDE4LjQsMCwwLDEtMy4zOSw3LjM3LDIuMzMsMi4zMywwLDAsMSwu''@;'; put 'put ''MzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNEgyNS41NmExOC44NywxOC44NywwLDAsMS0xLjYyLDIuNTIsMi4zMywyLjMzLDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCww''@;'; put 'put ''LDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0z''@;'; put 'put ''LjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgt''@;'; put 'put ''LjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEy''@;'; put 'put ''LDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjU5LDE4LjU5LDAsMCwxLDYuMzktMUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCww''@;'; put 'put ''LDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjYsMTEuNjRhMTYsMTYsMCwwLDAsNC45Myw1LjIz''@;'; put 'put ''Yy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcuMjksMTcuMjksMCwwLDAsMS0xLjU0aC0xLjZBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOWExNy4wOCwxNy4wOCwwLDAsMC00Ljg0Ljg4LDIuMjUsMi4yNSwwLDAsMS0uNDcsMS43N1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAs''@;'; put 'put ''MC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTUsNy40Niw3LjQ2LDAsMCwxLTMuMjgtLjc2LDE4LjU5LDE4LjU5LDAsMCwxLTIu''@;'; put 'put ''NzgsNS4xOCwyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNIMjguMWExNy40MSwxNy40MSwwLDAsMS00LjMyLS41NiwyLjI5LDIuMjksMCwwLDEtMywuNjIsMTguNDMsMTguNDMsMCwwLDEtNywzLjUsMi4zNCwyLjM0''@;'; put 'put ''LDAsMCwxLTEuNTcsMS43OWwtLjI5LjA2YTExLjkzLDExLjkzLDAsMCwxLTMuMzktMi44bC42NiwwYTIuMzMsMi4zMywwLDAsMSw0LjM3LS41OEExNi45NCwxNi45NCwwLDAsMCwxOS43OCwyMGEyLjMyLDIuMzIsMCwwLDEtLjE4LTEuMTdjLS40Mi0uMjQtLjg0LS40OS0xLjI1LS43NkExNy41''@;'; put 'put ''MywxNy41MywwLDAsMSwxMywxMi40N2EyLjMxLDIuMzEsMCwwLDEtMi4yOC0uNjMsMjcuMzEsMjcuMzEsMCwwLDAtNSw0Ljc0YzAtLjIsMC0uMzksMC0uNTdhMTIsMTIsMCwwLDEsLjE0LTEuNzMsMTguNzUsMTguNzUsMCwwLDEsNC4yLTMuOCwyLjI4LDIuMjgsMCwwLDEsMS4xLTIuMjVjLS4x''@;'; put 'put ''Mi0uNDMtLjI0LS44Ni0uMzMtMS4zLDAtLjE0LDAtLjI5LS4xMS0uNjRhMTIsMTIsMCwwLDEsMS4zNy0uODdjLjEuNTkuMTQuOS4yMSwxLjIxcy4yLjg1LjMyLDEuMjdsLjI1LDBBMi4zMywyLjMzLDAsMCwxLDE0LDguNTNhMTguNTYsMTguNTYsMCwwLDEsOC42NS0uODcsNy40NSw3LjQ1LDAs''@;'; put 'put ''MCwxLC40MS00LjU5QTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43''@;'; put 'put ''Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNywxNywwLDAsMCwyLjYxLTUsNy41Miw3LjUyLDAsMCwxLTIuMTYtMi42N0ExNywxNywwLDAsMCwxNC43Miw5Ljg3''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUsMjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEs''@;'; put 'put ''MTcuNDQsMTcuNDQsMCwwLDEtMS44Mi42MiwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNDcsNSwyLjc0''@;'; put 'put ''LDIuNzQsMCwwLDEsLjIxLS4yNGwuOTUtLjkxYTE2LjksMTYuOSwwLDAsMS00LjM1LTQuNzksMi4yNywyLjI3LDAsMCwwLC4zNS0xLjJjMC0uMDcsMC0uMTQsMC0uMjJBMTcuNjksMTcuNjksMCwwLDEsMjUsMTFhMTcuNDksMTcuNDksMCwwLDEtMS4xNSwzLjM0bC4xOSwwaDEuNTZhMTksMTks''@;'; put 'put ''MCwwLDAsLjkxLTIuNzJjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTQsMTEuOTQsMCwwLDEsMSw0LjA5bDAsMEEyLjc3LDIuNzcsMCwwLDEsMzAsMTZhMi43MywyLjczLDAsMCwxLC42OC4xQTE0LDE0LDAsMSwwLDE2LjA4LDMxYTIuNzIsMi43MiwwLDAsMSwwLTJBMTEuOTMsMTEuOTMsMCww''@;'; put 'put ''LDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05''@;'; put 'put ''LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMjEuMTlBMy44NCwzLjg0LDAsMSwwLDI4Ljg4LDI1LDMuODcsMy44NywwLDAsMCwyNSwyMS4xOVptMCw2LjA4QTIuMjQsMi4yNCwwLDEsMSwyNy4yOCwyNSwyLjI2LDIuMjYsMCwwLDEsMjUsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4xNywyNC4xNGExLjE0LDEuMTQsMCwwLDAtLjctMS4xbC0xLjU2LS40NnEtLjExLS4zMi0uMjYtLjYzbC43Mi0xLjMzYTEuMTQsMS4xNCwwLDAsMC0uMjEtMS4zNGwtMS4zNC0xLjMyYTEuMTQsMS4x''@;'; put 'put ''NCwwLDAsMC0xLjM0LS4ybC0xLjM0LjcxYTcuMjgsNy4yOCwwLDAsMC0uNjctLjI4TDI3LDE2LjcxYTEuMTQsMS4xNCwwLDAsMC0xLjA4LS43NkgyNGExLjE0LDEuMTQsMCwwLDAtMS4wOC44bC0uNDQsMS40M2E3LjMyLDcuMzIsMCwwLDAtLjY4LjI4bC0xLjMyLS43YTEuMTQsMS4xNCwwLDAs''@;'; put 'put ''MC0xLjMzLjE5bC0xLjM3LDEuMzFhMS4xNCwxLjE0LDAsMCwwLS4yMSwxLjM1bC43LDEuMjhxLS4xNi4zMi0uMjguNjVMMTYuNTgsMjNhMS4xMywxLjEzLDAsMCwwLS44MSwxLjA5djEuODdBMS4xNCwxLjE0LDAsMCwwLDE2LjU5LDI3bDEuNDcuNDRxLjEyLjMyLjI4LjY0bC0uNzIsMS4zNWEx''@;'; put 'put ''LjE0LDEuMTQsMCwwLDAsLjIsMS4zNWwxLjM0LDEuMzJhMS4xNCwxLjE0LDAsMCwwLDEuMzQuMmwxLjM3LS43MnEuMzEuMTQuNjMuMjZsLjQ0LDEuNDdhMS4xNCwxLjE0LDAsMCwwLDEuMDkuOGgxLjlBMS4xNCwxLjE0LDAsMCwwLDI3LDMzLjMxbC40NC0xLjQ3Yy4yMS0uMDcuNDItLjE2LjYy''@;'; put 'put ''LS4yNWwxLjM4LjczYTEuMTQsMS4xNCwwLDAsMCwxLjMzLS4ybDEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAsLjIxLTEuMzVsLS43My0xLjM0cS4xNC0uMy4yNS0uNmwxLjUtLjQ0QTEuMTMsMS4xMywwLDAsMCwzNC4xNywyNlptLTEuNiwxLjUtMiwuNTgtLjEyLjQyQTUuNTUsNS41NSwwLDAs''@;'; put 'put ''MSwzMCwyNy43M2wtLjIxLjM4LDEsMS43OS0uODYuODQtMS44Mi0xLS4zNy4yYTUuNzgsNS43OCwwLDAsMS0xLjEyLjQ2bC0uNDIuMTItLjU5LDJIMjQuMzhsLS41OS0xLjk1LS40Mi0uMTJBNS44Niw1Ljg2LDAsMCwxLDIyLjI0LDMwbC0uMzctLjItMS44MSwxLS44Ni0uODUsMS0xLjgyLS4y''@;'; put 'put ''Mi0uMzhhNS42LDUuNiwwLDAsMS0uNDktMS4xM2wtLjEzLS40MS0xLjk1LS41OFYyNC40MmwxLjk0LS41OC4xMi0uNDFhNS41Myw1LjUzLDAsMCwxLC40OS0xLjE0bC4yMi0uMzktMS0xLjczLjg3LS44NCwxLjc3Ljk0LjM4LS4yMWE1LjgsNS44LDAsMCwxLDEuMTctLjQ5bC40MS0uMTIuNTkt''@;'; put 'put ''MS45MWgxLjIzbC41OCwxLjkuNDEuMTJhNS43OSw1Ljc5LDAsMCwxLDEuMTYuNDhsLjM4LjIxLDEuOC0uOTUuODYuODUtMSwxLjc3LjIxLjM4YTUuNTMsNS41MywwLDAsMSwuNDcsMS4xM2wuMTIuNDIsMS45My41N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDIzLjYzLDMyLDIzYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuOSwxNy44NmEuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxYTcsNywwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM3''@;'; put 'put ''LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFMMjAsMTcuOGEuMzcuMzcsMCwwLDAtLjQ0LjA3TDE4LDE5LjMxYS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcsNywwLDAsMCwxOC4zNSwyM2wtMiwuNjFhLjM3LjM3LDAs''@;'; put 'put ''MCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFBNyw3LDAsMCwwLDE5LDI4LjM3bC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0bDEuNDUsMS40NWEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAs''@;'; put 'put ''LjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OEE3LDcsMCwwLDAsMzEuOTUsMjdsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0u''@;'; put 'put ''MzVWMjRBLjM3LjM3LDAsMCwwLDM0LDIzLjYzWm0tOC44Myw0LjcyQTMuMzMsMy4zMywwLDEsMSwyOC41MywyNSwzLjMzLDMuMzMsMCwwLDEsMjUuMTksMjguMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjg1''@;'; put 'put ''LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjgsMTkuNzEsMTkuNzEsMCwwLDAsMS44OS0uNlYyMy45NWEyLDIsMCwwLDEsLjA5LS41NSwxNy40MiwxNy40MiwwLDAsMS0yLjE3Ljc4LDIuMjgsMi4yOCwwLDAsMC00LjI4LjYzbC0uNDUsMGgwYTExLjkzLDExLjkzLDAsMCwxLTIuODgt''@;'; put 'put ''Ny4yNywxNy43OSwxNy43OSwwLDAsMSw1LTQuNzIsMi4yMywyLjIzLDAsMCwwLDIuMjkuNTYsMTguNTIsMTguNTIsMCwwLDAsNC42NSw1LjA5LDEuOTMsMS45MywwLDAsMSwuMjMtLjMybC44OS0uODdhMTYuODksMTYuODksMCwwLDEtNC40OS00Ljg5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4y''@;'; put 'put ''YzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNSwxLjk0LDEuOTQsMCwwLDEsLjMxLS4wNWgxLjQ1YTE5LjA2LDE5LjA2LDAsMCwwLC45LTIuN2MuNDMuMTkuODQuNDEsMS4yNi42NGExMS45MywxMS45MywwLDAsMSwx''@;'; put 'put ''LDQuNjNsMS0uNTFhMiwyLDAsMCwxLC45Mi0uMjNoLjA4QTE0LDE0LDAsMSwwLDE2LjQ0LDMxYTEuOTQsMS45NCwwLDAsMSwuMTItMS40NmwuMjgtLjUzaC0uMDdBMTEuOTEsMTEuOTEsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUx''@;'; put 'put ''LS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcs''@;'; put 'put ''MS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk0z''@;'; put 'put ''MiwyN0g0VjE5LjA2TDcuMTMsOUgyOC44N0wzMiwxOS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdp''@;'; put 'put ''ZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0''@;'; put 'put ''PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs''@;'; put 'put ''ZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0i''@;'; put 'put ''MjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3''@;'; put 'put ''LDMzLDE1LjRIMzAuODZMMzIsMTkuMDZWMjdINFYxOS4wNkw3LjEzLDlIMTkuNTZsMS4xNS0ySDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwx''@;'; put 'put ''OC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43''@;'; put 'put ''OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIx''@;'; put 'put ''LjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3LjExIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIz''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjIzIiB5PSIxOCIgd2lkdGg9IjIzLjY5IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3bC0xLjY1LTUuMzJhNy40OSw3LjQ5LDAsMCwxLTIsLjMzTDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5aDE2YTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDgu''@;'; put 'put ''NDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTEsMTguNDcsMzAuNzgsOC40MUEyLDIsMCwwLDAs''@;'; put 'put ''MjguODcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSww''@;'; put 'put ''aC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5''@;'; put 'put ''Ljg5TDIwLjcxLDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZhMiwyLDAsMCwwLS4wOS0uNTlaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSww''@;'; put 'put ''aC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEz''@;'; put 'put ''LDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFs''@;'; put 'put ''ZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEzLjE1QTcuNDksNy40OSwwLDAsMSwyMi41Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiww''@;'; put 'put ''LDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFWMjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVSb3V0ZXI9KDAsZy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggZD0iTTE4LDE0Ljg3bDUuMTEtNS4xNGExLDEsMCwxLDAtMS40Mi0xLjQxTDE5LDExVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNS44NSwxOWg3LjY5YTEsMSwwLDAsMCwwLTJINS44NWwyLjcxLTIuNjlhMSwxLDAsMSwwLTEuNDEtMS40MkwyLDE4bDUuMTQsNS4xMWExLDEsMCwxLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM4LDE1LjRIMjguNTRMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40Mkwz''@;'; put 'put ''NCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0Ljg3bDEuMTUtMS4xNi0uMS0uMTVBMy42OCwzLjY4LDAsMCwxLDE5LDEwVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwx''@;'; put 'put ''NC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz''@;'; put 'put ''My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxLjY3YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDEuNjdaTTEzLjg2LDkuOTJhLjguOCwwLDAsMSwxLjEzLDBsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY2LjE4TDIxLDkuOTJhLjgu''@;'; put 'put ''OCwwLDEsMSwxLjEzLDEuMTRMMTgsMTUuMTVsLTQuMTQtNC4xQS44LjgsMCwwLDEsMTMuODYsOS45MlpNMTAuMzIsMjEuNzRhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjEx''@;'; put 'put ''bDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4x''@;'; put 'put ''NCwyNS40MVptNC42Ny0zLjY2YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMi4yLTIuMTRhLjguOCwwLDEsMSwxLjEyLTEuMTRMMzEsMTcuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMzLjgyLDE1LjM5SDI4LjY4TDMxLDE3LjY3bC00LjE5LDQuMDlhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0xLjUtMS40N0gyMi4yM2EzLjY4LDMuNjgsMCwwLDEtMy0xLjUxTDE4LDE1LjE1bC00''@;'; put 'put ''LjE0LTQuMUEuOC44LDAsMSwxLDE1LDkuOTJsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY0LjQ5QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5bDQuMjItNy4zMUExNiwxNiwwLDEsMCwzNCwxNy42NywxNiwxNiwwLDAsMCwzMy44MiwxNS4zOVptLTIzLjUsNi4zNWEuOC44LDAsMCwx''@;'; put 'put ''LTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAsMS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjgu''@;'; put 'put ''OCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAsMCwxLDIyLjE0LDI1LjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjIyLDEyLjc2QTcuNDksNy40OSwwLDAsMSwyMy4zMiwyLjZhMTYsMTYsMCwxLDAsOS45LDEwLjE3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44''@;'; put 'put ''LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIs''@;'; put 'put ''Mi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4''@;'; put 'put ''LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAg''@;'; put 'put ''JykseS5DbHJTaGFwZVZNPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMCwxMEgxN3YyaDh2NmgyVjEyaDNWMjZIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI4aDhhMiwyLDAsMCwwLDItMlYxMkEyLDIsMCwwLDAsMzAsMTBaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiww''@;'; put 'put ''LDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMS44N0wyMywzSDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNS4wMSIgeT0iMTUuNCIgd2lkdGg9IjEuOTkiIGhlaWdodD0iMi42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMCwxNS40VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwzMVYxN0gyMHY5SDE2VjIwSDE0djZhMiwyLDAsMCwwLDIsMmg0djNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMHYyaDEuNTdBMy42NywzLjY3LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTE3LDEyaDh2NmgyVjEyLjg3QTcuNTIsNy41MiwwLDAsMSwyMy42NiwxMEgxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjdWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTla''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDE3LjE5YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZoMi43MkwyMywzSDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE3LjE5LDEwYTIsMiwwLDAsMC0yLDJ2MS40SDE5QTMuNjgsMy42OCwwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMjEsMTUuNEEzLjU1LDMu''@;'; put 'put ''NTUsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUu''@;'; put 'put ''NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5''@;'; put 'put ''LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZI''@;'; put 'put ''MjIuOUE3LjQ1LDcuNDUsMCwwLDEsMjMuMTMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMu''@;'; put 'put ''NjYsMTBIMTcuMTlhMiwyLDAsMCwwLTIsMnYxLjRIMjBBMy42LDMuNiwwLDAsMSwyMy42LDE3djhIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI5LjZIMTcuMTlhMy42LDMuNiwwLDAsMS0zLjYtMy42VjIwaDEu''@;'; put 'put ''NnY2YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVWTVdBcHA9KDAsZy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAy''@;'; put 'put ''OCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE0IDMwIDYgMzAgNiAyMiA4IDIyIDggMjAgNCAyMCA0IDMyIDE2IDMyIDE2IDI4IDE0''@;'; put 'put ''IDI4IDE0IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwIDQgMjAgOCAyMiA4IDIyIDYgMzAgNiAzMCAxNCAyOCAxNCAyOCAxNiAzMiAxNiAzMiA0IDIwIDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0''@;'; put 'put ''aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2bDAtLjFWMTdoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMi40NSA0IDIwIDQgMjAgOCAyMC4xNCA4IDIyLjQ1IDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMjgiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjAuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBv''@;'; put 'put ''bHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTEiIHdp''@;'; put 'put ''ZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjIsNmguNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjBWOGgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTRIMjh2Mmg0VjEzLjIyQTcuNDksNy40OSww''@;'; put 'put ''LDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4YTcuNTMsNy41MywwLDAsMS0uNTgtLjU4SDE5djZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAg''@;'; put 'put ''ICcpLHkuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCww''@;'; put 'put ''LDAsMzIsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIu''@;'; put 'put ''MzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0i''@;'; put 'put ''MTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2''@;'; put 'put ''LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2QTMuNjYsMy42NiwwLDAsMSwxOC41NywxMkg3djEuNkgxOS4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMz''@;'; put 'put ''LjY4LDE1LjRIMzJ2MS4xNmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyOFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwy''@;'; put 'put ''LDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdo''@;'; put 'put ''dD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIyMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2''@;'; put 'put ''LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMiwxMy4yMnYzLjM0YTguNDEsOC40MSwwLDAsMSwyLDEuODF2LTZBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMi43''@;'; put 'put ''OGE3LjQ5LDcuNDksMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEy''@;'; put 'put ''LDIsMCwwLDEsMiwyVjE4LjM3YTguMzQsOC4zNCwwLDAsMC0xMy40OSw5Ljc5bC0uOTMsMS4xNFpNNywxMnYxLjZIMjRWMTJabTAsNS42SDE4VjE2SDdabTAsN0gxN1YyM0g3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4z''@;'; put 'put ''NywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjU5YTYuMzcsNi4zNywwLDEsMC0xMC43Nyw0LjU5bC0xLjk0LDIuMzcuOSwz''@;'; put 'put ''LjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3QTYuMzQsNi4zNCwwLDAsMCwzMy44MywyMy41OVptLTEwLjc0LDBhNC4zNyw0LjM3LDAsMSwxLDQuMzcsNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjMuMSwyMy41OVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOS4yNWE4LjM2LDguMzYsMCwwLDEsNC43NSwzdi0zWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4wNywxMy42SDdWMTJIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlMMjEuMjksNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMjUuNjYs''@;'; put 'put ''MTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTkuMDcsMTMuNlpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwy''@;'; put 'put ''MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00''@;'; put 'put ''LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3''@;'; put 'put ''LjUsMCwwLDEsMjIuNSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0QTguMzQsOC4zNCwwLDAsMSwzNCwxOC4zN3YtNkE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFptNi00SDdWMTJIMjRaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdl''@;'; put 'put ''IiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQXJjaGl2ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEsMSwwLDAsMCwxNCwyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMs''@;'; put 'put ''MCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEs''@;'; put 'put ''MjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVW''@;'; put 'put ''M2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwtMS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwxLDAtMmg2QTEsMSwwLDAsMSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42''@;'; put 'put ''NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEy''@;'; put 'put ''czAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAs''@;'; put 'put ''MSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVVbmFyY2hpdmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIs''@;'; put 'put ''MCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxOEg2VjE0aDlWMTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAsMCwxLS43OCwySDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMEgyMC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwx''@;'; put 'put ''MkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUuNmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40''@;'; put 'put ''MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBlQ29ubmVjdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAs''@;'; put 'put ''MCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIyLDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45''@;'; put 'put ''NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIx''@;'; put 'put ''LDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjIt''@;'; put 'put ''NUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVEaXNjb25uZWN0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAs''@;'; put 'put ''MCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2''@;'; put 'put ''LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4x''@;'; put 'put ''NywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2''@;'; put 'put ''Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVMaW5rPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwx''@;'; put 'put ''LTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEuNzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45''@;'; put 'put ''MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcuNiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcu''@;'; put 'put ''ODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRhNCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0x''@;'; put 'put ''LjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAg''@;'; put 'put ''JykseS5DbHJTaGFwZVVubGluaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01''@;'; put 'put ''LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAs''@;'; put 'put ''NS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQuNzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSx5LkNsclNoYXBl''@;'; put 'put ''Q2xvdWROZXR3b3JrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41''@;'; put 'put ''OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEsMTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0yLjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUNsb3VkU2NhbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEuMTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwz''@;'; put 'put ''LjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIuMzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwy''@;'; put 'put ''LjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4xNiw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJI''@;'; put 'put ''MTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwuMTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIwLjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4''@;'; put 'put ''LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEu''@;'; put 'put ''ODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEuODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4y''@;'; put 'put ''NSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUtLjg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCwwLDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4''@;'; put 'put ''LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4yNWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3''@;'; put 'put ''QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZURlcGxveT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwxLDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdB''@;'; put 'put ''MSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIxLDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3''@;'; put 'put ''LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUhlbGl4PSgwLGcuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44OCwxMy4wN2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMSwxLDEsMS41Mkw5LjM3LDEyLjkyQS45LjksMCwwLDEsOC44OCwxMy4wN1oiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTMuMjUsMTUuMTFhLjkuOSwwLDAsMS0uNDktMS42NkwxOCwxMC4wOGEuOS45LDAsMSwxLDEsMS41MkwxMy43NCwxNUEuOS45LDAsMCwxLDEzLjI1LDE1LjExWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOS43MiwzMC4yM2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMCwxLDEsMS41MkwyMC4yLDMwLjA5QS45LjksMCwwLDEsMTkuNzIsMzAuMjNaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LjkyLDI1Ljk0YS45LjksMCwwLDEtLjQ5LTEuNjZsNS4yNS0zLjM3YS45LjksMCwxLDEsMSwxLjUxTDE5LjQsMjUuOEEuODkuODksMCwwLDEsMTguOTIsMjUuOTRaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTIxLjU2LDUuNjlhMy41OSwzLjU5LDAsMCwxLC4xNSwzLjUzTDE4LjgzLDE1aDIuMjVsMi40My00Ljg3YTUuNjEsNS42MSwwLDAsMC01LTguMTRIMTMuMjZsLTEsMmg2LjIyQTMuNjEsMy42MSwwLDAsMSwy''@;'; put 'put ''MS41Niw1LjY5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi45MSwyMC43OEE1LjUzLDUuNTMsMCwwLDAsMjcuNjYsMTdIOS4zMWEzLjU0LDMuNTQsMCwwLDEtMy41Ni0zLjY3LDMuNjEsMy42MSwwLDAsMSwu''@;'; put 'put ''NDItMS41NGw0LjI2LTguNDlhMSwxLDAsMSwwLTEuNzktLjlMNC40LDEwLjg0QTUuNjcsNS42NywwLDAsMCw0LDE1LjIyLDUuNTMsNS41MywwLDAsMCw5LjI4LDE5aDcuNmwtMy40NCw2Ljg3YTUuNjQsNS42NCwwLDAsMCwxLjUsNi45MkE1LjM4LDUuMzgsMCwwLDAsMTguNDEsMzRoNS4yNWwx''@;'; put 'put ''LTJIMTguNDNhMy41OCwzLjU4LDAsMCwxLTMuMjItNS4yMUwxOS4xMSwxOWg4LjU0YTMuNDIsMy40MiwwLDAsMSwyLjE1LjcxLDMuNTcsMy41NywwLDAsMSwxLDQuNDNsLTQuMTIsOC4yMmExLDEsMCwxLDAsMS43OS45bDQuMDYtOC4xQTUuNjcsNS42NywwLDAsMCwzMi45MSwyMC43OFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxOS42M0E1LjU1LDUuNTUsMCwwLDAsMjcuNDIsMTdIMTAuMDZhNC4zNiw0LjM2LDAsMCwxLTMuNjctMiw0LjA3LDQuMDcsMCwwLDEtLjE5LTQuMTNsMy42Mi03LDEuNDIs''@;'; put 'put ''MS42My0yLjc0LDUuMyw4Ljg0LTUuNjZhLjkxLjkxLDAsMCwxLDEsMS41M0w3Ljg0LDEzLjM4YTIuMTMsMi4xMywwLDAsMCwuMjQuNTIsMi4yOCwyLjI4LDAsMCwwLDEuNjUsMUwxOC4xMSw5LjVhLjkxLjkxLDAsMCwxLDEsMS41MkwxMywxNC45NEgyMC44bDIuNDEtNC44MmE1LjYsNS42LDAs''@;'; put 'put ''MCwwLTUtOC4xMkg5YTEsMSwwLDAsMC0uOS41NkwzLjg4LDEwLjg5YTUuNiw1LjYsMCwwLDAsNSw4LjEyaDcuNjVsLTMuNDMsNi44N2E1LjYsNS42LDAsMCwwLDUsOC4xMmg5LjI4YTEsMSwwLDAsMCwuOTMtLjY1bDQuMTQtOC4yNEE1LjU4LDUuNTgsMCwwLDAsMzIuMTYsMTkuNjNaTTE3Ljc1''@;'; put 'put ''LDI1LjU3QS45MS45MSwwLDAsMSwxOCwyNC4zMWw2LTMuODhBLjkxLjkxLDAsMSwxLDI1LDIybC02LDMuODhhLjkxLjkxLDAsMCwxLTEuMjYtLjI3Wk0yOSwyNC4zNGwtOSw1Ljc4YS45MS45MSwwLDEsMS0xLTEuNTNsOS01Ljc4YS45MS45MSwwLDEsMSwxLDEuNTNaIi8+XG4gICAgICAgICcp''@;'; put 'put ''LHkuQ2xyU2hhcGVGbGFzaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAsMCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwz''@;'; put 'put ''NEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0yLjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4w''@;'; put 'put ''NUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRM''@;'; put 'put ''NC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMxLDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQu''@;'; put 'put ''NzYsNC43NiwwLDEsMCw0Ljc2LDQuNzZBNC43Niw0Ljc2LDAsMCwwLDE0LjY4LDMuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQyLDMxLjY4QTIuMTQsMi4xNCwwLDAsMSwxNS44LDMwSDRWMjQuMjJh''@;'; put 'put ''MTQuODEsMTQuODEsMCwwLDEsMTEuMDktNC42OGwuNzIsMGEyLjIsMi4yLDAsMCwxLC42Mi0xLjg1bC4xMi0uMTFjLS40NywwLTEtLjA2LTEuNDYtLjA2QTE2LjQ3LDE2LjQ3LDAsMCwwLDIuMiwyMy4yNmExLDEsMCwwLDAtLjIuNlYzMGEyLDIsMCwwLDAsMiwySDE2LjdaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxNi4yOWEuMzcuMzcsMCwwLDEsLjE1LDAsLjQyLjQyLDAsMCwwLS4xNSwwWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjY4LDIzLjMybC0yLS42MWE3LjIxLDcuMjEsMCwwLDAtLjU4LTEuNDFsMS0xLjg2QS4zOC4zOCwwLDAsMCwzMiwxOWwtMS40NS0xLjQ1YS4zNi4zNiwwLDAsMC0uNDQtLjA3bC0xLjg0LDFhNy4xNSw3LjE1LDAsMCwwLTEuNDMtLjYxbC0uNjEtMmEuMzYuMzYs''@;'; put 'put ''MCwwLDAtLjM2LS4yNEgyMy44MmEuMzYuMzYsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42bC0xLjgyLTFhLjM1LjM1LDAsMCwwLS40My4wN0wxNy42OSwxOWEuMzguMzgsMCwwLDAtLjA2LjQ0bDEsMS44MkE2Ljc3LDYuNzcsMCwwLDAsMTgsMjIuNjlsLTIsLjZhLjM2LjM2''@;'; put 'put ''LDAsMCwwLS4yNi4zNXYyLjA1QS4zNS4zNSwwLDAsMCwxNiwyNmwyLC42MWE3LDcsMCwwLDAsLjYsMS40MWwtMSwxLjkxYS4zNi4zNiwwLDAsMCwuMDYuNDNsMS40NSwxLjQ1YS4zOC4zOCwwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMmEuMzguMzgsMCww''@;'; put 'put ''LDAsLjM1LjI2aDIuMDVhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTIuMDVhNi45Miw2LjkyLDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzYuMzYsMCwwLDAsLjQzLS4wN0wzMiwzMC40QS4zNS4zNSwwLDAsMCwzMiwzMGwtMS0xLjg4YTcsNywwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzYuMzYs''@;'; put 'put ''MCwwLDAsLjI2LS4zNVYyMy42N0EuMzYuMzYsMCwwLDAsMzMuNjgsMjMuMzJaTTI0Ljg1LDI4YTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzNBMy4zNCwzLjM0LDAsMCwxLDI0Ljg1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIxNC42NyIgY3k9IjguMyIgcj0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40NCwzMS44MmEyLjE1LDIuMTUsMCwwLDEtLjM4LTIuNTVsLjUzLTEtMS4wOS0uMzNBMi4xNCwyLjE0LDAs''@;'; put 'put ''MCwxLDE0LDI1Ljg0VjIzLjc5YTIuMTYsMi4xNiwwLDAsMSwxLjUzLTIuMDdsMS4wOS0uMzMtLjUyLTFhMi4xNywyLjE3LDAsMCwxLC4zNS0yLjUyLDE4LjkyLDE4LjkyLDAsMCwwLTIuMzItLjE2QTE1LjU4LDE1LjU4LDAsMCwwLDIsMjMuMDd2Ny43NWExLDEsMCwwLDAsMSwxSDE2LjQ0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43LDIzLjQ2bC0yLS42YTYuNzMsNi43MywwLDAsMC0uNTgtMS40MmwxLTEuODZhLjM1LjM1LDAsMCwwLS4wNy0uNDNsLTEuNDUtMS40NmEuMzguMzgsMCwwLDAtLjQzLS4w''@;'; put 'put ''N2wtMS44NSwxYTcuNzQsNy43NCwwLDAsMC0xLjQzLS42bC0uNjEtMmEuMzguMzgsMCwwLDAtLjM2LS4yNUgyMy44NGEuMzguMzgsMCwwLDAtLjM1LjI2bC0uNiwyYTYuODUsNi44NSwwLDAsMC0xLjQ1LjYxbC0xLjgxLTFhLjM4LjM4LDAsMCwwLS40NC4wNmwtMS40NywxLjQ0YS4zNy4zNyww''@;'; put 'put ''LDAsMC0uMDcuNDRsMSwxLjgyQTcuMjQsNy4yNCwwLDAsMCwxOCwyMi44M2wtMiwuNjFhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1YS4zNi4zNiwwLDAsMCwuMjYuMzVsMiwuNjFhNy4yOSw3LjI5LDAsMCwwLC42LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTkuMTYsMzJhLjM4''@;'; put 'put ''LjM4LDAsMCwwLC40NC4wNmwxLjg3LTFhNy4wOSw3LjA5LDAsMCwwLDEuNC41N2wuNiwyLjA1YS4zOC4zOCwwLDAsMCwuMzYuMjZoMi4wNWEuMzguMzgsMCwwLDAsLjM1LS4yNmwuNi0yLjA1YTYuNjgsNi42OCwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM4LjM4LDAsMCwwLC40NC0uMDZMMzIs''@;'; put 'put ''MzAuNTVhLjM4LjM4LDAsMCwwLC4wNi0uNDRsLTEtMS44OGE2LjkyLDYuOTIsMCwwLDAsLjU3LTEuMzhsMi0uNjFhLjM5LjM5LDAsMCwwLC4yNy0uMzVWMjMuODJBLjQuNCwwLDAsMCwzMy43LDIzLjQ2Wm0tOC44Myw0LjcyYTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzRBMy4zNCwzLjM0LDAs''@;'; put 'put ''MCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZUhhcmREcml2ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMyYTIsMiwwLDAsMCwyLTJaTTMyLDI4SDRWOEgzMlYyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIx''@;'; put 'put ''LjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTExLjg4LDE4LjA4YTMuNTksMy41OSwwLDEsMCwzLjU5LTMuNTksMy44NCwzLjg0LDAsMCwwLS45MS4xM0wxNSwxNi4xNmEyLjA4LDIuMDgsMCwwLDEsLjUtLjA3LDIsMiwwLDEsMS0yLDIsMS42NCwxLjY0LDAsMCwxLC4wOC0uNUwxMiwxNy4xNkEzLjUzLDMuNTMsMCwwLDAsMTEu''@;'; put 'put ''ODgsMTguMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS40NywyNS43M2E3LjY2LDcuNjYsMCwwLDEtNy42NS03LjY1LDcuNTUsNy41NSwwLDAsMSwuMjctMkw2LjU0LDE1LjdhOS4yNCw5LjI0LDAsMCww''@;'; put 'put ''LDE3LjgsNC45NUgyMi42NkE3LjY0LDcuNjQsMCwwLDEsMTUuNDcsMjUuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4yMiwxNy44M2EuOC44LDAsMCwwLS44LS44SDI0LjY2YTkuMjYsOS4yNiwwLDAs''@;'; put 'put ''MC05LjE5LTguMiw5LjM2LDkuMzYsMCwwLDAtMi4zOC4zMmwuNDIsMS41NGE3Ljg2LDcuODYsMCwwLDEsMi0uMjZBNy42Niw3LjY2LDAsMCwxLDIzLDE3SDIwLjkyYS44LjgsMCwwLDAsMCwxLjZoNi41QS44LjgsMCwwLDAsMjguMjIsMTcuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTIsMTcuMTZsMS41NC40MmExLjY0LDEuNjQsMCwwLDAtLjA4LjUsMiwyLDAsMSww''@;'; put 'put ''LDItMiwyLjA4LDIuMDgsMCwwLDAtLjUuMDdsLS40MS0xLjU0YTMuODQsMy44NCwwLDAsMSwuOTEtLjEzLDMuNTksMy41OSwwLDEsMS0zLjU5LDMuNTlBMy41MywzLjUzLDAsMCwxLDEyLDE3LjE2Wk01LjMxLDhBMS4yNSwxLjI1LDAsMSwxLDQuMDYsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4z''@;'; put 'put ''MSw4Wm0wLDIwLjA2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMzEsMjguMDZabTEwLjE2LS43M0E5LjIyLDkuMjIsMCwwLDEsNi41NCwxNS43bDEuNTUuNDFhNy41NSw3LjU1LDAsMCwwLS4yNywyLDcuNjQsNy42NCwwLDAsMCwxNC44NCwyLjU3aDEuNjhB''@;'; put 'put ''OS4yNSw5LjI1LDAsMCwxLDE1LjQ3LDI3LjMzWm0xMi04LjdoLTYuNWEuOC44LDAsMCwxLDAtMS42SDIzYTcuNjYsNy42NiwwLDAsMC03LjU3LTYuNiw3Ljg2LDcuODYsMCwwLDAtMiwuMjZsLS40Mi0xLjU0YTkuMzYsOS4zNiwwLDAsMSwyLjM4LS4zMkE5LjI2LDkuMjYsMCwwLDEsMjQuNjYs''@;'; put 'put ''MTdoMi43NmEuOC44LDAsMCwxLDAsMS42Wm0zLjM5LDkuNDNhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMjguMDZabTAtMTcuNTZhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMTAuNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43''@;'; put 'put ''NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsOS43NEExLjc0LDEuNzQsMCwwLDAsMjguMjYsOEg3Ljc0QTEuNzQsMS43NCwwLDAsMCw2LDkuNzRWMjQuMjZB''@;'; put 'put ''MS43NCwxLjc0LDAsMCwwLDcuNzQsMjZIOFYxMEgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAs''@;'; put 'put ''MTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMzIsMjhIMTJWMTRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwy''@;'; put 'put ''My42OGEyLjY0LDIuNjQsMCwxLDAtMi43LTIuNjNBMi42NywyLjY3LDAsMCwwLDE5Ljk0LDIzLjY4Wm0wLTMuODdhMS4yNCwxLjI0LDAsMSwxLTEuMjksMS4yNEExLjI3LDEuMjcsMCwwLDEsMTkuOTQsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwxNi4yMmE0LjkzLDQuOTMsMCwwLDEsNC45NSw0LjM1SDIzLjcxVjIyaDQuNDFhLjcuNywwLDAsMCwwLTEuNEgyNi4zMWE2LjMzLDYuMzMsMCwwLDAtNi4zNy01Ljc1LDYuNTgsNi41OCwwLDAsMC0xLjQ4LjE3bC4zNSwxLjM3QTQuNzMs''@;'; put 'put ''NC43MywwLDAsMSwxOS45NCwxNi4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDI3LjI3YTYuNDIsNi40MiwwLDAsMCw1LjY3LTMuMzVIMjMuOTNhNSw1LDAsMCwxLTQsMS45NSw0LjkxLDQuOTEs''@;'; put 'put ''MCwwLDEtNS00LjgyLDUuMTYsNS4xNiwwLDAsMSwuMDgtLjc5TDEzLjYzLDIwYTcsNywwLDAsMC0uMDksMUE2LjMyLDYuMzIsMCwwLDAsMTkuOTQsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiw1''@;'; put 'put ''Ljc0QTEuNzQsMS43NCwwLDAsMCwyNC4yNiw0SDMuNzRBMS43NCwxLjc0LDAsMCwwLDIsNS43NFYyMC4yNkExLjc0LDEuNzQsMCwwLDAsMy43NCwyMkg0VjZIMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDku''@;'; put 'put ''NzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYy''@;'; put 'put ''LDIyLjZBMS41NSwxLjU1LDAsMSwwLDE4LDIxLjA1LDEuNiwxLjYsMCwwLDAsMTkuNjIsMjIuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjYsMTJIMTEuNzRBMS43NCwxLjc0LDAsMCwwLDEwLDEzLjc0VjI4''@;'; put 'put ''LjI2QTEuNzQsMS43NCwwLDAsMCwxMS43NCwzMEgzMi4yNkExLjc0LDEuNzQsMCwwLDAsMzQsMjguMjZWMTMuNzRBMS43NCwxLjc0LDAsMCwwLDMyLjI2LDEyWk0xOS42MiwxNy43NGEzLjMxLDMuMzEsMCwxLDEtMy4zOCwzLjMxQTMuMzUsMy4zNSwwLDAsMSwxOS42MiwxNy43NFptMCwxMS4x''@;'; put 'put ''M2E3Ljk0LDcuOTQsMCwwLDEtOC03LjgyLDcuODMsNy44MywwLDAsMSwuMTEtMS4yOWwxLjc1LjNhNS4zNiw1LjM2LDAsMCwwLS4xMSwxLDYuMTgsNi4xOCwwLDAsMCw2LjI4LDYuMDYsNi4zNSw2LjM1LDAsMCwwLDUtMi40NmgyLjFBOC4wNiw4LjA2LDAsMCwxLDE5LjYyLDI4Ljg3Wk0yOS44''@;'; put 'put ''OSwyMi4ySDI0LjM2VjIwLjQ0aDEuNDhBNi4xOSw2LjE5LDAsMCwwLDE5LjYyLDE1YTYuNDgsNi40OCwwLDAsMC0xLjQxLjE2bC0uNDUtMS43YTguMTYsOC4xNiwwLDAsMSwxLjg2LS4yMiw4LDgsMCwwLDEsOCw3LjIxaDIuMjZhLjg4Ljg4LDAsMCwxLDAsMS43NloiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVOVk1lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRI''@;'; put 'put ''MjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEs''@;'; put 'put ''MSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEs''@;'; put 'put ''MSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3Qg''@;'; put 'put ''eD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJykseS5DbHJTaGFwZVNTRD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjku''@;'; put 'put ''ODEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTguNjJjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMnMtLjUzLDEu''@;'; put 'put ''MDktMS41NSwxLjA5YTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUycy0xLjE1LTIuMDUtMi44Ny0yLjQ0Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTAsMTVhMy42OCwzLjY4LDAs''@;'; put 'put ''MCwxLDIuMzcsMWwuODEtMS4xQTQuNTgsNC41OCwwLDAsMCwxMCwxMy42OWMtMS43NCwwLTMsMS4wNS0zLDIuNDlTOC4yNiwxOC4yMiwxMCwxOC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjgzLDIw''@;'; put 'put ''LjkzYTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUyUzE5LjczLDE3LjY1LDE4LDE3LjI2Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTcuNDgsMTVhMy42OCwzLjY4LDAsMCwxLDIu''@;'; put 'put ''MzcsMWwuODEtMS4xYTQuNTYsNC41NiwwLDAsMC0zLjEyLTEuMTVjLTEuNzMsMC0zLDEuMDUtMywyLjQ5czEuMTksMiwyLjg5LDIuNDRjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMlMxOC44NSwyMC45MywxNy44MywyMC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC03IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjksMThjMC0yLjQxLTEuOTItNC4xMi00LjY0LTQuMTJoLTIuOXY4LjI0aDIuOUMyOCwyMi4wOCwyOS45LDIwLjM3LDI5LjksMThabS02LTIuNzZoMS41NmEyLjc3LDIuNzcsMCwxLDEsMCw1LjUzSDIzLjg2WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTUuMjEsOEExLjI1LDEuMjUsMCwxLDEsNCw5LjI1LDEu''@;'; put 'put ''MjUsMS4yNSwwLDAsMSw1LjIxLDhabTAsMjBhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsNS4yMSwyOFptNS4wNi01Ljc4YTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0u''@;'; put 'put ''OTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjItMi40OSwzLTIuNDlhNC41OCw0LjU4LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMUEzLjY4LDMuNjgsMCwwLDAsMTAsMTVhMS4yNSwxLjI1LDAsMCwwLTEuMzksMS4wOGMwLC42Ny42MS45MSwxLjkyLDEuMjEsMS43''@;'; put 'put ''Mi4zOSwyLjg3Ljk0LDIuODcsMi40NFMxMi4yNCwyMi4yMiwxMC4yNywyMi4yMlptNy41MSwwYTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44''@;'; put 'put ''OS0yLjQ0czEuMjMtMi40OSwzLTIuNDlhNC41Niw0LjU2LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMWEzLjY4LDMuNjgsMCwwLDAtMi4zNy0xLDEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRTMTkuNzUsMjIu''@;'; put 'put ''MjIsMTcuNzgsMjIuMjJabTQuNTgtLjE0VjEzLjg0aDIuOWMyLjcyLDAsNC42NCwxLjcxLDQuNjQsNC4xMlMyOCwyMi4wOCwyNS4yNiwyMi4wOFpNMzAuNjksMjhhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuNjksMjhabTAtMTcuNWExLjI1LDEuMjUsMCwx''@;'; put 'put ''LDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSwzMC42OSwxMC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwxNS4yaDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLHkuQ2xyU2hhcGVCbHVldG9vdGg9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAs''@;'; put 'put ''MCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwxLDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3''@;'; put 'put ''LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4yMy02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMuNiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVW''@;'; put 'put ''MTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwxLjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIu''@;'; put 'put ''MzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwyNi41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHku''@;'; put 'put ''Q2xyU2hhcGVCbHVldG9vdGhPZmY9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwxNi42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwxOSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0Ey''@;'; put 'put ''LDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUuNDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0z''@;'; put 'put ''LjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIuNzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcsMS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41''@;'; put 'put ''NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlUHJvY2Vzc09uVk09KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQuNDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40Niwx''@;'; put 'put ''Mi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCwwLDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwx''@;'; put 'put ''LjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEsMSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIs''@;'; put 'put ''MTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNh''@;'; put 'put ''MSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwxLDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1''@;'; put 'put ''LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAsMSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUz''@;'; put 'put ''LDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42djYuNDlBMi4wNiwyLjA2LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMx''@;'; put 'put ''Ljg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCwwLDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUu''@;'; put 'put ''NTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEsMCwwLDAsMzQuNzYsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2Ljgx''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEyLjgsMi44LDAsMCwxLDQuODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywxNi4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCww''@;'; put 'put ''LS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2LjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCwwLDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEsMSwwLDAsMC0xLjQyLjA4bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMu''@;'; put 'put ''NzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVBdG9tPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwy''@;'; put 'put ''LjQyLTIuNDJBMi40MiwyLjQyLDAsMCwxLDE4LDIwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4x''@;'; put 'put ''Mi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjks''@;'; put 'put ''NS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5''@;'; put 'put ''LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQu''@;'; put 'put ''NjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMy''@;'; put 'put ''LjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0u''@;'; put 'put ''NDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwy''@;'; put 'put ''Mi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYu''@;'; put 'put ''ODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiww''@;'; put 'put ''LDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz48cGF0aCBkPSJNMjQuMjMsMTEuNzFhMzkuMTQsMzkuMTQsMCwwLDAtNC41Ny0zLjkyLDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgtMS43MmMuMzItLjEyLjYyLS4yMS45Mi0uM2EyLjI4LDIuMjgsMCwwLDAsMy44MS0uNDYsMy4zMSwzLjMxLDAsMCwxLDEuOTIuODRjMS4xOSwxLjE5''@;'; put 'put ''LDEuMjIsMy41OS4xLDYuNTguNDkuNjUuOTQsMS4zMSwxLjM1LDIsLjE3LS40LjM1LS43OS40OS0xLjE4LDEuNDctMy44NSwxLjI4LTctLjUzLTguNzhhNS4yOSw1LjI5LDAsMCwwLTMuMzMtMS40NCwyLjI5LDIuMjksMCwwLDAtNC4zMS41NGMtLjM3LjExLS43NC4yMi0xLjEzLjM3YTI1Ljc5''@;'; put 'put ''LDI1Ljc5LDAsMCwwLTQuNTcsMi4zNUEyNi4yMSwyNi4yMSwwLDAsMCwxMy4yOCw0LjJjLTMuODUtMS40Ni03LTEuMjgtOC43Ny41M0MyLjg1LDYuNCwyLjU4LDkuMTcsMy42OCwxMi41OWEyLjI4LDIuMjgsMCwwLDAsMS41OSwzLjY3Yy4zMi42MS42NywxLjIyLDEuMDYsMS44MkEyNS41NCwy''@;'; put 'put ''NS41NCwwLDAsMCw0LDIyLjY2Yy0xLjQ3LDMuODQtMS4yOCw3LC41Myw4Ljc3YTUuNjMsNS42MywwLDAsMCw0LjEyLDEuNTEsMTMuMzQsMTMuMzQsMCwwLDAsNC42NS0xLDI2LjIxLDI2LjIxLDAsMCwwLDQuNTgtMi4zNUEyNS43OSwyNS43OSwwLDAsMCwyMi40MywzMmExNC4xNiwxNC4xNiww''@;'; put 'put ''LDAsMCwzLjY1LjlBMi4zLDIuMywwLDAsMCwzMC40NiwzMmE0LjU1LDQuNTUsMCwwLDAsLjc0LS41N2MxLjgxLTEuODEsMi00LjkzLjUzLTguNzdBMzIuNjgsMzIuNjgsMCwwLDAsMjQuMjMsMTEuNzFaTTEyLjU3LDMwLjA5Yy0zLDEuMTUtNS40NSwxLjEzLTYuNjUtLjA4cy0xLjIzLTMuNjIt''@;'; put 'put ''LjA3LTYuNjRhMjIuNzcsMjIuNzcsMCwwLDEsMS43MS0zLjQ4LDQwLjE5LDQwLjE5LDAsMCwwLDMuOTIsNC41NmMuNDMuNDMuODcuODUsMS4zMSwxLjI1cS45LS40NiwxLjgzLTEuMDVjLS41OC0uNTItMS4xNi0xLTEuNzItMS42MWEzNCwzNCwwLDAsMS01Ljc0LTcuNDdBMi4yOSwyLjI5LDAs''@;'; put 'put ''MCwwLDUuNSwxMS42OWgwYy0uNzUtMi41LS42Mi00LjQ5LjQzLTUuNTRhMy43MiwzLjcyLDAsMCwxLDIuNzItLjkyLDExLjQsMTEuNCwwLDAsMSwzLjkzLjg0LDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgsMS43MiwzOS4xNCwzOS4xNCwwLDAsMC00LjU3LDMuOTJjLS40NC40NC0uODcuOS0xLjI5''@;'; put 'put ''LDEuMzZhMjAuMjcsMjAuMjcsMCwwLDAsMSwxLjg1Yy41NC0uNjEsMS4wOS0xLjIxLDEuNjgtMS44YTM2LjMzLDM2LjMzLDAsMCwxLDUtNC4xNywzNi44OCwzNi44OCwwLDAsMSw0Ljk1LDQuMTcsMzYuMjYsMzYuMjYsMCwwLDEsNC4xNyw1LDM3LDM3LDAsMCwxLTQuMTcsNUEzMC42OCwzMC42''@;'; put 'put ''OCwwLDAsMSwxMi41NywzMC4wOVpNMjkuNzksMzBsLS4xNi4xM2EyLjI3LDIuMjcsMCwwLDAtMy41LjcyLDEyLjU3LDEyLjU3LDAsMCwxLTMtLjc3LDIyLDIyLDAsMCwxLTMuNDgtMS43MiwzOS4xNCwzOS4xNCwwLDAsMCw0LjU3LTMuOTIsMzguMjYsMzguMjYsMCwwLDAsMy45Mi00LjU2LDIy''@;'; put 'put ''Ljg4LDIyLjg4LDAsMCwxLDEuNzIsMy40OEMzMSwyNi4zOSwzMSwyOC44MSwyOS43OSwzMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxOC4wNyIgcj0iMy4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMi42NiAzLjEx''@;'; put 'put ''KSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVCYXJDb2RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEs''@;'; put 'put ''MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEs''@;'; put 'put ''MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLHkuQ2xyU2hhcGVDZER2''@;'; put 'put ''ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4Wk0xNy44OCwyMC45QTIuODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1LjY4LDE3Ljc1aDEuNkExMC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMw''@;'; put 'put ''LjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAsMCwwLDMwLjA5LDE4UzMwLjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4x''@;'; put 'put ''MmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTgu''@;'; put 'put ''MjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTguMTcsMS45MmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdB''@;'; put 'put ''OC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwxOCw0LjIxdjEuNkExMi4xMywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwxOCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCww''@;'; put 'put ''LTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwxNC40MiwxNy45MlptMy43NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjczLDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlQ29udGFpbmVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhW''@;'; put 'put ''MjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjgu''@;'; put 'put ''OCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44''@;'; put 'put ''LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzks''@;'; put 'put ''MCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEuNzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs''@;'; put 'put ''LjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCww''@;'; put 'put ''LDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQu''@;'; put 'put ''MTMsNC4xMywwLDAsMSwuOTItMS4zNywzMC45NCwzMC45NCwwLDAsMS03LjIyLTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyOFY4LjE5Yy4zNC0uNzYsNC4zMS0yLjExLDExLTIuMTFzMTAuNjcsMS4zNSwxMSwydi4zYy0uODIu''@;'; put 'put ''NzktNC41OCwyLjA1LTExLjExLDIuMDVBMzMuNDgsMzMuNDgsMCwwLDEsOCw5LjQ0djEuNDRhMzUuNiwzNS42LDAsMCwwLDguODksMWM0LjI5LDAsOC44LS41OCwxMS4xMS0xLjgydjUuMDdhNS4zLDUuMywwLDAsMS0xLjgxLjg4SDMwVjguMTJjMC0zLjE5LTguMTctNC0xMy00cy0xMywuODUt''@;'; put 'put ''MTMsNFYyOEM0LDMwLjYzLDkuMzksMzEuNjgsMTQsMzJWMzBDOS4xMywyOS42Niw2LjI4LDI4LjYyLDYsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOCwyNC4yOGEzMS4zLDMxLjMsMCwwLDAsNiwuODl2LTEuNGEyOC45MywyOC45''@;'; put 'put ''MywwLDAsMS02LS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01IiAvPjxwYXRoIGQ9Ik0yNSwyMS44MmEuNy43LDAsMCwwLS43LjdWMzBhLjcuNywwLDEsMCwxLjQsMFYyMi41MkEuNy43LDAsMCwwLDI1LDIxLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0u''@;'; put 'put ''Ny43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYy''@;'; put 'put ''MEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEsMjEuN2EuNy43LDAsMCwwLS43Ljd2Ny40OWEuNy43LDAsMCwwLDEuNCwwVjIyLjRBLjcuNywwLDAsMCwyMSwyMS43WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDE2SDI4VjguMTJjMC0xLjY4LTUuMzgtMy0xMi0zUzQsNi40''@;'; put 'put ''NCw0LDguMTJWMjhjMCwxLjUsNC4zMywyLjc1LDEwLDNWMjUuMjJhMjkuMTcsMjkuMTcsMCwwLDEtOC0xLjI5VjIyLjQ0bC4yNC4xQTI2LjYzLDI2LjYzLDAsMCwwLDE0LDIzLjgyVjIwYTQsNCwwLDAsMSwuMjktMS40N0EyOS4xOSwyOS4xOSwwLDAsMSw2LDE3LjIzVjE1Ljc1bC4yNC4wOWEy''@;'; put 'put ''OSwyOSwwLDAsMCw5LDEuMzJoMEE0LDQsMCwwLDEsMTgsMTZaTTYsMTAuNTRWOS4wNWwuMjQuMDlBMzAuMTIsMzAuMTIsMCwwLDAsMTYsMTAuNDcsMjguMzMsMjguMzMsMCwwLDAsMjYsOS4wNXYxLjVhMzIuNTMsMzIuNTMsMCwwLDEtMTAsMS4zMkEzMi40NCwzMi40NCwwLDAsMSw2LDEwLjU0''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSx5LkNsclNoYXBlRmlsZVNoYXJlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0y''@;'; put 'put ''MS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42''@;'; put 'put ''NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEtMi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwx''@;'; put 'put ''LC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JykseS5DbHJTaGFwZVFyQ29kZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiww''@;'; put 'put ''LDAsMCw0LDUuNlYxMmg4VjRaTTEwLDEwSDZWNmg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQsMzAuNEExLjYsMS42LDAsMCwwLDUuNiwzMkgxMlYyNEg0Wk02LDI2aDR2NEg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDMyaDYuNEExLjYsMS42LDAsMCwwLDMyLDMwLjRWMjRIMjRabTItNmg0djRIMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNCw0SDI0djhoOFY1LjZBMS42LDEuNiwwLDAs''@;'; put 'put ''MCwzMC40LDRaTTMwLDEwSDI2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTAgMjAgOCAxNiA4IDE2IDEyIDE4IDEyIDE4IDEwIDIwIDEwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNSIgLz48cmVjdCB4PSIxMiIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTciIC8+PHBvbHlnb24gcG9pbnRzPSIyMCA2IDIwIDggMjIgOCAyMiA0IDE0IDQgMTQgOCAxNiA4IDE2IDYgMjAgNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHJlY3QgeD0iNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwb2x5Z29uIHBvaW50cz0iMTIgMTYgMTIgMTggMTAgMTggMTAgMTQgOCAxNCA4IDE4IDYgMTggNiAyMCA0IDIwIDQgMjIgOCAyMiA4IDIwIDEwIDIwIDEwIDIyIDEyIDIyIDEyIDIwIDE0IDIwIDE0IDE2IDEyIDE2''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCAxNiAyMiAxNiAyMiAxOCAyNCAxOCAyNCAxNiAyNiAxNiAyNiAxNCAyMiAxNCAyMiAxMCAyMCAxMCAyMCAxMiAxOCAxMiAxOCAxNCAyMCAxNCAyMCAxNiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPjxwb2x5Z29uIHBvaW50cz0iMTggMzAgMTQgMzAgMTQgMzIgMjIgMzIgMjIgMzAgMjAgMzAgMjAgMjggMTggMjggMTggMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgLz48cG9seWdvbiBw''@;'; put 'put ''b2ludHM9IjIyIDIwIDIyIDE4IDIwIDE4IDIwIDE2IDE4IDE2IDE4IDE4IDE2IDE4IDE2IDIwIDE4IDIwIDE4IDIyIDIwIDIyIDIwIDIwIDIyIDIwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIC8+PHJlY3QgeD0iMzAiIHk9IjIwIiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIC8+PHJlY3QgeD0iMjIiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIC8+PHBvbHlnb24gcG9pbnRzPSIzMCAxNCAy''@;'; put 'put ''OCAxNCAyOCAxNiAyNiAxNiAyNiAxOCAyOCAxOCAyOCAyMCAzMCAyMCAzMCAxOCAzMiAxOCAzMiAxNiAzMCAxNiAzMCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiAvPjxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTggMjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSx5LkNs''@;'; put 'put ''clNoYXBlVXNiPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxYTIuODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcsMS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAt''@;'; put 'put ''MywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiwwLDAsMSwxOS4zMyw4LjQ2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAs''@;'; put 'put ''MCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywyLjQ3LDIuNDcsMCwxLDEtMi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDkuMTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwz''@;'; put 'put ''LjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCwwLC44LS43OXYtNC40YS43OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2''@;'; put 'put ''Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNi4xMS0zLjY2YS42OS42OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4xNFptNS4zOS00LjU2VjE1LjU1bDQsMi40Mloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43MiwxNy4zN2wtNS41MS0zLjMxYS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgtLjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIu''@;'; put 'put ''MjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJo''@;'; put 'put ''NC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYyLjI4YS43LjcsMCwwLDAsLjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43LjcsMCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVSYWRhcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTku''@;'; put 'put ''NCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNzLTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0''@;'; put 'put ''LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRTNCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0''@;'; put 'put ''YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywy''@;'; put 'put ''LjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPicpLHkuQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIuNDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwz''@;'; put 'put ''LjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwxMi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcs''@;'; put 'put ''Mi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIuODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAs''@;'; put 'put ''MCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcyLDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0x''@;'; put 'put ''Ljg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwx''@;'; put 'put ''NC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTExLjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0u''@;'; put 'put ''MjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLHkuQ2xyU2hhcGVSZXNpc3Rvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcs''@;'; put 'put ''MCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSwwLDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEs''@;'; put 'put ''MSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3''@;'; put 'put ''LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0xLjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+Jyks''@;'; put 'put ''eS5DbHJTaGFwZUNhcGFjaXRvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEsMSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBh''@;'; put 'put ''dGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwx''@;'; put 'put ''LDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSx5LkNs''@;'; put 'put ''clNoYXBlU3F1aWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBWNkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCww''@;'; put 'put ''LDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSww''@;'; put 'put ''LTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAsMywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCwwLDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEsMCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5''@;'; put 'put ''TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSx5LkNsclNoYXBlSG9zdEdyb3VwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRB''@;'; put 'put ''MS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgsMCwwLDEsMjIuMTYsMTJWMzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gxM2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgtMTFWM2gxMmExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cblxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUxMzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2''@;'; put 'put ''Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcuOTIgTDE1LjA4LDcuOTIgQzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgwMzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwz''@;'; put 'put ''MS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4wOCwxMS45NiBMNC4wOCwxMS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTguMSw2IEw2LjEsNiBMNi4xLDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEgWiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4LDIgTDExLjA4LDAgTDIzLjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+JykseS5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVy''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwxLDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1''@;'; put 'put ''VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCwwLTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRo''@;'; put 'put ''PSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0i''@;'; put 'put ''TTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+JykseS5DbHJTaGFwZU5vZGVHcm91cD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1Yx''@;'; put 'put ''My4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45''@;'; put 'put ''NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEsMCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40''@;'; put 'put ''NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdMMzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0x''@;'; put 'put ''VjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcuMzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEtMVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1''@;'; put 'put ''djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLHkuQ2xyU2hhcGVOb2Rlcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5''@;'; put 'put ''VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41''@;'; put 'put ''LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQu''@;'; put 'put ''OXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JykseS5DbHJTaGFwZU5hbWVzcGFjZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwx''@;'; put 'put ''LDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDku''@;'; put 'put ''NjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDkuNjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLHkuQ2xyU2hh''@;'; put 'put ''cGVOb2RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4zM1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIi8+JykseS5DbHJTaGFwZVBvZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgy''@;'; put 'put ''NmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2''@;'; put 'put ''LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40''@;'; put 'put ''MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwyMWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSx5LkNsckNvbnRyb2xMdW49KDAsZy5jbHJJY29uU1ZHKSgn''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4z''@;'; put 'put ''NCwxLjg4LDEyLDEuODhzOS4xLS40NSwxMi0xLjg4djUuMTFjLS45MS44Mi01LDIuMTMtMTIsMi4xM0EzNC44MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjhoMHMwLDAsMC0uMDdjMC0zLjM1''@;'; put 'put ''LTguOC00LjI1LTE0LTQuMjVTNCw0LjU4LDQsNy45M3YxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaTTE4LDUuNjhjNy4xNSwwLDExLjUzLDEuNDQsMTIsMi4yNS0uNDYuODEtNC44NCwyLjI1LTEyLDIuMjVTNi4zMSw4''@;'; put 'put ''LjY5LDYsOEM2LjMxLDcuMTgsMTAuNzEsNS42OCwxOCw1LjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAs''@;'; put 'put ''MCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjJIMTUuNDZsLTUuNDEsNi4zMUwxNS40OSwzNGgxNi42YTIsMiwwLDAsMCwyLTJWMjMuOTNBMiwyLDAsMCwwLDMyLjA5LDIyWm0wLDEwSDE2LjM0bC0zLjU5LTMuNzdMMTYuMzgsMjRIMzIuMDl2OFoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''PHBhdGggZD0iTTE4LDE3LjU0QTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNWMThhNDAuODYsNDAuODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTMuMjJhNy4zMiw3LjMyLDAsMCwxLTIsLjI4djEuOTFDMjkuMDksMTYuMjMsMjUsMTcuNTQsMTgsMTcu''@;'; put 'put ''NTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGE0Ny42Niw0Ny42NiwwLDAsMCw3LjA5LS41Miw3LjQ1LDcuNDUsMCwwLDEtMS41''@;'; put 'put ''MS0xLjgsNDcuNCw0Ny40LDAsMCwxLTUuNTguMzJDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuNjYsMCwzLjE2LjA4LDQuNTEuMjFhNy41Niw3LjU2LDAsMCwxLC4yOS0yYy0xLjctLjE3LTMuMzgtLjI0LTQuOC0uMjQtNS4yLDAtMTQsLjktMTQs''@;'; put 'put ''NC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIi8+PHBhdGgg''@;'; put 'put ''ZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1Yx''@;'; put 'put ''MC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4aC41OWEzLjU5LDMuNTksMCwwLDEsLjMyLTJIMThDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuMjIsMCwyLjM1LjA1LDMuNDEuMTJsMS4xLTEuOTFjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0u''@;'; put 'put ''MjEtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBk''@;'; put 'put ''PSJNOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlYxNS40SDMwYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgyVjEwLjcyYy0yLjIxLDMuMzYtMTAuNDksMy40''@;'; put 'put ''Ni0xNCwzLjQ2QTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNGM1LDAsMTMuMjgtLjgzLDE0LTMuODhWNy44M2gwYy0uMTktMy4yNy04Ljg0LTQuMTUtMTQtNC4xNVM0LjIxLDQuNTYsNCw3LjgzSDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42''@;'; put 'put ''MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEs''@;'; put 'put ''MUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNSwwLDEzLjIt''@;'; put 'put ''LjgyLDE0LTMuODJ2LTJhNy4zNCw3LjM0LDAsMCwxLTQuMTIsMCwzOS40NywzOS40NywwLDAsMS05Ljg4LDFBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0LDQ3Ljc2LDQ3Ljc2LDAsMCwwLDcuMDktLjUyQTcuNDUsNy40NSwwLDAsMSwyMi44''@;'; put 'put ''LDMuOTJjLTEuNy0uMTctMy4zOC0uMjQtNC44LS4yNC01LjE0LDAtMTMuNzkuODgtMTQsNC4xNUg0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzks''@;'; put 'put ''MjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEs''@;'; put 'put ''MSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcu''@;'; put 'put ''ODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNC44NSwwLDEyLjgtLjc5LDEzLjkxLTMuNjJIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTIuNzMtMS4yM0gxOEE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRoLjU5YTMuNjEsMy42MSwwLDAsMSwu''@;'; put 'put ''NDYtMi4yOWwzLjQ2LTZjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYy''@;'; put 'put ''NC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLHkuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCww''@;'; put 'put ''LDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTYsMzBWNkgzMFYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9''@;'; put 'put ''IjIwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0yNy4yMiwxMEgyMHY0YS44Ljgs''@;'; put 'put ''MCwxLDAsMS41OSwwVjExLjZoNS42M2EuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxOCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0i''@;'; put 'put ''OC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl''@;'; put 'put ''ZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8cmVjdCB4''@;'; put 'put ''PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICA8cmVjdCB4''@;'; put 'put ''PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTIwLDE0YS44LjgsMCwxLDAsMS41OSwwVjExLjZIMjVBNy43NCw3Ljc0LDAsMCwxLDIzLjY2LDEwSDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMTAtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDZWNkgyMi41VjZhNy4zNyw3LjM3LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjEzLjIyQTcuMzcsNy4zNywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxyZWN0''@;'; put 'put ''IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEi''@;'; put 'put ''IHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9''@;'; put 'put ''IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMwLDE1LjRWMzBINlY2SDIxLjI3bDEuMTgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEu''@;'; put 'put ''MjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMwLDRINkEyLDIs''@;'; put 'put ''MCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0w''@;'; put 'put ''LTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJabTAtNkgyMFYxMGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCwxMy41YTcu''@;'; put 'put ''NDksNy40OSwwLDAsMS00LTEuMTZWMTRIMjBWMTBoMy42NkE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJI''@;'; put 'put ''MzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRW''@;'; put 'put ''MjJoMlptMC00SDI0VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTIyLjIzLDE1LjRhMy42OCwzLjY4LDAsMCwxLTMuMTgtNS41MUwyMi40NSw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIs''@;'; put 'put ''MCwwLDAsMi0yVjE1LjRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgJykseS5DbHJTaGFwZVRhcGVEcml2ZT0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTMuMzMsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTMsNC41MkE0LjUz''@;'; put 'put ''LDQuNTMsMCwwLDAsMTMuMzMsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45My0yLjkyQTIuOTIsMi45MiwwLDAsMSwxMy4zMywyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy42MiwxMy4zNWE0LjUyLDQu''@;'; put 'put ''NTIsMCwxLDAsNC41Miw0LjUyQTQuNTMsNC41MywwLDAsMCwyMy42MiwxMy4zNVptMCw3LjQ0YTIuOTIsMi45MiwwLDEsMSwyLjkyLTIuOTJBMi45MiwyLjkyLDAsMCwxLDIzLjYyLDIwLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTYsMTFWMjMuNTVIOFYxMkgyOS4zNFYxMEg3QTEsMSwwLDAsMCw2LDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4Ljgx''@;'; put 'put ''LDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTkuMSwxNy44N2E0LjUyLDQuNTIs''@;'; put 'put ''MCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCwxOS4xLDE3Ljg3Wm03LjQ0LDBBMi45MiwyLjkyLDAsMSwxLDIzLjYyLDE1LDIuOTIsMi45MiwwLDAsMSwyNi41NCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMzIsMTMuMjJWMjhINFY4SDIyLjc4YTcuMzcsNy4zNywwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNjUsNy42NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNNiwxMVYyMy41NUg4VjEySDI1LjUxYTcuNjYsNy42NiwwLDAsMS0xLjg1LTJIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik04LjgxLDE3Ljg3YTQuNTMsNC41MywwLDEsMCw0LjUyLTQu''@;'; put 'put ''NTJBNC41Myw0LjUzLDAsMCwwLDguODEsMTcuODdabTcuNDUsMEEyLjkzLDIuOTMsMCwxLDEsMTMuMzMsMTUsMi45MywyLjkzLDAsMCwxLDE2LjI2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTcsMTBhMSwxLDAsMCwwLTEsMVYyMy41NUg4VjEySDE4LjU3QTMuNywzLjcsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOEg0VjhIMjAuMTRs''@;'; put 'put ''MS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjIuMDksMTUuMzlhMy42NSwzLjY1LDAs''@;'; put 'put ''MCwxLTEuOC0uNTUsNC41MSw0LjUxLDAsMSwwLDcuMTEuNTZIMjUuMTdhMi45MiwyLjkyLDAsMSwxLTMuMDgsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFB''@;'; put 'put ''MS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiLz5cblxuICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLDI0SDZWMTJIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0x''@;'; put 'put ''Mi4yMSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwxMi4yMSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDEyLjIxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCww''@;'; put 'put ''LDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEt''@;'; put 'put ''MiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMy43OSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwyMy43OSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwx''@;'; put 'put ''LDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMwLDEzLjVWMjRINlYxMkgyNS41MWE3LjQ5LDcuNDksMCwwLDEtMy02SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTcuMiwxOGE1LDUsMCwxLDAsNS01QTUsNSwwLDAsMCw3LjIsMThabTcsMGEyLDIsMCwxLDEtMi0yQTIsMiwwLDAsMSwxNC4yMiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE4Ljc4LDE4YTUsNSwwLDEsMCw5LjI3LTIuNkgyMi4yM2EzLjcxLDMuNzEsMCwwLDEtMi4xNy0uNzFBNSw1LDAsMCwwLDE4Ljc4LDE4Wm01LTJhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMwVjI0SDZWMTJIMTguNTdhMy42NSwzLjY1LDAsMCwxLC40OC0yLjExTDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5''@;'; put 'put ''LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLHkuQ2xyU2hhcGVBbmltYXRpb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEw''@;'; put 'put ''LjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0xLjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSwwLDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIy''@;'; put 'put ''LDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIu''@;'; put 'put ''MTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAsMyw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMsOC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIs''@;'; put 'put ''MTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSx5LkNsclNoYXBlQ2lDZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwx''@;'; put 'put ''LC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3LDcuNjcsMCwwLDEsMjMuNTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcu''@;'; put 'put ''NDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAsMCwwLDE4LjE3LDEwaC4wOWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwx''@;'; put 'put ''LjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMxLjM3YTcuMzMsNy4zMywwLDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCwwLDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCww''@;'; put 'put ''LDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjQsMTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMsLjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwx''@;'; put 'put ''LDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0uMjgsNC4wOGExLDEsMCwwLDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEsMSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRoLjA4bDQuMDktLjM1YTEsMSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCwwLDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAs''@;'; put 'put ''MS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwxLDAsMCwwLS45Mi0xLjA4LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4zOWE3LjcxLDcuNzEsMCwwLDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40NywyLjk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJs''@;'; put 'put ''LS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLHkuQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLGcuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0ExLjg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIuNjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIu''@;'; put 'put ''MDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2''@;'; put 'put ''VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDksMi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwy''@;'; put 'put ''LjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIuMTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIvPicpLHkuVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6eS5DbHJTaGFwZVJ1bGVyUGVuY2lsLCJwaG9uZS1oYW5kc2V0Ijp5LkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjp5LkNsclNoYXBlTm9XaWZpLGluc3RhbGw6eS5DbHJTaGFwZUlu''@;'; put 'put ''c3RhbGwsdW5pbnN0YWxsOnkuQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOnkuQ2xyU2hhcGVMYXllcnMsYmxvY2s6eS5DbHJTaGFwZUJsb2NrLCJibG9ja3MtZ3JvdXAiOnkuQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6eS5DbHJTaGFwZUJ1bmRsZSx3aWZpOnkuQ2xyU2hhcGVXaWZpLCJy''@;'; put 'put ''YWNrLXNlcnZlciI6eS5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6eS5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9yZSI6eS5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOnkuQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczp5LkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDp5''@;'; put 'put ''LkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6eS5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDp5LkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6eS5DbHJTaGFwZUhvc3Qsc3RvcmFnZTp5LkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOnkuQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczp5LkNsclNoYXBl''@;'; put 'put ''QXBwbGljYXRpb25zLGJ1aWxkaW5nOnkuQ2xyU2hhcGVCdWlsZGluZyxjcHU6eS5DbHJTaGFwZUNQVSxtZW1vcnk6eS5DbHJTaGFwZU1lbW9yeSwiZGF0YS1jbHVzdGVyIjp5LkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOnkuQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxk''@;'; put 'put ''OnkuQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6eS5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6eS5DbHJTaGFwZVNoaWVsZFgsaW1wb3J0OnkuQ2xyU2hhcGVJbXBvcnQsZXhwb3J0OnkuQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6eS5DbHJTaGFwZVVwbG9hZENs''@;'; put 'put ''b3VkLCJkb3dubG9hZC1jbG91ZCI6eS5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOnkuQ2xyU2hhcGVQbHVnaW4sZmxvcHB5OnkuQ2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6eS5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6eS5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6eS5DbHJTaGFw''@;'; put 'put ''ZVRlcm1pbmFsLGNvZGU6eS5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246eS5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6eS5DbHJTaGFwZUJhdHRlcnksbW9iaWxlOnkuQ2xyU2hhcGVNb2JpbGUsdGFibGV0OnkuQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOnkuQ2xyU2hhcGVO''@;'; put 'put ''ZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOnkuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjp5LkNsclNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6eS5DbHJTaGFwZVJvdXRlcix2bTp5LkNsclNoYXBlVk0sInZtdy1hcHAiOnkuQ2xyU2hhcGVWTVdBcHAs''@;'; put 'put ''Y2VydGlmaWNhdGU6eS5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6eS5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOnkuQ2xyU2hhcGVVbmFyY2hpdmUsY29ubmVjdDp5LkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0OnkuQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6eS5DbHJTaGFwZUxp''@;'; put 'put ''bmssdW5saW5rOnkuQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOnkuQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxlIjp5LkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6eS5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOnkuQ2xyQ29udHJv''@;'; put 'put ''bEx1bixkZXBsb3k6eS5DbHJTaGFwZURlcGxveSxoZWxpeDp5LkNsclNoYXBlSGVsaXgsZmxhc2s6eS5DbHJTaGFwZUZsYXNrLGFkbWluaXN0cmF0b3I6eS5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOnkuQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOnku''@;'; put 'put ''Q2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOnkuQ2xyU2hhcGVOVk1lLHNzZDp5LkNsclNoYXBlU1NELGJsdWV0b290aDp5LkNsclNoYXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjp5LkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjp5LkNsclNoYXBlUHJvY2Vzc09u''@;'; put 'put ''Vk0sImFzc2lnbi11c2VyIjp5LkNsclNoYXBlQXNzaWduVXNlcixhdG9tOnkuQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6eS5DbHJTaGFwZUJhckNvZGUsImNkLWR2ZCI6eS5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjp5LkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjp5LkNs''@;'; put 'put ''clNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjp5LkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjp5LkNsclNoYXBlUXJDb2RlLHVzYjp5LkNsclNoYXBlVXNiLHJhZGFyOnkuQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6eS5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDp5LkNsclNo''@;'; put 'put ''YXBlU3F1aWQsaW5kdWN0b3I6eS5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOnkuQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6eS5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjp5LkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOnkuQ2xyU2hhcGVO''@;'; put 'put ''b2RlR3JvdXAsbm9kZXM6eS5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTp5LkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6eS5DbHJTaGFwZU5vZGUscG9kOnkuQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOnkuQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOnkuQ2xyU2hhcGVUYXBl''@;'; put 'put ''RHJpdmUsYW5pbWF0aW9uOnkuQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjp5LkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjp5LkNsclNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCxfLmRlc2NyaXB0b3JDb25m''@;'; put 'put ''aWcpKHkuVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNoYXBlcywiY29tbWFuZCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5UZWNobm9s''@;'; put 'put ''b2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKHkuVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuVGVjaG5vbG9neVNo''@;'; put 'put ''YXBlcywicmVjZWl2ZXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKSh5LlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5UZWNobm9sb2d5U2hhcGVzLCJmb2xk''@;'; put 'put ''ZXItc2hhcmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoeS5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3No''@;'; put 'put ''YXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmljdCI7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuVGV4dEVkaXRTaGFwZXM9eS5DbHJTaGFwZVN1cGVyc2NyaXB0PXkuQ2xyU2hhcGVTdWJzY3JpcHQ9eS5DbHJTaGFwZVN0cmlrZXRocm91Z2g9eS5DbHJTaGFwZUluZGVudD15LkNsclNoYXBlT3V0ZGVu''@;'; put 'put ''dD15LkNsclNoYXBlSGlnaGxpZ2h0ZXI9eS5DbHJTaGFwZVRleHRDb2xvcj15LkNsclNoYXBlTGFuZ3VhZ2U9eS5DbHJTaGFwZUFsaWduVG9wPXkuQ2xyU2hhcGVBbGlnbk1pZGRsZT15LkNsclNoYXBlQWxpZ25Cb3R0b209eS5DbHJTaGFwZVVuZGVybGluZT15LkNsclNoYXBlVGV4dD15LkNs''@;'; put 'put ''clNoYXBlQWxpZ25SaWdodFRleHQ9eS5DbHJTaGFwZUJsb2NrUXVvdGU9eS5DbHJTaGFwZVBhaW50Um9sbGVyPXkuQ2xyU2hhcGVOdW1iZXJMaXN0PXkuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PXkuQ2xyU2hhcGVKdXN0aWZ5VGV4dD15LkNsclNoYXBlSXRhbGljPXkuQ2xyU2hhcGVBbGlnblJp''@;'; put 'put ''Z2h0PXkuQ2xyU2hhcGVBbGlnbkxlZnQ9eS5DbHJTaGFwZUFsaWduQ2VudGVyPXkuQ2xyU2hhcGVGb250U2l6ZT15LkNsclNoYXBlQ2hlY2tib3hMaXN0PXkuQ2xyU2hhcGVDZW50ZXJUZXh0PXkuQ2xyU2hhcGVCdWxsZXRMaXN0PXkuQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgXz1JKAovKiEg''@;'; put 'put ''Li4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7eS5DbHJTaGFwZUJvbGQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIyLjQzLDE3LjU0YTQuNjcsNC42NywwLDAsMCwyLjgtNC4zN3YtLjA2''@;'; put 'put ''YTQuNDMsNC40MywwLDAsMC0xLjMxLTMuMjUsNy4wOSw3LjA5LDAsMCwwLTUuMTMtMS43M2gtN0ExLjcxLDEuNzEsMCwwLDAsMTAsOS44NlYyNmExLjcyLDEuNzIsMCwwLDAsMS43NCwxLjc0aDcuMzNjNC4zNywwLDcuMjUtMS44OCw3LjI1LTUuMzhWMjIuM0MyNi4zMiwxOS42NCwyNC43Mywx''@;'; put 'put ''OC4zMiwyMi40MywxNy41NFpNMTMuNjgsMTEuNGg0LjU0YzIsMCwzLjE1Ljg5LDMuMTUsMi4zM3YuMDZjMCwxLjY4LTEuMzYsMi40OS0zLjM4LDIuNDlIMTMuNjhaTTIyLjM3LDIyYzAsMS41OS0xLjMxLDIuNDMtMy40NiwyLjQzSDEzLjY4VjE5LjYyaDVjMi40OSwwLDMuNjkuODgsMy42OSwy''@;'; put 'put ''LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUJ1bGxldExpc3Q9KDAsXy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iNS4yMSIgY3k9IjkuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIxNy4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjI1LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLHkuQ2xyU2hhcGVDZW50ZXJUZXh0PSgwLF8uY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGQ9Ik0zMC44OCw4SDUuMTJhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI1LjUsMTYuMmExLjEsMS4xLDAsMSwwLDAtMi4yaC0xNWEx''@;'; put 'put ''LjEsMS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLjI1LDIwSDUuNzVhMS4xLDEuMSwwLDAsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuODgsMjZIMTEuMTJhMS4xLDEuMSwwLDEsMCwwLDIuMkgyNC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JykseS5DbHJTaGFwZUNoZWNrYm94TGlzdD0oMCxf''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMTZIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjQzLDI0SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNS40NSwxMGgxNmExLDEsMCwwLDAsMC0yaC0xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy41LDMuNDJhMS4wOSwxLjA5LDAsMCwwLTEuNTUsMEw3Ljg5''@;'; put 'put ''LDExLjQ4LDQuNTEsNy44NEExLjEsMS4xLDAsMSwwLDIuOSw5LjM0bDQuOTQsNS4zTDE3LjUsNUExLjEsMS4xLDAsMCwwLDE3LjUsMy40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLHkuQ2xyU2hhcGVGb250U2l6ZT0oMCxfLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMjEsOS4wOEExLjEzLDEuMTMsMCwwLDAsMTkuODYsOEg0LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjE5SDExVjI3YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTAuMTloNi42OUExLjE0LDEuMTQsMCwwLDAsMjEsOS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC42NywxNUgyMS4xNWExLjEsMS4xLDAsMSwwLDAsMi4xOUgyNVYyNi41YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTcuMjNoMy41NGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIiAvPicpLHkuQ2xyU2hhcGVBbGlnbkNlbnRlcj0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMjBIMTlWMTZoNmExLDEsMCwwLDAsMS0xVjdhMSwxLDAsMCwwLTEtMUgxOVYyYTEsMSwwLDAsMC0yLDBWNkgxMWExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg2djRINWEx''@;'; put 'put ''LDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMUgxN3Y0YTEsMSwwLDAsMCwyLDBWMzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBaTTEyLDE0VjhIMjR2NlpNMzAsMjhINlYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp''@;'; put 'put ''LHkuQ2xyU2hhcGVBbGlnbkxlZnQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsMUExLDEsMCwwLDAsNCwyVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsNSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDIwSDhW''@;'; put 'put ''MzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBabS0xLDhIMTBWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTVWN2ExLDEsMCwwLDAtMS0xSDhWMTZIMjNBMSwxLDAsMCwwLDI0LDE1Wm0tMi0xSDEw''@;'; put 'put ''VjhIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlQWxpZ25SaWdodD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMWExLDEsMCwwLDAtMSwxVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsMzEsMVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDIxdjhhMSwxLDAsMCwwLDEsMUgyOFYyMEg1QTEsMSwwLDAsMCw0LDIxWm0yLDFIMjZ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEy''@;'; put 'put ''LDd2OGExLDEsMCwwLDAsMSwxSDI4VjZIMTNBMSwxLDAsMCwwLDEyLDdabTIsMUgyNnY2SDE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JykseS5DbHJTaGFwZUl0YWxpYz0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuNDIsOEgxNy4xYTEu''@;'; put 'put ''MSwxLjEsMCwxLDAsMCwyLjE5aDIuMTNMMTMuMTEsMjUuNTVIMTAuNDdhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTcuOGExLjEsMS4xLDAsMSwwLDAtMi4xOUgxNS41MWw2LjEzLTE1LjM2aDIuNzhhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz4nKSx5LkNsclNoYXBlSnVzdGlmeVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsMTAuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4ySDZhMS4xLDEuMSwwLDEsMCwwLDIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0zMS43NSwxNEg2YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMS4xMiwyMEg2LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjJoMjQu''@;'; put 'put ''NWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQ1LDI1LjgzSDYuNmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjQ1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSx5LkNsclNoYXBlQWxpZ25MZWZ0VGV4dD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMjUsMjZINnYyLjJIMjAuMjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0yOCwyMEg2djIuMkgyOEExLjEsMS4xLDAsMCwwLDI4LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLjYsMTUuMUExLjEsMS4xLDAsMCwwLDIxLjUsMTRINnYyLjJIMjEuNUExLjEsMS4xLDAsMCwwLDIyLjYs''@;'; put 'put ''MTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOS4yNSw4SDZ2Mi4ySDI5LjI1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSx5LkNsclNoYXBlTnVt''@;'; put 'put ''YmVyTGlzdD0oMCxfLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjUuNDYgNy40MSA1LjQ2IDExLjU2IDYuNjUgMTEuNTYgNi42NSA2LjA1IDUuNyA2LjA1IDQuMDUgNy4xNiA0LjUyIDggNS40NiA3LjQxIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz48cGF0aCBkPSJNNS41NywxNC44MmEuNzYuNzYsMCwwLDEsLjgzLjczYzAsLjM4LS4yMS43NC0uODcsMS4yN2wtMiwxLjU3djFINy42N1YxOC4yOEg1LjMzbDEtLjc3YzEtLjcsMS4yOC0xLjI3LDEuMjgtMmExLjgzLDEuODMsMCwwLDAtMi0xLjc2LDIuNjMsMi42MywwLDAsMC0yLjE0LDEu''@;'; put 'put ''MDhsLjc2LjczQTEuNzUsMS43NSwwLDAsMSw1LjU3LDE0LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTYuNTYsMjQuNjRhMS4zMiwxLjMyLDAsMCwwLDEtMS4yN2MwLS44Ny0uNzgtMS41MS0yLTEuNTFhMi42MSwyLjYxLDAsMCww''@;'; put 'put ''LTIuMSwxbC42OS43MmExLjc4LDEuNzgsMCwwLDEsMS4zLS42NGMuNTQsMCwuOTIuMjYuOTIuNjZzLS4zNi42Mi0xLC42Mkg0Ljc5djFoLjY0Yy43NCwwLDEuMDcuMjEsMS4wNy42M3MtLjM1LjY4LTEsLjY4YTIsMiwwLDAsMS0xLjQ2LS42NWwtLjcuNzhhMi44NSwyLjg1LDAsMCwwLDIuMjEu''@;'; put 'put ''OTNjMS4yOSwwLDIuMTMtLjY5LDIuMTMtMS42NEExLjMzLDEuMzMsMCwwLDAsNi41NiwyNC42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40''@;'; put 'put ''MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JykseS5DbHJTaGFwZVBhaW50Um9sbGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMFY0YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw0djZhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgyOUEyLDIsMCwwLDAsMzEsMTBaTTYsNEgyOXY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI5TDE4LjcsMTYuNTRhMSwxLDAsMCwwLS43LDFWMTlIMTZWMzNhMiwyLDAsMCwwLDIsMmgyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTlIMjB2LS43M0wzMy4zLDE0YTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLDZaTTIwLDMzSDE4VjIxaDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cmVjdCB4PSI0IiB5PSIyIiB3aWR0aD0iMjciIGhlaWdodD0iMTAiIHJ4PSIx''@;'; put 'put ''IiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI0TDE4LjcxLDE2LjQ1YTEsMSwwLDAsMC0uNzEsMVYxOUgxNlYzNGExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxOUgyMHYtLjgyTDMzLjI5LDE0QTEsMSww''@;'; put 'put ''LDAsMCwzNCwxM1Y3QTEsMSwwLDAsMCwzMyw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlQmxvY2tRdW90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTEuODYsMTYuNTVhNC4zMSw0LjMxLDAsMCwwLTIuMTEuNTYsMTQuNDQs''@;'; put 'put ''MTQuNDQsMCwwLDEsNC4zNi02LDEuMSwxLjEsMCwwLDAtMS40LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0QTUuMDgsNS4wOCwwLDAsMCwxMCwyNC41OGE0LjQsNC40LDAsMCwwLDEuODguNDQsNC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMywxNi41NWE0LjI5LDQuMjksMCwwLDAtMi4xMS41NiwxNC41LDE0LjUsMCwwLDEsNC4zNS02LDEuMSwxLjEsMCwxLDAtMS4zOS0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NGE1LjA4LDUuMDgsMCwwLDAsMyw0LjYxQTQu''@;'; put 'put ''MzcsNC4zNywwLDAsMCwyMywyNWE0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JykseS5DbHJTaGFwZUFsaWduUmlnaHRUZXh0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42NSwyNy4xYTEuMSwxLjEs''@;'; put 'put ''MCwwLDAsMS4xLDEuMUgzMFYyNkgxNS43NUExLjEsMS4xLDAsMCwwLDE0LjY1LDI3LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi45LDIxLjFBMS4xLDEuMSwwLDAsMCw4LDIyLjJIMzBWMjBIOEExLjEsMS4xLDAsMCwwLDYuOSwy''@;'; put 'put ''MS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEzLjQsMTUuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMTRIMTQuNUExLjEsMS4xLDAsMCwwLDEzLjQsMTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zIiAvPjxwYXRoIGQ9Ik02Ljc1LDhhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMFY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JykseS5DbHJTaGFwZVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLjE5LDguODRhMS40NSwxLjQ1''@;'; put 'put ''LDAsMCwwLTEuNC0xaC0uMTJhMS40NiwxLjQ2LDAsMCwwLTEuNDIsMUwxLjE0LDI2LjU2YTEuMjksMS4yOSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjEyLDEuMTIsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4''@;'; put 'put ''LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNjQsMS42NCwwLDAsMC0uMTQtLjU3Wk02LjA4LDIwLjcxbDQuNTktMTAuMjIsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjI0LDE0Ljc4QTYuMzUsNi4zNSwwLDAsMCwy''@;'; put 'put ''Ny42LDEzLjJhMTEuMzYsMTEuMzYsMCwwLDAtNC43LDEsMSwxLDAsMCwwLS41OC44OSwxLDEsMCwwLDAsLjk0LjkyLDEuMjMsMS4yMywwLDAsMCwuMzktLjA4LDguODcsOC44NywwLDAsMSwzLjcyLS44MWMyLjcsMCw0LjI4LDEuMzMsNC4yOCwzLjkydi41YTE1LjI5LDE1LjI5LDAsMCwwLTQu''@;'; put 'put ''NDItLjYxYy0zLjY0LDAtNi4xNCwxLjYxLTYuMTQsNC42NHYuMDVjMCwyLjk1LDIuNyw0LjQ4LDUuMzcsNC40OGE2LjI5LDYuMjksMCwwLDAsNS4xOS0yLjQ4VjI2LjlhMSwxLDAsMCwwLDEsMSwxLDEsMCwwLDAsMS0xLjA2VjE5QTUuNzEsNS43MSwwLDAsMCwzMi4yNCwxNC43OFptLS41Niw3''@;'; put 'put ''LjdjMCwyLjI4LTIuMTcsMy44OS00LjgxLDMuODktMS45NCwwLTMuNjEtMS4wNi0zLjYxLTIuODZ2LS4wNmMwLTEuOCwxLjUtMyw0LjItM2ExNS4yLDE1LjIsMCwwLDEsNC4yMi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLHkuQ2xyU2hhcGVV''@;'; put 'put ''bmRlcmxpbmU9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI4LjE3YzUuMDgsMCw4LjQ4LTMuMDgsOC40OC05VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhjMCw0LjQ0LTIuMzgsNi43MS02LjEzLDYuNzFzLTYuMjEtMi40Ny02LjIxLTYuODVWOC41NGExLjE1LDEuMTUs''@;'; put 'put ''MCwxLDAtMi4zLDB2MTAuOEM5LjUzLDI1LjA5LDEzLDI4LjE3LDE4LDI4LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDMwSDVhMS4xMSwxLjExLDAsMCwwLDAsMi4yMUgzMUExLjExLDEuMTEsMCwwLDAsMzEsMzBaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlQWxpZ25Cb3R0b209KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDMwSDJhMSwxLDAsMCwwLDAsMkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE2LDVhMSwxLDAsMCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMjhIMTZaTTE0LDI2SDhWNmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDEzYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAs''@;'; put 'put ''MCwwLTEsMVYyOEgzMFpNMjgsMjZIMjJWMTRoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLHkuQ2xyU2hhcGVBbGlnbk1pZGRsZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMzBWMTFhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCww''@;'; put 'put ''LDAtMSwxdjZIMTZWNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYxN0gyYTEsMSwwLDAsMCwwLDJINlYzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0djZhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNGExLDEsMCwwLDAsMC0yWk0xNCwzMEg4VjZo''@;'; put 'put ''NlptMTQtNkgyMlYxMmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JykseS5DbHJTaGFwZUFsaWduVG9wPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw0SDJBMSwxLDAsMCwwLDIsNkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWOEg2Wk04LDEwaDZWMzBIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwyM2ExLDEsMCww''@;'; put 'put ''LDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDIwWm0yLTEzaDZWMjJIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSx5LkNsclNoYXBlTGFuZ3VhZ2U9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLDNIMTR2NWgyVjVoMTRjMC42LDAsMSww''@;'; put 'put ''LjQsMSwxdjExYzAsMC42LTAuNCwxLTEsMUgxN3Y3aC01LjNMOCwyNy45VjI1SDVjLTAuNiwwLTEtMC40LTEtMVYxM2MwLTAuNiwwLjQtMSwxLTFoMTN2LTJINVxuXHRcdGMtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xSDE5di03aDExYzEuNywwLDMt''@;'; put 'put ''MS4zLDMtM1Y2QzMzLDQuMywzMS43LDMsMzAsM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LjIsMjIuOWgyLjRsMC42LTEuNmgzLjFsMC42LDEuNmgyLjRMMTEuOSwxNEg5LjVMNi4yLDIyLjl6IE0xMC43LDE2LjVsMSwzLjFoLTJM''@;'; put 'put ''MTAuNywxNi41eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDE3YzEuMSwwLDIuNi0wLjMsNC0xYzEuNCwwLjcsMywxLDQsMXYtMmMwLDAtMSwwLTIuMS0wLjRjMS4yLTEuMiwyLjEtMywyLjEtNS42VjhoLTNWNmgtMnYyaC0zdjJo''@;'; put 'put ''NS45XG5cdFx0Yy0wLjIsMS44LTEsMi45LTEuOSwzLjZjLTAuNi0wLjUtMS4yLTEuMi0xLjYtMi4xaC0yLjFjMC40LDEuMywxLDIuMywxLjgsMy4xQzIxLjEsMTUsMjAuMiwxNSwyMCwxNVYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMTEsMTYuNSAxMCwxOS42IDEyLDE5LjYgMTEsMTYuNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMywzaC0xNnY1aDR2MmgtMTNjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUu''@;'; put 'put ''MWg2Ljd2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZcblx0XHRDMzMuMyw0LjMsMzIsMywzMC4zLDN6IE0xMy4xLDIyLjlsLTAuNS0xLjZIOS41bC0wLjYsMS42SDYuNUw5LjgsMTRoMi40bDMuMyw4LjlMMTMuMSwyMi45eiBNMjguMywxNXYyYy0xLjMsMC0yLjctMC40LTMuOS0xXG5cdFx0Yy0x''@;'; put 'put ''LjIsMC42LTIuNiwwLjktNCwxbC0wLjEtMmMwLjcsMCwxLjQtMC4xLDIuMS0wLjNjLTAuOS0wLjktMS41LTItMS44LTMuMmgyLjFjMC4zLDAuOSwwLjksMS42LDEuNiwyLjJjMS4xLTAuOSwxLjgtMi4yLDEuOS0zLjdcblx0XHRoLTZWOGgzVjZoMnYyaDMuM2wwLjEsMWMwLjEsMi4xLTAuNyw0''@;'; put 'put ''LjItMi4yLDUuN0MyNy4xLDE0LjksMjcuNywxNSwyOC4zLDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlVGV4dENvbG9yPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40NywzLjg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMUgx''@;'; put 'put ''OGExLjQ1LDEuNDUsMCwwLDAtMS40MiwxTDguNDIsMjEuNTZhMS4zNSwxLjM1LDAsMCwwLS4xNC41OSwxLDEsMCwwLDAsMSwxLDEuMTEsMS4xMSwwLDAsMCwxLjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4''@;'; put 'put ''LTEuMDgsMS41OSwxLjU5LDAsMCwwLS4xNC0uNTdaTTEzLjM2LDE1LjcxLDE4LDUuNDlsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNC4wNiIgeT0iMjUiIHdpZHRoPSIyOCIgaGVpZ2h0PSI4IiByeD0iMiIgcnk9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JykseS5DbHJTaGFwZUhpZ2hsaWdodGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNS44MiwyNi4wNmExLDEsMCwwLDEtLjcxLS4yOUw4LjY3LDE5LjMzYTEsMSwwLDAsMS0uMjktLjcxLDEsMSww''@;'; put 'put ''LDAsMSwuMjktLjcxTDIzLDMuNTRhNS41NSw1LjU1LDAsMSwxLDcuODUsNy44NkwxNi41MywyNS43N0ExLDEsMCwwLDEsMTUuODIsMjYuMDZabS01LTcuNDQsNSw1TDI5LjQ4LDEwYTMuNTQsMy41NCwwLDAsMCwwLTUsMy42MywzLjYzLDAsMCwwLTUsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC4zOCwyOC4yOEExLDEsMCwwLDEsOS42NywyOEw2LjQ1LDI0Ljc3YTEsMSwwLDAsMS0uMjItMS4wOWwyLjIyLTUuNDRhMSwxLDAsMCwxLDEuNjMtLjMzbDYuNDUsNi40NEExLDEsMCwwLDEsMTYuMiwyNmwtNS40NCwyLjIy''@;'; put 'put ''QTEuMzMsMS4zMywwLDAsMSwxMC4zOCwyOC4yOFpNOC4zMywyMy44MmwyLjI5LDIuMjgsMy40My0xLjRMOS43NCwyMC4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik04Ljk0LDMwaC01YTEsMSwwLDAsMS0uODQtMS41NWwzLjIy''@;'; put 'put ''LTQuOTRhMSwxLDAsMCwxLDEuNTUtLjE2bDMuMjEsMy4yMmExLDEsMCwwLDEsLjA2LDEuMzVMOS43LDI5LjY0QTEsMSwwLDAsMSw4Ljk0LDMwWk01Ljc4LDI4SDguNDdMOSwyNy4zNGwtMS43LTEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxy''@;'; put 'put ''ZWN0IHg9IjMuMDYiIHk9IjMxIiB3aWR0aD0iMzAiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz4nKSx5LkNsclNoYXBlT3V0ZGVudD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmEx''@;'; put 'put ''LDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu''@;'; put 'put ''ICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNOS41Niwy''@;'; put 'put ''Mi41NGExLDEsMCwwLDEtLjctLjNMNC42MSwxOGw0LjI1LTQuMjRhMSwxLDAsMCwxLDEuNDEsMS40MUw3LjQ0LDE4bDIuODMsMi44M2ExLDEsMCwwLDEtLjcxLDEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLHkuQ2xyU2hhcGVJbmRlbnQ9KDAs''@;'; put 'put ''Xy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwx''@;'; put 'put ''LDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTUuNTYsMjIuNTRhMSwxLDAsMCwxLS43LTEuNzFMNy42OCwxOCw0Ljg2LDE1LjE3YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMEwxMC41MSwxOCw2LjI3LDIyLjI0QTEsMSwwLDAsMSw1LjU2''@;'; put 'put ''LDIyLjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSx5LkNsclNoYXBlU3RyaWtldGhyb3VnaD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuODgsMTkuOTJoLTMwYTEsMSwwLDEsMSwwLTJoMzBhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjI3LDE1Ljg2YTEyLjksMTIuOSwwLDAsMSwxLjI5LS41MkE1LjY5LDUuNjksMCwwLDEsMTAuMzksMTVhMy4xOCwzLjE4LDAsMCwxLDIuNzUsMS4xMUE0LjQ0LDQuNDQsMCwwLDEsMTQsMTguODV2LjQ5''@;'; put 'put ''YTEzLjgzLDEzLjgzLDAsMCwwLTQuMjktLjc0LDYuMTksNi4xOSwwLDAsMC0yLjU5LjU0QTUsNSwwLDAsMCw1LjgxLDIwSDE1Ljg4VjE4Ljg1YTUuNjcsNS42NywwLDAsMC0xLjM3LTQsNS4xNiw1LjE2LDAsMCwwLTQtMS40OSwxMCwxMCwwLDAsMC0zLjkxLjg4Ljg3Ljg3LDAsMCwwLS40NCwx''@;'; put 'put ''LjE4QS44NC44NCwwLDAsMCw3LjI3LDE1Ljg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIxLDIwYTUuOTQsNS45NCwwLDAsMSwuNTQtMi4zMSw0LjM1LDQuMzUsMCwwLDEsMS41OC0xLjgzLDQuMjcsNC4yNywwLDAsMSw0LjU5''@;'; put 'put ''LDAsNC40Nyw0LjQ3LDAsMCwxLDEuNTcsMS44M0E2LjEyLDYuMTIsMCwwLDEsMjkuODUsMjBoMmE3LjczLDcuNzMsMCwwLDAtLjc4LTMuMTksNiw2LDAsMCwwLTIuMTgtMi40NSw1Ljc0LDUuNzQsMCwwLDAtMy4xLS44OCw1LjM5LDUuMzksMCwwLDAtMi44LjczLDUuNTUsNS41NSwwLDAsMC0y''@;'; put 'put ''LDIuMDVWMTBhLjg3Ljg3LDAsMCwwLS44Ni0uODZIMjBhLjg3Ljg3LDAsMCwwLS44Ni44NlYyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0yOS42NywyMmE1LjYxLDUuNjEsMCwwLDEtLjM2LDEuMDcsNC40Nyw0LjQ3LDAsMCwx''@;'; put 'put ''LTEuNTcsMS44NSw0LjMyLDQuMzIsMCwwLDEtNC41OSwwLDQuMzUsNC4zNSwwLDAsMS0xLjU4LTEuODVBNS42NCw1LjY0LDAsMCwxLDIxLjIsMjJIMTkuMDl2NC4xM0EuODcuODcsMCwwLDAsMjAsMjdoLjJhLjg3Ljg3LDAsMCwwLC44Ni0uODZWMjQuNTFhNS41OCw1LjU4LDAsMCwwLDIsMi4w''@;'; put 'put ''Niw1LjQ4LDUuNDgsMCwwLDAsMi44LjcyLDUuNjYsNS42NiwwLDAsMCwzLjEtLjg4QTUuODgsNS44OCwwLDAsMCwzMS4wOSwyNCw3LjA5LDcuMDksMCwwLDAsMzEuNzMsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTQsMjJ2''@;'; put 'put ''Ljc2YTMuMzQsMy4zNCwwLDAsMS0xLjYyLDIsNS4zNCw1LjM0LDAsMCwxLTIuNjkuNzIsMy43OCwzLjc4LDAsMCwxLTIuMzYtLjcsMi4yNCwyLjI0LDAsMCwxLS45NC0xLjksMi4yOSwyLjI5LDAsMCwxLC4yLS45MUg0LjYyYTQsNCwwLDAsMC0uMTMsMSwzLjgzLDMuODMsMCwwLDAsMS4zNSwz''@;'; put 'put ''LjA2QTUuMTUsNS4xNSwwLDAsMCw5LjMxLDI3LjIsNiw2LDAsMCwwLDEyLDI2LjU3YTQuNjIsNC42MiwwLDAsMCwyLTEuNzRWMjZhLjg2Ljg2LDAsMCwwLC44Ni44NkgxNWEuODYuODYsMCwwLDAsLjg2LS44NlYyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01''@;'; put 'put ''Ii8+JykseS5DbHJTaGFwZVN1YnNjcmlwdD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNTUsMThsNi44LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0TDEzLDE5LjkxLDYuNiwyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4x''@;'; put 'put ''NywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNTUsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjloMEExLjE3LDEuMTcsMCwwLDEsNi42Myw4bDYuNDQsOC4xM0wxOS41LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMywzMS44LDI3LjQ5LDI4YTkuOSw5LjksMCwwLDAsMS44OC0yLjA1QTMuNDQsMy40NCwwLDAsMCwzMCwyNGEyLjM1LDIuMzUsMCwwLDAtLjM1LTEuMjcsMi40NCwyLjQ0LDAsMCwwLTEtLjg0LDIuOSwy''@;'; put 'put ''LjksMCwwLDAtMS4yNi0uMjgsMy4zNiwzLjM2LDAsMCwwLTEuODMuNSw1LjY0LDUuNjQsMCwwLDAtMS40OCwxLjQybC0xLS44MWE1LjExLDUuMTEsMCwwLDEsNC4zNi0yLjM3LDQuMzUsNC4zNSwwLDAsMSwyLC40NSwzLjQzLDMuNDMsMCwwLDEsMiwzLjE4LDQuNDUsNC40NSwwLDAsMS0uNjgs''@;'; put 'put ''Mi4zNSwxMC45LDEwLjksMCwwLDEtMi4yNCwyLjQ2bC0zLjI0LDIuODFIMzEuNVYzM0gyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JykseS5DbHJTaGFwZVN1cGVyc2NyaXB0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40MywxOGw2Ljc5''@;'; put 'put ''LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0bC02LjQ0LTguMTNMNi40NywyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNDMsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjlo''@;'; put 'put ''MEExLjIsMS4yLDAsMCwxLDYuNTEsOGw2LjQzLDguMTNMMTkuMzgsOGExLjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLjg1LDE0LjQ3bDQu''@;'; put 'put ''NTEtMy44NWE5LjM3LDkuMzcsMCwwLDAsMS44OC0yLDMuNDMsMy40MywwLDAsMCwuNTktMS44NiwyLjI3LDIuMjcsMCwwLDAtLjM2LTEuMjcsMi4zOCwyLjM4LDAsMCwwLS45NS0uODMsMi43NywyLjc3LDAsMCwwLTEuMjYtLjI5LDMuMzksMy4zOSwwLDAsMC0xLjgzLjUsNS44Myw1LjgzLDAs''@;'; put 'put ''MCwwLTEuNDksMS40MmwtMS0uODFhNS4xMiw1LjEyLDAsMCwxLDQuMzYtMi4zNyw0LjM2LDQuMzYsMCwwLDEsMiwuNDUsMy40NywzLjQ3LDAsMCwxLDIsMy4xOEE0LjQ0LDQuNDQsMCwwLDEsMzAuNTgsOWExMS4xNCwxMS4xNCwwLDAsMS0yLjI0LDIuNDZMMjUuMSwxNC4zMWg2LjI4djEuMzNI''@;'; put 'put ''MjIuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLHkuVGV4dEVkaXRTaGFwZXM9e2JvbGQ6eS5DbHJTaGFwZUJvbGQsImJ1bGxldC1saXN0Ijp5LkNsclNoYXBlQnVsbGV0TGlzdCwiY2hlY2tib3gtbGlzdCI6eS5DbHJTaGFwZUNoZWNrYm94TGlz''@;'; put 'put ''dCwibnVtYmVyLWxpc3QiOnkuQ2xyU2hhcGVOdW1iZXJMaXN0LCJmb250LXNpemUiOnkuQ2xyU2hhcGVGb250U2l6ZSxpdGFsaWM6eS5DbHJTaGFwZUl0YWxpYywianVzdGlmeS10ZXh0Ijp5LkNsclNoYXBlSnVzdGlmeVRleHQsImNlbnRlci10ZXh0Ijp5LkNsclNoYXBlQ2VudGVyVGV4dCwi''@;'; put 'put ''YWxpZ24tbGVmdC10ZXh0Ijp5LkNsclNoYXBlQWxpZ25MZWZ0VGV4dCwiYWxpZ24tcmlnaHQtdGV4dCI6eS5DbHJTaGFwZUFsaWduUmlnaHRUZXh0LCJwYWludC1yb2xsZXIiOnkuQ2xyU2hhcGVQYWludFJvbGxlciwiYmxvY2stcXVvdGUiOnkuQ2xyU2hhcGVCbG9ja1F1b3RlLHRleHQ6eS5D''@;'; put 'put ''bHJTaGFwZVRleHQsdW5kZXJsaW5lOnkuQ2xyU2hhcGVVbmRlcmxpbmUsImFsaWduLWNlbnRlciI6eS5DbHJTaGFwZUFsaWduQ2VudGVyLCJhbGlnbi1sZWZ0Ijp5LkNsclNoYXBlQWxpZ25MZWZ0LCJhbGlnbi1yaWdodCI6eS5DbHJTaGFwZUFsaWduUmlnaHQsImFsaWduLWJvdHRvbSI6eS5D''@;'; put 'put ''bHJTaGFwZUFsaWduQm90dG9tLCJhbGlnbi1taWRkbGUiOnkuQ2xyU2hhcGVBbGlnbk1pZGRsZSwiYWxpZ24tdG9wIjp5LkNsclNoYXBlQWxpZ25Ub3AsbGFuZ3VhZ2U6eS5DbHJTaGFwZUxhbmd1YWdlLCJ0ZXh0LWNvbG9yIjp5LkNsclNoYXBlVGV4dENvbG9yLGhpZ2hsaWdodGVyOnkuQ2xy''@;'; put 'put ''U2hhcGVIaWdobGlnaHRlcixpbmRlbnQ6eS5DbHJTaGFwZUluZGVudCxvdXRkZW50OnkuQ2xyU2hhcGVPdXRkZW50LHN0cmlrZXRocm91Z2g6eS5DbHJTaGFwZVN0cmlrZXRocm91Z2gsc3Vic2NyaXB0OnkuQ2xyU2hhcGVTdWJzY3JpcHQsc3VwZXJzY3JpcHQ6eS5DbHJTaGFwZVN1cGVyc2Ny''@;'; put 'put ''aXB0fSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoeS5UZXh0RWRpdFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyI6Ci8qISoqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLHksSSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx5LlRyYXZlbFNoYXBlcz15LkNsclNoYXBlT25I''@;'; put 'put ''b2xpZGF5PXkuQ2xyU2hhcGVUcmFpbGVyPXkuQ2xyU2hhcGVGZXJyeT15LkNsclNoYXBlQ2FyYXZhbj15LkNsclNoYXBlQ2FtcGVydmFuPXkuQ2xyU2hhcGVCb2F0PXkuQ2xyU2hhcGVCaWN5Y2xlPXkuQ2xyU2hhcGVNYXBNYXJrZXI9eS5DbHJTaGFwZUNvbXBhc3M9eS5DbHJTaGFwZU1hcD15''@;'; put 'put ''LkNsclNoYXBlQ2FyPXkuQ2xyU2hhcGVBaXJwbGFuZT15LkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGls''@;'; put 'put ''cy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTt5LkNsclNoYXBlVHJ1Y2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwx''@;'; put 'put ''MkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjE5LjdhNi40NSw2LjQ1LDAsMCwxLDEuNTYtLjJjLjE1LDAsLjI5LDAsLjQ0LDBWMTRoNGEyLDIsMCwwLDEsMiwydjFIMjh2Mmg0djVIMjkuNmE0LjU0LDQuNTQsMCwwLDAtOC4zNCww''@;'; put 'put ''SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ5LDQuNDksMCwwLDAsOC45MiwwSDMzYTEsMSwwLDAsMCwxLTFWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgsMCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEs''@;'; put 'put ''MSwwLDQuNzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIuNS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MywyOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxMkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEs''@;'; put 'put ''MCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjIxLjQ5QTQuNDUsNC40NSwwLDAsMCwyMS4yNSwyNEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZIMjFhNC40OCw0LjQ4LDAsMCwwLDguOTEsMEgzNFYxNkE0LDQsMCwwLDAsMzAs''@;'; put 'put ''MTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcsMGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQyLDI4Wk0zMiwxN0gyNlYxNGg0YTIsMiwwLDAsMSwyLDJaIi8+JykseS5DbHJTaGFwZUFp''@;'; put 'put ''cnBsYW5lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuNzcsOC4xNmEyLjQzLDIuNDMsMCwwLDAtMS45LTJMMjgsNC44N2E0LjUsNC41LDAsMCwwLTMuNjUuNzlMNywxOC4zLDIuMTQsMTguMUExLjg2LDEu''@;'; put 'put ''ODYsMCwwLDAsLjkxLDIxLjQxbDUsMy45M2MuNi43MywxLC41OSwxMC45My00LjgybC45Myw5LjQyYTEuMzYsMS4zNiwwLDAsMCwuODUsMS4xOCwxLjQzLDEuNDMsMCwwLDAsLjU0LjEsMS41NCwxLjU0LDAsMCwwLDEtLjQxbDIuMzktMi4xOGExLjUyLDEuNTIsMCwwLDAsLjQ2LS44M0wyNS4y''@;'; put 'put ''LDE1LjljMy41Ny0yLDYuOTUtMy44OCw5LjM2LTUuMjVBMi40MywyLjQzLDAsMCwwLDM1Ljc3LDguMTZabS0yLjIuNzVjLTIuNSwxLjQyLTYsMy40MS05Ljc2LDUuNDdsLS40MS4yM0wyMS4wNywyNy4yOGwtMS40NywxLjM0TDE4LjUsMTcuMzIsMTcuMTcsMThDMTAsMjIsNy42MSwyMy4xNiw2''@;'; put 'put ''Ljc5LDIzLjUybC00LjMtMy40MSw1LjA4LjIyLDE4LTEzLjA2YTIuNTEsMi41MSwwLDAsMSwyLS40NWw1Ljg1LDEuMjZhLjQzLjQzLDAsMCwxLC4zNS4zN0EuNDIuNDIsMCwwLDEsMzMuNTcsOC45MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiBkPSJNNywxMi41NGwzLjU2LDEsMS42NC0xLjE5LTQtMS4xNkwxMCwxMC4wOWw1LjQ3LS4xNiwyLjMtMS42N0wxMCw4LjVhMS4yNSwxLjI1LDAsMCwwLS43LjE3TDYuNjcsMTAuMkExLjI4LDEuMjgsMCwwLDAsNywxMi41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LjI1LDExLjUsMTIsMTMuMTZsNi4zMi00LjU5LTkuMDcuMjZBLjUyLjUyLDAsMCwwLDksOC45MUw2LjEzLDEwLjU2QS41MS41MSwwLDAsMCw2LjI1LDExLjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzQuNTIsNi4zNiwyOC4yMiw1YTMuNzgsMy43OCwwLDAsMC0zLjA3LjY3TDYuMTIsMTkuNWwtNC41Ny0uMmExLjI1LDEuMjUsMCwwLDAtLjgzLDIuMjJsNC40NSwzLjUzYS41NS41NSwwLDAsMCwuNTMuMDljMS4yNy0uNDksNi0zLDEx''@;'; put 'put ''LjU5LTYuMDdsMS4xMiwxMS41MWEuNTUuNTUsMCwwLDAsLjkuMzdsMi41LTIuMDhhLjc2Ljc2LDAsMCwwLC4yNi0uNDVsMi4zNy0xMy4yOWM0LTIuMjIsNy44Mi00LjM3LDEwLjUxLTUuODlBMS41NSwxLjU1LDAsMCwwLDM0LjUyLDYuMzZaIi8+JykseS5DbHJTaGFwZUNhcj0oMCxnLmNscklj''@;'; put 'put ''b25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMyIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0y''@;'; put 'put ''Ni40NSwxNC4xN0EyMi4xLDIyLjEsMCwwLDAsMTkuMzgsN2E5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDctLjE0LjkyLS4yLDEuMzZBNCw0LDAsMCwwLDIsMTh2Ni4xM2EyLDIsMCwwLDAsMiwyVjIwSDRWMThhMiwyLDAsMCwxLDItMkgyNC43M0E3''@;'; put 'put ''LjI4LDcuMjgsMCwwLDEsMzIsMjMuMjdWMjRoLTJhNC41Myw0LjUzLDAsMSwwLC4zMywySDMyYTIsMiwwLDAsMCwyLTJ2LS43M0E5LjI4LDkuMjgsMCwwLDAsMjYuNDUsMTQuMTdaTTExLDE0SDYuOTNjMC0uMzEuMDktLjYzLjE1LTFBNi41Miw2LjUyLDAsMCwxLDExLDhoMFptMiwwVjcuNThh''@;'; put 'put ''OC4xNyw4LjE3LDAsMCwxLDUuMzYsMS4xNkExOSwxOSwwLDAsMSwyMy45LDE0Wk0yNS44LDI4LjM4YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI1LjgsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIGQ9Ik0xNC4xNywyNGE0LjUzLDQuNTMsMCwxLDAsLjMzLDJoNS4zYzAtLjA4LDAtLjE3LDAtLjI1QTYsNiwwLDAsMSwyMCwyNFpNMTAsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2Ljg3LDE0LjI4QTIyLjM2LDIyLjM2LDAsMCwwLDE5LjY1LDYuOWE5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDktLjE1LDEtLjIxLDEuNGgtMUEyLjU5LDIuNTksMCww''@;'; put 'put ''LDAsMiwxNi41OXY4LjU1YS44Ni44NiwwLDAsMCwuODYuODZINC41OWMwLS4xMywwLS4yNiwwLS4zOWE1Ljc3LDUuNzcsMCwwLDEsNy43MS01LjQ1bC0xLDFhNC41Niw0LjU2LDAsMCwwLTQuMzQsMS41OCwzLDMsMCwwLDAtLjYzLjkzQTQuNSw0LjUsMCwxLDAsMTQuODIsMjZoNS40OGMwLS4x''@;'; put 'put ''MywwLS4yNiwwLS4zOUE1Ljc3LDUuNzcsMCwwLDEsMjgsMjAuMTZsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwzMC41MywyNmgyLjYxYS44Ni44NiwwLDAsMCwuODYtLjg2VjIzLjM2QTkuMzksOS4zOSwwLDAsMCwyNi44Nywx''@;'; put 'put ''NC4yOFpNMTIsMTRIOGMwLS4zNS4xLS43MS4xNi0xLjA3YTYuNTIsNi41MiwwLDAsMSwzLjg3LTVoMFpNMTAuMzYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAuMzYsMjguMzZaTTE5LDE5SDE2VjE3aDNabS02LTVWNy40N2E4LjE2LDguMTYsMCwwLDEsNS40''@;'; put 'put ''LDEuMTVBMTkuMTUsMTkuMTUsMCwwLDEsMjQsMTRaTTI2LjA2LDI4LjM2YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI2LjA2LDI4LjM2WiIvPicpLHkuQ2xyU2hhcGVNYXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMy41OSw2LjE5QTEsMSwwLDAsMCwzMi43LDZMMjMuMDksOSwxMy40Niw0LjExYTEsMSwwLDAsMC0uODQsMEwyLjYyLDguMkExLDEsMCwwLDAsMiw5LjEzVjI5LjYxYTEsMSwwLDAsMCwxLjM4LjkyTDEzLDI2LjU4bDkuNTksNC45MmExLDEsMCwwLDAsLjQ2LjEx''@;'; put 'put ''LDEsMSwwLDAsMCwuMywwbDEwLTMuMTJhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMuNTksNi4xOVpNMzIsMjYuNzVsLTguMzIsMi42VjI3LjA2aC0xLjZ2MmwtOC40LTQuMzFWMjMuMDZoLTEuNnYxLjcyTDQsMjguMTFWOS43OWw4LjA4LTMuMzNWOC44MWgxLjZWNi40N2w4LjQsNC4z''@;'; put 'put ''djIuMWgxLjZWMTFMMzIsOC4zNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjIuMDgiIHk9IjE1LjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjIuMDgiIHk9IjIxLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTIuMDgiIHk9''@;'; put 'put ''IjExLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTIuMDgiIHk9IjE3LjEzIiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuNzUiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMuMzEsNy4zNSwyNSw5Ljk0VjE0SDIzVjEwLjI5TDE0LDUuNjhWOUgxMlY1LjI3bC05LjY3LDRBLjUzLjUzLDAsMCwwLDIsOS43NVYzMC40NWEuNTMuNTMsMCwwLDAsLjc0LjQ5TDEyLDI3LjEyVjIz''@;'; put 'put ''aDJ2NC41M2w5LDQuNjFWMjhoMnYzLjc5bDguNjMtMi43YS41My41MywwLDAsMCwuMzctLjUxVjcuODZBLjUzLjUzLDAsMCwwLDMzLjMxLDcuMzVaTTE0LDIxSDEyVjE3aDJabTAtNkgxMlYxMWgyWk0yNSwyNkgyM1YyMmgyWm0wLTZIMjNWMTZoMloiLz4nKSx5LkNsclNoYXBlQ29tcGFzcz0o''@;'; put 'put ''MCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuODIsMTUuMzFoMEwxMC40Niw5Yy0uNDYtLjI2LTEuMTEuMzctLjg2Ljg0bDYuMTUsMTAuNTYsMTAuNTYsNi4xNWEuNjYuNjYsMCwwLDAsLjg0LS44NlptLTQsNCwzLTMsNC41NSw3LjQ0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0xLDI5Ljk1VjI5LjUzSDE3djIuNDJBMTQsMTQsMCwwLDEsNC4wNSwxOUg2LjQ3VjE3SDQuMDVBMTQsMTQsMCwwLDEsMTcsNC4wNVY2LjQ3aDJW''@;'; put 'put ''NC4wNUExNCwxNCwwLDAsMSwzMS45NSwxN0gyOS41M3YyaDIuNDJBMTQsMTQsMCwwLDEsMTksMzEuOTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDJaTTYuNDcsMTlINC4wNWMwLS4zMy0uMDUtLjY2LS4wNS0xczAtLjY3LjA1LTFINi40N1pNMTcsNC4wNWMuMzMsMCwuNjYtLjA1LDEtLjA1cy42NywwLDEsLjA1VjYuNDdIMTdabTIsMjcuOWMtLjMzLDAtLjY2LjA1LTEsLjA1cy0uNjcsMC0xLS4wNVYyOS41M2gyWm04LTUuNThhLjU5''@;'; put 'put ''LjU5LDAsMCwxLS42OS4xNkwxNS43NSwyMC4zOCw5LjYsOS44MmMtLjI1LS40Ny4zOS0xLjEuODYtLjg0bDEwLjM3LDYuMzNoMGw2LjMzLDEwLjM3QS41OS41OSwwLDAsMSwyNywyNi4zN1pNMjkuNTMsMTlWMTdoMi40MmMwLC4zMy4wNS42Ni4wNSwxczAsLjY3LS4wNSwxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTYuNzcgMTkuMzUgMjQuMzUgMjMuNzcgMTkuOCAxNi4zMyAxNi43NyAxOS4zNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBl''@;'; put 'put ''TWFwTWFya2VyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMu''@;'; put 'put ''NzMtMy43M0EzLjczLDMuNzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDEx''@;'; put 'put ''LjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlpNMjMuNTksMjRsLS4zNi41M2MtMS43MiwyLjU4''@;'; put 'put ''LTQsNS40Ny01LjIzLDYuOS0xLjE4LTEuNDMtMy41MS00LjMyLTUuMjMtNi45TDEyLjQyLDI0Yy0xLjc3LTIuNjQtNC4yLTYuMjUtNC4yLTEwLjMxYTkuNzgsOS43OCwwLDEsMSwxOS41NiwwQzI3Ljc4LDE3Ljc5LDI1LjM2LDIxLjQsMjMuNTksMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMuNzMtMy43M0EzLjczLDMu''@;'; put 'put ''NzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjkuNzcsMTMuNDlhNy40OSw3LjQ5LDAsMCwxLTItLjMzYzAsLjE5LDAsLjM4LDAsLjU3LDAsNC4w''@;'; put 'put ''Ni0yLjQyLDcuNjctNC4xOSwxMC4zMWwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFBOS43Nyw5Ljc3LDAsMCwxLDIyLjU2LDUuMDlhNy40NSw3LjQ1LDAs''@;'; put 'put ''MCwxLC41Mi0yQTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1''@;'; put 'put ''LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExMS43OSwxMS43OSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4''@;'; put 'put ''bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQTExLjc5LDExLjc5LDAsMCwwLDE4LDJabTAsMTdhNi41Niw2LjU2LDAsMSwxLDYuNTYtNi41NkE2LjU2LDYuNTYsMCwwLDEsMTgsMTlaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNMjkuNzcsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI0LjM4LDExYTYuNTgsNi41OCwwLDEsMS0xLjYxLTMsNy40Miw3LjQyLDAsMCwxLC4zMS00Ljg0QTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42''@;'; put 'put ''MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgY3g9IjE4IiBjeT0iMTIuNDQiIHI9IjMuNzMiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JykseS5DbHJTaGFwZUJpY3ljbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTguNSwyOS42NUE2LjUxLDYuNTEsMCwwLDEsMiwyMy4xNWE2LjM5LDYuMzksMCwwLDEsNi41LTYuMzZBNi4zOSw2LjM5LDAsMCwxLDE1LDIzLjE1LDYuNTEs''@;'; put 'put ''Ni41MSwwLDAsMSw4LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCw4LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjcuNSwyOS42NWE2LjUxLDYuNTEsMCwwLDEtNi41LTYu''@;'; put 'put ''NSw2LjUsNi41LDAsMCwxLDEzLDBBNi41MSw2LjUxLDAsMCwxLDI3LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCwyNy41LDE4LjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LDI0''@;'; put 'put ''LjY2SDhhMSwxLDAsMCwxLS44OS0xLjQ1bDUtMTAsMS43OC45TDkuNjIsMjIuNzNIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cmVjdCB4PSIxMyIgeT0iMTIuNjgiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjkxIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjgsMjQuNjZhMSwxLDAsMCwxLS45NC0uNjZMMjIuMjksMTAuNjZIMjBhMSwxLDAsMCwxLTEtMSwxLDEsMCwwLDEsMS0uOTNoM2EuOTQuOTQsMCwwLDEsLjk0LjZsNSwxNGExLDEsMCwwLDEtLjYsMS4yN0ExLDEsMCwwLDEsMjgs''@;'; put 'put ''MjQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTMsMTQuNjZhMSwxLDAsMCwxLS43MS0uMjlsLTEuNy0xLjcxSDhhMSwxLDAsMCwxLTEtMSwuOTQuOTQsMCwwLDEsMS0xaDNhMS4wOCwxLjA4LDAsMCwxLC43NS4yN2wyLDJhMSwx''@;'; put 'put ''LDAsMCwxLDAsMS40MUExLDEsMCwwLDEsMTMsMTQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTUsMjEuOWMtMC4yLTItMS4yLTMuOC0yLjktNC45bC0yLjUsNC45SDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgLz48cGF0aCBkPSJNNy4yLDIzLjRjLTAuMi0wLjMtMC4yLTAuNywwLTFsMy4yLTYuM2MtMC42LTAuMi0xLjItMC4yLTEuOC0wLjJDNSwxNS45LDIsMTguOCwyLDIyLjRjMCwzLjYsMi45LDYuNSw2LjUsNi41XG5cdGMzLDAsNS42LTIuMSw2LjMtNUg4QzcuNywyMy45LDcuMywy''@;'; put 'put ''My43LDcuMiwyMy40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjEuOWgtNGMwLDAuMiwwLDAuMywwLDAuNWMwLDAuNS0wLjEsMS0wLjIsMS41SDE5VjIxLjl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0yNy41LDE1LjljLTAuMywwLTAuNiwwLTAuOSwwLjFsMi40LDYuNmMwLjIsMC41LTAuMSwxLjEtMC42LDEuM2MtMC4xLDAtMC4yLDAuMS0wLjMsMC4xYy0wLjQsMC0wLjgtMC4zLTAuOS0wLjdsLTIuNC02Ljdcblx0Yy0zLjIsMS42LTQuNSw1LjUtMyw4LjdjMS42LDMuMiw1''@;'; put 'put ''LjUsNC41LDguNywzYzMuMi0xLjYsNC41LTUuNSwzLTguN0MzMi4yLDE3LjMsMzAsMTUuOSwyNy41LDE1Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNC43LDE2LjdjMC42LTAuMywxLjMtMC41LDEuOS0wLjZsLTIuNy03LjRDMjMuOCw4''@;'; put 'put ''LjIsMjMuNCw4LDIzLDcuOWgtM2MtMC42LDAtMSwwLjUtMSwxLjFjMCwwLjUsMC40LDAuOSwxLDAuOVxuXHRjMCwwLDAsMCwwLDBoMi4zbDAuNywyaC05LjZsLTEuNy0xLjdDMTEuNSwxMC4xLDExLjMsMTAsMTEsMTBIOGMtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWgyLjZsMS4yLDEuMmwt''@;'; put 'put ''MS41LDNcblx0YzAuNiwwLjIsMS4zLDAuNSwxLjgsMC44bDEuNi0zLjJoMTBMMjQuNywxNi43eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSx5LkNsclNoYXBlQm9hdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuMSwyNy4xQzI4LDI3LDI2Ljks''@;'; put 'put ''MjcuNCwyNiwyOC4yYy0xLjEsMS4xLTIuOSwxLjEtNC4xLDBjLTEtMC43LTIuMS0xLjEtMy4zLTEuMWMtMS4yLTAuMS0yLjQsMC4zLTMuMywxLjFcblx0XHRDMTQuNywyOC43LDE0LDI5LDEzLjIsMjlzLTEuNS0wLjMtMi4xLTAuOGMtMS0wLjgtMi4yLTEuMi0zLjQtMS4ycy0yLjQsMC40LTMu''@;'; put 'put ''NCwxLjJDMy43LDI4LjcsMi44LDI5LDIsMjl2MlxuXHRcdGMxLjMsMC4xLDIuNi0wLjMsMy42LTEuMkM2LjIsMjkuMyw3LjEsMjksNy45LDI5YzAuNywwLDEuNSwwLjMsMi4xLDAuOGMxLjgsMS42LDQuNiwxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhcblx0XHRjMC43LDAsMS40''@;'; put 'put ''LDAuMywyLDAuOGMxLjksMS42LDQuNiwxLjYsNi41LDBjMC41LTAuNSwxLjMtMC44LDItMC44YzAuNywwLDEuNCwwLjMsMS45LDAuOGMwLjksMC43LDEuOSwxLjEsMywxLjJ2LTJcblx0XHRjLTEsMC0xLjItMC40LTEuNy0wLjhDMzEuNCwyNy41LDMwLjMsMjcuMSwyOS4xLDI3LjF6IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyM2MwLTAuNiwwLjUtMSwxLjEtMUgzMmwtMy41LDMuMWgwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4yLTAuMmMwLjctMC44LDAuNi0yLjEtMC4yLTIuOFxuXHRcdEMzMywyMC4y''@;'; put 'put ''LDMyLjYsMjAsMzIuMSwyMGgtMjVjLTEuNywwLTMsMS4zLTMsM3YzLjJjMC41LTAuNSwxLjItMC44LDEuOS0xLjFWMjN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOC45LDE5SDE1di03LjhjMC0wLjYtMC4zLTEuMi0wLjgtMS42QzEz''@;'; put 'put ''LjMsOC45LDEyLDkuMSwxMS40LDEwbC00LjEsNS45Yy0wLjQsMC42LTAuNCwxLjQtMC4xLDIuMUM3LjUsMTguNiw4LjIsMTksOC45LDE5XG5cdFx0eiBNMTMuMSwxMS4yTDEzLDE3SDguOUwxMy4xLDExLjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48''@;'; put 'put ''cGF0aCBkPSJNMjYsMThjMC40LTAuNiwwLjQtMS40LDAtMkwxOS43LDUuNmMtMC40LTAuNi0xLTEtMS43LTFjLTEuMSwwLTIsMC45LTIsMlYxOWg4LjNDMjUsMTksMjUuNywxOC42LDI2LDE4eiBNMTcuOSw2LjZcblx0XHRsNi40LDEwLjVoLTYuNFY2LjZ6IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzQsMzFjLTEuMS0wLjEtMi4xLTAuNS0zLTEuMmMtMC41LTAuNS0xLjItMC44LTItMC44Yy0wLjcsMC0xLjUsMC4zLTIsMC44Yy0wLjksMC44LTIsMS4xLTMuMSwxLjFjLTEuMiwwLTIuNC0wLjQtMy4zLTEuMVxuXHRjLTEuMi0x''@;'; put 'put ''LjEtMy0xLjEtNC4xLDBjLTAuOSwwLjgtMi4xLDEuMi0zLjQsMS4yYy0xLjIsMC0yLjMtMC40LTMuMi0xLjJjLTAuNi0wLjUtMS4zLTAuOC0yLTAuOGMtMC44LDAtMS43LDAuMy0yLjMsMC44XG5cdGMtMSwwLjgtMi4zLDEuMi0zLjUsMS4xVjI5YzAuOCwwLDEuNy0wLjMsMi4zLTAuOWMxLTAu''@;'; put 'put ''OCwyLjItMS4yLDMuNC0xLjFjMS4yLDAsMi40LDAuNCwzLjMsMS4yYzEuMiwxLjEsMywxLjEsNC4yLDBcblx0YzEuOS0xLjYsNC43LTEuNiw2LjUsMGMxLjIsMS4xLDMsMS4xLDQuMSwwYzAuOS0wLjgsMi4xLTEuMiwzLjMtMS4yYzEuMSwwLDIuMiwwLjQsMywxLjJDMzIuOCwyOC43LDMzLDI5''@;'; put 'put ''LDM0LDI5TDM0LDMxeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC4xLDI2LjJjMC42LTAuNSwxLjItMC44LDEuOS0xVjIzYzAtMC42LDAuNC0xLjEsMS0xLjFoMjVMMjguNCwyNWgwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJs''@;'; put 'put ''MC4yLTAuMlxuXHRjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhDMzIuOSwyMC4xLDMyLjQsMjAsMzIsMjBIN2MtMS43LDAtMywxLjMtMywzTDQuMSwyNi4yTDQuMSwyNi4yeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuOSwxOC45SDguOWMt''@;'; put 'put ''MS4xLDAtMi0wLjktMi0yYzAtMC40LDAuMS0wLjgsMC40LTEuMmw0LjEtNS44YzAuNi0wLjksMS45LTEuMSwyLjgtMC41YzAuNSwwLjQsMC44LDEsMC44LDEuNlYxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuMywxOC45SDE2VjYu''@;'; put 'put ''NGMwLTEuMSwwLjktMiwyLTJjMC43LDAsMS4zLDAuNCwxLjcsMUwyNiwxNS44YzAuNiwxLDAuMiwyLjItMC43LDIuN0MyNSwxOC43LDI0LjYsMTguOCwyNC4zLDE4Ljlcblx0TDI0LjMsMTguOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JykseS5DbHJTaGFw''@;'; put 'put ''ZUNhbXBlcnZhbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOS41LDI0QzkuNSwyNCw5LjUsMjQsOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41YzAsMCwwLDAsMCwwQzYsMjkuNCw3LjYsMzEsOS41LDMxYzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMxMS40LDI0LDkuNSwyNHog''@;'; put 'put ''TTkuNSwyOUM4LjcsMjksOCwyOC4zLDgsMjcuNVM4LjcsMjYsOS41LDI2czEuNSwwLjcsMS41LDEuNVMxMC4zLDI5LDkuNSwyOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMy41LDI0QzIzLjUsMjQsMjMuNSwyNCwyMy41LDI0Yy0x''@;'; put 'put ''LjksMC0zLjUsMS42LTMuNSwzLjVjMCwwLDAsMCwwLDBjMCwxLjksMS41LDMuNSwzLjUsMy41YzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMyNS40LDI0LDIzLjUsMjR6IE0yMy41LDI5Yy0wLjgsMC0xLjUtMC43LTEuNS0xLjVzMC43LTEuNSwxLjUtMS41czEuNSwwLjcsMS41LDEuNVMy''@;'; put 'put ''NC4zLDI5LDIzLjUsMjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsMjAuMVYyMGgtMC4xbC0zLjUtNS41QzMxLDEzLjYsMzIsMTIsMzIsMTAuM1Y5LjdDMzIsNy4xLDI5LjksNSwyNy4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00''@;'; put 'put ''LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDNcblx0XHR2MTdoMlYxMWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIuN0gyNHY5aDcuOFxuXHRcdGwwLjIsMC4zVjI1''@;'; put 'put ''YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0xLjMsMy0zdi0zLjNMMzMsMjAuMXogTTI2LDIwdi01aDEuNWwzLjEsNUgyNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwLDIyIDIyLDIyIDIyLDEzIDE1LDEzIDE1LDI4IDE3LDI4IDE3LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBk''@;'; put 'put ''PSJNNiwyMGg3di03SDZWMjB6IE04LDE1aDN2M0g4VjE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTkuNSwyNEM3LjYsMjQsNiwyNS42LDYsMjcuNVM3LjYsMzEsOS41LDMxYzAsMCwwLDAsMCwwYzEuOSwwLDMuNS0xLjYsMy41LTMu''@;'; put 'put ''NWMwLDAsMC0wLjEsMC0wLjFDMTMsMjUuNSwxMS40LDI0LDkuNSwyNHoiXG5cdFx0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMjMuNSIgY3k9IjI3LjUiIHI9IjMuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMjkuNSwxNC41QzMxLDEzLjYsMzIsMTIsMzIsMTAuMlY5LjdjMCwwLDAsMCwwLTAuMUMzMiw3LDI5LjksNSwyNy4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDN2MTdcblx0XHRoMlYxMWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5''@;'; put 'put ''LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIuN0gyN2gtM3Y5aDcuOFxuXHRcdGwwLjIsMC4zVjI1YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0xLjMsMy0zdi0zLjNMMjkuNSwxNC41eiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cmVjdCB4PSIxOSIgeT0iOSIgd2lkdGg9IjcuOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjEuOSwyMiAyMS45LDEzIDE1LDEz''@;'; put 'put ''IDE1LDI4IDE2LjksMjggMTYuOSwxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cmVjdCB4PSI2IiB5PSIxMyIgd2lkdGg9IjYuOSIgaGVpZ2h0PSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLHkuQ2xy''@;'; put 'put ''U2hhcGVDYXJhdmFuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy41LDIxQzExLDIxLDksMjMsOSwyNS41czIsNC41LDQuNSw0LjVjMi41LDAsNC41LTIsNC41LTQuNUMxOCwyMywxNiwyMSwxMy41LDIxeiBNMTMuNSwyOGMtMS40LDAtMi41LTEuMS0yLjUtMi41XG5cdFx0czEuMS0y''@;'; put 'put ''LjUsMi41LTIuNXMyLjUsMS4xLDIuNSwyLjVTMTQuOSwyOCwxMy41LDI4eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0ydi03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41''@;'; put 'put ''SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0XHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSwwLjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgz''@;'; put 'put ''djEwaC0zdjJoMTNcblx0XHRjMC42LDAsMS0wLjQsMS0xUzMzLjYsMjQsMzMsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMTJIN3Y2aDlWMTJ6IE0xNCwxNkg5di0yaDVWMTZ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTMuNSwzMEMxMSwzMCw5LDI4LDksMjUuNXMyLTQuNSw0LjUtNC41czQuNSwyLDQuNSw0LjVDMTgsMjgsMTYsMzAsMTMuNSwzMHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0y''@;'; put 'put ''di03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0Yy0wLjYsMC0xLTAuNC0xLTFWOWMwLTAuNiwwLjQtMSwxLTFoMTguOGMwLjQsMCwwLjcsMC4yLDAuOSww''@;'; put 'put ''LjVsNC4yLDcuNWMwLjEsMC4xLDAuMSwwLjMsMC4xLDAuNVYyNGgtNFYxMmgtN3Y4aDJ2LTZoM3YxMGgtM3YyaDEzXG5cdGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE2LDE4SDd2LTZo''@;'; put 'put ''OVYxOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JykseS5DbHJTaGFwZUZlcnJ5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwyNS4xYy0xLjIsMC0yLjMsMC40LTMuMywxLjFjMCwwLDAsMCwwLDBjLTEuMSwxLjEtMywxLjEtNC4xLDBjLTAuOS0w''@;'; put 'put ''LjgtMi4xLTEuMi0zLjMtMS4yYy0xLjIsMC0yLjMsMC40LTMuMiwxLjJcblx0XHRjLTEuMiwxLjEtMywxLjEtNC4yLDBDMTAsMjUuNCw4LjgsMjUsNy42LDI1Yy0xLjIsMC0yLjQsMC40LTMuNCwxLjFDMy42LDI2LjcsMi44LDI3LDIsMjd2MmMxLjMsMC4xLDIuNS0wLjQsMy40LTEuMlxuXHRc''@;'; put 'put ''dEM2LjEsMjcuMyw2LjksMjcsNy43LDI3YzAuOCwwLDEuNSwwLjMsMi4xLDAuOGMxLjksMS42LDQuNywxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS41LDAuMywyLjEsMC44XG5cdFx0YzEuOSwxLjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhj''@;'; put 'put ''MC43LDAsMS41LDAuMywyLDAuOGMwLjksMC43LDIsMS4xLDMuMSwxLjJ2LTEuOWMtMC43LDAtMS40LTAuMy0xLjktMC45XG5cdFx0QzMxLjMsMjUuNCwzMC4xLDI1LDI5LDI1LjF6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNS45LDIz''@;'; put 'put ''LjJWMjBIMzJsLTMuNSwzaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNS0wLjYsMC41LTEuNCwwLjItMi4xYy0wLjQtMC43LTEtMS0xLjgtMWgtNC40XG5cdFx0TDIyLjUsMTFIMTdjLTEuNywwLTMsMS4zLTMsM2gtMlY4LjFINnY2LjFjLTEuMiwwLjQtMiwx''@;'; put 'put ''LjUtMiwyLjh2MS4xVjIwdjQuM2wwLjEtMC4xQzQuNiwyMy43LDUuMiwyMy40LDUuOSwyMy4yeiBNOCwxMGgydjRIOFYxMHpcblx0XHQgTTYsMTdjMC0wLjYsMC40LTEsMS0xaDl2LTJjMC0wLjYsMC40LTEsMS0xaDVsMC42LDFIMTh2Mmg1LjhsMS4yLDIuMUg2VjE3eiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI4LjIsMjVjLTEuMiwwLTIuNCwwLjQtMy4zLDEuMmMtMS4yLDEuMS0zLDEuMS00LjEsMGMtMS45LTEuNi00LjYtMS42LTYuNSwwYy0xLjIsMS4xLTIuOSwxLjEtNC4xLDBcblx0XHRjLTAuOS0wLjgtMi0xLjItMy4y''@;'; put 'put ''LTEuMmMtMS4yLDAtMi4zLDAuNC0zLjIsMS4yQzMuNCwyNi43LDIuNywyNywyLDI3djJjMS4xLTAuMSwyLjItMC41LDMuMS0xLjJDNS42LDI3LjMsNi4zLDI3LDcsMjdcblx0XHRjMC43LDAsMS41LDAuMywyLDAuOGMxLjksMS42LDQuNywxLjYsNi42LDBjMC42LTAuNSwxLjMtMC44LDIuMS0w''@;'; put 'put ''LjhjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMFxuXHRcdGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjYsMC4zLDIuMSwwLjhjMC45LDAuOCwyLjIsMS4zLDMuNCwxLjJ2LTJjLTAuOCwwLTEuNi0wLjMtMi4yLTAuOEMzMC43LDI1LjQsMjkuNSwy''@;'; put 'put ''NSwyOC4yLDI1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNS44LDIzLjJ2LTMuM2gyNi4xTDI4LjQsMjNoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMS0wLjJjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhjLTAuMy0wLjMt''@;'; put 'put ''MC44LTAuNC0xLjItMC40XG5cdFx0aC00LjFsLTUuNC03aC01LjVjLTEuNywwLTMsMS4zLTMsM2gtMlY4SDZ2Ni4yYy0xLjIsMC40LTIuMSwxLjUtMi4xLDIuOGwwLDcuMmwwLjEsMEM0LjUsMjMuNyw1LjEsMjMuNCw1LjgsMjMuMnogTTE3LjksMTRoNC4yXG5cdFx0bDEuNCwyaC01LjdWMTR6''@;'; put 'put ''IE03LjksMTBoMnY0aC0yVjEweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlVHJhaWxlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42''@;'; put 'put ''LDUuOC01LjhTMTguMiwxOS4yLDE1LDE5LjJ6IE0xNSwyOS4yYy0yLjMsMC00LjItMS45LTQuMi00LjJcblx0XHRzMS45LTQuMiw0LjItNC4yczQuMiwxLjksNC4yLDQuMlMxNy4zLDI5LjIsMTUsMjkuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxy''@;'; put 'put ''ZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQuMywzLjcsMjYsNS45LDI2SDd2LTJINS45Yy0xLDAtMS44LTAuOC0xLjkt''@;'; put 'put ''MS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjksMS45SDIzdjJoMS4xXG5cdFx0YzAsMCwwLDAsMCwwYzIuMSwwLDMuOC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXogTTI2LDEzSDR2LTJoMjJWMTN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAsMS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0YzAsMCwwLDAsMCwwYzIuMSwwLDMu''@;'; put 'put ''OC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUuOCwyLjYtNS44LDUuOHMyLjYsNS44LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44bDAs''@;'; put 'put ''MEMyMC44LDIxLjgsMTguMiwxOS4yLDE1LDE5LjJ6IE0xNiwyNmgtMnYtMmgyVjI2eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSx5LkNsclNoYXBlT25Ib2xpZGF5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC4wOCwyLjM0Yy04LjgyLDAtMTYs''@;'; put 'put ''Ni4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0QTE3LjkxLDE3LjkxLDAsMCwwLDIzLDI5LjY2bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uMywxLDEsMCwwLDAsLjE2LS41NFYyNS42MWExMywxMywwLDAsMCw0LTkuMjdDMzQuMDgsOC42MiwyNi45LDIuMzQsMTguMDgsMi4zNFpNMjguMzcsMjQu''@;'; put 'put ''NDVhMSwxLDAsMCwwLS4zMi43M3Y1LjM0bC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTEsMTYsMTYsMCwwLDEtNC43Ni43MmMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjEsMTEuMSwwLDAsMSwyOC4zNywyNC40NVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4xLDE1LjgyLDMxLDE1LjY3LDI4LjUsMTMuNDRhMy4yNSwzLjI1LDAsMCwwLTIuMzktLjg0bC01LjM4LjM0LTMuNTktM2EuODEuODEsMCwwLDAtLjUyLS4xOUgxMy41NmEuNzguNzgsMCwwLDAtLjY5LjQu''@;'; put 'put ''NzcuNzcsMCwwLDAsMCwuNzlsMS4zNiwyLjQ0LTQuNzEuMjksMS4zMSwxLjUyLDE1LjM5LTFhMS42NSwxLjY1LDAsMCwxLDEuMjIuNDNsMi4zNiwyLjEzYS4xMS4xMSwwLDAsMSwwLC4wN2MwLC4wNi0uMDkuMDUtLjEuMDZIMjEuODJsLS4zNS4zNy01LjE5LDUuNTNIMTQuNjRsMi43My01LjlI''@;'; put 'put ''OC41NEw3LjEzLDE0LjE2LDYuNTEsMTNhLjguOCwwLDAsMC0xLS4yQS44MS44MSwwLDAsMCw1LjIsMTMuOWwyLDMuOTRhMS4yMSwxLjIxLDAsMCwwLDEuMDguNjVoNi41N2wtMS45NCw0LjE4QTEuMiwxLjIsMCwwLDAsMTMsMjMuODNhMS4yMiwxLjIyLDAsMCwwLDEsLjU2aDIuNDNhMS4xNywx''@;'; put 'put ''LjE3LDAsMCwwLC44OC0uMzlsNS4xOC01LjUxaDcuMTZhMS42NSwxLjY1LDAsMCwwLDEuNTItLjkxQTEuNzQsMS43NCwwLDAsMCwzMS4xLDE1LjgyWk0xNC45MiwxMS4zMWgxLjQxbDIuMDksMS43N0wxNiwxMy4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''Ii8+XG4gIFxuICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE3LjkxLDE3LjkxLDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uM0ExLDEsMCwwLDAsMzAsMzIuNVYyNS43N2ExMywxMywwLDAsMCw0LTkuMjdDMzQs''@;'; put 'put ''OC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOS44NCwxOEgyMS41MWEuNDIuNDIsMCwwLDAtLjMuMTNsLTUuMyw1LjY0YS4zOS4zOSwwLDAsMS0uMjkuMTNIMTMuMTlhLjQxLjQxLDAsMCwxLS4zNy0uNThsMi40Ny01LjMySDcuNDZhLjQyLjQyLDAsMCwxLS4zNi0uMjJsLTIuNy01SDYuMjRhLjUz''@;'; put 'put ''LjUzLDAsMCwxLC4zOS4xOGwxLjU2LDEuNjlhLjM4LjM4LDAsMCwwLC4zMy4xNGw2LjE4LS4zOC0yLTMuNTVoMi44OWEuNDcuNDcsMCwwLDEsLjMxLjExTDE5LjYzLDE0bDYuNjktLjM1YTIuNDQsMi40NCwwLDAsMSwxLjgxLjYzbDIuNDcsMi4yM0EuOTIuOTIsMCwwLDEsMjkuODQsMThaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLHkuVHJhdmVsU2hhcGVzPXt0cnVjazp5LkNsclNoYXBlVHJ1Y2ssYWlycGxhbmU6eS5DbHJTaGFwZUFpcnBsYW5lLGNhcjp5LkNsclNoYXBlQ2FyLG1hcDp5LkNsclNoYXBlTWFwLGNvbXBhc3M6eS5DbHJTaGFw''@;'; put 'put ''ZUNvbXBhc3MsIm1hcC1tYXJrZXIiOnkuQ2xyU2hhcGVNYXBNYXJrZXIsYmljeWNsZTp5LkNsclNoYXBlQmljeWNsZSxib2F0OnkuQ2xyU2hhcGVCb2F0LGNhbXBlcnZhbjp5LkNsclNoYXBlQ2FtcGVydmFuLGNhcmF2YW46eS5DbHJTaGFwZUNhcmF2YW4sZmVycnk6eS5DbHJTaGFwZUZlcnJ5''@;'; put 'put ''LHRyYWlsZXI6eS5DbHJTaGFwZVRyYWlsZXIsIm9uLWhvbGlkYXkiOnkuQ2xyU2hhcGVPbkhvbGlkYXl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LlRyYXZlbFNoYXBlcywicGxhbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UcmF2ZWxTaGFwZXMuYWlycGxhbmUpKSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoeS5UcmF2ZWxTaGFwZXMsImF1dG8iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoeS5UcmF2ZWxTaGFwZXMuY2FyKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKHkuVHJh''@;'; put 'put ''dmVsU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMv''@;'; put 'put ''c3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAseS5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIF8oZyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZh''@;'; put 'put ''bHVlOmd9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3Jj''@;'; put 'put ''L3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgseSxJKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkuY2xySWNvblNWRz12b2lkIDA7eS5jbHJJY29uU1ZHPWZ1bmN0aW9uIHcoUCl7dmFyIEY9IiI7cmV0dXJuIFAuaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKEYrPSJjYW4tYmFkZ2UgIiksUC5pbmRl''@;'; put 'put ''eE9mKCItLWFsZXJ0ZWQiKT4tMSYmKEYrPSJjYW4tYWxlcnQgIiksUC5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoRis9Imhhcy1zb2xpZCAiKSwoRj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK0YrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4''@;'; put 'put ''TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAz''@;'; put 'put ''NiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK1ArIjwvc3ZnPiJ9''@;'; put 'put ''fX0pfSwzNjA5NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST17fTt5LnIoSSkseS5kKEkse2FycmF5QXZnOigpPT5McWUsYXJyYXlFYWNoOigpPT5ZbixhcnJheUZpbHRlcjooKT0+SW0sYXJyYXlGbGF0dGVuOigpPT5tMmUsYXJyYXlNYXA6KCk9PnlzLGFycmF5TWF4OigpPT5JcWUs''@;'; put 'put ''YXJyYXlNaW46KCk9PlJxZSxhcnJheVJlZHVjZTooKT0+cXUsYXJyYXlTdW06KCk9PmcyZSxhcnJheVVuaXF1ZTooKT0+djJlLGV4dGVuZEFycmF5OigpPT5sJCxnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PmMkLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5PcWUsZ2V0VW5pb25PZkFy''@;'; put 'put ''cmF5czooKT0+UHFlLHBpdm90OigpPT5oRSxzdHJpbmdUb0FycmF5OigpPT51JCx0bzJkQXJyYXk6KCk9PnAyZX0pO3ZhciBfPXt9O3kucihfKSx5LmQoXyx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5TMmUsaXNEZWZpbmVkOigpPT5QYSxpc0VtcHR5OigpPT5VYyxpc1JlZ0V4cDooKT0+YjJl''@;'; put 'put ''LGlzVW5kZWZpbmVkOigpPT5fYyxzdHJpbmdpZnk6KCk9PmxjfSk7dmFyIGc9e307eS5yKGcpLHkuZChnLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5WcWUsaXNQZXJjZW50VmFsdWU6KCk9PmYkLHJhbmRvbVN0cmluZzooKT0+aCQsc2FuaXRpemU6KCk9PklPLHN0cmlwVGFnczooKT0+ZyQsc3Vi''@;'; put 'put ''c3RpdHV0ZTooKT0+cCQsdG9VcHBlckNhc2VGaXJzdDooKT0+cDF9KTt2YXIgQj17fTt5LnIoQikseS5kKEIse0hUTUxfQ0hBUkFDVEVSUzooKT0+TjJlLGFkZENsYXNzOigpPT5UaSxhZGRFdmVudDooKT0+ZFhlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+TSQsY2xvc2VzdDooKT0+Um0sY2xv''@;'; put 'put ''c2VzdERvd246KCk9PmJFLGVtcHR5OigpPT54cCxmYXN0SW5uZXJIVE1MOigpPT56NyxmYXN0SW5uZXJUZXh0OigpPT5QbSxmaW5kRmlyc3RQYXJlbnRXaXRoQ2xhc3M6KCk9Pk8yZSxnZXRDYXJldFBvc2l0aW9uOigpPT5TJCxnZXRDc3NUcmFuc2Zvcm06KCk9PmdYZSxnZXRGcmFtZUVsZW1l''@;'; put 'put ''bnQ6KCk9PkwyZSxnZXRNYXhpbXVtU2Nyb2xsTGVmdDooKT0+ajJlLGdldE1heGltdW1TY3JvbGxUb3A6KCk9PkIyZSxnZXRQYXJlbnQ6KCk9PlIyZSxnZXRQYXJlbnRXaW5kb3c6KCk9PkI3LGdldFNjcm9sbExlZnQ6KCk9PnckLGdldFNjcm9sbFRvcDooKT0+T08sZ2V0U2Nyb2xsYWJsZUVs''@;'; put 'put ''ZW1lbnQ6KCk9PnlFLGdldFNjcm9sbGJhcldpZHRoOigpPT5mMCxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+ejJlLGdldFNlbGVjdGlvblRleHQ6KCk9PmZYZSxnZXRTdHlsZTooKT0+X0UsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PmFfLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9PkxP''@;'; put 'put ''LGdldFdpbmRvd1Njcm9sbFRvcDooKT0+XyQsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PmNYZSxoYXNDbGFzczooKT0+cG8saGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+VCQsaGFzVmVydGljYWxTY3JvbGxiYXI6KCk9PkUkLGhhc1plcm9IZWlnaHQ6KCk9PlYyZSxpbmRleDooKT0+''@;'; put 'put ''UDJlLGlubmVySGVpZ2h0OigpPT5vXyxpbm5lcldpZHRoOigpPT5DJCxpc0NoaWxkT2Y6KCk9PkxtLGlzRGV0YWNoZWQ6KCk9PkEkLGlzSFRNTEVsZW1lbnQ6KCk9PkVwLGlzSW5wdXQ6KCk9PlNFLGlzSW50ZXJuYWxFbGVtZW50OigpPT52RSxpc091dHNpZGVJbnB1dDooKT0+Rk8saXNWaXNp''@;'; put 'put ''YmxlOigpPT5VNyxtYWtlRWxlbWVudENvbnRlbnRFZGl0YWJsZUFuZFNlbGVjdEl0c0NvbnRlbnQ6KCk9PmskLG1hdGNoZXNDU1NSdWxlczooKT0+dVhlLG9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlT25jZTooKT0+VTJlLG9mZnNldDooKT0+VTAsb3V0ZXJIZWlnaHQ6KCk9Pnh1LG91dGVyV2lk''@;'; put 'put ''dGg6KCk9PnN1LG92ZXJsYXlDb250YWluc0VsZW1lbnQ6KCk9Pk9tLHJlbW92ZUF0dHJpYnV0ZTooKT0+ajcscmVtb3ZlQ2xhc3M6KCk9PmxvLHJlbW92ZUNvbnRlbnRFZGl0YWJsZUZyb21FbGVtZW50QW5kRGVzZWxlY3Q6KCk9PkQkLHJlbW92ZUV2ZW50OigpPT5oWGUscmVtb3ZlVGV4dE5v''@;'; put 'put ''ZGVzOigpPT55JCxyZXNldENzc1RyYW5zZm9ybTooKT0+Q0UscnVuV2l0aFNlbGVjdGVkQ29udGVuZEVkaXRhYmxlRWxlbWVudDooKT0+WjJlLHNlbGVjdEVsZW1lbnRJZkFsbG93ZWQ6KCk9Pm1YZSxzZXRBdHRyaWJ1dGU6KCk9PnZvLHNldENhcmV0UG9zaXRpb246KCk9PndFLHNldE92ZXJs''@;'; put 'put ''YXlQb3NpdGlvbjooKT0+UE99KTt2YXIgdz17fTt5LnIodykseS5kKHcse2N1cnJ5OigpPT5ZMmUsY3VycnlSaWdodDooKT0+eVhlLGRlYm91bmNlOigpPT5NRSxmYXN0Q2FsbDooKT0+SE8saXNGdW5jdGlvbjooKT0+bWwscGFydGlhbDooKT0+SSQscGlwZTooKT0+YlhlLHRocm90dGxlOigp''@;'; put 'put ''PT5XMmUsdGhyb3R0bGVBZnRlckhpdHM6KCk9PnZYZX0pO3ZhciBQPXt9O3kucihQKSx5LmQoUCx7Y2xvbmU6KCk9Pm4zLGNyZWF0ZU9iamVjdFByb3BMaXN0ZW5lcjooKT0+RmQsZGVlcENsb25lOigpPT5nMSxkZWVwRXh0ZW5kOigpPT54RSxkZWVwT2JqZWN0U2l6ZTooKT0+Qk8sZGVmaW5l''@;'; put 'put ''R2V0dGVyOigpPT5UcCxkdWNrU2NoZW1hOigpPT5zXyxleHRlbmQ6KCk9PkV1LGdldFByb3BlcnR5OigpPT4kMmUsaGFzT3duUHJvcGVydHk6KCk9PlR1LGluaGVyaXQ6KCk9PkcyZSxpc09iamVjdDooKT0+cW8saXNPYmplY3RFcXVhbDooKT0+Tk8sbWl4aW46KCk9PlRsLG9iamVjdEVhY2g6''@;'; put 'put ''KCk9PlhvLHNldFByb3BlcnR5OigpPT5WT30pO3ZhciBGPXt9O3kucihGKSx5LmQoRix7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PlRFLGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+cTJlLGlzQ1NSOigpPT5LMmUsaXNUb3VjaFN1cHBvcnRlZDooKT0+UiQscmVxdWVzdEFuaW1hdGlvbkZy''@;'; put 'put ''YW1lOigpPT5FRX0pO3ZhciBPPXt9O3kucihPKSx5LmQoTyx7aXNDaHJvbWU6KCk9PkwkLGlzQ2hyb21lV2ViS2l0OigpPT5RMmUsaXNFZGdlOigpPT50ZmUsaXNFZGdlV2ViS2l0OigpPT5fWGUsaXNGaXJlZm94OigpPT5qTyxpc0ZpcmVmb3hXZWJLaXQ6KCk9PmVmZSxpc0lPUzooKT0+TyQs''@;'; put 'put ''aXNJcGFkT1M6KCk9PlAkLGlzTGludXhPUzooKT0+d1hlLGlzTWFjT1M6KCk9PnpPLGlzTW9iaWxlQnJvd3NlcjooKT0+QXAsaXNTYWZhcmk6KCk9PkFFLGlzV2luZG93c09TOigpPT5GJCxzZXRCcm93c2VyTWV0YTooKT0+WDJlLHNldFBsYXRmb3JtTWV0YTooKT0+SjJlfSk7dmFyIHo9e307''@;'; put 'put ''eS5yKHopLHkuZCh6LHtLRVlfQ09ERVM6KCk9PllhLGlzQ3RybEtleTooKT0+U1hlLGlzQ3RybE1ldGFLZXk6KCk9PnJmZSxpc0Z1bmN0aW9uS2V5OigpPT5IJCxpc0tleTooKT0+dV8saXNQcmludGFibGVDaGFyOigpPT5uZmV9KTt2YXIgTj17fTt5LnIoTikseS5kKE4se2lzSW1tZWRpYXRl''@;'; put 'put ''UHJvcGFnYXRpb25TdG9wcGVkOigpPT5GbSxpc0xlZnRDbGljazooKT0+VU8saXNSaWdodENsaWNrOigpPT5IbSxpc1RvdWNoRXZlbnQ6KCk9PmlmZSxvZmZzZXRSZWxhdGl2ZVRvOigpPT5hZmUsc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOigpPT5CMn0pO3ZhciBMPXt9O3kucihMKSx5LmQo''@;'; put 'put ''TCx7X2RhdGFUb0hUTUw6KCk9PnEkLGh0bWxUb0dyaWRTZXR0aW5nczooKT0+YmZlLGluc3RhbmNlVG9IVE1MOigpPT5LJH0pO3ZhciBLPXt9O3kucihLKSx5LmQoSyx7Y2xhbXA6KCk9PmtzLGlzTnVtZXJpYzooKT0+bTEsaXNOdW1lcmljTGlrZTooKT0+eWZlLHJhbmdlRWFjaDooKT0+R2Es''@;'; put 'put ''cmFuZ2VFYWNoUmV2ZXJzZTooKT0+WCQsdmFsdWVBY2NvcmRpbmdQZXJjZW50OigpPT5KJH0pO3ZhciBVPXt9O3kucihVKSx5LmQoVSx7Y291bnRGaXJzdFJvd0tleXM6KCk9PkZLLGNyZWF0ZUVtcHR5U3ByZWFkc2hlZXREYXRhOigpPT5rdHQsY3JlYXRlU3ByZWFkc2hlZXREYXRhOigpPT5U''@;'; put 'put ''dHQsY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhOigpPT5BdHQsZGF0YVJvd1RvQ2hhbmdlc0FycmF5OigpPT5QSyxpc0FycmF5T2ZBcnJheXM6KCk9PkUzZSxpc0FycmF5T2ZPYmplY3RzOigpPT5UM2Usc3ByZWFkc2hlZXRDb2x1bW5JbmRleDooKT0+RXR0LHNwcmVhZHNoZWV0Q29sdW1u''@;'; put 'put ''TGFiZWw6KCk9PmhQfSk7dmFyIFc9e307eS5yKFcpLHkuZChXLHtDSEVDS0JPWF9DSEVDS0VEOigpPT5oWCxDSEVDS0JPWF9SRU5ERVJFUl9OQU1FU1BBQ0U6KCk9PmRYLENIRUNLQk9YX1VOQ0hFQ0tFRDooKT0+ZlgsQ09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9PmhxLENPTlRF''@;'; put 'put ''WFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+bXEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+U3EsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+YnEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9Pl9xLENPTlRFWFRN''@;'; put 'put ''RU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT52cSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT5DcSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PnlxLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PndxLENPTlRFWFRNRU5V''@;'; put 'put ''X0lURU1TX0JPUkRFUlM6KCk9Pk1xLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5UcSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PkFxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9PkVxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNf''@;'; put 'put ''VE9QOigpPT54cSxDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU46KCk9Pm5xLENPTlRFWFRNRU5VX0lURU1TX0NPUFk6KCk9PnJxLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWTooKT0+b3EsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9H''@;'; put 'put ''Uk9VUF9IRUFERVJTOigpPT5hcSxDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlM6KCk9PmlxLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+c3EsQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UOigpPT5mcSxDT05URVhUTUVOVV9JVEVNU19GUkVFWkVfQ09M''@;'; put 'put ''VU1OOigpPT5scSxDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTjooKT0+UnEsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9Pk9xLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT5xSyxDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PlhLLENPTlRFWFRN''@;'; put 'put ''RU5VX0lURU1TX01FUkdFX0NFTExTOigpPT51cSxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PklxLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRDooKT0+RHEsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9PkdLLENP''@;'; put 'put ''TlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+X1AsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PmdxLENPTlRFWFRNRU5VX0lURU1TX1JFRE86KCk9PnRxLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT5rcSxDT05URVhUTUVOVV9JVEVNU19S''@;'; put 'put ''RU1PVkVfQ09MVU1OOigpPT5RSyxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+cHEsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+SkssQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT4kSyxDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6KCk9PktL''@;'; put 'put ''LENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5McSxDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+UHEsQ09OVEVYVE1FTlVfSVRFTVNfVU5ETzooKT0+ZXEsQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5jcSxDT05URVhUTUVOVV9JVEVNU19VTk1F''@;'; put 'put ''UkdFX0NFTExTOigpPT5kcSxDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5WM2UsRklMVEVSU19CVVRUT05TX0NBTkNFTDooKT0+c1gsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT5hWCxGSUxURVJTX0JVVFRPTlNfT0s6KCk9Pm9YLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERF''@;'; put 'put ''Ul9TRUFSQ0g6KCk9PmxYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PnVYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+Y1gsRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEw6KCk9PmlYLEZJTFRFUlNfQ09ORElUSU9OU19BRlRFUjoo''@;'; put 'put ''KT0+cXEsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+WHEsRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIOigpPT5CcSxGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+JHEsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT5zbnQsRklMVEVSU19DT05ESVRJT05T''@;'; put 'put ''X0NPTlRBSU5TOigpPT56cSxGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9PkZxLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PmpxLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+TnEsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+WnEsRklMVEVSU19D''@;'; put 'put ''T05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+V3EsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+WXEsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+R3EsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+V2MsRklMVEVSU19D''@;'; put 'put ''T05ESVRJT05TX05PTkU6KCk9PndQLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+S3EsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5VcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5IcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VRVUFMOigp''@;'; put 'put ''PT5WcSxGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9PkpxLEZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVzooKT0+UXEsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+ZVgsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PnRYLEZJTFRFUlNfRElWU19GSUxU''@;'; put 'put ''RVJfQllfVkFMVUU6KCk9Pm5YLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT5yWCxGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+Q1AsRklMVEVSU19OQU1FU1BBQ0U6KCk9PnExLEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5TUH0pO3ZhciBZPXt9O2Z1bmN0aW9u''@;'; put 'put ''IHEoYyxsLGEsZCxoLGYsdil7dHJ5e3ZhciBNPWNbZl0odiksRD1NLnZhbHVlfWNhdGNoKFope3JldHVybiB2b2lkIGEoWil9TS5kb25lP2woRCk6UHJvbWlzZS5yZXNvbHZlKEQpLnRoZW4oZCxoKX1mdW5jdGlvbiBlZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLGE9YXJndW1l''@;'; put 'put ''bnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGgpe3ZhciBmPWMuYXBwbHkobCxhKTtmdW5jdGlvbiB2KEQpe3EoZixkLGgsdixNLCJuZXh0IixEKX1mdW5jdGlvbiBNKEQpe3EoZixkLGgsdixNLCJ0aHJvdyIsRCl9dih2b2lkIDApfSl9fXkucihZKSx5LmQoWSx7Z2V0Tm9ybWFs''@;'; put 'put ''aXplZERhdGU6KCk9PnY0ZX0pO2xldCBuZT1udWxsLGxlPTE7Y29uc3QgbWU9U3ltYm9sKCJTSUdOQUwiKTtmdW5jdGlvbiBfZShjKXtjb25zdCBsPW5lO3JldHVybiBuZT1jLGx9ZnVuY3Rpb24geChjKXtpZigoIXNlKGMpfHxjLmRpcnR5KSYmKGMuZGlydHl8fGMubGFzdENsZWFuRXBvY2gh''@;'; put 'put ''PT1sZSkpe2lmKCFjLnByb2R1Y2VyTXVzdFJlY29tcHV0ZShjKSYmIW0oYykpcmV0dXJuIGMuZGlydHk9ITEsdm9pZChjLmxhc3RDbGVhbkVwb2NoPWxlKTtjLnByb2R1Y2VyUmVjb21wdXRlVmFsdWUoYyksYy5kaXJ0eT0hMSxjLmxhc3RDbGVhbkVwb2NoPWxlfX1mdW5jdGlvbiBtKGMpe3dl''@;'; put 'put ''KGMpO2ZvcihsZXQgbD0wO2w8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2wrKyl7Y29uc3QgYT1jLnByb2R1Y2VyTm9kZVtsXSxkPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb25bbF07aWYoZCE9PWEudmVyc2lvbnx8KHgoYSksZCE9PWEudmVyc2lvbikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rp''@;'; put 'put ''b24gdGUoYyxsKXtpZihmdW5jdGlvbiBVZShjKXtjLmxpdmVDb25zdW1lck5vZGU/Pz1bXSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzPz89W119KGMpLHdlKGMpLDE9PT1jLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoKWZvcihsZXQgZD0wO2Q8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2QrKyl0''@;'; put 'put ''ZShjLnByb2R1Y2VyTm9kZVtkXSxjLnByb2R1Y2VySW5kZXhPZlRoaXNbZF0pO2NvbnN0IGE9Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aC0xO2lmKGMubGl2ZUNvbnN1bWVyTm9kZVtsXT1jLmxpdmVDb25zdW1lck5vZGVbYV0sYy5saXZlQ29uc3VtZXJJbmRleE9mVGhpc1tsXT1jLmxpdmVD''@;'; put 'put ''b25zdW1lckluZGV4T2ZUaGlzW2FdLGMubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGgtLSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzLmxlbmd0aC0tLGw8Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aCl7Y29uc3QgZD1jLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW2xdLGg9Yy5saXZlQ29uc3Vt''@;'; put 'put ''ZXJOb2RlW2xdO3dlKGgpLGgucHJvZHVjZXJJbmRleE9mVGhpc1tkXT1sfX1mdW5jdGlvbiBzZShjKXtyZXR1cm4gYy5jb25zdW1lcklzQWx3YXlzTGl2ZXx8KGM/LmxpdmVDb25zdW1lck5vZGU/Lmxlbmd0aD8/MCk+MH1mdW5jdGlvbiB3ZShjKXtjLnByb2R1Y2VyTm9kZT8/PVtdLGMucHJv''@;'; put 'put ''ZHVjZXJJbmRleE9mVGhpcz8/PVtdLGMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24/Pz1bXX1sZXQgRGU9bnVsbDtmdW5jdGlvbiAkZShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiB0dChjKXtjb25zdCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVy''@;'; put 'put ''cm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YSxhfWNvbnN0IEhlPXR0KGM9PmZ1bmN0aW9uKGEpe2ModGhpcyksdGhpcy5tZXNzYWdlPWE/YCR7YS5sZW5ndGh9IGVycm9ycyBvY2N1''@;'; put 'put ''cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2EubWFwKChkLGgpPT5gJHtoKzF9KSAke2QudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPWF9KTtmdW5jdGlvbiB1dChjLGwpe2lmKGMpe2NvbnN0''@;'; put 'put ''IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNlKGEsMSl9fWNsYXNzIHF0e2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYo''@;'; put 'put ''IXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFs''@;'; put 'put ''VGVhcmRvd246ZH09dGhpcztpZigkZShkKSl0cnl7ZCgpfWNhdGNoKGYpe2w9ZiBpbnN0YW5jZW9mIEhlP2YuZXJyb3JzOltmXX1jb25zdHtfZmluYWxpemVyczpofT10aGlzO2lmKGgpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IoY29uc3QgZiBvZiBoKXRyeXtjaShmKX1jYXRjaCh2KXts''@;'; put 'put ''PWw/P1tdLHYgaW5zdGFuY2VvZiBIZT9sPVsuLi5sLC4uLnYuZXJyb3JzXTpsLnB1c2godil9fWlmKGwpdGhyb3cgbmV3IEhlKGwpfX1hZGQobCl7dmFyIGE7aWYobCYmbCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpY2kobCk7ZWxzZXtpZihsIGluc3RhbmNlb2YgcXQpe2lmKGwuY2xvc2VkfHxs''@;'; put 'put ''Ll9oYXNQYXJlbnQodGhpcykpcmV0dXJuO2wuX2FkZFBhcmVudCh0aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGE9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWE/YTpbXSkucHVzaChsKX19X2hhc1BhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7cmV0dXJuIGE9''@;'; put 'put ''PT1sfHxBcnJheS5pc0FycmF5KGEpJiZhLmluY2x1ZGVzKGwpfV9hZGRQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGEpPyhhLnB1c2gobCksYSk6YT9bYSxsXTpsfV9yZW1vdmVQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFn''@;'; put 'put ''ZTphfT10aGlzO2E9PT1sP3RoaXMuX3BhcmVudGFnZT1udWxsOkFycmF5LmlzQXJyYXkoYSkmJnV0KGEsbCl9cmVtb3ZlKGwpe2NvbnN0e19maW5hbGl6ZXJzOmF9PXRoaXM7YSYmdXQoYSxsKSxsIGluc3RhbmNlb2YgcXQmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19cXQuRU1QVFk9KCgpPT57''@;'; put 'put ''Y29uc3QgYz1uZXcgcXQ7cmV0dXJuIGMuY2xvc2VkPSEwLGN9KSgpO2NvbnN0IFJ0PXF0LkVNUFRZO2Z1bmN0aW9uIFB0KGMpe3JldHVybiBjIGluc3RhbmNlb2YgcXR8fGMmJiJjbG9zZWQiaW4gYyYmJGUoYy5yZW1vdmUpJiYkZShjLmFkZCkmJiRlKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9u''@;'; put 'put ''IGNpKGMpeyRlKGMpP2MoKTpjLnVuc3Vic2NyaWJlKCl9Y29uc3QgUXQ9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0''@;'; put 'put ''Q29udGV4dDohMX0sc249e3NldFRpbWVvdXQoYyxsLC4uLmEpe2NvbnN0e2RlbGVnYXRlOmR9PXNuO3JldHVybiBkPy5zZXRUaW1lb3V0P2Quc2V0VGltZW91dChjLGwsLi4uYSk6c2V0VGltZW91dChjLGwsLi4uYSl9LGNsZWFyVGltZW91dChjKXtjb25zdHtkZWxlZ2F0ZTpsfT1zbjtyZXR1''@;'; put 'put ''cm4obD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIFJpKGMpe3NuLnNldFRpbWVvdXQoKCk9Pntjb25zdHtvblVuaGFuZGxlZEVycm9yOmx9PVF0O2lmKCFsKXRocm93IGM7bChjKX0pfWZ1bmN0aW9uIGhuKCl7fWNvbnN0IGZ0PUF0''@;'; put 'put ''KCJDIix2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiBBdChjLGwsYSl7cmV0dXJue2tpbmQ6Yyx2YWx1ZTpsLGVycm9yOmF9fWxldCBSbj1udWxsO2Z1bmN0aW9uIHN0KGMpe2lmKFF0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpe2NvbnN0IGw9IVJuO2lmKGwmJihSbj17''@;'; put 'put ''ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25zdHtlcnJvclRocm93bjphLGVycm9yOmR9PVJuO2lmKFJuPW51bGwsYSl0aHJvdyBkfX1lbHNlIGMoKX1jbGFzcyByaSBleHRlbmRzIHF0e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhp''@;'; put 'put ''cy5kZXN0aW5hdGlvbj1sLFB0KGwpJiZsLmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlvbj16dH1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IGh0KGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP3JuKGZ1bmN0aW9uIFd0KGMpe3JldHVybiBBdCgiTiIsYyx2b2lkIDApfShs''@;'; put 'put ''KSx0aGlzKTp0aGlzLl9uZXh0KGwpfWVycm9yKGwpe3RoaXMuaXNTdG9wcGVkP3JuKGZ1bmN0aW9uIE9yKGMpe3JldHVybiBBdCgiRSIsdm9pZCAwLGMpfShsKSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IobCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWQ/cm4oZnQs''@;'; put 'put ''dGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249bnVsbCl9X25leHQobCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGwp''@;'; put 'put ''fV9lcnJvcihsKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19fWNvbnN0IFdlPUZ1bmN0aW9uLnByb3Rv''@;'; put 'put ''dHlwZS5iaW5kO2Z1bmN0aW9uIFR0KGMsbCl7cmV0dXJuIFdlLmNhbGwoYyxsKX1jbGFzcyBucntjb25zdHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7''@;'; put 'put ''eHQoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5e2EuZXJyb3IobCl9Y2F0Y2goZCl7eHQoZCl9ZWxzZSB4dChsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxl''@;'; put 'put ''dGUoKX1jYXRjaChhKXt4dChhKX19fWNsYXNzIGh0IGV4dGVuZHMgcml7Y29uc3RydWN0b3IobCxhLGQpe2xldCBoO2lmKHN1cGVyKCksJGUobCl8fCFsKWg9e25leHQ6bD8/dm9pZCAwLGVycm9yOmE/P3ZvaWQgMCxjb21wbGV0ZTpkPz92b2lkIDB9O2Vsc2V7bGV0IGY7dGhpcyYmUXQudXNl''@;'; put 'put ''RGVwcmVjYXRlZE5leHRDb250ZXh0PyhmPU9iamVjdC5jcmVhdGUobCksZi51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLGg9e25leHQ6bC5uZXh0JiZUdChsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmVHQobC5lcnJvcixmKSxjb21wbGV0ZTpsLmNvbXBsZXRlJiZUdChsLmNv''@;'; put 'put ''bXBsZXRlLGYpfSk6aD1sfXRoaXMuZGVzdGluYXRpb249bmV3IG5yKGgpfX1mdW5jdGlvbiB4dChjKXtRdC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIFV0KGMpe1F0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJlJuJiYoUm4u''@;'; put 'put ''ZXJyb3JUaHJvd249ITAsUm4uZXJyb3I9Yyl9KGMpOlJpKGMpfWZ1bmN0aW9uIHJuKGMsbCl7Y29uc3R7b25TdG9wcGVkTm90aWZpY2F0aW9uOmF9PVF0O2EmJnNuLnNldFRpbWVvdXQoKCk9PmEoYyxsKSl9Y29uc3QgenQ9e2Nsb3NlZDohMCxuZXh0OmhuLGVycm9yOmZ1bmN0aW9uIGpuKGMp''@;'; put 'put ''e3Rocm93IGN9LGNvbXBsZXRlOmhufSxoaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gY24oYyl7cmV0dXJuIGN9ZnVuY3Rpb24gSWkoYyl7cmV0dXJuIDA9PT1jLmxlbmd0aD9jbjoxPT09Yy5sZW5ndGg/Y1sw''@;'; put 'put ''XTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9PmgoZCksYSl9fWxldCBYdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1''@;'; put 'put ''YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBFaShjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIHJpfHxmdW5jdGlvbiB1YShjKXtyZXR1cm4gYyYmJGUoYy5uZXh0KSYmJGUoYy5lcnJvcikmJiRlKGMuY29tcGxldGUpfShjKSYmUHQoYyl9KGEpP2E6bmV3IGh0KGEsZCxoKTtyZXR1''@;'; put 'put ''cm4gc3QoKCk9Pntjb25zdHtvcGVyYXRvcjp2LHNvdXJjZTpNfT10aGlzO2YuYWRkKHY/di5jYWxsKGYsTSk6TT90aGlzLl9zdWJzY3JpYmUoZik6dGhpcy5fdHJ5U3Vic2NyaWJlKGYpKX0pLGZ9X3RyeVN1YnNjcmliZShhKXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZShhKX1jYXRjaChk''@;'; put 'put ''KXthLmVycm9yKGQpfX1mb3JFYWNoKGEsZCl7cmV0dXJuIG5ldyhkPWVuKGQpKSgoaCxmKT0+e2NvbnN0IHY9bmV3IGh0KHtuZXh0Ok09Pnt0cnl7YShNKX1jYXRjaChEKXtmKEQpLHYudW5zdWJzY3JpYmUoKX19LGVycm9yOmYsY29tcGxldGU6aH0pO3RoaXMuc3Vic2NyaWJlKHYpfSl9X3N1''@;'; put 'put ''YnNjcmliZShhKXt2YXIgZDtyZXR1cm4gbnVsbD09PShkPXRoaXMuc291cmNlKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5zdWJzY3JpYmUoYSl9W2hpXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uYSl7cmV0dXJuIElpKGEpKHRoaXMpfXRvUHJvbWlzZShhKXtyZXR1cm4gbmV3KGE9ZW4oYSkpKChk''@;'; put 'put ''LGgpPT57bGV0IGY7dGhpcy5zdWJzY3JpYmUodj0+Zj12LHY9PmgodiksKCk9PmQoZikpfSl9fXJldHVybiBjLmNyZWF0ZT1sPT5uZXcgYyhsKSxjfSkoKTtmdW5jdGlvbiBlbihjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPWM/P1F0LlByb21pc2UpJiZ2b2lkIDAhPT1sP2w6UHJvbWlzZX1j''@;'; put 'put ''b25zdCB2cj10dChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBXbj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgWHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMu''@;'; put 'put ''Y2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1uZXcgJGkodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1h''@;'; put 'put ''LGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgdnJ9bmV4dChhKXtzdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVyc3x8KHRoaXMuY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKHRo''@;'; put 'put ''aXMub2JzZXJ2ZXJzKSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKWQubmV4dChhKX19KX1lcnJvcihhKXtzdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaGFzRXJyb3I9dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy50aHJv''@;'; put 'put ''d25FcnJvcj1hO2NvbnN0e29ic2VydmVyczpkfT10aGlzO2Zvcig7ZC5sZW5ndGg7KWQuc2hpZnQoKS5lcnJvcihhKX19KX1jb21wbGV0ZSgpe3N0KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJz''@;'; put 'put ''OmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVs''@;'; put 'put ''bD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgp''@;'; put 'put ''LHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJuIGR8fGg/UnQ6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxs''@;'; put 'put ''LGYucHVzaChhKSxuZXcgcXQoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCx1dChmLGEpfSkpfV9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGEpe2NvbnN0e2hhc0Vycm9yOmQsdGhyb3duRXJyb3I6aCxpc1N0b3BwZWQ6Zn09dGhpcztkP2EuZXJyb3IoaCk6ZiYmYS5jb21wbGV0ZSgp''@;'; put 'put ''fWFzT2JzZXJ2YWJsZSgpe2NvbnN0IGE9bmV3IFh0O3JldHVybiBhLnNvdXJjZT10aGlzLGF9fXJldHVybiBjLmNyZWF0ZT0obCxhKT0+bmV3ICRpKGwsYSksY30pKCk7Y2xhc3MgJGkgZXh0ZW5kcyBXbntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5kZXN0aW5hdGlvbj1sLHRoaXMu''@;'; put 'put ''c291cmNlPWF9bmV4dChsKXt2YXIgYSxkO251bGw9PT0oZD1udWxsPT09KGE9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWE/dm9pZCAwOmEubmV4dCl8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWVycm9yKGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0''@;'; put 'put ''aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6YS5lcnJvcil8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWNvbXBsZXRlKCl7dmFyIGwsYTtudWxsPT09KGE9bnVsbD09PShsPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmNvbXBsZXRlKXx8dm9pZCAwPT09YXx8YS5jYWxs''@;'; put 'put ''KGwpfV9zdWJzY3JpYmUobCl7dmFyIGEsZDtyZXR1cm4gbnVsbCE9PShkPW51bGw9PT0oYT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc3Vic2NyaWJlKGwpKSYmdm9pZCAwIT09ZD9kOlJ0fX1jbGFzcyBlaSBleHRlbmRzIFdue2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhp''@;'; put 'put ''cy5fdmFsdWU9bH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUobCl7Y29uc3QgYT1zdXBlci5fc3Vic2NyaWJlKGwpO3JldHVybiFhLmNsb3NlZCYmbC5uZXh0KHRoaXMuX3ZhbHVlKSxhfWdldFZhbHVlKCl7Y29uc3R7aGFzRXJyb3I6bCx0aHJvd25FcnJv''@;'; put 'put ''cjphLF92YWx1ZTpkfT10aGlzO2lmKGwpdGhyb3cgYTtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLGR9bmV4dChsKXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPWwpfX1mdW5jdGlvbiBRcihjKXtyZXR1cm4gJGUoYz8ubGlmdCl9ZnVuY3Rpb24gVmkoYyl7cmV0dXJuIGw9PntpZihRcihs''@;'; put 'put ''KSlyZXR1cm4gbC5saWZ0KGZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gYyhhLHRoaXMpfWNhdGNoKGQpe3RoaXMuZXJyb3IoZCl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gTmkoYyxsLGEsZCxoKXtyZXR1''@;'; put 'put ''cm4gbmV3IERhKGMsbCxhLGQsaCl9Y2xhc3MgRGEgZXh0ZW5kcyByaXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCksdGhpcy5vbkZpbmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT12LHRoaXMuX25leHQ9YT9mdW5jdGlvbihNKXt0cnl7YShNKX1jYXRjaChEKXtsLmVy''@;'; put 'put ''cm9yKEQpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5jdGlvbihNKXt0cnl7aChNKX1jYXRjaChEKXtsLmVycm9yKEQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKE0pe2wu''@;'; put 'put ''ZXJyb3IoTSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmli''@;'; put 'put ''ZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBMcihjLGwpe3JldHVybiBWaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoTmkoZCxmPT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1jb25zdCBw''@;'; put 'put ''YT0iaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcyI7Y2xhc3MgUW4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGZ1bmN0aW9uIGxhKGMsbCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMoYyl9JHtsPyI6ICIrbDoiIn1gfShsLGEpKSx0aGlzLmNvZGU9bH19ZnVuY3Rpb24g''@;'; put 'put ''TnMoYyl7cmV0dXJue3RvU3RyaW5nOmN9LnRvU3RyaW5nKCl9Y29uc3QgcHU9Il9fcGFyYW1ldGVyc19fIjtmdW5jdGlvbiB4YShjLGwsYSl7cmV0dXJuIE5zKCgpPT57Y29uc3QgZD1mdW5jdGlvbiBpcihjKXtyZXR1cm4gZnVuY3Rpb24oLi4uYSl7aWYoYyl7Y29uc3QgZD1jKC4uLmEpO2Zv''@;'; put 'put ''cihjb25zdCBoIGluIGQpdGhpc1toXT1kW2hdfX19KGwpO2Z1bmN0aW9uIGgoLi4uZil7aWYodGhpcyBpbnN0YW5jZW9mIGgpcmV0dXJuIGQuYXBwbHkodGhpcyxmKSx0aGlzO2NvbnN0IHY9bmV3IGgoLi4uZik7cmV0dXJuIE0uYW5ub3RhdGlvbj12LE07ZnVuY3Rpb24gTShELFoscmUpe2Nv''@;'; put 'put ''bnN0IGNlPUQuaGFzT3duUHJvcGVydHkocHUpP0RbcHVdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShELHB1LHt2YWx1ZTpbXX0pW3B1XTtmb3IoO2NlLmxlbmd0aDw9cmU7KWNlLnB1c2gobnVsbCk7cmV0dXJuKGNlW3JlXT1jZVtyZV18fFtdKS5wdXNoKHYpLER9fXJldHVybiBhJiYoaC5wcm90''@;'; put 'put ''b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLGgucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0aW9uQ2xzPWgsaH0pfWNvbnN0IFZ0PWdsb2JhbFRoaXM7ZnVuY3Rpb24gSGEoYyl7Zm9yKGxldCBsIGluIGMpaWYoY1tsXT09PUhhKXJldHVybiBsO3Rocm93IEVy''@;'; put 'put ''cm9yKCJDb3VsZCBub3QgZmluZCByZW5hbWVkIHByb3BlcnR5IG9uIHRhcmdldCBvYmplY3QuIil9ZnVuY3Rpb24gTHUoYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJiFjLmhhc093blByb3BlcnR5KGEpJiYoY1thXT1sW2FdKX1mdW5jdGlvbiBQcihjKXtpZigi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoQXJyYXkuaXNBcnJheShjKSlyZXR1cm4iWyIrYy5tYXAoUHIpLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PWMpcmV0dXJuIiIrYztpZihjLm92ZXJyaWRkZW5OYW1lKXJldHVybmAke2Mub3ZlcnJpZGRlbk5hbWV9YDtpZihjLm5hbWUpcmV0''@;'; put 'put ''dXJuYCR7Yy5uYW1lfWA7Y29uc3QgbD1jLnRvU3RyaW5nKCk7aWYobnVsbD09bClyZXR1cm4iIitsO2NvbnN0IGE9bC5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09YT9sOmwuc3Vic3RyaW5nKDAsYSl9ZnVuY3Rpb24gb2QoYyxsKXtyZXR1cm4gbnVsbD09Y3x8IiI9PT1jP251bGw9PT1sPyIi''@;'; put 'put ''Omw6bnVsbD09bHx8IiI9PT1sP2M6YysiICIrbH1jb25zdCBjZj1IYSh7X19mb3J3YXJkX3JlZl9fOkhhfSk7ZnVuY3Rpb24gQ3MoYyl7cmV0dXJuIGMuX19mb3J3YXJkX3JlZl9fPUNzLGMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gUHIodGhpcygpKX0sY31mdW5jdGlvbiBZaShjKXty''@;'; put 'put ''ZXR1cm4geWwoYyk/YygpOmN9ZnVuY3Rpb24geWwoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJmMuaGFzT3duUHJvcGVydHkoY2YpJiZjLl9fZm9yd2FyZF9yZWZfXz09PUNzfWZ1bmN0aW9uIGFuKGMpe3JldHVybnt0b2tlbjpjLnRva2VuLHByb3ZpZGVkSW46Yy5wcm92aWRlZElu''@;'; put 'put ''fHxudWxsLGZhY3Rvcnk6Yy5mYWN0b3J5LHZhbHVlOnZvaWQgMH19ZnVuY3Rpb24gQXIoYyl7cmV0dXJue3Byb3ZpZGVyczpjLnByb3ZpZGVyc3x8W10saW1wb3J0czpjLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBQbyhjKXtyZXR1cm4gb2woYyxTcyl8fG9sKGMsSG8pfWZ1bmN0aW9uIG9sKGMs''@;'; put 'put ''bCl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkobCk/Y1tsXTpudWxsfWZ1bmN0aW9uIFZzKGMpe3JldHVybiBjJiYoYy5oYXNPd25Qcm9wZXJ0eShqbCl8fGMuaGFzT3duUHJvcGVydHkoa28pKT9jW2psXTpudWxsfWNvbnN0IFNzPUhhKHtcdTAyNzVwcm92OkhhfSksamw9SGEoe1x1MDI3NWlu''@;'; put 'put ''ajpIYX0pLEhvPUhhKHtuZ0luamVjdGFibGVEZWY6SGF9KSxrbz1IYSh7bmdJbmplY3RvckRlZjpIYX0pO2NsYXNzIFN0e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fZGVzYz1sLHRoaXMubmdNZXRhZGF0YU5hbWU9IkluamVjdGlvblRva2VuIix0aGlzLlx1MDI3NXByb3Y9dm9pZCAwLCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgYT90aGlzLl9fTkdfRUxFTUVOVF9JRF9fPWE6dm9pZCAwIT09YSYmKHRoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46dGhpcyxwcm92aWRlZEluOmEucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6YS5mYWN0b3J5fSkpfWdldCBtdWx0aSgpe3JldHVybiB0aGlzfXRvU3Ry''@;'; put 'put ''aW5nKCl7cmV0dXJuYEluamVjdGlvblRva2VuICR7dGhpcy5fZGVzY31gfX1mdW5jdGlvbiBWYShjKXtyZXR1cm4gYyYmISFjLlx1MDI3NXByb3ZpZGVyc31jb25zdCAkbz1IYSh7XHUwMjc1Y21wOkhhfSksWGw9SGEoe1x1MDI3NWRpcjpIYX0pLHRvPUhhKHtcdTAyNzVwaXBlOkhhfSksX289''@;'; put 'put ''SGEoe1x1MDI3NW1vZDpIYX0pLGppPUhhKHtcdTAyNzVmYWM6SGF9KSxQYz1IYSh7X19OR19FTEVNRU5UX0lEX186SGF9KSx6bD1IYSh7X19OR19FTlZfSURfXzpIYX0pO2Z1bmN0aW9uIENhKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0''@;'; put 'put ''aW9uIE1zKGMsbCl7dGhyb3cgbmV3IFFuKC0yMDEsITEpfXZhciByYT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRlZmF1bHQ9MF09IkRlZmF1bHQiLGNbYy5Ib3N0PTFdPSJIb3N0IixjW2MuU2VsZj0yXT0iU2VsZiIsY1tjLlNraXBTZWxmPTRdPSJTa2lwU2VsZiIsY1tjLk9wdGlvbmFsPThd''@;'; put 'put ''PSJPcHRpb25hbCIsY30ocmF8fHt9KTtsZXQgb287ZnVuY3Rpb24gYTUoKXtyZXR1cm4gb299ZnVuY3Rpb24gX2woYyl7Y29uc3QgbD1vbztyZXR1cm4gb289YyxsfWZ1bmN0aW9uIHRoKGMsbCxhKXtjb25zdCBkPVBvKGMpO3JldHVybiBkJiYicm9vdCI9PWQucHJvdmlkZWRJbj92b2lkIDA9''@;'; put 'put ''PT1kLnZhbHVlP2QudmFsdWU9ZC5mYWN0b3J5KCk6ZC52YWx1ZTphJnJhLk9wdGlvbmFsP251bGw6dm9pZCAwIT09bD9sOnZvaWQgTXMoKX1jb25zdCBLMD17fSxndT0iX19OR19ESV9GTEFHX18iLEZjPSJuZ1RlbXBUb2tlblBhdGgiLFJ3PS9cbi9nbSxzbD0iX19zb3VyY2UiO2xldCBJMztm''@;'; put 'put ''dW5jdGlvbiBuaChjKXtjb25zdCBsPUkzO3JldHVybiBJMz1jLGx9ZnVuY3Rpb24gRDEoYyxsPXJhLkRlZmF1bHQpe2lmKHZvaWQgMD09PUkzKXRocm93IG5ldyBRbigtMjAzLCExKTtyZXR1cm4gbnVsbD09PUkzP3RoKGMsdm9pZCAwLGwpOkkzLmdldChjLGwmcmEuT3B0aW9uYWw/bnVsbDp2''@;'; put 'put ''b2lkIDAsbCl9ZnVuY3Rpb24geHIoYyxsPXJhLkRlZmF1bHQpe3JldHVybihhNSgpfHxEMSkoWWkoYyksbCl9ZnVuY3Rpb24gZmkoYyxsPXJhLkRlZmF1bHQpe3JldHVybiB4cihjLG81KGwpKX1mdW5jdGlvbiBvNShjKXtyZXR1cm4gdHlwZW9mIGM+InUifHwibnVtYmVyIj09dHlwZW9mIGM/''@;'; put 'put ''YzooYy5vcHRpb25hbCYmOCl8KGMuaG9zdCYmMSl8KGMuc2VsZiYmMil8KGMuc2tpcFNlbGYmJjQpfWZ1bmN0aW9uIHM1KGMpe2NvbnN0IGw9W107Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9WWkoY1thXSk7aWYoQXJyYXkuaXNBcnJheShkKSl7aWYoMD09PWQubGVuZ3Ro''@;'; put 'put ''KXRocm93IG5ldyBRbig5MDAsITEpO2xldCBoLGY9cmEuRGVmYXVsdDtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7Y29uc3QgTT1kW3ZdLEQ9cGYoTSk7Im51bWJlciI9PXR5cGVvZiBEPy0xPT09RD9oPU0udG9rZW46Znw9RDpoPU19bC5wdXNoKHhyKGgsZikpfWVsc2UgbC5wdXNoKHhy''@;'; put 'put ''KGQpKX1yZXR1cm4gbH1mdW5jdGlvbiB0MChjLGwpe3JldHVybiBjW2d1XT1sLGMucHJvdG90eXBlW2d1XT1sLGN9ZnVuY3Rpb24gcGYoYyl7cmV0dXJuIGNbZ3VdfWNvbnN0IGM1PXQwKHhhKCJJbmplY3QiLGM9Pih7dG9rZW46Y30pKSwtMSksSTE9dDAoeGEoIk9wdGlvbmFsIiksOCksbGQ9''@;'; put 'put ''dDAoeGEoIlNraXBTZWxmIiksNCk7ZnVuY3Rpb24gbXUoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShqaSk/Y1tqaV06bnVsbH1mdW5jdGlvbiBSMyhjLGwpe2MuZm9yRWFjaChhPT5BcnJheS5pc0FycmF5KGEpP1IzKGEsbCk6bChhKSl9ZnVuY3Rpb24gUGwoYyxsLGEpe2w+PWMubGVu''@;'; put 'put ''Z3RoP2MucHVzaChhKTpjLnNwbGljZShsLDAsYSl9ZnVuY3Rpb24gT3UoYyxsKXtyZXR1cm4gbD49Yy5sZW5ndGgtMT9jLnBvcCgpOmMuc3BsaWNlKGwsMSlbMF19ZnVuY3Rpb24gXzAoYyxsLGEpe2xldCBkPWUyKGMsbCk7cmV0dXJuIGQ+PTA/Y1sxfGRdPWE6KGQ9fmQsZnVuY3Rpb24gZHYo''@;'; put 'put ''YyxsLGEsZCl7bGV0IGg9Yy5sZW5ndGg7aWYoaD09bCljLnB1c2goYSxkKTtlbHNlIGlmKDE9PT1oKWMucHVzaChkLGNbMF0pLGNbMF09YTtlbHNle2ZvcihoLS0sYy5wdXNoKGNbaC0xXSxjW2hdKTtoPmw7KWNbaF09Y1toLTJdLGgtLTtjW2xdPWEsY1tsKzFdPWR9fShjLGQsbCxhKSksZH1m''@;'; put 'put ''dW5jdGlvbiBBNihjLGwpe2NvbnN0IGE9ZTIoYyxsKTtpZihhPj0wKXJldHVybiBjWzF8YV19ZnVuY3Rpb24gZTIoYyxsKXtyZXR1cm4gZnVuY3Rpb24gUjEoYyxsLGEpe2xldCBkPTAsaD1jLmxlbmd0aD4+YTtmb3IoO2ghPT1kOyl7Y29uc3QgZj1kKyhoLWQ+PjEpLHY9Y1tmPDxhXTtpZihs''@;'; put 'put ''PT09dilyZXR1cm4gZjw8YTt2Pmw/aD1mOmQ9ZisxfXJldHVybn4oaDw8YSl9KGMsbCwxKX1jb25zdCBJMD17fSx0cz1bXSx0Mj1uZXcgU3QoIiIpLEwzPW5ldyBTdCgiIiwtMSksazY9bmV3IFN0KCIiKTtjbGFzcyB1NXtnZXQobCxhPUswKXtpZihhPT09SzApe2NvbnN0IGQ9bmV3IEVycm9y''@;'; put 'put ''KGBOdWxsSW5qZWN0b3JFcnJvcjogTm8gcHJvdmlkZXIgZm9yICR7UHIobCl9IWApO3Rocm93IGQubmFtZT0iTnVsbEluamVjdG9yRXJyb3IiLGR9cmV0dXJuIGF9fXZhciBPMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk9uUHVzaD0wXT0iT25QdXNoIixjW2MuRGVmYXVsdD0xXT0iRGVmYXVs''@;'; put 'put ''dCIsY30oTzN8fHt9KSxKcz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsY1tjLk5vbmU9Ml09Ik5vbmUiLGNbYy5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsY30oSnN8fHt9KSxObj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNb''@;'; put 'put ''Yy5TaWduYWxCYXNlZD0xXT0iU2lnbmFsQmFzZWQiLGNbYy5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybT0yXT0iSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0iLGN9KE5ufHx7fSk7ZnVuY3Rpb24gRncoYyxsLGEpe2xldCBkPWMubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgaD1jLmluZGV4T2Yo''@;'; put 'put ''bCxhKTtpZigtMT09PWgpcmV0dXJuIGg7aWYoMD09PWh8fGMuY2hhckNvZGVBdChoLTEpPD0zMil7Y29uc3QgZj1sLmxlbmd0aDtpZihoK2Y9PT1kfHxjLmNoYXJDb2RlQXQoaCtmKTw9MzIpcmV0dXJuIGh9YT1oKzF9fWZ1bmN0aW9uIG00KGMsbCxhKXtsZXQgZD0wO2Zvcig7ZDxhLmxlbmd0''@;'; put 'put ''aDspe2NvbnN0IGg9YVtkXTtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKDAhPT1oKWJyZWFrO2QrKztjb25zdCBmPWFbZCsrXSx2PWFbZCsrXSxNPWFbZCsrXTtjLnNldEF0dHJpYnV0ZShsLHYsTSxmKX1lbHNle2NvbnN0IGY9aCx2PWFbKytkXTtoNShmKT9jLnNldFByb3BlcnR5KGwsZix2''@;'; put 'put ''KTpjLnNldEF0dHJpYnV0ZShsLGYsdiksZCsrfX1yZXR1cm4gZH1mdW5jdGlvbiBkNShjKXtyZXR1cm4gMz09PWN8fDQ9PT1jfHw2PT09Y31mdW5jdGlvbiBoNShjKXtyZXR1cm4gNjQ9PT1jLmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gdmYoYyxsKXtpZihudWxsIT09bCYmMCE9PWwubGVuZ3Ro''@;'; put 'put ''KWlmKG51bGw9PT1jfHwwPT09Yy5sZW5ndGgpYz1sLnNsaWNlKCk7ZWxzZXtsZXQgYT0tMTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKyl7Y29uc3QgaD1sW2RdOyJudW1iZXIiPT10eXBlb2YgaD9hPWg6MD09PWF8fEQ2KGMsYSxoLG51bGwsLTE9PT1hfHwyPT09YT9sWysrZF06bnVsbCl9''@;'; put 'put ''fXJldHVybiBjfWZ1bmN0aW9uIEQ2KGMsbCxhLGQsaCl7bGV0IGY9MCx2PWMubGVuZ3RoO2lmKC0xPT09bCl2PS0xO2Vsc2UgZm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2YrK107aWYoIm51bWJlciI9PXR5cGVvZiBNKXtpZihNPT09bCl7dj0tMTticmVha31pZihNPmwpe3Y9Zi0xO2Jy''@;'; put 'put ''ZWFrfX19Zm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2ZdO2lmKCJudW1iZXIiPT10eXBlb2YgTSlicmVhaztpZihNPT09YSl7aWYobnVsbD09PWQpcmV0dXJuIHZvaWQobnVsbCE9PWgmJihjW2YrMV09aCkpO2lmKGQ9PT1jW2YrMV0pcmV0dXJuIHZvaWQoY1tmKzJdPWgpfWYrKyxudWxs''@;'; put 'put ''IT09ZCYmZisrLG51bGwhPT1oJiZmKyt9LTEhPT12JiYoYy5zcGxpY2UodiwwLGwpLGY9disxKSxjLnNwbGljZShmKyssMCxhKSxudWxsIT09ZCYmYy5zcGxpY2UoZisrLDAsZCksbnVsbCE9PWgmJmMuc3BsaWNlKGYrKywwLGgpfWNvbnN0IGh2PSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gSTYo''@;'; put 'put ''YyxsLGEsZCl7bGV0IGg9MDtpZihkKXtmb3IoO2g8bC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgbFtoXTtoKz0yKWlmKCJjbGFzcyI9PT1sW2hdJiYtMSE9PUZ3KGxbaCsxXS50b0xvd2VyQ2FzZSgpLGEsMCkpcmV0dXJuITB9ZWxzZSBpZih2NChjKSlyZXR1cm4hMTtpZihoPWwuaW5kZXhP''@;'; put 'put ''ZigxLGgpLGg+LTEpe2xldCBmO2Zvcig7KytoPGwubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKGY9bFtoXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdjQoYyl7cmV0dXJuIDQ9PT1jLnR5cGUmJmMudmFsdWUhPT1odn1mdW5jdGlvbiByMChj''@;'; put 'put ''LGwsYSl7cmV0dXJuIGw9PT0oNCE9PWMudHlwZXx8YT9jLnZhbHVlOmh2KX1mdW5jdGlvbiBIdyhjLGwsYSl7bGV0IGQ9NDtjb25zdCBoPWMuYXR0cnMsZj1udWxsIT09aD9mdW5jdGlvbiBwdihjKXtmb3IobGV0IGw9MDtsPGMubGVuZ3RoO2wrKylpZihkNShjW2xdKSlyZXR1cm4gbDtyZXR1''@;'; put 'put ''cm4gYy5sZW5ndGh9KGgpOjA7bGV0IHY9ITE7Zm9yKGxldCBNPTA7TTxsLmxlbmd0aDtNKyspe2NvbnN0IEQ9bFtNXTtpZigibnVtYmVyIiE9dHlwZW9mIEQpe2lmKCF2KWlmKDQmZCl7aWYoZD0yfDEmZCwiIiE9PUQmJiFyMChjLEQsYSl8fCIiPT09RCYmMT09PWwubGVuZ3RoKXtpZihNYyhk''@;'; put 'put ''KSlyZXR1cm4hMTt2PSEwfX1lbHNlIGlmKDgmZCl7aWYobnVsbD09PWh8fCFJNihjLGgsRCxhKSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMH19ZWxzZXtjb25zdCBaPWxbKytNXSxyZT1QMyhELGgsdjQoYyksYSk7aWYoLTE9PT1yZSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMDtjb250aW51ZX1p''@;'; put 'put ''ZigiIiE9PVope2xldCBjZTtpZihjZT1yZT5mPyIiOmhbcmUrMV0udG9Mb3dlckNhc2UoKSwyJmQmJlohPT1jZSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMH19fX1lbHNle2lmKCF2JiYhTWMoZCkmJiFNYyhEKSlyZXR1cm4hMTtpZih2JiZNYyhEKSljb250aW51ZTt2PSExLGQ9RHwxJmR9fXJl''@;'; put 'put ''dHVybiBNYyhkKXx8dn1mdW5jdGlvbiBNYyhjKXtyZXR1cm4hKDEmYyl9ZnVuY3Rpb24gUDMoYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3Qgdj1sW2hdO2lmKHY9PT1jKXJldHVybiBoO2lmKDM9''@;'; put 'put ''PT12fHw2PT09dilmPSEwO2Vsc2V7aWYoMT09PXZ8fDI9PT12KXtsZXQgTT1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIE07KU09bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT12KWJyZWFrO2lmKDA9PT12KXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gZ3YoYyxsKXtsZXQgYT1jLmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBiNChjLGwsYT0hMSl7Zm9y''@;'; put 'put ''KGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYoSHcoYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE53KGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7''@;'; put 'put ''aCsrKWlmKGNbaF0hPT1kW2hdKWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIG12KGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBWdyhjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCB2''@;'; put 'put ''PWNbYV07aWYoInN0cmluZyI9PXR5cGVvZiB2KWlmKDImZCl7Y29uc3QgTT1jWysrYV07aCs9IlsiK3YrKE0ubGVuZ3RoPjA/Jz0iJytNKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIit2OjQmZCYmKGgrPSIgIit2KTtlbHNlIiIhPT1oJiYhTWModikmJihsKz1tdihmLGgpLGg9IiIpLGQ9''@;'; put 'put ''dixmPWZ8fCFNYyhkKTthKyt9cmV0dXJuIiIhPT1oJiYobCs9bXYoZixoKSksbH1mdW5jdGlvbiBWcihjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPVI2KGMpLGE9ey4uLmwsZGVjbHM6Yy5kZWNscyx2YXJzOmMudmFycyx0ZW1wbGF0ZTpjLnRlbXBsYXRlLGNvbnN0czpjLmNvbnN0c3x8bnVs''@;'; put 'put ''bCxuZ0NvbnRlbnRTZWxlY3RvcnM6Yy5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmMuY2hhbmdlRGV0ZWN0aW9uPT09TzMuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczpsLnN0YW5kYWxvbmUmJmMuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0''@;'; put 'put ''YW5kYWxvbmVJbmplY3RvcjpudWxsLHNpZ25hbHM6Yy5zaWduYWxzPz8hMSxkYXRhOmMuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpjLmVuY2Fwc3VsYXRpb258fEpzLkVtdWxhdGVkLHN0eWxlczpjLnN0eWxlc3x8dHMsXzpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGws''@;'; put 'put ''aWQ6IiJ9O1IwKGEpO2NvbnN0IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1wNShkLCExKSxhLnBpcGVEZWZzPXA1KGQsITApLGEuaWQ9ZnVuY3Rpb24gancoYyl7bGV0IGw9MDtjb25zdCBhPVtjLnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RW''@;'; put 'put ''YXJzLGMuaG9zdEF0dHJzLGMuY29uc3RzLGMudmFycyxjLmRlY2xzLGMuZW5jYXBzdWxhdGlvbixjLnN0YW5kYWxvbmUsYy5zaWduYWxzLGMuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkoYy5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KGMub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFt''@;'; put 'put ''ZXMoYy50eXBlLnByb3RvdHlwZSksISFjLmNvbnRlbnRRdWVyaWVzLCEhYy52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgaCBvZiBhKWw9TWF0aC5pbXVsKDMxLGwpK2guY2hhckNvZGVBdCgwKXwwO3JldHVybiBsKz0yMTQ3NDgzNjQ4LCJjIitsfShhKSxhfSl9ZnVuY3Rpb24gYmYo''@;'; put 'put ''Yyl7cmV0dXJuIFZvKGMpfHx4YyhjKX1mdW5jdGlvbiBmNShjKXtyZXR1cm4gbnVsbCE9PWN9ZnVuY3Rpb24ga2koYyl7cmV0dXJuIE5zKCgpPT4oe3R5cGU6Yy50eXBlLGJvb3RzdHJhcDpjLmJvb3RzdHJhcHx8dHMsZGVjbGFyYXRpb25zOmMuZGVjbGFyYXRpb25zfHx0cyxpbXBvcnRzOmMu''@;'; put 'put ''aW1wb3J0c3x8dHMsZXhwb3J0czpjLmV4cG9ydHN8fHRzLHRyYW5zaXRpdmVDb21waWxlU2NvcGVzOm51bGwsc2NoZW1hczpjLnNjaGVtYXN8fG51bGwsaWQ6Yy5pZHx8bnVsbH0pKX1mdW5jdGlvbiB5NChjLGwpe2lmKG51bGw9PWMpcmV0dXJuIEkwO2NvbnN0IGE9e307Zm9yKGNvbnN0IGQg''@;'; put 'put ''aW4gYylpZihjLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWNbZF07bGV0IGYsdixNPU5uLk5vbmU7QXJyYXkuaXNBcnJheShoKT8oTT1oWzBdLGY9aFsxXSx2PWhbMl0/P2YpOihmPWgsdj1oKSxsPyhhW2ZdPU0hPT1Obi5Ob25lP1tkLE1dOmQsbFtmXT12KTphW2ZdPWR9cmV0dXJuIGF9''@;'; put 'put ''ZnVuY3Rpb24gRXIoYyl7cmV0dXJuIE5zKCgpPT57Y29uc3QgbD1SNihjKTtyZXR1cm4gUjAobCksbH0pfWZ1bmN0aW9uIGxsKGMpe3JldHVybnt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PWMucHVyZSxzdGFuZGFsb25lOiEwPT09Yy5zdGFuZGFsb25l''@;'; put 'put ''LG9uRGVzdHJveTpjLnR5cGUucHJvdG90eXBlLm5nT25EZXN0cm95fHxudWxsfX1mdW5jdGlvbiBWbyhjKXtyZXR1cm4gY1skb118fG51bGx9ZnVuY3Rpb24geGMoYyl7cmV0dXJuIGNbWGxdfHxudWxsfWZ1bmN0aW9uIGV1KGMpe3JldHVybiBjW3RvXXx8bnVsbH1mdW5jdGlvbiBQdShjLGwp''@;'; put 'put ''e2NvbnN0IGE9Y1tfb118fG51bGw7aWYoIWEmJiEwPT09bCl0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJHtQcihjKX0gZG9lcyBub3QgaGF2ZSAnXHUwMjc1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gYX1mdW5jdGlvbiBSNihjKXtjb25zdCBsPXt9O3JldHVybnt0eXBlOmMudHlwZSxwcm92aWRl''@;'; put 'put ''cnNSZXNvbHZlcjpudWxsLGZhY3Rvcnk6bnVsbCxob3N0QmluZGluZ3M6Yy5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6Yy5ob3N0VmFyc3x8MCxob3N0QXR0cnM6Yy5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJpZXM6Yy5jb250ZW50UXVlcmllc3x8bnVsbCxkZWNsYXJlZElucHV0''@;'; put 'put ''czpsLGlucHV0VHJhbnNmb3JtczpudWxsLGlucHV0Q29uZmlnOmMuaW5wdXRzfHxJMCxleHBvcnRBczpjLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsc2lnbmFsczohMD09PWMuc2lnbmFscyxzZWxlY3RvcnM6Yy5zZWxlY3RvcnN8fHRzLHZpZXdRdWVyeTpj''@;'; put 'put ''LnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpjLmZlYXR1cmVzfHxudWxsLHNldElucHV0Om51bGwsZmluZEhvc3REaXJlY3RpdmVEZWZzOm51bGwsaG9zdERpcmVjdGl2ZXM6bnVsbCxpbnB1dHM6eTQoYy5pbnB1dHMsbCksb3V0cHV0czp5NChjLm91dHB1dHMpLGRlYnVnSW5mbzpudWxsfX1m''@;'; put 'put ''dW5jdGlvbiBSMChjKXtjLmZlYXR1cmVzPy5mb3JFYWNoKGw9PmwoYykpfWZ1bmN0aW9uIHA1KGMsbCl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgYT1sP2V1OmJmO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmMpLm1hcChkPT5hKGQpKS5maWx0ZXIoZjUpfWZ1bmN0aW9u''@;'; put 'put ''IHp3KC4uLmMpe3JldHVybntcdTAyNzVwcm92aWRlcnM6cmgoMCxjKSxcdTAyNzVmcm9tTmdNb2R1bGU6ITB9fWZ1bmN0aW9uIHJoKGMsLi4ubCl7Y29uc3QgYT1bXSxkPW5ldyBTZXQ7bGV0IGg7Y29uc3QgZj12PT57YS5wdXNoKHYpfTtyZXR1cm4gUjMobCx2PT57Y29uc3QgTT12O180KE0s''@;'; put 'put ''ZixbXSxkKSYmKGh8fD1bXSxoLnB1c2goTSkpfSksdm9pZCAwIT09aCYmYnYoaCxmKSxhfWZ1bmN0aW9uIGJ2KGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0e25nTW9kdWxlOmQscHJvdmlkZXJzOmh9PWNbYV07TDYoaCxmPT57bChmLGQpfSl9fWZ1bmN0aW9uIF80KGMs''@;'; put 'put ''bCxhLGQpe2lmKCEoYz1ZaShjKSkpcmV0dXJuITE7bGV0IGg9bnVsbCxmPVZzKGMpO2NvbnN0IHY9IWYmJlZvKGMpO2lmKGZ8fHYpe2lmKHYmJiF2LnN0YW5kYWxvbmUpcmV0dXJuITE7aD1jfWVsc2V7Y29uc3QgRD1jLm5nTW9kdWxlO2lmKGY9VnMoRCksIWYpcmV0dXJuITE7aD1EfWNvbnN0''@;'; put 'put ''IE09ZC5oYXMoaCk7aWYodil7aWYoTSlyZXR1cm4hMTtpZihkLmFkZChoKSx2LmRlcGVuZGVuY2llcyl7Y29uc3QgRD0iZnVuY3Rpb24iPT10eXBlb2Ygdi5kZXBlbmRlbmNpZXM/di5kZXBlbmRlbmNpZXMoKTp2LmRlcGVuZGVuY2llcztmb3IoY29uc3QgWiBvZiBEKV80KFosbCxhLGQpfX1l''@;'; put 'put ''bHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFNKXtsZXQgWjtkLmFkZChoKTt0cnl7UjMoZi5pbXBvcnRzLHJlPT57XzQocmUsbCxhLGQpJiYoWnx8PVtdLFoucHVzaChyZSkpfSl9ZmluYWxseXt9dm9pZCAwIT09WiYmYnYoWixsKX1pZighTSl7Y29uc3QgWj1tdSho''@;'; put 'put ''KXx8KCgpPT5uZXcgaCk7bCh7cHJvdmlkZTpoLHVzZUZhY3Rvcnk6WixkZXBzOnRzfSxoKSxsKHtwcm92aWRlOms2LHVzZVZhbHVlOmgsbXVsdGk6ITB9LGgpLGwoe3Byb3ZpZGU6dDIsdXNlVmFsdWU6KCk9PnhyKGgpLG11bHRpOiEwfSxoKX1jb25zdCBEPWYucHJvdmlkZXJzO2lmKG51bGwh''@;'; put 'put ''PUQmJiFNKXtjb25zdCBaPWM7TDYoRCxyZT0+e2wocmUsWil9KX19fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gTDYoYyxsKXtmb3IobGV0IGEgb2YgYylWYShhKSYmKGE9YS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/TDYoYSxsKTpsKGEp''@;'; put 'put ''fWNvbnN0IFV3PUhhKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpIYX0pO2Z1bmN0aW9uIE82KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZVdyBpbiBjfWZ1bmN0aW9uIF9mKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IEY2PW5ldyBTdCgiIiks''@;'; put 'put ''RjM9e30sWnc9e307bGV0IEg2O2Z1bmN0aW9uIEgzKCl7cmV0dXJuIHZvaWQgMD09PUg2JiYoSDY9bmV3IHU1KSxINn1jbGFzcyBoY3t9Y2xhc3MgY2QgZXh0ZW5kcyBoY3tnZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1jb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigp''@;'; put 'put ''LHRoaXMucGFyZW50PWEsdGhpcy5zb3VyY2U9ZCx0aGlzLnNjb3Blcz1oLHRoaXMucmVjb3Jkcz1uZXcgTWFwLHRoaXMuX25nT25EZXN0cm95SG9va3M9bmV3IFNldCx0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITEsbTUobCx2PT50aGlzLnByb2Nlc3NQcm92aWRl''@;'; put 'put ''cih2KSksdGhpcy5yZWNvcmRzLnNldChMMyxOMyh2b2lkIDAsdGhpcykpLGguaGFzKCJlbnZpcm9ubWVudCIpJiZ0aGlzLnJlY29yZHMuc2V0KGhjLE4zKHZvaWQgMCx0aGlzKSk7Y29uc3QgZj10aGlzLnJlY29yZHMuZ2V0KEY2KTtudWxsIT1mJiYic3RyaW5nIj09dHlwZW9mIGYudmFsdWUm''@;'; put 'put ''JnRoaXMuc2NvcGVzLmFkZChmLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChrNix0cyxyYS5TZWxmKSl9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO2NvbnN0IGw9X2UobnVsbCk7dHJ5e2Zvcihjb25z''@;'; put 'put ''dCBkIG9mIHRoaXMuX25nT25EZXN0cm95SG9va3MpZC5uZ09uRGVzdHJveSgpO2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3M7dGhpcy5fb25EZXN0cm95SG9va3M9W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9ZmluYWxseXt0aGlzLnJlY29yZHMuY2xlYXIoKSx0aGlzLl9uZ09uRGVzdHJv''@;'; put 'put ''eUhvb2tzLmNsZWFyKCksdGhpcy5pbmplY3RvckRlZlR5cGVzLmNsZWFyKCksX2UobCl9fW9uRGVzdHJveShsKXtyZXR1cm4gdGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5wdXNoKGwpLCgpPT50aGlzLnJlbW92ZU9uRGVzdHJveShsKX1ydW5JbkNvbnRl''@;'; put 'put ''eHQobCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKTtjb25zdCBhPW5oKHRoaXMpLGQ9X2wodm9pZCAwKTt0cnl7cmV0dXJuIGwoKX1maW5hbGx5e25oKGEpLF9sKGQpfX1nZXQobCxhPUswLGQ9cmEuRGVmYXVsdCl7aWYodGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSxsLmhhc093blByb3Bl''@;'; put 'put ''cnR5KHpsKSlyZXR1cm4gbFt6bF0odGhpcyk7ZD1vNShkKTtjb25zdCBmPW5oKHRoaXMpLHY9X2wodm9pZCAwKTt0cnl7aWYoIShkJnJhLlNraXBTZWxmKSl7bGV0IEQ9dGhpcy5yZWNvcmRzLmdldChsKTtpZih2b2lkIDA9PT1EKXtjb25zdCBaPWZ1bmN0aW9uIFl3KGMpe3JldHVybiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMmJmMgaW5zdGFuY2VvZiBTdH0obCkmJlBvKGwpO0Q9WiYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShaKT9OMyhnNShsKSxGMyk6bnVsbCx0aGlzLnJlY29yZHMuc2V0KGwsRCl9aWYobnVsbCE9RClyZXR1cm4gdGhpcy5oeWRy''@;'; put 'put ''YXRlKGwsRCl9cmV0dXJuKGQmcmEuU2VsZj9IMygpOnRoaXMucGFyZW50KS5nZXQobCxhPWQmcmEuT3B0aW9uYWwmJmE9PT1LMD9udWxsOmEpfWNhdGNoKE0pe2lmKCJOdWxsSW5qZWN0b3JFcnJvciI9PT1NLm5hbWUpe2lmKChNW0ZjXT1NW0ZjXXx8W10pLnVuc2hpZnQoUHIobCkpLGYpdGhy''@;'; put 'put ''b3cgTTtyZXR1cm4gZnVuY3Rpb24gbDUoYyxsLGEsZCl7Y29uc3QgaD1jW0ZjXTt0aHJvdyBsW3NsXSYmaC51bnNoaWZ0KGxbc2xdKSxjLm1lc3NhZ2U9ZnVuY3Rpb24gZzQoYyxsLGEsZD1udWxsKXtjPWMmJiJcbiI9PT1jLmNoYXJBdCgwKSYmIlx1MDI3NSI9PWMuY2hhckF0KDEpP2Muc2xp''@;'; put 'put ''Y2UoMik6YztsZXQgaD1QcihsKTtpZihBcnJheS5pc0FycmF5KGwpKWg9bC5tYXAoUHIpLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgbCl7bGV0IGY9W107Zm9yKGxldCB2IGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eSh2KSl7bGV0IE09bFt2XTtmLnB1c2godisiOiIr''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgTT9KU09OLnN0cmluZ2lmeShNKTpQcihNKSkpfWg9YHske2Yuam9pbigiLCAiKX19YH1yZXR1cm5gJHthfSR7ZD8iKCIrZCsiKSI6IiJ9WyR7aH1dOiAke2MucmVwbGFjZShSdywiXG4gICIpfWB9KCJcbiIrYy5tZXNzYWdlLGgsYSxkKSxjLm5nVG9rZW5QYXRo''@;'; put 'put ''PWgsY1tGY109bnVsbCxjfShNLGwsIlIzSW5qZWN0b3JFcnJvciIsdGhpcy5zb3VyY2UpfXRocm93IE19ZmluYWxseXtfbCh2KSxuaChmKX19cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7Y29uc3QgbD1fZShudWxsKSxhPW5oKHRoaXMpLGQ9X2wodm9pZCAwKTt0cnl7Y29uc3QgZj10''@;'; put 'put ''aGlzLmdldCh0Mix0cyxyYS5TZWxmKTtmb3IoY29uc3QgdiBvZiBmKXYoKX1maW5hbGx5e25oKGEpLF9sKGQpLF9lKGwpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5rZXlzKCkpbC5wdXNoKFByKGQpKTtyZXR1cm5gUjNJbmplY3Rvclsk''@;'; put 'put ''e2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPV9mKGw9WWkobCkpP2w6WWkobCYmbC5wcm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIE42KGMpe3JldHVybiBP''@;'; put 'put ''NihjKT9OMyh2b2lkIDAsYy51c2VWYWx1ZSk6TjMoQ3YoYyksRjMpfShsKTtpZighX2YobCkmJiEwPT09bC5tdWx0aSl7bGV0IGg9dGhpcy5yZWNvcmRzLmdldChhKTtofHwoaD1OMyh2b2lkIDAsRjMsITApLGguZmFjdG9yeT0oKT0+czUoaC5tdWx0aSksdGhpcy5yZWNvcmRzLnNldChhLGgp''@;'; put 'put ''KSxhPWwsaC5tdWx0aS5wdXNoKGwpfXRoaXMucmVjb3Jkcy5zZXQoYSxkKX1oeWRyYXRlKGwsYSl7Y29uc3QgZD1fZShudWxsKTt0cnl7cmV0dXJuIGEudmFsdWU9PT1GMyYmKGEudmFsdWU9WncsYS52YWx1ZT1hLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBhLnZhbHVlJiZhLnZhbHVl''@;'; put 'put ''JiZmdW5jdGlvbiBTdihjKXtyZXR1cm4gbnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMubmdPbkRlc3Ryb3l9KGEudmFsdWUpJiZ0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmFkZChhLnZhbHVlKSxhLnZhbHVlfWZpbmFsbHl7X2UoZCl9fWluamVjdGFi''@;'; put 'put ''bGVEZWZJblNjb3BlKGwpe2lmKCFsLnByb3ZpZGVkSW4pcmV0dXJuITE7Y29uc3QgYT1ZaShsLnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT8iYW55Ij09PWF8fHRoaXMuc2NvcGVzLmhhcyhhKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGEpfXJlbW92ZU9uRGVzdHJv''@;'; put 'put ''eShsKXtjb25zdCBhPXRoaXMuX29uRGVzdHJveUhvb2tzLmluZGV4T2YobCk7LTEhPT1hJiZ0aGlzLl9vbkRlc3Ryb3lIb29rcy5zcGxpY2UoYSwxKX19ZnVuY3Rpb24gZzUoYyl7Y29uc3QgbD1QbyhjKSxhPW51bGwhPT1sP2wuZmFjdG9yeTptdShjKTtpZihudWxsIT09YSlyZXR1cm4gYTtp''@;'; put 'put ''ZihjIGluc3RhbmNlb2YgU3QpdGhyb3cgbmV3IFFuKDIwNCwhMSk7aWYoYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBmdW5jdGlvbiB3dihjKXtpZihjLmxlbmd0aD4wKXRocm93IG5ldyBRbigyMDQsITEpO2NvbnN0IGE9ZnVuY3Rpb24gem8oYyl7cmV0dXJuIGMmJihjW1NzXXx8Y1tI''@;'; put 'put ''b10pfHxudWxsfShjKTtyZXR1cm4gbnVsbCE9PWE/KCk9PmEuZmFjdG9yeShjKTooKT0+bmV3IGN9KGMpO3Rocm93IG5ldyBRbigyMDQsITEpfWZ1bmN0aW9uIEN2KGMsbCxhKXtsZXQgZDtpZihfZihjKSl7Y29uc3QgaD1ZaShjKTtyZXR1cm4gbXUoaCl8fGc1KGgpfWlmKE82KGMpKWQ9KCk9''@;'; put 'put ''PllpKGMudXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24gX3YoYyl7cmV0dXJuISghY3x8IWMudXNlRmFjdG9yeSl9KGMpKWQ9KCk9PmMudXNlRmFjdG9yeSguLi5zNShjLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbiB5dihjKXtyZXR1cm4hKCFjfHwhYy51c2VFeGlzdGluZyl9KGMpKWQ9''@;'; put 'put ''KCk9PnhyKFlpKGMudXNlRXhpc3RpbmcpKTtlbHNle2NvbnN0IGg9WWkoYyYmKGMudXNlQ2xhc3N8fGMucHJvdmlkZSkpO2lmKCFmdW5jdGlvbiBXdyhjKXtyZXR1cm4hIWMuZGVwc30oYykpcmV0dXJuIG11KGgpfHxnNShoKTtkPSgpPT5uZXcgaCguLi5zNShjLmRlcHMpKX1yZXR1cm4gZH1m''@;'; put 'put ''dW5jdGlvbiBOMyhjLGwsYT0hMSl7cmV0dXJue2ZhY3Rvcnk6Yyx2YWx1ZTpsLG11bHRpOmE/W106dm9pZCAwfX1mdW5jdGlvbiBtNShjLGwpe2Zvcihjb25zdCBhIG9mIGMpQXJyYXkuaXNBcnJheShhKT9tNShhLGwpOmEmJlZhKGEpP201KGEuXHUwMjc1cHJvdmlkZXJzLGwpOmwoYSl9ZnVu''@;'; put 'put ''Y3Rpb24gcTAoYyxsKXtjIGluc3RhbmNlb2YgY2QmJmMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7Y29uc3QgZD1uaChjKSxoPV9sKHZvaWQgMCk7dHJ5e3JldHVybiBsKCl9ZmluYWxseXtuaChkKSxfbChoKX19ZnVuY3Rpb24gTXYoKXtyZXR1cm4gdm9pZCAwIT09YTUoKXx8bnVsbCE9ZnVuY3Rp''@;'; put 'put ''b24gTHcoKXtyZXR1cm4gSTN9KCl9Y29uc3QgajY9RnVuY3Rpb247Y29uc3QgVWw9MCxLaT0xLFVhPTIsZmM9MyxOYz00LHJjPTUsbnU9NixYMD03LGNsPTgscGM9OSxMMT0xMCxibz0xMSxTZj0xMixDND0xMyxvMD0xNCxabD0xNSxTND0xNixNZj0xNyx1ZD0xOCx3MD0xOSxhMj0yMCxvMj0y''@;'; put 'put ''MSx2NT0yMix4Zj0yMyx3bz0yNSx6Nj0xLHZ1PTcsVjM9OSxnYz0xMDt2YXIgYjU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob25lPTBdPSJOb25lIixjW2MuSGFzVHJhbnNwbGFudGVkVmlld3M9Ml09Ikhhc1RyYW5zcGxhbnRlZFZpZXdzIixjfShiNXx8e30pO2Z1bmN0aW9uIEZ1KGMpe3Jl''@;'; put 'put ''dHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbejZdfWZ1bmN0aW9uIEh1KGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYhMD09PWNbejZdfWZ1bmN0aW9uIHJ1KGMpe3JldHVybiEhKDQmYy5mbGFncyl9ZnVuY3Rpb24gRWYoYyl7cmV0dXJuIGMuY29tcG9uZW50''@;'; put 'put ''T2Zmc2V0Pi0xfWZ1bmN0aW9uIEowKGMpe3JldHVybiEoMSZ+Yy5mbGFncyl9ZnVuY3Rpb24gVmMoYyl7cmV0dXJuISFjLnRlbXBsYXRlfWZ1bmN0aW9uIHg0KGMpe3JldHVybiEhKDUxMiZjW1VhXSl9Y2xhc3MgdFZ7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucHJldmlvdXNWYWx1ZT1sLHRo''@;'; put 'put ''aXMuY3VycmVudFZhbHVlPWEsdGhpcy5maXJzdENoYW5nZT1kfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19ZnVuY3Rpb24gWUEoYyxsLGEsZCl7bnVsbCE9PWw/bC5hcHBseVZhbHVlVG9JbnB1dFNpZ25hbChsLGQpOmNbYV09ZH1mdW5jdGlvbiB3bCgpe3JldHVy''@;'; put 'put ''biBHQX1mdW5jdGlvbiBHQShjKXtyZXR1cm4gYy50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKGMuc2V0SW5wdXQ9clYpLG5WfWZ1bmN0aW9uIG5WKCl7Y29uc3QgYz1LQSh0aGlzKSxsPWM/LmN1cnJlbnQ7aWYobCl7Y29uc3QgYT1jLnByZXZpb3VzO2lmKGE9PT1JMCljLnByZXZpb3Vz''@;'; put 'put ''PWw7ZWxzZSBmb3IobGV0IGQgaW4gbClhW2RdPWxbZF07Yy5jdXJyZW50PW51bGwsdGhpcy5uZ09uQ2hhbmdlcyhsKX19ZnVuY3Rpb24gclYoYyxsLGEsZCxoKXtjb25zdCBmPXRoaXMuZGVjbGFyZWRJbnB1dHNbZF0sdj1LQShjKXx8ZnVuY3Rpb24gaVYoYyxsKXtyZXR1cm4gY1skQV09bH0o''@;'; put 'put ''Yyx7cHJldmlvdXM6STAsY3VycmVudDpudWxsfSksTT12LmN1cnJlbnR8fCh2LmN1cnJlbnQ9e30pLEQ9di5wcmV2aW91cyxaPURbZl07TVtmXT1uZXcgdFYoWiYmWi5jdXJyZW50VmFsdWUsYSxEPT09STApLFlBKGMsbCxoLGEpfXdsLm5nSW5oZXJpdD0hMDtjb25zdCAkQT0iX19uZ1NpbXBs''@;'; put 'put ''ZUNoYW5nZXNfXyI7ZnVuY3Rpb24gS0EoYyl7cmV0dXJuIGNbJEFdfHxudWxsfWNvbnN0IHUyPWZ1bmN0aW9uKGMsbCxhKXt9O2xldCBYQT0hMTtmdW5jdGlvbiBDbChjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9Y1tVbF07cmV0dXJuIGN9ZnVuY3Rpb24geTUoYyxsKXtyZXR1cm4gQ2wo''@;'; put 'put ''bFtjXSl9ZnVuY3Rpb24gTDAoYyxsKXtyZXR1cm4gQ2wobFtjLmluZGV4XSl9ZnVuY3Rpb24gWTYoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uIEU0KGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gTzEoYyxsKXtjb25zdCBhPWxbY107cmV0dXJuIEZ1KGEpP2E6YVtVbF19ZnVuY3Rp''@;'; put 'put ''b24gUXcoYyl7cmV0dXJuISgxMjgmfmNbVWFdKX1mdW5jdGlvbiBkMihjLGwpe3JldHVybiBudWxsPT1sP251bGw6Y1tsXX1mdW5jdGlvbiBlQyhjKXtjW01mXT0wfWZ1bmN0aW9uIGNWKGMpezEwMjQmY1tVYV18fChjW1VhXXw9MTAyNCxRdyhjKSYmRzYoYykpfWZ1bmN0aW9uIFR2KGMpe3Jl''@;'; put 'put ''dHVybiEhKDkyMTYmY1tVYV18fGNbeGZdPy5kaXJ0eSl9ZnVuY3Rpb24gbkMoYyl7Y1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoMSksVHYoYyk/RzYoYyk6NjQmY1tVYV0mJihmdW5jdGlvbiBvVigpe3JldHVybiBYQX0oKT8oY1tVYV18PTEwMjQsRzYoYykpOmNbTDFd''@;'; put 'put ''LmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCkpfWZ1bmN0aW9uIEc2KGMpe2NbTDFdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCk7bGV0IGw9VDQoYyk7Zm9yKDtudWxsIT09bCYmISg4MTkyJmxbVWFdKSYmKGxbVWFdfD04MTkyLFF3KGwpKTspbD1UNChsKX1m''@;'; put 'put ''dW5jdGlvbiBBdihjLGwpe2lmKCEoMjU2Jn5jW1VhXSkpdGhyb3cgbmV3IFFuKDkxMSwhMSk7bnVsbD09PWNbbzJdJiYoY1tvMl09W10pLGNbbzJdLnB1c2gobCl9ZnVuY3Rpb24gVDQoYyl7Y29uc3QgbD1jW2ZjXTtyZXR1cm4gSHUobCk/bFtmY106bH1jb25zdCBDbz17bEZyYW1lOmFrKG51''@;'; put 'put ''bGwpLGJpbmRpbmdzRW5hYmxlZDohMCxza2lwSHlkcmF0aW9uUm9vdFROb2RlOm51bGx9O2Z1bmN0aW9uIHRrKCl7cmV0dXJuIENvLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBfNSgpe3JldHVybiBudWxsIT09Q28uc2tpcEh5ZHJhdGlvblJvb3RUTm9kZX1mdW5jdGlvbiBkaSgpe3JldHVy''@;'; put 'put ''biBDby5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gbHMoKXtyZXR1cm4gQ28ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHd0KGMpe3JldHVybiBDby5sRnJhbWUuY29udGV4dExWaWV3PWMsY1tjbF19ZnVuY3Rpb24gQ3QoYyl7cmV0dXJuIENvLmxGcmFtZS5jb250ZXh0TFZpZXc9bnVsbCxjfWZ1bmN0''@;'; put 'put ''aW9uIHVsKCl7bGV0IGM9ckMoKTtmb3IoO251bGwhPT1jJiY2ND09PWMudHlwZTspYz1jLnBhcmVudDtyZXR1cm4gY31mdW5jdGlvbiByQygpe3JldHVybiBDby5sRnJhbWUuY3VycmVudFROb2RlfWZ1bmN0aW9uIGgyKGMsbCl7Y29uc3QgYT1Dby5sRnJhbWU7YS5jdXJyZW50VE5vZGU9Yyxh''@;'; put 'put ''LmlzUGFyZW50PWx9ZnVuY3Rpb24gaUMoKXtyZXR1cm4gQ28ubEZyYW1lLmlzUGFyZW50fWZ1bmN0aW9uIGFDKCl7Q28ubEZyYW1lLmlzUGFyZW50PSExfWZ1bmN0aW9uIE8wKCl7Y29uc3QgYz1Dby5sRnJhbWU7bGV0IGw9Yy5iaW5kaW5nUm9vdEluZGV4O3JldHVybi0xPT09bCYmKGw9Yy5i''@;'; put 'put ''aW5kaW5nUm9vdEluZGV4PWMudFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgpLGx9ZnVuY3Rpb24gVGYoKXtyZXR1cm4gQ28ubEZyYW1lLmJpbmRpbmdJbmRleH1mdW5jdGlvbiBhaCgpe3JldHVybiBDby5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gQWYoYyl7Y29uc3QgbD1Dby5sRnJh''@;'; put 'put ''bWUsYT1sLmJpbmRpbmdJbmRleDtyZXR1cm4gbC5iaW5kaW5nSW5kZXg9bC5iaW5kaW5nSW5kZXgrYyxhfWZ1bmN0aW9uIHlWKGMsbCl7Y29uc3QgYT1Dby5sRnJhbWU7YS5iaW5kaW5nSW5kZXg9YS5iaW5kaW5nUm9vdEluZGV4PWMsb0MobCl9ZnVuY3Rpb24gb0MoYyl7Q28ubEZyYW1lLmN1''@;'; put 'put ''cnJlbnREaXJlY3RpdmVJbmRleD1jfWZ1bmN0aW9uIHNDKGMpe2NvbnN0IGw9Q28ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDtyZXR1cm4tMT09PWw/bnVsbDpjW2xdfWZ1bmN0aW9uIGxDKCl7cmV0dXJuIENvLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleH1mdW5jdGlvbiBCMyhjKXtD''@;'; put 'put ''by5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXg9Y31mdW5jdGlvbiBjQyhjKXtjb25zdCBsPWNbS2ldO3JldHVybiAyPT09bC50eXBlP2wuZGVjbFROb2RlOjE9PT1sLnR5cGU/Y1tyY106bnVsbH1mdW5jdGlvbiBEdihjLGwsYSl7aWYoYSZyYS5Ta2lwU2VsZil7bGV0IGg9bCxmPWM7Zm9yKDsh''@;'; put 'put ''KGg9aC5wYXJlbnQsbnVsbCE9PWh8fGEmcmEuSG9zdHx8KGg9Y0MoZiksbnVsbD09PWh8fChmPWZbbzBdLDEwJmgudHlwZSkpKTspO2lmKG51bGw9PT1oKXJldHVybiExO2w9aCxjPWZ9Y29uc3QgZD1Dby5sRnJhbWU9ajMoKTtyZXR1cm4gZC5jdXJyZW50VE5vZGU9bCxkLmxWaWV3PWMsITB9''@;'; put 'put ''ZnVuY3Rpb24gSzYoYyl7Y29uc3QgbD1qMygpLGE9Y1tLaV07Q28ubEZyYW1lPWwsbC5jdXJyZW50VE5vZGU9YS5maXJzdENoaWxkLGwubFZpZXc9YyxsLnRWaWV3PWEsbC5jb250ZXh0TFZpZXc9YyxsLmJpbmRpbmdJbmRleD1hLmJpbmRpbmdTdGFydEluZGV4LGwuaW5JMThuPSExfWZ1bmN0''@;'; put 'put ''aW9uIGozKCl7Y29uc3QgYz1Dby5sRnJhbWUsbD1udWxsPT09Yz9udWxsOmMuY2hpbGQ7cmV0dXJuIG51bGw9PT1sP2FrKGMpOmx9ZnVuY3Rpb24gYWsoYyl7Y29uc3QgbD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6''@;'; put 'put ''LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50OmMsY2hpbGQ6bnVsbCxp''@;'; put 'put ''bkkxOG46ITF9O3JldHVybiBudWxsIT09YyYmKGMuY2hpbGQ9bCksbH1mdW5jdGlvbiBJdigpe2NvbnN0IGM9Q28ubEZyYW1lO3JldHVybiBDby5sRnJhbWU9Yy5wYXJlbnQsYy5jdXJyZW50VE5vZGU9bnVsbCxjLmxWaWV3PW51bGwsY31jb25zdCBvaz1JdjtmdW5jdGlvbiB3NSgpe2NvbnN0''@;'; put 'put ''IGM9SXYoKTtjLmlzUGFyZW50PSEwLGMudFZpZXc9bnVsbCxjLnNlbGVjdGVkSW5kZXg9LTEsYy5jb250ZXh0TFZpZXc9bnVsbCxjLmVsZW1lbnREZXB0aENvdW50PTAsYy5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsYy5jdXJyZW50TmFtZXNwYWNlPW51bGwsYy5iaW5kaW5nUm9vdEluZGV4''@;'; put 'put ''PS0xLGMuYmluZGluZ0luZGV4PS0xLGMuY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBWdSgpe3JldHVybiBDby5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiBBNChjKXtDby5sRnJhbWUuc2VsZWN0ZWRJbmRleD1jfWZ1bmN0aW9uIFFzKCl7Y29uc3QgYz1Dby5sRnJhbWU7cmV0''@;'; put 'put ''dXJuIFk2KGMudFZpZXcsYy5zZWxlY3RlZEluZGV4KX1sZXQgbGs9ITA7ZnVuY3Rpb24gcTYoKXtyZXR1cm4gbGt9ZnVuY3Rpb24gZjIoYyl7bGs9Y31mdW5jdGlvbiBSdihjLGwpe2ZvcihsZXQgYT1sLmRpcmVjdGl2ZVN0YXJ0LGQ9bC5kaXJlY3RpdmVFbmQ7YTxkO2ErKyl7Y29uc3QgZj1j''@;'; put 'put ''LmRhdGFbYV0udHlwZS5wcm90b3R5cGUse25nQWZ0ZXJDb250ZW50SW5pdDp2LG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpNLG5nQWZ0ZXJWaWV3SW5pdDpELG5nQWZ0ZXJWaWV3Q2hlY2tlZDpaLG5nT25EZXN0cm95OnJlfT1mO3YmJihjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKC1hLHYpLE0m''@;'; put 'put ''JigoYy5jb250ZW50SG9va3M/Pz1bXSkucHVzaChhLE0pLChjLmNvbnRlbnRDaGVja0hvb2tzPz89W10pLnB1c2goYSxNKSksRCYmKGMudmlld0hvb2tzPz89W10pLnB1c2goLWEsRCksWiYmKChjLnZpZXdIb29rcz8/PVtdKS5wdXNoKGEsWiksKGMudmlld0NoZWNrSG9va3M/Pz1bXSkucHVz''@;'; put 'put ''aChhLFopKSxudWxsIT1yZSYmKGMuZGVzdHJveUhvb2tzPz89W10pLnB1c2goYSxyZSl9fWZ1bmN0aW9uIEx2KGMsbCxhKXtjayhjLGwsMyxhKX1mdW5jdGlvbiBPdihjLGwsYSxkKXsoMyZjW1VhXSk9PT1hJiZjayhjLGwsYSxkKX1mdW5jdGlvbiBkQyhjLGwpe2xldCBhPWNbVWFdOygzJmEp''@;'; put 'put ''PT09bCYmKGEmPTE2MzgzLGErPTEsY1tVYV09YSl9ZnVuY3Rpb24gY2soYyxsLGEsZCl7Y29uc3QgZj1kPz8tMSx2PWwubGVuZ3RoLTE7bGV0IE09MDtmb3IobGV0IEQ9dm9pZCAwIT09ZD82NTUzNSZjW01mXTowO0Q8djtEKyspaWYoIm51bWJlciI9PXR5cGVvZiBsW0QrMV0pe2lmKE09bFtE''@;'; put 'put ''XSxudWxsIT1kJiZNPj1kKWJyZWFrfWVsc2UgbFtEXTwwJiYoY1tNZl0rPTY1NTM2KSwoTTxmfHwtMT09ZikmJihFVihjLGEsbCxEKSxjW01mXT0oNDI5NDkwMTc2MCZjW01mXSkrRCsyKSxEKyt9ZnVuY3Rpb24gdWsoYyxsKXt1Mig0LGMsbCk7Y29uc3QgYT1fZShudWxsKTt0cnl7bC5jYWxs''@;'; put 'put ''KGMpfWZpbmFsbHl7X2UoYSksdTIoNSxjLGwpfX1mdW5jdGlvbiBFVihjLGwsYSxkKXtjb25zdCBoPWFbZF08MCxmPWFbZCsxXSxNPWNbaD8tYVtkXTphW2RdXTtoP2NbVWFdPj4xNDxjW01mXT4+MTYmJigzJmNbVWFdKT09PWwmJihjW1VhXSs9MTYzODQsdWsoTSxmKSk6dWsoTSxmKX1jb25z''@;'; put 'put ''dCBrND0tMTtjbGFzcyBQMXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9uIFB2KGMpe3JldHVybiBjIT09azR9ZnVuY3Rpb24gWDYoYyl7cmV0dXJu''@;'; put 'put ''IDMyNzY3JmN9ZnVuY3Rpb24gSjYoYyxsKXtsZXQgYT1mdW5jdGlvbiBSVihjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kW28wXSxhLS07cmV0dXJuIGR9bGV0IGZDPSEwO2Z1bmN0aW9uIEZ2KGMpe2NvbnN0IGw9ZkM7cmV0dXJuIGZDPWMsbH1jb25zdCBIdj0yNTUscEM9''@;'; put 'put ''NTtsZXQgTFY9MDtjb25zdCBwMj17fTtmdW5jdGlvbiBOdihjLGwpe2NvbnN0IGE9VnYoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW0tpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRleD1sLmxlbmd0aCxnQyhkLmRhdGEsYyksZ0MobCxudWxsKSxnQyhkLmJs''@;'; put 'put ''dWVwcmludCxudWxsKSk7Y29uc3QgaD1DNShjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKFB2KGgpKXtjb25zdCB2PVg2KGgpLE09SjYoaCxsKSxEPU1bS2ldLmRhdGE7Zm9yKGxldCBaPTA7Wjw4O1orKylsW2YrWl09TVt2K1pdfERbditaXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBn''@;'; put 'put ''QyhjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gVnYoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmluamVjdG9ySW5kZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmlu''@;'; put 'put ''amVjdG9ySW5kZXh9ZnVuY3Rpb24gQzUoYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9bDtmb3IoO251bGwhPT1oOyl7aWYoZD1zaChoKSxudWxsPT09ZClyZXR1cm4gazQ7''@;'; put 'put ''aWYoYSsrLGg9aFtvMF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gazR9ZnVuY3Rpb24gaGQoYyxsLGEpeyFmdW5jdGlvbiBPVihjLGwsYSl7bGV0IGQ7InN0cmluZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFz''@;'; put 'put ''T3duUHJvcGVydHkoUGMpJiYoZD1hW1BjXSksbnVsbD09ZCYmKGQ9YVtQY109TFYrKyk7Y29uc3QgaD1kJkh2O2wuZGF0YVtjKyhoPj5wQyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gZGsoYyxsLGEpe2lmKGEmcmEuT3B0aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7TXMoKX1mdW5jdGlv''@;'; put 'put ''biBvaChjLGwsYSxkKXtpZihhJnJhLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKHJhLlNlbGZ8cmEuSG9zdCkpKXtjb25zdCBoPWNbcGNdLGY9X2wodm9pZCAwKTt0cnl7cmV0dXJuIGg/aC5nZXQobCxkLGEmcmEuT3B0aW9uYWwpOnRoKGwsZCxhJnJhLk9wdGlvbmFsKX1m''@;'; put 'put ''aW5hbGx5e19sKGYpfX1yZXR1cm4gZGsoZCwwLGEpfWZ1bmN0aW9uIGhrKGMsbCxhLGQ9cmEuRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW1VhXSYmIShkJnJhLlNlbGYpKXtjb25zdCB2PWZ1bmN0aW9uIFUzKGMsbCxhLGQsaCl7bGV0IGY9Yyx2PWw7Zm9yKDtudWxsIT09ZiYm''@;'; put 'put ''bnVsbCE9PXYmJjIwNDgmdltVYV0mJiEoNTEyJnZbVWFdKTspe2NvbnN0IE09UzUoZix2LGEsZHxyYS5TZWxmLHAyKTtpZihNIT09cDIpcmV0dXJuIE07bGV0IEQ9Zi5wYXJlbnQ7aWYoIUQpe2NvbnN0IFo9dlthMl07aWYoWil7Y29uc3QgcmU9Wi5nZXQoYSxwMixkKTtpZihyZSE9PXAyKXJl''@;'; put 'put ''dHVybiByZX1EPXNoKHYpLHY9dltvMF19Zj1EfXJldHVybiBofShjLGwsYSxkLHAyKTtpZih2IT09cDIpcmV0dXJuIHZ9Y29uc3QgZj1TNShjLGwsYSxkLHAyKTtpZihmIT09cDIpcmV0dXJuIGZ9cmV0dXJuIG9oKGwsYSxkLGgpfWZ1bmN0aW9uIFM1KGMsbCxhLGQsaCl7Y29uc3QgZj1mdW5j''@;'; put 'put ''dGlvbiBUYyhjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGMuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBsPWMuaGFzT3duUHJvcGVydHkoUGMpP2NbUGNdOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/bD49MD9sJkh2OlEwOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBmKXtpZighRHYobCxjLGQpKXJldHVybiBkJnJhLkhvc3Q/ZGsoaCwwLGQpOm9oKGwsYSxkLGgpO3RyeXtsZXQgdjtpZih2PWYoZCksbnVsbCE9dnx8ZCZyYS5PcHRpb25hbClyZXR1cm4gdjtNcygpfWZpbmFsbHl7b2soKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCB2PW51''@;'; put 'put ''bGwsTT1WdihjLGwpLEQ9azQsWj1kJnJhLkhvc3Q/bFtabF1bcmNdOm51bGw7Zm9yKCgtMT09PU18fGQmcmEuU2tpcFNlbGYpJiYoRD0tMT09PU0/QzUoYyxsKTpsW00rOF0sRCE9PWs0JiZ4NShkLCExKT8odj1sW0tpXSxNPVg2KEQpLGw9SjYoRCxsKSk6TT0tMSk7LTEhPT1NOyl7Y29uc3Qg''@;'; put 'put ''cmU9bFtLaV07aWYoTTUoZixNLHJlLmRhdGEpKXtjb25zdCBjZT1mayhNLGwsYSx2LGQsWik7aWYoY2UhPT1wMilyZXR1cm4gY2V9RD1sW00rOF0sRCE9PWs0JiZ4NShkLGxbS2ldLmRhdGFbTSs4XT09PVopJiZNNShmLE0sbCk/KHY9cmUsTT1YNihEKSxsPUo2KEQsbCkpOk09LTF9fXJldHVy''@;'; put 'put ''biBofWZ1bmN0aW9uIGZrKGMsbCxhLGQsaCxmKXtjb25zdCB2PWxbS2ldLE09di5kYXRhW2MrOF0scmU9QnYoTSx2LGEsbnVsbD09ZD9FZihNKSYmZkM6ZCE9diYmISEoMyZNLnR5cGUpLGgmcmEuSG9zdCYmZj09PU0pO3JldHVybiBudWxsIT09cmU/RDQobCx2LHJlLE0pOnAyfWZ1bmN0aW9u''@;'; put 'put ''IEJ2KGMsbCxhLGQsaCl7Y29uc3QgZj1jLnByb3ZpZGVySW5kZXhlcyx2PWwuZGF0YSxNPTEwNDg1NzUmZixEPWMuZGlyZWN0aXZlU3RhcnQscmU9Zj4+MjAsYmU9aD9NK3JlOmMuZGlyZWN0aXZlRW5kO2ZvcihsZXQgRWU9ZD9NOk0rcmU7RWU8YmU7RWUrKyl7Y29uc3QgQmU9dltFZV07aWYo''@;'; put 'put ''RWU8RCYmYT09PUJlfHxFZT49RCYmQmUudHlwZT09PWEpcmV0dXJuIEVlfWlmKGgpe2NvbnN0IEVlPXZbRF07aWYoRWUmJlZjKEVlKSYmRWUudHlwZT09PWEpcmV0dXJuIER9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRDQoYyxsLGEsZCl7bGV0IGg9Y1thXTtjb25zdCBmPWwuZGF0YTtpZihmdW5j''@;'; put 'put ''dGlvbiBUVihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFAxfShoKSl7Y29uc3Qgdj1oO3YucmVzb2x2aW5nJiZmdW5jdGlvbiAkMChjLGwpe3Rocm93IGwmJmwuam9pbigiID4gIiksbmV3IFFuKC0yMDAsYyl9KGZ1bmN0aW9uIFRhKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP2MubmFt''@;'; put 'put ''ZXx8Yy50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudHlwZT9jLnR5cGUubmFtZXx8Yy50eXBlLnRvU3RyaW5nKCk6Q2EoYyl9KGZbYV0pKTtjb25zdCBNPUZ2KHYuY2FuU2VlVmlld1Byb3ZpZGVycyk7di5yZXNvbHZpbmc9ITA7''@;'; put 'put ''Y29uc3QgWj12LmluamVjdEltcGw/X2wodi5pbmplY3RJbXBsKTpudWxsO0R2KGMsZCxyYS5EZWZhdWx0KTt0cnl7aD1jW2FdPXYuZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbiB4VihjLGwsYSl7Y29uc3R7bmdP''@;'; put 'put ''bkNoYW5nZXM6ZCxuZ09uSW5pdDpoLG5nRG9DaGVjazpmfT1sLnR5cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IHY9R0EobCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsdiksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyx2KX1oJiYoYS5wcmVPcmRlckhvb2tzPz89''@;'; put 'put ''W10pLnB1c2goMC1jLGgpLGYmJigoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PVomJl9sKFopLEZ2KE0pLHYucmVzb2x2aW5nPSExLG9rKCl9fXJldHVybiBofWZ1''@;'; put 'put ''bmN0aW9uIE01KGMsbCxhKXtyZXR1cm4hIShhW2wrKGM+PnBDKV0mMTw8Yyl9ZnVuY3Rpb24geDUoYyxsKXtyZXR1cm4hKGMmcmEuU2VsZnx8YyZyYS5Ib3N0JiZsKX1jbGFzcyBCdXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ROb2RlPWwsdGhpcy5fbFZpZXc9YX1nZXQobCxhLGQpe3JldHVy''@;'; put 'put ''biBoayh0aGlzLl90Tm9kZSx0aGlzLl9sVmlldyxsLG81KGQpLGEpfX1mdW5jdGlvbiBRMCgpe3JldHVybiBuZXcgQnUodWwoKSxkaSgpKX1mdW5jdGlvbiBZcyhjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLGE9bFtqaV18fERmKGwpLGQ9T2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZTtsZXQgaD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aCYmaCE9PWQ7KXtjb25zdCBmPWhbamldfHxEZihoKTtpZihmJiZmIT09YSlyZXR1cm4gZjtoPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKX1yZXR1cm4gZj0+bmV3IGZ9''@;'; put 'put ''KX1mdW5jdGlvbiBEZihjKXtyZXR1cm4geWwoYyk/KCk9Pntjb25zdCBsPURmKFlpKGMpKTtyZXR1cm4gbCYmbCgpfTptdShjKX1mdW5jdGlvbiBzaChjKXtjb25zdCBsPWNbS2ldLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9jW3JjXTpudWxsfWZ1bmN0aW9uIElm''@;'; put 'put ''KGMpe3JldHVybiBmdW5jdGlvbiBQVihjLGwpe2lmKCJjbGFzcyI9PT1sKXJldHVybiBjLmNsYXNzZXM7aWYoInN0eWxlIj09PWwpcmV0dXJuIGMuc3R5bGVzO2NvbnN0IGE9Yy5hdHRycztpZihhKXtjb25zdCBkPWEubGVuZ3RoO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWFbaF07aWYo''@;'; put 'put ''ZDUoZikpYnJlYWs7aWYoMD09PWYpaCs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZilmb3IoaCsrO2g8ZCYmInN0cmluZyI9PXR5cGVvZiBhW2hdOyloKys7ZWxzZXtpZihmPT09bClyZXR1cm4gYVtoKzFdO2grPTJ9fX1yZXR1cm4gbnVsbH0odWwoKSxjKX1mdW5jdGlvbiB3QyhjLGw9''@;'; put 'put ''bnVsbCxhPW51bGwsZCl7Y29uc3QgaD1SNChjLGwsYSxkKTtyZXR1cm4gaC5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxofWZ1bmN0aW9uIFI0KGMsbD1udWxsLGE9bnVsbCxkLGg9bmV3IFNldCl7Y29uc3QgZj1bYXx8dHMsencoYyldO3JldHVybiBkPWR8fCgib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGM/dm9pZCAwOlByKGMpKSxuZXcgY2QoZixsfHxIMygpLGR8fG51bGwsaCl9bGV0IERzPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuVEhST1dfSUZfTk9UX0ZPVU5EPUswfXN0YXRpY3t0aGlzLk5VTEw9bmV3IHU1fXN0YXRpYyBjcmVhdGUoYSxkKXtpZihBcnJheS5pc0FycmF5KGEp''@;'; put 'put ''KXJldHVybiB3Qyh7bmFtZToiIn0sZCxhLCIiKTt7Y29uc3QgaD1hLm5hbWU/PyIiO3JldHVybiB3Qyh7bmFtZTpofSxhLnBhcmVudCxhLnByb3ZpZGVycyxoKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PnhyKEwzKX0p''@;'; put 'put ''fXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPS0xfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQTUoYyl7cmV0dXJuIGMubmdPcmlnaW5hbEVycm9yfWNsYXNzIGcye2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKGwpe2NvbnN0IGE9dGhpcy5fZmlu''@;'; put 'put ''ZE9yaWdpbmFsRXJyb3IobCk7dGhpcy5fY29uc29sZS5lcnJvcigiRVJST1IiLGwpLGEmJnRoaXMuX2NvbnNvbGUuZXJyb3IoIk9SSUdJTkFMIEVSUk9SIixhKX1fZmluZE9yaWdpbmFsRXJyb3IobCl7bGV0IGE9bCYmQTUobCk7Zm9yKDthJiZBNShhKTspYT1BNShhKTtyZXR1cm4gYXx8bnVs''@;'; put 'put ''bH19Y29uc3Qgdms9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5maShnMikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7bGV0IGs1PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189VzN9c3RhdGlje3RoaXMuX19OR19FTlZfSURf''@;'; put 'put ''Xz1hPT5hfX1yZXR1cm4gY30pKCk7Y2xhc3MgWjMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuX2xWaWV3PWx9b25EZXN0cm95KGwpe3JldHVybiBBdih0aGlzLl9sVmlldyxsKSwoKT0+ZnVuY3Rpb24ga3YoYyxsKXtpZihudWxsPT09Y1tvMl0pcmV0dXJuO2NvbnN0''@;'; put 'put ''IGE9Y1tvMl0uaW5kZXhPZihsKTstMSE9PWEmJmNbbzJdLnNwbGljZShhLDEpfSh0aGlzLl9sVmlldyxsKX19ZnVuY3Rpb24gVzMoKXtyZXR1cm4gbmV3IFozKGRpKCkpfWZ1bmN0aW9uIE5WKCl7cmV0dXJuIEw0KHVsKCksZGkoKSl9ZnVuY3Rpb24gTDQoYyxsKXtyZXR1cm4gbmV3IEppKEww''@;'; put 'put ''KGMsbCkpfWxldCBKaT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubmF0aXZlRWxlbWVudD1hfXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPU5WfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24geWsoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBKaT9jLm5hdGl2ZUVsZW1lbnQ6''@;'; put 'put ''Y31mdW5jdGlvbiBDQyhjKXtyZXR1cm4gbD0+e3NldFRpbWVvdXQoYyx2b2lkIDAsbCl9fWNvbnN0IEtyPWNsYXNzIFZWIGV4dGVuZHMgV257Y29uc3RydWN0b3IobD0hMSl7c3VwZXIoKSx0aGlzLmRlc3Ryb3lSZWY9dm9pZCAwLHRoaXMuX19pc0FzeW5jPWwsTXYoKSYmKHRoaXMuZGVzdHJv''@;'; put 'put ''eVJlZj1maShrNSx7b3B0aW9uYWw6ITB9KT8/dm9pZCAwKX1lbWl0KGwpe2NvbnN0IGE9X2UobnVsbCk7dHJ5e3N1cGVyLm5leHQobCl9ZmluYWxseXtfZShhKX19c3Vic2NyaWJlKGwsYSxkKXtsZXQgaD1sLGY9YXx8KCgpPT5udWxsKSx2PWQ7aWYobCYmIm9iamVjdCI9PXR5cGVvZiBsKXtj''@;'; put 'put ''b25zdCBEPWw7aD1ELm5leHQ/LmJpbmQoRCksZj1ELmVycm9yPy5iaW5kKEQpLHY9RC5jb21wbGV0ZT8uYmluZChEKX10aGlzLl9faXNBc3luYyYmKGY9Q0MoZiksaCYmKGg9Q0MoaCkpLHYmJih2PUNDKHYpKSk7Y29uc3QgTT1zdXBlci5zdWJzY3JpYmUoe25leHQ6aCxlcnJvcjpmLGNvbXBs''@;'; put 'put ''ZXRlOnZ9KTtyZXR1cm4gbCBpbnN0YW5jZW9mIHF0JiZsLmFkZChNKSxNfX07ZnVuY3Rpb24gQlYoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9Y2xhc3MgZmR7Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlcz8/PW5ldyBLcn1jb25zdHJ1Y3Rvcihs''@;'; put 'put ''PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT1sLHRoaXMuZGlydHk9ITAsdGhpcy5fb25EaXJ0eT12b2lkIDAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz12b2lkIDAsdGhpcy5sZW5ndGg9MCx0aGlzLmZpcnN0PXZvaWQg''@;'; put 'put ''MCx0aGlzLmxhc3Q9dm9pZCAwO2NvbnN0IGE9ZmQucHJvdG90eXBlO2FbU3ltYm9sLml0ZXJhdG9yXXx8KGFbU3ltYm9sLml0ZXJhdG9yXT1CVil9Z2V0KGwpe3JldHVybiB0aGlzLl9yZXN1bHRzW2xdfW1hcChsKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAobCl9ZmlsdGVyKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLl9yZXN1bHRzLmZpbHRlcihsKX1maW5kKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQobCl9cmVkdWNlKGwsYSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKGwsYSl9Zm9yRWFjaChsKXt0aGlzLl9yZXN1bHRzLmZvckVhY2gobCl9c29tZShsKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''cmVzdWx0cy5zb21lKGwpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldChsLGEpe3RoaXMuZGlydHk9ITE7Y29uc3QgZD1mdW5jdGlvbiBuMChjKXtyZXR1cm4gYy5mbGF0KE51bWJl''@;'; put 'put ''ci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9uIGdmKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShm''@;'; put 'put ''KSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KHRoaXMuX3Jlc3VsdHMsZCxhKSkmJih0aGlzLl9yZXN1bHRzPWQsdGhpcy5sZW5ndGg9ZC5sZW5ndGgsdGhpcy5sYXN0PWRbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJzdD1kWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt2b2lkIDAhPT10aGlzLl9j''@;'; put 'put ''aGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLmVtaXQodGhpcyl9b25EaXJ0eShsKXt0aGlzLl9vbkRpcnR5PWx9c2V0RGlydHkoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX29uRGlydHk/LigpfWRlc3Ry''@;'; put 'put ''b3koKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2NoYW5nZXMudW5zdWJzY3JpYmUoKSl9fWZ1bmN0aW9uIFp2KGMpe3JldHVybiEoMTI4Jn5jLmZsYWdzKX1jb25zdCBTQz1uZXcgTWFwO2xldCB6Vj0wO2NvbnN0IHhDPSJfX25nQ29u''@;'; put 'put ''dGV4dF9fIjtmdW5jdGlvbiBqdShjLGwpe0Z1KGwpPyhjW3hDXT1sW3cwXSxmdW5jdGlvbiBaVihjKXtTQy5zZXQoY1t3MF0sYyl9KGwpKTpjW3hDXT1sfWZ1bmN0aW9uIEVrKGMpe3JldHVybiBBayhjW1NmXSl9ZnVuY3Rpb24gVGsoYyl7cmV0dXJuIEFrKGNbTmNdKX1mdW5jdGlvbiBBayhj''@;'; put 'put ''KXtmb3IoO251bGwhPT1jJiYhSHUoYyk7KWM9Y1tOY107cmV0dXJuIGN9bGV0IFRDO2Z1bmN0aW9uIFkzKCl7aWYodm9pZCAwIT09VEMpcmV0dXJuIFRDO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpcmV0dXJuIGRvY3VtZW50O3Rocm93IG5ldyBRbigyMTAsITEpfWNvbnN0ICR2PW5ldyBTdCgi''@;'; put 'put ''Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+c0J9KSxzQj0ibmciLFBrPW5ldyBTdCgiIiksaW89bmV3IFN0KCIiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksRms9bmV3IFN0KCIiKSxMNT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3Qi''@;'; put 'put ''LGZhY3Rvcnk6KCk9PlkzKCkuYm9keT8ucXVlcnlTZWxlY3RvcigiW25nQ3NwTm9uY2VdIik/LmdldEF0dHJpYnV0ZSgibmdDc3BOb25jZSIpfHxudWxsfSk7bGV0IE5rPSgpPT5udWxsO2Z1bmN0aW9uIFJDKGMsbCxhPSExKXtyZXR1cm4gTmsoYyxsLGEpfWNvbnN0IGprPW5ldyBTdCgiIix7''@;'; put 'put ''cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtsZXQgUXYsZWI7ZnVuY3Rpb24gRjUoYyl7cmV0dXJuIGZ1bmN0aW9uIEhDKCl7aWYodm9pZCAwPT09UXYmJihRdj1udWxsLFZ0LnRydXN0ZWRUeXBlcykpdHJ5e1F2PVZ0LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3Vs''@;'; put 'put ''YXIiLHtjcmVhdGVIVE1MOmM9PmMsY3JlYXRlU2NyaXB0OmM9PmMsY3JlYXRlU2NyaXB0VVJMOmM9PmN9KX1jYXRjaHt9cmV0dXJuIFF2fSgpPy5jcmVhdGVIVE1MKGMpfHxjfWZ1bmN0aW9uIE5DKCl7aWYodm9pZCAwPT09ZWImJihlYj1udWxsLFZ0LnRydXN0ZWRUeXBlcykpdHJ5e2ViPVZ0''@;'; put 'put ''LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjdW5zYWZlLWJ5cGFzcyIse2NyZWF0ZUhUTUw6Yz0+YyxjcmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gZWJ9ZnVuY3Rpb24gVWsoYyl7cmV0dXJuIE5DKCk/LmNyZWF0ZUhUTUwo''@;'; put 'put ''Yyl8fGN9ZnVuY3Rpb24gV2soYyl7cmV0dXJuIE5DKCk/LmNyZWF0ZVNjcmlwdFVSTChjKXx8Y31jbGFzcyBZa3tjb25zdHJ1Y3RvcihsKXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9bH10b1N0cmluZygpe3JldHVybmBTYWZlVmFsdWUgbXVzdCB1c2UgW3By''@;'; put 'put ''b3BlcnR5XT1iaW5kaW5nOiAke3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eX0gKHNlZSAke3BhfSlgfX1mdW5jdGlvbiBtMihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFlrP2MuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpjfWZ1bmN0aW9u''@;'; put 'put ''IEg0KGMsbCl7Y29uc3QgYT1mdW5jdGlvbiBHayhjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFlrJiZjLmdldFR5cGVOYW1lKCl8fG51bGx9KGMpO2lmKG51bGwhPWEmJmEhPT1sKXtpZigiUmVzb3VyY2VVUkwiPT09YSYmIlVSTCI9PT1sKXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWly''@;'; put 'put ''ZWQgYSBzYWZlICR7bH0sIGdvdCBhICR7YX0gKHNlZSAke3BhfSlgKX1yZXR1cm4gYT09PWx9Y2xhc3MgJGt7Y29uc3RydWN0b3IobCl7dGhpcy5pbmVydERvY3VtZW50SGVscGVyPWx9Z2V0SW5lcnRCb2R5RWxlbWVudChsKXtsPSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrbDt0cnl7Y29u''@;'; put 'put ''c3QgYT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhGNShsKSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWE/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQobCk6KGEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKSxhKX1j''@;'; put 'put ''YXRjaHtyZXR1cm4gbnVsbH19fWNsYXNzIFRCe2NvbnN0cnVjdG9yKGwpe3RoaXMuZGVmYXVsdERvYz1sLHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKX1nZXRJbmVydEJvZHlF''@;'; put 'put ''bGVtZW50KGwpe2NvbnN0IGE9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGEuaW5uZXJIVE1MPUY1KGwpLGF9fWNvbnN0IEFCPS9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6XC8/I10qKD86W1wvPyNdfCQpKS9pO2Z1bmN0''@;'; put 'put ''aW9uIEJDKGMpe3JldHVybihjPVN0cmluZyhjKSkubWF0Y2goQUIpP2M6InVuc2FmZToiK2N9ZnVuY3Rpb24gTGYoYyl7Y29uc3QgbD17fTtmb3IoY29uc3QgYSBvZiBjLnNwbGl0KCIsIikpbFthXT0hMDtyZXR1cm4gbH1mdW5jdGlvbiBhOCguLi5jKXtjb25zdCBsPXt9O2Zvcihjb25zdCBh''@;'; put 'put ''IG9mIGMpZm9yKGNvbnN0IGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiYobFtkXT0hMCk7cmV0dXJuIGx9Y29uc3QgcWs9TGYoImFyZWEsYnIsY29sLGhyLGltZyx3YnIiKSxYaz1MZigiY29sZ3JvdXAsZGQsZHQsbGkscCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLEprPUxmKCJy''@;'; put 'put ''cCxydCIpLGpDPWE4KHFrLGE4KFhrLExmKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGV0YWlscyxkaWFsb2csZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixp''@;'; put 'put ''bnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFyeSx0YWJsZSx1bCIpKSxhOChKayxMZigiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVy''@;'; put 'put ''ZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLGE4KEprLFhrKSksekM9TGYoImJhY2tncm91bmQsY2l0ZSxocmVmLGl0ZW10eXBlLGxvbmdkZXNjLHBvc3RlcixzcmMseGxpbms6''@;'; put 'put ''aHJlZiIpLFFrPWE4KHpDLExmKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVm''@;'; put 'put ''YXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJv''@;'; put 'put ''bGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSxMZigi''@;'; put 'put ''YXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEt''@;'; put 'put ''ZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFy''@;'; put 'put ''aWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25s''@;'; put 'put ''eSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFs''@;'; put 'put ''dWVub3csYXJpYS12YWx1ZXRleHQiKSksa0I9TGYoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpO2NsYXNzIGVEe2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbihsKXtsZXQgYT1sLmZpcnN0Q2hpbGQsZD0hMCxoPVtd''@;'; put 'put ''O2Zvcig7YTspaWYoYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP2Q9dGhpcy5zdGFydEVsZW1lbnQoYSk6YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP3RoaXMuY2hhcnMoYS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGQmJmEuZmlyc3RDaGlsZCloLnB1''@;'; put 'put ''c2goYSksYT1SQihhKTtlbHNlIGZvcig7YTspe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGEpO2xldCBmPUlCKGEpO2lmKGYpe2E9ZjticmVha31hPWgucG9wKCl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudChsKXtjb25zdCBh''@;'; put 'put ''PXREKGwpLnRvTG93ZXJDYXNlKCk7aWYoIWpDLmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwha0IuaGFzT3duUHJvcGVydHkoYSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goYSk7Y29uc3QgZD1sLmF0dHJpYnV0ZXM7Zm9yKGxl''@;'; put 'put ''dCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZC5pdGVtKGgpLHY9Zi5uYW1lLE09di50b0xvd2VyQ2FzZSgpO2lmKCFRay5oYXNPd25Qcm9wZXJ0eShNKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IEQ9Zi52YWx1ZTt6Q1tNXSYmKEQ9QkMoRCkpLHRoaXMu''@;'; put 'put ''YnVmLnB1c2goIiAiLHYsJz0iJyxyRChEKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudChsKXtjb25zdCBhPXREKGwpLnRvTG93ZXJDYXNlKCk7akMuaGFzT3duUHJvcGVydHkoYSkmJiFxay5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuYnVmLnB1c2goIjwv''@;'; put 'put ''IiksdGhpcy5idWYucHVzaChhKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKGwpe3RoaXMuYnVmLnB1c2gockQobCkpfX1mdW5jdGlvbiBJQihjKXtjb25zdCBsPWMubmV4dFNpYmxpbmc7aWYobCYmYyE9PWwucHJldmlvdXNTaWJsaW5nKXRocm93IG5EKGwpO3JldHVybiBsfWZ1bmN0aW9u''@;'; put 'put ''IFJCKGMpe2NvbnN0IGw9Yy5maXJzdENoaWxkO2lmKGwmJmZ1bmN0aW9uIERCKGMsbCl7cmV0dXJuKGMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obCkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpIT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQll9KGMs''@;'; put 'put ''bCkpdGhyb3cgbkQobCk7cmV0dXJuIGx9ZnVuY3Rpb24gdEQoYyl7Y29uc3QgbD1jLm5vZGVOYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbD9sOiJGT1JNIn1mdW5jdGlvbiBuRChjKXtyZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVt''@;'; put 'put ''ZW50IGlzIGNsb2JiZXJlZDogJHtjLm91dGVySFRNTH1gKX1jb25zdCBMQj0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csT0I9LyhbXlwjLX4gfCFdKS9nO2Z1bmN0aW9uIHJEKGMpe3JldHVybiBjLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKExCLGZ1bmN0aW9uKGwp''@;'; put 'put ''e3JldHVybiImIyIrKDEwMjQqKGwuY2hhckNvZGVBdCgwKS01NTI5NikrKGwuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pLnJlcGxhY2UoT0IsZnVuY3Rpb24obCl7cmV0dXJuIiYjIitsLmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgv''@;'; put 'put ''Pi9nLCImZ3Q7Iil9bGV0IHRiO2Z1bmN0aW9uIFVDKGMpe3JldHVybiJjb250ZW50ImluIGMmJmZ1bmN0aW9uIEZCKGMpe3JldHVybiBjLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT1jLm5vZGVOYW1lfShjKT9jLmNvbnRlbnQ6bnVsbH12YXIgTjU9ZnVuY3Rp''@;'; put 'put ''b24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJOT05FIixjW2MuSFRNTD0xXT0iSFRNTCIsY1tjLlNUWUxFPTJdPSJTVFlMRSIsY1tjLlNDUklQVD0zXT0iU0NSSVBUIixjW2MuVVJMPTRdPSJVUkwiLGNbYy5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsY30oTjV8fHt9KTtmdW5jdGlv''@;'; put 'put ''biBWNChjKXtjb25zdCBsPW84KCk7cmV0dXJuIGw/VWsobC5zYW5pdGl6ZShONS5IVE1MLGMpfHwiIik6SDQoYywiSFRNTCIpP1VrKG0yKGMpKTpmdW5jdGlvbiBQQihjLGwpe2xldCBhPW51bGw7dHJ5e3RiPXRifHxmdW5jdGlvbiBWQyhjKXtjb25zdCBsPW5ldyBUQihjKTtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gS2soKXt0cnl7cmV0dXJuISEobmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhGNSgiIiksInRleHQvaHRtbCIpfWNhdGNoe3JldHVybiExfX0oKT9uZXcgJGsobCk6bH0oYyk7bGV0IGQ9bD9TdHJpbmcobCk6IiI7YT10Yi5nZXRJbmVydEJvZHlFbGVtZW50KGQp''@;'; put 'put ''O2xldCBoPTUsZj1kO2Rve2lmKDA9PT1oKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtoLS0sZD1mLGY9YS5pbm5lckhUTUwsYT10Yi5nZXRJbmVydEJvZHlFbGVtZW50KGQpfXdoaWxlKGQhPT1mKTtyZXR1''@;'; put 'put ''cm4gRjUoKG5ldyBlRCkuc2FuaXRpemVDaGlsZHJlbihVQyhhKXx8YSkpfWZpbmFsbHl7aWYoYSl7Y29uc3QgZD1VQyhhKXx8YTtmb3IoO2QuZmlyc3RDaGlsZDspZC5yZW1vdmVDaGlsZChkLmZpcnN0Q2hpbGQpfX19KFkzKCksQ2EoYykpfWZ1bmN0aW9uIFpDKGMpe2NvbnN0IGw9bzgoKTty''@;'; put 'put ''ZXR1cm4gbD9sLnNhbml0aXplKE41LlVSTCxjKXx8IiI6SDQoYywiVVJMIik/bTIoYyk6QkMoQ2EoYykpfWZ1bmN0aW9uIGlEKGMpe2NvbnN0IGw9bzgoKTtpZihsKXJldHVybiBXayhsLnNhbml0aXplKE41LlJFU09VUkNFX1VSTCxjKXx8IiIpO2lmKEg0KGMsIlJlc291cmNlVVJMIikpcmV0''@;'; put 'put ''dXJuIFdrKG0yKGMpKTt0aHJvdyBuZXcgUW4oOTA0LCExKX1mdW5jdGlvbiBvOCgpe2NvbnN0IGM9ZGkoKTtyZXR1cm4gYyYmY1tMMV0uc2FuaXRpemVyfWNvbnN0IHpCPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csVUI9Lyg8fD4pL2csWkI9Ilx1MjAwYiQxXHUyMDBiIjtmdW5jdGlv''@;'; put 'put ''biBxQyhjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uICQzKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gRjEoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBGdW5jdGlvbj9jKCk6Y312YXIgSzM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5JbXBv''@;'; put 'put ''cnRhbnQ9MV09IkltcG9ydGFudCIsY1tjLkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsY30oSzN8fHt9KTtsZXQgWEM7ZnVuY3Rpb24gSkMoYyxsKXtyZXR1cm4gWEMoYyxsKX1mdW5jdGlvbiBCNShjLGwsYSxkLGgpe2lmKG51bGwhPWQpe2xldCBmLHY9ITE7SHUoZCk/Zj1kOkZ1KGQpJiYodj0h''@;'; put 'put ''MCxkPWRbVWxdKTtjb25zdCBNPUNsKGQpOzA9PT1jJiZudWxsIT09YT9udWxsPT1oP29iKGwsYSxNKTpaNChsLGEsTSxofHxudWxsLCEwKToxPT09YyYmbnVsbCE9PWE/WjQobCxhLE0saHx8bnVsbCwhMCk6Mj09PWM/ZnVuY3Rpb24gZDgoYyxsLGEpe2NvbnN0IGQ9cTMoYyxsKTtkJiZmdW5j''@;'; put 'put ''dGlvbiBsOChjLGwsYSxkKXtjLnJlbW92ZUNoaWxkKGwsYSxkKX0oYyxkLGwsYSl9KGwsTSx2KTozPT09YyYmbC5kZXN0cm95Tm9kZShNKSxudWxsIT1mJiZmdW5jdGlvbiBuaihjLGwsYSxkLGgpe2NvbnN0IGY9YVt2dV07ZiE9PUNsKGEpJiZCNShsLGMsZCxmLGgpO2ZvcihsZXQgTT1nYztN''@;'; put 'put ''PGEubGVuZ3RoO00rKyl7Y29uc3QgRD1hW01dO3NiKERbS2ldLEQsYyxsLGQsZil9fShsLGMsZixhLGgpfX1mdW5jdGlvbiBlUyhjLGwpe3JldHVybiBjLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24gVjUoYyl7cmV0dXJuIGMucmVwbGFjZSh6QixsPT5sLnJlcGxhY2UoVUIsWkIpKX0obCkpfWZ1''@;'; put 'put ''bmN0aW9uIHo0KGMsbCxhKXtyZXR1cm4gYy5jcmVhdGVFbGVtZW50KGwsYSl9ZnVuY3Rpb24gZkQoYyxsKXtsW0wxXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgxKSxzYihjLGwsbFtib10sMixudWxsLG51bGwpfWZ1bmN0aW9uIG5TKGMsbCl7Y29uc3QgYT1jW1YzXSxkPWEu''@;'; put 'put ''aW5kZXhPZihsKTthLnNwbGljZShkLDEpfWZ1bmN0aW9uIHM4KGMsbCl7aWYoYy5sZW5ndGg8PWdjKXJldHVybjtjb25zdCBhPWdjK2wsZD1jW2FdO2lmKGQpe2NvbnN0IGg9ZFtTNF07bnVsbCE9PWgmJmghPT1jJiZuUyhoLGQpLGw+MCYmKGNbYS0xXVtOY109ZFtOY10pO2NvbnN0IGY9T3Uo''@;'; put 'put ''YyxnYytsKTshZnVuY3Rpb24gaEQoYyxsKXtmRChjLGwpLGxbVWxdPW51bGwsbFtyY109bnVsbH0oZFtLaV0sZCk7Y29uc3Qgdj1mW3VkXTtudWxsIT09diYmdi5kZXRhY2hWaWV3KGZbS2ldKSxkW2ZjXT1udWxsLGRbTmNdPW51bGwsZFtVYV0mPS0xMjl9cmV0dXJuIGR9ZnVuY3Rpb24gVTQo''@;'; put 'put ''YyxsKXtpZighKDI1NiZsW1VhXSkpe2NvbnN0IGE9bFtib107YS5kZXN0cm95Tm9kZSYmc2IoYyxsLGEsMyxudWxsLG51bGwpLGZ1bmN0aW9uIEpCKGMpe2xldCBsPWNbU2ZdO2lmKCFsKXJldHVybiByUyhjW0tpXSxjKTtmb3IoO2w7KXtsZXQgYT1udWxsO2lmKEZ1KGwpKWE9bFtTZl07ZWxz''@;'; put 'put ''ZXtjb25zdCBkPWxbZ2NdO2QmJihhPWQpfWlmKCFhKXtmb3IoO2wmJiFsW05jXSYmbCE9PWM7KUZ1KGwpJiZyUyhsW0tpXSxsKSxsPWxbZmNdO251bGw9PT1sJiYobD1jKSxGdShsKSYmclMobFtLaV0sbCksYT1sJiZsW05jXX1sPWF9fShsKX19ZnVuY3Rpb24gclMoYyxsKXtpZigyNTYmbFtV''@;'; put 'put ''YV0pcmV0dXJuO2NvbnN0IGE9X2UobnVsbCk7dHJ5e2xbVWFdJj0tMTI5LGxbVWFdfD0yNTYsbFt4Zl0mJmZ1bmN0aW9uIEEoYyl7aWYod2UoYyksc2UoYykpZm9yKGxldCBsPTA7bDxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7bCsrKXRlKGMucHJvZHVjZXJOb2RlW2xdLGMucHJvZHVjZXJJbmRl''@;'; put 'put ''eE9mVGhpc1tsXSk7Yy5wcm9kdWNlck5vZGUubGVuZ3RoPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24ubGVuZ3RoPWMucHJvZHVjZXJJbmRleE9mVGhpcy5sZW5ndGg9MCxjLmxpdmVDb25zdW1lck5vZGUmJihjLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoPWMubGl2ZUNvbnN1bWVySW5kZXhP''@;'; put 'put ''ZlRoaXMubGVuZ3RoPTApfShsW3hmXSksZnVuY3Rpb24gZWooYyxsKXtsZXQgYTtpZihudWxsIT1jJiZudWxsIT0oYT1jLmRlc3Ryb3lIb29rcykpZm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKz0yKXtjb25zdCBoPWxbYVtkXV07aWYoIShoIGluc3RhbmNlb2YgUDEpKXtjb25zdCBmPWFbZCsx''@;'; put 'put ''XTtpZihBcnJheS5pc0FycmF5KGYpKWZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7dis9Mil7Y29uc3QgTT1oW2Zbdl1dLEQ9Zlt2KzFdO3UyKDQsTSxEKTt0cnl7RC5jYWxsKE0pfWZpbmFsbHl7dTIoNSxNLEQpfX1lbHNle3UyKDQsaCxmKTt0cnl7Zi5jYWxsKGgpfWZpbmFsbHl7dTIoNSxoLGYp''@;'; put 'put ''fX19fX0oYyxsKSxmdW5jdGlvbiBwRChjLGwpe2NvbnN0IGE9Yy5jbGVhbnVwLGQ9bFtYMF07aWYobnVsbCE9PWEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aC0xO2YrPTIpaWYoInN0cmluZyI9PXR5cGVvZiBhW2ZdKXtjb25zdCB2PWFbZiszXTt2Pj0wP2Rbdl0oKTpkWy12XS51bnN1YnNjcmli''@;'; put 'put ''ZSgpLGYrPTJ9ZWxzZSBhW2ZdLmNhbGwoZFthW2YrMV1dKTtudWxsIT09ZCYmKGxbWDBdPW51bGwpO2NvbnN0IGg9bFtvMl07aWYobnVsbCE9PWgpe2xbbzJdPW51bGw7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspKDAsaFtmXSkoKX19KGMsbCksMT09PWxbS2ldLnR5cGUmJmxbYm9dLmRl''@;'; put 'put ''c3Ryb3koKTtjb25zdCBkPWxbUzRdO2lmKG51bGwhPT1kJiZIdShsW2ZjXSkpe2QhPT1sW2ZjXSYmblMoZCxsKTtjb25zdCBoPWxbdWRdO251bGwhPT1oJiZoLmRldGFjaFZpZXcoYyl9IWZ1bmN0aW9uIFdWKGMpe1NDLmRlbGV0ZShjW3cwXSl9KGwpfWZpbmFsbHl7X2UoYSl9fWZ1bmN0aW9u''@;'; put 'put ''IGFiKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gaVMoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVtVbF07e2NvbnN0e2NvbXBvbmVudE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRp''@;'; put 'put ''b246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PUpzLk5vbmV8fGY9PT1Kcy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gTDAoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWjQoYyxsLGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBv''@;'; put 'put ''YihjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIGdEKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WjQoYyxsLGEsZCxoKTpvYihjLGwsYSl9ZnVuY3Rpb24gcTMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwpfWZ1bmN0aW9uIHU4KGMsbCxhKXtyZXR1cm4gWDMoYyxsLGEpfWxldCBz''@;'; put 'put ''UyxYMz1mdW5jdGlvbiBvUyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9MMChjLGEpOm51bGx9O2Z1bmN0aW9uIGwwKGMsbCxhLGQpe2NvbnN0IGg9YWIoYyxkLGwpLGY9bFtib10sTT11OChkLnBhcmVudHx8bFtyY10sZCxsKTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxl''@;'; put 'put ''dCBEPTA7RDxhLmxlbmd0aDtEKyspZ0QoZixoLGFbRF0sTSwhMSk7ZWxzZSBnRChmLGgsYSxNLCExKTt2b2lkIDAhPT1zUyYmc1MoZixkLGwsYSxoKX1mdW5jdGlvbiBKMyhjLGwpe2lmKG51bGwhPT1sKXtjb25zdCBhPWwudHlwZTtpZigzJmEpcmV0dXJuIEwwKGwsYyk7aWYoNCZhKXJldHVy''@;'; put 'put ''biBjUygtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gSjMoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBIdShoKT9jUygtMSxoKTpDbChoKX19aWYoMzImYSlyZXR1cm4gSkMobCxjKSgpfHxDbChjW2wuaW5kZXhdKTt7Y29u''@;'; put 'put ''c3QgZD1tRChjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06SjMoVDQoY1tabF0pLGQpOkozKGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gbUQoYyxsKXtyZXR1cm4gbnVsbCE9PWw/Y1tabF1bcmNdLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxs''@;'; put 'put ''fWZ1bmN0aW9uIGNTKGMsbCl7Y29uc3QgYT1nYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtLaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gSjMoZCxoKX1yZXR1cm4gbFt2dV19ZnVuY3Rpb24gdVMoYyxsLGEsZCxoLGYsdil7Zm9yKDtudWxsIT1hOyl7Y29u''@;'; put 'put ''c3QgTT1kW2EuaW5kZXhdLEQ9YS50eXBlO2lmKHYmJjA9PT1sJiYoTSYmanUoQ2woTSksZCksYS5mbGFnc3w9MiksMzImfmEuZmxhZ3MpaWYoOCZEKXVTKGMsbCxhLmNoaWxkLGQsaCxmLCExKSxCNShsLGMsaCxNLGYpO2Vsc2UgaWYoMzImRCl7Y29uc3QgWj1KQyhhLGQpO2xldCByZTtmb3Io''@;'; put 'put ''O3JlPVooKTspQjUobCxjLGgscmUsZik7QjUobCxjLGgsTSxmKX1lbHNlIDE2JkQ/YkQoYyxsLGQsYSxoLGYpOkI1KGwsYyxoLE0sZik7YT12P2EucHJvamVjdGlvbk5leHQ6YS5uZXh0fX1mdW5jdGlvbiBzYihjLGwsYSxkLGgsZil7dVMoYSxkLGMuZmlyc3RDaGlsZCxsLGgsZiwhMSl9ZnVu''@;'; put 'put ''Y3Rpb24gYkQoYyxsLGEsZCxoLGYpe2NvbnN0IHY9YVtabF0sRD12W3JjXS5wcm9qZWN0aW9uW2QucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShEKSlmb3IobGV0IFo9MDtaPEQubGVuZ3RoO1orKylCNShsLGMsaCxEW1pdLGYpO2Vsc2V7bGV0IFo9RDtjb25zdCByZT12W2ZjXTtadihk''@;'; put 'put ''KSYmKFouZmxhZ3N8PTEyOCksdVMoYyxsLFoscmUsaCxmLCEwKX19ZnVuY3Rpb24gd0QoYyxsLGEpeyIiPT09YT9jLnJlbW92ZUF0dHJpYnV0ZShsLCJjbGFzcyIpOmMuc2V0QXR0cmlidXRlKGwsImNsYXNzIixhKX1mdW5jdGlvbiBDRChjLGwsYSl7Y29uc3R7bWVyZ2VkQXR0cnM6ZCxjbGFz''@;'; put 'put ''c2VzOmgsc3R5bGVzOmZ9PWE7bnVsbCE9PWQmJm00KGMsbCxkKSxudWxsIT09aCYmd0QoYyxsLGgpLG51bGwhPT1mJiZmdW5jdGlvbiBfRChjLGwsYSl7Yy5zZXRBdHRyaWJ1dGUobCwic3R5bGUiLGEpfShjLGwsZil9Y29uc3QgUm89e307ZnVuY3Rpb24gZmUoYz0xKXtkUyhscygpLGRpKCks''@;'; put 'put ''VnUoKStjLCExKX1mdW5jdGlvbiBkUyhjLGwsYSxkKXtpZighZClpZigzJn5sW1VhXSl7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJk92KGwsZiwwLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZiYmTHYobCxmLGEpfUE0KGEpfWZ1bmN0aW9u''@;'; put 'put ''IEdlKGMsbD1yYS5EZWZhdWx0KXtjb25zdCBhPWRpKCk7cmV0dXJuIG51bGw9PT1hP3hyKGMsbCk6aGsodWwoKSxhLFlpKGMpLGwpfWZ1bmN0aW9uIE1EKGMsbCxhLGQsaCxmKXtjb25zdCB2PV9lKG51bGwpO3RyeXtsZXQgTT1udWxsO2gmTm4uU2lnbmFsQmFzZWQmJihNPWxbZF1bbWVdKSxu''@;'; put 'put ''dWxsIT09TSYmdm9pZCAwIT09TS50cmFuc2Zvcm1GbiYmKGY9TS50cmFuc2Zvcm1GbihmKSksaCZObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSYmKGY9Yy5pbnB1dFRyYW5zZm9ybXNbZF0uY2FsbChsLGYpKSxudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwsTSxmLGEsZCk6WUEo''@;'; put 'put ''bCxNLGQsZil9ZmluYWxseXtfZSh2KX19ZnVuY3Rpb24gbGIoYyxsLGEsZCxoLGYsdixNLEQsWixyZSl7Y29uc3QgY2U9bC5ibHVlcHJpbnQuc2xpY2UoKTtyZXR1cm4gY2VbVWxdPWgsY2VbVWFdPTIwNHxkLChudWxsIT09Wnx8YyYmMjA0OCZjW1VhXSkmJihjZVtVYV18PTIwNDgpLGVDKGNl''@;'; put 'put ''KSxjZVtmY109Y2VbbzBdPWMsY2VbY2xdPWEsY2VbTDFdPXZ8fGMmJmNbTDFdLGNlW2JvXT1NfHxjJiZjW2JvXSxjZVtwY109RHx8YyYmY1twY118fG51bGwsY2VbcmNdPWYsY2VbdzBdPWZ1bmN0aW9uIFVWKCl7cmV0dXJuIHpWKyt9KCksY2VbbnVdPXJlLGNlW2EyXT1aLGNlW1psXT0yPT1s''@;'; put 'put ''LnR5cGU/Y1tabF06Y2UsY2V9ZnVuY3Rpb24gajUoYyxsLGEsZCxoKXtsZXQgZj1jLmRhdGFbbF07aWYobnVsbD09PWYpZj1mdW5jdGlvbiBoUyhjLGwsYSxkLGgpe2NvbnN0IGY9ckMoKSx2PWlDKCksRD1jLmRhdGFbbF09ZnVuY3Rpb24gREQoYyxsLGEsZCxoLGYpe2xldCB2PWw/bC5pbmpl''@;'; put 'put ''Y3RvckluZGV4Oi0xLE09MDtyZXR1cm4gXzUoKSYmKE18PTEyOCkse3R5cGU6YSxpbmRleDpkLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDp2LGRpcmVjdGl2ZVN0YXJ0Oi0xLGRpcmVjdGl2ZUVuZDotMSxkaXJlY3RpdmVTdHlsaW5nTGFzdDotMSxjb21wb25lbnRPZmZz''@;'; put 'put ''ZXQ6LTEscHJvcGVydHlCaW5kaW5nczpudWxsLGZsYWdzOk0scHJvdmlkZXJJbmRleGVzOjAsdmFsdWU6aCxhdHRyczpmLG1lcmdlZEF0dHJzOm51bGwsbG9jYWxOYW1lczpudWxsLGluaXRpYWxJbnB1dHM6dm9pZCAwLGlucHV0czpudWxsLG91dHB1dHM6bnVsbCx0VmlldzpudWxsLG5leHQ6''@;'; put 'put ''bnVsbCxwcmV2Om51bGwscHJvamVjdGlvbk5leHQ6bnVsbCxjaGlsZDpudWxsLHBhcmVudDpsLHByb2plY3Rpb246bnVsbCxzdHlsZXM6bnVsbCxzdHlsZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsU3R5bGVzOnZvaWQgMCxjbGFzc2VzOm51bGwsY2xhc3Nlc1dpdGhvdXRIb3N0Om51bGws''@;'; put 'put ''cmVzaWR1YWxDbGFzc2VzOnZvaWQgMCxjbGFzc0JpbmRpbmdzOjAsc3R5bGVCaW5kaW5nczowfX0oMCx2P2Y6ZiYmZi5wYXJlbnQsYSxsLGQsaCk7cmV0dXJuIG51bGw9PT1jLmZpcnN0Q2hpbGQmJihjLmZpcnN0Q2hpbGQ9RCksbnVsbCE9PWYmJih2P251bGw9PWYuY2hpbGQmJm51bGwhPT1E''@;'; put 'put ''LnBhcmVudCYmKGYuY2hpbGQ9RCk6bnVsbD09PWYubmV4dCYmKGYubmV4dD1ELEQucHJldj1mKSksRH0oYyxsLGEsZCxoKSxmdW5jdGlvbiBiVigpe3JldHVybiBDby5sRnJhbWUuaW5JMThufSgpJiYoZi5mbGFnc3w9MzIpO2Vsc2UgaWYoNjQmZi50eXBlKXtmLnR5cGU9YSxmLnZhbHVlPWQs''@;'; put 'put ''Zi5hdHRycz1oO2NvbnN0IHY9ZnVuY3Rpb24gJDYoKXtjb25zdCBjPUNvLmxGcmFtZSxsPWMuY3VycmVudFROb2RlO3JldHVybiBjLmlzUGFyZW50P2w6bC5wYXJlbnR9KCk7Zi5pbmplY3RvckluZGV4PW51bGw9PT12Py0xOnYuaW5qZWN0b3JJbmRleH1yZXR1cm4gaDIoZiwhMCksZn1mdW5j''@;'; put 'put ''dGlvbiBoOChjLGwsYSxkKXtpZigwPT09YSlyZXR1cm4tMTtjb25zdCBoPWwubGVuZ3RoO2ZvcihsZXQgZj0wO2Y8YTtmKyspbC5wdXNoKGQpLGMuYmx1ZXByaW50LnB1c2goZCksYy5kYXRhLnB1c2gobnVsbCk7cmV0dXJuIGh9ZnVuY3Rpb24geEQoYyxsLGEsZCxoKXtjb25zdCBmPVZ1KCks''@;'; put 'put ''dj0yJmQ7dHJ5e0E0KC0xKSx2JiZsLmxlbmd0aD53byYmZFMoYyxsLHdvLCExKSx1Mih2PzI6MCxoKSxhKGQsaCl9ZmluYWxseXtBNChmKSx1Mih2PzM6MSxoKX19ZnVuY3Rpb24gZlMoYyxsLGEpe2lmKHJ1KGwpKXtjb25zdCBkPV9lKG51bGwpO3RyeXtjb25zdCBmPWwuZGlyZWN0aXZlRW5k''@;'; put 'put ''O2ZvcihsZXQgdj1sLmRpcmVjdGl2ZVN0YXJ0O3Y8Zjt2Kyspe2NvbnN0IE09Yy5kYXRhW3ZdO00uY29udGVudFF1ZXJpZXMmJk0uY29udGVudFF1ZXJpZXMoMSxhW3ZdLHYpfX1maW5hbGx5e19lKGQpfX19ZnVuY3Rpb24gcFMoYyxsLGEpe3RrKCkmJihmdW5jdGlvbiBoaihjLGwsYSxkKXtj''@;'; put 'put ''b25zdCBoPWEuZGlyZWN0aXZlU3RhcnQsZj1hLmRpcmVjdGl2ZUVuZDtFZihhKSYmZnVuY3Rpb24gYmooYyxsLGEpe2NvbnN0IGQ9TDAobCxjKSxoPWNiKGEpO2xldCB2PTE2O2Euc2lnbmFscz92PTQwOTY6YS5vblB1c2gmJih2PTY0KTtjb25zdCBNPWY4KGMsbGIoYyxoLG51bGwsdixkLGws''@;'; put 'put ''bnVsbCxjW0wxXS5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoZCxhKSxudWxsLG51bGwsbnVsbCkpO2NbbC5pbmRleF09TX0obCxhLGMuZGF0YVtoK2EuY29tcG9uZW50T2Zmc2V0XSksYy5maXJzdENyZWF0ZVBhc3N8fE52KGEsbCksanUoZCxsKTtjb25zdCB2PWEuaW5pdGlhbElu''@;'; put 'put ''cHV0cztmb3IobGV0IE09aDtNPGY7TSsrKXtjb25zdCBEPWMuZGF0YVtNXSxaPUQ0KGwsYyxNLGEpO2p1KFosbCksbnVsbCE9PXYmJnViKDAsTS1oLFosRCwwLHYpLFZjKEQpJiYoTzEoYS5pbmRleCxsKVtjbF09RDQobCxjLE0sYSkpfX0oYyxsLGEsTDAoYSxsKSksISg2NCZ+YS5mbGFncykm''@;'; put 'put ''Jk9EKGMsbCxhKSl9ZnVuY3Rpb24gZ1MoYyxsLGE9TDApe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtjb25zdCB2PWRbZisxXSxNPS0xPT09dj9hKGwsYyk6Y1t2XTtjW2grK109TX19fWZ1bmN0''@;'; put 'put ''aW9uIGNiKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PW1TKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGlyZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0''@;'; put 'put ''cyxjLmlkKTpsfWZ1bmN0aW9uIG1TKGMsbCxhLGQsaCxmLHYsTSxELFoscmUpe2NvbnN0IGNlPXdvK2QsYmU9Y2UraCxFZT1mdW5jdGlvbiBpaihjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxsO2QrKylhLnB1c2goZDxjP251bGw6Um8pO3JldHVybiBhfShjZSxiZSksQmU9ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFo/WigpOlo7cmV0dXJuIEVlW0tpXT17dHlwZTpjLGJsdWVwcmludDpFZSx0ZW1wbGF0ZTphLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6TSxkZWNsVE5vZGU6bCxkYXRhOkVlLnNsaWNlKCkuZmlsbChudWxsLGNlKSxiaW5kaW5nU3RhcnRJbmRleDpjZSxleHBhbmRvU3Rh''@;'; put 'put ''cnRJbmRleDpiZSxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250''@;'; put 'put ''ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBmP2YoKTpmLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygdj92KCk6dixmaXJzdENoaWxkOm51bGwsc2NoZW1hczpELGNvbnN0czpCZSxpbmNvbXBsZXRlRmlyc3RQYXNzOiExLHNzcklkOnJlfX1sZXQgRUQ9KCk9Pm51bGw7ZnVuY3Rpb24gSUQoYyxsLGEsZCxo''@;'; put 'put ''KXtmb3IobGV0IGYgaW4gbCl7aWYoIWwuaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Y29uc3Qgdj1sW2ZdO2lmKHZvaWQgMD09PXYpY29udGludWU7ZD8/PXt9O2xldCBNLEQ9Tm4uTm9uZTtBcnJheS5pc0FycmF5KHYpPyhNPXZbMF0sRD12WzFdKTpNPXY7bGV0IFo9ZjtpZihudWxsIT09''@;'; put 'put ''aCl7aWYoIWguaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Wj1oW2ZdfTA9PT1jP1JEKGQsYSxaLE0sRCk6UkQoZCxhLFosTSl9cmV0dXJuIGR9ZnVuY3Rpb24gUkQoYyxsLGEsZCxoKXtsZXQgZjtjLmhhc093blByb3BlcnR5KGEpPyhmPWNbYV0pLnB1c2gobCxkKTpmPWNbYV09W2wsZF0s''@;'; put 'put ''dm9pZCAwIT09aCYmZi5wdXNoKGgpfWZ1bmN0aW9uIEYwKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1MMChsLGEpO2xldCByZSxaPWwuaW5wdXRzOyFNJiZudWxsIT1aJiYocmU9WltkXSk/KENTKGMsYSxyZSxkLGgpLEVmKGwpJiZmdW5jdGlvbiBjaihjLGwpe2NvbnN0IGE9TzEobCxjKTsx''@;'; put 'put ''NiZhW1VhXXx8KGFbVWFdfD02NCl9KGEsbC5pbmRleCkpOjMmbC50eXBlJiYoZD1mdW5jdGlvbiBsaihjKXtyZXR1cm4iY2xhc3MiPT09Yz8iY2xhc3NOYW1lIjoiZm9yIj09PWM/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PWM/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09Yz8iaW5uZXJI''@;'; put 'put ''VE1MIjoicmVhZG9ubHkiPT09Yz8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1jPyJ0YWJJbmRleCI6Y30oZCksaD1udWxsIT12P3YoaCxsLnZhbHVlfHwiIixkKTpoLGYuc2V0UHJvcGVydHkoRCxkLGgpKX1mdW5jdGlvbiB2UyhjLGwsYSxkKXtpZih0aygpKXtjb25zdCBoPW51bGw9PT1kP251''@;'; put 'put ''bGw6eyIiOi0xfSxmPWZ1bmN0aW9uIGZqKGMsbCl7Y29uc3QgYT1jLmRpcmVjdGl2ZVJlZ2lzdHJ5O2xldCBkPW51bGwsaD1udWxsO2lmKGEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IHY9YVtmXTtpZihiNChsLHYuc2VsZWN0b3JzLCExKSlpZihkfHwoZD1bXSksVmModikp''@;'; put 'put ''aWYobnVsbCE9PXYuZmluZEhvc3REaXJlY3RpdmVEZWZzKXtjb25zdCBNPVtdO2g9aHx8bmV3IE1hcCx2LmZpbmRIb3N0RGlyZWN0aXZlRGVmcyh2LE0saCksZC51bnNoaWZ0KC4uLk0sdikseVMoYyxsLE0ubGVuZ3RoKX1lbHNlIGQudW5zaGlmdCh2KSx5UyhjLGwsMCk7ZWxzZSBoPWh8fG5l''@;'; put 'put ''dyBNYXAsdi5maW5kSG9zdERpcmVjdGl2ZURlZnM/Lih2LGQsaCksZC5wdXNoKHYpfXJldHVybiBudWxsPT09ZD9udWxsOltkLGhdfShjLGEpO2xldCB2LE07bnVsbD09PWY/dj1NPW51bGw6W3YsTV09ZixudWxsIT09diYmYlMoYyxsLGEsdixoLE0pLGgmJmZ1bmN0aW9uIHBqKGMsbCxhKXtp''@;'; put 'put ''ZihsKXtjb25zdCBkPWMubG9jYWxOYW1lcz1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grPTIpe2NvbnN0IGY9YVtsW2grMV1dO2lmKG51bGw9PWYpdGhyb3cgbmV3IFFuKC0zMDEsITEpO2QucHVzaChsW2hdLGYpfX19KGEsZCxoKX1hLm1lcmdlZEF0dHJzPXZmKGEubWVyZ2VkQXR0cnMs''@;'; put 'put ''YS5hdHRycyl9ZnVuY3Rpb24gYlMoYyxsLGEsZCxoLGYpe2ZvcihsZXQgWj0wO1o8ZC5sZW5ndGg7WisrKWhkKE52KGEsbCksYyxkW1pdLnR5cGUpOyFmdW5jdGlvbiBtaihjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlkZXJJ''@;'; put 'put ''bmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxkLmxlbmd0aCk7Zm9yKGxldCBaPTA7WjxkLmxlbmd0aDtaKyspe2NvbnN0IHJlPWRbWl07cmUucHJvdmlkZXJzUmVzb2x2ZXImJnJlLnByb3ZpZGVyc1Jlc29sdmVyKHJlKX1sZXQgdj0hMSxNPSExLEQ9aDgoYyxsLGQubGVuZ3RoLG51bGwpO2Zv''@;'; put 'put ''cihsZXQgWj0wO1o8ZC5sZW5ndGg7WisrKXtjb25zdCByZT1kW1pdO2EubWVyZ2VkQXR0cnM9dmYoYS5tZXJnZWRBdHRycyxyZS5ob3N0QXR0cnMpLHZqKGMsYSxsLEQscmUpLGdqKEQscmUsaCksbnVsbCE9PXJlLmNvbnRlbnRRdWVyaWVzJiYoYS5mbGFnc3w9NCksKG51bGwhPT1yZS5ob3N0''@;'; put 'put ''QmluZGluZ3N8fG51bGwhPT1yZS5ob3N0QXR0cnN8fDAhPT1yZS5ob3N0VmFycykmJihhLmZsYWdzfD02NCk7Y29uc3QgY2U9cmUudHlwZS5wcm90b3R5cGU7IXYmJihjZS5uZ09uQ2hhbmdlc3x8Y2UubmdPbkluaXR8fGNlLm5nRG9DaGVjaykmJigoYy5wcmVPcmRlckhvb2tzPz89W10pLnB1''@;'; put 'put ''c2goYS5pbmRleCksdj0hMCksIU0mJihjZS5uZ09uQ2hhbmdlc3x8Y2UubmdEb0NoZWNrKSYmKChjLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGEuaW5kZXgpLE09ITApLEQrK30hZnVuY3Rpb24gc2ooYyxsLGEpe2NvbnN0IGg9bC5kaXJlY3RpdmVFbmQsZj1jLmRhdGEsdj1sLmF0''@;'; put 'put ''dHJzLE09W107bGV0IEQ9bnVsbCxaPW51bGw7Zm9yKGxldCByZT1sLmRpcmVjdGl2ZVN0YXJ0O3JlPGg7cmUrKyl7Y29uc3QgY2U9ZltyZV0sYmU9YT9hLmdldChjZSk6bnVsbCxCZT1iZT9iZS5vdXRwdXRzOm51bGw7RD1JRCgwLGNlLmlucHV0cyxyZSxELGJlP2JlLmlucHV0czpudWxsKSxa''@;'; put 'put ''PUlEKDEsY2Uub3V0cHV0cyxyZSxaLEJlKTtjb25zdCBxZT1udWxsPT09RHx8bnVsbD09PXZ8fHY0KGwpP251bGw6RkQoRCxyZSx2KTtNLnB1c2gocWUpfW51bGwhPT1EJiYoRC5oYXNPd25Qcm9wZXJ0eSgiY2xhc3MiKSYmKGwuZmxhZ3N8PTgpLEQuaGFzT3duUHJvcGVydHkoInN0eWxlIikm''@;'; put 'put ''JihsLmZsYWdzfD0xNikpLGwuaW5pdGlhbElucHV0cz1NLGwuaW5wdXRzPUQsbC5vdXRwdXRzPVp9KGMsYSxmKX1mdW5jdGlvbiBPRChjLGwsYSl7Y29uc3QgZD1hLmRpcmVjdGl2ZVN0YXJ0LGg9YS5kaXJlY3RpdmVFbmQsZj1hLmluZGV4LHY9ZnVuY3Rpb24gX1YoKXtyZXR1cm4gQ28ubEZy''@;'; put 'put ''YW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleH0oKTt0cnl7QTQoZik7Zm9yKGxldCBNPWQ7TTxoO00rKyl7Y29uc3QgRD1jLmRhdGFbTV0sWj1sW01dO29DKE0pLChudWxsIT09RC5ob3N0QmluZGluZ3N8fDAhPT1ELmhvc3RWYXJzfHxudWxsIT09RC5ob3N0QXR0cnMpJiZQRChELFopfX1maW5h''@;'; put 'put ''bGx5e0E0KC0xKSxvQyh2KX19ZnVuY3Rpb24gUEQoYyxsKXtudWxsIT09Yy5ob3N0QmluZGluZ3MmJmMuaG9zdEJpbmRpbmdzKDEsbCl9ZnVuY3Rpb24geVMoYyxsLGEpe2wuY29tcG9uZW50T2Zmc2V0PWEsKGMuY29tcG9uZW50cz8/PVtdKS5wdXNoKGwuaW5kZXgpfWZ1bmN0aW9uIGdqKGMs''@;'; put 'put ''bCxhKXtpZihhKXtpZihsLmV4cG9ydEFzKWZvcihsZXQgZD0wO2Q8bC5leHBvcnRBcy5sZW5ndGg7ZCsrKWFbbC5leHBvcnRBc1tkXV09YztWYyhsKSYmKGFbIiJdPWMpfX1mdW5jdGlvbiB2aihjLGwsYSxkLGgpe2MuZGF0YVtkXT1oO2NvbnN0IGY9aC5mYWN0b3J5fHwoaC5mYWN0b3J5PW11''@;'; put 'put ''KGgudHlwZSkpLHY9bmV3IFAxKGYsVmMoaCksR2UpO2MuYmx1ZXByaW50W2RdPXYsYVtkXT12LGZ1bmN0aW9uIExEKGMsbCxhLGQsaCl7Y29uc3QgZj1oLmhvc3RCaW5kaW5ncztpZihmKXtsZXQgdj1jLmhvc3RCaW5kaW5nT3BDb2RlcztudWxsPT09diYmKHY9Yy5ob3N0QmluZGluZ09wQ29k''@;'; put 'put ''ZXM9W10pO2NvbnN0IE09fmwuaW5kZXg7KGZ1bmN0aW9uIGRqKGMpe2xldCBsPWMubGVuZ3RoO2Zvcig7bD4wOyl7Y29uc3QgYT1jWy0tbF07aWYoIm51bWJlciI9PXR5cGVvZiBhJiZhPDApcmV0dXJuIGF9cmV0dXJuIDB9KSh2KSE9TSYmdi5wdXNoKE0pLHYucHVzaChhLGQsZil9fShjLGws''@;'; put 'put ''ZCxoOChjLGEsaC5ob3N0VmFycyxSbyksaCl9ZnVuY3Rpb24gdWgoYyxsLGEsZCxoLGYpe2NvbnN0IHY9TDAoYyxsKTshZnVuY3Rpb24gX1MoYyxsLGEsZCxoLGYsdil7aWYobnVsbD09ZiljLnJlbW92ZUF0dHJpYnV0ZShsLGgsYSk7ZWxzZXtjb25zdCBNPW51bGw9PXY/Q2EoZik6dihmLGR8''@;'; put 'put ''fCIiLGgpO2Muc2V0QXR0cmlidXRlKGwsaCxNLGEpfX0obFtib10sdixmLGMudmFsdWUsYSxkLGgpfWZ1bmN0aW9uIHViKGMsbCxhLGQsaCxmKXtjb25zdCB2PWZbbF07aWYobnVsbCE9PXYpZm9yKGxldCBNPTA7TTx2Lmxlbmd0aDspTUQoZCxhLHZbTSsrXSx2W00rK10sdltNKytdLHZbTSsr''@;'; put 'put ''XSl9ZnVuY3Rpb24gRkQoYyxsLGEpe2xldCBkPW51bGwsaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZigwIT09ZilpZig1IT09Zil7aWYoIm51bWJlciI9PXR5cGVvZiBmKWJyZWFrO2lmKGMuaGFzT3duUHJvcGVydHkoZikpe251bGw9PT1kJiYoZD1bXSk7Y29uc3Qgdj1j''@;'; put 'put ''W2ZdO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSs9MylpZih2W01dPT09bCl7ZC5wdXNoKGYsdltNKzFdLHZbTSsyXSxhW2grMV0pO2JyZWFrfX1oKz0yfWVsc2UgaCs9MjtlbHNlIGgrPTR9cmV0dXJuIGR9ZnVuY3Rpb24gd1MoYyxsLGEsZCl7cmV0dXJuW2MsITAsMCxsLG51bGwsZCxudWxs''@;'; put 'put ''LGEsbnVsbCxudWxsXX1mdW5jdGlvbiBIRChjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1fZShudWxsKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKz0yKXtjb25zdCB2PWFbaCsxXTtpZigtMSE9PXYpe2NvbnN0IE09Yy5kYXRhW3ZdO0Iz''@;'; put 'put ''KGFbaF0pLE0uY29udGVudFF1ZXJpZXMoMixsW3ZdLHYpfX19ZmluYWxseXtfZShkKX19fWZ1bmN0aW9uIGY4KGMsbCl7cmV0dXJuIGNbU2ZdP2NbQzRdW05jXT1sOmNbU2ZdPWwsY1tDNF09bCxsfWZ1bmN0aW9uIGRiKGMsbCxhKXtCMygwKTtjb25zdCBkPV9lKG51bGwpO3RyeXtsKGMsYSl9''@;'; put 'put ''ZmluYWxseXtfZShkKX19ZnVuY3Rpb24gTkQoYyl7cmV0dXJuIGNbWDBdfHwoY1tYMF09W10pfWZ1bmN0aW9uIHA4KGMpe3JldHVybiBjLmNsZWFudXB8fChjLmNsZWFudXA9W10pfWZ1bmN0aW9uIFc0KGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fFZjKGMpKSYmKGE9ZnVuY3Rpb24gSncoYyl7''@;'; put 'put ''Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjW3o2XSlyZXR1cm4gYztjPWNbVWxdfXJldHVybiBudWxsfShhW2wuaW5kZXhdKSksYVtib119ZnVuY3Rpb24gejUoYyxsKXtjb25zdCBhPWNbcGNdLGQ9YT9hLmdldChnMixudWxsKTpudWxsO2QmJmQuaGFuZGxl''@;'; put 'put ''RXJyb3IobCl9ZnVuY3Rpb24gQ1MoYyxsLGEsZCxoKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoOyl7Y29uc3Qgdj1hW2YrK10sTT1hW2YrK10sRD1hW2YrK107TUQoYy5kYXRhW3ZdLGxbdl0sZCxNLEQsaCl9fWZ1bmN0aW9uIHYyKGMsbCxhKXtjb25zdCBkPXk1KGwsYyk7IWZ1bmN0aW9uIGRE''@;'; put 'put ''KGMsbCxhKXtjLnNldFZhbHVlKGwsYSl9KGNbYm9dLGQsYSl9ZnVuY3Rpb24gX2ooYyxsKXtjb25zdCBhPU8xKGwsYyksZD1hW0tpXTshZnVuY3Rpb24gd2ooYyxsKXtmb3IobGV0IGE9bC5sZW5ndGg7YTxjLmJsdWVwcmludC5sZW5ndGg7YSsrKWwucHVzaChjLmJsdWVwcmludFthXSl9KGQs''@;'; put 'put ''YSk7Y29uc3QgaD1hW1VsXTtudWxsIT09aCYmbnVsbD09PWFbbnVdJiYoYVtudV09UkMoaCxhW3BjXSkpLFNTKGQsYSxhW2NsXSl9ZnVuY3Rpb24gU1MoYyxsLGEpe0s2KGwpO3RyeXtjb25zdCBkPWMudmlld1F1ZXJ5O251bGwhPT1kJiZkYigxLGQsYSk7Y29uc3QgaD1jLnRlbXBsYXRlO251''@;'; put 'put ''bGwhPT1oJiZ4RChjLGwsaCwxLGEpLGMuZmlyc3RDcmVhdGVQYXNzJiYoYy5maXJzdENyZWF0ZVBhc3M9ITEpLGxbdWRdPy5maW5pc2hWaWV3Q3JlYXRpb24oYyksYy5zdGF0aWNDb250ZW50UXVlcmllcyYmSEQoYyxsKSxjLnN0YXRpY1ZpZXdRdWVyaWVzJiZkYigyLGMudmlld1F1ZXJ5LGEp''@;'; put 'put ''O2NvbnN0IGY9Yy5jb21wb25lbnRzO251bGwhPT1mJiZmdW5jdGlvbiBDaihjLGwpe2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKV9qKGMsbFthXSl9KGwsZil9Y2F0Y2goZCl7dGhyb3cgYy5maXJzdENyZWF0ZVBhc3MmJihjLmluY29tcGxldGVGaXJzdFBhc3M9ITAsYy5maXJzdENyZWF0''@;'; put 'put ''ZVBhc3M9ITEpLGR9ZmluYWxseXtsW1VhXSY9LTUsdzUoKX19ZnVuY3Rpb24gVTUoYyxsKXtyZXR1cm4hbHx8bnVsbD09PWwuZmlyc3RDaGlsZHx8WnYoYyl9ZnVuY3Rpb24gdjgoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW0tpXTtpZihmdW5jdGlvbiB0UyhjLGwsYSxkKXtjb25zdCBoPWdjK2Qs''@;'; put 'put ''Zj1hLmxlbmd0aDtkPjAmJihhW2gtMV1bTmNdPWwpLGQ8Zi1nYz8obFtOY109YVtoXSxQbChhLGdjK2QsbCkpOihhLnB1c2gobCksbFtOY109bnVsbCksbFtmY109YTtjb25zdCB2PWxbUzRdO251bGwhPT12JiZhIT09diYmZnVuY3Rpb24gUUIoYyxsKXtjb25zdCBhPWNbVjNdO2xbWmxdIT09''@;'; put 'put ''bFtmY11bZmNdW1psXSYmKGNbVWFdfD1iNS5IYXNUcmFuc3BsYW50ZWRWaWV3cyksbnVsbD09PWE/Y1tWM109W2xdOmEucHVzaChsKX0odixsKTtjb25zdCBNPWxbdWRdO251bGwhPT1NJiZNLmluc2VydFZpZXcoYyksbkMobCksbFtVYV18PTEyOH0oaCxsLGMsYSksZCl7Y29uc3Qgdj1jUyhh''@;'; put 'put ''LGMpLE09bFtib10sRD1xMyhNLGNbdnVdKTtudWxsIT09RCYmZnVuY3Rpb24gWEIoYyxsLGEsZCxoLGYpe2RbVWxdPWgsZFtyY109bCxzYihjLGQsYSwxLGgsZil9KGgsY1tyY10sTSxsLEQsdil9Y29uc3QgZj1sW251XTtudWxsIT09ZiYmbnVsbCE9PWYuZmlyc3RDaGlsZCYmKGYuZmlyc3RD''@;'; put 'put ''aGlsZD1udWxsKX1mdW5jdGlvbiBiOChjLGwsYSxkLGg9ITEpe2Zvcig7bnVsbCE9PWE7KXtjb25zdCBmPWxbYS5pbmRleF07bnVsbCE9PWYmJmQucHVzaChDbChmKSksSHUoZikmJlZEKGYsZCk7Y29uc3Qgdj1hLnR5cGU7aWYoOCZ2KWI4KGMsbCxhLmNoaWxkLGQpO2Vsc2UgaWYoMzImdil7''@;'; put 'put ''Y29uc3QgTT1KQyhhLGwpO2xldCBEO2Zvcig7RD1NKCk7KWQucHVzaChEKX1lbHNlIGlmKDE2JnYpe2NvbnN0IE09bUQobCxhKTtpZihBcnJheS5pc0FycmF5KE0pKWQucHVzaCguLi5NKTtlbHNle2NvbnN0IEQ9VDQobFtabF0pO2I4KERbS2ldLEQsTSxkLCEwKX19YT1oP2EucHJvamVjdGlv''@;'; put 'put ''bk5leHQ6YS5uZXh0fXJldHVybiBkfWZ1bmN0aW9uIFZEKGMsbCl7Zm9yKGxldCBhPWdjO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV0saD1kW0tpXS5maXJzdENoaWxkO251bGwhPT1oJiZiOChkW0tpXSxkLGgsbCl9Y1t2dV0hPT1jW1VsXSYmbC5wdXNoKGNbdnVdKX1sZXQgQkQ9W107''@;'; put 'put ''Y29uc3QgRWo9e3ZlcnNpb246MCxsYXN0Q2xlYW5FcG9jaDowLGRpcnR5OiExLHByb2R1Y2VyTm9kZTp2b2lkIDAscHJvZHVjZXJMYXN0UmVhZFZlcnNpb246dm9pZCAwLHByb2R1Y2VySW5kZXhPZlRoaXM6dm9pZCAwLG5leHRQcm9kdWNlckluZGV4OjAsbGl2ZUNvbnN1bWVyTm9kZTp2b2lk''@;'; put 'put ''IDAsbGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM6dm9pZCAwLGNvbnN1bWVyQWxsb3dTaWduYWxXcml0ZXM6ITEsY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITEscHJvZHVjZXJNdXN0UmVjb21wdXRlOigpPT4hMSxwcm9kdWNlclJlY29tcHV0ZVZhbHVlOigpPT57fSxjb25zdW1lck1hcmtlZERpcnR5''@;'; put 'put ''OigpPT57fSxjb25zdW1lck9uU2lnbmFsUmVhZDooKT0+e30sY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITAsY29uc3VtZXJNYXJrZWREaXJ0eTpjPT57RzYoYy5sVmlldyl9LGNvbnN1bWVyT25TaWduYWxSZWFkKCl7dGhpcy5sVmlld1t4Zl09dGhpc319LGpEPTEwMDtmdW5jdGlvbiBoYihjLGw9''@;'; put 'put ''ITAsYT0wKXtjb25zdCBkPWNbTDFdLGg9ZC5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbj8uKCk7dHJ5eyFmdW5jdGlvbiBUaihjLGwpe3hTKGMsbCk7bGV0IGE9MDtmb3IoO1R2KGMpOyl7aWYoYT09PWpEKXRocm93IG5ldyBRbigxMDMsITEpO2ErKyx4UyhjLDEpfX0oYyxhKX1jYXRjaCh2KXt0''@;'; put 'put ''aHJvdyBsJiZ6NShjLHYpLHZ9ZmluYWxseXtoLmVuZD8uKCksZC5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCl9fWZ1bmN0aW9uIEFqKGMsbCxhLGQpe2NvbnN0IGg9bFtVYV07aWYoISgyNTYmfmgpKXJldHVybjtsW0wxXS5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCksSzYobCk7bGV0''@;'; put 'put ''IHY9bnVsbCxNPW51bGw7KGZ1bmN0aW9uIGtqKGMpe3JldHVybiAyIT09Yy50eXBlfSkoYykmJihNPWZ1bmN0aW9uIFNqKGMpe3JldHVybiBjW3hmXT8/ZnVuY3Rpb24gTWooYyl7Y29uc3QgbD1CRC5wb3AoKT8/T2JqZWN0LmNyZWF0ZShFaik7cmV0dXJuIGwubFZpZXc9YyxsfShjKX0obCks''@;'; put 'put ''dj1mdW5jdGlvbiBqKGMpe3JldHVybiBjJiYoYy5uZXh0UHJvZHVjZXJJbmRleD0wKSxfZShjKX0oTSkpO3RyeXtlQyhsKSxmdW5jdGlvbiByayhjKXtyZXR1cm4gQ28ubEZyYW1lLmJpbmRpbmdJbmRleD1jfShjLmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT09YSYmeEQoYyxsLGEsMixkKTtj''@;'; put 'put ''b25zdCBEPSEoMyZ+aCk7aWYoRCl7Y29uc3QgY2U9Yy5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PWNlJiZMdihsLGNlLG51bGwpfWVsc2V7Y29uc3QgY2U9Yy5wcmVPcmRlckhvb2tzO251bGwhPT1jZSYmT3YobCxjZSwwLG51bGwpLGRDKGwsMCl9aWYoZnVuY3Rpb24gRGooYyl7Zm9yKGxl''@;'; put 'put ''dCBsPUVrKGMpO251bGwhPT1sO2w9VGsobCkpe2lmKCEobFtVYV0mYjUuSGFzVHJhbnNwbGFudGVkVmlld3MpKWNvbnRpbnVlO2NvbnN0IGE9bFtWM107Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NWKGFbZF0pfX19KGwpLHpEKGwsMCksbnVsbCE9PWMuY29udGVudFF1ZXJpZXMmJkhE''@;'; put 'put ''KGMsbCksRCl7Y29uc3QgY2U9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09Y2UmJkx2KGwsY2UpfWVsc2V7Y29uc3QgY2U9Yy5jb250ZW50SG9va3M7bnVsbCE9PWNlJiZPdihsLGNlLDEpLGRDKGwsMSl9IWZ1bmN0aW9uIHJqKGMsbCl7Y29uc3QgYT1jLmhvc3RCaW5kaW5nT3BDb2Rlcztp''@;'; put 'put ''ZihudWxsIT09YSl0cnl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGg9YVtkXTtpZihoPDApQTQofmgpO2Vsc2V7Y29uc3QgZj1oLHY9YVsrK2RdLE09YVsrK2RdO3lWKHYsZiksTSgyLGxbZl0pfX19ZmluYWxseXtBNCgtMSl9fShjLGwpO2NvbnN0IFo9Yy5jb21wb25lbnRz''@;'; put 'put ''O251bGwhPT1aJiZaRChsLFosMCk7Y29uc3QgcmU9Yy52aWV3UXVlcnk7aWYobnVsbCE9PXJlJiZkYigyLHJlLGQpLEQpe2NvbnN0IGNlPWMudmlld0NoZWNrSG9va3M7bnVsbCE9PWNlJiZMdihsLGNlKX1lbHNle2NvbnN0IGNlPWMudmlld0hvb2tzO251bGwhPT1jZSYmT3YobCxjZSwyKSxk''@;'; put 'put ''QyhsLDIpfWlmKCEwPT09Yy5maXJzdFVwZGF0ZVBhc3MmJihjLmZpcnN0VXBkYXRlUGFzcz0hMSksbFt2NV0pe2Zvcihjb25zdCBjZSBvZiBsW3Y1XSljZSgpO2xbdjVdPW51bGx9bFtVYV0mPS03M31jYXRjaChEKXt0aHJvdyBHNihsKSxEfWZpbmFsbHl7bnVsbCE9PU0mJihmdW5jdGlvbiBF''@;'; put 'put ''KGMsbCl7aWYoX2UobCksYyYmdm9pZCAwIT09Yy5wcm9kdWNlck5vZGUmJnZvaWQgMCE9PWMucHJvZHVjZXJJbmRleE9mVGhpcyYmdm9pZCAwIT09Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbil7aWYoc2UoYykpZm9yKGxldCBhPWMubmV4dFByb2R1Y2VySW5kZXg7YTxjLnByb2R1Y2VyTm9k''@;'; put 'put ''ZS5sZW5ndGg7YSsrKXRlKGMucHJvZHVjZXJOb2RlW2FdLGMucHJvZHVjZXJJbmRleE9mVGhpc1thXSk7Zm9yKDtjLnByb2R1Y2VyTm9kZS5sZW5ndGg+Yy5uZXh0UHJvZHVjZXJJbmRleDspYy5wcm9kdWNlck5vZGUucG9wKCksYy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbi5wb3AoKSxjLnBy''@;'; put 'put ''b2R1Y2VySW5kZXhPZlRoaXMucG9wKCl9fShNLHYpLGZ1bmN0aW9uIHhqKGMpe2MubFZpZXdbeGZdIT09YyYmKGMubFZpZXc9bnVsbCxCRC5wdXNoKGMpKX0oTSkpLHc1KCl9fWZ1bmN0aW9uIHpEKGMsbCl7Zm9yKGxldCBhPUVrKGMpO251bGwhPT1hO2E9VGsoYSkpZm9yKGxldCBkPWdjO2Q8''@;'; put 'put ''YS5sZW5ndGg7ZCsrKVVEKGFbZF0sbCl9ZnVuY3Rpb24gSWooYyxsLGEpe1VEKE8xKGwsYyksYSl9ZnVuY3Rpb24gVUQoYyxsKXtRdyhjKSYmeFMoYyxsKX1mdW5jdGlvbiB4UyhjLGwpe2NvbnN0IGQ9Y1tLaV0saD1jW1VhXSxmPWNbeGZdO2xldCB2PSEhKDA9PT1sJiYxNiZoKTtpZih2fHw9''@;'; put 'put ''ISEoNjQmaCYmMD09PWwpLHZ8fD0hISgxMDI0JmgpLHZ8fD0hKCFmPy5kaXJ0eXx8IW0oZikpLGYmJihmLmRpcnR5PSExKSxjW1VhXSY9LTkyMTcsdilBaihkLGMsZC50ZW1wbGF0ZSxjW2NsXSk7ZWxzZSBpZig4MTkyJmgpe3pEKGMsMSk7Y29uc3QgTT1kLmNvbXBvbmVudHM7bnVsbCE9PU0m''@;'; put 'put ''JlpEKGMsTSwxKX19ZnVuY3Rpb24gWkQoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKUlqKGMsbFtkXSxhKX1mdW5jdGlvbiB5OChjKXtmb3IoY1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoKTtjOyl7Y1tVYV18PTY0O2NvbnN0IGw9VDQoYyk7aWYoeDQo''@;'; put 'put ''YykmJiFsKXJldHVybiBjO2M9bH1yZXR1cm4gbnVsbH1jbGFzcyBfOHtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbS2ldO3JldHVybiBiOChhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3RvcihsLGEsZD0hMCl7dGhpcy5fbFZpZXc9bCx0aGlzLl9jZFJlZklu''@;'; put 'put ''amVjdGluZ1ZpZXc9YSx0aGlzLm5vdGlmeUVycm9ySGFuZGxlcj1kLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX2xWaWV3W2NsXX1zZXQgY29udGV4dChsKXt0aGlzLl9sVmlld1tjbF09bH1nZXQg''@;'; put 'put ''ZGVzdHJveWVkKCl7cmV0dXJuISgyNTYmfnRoaXMuX2xWaWV3W1VhXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3W2ZjXTtpZihI''@;'; put 'put ''dShsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKHM4KGwsZCksT3UoYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9VTQodGhpcy5fbFZpZXdbS2ldLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kobCl7QXYodGhpcy5fbFZpZXcsbCl9bWFy''@;'; put 'put ''a0ZvckNoZWNrKCl7eTgodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNoKCl7dGhpcy5fbFZpZXdbVWFdJj0tMTI5fXJlYXR0YWNoKCl7bkModGhpcy5fbFZpZXcpLHRoaXMuX2xWaWV3W1VhXXw9MTI4fWRldGVjdENoYW5nZXMoKXt0aGlzLl9sVmlld1tVYV18''@;'; put 'put ''PTEwMjQsaGIodGhpcy5fbFZpZXcsdGhpcy5ub3RpZnlFcnJvckhhbmRsZXIpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgUW4oOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRh''@;'; put 'put ''Y2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsZkQodGhpcy5fbFZpZXdbS2ldLHRoaXMuX2xWaWV3KX1hdHRhY2hUb0FwcFJlZihsKXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgUW4oOTAyLCExKTt0aGlzLl9hcHBSZWY9bCxuQyh0aGlzLl9sVmll''@;'; put 'put ''dyl9fWxldCBTbD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPU9qfX1yZXR1cm4gY30pKCk7Y29uc3QgUmo9U2wsTGo9Y2xhc3MgZXh0ZW5kcyBSantjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9kZWNsYXJhdGlvbkxWaWV3PWwsdGhpcy5fZGVj''@;'; put 'put ''bGFyYXRpb25UQ29udGFpbmVyPWEsdGhpcy5lbGVtZW50UmVmPWR9Z2V0IHNzcklkKCl7cmV0dXJuIHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlldz8uc3NySWR8fG51bGx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwsYSl7cmV0dXJuIHRoaXMuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChs''@;'; put 'put ''LGEpfWNyZWF0ZUVtYmVkZGVkVmlld0ltcGwobCxhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gZzgoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7Y29uc3QgZj1sLnRWaWV3LEQ9bGIoYyxmLGEsNDA5NiZjW1VhXT80MDk2OjE2LG51bGwsbCxudWxsLG51bGwsZD8uaW5qZWN0b3I/P251bGws''@;'; put 'put ''ZD8uZW1iZWRkZWRWaWV3SW5qZWN0b3I/P251bGwsZD8uZGVoeWRyYXRlZFZpZXc/P251bGwpO0RbUzRdPWNbbC5pbmRleF07Y29uc3QgcmU9Y1t1ZF07cmV0dXJuIG51bGwhPT1yZSYmKERbdWRdPXJlLmNyZWF0ZUVtYmVkZGVkVmlldyhmKSksU1MoZixELGEpLER9ZmluYWxseXtfZShoKX19''@;'; put 'put ''KHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLGwse2VtYmVkZGVkVmlld0luamVjdG9yOmEsZGVoeWRyYXRlZFZpZXc6ZH0pO3JldHVybiBuZXcgXzgoaCl9fTtmdW5jdGlvbiBPaigpe3JldHVybiBmYih1bCgpLGRpKCkpfWZ1bmN0aW9uIGZiKGMs''@;'; put 'put ''bCl7cmV0dXJuIDQmYy50eXBlP25ldyBMaihsLGMsTDQoYyxsKSk6bnVsbH1jbGFzcyBiYnt9Y2xhc3Mgcnp7fWNsYXNzIFFEe31jbGFzcyBventyZXNvbHZlQ29tcG9uZW50RmFjdG9yeShsKXt0aHJvdyBmdW5jdGlvbiBpeihjKXtjb25zdCBsPUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9y''@;'; put 'put ''eSBmb3VuZCBmb3IgJHtQcihjKX0uYCk7cmV0dXJuIGwubmdDb21wb25lbnQ9YyxsfShsKX19bGV0IFc1PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuTlVMTD1uZXcgb3p9fXJldHVybiBjfSkoKTtjbGFzcyB4OHt9bGV0IEVvPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRl''@;'; put 'put ''c3Ryb3lOb2RlPW51bGx9c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189KCk9PmZ1bmN0aW9uIHN6KCl7Y29uc3QgYz1kaSgpLGE9TzEodWwoKS5pbmRleCxjKTtyZXR1cm4oRnUoYSk/YTpjKVtib119KCl9fXJldHVybiBjfSkoKSxsej0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgUlM9e30sZUk9bmV3IFNldDtmdW5jdGlvbiBiMihjKXtlSS5oYXMoYyl8fChlSS5hZGQoYykscGVyZm9ybWFuY2U/Lm1hcms/LigibWFya19mZWF0dXJl''@;'; put 'put ''X3VzYWdlIix7ZGV0YWlsOntmZWF0dXJlOmN9fSkpfWZ1bmN0aW9uIHRJKC4uLmMpe31jbGFzcyBXYXtjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6bD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmE9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRl''@;'; put 'put ''Y3Rpb246ZD0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgS3IoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgS3IoITEpLHRoaXMub25TdGFibGU9''@;'; put 'put ''bmV3IEtyKCExKSx0aGlzLm9uRXJyb3I9bmV3IEtyKCExKSx0eXBlb2YgWm9uZT4idSIpdGhyb3cgbmV3IFFuKDkwOCwhMSk7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2NvbnN0IGg9dGhpcztoLl9uZXN0aW5nPTAsaC5fb3V0ZXI9aC5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuVGFza1Ry''@;'; put 'put ''YWNraW5nWm9uZVNwZWMmJihoLl9pbm5lcj1oLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjKSksbCYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYoaC5faW5uZXI9aC5faW5uZXIuZm9yayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSxoLnNob3Vs''@;'; put 'put ''ZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb249IWQmJmEsaC5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbj1kLGgubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLGgubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uIGN6KCl7Y29uc3QgYz0iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgVnQucmVxdWVzdEFuaW1hdGlvbkZyYW1lO2xldCBsPVZ0W2M/InJlcXVlc3RBbmltYXRpb25GcmFtZSI6InNldFRpbWVvdXQiXSxhPVZ0W2M/ImNhbmNlbEFuaW1hdGlvbkZyYW1lIjoiY2xlYXJUaW1lb3V0Il07aWYodHlwZW9mIFpvbmU8InUiJiZsJiZhKXtjb25zdCBk''@;'; put 'put ''PWxbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2QmJihsPWQpO2NvbnN0IGg9YVtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07aCYmKGE9aCl9cmV0dXJue25hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZTpsLG5hdGl2ZUNhbmNlbEFuaW1hdGlvbkZy''@;'; put 'put ''YW1lOmF9fSgpLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZSxmdW5jdGlvbiBoeihjKXtjb25zdCBsPSgpPT57IWZ1bmN0aW9uIGR6KGMpe2MuaXNDaGVja1N0YWJsZVJ1bm5pbmd8fC0xIT09Yy5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWR8fChjLmxhc3RSZXF1ZXN0QW5pbWF0aW9u''@;'; put 'put ''RnJhbWVJZD1jLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZS5jYWxsKFZ0LCgpPT57Yy5mYWtlVG9wRXZlbnRUYXNrfHwoYy5mYWtlVG9wRXZlbnRUYXNrPVpvbmUucm9vdC5zY2hlZHVsZUV2ZW50VGFzaygiZmFrZVRvcEV2ZW50VGFzayIsKCk9PntjLmxhc3RSZXF1ZXN0QW5pbWF0aW9u''@;'; put 'put ''RnJhbWVJZD0tMSxPUyhjKSxjLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSEwLExTKGMpLGMuaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITF9LHZvaWQgMCwoKT0+e30sKCk9Pnt9KSksYy5mYWtlVG9wRXZlbnRUYXNrLmludm9rZSgpfSksT1MoYykpfShjKX07Yy5faW5uZXI9Yy5faW5uZXIuZm9yayh7''@;'; put 'put ''bmFtZToiYW5ndWxhciIscHJvcGVydGllczp7aXNBbmd1bGFyWm9uZTohMH0sb25JbnZva2VUYXNrOihhLGQsaCxmLHYsTSk9PntpZihmdW5jdGlvbiBmeihjKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KGMpfHwxIT09Yy5sZW5ndGgpJiYhMD09PWNbMF0uZGF0YT8uX19pZ25vcmVfbmdfem9u''@;'; put 'put ''ZV9ffShNKSlyZXR1cm4gYS5pbnZva2VUYXNrKGgsZix2LE0pO3RyeXtyZXR1cm4geWIoYyksYS5pbnZva2VUYXNrKGgsZix2LE0pfWZpbmFsbHl7KGMuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1mLnR5cGV8fGMuc2hvdWxkQ29hbGVzY2VSdW5D''@;'; put 'put ''aGFuZ2VEZXRlY3Rpb24pJiZsKCksbkkoYyl9fSxvbkludm9rZTooYSxkLGgsZix2LE0sRCk9Pnt0cnl7cmV0dXJuIHliKGMpLGEuaW52b2tlKGgsZix2LE0sRCl9ZmluYWxseXtjLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZsKCksbkkoYyl9fSxvbkhhc1Rhc2s6KGEsZCxo''@;'; put 'put ''LGYpPT57YS5oYXNUYXNrKGgsZiksZD09PWgmJigibWljcm9UYXNrIj09Zi5jaGFuZ2U/KGMuX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPWYubWljcm9UYXNrLE9TKGMpLExTKGMpKToibWFjcm9UYXNrIj09Zi5jaGFuZ2UmJihjLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPWYubWFjcm9UYXNrKSl9LG9u''@;'; put 'put ''SGFuZGxlRXJyb3I6KGEsZCxoLGYpPT4oYS5oYW5kbGVFcnJvcihoLGYpLGMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMub25FcnJvci5lbWl0KGYpKSwhMSl9KX0oaCl9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50Lmdl''@;'; put 'put ''dCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIVdhLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBRbig5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYoV2EuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IFFuKDkw''@;'; put 'put ''OSwhMSl9cnVuKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKGwsYSxkKX1ydW5UYXNrKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faW5uZXIsdj1mLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIitoLGwsdXosdEksdEkpO3RyeXtyZXR1cm4gZi5ydW5UYXNrKHYsYSxkKX1m''@;'; put 'put ''aW5hbGx5e2YuY2FuY2VsVGFzayh2KX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9vdXRlci5ydW4obCl9fWNvbnN0IHV6PXt9O2Z1bmN0aW9uIExTKGMpe2lmKDA9PWMuX25l''@;'; put 'put ''c3RpbmcmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhYy5pc1N0YWJsZSl0cnl7Yy5fbmVzdGluZysrLGMub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYoYy5fbmVzdGluZy0tLCFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXtjLnJ1bk91dHNpZGVBbmd1bGFyKCgp''@;'; put 'put ''PT5jLm9uU3RhYmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7Yy5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIE9TKGMpe2MuaGFzUGVuZGluZ01pY3JvdGFza3M9ISEoYy5faGFzUGVuZGluZ01pY3JvdGFza3N8fChjLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fGMuc2hvdWxkQ29h''@;'; put 'put ''bGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYtMSE9PWMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkKX1mdW5jdGlvbiB5YihjKXtjLl9uZXN0aW5nKyssYy5pc1N0YWJsZSYmKGMuaXNTdGFibGU9ITEsYy5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIG5JKGMpe2MuX25lc3Rp''@;'; put 'put ''bmctLSxMUyhjKX1jbGFzcyBySXtjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgS3IsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBLcix0aGlz''@;'; put 'put ''Lm9uU3RhYmxlPW5ldyBLcix0aGlzLm9uRXJyb3I9bmV3IEtyfXJ1bihsLGEsZCl7cmV0dXJuIGwuYXBwbHkoYSxkKX1ydW5HdWFyZGVkKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiBsKCl9cnVuVGFzayhsLGEsZCxoKXtyZXR1cm4gbC5h''@;'; put 'put ''cHBseShhLGQpfX12YXIgUTM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5FYXJseVJlYWQ9MF09IkVhcmx5UmVhZCIsY1tjLldyaXRlPTFdPSJXcml0ZSIsY1tjLk1peGVkUmVhZFdyaXRlPTJdPSJNaXhlZFJlYWRXcml0ZSIsY1tjLlJlYWQ9M109IlJlYWQiLGN9KFEzfHx7fSk7Y29uc3QgUFM9''@;'; put 'put ''e2Rlc3Ryb3koKXt9fTtmdW5jdGlvbiBfYihjLGwpeyFsJiZmdW5jdGlvbiB3ZihjKXtpZighTXYoKSl0aHJvdyBuZXcgUW4oLTIwMywhMSl9KCk7Y29uc3QgYT1sPy5pbmplY3Rvcj8/ZmkoRHMpO2lmKCFmdW5jdGlvbiBjaChjKXtyZXR1cm4iYnJvd3NlciI9PT0oYz8/ZmkoRHMpKS5nZXQo''@;'; put 'put ''aW8pfShhKSlyZXR1cm4gUFM7YjIoIk5nQWZ0ZXJOZXh0UmVuZGVyIik7Y29uc3QgZD1hLmdldChFOCksaD1kLmhhbmRsZXI/Pz1uZXcgb0ksZj1sPy5waGFzZT8/UTMuTWl4ZWRSZWFkV3JpdGUsdj0oKT0+e2gudW5yZWdpc3RlcihEKSxNKCl9LE09YS5nZXQoazUpLm9uRGVzdHJveSh2KSxE''@;'; put 'put ''PXEwKGEsKCk9Pm5ldyBhSShmLCgpPT57digpLGMoKX0pKTtyZXR1cm4gaC5yZWdpc3RlcihEKSx7ZGVzdHJveTp2fX1jbGFzcyBhSXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGhhc2U9bCx0aGlzLmNhbGxiYWNrRm49YSx0aGlzLnpvbmU9ZmkoV2EpLHRoaXMuZXJyb3JIYW5kbGVyPWZpKGcy''@;'; put 'put ''LHtvcHRpb25hbDohMH0pLGZpKGJiLHtvcHRpb25hbDohMH0pPy5ub3RpZnkoMSl9aW52b2tlKCl7dHJ5e3RoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLmNhbGxiYWNrRm4pfWNhdGNoKGwpe3RoaXMuZXJyb3JIYW5kbGVyPy5oYW5kbGVFcnJvcihsKX19fWNsYXNzIG9Je2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITEsdGhpcy5idWNrZXRzPXtbUTMuRWFybHlSZWFkXTpuZXcgU2V0LFtRMy5Xcml0ZV06bmV3IFNldCxbUTMuTWl4ZWRSZWFkV3JpdGVdOm5ldyBTZXQsW1EzLlJlYWRdOm5ldyBTZXR9LHRoaXMuZGVmZXJyZWRDYWxsYmFja3M9bmV3''@;'; put 'put ''IFNldH1yZWdpc3RlcihsKXsodGhpcy5leGVjdXRpbmdDYWxsYmFja3M/dGhpcy5kZWZlcnJlZENhbGxiYWNrczp0aGlzLmJ1Y2tldHNbbC5waGFzZV0pLmFkZChsKX11bnJlZ2lzdGVyKGwpe3RoaXMuYnVja2V0c1tsLnBoYXNlXS5kZWxldGUobCksdGhpcy5kZWZlcnJlZENhbGxiYWNrcy5k''@;'; put 'put ''ZWxldGUobCl9ZXhlY3V0ZSgpe3RoaXMuZXhlY3V0aW5nQ2FsbGJhY2tzPSEwO2Zvcihjb25zdCBsIG9mIE9iamVjdC52YWx1ZXModGhpcy5idWNrZXRzKSlmb3IoY29uc3QgYSBvZiBsKWEuaW52b2tlKCk7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITE7Zm9yKGNvbnN0IGwgb2YgdGhpcy5k''@;'; put 'put ''ZWZlcnJlZENhbGxiYWNrcyl0aGlzLmJ1Y2tldHNbbC5waGFzZV0uYWRkKGwpO3RoaXMuZGVmZXJyZWRDYWxsYmFja3MuY2xlYXIoKX1kZXN0cm95KCl7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmJ1Y2tldHMpKWwuY2xlYXIoKTt0aGlzLmRlZmVycmVkQ2FsbGJhY2tzLmNs''@;'; put 'put ''ZWFyKCl9fWxldCBFOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVyPW51bGwsdGhpcy5pbnRlcm5hbENhbGxiYWNrcz1bXX1leGVjdXRlKCl7dGhpcy5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKSx0aGlzLmhhbmRsZXI/LmV4ZWN1dGUoKX1leGVjdXRlSW50ZXJu''@;'; put 'put ''YWxDYWxsYmFja3MoKXtjb25zdCBhPVsuLi50aGlzLmludGVybmFsQ2FsbGJhY2tzXTt0aGlzLmludGVybmFsQ2FsbGJhY2tzLmxlbmd0aD0wO2Zvcihjb25zdCBkIG9mIGEpZCgpfW5nT25EZXN0cm95KCl7dGhpcy5oYW5kbGVyPy5kZXN0cm95KCksdGhpcy5oYW5kbGVyPW51bGwsdGhpcy5p''@;'; put 'put ''bnRlcm5hbENhbGxiYWNrcy5sZW5ndGg9MH1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBDYihjLGwsYSl7bGV0IGQ9YT9jLnN0eWxlczpudWxsLGg9YT9jLmNsYXNz''@;'; put 'put ''ZXM6bnVsbCxmPTA7aWYobnVsbCE9PWwpZm9yKGxldCB2PTA7djxsLmxlbmd0aDt2Kyspe2NvbnN0IE09bFt2XTsibnVtYmVyIj09dHlwZW9mIE0/Zj1NOjE9PWY/aD1vZChoLE0pOjI9PWYmJihkPW9kKGQsTSsiOiAiK2xbKyt2XSsiOyIpKX1hP2Muc3R5bGVzPWQ6Yy5zdHlsZXNXaXRob3V0''@;'; put 'put ''SG9zdD1kLGE/Yy5jbGFzc2VzPWg6Yy5jbGFzc2VzV2l0aG91dEhvc3Q9aH1jbGFzcyBjSSBleHRlbmRzIFc1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5uZ01vZHVsZT1sfXJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpe2NvbnN0IGE9Vm8obCk7cmV0dXJuIG5ldyBrOChhLHRoaXMu''@;'; put 'put ''bmdNb2R1bGUpfX1mdW5jdGlvbiB1SShjKXtjb25zdCBsPVtdO2Zvcihjb25zdCBhIGluIGMpe2lmKCFjLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9Y1thXTt2b2lkIDAhPT1kJiZsLnB1c2goe3Byb3BOYW1lOkFycmF5LmlzQXJyYXkoZCk/ZFswXTpkLHRlbXBsYXRlTmFt''@;'; put 'put ''ZTphfSl9cmV0dXJuIGx9Y2xhc3MgU2J7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1vNShkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGwsUlMsZCk7cmV0dXJuIGghPT1SU3x8YT09PVJTP2g6dGhpcy5wYXJl''@;'; put 'put ''bnRJbmplY3Rvci5nZXQobCxhLGQpfX1jbGFzcyBrOCBleHRlbmRzIFFEe2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD11SShsLmlucHV0cyk7aWYobnVsbCE9PWEpZm9yKGNvbnN0IGggb2YgZClhLmhhc093blByb3BlcnR5KGgu''@;'; put 'put ''cHJvcE5hbWUpJiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gdUkodGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMu''@;'; put 'put ''Y29tcG9uZW50VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiBCdyhjKXtyZXR1cm4gYy5tYXAoVncpLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50U2VsZWN0b3JzP2wubmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMu''@;'; put 'put ''aXNCb3VuZFRvTW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7Y29uc3QgZj1fZShudWxsKTt0cnl7bGV0IHY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIGhjP2g6aD8uaW5qZWN0b3I7diYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKHY9''@;'; put 'put ''dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yKHYpfHx2KTtjb25zdCBNPXY/bmV3IFNiKGwsdik6bCxEPU0uZ2V0KHg4LG51bGwpO2lmKG51bGw9PT1EKXRocm93IG5ldyBRbig0MDcsITEpO2NvbnN0IFo9TS5nZXQobHosbnVsbCksYmU9e3JlbmRlcmVyRmFjdG9yeTpE''@;'; put 'put ''LHNhbml0aXplcjpaLGlubGluZUVmZmVjdFJ1bm5lcjpudWxsLGFmdGVyUmVuZGVyRXZlbnRNYW5hZ2VyOk0uZ2V0KEU4LG51bGwpLGNoYW5nZURldGVjdGlvblNjaGVkdWxlcjpNLmdldChiYixudWxsKX0sRWU9RC5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxCZT10''@;'; put 'put ''aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLHFlPWQ/ZnVuY3Rpb24gYWooYyxsLGEsZCl7Y29uc3QgZj1kLmdldChqaywhMSl8fGE9PT1Kcy5TaGFkb3dEb20sdj1jLnNlbGVjdFJvb3RFbGVtZW50KGwsZik7cmV0dXJuIGZ1bmN0aW9uIG9qKGMpe0VEKGMpfSh2KSx2''@;'; put 'put ''fShFZSxkLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24sTSk6ejQoRWUsQmUsZnVuY3Rpb24gdnooYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT1sPyJzdmciOiJtYXRoIj09PWw/Im1hdGgiOm51bGx9KEJlKSk7bGV0IHJ0PTUxMjt0aGlzLmNvbXBvbmVu''@;'; put 'put ''dERlZi5zaWduYWxzP3J0fD00MDk2OnRoaXMuY29tcG9uZW50RGVmLm9uUHVzaHx8KHJ0fD0xNik7bGV0IHB0PW51bGw7bnVsbCE9PXFlJiYocHQ9UkMocWUsTSwhMCkpO2NvbnN0IGR0PW1TKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksSnQ9bGIobnVs''@;'; put 'put ''bCxkdCxudWxsLHJ0LG51bGwsbnVsbCxiZSxFZSxNLG51bGwscHQpO2xldCB2bixDbjtLNihKdCk7dHJ5e2NvbnN0IHRuPXRoaXMuY29tcG9uZW50RGVmO2xldCBNbixDcj1udWxsO3RuLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8oTW49W10sQ3I9bmV3IE1hcCx0bi5maW5kSG9zdERpcmVjdGl2''@;'; put 'put ''ZURlZnModG4sTW4sQ3IpLE1uLnB1c2godG4pKTpNbj1bdG5dO2NvbnN0IEdyPWZ1bmN0aW9uIHl6KGMsbCl7Y29uc3QgYT1jW0tpXSxkPXdvO3JldHVybiBjW2RdPWwsajUoYSxkLDIsIiNob3N0IixudWxsKX0oSnQscWUpLG1yPWZ1bmN0aW9uIF96KGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09''@;'; put 'put ''aFtLaV07IWZ1bmN0aW9uIHd6KGMsbCxhLGQpe2Zvcihjb25zdCBoIG9mIGMpbC5tZXJnZWRBdHRycz12ZihsLm1lcmdlZEF0dHJzLGguaG9zdEF0dHJzKTtudWxsIT09bC5tZXJnZWRBdHRycyYmKENiKGwsbC5tZXJnZWRBdHRycywhMCksbnVsbCE9PWEmJkNEKGQsYSxsKSl9KGQsYyxsLHYp''@;'; put 'put ''O2xldCBEPW51bGw7bnVsbCE9PWwmJihEPVJDKGwsaFtwY10pKTtjb25zdCBaPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IHJlPTE2O2Euc2lnbmFscz9yZT00MDk2OmEub25QdXNoJiYocmU9NjQpO2NvbnN0IGNlPWxiKGgsY2IoYSksbnVsbCxyZSxoW2MuaW5k''@;'; put 'put ''ZXhdLGMsZixaLG51bGwsbnVsbCxEKTtyZXR1cm4gTS5maXJzdENyZWF0ZVBhc3MmJnlTKE0sYyxkLmxlbmd0aC0xKSxmOChoLGNlKSxoW2MuaW5kZXhdPWNlfShHcixxZSx0bixNbixKdCxiZSxFZSk7Q249WTYoZHQsd28pLHFlJiZmdW5jdGlvbiBTeihjLGwsYSxkKXtpZihkKW00KGMsYSxb''@;'; put 'put ''Im5nLXZlcnNpb24iLCIxNy4zLjEyIl0pO2Vsc2V7Y29uc3R7YXR0cnM6aCxjbGFzc2VzOmZ9PWZ1bmN0aW9uIEthKGMpe2NvbnN0IGw9W10sYT1bXTtsZXQgZD0xLGg9Mjtmb3IoO2Q8Yy5sZW5ndGg7KXtsZXQgZj1jW2RdO2lmKCJzdHJpbmciPT10eXBlb2YgZikyPT09aD8iIiE9PWYmJmwu''@;'; put 'put ''cHVzaChmLGNbKytkXSk6OD09PWgmJmEucHVzaChmKTtlbHNle2lmKCFNYyhoKSlicmVhaztoPWZ9ZCsrfXJldHVybnthdHRyczpsLGNsYXNzZXM6YX19KGwuc2VsZWN0b3JzWzBdKTtoJiZtNChjLGEsaCksZiYmZi5sZW5ndGg+MCYmd0QoYyxhLGYuam9pbigiICIpKX19KEVlLHRuLHFlLGQp''@;'; put 'put ''LHZvaWQgMCE9PWEmJmZ1bmN0aW9uIE16KGMsbCxhKXtjb25zdCBkPWMucHJvamVjdGlvbj1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO2QucHVzaChudWxsIT1mP0FycmF5LmZyb20oZik6bnVsbCl9fShDbix0aGlzLm5nQ29udGVudFNlbGVjdG9ycyxhKSx2''@;'; put 'put ''bj1mdW5jdGlvbiBDeihjLGwsYSxkLGgsZil7Y29uc3Qgdj11bCgpLE09aFtLaV0sRD1MMCh2LGgpO2JTKE0saCx2LGEsbnVsbCxkKTtmb3IobGV0IHJlPTA7cmU8YS5sZW5ndGg7cmUrKylqdShENChoLE0sdi5kaXJlY3RpdmVTdGFydCtyZSx2KSxoKTtPRChNLGgsdiksRCYmanUoRCxoKTtj''@;'; put 'put ''b25zdCBaPUQ0KGgsTSx2LmRpcmVjdGl2ZVN0YXJ0K3YuY29tcG9uZW50T2Zmc2V0LHYpO2lmKGNbY2xdPWhbY2xdPVosbnVsbCE9PWYpZm9yKGNvbnN0IHJlIG9mIGYpcmUoWixsKTtyZXR1cm4gZlMoTSx2LGgpLFp9KG1yLHRuLE1uLENyLEp0LFt4el0pLFNTKGR0LEp0LG51bGwpfWZpbmFs''@;'; put 'put ''bHl7dzUoKX1yZXR1cm4gbmV3IGJ6KHRoaXMuY29tcG9uZW50VHlwZSx2bixMNChDbixKdCksSnQsQ24pfWZpbmFsbHl7X2UoZil9fX1jbGFzcyBieiBleHRlbmRzIHJ6e2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWQsdGhpcy5fcm9vdExWaWV3PWgsdGhp''@;'; put 'put ''cy5fdE5vZGU9Zix0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM9bnVsbCx0aGlzLmluc3RhbmNlPWEsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBfOChoLHZvaWQgMCwhMSksdGhpcy5jb21wb25lbnRUeXBlPWx9c2V0SW5wdXQobCxhKXtjb25zdCBkPXRoaXMuX3RO''@;'; put 'put ''b2RlLmlucHV0cztsZXQgaDtpZihudWxsIT09ZCYmKGg9ZFtsXSkpe2lmKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcz8/PW5ldyBNYXAsdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmhhcyhsKSYmT2JqZWN0LmlzKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5nZXQobCksYSkpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGY9dGhpcy5fcm9vdExWaWV3O0NTKGZbS2ldLGYsaCxsLGEpLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5zZXQobCxhKSx5OChPMSh0aGlzLl90Tm9kZS5pbmRleCxmKSl9fWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgQnUodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0''@;'; put 'put ''cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KGwpfX1mdW5jdGlvbiB4eigpe2NvbnN0IGM9dWwoKTtSdihkaSgpW0tpXSxjKX1sZXQgRG89KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz1F''@;'; put 'put ''en19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEV6KCl7cmV0dXJuIGZJKHVsKCksZGkoKSl9Y29uc3QgVHo9RG8sZEk9Y2xhc3MgZXh0ZW5kcyBUentjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVyPWwsdGhpcy5faG9zdFROb2RlPWEsdGhpcy5faG9zdExWaWV3PWR9''@;'; put 'put ''Z2V0IGVsZW1lbnQoKXtyZXR1cm4gTDQodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBCdSh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFyZW50SW5qZWN0b3IoKXtjb25zdCBsPUM1KHRoaXMuX2hvc3RUTm9k''@;'; put 'put ''ZSx0aGlzLl9ob3N0TFZpZXcpO2lmKFB2KGwpKXtjb25zdCBhPUo2KGwsdGhpcy5faG9zdExWaWV3KSxkPVg2KGwpO3JldHVybiBuZXcgQnUoYVtLaV0uZGF0YVtkKzhdLGEpfXJldHVybiBuZXcgQnUobnVsbCx0aGlzLl9ob3N0TFZpZXcpfWNsZWFyKCl7Zm9yKDt0aGlzLmxlbmd0aD4wOyl0''@;'; put 'put ''aGlzLnJlbW92ZSh0aGlzLmxlbmd0aC0xKX1nZXQobCl7Y29uc3QgYT1oSSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWEmJmFbbF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC1nY31jcmVhdGVFbWJlZGRlZFZpZXcobCxhLGQpe2xl''@;'; put 'put ''dCBoLGY7Im51bWJlciI9PXR5cGVvZiBkP2g9ZDpudWxsIT1kJiYoaD1kLmluZGV4LGY9ZC5pbmplY3Rvcik7Y29uc3QgTT1sLmNyZWF0ZUVtYmVkZGVkVmlld0ltcGwoYXx8e30sZixudWxsKTtyZXR1cm4gdGhpcy5pbnNlcnRJbXBsKE0saCxVNSh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLE19''@;'; put 'put ''Y3JlYXRlQ29tcG9uZW50KGwsYSxkLGgsZil7Y29uc3Qgdj1sJiYhZnVuY3Rpb24gemkoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9KGwpO2xldCBNO2lmKHYpTT1hO2Vsc2V7Y29uc3QgQmU9YXx8e307TT1CZS5pbmRleCxkPUJlLmluamVjdG9yLGg9QmUucHJvamVjdGFibGVOb2Rl''@;'; put 'put ''cyxmPUJlLmVudmlyb25tZW50SW5qZWN0b3J8fEJlLm5nTW9kdWxlUmVmfWNvbnN0IEQ9dj9sOm5ldyBrOChWbyhsKSksWj1kfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFmJiZudWxsPT1ELm5nTW9kdWxlKXtjb25zdCBxZT0odj9aOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChoYyxudWxs''@;'; put 'put ''KTtxZSYmKGY9cWUpfVZvKEQuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IEVlPUQuY3JlYXRlKFosaCxudWxsLGYpO3JldHVybiB0aGlzLmluc2VydEltcGwoRWUuaG9zdFZpZXcsTSxVNSh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLEVlfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydElt''@;'; put 'put ''cGwobCxhLCEwKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3O2lmKGZ1bmN0aW9uIEpBKGMpe3JldHVybiBIdShjW2ZjXSl9KGgpKXtjb25zdCBNPXRoaXMuaW5kZXhPZihsKTtpZigtMSE9PU0pdGhpcy5kZXRhY2goTSk7ZWxzZXtjb25zdCBEPWhbZmNdLFo9bmV3IGRJKEQs''@;'; put 'put ''RFtyY10sRFtmY10pO1ouZGV0YWNoKFouaW5kZXhPZihsKSl9fWNvbnN0IGY9dGhpcy5fYWRqdXN0SW5kZXgoYSksdj10aGlzLl9sQ29udGFpbmVyO3JldHVybiB2OCh2LGgsZixkKSxsLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLFBsKFZTKHYpLGYsbCksbH1tb3ZlKGwsYSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW5zZXJ0KGwsYSl9aW5kZXhPZihsKXtjb25zdCBhPWhJKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09YT9hLmluZGV4T2YobCk6LTF9cmVtb3ZlKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1zOCh0aGlzLl9sQ29udGFpbmVyLGEpO2QmJihPdShW''@;'; put 'put ''Uyh0aGlzLl9sQ29udGFpbmVyKSxhKSxVNChkW0tpXSxkKSl9ZGV0YWNoKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1zOCh0aGlzLl9sQ29udGFpbmVyLGEpO3JldHVybiBkJiZudWxsIT1PdShWUyh0aGlzLl9sQ29udGFpbmVyKSxhKT9uZXcgXzgoZCk6bnVsbH1fYWRq''@;'; put 'put ''dXN0SW5kZXgobCxhPTApe3JldHVybiBsPz90aGlzLmxlbmd0aCthfX07ZnVuY3Rpb24gaEkoYyl7cmV0dXJuIGNbOF19ZnVuY3Rpb24gVlMoYyl7cmV0dXJuIGNbOF18fChjWzhdPVtdKX1mdW5jdGlvbiBmSShjLGwpe2xldCBhO2NvbnN0IGQ9bFtjLmluZGV4XTtyZXR1cm4gSHUoZCk/YT1k''@;'; put 'put ''OihhPXdTKGQsbCxudWxsLGMpLGxbYy5pbmRleF09YSxmOChsLGEpKSxCUyhhLGwsYyxkKSxuZXcgZEkoYSxjLGwpfWxldCBCUz1mdW5jdGlvbiBqUyhjLGwsYSxkKXtpZihjW3Z1XSlyZXR1cm47bGV0IGg7aD04JmEudHlwZT9DbChkKTpmdW5jdGlvbiBBeihjLGwpe2NvbnN0IGE9Y1tib10s''@;'; put 'put ''ZD1hLmNyZWF0ZUNvbW1lbnQoIiIpLGg9TDAobCxjKTtyZXR1cm4gWjQoYSxxMyhhLGgpLGQsZnVuY3Rpb24gYVMoYyxsKXtyZXR1cm4gYy5uZXh0U2libGluZyhsKX0oYSxoKSwhMSksZH0obCxhKSxjW3Z1XT1ofSxNYj0oKT0+ITE7Y2xhc3MgelN7Y29uc3RydWN0b3IobCl7dGhpcy5xdWVy''@;'; put 'put ''eUxpc3Q9bCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgelModGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19Y2xhc3MgeGJ7Y29uc3RydWN0b3IobD1bXSl7dGhpcy5xdWVyaWVzPWx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwp''@;'; put 'put ''e2NvbnN0IGE9bC5xdWVyaWVzO2lmKG51bGwhPT1hKXtjb25zdCBkPW51bGwhPT1sLmNvbnRlbnRRdWVyaWVzP2wuY29udGVudFF1ZXJpZXNbMF06YS5sZW5ndGgsaD1bXTtmb3IobGV0IGY9MDtmPGQ7ZisrKXtjb25zdCB2PWEuZ2V0QnlJbmRleChmKTtoLnB1c2godGhpcy5xdWVyaWVzW3Yu''@;'; put 'put ''aW5kZXhJbkRlY2xhcmF0aW9uVmlld10uY2xvbmUoKSl9cmV0dXJuIG5ldyB4YihoKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KGwpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZGV0YWNoVmlldyhsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWZpbmlzaFZpZXdD''@;'; put 'put ''cmVhdGlvbihsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKyspbnVsbCE9PVlTKGwsYSkubWF0Y2hlcyYmdGhpcy5xdWVyaWVzW2FdLnNldERpcnR5KCl9fWNsYXNz''@;'; put 'put ''IHBJe2NvbnN0cnVjdG9yKGwsYSxkPW51bGwpe3RoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZCx0aGlzLnByZWRpY2F0ZT0ic3RyaW5nIj09dHlwZW9mIGw/ZnVuY3Rpb24geUkoYyl7cmV0dXJuIGMuc3BsaXQoIiwiKS5tYXAobD0+bC50cmltKCkpfShsKTpsfX1jbGFzcyBVU3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihsPVtdKXt0aGlzLnF1ZXJpZXM9bH1lbGVtZW50U3RhcnQobCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMucXVlcmllcy5sZW5ndGg7ZCsrKXRoaXMucXVlcmllc1tkXS5lbGVtZW50U3RhcnQobCxhKX1lbGVtZW50RW5kKGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKysp''@;'; put 'put ''dGhpcy5xdWVyaWVzW2FdLmVsZW1lbnRFbmQobCl9ZW1iZWRkZWRUVmlldyhsKXtsZXQgYT1udWxsO2ZvcihsZXQgZD0wO2Q8dGhpcy5sZW5ndGg7ZCsrKXtjb25zdCBoPW51bGwhPT1hP2EubGVuZ3RoOjAsZj10aGlzLmdldEJ5SW5kZXgoZCkuZW1iZWRkZWRUVmlldyhsLGgpO2YmJihmLmlu''@;'; put 'put ''ZGV4SW5EZWNsYXJhdGlvblZpZXc9ZCxudWxsIT09YT9hLnB1c2goZik6YT1bZl0pfXJldHVybiBudWxsIT09YT9uZXcgVVMoYSk6bnVsbH10ZW1wbGF0ZShsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5xdWVyaWVzLmxlbmd0aDtkKyspdGhpcy5xdWVyaWVzW2RdLnRlbXBsYXRlKGwsYSl9Z2V0''@;'; put 'put ''QnlJbmRleChsKXtyZXR1cm4gdGhpcy5xdWVyaWVzW2xdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5xdWVyaWVzLmxlbmd0aH10cmFjayhsKXt0aGlzLnF1ZXJpZXMucHVzaChsKX19Y2xhc3MgWlN7Y29uc3RydWN0b3IobCxhPS0xKXt0aGlzLm1ldGFkYXRhPWwsdGhpcy5tYXRjaGVzPW51''@;'; put 'put ''bGwsdGhpcy5pbmRleEluRGVjbGFyYXRpb25WaWV3PS0xLHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITEsdGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITAsdGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9YX1lbGVtZW50U3RhcnQobCxhKXt0aGlzLmlzQXBwbHlpbmdUb05vZGUoYSkmJnRoaXMu''@;'; put 'put ''bWF0Y2hUTm9kZShsLGEpfWVsZW1lbnRFbmQobCl7dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9PT1sLmluZGV4JiYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITEpfXRlbXBsYXRlKGwsYSl7dGhpcy5lbGVtZW50U3RhcnQobCxhKX1lbWJlZGRlZFRWaWV3KGwsYSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aXNBcHBseWluZ1RvTm9kZShsKT8odGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMCx0aGlzLmFkZE1hdGNoKC1sLmluZGV4LGEpLG5ldyBaUyh0aGlzLm1ldGFkYXRhKSk6bnVsbH1pc0FwcGx5aW5nVG9Ob2RlKGwpe2lmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlJiYxJn50aGlzLm1ldGFkYXRh''@;'; put 'put ''LmZsYWdzKXtjb25zdCBhPXRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4O2xldCBkPWwucGFyZW50O2Zvcig7bnVsbCE9PWQmJjgmZC50eXBlJiZkLmluZGV4IT09YTspZD1kLnBhcmVudDtyZXR1cm4gYT09PShudWxsIT09ZD9kLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4''@;'; put 'put ''dE5vZGV9bWF0Y2hUTm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5tZXRhZGF0YS5wcmVkaWNhdGU7aWYoQXJyYXkuaXNBcnJheShkKSlmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdO3RoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxSeihhLGYpKSx0aGlzLm1h''@;'; put 'put ''dGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsQnYoYSxsLGYsITEsITEpKX1lbHNlIGQ9PT1TbD80JmEudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsQnYoYSxsLGQsITEsITEpKX1tYXRjaFROb2Rl''@;'; put 'put ''V2l0aFJlYWRPcHRpb24obCxhLGQpe2lmKG51bGwhPT1kKXtjb25zdCBoPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aClpZihoPT09Sml8fGg9PT1Eb3x8aD09PVNsJiY0JmEudHlwZSl0aGlzLmFkZE1hdGNoKGEuaW5kZXgsLTIpO2Vsc2V7Y29uc3QgZj1CdihhLGwsaCwhMSwhMSk7''@;'; put 'put ''bnVsbCE9PWYmJnRoaXMuYWRkTWF0Y2goYS5pbmRleCxmKX1lbHNlIHRoaXMuYWRkTWF0Y2goYS5pbmRleCxkKX19YWRkTWF0Y2gobCxhKXtudWxsPT09dGhpcy5tYXRjaGVzP3RoaXMubWF0Y2hlcz1bbCxhXTp0aGlzLm1hdGNoZXMucHVzaChsLGEpfX1mdW5jdGlvbiBSeihjLGwpe2NvbnN0''@;'; put 'put ''IGE9Yy5sb2NhbE5hbWVzO2lmKG51bGwhPT1hKWZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCs9MilpZihhW2RdPT09bClyZXR1cm4gYVtkKzFdO3JldHVybiBudWxsfWZ1bmN0aW9uIEx6KGMsbCxhLGQpe3JldHVybi0xPT09YT9mdW5jdGlvbiBnSShjLGwpe3JldHVybiAxMSZjLnR5cGU/TDQo''@;'; put 'put ''YyxsKTo0JmMudHlwZT9mYihjLGwpOm51bGx9KGwsYyk6LTI9PT1hP2Z1bmN0aW9uIFdTKGMsbCxhKXtyZXR1cm4gYT09PUppP0w0KGwsYyk6YT09PVNsP2ZiKGwsYyk6YT09PURvP2ZJKGwsYyk6dm9pZCAwfShjLGwsZCk6RDQoYyxjW0tpXSxhLGwpfWZ1bmN0aW9uIFk1KGMsbCxhLGQpe2Nv''@;'; put 'put ''bnN0IGg9bFt1ZF0ucXVlcmllc1tkXTtpZihudWxsPT09aC5tYXRjaGVzKXtjb25zdCBmPWMuZGF0YSx2PWEubWF0Y2hlcyxNPVtdO2ZvcihsZXQgRD0wO251bGwhPT12JiZEPHYubGVuZ3RoO0QrPTIpe2NvbnN0IFo9dltEXTtNLnB1c2goWjwwP251bGw6THoobCxmW1pdLHZbRCsxXSxhLm1l''@;'; put 'put ''dGFkYXRhLnJlYWQpKX1oLm1hdGNoZXM9TX1yZXR1cm4gaC5tYXRjaGVzfWZ1bmN0aW9uIEQ4KGMsbCxhLGQpe2NvbnN0IGg9Yy5xdWVyaWVzLmdldEJ5SW5kZXgoYSksZj1oLm1hdGNoZXM7aWYobnVsbCE9PWYpe2NvbnN0IHY9WTUoYyxsLGgsYSk7Zm9yKGxldCBNPTA7TTxmLmxlbmd0aDtN''@;'; put 'put ''Kz0yKXtjb25zdCBEPWZbTV07aWYoRD4wKWQucHVzaCh2W00vMl0pO2Vsc2V7Y29uc3QgWj1mW00rMV0scmU9bFstRF07Zm9yKGxldCBjZT1nYztjZTxyZS5sZW5ndGg7Y2UrKyl7Y29uc3QgYmU9cmVbY2VdO2JlW1M0XT09PWJlW2ZjXSYmRDgoYmVbS2ldLGJlLFosZCl9aWYobnVsbCE9PXJl''@;'; put 'put ''W1YzXSl7Y29uc3QgY2U9cmVbVjNdO2ZvcihsZXQgYmU9MDtiZTxjZS5sZW5ndGg7YmUrKyl7Y29uc3QgRWU9Y2VbYmVdO0Q4KEVlW0tpXSxFZSxaLGQpfX19fX1yZXR1cm4gZH1mdW5jdGlvbiBtSShjLGwsYSl7Y29uc3QgZD1uZXcgZmQoISg0Jn5hKSk7cmV0dXJuIGZ1bmN0aW9uIGtEKGMs''@;'; put 'put ''bCxhLGQpe2NvbnN0IGg9TkQobCk7aC5wdXNoKGEpLGMuZmlyc3RDcmVhdGVQYXNzJiZwOChjKS5wdXNoKGQsaC5sZW5ndGgtMSl9KGMsbCxkLGQuZGVzdHJveSksKGxbdWRdPz89bmV3IHhiKS5xdWVyaWVzLnB1c2gobmV3IHpTKGQpKS0xfWZ1bmN0aW9uIF9JKGMsbCxhKXtudWxsPT09Yy5x''@;'; put 'put ''dWVyaWVzJiYoYy5xdWVyaWVzPW5ldyBVUyksYy5xdWVyaWVzLnRyYWNrKG5ldyBaUyhsLGEpKX1mdW5jdGlvbiBZUyhjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiB3SShjLGwpe2NvbnN0IGE9Y1tLaV0sZD1ZUyhhLGwpO3JldHVybiBkLmNyb3NzZXNOZ1Rl''@;'; put 'put ''bXBsYXRlP0Q4KGEsYyxsLFtdKTpZNShhLGMsZCxsKX1mdW5jdGlvbiBTSShjKXtyZXR1cm4gZnVuY3Rpb24gRWIoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJnZvaWQgMCE9PWNbbWVdfShjKSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc2V0fWZ1bmN0aW9uIHdhKGMpe2xldCBsPWZ1''@;'; put 'put ''bmN0aW9uIFhTKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yfShjLnR5cGUpLGE9ITA7Y29uc3QgZD1bY107Zm9yKDtsOyl7bGV0IGg7aWYoVmMoYykpaD1sLlx1MDI3NWNtcHx8bC5cdTAyNzVkaXI7ZWxzZXtpZihsLlx1MDI3NWNtcCl0''@;'; put 'put ''aHJvdyBuZXcgUW4oOTAzLCExKTtoPWwuXHUwMjc1ZGlyfWlmKGgpe2lmKGEpe2QucHVzaChoKTtjb25zdCB2PWM7di5pbnB1dHM9UDgoYy5pbnB1dHMpLHYuaW5wdXRUcmFuc2Zvcm1zPVA4KGMuaW5wdXRUcmFuc2Zvcm1zKSx2LmRlY2xhcmVkSW5wdXRzPVA4KGMuZGVjbGFyZWRJbnB1dHMp''@;'; put 'put ''LHYub3V0cHV0cz1QOChjLm91dHB1dHMpO2NvbnN0IE09aC5ob3N0QmluZGluZ3M7TSYmT2YoYyxNKTtjb25zdCBEPWgudmlld1F1ZXJ5LFo9aC5jb250ZW50UXVlcmllcztpZihEJiZSSShjLEQpLFomJlp6KGMsWiksSUkoYyxoKSxMdShjLm91dHB1dHMsaC5vdXRwdXRzKSxWYyhoKSYmaC5k''@;'; put 'put ''YXRhLmFuaW1hdGlvbil7Y29uc3QgcmU9Yy5kYXRhO3JlLmFuaW1hdGlvbj0ocmUuYW5pbWF0aW9ufHxbXSkuY29uY2F0KGguZGF0YS5hbmltYXRpb24pfX1jb25zdCBmPWguZmVhdHVyZXM7aWYoZilmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdO00mJk0ubmdJbmhl''@;'; put 'put ''cml0JiZNKGMpLE09PT13YSYmKGE9ITEpfX1sPU9iamVjdC5nZXRQcm90b3R5cGVPZihsKX0hZnVuY3Rpb24gVXooYyl7bGV0IGw9MCxhPW51bGw7Zm9yKGxldCBkPWMubGVuZ3RoLTE7ZD49MDtkLS0pe2NvbnN0IGg9Y1tkXTtoLmhvc3RWYXJzPWwrPWguaG9zdFZhcnMsaC5ob3N0QXR0cnM9''@;'; put 'put ''dmYoaC5ob3N0QXR0cnMsYT12ZihhLGguaG9zdEF0dHJzKSl9fShkKX1mdW5jdGlvbiBJSShjLGwpe2Zvcihjb25zdCBhIGluIGwuaW5wdXRzKXtpZighbC5pbnB1dHMuaGFzT3duUHJvcGVydHkoYSl8fGMuaW5wdXRzLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9bC5pbnB1''@;'; put 'put ''dHNbYV07aWYodm9pZCAwIT09ZCYmKGMuaW5wdXRzW2FdPWQsYy5kZWNsYXJlZElucHV0c1thXT1sLmRlY2xhcmVkSW5wdXRzW2FdLG51bGwhPT1sLmlucHV0VHJhbnNmb3Jtcykpe2NvbnN0IGg9QXJyYXkuaXNBcnJheShkKT9kWzBdOmQ7aWYoIWwuaW5wdXRUcmFuc2Zvcm1zLmhhc093blBy''@;'; put 'put ''b3BlcnR5KGgpKWNvbnRpbnVlO2MuaW5wdXRUcmFuc2Zvcm1zPz89e30sYy5pbnB1dFRyYW5zZm9ybXNbaF09bC5pbnB1dFRyYW5zZm9ybXNbaF19fX1mdW5jdGlvbiBQOChjKXtyZXR1cm4gYz09PUkwP3t9OmM9PT10cz9bXTpjfWZ1bmN0aW9uIFJJKGMsbCl7Y29uc3QgYT1jLnZpZXdRdWVy''@;'; put 'put ''eTtjLnZpZXdRdWVyeT1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiBaeihjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztjLmNvbnRlbnRRdWVyaWVzPWE/KGQsaCxmKT0+e2woZCxoLGYpLGEoZCxoLGYpfTpsfWZ1bmN0aW9uIE9mKGMsbCl7Y29uc3QgYT1jLmhvc3RC''@;'; put 'put ''aW5kaW5ncztjLmhvc3RCaW5kaW5ncz1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiB2ZChjKXtjb25zdCBsPWE9Pntjb25zdCBkPShBcnJheS5pc0FycmF5KGMpP2M6YygpKS5tYXAoaD0+ImZ1bmN0aW9uIj09dHlwZW9mIGg/e2RpcmVjdGl2ZTpZaShoKSxpbnB1dHM6STAs''@;'; put 'put ''b3V0cHV0czpJMH06e2RpcmVjdGl2ZTpZaShoLmRpcmVjdGl2ZSksaW5wdXRzOk9JKGguaW5wdXRzKSxvdXRwdXRzOk9JKGgub3V0cHV0cyl9KTtudWxsPT09YS5ob3N0RGlyZWN0aXZlcz8oYS5maW5kSG9zdERpcmVjdGl2ZURlZnM9TEksYS5ob3N0RGlyZWN0aXZlcz1kKTphLmhvc3REaXJl''@;'; put 'put ''Y3RpdmVzLnVuc2hpZnQoLi4uZCl9O3JldHVybiBsLm5nSW5oZXJpdD0hMCxsfWZ1bmN0aW9uIExJKGMsbCxhKXtpZihudWxsIT09Yy5ob3N0RGlyZWN0aXZlcylmb3IoY29uc3QgZCBvZiBjLmhvc3REaXJlY3RpdmVzKXtjb25zdCBoPXhjKGQuZGlyZWN0aXZlKTskeihoLmRlY2xhcmVkSW5w''@;'; put 'put ''dXRzLGQuaW5wdXRzKSxMSShoLGwsYSksYS5zZXQoaCxkKSxsLnB1c2goaCl9fWZ1bmN0aW9uIE9JKGMpe2lmKHZvaWQgMD09PWN8fDA9PT1jLmxlbmd0aClyZXR1cm4gSTA7Y29uc3QgbD17fTtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErPTIpbFtjW2FdXT1jW2ErMV07cmV0dXJuIGx9ZnVu''@;'; put 'put ''Y3Rpb24gJHooYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJihjW2xbYV1dPWNbYV0pfWZ1bmN0aW9uIFdsKGMpe2NvbnN0IGw9Yy5pbnB1dENvbmZpZyxhPXt9O2Zvcihjb25zdCBkIGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgaD1sW2RdO0Fy''@;'; put 'put ''cmF5LmlzQXJyYXkoaCkmJmhbM10mJihhW2RdPWhbM10pfWMuaW5wdXRUcmFuc2Zvcm1zPWF9Y2xhc3MgbnB7fWNsYXNzIG1je31jbGFzcyBSYiBleHRlbmRzIG5we2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX3BhcmVudD1hLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10s''@;'; put 'put ''dGhpcy5kZXN0cm95Q2JzPVtdLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBjSSh0aGlzKTtjb25zdCBoPVB1KGwpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9RjEoaC5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9UjQobCxhLFt7cHJvdmlkZTpucCx1c2VWYWx1ZTp0''@;'; put 'put ''aGlzfSx7cHJvdmlkZTpXNSx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn0sLi4uZF0sUHIobCksbmV3IFNldChbImVudmlyb25tZW50Il0pKSx0aGlzLl9yM0luamVjdG9yLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLHRoaXMuaW5zdGFuY2U9dGhpcy5fcjNJ''@;'; put 'put ''bmplY3Rvci5nZXQobCl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX3IzSW5qZWN0b3J9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5fcjNJbmplY3RvcjshbC5kZXN0cm95ZWQmJmwuZGVzdHJveSgpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKGE9PmEoKSksdGhpcy5kZXN0cm95Q2JzPW51''@;'; put 'put ''bGx9b25EZXN0cm95KGwpe3RoaXMuZGVzdHJveUNicy5wdXNoKGwpfX1jbGFzcyBMYiBleHRlbmRzIG1je2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPWx9Y3JlYXRlKGwpe3JldHVybiBuZXcgUmIodGhpcy5tb2R1bGVUeXBlLGwsW10pfX1jbGFzcyBGOCBleHRlbmRz''@;'; put 'put ''IG5we2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGNJKHRoaXMpLHRoaXMuaW5zdGFuY2U9bnVsbDtjb25zdCBhPW5ldyBjZChbLi4ubC5wcm92aWRlcnMse3Byb3ZpZGU6bnAsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6VzUsdXNlVmFs''@;'; put 'put ''dWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxsLnBhcmVudHx8SDMoKSxsLmRlYnVnTmFtZSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9YSxsLnJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzJiZhLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygp''@;'; put 'put ''fWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIEc0KGMsbCxhPW51bGwpe3JldHVybiBuZXcgRjgoe3Byb3ZpZGVyczpjLHBhcmVudDpsLGRlYnVnTmFtZTphLHJ1bkVudmlyb25tZW50SW5p''@;'; put 'put ''dGlhbGl6ZXJzOiEwfSkuaW5qZWN0b3J9bGV0IFBmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnRhc2tJZD0wLHRoaXMucGVuZGluZ1Rhc2tzPW5ldyBTZXQsdGhpcy5oYXNQZW5kaW5nVGFza3M9bmV3IGVpKCExKX1nZXQgX2hhc1BlbmRpbmdUYXNrcygpe3JldHVybiB0aGlz''@;'; put 'put ''Lmhhc1BlbmRpbmdUYXNrcy52YWx1ZX1hZGQoKXt0aGlzLl9oYXNQZW5kaW5nVGFza3N8fHRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITApO2NvbnN0IGE9dGhpcy50YXNrSWQrKztyZXR1cm4gdGhpcy5wZW5kaW5nVGFza3MuYWRkKGEpLGF9cmVtb3ZlKGEpe3RoaXMucGVuZGluZ1Rhc2tz''@;'; put 'put ''LmRlbGV0ZShhKSwwPT09dGhpcy5wZW5kaW5nVGFza3Muc2l6ZSYmdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1Bl''@;'; put 'put ''bmRpbmdUYXNrcy5uZXh0KCExKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5j''@;'; put 'put ''dGlvbiBPYihjKXtyZXR1cm4hIUpTKGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShjIGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIEpTKGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMpfWZ1''@;'; put 'put ''bmN0aW9uIHkyKGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIEJjKGMsbCxhKXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIHJwKGMsbCxhLGQpe2NvbnN0IGg9QmMoYyxsLGEpO3JldHVybiBCYyhjLGwrMSxkKXx8aH1mdW5jdGlvbiBGYihjLGws''@;'; put 'put ''YSxkLGgpe2NvbnN0IGY9cnAoYyxsLGEsZCk7cmV0dXJuIEJjKGMsbCsyLGgpfHxmfWZ1bmN0aW9uIGJkKGMsbCxhLGQsaCxmKXtjb25zdCB2PXJwKGMsbCxhLGQpO3JldHVybiBycChjLGwrMixoLGYpfHx2fWZ1bmN0aW9uIGd0KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1kaSgpLFo9bHMo''@;'; put 'put ''KSxyZT1jK3dvLGNlPVouZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIFFTKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWwuY29uc3RzLHJlPWo1KGwsYyw0LHZ8fG51bGwsZDIoWixNKSk7dlMobCxhLHJlLGQyKFosRCkpLFJ2KGwscmUpO2NvbnN0IGNlPXJlLnRWaWV3PW1TKDIscmUsZCxo''@;'; put 'put ''LGYsbC5kaXJlY3RpdmVSZWdpc3RyeSxsLnBpcGVSZWdpc3RyeSxudWxsLGwuc2NoZW1hcyxaLG51bGwpO3JldHVybiBudWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwscmUpLGNlLnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcocmUpKSxyZX0ocmUsWixELGws''@;'; put 'put ''YSxkLGgsZix2KTpaLmRhdGFbcmVdO2gyKGNlLCExKTtjb25zdCBiZT1WSShaLEQsY2UsYyk7cTYoKSYmbDAoWixELGJlLGNlKSxqdShiZSxEKTtjb25zdCBFZT13UyhiZSxELGJlLGNlKTtyZXR1cm4gRFtyZV09RWUsZjgoRCxFZSksZnVuY3Rpb24gSDAoYyxsLGEpe3JldHVybiBNYihjLGws''@;'; put 'put ''YSl9KEVlLGNlLEQpLEowKGNlKSYmcFMoWixELGNlKSxudWxsIT12JiZnUyhELGNlLE0pLGd0fWxldCBWST1mdW5jdGlvbiBlTShjLGwsYSxkKXtyZXR1cm4gZjIoITApLGxbYm9dLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5jdGlvbiBocihjLGwsYSxkKXtjb25zdCBoPWRpKCk7cmV0dXJuIEJj''@;'; put 'put ''KGgsYWgoKSxsKSYmKGxzKCksdWgoUXMoKSxoLGMsbCxhLGQpKSxocn1mdW5jdGlvbiBZbChjLGwsYSxkKXtyZXR1cm4gQmMoYyxhaCgpLGEpP2wrQ2EoYSkrZDpSb31mdW5jdGlvbiBZbyhjLGwpe3JldHVybiBjPDwxN3xsPDwyfWZ1bmN0aW9uIHhsKGMpe3JldHVybiBjPj4xNyYzMjc2N31m''@;'; put 'put ''dW5jdGlvbiBGZihjKXtyZXR1cm4gMnxjfWZ1bmN0aW9uIHlkKGMpe3JldHVybigxMzEwNjgmYyk+PjJ9ZnVuY3Rpb24gZ24oYyxsKXtyZXR1cm4tMTMxMDY5JmN8bDw8Mn1mdW5jdGlvbiB3bihjKXtyZXR1cm4gMXxjfWZ1bmN0aW9uIHlyKGMsbCxhLGQpe2NvbnN0IGg9Y1thKzFdLGY9bnVs''@;'; put 'put ''bD09PWw7bGV0IHY9ZD94bChoKTp5ZChoKSxNPSExO2Zvcig7MCE9PXYmJighMT09PU18fGYpOyl7Y29uc3QgWj1jW3YrMV07V3IoY1t2XSxsKSYmKE09ITAsY1t2KzFdPWQ/d24oWik6RmYoWikpLHY9ZD94bChaKTp5ZChaKX1NJiYoY1thKzFdPWQ/RmYoaCk6d24oaCkpfWZ1bmN0aW9uIFdy''@;'; put 'put ''KGMsbCl7cmV0dXJuIG51bGw9PT1jfHxudWxsPT1sfHwoQXJyYXkuaXNBcnJheShjKT9jWzFdOmMpPT09bHx8ISghQXJyYXkuaXNBcnJheShjKXx8InN0cmluZyIhPXR5cGVvZiBsKSYmZTIoYyxsKT49MH1jb25zdCBvaT17dGV4dEVuZDowLGtleTowLGtleUVuZDowLHZhbHVlOjAsdmFsdWVF''@;'; put 'put ''bmQ6MH07ZnVuY3Rpb24gbmkoYyl7cmV0dXJuIGMuc3Vic3RyaW5nKG9pLmtleSxvaS5rZXlFbmQpfWZ1bmN0aW9uIG5vKGMsbCl7Y29uc3QgYT1vaS50ZXh0RW5kO3JldHVybiBhPT09bD8tMToobD1vaS5rZXlFbmQ9ZnVuY3Rpb24gcjEoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQo''@;'; put 'put ''bCk+MzI7KWwrKztyZXR1cm4gbH0oYyxvaS5rZXk9bCxhKSx4cyhjLGwsYSkpfWZ1bmN0aW9uIHhzKGMsbCxhKXtmb3IoO2w8YSYmYy5jaGFyQ29kZUF0KGwpPD0zMjspbCsrO3JldHVybiBsfWZ1bmN0aW9uIE1lKGMsbCxhKXtjb25zdCBkPWRpKCk7cmV0dXJuIEJjKGQsYWgoKSxsKSYmRjAo''@;'; put 'put ''bHMoKSxRcygpLGQsYyxsLGRbYm9dLGEsITEpLE1lfWZ1bmN0aW9uIGhoKGMsbCxhLGQsaCl7Y29uc3Qgdj1oPyJjbGFzcyI6InN0eWxlIjtDUyhjLGEsbC5pbnB1dHNbdl0sdixkKX1mdW5jdGlvbiBfZChjLGwsYSl7cmV0dXJuIEhmKGMsbCxhLCExKSxfZH1mdW5jdGlvbiBUcihjLGwpe3Jl''@;'; put 'put ''dHVybiBIZihjLGwsbnVsbCwhMCksVHJ9ZnVuY3Rpb24gYXAoYyxsKXtmb3IobGV0IGE9ZnVuY3Rpb24gVWkoYyl7cmV0dXJuIGZ1bmN0aW9uIFRvKGMpe29pLmtleT0wLG9pLmtleUVuZD0wLG9pLnZhbHVlPTAsb2kudmFsdWVFbmQ9MCxvaS50ZXh0RW5kPWMubGVuZ3RofShjKSxubyhjLHhz''@;'; put 'put ''KGMsMCxvaS50ZXh0RW5kKSl9KGwpO2E+PTA7YT1ubyhsLGEpKV8wKGMsbmkobCksITApfWZ1bmN0aW9uIEhmKGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj1BZigyKTtmLmZpcnN0VXBkYXRlUGFzcyYmb3JlKGYsYyx2LGQpLGwhPT1SbyYmQmMoaCx2LGwpJiZscmUoZixmLmRhdGFb''@;'; put 'put ''VnUoKV0saCxoW2JvXSxjLGhbdisxXT1mdW5jdGlvbiBuOWUoYyxsKXtyZXR1cm4gbnVsbD09Y3x8IiI9PT1jfHwoInN0cmluZyI9PXR5cGVvZiBsP2MrPWw6Im9iamVjdCI9PXR5cGVvZiBjJiYoYz1QcihtMihjKSkpKSxjfShsLGEpLGQsdil9ZnVuY3Rpb24gYXJlKGMsbCl7cmV0dXJuIGw+''@;'; put 'put ''PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gb3JlKGMsbCxhLGQpe2NvbnN0IGg9Yy5kYXRhO2lmKG51bGw9PT1oW2ErMV0pe2NvbnN0IGY9aFtWdSgpXSx2PWFyZShjLGEpO3VyZShmLGQpJiZudWxsPT09bCYmIXYmJihsPSExKSxsPWZ1bmN0aW9uIEs3ZShjLGwsYSxkKXtjb25zdCBo''@;'; put 'put ''PXNDKGMpO2xldCBmPWQ/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztpZihudWxsPT09aCkwPT09KGQ/bC5jbGFzc0JpbmRpbmdzOmwuc3R5bGVCaW5kaW5ncykmJihhPW9NKGE9clUobnVsbCxjLGwsYSxkKSxsLmF0dHJzLGQpLGY9bnVsbCk7ZWxzZXtjb25zdCB2PWwuZGly''@;'; put 'put ''ZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT12fHxjW3ZdIT09aClpZihhPXJVKGgsYyxsLGEsZCksbnVsbD09PWYpe2xldCBEPWZ1bmN0aW9uIHE3ZShjLGwsYSl7Y29uc3QgZD1hP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3M7aWYoMCE9PXlkKGQpKXJldHVybiBjW3hsKGQpXX0o''@;'; put 'put ''YyxsLGQpO3ZvaWQgMCE9PUQmJkFycmF5LmlzQXJyYXkoRCkmJihEPXJVKG51bGwsYyxsLERbMV0sZCksRD1vTShELGwuYXR0cnMsZCksZnVuY3Rpb24gWDdlKGMsbCxhLGQpe2NbeGwoYT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKV09ZH0oYyxsLGQsRCkpfWVsc2UgZj1mdW5j''@;'; put 'put ''dGlvbiBKN2UoYyxsLGEpe2xldCBkO2NvbnN0IGg9bC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBmPTErbC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtmPGg7ZisrKWQ9b00oZCxjW2ZdLmhvc3RBdHRycyxhKTtyZXR1cm4gb00oZCxsLmF0dHJzLGEpfShjLGwsZCl9cmV0dXJuIHZvaWQgMCE9PWYmJihk''@;'; put 'put ''P2wucmVzaWR1YWxDbGFzc2VzPWY6bC5yZXNpZHVhbFN0eWxlcz1mKSxhfShoLGYsbCxkKSxmdW5jdGlvbiB4bihjLGwsYSxkLGgsZil7bGV0IHY9Zj9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzLE09eGwodiksRD15ZCh2KTtjW2RdPWE7bGV0IHJlLFo9ITE7aWYoQXJyYXkuaXNB''@;'; put 'put ''cnJheShhKT8ocmU9YVsxXSwobnVsbD09PXJlfHxlMihhLHJlKT4wKSYmKFo9ITApKTpyZT1hLGgpaWYoMCE9PUQpe2NvbnN0IGJlPXhsKGNbTSsxXSk7Y1tkKzFdPVlvKGJlLE0pLDAhPT1iZSYmKGNbYmUrMV09Z24oY1tiZSsxXSxkKSksY1tNKzFdPWZ1bmN0aW9uIEVsKGMsbCl7cmV0dXJu''@;'; put 'put ''IDEzMTA3MSZjfGw8PDE3fShjW00rMV0sZCl9ZWxzZSBjW2QrMV09WW8oTSwwKSwwIT09TSYmKGNbTSsxXT1nbihjW00rMV0sZCkpLE09ZDtlbHNlIGNbZCsxXT1ZbyhELDApLDA9PT1NP009ZDpjW0QrMV09Z24oY1tEKzFdLGQpLEQ9ZDtaJiYoY1tkKzFdPUZmKGNbZCsxXSkpLHlyKGMscmUs''@;'; put 'put ''ZCwhMCkseXIoYyxyZSxkLCExKSxmdW5jdGlvbiB6bihjLGwsYSxkLGgpe2NvbnN0IGY9aD9jLnJlc2lkdWFsQ2xhc3NlczpjLnJlc2lkdWFsU3R5bGVzO251bGwhPWYmJiJzdHJpbmciPT10eXBlb2YgbCYmZTIoZixsKT49MCYmKGFbZCsxXT13bihhW2QrMV0pKX0obCxyZSxjLGQsZiksdj1Z''@;'; put 'put ''byhNLEQpLGY/bC5jbGFzc0JpbmRpbmdzPXY6bC5zdHlsZUJpbmRpbmdzPXZ9KGgsZixsLGEsdixkKX19ZnVuY3Rpb24gclUoYyxsLGEsZCxoKXtsZXQgZj1udWxsO2NvbnN0IHY9YS5kaXJlY3RpdmVFbmQ7bGV0IE09YS5kaXJlY3RpdmVTdHlsaW5nTGFzdDtmb3IoLTE9PT1NP009YS5kaXJl''@;'; put 'put ''Y3RpdmVTdGFydDpNKys7TTx2JiYoZj1sW01dLGQ9b00oZCxmLmhvc3RBdHRycyxoKSxmIT09Yyk7KU0rKztyZXR1cm4gbnVsbCE9PWMmJihhLmRpcmVjdGl2ZVN0eWxpbmdMYXN0PU0pLGR9ZnVuY3Rpb24gb00oYyxsLGEpe2NvbnN0IGQ9YT8xOjI7bGV0IGg9LTE7aWYobnVsbCE9PWwpZm9y''@;'; put 'put ''KGxldCBmPTA7ZjxsLmxlbmd0aDtmKyspe2NvbnN0IHY9bFtmXTsibnVtYmVyIj09dHlwZW9mIHY/aD12Omg9PT1kJiYoQXJyYXkuaXNBcnJheShjKXx8KGM9dm9pZCAwPT09Yz9bXTpbIiIsY10pLF8wKGMsdiwhIWF8fGxbKytmXSkpfXJldHVybiB2b2lkIDA9PT1jP251bGw6Y31mdW5jdGlv''@;'; put 'put ''biBscmUoYyxsLGEsZCxoLGYsdixNKXtpZighKDMmbC50eXBlKSlyZXR1cm47Y29uc3QgRD1jLmRhdGEsWj1EW00rMV0scmU9ZnVuY3Rpb24ga24oYyl7cmV0dXJuISgxJn5jKX0oWik/Y3JlKEQsbCxhLGgseWQoWiksdik6dm9pZCAwO1pJKHJlKXx8KFpJKGYpfHxmdW5jdGlvbiBfdShjKXty''@;'; put 'put ''ZXR1cm4hKDImfmMpfShaKSYmKGY9Y3JlKEQsbnVsbCxhLGgsTSx2KSksZnVuY3Rpb24geUQoYyxsLGEsZCxoKXtpZihsKWg/Yy5hZGRDbGFzcyhhLGQpOmMucmVtb3ZlQ2xhc3MoYSxkKTtlbHNle2xldCBmPS0xPT09ZC5pbmRleE9mKCItIik/dm9pZCAwOkszLkRhc2hDYXNlO251bGw9PWg/''@;'; put 'put ''Yy5yZW1vdmVTdHlsZShhLGQsZik6KCJzdHJpbmciPT10eXBlb2YgaCYmaC5lbmRzV2l0aCgiIWltcG9ydGFudCIpJiYoaD1oLnNsaWNlKDAsLTEwKSxmfD1LMy5JbXBvcnRhbnQpLGMuc2V0U3R5bGUoYSxkLGgsZikpfX0oZCx2LHk1KFZ1KCksYSksaCxmKSl9ZnVuY3Rpb24gY3JlKGMsbCxh''@;'; put 'put ''LGQsaCxmKXtjb25zdCB2PW51bGw9PT1sO2xldCBNO2Zvcig7aD4wOyl7Y29uc3QgRD1jW2hdLFo9QXJyYXkuaXNBcnJheShEKSxyZT1aP0RbMV06RCxjZT1udWxsPT09cmU7bGV0IGJlPWFbaCsxXTtiZT09PVJvJiYoYmU9Y2U/dHM6dm9pZCAwKTtsZXQgRWU9Y2U/QTYoYmUsZCk6cmU9PT1k''@;'; put 'put ''P2JlOnZvaWQgMDtpZihaJiYhWkkoRWUpJiYoRWU9QTYoRCxkKSksWkkoRWUpJiYoTT1FZSx2KSlyZXR1cm4gTTtjb25zdCBCZT1jW2grMV07aD12P3hsKEJlKTp5ZChCZSl9aWYobnVsbCE9PWwpe2xldCBEPWY/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1EJiYo''@;'; put 'put ''TT1BNihELGQpKX1yZXR1cm4gTX1mdW5jdGlvbiBaSShjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiB1cmUoYyxsKXtyZXR1cm4hIShjLmZsYWdzJihsPzg6MTYpKX1mdW5jdGlvbiBkcmUoYyxsLGEpeyFmdW5jdGlvbiBOZihjLGwsYSxkKXtjb25zdCBoPWxzKCksZj1BZigyKTtoLmZp''@;'; put 'put ''cnN0VXBkYXRlUGFzcyYmb3JlKGgsbnVsbCxmLGQpO2NvbnN0IHY9ZGkoKTtpZihhIT09Um8mJkJjKHYsZixhKSl7Y29uc3QgTT1oLmRhdGFbVnUoKV07aWYodXJlKE0sZCkmJiFhcmUoaCxmKSl7bGV0IEQ9ZD9NLmNsYXNzZXNXaXRob3V0SG9zdDpNLnN0eWxlc1dpdGhvdXRIb3N0O251bGwh''@;'; put 'put ''PT1EJiYoYT1vZChELGF8fCIiKSksaGgoaCxNLHYsYSxkKX1lbHNlIWZ1bmN0aW9uIHQ5ZShjLGwsYSxkLGgsZix2LE0pe2g9PT1SbyYmKGg9dHMpO2xldCBEPTAsWj0wLHJlPTA8aC5sZW5ndGg/aFswXTpudWxsLGNlPTA8Zi5sZW5ndGg/ZlswXTpudWxsO2Zvcig7bnVsbCE9PXJlfHxudWxs''@;'; put 'put ''IT09Y2U7KXtjb25zdCBiZT1EPGgubGVuZ3RoP2hbRCsxXTp2b2lkIDAsRWU9WjxmLmxlbmd0aD9mW1orMV06dm9pZCAwO2xldCBxZSxCZT1udWxsO3JlPT09Y2U/KEQrPTIsWis9MixiZSE9PUVlJiYoQmU9Y2UscWU9RWUpKTpudWxsPT09Y2V8fG51bGwhPT1yZSYmcmU8Y2U/KEQrPTIsQmU9''@;'; put 'put ''cmUpOihaKz0yLEJlPWNlLHFlPUVlKSxudWxsIT09QmUmJmxyZShjLGwsYSxkLEJlLHFlLHYsTSkscmU9RDxoLmxlbmd0aD9oW0RdOm51bGwsY2U9WjxmLmxlbmd0aD9mW1pdOm51bGx9fShoLE0sdix2W2JvXSx2W2YrMV0sdltmKzFdPWZ1bmN0aW9uIFE3ZShjLGwsYSl7aWYobnVsbD09YXx8''@;'; put 'put ''IiI9PT1hKXJldHVybiB0cztjb25zdCBkPVtdLGg9bTIoYSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyljKGQsaFtmXSwhMCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGgpZm9yKGNvbnN0IGYgaW4gaCloLmhhc093blByb3BlcnR5KGYpJiZjKGQs''@;'; put 'put ''ZixoW2ZdKTtlbHNlInN0cmluZyI9PXR5cGVvZiBoJiZsKGQsaCk7cmV0dXJuIGR9KGMsbCxhKSxkLGYpfX0oXzAsYXAsWWwoZGkoKSxjLGwsYSksITApfWZ1bmN0aW9uIGRlKGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj13bytjLE09aFtib10sRD1mLmZpcnN0Q3JlYXRlUGFzcz9m''@;'; put 'put ''dW5jdGlvbiBNOWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bC5jb25zdHMsRD1qNShsLGMsMixkLGQyKHYsaCkpO3JldHVybiB2UyhsLGEsRCxkMih2LGYpKSxudWxsIT09RC5hdHRycyYmQ2IoRCxELmF0dHJzLCExKSxudWxsIT09RC5tZXJnZWRBdHRycyYmQ2IoRCxELm1lcmdlZEF0dHJzLCEw''@;'; put 'put ''KSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsRCksRH0odixmLGgsbCxhLGQpOmYuZGF0YVt2XSxaPWdyZShmLGgsRCxNLGwsYyk7aFt2XT1aO2NvbnN0IHJlPUowKEQpO3JldHVybiBoMihELCEwKSxDRChNLFosRCksIWZ1bmN0aW9uIEg4KGMpe3JldHVybiEo''@;'; put 'put ''MzImfmMuZmxhZ3MpfShEKSYmcTYoKSYmbDAoZixoLFosRCksMD09PWZ1bmN0aW9uIHVWKCl7cmV0dXJuIENvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudH0oKSYmanUoWixoKSxmdW5jdGlvbiBkVigpe0NvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCsrfSgpLHJlJiYocFMoZixoLEQpLGZT''@;'; put 'put ''KGYsRCxoKSksbnVsbCE9PWQmJmdTKGgsRCksZGV9ZnVuY3Rpb24gaGUoKXtsZXQgYz11bCgpO2lDKCk/YUMoKTooYz1jLnBhcmVudCxoMihjLCExKSk7Y29uc3QgbD1jOyhmdW5jdGlvbiBoVihjKXtyZXR1cm4gQ28uc2tpcEh5ZHJhdGlvblJvb3RUTm9kZT09PWN9KShsKSYmZnVuY3Rpb24g''@;'; put 'put ''bVYoKXtDby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPW51bGx9KCksZnVuY3Rpb24gZWsoKXtDby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQtLX0oKTtjb25zdCBhPWxzKCk7cmV0dXJuIGEuZmlyc3RDcmVhdGVQYXNzJiYoUnYoYSxjKSxydShjKSYmYS5xdWVyaWVzLmVsZW1lbnRFbmQoYykp''@;'; put 'put ''LG51bGwhPWwuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBrVihjKXtyZXR1cm4hISg4JmMuZmxhZ3MpfShsKSYmaGgoYSxsLGRpKCksbC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPWwuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIERWKGMpe3JldHVybiEhKDE2JmMuZmxh''@;'; put 'put ''Z3MpfShsKSYmaGgoYSxsLGRpKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSksaGV9ZnVuY3Rpb24gR3QoYyxsLGEsZCl7cmV0dXJuIGRlKGMsbCxhLGQpLGhlKCksR3R9bGV0IGdyZT0oYyxsLGEsZCxoLGYpPT4oZjIoITApLHo0KGQsaCxmdW5jdGlvbiBzaygpe3JldHVybiBDby5sRnJhbWUu''@;'; put 'put ''Y3VycmVudE5hbWVzcGFjZX0oKSkpO2Z1bmN0aW9uIHNpKGMsbCxhKXtjb25zdCBkPWRpKCksaD1scygpLGY9Yyt3byx2PWguZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIFQ5ZShjLGwsYSxkLGgpe2NvbnN0IGY9bC5jb25zdHMsdj1kMihmLGQpLE09ajUobCxjLDgsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''dik7cmV0dXJuIG51bGwhPT12JiZDYihNLHYsITApLHZTKGwsYSxNLGQyKGYsaCkpLG51bGwhPT1sLnF1ZXJpZXMmJmwucXVlcmllcy5lbGVtZW50U3RhcnQobCxNKSxNfShmLGgsZCxsLGEpOmguZGF0YVtmXTtoMih2LCEwKTtjb25zdCBNPW1yZShoLGQsdixjKTtyZXR1cm4gZFtmXT1NLHE2''@;'; put 'put ''KCkmJmwwKGgsZCxNLHYpLGp1KE0sZCksSjAodikmJihwUyhoLGQsdiksZlMoaCx2LGQpKSxudWxsIT1hJiZnUyhkLHYpLHNpfWZ1bmN0aW9uIGxpKCl7bGV0IGM9dWwoKTtjb25zdCBsPWxzKCk7cmV0dXJuIGlDKCk/YUMoKTooYz1jLnBhcmVudCxoMihjLCExKSksbC5maXJzdENyZWF0ZVBh''@;'; put 'put ''c3MmJihSdihsLGMpLHJ1KGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksbGl9ZnVuY3Rpb24gRmwoYyxsLGEpe3JldHVybiBzaShjLGwsYSksbGkoKSxGbH1sZXQgbXJlPShjLGwsYSxkKT0+KGYyKCEwKSxlUyhsW2JvXSwiIikpO2Z1bmN0aW9uIExuKCl7cmV0dXJuIGRpKCl9ZnVuY3Rp''@;'; put 'put ''b24gb3AoYyxsLGEpe2NvbnN0IGQ9ZGkoKTtyZXR1cm4gQmMoZCxhaCgpLGwpJiZGMChscygpLFFzKCksZCxjLGwsZFtib10sYSwhMCksb3B9ZnVuY3Rpb24gbFUoYyxsLGEpe2NvbnN0IGQ9ZGkoKTtpZihCYyhkLGFoKCksbCkpe2NvbnN0IGY9bHMoKSx2PVFzKCk7RjAoZix2LGQsYyxsLFc0''@;'; put 'put ''KHNDKGYuZGF0YSksdixkKSxhLCEwKX1yZXR1cm4gbFV9Y29uc3Qgajg9dm9pZCAwO3ZhciBJOWU9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxqOF0sW1siQU0iLCJQTSJdLGo4LGo4XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQi''@;'; put 'put ''LCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxqOCxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwi''@;'; put 'put ''QSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2Vw''@;'; put 'put ''dGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sajgsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6''@;'; put 'put ''bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixqOCwiezF9ICdhdCcgezB9IixqOF0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMs''@;'; put 'put ''IyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJVU0QiLCIkIiwiVVMgRG9sbGFyIix7fSwibHRyIixmdW5jdGlvbiBEOWUoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1h''@;'; put 'put ''JiYwPT09ZD8xOjV9XTtsZXQgVWI9e307ZnVuY3Rpb24gbzEoYyl7Y29uc3QgbD1mdW5jdGlvbiBMOWUoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9YnJlKGwpO2lmKGEpcmV0dXJuIGE7Y29uc3QgZD1sLnNwbGl0KCItIilbMF07aWYoYT1i''@;'; put 'put ''cmUoZCksYSlyZXR1cm4gYTtpZigiZW4iPT09ZClyZXR1cm4gSTllO3Rocm93IG5ldyBRbig3MDEsITEpfWZ1bmN0aW9uIGJyZShjKXtyZXR1cm4gYyBpbiBVYnx8KFViW2NdPVZ0Lm5nJiZWdC5uZy5jb21tb24mJlZ0Lm5nLmNvbW1vbi5sb2NhbGVzJiZWdC5uZy5jb21tb24ubG9jYWxlc1tj''@;'; put 'put ''XSksVWJbY119dmFyIGVjPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTG9jYWxlSWQ9MF09IkxvY2FsZUlkIixjW2MuRGF5UGVyaW9kc0Zvcm1hdD0xXT0iRGF5UGVyaW9kc0Zvcm1hdCIsY1tjLkRheVBlcmlvZHNTdGFuZGFsb25lPTJdPSJEYXlQZXJpb2RzU3RhbmRhbG9uZSIsY1tjLkRheXNG''@;'; put 'put ''b3JtYXQ9M109IkRheXNGb3JtYXQiLGNbYy5EYXlzU3RhbmRhbG9uZT00XT0iRGF5c1N0YW5kYWxvbmUiLGNbYy5Nb250aHNGb3JtYXQ9NV09Ik1vbnRoc0Zvcm1hdCIsY1tjLk1vbnRoc1N0YW5kYWxvbmU9Nl09Ik1vbnRoc1N0YW5kYWxvbmUiLGNbYy5FcmFzPTddPSJFcmFzIixjW2MuRmly''@;'; put 'put ''c3REYXlPZldlZWs9OF09IkZpcnN0RGF5T2ZXZWVrIixjW2MuV2Vla2VuZFJhbmdlPTldPSJXZWVrZW5kUmFuZ2UiLGNbYy5EYXRlRm9ybWF0PTEwXT0iRGF0ZUZvcm1hdCIsY1tjLlRpbWVGb3JtYXQ9MTFdPSJUaW1lRm9ybWF0IixjW2MuRGF0ZVRpbWVGb3JtYXQ9MTJdPSJEYXRlVGltZUZv''@;'; put 'put ''cm1hdCIsY1tjLk51bWJlclN5bWJvbHM9MTNdPSJOdW1iZXJTeW1ib2xzIixjW2MuTnVtYmVyRm9ybWF0cz0xNF09Ik51bWJlckZvcm1hdHMiLGNbYy5DdXJyZW5jeUNvZGU9MTVdPSJDdXJyZW5jeUNvZGUiLGNbYy5DdXJyZW5jeVN5bWJvbD0xNl09IkN1cnJlbmN5U3ltYm9sIixjW2MuQ3Vy''@;'; put 'put ''cmVuY3lOYW1lPTE3XT0iQ3VycmVuY3lOYW1lIixjW2MuQ3VycmVuY2llcz0xOF09IkN1cnJlbmNpZXMiLGNbYy5EaXJlY3Rpb25hbGl0eT0xOV09IkRpcmVjdGlvbmFsaXR5IixjW2MuUGx1cmFsQ2FzZT0yMF09IlBsdXJhbENhc2UiLGNbYy5FeHRyYURhdGE9MjFdPSJFeHRyYURhdGEiLGN9''@;'; put 'put ''KGVjfHx7fSk7Y29uc3QgWmI9ImVuLVVTIjtsZXQgeXJlPVpiO2Z1bmN0aW9uIEZ0KGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj11bCgpO3JldHVybiBoVShmLGgsaFtib10sdixjLGwsZCksRnR9ZnVuY3Rpb24gZFUoYyxsKXtjb25zdCBhPXVsKCksZD1kaSgpLGg9bHMoKTtyZXR1''@;'; put 'put ''cm4gaFUoaCxkLFc0KHNDKGguZGF0YSksYSxkKSxhLGMsbCksZFV9ZnVuY3Rpb24gaFUoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1KMChkKSxaPWMuZmlyc3RDcmVhdGVQYXNzJiZwOChjKSxyZT1sW2NsXSxjZT1ORChsKTtsZXQgYmU9ITA7aWYoMyZkLnR5cGV8fHYpe2NvbnN0IHFlPUwwKGQs''@;'; put 'put ''bCkscnQ9dj92KHFlKTpxZSxwdD1jZS5sZW5ndGgsZHQ9dj92bj0+dihDbCh2bltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IEp0PW51bGw7aWYoIXYmJk0mJihKdD1mdW5jdGlvbiBrdmUoYyxsLGEsZCl7Y29uc3QgaD1jLmNsZWFudXA7aWYobnVsbCE9aClmb3IobGV0IGY9MDtmPGgubGVuZ3Ro''@;'; put 'put ''LTE7Zis9Mil7Y29uc3Qgdj1oW2ZdO2lmKHY9PT1hJiZoW2YrMV09PT1kKXtjb25zdCBNPWxbWDBdLEQ9aFtmKzJdO3JldHVybiBNLmxlbmd0aD5EP01bRF06bnVsbH0ic3RyaW5nIj09dHlwZW9mIHYmJihmKz0yKX1yZXR1cm4gbnVsbH0oYyxsLGgsZC5pbmRleCkpLG51bGwhPT1KdCkoSnQu''@;'; put 'put ''X19uZ0xhc3RMaXN0ZW5lckZuX198fEp0KS5fX25nTmV4dExpc3RlbmVyRm5fXz1mLEp0Ll9fbmdMYXN0TGlzdGVuZXJGbl9fPWYsYmU9ITE7ZWxzZXtmPVlyZShkLGwscmUsZiwhMSk7Y29uc3Qgdm49YS5saXN0ZW4ocnQsaCxmKTtjZS5wdXNoKGYsdm4pLFomJloucHVzaChoLGR0LHB0LHB0''@;'; put 'put ''KzEpfX1lbHNlIGY9WXJlKGQsbCxyZSxmLCExKTtjb25zdCBFZT1kLm91dHB1dHM7bGV0IEJlO2lmKGJlJiZudWxsIT09RWUmJihCZT1FZVtoXSkpe2NvbnN0IHFlPUJlLmxlbmd0aDtpZihxZSlmb3IobGV0IHJ0PTA7cnQ8cWU7cnQrPTIpe2NvbnN0IENuPWxbQmVbcnRdXVtCZVtydCsxXV0u''@;'; put 'put ''c3Vic2NyaWJlKGYpLHRuPWNlLmxlbmd0aDtjZS5wdXNoKGYsQ24pLFomJloucHVzaChoLGQuaW5kZXgsdG4sLSh0bisxKSl9fX1mdW5jdGlvbiBXcmUoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7cmV0dXJuIHUyKDYsbCxhKSwhMSE9PWEoZCl9Y2F0Y2goZil7cmV0dXJuIHo1KGMs''@;'; put 'put ''ZiksITF9ZmluYWxseXt1Mig3LGwsYSksX2UoaCl9fWZ1bmN0aW9uIFlyZShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKHYpe2lmKHY9PT1GdW5jdGlvbilyZXR1cm4gZDt5OChjLmNvbXBvbmVudE9mZnNldD4tMT9PMShjLmluZGV4LGwpOmwpO2xldCBEPVdyZShsLGEsZCx2KSxaPWYu''@;'; put 'put ''X19uZ05leHRMaXN0ZW5lckZuX187Zm9yKDtaOylEPVdyZShsLGEsWix2KSYmRCxaPVouX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09RCYmdi5wcmV2ZW50RGVmYXVsdCgpLER9fWZ1bmN0aW9uIFJlKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIHdWKGMpe3JldHVybihDby5sRnJh''@;'; put 'put ''bWUuY29udGV4dExWaWV3PWZ1bmN0aW9uIHRDKGMsbCl7Zm9yKDtjPjA7KWw9bFtvMF0sYy0tO3JldHVybiBsfShjLENvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtjbF19KGMpfWZ1bmN0aW9uIER2ZShjLGwpe2xldCBhPW51bGw7Y29uc3QgZD1mdW5jdGlvbiBmdihjKXtjb25zdCBsPWMuYXR0''@;'; put 'put ''cnM7aWYobnVsbCE9bCl7Y29uc3QgYT1sLmluZGV4T2YoNSk7aWYoISgxJmEpKXJldHVybiBsW2ErMV19cmV0dXJuIG51bGx9KGMpO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWxbaF07aWYoIioiIT09Zil7aWYobnVsbD09PWQ/YjQoYyxmLCEwKTpOdyhkLGYpKXJldHVy''@;'; put 'put ''biBofWVsc2UgYT1ofXJldHVybiBhfWZ1bmN0aW9uIHNhKGMpe2NvbnN0IGw9ZGkoKVtabF1bcmNdO2lmKCFsLnByb2plY3Rpb24pe2NvbnN0IGQ9bC5wcm9qZWN0aW9uPWZ1bmN0aW9uIFFoKGMsbCl7Y29uc3QgYT1bXTtmb3IobGV0IGQ9MDtkPGM7ZCsrKWEucHVzaChsKTtyZXR1cm4gYX0o''@;'; put 'put ''Yz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IHY9Yz9EdmUoZixjKTowO251bGwhPT12JiYoaFt2XT9oW3ZdLnByb2plY3Rpb25OZXh0PWY6ZFt2XT1mLGhbdl09ZiksZj1mLm5leHR9fX1mdW5jdGlvbiBZcihjLGw9MCxh''@;'; put 'put ''KXtjb25zdCBkPWRpKCksaD1scygpLGY9ajUoaCx3bytjLDE2LG51bGwsYXx8bnVsbCk7bnVsbD09PWYucHJvamVjdGlvbiYmKGYucHJvamVjdGlvbj1sKSxhQygpLCghZFtudV18fF81KCkpJiYzMiZ+Zi5mbGFncyYmZnVuY3Rpb24gdGooYyxsLGEpe2JEKGxbYm9dLDAsbCxhLGFiKGMsYSxs''@;'; put 'put ''KSx1OChhLnBhcmVudHx8bFtyY10sYSxsKSl9KGgsZCxmKX1mdW5jdGlvbiBmTShjLGwsYSl7cmV0dXJuIGZVKGMsIiIsbCwiIixhKSxmTX1mdW5jdGlvbiBmVShjLGwsYSxkLGgpe2NvbnN0IGY9ZGkoKSx2PVlsKGYsbCxhLGQpO3JldHVybiB2IT09Um8mJkYwKGxzKCksUXMoKSxmLGMsdixm''@;'; put 'put ''W2JvXSxoLCExKSxmVX1mdW5jdGlvbiBhbyhjLGwsYSxkKXshZnVuY3Rpb24gYkkoYyxsLGEsZCl7Y29uc3QgaD1scygpO2lmKGguZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBmPXVsKCk7X0koaCxuZXcgcEkobCxhLGQpLGYuaW5kZXgpLGZ1bmN0aW9uIE96KGMsbCl7Y29uc3QgYT1jLmNvbnRl''@;'; put 'put ''bnRRdWVyaWVzfHwoYy5jb250ZW50UXVlcmllcz1bXSk7bCE9PShhLmxlbmd0aD9hW2EubGVuZ3RoLTFdOi0xKSYmYS5wdXNoKGMucXVlcmllcy5sZW5ndGgtMSxsKX0oaCxjKSwhKDImfmEpJiYoaC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9cmV0dXJuIG1JKGgsZGkoKSxhKX0oYyxsLGEs''@;'; put 'put ''ZCl9ZnVuY3Rpb24gcWEoYyxsLGEpeyFmdW5jdGlvbiB2SShjLGwsYSl7Y29uc3QgZD1scygpO3JldHVybiBkLmZpcnN0Q3JlYXRlUGFzcyYmKF9JKGQsbmV3IHBJKGMsbCxhKSwtMSksISgyJn5sKSYmKGQuc3RhdGljVmlld1F1ZXJpZXM9ITApKSxtSShkLGRpKCksbCl9KGMsbCxhKX1mdW5j''@;'; put 'put ''dGlvbiBDaShjKXtjb25zdCBsPWRpKCksYT1scygpLGQ9bEMoKTtCMyhkKzEpO2NvbnN0IGg9WVMoYSxkKTtpZihjLmRpcnR5JiZmdW5jdGlvbiBsVihjKXtyZXR1cm4hKDQmfmNbVWFdKX0obCk9PT0hKDImfmgubWV0YWRhdGEuZmxhZ3MpKXtpZihudWxsPT09aC5tYXRjaGVzKWMucmVzZXQo''@;'; put 'put ''W10pO2Vsc2V7Y29uc3QgZj13SShsLGQpO2MucmVzZXQoZix5ayksYy5ub3RpZnlPbkNoYW5nZXMoKX1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBTaSgpe3JldHVybiBmdW5jdGlvbiBJOChjLGwpe3JldHVybiBjW3VkXS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oZGkoKSxsQygpKX1mdW5j''@;'; put 'put ''dGlvbiBoYShjKXtyZXR1cm4gRTQoZnVuY3Rpb24gdlYoKXtyZXR1cm4gQ28ubEZyYW1lLmNvbnRleHRMVmlld30oKSx3bytjKX1mdW5jdGlvbiBMZShjLGw9IiIpe2NvbnN0IGE9ZGkoKSxkPWxzKCksaD1jK3dvLGY9ZC5maXJzdENyZWF0ZVBhc3M/ajUoZCxoLDEsbCxudWxsKTpkLmRhdGFb''@;'; put 'put ''aF0sdj11aWUoZCxhLGYsbCxjKTthW2hdPXYscTYoKSYmbDAoZCxhLHYsZiksaDIoZiwhMSl9bGV0IHVpZT0oYyxsLGEsZCxoKT0+KGYyKCEwKSxmdW5jdGlvbiBqNChjLGwpe3JldHVybiBjLmNyZWF0ZVRleHQobCl9KGxbYm9dLGQpKTtmdW5jdGlvbiB3cihjKXtyZXR1cm4gRHIoIiIsYywi''@;'; put 'put ''Iiksd3J9ZnVuY3Rpb24gRHIoYyxsLGEpe2NvbnN0IGQ9ZGkoKSxoPVlsKGQsYyxsLGEpO3JldHVybiBoIT09Um8mJnYyKGQsVnUoKSxoKSxEcn1mdW5jdGlvbiBVdShjLGwsYSxkLGgpe2NvbnN0IGY9ZGkoKSx2PWZ1bmN0aW9uIEdsKGMsbCxhLGQsaCxmKXtjb25zdCBNPXJwKGMsVGYoKSxh''@;'; put 'put ''LGgpO3JldHVybiBBZigyKSxNP2wrQ2EoYSkrZCtDYShoKStmOlJvfShmLGMsbCxhLGQsaCk7cmV0dXJuIHYhPT1SbyYmdjIoZixWdSgpLHYpLFV1fWZ1bmN0aW9uIFZmKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09ZGkoKSxEPWZ1bmN0aW9uIHl1KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgWj1G''@;'; put 'put ''YihjLFRmKCksYSxoLHYpO3JldHVybiBBZigzKSxaP2wrQ2EoYSkrZCtDYShoKStmK0NhKHYpK006Um99KE0sYyxsLGEsZCxoLGYsdik7cmV0dXJuIEQhPT1SbyYmdjIoTSxWdSgpLEQpLFZmfWZ1bmN0aW9uIEtJKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWRpKCkscmU9ZnVuY3Rpb24g''@;'; put 'put ''TWwoYyxsLGEsZCxoLGYsdixNLEQsWil7Y29uc3QgY2U9YmQoYyxUZigpLGEsaCx2LEQpO3JldHVybiBBZig0KSxjZT9sK0NhKGEpK2QrQ2EoaCkrZitDYSh2KStNK0NhKEQpK1o6Um99KFosYyxsLGEsZCxoLGYsdixNLEQpO3JldHVybiByZSE9PVJvJiZ2MihaLFZ1KCkscmUpLEtJfWZ1bmN0''@;'; put 'put ''aW9uIHBpKGMsbCxhKXtTSShsKSYmKGw9bCgpKTtjb25zdCBkPWRpKCk7cmV0dXJuIEJjKGQsYWgoKSxsKSYmRjAobHMoKSxRcygpLGQsYyxsLGRbYm9dLGEsITEpLHBpfWZ1bmN0aW9uIG1pKGMsbCl7Y29uc3QgYT1TSShjKTtyZXR1cm4gYSYmYy5zZXQobCksYX1mdW5jdGlvbiBnaShjLGwp''@;'; put 'put ''e2NvbnN0IGE9ZGkoKSxkPWxzKCksaD11bCgpO3JldHVybiBoVShkLGEsYVtib10saCxjLGwpLGdpfWZ1bmN0aW9uIHBVKGMsbCxhLGQsaCl7aWYoYz1ZaShjKSxBcnJheS5pc0FycmF5KGMpKWZvcihsZXQgZj0wO2Y8Yy5sZW5ndGg7ZisrKXBVKGNbZl0sbCxhLGQsaCk7ZWxzZXtjb25zdCBm''@;'; put 'put ''PWxzKCksdj1kaSgpLE09dWwoKTtsZXQgRD1fZihjKT9jOllpKGMucHJvdmlkZSk7Y29uc3QgWj1DdihjKSxyZT0xMDQ4NTc1Jk0ucHJvdmlkZXJJbmRleGVzLGNlPU0uZGlyZWN0aXZlU3RhcnQsYmU9TS5wcm92aWRlckluZGV4ZXM+PjIwO2lmKF9mKGMpfHwhYy5tdWx0aSl7Y29uc3QgRWU9''@;'; put 'put ''bmV3IFAxKFosaCxHZSksQmU9bVUoRCxsLGg/cmU6cmUrYmUsY2UpOy0xPT09QmU/KGhkKE52KE0sdiksZixEKSxnVShmLGMsbC5sZW5ndGgpLGwucHVzaChEKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVz''@;'; put 'put ''aChFZSksdi5wdXNoKEVlKSk6KGFbQmVdPUVlLHZbQmVdPUVlKX1lbHNle2NvbnN0IEVlPW1VKEQsbCxyZStiZSxjZSksQmU9bVUoRCxsLHJlLHJlK2JlKSxydD1CZT49MCYmYVtCZV07aWYoaCYmIXJ0fHwhaCYmIShFZT49MCYmYVtFZV0pKXtoZChOdihNLHYpLGYsRCk7Y29uc3QgcHQ9ZnVu''@;'; put 'put ''Y3Rpb24gS3ZlKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgUDEoYyxhLEdlKTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCxtaWUoZixoLGQmJiFhKSxmfShoPyR2ZTpHdmUsYS5sZW5ndGgsaCxkLFopOyFoJiZydCYmKGFbQmVdLnByb3ZpZGVyRmFj''@;'; put 'put ''dG9yeT1wdCksZ1UoZixjLGwubGVuZ3RoLDApLGwucHVzaChEKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChwdCksdi5wdXNoKHB0KX1lbHNlIGdVKGYsYyxFZT4tMT9FZTpCZSxtaWUoYVtoP0JlOkVl''@;'; put 'put ''XSxaLCFoJiZkKSk7IWgmJmQmJnJ0JiZhW0JlXS5jb21wb25lbnRQcm92aWRlcnMrK319fWZ1bmN0aW9uIGdVKGMsbCxhLGQpe2NvbnN0IGg9X2YobCksZj1mdW5jdGlvbiBQNihjKXtyZXR1cm4hIWMudXNlQ2xhc3N9KGwpO2lmKGh8fGYpe2NvbnN0IEQ9KGY/WWkobC51c2VDbGFzcyk6bCku''@;'; put 'put ''cHJvdG90eXBlLm5nT25EZXN0cm95O2lmKEQpe2NvbnN0IFo9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IHJlPVouaW5kZXhPZihhKTstMT09PXJlP1oucHVzaChhLFtkLERdKTpaW3JlKzFdLnB1c2goZCxEKX1lbHNlIFoucHVzaChh''@;'; put 'put ''LEQpfX19ZnVuY3Rpb24gbWllKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBtVShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09PT1jKXJldHVybiBoO3JldHVybi0xfWZ1bmN0aW9uIEd2ZShjLGws''@;'; put 'put ''YSxkKXtyZXR1cm4gdlUodGhpcy5tdWx0aSxbXSl9ZnVuY3Rpb24gJHZlKGMsbCxhLGQpe2NvbnN0IGg9dGhpcy5tdWx0aTtsZXQgZjtpZih0aGlzLnByb3ZpZGVyRmFjdG9yeSl7Y29uc3Qgdj10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsTT1ENChhLGFbS2ldLHRo''@;'; put 'put ''aXMucHJvdmlkZXJGYWN0b3J5LmluZGV4LGQpO2Y9TS5zbGljZSgwLHYpLHZVKGgsZik7Zm9yKGxldCBEPXY7RDxNLmxlbmd0aDtEKyspZi5wdXNoKE1bRF0pfWVsc2UgZj1bXSx2VShoLGYpO3JldHVybiBmfWZ1bmN0aW9uIHZVKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspbC5w''@;'; put 'put ''dXNoKCgwLGNbYV0pKCkpO3JldHVybiBsfWZ1bmN0aW9uIGRhKGMsbD1bXSl7cmV0dXJuIGE9PnthLnByb3ZpZGVyc1Jlc29sdmVyPShkLGgpPT5mdW5jdGlvbiBZdmUoYyxsLGEpe2NvbnN0IGQ9bHMoKTtpZihkLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgaD1WYyhjKTtwVShhLGQuZGF0YSxk''@;'; put 'put ''LmJsdWVwcmludCxoLCEwKSxwVShsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWxldCBxdmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFs''@;'; put 'put ''b25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBkPXJoKDAsYS50eXBlKSxoPWQubGVuZ3RoPjA/RzQoW2RdLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9XWApOm51''@;'; put 'put ''bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsaCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxseXt0aGlz''@;'; put 'put ''LmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46ImVudmlyb25tZW50IixmYWN0b3J5OigpPT5uZXcgYyh4cihoYykpfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBxSShjKXtiMigiTmdTdGFuZGFsb25lIiksYy5n''@;'; put 'put ''ZXRTdGFuZGFsb25lSW5qZWN0b3I9bD0+bC5nZXQocXZlKS5nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihjKX1mdW5jdGlvbiBHcyhjLGwsYSl7Y29uc3QgZD1PMCgpK2MsaD1kaSgpO3JldHVybiBoW2RdPT09Um8/eTIoaCxkLGE/bC5jYWxsKGEpOmwoKSk6ZnVuY3Rpb24gQWMoYyxs''@;'; put 'put ''KXtyZXR1cm4gY1tsXX0oaCxkKX1mdW5jdGlvbiBzcChjLGwsYSxkKXtyZXR1cm4gYmllKGRpKCksTzAoKSxjLGwsYSxkKX1mdW5jdGlvbiBscChjLGwsYSxkLGgpe3JldHVybiB5aWUoZGkoKSxPMCgpLGMsbCxhLGQsaCl9ZnVuY3Rpb24gcE0oYyxsLGEsZCxoLGYpe3JldHVybiBfaWUoZGko''@;'; put 'put ''KSxPMCgpLGMsbCxhLGQsaCxmKX1mdW5jdGlvbiBKSShjLGwsYSxkLGgsZix2KXtyZXR1cm4gZnVuY3Rpb24gd2llKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWwrYTtyZXR1cm4gYmQoYyxaLGgsZix2LE0pP3kyKGMsWis0LEQ/ZC5jYWxsKEQsaCxmLHYsTSk6ZChoLGYsdixNKSk6Z00o''@;'; put 'put ''YyxaKzQpfShkaSgpLE8wKCksYyxsLGEsZCxoLGYsdil9ZnVuY3Rpb24gZ00oYyxsKXtjb25zdCBhPWNbbF07cmV0dXJuIGE9PT1Sbz92b2lkIDA6YX1mdW5jdGlvbiBiaWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bCthO3JldHVybiBCYyhjLHYsaCk/eTIoYyx2KzEsZj9kLmNhbGwoZixoKTpk''@;'; put 'put ''KGgpKTpnTShjLHYrMSl9ZnVuY3Rpb24geWllKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09bCthO3JldHVybiBycChjLE0saCxmKT95MihjLE0rMix2P2QuY2FsbCh2LGgsZik6ZChoLGYpKTpnTShjLE0rMil9ZnVuY3Rpb24gX2llKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1sK2E7cmV0dXJu''@;'; put 'put ''IEZiKGMsRCxoLGYsdik/eTIoYyxEKzMsTT9kLmNhbGwoTSxoLGYsdik6ZChoLGYsdikpOmdNKGMsRCszKX1mdW5jdGlvbiBlbChjLGwpe2NvbnN0IGE9bHMoKTtsZXQgZDtjb25zdCBoPWMrd287YS5maXJzdENyZWF0ZVBhc3M/KGQ9ZnVuY3Rpb24gaWJlKGMsbCl7aWYobClmb3IobGV0IGE9''@;'; put 'put ''bC5sZW5ndGgtMTthPj0wO2EtLSl7Y29uc3QgZD1sW2FdO2lmKGM9PT1kLm5hbWUpcmV0dXJuIGR9fShsLGEucGlwZVJlZ2lzdHJ5KSxhLmRhdGFbaF09ZCxkLm9uRGVzdHJveSYmKGEuZGVzdHJveUhvb2tzPz89W10pLnB1c2goaCxkLm9uRGVzdHJveSkpOmQ9YS5kYXRhW2hdO2NvbnN0IGY9''@;'; put 'put ''ZC5mYWN0b3J5fHwoZC5mYWN0b3J5PW11KGQudHlwZSkpLE09X2woR2UpO3RyeXtjb25zdCBEPUZ2KCExKSxaPWYoKTtyZXR1cm4gRnYoRCksZnVuY3Rpb24gT3ZlKGMsbCxhLGQpe2E+PWMuZGF0YS5sZW5ndGgmJihjLmRhdGFbYV09bnVsbCxjLmJsdWVwcmludFthXT1udWxsKSxsW2FdPWR9''@;'; put 'put ''KGEsZGkoKSxoLFopLFp9ZmluYWxseXtfbChNKX19ZnVuY3Rpb24gRGMoYyxsLGEpe2NvbnN0IGQ9Yyt3byxoPWRpKCksZj1FNChoLGQpO3JldHVybiBtTShoLGQpP2JpZShoLE8wKCksbCxmLnRyYW5zZm9ybSxhLGYpOmYudHJhbnNmb3JtKGEpfWZ1bmN0aW9uIHo4KGMsbCxhLGQpe2NvbnN0''@;'; put 'put ''IGg9Yyt3byxmPWRpKCksdj1FNChmLGgpO3JldHVybiBtTShmLGgpP3lpZShmLE8wKCksbCx2LnRyYW5zZm9ybSxhLGQsdik6di50cmFuc2Zvcm0oYSxkKX1mdW5jdGlvbiBiVShjLGwsYSxkLGgpe2NvbnN0IGY9Yyt3byx2PWRpKCksTT1FNCh2LGYpO3JldHVybiBtTSh2LGYpP19pZSh2LE8w''@;'; put 'put ''KCksbCxNLnRyYW5zZm9ybSxhLGQsaCxNKTpNLnRyYW5zZm9ybShhLGQsaCl9ZnVuY3Rpb24gbU0oYyxsKXtyZXR1cm4gY1tLaV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIEljKGMsbCl7cmV0dXJuIGZiKGMsbCl9Y2xhc3MgYk17Y29uc3RydWN0b3IobCl7dGhpcy5mdWxsPWw7Y29uc3QgYT1s''@;'; put 'put ''LnNwbGl0KCIuIik7dGhpcy5tYWpvcj1hWzBdLHRoaXMubWlub3I9YVsxXSx0aGlzLnBhdGNoPWEuc2xpY2UoMikuam9pbigiLiIpfX1jb25zdCBOaWU9bmV3IGJNKCIxNy4zLjEyIik7bGV0IFZpZT0oKCk9PntjbGFzcyBje2xvZyhhKXtjb25zb2xlLmxvZyhhKX13YXJuKGEpe2NvbnNvbGUu''@;'; put 'put ''d2FybihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgWmllPW5l''@;'; put 'put ''dyBTdCgiIiksdFI9bmV3IFN0KCIiKTtsZXQgRVUsTVU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5yZWdpc3RyeT1kLHRoaXMuX3BlbmRpbmdDb3VudD0wLHRoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy50''@;'; put 'put ''YXNrVHJhY2tpbmdab25lPW51bGwsRVV8fChmdW5jdGlvbiBRYmUoYyl7RVU9Y30oaCksaC5hZGRUb1dpbmRvdyhkKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksYS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50Lmdl''@;'; put 'put ''dCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUu''@;'; put 'put ''b25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57V2EuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX0pfX0pfSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9wZW5kaW5nQ291bnR9ZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRocm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBi''@;'; put 'put ''ZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9aXNTdGFibGUoKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfV9y''@;'; put 'put ''dW5DYWxsYmFja3NJZlJlYWR5KCl7aWYodGhpcy5pc1N0YWJsZSgpKXF1ZXVlTWljcm90YXNrKCgpPT57Zm9yKDswIT09dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDspe2xldCBhPXRoaXMuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoYS50aW1lb3V0SWQpLGEuZG9uZUNiKCl9fSk7ZWxz''@;'; put 'put ''ZXtsZXQgYT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGQ9PiFkLnVwZGF0ZUNifHwhZC51cGRhdGVDYihhKXx8KGNsZWFyVGltZW91dChkLnRpbWVvdXRJZCksITEpKX19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''dGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoYT0+KHtzb3VyY2U6YS5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjphLmNyZWF0aW9uTG9jYXRpb24sZGF0YTphLmRhdGF9KSk6W119YWRkQ2FsbGJhY2soYSxkLGgpe2xldCBmPS0xO2QmJmQ+MCYm''@;'; put 'put ''KGY9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKHY9PnYudGltZW91dElkIT09ZiksYSgpfSxkKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjphLHRpbWVvdXRJZDpmLHVwZGF0ZUNiOmh9KX13aGVuU3RhYmxlKGEsZCxoKXtpZiho''@;'; put 'put ''JiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmciIGxvYWRlZD8n''@;'; put 'put ''KTt0aGlzLmFkZENhbGxiYWNrKGEsZCxoKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9Z2V0UGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9cmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGljYXRpb24oYSx0''@;'; put 'put ''aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGQsaCl7cmV0dXJuW119c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoV2EpLHhyKHhVKSx4''@;'; put 'put ''cih0UikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpLHhVPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGEsZCl7dGhp''@;'; put 'put ''cy5fYXBwbGljYXRpb25zLnNldChhLGQpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGEpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eShhKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''YXBwbGljYXRpb25zLmdldChhKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5k''@;'; put 'put ''VGVzdGFiaWxpdHlJblRyZWUoYSxkPSEwKXtyZXR1cm4gRVU/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGEsZCk/P251bGx9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIF9NKGMpe3JldHVybiEhYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudGhlbn1mdW5jdGlvbiBXaWUoYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9''@;'; put 'put ''Y29uc3QgVFU9bmV3IFN0KCIiKTtsZXQgQVU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29sdmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJ''@;'; put 'put ''bml0cz1maShUVSx7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgoKTtpZihfTShmKSlhLnB1c2goZik7ZWxzZSBpZihXaWUoZikpe2Nv''@;'; put 'put ''bnN0IHY9bmV3IFByb21pc2UoKE0sRCk9PntmLnN1YnNjcmliZSh7Y29tcGxldGU6TSxlcnJvcjpEfSl9KTthLnB1c2godil9fWNvbnN0IGQ9KCk9Pnt0aGlzLmRvbmU9ITAsdGhpcy5yZXNvbHZlKCl9O1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PntkKCl9KS5jYXRjaChoPT57dGhpcy5yZWpl''@;'; put 'put ''Y3QoaCl9KSwwPT09YS5sZW5ndGgmJmQoKSx0aGlzLmluaXRpYWxpemVkPSEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoi''@;'; put 'put ''cm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGtVPW5ldyBTdCgiIik7ZnVuY3Rpb24gJGllKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5yZWR1Y2UoJGllLGMpOnsuLi5jLC4uLmx9fWxldCBxND0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYm9vdHN0cmFwTGlz''@;'; put 'put ''dGVuZXJzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuaW50ZXJuYWxFcnJvckhhbmRsZXI9ZmkodmspLHRoaXMuYWZ0ZXJSZW5kZXJFZmZlY3RNYW5hZ2VyPWZpKEU4KSx0aGlz''@;'; put 'put ''LmV4dGVybmFsVGVzdFZpZXdzPW5ldyBTZXQsdGhpcy5iZWZvcmVSZW5kZXI9bmV3IFduLHRoaXMuYWZ0ZXJUaWNrPW5ldyBXbix0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLmlzU3RhYmxlPWZpKFBmKS5oYXNQZW5kaW5nVGFza3MucGlwZShMcihhPT4h''@;'; put 'put ''YSkpLHRoaXMuX2luamVjdG9yPWZpKGhjKX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1hIGluc3RhbmNlb2YgUUQ7aWYoIXRoaXMuX2luamVjdG9yLmdldChB''@;'; put 'put ''VSkuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBuMihjKXtjb25zdCBsPVZvKGMpfHx4YyhjKXx8ZXUoYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBRbig0MDUsITEpO2xldCB2O3Y9aD9hOnRoaXMuX2luamVjdG9yLmdldChXNSkucmVzb2x2ZUNvbXBvbmVudEZhY3Rv''@;'; put 'put ''cnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHYuY29tcG9uZW50VHlwZSk7Y29uc3QgTT1mdW5jdGlvbiBleWUoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfSh2KT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KG5wKSxaPXYuY3JlYXRlKERzLk5VTEwsW10sZHx8di5zZWxlY3Rv''@;'; put 'put ''cixNKSxyZT1aLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsY2U9Wi5pbmplY3Rvci5nZXQoWmllLG51bGwpO3JldHVybiBjZT8ucmVnaXN0ZXJBcHBsaWNhdGlvbihyZSksWi5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoWi5ob3N0VmlldyksblIodGhpcy5jb21wb25lbnRzLFopLGNl''@;'; put 'put ''Py51bnJlZ2lzdGVyQXBwbGljYXRpb24ocmUpfSksdGhpcy5fbG9hZENvbXBvbmVudChaKSxafXRpY2soKXt0aGlzLl90aWNrKCEwKX1fdGljayhhKXtpZih0aGlzLl9ydW5uaW5nVGljayl0aHJvdyBuZXcgUW4oMTAxLCExKTtjb25zdCBkPV9lKG51bGwpO3RyeXt0aGlzLl9ydW5uaW5nVGlj''@;'; put 'put ''az0hMCx0aGlzLmRldGVjdENoYW5nZXNJbkF0dGFjaGVkVmlld3MoYSl9Y2F0Y2goaCl7dGhpcy5pbnRlcm5hbEVycm9ySGFuZGxlcihoKX1maW5hbGx5e3RoaXMuYWZ0ZXJUaWNrLm5leHQoKSx0aGlzLl9ydW5uaW5nVGljaz0hMSxfZShkKX19ZGV0ZWN0Q2hhbmdlc0luQXR0YWNoZWRWaWV3''@;'; put 'put ''cyhhKXtsZXQgZD0wO2NvbnN0IGg9dGhpcy5hZnRlclJlbmRlckVmZmVjdE1hbmFnZXI7Zm9yKDs7KXtpZihkPT09akQpdGhyb3cgbmV3IFFuKDEwMywhMSk7aWYoYSl7Y29uc3QgZj0wPT09ZDt0aGlzLmJlZm9yZVJlbmRlci5uZXh0KGYpO2ZvcihsZXR7X2xWaWV3OnYsbm90aWZ5RXJyb3JI''@;'; put 'put ''YW5kbGVyOk19b2YgdGhpcy5fdmlld3MpbnllKHYsZixNKX1pZihkKyssaC5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKSwhWy4uLnRoaXMuZXh0ZXJuYWxUZXN0Vmlld3Mua2V5cygpLC4uLnRoaXMuX3ZpZXdzXS5zb21lKCh7X2xWaWV3OmZ9KT0+RFUoZikpJiYoaC5leGVjdXRlKCksIVsu''@;'; put 'put ''Li50aGlzLmV4dGVybmFsVGVzdFZpZXdzLmtleXMoKSwuLi50aGlzLl92aWV3c10uc29tZSgoe19sVmlldzpmfSk9PkRVKGYpKSkpYnJlYWt9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2Nv''@;'; put 'put ''bnN0IGQ9YTtuUih0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoa1UsW10pO1su''@;'; put 'put ''Li50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMsLi4uZF0uZm9yRWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ry''@;'; put 'put ''b3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT5uUih0aGlz''@;'; put 'put ''Ll9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3''@;'; put 'put ''cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpO2Z1bmN0aW9uIG5SKGMsbCl7Y29uc3QgYT1jLmluZGV4T2YobCk7YT4tMSYmYy5zcGxpY2UoYSwxKX1mdW5jdGlvbiBueWUoYyxsLGEpeyFsJiYhRFUoYyl8fGZ1bmN0aW9uIHJ5ZShjLGwsYSl7bGV0IGQ7YT8oZD0wLGNbVWFdfD0xMDI0KTpkPTY0JmNbVWFdPzA6MSxoYihjLGwsZCl9''@;'; put 'put ''KGMsYSxsKX1mdW5jdGlvbiBEVShjKXtyZXR1cm4gVHYoYyl9Y2xhc3MgaXlle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uZ01vZHVsZUZhY3Rvcnk9bCx0aGlzLmNvbXBvbmVudEZhY3Rvcmllcz1hfX1sZXQgS2llPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJuIG5l''@;'; put 'put ''dyBMYihhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9RjEoUHUoYSkuZGVj''@;'; put 'put ''bGFyYXRpb25zKS5yZWR1Y2UoKHYsTSk9Pntjb25zdCBEPVZvKE0pO3JldHVybiBEJiZ2LnB1c2gobmV3IGs4KEQpKSx2fSxbXSk7cmV0dXJuIG5ldyBpeWUoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb21w''@;'; put 'put ''aWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxlSWQoYSl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLHN5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy56b25lPWZpKFdhKSx0aGlzLmFwcGxpY2F0aW9uUmVmPWZpKHE0KX1pbml0aWFsaXplKCl7dGhpcy5fb25NaWNyb3Rhc2tF''@;'; put 'put ''bXB0eVN1YnNjcmlwdGlvbnx8KHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy56b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy56b25lLnJ1bigoKT0+e3RoaXMuYXBwbGljYXRpb25SZWYudGljaygpfSl9fSkpfW5nT25EZXN0cm95''@;'; put 'put ''KCl7dGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3Zp''@;'; put 'put ''ZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBseWUoKXtjb25zdCBjPWZpKFdhKSxsPWZpKGcyKTtyZXR1cm4gYT0+Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bC5oYW5kbGVFcnJvcihhKSl9bGV0IHV5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb249bmV3IHF0LHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy56b25lPWZpKFdhKSx0aGlzLnBlbmRpbmdUYXNrcz1maShQZil9aW5pdGlhbGl6ZSgpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuaW5pdGlhbGl6ZWQ9ITA7bGV0IGE9bnVsbDshdGhpcy56b25lLmlzU3Rh''@;'; put 'put ''YmxlJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYoYT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKSksdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuem9uZS5v''@;'; put 'put ''blN0YWJsZS5zdWJzY3JpYmUoKCk9PntXYS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PntudWxsIT09YSYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyYmKHRoaXMucGVuZGluZ1Rhc2tz''@;'; put 'put ''LnJlbW92ZShhKSxhPW51bGwpfSl9KSl9KSx0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgpPT57V2EuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLGE/Pz10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9uLnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29u''@;'; put 'put ''c3QgQmY9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5maShCZixyYS5PcHRpb25hbHxyYS5Ta2lwU2VsZil8fGZ1bmN0aW9uIGR5ZSgpe3JldHVybiB0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxvY2FsaXplLmxvY2FsZXx8WmJ9KCl9KSxJVT1uZXcgU3QoIiIpO2xl''@;'; put 'put ''dCBRaWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9Ym9vdHN0cmFwTW9kdWxlRmFjdG9yeShhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gaUkoYz0i''@;'; put 'put ''em9uZS5qcyIsbCl7cmV0dXJuIm5vb3AiPT09Yz9uZXcgckk6InpvbmUuanMiPT09Yz9uZXcgV2EobCk6Y30oZD8ubmdab25lLGZ1bmN0aW9uIEppZShjKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENv''@;'; put 'put ''YWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpkPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSkpO3JldHVybiBoLnJ1bigo''@;'; put 'put ''KT0+e2NvbnN0IGY9ZnVuY3Rpb24gRkkoYyxsLGEpe3JldHVybiBuZXcgUmIoYyxsLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBYaWUoYyl7cmV0dXJuW3twcm92aWRlOldhLHVzZUZhY3Rvcnk6Y30se3Byb3ZpZGU6dDIsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+''@;'; put 'put ''e2NvbnN0IGw9Zmkoc3llLHtvcHRpb25hbDohMH0pO3JldHVybigpPT5sLmluaXRpYWxpemUoKX19LHtwcm92aWRlOnQyLG11bHRpOiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPWZpKHV5ZSk7cmV0dXJuKCk9PntsLmluaXRpYWxpemUoKX19fSx7cHJvdmlkZTp2ayx1c2VGYWN0b3J5Omx5''@;'; put 'put ''ZX1dfSgoKT0+aCkpLHY9Zi5pbmplY3Rvci5nZXQoZzIsbnVsbCk7cmV0dXJuIGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBNPWgub25FcnJvci5zdWJzY3JpYmUoe25leHQ6RD0+e3YuaGFuZGxlRXJyb3IoRCl9fSk7Zi5vbkRlc3Ryb3koKCk9PntuUih0aGlzLl9tb2R1bGVzLGYp''@;'; put 'put ''LE0udW5zdWJzY3JpYmUoKX0pfSksZnVuY3Rpb24gR2llKGMsbCxhKXt0cnl7Y29uc3QgZD1hKCk7cmV0dXJuIF9NKGQpP2QuY2F0Y2goaD0+e3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoaCkpLGh9KTpkfWNhdGNoKGQpe3Rocm93IGwucnVuT3V0c2lkZUFu''@;'; put 'put ''Z3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoZCkpLGR9fSh2LGgsKCk9Pntjb25zdCBNPWYuaW5qZWN0b3IuZ2V0KEFVKTtyZXR1cm4gTS5ydW5Jbml0aWFsaXplcnMoKSxNLmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbiBfcmUoYyl7InN0cmluZyI9PXR5cGVvZiBjJiYoeXJlPWMudG9M''@;'; put 'put ''b3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSl9KGYuaW5qZWN0b3IuZ2V0KEJmLFpiKXx8WmIpLHRoaXMuX21vZHVsZURvQm9vdHN0cmFwKGYpLGYpKX0pfSl9Ym9vdHN0cmFwTW9kdWxlKGEsZD1bXSl7Y29uc3QgaD0kaWUoe30sZCk7cmV0dXJuIGZ1bmN0aW9uIG95ZShjLGwsYSl7Y29u''@;'; put 'put ''c3QgZD1uZXcgTGIoYSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShkKX0oMCwwLGEpLnRoZW4oZj0+dGhpcy5ib290c3RyYXBNb2R1bGVGYWN0b3J5KGYsaCkpfV9tb2R1bGVEb0Jvb3RzdHJhcChhKXtjb25zdCBkPWEuaW5qZWN0b3IuZ2V0KHE0KTtpZihhLl9ib290c3RyYXBDb21wb25lbnRz''@;'; put 'put ''Lmxlbmd0aD4wKWEuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChoPT5kLmJvb3RzdHJhcChoKSk7ZWxzZXtpZighYS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBRbigtNDAzLCExKTthLmluc3RhbmNlLm5nRG9Cb290c3RyYXAoZCl9dGhpcy5fbW9kdWxlcy5wdXNoKGEp''@;'; put 'put ''fW9uRGVzdHJveShhKXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goYSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDQwNCwhMSk7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goZD0+''@;'; put 'put ''ZC5kZXN0cm95KCkpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChkPT5kKCkpO2NvbnN0IGE9dGhpcy5faW5qZWN0b3IuZ2V0KElVLG51bGwpO2EmJihhLmZvckVhY2goZD0+ZCgpKSxhLmNsZWFyKCkpLHRoaXMuX2Rlc3Ryb3llZD0hMH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2Rlc3Ryb3llZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihEcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxRNT1udWxsO2NvbnN0IGVhZT1uZXcgU3QoIiIpO2Z1bmN0aW9uIHRhZShjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IFN0KGQpO3JldHVybihmPVtdKT0+e2xldCB2PVJVKCk7aWYoIXZ8fHYuaW5qZWN0b3IuZ2V0KGVhZSwhMSkpe2NvbnN0IE09Wy4uLmEsLi4u''@;'; put 'put ''Zix7cHJvdmlkZTpoLHVzZVZhbHVlOiEwfV07Yz9jKE0pOmZ1bmN0aW9uIHB5ZShjKXtpZihRNSYmIVE1LmdldChlYWUsITEpKXRocm93IG5ldyBRbig0MDAsITEpOyhmdW5jdGlvbiBZaWUoKXshZnVuY3Rpb24gT2UoYyl7RGU9Y30oKCk9Pnt0aHJvdyBuZXcgUW4oNjAwLCExKX0pfSkoKSxR''@;'; put 'put ''NT1jO2NvbnN0IGw9Yy5nZXQoUWllKTsoZnVuY3Rpb24gcmFlKGMpe2MuZ2V0KFBrLG51bGwpPy5mb3JFYWNoKGE9PmEoKSl9KShjKX0oZnVuY3Rpb24gbmFlKGM9W10sbCl7cmV0dXJuIERzLmNyZWF0ZSh7bmFtZTpsLHByb3ZpZGVyczpbe3Byb3ZpZGU6RjYsdXNlVmFsdWU6InBsYXRmb3Jt''@;'; put 'put ''In0se3Byb3ZpZGU6SVUsdXNlVmFsdWU6bmV3IFNldChbKCk9PlE1PW51bGxdKX0sLi4uY119KX0oTSxkKSl9cmV0dXJuIGZ1bmN0aW9uIGd5ZShjKXtjb25zdCBsPVJVKCk7aWYoIWwpdGhyb3cgbmV3IFFuKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIFJVKCl7cmV0dXJuIFE1Py5n''@;'; put 'put ''ZXQoUWllKT8/bnVsbH1sZXQgRXM9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz12eWV9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB2eWUoYyl7cmV0dXJuIGZ1bmN0aW9uIGJ5ZShjLGwsYSl7aWYoRWYoYykmJiFhKXtjb25zdCBkPU8xKGMuaW5kZXgsbCk7cmV0''@;'; put 'put ''dXJuIG5ldyBfOChkLGQpfXJldHVybiA0NyZjLnR5cGU/bmV3IF84KGxbWmxdLGwpOm51bGx9KHVsKCksZGkoKSwhKDE2Jn5jKSl9Y2xhc3MgbGFle2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBPYihsKX1jcmVhdGUobCl7cmV0dXJuIG5ldyBTeWUobCl9fWNvbnN0IEN5ZT0o''@;'; put 'put ''YyxsKT0+bDtjbGFzcyBTeWV7Y29uc3RydWN0b3IobCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlz''@;'; put 'put ''Ll9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVs''@;'; put 'put ''bCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPWx8fEN5ZX1mb3JFYWNoSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9pdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0KWwoYSl9Zm9yRWFjaE9wZXJhdGlvbihsKXtsZXQgYT10aGlzLl9pdEhlYWQsZD10aGlz''@;'; put 'put ''Ll9yZW1vdmFsc0hlYWQsaD0wLGY9bnVsbDtmb3IoO2F8fGQ7KXtjb25zdCB2PSFkfHxhJiZhLmN1cnJlbnRJbmRleDx1YWUoZCxoLGYpP2E6ZCxNPXVhZSh2LGgsZiksRD12LmN1cnJlbnRJbmRleDtpZih2PT09ZCloLS0sZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGE9YS5fbmV4dCxudWxs''@;'; put 'put ''PT12LnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IFo9TS1oLHJlPUQtaDtpZihaIT1yZSl7Zm9yKGxldCBiZT0wO2JlPFo7YmUrKyl7Y29uc3QgRWU9YmU8Zi5sZW5ndGg/ZltiZV06ZltiZV09MCxCZT1FZStiZTtyZTw9QmUmJkJlPFomJihmW2JlXT1FZSsxKX1mW3Yu''@;'; put 'put ''cHJldmlvdXNJbmRleF09cmUtWn19TSE9PUQmJmwodixNLEQpfX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1hO2E9YS5fbmV4dFByZXZpb3VzKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9h''@;'; put 'put ''ZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaE1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0TW92ZWQpbChhKX1mb3JFYWNoUmVtb3ZlZEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcmVtb3Zh''@;'; put 'put ''bHNIZWFkO251bGwhPT1hO2E9YS5fbmV4dFJlbW92ZWQpbChhKX1mb3JFYWNoSWRlbnRpdHlDaGFuZ2UobCl7bGV0IGE7Zm9yKGE9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRJZGVudGl0eUNoYW5nZSlsKGEpfWRpZmYobCl7aWYobnVsbD09bCYmKGw9W10p''@;'; put 'put ''LCFPYihsKSl0aHJvdyBuZXcgUW4oOTAwLCExKTtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGgsZix2LGE9dGhpcy5faXRIZWFkLGQ9ITE7aWYoQXJyYXkuaXNBcnJheShsKSl7dGhpcy5sZW5ndGg9bC5sZW5n''@;'; put 'put ''dGg7Zm9yKGxldCBNPTA7TTx0aGlzLmxlbmd0aDtNKyspZj1sW01dLHY9dGhpcy5fdHJhY2tCeUZuKE0sZiksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCx2KT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxmLHYsTSkpLE9iamVjdC5pcyhhLml0ZW0sZil8fHRoaXMu''@;'; put 'put ''X2FkZElkZW50aXR5Q2hhbmdlKGEsZikpOihhPXRoaXMuX21pc21hdGNoKGEsZix2LE0pLGQ9ITApLGE9YS5fbmV4dH1lbHNlIGg9MCxmdW5jdGlvbiBReihjLGwpe2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspbChjW2FdKTtlbHNle2NvbnN0IGE9Y1tT''@;'; put 'put ''eW1ib2wuaXRlcmF0b3JdKCk7bGV0IGQ7Zm9yKDshKGQ9YS5uZXh0KCkpLmRvbmU7KWwoZC52YWx1ZSl9fShsLE09Pnt2PXRoaXMuX3RyYWNrQnlGbihoLE0pLG51bGwhPT1hJiZPYmplY3QuaXMoYS50cmFja0J5SWQsdik/KGQmJihhPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGEsTSx2LGgp''@;'; put 'put ''KSxPYmplY3QuaXMoYS5pdGVtLE0pfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShhLE0pKTooYT10aGlzLl9taXNtYXRjaChhLE0sdixoKSxkPSEwKSxhPWEuX25leHQsaCsrfSksdGhpcy5sZW5ndGg9aDtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoYSksdGhpcy5jb2xsZWN0aW9uPWwsdGhpcy5p''@;'; put 'put ''c0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkp''@;'; put 'put ''e2xldCBsO2ZvcihsPXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09bDtsPWwuX25leHRBZGRlZClsLnByZXZpb3VzSW5kZXg9bC5jdXJyZW50''@;'; put 'put ''SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLGw9dGhpcy5fbW92ZXNIZWFkO251bGwhPT1sO2w9bC5fbmV4dE1vdmVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGws''@;'; put 'put ''dGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2gobCxhLGQsaCl7bGV0IGY7cmV0dXJuIG51bGw9PT1sP2Y9dGhpcy5faXRUYWlsOihmPWwuX3By''@;'; put 'put ''ZXYsdGhpcy5fcmVtb3ZlKGwpKSxudWxsIT09KGw9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoZCxudWxsKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fcmVpbnNlcnRB''@;'; put 'put ''ZnRlcihsLGYsaCkpOm51bGwhPT0obD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGQsaCkpPyhPYmplY3QuaXMobC5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShsLGEpLHRoaXMuX21vdmVBZnRlcihsLGYsaCkpOmw9dGhp''@;'; put 'put ''cy5fYWRkQWZ0ZXIobmV3IE15ZShhLGQpLGYsaCksbH1fdmVyaWZ5UmVpbnNlcnRpb24obCxhLGQsaCl7bGV0IGY9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoZCxudWxsKTtyZXR1cm4gbnVsbCE9PWY/bD10aGlzLl9yZWluc2Vy''@;'; put 'put ''dEFmdGVyKGYsbC5fcHJldixoKTpsLmN1cnJlbnRJbmRleCE9aCYmKGwuY3VycmVudEluZGV4PWgsdGhpcy5fYWRkVG9Nb3ZlcyhsLGgpKSxsfV90cnVuY2F0ZShsKXtmb3IoO251bGwhPT1sOyl7Y29uc3QgYT1sLl9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKGwpKSxs''@;'; put 'put ''PWF9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVz''@;'; put 'put ''VGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1Rh''@;'; put 'put ''aWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIobCxhLGQpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUobCk7Y29uc3QgaD1sLl9wcmV2UmVtb3ZlZCxm''@;'; put 'put ''PWwuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09aD90aGlzLl9yZW1vdmFsc0hlYWQ9ZjpoLl9uZXh0UmVtb3ZlZD1mLG51bGw9PT1mP3RoaXMuX3JlbW92YWxzVGFpbD1oOmYuX3ByZXZSZW1vdmVkPWgsdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZFRvTW92ZXMobCxkKSxs''@;'; put 'put ''fV9tb3ZlQWZ0ZXIobCxhLGQpe3JldHVybiB0aGlzLl91bmxpbmsobCksdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZFRvTW92ZXMobCxkKSxsfV9hZGRBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKGwsYSxkKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9''@;'; put 'put ''PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9bDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bCxsfV9pbnNlcnRBZnRlcihsLGEsZCl7Y29uc3QgaD1udWxsPT09YT90aGlzLl9pdEhlYWQ6YS5fbmV4dDtyZXR1cm4gbC5fbmV4dD1oLGwuX3ByZXY9YSxu''@;'; put 'put ''dWxsPT09aD90aGlzLl9pdFRhaWw9bDpoLl9wcmV2PWwsbnVsbD09PWE/dGhpcy5faXRIZWFkPWw6YS5fbmV4dD1sLG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgY2FlKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dChsKSxsLmN1cnJlbnRJbmRl''@;'; put 'put ''eD1kLGx9X3JlbW92ZShsKXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpfV91bmxpbmsobCl7bnVsbCE9PXRoaXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKGwpO2NvbnN0IGE9bC5fcHJldixkPWwuX25leHQ7cmV0dXJuIG51''@;'; put 'put ''bGw9PT1hP3RoaXMuX2l0SGVhZD1kOmEuX25leHQ9ZCxudWxsPT09ZD90aGlzLl9pdFRhaWw9YTpkLl9wcmV2PWEsbH1fYWRkVG9Nb3ZlcyhsLGEpe3JldHVybiBsLnByZXZpb3VzSW5kZXg9PT1hfHwodGhpcy5fbW92ZXNUYWlsPW51bGw9PT10aGlzLl9tb3Zlc1RhaWw/dGhpcy5fbW92ZXNI''@;'; put 'put ''ZWFkPWw6dGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bCksbH1fYWRkVG9SZW1vdmFscyhsKXtyZXR1cm4gbnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmKHRoaXMuX3VubGlua2VkUmVjb3Jkcz1uZXcgY2FlKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudElu''@;'; put 'put ''ZGV4PW51bGwsbC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPWwsbC5fcHJldlJlbW92ZWQ9bnVsbCk6KGwuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFs''@;'; put 'put ''c1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1sKSxsfV9hZGRJZGVudGl0eUNoYW5nZShsLGEpe3JldHVybiBsLml0ZW09YSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hl''@;'; put 'put ''YWQ9bDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bCxsfX1jbGFzcyBNeWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNrQnlJZD1hLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5f''@;'; put 'put ''bmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0''@;'; put 'put ''TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3MgeHlle2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQobCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD1sLGwuX25leHREdXA9bnVsbCxs''@;'; put 'put ''Ll9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPWwsbC5fcHJldkR1cD10aGlzLl90YWlsLGwuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPWwpfWdldChsLGEpe2xldCBkO2ZvcihkPXRoaXMuX2hlYWQ7bnVsbCE9PWQ7ZD1kLl9uZXh0RHVwKWlmKChudWxsPT09YXx8YTw9ZC5j''@;'; put 'put ''dXJyZW50SW5kZXgpJiZPYmplY3QuaXMoZC50cmFja0J5SWQsbCkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC5fcHJldkR1cCxkPWwuX25leHREdXA7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2hlYWQ9ZDphLl9uZXh0RHVwPWQsbnVsbD09PWQ/dGhpcy5fdGFpbD1h''@;'; put 'put ''OmQuX3ByZXZEdXA9YSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3MgY2Fle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1wdXQobCl7Y29uc3QgYT1sLnRyYWNrQnlJZDtsZXQgZD10aGlzLm1hcC5nZXQoYSk7ZHx8KGQ9bmV3IHh5ZSx0aGlzLm1hcC5zZXQoYSxkKSksZC5hZGQobCl9''@;'; put 'put ''Z2V0KGwsYSl7Y29uc3QgaD10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGg/aC5nZXQobCxhKTpudWxsfXJlbW92ZShsKXtjb25zdCBhPWwudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoYSkucmVtb3ZlKGwpJiZ0aGlzLm1hcC5kZWxldGUoYSksbH1nZXQgaXNFbXB0eSgpe3JldHVybiAw''@;'; put 'put ''PT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fWZ1bmN0aW9uIHVhZShjLGwsYSl7Y29uc3QgZD1jLnByZXZpb3VzSW5kZXg7aWYobnVsbD09PWQpcmV0dXJuIGQ7bGV0IGg9MDtyZXR1cm4gYSYmZDxhLmxlbmd0aCYmKGg9YVtkXSksZCtsK2h9Y2xhc3MgZGFle2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxKUyhsKX1jcmVhdGUoKXtyZXR1cm4gbmV3IEV5ZX19Y2xhc3MgRXlle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1u''@;'; put 'put ''dWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxz''@;'; put 'put ''VGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fbWFwSGVhZDtudWxsIT09YTthPWEu''@;'; put 'put ''X25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09YTthPWEu''@;'; put 'put ''X25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEu''@;'; put 'put ''X25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8fEpTKGwpKSl0aHJvdyBuZXcgUW4oOTAwLCExKX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7''@;'; put 'put ''bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVuZEFmdGVyPWEsYT1hLl9uZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9n''@;'; put 'put ''ZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0IGQ9YTtudWxsIT09ZDtkPWQuX25leHRSZW1vdmVkKWQ9PT10aGlz''@;'; put 'put ''Ll9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShkLmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFsdWU9bnVsbCxkLl9wcmV2PW51bGwsZC5fbmV4dD1udWxsfXJldHVy''@;'; put 'put ''biB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQobCxhKXtpZihsKXtj''@;'; put 'put ''b25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQmJihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRB''@;'; put 'put ''ZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jkcy5oYXMobCkpe2NvbnN0IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7''@;'; put 'put ''dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsdj1oLl9uZXh0O3JldHVybiBmJiYoZi5fbmV4dD12KSx2JiYodi5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3QgZD1uZXcgVHllKGwpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChs''@;'; put 'put ''LGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5f''@;'; put 'put ''bmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNWYWx1''@;'; put 'put ''ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXMobCxhKXtPYmplY3QuaXMoYSxs''@;'; put 'put ''LmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJyZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5nZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0''@;'; put 'put ''aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRkaXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2VzKGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFp''@;'; put 'put ''bC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wgaW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEpOk9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3MgVHlle2NvbnN0cnVjdG9yKGwpe3RoaXMua2V5PWwsdGhpcy5wcmV2''@;'; put 'put ''aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19ZnVu''@;'; put 'put ''Y3Rpb24gaGFlKCl7cmV0dXJuIG5ldyBlbShbbmV3IGxhZV0pfWxldCBlbT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpoYWV9KX1jb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBj''@;'; put 'put ''cmVhdGUoYSxkKXtpZihudWxsIT1kKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6ZD0+Yy5jcmVhdGUoYSxkfHxoYWUoKSksZGVwczpbW2MsbmV3IGxk''@;'; put 'put ''LG5ldyBJMV1dfX1maW5kKGEpe2NvbnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZChoPT5oLnN1cHBvcnRzKGEpKTtpZihudWxsIT1kKXJldHVybiBkO3Rocm93IG5ldyBRbig5MDEsITEpfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZmFlKCl7cmV0dXJuIG5ldyB3TShbbmV3IGRhZV0pfWxldCB3''@;'; put 'put ''TT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmYWV9KX1jb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihkKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNl''@;'; put 'put ''KCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6ZD0+Yy5jcmVhdGUoYSxkfHxmYWUoKSksZGVwczpbW2MsbmV3IGxkLG5ldyBJMV1dfX1maW5kKGEpe2NvbnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZCho''@;'; put 'put ''PT5oLnN1cHBvcnRzKGEpKTtpZihkKXJldHVybiBkO3Rocm93IG5ldyBRbig5MDEsITEpfX1yZXR1cm4gY30pKCk7Y29uc3QgRHllPXRhZShudWxsLCJjb3JlIixbXSk7bGV0IEl5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''ZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihxNCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBzMShjKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBjP2M6bnVsbCE9YyYmImZhbHNl''@;'; put 'put ''IiE9PWN9ZnVuY3Rpb24gUGFlKGMpe2NvbnN0IGw9X2UobnVsbCk7dHJ5e3JldHVybiBjKCl9ZmluYWxseXtfZShsKX19bGV0IEhhZT1udWxsO2Z1bmN0aW9uIHRtKCl7cmV0dXJuIEhhZX1jbGFzcyBwX2V7fWNvbnN0IHZzPW5ldyBTdCgiIik7bGV0IFZVPSgoKT0+e2NsYXNzIGN7aGlzdG9y''@;'; put 'put ''eUdvKGEpe3Rocm93IG5ldyBFcnJvcigiIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkobV9lKSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpO2NvbnN0IGdfZT1uZXcgU3QoIiIpO2xldCBtX2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFZVe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kb2M9ZmkodnMpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlzLl9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJh''@;'; put 'put ''c2VIcmVmRnJvbURPTSgpe3JldHVybiB0bSgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0ZShhKXtjb25zdCBkPXRtKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9''@;'; put 'put ''PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBkPXRtKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVF''@;'; put 'put ''dmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBv''@;'; put 'put ''cnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0''@;'; put 'put ''aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGEsZCxoKX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxoKX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3''@;'; put 'put ''YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3RvcnkuZ28oYSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5uZXcgYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEJVKGMsbCl7aWYoMD09Yy5sZW5ndGgpcmV0dXJuIGw7aWYoMD09bC5sZW5ndGgpcmV0dXJuIGM7bGV0IGE9MDtyZXR1cm4g''@;'; put 'put ''Yy5lbmRzV2l0aCgiLyIpJiZhKyssbC5zdGFydHNXaXRoKCIvIikmJmErKywyPT1hP2MrbC5zdWJzdHJpbmcoMSk6MT09YT9jK2w6YysiLyIrbH1mdW5jdGlvbiBOYWUoYyl7Y29uc3QgbD1jLm1hdGNoKC8jfFw/fCQvKSxhPWwmJmwuaW5kZXh8fGMubGVuZ3RoO3JldHVybiBjLnNsaWNlKDAs''@;'; put 'put ''YS0oIi8iPT09Y1thLTFdPzE6MCkpK2Muc2xpY2UoYSl9ZnVuY3Rpb24gWDQoYyl7cmV0dXJuIGMmJiI/IiE9PWNbMF0/Ij8iK2M6Y31sZXQgWjg9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCIiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7''@;'; put 'put ''cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5maShCYWUpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBWYWU9bmV3IFN0KCIiKTtsZXQgQmFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBaOHtjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLHRoaXMuX2Jhc2VIcmVmPWQ/P3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCk/P2ZpKHZzKS5sb2NhdGlvbj8ub3JpZ2luPz8iIn1u''@;'; put 'put ''Z09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhp''@;'; put 'put ''cy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gQlUodGhpcy5fYmFzZUhyZWYsYSl9cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24u''@;'; put 'put ''cGF0aG5hbWUrWDQodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLGg9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBoJiZhP2Ake2R9JHtofWA6ZH1wdXNoU3RhdGUoYSxkLGgsZil7Y29uc3Qgdj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK1g0KGYpKTt0aGlzLl9w''@;'; put 'put ''bGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsdil9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2NvbnN0IHY9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtYNChmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxkLHYpfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxv''@;'; put 'put ''Y2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoVlUpLHhyKFZhZSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdl9lPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGMgZXh0ZW5kcyBaOHtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX2Jhc2VIcmVmPSIiLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLG51bGwhPWQmJih0aGlzLl9iYXNlSHJlZj1kKX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5f''@;'; put 'put ''cmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhh''@;'; put 'put ''c2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXBhdGgoYT0hMSl7Y29uc3QgZD10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g/PyIjIjtyZXR1cm4gZC5sZW5ndGg+MD9kLnN1YnN0cmluZygxKTpkfXByZXBhcmVFeHRlcm5hbFVybChhKXtjb25zdCBk''@;'; put 'put ''PUJVKHRoaXMuX2Jhc2VIcmVmLGEpO3JldHVybiBkLmxlbmd0aD4wPyIjIitkOmR9cHVzaFN0YXRlKGEsZCxoLGYpe2xldCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrWDQoZikpOzA9PXYubGVuZ3RoJiYodj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0''@;'; put 'put ''Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsdil9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2xldCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrWDQoZikpOzA9PXYubGVuZ3RoJiYodj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJl''@;'; put 'put ''cGxhY2VTdGF0ZShhLGQsdil9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGE9MCl7''@;'; put 'put ''dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihWVSkseHIoVmFlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9''@;'; put 'put ''fXJldHVybiBjfSkoKSxmaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3N1YmplY3Q9bmV3IEtyLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5PWE7Y29uc3QgZD10aGlz''@;'; put 'put ''Ll9sb2NhdGlvblN0cmF0ZWd5LmdldEJhc2VIcmVmKCk7dGhpcy5fYmFzZVBhdGg9ZnVuY3Rpb24gX19lKGMpe2lmKG5ldyBSZWdFeHAoIl4oaHR0cHM/Oik/Ly8iKS50ZXN0KGMpKXtjb25zdFssYV09Yy5zcGxpdCgvXC9cL1teXC9dKy8pO3JldHVybiBhfXJldHVybiBjfShOYWUoamFlKGQp''@;'; put 'put ''KSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKGg9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpoLnN0YXRlLHR5cGU6aC50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJz''@;'; put 'put ''Y3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChhPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGEpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0YXRlKCl9aXNDdXJyZW50UGF0''@;'; put 'put ''aEVxdWFsVG8oYSxkPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGErWDQoZCkpfW5vcm1hbGl6ZShhKXtyZXR1cm4gYy5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24geV9lKGMsbCl7aWYoIWN8fCFsLnN0YXJ0c1dpdGgoYykpcmV0dXJuIGw7Y29uc3QgYT1sLnN1''@;'; put 'put ''YnN0cmluZyhjLmxlbmd0aCk7cmV0dXJuIiI9PT1hfHxbIi8iLCI7IiwiPyIsIiMiXS5pbmNsdWRlcyhhWzBdKT9hOmx9KHRoaXMuX2Jhc2VQYXRoLGphZShhKSkpfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gYSYmIi8iIT09YVswXSYmKGE9Ii8iK2EpLHRoaXMuX2xvY2F0aW9uU3Ry''@;'; put 'put ''YXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKGEpfWdvKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRlKGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYStYNChkKSksaCl9cmVwbGFjZVN0''@;'; put 'put ''YXRlKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYStYNChkKSksaCl9Zm9yd2FyZCgpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3ku''@;'; put 'put ''Zm9yd2FyZCgpfWJhY2soKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmJhY2soKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lmhpc3RvcnlHbz8uKGEpfW9uVXJsQ2hhbmdlKGEpe3JldHVybiB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChhKSx0aGlzLl91cmxD''@;'; put 'put ''aGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlzLnN1YnNjcmliZShkPT57dGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGQudXJsLGQuc3RhdGUpfSksKCk9Pntjb25zdCBkPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRleE9mKGEpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxp''@;'; put 'put ''Y2UoZCwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoYT0iIixkKXt0aGlzLl91''@;'; put 'put ''cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChoPT5oKGEsZCkpfXN1YnNjcmliZShhLGQsaCl7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZCxjb21wbGV0ZTpofSl9c3RhdGlje3RoaXMubm9ybWFsaXplUXVlcnlQYXJhbXM9WDR9c3RhdGlje3RoaXMuam9p''@;'; put 'put ''bldpdGhTbGFzaD1CVX1zdGF0aWN7dGhpcy5zdHJpcFRyYWlsaW5nU2xhc2g9TmFlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFo4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZnVuY3Rpb24g''@;'; put 'put ''Yl9lKCl7cmV0dXJuIG5ldyBmaCh4cihaOCkpfSgpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBqYWUoYyl7cmV0dXJuIGMucmVwbGFjZSgvXC9pbmRleC5odG1sJC8sIiIpfXZhciBkMD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkZvcm1hdD0wXT0iRm9ybWF0''@;'; put 'put ''IixjW2MuU3RhbmRhbG9uZT0xXT0iU3RhbmRhbG9uZSIsY30oZDB8fHt9KSxkbD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5hcnJvdz0wXT0iTmFycm93IixjW2MuQWJicmV2aWF0ZWQ9MV09IkFiYnJldmlhdGVkIixjW2MuV2lkZT0yXT0iV2lkZSIsY1tjLlNob3J0PTNdPSJTaG9ydCIsY30o''@;'; put 'put ''ZGx8fHt9KSxDZD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNob3J0PTBdPSJTaG9ydCIsY1tjLk1lZGl1bT0xXT0iTWVkaXVtIixjW2MuTG9uZz0yXT0iTG9uZyIsY1tjLkZ1bGw9M109IkZ1bGwiLGN9KENkfHx7fSk7ZnVuY3Rpb24galUoYyxsLGEpe2NvbnN0IGQ9bzEoYyksZj1DMihbZFtl''@;'; put 'put ''Yy5EYXlzRm9ybWF0XSxkW2VjLkRheXNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIEMyKGYsYSl9ZnVuY3Rpb24gelUoYyxsLGEpe2NvbnN0IGQ9bzEoYyksZj1DMihbZFtlYy5Nb250aHNGb3JtYXRdLGRbZWMuTW9udGhzU3RhbmRhbG9uZV1dLGwpO3JldHVybiBDMihmLGEpfWZ1bmN0aW9uIEMy''@;'; put 'put ''KGMsbCl7Zm9yKGxldCBhPWw7YT4tMTthLS0paWYodHlwZW9mIGNbYV08InUiKXJldHVybiBjW2FdO3Rocm93IG5ldyBFcnJvcigiTG9jYWxlIGRhdGEgQVBJOiBsb2NhbGUgZGF0YSB1bmRlZmluZWQiKX1mdW5jdGlvbiBxYWUoYyxsKXtsPWVuY29kZVVSSUNvbXBvbmVudChsKTtmb3IoY29u''@;'; put 'put ''c3QgYSBvZiBjLnNwbGl0KCI7Iikpe2NvbnN0IGQ9YS5pbmRleE9mKCI9IiksW2gsZl09LTE9PWQ/W2EsIiJdOlthLnNsaWNlKDAsZCksYS5zbGljZShkKzEpXTtpZihoLnRyaW0oKT09PWwpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChmKX1yZXR1cm4gbnVsbH1jb25zdCBKVT0vXHMrLyxY''@;'; put 'put ''YWU9W107bGV0IHd1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ0VsPWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLmluaXRpYWxDbGFzc2VzPVhhZSx0aGlzLnN0YXRlTWFwPW5ldyBNYXB9c2V0IGtsYXNzKGEpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9YT9hLnRy''@;'; put 'put ''aW0oKS5zcGxpdChKVSk6WGFlfXNldCBuZ0NsYXNzKGEpe3RoaXMucmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiBhP2EudHJpbSgpLnNwbGl0KEpVKTphfW5nRG9DaGVjaygpe2Zvcihjb25zdCBkIG9mIHRoaXMuaW5pdGlhbENsYXNzZXMpdGhpcy5fdXBkYXRlU3RhdGUoZCwhMCk7Y29uc3Qg''@;'; put 'put ''YT10aGlzLnJhd0NsYXNzO2lmKEFycmF5LmlzQXJyYXkoYSl8fGEgaW5zdGFuY2VvZiBTZXQpZm9yKGNvbnN0IGQgb2YgYSl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtlbHNlIGlmKG51bGwhPWEpZm9yKGNvbnN0IGQgb2YgT2JqZWN0LmtleXMoYSkpdGhpcy5fdXBkYXRlU3RhdGUoZCwhIWFb''@;'; put 'put ''ZF0pO3RoaXMuX2FwcGx5U3RhdGVEaWZmKCl9X3VwZGF0ZVN0YXRlKGEsZCl7Y29uc3QgaD10aGlzLnN0YXRlTWFwLmdldChhKTt2b2lkIDAhPT1oPyhoLmVuYWJsZWQhPT1kJiYoaC5jaGFuZ2VkPSEwLGguZW5hYmxlZD1kKSxoLnRvdWNoZWQ9ITApOnRoaXMuc3RhdGVNYXAuc2V0KGEse2Vu''@;'; put 'put ''YWJsZWQ6ZCxjaGFuZ2VkOiEwLHRvdWNoZWQ6ITB9KX1fYXBwbHlTdGF0ZURpZmYoKXtmb3IoY29uc3QgYSBvZiB0aGlzLnN0YXRlTWFwKXtjb25zdCBkPWFbMF0saD1hWzFdO2guY2hhbmdlZD8odGhpcy5fdG9nZ2xlQ2xhc3MoZCxoLmVuYWJsZWQpLGguY2hhbmdlZD0hMSk6aC50b3VjaGVk''@;'; put 'put ''fHwoaC5lbmFibGVkJiZ0aGlzLl90b2dnbGVDbGFzcyhkLCExKSx0aGlzLnN0YXRlTWFwLmRlbGV0ZShkKSksaC50b3VjaGVkPSExfX1fdG9nZ2xlQ2xhc3MoYSxkKXsoYT1hLnRyaW0oKSkubGVuZ3RoPjAmJmEuc3BsaXQoSlUpLmZvckVhY2goaD0+e2Q/dGhpcy5fcmVuZGVyZXIuYWRkQ2xh''@;'; put 'put ''c3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShFbykpfX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdDbGFzcyIsIiJdXSxpbnB1dHM6e2tsYXNzOltObi5Ob25lLCJjbGFzcyIsImtsYXNzIl0sbmdDbGFzczoibmdDbGFzcyJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2NsYXNzIGF3ZXtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''LGEsZCxoKXt0aGlzLiRpbXBsaWNpdD1sLHRoaXMubmdGb3JPZj1hLHRoaXMuaW5kZXg9ZCx0aGlzLmNvdW50PWh9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX1sZXQgbnM9KCgpPT57Y2xhc3MgY3tzZXQgbmdGb3JPZihhKXt0aGlzLl9uZ0Zvck9mPWEsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnkoYSl7dGhpcy5fdHJhY2tCeUZuPWF9Z2V0IG5nRm9yVHJh''@;'; put 'put ''Y2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdGb3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNl''@;'; put 'put ''dCBuZ0ZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl90ZW1wbGF0ZT1hKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCBhPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZlciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJz''@;'; put 'put ''LmZpbmQoYSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KSl9aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X2FwcGx5Q2hhbmdlcyhhKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXI7''@;'; put 'put ''YS5mb3JFYWNoT3BlcmF0aW9uKChoLGYsdik9PntpZihudWxsPT1oLnByZXZpb3VzSW5kZXgpZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IGF3ZShoLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09PXY/dm9pZCAwOnYpO2Vsc2UgaWYobnVsbD09dilkLnJl''@;'; put 'put ''bW92ZShudWxsPT09Zj92b2lkIDA6Zik7ZWxzZSBpZihudWxsIT09Zil7Y29uc3QgTT1kLmdldChmKTtkLm1vdmUoTSx2KSxRYWUoTSxoKX19KTtmb3IobGV0IGg9MCxmPWQubGVuZ3RoO2g8ZjtoKyspe2NvbnN0IE09ZC5nZXQoaCkuY29udGV4dDtNLmluZGV4PWgsTS5jb3VudD1mLE0ubmdG''@;'; put 'put ''b3JPZj10aGlzLl9uZ0Zvck9mfWEuZm9yRWFjaElkZW50aXR5Q2hhbmdlKGg9PntRYWUoZC5nZXQoaC5jdXJyZW50SW5kZXgpLGgpfSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKShHZShEbyksR2UoU2wpLEdlKGVtKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ0ZvciIsIiIsIm5nRm9yT2YiLCIiXV0saW5wdXRzOntuZ0Zvck9mOiJuZ0Zvck9mIixuZ0ZvclRyYWNrQnk6Im5nRm9yVHJhY2tCeSIsbmdGb3JU''@;'; put 'put ''ZW1wbGF0ZToibmdGb3JUZW1wbGF0ZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFFhZShjLGwpe2MuY29udGV4dC4kaW1wbGljaXQ9bC5pdGVtfWxldCBiYT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fdmlld0NvbnRhaW5lcj1hLHRoaXMu''@;'; put 'put ''X2NvbnRleHQ9bmV3IG93ZSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWR9c2V0IG5nSWYoYSl7dGhpcy5fY29udGV4''@;'; put 'put ''dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWEsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihhKXtlb2UoIm5nSWZUaGVuIixhKSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9YSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZkVsc2Uo''@;'; put 'put ''YSl7ZW9lKCJuZ0lmRWxzZSIsYSksdGhpcy5fZWxzZVRlbXBsYXRlUmVmPWEsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9X3VwZGF0ZVZpZXcoKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD90aGlzLl90aGVuVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIu''@;'; put 'put ''Y2xlYXIoKSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiYmKHRoaXMuX3RoZW5WaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RoZW5UZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpOnRoaXMuX2Vsc2VWaWV3''@;'; put 'put ''UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmJiYodGhpcy5fZWxzZVZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmLHRoaXMu''@;'; put 'put ''X2NvbnRleHQpKSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShEbyksR2UoU2wpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbIiIsIm5nSWYiLCIiXV0saW5wdXRzOntuZ0lmOiJuZ0lmIixuZ0lmVGhlbjoibmdJZlRoZW4iLG5nSWZFbHNlOiJuZ0lmRWxzZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2NsYXNzIG93ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51''@;'; put 'put ''bGx9fWZ1bmN0aW9uIGVvZShjLGwpe2lmKGwmJiFsLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IoYCR7Y30gbXVzdCBiZSBhIFRlbXBsYXRlUmVmLCBidXQgcmVjZWl2ZWQgJyR7UHIobCl9Jy5gKX1jbGFzcyBRVXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ZpZXdDb250YWlu''@;'; put 'put ''ZXJSZWY9bCx0aGlzLl90ZW1wbGF0ZVJlZj1hLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5f''@;'; put 'put ''dmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZShsKXtsJiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiFsJiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19bGV0IFMyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0Vmlld3M9W10s''@;'; put 'put ''dGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMX1zZXQgbmdTd2l0Y2goYSl7dGhpcy5fbmdTd2l0Y2g9YSwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0''@;'; put 'put ''Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KGEpe3RoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKGEpfV9tYXRjaENhc2UoYSl7Y29uc3QgZD1hPT09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fD1kLHRo''@;'; put 'put ''aXMuX2xhc3RDYXNlQ2hlY2tJbmRleCsrLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD09PXRoaXMuX2Nhc2VDb3VudCYmKHRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghdGhpcy5fbGFzdENhc2VzTWF0Y2hlZCksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0''@;'; put 'put ''Y2hlZD0hMSksZH1fdXBkYXRlRGVmYXVsdENhc2VzKGEpe2lmKHRoaXMuX2RlZmF1bHRWaWV3cy5sZW5ndGg+MCYmYSE9PXRoaXMuX2RlZmF1bHRVc2VkKXt0aGlzLl9kZWZhdWx0VXNlZD1hO2Zvcihjb25zdCBkIG9mIHRoaXMuX2RlZmF1bHRWaWV3cylkLmVuZm9yY2VTdGF0ZShhKX19c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaCIsIiJdXSxpbnB1dHM6e25nU3dpdGNoOiJuZ1N3aXRjaCJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpLGNwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdTd2l0Y2g9aCxoLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgUVUoYSxkKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3''@;'; put 'put ''aXRjaENhc2UpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShEbyksR2UoU2wpLEdlKFMyLDkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25n''@;'; put 'put ''U3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCksbm9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nRWw9YSx0aGlzLl9kaWZmZXJzPWQsdGhpcy5fcmVuZGVyZXI9aCx0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5f''@;'; put 'put ''ZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUoYSl7dGhpcy5fbmdTdHlsZT1hLCF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhp''@;'; put 'put ''cy5fbmdTdHlsZSk7YSYmdGhpcy5fYXBwbHlDaGFuZ2VzKGEpfX1fc2V0U3R5bGUoYSxkKXtjb25zdFtoLGZdPWEuc3BsaXQoIi4iKSx2PS0xPT09aC5pbmRleE9mKCItIik/dm9pZCAwOkszLkRhc2hDYXNlO251bGwhPWQ/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LGgsZj9gJHtkfSR7Zn1gOmQsdik6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsdil9X2FwcGx5Q2hhbmdlcyhhKXthLmZvckVhY2hSZW1vdmVkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxudWxsKSksYS5mb3JFYWNo''@;'; put 'put ''QWRkZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5LGQuY3VycmVudFZhbHVlKSksYS5mb3JFYWNoQ2hhbmdlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShH''@;'; put 'put ''ZShKaSksR2Uod00pLEdlKEVvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLE4xPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1hLHRoaXMuX3ZpZXdSZWY9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I9bnVsbH1uZ09uQ2hhbmdlcyhhKXtp''@;'; put 'put ''Zih0aGlzLl9zaG91bGRSZWNyZWF0ZVZpZXcoYSkpe2NvbnN0IGQ9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZkLnJlbW92ZShkLmluZGV4T2YodGhpcy5fdmlld1JlZikpLCF0aGlzLm5nVGVtcGxhdGVPdXRsZXQpcmV0dXJuIHZvaWQodGhpcy5fdmlld1JlZj1u''@;'; put 'put ''dWxsKTtjb25zdCBoPXRoaXMuX2NyZWF0ZUNvbnRleHRGb3J3YXJkUHJveHkoKTt0aGlzLl92aWV3UmVmPWQuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMubmdUZW1wbGF0ZU91dGxldCxoLHtpbmplY3Rvcjp0aGlzLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcj8/dm9pZCAwfSl9fV9zaG91bGRS''@;'; put 'put ''ZWNyZWF0ZVZpZXcoYSl7cmV0dXJuISFhLm5nVGVtcGxhdGVPdXRsZXR8fCEhYS5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3J9X2NyZWF0ZUNvbnRleHRGb3J3YXJkUHJveHkoKXtyZXR1cm4gbmV3IFByb3h5KHt9LHtzZXQ6KGEsZCxoKT0+ISF0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0''@;'; put 'put ''JiZSZWZsZWN0LnNldCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0LGQsaCksZ2V0OihhLGQsaCk9PntpZih0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KXJldHVybiBSZWZsZWN0LmdldCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0LGQsaCl9fSl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRG8pKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxl''@;'; put 'put ''dENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSkoKTtjbGFzcyB1d2V7Y3JlYXRlU3Vic2Ny''@;'; put 'put ''aXB0aW9uKGwsYSl7cmV0dXJuIFBhZSgoKT0+bC5zdWJzY3JpYmUoe25leHQ6YSxlcnJvcjpkPT57dGhyb3cgZH19KSl9ZGlzcG9zZShsKXtQYWUoKCk9PmwudW5zdWJzY3JpYmUoKSl9fWNsYXNzIGR3ZXtjcmVhdGVTdWJzY3JpcHRpb24obCxhKXtyZXR1cm4gbC50aGVuKGEsZD0+e3Rocm93''@;'; put 'put ''IGR9KX1kaXNwb3NlKGwpe319Y29uc3QgaHdlPW5ldyBkd2UsZndlPW5ldyB1d2U7bGV0IEVNPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITAsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGws''@;'; put 'put ''dGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbCx0aGlzLl9yZWY9YX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybShhKXtpZighdGhpcy5fb2JqKXtpZihhKXRyeXt0aGlzLm1hcmtGb3JDaGVj''@;'; put 'put ''a09uVmFsdWVVcGRhdGU9ITEsdGhpcy5fc3Vic2NyaWJlKGEpfWZpbmFsbHl7dGhpcy5tYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlPSEwfXJldHVybiB0aGlzLl9sYXRlc3RWYWx1ZX1yZXR1cm4gYSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGEpKTp0aGlz''@;'; put 'put ''Ll9sYXRlc3RWYWx1ZX1fc3Vic2NyaWJlKGEpe3RoaXMuX29iaj1hLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGEpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oYSxkPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShhLGQp''@;'; put 'put ''KX1fc2VsZWN0U3RyYXRlZ3koYSl7aWYoX00oYSkpcmV0dXJuIGh3ZTtpZihXaWUoYSkpcmV0dXJuIGZ3ZTt0aHJvdyBmdW5jdGlvbiB6ZihjLGwpe3JldHVybiBuZXcgUW4oMjEwMCwhMSl9KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiks''@;'; put 'put ''dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKXthPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZCx0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGUmJnRoaXMuX3JlZj8u''@;'; put 'put ''bWFya0ZvckNoZWNrKCkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEVzLDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6ImFzeW5jIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSxl''@;'; put 'put ''Wj0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJqc29uIix0eXBlOmMscHVyZToh''@;'; put 'put ''MSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSx3Uj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGlmZmVycz1hLHRoaXMua2V5VmFsdWVzPVtdLHRoaXMuY29tcGFyZUZuPXJvZX10cmFuc2Zvcm0oYSxkPXJvZSl7aWYoIWF8fCEoYSBpbnN0YW5jZW9mIE1hcCkmJiJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcj8/PXRoaXMuZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpO2NvbnN0IGg9dGhpcy5kaWZmZXIuZGlmZihhKSxmPWQhPT10aGlzLmNvbXBhcmVGbjtyZXR1cm4gaCYmKHRoaXMua2V5VmFsdWVzPVtdLGguZm9yRWFjaEl0ZW0o''@;'; put 'put ''dj0+e3RoaXMua2V5VmFsdWVzLnB1c2goZnVuY3Rpb24geHdlKGMsbCl7cmV0dXJue2tleTpjLHZhbHVlOmx9fSh2LmtleSx2LmN1cnJlbnRWYWx1ZSkpfSkpLChofHxmKSYmKHRoaXMua2V5VmFsdWVzLnNvcnQoZCksdGhpcy5jb21wYXJlRm49ZCksdGhpcy5rZXlWYWx1ZXN9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uod00sMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToia2V5dmFsdWUiLHR5cGU6YyxwdXJlOiExLHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHJvZShjLGwpe2NvbnN0''@;'; put 'put ''IGE9Yy5rZXksZD1sLmtleTtpZihhPT09ZClyZXR1cm4gMDtpZih2b2lkIDA9PT1hKXJldHVybiAxO2lmKHZvaWQgMD09PWQpcmV0dXJuLTE7aWYobnVsbD09PWEpcmV0dXJuIDE7aWYobnVsbD09PWQpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYic3RyaW5nIj09dHlwZW9mIGQp''@;'; put 'put ''cmV0dXJuIGE8ZD8tMToxO2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBkKXJldHVybiBhLWQ7aWYoImJvb2xlYW4iPT10eXBlb2YgYSYmImJvb2xlYW4iPT10eXBlb2YgZClyZXR1cm4gYTxkPy0xOjE7Y29uc3QgaD1TdHJpbmcoYSksZj1TdHJpbmcoZCk7cmV0dXJu''@;'; put 'put ''IGg9PWY/MDpoPGY/LTE6MX1sZXQgUmE9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30p''@;'; put 'put ''KCk7ZnVuY3Rpb24gdGwoYyl7cmV0dXJuImJyb3dzZXIiPT09Y31mdW5jdGlvbiBhb2UoYyl7cmV0dXJuInNlcnZlciI9PT1jfWxldCBSd2U9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PnRsKGZp''@;'; put 'put ''KGlvKSk/bmV3IEx3ZShmaSh2cyksd2luZG93KTpuZXcgUHdlfSl9fXJldHVybiBjfSkoKTtjbGFzcyBMd2V7Y29uc3RydWN0b3IobCxhKXt0aGlzLmRvY3VtZW50PWwsdGhpcy53aW5kb3c9YSx0aGlzLm9mZnNldD0oKT0+WzAsMF19c2V0T2Zmc2V0KGwpe3RoaXMub2Zmc2V0PUFycmF5Lmlz''@;'; put 'put ''QXJyYXkobCk/KCk9Pmw6bH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVyblt0aGlzLndpbmRvdy5zY3JvbGxYLHRoaXMud2luZG93LnNjcm9sbFldfXNjcm9sbFRvUG9zaXRpb24obCl7dGhpcy53aW5kb3cuc2Nyb2xsVG8obFswXSxsWzFdKX1zY3JvbGxUb0FuY2hvcihsKXtjb25zdCBhPWZ1''@;'; put 'put ''bmN0aW9uIE93ZShjLGwpe2NvbnN0IGE9Yy5nZXRFbGVtZW50QnlJZChsKXx8Yy5nZXRFbGVtZW50c0J5TmFtZShsKVswXTtpZihhKXJldHVybiBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmNyZWF0ZVRyZWVXYWxrZXImJmMuYm9keSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuYm9keS5hdHRh''@;'; put 'put ''Y2hTaGFkb3cpe2NvbnN0IGQ9Yy5jcmVhdGVUcmVlV2Fsa2VyKGMuYm9keSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCk7bGV0IGg9ZC5jdXJyZW50Tm9kZTtmb3IoO2g7KXtjb25zdCBmPWguc2hhZG93Um9vdDtpZihmKXtjb25zdCB2PWYuZ2V0RWxlbWVudEJ5SWQobCl8fGYucXVlcnlTZWxl''@;'; put 'put ''Y3RvcihgW25hbWU9IiR7bH0iXWApO2lmKHYpcmV0dXJuIHZ9aD1kLm5leHROb2RlKCl9fXJldHVybiBudWxsfSh0aGlzLmRvY3VtZW50LGwpO2EmJih0aGlzLnNjcm9sbFRvRWxlbWVudChhKSxhLmZvY3VzKCkpfXNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbihsKXt0aGlzLndpbmRvdy5o''@;'; put 'put ''aXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uPWx9c2Nyb2xsVG9FbGVtZW50KGwpe2NvbnN0IGE9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWEubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxoPWEudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGY9dGhpcy5vZmZzZXQoKTt0aGlz''@;'; put 'put ''LndpbmRvdy5zY3JvbGxUbyhkLWZbMF0saC1mWzFdKX19Y2xhc3MgUHdle3NldE9mZnNldChsKXt9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm5bMCwwXX1zY3JvbGxUb1Bvc2l0aW9uKGwpe31zY3JvbGxUb0FuY2hvcihsKXt9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe319Y2xh''@;'; put 'put ''c3Mgb29le31jbGFzcyBjQ2UgZXh0ZW5kcyBwX2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9ITB9fWNsYXNzIGlaIGV4dGVuZHMgY0Nle3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbiBmX2UoYyl7SGFlPz89Y30obmV3IGla''@;'; put 'put ''KX1vbkFuZENhbmNlbChsLGEsZCl7cmV0dXJuIGwuYWRkRXZlbnRMaXN0ZW5lcihhLGQpLCgpPT57bC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCl9fWRpc3BhdGNoRXZlbnQobCxhKXtsLmRpc3BhdGNoRXZlbnQoYSl9cmVtb3ZlKGwpe2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92''@;'; put 'put ''ZUNoaWxkKGwpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4oYT1hfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRs''@;'; put 'put ''ZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9aXNTaGFkb3dSb290KGwpe3JldHVybiBsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRh''@;'; put 'put ''cmdldChsLGEpe3JldHVybiJ3aW5kb3ciPT09YT93aW5kb3c6ImRvY3VtZW50Ij09PWE/bDoiYm9keSI9PT1hP2wuYm9keTpudWxsfWdldEJhc2VIcmVmKGwpe2NvbnN0IGE9ZnVuY3Rpb24gdUNlKCl7cmV0dXJuIGtNPWtNfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIiksa00/a00u''@;'; put 'put ''Z2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0oKTtyZXR1cm4gbnVsbD09YT9udWxsOmZ1bmN0aW9uIGRDZShjKXtyZXR1cm4gbmV3IFVSTChjLGRvY3VtZW50LmJhc2VVUkkpLnBhdGhuYW1lfShhKX1yZXNldEJhc2VFbGVtZW50KCl7a009bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2lu''@;'; put 'put ''ZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9Z2V0Q29va2llKGwpe3JldHVybiBxYWUoZG9jdW1lbnQuY29va2llLGwpfX1sZXQga009bnVsbCxmQ2U9KCgpPT57Y2xhc3MgY3tidWlsZCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgYVo9bmV3IFN0KCIiKTtsZXQgZ29lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl96b25lPWQsdGhp''@;'; put 'put ''cy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCxhLmZvckVhY2goaD0+e2gubWFuYWdlcj10aGlzfSksdGhpcy5fcGx1Z2lucz1hLnNsaWNlKCkucmV2ZXJzZSgpfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGQpLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''YSxkLGgpfWdldFpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1fZmluZFBsdWdpbkZvcihhKXtsZXQgZD10aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5nZXQoYSk7aWYoZClyZXR1cm4gZDtpZihkPXRoaXMuX3BsdWdpbnMuZmluZChmPT5mLnN1cHBvcnRzKGEpKSwhZCl0aHJvdyBuZXcgUW4oNTEw''@;'; put 'put ''MSwhMSk7cmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldChhLGQpLGR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoYVopLHhyKFdhKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3''@;'; put 'put ''NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgbW9le2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RvYz1sfX1jb25zdCBvWj0ibmctYXBwLWlkIjtsZXQgdm9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZj17fSl7dGhpcy5kb2M9YSx0aGlzLmFwcElkPWQsdGhpcy5ub25jZT1oLHRo''@;'; put 'put ''aXMucGxhdGZvcm1JZD1mLHRoaXMuc3R5bGVSZWY9bmV3IE1hcCx0aGlzLmhvc3ROb2Rlcz1uZXcgU2V0LHRoaXMuc3R5bGVOb2Rlc0luRE9NPXRoaXMuY29sbGVjdFNlcnZlclJlbmRlcmVkU3R5bGVzKCksdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWFvZShmKSx0aGlzLnJlc2V0SG9zdE5vZGVz''@;'; put 'put ''KCl9YWRkU3R5bGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpMT09PXRoaXMuY2hhbmdlVXNhZ2VDb3VudChkLDEpJiZ0aGlzLm9uU3R5bGVBZGRlZChkKX1yZW1vdmVTdHlsZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSl0aGlzLmNoYW5nZVVzYWdlQ291bnQoZCwtMSk8PTAmJnRoaXMub25TdHlsZVJl''@;'; put 'put ''bW92ZWQoZCl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMuc3R5bGVOb2Rlc0luRE9NO2EmJihhLmZvckVhY2goZD0+ZC5yZW1vdmUoKSksYS5jbGVhcigpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMub25TdHlsZVJlbW92ZWQoZCk7dGhpcy5yZXNldEhvc3RO''@;'; put 'put ''b2RlcygpfWFkZEhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuYWRkKGEpO2Zvcihjb25zdCBkIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5hZGRTdHlsZVRvSG9zdChhLGQpfXJlbW92ZUhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuZGVsZXRlKGEpfWdldEFsbFN0eWxlcygpe3JldHVybiB0aGlz''@;'; put 'put ''LnN0eWxlUmVmLmtleXMoKX1vblN0eWxlQWRkZWQoYSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5ob3N0Tm9kZXMpdGhpcy5hZGRTdHlsZVRvSG9zdChkLGEpfW9uU3R5bGVSZW1vdmVkKGEpe2NvbnN0IGQ9dGhpcy5zdHlsZVJlZjtkLmdldChhKT8uZWxlbWVudHM/LmZvckVhY2goaD0+aC5yZW1v''@;'; put 'put ''dmUoKSksZC5kZWxldGUoYSl9Y29sbGVjdFNlcnZlclJlbmRlcmVkU3R5bGVzKCl7Y29uc3QgYT10aGlzLmRvYy5oZWFkPy5xdWVyeVNlbGVjdG9yQWxsKGBzdHlsZVske29afT0iJHt0aGlzLmFwcElkfSJdYCk7aWYoYT8ubGVuZ3RoKXtjb25zdCBkPW5ldyBNYXA7cmV0dXJuIGEuZm9yRWFj''@;'; put 'put ''aChoPT57bnVsbCE9aC50ZXh0Q29udGVudCYmZC5zZXQoaC50ZXh0Q29udGVudCxoKX0pLGR9cmV0dXJuIG51bGx9Y2hhbmdlVXNhZ2VDb3VudChhLGQpe2NvbnN0IGg9dGhpcy5zdHlsZVJlZjtpZihoLmhhcyhhKSl7Y29uc3QgZj1oLmdldChhKTtyZXR1cm4gZi51c2FnZSs9ZCxmLnVzYWdl''@;'; put 'put ''fXJldHVybiBoLnNldChhLHt1c2FnZTpkLGVsZW1lbnRzOltdfSksZH1nZXRTdHlsZUVsZW1lbnQoYSxkKXtjb25zdCBoPXRoaXMuc3R5bGVOb2Rlc0luRE9NLGY9aD8uZ2V0KGQpO2lmKGY/LnBhcmVudE5vZGU9PT1hKXJldHVybiBoLmRlbGV0ZShkKSxmLnJlbW92ZUF0dHJpYnV0ZShvWiks''@;'; put 'put ''Zjt7Y29uc3Qgdj10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0aGlzLm5vbmNlJiZ2LnNldEF0dHJpYnV0ZSgibm9uY2UiLHRoaXMubm9uY2UpLHYudGV4dENvbnRlbnQ9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJnYuc2V0QXR0cmlidXRlKG9aLHRoaXMuYXBwSWQp''@;'; put 'put ''LGEuYXBwZW5kQ2hpbGQodiksdn19YWRkU3R5bGVUb0hvc3QoYSxkKXtjb25zdCBoPXRoaXMuZ2V0U3R5bGVFbGVtZW50KGEsZCksZj10aGlzLnN0eWxlUmVmLHY9Zi5nZXQoZCk/LmVsZW1lbnRzO3Y/di5wdXNoKGgpOmYuc2V0KGQse2VsZW1lbnRzOltoXSx1c2FnZToxfSl9cmVzZXRIb3N0''@;'; put 'put ''Tm9kZXMoKXtjb25zdCBhPXRoaXMuaG9zdE5vZGVzO2EuY2xlYXIoKSxhLmFkZCh0aGlzLmRvYy5oZWFkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoJHYpLHhyKEw1LDgpLHhyKGlvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBy''@;'; put 'put ''b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3Qgc1o9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlu''@;'; put 'put ''ayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsbWF0aDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoTUwvIn0sbFo9LyVDT01QJS9nLHZDZT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJv''@;'; put 'put ''b3QiLGZhY3Rvcnk6KCk9PiEwfSk7ZnVuY3Rpb24geW9lKGMsbCl7cmV0dXJuIGwubWFwKGE9PmEucmVwbGFjZShsWixjKSl9bGV0IGNaPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaPW51bGwpe3RoaXMuZXZlbnRNYW5hZ2VyPWEsdGhpcy5zaGFyZWRTdHlsZXNI''@;'; put 'put ''b3N0PWQsdGhpcy5hcHBJZD1oLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveT1mLHRoaXMuZG9jPXYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5uZ1pvbmU9RCx0aGlzLm5vbmNlPVosdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWFvZShN''@;'; put 'put ''KSx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgdVooYSx2LEQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyKX1jcmVhdGVSZW5kZXJlcihhLGQpe2lmKCFhfHwhZClyZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXI7dGhpcy5wbGF0Zm9ybUlzU2VydmVyJiZkLmVuY2Fwc3VsYXRpb249PT1Kcy5TaGFk''@;'; put 'put ''b3dEb20mJihkPXsuLi5kLGVuY2Fwc3VsYXRpb246SnMuRW11bGF0ZWR9KTtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpO3JldHVybiBoIGluc3RhbmNlb2Ygd29lP2guYXBwbHlUb0hvc3QoYSk6aCBpbnN0YW5jZW9mIGRaJiZoLmFwcGx5U3R5bGVzKCksaH1nZXRPckNy''@;'; put 'put ''ZWF0ZVJlbmRlcmVyKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyQnlDb21wSWQ7bGV0IGY9aC5nZXQoZC5pZCk7aWYoIWYpe2NvbnN0IHY9dGhpcy5kb2MsTT10aGlzLm5nWm9uZSxEPXRoaXMuZXZlbnRNYW5hZ2VyLFo9dGhpcy5zaGFyZWRTdHlsZXNIb3N0LHJlPXRoaXMucmVtb3ZlU3R5''@;'; put 'put ''bGVzT25Db21wRGVzdHJveSxjZT10aGlzLnBsYXRmb3JtSXNTZXJ2ZXI7c3dpdGNoKGQuZW5jYXBzdWxhdGlvbil7Y2FzZSBKcy5FbXVsYXRlZDpmPW5ldyB3b2UoRCxaLGQsdGhpcy5hcHBJZCxyZSx2LE0sY2UpO2JyZWFrO2Nhc2UgSnMuU2hhZG93RG9tOnJldHVybiBuZXcgd0NlKEQsWixh''@;'; put 'put ''LGQsdixNLHRoaXMubm9uY2UsY2UpO2RlZmF1bHQ6Zj1uZXcgZFooRCxaLGQscmUsdixNLGNlKX1oLnNldChkLmlkLGYpfXJldHVybiBmfW5nT25EZXN0cm95KCl7dGhpcy5yZW5kZXJlckJ5Q29tcElkLmNsZWFyKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8YykoeHIoZ29lKSx4cih2b2UpLHhyKCR2KSx4cih2Q2UpLHhyKHZzKSx4cihpbykseHIoV2EpLHhyKEw1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgdVp7Y29uc3RydWN0b3IobCxh''@;'; put 'put ''LGQsaCl7dGhpcy5ldmVudE1hbmFnZXI9bCx0aGlzLmRvYz1hLHRoaXMubmdab25lPWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWgsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy50aHJvd09uU3ludGhldGljUHJvcHM9ITAsdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3ko''@;'; put 'put ''KXt9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiBhP3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhzWlthXXx8YSxsKTp0aGlzLmRvYy5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUobCl9YXBwZW5kQ2hpbGQobCxhKXsoX29lKGwpP2wuY29udGVudDpsKS5hcHBlbmRDaGlsZChhKX1pbnNlcnRCZWZvcmUobCxhLGQpe2wmJihfb2UobCk/bC5jb250ZW50OmwpLmluc2VydEJlZm9yZShhLGQpfXJlbW92ZUNoaWxkKGwsYSl7bCYmbC5y''@;'; put 'put ''ZW1vdmVDaGlsZChhKX1zZWxlY3RSb290RWxlbWVudChsLGEpe2xldCBkPSJzdHJpbmciPT10eXBlb2YgbD90aGlzLmRvYy5xdWVyeVNlbGVjdG9yKGwpOmw7aWYoIWQpdGhyb3cgbmV3IFFuKC01MTA0LCExKTtyZXR1cm4gYXx8KGQudGV4dENvbnRlbnQ9IiIpLGR9cGFyZW50Tm9kZShsKXty''@;'; put 'put ''ZXR1cm4gbC5wYXJlbnROb2RlfW5leHRTaWJsaW5nKGwpe3JldHVybiBsLm5leHRTaWJsaW5nfXNldEF0dHJpYnV0ZShsLGEsZCxoKXtpZihoKXthPWgrIjoiK2E7Y29uc3QgZj1zWltoXTtmP2wuc2V0QXR0cmlidXRlTlMoZixhLGQpOmwuc2V0QXR0cmlidXRlKGEsZCl9ZWxzZSBsLnNldEF0''@;'; put 'put ''dHJpYnV0ZShhLGQpfXJlbW92ZUF0dHJpYnV0ZShsLGEsZCl7aWYoZCl7Y29uc3QgaD1zWltkXTtoP2wucmVtb3ZlQXR0cmlidXRlTlMoaCxhKTpsLnJlbW92ZUF0dHJpYnV0ZShgJHtkfToke2F9YCl9ZWxzZSBsLnJlbW92ZUF0dHJpYnV0ZShhKX1hZGRDbGFzcyhsLGEpe2wuY2xhc3NMaXN0''@;'; put 'put ''LmFkZChhKX1yZW1vdmVDbGFzcyhsLGEpe2wuY2xhc3NMaXN0LnJlbW92ZShhKX1zZXRTdHlsZShsLGEsZCxoKXtoJihLMy5EYXNoQ2FzZXxLMy5JbXBvcnRhbnQpP2wuc3R5bGUuc2V0UHJvcGVydHkoYSxkLGgmSzMuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTpsLnN0eWxlW2FdPWR9cmVt''@;'; put 'put ''b3ZlU3R5bGUobCxhLGQpe2QmSzMuRGFzaENhc2U/bC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShhKTpsLnN0eWxlW2FdPSIifXNldFByb3BlcnR5KGwsYSxkKXtudWxsIT1sJiYobFthXT1kKX1zZXRWYWx1ZShsLGEpe2wubm9kZVZhbHVlPWF9bGlzdGVuKGwsYSxkKXtpZigic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIGwmJiEobD10bSgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuZG9jLGwpKSl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAke2x9IGZvciBldmVudCAke2F9YCk7cmV0dXJuIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCxhLHRoaXMu''@;'; put 'put ''ZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChkKSl9ZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChsKXtyZXR1cm4gYT0+e2lmKCJfX25nVW53cmFwX18iPT09YSlyZXR1cm4gbDshMT09PSh0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI/dGhpcy5uZ1pvbmUucnVuR3VhcmRlZCgoKT0+bChhKSk6bChhKSkmJmEu''@;'; put 'put ''cHJldmVudERlZmF1bHQoKX19fWZ1bmN0aW9uIF9vZShjKXtyZXR1cm4iVEVNUExBVEUiPT09Yy50YWdOYW1lJiZ2b2lkIDAhPT1jLmNvbnRlbnR9Y2xhc3Mgd0NlIGV4dGVuZHMgdVp7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxEKXtzdXBlcihsLGYsdixEKSx0aGlzLnNoYXJlZFN0eWxl''@;'; put 'put ''c0hvc3Q9YSx0aGlzLmhvc3RFbD1kLHRoaXMuc2hhZG93Um9vdD1kLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdCh0aGlzLnNoYWRvd1Jvb3QpO2NvbnN0IFo9eW9lKGguaWQsaC5zdHlsZXMpO2Zvcihjb25zdCByZSBvZiBaKXtjb25z''@;'; put 'put ''dCBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO00mJmNlLnNldEF0dHJpYnV0ZSgibm9uY2UiLE0pLGNlLnRleHRDb250ZW50PXJlLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChjZSl9fW5vZGVPclNoYWRvd1Jvb3QobCl7cmV0dXJuIGw9PT10aGlzLmhvc3RFbD90aGlz''@;'; put 'put ''LnNoYWRvd1Jvb3Q6bH1hcHBlbmRDaGlsZChsLGEpe3JldHVybiBzdXBlci5hcHBlbmRDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QobCksYSl9aW5zZXJ0QmVmb3JlKGwsYSxkKXtyZXR1cm4gc3VwZXIuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhLGQpfXJlbW92''@;'; put 'put ''ZUNoaWxkKGwsYSl7cmV0dXJuIHN1cGVyLnJlbW92ZUNoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1wYXJlbnROb2RlKGwpe3JldHVybiB0aGlzLm5vZGVPclNoYWRvd1Jvb3Qoc3VwZXIucGFyZW50Tm9kZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QobCkpKX1kZXN0cm95KCl7dGhp''@;'; put 'put ''cy5zaGFyZWRTdHlsZXNIb3N0LnJlbW92ZUhvc3QodGhpcy5zaGFkb3dSb290KX19Y2xhc3MgZFogZXh0ZW5kcyB1Wntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQpe3N1cGVyKGwsZix2LE0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1hLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJv''@;'; put 'put ''eT1oLHRoaXMuc3R5bGVzPUQ/eW9lKEQsZC5zdHlsZXMpOmQuc3R5bGVzfWFwcGx5U3R5bGVzKCl7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyh0aGlzLnN0eWxlcyl9ZGVzdHJveSgpe3RoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSYmdGhpcy5zaGFyZWRTdHlsZXNIb3N0''@;'; put 'put ''LnJlbW92ZVN0eWxlcyh0aGlzLnN0eWxlcyl9fWNsYXNzIHdvZSBleHRlbmRzIGRae2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7Y29uc3QgWj1oKyItIitkLmlkO3N1cGVyKGwsYSxkLGYsdixNLEQsWiksdGhpcy5jb250ZW50QXR0cj1mdW5jdGlvbiBiQ2UoYyl7cmV0dXJuIl9uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlIi5yZXBsYWNlKGxaLGMpfShaKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uIHlDZShjKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2UobFosYyl9KFopfWFwcGx5VG9Ib3N0KGwpe3RoaXMuYXBwbHlTdHlsZXMoKSx0aGlzLnNldEF0dHJpYnV0ZShsLHRoaXMuaG9z''@;'; put 'put ''dEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQobCxhKXtjb25zdCBkPXN1cGVyLmNyZWF0ZUVsZW1lbnQobCxhKTtyZXR1cm4gc3VwZXIuc2V0QXR0cmlidXRlKGQsdGhpcy5jb250ZW50QXR0ciwiIiksZH19bGV0IENDZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbW9le2NvbnN0cnVjdG9yKGEpe3N1''@;'; put 'put ''cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoZCxoLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKX1yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gYS5yZW1vdmVF''@;'; put 'put ''dmVudExpc3RlbmVyKGQsaCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBDb2U9WyJhbHQi''@;'; put 'put ''LCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sU0NlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1Vw''@;'; put 'put ''IixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxNQ2U9e2FsdDpjPT5jLmFsdEtleSxjb250cm9sOmM9PmMuY3RybEtleSxtZXRhOmM9PmMubWV0YUtleSxzaGlmdDpjPT5jLnNoaWZ0S2V5fTtsZXQgeENlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGMgZXh0ZW5kcyBtb2V7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3VwcG9ydHMoYSl7cmV0dXJuIG51bGwhPWMucGFyc2VFdmVudE5hbWUoYSl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7Y29uc3QgZj1jLnBhcnNlRXZlbnROYW1lKGQpLHY9Yy5ldmVudENhbGxiYWNrKGYuZnVsbEtl''@;'; put 'put ''eSxoLHRoaXMubWFuYWdlci5nZXRab25lKCkpO3JldHVybiB0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50bSgpLm9uQW5kQ2FuY2VsKGEsZi5kb21FdmVudE5hbWUsdikpfXN0YXRpYyBwYXJzZUV2ZW50TmFtZShhKXtjb25zdCBkPWEudG9Mb3dlckNhc2Uo''@;'; put 'put ''KS5zcGxpdCgiLiIpLGg9ZC5zaGlmdCgpO2lmKDA9PT1kLmxlbmd0aHx8ImtleWRvd24iIT09aCYmImtleXVwIiE9PWgpcmV0dXJuIG51bGw7Y29uc3QgZj1jLl9ub3JtYWxpemVLZXkoZC5wb3AoKSk7bGV0IHY9IiIsTT1kLmluZGV4T2YoImNvZGUiKTtpZihNPi0xJiYoZC5zcGxpY2UoTSwx''@;'; put 'put ''KSx2PSJjb2RlLiIpLENvZS5mb3JFYWNoKFo9Pntjb25zdCByZT1kLmluZGV4T2YoWik7cmU+LTEmJihkLnNwbGljZShyZSwxKSx2Kz1aKyIuIil9KSx2Kz1mLDAhPWQubGVuZ3RofHwwPT09Zi5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3QgRD17fTtyZXR1cm4gRC5kb21FdmVudE5hbWU9aCxE''@;'; put 'put ''LmZ1bGxLZXk9dixEfXN0YXRpYyBtYXRjaEV2ZW50RnVsbEtleUNvZGUoYSxkKXtsZXQgaD1TQ2VbYS5rZXldfHxhLmtleSxmPSIiO3JldHVybiBkLmluZGV4T2YoImNvZGUuIik+LTEmJihoPWEuY29kZSxmPSJjb2RlLiIpLCEobnVsbD09aHx8IWgpJiYoaD1oLnRvTG93ZXJDYXNlKCksIiAi''@;'; put 'put ''PT09aD9oPSJzcGFjZSI6Ii4iPT09aCYmKGg9ImRvdCIpLENvZS5mb3JFYWNoKHY9Pnt2IT09aCYmKDAsTUNlW3ZdKShhKSYmKGYrPXYrIi4iKX0pLGYrPWgsZj09PWQpfXN0YXRpYyBldmVudENhbGxiYWNrKGEsZCxoKXtyZXR1cm4gZj0+e2MubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGYsYSkm''@;'; put 'put ''JmgucnVuR3VhcmRlZCgoKT0+ZChmKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGEpe3JldHVybiJlc2MiPT09YT8iZXNjYXBlIjphfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rv''@;'; put 'put ''a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgTW9lPVt7cHJvdmlkZTppbyx1c2VWYWx1ZToiYnJvd3NlciJ9LHtwcm92aWRlOlBrLHVzZVZhbHVlOmZ1bmN0aW9uIEVDZSgpe2laLm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTp2cyx1c2VG''@;'; put 'put ''YWN0b3J5OmZ1bmN0aW9uIEFDZSgpe3JldHVybiBmdW5jdGlvbiBvQihjKXtUQz1jfShkb2N1bWVudCksZG9jdW1lbnR9LGRlcHM6W119XSxrQ2U9dGFlKER5ZSwiYnJvd3NlciIsTW9lKSxEQ2U9bmV3IFN0KCIiKSx4b2U9W3twcm92aWRlOnRSLHVzZUNsYXNzOmNsYXNzIGhDZXthZGRUb1dp''@;'; put 'put ''bmRvdyhsKXtWdC5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGQsaD0hMCk9Pntjb25zdCBmPWwuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGQsaCk7aWYobnVsbD09Zil0aHJvdyBuZXcgUW4oNTEwMywhMSk7cmV0dXJuIGZ9LFZ0LmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT5sLmdldEFs''@;'; put 'put ''bFRlc3RhYmlsaXRpZXMoKSxWdC5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT5sLmdldEFsbFJvb3RFbGVtZW50cygpLFZ0LmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoVnQuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLFZ0LmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goZD0+e2NvbnN0''@;'; put 'put ''IGg9VnQuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKTtsZXQgZj1oLmxlbmd0aDtjb25zdCB2PWZ1bmN0aW9uKCl7Zi0tLDA9PWYmJmQoKX07aC5mb3JFYWNoKE09PntNLndoZW5TdGFibGUodil9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEsZCl7cmV0dXJuIG51bGw9PWE/bnVs''@;'; put 'put ''bDpsLmdldFRlc3RhYmlsaXR5KGEpPz8oZD90bSgpLmlzU2hhZG93Um9vdChhKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX0sZGVwczpbXX0se3Byb3ZpZGU6Wmll''@;'; put 'put ''LHVzZUNsYXNzOk1VLGRlcHM6W1dhLHhVLHRSXX0se3Byb3ZpZGU6TVUsdXNlQ2xhc3M6TVUsZGVwczpbV2EseFUsdFJdfV0sRW9lPVt7cHJvdmlkZTpGNix1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOmcyLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gVENlKCl7cmV0dXJuIG5ldyBnMn0sZGVwczpb''@;'; put 'put ''XX0se3Byb3ZpZGU6YVosdXNlQ2xhc3M6Q0NlLG11bHRpOiEwLGRlcHM6W3ZzLFdhLGlvXX0se3Byb3ZpZGU6YVosdXNlQ2xhc3M6eENlLG11bHRpOiEwLGRlcHM6W3ZzXX0sY1osdm9lLGdvZSx7cHJvdmlkZTp4OCx1c2VFeGlzdGluZzpjWn0se3Byb3ZpZGU6b29lLHVzZUNsYXNzOmZDZSxk''@;'; put 'put ''ZXBzOltdfSxbXV07bGV0IFRvZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgd2l0aFNlcnZlclRyYW5zaXRpb24oYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTokdix1c2VWYWx1ZTphLmFwcElkfV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKERDZSwxMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOlsuLi5Fb2UsLi4ueG9lXSxpbXBvcnRzOltSYSxJeWVdfSl9fXJldHVybiBjfSkoKSxJQ2U9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2M9YX1nZXRUaXRsZSgpe3JldHVybiB0aGlzLl9kb2MudGl0bGV9c2V0VGl0bGUoYSl7dGhpcy5fZG9jLnRpdGxlPWF8fCIifXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZz''@;'; put 'put ''KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7eSgzNzQ4MikseSg4MDY4NSk7Y29uc3QgaFo9e2ZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVD''@;'; put 'put ''bGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LEtuPXtyb290UGFyYW06IiIsZGNMaWI6IiIseGxtYXBzOltdLGVkaXRvcjp7c3RhcnR1cFNldDohMSx0cmVlTm9kZUxpYnJhcmllczpbXSxsaWJzQW5kVGFibGVzOltdLGxpYnJhcmllczpbXSxsaWJyYXJ5OiIiLHRhYmxl''@;'; put 'put ''OiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LHZpZXdlcjp7c3RhcnR1cFNldDohMSx0YWJsZXNTZXQ6ITEsbGlicmFyaWVzOltdLHRhYmxlczpudWxsLGxpYnJhcnk6IiIsdGFibGU6''@;'; put 'put ''IiIsbGliaW5mbzpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfSxjdXJyZW50U2VsZWN0aW9uOiIifSx2aWV3Ym94ZXM6e30sbGluZWFnZTp7bGlicmFy''@;'; put 'put ''eUxpc3Q6W10sdGFibGVzTGlzdDpbXSxjb2x1bW5zTGlzdDpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsbGliOiIiLHRhYmxlOiIiLGNvbHVtbjoiIixjdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZToiIixjdXJyZW50TGluZWFnZVBhdGhDb2x1bW46IiJ9LG1ldGFkYXRhOnttZXRhRGF0YUxpc3Q6''@;'; put 'put ''dm9pZCAwLG1ldGFEYXRhU2VhcmNoOiIiLG1ldGFPYmplY3RMaXN0OltdLG1ldGFPYmplY3RTZWFyY2g6IiIsbWV0YVJlcG9zaXRvcmllczp2b2lkIDAsc2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx2aXlhQXBpOntjb2xsZWN0aW9uc0xpc3Q6dm9pZCAwLGNvbGxlY3Rpb25zU2VhcmNoOiIiLHNl''@;'; put 'put ''bGVjdGVkUmVwb3NpdG9yeToiIn0sdXNlcm5hdjp7dXNlckxpc3Q6dm9pZCAwLHVzZXJTZWFyY2g6IiIsZ3JvdXBMaXN0OnZvaWQgMCxncm91cFNlYXJjaDoiIixyb2xlTGlzdDp2b2lkIDAscm9sZVNlYXJjaDoiIn0sb3BlcmF0b3JzOntudW1PcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIs''@;'; put 'put ''Ij49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSxjaGFyT3BlcmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4iLCJOT1QgSU4iLCJORSJdfSxoYW5kc29udGFibGU6e2RhcmtUYWJsZUhlYWRlckNsYXNzOiJkYXJrVEgifSx1c2VyRHJvcGRvd25Db25m''@;'; put 'put ''aWc6e2Nsb3NlT25EZWJ1Z0NsaWNrOiExfX07dmFyIE9vPXkoOTc1ODYpLElvZT15Lm4oT28pO2Z1bmN0aW9uIFJvZShjLGwpe3N3aXRjaChjKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihhLGQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihhLGQsaCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDQ6cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKGEsZCxoLGYpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA1OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA2OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSl7cmV0dXJuIGwu''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDc6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNLEQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxELFope3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07''@;'; put 'put ''Y2FzZSA5OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxELFoscmUpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxMDpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0sRCxaLHJlLGNlKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2RlZmF1bHQ6dGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBfYXJpdHkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiB0ZW4iKX19ZnVuY3Rpb24gbm0oYyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgYyYmITA9PT1jWyJAQGZ1bmN0aW9uYWwv''@;'; put 'put ''cGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBlZyhjKXtyZXR1cm4gZnVuY3Rpb24gbChhKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fG5tKGEpP2w6Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEtiKGMpe3JldHVybiBmdW5jdGlvbiBsKGEsZCl7c3dpdGNoKGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbDtjYXNlIDE6cmV0dXJuIG5tKGEpP2w6ZWcoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pO2RlZmF1bHQ6cmV0dXJuIG5tKGEpJiZubShkKT9sOm5tKGEpP2VnKGZ1bmN0aW9uKGgpe3JldHVybiBjKGgsZCl9KTpubShkKT9lZyhmdW5jdGlvbiho''@;'; put 'put ''KXtyZXR1cm4gYyhhLGgpfSk6YyhhLGQpfX19ZnVuY3Rpb24gTG9lKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0wLGY9Yyx2PTAsTT0hMTt2PGwubGVuZ3RofHxoPGFyZ3VtZW50cy5sZW5ndGg7KXt2YXIgRDt2PGwubGVuZ3RoJiYoIW5tKGxbdl0pfHxoPj1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoKT9EPWxbdl06KEQ9YXJndW1lbnRzW2hdLGgrPTEpLGRbdl09RCxubShEKT9NPSEwOmYtPTEsdis9MX1yZXR1cm4hTSYmZjw9MD9hLmFwcGx5KHRoaXMsZCk6Um9lKE1hdGgubWF4KDAsZiksTG9lKGMsZCxhKSl9fWNvbnN0IE9vZT1LYihmdW5jdGlvbihsLGEpe3JldHVy''@;'; put 'put ''biAxPT09bD9lZyhhKTpSb2UobCxMb2UobCxbXSxhKSl9KSxQb2U9S2IoZnVuY3Rpb24obCxhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGx8fG51bGwhPWEmJihhLmNvbnN0cnVjdG9yPT09bHx8Ik9iamVjdCI9PT1sLm5hbWUmJiJvYmplY3QiPT10eXBlb2YgYSl9KTtmdW5jdGlvbiB4UihjLGwp''@;'; put 'put ''e3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKX12YXIgRm9lPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3QgSG9lPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PT1Gb2UuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKGwp''@;'; put 'put ''e3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09Rm9lLmNhbGwobCl9OmZ1bmN0aW9uKGwpe3JldHVybiB4UigiY2FsbGVlIixsKX19KCksTkNlPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZsLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIj09PU9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKX07ZnVuY3Rpb24gTm9lKGMpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfXZhciBqQ2U9ZWcoZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBs''@;'; put 'put ''WyJmYW50YXN5LWxhbmQvZW1wdHkiXT9sWyJmYW50YXN5LWxhbmQvZW1wdHkiXSgpOm51bGwhPWwmJm51bGwhPWwuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmNvbnN0cnVjdG9yWyJmYW50YXN5LWxhbmQvZW1wdHkiXT9sLmNvbnN0cnVjdG9yWyJmYW50YXN5LWxhbmQvZW1w''@;'; put 'put ''dHkiXSgpOm51bGwhPWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmVtcHR5P2wuZW1wdHkoKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jb25zdHJ1Y3Rvci5lbXB0eT9sLmNvbnN0cnVjdG9yLmVtcHR5KCk6TkNlKGwpP1tdOk5vZShsKT8iIjpm''@;'; put 'put ''dW5jdGlvbiBWQ2UoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9KGwpP3t9OkhvZShsKT9mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCk6ZnVuY3Rpb24gQkNlKGMpe3ZhciBsPU9iamVjdC5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmcuY2FsbChjKTtyZXR1cm4iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iPT09bHx8IltvYmplY3QgSW50OEFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50OEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50MTZBcnJheV0iPT09bHx8IltvYmpl''@;'; put 'put ''Y3QgSW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgVWludDMyQXJyYXldIj09PWx8fCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iPT09bHx8IltvYmplY3QgRmxvYXQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdJbnQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdVaW50NjRBcnJheV0iPT09''@;'; put 'put ''bH0obCk/bC5jb25zdHJ1Y3Rvci5mcm9tKCIiKTp2b2lkIDB9KTtjb25zdCB6Q2U9akNlO2Z1bmN0aW9uIFZvZShjKXtmb3IodmFyIGEsbD1bXTshKGE9Yy5uZXh0KCkpLmRvbmU7KWwucHVzaChhLnZhbHVlKTtyZXR1cm4gbH1mdW5jdGlvbiBCb2UoYyxsLGEpe2Zvcih2YXIgZD0wLGg9YS5s''@;'; put 'put ''ZW5ndGg7ZDxoOyl7aWYoYyhsLGFbZF0pKXJldHVybiEwO2QrPTF9cmV0dXJuITF9Y29uc3QgZlo9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24gWkNlKGMsbCl7cmV0dXJuIGM9PT1sPzAhPT1jfHwxL2M9PTEvbDpjIT1jJiZsIT1sfTt2YXIgV0NlPSF7''@;'; put 'put ''dG9TdHJpbmc6bnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIiksam9lPVsiY29uc3RydWN0b3IiLCJ2YWx1ZU9mIiwiaXNQcm90b3R5cGVPZiIsInRvU3RyaW5nIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJoYXNPd25Qcm9wZXJ0eSIsInRvTG9jYWxlU3RyaW5nIl0sem9l''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgibGVuZ3RoIil9KCksWUNlPWZ1bmN0aW9uKGwsYSl7Zm9yKHZhciBkPTA7ZDxsLmxlbmd0aDspe2lmKGxbZF09PT1hKXJldHVybiEwO2QrPTF9cmV0dXJuITF9O2NvbnN0IFVvZT1lZygiZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgT2JqZWN0LmtleXN8fHpvZT9mdW5jdGlvbihsKXtpZihPYmplY3QobCkhPT1sKXJldHVybltdO3ZhciBhLGQsaD1bXSxmPXpvZSYmSG9lKGwpO2ZvcihhIGluIGwpeFIoYSxsKSYmKCFmfHwibGVuZ3RoIiE9PWEpJiYoaFtoLmxlbmd0aF09YSk7aWYoV0NlKWZvcihkPWpvZS5s''@;'; put 'put ''ZW5ndGgtMTtkPj0wOyl4UihhPWpvZVtkXSxsKSYmIVlDZShoLGEpJiYoaFtoLmxlbmd0aF09YSksZC09MTtyZXR1cm4gaH06ZnVuY3Rpb24obCl7cmV0dXJuIE9iamVjdChsKSE9PWw/W106T2JqZWN0LmtleXMobCl9KSxab2U9ZWcoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxs''@;'; put 'put ''Ijp2b2lkIDA9PT1sPyJVbmRlZmluZWQiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9uIFdvZShjLGwsYSxkKXt2YXIgaD1Wb2UoYyk7ZnVuY3Rpb24gdihNLEQpe3JldHVybiBwWihNLEQsYS5zbGljZSgpLGQuc2xpY2UoKSl9cmV0dXJu''@;'; put 'put ''IUJvZShmdW5jdGlvbihNLEQpe3JldHVybiFCb2UodixELE0pfSxWb2UobCksaCl9ZnVuY3Rpb24gcFooYyxsLGEsZCl7aWYoZlooYyxsKSlyZXR1cm4hMDt2YXIgaD1ab2UoYyk7aWYoaCE9PVpvZShsKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgY1siZmFudGFzeS1sYW5kL2Vx''@;'; put 'put ''dWFscyJdfHwiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0mJmNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXShsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGxbImZhbnRhc3ktbGFu''@;'; put 'put ''ZC9lcXVhbHMiXSYmbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdKGMpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmVxdWFsc3x8ImZ1bmN0aW9uIj09dHlwZW9mIGwuZXF1YWxzKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjLmVxdWFscyYmYy5lcXVhbHMobCkmJiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBsLmVxdWFscyYmbC5lcXVhbHMoYyk7c3dpdGNoKGgpe2Nhc2UiQXJndW1lbnRzIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuY29uc3RydWN0b3ImJiJQcm9taXNlIj09PWZ1bmN0aW9uIFVDZShjKXt2YXIgbD1TdHJpbmcoYykubWF0Y2goL15m''@;'; put 'put ''dW5jdGlvbiAoXHcqKS8pO3JldHVybiBudWxsPT1sPyIiOmxbMV19KGMuY29uc3RydWN0b3IpKXJldHVybiBjPT09bDticmVhaztjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6aWYodHlwZW9mIGMhPXR5cGVvZiBsfHwhZlooYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkp''@;'; put 'put ''KXJldHVybiExO2JyZWFrO2Nhc2UiRGF0ZSI6aWYoIWZaKGMudmFsdWVPZigpLGwudmFsdWVPZigpKSlyZXR1cm4hMTticmVhaztjYXNlIkVycm9yIjpyZXR1cm4gYy5uYW1lPT09bC5uYW1lJiZjLm1lc3NhZ2U9PT1sLm1lc3NhZ2U7Y2FzZSJSZWdFeHAiOmlmKGMuc291cmNlIT09bC5zb3Vy''@;'; put 'put ''Y2V8fGMuZ2xvYmFsIT09bC5nbG9iYWx8fGMuaWdub3JlQ2FzZSE9PWwuaWdub3JlQ2FzZXx8Yy5tdWx0aWxpbmUhPT1sLm11bHRpbGluZXx8Yy5zdGlja3khPT1sLnN0aWNreXx8Yy51bmljb2RlIT09bC51bmljb2RlKXJldHVybiExfWZvcih2YXIgZj1hLmxlbmd0aC0xO2Y+PTA7KXtpZihh''@;'; put 'put ''W2ZdPT09YylyZXR1cm4gZFtmXT09PWw7Zi09MX1zd2l0Y2goaCl7Y2FzZSJNYXAiOnJldHVybiBjLnNpemU9PT1sLnNpemUmJldvZShjLmVudHJpZXMoKSxsLmVudHJpZXMoKSxhLmNvbmNhdChbY10pLGQuY29uY2F0KFtsXSkpO2Nhc2UiU2V0IjpyZXR1cm4gYy5zaXplPT09bC5zaXplJiZX''@;'; put 'put ''b2UoYy52YWx1ZXMoKSxsLnZhbHVlcygpLGEuY29uY2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjpjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJEYXRlIjpjYXNlIkVycm9yIjpjYXNlIlJl''@;'; put 'put ''Z0V4cCI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWludDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRB''@;'; put 'put ''cnJheSI6Y2FzZSJBcnJheUJ1ZmZlciI6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX12YXIgdj1Vb2UoYyk7aWYodi5sZW5ndGghPT1Vb2UobCkubGVuZ3RoKXJldHVybiExO3ZhciBNPWEuY29uY2F0KFtjXSksRD1kLmNvbmNhdChbbF0pO2ZvcihmPXYubGVuZ3RoLTE7Zj49MDspe3ZhciBaPXZb''@;'; put 'put ''Zl07aWYoIXhSKFosbCl8fCFwWihsW1pdLGNbWl0sTSxEKSlyZXR1cm4hMTtmLT0xfXJldHVybiEwfWNvbnN0IHFDZT1LYihmdW5jdGlvbihsLGEpe3JldHVybiBwWihsLGEsW10sW10pfSksWW9lPWVnKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZxQ2UobCx6Q2UobCkpfSk7ZnVuY3Rp''@;'; put 'put ''b24gSU0oYyl7cmV0dXJuIG51bGw9PWN9ZnVuY3Rpb24gUk0oYyl7cmV0dXJuIElNKGMpfHxZb2UoYyl9ZnVuY3Rpb24gZ1ooYyl7cmV0dXJuIFBvZShTdHJpbmcsYyl9ZnVuY3Rpb24gS29lKGMsbCl7cmV0dXJuIGMhPT1sfWZ1bmN0aW9uIFFvZShjPXdpbmRvdyl7cmV0dXJuIUlNKGMpfWNv''@;'; put 'put ''bnN0IG9TZT1OdW1iZXIuaXNJbnRlZ2VyfHxmdW5jdGlvbihsKXtyZXR1cm4oMHxsKT09PWx9LGxTZT1LYihmdW5jdGlvbihsLGEpe3ZhciBkPWw8MD9hLmxlbmd0aCtsOmw7cmV0dXJuIE5vZShhKT9hLmNoYXJBdChkKTphW2RdfSksdVNlPUtiKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFw''@;'; put 'put ''KGZ1bmN0aW9uKGQpe2Zvcih2YXIgdixoPWEsZj0wO2Y8ZC5sZW5ndGg7KXtpZihudWxsPT1oKXJldHVybjtoPW9TZSh2PWRbZl0pP2xTZSh2LGgpOmhbdl0sZis9MX1yZXR1cm4gaH0pfSksaFNlPUtiKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIHVTZShbbF0sYSlbMF19KSxwU2U9T29lKDIsKGMs''@;'; put 'put ''bCk9PnZvaWQgMCE9PWhTZShjLGwpKSxlc2U9cFNlKHsiQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyIjohMH0sd2luZG93KTtsZXQgVFIsdHNlLG1aLHZaO2Z1bmN0aW9uIG5zZShjPSEwKXtpZighY3x8IVRSKXtjb25zdCBsPWRvY3VtZW50JiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbbmct''@;'; put 'put ''dmVyc2lvbl0iKTtUUj1sPyIiK2wuZ2V0QXR0cmlidXRlKCJuZy12ZXJzaW9uIik6dm9pZCAwfXJldHVybiBUUn1mdW5jdGlvbiBtU2UoYz0hMCl7cmV0dXJuIGMmJlRSfHwodHNlPXdpbmRvdz8uYW5ndWxhcj8udmVyc2lvbj8uZnVsbCksdHNlfWZ1bmN0aW9uIHJzZShjPSEwKXtyZXR1cm4g''@;'; put 'put ''YyYmbVp8fChtWj13aW5kb3c/LkNEUz8uX3JlYWN0Py52ZXJzaW9uP3dpbmRvdy5DRFMuX3JlYWN0LnZlcnNpb246ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW2RhdGEtcmVhY3Ryb290XSwgW2RhdGEtcmVhY3RpZF0iKT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDApLG1afWZ1bmN0aW9uIGlz''@;'; put 'put ''ZShjPSEwKXtpZighY3x8IXZaKXtjb25zdCBsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTtsZXQgYTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKylpZihsW2RdLl9fdnVlX18pe2E9bFtkXTticmVha312Wj1hPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMH1yZXR1cm4gdlp9ZnVu''@;'; put 'put ''Y3Rpb24gVzgoYyl7cmV0dXJuIGMucmVwbGFjZSgvW0EtWl0vZyxsPT4iLSIrbC50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBzc2UoYyl7cmV0dXJuIGMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKX1jb25zdCBDU2U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7aWYodGhpcy5z''@;'; put 'put ''dXBwb3J0cz17anM6ITB9LCFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIil8fCJuby1qcyI9PT1kb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIikpe2NvbnN0IGM9VzgoT2JqZWN0LmtleXModGhpcy5zdXBwb3J0cykucmVkdWNlKChsLGEp''@;'; put 'put ''PT5gJHtsfSAke3RoaXMuc3VwcG9ydHNbYV0/YToibm8tIithfWAsIiIpKS50cmltKCk7ZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIsYyl9fX07Y2xhc3MgTE17c3RhdGljIGxvZyguLi5sKXtfWigpJiZ5WigpJiZjb25zb2xlLmxvZyguLi5sKX1zdGF0aWMgd2Fy''@;'; put 'put ''biguLi5sKXtfWigpJiZ5WigpJiZjb25zb2xlLndhcm4oLi4ubCl9c3RhdGljIGVycm9yKC4uLmwpe19aKCkmJnlaKCkmJmNvbnNvbGUuZXJyb3IoLi4ubCl9fWZ1bmN0aW9uIHlaKCl7cmV0dXJuIWVzZShbImphc21pbmUiXSl9ZnVuY3Rpb24gX1ooKXtyZXR1cm4hd2luZG93LkNEUy5lbnZp''@;'; put 'put ''cm9ubWVudC5wcm9kdWN0aW9ufWZ1bmN0aW9uIHVzZSgpe1FvZSgpJiYod2luZG93LkNEUz13aW5kb3cuQ0RTfHx7X3ZlcnNpb246W10sX3JlYWN0Ont2ZXJzaW9uOnZvaWQgMH0sX3N1cHBvcnRzOkNTZS5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRlOntmb2N1c1RyYXBJdGVt''@;'; put 'put ''czpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVtZW50UmVnaXN0cnk6e30saWNvblJlZ2lzdHJ5Ont9LG1vdGlvblJlZ2lzdHJ5Ont9fSxlbnZpcm9ubWVudDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpkc2UsbG9nRGV0YWlsczpTU2V9LGZ1bmN0aW9uKCl7Y29u''@;'; put 'put ''c3QgYz0iNi4xNS4xIjt3aW5kb3cuQ0RTLl92ZXJzaW9uLmluZGV4T2YoYyk8MCYmKHdpbmRvdy5DRFMuX3ZlcnNpb24ucHVzaChjKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik/LnNldEF0dHJpYnV0ZSgiY2RzLXZlcnNpb24iLHdpbmRvdy5DRFMuX3ZlcnNpb24uam9pbigiICIp''@;'; put 'put ''KSksd2luZG93LkNEUy5fdmVyc2lvbi5sZW5ndGg+MSYmTE0ud2FybigiUnVubmluZyBtb3JlIHRoYW4gb25lIHZlcnNpb24gb2YgQ2xhcml0eSBjYW4gY2F1c2UgdW5leHBlY3RlZCBpc3N1ZXMuIFBsZWFzZSBlbnN1cmUgb25seSBvbmUgdmVyc2lvbiBpcyBsb2FkZWQuIil9KCksd2luZG93''@;'; put 'put ''LkNEUy5faXNTdGF0ZVByb3hpZWR8fCh3aW5kb3cuQ0RTLl9pc1N0YXRlUHJveGllZD0hMCx3aW5kb3cuQ0RTLl9zdGF0ZT1uZXcgUHJveHkod2luZG93LkNEUy5fc3RhdGUse3NldDooYyxsLGEpPT57Y29uc3QgZD17a2V5OmwscHJldjp3aW5kb3cuQ0RTLl9zdGF0ZVtsXSxjdXJyZW50OmF9''@;'; put 'put ''O3JldHVybiBjW2xdPWEsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIkNEU19TVEFURV9VUERBVEUiLHtkZXRhaWw6ZH0pKSwhMH19KSkpfWZ1bmN0aW9uIGRzZSgpe3JldHVybnt2ZXJzaW9uczp3aW5kb3cuQ0RTLl92ZXJzaW9uLGVudmlyb25tZW50OndpbmRvdy5D''@;'; put 'put ''RFMuZW52aXJvbm1lbnQsdXNlckFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsc3VwcG9ydHM6d2luZG93LkNEUy5fc3VwcG9ydHMsYW5ndWxhclZlcnNpb246bnNlKCExKSxhbmd1bGFySlNWZXJzaW9uOm1TZSghMSkscmVhY3RWZXJzaW9uOnJzZSghMSksdnVlVmVyc2lvbjppc2UoITEpLHN0''@;'; put 'put ''YXRlOnsuLi53aW5kb3cuQ0RTLl9zdGF0ZSxpY29uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuaWNvblJlZ2lzdHJ5KSxtb3Rpb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5tb3Rpb25SZWdpc3RyeSksZm9jdXNUcmFwUmVnaXN0cnk6T2Jq''@;'; put 'put ''ZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZm9jdXNUcmFwSXRlbXMubWFwKGM9PmMuZm9jdXNUcmFwSWQpKX19fWZ1bmN0aW9uIFNTZSgpe0xNLmxvZyhKU09OLnN0cmluZ2lmeShkc2UoKSxudWxsLDIpKX1jb25zdCBNU2U9T29lKDMsKGMsbCxhKT0+eyFmdW5jdGlvbiBnU2UoYyxsKXty''@;'; put 'put ''ZXR1cm4gbHx8KGw9d2luZG93JiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMpLCFsfHwhIWwuZ2V0KGMpfShjKXx8ZnVuY3Rpb24gdlNlKCl7cmV0dXJuIHdpbmRvdz8ubG9jYXRpb24/LmhyZWY/LmluY2x1ZGVzKCJsb2NhbGhvc3Q6NjAwNiIpfSgpPyhhLmRlZmluZShjLGwpLHVzZSgpLHdpbmRv''@;'; put 'put ''dyYmIU9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSkuc29tZShkPT5kPT09YykmJih3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnk9ey4uLndpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSxbY106e319KSk6TE0ud2FybihjKyIgaGFz''@;'; put 'put ''IGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIil9KTtmdW5jdGlvbiBVZihjLGwsYSxkKXt2YXIgdixoPWFyZ3VtZW50cy5sZW5ndGgsZj1oPDM/bDpudWxsPT09ZD9kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxhKTpkO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpZj1SZWZsZWN0LmRlY29yYXRlKGMsbCxhLGQpO2Vsc2UgZm9yKHZhciBNPWMubGVuZ3RoLTE7TT49MDtNLS0pKHY9Y1tNXSkmJihmPShoPDM/dihmKTpoPjM/dihsLGEsZik6dihsLGEpKXx8Zik7cmV0dXJuIGg+MyYmZiYmT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGwsYSxmKSxmfWZ1bmN0aW9uIHJtKGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygcm0/KHRoaXMudj1jLHRoaXMpOm5ldyBybShjKX1mdW5jdGlvbiBnc2UoYyl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3lu''@;'; put 'put ''Y0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBhLGw9Y1tTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIGw/bC5jYWxsKGMpOihjPWZ1bmN0aW9uIE1aKGMpe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixhPWwmJmNbbF0sZD0wO2lmKGEp''@;'; put 'put ''cmV0dXJuIGEuY2FsbChjKTtpZihjJiYibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGMmJmQ+PWMubGVuZ3RoJiYoYz12b2lkIDApLHt2YWx1ZTpjJiZjW2QrK10sZG9uZTohY319fTt0aHJvdyBuZXcgVHlwZUVycm9yKGw/Ik9iamVjdCBp''@;'; put 'put ''cyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfShjKSxhPXt9LGQoIm5leHQiKSxkKCJ0aHJvdyIpLGQoInJldHVybiIpLGFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGEpO2Z1bmN0aW9uIGQoZil7YVtmXT1j''@;'; put 'put ''W2ZdJiZmdW5jdGlvbih2KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oTSxEKXshZnVuY3Rpb24gaChmLHYsTSxEKXtQcm9taXNlLnJlc29sdmUoRCkudGhlbihmdW5jdGlvbihaKXtmKHt2YWx1ZTpaLGRvbmU6TX0pfSx2KX0oTSxELCh2PWNbZl0odikpLmRvbmUsdi52YWx1ZSl9KX19''@;'; put 'put ''fSJmdW5jdGlvbiI9PXR5cGVvZiBTdXBwcmVzc2VkRXJyb3ImJlN1cHByZXNzZWRFcnJvcjtsZXQgbXNlPSExO2Z1bmN0aW9uIFhTZShjKXtpZigoYz1NYXRoLnRydW5jKGMpfHwwKTwwJiYoYys9dGhpcy5sZW5ndGgpLCEoYzwwfHxjPj10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXNbY119aWYo''@;'; put 'put ''IW1zZSl7bXNlPSEwO2NvbnN0IGM9UmVmbGVjdC5nZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkpO2Zvcihjb25zdCBsIG9mW0FycmF5LFN0cmluZyxjXSlPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImF0Iix7dmFsdWU6WFNlLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29u''@;'; put 'put ''ZmlndXJhYmxlOiEwfSl9bGV0IHZzZT0hMSxic2U9ITE7ZnVuY3Rpb24geXNlKGMsbCxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUobCk/dGhpcy5nZXRBdHRy''@;'; put 'put ''aWJ1dGUobCk6bnVsbH0sc2V0OmZ1bmN0aW9uKGQpe251bGwhPT1kP3RoaXMuc2V0QXR0cmlidXRlKGwsZCk6dGhpcy5yZW1vdmVBdHRyaWJ1dGUobCl9fSl9dnNlfHxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgicm9sZSIpfHwoeXNlKEVsZW1lbnQucHJvdG90eXBlLCJyb2xl''@;'; put 'put ''Iiwicm9sZSIpLHZzZT0hMCksYnNlfHxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgiYXJpYUxhYmVsIil8fChic2U9ITAsWyJBY3RpdmVEZXNjZW5kYW50IiwiQXRvbWljIiwiQXV0b0NvbXBsZXRlIiwiQnVzeSIsIkNoZWNrZWQiLCJDb2xDb3VudCIsIkNvbEluZGV4IiwiQ29s''@;'; put 'put ''U3BhbiIsIkNvbnRyb2xzIiwiQ3VycmVudCIsIkRlc2NyaWJlZEJ5IiwiRGV0YWlscyIsIkRpc2FibGVkIiwiRXJyb3JNZXNzYWdlIiwiRXhwYW5kZWQiLCJGbG93VG8iLCJIYXNQb3B1cCIsIkhpZGRlbiIsIkludmFsaWQiLCJLZXlTaG9ydGN1dHMiLCJMYWJlbCIsIkxhYmVsbGVkQnkiLCJM''@;'; put 'put ''ZXZlbCIsIkxpdmUiLCJNb2RhbCIsIk11bHRpTGluZSIsIk11bHRpU2VsZWN0YWJsZSIsIk9yaWVudGF0aW9uIiwiT3ducyIsIlBsYWNlaG9sZGVyIiwiUG9zSW5TZXQiLCJQcmVzc2VkIiwiUmVhZE9ubHkiLCJSZWxldmFudCIsIlJlcXVpcmVkIiwiUm9sZURlc2NyaXB0aW9uIiwiUm93Q291''@;'; put 'put ''bnQiLCJSb3dJbmRleCIsIlJvd1NwYW4iLCJTZWxlY3RlZCIsIlNldFNpemUiLCJTb3J0IiwiVmFsdWVNYXgiLCJWYWx1ZU1pbiIsIlZhbHVlTm93IiwiVmFsdWVUZXh0Il0uZm9yRWFjaChjPT55c2UoRWxlbWVudC5wcm90b3R5cGUsImFyaWEtIitjLnRvTG93ZXJDYXNlKCksImFyaWEiK2Mp''@;'; put 'put ''KSk7Y29uc3QgQVI9d2luZG93LEVaPUFSLlNoYWRvd1Jvb3QmJih2b2lkIDA9PT1BUi5TaGFkeUNTU3x8QVIuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBl''@;'; put 'put ''LFRaPVN5bWJvbCgpLF9zZT1uZXcgV2Vha01hcDtjbGFzcyB3c2V7Y29uc3RydWN0b3IobCxhLGQpe2lmKHRoaXMuXyRjc3NSZXN1bHQkPSEwLGQhPT1UWil0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVh''@;'; put 'put ''ZC4iKTt0aGlzLmNzc1RleHQ9bCx0aGlzLnQ9YX1nZXQgc3R5bGVTaGVldCgpe2xldCBsPXRoaXMubztjb25zdCBhPXRoaXMudDtpZihFWiYmdm9pZCAwPT09bCl7Y29uc3QgZD12b2lkIDAhPT1hJiYxPT09YS5sZW5ndGg7ZCYmKGw9X3NlLmdldChhKSksdm9pZCAwPT09bCYmKCh0aGlzLm89''@;'; put 'put ''bD1uZXcgQ1NTU3R5bGVTaGVldCkucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSxkJiZfc2Uuc2V0KGEsbCkpfXJldHVybiBsfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19Y29uc3QgQ3NlPShjLC4uLmwpPT57Y29uc3QgYT0xPT09Yy5sZW5ndGg/Y1swXTpsLnJlZHVjZSgoZCxo''@;'; put 'put ''LGYpPT5kKyh2PT57aWYoITA9PT12Ll8kY3NzUmVzdWx0JClyZXR1cm4gdi5jc3NUZXh0O2lmKCJudW1iZXIiPT10eXBlb2YgdilyZXR1cm4gdjt0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIrdisi''@;'; put 'put ''LiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuIil9KShoKStjW2YrMV0sY1swXSk7cmV0dXJuIG5ldyB3c2UoYSxjLFRaKX0sU3NlPUVaP2M9PmM6Yz0+YyBpbnN0YW5jZW9mIENTU1N0eWxl''@;'; put 'put ''U2hlZXQ/KGw9PntsZXQgYT0iIjtmb3IoY29uc3QgZCBvZiBsLmNzc1J1bGVzKWErPWQuY3NzVGV4dDtyZXR1cm4oYz0+bmV3IHdzZSgic3RyaW5nIj09dHlwZW9mIGM/YzpjKyIiLHZvaWQgMCxUWikpKGEpfSkoYyk6Yzt2YXIgQVo7Y29uc3Qga1I9d2luZG93LE1zZT1rUi50cnVzdGVkVHlw''@;'; put 'put ''ZXMsZU1lPU1zZT9Nc2UuZW1wdHlTY3JpcHQ6IiIseHNlPWtSLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxrWj17dG9BdHRyaWJ1dGUoYyxsKXtzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmM9Yz9lTWU6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmM9bnVsbD09Yz9j''@;'; put 'put ''OkpTT04uc3RyaW5naWZ5KGMpfXJldHVybiBjfSxmcm9tQXR0cmlidXRlKGMsbCl7bGV0IGE9Yztzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmE9bnVsbCE9PWM7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09Yz9udWxsOk51bWJlcihjKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRy''@;'; put 'put ''eXthPUpTT04ucGFyc2UoYyl9Y2F0Y2h7YT1udWxsfX1yZXR1cm4gYX19LEVzZT0oYyxsKT0+bCE9PWMmJihsPT1sfHxjPT1jKSxEWj17YXR0cmlidXRlOiEwLHR5cGU6U3RyaW5nLGNvbnZlcnRlcjprWixyZWZsZWN0OiExLGhhc0NoYW5nZWQ6RXNlfSxJWj0iZmluYWxpemVkIjtjbGFzcyBx''@;'; put 'put ''YiBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl8kRWk9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMSx0aGlzLmhhc1VwZGF0ZWQ9ITEsdGhpcy5fJEVsPW51bGwsdGhpcy5fJEV1KCl9c3RhdGljIGFkZEluaXRpYWxpemVyKGwpe3ZhciBhO3Ro''@;'; put 'put ''aXMuZmluYWxpemUoKSwobnVsbCE9PShhPXRoaXMuaCkmJnZvaWQgMCE9PWE/YTp0aGlzLmg9W10pLnB1c2gobCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXt0aGlzLmZpbmFsaXplKCk7Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllcy5mb3JFYWNoKChh''@;'; put 'put ''LGQpPT57Y29uc3QgaD10aGlzLl8kRXAoZCxhKTt2b2lkIDAhPT1oJiYodGhpcy5fJEV2LnNldChoLGQpLGwucHVzaChoKSl9KSxsfXN0YXRpYyBjcmVhdGVQcm9wZXJ0eShsLGE9RFope2lmKGEuc3RhdGUmJihhLmF0dHJpYnV0ZT0hMSksdGhpcy5maW5hbGl6ZSgpLHRoaXMuZWxlbWVudFBy''@;'; put 'put ''b3BlcnRpZXMuc2V0KGwsYSksIWEubm9BY2Nlc3NvciYmIXRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KGwpKXtjb25zdCBkPSJzeW1ib2wiPT10eXBlb2YgbD9TeW1ib2woKToiX18iK2wsaD10aGlzLmdldFByb3BlcnR5RGVzY3JpcHRvcihsLGQsYSk7dm9pZCAwIT09aCYmT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLGwsaCl9fXN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxhLGQpe3JldHVybntnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe2NvbnN0IGY9dGhpc1tsXTt0aGlzW2FdPWgsdGhpcy5yZXF1ZXN0VXBkYXRlKGwsZixkKX0sY29u''@;'; put 'put ''ZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fXN0YXRpYyBnZXRQcm9wZXJ0eU9wdGlvbnMobCl7cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZ2V0KGwpfHxEWn1zdGF0aWMgZmluYWxpemUoKXtpZih0aGlzLmhhc093blByb3BlcnR5KElaKSlyZXR1cm4hMTt0aGlzW0laXT0hMDtj''@;'; put 'put ''b25zdCBsPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZihsLmZpbmFsaXplKCksdm9pZCAwIT09bC5oJiYodGhpcy5oPVsuLi5sLmhdKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAobC5lbGVtZW50UHJvcGVydGllcyksdGhpcy5fJEV2PW5ldyBNYXAsdGhpcy5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eSgicHJvcGVydGllcyIpKXtjb25zdCBhPXRoaXMucHJvcGVydGllcyxkPVsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKSwuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGEpXTtmb3IoY29uc3QgaCBvZiBkKXRoaXMuY3JlYXRlUHJvcGVydHkoaCxhW2hdKX1y''@;'; put 'put ''ZXR1cm4gdGhpcy5lbGVtZW50U3R5bGVzPXRoaXMuZmluYWxpemVTdHlsZXModGhpcy5zdHlsZXMpLCEwfXN0YXRpYyBmaW5hbGl6ZVN0eWxlcyhsKXtjb25zdCBhPVtdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGQ9bmV3IFNldChsLmZsYXQoMS8wKS5yZXZlcnNlKCkpO2Zvcihjb25z''@;'; put 'put ''dCBoIG9mIGQpYS51bnNoaWZ0KFNzZShoKSl9ZWxzZSB2b2lkIDAhPT1sJiZhLnB1c2goU3NlKGwpKTtyZXR1cm4gYX1zdGF0aWMgXyRFcChsLGEpe2NvbnN0IGQ9YS5hdHRyaWJ1dGU7cmV0dXJuITE9PT1kP3ZvaWQgMDoic3RyaW5nIj09dHlwZW9mIGQ/ZDoic3RyaW5nIj09dHlwZW9mIGw/''@;'; put 'put ''bC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1fJEV1KCl7dmFyIGw7dGhpcy5fJEVfPW5ldyBQcm9taXNlKGE9PnRoaXMuZW5hYmxlVXBkYXRpbmc9YSksdGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5fJEVnKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCksbnVsbD09PShsPXRoaXMuY29uc3RydWN0b3IuaCl8''@;'; put 'put ''fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT5hKHRoaXMpKX1hZGRDb250cm9sbGVyKGwpe3ZhciBhLGQ7KG51bGwhPT0oYT10aGlzLl8kRVMpJiZ2b2lkIDAhPT1hP2E6dGhpcy5fJEVTPVtdKS5wdXNoKGwpLHZvaWQgMCE9PXRoaXMucmVuZGVyUm9vdCYmdGhpcy5pc0Nvbm5lY3RlZCYmKG51''@;'; put 'put ''bGw9PT0oZD1sLmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1kfHxkLmNhbGwobCkpfXJlbW92ZUNvbnRyb2xsZXIobCl7dmFyIGE7bnVsbD09PShhPXRoaXMuXyRFUyl8fHZvaWQgMD09PWF8fGEuc3BsaWNlKHRoaXMuXyRFUy5pbmRleE9mKGwpPj4+MCwxKX1fJEVnKCl7dGhpcy5jb25zdHJ1''@;'; put 'put ''Y3Rvci5lbGVtZW50UHJvcGVydGllcy5mb3JFYWNoKChsLGEpPT57dGhpcy5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuXyRFaS5zZXQoYSx0aGlzW2FdKSxkZWxldGUgdGhpc1thXSl9KX1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGw7Y29uc3QgYT1udWxsIT09KGw9dGhpcy5zaGFkb3dSb290''@;'; put 'put ''KSYmdm9pZCAwIT09bD9sOnRoaXMuYXR0YWNoU2hhZG93KHRoaXMuY29uc3RydWN0b3Iuc2hhZG93Um9vdE9wdGlvbnMpO3JldHVybigoYyxsKT0+e0VaP2MuYWRvcHRlZFN0eWxlU2hlZXRzPWwubWFwKGE9PmEgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0P2E6YS5zdHlsZVNoZWV0KTpsLmZv''@;'; put 'put ''ckVhY2goYT0+e2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxoPUFSLmxpdE5vbmNlO3ZvaWQgMCE9PWgmJmQuc2V0QXR0cmlidXRlKCJub25jZSIsaCksZC50ZXh0Q29udGVudD1hLmNzc1RleHQsYy5hcHBlbmRDaGlsZChkKX0pfSkoYSx0aGlzLmNvbnN0cnVjdG9y''@;'; put 'put ''LmVsZW1lbnRTdHlsZXMpLGF9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDt2b2lkIDA9PT10aGlzLnJlbmRlclJvb3QmJih0aGlzLnJlbmRlclJvb3Q9dGhpcy5jcmVhdGVSZW5kZXJSb290KCkpLHRoaXMuZW5hYmxlVXBkYXRpbmcoITApLG51bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9''@;'; put 'put ''PT1sfHxsLmZvckVhY2goYT0+e3ZhciBkO3JldHVybiBudWxsPT09KGQ9YS5ob3N0Q29ubmVjdGVkKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jYWxsKGEpfSl9ZW5hYmxlVXBkYXRpbmcobCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7bnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQg''@;'; put 'put ''MD09PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD1hLmhvc3REaXNjb25uZWN0ZWQpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNhbGwoYSl9KX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobCxhLGQpe3RoaXMuXyRBSyhsLGQpfV8kRU8obCxhLGQ9RFope3ZhciBoO2Nv''@;'; put 'put ''bnN0IGY9dGhpcy5jb25zdHJ1Y3Rvci5fJEVwKGwsZCk7aWYodm9pZCAwIT09ZiYmITA9PT1kLnJlZmxlY3Qpe2NvbnN0IHY9KHZvaWQgMCE9PShudWxsPT09KGg9ZC5jb252ZXJ0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnRvQXR0cmlidXRlKT9kLmNvbnZlcnRlcjprWikudG9BdHRyaWJ1''@;'; put 'put ''dGUoYSxkLnR5cGUpO3RoaXMuXyRFbD1sLG51bGw9PXY/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZik6dGhpcy5zZXRBdHRyaWJ1dGUoZix2KSx0aGlzLl8kRWw9bnVsbH19XyRBSyhsLGEpe3ZhciBkO2NvbnN0IGg9dGhpcy5jb25zdHJ1Y3RvcixmPWguXyRFdi5nZXQobCk7aWYodm9pZCAwIT09''@;'; put 'put ''ZiYmdGhpcy5fJEVsIT09Zil7Y29uc3Qgdj1oLmdldFByb3BlcnR5T3B0aW9ucyhmKSxNPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmNvbnZlcnRlcj97ZnJvbUF0dHJpYnV0ZTp2LmNvbnZlcnRlcn06dm9pZCAwIT09KG51bGw9PT0oZD12LmNvbnZlcnRlcil8fHZvaWQgMD09PWQ/dm9pZCAwOmQu''@;'; put 'put ''ZnJvbUF0dHJpYnV0ZSk/di5jb252ZXJ0ZXI6a1o7dGhpcy5fJEVsPWYsdGhpc1tmXT1NLmZyb21BdHRyaWJ1dGUoYSx2LnR5cGUpLHRoaXMuXyRFbD1udWxsfX1yZXF1ZXN0VXBkYXRlKGwsYSxkKXtsZXQgaD0hMDt2b2lkIDAhPT1sJiYoKChkPWR8fHRoaXMuY29uc3RydWN0b3IuZ2V0UHJv''@;'; put 'put ''cGVydHlPcHRpb25zKGwpKS5oYXNDaGFuZ2VkfHxFc2UpKHRoaXNbbF0sYSk/KHRoaXMuXyRBTC5oYXMobCl8fHRoaXMuXyRBTC5zZXQobCxhKSwhMD09PWQucmVmbGVjdCYmdGhpcy5fJEVsIT09bCYmKHZvaWQgMD09PXRoaXMuXyRFQyYmKHRoaXMuXyRFQz1uZXcgTWFwKSx0aGlzLl8kRUMu''@;'; put 'put ''c2V0KGwsZCkpKTpoPSExKSwhdGhpcy5pc1VwZGF0ZVBlbmRpbmcmJmgmJih0aGlzLl8kRV89dGhpcy5fJEVqKCkpfV8kRWooKXt2YXIgbD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsLmlzVXBkYXRlUGVuZGluZz0hMDt0cnl7eWllbGQgbC5fJEVffWNhdGNoKGQpe1Byb21pc2UucmVq''@;'; put 'put ''ZWN0KGQpfWNvbnN0IGE9bC5zY2hlZHVsZVVwZGF0ZSgpO3JldHVybiBudWxsIT1hJiYoeWllbGQgYSksIWwuaXNVcGRhdGVQZW5kaW5nfSkoKX1zY2hlZHVsZVVwZGF0ZSgpe3JldHVybiB0aGlzLnBlcmZvcm1VcGRhdGUoKX1wZXJmb3JtVXBkYXRlKCl7dmFyIGw7aWYoIXRoaXMuaXNVcGRh''@;'; put 'put ''dGVQZW5kaW5nKXJldHVybjt0aGlzLl8kRWkmJih0aGlzLl8kRWkuZm9yRWFjaCgoaCxmKT0+dGhpc1tmXT1oKSx0aGlzLl8kRWk9dm9pZCAwKTtsZXQgYT0hMTtjb25zdCBkPXRoaXMuXyRBTDt0cnl7YT10aGlzLnNob3VsZFVwZGF0ZShkKSxhPyh0aGlzLndpbGxVcGRhdGUoZCksbnVsbD09''@;'; put 'put ''PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChoPT57dmFyIGY7cmV0dXJuIG51bGw9PT0oZj1oLmhvc3RVcGRhdGUpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmNhbGwoaCl9KSx0aGlzLnVwZGF0ZShkKSk6dGhpcy5fJEVrKCl9Y2F0Y2goaCl7dGhyb3cgYT0hMSx0aGlzLl8k''@;'; put 'put ''RWsoKSxofWEmJnRoaXMuXyRBRShkKX13aWxsVXBkYXRlKGwpe31fJEFFKGwpe3ZhciBhO251bGw9PT0oYT10aGlzLl8kRVMpfHx2b2lkIDA9PT1hfHxhLmZvckVhY2goZD0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9ZC5ob3N0VXBkYXRlZCl8fHZvaWQgMD09PWg/dm9pZCAwOmguY2FsbChk''@;'; put 'put ''KX0pLHRoaXMuaGFzVXBkYXRlZHx8KHRoaXMuaGFzVXBkYXRlZD0hMCx0aGlzLmZpcnN0VXBkYXRlZChsKSksdGhpcy51cGRhdGVkKGwpfV8kRWsoKXt0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMX1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRV''@;'; put 'put ''cGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuXyRFX31zaG91bGRVcGRhdGUobCl7cmV0dXJuITB9dXBkYXRlKGwpe3ZvaWQgMCE9PXRoaXMuXyRFQyYmKHRoaXMuXyRFQy5mb3JFYWNoKChhLGQpPT50aGlzLl8kRU8oZCx0aGlzW2RdLGEpKSx0aGlzLl8k''@;'; put 'put ''RUM9dm9pZCAwKSx0aGlzLl8kRWsoKX11cGRhdGVkKGwpe31maXJzdFVwZGF0ZWQobCl7fX12YXIgUlo7cWJbSVpdPSEwLHFiLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAscWIuZWxlbWVudFN0eWxlcz1bXSxxYi5zaGFkb3dSb290T3B0aW9ucz17bW9kZToib3BlbiJ9LHhzZT8uKHtSZWFj''@;'; put 'put ''dGl2ZUVsZW1lbnQ6cWJ9KSwobnVsbCE9PShBWj1rUi5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PUFaP0FaOmtSLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMyIpO2NvbnN0IERSPXdpbmRvdyxYYj1EUi50cnVzdGVkVHlwZXMsVHNlPVhiP1hiLmNy''@;'; put 'put ''ZWF0ZVBvbGljeSgibGl0LWh0bWwiLHtjcmVhdGVIVE1MOmM9PmN9KTp2b2lkIDAsSVI9IiRsaXQkIix0Zz1gbGl0JCR7KE1hdGgucmFuZG9tKCkrIiIpLnNsaWNlKDkpfSRgLExaPSI/Iit0Zyx0TWU9YDwke0xafT5gLFk4PWRvY3VtZW50LE9NPSgpPT5ZOC5jcmVhdGVDb21tZW50KCIiKSxQ''@;'; put 'put ''TT1jPT5udWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjJiYiZnVuY3Rpb24iIT10eXBlb2YgYyxBc2U9QXJyYXkuaXNBcnJheSxPWj0iWyBcdFxuXGZccl0iLEZNPS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLERzZT0vLS0+L2csSXNlPS8+''@;'; put 'put ''L2csRzg9UmVnRXhwKGA+fCR7T1p9KD86KFteXFxzIic+PS9dKykoJHtPWn0qPSR7T1p9Kig/OlteIFx0XG5cZlxyIidcYDw+PV18KCJ8Jyl8KSl8JClgLCJnIiksUnNlPS8nL2csTHNlPS8iL2csT3NlPS9eKD86c2NyaXB0fHN0eWxlfHRleHRhcmVhfHRpdGxlKSQvaSxQc2U9Yz0+KGwsLi4u''@;'; put 'put ''YSk9Pih7XyRsaXRUeXBlJDpjLHN0cmluZ3M6bCx2YWx1ZXM6YX0pLG5NZT1Qc2UoMSksck1lPVBzZSgyKSxKYj1TeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSxTMD1TeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLEZzZT1uZXcgV2Vha01hcCwkOD1ZOC5jcmVhdGVUcmVlV2Fsa2VyKFk4LDEy''@;'; put 'put ''OSxudWxsLCExKTtmdW5jdGlvbiBIc2UoYyxsKXtpZighQXJyYXkuaXNBcnJheShjKXx8IWMuaGFzT3duUHJvcGVydHkoInJhdyIpKXRocm93IEVycm9yKCJpbnZhbGlkIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXkiKTtyZXR1cm4gdm9pZCAwIT09VHNlP1RzZS5jcmVhdGVIVE1MKGwpOmx9Y2xh''@;'; put 'put ''c3MgSE17Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9LGQpe2xldCBoO3RoaXMucGFydHM9W107bGV0IGY9MCx2PTA7Y29uc3QgTT1sLmxlbmd0aC0xLEQ9dGhpcy5wYXJ0cyxbWixyZV09KChjLGwpPT57Y29uc3QgYT1jLmxlbmd0aC0xLGQ9W107bGV0IGgsZj0yPT09bD8i''@;'; put 'put ''PHN2Zz4iOiIiLHY9Rk07Zm9yKGxldCBNPTA7TTxhO00rKyl7Y29uc3QgRD1jW01dO2xldCBaLHJlLGNlPS0xLGJlPTA7Zm9yKDtiZTxELmxlbmd0aCYmKHYubGFzdEluZGV4PWJlLHJlPXYuZXhlYyhEKSxudWxsIT09cmUpOyliZT12Lmxhc3RJbmRleCx2PT09Rk0/IiEtLSI9PT1yZVsxXT92''@;'; put 'put ''PURzZTp2b2lkIDAhPT1yZVsxXT92PUlzZTp2b2lkIDAhPT1yZVsyXT8oT3NlLnRlc3QocmVbMl0pJiYoaD1SZWdFeHAoIjwvIityZVsyXSwiZyIpKSx2PUc4KTp2b2lkIDAhPT1yZVszXSYmKHY9RzgpOnY9PT1HOD8iPiI9PT1yZVswXT8odj1oPz9GTSxjZT0tMSk6dm9pZCAwPT09cmVbMV0/''@;'; put 'put ''Y2U9LTI6KGNlPXYubGFzdEluZGV4LXJlWzJdLmxlbmd0aCxaPXJlWzFdLHY9dm9pZCAwPT09cmVbM10/Rzg6JyInPT09cmVbM10/THNlOlJzZSk6dj09PUxzZXx8dj09PVJzZT92PUc4OnY9PT1Ec2V8fHY9PT1Jc2U/dj1GTToodj1HOCxoPXZvaWQgMCk7Y29uc3QgRWU9dj09PUc4JiZjW00r''@;'; put 'put ''MV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9dj09PUZNP0QrdE1lOmNlPj0wPyhkLnB1c2goWiksRC5zbGljZSgwLGNlKStJUitELnNsaWNlKGNlKSt0ZytFZSk6RCt0ZysoLTI9PT1jZT8oZC5wdXNoKHZvaWQgMCksTSk6RWUpfXJldHVybltIc2UoYyxmKyhjW2FdfHwiPD8+IikrKDI9''@;'; put 'put ''PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9SE0uY3JlYXRlRWxlbWVudChaLGQpLCQ4LmN1cnJlbnROb2RlPXRoaXMuZWwuY29udGVudCwyPT09YSl7Y29uc3QgY2U9dGhpcy5lbC5jb250ZW50LGJlPWNlLmZpcnN0Q2hpbGQ7YmUucmVtb3ZlKCksY2UuYXBwZW5kKC4u''@;'; put 'put ''LmJlLmNoaWxkTm9kZXMpfWZvcig7bnVsbCE9PShoPSQ4Lm5leHROb2RlKCkpJiZELmxlbmd0aDxNOyl7aWYoMT09PWgubm9kZVR5cGUpe2lmKGguaGFzQXR0cmlidXRlcygpKXtjb25zdCBjZT1bXTtmb3IoY29uc3QgYmUgb2YgaC5nZXRBdHRyaWJ1dGVOYW1lcygpKWlmKGJlLmVuZHNXaXRo''@;'; put 'put ''KElSKXx8YmUuc3RhcnRzV2l0aCh0Zykpe2NvbnN0IEVlPXJlW3YrK107aWYoY2UucHVzaChiZSksdm9pZCAwIT09RWUpe2NvbnN0IEJlPWguZ2V0QXR0cmlidXRlKEVlLnRvTG93ZXJDYXNlKCkrSVIpLnNwbGl0KHRnKSxxZT0vKFsuP0BdKT8oLiopLy5leGVjKEVlKTtELnB1c2goe3R5cGU6''@;'; put 'put ''MSxpbmRleDpmLG5hbWU6cWVbMl0sc3RyaW5nczpCZSxjdG9yOiIuIj09PXFlWzFdP0JzZToiPyI9PT1xZVsxXT9qc2U6IkAiPT09cWVbMV0/enNlOk5NfSl9ZWxzZSBELnB1c2goe3R5cGU6NixpbmRleDpmfSl9Zm9yKGNvbnN0IGJlIG9mIGNlKWgucmVtb3ZlQXR0cmlidXRlKGJlKX1pZihP''@;'; put 'put ''c2UudGVzdChoLnRhZ05hbWUpKXtjb25zdCBjZT1oLnRleHRDb250ZW50LnNwbGl0KHRnKSxiZT1jZS5sZW5ndGgtMTtpZihiZT4wKXtoLnRleHRDb250ZW50PVhiP1hiLmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgRWU9MDtFZTxiZTtFZSsrKWguYXBwZW5kKGNlW0VlXSxPTSgpKSwkOC5uZXh0''@;'; put 'put ''Tm9kZSgpLEQucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5kKGNlW2JlXSxPTSgpKX19fWVsc2UgaWYoOD09PWgubm9kZVR5cGUpaWYoaC5kYXRhPT09TFopRC5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IGNlPS0xO2Zvcig7LTEhPT0oY2U9aC5kYXRhLmluZGV4T2Yo''@;'; put 'put ''dGcsY2UrMSkpOylELnB1c2goe3R5cGU6NyxpbmRleDpmfSksY2UrPXRnLmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0ZUVsZW1lbnQobCxhKXtjb25zdCBkPVk4LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24gSzgoYyxsLGE9Yyxk''@;'; put 'put ''KXt2YXIgaCxmLHYsTTtpZihsPT09SmIpcmV0dXJuIGw7bGV0IEQ9dm9pZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8dm9pZCAwPT09aD92b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgWj1QTShsKT92b2lkIDA6bC5fJGxpdERpcmVjdGl2ZSQ7cmV0dXJuIEQ/LmNvbnN0cnVjdG9yIT09WiYm''@;'; put 'put ''KG51bGw9PT0oZj1EPy5fJEFPKXx8dm9pZCAwPT09Znx8Zi5jYWxsKEQsITEpLHZvaWQgMD09PVo/RD12b2lkIDA6KEQ9bmV3IFooYyksRC5fJEFUKGMsYSxkKSksdm9pZCAwIT09ZD8obnVsbCE9PSh2PShNPWEpLl8kQ28pJiZ2b2lkIDAhPT12P3Y6TS5fJENvPVtdKVtkXT1EOmEuXyRDbD1E''@;'; put 'put ''KSx2b2lkIDAhPT1EJiYobD1LOChjLEQuXyRBUyhjLGwudmFsdWVzKSxELGQpKSxsfWNsYXNzIFZzZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5w''@;'; put 'put ''YXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUobCl7dmFyIGE7Y29uc3R7ZWw6e2NvbnRlbnQ6ZH0scGFydHM6aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOlk4KS5pbXBvcnROb2RlKGQsITApOyQ4LmN1''@;'; put 'put ''cnJlbnROb2RlPWY7bGV0IHY9JDgubmV4dE5vZGUoKSxNPTAsRD0wLFo9aFswXTtmb3IoO3ZvaWQgMCE9PVo7KXtpZihNPT09Wi5pbmRleCl7bGV0IHJlOzI9PT1aLnR5cGU/cmU9bmV3IFFiKHYsdi5uZXh0U2libGluZyx0aGlzLGwpOjE9PT1aLnR5cGU/cmU9bmV3IFouY3Rvcih2LFoubmFt''@;'; put 'put ''ZSxaLnN0cmluZ3MsdGhpcyxsKTo2PT09Wi50eXBlJiYocmU9bmV3IFVzZSh2LHRoaXMsbCkpLHRoaXMuXyRBVi5wdXNoKHJlKSxaPWhbKytEXX1NIT09Wj8uaW5kZXgmJih2PSQ4Lm5leHROb2RlKCksTSsrKX1yZXR1cm4gJDguY3VycmVudE5vZGU9WTgsZn12KGwpe2xldCBhPTA7Zm9yKGNv''@;'; put 'put ''bnN0IGQgb2YgdGhpcy5fJEFWKXZvaWQgMCE9PWQmJih2b2lkIDAhPT1kLnN0cmluZ3M/KGQuXyRBSShsLGQsYSksYSs9ZC5zdHJpbmdzLmxlbmd0aC0yKTpkLl8kQUkobFthXSkpLGErK319Y2xhc3MgUWJ7Y29uc3RydWN0b3IobCxhLGQsaCl7dmFyIGY7dGhpcy50eXBlPTIsdGhpcy5fJEFI''@;'; put 'put ''PVMwLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFBPWwsdGhpcy5fJEFCPWEsdGhpcy5fJEFNPWQsdGhpcy5vcHRpb25zPWgsdGhpcy5fJENwPW51bGw9PT0oZj1oPy5pc0Nvbm5lY3RlZCl8fHZvaWQgMD09PWZ8fGZ9Z2V0IF8kQVUoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGE9bnVsbD09''@;'; put 'put ''PShsPXRoaXMuXyRBTSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuXyRBVSkmJnZvaWQgMCE9PWE/YTp0aGlzLl8kQ3B9Z2V0IHBhcmVudE5vZGUoKXtsZXQgbD10aGlzLl8kQUEucGFyZW50Tm9kZTtjb25zdCBhPXRoaXMuXyRBTTtyZXR1cm4gdm9pZCAwIT09YSYmMTE9PT1sPy5ub2RlVHlwZSYm''@;'; put 'put ''KGw9YS5wYXJlbnROb2RlKSxsfWdldCBzdGFydE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFBfWdldCBlbmROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQn1fJEFJKGwsYT10aGlzKXtsPUs4KHRoaXMsbCxhKSxQTShsKT9sPT09UzB8fG51bGw9PWx8fCIiPT09bD8odGhpcy5fJEFIIT09UzAmJnRoaXMu''@;'; put 'put ''XyRBUigpLHRoaXMuXyRBSD1TMCk6bCE9PXRoaXMuXyRBSCYmbCE9PUpiJiZ0aGlzLl8obCk6dm9pZCAwIT09bC5fJGxpdFR5cGUkP3RoaXMuZyhsKTp2b2lkIDAhPT1sLm5vZGVUeXBlP3RoaXMuJChsKTooYz0+QXNlKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5bWJvbC5pdGVyYXRv''@;'; put 'put ''cl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5fJEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRBSCE9PVMwJiZQTSh0''@;'; put 'put ''aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhpcy4kKFk4LmNyZWF0ZVRleHROb2RlKGwpKSx0aGlzLl8kQUg9bH1nKGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMobCk6KHZvaWQgMD09''@;'; put 'put ''PWguZWwmJihoLmVsPUhNLmNyZWF0ZUVsZW1lbnQoSHNlKGguaCxoLmhbMF0pLHRoaXMub3B0aW9ucykpLGgpO2lmKChudWxsPT09KGE9dGhpcy5fJEFIKXx8dm9pZCAwPT09YT92b2lkIDA6YS5fJEFEKT09PWYpdGhpcy5fJEFILnYoZCk7ZWxzZXtjb25zdCB2PW5ldyBWc2UoZix0aGlzKSxN''@;'; put 'put ''PXYudSh0aGlzLm9wdGlvbnMpO3YudihkKSx0aGlzLiQoTSksdGhpcy5fJEFIPXZ9fV8kQUMobCl7bGV0IGE9RnNlLmdldChsLnN0cmluZ3MpO3JldHVybiB2b2lkIDA9PT1hJiZGc2Uuc2V0KGwuc3RyaW5ncyxhPW5ldyBITShsKSksYX1UKGwpe0FzZSh0aGlzLl8kQUgpfHwodGhpcy5fJEFI''@;'; put 'put ''PVtdLHRoaXMuXyRBUigpKTtjb25zdCBhPXRoaXMuXyRBSDtsZXQgZCxoPTA7Zm9yKGNvbnN0IGYgb2YgbCloPT09YS5sZW5ndGg/YS5wdXNoKGQ9bmV3IFFiKHRoaXMuayhPTSgpKSx0aGlzLmsoT00oKSksdGhpcyx0aGlzLm9wdGlvbnMpKTpkPWFbaF0sZC5fJEFJKGYpLGgrKztoPGEubGVu''@;'; put 'put ''Z3RoJiYodGhpcy5fJEFSKGQmJmQuXyRBQi5uZXh0U2libGluZyxoKSxhLmxlbmd0aD1oKX1fJEFSKGw9dGhpcy5fJEFBLm5leHRTaWJsaW5nLGEpe3ZhciBkO2ZvcihudWxsPT09KGQ9dGhpcy5fJEFQKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKHRoaXMsITEsITAsYSk7bCYmbCE9PXRoaXMuXyRB''@;'; put 'put ''Qjspe2NvbnN0IGg9bC5uZXh0U2libGluZztsLnJlbW92ZSgpLGw9aH19c2V0Q29ubmVjdGVkKGwpe3ZhciBhO3ZvaWQgMD09PXRoaXMuXyRBTSYmKHRoaXMuXyRDcD1sLG51bGw9PT0oYT10aGlzLl8kQVApfHx2b2lkIDA9PT1hfHxhLmNhbGwodGhpcyxsKSl9fWNsYXNzIE5Ne2NvbnN0cnVj''@;'; put 'put ''dG9yKGwsYSxkLGgsZil7dGhpcy50eXBlPTEsdGhpcy5fJEFIPVMwLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5lbGVtZW50PWwsdGhpcy5uYW1lPWEsdGhpcy5fJEFNPWgsdGhpcy5vcHRpb25zPWYsZC5sZW5ndGg+Mnx8IiIhPT1kWzBdfHwiIiE9PWRbMV0/KHRoaXMuXyRBSD1BcnJheShkLmxl''@;'; put 'put ''bmd0aC0xKS5maWxsKG5ldyBTdHJpbmcpLHRoaXMuc3RyaW5ncz1kKTp0aGlzLl8kQUg9UzB9Z2V0IHRhZ05hbWUoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnRhZ05hbWV9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsLGE9dGhpcyxkLGgpe2NvbnN0IGY9dGhpcy5zdHJp''@;'; put 'put ''bmdzO2xldCB2PSExO2lmKHZvaWQgMD09PWYpbD1LOCh0aGlzLGwsYSwwKSx2PSFQTShsKXx8bCE9PXRoaXMuXyRBSCYmbCE9PUpiLHYmJih0aGlzLl8kQUg9bCk7ZWxzZXtjb25zdCBNPWw7bGV0IEQsWjtmb3IobD1mWzBdLEQ9MDtEPGYubGVuZ3RoLTE7RCsrKVo9SzgodGhpcyxNW2QrRF0s''@;'; put 'put ''YSxEKSxaPT09SmImJihaPXRoaXMuXyRBSFtEXSksdnx8KHY9IVBNKFopfHxaIT09dGhpcy5fJEFIW0RdKSxaPT09UzA/bD1TMDpsIT09UzAmJihsKz0oWj8/IiIpK2ZbRCsxXSksdGhpcy5fJEFIW0RdPVp9diYmIWgmJnRoaXMuaihsKX1qKGwpe2w9PT1TMD90aGlzLmVsZW1lbnQucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKHRoaXMubmFtZSk6dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsbD8/IiIpfX1jbGFzcyBCc2UgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT1sPT09''@;'; put 'put ''UzA/dm9pZCAwOmx9fWNvbnN0IGlNZT1YYj9YYi5lbXB0eVNjcmlwdDoiIjtjbGFzcyBqc2UgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTR9aihsKXtsJiZsIT09UzA/dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsaU1l''@;'; put 'put ''KTp0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSl9fWNsYXNzIHpzZSBleHRlbmRzIE5Ne2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhLGQsaCxmKSx0aGlzLnR5cGU9NX1fJEFJKGwsYT10aGlzKXt2YXIgZDtpZigobD1udWxsIT09KGQ9SzgodGhpcyxsLGEs''@;'; put 'put ''MCkpJiZ2b2lkIDAhPT1kP2Q6UzApPT09SmIpcmV0dXJuO2NvbnN0IGg9dGhpcy5fJEFILGY9bD09PVMwJiZoIT09UzB8fGwuY2FwdHVyZSE9PWguY2FwdHVyZXx8bC5vbmNlIT09aC5vbmNlfHxsLnBhc3NpdmUhPT1oLnBhc3NpdmUsdj1sIT09UzAmJihoPT09UzB8fGYpO2YmJnRoaXMuZWxl''@;'; put 'put ''bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGgpLHYmJnRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGwpLHRoaXMuXyRBSD1sfWhhbmRsZUV2ZW50KGwpe3ZhciBhLGQ7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuXyRBSD90aGlzLl8k''@;'; put 'put ''QUguY2FsbChudWxsIT09KGQ9bnVsbD09PShhPXRoaXMub3B0aW9ucyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaG9zdCkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmVsZW1lbnQsbCk6dGhpcy5fJEFILmhhbmRsZUV2ZW50KGwpfX1jbGFzcyBVc2V7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZWxlbWVu''@;'; put 'put ''dD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFNPWEsdGhpcy5vcHRpb25zPWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsKXtLOCh0aGlzLGwpfX1jb25zdCBac2U9RFIubGl0SHRtbFBvbHlmaWxsU3VwcG9ydDt2YXIgUFosRlo7WnNlPy4o''@;'; put 'put ''SE0sUWIpLChudWxsIT09KFJaPURSLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PVJaP1JaOkRSLmxpdEh0bWxWZXJzaW9ucz1bXSkucHVzaCgiMi44LjAiKTtjbGFzcyBWTSBleHRlbmRzIHFie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbmRlck9wdGlvbnM9''@;'; put 'put ''e2hvc3Q6dGhpc30sdGhpcy5fJERvPXZvaWQgMH1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGwsYTtjb25zdCBkPXN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtyZXR1cm4gbnVsbCE9PShsPShhPXRoaXMucmVuZGVyT3B0aW9ucykucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09bHx8KGEucmVuZGVy''@;'; put 'put ''QmVmb3JlPWQuZmlyc3RDaGlsZCksZH11cGRhdGUobCl7Y29uc3QgYT10aGlzLnJlbmRlcigpO3RoaXMuaGFzVXBkYXRlZHx8KHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZD10aGlzLmlzQ29ubmVjdGVkKSxzdXBlci51cGRhdGUobCksdGhpcy5fJERvPSgoYyxsLGEpPT57dmFyIGQs''@;'; put 'put ''aDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bDtsZXQgdj1mLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09dil7Y29uc3QgTT1udWxsIT09KGg9YT8ucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQkPXY9bmV3IFFiKGwu''@;'; put 'put ''aW5zZXJ0QmVmb3JlKE9NKCksTSksTSx2b2lkIDAsYT8/e30pfXJldHVybiB2Ll8kQUkoYyksdn0pKGEsdGhpcy5yZW5kZXJSb290LHRoaXMucmVuZGVyT3B0aW9ucyl9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8k''@;'; put 'put ''RG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8kRG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMSl9cmVuZGVyKCl7cmV0dXJuIEpi''@;'; put 'put ''fX1WTS5maW5hbGl6ZWQ9ITAsVk0uXyRsaXRFbGVtZW50JD0hMCxudWxsPT09KFBaPWdsb2JhbFRoaXMubGl0RWxlbWVudEh5ZHJhdGVTdXBwb3J0KXx8dm9pZCAwPT09UFp8fFBaLmNhbGwoZ2xvYmFsVGhpcyx7TGl0RWxlbWVudDpWTX0pO2NvbnN0IFdzZT1nbG9iYWxUaGlzLmxpdEVsZW1l''@;'; put 'put ''bnRQb2x5ZmlsbFN1cHBvcnQ7V3NlPy4oe0xpdEVsZW1lbnQ6Vk19KSwobnVsbCE9PShGWj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PUZaP0ZaOmdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIzLjMuMyIpO2NvbnN0IHNNZT1Dc2VgQGNo''@;'; put 'put ''YXJzZXQgIlVURi04Ijs6aG9zdCw6cm9vdHstLc60Mjp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHMsIGNhbGMoNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQzOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzLCBjYWxjKDggKiAxcmVt''@;'; put 'put ''IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSwgY2FsYygxMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ1OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLW1kLCBjYWxjKDE2''@;'; put 'put ''ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcsIGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Nzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bCwg''@;'; put 'put ''Y2FsYygzMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpfVtjZHMtbGF5b3V0fj0id3JhcDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1zdGFydDthbGlnbi1p''@;'; put 'put ''dGVtczpmbGV4LXN0YXJ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWluLWhlaWdodDowfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49aG9yaXpvbnRhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdPltjZHMtdGV4dF17d2lkdGg6aW5pdGlhbCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJd''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIi''@;'; put 'put ''XXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+Kntm''@;'; put 'put ''bGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0''@;'; put 'put ''cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1b''@;'; put 'put ''Y2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1b''@;'; put 'put ''Y2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXttYXJn''@;'; put 'put ''aW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b31bY2Rz''@;'; put 'put ''LWxheW91dH49Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0YXJ0O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMsMTIpLDFmcik7d2lkdGg6MTAwJX1bY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJlcGVhdCgxMixhdXRvKX1bY2RzLWxheW91dH49Z3JpZF0+W2Nkcy1sYXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tY29u''@;'; put 'put ''dGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50''@;'; put 'put ''OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1n''@;'; put 'put ''cmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRl''@;'; put 'put ''bnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1yZWFkZXItb25seSJde3Bvc2l0aW9uOmFic29s''@;'; put 'put ''dXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjA7ZGlzcGxheTpibG9jayFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4cyJde2dhcDp2YXIoLS3OtDIpfVtjZHMtbGF5b3V0Kj0iZ2FwOnhzIl17Z2FwOnZhcigtLc60Myl9W2Nkcy1sYXlvdXQqPSJnYXA6c20iXXtnYXA6dmFyKC0tzrQ0KX1bY2RzLWxheW91''@;'; put 'put ''dCo9ImdhcDptZCJde2dhcDp2YXIoLS3OtDUpfVtjZHMtbGF5b3V0Kj0iZ2FwOmxnIl17Z2FwOnZhcigtLc60Nil9W2Nkcy1sYXlvdXR+PSJwOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHMiXXtwYWRkaW5nOnZhcigtLc60MikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icDp4cyJde3BhZGRpbmc6dmFyKC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIoLS3OtDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5nOnZhcigtLc60NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTptZCJd''@;'; put 'put ''e21hcmdpbjp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OnhzIl17cGFkZGluZy10b3A6dmFyKC0tzrQzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tzrQzKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3BhZGRpbmctdG9wOnZhcigtLc60NikhaW1wb3J0YW50O3BhZGRpbmctYm90''@;'; put 'put ''dG9tOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NSkhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImdhcEBtZDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icEBt''@;'; put 'put ''ZDpsZyJde3BhZGRpbmc6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLc60NykhaW1wb3J0YW50fX1bY2RzLWxheW91dH49ZmlsbF17d2lkdGg6MTAwJSFpbXBvcnRhbnR9Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1i''@;'; put 'put ''b3h9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT46OnNsb3R0ZWQoKiksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT46OnNsb3R0ZWQoKil7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRp''@;'; put 'put ''Y2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90''@;'; put 'put ''dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRp''@;'; put 'put ''Y2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''IDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1l''@;'; put 'put ''ZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe21h''@;'; put 'put ''cmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFs''@;'; put 'put ''LWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25Ac206Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZl''@;'; put 'put ''cnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXtt''@;'; put 'put ''YXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90''@;'; put 'put ''dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQo''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12''@;'; put 'put ''ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdp''@;'; put 'put ''ZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDph''@;'; put 'put ''dXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0p''@;'; put 'put ''e2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''bDpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNh''@;'; put 'put ''bC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50''@;'; put 'put ''ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6''@;'; put 'put ''Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNl''@;'; put 'put ''bnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8h''@;'; put 'put ''aW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVy''@;'; put 'put ''dGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6''@;'; put 'put ''b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8h''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQo''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJdKXthbGlnbi1zZWxm''@;'; put 'put ''OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVm''@;'; put 'put ''dCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe2FsaWdu''@;'; put 'put ''LXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJp''@;'; put 'put ''Z2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFy''@;'; put 'put ''Z2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkB4bDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChb''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1bY2RzLXRleHRde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYp''@;'; put 'put ''O21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9W2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06OmJlZm9yZXtkaXNwbGF5Om5vbmV9W2Nkcy10ZXh0Kj1kaXNwbGF5XSxbY2RzLXRleHQqPXNlY3Rpb25dLFtjZHMtdGV4''@;'; put 'put ''dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1jb2xvci00MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwLCMyMTMzM2IpKX1bY2RzLXRleHQqPWJvZHldLFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01''@;'; put 'put ''MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjaywjMDAwKSl9W2Nkcy10ZXh0Kj1pbmxpbmVde3dpZHRoOmF1dG8haW1wb3J0YW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1bY2RzLXRleHQqPWRpc3BsYXlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktZGlzcGxheS1mb250LXNpemUsY2FsYyg0MCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9ZGlzcGxheV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVp''@;'; put 'put ''Z2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEp''@;'; put 'put ''ICsgLjAzN2VtKX1bY2RzLXRleHQqPWRpc3BsYXldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0LDEuMWVtKSAtIDFlbSkv''@;'; put 'put ''IDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplLGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNp''@;'; put 'put ''bmcsLS4wMDgzMzMzM2VtKX1bY2RzLXRleHQqPXRpdGxlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMo''@;'; put 'put ''KHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNh''@;'; put 'put ''bGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0p''@;'; put 'put ''KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQt''@;'; put 'put ''c2l6ZSxjYWxjKDIwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxp''@;'; put 'put ''bmUtaGVpZ2h0LDEuMmVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJn''@;'; put 'put ''aW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRl''@;'; put 'put ''eHQqPXNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0p''@;'; put 'put ''fVtjZHMtdGV4dCo9c3Vic2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktc3Vic2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3Bh''@;'; put 'put ''Y2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNh''@;'; put 'put ''bGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdp''@;'; put 'put ''bi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0''@;'; put 'put ''LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1ib2R5XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1m''@;'; put 'put ''b250LXdlaWdodCw0MDApO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUsY2FsYygxNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGV0''@;'; put 'put ''dGVyLXNwYWNpbmcsLS4wMDcxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSl9W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21h''@;'; put 'put ''cmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMWVtKX1bY2Rz''@;'; put 'put ''LXRleHQqPWJvZHldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0''@;'; put 'put ''ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0g''@;'; put 'put ''LyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9j''@;'; put 'put ''aztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIp''@;'; put 'put ''KSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQsMS41ZW0pIC0g''@;'; put 'put ''MWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1n''@;'; put 'put ''YXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6Ymxv''@;'; put 'put ''Y2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwjMDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZz''@;'; put 'put ''ZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtj''@;'; put 'put ''ZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0''@;'; put 'put ''fj1zdGF0aWNdKTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwt''@;'; put 'put ''cmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfVtjZHMtZGl2aWRlcl17ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0g''@;'; put 'put ''LyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCNjYmQ0ZDgpKSAwIDAgMCB2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWJvcmRlci13aWR0aC0xMDAsY2FsYygxICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSBpbnNldH1bY2RzLXRleHR+PWxpZ2h0XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQsMzAwKSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy10ZXh0fj1qdXN0aWZ5XXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGVmdF17dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH1bY2RzLXRleHR+PXJpZ2h0XXt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH1bY2RzLXRleHR+PWNlbnRlcl17dGV4dC1hbGln''@;'; put 'put ''bjpjZW50ZXIhaW1wb3J0YW50fVtjZHMtdGV4dH49bGhlXXtwYWRkaW5nOi4wNXB4IDB9W2Nkcy10ZXh0fj1saGVdOjpiZWZvcmV7Y29udGVudDoiIjttYXJnaW4tdG9wOi0uMTI0ZW07ZGlzcGxheTpibG9jaztoZWlnaHQ6MH1bY2RzLXRleHR+PWxoZV06OmFmdGVye2NvbnRlbnQ6IiI7bWFy''@;'; put 'put ''Z2luLWJvdHRvbTotLjIyMWVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0Kj1oMl0sW2Nkcy10ZXh0Kj1oM117Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNh''@;'; put 'put ''bnMtc2VyaWYpO2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVpZ2h0OjEuNzE0M2VtO2xldHRlci1zcGFjaW5nOi0uMDE3ODU3ZW19W2Nkcy10ZXh0Kj1oMl06OmJlZm9yZXtjb250ZW50''@;'; put 'put ''OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDJd''@;'; put 'put ''OjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVy''@;'; put 'put ''LWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKDEuNzE0M2VtIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oM117Zm9udC1zaXplOjEuMXJlbTtsaW5lLWhlaWdodDoxLjA5MDllbTtsZXR0''@;'; put 'put ''ZXItc3BhY2luZzotLjAxMzYzNmVtfVtjZHMtdGV4dCo9aDNdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2Fs''@;'; put 'put ''YygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgzXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl''@;'; put 'put ''aWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfTpob3N0''@;'; put 'put ''e2FsbDppbml0aWFsO2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTppbmhlcml0O2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbnRhaW46bGF5b3V0O2JveC1zaXpp''@;'; put 'put ''bmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzppbmhlcml0IWltcG9ydGFudH1zbG90e2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNs''@;'; put 'put ''YXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2Rpc3BsYXk6Y29udGVudHMhaW1wb3J0YW50fTo6c2xvdHRlZCgqKXtmb250LWZhbWlseTppbmhlcml0O2JveC1zaXppbmc6aW5oZXJpdH06OnNsb3R0ZWQoKik6OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS1jb2xvci0yMDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwLCM0ZjYxNjkpKX06aG9zdChbX2lzLWFuY2hvcl0pLDpob3N0KFtyb2xlPWJ1dHRvbl0pe2N1cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbX2lzLWFuY2hvcl0pIDo6c2xv''@;'; put 'put ''dHRlZCgqKSw6aG9zdChbcm9sZT1idXR0b25dKSA6OnNsb3R0ZWQoKil7Y3Vyc29yOnBvaW50ZXIhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKXtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKSA6OnNsb3R0''@;'; put 'put ''ZWQoKil7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfTpob3N0KFtoaWRkZW5dKSxbaGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0KFtoaWRkZW4qPWZhbHNlXSl7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlh''@;'; put 'put ''bG9nXVtoaWRkZW5dKSw6aG9zdChbcm9sZT1kaWFsb2ddW2hpZGRlbl0pIDo6c2xvdHRlZCgqKXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW4qPWZhbHNlXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVto''@;'; put 'put ''aWRkZW4qPWZhbHNlXSkgOjpzbG90dGVkKCope3Zpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnR9Omhvc3QoW19mb2N1c2VkXSkgLmlucHV0LDpob3N0KFtfZm9jdXNlZF0pIFtmb2N1c2FibGVdLDpob3N0KFt0YWJpbmRleD0iMCJdOmZvY3VzKSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1''@;'; put 'put ''cykgW2ZvY3VzYWJsZV0sW3RhYmluZGV4PSIwIl1bZm9jdXNhYmxlXTpmb2N1c3tvdXRsaW5lOkhpZ2hsaWdodCBzb2xpZCAycHg7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1vdXRsaW5lLW9mZnNldCwxcHgpfWA7ZnVuY3Rpb24gSFooYyl7cmV0dXJuYGNhbGMoKCR7Y30gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAqIDFyZW0pYH1jbGFzcyBkTWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZuPWwsdGhpcy5zdWJzY3JpcHRpb25zPWF9dW5zdWJzY3JpYmUoKXtj''@;'; put 'put ''b25zdCBsPXRoaXMuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHRoaXMpOy0xIT09bCYmdGhpcy5zdWJzY3JpcHRpb25zLnNwbGljZShsLDEpfX1jb25zdCBOWj1uZXcgY2xhc3MgaE1le2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpcHRpb25zPVtdfXN1YnNjcmliZShsKXtjb25zdCBhPW5ldyBk''@;'; put 'put ''TWUobCx0aGlzLnN1YnNjcmlwdGlvbnMpO3JldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhKSxhfWVtaXQobCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS5mbihsKSl9dG9FdmVudE9ic2VydmFibGUoKXtyZXR1cm4gdGhpc319O05aLmxpc3RlbmVyPWRvY3VtZW50LmFk''@;'; put 'put ''ZEV2ZW50TGlzdGVuZXIoIkNEU19TVEFURV9VUERBVEUiLGM9Pk5aLmVtaXQoYy5kZXRhaWwpKTtjbGFzcyBaZntzdGF0aWMgZ2V0IHN0YXRlKCl7cmV0dXJuIHVzZSgpLHdpbmRvdy5DRFMuX3N0YXRlfXN0YXRpYyBnZXRWYWx1ZShsKXtyZXR1cm4gWmYuc3RhdGVbbF19c3RhdGljIHNldFZh''@;'; put 'put ''bHVlKGwsYSl7WmYuc3RhdGVbbF09YX1zdGF0aWMgbG9nKCl7TE0ubG9nKEpTT04uc3RyaW5naWZ5KFpmLnN0YXRlLG51bGwsMikpfX1aZi5zdGF0ZVVwZGF0ZXM9TloudG9FdmVudE9ic2VydmFibGUoKTtjb25zdCBmTWU9KGMsbCk9PiJtZXRob2QiPT09bC5raW5kJiZsLmRlc2NyaXB0b3Im''@;'; put 'put ''JiEoInZhbHVlImluIGwuZGVzY3JpcHRvcik/ey4uLmwsZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19OntraW5kOiJmaWVsZCIsa2V5OlN5bWJvbCgpLHBsYWNlbWVudDoib3duIixkZXNjcmlwdG9yOnt9LG9yaWdpbmFsS2V5Omwua2V5LGluaXRpYWxpemVyKCl7ImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGwuaW5pdGlhbGl6ZXImJih0aGlzW2wua2V5XT1sLmluaXRpYWxpemVyLmNhbGwodGhpcykpfSxmaW5pc2hlcihhKXthLmNyZWF0ZVByb3BlcnR5KGwua2V5LGMpfX0scE1lPShjLGwsYSk9PntsLmNvbnN0cnVjdG9yLmNyZWF0ZVByb3BlcnR5KGEsYyl9O2Z1bmN0''@;'; put 'put ''aW9uIFlzZShjKXtyZXR1cm4obCxhKT0+dm9pZCAwIT09YT9wTWUoYyxsLGEpOmZNZShjLGwpfWZ1bmN0aW9uIEtzZShjLGwpe3N3aXRjaChsJiZsLnR5cGUpe2Nhc2UgQXJyYXk6Y2FzZSBPYmplY3Q6cmV0dXJue3JlZmxlY3Q6ITEsLi4ubH07Y2FzZSBTdHJpbmc6cmV0dXJue3JlZmxlY3Q6''@;'; put 'put ''ITAsYXR0cmlidXRlOlc4KGMpLGNvbnZlcnRlcjp7dG9BdHRyaWJ1dGU6YT0+YXx8bnVsbH0sLi4ubH07Y2FzZSBOdW1iZXI6cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOlc4KGMpLC4uLmx9O2Nhc2UgQm9vbGVhbjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6VzgoYyksY29udmVy''@;'; put 'put ''dGVyOnt0b0F0dHJpYnV0ZTphPT5hPyIiOm51bGwsZnJvbUF0dHJpYnV0ZTphPT5mdW5jdGlvbiB5TWUoYyl7cmV0dXJuIG51bGwhPWMmJiIiK2MhPSJmYWxzZSJ9KGEpfSwuLi5sfTtjYXNlIERhdGU6cmV0dXJue3JlZmxlY3Q6ITEsY29udmVydGVyOntmcm9tQXR0cmlidXRlOmE9Pm5ldyBE''@;'; put 'put ''YXRlKGEpfSwuLi5sfTtkZWZhdWx0OnJldHVybnsuLi5sfX19ZnVuY3Rpb24gaW0oYyl7cmV0dXJuKGwsYSk9PihjPy5yZXF1aXJlZCYmZnVuY3Rpb24gX01lKGMsbCxhKXtjb25zdCBkPWMuZmlyc3RVcGRhdGVkO2MuZmlyc3RVcGRhdGVkPWZ1bmN0aW9uKGgpe2lmKGEmJmEucmVxdWlyZWQm''@;'; put 'put ''JlJNKHRoaXNbbF0pKXtjb25zdCBmPWEucmVxdWlyZWRNZXNzYWdlfHxmdW5jdGlvbih2PSJ3YXJuaW5nIixNLEQpe2NvbnN0IFo9RC50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybmAke3NzZSh2KX06ICR7TX0gaXMgcmVxdWlyZWQgdG8gdXNlICR7Wn0gY29tcG9uZW50LiBTZXQgdGhlIEpT''@;'; put 'put ''IFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyhuc2UoKT9gQW5ndWxhcjogPCR7Wn0gWyR7TX1dPSIuLi4iPjwvJHtafT5cbmA6IiIpKyhpc2UoKT9gVnVlOiA8JHtafSA6JHtNfT0iLi4uIj48LyR7Wn0+XG5gOiIiKSsocnNlKCk/YFJlYWN0OiA8JHtmdW5jdGlvbiB5U2UoYyl7''@;'; put 'put ''cmV0dXJuIHNzZShmdW5jdGlvbiBiU2UoYyl7cmV0dXJuIGMuc3BsaXQoIi0iKS5tYXAoKGwsYSk9PmE/bC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStsLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk6bCkuam9pbigiIil9KGMpKX0oWil9ICR7cmU9TSxyZS5zdGFydHNXaXRoKCJhcmlhIik/Vzgo''@;'; put 'put ''cmUpOnJlfT17Li4ufSAvPlxuYDoiIikrYEhUTUw6IDwke1p9ICR7VzgoTSl9PSIuLi4iPjwvJHtafT5cbkphdmFTY3JpcHQ6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyR7Wn0nKS4ke019ID0gJy4uLic7XG5cbmA7dmFyIHJlfShhLnJlcXVpcmVkLGwsdGhpcy50YWdOYW1lKTtpZigiZXJy''@;'; put 'put ''b3IiPT09YS5yZXF1aXJlZCl0aHJvdyBFcnJvcihmKTtMTS53YXJuKGYsdGhpcyl9ZCYmZC5jYWxsKHRoaXMsaCl9fShsLGEsYyksWXNlKEtzZShhLGMpKShsLGEpKX12YXIgTU1lPUNzZWBAa2V5ZnJhbWVzIGZhZGVJbkFuZE91dHswJSx0b3tvcGFjaXR5OjB9NzUle29wYWNpdHk6MX19Omhv''@;'; put 'put ''c3R7LS1jb2xvcjpjdXJyZW50Q29sb3I7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFy''@;'; put 'put ''ZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAv''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDp2YXIoLS1jb2xvcik7Y29sb3I6dmFyKC0tY29sb3IpO2NvbnRhaW46c3RyaWN0O2N1cnNvcjppbmhlcml0fXN2Z3tkaXNwbGF5OmJsb2NrfTpob3N0KFtzaXplKj14c10pe2hl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9c21dKXtoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1tZF0pe2hl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPWxnXSl7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUq''@;'; put 'put ''PXhsXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4t''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3Qo''@;'; put 'put ''W3NpemUqPXh4bF0pe2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkp''@;'; put 'put ''KSk7d2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi1oZWln''@;'; put 'put ''aHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi13aWR0aDpjYWxj''@;'; put 'put ''KHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSl9Omhvc3QoW3NpemUqPWZpdF0pe2hl''@;'; put 'put ''aWdodDphdXRvO3dpZHRoOmF1dG87Y29udGFpbjpsYXlvdXR9Omhvc3QoW3N0YXR1cz1zdWNjZXNzXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW3N0YXR1cz1kYW5nZXJd''@;'; put 'put ''KXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbc3RhdHVzPXdhcm5pbmddKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtzdGF0dXM9aW5mb10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9Omhvc3QoW3N0YXR1cz1uZXV0cmFsXSl7LS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtpbnZlcnNlXSl7LS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDAsICNjYmQ0ZDgpfTpob3N0KFtk''@;'; put 'put ''aXJlY3Rpb249dXBdKXt0cmFuc2Zvcm06cm90YXRlKDApfTpob3N0KFtkaXJlY3Rpb249ZG93bl0pe3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX06aG9zdChbZGlyZWN0aW9uPXJpZ2h0XSl7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1sZWZ0XSl7dHJhbnNmb3Jt''@;'; put 'put ''OnJvdGF0ZSgyNzBkZWcpfTpob3N0KFtmbGlwPWhvcml6b250YWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVgoMTgwZGVnKX06aG9zdChbZmxpcD12ZXJ0aWNhbF0pe3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfS5hbGVydCwuYmFkZ2V7ZmlsbDp2YXIoLS1iYWRn''@;'; put 'put ''ZS1jb2xvcix2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsI2UwMjIwMCkpKX06aG9zdChbYmFkZ2U9c3VjY2Vzc10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtiYWRnZT1kYW5nZXJdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddKXstLWJh''@;'; put 'put ''ZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZT1pbmhlcml0XSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlPWluZm9dKXstLWJh''@;'; put 'put ''ZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtiYWRnZT1uZXV0cmFsXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtiYWRnZT1pbmhlcml0LXRyaWFuZ2xlXSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwg''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06''@;'; put 'put ''aG9zdChbYmFkZ2UqPXdhcm5pbmddW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZSo9aW5oZXJpdF1baW52ZXJzZV0pey0tYmFk''@;'; put 'put ''Z2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX0uY2RzLWludGVybmFsLWRvdC0xe2FuaW1hdGlv''@;'; put 'put ''bjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLWluIDBzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTJ7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Utb3V0IC40MjJzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Ut''@;'; put 'put ''b3V0IC42NzVzIGluZmluaXRlfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbil7LmNkcy1pbnRlcm5hbC1kb3QtMSwuY2RzLWludGVybmFsLWRvdC0yLC5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOm5vbmV9fWA7Y29uc3QgeE1lPVsidW5rbm93biIse291dGxpbmU6JzxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0i''@;'; put 'put ''MTgiIHI9IjIuOSIvPid9XTtjbGFzcyBUc3tzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246eE1lWzFdLC4uLlpmLnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpe1pmLnN0YXRlLmljb25SZWdpc3RyeT17Li4uWmYuc3RhdGUuaWNvblJlZ2lzdHJ5''@;'; put 'put ''LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IVRzLnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9bC5maWx0ZXIoKFtkXSk9PlRzLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChbZCxoXSk9PmgubWFwKGY9PltmLFRzLnJlZ2lzdHJ5W2Rd''@;'; put 'put ''XSkpO1pmLnN0YXRlLmljb25SZWdpc3RyeT17Li4uWmYuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX12YXIgZHAsYztmdW5jdGlvbiBrTWUoYyxsKXtsZXQgYT0iIjtzd2l0Y2go''@;'; put 'put ''ZnVuY3Rpb24gRU1lKGMpe3N3aXRjaCghMCl7Y2FzZSBSTShjKTpyZXR1cm4gZHAuTmlsU2l6ZVZhbHVlO2Nhc2UgZnVuY3Rpb24gcXNlKGMpe3JldHVyblsieHhzIiwieHMiLCJzbSIsIm1kIiwibGciLCJ4bCIsInh4bCJdLmluZGV4T2YoYyk+LTF9KGMpOnJldHVybiBkcC5WYWxpZFNpemVT''@;'; put 'put ''dHJpbmc7Y2FzZSBmdW5jdGlvbiBHb2UoYyl7cmV0dXJuIGdaKGMpJiYhWW9lKGMudHJpbSgpKSYmK2M9PStjfShjKTpyZXR1cm4gZHAuVmFsaWROdW1lcmljU3RyaW5nO2RlZmF1bHQ6cmV0dXJuIGRwLkJhZFNpemVWYWx1ZX19KGZ1bmN0aW9uIFRNZShjKXtyZXR1cm4gUk0oYyk/IiI6ZnVu''@;'; put 'put ''Y3Rpb24gX1NlKGMsbCxhPSIiKXtjb25zdCBkPWMuc3BsaXQoIiAiKSxoPSIiPT09YT9kLmZpbHRlcihmPT5mIT09bCk6ZC5tYXAoZj0+Zj09PWw/YTpmKTtyZXR1cm4gaC5sZW5ndGg+MD9oLmpvaW4oIiAiKToiIn0oYywiZml0Iil9KGwpKSl7Y2FzZSBkcC5WYWxpZE51bWVyaWNTdHJpbmc6''@;'; put 'put ''cmV0dXJuIGE9SFoocGFyc2VJbnQobCkpLHZvaWQgZnVuY3Rpb24gY01lKGMsLi4ubCl7bC5mb3JFYWNoKChbYSxkXSk9PntjLnN0eWxlW2FdPWR9KX0oYywuLi5mdW5jdGlvbiBBTWUoYyxsKXtyZXR1cm4hSU0oYykmJmMuaW5kZXhPZigiZml0Iik+LTE/W1sid2lkdGgiLCJhdXRvIl0sWyJo''@;'; put 'put ''ZWlnaHQiLCJhdXRvIl0sWyJtaW4td2lkdGgiLGxdLFsibWluLWhlaWdodCIsbF1dOltbIndpZHRoIixsXSxbImhlaWdodCIsbF0sWyJtaW4td2lkdGgiLGxdLFsibWluLWhlaWdodCIsbF1dfShsLGEpKTtjYXNlIGRwLlZhbGlkU2l6ZVN0cmluZzpjYXNlIGRwLk5pbFNpemVWYWx1ZTpyZXR1''@;'; put 'put ''cm4gdm9pZCBmdW5jdGlvbiB1TWUoYywuLi5sKXtsLmZvckVhY2goYT0+e2Muc3R5bGVbYV09IiJ9KX0oYywid2lkdGgiLCJoZWlnaHQiLCJtaW4td2lkdGgiLCJtaW4taGVpZ2h0Iik7ZGVmYXVsdDpyZXR1cm59fWZ1bmN0aW9uIFZaKGMpe3JldHVybiBjLmJhZGdlJiYoImluaGVyaXQtdHJp''@;'; put 'put ''YW5nbGUiPT09Yy5iYWRnZXx8Indhcm5pbmctdHJpYW5nbGUiPT09Yy5iYWRnZSl9KGM9ZHB8fChkcD17fSkpLkJhZFNpemVWYWx1ZT0iYmFkLXZhbHVlIixjLlZhbGlkU2l6ZVN0cmluZz0idmFsdWUtaXMtc3RyaW5nIixjLlZhbGlkTnVtZXJpY1N0cmluZz0idmFsdWUtaXMtbnVtZXJpYyIs''@;'; put 'put ''Yy5OaWxTaXplVmFsdWU9InZhbHVlLWlzLW5pbCI7Y2xhc3MgV2YgZXh0ZW5kcyBWTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW3NN''@;'; put 'put ''ZSxNTWVdfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9zaGFwZX1zZXQgc2hhcGUobCl7aWYoZnVuY3Rpb24gZVNlKGMsbCl7cmV0dXJuIVJNKGMpJiZLb2UoYyxsKX0obCx0aGlzLl9zaGFwZSkpe2NvbnN0IGE9dGhpcy5fc2hhcGU7dGhpcy5fc2hhcGU9bCx0aGlzLnJlcXVlc3RVcGRhdGUo''@;'; put 'put ''InNoYXBlIixhKX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZShsKXtpZihmdW5jdGlvbiBRQ2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24gSkNlKGMpe3JldHVybiBQb2UoU3RyaW5nLGMpfHxJTShjKX0oYykmJktvZShjLGwpfShsLHRoaXMuX3NpemUpKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuX3NpemU7dGhpcy5fc2l6ZT1sLGtNZSh0aGlzLGwpLHRoaXMucmVxdWVzdFVwZGF0ZSgic2l6ZSIsYSl9fXVwZGF0ZWQobCl7aWYobC5oYXMoImlubmVyT2Zmc2V0IikmJnRoaXMuaW5uZXJPZmZzZXQ+MCl7Y29uc3QgYT1IWigtMSp0aGlzLmlubmVyT2Zmc2V0KSxkPWBjYWxjKDEwMCUg''@;'; put 'put ''KyAke0haKDIqdGhpcy5pbm5lck9mZnNldCl9KWA7dGhpcy5zdmcuc3R5bGUud2lkdGg9ZCx0aGlzLnN2Zy5zdHlsZS5oZWlnaHQ9ZCx0aGlzLnN2Zy5zdHlsZS5tYXJnaW49YCR7YX0gMCAwICR7YX1gfX1maXJzdFVwZGF0ZWQobCl7aWYoc3VwZXIuZmlyc3RVcGRhdGVkKGwpLHRoaXMuaXND''@;'; put 'put ''b25uZWN0ZWQpe2xldCBhPSJ1bmtub3duIjt0aGlzLnN1YnNjcmlwdGlvbj1aZi5zdGF0ZVVwZGF0ZXMuc3Vic2NyaWJlKGQ9PnsiaWNvblJlZ2lzdHJ5Ij09PWQua2V5JiZUcy5yZWdpc3RyeVt0aGlzLnNoYXBlXSYmYSE9PXRoaXMuc2hhcGUmJihhPXRoaXMuc2hhcGUsdGhpcy5yZXF1ZXN0''@;'; put 'put ''VXBkYXRlKCJzaGFwZSIpKX0pfX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9cmVuZGVyKCl7cmV0dXJuIGdaKFRzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdKT9uTWVgPHNwYW4gLmlubmVy''@;'; put 'put ''SFRNTD0iJHtUcy5yZWdpc3RyeVt0aGlzLnNoYXBlXX0iPjwvc3Bhbj5gOnJNZWA8c3ZnIC5pbm5lckhUTUw9IiR7ZnVuY3Rpb24gSU1lKGMpe2NvbnN0IGw9VHMucmVnaXN0cnlbYy5zaGFwZV0/P1RzLnJlZ2lzdHJ5LnVua25vd247bGV0IGE9Yy5zb2xpZCYmbC5zb2xpZD9sLnNvbGlkOmwu''@;'; put 'put ''b3V0bGluZTtyZXR1cm4gYy5iYWRnZSYmIVZaKGMpJiYoYT1jLnNvbGlkP2wuc29saWRCYWRnZWQ/P2E6bC5vdXRsaW5lQmFkZ2VkPz9hKSxWWihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQWxlcnRlZD8/YTpsLm91dGxpbmVBbGVydGVkPz9hKSxhfSh0aGlzKStmdW5jdGlvbiBETWUoYyl7bGV0''@;'; put 'put ''IGw9IiI7cmV0dXJuIGMuYmFkZ2UmJlZaKGMpP2w9JzxwYXRoIGQ9Ik0yNi44NSAxLjE0TDIxLjEzIDExYTEuMjggMS4yOCAwIDAwMS4xIDJoMTEuNDVhMS4yOCAxLjI4IDAgMDAxLjEtMmwtNS43Mi05Ljg2YTEuMjggMS4yOCAwIDAwLTIuMjEgMHoiIGNsYXNzPSJhbGVydCIgLz4nOmMuYmFk''@;'; put 'put ''Z2UmJihsPSc8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJiYWRnZSIgLz4nKSxsfSh0aGlzKX0iIHZpZXdCb3g9IjAgMCAzNiAzNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zdmc+YH19ZnVuY3Rpb24gQk0oYyl7''@;'; put 'put ''cmV0dXJuISFjJiYoYyBpbnN0YW5jZW9mIFh0fHwkZShjLmxpZnQpJiYkZShjLnN1YnNjcmliZSkpfVVmKFtpbSh7dHlwZTpTdHJpbmd9KV0sV2YucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksVWYoW2ltKHt0eXBlOlN0cmluZ30pXSxXZi5wcm90b3R5cGUsInNpemUiLG51bGwpLFVmKFtpbSh7''@;'; put 'put ''dHlwZTpTdHJpbmd9KV0sV2YucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksVWYoW2ltKHt0eXBlOlN0cmluZ30pXSxXZi5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksVWYoW2ltKHt0eXBlOkJvb2xlYW59KV0sV2YucHJvdG90eXBlLCJzb2xpZCIsdm9pZCAwKSxVZihbaW0oe3R5cGU6''@;'; put 'put ''U3RyaW5nfSldLFdmLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLFVmKFtpbSh7dHlwZTpCb29sZWFufSldLFdmLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSxVZihbaW0oe3R5cGU6U3RyaW5nfSldLFdmLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCksVWYoW2Z1bmN0aW9uIHdNZShj''@;'; put 'put ''KXtyZXR1cm4obCxhKT0+e2NvbnN0IGQ9S3NlKGEsYyk7cmV0dXJuIGQmJihkLnJlZmxlY3Q9ISFjPy5yZWZsZWN0JiZjLnJlZmxlY3QsZC5yZWZsZWN0JiYhYz8uYXR0cmlidXRlJiYoZC5hdHRyaWJ1dGU9Il8iK1c4KGEpKSksWXNlKGQpKGwsYSl9fSh7dHlwZTpOdW1iZXJ9KV0sV2YucHJv''@;'; put 'put ''dG90eXBlLCJpbm5lck9mZnNldCIsdm9pZCAwKSxVZihbZnVuY3Rpb24gU01lKGMsbCl7cmV0dXJuKCh7ZmluaXNoZXI6YyxkZXNjcmlwdG9yOmx9KT0+KGEsZCk9Pnt2YXIgaDtpZih2b2lkIDA9PT1kKXtjb25zdCBmPW51bGwhPT0oaD1hLm9yaWdpbmFsS2V5KSYmdm9pZCAwIT09aD9oOmEu''@;'; put 'put ''a2V5LHY9bnVsbCE9bD97a2luZDoibWV0aG9kIixwbGFjZW1lbnQ6InByb3RvdHlwZSIsa2V5OmYsZGVzY3JpcHRvcjpsKGEua2V5KX06ey4uLmEsa2V5OmZ9O3JldHVybiBudWxsIT1jJiYodi5maW5pc2hlcj1mdW5jdGlvbihNKXtjKE0sZil9KSx2fXtjb25zdCBmPWEuY29uc3RydWN0b3I7''@;'; put 'put ''dm9pZCAwIT09bCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZCxsKGQpKSxjPy4oZixkKX19KSh7ZGVzY3JpcHRvcjphPT57Y29uc3QgZD17Z2V0KCl7dmFyIGgsZjtyZXR1cm4gbnVsbCE9PShmPW51bGw9PT0oaD10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnF1ZXJ5''@;'; put 'put ''U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1mP2Y6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9O2lmKGwpe2NvbnN0IGg9InN5bWJvbCI9PXR5cGVvZiBhP1N5bWJvbCgpOiJfXyIrYTtkLmdldD1mdW5jdGlvbigpe3ZhciBmLHY7cmV0dXJuIHZvaWQgMD09PXRoaXNbaF0mJih0''@;'; put 'put ''aGlzW2hdPW51bGwhPT0odj1udWxsPT09KGY9dGhpcy5yZW5kZXJSb290KXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5xdWVyeVNlbGVjdG9yKGMpKSYmdm9pZCAwIT09dj92Om51bGwpLHRoaXNbaF19fXJldHVybiBkfX0pfSgic3ZnIildLFdmLnByb3RvdHlwZSwic3ZnIix2b2lkIDApLGZ1bmN0''@;'; put 'put ''aW9uIHhTZShjLGwpe1FvZSgpJiZlc2UoWyJjdXN0b21FbGVtZW50cyJdKSYmTVNlKGMsbCx3aW5kb3cuY3VzdG9tRWxlbWVudHMpfSgiY2RzLWljb24iLFdmKTtjb25zdCBCWj1jPT5jJiYibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgYztmdW5jdGlvbiBY''@;'; put 'put ''c2UoYyl7cmV0dXJuICRlKGM/LnRoZW4pfWZ1bmN0aW9uIEpzZShjKXtyZXR1cm4gJGUoY1toaV0pfWZ1bmN0aW9uIFFzZShjKXtyZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3ImJiRlKGM/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pfWZ1bmN0aW9uIGVsZShjKXtyZXR1cm4gbmV3IFR5cGVF''@;'; put 'put ''cnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwg''@;'; put 'put ''QXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IHRsZT1mdW5jdGlvbiBOTWUoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIn0oKTtmdW5jdGlvbiBubGUoYyl7cmV0dXJu''@;'; put 'put ''ICRlKGM/Llt0bGVdKX1mdW5jdGlvbiBybGUoYyl7cmV0dXJuIGZ1bmN0aW9uIHBzZShjLGwsYSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBoLGQ9YS5hcHBseShjLGx8fFtd''@;'; put 'put ''KSxmPVtdO3JldHVybiBoPU9iamVjdC5jcmVhdGUoKCJmdW5jdGlvbiI9PXR5cGVvZiBBc3luY0l0ZXJhdG9yP0FzeW5jSXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpLE0oIm5leHQiKSxNKCJ0aHJvdyIpLE0oInJldHVybiIsZnVuY3Rpb24gdihFZSl7cmV0dXJuIGZ1bmN0aW9uKEJlKXty''@;'; put 'put ''ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEJlKS50aGVuKEVlLGNlKX19KSxoW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoO2Z1bmN0aW9uIE0oRWUsQmUpe2RbRWVdJiYoaFtFZV09ZnVuY3Rpb24ocWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihy''@;'; put 'put ''dCxwdCl7Zi5wdXNoKFtFZSxxZSxydCxwdF0pPjF8fEQoRWUscWUpfSl9LEJlJiYoaFtFZV09QmUoaFtFZV0pKSl9ZnVuY3Rpb24gRChFZSxCZSl7dHJ5eyFmdW5jdGlvbiBaKEVlKXtFZS52YWx1ZSBpbnN0YW5jZW9mIHJtP1Byb21pc2UucmVzb2x2ZShFZS52YWx1ZS52KS50aGVuKHJlLGNl''@;'; put 'put ''KTpiZShmWzBdWzJdLEVlKX0oZFtFZV0oQmUpKX1jYXRjaChxZSl7YmUoZlswXVszXSxxZSl9fWZ1bmN0aW9uIHJlKEVlKXtEKCJuZXh0IixFZSl9ZnVuY3Rpb24gY2UoRWUpe0QoInRocm93IixFZSl9ZnVuY3Rpb24gYmUoRWUsQmUpe0VlKEJlKSxmLnNoaWZ0KCksZi5sZW5ndGgmJkQoZlsw''@;'; put 'put ''XVswXSxmWzBdWzFdKX19KHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpkLGRvbmU6aH09eWllbGQgcm0oYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIHJtKHZvaWQgMCk7eWllbGQgeWllbGQgcm0oZCl9''@;'; put 'put ''fWZpbmFsbHl7YS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIGlsZShjKXtyZXR1cm4gJGUoYz8uZ2V0UmVhZGVyKX1mdW5jdGlvbiBsMShjKXtpZihjIGluc3RhbmNlb2YgWHQpcmV0dXJuIGM7aWYobnVsbCE9Yyl7aWYoSnNlKGMpKXJldHVybiBmdW5jdGlvbiBWTWUoYyl7cmV0dXJuIG5l''@;'; put 'put ''dyBYdChsPT57Y29uc3QgYT1jW2hpXSgpO2lmKCRlKGEuc3Vic2NyaWJlKSlyZXR1cm4gYS5zdWJzY3JpYmUobCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0pfShjKTtpZihCWihj''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gQk1lKGMpe3JldHVybiBuZXcgWHQobD0+e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGgmJiFsLmNsb3NlZDthKyspbC5uZXh0KGNbYV0pO2wuY29tcGxldGUoKX0pfShjKTtpZihYc2UoYykpcmV0dXJuIGZ1bmN0aW9uIGpNZShjKXtyZXR1cm4gbmV3IFh0KGw9Pntj''@;'; put 'put ''LnRoZW4oYT0+e2wuY2xvc2VkfHwobC5uZXh0KGEpLGwuY29tcGxldGUoKSl9LGE9PmwuZXJyb3IoYSkpLnRoZW4obnVsbCxSaSl9KX0oYyk7aWYoUXNlKGMpKXJldHVybiBhbGUoYyk7aWYobmxlKGMpKXJldHVybiBmdW5jdGlvbiB6TWUoYyl7cmV0dXJuIG5ldyBYdChsPT57Zm9yKGNvbnN0''@;'; put 'put ''IGEgb2YgYylpZihsLm5leHQoYSksbC5jbG9zZWQpcmV0dXJuO2wuY29tcGxldGUoKX0pfShjKTtpZihpbGUoYykpcmV0dXJuIGZ1bmN0aW9uIFVNZShjKXtyZXR1cm4gYWxlKHJsZShjKSl9KGMpfXRocm93IGVsZShjKX1mdW5jdGlvbiBhbGUoYyl7cmV0dXJuIG5ldyBYdChsPT57KGZ1bmN0''@;'; put 'put ''aW9uIFpNZShjLGwpe3ZhciBhLGQsaCxmO3JldHVybiBmdW5jdGlvbiBoc2UoYyxsLGEsZCl7cmV0dXJuIG5ldyhhfHwoYT1Qcm9taXNlKSkoZnVuY3Rpb24oZix2KXtmdW5jdGlvbiBNKHJlKXt0cnl7WihkLm5leHQocmUpKX1jYXRjaChjZSl7dihjZSl9fWZ1bmN0aW9uIEQocmUpe3RyeXta''@;'; put 'put ''KGQudGhyb3cocmUpKX1jYXRjaChjZSl7dihjZSl9fWZ1bmN0aW9uIFoocmUpe3JlLmRvbmU/ZihyZS52YWx1ZSk6ZnVuY3Rpb24gaChmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIGE/ZjpuZXcgYShmdW5jdGlvbih2KXt2KGYpfSl9KHJlLnZhbHVlKS50aGVuKE0sRCl9WigoZD1kLmFwcGx5KGMs''@;'; put 'put ''bHx8W10pKS5uZXh0KCkpfSl9KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0cnl7Zm9yKGE9Z3NlKGMpOyEoZD15aWVsZCBhLm5leHQoKSkuZG9uZTspaWYobC5uZXh0KGQudmFsdWUpLGwuY2xvc2VkKXJldHVybn1jYXRjaCh2KXtoPXtlcnJvcjp2fX1maW5hbGx5e3RyeXtkJiYh''@;'; put 'put ''ZC5kb25lJiYoZj1hLnJldHVybikmJih5aWVsZCBmLmNhbGwoYSkpfWZpbmFsbHl7aWYoaCl0aHJvdyBoLmVycm9yfX1sLmNvbXBsZXRlKCl9KX0pKGMsbCkuY2F0Y2goYT0+bC5lcnJvcihhKSl9KX1mdW5jdGlvbiBuZyhjLGwsYSxkPTAsaD0hMSl7Y29uc3QgZj1sLnNjaGVkdWxlKGZ1bmN0''@;'; put 'put ''aW9uKCl7YSgpLGg/Yy5hZGQodGhpcy5zY2hlZHVsZShudWxsLGQpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LGQpO2lmKGMuYWRkKGYpLCFoKXJldHVybiBmfWZ1bmN0aW9uIG9sZShjLGw9MCl7cmV0dXJuIFZpKChhLGQpPT57YS5zdWJzY3JpYmUoTmkoZCxoPT5uZyhkLGMsKCk9PmQubmV4dCho''@;'; put 'put ''KSxsKSwoKT0+bmcoZCxjLCgpPT5kLmNvbXBsZXRlKCksbCksaD0+bmcoZCxjLCgpPT5kLmVycm9yKGgpLGwpKSl9KX1mdW5jdGlvbiBzbGUoYyxsPTApe3JldHVybiBWaSgoYSxkKT0+e2QuYWRkKGMuc2NoZWR1bGUoKCk9PmEuc3Vic2NyaWJlKGQpLGwpKX0pfWZ1bmN0aW9uIGxsZShjLGwp''@;'; put 'put ''e2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IFh0KGE9PntuZyhhLGwsKCk9Pntjb25zdCBkPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7bmcoYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2EuY29tcGxldGUoKTph''@;'; put 'put ''Lm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIFl1KGMsbCl7cmV0dXJuIGw/ZnVuY3Rpb24gcU1lKGMsbCl7aWYobnVsbCE9Yyl7aWYoSnNlKGMpKXJldHVybiBmdW5jdGlvbiBXTWUoYyxsKXtyZXR1cm4gbDEoYykucGlwZShzbGUobCksb2xlKGwpKX0oYyxsKTtpZihCWihj''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gR01lKGMsbCl7cmV0dXJuIG5ldyBYdChhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVsZShmdW5jdGlvbigpe2Q9PT1jLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0oYyxsKTtpZihY''@;'; put 'put ''c2UoYykpcmV0dXJuIGZ1bmN0aW9uIFlNZShjLGwpe3JldHVybiBsMShjKS5waXBlKHNsZShsKSxvbGUobCkpfShjLGwpO2lmKFFzZShjKSlyZXR1cm4gbGxlKGMsbCk7aWYobmxlKGMpKXJldHVybiBmdW5jdGlvbiAkTWUoYyxsKXtyZXR1cm4gbmV3IFh0KGE9PntsZXQgZDtyZXR1cm4gbmco''@;'; put 'put ''YSxsLCgpPT57ZD1jW3RsZV0oKSxuZyhhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2godil7cmV0dXJuIHZvaWQgYS5lcnJvcih2KX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PiRlKGQ/LnJldHVybikmJmQucmV0dXJu''@;'; put 'put ''KCl9KX0oYyxsKTtpZihpbGUoYykpcmV0dXJuIGZ1bmN0aW9uIEtNZShjLGwpe3JldHVybiBsbGUocmxlKGMpLGwpfShjLGwpfXRocm93IGVsZShjKX0oYyxsKTpsMShjKX1mdW5jdGlvbiBjbGUoYyl7cmV0dXJuIGMmJiRlKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIGpaKGMpe3JldHVybiBjW2Mu''@;'; put 'put ''bGVuZ3RoLTFdfWZ1bmN0aW9uIHVsZShjKXtyZXR1cm4gJGUoalooYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGpNKGMpe3JldHVybiBjbGUoalooYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGZvKC4uLmMpe3JldHVybiBZdShjLGpNKGMpKX1jb25zdHtpc0FycmF5OkpNZX09QXJy''@;'; put 'put ''YXkse2dldFByb3RvdHlwZU9mOlFNZSxwcm90b3R5cGU6ZXhlLGtleXM6dHhlfT1PYmplY3Q7ZnVuY3Rpb24gZGxlKGMpe2lmKDE9PT1jLmxlbmd0aCl7Y29uc3QgbD1jWzBdO2lmKEpNZShsKSlyZXR1cm57YXJnczpsLGtleXM6bnVsbH07aWYoZnVuY3Rpb24gbnhlKGMpe3JldHVybiBjJiYi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIGMmJlFNZShjKT09PWV4ZX0obCkpe2NvbnN0IGE9dHhlKGwpO3JldHVybnthcmdzOmEubWFwKGQ9PmxbZF0pLGtleXM6YX19fXJldHVybnthcmdzOmMsa2V5czpudWxsfX1jb25zdHtpc0FycmF5OnJ4ZX09QXJyYXk7ZnVuY3Rpb24gelooYyl7cmV0dXJuIExyKGw9''@;'; put 'put ''PmZ1bmN0aW9uIGl4ZShjLGwpe3JldHVybiByeGUobCk/YyguLi5sKTpjKGwpfShjLGwpKX1mdW5jdGlvbiBobGUoYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gcTgoLi4uYyl7Y29uc3QgbD1qTShjKSxhPXVsZShjKSx7YXJnczpkLGtl''@;'; put 'put ''eXM6aH09ZGxlKGMpO2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gWXUoW10sbCk7Y29uc3QgZj1uZXcgWHQoZnVuY3Rpb24gYXhlKGMsbCxhPWNuKXtyZXR1cm4gZD0+e2ZsZShsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IHY9aCxNPWg7Zm9yKGxldCBEPTA7RDxo''@;'; put 'put ''O0QrKylmbGUobCwoKT0+e2NvbnN0IFo9WXUoY1tEXSxsKTtsZXQgcmU9ITE7Wi5zdWJzY3JpYmUoTmkoZCxjZT0+e2ZbRF09Y2UscmV8fChyZT0hMCxNLS0pLE18fGQubmV4dChhKGYuc2xpY2UoKSkpfSwoKT0+ey0tdnx8ZC5jb21wbGV0ZSgpfSkpfSxkKX0sZCl9fShkLGwsaD92PT5obGUo''@;'; put 'put ''aCx2KTpjbikpO3JldHVybiBhP2YucGlwZSh6WihhKSk6Zn1mdW5jdGlvbiBmbGUoYyxsLGEpe2M/bmcoYSxjLGwpOmwoKX1jb25zdCBSUj10dChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNl''@;'; put 'put ''In0pO2Z1bmN0aW9uIE4wKGMsbCxhPTEvMCl7cmV0dXJuICRlKGwpP04wKChkLGgpPT5McigoZix2KT0+bChkLGYsaCx2KSkobDEoYyhkLGgpKSksYSk6KCJudW1iZXIiPT10eXBlb2YgbCYmKGE9bCksVmkoKGQsaCk9PmZ1bmN0aW9uIG94ZShjLGwsYSxkLGgsZix2LE0pe2NvbnN0IEQ9W107''@;'; put 'put ''bGV0IFo9MCxyZT0wLGNlPSExO2NvbnN0IGJlPSgpPT57Y2UmJiFELmxlbmd0aCYmIVomJmwuY29tcGxldGUoKX0sRWU9cWU9Plo8ZD9CZShxZSk6RC5wdXNoKHFlKSxCZT1xZT0+e2YmJmwubmV4dChxZSksWisrO2xldCBydD0hMTtsMShhKHFlLHJlKyspKS5zdWJzY3JpYmUoTmkobCxwdD0+''@;'; put 'put ''e2g/LihwdCksZj9FZShwdCk6bC5uZXh0KHB0KX0sKCk9PntydD0hMH0sdm9pZCAwLCgpPT57aWYocnQpdHJ5e2ZvcihaLS07RC5sZW5ndGgmJlo8ZDspe2NvbnN0IHB0PUQuc2hpZnQoKTt2P25nKGwsdiwoKT0+QmUocHQpKTpCZShwdCl9YmUoKX1jYXRjaChwdCl7bC5lcnJvcihwdCl9fSkp''@;'; put 'put ''fTtyZXR1cm4gYy5zdWJzY3JpYmUoTmkobCxFZSwoKT0+e2NlPSEwLGJlKCl9KSksKCk9PntNPy4oKX19KGQsaCxjLGEpKSl9ZnVuY3Rpb24gZXkoYz0xLzApe3JldHVybiBOMChjbixjKX1mdW5jdGlvbiBVWiguLi5jKXtyZXR1cm4gZnVuY3Rpb24gc3hlKCl7cmV0dXJuIGV5KDEpfSgpKFl1''@;'; put 'put ''KGMsak0oYykpKX1mdW5jdGlvbiBwbGUoYyl7cmV0dXJuIG5ldyBYdChsPT57bDEoYygpKS5zdWJzY3JpYmUobCl9KX1mdW5jdGlvbiB6TShjLGwpe2NvbnN0IGE9JGUoYyk/YzooKT0+YyxkPWg9PmguZXJyb3IoYSgpKTtyZXR1cm4gbmV3IFh0KGw/aD0+bC5zY2hlZHVsZShkLDAsaCk6ZCl9''@;'; put 'put ''Y29uc3QgTTI9bmV3IFh0KGM9PmMuY29tcGxldGUoKSk7ZnVuY3Rpb24gWlooKXtyZXR1cm4gVmkoKGMsbCk9PntsZXQgYT1udWxsO2MuX3JlZkNvdW50Kys7Y29uc3QgZD1OaShsLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCgpPT57aWYoIWN8fGMuX3JlZkNvdW50PD0wfHwwPC0tYy5fcmVmQ291''@;'; put 'put ''bnQpcmV0dXJuIHZvaWQoYT1udWxsKTtjb25zdCBoPWMuX2Nvbm5lY3Rpb24sZj1hO2E9bnVsbCxoJiYoIWZ8fGg9PT1mKSYmaC51bnN1YnNjcmliZSgpLGwudW5zdWJzY3JpYmUoKX0pO2Muc3Vic2NyaWJlKGQpLGQuY2xvc2VkfHwoYT1jLmNvbm5lY3QoKSl9KX1jbGFzcyBXWiBleHRlbmRz''@;'; put 'put ''IFh0e2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLnNvdXJjZT1sLHRoaXMuc3ViamVjdEZhY3Rvcnk9YSx0aGlzLl9zdWJqZWN0PW51bGwsdGhpcy5fcmVmQ291bnQ9MCx0aGlzLl9jb25uZWN0aW9uPW51bGwsUXIobCkmJih0aGlzLmxpZnQ9bC5saWZ0KX1fc3Vic2NyaWJlKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUobCl9Z2V0U3ViamVjdCgpe2NvbnN0IGw9dGhpcy5fc3ViamVjdDtyZXR1cm4oIWx8fGwuaXNTdG9wcGVkKSYmKHRoaXMuX3N1YmplY3Q9dGhpcy5zdWJqZWN0RmFjdG9yeSgpKSx0aGlzLl9zdWJqZWN0fV90ZWFyZG93bigpe3RoaXMu''@;'; put 'put ''X3JlZkNvdW50PTA7Y29uc3R7X2Nvbm5lY3Rpb246bH09dGhpczt0aGlzLl9zdWJqZWN0PXRoaXMuX2Nvbm5lY3Rpb249bnVsbCxsPy51bnN1YnNjcmliZSgpfWNvbm5lY3QoKXtsZXQgbD10aGlzLl9jb25uZWN0aW9uO2lmKCFsKXtsPXRoaXMuX2Nvbm5lY3Rpb249bmV3IHF0O2NvbnN0IGE9''@;'; put 'put ''dGhpcy5nZXRTdWJqZWN0KCk7bC5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKE5pKGEsdm9pZCAwLCgpPT57dGhpcy5fdGVhcmRvd24oKSxhLmNvbXBsZXRlKCl9LGQ9Pnt0aGlzLl90ZWFyZG93bigpLGEuZXJyb3IoZCl9LCgpPT50aGlzLl90ZWFyZG93bigpKSkpLGwuY2xvc2VkJiYodGhp''@;'; put 'put ''cy5fY29ubmVjdGlvbj1udWxsLGw9cXQuRU1QVFkpfXJldHVybiBsfXJlZkNvdW50KCl7cmV0dXJuIFpaKCkodGhpcyl9fWZ1bmN0aW9uIFYxKGMsbCl7cmV0dXJuIFZpKChhLGQpPT57bGV0IGg9bnVsbCxmPTAsdj0hMTtjb25zdCBNPSgpPT52JiYhaCYmZC5jb21wbGV0ZSgpO2Euc3Vic2Ny''@;'; put 'put ''aWJlKE5pKGQsRD0+e2g/LnVuc3Vic2NyaWJlKCk7bGV0IFo9MDtjb25zdCByZT1mKys7bDEoYyhELHJlKSkuc3Vic2NyaWJlKGg9TmkoZCxjZT0+ZC5uZXh0KGw/bChELGNlLHJlLForKyk6Y2UpLCgpPT57aD1udWxsLE0oKX0pKX0sKCk9Pnt2PSEwLE0oKX0pKX0pfWZ1bmN0aW9uIFlmKGMp''@;'; put 'put ''e3JldHVybiBjPD0wPygpPT5NMjpWaSgobCxhKT0+e2xldCBkPTA7bC5zdWJzY3JpYmUoTmkoYSxoPT57KytkPD1jJiYoYS5uZXh0KGgpLGM8PWQmJmEuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiB4MiguLi5jKXtjb25zdCBsPWpNKGMpO3JldHVybiBWaSgoYSxkKT0+eyhsP1VaKGMsYSxs''@;'; put 'put ''KTpVWihjLGEpKS5zdWJzY3JpYmUoZCl9KX1mdW5jdGlvbiAkbChjLGwpe3JldHVybiBWaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoTmkoZCxmPT5jLmNhbGwobCxmLGgrKykmJmQubmV4dChmKSkpfSl9ZnVuY3Rpb24gTFIoYyl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGQ9ITE7bC5z''@;'; put 'put ''dWJzY3JpYmUoTmkoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT57ZHx8YS5uZXh0KGMpLGEuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIGdsZShjPWN4ZSl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoTmkoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT5kP2EuY29t''@;'; put 'put ''cGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIGN4ZSgpe3JldHVybiBuZXcgUlJ9ZnVuY3Rpb24gYW0oYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjPyRsKChoLGYpPT5jKGgsZixkKSk6Y24sWWYoMSksYT9MUihsKTpnbGUoKCk9Pm5l''@;'; put 'put ''dyBSUikpfWZ1bmN0aW9uIHR5KGMsbCl7cmV0dXJuICRlKGwpP04wKGMsbCwxKTpOMChjLDEpfWZ1bmN0aW9uIEd1KGMsbCxhKXtjb25zdCBkPSRlKGMpfHxsfHxhP3tuZXh0OmMsZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP1ZpKChoLGYpPT57dmFyIHY7bnVsbD09PSh2PWQuc3Vi''@;'; put 'put ''c2NyaWJlKXx8dm9pZCAwPT09dnx8di5jYWxsKGQpO2xldCBNPSEwO2guc3Vic2NyaWJlKE5pKGYsRD0+e3ZhciBaO251bGw9PT0oWj1kLm5leHQpfHx2b2lkIDA9PT1afHxaLmNhbGwoZCxEKSxmLm5leHQoRCl9LCgpPT57dmFyIEQ7TT0hMSxudWxsPT09KEQ9ZC5jb21wbGV0ZSl8fHZvaWQg''@;'; put 'put ''MD09PUR8fEQuY2FsbChkKSxmLmNvbXBsZXRlKCl9LEQ9Pnt2YXIgWjtNPSExLG51bGw9PT0oWj1kLmVycm9yKXx8dm9pZCAwPT09Wnx8Wi5jYWxsKGQsRCksZi5lcnJvcihEKX0sKCk9Pnt2YXIgRCxaO00mJihudWxsPT09KEQ9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09PUR8fEQuY2FsbChk''@;'; put 'put ''KSksbnVsbD09PShaPWQuZmluYWxpemUpfHx2b2lkIDA9PT1afHxaLmNhbGwoZCl9KSl9KTpjbn1mdW5jdGlvbiBYOChjKXtyZXR1cm4gVmkoKGwsYSk9PntsZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKE5pKGEsdm9pZCAwLHZvaWQgMCx2PT57Zj1sMShjKHYsWDgoYykobCkpKSxk''@;'; put 'put ''PyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpoPSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKX0pfWZ1bmN0aW9uIFlaKGMpe3JldHVybiBjPD0wPygpPT5NMjpWaSgobCxhKT0+e2xldCBkPVtdO2wuc3Vic2NyaWJlKE5pKGEs''@;'; put 'put ''aD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiBVTShjKXtyZXR1cm4gVmkoKGwsYSk9Pnt0cnl7bC5zdWJzY3JpYmUoYSl9ZmluYWxs''@;'; put 'put ''eXthLmFkZChjKX19KX1mdW5jdGlvbiBWMChjKXtyZXR1cm4gVmkoKGwsYSk9PntsMShjKS5zdWJzY3JpYmUoTmkoYSwoKT0+YS5jb21wbGV0ZSgpLGhuKSksIWEuY2xvc2VkJiZsLnN1YnNjcmliZShhKX0pfWNvbnN0IEtvPSJwcmltYXJ5IixaTT1TeW1ib2woIlJvdXRlVGl0bGUiKTtjbGFz''@;'; put 'put ''cyBweGV7Y29uc3RydWN0b3IobCl7dGhpcy5wYXJhbXM9bHx8e319aGFzKGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJhbXMsbCl9Z2V0KGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5p''@;'; put 'put ''c0FycmF5KGEpP2FbMF06YX1yZXR1cm4gbnVsbH1nZXRBbGwobCl7aWYodGhpcy5oYXMobCkpe2NvbnN0IGE9dGhpcy5wYXJhbXNbbF07cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/YTpbYV19cmV0dXJuW119Z2V0IGtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpfX1mdW5j''@;'; put 'put ''dGlvbiBueShjKXtyZXR1cm4gbmV3IHB4ZShjKX1mdW5jdGlvbiBneGUoYyxsLGEpe2NvbnN0IGQ9YS5wYXRoLnNwbGl0KCIvIik7aWYoZC5sZW5ndGg+Yy5sZW5ndGh8fCJmdWxsIj09PWEucGF0aE1hdGNoJiYobC5oYXNDaGlsZHJlbigpfHxkLmxlbmd0aDxjLmxlbmd0aCkpcmV0dXJuIG51''@;'; put 'put ''bGw7Y29uc3QgaD17fTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyl7Y29uc3Qgdj1kW2ZdLE09Y1tmXTtpZih2LnN0YXJ0c1dpdGgoIjoiKSloW3Yuc3Vic3RyaW5nKDEpXT1NO2Vsc2UgaWYodiE9PU0ucGF0aClyZXR1cm4gbnVsbH1yZXR1cm57Y29uc3VtZWQ6Yy5zbGljZSgwLGQubGVu''@;'; put 'put ''Z3RoKSxwb3NQYXJhbXM6aH19ZnVuY3Rpb24gaHAoYyxsKXtjb25zdCBhPWM/R1ooYyk6dm9pZCAwLGQ9bD9HWihsKTp2b2lkIDA7aWYoIWF8fCFkfHxhLmxlbmd0aCE9ZC5sZW5ndGgpcmV0dXJuITE7bGV0IGg7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspaWYoaD1hW2ZdLCFtbGUoY1to''@;'; put 'put ''XSxsW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBHWihjKXtyZXR1cm5bLi4uT2JqZWN0LmtleXMoYyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19ZnVuY3Rpb24gbWxlKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSYmQXJyYXkuaXNBcnJheShsKSl7aWYoYy5s''@;'; put 'put ''ZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtjb25zdCBhPVsuLi5jXS5zb3J0KCksZD1bLi4ubF0uc29ydCgpO3JldHVybiBhLmV2ZXJ5KChoLGYpPT5kW2ZdPT09aCl9cmV0dXJuIGM9PT1sfWZ1bmN0aW9uIHZsZShjKXtyZXR1cm4gYy5sZW5ndGg+MD9jW2MubGVuZ3RoLTFdOm51bGx9ZnVu''@;'; put 'put ''Y3Rpb24gb20oYyl7cmV0dXJuIEJNKGMpP2M6X00oYyk/WXUoUHJvbWlzZS5yZXNvbHZlKGMpKTpmbyhjKX1jb25zdCB2eGU9e2V4YWN0OmZ1bmN0aW9uIF9sZShjLGwsYSl7aWYoIUo4KGMuc2VnbWVudHMsbC5zZWdtZW50cyl8fCFPUihjLnNlZ21lbnRzLGwuc2VnbWVudHMsYSl8fGMubnVt''@;'; put 'put ''YmVyT2ZDaGlsZHJlbiE9PWwubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IoY29uc3QgZCBpbiBsLmNoaWxkcmVuKWlmKCFjLmNoaWxkcmVuW2RdfHwhX2xlKGMuY2hpbGRyZW5bZF0sbC5jaGlsZHJlbltkXSxhKSlyZXR1cm4hMTtyZXR1cm4hMH0sc3Vic2V0OndsZX0sYmxlPXtleGFj''@;'; put 'put ''dDpmdW5jdGlvbiBieGUoYyxsKXtyZXR1cm4gaHAoYyxsKX0sc3Vic2V0OmZ1bmN0aW9uIHl4ZShjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5sZW5ndGg8PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmT2JqZWN0LmtleXMobCkuZXZlcnkoYT0+bWxlKGNbYV0sbFthXSkpfSxpZ25vcmVkOigp''@;'; put 'put ''PT4hMH07ZnVuY3Rpb24geWxlKGMsbCxhKXtyZXR1cm4gdnhlW2EucGF0aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZibGVbYS5xdWVyeVBhcmFtc10oYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKSYmISgiZXhhY3QiPT09YS5mcmFnbWVudCYmYy5mcmFnbWVudCE9PWwu''@;'; put 'put ''ZnJhZ21lbnQpfWZ1bmN0aW9uIHdsZShjLGwsYSl7cmV0dXJuIENsZShjLGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBDbGUoYyxsLGEsZCl7aWYoYy5zZWdtZW50cy5sZW5ndGg+YS5sZW5ndGgpe2NvbnN0IGg9Yy5zZWdtZW50cy5zbGljZSgwLGEubGVuZ3RoKTtyZXR1cm4hKCFKOChoLGEp''@;'; put 'put ''fHxsLmhhc0NoaWxkcmVuKCl8fCFPUihoLGEsZCkpfWlmKGMuc2VnbWVudHMubGVuZ3RoPT09YS5sZW5ndGgpe2lmKCFKOChjLnNlZ21lbnRzLGEpfHwhT1IoYy5zZWdtZW50cyxhLGQpKXJldHVybiExO2Zvcihjb25zdCBoIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5baF18fCF3bGUo''@;'; put 'put ''Yy5jaGlsZHJlbltoXSxsLmNoaWxkcmVuW2hdLGQpKXJldHVybiExO3JldHVybiEwfXtjb25zdCBoPWEuc2xpY2UoMCxjLnNlZ21lbnRzLmxlbmd0aCksZj1hLnNsaWNlKGMuc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIShKOChjLnNlZ21lbnRzLGgpJiZPUihjLnNlZ21lbnRzLGgsZCkmJmMu''@;'; put 'put ''Y2hpbGRyZW5bS29dKSYmQ2xlKGMuY2hpbGRyZW5bS29dLGwsZixkKX19ZnVuY3Rpb24gT1IoYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT5ibGVbYV0oY1toXS5wYXJhbWV0ZXJzLGQucGFyYW1ldGVycykpfWNsYXNzIHJ5e2NvbnN0cnVjdG9yKGw9bmV3IEtsKFtdLHt9KSxhPXt9LGQ9''@;'; put 'put ''bnVsbCl7dGhpcy5yb290PWwsdGhpcy5xdWVyeVBhcmFtcz1hLHRoaXMuZnJhZ21lbnQ9ZH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89bnkodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiBDeGUu''@;'; put 'put ''c2VyaWFsaXplKHRoaXMpfX1jbGFzcyBLbHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2VnbWVudHM9bCx0aGlzLmNoaWxkcmVuPWEsdGhpcy5wYXJlbnQ9bnVsbCxPYmplY3QudmFsdWVzKGEpLmZvckVhY2goZD0+ZC5wYXJlbnQ9dGhpcyl9aGFzQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5udW1i''@;'; put 'put ''ZXJPZkNoaWxkcmVuPjB9Z2V0IG51bWJlck9mQ2hpbGRyZW4oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofXRvU3RyaW5nKCl7cmV0dXJuIFBSKHRoaXMpfX1jbGFzcyBXTXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGF0aD1sLHRoaXMucGFyYW1ldGVycz1hfWdl''@;'; put 'put ''dCBwYXJhbWV0ZXJNYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwPz89bnkodGhpcy5wYXJhbWV0ZXJzKSx0aGlzLl9wYXJhbWV0ZXJNYXB9dG9TdHJpbmcoKXtyZXR1cm4geGxlKHRoaXMpfX1mdW5jdGlvbiBKOChjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVuZ3RoJiZjLmV2ZXJ5''@;'; put 'put ''KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCBpeT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9Pm5ldyAkWixwcm92aWRlZElu''@;'; put 'put ''OiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgJFp7cGFyc2UobCl7Y29uc3QgYT1uZXcgTHhlKGwpO3JldHVybiBuZXcgcnkoYS5wYXJzZVJvb3RTZWdtZW50KCksYS5wYXJzZVF1ZXJ5UGFyYW1zKCksYS5wYXJzZUZyYWdtZW50KCkpfXNlcmlhbGl6ZShsKXtjb25zdCBhPWAvJHtZTShs''@;'; put 'put ''LnJvb3QsITApfWAsZD1mdW5jdGlvbiB4eGUoYyl7Y29uc3QgbD1PYmplY3QuZW50cmllcyhjKS5tYXAoKFthLGRdKT0+QXJyYXkuaXNBcnJheShkKT9kLm1hcChoPT5gJHtGUihhKX09JHtGUihoKX1gKS5qb2luKCImIik6YCR7RlIoYSl9PSR7RlIoZCl9YCkuZmlsdGVyKGE9PmEpO3JldHVy''@;'; put 'put ''biBsLmxlbmd0aD9gPyR7bC5qb2luKCImIil9YDoiIn0obC5xdWVyeVBhcmFtcyksaD0ic3RyaW5nIj09dHlwZW9mIGwuZnJhZ21lbnQ/YCMke2Z1bmN0aW9uIFN4ZShjKXtyZXR1cm4gZW5jb2RlVVJJKGMpfShsLmZyYWdtZW50KX1gOiIiO3JldHVybmAke2F9JHtkfSR7aH1gfX1jb25zdCBD''@;'; put 'put ''eGU9bmV3ICRaO2Z1bmN0aW9uIFBSKGMpe3JldHVybiBjLnNlZ21lbnRzLm1hcChsPT54bGUobCkpLmpvaW4oIi8iKX1mdW5jdGlvbiBZTShjLGwpe2lmKCFjLmhhc0NoaWxkcmVuKCkpcmV0dXJuIFBSKGMpO2lmKGwpe2NvbnN0IGE9Yy5jaGlsZHJlbltLb10/WU0oYy5jaGlsZHJlbltLb10s''@;'; put 'put ''ITEpOiIiLGQ9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2ghPT1LbyYmZC5wdXNoKGAke2h9OiR7WU0oZiwhMSl9YCl9KSxkLmxlbmd0aD4wP2Ake2F9KCR7ZC5qb2luKCIvLyIpfSlgOmF9e2NvbnN0IGE9ZnVuY3Rpb24gd3hlKGMsbCl7''@;'; put 'put ''bGV0IGE9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2Q9PT1LbyYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbZCxoXSk9PntkIT09S28mJihhPWEuY29uY2F0KGwoaCxkKSkp''@;'; put 'put ''fSksYX0oYywoZCxoKT0+aD09PUtvP1tZTShjLmNoaWxkcmVuW0tvXSwhMSldOltgJHtofToke1lNKGQsITEpfWBdKTtyZXR1cm4gMT09PU9iamVjdC5rZXlzKGMuY2hpbGRyZW4pLmxlbmd0aCYmbnVsbCE9Yy5jaGlsZHJlbltLb10/YCR7UFIoYyl9LyR7YVswXX1gOmAke1BSKGMpfS8oJHth''@;'; put 'put ''LmpvaW4oIi8vIil9KWB9fWZ1bmN0aW9uIFNsZShjKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGMpLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiBGUihjKXtyZXR1cm4g''@;'; put 'put ''U2xlKGMpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIEtaKGMpe3JldHVybiBTbGUoYykucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5IikucmVwbGFjZSgvJTI2L2dpLCImIil9ZnVuY3Rpb24gSFIoYyl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjKX1m''@;'; put 'put ''dW5jdGlvbiBNbGUoYyl7cmV0dXJuIEhSKGMucmVwbGFjZSgvXCsvZywiJTIwIikpfWZ1bmN0aW9uIHhsZShjKXtyZXR1cm5gJHtLWihjLnBhdGgpfSR7ZnVuY3Rpb24gTXhlKGMpe3JldHVybiBPYmplY3QuZW50cmllcyhjKS5tYXAoKFtsLGFdKT0+YDske0taKGwpfT0ke0taKGEpfWApLmpv''@;'; put 'put ''aW4oIiIpfShjLnBhcmFtZXRlcnMpfWB9Y29uc3QgRXhlPS9eW15cLygpPzsjXSsvO2Z1bmN0aW9uIHFaKGMpe2NvbnN0IGw9Yy5tYXRjaChFeGUpO3JldHVybiBsP2xbMF06IiJ9Y29uc3QgVHhlPS9eW15cLygpPzs9I10rLyxreGU9L15bXj0/JiNdKy8sSXhlPS9eW14mI10rLztjbGFzcyBM''@;'; put 'put ''eGV7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bCx0aGlzLnJlbWFpbmluZz1sfXBhcnNlUm9vdFNlZ21lbnQoKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgo''@;'; put 'put ''IiMiKT9uZXcgS2woW10se30pOm5ldyBLbChbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9cGFyc2VRdWVyeVBhcmFtcygpe2NvbnN0IGw9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbShsKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgi''@;'; put 'put ''JiIpKTtyZXR1cm4gbH1wYXJzZUZyYWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfXBhcnNlQ2hpbGRyZW4oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9w''@;'; put 'put ''dGlvbmFsKCIvIik7Y29uc3QgbD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHxsLnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRo''@;'; put 'put ''aXMuY2FwdHVyZSgiLyIpLGwucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTtsZXQgYT17fTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksYT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7bGV0IGQ9e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYm''@;'; put 'put ''KGQ9dGhpcy5wYXJzZVBhcmVucyghMSkpLChsLmxlbmd0aD4wfHxPYmplY3Qua2V5cyhhKS5sZW5ndGg+MCkmJihkW0tvXT1uZXcgS2wobCxhKSksZH1wYXJzZVNlZ21lbnQoKXtjb25zdCBsPXFaKHRoaXMucmVtYWluaW5nKTtpZigiIj09PWwmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0''@;'; put 'put ''aHJvdyBuZXcgUW4oNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShsKSxuZXcgV00oSFIobCksdGhpcy5wYXJzZU1hdHJpeFBhcmFtcygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0obCk7''@;'; put 'put ''cmV0dXJuIGx9cGFyc2VQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIEF4ZShjKXtjb25zdCBsPWMubWF0Y2goVHhlKTtyZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgi''@;'; put 'put ''PSIpKXtjb25zdCBoPXFaKHRoaXMucmVtYWluaW5nKTtoJiYoZD1oLHRoaXMuY2FwdHVyZShkKSl9bFtIUihhKV09SFIoZCl9cGFyc2VRdWVyeVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gRHhlKGMpe2NvbnN0IGw9Yy5tYXRjaChreGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWlu''@;'; put 'put ''aW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe2NvbnN0IHY9ZnVuY3Rpb24gUnhlKGMpe2NvbnN0IGw9Yy5tYXRjaChJeGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTt2JiYoZD12LHRoaXMu''@;'; put 'put ''Y2FwdHVyZShkKSl9Y29uc3QgaD1NbGUoYSksZj1NbGUoZCk7aWYobC5oYXNPd25Qcm9wZXJ0eShoKSl7bGV0IHY9bFtoXTtBcnJheS5pc0FycmF5KHYpfHwodj1bdl0sbFtoXT12KSx2LnB1c2goZil9ZWxzZSBsW2hdPWZ9cGFyc2VQYXJlbnMobCl7Y29uc3QgYT17fTtmb3IodGhpcy5jYXB0''@;'; put 'put ''dXJlKCIoIik7IXRoaXMuY29uc3VtZU9wdGlvbmFsKCIpIikmJnRoaXMucmVtYWluaW5nLmxlbmd0aD4wOyl7Y29uc3QgZD1xWih0aGlzLnJlbWFpbmluZyksaD10aGlzLnJlbWFpbmluZ1tkLmxlbmd0aF07aWYoIi8iIT09aCYmIikiIT09aCYmIjsiIT09aCl0aHJvdyBuZXcgUW4oNDAxMCwh''@;'; put 'put ''MSk7bGV0IGY7ZC5pbmRleE9mKCI6Iik+LTE/KGY9ZC5zbGljZSgwLGQuaW5kZXhPZigiOiIpKSx0aGlzLmNhcHR1cmUoZiksdGhpcy5jYXB0dXJlKCI6IikpOmwmJihmPUtvKTtjb25zdCB2PXRoaXMucGFyc2VDaGlsZHJlbigpO2FbZl09MT09PU9iamVjdC5rZXlzKHYpLmxlbmd0aD92W0tv''@;'; put 'put ''XTpuZXcgS2woW10sdiksdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8vIil9cmV0dXJuIGF9cGVla1N0YXJ0c1dpdGgobCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgobCl9Y29uc3VtZU9wdGlvbmFsKGwpe3JldHVybiEhdGhpcy5wZWVrU3RhcnRzV2l0aChsKSYmKHRoaXMucmVt''@;'; put 'put ''YWluaW5nPXRoaXMucmVtYWluaW5nLnN1YnN0cmluZyhsLmxlbmd0aCksITApfWNhcHR1cmUobCl7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsKGwpKXRocm93IG5ldyBRbig0MDExLCExKX19ZnVuY3Rpb24gRWxlKGMpe3JldHVybiBjLnNlZ21lbnRzLmxlbmd0aD4wP25ldyBLbChbXSx7W0tv''@;'; put 'put ''XTpjfSk6Y31mdW5jdGlvbiBUbGUoYyl7Y29uc3QgbD17fTtmb3IoY29uc3RbZCxoXW9mIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pKXtjb25zdCBmPVRsZShoKTtpZihkPT09S28mJjA9PT1mLnNlZ21lbnRzLmxlbmd0aCYmZi5oYXNDaGlsZHJlbigpKWZvcihjb25zdFt2LE1db2YgT2Jq''@;'; put 'put ''ZWN0LmVudHJpZXMoZi5jaGlsZHJlbikpbFt2XT1NO2Vsc2UoZi5zZWdtZW50cy5sZW5ndGg+MHx8Zi5oYXNDaGlsZHJlbigpKSYmKGxbZF09Zil9cmV0dXJuIGZ1bmN0aW9uIE94ZShjKXtpZigxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiZjLmNoaWxkcmVuW0tvXSl7Y29uc3QgbD1jLmNoaWxk''@;'; put 'put ''cmVuW0tvXTtyZXR1cm4gbmV3IEtsKGMuc2VnbWVudHMuY29uY2F0KGwuc2VnbWVudHMpLGwuY2hpbGRyZW4pfXJldHVybiBjfShuZXcgS2woYy5zZWdtZW50cyxsKSl9ZnVuY3Rpb24gYXkoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiByeX1mdW5jdGlvbiBBbGUoYyl7bGV0IGw7Y29uc3QgaD1F''@;'; put 'put ''bGUoZnVuY3Rpb24gYShmKXtjb25zdCB2PXt9O2Zvcihjb25zdCBEIG9mIGYuY2hpbGRyZW4pe2NvbnN0IFo9YShEKTt2W0Qub3V0bGV0XT1afWNvbnN0IE09bmV3IEtsKGYudXJsLHYpO3JldHVybiBmPT09YyYmKGw9TSksTX0oYy5yb290KSk7cmV0dXJuIGw/P2h9ZnVuY3Rpb24ga2xlKGMs''@;'; put 'put ''bCxhLGQpe2xldCBoPWM7Zm9yKDtoLnBhcmVudDspaD1oLnBhcmVudDtpZigwPT09bC5sZW5ndGgpcmV0dXJuIFhaKGgsaCxoLGEsZCk7Y29uc3QgZj1mdW5jdGlvbiBGeGUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjWzBdJiYxPT09Yy5sZW5ndGgmJiIvIj09PWNbMF0pcmV0dXJuIG5ldyBJ''@;'; put 'put ''bGUoITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgoaCxmLHYpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBmJiZudWxsIT1mKXtpZihmLm91dGxldHMpe2NvbnN0IE09e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cykuZm9yRWFjaCgoW0QsWl0pPT57TVtEXT0i''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIFo/Wi5zcGxpdCgiLyIpOlp9KSxbLi4uaCx7b3V0bGV0czpNfV19aWYoZi5zZWdtZW50UGF0aClyZXR1cm5bLi4uaCxmLnNlZ21lbnRQYXRoXX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGY/Wy4uLmgsZl06MD09PXY/KGYuc3BsaXQoIi8iKS5mb3JFYWNoKChNLEQp''@;'; put 'put ''PT57MD09RCYmIi4iPT09TXx8KDA9PUQmJiIiPT09TT9hPSEwOiIuLiI9PT1NP2wrKzoiIiE9TSYmaC5wdXNoKE0pKX0pLGgpOlsuLi5oLGZdfSxbXSk7cmV0dXJuIG5ldyBJbGUoYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiBYWihoLGgsbmV3IEtsKFtdLHt9KSxhLGQpO2NvbnN0''@;'; put 'put ''IHY9ZnVuY3Rpb24gSHhlKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBWUihsLCEwLDApO2lmKCFhKXJldHVybiBuZXcgVlIobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IFZSKGEsITAsMCk7Y29uc3QgZD1OUihjLmNvbW1hbmRzWzBdKT8wOjE7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIE54ZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zvcig7Zj5oOyl7aWYoZi09aCxkPWQucGFyZW50LCFkKXRocm93IG5ldyBRbig0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgVlIoZCwhMSxoLWYpfShhLGEuc2VnbWVudHMubGVuZ3RoLTErZCxj''@;'; put 'put ''Lm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxNPXYucHJvY2Vzc0NoaWxkcmVuPyRNKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk6UmxlKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk7cmV0dXJuIFhaKGgsdi5zZWdtZW50R3JvdXAsTSxhLGQpfWZ1bmN0''@;'; put 'put ''aW9uIE5SKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmIWMub3V0bGV0cyYmIWMuc2VnbWVudFBhdGh9ZnVuY3Rpb24gR00oYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiZjLm91dGxldHN9ZnVuY3Rpb24gWFooYyxsLGEsZCxoKXtsZXQgdixmPXt9''@;'; put 'put ''O2QmJk9iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtELFpdKT0+e2ZbRF09QXJyYXkuaXNBcnJheShaKT9aLm1hcChyZT0+YCR7cmV9YCk6YCR7Wn1gfSksdj1jPT09bD9hOkRsZShjLGwsYSk7Y29uc3QgTT1FbGUoVGxlKHYpKTtyZXR1cm4gbmV3IHJ5KE0sZixoKX1mdW5jdGlvbiBEbGUo''@;'; put 'put ''YyxsLGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2RbaF09Zj09PWw/YTpEbGUoZixsLGEpfSksbmV3IEtsKGMuc2VnbWVudHMsZCl9Y2xhc3MgSWxle2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9''@;'; put 'put ''bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZCxsJiZkLmxlbmd0aD4wJiZOUihkWzBdKSl0aHJvdyBuZXcgUW4oNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoR00pO2lmKGgmJmghPT12bGUoZCkpdGhyb3cgbmV3IFFuKDQwMDQsITEpfXRvUm9vdCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0aCYmIi8iPT10aGlzLmNvbW1hbmRzWzBdfX1jbGFzcyBWUntjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5zZWdtZW50R3JvdXA9bCx0aGlzLnByb2Nlc3NDaGlsZHJlbj1hLHRoaXMuaW5kZXg9ZH19ZnVuY3Rpb24gUmxlKGMs''@;'; put 'put ''bCxhKXtpZihjPz89bmV3IEtsKFtdLHt9KSwwPT09Yy5zZWdtZW50cy5sZW5ndGgmJmMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gJE0oYyxsLGEpO2NvbnN0IGQ9ZnVuY3Rpb24gQnhlKGMsbCxhKXtsZXQgZD0wLGg9bDtjb25zdCBmPXttYXRjaDohMSxwYXRoSW5kZXg6MCxjb21tYW5kSW5kZXg6''@;'; put 'put ''MH07Zm9yKDtoPGMuc2VnbWVudHMubGVuZ3RoOyl7aWYoZD49YS5sZW5ndGgpcmV0dXJuIGY7Y29uc3Qgdj1jLnNlZ21lbnRzW2hdLE09YVtkXTtpZihHTShNKSlicmVhaztjb25zdCBEPWAke019YCxaPWQ8YS5sZW5ndGgtMT9hW2QrMV06bnVsbDtpZihoPjAmJnZvaWQgMD09PUQpYnJlYWs7''@;'; put 'put ''aWYoRCYmWiYmIm9iamVjdCI9PXR5cGVvZiBaJiZ2b2lkIDA9PT1aLm91dGxldHMpe2lmKCFPbGUoRCxaLHYpKXJldHVybiBmO2QrPTJ9ZWxzZXtpZighT2xlKEQse30sdikpcmV0dXJuIGY7ZCsrfWgrK31yZXR1cm57bWF0Y2g6ITAscGF0aEluZGV4OmgsY29tbWFuZEluZGV4OmR9fShjLGws''@;'; put 'put ''YSksaD1hLnNsaWNlKGQuY29tbWFuZEluZGV4KTtpZihkLm1hdGNoJiZkLnBhdGhJbmRleDxjLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1uZXcgS2woYy5zZWdtZW50cy5zbGljZSgwLGQucGF0aEluZGV4KSx7fSk7cmV0dXJuIGYuY2hpbGRyZW5bS29dPW5ldyBLbChjLnNlZ21lbnRzLnNs''@;'; put 'put ''aWNlKGQucGF0aEluZGV4KSxjLmNoaWxkcmVuKSwkTShmLDAsaCl9cmV0dXJuIGQubWF0Y2gmJjA9PT1oLmxlbmd0aD9uZXcgS2woYy5zZWdtZW50cyx7fSk6ZC5tYXRjaCYmIWMuaGFzQ2hpbGRyZW4oKT9KWihjLGwsYSk6ZC5tYXRjaD8kTShjLDAsaCk6SlooYyxsLGEpfWZ1bmN0aW9uICRN''@;'; put 'put ''KGMsbCxhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG5ldyBLbChjLnNlZ21lbnRzLHt9KTt7Y29uc3QgZD1mdW5jdGlvbiBWeGUoYyl7cmV0dXJuIEdNKGNbMF0pP2NbMF0ub3V0bGV0czp7W0tvXTpjfX0oYSksaD17fTtpZihPYmplY3Qua2V5cyhkKS5zb21lKGY9PmYhPT1LbykmJmMuY2hp''@;'; put 'put ''bGRyZW5bS29dJiYxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiYwPT09Yy5jaGlsZHJlbltLb10uc2VnbWVudHMubGVuZ3RoKXtjb25zdCBmPSRNKGMuY2hpbGRyZW5bS29dLGwsYSk7cmV0dXJuIG5ldyBLbChjLnNlZ21lbnRzLGYuY2hpbGRyZW4pfXJldHVybiBPYmplY3QuZW50cmllcyhkKS5m''@;'; put 'put ''b3JFYWNoKChbZix2XSk9Pnsic3RyaW5nIj09dHlwZW9mIHYmJih2PVt2XSksbnVsbCE9PXYmJihoW2ZdPVJsZShjLmNoaWxkcmVuW2ZdLGwsdikpfSksT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2Ysdl0pPT57dm9pZCAwPT09ZFtmXSYmKGhbZl09dil9KSxuZXcgS2wo''@;'; put 'put ''Yy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gSlooYyxsLGEpe2NvbnN0IGQ9Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7Y29uc3QgZj1hW2hdO2lmKEdNKGYpKXtjb25zdCBEPWp4ZShmLm91dGxldHMpO3JldHVybiBuZXcgS2woZCxEKX1pZigwPT09aCYm''@;'; put 'put ''TlIoYVswXSkpe2QucHVzaChuZXcgV00oYy5zZWdtZW50c1tsXS5wYXRoLExsZShhWzBdKSkpLGgrKztjb250aW51ZX1jb25zdCB2PUdNKGYpP2Yub3V0bGV0c1tLb106YCR7Zn1gLE09aDxhLmxlbmd0aC0xP2FbaCsxXTpudWxsO3YmJk0mJk5SKE0pPyhkLnB1c2gobmV3IFdNKHYsTGxlKE0p''@;'; put 'put ''KSksaCs9Mik6KGQucHVzaChuZXcgV00odix7fSkpLGgrKyl9cmV0dXJuIG5ldyBLbChkLHt9KX1mdW5jdGlvbiBqeGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT57InN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLG51bGwhPT1kJiYo''@;'; put 'put ''bFthXT1KWihuZXcgS2woW10se30pLDAsZCkpfSksbH1mdW5jdGlvbiBMbGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBPbGUoYyxsLGEpe3JldHVybiBjPT1hLnBhdGgmJmhwKGwsYS5wYXJh''@;'; put 'put ''bWV0ZXJzKX1jb25zdCBLTT0iaW1wZXJhdGl2ZSI7dmFyIFJzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmF2aWdhdGlvblN0YXJ0PTBdPSJOYXZpZ2F0aW9uU3RhcnQiLGNbYy5OYXZpZ2F0aW9uRW5kPTFdPSJOYXZpZ2F0aW9uRW5kIixjW2MuTmF2aWdhdGlvbkNhbmNlbD0yXT0iTmF2aWdh''@;'; put 'put ''dGlvbkNhbmNlbCIsY1tjLk5hdmlnYXRpb25FcnJvcj0zXT0iTmF2aWdhdGlvbkVycm9yIixjW2MuUm91dGVzUmVjb2duaXplZD00XT0iUm91dGVzUmVjb2duaXplZCIsY1tjLlJlc29sdmVTdGFydD01XT0iUmVzb2x2ZVN0YXJ0IixjW2MuUmVzb2x2ZUVuZD02XT0iUmVzb2x2ZUVuZCIsY1tj''@;'; put 'put ''Lkd1YXJkc0NoZWNrU3RhcnQ9N109Ikd1YXJkc0NoZWNrU3RhcnQiLGNbYy5HdWFyZHNDaGVja0VuZD04XT0iR3VhcmRzQ2hlY2tFbmQiLGNbYy5Sb3V0ZUNvbmZpZ0xvYWRTdGFydD05XT0iUm91dGVDb25maWdMb2FkU3RhcnQiLGNbYy5Sb3V0ZUNvbmZpZ0xvYWRFbmQ9MTBdPSJSb3V0ZUNv''@;'; put 'put ''bmZpZ0xvYWRFbmQiLGNbYy5DaGlsZEFjdGl2YXRpb25TdGFydD0xMV09IkNoaWxkQWN0aXZhdGlvblN0YXJ0IixjW2MuQ2hpbGRBY3RpdmF0aW9uRW5kPTEyXT0iQ2hpbGRBY3RpdmF0aW9uRW5kIixjW2MuQWN0aXZhdGlvblN0YXJ0PTEzXT0iQWN0aXZhdGlvblN0YXJ0IixjW2MuQWN0aXZh''@;'; put 'put ''dGlvbkVuZD0xNF09IkFjdGl2YXRpb25FbmQiLGNbYy5TY3JvbGw9MTVdPSJTY3JvbGwiLGNbYy5OYXZpZ2F0aW9uU2tpcHBlZD0xNl09Ik5hdmlnYXRpb25Ta2lwcGVkIixjfShSc3x8e30pO2NsYXNzIGZwe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5pZD1sLHRoaXMudXJsPWF9fWNsYXNzIEJS''@;'; put 'put ''IGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQ9ImltcGVyYXRpdmUiLGg9bnVsbCl7c3VwZXIobCxhKSx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvblN0YXJ0LHRoaXMubmF2aWdhdGlvblRyaWdnZXI9ZCx0aGlzLnJlc3RvcmVkU3RhdGU9aH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9u''@;'; put 'put ''U3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JylgfX1jbGFzcyBwcCBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvbkVuZH10b1N0cmluZygpe3JldHVybmBO''@;'; put 'put ''YXZpZ2F0aW9uRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScpYH19dmFyIHBoPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUmVkaXJlY3Q9MF09IlJlZGlyZWN0IixjW2MuU3VwZXJzZWRl''@;'; put 'put ''ZEJ5TmV3TmF2aWdhdGlvbj0xXT0iU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbiIsY1tjLk5vRGF0YUZyb21SZXNvbHZlcj0yXT0iTm9EYXRhRnJvbVJlc29sdmVyIixjW2MuR3VhcmRSZWplY3RlZD0zXT0iR3VhcmRSZWplY3RlZCIsY30ocGh8fHt9KSxqUj1mdW5jdGlvbihjKXtyZXR1cm4g''@;'; put 'put ''Y1tjLklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbj0wXT0iSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uIixjW2MuSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneT0xXT0iSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneSIsY30oalJ8fHt9KTtjbGFzcyBveSBleHRlbmRzIGZwe2NvbnN0cnVj''@;'; put 'put ''dG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlzLmNvZGU9aCx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvbkNhbmNlbH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19Y2xhc3Mgc3kgZXh0''@;'; put 'put ''ZW5kcyBmcHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWgsdGhpcy50eXBlPVJzLk5hdmlnYXRpb25Ta2lwcGVkfX1jbGFzcyB6UiBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5lcnJvcj1kLHRo''@;'; put 'put ''aXMudGFyZ2V0PWgsdGhpcy50eXBlPVJzLk5hdmlnYXRpb25FcnJvcn10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uRXJyb3IoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgZXJyb3I6ICR7dGhpcy5lcnJvcn0pYH19Y2xhc3MgUGxlIGV4dGVuZHMgZnB7Y29uc3RydWN0''@;'; put 'put ''b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Scy5Sb3V0ZXNSZWNvZ25pemVkfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlc1JlY29nbml6ZWQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJs''@;'; put 'put ''QWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgenhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMu''@;'; put 'put ''dHlwZT1Scy5HdWFyZHNDaGVja1N0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYEd1YXJkc0NoZWNrU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0p''@;'; put 'put ''YH19Y2xhc3MgVXhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy5zaG91bGRBY3RpdmF0ZT1mLHRoaXMudHlwZT1Scy5HdWFyZHNDaGVja0VuZH10b1N0cmluZygpe3JldHVybmBH''@;'; put 'put ''dWFyZHNDaGVja0VuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSwgc2hvdWxkQWN0aXZhdGU6ICR7dGhpcy5zaG91bGRBY3RpdmF0ZX0pYH19Y2xh''@;'; put 'put ''c3MgWnhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Scy5SZXNvbHZlU3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gUmVzb2x2ZVN0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6''@;'; put 'put ''ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIFd4ZSBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1k''@;'; put 'put ''LHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9UnMuUmVzb2x2ZUVuZH10b1N0cmluZygpe3JldHVybmBSZXNvbHZlRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMu''@;'; put 'put ''c3RhdGV9KWB9fWNsYXNzIFl4ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnJvdXRlPWwsdGhpcy50eXBlPVJzLlJvdXRlQ29uZmlnTG9hZFN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyBHeGV7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT1Scy5Sb3V0ZUNvbmZpZ0xvYWRFbmR9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVDb25maWdMb2FkRW5kKHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyAkeGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMu''@;'; put 'put ''dHlwZT1Scy5DaGlsZEFjdGl2YXRpb25TdGFydH10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgS3hle2NvbnN0cnVjdG9y''@;'; put 'put ''KGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9UnMuQ2hpbGRBY3RpdmF0aW9uRW5kfXRvU3RyaW5nKCl7cmV0dXJuYENoaWxkQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19''@;'; put 'put ''Y2xhc3MgcXhle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9UnMuQWN0aXZhdGlvblN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmln''@;'; put 'put ''LnBhdGh8fCIifScpYH19Y2xhc3MgWHhle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9UnMuQWN0aXZhdGlvbkVuZH10b1N0cmluZygpe3JldHVybmBBY3RpdmF0aW9uRW5kKHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qu''@;'; put 'put ''cm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBGbGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm91dGVyRXZlbnQ9bCx0aGlzLnBvc2l0aW9uPWEsdGhpcy5hbmNob3I9ZCx0aGlzLnR5cGU9UnMuU2Nyb2xsfXRvU3RyaW5nKCl7cmV0dXJuYFNjcm9sbChhbmNob3I6ICcke3RoaXMu''@;'; put 'put ''YW5jaG9yfScsIHBvc2l0aW9uOiAnJHt0aGlzLnBvc2l0aW9uP2Ake3RoaXMucG9zaXRpb25bMF19LCAke3RoaXMucG9zaXRpb25bMV19YDpudWxsfScpYH19Y2xhc3MgUVp7fWNsYXNzIGVXe2NvbnN0cnVjdG9yKGwpe3RoaXMudXJsPWx9fWNsYXNzIEp4ZXtjb25zdHJ1Y3Rvcigpe3RoaXMu''@;'; put 'put ''b3V0bGV0PW51bGwsdGhpcy5yb3V0ZT1udWxsLHRoaXMuaW5qZWN0b3I9bnVsbCx0aGlzLmNoaWxkcmVuPW5ldyBxTSx0aGlzLmF0dGFjaFJlZj1udWxsfX1sZXQgcU09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1vbkNoaWxkT3V0bGV0Q3JlYXRl''@;'; put 'put ''ZChhLGQpe2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZUNvbnRleHQoYSk7aC5vdXRsZXQ9ZCx0aGlzLmNvbnRleHRzLnNldChhLGgpfW9uQ2hpbGRPdXRsZXREZXN0cm95ZWQoYSl7Y29uc3QgZD10aGlzLmdldENvbnRleHQoYSk7ZCYmKGQub3V0bGV0PW51bGwsZC5hdHRhY2hSZWY9bnVsbCl9''@;'; put 'put ''b25PdXRsZXREZWFjdGl2YXRlZCgpe2NvbnN0IGE9dGhpcy5jb250ZXh0cztyZXR1cm4gdGhpcy5jb250ZXh0cz1uZXcgTWFwLGF9b25PdXRsZXRSZUF0dGFjaGVkKGEpe3RoaXMuY29udGV4dHM9YX1nZXRPckNyZWF0ZUNvbnRleHQoYSl7bGV0IGQ9dGhpcy5nZXRDb250ZXh0KGEpO3JldHVy''@;'; put 'put ''biBkfHwoZD1uZXcgSnhlLHRoaXMuY29udGV4dHMuc2V0KGEsZCkpLGR9Z2V0Q29udGV4dChhKXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQoYSl8fG51bGx9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9''@;'; put 'put ''YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgSGxle2NvbnN0cnVjdG9yKGwpe3RoaXMuX3Jvb3Q9bH1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb290LnZhbHVlfXBhcmVudChsKXtjb25zdCBhPXRoaXMucGF0''@;'; put 'put ''aEZyb21Sb290KGwpO3JldHVybiBhLmxlbmd0aD4xP2FbYS5sZW5ndGgtMl06bnVsbH1jaGlsZHJlbihsKXtjb25zdCBhPXRXKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGE/YS5jaGlsZHJlbi5tYXAoZD0+ZC52YWx1ZSk6W119Zmlyc3RDaGlsZChsKXtjb25zdCBhPXRXKGwsdGhpcy5fcm9vdCk7''@;'; put 'put ''cmV0dXJuIGEmJmEuY2hpbGRyZW4ubGVuZ3RoPjA/YS5jaGlsZHJlblswXS52YWx1ZTpudWxsfXNpYmxpbmdzKGwpe2NvbnN0IGE9blcobCx0aGlzLl9yb290KTtyZXR1cm4gYS5sZW5ndGg8Mj9bXTphW2EubGVuZ3RoLTJdLmNoaWxkcmVuLm1hcChoPT5oLnZhbHVlKS5maWx0ZXIoaD0+aCE9''@;'; put 'put ''PWwpfXBhdGhGcm9tUm9vdChsKXtyZXR1cm4gblcobCx0aGlzLl9yb290KS5tYXAoYT0+YS52YWx1ZSl9fWZ1bmN0aW9uIHRXKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuIGw7Zm9yKGNvbnN0IGEgb2YgbC5jaGlsZHJlbil7Y29uc3QgZD10VyhjLGEpO2lmKGQpcmV0dXJuIGR9cmV0dXJu''@;'; put 'put ''IG51bGx9ZnVuY3Rpb24gblcoYyxsKXtpZihjPT09bC52YWx1ZSlyZXR1cm5bbF07Zm9yKGNvbnN0IGEgb2YgbC5jaGlsZHJlbil7Y29uc3QgZD1uVyhjLGEpO2lmKGQubGVuZ3RoKXJldHVybiBkLnVuc2hpZnQobCksZH1yZXR1cm5bXX1jbGFzcyBHZntjb25zdHJ1Y3RvcihsLGEpe3RoaXMu''@;'; put 'put ''dmFsdWU9bCx0aGlzLmNoaWxkcmVuPWF9dG9TdHJpbmcoKXtyZXR1cm5gVHJlZU5vZGUoJHt0aGlzLnZhbHVlfSlgfX1mdW5jdGlvbiBseShjKXtjb25zdCBsPXt9O3JldHVybiBjJiZjLmNoaWxkcmVuLmZvckVhY2goYT0+bFthLnZhbHVlLm91dGxldF09YSksbH1jbGFzcyBObGUgZXh0ZW5k''@;'; put 'put ''cyBIbGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsKSx0aGlzLnNuYXBzaG90PWEsYVcodGhpcyxsKX10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90LnRvU3RyaW5nKCl9fWZ1bmN0aW9uIFZsZShjKXtjb25zdCBsPWZ1bmN0aW9uIFF4ZShjKXtjb25zdCBmPW5ldyBpVyhbXSx7fSx7''@;'; put 'put ''fSwiIix7fSxLbyxjLG51bGwse30pO3JldHVybiBuZXcgQmxlKCIiLG5ldyBHZihmLFtdKSl9KGMpLGE9bmV3IGVpKFtuZXcgV00oIiIse30pXSksZD1uZXcgZWkoe30pLGg9bmV3IGVpKHt9KSxmPW5ldyBlaSh7fSksdj1uZXcgZWkoIiIpLE09bmV3IEN1KGEsZCxmLHYsaCxLbyxjLGwucm9v''@;'; put 'put ''dCk7cmV0dXJuIE0uc25hcHNob3Q9bC5yb290LG5ldyBObGUobmV3IEdmKE0sW10pLGwpfWNsYXNzIEN1e2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7dGhpcy51cmxTdWJqZWN0PWwsdGhpcy5wYXJhbXNTdWJqZWN0PWEsdGhpcy5xdWVyeVBhcmFtc1N1YmplY3Q9ZCx0aGlzLmZyYWdt''@;'; put 'put ''ZW50U3ViamVjdD1oLHRoaXMuZGF0YVN1YmplY3Q9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5fZnV0dXJlU25hcHNob3Q9RCx0aGlzLnRpdGxlPXRoaXMuZGF0YVN1YmplY3Q/LnBpcGUoTHIoWj0+WltaTV0pKT8/Zm8odm9pZCAwKSx0aGlzLnVybD1sLHRoaXMucGFy''@;'; put 'put ''YW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zn1nZXQgcm91dGVDb25maWcoKXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH1nZXQgcGFyZW50KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX1nZXQgcGF0aEZyb21S''@;'; put 'put ''b290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXA/Pz10aGlzLnBhcmFtcy5waXBlKExyKGw9Pm55KGwpKSksdGhpcy5fcGFyYW1NYXB9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fcXVlcnlQYXJhbU1hcD8/PXRoaXMucXVlcnlQYXJhbXMucGlwZShMcihsPT5ueShsKSkpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6YEZ1dHVyZSgke3RoaXMuX2Z1dHVyZVNuYXBzaG90fSlg''@;'; put 'put ''fX1mdW5jdGlvbiByVyhjLGwsYT0iZW1wdHlPbmx5Iil7bGV0IGQ7Y29uc3R7cm91dGVDb25maWc6aH09YztyZXR1cm4gZD1udWxsPT09bHx8ImFsd2F5cyIhPT1hJiYiIiE9PWg/LnBhdGgmJihsLmNvbXBvbmVudHx8bC5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCk/e3BhcmFtczp7Li4u''@;'; put 'put ''Yy5wYXJhbXN9LGRhdGE6ey4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YT8/e319fTp7cGFyYW1zOnsuLi5sLnBhcmFtcywuLi5jLnBhcmFtc30sZGF0YTp7Li4ubC5kYXRhLC4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5kYXRhLC4uLmwuZGF0YSwuLi5o''@;'; put 'put ''Py5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YX19LGgmJnpsZShoKSYmKGQucmVzb2x2ZVtaTV09aC50aXRsZSksZH1jbGFzcyBpV3tnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5kYXRhPy5bWk1dfWNvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxaKXt0aGlzLnVybD1sLHRoaXMucGFyYW1zPWEs''@;'; put 'put ''dGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5yb3V0ZUNvbmZpZz1ELHRoaXMuX3Jlc29sdmU9Wn1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fWdldCBwYXJlbnQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfWdldCBwYXRoRnJv''@;'; put 'put ''bVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgpe3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PW55KHRoaXMucGFyYW1zKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFt''@;'; put 'put ''TWFwPz89bnkodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybmBSb3V0ZSh1cmw6JyR7dGhpcy51cmwubWFwKGQ9PmQudG9TdHJpbmcoKSkuam9pbigiLyIpfScsIHBhdGg6JyR7dGhpcy5yb3V0ZUNvbmZpZz90aGlzLnJvdXRlQ29uZmlnLnBh''@;'; put 'put ''dGg6IiJ9JylgfX1jbGFzcyBCbGUgZXh0ZW5kcyBIbGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihhKSx0aGlzLnVybD1sLGFXKHRoaXMsYSl9dG9TdHJpbmcoKXtyZXR1cm4gamxlKHRoaXMuX3Jvb3QpfX1mdW5jdGlvbiBhVyhjLGwpe2wudmFsdWUuX3JvdXRlclN0YXRlPWMsbC5jaGlsZHJl''@;'; put 'put ''bi5mb3JFYWNoKGE9PmFXKGMsYSkpfWZ1bmN0aW9uIGpsZShjKXtjb25zdCBsPWMuY2hpbGRyZW4ubGVuZ3RoPjA/YCB7ICR7Yy5jaGlsZHJlbi5tYXAoamxlKS5qb2luKCIsICIpfSB9IGA6IiI7cmV0dXJuYCR7Yy52YWx1ZX0ke2x9YH1mdW5jdGlvbiBvVyhjKXtpZihjLnNuYXBzaG90KXtj''@;'; put 'put ''b25zdCBsPWMuc25hcHNob3QsYT1jLl9mdXR1cmVTbmFwc2hvdDtjLnNuYXBzaG90PWEsaHAobC5xdWVyeVBhcmFtcyxhLnF1ZXJ5UGFyYW1zKXx8Yy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dChhLnF1ZXJ5UGFyYW1zKSxsLmZyYWdtZW50IT09YS5mcmFnbWVudCYmYy5mcmFnbWVudFN1Ympl''@;'; put 'put ''Y3QubmV4dChhLmZyYWdtZW50KSxocChsLnBhcmFtcyxhLnBhcmFtcyl8fGMucGFyYW1zU3ViamVjdC5uZXh0KGEucGFyYW1zKSxmdW5jdGlvbiBteGUoYyxsKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7KythKWlmKCFocChjW2FdLGxb''@;'; put 'put ''YV0pKXJldHVybiExO3JldHVybiEwfShsLnVybCxhLnVybCl8fGMudXJsU3ViamVjdC5uZXh0KGEudXJsKSxocChsLmRhdGEsYS5kYXRhKXx8Yy5kYXRhU3ViamVjdC5uZXh0KGEuZGF0YSl9ZWxzZSBjLnNuYXBzaG90PWMuX2Z1dHVyZVNuYXBzaG90LGMuZGF0YVN1YmplY3QubmV4dChjLl9m''@;'; put 'put ''dXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBzVyhjLGwpe2NvbnN0IGE9aHAoYy5wYXJhbXMsbC5wYXJhbXMpJiZmdW5jdGlvbiBfeGUoYyxsKXtyZXR1cm4gSjgoYyxsKSYmYy5ldmVyeSgoYSxkKT0+aHAoYS5wYXJhbWV0ZXJzLGxbZF0ucGFyYW1ldGVycykpfShjLnVybCxsLnVybCk7''@;'; put 'put ''cmV0dXJuIGEmJiEoIWMucGFyZW50IT0hbC5wYXJlbnQpJiYoIWMucGFyZW50fHxzVyhjLnBhcmVudCxsLnBhcmVudCkpfWZ1bmN0aW9uIHpsZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMudGl0bGV8fG51bGw9PT1jLnRpdGxlfWxldCByZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7dGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMubmFtZT1Lbyx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBLcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IEtyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBLcix0aGlzLmRldGFjaEV2ZW50cz1uZXcg''@;'; put 'put ''S3IsdGhpcy5wYXJlbnRDb250ZXh0cz1maShxTSksdGhpcy5sb2NhdGlvbj1maShEbyksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1maShFcyksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWZpKGhjKSx0aGlzLmlucHV0QmluZGVyPWZpKFVSLHtvcHRpb25hbDohMH0pLHRoaXMuc3VwcG9ydHNCaW5k''@;'; put 'put ''aW5nVG9Db21wb25lbnRJbnB1dHM9ITB9Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOmQscHJldmlvdXNWYWx1ZTpofT1hLm5hbWU7aWYoZClyZXR1cm47dGhpcy5pc1Ry''@;'; put 'put ''YWNrZWRJblBhcmVudENvbnRleHRzKGgpJiYodGhpcy5kZWFjdGl2YXRlKCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGgpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250''@;'; put 'put ''ZXh0cyh0aGlzLm5hbWUpJiZ0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhhKXtyZXR1cm4gdGhpcy5wYXJl''@;'; put 'put ''bnRDb250ZXh0cy5nZXRDb250ZXh0KGEpPy5vdXRsZXQ9PT10aGlzfW5nT25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0''@;'; put 'put ''aGlzKSx0aGlzLmFjdGl2YXRlZClyZXR1cm47Y29uc3QgYT10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTthPy5yb3V0ZSYmKGEuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKGEuYXR0YWNoUmVmLGEucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKGEucm91dGUsYS5pbmpl''@;'; put 'put ''Y3RvcikpfWdldCBpc0FjdGl2YXRlZCgpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0ZSgpe2lmKCF0aGlz''@;'; put 'put ''LmFjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMiwhMSk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX1kZXRhY2goKXtpZigh''@;'; put 'put ''dGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IFFuKDQwMTIsITEpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRzLmVtaXQoYS5pbnN0''@;'; put 'put ''YW5jZSksYX1hdHRhY2goYSxkKXt0aGlzLmFjdGl2YXRlZD1hLHRoaXMuX2FjdGl2YXRlZFJvdXRlPWQsdGhpcy5sb2NhdGlvbi5pbnNlcnQoYS5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hdHRhY2hF''@;'; put 'put ''dmVudHMuZW1pdChhLmluc3RhbmNlKX1kZWFjdGl2YXRlKCl7aWYodGhpcy5hY3RpdmF0ZWQpe2NvbnN0IGE9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVF''@;'; put 'put ''dmVudHMuZW1pdChhKX19YWN0aXZhdGVXaXRoKGEsZCl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9YTtjb25zdCBoPXRoaXMubG9jYXRpb24sdj1hLnNuYXBzaG90LmNvbXBvbmVudCxNPXRoaXMucGFyZW50Q29udGV4dHMu''@;'; put 'put ''Z2V0T3JDcmVhdGVDb250ZXh0KHRoaXMubmFtZSkuY2hpbGRyZW4sRD1uZXcgbFcoYSxNLGguaW5qZWN0b3IpO3RoaXMuYWN0aXZhdGVkPWguY3JlYXRlQ29tcG9uZW50KHYse2luZGV4OmgubGVuZ3RoLGluamVjdG9yOkQsZW52aXJvbm1lbnRJbmplY3RvcjpkPz90aGlzLmVudmlyb25tZW50''@;'; put 'put ''SW5qZWN0b3J9KSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLHRoaXMuaW5wdXRCaW5kZXI/LmJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHRoaXMpLHRoaXMuYWN0aXZhdGVFdmVudHMuZW1pdCh0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZSl9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0Il1dLGlucHV0czp7bmFtZToibmFtZSJ9LG91dHB1dHM6e2FjdGl2YXRlRXZlbnRzOiJhY3RpdmF0ZSIsZGVh''@;'; put 'put ''Y3RpdmF0ZUV2ZW50czoiZGVhY3RpdmF0ZSIsYXR0YWNoRXZlbnRzOiJhdHRhY2giLGRldGFjaEV2ZW50czoiZGV0YWNoIn0sZXhwb3J0QXM6WyJvdXRsZXQiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt3bF19KX19cmV0dXJuIGN9KSgpO2NsYXNzIGxXe19fbmdPdXRsZXRJbmplY3Rvcihs''@;'; put 'put ''KXtyZXR1cm4gbmV3IGxXKHRoaXMucm91dGUsdGhpcy5jaGlsZENvbnRleHRzLGwpfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhpcy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PUN1P3RoaXMucm91dGU6bD09PXFNP3RoaXMuY2hp''@;'; put 'put ''bGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgVVI9bmV3IFN0KCIiKTtsZXQgVWxlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zPW5ldyBNYXB9YmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQoYSl7''@;'; put 'put ''dGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSksdGhpcy5zdWJzY3JpYmVUb1JvdXRlRGF0YShhKX11bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl7dGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucy5nZXQoYSk/LnVuc3Vic2NyaWJlKCksdGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0''@;'; put 'put ''aW9ucy5kZWxldGUoYSl9c3Vic2NyaWJlVG9Sb3V0ZURhdGEoYSl7Y29uc3R7YWN0aXZhdGVkUm91dGU6ZH09YSxoPXE4KFtkLnF1ZXJ5UGFyYW1zLGQucGFyYW1zLGQuZGF0YV0pLnBpcGUoVjEoKFtmLHYsTV0sRCk9PihNPXsuLi5mLC4uLnYsLi4uTX0sMD09PUQ/Zm8oTSk6UHJvbWlzZS5y''@;'; put 'put ''ZXNvbHZlKE0pKSkpLnN1YnNjcmliZShmPT57aWYoIWEuaXNBY3RpdmF0ZWR8fCFhLmFjdGl2YXRlZENvbXBvbmVudFJlZnx8YS5hY3RpdmF0ZWRSb3V0ZSE9PWR8fG51bGw9PT1kLmNvbXBvbmVudClyZXR1cm4gdm9pZCB0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKTtjb25zdCB2''@;'; put 'put ''PWZ1bmN0aW9uIGhfZShjKXtjb25zdCBsPVZvKGMpO2lmKCFsKXJldHVybiBudWxsO2NvbnN0IGE9bmV3IGs4KGwpO3JldHVybntnZXQgc2VsZWN0b3IoKXtyZXR1cm4gYS5zZWxlY3Rvcn0sZ2V0IHR5cGUoKXtyZXR1cm4gYS5jb21wb25lbnRUeXBlfSxnZXQgaW5wdXRzKCl7cmV0dXJuIGEu''@;'; put 'put ''aW5wdXRzfSxnZXQgb3V0cHV0cygpe3JldHVybiBhLm91dHB1dHN9LGdldCBuZ0NvbnRlbnRTZWxlY3RvcnMoKXtyZXR1cm4gYS5uZ0NvbnRlbnRTZWxlY3RvcnN9LGdldCBpc1N0YW5kYWxvbmUoKXtyZXR1cm4gbC5zdGFuZGFsb25lfSxnZXQgaXNTaWduYWwoKXtyZXR1cm4gbC5zaWduYWxz''@;'; put 'put ''fX19KGQuY29tcG9uZW50KTtpZih2KWZvcihjb25zdHt0ZW1wbGF0ZU5hbWU6TX1vZiB2LmlucHV0cylhLmFjdGl2YXRlZENvbXBvbmVudFJlZi5zZXRJbnB1dChNLGZbTV0pO2Vsc2UgdGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl9KTt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRp''@;'; put 'put ''b25zLnNldChhLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFhNKGMsbCxhKXtpZihhJiZjLnNo''@;'; put 'put ''b3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiB0RWUoYyxsLGEpe3JldHVybiBsLmNoaWxkcmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilp''@;'; put 'put ''ZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gWE0oYyxkLGgpO3JldHVybiBYTShjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IEdmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNoKGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7''@;'; put 'put ''aWYobnVsbCE9PWYpe2NvbnN0IHY9Zi5yb3V0ZTtyZXR1cm4gdi52YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSx2LmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKE09PlhNKGMsTSkpLHZ9fWNvbnN0IGQ9ZnVuY3Rpb24gbkVlKGMpe3JldHVybiBuZXcgQ3UobmV3IGVpKGMudXJsKSxuZXcg''@;'; put 'put ''ZWkoYy5wYXJhbXMpLG5ldyBlaShjLnF1ZXJ5UGFyYW1zKSxuZXcgZWkoYy5mcmFnbWVudCksbmV3IGVpKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+WE0oYyxmKSk7cmV0dXJuIG5ldyBHZihkLGgpfX1jb25zdCBabGU9Im5n''@;'; put 'put ''TmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yIjtmdW5jdGlvbiBXbGUoYyxsKXtjb25zdHtyZWRpcmVjdFRvOmEsbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9uczpkfT1heShsKT97cmVkaXJlY3RUbzpsLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6dm9pZCAwfTpsLGg9WWxlKCExLHBoLlJlZGly''@;'; put 'put ''ZWN0KTtyZXR1cm4gaC51cmw9YSxoLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM9ZCxofWZ1bmN0aW9uIFlsZShjLGwpe2NvbnN0IGE9bmV3IEVycm9yKGBOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6ICR7Y3x8IiJ9YCk7cmV0dXJuIGFbWmxlXT0hMCxhLmNhbmNlbGxhdGlvbkNvZGU9bCxh''@;'; put 'put ''fWZ1bmN0aW9uIEdsZShjKXtyZXR1cm4hIWMmJmNbWmxlXX1sZXQgJGxlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25l''@;'; put 'put ''bnQiXV0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcUldLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gY1coYyl7''@;'; put 'put ''Y29uc3QgbD1jLmNoaWxkcmVuJiZjLmNoaWxkcmVuLm1hcChjVyksYT1sP3suLi5jLGNoaWxkcmVuOmx9OnsuLi5jfTtyZXR1cm4hYS5jb21wb25lbnQmJiFhLmxvYWRDb21wb25lbnQmJihsfHxhLmxvYWRDaGlsZHJlbikmJmEub3V0bGV0JiZhLm91dGxldCE9PUtvJiYoYS5jb21wb25lbnQ9''@;'; put 'put ''JGxlKSxhfWZ1bmN0aW9uIGdwKGMpe3JldHVybiBjLm91dGxldHx8S299ZnVuY3Rpb24gSk0oYyl7aWYoIWMpcmV0dXJuIG51bGw7aWYoYy5yb3V0ZUNvbmZpZz8uX2luamVjdG9yKXJldHVybiBjLnJvdXRlQ29uZmlnLl9pbmplY3Rvcjtmb3IobGV0IGw9Yy5wYXJlbnQ7bDtsPWwucGFyZW50''@;'; put 'put ''KXtjb25zdCBhPWwucm91dGVDb25maWc7aWYoYT8uX2xvYWRlZEluamVjdG9yKXJldHVybiBhLl9sb2FkZWRJbmplY3RvcjtpZihhPy5faW5qZWN0b3IpcmV0dXJuIGEuX2luamVjdG9yfXJldHVybiBudWxsfWNsYXNzIHVFZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMucm91dGVSZXVz''@;'; put 'put ''ZVN0cmF0ZWd5PWwsdGhpcy5mdXR1cmVTdGF0ZT1hLHRoaXMuY3VyclN0YXRlPWQsdGhpcy5mb3J3YXJkRXZlbnQ9aCx0aGlzLmlucHV0QmluZGluZ0VuYWJsZWQ9Zn1hY3RpdmF0ZShsKXtjb25zdCBhPXRoaXMuZnV0dXJlU3RhdGUuX3Jvb3QsZD10aGlzLmN1cnJTdGF0ZT90aGlzLmN1cnJT''@;'; put 'put ''dGF0ZS5fcm9vdDpudWxsO3RoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGEsZCxsKSxvVyh0aGlzLmZ1dHVyZVN0YXRlLnJvb3QpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGQsbCl9ZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPWx5KGEpO2wuY2hpbGRyZW4uZm9y''@;'; put 'put ''RWFjaChmPT57Y29uc3Qgdj1mLnZhbHVlLm91dGxldDt0aGlzLmRlYWN0aXZhdGVSb3V0ZXMoZixoW3ZdLGQpLGRlbGV0ZSBoW3ZdfSksT2JqZWN0LnZhbHVlcyhoKS5mb3JFYWNoKGY9Pnt0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGYsZCl9KX1kZWFjdGl2YXRlUm91dGVz''@;'; put 'put ''KGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldENvbnRleHQoaC5vdXRsZXQpO3YmJnRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNoaWxkcmVuKX1lbHNlIHRoaXMuZGVhY3RpdmF0ZUNo''@;'; put 'put ''aWxkUm91dGVzKGwsYSxkKTtlbHNlIGYmJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oYSxkKX1kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihsLGEpe2wudmFsdWUuY29tcG9uZW50JiZ0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGREZXRhY2gobC52YWx1ZS5z''@;'; put 'put ''bmFwc2hvdCk/dGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShsLGEpOnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KGwsYSl9ZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZhbHVlLm91dGxldCksaD1kJiZsLnZhbHVlLmNv''@;'; put 'put ''bXBvbmVudD9kLmNoaWxkcmVuOmEsZj1seShsKTtmb3IoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odixoKTtpZihkJiZkLm91dGxldCl7Y29uc3Qgdj1kLm91dGxldC5kZXRhY2goKSxNPWQuY2hpbGRyZW4ub25PdXRsZXRE''@;'; put 'put ''ZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGwudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjp2LHJvdXRlOmwsY29udGV4dHM6TX0pfX1kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZhbHVlLm91dGxldCks''@;'; put 'put ''aD1kJiZsLnZhbHVlLmNvbXBvbmVudD9kLmNoaWxkcmVuOmEsZj1seShsKTtmb3IoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odixoKTtkJiYoZC5vdXRsZXQmJihkLm91dGxldC5kZWFjdGl2YXRlKCksZC5jaGlsZHJlbi5v''@;'; put 'put ''bk91dGxldERlYWN0aXZhdGVkKCkpLGQuYXR0YWNoUmVmPW51bGwsZC5yb3V0ZT1udWxsKX1hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPWx5KGEpO2wuY2hpbGRyZW4uZm9yRWFjaChmPT57dGhpcy5hY3RpdmF0ZVJvdXRlcyhmLGhbZi52YWx1ZS5vdXRsZXRdLGQpLHRoaXMu''@;'; put 'put ''Zm9yd2FyZEV2ZW50KG5ldyBYeGUoZi52YWx1ZS5zbmFwc2hvdCkpfSksbC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBLeGUobC52YWx1ZS5zbmFwc2hvdCkpfWFjdGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihv''@;'; put 'put ''VyhoKSxoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBpZihoLmNvbXBvbmVudCl7''@;'; put 'put ''Y29uc3Qgdj1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7aWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGguc25hcHNob3QpKXtjb25zdCBNPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGguc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0''@;'; put 'put ''ZWd5LnN0b3JlKGguc25hcHNob3QsbnVsbCksdi5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoTS5jb250ZXh0cyksdi5hdHRhY2hSZWY9TS5jb21wb25lbnRSZWYsdi5yb3V0ZT1NLnJvdXRlLnZhbHVlLHYub3V0bGV0JiZ2Lm91dGxldC5hdHRhY2goTS5jb21wb25lbnRSZWYsTS5yb3V0''@;'; put 'put ''ZS52YWx1ZSksb1coTS5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCx2LmNoaWxkcmVuKX1lbHNle2NvbnN0IE09Sk0oaC5zbmFwc2hvdCk7di5hdHRhY2hSZWY9bnVsbCx2LnJvdXRlPWgsdi5pbmplY3Rvcj1NLHYub3V0bGV0JiZ2Lm91dGxldC5hY3RpdmF0''@;'; put 'put ''ZVdpdGgoaCx2LmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLHYuY2hpbGRyZW4pfX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsZCl9fWNsYXNzIEtsZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnBhdGg9bCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0''@;'; put 'put ''aGlzLnBhdGgubGVuZ3RoLTFdfX1jbGFzcyBaUntjb25zdHJ1Y3RvcihsLGEpe3RoaXMuY29tcG9uZW50PWwsdGhpcy5yb3V0ZT1hfX1mdW5jdGlvbiBkRWUoYyxsLGEpe2NvbnN0IGQ9Yy5fcm9vdDtyZXR1cm4gUU0oZCxsP2wuX3Jvb3Q6bnVsbCxhLFtkLnZhbHVlXSl9ZnVuY3Rpb24gY3ko''@;'; put 'put ''YyxsKXtjb25zdCBhPVN5bWJvbCgpLGQ9bC5nZXQoYyxhKTtyZXR1cm4gZD09PWE/ImZ1bmN0aW9uIiE9dHlwZW9mIGN8fGZ1bmN0aW9uIGVvKGMpe3JldHVybiBudWxsIT09UG8oYyl9KGMpP2wuZ2V0KGMpOmM6ZH1mdW5jdGlvbiBRTShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVDaGVja3M6''@;'; put 'put ''W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWx5KGwpO3JldHVybiBjLmNoaWxkcmVuLmZvckVhY2godj0+eyhmdW5jdGlvbiBmRWUoYyxsLGEsZCxoPXtjYW5EZWFjdGl2YXRlQ2hlY2tzOltdLGNhbkFjdGl2YXRlQ2hlY2tzOltdfSl7Y29uc3QgZj1jLnZhbHVlLHY9bD9sLnZh''@;'; put 'put ''bHVlOm51bGwsTT1hP2EuZ2V0Q29udGV4dChjLnZhbHVlLm91dGxldCk6bnVsbDtpZih2JiZmLnJvdXRlQ29uZmlnPT09di5yb3V0ZUNvbmZpZyl7Y29uc3QgRD1mdW5jdGlvbiBwRWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXJldHVybiBhKGMsbCk7c3dpdGNoKGEpe2Nhc2Ui''@;'; put 'put ''cGF0aFBhcmFtc0NoYW5nZSI6cmV0dXJuIUo4KGMudXJsLGwudXJsKTtjYXNlInBhdGhQYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hSjgoYy51cmwsbC51cmwpfHwhaHAoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtjYXNlImFsd2F5cyI6cmV0dXJuITA7Y2FzZSJwYXJh''@;'; put 'put ''bXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hc1coYyxsKXx8IWhwKGMucXVlcnlQYXJhbXMsbC5xdWVyeVBhcmFtcyk7ZGVmYXVsdDpyZXR1cm4hc1coYyxsKX19KHYsZixmLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7RD9oLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2go''@;'; put 'put ''bmV3IEtsZShkKSk6KGYuZGF0YT12LmRhdGEsZi5fcmVzb2x2ZWREYXRhPXYuX3Jlc29sdmVkRGF0YSksUU0oYyxsLGYuY29tcG9uZW50P00/TS5jaGlsZHJlbjpudWxsOmEsZCxoKSxEJiZNJiZNLm91dGxldCYmTS5vdXRsZXQuaXNBY3RpdmF0ZWQmJmguY2FuRGVhY3RpdmF0ZUNoZWNrcy5w''@;'; put 'put ''dXNoKG5ldyBaUihNLm91dGxldC5jb21wb25lbnQsdikpfWVsc2UgdiYmZXgobCxNLGgpLGguY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgS2xlKGQpKSxRTShjLG51bGwsZi5jb21wb25lbnQ/TT9NLmNoaWxkcmVuOm51bGw6YSxkLGgpfSkodixmW3YudmFsdWUub3V0bGV0XSxhLGQuY29u''@;'; put 'put ''Y2F0KFt2LnZhbHVlXSksaCksZGVsZXRlIGZbdi52YWx1ZS5vdXRsZXRdfSksT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW3YsTV0pPT5leChNLGEuZ2V0Q29udGV4dCh2KSxoKSksaH1mdW5jdGlvbiBleChjLGwsYSl7Y29uc3QgZD1seShjKSxoPWMudmFsdWU7T2JqZWN0LmVudHJpZXMo''@;'; put 'put ''ZCkuZm9yRWFjaCgoW2Ysdl0pPT57ZXgodixoLmNvbXBvbmVudD9sP2wuY2hpbGRyZW4uZ2V0Q29udGV4dChmKTpudWxsOmwsYSl9KSxhLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgWlIoaC5jb21wb25lbnQmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2YXRlZD9sLm91dGxl''@;'; put 'put ''dC5jb21wb25lbnQ6bnVsbCxoKSl9ZnVuY3Rpb24gdHgoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gcWxlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgUlJ8fCJFbXB0eUVycm9yIj09PWM/Lm5hbWV9Y29uc3QgV1I9U3ltYm9sKCJJTklUSUFMX1ZBTFVFIik7ZnVuY3Rp''@;'; put 'put ''b24gdXkoKXtyZXR1cm4gVjEoYz0+cTgoYy5tYXAobD0+bC5waXBlKFlmKDEpLHgyKFdSKSkpKS5waXBlKExyKGw9Pntmb3IoY29uc3QgYSBvZiBsKWlmKCEwIT09YSl7aWYoYT09PVdSKXJldHVybiBXUjtpZighMT09PWF8fGEgaW5zdGFuY2VvZiByeSlyZXR1cm4gYX1yZXR1cm4hMH0pLCRs''@;'; put 'put ''KGw9PmwhPT1XUiksWWYoMSkpKX1mdW5jdGlvbiBYbGUoYyl7cmV0dXJuIGZ1bmN0aW9uIGZuKC4uLmMpe3JldHVybiBJaShjKX0oR3UobD0+e2lmKGF5KGwpKXRocm93IFdsZSgwLGwpfSksTHIobD0+ITA9PT1sKSl9Y2xhc3MgdVd7Y29uc3RydWN0b3IobCl7dGhpcy5zZWdtZW50R3JvdXA9''@;'; put 'put ''bHx8bnVsbH19Y2xhc3MgZFcgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMudXJsVHJlZT1sfX1mdW5jdGlvbiBkeShjKXtyZXR1cm4gek0obmV3IHVXKGMpKX1jbGFzcyBMRWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnVybFNlcmlhbGl6ZXI9bCx0aGlzLnVybFRy''@;'; put 'put ''ZWU9YX1saW5lcmFsaXplU2VnbWVudHMobCxhKXtsZXQgZD1bXSxoPWEucm9vdDtmb3IoOzspe2lmKGQ9ZC5jb25jYXQoaC5zZWdtZW50cyksMD09PWgubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4gZm8oZCk7aWYoaC5udW1iZXJPZkNoaWxkcmVuPjF8fCFoLmNoaWxkcmVuW0tvXSlyZXR1cm4g''@;'; put 'put ''ek0obmV3IFFuKDRlMywhMSkpO2g9aC5jaGlsZHJlbltLb119fWFwcGx5UmVkaXJlY3RDb21tYW5kcyhsLGEsZCl7Y29uc3QgaD10aGlzLmFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpLGwsZCk7aWYoYS5zdGFydHNXaXRoKCIvIikpdGhy''@;'; put 'put ''b3cgbmV3IGRXKGgpO3JldHVybiBofWFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1cm4gbmV3IHJ5KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFyYW1zLHRoaXMudXJs''@;'; put 'put ''VHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQYXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbaCxmXSk9PntpZigic3RyaW5nIj09dHlwZW9mIGYmJmYuc3RhcnRzV2l0aCgiOiIpKXtjb25zdCBNPWYuc3Vic3Ry''@;'; put 'put ''aW5nKDEpO2RbaF09YVtNXX1lbHNlIGRbaF09Zn0pLGR9Y3JlYXRlU2VnbWVudEdyb3VwKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50cyhsLGEuc2VnbWVudHMsZCxoKTtsZXQgdj17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYS5jaGlsZHJlbikuZm9yRWFjaCgoW00sRF0p''@;'; put 'put ''PT57dltNXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLEQsZCxoKX0pLG5ldyBLbChmLHYpfWNyZWF0ZVNlZ21lbnRzKGwsYSxkLGgpe3JldHVybiBhLm1hcChmPT5mLnBhdGguc3RhcnRzV2l0aCgiOiIpP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRPclJldHVybihmLGQp''@;'; put 'put ''KX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgUW4oNDAwMSwhMSk7cmV0dXJuIGh9ZmluZE9yUmV0dXJuKGwsYSl7bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgpcmV0dXJuIGEuc3Bs''@;'; put 'put ''aWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBoVz17bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIE9FZShjLGwsYSxkLGgpe2NvbnN0IGY9ZlcoYyxs''@;'; put 'put ''LGEpO3JldHVybiBmLm1hdGNoZWQ/KGQ9ZnVuY3Rpb24gaUVlKGMsbCl7cmV0dXJuIGMucHJvdmlkZXJzJiYhYy5faW5qZWN0b3ImJihjLl9pbmplY3Rvcj1HNChjLnByb3ZpZGVycyxsLGBSb3V0ZTogJHtjLnBhdGh9YCkpLGMuX2luamVjdG9yPz9sfShsLGQpLGZ1bmN0aW9uIERFZShjLGws''@;'; put 'put ''YSxkKXtjb25zdCBoPWwuY2FuTWF0Y2g7cmV0dXJuIGgmJjAhPT1oLmxlbmd0aD9mbyhoLm1hcCh2PT57Y29uc3QgTT1jeSh2LGMpO3JldHVybiBvbShmdW5jdGlvbiBfRWUoYyl7cmV0dXJuIGMmJnR4KGMuY2FuTWF0Y2gpfShNKT9NLmNhbk1hdGNoKGwsYSk6cTAoYywoKT0+TShsLGEpKSl9''@;'; put 'put ''KSkucGlwZSh1eSgpLFhsZSgpKTpmbyghMCl9KGQsbCxhKS5waXBlKExyKHY9PiEwPT09dj9mOnsuLi5oV30pKSk6Zm8oZil9ZnVuY3Rpb24gZlcoYyxsLGEpe2lmKCIqKiI9PT1sLnBhdGgpcmV0dXJuIGZ1bmN0aW9uIFBFZShjKXtyZXR1cm57bWF0Y2hlZDohMCxwYXJhbWV0ZXJzOmMubGVu''@;'; put 'put ''Z3RoPjA/dmxlKGMpLnBhcmFtZXRlcnM6e30sY29uc3VtZWRTZWdtZW50czpjLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fX0oYSk7aWYoIiI9PT1sLnBhdGgpcmV0dXJuImZ1bGwiPT09bC5wYXRoTWF0Y2gmJihjLmhhc0NoaWxkcmVuKCl8fGEubGVu''@;'; put 'put ''Z3RoPjApP3suLi5oV306e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpbXSxyZW1haW5pbmdTZWdtZW50czphLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2NvbnN0IGg9KGwubWF0Y2hlcnx8Z3hlKShhLGMsbCk7aWYoIWgpcmV0dXJuey4uLmhXfTtjb25z''@;'; put 'put ''dCBmPXt9O09iamVjdC5lbnRyaWVzKGgucG9zUGFyYW1zPz97fSkuZm9yRWFjaCgoW00sRF0pPT57ZltNXT1ELnBhdGh9KTtjb25zdCB2PWguY29uc3VtZWQubGVuZ3RoPjA/ey4uLmYsLi4uaC5jb25zdW1lZFtoLmNvbnN1bWVkLmxlbmd0aC0xXS5wYXJhbWV0ZXJzfTpmO3JldHVybnttYXRj''@;'; put 'put ''aGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6aC5jb25zdW1lZCxyZW1haW5pbmdTZWdtZW50czphLnNsaWNlKGguY29uc3VtZWQubGVuZ3RoKSxwYXJhbWV0ZXJzOnYscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6aC5wb3NQYXJhbXM/P3t9fX1mdW5jdGlvbiBKbGUoYyxsLGEsZCl7cmV0dXJuIGEu''@;'; put 'put ''bGVuZ3RoPjAmJmZ1bmN0aW9uIE5FZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5ZUihjLGwsZCkmJmdwKGQpIT09S28pfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgS2wobCxIRWUoZCxuZXcgS2woYSxjLmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09YS5sZW5ndGgmJmZ1''@;'; put 'put ''bmN0aW9uIFZFZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5ZUihjLGwsZCkpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgS2woYy5zZWdtZW50cyxGRWUoYyxhLGQsYy5jaGlsZHJlbikpLHNsaWNlZFNlZ21lbnRzOmF9OntzZWdtZW50R3JvdXA6bmV3IEtsKGMuc2VnbWVudHMsYy5jaGls''@;'; put 'put ''ZHJlbiksc2xpY2VkU2VnbWVudHM6YX19ZnVuY3Rpb24gRkVlKGMsbCxhLGQpe2NvbnN0IGg9e307Zm9yKGNvbnN0IGYgb2YgYSlpZihZUihjLGwsZikmJiFkW2dwKGYpXSl7Y29uc3Qgdj1uZXcgS2woW10se30pO2hbZ3AoZildPXZ9cmV0dXJuey4uLmQsLi4uaH19ZnVuY3Rpb24gSEVlKGMs''@;'; put 'put ''bCl7Y29uc3QgYT17fTthW0tvXT1sO2Zvcihjb25zdCBkIG9mIGMpaWYoIiI9PT1kLnBhdGgmJmdwKGQpIT09S28pe2NvbnN0IGg9bmV3IEtsKFtdLHt9KTthW2dwKGQpXT1ofXJldHVybiBhfWZ1bmN0aW9uIFlSKGMsbCxhKXtyZXR1cm4oIShjLmhhc0NoaWxkcmVuKCl8fGwubGVuZ3RoPjAp''@;'; put 'put ''fHwiZnVsbCIhPT1hLnBhdGhNYXRjaCkmJiIiPT09YS5wYXRofWNsYXNzIHpFZXt9Y2xhc3MgV0Vle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0pe3RoaXMuaW5qZWN0b3I9bCx0aGlzLmNvbmZpZ0xvYWRlcj1hLHRoaXMucm9vdENvbXBvbmVudFR5cGU9ZCx0aGlzLmNvbmZpZz1oLHRoaXMu''@;'; put 'put ''dXJsVHJlZT1mLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT12LHRoaXMudXJsU2VyaWFsaXplcj1NLHRoaXMuYXBwbHlSZWRpcmVjdHM9bmV3IExFZSh0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy51cmxUcmVlKSx0aGlzLmFic29sdXRlUmVkaXJlY3RDb3VudD0wLHRoaXMuYWxsb3dS''@;'; put 'put ''ZWRpcmVjdHM9ITB9bm9NYXRjaEVycm9yKGwpe3JldHVybiBuZXcgUW4oNDAwMixgJyR7bC5zZWdtZW50R3JvdXB9J2ApfXJlY29nbml6ZSgpe2NvbnN0IGw9SmxlKHRoaXMudXJsVHJlZS5yb290LFtdLFtdLHRoaXMuY29uZmlnKS5zZWdtZW50R3JvdXA7cmV0dXJuIHRoaXMubWF0Y2gobCku''@;'; put 'put ''cGlwZShMcihhPT57Y29uc3QgZD1uZXcgaVcoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LEtvLHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx7fSksaD1uZXcgR2YoZCxh''@;'; put 'put ''KSxmPW5ldyBCbGUoIiIsaCksdj1mdW5jdGlvbiBQeGUoYyxsLGE9bnVsbCxkPW51bGwpe3JldHVybiBrbGUoQWxlKGMpLGwsYSxkKX0oZCxbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1cm4gdi5xdWVyeVBhcmFtcz10aGlzLnVybFRyZWUu''@;'; put 'put ''cXVlcnlQYXJhbXMsZi51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh2KSx0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGYuX3Jvb3QsbnVsbCkse3N0YXRlOmYsdHJlZTp2fX0pKX1tYXRjaChsKXtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKHRoaXMuaW5qZWN0b3Is''@;'; put 'put ''dGhpcy5jb25maWcsbCxLbykucGlwZShYOChkPT57aWYoZCBpbnN0YW5jZW9mIGRXKXJldHVybiB0aGlzLnVybFRyZWU9ZC51cmxUcmVlLHRoaXMubWF0Y2goZC51cmxUcmVlLnJvb3QpO3Rocm93IGQgaW5zdGFuY2VvZiB1Vz90aGlzLm5vTWF0Y2hFcnJvcihkKTpkfSkpfWluaGVyaXRQYXJh''@;'; put 'put ''bXNBbmREYXRhKGwsYSl7Y29uc3QgZD1sLnZhbHVlLGg9clcoZCxhLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7ZC5wYXJhbXM9T2JqZWN0LmZyZWV6ZShoLnBhcmFtcyksZC5kYXRhPU9iamVjdC5mcmVlemUoaC5kYXRhKSxsLmNoaWxkcmVuLmZvckVhY2goZj0+dGhpcy5pbmhl''@;'; put 'put ''cml0UGFyYW1zQW5kRGF0YShmLGQpKX1wcm9jZXNzU2VnbWVudEdyb3VwKGwsYSxkLGgpe3JldHVybiAwPT09ZC5zZWdtZW50cy5sZW5ndGgmJmQuaGFzQ2hpbGRyZW4oKT90aGlzLnByb2Nlc3NDaGlsZHJlbihsLGEsZCk6dGhpcy5wcm9jZXNzU2VnbWVudChsLGEsZCxkLnNlZ21lbnRzLGgs''@;'; put 'put ''ITApLnBpcGUoTHIoZj0+ZiBpbnN0YW5jZW9mIEdmP1tmXTpbXSkpfXByb2Nlc3NDaGlsZHJlbihsLGEsZCl7Y29uc3QgaD1bXTtmb3IoY29uc3QgZiBvZiBPYmplY3Qua2V5cyhkLmNoaWxkcmVuKSkicHJpbWFyeSI9PT1mP2gudW5zaGlmdChmKTpoLnB1c2goZik7cmV0dXJuIFl1KGgpLnBp''@;'; put 'put ''cGUodHkoZj0+e2NvbnN0IHY9ZC5jaGlsZHJlbltmXSxNPWZ1bmN0aW9uIGxFZShjLGwpe2NvbnN0IGE9Yy5maWx0ZXIoZD0+Z3AoZCk9PT1sKTtyZXR1cm4gYS5wdXNoKC4uLmMuZmlsdGVyKGQ9PmdwKGQpIT09bCkpLGF9KGEsZik7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cChs''@;'; put 'put ''LE0sdixmKX0pLGZ1bmN0aW9uIGR4ZShjLGwpe3JldHVybiBWaShmdW5jdGlvbiB1eGUoYyxsLGEsZCxoKXtyZXR1cm4oZix2KT0+e2xldCBNPWEsRD1sLFo9MDtmLnN1YnNjcmliZShOaSh2LHJlPT57Y29uc3QgY2U9WisrO0Q9TT9jKEQscmUsY2UpOihNPSEwLHJlKSxkJiZ2Lm5leHQoRCl9''@;'; put 'put ''LGgmJigoKT0+e00mJnYubmV4dChEKSx2LmNvbXBsZXRlKCl9KSkpfX0oYyxsLGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oKGYsdik9PihmLnB1c2goLi4udiksZikpLExSKG51bGwpLGZ1bmN0aW9uIGh4ZShjLGwpe2NvbnN0IGE9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZD0+ZC5w''@;'; put 'put ''aXBlKGM/JGwoKGgsZik9PmMoaCxmLGQpKTpjbixZWigxKSxhP0xSKGwpOmdsZSgoKT0+bmV3IFJSKSl9KCksTjAoZj0+e2lmKG51bGw9PT1mKXJldHVybiBkeShkKTtjb25zdCB2PVFsZShmKTtyZXR1cm4gZnVuY3Rpb24gWUVlKGMpe2Muc29ydCgobCxhKT0+bC52YWx1ZS5vdXRsZXQ9PT1L''@;'; put 'put ''bz8tMTphLnZhbHVlLm91dGxldD09PUtvPzE6bC52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShhLnZhbHVlLm91dGxldCkpfSh2KSxmbyh2KX0pKX1wcm9jZXNzU2VnbWVudChsLGEsZCxoLGYsdil7cmV0dXJuIFl1KGEpLnBpcGUodHkoTT0+dGhpcy5wcm9jZXNzU2VnbWVudEFnYWluc3RS''@;'; put 'put ''b3V0ZShNLl9pbmplY3Rvcj8/bCxhLE0sZCxoLGYsdikucGlwZShYOChEPT57aWYoRCBpbnN0YW5jZW9mIHVXKXJldHVybiBmbyhudWxsKTt0aHJvdyBEfSkpKSxhbShNPT4hIU0pLFg4KE09PntpZihxbGUoTSkpcmV0dXJuIGZ1bmN0aW9uIGpFZShjLGwsYSl7cmV0dXJuIDA9PT1sLmxlbmd0''@;'; put 'put ''aCYmIWMuY2hpbGRyZW5bYV19KGQsaCxmKT9mbyhuZXcgekVlKTpkeShkKTt0aHJvdyBNfSkpfXByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKGwsYSxkLGgsZix2LE0pe3JldHVybiBmdW5jdGlvbiBCRWUoYyxsLGEsZCl7cmV0dXJuISEoZ3AoYyk9PT1kfHxkIT09S28mJllSKGwsYSxjKSkm''@;'; put 'put ''JmZXKGwsYyxhKS5tYXRjaGVkfShkLGgsZix2KT92b2lkIDA9PT1kLnJlZGlyZWN0VG8/dGhpcy5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUobCxoLGQsZix2KTp0aGlzLmFsbG93UmVkaXJlY3RzJiZNP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QobCxoLGEs''@;'; put 'put ''ZCxmLHYpOmR5KGgpOmR5KGgpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZix2KXtjb25zdHttYXRjaGVkOk0sY29uc3VtZWRTZWdtZW50czpELHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOloscmVtYWluaW5nU2VnbWVudHM6cmV9PWZXKGEsaCxmKTtp''@;'; put 'put ''ZighTSlyZXR1cm4gZHkoYSk7aC5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKSYmKHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50KyssdGhpcy5hYnNvbHV0ZVJlZGlyZWN0Q291bnQ+MzEmJih0aGlzLmFsbG93UmVkaXJlY3RzPSExKSk7Y29uc3QgY2U9dGhpcy5hcHBseVJlZGlyZWN0cy5h''@;'; put 'put ''cHBseVJlZGlyZWN0Q29tbWFuZHMoRCxoLnJlZGlyZWN0VG8sWik7cmV0dXJuIHRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGgsY2UpLnBpcGUoTjAoYmU9PnRoaXMucHJvY2Vzc1NlZ21lbnQobCxkLGEsYmUuY29uY2F0KHJlKSx2LCExKSkpfW1hdGNoU2VnbWVudEFn''@;'; put 'put ''YWluc3RSb3V0ZShsLGEsZCxoLGYpe2NvbnN0IHY9T0VlKGEsZCxoLGwpO3JldHVybiIqKiI9PT1kLnBhdGgmJihhLmNoaWxkcmVuPXt9KSx2LnBpcGUoVjEoTT0+TS5tYXRjaGVkP3RoaXMuZ2V0Q2hpbGRDb25maWcobD1kLl9pbmplY3Rvcj8/bCxkLGgpLnBpcGUoVjEoKHtyb3V0ZXM6RH0p''@;'; put 'put ''PT57Y29uc3QgWj1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7Y29uc3VtZWRTZWdtZW50czpyZSxyZW1haW5pbmdTZWdtZW50czpjZSxwYXJhbWV0ZXJzOmJlfT1NLEVlPW5ldyBpVyhyZSxiZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUu''@;'; put 'put ''ZnJhZ21lbnQsZnVuY3Rpb24gJEVlKGMpe3JldHVybiBjLmRhdGF8fHt9fShkKSxncChkKSxkLmNvbXBvbmVudD8/ZC5fbG9hZGVkQ29tcG9uZW50Pz9udWxsLGQsZnVuY3Rpb24gS0VlKGMpe3JldHVybiBjLnJlc29sdmV8fHt9fShkKSkse3NlZ21lbnRHcm91cDpCZSxzbGljZWRTZWdtZW50''@;'; put 'put ''czpxZX09SmxlKGEscmUsY2UsRCk7aWYoMD09PXFlLmxlbmd0aCYmQmUuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gdGhpcy5wcm9jZXNzQ2hpbGRyZW4oWixELEJlKS5waXBlKExyKHB0PT5udWxsPT09cHQ/bnVsbDpuZXcgR2YoRWUscHQpKSk7aWYoMD09PUQubGVuZ3RoJiYwPT09cWUubGVuZ3Ro''@;'; put 'put ''KXJldHVybiBmbyhuZXcgR2YoRWUsW10pKTtjb25zdCBydD1ncChkKT09PWY7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnQoWixELEJlLHFlLHJ0P0tvOmYsITApLnBpcGUoTHIocHQ9Pm5ldyBHZihFZSxwdCBpbnN0YW5jZW9mIEdmP1twdF06W10pKSl9KSk6ZHkoYSkpKX1nZXRDaGlsZENv''@;'; put 'put ''bmZpZyhsLGEsZCl7cmV0dXJuIGEuY2hpbGRyZW4/Zm8oe3JvdXRlczphLmNoaWxkcmVuLGluamVjdG9yOmx9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/Zm8oe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5qZWN0b3J9KTpmdW5j''@;'; put 'put ''dGlvbiBrRWUoYyxsLGEsZCl7Y29uc3QgaD1sLmNhbkxvYWQ7cmV0dXJuIHZvaWQgMD09PWh8fDA9PT1oLmxlbmd0aD9mbyghMCk6Zm8oaC5tYXAodj0+e2NvbnN0IE09Y3kodixjKTtyZXR1cm4gb20oZnVuY3Rpb24gbUVlKGMpe3JldHVybiBjJiZ0eChjLmNhbkxvYWQpfShNKT9NLmNhbkxv''@;'; put 'put ''YWQobCxhKTpxMChjLCgpPT5NKGwsYSkpKX0pKS5waXBlKHV5KCksWGxlKCkpfShsLGEsZCkucGlwZShOMChoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoR3UoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVj''@;'; put 'put ''dG9yfSkpOmZ1bmN0aW9uIFJFZShjKXtyZXR1cm4gek0oWWxlKCExLHBoLkd1YXJkUmVqZWN0ZWQpKX0oKSkpOmZvKHtyb3V0ZXM6W10saW5qZWN0b3I6bH0pfX1mdW5jdGlvbiBHRWUoYyl7Y29uc3QgbD1jLnZhbHVlLnJvdXRlQ29uZmlnO3JldHVybiBsJiYiIj09PWwucGF0aH1mdW5jdGlv''@;'; put 'put ''biBRbGUoYyl7Y29uc3QgbD1bXSxhPW5ldyBTZXQ7Zm9yKGNvbnN0IGQgb2YgYyl7aWYoIUdFZShkKSl7bC5wdXNoKGQpO2NvbnRpbnVlfWNvbnN0IGg9bC5maW5kKGY9PmQudmFsdWUucm91dGVDb25maWc9PT1mLnZhbHVlLnJvdXRlQ29uZmlnKTt2b2lkIDAhPT1oPyhoLmNoaWxkcmVuLnB1''@;'; put 'put ''c2goLi4uZC5jaGlsZHJlbiksYS5hZGQoaCkpOmwucHVzaChkKX1mb3IoY29uc3QgZCBvZiBhKXtjb25zdCBoPVFsZShkLmNoaWxkcmVuKTtsLnB1c2gobmV3IEdmKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIGVjZShjKXtjb25zdCBsPWMuY2hp''@;'; put 'put ''bGRyZW4ubWFwKGE9PmVjZShhKSkuZmxhdCgpO3JldHVybltjLC4uLmxdfWZ1bmN0aW9uIHBXKGMpe3JldHVybiBWMShsPT57Y29uc3QgYT1jKGwpO3JldHVybiBhP1l1KGEpLnBpcGUoTHIoKCk9PmwpKTpmbyhsKX0pfWxldCB0Y2U9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBk''@;'; put 'put ''LGg9YS5yb290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PUtvKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtaTV19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkodFRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdFRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB0Y2V7Y29u''@;'; put 'put ''c3RydWN0b3IoYSl7c3VwZXIoKSx0aGlzLnRpdGxlPWF9dXBkYXRlVGl0bGUoYSl7Y29uc3QgZD10aGlzLmJ1aWxkVGl0bGUoYSk7dm9pZCAwIT09ZCYmdGhpcy50aXRsZS5zZXRUaXRsZShkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihJ''@;'; put 'put ''Q2UpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBoeT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7fSl9KSxmeT1uZXcgU3QoIiIp''@;'; put 'put ''O2xldCBnVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9ZmkoS2llKX1sb2FkQ29tcG9uZW50KGEpe2lmKHRoaXMuY29tcG9uZW50TG9hZGVy''@;'; put 'put ''cy5nZXQoYSkpcmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5nZXQoYSk7aWYoYS5fbG9hZGVkQ29tcG9uZW50KXJldHVybiBmbyhhLl9sb2FkZWRDb21wb25lbnQpO3RoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKGEpO2NvbnN0IGQ9b20oYS5s''@;'; put 'put ''b2FkQ29tcG9uZW50KCkpLnBpcGUoTHIobmNlKSxHdShmPT57dGhpcy5vbkxvYWRFbmRMaXN0ZW5lciYmdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcihhKSxhLl9sb2FkZWRDb21wb25lbnQ9Zn0pLFVNKCgpPT57dGhpcy5jb21wb25lbnRMb2FkZXJzLmRlbGV0ZShhKX0pKSxoPW5ldyBXWihkLCgp''@;'; put 'put ''PT5uZXcgV24pLnBpcGUoWlooKSk7cmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5zZXQoYSxoKSxofWxvYWRDaGlsZHJlbihhLGQpe2lmKHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKSlyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuZ2V0KGQpO2lmKGQuX2xvYWRlZFJvdXRlcyly''@;'; put 'put ''ZXR1cm4gZm8oe3JvdXRlczpkLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6ZC5fbG9hZGVkSW5qZWN0b3J9KTt0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihkKTtjb25zdCBmPWZ1bmN0aW9uIG5UZShjLGwsYSxkKXtyZXR1cm4gb20oYy5sb2FkQ2hp''@;'; put 'put ''bGRyZW4oKSkucGlwZShMcihuY2UpLE4wKGg9PmggaW5zdGFuY2VvZiBtY3x8QXJyYXkuaXNBcnJheShoKT9mbyhoKTpZdShsLmNvbXBpbGVNb2R1bGVBc3luYyhoKSkpLExyKGg9PntkJiZkKGMpO2xldCBmLHYsTT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShoKT8odj1oLCEwKTooZj1oLmNy''@;'; put 'put ''ZWF0ZShhKS5pbmplY3Rvcix2PWYuZ2V0KGZ5LFtdLHtvcHRpb25hbDohMCxzZWxmOiEwfSkuZmxhdCgpKSx7cm91dGVzOnYubWFwKGNXKSxpbmplY3RvcjpmfX0pKX0oZCx0aGlzLmNvbXBpbGVyLGEsdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcikucGlwZShVTSgoKT0+e3RoaXMuY2hpbGRyZW5M''@;'; put 'put ''b2FkZXJzLmRlbGV0ZShkKX0pKSx2PW5ldyBXWihmLCgpPT5uZXcgV24pLnBpcGUoWlooKSk7cmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLnNldChkLHYpLHZ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBy''@;'; put 'put ''b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbmNlKGMpe3JldHVybiBmdW5jdGlvbiByVGUoYyl7cmV0dXJuIGMmJiJvYmplY3QiPT10eXBlb2YgYyYmImRlZmF1bHQiaW4gY30oYyk/Yy5kZWZhdWx0''@;'; put 'put ''OmN9bGV0IG1XPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkoaVRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCks''@;'; put 'put ''aVRlPSgoKT0+e2NsYXNzIGN7c2hvdWxkUHJvY2Vzc1VybChhKXtyZXR1cm4hMH1leHRyYWN0KGEpe3JldHVybiBhfW1lcmdlKGEsZCl7cmV0dXJuIGF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4o''@;'; put 'put ''e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgcmNlPW5ldyBTdCgiIiksaWNlPW5ldyBTdCgiIik7ZnVuY3Rpb24gYVRlKGMsbCxhKXtjb25zdCBkPWMuZ2V0KGljZSksaD1jLmdldCh2cyk7cmV0dXJuIGMuZ2V0KFdh''@;'; put 'put ''KS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKCFoLnN0YXJ0Vmlld1RyYW5zaXRpb258fGQuc2tpcE5leHRUcmFuc2l0aW9uKXJldHVybiBkLnNraXBOZXh0VHJhbnNpdGlvbj0hMSxuZXcgUHJvbWlzZShaPT5zZXRUaW1lb3V0KFopKTtsZXQgZjtjb25zdCB2PW5ldyBQcm9taXNlKFo9Pntm''@;'; put 'put ''PVp9KSxNPWguc3RhcnRWaWV3VHJhbnNpdGlvbigoKT0+KGYoKSxmdW5jdGlvbiBvVGUoYyl7cmV0dXJuIG5ldyBQcm9taXNlKGw9PntfYihsLHtpbmplY3RvcjpjfSl9KX0oYykpKSx7b25WaWV3VHJhbnNpdGlvbkNyZWF0ZWQ6RH09ZDtyZXR1cm4gRCYmcTAoYywoKT0+RCh7dHJhbnNpdGlv''@;'; put 'put ''bjpNLGZyb206bCx0bzphfSkpLHZ9KX1sZXQgR1I9KCgpPT57Y2xhc3MgY3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5jdXJyZW50VHJhbnNpdGlv''@;'; put 'put ''bj1udWxsLHRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uPW51bGwsdGhpcy5ldmVudHM9bmV3IFduLHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdD1uZXcgV24sdGhpcy5jb25maWdMb2FkZXI9ZmkoZ1cpLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1maShoYyksdGhpcy51cmxTZXJp''@;'; put 'put ''YWxpemVyPWZpKGl5KSx0aGlzLnJvb3RDb250ZXh0cz1maShxTSksdGhpcy5sb2NhdGlvbj1maShmaCksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPW51bGwhPT1maShVUix7b3B0aW9uYWw6ITB9KSx0aGlzLnRpdGxlU3RyYXRlZ3k9ZmkodGNlKSx0aGlzLm9wdGlvbnM9ZmkoaHkse29wdGlv''@;'; put 'put ''bmFsOiEwfSl8fHt9LHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT10aGlzLm9wdGlvbnMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneXx8ImVtcHR5T25seSIsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PWZpKG1XKSx0aGlzLmNyZWF0ZVZpZXdUcmFuc2l0aW9uPWZpKHJjZSx7b3B0''@;'; put 'put ''aW9uYWw6ITB9KSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5mbyh2b2lkIDApLHRoaXMucm9vdENvbXBvbmVudFR5cGU9bnVsbCx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2ZW50cy5uZXh0KG5ldyBHeGUoaCkp''@;'; put 'put ''LHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgWXhlKGgpKX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3QgZD0rK3RoaXMubmF2aWdhdGlvbklk''@;'; put 'put ''O3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnRoaXMudHJhbnNpdGlvbnMudmFsdWUsLi4uYSxpZDpkfSl9c2V0dXBOYXZpZ2F0aW9ucyhhLGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnM9bmV3IGVpKHtpZDowLGN1cnJlbnRVcmxUcmVlOmQsY3VycmVudFJhd1VybDpkLGV4dHJhY3Rl''@;'; put 'put ''ZFVybDp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSx1cmxBZnRlclJlZGlyZWN0czp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSxyYXdVcmw6ZCxleHRyYXM6e30scmVzb2x2ZTpudWxsLHJlamVjdDpudWxsLHByb21pc2U6UHJvbWlzZS5yZXNvbHZlKCEw''@;'; put 'put ''KSxzb3VyY2U6S00scmVzdG9yZWRTdGF0ZTpudWxsLGN1cnJlbnRTbmFwc2hvdDpoLnNuYXBzaG90LHRhcmdldFNuYXBzaG90Om51bGwsY3VycmVudFJvdXRlclN0YXRlOmgsdGFyZ2V0Um91dGVyU3RhdGU6bnVsbCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOltdLGNhbkRlYWN0aXZhdGVD''@;'; put 'put ''aGVja3M6W119LGd1YXJkc1Jlc3VsdDpudWxsfSksdGhpcy50cmFuc2l0aW9ucy5waXBlKCRsKGY9PjAhPT1mLmlkKSxMcihmPT4oey4uLmYsZXh0cmFjdGVkVXJsOnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGYucmF3VXJsKX0pKSxWMShmPT57bGV0IHY9ITEsTT0hMTtyZXR1''@;'; put 'put ''cm4gZm8oZikucGlwZShWMShEPT57aWYodGhpcy5uYXZpZ2F0aW9uSWQ+Zi5pZClyZXR1cm4gdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihmLCIiLHBoLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pLE0yO3RoaXMuY3VycmVudFRyYW5zaXRpb249Zix0aGlzLmN1cnJlbnROYXZp''@;'; put 'put ''Z2F0aW9uPXtpZDpELmlkLGluaXRpYWxVcmw6RC5yYXdVcmwsZXh0cmFjdGVkVXJsOkQuZXh0cmFjdGVkVXJsLHRyaWdnZXI6RC5zb3VyY2UsZXh0cmFzOkQuZXh0cmFzLHByZXZpb3VzTmF2aWdhdGlvbjp0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj97Li4udGhpcy5sYXN0U3VjY2Vz''@;'; put 'put ''c2Z1bE5hdmlnYXRpb24scHJldmlvdXNOYXZpZ2F0aW9uOm51bGx9Om51bGx9O2NvbnN0IFo9IWEubmF2aWdhdGVkfHx0aGlzLmlzVXBkYXRpbmdJbnRlcm5hbFN0YXRlKCl8fHRoaXMuaXNVcGRhdGVkQnJvd3NlclVybCgpO2lmKCFaJiYicmVsb2FkIiE9PShELmV4dHJhcy5vblNhbWVVcmxO''@;'; put 'put ''YXZpZ2F0aW9uPz9hLm9uU2FtZVVybE5hdmlnYXRpb24pKXtjb25zdCBjZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgc3koRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQucmF3VXJsKSxjZSxqUi5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24pKSxELnJlc29sdmUo''@;'; put 'put ''bnVsbCksTTJ9aWYodGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoRC5yYXdVcmwpKXJldHVybiBmbyhEKS5waXBlKFYxKGNlPT57Y29uc3QgYmU9dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKTtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgQlIoY2UuaWQs''@;'; put 'put ''dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShjZS5leHRyYWN0ZWRVcmwpLGNlLnNvdXJjZSxjZS5yZXN0b3JlZFN0YXRlKSksYmUhPT10aGlzLnRyYW5zaXRpb25zPy5nZXRWYWx1ZSgpP00yOlByb21pc2UucmVzb2x2ZShjZSl9KSxmdW5jdGlvbiBxRWUoYyxsLGEsZCxoLGYpe3JldHVy''@;'; put 'put ''biBOMCh2PT5mdW5jdGlvbiBVRWUoYyxsLGEsZCxoLGYsdj0iZW1wdHlPbmx5Iil7cmV0dXJuIG5ldyBXRWUoYyxsLGEsZCxoLHYsZikucmVjb2duaXplKCl9KGMsbCxhLGQsdi5leHRyYWN0ZWRVcmwsaCxmKS5waXBlKExyKCh7c3RhdGU6TSx0cmVlOkR9KT0+KHsuLi52LHRhcmdldFNuYXBz''@;'; put 'put ''aG90Ok0sdXJsQWZ0ZXJSZWRpcmVjdHM6RH0pKSkpfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsdGhpcy5jb25maWdMb2FkZXIsdGhpcy5yb290Q29tcG9uZW50VHlwZSxhLmNvbmZpZyx0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KSxHdShjZT0+''@;'; put 'put ''e2YudGFyZ2V0U25hcHNob3Q9Y2UudGFyZ2V0U25hcHNob3QsZi51cmxBZnRlclJlZGlyZWN0cz1jZS51cmxBZnRlclJlZGlyZWN0cyx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXsuLi50aGlzLmN1cnJlbnROYXZpZ2F0aW9uLGZpbmFsVXJsOmNlLnVybEFmdGVyUmVkaXJlY3RzfTtjb25zdCBi''@;'; put 'put ''ZT1uZXcgUGxlKGNlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoY2UuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGNlLnVybEFmdGVyUmVkaXJlY3RzKSxjZS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChiZSl9KSk7aWYoWiYmdGhp''@;'; put 'put ''cy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoRC5jdXJyZW50UmF3VXJsKSl7Y29uc3R7aWQ6Y2UsZXh0cmFjdGVkVXJsOmJlLHNvdXJjZTpFZSxyZXN0b3JlZFN0YXRlOkJlLGV4dHJhczpxZX09RCxydD1uZXcgQlIoY2UsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6''@;'; put 'put ''ZShiZSksRWUsQmUpO3RoaXMuZXZlbnRzLm5leHQocnQpO2NvbnN0IHB0PVZsZSh0aGlzLnJvb3RDb21wb25lbnRUeXBlKS5zbmFwc2hvdDtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELHRhcmdldFNuYXBzaG90OnB0LHVybEFmdGVyUmVkaXJlY3RzOmJlLGV4dHJhczp7''@;'; put 'put ''Li4ucWUsc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9fSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLmZpbmFsVXJsPWJlLGZvKGYpfXtjb25zdCBjZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgc3koRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQu''@;'; put 'put ''ZXh0cmFjdGVkVXJsKSxjZSxqUi5JZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5KSksRC5yZXNvbHZlKG51bGwpLE0yfX0pLEd1KEQ9Pntjb25zdCBaPW5ldyB6eGUoRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIu''@;'; put 'put ''c2VyaWFsaXplKEQudXJsQWZ0ZXJSZWRpcmVjdHMpLEQudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoWil9KSxMcihEPT4odGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELGd1YXJkczpkRWUoRC50YXJnZXRTbmFwc2hvdCxELmN1cnJlbnRTbmFwc2hvdCx0aGlzLnJvb3RD''@;'; put 'put ''b250ZXh0cyl9LGYpKSxmdW5jdGlvbiB3RWUoYyxsKXtyZXR1cm4gTjAoYT0+e2NvbnN0e3RhcmdldFNuYXBzaG90OmQsY3VycmVudFNuYXBzaG90OmgsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpmLGNhbkRlYWN0aXZhdGVDaGVja3M6dn19PWE7cmV0dXJuIDA9PT12Lmxlbmd0aCYmMD09''@;'; put 'put ''PWYubGVuZ3RoP2ZvKHsuLi5hLGd1YXJkc1Jlc3VsdDohMH0pOmZ1bmN0aW9uIENFZShjLGwsYSxkKXtyZXR1cm4gWXUoYykucGlwZShOMChoPT5mdW5jdGlvbiBBRWUoYyxsLGEsZCxoKXtjb25zdCBmPWwmJmwucm91dGVDb25maWc/bC5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7''@;'; put 'put ''cmV0dXJuIGYmJjAhPT1mLmxlbmd0aD9mbyhmLm1hcChNPT57Y29uc3QgRD1KTShsKT8/aCxaPWN5KE0sRCk7cmV0dXJuIG9tKGZ1bmN0aW9uIHlFZShjKXtyZXR1cm4gYyYmdHgoYy5jYW5EZWFjdGl2YXRlKX0oWik/Wi5jYW5EZWFjdGl2YXRlKGMsbCxhLGQpOnEwKEQsKCk9PlooYyxsLGEs''@;'; put 'put ''ZCkpKS5waXBlKGFtKCkpfSkpLnBpcGUodXkoKSk6Zm8oITApfShoLmNvbXBvbmVudCxoLnJvdXRlLGEsbCxkKSksYW0oaD0+ITAhPT1oLCEwKSl9KHYsZCxoLGMpLnBpcGUoTjAoTT0+TSYmZnVuY3Rpb24gZ0VlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KE0pP2Z1bmN0aW9uIFNF''@;'; put 'put ''ZShjLGwsYSxkKXtyZXR1cm4gWXUobCkucGlwZSh0eShoPT5VWihmdW5jdGlvbiB4RWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3ICR4ZShjKSksZm8oITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiBNRWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IHF4ZShj''@;'; put 'put ''KSksZm8oITApfShoLnJvdXRlLGQpLGZ1bmN0aW9uIFRFZShjLGwsYSl7Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAodj0+ZnVuY3Rpb24gaEVlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2''@;'; put 'put ''YXRlQ2hpbGQ6bnVsbDtyZXR1cm4gbCYmMCE9PWwubGVuZ3RoP3tub2RlOmMsZ3VhcmRzOmx9Om51bGx9KHYpKS5maWx0ZXIodj0+bnVsbCE9PXYpLm1hcCh2PT5wbGUoKCk9PmZvKHYuZ3VhcmRzLm1hcChEPT57Y29uc3QgWj1KTSh2Lm5vZGUpPz9hLHJlPWN5KEQsWik7cmV0dXJuIG9tKGZ1''@;'; put 'put ''bmN0aW9uIGJFZShjKXtyZXR1cm4gYyYmdHgoYy5jYW5BY3RpdmF0ZUNoaWxkKX0ocmUpP3JlLmNhbkFjdGl2YXRlQ2hpbGQoZCxjKTpxMChaLCgpPT5yZShkLGMpKSkucGlwZShhbSgpKX0pKS5waXBlKHV5KCkpKSk7cmV0dXJuIGZvKGYpLnBpcGUodXkoKSl9KGMsaC5wYXRoLGEpLGZ1bmN0''@;'; put 'put ''aW9uIEVFZShjLGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBmbyghMCk7Y29uc3QgaD1kLm1hcChmPT5wbGUoKCk9Pntjb25zdCB2PUpNKGwpPz9hLE09Y3koZix2KTtyZXR1cm4gb20o''@;'; put 'put ''ZnVuY3Rpb24gdkVlKGMpe3JldHVybiBjJiZ0eChjLmNhbkFjdGl2YXRlKX0oTSk/TS5jYW5BY3RpdmF0ZShsLGMpOnEwKHYsKCk9Pk0obCxjKSkpLnBpcGUoYW0oKSl9KSk7cmV0dXJuIGZvKGgpLnBpcGUodXkoKSl9KGMsaC5yb3V0ZSxhKSkpLGFtKGg9PiEwIT09aCwhMCkpfShkLGYsYyxs''@;'; put 'put ''KTpmbyhNKSksTHIoTT0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpNfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsRD0+dGhpcy5ldmVudHMubmV4dChEKSksR3UoRD0+e2lmKGYuZ3VhcmRzUmVzdWx0PUQuZ3VhcmRzUmVzdWx0LGF5KEQuZ3VhcmRzUmVzdWx0KSl0aHJvdyBXbGUoMCxE''@;'; put 'put ''Lmd1YXJkc1Jlc3VsdCk7Y29uc3QgWj1uZXcgVXhlKEQuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELnVybEFmdGVyUmVkaXJlY3RzKSxELnRhcmdldFNuYXBzaG90LCEhRC5ndWFyZHNSZXN1bHQp''@;'; put 'put ''O3RoaXMuZXZlbnRzLm5leHQoWil9KSwkbChEPT4hIUQuZ3VhcmRzUmVzdWx0fHwodGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihELCIiLHBoLkd1YXJkUmVqZWN0ZWQpLCExKSkscFcoRD0+e2lmKEQuZ3VhcmRzLmNhbkFjdGl2YXRlQ2hlY2tzLmxlbmd0aClyZXR1cm4gZm8oRCku''@;'; put 'put ''cGlwZShHdShaPT57Y29uc3QgcmU9bmV3IFp4ZShaLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi51cmxBZnRlclJlZGlyZWN0cyksWi50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChy''@;'; put 'put ''ZSl9KSxWMShaPT57bGV0IHJlPSExO3JldHVybiBmbyhaKS5waXBlKGZ1bmN0aW9uIFhFZShjLGwpe3JldHVybiBOMChhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0aClyZXR1cm4gZm8oYSk7Y29uc3QgZj1uZXcg''@;'; put 'put ''U2V0KGgubWFwKEQ9PkQucm91dGUpKSx2PW5ldyBTZXQ7Zm9yKGNvbnN0IEQgb2YgZilpZighdi5oYXMoRCkpZm9yKGNvbnN0IFogb2YgZWNlKEQpKXYuYWRkKFopO2xldCBNPTA7cmV0dXJuIFl1KHYpLnBpcGUodHkoRD0+Zi5oYXMoRCk/ZnVuY3Rpb24gSkVlKGMsbCxhLGQpe2NvbnN0IGg9''@;'; put 'put ''Yy5yb3V0ZUNvbmZpZyxmPWMuX3Jlc29sdmU7cmV0dXJuIHZvaWQgMCE9PWg/LnRpdGxlJiYhemxlKGgpJiYoZltaTV09aC50aXRsZSksZnVuY3Rpb24gUUVlKGMsbCxhLGQpe2NvbnN0IGg9R1ooYyk7aWYoMD09PWgubGVuZ3RoKXJldHVybiBmbyh7fSk7Y29uc3QgZj17fTtyZXR1cm4gWXUo''@;'; put 'put ''aCkucGlwZShOMCh2PT5mdW5jdGlvbiBlVGUoYyxsLGEsZCl7Y29uc3QgaD1KTShsKT8/ZCxmPWN5KGMsaCk7cmV0dXJuIG9tKGYucmVzb2x2ZT9mLnJlc29sdmUobCxhKTpxMChoLCgpPT5mKGwsYSkpKX0oY1t2XSxsLGEsZCkucGlwZShhbSgpLEd1KE09PntmW3ZdPU19KSkpLFlaKDEpLGZ1''@;'; put 'put ''bmN0aW9uIGZ4ZShjKXtyZXR1cm4gTHIoKCk9PmMpfShmKSxYOCh2PT5xbGUodik/TTI6ek0odikpKX0oZixjLGwsZCkucGlwZShMcih2PT4oYy5fcmVzb2x2ZWREYXRhPXYsYy5kYXRhPXJXKGMsYy5wYXJlbnQsYSkucmVzb2x2ZSxudWxsKSkpfShELGQsYyxsKTooRC5kYXRhPXJXKEQsRC5w''@;'; put 'put ''YXJlbnQsYykucmVzb2x2ZSxmbyh2b2lkIDApKSksR3UoKCk9Pk0rKyksWVooMSksTjAoRD0+TT09PXYuc2l6ZT9mbyhhKTpNMikpfSl9KHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3IpLEd1KHtuZXh0OigpPT5yZT0hMCxjb21wbGV0ZToo''@;'; put 'put ''KT0+e3JlfHx0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKFosIiIscGguTm9EYXRhRnJvbVJlc29sdmVyKX19KSl9KSxHdShaPT57Y29uc3QgcmU9bmV3IFd4ZShaLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXpl''@;'; put 'put ''ci5zZXJpYWxpemUoWi51cmxBZnRlclJlZGlyZWN0cyksWi50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChyZSl9KSl9KSxwVyhEPT57Y29uc3QgWj1yZT0+e2NvbnN0IGNlPVtdO3JlLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50JiYhcmUucm91dGVDb25maWcuX2xvYWRlZENv''@;'; put 'put ''bXBvbmVudCYmY2UucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29tcG9uZW50KHJlLnJvdXRlQ29uZmlnKS5waXBlKEd1KGJlPT57cmUuY29tcG9uZW50PWJlfSksTHIoKCk9Pnt9KSkpO2Zvcihjb25zdCBiZSBvZiByZS5jaGlsZHJlbiljZS5wdXNoKC4uLlooYmUpKTtyZXR1cm4gY2V9''@;'; put 'put ''O3JldHVybiBxOChaKEQudGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUoTFIobnVsbCksWWYoMSkpfSkscFcoKCk9PnRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uKCkpLFYxKCgpPT57Y29uc3R7Y3VycmVudFNuYXBzaG90OkQsdGFyZ2V0U25hcHNob3Q6Wn09ZixyZT10aGlzLmNyZWF0ZVZpZXdU''@;'; put 'put ''cmFuc2l0aW9uPy4odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLEQucm9vdCxaLnJvb3QpO3JldHVybiByZT9ZdShyZSkucGlwZShMcigoKT0+ZikpOmZvKGYpfSksTHIoRD0+e2NvbnN0IFo9ZnVuY3Rpb24gZUVlKGMsbCxhKXtjb25zdCBkPVhNKGMsbC5fcm9vdCxhP2EuX3Jvb3Q6dm9pZCAw''@;'; put 'put ''KTtyZXR1cm4gbmV3IE5sZShkLGwpfShhLnJvdXRlUmV1c2VTdHJhdGVneSxELnRhcmdldFNuYXBzaG90LEQuY3VycmVudFJvdXRlclN0YXRlKTtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELHRhcmdldFJvdXRlclN0YXRlOlp9LHRoaXMuY3VycmVudE5hdmlnYXRpb24u''@;'; put 'put ''dGFyZ2V0Um91dGVyU3RhdGU9WixmfSksR3UoKCk9Pnt0aGlzLmV2ZW50cy5uZXh0KG5ldyBRWil9KSwoKGMsbCxhLGQpPT5McihoPT4obmV3IHVFZShsLGgudGFyZ2V0Um91dGVyU3RhdGUsaC5jdXJyZW50Um91dGVyU3RhdGUsYSxkKS5hY3RpdmF0ZShjKSxoKSkpKHRoaXMucm9vdENvbnRl''@;'; put 'put ''eHRzLGEucm91dGVSZXVzZVN0cmF0ZWd5LEQ9PnRoaXMuZXZlbnRzLm5leHQoRCksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkKSxZZigxKSxHdSh7bmV4dDpEPT57dj0hMCx0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj10aGlzLmN1cnJlbnROYXZpZ2F0aW9uLHRoaXMuZXZlbnRzLm5l''@;'; put 'put ''eHQobmV3IHBwKEQuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELnVybEFmdGVyUmVkaXJlY3RzKSkpLHRoaXMudGl0bGVTdHJhdGVneT8udXBkYXRlVGl0bGUoRC50YXJnZXRSb3V0ZXJTdGF0ZS5z''@;'; put 'put ''bmFwc2hvdCksRC5yZXNvbHZlKCEwKX0sY29tcGxldGU6KCk9Pnt2PSEwfX0pLFYwKHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdC5waXBlKEd1KEQ9Pnt0aHJvdyBEfSkpKSxVTSgoKT0+eyF2JiYhTSYmdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihmLCIiLHBoLlN1cGVyc2Vk''@;'; put 'put ''ZWRCeU5ld05hdmlnYXRpb24pLHRoaXMuY3VycmVudFRyYW5zaXRpb24/LmlkPT09Zi5pZCYmKHRoaXMuY3VycmVudE5hdmlnYXRpb249bnVsbCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwpfSksWDgoRD0+e2lmKE09ITAsR2xlKEQpKXRoaXMuZXZlbnRzLm5leHQobmV3IG95KGYuaWQs''@;'; put 'put ''dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksRC5tZXNzYWdlLEQuY2FuY2VsbGF0aW9uQ29kZSkpLGZ1bmN0aW9uIHJFZShjKXtyZXR1cm4gR2xlKGMpJiZheShjLnVybCl9KEQpP3RoaXMuZXZlbnRzLm5leHQobmV3IGVXKEQudXJsKSk6Zi5yZXNvbHZlKCEx''@;'; put 'put ''KTtlbHNle3RoaXMuZXZlbnRzLm5leHQobmV3IHpSKGYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksRCxmLnRhcmdldFNuYXBzaG90Pz92b2lkIDApKTt0cnl7Zi5yZXNvbHZlKGEuZXJyb3JIYW5kbGVyKEQpKX1jYXRjaChaKXt0aGlzLm9wdGlvbnMu''@;'; put 'put ''cmVzb2x2ZU5hdmlnYXRpb25Qcm9taXNlT25FcnJvcj9mLnJlc29sdmUoITEpOmYucmVqZWN0KFopfX1yZXR1cm4gTTJ9KSl9KSl9Y2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oYSxkLGgpe2NvbnN0IGY9bmV3IG95KGEuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShhLmV4dHJh''@;'; put 'put ''Y3RlZFVybCksZCxoKTt0aGlzLmV2ZW50cy5uZXh0KGYpLGEucmVzb2x2ZSghMSl9aXNVcGRhdGluZ0ludGVybmFsU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkhPT10aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5jdXJyZW50VXJs''@;'; put 'put ''VHJlZS50b1N0cmluZygpfWlzVXBkYXRlZEJyb3dzZXJVcmwoKXtyZXR1cm4gdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QodGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHRoaXMubG9jYXRpb24ucGF0aCghMCkpKS50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VHJhbnNpdGlvbj8u''@;'; put 'put ''ZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkmJiF0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh''@;'; put 'put ''Y3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHNUZShjKXtyZXR1cm4gYyE9PUtNfWxldCBsVGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5maSh1VGUpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBjVGV7c2hvdWxkRGV0YWNoKGwpe3JldHVybiExfXN0b3JlKGwsYSl7fXNob3VsZEF0dGFjaChsKXtyZXR1cm4hMX1yZXRyaWV2ZShsKXty''@;'; put 'put ''ZXR1cm4gbnVsbH1zaG91bGRSZXVzZVJvdXRlKGwsYSl7cmV0dXJuIGwucm91dGVDb25maWc9PT1hLnJvdXRlQ29uZmlnfX1sZXQgdVRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBjVGV7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4o''@;'; put 'put ''YXx8KGE9WXMoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksYWNlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkoZFRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksZFRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhY2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1''@;'; put 'put ''bWVudHMpLHRoaXMubG9jYXRpb249ZmkoZmgpLHRoaXMudXJsU2VyaWFsaXplcj1maShpeSksdGhpcy5vcHRpb25zPWZpKGh5LHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRp''@;'; put 'put ''b258fCJyZXBsYWNlIix0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9ZmkobVcpLHRoaXMudXJsVXBkYXRlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnVybFVwZGF0ZVN0cmF0ZWd5fHwiZGVmZXJyZWQiLHRoaXMuY3VycmVudFVybFRyZWU9bmV3IHJ5LHRoaXMucmF3VXJsVHJlZT10aGlzLmN1cnJl''@;'; put 'put ''bnRVcmxUcmVlLHRoaXMuY3VycmVudFBhZ2VJZD0wLHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMSx0aGlzLnJvdXRlclN0YXRlPVZsZShudWxsKSx0aGlzLnN0YXRlTWVtZW50bz10aGlzLmNyZWF0ZVN0YXRlTWVtZW50bygpfWdldEN1cnJlbnRVcmxUcmVlKCl7cmV0dXJuIHRoaXMuY3VycmVu''@;'; put 'put ''dFVybFRyZWV9Z2V0UmF3VXJsVHJlZSgpe3JldHVybiB0aGlzLnJhd1VybFRyZWV9cmVzdG9yZWRTdGF0ZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLmdldFN0YXRlKCl9Z2V0IGJyb3dzZXJQYWdlSWQoKXtyZXR1cm4iY29tcHV0ZWQiIT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0''@;'; put 'put ''aW9uP3RoaXMuY3VycmVudFBhZ2VJZDp0aGlzLnJlc3RvcmVkU3RhdGUoKT8uXHUwMjc1cm91dGVyUGFnZUlkPz90aGlzLmN1cnJlbnRQYWdlSWR9Z2V0Um91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5yb3V0ZXJTdGF0ZX1jcmVhdGVTdGF0ZU1lbWVudG8oKXtyZXR1cm57cmF3VXJsVHJlZTp0''@;'; put 'put ''aGlzLnJhd1VybFRyZWUsY3VycmVudFVybFRyZWU6dGhpcy5jdXJyZW50VXJsVHJlZSxyb3V0ZXJTdGF0ZTp0aGlzLnJvdXRlclN0YXRlfX1yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKGEpe3JldHVybiB0aGlzLmxvY2F0aW9uLnN1YnNjcmliZShkPT57InBv''@;'; put 'put ''cHN0YXRlIj09PWQudHlwZSYmYShkLnVybCxkLnN0YXRlKX0pfWhhbmRsZVJvdXRlckV2ZW50KGEsZCl7aWYoYSBpbnN0YW5jZW9mIEJSKXRoaXMuc3RhdGVNZW1lbnRvPXRoaXMuY3JlYXRlU3RhdGVNZW1lbnRvKCk7ZWxzZSBpZihhIGluc3RhbmNlb2Ygc3kpdGhpcy5yYXdVcmxUcmVlPWQu''@;'; put 'put ''aW5pdGlhbFVybDtlbHNlIGlmKGEgaW5zdGFuY2VvZiBQbGUpe2lmKCJlYWdlciI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5JiYhZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKXtjb25zdCBoPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLmZpbmFsVXJsLGQuaW5pdGlhbFVy''@;'; put 'put ''bCk7dGhpcy5zZXRCcm93c2VyVXJsKGgsZCl9fWVsc2UgYSBpbnN0YW5jZW9mIFFaPyh0aGlzLmN1cnJlbnRVcmxUcmVlPWQuZmluYWxVcmwsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLmZpbmFsVXJsLGQuaW5pdGlhbFVybCksdGhpcy5yb3V0ZXJT''@;'; put 'put ''dGF0ZT1kLnRhcmdldFJvdXRlclN0YXRlLCJkZWZlcnJlZCI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5JiYoZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfHx0aGlzLnNldEJyb3dzZXJVcmwodGhpcy5yYXdVcmxUcmVlLGQpKSk6YSBpbnN0YW5jZW9mIG95JiYoYS5jb2RlPT09cGguR3Vh''@;'; put 'put ''cmRSZWplY3RlZHx8YS5jb2RlPT09cGguTm9EYXRhRnJvbVJlc29sdmVyKT90aGlzLnJlc3RvcmVIaXN0b3J5KGQpOmEgaW5zdGFuY2VvZiB6Uj90aGlzLnJlc3RvcmVIaXN0b3J5KGQsITApOmEgaW5zdGFuY2VvZiBwcCYmKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD1hLmlkLHRoaXMuY3VycmVu''@;'; put 'put ''dFBhZ2VJZD10aGlzLmJyb3dzZXJQYWdlSWQpfXNldEJyb3dzZXJVcmwoYSxkKXtjb25zdCBoPXRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYSk7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhoKXx8ZC5leHRyYXMucmVwbGFjZVVybCl7Y29uc3Qgdj17Li4uZC5l''@;'; put 'put ''eHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQpfTt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLCIiLHYpfWVsc2V7Y29uc3QgZj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUo''@;'; put 'put ''ZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQrMSl9O3RoaXMubG9jYXRpb24uZ28oaCwiIixmKX19cmVzdG9yZUhpc3RvcnkoYSxkPSExKXtpZigiY29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uKXtjb25zdCBmPXRoaXMuY3VycmVudFBhZ2VJZC10aGlzLmJyb3dz''@;'; put 'put ''ZXJQYWdlSWQ7MCE9PWY/dGhpcy5sb2NhdGlvbi5oaXN0b3J5R28oZik6dGhpcy5jdXJyZW50VXJsVHJlZT09PWEuZmluYWxVcmwmJjA9PT1mJiYodGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfWVsc2UicmVwbGFjZSI9PT10aGlzLmNhbmNlbGVk''@;'; put 'put ''TmF2aWdhdGlvblJlc29sdXRpb24mJihkJiZ0aGlzLnJlc2V0U3RhdGUoYSksdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSl9cmVzZXRTdGF0ZShhKXt0aGlzLnJvdXRlclN0YXRlPXRoaXMuc3RhdGVNZW1lbnRvLnJvdXRlclN0YXRlLHRoaXMuY3VycmVudFVybFRyZWU9dGhpcy5z''@;'; put 'put ''dGF0ZU1lbWVudG8uY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEuZmluYWxVcmw/P3RoaXMucmF3VXJsVHJlZSl9cmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCl7dGhpcy5sb2NhdGlvbi5y''@;'; put 'put ''ZXBsYWNlU3RhdGUodGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0aGlzLnJhd1VybFRyZWUpLCIiLHRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZCx0aGlzLmN1cnJlbnRQYWdlSWQpKX1nZW5lcmF0ZU5nUm91dGVyU3RhdGUoYSxkKXtyZXR1cm4i''@;'; put 'put ''Y29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uP3tuYXZpZ2F0aW9uSWQ6YSxcdTAyNzVyb3V0ZXJQYWdlSWQ6ZH06e25hdmlnYXRpb25JZDphfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwo''@;'; put 'put ''YT1ZcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTt2YXIgbng9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5DT01QTEVURT0wXT0iQ09NUExFVEUiLGNb''@;'; put 'put ''Yy5GQUlMRUQ9MV09IkZBSUxFRCIsY1tjLlJFRElSRUNUSU5HPTJdPSJSRURJUkVDVElORyIsY30obnh8fHt9KTtmdW5jdGlvbiBvY2UoYyxsKXtjLmV2ZW50cy5waXBlKCRsKGE9PmEgaW5zdGFuY2VvZiBwcHx8YSBpbnN0YW5jZW9mIG95fHxhIGluc3RhbmNlb2YgelJ8fGEgaW5zdGFuY2Vv''@;'; put 'put ''ZiBzeSksTHIoYT0+YSBpbnN0YW5jZW9mIHBwfHxhIGluc3RhbmNlb2Ygc3k/bnguQ09NUExFVEU6YSBpbnN0YW5jZW9mIG95JiYoYS5jb2RlPT09cGguUmVkaXJlY3R8fGEuY29kZT09PXBoLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pP254LlJFRElSRUNUSU5HOm54LkZBSUxFRCksJGwo''@;'; put 'put ''YT0+YSE9PW54LlJFRElSRUNUSU5HKSxZZigxKSkuc3Vic2NyaWJlKCgpPT57bCgpfSl9ZnVuY3Rpb24gaFRlKGMpe3Rocm93IGN9Y29uc3QgZlRlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJleGFjdCJ9LHBU''@;'; put 'put ''ZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCBMcz0oKCk9PntjbGFzcyBje2dldCBjdXJyZW50VXJsVHJlZSgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5nZXRDdXJyZW50VXJsVHJl''@;'; put 'put ''ZSgpfWdldCByYXdVcmxUcmVlKCl7cmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLmdldFJhd1VybFRyZWUoKX1nZXQgZXZlbnRzKCl7cmV0dXJuIHRoaXMuX2V2ZW50c31nZXQgcm91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0Um91dGVyU3RhdGUoKX1jb25zdHJ1Y3Rv''@;'; put 'put ''cigpe3RoaXMuZGlzcG9zZWQ9ITEsdGhpcy5pc05nWm9uZUVuYWJsZWQ9ITEsdGhpcy5jb25zb2xlPWZpKFZpZSksdGhpcy5zdGF0ZU1hbmFnZXI9ZmkoYWNlKSx0aGlzLm9wdGlvbnM9ZmkoaHkse29wdGlvbmFsOiEwfSl8fHt9LHRoaXMucGVuZGluZ1Rhc2tzPWZpKFBmKSx0aGlzLnVybFVw''@;'; put 'put ''ZGF0ZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIix0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucz1maShHUiksdGhpcy51cmxTZXJpYWxpemVyPWZpKGl5KSx0aGlzLmxvY2F0aW9uPWZpKGZoKSx0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9Zmko''@;'; put 'put ''bVcpLHRoaXMuX2V2ZW50cz1uZXcgV24sdGhpcy5lcnJvckhhbmRsZXI9dGhpcy5vcHRpb25zLmVycm9ySGFuZGxlcnx8aFRlLHRoaXMubmF2aWdhdGVkPSExLHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5PWZpKGxUZSksdGhpcy5vblNhbWVVcmxOYXZpZ2F0aW9uPXRoaXMub3B0aW9ucy5vblNh''@;'; put 'put ''bWVVcmxOYXZpZ2F0aW9ufHwiaWdub3JlIix0aGlzLmNvbmZpZz1maShmeSx7b3B0aW9uYWw6ITB9KT8uZmxhdCgpPz9bXSx0aGlzLmNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFmaShVUix7b3B0aW9uYWw6ITB9KSx0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbj1uZXcgcXQsdGhpcy5p''@;'; put 'put ''c05nWm9uZUVuYWJsZWQ9ZmkoV2EpaW5zdGFuY2VvZiBXYSYmV2EuaXNJbkFuZ3VsYXJab25lKCksdGhpcy5yZXNldENvbmZpZyh0aGlzLmNvbmZpZyksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuc2V0dXBOYXZpZ2F0aW9ucyh0aGlzLHRoaXMuY3VycmVudFVybFRyZWUsdGhpcy5yb3V0''@;'; put 'put ''ZXJTdGF0ZSkuc3Vic2NyaWJlKHtlcnJvcjphPT57dGhpcy5jb25zb2xlLndhcm4oYSl9fSksdGhpcy5zdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKX1zdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKXtjb25zdCBhPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmV2ZW50cy5zdWJz''@;'; put 'put ''Y3JpYmUoZD0+e3RyeXtjb25zdCBoPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmN1cnJlbnRUcmFuc2l0aW9uLGY9dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb247aWYobnVsbCE9PWgmJm51bGwhPT1mKWlmKHRoaXMuc3RhdGVNYW5hZ2VyLmhhbmRsZVJv''@;'; put 'put ''dXRlckV2ZW50KGQsZiksZCBpbnN0YW5jZW9mIG95JiZkLmNvZGUhPT1waC5SZWRpcmVjdCYmZC5jb2RlIT09cGguU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbil0aGlzLm5hdmlnYXRlZD0hMDtlbHNlIGlmKGQgaW5zdGFuY2VvZiBwcCl0aGlzLm5hdmlnYXRlZD0hMDtlbHNlIGlmKGQgaW5z''@;'; put 'put ''dGFuY2VvZiBlVyl7Y29uc3Qgdj10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZC51cmwsaC5jdXJyZW50UmF3VXJsKSxNPXtpbmZvOmguZXh0cmFzLmluZm8sc2tpcExvY2F0aW9uQ2hhbmdlOmguZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOiJlYWdlciI9PT10''@;'; put 'put ''aGlzLnVybFVwZGF0ZVN0cmF0ZWd5fHxzVGUoaC5zb3VyY2UpfTt0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbih2LEtNLG51bGwsTSx7cmVzb2x2ZTpoLnJlc29sdmUscmVqZWN0OmgucmVqZWN0LHByb21pc2U6aC5wcm9taXNlfSl9KGZ1bmN0aW9uIG1UZShjKXtyZXR1cm4hKGMgaW5zdGFuY2Vv''@;'; put 'put ''ZiBRWnx8YyBpbnN0YW5jZW9mIGVXKX0pKGQpJiZ0aGlzLl9ldmVudHMubmV4dChkKX1jYXRjaChoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy50cmFuc2l0aW9uQWJvcnRTdWJqZWN0Lm5leHQoaCl9fSk7dGhpcy5ldmVudHNTdWJzY3JpcHRpb24uYWRkKGEpfXJlc2V0Um9vdENvbXBv''@;'; put 'put ''bmVudFR5cGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZS5yb290LmNvbXBvbmVudD1hLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnJvb3RDb21wb25lbnRUeXBlPWF9aW5pdGlhbE5hdmlnYXRpb24oKXt0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLHRoaXMubmF2aWdhdGlvblRy''@;'; put 'put ''YW5zaXRpb25zLmhhc1JlcXVlc3RlZE5hdmlnYXRpb258fHRoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih0aGlzLmxvY2F0aW9uLnBhdGgoITApLEtNLHRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmVkU3RhdGUoKSl9c2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl7dGhpcy5ub25S''@;'; put 'put ''b3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlzLnN0YXRlTWFuYWdlci5yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKChhLGQpPT57c2V0VGltZW91dCgoKT0+e3RoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLCJwb3BzdGF0''@;'; put 'put ''ZSIsZCl9LDApfSl9bmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGQsaCl7Y29uc3QgZj17cmVwbGFjZVVybDohMH0sdj1oPy5uYXZpZ2F0aW9uSWQ/aDpudWxsO2lmKGgpe2NvbnN0IEQ9ey4uLmh9O2RlbGV0ZSBELm5hdmlnYXRpb25JZCxkZWxldGUgRC5cdTAyNzVyb3V0ZXJQYWdlSWQs''@;'; put 'put ''MCE9PU9iamVjdC5rZXlzKEQpLmxlbmd0aCYmKGYuc3RhdGU9RCl9Y29uc3QgTT10aGlzLnBhcnNlVXJsKGEpO3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKE0sZCx2LGYpfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9Z2V0Q3VycmVudE5h''@;'; put 'put ''dmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb259Z2V0IGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb259cmVzZXRDb25maWco''@;'; put 'put ''YSl7dGhpcy5jb25maWc9YS5tYXAoY1cpLHRoaXMubmF2aWdhdGVkPSExfW5nT25EZXN0cm95KCl7dGhpcy5kaXNwb3NlKCl9ZGlzcG9zZSgpe3RoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmNvbXBsZXRlKCksdGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24m''@;'; put 'put ''Jih0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uPXZvaWQgMCksdGhpcy5kaXNwb3NlZD0hMCx0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmli''@;'; put 'put ''ZSgpfWNyZWF0ZVVybFRyZWUoYSxkPXt9KXtjb25zdHtyZWxhdGl2ZVRvOmgscXVlcnlQYXJhbXM6ZixmcmFnbWVudDp2LHF1ZXJ5UGFyYW1zSGFuZGxpbmc6TSxwcmVzZXJ2ZUZyYWdtZW50OkR9PWQsWj1EP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6djtsZXQgY2UscmU9bnVsbDtz''@;'; put 'put ''d2l0Y2goTSl7Y2FzZSJtZXJnZSI6cmU9ey4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsLi4uZn07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6cmU9dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0OnJlPWZ8fG51bGx9bnVsbCE9PXJlJiYocmU9dGhp''@;'; put 'put ''cy5yZW1vdmVFbXB0eVByb3BzKHJlKSk7dHJ5e2NlPUFsZShoP2guc25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290KX1jYXRjaHsoInN0cmluZyIhPXR5cGVvZiBhWzBdfHwhYVswXS5zdGFydHNXaXRoKCIvIikpJiYoYT1bXSksY2U9dGhpcy5jdXJyZW50VXJsVHJlZS5y''@;'; put 'put ''b290fXJldHVybiBrbGUoY2UsYSxyZSxaPz9udWxsKX1uYXZpZ2F0ZUJ5VXJsKGEsZD17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSl7Y29uc3QgaD1heShhKT9hOnRoaXMucGFyc2VVcmwoYSksZj10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoaCx0aGlzLnJhd1VybFRyZWUpO3JldHVy''@;'; put 'put ''biB0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihmLEtNLG51bGwsZCl9bmF2aWdhdGUoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtyZXR1cm4gZnVuY3Rpb24gZ1RlKGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKG51bGw9PWNbbF0pdGhyb3cgbmV3IFFuKDQwMDgsITEpfShh''@;'; put 'put ''KSx0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5jcmVhdGVVcmxUcmVlKGEsZCksZCl9c2VyaWFsaXplVXJsKGEpe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEpfXBhcnNlVXJsKGEpe3RyeXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpfWNhdGNoe3JldHVy''@;'; put 'put ''biB0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoIi8iKX19aXNBY3RpdmUoYSxkKXtsZXQgaDtpZihoPSEwPT09ZD97Li4uZlRlfTohMT09PWQ/ey4uLnBUZX06ZCxheShhKSlyZXR1cm4geWxlKHRoaXMuY3VycmVudFVybFRyZWUsYSxoKTtjb25zdCBmPXRoaXMucGFyc2VVcmwoYSk7cmV0dXJu''@;'; put 'put ''IHlsZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGYsaCl9cmVtb3ZlRW1wdHlQcm9wcyhhKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYSkucmVkdWNlKChkLFtoLGZdKT0+KG51bGwhPWYmJihkW2hdPWYpLGQpLHt9KX1zY2hlZHVsZU5hdmlnYXRpb24oYSxkLGgsZix2KXtpZih0aGlzLmRpc3Bvc2Vk''@;'; put 'put ''KXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2xldCBNLEQsWjt2PyhNPXYucmVzb2x2ZSxEPXYucmVqZWN0LFo9di5wcm9taXNlKTpaPW5ldyBQcm9taXNlKChjZSxiZSk9PntNPWNlLEQ9YmV9KTtjb25zdCByZT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gb2NlKHRoaXMsKCk9''@;'; put 'put ''PntxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5wZW5kaW5nVGFza3MucmVtb3ZlKHJlKSl9KSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYW5kbGVOYXZpZ2F0aW9uUmVxdWVzdCh7c291cmNlOmQscmVzdG9yZWRTdGF0ZTpoLGN1cnJlbnRVcmxUcmVlOnRoaXMuY3VycmVudFVybFRyZWUs''@;'; put 'put ''Y3VycmVudFJhd1VybDp0aGlzLmN1cnJlbnRVcmxUcmVlLHJhd1VybDphLGV4dHJhczpmLHJlc29sdmU6TSxyZWplY3Q6RCxwcm9taXNlOlosY3VycmVudFNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNob3QsY3VycmVudFJvdXRlclN0YXRlOnRoaXMucm91dGVyU3RhdGV9KSxaLmNh''@;'; put 'put ''dGNoKGNlPT5Qcm9taXNlLnJlamVjdChjZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpLGMxPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMucm91dGVyPWEsdGhpcy5yb3V0ZT1kLHRoaXMudGFiSW5kZXhBdHRyaWJ1dGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5lbD12LHRoaXMubG9jYXRpb25TdHJhdGVneT1NLHRoaXMuaHJlZj1udWxsLHRo''@;'; put 'put ''aXMuY29tbWFuZHM9bnVsbCx0aGlzLm9uQ2hhbmdlcz1uZXcgV24sdGhpcy5wcmVzZXJ2ZUZyYWdtZW50PSExLHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlPSExLHRoaXMucmVwbGFjZVVybD0hMTtjb25zdCBEPXYubmF0aXZlRWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpO3RoaXMuaXNB''@;'; put 'put ''bmNob3JFbGVtZW50PSJhIj09PUR8fCJhcmVhIj09PUQsdGhpcy5pc0FuY2hvckVsZW1lbnQ/dGhpcy5zdWJzY3JpcHRpb249YS5ldmVudHMuc3Vic2NyaWJlKFo9PntaIGluc3RhbmNlb2YgcHAmJnRoaXMudXBkYXRlSHJlZigpfSk6dGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgi''@;'; put 'put ''MCIpfXNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRoaXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4IixhKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9yRWxlbWVudCYmdGhp''@;'; put 'put ''cy51cGRhdGVIcmVmKCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1zZXQgcm91dGVyTGluayhhKXtudWxsIT1hPyh0aGlzLmNvbW1hbmRzPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpKToodGhpcy5jb21tYW5kcz1udWxsLHRo''@;'; put 'put ''aXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpfW9uQ2xpY2soYSxkLGgsZix2KXtjb25zdCBNPXRoaXMudXJsVHJlZTtyZXR1cm4hIShudWxsPT09TXx8dGhpcy5pc0FuY2hvckVsZW1lbnQmJigwIT09YXx8ZHx8aHx8Znx8dnx8InN0cmluZyI9PXR5cGVvZiB0aGlzLnRhcmdl''@;'; put 'put ''dCYmIl9zZWxmIiE9dGhpcy50YXJnZXQpKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoTSx7c2tpcExvY2F0aW9uQ2hhbmdlOnRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6dGhpcy5yZXBsYWNlVXJsLHN0YXRlOnRoaXMuc3RhdGUsaW5mbzp0aGlzLmluZm99KSwhdGhp''@;'; put 'put ''cy5pc0FuY2hvckVsZW1lbnQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9dXBkYXRlSHJlZigpe2NvbnN0IGE9dGhpcy51cmxUcmVlO3RoaXMuaHJlZj1udWxsIT09YSYmdGhpcy5sb2NhdGlvblN0cmF0ZWd5P3RoaXMubG9jYXRpb25TdHJhdGVneT8u''@;'; put 'put ''cHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybChhKSk6bnVsbDtjb25zdCBkPW51bGw9PT10aGlzLmhyZWY/bnVsbDpmdW5jdGlvbiBhRChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIGpCKGMsbCl7cmV0dXJuInNyYyI9PT1sJiYoImVtYmVkIj09PWN8fCJmcmFtZSI9''@;'; put 'put ''PT1jfHwiaWZyYW1lIj09PWN8fCJtZWRpYSI9PT1jfHwic2NyaXB0Ij09PWMpfHwiaHJlZiI9PT1sJiYoImJhc2UiPT09Y3x8ImxpbmsiPT09Yyk/aUQ6WkN9KGwsYSkoYyl9KHRoaXMuaHJlZix0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCJocmVmIik7dGhp''@;'; put 'put ''cy5hcHBseUF0dHJpYnV0ZVZhbHVlKCJocmVmIixkKX1hcHBseUF0dHJpYnV0ZVZhbHVlKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyLGY9dGhpcy5lbC5uYXRpdmVFbGVtZW50O251bGwhPT1kP2guc2V0QXR0cmlidXRlKGYsYSxkKTpoLnJlbW92ZUF0dHJpYnV0ZShmLGEpfWdldCB1cmxU''@;'; put 'put ''cmVlKCl7cmV0dXJuIG51bGw9PT10aGlzLmNvbW1hbmRzP251bGw6dGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZSh0aGlzLmNvbW1hbmRzLHtyZWxhdGl2ZVRvOnZvaWQgMCE9PXRoaXMucmVsYXRpdmVUbz90aGlzLnJlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczp0aGlzLnF1ZXJ5''@;'; put 'put ''UGFyYW1zLGZyYWdtZW50OnRoaXMuZnJhZ21lbnQscXVlcnlQYXJhbXNIYW5kbGluZzp0aGlzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcscHJlc2VydmVGcmFnbWVudDp0aGlzLnByZXNlcnZlRnJhZ21lbnR9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj''@;'; put 'put ''KShHZShMcyksR2UoQ3UpLElmKCJ0YWJpbmRleCIpLEdlKEVvKSxHZShKaSksR2UoWjgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmsiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DbGljayh2LmJ1dHRvbix2LmN0cmxLZXksdi5zaGlmdEtleSx2LmFsdEtleSx2Lm1ldGFLZXkpfSksMiZkJiZocigidGFyZ2V0IixoLnRhcmdldCl9LGlucHV0czp7dGFyZ2V0OiJ0YXJnZXQiLHF1ZXJ5UGFyYW1zOiJxdWVyeVBhcmFt''@;'; put 'put ''cyIsZnJhZ21lbnQ6ImZyYWdtZW50IixxdWVyeVBhcmFtc0hhbmRsaW5nOiJxdWVyeVBhcmFtc0hhbmRsaW5nIixzdGF0ZToic3RhdGUiLGluZm86ImluZm8iLHJlbGF0aXZlVG86InJlbGF0aXZlVG8iLHByZXNlcnZlRnJhZ21lbnQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJw''@;'; put 'put ''cmVzZXJ2ZUZyYWdtZW50IiwicHJlc2VydmVGcmFnbWVudCIsczFdLHNraXBMb2NhdGlvbkNoYW5nZTpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sInNraXBMb2NhdGlvbkNoYW5nZSIsInNraXBMb2NhdGlvbkNoYW5nZSIsczFdLHJlcGxhY2VVcmw6W05uLkhhc0RlY29yYXRvcklu''@;'; put 'put ''cHV0VHJhbnNmb3JtLCJyZXBsYWNlVXJsIiwicmVwbGFjZVVybCIsczFdLHJvdXRlckxpbms6InJvdXRlckxpbmsifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltXbCx3bF19KX19cmV0dXJuIGN9KSgpLHB5PSgoKT0+e2NsYXNzIGN7Z2V0IGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0''@;'; put 'put ''aXZlfWNvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9dix0aGlzLmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6''@;'; put 'put ''ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IEtyLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShNPT57TSBpbnN0YW5jZW9mIHBwJiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7Zm8odGhpcy5saW5rcy5jaGFuZ2VzLGZvKG51''@;'; put 'put ''bGwpKS5waXBlKGV5KCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29u''@;'; put 'put ''c3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj1ZdShhKS5waXBlKGV5KCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlz''@;'; put 'put ''TGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZCkmJnRoaXMudXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk/YTphLnNwbGl0KCIgIik7dGhpcy5jbGFzc2VzPWQuZmlsdGVyKGg9PiEhaCl9bmdPbkNoYW5nZXMoYSl7dGhpcy51cGRhdGUo''@;'; put 'put ''KX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3Jv''@;'; put 'put ''dGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3RoaXMuY2xhc3Nlcy5mb3JFYWNoKGQ9PnthP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsZCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZl''@;'; put 'put ''RWxlbWVudCxkKX0pLGEmJnZvaWQgMCE9PXRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlP3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiLHRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlLnRvU3RyaW5nKCkpOnRoaXMu''@;'; put 'put ''cmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiKSx0aGlzLl9pc0FjdGl2ZSE9PWEmJih0aGlzLl9pc0FjdGl2ZT1hLHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdChhKSl9KX1pc0xp''@;'; put 'put ''bmtBY3RpdmUoYSl7Y29uc3QgZD1mdW5jdGlvbiB2VGUoYyl7cmV0dXJuISFjLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBoPT57Y29u''@;'; put 'put ''c3QgZj1oLnVybFRyZWU7cmV0dXJuISFmJiZhLmlzQWN0aXZlKGYsZCl9fWhhc0FjdGl2ZUxpbmtzKCl7Y29uc3QgYT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcik7cmV0dXJuIHRoaXMubGluayYmYSh0aGlzLmxpbmspfHx0aGlzLmxpbmtzLnNvbWUoYSl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoTHMpLEdlKEppKSxHZShFbyksR2UoRXMpLEdlKGMxLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmtBY3RpdmUiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVu''@;'; put 'put ''Y3Rpb24oZCxoLGYpe2lmKDEmZCYmYW8oZixjMSw1KSwyJmQpe2xldCB2O0NpKHY9U2koKSkmJihoLmxpbmtzPXYpfX0saW5wdXRzOntyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczoicm91dGVyTGlua0FjdGl2ZU9wdGlvbnMiLGFyaWFDdXJyZW50V2hlbkFjdGl2ZToiYXJpYUN1cnJlbnRXaGVu''@;'; put 'put ''QWN0aXZlIixyb3V0ZXJMaW5rQWN0aXZlOiJyb3V0ZXJMaW5rQWN0aXZlIn0sb3V0cHV0czp7aXNBY3RpdmVDaGFuZ2U6ImlzQWN0aXZlQ2hhbmdlIn0sZXhwb3J0QXM6WyJyb3V0ZXJMaW5rQWN0aXZlIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSkoKTtjbGFz''@;'; put 'put ''cyBzY2V7fWxldCBiVGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucm91dGVyPWEsdGhpcy5pbmplY3Rvcj1oLHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5PWYsdGhpcy5sb2FkZXI9dn1zZXRVcFByZWxvYWRpbmcoKXt0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnJv''@;'; put 'put ''dXRlci5ldmVudHMucGlwZSgkbChhPT5hIGluc3RhbmNlb2YgcHApLHR5KCgpPT50aGlzLnByZWxvYWQoKSkpLnN1YnNjcmliZSgoKT0+e30pfXByZWxvYWQoKXtyZXR1cm4gdGhpcy5wcm9jZXNzUm91dGVzKHRoaXMuaW5qZWN0b3IsdGhpcy5yb3V0ZXIuY29uZmlnKX1uZ09uRGVzdHJveSgp''@;'; put 'put ''e3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByb2Nlc3NSb3V0ZXMoYSxkKXtjb25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIGQpe2YucHJvdmlkZXJzJiYhZi5faW5qZWN0b3ImJihmLl9pbmplY3Rvcj1HNChmLnByb3ZpZGVycyxhLGBSb3V0ZTog''@;'; put 'put ''JHtmLnBhdGh9YCkpO2NvbnN0IHY9Zi5faW5qZWN0b3I/P2EsTT1mLl9sb2FkZWRJbmplY3Rvcj8/djsoZi5sb2FkQ2hpbGRyZW4mJiFmLl9sb2FkZWRSb3V0ZXMmJnZvaWQgMD09PWYuY2FuTG9hZHx8Zi5sb2FkQ29tcG9uZW50JiYhZi5fbG9hZGVkQ29tcG9uZW50KSYmaC5wdXNoKHRoaXMu''@;'; put 'put ''cHJlbG9hZENvbmZpZyh2LGYpKSwoZi5jaGlsZHJlbnx8Zi5fbG9hZGVkUm91dGVzKSYmaC5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhNLGYuY2hpbGRyZW4/P2YuX2xvYWRlZFJvdXRlcykpfXJldHVybiBZdShoKS5waXBlKGV5KCkpfXByZWxvYWRDb25maWcoYSxkKXtyZXR1cm4gdGhpcy5w''@;'; put 'put ''cmVsb2FkaW5nU3RyYXRlZ3kucHJlbG9hZChkLCgpPT57bGV0IGg7aD1kLmxvYWRDaGlsZHJlbiYmdm9pZCAwPT09ZC5jYW5Mb2FkP3RoaXMubG9hZGVyLmxvYWRDaGlsZHJlbihhLGQpOmZvKG51bGwpO2NvbnN0IGY9aC5waXBlKE4wKHY9Pm51bGw9PT12P2ZvKHZvaWQgMCk6KGQuX2xvYWRl''@;'; put 'put ''ZFJvdXRlcz12LnJvdXRlcyxkLl9sb2FkZWRJbmplY3Rvcj12LmluamVjdG9yLHRoaXMucHJvY2Vzc1JvdXRlcyh2LmluamVjdG9yPz9hLHYucm91dGVzKSkpKTtyZXR1cm4gZC5sb2FkQ29tcG9uZW50JiYhZC5fbG9hZGVkQ29tcG9uZW50P1l1KFtmLHRoaXMubG9hZGVyLmxvYWRDb21wb25l''@;'; put 'put ''bnQoZCldKS5waXBlKGV5KCkpOmZ9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihMcykseHIoS2llKSx4cihoYykseHIoc2NlKSx4cihnVykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVm''@;'; put 'put ''YWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHZXPW5ldyBTdCgiIik7bGV0IGxjZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdj17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmlld3BvcnRTY3JvbGxl''@;'; put 'put ''cj1oLHRoaXMuem9uZT1mLHRoaXMub3B0aW9ucz12LHRoaXMubGFzdElkPTAsdGhpcy5sYXN0U291cmNlPSJpbXBlcmF0aXZlIix0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnN0b3JlPXt9LHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1maShoYyksdi5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9u''@;'; put 'put ''fHw9ImRpc2FibGVkIix2LmFuY2hvclNjcm9sbGluZ3x8PSJkaXNhYmxlZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbigibWFudWFsIiks''@;'; put 'put ''dGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVTY3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMu''@;'; put 'put ''c3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgQlI/KHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT1hLm5hdmlnYXRpb25UcmlnZ2VyLHRoaXMucmVzdG9yZWRJZD1hLnJlc3RvcmVkU3RhdGU/''@;'; put 'put ''YS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTphIGluc3RhbmNlb2YgcHA/KHRoaXMubGFzdElkPWEuaWQsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsQWZ0ZXJSZWRpcmVjdHMpLmZyYWdtZW50KSk6YSBpbnN0YW5jZW9mIHN5''@;'; put 'put ''JiZhLmNvZGU9PT1qUi5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24mJih0aGlzLmxhc3RTb3VyY2U9dm9pZCAwLHRoaXMucmVzdG9yZWRJZD0wLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudChhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhLnVybCkuZnJhZ21lbnQpKX0pfWNvbnN1bWVTY3Jv''@;'; put 'put ''bGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgRmxlJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bv''@;'; put 'put ''c2l0aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxp''@;'; put 'put ''bmc/dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEuYW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKSl9KX1zY2hlZHVsZVNjcm9s''@;'; put 'put ''bEV2ZW50KGEsZCl7dmFyIGg9dGhpczt0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZWUoZnVuY3Rpb24qKCl7eWllbGQgbmV3IFByb21pc2UoZj0+e3NldFRpbWVvdXQoKCk9PntmKCl9KSxfYigoKT0+e2YoKX0se2luamVjdG9yOmguZW52aXJvbm1lbnRJbmplY3Rvcn0pfSksaC56b25l''@;'; put 'put ''LnJ1bigoKT0+e2gudHJhbnNpdGlvbnMuZXZlbnRzLm5leHQobmV3IEZsZShhLCJwb3BzdGF0ZSI9PT1oLmxhc3RTb3VyY2U/aC5zdG9yZVtoLnJlc3RvcmVkSWRdOm51bGwsZCkpfSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUo''@;'; put 'put ''KSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7IWZ1bmN0aW9uIFNEKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9KCl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbXAoYyxsKXtyZXR1cm57XHUwMjc1a2luZDpjLFx1MDI3NXByb3ZpZGVyczpsfX1mdW5jdGlvbiB1Y2UoKXtjb25zdCBjPWZpKERzKTtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQocTQpO2lmKGwhPT1hLmNvbXBvbmVu''@;'; put 'put ''dHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoTHMpLGg9Yy5nZXQoZGNlKTsxPT09Yy5nZXQoYlcpJiZkLmluaXRpYWxOYXZpZ2F0aW9uKCksYy5nZXQoaGNlLG51bGwscmEuT3B0aW9uYWwpPy5zZXRVcFByZWxvYWRpbmcoKSxjLmdldCh2VyxudWxsLHJhLk9wdGlvbmFsKT8uaW5pdCgpLGQu''@;'; put 'put ''cmVzZXRSb290Q29tcG9uZW50VHlwZShhLmNvbXBvbmVudFR5cGVzWzBdKSxoLmNsb3NlZHx8KGgubmV4dCgpLGguY29tcGxldGUoKSxoLnVuc3Vic2NyaWJlKCkpfX1jb25zdCBkY2U9bmV3IFN0KCIiLHtmYWN0b3J5OigpPT5uZXcgV259KSxiVz1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJv''@;'; put 'put ''b3QiLGZhY3Rvcnk6KCk9PjF9KSxoY2U9bmV3IFN0KCIiKTtmdW5jdGlvbiBDVGUoYyl7cmV0dXJuIG1wKDAsW3twcm92aWRlOmhjZSx1c2VFeGlzdGluZzpiVGV9LHtwcm92aWRlOnNjZSx1c2VFeGlzdGluZzpjfV0pfWZ1bmN0aW9uIE1UZShjKXtyZXR1cm4gbXAoOSxbe3Byb3ZpZGU6cmNl''@;'; put 'put ''LHVzZVZhbHVlOmFUZX0se3Byb3ZpZGU6aWNlLHVzZVZhbHVlOntza2lwTmV4dFRyYW5zaXRpb246ISFjPy5za2lwSW5pdGlhbFRyYW5zaXRpb24sLi4uY319XSl9Y29uc3QgZmNlPW5ldyBTdCgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSx4VGU9W2ZoLHtwcm92aWRlOml5LHVzZUNsYXNzOiRa''@;'; put 'put ''fSxMcyxxTSx7cHJvdmlkZTpDdSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGNjZShjKXtyZXR1cm4gYy5yb3V0ZXJTdGF0ZS5yb290fSxkZXBzOltMc119LGdXLFtdXTtsZXQgemM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIGZvclJvb3QoYSxkKXtyZXR1cm57bmdNb2R1bGU6''@;'; put 'put ''Yyxwcm92aWRlcnM6W3hUZSxbXSx7cHJvdmlkZTpmeSxtdWx0aTohMCx1c2VWYWx1ZTphfSx7cHJvdmlkZTpmY2UsdXNlRmFjdG9yeTprVGUsZGVwczpbW0xzLG5ldyBJMSxuZXcgbGRdXX0se3Byb3ZpZGU6aHksdXNlVmFsdWU6ZHx8e319LGQ/LnVzZUhhc2g/e3Byb3ZpZGU6WjgsdXNlQ2xh''@;'; put 'put ''c3M6dl9lfTp7cHJvdmlkZTpaOCx1c2VDbGFzczpCYWV9LHtwcm92aWRlOnZXLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPWZpKFJ3ZSksbD1maShXYSksYT1maShoeSksZD1maShHUiksaD1maShpeSk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCks''@;'; put 'put ''bmV3IGxjZShoLGQsYyxsLGEpfX0sZD8ucHJlbG9hZGluZ1N0cmF0ZWd5P0NUZShkLnByZWxvYWRpbmdTdHJhdGVneSkuXHUwMjc1cHJvdmlkZXJzOltdLGQ/LmluaXRpYWxOYXZpZ2F0aW9uP0RUZShkKTpbXSxkPy5iaW5kVG9Db21wb25lbnRJbnB1dHM/bXAoOCxbVWxlLHtwcm92aWRlOlVS''@;'; put 'put ''LHVzZUV4aXN0aW5nOlVsZX1dKS5cdTAyNzVwcm92aWRlcnM6W10sZD8uZW5hYmxlVmlld1RyYW5zaXRpb25zP01UZSgpLlx1MDI3NXByb3ZpZGVyczpbXSxbe3Byb3ZpZGU6cGNlLHVzZUZhY3Rvcnk6dWNlfSx7cHJvdmlkZTprVSxtdWx0aTohMCx1c2VFeGlzdGluZzpwY2V9XV19fXN0YXRp''@;'; put 'put ''YyBmb3JDaGlsZChhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOmZ5LG11bHRpOiEwLHVzZVZhbHVlOmF9XX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoZmNlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtp''@;'; put 'put ''KHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24ga1RlKGMpe3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBEVGUoYyl7cmV0dXJuWyJkaXNhYmxlZCI9PT1jLmluaXRpYWxOYXZpZ2F0aW9uP21wKDMsW3twcm92aWRlOlRVLG11bHRp''@;'; put 'put ''OiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPWZpKExzKTtyZXR1cm4oKT0+e2wuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl9fX0se3Byb3ZpZGU6YlcsdXNlVmFsdWU6Mn1dKS5cdTAyNzVwcm92aWRlcnM6W10sImVuYWJsZWRCbG9ja2luZyI9PT1jLmluaXRpYWxOYXZpZ2F0aW9u''@;'; put 'put ''P21wKDIsW3twcm92aWRlOmJXLHVzZVZhbHVlOjB9LHtwcm92aWRlOlRVLG11bHRpOiEwLGRlcHM6W0RzXSx1c2VGYWN0b3J5Omw9Pntjb25zdCBhPWwuZ2V0KGdfZSxQcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuKCk9PmEudGhlbigoKT0+bmV3IFByb21pc2UoZD0+e2NvbnN0IGg9bC5nZXQo''@;'; put 'put ''THMpLGY9bC5nZXQoZGNlKTtvY2UoaCwoKT0+e2QoITApfSksbC5nZXQoR1IpLmFmdGVyUHJlYWN0aXZhdGlvbj0oKT0+KGQoITApLGYuY2xvc2VkP2ZvKHZvaWQgMCk6ZiksaC5pbml0aWFsTmF2aWdhdGlvbigpfSkpfX1dKS5cdTAyNzVwcm92aWRlcnM6W11dfWNvbnN0IHBjZT1uZXcgU3Qo''@;'; put 'put ''IiIpO3ZhciBneT1mdW5jdGlvbihjKXtyZXR1cm4gYy5saWdodD0ibGlnaHQiLGMuZGFyaz0iZGFyayIsY30oZ3l8fHt9KSxnY2U9eSg1NTE4OCksUlRlPXkoNzg3NTUpO2NvbnN0IHlXPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19hbGxvd2Vk''@;'; put 'put ''OjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0''@;'; put 'put ''UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIGdoPWZ1bmN0aW9uKGMpe3JldHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9yb3dzX2Fs''@;'; put 'put ''bG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlfcm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0YWJsZXNf''@;'; put 'put ''aW5fbGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3giLGNbYy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQiLGNbYy5l''@;'; put 'put ''ZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsY30oZ2h8fHt9KSxtaD15KDM3MzQpLG1jZT15Lm4obWgpLEIwPXkoMTMyNDcpO2xldCBROD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdzKGEpe3Ro''@;'; put 'put ''aXMuZGNBZGFwdGVyU2V0dGluZ3M9YX1nZXREY0FkYXB0ZXJTZXR0aW5ncygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh''@;'; put 'put ''Y3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLF9XPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnVzZXJDaGFuZ2U9bmV3IFdufXNldCB1c2VyKGEpe3RoaXMuX3VzZXI9YSx0aGlzLnVzZXJDaGFuZ2UubmV4dChhKX1nZXQgdXNlcigp''@;'; put 'put ''e3JldHVybiB0aGlzLl91c2VyfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NsYXNzICRSe2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''dGhpcy5kZWZhdWx0U2V0dGluZ3M9e3BlcnNpc3RTZWxlY3RlZFRoZW1lOiEwLHNlbGVjdGVkVGhlbWU6Z3kubGlnaHR9LHRoaXMuc2V0dGluZ3M9bmV3IGVpKHRoaXMuZGVmYXVsdFNldHRpbmdzKSx0aGlzLnJlc3RvcmVBcHBTZXR0aW5ncygpfXJlc3RvcmVBcHBTZXR0aW5ncygpe3RyeXtj''@;'; put 'put ''b25zdCBsPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhcHAtc2V0dGluZ3MiKTtpZihsKXtjb25zdCBhPUpTT04ucGFyc2UobCk7dGhpcy5zZXRBcHBTZXR0aW5ncyhhKX1lbHNlIGNvbnNvbGUuaW5mbygiTm8gYXBwIHNldHRpbmdzIHN0b3JlZCBpbiB0aGUgbG9jYWxTdG9yYWdlLCB3ZSB3aWxs''@;'; put 'put ''IHNldCB0byBkZWZhdWx0IHZhbHVlcy4iKX1jYXRjaChsKXtjb25zb2xlLndhcm4oIkVycm9yIHJlc3RvcmluZyBzZXR0aW5ncyBmcm9tIGxvY2FsIHN0b3JnYWUuIixsKX19c3RvcmVBcHBTZXR0aW5ncygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhcHAtc2V0dGluZ3MiLEpTT04uc3RyaW5n''@;'; put 'put ''aWZ5KHRoaXMuc2V0dGluZ3MudmFsdWUpKX1zZXRBcHBTZXR0aW5ncyhsKXt0aGlzLnNldHRpbmdzLm5leHQoey4uLnRoaXMuc2V0dGluZ3MudmFsdWUsLi4ubH0pLHRoaXMuc3RvcmVBcHBTZXR0aW5ncygpfX1sZXQgdmM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFwcFNl''@;'; put 'put ''dHRpbmdzU2VydmljZT1hLHRoaXMub25TaWRlYmFyVG9nZ2xlPW5ldyBLcix0aGlzLm9uU3RhcnR1cERhdGFMb2FkZWQ9bmV3IEtyLHRoaXMub25TaG93QWJvcnRNb2RhbD1uZXcgS3IsdGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuPW5ldyBLcix0aGlzLm9uRGVtb0xpbWl0TW9kYWxTaG93PW5l''@;'; put 'put ''dyBLcix0aGlzLnZpZXdMYXN0VXJsPW51bGwsdGhpcy5zaWRlYmFyQ2xvc2VMaW1pdD0xMjgwLHRoaXMuZGFya01vZGU9bmV3IGVpKCExKX10b2dnbGVEYXJrTW9kZShhKXt0aGlzLmRhcmtNb2RlLm5leHQoYSksYT9kb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY2RzLXRoZW1lIiwiZGFy''@;'; put 'put ''ayIpOmRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtdGhlbWUiLCJsaWdodCIpLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldEFwcFNldHRpbmdzKHtzZWxlY3RlZFRoZW1lOmE/Z3kuZGFyazpneS5saWdodH0pfXNob3dEZW1vTGltaXRNb2RhbChhKXt0aGlzLm9uRGVtb0xpbWl0''@;'; put 'put ''TW9kYWxTaG93LmVtaXQoYSl9c2hvd0luZm9Nb2RhbChhPSJJbmZvIixkKXt0aGlzLm9uU2hvd0Fib3J0TW9kYWwuZW1pdCh7bW9kYWxUaXRsZTphLG1lc3NhZ2U6ZCxzYXNTZXJ2aWNlOiIiLGRldGFpbHM6bnVsbH0pfXNob3dBYm9ydE1vZGFsKGEsZCxoLGY9dm9pZCAwKXtofHwoaD1udWxs''@;'; put 'put ''KTtsZXQgdj17c2FzU2VydmljZTphLG1lc3NhZ2U6ZCxkZXRhaWxzOmh9O2YmJih2Lm1vZGFsVGl0bGU9ZiksdGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQodil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLm9uUmVxdWVzdHNNb2RhbE9wZW4uZW1pdCghMCl9Y2F0Y2hSZXNwb25zZUVycm9y''@;'; put 'put ''KGEsZCl7bGV0IGg9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiO2lmKGQuZXJyb3Ipe2xldCBmO2g9ZC5lcnJvci5tZXNzYWdlLGQuZXJyb3IuZGV0YWlscyYmZC5lcnJvci5kZXRhaWxzLmxvZyYmKGY9ZC5lcnJvci5kZXRhaWxzLmxvZyksKCFofHxoLnRyaW0oKS5sZW5ndGg8MSkmJiho''@;'; put 'put ''PSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIiksdGhpcy5zaG93QWJvcnRNb2RhbChhLGgse0xPRzpmfSwiUmVxdWVzdCBlcnJvciIpfWVsc2UgdGhpcy5zaG93QWJvcnRNb2RhbChhLGgpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KCl9Y2xvc2VTaWRlYmFy''@;'; put 'put ''KCl7d2luZG93LmlubmVyV2lkdGg8dGhpcy5zaWRlYmFyQ2xvc2VMaW1pdCYmdGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMX0pfW9wZW5TaWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMH0pfXN0YXJ0dXBEYXRhTG9hZGVkKCl7dGhpcy5vblN0YXJ0''@;'; put 'put ''dXBEYXRhTG9hZGVkLmVtaXQoKX1kaXNwYXRjaEV2ZW50KGEpe2xldCBkOyJmdW5jdGlvbiI9PXR5cGVvZiBFdmVudD9kPW5ldyBFdmVudChhKTooZD1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxkLmluaXRFdmVudChhLCEwLCEwKSksd2luZG93LmRpc3BhdGNoRXZlbnQoZCl9c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoJFIpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBLUnt9Y2xhc3MgcVJ7''@;'; put 'put ''fWNsYXNzIEUye2NvbnN0cnVjdG9yKGwpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsbD8ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLGwuc3BsaXQoIlxuIikuZm9yRWFjaChhPT57Y29u''@;'; put 'put ''c3QgZD1hLmluZGV4T2YoIjoiKTtpZihkPjApe2NvbnN0IGg9YS5zbGljZSgwLGQpLGY9aC50b0xvd2VyQ2FzZSgpLHY9YS5zbGljZShkKzEpLnRyaW0oKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoaCxmKSx0aGlzLmhlYWRlcnMuaGFzKGYpP3RoaXMuaGVhZGVycy5nZXQoZikucHVz''@;'; put 'put ''aCh2KTp0aGlzLmhlYWRlcnMuc2V0KGYsW3ZdKX19KX06dHlwZW9mIEhlYWRlcnM8InUiJiZsIGluc3RhbmNlb2YgSGVhZGVycz8odGhpcy5oZWFkZXJzPW5ldyBNYXAsbC5mb3JFYWNoKChhLGQpPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGQsYSl9KSk6dGhpcy5sYXp5SW5pdD0oKT0+e3Ro''@;'; put 'put ''aXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5lbnRyaWVzKGwpLmZvckVhY2goKFthLGRdKT0+e3RoaXMuc2V0SGVhZGVyRW50cmllcyhhLGQpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyhsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyhsLnRvTG93ZXJDYXNlKCkp''@;'; put 'put ''fWdldChsKXt0aGlzLmluaXQoKTtjb25zdCBhPXRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gYSYmYS5sZW5ndGg+MD9hWzBdOm51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX1nZXRB''@;'; put 'put ''bGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKXx8bnVsbH1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6ImEifSl9c2V0KGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9w''@;'; put 'put ''OiJzIn0pfWRlbGV0ZShsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiZCJ9KX1tYXliZVNldE5vcm1hbGl6ZWROYW1lKGwsYSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGEpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsKX1pbml0KCl7dGhpcy5sYXp5''@;'; put 'put ''SW5pdCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiBFMj90aGlzLmNvcHlGcm9tKHRoaXMubGF6eUluaXQpOnRoaXMubGF6eUluaXQoKSx0aGlzLmxhenlJbml0PW51bGwsdGhpcy5sYXp5VXBkYXRlJiYodGhpcy5sYXp5VXBkYXRlLmZvckVhY2gobD0+dGhpcy5hcHBseVVwZGF0ZShsKSks''@;'; put 'put ''dGhpcy5sYXp5VXBkYXRlPW51bGwpKX1jb3B5RnJvbShsKXtsLmluaXQoKSxBcnJheS5mcm9tKGwuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goYT0+e3RoaXMuaGVhZGVycy5zZXQoYSxsLmhlYWRlcnMuZ2V0KGEpKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsLm5vcm1hbGl6ZWROYW1l''@;'; put 'put ''cy5nZXQoYSkpfSl9Y2xvbmUobCl7Y29uc3QgYT1uZXcgRTI7cmV0dXJuIGEubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIEUyP3RoaXMubGF6eUluaXQ6dGhpcyxhLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbbF0pLGF9''@;'; put 'put ''YXBwbHlVcGRhdGUobCl7Y29uc3QgYT1sLm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBkPWwudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLDA9PT1kLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1l''@;'; put 'put ''KGwubmFtZSxhKTtjb25zdCBoPSgiYSI9PT1sLm9wP3RoaXMuaGVhZGVycy5nZXQoYSk6dm9pZCAwKXx8W107aC5wdXNoKC4uLmQpLHRoaXMuaGVhZGVycy5zZXQoYSxoKTticmVhaztjYXNlImQiOmNvbnN0IGY9bC52YWx1ZTtpZihmKXtsZXQgdj10aGlzLmhlYWRlcnMuZ2V0KGEpO2lmKCF2''@;'; put 'put ''KXJldHVybjt2PXYuZmlsdGVyKE09Pi0xPT09Zi5pbmRleE9mKE0pKSwwPT09di5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpKTp0aGlzLmhlYWRlcnMuc2V0KGEsdil9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGEpLHRoaXMu''@;'; put 'put ''bm9ybWFsaXplZE5hbWVzLmRlbGV0ZShhKX19c2V0SGVhZGVyRW50cmllcyhsLGEpe2NvbnN0IGQ9KEFycmF5LmlzQXJyYXkoYSk/YTpbYV0pLm1hcChmPT5mLnRvU3RyaW5nKCkpLGg9bC50b0xvd2VyQ2FzZSgpO3RoaXMuaGVhZGVycy5zZXQoaCxkKSx0aGlzLm1heWJlU2V0Tm9ybWFsaXpl''@;'; put 'put ''ZE5hbWUobCxoKX1mb3JFYWNoKGwpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGE9PmwodGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGEpLHRoaXMuaGVhZGVycy5nZXQoYSkpKX19Y2xhc3MgTFRle2VuY29kZUtleShsKXtyZXR1''@;'; put 'put ''cm4gdmNlKGwpfWVuY29kZVZhbHVlKGwpe3JldHVybiB2Y2UobCl9ZGVjb2RlS2V5KGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9ZGVjb2RlVmFsdWUobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX19Y29uc3QgUFRlPS8lKFxkW2EtZjAtOV0pL2dpLEZUZT17NDA6IkAi''@;'; put 'put ''LCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24gdmNlKGMpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYykucmVwbGFjZShQVGUsKGwsYSk9PkZUZVthXT8/bCl9ZnVuY3Rpb24gWFIoYyl7cmV0dXJuYCR7Y31g''@;'; put 'put ''fWNsYXNzIHNte2NvbnN0cnVjdG9yKGw9e30pe2lmKHRoaXMudXBkYXRlcz1udWxsLHRoaXMuY2xvbmVGcm9tPW51bGwsdGhpcy5lbmNvZGVyPWwuZW5jb2Rlcnx8bmV3IExUZSxsLmZyb21TdHJpbmcpe2lmKGwuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJv''@;'; put 'put ''dGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD1mdW5jdGlvbiBPVGUoYyxsKXtjb25zdCBhPW5ldyBNYXA7cmV0dXJuIGMubGVuZ3RoPjAmJmMucmVwbGFjZSgvXlw/LywiIikuc3BsaXQoIiYiKS5mb3JFYWNoKGg9Pntjb25zdCBmPWguaW5kZXhPZigiPSIpLFt2LE1d''@;'; put 'put ''PS0xPT1mP1tsLmRlY29kZUtleShoKSwiIl06W2wuZGVjb2RlS2V5KGguc2xpY2UoMCxmKSksbC5kZWNvZGVWYWx1ZShoLnNsaWNlKGYrMSkpXSxEPWEuZ2V0KHYpfHxbXTtELnB1c2goTSksYS5zZXQodixEKX0pLGF9KGwuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgbC5mcm9tT2Jq''@;'; put 'put ''ZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKGwuZnJvbU9iamVjdCkuZm9yRWFjaChhPT57Y29uc3QgZD1sLmZyb21PYmplY3RbYV0saD1BcnJheS5pc0FycmF5KGQpP2QubWFwKFhSKTpbWFIoZCldO3RoaXMubWFwLnNldChhLGgpfSkpOnRoaXMubWFwPW51bGx9aGFzKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXMobCl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5tYXAuZ2V0KGwpO3JldHVybiBhP2FbMF06bnVsbH1nZXRBbGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldChsKXx8bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJhIn0pfWFwcGVuZEFsbChsKXtjb25zdCBhPVtdO3JldHVybiBPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPWxbZF07QXJy''@;'; put 'put ''YXkuaXNBcnJheShoKT9oLmZvckVhY2goZj0+e2EucHVzaCh7cGFyYW06ZCx2YWx1ZTpmLG9wOiJhIn0pfSk6YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmgsb3A6ImEifSl9KSx0aGlzLmNsb25lKGEpfXNldChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6InMifSl9''@;'; put 'put ''ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAobD0+e2NvbnN0IGE9dGhpcy5lbmNvZGVyLmVuY29kZUtleShsKTtyZXR1cm4gdGhpcy5tYXAuZ2V0KGwpLm1h''@;'; put 'put ''cChkPT5hKyI9Iit0aGlzLmVuY29kZXIuZW5jb2RlVmFsdWUoZCkpLmpvaW4oIiYiKX0pLmZpbHRlcihsPT4iIiE9PWwpLmpvaW4oIiYiKX1jbG9uZShsKXtjb25zdCBhPW5ldyBzbSh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gYS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRo''@;'; put 'put ''aXMsYS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQobCksYX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGw9''@;'; put 'put ''PnRoaXMubWFwLnNldChsLHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQobCkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChsPT57c3dpdGNoKGwub3Ape2Nhc2UiYSI6Y2FzZSJzIjpjb25zdCBhPSgiYSI9PT1sLm9wP3RoaXMubWFwLmdldChsLnBhcmFtKTp2b2lkIDApfHxbXTthLnB1c2goWFIobC52''@;'; put 'put ''YWx1ZSkpLHRoaXMubWFwLnNldChsLnBhcmFtLGEpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09bC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKGwucGFyYW0pO2JyZWFrfXtsZXQgZD10aGlzLm1hcC5nZXQobC5wYXJhbSl8fFtdO2NvbnN0IGg9ZC5pbmRleE9mKFhSKGwudmFsdWUpKTstMSE9''@;'; put 'put ''PWgmJmQuc3BsaWNlKGgsMSksZC5sZW5ndGg+MD90aGlzLm1hcC5zZXQobC5wYXJhbSxkKTp0aGlzLm1hcC5kZWxldGUobC5wYXJhbSl9fX0pLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19Y2xhc3MgSFRle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1zZXQobCxh''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5tYXAuc2V0KGwsYSksdGhpc31nZXQobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKXx8dGhpcy5tYXAuc2V0KGwsbC5kZWZhdWx0VmFsdWUoKSksdGhpcy5tYXAuZ2V0KGwpfWRlbGV0ZShsKXtyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGwpLHRoaXN9aGFzKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLm1hcC5oYXMobCl9a2V5cygpe3JldHVybiB0aGlzLm1hcC5rZXlzKCl9fWZ1bmN0aW9uIGJjZShjKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmYyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIHljZShjKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZjIGlu''@;'; put 'put ''c3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBfY2UoYyl7cmV0dXJuIHR5cGVvZiBGb3JtRGF0YTwidSImJmMgaW5zdGFuY2VvZiBGb3JtRGF0YX1jbGFzcyByeHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtsZXQgZjtpZih0aGlzLnVybD1hLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9''@;'; put 'put ''ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPWwudG9VcHBlckNhc2UoKSxmdW5jdGlvbiBOVGUoYyl7c3dpdGNoKGMpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAi''@;'; put 'put ''OnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fGg/KHRoaXMuYm9keT12b2lkIDAhPT1kP2Q6bnVsbCxmPWgpOmY9ZCxmJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWYucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFmLndpdGhDcmVkZW50aWFs''@;'; put 'put ''cyxmLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWYucmVzcG9uc2VUeXBlKSxmLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9Zi5oZWFkZXJzKSxmLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9Zi5jb250ZXh0KSxmLnBhcmFtcyYmKHRoaXMucGFyYW1zPWYucGFyYW1zKSx0aGlzLnRy''@;'; put 'put ''YW5zZmVyQ2FjaGU9Zi50cmFuc2ZlckNhY2hlKSx0aGlzLmhlYWRlcnM/Pz1uZXcgRTIsdGhpcy5jb250ZXh0Pz89bmV3IEhUZSx0aGlzLnBhcmFtcyl7Y29uc3Qgdj10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT12Lmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9YTtlbHNle2NvbnN0''@;'; put 'put ''IE09YS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWErKC0xPT09TT8iPyI6TTxhLmxlbmd0aC0xPyImIjoiIikrdn19ZWxzZSB0aGlzLnBhcmFtcz1uZXcgc20sdGhpcy51cmxXaXRoUGFyYW1zPWF9c2VyaWFsaXplQm9keSgpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHl8fGJjZSh0aGlzLmJvZHkpfHx5Y2UodGhpcy5ib2R5KXx8X2NlKHRoaXMuYm9keSl8fGZ1bmN0aW9uIFZUZShjKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9k''@;'; put 'put ''eSk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIHNtP3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkp''@;'; put 'put ''OnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fF9jZSh0aGlzLmJvZHkpP251bGw6eWNlKHRoaXMuYm9keSk/dGhpcy5ib2R5LnR5cGV8fG51bGw6YmNlKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2Ygc20/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09''@;'; put 'put ''dHlwZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1jbG9uZShsPXt9KXtjb25zdCBhPWwubWV0aG9kfHx0aGlzLm1ldGhvZCxkPWwudXJsfHx0aGlzLnVybCxoPWwucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxmPWwudHJhbnNmZXJDYWNoZT8/dGhpcy50cmFu''@;'; put 'put ''c2ZlckNhY2hlLHY9dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksTT1sLndpdGhDcmVkZW50aWFscz8/dGhpcy53aXRoQ3JlZGVudGlhbHMsRD1sLnJlcG9ydFByb2dyZXNzPz90aGlzLnJlcG9ydFByb2dyZXNzO2xldCBaPWwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHJlPWwucGFy''@;'; put 'put ''YW1zfHx0aGlzLnBhcmFtcztjb25zdCBjZT1sLmNvbnRleHQ/P3RoaXMuY29udGV4dDtyZXR1cm4gdm9pZCAwIT09bC5zZXRIZWFkZXJzJiYoWj1PYmplY3Qua2V5cyhsLnNldEhlYWRlcnMpLnJlZHVjZSgoYmUsRWUpPT5iZS5zZXQoRWUsbC5zZXRIZWFkZXJzW0VlXSksWikpLGwuc2V0UGFy''@;'; put 'put ''YW1zJiYocmU9T2JqZWN0LmtleXMobC5zZXRQYXJhbXMpLnJlZHVjZSgoYmUsRWUpPT5iZS5zZXQoRWUsbC5zZXRQYXJhbXNbRWVdKSxyZSkpLG5ldyByeChhLGQsdix7cGFyYW1zOnJlLGhlYWRlcnM6Wixjb250ZXh0OmNlLHJlcG9ydFByb2dyZXNzOkQscmVzcG9uc2VUeXBlOmgsd2l0aENy''@;'; put 'put ''ZWRlbnRpYWxzOk0sdHJhbnNmZXJDYWNoZTpmfSl9fXZhciBsbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNlbnQ9MF09IlNlbnQiLGNbYy5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLGNbYy5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLGNbYy5Eb3dubG9h''@;'; put 'put ''ZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2U9NF09IlJlc3BvbnNlIixjW2MuVXNlcj01XT0iVXNlciIsY30obG18fHt9KTtjbGFzcyB3V3tjb25zdHJ1Y3RvcihsLGE9aXguT2ssZD0iT0siKXt0aGlzLmhlYWRlcnM9bC5oZWFkZXJzfHxuZXcgRTIsdGhpcy5z''@;'; put 'put ''dGF0dXM9dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6YSx0aGlzLnN0YXR1c1RleHQ9bC5zdGF0dXNUZXh0fHxkLHRoaXMudXJsPWwudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX1jbGFzcyBKUiBleHRlbmRzIHdXe2NvbnN0cnVjdG9yKGw9''@;'; put 'put ''e30pe3N1cGVyKGwpLHRoaXMudHlwZT1sbS5SZXNwb25zZUhlYWRlcn1jbG9uZShsPXt9KXtyZXR1cm4gbmV3IEpSKHtoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Omwuc3RhdHVz''@;'; put 'put ''VGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBlNyBleHRlbmRzIHdXe2NvbnN0cnVjdG9yKGw9e30pe3N1cGVyKGwpLHRoaXMudHlwZT1sbS5SZXNwb25zZSx0aGlzLmJvZHk9dm9pZCAwIT09bC5ib2R5P2wuYm9keTpudWxsfWNsb25l''@;'; put 'put ''KGw9e30pe3JldHVybiBuZXcgZTcoe2JvZHk6dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksaGVhZGVyczpsLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDpsLnN0YXR1c1RleHR8fHRo''@;'; put 'put ''aXMuc3RhdHVzVGV4dCx1cmw6bC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19Y2xhc3MgbXkgZXh0ZW5kcyB3V3tjb25zdHJ1Y3RvcihsKXtzdXBlcihsLDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlz''@;'; put 'put ''LnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifTogJHtsLnN0YXR1c30gJHtsLnN0YXR1''@;'; put 'put ''c1RleHR9YCx0aGlzLmVycm9yPWwuZXJyb3J8fG51bGx9fXZhciBpeD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkNvbnRpbnVlPTEwMF09IkNvbnRpbnVlIixjW2MuU3dpdGNoaW5nUHJvdG9jb2xzPTEwMV09IlN3aXRjaGluZ1Byb3RvY29scyIsY1tjLlByb2Nlc3Npbmc9MTAyXT0iUHJvY2Vz''@;'; put 'put ''c2luZyIsY1tjLkVhcmx5SGludHM9MTAzXT0iRWFybHlIaW50cyIsY1tjLk9rPTIwMF09Ik9rIixjW2MuQ3JlYXRlZD0yMDFdPSJDcmVhdGVkIixjW2MuQWNjZXB0ZWQ9MjAyXT0iQWNjZXB0ZWQiLGNbYy5Ob25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb249MjAzXT0iTm9uQXV0aG9yaXRhdGl2''@;'; put 'put ''ZUluZm9ybWF0aW9uIixjW2MuTm9Db250ZW50PTIwNF09Ik5vQ29udGVudCIsY1tjLlJlc2V0Q29udGVudD0yMDVdPSJSZXNldENvbnRlbnQiLGNbYy5QYXJ0aWFsQ29udGVudD0yMDZdPSJQYXJ0aWFsQ29udGVudCIsY1tjLk11bHRpU3RhdHVzPTIwN109Ik11bHRpU3RhdHVzIixjW2MuQWxy''@;'; put 'put ''ZWFkeVJlcG9ydGVkPTIwOF09IkFscmVhZHlSZXBvcnRlZCIsY1tjLkltVXNlZD0yMjZdPSJJbVVzZWQiLGNbYy5NdWx0aXBsZUNob2ljZXM9MzAwXT0iTXVsdGlwbGVDaG9pY2VzIixjW2MuTW92ZWRQZXJtYW5lbnRseT0zMDFdPSJNb3ZlZFBlcm1hbmVudGx5IixjW2MuRm91bmQ9MzAyXT0i''@;'; put 'put ''Rm91bmQiLGNbYy5TZWVPdGhlcj0zMDNdPSJTZWVPdGhlciIsY1tjLk5vdE1vZGlmaWVkPTMwNF09Ik5vdE1vZGlmaWVkIixjW2MuVXNlUHJveHk9MzA1XT0iVXNlUHJveHkiLGNbYy5VbnVzZWQ9MzA2XT0iVW51c2VkIixjW2MuVGVtcG9yYXJ5UmVkaXJlY3Q9MzA3XT0iVGVtcG9yYXJ5UmVk''@;'; put 'put ''aXJlY3QiLGNbYy5QZXJtYW5lbnRSZWRpcmVjdD0zMDhdPSJQZXJtYW5lbnRSZWRpcmVjdCIsY1tjLkJhZFJlcXVlc3Q9NDAwXT0iQmFkUmVxdWVzdCIsY1tjLlVuYXV0aG9yaXplZD00MDFdPSJVbmF1dGhvcml6ZWQiLGNbYy5QYXltZW50UmVxdWlyZWQ9NDAyXT0iUGF5bWVudFJlcXVpcmVk''@;'; put 'put ''IixjW2MuRm9yYmlkZGVuPTQwM109IkZvcmJpZGRlbiIsY1tjLk5vdEZvdW5kPTQwNF09Ik5vdEZvdW5kIixjW2MuTWV0aG9kTm90QWxsb3dlZD00MDVdPSJNZXRob2ROb3RBbGxvd2VkIixjW2MuTm90QWNjZXB0YWJsZT00MDZdPSJOb3RBY2NlcHRhYmxlIixjW2MuUHJveHlBdXRoZW50aWNh''@;'; put 'put ''dGlvblJlcXVpcmVkPTQwN109IlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsY1tjLlJlcXVlc3RUaW1lb3V0PTQwOF09IlJlcXVlc3RUaW1lb3V0IixjW2MuQ29uZmxpY3Q9NDA5XT0iQ29uZmxpY3QiLGNbYy5Hb25lPTQxMF09IkdvbmUiLGNbYy5MZW5ndGhSZXF1aXJlZD00MTFdPSJM''@;'; put 'put ''ZW5ndGhSZXF1aXJlZCIsY1tjLlByZWNvbmRpdGlvbkZhaWxlZD00MTJdPSJQcmVjb25kaXRpb25GYWlsZWQiLGNbYy5QYXlsb2FkVG9vTGFyZ2U9NDEzXT0iUGF5bG9hZFRvb0xhcmdlIixjW2MuVXJpVG9vTG9uZz00MTRdPSJVcmlUb29Mb25nIixjW2MuVW5zdXBwb3J0ZWRNZWRpYVR5cGU9''@;'; put 'put ''NDE1XT0iVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLGNbYy5SYW5nZU5vdFNhdGlzZmlhYmxlPTQxNl09IlJhbmdlTm90U2F0aXNmaWFibGUiLGNbYy5FeHBlY3RhdGlvbkZhaWxlZD00MTddPSJFeHBlY3RhdGlvbkZhaWxlZCIsY1tjLkltQVRlYXBvdD00MThdPSJJbUFUZWFwb3QiLGNbYy5NaXNk''@;'; put 'put ''aXJlY3RlZFJlcXVlc3Q9NDIxXT0iTWlzZGlyZWN0ZWRSZXF1ZXN0IixjW2MuVW5wcm9jZXNzYWJsZUVudGl0eT00MjJdPSJVbnByb2Nlc3NhYmxlRW50aXR5IixjW2MuTG9ja2VkPTQyM109IkxvY2tlZCIsY1tjLkZhaWxlZERlcGVuZGVuY3k9NDI0XT0iRmFpbGVkRGVwZW5kZW5jeSIsY1tj''@;'; put 'put ''LlRvb0Vhcmx5PTQyNV09IlRvb0Vhcmx5IixjW2MuVXBncmFkZVJlcXVpcmVkPTQyNl09IlVwZ3JhZGVSZXF1aXJlZCIsY1tjLlByZWNvbmRpdGlvblJlcXVpcmVkPTQyOF09IlByZWNvbmRpdGlvblJlcXVpcmVkIixjW2MuVG9vTWFueVJlcXVlc3RzPTQyOV09IlRvb01hbnlSZXF1ZXN0cyIs''@;'; put 'put ''Y1tjLlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZT00MzFdPSJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLGNbYy5VbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucz00NTFdPSJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsY1tjLkludGVybmFsU2VydmVyRXJyb3I9NTAwXT0iSW50''@;'; put 'put ''ZXJuYWxTZXJ2ZXJFcnJvciIsY1tjLk5vdEltcGxlbWVudGVkPTUwMV09Ik5vdEltcGxlbWVudGVkIixjW2MuQmFkR2F0ZXdheT01MDJdPSJCYWRHYXRld2F5IixjW2MuU2VydmljZVVuYXZhaWxhYmxlPTUwM109IlNlcnZpY2VVbmF2YWlsYWJsZSIsY1tjLkdhdGV3YXlUaW1lb3V0PTUwNF09''@;'; put 'put ''IkdhdGV3YXlUaW1lb3V0IixjW2MuSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ9NTA1XT0iSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLGNbYy5WYXJpYW50QWxzb05lZ290aWF0ZXM9NTA2XT0iVmFyaWFudEFsc29OZWdvdGlhdGVzIixjW2MuSW5zdWZmaWNpZW50U3RvcmFnZT01MDddPSJJbnN1''@;'; put 'put ''ZmZpY2llbnRTdG9yYWdlIixjW2MuTG9vcERldGVjdGVkPTUwOF09Ikxvb3BEZXRlY3RlZCIsY1tjLk5vdEV4dGVuZGVkPTUxMF09Ik5vdEV4dGVuZGVkIixjW2MuTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ9NTExXT0iTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLGN9KGl4''@;'; put 'put ''fHx7fSk7ZnVuY3Rpb24gQ1coYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRlcnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9ic2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVzczpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlw''@;'; put 'put ''ZSx3aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHMsdHJhbnNmZXJDYWNoZTpjLnRyYW5zZmVyQ2FjaGV9fWxldCBTVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGFuZGxlcj1hfXJlcXVlc3QoYSxkLGg9e30pe2xldCBmO2lmKGEgaW5zdGFuY2VvZiByeClmPWE7''@;'; put 'put ''ZWxzZXtsZXQgRCxaO0Q9aC5oZWFkZXJzIGluc3RhbmNlb2YgRTI/aC5oZWFkZXJzOm5ldyBFMihoLmhlYWRlcnMpLGgucGFyYW1zJiYoWj1oLnBhcmFtcyBpbnN0YW5jZW9mIHNtP2gucGFyYW1zOm5ldyBzbSh7ZnJvbU9iamVjdDpoLnBhcmFtc30pKSxmPW5ldyByeChhLGQsdm9pZCAwIT09''@;'; put 'put ''aC5ib2R5P2guYm9keTpudWxsLHtoZWFkZXJzOkQsY29udGV4dDpoLmNvbnRleHQscGFyYW1zOloscmVwb3J0UHJvZ3Jlc3M6aC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aC5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aC53aXRoQ3JlZGVudGlhbHMsdHJhbnNm''@;'; put 'put ''ZXJDYWNoZTpoLnRyYW5zZmVyQ2FjaGV9KX1jb25zdCB2PWZvKGYpLnBpcGUodHkoRD0+dGhpcy5oYW5kbGVyLmhhbmRsZShEKSkpO2lmKGEgaW5zdGFuY2VvZiByeHx8ImV2ZW50cyI9PT1oLm9ic2VydmUpcmV0dXJuIHY7Y29uc3QgTT12LnBpcGUoJGwoRD0+RCBpbnN0YW5jZW9mIGU3KSk7''@;'; put 'put ''c3dpdGNoKGgub2JzZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChmLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIE0ucGlwZShMcihEPT57aWYobnVsbCE9PUQuYm9keSYmIShELmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIEQuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBNLnBpcGUoTHIoRD0+e2lmKG51bGwhPT1ELmJvZHkmJiEoRC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBC''@;'; put 'put ''bG9iLiIpO3JldHVybiBELmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gTS5waXBlKExyKEQ9PntpZihudWxsIT09RC5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIEQuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gRC5ib2R5fSkpO2RlZmF1''@;'; put 'put ''bHQ6cmV0dXJuIE0ucGlwZShMcihEPT5ELmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gTTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtoLm9ic2VydmV9fWApfX1kZWxldGUoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1''@;'; put 'put ''ZXN0KCJERUxFVEUiLGEsZCl9Z2V0KGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixhLGQpfWhlYWQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixhLGQpfWpzb25wKGEsZCl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGEse3BhcmFtczoobmV3IHNtKS5h''@;'; put 'put ''cHBlbmQoZCwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGEsZCl9cGF0Y2goYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixhLENXKGgs''@;'; put 'put ''ZCkpfXBvc3QoYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGEsQ1coaCxkKSl9cHV0KGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGEsQ1coaCxkKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoS1Ip''@;'; put 'put ''KX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBDY2UoYyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiBaVGUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxk''@;'; put 'put ''KX0pfWNvbnN0IFlUZT1uZXcgU3QoIiIpLGF4PW5ldyBTdCgiIiksU2NlPW5ldyBTdCgiIiksTWNlPW5ldyBTdCgiIik7ZnVuY3Rpb24gR1RlKCl7bGV0IGM9bnVsbDtyZXR1cm4obCxhKT0+e251bGw9PT1jJiYoYz0oZmkoWVRlLHtvcHRpb25hbDohMH0pPz9bXSkucmVkdWNlUmlnaHQoWlRl''@;'; put 'put ''LENjZSkpO2NvbnN0IGQ9ZmkoUGYpLGg9ZC5hZGQoKTtyZXR1cm4gYyhsLGEpLnBpcGUoVU0oKCk9PmQucmVtb3ZlKGgpKSl9fWxldCB4Y2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEtSe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWQsdGhp''@;'; put 'put ''cy5jaGFpbj1udWxsLHRoaXMucGVuZGluZ1Rhc2tzPWZpKFBmKTtjb25zdCBoPWZpKE1jZSx7b3B0aW9uYWw6ITB9KTt0aGlzLmJhY2tlbmQ9aD8/YX1oYW5kbGUoYSl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IGg9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdl''@;'; put 'put ''dChheCksLi4udGhpcy5pbmplY3Rvci5nZXQoU2NlLFtdKV0pKTt0aGlzLmNoYWluPWgucmVkdWNlUmlnaHQoKGYsdik9PmZ1bmN0aW9uIFdUZShjLGwsYSl7cmV0dXJuKGQsaCk9PnEwKGEsKCk9PmwoZCxmPT5jKGYsaCkpKX0oZix2LHRoaXMuaW5qZWN0b3IpLENjZSl9Y29uc3QgZD10aGlz''@;'; put 'put ''LnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gdGhpcy5jaGFpbihhLGg9PnRoaXMuYmFja2VuZC5oYW5kbGUoaCkpLnBpcGUoVU0oKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShkKSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHFS''@;'; put 'put ''KSx4cihoYykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEpUZT0vXlwpXF1cfScsP1xuLztsZXQgVGNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy54aHJGYWN0b3J5PWF9aGFu''@;'; put 'put ''ZGxlKGEpe2lmKCJKU09OUCI9PT1hLm1ldGhvZCl0aHJvdyBuZXcgUW4oLTI4MDAsITEpO2NvbnN0IGQ9dGhpcy54aHJGYWN0b3J5O3JldHVybihkLlx1MDI3NWxvYWRJbXBsP1l1KGQuXHUwMjc1bG9hZEltcGwoKSk6Zm8obnVsbCkpLnBpcGUoVjEoKCk9Pm5ldyBYdChmPT57Y29uc3Qgdj1k''@;'; put 'put ''LmJ1aWxkKCk7aWYodi5vcGVuKGEubWV0aG9kLGEudXJsV2l0aFBhcmFtcyksYS53aXRoQ3JlZGVudGlhbHMmJih2LndpdGhDcmVkZW50aWFscz0hMCksYS5oZWFkZXJzLmZvckVhY2goKHFlLHJ0KT0+di5zZXRSZXF1ZXN0SGVhZGVyKHFlLHJ0LmpvaW4oIiwiKSkpLGEuaGVhZGVycy5oYXMo''@;'; put 'put ''IkFjY2VwdCIpfHx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCFhLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7Y29uc3QgcWU9YS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1xZSYmdi5zZXRSZXF1''@;'; put 'put ''ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHFlKX1pZihhLnJlc3BvbnNlVHlwZSl7Y29uc3QgcWU9YS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTt2LnJlc3BvbnNlVHlwZT0ianNvbiIhPT1xZT9xZToidGV4dCJ9Y29uc3QgTT1hLnNlcmlhbGl6ZUJvZHkoKTtsZXQgRD1udWxsO2NvbnN0''@;'; put 'put ''IFo9KCk9PntpZihudWxsIT09RClyZXR1cm4gRDtjb25zdCBxZT12LnN0YXR1c1RleHR8fCJPSyIscnQ9bmV3IEUyKHYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHB0PWZ1bmN0aW9uIFFUZShjKXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gYyYmYy5yZXNwb25zZVVSTD9jLnJlc3BvbnNlVVJM''@;'; put 'put ''Oi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP2MuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfSh2KXx8YS51cmw7cmV0dXJuIEQ9bmV3IEpSKHtoZWFkZXJzOnJ0LHN0YXR1czp2LnN0YXR1cyxzdGF0dXNUZXh0OnFlLHVy''@;'; put 'put ''bDpwdH0pLER9LHJlPSgpPT57bGV0e2hlYWRlcnM6cWUsc3RhdHVzOnJ0LHN0YXR1c1RleHQ6cHQsdXJsOmR0fT1aKCksSnQ9bnVsbDtydCE9PWl4Lk5vQ29udGVudCYmKEp0PXR5cGVvZiB2LnJlc3BvbnNlPiJ1Ij92LnJlc3BvbnNlVGV4dDp2LnJlc3BvbnNlKSwwPT09cnQmJihydD1KdD9p''@;'; put 'put ''eC5PazowKTtsZXQgdm49cnQ+PTIwMCYmcnQ8MzAwO2lmKCJqc29uIj09PWEucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIEp0KXtjb25zdCBDbj1KdDtKdD1KdC5yZXBsYWNlKEpUZSwiIik7dHJ5e0p0PSIiIT09SnQ/SlNPTi5wYXJzZShKdCk6bnVsbH1jYXRjaCh0bil7SnQ9Q24s''@;'; put 'put ''dm4mJih2bj0hMSxKdD17ZXJyb3I6dG4sdGV4dDpKdH0pfX12bj8oZi5uZXh0KG5ldyBlNyh7Ym9keTpKdCxoZWFkZXJzOnFlLHN0YXR1czpydCxzdGF0dXNUZXh0OnB0LHVybDpkdHx8dm9pZCAwfSkpLGYuY29tcGxldGUoKSk6Zi5lcnJvcihuZXcgbXkoe2Vycm9yOkp0LGhlYWRlcnM6cWUs''@;'; put 'put ''c3RhdHVzOnJ0LHN0YXR1c1RleHQ6cHQsdXJsOmR0fHx2b2lkIDB9KSl9LGNlPXFlPT57Y29uc3R7dXJsOnJ0fT1aKCkscHQ9bmV3IG15KHtlcnJvcjpxZSxzdGF0dXM6di5zdGF0dXN8fDAsc3RhdHVzVGV4dDp2LnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6cnR8fHZvaWQgMH0p''@;'; put 'put ''O2YuZXJyb3IocHQpfTtsZXQgYmU9ITE7Y29uc3QgRWU9cWU9PntiZXx8KGYubmV4dChaKCkpLGJlPSEwKTtsZXQgcnQ9e3R5cGU6bG0uRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6cWUubG9hZGVkfTtxZS5sZW5ndGhDb21wdXRhYmxlJiYocnQudG90YWw9cWUudG90YWwpLCJ0ZXh0Ij09PWEu''@;'; put 'put ''cmVzcG9uc2VUeXBlJiZ2LnJlc3BvbnNlVGV4dCYmKHJ0LnBhcnRpYWxUZXh0PXYucmVzcG9uc2VUZXh0KSxmLm5leHQocnQpfSxCZT1xZT0+e2xldCBydD17dHlwZTpsbS5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6cWUubG9hZGVkfTtxZS5sZW5ndGhDb21wdXRhYmxlJiYocnQudG90YWw9cWUu''@;'; put 'put ''dG90YWwpLGYubmV4dChydCl9O3JldHVybiB2LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHJlKSx2LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjZSksdi5hZGRFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjZSksdi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsY2UpLGEucmVwb3J0UHJvZ3Jl''@;'; put 'put ''c3MmJih2LmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixFZSksbnVsbCE9PU0mJnYudXBsb2FkJiZ2LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsQmUpKSx2LnNlbmQoTSksZi5uZXh0KHt0eXBlOmxtLlNlbnR9KSwoKT0+e3YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJy''@;'; put 'put ''b3IiLGNlKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjZSksdi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixyZSksdi5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjZSksYS5yZXBvcnRQcm9ncmVzcyYmKHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEVl''@;'; put 'put ''KSxudWxsIT09TSYmdi51cGxvYWQmJnYudXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixCZSkpLHYucmVhZHlTdGF0ZSE9PXYuRE9ORSYmdi5hYm9ydCgpfX0pKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIob29lKSl9''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgRVc9bmV3IFN0KCIiKSxBY2U9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWFNSRi1UT0tFTiJ9KSxrY2U9bmV3IFN0KCIi''@;'; put 'put ''LHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWC1YU1JGLVRPS0VOIn0pO2NsYXNzIERjZXt9bGV0IG5BZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmRvYz1hLHRoaXMucGxhdGZvcm09ZCx0aGlzLmNvb2tpZU5hbWU9aCx0aGlzLmxhc3RDb29raWVTdHJp''@;'; put 'put ''bmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtjb25zdCBhPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGEhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBh''@;'; put 'put ''cnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1xYWUoYSx0aGlzLmNvb2tpZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz1hKSx0aGlzLmxhc3RUb2tlbn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoaW8pLHhyKEFjZSkpfX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHJBZShjLGwpe2NvbnN0IGE9Yy51cmwudG9Mb3dlckNhc2UoKTtpZighZmkoRVcpfHwiR0VUIj09PWMubWV0aG9kfHwiSEVBRCI9PT1jLm1ldGhvZHx8''@;'; put 'put ''YS5zdGFydHNXaXRoKCJodHRwOi8vIil8fGEuc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSlyZXR1cm4gbChjKTtjb25zdCBkPWZpKERjZSkuZ2V0VG9rZW4oKSxoPWZpKGtjZSk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRlcnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5z''@;'; put 'put ''ZXQoaCxkKX0pKSxsKGMpfXZhciBjbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMiLGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNy''@;'; put 'put ''ZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRj''@;'; put 'put ''aCIsY30oY218fHt9KTtmdW5jdGlvbiB0NyhjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIGlBZSguLi5jKXtjb25zdCBsPVtTVyxUY2UseGNlLHtwcm92aWRlOktSLHVzZUV4aXN0aW5nOnhjZX0se3Byb3ZpZGU6cVIsdXNlRXhpc3Rpbmc6VGNl''@;'; put 'put ''fSx7cHJvdmlkZTpheCx1c2VWYWx1ZTpyQWUsbXVsdGk6ITB9LHtwcm92aWRlOkVXLHVzZVZhbHVlOiEwfSx7cHJvdmlkZTpEY2UsdXNlQ2xhc3M6bkFlfV07Zm9yKGNvbnN0IGEgb2YgYylsLnB1c2goLi4uYS5cdTAyNzVwcm92aWRlcnMpO3JldHVybiBmdW5jdGlvbiB5ZihjKXtyZXR1cm57''@;'; put 'put ''XHUwMjc1cHJvdmlkZXJzOmN9fShsKX1jb25zdCBJY2U9bmV3IFN0KCIiKTtsZXQgb0FlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W2lBZSh0NyhjbS5MZWdhY3lJbnRlcmNlcHRvcnMsW3twcm92aWRlOkljZSx1c2VGYWN0b3J5OkdUZX0se3Byb3ZpZGU6YXgsdXNlRXhpc3Rpbmc6SWNlLG11bHRpOiEwfV0pKV19KX19cmV0dXJuIGN9KSgpLFZjZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNl''@;'; put 'put ''dHRpbmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1nZXRGaWxlRnJvbURyaXZlKGEpe3JldHVy''@;'; put 'put ''biB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9mb2xkZXI/X2ZvbGRlclBhdGg9JHth''@;'; put 'put ''fWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pnt0aGlz''@;'; put 'put ''LmdldEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25zdCBNPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChNKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2YgYS5jaGlsZHJlbil7Y29uc3QgZj10aGlz''@;'; put 'put ''LmZpbmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihTVykseHIoUTgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46''@;'; put 'put ''InJvb3QifSl9fXJldHVybiBjfSkoKSxUVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnZpeWFBcGlzPXtBbmFseXRpY3NfSW5zaWdodHM6e2luc2lnaHRzOiIvaW5zaWdodHMifSxWaXN1YWxpc2F0aW9uOnty''@;'; put 'put ''ZXBvcnRzOiIvcmVwb3J0cyIscmVwb3J0SW1hZ2VzOiIvcmVwb3J0SW1hZ2VzIixyZXBvcnRUcmFuc2Zvcm1zOiIvcmVwb3J0VHJhbnNmb3JtcyIsdmlzdWFsQW5hbHl0aWNzOiIvdmlzdWFsQW5hbHl0aWNzIn0sQ29tcHV0ZTp7am9iczoiL2pvYkRlZmluaXRpb25zIixqb2JFeGVjdXRpb246''@;'; put 'put ''Ii9qb2JFeGVjdXRpb24iLGNvbnRleHRzOiIvY29tcHV0ZS9jb250ZXh0cyJ9LERlY2lzaW9uX01hbmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21vZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBvc2l0b3J5OiIvbW9kZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2gi''@;'; put 'put ''LG1pY3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2RhdGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNpbmVzc1J1bGVzIixyZWZlcmVuY2VEYXRhOiIvcmVmZXJlbmNlRGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZp''@;'; put 'put ''bml0aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVCdWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7Zm9sZGVyczoiL2ZvbGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3Rh''@;'; put 'put ''dGlvbnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVsYXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dvbiJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xlYXJuaW5nOnttbFBpcGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0s''@;'; put 'put ''T3RoZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIifXNldHVwKCl7Y29uc3QgYT10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVyVXJsPWE/LnNlcnZlclVybHx8IiJ9Z2V0QWxsQ29sbGVjdGlvbnMoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy52aXlhQXBpc31nZXRCeVVybChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEJ5Q29sbGVjdGlvbihhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50''@;'; put 'put ''aWFsczohMH0pfWdldENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0c2Ase3dpdGhDcmVkZW50aWFsczohMH0pfWdldENvbXB1dGVDb250ZXh0QnlJZChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9''@;'; put 'put ''L2NvbXB1dGUvY29udGV4dHMvJHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEZvbGRlckJ5UGF0aChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRGb2xkZXJN''@;'; put 'put ''ZW1iZXJzKGEpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzLyR7YX0vbWVtYmVyc2Ase3dpdGhDcmVkZW50aWFsczohMH0pfWdldEFkbWluR3JvdXBzKGE9NWUzKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMv''@;'; put 'put ''Z3JvdXBzP3NvcnRCeT1uYW1lJmxpbWl0PSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRDdXJyZW50VXNlcigpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXJgLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXQoYSxk''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5odHRwLmdldChhLGQpLnBpcGUoWDgoaD0+KGNvbnNvbGUubG9nKCJ1cmwiLGEpLGNvbnNvbGUubG9nKCJlcnIuc3RhdHVzIixoLnN0YXR1cyksNDQ5PT09aC5zdGF0dXN8fDQwMT09PWguc3RhdHVzP3RoaXMuaHR0cC5nZXQoYSxkKTp6TSgoKT0+aCkpKSl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoU1cpLHhyKFE4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksQnM9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmFwcFN0b3JlU2VydmljZT1hLHRoaXMudXNlclNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzanNTZXJ2aWNlPWYsdGhpcy5zYXNWaXlhU2VydmljZT12LHRoaXMubG9nZ2VyU2VydmljZT1NLHRoaXMucm91dGVy''@;'; put 'put ''PUQsdGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyPW5ldyBLcix0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXI9bmV3IEtyLHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXI9bmV3IEtyLHRoaXMuc2FzanNBZGFwdGVyPW5ldyhtY2UoKSksdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITEs''@;'; put 'put ''dGhpcy5zaG91bGRMb2dpbj1uZXcgZWkoITEpLHRoaXMubGljZW5zZV9zaXRlX2lkPW5ldyBlaShudWxsKX1zYXNTZXJ2aWNlSW5pdCgpe2lmKHRoaXMuZGNBZGFwdGVyU2V0dGluZ3M9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnNhc2pzU2Vydmlj''@;'; put 'put ''ZS5zZXR1cCgpLHRoaXMuc2FzVml5YVNlcnZpY2Uuc2V0dXAoKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzKXtzd2l0Y2godGhpcy5zYXNqc0FkYXB0ZXI9bmV3KG1jZSgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgQjAu''@;'; put 'put ''WS5TYXNWaXlhOnRoaXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBCMC5ZLlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIEIwLlkuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVw''@;'; put 'put ''bG95KCl9IlJlZGlyZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1YnNjcmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2''@;'; put 'put ''ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2VudC4iKX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIr''@;'; put 'put ''YSxkKSxuZXcgUHJvbWlzZSgodixNKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihEPT57Y29uc3QgWj10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQocmU9PnJlLnNlcnZpY2VMaW5r''@;'; put 'put ''PT09YSk7aWYoITE9PT1ELmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxNKHthZGFwdGVyUmVzcG9uc2U6ITEsbG9nOlo/LmxvZ0ZpbGV9KSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmRC5NRl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpELk1G''@;'; put 'put ''X0dFVFVTRVJ9KSxELlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoRC5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNpdGVJZCgpLmluY2x1ZGVzKEQuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlk''@;'; put 'put ''RW1pdHRlci5lbWl0KEQuU1lTU0lURSkpKSw0MDQ9PT1ELnN0YXR1cyYmTSh7YWRhcHRlclJlc3BvbnNlOntNRVNTQUdFOkQuYm9keXx8IlNBUyBSZXNwb25kZWQgd2l0aCBlcnJvciJ9LGxvZzpaPy5sb2dGaWxlfSksdHlwZW9mIEQuc2FzanNBYm9ydDwidSIpe2NvbnN0IHJlPUQsY2U9cmUu''@;'; put 'put ''c2FzanNBYm9ydFswXS5NU0csYmU9cmUuc2FzanNBYm9ydFswXS5NQUM7aWYoY2UuaW5jbHVkZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRl''@;'; put 'put ''ci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBNKHthZGFwdGVyUmVzcG9uc2U6e2Vycm9yOmNlfSxsb2c6Wj8ubG9nRmlsZX0pO2Y/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwi''@;'; put 'put ''IiksY2Use1NZU1dBUk5JTkdURVhUOnJlLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpyZS5TWVNFUlJPUlRFWFQsTUFDOmJlfSksTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpjZX0sbG9nOlo/LmxvZ0ZpbGV9KX12KHthZGFwdGVyUmVzcG9uc2U6RCxsb2c6Wj8ubG9nRmlsZX0pfSxE''@;'; put 'put ''PT57Y29uc29sZS5lcnJvcihEKTtjb25zdCBaPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChyZT0+cmUuc2VydmljZUxpbms9PT1hKTtpZihELmVycm9yKXtsZXQgY2UscmU9RC5lcnJvci5tZXNzYWdlO0QuZXJyb3IuZGV0YWlscyYmRC5lcnJvci5kZXRhaWxzLmxv''@;'; put 'put ''ZyYmKGNlPUQuZXJyb3IuZGV0YWlscy5sb2cpLCghcmV8fHJlLnRyaW0oKS5sZW5ndGg8MSkmJihyZT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLHJlLHtMT0c6Y2V9LCJS''@;'; put 'put ''ZXF1ZXN0IGVycm9yIiksTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpyZX0sbG9nOlo/LmxvZ0ZpbGV9KX1NKHthZGFwdGVyUmVzcG9uc2U6RCxsb2c6Wj8ubG9nRmlsZX0pfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9Pnt0aGlzLnNhc2pzQWRhcHRl''@;'; put 'put ''ci51cGxvYWRGaWxlKGEsZCxoKS50aGVuKE09Pntjb25zdCBEPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChaPT4ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSI9PT1aLnNlcnZpY2VMaW5rKTtmKHthZGFwdGVyUmVzcG9uc2U6TSxsb2c6RD8ubG9nRmlsZX0pfSxN''@;'; put 'put ''PT57Y29uc3QgRD10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQoWj0+InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiPT09Wi5zZXJ2aWNlTGluayk7dih7cmVzcG9uc2U6TSxsb2c6RD8ubG9nRmlsZX0pfSl9KX1sb2dpbihhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVl''@;'; put 'put ''KGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5nZXRTZXJ2ZXJUeXBlKCk9PT1CMC5ZLlNhc2pzPyJjbGllbnRJRDEiOnZvaWQgMDtyZXR1cm4gaC5zYXNqc0FkYXB0ZXIubG9nSW4oYSxkLGYpLnRoZW4odj0+KHYuaXNMb2dnZWRJbiYmKGgudXNlclNlcnZpY2UudXNlcj17dXNlcm5hbWU6di51c2Vy''@;'; put 'put ''TmFtZX0saC5hcHBMb2NDaGVja1BlbmRpbmcmJihoLmNoZWNrVml5YURlcGxveShoLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiKSxoLmFwcExvY0NoZWNrUGVuZGluZz0hMSkpLGguc2hvdWxkTG9naW4ubmV4dCghdi5pc0xvZ2dlZEluKSx2LmlzTG9nZ2VkSW4pLHY9Pihjb25zb2xl''@;'; put 'put ''LmVycm9yKHYpLGguc2hvdWxkTG9naW4ubmV4dCghMCksITEpKS5jYXRjaCh2PT4oNDAzPT09diYmY29uc29sZS5lcnJvcigiSW52YWxpZCBob3N0IiksITEpKX0pKCl9cmVsb2FkU3RhcnR1cERhdGEoKXt0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpfWdldExpY2Vuc2VT''@;'; put 'put ''aXRlSWQoKXtyZXR1cm4gdGhpcy5saWNlbnNlX3NpdGVfaWQudmFsdWV8fFtdfXNldExpY2Vuc2VTaXRlSWQoYSl7dGhpcy5saWNlbnNlX3NpdGVfaWQubmV4dCgib2JqZWN0Ij09dHlwZW9mIGE/YTpbYV0pfWNoZWNrU2FzanNEZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlv''@;'; put 'put ''biooKXtjb25zdCBoPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShoKS5zdWJzY3JpYmUoZj0+e2YuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpPyhhLmV2ZW50U2Vydmlj''@;'; put 'put ''ZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KGEubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCksYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpKX0sZj0+e2YuZXJy''@;'; put 'put ''b3IuaW5jbHVkZXMoIlVuYXV0aG9yaXplZCIpPyhhLnNob3VsZExvZ2luLm5leHQoITApLGEuc2hvdWxkTG9naW4uc3Vic2NyaWJlKHY9PnshMT09PXYmJmxvY2F0aW9uLnJlbG9hZCgpfSkpOmYuZXJyb3IuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiYoY29uc29sZS53YXJu''@;'; put 'put ''KCJTQVNqcyBTQVMgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9KX0pKCl9c2FzanNNYWtlZGF0YUNoZWNraW5nKCl7dmFy''@;'; put 'put ''IGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7YS5jaGVja2luZ0ludGVydmFsPXNldEludGVydmFsKGVlKGZ1bmN0aW9uKigpe2Euc2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbih2''@;'; put 'put ''PT57diYmKGNsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxoKHYpKX0pLmNhdGNoKHY9PntjbGVhckludGVydmFsKGEuY2hlY2tpbmdJbnRlcnZhbCksZih2KX0pfSksMWUzKX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkp''@;'; put 'put ''fSkoKX1zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pntjb25zdCB2PWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRG''@;'; put 'put ''b2xkZXJDb250ZW50c0Zyb21Ecml2ZSh2KS5zdWJzY3JpYmUoTT0+e00uZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITApfSxNPT57TS5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxveShhKXt2''@;'; put 'put ''YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdixmPSExO2lmKHR5cGVvZiBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXI8InUiKXtjb25zdCBNPXlpZWxkIGQuYXBwTG9jQ2hlY2soYSk7Zj1NLmZvdW5kLHY9TS5lcnJvck1lc3NhZ2V9ZWxzZSBmPXlpZWxkIGQuYXBwTG9jQ2hl''@;'; put 'put ''Y2tQcmVBeGlvc2RBZGFwdGVyKGEpO2Y/ZC52aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgpLnRoZW4oTT0+e00/ZC5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTooZC5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxkLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95''@;'; put 'put ''IikpfSxNPT57Y29uc29sZS5lcnJvcigiRXJyb3Igd2hpbGUgbG9va2luZyBmb3IgdGhlIGZpbGU6IG1ha2VkYXRhLnNhcyIsTSl9KTpkLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsKHZ8fCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBh''@;'; put 'put ''cHBMb2MsIG9yIEFQSSBub3QgcmVhY2hhYmxlLiBDaGVjayB0aGUgQURBUFRFUiBjb25maWd1cmF0aW9uLiIpK2BcbkFwcExvYzogJHthfWApfSkoKX12aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgo''@;'; put 'put ''ZCxoKT0+e2NvbnN0IGY9YS5nZXRTYXNqc0NvbmZpZygpLHY9YCR7Zi5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc1ZpeWFTZXJ2aWNlLmdldEZvbGRlckJ5UGF0aCh2KS5zdWJzY3JpYmUoTT0+e2NvbnN0IEQ9TS5pZDtEfHwoY29uc29sZS5lcnJvcihgRm9sZGVyIElEIGlzIG5vdCBw''@;'; put 'put ''cmVzZW50LiAke3Z9YCxmKSxkKCExKSksYS5zYXNWaXlhU2VydmljZS5nZXRGb2xkZXJNZW1iZXJzKEQpLnN1YnNjcmliZShaPT57Wi5pdGVtcy5zb21lKHJlPT4ibWFrZWRhdGEiPT09cmUubmFtZSk/ZCghMSk6ZCghMCl9LFo9Pntjb25zb2xlLmVycm9yKCJFcnJvciBnZXR0aW5nIGZvbGRl''@;'; put 'put ''ciBjb250ZW50cyIsWiksaCgpfSl9LE09Pntjb25zb2xlLndhcm4oIkVycm9yIGdldHRpbmcgZm9sZGVyIGluZm8iLE0pLGgoTSl9KX0pfSkoKX1hcHBMb2NDaGVjayhhKXt2YXIgZD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBoPWVlKGZ1bmN0aW9uKihmLHYpe2xl''@;'; put 'put ''dCBELE09IiI7dHJ5e0Q9eWllbGQgZC5zYXNqc0FkYXB0ZXIuZ2V0Rm9sZGVyKGEpfWNhdGNoKFopeyJMb2dpblJlcXVpcmVkRXJyb3IiPT09Wi5uYW1lPyhkLmFwcExvY0NoZWNrUGVuZGluZz0hMCxkLnNob3VsZExvZ2luLm5leHQoITApLGYoe2ZvdW5kOiExfSkpOk09Ik5vdEZvdW5kZUVy''@;'; put 'put ''cm9yIj09PVoubmFtZT9aLm1lc3NhZ2U6IlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYywgb3IgQVBJIG5vdCByZWFjaGFibGUuIENoZWNrIHRoZSBBREFQVEVSIGNvbmZpZ3VyYXRpb24uIn1pZihNLmxlbmd0aClyZXR1cm4gY29uc29sZS53YXJu''@;'; put 'put ''KE0pLGYoe2ZvdW5kOiExLGVycm9yTWVzc2FnZTpNfSk7Zih7Zm91bmQ6ITB9KX0pO3JldHVybiBmdW5jdGlvbihmLHYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRlcihhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pnts''@;'; put 'put ''ZXQgdj0hMTtyZXR1cm4gZmV0Y2goYC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke2F9YCkudGhlbihNPT4oNDA0PT09TS5zdGF0dXMmJih2PSEwKSxNLnRleHQoKSkpLnRoZW4oTT0+e2lmKHRoaXMuaXNMb2dpblJlcXVpcmVkKE0pKXRoaXMuYXBwTG9jQ2hlY2tQZW5kaW5nPSEwLHRo''@;'; put 'put ''aXMuc2hvdWxkTG9naW4ubmV4dCghMCk7ZWxzZXtpZih2KXJldHVybiBjb25zb2xlLndhcm4oIlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSx0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmln''@;'; put 'put ''YXRlQnlVcmwoIi9kZXBsb3kiKSxkKCExKTtsZXQgRD1udWxsO3RyeXtEPUpTT04ucGFyc2UoTSl9Y2F0Y2h7fWlmKEQmJkQuaHR0cFN0YXR1c0NvZGUmJjQwND09PUQuaHR0cFN0YXR1c0NvZGUpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24g''@;'; put 'put ''dGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2QoITApfX0pLmNhdGNoKE09PntkKCExKX0pfSl9aXNMb2dpblJlcXVpcmVkKGEpe3JldHVybi88Zm9ybS4r''@;'; put 'put ''YWN0aW9uPSIoLipMb2dvblteIl0qKS4qPi9nbS50ZXN0KGEpfWxvZ291dCgpe3RoaXMuc2FzanNBZGFwdGVyLmxvZ091dCgpLnRoZW4oKCk9Pntsb2NhdGlvbi5yZWxvYWQoKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCl9Z2V0''@;'; put 'put ''U2FzUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKX1zZXREZWJ1Z1N0YXRlKGEpe3RoaXMuc2FzanNBZGFwdGVyLnNldERlYnVnU3RhdGUoYSl9Z2V0U2FzanNJbnN0YW5jZSgpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlcn1nZXRTZXJ2ZXJUeXBl''@;'; put 'put ''KCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhLnNlcnZlclR5cGU/YS5zZXJ2ZXJUeXBlOiJTQVNWSVlBIn1nZXRFeGVjdXRpb25QYXRoKCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3N3aXRjaChhLnNlcnZl''@;'; put 'put ''clR5cGUpe2Nhc2UgQjAuWS5TYXNWaXlhOnJldHVybiBhLnBhdGhTQVNWaXlhO2Nhc2UgQjAuWS5TYXM5OnJldHVybiBhLnBhdGhTQVM5O2Nhc2UgQjAuWS5TYXNqczpyZXR1cm4gYS5wYXRoU0FTSlN9fWdldEZpbGVDb250ZW50KGEsZCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldEZp''@;'; put 'put ''bGVDb250ZW50KGEsZCl9dXBkYXRlRmlsZUNvbnRlbnQoYSxkLGgpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci51cGRhdGVGaWxlQ29udGVudChhLGQsaCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoUTgpLHhyKF9XKSx4cih2YykseHIo''@;'; put 'put ''VmNlKSx4cihUVykseHIoU2QpLHhyKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksU2Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmluamVjdG9yPWF9''@;'; put 'put ''bG9nKGEsZCl7dGhpcy5pbmplY3RTYXNTZXJ2aWNlKCksdGhpcy5zYXNqc0NvbmZpZz8uZGVidWcmJihkP2NvbnNvbGUubG9nKGEsZCk6Y29uc29sZS5sb2coYSkpfWVycm9yKGEsZCl7Y29uc29sZS5lcnJvcihhLGQpfWxvZ1JlcXVlc3REYXRhKGEsZCl7aWYodGhpcy5sb2coIi0tLSBBZGFw''@;'; put 'put ''dGVyIFJlcXVlc3QgSW5wdXQgLS0tIiksdGhpcy5sb2coYSksZCl7Zm9yKGxldCBoIG9mIE9iamVjdC5rZXlzKGQpKXRoaXMubG9nKGgsZFtoXSk7dGhpcy5sb2coIi0tLS0tLSIpfWVsc2UgdGhpcy5sb2coIm5vIGRhdGEgc2VudCIpfWluamVjdFNhc1NlcnZpY2UoKXtpZighdGhpcy5zYXNq''@;'; put 'put ''c0NvbmZpZyl7Y29uc3QgYT10aGlzLmluamVjdG9yLmdldChCcyk7dGhpcy5zYXNqc0NvbmZpZz1hLmdldFNhc2pzQ29uZmlnKCl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKERzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rv''@;'; put 'put ''a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQmNlPWZ1bmN0aW9uIHBBZShjLGwpe3JldHVybiBjPT09bHx8YyE9YyYmbCE9bH0sZUw9ZnVuY3Rpb24gZ0FlKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoO2EtLTspaWYoQmNl''@;'; put 'put ''KGNbYV1bMF0sbCkpcmV0dXJuIGE7cmV0dXJuLTF9O3ZhciB2QWU9QXJyYXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiB2eShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX12''@;'; put 'put ''eS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gaEFlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sdnkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBiQWUoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPWVMKGwsYyk7cmV0dXJuIShhPDB8fChhPT1sLmxlbmd0aC0xP2wucG9wKCk6''@;'; put 'put ''dkFlLmNhbGwobCxhLDEpLC0tdGhpcy5zaXplLDApKX0sdnkucHJvdG90eXBlLmdldD1mdW5jdGlvbiBfQWUoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPWVMKGwsYyk7cmV0dXJuIGE8MD92b2lkIDA6bFthXVsxXX0sdnkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBDQWUoYyl7cmV0dXJuIGVM''@;'; put 'put ''KHRoaXMuX19kYXRhX18sYyk+LTF9LHZ5LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTUFlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXyxkPWVMKGEsYyk7cmV0dXJuIGQ8MD8oKyt0aGlzLnNpemUsYS5wdXNoKFtjLGxdKSk6YVtkXVsxXT1sLHRoaXN9O2NvbnN0IHRMPXZ5LGpjZT0ib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIFBBZT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IHZwPWpjZXx8UEFlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgp''@;'; put 'put ''LHVtPXZwLlN5bWJvbDt2YXIgemNlPU9iamVjdC5wcm90b3R5cGUsTkFlPXpjZS5oYXNPd25Qcm9wZXJ0eSxWQWU9emNlLnRvU3RyaW5nLG94PXVtP3VtLnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgVUFlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIFVjZT11bT91bS50b1N0cmluZ1Rh''@;'; put 'put ''Zzp2b2lkIDA7Y29uc3QgYnk9ZnVuY3Rpb24gJEFlKGMpe3JldHVybiBudWxsPT1jP3ZvaWQgMD09PWM/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOlVjZSYmVWNlIGluIE9iamVjdChjKT9mdW5jdGlvbiBCQWUoYyl7dmFyIGw9TkFlLmNhbGwoYyxveCksYT1jW294XTt0''@;'; put 'put ''cnl7Y1tveF09dm9pZCAwO3ZhciBkPSEwfWNhdGNoe312YXIgaD1WQWUuY2FsbChjKTtyZXR1cm4gZCYmKGw/Y1tveF09YTpkZWxldGUgY1tveF0pLGh9KGMpOmZ1bmN0aW9uIFpBZShjKXtyZXR1cm4gVUFlLmNhbGwoYyl9KGMpfSxzeD1mdW5jdGlvbiBLQWUoYyl7dmFyIGw9dHlwZW9mIGM7''@;'; put 'put ''cmV0dXJuIG51bGwhPWMmJigib2JqZWN0Ij09bHx8ImZ1bmN0aW9uIj09bCl9LFpjZT1mdW5jdGlvbiBla2UoYyl7aWYoIXN4KGMpKXJldHVybiExO3ZhciBsPWJ5KGMpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWx8fCJbb2Jq''@;'; put 'put ''ZWN0IEFzeW5jRnVuY3Rpb25dIj09bHx8IltvYmplY3QgUHJveHldIj09bH0sQVc9dnBbIl9fY29yZS1qc19zaGFyZWRfXyJdO3ZhciBXY2U9ZnVuY3Rpb24oKXt2YXIgYz0vW14uXSskLy5leGVjKEFXJiZBVy5rZXlzJiZBVy5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGM/IlN5bWJvbChz''@;'; put 'put ''cmMpXzEuIitjOiIifSgpO3ZhciBha2U9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2NvbnN0IG43PWZ1bmN0aW9uIG9rZShjKXtpZihudWxsIT1jKXt0cnl7cmV0dXJuIGFrZS5jYWxsKGMpfWNhdGNoe310cnl7cmV0dXJuIGMrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn07dmFyIGxrZT0vXlxb''@;'; put 'put ''b2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxma2U9UmVnRXhwKCJeIitGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3Bl''@;'; put 'put ''cnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtjb25zdCBna2U9ZnVuY3Rpb24gcGtlKGMpe3JldHVybiEoIXN4KGMpfHxmdW5jdGlvbiBua2UoYyl7cmV0dXJuISFXY2UmJldjZSBpbiBjfShjKSkmJihaY2UoYyk/ZmtlOmxrZSkudGVz''@;'; put 'put ''dChuNyhjKSl9LHI3PWZ1bmN0aW9uIGJrZShjLGwpe3ZhciBhPWZ1bmN0aW9uIG1rZShjLGwpe3JldHVybiBjPy5bbF19KGMsbCk7cmV0dXJuIGdrZShhKT9hOnZvaWQgMH0sbHg9cjcodnAsIk1hcCIpLGN4PXI3KE9iamVjdCwiY3JlYXRlIik7dmFyIFRrZT1PYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5O3ZhciBJa2U9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB5eShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX15eS5wcm90b3R5''@;'; put 'put ''cGUuY2xlYXI9ZnVuY3Rpb24gd2tlKCl7dGhpcy5fX2RhdGFfXz1jeD9jeChudWxsKTp7fSx0aGlzLnNpemU9MH0seXkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBTa2UoYyl7dmFyIGw9dGhpcy5oYXMoYykmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2NdO3JldHVybiB0aGlzLnNpemUtPWw/''@;'; put 'put ''MTowLGx9LHl5LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gQWtlKGMpe3ZhciBsPXRoaXMuX19kYXRhX187aWYoY3gpe3ZhciBhPWxbY107cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09YT92b2lkIDA6YX1yZXR1cm4gVGtlLmNhbGwobCxjKT9sW2NdOnZvaWQgMH0seXkucHJv''@;'; put 'put ''dG90eXBlLmhhcz1mdW5jdGlvbiBSa2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXztyZXR1cm4gY3g/dm9pZCAwIT09bFtjXTpJa2UuY2FsbChsLGMpfSx5eS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFBrZShjLGwpe3ZhciBhPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5o''@;'; put 'put ''YXMoYyk/MDoxLGFbY109Y3gmJnZvaWQgMD09PWw/Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOmwsdGhpc307Y29uc3QgWWNlPXl5LG5MPWZ1bmN0aW9uIGprZShjLGwpe3ZhciBhPWMuX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIFZrZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4ic3Ry''@;'; put 'put ''aW5nIj09bHx8Im51bWJlciI9PWx8fCJzeW1ib2wiPT1sfHwiYm9vbGVhbiI9PWw/Il9fcHJvdG9fXyIhPT1jOm51bGw9PT1jfShsKT9hWyJzdHJpbmciPT10eXBlb2YgbD8ic3RyaW5nIjoiaGFzaCJdOmEubWFwfTtmdW5jdGlvbiBfeShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0''@;'; put 'put ''aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX1feS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gSGtlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgWWNlLG1hcDpuZXcobHh8fHRMKSxzdHJpbmc6bmV3IFljZX19''@;'; put 'put ''LF95LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gemtlKGMpe3ZhciBsPW5MKHRoaXMsYykuZGVsZXRlKGMpO3JldHVybiB0aGlzLnNpemUtPWw/MTowLGx9LF95LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gWmtlKGMpe3JldHVybiBuTCh0aGlzLGMpLmdldChjKX0sX3kucHJvdG90eXBlLmhh''@;'; put 'put ''cz1mdW5jdGlvbiBZa2UoYyl7cmV0dXJuIG5MKHRoaXMsYykuaGFzKGMpfSxfeS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uICRrZShjLGwpe3ZhciBhPW5MKHRoaXMsYyksZD1hLnNpemU7cmV0dXJuIGEuc2V0KGMsbCksdGhpcy5zaXplKz1hLnNpemU9PWQ/MDoxLHRoaXN9O2NvbnN0IGtXPV95''@;'; put 'put ''O2Z1bmN0aW9uIHd5KGMpe3ZhciBsPXRoaXMuX19kYXRhX189bmV3IHRMKGMpO3RoaXMuc2l6ZT1sLnNpemV9d3kucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIEVBZSgpe3RoaXMuX19kYXRhX189bmV3IHRMLHRoaXMuc2l6ZT0wfSx3eS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIEFBZShj''@;'; put 'put ''KXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9bC5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZT1sLnNpemUsYX0sd3kucHJvdG90eXBlLmdldD1mdW5jdGlvbiBEQWUoYyl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGMpfSx3eS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFJBZShjKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fX2RhdGFfXy5oYXMoYyl9LHd5LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gWGtlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztpZihhIGluc3RhbmNlb2YgdEwpe3ZhciBkPWEuX19kYXRhX187aWYoIWx4fHxkLmxlbmd0aDwxOTkpcmV0dXJuIGQucHVzaChbYyxsXSksdGhpcy5zaXpl''@;'; put 'put ''PSsrYS5zaXplLHRoaXM7YT10aGlzLl9fZGF0YV9fPW5ldyBrVyhkKX1yZXR1cm4gYS5zZXQoYyxsKSx0aGlzLnNpemU9YS5zaXplLHRoaXN9O2NvbnN0IFFrZT13eTt2YXIgbkRlPWZ1bmN0aW9uKCl7dHJ5e3ZhciBjPXI3KE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gYyh7fSwi''@;'; put 'put ''Iix7fSksY31jYXRjaHt9fSgpO2NvbnN0IEdjZT1uRGUsJGNlPWZ1bmN0aW9uIHJEZShjLGwsYSl7Il9fcHJvdG9fXyI9PWwmJkdjZT9HY2UoYyxsLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTphLHdyaXRhYmxlOiEwfSk6Y1tsXT1hfTt2YXIgYURlPU9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgS2NlPWZ1bmN0aW9uIG9EZShjLGwsYSl7dmFyIGQ9Y1tsXTsoIWFEZS5jYWxsKGMsbCl8fCFCY2UoZCxhKXx8dm9pZCAwPT09YSYmIShsIGluIGMpKSYmJGNlKGMsbCxhKX0sckw9ZnVuY3Rpb24gc0RlKGMsbCxhLGQpe3ZhciBoPSFhO2F8fChh''@;'; put 'put ''PXt9KTtmb3IodmFyIGY9LTEsdj1sLmxlbmd0aDsrK2Y8djspe3ZhciBNPWxbZl0sRD1kP2QoYVtNXSxjW01dLE0sYSxjKTp2b2lkIDA7dm9pZCAwPT09RCYmKEQ9Y1tNXSksaD8kY2UoYSxNLEQpOktjZShhLE0sRCl9cmV0dXJuIGF9LEN5PWZ1bmN0aW9uIHVEZShjKXtyZXR1cm4gbnVsbCE9''@;'; put 'put ''YyYmIm9iamVjdCI9PXR5cGVvZiBjfSxxY2U9ZnVuY3Rpb24gaERlKGMpe3JldHVybiBDeShjKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PWJ5KGMpfTt2YXIgWGNlPU9iamVjdC5wcm90b3R5cGUsZkRlPVhjZS5oYXNPd25Qcm9wZXJ0eSxwRGU9WGNlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGdE''@;'; put 'put ''ZT1xY2UoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9xY2U6ZnVuY3Rpb24oYyl7cmV0dXJuIEN5KGMpJiZmRGUuY2FsbChjLCJjYWxsZWUiKSYmIXBEZS5jYWxsKGMsImNhbGxlZSIpfTtjb25zdCBtRGU9Z0RlLFN5PUFycmF5LmlzQXJyYXk7dmFyIEpjZT0ib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFFjZT1KY2UmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxldWU9UWNlJiZRY2UuZXhwb3J0cz09PUpjZT92cC5CdWZmZXI6dm9pZCAwO2NvbnN0''@;'; put 'put ''IHR1ZT0oZXVlP2V1ZS5pc0J1ZmZlcjp2b2lkIDApfHxmdW5jdGlvbiBiRGUoKXtyZXR1cm4hMX07dmFyIE1EZT0vXig/OjB8WzEtOV1cZCopJC87Y29uc3QgRURlPWZ1bmN0aW9uIHhEZShjLGwpe3ZhciBhPXR5cGVvZiBjO3JldHVybiEhKGw9bD8/OTAwNzE5OTI1NDc0MDk5MSkmJigibnVt''@;'; put 'put ''YmVyIj09YXx8InN5bWJvbCIhPWEmJk1EZS50ZXN0KGMpKSYmYz4tMSYmYyUxPT0wJiZjPGx9LG51ZT1mdW5jdGlvbiBBRGUoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjJiZjPi0xJiZjJTE9PTAmJmM8PTkwMDcxOTkyNTQ3NDA5OTF9O3ZhciBiYz17fTtiY1siW29iamVjdCBGbG9hdDMy''@;'; put 'put ''QXJyYXldIl09YmNbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWJjWyJbb2JqZWN0IEludDhBcnJheV0iXT1iY1siW29iamVjdCBJbnQxNkFycmF5XSJdPWJjWyJbb2JqZWN0IEludDMyQXJyYXldIl09YmNbIltvYmplY3QgVWludDhBcnJheV0iXT1iY1siW29iamVjdCBVaW50OENsYW1wZWRB''@;'; put 'put ''cnJheV0iXT1iY1siW29iamVjdCBVaW50MTZBcnJheV0iXT1iY1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxiY1siW29iamVjdCBBcmd1bWVudHNdIl09YmNbIltvYmplY3QgQXJyYXldIl09YmNbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09YmNbIltvYmplY3QgQm9vbGVhbl0iXT1iY1si''@;'; put 'put ''W29iamVjdCBEYXRhVmlld10iXT1iY1siW29iamVjdCBEYXRlXSJdPWJjWyJbb2JqZWN0IEVycm9yXSJdPWJjWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPWJjWyJbb2JqZWN0IE1hcF0iXT1iY1siW29iamVjdCBOdW1iZXJdIl09YmNbIltvYmplY3QgT2JqZWN0XSJdPWJjWyJbb2JqZWN0IFJlZ0V4''@;'; put 'put ''cF0iXT1iY1siW29iamVjdCBTZXRdIl09YmNbIltvYmplY3QgU3RyaW5nXSJdPWJjWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgRFc9ZnVuY3Rpb24gdEllKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKX19O3ZhciBydWU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZl''@;'; put 'put ''eHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyx1eD1ydWUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxJVz11eCYmdXguZXhwb3J0cz09PXJ1ZSYmamNlLnByb2Nlc3M7Y29uc3QgTXk9ZnVuY3Rpb24oKXt0cnl7cmV0''@;'; put 'put ''dXJuIHV4JiZ1eC5yZXF1aXJlJiZ1eC5yZXF1aXJlKCJ1dGlsIikudHlwZXN8fElXJiZJVy5iaW5kaW5nJiZJVy5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKTt2YXIgaXVlPU15JiZNeS5pc1R5cGVkQXJyYXk7Y29uc3QgYUllPWl1ZT9EVyhpdWUpOmZ1bmN0aW9uIFFEZShjKXtyZXR1cm4g''@;'; put 'put ''Q3koYykmJm51ZShjLmxlbmd0aCkmJiEhYmNbYnkoYyldfTt2YXIgc0llPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgYXVlPWZ1bmN0aW9uIGxJZShjLGwpe3ZhciBhPVN5KGMpLGQ9IWEmJm1EZShjKSxoPSFhJiYhZCYmdHVlKGMpLGY9IWEmJiFkJiYhaCYmYUllKGMp''@;'; put 'put ''LHY9YXx8ZHx8aHx8ZixNPXY/ZnVuY3Rpb24gbERlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9QXJyYXkoYyk7KythPGM7KWRbYV09bChhKTtyZXR1cm4gZH0oYy5sZW5ndGgsU3RyaW5nKTpbXSxEPU0ubGVuZ3RoO2Zvcih2YXIgWiBpbiBjKShsfHxzSWUuY2FsbChjLFopKSYmKCF2fHwhKCJsZW5n''@;'; put 'put ''dGgiPT1afHxoJiYoIm9mZnNldCI9PVp8fCJwYXJlbnQiPT1aKXx8ZiYmKCJidWZmZXIiPT1afHwiYnl0ZUxlbmd0aCI9PVp8fCJieXRlT2Zmc2V0Ij09Wil8fEVEZShaLEQpKSkmJk0ucHVzaChaKTtyZXR1cm4gTX07dmFyIGNJZT1PYmplY3QucHJvdG90eXBlO2NvbnN0IFJXPWZ1bmN0aW9u''@;'; put 'put ''IHVJZShjKXt2YXIgbD1jJiZjLmNvbnN0cnVjdG9yO3JldHVybiBjPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBsJiZsLnByb3RvdHlwZXx8Y0llKX0sb3VlPWZ1bmN0aW9uIGRJZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYyhsKGEpKX19LGZJZT1vdWUoT2JqZWN0LmtleXMsT2Jq''@;'; put 'put ''ZWN0KTt2YXIgZ0llPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3Qgc3VlPWZ1bmN0aW9uIGJJZShjKXtyZXR1cm4gbnVsbCE9YyYmbnVlKGMubGVuZ3RoKSYmIVpjZShjKX0sTFc9ZnVuY3Rpb24geUllKGMpe3JldHVybiBzdWUoYyk/YXVlKGMpOmZ1bmN0aW9uIG1JZShj''@;'; put 'put ''KXtpZighUlcoYykpcmV0dXJuIGZJZShjKTt2YXIgbD1bXTtmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWdJZS5jYWxsKGMsYSkmJiJjb25zdHJ1Y3RvciIhPWEmJmwucHVzaChhKTtyZXR1cm4gbH0oYyl9O3ZhciB4SWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBUSWU9''@;'; put 'put ''ZnVuY3Rpb24gRUllKGMpe2lmKCFzeChjKSlyZXR1cm4gZnVuY3Rpb24gQ0llKGMpe3ZhciBsPVtdO2lmKG51bGwhPWMpZm9yKHZhciBhIGluIE9iamVjdChjKSlsLnB1c2goYSk7cmV0dXJuIGx9KGMpO3ZhciBsPVJXKGMpLGE9W107Zm9yKHZhciBkIGluIGMpImNvbnN0cnVjdG9yIj09ZCYm''@;'; put 'put ''KGx8fCF4SWUuY2FsbChjLGQpKXx8YS5wdXNoKGQpO3JldHVybiBhfSxPVz1mdW5jdGlvbiBBSWUoYyl7cmV0dXJuIHN1ZShjKT9hdWUoYywhMCk6VEllKGMpfTt2YXIgbHVlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsY3Vl''@;'; put 'put ''PWx1ZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLHV1ZT1jdWUmJmN1ZS5leHBvcnRzPT09bHVlP3ZwLkJ1ZmZlcjp2b2lkIDAsZHVlPXV1ZT91dWUuYWxsb2NVbnNhZmU6dm9pZCAwO2NvbnN0IGh1ZT1mdW5jdGlvbiBOSWUoKXty''@;'; put 'put ''ZXR1cm5bXX07dmFyIEJJZT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGZ1ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGpJZT1mdWU/ZnVuY3Rpb24oYyl7cmV0dXJuIG51bGw9PWM/W106KGM9T2JqZWN0KGMpLGZ1bmN0aW9uIEZJZShjLGwpe2Zvcih2YXIg''@;'; put 'put ''YT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aCxoPTAsZj1bXTsrK2E8ZDspe3ZhciB2PWNbYV07bCh2LGEsYykmJihmW2grK109dil9cmV0dXJuIGZ9KGZ1ZShjKSxmdW5jdGlvbihsKXtyZXR1cm4gQkllLmNhbGwoYyxsKX0pKX06aHVlO2NvbnN0IFBXPWpJZSxwdWU9ZnVuY3Rpb24gWkllKGMs''@;'; put 'put ''bCl7Zm9yKHZhciBhPS0xLGQ9bC5sZW5ndGgsaD1jLmxlbmd0aDsrK2E8ZDspY1toK2FdPWxbYV07cmV0dXJuIGN9LGd1ZT1vdWUoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIEdJZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGMpe2Zvcih2YXIgbD1b''@;'; put 'put ''XTtjOylwdWUobCxQVyhjKSksYz1ndWUoYyk7cmV0dXJuIGx9Omh1ZTtjb25zdCBtdWU9R0llLHZ1ZT1mdW5jdGlvbiBxSWUoYyxsLGEpe3ZhciBkPWwoYyk7cmV0dXJuIFN5KGMpP2Q6cHVlKGQsYShjKSl9LEpJZT1mdW5jdGlvbiBYSWUoYyl7cmV0dXJuIHZ1ZShjLExXLFBXKX0sZVJlPWZ1''@;'; put 'put ''bmN0aW9uIFFJZShjKXtyZXR1cm4gdnVlKGMsT1csbXVlKX0sRlc9cjcodnAsIkRhdGFWaWV3IiksSFc9cjcodnAsIlByb21pc2UiKSxOVz1yNyh2cCwiU2V0IiksVlc9cjcodnAsIldlYWtNYXAiKTt2YXIgYnVlPSJbb2JqZWN0IE1hcF0iLHl1ZT0iW29iamVjdCBQcm9taXNlXSIsX3VlPSJb''@;'; put 'put ''b2JqZWN0IFNldF0iLHd1ZT0iW29iamVjdCBXZWFrTWFwXSIsQ3VlPSJbb2JqZWN0IERhdGFWaWV3XSIsb1JlPW43KEZXKSxzUmU9bjcobHgpLGxSZT1uNyhIVyksY1JlPW43KE5XKSx1UmU9bjcoVlcpLGk3PWJ5OyhGVyYmaTcobmV3IEZXKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1DdWV8fGx4''@;'; put 'put ''JiZpNyhuZXcgbHgpIT1idWV8fEhXJiZpNyhIVy5yZXNvbHZlKCkpIT15dWV8fE5XJiZpNyhuZXcgTlcpIT1fdWV8fFZXJiZpNyhuZXcgVlcpIT13dWUpJiYoaTc9ZnVuY3Rpb24oYyl7dmFyIGw9YnkoYyksYT0iW29iamVjdCBPYmplY3RdIj09bD9jLmNvbnN0cnVjdG9yOnZvaWQgMCxkPWE/''@;'; put 'put ''bjcoYSk6IiI7aWYoZClzd2l0Y2goZCl7Y2FzZSBvUmU6cmV0dXJuIEN1ZTtjYXNlIHNSZTpyZXR1cm4gYnVlO2Nhc2UgbFJlOnJldHVybiB5dWU7Y2FzZSBjUmU6cmV0dXJuIF91ZTtjYXNlIHVSZTpyZXR1cm4gd3VlfXJldHVybiBsfSk7Y29uc3QgQlc9aTc7dmFyIGhSZT1PYmplY3QucHJv''@;'; put 'put ''dG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IFN1ZT12cC5VaW50OEFycmF5LGpXPWZ1bmN0aW9uIG1SZShjKXt2YXIgbD1uZXcgYy5jb25zdHJ1Y3RvcihjLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgU3VlKGwpLnNldChuZXcgU3VlKGMpKSxsfTt2YXIgeVJlPS9cdyokLzt2YXIgTXVlPXVt''@;'; put 'put ''P3VtLnByb3RvdHlwZTp2b2lkIDAseHVlPU11ZT9NdWUudmFsdWVPZjp2b2lkIDA7Y29uc3QgWVJlPWZ1bmN0aW9uIFdSZShjLGwsYSl7dmFyIGQ9Yy5jb25zdHJ1Y3Rvcjtzd2l0Y2gobCl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIGpXKGMpO2Nhc2UiW29iamVjdCBCb29s''@;'; put 'put ''ZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpyZXR1cm4gbmV3IGQoK2MpO2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnJldHVybiBmdW5jdGlvbiB2UmUoYyxsKXt2YXIgYT1sP2pXKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQsYy5i''@;'; put 'put ''eXRlTGVuZ3RoKX0oYyxhKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVp''@;'; put 'put ''bnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gZnVuY3Rpb24gTVJlKGMsbCl7dmFyIGE9bD9qVyhjLmJ1ZmZlcik6Yy5idWZmZXI7cmV0dXJuIG5ldyBj''@;'; put 'put ''LmNvbnN0cnVjdG9yKGEsYy5ieXRlT2Zmc2V0LGMubGVuZ3RoKX0oYyxhKTtjYXNlIltvYmplY3QgTWFwXSI6Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgZDtjYXNlIltvYmplY3QgTnVtYmVyXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiBuZXcgZChjKTtjYXNlIltvYmpl''@;'; put 'put ''Y3QgUmVnRXhwXSI6cmV0dXJuIGZ1bmN0aW9uIF9SZShjKXt2YXIgbD1uZXcgYy5jb25zdHJ1Y3RvcihjLnNvdXJjZSx5UmUuZXhlYyhjKSk7cmV0dXJuIGwubGFzdEluZGV4PWMubGFzdEluZGV4LGx9KGMpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gZnVuY3Rpb24gQ1JlKGMpe3Jl''@;'; put 'put ''dHVybiB4dWU/T2JqZWN0KHh1ZS5jYWxsKGMpKTp7fX0oYyl9fTt2YXIgRXVlPU9iamVjdC5jcmVhdGUsR1JlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe31yZXR1cm4gZnVuY3Rpb24obCl7aWYoIXN4KGwpKXJldHVybnt9O2lmKEV1ZSlyZXR1cm4gRXVlKGwpO2MucHJvdG90eXBlPWw7dmFy''@;'; put 'put ''IGE9bmV3IGM7cmV0dXJuIGMucHJvdG90eXBlPXZvaWQgMCxhfX0oKTtjb25zdCAkUmU9R1JlO3ZhciBUdWU9TXkmJk15LmlzTWFwO2NvbnN0IHRMZT1UdWU/RFcoVHVlKTpmdW5jdGlvbiBKUmUoYyl7cmV0dXJuIEN5KGMpJiYiW29iamVjdCBNYXBdIj09QlcoYyl9O3ZhciBBdWU9TXkmJk15''@;'; put 'put ''LmlzU2V0O2NvbnN0IG9MZT1BdWU/RFcoQXVlKTpmdW5jdGlvbiByTGUoYyl7cmV0dXJuIEN5KGMpJiYiW29iamVjdCBTZXRdIj09QlcoYyl9O3ZhciBrdWU9IltvYmplY3QgQXJndW1lbnRzXSIsRHVlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsSXVlPSJbb2JqZWN0IE9iamVjdF0iLG9jPXt9O29j''@;'; put 'put ''W2t1ZV09b2NbIltvYmplY3QgQXJyYXldIl09b2NbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09b2NbIltvYmplY3QgRGF0YVZpZXddIl09b2NbIltvYmplY3QgQm9vbGVhbl0iXT1vY1siW29iamVjdCBEYXRlXSJdPW9jWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1vY1siW29iamVjdCBGbG9h''@;'; put 'put ''dDY0QXJyYXldIl09b2NbIltvYmplY3QgSW50OEFycmF5XSJdPW9jWyJbb2JqZWN0IEludDE2QXJyYXldIl09b2NbIltvYmplY3QgSW50MzJBcnJheV0iXT1vY1siW29iamVjdCBNYXBdIl09b2NbIltvYmplY3QgTnVtYmVyXSJdPW9jW0l1ZV09b2NbIltvYmplY3QgUmVnRXhwXSJdPW9jWyJb''@;'; put 'put ''b2JqZWN0IFNldF0iXT1vY1siW29iamVjdCBTdHJpbmddIl09b2NbIltvYmplY3QgU3ltYm9sXSJdPW9jWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09b2NbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09b2NbIltvYmplY3QgVWludDE2QXJyYXldIl09b2NbIltvYmplY3QgVWludDMyQXJy''@;'; put 'put ''YXldIl09ITAsb2NbIltvYmplY3QgRXJyb3JdIl09b2NbRHVlXT1vY1siW29iamVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IExMZT1mdW5jdGlvbiBpTChjLGwsYSxkLGgsZil7dmFyIHYsTT0xJmwsRD0yJmwsWj00Jmw7aWYoYSYmKHY9aD9hKGMsZCxoLGYpOmEoYykpLHZvaWQgMCE9PXYpcmV0''@;'; put 'put ''dXJuIHY7aWYoIXN4KGMpKXJldHVybiBjO3ZhciByZT1TeShjKTtpZihyZSl7aWYodj1mdW5jdGlvbiBmUmUoYyl7dmFyIGw9Yy5sZW5ndGgsYT1uZXcgYy5jb25zdHJ1Y3RvcihsKTtyZXR1cm4gbCYmInN0cmluZyI9PXR5cGVvZiBjWzBdJiZoUmUuY2FsbChjLCJpbmRleCIpJiYoYS5pbmRl''@;'; put 'put ''eD1jLmluZGV4LGEuaW5wdXQ9Yy5pbnB1dCksYX0oYyksIU0pcmV0dXJuIGZ1bmN0aW9uIE9JZShjLGwpe3ZhciBhPS0xLGQ9Yy5sZW5ndGg7Zm9yKGx8fChsPUFycmF5KGQpKTsrK2E8ZDspbFthXT1jW2FdO3JldHVybiBsfShjLHYpfWVsc2V7dmFyIGNlPUJXKGMpLGJlPWNlPT1EdWV8fCJb''@;'; put 'put ''b2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWNlO2lmKHR1ZShjKSlyZXR1cm4gZnVuY3Rpb24gUkllKGMsbCl7aWYobClyZXR1cm4gYy5zbGljZSgpO3ZhciBhPWMubGVuZ3RoLGQ9ZHVlP2R1ZShhKTpuZXcgYy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYy5jb3B5KGQpLGR9KGMsTSk7aWYo''@;'; put 'put ''Y2U9PUl1ZXx8Y2U9PWt1ZXx8YmUmJiFoKXtpZih2PUR8fGJlP3t9OmZ1bmN0aW9uIEtSZShjKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgYy5jb25zdHJ1Y3Rvcnx8UlcoYyk/e306JFJlKGd1ZShjKSl9KGMpLCFNKXJldHVybiBEP2Z1bmN0aW9uICRJZShjLGwpe3JldHVybiByTChjLG11''@;'; put 'put ''ZShjKSxsKX0oYyxmdW5jdGlvbiBrSWUoYyxsKXtyZXR1cm4gYyYmckwobCxPVyhsKSxjKX0odixjKSk6ZnVuY3Rpb24gekllKGMsbCl7cmV0dXJuIHJMKGMsUFcoYyksbCl9KGMsZnVuY3Rpb24gX0llKGMsbCl7cmV0dXJuIGMmJnJMKGwsTFcobCksYyl9KHYsYykpfWVsc2V7aWYoIW9jW2Nl''@;'; put 'put ''XSlyZXR1cm4gaD9jOnt9O3Y9WVJlKGMsY2UsTSl9fWZ8fChmPW5ldyBRa2UpO3ZhciBFZT1mLmdldChjKTtpZihFZSlyZXR1cm4gRWU7Zi5zZXQoYyx2KSxvTGUoYyk/Yy5mb3JFYWNoKGZ1bmN0aW9uKHJ0KXt2LmFkZChpTChydCxsLGEscnQsYyxmKSl9KTp0TGUoYykmJmMuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihydCxwdCl7di5zZXQocHQsaUwocnQsbCxhLHB0LGMsZikpfSk7dmFyIHFlPXJlP3ZvaWQgMDooWj9EP2VSZTpKSWU6RD9PVzpMVykoYyk7cmV0dXJuIGZ1bmN0aW9uIGVEZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aDsrK2E8ZCYmITEhPT1sKGNbYV0s''@;'; put 'put ''YSxjKTspO30ocWV8fGMsZnVuY3Rpb24ocnQscHQpe3FlJiYocnQ9Y1twdD1ydF0pLEtjZSh2LHB0LGlMKHJ0LGwsYSxwdCxjLGYpKX0pLHZ9LGFMPWZ1bmN0aW9uIEZMZShjKXtyZXR1cm4gTExlKGMsNSl9O3ZhciBITGU9eSg3ODg1NSk7bGV0IFN1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0''@;'; put 'put ''b3IoYSl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLmxvYWRNb3JlQ291bnQ9NTAsdGhpcy5pc01pY3Jvc29mdD0hMSx0aGlzLmlzTWljcm9zb2Z0PXRoaXMuaXNJRW9yRURHRSgpLGNvbnNvbGUubG9nKCJJcyBJRSBvciBFZGdlPyIsdGhpcy5pc01pY3Jv''@;'; put 'put ''c29mdCl9Y29udmVydEpzRGF0ZVRvU2FzRGF0ZShhLGQ9ImRheXMiKXtsZXQgaCxmPTA7aD1hIGluc3RhbmNlb2YgRGF0ZT9hOm5ldyBEYXRlKGEpLGY9bmV3IERhdGUoRGF0ZS5VVEMoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSxoLmdldEhvdXJzKCksaC5nZXRN''@;'; put 'put ''aW51dGVzKCksaC5nZXRTZWNvbmRzKCkpKS52YWx1ZU9mKCk7Y29uc3QgRD1mKzMxNTYxOTJlNTtzd2l0Y2goZCl7Y2FzZSJkYXlzIjp7bGV0IFo9RC84NjRlNTtyZXR1cm4gWj1NYXRoLmFicyhaKSxaPU1hdGguZmxvb3IoWiksWn1jYXNlInNlY29uZHMiOnJldHVybiBELzFlM31yZXR1cm4g''@;'; put 'put ''MH1jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEsZD0iZGF5cyIpe2lmKCJudW1iZXIiIT10eXBlb2YgYSYmKGE9cGFyc2VGbG9hdChhKSksInNlY29uZHMiPT09ZCl7bGV0IE09MWUzKmEtMzE1NjE5MmU1O3JldHVybiBNKz02MCpuZXcgRGF0ZShNKS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyxu''@;'; put 'put ''ZXcgRGF0ZShNKX1yZXR1cm4gbmV3IERhdGUoODY0ZTUqYS0zMTU2MTkyZTUpfXRyZWVPbkZpbHRlcihhLGQpe2xldCBoPWEuc2VhcmNoU3RyaW5nP2Euc2VhcmNoU3RyaW5nOiIiLGY9ZC5zcGxpdCgiLiIpWzBdLHY9ZC5zcGxpdCgiLiIpWzFdLE09ZisiQWxsIjthW2ZdJiYoYVtNXXx8KGFb''@;'; put 'put ''TV09dGhpcy5kZWVwQ2xvbmUoYVtmXSkpLGFbZl09dGhpcy5kZWVwQ2xvbmUoYVtNXSksaC5sZW5ndGg+MCYmKGFbZl09YVtmXS5maWx0ZXIodj9EPT5EW3ZdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xvd2VyQ2FzZSgpKTpEPT5ELnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xv''@;'; put 'put ''d2VyQ2FzZSgpKSkpKX1saWJyYXJ5T25GaWx0ZXIoYSxkLGgpe2QubGVuZ3RoPjA/YS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC50b0xvd2VyQ2FzZSgpKT8oZi5oaWRkZW49ITEsZi5pbkZvcmVncm91bmQ9ITApOihmLmhpZGRlbj0hMCxmLmluRm9yZWdyb3Vu''@;'; put 'put ''ZD0hMSl9KToodGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLHRoaXMuZGlzcGxheUxpYnJhcmllcyhhKSl9ZGlzcGxheUxpYnJhcmllcyhhLGQpe2Q/dGhpcy5zaG93bkxpYnJhcmllcys9dGhpcy5sb2FkTW9yZUNvdW50Oih0aGlzLnNob3duTGlicmFyaWVzPTUwLHRoaXMucmVzZXRMaWJyYXJ5''@;'; put 'put ''Rm9yZWdyb3VuZChhKSk7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aCYmaCE9PXRoaXMuc2hvd25MaWJyYXJpZXM7aCsrKWFbaF0uaW5Gb3JlZ3JvdW5kPSEwfXJlc2V0TGlicmFyeUZvcmVncm91bmQoYSl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5pbkZvcmVncm91bmQ9ITF9bWV0''@;'; put 'put ''YU9iamVjdE9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wPyh0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSksYS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC50b0xvd2VyQ2FzZSgpKXx8KGYuaGlkZGVuPSEwKX0pKTp0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSl9cmVz''@;'; put 'put ''ZXRBcnJheUZpbHRlcihhKXthLmZvckVhY2goZD0+e2QuaGlkZGVuPSExLGQuaW5Gb3JlZ3JvdW5kJiZkZWxldGUgZC5pbkZvcmVncm91bmR9KX1pc0lFb3JFREdFKCl7dmFyIGE9d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7cmV0dXJuIGEuaW5kZXhPZigiTVNJRSAiKT4wfHwoYS5pbmRl''@;'; put 'put ''eE9mKCJUcmlkZW50LyIpPjA/KGEuaW5kZXhPZigicnY6IiksITApOmEuaW5kZXhPZigiRWRnZS8iKT4wKX1jb252ZXJ0T2JqZWN0c1RvQXJyYXkoYSxkPSExKXtyZXR1cm4gZCYmKGE9dGhpcy5kZWVwQ2xvbmUoYSkpLGEubWFwKGg9Pk9iamVjdC5rZXlzKGgpLm1hcChmPT5oW2ZdKSl9YWRk''@;'; put 'put ''TGVhZGluZ1plcm8oYSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkpLGEubGVuZ3RoPDI/IjAiK2E6YX1kZWxldGVLZXlzQW5kSGFzaChhLGQsaD0hMCl7Y29uc3QgZj1oP3RoaXMuZGVlcENsb25lKGEpOmE7Zm9yKGxldCB2IG9mIGQpZGVsZXRlIGZbdl07cmV0''@;'; put 'put ''dXJuIEhMZShKU09OLnN0cmluZ2lmeShmKSkudG9TdHJpbmcoKX1kb3dubG9hZFRleHRGaWxlKGEsZCl7Y29uc3QgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aC5zZXRBdHRyaWJ1dGUoImhyZWYiLCJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwiK2VuY29kZVVSSUNvbXBv''@;'; put 'put ''bmVudChkKSksaC5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixhKyIudHh0IiksaC5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgpLGguY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGgpfWNvbnZlcnRBcnJheVZhbHVlcyhhLGQpe2lmKGEu''@;'; put 'put ''bGVuZ3RoPDEpcmV0dXJuW107c3dpdGNoKGQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gYS5tYXAoaD0+MSpoKTtjYXNlInN0cmluZyI6cmV0dXJuIGEudG9TdHJpbmcoKS5zcGxpdCgiLCIpfX1pc1N0cmVhbWluZ1ZpeWEoKXtyZXR1cm4iU0FTVklZQSI9PT10aGlzLnNhc1NlcnZpY2UuZ2V0U2Vy''@;'; put 'put ''dmVyVHlwZSgpJiYhKCFsb2NhdGlvbi5zZWFyY2gudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiP19maWxlPSIpfHwhbG9jYXRpb24ucGF0aG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiL3Nhc2pvYmV4ZWN1dGlvbiIpKX1kZWJvdW5jZUNhbGwoYSxkKXtjbGVhclRpbWVvdXQodGhpcy5k''@;'; put 'put ''ZWJvdW5jZVRpbWVvdXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoZCxhKX1kZWVwQ2xvbmUoYSl7cmV0dXJuIGFMKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4o''@;'; put 'put ''e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdTE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5sb2dnZXJTZXJ2aWNlPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPSExLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlzLl9saWNlbmNlU3RhdGU9eVcsdGhpcy5hbGxGZWF0dXJlc09uPXt2aWV3ZXJfcm93c19h''@;'; put 'put ''bGxvd2VkOjEvMCxlZGl0b3Jfcm93c19hbGxvd2VkOjEvMCxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjEvMCxzdWJtaXRfcm93c19saW1pdDoxLzAsdGFibGVzX2luX2xpYnJhcnlfbGltaXQ6MS8wLHZpZXdib3hfbGltaXQ6MS8wLGxpbmVhZ2VfZGFpbHlf''@;'; put 'put ''bGltaXQ6MS8wLHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH0sdGhpcy5mcmVlVGllckxpY2VuY2VEYXRhPXtkZW1vOiEwLGhvdF9saWNlbnNlX2tleTp0aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNl''@;'; put 'put ''bmNlS2V5LHVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWR8fDEsdmFsaWRfdW50aWw6T28oKS5hZGQoMSwieWVhciIpLmZvcm1hdCgiWVlZWS1NTS1ERCIpLHNpdGVfaWQ6IiIsc2l0ZV9pZF9tdWx0aXBsZTpbXX0sdGhpcy5pc0FwcEFjdGl2YXRlZD1uZXcg''@;'; put 'put ''ZWkobnVsbCksdGhpcy5pc0FwcE92ZXJDYXBhY2l0eT1uZXcgZWkoITEpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlcj1uZXcgZWkoITEpLHRoaXMuYXBwTG9ja2VkPW5ldyBlaSghMSksdGhpcy5saWNlbnNlRXhwaXJlc0luRGF5cz1uZXcgZWkobnVsbCksdGhpcy5pc0FwcEZyZWVUaWVy''@;'; put 'put ''PW5ldyBlaSghMSksdGhpcy5saWNlbmNlUHJvYmxlbT1uZXcgZWkobnVsbCksdGhpcy5ob3RfbGljZW5zZV9rZXk9bmV3IGVpKHZvaWQgMCksdGhpcy5saWNlbmNlU3RhdGU9bmV3IGVpKHRoaXMuX2xpY2VuY2VTdGF0ZSksdGhpcy5zYXNTZXJ2aWNlLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIu''@;'; put 'put ''c3Vic2NyaWJlKEQ9PntpZihudWxsIT09dGhpcy5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmIXRoaXMuaXNBcHBGcmVlVGllci52YWx1ZSl7Y29uc3QgWj1gL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJm1pc3NtYXRjaElkPSR7RH0mZm9yY2U9dHJ1ZWA7dGhpcy5saWNlbmNlUHJvYmxl''@;'; put 'put ''bS5uZXh0KFopLHRoaXMuZGVhY3RpdmF0ZUFwcChaKX19KX1hY3RpdmF0aW9uKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2QuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGljZW5zZV9rZXk9ZC5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90''@;'; put 'put ''TGljZW5jZUtleSx5aWVsZCBkLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSkseWllbGQgZC5saWNlbnNpbmcoYS5nbG9idmFycyxhLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVzKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09YS5nbG9idmFyc1sw''@;'; put 'put ''XS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKCFhfHwhYVswXSl7Y29uc3Qgdj0nRXJyb3IgZ2V0dGluZyAiR2xvYnZhcnMiIGZyb20gc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UuJztyZXR1cm4gY29uc29s''@;'; put 'put ''ZS5lcnJvcih2KSxoLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgaC5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYSh2KX1gKX1sZXQgZj1hWzBdO3JldHVybiB2b2lkIDA9PT1mLkxJQ0VOQ0VfS0VZfHx2b2lkIDA9''@;'; put 'put ''PT1mLkFDVElWQVRJT05fS0VZfHxudWxsPT1mLlJFR0lTVEVSQ09VTlR8fG51bGw9PWYuSVNSRUdJU1RFUkVEPyhjb25zb2xlLmVycm9yKCJTb21lIG9mIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCIpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLmV2ZW50U2VydmljZS5zaG93''@;'; put 'put ''SW5mb01vZGFsKCJFcnJvciIsIlNvbWUgb2YgdGhlIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2UiKSk6Zi5MSUNFTkNFX0tFWSYmZi5BQ1RJVkFUSU9OX0tFWT8oaC5saWNlbmNlS2V5PWYuTElDRU5DRV9LRVksaC5hY3RpdmF0aW9uS2V5PWYuQUNUSVZB''@;'; put 'put ''VElPTl9LRVksdm9pZCh5aWVsZCBoLmRlY3J5cHRMaWNlbnNlS2V5KGYuTElDRU5DRV9LRVksZi5BQ1RJVkFUSU9OX0tFWSkudGhlbihmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXt5aWVsZCBoLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihNLGYsZCl9KTtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''TSl7cmV0dXJuIHYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXtjb25zdCBEPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAke019YDtjb25zb2xlLmVycm9yKEQpO2NvbnN0IFo9YC9saWNlbnNpbmcva2V5P2Vycm9yPWlu''@;'; put 'put ''dmFsaWQmZGV0YWlscz0ke2J0b2EoRCl9JmZvcmNlPXRydWVgO2gubGljZW5jZVByb2JsZW0ubmV4dChaKSxoLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFopLHNldFRpbWVvdXQoKCk9PmguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApKX0pO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQpfSkoKX1hcHBsaWNhdGlvbkFjdGl2YXRpb24oYSxkLGgsZil7Znx8KGY9ITEpLHRoaXMuc2V0U2l0''@;'; put 'put ''ZUlkKGEpLCFhLmRlbW8mJmQmJmgmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpO2xldCB2PXZvaWQgMCE9PWEuaG90X2xpY2Vuc2Vfa2V5P2EuaG90X2xpY2Vuc2Vfa2V5OnRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlO3Z8fCh2PXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdl''@;'; put 'put ''dERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5Lm5leHQodiksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJzQWxsb3dlZChhKSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xv''@;'; put 'put ''bmUoYSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTpNLGRheXNUb0V4cGlyeTpEfT10aGlzLmNhbGN1bGF0ZUV4cGlyeShhKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJbj1ELHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXMubmV4dChEKSxEPD0wKXJldHVybiBjb25zb2xl''@;'; put 'put ''LmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQoZCYmaCYmdGhpcy5oYW5kbGVFeHBpcnkoTSxkLGgsZikpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhYS5kZW1vKSxkJiZ0aGlzLmhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGYpLHRoaXMuZGVjb2RlTGljZW5jZUZl''@;'; put 'put ''YXR1cmVzKGEpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSl7aWYoIWEuZmVhdHVyZXMpe2lmKGEuZGVtbylyZXR1cm47cmV0dXJuIHZvaWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29u''@;'; put 'put ''c3QgZD1hLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9saWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZ2gudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5w''@;'; put 'put ''YXJzZUZlYXR1cmVWYWx1ZShkW2doLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLnN0YWdlX3Jvd3NfYWxsb3dlZF0pLGhpc3Rvcnlfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC5oaXN0''@;'; put 'put ''b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZp''@;'; put 'put ''ZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC5saW5lYWdlX2RhaWx5X2xpbWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW2doLnZp''@;'; put 'put ''ZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbZ2guZmlsZVVwbG9hZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtnaC5lZGl0UmVjb3JkXSksYWRkUmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbZ2guYWRkUmVjb3JkXSl9''@;'; put 'put ''LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3RhdGUpfXBhcnNlRmVhdHVyZVZhbHVlKGEpe3JldHVybiItIj09PWE/MS8wOnBhcnNlSW50KGEpfXBhcnNlRmVhdHVyZVRvZ2dsZShhKXtyZXR1cm4hIXBhcnNlSW50KGEpfWRlY3J5cHRMaWNl''@;'; put 'put ''bnNlS2V5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1lZShmdW5jdGlvbioodixNKXtpZighd2luZG93LmNyeXB0b3x8IXdpbmRvdy5jcnlwdG8uc3VidGxlKXRyeXtsZXQgYmU9YXRvYihhLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikp''@;'; put 'put ''O3YoSlNPTi5wYXJzZShiZSkpfWNhdGNoKGJlKXtNKCJFcnJvciBwYXJzaW5nIGh0dHAgbGljZW5zZSBrZXkgZGF0YS4gIitiZSl9bGV0IFosRD15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIoYSkuY2F0Y2goYmU9PntNKGJlKX0pO2NvbnN0IHJlPXlpZWxkIGguYmFzZTY0VG9BcnJheUJ1''@;'; put 'put ''ZmZlcihkKS5jYXRjaChiZT0+e00oYmUpfSk7aWYoIXJlKXJldHVybiB2b2lkIE0oIk1pc3NpbmcgYWN0aXZhdGlvbiBrZXkiKTtsZXQgY2U7Wj1yZTt0cnl7Y2U9eWllbGQgd2luZG93LmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJwa2NzOCIsWix7bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNI''@;'; put 'put ''QS0yNTYifSwhMCxbImRlY3J5cHQiXSl9Y2F0Y2goYmUpe00oIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXk6ICIrYmUpfWlmKGNlKWlmKEQpdHJ5e3dpbmRvdy5jcnlwdG8uc3VidGxlLmRlY3J5cHQoe25hbWU6IlJTQS1PQUVQIixoYXNoOntuYW1lOiJTSEEtMjU2In19LGNlLEQp''@;'; put 'put ''LnRoZW4oYmU9PntsZXQgRWU9KG5ldyBSVGUuVGV4dERlY29kZXIpLmRlY29kZShiZSk7dHJ5e3YoSlNPTi5wYXJzZShFZSkpfWNhdGNoKEJlKXtNKCJFcnJvciBwYXJzaW5nIGxpY2Vuc2Uga2V5IGRhdGEuICIrQmUpfX0sYmU9PntNKGJlKX0pfWNhdGNoKGJlKXtNKGJlKX1lbHNlIE0oIkxp''@;'; put 'put ''Y2Vuc2Uga2V5IGJ5dGVzIG1pc3NpbmciKTtlbHNlIE0oIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXkiKX0pO3JldHVybiBmdW5jdGlvbih2LE0pe3JldHVybiBmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWdldEhvdExpY2Vuc2VLZXkoKXtyZXR1cm4gdGhpcy5ob3RfbGlj''@;'; put 'put ''ZW5zZV9rZXkudmFsdWV9Z2V0TGljZW5zZUtleURhdGEoKXtyZXR1cm4gdGhpcy5saWNlbnNlS2V5RGF0YX1kZWFjdGl2YXRlQXBwKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZT15Vyx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEpLGEmJnRoaXMucm91''@;'; put 'put ''dGVyLm5hdmlnYXRlQnlVcmwoYSl9Y2hlY2tMaW5lYWdlTGltaXQoYSl7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdD09PTEvMClyZXR1cm4hMTtjb25zdCBkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiKSxoPU9vKCkudmFsdWVP''@;'; put 'put ''ZigpO2lmKCFkKXJldHVybiBhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMTtjb25zdCBmPXBhcnNlSW50KGQuc3BsaXQoIiwiKVswXSksdj1wYXJzZUludChkLnNwbGl0KCIsIilbMV0pO3JldHVybiBPbyhmKS5pc1NhbWUoT28oKSwiZGF5Iik/dj49dGhpcy5saWNlbmNlU3RhdGUu''@;'; put 'put ''dmFsdWUubGluZWFnZV9kYWlseV9saW1pdHx8KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLHYrMSksITEpOihhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMSl9c2V0TGluZWFnZVJlbmRlcihhLGQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiLGAke2F9''@;'; put 'put ''LCR7ZH1gKX1iYXNlNjRUb0FycmF5QnVmZmVyKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYpe2goZ2NlLkQoYSkpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXJyYXlCdWZm''@;'; put 'put ''ZXJUb0Jhc2U2NChhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntkKGdjZS5sKGEpKX0pfXNldFNpdGVJZChhKXthLnNpdGVfaWRfbXVsdGlwbGU/dGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vuc2VTaXRlSWQoYS5zaXRlX2lkX211bHRpcGxlKTphLnNpdGVfaWQmJnRoaXMuc2FzU2Vydmlj''@;'; put 'put ''ZS5zZXRMaWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZCl9aGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpe2xldCB2PSExLE09ITE7aWYoKCFhLnNpdGVfaWR8fGEuc2l0ZV9pZCE9PWgpJiYodj0hMCksKCFhLnNpdGVfaWRfbXVsdGlwbGV8fCFhLnNpdGVfaWRfbXVsdGlwbGUuaW5jbHVkZXMo''@;'; put 'put ''aCkpJiYoTT0hMCksdiYmTSlyZXR1cm4gY29uc29sZS5lcnJvcigiVGhlIGtleSBwcm92aWRlZCBpcyBmb3IgZGlmZmVyZW50IG9yZ2FuaXphdGlvbi4iKSx2b2lkIHNldFRpbWVvdXQoKCk9Pntjb25zdCBEPSIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzbWF0Y2gmZm9yY2U9dHJ1ZSI7dGhp''@;'; put 'put ''cy5saWNlbmNlUHJvYmxlbS5uZXh0KEQpLHRoaXMuX2xpY2VuY2VTdGF0ZT15Vyx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEsZCxoLCEwKSxmfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKEQpfSl9Y2FsY3VsYXRlRXhwaXJ5KGEpe2xldCBk''@;'; put 'put ''PU9vKGEudmFsaWRfdW50aWwsIllZWVktTU0tREQiKS5zdGFydE9mKCJkYXkiKSxoPU9vKCkuc3RhcnRPZigiZGF5IiksZj1kLmRpZmYoaCwiZGF5cyIpO3JldHVybntleHBpcnlfZGF0ZTpkLGRheXNUb0V4cGlyeTpmfX1oYW5kbGVFeHBpcnkoYSxkLGgsZil7c2V0VGltZW91dCgoKT0+e2Nv''@;'; put 'put ''bnN0IHY9YC9saWNlbnNpbmcva2V5P2ZvcmNlPXRydWUmZXJyb3I9ZXhwaXJlZCZkZXRhaWxzPSR7YnRvYSgiRXhwaXJ5IGRhdGU6ICIrYS5mb3JtYXQoIkREL01NL1lZWVkiKSl9YDt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQodiksdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5m''@;'; put 'put ''cmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCksZnx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh2KX0pfWhhbmRsZVVzZXJzQWxsb3dlZChhKXthLmRlbW8mJnZvaWQgMCE9PXRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkJiYoYS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dl''@;'; put 'put ''ZD4wP2EudXNlcnNfYWxsb3dlZDp0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCksdGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQ9YS51c2Vyc19hbGxvd2VkfWhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGgpe2lmKHRoaXMudXNlckNvdW50TGltaXRhdGlvbiYmKGQu''@;'; put 'put ''UkVHSVNURVJDT1VOVD5hLnVzZXJzX2FsbG93ZWQ/KGNvbnNvbGUud2FybigiQXBwIGhhcyBtb3JlIHVzZXJzIHJlZ2lzdGVyZWQgdGhlbiBsaWNlbnNlZC4iKSx0aGlzLmlzQXBwT3ZlckNhcGFjaXR5Lm5leHQoITApKTpkLlJFR0lTVEVSQ09VTlQ9PT1hLnVzZXJzX2FsbG93ZWQmJmNvbnNv''@;'; put 'put ''bGUud2FybigiQXBwIGhhcyBoaXQgbGltaXQgb2YgdXNlcnMgcmVnaXN0ZXJlZC4iKSksMSE9PWQuSVNSRUdJU1RFUkVEKXJldHVybiBkLlJFR0lTVEVSQ09VTlQ8YS51c2Vyc19hbGxvd2VkfHwhdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPyhjb25zb2xlLmxvZygiVXNlciBjYW4gcmVnaXN0''@;'; put 'put ''ZXIiKSx0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXIubmV4dCghMCksdGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvcmVnaXN0ZXIiKSkpOih0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXIubmV4dCgh''@;'; put 'put ''MSksdGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvbGltaXQiKSkpO3RoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''YykoeHIoU2QpLHhyKFE4KSx4cih2YykseHIoQnMpLHhyKFN1KSx4cihMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLG9MPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSxkLGgsZix2LE0sRCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5sb2dnZXJTZXJ2aWNlPWYsdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2U9dix0aGlzLnJvdXRlcj1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUQsdGhpcy5z''@;'; put 'put ''eXNzaXRlPW5ldyBlaShudWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz17fSx0aGlzLnN1YnNjcmliZSgpLHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUocmU9PntyZSBpbnN0YW5jZW9mIHBwJiYiL2RlcGxveSI9PT1yZS51cmwmJnRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9h''@;'; put 'put ''ZGVkKCl9KTtjb25zdCBaPXRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnZhbHVlO1oucGVyc2lzdFNlbGVjdGVkVGhlbWUmJnRoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZURhcmtNb2RlKFouc2VsZWN0ZWRUaGVtZSE9PWd5LmxpZ2h0JiZaLnNlbGVjdGVkVGhlbWU9PT1neS5kYXJr''@;'; put 'put ''KX1zYXNTZXJ2aWNlSW5pdCgpe3RoaXMuc2FzU2VydmljZS5zYXNTZXJ2aWNlSW5pdCgpfXN1YnNjcmliZSgpe3RoaXMuc2FzU2VydmljZS5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RhcnRVcERhdGEoKX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0''@;'; put 'put ''U2l0ZUlkRW1pdHRlci5zdWJzY3JpYmUoYT0+e3RoaXMucGF0Y2hTeXNzaXRlKGEpfSl9Z2V0RW52aXJvbm1lbnRJbmZvKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnRJbmZvfXBhdGNoU3lzc2l0ZShhKXtsZXQgZD10aGlzLnN5c3NpdGUuZ2V0VmFsdWUoKTtkJiYoZC5pbmNsdWRlcyhhKXx8''@;'; put 'put ''KGQucHVzaChhKSx0aGlzLnN5c3NpdGUubmV4dChkKSkpfXN0YXJ0VXBEYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGQ9ITE7eWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihmdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBoPWVlKGZ1bmN0aW9uKihmKXthLnN5c3NpdGUubmV4dChbZi5hZGFwdGVyUmVzcG9uc2UuU1lTU0lURV0pO2xldCB2PVtdO2lmKCghZi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnN8fGYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzJiYhZi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0p''@;'; put 'put ''JiZ2LnB1c2goIkdsb2J2YXJzIiksZi5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHN8fHYucHVzaCgiU2FzZGF0YXNldHMiKSxmLmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzfHx2LnB1c2goIlNhc2xpYnMiKSxmLmFkYXB0ZXJSZXNwb25zZS54bG1hcHN8fHYucHVzaCgiWExNYXBzIiksdi5s''@;'; put 'put ''ZW5ndGg+MClyZXR1cm4gZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsYCR7di5qb2luKCIsICIpfSBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHN0YXJ0dXBzZXJ2aWNlYCksdm9pZCBhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpO2NvbnN0''@;'; put 'put ''IE09YS5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKTthLmVudmlyb25tZW50SW5mbz17U1lTU0lURTpmLmFkYXB0ZXJSZXNwb25zZS5TWVNTSVRFLFNZU1NDUEw6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTU0NQTCxTWVNUQ1BJUEhPU1ROQU1FOmYuYWRhcHRlclJlc3BvbnNl''@;'; put 'put ''LlNZU1RDUElQSE9TVE5BTUUsU1lTVkxPTkc6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTVkxPTkcsTUVNU0laRTpmLmFkYXB0ZXJSZXNwb25zZS5NRU1TSVpFLFNZU1BST0NFU1NNT0RFOmYuYWRhcHRlclJlc3BvbnNlLlNZU1BST0NFU1NNT0RFLFNZU0hPU1ROQU1FOmYuYWRhcHRlclJlc3BvbnNl''@;'; put 'put ''LlNZU0hPU1ROQU1FLFNZU1VTRVJJRDpmLmFkYXB0ZXJSZXNwb25zZS5TWVNVU0VSSUQsU1lTSE9TVElORk9MT05HOmYuYWRhcHRlclJlc3BvbnNlLlNZU0hPU1RJTkZPTE9ORyxTWVNFTkNPRElORzpmLmFkYXB0ZXJSZXNwb25zZS5TWVNFTkNPRElORyxBVVRPRVhFQzpmLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZS5BVVRPRVhFQyxJU0FETUlOOmYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzWzBdLklTQURNSU4sRENfQURNSU5fR1JPVVA6Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uRENfQURNSU5fR1JPVVAsQVBQX0xPQzpNPy5hcHBMb2N9O2xldCByZSxjZSxEPWYuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlLnNhc2RhdGFzZXRzLFo9e307Zm9yKGxldCBxZSBvZiBEKVpbcWUuTElCUkVGXXx8KFpbcWUuTElCUkVGXT1bXSksWltxZS5MSUJSRUZdLnB1c2gocWUuRFNOKTtsZXQgYmU9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShaKSksRWU9W107Zm9yKGxldCBxZSBvZiBPYmplY3Qua2V5cyhi''@;'; put 'put ''ZSkpRWUucHVzaCh7TElCUkFSWVJFRjpxZSx0YWJsZXM6YmVbcWVdfSk7bGV0IEJlPUVlO3JlPVosY2U9T2JqZWN0LmtleXMoWiksdm9pZCAwIT09cmUmJihLbi5lZGl0b3IubGlic0FuZFRhYmxlcz1yZSksS24ueGxtYXBzPWYuYWRhcHRlclJlc3BvbnNlLnhsbWFwcy5tYXAocWU9Pih7aWQ6''@;'; put 'put ''cWVbMF0sZGVzY3JpcHRpb246cWVbMV0sdGFyZ2V0RFM6cWVbMl19KSksS24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzPUJlLEtuLmVkaXRvci5saWJyYXJpZXM9Y2UsS24uZWRpdG9yLnN0YXJ0dXBTZXQ9ITAsS24uZGNMaWI9Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uRENMSUIs''@;'; put 'put ''eWllbGQgYS5saWNlbmNlU2VydmljZS5hY3RpdmF0aW9uKGYuYWRhcHRlclJlc3BvbnNlKX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChoPT57ZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlRo''@;'; put 'put ''ZXJlIGlzIGFuIGlzc3VlIHdpdGggc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UiKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpfSksYS5sb2dnZXJTZXJ2aWNlLmxvZygiQWN0aXZhdGVkOiIsYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSksZHx8''@;'; put 'put ''KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZT9hLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpOiFhLnJvdXRlci51cmwuaW5jbHVkZXMo''@;'; put 'put ''ImRlcGxveSIpJiYhYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc2luZyZmb3JjZT10cnVlIikpfSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKSh4cih1MSkseHIodmMpLHhyKEJzKSx4cihTZCkseHIoJFIpLHhyKExzKSx4cihROCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpLFJ1ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhp''@;'; put 'put ''cy5fcmVuZGVyZXI9YSx0aGlzLl9lbGVtZW50UmVmPWQsdGhpcy5vbkNoYW5nZT1oPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319c2V0UHJvcGVydHkoYSxkKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYSxkKX1yZWdpc3Rlck9u''@;'; put 'put ''VG91Y2hlZChhKXt0aGlzLm9uVG91Y2hlZD1hfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1hfXNldERpc2FibGVkU3RhdGUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp''@;'; put 'put ''KEdlKEVvKSxHZShKaSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pfX1yZXR1cm4gY30pKCksYTc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ1ZXtzdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1Zcyhj''@;'; put 'put ''KSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsZmVhdHVyZXM6W3dhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgYnA9bmV3IFN0KCIiKSxWTGU9e3Byb3ZpZGU6YnAsdXNlRXhpc3Rpbmc6Q3MoKCk9Pk1kKSxtdWx0aTohMH07bGV0IE1kPSgoKT0+e2NsYXNz''@;'; put 'put ''IGMgZXh0ZW5kcyBhN3t3cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVlzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9''@;'; put 'put ''RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwibmdNb2RlbCIsIiJdXSxob3N0Qmlu''@;'; put 'put ''ZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0LmNoZWNrZWQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6W2RhKFtWTGVdKSx3YV19KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpO2NvbnN0IEJMZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+cWwpLG11bHRpOiEwfSx6TGU9bmV3IFN0KCIiKTtsZXQgcWw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ1ZXtjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoYSxkKSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9aCx0aGlz''@;'; put 'put ''Ll9jb21wb3Npbmc9ITEsbnVsbD09dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYodGhpcy5fY29tcG9zaXRpb25Nb2RlPSFmdW5jdGlvbiBqTGUoKXtjb25zdCBjPXRtKCk/dG0oKS5nZXRVc2VyQWdlbnQoKToiIjtyZXR1cm4vYW5kcm9pZCAoXGQrKS8udGVzdChjLnRvTG93ZXJDYXNlKCkpfSgp''@;'; put 'put ''KX13cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixhPz8iIil9X2hhbmRsZUlucHV0KGEpeyghdGhpcy5fY29tcG9zaXRpb25Nb2RlfHx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJiF0aGlzLl9jb21wb3NpbmcpJiZ0aGlzLm9uQ2hhbmdlKGEpfV9jb21wb3NpdGlvblN0YXJ0''@;'; put 'put ''KCl7dGhpcy5fY29tcG9zaW5nPSEwfV9jb21wb3NpdGlvbkVuZChhKXt0aGlzLl9jb21wb3Npbmc9ITEsdGhpcy5fY29tcG9zaXRpb25Nb2RlJiZ0aGlzLm9uQ2hhbmdlKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEVvKSxHZShKaSks''@;'; put 'put ''R2UoekxlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsImZvcm1Db250cm9sIiwi''@;'; put 'put ''IiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsIm5nTW9kZWwiLCIiXSxbIiIsIm5nRGVmYXVsdENvbnRyb2wiLCIiXV0saG9zdEJpbmRpbmdzOmZ1''@;'; put 'put ''bmN0aW9uKGQsaCl7MSZkJiZGdCgiaW5wdXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9oYW5kbGVJbnB1dCh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBoLl9jb21w''@;'; put 'put ''b3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9jb21wb3NpdGlvbkVuZCh2LnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6W2RhKFtCTGVdKSx3YV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGgwPW5ldyBTdCgiIiksaG09bmV3IFN0KCIiKTtm''@;'; put 'put ''dW5jdGlvbiBGdWUoYyl7cmV0dXJuIGZ1bmN0aW9uIGRtKGMpe3JldHVybiBudWxsPT1jfHwoInN0cmluZyI9PXR5cGVvZiBjfHxBcnJheS5pc0FycmF5KGMpKSYmMD09PWMubGVuZ3RofShjLnZhbHVlKT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24gSHVlKGMpe3JldHVybiEwPT09Yy52''@;'; put 'put ''YWx1ZT9udWxsOntyZXF1aXJlZDohMH19ZnVuY3Rpb24gc0woYyl7cmV0dXJuIG51bGx9ZnVuY3Rpb24genVlKGMpe3JldHVybiBudWxsIT1jfWZ1bmN0aW9uIFV1ZShjKXtyZXR1cm4gX00oYyk/WXUoYyk6Y31mdW5jdGlvbiBadWUoYyl7bGV0IGw9e307cmV0dXJuIGMuZm9yRWFjaChhPT57''@;'; put 'put ''bD1udWxsIT1hP3suLi5sLC4uLmF9Omx9KSwwPT09T2JqZWN0LmtleXMobCkubGVuZ3RoP251bGw6bH1mdW5jdGlvbiBXdWUoYyxsKXtyZXR1cm4gbC5tYXAoYT0+YShjKSl9ZnVuY3Rpb24gWXVlKGMpe3JldHVybiBjLm1hcChsPT5mdW5jdGlvbiBaTGUoYyl7cmV0dXJuIWMudmFsaWRhdGV9''@;'; put 'put ''KGwpP2w6YT0+bC52YWxpZGF0ZShhKSl9ZnVuY3Rpb24gVVcoYyl7cmV0dXJuIG51bGwhPWM/ZnVuY3Rpb24gR3VlKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoenVlKTtyZXR1cm4gMD09bC5sZW5ndGg/bnVsbDpmdW5jdGlvbihhKXtyZXR1cm4gWnVlKFd1ZShhLGwp''@;'; put 'put ''KX19KFl1ZShjKSk6bnVsbH1mdW5jdGlvbiBaVyhjKXtyZXR1cm4gbnVsbCE9Yz9mdW5jdGlvbiAkdWUoYyl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgbD1jLmZpbHRlcih6dWUpO3JldHVybiAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbiBOTGUoLi4uYyl7''@;'; put 'put ''Y29uc3QgbD11bGUoYykse2FyZ3M6YSxrZXlzOmR9PWRsZShjKSxoPW5ldyBYdChmPT57Y29uc3R7bGVuZ3RoOnZ9PWE7aWYoIXYpcmV0dXJuIHZvaWQgZi5jb21wbGV0ZSgpO2NvbnN0IE09bmV3IEFycmF5KHYpO2xldCBEPXYsWj12O2ZvcihsZXQgcmU9MDtyZTx2O3JlKyspe2xldCBjZT0h''@;'; put 'put ''MTtsMShhW3JlXSkuc3Vic2NyaWJlKE5pKGYsYmU9PntjZXx8KGNlPSEwLFotLSksTVtyZV09YmV9LCgpPT5ELS0sdm9pZCAwLCgpPT57KCFEfHwhY2UpJiYoWnx8Zi5uZXh0KGQ/aGxlKGQsTSk6TSksZi5jb21wbGV0ZSgpKX0pKX19KTtyZXR1cm4gbD9oLnBpcGUoeloobCkpOmh9KFd1ZShh''@;'; put 'put ''LGwpLm1hcChVdWUpKS5waXBlKExyKFp1ZSkpfX0oWXVlKGMpKTpudWxsfWZ1bmN0aW9uIEt1ZShjLGwpe3JldHVybiBudWxsPT09Yz9bbF06QXJyYXkuaXNBcnJheShjKT9bLi4uYyxsXTpbYyxsXX1mdW5jdGlvbiBXVyhjKXtyZXR1cm4gYz9BcnJheS5pc0FycmF5KGMpP2M6W2NdOltdfWZ1''@;'; put 'put ''bmN0aW9uIGxMKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/Yy5pbmNsdWRlcyhsKTpjPT09bH1mdW5jdGlvbiBKdWUoYyxsKXtjb25zdCBhPVdXKGwpO3JldHVybiBXVyhjKS5mb3JFYWNoKGg9PntsTChhLGgpfHxhLnB1c2goaCl9KSxhfWZ1bmN0aW9uIFF1ZShjLGwpe3JldHVybiBX''@;'; put 'put ''VyhsKS5maWx0ZXIoYT0+IWxMKGMsYSkpfWNsYXNzIGUwZXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9W10sdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMu''@;'; put 'put ''Y29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250''@;'; put 'put ''cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdl''@;'; put 'put ''dCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wu''@;'; put 'put ''dW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRo''@;'; put 'put ''KCl7cmV0dXJuIG51bGx9X3NldFZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPVVXKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9zZXRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPWx8fFtdLHRo''@;'; put 'put ''aXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1aVyh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlk''@;'; put 'put ''YXRvckZufHxudWxsfV9yZWdpc3Rlck9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaChsKX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119''@;'; put 'put ''cmVzZXQobD12b2lkIDApe3RoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLnJlc2V0KGwpfWhhc0Vycm9yKGwsYSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNFcnJvcihsLGEpfWdldEVycm9yKGwsYSl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZ2V0''@;'; put 'put ''RXJyb3IobCxhKTpudWxsfX1jbGFzcyBCMSBleHRlbmRzIGUwZXtnZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiBudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9fWNsYXNzIGQxIGV4dGVuZHMgZTBle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9wYXJlbnQ9bnVs''@;'; put 'put ''bCx0aGlzLm5hbWU9bnVsbCx0aGlzLnZhbHVlQWNjZXNzb3I9bnVsbH19Y2xhc3MgdDBle2NvbnN0cnVjdG9yKGwpe3RoaXMuX2NkPWx9Z2V0IGlzVG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnRvdWNoZWR9Z2V0IGlzVW50b3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8u''@;'; put 'put ''Y29udHJvbD8udW50b3VjaGVkfWdldCBpc1ByaXN0aW5lKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucHJpc3RpbmV9Z2V0IGlzRGlydHkoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5kaXJ0eX1nZXQgaXNWYWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnZhbGlk''@;'; put 'put ''fWdldCBpc0ludmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5pbnZhbGlkfWdldCBpc1BlbmRpbmcoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wZW5kaW5nfWdldCBpc1N1Ym1pdHRlZCgpe3JldHVybiEhdGhpcy5fY2Q/LnN1Ym1pdHRlZH19bGV0IG5sPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGMgZXh0ZW5kcyB0MGV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoZDEsMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2xO''@;'; put 'put ''YW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJuZy11bnRvdWNoZWQiLGguaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixoLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5l''@;'; put 'put ''IixoLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaC5pc0RpcnR5KSgibmctdmFsaWQiLGguaXNWYWxpZCkoIm5nLWludmFsaWQiLGguaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaC5pc1BlbmRpbmcpfSxmZWF0dXJlczpbd2FdfSl9fXJldHVybiBjfSkoKSxvNz0oKCk9PntjbGFzcyBjIGV4dGVu''@;'; put 'put ''ZHMgdDBle2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEIxLDEwKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtR3JvdXBOYW1lIiwiIl0sWyIi''@;'; put 'put ''LCJmb3JtQXJyYXlOYW1lIiwiIl0sWyIiLCJuZ01vZGVsR3JvdXAiLCIiXSxbIiIsImZvcm1Hcm91cCIsIiJdLFsiZm9ybSIsMywibmdOb0Zvcm0iLCIiXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0VmFyczoxNixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJuZy11bnRvdWNo''@;'; put 'put ''ZWQiLGguaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixoLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixoLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaC5pc0RpcnR5KSgibmctdmFsaWQiLGguaXNWYWxpZCkoIm5nLWludmFsaWQiLGguaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaC5pc1BlbmRp''@;'; put 'put ''bmcpKCJuZy1zdWJtaXR0ZWQiLGguaXNTdWJtaXR0ZWQpfSxmZWF0dXJlczpbd2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCBkeD0iVkFMSUQiLHVMPSJJTlZBTElEIix4eT0iUEVORElORyIsaHg9IkRJU0FCTEVEIjtmdW5jdGlvbiAkVyhjKXtyZXR1cm4oZEwoYyk/Yy52YWxpZGF0b3JzOmMp''@;'; put 'put ''fHxudWxsfWZ1bmN0aW9uIEtXKGMsbCl7cmV0dXJuKGRMKGwpP2wuYXN5bmNWYWxpZGF0b3JzOmMpfHxudWxsfWZ1bmN0aW9uIGRMKGMpe3JldHVybiBudWxsIT1jJiYhQXJyYXkuaXNBcnJheShjKSYmIm9iamVjdCI9PXR5cGVvZiBjfWNsYXNzIHFXe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5f''@;'; put 'put ''cGVuZGluZ0RpcnR5PSExLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMu''@;'; put 'put ''X29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fYXNzaWduVmFsaWRhdG9ycyhsKSx0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMoYSl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufXNldCB2YWxpZGF0b3IobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10''@;'; put 'put ''aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWx9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbn1zZXQgYXN5bmNWYWxpZGF0b3IobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1s''@;'; put 'put ''fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCB2YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PWR4fWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09dUx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PXh5fWdldCBkaXNhYmxlZCgpe3JldHVy''@;'; put 'put ''biB0aGlzLnN0YXR1cz09PWh4fWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT09aHh9Z2V0IGRpcnR5KCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9Z2V0IHVudG91Y2hlZCgpe3JldHVybiF0aGlzLnRvdWNoZWR9Z2V0IHVwZGF0ZU9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3Ro''@;'; put 'put ''aXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifXNldFZhbGlkYXRvcnMobCl7dGhpcy5fYXNzaWduVmFsaWRhdG9ycyhsKX1zZXRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGwpfWFkZFZhbGlkYXRvcnMo''@;'; put 'put ''bCl7dGhpcy5zZXRWYWxpZGF0b3JzKEp1ZShsLHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoSnVlKGwsdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKSl9cmVtb3ZlVmFsaWRhdG9ycyhsKXt0aGlzLnNldFZhbGlkYXRv''@;'; put 'put ''cnMoUXVlKGwsdGhpcy5fcmF3VmFsaWRhdG9ycykpfXJlbW92ZUFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyhRdWUobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IobCl7cmV0dXJuIGxMKHRoaXMuX3Jhd1ZhbGlkYXRvcnMsbCl9aGFz''@;'; put 'put ''QXN5bmNWYWxpZGF0b3IobCl7cmV0dXJuIGxMKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyxsKX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQobD17fSl7dGhp''@;'; put 'put ''cy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKGwpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGw9PmwubWFya0FsbEFzVG91Y2hlZCgp''@;'; put 'put ''KX1tYXJrQXNVbnRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChhPT57YS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3Vw''@;'; put 'put ''ZGF0ZVRvdWNoZWQobCl9bWFya0FzRGlydHkobD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkobCl9bWFya0FzUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEs''@;'; put 'put ''dGhpcy5fZm9yRWFjaENoaWxkKGE9PnthLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZShsKX1tYXJrQXNQZW5kaW5nKGw9e30pe3RoaXMuc3RhdHVzPXh5LCExIT09bC5lbWl0RXZl''@;'; put 'put ''bnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyhsKX1kaXNhYmxlKGw9e30pe2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkobC5vbmx5U2VsZik7dGhpcy5zdGF0''@;'; put 'put ''dXM9aHgsdGhpcy5lcnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZGlzYWJsZSh7Li4ubCxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0No''@;'; put 'put ''YW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITApKX1lbmFibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9u''@;'; put 'put ''bHlTZWxmKTt0aGlzLnN0YXR1cz1keCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZW5hYmxlKHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7''@;'; put 'put ''Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITEpKX1fdXBkYXRlQW5jZXN0b3JzKGwpe3RoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKSxsLnNraXBQcmlz''@;'; put 'put ''dGluZUNoZWNrfHx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudChsKXt0aGlzLl9wYXJlbnQ9bH1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkobD17fSl7dGhp''@;'; put 'put ''cy5fc2V0SW5pdGlhbFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhp''@;'; put 'put ''cy5zdGF0dXM9PT1keHx8dGhpcy5zdGF0dXM9PT14eSkmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKGwuZW1pdEV2ZW50KSksITEhPT1sLmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0''@;'; put 'put ''aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKX1fdXBkYXRlVHJlZVZhbGlkaXR5KGw9e2VtaXRFdmVudDohMH0pe3RoaXMuX2ZvckVhY2hDaGlsZChhPT5hLl91cGRhdGVUcmVlVmFsaWRpdHkobCkpLHRoaXMudXBkYXRlVmFs''@;'; put 'put ''dWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/aHg6ZHh9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlk''@;'; put 'put ''YXRvcih0aGlzKTpudWxsfV9ydW5Bc3luY1ZhbGlkYXRvcihsKXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz14eSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITA7Y29uc3QgYT1VdWUodGhpcy5hc3luY1ZhbGlkYXRvcih0aGlzKSk7dGhpcy5fYXN5bmNW''@;'; put 'put ''YWxpZGF0aW9uU3Vic2NyaXB0aW9uPWEuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5zZXRFcnJvcnMoZCx7ZW1pdEV2ZW50Omx9KX0pfX1fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKXt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJz''@;'; put 'put ''Y3JpcHRpb24mJih0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEpfXNldEVycm9ycyhsLGE9e30pe3RoaXMuZXJyb3JzPWwsdGhpcy5fdXBkYXRlQ29udHJvbHNFcnJvcnMoITEhPT1hLmVt''@;'; put 'put ''aXRFdmVudCl9Z2V0KGwpe2xldCBhPWw7cmV0dXJuIG51bGw9PWF8fChBcnJheS5pc0FycmF5KGEpfHwoYT1hLnNwbGl0KCIuIikpLDA9PT1hLmxlbmd0aCk/bnVsbDphLnJlZHVjZSgoZCxoKT0+ZCYmZC5fZmluZChoKSx0aGlzKX1nZXRFcnJvcihsLGEpe2NvbnN0IGQ9YT90aGlzLmdldChh''@;'; put 'put ''KTp0aGlzO3JldHVybiBkJiZkLmVycm9ycz9kLmVycm9yc1tsXTpudWxsfWhhc0Vycm9yKGwsYSl7cmV0dXJuISF0aGlzLmdldEVycm9yKGwsYSl9Z2V0IHJvb3QoKXtsZXQgbD10aGlzO2Zvcig7bC5fcGFyZW50OylsPWwuX3BhcmVudDtyZXR1cm4gbH1fdXBkYXRlQ29udHJvbHNFcnJvcnMo''@;'; put 'put ''bCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksbCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyhsKX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5n''@;'; put 'put ''ZXM9bmV3IEtyLHRoaXMuc3RhdHVzQ2hhbmdlcz1uZXcgS3J9X2NhbGN1bGF0ZVN0YXR1cygpe3JldHVybiB0aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/aHg6dGhpcy5lcnJvcnM/dUw6dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yfHx0aGlzLl9hbnlDb250cm9sc0hhdmVT''@;'; put 'put ''dGF0dXMoeHkpP3h5OnRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyh1TCk/dUw6ZHh9X2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhsKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoYT0+YS5zdGF0dXM9PT1sKX1fYW55Q29udHJvbHNEaXJ0eSgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhs''@;'; put 'put ''PT5sLmRpcnR5KX1fYW55Q29udHJvbHNUb3VjaGVkKCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwudG91Y2hlZCl9X3VwZGF0ZVByaXN0aW5lKGw9e30pe3RoaXMucHJpc3RpbmU9IXRoaXMuX2FueUNvbnRyb2xzRGlydHkoKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlz''@;'; put 'put ''Ll9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKGwpfV91cGRhdGVUb3VjaGVkKGw9e30pe3RoaXMudG91Y2hlZD10aGlzLl9hbnlDb250cm9sc1RvdWNoZWQoKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQobCl9X3JlZ2lzdGVyT25Db2xsZWN0''@;'; put 'put ''aW9uQ2hhbmdlKGwpe3RoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT1sfV9zZXRVcGRhdGVTdHJhdGVneShsKXtkTChsKSYmbnVsbCE9bC51cGRhdGVPbiYmKHRoaXMuX3VwZGF0ZU9uPWwudXBkYXRlT24pfV9wYXJlbnRNYXJrZWREaXJ0eShsKXtyZXR1cm4hbCYmISghdGhpcy5fcGFyZW50fHwh''@;'; put 'put ''dGhpcy5fcGFyZW50LmRpcnR5KSYmIXRoaXMuX3BhcmVudC5fYW55Q29udHJvbHNEaXJ0eSgpfV9maW5kKGwpe3JldHVybiBudWxsfV9hc3NpZ25WYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9QXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKCk6bCx0aGlzLl9jb21wb3NlZFZhbGlk''@;'; put 'put ''YXRvckZuPWZ1bmN0aW9uICRMZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9VVyhjKTpjfHxudWxsfSh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRo''@;'; put 'put ''aXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1mdW5jdGlvbiBLTGUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/WlcoYyk6Y3x8bnVsbH0odGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX19Y2xhc3MgaEwgZXh0ZW5kcyBxV3tjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoJFcoYSksS1co''@;'; put 'put ''ZCxhKSksdGhpcy5jb250cm9scz1sLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX3NldFVwQ29udHJvbHMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0''@;'; put 'put ''b3J9KX1yZWdpc3RlckNvbnRyb2wobCxhKXtyZXR1cm4gdGhpcy5jb250cm9sc1tsXT90aGlzLmNvbnRyb2xzW2xdOih0aGlzLmNvbnRyb2xzW2xdPWEsYS5zZXRQYXJlbnQodGhpcyksYS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSxhKX1h''@;'; put 'put ''ZGRDb250cm9sKGwsYSxkPXt9KXt0aGlzLnJlZ2lzdGVyQ29udHJvbChsLGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmQuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9cmVtb3ZlQ29udHJvbChsLGE9e30pe3RoaXMuY29udHJvbHNbbF0m''@;'; put 'put ''JnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1zZXRDb250''@;'; put 'put ''cm9sKGwsYSxkPXt9KXt0aGlzLmNvbnRyb2xzW2xdJiZ0aGlzLmNvbnRyb2xzW2xdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW2xdLGEmJnRoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5''@;'; put 'put ''KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250YWlucyhsKXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShsKSYmdGhpcy5jb250cm9sc1tsXS5lbmFibGVkfXNldFZhbHVlKGwsYT17fSl7KGZ1bmN0aW9uIGkwZShjLGws''@;'; put 'put ''YSl7Yy5fZm9yRWFjaENoaWxkKChkLGgpPT57aWYodm9pZCAwPT09YVtoXSl0aHJvdyBuZXcgUW4oMTAwMiwiIil9KX0pKHRoaXMsMCxsKSxPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9PnsoZnVuY3Rpb24gcjBlKGMsbCxhKXtjb25zdCBkPWMuY29udHJvbHM7aWYoIShsP09iamVjdC5rZXlz''@;'; put 'put ''KGQpOmQpLmxlbmd0aCl0aHJvdyBuZXcgUW4oMWUzLCIiKTtpZighZFthXSl0aHJvdyBuZXcgUW4oMTAwMSwiIil9KSh0aGlzLCEwLGQpLHRoaXMuY29udHJvbHNbZF0uc2V0VmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVl''@;'; put 'put ''QW5kVmFsaWRpdHkoYSl9cGF0Y2hWYWx1ZShsLGE9e30pe251bGwhPWwmJihPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuY29udHJvbHNbZF07aCYmaC5wYXRjaFZhbHVlKGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRh''@;'; put 'put ''dGVWYWx1ZUFuZFZhbGlkaXR5KGEpKX1yZXNldChsPXt9LGE9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoZCxoKT0+e2QucmVzZXQobD9sW2hdOm51bGwse29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoYSksdGhpcy5fdXBkYXRlVG91''@;'; put 'put ''Y2hlZChhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGwsYSxkKT0+KGxbZF09YS5nZXRSYXdWYWx1ZSgpLGwpKX1fc3luY1BlbmRpbmdDb250cm9scygpe2xldCBsPXRoaXMuX3JlZHVjZUNoaWxk''@;'; put 'put ''cmVuKCExLChhLGQpPT4hIWQuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8YSk7cmV0dXJuIGwmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSxsfV9mb3JFYWNoQ2hpbGQobCl7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChhPT57Y29uc3QgZD10''@;'; put 'put ''aGlzLmNvbnRyb2xzW2FdO2QmJmwoZCxhKX0pfV9zZXRVcENvbnRyb2xzKCl7dGhpcy5fZm9yRWFjaENoaWxkKGw9PntsLnNldFBhcmVudCh0aGlzKSxsLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfSl9X3VwZGF0ZVZhbHVlKCl7dGhpcy52''@;'; put 'put ''YWx1ZT10aGlzLl9yZWR1Y2VWYWx1ZSgpfV9hbnlDb250cm9scyhsKXtmb3IoY29uc3RbYSxkXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY29udHJvbHMpKWlmKHRoaXMuY29udGFpbnMoYSkmJmwoZCkpcmV0dXJuITA7cmV0dXJuITF9X3JlZHVjZVZhbHVlKCl7cmV0dXJuIHRoaXMuX3JlZHVj''@;'; put 'put ''ZUNoaWxkcmVuKHt9LChhLGQsaCk9PigoZC5lbmFibGVkfHx0aGlzLmRpc2FibGVkKSYmKGFbaF09ZC52YWx1ZSksYSkpfV9yZWR1Y2VDaGlsZHJlbihsLGEpe2xldCBkPWw7cmV0dXJuIHRoaXMuX2ZvckVhY2hDaGlsZCgoaCxmKT0+e2Q9YShkLGgsZil9KSxkfV9hbGxDb250cm9sc0Rpc2Fi''@;'; put 'put ''bGVkKCl7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1tsXS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fZmluZChsKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''b250cm9scy5oYXNPd25Qcm9wZXJ0eShsKT90aGlzLmNvbnRyb2xzW2xdOm51bGx9fWNvbnN0IHM3PW5ldyBTdCgiQ2FsbFNldERpc2FibGVkU3RhdGUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5meH0pLGZ4PSJhbHdheXMiO2Z1bmN0aW9uIHB4KGMsbCxhPWZ4KXtYVyhjLGwp''@;'; put 'put ''LGwudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGMudmFsdWUpLChjLmRpc2FibGVkfHwiYWx3YXlzIj09PWEpJiZsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZT8uKGMuZGlzYWJsZWQpLGZ1bmN0aW9uIEpMZShjLGwpe2wudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGE9''@;'; put 'put ''PntjLl9wZW5kaW5nVmFsdWU9YSxjLl9wZW5kaW5nQ2hhbmdlPSEwLGMuX3BlbmRpbmdEaXJ0eT0hMCwiY2hhbmdlIj09PWMudXBkYXRlT24mJmEwZShjLGwpfSl9KGMsbCksZnVuY3Rpb24gZU9lKGMsbCl7Y29uc3QgYT0oZCxoKT0+e2wudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGQpLGgm''@;'; put 'put ''Jmwudmlld1RvTW9kZWxVcGRhdGUoZCl9O2MucmVnaXN0ZXJPbkNoYW5nZShhKSxsLl9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e2MuX3VucmVnaXN0ZXJPbkNoYW5nZShhKX0pfShjLGwpLGZ1bmN0aW9uIFFMZShjLGwpe2wudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e2Mu''@;'; put 'put ''X3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PWMudXBkYXRlT24mJmMuX3BlbmRpbmdDaGFuZ2UmJmEwZShjLGwpLCJzdWJtaXQiIT09Yy51cGRhdGVPbiYmYy5tYXJrQXNUb3VjaGVkKCl9KX0oYyxsKSxmdW5jdGlvbiBYTGUoYyxsKXtpZihsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRT''@;'; put 'put ''dGF0ZSl7Y29uc3QgYT1kPT57bC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoZCl9O2MucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSl9KX19KGMsbCl9ZnVuY3Rpb24gZ0wo''@;'; put 'put ''YyxsKXtjLmZvckVhY2goYT0+e2EucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmYS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGwpfSl9ZnVuY3Rpb24gWFcoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIHF1ZShjKXtyZXR1cm4gYy5fcmF3VmFsaWRhdG9yc30oYyk7bnVsbCE9PWwudmFsaWRh''@;'; put 'put ''dG9yP2Muc2V0VmFsaWRhdG9ycyhLdWUoYSxsLnZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZjLnNldFZhbGlkYXRvcnMoW2FdKTtjb25zdCBkPWZ1bmN0aW9uIFh1ZShjKXtyZXR1cm4gYy5fcmF3QXN5bmNWYWxpZGF0b3JzfShjKTtudWxsIT09bC5hc3luY1ZhbGlkYXRvcj9j''@;'; put 'put ''LnNldEFzeW5jVmFsaWRhdG9ycyhLdWUoZCxsLmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGQmJmMuc2V0QXN5bmNWYWxpZGF0b3JzKFtkXSk7Y29uc3QgaD0oKT0+Yy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7Z0wobC5fcmF3VmFsaWRhdG9ycyxoKSxnTChsLl9yYXdB''@;'; put 'put ''c3luY1ZhbGlkYXRvcnMsaCl9ZnVuY3Rpb24gYTBlKGMsbCl7Yy5fcGVuZGluZ0RpcnR5JiZjLm1hcmtBc0RpcnR5KCksYy5zZXRWYWx1ZShjLl9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLGwudmlld1RvTW9kZWxVcGRhdGUoYy5fcGVuZGluZ1ZhbHVlKSxjLl9w''@;'; put 'put ''ZW5kaW5nQ2hhbmdlPSExfWNvbnN0IGFPZT17cHJvdmlkZTpCMSx1c2VFeGlzdGluZzpDcygoKT0+eXApfSxneD1Qcm9taXNlLnJlc29sdmUoKTtsZXQgeXA9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEIxe2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3Rh''@;'; put 'put ''dGU9aCx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLl9kaXJlY3RpdmVzPW5ldyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgS3IsdGhpcy5mb3JtPW5ldyBoTCh7fSxVVyhhKSxaVyhkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgp''@;'; put 'put ''e3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbChhKXtneC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0''@;'; put 'put ''aCk7YS5jb250cm9sPWQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxhLmNvbnRyb2wpLHB4KGEuY29udHJvbCxhLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChhKX0p''@;'; put 'put ''fWdldENvbnRyb2woYSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoYS5wYXRoKX1yZW1vdmVDb250cm9sKGEpe2d4LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShhKX0p''@;'; put 'put ''fWFkZEZvcm1Hcm91cChhKXtneC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCksaD1uZXcgaEwoe30pOyhmdW5jdGlvbiBvMGUoYyxsKXtYVyhjLGwpfSkoaCxhKSxkLnJlZ2lzdGVyQ29udHJvbChhLm5hbWUsaCksaC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5''@;'; put 'put ''KHtlbWl0RXZlbnQ6ITF9KX0pfXJlbW92ZUZvcm1Hcm91cChhKXtneC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7ZCYmZC5yZW1vdmVDb250cm9sKGEubmFtZSl9KX1nZXRGb3JtR3JvdXAoYSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoYS5wYXRoKX11cGRh''@;'; put 'put ''dGVNb2RlbChhLGQpe2d4LnRoZW4oKCk9Pnt0aGlzLmZvcm0uZ2V0KGEucGF0aCkuc2V0VmFsdWUoZCl9KX1zZXRWYWx1ZShhKXt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSl9b25TdWJtaXQoYSl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGZ1bmN0aW9uIHMwZShjLGwpe2MuX3N5bmNQZW5k''@;'; put 'put ''aW5nQ29udHJvbHMoKSxsLmZvckVhY2goYT0+e2NvbnN0IGQ9YS5jb250cm9sOyJzdWJtaXQiPT09ZC51cGRhdGVPbiYmZC5fcGVuZGluZ0NoYW5nZSYmKGEudmlld1RvTW9kZWxVcGRhdGUoZC5fcGVuZGluZ1ZhbHVlKSxkLl9wZW5kaW5nQ2hhbmdlPSExKX0pfSh0aGlzLmZvcm0sdGhpcy5f''@;'; put 'put ''ZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGEpLCJkaWFsb2ciPT09YT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGE9dm9pZCAwKXt0aGlzLmZvcm0ucmVzZXQoYSksdGhpcy5zdWJtaXR0ZWQ9ITF9X3NldFVwZGF0ZVN0cmF0ZWd5''@;'; put 'put ''KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmZvcm0uX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2ZpbmRDb250YWluZXIoYSl7cmV0dXJuIGEucG9wKCksYS5sZW5ndGg/dGhpcy5mb3JtLmdldChhKTp0aGlzLmZvcm19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoaDAsMTApLEdlKGhtLDEwKSxHZShzNyw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJu''@;'; put 'put ''Zy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgic3VibWl0IixmdW5jdGlvbih2KXtyZXR1cm4gaC5vblN1Ym1pdCh2KX0pKCJyZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblJlc2V0KCl9KX0saW5wdXRzOntvcHRpb25zOltO''@;'; put 'put ''bi5Ob25lLCJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltkYShbYU9lXSksd2FdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBsMGUoYyxsKXtjb25zdCBhPWMuaW5kZXhPZihsKTth''@;'; put 'put ''Pi0xJiZjLnNwbGljZShhLDEpfWZ1bmN0aW9uIGMwZShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiYyPT09T2JqZWN0LmtleXMoYykubGVuZ3RoJiYidmFsdWUiaW4gYyYmImRpc2FibGVkImluIGN9Y29uc3QgdFk9Y2xhc3MgZXh0ZW5kcyBxV3tjb25zdHJ1Y3Rvcihs''@;'; put 'put ''PW51bGwsYSxkKXtzdXBlcigkVyhhKSxLVyhkLGEpKSx0aGlzLmRlZmF1bHRWYWx1ZT1udWxsLHRoaXMuX29uQ2hhbmdlPVtdLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITEsdGhpcy5fYXBwbHlGb3JtU3RhdGUobCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5faW5pdE9ic2VydmFi''@;'; put 'put ''bGVzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSksZEwoYSkmJihhLm5vbk51bGxhYmxlfHxhLmluaXRpYWxWYWx1ZUlzRGVmYXVsdCkmJih0aGlzLmRlZmF1bHRWYWx1ZT1jMGUobCk/bC52YWx1ZTps''@;'; put 'put ''KX1zZXRWYWx1ZShsLGE9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWEuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGQ9PmQodGhpcy52YWx1ZSwhMSE9PWEuZW1pdFZpZXdUb01vZGVs''@;'; put 'put ''Q2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNoVmFsdWUobCxhPXt9KXt0aGlzLnNldFZhbHVlKGwsYSl9cmVzZXQobD10aGlzLmRlZmF1bHRWYWx1ZSxhPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLm1hcmtBc1ByaXN0aW5lKGEpLHRoaXMubWFy''@;'; put 'put ''a0FzVW50b3VjaGVkKGEpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxhKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHMobCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hh''@;'; put 'put ''bmdlKGwpe3RoaXMuX29uQ2hhbmdlLnB1c2gobCl9X3VucmVnaXN0ZXJPbkNoYW5nZShsKXtsMGUodGhpcy5fb25DaGFuZ2UsbCl9cmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGwpe3RoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaChsKX1fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7''@;'; put 'put ''bDBlKHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UsbCl9X2ZvckVhY2hDaGlsZChsKXt9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXtyZXR1cm4hKCJzdWJtaXQiIT09dGhpcy51cGRhdGVPbnx8KHRoaXMuX3BlbmRpbmdEaXJ0eSYmdGhpcy5tYXJrQXNEaXJ0eSgpLHRoaXMuX3BlbmRpbmdUb3VjaGVk''@;'; put 'put ''JiZ0aGlzLm1hcmtBc1RvdWNoZWQoKSwhdGhpcy5fcGVuZGluZ0NoYW5nZSl8fCh0aGlzLnNldFZhbHVlKHRoaXMuX3BlbmRpbmdWYWx1ZSx7b25seVNlbGY6ITAsZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksMCkpfV9hcHBseUZvcm1TdGF0ZShsKXtjMGUobCk/KHRoaXMudmFsdWU9dGhp''@;'; put 'put ''cy5fcGVuZGluZ1ZhbHVlPWwudmFsdWUsbC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bH19LGxPZT17cHJvdmlkZTpk''@;'; put 'put ''MSx1c2VFeGlzdGluZzpDcygoKT0+JHMpfSxkMGU9UHJvbWlzZS5yZXNvbHZlKCk7bGV0ICRzPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBkMXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj12LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9''@;'; put 'put ''TSx0aGlzLmNvbnRyb2w9bmV3IHRZLHRoaXMuX3JlZ2lzdGVyZWQ9ITEsdGhpcy5uYW1lPSIiLHRoaXMudXBkYXRlPW5ldyBLcix0aGlzLl9wYXJlbnQ9YSx0aGlzLl9zZXRWYWxpZGF0b3JzKGQpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhoKSx0aGlzLnZhbHVlQWNjZXNzb3I9ZnVuY3Rp''@;'; put 'put ''b24gZVkoYyxsKXtpZighbClyZXR1cm4gbnVsbDtsZXQgYSxkLGg7cmV0dXJuIEFycmF5LmlzQXJyYXkobCksbC5mb3JFYWNoKGY9PntmLmNvbnN0cnVjdG9yPT09cWw/YT1mOmZ1bmN0aW9uIHJPZShjKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGMuY29uc3RydWN0b3IpPT09YTd9''@;'; put 'put ''KGYpP2Q9ZjpoPWZ9KSxofHxkfHxhfHxudWxsfSgwLGYpfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuX2NoZWNrRm9yRXJyb3JzKCksIXRoaXMuX3JlZ2lzdGVyZWR8fCJuYW1lImluIGEpe2lmKHRoaXMuX3JlZ2lzdGVyZWQmJih0aGlzLl9jaGVja05hbWUoKSx0aGlzLmZvcm1EaXJlY3RpdmUp''@;'; put 'put ''KXtjb25zdCBkPWEubmFtZS5wcmV2aW91c1ZhbHVlO3RoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHtuYW1lOmQscGF0aDp0aGlzLl9nZXRQYXRoKGQpfSl9dGhpcy5fc2V0VXBDb250cm9sKCl9ImlzRGlzYWJsZWQiaW4gYSYmdGhpcy5fdXBkYXRlRGlzYWJsZWQoYSksZnVuY3Rp''@;'; put 'put ''b24gUVcoYyxsKXtpZighYy5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtjb25zdCBhPWMubW9kZWw7cmV0dXJuISFhLmlzRmlyc3RDaGFuZ2UoKXx8IU9iamVjdC5pcyhsLGEuY3VycmVudFZhbHVlKX0oYSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlz''@;'; put 'put ''Lm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fZ2V0UGF0aCh0aGlzLm5hbWUpfWdldCBmb3JtRGlyZWN0''@;'; put 'put ''aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKGEpe3RoaXMudmlld01vZGVsPWEsdGhpcy51cGRhdGUuZW1pdChhKX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlzLl9p''@;'; put 'put ''c1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkPSEwfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5j''@;'; put 'put ''b250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpe3B4KHRoaXMuY29udHJvbCx0aGlzLHRoaXMu''@;'; put 'put ''Y2FsbFNldERpc2FibGVkU3RhdGUpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2hlY2tGb3JFcnJvcnMoKXt0aGlzLl9pc1N0YW5kYWxvbmUoKXx8dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5fY2hlY2tOYW1lKCl9X2NoZWNrUGFy''@;'; put 'put ''ZW50VHlwZSgpe31fY2hlY2tOYW1lKCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubmFtZSYmKHRoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZSksdGhpcy5faXNTdGFuZGFsb25lKCl9X3VwZGF0ZVZhbHVlKGEpe2QwZS50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKGEse2Vt''@;'; put 'put ''aXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV91cGRhdGVEaXNhYmxlZChhKXtjb25zdCBkPWEuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaD0wIT09ZCYmczEoZCk7ZDBlLnRoZW4oKCk9PntoJiYhdGhpcy5jb250cm9s''@;'; put 'put ''LmRpc2FibGVkP3RoaXMuY29udHJvbC5kaXNhYmxlKCk6IWgmJnRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhpcy5jb250cm9sLmVuYWJsZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV9nZXRQYXRoKGEpe3JldHVybiB0aGlzLl9wYXJlbnQ/ZnVuY3Rpb24g''@;'; put 'put ''ZkwoYyxsKXtyZXR1cm5bLi4ubC5wYXRoLGNdfShhLHRoaXMuX3BhcmVudCk6W2FdfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEIxLDkpLEdlKGgwLDEwKSxHZShobSwxMCksR2UoYnAsMTApLEdlKEVzLDgpLEdlKHM3LDgpKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nTW9kZWwiLCIiLDMsImZvcm1Db250cm9sTmFtZSIsIiIsMywiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntuYW1lOiJuYW1lIixpc0Rpc2FibGVkOltObi5Ob25lLCJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxt''@;'; put 'put ''b2RlbDpbTm4uTm9uZSwibmdNb2RlbCIsIm1vZGVsIl0sb3B0aW9uczpbTm4uTm9uZSwibmdNb2RlbE9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdNb2RlbCJdLGZlYXR1cmVzOltkYShbbE9lXSksd2Esd2xdfSl9fXJl''@;'; put 'put ''dHVybiBjfSkoKSxsNz0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsIm5nTmF0aXZlVmFsaWRh''@;'; put 'put ''dGUiLCIiXV0saG9zdEF0dHJzOlsibm92YWxpZGF0ZSIsIiJdfSl9fXJldHVybiBjfSkoKTtjb25zdCBjT2U9e3Byb3ZpZGU6YnAsdXNlRXhpc3Rpbmc6Q3MoKCk9PnZMKSxtdWx0aTohMH07bGV0IHZMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhN3t3cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJv''@;'; put 'put ''cGVydHkoInZhbHVlIixhPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9PnthKCIiPT1kP251bGw6cGFyc2VGbG9hdChkKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVlzKGMpKSkoaHx8''@;'; put 'put ''Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVy''@;'; put 'put ''IiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJpbnB1dCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6W2RhKFtj''@;'; put 'put ''T2VdKSx3YV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHVPZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+YkwpLG11bHRpOiEwfTtsZXQgZE9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hY2Nlc3NvcnM9W119YWRkKGEsZCl7dGhpcy5fYWNjZXNzb3JzLnB1c2go''@;'; put 'put ''W2EsZF0pfXJlbW92ZShhKXtmb3IobGV0IGQ9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2Q+PTA7LS1kKWlmKHRoaXMuX2FjY2Vzc29yc1tkXVsxXT09PWEpcmV0dXJuIHZvaWQgdGhpcy5fYWNjZXNzb3JzLnNwbGljZShkLDEpfXNlbGVjdChhKXt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaChk''@;'; put 'put ''PT57dGhpcy5faXNTYW1lR3JvdXAoZCxhKSYmZFsxXSE9PWEmJmRbMV0uZmlyZVVuY2hlY2soYS52YWx1ZSl9KX1faXNTYW1lR3JvdXAoYSxkKXtyZXR1cm4hIWFbMF0uY29udHJvbCYmYVswXS5fcGFyZW50PT09ZC5fY29udHJvbC5fcGFyZW50JiZhWzFdLm5hbWU9PT1kLm5hbWV9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksYkw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGE3e2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCksdGhpcy5fcmVnaXN0cnk9aCx0aGlzLl9pbmplY3Rvcj1mLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSExLHRoaXMub25DaGFuZ2U9KCk9Pnt9LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9Zmkoczcse29wdGlvbmFsOiEwfSk/P2Z4''@;'; put 'put ''fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQoZDEpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoYSl7dGhp''@;'; put 'put ''cy5fc3RhdGU9YT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5fZm49YSx0aGlzLm9uQ2hhbmdlPSgpPT57YSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2Fi''@;'; put 'put ''bGVkU3RhdGUoYSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkfHxhfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSYmdGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZp''@;'; put 'put ''cmVVbmNoZWNrKGEpe3RoaXMud3JpdGVWYWx1ZShhKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl''@;'; put 'put ''KEVvKSxHZShKaSksR2UoZE9lKSxHZShEcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlu''@;'; put 'put ''cHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFt''@;'; put 'put ''ZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LGZlYXR1cmVzOltkYShbdU9lXSksd2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCByWT1uZXcgU3QoIiIpLGJPZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+VDIpLG11bHRpOiEw''@;'; put 'put ''fTtmdW5jdGlvbiBtMGUoYyxsKXtyZXR1cm4gbnVsbD09Yz9gJHtsfWA6KGwmJiJvYmplY3QiPT10eXBlb2YgbCYmKGw9Ik9iamVjdCIpLGAke2N9OiAke2x9YC5zbGljZSgwLDUwKSl9bGV0IFQyPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3Vt''@;'; put 'put ''ZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChhKXt0aGlzLl9jb21wYXJlV2l0aD1hfXdyaXRlVmFsdWUoYSl7dGhpcy52YWx1ZT1hO2NvbnN0IGg9bTBlKHRoaXMuX2dldE9w''@;'; put 'put ''dGlvbklkKGEpLGEpO3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixoKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e3RoaXMudmFsdWU9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoZCksYSh0aGlzLnZhbHVlKX19X3JlZ2lzdGVyT3B0aW9uKCl7cmV0dXJuKHRoaXMuX2lkQ291''@;'; put 'put ''bnRlcisrKS50b1N0cmluZygpfV9nZXRPcHRpb25JZChhKXtmb3IoY29uc3QgZCBvZiB0aGlzLl9vcHRpb25NYXAua2V5cygpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoZCksYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0''@;'; put 'put ''IGQ9ZnVuY3Rpb24geU9lKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCk6YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwo''@;'; put 'put ''YT1ZcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0''@;'; put 'put ''IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0p''@;'; put 'put ''fSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOltkYShbYk9lXSksd2FdfSl9fXJldHVybiBjfSkoKSxBMj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlz''@;'; put 'put ''Ll9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsYSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKG0wZSh0aGlzLmlkLGEpKSx0''@;'; put 'put ''aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoYSl7dGhpcy5fc2V0RWxlbWVudFZhbHVlKGEpLHRoaXMuX3NlbGVjdCYmdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMu''@;'; put 'put ''X3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVj''@;'; put 'put ''dC52YWx1ZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShFbyksR2UoVDIsOSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1''@;'; put 'put ''ZSIsdmFsdWU6InZhbHVlIn19KX19cmV0dXJuIGN9KSgpO2NvbnN0IF9PZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+bXgpLG11bHRpOiEwfTtmdW5jdGlvbiB2MGUoYyxsKXtyZXR1cm4gbnVsbD09Yz9gJHtsfWA6KCJzdHJpbmciPT10eXBlb2YgbCYmKGw9YCcke2x9J2ApLGwm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgbCYmKGw9Ik9iamVjdCIpLGAke2N9OiAke2x9YC5zbGljZSgwLDUwKSl9bGV0IG14PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVy''@;'; put 'put ''PTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChhKXt0aGlzLl9jb21wYXJlV2l0aD1hfXdyaXRlVmFsdWUoYSl7bGV0IGQ7aWYodGhpcy52YWx1ZT1hLEFycmF5LmlzQXJyYXkoYSkpe2NvbnN0IGg9YS5tYXAoZj0+dGhpcy5fZ2V0T3B0aW9uSWQoZikpO2Q9''@;'; put 'put ''KGYsdik9PntmLl9zZXRTZWxlY3RlZChoLmluZGV4T2Yodi50b1N0cmluZygpKT4tMSl9fWVsc2UgZD0oaCxmKT0+e2guX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2goZCl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9Pntjb25zdCBoPVtdLGY9''@;'; put 'put ''ZC5zZWxlY3RlZE9wdGlvbnM7aWYodm9pZCAwIT09Zil7Y29uc3Qgdj1mO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSsrKXtjb25zdCBaPXRoaXMuX2dldE9wdGlvblZhbHVlKHZbTV0udmFsdWUpO2gucHVzaChaKX19ZWxzZXtjb25zdCB2PWQub3B0aW9ucztmb3IobGV0IE09MDtNPHYubGVu''@;'; put 'put ''Z3RoO00rKyl7Y29uc3QgRD12W01dO2lmKEQuc2VsZWN0ZWQpe2NvbnN0IFo9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoRC52YWx1ZSk7aC5wdXNoKFopfX19dGhpcy52YWx1ZT1oLGEoaCl9fV9yZWdpc3Rlck9wdGlvbihhKXtjb25zdCBkPSh0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5fb3B0aW9uTWFwLnNldChkLGEpLGR9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWUsYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dl''@;'; put 'put ''dE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24gd09lKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCkuX3ZhbHVlOmF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9WXMoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJm''@;'; put 'put ''b3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbZGEoW19PZV0pLHdhXX0pfX1yZXR1cm4gY30pKCksazI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZWxlbWVudD1hLHRoaXMuX3JlbmRlcmVyPWQsdGhp''@;'; put 'put ''cy5fc2VsZWN0PWgsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShhKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT1hLHRoaXMuX3NldEVsZW1lbnRWYWx1ZSh2MGUodGhpcy5pZCxhKSksdGhpcy5f''@;'; put 'put ''c2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKGEpe3RoaXMuX3NlbGVjdD8odGhpcy5fdmFsdWU9YSx0aGlzLl9zZXRFbGVtZW50VmFsdWUodjBlKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpOnRo''@;'; put 'put ''aXMuX3NldEVsZW1lbnRWYWx1ZShhKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfV9zZXRTZWxlY3RlZChhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2UoRW8pLEdlKG14LDkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxjNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPXNMfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuaW5wdXROYW1lIGluIGEpe2NvbnN0IGQ9dGhpcy5ub3JtYWxpemVJbnB1dChhW3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMuX2VuYWJsZWQ9''@;'; put 'put ''dGhpcy5lbmFibGVkKGQpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKGQpOnNMLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZShhKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKGEpfXJlZ2lzdGVyT25WYWxpZGF0b3JD''@;'; put 'put ''aGFuZ2UoYSl7dGhpcy5fb25DaGFuZ2U9YX1lbmFibGVkKGEpe3JldHVybiBudWxsIT1hfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtjb25zdCBNT2U9e3Byb3ZpZGU6aDAsdXNlRXhpc3Rpbmc6Q3MoKCk9PmFZKSxtdWx0aTohMH0seE9lPXtwcm92aWRlOmgwLHVzZUV4aXN0aW5nOkNzKCgpPT5vWSksbXVsdGk6ITB9O2xldCBhWT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYzd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1''@;'; put 'put ''bWVudHMpLHRoaXMuaW5wdXROYW1lPSJyZXF1aXJlZCIsdGhpcy5ub3JtYWxpemVJbnB1dD1zMSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1hPT5GdWV9ZW5hYmxlZChhKXtyZXR1cm4gYX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihh''@;'; put 'put ''fHwoYT1ZcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiLDMs''@;'; put 'put ''InR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJmhyKCJyZXF1aXJlZCIsaC5fZW5hYmxlZD8iIjpudWxsKX0saW5wdXRzOntyZXF1aXJl''@;'; put 'put ''ZDoicmVxdWlyZWQifSxmZWF0dXJlczpbZGEoW01PZV0pLHdhXX0pfX1yZXR1cm4gY30pKCksb1k9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGFZe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1hPT5IdWV9c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9WXMoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1l''@;'; put 'put ''IiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZo''@;'; put 'put ''cigicmVxdWlyZWQiLGguX2VuYWJsZWQ/IiI6bnVsbCl9LGZlYXR1cmVzOltkYShbeE9lXSksd2FdfSl9fXJldHVybiBjfSkoKSxFMGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9k''@;'; put 'put ''PWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30pKCksUmM9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOnM3LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3Rh''@;'; put 'put ''dGU/P2Z4fV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbRTBlXX0pfX1yZXR1cm4gY30pKCksSU9lPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTpyWSx1c2VWYWx1ZTphLndhcm5Pbk5nTW9kZWxXaXRoRm9ybUNvbnRyb2w/PyJhbHdheXMifSx7cHJvdmlkZTpzNyx1c2VWYWx1ZTphLmNhbGxTZXREaXNhYmxlZFN0YXRlPz9m''@;'; put 'put ''eH1dfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0UwZV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IEV5PVsiYW5nbGUi''@;'; put 'put ''LHtvdXRsaW5lOic8cGF0aCBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nfV0sdmg9WyJleGNsYW1hdGlvbi1jaXJjbGUiLHtvdXRsaW5lOic8cGF0''@;'; put 'put ''aCBkPSJNMTggMTkuOEMxOC41NSAxOS44IDE5IDE5LjM1IDE5IDE4LjhWMTNDMTkgMTIuNDUgMTguNTUgMTIgMTggMTJDMTcuNDUgMTIgMTcgMTIuNDUgMTcgMTNWMTguOEMxNyAxOS4zNSAxNy40NSAxOS44IDE4IDE5LjhaTTE4Ljg1IDIxLjk1QzE4LjczIDIxLjg0IDE4LjYgMjEuNzUgMTgu''@;'; put 'put ''NDYgMjEuNjlDMTguMTcgMjEuNTcgMTcuODMgMjEuNTcgMTcuNTQgMjEuNjlDMTcuNCAyMS43NSAxNy4yNyAyMS44NCAxNy4xNSAyMS45NUMxNi45MyAyMi4xOCAxNi44IDIyLjQ4IDE2LjggMjIuOEMxNi44IDIzLjEyIDE2LjkzIDIzLjQyIDE3LjE1IDIzLjY1QzE3LjI3IDIzLjc2IDE3LjQg''@;'; put 'put ''MjMuODUgMTcuNTQgMjMuOTFDMTcuNjkgMjMuOTcgMTcuODQgMjQgMTggMjRDMTguMTYgMjQgMTguMzEgMjMuOTcgMTguNDYgMjMuOTFDMTguNiAyMy44NSAxOC43MyAyMy43NiAxOC44NSAyMy42NUMxOS4wNyAyMy40MiAxOS4yIDIzLjEyIDE5LjIgMjIuOEMxOS4yIDIyLjY0IDE5LjE3IDIy''@;'; put 'put ''LjQ5IDE5LjExIDIyLjM0QzE5LjA1IDIyLjIgMTguOTYgMjIuMDYgMTguODUgMjEuOTVaTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDgg''@;'; put 'put ''MjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIzLjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQu''@;'; put 'put ''NjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xNi44IDEyLjY1QzE2LjggMTEuOTkgMTcuMzQgMTEuNDUgMTggMTEuNDVDMTguNjYgMTEuNDUgMTkuMiAxMS45OSAxOS4yIDEyLjY1VjE4LjQ1QzE5LjIgMTkuMTEgMTguNjYgMTkuNjUgMTggMTkuNjVDMTcuMzQgMTkuNjUgMTYuOCAx''@;'; put 'put ''OS4xMSAxNi44IDE4LjQ1VjEyLjY1Wk0xOC45OCAyNC4xNUMxOC44NCAyNC4yOCAxOC42OSAyNC4zOCAxOC41MyAyNC40NUMxOC4zNSAyNC41MiAxOC4xOCAyNC41NiAxOCAyNC41NkMxNy44MiAyNC41NiAxNy42NCAyNC41MyAxNy40NiAyNC40NUMxNy4zMSAyNC4zOCAxNy4xNiAyNC4yOSAx''@;'; put 'put ''NyAyNC4xNEMxNi43NCAyMy44NyAxNi41OSAyMy41MiAxNi41OSAyMy4xNUMxNi41OSAyMi43OCAxNi43MyAyMi40NCAxNyAyMi4xNUMxNy4xNCAyMi4wMiAxNy4yOSAyMS45MiAxNy40NSAyMS44NUMxNy42MiAyMS43OCAxNy44IDIxLjc0IDE3Ljk5IDIxLjc0QzE4LjE4IDIxLjc0IDE4LjM2''@;'; put 'put ''IDIxLjc4IDE4LjUzIDIxLjg1QzE4LjY4IDIxLjkyIDE4LjgzIDIyLjAyIDE4Ljk4IDIyLjE1QzE5LjEgMjIuMjcgMTkuMjEgMjIuNDMgMTkuMjggMjIuNjFDMTkuMzUgMjIuNzkgMTkuMzkgMjIuOTYgMTkuMzkgMjMuMTRDMTkuMzkgMjMuNSAxOS4yNSAyMy44NSAxOC45NyAyNC4xNEwxOC45''@;'; put 'put ''OCAyNC4xNVoiLz4nfV0sYmg9WyJjaGVjay1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjIuNjEgMTQuMjJMMTYuMjUgMjAuNThMMTIuNzEgMTcuMDRDMTIuMzIgMTYuNjUgMTEuNjkgMTYuNjUgMTEuMyAxNy4wNEMxMC45MSAxNy40MyAxMC45MSAxOC4wNiAxMS4zIDE4LjQ1TDE2LjI1''@;'; put 'put ''IDIzLjRMMjQuMDMgMTUuNjJDMjQuNDIgMTUuMjMgMjQuNDIgMTQuNiAyNC4wMyAxNC4yMUMyMy42NCAxMy44MiAyMy4wMSAxMy44MiAyMi42MiAxNC4yMUwyMi42MSAxNC4yMlpNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0''@;'; put 'put ''LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjggMjMuNTEgMjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2''@;'; put 'put ''IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTI0LjE2IDE1Ljc4TDE2LjI0IDIzLjdMMTEuMTUgMTguNjFDMTAuNjggMTguMTQgMTAuNjggMTcuMzggMTEuMTUgMTYuOTFDMTEuNjIgMTYuNDQg''@;'; put 'put ''MTIuMzggMTYuNDQgMTIuODUgMTYuOTFMMTYuMjQgMjAuM0wyMi40NiAxNC4wOEMyMi45MyAxMy42MSAyMy42OSAxMy42MSAyNC4xNiAxNC4wOEMyNC42MyAxNC41NSAyNC42MyAxNS4zMSAyNC4xNiAxNS43OFoiLz4nfV0sVDBlPVsiZWxsaXBzaXMtaG9yaXpvbnRhbCIse291dGxpbmU6Jzxw''@;'; put 'put ''YXRoIGQ9Ik03LjggMTguMUM3LjggMTkuNzU2OCA2LjUwMTYzIDIxLjEgNC45IDIxLjFDMy4yOTgzNyAyMS4xIDIgMTkuNzU2OCAyIDE4LjFDMiAxNi40NDMxIDMuMjk4MzcgMTUuMSA0LjkgMTUuMUM2LjUwMTYzIDE1LjEgNy44IDE2LjQ0MzEgNy44IDE4LjFaIi8+PHBhdGggZD0iTTE4IDIx''@;'; put 'put ''LjFDMTkuNjAxNiAyMS4xIDIwLjkgMTkuNzU2OCAyMC45IDE4LjFDMjAuOSAxNi40NDMxIDE5LjYwMTYgMTUuMSAxOCAxNS4xQzE2LjM5ODQgMTUuMSAxNS4xIDE2LjQ0MzEgMTUuMSAxOC4xQzE1LjEgMTkuNzU2OCAxNi4zOTg0IDIxLjEgMTggMjEuMVoiLz48cGF0aCBkPSJNMzEuMSAyMS4x''@;'; put 'put ''QzMyLjcwMTYgMjEuMSAzNCAxOS43NTY4IDM0IDE4LjFDMzQgMTYuNDQzMSAzMi43MDE2IDE1LjEgMzEuMSAxNS4xQzI5LjQ5ODQgMTUuMSAyOC4yIDE2LjQ0MzEgMjguMiAxOC4xQzI4LjIgMTkuNzU2OCAyOS40OTg0IDIxLjEgMzEuMSAyMS4xWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGgg''@;'; put 'put ''ZD0iTTQuOSAyMS4xQzYuNTAxNjMgMjEuMSA3LjggMTkuNzU2OCA3LjggMTguMUM3LjggMTYuNDQzMSA2LjUwMTYzIDE1LjEgNC45IDE1LjFDMy4yOTgzNyAxNS4xIDIgMTYuNDQzMSAyIDE4LjFDMiAxOS43NTY4IDMuMjk4MzcgMjEuMSA0LjkgMjEuMVoiLz48cGF0aCBkPSJNMTggMjEuMUMx''@;'; put 'put ''OS42MDE2IDIxLjEgMjAuOSAxOS43NTY4IDIwLjkgMTguMUMyMC45IDE2LjQ0MzEgMTkuNjAxNiAxNS4xIDE4IDE1LjFDMTYuMzk4NCAxNS4xIDE1LjEgMTYuNDQzMSAxNS4xIDE4LjFDMTUuMSAxOS43NTY4IDE2LjM5ODQgMjEuMSAxOCAyMS4xWiIvPjxwYXRoIGQ9Ik0zNCAxOC4xQzM0IDE5''@;'; put 'put ''Ljc1NjggMzIuNzAxNiAyMS4xIDMxLjEgMjEuMUMyOS40OTg0IDIxLjEgMjguMiAxOS43NTY4IDI4LjIgMTguMUMyOC4yIDE2LjQ0MzEgMjkuNDk4NCAxNS4xIDMxLjEgMTUuMUMzMi43MDE2IDE1LjEgMzQgMTYuNDQzMSAzNCAxOC4xWiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1''@;'; put 'put ''IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSx2eD1bIndpbmRvdy1jbG9zZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40MSAxOC4wMDAzTDI2LjcgMTAuNzEw''@;'; put 'put ''M0MyNy4wMzk4IDEwLjMxMzUgMjcuMDE2OSA5LjcyMjA3IDI2LjY0NzYgOS4zNTI3QzI2LjI3ODIgOC45ODMzMyAyNS42ODY4IDguOTYwNDkgMjUuMjkgOS4zMDAyNkwxOCAxNi41OTAzTDEwLjcxIDkuMjkwMjZDMTAuMzEzMiA4Ljk1MDQ5IDkuNzIxODEgOC45NzMzMyA5LjM1MjQ0IDkuMzQy''@;'; put 'put ''N0M4Ljk4MzA3IDkuNzEyMDcgOC45NjAyMyAxMC4zMDM1IDkuMzAwMDEgMTAuNzAwM0wxNi41OSAxOC4wMDAzTDkuMjkwMDEgMjUuMjkwM0M5LjAwNDYzIDI1LjUzNDcgOC44ODAzMiAyNS45MTg0IDguOTY4MTkgMjYuMjgzN0M5LjA1NjA3IDI2LjY0OSA5LjM0MTI5IDI2LjkzNDIgOS43MDY1''@;'; put 'put ''OSAyNy4wMjIxQzEwLjA3MTkgMjcuMTA5OSAxMC40NTU2IDI2Ljk4NTYgMTAuNyAyNi43MDAzTDE4IDE5LjQxMDNMMjUuMjkgMjYuNzAwM0MyNS42ODY4IDI3LjA0IDI2LjI3ODIgMjcuMDE3MiAyNi42NDc2IDI2LjY0NzhDMjcuMDE2OSAyNi4yNzg1IDI3LjAzOTggMjUuNjg3IDI2LjcgMjUu''@;'; put 'put ''MjkwM0wxOS40MSAxOC4wMDAzWiIvPid9XSxST2U9WyJpbmZvLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMSAyM0gxOVYxNUgxNkMxNS40NSAxNSAxNSAxNS40NSAxNSAxNkMxNSAxNi41NSAxNS40NSAxNyAxNiAxN0gxN1YyM0gxNUMxNC40NSAyMyAxNCAyMy40NSAxNCAyNEMxNCAy''@;'; put 'put ''NC41NSAxNC40NSAyNSAxNSAyNUgyMUMyMS41NSAyNSAyMiAyNC41NSAyMiAyNEMyMiAyMy40NSAyMS41NSAyMyAyMSAyM1pNMTcuOTMgMTMuM0MxOC43IDEzLjMgMTkuMzMgMTIuNjcgMTkuMzMgMTEuOUMxOS4zMyAxMS4xMyAxOC43IDEwLjUgMTcuOTMgMTAuNUMxNy4xNiAxMC41IDE2LjUz''@;'; put 'put ''IDExLjEzIDE2LjUzIDExLjlDMTYuNTMgMTIuNjcgMTcuMTYgMTMuMyAxNy45MyAxMy4zWk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4''@;'; put 'put ''IDIzLjUxIDggMThDOCAxMi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0''@;'; put 'put ''LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTcuOTMgMTAuM0MxOC44MSAxMC4zIDE5LjUzIDExLjAyIDE5LjUzIDExLjlDMTkuNTMgMTIuNzggMTguODEgMTMuNSAxNy45MyAxMy41QzE3LjA1IDEzLjUgMTYuMzMgMTIuNzggMTYuMzMgMTEuOUMxNi4zMyAxMS4wMiAxNy4wNSAx''@;'; put 'put ''MC4zIDE3LjkzIDEwLjNaTTIxIDI1LjJIMTVDMTQuMzQgMjUuMiAxMy44IDI0LjY2IDEzLjggMjRDMTMuOCAyMy4zNCAxNC4zNCAyMi44IDE1IDIyLjhIMTYuOFYxNy4ySDE2QzE1LjM0IDE3LjIgMTQuOCAxNi42NiAxNC44IDE2QzE0LjggMTUuMzQgMTUuMzQgMTQuOCAxNiAxNC44SDE5LjJW''@;'; put 'put ''MjIuOEgyMUMyMS42NiAyMi44IDIyLjIgMjMuMzQgMjIuMiAyNEMyMi4yIDI0LjY2IDIxLjY2IDI1LjIgMjEgMjUuMloiLz4nfV0sQTBlPVsidGltZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDY5NiAxNy45NzMyTDI3Ljc1OTYgOS43MDU0MkMyOC4wOTk0IDkuMzA5NzIgMjguMDc2NSA4''@;'; put 'put ''LjcxOTg3IDI3LjcwNzEgOC4zNTE0OEMyNy4zMzc4IDcuOTgzMSAyNi43NDYzIDcuOTYwMzIgMjYuMzQ5NiA4LjI5OTE5TDE4LjA1OTYgMTYuNTY3TDkuNzY5NTggOC4yODkyMkM5LjM3NzQ1IDcuODk4MTQgOC43NDE3IDcuODk4MTQgOC4zNDk1OCA4LjI4OTIyQzcuOTU3NDUgOC42ODAyOSA3''@;'; put 'put ''Ljk1NzQ1IDkuMzE0MzQgOC4zNDk1OCA5LjcwNTQyTDE2LjY0OTYgMTcuOTczMkw4LjM0OTU4IDI2LjI0MUM4LjA2NDIgMjYuNDg0OCA3LjkzOTg5IDI2Ljg2NzUgOC4wMjc3NyAyNy4yMzE4QzguMTE1NjQgMjcuNTk2MSA4LjQwMDg2IDI3Ljg4MDYgOC43NjYxNiAyNy45NjgyQzkuMTMxNDYg''@;'; put 'put ''MjguMDU1OSA5LjUxNTE5IDI3LjkzMTkgOS43NTk1OCAyNy42NDczTDE4LjA1OTYgMTkuMzc5NUwyNi4zNDk2IDI3LjY0NzNDMjYuNzQ2MyAyNy45ODYxIDI3LjMzNzggMjcuOTYzNCAyNy43MDcxIDI3LjU5NUMyOC4wNzY1IDI3LjIyNjYgMjguMDk5NCAyNi42MzY3IDI3Ljc1OTYgMjYuMjQx''@;'; put 'put ''TDE5LjQ2OTYgMTcuOTczMloiLz4nfV0sazBlPVsiYW5nbGUtZG91YmxlIix7b3V0bGluZTonPHBhdGggZD0iTTI4LjM0OTEgMTcuODk5NkMyOC41Mzg0IDE4LjA4MzcgMjguNzk0NSAxOC4xODYzIDI5LjA2MSAxOC4xODQ4QzI5LjQ2NCAxOC4xODMxIDI5LjgyNjggMTcuOTQ1MSAyOS45ODIx''@;'; put 'put ''IDE3LjU4MDVDMzAuMTM3NCAxNy4yMTU4IDMwLjA1NSAxNi43OTU1IDI5Ljc3MjkgMTYuNTEzM0wxOC4wMzE4IDVMNi4zMDA2NyAxNi41MTMzQzUuOTU5OTkgMTYuOTAzNCA1Ljk4Mjg5IDE3LjQ4NDkgNi4zNTMyNSAxNy44NDgxQzYuNzIzNiAxOC4yMTEyIDcuMzE2NiAxOC4yMzM3IDcuNzE0''@;'; put 'put ''NDIgMTcuODk5NkwxOC4wMzE4IDcuNzgyNDZMMjguMzQ5MSAxNy44OTk2WiIvPjxwYXRoIGQ9Ik0yOC4zNDkxIDI4LjcxNDlDMjguNTM4NCAyOC44OTg5IDI4Ljc5NDUgMjkuMDAxNSAyOS4wNjEgMjlDMjkuNDY0IDI4Ljk5ODQgMjkuODI2OCAyOC43NjAzIDI5Ljk4MjEgMjguMzk1N0MzMC4x''@;'; put 'put ''Mzc0IDI4LjAzMTEgMzAuMDU1IDI3LjYxMDcgMjkuNzcyOSAyNy4zMjg1TDE4LjAzMTggMTUuODE1Mkw2LjMwMDY3IDI3LjMyODVDNS45NTk5OSAyNy43MTg2IDUuOTgyODkgMjguMzAwMSA2LjM1MzI1IDI4LjY2MzNDNi43MjM2IDI5LjAyNjUgNy4zMTY2IDI5LjA0ODkgNy43MTQ0MiAyOC43''@;'; put 'put ''MTQ5TDE4LjAzMTggMTguNTk3N0wyOC4zNDkxIDI4LjcxNDlaIi8+J31dLExPZT1bImV2ZW50Iix7b3V0bGluZTonPHBhdGggZD0iTTE2LjE3IDI1Ljg2TDEwLjgxIDIwLjVDMTAuNjQ2MiAyMC4zMDg3IDEwLjU2MDYgMjAuMDYyNiAxMC41NzAzIDE5LjgxMDlDMTAuNTggMTkuNTU5MyAxMC42''@;'; put 'put ''ODQ0IDE5LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4yNzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4wMjg3IDE4LjkyNjIgMTIuMjIgMTkuMDlMMTYuMTcgMjNMMjQuODEgMTQuMzZDMjUuMDAxMyAxNC4xOTYyIDI1LjI0NzQgMTQu''@;'; put 'put ''MTEwNiAyNS40OTkxIDE0LjEyMDNDMjUuNzUwNyAxNC4xMyAyNS45ODk1IDE0LjIzNDMgMjYuMTY3NiAxNC40MTI0QzI2LjM0NTcgMTQuNTkwNSAyNi40NSAxNC44MjkzIDI2LjQ1OTcgMTUuMDgwOUMyNi40Njk0IDE1LjMzMjYgMjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1''@;'; put 'put ''Ljg2WiIvPjxwYXRoIGQ9Ik0zMi4yNSA2SDI5VjhIMzJWMzBINC4wMDAwMVY4SDcuMDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUzODMgMy4wNzEwOCA2LjE0NjkxQzIuODU2NjEgNi4yMzk5OSAyLjY2MjU4IDYuMzc0NDEgMi41MDAwNyA2LjU0MjQ5QzIuMzM3''@;'; put 'put ''NTcgNi43MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgxNiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMx''@;'; put 'put ''LjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFD''@;'; put 'put ''MzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWNy44MUMzNC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTgg''@;'; put 'put ''MzMuODc2MSA3LjEyNjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAzMi45Mjg5IDYuMTQ2OTFDMzIuNzE0NSA2LjA1MzgzIDMyLjQ4MzggNi4wMDM5MSAzMi4yNSA2WiIvPjxwYXRoIGQ9Ik0xMCAx''@;'; put 'put ''MEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40''@;'; put 'put ''ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0i''@;'; put 'put ''TTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUyMiAyNyA5VjNDMjcgMi43MzQ3OCAyNi44OTQ3IDIuNDgwNDMgMjYuNzA3MSAyLjI5Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4yNjUyIDIgMjYgMkMyNS43MzQ4''@;'; put 'put ''IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4yNjUyMiAyNS4xMDU0IDkuNTE5NTcgMjUuMjkyOSA5LjcwNzExQzI1LjQ4MDQgOS44OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIvPjxwYXRoIGQ9Ik0yMyA2SDEz''@;'; put 'put ''VjhIMjNWNloiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3''@;'; put 'put ''SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3''@;'; put 'put ''MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzY0IDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDA0IDMwLjQyMzggMzMuOTYxOSAzMC42NTYgMzMu''@;'; put 'put ''ODc2MSAzMC44NzM1QzMzLjc5MDMgMzEuMDkxIDMzLjY2MjUgMzEuMjg5NCAzMy41IDMxLjQ1NzVDMzMuMzM3NCAzMS42MjU2IDMzLjE0MzQgMzEuNzYgMzIuOTI4OSAzMS44NTMxQzMyLjcxNDUgMzEuOTQ2MiAzMi40ODM4IDMxLjk5NjEgMzIuMjUgMzJIMy43NTAwMUMzLjUxNjI1IDMxLjk5''@;'; put 'put ''NjEgMy4yODU1NSAzMS45NDYyIDMuMDcxMDggMzEuODUzMUMyLjg1NjYxIDMxLjc2IDIuNjYyNTggMzEuNjI1NiAyLjUwMDA3IDMxLjQ1NzVDMi4zMzc1NyAzMS4yODk0IDIuMjA5NzYgMzEuMDkxIDIuMTIzOTYgMzAuODczNUMyLjAzODE2IDMwLjY1NiAxLjk5NjA0IDMwLjQyMzggMi4wMDAw''@;'; put 'put ''MSAzMC4xOVY3LjgxQzEuOTk2MDQgNy41NzYyNCAyLjAzODE2IDcuMzQzOTggMi4xMjM5NiA3LjEyNjVDMi4yMDk3NiA2LjkwOTAyIDIuMzM3NTcgNi43MTA1NyAyLjUwMDA3IDYuNTQyNDlDMi42NjI1OCA2LjM3NDQxIDIuODU2NjEgNi4yMzk5OSAzLjA3MTA4IDYuMTQ2OTFDMy4yODU1NSA2''@;'; put 'put ''LjA1MzgzIDMuNTE2MjUgNi4wMDM5MSAzLjc1MDAxIDZINy4wMDAwMVY4SDQuMDAwMDFWMzBIMzJWMTUuMDM2N1oiLz48cGF0aCBkPSJNMjQuMTMzMyAxNS4wMzY3SDI2LjQ1N0MyNi40NTgzIDE1LjA1MTQgMjYuNDU5MiAxNS4wNjYxIDI2LjQ1OTcgMTUuMDgwOUMyNi40Njk0IDE1LjMzMjYg''@;'; put 'put ''MjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1Ljg2TDEwLjgxIDIwLjVDMTAuNjQ2MiAyMC4zMDg3IDEwLjU2MDYgMjAuMDYyNiAxMC41NzAzIDE5LjgxMDlDMTAuNTggMTkuNTU5MyAxMC42ODQ0IDE5LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4y''@;'; put 'put ''NzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4wMjg3IDE4LjkyNjIgMTIuMjIgMTkuMDlMMTYuMTcgMjNMMjQuMTMzMyAxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yMS45NTk0IDZMMjAuNzU5NCA4SDEzVjZIMjEuOTU5NFoiLz48cGF0aCBkPSJNMTAuNzA3MSA5Ljcw''@;'; put 'put ''NzExQzEwLjUxOTYgOS44OTQ2NCAxMC4yNjUyIDEwIDEwIDEwQzkuNzM0OCAxMCA5LjQ4MDQ0IDkuODk0NjQgOS4yOTI5MSA5LjcwNzExQzkuMTA1MzcgOS41MTk1NyA5LjAwMDAxIDkuMjY1MjIgOS4wMDAwMSA5VjNDOS4wMDAwMSAyLjczNDc4IDkuMTA1MzcgMi40ODA0MyA5LjI5MjkxIDIu''@;'; put 'put ''MjkyODlDOS40ODA0NCAyLjEwNTM2IDkuNzM0OCAyIDEwIDJDMTAuMjY1MiAyIDEwLjUxOTYgMi4xMDUzNiAxMC43MDcxIDIuMjkyODlDMTAuODk0NyAyLjQ4MDQzIDExIDIuNzM0NzggMTEgM1Y5QzExIDkuMjY1MjIgMTAuODk0NyA5LjUxOTU3IDEwLjcwNzEgOS43MDcxMVoiLz4nLG91dGxp''@;'; put 'put ''bmVCYWRnZWQ6JzxwYXRoIGQ9Ik0xMC44MSAyMC41TDE2LjE3IDI1Ljg2TDI2LjIyIDE1LjgxQzI2LjM4MzggMTUuNjE4NyAyNi40Njk0IDE1LjM3MjYgMjYuNDU5NyAxNS4xMjA5QzI2LjQ1IDE0Ljg2OTMgMjYuMzQ1NyAxNC42MzA1IDI2LjE2NzYgMTQuNDUyNEMyNS45ODk1IDE0LjI3NDMg''@;'; put 'put ''MjUuNzUwNyAxNC4xNyAyNS40OTkxIDE0LjE2MDNDMjUuMjQ3NCAxNC4xNTA2IDI1LjAwMTMgMTQuMjM2MiAyNC44MSAxNC40TDE2LjE3IDIzTDEyLjIzIDE5LjA2QzEyLjAzODcgMTguODk2MiAxMS43OTI2IDE4LjgxMDYgMTEuNTQxIDE4LjgyMDNDMTEuMjg5MyAxOC44MyAxMS4wNTA1IDE4''@;'; put 'put ''LjkzNDMgMTAuODcyNCAxOS4xMTI0QzEwLjY5NDQgMTkuMjkwNSAxMC41OSAxOS41MjkzIDEwLjU4MDMgMTkuNzgwOUMxMC41NzA2IDIwLjAzMjYgMTAuNjU2MiAyMC4yNzg3IDEwLjgyIDIwLjQ3TDEwLjgxIDIwLjVaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5''@;'; put 'put ''NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5''@;'; put 'put ''Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMzIgMTMuMjJWMzBINC4wMDAwMVY4SDcu''@;'; put 'put ''MDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUzODMgMy4wNzEwOCA2LjE0NjkxQzIuODU2NjEgNi4yMzk5OSAyLjY2MjU4IDYuMzc0NDEgMi41MDAwNyA2LjU0MjQ5QzIuMzM3NTcgNi43MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgx''@;'; put 'put ''NiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMx''@;'; put 'put ''Ljc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2''@;'; put 'put ''MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTIuMzRDMzMuMzgwMiAxMi43MyAzMi43MDYzIDEzLjAyNjYgMzIgMTMuMjJaIi8+PHBhdGggZD0iTTIyLjUgNkgxM1Y4SDIyLjc4QzIyLjU5Njgg''@;'; put 'put ''Ny4zNDkwMyAyMi41MDI2IDYuNjc2MjUgMjIuNSA2WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPicsc29s''@;'; put 'put ''aWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAy''@;'; put 'put ''IDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAg''@;'; put 'put ''MTAgMTBaIi8+PHBhdGggZD0iTTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUyMiAyNyA5VjNDMjcgMi43MzQ3OCAyNi44OTQ3IDIuNDgwNDMgMjYuNzA3MSAyLjI5Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4y''@;'; put 'put ''NjUyIDIgMjYgMkMyNS43MzQ4IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4yNjUyMiAyNS4xMDU0IDkuNTE5NTcgMjUuMjkyOSA5LjcwNzExQzI1LjQ4MDQgOS44OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIv''@;'; put 'put ''PjxwYXRoIGQ9Ik0zMi4yNSA2SDI4LjI1VjlDMjguMjUgOS41ODM0OCAyOC4wMTgyIDEwLjE0MzEgMjcuNjA1NiAxMC41NTU2QzI3LjE5MzEgMTAuOTY4MiAyNi42MzM1IDExLjIgMjYuMDUgMTEuMkMyNS40NjY1IDExLjIgMjQuOTA3IDEwLjk2ODIgMjQuNDk0NCAxMC41NTU2QzI0LjA4MTgg''@;'; put 'put ''MTAuMTQzMSAyMy44NSA5LjU4MzQ4IDIzLjg1IDlWNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2''@;'; put 'put ''QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIu''@;'; put 'put ''MjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAw''@;'; put 'put ''NyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43''@;'; put 'put ''NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWNy44MUMzNC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTggMzMuODc2MSA3LjEy''@;'; put 'put ''NjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAzMi45Mjg5IDYuMTQ2OTFDMzIuNzE0NSA2LjA1MzgzIDMyLjQ4MzggNi4wMDM5MSAzMi4yNSA2Wk0yNS45NCAxNi41OEwxNi4yNyAyNi4yNUwxMSAy''@;'; put 'put ''MC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUg''@;'; put 'put ''MTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjQgMTQuNjZDMjQuMTI2NyAxNC41MzMzIDI0LjI3NzIgMTQuNDMyNyAyNC40NDI4IDE0LjM2NDJDMjQuNjA4MyAxNC4yOTU2IDI0Ljc4NTggMTQuMjYwMyAyNC45NjUgMTQuMjYwM0MyNS4xNDQyIDE0LjI2MDMgMjUuMzIxNyAx''@;'; put 'put ''NC4yOTU2IDI1LjQ4NzMgMTQuMzY0MkMyNS42NTI4IDE0LjQzMjcgMjUuODAzMyAxNC41MzMzIDI1LjkzIDE0LjY2QzI2LjA1NjcgMTQuNzg2NyAyNi4xNTczIDE0LjkzNzIgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYu''@;'; put 'put ''MzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwyNS45NCAxNi41OFoiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAu''@;'; put 'put ''OTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1''@;'; put 'put ''LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0yMS45NTk0IDZI''@;'; put 'put ''MTIuMlY5QzEyLjIgOS41ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0MzggMTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDgg''@;'; put 'put ''Ny44MDAwMSA5VjZIMy44MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEgNi42OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIu''@;'; put 'put ''MDM5NzIgNy4zMzU2OSAxLjk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2''@;'; put 'put ''MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMz''@;'; put 'put ''My42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjE1LjAyNjNDMzMuODg4NiAxNS4wMzU0IDMzLjc3NjQgMTUuMDM4OSAzMy42NjM3IDE1LjAzNjdIMjYuMTk2NEMyNi4yMDY4IDE1LjA1ODQg''@;'; put 'put ''MjYuMjE2NiAxNS4wODA0IDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMg''@;'; put 'put ''MTYuNTlMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMyIDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4''@;'; put 'put ''LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45IDE5TDE2LjI4IDIyLjM4TDIzLjYyMzMgMTUuMDM2N0gyMi4zMzk1QzIxLjE1NzcgMTUuMDYwNCAyMC4wMjMzIDE0LjQ0ODkgMTkuNDIwNiAxMy4zODkzQzE4LjgyMDQgMTIuMzM0MiAxOC44NzAzIDExLjA0MjMgMTku''@;'; put 'put ''NTM2MiAxMC4wMzg3TDIxLjk1OTQgNloiLz48cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAu''@;'; put 'put ''NTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4''@;'; put 'put ''MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQz''@;'; put 'put ''IDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcg''@;'; put 'put ''OS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTMwIDEzLjVDMjguMDEwOSAxMy41IDI2LjEwMzIgMTIuNzA5OCAyNC42OTY3IDExLjMwMzNDMjMuMjkwMiA5Ljg5Njc4IDIyLjUgNy45ODkxMiAyMi41IDZIMTIuMlY5QzEyLjIgOS41''@;'; put 'put ''ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0MzggMTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDggNy44MDAwMSA5VjZIMy44''@;'; put 'put ''MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEgNi42OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIuMDM5NzIgNy4zMzU2OSAx''@;'; put 'put ''Ljk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4''@;'; put 'put ''IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQg''@;'; put 'put ''MzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjEyLjM0QzMyLjgwNDEgMTMuMDk5MSAzMS40MTY1IDEzLjUwMTUgMzAgMTMuNVpNMjUuOTQgMTYuNThMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMy''@;'; put 'put ''IDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45''@;'; put 'put ''IDE5TDE2LjI4IDIyLjM4TDI0IDE0LjY2QzI0LjEyNjcgMTQuNTMzMyAyNC4yNzcyIDE0LjQzMjcgMjQuNDQyOCAxNC4zNjQyQzI0LjYwODMgMTQuMjk1NiAyNC43ODU4IDE0LjI2MDMgMjQuOTY1IDE0LjI2MDNDMjUuMTQ0MiAxNC4yNjAzIDI1LjMyMTcgMTQuMjk1NiAyNS40ODczIDE0LjM2''@;'; put 'put ''NDJDMjUuNjUyOCAxNC40MzI3IDI1LjgwMzMgMTQuNTMzMyAyNS45MyAxNC42NkMyNi4wNTY3IDE0Ljc4NjcgMjYuMTU3MyAxNC45MzcyIDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0''@;'; put 'put ''IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMgMTYuNTlMMjUuOTQgMTYuNThaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1''@;'; put 'put ''IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLE9PZT1bImNhbGVuZGFyIix7b3V0bGluZTonPHBhdGggZD0iTTIyIDIwSDIwVjIySDIyVjIwWk0yMCAyNkgyMlYyNEgyMFYyNlpNMjggMjRIMjZWMjZIMjhWMjRaTTI4IDIwSDI2VjIySDI4VjIwWk0yNyAx''@;'; put 'put ''MkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEyIDI3IDEyWk0yMiAxNkgyMFYxOEgyMlYxNlpNMjggMTZIMjZWMThIMjhWMTZaTTI0IDhIMTJWMTBIMjRWOFpNMTAgMTZIOFYxOEgx''@;'; put 'put ''MFYxNlpNMTAgMjBIOFYyMkgxMFYyMFpNMTAgMjRIOFYyNkgxMFYyNFpNMzMuNSA4LjU0QzMzLjE3IDguMiAzMi43MiA4LjAxIDMyLjI1IDhIMzBWMTBIMzJWMzBINFYxMEg2VjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAz''@;'; put 'put ''MC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDguNTRaTTE0IDI2''@;'; put 'put ''SDE2VjI0SDE0VjI2Wk0xNiAyMEgxNFYyMkgxNlYyMFpNMTYgMTZIMTRWMThIMTZWMTZaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41NSA0IDkgNEM4LjQ1IDQgOCA0LjQ1IDggNVYxMUM4IDExLjU1IDguNDUgMTIgOSAxMloiLz4nLG91dGxpbmVBbGVydGVkOic8''@;'; put 'put ''cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYx''@;'; put 'put ''MzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4y''@;'; put 'put ''NjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzYzIDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDEgMzAuNjYgMzMuODMgMzEuMTIgMzMuNSAzMS40NkMzMy4xNyAzMS44IDMyLjcyIDMyIDMyLjI1IDMy''@;'; put 'put ''SDMuNzVDMy4yOCAzMS45OSAyLjgzIDMxLjggMi41IDMxLjQ2QzIuMTcgMzEuMTIgMiAzMC42NiAyIDMwLjE5VjkuODFDMiA5LjM0IDIuMTcgOC44OCAyLjUgOC41NEMyLjgzIDguMiAzLjI4IDggMy43NSA4SDZWMTBINFYzMEgzMlYxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yMC43NTk0IDhMMTku''@;'; put 'put ''NTU5NCAxMEgxMlY4SDIwLjc1OTRaIi8+PHBhdGggZD0iTTIwIDIwSDIyVjIySDIwVjIwWiIvPjxwYXRoIGQ9Ik0yMiAyNkgyMFYyNEgyMlYyNloiLz48cGF0aCBkPSJNMjYgMjZWMjRIMjhWMjZIMjZaIi8+PHBhdGggZD0iTTI2IDIyVjIwSDI4VjIySDI2WiIvPjxwYXRoIGQ9Ik0yMCAxNkgy''@;'; put 'put ''MlYxOEgyMFYxNloiLz48cGF0aCBkPSJNMjYgMThWMTZIMjhWMThIMjZaIi8+PHBhdGggZD0iTTggMTZIMTBWMThIOFYxNloiLz48cGF0aCBkPSJNOCAyMEgxMFYyMkg4VjIwWiIvPjxwYXRoIGQ9Ik04IDI0SDEwVjI2SDhWMjRaIi8+PHBhdGggZD0iTTE2IDI2SDE0VjI0SDE2VjI2WiIvPjxw''@;'; put 'put ''YXRoIGQ9Ik0xNCAyMEgxNlYyMkgxNFYyMFoiLz48cGF0aCBkPSJNMTQgMTZIMTZWMThIMTRWMTZaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+''@;'; put 'put ''JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz48cGF0aCBkPSJNMjMuMjg5OSA4QzIz''@;'; put 'put ''LjQ1OTQgOC41Njk2MyAyMy42OTk1IDkuMTA4ODcgMjQgOS42MDc1OVYxMEgxMlY4SDIzLjI4OTlaIi8+PHBhdGggZD0iTTM0IDExLjc0NTNDMzMuMzk2IDEyLjE2NjYgMzIuNzIyNCAxMi40OTUxIDMyIDEyLjcxMDFWMzBINFYxMEg2VjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRD''@;'; put 'put ''Mi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVYxMS43NDUz''@;'; put 'put ''WiIvPjxwYXRoIGQ9Ik0yMCAyMEgyMlYyMkgyMFYyMFoiLz48cGF0aCBkPSJNMjIgMjZIMjBWMjRIMjJWMjZaIi8+PHBhdGggZD0iTTI2IDI2VjI0SDI4VjI2SDI2WiIvPjxwYXRoIGQ9Ik0yNiAyMlYyMEgyOFYyMkgyNloiLz48cGF0aCBkPSJNMjAgMTZIMjJWMThIMjBWMTZaIi8+PHBhdGgg''@;'; put 'put ''ZD0iTTI2IDE4VjE2SDI4VjE4SDI2WiIvPjxwYXRoIGQ9Ik04IDE2SDEwVjE4SDhWMTZaIi8+PHBhdGggZD0iTTggMjBIMTBWMjJIOFYyMFoiLz48cGF0aCBkPSJNOCAyNEgxMFYyNkg4VjI0WiIvPjxwYXRoIGQ9Ik0xNiAyNkgxNFYyNEgxNlYyNloiLz48cGF0aCBkPSJNMTQgMjBIMTZWMjJI''@;'; put 'put ''MTRWMjBaIi8+PHBhdGggZD0iTTE0IDE2SDE2VjE4SDE0VjE2WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0y''@;'; put 'put ''NyAxMkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEyIDI3IDEyWk0zMy41IDguNTRDMzMuMTcgOC4yIDMyLjcyIDguMDEgMzIuMjUgOEgyOS4yVjExQzI5LjIgMTIuMjEgMjguMjEg''@;'; put 'put ''MTMuMiAyNyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjhIMTEuMlYxMUMxMS4yIDEyLjIxIDEwLjIxIDEzLjIgOSAxMy4yQzcuNzkgMTMuMiA2LjggMTIuMjEgNi44IDExVjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFW''@;'; put 'put ''MzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDgu''@;'; put 'put ''NTRaTTEwLjEgMjYuMUg3LjlWMjMuOUgxMC4xVjI2LjFaTTEwLjEgMjIuMUg3LjlWMTkuOUgxMC4xVjIyLjFaTTEwLjEgMTguMUg3LjlWMTUuOUgxMC4xVjE4LjFaTTE2LjEgMjYuMUgxMy45VjIzLjlIMTYuMVYyNi4xWk0xNi4xIDIyLjFIMTMuOVYxOS45SDE2LjFWMjIuMVpNMTYuMSAxOC4x''@;'; put 'put ''SDEzLjlWMTUuOUgxNi4xVjE4LjFaTTIyLjEgMjYuMUgxOS45VjIzLjlIMjIuMVYyNi4xWk0yMi4xIDIyLjFIMTkuOVYxOS45SDIyLjFWMjIuMVpNMjIuMSAxOC4xSDE5LjlWMTUuOUgyMi4xVjE4LjFaTTI4LjEgMjYuMUgyNS45VjIzLjlIMjguMVYyNi4xWk0yOC4xIDIyLjFIMjUuOVYxOS45''@;'; put 'put ''SDI4LjFWMjIuMVpNMjguMSAxOC4xSDI1LjlWMTUuOUgyOC4xVjE4LjFaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41NSA0IDkgNEM4LjQ1IDQgOCA0LjQ1IDggNVYxMUM4IDExLjU1IDguNDUgMTIgOSAxMloiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI2''@;'; put 'put ''LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAz''@;'; put 'put ''NC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAz''@;'; put 'put ''OSAxLjY0NjIxWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuNzU5NCA4TDE5LjUzNjIgMTAuMDM4N0MxOC44NzAzIDExLjA0MjMgMTguODIwNCAxMi4zMzQyIDE5LjQyMDYgMTMuMzg5M0MyMC4wMjMzIDE0LjQ0ODkgMjEuMTU3NyAxNS4w''@;'; put 'put ''NjA0IDIyLjMzOTUgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjMgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMSAzMC42NiAzMy44MyAzMS4xMiAzMy41IDMxLjQ2QzMzLjE3IDMxLjggMzIuNzIgMzIgMzIuMjUgMzJIMy43NUMzLjI4IDMxLjk5IDIuODMgMzEu''@;'; put 'put ''OCAyLjUgMzEuNDZDMi4xNyAzMS4xMiAyIDMwLjY2IDIgMzAuMTlWOS44MUMyIDkuMzQgMi4xNyA4Ljg4IDIuNSA4LjU0QzIuODMgOC4yIDMuMjggOCAzLjc1IDhINi44VjExQzYuOCAxMi4yMSA3Ljc5IDEzLjIgOSAxMy4yQzEwLjIxIDEzLjIgMTEuMiAxMi4yMSAxMS4yIDExVjhIMjAuNzU5''@;'; put 'put ''NFpNNy45IDIzLjlWMjYuMUgxMC4xVjIzLjlINy45Wk03LjkgMTkuOVYyMi4xSDEwLjFWMTkuOUg3LjlaTTcuOSAxNS45VjE4LjFIMTAuMVYxNS45SDcuOVpNMTMuOSAyNi4xSDE2LjFWMjMuOUgxMy45VjI2LjFaTTEzLjkgMjIuMUgxNi4xVjE5LjlIMTMuOVYyMi4xWk0xMy45IDE4LjFIMTYu''@;'; put 'put ''MVYxNS45SDEzLjlWMTguMVpNMTkuOSAyNi4xSDIyLjFWMjMuOUgxOS45VjI2LjFaTTE5LjkgMjIuMUgyMi4xVjE5LjlIMTkuOVYyMi4xWk0xOS45IDE4LjFIMjIuMVYxNS45SDE5LjlWMTguMVpNMjUuOSAyMy45VjI2LjFIMjguMVYyMy45SDI1LjlaTTI1LjkgMTkuOVYyMi4xSDI4LjFWMTku''@;'; put 'put ''OUgyNS45Wk0yNS45IDE1LjlWMTguMUgyOC4xVjE1LjlIMjUuOVoiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0''@;'; put 'put ''aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9k''@;'; put 'put ''ZCIgZD0iTTM0IDExLjc0NTNDMzIuODY2MiAxMi41MzYyIDMxLjQ4NzIgMTMgMzAgMTNDMjkuNDA2MyAxMyAyOC44Mjk5IDEyLjkyNjEgMjguMjc5NCAxMi43ODdDMjcuOTE4MyAxMy4wNDY3IDI3LjQ3NjIgMTMuMiAyNyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjEwLjY4''@;'; put 'put ''NjJDMjQuMTEyNiA5LjkyMzkzIDIzLjU5MDQgOS4wMDk3IDIzLjI4OTkgOEgxMS4yVjExQzExLjIgMTIuMjEgMTAuMjEgMTMuMiA5IDEzLjJDNy43OSAxMy4yIDYuOCAxMi4yMSA2LjggMTFWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYz''@;'; put 'put ''MC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjExLjc0NTNaTTcuOSAyMy45VjI2LjFIMTAuMVYyMy45''@;'; put 'put ''SDcuOVpNNy45IDE5LjlWMjIuMUgxMC4xVjE5LjlINy45Wk03LjkgMTUuOVYxOC4xSDEwLjFWMTUuOUg3LjlaTTEzLjkgMjYuMUgxNi4xVjIzLjlIMTMuOVYyNi4xWk0xMy45IDIyLjFIMTYuMVYxOS45SDEzLjlWMjIuMVpNMTMuOSAxOC4xSDE2LjFWMTUuOUgxMy45VjE4LjFaTTE5LjkgMjYu''@;'; put 'put ''MUgyMi4xVjIzLjlIMTkuOVYyNi4xWk0xOS45IDIyLjFIMjIuMVYxOS45SDE5LjlWMjIuMVpNMTkuOSAxOC4xSDIyLjFWMTUuOUgxOS45VjE4LjFaTTI1LjkgMjMuOVYyNi4xSDI4LjFWMjMuOUgyNS45Wk0yNS45IDE5LjlWMjIuMUgyOC4xVjE5LjlIMjUuOVpNMjUuOSAxNS45VjE4LjFIMjgu''@;'; put 'put ''MVYxNS45SDI1LjlaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+J31dLFBPZT1bImZvbGRlci1vcGVuIix7b3V0bGluZTonPHBhdGggZD0iTTMz''@;'; put 'put ''LjI2IDEzQzMzLjg0IDEyLjk5IDM0LjM4IDEzLjI2IDM0LjcxIDEzLjc0QzM1IDE0LjE2IDM1LjA4IDE0LjY5IDM0LjkyIDE1LjE4TDMwLjczIDMwLjI4QzMwLjYgMzAuNzIgMzAuMTkgMzEuMDIgMjkuNzMgMzFINC40MUMzLjY2IDMxLjAyIDMuMDMgMzAuNDQgMyAyOS42OVY3QzMgNS45IDMu''@;'; put 'put ''OSA1IDUgNUgxMS40OUMxMi4xMyA1IDEyLjczIDUuMyAxMy4xMSA1LjgyTDE1LjQyIDlIMjkuMzlDMzAuNDkgOSAzMS4zOSA5LjkgMzEuMzkgMTFIMTQuOTFDMTQuNTkgMTEgMTQuMjkgMTAuODUgMTQuMSAxMC41OUwxMS40OSA3SDVWMjVMNy45MiAxNC42NkM3LjkyIDE0LjY2IDcuOTIgMTQu''@;'; put 'put ''NTcgNy45MiAxNC41MkM4LjMyIDEzLjYzIDkuMTkgMTMuMDQgMTAuMTcgMTNIMzMuMjZaTTUuOSAyOUgyOC45NEwzMi44OCAxNC45NUgxMC4xNkMxMC4wMSAxNC45OCA5Ljg3IDE1LjA3IDkuNzggMTUuMTlMNS45IDI5WiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNy45MDQxIDEu''@;'; put 'put ''NjQ2MjFMMjIuMjIyNCAxMS4xMTU5QzIxLjk1MjkgMTEuNDk4NCAyMS45Mjg0IDExLjk5NDkgMjIuMTU5MSAxMi40MDA1QzIyLjM4OTggMTIuODA2IDIyLjgzNjYgMTMuMDUxOSAyMy4zMTUgMTMuMDM2N0gzNC42ODg0QzM1LjE2NjkgMTMuMDUxOSAzNS42MTM2IDEyLjgwNiAzNS44NDQzIDEy''@;'; put 'put ''LjQwMDVDMzYuMDc1IDExLjk5NDkgMzYuMDUwNiAxMS40OTg0IDM1Ljc4MSAxMS4xMTU5TDMwLjA5OTMgMS42NDYyMUMyOS44NzEzIDEuMjY5MTMgMjkuNDUzNSAxLjAzNzM1IDI5LjAwMTcgMS4wMzczNUMyOC41NSAxLjAzNzM1IDI4LjEzMjEgMS4yNjkxMyAyNy45MDQxIDEuNjQ2MjFaIi8+''@;'; put 'put ''PHBhdGggZD0iTTIwLjEwNTggMTFIMTQuOTEwMkMxNC41OTAyIDExIDE0LjI5MDIgMTAuODUgMTQuMTAwMiAxMC41OUwxMS40OTAyIDdINS4wMDAyNFYyNUw3LjkyMDI0IDE0LjY2VjE0LjUyQzguMzIwMjQgMTMuNjMgOS4xOTAyNCAxMy4wNCAxMC4xNzAyIDEzSDIwLjIzMjdDMjAuMjg2MSAx''@;'; put 'put ''My4xMzI2IDIwLjM0ODggMTMuMjYyNyAyMC40MjA4IDEzLjM4OTNDMjAuODgxNSAxNC4xOTkxIDIxLjY1MjcgMTQuNzQ3MiAyMi41MTgzIDE0Ljk1SDEwLjE2MDJDMTAuMDEwMiAxNC45OCA5Ljg3MDI0IDE1LjA3IDkuNzgwMjQgMTUuMTlMNS45MDAyNCAyOUgyOC45NDAyTDMyLjg1NTkgMTUu''@;'; put 'put ''MDM2N0gzNC42NjM5QzM0Ljc2MzYgMTUuMDM4NyAzNC44NjMgMTUuMDM2MiAzNC45NjE3IDE1LjAyOTJDMzQuOTUwMyAxNS4wNzk4IDM0LjkzNjUgMTUuMTMwMSAzNC45MjAyIDE1LjE4TDMwLjczMDIgMzAuMjhDMzAuNjAwMiAzMC43MiAzMC4xOTAyIDMxLjAyIDI5LjczMDIgMzFINC40MTAy''@;'; put 'put ''NEMzLjY2MDI0IDMxLjAyIDMuMDMwMjQgMzAuNDQgMy4wMDAyNCAyOS42OVY3QzMuMDAwMjQgNS45IDMuOTAwMjQgNSA1LjAwMDI0IDVIMTEuNDkwMkMxMi4xMzAyIDUgMTIuNzMwMiA1LjMgMTMuMTEwMiA1LjgyTDE1LjQyMDIgOUgyMS4xNTk3TDIwLjUzNjQgMTAuMDM4N0MyMC4zMzc4IDEw''@;'; put 'put ''LjMzODEgMjAuMTkzOSAxMC42NjMyIDIwLjEwNTggMTFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzEgMTFDMzMuNzYxNCAxMSAzNiA4Ljc2MTQyIDM2IDZDMzYgMy4yMzg1OCAzMy43NjE0IDEgMzEgMUMyOC4yMzg2IDEgMjYgMy4yMzg1OCAyNiA2QzI2IDguNzYxNDIgMjguMjM4''@;'; put 'put ''NiAxMSAzMSAxMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI2LjEwMSAxMUgxNC45MUMxNC41OSAxMSAxNC4yOSAxMC44NSAxNC4xIDEwLjU5TDExLjQ5IDdINVYyNUw3LjkyIDE0LjY2VjE0LjUyQzguMzIgMTMuNjMgOS4xOSAxMy4wNCAx''@;'; put 'put ''MC4xNyAxM0gzMy4yNkMzMy44NCAxMi45OSAzNC4zOCAxMy4yNiAzNC43MSAxMy43NEMzNSAxNC4xNiAzNS4wOCAxNC42OSAzNC45MiAxNS4xOEwzMC43MyAzMC4yOEMzMC42IDMwLjcyIDMwLjE5IDMxLjAyIDI5LjczIDMxSDQuNDFDMy42NiAzMS4wMiAzLjAzIDMwLjQ0IDMgMjkuNjlWN0Mz''@;'; put 'put ''IDUuOSAzLjkgNSA1IDVIMTEuNDlDMTIuMTMgNSAxMi43MyA1LjMgMTMuMTEgNS44MkwxNS40MiA5SDI0LjY3MzZDMjUuMDI5NyA5Ljc0OTYgMjUuNTE1MSAxMC40MjU5IDI2LjEwMSAxMVpNMjguOTQgMjlINS45TDkuNzggMTUuMTlDOS44NyAxNS4wNyAxMC4wMSAxNC45OCAxMC4xNiAxNC45''@;'; put 'put ''NUgzMi44OEwyOC45NCAyOVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzQuNzA1OCAxMy43NEMzNC4zNzQ0IDEzLjI2NDMgMzMuODIyMyAxMi45ODYgMzMuMjM3OSAxM0gxMC4yNTgzQzkuMjY5NTIgMTMuMDQxNCA4LjM4ODU4IDEzLjYyOTMgNy45ODA2IDE0LjUyQzcuOTc3MjkgMTQuNTY2NiA3''@;'; put 'put ''Ljk3NzI5IDE0LjYxMzQgNy45ODA2IDE0LjY2TDUuMDI0NjMgMjVWNy4wMDAwMUgxMS41OTQ2TDE0LjIzNjcgMTAuNTlDMTQuNDI3OSAxMC44NDg0IDE0LjczMjcgMTEuMDAwOCAxNS4wNTY3IDExSDMxLjM0NDlDMzEuMzQ0OSA5Ljg5NTQ0IDMwLjQzODQgOS4wMDAwMSAyOS4zMjAzIDkuMDAw''@;'; put 'put ''MDFIMTUuNTczTDEzLjIzNDUgNS44MjAwMUMxMi44NTIyIDUuMzAzMTggMTIuMjQyNiA0Ljk5ODM1IDExLjU5NDYgNS4wMDAwMUg1LjAyNDYzQzMuOTA2NDYgNS4wMDAwMSAzIDUuODk1NDQgMyA3LjAwMDAxVjI5LjY5QzMuMDMyODkgMzAuNDM4OSAzLjY2ODkxIDMxLjAyMjYgNC40MjczNyAz''@;'; put 'put ''MUgyOS42NjQ0QzMwLjEyOTMgMzEuMDE4MyAzMC41NDY5IDMwLjcyMTMgMzAuNjc2OCAzMC4yOEwzNC45MTg0IDE1LjE4QzM1LjA3ODggMTQuNjkzNSAzNS4wMDAxIDE0LjE2MSAzNC43MDU4IDEzLjc0WiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjcuOTA0MSAxLjY0NjIxTDIyLjIy''@;'; put 'put ''MjQgMTEuMTE1OUMyMS45NTI5IDExLjQ5ODQgMjEuOTI4NCAxMS45OTQ5IDIyLjE1OTEgMTIuNDAwNUMyMi4zODk4IDEyLjgwNiAyMi44MzY2IDEzLjA1MTkgMjMuMzE1IDEzLjAzNjdIMzQuNjg4NEMzNS4xNjY5IDEzLjA1MTkgMzUuNjEzNiAxMi44MDYgMzUuODQ0MyAxMi40MDA1QzM2LjA3''@;'; put 'put ''NSAxMS45OTQ5IDM2LjA1MDYgMTEuNDk4NCAzNS43ODEgMTEuMTE1OUwzMC4wOTkzIDEuNjQ2MjFDMjkuODcxMyAxLjI2OTEzIDI5LjQ1MzUgMS4wMzczNSAyOS4wMDE3IDEuMDM3MzVDMjguNTUgMS4wMzczNSAyOC4xMzIxIDEuMjY5MTMgMjcuOTA0MSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0y''@;'; put 'put ''MC4yMzI1IDEzQzIwLjI4NTggMTMuMTMyNiAyMC4zNDg1IDEzLjI2MjcgMjAuNDIwNiAxMy4zODkzQzIxLjAyMzMgMTQuNDQ4OSAyMi4xNTc3IDE1LjA2MDQgMjMuMzM5NSAxNS4wMzY3SDM0LjY2MzdDMzQuNzYyOSAxNS4wMzg3IDM0Ljg2MTggMTUuMDM2MiAzNC45NjAxIDE1LjAyOTNDMzQu''@;'; put 'put ''OTQ4NyAxNS4wNzk5IDM0LjkzNDggMTUuMTMwMiAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42NjQ0IDMxSDQuNDI3MzdDMy42Njg5MSAzMS4wMjI2IDMuMDMyODkgMzAuNDM4OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0''@;'; put 'put ''IDMuOTA2NDYgNS4wMDAwMSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41NzMgOS4wMDAwMUgyMS4xNTk0TDIwLjUzNjIgMTAuMDM4N0MyMC4zMzc1IDEwLjMzODEgMjAuMTkzNyAxMC42NjMyIDIwLjEw''@;'; put 'put ''NTYgMTFIMTUuMDU2N0MxNC43MzI3IDExLjAwMDggMTQuNDI3OSAxMC44NDg0IDE0LjIzNjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2IDE0LjY2QzcuOTc3MjkgMTQuNjEzNCA3Ljk3NzI5IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2''@;'; put 'put ''OTUyIDEzLjA0MTQgMTAuMjU4MyAxM0gyMC4yMzI1WiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0zMSAxMUMzMy43NjE0IDExIDM2IDguNzYxNDIgMzYgNkMzNiAzLjIzODU4IDMzLjc2MTQgMSAzMSAxQzI4LjIzODYgMSAyNiAzLjIzODU4IDI2IDZDMjYgOC43NjE0MiAyOC4yMzg2IDEx''@;'; put 'put ''IDMxIDExWiIvPjxwYXRoIGQ9Ik0yNC42NzM2IDkuMDAwMDFDMjUuMDI5NyA5Ljc0OTYxIDI1LjUxNTEgMTAuNDI1OSAyNi4xMDEgMTFIMTUuMDU2N0MxNC43MzI3IDExLjAwMDggMTQuNDI3OSAxMC44NDg0IDE0LjIzNjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2''@;'; put 'put ''IDE0LjY2QzcuOTc3MjkgMTQuNjEzNCA3Ljk3NzI5IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2OTUyIDEzLjA0MTQgMTAuMjU4MyAxM0gzMy4yMzc5QzMzLjgyMjMgMTIuOTg2IDM0LjM3NDQgMTMuMjY0MyAzNC43MDU4IDEzLjc0QzM1LjAwMDEgMTQuMTYxIDM1''@;'; put 'put ''LjA3ODggMTQuNjkzNSAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42NjQ0IDMxSDQuNDI3MzdDMy42Njg5MSAzMS4wMjI2IDMuMDMyODkgMzAuNDM4OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0IDMuOTA2NDYgNS4wMDAw''@;'; put 'put ''MSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41NzMgOS4wMDAwMUgyNC42NzM2WiIvPid9XSxGT2U9WyJtaW51cyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNiAxN0gxMEM5LjQ0NzcyIDE3IDkgMTcuNDQ3''@;'; put 'put ''NyA5IDE4QzkgMTguNTUyMyA5LjQ0NzcyIDE5IDEwIDE5SDI2QzI2LjU1MjMgMTkgMjcgMTguNTUyMyAyNyAxOEMyNyAxNy40NDc3IDI2LjU1MjMgMTcgMjYgMTdaIi8+J31dLEhPZT1bInBsdXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjkuOTk5OSAxN0gxOC45OTk5VjZDMTguOTk5OSA1LjQ0''@;'; put 'put ''NzcyIDE4LjU1MjIgNSAxNy45OTk5IDVDMTcuNDQ3NiA1IDE2Ljk5OTkgNS40NDc3MiAxNi45OTk5IDZWMTdINS45OTk5MkM1LjQ0NzY0IDE3IDQuOTk5OTIgMTcuNDQ3NyA0Ljk5OTkyIDE4QzQuOTg5OTQgMTguMjYzIDUuMDk0MjcgMTguNTE3NCA1LjI4NiAxOC42OTc2QzUuNDc3NzMgMTgu''@;'; put 'put ''ODc3OCA1LjczODA5IDE4Ljk2NjIgNS45OTk5MiAxOC45NEgxNi45OTk5VjMwQzE2Ljk5OTkgMzAuNTUyMyAxNy40NDc2IDMxIDE3Ljk5OTkgMzFDMTguNTUyMiAzMSAxOC45OTk5IDMwLjU1MjMgMTguOTk5OSAzMFYxOUgyOS45OTk5QzMwLjU1MjIgMTkgMzAuOTk5OSAxOC41NTIzIDMwLjk5''@;'; put 'put ''OTkgMThDMzAuOTk5OSAxNy40NDc3IDMwLjU1MjIgMTcgMjkuOTk5OSAxN1oiLz4nfV0sTk9lPVsiZXllLWhpZGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjQuNTQ5NSAyMC40MzAxQzI0LjgyOTQgMTkuNjcwMSAyNC45ODkzIDE4Ljg2MDEgMjQuOTg5MyAxOC4wMDAxQzI0Ljk4OTMgMTQuMTQw''@;'; put 'put ''MSAyMS44NTA4IDExLjAwMDEgMTcuOTkyNiAxMS4wMDAxQzE3LjEzMyAxMS4wMDAxIDE2LjMyMzMgMTEuMTYwMSAxNS41NjM3IDExLjQ0MDFMMTcuMjAyOSAxMy4wODAxQzE3LjQ2MjggMTMuMDQwMSAxNy43MjI3IDEzLjAwMDEgMTcuOTkyNiAxMy4wMDAxQzIwLjc1MTMgMTMuMDAwMSAyMi45''@;'; put 'put ''OTAyIDE1LjI0MDEgMjIuOTkwMiAxOC4wMDAxQzIyLjk5MDIgMTguMjcwMSAyMi45NTAyIDE4LjUzMDEgMjIuOTEwMyAxOC43OTAxTDI0LjU0OTUgMjAuNDMwMVpNMTcuOTkyNiA5LjAwMDA2QzIzLjk4OTggOS4wMDAwNiAyOS4zOTcyIDEyLjUyMDEgMzEuODk2IDE4LjAwMDFDMzAuODk2NSAy''@;'; put 'put ''MC4xOTAxIDI5LjQyNzIgMjIuMDYwMSAyNy42NDggMjMuNTMwMUwyOS4wNjc0IDI0Ljk1MDFDMzEuMTI2NCAyMy4yMjAxIDMyLjgwNTYgMjAuOTkwMSAzMy45MTUxIDE4LjM5MDFDMzQuMDI1IDE4LjE0MDEgMzQuMDI1IDE3Ljg2MDEgMzMuOTE1MSAxNy42MTAxQzMxLjE4NjQgMTEuMTYwMSAy''@;'; put 'put ''NC45MzkzIDcuMDAwMDYgMTguMDAyNiA3LjAwMDA2QzE1Ljk3MzUgNy4wMDAwNiAxNC4wMDQ0IDcuMzcwMDYgMTIuMTY1MyA4LjAzMDA2TDEzLjc0NDYgOS42MTAwNkMxNS4xMDM5IDkuMjEwMDYgMTYuNTMzMiA5LjAwMDA2IDE4LjAwMjYgOS4wMDAwNkgxNy45OTI2Wk0zLjcwOTI2IDIuMjkw''@;'; put 'put ''MDZDMy4zMTk0NCAxLjkwMDA2IDIuNjc5NzQgMS45MDAwNiAyLjI4OTkyIDIuMjkwMDZDMS45MDAxIDIuNjgwMDYgMS45MDAxIDMuMzIwMDYgMi4yODk5MiAzLjcxMDA2TDguNDc3MDIgOS45MDAwNkM1LjcwODMyIDExLjc0MDEgMy40NDkzOCAxNC4zODAxIDIuMDgwMDIgMTcuNjEwMUMxLjk3''@;'; put 'put ''MDA3IDE3Ljg2MDEgMS45NzAwNyAxOC4xNDAxIDIuMDgwMDIgMTguMzkwMUM0LjgwODc0IDI0Ljg0MDEgMTEuMDU1OCAyOS4wMDAxIDE3Ljk5MjYgMjkuMDAwMUMyMC43NDEzIDI5LjAwMDEgMjMuMzcgMjguMzQwMSAyNS43MTg5IDI3LjE1MDFMMzIuMjc1OSAzMy43MTAxQzMyLjQ3NTggMzMu''@;'; put 'put ''OTEwMSAzMi43MjU3IDM0LjAwMDEgMzIuOTg1NSAzNC4wMDAxQzMzLjI0NTQgMzQuMDAwMSAzMy40OTUzIDMzLjkwMDEgMzMuNjk1MiAzMy43MTAxQzM0LjA4NSAzMy4zMjAxIDM0LjA4NSAzMi42OTAxIDMzLjY5NTIgMzIuMzAwMUwzLjcwOTI2IDIuMjkwMDZaTTEzLjgzNDUgMTUuMjUwMUwy''@;'; put 'put ''MC43NDEzIDIyLjE2MDFDMTkuOTUxNiAyMi42ODAxIDE5LjAxMjEgMjMuMDAwMSAxNy45OTI2IDIzLjAwMDFDMTUuMjMzOSAyMy4wMDAxIDEyLjk5NDkgMjAuNzYwMSAxMi45OTQ5IDE4LjAwMDFDMTIuOTk0OSAxNi45ODAxIDEzLjMwNDggMTYuMDQwMSAxMy44MzQ1IDE1LjI1MDFaTTE3Ljk5''@;'; put 'put ''MjYgMjcuMDAwMUMxMS45OTU0IDI3LjAwMDEgNi41ODc5MSAyMy40ODAxIDQuMDg5MDggMTguMDAwMUM1LjM2ODQ4IDE1LjE5MDEgNy40Mjc1MSAxMi45MTAxIDkuOTI2MzQgMTEuMzQwMUwxMi40MDUyIDEzLjgyMDFDMTEuNTI1NiAxNC45OTAxIDEwLjk5NTggMTYuNDMwMSAxMC45OTU4IDE4''@;'; put 'put ''LjAwMDFDMTAuOTk1OCAyMS44NjAxIDE0LjEzNDQgMjUuMDAwMSAxNy45OTI2IDI1LjAwMDFDMTkuNTYxOCAyNS4wMDAxIDIxLjAwMTIgMjQuNDcwMSAyMi4xNzA2IDIzLjU5MDFMMjQuMjI5NiAyNS42NTAxQzIyLjMxMDUgMjYuNTIwMSAyMC4xOTE1IDI3LjAwMDEgMTcuOTkyNiAyNy4wMDAx''@;'; put 'put ''WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNy45OTI2IDkuMDAwMDZDMjMuOTg5OCA5LjAwMDA2IDI5LjM5NzIgMTIuNTIwMSAzMS44OTYgMTguMDAwMUMzMC44OTY1IDIwLjE5MDEgMjkuNDI3MiAyMi4wNjAxIDI3LjY0OCAyMy41MzAxTDI5LjA2NzQgMjQuOTUwMUMzMS4xMjY0IDIzLjIyMDEg''@;'; put 'put ''MzIuODA1NiAyMC45OTAxIDMzLjkxNTEgMTguMzkwMUMzNC4wMjUgMTguMTQwMSAzNC4wMjUgMTcuODYwMSAzMy45MTUxIDE3LjYxMDFDMzEuMTg2NCAxMS4xNjAxIDI0LjkzOTMgNy4wMDAwNiAxOC4wMDI2IDcuMDAwMDZDMTUuOTczNSA3LjAwMDA2IDE0LjAwNDQgNy4zNzAwNiAxMi4xNjUz''@;'; put 'put ''IDguMDMwMDZMMTMuNzQ0NiA5LjYxMDA2QzE1LjEwMzkgOS4yMTAwNiAxNi41MzMyIDkuMDAwMDYgMTguMDAyNiA5LjAwMDA2SDE3Ljk5MjZaTTMuNzA5MjYgMi4yOTAwNkMzLjMxOTQ0IDEuOTAwMDYgMi42Nzk3NCAxLjkwMDA2IDIuMjg5OTIgMi4yOTAwNkMxLjkwMDEgMi42ODAwNiAxLjkw''@;'; put 'put ''MDEgMy4zMjAwNiAyLjI4OTkyIDMuNzEwMDZMOC40NzcwMiA5LjkwMDA2QzUuNzA4MzIgMTEuNzQwMSAzLjQ0OTM4IDE0LjM4MDEgMi4wODAwMiAxNy42MTAxQzEuOTcwMDcgMTcuODYwMSAxLjk3MDA3IDE4LjE0MDEgMi4wODAwMiAxOC4zOTAxQzQuODA4NzQgMjQuODQwMSAxMS4wNTU4IDI5''@;'; put 'put ''LjAwMDEgMTcuOTkyNiAyOS4wMDAxQzIwLjc0MTMgMjkuMDAwMSAyMy4zNyAyOC4zNDAxIDI1LjcxODkgMjcuMTUwMUwzMi4yNzU5IDMzLjcxMDFDMzIuNDc1OCAzMy45MTAxIDMyLjcyNTcgMzQuMDAwMSAzMi45ODU1IDM0LjAwMDFDMzMuMjQ1NCAzNC4wMDAxIDMzLjQ5NTMgMzMuOTAwMSAz''@;'; put 'put ''My42OTUyIDMzLjcxMDFDMzQuMDg1IDMzLjMyMDEgMzQuMDg1IDMyLjY5MDEgMzMuNjk1MiAzMi4zMDAxTDMuNzA5MjYgMi4yOTAwNlpNMTcuOTkyNiAyNy4wMDAxQzExLjk5NTQgMjcuMDAwMSA2LjU4NzkxIDIzLjQ4MDEgNC4wODkwOCAxOC4wMDAxQzUuMzY4NDggMTUuMTkwMSA3LjQyNzUx''@;'; put 'put ''IDEyLjkxMDEgOS45MjYzNCAxMS4zNDAxTDEyLjQwNTIgMTMuODIwMUMxMS41MjU2IDE0Ljk5MDEgMTAuOTk1OCAxNi40MzAxIDEwLjk5NTggMTguMDAwMUMxMC45OTU4IDIxLjg2MDEgMTQuMTM0NCAyNS4wMDAxIDE3Ljk5MjYgMjUuMDAwMUMxOS41NjE4IDI1LjAwMDEgMjEuMDAxMiAyNC40''@;'; put 'put ''NzAxIDIyLjE3MDYgMjMuNTkwMUwyNC4yMjk2IDI1LjY1MDFDMjIuMzEwNSAyNi41MjAxIDIwLjE5MTUgMjcuMDAwMSAxNy45OTI2IDI3LjAwMDFaTTE1LjU2MzcgMTEuNDQwMUwyNC41NDk1IDIwLjQzMDFDMjQuODI5NCAxOS42NzAxIDI0Ljk4OTMgMTguODYwMSAyNC45ODkzIDE4LjAwMDFD''@;'; put 'put ''MjQuOTg5MyAxNC4xNDAxIDIxLjg1MDggMTEuMDAwMSAxNy45OTI2IDExLjAwMDFDMTcuMTMzIDExLjAwMDEgMTYuMzIzMyAxMS4xNjAxIDE1LjU2MzcgMTEuNDQwMVoiLz4nfV0sVk9lPVsiZXllIix7b3V0bGluZTonPHBhdGggZD0iTTE3Ljk5NzYgMTFDMTQuMTM4MiAxMSAxMC45OTg3IDE0''@;'; put 'put ''LjE0IDEwLjk5ODcgMThDMTAuOTk4NyAyMS44NiAxNC4xMzgyIDI1IDE3Ljk5NzYgMjVDMjEuODU3IDI1IDI0Ljk5NjUgMjEuODYgMjQuOTk2NSAxOEMyNC45OTY1IDE0LjE0IDIxLjg1NyAxMSAxNy45OTc2IDExWk0xNy45OTc2IDIzQzE1LjIzOCAyMyAxMi45OTgzIDIwLjc2IDEyLjk5ODMg''@;'; put 'put ''MThDMTIuOTk4MyAxNS4yNCAxNS4yMzggMTMgMTcuOTk3NiAxM0MyMC43NTcxIDEzIDIyLjk5NjggMTUuMjQgMjIuOTk2OCAxOEMyMi45OTY4IDIwLjc2IDIwLjc1NzEgMjMgMTcuOTk3NiAyM1pNMzMuOTE1MSAxNy42MUMzMS4xODU1IDExLjE3IDI0LjkzNjUgNyAxNy45OTc2IDdDMTEuMDU4''@;'; put 'put ''NiA3IDQuODA5NjIgMTEuMTcgMi4wODAwNSAxNy42MUMxLjk3MDA2IDE3Ljg2IDEuOTcwMDYgMTguMTQgMi4wODAwNSAxOC4zOUM0LjgwOTYyIDI0Ljg0IDExLjA1ODYgMjkgMTcuOTk3NiAyOUMyNC45MzY1IDI5IDMxLjE4NTUgMjQuODMgMzMuOTE1MSAxOC4zOUMzNC4wMjUxIDE4LjE0IDM0''@;'; put 'put ''LjAyNTEgMTcuODYgMzMuOTE1MSAxNy42MVpNMTcuOTk3NiAyN0MxMS45OTg1IDI3IDYuNTg5MzQgMjMuNDggNC4wODk3MyAxOEM2LjU4OTM0IDEyLjUyIDExLjk5ODUgOSAxNy45OTc2IDlDMjMuOTk2NiA5IDI5LjQwNTggMTIuNTIgMzEuOTA1NCAxOEMyOS40MDU4IDIzLjQ4IDIzLjk5NjYg''@;'; put 'put ''MjcgMTcuOTk3NiAyN1oiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTcuOTk3NiAxMUMxNC4xMzgyIDExIDEwLjk5ODcgMTQuMTQgMTAuOTk4NyAxOEMxMC45OTg3IDIxLjg2IDE0LjEzODIgMjUgMTcuOTk3NiAyNUMyMS44NTcgMjUgMjQuOTk2NSAyMS44NiAyNC45OTY1IDE4QzI0Ljk5NjUgMTQu''@;'; put 'put ''MTQgMjEuODU3IDExIDE3Ljk5NzYgMTFaTTMzLjkxNTEgMTcuNjFDMzEuMTg1NSAxMS4xNyAyNC45MzY1IDcgMTcuOTk3NiA3QzExLjA1ODYgNyA0LjgwOTYyIDExLjE3IDIuMDgwMDUgMTcuNjFDMS45NzAwNiAxNy44NiAxLjk3MDA2IDE4LjE0IDIuMDgwMDUgMTguMzlDNC44MDk2MiAyNC44''@;'; put 'put ''NCAxMS4wNTg2IDI5IDE3Ljk5NzYgMjlDMjQuOTM2NSAyOSAzMS4xODU1IDI0LjgzIDMzLjkxNTEgMTguMzlDMzQuMDI1MSAxOC4xNCAzNC4wMjUxIDE3Ljg2IDMzLjkxNTEgMTcuNjFaTTE3Ljk5NzYgMjdDMTEuOTk4NSAyNyA2LjU4OTM0IDIzLjQ4IDQuMDg5NzMgMThDNi41ODkzNCAxMi41''@;'; put 'put ''MiAxMS45OTg1IDkgMTcuOTk3NiA5QzIzLjk5NjYgOSAyOS40MDU4IDEyLjUyIDMxLjkwNTQgMThDMjkuNDA1OCAyMy40OCAyMy45OTY2IDI3IDE3Ljk5NzYgMjdaIi8+J31dLEJPZT1bImVsbGlwc2lzLXZlcnRpY2FsIix7b3V0bGluZTonPHBhdGggZD0iTTIxLjEwMDEgNC45QzIxLjEwMDEg''@;'; put 'put ''Ni41MDE2MyAxOS43NTcgNy44IDE4LjEwMDEgNy44QzE2LjQ0MzIgNy44IDE1LjEwMDEgNi41MDE2MyAxNS4xMDAxIDQuOUMxNS4xMDAxIDMuMjk4MzcgMTYuNDQzMiAyIDE4LjEwMDEgMkMxOS43NTcgMiAyMS4xMDAxIDMuMjk4MzcgMjEuMTAwMSA0LjlaIi8+PHBhdGggZD0iTTE4LjEwMDEg''@;'; put 'put ''MjAuOUMxOS43NTcgMjAuOSAyMS4xMDAxIDE5LjYwMTYgMjEuMTAwMSAxOEMyMS4xMDAxIDE2LjM5ODQgMTkuNzU3IDE1LjEgMTguMTAwMSAxNS4xQzE2LjQ0MzIgMTUuMSAxNS4xMDAxIDE2LjM5ODQgMTUuMTAwMSAxOEMxNS4xMDAxIDE5LjYwMTYgMTYuNDQzMiAyMC45IDE4LjEwMDEgMjAu''@;'; put 'put ''OVoiLz48cGF0aCBkPSJNMTguMTAwMSAzNEMxOS43NTcgMzQgMjEuMTAwMSAzMi43MDE2IDIxLjEwMDEgMzEuMUMyMS4xMDAxIDI5LjQ5ODQgMTkuNzU3IDI4LjIgMTguMTAwMSAyOC4yQzE2LjQ0MzIgMjguMiAxNS4xMDAxIDI5LjQ5ODQgMTUuMTAwMSAzMS4xQzE1LjEwMDEgMzIuNzAxNiAx''@;'; put 'put ''Ni40NDMyIDM0IDE4LjEwMDEgMzRaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMjEuMTAwMSA0LjlDMjEuMTAwMSA2LjUwMTYzIDE5Ljc1NyA3LjggMTguMTAwMSA3LjhDMTYuNDQzMiA3LjggMTUuMTAwMSA2LjUwMTYzIDE1LjEwMDEgNC45QzE1LjEwMDEgMy4yOTgzNyAxNi40NDMy''@;'; put 'put ''IDIgMTguMTAwMSAyQzE5Ljc1NyAyIDIxLjEwMDEgMy4yOTgzNyAyMS4xMDAxIDQuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAyMC45QzE5Ljc1NyAyMC45IDIxLjEwMDEgMTkuNjAxNiAyMS4xMDAxIDE4QzIxLjEwMDEgMTYuMzk4NCAxOS43NTcgMTUuMSAxOC4xMDAxIDE1LjFDMTYuNDQzMiAx''@;'; put 'put ''NS4xIDE1LjEwMDEgMTYuMzk4NCAxNS4xMDAxIDE4QzE1LjEwMDEgMTkuNjAxNiAxNi40NDMyIDIwLjkgMTguMTAwMSAyMC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDM0QzE5Ljc1NyAzNCAyMS4xMDAxIDMyLjcwMTYgMjEuMTAwMSAzMS4xQzIxLjEwMDEgMjkuNDk4NCAxOS43NTcgMjguMiAx''@;'; put 'put ''OC4xMDAxIDI4LjJDMTYuNDQzMiAyOC4yIDE1LjEwMDEgMjkuNDk4NCAxNS4xMDAxIDMxLjFDMTUuMTAwMSAzMi43MDE2IDE2LjQ0MzIgMzQgMTguMTAwMSAzNFoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMy''@;'; put 'put ''Ny4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sak9lPVsidmlldy1jb2x1bW5zIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMSA1SDVDMy44OTU0MyA1IDMgNS44OTU0''@;'; put 'put ''MyAzIDdWMjlDMyAzMC4xMDQ2IDMuODk1NDMgMzEgNSAzMUgzMUMzMi4xMDQ2IDMxIDMzIDMwLjEwNDYgMzMgMjlWN0MzMyA1Ljg5NTQzIDMyLjEwNDYgNSAzMSA1Wk0xMyAyOUg1VjdIMTNWMjlaTTE1IDI5SDIzVjdIMTVWMjlaIi8+J31dLHpPZT1bImFycm93Iix7b3V0bGluZTonPHBhdGgg''@;'; put 'put ''ZD0iTTI3LjY1MDQgMTUuNjM0MUwxNy45OTUxIDZMOC4zMzk4MSAxNS42MzQxQzguMDI4NjkgMTUuODcxNyA3Ljg4NDMyIDE2LjI2OTUgNy45NzAzIDE2LjY1MjFDOC4wNTYyOSAxNy4wMzQ3IDguMzU2ODUgMTcuMzMxOSA4LjczOTUyIDE3LjQxMjdDOS4xMjIxOSAxNy40OTM1IDkuNTE2Njcg''@;'; put 'put ''MTcuMzQzIDkuNzQ5MTIgMTcuMDI3NkwxNi45OTU2IDkuODE5NTVWMjguOTk3NUMxNi45OTU2IDI5LjU1MTIgMTcuNDQzMSAzMCAxNy45OTUxIDMwQzE4LjU0NzEgMzAgMTguOTk0NiAyOS41NTEyIDE4Ljk5NDYgMjguOTk3NVY5LjgxOTU1TDI2LjI0MTEgMTcuMDI3NkMyNi42MzMgMTcuNDE3''@;'; put 'put ''OSAyNy4yNjYyIDE3LjQxNTcgMjcuNjU1NCAxNy4wMjI2QzI4LjA0NDUgMTYuNjI5NSAyOC4wNDIzIDE1Ljk5NDMgMjcuNjUwNCAxNS42MDRWMTUuNjM0MVoiLz4nfV0sVU9lPVsic3RlcC1mb3J3YXJkLTIiLHtvdXRsaW5lOic8cGF0aCBkPSJNNy4wODg5MyA2LjUyMDAzQzYuOTI2NDMgNi42''@;'; put 'put ''NzY0NSA2Ljc5NzM0IDYuODYzMTUgNi43MDkyMSA3LjA2OTIxQzYuNjIxMDggNy4yNzUyNiA2LjU3NTY4IDcuNDk2NTIgNi41NzU2OCA3LjcyMDAzQzYuNTc1NjggNy45NDM1MyA2LjYyMTA4IDguMTY0NzkgNi43MDkyMSA4LjM3MDg1QzYuNzk3MzQgOC41NzY5IDYuOTI2NDMgOC43NjM2MSA3''@;'; put 'put ''LjA4ODkzIDguOTIwMDNMMTYuNjg3MiAxOEw3LjEyOTY0IDI3LjA4QzYuODI5NzcgMjcuMzk5MSA2LjY2NTU0IDI3LjgxODggNi42NzA2NSAyOC4yNTNDNi42NzU3NiAyOC42ODcyIDYuODQ5ODIgMjkuMTAzMSA3LjE1NzEyIDI5LjQxNTJDNy40NjQ0MiAyOS43Mjc0IDcuODgxNjYgMjkuOTEy''@;'; put 'put ''MSA4LjMyMzIzIDI5LjkzMTZDOC43NjQ4IDI5Ljk1MTEgOS4xOTcyMSAyOS44MDM4IDkuNTMxNzYgMjkuNTJMMjEuNjY0NSAxOEw5LjUzMTc2IDYuNDcwMDNDOS4zNjg1MSA2LjMxNDgyIDkuMTc1NTkgNi4xOTI5MyA4Ljk2NDEzIDYuMTExMzdDOC43NTI2NyA2LjAyOTgyIDguNTI2ODYgNS45''@;'; put 'put ''OTAyMiA4LjI5OTc0IDUuOTk0ODdDOC4wNzI2MiA1Ljk5OTUyIDcuODQ4NjkgNi4wNDgzMiA3LjY0MDg3IDYuMTM4NDZDNy40MzMwNSA2LjIyODU5IDcuMjQ1NDYgNi4zNTgyOCA3LjA4ODkzIDYuNTIwMDNaIi8+PHBhdGggZD0iTTI2Ljg0NTMgNUMyNi4zODY0IDUgMjUuOTQ2MyA1LjE3OTEx''@;'; put 'put ''IDI1LjYyMTggNS40OTc5MkMyNS4yOTczIDUuODE2NzMgMjUuMTE1IDYuMjQ5MTMgMjUuMTE1IDYuN1YyOS4zQzI1LjExNSAyOS43NTA5IDI1LjI5NzMgMzAuMTgzMyAyNS42MjE4IDMwLjUwMjFDMjUuOTQ2MyAzMC44MjA5IDI2LjM4NjQgMzEgMjYuODQ1MyAzMUMyNy4zMDQzIDMxIDI3Ljc0''@;'; put 'put ''NDQgMzAuODIwOSAyOC4wNjg5IDMwLjUwMjFDMjguMzkzNCAzMC4xODMzIDI4LjU3NTcgMjkuNzUwOSAyOC41NzU3IDI5LjNWNi43QzI4LjU3NTcgNi4yNDkxMyAyOC4zOTM0IDUuODE2NzMgMjguMDY4OSA1LjQ5NzkyQzI3Ljc0NDQgNS4xNzkxMSAyNy4zMDQzIDUgMjYuODQ1MyA1WiIvPid9''@;'; put 'put ''XSxaT2U9WyJmaWx0ZXItZ3JpZC1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2''@;'; put 'put ''NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAy''@;'; put 'put ''MS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIgMTggMzJaTTE3IDI2Ljg2TDE1IDI1Ljg2VjIwLjY4TDguNDIgMTRDOC4xNTY3OSAxMy43MzMgOC4wMDY0IDEzLjM3NDkgOCAxM1YxMkM4IDExLjQ0NzcgOC40NDc3MiAxMSA5IDExSDI3''@;'; put 'put ''QzI3LjU1MjMgMTEgMjggMTEuNDQ3NyAyOCAxMlYxM0MyNy45OTM2IDEzLjM3NDkgMjcuODQzMiAxMy43MzMgMjcuNTggMTRMMjEgMjAuNjhWMjlMMTkgMjhMMTkuMDMgMjAuMjdDMTkuMDMxMSAyMC4wMDc3IDE5LjEzNTMgMTkuNzU2MyAxOS4zMiAxOS41N0wyNS43OSAxM0gxMC4yM0wxNi43''@;'; put 'put ''MSAxOS41N0MxNi44OTQ3IDE5Ljc1NjMgMTYuOTk4OSAyMC4wMDc3IDE3IDIwLjI3VjI2Ljg2WiIvPicsc29saWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQg''@;'; put 'put ''MzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRD''@;'; put 'put ''MjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAzMlpNOCAxMi4xMlYxMUgyNy45OFYxMi4xNEMyNy45NzgxIDEyLjI3MTkgMjcuOTI0MiAxMi4zOTc3IDI3LjgzIDEyLjQ5TDIw''@;'; put 'put ''LjcxIDE5Ljc0QzIwLjYwODEgMTkuODI5OSAyMC41NDM4IDE5Ljk1NDggMjAuNTMgMjAuMDlWMjguNDhDMjAuNTMwMyAyOC42NTI4IDIwLjQ0MTUgMjguODEzNCAyMC4yOTUgMjguOTA1QzIwLjE0ODUgMjguOTk2NiAxOS45NjUxIDI5LjAwNiAxOS44MSAyOC45M0wxNS44NiAyNy41MkMxNS42''@;'; put 'put ''ODgzIDI3LjQzNTkgMTUuNTc5NiAyNy4yNjEyIDE1LjU4IDI3LjA3VjIwLjE4QzE1LjU3ODEgMjAuMDQ4MSAxNS41MjQyIDE5LjkyMjMgMTUuNDMgMTkuODNMOC4xNSAxMi40N0M4LjA1NTc5IDEyLjM3NzcgOC4wMDE4OCAxMi4yNTE5IDggMTIuMTJaIi8+J31dLFdPZT1bImZpbHRlci1ncmlk''@;'; put 'put ''Iix7b3V0bGluZTonPHBhdGggZD0iTTE1IDIzLjg2TDE3IDI0Ljg2VjE4LjI3QzE2Ljk5ODkgMTguMDA3NyAxNi44OTQ3IDE3Ljc1NjMgMTYuNzEgMTcuNTdMMTAuMjMgMTFIMjUuNzlMMTkuMzIgMTcuNTdDMTkuMTM1MyAxNy43NTYzIDE5LjAzMTEgMTguMDA3NyAxOS4wMyAxOC4yN0wxOSAy''@;'; put 'put ''NkwyMSAyN1YxOC42OEwyNy41OCAxMkMyNy44NDMyIDExLjczMyAyNy45OTM2IDExLjM3NDkgMjggMTFWMTBDMjggOS40NDc3MiAyNy41NTIzIDkgMjcgOUg5QzguNDQ3NzIgOSA4IDkuNDQ3NzIgOCAxMFYxMUM4LjAwNjQgMTEuMzc0OSA4LjE1Njc5IDExLjczMyA4LjQyIDEyTDE1IDE4LjY4''@;'; put 'put ''VjIzLjg2WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04IDlWMTAuMTIxMkM4LjAwMTg4IDEwLjI1MzIgOC4wNTU4NSAxMC4zNzkxIDguMTUwMTUgMTAuNDcxNkwxNS40Mzc0IDE3LjgzOTNDMTUuNTMxNyAxNy45MzE3IDE1LjU4NTcgMTguMDU3NyAxNS41ODc2IDE4LjE4OTdWMjUuMDg3QzE1LjU4''@;'; put 'put ''NzIgMjUuMjc4NCAxNS42OTYgMjUuNDUzMiAxNS44Njc5IDI1LjUzNzVMMTkuODIxOCAyNi45NDg5QzE5Ljk3NzEgMjcuMDI1IDIwLjE2MDcgMjcuMDE1NiAyMC4zMDczIDI2LjkyMzlDMjAuNDUzOSAyNi44MzIzIDIwLjU0MjkgMjYuNjcxNCAyMC41NDI1IDI2LjQ5ODVWMTguMDk5NkMyMC41''@;'; put 'put ''NTY0IDE3Ljk2NDMgMjAuNjIwNyAxNy44MzkyIDIwLjcyMjcgMTcuNzQ5MkwyNy44NDk4IDEwLjQ5MTZDMjcuOTQ0MiAxMC4zOTkyIDI3Ljk5ODEgMTAuMjczMiAyOCAxMC4xNDEyVjlIOFoiLz4nfV0sc1k9WyJlcnJvci1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAyMi42MUMx''@;'; put 'put ''Ny40NDc3IDIyLjYxIDE3IDIyLjE2MjMgMTcgMjEuNjFWOS42MUMxNyA5LjA1NzcyIDE3LjQ0NzcgOC42MSAxOCA4LjYxQzE4LjU1MjMgOC42MSAxOSA5LjA1NzcyIDE5IDkuNjFWMjEuNjFDMTkgMjIuMTYyMyAxOC41NTIzIDIyLjYxIDE4IDIyLjYxWiIvPjxwYXRoIGQ9Ik0xOS4zMyAyNi4w''@;'; put 'put ''NkMxOS4zMyAyNi43OTQ1IDE4LjczNDUgMjcuMzkgMTggMjcuMzlDMTcuMjY1NSAyNy4zOSAxNi42NyAyNi43OTQ1IDE2LjY3IDI2LjA2QzE2LjY3IDI1LjMyNTUgMTcuMjY1NSAyNC43MyAxOCAyNC43M0MxOC43MzQ1IDI0LjczIDE5LjMzIDI1LjMyNTUgMTkuMzMgMjYuMDZaIi8+PHBhdGgg''@;'; put 'put ''ZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzIyLjI0MzUgMzQgMjYuMzEzMSAzMi4zMTQzIDI5LjMxMzcgMjkuMzEzN0MzMi4zMTQzIDI2LjMxMzEgMzQgMjIuMjQzNSAzNCAxOEMzNCA5LjE2MzQ0IDI2''@;'; put 'put ''LjgzNjYgMiAxOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOFpNNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyNS43MzIgMjUuNzMyIDMyIDE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0x''@;'; put 'put ''OCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYuMzEgMzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQgMjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4IDJaTTE3IDkuNjFDMTcgOS4wNiAxNy40NSA4LjYxIDE4IDguNjFDMTgu''@;'; put 'put ''NTUgOC42MSAxOSA5LjA2IDE5IDkuNjFWMjEuNjFDMTkgMjIuMTYgMTguNTUgMjIuNjEgMTggMjIuNjFDMTcuNDUgMjIuNjEgMTcgMjIuMTYgMTcgMjEuNjFWOS42MVpNMTggMjcuMjZDMTcuMzQgMjcuMjYgMTYuOCAyNi43MiAxNi44IDI2LjA2QzE2LjggMjUuNCAxNy4zNCAyNC44NiAxOCAy''@;'; put 'put ''NC44NkMxOC42NiAyNC44NiAxOS4yIDI1LjQgMTkuMiAyNi4wNkMxOS4yIDI2LjcyIDE4LjY2IDI3LjI2IDE4IDI3LjI2WiIvPid9XSxZT2U9WyJoZWxwIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDE4QzIgOS4xNjM0NCA5''@;'; put 'put ''LjE2MzQ0IDIgMTggMkMyMi4yNDM1IDIgMjYuMzEzMSAzLjY4NTcxIDI5LjMxMzcgNi42ODYyOUMzMi4zMTQzIDkuNjg2ODcgMzQgMTMuNzU2NSAzNCAxOEMzNCAyNi44MzY2IDI2LjgzNjYgMzQgMTggMzRDOS4xNjM0NCAzNCAyIDI2LjgzNjYgMiAxOFpNNCAxOEM0IDI1LjczMiAxMC4yNjgg''@;'; put 'put ''MzIgMTggMzJDMjEuNzEzIDMyIDI1LjI3NCAzMC41MjUgMjcuODk5NSAyNy44OTk1QzMwLjUyNSAyNS4yNzQgMzIgMjEuNzEzIDMyIDE4QzMyIDEwLjI2OCAyNS43MzIgNCAxOCA0QzEwLjI2OCA0IDQgMTAuMjY4IDQgMThaTTE4LjI5IDguOTJDMTYuMDk2MSA4Ljg4Mzc0IDEzLjk5OTggOS44''@;'; put 'put ''MjU2IDEyLjU3IDExLjQ5QzEyLjM3MTggMTEuNjczNyAxMi4yNTYzIDExLjkyOTggMTIuMjUgMTIuMkMxMi4yNDk5IDEyLjQ0OTMgMTIuMzUwOSAxMi42ODggMTIuNTMgMTIuODYxNEMxMi43MDkxIDEzLjAzNDggMTIuOTUwOCAxMy4xMjgxIDEzLjIgMTMuMTJDMTMuNDY0MiAxMy4xMTM1IDEz''@;'; put 'put ''LjcxNjggMTMuMDEwMyAxMy45MSAxMi44M0MxNC45OTE2IDExLjU2MjUgMTYuNTczNyAxMC44MzE3IDE4LjI0IDEwLjgzQzIwLjYgMTAuODMgMjIuMDcgMTIuMzUgMjIuMDcgMTQuMjRWMTQuMjlDMjIuMDcgMTYuNSAyMC4zMSAxNy43MyAxNy41MyAxNy45NEMxNy4zMDIzIDE3Ljk0ODggMTcu''@;'; put 'put ''MDg5MiAxOC4wNTQyIDE2Ljk0NDEgMTguMjI5OUMxNi43OTkgMTguNDA1NiAxNi43MzU3IDE4LjYzNDggMTYuNzcgMTguODZWMjEuNjFDMTYuODIxNSAyMi4xMjI5IDE3LjI1NDUgMjIuNTEyNiAxNy43NyAyMi41MUgxNy44OEMxOC4zOTI5IDIyLjQ1ODUgMTguNzgyNiAyMi4wMjU1IDE4Ljc4''@;'; put 'put ''IDIxLjUxVjE5LjQ1QzIxLjc4IDE5LjAzIDI0LjIxIDE3LjQ1IDI0LjIxIDE0LjE3VjE0LjEyQzI0LjE4IDExLjEyIDIxLjg0IDguOTIgMTguMjkgOC45MlpNMTkuMDMgMjYuMkMxOS4wMyAyNi44OTA0IDE4LjQ3MDQgMjcuNDUgMTcuNzggMjcuNDVDMTcuMDg5NiAyNy40NSAxNi41MyAyNi44''@;'; put 'put ''OTA0IDE2LjUzIDI2LjJDMTYuNTMgMjUuNTA5NiAxNy4wODk2IDI0Ljk1IDE3Ljc4IDI0Ljk1QzE4LjQ3MDQgMjQuOTUgMTkuMDMgMjUuNTA5NiAxOS4wMyAyNi4yWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTMzLjAwMTMgMTIuNzY4OUMzMi4zOTU5IDEzLjA0NjIgMzEuNzU1OSAx''@;'; put 'put ''My4yNDA2IDMxLjA5ODYgMTMuMzQ2N0MzMy4yNjM2IDE5LjUxMDggMzAuODc2MyAyNi4zNTI4IDI1LjM0NjUgMjkuODMyQzE5LjgxNjcgMzMuMzExMiAxMi42MTU0IDMyLjUwMiA3Ljk5NTY5IDI3Ljg4MjJDMy4zNzU5NyAyMy4yNjI1IDIuNTY2NzQgMTYuMDYxMyA2LjA0NTkyIDEwLjUzMTVD''@;'; put 'put ''OS41MjUwOSA1LjAwMTYyIDE2LjM2NzEgMi42MTQyOSAyMi41MzEyIDQuNzc5MzhDMjIuNjM3NSA0LjEyMjA1IDIyLjgzMTggMy40ODIwNCAyMy4xMDkgMi44NzY2M0MxNi4wNjQ5IDAuNDQwOTQ2IDguMjcxOTkgMy4xOTIwNSA0LjMxODIzIDkuNTEwMjlDMC4zNjQ0NzYgMTUuODI4NSAxLjI5''@;'; put 'put ''NzM2IDI0LjAzOTkgNi41Njc2NyAyOS4zMTAzQzExLjgzOCAzNC41ODA2IDIwLjA0OTQgMzUuNTEzNSAyNi4zNjc2IDMxLjU1OTdDMzIuNjg1OSAyNy42MDU5IDM1LjQzNyAxOS44MTMxIDMzLjAwMTMgMTIuNzY4OVoiLz48cGF0aCBkPSJNMTcuNzE5NiAyNy4zNTMzQzE4LjQwNzMgMjcuMzUz''@;'; put 'put ''MyAxOC45NjQ4IDI2Ljc5NTggMTguOTY0OCAyNi4xMDgxQzE4Ljk2NDggMjUuNDIwMyAxOC40MDczIDI0Ljg2MjggMTcuNzE5NiAyNC44NjI4QzE3LjAzMTggMjQuODYyOCAxNi40NzQzIDI1LjQyMDMgMTYuNDc0MyAyNi4xMDgxQzE2LjQ3NDMgMjYuNzk1OCAxNy4wMzE4IDI3LjM1MzMgMTcu''@;'; put 'put ''NzE5NiAyNy4zNTMzWiIvPjxwYXRoIGQ9Ik0yNC4wOTUzIDE0LjA3MzlWMTQuMTIzOEMyNC4wOTUzIDE3LjM5MTMgMjEuNjc0NSAxOC45MzU0IDE4LjcyNTcgMTkuMzgzN1YyMS40MzU5QzE4LjcyODMgMjEuOTQ5NCAxOC4zNDAxIDIyLjM4MDcgMTcuODI5MSAyMi40MzIxSDE3LjcxOTZDMTcu''@;'; put 'put ''MjA2IDIyLjQzNDcgMTYuNzc0NyAyMi4wNDY1IDE2LjcyMzMgMjEuNTM1NVYxOC43OTU5QzE2LjY4OTEgMTguNTcxNiAxNi43NTIyIDE4LjM0MzIgMTYuODk2OCAxOC4xNjgyQzE3LjA0MTMgMTcuOTkzMiAxNy4yNTM3IDE3Ljg4ODIgMTcuNDgwNSAxNy44Nzk0QzIwLjI0OTkgMTcuNjcwMiAy''@;'; put 'put ''Mi4wMDMyIDE2LjQ0NDkgMjIuMDAzMiAxNC4yNDMzVjE0LjE5MzVDMjIuMDAzMiAxMi4zMTA3IDIwLjUzODggMTAuNzk2NCAxOC4xODc4IDEwLjc5NjRDMTYuNTI3OCAxMC43OTgyIDE0Ljk1MTcgMTEuNTI2MSAxMy44NzQyIDEyLjc4ODhDMTMuNjgxNyAxMi45Njg0IDEzLjQzMDEgMTMuMDcx''@;'; put 'put ''MiAxMy4xNjY5IDEzLjA3NzdDMTIuOTE4NyAxMy4wODU4IDEyLjY3NzggMTIuOTkyOSAxMi40OTk0IDEyLjgyMDFDMTIuMzIxIDEyLjY0NzMgMTIuMjIwNCAxMi40MDk2IDEyLjIyMDUgMTIuMTYxMkMxMi4yMjY4IDExLjg5MjEgMTIuMzQxOCAxMS42MzY5IDEyLjUzOTMgMTEuNDUzOUMxMy45''@;'; put 'put ''NjM3IDkuNzk1ODUgMTYuMDUyIDguODU3NTcgMTguMjM3NiA4Ljg5MzY5QzIxLjc2NDEgOC44OTM2OSAyNC4wOTUzIDExLjA4NTMgMjQuMDk1MyAxNC4wNzM5WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3''@;'; put 'put ''LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPicsc29saWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQg''@;'; put 'put ''MTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE3Ljc4IDI3Ljg1QzE3LjExMjYgMjcuODUgMTYuNTExIDI3LjQ0OCAxNi4yNTU2IDI2LjgzMTRD''@;'; put 'put ''MTYuMDAwMiAyNi4yMTQ5IDE2LjE0MTQgMjUuNTA1MiAxNi42MTMzIDI1LjAzMzNDMTcuMDg1MiAyNC41NjE0IDE3Ljc5NDkgMjQuNDIwMiAxOC40MTE0IDI0LjY3NTZDMTkuMDI4IDI0LjkzMSAxOS40MyAyNS41MzI2IDE5LjQzIDI2LjJDMTkuNDMgMjcuMTExMyAxOC42OTEzIDI3Ljg1IDE3''@;'; put 'put ''Ljc4IDI3Ljg1Wk0xOS4xNSAyMS41MVYxOS43OUMyMi42MSAxOS4yIDI0LjU4IDE3LjE2IDI0LjU4IDE0LjExQzI0LjU4IDEwLjgxIDIyIDguNTEgMTguMyA4LjUxQzE2LjAwMDUgOC40NzQ1MiAxMy44MDMzIDkuNDU5NTYgMTIuMyAxMS4yQzEyLjAzMDQgMTEuNDYzNiAxMS44NzU5IDExLjgy''@;'; put 'put ''MyAxMS44NyAxMi4yQzExLjg4MyAxMi43NTE2IDEyLjIyOCAxMy4yNDA2IDEyLjc0MzIgMTMuNDM4QzEzLjI1ODUgMTMuNjM1MyAxMy44NDE5IDEzLjUwMTggMTQuMjIgMTMuMUMxNS4yMDkyIDExLjkwNjkgMTYuNjcwNCAxMS4yMDU2IDE4LjIyIDExLjE4QzIwLjI0IDExLjE4IDIxLjY1IDEy''@;'; put 'put ''LjQyIDIxLjY1IDE0LjI1QzIxLjY1IDE2LjggMTkuMDQgMTcuMzggMTcuNDcgMTcuNUMxNy4xNDQ4IDE3LjUxNzUgMTYuODQwOSAxNy42Njc0IDE2LjYyOTMgMTcuOTE1QzE2LjQxNzYgMTguMTYyNSAxNi4zMTY3IDE4LjQ4NiAxNi4zNSAxOC44MVYyMS41N0MxNi4zNjA0IDIxLjkyNzIgMTYu''@;'; put 'put ''NTEzMSAyMi4yNjU1IDE2Ljc3NDEgMjIuNTA5NkMxNy4wMzUxIDIyLjc1MzcgMTcuMzgyOSAyMi44ODM1IDE3Ljc0IDIyLjg3SDE3Ljg1QzE4LjU3NTMgMjIuODMyOSAxOS4xNDU2IDIyLjIzNjIgMTkuMTUgMjEuNTFaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2Rk''@;'; put 'put ''IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMy4wMDEzIDEyLjc2ODlDMzAuMTY1OSAxNC4wNjg4IDI2LjgyMTIgMTMuNDY3OSAyNC42MTU2IDExLjI2MjNDMjIuNDEwMSA5LjA1Njc0IDIxLjgwOTEgNS43MTIgMjMuMTA5IDIuODc2NjNDMTYuMDY0OSAwLjQ0MDk0NiA4LjI3MTk5IDMuMTky''@;'; put 'put ''MDUgNC4zMTgyMyA5LjUxMDI5QzAuMzY0NDc2IDE1LjgyODUgMS4yOTczNiAyNC4wMzk5IDYuNTY3NjcgMjkuMzEwM0MxMS44MzggMzQuNTgwNiAyMC4wNDk0IDM1LjUxMzUgMjYuMzY3NiAzMS41NTk3QzMyLjY4NTkgMjcuNjA1OSAzNS40MzcgMTkuODEzMSAzMy4wMDEzIDEyLjc2ODlaTTE3''@;'; put 'put ''LjcxOTYgMjcuNzEyQzE3LjA1NDcgMjcuNzEyIDE2LjQ1NTQgMjcuMzExNSAxNi4yMDA5IDI2LjY5NzNDMTUuOTQ2NSAyNi4wODMgMTYuMDg3MiAyNS4zNzYgMTYuNTU3MyAyNC45MDU5QzE3LjAyNzQgMjQuNDM1OCAxNy43MzQ0IDI0LjI5NTIgMTguMzQ4NiAyNC41NDk2QzE4Ljk2MjggMjQu''@;'; put 'put ''ODA0IDE5LjM2MzMgMjUuNDAzNCAxOS4zNjMzIDI2LjA2ODJDMTkuMzc0IDI2LjUxMSAxOS4yMDU2IDI2LjkzOTQgMTguODk2MiAyNy4yNTY0QzE4LjU4NjcgMjcuNTczMyAxOC4xNjI1IDI3Ljc1MTkgMTcuNzE5NiAyNy43NTE4VjI3LjcxMlpNMTkuMDg0NCAyMS4zOTZWMTkuNzIyNEMyMi41''@;'; put 'put ''MzEyIDE5LjEzNDcgMjQuNDkzNyAxNy4xMDI0IDI0LjQ5MzcgMTQuMDI0MUMyNC40OTM3IDEwLjczNjcgMjEuOTIzNSA4LjQ0NTQgMTguMjM3NiA4LjQ0NTRDMTUuOTQ2OCA4LjQxMDA2IDEzLjc1OCA5LjM5MTM2IDEyLjI2MDQgMTEuMTI1MkMxMS45OTE4IDExLjM4NzggMTEuODM3OSAxMS43''@;'; put 'put ''NDU4IDExLjgzMiAxMi4xMjE0QzExLjg0NSAxMi42NzA5IDEyLjE4ODYgMTMuMTU4MSAxMi43MDE5IDEzLjM1NDdDMTMuMjE1MiAxMy41NTEyIDEzLjc5NjQgMTMuNDE4MiAxNC4xNzMxIDEzLjAxOEMxNS4xNTg2IDExLjgyOTQgMTYuNjE0MSAxMS4xMzA3IDE4LjE1NzkgMTEuMTA1M0MyMC4x''@;'; put 'put ''NzAyIDExLjEwNTMgMjEuNTc0OSAxMi4zNDA2IDIxLjU3NDkgMTQuMTYzNkMyMS41NzQ5IDE2LjcwMzkgMTguOTc0OCAxNy4yODE3IDE3LjQxMDcgMTcuNDAxM0MxNy4wODY3IDE3LjQxODYgMTYuNzg0IDE3LjU2ODEgMTYuNTczMiAxNy44MTQ3QzE2LjM2MjMgMTguMDYxMyAxNi4yNjE4IDE4''@;'; put 'put ''LjM4MzUgMTYuMjk1IDE4LjcwNjNWMjEuNDU1OEMxNi4zMDU0IDIxLjgxMTcgMTYuNDU3NSAyMi4xNDg3IDE2LjcxNzUgMjIuMzkxOUMxNi45Nzc1IDIyLjYzNTEgMTcuMzIzOSAyMi43NjQzIDE3LjY3OTcgMjIuNzUwOUgxNy43ODkzQzE4LjUxMTggMjIuNzEzOSAxOS4wOCAyMi4xMTk1IDE5''@;'; put 'put ''LjA4NDQgMjEuMzk2WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSxHT2U9WyJpbmZvLXN0YW5kYXJk''@;'; put 'put ''Iix7b3V0bGluZTonPHBhdGggZD0iTTIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQgMiAxOCAyQzkuMTYgMiAyIDkuMTYgMiAxOFpNNCAxOEM0IDEwLjI3IDEw''@;'; put 'put ''LjI3IDQgMTggNEMyNS43MyA0IDMyIDEwLjI3IDMyIDE4QzMyIDI1LjczIDI1LjczIDMyIDE4IDMyQzEwLjI3IDMyIDQgMjUuNzMgNCAxOFpNMjEgMjVIMTlWMTRIMTZDMTUuNDUgMTQgMTUgMTQuNDUgMTUgMTVDMTUgMTUuNTUgMTUuNDUgMTYgMTYgMTZIMTdWMjVIMTVDMTQuNDUgMjUgMTQg''@;'; put 'put ''MjUuNDUgMTQgMjZDMTQgMjYuNTUgMTQuNDUgMjcgMTUgMjdIMjFDMjEuNTUgMjcgMjIgMjYuNTUgMjIgMjZDMjIgMjUuNDUgMjEuNTUgMjUgMjEgMjVaTTE5LjM3IDEwLjQ1QzE5LjM3IDExLjIyIDE4Ljc0IDExLjg1IDE3Ljk3IDExLjg1QzE3LjIgMTEuODUgMTYuNTcgMTEuMjIgMTYuNTcg''@;'; put 'put ''MTAuNDVDMTYuNTcgOS42OCAxNy4yIDkuMDUgMTcuOTcgOS4wNUMxOC43NCA5LjA1IDE5LjM3IDkuNjggMTkuMzcgMTAuNDVaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAzMi4zMSAyOS4z''@;'; put 'put ''MSAyOS4zMUMzMi4zMSAyNi4zMSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMlpNMTcuOTcgOC44NUMxOC44NSA4Ljg1IDE5LjU3IDkuNTcgMTkuNTcgMTAuNDVDMTkuNTcgMTEuMzMgMTguODUgMTIuMDUgMTcuOTcgMTIuMDVDMTcuMDkgMTIuMDUgMTYuMzcgMTEuMzMgMTYu''@;'; put 'put ''MzcgMTAuNDVDMTYuMzcgOS41NyAxNy4wOSA4Ljg1IDE3Ljk3IDguODVaTTIxIDI3LjJIMTVDMTQuMzQgMjcuMiAxMy44IDI2LjY2IDEzLjggMjZDMTMuOCAyNS4zNCAxNC4zNCAyNC44IDE1IDI0LjhIMTYuOFYxNi4ySDE2QzE1LjM0IDE2LjIgMTQuOCAxNS42NiAxNC44IDE1QzE0LjggMTQu''@;'; put 'put ''MzQgMTUuMzQgMTMuOCAxNiAxMy44SDE5LjJWMjQuOEgyMUMyMS42NiAyNC44IDIyLjIgMjUuMzQgMjIuMiAyNkMyMi4yIDI2LjY2IDIxLjY2IDI3LjIgMjEgMjcuMloiLz4nfV0sJE9lPVsibm90ZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCww''@;'; put 'put ''LDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiLz48cGF0aCBkPSJNMzMuNTMsNS44NCwzMC4xNiwyLjQ3YTEuNjEsMS42MSwwLDAsMC0yLjI4LDBMMTQuMTcsMTYuMjZsLTEuMTEsNC44MUExLjYxLDEuNjEsMCwwLDAsMTQuNjMsMjMsMS42OSwxLjY5LDAs''@;'; put 'put ''MCwwLDE1LDIzbDQuODUtMS4wN0wzMy41Myw4LjEyQTEuNjEsMS42MSwwLDAsMCwzMy41Myw1Ljg0Wk0xOC44MSwyMC4wOGwtMy42Ni44MUwxNiwxNy4yNiwyNi4zMiw2Ljg3bDIuODIsMi44MlpNMzAuMjcsOC41NiwyNy40NSw1Ljc0LDI5LDQuMTYsMzEuODQsN1oiLz4nLHNvbGlkOic8cGF0''@;'; put 'put ''aCBkPSJNMzMsNi40LDI5LjMsMi43YTEuNzEsMS43MSwwLDAsMC0yLjM2LDBMMjMuNjUsNkg2QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjExLjc2bDMtM0ExLjY3LDEuNjcsMCwwLDAsMzMsNi40Wk0xOC44MywyMC4xM2wtNC4xOS45MywxLTQuMTUs''@;'; put 'put ''OS41NS05LjU3LDMuMjMsMy4yM1pNMjkuNSw5LjQzLDI2LjI3LDYuMmwxLjg1LTEuODUsMy4yMywzLjIzWiIvPid9XSxsWT1bInN1Y2Nlc3Mtc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAy''@;'; put 'put ''IDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAy''@;'; put 'put ''NS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyMS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIgMTggMzJaTTI2LjU5IDEyLjFDMjYuOTggMTEuNzEyMyAyNy42MSAxMS43''@;'; put 'put ''MTIzIDI4IDEyLjFDMjguMTg5MyAxMi4yODc4IDI4LjI5NTggMTIuNTQzNCAyOC4yOTU4IDEyLjgxQzI4LjI5NTggMTMuMDc2NiAyOC4xODkzIDEzLjMzMjIgMjggMTMuNTJMMTUuNDkgMjZMOCAxOC41M0M3LjYxODkyIDE4LjExODUgNy42NDM1NSAxNy40NzYxIDguMDU1IDE3LjA5NUM4LjQ2''@;'; put 'put ''NjQ1IDE2LjcxMzkgOS4xMDg5MiAxNi43Mzg1IDkuNDkgMTcuMTVMMTUuNDkgMjMuMTVMMjYuNTkgMTIuMVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMjkuMzEgNi42OUMyNi4zMSAzLjY5IDIyLjI0IDIgMTggMkM5LjE2IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzI2Ljg0''@;'; put 'put ''IDM0IDM0IDI2Ljg0IDM0IDE4QzM0IDEzLjc2IDMyLjMxIDkuNjkgMjkuMzEgNi42OVpNMjguMTQgMTMuNjRMMTUuNjMgMjYuMTJMMTUuNDkgMjYuMjZMMTUuMzUgMjYuMTJMNy44NSAxOC42NEM3LjM5IDE4LjE1IDcuNDIgMTcuMzggNy45MiAxNi45MkM4LjE1IDE2LjcxIDguNDQgMTYuNiA4''@;'; put 'put ''Ljc1IDE2LjZDOS4wOSAxNi42IDkuNDEgMTYuNzQgOS42NCAxNi45OEwxNS41IDIyLjg0TDI2LjQ2IDExLjkzQzI2LjY5IDExLjcgMjYuOTkgMTEuNTggMjcuMzEgMTEuNThDMjcuNjMgMTEuNTggMjcuOTMgMTEuNyAyOC4xNiAxMS45M0MyOC4zOSAxMi4xNSAyOC41MSAxMi40NiAyOC41MSAx''@;'; put 'put ''Mi43OEMyOC41MSAxMy4xIDI4LjM4IDEzLjQxIDI4LjE2IDEzLjYzTDI4LjE0IDEzLjY0WiIvPid9XSxLT2U9WyJ3YXJuaW5nLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4LjAwMDEgMjIuOTkzMkMxOC41NTAxIDIyLjk5MzIgMTkuMDAwMSAyMi41NDM0IDE5LjAwMDEgMjEuOTkz''@;'; put 'put ''NlYxMC45OTc1QzE5LjAwMDEgMTAuNDQ3NyAxOC41NTAxIDkuOTk3ODYgMTguMDAwMSA5Ljk5Nzg2QzE3LjQ1MDEgOS45OTc4NiAxNy4wMDAxIDEwLjQ0NzcgMTcuMDAwMSAxMC45OTc1VjIxLjk5MzZDMTcuMDAwMSAyMi41NDM0IDE3LjQ1MDEgMjIuOTkzMiAxOC4wMDAxIDIyLjk5MzJaTTMz''@;'; put 'put ''LjU2MDEgMjcuMjExN0wyMC43ODAxIDUuNTc5NDRDMjAuMjAwMSA0LjU4OTc5IDE5LjE2MDEgNCAxOC4wMDAxIDRDMTYuODQwMSA0IDE1LjgwMDEgNC41ODk3OSAxNS4yMjAxIDUuNTc5NDRMMi40NDAxIDI3LjIxMTdDMS44NTAxIDI4LjIxMTQgMS44NTAxIDI5LjQwMDkgMi40MzAxIDMwLjQw''@;'; put 'put ''MDZDMy4wMTAxIDMxLjQwMDIgNC4wNjAxIDMyIDUuMjIwMSAzMkgzMC43NzAxQzMxLjk0MDEgMzIgMzIuOTgwMSAzMS40MDAyIDMzLjU2MDEgMzAuNDAwNkMzNC4xNDAxIDI5LjQwMDkgMzQuMTQwMSAyOC4yMTE0IDMzLjU1MDEgMjcuMjExN0gzMy41NjAxWk0zMS44MTAxIDI5LjQwMDlDMzEu''@;'; put 'put ''NzEwMSAyOS41ODA5IDMxLjQwMDEgMjkuOTkwNyAzMC43ODAxIDI5Ljk5MDdINS4yMzAxQzQuNjEwMSAyOS45OTA3IDQuMzAwMSAyOS41ODA5IDQuMjAwMSAyOS40MDA5QzQuMTAwMSAyOS4yMjEgMy44OTAxIDI4Ljc1MTIgNC4yMDAxIDI4LjIzMTNMMTYuOTgwMSA2LjU4OTA4QzE3LjI5MDEg''@;'; put 'put ''Ni4wNjkyNiAxNy44MDAxIDYuMDA5MjggMTguMDAwMSA2LjAwOTI4QzE4LjIwMDEgNi4wMDkyOCAxOC43MTAxIDYuMDY5MjYgMTkuMDIwMSA2LjU4OTA4TDMxLjc5MDEgMjguMjIxM0MzMi4xMDAxIDI4Ljc1MTIgMzEuOTAwMSAyOS4yMjEgMzEuNzkwMSAyOS4zOTA5TDMxLjgxMDEgMjkuNDAw''@;'; put 'put ''OVpNMTguMDEwMSAyNS4wMDI1QzE3LjI4MDEgMjUuMDAyNSAxNi42ODAxIDI1LjYwMjMgMTYuNjgwMSAyNi4zMzJDMTYuNjgwMSAyNy4wNjE4IDE3LjI4MDEgMjcuNjYxNSAxOC4wMTAxIDI3LjY2MTVDMTguNzQwMSAyNy42NjE1IDE5LjM0MDEgMjcuMDYxOCAxOS4zNDAxIDI2LjMzMkMxOS4z''@;'; put 'put ''NDAxIDI1LjYwMjMgMTguNzQwMSAyNS4wMDI1IDE4LjAxMDEgMjUuMDAyNVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzMuNTYwMSAyNy4yMkwyMC43ODAxIDUuNThDMjAuMjAwMSA0LjU5IDE5LjE2MDEgNCAxOC4wMDAxIDRDMTYuODQwMSA0IDE1LjgwMDEgNC41OSAxNS4yMjAxIDUuNThMMi40''@;'; put 'put ''NDAwNiAyNy4yMkMxLjg1MDA2IDI4LjIyIDEuODUwMDYgMjkuNDEgMi40NDAwNiAzMC40MUMzLjAyMDA2IDMxLjQxIDQuMDcwMDYgMzIuMDEgNS4yMzAwNiAzMi4wMUgzMC43ODAxQzMxLjk1MDEgMzIuMDEgMzIuOTkwMSAzMS40MSAzMy41NzAxIDMwLjQxQzM0LjE1MDEgMjkuNDEgMzQuMTUw''@;'; put 'put ''MSAyOC4yMiAzMy41NjAxIDI3LjIyWk0xNi45MDAxIDExQzE2LjkwMDEgMTAuMzkgMTcuMzkwMSA5LjkgMTguMDAwMSA5LjlDMTguNjEwMSA5LjkgMTkuMTAwMSAxMC4zOSAxOS4xMDAxIDExVjIyQzE5LjEwMDEgMjIuNjEgMTguNjEwMSAyMy4xIDE4LjAwMDEgMjMuMUMxNy4zOTAxIDIzLjEg''@;'; put 'put ''MTYuOTAwMSAyMi42MSAxNi45MDAxIDIyVjExWk0xOC4wMDAxIDI3Ljc2QzE3LjIxMDEgMjcuNzYgMTYuNTcwMSAyNy4xMiAxNi41NzAxIDI2LjMzQzE2LjU3MDEgMjUuNTQgMTcuMjEwMSAyNC45IDE4LjAwMDEgMjQuOUMxOC43OTAxIDI0LjkgMTkuNDMwMSAyNS41NCAxOS40MzAxIDI2LjMz''@;'; put 'put ''QzE5LjQzMDEgMjcuMTIgMTguNzkwMSAyNy43NiAxOC4wMDAxIDI3Ljc2WiIvPid9XSxxT2U9WyJjaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAx''@;'; put 'put ''MC4yNjggMzIgMThDMzIgMjUuNzMyIDI1LjczMiAzMiAxOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOFpNNiAxOEM2IDI0LjYyNzQgMTEuMzcyNiAzMCAxOCAzMEMyMS4xODI2IDMwIDI0LjIzNDggMjguNzM1NyAyNi40ODUzIDI2LjQ4NTNDMjguNzM1NyAyNC4yMzQ4IDMwIDIxLjE4MjYg''@;'; put 'put ''MzAgMThDMzAgMTEuMzcyNiAyNC42Mjc0IDYgMTggNkMxMS4zNzI2IDYgNiAxMS4zNzI2IDYgMThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDRDMTAuMjY4IDQgNCAxMC4yNjggNCAxOEM0IDI1LjczMiAxMC4yNjggMzIgMTggMzJDMjUuNzMyIDMyIDMyIDI1LjczMiAzMiAxOEMzMiAxMC4y''@;'; put 'put ''NjggMjUuNzMyIDQgMTggNFoiLz4nfV0sWE9lPVsiZG90LWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAxMUMxOS4zODQ1IDExIDIwLjczNzkgMTEuNDEwNSAyMS44ODkgMTIuMTc5N0MyMy4wNDAxIDEyLjk0ODkgMjMuOTM3NCAxNC4wNDIxIDI0LjQ2NzIgMTUuMzIxMkMyNC45OTcg''@;'; put 'put ''MTYuNjAwMyAyNS4xMzU2IDE4LjAwNzggMjQuODY1NSAxOS4zNjU2QzI0LjU5NTQgMjAuNzIzNSAyMy45Mjg3IDIxLjk3MDggMjIuOTQ5OCAyMi45NDk4QzIxLjk3MDggMjMuOTI4NyAyMC43MjM1IDI0LjU5NTQgMTkuMzY1NiAyNC44NjU1QzE4LjAwNzggMjUuMTM1NiAxNi42MDAzIDI0Ljk5''@;'; put 'put ''NyAxNS4zMjEyIDI0LjQ2NzJDMTQuMDQyMSAyMy45Mzc0IDEyLjk0ODkgMjMuMDQwMSAxMi4xNzk3IDIxLjg4OUMxMS40MTA1IDIwLjczNzkgMTEgMTkuMzg0NSAxMSAxOEMxMSAxNi4xNDM1IDExLjczNzUgMTQuMzYzIDEzLjA1MDMgMTMuMDUwM0MxNC4zNjMgMTEuNzM3NSAxNi4xNDM1IDEx''@;'; put 'put ''IDE4IDExWiIvPjxwYXRoIGQ9Ik0xOCAzNEMxNC44MzU1IDM0IDExLjc0MjEgMzMuMDYxNiA5LjExMDg4IDMxLjMwMzVDNi40Nzk3IDI5LjU0NTQgNC40Mjg5NCAyNy4wNDY2IDMuMjE3OTMgMjQuMTIyOUMyLjAwNjkzIDIxLjE5OTMgMS42OTAwOCAxNy45ODIzIDIuMzA3NDQgMTQuODc4NkMy''@;'; put 'put ''LjkyNDgxIDExLjc3NDkgNC40NDg2NiA4LjkyMzk0IDYuNjg2MyA2LjY4NjNDOC45MjM5NCA0LjQ0ODY2IDExLjc3NDkgMi45MjQ4MSAxNC44Nzg2IDIuMzA3NDRDMTcuOTgyMyAxLjY5MDA4IDIxLjE5OTMgMi4wMDY5MyAyNC4xMjI5IDMuMjE3OTNDMjcuMDQ2NiA0LjQyODk0IDI5LjU0NTQg''@;'; put 'put ''Ni40Nzk3IDMxLjMwMzUgOS4xMTA4OEMzMy4wNjE2IDExLjc0MjEgMzQgMTQuODM1NSAzNCAxOEMzNCAyMi4yNDM1IDMyLjMxNDMgMjYuMzEzMSAyOS4zMTM3IDI5LjMxMzdDMjYuMzEzMSAzMi4zMTQzIDIyLjI0MzUgMzQgMTggMzRaTTE4IDQuMDAwMDFDMTUuMjMxMSA0LjAwMDAxIDEyLjUy''@;'; put 'put ''NDMgNC44MjEwOSAxMC4yMjIgNi4zNTk0M0M3LjkxOTc0IDcuODk3NzcgNi4xMjUzMiAxMC4wODQzIDUuMDY1NjkgMTIuNjQyNEM0LjAwNjA3IDE1LjIwMDYgMy43Mjg4MiAxOC4wMTU1IDQuMjY5MDEgMjAuNzMxM0M0LjgwOTIxIDIzLjQ0NyA2LjE0MjU4IDI1Ljk0MTYgOC4xMDA1MSAyNy44''@;'; put 'put ''OTk1QzEwLjA1ODQgMjkuODU3NCAxMi41NTMgMzEuMTkwOCAxNS4yNjg3IDMxLjczMUMxNy45ODQ1IDMyLjI3MTIgMjAuNzk5NCAzMS45OTM5IDIzLjM1NzYgMzAuOTM0M0MyNS45MTU3IDI5Ljg3NDcgMjguMTAyMiAyOC4wODAzIDI5LjY0MDYgMjUuNzc4QzMxLjE3ODkgMjMuNDc1NyAzMiAy''@;'; put 'put ''MC43Njg5IDMyIDE4QzMyIDE0LjI4NyAzMC41MjUgMTAuNzI2IDI3Ljg5OTUgOC4xMDA1MUMyNS4yNzQgNS40NzUgMjEuNzEzIDQuMDAwMDEgMTggNC4wMDAwMVoiLz4nfV07ZnVuY3Rpb24gSk9lKGMsbCl7cmV0dXJuIGM9PT1sfWNsYXNzIGVQZSBleHRlbmRzIHF0e2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSl7c3VwZXIoKX1zY2hlZHVsZShsLGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0IHdMPXtzZXRJbnRlcnZhbChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09d0w7cmV0dXJuIGQ/LnNldEludGVydmFsP2Quc2V0SW50ZXJ2YWwoYyxsLC4uLmEpOnNldEludGVydmFsKGMsbCwuLi5hKX0sY2xl''@;'; put 'put ''YXJJbnRlcnZhbChjKXtjb25zdHtkZWxlZ2F0ZTpsfT13TDtyZXR1cm4obD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgdVkgZXh0ZW5kcyBlUGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhp''@;'; put 'put ''cy53b3JrPWEsdGhpcy5wZW5kaW5nPSExfXNjaGVkdWxlKGwsYT0wKXt2YXIgZDtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPWw7Y29uc3QgaD10aGlzLmlkLGY9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPWgmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQo''@;'; put 'put ''ZixoLGEpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShkPXRoaXMuaWQpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5yZXF1ZXN0QXN5bmNJZChmLHRoaXMuaWQsYSksdGhpc31yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gd0wuc2V0SW50ZXJ2YWwobC5m''@;'; put 'put ''bHVzaC5iaW5kKGwsdGhpcyksZCl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7aWYobnVsbCE9ZCYmdGhpcy5kZWxheT09PWQmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBhO251bGwhPWEmJndMLmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShsLGEpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBu''@;'; put 'put ''ZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZD10aGlzLl9leGVjdXRlKGwsYSk7aWYoZClyZXR1cm4gZDshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlz''@;'; put 'put ''LnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZShsLGEpe2xldCBoLGQ9ITE7dHJ5e3RoaXMud29yayhsKX1jYXRjaChmKXtkPSEwLGg9Znx8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZClyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgp''@;'; put 'put ''LGh9dW5zdWJzY3JpYmUoKXtpZighdGhpcy5jbG9zZWQpe2NvbnN0e2lkOmwsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6ZH09YTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSx1dChkLHRoaXMpLG51bGwhPWwmJih0aGlzLmlkPXRo''@;'; put 'put ''aXMucmVjeWNsZUFzeW5jSWQoYSxsLG51bGwpKSx0aGlzLmRlbGF5PW51bGwsc3VwZXIudW5zdWJzY3JpYmUoKX19fWNvbnN0IGRZPXtub3c6KCk9PihkWS5kZWxlZ2F0ZXx8RGF0ZSkubm93KCksZGVsZWdhdGU6dm9pZCAwfTtjbGFzcyBieHtjb25zdHJ1Y3RvcihsLGE9Yngubm93KXt0aGlz''@;'; put 'put ''LnNjaGVkdWxlckFjdGlvbkN0b3I9bCx0aGlzLm5vdz1hfXNjaGVkdWxlKGwsYT0wLGQpe3JldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsbCkuc2NoZWR1bGUoZCxhKX19Yngubm93PWRZLm5vdztjbGFzcyBoWSBleHRlbmRzIGJ4e2NvbnN0cnVjdG9yKGwsYT1ieC5u''@;'; put 'put ''b3cpe3N1cGVyKGwsYSksdGhpcy5hY3Rpb25zPVtdLHRoaXMuX2FjdGl2ZT0hMX1mbHVzaChsKXtjb25zdHthY3Rpb25zOmF9PXRoaXM7aWYodGhpcy5fYWN0aXZlKXJldHVybiB2b2lkIGEucHVzaChsKTtsZXQgZDt0aGlzLl9hY3RpdmU9ITA7ZG97aWYoZD1sLmV4ZWN1dGUobC5zdGF0ZSxs''@;'; put 'put ''LmRlbGF5KSlicmVha313aGlsZShsPWEuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGQpe2Zvcig7bD1hLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBkfX19Y29uc3QgQ0w9bmV3IGhZKHVZKSx0UGU9Q0w7ZnVuY3Rpb24gZm0oYyxsPUNMKXtyZXR1cm4gVmkoKGEsZCk9Pnts''@;'; put 'put ''ZXQgaD1udWxsLGY9bnVsbCx2PW51bGw7Y29uc3QgTT0oKT0+e2lmKGgpe2gudW5zdWJzY3JpYmUoKSxoPW51bGw7Y29uc3QgWj1mO2Y9bnVsbCxkLm5leHQoWil9fTtmdW5jdGlvbiBEKCl7Y29uc3QgWj12K2MscmU9bC5ub3coKTtpZihyZTxaKXJldHVybiBoPXRoaXMuc2NoZWR1bGUodm9p''@;'; put 'put ''ZCAwLFotcmUpLHZvaWQgZC5hZGQoaCk7TSgpfWEuc3Vic2NyaWJlKE5pKGQsWj0+e2Y9Wix2PWwubm93KCksaHx8KGg9bC5zY2hlZHVsZShELGMpLGQuYWRkKGgpKX0sKCk9PntNKCksZC5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntmPWg9bnVsbH0pKX0pfWNvbnN0IG5QZT1bImFkZExpc3Rl''@;'; put 'put ''bmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxyUGU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLGlQZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24geGQoYyxsLGEsZCl7aWYoJGUoYSkmJihkPWEsYT12b2lkIDApLGQpcmV0dXJuIHhkKGMsbCxhKS5waXBlKHpaKGQpKTtj''@;'; put 'put ''b25zdFtoLGZdPWZ1bmN0aW9uIHNQZShjKXtyZXR1cm4gJGUoYy5hZGRFdmVudExpc3RlbmVyKSYmJGUoYy5yZW1vdmVFdmVudExpc3RlbmVyKX0oYyk/clBlLm1hcCh2PT5NPT5jW3ZdKGwsTSxhKSk6ZnVuY3Rpb24gYVBlKGMpe3JldHVybiAkZShjLmFkZExpc3RlbmVyKSYmJGUoYy5yZW1v''@;'; put 'put ''dmVMaXN0ZW5lcil9KGMpP25QZS5tYXAoRDBlKGMsbCkpOmZ1bmN0aW9uIG9QZShjKXtyZXR1cm4gJGUoYy5vbikmJiRlKGMub2ZmKX0oYyk/aVBlLm1hcChEMGUoYyxsKSk6W107aWYoIWgmJkJaKGMpKXJldHVybiBOMCh2PT54ZCh2LGwsYSkpKGwxKGMpKTtpZighaCl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgWHQodj0+e2NvbnN0IE09KC4uLkQpPT52Lm5leHQoMTxELmxlbmd0aD9EOkRbMF0pO3JldHVybiBoKE0pLCgpPT5mKE0pfSl9ZnVuY3Rpb24gRDBlKGMsbCl7cmV0dXJuIGE9PmQ9PmNbYV0obCxkKX1jbGFzcyB5eCBl''@;'; put 'put ''eHRlbmRzIFdue2NvbnN0cnVjdG9yKGw9MS8wLGE9MS8wLGQ9ZFkpe3N1cGVyKCksdGhpcy5fYnVmZmVyU2l6ZT1sLHRoaXMuX3dpbmRvd1RpbWU9YSx0aGlzLl90aW1lc3RhbXBQcm92aWRlcj1kLHRoaXMuX2J1ZmZlcj1bXSx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsdGhpcy5faW5m''@;'; put 'put ''aW5pdGVUaW1lV2luZG93PWE9PT0xLzAsdGhpcy5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLGwpLHRoaXMuX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxhKX1uZXh0KGwpe2NvbnN0e2lzU3RvcHBlZDphLF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93OmgsX3RpbWVzdGFtcFByb3ZpZGVyOmYs''@;'; put 'put ''X3dpbmRvd1RpbWU6dn09dGhpczthfHwoZC5wdXNoKGwpLCFoJiZkLnB1c2goZi5ub3coKSt2KSksdGhpcy5fdHJpbUJ1ZmZlcigpLHN1cGVyLm5leHQobCl9X3N1YnNjcmliZShsKXt0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fdHJpbUJ1ZmZlcigpO2NvbnN0IGE9dGhpcy5faW5uZXJT''@;'; put 'put ''dWJzY3JpYmUobCkse19pbmZpbml0ZVRpbWVXaW5kb3c6ZCxfYnVmZmVyOmh9PXRoaXMsZj1oLnNsaWNlKCk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aCYmIWwuY2xvc2VkO3YrPWQ/MToyKWwubmV4dChmW3ZdKTtyZXR1cm4gdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhsKSxhfV90cmlt''@;'; put 'put ''QnVmZmVyKCl7Y29uc3R7X2J1ZmZlclNpemU6bCxfdGltZXN0YW1wUHJvdmlkZXI6YSxfYnVmZmVyOmQsX2luZmluaXRlVGltZVdpbmRvdzpofT10aGlzLGY9KGg/MToyKSpsO2lmKGw8MS8wJiZmPGQubGVuZ3RoJiZkLnNwbGljZSgwLGQubGVuZ3RoLWYpLCFoKXtjb25zdCB2PWEubm93KCk7''@;'; put 'put ''bGV0IE09MDtmb3IobGV0IEQ9MTtEPGQubGVuZ3RoJiZkW0RdPD12O0QrPTIpTT1EO00mJmQuc3BsaWNlKDAsTSsxKX19fWZ1bmN0aW9uIGZZKGMsbCwuLi5hKXtpZighMD09PWwpcmV0dXJuIHZvaWQgYygpO2lmKCExPT09bClyZXR1cm47Y29uc3QgZD1uZXcgaHQoe25leHQ6KCk9PntkLnVu''@;'; put 'put ''c3Vic2NyaWJlKCksYygpfX0pO3JldHVybiBsMShsKC4uLmEpKS5zdWJzY3JpYmUoZCl9ZnVuY3Rpb24gSTBlKGMsbCxhKXtsZXQgZCxoPSExO3JldHVybiBjJiYib2JqZWN0Ij09dHlwZW9mIGM/KHtidWZmZXJTaXplOmQ9MS8wLHdpbmRvd1RpbWU6bD0xLzAscmVmQ291bnQ6aD0hMSxzY2hl''@;'; put 'put ''ZHVsZXI6YX09Yyk6ZD1jPz8xLzAsZnVuY3Rpb24gbFBlKGM9e30pe2NvbnN0e2Nvbm5lY3RvcjpsPSgoKT0+bmV3IFduKSxyZXNldE9uRXJyb3I6YT0hMCxyZXNldE9uQ29tcGxldGU6ZD0hMCxyZXNldE9uUmVmQ291bnRaZXJvOmg9ITB9PWM7cmV0dXJuIGY9PntsZXQgdixNLEQsWj0wLHJl''@;'; put 'put ''PSExLGNlPSExO2NvbnN0IGJlPSgpPT57TT8udW5zdWJzY3JpYmUoKSxNPXZvaWQgMH0sRWU9KCk9PntiZSgpLHY9RD12b2lkIDAscmU9Y2U9ITF9LEJlPSgpPT57Y29uc3QgcWU9djtFZSgpLHFlPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gVmkoKHFlLHJ0KT0+e1orKywhY2UmJiFyZSYmYmUo''@;'; put 'put ''KTtjb25zdCBwdD1EPUQ/P2woKTtydC5hZGQoKCk9PntaLS0sMD09PVomJiFjZSYmIXJlJiYoTT1mWShCZSxoKSl9KSxwdC5zdWJzY3JpYmUocnQpLCF2JiZaPjAmJih2PW5ldyBodCh7bmV4dDpkdD0+cHQubmV4dChkdCksZXJyb3I6ZHQ9PntjZT0hMCxiZSgpLE09ZlkoRWUsYSxkdCkscHQu''@;'; put 'put ''ZXJyb3IoZHQpfSxjb21wbGV0ZTooKT0+e3JlPSEwLGJlKCksTT1mWShFZSxkKSxwdC5jb21wbGV0ZSgpfX0pLGwxKHFlKS5zdWJzY3JpYmUodikpfSkoZil9fSh7Y29ubmVjdG9yOigpPT5uZXcgeXgoZCxsLGEpLHJlc2V0T25FcnJvcjohMCxyZXNldE9uQ29tcGxldGU6ITEscmVzZXRPblJl''@;'; put 'put ''ZkNvdW50WmVybzpofSl9ZnVuY3Rpb24gX3goLi4uYyl7Y29uc3QgbD1qTShjKSxhPWZ1bmN0aW9uIFhNZShjLGwpe3JldHVybiJudW1iZXIiPT10eXBlb2YgalooYyk/Yy5wb3AoKTpsfShjLDEvMCksZD1jO3JldHVybiBkLmxlbmd0aD8xPT09ZC5sZW5ndGg/bDEoZFswXSk6ZXkoYSkoWXUo''@;'; put 'put ''ZCxsKSk6TTJ9dmFyIEFvPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU3RhdGU9MF09IlN0YXRlIixjW2MuVHJhbnNpdGlvbj0xXT0iVHJhbnNpdGlvbiIsY1tjLlNlcXVlbmNlPTJdPSJTZXF1ZW5jZSIsY1tjLkdyb3VwPTNdPSJHcm91cCIsY1tjLkFuaW1hdGU9NF09IkFuaW1hdGUiLGNbYy5L''@;'; put 'put ''ZXlmcmFtZXM9NV09IktleWZyYW1lcyIsY1tjLlN0eWxlPTZdPSJTdHlsZSIsY1tjLlRyaWdnZXI9N109IlRyaWdnZXIiLGNbYy5SZWZlcmVuY2U9OF09IlJlZmVyZW5jZSIsY1tjLkFuaW1hdGVDaGlsZD05XT0iQW5pbWF0ZUNoaWxkIixjW2MuQW5pbWF0ZVJlZj0xMF09IkFuaW1hdGVSZWYi''@;'; put 'put ''LGNbYy5RdWVyeT0xMV09IlF1ZXJ5IixjW2MuU3RhZ2dlcj0xMl09IlN0YWdnZXIiLGN9KEFvfHx7fSk7Y29uc3QgaWc9IioiO2Z1bmN0aW9uIHloKGMsbCl7cmV0dXJue3R5cGU6QW8uVHJpZ2dlcixuYW1lOmMsZGVmaW5pdGlvbnM6bCxvcHRpb25zOnt9fX1mdW5jdGlvbiBNMChjLGw9bnVs''@;'; put 'put ''bCl7cmV0dXJue3R5cGU6QW8uQW5pbWF0ZSxzdHlsZXM6bCx0aW1pbmdzOmN9fWZ1bmN0aW9uIHVzKGMpe3JldHVybnt0eXBlOkFvLlN0eWxlLHN0eWxlczpjLG9mZnNldDpudWxsfX1mdW5jdGlvbiBTTChjLGwsYSl7cmV0dXJue3R5cGU6QW8uU3RhdGUsbmFtZTpjLHN0eWxlczpsLG9wdGlv''@;'; put 'put ''bnM6YX19ZnVuY3Rpb24gdVBlKGMpe3JldHVybnt0eXBlOkFvLktleWZyYW1lcyxzdGVwczpjfX1mdW5jdGlvbiBpdShjLGwsYT1udWxsKXtyZXR1cm57dHlwZTpBby5UcmFuc2l0aW9uLGV4cHI6YyxhbmltYXRpb246bCxvcHRpb25zOmF9fWNsYXNzIHd4e2NvbnN0cnVjdG9yKGw9MCxhPTAp''@;'; put 'put ''e3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNo''@;'; put 'put ''ZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPWwrYX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1v''@;'; put 'put ''blN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5z''@;'; put 'put ''LnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3Jv''@;'; put 'put ''dGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwo''@;'; put 'put ''dGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVk''@;'; put 'put ''PSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbihsKXt0aGlzLl9wb3NpdGlvbj10aGlzLnRvdGFsVGltZT9sKnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIFIwZXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGlt''@;'; put 'put ''ZT0wLHRoaXMucGxheWVycz1sO2xldCBhPTAsZD0wLGg9MDtjb25zdCBmPXRoaXMucGxheWVycy5sZW5ndGg7MD09Zj9xdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSk6dGhpcy5wbGF5ZXJzLmZvckVhY2godj0+e3Yub25Eb25lKCgpPT57KythPT1mJiZ0aGlzLl9vbkZpbmlz''@;'; put 'put ''aCgpfSksdi5vbkRlc3Ryb3koKCk9PnsrK2Q9PWYmJnRoaXMuX29uRGVzdHJveSgpfSksdi5vblN0YXJ0KCgpPT57KytoPT1mJiZ0aGlzLl9vblN0YXJ0KCl9KX0pLHRoaXMudG90YWxUaW1lPXRoaXMucGxheWVycy5yZWR1Y2UoKHYsTSk9Pk1hdGgubWF4KHYsTS50b3RhbFRpbWUpLDApfV9v''@;'; put 'put ''bkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmluaXQoKSl9b25TdGFydChsKXt0aGlzLl9vblN0YXJ0Rm5z''@;'; put 'put ''LnB1c2gobCl9X29uU3RhcnQoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZucz1bXSl9b25Eb25lKGwpe3RoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVzdHJveShsKXt0aGlzLl9v''@;'; put 'put ''bkRlc3Ryb3lGbnMucHVzaChsKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMucGFyZW50UGxheWVyfHx0aGlzLmluaXQoKSx0aGlzLl9vblN0YXJ0KCksdGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5wbGF5KCkpfXBhdXNlKCl7dGhpcy5wbGF5ZXJzLmZv''@;'; put 'put ''ckVhY2gobD0+bC5wYXVzZSgpKX1yZXN0YXJ0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5yZXN0YXJ0KCkpfWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5maW5pc2goKSl9ZGVzdHJveSgpe3RoaXMuX29uRGVzdHJveSgpfV9vbkRlc3Ry''@;'; put 'put ''b3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmRlc3Ryb3koKSksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhp''@;'; put 'put ''cy5wbGF5ZXJzLmZvckVhY2gobD0+bC5yZXNldCgpKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbihsKXtjb25zdCBhPWwqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goZD0+e2NvbnN0IGg9ZC50b3Rh''@;'; put 'put ''bFRpbWU/TWF0aC5taW4oMSxhL2QudG90YWxUaW1lKToxO2Quc2V0UG9zaXRpb24oaCl9KX1nZXRQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5wbGF5ZXJzLnJlZHVjZSgoYSxkKT0+bnVsbD09PWF8fGQudG90YWxUaW1lPmEudG90YWxUaW1lP2Q6YSxudWxsKTtyZXR1cm4gbnVsbCE9bD9sLmdl''@;'; put 'put ''dFBvc2l0aW9uKCk6MH1iZWZvcmVEZXN0cm95KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+e2wuYmVmb3JlRGVzdHJveSYmbC5iZWZvcmVEZXN0cm95KCl9KX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2Eu''@;'; put 'put ''Zm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWxldCBnWTt0cnl7Z1k9dHlwZW9mIEludGw8InUiJiZJbnRsLnY4QnJlYWtJdGVyYXRvcn1jYXRjaHtnWT0hMX1sZXQgU3gsQ3g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9wbGF0Zm9ybUlkPWEsdGhpcy5pc0Jyb3dzZXI9''@;'; put 'put ''dGhpcy5fcGxhdGZvcm1JZD90bCh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5UPXRoaXMuaXNCcm93c2Vy''@;'; put 'put ''JiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFnWSkmJnR5cGVvZiBDU1M8InUiJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuV0VCS0lUPXRoaXMuaXNCcm93c2Vy''@;'; put 'put ''JiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLklPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEoIk1TU3RyZWFt''@;'; put 'put ''ImluIHdpbmRvdyksdGhpcy5GSVJFRk9YPXRoaXMuaXNCcm93c2VyJiYvKGZpcmVmb3h8bWluZWZpZWxkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5BTkRST0lEPXRoaXMuaXNCcm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLlRS''@;'; put 'put ''SURFTlQsdGhpcy5TQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihpbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92''@;'; put 'put ''PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEF5KGMpe3JldHVybiBmdW5jdGlvbiBnUGUoKXtpZihudWxsPT1TeCYmdHlwZW9mIHdpbmRvdzwidSIpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0''@;'; put 'put ''ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDooKT0+U3g9ITB9KSl9ZmluYWxseXtTeD1TeHx8ITF9cmV0dXJuIFN4fSgpP2M6ISFjLmNhcHR1cmV9dmFyIF9wPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9STUFMPTBdPSJOT1JNQUwiLGNbYy5ORUdB''@;'; put 'put ''VEVEPTFdPSJORUdBVEVEIixjW2MuSU5WRVJURUQ9Ml09IklOVkVSVEVEIixjfShfcHx8e30pO2xldCBNTCx1NyxtWTtmdW5jdGlvbiBNeCgpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gX3AuTk9STUFMO2lmKG51bGw9PU1MKXtjb25zdCBjPWRvY3Vt''@;'; put 'put ''ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGw9Yy5zdHlsZTtjLmRpcj0icnRsIixsLndpZHRoPSIxcHgiLGwub3ZlcmZsb3c9ImF1dG8iLGwudmlzaWJpbGl0eT0iaGlkZGVuIixsLnBvaW50ZXJFdmVudHM9Im5vbmUiLGwucG9zaXRpb249ImFic29sdXRlIjtjb25zdCBhPWRvY3VtZW50LmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoImRpdiIpLGQ9YS5zdHlsZTtkLndpZHRoPSIycHgiLGQuaGVpZ2h0PSIxcHgiLGMuYXBwZW5kQ2hpbGQoYSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjKSxNTD1fcC5OT1JNQUwsMD09PWMuc2Nyb2xsTGVmdCYmKGMuc2Nyb2xsTGVmdD0xLE1MPTA9PT1jLnNjcm9s''@;'; put 'put ''bExlZnQ/X3AuTkVHQVRFRDpfcC5JTlZFUlRFRCksYy5yZW1vdmUoKX1yZXR1cm4gTUx9ZnVuY3Rpb24gTzBlKGMpe2lmKGZ1bmN0aW9uIHZQZSgpe2lmKG51bGw9PW1ZKXtjb25zdCBjPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO21ZPSEoIWN8fCFjLmNyZWF0ZVNo''@;'; put 'put ''YWRvd1Jvb3QmJiFjLmF0dGFjaFNoYWRvdyl9cmV0dXJuIG1ZfSgpKXtjb25zdCBsPWMuZ2V0Um9vdE5vZGU/Yy5nZXRSb290Tm9kZSgpOm51bGw7aWYodHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZTaGFkb3dSb290JiZsIGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gbH1yZXR1cm4gbnVs''@;'; put 'put ''bH1mdW5jdGlvbiB4TChjKXtyZXR1cm4gYy5jb21wb3NlZFBhdGg/Yy5jb21wb3NlZFBhdGgoKVswXTpjLnRhcmdldH1sZXQgalBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fcGxhdGZvcm09YX1pc0Rpc2FibGVkKGEpe3JldHVybiBhLmhhc0F0dHJpYnV0ZSgiZGlzYWJs''@;'; put 'put ''ZWQiKX1pc1Zpc2libGUoYSl7cmV0dXJuIGZ1bmN0aW9uIFVQZShjKXtyZXR1cm4hIShjLm9mZnNldFdpZHRofHxjLm9mZnNldEhlaWdodHx8ImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0Q2xpZW50UmVjdHMmJmMuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfShhKSYmInZpc2libGUiPT09Z2V0''@;'; put 'put ''Q29tcHV0ZWRTdHlsZShhKS52aXNpYmlsaXR5fWlzVGFiYmFibGUoYSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTtjb25zdCBkPWZ1bmN0aW9uIHpQZShjKXt0cnl7cmV0dXJuIGMuZnJhbWVFbGVtZW50fWNhdGNoe3JldHVybiBudWxsfX0oZnVuY3Rpb24gWFBlKGMp''@;'; put 'put ''e3JldHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fShhKSk7aWYoZCYmKC0xPT09TjBlKGQpfHwhdGhpcy5pc1Zpc2libGUoZCkpKXJldHVybiExO2xldCBoPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxmPU4wZShhKTtyZXR1cm4gYS5o''@;'; put 'put ''YXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpPy0xIT09ZjohKCJpZnJhbWUiPT09aHx8Im9iamVjdCI9PT1ofHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uIEtQZShjKXtsZXQgbD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYT0iaW5w''@;'; put 'put ''dXQiPT09bCYmYy50eXBlO3JldHVybiJ0ZXh0Ij09PWF8fCJwYXNzd29yZCI9PT1hfHwic2VsZWN0Ij09PWx8fCJ0ZXh0YXJlYSI9PT1sfShhKSkmJigiYXVkaW8iPT09aD8hIWEuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiYtMSE9PWY6InZpZGVvIj09PWg/LTEhPT1mJiYobnVsbCE9PWZ8''@;'; put 'put ''fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1h8fGEuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKTphLnRhYkluZGV4Pj0wKX1pc0ZvY3VzYWJsZShhLGQpe3JldHVybiBmdW5jdGlvbiBxUGUoYyl7cmV0dXJuIWZ1bmN0aW9uIFdQZShjKXtyZXR1cm4gZnVuY3Rpb24gR1BlKGMpe3JldHVybiJpbnB1''@;'; put 'put ''dCI9PWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0oYykmJiJoaWRkZW4iPT1jLnR5cGV9KGMpJiYoZnVuY3Rpb24gWlBlKGMpe2xldCBsPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09bHx8InNlbGVjdCI9PT1sfHwiYnV0dG9uIj09PWx8fCJ0ZXh0YXJlYSI9PT1s''@;'; put 'put ''fShjKXx8ZnVuY3Rpb24gWVBlKGMpe3JldHVybiBmdW5jdGlvbiAkUGUoYyl7cmV0dXJuImEiPT1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KGMpJiZjLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfShjKXx8Yy5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxIMGUoYykpfShhKSYmIXRo''@;'; put 'put ''aXMuaXNEaXNhYmxlZChhKSYmKGQ/Lmlnbm9yZVZpc2liaWxpdHl8fHRoaXMuaXNWaXNpYmxlKGEpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihDeCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c''@;'; put 'put ''dTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEgwZShjKXtpZighYy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PWMudGFiSW5kZXgpcmV0dXJuITE7bGV0IGw9Yy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuISghbHx8''@;'; put 'put ''aXNOYU4ocGFyc2VJbnQobCwxMCkpKX1mdW5jdGlvbiBOMGUoYyl7aWYoIUgwZShjKSlyZXR1cm4gbnVsbDtjb25zdCBsPXBhcnNlSW50KGMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGwpPy0xOmx9Y2xhc3MgVjBle2dldCBlbmFibGVkKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQobCl7dGhpcy5fZW5hYmxlZD1sLHRoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMu''@;'; put 'put ''X2VuZEFuY2hvcikpfWNvbnN0cnVjdG9yKGwsYSxkLGgsZj0hMSl7dGhpcy5fZWxlbWVudD1sLHRoaXMuX2NoZWNrZXI9YSx0aGlzLl9uZ1pvbmU9ZCx0aGlzLl9kb2N1bWVudD1oLHRoaXMuX2hhc0F0dGFjaGVkPSExLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0xh''@;'; put 'put ''c3RUYWJiYWJsZUVsZW1lbnQoKSx0aGlzLmVuZEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSx0aGlzLl9lbmFibGVkPSEwLGZ8fHRoaXMuYXR0YWNoQW5jaG9ycygpfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuX3N0YXJ0QW5jaG9yLGE9dGhpcy5f''@;'; put 'put ''ZW5kQW5jaG9yO2wmJihsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLGwucmVtb3ZlKCkpLGEmJihhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxhLnJlbW92ZSgpKSx0aGlzLl9zdGFydEFu''@;'; put 'put ''Y2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbCx0aGlzLl9oYXNBdHRhY2hlZD0hMX1hdHRhY2hBbmNob3JzKCl7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9''@;'; put 'put ''dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJl''@;'; put 'put ''bnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KGwpe3JldHVybiBuZXcgUHJvbWlzZShhPT57dGhpcy5f''@;'; put 'put ''ZXhlY3V0ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudChsKSkpfSl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+YSh0aGlzLmZvY3VzRmlyc3RUYWJiYWJs''@;'; put 'put ''ZUVsZW1lbnQobCkpKX0pfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+YSh0aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudChsKSkpfSl9X2dldFJlZ2lvbkJvdW5kYXJ5KGwpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbY2RrLWZvY3VzLXJlZ2lvbi0ke2x9XSwgW2Nka0ZvY3VzUmVnaW9uJHtsfV0sIFtjZGstZm9jdXMtJHtsfV1gKTtyZXR1cm4ic3RhcnQiPT1sP2EubGVuZ3RoP2FbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQo''@;'; put 'put ''dGhpcy5fZWxlbWVudCk6YS5sZW5ndGg/YVthLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfWZvY3VzSW5pdGlhbEVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIltjZGstZm9jdXMtaW5pdGlhbF0sIFtj''@;'; put 'put ''ZGtGb2N1c0luaXRpYWxdIik7aWYoYSl7aWYoIXRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUoYSkpe2NvbnN0IGQ9dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoYSk7cmV0dXJuIGQ/LmZvY3VzKGwpLCEhZH1yZXR1cm4gYS5mb2N1cyhsKSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0''@;'; put 'put ''VGFiYmFibGVFbGVtZW50KGwpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gYSYmYS5mb2N1cyhsKSwhIWF9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UmVnaW9u''@;'; put 'put ''Qm91bmRhcnkoImVuZCIpO3JldHVybiBhJiZhLmZvY3VzKGwpLCEhYX1oYXNBdHRhY2hlZCgpe3JldHVybiB0aGlzLl9oYXNBdHRhY2hlZH1fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQobCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShsKSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxl''@;'; put 'put ''KGwpKXJldHVybiBsO2NvbnN0IGE9bC5jaGlsZHJlbjtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgaD1hW2RdLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGFbZF0pOm51bGw7aWYoaClyZXR1cm4g''@;'; put 'put ''aH1yZXR1cm4gbnVsbH1fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChsKXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGwpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUobCkpcmV0dXJuIGw7Y29uc3QgYT1sLmNoaWxkcmVuO2ZvcihsZXQgZD1hLmxlbmd0aC0xO2Q+PTA7ZC0tKXtjb25z''@;'; put 'put ''dCBoPWFbZF0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChhW2RdKTpudWxsO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9X2NyZWF0ZUFuY2hvcigpe2NvbnN0IGw9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgiZGl2Iik7cmV0dXJuIHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHRoaXMuX2VuYWJsZWQsbCksbC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksbC5jbGFzc0xpc3QuYWRkKCJjZGstZm9jdXMtdHJhcC1hbmNob3IiKSxsLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRk''@;'; put 'put ''ZW4iLCJ0cnVlIiksbH1fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCxhKXtsP2Euc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKTphLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX10b2dnbGVBbmNob3JzKGwpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90''@;'; put 'put ''b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX2VuZEFuY2hvcikpfV9leGVjdXRlT25TdGFibGUobCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP2woKTp0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShZZigx''@;'; put 'put ''KSkuc3Vic2NyaWJlKGwpfX1sZXQgdlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fY2hlY2tlcj1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX2RvY3VtZW50PWh9Y3JlYXRlKGEsZD0hMSl7cmV0dXJuIG5ldyBWMGUoYSx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0''@;'; put 'put ''aGlzLl9kb2N1bWVudCxkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihqUGUpLHhyKFdhKSx4cih2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9''@;'; put 'put ''KX19cmV0dXJuIGN9KSgpLEIwZT0oKCk9PntjbGFzcyBje2dldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNUcmFwPy5lbmFibGVkfHwhMX1zZXQgZW5hYmxlZChhKXt0aGlzLmZvY3VzVHJhcCYmKHRoaXMuZm9jdXNUcmFwLmVuYWJsZWQ9YSl9Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMu''@;'; put 'put ''X2VsZW1lbnRSZWY9YSx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWQsdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwsZmkoQ3gpLmlzQnJvd3NlciYmKHRoaXMuZm9jdXNUcmFwPXRoaXMuX2ZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxl''@;'; put 'put ''bWVudCwhMCkpfW5nT25EZXN0cm95KCl7dGhpcy5mb2N1c1RyYXA/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQmJih0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQuZm9jdXMoKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9bnVsbCl9bmdBZnRl''@;'; put 'put ''ckNvbnRlbnRJbml0KCl7dGhpcy5mb2N1c1RyYXA/LmF0dGFjaEFuY2hvcnMoKSx0aGlzLmF1dG9DYXB0dXJlJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1uZ0RvQ2hlY2soKXt0aGlzLmZvY3VzVHJhcCYmIXRoaXMuZm9jdXNUcmFwLmhhc0F0dGFjaGVkKCkmJnRoaXMuZm9jdXNUcmFwLmF0dGFj''@;'; put 'put ''aEFuY2hvcnMoKX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEuYXV0b0NhcHR1cmU7ZCYmIWQuZmlyc3RDaGFuZ2UmJnRoaXMuYXV0b0NhcHR1cmUmJnRoaXMuZm9jdXNUcmFwPy5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1fY2FwdHVyZUZvY3VzKCl7dGhpcy5fcHJldmlv''@;'; put 'put ''dXNseUZvY3VzZWRFbGVtZW50PWZ1bmN0aW9uIGJQZSgpe2xldCBjPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50P2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ6bnVsbDtmb3IoO2MmJmMuc2hhZG93Um9vdDspe2NvbnN0IGw9Yy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7aWYobD09PWMp''@;'; put 'put ''YnJlYWs7Yz1sfXJldHVybiBjfSgpLHRoaXMuZm9jdXNUcmFwPy5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKHZZKSxHZSh2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9''@;'; put 'put ''RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrVHJhcEZvY3VzIiwiIl1dLGlucHV0czp7ZW5hYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka1RyYXBGb2N1cyIsImVuYWJsZWQiLHMxXSxhdXRvQ2FwdHVyZTpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0s''@;'; put 'put ''ImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwiYXV0b0NhcHR1cmUiLHMxXX0sZXhwb3J0QXM6WyJjZGtUcmFwRm9jdXMiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltXbCx3bF19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGQ3KGMsbD0wKXtyZXR1cm4gZnVuY3Rpb24gckZlKGMpe3JldHVy''@;'; put 'put ''biFpc05hTihwYXJzZUZsb2F0KGMpKSYmIWlzTmFOKE51bWJlcihjKSl9KGMpP051bWJlcihjKTpsfWZ1bmN0aW9uIEVkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgSmk/Yy5uYXRpdmVFbGVtZW50OmN9Y29uc3QgeHg9e3NjaGVkdWxlKGMpe2xldCBsPXJlcXVlc3RBbmltYXRpb25GcmFtZSxh''@;'; put 'put ''PWNhbmNlbEFuaW1hdGlvbkZyYW1lO2NvbnN0e2RlbGVnYXRlOmR9PXh4O2QmJihsPWQucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9ZC5jYW5jZWxBbmltYXRpb25GcmFtZSk7Y29uc3QgaD1sKGY9PnthPXZvaWQgMCxjKGYpfSk7cmV0dXJuIG5ldyBxdCgoKT0+YT8uKGgpKX0scmVxdWVzdEFu''@;'; put 'put ''aW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PXh4O3JldHVybihsPy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHJlcXVlc3RBbmltYXRpb25GcmFtZSkoLi4uYyl9LGNhbmNlbEFuaW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PXh4O3JldHVybihsPy5jYW5j''@;'; put 'put ''ZWxBbmltYXRpb25GcmFtZXx8Y2FuY2VsQW5pbWF0aW9uRnJhbWUpKC4uLmMpfSxkZWxlZ2F0ZTp2b2lkIDB9LGowZT1uZXcgY2xhc3Mgb0ZlIGV4dGVuZHMgaFl7Zmx1c2gobCl7bGV0IGE7dGhpcy5fYWN0aXZlPSEwLGw/YT1sLmlkOihhPXRoaXMuX3NjaGVkdWxlZCx0aGlzLl9zY2hlZHVs''@;'; put 'put ''ZWQ9dm9pZCAwKTtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0IGg7bD1sfHxkLnNoaWZ0KCk7ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZSgobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9ZFsw''@;'; put 'put ''XSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBofX19KGNsYXNzIGFGZSBleHRlbmRzIHVZe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBudWxs''@;'; put 'put ''IT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxkKToobC5hY3Rpb25zLnB1c2godGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPXh4LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+bC5mbHVzaCh2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBo''@;'; put 'put ''O2lmKG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQobCxhLGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiZhPT09bC5fc2NoZWR1bGVkJiYobnVsbD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlkKSE9PWEm''@;'; put 'put ''Jih4eC5jYW5jZWxBbmltYXRpb25GcmFtZShhKSxsLl9zY2hlZHVsZWQ9dm9pZCAwKX19KTtsZXQgYlksc0ZlPTE7Y29uc3QgRUw9e307ZnVuY3Rpb24gejBlKGMpe3JldHVybiBjIGluIEVMJiYoZGVsZXRlIEVMW2NdLCEwKX1jb25zdCBsRmU9e3NldEltbWVkaWF0ZShjKXtjb25zdCBsPXNG''@;'; put 'put ''ZSsrO3JldHVybiBFTFtsXT0hMCxiWXx8KGJZPVByb21pc2UucmVzb2x2ZSgpKSxiWS50aGVuKCgpPT56MGUobCkmJmMoKSksbH0sY2xlYXJJbW1lZGlhdGUoYyl7ejBlKGMpfX0se3NldEltbWVkaWF0ZTpjRmUsY2xlYXJJbW1lZGlhdGU6dUZlfT1sRmUsVEw9e3NldEltbWVkaWF0ZSguLi5j''@;'; put 'put ''KXtjb25zdHtkZWxlZ2F0ZTpsfT1UTDtyZXR1cm4obD8uc2V0SW1tZWRpYXRlfHxjRmUpKC4uLmMpfSxjbGVhckltbWVkaWF0ZShjKXtjb25zdHtkZWxlZ2F0ZTpsfT1UTDtyZXR1cm4obD8uY2xlYXJJbW1lZGlhdGV8fHVGZSkoYyl9LGRlbGVnYXRlOnZvaWQgMH0sZkZlPW5ldyBjbGFzcyBo''@;'; put 'put ''RmUgZXh0ZW5kcyBoWXtmbHVzaChsKXt0aGlzLl9hY3RpdmU9ITA7Y29uc3QgYT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0IGg7bD1sfHxkLnNoaWZ0KCk7ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSli''@;'; put 'put ''cmVha313aGlsZSgobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBofX19KGNsYXNzIGRGZSBleHRlbmRzIHVZe2NvbnN0cnVjdG9yKGwsYSl7''@;'; put 'put ''c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBudWxsIT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxkKToobC5hY3Rpb25zLnB1c2godGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPVRM''@;'; put 'put ''LnNldEltbWVkaWF0ZShsLmZsdXNoLmJpbmQobCx2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBoO2lmKG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQobCxhLGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiYobnVs''@;'; put 'put ''bD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlkKSE9PWEmJihUTC5jbGVhckltbWVkaWF0ZShhKSxsLl9zY2hlZHVsZWQ9PT1hJiYobC5fc2NoZWR1bGVkPXZvaWQgMCkpfX0pO2Z1bmN0aW9uIFUwZShjPTAsbCxhPXRQZSl7bGV0IGQ9LTE7cmV0dXJuIG51bGwh''@;'; put 'put ''PWwmJihjbGUobCk/YT1sOmQ9bCksbmV3IFh0KGg9PntsZXQgZj1mdW5jdGlvbiBnRmUoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4oYyl9KGMpPytjLWEubm93KCk6YztmPDAmJihmPTApO2xldCB2PTA7cmV0dXJuIGEuc2NoZWR1bGUoZnVuY3Rpb24oKXtoLmNsb3NlZHx8''@;'; put 'put ''KGgubmV4dCh2KyspLDA8PWQ/dGhpcy5zY2hlZHVsZSh2b2lkIDAsZCk6aC5jb21wbGV0ZSgpKX0sZil9KX1mdW5jdGlvbiB5WShjLGw9Q0wpe3JldHVybiBmdW5jdGlvbiBwRmUoYyl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGQ9ITEsaD1udWxsLGY9bnVsbCx2PSExO2NvbnN0IE09KCk9Pntp''@;'; put 'put ''ZihmPy51bnN1YnNjcmliZSgpLGY9bnVsbCxkKXtkPSExO2NvbnN0IFo9aDtoPW51bGwsYS5uZXh0KFopfXYmJmEuY29tcGxldGUoKX0sRD0oKT0+e2Y9bnVsbCx2JiZhLmNvbXBsZXRlKCl9O2wuc3Vic2NyaWJlKE5pKGEsWj0+e2Q9ITAsaD1aLGZ8fGwxKGMoWikpLnN1YnNjcmliZShmPU5p''@;'; put 'put ''KGEsTSxEKSl9LCgpPT57dj0hMCwoIWR8fCFmfHxmLmNsb3NlZCkmJmEuY29tcGxldGUoKX0pKX0pfSgoKT0+VTBlKGMsbCkpfWNvbnN0IHZGZT1uZXcgU3QoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBiRmUoKXtyZXR1cm4gZmkodnMpfX0pLHlG''@;'; put 'put ''ZT0vXihhcnxja2J8ZHZ8aGV8aXd8ZmF8bnFvfHBzfHNkfHVnfHVyfHlpfC4qWy1fXShBZGxtfEFyYWJ8SGVicnxOa29vfFJvaGd8VGhhYSkpKD8hLipbLV9dKExhdG58Q3lybCkoJHwtfF8pKSgkfC18XykvaTtsZXQgcG09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnZhbHVl''@;'; put 'put ''PSJsdHIiLHRoaXMuY2hhbmdlPW5ldyBLcixhJiYodGhpcy52YWx1ZT1mdW5jdGlvbiBfRmUoYyl7Y29uc3QgbD1jPy50b0xvd2VyQ2FzZSgpfHwiIjtyZXR1cm4iYXV0byI9PT1sJiZ0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yPy5sYW5ndWFnZT95RmUudGVzdChuYXZpZ2F0b3Iu''@;'; put 'put ''bGFuZ3VhZ2UpPyJydGwiOiJsdHIiOiJydGwiPT09bD8icnRsIjoibHRyIn0oKGEuYm9keT9hLmJvZHkuZGlyOm51bGwpfHwoYS5kb2N1bWVudEVsZW1lbnQ/YS5kb2N1bWVudEVsZW1lbnQuZGlyOm51bGwpfHwibHRyIikpfW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2RmUsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NsYXNzIHdGZXt9Y2xh''@;'; put 'put ''c3MgU0ZlIGV4dGVuZHMgd0Zle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5fZGF0YT1sfWNvbm5lY3QoKXtyZXR1cm4gQk0odGhpcy5fZGF0YSk/dGhpcy5fZGF0YTpmbyh0aGlzLl9kYXRhKX1kaXNjb25uZWN0KCl7fX12YXIgZ209ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SRVBMQUNF''@;'; put 'put ''RD0wXT0iUkVQTEFDRUQiLGNbYy5JTlNFUlRFRD0xXT0iSU5TRVJURUQiLGNbYy5NT1ZFRD0yXT0iTU9WRUQiLGNbYy5SRU1PVkVEPTNdPSJSRU1PVkVEIixjfShnbXx8e30pO2NvbnN0IF9ZPW5ldyBTdCgiX1ZpZXdSZXBlYXRlciIpO2NsYXNzIFowZXtjb25zdHJ1Y3Rvcigpe3RoaXMudmll''@;'; put 'put ''d0NhY2hlU2l6ZT0yMCx0aGlzLl92aWV3Q2FjaGU9W119YXBwbHlDaGFuZ2VzKGwsYSxkLGgsZil7bC5mb3JFYWNoT3BlcmF0aW9uKCh2LE0sRCk9PntsZXQgWixyZTtudWxsPT12LnByZXZpb3VzSW5kZXg/KFo9dGhpcy5faW5zZXJ0VmlldygoKT0+ZCh2LE0sRCksRCxhLGgodikpLHJlPVo/''@;'; put 'put ''Z20uSU5TRVJURUQ6Z20uUkVQTEFDRUQpOm51bGw9PUQ/KHRoaXMuX2RldGFjaEFuZENhY2hlVmlldyhNLGEpLHJlPWdtLlJFTU9WRUQpOihaPXRoaXMuX21vdmVWaWV3KE0sRCxhLGgodikpLHJlPWdtLk1PVkVEKSxmJiZmKHtjb250ZXh0Olo/LmNvbnRleHQsb3BlcmF0aW9uOnJlLHJlY29y''@;'; put 'put ''ZDp2fSl9KX1kZXRhY2goKXtmb3IoY29uc3QgbCBvZiB0aGlzLl92aWV3Q2FjaGUpbC5kZXN0cm95KCk7dGhpcy5fdmlld0NhY2hlPVtdfV9pbnNlcnRWaWV3KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faW5zZXJ0Vmlld0Zyb21DYWNoZShhLGQpO2lmKGYpcmV0dXJuIHZvaWQoZi5jb250ZXh0''@;'; put 'put ''LiRpbXBsaWNpdD1oKTtjb25zdCB2PWwoKTtyZXR1cm4gZC5jcmVhdGVFbWJlZGRlZFZpZXcodi50ZW1wbGF0ZVJlZix2LmNvbnRleHQsdi5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyhsLGEpe2NvbnN0IGQ9YS5kZXRhY2gobCk7dGhpcy5fbWF5YmVDYWNoZVZpZXcoZCxhKX1fbW92ZVZp''@;'; put 'put ''ZXcobCxhLGQsaCl7Y29uc3QgZj1kLmdldChsKTtyZXR1cm4gZC5tb3ZlKGYsYSksZi5jb250ZXh0LiRpbXBsaWNpdD1oLGZ9X21heWJlQ2FjaGVWaWV3KGwsYSl7aWYodGhpcy5fdmlld0NhY2hlLmxlbmd0aDx0aGlzLnZpZXdDYWNoZVNpemUpdGhpcy5fdmlld0NhY2hlLnB1c2gobCk7ZWxz''@;'; put 'put ''ZXtjb25zdCBkPWEuaW5kZXhPZihsKTstMT09PWQ/bC5kZXN0cm95KCk6YS5yZW1vdmUoZCl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKGwsYSl7Y29uc3QgZD10aGlzLl92aWV3Q2FjaGUucG9wKCk7cmV0dXJuIGQmJmEuaW5zZXJ0KGQsbCksZHx8bnVsbH19Y29uc3QgTUZlPVsiY29udGVudFdy''@;'; put 'put ''YXBwZXIiXSx4RmU9WyIqIl0sVzBlPW5ldyBTdCgiVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kiKTtjbGFzcyBFRmV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IFduLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT10aGlzLl9zY3JvbGxlZEluZGV4Q2hh''@;'; put 'put ''bmdlLnBpcGUoZnVuY3Rpb24gY1koYyxsPWNuKXtyZXR1cm4gYz1jPz9KT2UsVmkoKGEsZCk9PntsZXQgaCxmPSEwO2Euc3Vic2NyaWJlKE5pKGQsdj0+e2NvbnN0IE09bCh2KTsoZnx8IWMoaCxNKSkmJihmPSExLGg9TSxkLm5leHQodikpfSkpfSl9KCkpLHRoaXMuX3ZpZXdwb3J0PW51bGws''@;'; put 'put ''dGhpcy5faXRlbVNpemU9bCx0aGlzLl9taW5CdWZmZXJQeD1hLHRoaXMuX21heEJ1ZmZlclB4PWR9YXR0YWNoKGwpe3RoaXMuX3ZpZXdwb3J0PWwsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1kZXRhY2goKXt0aGlzLl9zY3JvbGxl''@;'; put 'put ''ZEluZGV4Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnQ9bnVsbH11cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZShsLGEsZCl7dGhpcy5faXRlbVNpemU9bCx0aGlzLl9taW5CdWZmZXJQeD1hLHRoaXMuX21heEJ1ZmZlclB4PWQsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRo''@;'; put 'put ''aXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRS''@;'; put 'put ''ZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KGwsYSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KGwqdGhpcy5faXRlbVNpemUsYSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXt0aGlzLl92aWV3cG9ydCYm''@;'; put 'put ''dGhpcy5fdmlld3BvcnQuc2V0VG90YWxDb250ZW50U2l6ZSh0aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCkqdGhpcy5faXRlbVNpemUpfV91cGRhdGVSZW5kZXJlZFJhbmdlKCl7aWYoIXRoaXMuX3ZpZXdwb3J0KXJldHVybjtjb25zdCBsPXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVk''@;'; put 'put ''UmFuZ2UoKSxhPXtzdGFydDpsLnN0YXJ0LGVuZDpsLmVuZH0sZD10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxoPXRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKTtsZXQgZj10aGlzLl92aWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCksdj10aGlzLl9pdGVtU2l6ZT4w''@;'; put 'put ''P2YvdGhpcy5faXRlbVNpemU6MDtpZihhLmVuZD5oKXtjb25zdCBEPU1hdGguY2VpbChkL3RoaXMuX2l0ZW1TaXplKSxaPU1hdGgubWF4KDAsTWF0aC5taW4odixoLUQpKTt2IT1aJiYodj1aLGY9Wip0aGlzLl9pdGVtU2l6ZSxhLnN0YXJ0PU1hdGguZmxvb3IodikpLGEuZW5kPU1hdGgubWF4''@;'; put 'put ''KDAsTWF0aC5taW4oaCxhLnN0YXJ0K0QpKX1jb25zdCBNPWYtYS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihNPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1hLnN0YXJ0KXtjb25zdCBEPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtTSkvdGhpcy5faXRlbVNpemUpO2Euc3RhcnQ9TWF0aC5t''@;'; put 'put ''YXgoMCxhLnN0YXJ0LUQpLGEuZW5kPU1hdGgubWluKGgsTWF0aC5jZWlsKHYrKGQrdGhpcy5fbWluQnVmZmVyUHgpL3RoaXMuX2l0ZW1TaXplKSl9ZWxzZXtjb25zdCBEPWEuZW5kKnRoaXMuX2l0ZW1TaXplLShmK2QpO2lmKEQ8dGhpcy5fbWluQnVmZmVyUHgmJmEuZW5kIT1oKXtjb25zdCBa''@;'; put 'put ''PU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtRCkvdGhpcy5faXRlbVNpemUpO1o+MCYmKGEuZW5kPU1hdGgubWluKGgsYS5lbmQrWiksYS5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3Iodi10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQu''@;'; put 'put ''c2V0UmVuZGVyZWRSYW5nZShhKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqYS5zdGFydCksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IodikpfX1sZXQga3k9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh''@;'; put 'put ''LGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5fcGxhdGZvcm09ZCx0aGlzLl9zY3JvbGxlZD1uZXcgV24sdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwLHRoaXMuX2RvY3VtZW50PWh9cmVnaXN0''@;'; put 'put ''ZXIoYSl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyhhKXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldChhLGEuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KGEpKSl9ZGVyZWdpc3RlcihhKXtjb25zdCBkPXRoaXMuc2Nyb2xsQ29udGFpbmVy''@;'; put 'put ''cy5nZXQoYSk7ZCYmKGQudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGEpKX1zY3JvbGxlZChhPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBYdChkPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxMaXN0''@;'; put 'put ''ZW5lcigpO2NvbnN0IGg9YT4wP3RoaXMuX3Njcm9sbGVkLnBpcGUoeVkoYSkpLnN1YnNjcmliZShkKTp0aGlzLl9zY3JvbGxlZC5zdWJzY3JpYmUoZCk7cmV0dXJuIHRoaXMuX3Njcm9sbGVkQ291bnQrKywoKT0+e2gudW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxlZENvdW50LS0sdGhpcy5f''@;'; put 'put ''c2Nyb2xsZWRDb3VudHx8dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKX19KTpmbygpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoYSxkKT0+dGhpcy5kZXJlZ2lzdGVyKGQpKSx0aGlzLl9zY3JvbGxl''@;'; put 'put ''ZC5jb21wbGV0ZSgpfWFuY2VzdG9yU2Nyb2xsZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpO3JldHVybiB0aGlzLnNjcm9sbGVkKGQpLnBpcGUoJGwoZj0+IWZ8fGguaW5kZXhPZihmKT4tMSkpfWdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhh''@;'; put 'put ''KXtjb25zdCBkPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoaCxmKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZixhKSYmZC5wdXNoKGYpfSksZH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9''@;'; put 'put ''X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoYSxkKXtsZXQgaD1FZChkKSxmPWEuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYoaD09ZilyZXR1cm4hMH13aGlsZShoPWgucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFs''@;'; put 'put ''U3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eGQodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vi''@;'; put 'put ''c2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFdhKSx4cihDeCkseHIodnMsOCkpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLFkwZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1kLHRo''@;'; put 'put ''aXMubmdab25lPWgsdGhpcy5kaXI9Zix0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgWHQodj0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnhkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKFYwKHRo''@;'; put 'put ''aXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSh2KSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0''@;'; put 'put ''cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaD10aGlzLmRpciYm''@;'; put 'put ''InJ0bCI9PXRoaXMuZGlyLnZhbHVlO251bGw9PWEubGVmdCYmKGEubGVmdD1oP2EuZW5kOmEuc3RhcnQpLG51bGw9PWEucmlnaHQmJihhLnJpZ2h0PWg/YS5zdGFydDphLmVuZCksbnVsbCE9YS5ib3R0b20mJihhLnRvcD1kLnNjcm9sbEhlaWdodC1kLmNsaWVudEhlaWdodC1hLmJvdHRvbSks''@;'; put 'put ''aCYmTXgoKSE9X3AuTk9STUFMPyhudWxsIT1hLmxlZnQmJihhLnJpZ2h0PWQuc2Nyb2xsV2lkdGgtZC5jbGllbnRXaWR0aC1hLmxlZnQpLE14KCk9PV9wLklOVkVSVEVEP2EubGVmdD1hLnJpZ2h0Ok14KCk9PV9wLk5FR0FURUQmJihhLmxlZnQ9YS5yaWdodD8tYS5yaWdodDphLnJpZ2h0KSk6''@;'; put 'put ''bnVsbCE9YS5yaWdodCYmKGEubGVmdD1kLnNjcm9sbFdpZHRoLWQuY2xpZW50V2lkdGgtYS5yaWdodCksdGhpcy5fYXBwbHlTY3JvbGxUb09wdGlvbnMoYSl9X2FwcGx5U2Nyb2xsVG9PcHRpb25zKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7IWZ1bmN0aW9uIG1Q''@;'; put 'put ''ZSgpe2lmKG51bGw9PXU3KXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBFbGVtZW50fHwhRWxlbWVudClyZXR1cm4gdTc9ITEsdTc7aWYoInNjcm9sbEJlaGF2aW9yImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSl1''@;'; put 'put ''Nz0hMDtlbHNle2NvbnN0IGM9RWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsVG87dTc9ISFjJiYhL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vLnRlc3QoYy50b1N0cmluZygpKX19cmV0dXJuIHU3fSgpPyhudWxsIT1hLnRvcCYmKGQuc2Nyb2xsVG9wPWEudG9wKSxudWxsIT1hLmxlZnQmJihk''@;'; put 'put ''LnNjcm9sbExlZnQ9YS5sZWZ0KSk6ZC5zY3JvbGxUbyhhKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGEpe2NvbnN0IGQ9ImxlZnQiLGg9InJpZ2h0IixmPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKCJ0b3AiPT1hKXJldHVybiBmLnNjcm9sbFRvcDtpZigiYm90dG9tIj09YSlyZXR1''@;'; put 'put ''cm4gZi5zY3JvbGxIZWlnaHQtZi5jbGllbnRIZWlnaHQtZi5zY3JvbGxUb3A7Y29uc3Qgdj10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO3JldHVybiJzdGFydCI9PWE/YT12P2g6ZDoiZW5kIj09YSYmKGE9dj9kOmgpLHYmJk14KCk9PV9wLklOVkVSVEVEP2E9PWQ/Zi5zY3JvbGxX''@;'; put 'put ''aWR0aC1mLmNsaWVudFdpZHRoLWYuc2Nyb2xsTGVmdDpmLnNjcm9sbExlZnQ6diYmTXgoKT09X3AuTkVHQVRFRD9hPT1kP2Yuc2Nyb2xsTGVmdCtmLnNjcm9sbFdpZHRoLWYuY2xpZW50V2lkdGg6LWYuc2Nyb2xsTGVmdDphPT1kP2Yuc2Nyb2xsTGVmdDpmLnNjcm9sbFdpZHRoLWYuY2xpZW50''@;'; put 'put ''V2lkdGgtZi5zY3JvbGxMZWZ0fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShreSksR2UoV2EpLEdlKHBtLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxl''@;'; put 'put ''IiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dLHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLEFMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3BsYXRmb3JtPWEsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLl9jaGFuZ2VMaXN0ZW5lcj1mPT57dGhpcy5f''@;'; put 'put ''Y2hhbmdlLm5leHQoZil9LHRoaXMuX2RvY3VtZW50PWgsZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKGEuaXNCcm93c2VyKXtjb25zdCBmPXRoaXMuX2dldFdpbmRvdygpO2YuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksZi5hZGRFdmVudExpc3Rl''@;'; put 'put ''bmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7Y29uc3QgYT10aGlzLl9nZXRXaW5k''@;'; put 'put ''b3coKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLl9jaGFuZ2UuY29tcGxldGUoKX1nZXRWaWV3cG9ydFNpemUoKXt0''@;'; put 'put ''aGlzLl92aWV3cG9ydFNpemV8fHRoaXMuX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpO2NvbnN0IGE9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdw''@;'; put 'put ''b3J0U2l6ZT1udWxsKSxhfWdldFZpZXdwb3J0UmVjdCgpe2NvbnN0IGE9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDphLnRvcCxsZWZ0OmEubGVmdCxib3R0b206YS50b3AraCxyaWdo''@;'; put 'put ''dDphLmxlZnQrZCxoZWlnaHQ6aCx3aWR0aDpkfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtjb25zdCBhPXRoaXMuX2RvY3VtZW50LGQ9dGhpcy5fZ2V0V2luZG93KCksaD1hLmRvY3VtZW50RWxl''@;'; put 'put ''bWVudCxmPWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotZi50b3B8fGEuYm9keS5zY3JvbGxUb3B8fGQuc2Nyb2xsWXx8aC5zY3JvbGxUb3B8fDAsbGVmdDotZi5sZWZ0fHxhLmJvZHkuc2Nyb2xsTGVmdHx8ZC5zY3JvbGxYfHxoLnNjcm9sbExlZnR8fDB9fWNoYW5nZShh''@;'; put 'put ''PTIwKXtyZXR1cm4gYT4wP3RoaXMuX2NoYW5nZS5waXBlKHlZKGEpKTp0aGlzLl9jaGFuZ2V9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV91cGRhdGVWaWV3cG9ydFNpemUoKXtjb25zdCBhPXRoaXMuX2dldFdpbmRvdygpO3RoaXMuX3Zp''@;'; put 'put ''ZXdwb3J0U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dpZHRoOmEuaW5uZXJXaWR0aCxoZWlnaHQ6YS5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKEN4KSx4cihXYSkseHIo''@;'; put 'put ''dnMsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEcwZT1uZXcgU3QoIlZJUlRVQUxfU0NST0xMQUJMRSIpO2xldCAkMGU9KCgpPT57Y2xhc3MgYyBleHRlbmRz''@;'; put 'put ''IFkwZXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihhLGQsaCxmKX1tZWFzdXJlVmlld3BvcnRTaXplKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6b250YWwiPT09YT9kLmNsaWVudFdpZHRoOmQuY2xpZW50SGVpZ2h0fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShreSksR2UoV2EpLEdlKHBtLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsZmVhdHVyZXM6W3dhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgREZlPXR5cGVvZiByZXF1ZXN0QW5pbWF0''@;'; put 'put ''aW9uRnJhbWU8InUiP2owZTpmRmU7bGV0IER5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyAkMGV7Z2V0IG9yaWVudGF0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9ufXNldCBvcmllbnRhdGlvbihhKXt0aGlzLl9vcmllbnRhdGlvbiE9PWEmJih0aGlzLl9vcmllbnRhdGlvbj1hLHRoaXMu''@;'; put 'put ''X2NhbGN1bGF0ZVNwYWNlclNpemUoKSl9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaKXtzdXBlcihhLE0saCx2KSx0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1kLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWYsdGhpcy5zY3JvbGxhYmxlPVosdGhpcy5fcGxhdGZv''@;'; put 'put ''cm09ZmkoQ3gpLHRoaXMuX2RldGFjaGVkU3ViamVjdD1uZXcgV24sdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3Q9bmV3IFduLHRoaXMuX29yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIsdGhpcy5hcHBlbmRPbmx5PSExLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgWHQocmU9PnRoaXMuX3Nj''@;'; put 'put ''cm9sbFN0cmF0ZWd5LnNjcm9sbGVkSW5kZXhDaGFuZ2Uuc3Vic2NyaWJlKGNlPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLm5nWm9uZS5ydW4oKCk9PnJlLm5leHQoY2UpKSkpKSx0aGlzLnJlbmRlcmVkUmFuZ2VTdHJlYW09dGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QsdGhp''@;'; put 'put ''cy5fdG90YWxDb250ZW50U2l6ZT0wLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSIiLHRoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iIix0aGlzLl9yZW5kZXJlZFJhbmdlPXtzdGFydDowLGVuZDowfSx0aGlzLl9kYXRhTGVuZ3RoPTAsdGhpcy5fdmlld3BvcnRTaXplPTAsdGhpcy5fcmVuZGVy''@;'; put 'put ''ZWRDb250ZW50T2Zmc2V0PTAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXSx0aGlzLl92aWV3cG9ydENoYW5nZXM9cXQuRU1QVFksdGhpcy5f''@;'; put 'put ''dmlld3BvcnRDaGFuZ2VzPUQuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpfSksdGhpcy5zY3JvbGxhYmxlfHwodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZSIpLHRoaXMuc2Ny''@;'; put 'put ''b2xsYWJsZT10aGlzKX1uZ09uSW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFz''@;'; put 'put ''dXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKHgyKG51bGwpLHlZKDAsREZlKSxWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5''@;'; put 'put ''Lm9uQ29udGVudFNjcm9sbGVkKCkpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRldGFjaCgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRldGFjaCgpLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fZGV0''@;'; put 'put ''YWNoZWRTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRDaGFuZ2VzLnVuc3Vic2NyaWJlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1hdHRhY2goYSl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9mb3JPZj1hLHRoaXMuX2Zvck9mLmRhdGFTdHJlYW0ucGlw''@;'; put 'put ''ZShWMCh0aGlzLl9kZXRhY2hlZFN1YmplY3QpKS5zdWJzY3JpYmUoZD0+e2NvbnN0IGg9ZC5sZW5ndGg7aCE9PXRoaXMuX2RhdGFMZW5ndGgmJih0aGlzLl9kYXRhTGVuZ3RoPWgsdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpKSx0aGlzLl9kb0NoYW5nZURldGVj''@;'; put 'put ''dGlvbigpfSl9KX1kZXRhY2goKXt0aGlzLl9mb3JPZj1udWxsLHRoaXMuX2RldGFjaGVkU3ViamVjdC5uZXh0KCl9Z2V0RGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhTGVuZ3RofWdldFZpZXdwb3J0U2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydFNpemV9Z2V0UmVuZGVyZWRSYW5n''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLl9yZW5kZXJlZFJhbmdlfW1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGEpe3JldHVybiB0aGlzLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2FdfXNldFRvdGFsQ29udGVudFNpemUo''@;'; put 'put ''YSl7dGhpcy5fdG90YWxDb250ZW50U2l6ZSE9PWEmJih0aGlzLl90b3RhbENvbnRlbnRTaXplPWEsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKSl9c2V0UmVuZGVyZWRSYW5nZShhKXsoZnVuY3Rpb24ga0ZlKGMsbCl7cmV0dXJu''@;'; put 'put ''IGMuc3RhcnQ9PWwuc3RhcnQmJmMuZW5kPT1sLmVuZH0pKHRoaXMuX3JlbmRlcmVkUmFuZ2UsYSl8fCh0aGlzLmFwcGVuZE9ubHkmJihhPXtzdGFydDowLGVuZDpNYXRoLm1heCh0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCxhLmVuZCl9KSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5uZXh0''@;'; put 'put ''KHRoaXMuX3JlbmRlcmVkUmFuZ2U9YSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50UmVuZGVyZWQoKSkpfWdldE9mZnNldFRvUmVuZGVyZWRDb250ZW50U3RhcnQoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZWRDb250ZW50''@;'; put 'put ''T2Zmc2V0TmVlZHNSZXdyaXRlP251bGw6dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0fXNldFJlbmRlcmVkQ29udGVudE9mZnNldChhLGQ9InRvLXN0YXJ0Iil7YT10aGlzLmFwcGVuZE9ubHkmJiJ0by1zdGFydCI9PT1kPzA6YTtjb25zdCBmPSJob3Jpem9udGFsIj09dGhpcy5vcmllbnRh''@;'; put 'put ''dGlvbix2PWY/IlgiOiJZIjtsZXQgRD1gdHJhbnNsYXRlJHt2fSgke051bWJlcigoZiYmdGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZT8tMToxKSphKX1weClgO3RoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD1hLCJ0by1lbmQiPT09ZCYmKEQrPWAgdHJhbnNsYXRlJHt2fSgtMTAw''@;'; put 'put ''JSlgLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMCksdGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtIT1EJiYodGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtPUQsdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+e3RoaXMuX3JlbmRl''@;'; put 'put ''cmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT8odGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0LT10aGlzLm1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCksdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0''@;'; put 'put ''KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldCkpOnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uUmVuZGVyZWRPZmZzZXRDaGFuZ2VkKCl9KSl9c2Nyb2xsVG9PZmZzZXQoYSxkPSJhdXRvIil7Y29uc3QgaD17YmVoYXZpb3I6ZH07Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9oLnN0''@;'; put 'put ''YXJ0PWE6aC50b3A9YSx0aGlzLnNjcm9sbGFibGUuc2Nyb2xsVG8oaCl9c2Nyb2xsVG9JbmRleChhLGQ9ImF1dG8iKXt0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxUb0luZGV4KGEsZCl9bWVhc3VyZVNjcm9sbE9mZnNldChhKXtsZXQgZDtyZXR1cm4gZD10aGlzLnNjcm9sbGFibGU9PXRo''@;'; put 'put ''aXM/aD0+c3VwZXIubWVhc3VyZVNjcm9sbE9mZnNldChoKTpoPT50aGlzLnNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldChoKSxNYXRoLm1heCgwLGQoYT8/KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/InN0YXJ0IjoidG9wIikpLXRoaXMubWVhc3VyZVZpZXdwb3J0T2Zm''@;'; put 'put ''c2V0KCkpfW1lYXN1cmVWaWV3cG9ydE9mZnNldChhKXtsZXQgZDtjb25zdCBoPSJsZWZ0IixmPSJyaWdodCIsdj0icnRsIj09dGhpcy5kaXI/LnZhbHVlO2Q9InN0YXJ0Ij09YT92P2Y6aDoiZW5kIj09YT92P2g6ZjphfHwoImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ibGVmdCI6''@;'; put 'put ''InRvcCIpO2NvbnN0IE09dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGQpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkXS1NfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRT''@;'; put 'put ''aXplKCl7Y29uc3QgYT10aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodH1tZWFzdXJlUmFuZ2VTaXplKGEpe3JldHVybiB0aGlzLl9mb3JPZj90aGlzLl9mb3JP''@;'; put 'put ''Zi5tZWFzdXJlUmFuZ2VTaXplKGEsdGhpcy5vcmllbnRhdGlvbik6MH1jaGVja1ZpZXdwb3J0U2l6ZSgpe3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCl9X21lYXN1cmVWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3''@;'; put 'put ''cG9ydFNpemU9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVWaWV3cG9ydFNpemUodGhpcy5vcmllbnRhdGlvbil9X21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoYSl7YSYmdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb24ucHVzaChhKSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmd8''@;'; put 'put ''fCh0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITAsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9kb0NoYW5nZURldGVjdGlvbigpfSkpKX1fZG9DaGFuZ2VEZXRlY3Rpb24oKXt0aGlzLl9pc0NoYW5nZURl''@;'; put 'put ''dGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtLHRoaXMubmdab25lLnJ1bigoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpO2NvbnN0''@;'; put 'put ''IGE9dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb247dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlv''@;'; put 'put ''bj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpKEdlKEppKSxHZShFcyksR2UoV2EpLEdlKFcwZSw4KSxHZShwbSw4KSxHZShreSksR2UoQUwpLEdlKEcwZSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXV0sdmlld1F1ZXJ5OmZ1''@;'; put 'put ''bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShNRmUsNyksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5fY29udGVudFdyYXBwZXI9Zi5maXJzdCl9fSxob3N0QXR0cnM6WzEsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7''@;'; put 'put ''MiZkJiZUcigiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwiLCJob3Jpem9udGFsIj09PWgub3JpZW50YXRpb24pKCJjZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwiLCJob3Jpem9udGFsIiE9PWgub3JpZW50YXRpb24pfSxpbnB1dHM6e29y''@;'; put 'put ''aWVudGF0aW9uOiJvcmllbnRhdGlvbiIsYXBwZW5kT25seTpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImFwcGVuZE9ubHkiLCJhcHBlbmRPbmx5IixzMV19LG91dHB1dHM6e3Njcm9sbGVkSW5kZXhDaGFuZ2U6InNjcm9sbGVkSW5kZXhDaGFuZ2UifSxzdGFuZGFsb25lOiEwLGZl''@;'; put 'put ''YXR1cmVzOltkYShbe3Byb3ZpZGU6WTBlLHVzZUZhY3Rvcnk6KGEsZCk9PmF8fGQsZGVwczpbW25ldyBJMSxuZXcgYzUoRzBlKV0sY119XSksV2wsd2EscUldLG5nQ29udGVudFNlbGVjdG9yczp4RmUsZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbImNvbnRlbnRXcmFwcGVyIiwiIl0sWzEsImNk''@;'; put 'put ''ay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKHNhKCksZGUoMCwiZGl2IiwxLDApLFlyKDIpLGhlKCksR3QoMywiZGl2IiwyKSksMiZkJiYoZmUoMyksX2QoIndpZHRo''@;'; put 'put ''IixoLl90b3RhbENvbnRlbnRXaWR0aCkoImhlaWdodCIsaC5fdG90YWxDb250ZW50SGVpZ2h0KSl9LHN0eWxlczpbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5jZGstdmlydHVhbC1z''@;'; put 'put ''Y3JvbGxhYmxle292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6c2Nyb2xsLXBvc2l0aW9uO2NvbnRhaW46c3RyaWN0Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6''@;'; put 'put ''MDtjb250YWluOmNvbnRlbnR9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3JpZ2h0OjA7bGVmdDphdXRvfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4t''@;'; put 'put ''aGVpZ2h0OjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZp''@;'; put 'put ''cnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12''@;'; put 'put ''aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2JvcmRlci1s''@;'; put 'put ''ZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLXdpZHRoOjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRh''@;'; put 'put ''dGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmly''@;'; put 'put ''dHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1''@;'; put 'put ''YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO291dGxpbmU6bm9uZX0u''@;'; put 'put ''Y2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntoZWlnaHQ6MXB4O3RyYW5zZm9ybS1vcmlnaW46MCAwO2ZsZXg6MCAwIGF1dG99W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rp''@;'; put 'put ''b246MH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gSzBlKGMsbCxhKXtpZighYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIDA7Y29uc3QgaD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiJob3Jpem9udGFsIj09PWM/InN0YXJ0Ij09PWw/aC5sZWZ0OmgucmlnaHQ6InN0''@;'; put 'put ''YXJ0Ij09PWw/aC50b3A6aC5ib3R0b219bGV0IGtMPSgoKT0+e2NsYXNzIGN7Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZihhKXt0aGlzLl9jZGtWaXJ0dWFsRm9yT2Y9YSxmdW5jdGlvbiBDRmUoYyl7cmV0dXJu''@;'; put 'put ''IGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmNvbm5lY3QmJiEoYyBpbnN0YW5jZW9mIFdaKX0oYSk/dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChhKTp0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KG5ldyBTRmUoQk0oYSk/YTpBcnJheS5mcm9tKGF8fFtdKSkpfWdldCBjZGtWaXJ0''@;'; put 'put ''dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoYSl7dGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnk9YT8oZCxoKT0+YShkKyh0aGlzLl9yZW5kZXJlZFJhbmdlP3RoaXMu''@;'; put 'put ''X3JlbmRlcmVkUmFuZ2Uuc3RhcnQ6MCksaCk6dm9pZCAwfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoYSl7YSYmKHRoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX3RlbXBsYXRlPWEpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5fdmlld1JlcGVh''@;'; put 'put ''dGVyLnZpZXdDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZShhKXt0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZT1kNyhhKX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1hLHRoaXMuX3RlbXBsYXRlPWQsdGhp''@;'; put 'put ''cy5fZGlmZmVycz1oLHRoaXMuX3ZpZXdSZXBlYXRlcj1mLHRoaXMuX3ZpZXdwb3J0PXYsdGhpcy52aWV3Q2hhbmdlPW5ldyBXbix0aGlzLl9kYXRhU291cmNlQ2hhbmdlcz1uZXcgV24sdGhpcy5kYXRhU3RyZWFtPXRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLnBpcGUoeDIobnVsbCksZnVuY3Rp''@;'; put 'put ''b24gbUZlKCl7cmV0dXJuIFZpKChjLGwpPT57bGV0IGEsZD0hMTtjLnN1YnNjcmliZShOaShsLGg9Pntjb25zdCBmPWE7YT1oLGQmJmwubmV4dChbZixoXSksZD0hMH0pKX0pfSgpLFYxKChbRCxaXSk9PnRoaXMuX2NoYW5nZURhdGFTb3VyY2UoRCxaKSksSTBlKDEpKSx0aGlzLl9kaWZmZXI9''@;'; put 'put ''bnVsbCx0aGlzLl9uZWVkc1VwZGF0ZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuZGF0YVN0cmVhbS5zdWJzY3JpYmUoRD0+e3RoaXMuX2RhdGE9RCx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKFYw''@;'; put 'put ''KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShEPT57dGhpcy5fcmVuZGVyZWRSYW5nZT1ELHRoaXMudmlld0NoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZNLnJ1bigoKT0+dGhpcy52aWV3Q2hhbmdlLm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZSkpLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hh''@;'; put 'put ''bmdlKCl9KSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9bWVhc3VyZVJhbmdlU2l6ZShhLGQpe2lmKGEuc3RhcnQ+PWEuZW5kKXJldHVybiAwO2NvbnN0IGg9YS5zdGFydC10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LGY9YS5lbmQtYS5zdGFydDtsZXQgdixNO2ZvcihsZXQgRD0wO0Q8''@;'; put 'put ''ZjtEKyspe2NvbnN0IFo9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoRCtoKTtpZihaJiZaLnJvb3ROb2Rlcy5sZW5ndGgpe3Y9TT1aLnJvb3ROb2Rlc1swXTticmVha319Zm9yKGxldCBEPWYtMTtEPi0xO0QtLSl7Y29uc3QgWj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChEK2gpO2lm''@;'; put 'put ''KFomJloucm9vdE5vZGVzLmxlbmd0aCl7TT1aLnJvb3ROb2Rlc1taLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiB2JiZNP0swZShkLCJlbmQiLE0pLUswZShkLCJzdGFydCIsdik6MH1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXImJnRoaXMuX25lZWRzVXBkYXRlKXtjb25z''@;'; put 'put ''dCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX3JlbmRlcmVkSXRlbXMpO2E/dGhpcy5fYXBwbHlDaGFuZ2VzKGEpOnRoaXMuX3VwZGF0ZUNvbnRleHQoKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMX19bmdPbkRlc3Ryb3koKXt0aGlzLl92aWV3cG9ydC5kZXRhY2goKSx0aGlzLl9kYXRhU291cmNl''@;'; put 'put ''Q2hhbmdlcy5uZXh0KHZvaWQgMCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLnZpZXdDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdSZXBlYXRlci5kZXRhY2goKX1fb25S''@;'; put 'put ''ZW5kZXJlZERhdGFDaGFuZ2UoKXt0aGlzLl9yZW5kZXJlZFJhbmdlJiYodGhpcy5fcmVuZGVyZWRJdGVtcz10aGlzLl9kYXRhLnNsaWNlKHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsdGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQpLHRoaXMuX2RpZmZlcnx8KHRoaXMuX2RpZmZlcj10aGlzLl9k''@;'; put 'put ''aWZmZXJzLmZpbmQodGhpcy5fcmVuZGVyZWRJdGVtcykuY3JlYXRlKChhLGQpPT50aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5P3RoaXMuY2RrVmlydHVhbEZvclRyYWNrQnkoYSxkKTpkKSksdGhpcy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKGEsZCl7cmV0dXJuIGEmJmEu''@;'; put 'put ''ZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxkP2QuY29ubmVjdCh0aGlzKTpmbygpfV91cGRhdGVDb250ZXh0KCl7Y29uc3QgYT10aGlzLl9kYXRhLmxlbmd0aDtsZXQgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2QtLTspe2NvbnN0IGg9dGhpcy5f''@;'; put 'put ''dmlld0NvbnRhaW5lclJlZi5nZXQoZCk7aC5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQrZCxoLmNvbnRleHQuY291bnQ9YSx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKGguY29udGV4dCksaC5kZXRlY3RDaGFuZ2VzKCl9fV9hcHBseUNoYW5n''@;'; put 'put ''ZXMoYSl7dGhpcy5fdmlld1JlcGVhdGVyLmFwcGx5Q2hhbmdlcyhhLHRoaXMuX3ZpZXdDb250YWluZXJSZWYsKGYsdixNKT0+dGhpcy5fZ2V0RW1iZWRkZWRWaWV3QXJncyhmLE0pLGY9PmYuaXRlbSksYS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZj0+e3RoaXMuX3ZpZXdDb250YWluZXJSZWYu''@;'; put 'put ''Z2V0KGYuY3VycmVudEluZGV4KS5jb250ZXh0LiRpbXBsaWNpdD1mLml0ZW19KTtjb25zdCBkPXRoaXMuX2RhdGEubGVuZ3RoO2xldCBoPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7aC0tOyl7Y29uc3QgZj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChoKTtmLmNvbnRl''@;'; put 'put ''eHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtoLGYuY29udGV4dC5jb3VudD1kLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoZi5jb250ZXh0KX19X3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoYSl7YS5maXJzdD0wPT09YS5pbmRleCxhLmxh''@;'; put 'put ''c3Q9YS5pbmRleD09PWEuY291bnQtMSxhLmV2ZW49YS5pbmRleCUyPT0wLGEub2RkPSFhLmV2ZW59X2dldEVtYmVkZGVkVmlld0FyZ3MoYSxkKXtyZXR1cm57dGVtcGxhdGVSZWY6dGhpcy5fdGVtcGxhdGUsY29udGV4dDp7JGltcGxpY2l0OmEuaXRlbSxjZGtWaXJ0dWFsRm9yT2Y6dGhpcy5f''@;'; put 'put ''Y2RrVmlydHVhbEZvck9mLGluZGV4Oi0xLGNvdW50Oi0xLGZpcnN0OiExLGxhc3Q6ITEsb2RkOiExLGV2ZW46ITF9LGluZGV4OmR9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKERvKSxHZShTbCksR2UoZW0pLEdlKF9ZKSxHZShEeSw0KSxH''@;'; put 'put ''ZShXYSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrVmlydHVhbEZvciIsIiIsImNka1ZpcnR1YWxGb3JPZiIsIiJdXSxpbnB1dHM6e2Nka1ZpcnR1YWxGb3JPZjoiY2RrVmlydHVhbEZvck9mIixjZGtWaXJ0dWFsRm9yVHJhY2tCeToiY2Rr''@;'; put 'put ''VmlydHVhbEZvclRyYWNrQnkiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlIixjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJvdmlk''@;'; put 'put ''ZTpfWSx1c2VDbGFzczpaMGV9XSldfSl9fXJldHVybiBjfSkoKSxJRmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9''@;'; put 'put ''QXIoe30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gd1koYyxsLGEpe2ZvcihsZXQgZCBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkoZCkpe2NvbnN0IGg9bFtkXTtoP2Muc2V0UHJvcGVydHkoZCxoLGE/LmhhcyhkKT8iaW1wb3J0YW50IjoiIik6Yy5yZW1vdmVQcm9wZXJ0eShkKX1yZXR1cm4g''@;'; put 'put ''Y31mdW5jdGlvbiBJeShjLGwpe2NvbnN0IGE9bD8iIjoibm9uZSI7d1koYy5zdHlsZSx7InRvdWNoLWFjdGlvbiI6bD8iIjoibm9uZSIsIi13ZWJraXQtdXNlci1kcmFnIjpsPyIiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjpsPyIiOiJ0cmFuc3BhcmVudCIsInVzZXIt''@;'; put 'put ''c2VsZWN0IjphLCItbXMtdXNlci1zZWxlY3QiOmEsIi13ZWJraXQtdXNlci1zZWxlY3QiOmEsIi1tb3otdXNlci1zZWxlY3QiOmF9KX1mdW5jdGlvbiBxMGUoYyxsLGEpe3dZKGMuc3R5bGUse3Bvc2l0aW9uOmw/IiI6ImZpeGVkIix0b3A6bD8iIjoiMCIsb3BhY2l0eTpsPyIiOiIwIixsZWZ0''@;'; put 'put ''Omw/IiI6Ii05OTllbSJ9LGEpfWZ1bmN0aW9uIERMKGMsbCl7cmV0dXJuIGwmJiJub25lIiE9bD9jKyIgIitsOmN9ZnVuY3Rpb24gWDBlKGMsbCl7Yy5zdHlsZS53aWR0aD1gJHtsLndpZHRofXB4YCxjLnN0eWxlLmhlaWdodD1gJHtsLmhlaWdodH1weGAsYy5zdHlsZS50cmFuc2Zvcm09SUwo''@;'; put 'put ''bC5sZWZ0LGwudG9wKX1mdW5jdGlvbiBJTChjLGwpe3JldHVybmB0cmFuc2xhdGUzZCgke01hdGgucm91bmQoYyl9cHgsICR7TWF0aC5yb3VuZChsKX1weCwgMClgfWZ1bmN0aW9uIENZKGMpe2NvbnN0IGw9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOmwudG9wLHJpZ2h0''@;'; put 'put ''OmwucmlnaHQsYm90dG9tOmwuYm90dG9tLGxlZnQ6bC5sZWZ0LHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LHg6bC54LHk6bC55fX1mdW5jdGlvbiBTWShjLGwsYSl7Y29uc3R7dG9wOmQsYm90dG9tOmgsbGVmdDpmLHJpZ2h0OnZ9PWM7cmV0dXJuIGE+PWQmJmE8PWgmJmw+PWYmJmw8''@;'; put 'put ''PXZ9ZnVuY3Rpb24gRXgoYyxsLGEpe2MudG9wKz1sLGMuYm90dG9tPWMudG9wK2MuaGVpZ2h0LGMubGVmdCs9YSxjLnJpZ2h0PWMubGVmdCtjLndpZHRofWZ1bmN0aW9uIEowZShjLGwsYSxkKXtjb25zdHt0b3A6aCxyaWdodDpmLGJvdHRvbTp2LGxlZnQ6TSx3aWR0aDpELGhlaWdodDpafT1j''@;'; put 'put ''LHJlPUQqbCxjZT1aKmw7cmV0dXJuIGQ+aC1jZSYmZDx2K2NlJiZhPk0tcmUmJmE8ZityZX1jbGFzcyBRMGV7Y29uc3RydWN0b3IobCl7dGhpcy5fZG9jdW1lbnQ9bCx0aGlzLnBvc2l0aW9ucz1uZXcgTWFwfWNsZWFyKCl7dGhpcy5wb3NpdGlvbnMuY2xlYXIoKX1jYWNoZShsKXt0aGlzLmNs''@;'; put 'put ''ZWFyKCksdGhpcy5wb3NpdGlvbnMuc2V0KHRoaXMuX2RvY3VtZW50LHtzY3JvbGxQb3NpdGlvbjp0aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX0pLGwuZm9yRWFjaChhPT57dGhpcy5wb3NpdGlvbnMuc2V0KGEse3Njcm9sbFBvc2l0aW9uOnt0b3A6YS5zY3JvbGxUb3AsbGVmdDph''@;'; put 'put ''LnNjcm9sbExlZnR9LGNsaWVudFJlY3Q6Q1koYSl9KX0pfWhhbmRsZVNjcm9sbChsKXtjb25zdCBhPXhMKGwpLGQ9dGhpcy5wb3NpdGlvbnMuZ2V0KGEpO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9ZC5zY3JvbGxQb3NpdGlvbjtsZXQgZix2O2lmKGE9PT10aGlzLl9kb2N1bWVudCl7Y29u''@;'; put 'put ''c3QgWj10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtmPVoudG9wLHY9Wi5sZWZ0fWVsc2UgZj1hLnNjcm9sbFRvcCx2PWEuc2Nyb2xsTGVmdDtjb25zdCBNPWgudG9wLWYsRD1oLmxlZnQtdjtyZXR1cm4gdGhpcy5wb3NpdGlvbnMuZm9yRWFjaCgoWixyZSk9PntaLmNsaWVudFJl''@;'; put 'put ''Y3QmJmEhPT1yZSYmYS5jb250YWlucyhyZSkmJkV4KFouY2xpZW50UmVjdCxNLEQpfSksaC50b3A9ZixoLmxlZnQ9dix7dG9wOk0sbGVmdDpEfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJue3RvcDp3aW5kb3cuc2Nyb2xsWSxsZWZ0OndpbmRvdy5zY3JvbGxYfX19ZnVuY3Rp''@;'; put 'put ''b24gZTFlKGMpe2NvbnN0IGw9Yy5jbG9uZU5vZGUoITApLGE9bC5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIiksZD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7bC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspYVtoXS5yZW1vdmVBdHRyaWJ1dGUoImlk''@;'; put 'put ''Iik7cmV0dXJuImNhbnZhcyI9PT1kP3IxZShjLGwpOigiaW5wdXQiPT09ZHx8InNlbGVjdCI9PT1kfHwidGV4dGFyZWEiPT09ZCkmJm4xZShjLGwpLHQxZSgiY2FudmFzIixjLGwscjFlKSx0MWUoImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0IixjLGwsbjFlKSxsfWZ1bmN0aW9uIHQxZShjLGws''@;'; put 'put ''YSxkKXtjb25zdCBoPWwucXVlcnlTZWxlY3RvckFsbChjKTtpZihoLmxlbmd0aCl7Y29uc3QgZj1hLnF1ZXJ5U2VsZWN0b3JBbGwoYyk7Zm9yKGxldCB2PTA7djxoLmxlbmd0aDt2KyspZChoW3ZdLGZbdl0pfX1sZXQgTEZlPTA7ZnVuY3Rpb24gbjFlKGMsbCl7ImZpbGUiIT09bC50eXBlJiYo''@;'; put 'put ''bC52YWx1ZT1jLnZhbHVlKSwicmFkaW8iPT09bC50eXBlJiZsLm5hbWUmJihsLm5hbWU9YG1hdC1jbG9uZS0ke2wubmFtZX0tJHtMRmUrK31gKX1mdW5jdGlvbiByMWUoYyxsKXtjb25zdCBhPWwuZ2V0Q29udGV4dCgiMmQiKTtpZihhKXRyeXthLmRyYXdJbWFnZShjLDAsMCl9Y2F0Y2h7fX1m''@;'; put 'put ''dW5jdGlvbiBpMWUoYyxsKXtjb25zdCBhPWMucm9vdE5vZGVzO2lmKDE9PT1hLmxlbmd0aCYmYVswXS5ub2RlVHlwZT09PWwuRUxFTUVOVF9OT0RFKXJldHVybiBhWzBdO2NvbnN0IGQ9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS5mb3JFYWNoKGg9PmQuYXBwZW5kQ2hpbGQoaCkp''@;'; put 'put ''LGR9ZnVuY3Rpb24gYTFlKGMpe2NvbnN0IGw9Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zIik+LTE/MToxZTM7cmV0dXJuIHBhcnNlRmxvYXQoYykqbH1mdW5jdGlvbiBNWShjLGwpe3JldHVybiBjLmdldFByb3BlcnR5VmFsdWUobCkuc3BsaXQoIiwiKS5tYXAoZD0+ZC50cmltKCkpfWNv''@;'; put 'put ''bnN0IFBGZT1uZXcgU2V0KFsicG9zaXRpb24iXSk7Y2xhc3MgRkZle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxaKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMuX3Jvb3RFbGVtZW50PWEsdGhpcy5fZGlyZWN0aW9uPWQsdGhpcy5faW5pdGlhbERvbVJlY3Q9aCx0aGlzLl9wcmV2aWV3VGVt''@;'; put 'put ''cGxhdGU9Zix0aGlzLl9wcmV2aWV3Q2xhc3M9dix0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZT1NLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09RCx0aGlzLl96SW5kZXg9Wn1hdHRhY2gobCl7dGhpcy5fcHJldmlldz10aGlzLl9jcmVhdGVQcmV2aWV3KCksbC5hcHBlbmRDaGlsZCh0aGlzLl9w''@;'; put 'put ''cmV2aWV3KSwic2hvd1BvcG92ZXIiaW4gdGhpcy5fcHJldmlldyYmdGhpcy5fcHJldmlldy5zaG93UG9wb3ZlcigpfWRlc3Ryb3koKXt0aGlzLl9wcmV2aWV3LnJlbW92ZSgpLHRoaXMuX3ByZXZpZXdFbWJlZGRlZFZpZXc/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aWV3PXRoaXMuX3ByZXZpZXdF''@;'; put 'put ''bWJlZGRlZFZpZXc9bnVsbH1zZXRUcmFuc2Zvcm0obCl7dGhpcy5fcHJldmlldy5zdHlsZS50cmFuc2Zvcm09bH1nZXRCb3VuZGluZ0NsaWVudFJlY3QoKXtyZXR1cm4gdGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1hZGRDbGFzcyhsKXt0aGlzLl9wcmV2aWV3LmNsYXNz''@;'; put 'put ''TGlzdC5hZGQobCl9Z2V0VHJhbnNpdGlvbkR1cmF0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIE9GZShjKXtjb25zdCBsPWdldENvbXB1dGVkU3R5bGUoYyksYT1NWShsLCJ0cmFuc2l0aW9uLXByb3BlcnR5IiksZD1hLmZpbmQoTT0+InRyYW5zZm9ybSI9PT1NfHwiYWxsIj09PU0pO2lmKCFkKXJl''@;'; put 'put ''dHVybiAwO2NvbnN0IGg9YS5pbmRleE9mKGQpLGY9TVkobCwidHJhbnNpdGlvbi1kdXJhdGlvbiIpLHY9TVkobCwidHJhbnNpdGlvbi1kZWxheSIpO3JldHVybiBhMWUoZltoXSkrYTFlKHZbaF0pfSh0aGlzLl9wcmV2aWV3KX1hZGRFdmVudExpc3RlbmVyKGwsYSl7dGhpcy5fcHJldmlldy5h''@;'; put 'put ''ZGRFdmVudExpc3RlbmVyKGwsYSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEpe3RoaXMuX3ByZXZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEpfV9jcmVhdGVQcmV2aWV3KCl7Y29uc3QgbD10aGlzLl9wcmV2aWV3VGVtcGxhdGUsYT10aGlzLl9wcmV2aWV3Q2xhc3MsZD1sP2wudGVtcGxh''@;'; put 'put ''dGU6bnVsbDtsZXQgaDtpZihkJiZsKXtjb25zdCBmPWwubWF0Y2hTaXplP3RoaXMuX2luaXRpYWxEb21SZWN0Om51bGwsdj1sLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGQsbC5jb250ZXh0KTt2LmRldGVjdENoYW5nZXMoKSxoPWkxZSh2LHRoaXMuX2RvY3VtZW50KSx0aGlz''@;'; put 'put ''Ll9wcmV2aWV3RW1iZWRkZWRWaWV3PXYsbC5tYXRjaFNpemU/WDBlKGgsZik6aC5zdHlsZS50cmFuc2Zvcm09SUwodGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KX1lbHNlIGg9ZTFlKHRoaXMuX3Jvb3RFbGVtZW50KSxYMGUoaCx0aGlz''@;'; put 'put ''Ll9pbml0aWFsRG9tUmVjdCksdGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKGguc3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pO3JldHVybiB3WShoLnN0eWxlLHsicG9pbnRlci1ldmVudHMiOiJub25lIixtYXJnaW46IjAiLHBvc2l0aW9uOiJmaXhlZCIsdG9wOiIwIixs''@;'; put 'put ''ZWZ0OiIwIiwiei1pbmRleCI6dGhpcy5fekluZGV4KyIifSxQRmUpLEl5KGgsITEpLGguY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcHJldmlldyIpLGguc2V0QXR0cmlidXRlKCJwb3BvdmVyIiwibWFudWFsIiksaC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5fZGlyZWN0aW9uKSxhJiYoQXJy''@;'; put 'put ''YXkuaXNBcnJheShhKT9hLmZvckVhY2goZj0+aC5jbGFzc0xpc3QuYWRkKGYpKTpoLmNsYXNzTGlzdC5hZGQoYSkpLGh9fWNvbnN0IG8xZT1BeSh7cGFzc2l2ZTohMH0pLFJMPUF5KHtwYXNzaXZlOiExfSksczFlPUF5KHtwYXNzaXZlOiExLGNhcHR1cmU6ITB9KSxsMWU9bmV3IFNldChbInBv''@;'; put 'put ''c2l0aW9uIl0pO2NsYXNzIE5GZXtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEoIXRoaXMuX2Ryb3BDb250YWluZXJ8fCF0aGlzLl9kcm9wQ29udGFpbmVyLmRpc2FibGVkKX1zZXQgZGlzYWJsZWQobCl7bCE9PXRoaXMuX2Rpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9''@;'; put 'put ''bCx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxlcy5mb3JFYWNoKGE9Pkl5KGEsbCkpKX1jb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7dGhpcy5fY29uZmlnPWEsdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVy''@;'; put 'put ''PWYsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT12LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSExLHRoaXMuX21vdmVFdmVudHM9bmV3IFduLHRoaXMuX3BvaW50ZXJNb3ZlU3Vi''@;'; put 'put ''c2NyaXB0aW9uPXF0LkVNUFRZLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXF0LkVNUFRZLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD1udWxsLHRoaXMuX25hdGl2ZUlu''@;'; put 'put ''dGVyYWN0aW9uc0VuYWJsZWQ9ITAsdGhpcy5faGFuZGxlcz1bXSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9bmV3IFNldCx0aGlzLl9kaXJlY3Rpb249Imx0ciIsdGhpcy5kcmFnU3RhcnREZWxheT0wLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuYmVmb3JlU3RhcnRlZD1uZXcgV24sdGhpcy5zdGFy''@;'; put 'put ''dGVkPW5ldyBXbix0aGlzLnJlbGVhc2VkPW5ldyBXbix0aGlzLmVuZGVkPW5ldyBXbix0aGlzLmVudGVyZWQ9bmV3IFduLHRoaXMuZXhpdGVkPW5ldyBXbix0aGlzLmRyb3BwZWQ9bmV3IFduLHRoaXMubW92ZWQ9dGhpcy5fbW92ZUV2ZW50cyx0aGlzLl9wb2ludGVyRG93bj1NPT57aWYodGhp''@;'; put 'put ''cy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgRD10aGlzLl9nZXRUYXJnZXRIYW5kbGUoTSk7RCYmIXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoRCkmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKEQsTSl9ZWxz''@;'; put 'put ''ZSB0aGlzLmRpc2FibGVkfHx0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKHRoaXMuX3Jvb3RFbGVtZW50LE0pfSx0aGlzLl9wb2ludGVyTW92ZT1NPT57Y29uc3QgRD10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoTSk7aWYoIXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyl7aWYo''@;'; put 'put ''TWF0aC5hYnMoRC54LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngpK01hdGguYWJzKEQueS10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KT49dGhpcy5fY29uZmlnLmRyYWdTdGFydFRocmVzaG9sZCl7Y29uc3QgRWU9RGF0ZS5ub3coKT49dGhpcy5fZHJhZ1N0YXJ0VGltZSt0aGlz''@;'; put 'put ''Ll9nZXREcmFnU3RhcnREZWxheShNKSxCZT10aGlzLl9kcm9wQ29udGFpbmVyO2lmKCFFZSlyZXR1cm4gdm9pZCB0aGlzLl9lbmREcmFnU2VxdWVuY2UoTSk7KCFCZXx8IUJlLmlzRHJhZ2dpbmcoKSYmIUJlLmlzUmVjZWl2aW5nKCkpJiYoTS5jYW5jZWxhYmxlJiZNLnByZXZlbnREZWZhdWx0''@;'; put 'put ''KCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSEwLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX3N0YXJ0RHJhZ1NlcXVlbmNlKE0pKSl9cmV0dXJufU0uY2FuY2VsYWJsZSYmTS5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IFo9dGhpcy5fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24o''@;'; put 'put ''RCk7aWYodGhpcy5faGFzTW92ZWQ9ITAsdGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uPUQsdGhpcy5fdXBkYXRlUG9pbnRlckRpcmVjdGlvbkRlbHRhKFopLHRoaXMuX2Ryb3BDb250YWluZXIpdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcihaLEQpO2Vsc2V7Y29uc3QgcmU9''@;'; put 'put ''dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9pbml0aWFsRG9tUmVjdDp0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZSxjZT10aGlzLl9hY3RpdmVUcmFuc2Zvcm07Y2UueD1aLngtcmUueCt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLngsY2UueT1aLnktcmUueSt0aGlzLl9wYXNzaXZlVHJh''@;'; put 'put ''bnNmb3JtLnksdGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShjZS54LGNlLnkpfXRoaXMuX21vdmVFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX21vdmVFdmVudHMubmV4dCh7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOlosZXZl''@;'; put 'put ''bnQ6TSxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoWiksZGVsdGE6dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhfSl9KX0sdGhpcy5fcG9pbnRlclVwPU09Pnt0aGlzLl9lbmREcmFnU2VxdWVuY2UoTSl9LHRoaXMuX25hdGl2ZURyYWdTdGFydD1NPT57aWYodGhpcy5faGFuZGxl''@;'; put 'put ''cy5sZW5ndGgpe2NvbnN0IEQ9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKE0pO0QmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKEQpJiYhdGhpcy5kaXNhYmxlZCYmTS5wcmV2ZW50RGVmYXVsdCgpfWVsc2UgdGhpcy5kaXNhYmxlZHx8TS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLndpdGhSb290''@;'; put 'put ''RWxlbWVudChsKS53aXRoUGFyZW50KGEucGFyZW50RHJhZ1JlZnx8bnVsbCksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyBRMGUoZCksdi5yZWdpc3RlckRyYWdJdGVtKHRoaXMpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlcn1nZXRSb290RWxlbWVu''@;'; put 'put ''dCgpe3JldHVybiB0aGlzLl9yb290RWxlbWVudH1nZXRWaXNpYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlzRHJhZ2dpbmcoKT90aGlzLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnRoaXMuZ2V0Um9vdEVsZW1lbnQoKX13aXRoSGFuZGxlcyhsKXt0aGlzLl9oYW5kbGVzPWwubWFwKGQ9PkVk''@;'; put 'put ''KGQpKSx0aGlzLl9oYW5kbGVzLmZvckVhY2goZD0+SXkoZCx0aGlzLmRpc2FibGVkKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGE9bmV3IFNldDtyZXR1cm4gdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmZvckVhY2goZD0+e3RoaXMuX2hhbmRsZXMuaW5kZXhP''@;'; put 'put ''ZihkKT4tMSYmYS5hZGQoZCl9KSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9YSx0aGlzfXdpdGhQcmV2aWV3VGVtcGxhdGUobCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1sLHRoaXN9d2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUobCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxh''@;'; put 'put ''dGU9bCx0aGlzfXdpdGhSb290RWxlbWVudChsKXtjb25zdCBhPUVkKGwpO3JldHVybiBhIT09dGhpcy5fcm9vdEVsZW1lbnQmJih0aGlzLl9yb290RWxlbWVudCYmdGhpcy5fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuX25nWm9uZS5ydW5PdXRz''@;'; put 'put ''aWRlQW5ndWxhcigoKT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixSTCksYS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixvMWUpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRp''@;'; put 'put ''dmVEcmFnU3RhcnQsUkwpfSksdGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fcm9vdEVsZW1lbnQ9YSksdHlwZW9mIFNWR0VsZW1lbnQ8InUiJiZ0aGlzLl9yb290RWxlbWVudCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQmJih0aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcm9v''@;'; put 'put ''dEVsZW1lbnQub3duZXJTVkdFbGVtZW50KSx0aGlzfXdpdGhCb3VuZGFyeUVsZW1lbnQobCl7cmV0dXJuIHRoaXMuX2JvdW5kYXJ5RWxlbWVudD1sP0VkKGwpOm51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksbCYmKHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10''@;'; put 'put ''aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxMCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jb250YWluSW5zaWRlQm91bmRhcnlPblJlc2l6ZSgpKSksdGhpc313aXRoUGFyZW50KGwpe3JldHVybiB0aGlzLl9wYXJlbnREcmFnUmVmPWwsdGhpc31kaXNwb3NlKCl7dGhpcy5fcmVtb3ZlUm9vdEVs''@;'; put 'put ''ZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuaXNEcmFnZ2luZygpJiZ0aGlzLl9yb290RWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fYW5jaG9yPy5yZW1vdmUoKSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2RyYWdE''@;'; put 'put ''cm9wUmVnaXN0cnkucmVtb3ZlRHJhZ0l0ZW0odGhpcyksdGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5zdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWxlYXNlZC5jb21wbGV0ZSgpLHRoaXMuZW5kZWQuY29tcGxldGUoKSx0aGlzLmVu''@;'; put 'put ''dGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuX21vdmVFdmVudHMuY29tcGxldGUoKSx0aGlzLl9oYW5kbGVzPVtdLHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5jbGVhcigpLHRoaXMuX2Ryb3BDb250YWluZXI9dm9pZCAw''@;'; put 'put ''LHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD10aGlzLl9yb290RWxlbWVudD10aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT10aGlzLl9w''@;'; put 'put ''cmV2aWV3VGVtcGxhdGU9dGhpcy5fYW5jaG9yPXRoaXMuX3BhcmVudERyYWdSZWY9bnVsbH1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyYmdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpfXJlc2V0KCl7dGhpcy5fcm9vdEVsZW1lbnQu''@;'; put 'put ''c3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm18fCIiLHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybT17eDowLHk6MH19ZGlzYWJsZUhhbmRsZShsKXshdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhsKSYmdGhpcy5faGFu''@;'; put 'put ''ZGxlcy5pbmRleE9mKGwpPi0xJiYodGhpcy5fZGlzYWJsZWRIYW5kbGVzLmFkZChsKSxJeShsLCEwKSl9ZW5hYmxlSGFuZGxlKGwpe3RoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMobCkmJih0aGlzLl9kaXNhYmxlZEhhbmRsZXMuZGVsZXRlKGwpLEl5KGwsdGhpcy5kaXNhYmxlZCkpfXdpdGhE''@;'; put 'put ''aXJlY3Rpb24obCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbj1sLHRoaXN9X3dpdGhEcm9wQ29udGFpbmVyKGwpe3RoaXMuX2Ryb3BDb250YWluZXI9bH1nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl7Y29uc3QgbD10aGlzLmlzRHJhZ2dpbmcoKT90aGlzLl9hY3RpdmVUcmFuc2Zvcm06dGhpcy5fcGFz''@;'; put 'put ''c2l2ZVRyYW5zZm9ybTtyZXR1cm57eDpsLngseTpsLnl9fXNldEZyZWVEcmFnUG9zaXRpb24obCl7cmV0dXJuIHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54PWwueCx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9bC55LHRoaXMuX2Ryb3BD''@;'; put 'put ''b250YWluZXJ8fHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0obC54LGwueSksdGhpc313aXRoUHJldmlld0NvbnRhaW5lcihsKXtyZXR1cm4gdGhpcy5fcHJldmlld0NvbnRhaW5lcj1sLHRoaXN9X3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5fbGFz''@;'; put 'put ''dEtub3duUG9pbnRlclBvc2l0aW9uO2wmJnRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIodGhpcy5fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24obCksbCl9X3JlbW92ZUxpc3RlbmVycygpe3RoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0''@;'; put 'put ''aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2V0U2hhZG93Um9vdCgpPy5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsdTFlLHMxZSl9''@;'; put 'put ''X2Rlc3Ryb3lQcmV2aWV3KCl7dGhpcy5fcHJldmlldz8uZGVzdHJveSgpLHRoaXMuX3ByZXZpZXc9bnVsbH1fZGVzdHJveVBsYWNlaG9sZGVyKCl7dGhpcy5fcGxhY2Vob2xkZXI/LnJlbW92ZSgpLHRoaXMuX3BsYWNlaG9sZGVyUmVmPy5kZXN0cm95KCksdGhpcy5fcGxhY2Vob2xkZXI9dGhp''@;'; put 'put ''cy5fcGxhY2Vob2xkZXJSZWY9bnVsbH1fZW5kRHJhZ1NlcXVlbmNlKGwpe2lmKHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKSYmKHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpLHRoaXMuX3RvZ2ds''@;'; put 'put ''ZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzJiYodGhpcy5fcm9vdEVsZW1lbnQuc3R5bGUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQpLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZykpaWYodGhpcy5yZWxlYXNlZC5u''@;'; put 'put ''ZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksdGhpcy5fZHJvcENvbnRhaW5lcil0aGlzLl9kcm9wQ29udGFpbmVyLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fYW5pbWF0ZVByZXZpZXdUb1BsYWNlaG9sZGVyKCkudGhlbigoKT0+e3RoaXMuX2NsZWFudXBEcmFnQXJ0aWZhY3RzKGwpLHRoaXMu''@;'; put 'put ''X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyl9KTtlbHNle3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueD10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueDtjb25zdCBhPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShs''@;'; put 'put ''KTt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLnksdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuZW5kZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGEpLGRyb3BQb2ludDphLGV2ZW50Omx9KX0pLHRoaXMu''@;'; put 'put ''X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyl9fV9zdGFydERyYWdTZXF1ZW5jZShsKXtUeChsKSYmKHRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZT1EYXRlLm5vdygpKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJh''@;'; put 'put ''Y3Rpb25zKCk7Y29uc3QgYT10aGlzLl9nZXRTaGFkb3dSb290KCksZD10aGlzLl9kcm9wQ29udGFpbmVyO2lmKGEmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLHUxZSxzMWUpfSksZCl7Y29uc3QgaD10aGlzLl9y''@;'; put 'put ''b290RWxlbWVudCxmPWgucGFyZW50Tm9kZSx2PXRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpLE09dGhpcy5fYW5jaG9yPXRoaXMuX2FuY2hvcnx8dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIik7Zi5pbnNlcnRCZWZvcmUoTSxoKSx0aGlz''@;'; put 'put ''Ll9pbml0aWFsVHJhbnNmb3JtPWguc3R5bGUudHJhbnNmb3JtfHwiIix0aGlzLl9wcmV2aWV3PW5ldyBGRmUodGhpcy5fZG9jdW1lbnQsdGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fZGlyZWN0aW9uLHRoaXMuX2luaXRpYWxEb21SZWN0LHRoaXMuX3ByZXZpZXdUZW1wbGF0ZXx8bnVsbCx0aGlz''@;'; put 'put ''LnByZXZpZXdDbGFzc3x8bnVsbCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtLHRoaXMuX2NvbmZpZy56SW5kZXh8fDFlMyksdGhpcy5fcHJldmlldy5hdHRhY2godGhpcy5fZ2V0UHJldmlld0luc2VydGlvblBvaW50KGYsYSkpLHEwZShoLCExLGwx''@;'; put 'put ''ZSksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmLnJlcGxhY2VDaGlsZCh2LGgpKSx0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLGQuc3RhcnQoKSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPWQsdGhpcy5faW5pdGlhbEluZGV4PWQuZ2V0SXRlbUluZGV4''@;'; put 'put ''KHRoaXMpfWVsc2UgdGhpcy5zdGFydGVkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPXRoaXMuX2luaXRpYWxJbmRleD12b2lkIDA7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hlKGQ/ZC5nZXRTY3JvbGxhYmxlUGFyZW50cygpOltdKX1faW5p''@;'; put 'put ''dGlhbGl6ZURyYWdTZXF1ZW5jZShsLGEpe3RoaXMuX3BhcmVudERyYWdSZWYmJmEuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3QgZD10aGlzLmlzRHJhZ2dpbmcoKSxoPVR4KGEpLGY9IWgmJjAhPT1hLmJ1dHRvbix2PXRoaXMuX3Jvb3RFbGVtZW50LE09eEwoYSksRD0haCYmdGhpcy5fbGFzdFRv''@;'; put 'put ''dWNoRXZlbnRUaW1lJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWUrODAwPkRhdGUubm93KCksWj1oP2Z1bmN0aW9uIFFQZShjKXtjb25zdCBsPWMudG91Y2hlcyYmYy50b3VjaGVzWzBdfHxjLmNoYW5nZWRUb3VjaGVzJiZjLmNoYW5nZWRUb3VjaGVzWzBdO3JldHVybiEoIWx8fC0xIT09bC5p''@;'; put 'put ''ZGVudGlmaWVyfHxudWxsIT1sLnJhZGl1c1gmJjEhPT1sLnJhZGl1c1h8fG51bGwhPWwucmFkaXVzWSYmMSE9PWwucmFkaXVzWSl9KGEpOmZ1bmN0aW9uIEpQZShjKXtyZXR1cm4gMD09PWMuYnV0dG9uc3x8MD09PWMuZGV0YWlsfShhKTtpZihNJiZNLmRyYWdnYWJsZSYmIm1vdXNlZG93biI9''@;'; put 'put ''PT1hLnR5cGUmJmEucHJldmVudERlZmF1bHQoKSxkfHxmfHxEfHxaKXJldHVybjtpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgYmU9di5zdHlsZTt0aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodD1iZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcnx8IiIsYmUud2Via2l0VGFwSGln''@;'; put 'put ''aGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In10aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9dGhpcy5faGFzTW92ZWQ9ITEsdGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5faW5pdGlhbERvbVJlY3Q9dGhpcy5fcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fcG9p''@;'; put 'put ''bnRlck1vdmVTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyTW92ZS5zdWJzY3JpYmUodGhpcy5fcG9pbnRlck1vdmUpLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJVcC5zdWJzY3JpYmUodGhpcy5fcG9p''@;'; put 'put ''bnRlclVwKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkpLnN1YnNjcmliZShiZT0+dGhpcy5fdXBkYXRlT25TY3JvbGwoYmUpKSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQmJih0aGlzLl9ib3VuZGFy''@;'; put 'put ''eVJlY3Q9Q1kodGhpcy5fYm91bmRhcnlFbGVtZW50KSk7Y29uc3QgcmU9dGhpcy5fcHJldmlld1RlbXBsYXRlO3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50PXJlJiZyZS50ZW1wbGF0ZSYmIXJlLm1hdGNoU2l6ZT97eDowLHk6MH06dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVt''@;'; put 'put ''ZW50KHRoaXMuX2luaXRpYWxEb21SZWN0LGwsYSk7Y29uc3QgY2U9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U9dGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShhKTt0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGE9e3g6MCx5''@;'; put 'put ''OjB9LHRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZT17eDpjZS54LHk6Y2UueX0sdGhpcy5fZHJhZ1N0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RhcnREcmFnZ2luZyh0aGlzLGEpfV9jbGVhbnVwRHJhZ0FydGlmYWN0cyhsKXtx''@;'; put 'put ''MGUodGhpcy5fcm9vdEVsZW1lbnQsITAsbDFlKSx0aGlzLl9hbmNob3IucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fYW5jaG9yKSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2luaXRpYWxEb21S''@;'; put 'put ''ZWN0PXRoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD10aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT57Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyLGQ9YS5nZXRJdGVtSW5kZXgodGhpcyksaD10aGlzLl9nZXRQb2ludGVyUG9z''@;'; put 'put ''aXRpb25PblBhZ2UobCksZj10aGlzLl9nZXREcmFnRGlzdGFuY2UoaCksdj1hLl9pc092ZXJDb250YWluZXIoaC54LGgueSk7dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpmLGRyb3BQb2ludDpoLGV2ZW50Omx9KSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTp0aGlzLGN1''@;'; put 'put ''cnJlbnRJbmRleDpkLHByZXZpb3VzSW5kZXg6dGhpcy5faW5pdGlhbEluZGV4LGNvbnRhaW5lcjphLHByZXZpb3VzQ29udGFpbmVyOnRoaXMuX2luaXRpYWxDb250YWluZXIsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjp2LGRpc3RhbmNlOmYsZHJvcFBvaW50OmgsZXZlbnQ6bH0pLGEuZHJvcCh0''@;'; put 'put ''aGlzLGQsdGhpcy5faW5pdGlhbEluZGV4LHRoaXMuX2luaXRpYWxDb250YWluZXIsdixmLGgsbCksdGhpcy5fZHJvcENvbnRhaW5lcj10aGlzLl9pbml0aWFsQ29udGFpbmVyfSl9X3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoe3g6bCx5OmF9LHt4OmQseTpofSl7bGV0IGY9dGhpcy5faW5p''@;'; put 'put ''dGlhbENvbnRhaW5lci5fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbih0aGlzLGwsYSk7IWYmJnRoaXMuX2Ryb3BDb250YWluZXIhPT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZ0aGlzLl9pbml0aWFsQ29udGFpbmVyLl9pc092ZXJDb250YWluZXIobCxhKSYmKGY9dGhpcy5faW5p''@;'; put 'put ''dGlhbENvbnRhaW5lciksZiYmZiE9PXRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOnRoaXMuX2Ryb3BDb250YWluZXJ9KSx0aGlzLl9kcm9wQ29udGFpbmVyLmV4aXQodGhpcyksdGhpcy5fZHJv''@;'; put 'put ''cENvbnRhaW5lcj1mLHRoaXMuX2Ryb3BDb250YWluZXIuZW50ZXIodGhpcyxsLGEsZj09PXRoaXMuX2luaXRpYWxDb250YWluZXImJmYuc29ydGluZ0Rpc2FibGVkP3RoaXMuX2luaXRpYWxJbmRleDp2b2lkIDApLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOmYsY3Vy''@;'; put 'put ''cmVudEluZGV4OmYuZ2V0SXRlbUluZGV4KHRoaXMpfSl9KSx0aGlzLmlzRHJhZ2dpbmcoKSYmKHRoaXMuX2Ryb3BDb250YWluZXIuX3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkoZCxoKSx0aGlzLl9kcm9wQ29udGFpbmVyLl9zb3J0SXRlbSh0aGlzLGwsYSx0aGlzLl9wb2ludGVyRGlyZWN0''@;'; put 'put ''aW9uRGVsdGEpLHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwsYSk6dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwtdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueCxhLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LnkpKX1f''@;'; put 'put ''YW5pbWF0ZVByZXZpZXdUb1BsYWNlaG9sZGVyKCl7aWYoIXRoaXMuX2hhc01vdmVkKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCBsPXRoaXMuX3BsYWNlaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX3ByZXZpZXcuYWRkQ2xhc3MoImNkay1kcmFnLWFuaW1hdGlu''@;'; put 'put ''ZyIpLHRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLmxlZnQsbC50b3ApO2NvbnN0IGE9dGhpcy5fcHJldmlldy5nZXRUcmFuc2l0aW9uRHVyYXRpb24oKTtyZXR1cm4gMD09PWE/UHJvbWlzZS5yZXNvbHZlKCk6dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uZXcgUHJv''@;'; put 'put ''bWlzZShkPT57Y29uc3QgaD12PT57KCF2fHx4TCh2KT09PXRoaXMuX3ByZXZpZXcmJiJ0cmFuc2Zvcm0iPT09di5wcm9wZXJ0eU5hbWUpJiYodGhpcy5fcHJldmlldz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsaCksZCgpLGNsZWFyVGltZW91dChmKSl9LGY9c2V0VGlt''@;'; put 'put ''ZW91dChoLDEuNSphKTt0aGlzLl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGgpfSkpfV9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKXtjb25zdCBsPXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUsYT1sP2wudGVtcGxhdGU6bnVsbDtsZXQgZDtyZXR1cm4gYT8o''@;'; put 'put ''dGhpcy5fcGxhY2Vob2xkZXJSZWY9bC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhhLGwuY29udGV4dCksdGhpcy5fcGxhY2Vob2xkZXJSZWYuZGV0ZWN0Q2hhbmdlcygpLGQ9aTFlKHRoaXMuX3BsYWNlaG9sZGVyUmVmLHRoaXMuX2RvY3VtZW50KSk6ZD1lMWUodGhpcy5fcm9v''@;'; put 'put ''dEVsZW1lbnQpLGQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsZC5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wbGFjZWhvbGRlciIpLGR9X2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudChsLGEsZCl7Y29uc3QgaD1hPT09dGhpcy5fcm9vdEVsZW1lbnQ/bnVsbDphLGY9aD9oLmdldEJv''@;'; put 'put ''dW5kaW5nQ2xpZW50UmVjdCgpOmwsdj1UeChkKT9kLnRhcmdldFRvdWNoZXNbMF06ZCxNPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57eDpmLmxlZnQtbC5sZWZ0Kyh2LnBhZ2VYLWYubGVmdC1NLmxlZnQpLHk6Zi50b3AtbC50b3ArKHYucGFnZVktZi50b3AtTS50''@;'; put 'put ''b3ApfX1fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpe2NvbnN0IGE9dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLGQ9VHgobCk/bC50b3VjaGVzWzBdfHxsLmNoYW5nZWRUb3VjaGVzWzBdfHx7cGFnZVg6MCxwYWdlWTowfTpsLGg9ZC5wYWdlWC1hLmxlZnQsZj1kLnBhZ2VZ''@;'; put 'put ''LWEudG9wO2lmKHRoaXMuX293bmVyU1ZHRWxlbWVudCl7Y29uc3Qgdj10aGlzLl9vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCk7aWYodil7Y29uc3QgTT10aGlzLl9vd25lclNWR0VsZW1lbnQuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gTS54PWgsTS55PWYsTS5tYXRyaXhUcmFuc2Zv''@;'; put 'put ''cm0odi5pbnZlcnNlKCkpfX1yZXR1cm57eDpoLHk6Zn19X2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcj90aGlzLl9kcm9wQ29udGFpbmVyLmxvY2tBeGlzOm51bGw7bGV0e3g6ZCx5Omh9PXRoaXMuY29uc3RyYWluUG9zaXRpb24/''@;'; put 'put ''dGhpcy5jb25zdHJhaW5Qb3NpdGlvbihsLHRoaXMsdGhpcy5faW5pdGlhbERvbVJlY3QsdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQpOmw7aWYoIngiPT09dGhpcy5sb2NrQXhpc3x8IngiPT09YT9oPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnktKHRoaXMuY29uc3RyYWluUG9z''@;'; put 'put ''aXRpb24/dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueTowKTooInkiPT09dGhpcy5sb2NrQXhpc3x8InkiPT09YSkmJihkPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngtKHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueDowKSks''@;'; put 'put ''dGhpcy5fYm91bmRhcnlSZWN0KXtjb25zdHt4OmYseTp2fT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3t4OjAseTowfTp0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudCxNPXRoaXMuX2JvdW5kYXJ5UmVjdCx7d2lkdGg6RCxoZWlnaHQ6Wn09dGhpcy5fZ2V0UHJldmlld1JlY3QoKSxyZT1N''@;'; put 'put ''LnRvcCt2LGNlPU0uYm90dG9tLShaLXYpO2Q9YzFlKGQsTS5sZWZ0K2YsTS5yaWdodC0oRC1mKSksaD1jMWUoaCxyZSxjZSl9cmV0dXJue3g6ZCx5Omh9fV91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEobCl7Y29uc3R7eDphLHk6ZH09bCxoPXRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0''@;'; put 'put ''YSxmPXRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZSx2PU1hdGguYWJzKGEtZi54KSxNPU1hdGguYWJzKGQtZi55KTtyZXR1cm4gdj50aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGgueD1hPmYueD8xOi0xLGYueD1hKSxNPnRo''@;'; put 'put ''aXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC55PWQ+Zi55PzE6LTEsZi55PWQpLGh9X3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKXtpZighdGhpcy5fcm9vdEVsZW1lbnR8fCF0aGlzLl9oYW5kbGVzKXJldHVybjtjb25zdCBsPXRoaXMuX2hhbmRs''@;'; put 'put ''ZXMubGVuZ3RoPjB8fCF0aGlzLmlzRHJhZ2dpbmcoKTtsIT09dGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZCYmKHRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9bCxJeSh0aGlzLl9yb290RWxlbWVudCxsKSl9X3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKGwpe2wucmVt''@;'; put 'put ''b3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixSTCksbC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixvMWUpLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQs''@;'; put 'put ''UkwpfV9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwsYSl7Y29uc3QgZD1JTChsLGEpLGg9dGhpcy5fcm9vdEVsZW1lbnQuc3R5bGU7bnVsbD09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09aC50cmFuc2Zvcm0mJiJub25lIiE9aC50cmFuc2Zvcm0/''@;'; put 'put ''aC50cmFuc2Zvcm06IiIpLGgudHJhbnNmb3JtPURMKGQsdGhpcy5faW5pdGlhbFRyYW5zZm9ybSl9X2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpe2NvbnN0IGQ9dGhpcy5fcHJldmlld1RlbXBsYXRlPy50ZW1wbGF0ZT92b2lkIDA6dGhpcy5faW5pdGlhbFRyYW5zZm9ybSxoPUlMKGwsYSk7''@;'; put 'put ''dGhpcy5fcHJldmlldy5zZXRUcmFuc2Zvcm0oREwoaCxkKSl9X2dldERyYWdEaXN0YW5jZShsKXtjb25zdCBhPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlO3JldHVybiBhP3t4OmwueC1hLngseTpsLnktYS55fTp7eDowLHk6MH19X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCl7dGhpcy5f''@;'; put 'put ''Ym91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXZvaWQgMCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKXtsZXR7eDpsLHk6YX09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtpZigwPT09bCYmMD09PWF8fHRoaXMuaXNEcmFn''@;'; put 'put ''Z2luZygpfHwhdGhpcy5fYm91bmRhcnlFbGVtZW50KXJldHVybjtjb25zdCBkPXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9dGhpcy5fYm91bmRhcnlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1oLndpZHRoJiYwPT09aC5oZWlnaHR8''@;'; put 'put ''fDA9PT1kLndpZHRoJiYwPT09ZC5oZWlnaHQpcmV0dXJuO2NvbnN0IGY9aC5sZWZ0LWQubGVmdCx2PWQucmlnaHQtaC5yaWdodCxNPWgudG9wLWQudG9wLEQ9ZC5ib3R0b20taC5ib3R0b207aC53aWR0aD5kLndpZHRoPyhmPjAmJihsKz1mKSx2PjAmJihsLT12KSk6bD0wLGguaGVpZ2h0PmQu''@;'; put 'put ''aGVpZ2h0PyhNPjAmJihhKz1NKSxEPjAmJihhLT1EKSk6YT0wLChsIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54fHxhIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55KSYmdGhpcy5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHt5OmEseDpsfSl9X2dldERyYWdTdGFydERlbGF5KGwpe2NvbnN0IGE9''@;'; put 'put ''dGhpcy5kcmFnU3RhcnREZWxheTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGE/YTpUeChsKT9hLnRvdWNoOmE/YS5tb3VzZTowfV91cGRhdGVPblNjcm9sbChsKXtjb25zdCBhPXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7aWYoYSl7Y29uc3QgZD14TChsKTt0aGlzLl9i''@;'; put 'put ''b3VuZGFyeVJlY3QmJmQhPT10aGlzLl9ib3VuZGFyeUVsZW1lbnQmJmQuY29udGFpbnModGhpcy5fYm91bmRhcnlFbGVtZW50KSYmRXgodGhpcy5fYm91bmRhcnlSZWN0LGEudG9wLGEubGVmdCksdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCs9YS5sZWZ0LHRoaXMuX3BpY2t1cFBvc2l0''@;'; put 'put ''aW9uT25QYWdlLnkrPWEudG9wLHRoaXMuX2Ryb3BDb250YWluZXJ8fCh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueC09YS5sZWZ0LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LT1hLnRvcCx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LHRoaXMu''@;'; put 'put ''X2FjdGl2ZVRyYW5zZm9ybS55KSl9fV9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KHRoaXMuX2RvY3VtZW50KT8uc2Nyb2xsUG9zaXRpb258fHRoaXMuX3BhcmVudFBvc2l0aW9ucy5nZXRWaWV3cG9ydFNjcm9s''@;'; put 'put ''bFBvc2l0aW9uKCl9X2dldFNoYWRvd1Jvb3QoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fY2FjaGVkU2hhZG93Um9vdCYmKHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9TzBlKHRoaXMuX3Jvb3RFbGVtZW50KSksdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fZ2V0UHJldmlld0luc2VydGlvblBvaW50''@;'; put 'put ''KGwsYSl7Y29uc3QgZD10aGlzLl9wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIjtpZigicGFyZW50Ij09PWQpcmV0dXJuIGw7aWYoImdsb2JhbCI9PT1kKXtjb25zdCBoPXRoaXMuX2RvY3VtZW50O3JldHVybiBhfHxoLmZ1bGxzY3JlZW5FbGVtZW50fHxoLndlYmtpdEZ1bGxzY3JlZW5FbGVt''@;'; put 'put ''ZW50fHxoLm1vekZ1bGxTY3JlZW5FbGVtZW50fHxoLm1zRnVsbHNjcmVlbkVsZW1lbnR8fGguYm9keX1yZXR1cm4gRWQoZCl9X2dldFByZXZpZXdSZWN0KCl7cmV0dXJuKCF0aGlzLl9wcmV2aWV3UmVjdHx8IXRoaXMuX3ByZXZpZXdSZWN0LndpZHRoJiYhdGhpcy5fcHJldmlld1JlY3QuaGVp''@;'; put 'put ''Z2h0KSYmKHRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX3ByZXZpZXc/dGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp0aGlzLl9pbml0aWFsRG9tUmVjdCksdGhpcy5fcHJldmlld1JlY3R9X2dldFRhcmdldEhhbmRsZShsKXtyZXR1cm4gdGhpcy5faGFuZGxlcy5maW5kKGE9''@;'; put 'put ''PmwudGFyZ2V0JiYobC50YXJnZXQ9PT1hfHxhLmNvbnRhaW5zKGwudGFyZ2V0KSkpfX1mdW5jdGlvbiBjMWUoYyxsLGEpe3JldHVybiBNYXRoLm1heChsLE1hdGgubWluKGEsYykpfWZ1bmN0aW9uIFR4KGMpe3JldHVybiJ0Ij09PWMudHlwZVswXX1mdW5jdGlvbiB1MWUoYyl7Yy5wcmV2ZW50''@;'; put 'put ''RGVmYXVsdCgpfWZ1bmN0aW9uIGQxZShjLGwsYSl7Y29uc3QgZD1BeChsLGMubGVuZ3RoLTEpLGg9QXgoYSxjLmxlbmd0aC0xKTtpZihkPT09aClyZXR1cm47Y29uc3QgZj1jW2RdLHY9aDxkPy0xOjE7Zm9yKGxldCBNPWQ7TSE9PWg7TSs9diljW01dPWNbTSt2XTtjW2hdPWZ9ZnVuY3Rpb24g''@;'; put 'put ''QXgoYyxsKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihsLGMpKX1jbGFzcyBCRmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1hLHRoaXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMu''@;'; put 'put ''X3ByZXZpb3VzU3dhcD17ZHJhZzpudWxsLGRlbHRhOjAsb3ZlcmxhcHM6ITF9fXN0YXJ0KGwpe3RoaXMud2l0aEl0ZW1zKGwpfXNvcnQobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pdGVtUG9zaXRpb25zLHY9dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKTtp''@;'; put 'put ''ZigtMT09PXYmJmYubGVuZ3RoPjApcmV0dXJuIG51bGw7Y29uc3QgTT0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLEQ9Zi5maW5kSW5kZXgocnQ9PnJ0LmRyYWc9PT1sKSxaPWZbdl0sY2U9Wi5jbGllbnRSZWN0LGJlPUQ+dj8xOi0xLEVlPXRoaXMuX2dldEl0ZW1PZmZzZXRQeChm''@;'; put 'put ''W0RdLmNsaWVudFJlY3QsY2UsYmUpLEJlPXRoaXMuX2dldFNpYmxpbmdPZmZzZXRQeChELGYsYmUpLHFlPWYuc2xpY2UoKTtyZXR1cm4gZDFlKGYsRCx2KSxmLmZvckVhY2goKHJ0LHB0KT0+e2lmKHFlW3B0XT09PXJ0KXJldHVybjtjb25zdCBkdD1ydC5kcmFnPT09bCxKdD1kdD9FZTpCZSx2''@;'; put 'put ''bj1kdD9sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnJ0LmRyYWcuZ2V0Um9vdEVsZW1lbnQoKTtydC5vZmZzZXQrPUp0LE0/KHZuLnN0eWxlLnRyYW5zZm9ybT1ETChgdHJhbnNsYXRlM2QoJHtNYXRoLnJvdW5kKHJ0Lm9mZnNldCl9cHgsIDAsIDApYCxydC5pbml0aWFsVHJhbnNmb3JtKSxF''@;'; put 'put ''eChydC5jbGllbnRSZWN0LDAsSnQpKToodm4uc3R5bGUudHJhbnNmb3JtPURMKGB0cmFuc2xhdGUzZCgwLCAke01hdGgucm91bmQocnQub2Zmc2V0KX1weCwgMClgLHJ0LmluaXRpYWxUcmFuc2Zvcm0pLEV4KHJ0LmNsaWVudFJlY3QsSnQsMCkpfSksdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJs''@;'; put 'put ''YXBzPVNZKGNlLGEsZCksdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9Wi5kcmFnLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT1NP2gueDpoLnkse3ByZXZpb3VzSW5kZXg6RCxjdXJyZW50SW5kZXg6dn19ZW50ZXIobCxhLGQsaCl7Y29uc3QgZj1udWxsPT1ofHxoPDA/dGhpcy5fZ2V0SXRlbUlu''@;'; put 'put ''ZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCk6aCx2PXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMsTT12LmluZGV4T2YobCksRD1sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpO2xldCBaPXZbZl07aWYoWj09PWwmJihaPXZbZisxXSksIVomJihudWxsPT1mfHwtMT09PWZ8fGY8di5sZW5ndGgt''@;'; put 'put ''MSkmJnRoaXMuX3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGEsZCkmJihaPXZbMF0pLE0+LTEmJnYuc3BsaWNlKE0sMSksWiYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhaKSl7Y29uc3QgcmU9Wi5nZXRSb290RWxlbWVudCgpO3JlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVm''@;'; put 'put ''b3JlKEQscmUpLHYuc3BsaWNlKGYsMCxsKX1lbHNlIEVkKHRoaXMuX2VsZW1lbnQpLmFwcGVuZENoaWxkKEQpLHYucHVzaChsKTtELnN0eWxlLnRyYW5zZm9ybT0iIix0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoSXRlbXMobCl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1sLnNsaWNl''@;'; put 'put ''KCksdGhpcy5fY2FjaGVJdGVtUG9zaXRpb25zKCl9d2l0aFNvcnRQcmVkaWNhdGUobCl7dGhpcy5fc29ydFByZWRpY2F0ZT1sfXJlc2V0KCl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5mb3JFYWNoKGw9Pntjb25zdCBhPWwuZ2V0Um9vdEVsZW1lbnQoKTtpZihhKXtjb25zdCBkPXRoaXMuX2l0''@;'; put 'put ''ZW1Qb3NpdGlvbnMuZmluZChoPT5oLmRyYWc9PT1sKT8uaW5pdGlhbFRyYW5zZm9ybTthLnN0eWxlLnRyYW5zZm9ybT1kfHwiIn19KSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMuX2FjdGl2ZURyYWdnYWJsZXM9W10sdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9bnVsbCx0aGlzLl9wcmV2''@;'; put 'put ''aW91c1N3YXAuZGVsdGE9MCx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9ITF9Z2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnZ2FibGVzfWdldEl0ZW1JbmRleChsKXtyZXR1cm4oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmInJ0bCI9''@;'; put 'put ''PT10aGlzLmRpcmVjdGlvbj90aGlzLl9pdGVtUG9zaXRpb25zLnNsaWNlKCkucmV2ZXJzZSgpOnRoaXMuX2l0ZW1Qb3NpdGlvbnMpLmZpbmRJbmRleChkPT5kLmRyYWc9PT1sKX11cGRhdGVPblNjcm9sbChsLGEpe3RoaXMuX2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2NsaWVudFJlY3Q6ZH0p''@;'; put 'put ''PT57RXgoZCxsLGEpfSksdGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7ZHJhZzpkfSk9Pnt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcoZCkmJmQuX3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpfSl9X2NhY2hlSXRlbVBvc2l0aW9ucygpe2NvbnN0IGw9Imhvcml6''@;'; put 'put ''b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjt0aGlzLl9pdGVtUG9zaXRpb25zPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMubWFwKGE9Pntjb25zdCBkPWEuZ2V0VmlzaWJsZUVsZW1lbnQoKTtyZXR1cm57ZHJhZzphLG9mZnNldDowLGluaXRpYWxUcmFuc2Zvcm06ZC5zdHlsZS50cmFuc2Zvcm18''@;'; put 'put ''fCIiLGNsaWVudFJlY3Q6Q1koZCl9fSkuc29ydCgoYSxkKT0+bD9hLmNsaWVudFJlY3QubGVmdC1kLmNsaWVudFJlY3QubGVmdDphLmNsaWVudFJlY3QudG9wLWQuY2xpZW50UmVjdC50b3ApfV9nZXRJdGVtT2Zmc2V0UHgobCxhLGQpe2NvbnN0IGg9Imhvcml6b250YWwiPT09dGhpcy5vcmll''@;'; put 'put ''bnRhdGlvbjtsZXQgZj1oP2EubGVmdC1sLmxlZnQ6YS50b3AtbC50b3A7cmV0dXJuLTE9PT1kJiYoZis9aD9hLndpZHRoLWwud2lkdGg6YS5oZWlnaHQtbC5oZWlnaHQpLGZ9X2dldFNpYmxpbmdPZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9u''@;'; put 'put ''LGY9YVtsXS5jbGllbnRSZWN0LHY9YVtsKy0xKmRdO2xldCBNPWZbaD8id2lkdGgiOiJoZWlnaHQiXSpkO2lmKHYpe2NvbnN0IEQ9aD8ibGVmdCI6InRvcCIsWj1oPyJyaWdodCI6ImJvdHRvbSI7LTE9PT1kP00tPXYuY2xpZW50UmVjdFtEXS1mW1pdOk0rPWZbRF0tdi5jbGllbnRSZWN0W1pd''@;'; put 'put ''fXJldHVybiBNfV9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChsLGEpe2lmKCF0aGlzLl9hY3RpdmVEcmFnZ2FibGVzLmxlbmd0aClyZXR1cm4hMTtjb25zdCBkPXRoaXMuX2l0ZW1Qb3NpdGlvbnMsaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2lmKGRbMF0uZHJhZyE9PXRoaXMu''@;'; put 'put ''X2FjdGl2ZURyYWdnYWJsZXNbMF0pe2NvbnN0IHY9ZFtkLmxlbmd0aC0xXS5jbGllbnRSZWN0O3JldHVybiBoP2w+PXYucmlnaHQ6YT49di5ib3R0b219e2NvbnN0IHY9ZFswXS5jbGllbnRSZWN0O3JldHVybiBoP2w8PXYubGVmdDphPD12LnRvcH19X2dldEl0ZW1JbmRleEZyb21Qb2ludGVy''@;'; put 'put ''UG9zaXRpb24obCxhLGQsaCl7Y29uc3QgZj0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLHY9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kSW5kZXgoKHtkcmFnOk0sY2xpZW50UmVjdDpEfSk9Pk0hPT1sJiYoKCFofHxNIT09dGhpcy5fcHJldmlvdXNTd2FwLmRyYWd8fCF0aGlzLl9w''@;'; put 'put ''cmV2aW91c1N3YXAub3ZlcmxhcHN8fChmP2gueDpoLnkpIT09dGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhKSYmKGY/YT49TWF0aC5mbG9vcihELmxlZnQpJiZhPE1hdGguZmxvb3IoRC5yaWdodCk6ZD49TWF0aC5mbG9vcihELnRvcCkmJmQ8TWF0aC5mbG9vcihELmJvdHRvbSkpKSk7cmV0dXJu''@;'; put 'put ''LTEhPT12JiZ0aGlzLl9zb3J0UHJlZGljYXRlKHYsbCk/djotMX19dmFyIEQyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLlVQPTFdPSJVUCIsY1tjLkRPV049Ml09IkRPV04iLGN9KEQyfHx7fSksajE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJO''@;'; put 'put ''T05FIixjW2MuTEVGVD0xXT0iTEVGVCIsY1tjLlJJR0hUPTJdPSJSSUdIVCIsY30oajF8fHt9KTtjbGFzcyBqRmV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWEsdGhpcy5fbmdab25lPWgsdGhpcy5fdmlld3BvcnRSdWxlcj1mLHRoaXMuZGlzYWJsZWQ9''@;'; put 'put ''ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsU3RlcD0yLHRoaXMuZW50ZXJQcmVkaWNhdGU9KCk9PiEwLHRoaXMuc29ydFByZWRpY2F0ZT0oKT0+ITAsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyBXbix0aGlzLmVudGVy''@;'; put 'put ''ZWQ9bmV3IFduLHRoaXMuZXhpdGVkPW5ldyBXbix0aGlzLmRyb3BwZWQ9bmV3IFduLHRoaXMuc29ydGVkPW5ldyBXbix0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQ9bmV3IFduLHRoaXMucmVjZWl2aW5nU3RvcHBlZD1uZXcgV24sdGhpcy5faXNEcmFnZ2luZz0hMSx0aGlzLl9kcmFnZ2FibGVzPVtd''@;'; put 'put ''LHRoaXMuX3NpYmxpbmdzPVtdLHRoaXMuX2FjdGl2ZVNpYmxpbmdzPW5ldyBTZXQsdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249RDIuTk9ORSx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPWoxLk5P''@;'; put 'put ''TkUsdGhpcy5fc3RvcFNjcm9sbFRpbWVycz1uZXcgV24sdGhpcy5fY2FjaGVkU2hhZG93Um9vdD1udWxsLHRoaXMuX3N0YXJ0U2Nyb2xsSW50ZXJ2YWw9KCk9Pnt0aGlzLl9zdG9wU2Nyb2xsaW5nKCksZnVuY3Rpb24gUkZlKGM9MCxsPUNMKXtyZXR1cm4gYzwwJiYoYz0wKSxVMGUoYyxjLGwp''@;'; put 'put ''fSgwLGowZSkucGlwZShWMCh0aGlzLl9zdG9wU2Nyb2xsVGltZXJzKSkuc3Vic2NyaWJlKCgpPT57Y29uc3Qgdj10aGlzLl9zY3JvbGxOb2RlLE09dGhpcy5hdXRvU2Nyb2xsU3RlcDt0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj09PUQyLlVQP3Yuc2Nyb2xsQnkoMCwtTSk6dGhpcy5f''@;'; put 'put ''dmVydGljYWxTY3JvbGxEaXJlY3Rpb249PT1EMi5ET1dOJiZ2LnNjcm9sbEJ5KDAsTSksdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj09PWoxLkxFRlQ/di5zY3JvbGxCeSgtTSwwKTp0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPT09ajEuUklHSFQmJnYuc2Nyb2xsQnko''@;'; put 'put ''TSwwKX0pfSx0aGlzLmVsZW1lbnQ9RWQobCksdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLndpdGhTY3JvbGxhYmxlUGFyZW50cyhbdGhpcy5lbGVtZW50XSksYS5yZWdpc3RlckRyb3BDb250YWluZXIodGhpcyksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyBRMGUoZCksdGhpcy5fc29ydFN0cmF0''@;'; put 'put ''ZWd5PW5ldyBCRmUodGhpcy5lbGVtZW50LGEpLHRoaXMuX3NvcnRTdHJhdGVneS53aXRoU29ydFByZWRpY2F0ZSgodixNKT0+dGhpcy5zb3J0UHJlZGljYXRlKHYsTSx0aGlzKSl9ZGlzcG9zZSgpe3RoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9zdG9wU2Nyb2xsVGltZXJzLmNvbXBsZXRl''@;'; put 'put ''KCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLmVudGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuc29ydGVkLmNv''@;'; put 'put ''bXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLmNvbXBsZXRlKCksdGhpcy5fYWN0aXZlU2libGluZ3MuY2xlYXIoKSx0aGlzLl9zY3JvbGxOb2RlPW51bGwsdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCksdGhpcy5fZHJh''@;'; put 'put ''Z0Ryb3BSZWdpc3RyeS5yZW1vdmVEcm9wQ29udGFpbmVyKHRoaXMpfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZ31zdGFydCgpe3RoaXMuX2RyYWdnaW5nU3RhcnRlZCgpLHRoaXMuX25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl9ZW50ZXIobCxhLGQsaCl7dGhpcy5fZHJh''@;'; put 'put ''Z2dpbmdTdGFydGVkKCksbnVsbD09aCYmdGhpcy5zb3J0aW5nRGlzYWJsZWQmJihoPXRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKSksdGhpcy5fc29ydFN0cmF0ZWd5LmVudGVyKGwsYSxkLGgpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2li''@;'; put 'put ''bGluZ3MoKSx0aGlzLmVudGVyZWQubmV4dCh7aXRlbTpsLGNvbnRhaW5lcjp0aGlzLGN1cnJlbnRJbmRleDp0aGlzLmdldEl0ZW1JbmRleChsKX0pfWV4aXQobCl7dGhpcy5fcmVzZXQoKSx0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVyOnRoaXN9KX1kcm9wKGwsYSxkLGgsZix2''@;'; put 'put ''LE0sRD17fSl7dGhpcy5fcmVzZXQoKSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTpsLGN1cnJlbnRJbmRleDphLHByZXZpb3VzSW5kZXg6ZCxjb250YWluZXI6dGhpcyxwcmV2aW91c0NvbnRhaW5lcjpoLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZixkaXN0YW5jZTp2LGRyb3BQb2ludDpNLGV2''@;'; put 'put ''ZW50OkR9KX13aXRoSXRlbXMobCl7Y29uc3QgYT10aGlzLl9kcmFnZ2FibGVzO3JldHVybiB0aGlzLl9kcmFnZ2FibGVzPWwsbC5mb3JFYWNoKGQ9PmQuX3dpdGhEcm9wQ29udGFpbmVyKHRoaXMpKSx0aGlzLmlzRHJhZ2dpbmcoKSYmKGEuZmlsdGVyKGg9PmguaXNEcmFnZ2luZygpKS5ldmVy''@;'; put 'put ''eShoPT4tMT09PWwuaW5kZXhPZihoKSk/dGhpcy5fcmVzZXQoKTp0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aEl0ZW1zKHRoaXMuX2RyYWdnYWJsZXMpKSx0aGlzfXdpdGhEaXJlY3Rpb24obCl7cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5kaXJlY3Rpb249bCx0aGlzfWNvbm5lY3RlZFRvKGwp''@;'; put 'put ''e3JldHVybiB0aGlzLl9zaWJsaW5ncz1sLnNsaWNlKCksdGhpc313aXRoT3JpZW50YXRpb24obCl7cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5vcmllbnRhdGlvbj1sLHRoaXN9d2l0aFNjcm9sbGFibGVQYXJlbnRzKGwpe2NvbnN0IGE9RWQodGhpcy5lbGVtZW50KTtyZXR1cm4gdGhpcy5f''@;'; put 'put ''c2Nyb2xsYWJsZUVsZW1lbnRzPS0xPT09bC5pbmRleE9mKGEpP1thLC4uLmxdOmwuc2xpY2UoKSx0aGlzfWdldFNjcm9sbGFibGVQYXJlbnRzKCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVFbGVtZW50c31nZXRJdGVtSW5kZXgobCl7cmV0dXJuIHRoaXMuX2lzRHJhZ2dpbmc/dGhpcy5fc29y''@;'; put 'put ''dFN0cmF0ZWd5LmdldEl0ZW1JbmRleChsKTp0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YobCl9aXNSZWNlaXZpbmcoKXtyZXR1cm4gdGhpcy5fYWN0aXZlU2libGluZ3Muc2l6ZT4wfV9zb3J0SXRlbShsLGEsZCxoKXtpZih0aGlzLnNvcnRpbmdEaXNhYmxlZHx8IXRoaXMuX2RvbVJlY3R8fCFK''@;'; put 'put ''MGUodGhpcy5fZG9tUmVjdCwuMDUsYSxkKSlyZXR1cm47Y29uc3QgZj10aGlzLl9zb3J0U3RyYXRlZ3kuc29ydChsLGEsZCxoKTtmJiZ0aGlzLnNvcnRlZC5uZXh0KHtwcmV2aW91c0luZGV4OmYucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6Zi5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRo''@;'; put 'put ''aXMsaXRlbTpsfSl9X3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkobCxhKXtpZih0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZClyZXR1cm47bGV0IGQsaD1EMi5OT05FLGY9ajEuTk9ORTtpZih0aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmZvckVhY2goKHYsTSk9PntNPT09dGhpcy5f''@;'; put 'put ''ZG9jdW1lbnR8fCF2LmNsaWVudFJlY3R8fGR8fEowZSh2LmNsaWVudFJlY3QsLjA1LGwsYSkmJihbaCxmXT1mdW5jdGlvbiB6RmUoYyxsLGEsZCxoKXtjb25zdCBmPXAxZShsLGgpLHY9ZzFlKGwsZCk7bGV0IE09RDIuTk9ORSxEPWoxLk5PTkU7aWYoZil7Y29uc3QgWj1jLnNjcm9sbFRvcDtm''@;'; put 'put ''PT09RDIuVVA/Wj4wJiYoTT1EMi5VUCk6Yy5zY3JvbGxIZWlnaHQtWj5jLmNsaWVudEhlaWdodCYmKE09RDIuRE9XTil9aWYodil7Y29uc3QgWj1jLnNjcm9sbExlZnQ7InJ0bCI9PT1hP3Y9PT1qMS5SSUdIVD9aPDAmJihEPWoxLlJJR0hUKTpjLnNjcm9sbFdpZHRoK1o+Yy5jbGllbnRXaWR0''@;'; put 'put ''aCYmKEQ9ajEuTEVGVCk6dj09PWoxLkxFRlQ/Wj4wJiYoRD1qMS5MRUZUKTpjLnNjcm9sbFdpZHRoLVo+Yy5jbGllbnRXaWR0aCYmKEQ9ajEuUklHSFQpfXJldHVybltNLERdfShNLHYuY2xpZW50UmVjdCx0aGlzLl9zb3J0U3RyYXRlZ3kuZGlyZWN0aW9uLGwsYSksKGh8fGYpJiYoZD1NKSl9''@;'; put 'put ''KSwhaCYmIWYpe2NvbnN0e3dpZHRoOnYsaGVpZ2h0Ok19PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksRD17d2lkdGg6dixoZWlnaHQ6TSx0b3A6MCxyaWdodDp2LGJvdHRvbTpNLGxlZnQ6MH07aD1wMWUoRCxhKSxmPWcxZShELGwpLGQ9d2luZG93fWQmJihoIT09dGhp''@;'; put 'put ''cy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb258fGYhPT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9ufHxkIT09dGhpcy5fc2Nyb2xsTm9kZSkmJih0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj1oLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249Zix0aGlzLl9zY3Jv''@;'; put 'put ''bGxOb2RlPWQsKGh8fGYpJiZkP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLl9zdGFydFNjcm9sbEludGVydmFsKTp0aGlzLl9zdG9wU2Nyb2xsaW5nKCkpfV9zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fc3RvcFNjcm9sbFRpbWVycy5uZXh0KCl9X2RyYWdnaW5nU3RhcnRlZCgp''@;'; put 'put ''e2NvbnN0IGw9RWQodGhpcy5lbGVtZW50KS5zdHlsZTt0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2lzRHJhZ2dpbmc9ITAsdGhpcy5faW5pdGlhbFNjcm9sbFNuYXA9bC5tc1Njcm9sbFNuYXBUeXBlfHxsLnNjcm9sbFNuYXBUeXBlfHwiIixsLnNjcm9sbFNuYXBUeXBlPWwubXNT''@;'; put 'put ''Y3JvbGxTbmFwVHlwZT0ibm9uZSIsdGhpcy5fc29ydFN0cmF0ZWd5LnN0YXJ0KHRoaXMuX2RyYWdnYWJsZXMpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50''@;'; put 'put ''cygpfV9jYWNoZVBhcmVudFBvc2l0aW9ucygpe2NvbnN0IGw9RWQodGhpcy5lbGVtZW50KTt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUodGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzKSx0aGlzLl9kb21SZWN0PXRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KGwpLmNsaWVu''@;'; put 'put ''dFJlY3R9X3Jlc2V0KCl7dGhpcy5faXNEcmFnZ2luZz0hMTtjb25zdCBsPUVkKHRoaXMuZWxlbWVudCkuc3R5bGU7bC5zY3JvbGxTbmFwVHlwZT1sLm1zU2Nyb2xsU25hcFR5cGU9dGhpcy5faW5pdGlhbFNjcm9sbFNuYXAsdGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdG9wUmVjZWl2''@;'; put 'put ''aW5nKHRoaXMpKSx0aGlzLl9zb3J0U3RyYXRlZ3kucmVzZXQoKSx0aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1faXNPdmVyQ29udGFpbmVyKGwsYSl7cmV0dXJu''@;'; put 'put ''IG51bGwhPXRoaXMuX2RvbVJlY3QmJlNZKHRoaXMuX2RvbVJlY3QsbCxhKX1fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbihsLGEsZCl7cmV0dXJuIHRoaXMuX3NpYmxpbmdzLmZpbmQoaD0+aC5fY2FuUmVjZWl2ZShsLGEsZCkpfV9jYW5SZWNlaXZlKGwsYSxkKXtpZighdGhpcy5f''@;'; put 'put ''ZG9tUmVjdHx8IVNZKHRoaXMuX2RvbVJlY3QsYSxkKXx8IXRoaXMuZW50ZXJQcmVkaWNhdGUobCx0aGlzKSlyZXR1cm4hMTtjb25zdCBoPXRoaXMuX2dldFNoYWRvd1Jvb3QoKS5lbGVtZW50RnJvbVBvaW50KGEsZCk7aWYoIWgpcmV0dXJuITE7Y29uc3QgZj1FZCh0aGlzLmVsZW1lbnQpO3Jl''@;'; put 'put ''dHVybiBoPT09Znx8Zi5jb250YWlucyhoKX1fc3RhcnRSZWNlaXZpbmcobCxhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZVNpYmxpbmdzOyFkLmhhcyhsKSYmYS5ldmVyeShoPT50aGlzLmVudGVyUHJlZGljYXRlKGgsdGhpcyl8fHRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihoKT4tMSkmJihkLmFk''@;'; put 'put ''ZChsKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLm5leHQoe2luaXRpYXRvcjpsLHJlY2VpdmVyOnRoaXMsaXRlbXM6YX0pKX1fc3RvcFJlY2VpdmluZyhsKXt0aGlzLl9hY3RpdmVTaWJsaW5n''@;'; put 'put ''cy5kZWxldGUobCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQubmV4dCh7aW5pdGlhdG9yOmwscmVjZWl2ZXI6dGhpc30pfV9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpe3RoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2Ny''@;'; put 'put ''aXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUobD0+e2lmKHRoaXMuaXNEcmFnZ2luZygpKXtjb25zdCBhPXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7YSYmdGhpcy5fc29ydFN0cmF0ZWd5''@;'; put 'put ''LnVwZGF0ZU9uU2Nyb2xsKGEudG9wLGEubGVmdCl9ZWxzZSB0aGlzLmlzUmVjZWl2aW5nKCkmJnRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCl9KX1fZ2V0U2hhZG93Um9vdCgpe2lmKCF0aGlzLl9jYWNoZWRTaGFkb3dSb290KXtjb25zdCBsPU8wZShFZCh0aGlzLmVsZW1lbnQpKTt0aGlz''@;'; put 'put ''Ll9jYWNoZWRTaGFkb3dSb290PWx8fHRoaXMuX2RvY3VtZW50fXJldHVybiB0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpe2NvbnN0IGw9dGhpcy5fc29ydFN0cmF0ZWd5LmdldEFjdGl2ZUl0ZW1zU25hcHNob3QoKS5maWx0ZXIoYT0+YS5pc0RyYWdn''@;'; put 'put ''aW5nKCkpO3RoaXMuX3NpYmxpbmdzLmZvckVhY2goYT0+YS5fc3RhcnRSZWNlaXZpbmcodGhpcyxsKSl9fWZ1bmN0aW9uIHAxZShjLGwpe2NvbnN0e3RvcDphLGJvdHRvbTpkLGhlaWdodDpofT1jLGY9LjA1Kmg7cmV0dXJuIGw+PWEtZiYmbDw9YStmP0QyLlVQOmw+PWQtZiYmbDw9ZCtmP0Qy''@;'; put 'put ''LkRPV046RDIuTk9ORX1mdW5jdGlvbiBnMWUoYyxsKXtjb25zdHtsZWZ0OmEscmlnaHQ6ZCx3aWR0aDpofT1jLGY9LjA1Kmg7cmV0dXJuIGw+PWEtZiYmbDw9YStmP2oxLkxFRlQ6bD49ZC1mJiZsPD1kK2Y/ajEuUklHSFQ6ajEuTk9ORX1jb25zdCBMTD1BeSh7cGFzc2l2ZTohMSxjYXB0dXJl''@;'; put 'put ''OiEwfSksT0w9bmV3IFNldDtsZXQgVUZlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0saG9zdEF0dHJzOlsi''@;'; put 'put ''Y2RrLWRyYWctcmVzZXRzLWNvbnRhaW5lciIsIiJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3FJXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe30sc3R5bGVzOlsiQGxheWVyIGNkay1yZXNldHN7LmNkay1kcmFnLXByZXZpZXd7YmFja2dyb3VuZDpub25lO2JvcmRl''@;'; put 'put ''cjpub25lO3BhZGRpbmc6MDtjb2xvcjppbmhlcml0fX0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KX19cmV0dXJuIGN9KSgpLFpGZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fbmdab25lPWEsdGhpcy5fYXBwUmVmPWZpKHE0KSx0aGlzLl9lbnZp''@;'; put 'put ''cm9ubWVudEluamVjdG9yPWZpKGhjKSx0aGlzLl9kcm9wSW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fZHJhZ0luc3RhbmNlcz1uZXcgU2V0LHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXM9W10sdGhpcy5fZ2xvYmFsTGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGU9aD0+''@;'; put 'put ''aC5pc0RyYWdnaW5nKCksdGhpcy5wb2ludGVyTW92ZT1uZXcgV24sdGhpcy5wb2ludGVyVXA9bmV3IFduLHRoaXMuc2Nyb2xsPW5ldyBXbix0aGlzLl9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmc9aD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoPjAmJmgucHJldmVudERl''@;'; put 'put ''ZmF1bHQoKX0sdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyPWg9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aD4wJiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5zb21lKHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlKSYmaC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMu''@;'; put 'put ''cG9pbnRlck1vdmUubmV4dChoKSl9LHRoaXMuX2RvY3VtZW50PWR9cmVnaXN0ZXJEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuaGFzKGEpfHx0aGlzLl9kcm9wSW5zdGFuY2VzLmFkZChhKX1yZWdpc3RlckRyYWdJdGVtKGEpe3RoaXMuX2RyYWdJbnN0YW5jZXMuYWRkKGEp''@;'; put 'put ''LDE9PT10aGlzLl9kcmFnSW5zdGFuY2VzLnNpemUmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyLExMKX0pfXJlbW92ZURyb3BDb250''@;'; put 'put ''YWluZXIoYSl7dGhpcy5fZHJvcEluc3RhbmNlcy5kZWxldGUoYSl9cmVtb3ZlRHJhZ0l0ZW0oYSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5kZWxldGUoYSksdGhpcy5zdG9wRHJhZ2dpbmcoYSksMD09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRM''@;'; put 'put ''aXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIsTEwpfXN0YXJ0RHJhZ2dpbmcoYSxkKXtpZighKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKT4tMSkmJih0aGlzLl9sb2FkUmVzZXRzKCksdGhpcy5fYWN0aXZlRHJhZ0luc3Rh''@;'; put 'put ''bmNlcy5wdXNoKGEpLDE9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCkpe2NvbnN0IGg9ZC50eXBlLnN0YXJ0c1dpdGgoInRvdWNoIik7dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLnNldChoPyJ0b3VjaGVuZCI6Im1vdXNldXAiLHtoYW5kbGVyOmY9PnRoaXMucG9pbnRlclVwLm5l''@;'; put 'put ''eHQoZiksb3B0aW9uczohMH0pLnNldCgic2Nyb2xsIix7aGFuZGxlcjpmPT50aGlzLnNjcm9sbC5uZXh0KGYpLG9wdGlvbnM6ITB9KS5zZXQoInNlbGVjdHN0YXJ0Iix7aGFuZGxlcjp0aGlzLl9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmcsb3B0aW9uczpMTH0pLGh8fHRoaXMuX2dsb2Jh''@;'; put 'put ''bExpc3RlbmVycy5zZXQoIm1vdXNlbW92ZSIse2hhbmRsZXI6Zj0+dGhpcy5wb2ludGVyTW92ZS5uZXh0KGYpLG9wdGlvbnM6TEx9KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuZm9yRWFjaCgoZix2KT0+e3RoaXMuX2RvY3VtZW50''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIodixmLmhhbmRsZXIsZi5vcHRpb25zKX0pfSl9fXN0b3BEcmFnZ2luZyhhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKTtkPi0xJiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5zcGxpY2UoZCwxKSwwPT09dGhpcy5fYWN0''@;'; put 'put ''aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgmJnRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCkpfWlzRHJhZ2dpbmcoYSl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKT4tMX1zY3JvbGxlZChhKXtjb25zdCBkPVt0aGlzLnNjcm9sbF07cmV0dXJuIGEmJmEhPT10''@;'; put 'put ''aGlzLl9kb2N1bWVudCYmZC5wdXNoKG5ldyBYdChoPT50aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCB2PU09Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCYmaC5uZXh0KE0pfTtyZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHYsITAp''@;'; put 'put ''LCgpPT57YS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHYsITApfX0pKSksX3goLi4uZCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcmFnSXRlbShhKSksdGhpcy5fZHJvcEluc3RhbmNlcy5mb3JFYWNoKGE9PnRoaXMucmVt''@;'; put 'put ''b3ZlRHJvcENvbnRhaW5lcihhKSksdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSx0aGlzLnBvaW50ZXJNb3ZlLmNvbXBsZXRlKCksdGhpcy5wb2ludGVyVXAuY29tcGxldGUoKX1fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKXt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuZm9yRWFjaCgoYSxkKT0+''@;'; put 'put ''e3RoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZCxhLmhhbmRsZXIsYS5vcHRpb25zKX0pLHRoaXMuX2dsb2JhbExpc3RlbmVycy5jbGVhcigpfV9sb2FkUmVzZXRzKCl7aWYoIU9MLmhhcyh0aGlzLl9hcHBSZWYpKXtPTC5hZGQodGhpcy5fYXBwUmVmKTtjb25zdCBhPWZ1bmN0''@;'; put 'put ''aW9uIGRfZShjLGwpe2NvbnN0IGE9Vm8oYyksZD1sLmVsZW1lbnRJbmplY3Rvcnx8SDMoKTtyZXR1cm4gbmV3IGs4KGEpLmNyZWF0ZShkLGwucHJvamVjdGFibGVOb2RlcyxsLmhvc3RFbGVtZW50LGwuZW52aXJvbm1lbnRJbmplY3Rvcil9KFVGZSx7ZW52aXJvbm1lbnRJbmplY3Rvcjp0aGlz''@;'; put 'put ''Ll9lbnZpcm9ubWVudEluamVjdG9yfSk7dGhpcy5fYXBwUmVmLm9uRGVzdHJveSgoKT0+e09MLmRlbGV0ZSh0aGlzLl9hcHBSZWYpLDA9PT1PTC5zaXplJiZhLmRlc3Ryb3koKX0pfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihXYSkseHIo''@;'; put 'put ''dnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBXRmU9e2RyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NX07bGV0''@;'; put 'put ''IFBMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9uZ1pvbmU9ZCx0aGlzLl92aWV3cG9ydFJ1bGVyPWgsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1mfWNyZWF0ZURyYWcoYSxkPVdGZSl7cmV0dXJuIG5ldyBORmUoYSxkLHRoaXMuX2Rv''@;'; put 'put ''Y3VtZW50LHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkpfWNyZWF0ZURyb3BMaXN0KGEpe3JldHVybiBuZXcgakZlKGEsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRS''@;'; put 'put ''dWxlcil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMpLHhyKFdhKSx4cihBTCkseHIoWkZlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1y''@;'; put 'put ''ZXR1cm4gY30pKCk7Y29uc3Qga3g9bmV3IFN0KCJDREtfRFJBR19QQVJFTlQiKSxtMWU9bmV3IFN0KCJDZGtEcmFnSGFuZGxlIik7bGV0IHYxZT0oKCk9PntjbGFzcyBje2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9''@;'; put 'put ''YSx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCh0aGlzKX1jb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWxlbWVudD1hLHRoaXMuX3BhcmVudERyYWc9ZCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IFduLHRoaXMuX2Rpc2FibGVkPSExLGQ/Ll9hZGRIYW5kbGUodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''Ll9wYXJlbnREcmFnPy5fcmVtb3ZlSGFuZGxlKHRoaXMpLHRoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShreCwxMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZ0hhbmRsZSIsIiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnLWhhbmRsZSJdLGlucHV0czp7ZGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcmFnSGFuZGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdfSxzdGFuZGFs''@;'; put 'put ''b25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6bTFlLHVzZUV4aXN0aW5nOmN9XSksV2xdfSl9fXJldHVybiBjfSkoKTtjb25zdCB4WT1uZXcgU3QoIkNES19EUkFHX0NPTkZJRyIpLEVZPW5ldyBTdCgiQ2RrRHJvcExpc3QiKTtsZXQgVFk9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5f''@;'; put 'put ''ZHJhZ0luc3RhbmNlcz1bXX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX2RyYWdSZWYuZGlzYWJsZWQ9dGhpcy5f''@;'; put 'put ''ZGlzYWJsZWR9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRyb3BDb250YWluZXI9ZCx0aGlzLl9uZ1pvbmU9Zix0aGlzLl92aWV3Q29udGFpbmVyUmVmPXYsdGhpcy5fZGlyPUQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cmUsdGhp''@;'; put 'put ''cy5fc2VsZkhhbmRsZT1jZSx0aGlzLl9wYXJlbnREcmFnPWJlLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5faGFuZGxlcz1uZXcgZWkoW10pLHRoaXMuc3RhcnRlZD1uZXcgS3IsdGhpcy5yZWxlYXNlZD1uZXcgS3IsdGhpcy5lbmRlZD1uZXcgS3IsdGhpcy5lbnRlcmVkPW5ldyBLcix0''@;'; put 'put ''aGlzLmV4aXRlZD1uZXcgS3IsdGhpcy5kcm9wcGVkPW5ldyBLcix0aGlzLm1vdmVkPW5ldyBYdChFZT0+e2NvbnN0IEJlPXRoaXMuX2RyYWdSZWYubW92ZWQucGlwZShMcihxZT0+KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246cWUucG9pbnRlclBvc2l0aW9uLGV2ZW50OnFlLmV2ZW50''@;'; put 'put ''LGRlbHRhOnFlLmRlbHRhLGRpc3RhbmNlOnFlLmRpc3RhbmNlfSkpKS5zdWJzY3JpYmUoRWUpO3JldHVybigpPT57QmUudW5zdWJzY3JpYmUoKX19KSx0aGlzLl9kcmFnUmVmPVouY3JlYXRlRHJhZyhhLHtkcmFnU3RhcnRUaHJlc2hvbGQ6TSYmbnVsbCE9TS5kcmFnU3RhcnRUaHJlc2hvbGQ/''@;'; put 'put ''TS5kcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOk0mJm51bGwhPU0ucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZD9NLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NSx6SW5kZXg6TT8uekluZGV4fSksdGhpcy5fZHJhZ1Jl''@;'; put 'put ''Zi5kYXRhPXRoaXMsYy5fZHJhZ0luc3RhbmNlcy5wdXNoKHRoaXMpLE0mJnRoaXMuX2Fzc2lnbkRlZmF1bHRzKE0pLGQmJih0aGlzLl9kcmFnUmVmLl93aXRoRHJvcENvbnRhaW5lcihkLl9kcm9wTGlzdFJlZiksZC5hZGRJdGVtKHRoaXMpKSx0aGlzLl9zeW5jSW5wdXRzKHRoaXMuX2RyYWdS''@;'; put 'put ''ZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcmFnUmVmKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKX1nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFJvb3RFbGVtZW50KCl9cmVz''@;'; put 'put ''ZXQoKXt0aGlzLl9kcmFnUmVmLnJlc2V0KCl9Z2V0RnJlZURyYWdQb3NpdGlvbigpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldEZyZWVEcmFnUG9zaXRpb24oKX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpe3RoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbihhKX1uZ0FmdGVyVmlld0lu''@;'; put 'put ''aXQoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShZZigxKSxWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl91cGRhdGVSb290RWxlbWVudCgpLHRoaXMuX3NldHVwSGFuZGxlc0xpc3RlbmVyKCks''@;'; put 'put ''dGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX0pfSl9bmdPbkNoYW5nZXMoYSl7Y29uc3QgZD1hLnJvb3RFbGVtZW50U2VsZWN0b3IsaD1hLmZyZWVEcmFnUG9zaXRpb247ZCYmIWQuZmlyc3RDaGFu''@;'; put 'put ''Z2UmJnRoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksaCYmIWguZmlyc3RDaGFuZ2UmJnRoaXMuZnJlZURyYWdQb3NpdGlvbiYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMuZnJlZURyYWdQb3NpdGlvbil9bmdPbkRlc3Ryb3koKXt0aGlzLmRyb3BDb250YWluZXImJnRo''@;'; put 'put ''aXMuZHJvcENvbnRhaW5lci5yZW1vdmVJdGVtKHRoaXMpO2NvbnN0IGE9Yy5fZHJhZ0luc3RhbmNlcy5pbmRleE9mKHRoaXMpO2E+LTEmJmMuX2RyYWdJbnN0YW5jZXMuc3BsaWNlKGEsMSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5faGFuZGxlcy5jb21wbGV0''@;'; put 'put ''ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fZHJhZ1JlZi5kaXNwb3NlKCl9KX1fYWRkSGFuZGxlKGEpe2NvbnN0IGQ9dGhpcy5faGFuZGxlcy5nZXRWYWx1ZSgpO2QucHVzaChhKSx0aGlzLl9oYW5kbGVzLm5leHQoZCl9X3JlbW92''@;'; put 'put ''ZUhhbmRsZShhKXtjb25zdCBkPXRoaXMuX2hhbmRsZXMuZ2V0VmFsdWUoKSxoPWQuaW5kZXhPZihhKTtoPi0xJiYoZC5zcGxpY2UoaCwxKSx0aGlzLl9oYW5kbGVzLm5leHQoZCkpfV9zZXRQcmV2aWV3VGVtcGxhdGUoYSl7dGhpcy5fcHJldmlld1RlbXBsYXRlPWF9X3Jlc2V0UHJldmlld1Rl''@;'; put 'put ''bXBsYXRlKGEpe2E9PT10aGlzLl9wcmV2aWV3VGVtcGxhdGUmJih0aGlzLl9wcmV2aWV3VGVtcGxhdGU9bnVsbCl9X3NldFBsYWNlaG9sZGVyVGVtcGxhdGUoYSl7dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1hfV9yZXNldFBsYWNlaG9sZGVyVGVtcGxhdGUoYSl7YT09PXRoaXMuX3BsYWNl''@;'; put 'put ''aG9sZGVyVGVtcGxhdGUmJih0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPW51bGwpfV91cGRhdGVSb290RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7bGV0IGQ9YTt0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3ImJihkPXZvaWQgMCE9PWEuY2xvc2VzdD9hLmNs''@;'; put 'put ''b3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKTphLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKSksdGhpcy5fZHJhZ1JlZi53aXRoUm9vdEVsZW1lbnQoZHx8YSl9X2dldEJvdW5kYXJ5RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5ib3VuZGFyeUVs''@;'; put 'put ''ZW1lbnQ7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP3RoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoYSk6RWQoYSk6bnVsbH1fc3luY0lucHV0cyhhKXthLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57aWYoIWEuaXNEcmFnZ2luZygpKXtjb25zdCBkPXRoaXMuX2Rp''@;'; put 'put ''cixoPXRoaXMuZHJhZ1N0YXJ0RGVsYXksZj10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZS5kYXRhLHZpZXdDb250YWluZXI6dGhpcy5fdmlld0Nv''@;'; put 'put ''bnRhaW5lclJlZn06bnVsbCx2PXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcHJldmlld1RlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcHJldmlld1RlbXBsYXRlLmRhdGEsbWF0Y2hTaXplOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5tYXRjaFNpemUsdmll''@;'; put 'put ''d0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsO2EuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5kcmFnU3RhcnREZWxheT0ib2JqZWN0Ij09dHlwZW9mIGgmJmg/aDpkNyhoKSxhLmNvbnN0cmFpblBvc2l0aW9uPXRoaXMuY29u''@;'; put 'put ''c3RyYWluUG9zaXRpb24sYS5wcmV2aWV3Q2xhc3M9dGhpcy5wcmV2aWV3Q2xhc3MsYS53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuX2dldEJvdW5kYXJ5RWxlbWVudCgpKS53aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShmKS53aXRoUHJldmlld1RlbXBsYXRlKHYpLndpdGhQcmV2aWV3Q29udGFp''@;'; put 'put ''bmVyKHRoaXMucHJldmlld0NvbnRhaW5lcnx8Imdsb2JhbCIpLGQmJmEud2l0aERpcmVjdGlvbihkLnZhbHVlKX19KSxhLmJlZm9yZVN0YXJ0ZWQucGlwZShZZigxKSkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fcGFyZW50RHJhZylyZXR1cm4gdm9pZCBhLndpdGhQYXJlbnQodGhpcy5fcGFy''@;'; put 'put ''ZW50RHJhZy5fZHJhZ1JlZik7bGV0IGQ9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2Q7KXtpZihkLmNsYXNzTGlzdC5jb250YWlucygiY2RrLWRyYWciKSl7YS53aXRoUGFyZW50KGMuX2RyYWdJbnN0YW5jZXMuZmluZChoPT5oLmVsZW1lbnQubmF0aXZl''@;'; put 'put ''RWxlbWVudD09PWQpPy5fZHJhZ1JlZnx8bnVsbCk7YnJlYWt9ZD1kLnBhcmVudEVsZW1lbnR9fSl9X2hhbmRsZUV2ZW50cyhhKXthLnN0YXJ0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnN0YXJ0ZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9y''@;'; put 'put ''UmVmLm1hcmtGb3JDaGVjaygpfSksYS5yZWxlYXNlZC5zdWJzY3JpYmUoZD0+e3RoaXMucmVsZWFzZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pfSksYS5lbmRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW5kZWQuZW1pdCh7c291cmNlOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5j''@;'; put 'put ''ZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpcyxjdXJy''@;'; put 'put ''ZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRl''@;'; put 'put ''eDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixp''@;'; put 'put ''dGVtOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pfSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ1N0YXJ0RGVsYXk6aCxjb25zdHJhaW5Qb3NpdGlvbjpmLHByZXZpZXdDbGFzczp2LGJvdW5kYXJ5''@;'; put 'put ''RWxlbWVudDpNLGRyYWdnaW5nRGlzYWJsZWQ6RCxyb290RWxlbWVudFNlbGVjdG9yOloscHJldmlld0NvbnRhaW5lcjpyZX09YTt0aGlzLmRpc2FibGVkPUQ/PyExLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9aHx8MCxkJiYodGhpcy5sb2NrQXhpcz1kKSxmJiYodGhpcy5jb25zdHJhaW5Qb3NpdGlv''@;'; put 'put ''bj1mKSx2JiYodGhpcy5wcmV2aWV3Q2xhc3M9diksTSYmKHRoaXMuYm91bmRhcnlFbGVtZW50PU0pLFomJih0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3I9WikscmUmJih0aGlzLnByZXZpZXdDb250YWluZXI9cmUpfV9zZXR1cEhhbmRsZXNMaXN0ZW5lcigpe3RoaXMuX2hhbmRsZXMucGlwZShH''@;'; put 'put ''dShhPT57Y29uc3QgZD1hLm1hcChoPT5oLmVsZW1lbnQpO3RoaXMuX3NlbGZIYW5kbGUmJnRoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmZC5wdXNoKHRoaXMuZWxlbWVudCksdGhpcy5fZHJhZ1JlZi53aXRoSGFuZGxlcyhkKX0pLFYxKGE9Pl94KC4uLmEubWFwKGQ9PmQuX3N0YXRlQ2hhbmdl''@;'; put 'put ''cy5waXBlKHgyKGQpKSkpKSxWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoYT0+e2NvbnN0IGQ9dGhpcy5fZHJhZ1JlZixoPWEuZWxlbWVudC5uYXRpdmVFbGVtZW50O2EuZGlzYWJsZWQ/ZC5kaXNhYmxlSGFuZGxlKGgpOmQuZW5hYmxlSGFuZGxlKGgpfSl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKEVZLDEyKSxHZSh2cyksR2UoV2EpLEdlKERvKSxHZSh4WSw4KSxHZShwbSw4KSxHZShQTCksR2UoRXMpLEdlKG0xZSwxMCksR2Uoa3gsMTIpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2Vs''@;'; put 'put ''ZWN0b3JzOltbIiIsImNka0RyYWciLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigiY2RrLWRyYWctZGlzYWJsZWQiLGguZGlzYWJsZWQpKCJjZGstZHJhZy1kcmFnZ2luZyIsaC5fZHJhZ1JlZi5pc0Ry''@;'; put 'put ''YWdnaW5nKCkpfSxpbnB1dHM6e2RhdGE6W05uLk5vbmUsImNka0RyYWdEYXRhIiwiZGF0YSJdLGxvY2tBeGlzOltObi5Ob25lLCJjZGtEcmFnTG9ja0F4aXMiLCJsb2NrQXhpcyJdLHJvb3RFbGVtZW50U2VsZWN0b3I6W05uLk5vbmUsImNka0RyYWdSb290RWxlbWVudCIsInJvb3RFbGVtZW50''@;'; put 'put ''U2VsZWN0b3IiXSxib3VuZGFyeUVsZW1lbnQ6W05uLk5vbmUsImNka0RyYWdCb3VuZGFyeSIsImJvdW5kYXJ5RWxlbWVudCJdLGRyYWdTdGFydERlbGF5OltObi5Ob25lLCJjZGtEcmFnU3RhcnREZWxheSIsImRyYWdTdGFydERlbGF5Il0sZnJlZURyYWdQb3NpdGlvbjpbTm4uTm9uZSwiY2Rr''@;'; put 'put ''RHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJmcmVlRHJhZ1Bvc2l0aW9uIl0sZGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcmFnRGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdLGNvbnN0cmFpblBvc2l0aW9uOltObi5Ob25lLCJjZGtEcmFnQ29uc3RyYWluUG9zaXRp''@;'; put 'put ''b24iLCJjb25zdHJhaW5Qb3NpdGlvbiJdLHByZXZpZXdDbGFzczpbTm4uTm9uZSwiY2RrRHJhZ1ByZXZpZXdDbGFzcyIsInByZXZpZXdDbGFzcyJdLHByZXZpZXdDb250YWluZXI6W05uLk5vbmUsImNka0RyYWdQcmV2aWV3Q29udGFpbmVyIiwicHJldmlld0NvbnRhaW5lciJdfSxvdXRwdXRz''@;'; put 'put ''OntzdGFydGVkOiJjZGtEcmFnU3RhcnRlZCIscmVsZWFzZWQ6ImNka0RyYWdSZWxlYXNlZCIsZW5kZWQ6ImNka0RyYWdFbmRlZCIsZW50ZXJlZDoiY2RrRHJhZ0VudGVyZWQiLGV4aXRlZDoiY2RrRHJhZ0V4aXRlZCIsZHJvcHBlZDoiY2RrRHJhZ0Ryb3BwZWQiLG1vdmVkOiJjZGtEcmFnTW92''@;'; put 'put ''ZWQifSxleHBvcnRBczpbImNka0RyYWciXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6a3gsdXNlRXhpc3Rpbmc6Y31dKSxXbCx3bF19KX19cmV0dXJuIGN9KSgpO2NvbnN0IEFZPW5ldyBTdCgiQ2RrRHJvcExpc3RHcm91cCIpO2xldCBiMWU9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1zPW5ldyBTZXQsdGhpcy5kaXNhYmxlZD0hMX1uZ09uRGVzdHJveSgpe3RoaXMuX2l0ZW1zLmNsZWFyKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdEdyb3VwIiwiIl1dLGlucHV0czp7ZGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcm9wTGlzdEdyb3VwRGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdfSxleHBvcnRBczpbImNka0Ryb3BMaXN0R3JvdXAiXSxz''@;'; put 'put ''dGFuZGFsb25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6QVksdXNlRXhpc3Rpbmc6Y31dKSxXbF19KX19cmV0dXJuIGN9KSgpLEdGZT0wLHkxZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9kcm9wTGlzdHM9W119Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwh''@;'; put 'put ''IXRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZHJvcExpc3RSZWYuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWQ9YX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1oLHRo''@;'; put 'put ''aXMuX3Njcm9sbERpc3BhdGNoZXI9Zix0aGlzLl9kaXI9dix0aGlzLl9ncm91cD1NLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5jb25uZWN0ZWRUbz1bXSx0aGlzLmlkPSJjZGstZHJvcC1saXN0LSIrR0ZlKyssdGhpcy5lbnRlclByZWRpY2F0ZT0oKT0+ITAsdGhpcy5zb3J0UHJlZGlj''@;'; put 'put ''YXRlPSgpPT4hMCx0aGlzLmRyb3BwZWQ9bmV3IEtyLHRoaXMuZW50ZXJlZD1uZXcgS3IsdGhpcy5leGl0ZWQ9bmV3IEtyLHRoaXMuc29ydGVkPW5ldyBLcix0aGlzLl91bnNvcnRlZEl0ZW1zPW5ldyBTZXQsdGhpcy5fZHJvcExpc3RSZWY9ZC5jcmVhdGVEcm9wTGlzdChhKSx0aGlzLl9kcm9w''@;'; put 'put ''TGlzdFJlZi5kYXRhPXRoaXMsRCYmdGhpcy5fYXNzaWduRGVmYXVsdHMoRCksdGhpcy5fZHJvcExpc3RSZWYuZW50ZXJQcmVkaWNhdGU9KFoscmUpPT50aGlzLmVudGVyUHJlZGljYXRlKFouZGF0YSxyZS5kYXRhKSx0aGlzLl9kcm9wTGlzdFJlZi5zb3J0UHJlZGljYXRlPShaLHJlLGNlKT0+''@;'; put 'put ''dGhpcy5zb3J0UHJlZGljYXRlKFoscmUuZGF0YSxjZS5kYXRhKSx0aGlzLl9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbih0aGlzLl9kcm9wTGlzdFJlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2Ryb3BMaXN0UmVmKSxjLl9kcm9wTGlzdHMucHVzaCh0aGlzKSxNJiZNLl9pdGVtcy5h''@;'; put 'put ''ZGQodGhpcyl9YWRkSXRlbShhKXt0aGlzLl91bnNvcnRlZEl0ZW1zLmFkZChhKSx0aGlzLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkmJnRoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKX1yZW1vdmVJdGVtKGEpe3RoaXMuX3Vuc29ydGVkSXRlbXMuZGVsZXRlKGEpLHRoaXMuX2Ryb3BMaXN0UmVm''@;'; put 'put ''LmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpfWdldFNvcnRlZEl0ZW1zKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fdW5zb3J0ZWRJdGVtcykuc29ydCgoYSxkKT0+YS5fZHJhZ1JlZi5nZXRWaXNpYmxlRWxlbWVudCgpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQu''@;'; put 'put ''X2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc/LTE6MSl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPWMuX2Ryb3BMaXN0cy5pbmRleE9mKHRoaXMpO2E+LTEmJmMuX2Ryb3BMaXN0cy5zcGxpY2UoYSwxKSx0aGlzLl9ncm91cCYmdGhp''@;'; put 'put ''cy5fZ3JvdXAuX2l0ZW1zLmRlbGV0ZSh0aGlzKSx0aGlzLl91bnNvcnRlZEl0ZW1zLmNsZWFyKCksdGhpcy5fZHJvcExpc3RSZWYuZGlzcG9zZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9X3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKGEp''@;'; put 'put ''e3RoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKHgyKHRoaXMuX2Rpci52YWx1ZSksVjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGQ9PmEud2l0aERpcmVjdGlvbihkKSksYS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9ZnVuY3Rpb24gaUZlKGMpe3Jl''@;'; put 'put ''dHVybiBBcnJheS5pc0FycmF5KGMpP2M6W2NdfSh0aGlzLmNvbm5lY3RlZFRvKS5tYXAoaD0+InN0cmluZyI9PXR5cGVvZiBoP2MuX2Ryb3BMaXN0cy5maW5kKHY9PnYuaWQ9PT1oKTpoKTtpZih0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuX2l0ZW1zLmZvckVhY2goaD0+ey0xPT09ZC5pbmRl''@;'; put 'put ''eE9mKGgpJiZkLnB1c2goaCl9KSwhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZCl7Y29uc3QgaD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0aGlzLmVsZW1lbnQpLm1hcChmPT5mLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50''@;'; put 'put ''KTt0aGlzLl9kcm9wTGlzdFJlZi53aXRoU2Nyb2xsYWJsZVBhcmVudHMoaCksdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZD0hMH1hLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsYS5sb2NrQXhpcz10aGlzLmxvY2tBeGlzLGEuc29ydGluZ0Rpc2FibGVkPXRoaXMuc29ydGluZ0Rpc2Fi''@;'; put 'put ''bGVkLGEuYXV0b1Njcm9sbERpc2FibGVkPXRoaXMuYXV0b1Njcm9sbERpc2FibGVkLGEuYXV0b1Njcm9sbFN0ZXA9ZDcodGhpcy5hdXRvU2Nyb2xsU3RlcCwyKSxhLmNvbm5lY3RlZFRvKGQuZmlsdGVyKGg9PmgmJmghPT10aGlzKS5tYXAoaD0+aC5fZHJvcExpc3RSZWYpKS53aXRoT3JpZW50''@;'; put 'put ''YXRpb24odGhpcy5vcmllbnRhdGlvbil9KX1faGFuZGxlRXZlbnRzKGEpe2EuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVyZWQuc3Vic2NyaWJlKGQ9Pnt0''@;'; put 'put ''aGlzLmVudGVyZWQuZW1pdCh7Y29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YSxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YX0pLHRoaXMuX2No''@;'; put 'put ''YW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5zb3J0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnNvcnRlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YX0p''@;'; put 'put ''fSksYS5kcm9wcGVkLnN1YnNjcmliZShkPT57dGhpcy5kcm9wcGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxwcmV2aW91c0NvbnRhaW5lcjpkLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsY29udGFpbmVyOmQuY29udGFp''@;'; put 'put ''bmVyLmRhdGEsaXRlbTpkLml0ZW0uZGF0YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNo''@;'; put 'put ''ZWNrKCl9KSxfeChhLnJlY2VpdmluZ1N0YXJ0ZWQsYS5yZWNlaXZpbmdTdG9wcGVkKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fYXNzaWduRGVmYXVsdHMoYSl7Y29uc3R7bG9ja0F4aXM6ZCxkcmFnZ2luZ0Rpc2FibGVkOmgsc29ydGlu''@;'; put 'put ''Z0Rpc2FibGVkOmYsbGlzdEF1dG9TY3JvbGxEaXNhYmxlZDp2LGxpc3RPcmllbnRhdGlvbjpNfT1hO3RoaXMuZGlzYWJsZWQ9aD8/ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9Zj8/ITEsdGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQ9dj8/ITEsdGhpcy5vcmllbnRhdGlvbj1NfHwidmVydGljYWwi''@;'; put 'put ''LGQmJih0aGlzLmxvY2tBeGlzPWQpfV9zeW5jSXRlbXNXaXRoUmVmKCl7dGhpcy5fZHJvcExpc3RSZWYud2l0aEl0ZW1zKHRoaXMuZ2V0U29ydGVkSXRlbXMoKS5tYXAoYT0+YS5fZHJhZ1JlZikpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl''@;'; put 'put ''KEppKSxHZShQTCksR2UoRXMpLEdlKGt5KSxHZShwbSw4KSxHZShBWSwxMiksR2UoeFksOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3QiLCIiXSxbImNkay1kcm9wLWxpc3QiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJvcC1s''@;'; put 'put ''aXN0Il0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJihocigiaWQiLGguaWQpLFRyKCJjZGstZHJvcC1saXN0LWRpc2FibGVkIixoLmRpc2FibGVkKSgiY2RrLWRyb3AtbGlzdC1kcmFnZ2luZyIsaC5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpKSgiY2RrLWRy''@;'; put 'put ''b3AtbGlzdC1yZWNlaXZpbmciLGguX2Ryb3BMaXN0UmVmLmlzUmVjZWl2aW5nKCkpKX0saW5wdXRzOntjb25uZWN0ZWRUbzpbTm4uTm9uZSwiY2RrRHJvcExpc3RDb25uZWN0ZWRUbyIsImNvbm5lY3RlZFRvIl0sZGF0YTpbTm4uTm9uZSwiY2RrRHJvcExpc3REYXRhIiwiZGF0YSJdLG9yaWVu''@;'; put 'put ''dGF0aW9uOltObi5Ob25lLCJjZGtEcm9wTGlzdE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iXSxpZDoiaWQiLGxvY2tBeGlzOltObi5Ob25lLCJjZGtEcm9wTGlzdExvY2tBeGlzIiwibG9ja0F4aXMiXSxkaXNhYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BM''@;'; put 'put ''aXN0RGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdLHNvcnRpbmdEaXNhYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkIiwic29ydGluZ0Rpc2FibGVkIixzMV0sZW50ZXJQcmVkaWNhdGU6W05uLk5vbmUsImNka0Ryb3BMaXN0RW50''@;'; put 'put ''ZXJQcmVkaWNhdGUiLCJlbnRlclByZWRpY2F0ZSJdLHNvcnRQcmVkaWNhdGU6W05uLk5vbmUsImNka0Ryb3BMaXN0U29ydFByZWRpY2F0ZSIsInNvcnRQcmVkaWNhdGUiXSxhdXRvU2Nyb2xsRGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcm9wTGlzdEF1dG9T''@;'; put 'put ''Y3JvbGxEaXNhYmxlZCIsImF1dG9TY3JvbGxEaXNhYmxlZCIsczFdLGF1dG9TY3JvbGxTdGVwOltObi5Ob25lLCJjZGtEcm9wTGlzdEF1dG9TY3JvbGxTdGVwIiwiYXV0b1Njcm9sbFN0ZXAiXX0sb3V0cHV0czp7ZHJvcHBlZDoiY2RrRHJvcExpc3REcm9wcGVkIixlbnRlcmVkOiJjZGtEcm9w''@;'; put 'put ''TGlzdEVudGVyZWQiLGV4aXRlZDoiY2RrRHJvcExpc3RFeGl0ZWQiLHNvcnRlZDoiY2RrRHJvcExpc3RTb3J0ZWQifSxleHBvcnRBczpbImNka0Ryb3BMaXN0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbZGEoW3twcm92aWRlOkFZLHVzZVZhbHVlOnZvaWQgMH0se3Byb3ZpZGU6RVksdXNl''@;'; put 'put ''RXhpc3Rpbmc6Y31dKSxXbF19KX19cmV0dXJuIGN9KSgpLF8xZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7''@;'; put 'put ''cHJvdmlkZXJzOltQTF0saW1wb3J0czpbSUZlXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgeW89WyIqIl0sWEZlPVtbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJd''@;'; put 'put ''XSwiKiJdLEpGZT1bImNsci1hY2NvcmRpb24tdGl0bGUsIGNsci1zdGVwLXRpdGxlIiwiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwgY2xyLXN0ZXAtZGVzY3JpcHRpb24iLCIqIl07ZnVuY3Rpb24gUUZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5KSxGdCgiQHRv''@;'; put 'put ''Z2dsZS5kb25lIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY29sbGFwc2VQYW5lbE9uQW5pbWF0aW9uRG9uZShoKSl9KSxkZSgxLCJkaXYiLDEwKSxZcigyLDIpLGhlKCkoKX0yJmMmJk1lKCJAdG9nZ2xlIix2b2lkIDApfWZ1bmN0aW9u''@;'; put 'put ''IGVIZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsMikoMiwiZGl2IiwzKSgzLCJidXR0b24iLDQsMCksZWwoNSwiYXN5bmMiKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudG9nZ2xlUGFuZWwoKSl9KSxkZSg2LCJzcGFuIiw1''@;'; put 'put ''KSxHdCg3LCJjZHMtaWNvbiIsNiksaGUoKSxZcig4KSxZcig5LDEpLGhlKCkoKSxkZSgxMCwiZGl2Iiw3KSxndCgxMSxRRmUsMywxLCJkaXYiLDgpLGhlKCkoKSxsaSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1sLiRpbXBsaWNpdCxoPVJlKCk7ZmUoKSxNZSgibmdDbGFzcyIsaC5nZXRQYW5l''@;'; put 'put ''bFN0YXRlQ2xhc3NlcyhkKSksZmUoKSxocigicm9sZSIsaC5oZWFkaW5nRW5hYmxlZHx8aC5leHBsaWNpdEhlYWRpbmdMZXZlbD8iaGVhZGluZyI6bnVsbCkoImFyaWEtbGV2ZWwiLGguaGVhZGluZ0VuYWJsZWR8fGguZXhwbGljaXRIZWFkaW5nTGV2ZWw/aC5oZWFkaW5nTGV2ZWw6bnVsbCks''@;'; put 'put ''ZmUoKSxUcigiY2xyLWFjY29yZGlvbi1oZWFkZXItaGFzLWRlc2NyaXB0aW9uIiwobnVsbD09KGE9RGMoNSwxNCxoLmFjY29yZGlvbkRlc2NyaXB0aW9uLmNoYW5nZXMpKT9udWxsOmEubGVuZ3RoKXx8aC5hY2NvcmRpb25EZXNjcmlwdGlvbi5sZW5ndGgpLE1lKCJpZCIsaC5nZXRBY2NvcmRp''@;'; put 'put ''b25IZWFkZXJJZChkLnRlbXBsYXRlSWQpKSgiZGlzYWJsZWQiLGQuZGlzYWJsZWQpLGhyKCJhcmlhLWNvbnRyb2xzIiwhZC5kaXNhYmxlZCYmZC5vcGVuP2guZ2V0QWNjb3JkaW9uQ29udGVudElkKGQudGVtcGxhdGVJZCk6bnVsbCkoImFyaWEtZXhwYW5kZWQiLGQub3BlbiksZmUoNyksTWUo''@;'; put 'put ''IkBza2lwSW5pdGlhbFJlbmRlciIsdm9pZCAwKSgiaWQiLGguZ2V0QWNjb3JkaW9uQ29udGVudElkKGQudGVtcGxhdGVJZCkpLGhyKCJhcmlhLWhpZGRlbiIsIWQub3BlbikoImFyaWEtbGFiZWxsZWRieSIsaC5nZXRBY2NvcmRpb25IZWFkZXJJZChkLnRlbXBsYXRlSWQpKSxmZSgpLE1lKCJu''@;'; put 'put ''Z0lmIixkLm9wZW4pfX1jb25zdCBDSGU9WyJjbHJMb2FkaW5nIiwiIl07ZnVuY3Rpb24gU0hlKGMsbCl7MSZjJiYoc2koMCksR3QoMSwic3BhbiIsMyksbGkoKSksMiZjJiYoZmUoKSxNZSgiQHNwaW5uZXIiLHZvaWQgMCkpfWZ1bmN0aW9uIE1IZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Mbigp''@;'; put 'put ''O3NpKDApLGRlKDEsInNwYW4iLDQpLEZ0KCJAdmFsaWRhdGVkLmRvbmUiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLmxvYWRpbmdTdGF0ZUNoYW5nZShoLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0pLGhlKCksbGkoKX0yJmMmJihmZSgpLE1lKCJAdmFsaWRhdGVk''@;'; put 'put ''Iix2b2lkIDApKX1mdW5jdGlvbiB4SGUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw1KSxZcigxKSxoZSgpKSwyJmMmJk1lKCJAZGVmYXVsdEJ1dHRvbiIsdm9pZCAwKX1mdW5jdGlvbiBFSGUoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJidXR0b24iLDEpLEd0KDIsImNkcy1pY29uIiwyKSxo''@;'; put 'put ''ZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksaHIoImFyaWEtbGFiZWwiLGEuc2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdFRvZ2dsZSksZmUoKSxocigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBU''@;'; put 'put ''SGU9W1tbImNsci1zaWducG9zdC10aXRsZSJdXSwiKiJdLEFIZT1bImNsci1zaWducG9zdC10aXRsZSIsIioiXSxrSGU9W1tbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0sW1sibGFiZWwiXV1dLERIZT1bIltjbHJDaGVja2JveF0sW2NsclRvZ2dsZV0iLCJsYWJl''@;'; put 'put ''bCJdO2Z1bmN0aW9uIElIZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1jb25zdCBSSGU9W1tbImxhYmVsIl1dLFtbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtb''@;'; put 'put ''ImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLExIZT1bImxhYmVsIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIsY2xyLXRvZ2dsZS13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gT0hlKGMsbCl7MSZj''@;'; put 'put ''JiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIFBIZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMyksWXIoMSwyKSxoZSgpKX1mdW5jdGlvbiBGSGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBISGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KX1mdW5jdGlvbiBOSGUo''@;'; put 'put ''YyxsKXsxJmMmJllyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gVkhlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1mdW5jdGlvbiBCSGUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMpLGd0KDEsRkhlLDEsMCwiY2RzLWljb24iLDQpKDIs''@;'; put 'put ''SEhlLDEsMCwiY2RzLWljb24iLDUpKDMsTkhlLDEsMCwibmctY29udGVudCIsMCkoNCxWSGUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dWYWxpZCksZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsYS5zaG93VmFsaWQpfX1jb25zdCBqSGU9WyJjbHJLZXlGb2N1cyIsIiJdLFlIZT1bW1sibGFiZWwiXV0sW1siIiwiY2xySW5wdXRQcmVmaXgiLCIiXV0sW1siIiwiY2xySW5wdXQiLCIiXV0sW1siIiwiY2xySW5wdXRTdWZmaXgi''@;'; put 'put ''LCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEdIZT1bImxhYmVsIiwiW2NscklucHV0UHJlZml4XSIsIltjbHJJbnB1dF0iLCJbY2xySW5wdXRTdWZmaXhdIiwiY2xyLWNvbnRyb2wtaGVscGVy''@;'; put 'put ''IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gJEhlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIEtIZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIHFIZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDcp''@;'; put 'put ''fWZ1bmN0aW9uIFhIZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIEpIZShjLGwpezEmYyYmWXIoMCw1LFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBRSGUoYyxsKXsxJmMmJllyKDAsNixbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1''@;'; put 'put ''bmN0aW9uIGxOZShjLGwpezEmYyYmWXIoMCl9Y29uc3QgY05lPVsidGFiQ29udGVudFByb2plY3RlZFJlZiJdO2Z1bmN0aW9uIHVOZShjLGwpe2lmKDEmYyYmKGRlKDAsInNlY3Rpb24iLDEpLFlyKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO1RyKCJhY3RpdmUiLGEuYWN0aXZlKSxNZSgi''@;'; put 'put ''aWQiLGEudGFiQ29udGVudElkKSgiaGlkZGVuIiwhYS5hY3RpdmUpLGhyKCJhcmlhLWxhYmVsbGVkYnkiLGEuYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWhpZGRlbiIsIWEuYWN0aXZlKX19Y29uc3QgZE5lPVsidGFiQ29udGVudFZpZXdDb250YWluZXIiXSxoTmU9W1tbImNsci10YWJzLWFjdGlv''@;'; put 'put ''bnMiXV1dLGZOZT1bImNsci10YWJzLWFjdGlvbnMiXTtmdW5jdGlvbiBwTmUoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJsaSIsNSksRmwoMiw2KSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgyKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYS50ZW1wbGF0ZVJl''@;'; put 'put ''ZkNvbnRhaW5lci50ZW1wbGF0ZSl9fWZ1bmN0aW9uIGdOZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEscE5lLDMsMSwibmctY29udGFpbmVyIiw0KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgpO2ZlKCksTWUoIm5nSWYiLGEudGFic0lkPT09ZC50YWJzSWQmJiFhLmlu''@;'; put 'put ''T3ZlcmZsb3cpfX1mdW5jdGlvbiBtTmUoYyxsKXsxJmMmJkZsKDAsNiksMiZjJiZNZSgibmdUZW1wbGF0ZU91dGxldCIsUmUoKS4kaW1wbGljaXQudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfWZ1bmN0aW9uIHZOZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsbU5lLDEsMSwibmct''@;'; put 'put ''Y29udGFpbmVyIiwxMyksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMyk7ZmUoKSxNZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24gYk5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRhYi1vdmVyZmxv''@;'; put 'put ''dy1jb250ZW50IiwxMiksRnQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLCQzKSgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpLFJlKCk7Y29uc3QgZj1oYSg0KTtyZXR1cm4gQ3QoUmUoKS5jbG9zZU9uT3V0''@;'; put 'put ''c2lkZUNsaWNrKGgsZikpfSwhMSwkMykoImZvY3Vzb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuY2xvc2VPbkZvY3VzT3V0KGgpKX0pLGd0KDEsdk5lLDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0Zvck9m''@;'; put 'put ''IixhLnRhYkxpbmtEaXJlY3RpdmVzKX19ZnVuY3Rpb24geU5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2Iiw3KSgyLCJsaSIsOCkoMywiYnV0dG9uIiw5LDEpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuX21vdXNlZG93''@;'; put 'put ''bj0hMCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub3Blbk92ZXJmbG93T25Gb2N1cygpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50b2dnbGVPdmVyZmxvd09uQ2xpY2soKSl9KSxHdCg1LCJjZHMtaWNvbiIsMTApLGhlKCko''@;'; put 'put ''KSxndCg2LGJOZSwyLDEsImNsci10YWItb3ZlcmZsb3ctY29udGVudCIsMTEpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLFRyKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksZmUoMiksVHIoImFjdGl2ZSIsYS5hY3RpdmVUYWJJbk92ZXJmbG93KSgib3BlbiIsYS50''@;'; put 'put ''b2dnbGVTZXJ2aWNlLm9wZW4pLGhyKCJ0YWJpbmRleCIsYS5hY3RpdmVUYWJJbk92ZXJmbG93JiYhYS50b2dnbGVTZXJ2aWNlLm9wZW4/MDotMSkoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxmZSgyKSxocigic3RhdHVzIixhLnRvZ2dsZVNlcnZpY2Uub3Blbj8iaW5mbyI6''@;'; put 'put ''bnVsbCkoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxmZSgpLE1lKCJuZ0lmIixhLnRvZ2dsZVNlcnZpY2Uub3Blbil9fWZ1bmN0aW9uIF9OZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3''@;'; put 'put ''dChhKSxDdChSZSgpLnRvZ2dsZUJ5QnV0dG9uKCkpfSksR3QoMSwiY2RzLWljb24iLDQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7VHIoIm9uLWNvbGxhcHNlIixhLmNvbGxhcHNlZCksaHIoImFyaWEtY29udHJvbHMiLGEuY29udGVudElkKSgiYXJpYS1leHBhbmRlZCIsYS5hcmlhRXhw''@;'; put 'put ''YW5kZWQpKCJhcmlhLWxhYmVsIixhLnRvZ2dsZUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSksZmUoKSxocigiZGlyZWN0aW9uIixhLmNvbGxhcHNlZD8icmlnaHQiOiJsZWZ0Iil9fWZ1bmN0aW9uIHdOZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl''@;'; put 'put ''KDAsImJ1dHRvbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmNvbGxhcHNlZD0hMSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2hyKCJhcmlhLWNvbnRyb2xzIixhLmNvbnRlbnRJZCkoImFyaWEtbGFiZWwiLGEudG9nZ2xlTGFiZWx8fGEuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9nZ2xlKX19Y29uc3QgTU5lPVsiY2xyVmVydGljYWxOYXZMaW5rIiwiIl0seE5lPVtbWyIiLCJjbHJWZXJ0aWNhbE5hdkljb24iLCIiXV0sIioiXSxFTmU9WyJbY2xyVmVydGljYWxOYXZJY29uXSIsIioiXTtmdW5jdGlvbiBUTmUoYyxsKXtp''@;'; put 'put ''ZigxJmMmJihkZSgwLCJ0aCIsNCkoMSwic3BhbiIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksaHIoImFyaWEtbGFiZWwiLGEuZGF5KSxmZSgpLHdyKGEubmFycm93KX19ZnVuY3Rpb24gQU5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwidGQi''@;'; put 'put ''LDcpKDEsImNsci1kYXkiLDgpLEZ0KCJzZWxlY3REYXkiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgyKS5zZXRTZWxlY3RlZERheShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoImNsckRheVZpZXciLGEpfX1mdW5jdGlvbiBrTmUoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJ0ciIsNSksZ3QoMSxBTmUsMiwxLCJ0ZCIsNiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLGEpfX1mdW5jdGlvbiBETmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoUmUoKS5jaGFuZ2VNb250aChoKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4O3JldHVybiBDdChSZSgpLm9uSG92ZXIoaCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9UmUoKTtUcigiaXMtc2VsZWN0ZWQiLGguaXNTZWxlY3RlZChkKSkoImlzLXN0YXJ0LXJhbmdlIixoLmdldElzUmFuZ2VTdGFydE1vbnRoKGQpKSgiaXMtZW5kLXJhbmdlIixoLmdldElzUmFuZ2VFbmRNb250aChkKSkoImluLXJhbmdlIixoLmlzSW5S''@;'; put 'put ''YW5nZShkKSkoImlzLXRvZGF5IixoLmNhbGVuZGFyWWVhcj09PWguY3VycmVudENhbGVuZGFyWWVhciYmZD09PWguY3VycmVudENhbGVuZGFyTW9udGgpLGhyKCJ0YWJpbmRleCIsaC5nZXRUYWJJbmRleChkKSksZmUoKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBJTmUoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY2hhbmdlWWVhcihoKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4g''@;'; put 'put ''Q3QoUmUoKS5vbkhvdmVyKGgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtUcigiaXMtc2VsZWN0ZWQiLGE9PT1kLnNlbGVjdGVkU3RhcnRZZWFyfHxhPT09ZC5zZWxlY3RlZEVuZFllYXIpKCJpcy1zdGFydC1yYW5nZSIsZC5nZXRJc1JhbmdlU3Rh''@;'; put 'put ''cnRZZWFyKGEpKSgiaXMtZW5kLXJhbmdlIixkLmdldElzUmFuZ2VFbmRZZWFyKGEpKSgiaW4tcmFuZ2UiLGQuaXNJblJhbmdlKGEpKSgiaXMtdG9kYXkiLGQuaXNDdXJyZW50Q2FsZW5kYXJZZWFyKGEpKSxocigidGFiaW5kZXgiLGQuZ2V0VGFiSW5kZXgoYSkpLGZlKCksRHIoIiAiLGEsIiAi''@;'; put 'put ''KX19ZnVuY3Rpb24gUk5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYSIsNiksRnQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5vblJhbmdlT3B0aW9uU2VsZWN0KGgpKX0pKCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikub25SYW5nZU9wdGlvblNlbGVjdChoKSl9KSxMZSgyKSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksaHIoImFyaWEtbGFiZWwiLG51bGw9PWE/bnVsbDphLmxhYmVsKSxmZSgp''@;'; put 'put ''LERyKCIgIixhLmxhYmVsLCIgIil9fWZ1bmN0aW9uIExOZShjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gT05lKGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiY2xyLXZlcnRpY2FsLW5hdiIsMiksZ3QoMixSTmUsMywyLCJuZy1jb250YWluZXIiLDMpLGhlKCksZGUoMywiZGl2Iiw0KSxndCg0''@;'; put 'put ''LExOZSwxLDAsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDIpO2ZlKDIpLE1lKCJuZ0Zvck9mIixhLmRhdGVSYW5nZU9wdGlvbnMpLGZlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gUE5lKGMsbCl7MSZjJiZHdCgwLCJj''@;'; put 'put ''bHItbW9udGhwaWNrZXIiKX1mdW5jdGlvbiBGTmUoYyxsKXsxJmMmJkd0KDAsImNsci15ZWFycGlja2VyIil9ZnVuY3Rpb24gSE5lKGMsbCl7MSZjJiZHdCgwLCJjbHItZGF5cGlja2VyIil9ZnVuY3Rpb24gTk5lKGMsbCl7MSZjJiZHdCgwLCJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIil9ZnVu''@;'; put 'put ''Y3Rpb24gVk5lKGMsbCl7aWYoMSZjJiZndCgwLFBOZSwxLDAsImNsci1tb250aHBpY2tlciIsNykoMSxGTmUsMSwwLCJjbHIteWVhcnBpY2tlciIsNykoMixITmUsMSwwLCJjbHItZGF5cGlja2VyIiw3KSgzLE5OZSwxLDAsImNsci1kYXRlcGlja2VyLWFjdGlvbnMiLDcpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1SZSgpO01lKCJuZ0lmIixhLmlzTW9udGhWaWV3KSxmZSgpLE1lKCJuZ0lmIixhLmlzWWVhclZpZXcpLGZlKCksTWUoIm5nSWYiLGEuaXNEYXlWaWV3KSxmZSgpLE1lKCJuZ0lmIixhLmhhc0FjdGlvbkJ1dHRvbnMpfX1jb25zdCBCTmU9WyJhY3Rpb25CdXR0b24iXSxqTmU9W1tbImxhYmVs''@;'; put 'put ''Il1dLFtbIiIsImNsckRhdGUiLCIiXV0sW1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLFtbIiIsImNsckVuZERhdGUiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLHpOZT1bImxhYmVsIiwiW2Ns''@;'; put 'put ''ckRhdGVdIiwiW2NsclN0YXJ0RGF0ZV0iLCJbY2xyRW5kRGF0ZV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBVTmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gWk5lKGMsbCl7MSZjJiYo''@;'; put 'put ''c2koMCksWXIoMSwyKSxkZSgyLCJzcGFuIiw5KSxMZSgzLCItIiksaGUoKSxZcig0LDMpLGxpKCkpfWZ1bmN0aW9uIFdOZShjLGwpezEmYyYmKGRlKDAsImJ1dHRvbiIsMTAsMCksR3QoMiwiY2RzLWljb24iLDExKSxoZSgpKSwyJmMmJk1lKCJkaXNhYmxlZCIsUmUoKS5pc0lucHV0RGF0ZURp''@;'; put 'put ''c2FibGVkKX1mdW5jdGlvbiBZTmUoYyxsKXsxJmMmJkd0KDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsMTIpfWZ1bmN0aW9uIEdOZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEzKX1mdW5jdGlvbiAkTmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxNCl9ZnVuY3Rpb24g''@;'; put 'put ''S05lKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gcU5lKGMsbCl7MSZjJiZZcigwLDUsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIFhOZShjLGwpezEmYyYmWXIoMCw2LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgdFZlPVtb''@;'; put 'put ''WyJsYWJlbCJdXSxbWyIiLCJjbHJOdW1iZXJJbnB1dCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sblZlPVsibGFiZWwiLCJbY2xyTnVtYmVySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVy''@;'; put 'put ''IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gclZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGlWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDExKX1mdW5jdGlvbiBhVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwx''@;'; put 'put ''Mil9ZnVuY3Rpb24gb1ZlKGMsbCl7MSZjJiZZcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gc1ZlKGMsbCl7MSZjJiZZcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIGxWZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9''@;'; put 'put ''Y29uc3QgY1ZlPVtbWyIiLCJjbHJSYWRpbyIsIiJdXSxbWyJsYWJlbCJdXV0sdVZlPVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gZFZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWNvbnN0IGhWZT1bW1sibGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNv''@;'; put 'put ''bnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGZWZT1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtm''@;'; put 'put ''dW5jdGlvbiBwVmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gZ1ZlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzKSxZcigxLDIpLGhlKCkpfWZ1bmN0aW9uIG1WZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIHZWZShjLGwpezEmYyYmR3QoMCwiY2RzLWlj''@;'; put 'put ''b24iLDcpfWZ1bmN0aW9uIGJWZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiB5VmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1bmN0aW9uIF9WZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMyksZ3QoMSxtVmUs''@;'; put 'put ''MSwwLCJjZHMtaWNvbiIsNCkoMix2VmUsMSwwLCJjZHMtaWNvbiIsNSkoMyxiVmUsMSwwLCJuZy1jb250ZW50IiwwKSg0LHlWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCksTWUoIm5nSWYiLGEu''@;'; put 'put ''c2hvd1ZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixhLnNob3dWYWxpZCl9fWNvbnN0IHdWZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyU2VsZWN0IiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxb''@;'; put 'put ''WyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxDVmU9WyJsYWJlbCIsIltjbHJTZWxlY3RdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gU1ZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIE1W''@;'; put 'put ''ZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIHhWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIEVWZShjLGwpezEmYyYmWXIoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIFRWZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYi''@;'; put 'put ''LCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBBVmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IGtWZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyVGV4dGFyZWEiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1d''@;'; put 'put ''LFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLERWZT1bImxhYmVsIiwiW2NsclRleHRhcmVhXSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIElWZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlv''@;'; put 'put ''biBSVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiBMVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBPVmUoYyxsKXsxJmMmJllyKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBQVmUoYyxsKXsxJmMmJllyKDAsMyxbIipu''@;'; put 'put ''Z0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gRlZlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBIVmU9WyJhbmNob3IiXTtmdW5jdGlvbiBOVmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSkoMiwiYnV0dG9uIiw2KSxHdCgz''@;'; put 'put ''LCJjZHMtaWNvbiIsNyksaGUoKSgpLFlyKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO01lKCJpZCIsYS5wb3BvdmVySWQpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbCksZmUoMyksaHIoInRpdGxlIixhLmNvbW1v''@;'; put 'put ''blN0cmluZ3Mua2V5cy5jbG9zZSl9fWNvbnN0IFZWZT1bImlucHV0X2xvdyJdLEJWZT1bImlucHV0Il0salZlPVsiY29sdW1uUG9ydGFsIl07ZnVuY3Rpb24gelZlKGMsbCl7MSZjJiZZcigwKX1jb25zdCBVVmU9WyJyZXNpemVUcmFja2VyIl0sWlZlPVsiY29sdW1uSGFuZGxlIl0sV1ZlPVtb''@;'; put 'put ''WyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGctc3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLCIqIl0sWVZlPVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0cmluZy1maWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiBHVmUoYyxsKXsx''@;'; put 'put ''JmMmJkZsKDApfWZ1bmN0aW9uICRWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEwKSwyJmMmJmhyKCJkaXJlY3Rpb24iLFJlKDIpLnNvcnREaXJlY3Rpb24pfWZ1bmN0aW9uIEtWZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnNvcnQoKSl9KSxndCgxLEdWZSwxLDAsIm5nLWNvbnRhaW5lciIsOCkoMiwkVmUsMSwxLCJjZHMtaWNvbiIsOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDYpO2ZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLGZlKCksTWUo''@;'; put 'put ''Im5nSWYiLGEuc29ydERpcmVjdGlvbil9fWZ1bmN0aW9uIHFWZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1zdHJpbmctZmlsdGVyIiwxMSksZ2koImNsckZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYu''@;'; put 'put ''ZmlsdGVyVmFsdWUsaCl8fChmLmZpbHRlclZhbHVlPWgpLEN0KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtNZSgiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLGEuZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIpKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5yZWdpc3RlcmVkKSxwaSgiY2xyRmls''@;'; put 'put ''dGVyVmFsdWUiLGEuZmlsdGVyVmFsdWUpfX1mdW5jdGlvbiBYVmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDEyKSxnaSgiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWko''@;'; put 'put ''Zi5maWx0ZXJWYWx1ZSxoKXx8KGYuZmlsdGVyVmFsdWU9aCksQ3QoaCl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO01lKCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsYS5maWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIixhLmZpbHRlck51''@;'; put 'put ''bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1lcmljRmlsdGVyIixhLnJlZ2lzdGVyZWQpLHBpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIEpWZShjLGwpezEmYyYmWXIoMCwxKX1mdW5jdGlvbiBRVmUoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIGVCZShj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDEzKSxndCgxLFFWZSwxLDAsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtSZSgpO2NvbnN0IGE9aGEoNik7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYSl9fWZ1bmN0aW9uIHRCZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNvbHVtbi1z''@;'; put 'put ''ZXBhcmF0b3IiKX1mdW5jdGlvbiBuQmUoYyxsKXsxJmMmJkd0KDAsImRpdiIsNCl9ZnVuY3Rpb24gckJlKGMsbCl7MSZjJiZZcigwLDAsWyIqbmdJZiIsImVtcHR5RGF0YWdyaWQiXSl9Y29uc3QgaUJlPVsiY2VsbFBvcnRhbCJdO2Z1bmN0aW9uIGFCZShjLGwpezEmYyYmWXIoMCl9Y29uc3Qg''@;'; put 'put ''b0JlPVsicm93UG9ydGFsIl07ZnVuY3Rpb24gc0JlKGMsbCl7MSZjJiZZcigwKX1jb25zdCBsQmU9WyJkZXRhaWxCdXR0b24iXSxjQmU9WyJzdGlja3lDZWxscyJdLHVCZT1bInNjcm9sbGFibGVDZWxscyJdLGRCZT1bImNhbGN1bGF0ZWRDZWxscyJdLGhCZT1bW1siY2xyLWRnLXJvdy1kZXRh''@;'; put 'put ''aWwiXV0sW1siY2xyLWRnLWNlbGwiXV0sW1siY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdXV0sZkJlPVsiY2xyLWRnLXJvdy1kZXRhaWwiLCJjbHItZGctY2VsbCIsImNsci1kZy1hY3Rpb24tb3ZlcmZsb3ciXSxwQmU9Yz0+KHsiaXMtcmVwbGFjZWQiOmN9KSx3MWU9Yz0+KHsiY2xyLWZvcm0t''@;'; put 'put ''Y29udHJvbC1kaXNhYmxlZCI6Y30pO2Z1bmN0aW9uIGdCZShjLGwpe31mdW5jdGlvbiBtQmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxndCgxLGdCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpLGQ9aGEo''@;'; put 'put ''Nik7TWUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIHZCZShjLGwpe31mdW5jdGlvbiBiQmUoYyxsKXsxJmMmJmd0KDAsdkJlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMmJihSZSgy''@;'; put 'put ''KSxNZSgibmdUZW1wbGF0ZU91dGxldCIsaGEoNikpKX1mdW5jdGlvbiB5QmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDkpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmNsZWFyUmFuZ2VzKGgpKX0pKCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBDdChmLnNlbGVjdFJvdyghZi5zZWxlY3RlZCxoKSl9KSxndCgxLG1CZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNykoMixiQmUsMSwxLG51bGwsOCksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lm''@;'; put 'put ''IixhLmV4cGFuZC5leHBhbmRhYmxlKSxmZSgpLE1lKCJuZ0lmIiwhYS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIF9CZShjLGwpe31mdW5jdGlvbiB3QmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxndCgxLF9CZSwwLDAsIm5nLXRlbXBs''@;'; put 'put ''YXRlIiwxMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCksZD1oYSg2KTtNZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gQ0JlKGMsbCl7fWZ1bmN0aW9uIFNCZShjLGwpezEmYyYmZ3Qo''@;'; put 'put ''MCxDQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKFJlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGhhKDYpKSl9ZnVuY3Rpb24gTUJlKGMsbCl7MSZjJiZZcigwKX1mdW5jdGlvbiB4QmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgy''@;'; put 'put ''LCJpbnB1dCIsMjMpLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikudG9nZ2xlKGgpKX0pLGhlKCksZGUoMywibGFiZWwiLDI0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgyKS5jbGVhclJhbmdlcyhoKSl9KSxk''@;'; put 'put ''ZSg0LCJzcGFuIiwyNSksTGUoNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7TWUoIm5nQ2xhc3MiLHNwKDcsdzFlLCFhLmNsckRnU2VsZWN0YWJsZSkpLGZlKDIpLE1lKCJuZ01vZGVsIixhLnNlbGVjdGVkKSgiaWQiLGEuY2hlY2tib3hJZCkoImRpc2FibGVkIiwhYS5jbHJE''@;'; put 'put ''Z1NlbGVjdGFibGV8fG51bGwpLGhyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZlKCksTWUoImZvciIsYS5jaGVja2JveElkKSxmZSgyKSx3cihhLmNsckRnUm93U2VsZWN0aW9uTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9u''@;'; put 'put ''IEVCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjEpKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDI2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4gbWkoZi5zZWxlY3Rpb24uY3VycmVudFNp''@;'; put 'put ''bmdsZSxoKXx8KGYuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9aCksQ3QoaCl9KSxoZSgpLGRlKDMsImxhYmVsIiwyNykoNCwic3BhbiIsMjUpLExlKDUpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO01lKCJuZ0NsYXNzIixzcCgxMCx3MWUsIWEuY2xyRGdTZWxlY3RhYmxlKSks''@;'; put 'put ''ZmUoMiksTWUoImlkIixhLnJhZGlvSWQpKCJuYW1lIixhLnNlbGVjdGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIixhLml0ZW0pLHBpKCJuZ01vZGVsIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlKSxNZSgiY2hlY2tlZCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT09PWEuaXRlbSkoImRp''@;'; put 'put ''c2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGhyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZlKCksTWUoImZvciIsYS5yYWRpb0lkKSxmZSgyKSx3cihhLmNsckRnUm93U2VsZWN0aW9uTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVj''@;'; put 'put ''dCl9fWZ1bmN0aW9uIFRCZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMjgpLFlyKDEsMiksaGUoKSl9ZnVuY3Rpb24gQUJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS50b2dnbGVF''@;'; put 'put ''eHBhbmQoKSl9KSxHdCgxLCJjZHMtaWNvbiIsMzMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDQpO2hyKCJhcmlhLWV4cGFuZGVkIixhLmV4cGFuZC5leHBhbmRlZCkoImFyaWEtbGFiZWwiLGEuZXhwYW5kLmV4cGFuZGVkP2EuY2xyRGdEZXRhaWxDbG9zZUxhYmVsOmEuY2xyRGdEZXRhaWxP''@;'; put 'put ''cGVuTGFiZWwpKCJhcmlhLWNvbnRyb2xzIixhLmV4cGFuZC5oYXNFeHBhbmRUZW1wbGF0ZSYmIWEuZXhwYW5kLmV4cGFuZGVkP251bGw6YS5leHBhbmRhYmxlSWQpLGZlKCksaHIoImRpcmVjdGlvbiIsYS5leHBhbmQuZXhwYW5kZWQ/ImRvd24iOiJyaWdodCIpKCJ0aXRsZSIsYS5leHBhbmQu''@;'; put 'put ''ZXhwYW5kZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuY29sbGFwc2U6YS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kKX19ZnVuY3Rpb24ga0JlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXNwaW5uZXIiLDM0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoKSx3cihhLmNvbW1v''@;'; put 'put ''blN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gREJlKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxBQmUsMiw1LCJidXR0b24iLDMwKSgyLGtCZSwyLDEsImNsci1zcGlubmVyIiwzMSksbGkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLCFhLmV4cGFuZC5sb2Fk''@;'; put 'put ''aW5nKSxmZSgpLE1lKCJuZ0lmIixhLmV4cGFuZC5sb2FkaW5nKX19ZnVuY3Rpb24gSUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyOSksZ3QoMSxEQmUsMywyLCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIixhLmV4cGFuZC5leHBh''@;'; put 'put ''bmRhYmxlKX19ZnVuY3Rpb24gUkJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwzNyw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSgxKSxmPVJlKDMpO3JldHVybiBDdChmLmRldGFpbFNlcnZpY2UudG9nZ2xlKGYuaXRlbSxoKSl9KSxH''@;'; put 'put ''dCgyLCJjZHMtaWNvbiIsMzgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMpO1RyKCJpcy1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLE1lKCJkaXNhYmxlZCIsYS5kZXRhaWxEaXNhYmxlZCksaHIoImFyaWEtbGFiZWwiLGEuZGV0YWlsU2VydmljZS5pc1Jvd09w''@;'; put 'put ''ZW4oYS5pdGVtKT9hLmNsckRnRGV0YWlsQ2xvc2VMYWJlbDphLmNsckRnRGV0YWlsT3BlbkxhYmVsKSgiYXJpYS1leHBhbmRlZCIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pKSgiYXJpYS1jb250cm9scyIsYS5kZXRhaWxTZXJ2aWNlLmlkKSxmZSgyKSxocigiZGlyZWN0aW9u''@;'; put 'put ''IixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/ImxlZnQiOiJyaWdodCIpKCJ0aXRsZSIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pP2EuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlOmEuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW4pfX1mdW5jdGlvbiBMQmUoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJkaXYiLDM1KSxndCgxLFJCZSwzLDgsImJ1dHRvbiIsMzYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5kZXRhaWxIaWRkZW4pfX1mdW5jdGlvbiBPQmUoYyxsKXt9ZnVuY3Rpb24gUEJlKGMsbCl7MSZjJiZndCgwLE9CZSwwLDAs''@;'; put 'put ''Im5nLXRlbXBsYXRlIiwxMSksMiZjJiYoUmUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGhhKDQpKSl9ZnVuY3Rpb24gRkJlKGMsbCl7fWZ1bmN0aW9uIEhCZShjLGwpezEmYyYmZ3QoMCxGQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKFJlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0''@;'; put 'put ''IixoYSg0KSkpfWZ1bmN0aW9uIE5CZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNlbGwiLDM5KX1mdW5jdGlvbiBWQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxzaSgyLG51bGwsMyksZ3QoNCx4QmUsNiw5LCJkaXYiLDE0KSg1LEVCZSw2LDEyLCJkaXYiLDE0''@;'; put 'put ''KSg2LFRCZSwyLDAsImRpdiIsMTUpKDcsSUJlLDIsMSwiZGl2IiwxNikoOCxMQmUsMiwxLCJkaXYiLDE3KSxsaSgpLGhlKCksZGUoOSwiZGl2IiwxOCkoMTAsImRpdiIsMTkpLFlyKDExLDEpLEZsKDEyLG51bGwsNCksaGUoKSxndCgxNCxQQmUsMSwxLG51bGwsOCkoMTUsSEJlLDEsMSxudWxs''@;'; put 'put ''LDgpLGhlKCksZ3QoMTYsTkJlLDEsMCwiY2xyLWRnLWNlbGwiLDIwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtUcigiZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLE1lKCJpZCIsYS5pZCksZmUoNCksTWUoIm5nSWYiLGEuc2Vs''@;'; put 'put ''ZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9UWVBFLk11bHRpKSxmZSgpLE1lKCJuZ0lmIixhLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YS5TRUxFQ1RJT05fVFlQRS5TaW5nbGUpLGZlKCksTWUoIm5nSWYiLGEucm93QWN0aW9uU2VydmljZS5oYXNBY3Rpb25hYmxlUm93''@;'; put 'put ''KSxmZSgpLE1lKCJuZ0lmIixhLmdsb2JhbEV4cGFuZGFibGUuaGFzRXhwYW5kYWJsZVJvdyksZmUoKSxNZSgibmdJZiIsYS5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLGZlKCksTWUoIm5nQ2xhc3MiLHNwKDEyLHBCZSxhLnJlcGxhY2VkJiZhLmV4cGFuZGVkKSksZmUoNSksTWUoIm5nSWYiLGEu''@;'; put 'put ''cmVwbGFjZWQmJiFhLmV4cGFuZC5sb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGEuc2tlbGV0b25Mb2FkaW5nKX19Y29uc3QgQkJlPVsiZGF0YWdyaWQiXSxqQmU9WyJkYXRhZ3JpZFRhYmxlIl0sekJlPVsic2Ny''@;'; put 'put ''b2xsYWJsZUNvbHVtbnMiXSxVQmU9WyJwcm9qZWN0ZWREaXNwbGF5Q29sdW1ucyJdLFpCZT1bInByb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucyJdLFdCZT1bImRpc3BsYXllZFJvd3MiXSxZQmU9WyJjYWxjdWxhdGlvblJvd3MiXSxHQmU9WyJzZWxlY3RBbGxDaGVja2JveCJdLCRCZT1bW1si''@;'; put 'put ''Y2xyLWRnLWFjdGlvbi1iYXIiXV0sW1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLFtbImNsci1kZy1mb290ZXIiXV0sW1siIiwiY2xySWZEZXRhaWwiLCIiXSxbImNsci1kZy1kZXRhaWwiXV1dLEtCZT1bImNsci1kZy1hY3Rpb24tYmFyIiwiY2xyLWRnLXBsYWNlaG9sZGVyIiwiY2xyLWRnLWZv''@;'; put 'put ''b3RlciIsIltjbHJJZkRldGFpbF0sY2xyLWRnLWRldGFpbCJdO2Z1bmN0aW9uIHFCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzApKDEsImlucHV0IiwzMSw2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4g''@;'; put 'put ''bWkoZi5hbGxTZWxlY3RlZCxoKXx8KGYuYWxsU2VsZWN0ZWQ9aCksQ3QoaCl9KSxoZSgpLGRlKDMsImxhYmVsIiwzMikoNCwic3BhbiIsMzMpLExlKDUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJpZCIsYS5zZWxlY3RBbGxJZCkscGkoIm5nTW9kZWwiLGEuYWxs''@;'; put 'put ''U2VsZWN0ZWQpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwpLGZlKDIpLE1lKCJmb3IiLGEuc2VsZWN0QWxsSWQpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCl9fWZ1bmN0aW9uIFhCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1M''@;'; put 'put ''bigpO2RlKDAsImRpdiIsMjcpLEZ0KCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50b2dnbGVBbGxTZWxlY3RlZChoKSl9KSxndCgxLHFCZSw2LDUsImRpdiIsMjgpLEd0KDIsImRpdiIsMjkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxN''@;'; put 'put ''ZSgibmdJZiIsIWEudmlydHVhbFNjcm9sbHx8YS5jdXN0b21TZWxlY3RBbGxFbmFibGVkKX19ZnVuY3Rpb24gSkJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNCkoMSwiZGl2IiwzMyksTGUoMiksaGUoKSxHdCgzLCJkaXYiLDI5KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSx3''@;'; put 'put ''cihhLmNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsKX19ZnVuY3Rpb24gUUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNSkoMSwiZGl2IiwzMyksTGUoMiksaGUoKSxHdCgzLCJkaXYiLDI5KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSx3cihhLmNsckRnU2luZ2xlQWN0''@;'; put 'put ''aW9uYWJsZUFyaWFMYWJlbCl9fWZ1bmN0aW9uIGVqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzYpKDEsImRpdiIsMzMpLExlKDIpLGhlKCksR3QoMywiZGl2IiwyOSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksd3IoYS5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsKX19''@;'; put 'put ''ZnVuY3Rpb24gdGplKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRnLXJvdyIsMzcpKDEsImNsci1kZy1jZWxsIiksR3QoMiwiY2xyLXNwaW5uZXIiLDM4KSxkZSgzLCJzcGFuIiksTGUoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDQpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''LmxvYWRpbmcpfX1mdW5jdGlvbiBuamUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IiwzNykoMSwiY2xyLWRnLWNlbGwiKSxHdCgyLCJjbHItc3Bpbm5lciIsMzgpLGRlKDMsInNwYW4iKSxMZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoNCksd3IoYS5jb21tb25T''@;'; put 'put ''dHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIHJqZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLXBsYWNlaG9sZGVyIil9ZnVuY3Rpb24gaWplKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzOSkoMSwiY2xyLXNwaW5uZXIiLDM4KSxMZSgyLCJMb2FkaW5nIiksaGUoKSgpKX1jb25zdCBvamU9''@;'; put 'put ''WyJhbGxTZWxlY3RlZCJdO2Z1bmN0aW9uIHNqZShjLGwpe31mdW5jdGlvbiBsamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJsaSIpKDEsImNsci1jaGVja2JveC13cmFwcGVyIikoMiwiaW5wdXQiLDEzKSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13''@;'; put 'put ''dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLnRvZ2dsZUNvbHVtblN0YXRlKGYsIWgpKX0pLGhlKCksZGUoMywibGFiZWwiKSxndCg0LHNqZSwwLDAsIm5nLXRlbXBsYXRlIiwxNCksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMik7ZmUoMiksTWUoImRp''@;'; put 'put ''c2FibGVkIixkLmhhc09ubHlPbmVWaXNpYmxlQ29sdW1uJiYhYS5oaWRkZW4pKCJuZ01vZGVsIiwhYS5oaWRkZW4pLGZlKDIpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRpdGxlVGVtcGxhdGVSZWYpfX1mdW5jdGlvbiBjamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYi''@;'; put 'put ''LDMpKDEsImRpdiIsNCkoMiwiZGl2Iiw1LDApLExlKDQpLGhlKCksZGUoNSwiaDIiKSxMZSg2KSxoZSgpLGRlKDcsImJ1dHRvbiIsNiksR3QoOCwiY2RzLWljb24iLDcpLGRlKDksInNwYW4iLDgpLExlKDEwKSxoZSgpKCkoKSxkZSgxMSwidWwiLDkpLGd0KDEyLGxqZSw1LDMsImxpIiwxMCks''@;'; put 'put ''aGUoKSxkZSgxMywiZGl2IiwxMSkoMTQsImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiIsMTIpLEZ0KCJjbHJBbGxTZWxlY3RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5hbGxDb2x1bW5zU2VsZWN0ZWQoKSl9KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtN''@;'; put 'put ''ZSgiaWQiLGEucG9wb3ZlcklkKSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuc2hvd0NvbHVtbnNNZW51RGVzY3JpcHRpb24pLGZlKDQpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmFsbENvbHVtbnNTZWxlY3RlZCksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMu''@;'; put 'put ''c2hvd0NvbHVtbnMpLGZlKCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxmZSgpLGhyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxmZSgyKSxNZSgibmdGb3JPZiIsYS5o''@;'; put 'put ''aWRlYWJsZUNvbHVtblN0YXRlcykoIm5nRm9yVHJhY2tCeSIsYS50cmFja0J5Rm4pfX1jb25zdCBDMWU9WyJ0aXRsZSJdLGRqZT1bW1siY2xyLWRnLXBhZ2luYXRpb24iXV0sIioiXSxoamU9WyJjbHItZGctcGFnaW5hdGlvbiIsIioiXTtmdW5jdGlvbiBmamUoYyxsKXtpZigxJmMmJihzaSgw''@;'; put 'put ''KSxkZSgxLCJkaXYiLDEpKDIsImNsci1jaGVja2JveC13cmFwcGVyIiwyKSxHdCgzLCJpbnB1dCIsMyksZGUoNCwibGFiZWwiKSxMZSg1KSxoZSgpLGRlKDYsInNwYW4iLDQpLExlKDcpLGhlKCkoKSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDUpLHdyKGEuc2VsZWN0aW9uLmN1cnJl''@;'; put 'put ''bnQubGVuZ3RoKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RlZFJvd3MpfX1mdW5jdGlvbiBwamUoYyxsKXsxJmMmJkd0KDAsImNsci1kZy1jb2x1bW4tdG9nZ2xlIil9ZnVuY3Rpb24gZ2plKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxwamUsMSwwLCJjbHItZGctY29s''@;'; put 'put ''dW1uLXRvZ2dsZSIsMCksZGUoMiwiZGl2Iiw1KSxZcigzLDEpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsYS5oYXNIaWRlYWJsZUNvbHVtbnMpfX1mdW5jdGlvbiBtamUoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDQpLExlKDEpLGhlKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgibmdWYWx1ZSIsYSksZmUoKSx3cihhKX19Y29uc3QgdmplPVsiY3VycmVudFBhZ2VJbnB1dCJdLGJqZT1bIioiLFtbImNsci1kZy1wYWdlLXNpemUiXV1dLHlqZT1bIioiLCJjbHItZGctcGFnZS1zaXplIl07ZnVuY3Rpb24gX2plKGMsbCl7MSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2Iiw2KSxZcigxLDEpLGhlKCkpfWZ1bmN0aW9uIHdqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImlucHV0IiwxOCwxKSxGdCgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLnVwZGF0ZUN1cnJlbnRQYWdlKGgpKX0pKCJi''@;'; put 'put ''bHVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykudmVyaWZ5Q3VycmVudFBhZ2UoaCkpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7TWUoInNpemUiLGEucGFnZS5sYXN0LnRvU3RyaW5nKCkubGVuZ3RoKSgidmFsdWUiLGEucGFnZS5jdXJyZW50KSxocigiYXJpYS1s''@;'; put 'put ''YWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuY3VycmVudFBhZ2UpfX1mdW5jdGlvbiBDamUoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksd3IoYS5wYWdlLmN1cnJlbnQpfX1mdW5jdGlvbiBTamUoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJkaXYiLDcpKDEsImJ1dHRvbiIsOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5wYWdlLmN1cnJlbnQ9MSl9KSxkZSgyLCJzcGFuIiw5KSxMZSgzKSxoZSgpLEd0KDQsImNkcy1pY29uIiwxMCksaGUoKSxkZSg1LCJidXR0b24i''@;'; put 'put ''LDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxkZSg2LCJzcGFuIiw5KSxMZSg3KSxoZSgpLEd0KDgsImNkcy1pY29uIiwxMiksaGUoKSxndCg5LHdqZSwyLDMsImlucHV0Iiwx''@;'; put 'put ''MykoMTAsQ2plLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMCxJYyksTGUoMTIsIiBceGEwL1x4YTAiKSxkZSgxMywic3BhbiIpLExlKDE0KSxoZSgpLGRlKDE1LCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gQ3QoaC5wYWdlLmN1''@;'; put 'put ''cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxkZSgxNiwic3BhbiIsOSksTGUoMTcpLGhlKCksR3QoMTgsImNkcy1pY29uIiwxNSksaGUoKSxkZSgxOSwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50''@;'; put 'put ''PWgucGFnZS5sYXN0KX0pLGRlKDIwLCJzcGFuIiw5KSxMZSgyMSksaGUoKSxHdCgyMiwiY2RzLWljb24iLDE3KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDExKSxkPVJlKDIpO2ZlKCksTWUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudDw9MSksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9u''@;'; put 'put ''U3RyaW5ncy5rZXlzLmZpcnN0UGFnZSksZmUoMiksd3IoZC5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxmZSgyKSxNZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgyKSx3cihk''@;'; put 'put ''LmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDIpLE1lKCJuZ0lmIiwhZC5kaXNhYmxlQ3VycmVudFBhZ2VJbnB1dCkoIm5nSWZFbHNlIixhKSxmZSg0KSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMudG90YWxQYWdlcyksZmUoKSx3cihkLnBhZ2UubGFz''@;'; put 'put ''dCksZmUoKSxNZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50Pj1kLnBhZ2UubGFzdCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksZmUoMiksTWUoImRpc2FibGVkIixkLnBhZ2Uu''@;'; put 'put ''Y3VycmVudD49ZC5wYWdlLmxhc3QpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5sYXN0UGFnZSksZmUoMiksd3IoZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2UpfX1mdW5jdGlvbiBNamUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLF9qZSwyLDAsImRpdiIsMyks''@;'; put 'put ''ZGUoMiwiZGl2Iiw0KSxZcigzKSxoZSgpLGd0KDQsU2plLDIzLDE2LCJkaXYiLDUpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLGEuX3BhZ2VTaXplQ29tcG9uZW50KSxmZSgzKSxNZSgibmdJZiIsYS5wYWdlLmxhc3Q+MSl9fWZ1bmN0aW9uIHhqZShjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsMTkpLExlKDIpLGhlKCksZGUoMywiZGl2Iiw3KSg0LCJidXR0b24iLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UuY3VycmVudC0xKX0pLGRl''@;'; put 'put ''KDUsInNwYW4iLDkpLExlKDYpLGhlKCksR3QoNywiY2RzLWljb24iLDEyKSxoZSgpLGRlKDgsInNwYW4iKSxMZSg5KSxoZSgpLGRlKDEwLCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2Uu''@;'; put 'put ''Y3VycmVudCsxKX0pLGRlKDExLCJzcGFuIiw5KSxMZSgxMiksaGUoKSxHdCgxMywiY2RzLWljb24iLDE1KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgyKSxWZigiICIsYS5wYWdlLmZpcnN0SXRlbSsxLCItIixhLnBhZ2UubGFzdEl0ZW0rMSwiIC8gIixhLnBhZ2UudG90''@;'; put 'put ''YWxJdGVtcywiICIpLGZlKDIpLE1lKCJkaXNhYmxlZCIsYS5wYWdlLmN1cnJlbnQ8PTEpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMyksd3IoYS5wYWdlLmN1''@;'; put 'put ''cnJlbnQpLGZlKCksTWUoImRpc2FibGVkIixhLnBhZ2UuY3VycmVudD49YS5wYWdlLmxhc3QpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpfX1jb25zdCBramU9W1tbImNsci1zdGFj''@;'; put 'put ''ay1sYWJlbCJdXSwiKiIsW1siY2xyLXN0YWNrLWJsb2NrIl1dXSxEamU9WyJjbHItc3RhY2stbGFiZWwiLCIqIiwiY2xyLXN0YWNrLWJsb2NrIl07ZnVuY3Rpb24gSWplKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNyksMiZjJiZocigiZGlyZWN0aW9uIixSZSgpLmNhcmV0RGlyZWN0aW9u''@;'; put 'put ''KX1mdW5jdGlvbiBSamUoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiw4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnN0YWNrVmlld0NoYW5nZWQpfX1mdW5jdGlvbiBMamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkpLFly''@;'; put 'put ''KDEsMiksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7X2QoImhlaWdodCIsYS5leHBhbmRlZD8iYXV0byI6MCksaHIoImlkIixhLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSgiYXJpYS1sYWJlbGxlZGJ5IixhLmxhYmVsbGVkQnlJZCl9fWNvbnN0IE9qZT1bW1siY2xyLXN0YWNrLWhlYWRlciJdXSwi''@;'; put 'put ''KiJdLFBqZT1bImNsci1zdGFjay1oZWFkZXIiLCIqIl07ZnVuY3Rpb24gTmplKGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBWamUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLE5qZSwxLDAsIm5nLWNvbnRhaW5lciIsMiksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMik7''@;'; put 'put ''ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGQuZ2V0Q29udGV4dChhKSl9fWZ1bmN0aW9uIEJqZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsVmplLDIsMiwibmctY29udGFp''@;'; put 'put ''bmVyIiwxKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0Zvck9mIiwobnVsbD09YS5wYXJlbnQ/bnVsbDphLnBhcmVudC5jaGlsZHJlbil8fGEuY2hpbGRyZW4pfX1jb25zdCBqamU9WyJjb250ZW50Q29udGFpbmVyIl0semplPVtbWyJjbHItdHJlZS1ub2RlIl1dLFtbIiIs''@;'; put 'put ''ImNscklmRXhwYW5kZWQiLCIiXV0sIioiXSxVamU9WyJjbHItdHJlZS1ub2RlIiwiW2NscklmRXhwYW5kZWRdIiwiKiJdO2Z1bmN0aW9uIFpqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChS''@;'; put 'put ''ZSgpLmV4cGFuZFNlcnZpY2UudG9nZ2xlKCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxHdCgxLCJjZHMtaWNvbiIsMTApLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7TWUoImRpc2FibGVkIixhLmRpc2FibGVkKSxmZSgp''@;'; put 'put ''LGhyKCJkaXJlY3Rpb24iLGEuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZG93biI6InJpZ2h0Iil9fWZ1bmN0aW9uIFdqZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMTEpLEd0KDEsInNwYW4iLDEyKSxoZSgpKX1mdW5jdGlvbiBZamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJk''@;'; put 'put ''aXYiLDEzKSgxLCJpbnB1dCIsMTQpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24oaC5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUo''@;'; put 'put ''KS5mb2N1c1RyZWVOb2RlKCkpfSksaGUoKSxkZSgyLCJsYWJlbCIsMTUpLEZsKDMsMTYpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKSxkPWhhKDcpO2ZlKCksTWUoImlkIixhLm5vZGVJZCsiLWNoZWNrIikoImRpc2FibGVkIixhLmRpc2FibGVkKSgiY2hlY2tlZCIsYS5fbW9kZWwuc2Vs''@;'; put 'put ''ZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5TRUxFQ1RFRCkoImluZGV0ZXJtaW5hdGUiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFURVMuSU5ERVRFUk1JTkFURSksZmUoKSxNZSgiZm9yIixhLm5vZGVJZCsiLWNoZWNrIiksZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1''@;'; put 'put ''bmN0aW9uIEdqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTcpLEZ0KCJtb3VzZXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxGbCgxLDE2KSxoZSgpfWlmKDImYyl7UmUoKTtjb25zdCBhPWhhKDcpO2ZlKCksTWUo''@;'; put 'put ''Im5nVGVtcGxhdGVPdXRsZXQiLGEpfX1mdW5jdGlvbiAkamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE5KSgxLCJzcGFuIiksTGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksRHIoIiAiLGEuYXJpYVNlbGVjdGVkP2EuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVk''@;'; put 'put ''VHJlZU5vZGU6YS5jb21tb25TdHJpbmdzLmtleXMudW5zZWxlY3RlZFRyZWVOb2RlLCIiKX19ZnVuY3Rpb24gS2plKGMsbCl7aWYoMSZjJiYoWXIoMCwyKSxndCgxLCRqZSwzLDEsImRpdiIsMTgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLmZlYXR1cmVzU2VydmljZS5z''@;'; put 'put ''ZWxlY3RhYmxlfHxhLmFyaWFTZWxlY3RlZCl9fWZ1bmN0aW9uIHFqZShjLGwpezEmYyYmR3QoMCwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMSksMiZjJiZNZSgiY2hpbGRyZW4iLFJlKCkuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi5yb290KX1mdW5jdGlvbiBYamUoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuY2xvc2UoKSl9KSxHdCgxLCJjZHMtaWNvbiIsNSksaGUoKX0yJmMmJmhyKCJhcmlhLWxhYmVsIixSZSgyKS5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCl9ZnVu''@;'; put 'put ''Y3Rpb24gSmplKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLFlyKDIpLGhlKCksZ3QoMyxYamUsMiwxLCJidXR0b24iLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO1RyKCJhbGVydC1zbSIsYS5pc1NtYWxsKSgiYWxlcnQtbGlnaHR3ZWlnaHQiLGEuaXNMaWdodHdl''@;'; put 'put ''aWdodCkoImFsZXJ0LWFwcC1sZXZlbCIsYS5pc0FwcExldmVsKSxNZSgibmdDbGFzcyIsYS5hbGVydENsYXNzKSxmZSgzKSxNZSgibmdJZiIsYS5jbG9zYWJsZSl9fWZ1bmN0aW9uIFFqZShjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDMpfWZ1bmN0aW9uIGV6ZShjLGwpe2lmKDEmYyYm''@;'; put 'put ''R3QoMCwiY2RzLWljb24iLDQpLDImYyl7Y29uc3QgYT1SZSgpO2hyKCJzaGFwZSIsYS5pY29uU2VydmljZS5hbGVydEljb25TaGFwZSkoImFyaWEtbGFiZWwiLGEuaWNvblNlcnZpY2UuYWxlcnRJY29uVGl0bGUpfX1jb25zdCB0emU9W1tbImNsci1hbGVydCJdXV0sbnplPVsiY2xyLWFsZXJ0''@;'; put 'put ''Il07ZnVuY3Rpb24gcnplKGMsbCl7MSZjJiZHdCgwLCJjbHItYWxlcnRzLXBhZ2VyIiwyKSwyJmMmJk1lKCJjbHJDdXJyZW50QWxlcnRJbmRleCIsUmUoKS5jdXJyZW50QWxlcnRJbmRleCl9Y29uc3QgaXplPVsiY2xySW50ZXJuYWxNb2RhbENvbnRlbnRUZW1wbGF0ZSJdLFMxZT1bImJvZHki''@;'; put 'put ''XSxhemU9W1tbIiIsOCwibGVhZGluZy1idXR0b24iXV0sW1siIiw4LCJtb2RhbC10aXRsZSJdXSxbWyIiLDgsIm1vZGFsLWJvZHkiXV0sW1siIiw4LCJtb2RhbC1mb290ZXIiXV1dLG96ZT1bIi5sZWFkaW5nLWJ1dHRvbiIsIi5tb2RhbC10aXRsZSIsIi5tb2RhbC1ib2R5IiwiLm1vZGFsLWZv''@;'; put 'put ''b3RlciJdO2Z1bmN0aW9uIHN6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykuY2xvc2UoKSl9KSxHdCgxLCJjZHMtaWNvbiIsMTUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMp''@;'; put 'put ''O2hyKCJhcmlhLWxhYmVsIixhLmNsb3NlQnV0dG9uQXJpYUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSl9fWZ1bmN0aW9uIGx6ZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOCkoMSwiZGl2Iiw5KSgyLCJkaXYiLDEwKSxZcigzKSxkZSg0LCJkaXYiLDExLDApLFlyKDYsMSks''@;'; put 'put ''aGUoKSxndCg3LHN6ZSwyLDEsImJ1dHRvbiIsMTIpLGhlKCksZGUoOCwiZGl2IiwxMywxKSxZcigxMCwyKSxoZSgpLFlyKDExLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDQpLE1lKCJpZCIsYS5tb2RhbElkKSxmZSgzKSxNZSgibmdJZiIsYS5jbG9zYWJsZSl9fWZ1bmN0aW9u''@;'; put 'put ''IGN6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSxGdCgiQGZhZGVNb3ZlLmRvbmUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLmZhZGVEb25lKGgpKX0pLGRlKDIsImRpdiIsNiksTGUoMyksaGUoKSxndCg0LGx6ZSwxMiwyLCJk''@;'; put 'put ''aXYiLDcpLGRlKDUsImRpdiIsNiksTGUoNiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7VHIoIm1vZGFsLWZ1bGwtc2NyZWVuIiwiZnVsbC1zY3JlZW4iPT1hLnNpemUpLGZlKCksVHIoIm1vZGFsLXNtIiwic20iPT1hLnNpemUpKCJtb2RhbC1sZyIsImxnIj09YS5zaXplKSgibW9k''@;'; put 'put ''YWwteGwiLCJ4bCI9PWEuc2l6ZSksTWUoImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwhMCkoIkBmYWRlTW92ZSIsYS5mYWRlTW92ZSksaHIoImFyaWEtaGlkZGVuIiwhYS5fb3BlbikoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5fHxhLm1vZGFsSWQpLGZlKDIpLHdyKGEuY29tbW9u''@;'; put 'put ''U3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudFN0YXJ0KSxmZSgpLE1lKCJuZ0lmIiwhYS5tb2RhbENvbnRlbnRUZW1wbGF0ZSkoIm5nSWZFbHNlIixhLm1vZGFsQ29udGVudFRlbXBsYXRlKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpfX1mdW5jdGlvbiB1''@;'; put 'put ''emUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuYmFja2Ryb3BDbGljaygpKX0pLGhlKCl9MiZjJiZNZSgiQGZhZGUiLHZvaWQgMCl9bGV0IEhsPSgoKT0+e2NsYXNzIGN7fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaWNvbiJdXX0pLGN9KSgpLHJzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj''@;'; put 'put ''Llx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjZHMtaWNvbiJdXX0pLGN9KSgpLEFzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2lt''@;'; put 'put ''cG9ydHM6W1JhXX0pLGN9KSgpO2NsYXNzIER4e312YXIgejE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ERUZBVUxUPTBdPSJERUZBVUxUIixjW2MuTE9BRElORz0xXT0iTE9BRElORyIsY1tjLlNVQ0NFU1M9Ml09IlNVQ0NFU1MiLGNbYy5FUlJPUj0zXT0iRVJST1IiLGN9KHoxfHx7fSk7bGV0''@;'; put 'put ''IGowPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5saXN0ZW5lcj1hLHRoaXMuX2xvYWRpbmdTdGF0ZT16MS5ERUZBVUxUfWdldCBsb2FkaW5nU3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ1N0YXRlfXNldCBsb2FkaW5nU3RhdGUoYSl7ITA9PT1hP2E9ejEuTE9BRElORzph''@;'; put 'put ''fHwoYT16MS5ERUZBVUxUKSxhIT09dGhpcy5fbG9hZGluZ1N0YXRlJiYodGhpcy5fbG9hZGluZ1N0YXRlPWEsdGhpcy5saXN0ZW5lciYmdGhpcy5saXN0ZW5lci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSkpfW5nT25EZXN0cm95KCl7dGhpcy5sb2FkaW5nU3RhdGU9ejEuREVGQVVMVH19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHgsOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJMb2FkaW5nIiwiIl1dLGlucHV0czp7bG9hZGluZ1N0YXRlOltObi5Ob25lLCJjbHJMb2FkaW5nIiwibG9hZGluZ1N0YXRl''@;'; put 'put ''Il19fSksY30pKCksVTE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kYWJsZT0wLHRoaXMuaGFzRXhwYW5kVGVtcGxhdGU9ITEsdGhpcy5fbG9hZGluZz0hMSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9leHBhbmRDaGFuZ2U9bmV3IFdufWdldCBsb2FkaW5nKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2xvYWRpbmd9c2V0IGxvYWRpbmcoYSl7KGE9ISFhKSE9PXRoaXMuX2xvYWRpbmcmJih0aGlzLl9sb2FkaW5nPWEpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7KGE9ISFhKSE9PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhw''@;'; put 'put ''YW5kZWQ9YSx0aGlzLl9leHBhbmRDaGFuZ2UubmV4dChhKSl9Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKCl7dGhpcy5leHBhbmRlZD0hdGhpcy5fZXhwYW5kZWR9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3RoaXMubG9h''@;'; put 'put ''ZGluZz1hPT09ejEuTE9BRElOR319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQnplPTA7ZnVuY3Rpb24gTXUoKXtyZXR1cm4iY2xyLWlkLSIrQnplKyt9''@;'; put 'put ''bGV0IE0xZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xyLXN0ZXAtZGVzY3JpcHRpb24iXV0saG9z''@;'; put 'put ''dFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0''@;'; put 'put ''aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKTtjb25zdCAkZj0iMC4ycyBlYXNlLWluLW91dCIsanplPVt5aCgic2tpcEluaXRpYWxSZW5kZXIiLFtpdSgiOmVudGVyIixbXSldKSx5aCgidG9nZ2xlIixbaXUoInZvaWQgPT4gKiIsW3VzKHtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OjB9''@;'; put 'put ''KSxNMCgkZix1cyh7aGVpZ2h0OiIqIn0pKV0pXSldLGtZPSh5aCgic2tpcEluaXRpYWxSZW5kZXIiLFtpdSgiOmVudGVyIixbXSldKSx5aCgidG9nZ2xlIixbaXUoInZvaWQgPT4gKiIsW3VzKHtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OjB9KSxNMCgkZix1cyh7aGVpZ2h0OiIqIn0pKV0pLGl1''@;'; put 'put ''KCIqID0+IHZvaWQiLFt1cyh7ZGlzcGxheToiYmxvY2sifSksTTAoJGYsdXMoe2hlaWdodDowLGRpc3BsYXk6Im5vbmUifSkpXSldKSx7b3BlbjoiT3BlbiIsY2xvc2U6IkNsb3NlIixzaG93OiJTaG93IixoaWRlOiJIaWRlIixhcHBseToiQXBwbHkiLGNhbmNlbDoiQ2FuY2VsIixleHBhbmQ6''@;'; put 'put ''IkV4cGFuZCIsY29sbGFwc2U6IkNvbGxhcHNlIixtb3JlOiJNb3JlIixzZWxlY3Q6IlNlbGVjdCIsc2VsZWN0QWxsOiJTZWxlY3QgQWxsIixwcmV2aW91czoiUHJldmlvdXMiLG5leHQ6Ik5leHQiLGN1cnJlbnQ6Ikp1bXAgdG8gY3VycmVudCIsaW5mbzoiSW5mbyIsc3VjY2VzczoiU3VjY2Vz''@;'; put 'put ''cyIsd2FybmluZzoiV2FybmluZyIsZGFuZ2VyOiJFcnJvciIsbmV1dHJhbDoiTmV1dHJhbCIsdW5rbm93bjoiVW5rbm93biIscm93QWN0aW9uczoiQXZhaWxhYmxlIGFjdGlvbnMiLHBpY2tDb2x1bW5zOiJNYW5hZ2UgQ29sdW1ucyIsc2hvd0NvbHVtbnM6IlNob3cgQ29sdW1ucyIsc29ydENv''@;'; put 'put ''bHVtbjoiU29ydCBDb2x1bW4iLGZpcnN0UGFnZToiRmlyc3QgUGFnZSIsbGFzdFBhZ2U6Ikxhc3QgUGFnZSIsbmV4dFBhZ2U6Ik5leHQgUGFnZSIscHJldmlvdXNQYWdlOiJQcmV2aW91cyBQYWdlIixjdXJyZW50UGFnZToiQ3VycmVudCBQYWdlIix0b3RhbFBhZ2VzOiJUb3RhbCBQYWdlcyIs''@;'; put 'put ''ZmlsdGVySXRlbXM6IkZpbHRlciBpdGVtcyIsbWluVmFsdWU6Ik1pbiB2YWx1ZSIsbWF4VmFsdWU6Ik1heCB2YWx1ZSIsbW9kYWxDb250ZW50U3RhcnQ6IkJlZ2lubmluZyBvZiBNb2RhbCBDb250ZW50Iixtb2RhbENvbnRlbnRFbmQ6IkVuZCBvZiBNb2RhbCBDb250ZW50IixzaWRlUGFuZWxQ''@;'; put 'put ''aW46IlBpbiBTaWRlIFBhbmVsIixzaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbjoiU2hvdyBvciBoaWRlIGNvbHVtbnMgbWVudSIsYWxsQ29sdW1uc1NlbGVjdGVkOiJBbGwgY29sdW1ucyBzZWxlY3RlZCIsc2lnbnBvc3RUb2dnbGU6IlNpZ25wb3N0IFRvZ2dsZSIsc2lnbnBvc3RDbG9zZToi''@;'; put 'put ''Q2xvc2UiLGxvYWRpbmc6IkxvYWRpbmciLGRldGFpbFBhbmVTdGFydDoiU3RhcnQgb2Ygcm93IGRldGFpbHMiLGRldGFpbFBhbmVFbmQ6IkVuZCBvZiByb3cgZGV0YWlscyIsc2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsOiJTaW5nbGUgc2VsZWN0aW9uIGhlYWRlciIsc2luZ2xlQWN0aW9uYWJs''@;'; put 'put ''ZUFyaWFMYWJlbDoiU2luZ2xlIGFjdGlvbmFibGUgaGVhZGVyIixkZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJUb2dnbGUgbW9yZSByb3cgY29udGVudCIsZGF0YWdyaWRGaWx0ZXJBcmlhTGFiZWw6IntDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRGaWx0ZXJMYWJlbDoie0NPTFVNTn0gZmls''@;'; put 'put ''dGVyIixkYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbDoiRmlsdGVyIGRpYWxvZyIsY29sdW1uU2VwYXJhdG9yQXJpYUxhYmVsOiJDb2x1bW4gcmVzaXplIGhhbmRsZSIsY29sdW1uU2VwYXJhdG9yRGVzY3JpcHRpb246IlVzZSBsZWZ0IG9yIHJpZ2h0IGtleSB0byByZXNpemUgdGhlIGNv''@;'; put 'put ''bHVtbiIsZnJvbUxhYmVsOiJGcm9tIix0b0xhYmVsOiJUbyIsYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgYWxlcnQiLGFsZXJ0TmV4dEFsZXJ0QXJpYUxhYmVsOiJOZXh0IGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixhbGVydFByZXZpb3VzQWxlcnRBcmlh''@;'; put 'put ''TGFiZWw6IlByZXZpb3VzIGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixkYXRlcGlja2VyRGlhbG9nTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hvb3NlRGF0ZUxhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJl''@;'; put 'put ''bDoiQ2hhbmdlIGRhdGUsIHtTRUxFQ1RFRF9EQVRFfSIsZGF0ZXBpY2tlclByZXZpb3VzTW9udGg6IlByZXZpb3VzIG1vbnRoIixkYXRlcGlja2VyQ3VycmVudE1vbnRoOiJDdXJyZW50IG1vbnRoIixkYXRlcGlja2VyTmV4dE1vbnRoOiJOZXh0IG1vbnRoIixkYXRlcGlja2VyUHJldmlvdXNE''@;'; put 'put ''ZWNhZGU6IlByZXZpb3VzIGRlY2FkZSIsZGF0ZXBpY2tlck5leHREZWNhZGU6Ik5leHQgZGVjYWRlIixkYXRlcGlja2VyQ3VycmVudERlY2FkZToiQ3VycmVudCBkZWNhZGUiLGRhdGVwaWNrZXJTZWxlY3RNb250aFRleHQ6IlNlbGVjdCBtb250aCwgdGhlIGN1cnJlbnQgbW9udGggaXMge0NB''@;'; put 'put ''TEVOREFSX01PTlRIfSIsZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0OiJTZWxlY3QgeWVhciwgdGhlIGN1cnJlbnQgeWVhciBpcyB7Q0FMRU5EQVJfWUVBUn0iLGRhdGVwaWNrZXJTZWxlY3RlZExhYmVsOiJ7RlVMTF9EQVRFfSAtIFNlbGVjdGVkIixzdGFja1ZpZXdDaGFuZ2VkOiJWYWx1ZSBj''@;'; put 'put ''aGFuZ2VkLiIscmVzcG9uc2l2ZU5hdlRvZ2dsZU9wZW46Ik9wZW4gbmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6IkNsb3NlIG5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjoiT3BlbiBuYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHJl''@;'; put 'put ''c3BvbnNpdmVOYXZPdmVyZmxvd0Nsb3NlOiJDbG9zZSBuYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHZlcnRpY2FsTmF2VG9nZ2xlOiJUb2dnbGUgdmVydGljYWwgbmF2aWdhdGlvbiIsdGltZWxpbmVTdGVwTm90U3RhcnRlZDoiTm90IHN0YXJ0ZWQiLHRpbWVsaW5lU3RlcEN1cnJlbnQ6IkN1''@;'; put 'put ''cnJlbnQiLHRpbWVsaW5lU3RlcFN1Y2Nlc3M6IkNvbXBsZXRlZCIsdGltZWxpbmVTdGVwRXJyb3I6IkVycm9yIix0aW1lbGluZVN0ZXBQcm9jZXNzaW5nOiJJbiBwcm9ncmVzcyIsY29tYm9ib3hEZWxldGU6IkRlbGV0ZSBzZWxlY3RlZCBvcHRpb24iLGNvbWJvYm94U2VhcmNoaW5nOidTZWFy''@;'; put 'put ''Y2hpbmcgZm9yIG1hdGNoZXMgZm9yICJ7SU5QVVR9IicsY29tYm9ib3hTZWxlY3Rpb246IlNlbGVjdGlvbiIsY29tYm9ib3hTZWxlY3RlZDoiU2VsZWN0ZWQiLGNvbWJvYm94Tm9SZXN1bHRzOiJObyByZXN1bHRzIixjb21ib2JveE9wZW46IlNob3cgb3B0aW9ucyIsZGF0YWdyaWRFeHBhbmRh''@;'; put 'put ''YmxlQmVnaW5uaW5nT2Y6IkJlZ2lubmluZyBvZiIsZGF0YWdyaWRFeHBhbmRhYmxlRW5kT2Y6IkVuZCBvZiIsZGF0YWdyaWRFeHBhbmRhYmxlUm93Q29udGVudDoiRXhwYW5kYWJsZSByb3cgY29udGVudCIsZGF0YWdyaWRFeHBhbmRhYmxlUm93c0hlbHBlclRleHQ6IlNjcmVlbiByZWFkZXIg''@;'; put 'put ''dGFibGUgY29tbWFuZHMgbWF5IG5vdCB3b3JrIGZvciB2aWV3aW5nIGV4cGFuZGVkIGNvbnRlbnQsIHBsZWFzZSB1c2UgeW91ciBzY3JlZW4gcmVhZGVyJ3MgYnJvd3NlIG1vZGUgdG8gcmVhZCB0aGUgY29udGVudCBleHBvc2VkIGJ5IHRoaXMgYnV0dG9uIix3aXphcmRTdGVwOiJTdGVwIix3''@;'; put 'put ''aXphcmRTdGVwU3VjY2VzczoiQ29tcGxldGVkIix3aXphcmRTdGVwRXJyb3I6IkVycm9yIix3aXphcmRTdGVwbmF2QXJpYUxhYmVsOiJXaXphcmQgc3RlcHMiLHBhc3N3b3JkSGlkZToiSGlkZSBwYXNzd29yZCBmb3Ige0xBQkVMfSIscGFzc3dvcmRTaG93OiJTaG93IHBhc3N3b3JkIGZvciB7''@;'; put 'put ''TEFCRUx9IixzZWxlY3RlZFJvd3M6IlNlbGVjdGVkIHJvd3MiLHN0ZXBDb21wbGV0ZToiU3RlcCB7U1RFUH0gY29tcGxldGUiLHN0ZXBFcnJvcjoiRXJyb3IgaW4gc3RlcCB7U1RFUH0iLGJyb3dzZToiQnJvd3NlIixmaWxlQ291bnQ6IntDT1VOVH0gZmlsZXMiLGNsZWFyRmlsZToiQ2xlYXIg''@;'; put 'put ''e0ZJTEV9IixjbGVhckZpbGVzOiJDbGVhciB7Q09VTlR9IGZpbGVzIixzZWxlY3RlZFRyZWVOb2RlOiJzZWxlY3RlZCIsdW5zZWxlY3RlZFRyZWVOb2RlOiJ1bnNlbGVjdGVkIixicmVhZGNydW1ic0xhYmVsOiJicmVhZGNydW1icyIsZXhwYW5kQnJlYWRjcnVtYnNMYWJlbDoiRXhwYW5kIGJy''@;'; put 'put ''ZWFkY3J1bWJzIn0pO2xldCBpcz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RyaW5ncz1rWX1nZXQga2V5cygpe3JldHVybiB0aGlzLl9zdHJpbmdzfWxvY2FsaXplKGEpe3RoaXMuX3N0cmluZ3M9ey4uLnRoaXMuX3N0cmluZ3MsLi4uYX19cGFyc2UoYSxkPXt9KXtjb25z''@;'; put 'put ''dCBoPU9iamVjdC5rZXlzKGQpO2xldCBmPWE7cmV0dXJuIGgubGVuZ3RoJiZoLmZvckVhY2godj0+e2Y9Zi5yZXBsYWNlKGB7JHt2fX1gLGRbdl0pfSksZn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxm''@;'; put 'put ''YWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7dmFyIEtmPWZ1bmN0aW9uKGMpe3JldHVybiBjLkluYWN0aXZlPSJpbmFjdGl2ZSIsYy5FcnJvcj0iZXJyb3IiLGMuQ29tcGxldGU9ImNvbXBsZXRlIixjfShLZnx8e30pLEl4PWZ1bmN0aW9uKGMpe3JldHVybiBj''@;'; put 'put ''LkRlZmF1bHQ9ImRlZmF1bHQiLGMuTXVsdGk9Im11bHRpIixjfShJeHx8e30pO2xldCBVemU9MDtjbGFzcyBaemV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmlkPWwsdGhpcy5hY2NvcmRpb25JZD1hLHRoaXMuc3RhdHVzPUtmLkluYWN0aXZlLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmRpc2FibGVk''@;'; put 'put ''PSExLHRoaXMub3Blbj0hMSx0aGlzLnRlbXBsYXRlSWQ9YCR7dGhpcy5pZH0tJHt0aGlzLmFjY29yZGlvbklkfWB9fWNsYXNzIHgxZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RyYXRlZ3k9SXguRGVmYXVsdCx0aGlzLmFjY29yZGlvbkNvdW50PVV6ZSsrLHRoaXMuX3BhbmVscz17fX1nZXQgcGFu''@;'; put 'put ''ZWxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGw9PnRoaXMuX3BhbmVsc1tsXSl9c2V0U3RyYXRlZ3kobCl7dGhpcy5zdHJhdGVneT1sfXVwZGF0ZVBhbmVsT3JkZXIobCl7bC5mb3JFYWNoKChhLGQpPT50aGlzLl9wYW5lbHNbYV0uaW5kZXg9ZCksdGhpcy5yZW1v''@;'; put 'put ''dmVPbGRQYW5lbHMobCl9YWRkUGFuZWwobCxhPSExKXt0aGlzLl9wYW5lbHNbbF09bmV3IFp6ZShsLHRoaXMuYWNjb3JkaW9uQ291bnQpLHRoaXMuX3BhbmVsc1tsXS5vcGVuPWF9dG9nZ2xlUGFuZWwobCxhKXtjb25zdCBoPXZvaWQgMCE9PWE/YTohdGhpcy5fcGFuZWxzW2xdLm9wZW47aCYm''@;'; put 'put ''dGhpcy5zdHJhdGVneT09PUl4LkRlZmF1bHQmJnRoaXMuY2xvc2VBbGxQYW5lbHMoKSx0aGlzLl9wYW5lbHNbbF0ub3Blbj1ofWRpc2FibGVQYW5lbChsLGEpe3RoaXMuX3BhbmVsc1tsXS5kaXNhYmxlZD1hfWNsb3NlQWxsUGFuZWxzKCl7dGhpcy5wYW5lbHMuZm9yRWFjaChsPT50aGlzLl9w''@;'; put 'put ''YW5lbHNbbC5pZF0ub3Blbj0hMSl9cmVtb3ZlT2xkUGFuZWxzKGwpe3RoaXMucGFuZWxzLmZpbHRlcihhPT52b2lkIDA9PT1sLmZpbmQoZD0+ZD09PWEuaWQpKS5mb3JFYWNoKGE9PmRlbGV0ZSB0aGlzLl9wYW5lbHNbYS5pZF0pfX1sZXQgUng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3RoaXMuYWNjb3JkaW9uPW5ldyB4MWUsdGhpcy5fcGFuZWxzQ2hhbmdlcz1uZXcgZWkodGhpcy5hY2NvcmRpb24ucGFuZWxzKX1nZXRQYW5lbENoYW5nZXMoYSl7cmV0dXJuIHRoaXMuX3BhbmVsc0NoYW5nZXMucGlwZShMcihkPT5kLmZpbmQoaD0+aC5pZD09PWEpKSl9c2V0U3RyYXRlZ3ko''@;'; put 'put ''YSl7dGhpcy5hY2NvcmRpb24uc2V0U3RyYXRlZ3koYSl9YWRkUGFuZWwoYSxkPSExKXt0aGlzLmFjY29yZGlvbi5hZGRQYW5lbChhLGQpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX10b2dnbGVQYW5lbChhLGQpe3RoaXMuYWNjb3JkaW9uLnRvZ2dsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBk''@;'; put 'put ''YXRlZFBhbmVscygpfWRpc2FibGVQYW5lbChhLGQpe3RoaXMuYWNjb3JkaW9uLmRpc2FibGVQYW5lbChhLGQpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX11cGRhdGVQYW5lbE9yZGVyKGEpe3RoaXMuYWNjb3JkaW9uLnVwZGF0ZVBhbmVsT3JkZXIoYSksdGhpcy5lbWl0VXBkYXRlZFBhbmVs''@;'; put 'put ''cygpfWVtaXRVcGRhdGVkUGFuZWxzKCl7dGhpcy5fcGFuZWxzQ2hhbmdlcy5uZXh0KHRoaXMuYWNjb3JkaW9uLnBhbmVscyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh''@;'; put 'put ''Y30pLGN9KSgpLEZMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnBhcmVudD1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuYWNjb3JkaW9uU2VydmljZT1oLHRoaXMuaWZFeHBhbmRTZXJ2aWNlPWYsdGhpcy5jZHI9dix0aGlzLmRpc2FibGVkPSExLHRoaXMu''@;'; put 'put ''cGFuZWxPcGVuPSExLHRoaXMuaGVhZGluZ0VuYWJsZWQ9ITEsdGhpcy5wYW5lbE9wZW5DaGFuZ2U9bmV3IEtyLHRoaXMuX2lkPU11KCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hfWdldCBwYW5lbE51bWJlcigpe3JldHVybiB0aGlzLl9wYW5lbEluZGV4''@;'; put 'put ''KzF9Z2V0IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmV4cGxpY2l0SGVhZGluZ0xldmVsP3RoaXMuZXhwbGljaXRIZWFkaW5nTGV2ZWw6dGhpcy5wYXJlbnQ/NDozfW5nT25Jbml0KCl7dGhpcy5wYW5lbD10aGlzLmFjY29yZGlvblNlcnZpY2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQp''@;'; put 'put ''LnBpcGUoR3UoYT0+dGhpcy5lbWl0UGFuZWxDaGFuZ2UoYSkpKSx0aGlzLmFjY29yZGlvblNlcnZpY2UuYWRkUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9u''@;'; put 'put ''U2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCx0aGlzLmRpc2FibGVkKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLnBhbmVsJiZhLnBhbmVsT3BlbiYmYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlIT09YS5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2ds''@;'; put 'put ''ZVBhbmVsKHRoaXMuaWQsYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlKSx0aGlzLnBhbmVsJiZhLmRpc2FibGVkJiZhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSE9PWEuZGlzYWJsZWQucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLGEuZGlz''@;'; put 'put ''YWJsZWQuY3VycmVudFZhbHVlKX10b2dnbGVQYW5lbCgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkKX1jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGEpe2Eub3Blbnx8KHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExKX1nZXRQYW5lbFN0YXRl''@;'; put 'put ''Q2xhc3NlcyhhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1wYW5lbC0ke2Euc3RhdHVzfSAke2Eub3Blbj8iY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIjoiIn1gfWdldEFjY29yZGlvbkNvbnRlbnRJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1jb250ZW50LSR7YX0nYH1nZXRBY2NvcmRpb25I''@;'; put 'put ''ZWFkZXJJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1oZWFkZXItJHthfWB9c3RlcENvbXBsZXRlVGV4dChhKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN0ZXBDb21wbGV0ZSx7U1RFUDphLnRvU3RyaW5nKCl9KX1zdGVwRXJyb3JU''@;'; put 'put ''ZXh0KGEpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3RlcEVycm9yLHtTVEVQOmEudG9TdHJpbmcoKX0pfWVtaXRQYW5lbENoYW5nZShhKXthLmluZGV4IT09dGhpcy5fcGFuZWxJbmRleCYmKHRoaXMuX3BhbmVsSW5kZXg9YS5pbmRl''@;'; put 'put ''eCx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpLGEub3BlbiE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW5DaGFuZ2UuZW1pdChhLm9wZW4pLHRoaXMucGFuZWxPcGVuPWEub3BlbiksYS5vcGVuJiYodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITApfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShjLDEyKSxHZShpcyksR2UoUngpLEdlKFUxKSxHZShFcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBhbmVsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxo''@;'; put 'put ''KXtpZigxJmEmJmFvKGgsTTFlLDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuYWNjb3JkaW9uRGVzY3JpcHRpb249Zil9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRpb24tcGFuZWwiLCEwKSgiY2xyLWFjY29yZGlvbi1wYW5l''@;'; put 'put ''bC1kaXNhYmxlZCIsZC5kaXNhYmxlZCl9LGlucHV0czp7ZGlzYWJsZWQ6W05uLk5vbmUsImNsckFjY29yZGlvblBhbmVsRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHBhbmVsT3BlbjpbTm4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxPcGVuIiwicGFuZWxPcGVuIl0saGVhZGluZ0VuYWJsZWQ6W05u''@;'; put 'put ''Lk5vbmUsImNsckFjY29yZGlvblBhbmVsSGVhZGluZ0VuYWJsZWQiLCJoZWFkaW5nRW5hYmxlZCJdLGV4cGxpY2l0SGVhZGluZ0xldmVsOltObi5Ob25lLCJjbHJBY2NvcmRpb25QYW5lbEhlYWRpbmdMZXZlbCIsImV4cGxpY2l0SGVhZGluZ0xldmVsIl19LG91dHB1dHM6e3BhbmVsT3BlbkNo''@;'; put 'put ''YW5nZToiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtVMV0pLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6SkZlLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJoZWFkZXJCdXR0b24iLCIiXSxbNCwibmdJZiJdLFszLCJuZ0NsYXNzIl0sWzEsImNsci1hY2NvcmRp''@;'; put 'put ''b24taGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24iLDMsImNsaWNrIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItYWNjb3JkaW9uLXN0YXR1cyJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0IiwxLCJjbHItYWNjb3Jk''@;'; put 'put ''aW9uLWFuZ2xlIl0sWyJyb2xlIiwicmVnaW9uIiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uIiwzLCJpZCJdLFsiY2xhc3MiLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwiY2xyLWFjY29yZGlvbi1jb250ZW50Il0sWzEsImNsci1hY2NvcmRpb24taW5uZXIt''@;'; put 'put ''Y29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKFhGZSksZ3QoMCxlSGUsMTIsMTYsIm5nLWNvbnRhaW5lciIsMSksZWwoMSwiYXN5bmMiKSksMiZhJiZNZSgibmdJZiIsRGMoMSwxLGQucGFuZWwpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxycyxFTV0sZW5jYXBzdWxh''@;'; put 'put ''dGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpqemV9LGNoYW5nZURldGVjdGlvbjowfSksY30pKCksRTFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5tdWx0aVBhbmVsPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3Ro''@;'; put 'put ''aXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVz''@;'; put 'put ''aCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnNldFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD9J''@;'; put 'put ''eC5NdWx0aTpJeC5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZSh4Mih0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlvblNlcnZpY2UudXBkYXRlUGFuZWxPcmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5p''@;'; put 'put ''ZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoUngpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLEZMLDQp''@;'; put 'put ''LDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVsdGlQYW5lbDpbTm4uTm9uZSwiY2xyQWNjb3JkaW9uTXVsdGlQYW5lbCIsIm11bHRp''@;'; put 'put ''UGFuZWwiXX0sZmVhdHVyZXM6W2RhKFtSeF0pLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCksVDFlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xz''@;'; put 'put ''OjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLEExZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi10aXRsZSJdLFsiY2xyLXN0ZXAtdGl0bGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uLXRpdGxlIiwhMCl9LG5nQ29udGVudFNlbGVjdG9y''@;'; put 'put ''czp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxSeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEs''@;'; put 'put ''dGhpcy5fY2hvY29sYXRlPW5ldyBXbn1nZXQgY2hvY29sYXRlKCl7cmV0dXJuIHRoaXMuX2Nob2NvbGF0ZS5hc09ic2VydmFibGUoKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLmRpc2FibGVDaG9jb2xhdGVDaGVja3x8dGhpcy5fY2hvY29sYXRlLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxMeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zdWJzY3JpcHRpb249ZC5jaG9jb2xhdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5sYXRlc3RGbGF2b3IhPT10''@;'; put 'put ''aGlzLmZsYXZvciYmKGQuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSEwLGEuZGV0ZWN0Q2hhbmdlcygpLGQuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSExKX0pfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMubGF0ZXN0Rmxhdm9yPXRoaXMuZmxhdm9yfW5nT25EZXN0cm95KCl7dGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKFJ5KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxEWT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUnl7fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVlzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxrMWU9KCgpPT57Y2xhc3MgYyBleHRlbmRz''@;'; put 'put ''IEx5e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1hY2NvcmRpb24tcGFuZWwgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgY2xyLWFjY29yZGlvbiIpO3N1cGVyKGEsZCksdGhpcy5leHBhbmQ9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuZXhw''@;'; put 'put ''YW5kLmV4cGFuZGVkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFcyksR2UoRFksOCksR2UoVTEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1wYW5lbCJdXSxmZWF0dXJlczpbd2FdfSksY30p''@;'; put 'put ''KCksRDFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhFeSx2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzXX0p''@;'; put 'put ''LGN9KSgpLEt6ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxEMWUsRDFlXX0pLGN9KSgpO3ZhciBnYT1mdW5jdGlvbihj''@;'; put 'put ''KXtyZXR1cm4gYy5BcnJvd0xlZnQ9IkFycm93TGVmdCIsYy5BcnJvd1VwPSJBcnJvd1VwIixjLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLGMuQXJyb3dEb3duPSJBcnJvd0Rvd24iLGMuQmFja3NwYWNlPSJCYWNrc3BhY2UiLGMuVGFiPSJUYWIiLGMuRW50ZXI9IkVudGVyIixjLkVzY2FwZT0i''@;'; put 'put ''RXNjYXBlIixjLlNwYWNlPSJTcGFjZSIsYy5TcGFjZWJhcj0iICIsYy5Ib21lPSJIb21lIixjLkVuZD0iRW5kIixjLlBhZ2VEb3duPSJQYWdlRG93biIsYy5QYWdlVXA9IlBhZ2VVcCIsY30oZ2F8fHt9KSxoNz1mdW5jdGlvbihjKXtyZXR1cm4gYy5BcnJvd1VwPSJVcCIsYy5BcnJvd0Rvd249''@;'; put 'put ''IkRvd24iLGMuQXJyb3dSaWdodD0iUmlnaHQiLGMuQXJyb3dMZWZ0PSJMZWZ0IixjLlNwYWNlPSJTcGFjZWJhciIsYy5Fc2NhcGU9IkVzYyIsY30oaDd8fHt9KTtmdW5jdGlvbiBJMihjKXtyZXR1cm4gYz09PWdhLkFycm93VXB8fGM9PT1oNy5BcnJvd1VwP2dhLkFycm93VXA6Yz09PWdhLkFy''@;'; put 'put ''cm93RG93bnx8Yz09PWg3LkFycm93RG93bj9nYS5BcnJvd0Rvd246Yz09PWdhLkFycm93UmlnaHR8fGM9PT1oNy5BcnJvd1JpZ2h0P2dhLkFycm93UmlnaHQ6Yz09PWdhLkFycm93TGVmdHx8Yz09PWg3LkFycm93TGVmdD9nYS5BcnJvd0xlZnQ6Yz09PWdhLlNwYWNlfHxjPT09aDcuU3BhY2U/''@;'; put 'put ''Z2EuU3BhY2U6Yz09PWdhLkVzY2FwZXx8Yz09PWg3LkVzY2FwZT9nYS5Fc2NhcGU6Y31mdW5jdGlvbiBSWShjKXtjb25zdCBsPUkyKGMua2V5KTsobD09PWdhLkFycm93VXB8fGw9PT1nYS5BcnJvd0Rvd258fGw9PT1nYS5BcnJvd0xlZnR8fGw9PT1nYS5BcnJvd1JpZ2h0KSYmYy5wcmV2ZW50''@;'; put 'put ''RGVmYXVsdCgpfWxldCBzYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlPW5ldyBXbix0aGlzLl9vcGVuRXZlbnRDaGFuZ2U9bmV3IFduLHRoaXMuX3BvcG92ZXJBbGlnbmVkPW5ldyBXbix0aGlzLl9wb3BvdmVyVmlzaWJsZT1uZXcg''@;'; put 'put ''V259Z2V0IG9wZW5DaGFuZ2UoKXtyZXR1cm4gdGhpcy5fb3BlbkNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgcG9wb3ZlclZpc2libGUoKXtyZXR1cm4gdGhpcy5fcG9wb3ZlclZpc2libGUuYXNPYnNlcnZhYmxlKCl9Z2V0IG9wZW5FdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9c2V0''@;'; put 'put ''IG9wZW5FdmVudChhKXt0aGlzLl9vcGVuRXZlbnQ9YSx0aGlzLl9vcGVuRXZlbnRDaGFuZ2UubmV4dChhKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3RoaXMuX29wZW4hPT0oYT0hIWEpJiYodGhpcy5fb3Blbj1hLHRoaXMuX29wZW5DaGFuZ2UubmV4dChhKSl9''@;'; put 'put ''Z2V0IG9yaWdpbmFsRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fWdldCBwb3BvdmVyQWxpZ25lZCgpe3JldHVybiB0aGlzLl9wb3BvdmVyQWxpZ25lZC5hc09ic2VydmFibGUoKX1nZXRFdmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnRDaGFuZ2UuYXNPYnNlcnZhYmxl''@;'; put 'put ''KCl9dG9nZ2xlV2l0aEV2ZW50KGEpe1JZKGEpLHRoaXMub3BlbkV2ZW50PWEsdGhpcy5vcGVuPSF0aGlzLm9wZW59cG9wb3ZlclZpc2libGVFbWl0KGEpe3RoaXMuX3BvcG92ZXJWaXNpYmxlLm5leHQoYSl9cG9wb3ZlckFsaWduZWRFbWl0KGEpe3RoaXMuX3BvcG92ZXJBbGlnbmVkLm5leHQo''@;'; put 'put ''YSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLE94PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLnNt''@;'; put 'put ''YXJ0T3BlblNlcnZpY2U9ZCx0aGlzLmRvY3VtZW50PWgsdGhpcy5vdXRzaWRlQ2xpY2tDbG9zZT0hMCx0aGlzLnNjcm9sbFRvQ2xvc2U9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoZj0+e2Y/KHRoaXMuYWRk''@;'; put 'put ''RXNjYXBlTGlzdGVuZXIoKSx0aGlzLmFkZENsaWNrTGlzdGVuZXIoKSx0aGlzLmFkZFNjcm9sbExpc3RlbmVyKCkpOnRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX0pLGQuZ2V0RXZlbnRDaGFuZ2UoKS5zdWJzY3JpYmUoZj0+e3RoaXMuaWdub3JlZEV2ZW50PWZ9KSl9bmdPbkRlc3Ry''@;'; put 'put ''b3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX1hZGRTY3JvbGxMaXN0ZW5lcigpe3RoaXMuc2Nyb2xsVG9DbG9zZSYmKHRoaXMuZG9jdW1lbnRTY3JvbGxlcj14ZCh0aGlzLmRvY3VtZW50LCJz''@;'; put 'put ''Y3JvbGwiLHtjYXB0dXJlOiEwfSksdGhpcy5zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5kb2N1bWVudFNjcm9sbGVyLnBpcGUoJGwodGhpcy50ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcikpLnN1YnNjcmliZSgoKT0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSExLHRo''@;'; put 'put ''aXMuc2V0QW5jaG9yRm9jdXMoKX0pKX1yZW1vdmVTY3JvbGxMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRTY3JvbGxlciYmKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRTY3JvbGxlcil9YWRkQ2xpY2tMaXN0ZW5lcigpe3RoaXMub3V0''@;'; put 'put ''c2lkZUNsaWNrQ2xvc2UmJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJjbGljayIsYT0+e2E9PT10aGlzLmlnbm9yZWRFdmVudD9kZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQ6KHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVu''@;'; put 'put ''PSExLGEudGFyZ2V0LmZvY3VzKCkpfSkpfXJlbW92ZUNsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYoZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50LHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIoKSxkZWxldGUgdGhp''@;'; put 'put ''cy5kb2N1bWVudENsaWNrTGlzdGVuZXIpKX1hZGRFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwia2V5ZG93bi5lc2NhcGUiLCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhpcy5zZXRBbmNo''@;'; put 'put ''b3JGb2N1cygpfSl9cmVtb3ZlRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyJiYodGhpcy5lc2NhcGVMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmVzY2FwZUxpc3RlbmVyKX1zZXRDbG9zZUZvY3VzKCl7dGhpcy5jbG9zZUJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9''@;'; put 'put ''c2V0QW5jaG9yRm9jdXMoKXt0aGlzLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9dGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIoYSl7bGV0IGQ9YS50YXJnZXQ7Zm9yKDtkLmNsYXNzTGlzdCYmImJvZHkiIT09ZC5wYXJlbnRFbGVtZW50LmxvY2FsTmFt''@;'; put 'put ''ZTspZD1kLnBhcmVudEVsZW1lbnQ7cmV0dXJuISFkLmNsYXNzTGlzdCYmIWQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbHItcG9wb3Zlci1jb250ZW50Iil9cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVyKCksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVy''@;'; put 'put ''KCksdGhpcy5yZW1vdmVFc2NhcGVMaXN0ZW5lcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihFbykseHIoc2MpLHhyKHZzKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksUHg9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe2EuYW5jaG9yQnV0dG9uUmVmPWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE94KSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQW5jaG9y''@;'; put 'put ''IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWFuY2hvciIsITApfX0pLGN9KSgpLEwxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZT1kLHRoaXMu''@;'; put 'put ''c21hcnRPcGVuU2VydmljZT1oLHRoaXMuY2xvc2VDaGFuZ2U9bmV3IEtyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLm9wZW5DaGFuZ2UucGlwZSgkbChmPT4hZikpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2xvc2VDaGFuZ2UubmV4dCgpfSkpfWhhbmRs''@;'; put 'put ''ZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSksdGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0QW5jaG9yRm9jdXMoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jbG9zZUJ1dHRvblJlZj10aGlzLmVsZW1lbnRSZWYs''@;'; put 'put ''dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0Q2xvc2VGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKE94KSxH''@;'; put 'put ''ZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGFuZGxlQ2xpY2soZil9''@;'; put 'put ''KSwyJmEmJlRyKCJjbHItc21hcnQtY2xvc2UtYnV0dG9uIiwhMCl9LG91dHB1dHM6e2Nsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT25DbG9zZUNoYW5nZSJ9fSksY30pKCk7dmFyIGgxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVkVSVElDQUw9MF09IlZFUlRJQ0FMIixjW2MuSE9SSVpPTlRBTD0x''@;'; put 'put ''XT0iSE9SSVpPTlRBTCIsY30oaDF8fHt9KSxPcz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNUQVJUPTBdPSJTVEFSVCIsY1tjLkNFTlRFUj0uNV09IkNFTlRFUiIsY1tjLkVORD0xXT0iRU5EIixjfShPc3x8e30pLEZ4PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQk9UVE9NPTBdPSJCT1RUT00i''@;'; put 'put ''LGNbYy5MRUZUPTFdPSJMRUZUIixjW2MuUklHSFQ9Ml09IlJJR0hUIixjW2MuVE9QPTNdPSJUT1AiLGN9KEZ4fHx7fSk7Y29uc3QgbW09Yz0+KHsuLi5jLHNpZGU6LTEqYy5zaWRlfSksYWc9KGMsbCk9Pntjb25zdCBhPWMuY29udGVudCsobD8uNTotLjUpO3JldHVybiBhPDB8fGE+MT9jOnsu''@;'; put 'put ''Li5jLGNvbnRlbnQ6YX19O2Z1bmN0aW9uIE95KGMsbCxhKXtyZXR1cm4gZD0+bChjKGQpLGEpfWZ1bmN0aW9uIF9oKGMsbCxhKXtsZXQgZD1sLmxlZnQsaD1sLnRvcDtzd2l0Y2goYy5heGlzK2Muc2lkZSl7Y2FzZS0xOmQrPU8xZShjLGwsYSksaC09YS5oZWlnaHQ7YnJlYWs7Y2FzZSAxOmQr''@;'; put 'put ''PU8xZShjLGwsYSksaCs9bC5oZWlnaHQ7YnJlYWs7Y2FzZSAwOmQtPWEud2lkdGgsaCs9UDFlKGMsbCxhKTticmVhaztjYXNlIDI6ZCs9bC53aWR0aCxoKz1QMWUoYyxsLGEpfXJldHVybnt4T2Zmc2V0OmQseU9mZnNldDpofX1mdW5jdGlvbiBPMWUoYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMu''@;'; put 'put ''YW5jaG9yKXtjYXNlIE9zLlNUQVJUOmJyZWFrO2Nhc2UgT3MuQ0VOVEVSOmQrPWwud2lkdGgvMjticmVhaztjYXNlIE9zLkVORDpkKz1sLndpZHRofXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgT3MuU1RBUlQ6YnJlYWs7Y2FzZSBPcy5DRU5URVI6ZC09YS53aWR0aC8yO2JyZWFrO2Nhc2UgT3Mu''@;'; put 'put ''RU5EOmQtPWEud2lkdGh9cmV0dXJuIGR9ZnVuY3Rpb24gUDFlKGMsbCxhKXtsZXQgZD0wO3N3aXRjaChjLmFuY2hvcil7Y2FzZSBPcy5TVEFSVDpicmVhaztjYXNlIE9zLkNFTlRFUjpkKz1sLmhlaWdodC8yO2JyZWFrO2Nhc2UgT3MuRU5EOmQrPWwuaGVpZ2h0fXN3aXRjaChjLmNvbnRlbnQp''@;'; put 'put ''e2Nhc2UgT3MuU1RBUlQ6YnJlYWs7Y2FzZSBPcy5DRU5URVI6ZC09YS5oZWlnaHQvMjticmVhaztjYXNlIE9zLkVORDpkLT1hLmhlaWdodH1yZXR1cm4gZH1sZXQgRjFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMucGxhdGZvcm1JZD1k''@;'; put 'put ''LHRoaXMuX3Nob3VsZFJlYWxpZ249bmV3IFduLHRoaXMuc2hvdWxkUmVhbGlnbj10aGlzLl9zaG91bGRSZWFsaWduLmFzT2JzZXJ2YWJsZSgpfXJlYWxpZ24oKXt0aGlzLl9zaG91bGRSZWFsaWduLm5leHQoKX1hbGlnbkNvbnRlbnQoYSl7aWYoIXRsKHRoaXMucGxhdGZvcm1JZCkpcmV0dXJu''@;'; put 'put ''e3hPZmZzZXQ6MCx5T2Zmc2V0OjB9O3RoaXMuY3VycmVudEFuY2hvckNvb3Jkcz10aGlzLmV2ZW50U2VydmljZS5hbmNob3JCdXR0b25SZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzPWEuZ2V0Qm91bmRpbmdDbGllbnRS''@;'; put 'put ''ZWN0KCksdGhpcy5jb250ZW50T2Zmc2V0cz1faCh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTtjb25zdCBkPWZ1bmN0aW9uIFh6ZShjLGwpe2NvbnN0IGE9W10sZF9ib3R0b209Yy55T2Zmc2V0K2wuaGVpZ2h0LGRfbGVm''@;'; put 'put ''dD1jLnhPZmZzZXQsZF9yaWdodD1jLnhPZmZzZXQrbC53aWR0aDtyZXR1cm4gYy55T2Zmc2V0Pj0wfHxhLnB1c2goRnguVE9QKSxkX2xlZnQ+PTB8fGEucHVzaChGeC5MRUZUKSxkX2JvdHRvbTw9KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhl''@;'; put 'put ''aWdodCl8fGEucHVzaChGeC5CT1RUT00pLGRfcmlnaHQ8PSh3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKXx8YS5wdXNoKEZ4LlJJR0hUKSxhfSh0aGlzLmNvbnRlbnRPZmZzZXRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpLGg9ZC5y''@;'; put 'put ''ZWR1Y2UoKGYsdik9PmYrdiwwKTtyZXR1cm4gMT09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1oMS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihoKToxPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWgxLkhPUklaT05UQUw/dGhp''@;'; put 'put ''cy5oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihoKToyPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWgxLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlzVHdvVmlvbGF0aW9ucyhoKToyPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWgxLkhP''@;'; put 'put ''UklaT05UQUwmJnRoaXMuaGFuZGxlSG9yaXpvbnRhbEF4aXNUd29WaW9sYXRpb25zKGgpLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wPDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQrPU1hdGguYWJzKHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wKSksdGhpcy5jb250''@;'; put 'put ''ZW50T2Zmc2V0cy55T2Zmc2V0K3RoaXMuY3VycmVudEFuY2hvckNvb3Jkcy55PDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQ9MC10aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzLnRvcCksdGhpcy5jb250ZW50T2Zmc2V0c31oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oYSl7''@;'; put 'put ''c3dpdGNoKGEpe2Nhc2UgMDpjYXNlIDM6dGhpcy5jb250ZW50T2Zmc2V0cz1faChtbSh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAxOnRoaXMuY29udGVudE9mZnNldHM9X2godGhpcy5wb3NpdGlv''@;'; put 'put ''bix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3JkcyksdGhpcy5jb250ZW50T2Zmc2V0cy54T2Zmc2V0PDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ9MTApO2JyZWFrO2Nhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGFnKHRoaXMucG9z''@;'; put 'put ''aXRpb24sITApLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKX19aGFuZGxlVmVydGljYWxBeGlzVHdvVmlvbGF0aW9ucyhhKXtzd2l0Y2goYSl7Y2FzZSA1Ontjb25zdCBkPU95KG1tLGFnLCEwKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhp''@;'; put 'put ''cy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgNDp7Y29uc3QgZD1PeShtbSxhZywhMSk7dGhpcy5jb250ZW50T2Zmc2V0cz1faChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0''@;'; put 'put ''aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDM6ZGVmYXVsdDpicmVhaztjYXNlIDI6e2NvbnN0IGQ9T3kobW0sYWcsITApO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVu''@;'; put 'put ''dENvb3Jkcyk7YnJlYWt9Y2FzZSAxOntjb25zdCBkPU95KG1tLGFnLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfX19aGFuZGxlSG9yaXpvbnRhbEF4aXNP''@;'; put 'put ''bmVWaW9sYXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6dGhpcy5jb250ZW50T2Zmc2V0cz1faChtbSh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAwOnRoaXMuY29udGVudE9mZnNldHM9''@;'; put 'put ''X2goYWcodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrO2Nhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGFnKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJl''@;'; put 'put ''bnRDb250ZW50Q29vcmRzKX19aGFuZGxlSG9yaXpvbnRhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6Y2FzZSA0Ontjb25zdCBkPU95KG1tLGFnLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRz''@;'; put 'put ''LHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjpjYXNlIDE6e2NvbnN0IGQ9T3kobW0sYWcsITApO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJy''@;'; put 'put ''ZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoT3gpLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSHg9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmRvY3VtZW50PWEsdGhpcy5jb250YWluZXI9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2U9dix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZT1NLHRoaXMuc21hcnRPcGVuU2VydmljZT1E''@;'; put 'put ''LHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbj1udWxsLHRoaXMuc2hvdWxkUmVhbGlnbj0hMSx0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodD1udWxsLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IEtyfXNldCBvcGVuKGEpe3RoaXMuc21hcnRPcGVuU2Vy''@;'; put 'put ''dmljZS5vcGVuPSEhYX1zZXQgY29udGVudEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFhfXNldCBzY3JvbGxUb0Nsb3NlKGEpe3RoaXMu''@;'; put 'put ''c21hcnRFdmVudHNTZXJ2aWNlLnNjcm9sbFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2lmKHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0aGlzLnZpZXcpe2NvbnN0IGE9dGhpcy52aWV3LnJvb3ROb2Rlc1swXS5vZmZzZXRIZWlnaHQ7KHRoaXMuc2hvdWxkUmVhbGln''@;'; put 'put ''bnx8bnVsbCE9PXRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0JiZ0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodCE9PWEpJiYodGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQ9YSx0aGlzLmNoZWNrQ29sbGVjdG9yLmVtaXQoKSl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cy5wdXNoKHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YT90aGlzLmFkZENvbnRlbnQoKTp0aGlzLnJlbW92ZUNvbnRlbnQoKX0pLHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2Uuc2hvdWxkUmVhbGlnbi5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNob3VsZFJl''@;'; put 'put ''YWxpZ249ITB9KSx0aGlzLmNoZWNrQ29sbGVjdG9yLnBpcGUoZm0oMCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuYWxpZ25Db250ZW50KCksdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMudmlldyYmKHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwib3BhY2l0''@;'; put 'put ''eSIsIjEiKSx0aGlzLnNtYXJ0T3BlblNlcnZpY2UucG9wb3ZlclZpc2libGVFbWl0KCEwKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZUNvbnRlbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWFkZENvbnRlbnQoKXt0aGlzLnZpZXc9dGhp''@;'; put 'put ''cy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO2NvbnN0W2FdPXRoaXMudmlldy5yb290Tm9kZXM7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY29udGVudFJlZj1hLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYSwiY2xyLXBvcG92ZXItY29udGVudCIpLHRoaXMu''@;'; put 'put ''cmVuZGVyZXIuc2V0U3R5bGUoYSwidG9wIiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJvcGFjaXR5IiwiMCIpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPXRoaXMucmVuZGVyZXIubGlzdGVuKGEsImNs''@;'; put 'put ''aWNrIixkPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5FdmVudD1kfSksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGQ9Pnt0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxkKX0pLHRoaXMuc2hvdWxkUmVhbGlnbj0hMH1yZW1vdmVDb250ZW50KCl7''@;'; put 'put ''dGhpcy52aWV3JiYodGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4mJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwpLHRoaXMudmlldy5yb290Tm9kZXMuZm9yRWFjaChhPT50aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMu''@;'; put 'put ''ZG9jdW1lbnQuYm9keSxhKSksdGhpcy5jb250YWluZXIuY2xlYXIoKSxkZWxldGUgdGhpcy52aWV3LHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyVmlzaWJsZUVtaXQoITEpKX1hbGlnbkNvbnRlbnQoKXtpZighdGhpcy52aWV3KXJldHVybjtjb25zdCBhPXRoaXMuc21hcnRQb3NpdGlv''@;'; put 'put ''blNlcnZpY2UuYWxpZ25Db250ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwidG9wIixgJHthLnlPZmZzZXR9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sImxl''@;'; put 'put ''ZnQiLGAke2EueE9mZnNldH1weGApLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHZzKSxHZShEbyksR2UoU2wpLEdlKEVvKSxH''@;'; put 'put ''ZShGMWUpLEdlKE94KSxHZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQ29udGVudCIsIiJdXSxpbnB1dHM6e29wZW46W05uLk5vbmUsImNsclBvcG92ZXJDb250ZW50Iiwib3BlbiJdLGNvbnRlbnRBdDpbTm4uTm9uZSwiY2xyUG9wb3Zl''@;'; put 'put ''ckNvbnRlbnRBdCIsImNvbnRlbnRBdCJdLG91dHNpZGVDbGlja0Nsb3NlOltObi5Ob25lLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJvdXRzaWRlQ2xpY2tDbG9zZSJdLHNjcm9sbFRvQ2xvc2U6W05uLk5vbmUsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9z''@;'; put 'put ''ZSIsInNjcm9sbFRvQ2xvc2UiXX19KSxjfSkoKSxOeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZT1hLHRoaXMub3BlbkNsb3NlQ2hhbmdlPW5ldyBLcix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5vcGVu''@;'; put 'put ''Q2hhbmdlLnN1YnNjcmliZShkPT57dGhpcy5vcGVuQ2xvc2VDaGFuZ2UubmV4dChkKX0pKX1oYW5kbGVDbGljayhhKXt0aGlzLnNtYXJ0T3BlblNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmli''@;'; put 'put ''ZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2MpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVDbGljayhmKX0pLDImYSYmVHIoImNsci1zbWFydC1vcGVuLWNsb3NlIiwhMCl9LG91dHB1dHM6e29wZW5DbG9zZUNoYW5nZToiY2xyUG9wb3Zlck9wZW5DbG9zZUNoYW5nZSJ9fSksY30pKCksVng9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7fSksY30pKCk7dmFyIHdoPWZ1bmN0aW9uKGMpe3JldHVybiBjLlVQPSJ1cCIsYy5ET1dOPSJkb3duIixjLkxF''@;'; put 'put ''RlQ9ImxlZnQiLGMuUklHSFQ9InJpZ2h0IixjfSh3aHx8e30pO2xldCB3cD1jbGFzc3tjb25zdHJ1Y3RvcihsKXt0aGlzLnJlbmRlcmVyPWwsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXJlc2V0KGwpe3RoaXMuX2N1cnJlbnQ9bH1s''@;'; put 'put ''aXN0ZW5Ub0Fycm93S2V5cyhsKXt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5hcnJvd3VwIiwoKT0+IXRoaXMubW92ZSh3aC5VUCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93''@;'; put 'put ''bi5hcnJvd2Rvd24iLCgpPT4hdGhpcy5tb3ZlKHdoLkRPV04pKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uYXJyb3dsZWZ0IiwoKT0+IXRoaXMubW92ZSh3aC5MRUZUKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJl''@;'; put 'put ''bmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93cmlnaHQiLCgpPT4hdGhpcy5tb3ZlKHdoLlJJR0hUKSkpfXJlZ2lzdGVyQ29udGFpbmVyKGwsYT0iMCIpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGwsInRhYmluZGV4IixhKSx0aGlzLmxpc3RlblRvQXJyb3dLZXlzKGwpLHRoaXMu''@;'; put 'put ''X3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLnNwYWNlIiwoKT0+IXRoaXMuYWN0aXZhdGVDdXJyZW50KCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5lbnRlciIsKCk9PiF0aGlzLmFj''@;'; put 'put ''dGl2YXRlQ3VycmVudCgpKSl9bW92ZVRvKGwpe3ZvaWQgMCE9PWwmJih0aGlzLmN1cnJlbnQmJnRoaXMuY3VycmVudC5ibHVyKCksbC5mb2N1cygpLHRoaXMuX2N1cnJlbnQ9bCl9bW92ZShsKXtsZXQgYT0hMTtpZih0aGlzLmN1cnJlbnQpe2NvbnN0IGQ9dGhpcy5jdXJyZW50W2xdO2QmJihC''@;'; put 'put ''TShkKT9kOmZvKGQpKS5zdWJzY3JpYmUoZj0+e2YmJih0aGlzLm1vdmVUbyhmKSxhPSEwKX0pfXJldHVybiBhfWFjdGl2YXRlQ3VycmVudCgpe3JldHVybiEoIXRoaXMuY3VycmVudHx8IXRoaXMuY3VycmVudC5hY3RpdmF0ZXx8KHRoaXMuY3VycmVudC5hY3RpdmF0ZSgpLDApKX1kZXRhY2hM''@;'; put 'put ''aXN0ZW5lcnMoKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2gobD0+bCgpKX19O3dwLlx1MDI3NWZhYz1mdW5jdGlvbihsKXtyZXR1cm4gbmV3KGx8fHdwKSh4cihFbykpfSx3cC5cdTAyNzVwcm92PWFuKHt0b2tlbjp3cCxmYWN0b3J5OndwLlx1MDI3NWZhY30pO2NvbnN0IFYxZT17cHJv''@;'; put 'put ''dmlkZTp3cCx1c2VGYWN0b3J5OmZ1bmN0aW9uIEp6ZShjLGwpe3JldHVybiBjfHxuZXcgd3AobCl9LGRlcHM6W1tuZXcgSTEsbmV3IGxkLHdwXSxFb119O3ZhciBSMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkJFRk9SRT0tMV09IkJFRk9SRSIsY1tjLkFGVEVSPTFdPSJBRlRFUiIsY30oUjJ8''@;'; put 'put ''fHt9KTtjbGFzcyBUZHt9VGRbInRvcC1yaWdodCJdPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5FTkQsY29udGVudDpPcy5FTkR9LFRkWyJ0b3AtbGVmdCJdPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50''@;'; put 'put ''Ok9zLlNUQVJUfSxUZFsiYm90dG9tLXJpZ2h0Il09e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5BRlRFUixhbmNob3I6T3MuRU5ELGNvbnRlbnQ6T3MuRU5EfSxUZFsiYm90dG9tLWxlZnQiXT17YXhpczpoMS5WRVJUSUNBTCxzaWRlOlIyLkFGVEVSLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50''@;'; put 'put ''Ok9zLlNUQVJUfSxUZFsicmlnaHQtdG9wIl09e2F4aXM6aDEuSE9SSVpPTlRBTCxzaWRlOlIyLkFGVEVSLGFuY2hvcjpPcy5DRU5URVIsY29udGVudDpPcy5FTkR9LFRkWyJyaWdodC1ib3R0b20iXT17YXhpczpoMS5IT1JJWk9OVEFMLHNpZGU6UjIuQUZURVIsYW5jaG9yOk9zLlNUQVJULGNv''@;'; put 'put ''bnRlbnQ6T3MuU1RBUlR9LFRkWyJsZWZ0LXRvcCJdPXtheGlzOmgxLkhPUklaT05UQUwsc2lkZTpSMi5CRUZPUkUsYW5jaG9yOk9zLkNFTlRFUixjb250ZW50Ok9zLkVORH0sVGRbImxlZnQtYm90dG9tIl09e2F4aXM6aDEuSE9SSVpPTlRBTCxzaWRlOlIyLkJFRk9SRSxhbmNob3I6T3MuU1RB''@;'; put 'put ''UlQsY29udGVudDpPcy5TVEFSVH07Y29uc3QgTkw9bmV3IFN0KCJQT1BPVkVSX0hPU1RfQU5DSE9SIik7bGV0IFF6ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMubGFzdE9wZW5DaGFuZ2U9bnVsbH1uZ09uSW5pdCgpe3RoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5sYXN0T3BlbkNoYW5nZT1hfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1vbkVzY2FwZUtleShhKXtudWxsIT09dGhpcy5sYXN0T3BlbkNoYW5nZSYm''@;'; put 'put ''KCExPT09dGhpcy5sYXN0T3BlbkNoYW5nZSYmYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmxhc3RPcGVuQ2hhbmdlPW51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGhvc3RCaW5kaW5n''@;'; put 'put ''czpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleXVwLmVzY2FwZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25Fc2NhcGVLZXkoZil9KX0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLG9nPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''fSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFtzYyxPeCxGMWUse3Byb3ZpZGU6TkwsdXNlRXhpc3Rpbmc6Sml9XSksdmQoW1F6ZV0pXX0pLGN9KSgpO2NsYXNzIE9Ze3N0YXRpYyBsaW5rUGFyZW50KGwsYSxkKXtsLmZvckVhY2goaD0+aFtkXT1h''@;'; put 'put ''KX1zdGF0aWMgbGlua1ZlcnRpY2FsKGwsYT0hMCl7bC5mb3JFYWNoKChkLGgpPT57aD4wJiYoZC51cD1sW2gtMV0pLGg8bC5sZW5ndGgtMSYmKGQuZG93bj1sW2grMV0pfSksYSYmbC5sZW5ndGg+MSYmKGxbMF0udXA9bFtsLmxlbmd0aC0xXSxsW2wubGVuZ3RoLTFdLmRvd249bFswXSl9fWxl''@;'; put 'put ''dCB2bT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7Y29uc3QgZD1hLmNsb25lTm9kZSghMCk7ZC5pZCYmKGQuaWQ9ZC5pZCsiLWNsb25lIiksZC5jbGFzc0xpc3QuYWRkKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm8iKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGQpO2Nv''@;'; put 'put ''bnN0IGg9dGhpcy5jbGllbnRSZWN0KGQpLndpZHRoO3JldHVybiBkLnJlbW92ZSgpLGh9c2Nyb2xsQmFyV2lkdGgoYSl7cmV0dXJuIGEub2Zmc2V0V2lkdGgtYS5jbGllbnRXaWR0aH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gYS5zY3JvbGxXaWR0aHx8MH1jb21wdXRlZEhlaWdodChhKXtyZXR1''@;'; put 'put ''cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSwxMCl9Y2xpZW50UmVjdChhKXtjb25zdCBkPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDpwYXJzZUludChkLnRvcCwxMCksYm90dG9tOnBhcnNlSW50KGQuYm90dG9t''@;'; put 'put ''LDEwKSxsZWZ0OnBhcnNlSW50KGQubGVmdCwxMCkscmlnaHQ6cGFyc2VJbnQoZC5yaWdodCwxMCksd2lkdGg6cGFyc2VJbnQoZC53aWR0aCwxMCksaGVpZ2h0OnBhcnNlSW50KGQuaGVpZ2h0LDEwKX19bWluV2lkdGgoYSl7cmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZ2V0''@;'; put 'put ''UHJvcGVydHlWYWx1ZSgibWluLXdpZHRoIiksMTApfWZvY3VzKGEpe2EuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVkw9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbGVtZW50PWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuY2xyRXhwYW5kVHJpZ2dlcj0hMSx0aGlzLnN0YXJ0SGVpZ2h0PTB9Z2V0IGV4cGFuZEFuaW1hdGlvbigpe3JldHVybnt2YWx1ZTp0aGlzLmNsckV4cGFu''@;'; put 'put ''ZFRyaWdnZXIscGFyYW1zOntzdGFydEhlaWdodDp0aGlzLnN0YXJ0SGVpZ2h0fX19YW5pbWF0aW9uU3RhcnQoYSl7InZvaWQiIT09YS5mcm9tU3RhdGUmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIm92ZXJmbG93IiwiaGlkZGVuIil9YW5pbWF0''@;'; put 'put ''aW9uRG9uZShhKXsidm9pZCIhPT1hLmZyb21TdGF0ZSYmKHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIm92ZXJmbG93IiksdGhpcy51cGRhdGVTdGFydEhlaWdodCgpKX11cGRhdGVTdGFydEhlaWdodCgpe3RoaXMuc3RhcnRIZWlnaHQ9dGhp''@;'; put 'put ''cy5kb21BZGFwdGVyLmNvbXB1dGVkSGVpZ2h0KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KXx8MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKHZtKSxHZShFbykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpb''@;'; put 'put ''WyJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJmRVKCJAZXhwYW5kQW5pbWF0aW9uLnN0YXJ0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5hbmltYXRpb25TdGFydChmKX0pKCJAZXhwYW5kQW5pbWF0aW9uLmRvbmUi''@;'; put 'put ''LGZ1bmN0aW9uKGYpe3JldHVybiBkLmFuaW1hdGlvbkRvbmUoZil9KSwyJmEmJmxVKCJAZXhwYW5kQW5pbWF0aW9uIixkLmV4cGFuZEFuaW1hdGlvbil9LGlucHV0czp7Y2xyRXhwYW5kVHJpZ2dlcjoiY2xyRXhwYW5kVHJpZ2dlciJ9LGZlYXR1cmVzOltkYShbdm1dKV0sbmdDb250ZW50U2Vs''@;'; put 'put ''ZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3loKCJleHBhbmRBbmltYXRpb24iLFtpdSgidHJ1ZSA8PT4gZmFsc2UiLFt1cyh7aGVpZ2h0OiJ7e3N0YXJ0SGVp''@;'; put 'put ''Z2h0fX1weCJ9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIsdXMoe2hlaWdodDoiKiJ9KSldKV0pXX19KSxjfSkoKSxQWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1''@;'; put 'put ''aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKSxlVWU9MDtjb25zdCBGeT1uZXcgU3QoIklGX0FDVElWRV9JRCIpLG5VZT17cHJvdmlkZTpGeSx1c2VGYWN0b3J5OmZ1bmN0aW9uIHRVZSgpe3JldHVybisrZVVlfX07bGV0IGY3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9j''@;'; put 'put ''dXJyZW50Q2hhbmdlPW5ldyBXbn1nZXQgY3VycmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9jdXJyZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50''@;'; put 'put ''PWEsdGhpcy5fY3VycmVudENoYW5nZS5uZXh0KGEpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSHk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh''@;'; put 'put ''LGQsaCxmKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5jb250YWluZXI9Zix0aGlzLmFjdGl2ZUNoYW5nZT1uZXcgS3IoITEpLHRoaXMud2FzQWN0aXZlPSExLHRoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KGEuY3VycmVudCksdGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb249YS5jdXJyZW50Q2hhbmdlLnN1YnNjcmliZSh2PT57dGhpcy5jaGVja0FuZFVwZGF0ZVZpZXcodil9KX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfXNldCBhY3RpdmUoYSl7YSYmKHRoaXMuaWZBY3RpdmVTZXJ2aWNl''@;'; put 'put ''LmN1cnJlbnQ9dGhpcy5pZCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcoYSl7YT90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX1jaGVja0FuZFVwZGF0''@;'; put 'put ''ZVZpZXcoYSl7Y29uc3QgZD1hPT09dGhpcy5pZDtkIT09dGhpcy53YXNBY3RpdmUmJih0aGlzLnVwZGF0ZVZpZXcoZCksdGhpcy5hY3RpdmVDaGFuZ2UuZW1pdChkKSx0aGlzLndhc0FjdGl2ZT1kKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uo''@;'; put 'put ''ZjcpLEdlKEZ5KSxHZShTbCksR2UoRG8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZBY3RpdmUiLCIiXV0saW5wdXRzOnthY3RpdmU6W05uLk5vbmUsImNscklmQWN0aXZlIiwiYWN0aXZlIl19LG91dHB1dHM6e2FjdGl2ZUNoYW5nZToiY2xySWZBY3Rp''@;'; put 'put ''dmVDaGFuZ2UifX0pLGN9KSgpLEwyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudGVtcGxhdGU9ZCx0aGlzLmNvbnRhaW5lcj1oLHRoaXMub3BlbkNoYW5nZT1uZXcgS3IoITEpLHRoaXMuc3Vic2NyaXB0aW9uPWEub3BlbkNoYW5n''@;'; put 'put ''ZS5zdWJzY3JpYmUoZj0+e3RoaXMudXBkYXRlVmlldyhmKSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChmKX0pfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufXNldCBvcGVuKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPWF9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcoYSl7YT90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2Mp''@;'; put 'put ''LEdlKFNsKSxHZShEbykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZk9wZW4iLCIiXV0saW5wdXRzOntvcGVuOltObi5Ob25lLCJjbHJJZk9wZW4iLCJvcGVuIl19LG91dHB1dHM6e29wZW5DaGFuZ2U6ImNscklmT3BlbkNoYW5nZSJ9fSksY30pKCksQjFl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnRlbXBsYXRlPWEsdGhpcy5jb250YWluZXI9ZCx0aGlzLmVsPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZXhwYW5kPXYsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IoITApLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMu''@;'; put 'put ''X3N1YnNjcmlwdGlvbnM9W10sdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHYuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMudXBkYXRlVmlldygpLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh2LmV4cGFuZGVkKX0pKSx2Lmhhc0V4cGFuZFRlbXBsYXRlPSEhYX1nZXQgZXhwYW5k''@;'; put 'put ''ZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpeyJib29sZWFuIj09dHlwZW9mIGEmJih0aGlzLmV4cGFuZC5leHBhbmRlZD1hLHRoaXMuX2V4cGFuZGVkPWEpfW5nT25Jbml0KCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZSsrLHRoaXMudXBkYXRlVmlldygpfW5nT25E''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZS0tLHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXVwZGF0ZVZpZXcoKXtpZighdGhpcy5leHBhbmQuZXhwYW5kZWR8fDA9PT10aGlzLmNvbnRhaW5lci5sZW5ndGgpaWYodGhpcy50ZW1wbGF0ZSl0''@;'; put 'put ''aGlzLmV4cGFuZC5leHBhbmRlZD90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKTtlbHNlIHRyeXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzcGxheSIsdGhpcy5leHBh''@;'; put 'put ''bmQuZXhwYW5kZWQ/bnVsbDoibm9uZSIpfWNhdGNoe319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFNsLDgpLEdlKERvKSxHZShKaSksR2UoRW8pLEdlKFUxKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklm''@;'; put 'put ''RXhwYW5kZWQiLCIiXV0saW5wdXRzOntleHBhbmRlZDpbTm4uTm9uZSwiY2xySWZFeHBhbmRlZCIsImV4cGFuZGVkIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJJZkV4cGFuZGVkQ2hhbmdlIn19KSxjfSkoKSxPMj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTtjb25zdCByVWU9e3Byb3ZpZGU6bmV3IFN0KCJGT0NVU19PTl9WSUVXX0lOSVQiKSx1c2VWYWx1ZTohMH07bGV0IEJMPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbclVlXSxpbXBvcnRzOltSYV19KSxjfSkoKSxhVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsVnhdfSksY30pKCksUDI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQs''@;'; put 'put ''dGhpcy5jbHJMb2FkaW5nQ2hhbmdlPW5ldyBLcighMSksdGhpcy5idXR0b25TdGF0ZT16MSx0aGlzLnN0YXRlPXoxLkRFRkFVTFR9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe2lmKGEhPT10aGlzLnN0YXRlKXtzd2l0Y2godGhpcy5zdGF0ZT1hLGEpe2Nhc2UgejEuREVGQVVMVDp0aGlzLnJlbmRl''@;'; put 'put ''cmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiKSx0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidHJhbnNmb3JtIiksdGhpcy5kaXNhYmxlZHx8dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LCJkaXNhYmxlZCIpO2JyZWFrO2Nhc2UgejEuTE9BRElORzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidHJhbnNmb3JtIiwidHJhbnNsYXRleigwKSIpLHRoaXMucmVuZGVyZXIuc2V0''@;'; put 'put ''QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLCIiKTticmVhaztjYXNlIHoxLlNVQ0NFU1M6dGhpcy5zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCk7YnJlYWs7Y2FzZSB6MS5FUlJPUjp0aGlzLmxvYWRpbmdTdGF0ZUNoYW5nZSh6MS5ERUZBVUxUKX10aGlzLmNsckxv''@;'; put 'put ''YWRpbmdDaGFuZ2UuZW1pdChhKX19c2V0RXhwbGljaXRCdXR0b25XaWR0aCgpe2lmKHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7Y29uc3QgYT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRS''@;'; put 'put ''ZWN0KCksZD1NYXRoLm1heCg0MixhLndpZHRoKTt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGAke2R9cHhgKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShFbykpfSxjLlx1MDI3''@;'; put 'put ''NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJidXR0b24iLCJjbHJMb2FkaW5nIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiZGlzYWJsZWQiLGQuZGlzYWJsZWQ/IiI6bnVsbCl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0''@;'; put 'put ''cHV0czp7Y2xyTG9hZGluZ0NoYW5nZToiY2xyTG9hZGluZ0NoYW5nZSJ9LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6RHgsdXNlRXhpc3Rpbmc6Y31dKV0sYXR0cnM6Q0hlLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6NSxjb25zdHM6W1szLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3''@;'; put 'put ''aXRjaENhc2UiXSxbImNsYXNzIiwiY2xyLWxvYWRpbmctYnRuLWNvbnRlbnQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwic3Bpbm5lci1jaGVjayJdLFsxLCJjbHItbG9hZGluZy1idG4tY29u''@;'; put 'put ''dGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwic3BhbiIsMCksZ3QoMSxTSGUsMiwxLCJuZy1jb250YWluZXIiLDEpKDIsTUhlLDIsMSwibmctY29udGFpbmVyIiwxKSgzLHhIZSwyLDEsInNwYW4iLDIpLGhlKCkpLDImYSYmKE1lKCJAcGFyZW50Iix2b2lk''@;'; put 'put ''IDApKCJuZ1N3aXRjaCIsZC5zdGF0ZSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkxPQURJTkcpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUNDRVNTKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUuREVGQVVMVCkpfSxk''@;'; put 'put ''ZXBlbmRlbmNpZXM6W1MyLGNwXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlt5aCgicGFyZW50IixbaXUoIjplbnRlciIsW10pXSkseWgoImRlZmF1bHRCdXR0b24iLFtpdSgiOmVudGVyIixbdXMoe29wYWNpdHk6MH0pLE0wKCIyMDBtcyAxMDBtcyBlYXNlLWluIix1cyh7b3Bh''@;'; put 'put ''Y2l0eToxfSkpXSksaXUoIjpsZWF2ZSIsW3VzKHtvcGFjaXR5OjB9KV0pXSkseWgoInNwaW5uZXIiLFtpdSgiOmVudGVyIixbdXMoe29wYWNpdHk6MH0pLE0wKCIyMDBtcyAxMDBtcyBlYXNlLWluIix1cyh7b3BhY2l0eToxfSkpXSksaXUoIjpsZWF2ZSIsW3VzKHtvcGFjaXR5OjF9KSxNMCgi''@;'; put 'put ''MTAwbXMgZWFzZS1vdXQiLHVzKHtvcGFjaXR5OjB9KSldKV0pLHloKCJ2YWxpZGF0ZWQiLFtpdSgiOmVudGVyIixbTTAoIjYwMG1zIix1UGUoW3VzKHt0cmFuc2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSksdXMoe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSx1cyh7dHJhbnNmb3JtOiJzY2Fs''@;'; put 'put ''ZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksdXMoe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSx1cyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEpIixvZmZzZXQ6MX0pXSkpXSksaXUoIjpsZWF2ZSIsW3VzKHtvcGFjaXR5OjF9KSxNMCgiMTAwbXMgZWFzZS1vdXQiLHVzKHtvcGFj''@;'; put 'put ''aXR5OjB9KSldKV0pXX19KSxjfSkoKSxzVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCksbFVlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhUMGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltzVWUsYVVlXX0pLGN9KSgpLGNVZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7fSxlbmNhcHN1bGF0aW9uOjJ9''@;'; put 'put ''KSxjfSkoKSxCeD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHt9KSxjfSkoKSx1VWU9MCxDaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp''@;'; put 'put ''cy5faWQ9ImNsci1mb3JtLWNvbnRyb2wtIisgKyt1VWUsdGhpcy5faWRDaGFuZ2U9bmV3IGVpKHRoaXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5faWRDaGFuZ2UubmV4dChhKX1nZXQgaWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faWRD''@;'; put 'put ''aGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGRVZT0wLHA3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlz''@;'; put 'put ''Ll9pZD0iY2xyLWZvcm0tY29udGFpbmVyLSIrICsrZFVlLHRoaXMuX2lkQ2hhbmdlPW5ldyBlaSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuX2lkQ2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lk''@;'; put 'put ''Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtsZXQgRlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3Ro''@;'; put 'put ''aXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImFic3RyYWN0In1nZXQgaWQoKXtyZXR1cm4gdGhpcy5jb250YWluZXJJZFNlcnZpY2U/YCR7dGhpcy5jb250YWluZXJJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9s''@;'; put 'put ''SWRTdWZmaXh9YDp0aGlzLmNvbnRyb2xJZFNlcnZpY2U/YCR7dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ2gsOCksR2UocDcsOCkpfSxjLlx1''@;'; put 'put ''MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCksaFVlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGWXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iZXJyb3IifX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDaCw4KSxHZShwNyw4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLWVycm9yIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZh''@;'; put 'put ''JiYoaHIoImlkIixkLmlkKSxUcigiY2xyLXN1YnRleHQiLCEwKSgiZXJyb3IiLCEwKSl9LGZlYXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9''@;'; put 'put ''KSgpLGpMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGWXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iaGVscGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ2gsOCksR2UocDcsOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1oZWxwZXIiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiaWQiLGQuaWQpLFRyKCJj''@;'; put 'put ''bHItc3VidGV4dCIsITApKX0sZmVhdHVyZXM6W3dhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZjE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3RoaXMuX2FkZGl0aW9uYWxDb250cm9scz1bXSx0aGlzLl9jb250cm9sQ2hhbmdlcz1uZXcgV24sdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcz1uZXcgV24sdGhpcy5faGVscGVycz1uZXcgV259Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5fY29udHJvbH1nZXQgY29udHJvbENo''@;'; put 'put ''YW5nZXMoKXtyZXR1cm4gdGhpcy5fY29udHJvbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGFkZGl0aW9uYWxDb250cm9scygpe3JldHVybiB0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHN9Z2V0IGFkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fYWRkaXRpb25hbENv''@;'; put 'put ''bnRyb2xzQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgaGFzQWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuISF0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHM/Lmxlbmd0aH1nZXQgaGVscGVyc0NoYW5nZSgpe3JldHVybiB0aGlzLl9oZWxwZXJzLmFzT2JzZXJ2YWJsZSgpfXNldENvbnRyb2wo''@;'; put 'put ''YSl7dGhpcy5fY29udHJvbD1hLHRoaXMuX2NvbnRyb2xDaGFuZ2VzLm5leHQoYSl9YWRkQWRkaXRpb25hbENvbnRyb2woYSl7dGhpcy5fYWRkaXRpb25hbENvbnRyb2xzLnB1c2goYSksdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5uZXh0KHRoaXMuX2FkZGl0aW9uYWxDb250cm9s''@;'; put 'put ''cyl9c2V0SGVscGVycyhhKXt0aGlzLl9oZWxwZXJzLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBBZD1mdW5jdGlvbihjKXtyZXR1''@;'; put 'put ''cm4gYy5OT05FPSJOT05FIixjLlZBTElEPSJWQUxJRCIsYy5JTlZBTElEPSJJTlZBTElEIixjfShBZHx8e30pO2xldCBrZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZVN1YmplY3Q9bmV3IFduLHRoaXMuc3RhdHVzQ2hhbmdlcz10aGlzLmdl''@;'; put 'put ''dFN0YXR1c0NoYW5nZXMoYSkucGlwZShJMGUoMSkpfXRyaWdnZXJTdGF0dXNDaGFuZ2UoKXt0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0Lm5leHQoKX1nZXRTdGF0dXNDaGFuZ2VzKGEpe3JldHVybiBxOChbYS5jb250cm9sQ2hhbmdlcyxhLmFkZGl0aW9uYWxDb250cm9sc0NoYW5n''@;'; put 'put ''ZXMucGlwZSh4MihbXSkpXSkucGlwZShWMSgoW2QsaF0pPT57aWYoZCl7Y29uc3QgZj1bZCwuLi5oXTtyZXR1cm4gX3gocTgoZi5tYXAodj0+di5zdGF0dXNDaGFuZ2VzKSksdGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlU3ViamVjdC5waXBlKExyKCgpPT5mLm1hcCh2PT52LnN0YXR1cykpKSl9''@;'; put 'put ''cmV0dXJuIE0yfSksTHIoZD0+ZC5pbmNsdWRlcyhBZC5JTlZBTElEKT9BZC5JTlZBTElEOmQuaW5jbHVkZXMoQWQuVkFMSUQpP0FkLlZBTElEOkFkLk5PTkUpLHgyKEFkLk5PTkUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoZjEpKX0sYy5c''@;'; put 'put ''dTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjbGFzcyB6THt9ZnVuY3Rpb24gWjFlKGMpe3JldHVybltjLHtwcm92aWRlOnpMLHVzZUV4aXN0aW5nOmN9XX1mdW5jdGlvbiBXMWUoYyxsLGEpe3JldHVybiBYdC5jcmVhdGUoZD0+e2woZCk7Y29uc3Qg''@;'; put 'put ''aD1jLnN1YnNjcmliZShkKTtyZXR1cm4oKT0+e2gudW5zdWJzY3JpYmUoKSxhJiZhKGQpfX0pfWxldCBVTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yZW5kZXJlcj1hLHRoaXMucGFyZW50PWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5mb2N1c1NlcnZp''@;'; put 'put ''Y2U9Zix0aGlzLnBsYXRmb3JtSWQ9dix0aGlzLmlkPU11KCksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExLHRoaXMuX3VubGlzdGVuRnVuY3M9W10sdGhpcy5yZXNldENoaWxkcmVuKCksdGhpcy5tb3ZlVG9GaXJzdEl0ZW1XaGVuT3BlbigpLGR8fHRoaXMuaGFuZGxlUm9v''@;'; put 'put ''dEZvY3VzKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dyaWdodCIsZD0+dGhpcy50''@;'; put 'put ''b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpOih0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3VwIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5w''@;'; put 'put ''dXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dkb3duIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5mb2N1c1NlcnZpY2UubGlzdGVuVG9BcnJvd0tleXMoYSkpfWdldCBjb250YWluZXIoKXtyZXR1cm4gdGhpcy5fY29udGFp''@;'; put 'put ''bmVyfXNldCBjb250YWluZXIoYSl7dGhpcy5fY29udGFpbmVyPWEsdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24udGFiIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5wYXJlbnQ/dGhpcy5fdW5s''@;'; put 'put ''aXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZSh3aC5MRUZUKSxkLnN0b3BQcm9wYWdhdGlvbigpfSkpOih0aGlzLmZvY3VzU2VydmljZS5yZWdpc3RlckNvbnRhaW5lcihhKSx0aGlzLl91bmxp''@;'; put 'put ''c3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuY2hp''@;'; put 'put ''bGRyZW4ucGlwZShZZigxKSkuc3Vic2NyaWJlKGY9PmYuZm9yRWFjaCh2PT52LmJsdXIoKSkpO2NvbnN0IGg9ZC5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O2gmJnRsKHRoaXMucGxhdGZvcm1JZCkmJihhLmNvbnRhaW5zKGgpfHxoPT09dGhpcy50cmlnZ2VyKXx8KHRo''@;'; put 'put ''aXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0hMSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGE9PmEoKSksdGhpcy5mb2N1c1NlcnZpY2UuZGV0YWNoTGlzdGVuZXJzKCl9bW92ZVRvRmlyc3RJ''@;'; put 'put ''dGVtV2hlbk9wZW4oKXtjb25zdCBhPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShkPT57ZCYmdGhpcy50b2dnbGVTZXJ2aWNlLm9yaWdpbmFsRXZlbnQmJnNldFRpbWVvdXQoKCk9Pnt0aGlzLmZvY3VzU2VydmljZS5tb3ZlVG8odGhpcyksdGhpcy5mb2N1c1NlcnZp''@;'; put 'put ''Y2UubW92ZSh0aGlzLnBhcmVudD93aC5SSUdIVDp3aC5ET1dOKX0pfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKCgpPT5hLnVuc3Vic2NyaWJlKCkpfWhhbmRsZVJvb3RGb2N1cygpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkfHwodGhp''@;'; put 'put ''cy5mb2N1c1NlcnZpY2UucmVzZXQodGhpcyksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkJiZ0aGlzLmZvY3VzKCkpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD1kfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKCgpPT5hLnVuc3Vic2NyaWJlKCkpfWZvY3Vz''@;'; put 'put ''KCl7dGhpcy50cmlnZ2VyJiZ0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuZm9jdXMoKX1ibHVyKCl7dGhpcy50cmlnZ2VyJiZ0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuYmx1cigpfWFjdGl2YXRlKCl7dGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2Vy''@;'; put 'put ''LmNsaWNrKCl9cmVzZXRDaGlsZHJlbigpe3RoaXMuY2hpbGRyZW49bmV3IHl4KDEpLHRoaXMucGFyZW50P3RoaXMucmlnaHQ9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKExyKGE9PmFbMF0pKToodGhpcy5kb3duPXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShMcihhPT5h''@;'; put 'put ''WzBdKSksdGhpcy51cD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoTHIoYT0+YVthLmxlbmd0aC0xXSkpKX1hZGRDaGlsZHJlbihhKXtPWS5saW5rVmVydGljYWwoYSksdGhpcy5wYXJlbnQmJk9ZLmxpbmtQYXJlbnQoYSx0aGlzLmNsb3NlQW5kR2V0VGhpcygpLHdoLkxFRlQpLHRo''@;'; put 'put ''aXMuY2hpbGRyZW4ubmV4dChhKX1vcGVuQW5kR2V0Q2hpbGRyZW4oKXtyZXR1cm4gVzFlKHRoaXMuY2hpbGRyZW4sKCk9PnRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1jbG9zZUFuZEdldFRoaXMoKXtyZXR1cm4gVzFlKGZvKHRoaXMpLCgpPT50aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0h''@;'; put 'put ''MSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEVvKSx4cihjLDEyKSx4cihzYykseHIod3ApLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgZlVlPVoxZShVTCk7bGV0''@;'; put 'put ''IGp4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2VzPW5ldyBXbn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWNsb3NlTWVudXMoKXt0aGlzLl9jaGFuZ2VzLm5leHQoITEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBnVWU9e3Byb3ZpZGU6angsdXNlRmFjdG9yeTpmdW5jdGlvbiBwVWUoYyl7cmV0dXJuIGN8fG5ldyBqeH0sZGVwczpbW25ldyBJMSxuZXcgbGQs''@;'; put 'put ''anhdXX07bGV0IHNnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnBhcmVudD1hLHRoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuZm9jdXNIYW5kbGVyPWgsdGhpcy5pc01lbnVDbG9zYWJsZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b25zLnB1c2godi5jaGFuZ2VzLnN1YnNjcmliZShNPT5kLm9wZW49TSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9PmYubWFya0ZvckNoZWNrKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJz''@;'; put 'put ''Y3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGMsMTIpLEdlKHNjKSxHZShVTCksR2UoRXMpLEdlKGp4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RC''@;'; put 'put ''aW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRyb3Bkb3duIiwhMCkoIm9wZW4iLGQudG9nZ2xlU2VydmljZS5vcGVuKX0saW5wdXRzOntpc01lbnVDbG9zYWJsZTpbTm4uTm9uZSwiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCJpc01lbnVDbG9zYWJsZSJdfSxmZWF0dXJlczpbZGEo''@;'; put 'put ''W2dVZSxWMWUsZlVlXSksdmQoW29nXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgQWk9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SSUdIVF9D''@;'; put 'put ''RU5URVI9MF09IlJJR0hUX0NFTlRFUiIsY1tjLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixjW2MuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGNbYy5UT1BfQ0VOVEVSPTNdPSJUT1BfQ0VOVEVSIixjW2MuVE9QX1JJR0hUPTRdPSJUT1BfUklHSFQiLGNbYy5UT1BfTEVGVD01XT0i''@;'; put 'put ''VE9QX0xFRlQiLGNbYy5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixjW2MuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGNbYy5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xFRlQiLGNbYy5MRUZUX0NFTlRFUj05XT0iTEVGVF9DRU5URVIiLGNbYy5MRUZUX1RPUD0xMF09''@;'; put 'put ''IkxFRlRfVE9QIixjW2MuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsY30oQWl8fHt9KTtjbGFzcyBiVWV7Y29uc3RydWN0b3IobCl7dGhpcy5lbGVtZW50PWwsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXI9dGhpcy5lbWl0U2Nyb2xsRXZlbnQuYmluZCh0aGlzKSx0aGlzLnNjcm9s''@;'; put 'put ''bGFibGVFbGVtZW50cz1bXSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC5zdHlsZS50b3A9MCxsLnN0eWxlLmJvdHRvbT0iYXV0byIsbC5zdHlsZS5sZWZ0PTAsbC5zdHlsZS5yaWdodD0iYXV0byJ9YW5jaG9yKGwsYSxkLHtvZmZzZXRYOmg9MCxvZmZzZXRZOmY9MCx1c2VBbmNob3JQ''@;'; put 'put ''YXJlbnQ6dj0hMX09e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCksdiYmKGw9bC5wYXJlbnROb2RlKSxsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IE09bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxEPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo''@;'; put 'put ''KTtsZXQgWj1NLmxlZnQtRC5sZWZ0K2gscmU9TS50b3AtRC50b3ArZjtzd2l0Y2goYSl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9MRUZUOmJyZWFrO2Nhc2UgQWkuVE9QX0NFTlRFUjpaKz1NLndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5UT1BfUklHSFQ6Y2FzZSBBaS5SSUdIVF9UT1A6''@;'; put 'put ''Wis9TS53aWR0aDticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6cmUrPU0uaGVpZ2h0O2JyZWFrO2Nhc2UgQWkuQk9UVE9NX0NFTlRFUjpyZSs9TS5oZWlnaHQsWis9TS53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuQk9UVE9NX1JJR0hUOmNhc2UgQWkuUklHSFRf''@;'; put 'put ''Qk9UVE9NOnJlKz1NLmhlaWdodCxaKz1NLndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9DRU5URVI6cmUrPU0uaGVpZ2h0LzI7YnJlYWs7Y2FzZSBBaS5SSUdIVF9DRU5URVI6cmUrPU0uaGVpZ2h0LzIsWis9TS53aWR0aH1zd2l0Y2goZCl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9M''@;'; put 'put ''RUZUOmJyZWFrO2Nhc2UgQWkuVE9QX0NFTlRFUjpaLT1ELndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5UT1BfUklHSFQ6Y2FzZSBBaS5SSUdIVF9UT1A6Wi09RC53aWR0aDticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6cmUtPUQuaGVpZ2h0O2JyZWFrO2Nhc2Ug''@;'; put 'put ''QWkuQk9UVE9NX0NFTlRFUjpyZS09RC5oZWlnaHQsWi09RC53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuQk9UVE9NX1JJR0hUOmNhc2UgQWkuUklHSFRfQk9UVE9NOnJlLT1ELmhlaWdodCxaLT1ELndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9DRU5URVI6cmUtPUQuaGVpZ2h0LzI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSBBaS5SSUdIVF9DRU5URVI6cmUtPUQuaGVpZ2h0LzIsWi09RC53aWR0aH1jb25zdCBjZT1nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCksYmU9cGFyc2VJbnQoY2UubWFyZ2luTGVmdCwxMCksRWU9cGFyc2VJbnQoY2UubWFyZ2luUmlnaHQsMTApLEJlPXBhcnNlSW50KGNlLm1hcmdp''@;'; put 'put ''blRvcCwxMCkscWU9cGFyc2VJbnQoY2UubWFyZ2luQm90dG9tLDEwKTtzd2l0Y2goYSl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9MRUZUOmNhc2UgQWkuVE9QX1JJR0hUOmNhc2UgQWkuUklHSFRfVE9QOihkPT09QWkuQk9UVE9NX1JJR0hUfHxkPT09QWkuUklHSFRfQk9UVE9NKSYm''@;'; put 'put ''KHJlLT1xZSxaLT1FZSksKGQ9PT1BaS5CT1RUT01fTEVGVHx8ZD09PUFpLkxFRlRfQk9UVE9NKSYmKHJlLT1CZSxaKz1iZSksKGQ9PT1BaS5UT1BfTEVGVHx8ZD09PUFpLkxFRlRfVE9QKSYmKHJlKz1CZSxaKz1iZSksKGQ9PT1BaS5UT1BfUklHSFR8fGQ9PT1BaS5SSUdIVF9UT1ApJiYocmUr''@;'; put 'put ''PUJlLFotPUVlKTticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6Y2FzZSBBaS5CT1RUT01fUklHSFQ6Y2FzZSBBaS5SSUdIVF9CT1RUT006KGQ9PT1BaS5CT1RUT01fTEVGVHx8ZD09PUFpLkxFRlRfQk9UVE9NKSYmKHJlLT1xZSxaKz1iZSksKGQ9PT1BaS5C''@;'; put 'put ''T1RUT01fUklHSFR8fGQ9PT1BaS5SSUdIVF9CT1RUT00pJiYocmUtPXFlLFotPUVlKSwoZD09PUFpLlRPUF9MRUZUfHxkPT09QWkuTEVGVF9UT1ApJiYocmUrPUJlLForPWJlKSwoZD09PUFpLlRPUF9SSUdIVHx8ZD09PUFpLlJJR0hUX1RPUCkmJihyZSs9QmUsWi09RWUpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''QWkuVE9QX0NFTlRFUjpyZS09cWUsWis9YmUsWi09RWU7YnJlYWs7Y2FzZSBBaS5CT1RUT01fQ0VOVEVSOnJlKz1CZSxaKz1iZSxaLT1FZTticmVhaztjYXNlIEFpLkxFRlRfQ0VOVEVSOnJlKz1CZSxyZS09cWUsWi09RWU7YnJlYWs7Y2FzZSBBaS5SSUdIVF9DRU5URVI6cmUrPUJlLHJlLT1x''@;'; put 'put ''ZSxaKz1iZX1yZXR1cm4gdGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoWil9cHgpIHRyYW5zbGF0ZVkoJHtNYXRoLnJvdW5kKHJlKX1weClgLHRoaXMuX3Njcm9sbC5hc09ic2VydmFibGUoKX1yZWxlYXNlKCl7dGhpcy5lbGVtZW50LnN0eWxl''@;'; put 'put ''LnRyYW5zZm9ybT0iIix0aGlzLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl9aXNQb3NpdGlvbmVkKGwpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKS5wb3NpdGlvbjtyZXR1cm4icmVsYXRpdmUiPT09YXx8ImFic29sdXRlIj09PWF8fCJmaXhlZCI9PT1hfWVtaXRTY3JvbGxFdmVu''@;'; put 'put ''dCgpe3RoaXMuX3Njcm9sbC5uZXh0KCl9YWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fc2Nyb2xsPW5ldyBXbjtjb25zdCBhPWw7bGV0IGQ9bDtmb3IoO2QmJmQhPT1kb2N1bWVudCYmKHRoaXMuc2Nyb2xscyhkKSYmKGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmJv''@;'; put 'put ''dW5kT25TY3JvbGxMaXN0ZW5lciksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMucHVzaChkKSksZD09PWF8fCF0aGlzLmlzUG9zaXRpb25lZChkKSk7KWQ9ZC5wYXJlbnROb2RlfXJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5zY3JvbGxhYmxlRWxlbWVu''@;'; put 'put ''dHMpbC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9zY3JvbGwmJih0aGlzLl9zY3JvbGwuY29tcGxldGUoKSxkZWxldGUgdGhpcy5fc2Nyb2xsKX1zY3JvbGxzKGwp''@;'; put 'put ''e2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKTtyZXR1cm4ic2Nyb2xsIj09PWEub3ZlcmZsb3dYfHwiYXV0byI9PT1hLm92ZXJmbG93WHx8InNjcm9sbCI9PT1hLm92ZXJmbG93WXx8ImF1dG8iPT09YS5vdmVyZmxvd1l9fWNvbnN0IEsxZT0iaXMtb2ZmLXNjcmVlbiI7bGV0IEhZPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnBhcmVudEhvc3Q9ZCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITEsdGhpcy5wb3BvdmVyT3B0aW9ucz17fSx0aGlzLnVwZGF0ZUFuY2hvcj0hMSx0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9bnVsbCx0aGlzLmNsb3NlT25PdXRzaWRl''@;'; put 'put ''Q2xpY2tDYWxsYmFjaz1oPT57dGhpcy5hbmNob3JFbGVtLmNvbnRhaW5zKGgudGFyZ2V0KXx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sdGhpcy5lbD1hLmdldChKaSksdGhpcy50b2dnbGVTZXJ2aWNlPWEuZ2V0KHNjKSx0aGlzLnJlbmRlcmVyPWEuZ2V0KEVvKSx0aGlzLm5nWm9u''@;'; put 'put ''ZT1hLmdldChXYSksdGhpcy5yZWY9YS5nZXQoRXMpLHRoaXMuYW5jaG9yRWxlbT1kLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3BvdmVySW5zdGFuY2U9bmV3IGJVZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnBp''@;'; put 'put ''cGUoeDIodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4pKS5zdWJzY3JpYmUoaD0+e2g/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpLHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEsxZSkpOih0aGlzLnJlbGVhc2UoKSx0aGlzLmRl''@;'; put 'put ''dGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSzFlKSl9KSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmKHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVw''@;'; put 'put ''ZGF0ZUFuY2hvciYmKHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNlLmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZp''@;'; put 'put ''Y2Uub3Blbj0hMX0pLHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1y''@;'; put 'put ''ZWxlYXNlKCl7dGhpcy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zlckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigpe3RoaXMucG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1''@;'; put 'put ''bGFyKCgpPT57dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsImtleWRvd24iLGE9PnthJiZhLmtleSYmSTIoYS5rZXkpPT09Z2EuRXNjYXBlJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlz''@;'; put 'put ''LnJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcigpLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMu''@;'; put 'put ''Y2xvc2VPbk91dHNpZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNp''@;'; put 'put ''ZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHMpLEdlKEppLDQpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpLGc3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBIWXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNs''@;'; put 'put ''ci1kcm9wZG93bi1tZW51IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIoYSxkKSxoPyh0aGlzLmFuY2hvclBvaW50PUFpLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUCk6KHRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9N''@;'; put 'put ''X0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hh''@;'; put 'put ''bmRsZXI9Zn1zZXQgcG9zaXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5UT1BfTEVGVCx0''@;'; put 'put ''aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQ''@;'; put 'put ''b2ludD1BaS5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1BaS5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJyaWdodC1ib3R0b20iOnRoaXMuYW5j''@;'; put 'put ''aG9yUG9pbnQ9QWkuUklHSFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRo''@;'; put 'put ''aXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUo''@;'; put 'put ''KCk9PnRoaXMuZm9jdXNIYW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVzZXRDaGlsZHJlbigpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoTkwsOCksR2UoYywxMiksR2UoVUwpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEm''@;'; put 'put ''YSYmYW8oaCx6TCw0KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLml0ZW1zPWYpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigicm9sZSIsIm1lbnUiKSxUcigiZHJvcGRvd24tbWVudSIsITApKX0saW5wdXRzOntwb3NpdGlvbjpbTm4uTm9uZSwi''@;'; put 'put ''Y2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdfSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxtNz0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoLGYpe3RoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuaXNSb290TGV2ZWxUb2dnbGU9ITAsYS5wYXJlbnQmJih0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSExKSxmLnRyaWdnZXI9aC5uYXRpdmVFbGVtZW50fWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNl''@;'; put 'put ''Lm9wZW59b25Ecm9wZG93blRyaWdnZXJDbGljayhhKXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzZyksR2Uoc2MpLEdlKEppKSxHZShVTCkpfSxjLlx1MDI3NWRpcj1Fcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93blRyaWdnZXIiLCIiXSxbIiIsImNsckRyb3Bkb3duVG9nZ2xlIiwiIl1dLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRyb3Bkb3duVHJp''@;'; put 'put ''Z2dlckNsaWNrKGYpfSksMiZhJiYoaHIoImFyaWEtaGFzcG9wdXAiLCJtZW51IikoImFyaWEtZXhwYW5kZWQiLGQuYWN0aXZlKSxUcigiZHJvcGRvd24tdG9nZ2xlIixkLmlzUm9vdExldmVsVG9nZ2xlKSgiZHJvcGRvd24taXRlbSIsIWQuaXNSb290TGV2ZWxUb2dnbGUpKCJleHBhbmRhYmxl''@;'; put 'put ''IiwhZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImFjdGl2ZSIsZC5hY3RpdmUpKX19KSxjfSkoKTtjb25zdCB5VWU9W3twcm92aWRlOnpMLHVzZUNsYXNzOigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5wbGF0Zm9ybUlkPWgsdGhp''@;'; put 'put ''cy5pZD1NdSgpLHRoaXMuZGlzYWJsZWQ9ITEsZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJpZCIsdGhpcy5pZCksZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIil9Zm9jdXMoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJlci5z''@;'; put 'put ''ZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIjAiKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgiLGJsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJl''@;'; put 'put ''c3QifSkpfWJsdXIoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmJsdXIoKSl9YWN0aXZhdGUoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0''@;'; put 'put ''aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoSmkpLHhyKEVvKSx4cihpbykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpfV07bGV0IFZ5PSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZHJvcGRvd249YSx0aGlzLl9kcm9wZG93blNlcnZpY2U9ZCx0aGlzLmZvY3VzYWJsZUl0ZW09aH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLmZv''@;'; put 'put ''Y3VzYWJsZUl0ZW0uZGlzYWJsZWQ9ISFhfHwiIj09PWF9Z2V0IGRyb3Bkb3duSXRlbUlkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5pZH1zZXQgZHJvcGRvd25JdGVtSWQoYSl7dGhpcy5mb2N1c2FibGVJdGVtLmlkPWF9b25Ecm9wZG93bkl0ZW1DbGljaygpe2lmKHRoaXMuZHJvcGRv''@;'; put 'put ''d24uaXNNZW51Q2xvc2FibGUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLmRyb3Bkb3duLnRvZ2dsZVNlcnZpY2Uub3Blbil7Y29uc3QgYT10aGlzLmZpbmRSb290RHJvcGRvd24oKTthLmZvY3VzSGFuZGxlci5mb2N1cygpLGEuZm9jdXNIYW5kbGVyLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9z''@;'; put 'put ''ZWQ9ITF9c2V0VGltZW91dCgoKT0+e3RoaXMuZHJvcGRvd24uaXNNZW51Q2xvc2FibGUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9kcm9wZG93blNlcnZpY2UuY2xvc2VNZW51cygpfSl9b25TcGFjZUtleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRpc2FibGVkKGEp''@;'; put 'put ''fW9uRW50ZXJLZXlkb3duKGEpe3RoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChhKX1zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRpc2FibGVkKGEpe3RoaXMuZGlzYWJsZWQmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9''@;'; put 'put ''ZmluZFJvb3REcm9wZG93bigpe2xldCBhPXRoaXMuZHJvcGRvd247Zm9yKDthLnBhcmVudDspYT1hLnBhcmVudDtyZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2cpLEdlKGp4KSxHZSh6TCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93bkl0ZW0iLCIiXV0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRyb3Bkb3duSXRlbUNsaWNrKCl9KSgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24o''@;'; put 'put ''Zil7cmV0dXJuIGQub25TcGFjZUtleWRvd24oZil9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25FbnRlcktleWRvd24oZil9KSwyJmEmJihocigicm9sZSIsIm1lbnVpdGVtIikoImFyaWEtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJpZCIsZC5kcm9wZG93bkl0ZW1J''@;'; put 'put ''ZCksVHIoImRpc2FibGVkIixkLmRpc2FibGVkKSgiZHJvcGRvd24taXRlbSIsITApKX0saW5wdXRzOntkaXNhYmxlZDpbTm4uTm9uZSwiY2xyRGlzYWJsZWQiLCJkaXNhYmxlZCJdLGRyb3Bkb3duSXRlbUlkOltObi5Ob25lLCJpZCIsImRyb3Bkb3duSXRlbUlkIl19LGZlYXR1cmVzOltkYShb''@;'; put 'put ''eVVlXSldfSksY30pKCksTlk9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsTzIsQXNdfSksY30pKCksVlk9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tzZXQgdHJpZ2dlckVsKGEpe3RoaXMuX3RyaWdnZXJFbD1hfWZvY3VzVHJpZ2dlcigpe3RoaXMuX3RyaWdnZXJFbCYmdGhpcy5fdHJpZ2dlckVsLmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2Vu''@;'; put 'put ''OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEJZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD1uZXcgV259Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkLmFzT2JzZXJ2YWJsZSgpfXNldElkKGEpe3RoaXMuX2lkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFpMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMuZWw9ZCx0aGlzLnNpZ25w''@;'; put 'put ''b3N0SWRTZXJ2aWNlPWgsdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj1mLHRoaXMucGxhdGZvcm1JZD1NLHRoaXMuYXJpYUV4cGFuZGVkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PXZ9bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdnZXJF''@;'; put 'put ''bD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmFyaWFFeHBhbmRlZD1hO2NvbnN0IGQ9dGhpcy5pc09wZW47dGhpcy5pc09wZW49YSwhdGhpcy5pc09wZW4mJmQmJnRo''@;'; put 'put ''aXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLmlkLnN1YnNjcmliZShhPT50aGlzLmFyaWFDb250cm9sPWEpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25TaWducG9zdFRyaWdnZXJDbGljayhh''@;'; put 'put ''KXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfWZvY3VzT25DbG9zZSgpe3RsKHRoaXMucGxhdGZvcm1JZCkmJiF0aGlzLmlzT3BlbiYmdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5kb2N1bWVudC5ib2R5JiZ0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2Vy''@;'; put 'put ''LmZvY3VzVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYyksR2UoSmkpLEdlKEJZKSxHZShWWSksR2UodnMpLEdlKGlvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclNpZ25wb3N0VHJpZ2dl''@;'; put 'put ''ciIsIiJdXSxob3N0QXR0cnM6WzEsInNpZ25wb3N0LXRyaWdnZXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblNpZ25wb3N0VHJpZ2dlckNsaWNrKGYpfSksMiZhJiYoaHIoImFyaWEtZXhwYW5k''@;'; put 'put ''ZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJvbCksVHIoImFjdGl2ZSIsZC5pc09wZW4pKX19KSxjfSkoKSxXTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hMX1zZXQg''@;'; put 'put ''Y3VzdG9tVHJpZ2dlcihhKXt0aGlzLnVzZUN1c3RvbVRyaWdnZXI9ISFhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2lnbnBvc3QiXV0sY29udGVudFF1ZXJp''@;'; put 'put ''ZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxaTCw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmN1c3RvbVRyaWdnZXI9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoInNpZ25wb3N0IiwhMCl9LGlucHV0czp7c2lnbnBv''@;'; put 'put ''c3RUcmlnZ2VyQXJpYUxhYmVsOltObi5Ob25lLCJjbHJTaWducG9zdFRyaWdnZXJBcmlhTGFiZWwiLCJzaWducG9zdFRyaWdnZXJBcmlhTGFiZWwiXX0sZmVhdHVyZXM6W2RhKFtWWSxCWV0pLHZkKFtvZ10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltb''@;'; put 'put ''NCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic2lnbnBvc3QtYWN0aW9uIiwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tbGluayJdLFsic2hhcGUiLCJpbmZvLWNpcmNsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNh''@;'; put 'put ''KCksZ3QoMCxFSGUsMywyLCJuZy1jb250YWluZXIiLDApLFlyKDEpKSwyJmEmJk1lKCJuZ0lmIiwhZC51c2VDdXN0b21UcmlnZ2VyKX0sZGVwZW5kZW5jaWVzOltiYSxycyxaTF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgX1VlPXsidG9wLWxlZnQiOnthbmNob3JQb2ludDpBaS5U''@;'; put 'put ''T1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5CT1RUT01fUklHSFQsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwidG9wLW1pZGRsZSI6e2FuY2hvclBvaW50OkFpLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkJPVFRPTV9DRU5URVIsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwidG9wLXJpZ2h0''@;'; put 'put ''Ijp7YW5jaG9yUG9pbnQ6QWkuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuQk9UVE9NX0xFRlQsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwicmlnaHQtdG9wIjp7YW5jaG9yUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5MRUZUX0JPVFRPTSxvZmZzZXRZOjAsb2Zmc2V0''@;'; put 'put ''WDoxNn0sInJpZ2h0LW1pZGRsZSI6e2FuY2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJyaWdodC1ib3R0b20iOnthbmNob3JQb2ludDpBaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRf''@;'; put 'put ''VE9QLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwiYm90dG9tLXJpZ2h0Ijp7YW5jaG9yUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuVE9QX0xFRlQsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJib3R0b20tbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixw''@;'; put 'put ''b3BvdmVyUG9pbnQ6QWkuVE9QX0NFTlRFUixvZmZzZXRZOjE2LG9mZnNldFg6MH0sImJvdHRvbS1sZWZ0Ijp7YW5jaG9yUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuVE9QX1JJR0hULG9mZnNldFk6MTYsb2Zmc2V0WDowfSwibGVmdC1ib3R0b20iOnthbmNob3JQb2lu''@;'; put 'put ''dDpBaS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuUklHSFRfVE9QLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sImxlZnQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLlJJR0hUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LCJsZWZ0''@;'; put 'put ''LXRvcCI6e2FuY2hvclBvaW50OkFpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5SSUdIVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6LTE2fSxkZWZhdWx0OnthbmNob3JQb2ludDpBaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRfQ0VOVEVSLG9mZnNldFk6MCxvZmZz''@;'; put 'put ''ZXRYOjE2fX0sd1VlPVsidG9wLWxlZnQiLCJ0b3AtbWlkZGxlIiwidG9wLXJpZ2h0IiwicmlnaHQtdG9wIiwicmlnaHQtbWlkZGxlIiwicmlnaHQtYm90dG9tIiwiYm90dG9tLXJpZ2h0IiwiYm90dG9tLW1pZGRsZSIsImJvdHRvbS1sZWZ0IiwibGVmdC1ib3R0b20iLCJsZWZ0LW1pZGRsZSIs''@;'; put 'put ''ImxlZnQtdG9wIl07bGV0IHExZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSFl7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7aWYoc3VwZXIoYSxkKSx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPXYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5zaWducG9z''@;'; put 'put ''dENvbnRlbnRJZD1NdSgpLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXNpZ25wb3N0LWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItc2lnbnBvc3QiKTt0aGlzLnBvc2l0aW9uPSJyaWdodC1taWRkbGUiLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCxmLnNl''@;'; put 'put ''dElkKHRoaXMuc2lnbnBvc3RDb250ZW50SWQpLHRoaXMuZG9jdW1lbnQ9RH1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pLHRoaXMu''@;'; put 'put ''X3Bvc2l0aW9uPWEmJndVZS5pbmRleE9mKGEpPi0xP2E6InJpZ2h0LW1pZGRsZSIsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbik7Y29uc3QgZD1fVWVbdGhpcy5wb3NpdGlvbl07dGhpcy5hbmNob3JQb2ludD1kLmFuY2hvclBvaW50''@;'; put 'put ''LHRoaXMucG9wb3ZlclBvaW50PWQucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WT1kLm9mZnNldFksdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRYPWQub2Zmc2V0WH1jbG9zZSgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW5nT25EZXN0cm95KCl7c3VwZXIu''@;'; put 'put ''bmdPbkRlc3Ryb3koKSx0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHMpLEdlKE5MLDgpLEdlKGlzKSxHZShCWSksR2UoVlkpLEdlKGlvKSxHZSh2cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2lnbnBvc3QtY29udGVudCJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihhLGQpezImYSYmKG9wKCJpZCIsZC5zaWducG9zdENvbnRlbnRJZCksVHIoInNpZ25wb3N0LWNvbnRlbnQiLCEwKSl9LGlucHV0czp7c2lnbnBvc3RDbG9zZUFyaWFMYWJlbDpbTm4uTm9uZSwiY2xyU2lnbnBvc3RDbG9zZUFyaWFMYWJlbCIsInNpZ25wb3N0Q2xvc2VBcmlhTGFiZWwiXSxw''@;'; put 'put ''b3NpdGlvbjpbTm4uTm9uZSwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdfSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczpBSGUsZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic2lnbnBvc3Qtd3JhcCJdLFsxLCJwb3BvdmVyLXBvaW50ZXIiXSxbMSwic2lnbnBvc3QtY29udGVu''@;'; put 'put ''dC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsInNpZ25wb3N0LWFjdGlvbiIsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXSxbInRhYmluZGV4IiwiMCIsMSwic2lnbnBvc3QtY29udGVudC1ib2R5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYo''@;'; put 'put ''c2EoVEhlKSxkZSgwLCJkaXYiLDApLEd0KDEsImRpdiIsMSksZGUoMiwiZGl2IiwyKSxZcigzKSxkZSg0LCJidXR0b24iLDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jbG9zZSgpfSksR3QoNSwiY2RzLWljb24iLDQpLGhlKCkoKSxkZSg2LCJkaXYiLDUpLFlyKDcsMSksaGUo''@;'; put 'put ''KSgpKSwyJmEmJihmZSg0KSxocigiYXJpYS1sYWJlbCIsZC5zaWducG9zdENsb3NlQXJpYUxhYmVsfHxkLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJpYS1jb250cm9scyIsZC5zaWducG9zdENvbnRlbnRJZCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5r''@;'; put 'put ''ZXlzLmNsb3NlKSl9LGRlcGVuZGVuY2llczpbcnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLENVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModngsUk9lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1''@;'; put 'put ''bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsQkwsTzJdfSksY30pKCksalk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPW5ldyBXbn1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWQuYXNPYnNlcnZhYmxlKCl9dXBkYXRlSWQoYSl7dGhp''@;'; put 'put ''cy5faWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkselk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnRvZ2dsZVNlcnZp''@;'; put 'put ''Y2U9YX1vbk1vdXNlRW50ZXJUcmlnZ2VyKCl7dGhpcy5tb3VzZU92ZXJUcmlnZ2VyPSEwLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwfW9uTW91c2VMZWF2ZVRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITEsdGhpcy5oaWRlSWZNb3VzZU91dCgpfW9uTW91c2VFbnRlckNvbnRl''@;'; put 'put ''bnQoKXt0aGlzLm1vdXNlT3ZlckNvbnRlbnQ9ITB9b25Nb3VzZUxlYXZlQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9aGlkZUlmTW91c2VPdXQoKXtzZXRUaW1lb3V0KCgpPT57IXRoaXMubW91c2VPdmVyVHJpZ2dlciYmIXRoaXMubW91''@;'; put 'put ''c2VPdmVyQ29udGVudCYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHNjKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdjc9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigidG9vbHRp''@;'; put 'put ''cCIsITApfSxmZWF0dXJlczpbZGEoW2pZLHpZXSksdmQoW29nXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBNVWU9WyJib3R0b20tbGVm''@;'; put 'put ''dCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwicmlnaHQiLCJsZWZ0Il0seFVlPVsieHMiLCJzbSIsIm1kIiwibGciXTtsZXQgYjc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEhZe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKHN1cGVyKGEsZCksdGhpcy50b29sdGlwSWRT''@;'; put 'put ''ZXJ2aWNlPWgsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWYsIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItdG9vbHRpcC1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRvb2x0aXAiKTt0aGlzLmlkPU11KCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBp''@;'; put 'put ''ZChhKXtjb25zdCBkPWF8fCIiO3RoaXMuX2lkPWQsdGhpcy50b29sdGlwSWRTZXJ2aWNlLnVwZGF0ZUlkKGQpfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7Y29uc3QgZD10aGlzLl9wb3NpdGlvbixoPU1VZS5pbmNsdWRlcyhhKT9hOiJyaWdo''@;'; put 'put ''dCI7c3dpdGNoKHRoaXMuX3Bvc2l0aW9uPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3Q2xhc3M6YHRvb2x0aXAtJHtofWB9KSxoKXtjYXNlInRvcC1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50''@;'; put 'put ''PUFpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UidG9wLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuVE9QX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9NX0NFTlRFUix0aGlz''@;'; put 'put ''LnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlImJvdHRvbS1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuUklHSFRfQ0VOVEVS''@;'; put 'put ''LHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5MRUZUX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9UT1A7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gU1VlKGMpe3Rocm93IG5ldyBFcnJvcihgVW5oYW5k''@;'; put 'put ''bGVkIHZhbHVlOiAke2N9YCl9KGgpfX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhpcy5fc2l6ZSxoPXhVZS5pbmNsdWRlcyhhKT9hOiJzbSI7dGhpcy5fc2l6ZT1oLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7ZH1g''@;'; put 'put ''LG5ld0NsYXNzOmB0b29sdGlwLSR7aH1gfSl9bmdPbkluaXQoKXt0aGlzLnNpemU9dGhpcy5zaXplfHwic20iLHRoaXMucG9zaXRpb249dGhpcy5wb3NpdGlvbnx8InJpZ2h0In1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyQ29udGVudCgpfW9u''@;'; put 'put ''TW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVDb250ZW50KCl9dXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmEsbmV3Q2xhc3M6ZH0pe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGEpLHRoaXMucmVuZGVyZXIu''@;'; put 'put ''YWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoTkwsOCksR2UoalkpLEdlKHpZKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwLWNv''@;'; put 'put ''bnRlbnQiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZlKCl9KSwyJmEmJihvcCgi''@;'; put 'put ''aWQiLGQuaWQpLGhyKCJyb2xlIiwidG9vbHRpcCIpLF9kKCJvcGFjaXR5IiwxKSxUcigidG9vbHRpcC1jb250ZW50IiwhMCkpfSxpbnB1dHM6e2lkOiJpZCIscG9zaXRpb246W05uLk5vbmUsImNsclBvc2l0aW9uIiwicG9zaXRpb24iXSxzaXplOltObi5Ob25lLCJjbHJTaXplIiwic2l6ZSJd''@;'; put 'put ''fSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx5Nz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnRvZ2ds''@;'; put 'put ''ZVNlcnZpY2U9YSx0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2U9aCx0aGlzLnN1YnM9W10sdGhpcy5zdWJzLnB1c2goZC5pZC5zdWJzY3JpYmUoZj0+dGhpcy5hcmlhRGVzY3JpYmVkQnk9ZikpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zaG93''@;'; put 'put ''VG9vbHRpcCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwfWhpZGVUb29sdGlwKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9b25Nb3VzZUVudGVyKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VFbnRlclRyaWdnZXIoKX1vbk1vdXNlTGVhdmUoKXt0aGlzLnRvb2x0''@;'; put 'put ''aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUxlYXZlVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYyksR2UoalkpLEdlKHpZKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRvb2x0aXBUcmlnZ2Vy''@;'; put 'put ''IiwiIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2hvd1Rvb2x0aXAoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmhpZGVUb29sdGlwKCl9''@;'; put 'put ''KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlRW50ZXIoKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VMZWF2ZSgpfSksMiZhJiYoaHIoImFyaWEtZGVzY3JpYmVkYnkiLGQuYXJpYURlc2NyaWJlZEJ5KSgicm9sZSIsImJ1dHRvbiIp''@;'; put 'put ''LFRyKCJ0b29sdGlwLXRyaWdnZXIiLCEwKSl9fSksY30pKCksRVVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLE8yLEFzXX0p''@;'; put 'put ''LGN9KSgpLFRVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltOWSxDVWUsRVVlXX0pLGN9KSgpO3ZhciBfNz1mdW5jdGlvbihjKXty''@;'; put 'put ''ZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5DT01QQUNUPSJjb21wYWN0IixjfShfN3x8e30pO2xldCBDcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5taW5MYWJlbFNpemU9MSx0aGlzLm1heExhYmVsU2l6ZT0xMix0aGlz''@;'; put 'put ''LmxheW91dD1fNy5IT1JJWk9OVEFMLHRoaXMubGF5b3V0VmFsdWVzPU9iamVjdC5rZXlzKF83KS5tYXAoYT0+XzdbYV0pLHRoaXMuX2xhYmVsU2l6ZT0yfWdldCBsYWJlbFNpemUoKXtyZXR1cm4gdGhpcy5fbGFiZWxTaXplfXNldCBsYWJlbFNpemUoYSl7dGhpcy5sYWJlbFNpemVJc1ZhbGlk''@;'; put 'put ''KGEpJiYodGhpcy5fbGFiZWxTaXplPWEpfWdldCBsYXlvdXRDbGFzcygpe3JldHVybmBjbHItZm9ybS0ke3RoaXMubGF5b3V0fWB9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PV83LlZFUlRJQ0FMfWlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLmxheW91dD09PV83LkhPUkla''@;'; put 'put ''T05UQUx9aXNDb21wYWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0PT09XzcuQ09NUEFDVH1pc1ZhbGlkKGEpe3JldHVybiB0aGlzLmxheW91dFZhbHVlcy5pbmRleE9mKGEpPi0xfWxhYmVsU2l6ZUlzVmFsaWQoYSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYSkmJmE+PXRoaXMubWluTGFiZWxT''@;'; put 'put ''aXplJiZhPD10aGlzLm1heExhYmVsU2l6ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksZHM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm''@;'; put 'put ''LHYpe3RoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmVsPXYsdGhpcy5lbmFibGVHcmlkPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQgbGFiZWxUZXh0KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fW5nT25Jbml0KCl7dGhpcy5pZEF0dHI9dGhpcy5pZElucHV0LCh0aGlzLmNvbnRyb2xJZFNlcnZpY2V8fHRoaXMubmdDb250cm9sU2VydmljZSkmJnRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhp''@;'; put 'put ''cy5lbC5uYXRpdmVFbGVtZW50LCJjbHItY29udHJvbC1sYWJlbCIpLHRoaXMuZW5hYmxlR3JpZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVydGljYWwoKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1l''@;'; put 'put ''LmluZGV4T2YoImNsci1jb2wiKTwwJiYodGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb2wtMTIiKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxgY2xyLWNvbC1tZC0ke3RoaXMubGF5b3V0U2VydmljZS5sYWJl''@;'; put 'put ''bFNpemV9YCkpLHRoaXMuY29udHJvbElkU2VydmljZSYmIXRoaXMuZm9yQXR0ciYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5mb3JBdHRyPWEsdGhpcy5pZEF0dHI9dGhpcy5pZElucHV0fHxgJHthfS1s''@;'; put 'put ''YWJlbGB9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWRpc2FibGVHcmlkKCl7dGhpcy5lbmFibGVHcmlkPSExfW9uQ2xpY2soYSl7dGhpcy5wcmV2ZW50RGVmYXVsdE9uU2lnbnBvc3RUYXJnZXQoYSl9cHJldmVudERlZmF1''@;'; put 'put ''bHRPblNpZ25wb3N0VGFyZ2V0KGEpe3RoaXMuc2lnbnBvc3QmJnRoaXMuc2lnbnBvc3QubmF0aXZlRWxlbWVudCYmdGhpcy5zaWducG9zdC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEudGFyZ2V0KSYmYS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKShHZShDaCw4KSxHZShDcCw4KSxHZShmMSw4KSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibGFiZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxXTCw1LEppKSwyJmEpe2xl''@;'; put 'put ''dCBmO0NpKGY9U2koKSkmJihkLnNpZ25wb3N0PWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DbGljayhmKX0pLDImYSYmaHIoImlkIixkLmlkQXR0cikoImZvciIsZC5mb3JBdHRy''@;'; put 'put ''KX0saW5wdXRzOntpZElucHV0OltObi5Ob25lLCJpZCIsImlkSW5wdXQiXSxmb3JBdHRyOltObi5Ob25lLCJmb3IiLCJmb3JBdHRyIl19fSksY30pKCksQVVlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGWXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNl''@;'; put 'put ''PWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0ic3VjY2VzcyJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENoLDgpLEdlKHA3LDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''Y2xyLWNvbnRyb2wtc3VjY2VzcyJdXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJpZCIsZC5pZCksVHIoImNsci1zdWJ0ZXh0IiwhMCkoInN1Y2Nlc3MiLCEwKSl9LGZlYXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFy''@;'; put 'put ''czowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLERkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jbGFzc05hbWU9IiJ9Y29udHJvbENsYXNzKGE9QWQuTk9ORSxk''@;'; put 'put ''PSExLGg9IiIpe2NvbnN0IGY9W3RoaXMuY2xhc3NOYW1lLGhdO3N3aXRjaChhKXtjYXNlIEFkLlZBTElEOmYucHVzaCgiY2xyLXN1Y2Nlc3MiKTticmVhaztjYXNlIEFkLklOVkFMSUQ6Zi5wdXNoKCJjbHItZXJyb3IiKX1yZXR1cm4gZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYtMT09PXRoaXMu''@;'; put 'put ''Y2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKSYmZi5wdXNoKGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLm1heExhYmVsU2l6ZS10aGlzLmxheW91dFNlcnZpY2UubGFiZWxTaXplfSBjbHItY29sLTEyYCksZi5qb2luKCIgIikudHJpbSgpfWluaXRDb250cm9sQ2xhc3MoYSxk''@;'; put 'put ''KXtkJiZkLmNsYXNzTmFtZSYmKHRoaXMuY2xhc3NOYW1lPWQuY2xhc3NOYW1lLGQuY2xhc3NOYW1lLnNwbGl0KCIgIikuZm9yRWFjaChmPT57Zi5zdGFydHNXaXRoKCJjbHItY29sIikmJmEucmVtb3ZlQ2xhc3MoZCxmKX0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoeHIoQ3AsOCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHc3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0''@;'; put 'put ''aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9Zix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSh2PT57dGhpcy5zdGF0ZT12LHNldFRpbWVvdXQoKCk9Pnt0aGlzLnVwZGF0''@;'; put 'put ''ZUhlbHBlcnMoKX0pfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKHY9Pnt0aGlzLmNvbnRyb2w9dn0pLGYuYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5zdWJzY3JpYmUodj0+e3RoaXMuYWRkaXRpb25hbENvbnRyb2xzPXZ9KSl9Z2V0IHNo''@;'; put 'put ''b3dIZWxwZXIoKXtyZXR1cm4hIXRoaXMuY29udHJvbEhlbHBlckNvbXBvbmVudH1nZXQgc2hvd1ZhbGlkKCl7cmV0dXJuIHRoaXMudG91Y2hlZCYmdGhpcy5zdGF0ZT09PUFkLlZBTElEJiZ0aGlzLnN1Y2Nlc3NNZXNzYWdlUHJlc2VudH1nZXQgc2hvd0ludmFsaWQoKXtyZXR1cm4gdGhpcy50''@;'; put 'put ''b3VjaGVkJiZ0aGlzLnN0YXRlPT09QWQuSU5WQUxJRCYmdGhpcy5lcnJvck1lc3NhZ2VQcmVzZW50fWdldCBzdWNjZXNzTWVzc2FnZVByZXNlbnQoKXtyZXR1cm4hIXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnR9Z2V0IGVycm9yTWVzc2FnZVByZXNlbnQoKXtyZXR1cm4hIXRoaXMuY29u''@;'; put 'put ''dHJvbEVycm9yQ29tcG9uZW50fWdldCB0b3VjaGVkKCl7cmV0dXJuISghdGhpcy5jb250cm9sPy50b3VjaGVkJiYhdGhpcy5hZGRpdGlvbmFsQ29udHJvbHM/LnNvbWUoYT0+YS50b3VjaGVkKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy51cGRhdGVIZWxwZXJzKCl9bmdPbkRlc3Ryb3ko''@;'; put 'put ''KXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWNvbnRyb2xDbGFzcygpe3JldHVybiB0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuY29udHJvbENsYXNzKCF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50JiZ0aGlzLnN0YXRlPT09QWQuVkFMSUR8fCF0''@;'; put 'put ''aGlzLnRvdWNoZWQ/QWQuTk9ORTp0aGlzLnN0YXRlLHRoaXMuYWRkR3JpZCgpKX1hZGRHcmlkKCl7cmV0dXJuIHRoaXMubGF5b3V0U2VydmljZSYmIXRoaXMubGF5b3V0U2VydmljZS5pc1ZlcnRpY2FsKCl9dXBkYXRlSGVscGVycygpe3RoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5uZ0Nv''@;'; put 'put ''bnRyb2xTZXJ2aWNlLnNldEhlbHBlcnMoe3Nob3c6dGhpcy5zaG93SW52YWxpZHx8dGhpcy5zaG93SGVscGVyfHx0aGlzLnNob3dWYWxpZCxzaG93SW52YWxpZDp0aGlzLnNob3dJbnZhbGlkLHNob3dIZWxwZXI6dGhpcy5zaG93SGVscGVyLHNob3dWYWxpZDp0aGlzLnNob3dWYWxpZH0pfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShrZCksR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsZHMsNSksYW8oaCxBVWUsNSks''@;'; put 'put ''YW8oaCxoVWUsNSksYW8oaCxqTCw1KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jb250cm9sU3VjY2Vzc0NvbXBvbmVudD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jb250cm9sRXJyb3JDb21wb25lbnQ9Zi5maXJzdCksQ2koZj1T''@;'; put 'put ''aSgpKSYmKGQuY29udHJvbEhlbHBlckNvbXBvbmVudD1mLmZpcnN0KX19fSksY30pKCk7Y2xhc3MgWUx7Y29uc3RydWN0b3IobCxhLGQ9MCl7aWYodGhpcy5pbmplY3Rvcj1hLmluamVjdG9yLCF0aGlzLmluamVjdG9yLmdldChsLG51bGwpKXtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KFc1''@;'; put 'put ''KSxmPXRoaXMuaW5qZWN0b3IuZ2V0KEppKTthLmNyZWF0ZUNvbXBvbmVudChoLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNVZSkpO2NvbnN0IHY9aC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShsKSxNPVtdO01bZF09W2YubmF0aXZlRWxlbWVudF07Y29uc3QgRD1hLmNyZWF0ZUNvbXBvbmVu''@;'; put 'put ''dCh2LHZvaWQgMCx2b2lkIDAsTSk7YS5yZW1vdmUoMCksdGhpcy5pbmplY3Rvcj1ELmluamVjdG9yfX1nZXQobCxhKXtyZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQobCxhKX19bGV0IFVZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90b3VjaGVkPW5ldyBXbn1nZXQgdG91Y2hl''@;'; put 'put ''ZENoYW5nZSgpe3JldHVybiB0aGlzLl90b3VjaGVkLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5''@;'; put 'put ''OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIFpZPWZ1bmN0aW9uKGMpe3JldHVybiBjLkZPUk09ImZvcm0iLGMuTU9ERUw9Im1vZGVsIixjfShaWXx8e30pO2xldCBDNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLnZjcj1hLHRoaXMud3JhcHBlclR5cGU9ZCx0''@;'; put 'put ''aGlzLl9uZ0NvbnRyb2w9Zix0aGlzLnJlbmRlcmVyPXYsdGhpcy5lbD1NLHRoaXMuaW5kZXg9MCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5hZGRpdGlvbmFsRGlmZmVyPW5ldyBNYXAsaCYmKHRoaXMubmdDb250cm9sU2VydmljZT1oLmdldChmMSxudWxsKSx0aGlzLmlmQ29udHJvbFN0''@;'; put 'put ''YXRlU2VydmljZT1oLmdldChrZCxudWxsKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aC5nZXQoRGQsbnVsbCksdGhpcy5tYXJrQ29udHJvbFNlcnZpY2U9aC5nZXQoVVksbnVsbCksdGhpcy5kaWZmZXJzPWguZ2V0KHdNLG51bGwpKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UmJnRoaXMu''@;'; put 'put ''Y29udHJvbENsYXNzU2VydmljZS5pbml0Q29udHJvbENsYXNzKHYsTS5uYXRpdmVFbGVtZW50KSx0aGlzLm1hcmtDb250cm9sU2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tYXJrQ29udHJvbFNlcnZpY2UudG91Y2hlZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm1h''@;'; put 'put ''cmtBc1RvdWNoZWQoKX0pKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5oZWxwZXJzQ2hhbmdlLnN1YnNjcmliZShEPT57dGhpcy5zZXRBcmlhRGVzY3JpYmVkQnkoRCl9KSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2lkfXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuY29udHJvbElkU2VydmljZSYmKHRoaXMuY29udHJvbElkU2VydmljZS5pZD1hKX1nZXQgaGFzQWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuIHRoaXMuYWRkaXRpb25hbERpZmZlci5zaXplPjB9bmdPbkluaXQoKXt0aGlzLl9jb250YWlu''@;'; put 'put ''ZXJJbmplY3Rvcj1uZXcgWUwodGhpcy53cmFwcGVyVHlwZSx0aGlzLnZjcix0aGlzLmluZGV4KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KENoKSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT10aGlzLl9jb250YWluZXJJbmplY3Rvci5nZXQocDcs''@;'; put 'put ''bnVsbCksdGhpcy5faWQ/dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPXRoaXMuX2lkOnRoaXMuX2lkPXRoaXMuY29udHJvbElkU2VydmljZS5pZCx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuX25nQ29udHJvbCYmKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sPyh0aGlzLm5nQ29u''@;'; put 'put ''dHJvbD10aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2UuYWRkQWRkaXRpb25hbENvbnRyb2wodGhpcy5fbmdDb250cm9sKSx0aGlzLmFkZGl0aW9uYWxEaWZmZXIuc2V0KHRoaXMuX25nQ29udHJvbCx0aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9uZ0Nv''@;'; put 'put ''bnRyb2wpLmNyZWF0ZSgpKSk6KHRoaXMubmdDb250cm9sPXRoaXMuX25nQ29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0Q29udHJvbCh0aGlzLm5nQ29udHJvbCksdGhpcy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fbmdDb250cm9sKS5jcmVhdGUoKSkpfW5nRG9DaGVj''@;'; put 'put ''aygpe2lmKHRoaXMudHJpZ2dlckRvQ2hlY2sodGhpcy5kaWZmZXIsdGhpcy5uZ0NvbnRyb2wpLHRoaXMuaGFzQWRkaXRpb25hbENvbnRyb2xzKWZvcihjb25zdFthLGRdb2YgdGhpcy5hZGRpdGlvbmFsRGlmZmVyKXRoaXMudHJpZ2dlckRvQ2hlY2soZCxhKX1uZ09uRGVzdHJveSgpe3RoaXMu''@;'; put 'put ''c3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmE/LnVuc3Vic2NyaWJlKCkpfXRyaWdnZXJWYWxpZGF0aW9uKCl7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2UmJnRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlLnRyaWdnZXJTdGF0dXNDaGFuZ2UoKX1nZXRQcm92aWRlckZyb21Db250YWluZXIo''@;'; put 'put ''YSxkKXt0cnl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChhLGQpfWNhdGNoe3JldHVybiBkfX10cmlnZ2VyRG9DaGVjayhhLGQpe2lmKGEpe2NvbnN0IGg9YS5kaWZmKGQpO2gmJmguZm9yRWFjaENoYW5nZWRJdGVtKGY9PnsoZi5rZXk9PT1aWS5GT1JNfHxmLmtleT09PVpZ''@;'; put 'put ''Lk1PREVMKSYmZi5jdXJyZW50VmFsdWUhPT1mLnByZXZpb3VzVmFsdWUmJnRoaXMudHJpZ2dlclZhbGlkYXRpb24oKX0pfX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5uZ0NvbnRyb2wmJih0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSx0aGlzLm5nQ29udHJvbC5jb250cm9s''@;'; put 'put ''LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2UuaGFzQWRkaXRpb25hbENvbnRyb2xzJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2UuYWRkaXRpb25hbENvbnRyb2xzPy5mb3JFYWNoKGE9PnthLmNvbnRyb2wubWFya0Fz''@;'; put 'put ''VG91Y2hlZCgpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9KX1zZXRBcmlhRGVzY3JpYmVkQnkoYSl7aWYoYS5zaG93KXtjb25zdCBkPXRoaXMuZ2V0QXJpYURlc2NyaWJlZEJ5SWQoYSk7aWYobnVsbCE9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1''@;'; put 'put ''dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5IixkKX10aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiKX1nZXRBcmlhRGVzY3JpYmVkQnlJZChhKXtjb25zdCBkPXRoaXMuY29udGFpbmVy''@;'; put 'put ''SWRTZXJ2aWNlPy5pZHx8dGhpcy5jb250cm9sSWRTZXJ2aWNlPy5pZDtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPVtgJHtkfS1oZWxwZXJgXTtyZXR1cm4gYS5zaG93SW52YWxpZD9oLnB1c2goYCR7ZH0tZXJyb3JgKTphLnNob3dWYWxpZCYmaC5wdXNoKGAke2R9LXN1Y2Nlc3NgKSxoLmpv''@;'; put 'put ''aW4oIiAiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKGo2KSxHZShEcyksR2UoZDEpLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZh''@;'; put 'put ''JiZGdCgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZvcCgiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9fSksY30pKCksUTFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLm1hcmtD''@;'; put 'put ''b250cm9sU2VydmljZT1kfXNldCBsYWJlbFNpemUoYSl7Y29uc3QgZD1wYXJzZUludChhLDEwKXx8Mjt0aGlzLmxheW91dFNlcnZpY2UubGFiZWxTaXplPWR9b25Gb3JtU3VibWl0KCl7dGhpcy5tYXJrQXNUb3VjaGVkKCl9bWFya0FzVG91Y2hlZCgpe3RoaXMubWFya0NvbnRyb2xTZXJ2aWNl''@;'; put 'put ''Lm1hcmtBc1RvdWNoZWQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3ApLEdlKFVZKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckZvcm0iLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgp''@;'; put 'put ''e2lmKDEmYSYmYW8oaCxkcyw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmxhYmVscz1mKX19LGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgic3VibWl0IixmdW5jdGlvbigpe3JldHVybiBkLm9uRm9ybVN1Ym1pdCgpfSksMiZhJiZUcigiY2xyLWZv''@;'; put 'put ''cm0iLCEwKSgiY2xyLWZvcm0taG9yaXpvbnRhbCIsZC5sYXlvdXRTZXJ2aWNlLmlzSG9yaXpvbnRhbCgpKSgiY2xyLWZvcm0tY29tcGFjdCIsZC5sYXlvdXRTZXJ2aWNlLmlzQ29tcGFjdCgpKX0saW5wdXRzOntsYWJlbFNpemU6W05uLk5vbmUsImNsckxhYmVsU2l6ZSIsImxhYmVsU2l6ZSJd''@;'; put 'put ''fSxmZWF0dXJlczpbZGEoW0NwLFVZXSldfSksY30pKCksYXU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLGJoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3''@;'; put 'put ''NWluaj1Bcih7aW1wb3J0czpbUmEsQXNdfSksY30pKCk7Y29uc3QgV1k9bmV3IFN0KCJJU19UT0dHTEUiKSxSVWU9e3Byb3ZpZGU6V1ksdXNlRmFjdG9yeTpmdW5jdGlvbiBJVWUoKXtyZXR1cm4gbmV3IGVpKCExKX19O2xldCBTaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu''@;'; put 'put ''dG9nZ2xlPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy50b2dnbGU9ZH0pKX1uZ09uSW5pdCgpe3RoaXMubGFiZWwmJnRoaXMubGFiZWwuZGlzYWJsZUdyaWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0''@;'; put 'put ''aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFdZKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdy''@;'; put 'put ''YXBwZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsZHMsNyksYW8oaCxJZCw3KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jaGVja2JveD1mLmZpcnN0KX19LGhvc3RWYXJzOjYsaG9zdEJp''@;'; put 'put ''bmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCFkLnRvZ2dsZSkoImNsci1jaGVja2JveC13cmFwcGVyLWRpc2FibGVkIixudWxsPT1kLmNoZWNrYm94P251bGw6ZC5jaGVja2JveC5jb250cm9sRGlzYWJsZWQpKCJjbHItdG9nZ2xlLXdyYXBwZXIi''@;'; put 'put ''LGQudG9nZ2xlKX0sZmVhdHVyZXM6W2RhKFtDaCxSVWVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkRIZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2Eoa0hlKSxZcigwKSxZcigxLDEpLGd0KDIsSUhlLDEsMCwibGFiZWwi''@;'; put 'put ''LDApKSwyJmEmJihmZSgyKSxNZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltiYSxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSWQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcihhLFNoLGQsaCxmLHYpLHRoaXMuY29u''@;'; put 'put ''dHJvbD1oLHRoaXMudG9nZ2xlPU19Z2V0IGNvbnRyb2xEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/LmRpc2FibGVkfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKTtjb25zdCBhPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKFdZLG51bGwpO2EmJm51bGwhPT10aGlzLnRv''@;'; put 'put ''Z2dsZSYmYS5uZXh0KCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCksR2UoRW8pLEdlKEppKSxJZigiY2xyVG9nZ2xlIikpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJD''@;'; put 'put ''aGVja2JveCIsIiJdLFsiIiwiY2xyVG9nZ2xlIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigicm9sZSIsbnVsbCE9PWQudG9nZ2xlPyJzd2l0Y2giOm51bGwpfSxmZWF0dXJlczpbd2FdfSksY30pKCksQnk9KCgpPT57Y2xhc3MgYyBleHRlbmRz''@;'; put 'put ''IHc3e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklu''@;'; put 'put ''bGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9Z2V0IGFsbENoZWNrYm94ZXNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/LmRpc2FibGVkJiYoIXRoaXMuYWRkaXRpb25h''@;'; put 'put ''bENvbnRyb2xzPy5sZW5ndGh8fHRoaXMuYWRkaXRpb25hbENvbnRyb2xzLmV2ZXJ5KGE9PmEuZGlzYWJsZWQpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLmNoZWNrYm94ZXMubGVuZ3RoPyJncm91cCI6bnVs''@;'; put 'put ''bH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gtY29udGFpbmVyIl0sWyJjbHItdG9nZ2xlLWNvbnRhaW5l''@;'; put 'put ''ciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLElkLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuY2hlY2tib3hlcz1mKX19LGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoInJvbGUiLGQucm9sZSksVHIoImNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsZC5hbGxDaGVja2JveGVzRGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSkpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIn0sZmVhdHVyZXM6W2RhKFtrZCxmMSxEZCxwN10pLHdhXSxuZ0Nv''@;'; put 'put ''bnRlbnRTZWxlY3RvcnM6TEhlLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci1zdWJ0ZXh0LXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiY2xyLXN1YnRleHQtd3JhcHBlciJdLFsiY2xh''@;'; put 'put ''c3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJz''@;'; put 'put ''dWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwi''@;'; put 'put ''c3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShSSGUpLFlyKDApLGd0KDEsT0hlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSksWXIoMywxKSxndCg0LFBIZSwyLDAsImRpdiIsMiko''@;'; put 'put ''NSxCSGUsNSw0LCJkaXYiLDIpLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxUcigiY2xyLWNvbnRyb2wtaW5saW5lIixkLmNscklubGluZSksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLE1lKCJuZ0lmIixkLnNob3dI''@;'; put 'put ''ZWxwZXIpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0ludmFsaWR8fGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEscnMsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLExVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxhdSxCeCxhdV19KSxjfSkoKTtmdW5jdGlvbiBxZihjKXtyZXR1cm4gbnVsbCE9PWMmJigic3RyaW5nIj09dHlwZW9mIGM/''@;'; put 'put ''Yy5sZW5ndGg+PTA6ImJvb2xlYW4iPT10eXBlb2YgYyYmYyl9bGV0IFJkPSgoKT0+e2NsYXNzIGN7Z2V0IHNwaW5uZXJDbGFzcygpe3JldHVybiEwfWdldCBpbmxpbmVDbGFzcygpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLl9pbmxpbmU9cWYoYSl9Z2V0IGlu''@;'; put 'put ''dmVyc2VDbGFzcygpe3JldHVybiB0aGlzLl9pbnZlcnNlfXNldCBjbHJJbnZlcnNlKGEpe3RoaXMuX2ludmVyc2U9cWYoYSl9Z2V0IHNtYWxsQ2xhc3MoKXtyZXR1cm4gdGhpcy5fc21hbGx9c2V0IGNsclNtYWxsKGEpe3RoaXMuX3NtYWxsPXFmKGEpfWdldCBtZWRpdW1DbGFzcygpe3JldHVy''@;'; put 'put ''biF0aGlzLl9zbWFsbCYmdGhpcy5fbWVkaXVtfXNldCBjbHJNZWRpdW0oYSl7dGhpcy5fbWVkaXVtPXFmKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNwaW5uZXIiXV0s''@;'; put 'put ''aG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtYnVzeSIsITApLFRyKCJzcGlubmVyIixkLnNwaW5uZXJDbGFzcykoInNwaW5uZXItaW5saW5lIixkLmlubGluZUNsYXNzKSgic3Bpbm5lci1pbnZlcnNlIixkLmludmVyc2VDbGFzcykoInNwaW5u''@;'; put 'put ''ZXItc20iLGQuc21hbGxDbGFzcykoInNwaW5uZXItbWQiLGQubWVkaXVtQ2xhc3MpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSIsY2xySW52ZXJzZToiY2xySW52ZXJzZSIsY2xyU21hbGw6ImNsclNtYWxsIixjbHJNZWRpdW06ImNsck1lZGl1bSJ9LG5nQ29udGVudFNlbGVjdG9y''@;'; put 'put ''czp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxqeT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9''@;'; put 'put ''a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTt2YXIgYm09ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVkVSVElDQUw9InZlcnRpY2FsIixjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuQk9USD0iYm90aCIsY30oYm18fHt9KTtsZXQgZWRlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1nZXQgbmF0aXZlRWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1mb2N1cygpe3RsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWxlbWVudFJlZi5uYXRp''@;'; put 'put ''dmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShpbykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJLZXlGb2N1c0l0ZW0iLCIiXV19KSxjfSkoKSx6eT0oKCk9PntjbGFz''@;'; put 'put ''cyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuZGlyZWN0aW9uPWJtLlZFUlRJQ0FMLHRoaXMuZm9jdXNPbkxvYWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuZm9jdXNDaGFuZ2U9bmV3IEtyLHRoaXMuX2N1cnJlbnQ9MH1nZXQgZm9jdXNhYmxlSXRlbXMo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fZm9jdXNhYmxlSXRlbXM/dGhpcy5fZm9jdXNhYmxlSXRlbXM6dGhpcy5jbHJLZXlGb2N1c0l0ZW1zP3RoaXMuY2xyS2V5Rm9jdXNJdGVtcy50b0FycmF5KCk6W119c2V0IGZvY3VzYWJsZUl0ZW1zKGEpe0FycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoJiYodGhpcy5f''@;'; put 'put ''Zm9jdXNhYmxlSXRlbXM9YSx0aGlzLmluaXRpYWxpemVGb2N1cygpKX1nZXQgbmF0aXZlRWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMuX2N1cnJlbnQhPT1h''@;'; put 'put ''JiYodGhpcy5fY3VycmVudD1hKX1nZXQgY3VycmVudEl0ZW0oKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtc1t0aGlzLl9jdXJyZW50XX1nZXQgY3VycmVudEl0ZW1FbGVtZW50KCl7cmV0dXJuIHRoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudD90aGlzLmN1cnJlbnRJdGVtLm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQ6dGhpcy5jdXJyZW50SXRlbX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckl0ZW1VcGRhdGVzKCkpLHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChh''@;'; put 'put ''PT5hLnVuc3Vic2NyaWJlKCkpfWhhbmRsZUtleWJvYXJkRXZlbnQoYSl7aWYodGhpcy5jdXJyZW50SXRlbUVsZW1lbnQhPT1hLnRhcmdldCl7Y29uc3QgZD10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7dGhpcy5wb3NpdGlvbkluUmFuZ2UoZCkmJih0aGlzLmN1cnJlbnQ9ZCl9dGhp''@;'; put 'put ''cy5wcmV2S2V5UHJlc3NlZChhKSYmdGhpcy5jdXJyZW50Rm9jdXNJc05vdEZpcnN0SXRlbSgpP3RoaXMubW92ZVRvKHRoaXMuY3VycmVudC0xKTp0aGlzLm5leHRLZXlQcmVzc2VkKGEpJiZ0aGlzLmN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKT90aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQr''@;'; put 'put ''MSk6YS5jb2RlPT09Z2EuSG9tZT90aGlzLm1vdmVUbygwKTphLmNvZGU9PT1nYS5FbmQmJnRoaXMubW92ZVRvKHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoLTEpLFJZKGEpfXNldENsaWNrZWRJdGVtQ3VycmVudChhKXtjb25zdCBkPXRoaXMuZ2V0SXRlbVBvc2l0aW9uKGEudGFyZ2V0KTtk''@;'; put 'put ''Pi0xJiZ0aGlzLm1vdmVUbyhkKX1mb2N1c0N1cnJlbnQoKXt0aGlzLmN1cnJlbnRJdGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpfW1vdmVUbyhhKXt0aGlzLnBvc2l0aW9uSW5SYW5nZShhKSYmKHRoaXMuY3VycmVudD1hLHRoaXMuZm9jdXNDdXJyZW50''@;'; put 'put ''KCkpfXBvc2l0aW9uSW5SYW5nZShhKXtyZXR1cm4gYT49MCYmYTx0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aH1jdXJyZW50Rm9jdXNJc05vdEZpcnN0SXRlbSgpe3JldHVybiB0aGlzLl9jdXJyZW50LTE+PTB9Y3VycmVudEZvY3VzSXNOb3RMYXN0SXRlbSgpe3JldHVybiB0aGlzLl9jdXJy''@;'; put 'put ''ZW50KzE8dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGh9aW5pdGlhbGl6ZUZvY3VzKCl7dGhpcy5mb2N1c2FibGVJdGVtcyYmdGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50Pj10aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ9dGhpcy5m''@;'; put 'put ''b2N1c2FibGVJdGVtcy5sZW5ndGgtMSksdGhpcy5mb2N1c09uTG9hZCYmKHRoaXMuY3VycmVudEl0ZW0uZm9jdXMoKSx0aGlzLmZvY3VzQ2hhbmdlLmVtaXQoKSkpfW5leHRLZXlQcmVzc2VkKGEpe2NvbnN0IGQ9STIoYS5rZXkpO3N3aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSBibS5WRVJU''@;'; put 'put ''SUNBTDpyZXR1cm4gZD09PWdhLkFycm93RG93bjtjYXNlIGJtLkhPUklaT05UQUw6cmV0dXJuIGQ9PT1nYS5BcnJvd1JpZ2h0O2Nhc2UgYm0uQk9USDpyZXR1cm4gZD09PWdhLkFycm93RG93bnx8ZD09PWdhLkFycm93UmlnaHQ7ZGVmYXVsdDpyZXR1cm4hMX19cHJldktleVByZXNzZWQoYSl7''@;'; put 'put ''Y29uc3QgZD1JMihhLmtleSk7c3dpdGNoKHRoaXMuZGlyZWN0aW9uKXtjYXNlIGJtLlZFUlRJQ0FMOnJldHVybiBkPT09Z2EuQXJyb3dVcDtjYXNlIGJtLkhPUklaT05UQUw6cmV0dXJuIGQ9PT1nYS5BcnJvd0xlZnQ7Y2FzZSBibS5CT1RIOnJldHVybiBkPT09Z2EuQXJyb3dVcHx8ZD09PWdh''@;'; put 'put ''LkFycm93TGVmdDtkZWZhdWx0OnJldHVybiExfX1nZXRJdGVtUG9zaXRpb24oYSl7cmV0dXJuIHRoaXMuX2ZvY3VzYWJsZUl0ZW1zP3RoaXMuZm9jdXNhYmxlSXRlbXMuaW5kZXhPZihhKTp0aGlzLmZvY3VzYWJsZUl0ZW1zLm1hcChkPT5kLm5hdGl2ZUVsZW1lbnQpLmluZGV4T2YoYSl9bGlz''@;'; put 'put ''dGVuRm9ySXRlbVVwZGF0ZXMoKXtyZXR1cm4gdGhpcy5jbHJLZXlGb2N1c0l0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5pbml0aWFsaXplRm9jdXMoKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSkpfSxjLlx1MDI3NWNt''@;'; put 'put ''cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJLZXlGb2N1cyIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGVkZSw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmNscktleUZvY3VzSXRlbXM9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJkZ0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVLZXlib2FyZEV2ZW50KGYpfSkoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zZXRDbGlja2VkSXRlbUN1cnJlbnQoZil9KX0saW5wdXRzOntkaXJlY3Rpb246W05uLk5vbmUsImNsckRpcmVj''@;'; put 'put ''dGlvbiIsImRpcmVjdGlvbiJdLGZvY3VzT25Mb2FkOltObi5Ob25lLCJjbHJGb2N1c09uTG9hZCIsImZvY3VzT25Mb2FkIl0sZm9jdXNhYmxlSXRlbXM6W05uLk5vbmUsImNscktleUZvY3VzIiwiZm9jdXNhYmxlSXRlbXMiXX0sb3V0cHV0czp7Zm9jdXNDaGFuZ2U6ImNsckZvY3VzQ2hhbmdl''@;'; put 'put ''In0sYXR0cnM6akhlLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxZWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTtjbGFzcyBPVWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiEhdGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5pbmNsdWRlcyhsKX1zZWxlY3QobCl7dGhpcy5h''@;'; put 'put ''ZGRJdGVtKGwpfXVuc2VsZWN0KGwpe3RoaXMucmVtb3ZlSXRlbShsKX1pc0VtcHR5KCl7cmV0dXJuISh0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wKX1wb3AoKXtsZXQgbDtyZXR1cm4gdGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5sZW5ndGg+MCYmKGw9dGhpcy5tb2RlbFt0aGlzLm1v''@;'; put 'put ''ZGVsLmxlbmd0aC0xXSx0aGlzLnJlbW92ZUl0ZW0obCkpLGx9dG9TdHJpbmcobCxhPS0xKXtsZXQgZD0iIjtyZXR1cm4gdGhpcy5tb2RlbCYmKGE+LTE/dGhpcy5tb2RlbFthXSYmKGQrPWwmJnRoaXMubW9kZWxbYV1bbF0/dGhpcy5tb2RlbFthXVtsXTp0aGlzLm1vZGVsW2FdLnRvU3RyaW5n''@;'; put 'put ''KCkpOnRoaXMubW9kZWwuZm9yRWFjaChoPT57ZCs9bCYmaFtsXT9oW2xdOmgudG9TdHJpbmcoKSxkKz0iICJ9KSksZC50cmltKCl9YWRkSXRlbShsKXt0aGlzLmNvbnRhaW5zSXRlbShsKXx8KHRoaXMubW9kZWw9dGhpcy5tb2RlbHx8W10sdGhpcy5tb2RlbC5wdXNoKGwpKX1yZW1vdmVJdGVt''@;'; put 'put ''KGwpe2lmKG51bGw9PXRoaXMubW9kZWwpcmV0dXJuO2NvbnN0IGE9dGhpcy5tb2RlbC5pbmRleE9mKGwpO2E+LTEmJnRoaXMubW9kZWwuc3BsaWNlKGEsMSksMD09PXRoaXMubW9kZWwubGVuZ3RoJiYodGhpcy5tb2RlbD1udWxsKX19Y2xhc3MgUFVle2NvbnRhaW5zSXRlbShsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5tb2RlbD09PWx9c2VsZWN0KGwpe3RoaXMubW9kZWw9bH11bnNlbGVjdChsKXt0aGlzLmNvbnRhaW5zSXRlbShsKSYmKHRoaXMubW9kZWw9bnVsbCl9aXNFbXB0eSgpe3JldHVybiF0aGlzLm1vZGVsfXBvcCgpe2NvbnN0IGw9dGhpcy5tb2RlbDtyZXR1cm4gdGhpcy5tb2RlbD1udWxs''@;'; put 'put ''LGx9dG9TdHJpbmcobCl7cmV0dXJuIHRoaXMubW9kZWw/bCYmdGhpcy5tb2RlbFtsXT90aGlzLm1vZGVsW2xdOnRoaXMubW9kZWwudG9TdHJpbmcoKToiIn19Y2xhc3MgRlVlIGV4dGVuZHMgUFVle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb2N1c0NoYW5nZWQ9''@;'; put 'put ''bmV3IGVpKG51bGwpfWdldCBmb2N1c0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5fZm9jdXNDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfXNlbGVjdChsKXt0aGlzLm1vZGVsIT09bCYmKHRoaXMubW9kZWw9bCx0aGlzLl9mb2N1c0NoYW5nZWQubmV4dChsKSl9fWxldCBIVWU9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZz0hMSx0aGlzLnNob3dBbGxPcHRpb25zPSEwLHRoaXMuX2N1cnJlbnRJbnB1dD0iIix0aGlzLl9pbnB1dENoYW5nZWQ9bmV3IGVpKCIiKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkPW5ldyB5eCgxKSx0aGlzLmlucHV0Q2hhbmdlZD10aGlzLl9pbnB1''@;'; put 'put ''dENoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnRJbnB1dCgpe3JldHVybiB0aGlzLl9jdXJyZW50SW5wdXR9c2V0IGN1cnJlbnRJbnB1dChhKXsiIj09PWEmJiF0aGlzLm11bHRpc2VsZWN0YWJsZSYmdGhpcy5zZXRTZWxlY3Rpb25WYWx1ZShudWxsKSx0aGlzLl9jdXJyZW50SW5w''@;'; put 'put ''dXQ9YSx0aGlzLl9pbnB1dENoYW5nZWQubmV4dChhKX1nZXQgc2VsZWN0aW9uQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBtdWx0aXNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbCBpbnN0YW5jZW9mIE9VZX1z''@;'; put 'put ''ZWxlY3QoYSl7bnVsbD09YXx8dGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oYSl8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXRvZ2dsZShhKXtudWxsIT1hJiYodGhpcy5zZWxl''@;'; put 'put ''Y3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oYSk/dGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKTp0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXVuc2VsZWN0KGEpe251bGw9PWF8fCF0aGlz''@;'; put 'put ''LnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwudW5zZWxlY3QoYSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX1zZXRTZWxlY3Rpb25WYWx1ZShhKXshdGhpcy5zZWxlY3Rpb25Nb2RlbHx8dGhpcy5z''@;'; put 'put ''ZWxlY3Rpb25Nb2RlbC5tb2RlbD09PWF8fCF0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsJiYhYXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWw9YSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtaMWUoKCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnNlbGVjdGlvblNlcnZpY2U9aCx0aGlzLnBs''@;'; put 'put ''YXRmb3JtSWQ9Zix0aGlzLnBzZXVkb0ZvY3VzPW5ldyBGVWUsdGhpcy5vcHRpb25EYXRhPVtdLHRoaXMuaGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKSx0aGlzLnJlbmRlcmVyPWEuY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKX1nZXQgdHJpZ2dlcigpe3JldHVybiB0aGlzLl90cmlnZ2VyfXNl''@;'; put 'put ''dCB0cmlnZ2VyKGEpe3RoaXMuX3RyaWdnZXI9YSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Z2V0IGxpc3Rib3goKXtyZXR1cm4gdGhpcy5fbGlzdGJveH1zZXQgbGlzdGJveChhKXt0aGlzLl9saXN0Ym94PWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCB0ZXh0''@;'; put 'put ''SW5wdXQoKXtyZXR1cm4gdGhpcy5fdGV4dElucHV0fXNldCB0ZXh0SW5wdXQoYSl7dGhpcy5fdGV4dElucHV0PWEsdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93biIsZD0+IXRoaXMuaGFuZGxlVGV4dElucHV0KGQpKSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Zm9jdXNJ''@;'; put 'put ''bnB1dCgpe3RoaXMudGV4dElucHV0JiZ0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRleHRJbnB1dC5mb2N1cygpfWZvY3VzRmlyc3RBY3RpdmUoKXtpZih0aGlzLm9wdGlvbkRhdGEubGVuZ3RoPjApaWYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmlzRW1wdHkoKSl0''@;'; put 'put ''aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdCh0aGlzLm9wdGlvbkRhdGFbMF0pO2Vsc2V7bGV0IGE7YT10aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxlP3RoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5tb2RlbFswXTp0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2Vs''@;'; put 'put ''ZWN0aW9uTW9kZWwubW9kZWw7Y29uc3QgZD10aGlzLm9wdGlvbkRhdGEuZmluZChoPT5oLnZhbHVlPT09YSk7dGhpcy5wc2V1ZG9Gb2N1cy5zZWxlY3QoZHx8dGhpcy5vcHRpb25EYXRhWzBdKSx0aGlzLnNjcm9sbEludG9TZWxlY3RlZE1vZGVsKCJhdXRvIil9fWFkZE9wdGlvblZhbHVlcyhh''@;'; put 'put ''KXt0aGlzLm9wdGlvbkRhdGE9YX1oYW5kbGVGb2N1c1N1YnNjcmlwdGlvbigpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YXx8KHRoaXMucHNldWRvRm9jdXMubW9kZWw9bnVsbCl9KX1tb3ZlRm9jdXNUbyhhKXtsZXQgZD10aGlzLm9wdGlvbkRhdGEuZmlu''@;'; put 'put ''ZEluZGV4KGg9PmguZXF1YWxzKHRoaXMucHNldWRvRm9jdXMubW9kZWwpKTthPT09d2guVVA/LTE9PT1kfHwwPT09ZD9kPXRoaXMub3B0aW9uRGF0YS5sZW5ndGgtMTpkLS06YT09PXdoLkRPV04mJigtMT09PWR8fGQ9PT10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE/ZD0wOmQrKyksdGhpcy5w''@;'; put 'put ''c2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhW2RdKSx0aGlzLnNjcm9sbEludG9TZWxlY3RlZE1vZGVsKCl9b3BlbkFuZE1vdmVUbyhhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj90aGlzLm1vdmVGb2N1c1RvKGEpOih0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5waXBl''@;'; put 'put ''KFlmKDEpKS5zdWJzY3JpYmUoZD0+e2QmJnRoaXMubW92ZUZvY3VzVG8oYSl9KSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9aGFuZGxlVGV4dElucHV0KGEpe2xldCBkPSExO2NvbnN0IGg9STIoYS5rZXkpO2lmKGEpc3dpdGNoKGgpe2Nhc2UgZ2EuRW50ZXI6dGhpcy50b2dnbGVTZXJ2''@;'; put 'put ''aWNlLm9wZW4mJnRoaXMucHNldWRvRm9jdXMubW9kZWwmJih0aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxlP3RoaXMuc2VsZWN0aW9uU2VydmljZS50b2dnbGUodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSk6dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdCh0aGlz''@;'; put 'put ''LnBzZXVkb0ZvY3VzLm1vZGVsLnZhbHVlKSxkPSEwKTticmVhaztjYXNlIGdhLlNwYWNlOnRoaXMudG9nZ2xlU2VydmljZS5vcGVufHwodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITAsZD0hMCk7YnJlYWs7Y2FzZSBnYS5BcnJvd1VwOnRoaXMucHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEp''@;'; put 'put ''LHRoaXMub3BlbkFuZE1vdmVUbyh3aC5VUCksZD0hMDticmVhaztjYXNlIGdhLkFycm93RG93bjp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0aGlzLm9wZW5BbmRNb3ZlVG8od2guRE9XTiksZD0hMDticmVhaztkZWZhdWx0OmEua2V5IT09Z2EuVGFiJiYoIXRoaXMuc2VsZWN0''@;'; put 'put ''aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGV8fGEua2V5IT09Z2EuQmFja3NwYWNlKSYmYS5rZXkhPT1nYS5Fc2NhcGUmJiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1yZXR1cm4gZH1zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbChhPSJzbW9v''@;'; put 'put ''dGgiKXt0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLmVsJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLmVsLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjphLGJsb2NrOiJjZW50ZXIiLGlubGluZToibmVhcmVzdCJ9KX1wcmV2ZW50Vmlld3BvcnRTY3JvbGxp''@;'; put 'put ''bmcoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9YWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJibHVyIixkPT57dGhpcy5mb2N1c091dE9mQ29tcG9uZW50KGQpJiYo''@;'; put 'put ''dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEsdGhpcy5jb21wb25lbnRDZFJlZiYmdGhpcy5jb21wb25lbnRDZFJlZi5kZXRlY3RDaGFuZ2VzKCkpfSl9Zm9jdXNPdXRPZkNvbXBvbmVudChhKXtjb25zdCBkPWEucmVsYXRlZFRhcmdldHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4h''@;'; put 'put ''KHRoaXMudGV4dElucHV0LmNvbnRhaW5zKGQpfHx0aGlzLnRyaWdnZXIuY29udGFpbnMoZCl8fHRoaXMubGlzdGJveC5jb250YWlucyhkKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHg4KSx4cihzYykseHIoSFVlKSx4cihpbykpfSxjLlx1''@;'; put 'put ''MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpKTtsZXQgTlVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCxFeSx2eCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1''@;'; put 'put ''MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLFlZLGF1LE8yLFZ4LGp5LGF1LE8yXX0pLGN9KSgpLEdMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3t9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1pbnB1dC1jb250YWluZXIiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1m''@;'; put 'put ''b3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W2RhKFtrZCxmMSxDaCxEZF0pLHdhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6R0hlLGRlY2xzOjEzLHZhcnM6Nyxjb25zdHM6''@;'; put 'put ''W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIs''@;'; put 'put ''ImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1j''@;'; put 'put ''aXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRl''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoWUhlKSxZcigwKSxndCgxLCRIZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiZGl2IiwzKSxZcig1LDEpLFlyKDYsMiksWXIoNywzKSxoZSgpLGd0KDgsS0hlLDEsMCwiY2RzLWljb24iLDQpKDkscUhlLDEsMCwiY2Rz''@;'; put 'put ''LWljb24iLDUpLGhlKCksZ3QoMTAsWEhlLDEsMCwibmctY29udGVudCIsMCkoMTEsSkhlLDEsMCwibmctY29udGVudCIsMCkoMTIsUUhlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLE1lKCJuZ0NsYXNz''@;'; put 'put ''IixkLmNvbnRyb2xDbGFzcygpKSxmZSg2KSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQp''@;'; put 'put ''KX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxycyxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWjE9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxHTCxkLGgsZix2KSx0aGlzLmluZGV4PTEsIm51bWJlciI9PT10aGlzLmVsLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQuZ2V0QXR0cmlidXRlKCJ0eXBlIikmJmNvbnNvbGUud2FybignV2FybmluZzogSW5wdXRzIG9mIHR5cGUgIm51bWJlciIgc2hvdWxkIHV0aWxpemUgdGhlIG51bWJlci1pbnB1dCBjb21wb25lbnQgZm9yIHByb3BlciBoYW5kbGluZy5cblxuICBFeGFtcGxlIHVzYWdlOlxuICA8Y2xy''@;'; put 'put ''LW51bWJlci1pbnB1dC1jb250YWluZXI+XG4gICAgPGxhYmVsPk51bWJlciBJbnB1dDwvbGFiZWw+XG4gICAgPGlucHV0IGNsck51bWJlcklucHV0IHR5cGU9Im51bWJlciIvPlxuICA8L2Nsci1udW1iZXItaW5wdXQtY29udGFpbmVyPlxuICAgICAgJyl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJbnB1dCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYm''@;'; put 'put ''VHIoImNsci1pbnB1dCIsITApfSxmZWF0dXJlczpbd2FdfSksY30pKCksdGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpj''@;'; put 'put ''fSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpLFV5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9mb2N1c2VkPW5ldyBlaSghMSl9Z2V0IGZvY3VzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWQuYXNPYnNlcnZhYmxlKCl9c2V0''@;'; put 'put ''IGZvY3VzZWQoYSl7dGhpcy5fZm9jdXNlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxWVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cigpe1RzLmFkZEljb25zKHZoLGJoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsdGRlLEFzXX0pLGN9KSgpLEJVZT0oKCk9PntjbGFzcyBje31yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxCeCx6Y119KSxjfSkoKSxqVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXNdfSksY30pKCksR1VlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1r''@;'; put 'put ''aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLE5ZXX0pLGN9KSgpLGlkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29t''@;'; put 'put ''cG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEoU2wsNSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC50ZW1wbGF0ZT1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNh''@;'; put 'put ''KCksZ3QoMCxsTmUsMSwwLCJuZy10ZW1wbGF0ZSIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksJFVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIo''@;'; put 'put ''e2ltcG9ydHM6W1JhXX0pLGN9KSgpLHltPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSeXt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbImNsci10YWJzIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxTNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTHl7Y29uc3RydWN0b3IoYSxkLGgsZil7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHJUYWJMaW5rIGFuZCBjbHItdGFiLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNp''@;'; put 'put ''ZGUgb2YgYSBjbHItdGFicyIpO3N1cGVyKGEsZCksdGhpcy5pZkFjdGl2ZT1mLHRoaXMuaWQ9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmUuY3VycmVudD09PXRoaXMuaWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVzKSxH''@;'; put 'put ''ZSh5bSw4KSxHZShGeSksR2UoZjcpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdLFsiY2xyLXRhYi1jb250ZW50Il1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKTt2YXIgTTc9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuSE9SSVpPTlRBTD0iaG9y''@;'; put 'put ''aXpvbnRhbCIsYy5WRVJUSUNBTD0idmVydGljYWwiLGN9KE03fHx7fSk7bGV0IHp4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxheW91dD1NNy5IT1JJWk9OVEFMLHRoaXMuX2NoaWxkcmVuPVtdfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9jaGlsZHJlbn1nZXQgYWN0''@;'; put 'put ''aXZlVGFiKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4uZmluZChhPT5hLmFjdGl2ZSl9Z2V0IG92ZXJmbG93VGFicygpe3JldHVybiB0aGlzLmxheW91dD09PU03LlZFUlRJQ0FMP1tdOnRoaXMuY2hpbGRyZW4uZmlsdGVyKGE9PiEwPT09YS50YWJMaW5rLmluT3ZlcmZsb3cpfXJlZ2lzdGVyKGEp''@;'; put 'put ''e3RoaXMuX2NoaWxkcmVuLnB1c2goYSl9dW5yZWdpc3RlcihhKXtjb25zdCBkPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihhKTtkPi0xJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShkLDEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92''@;'; put 'put ''PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxLVWU9MCxfbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJDb250ZW50SWR8fCh0aGlzLnRhYkNv''@;'; put 'put ''bnRlbnRJZD0iY2xyLXRhYi1jb250ZW50LSIrS1VlKyspfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9Z2V0IGFyaWFMYWJlbGxlZEJ5KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UuY2hpbGRyZW4uZmluZChhPT5hLnRhYkxpbmsu''@;'; put 'put ''aWQ9PT10aGlzLmlkKT8udGFiTGluaz8udGFiTGlua0lkfXNldCB0ZW1wbGF0ZVJlZihhKXt0aGlzLnZpZXdSZWY9dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoYSl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMudGFic1NlcnZp''@;'; put 'put ''Y2UudGFiQ29udGVudFZpZXdDb250YWluZXIuaW5kZXhPZih0aGlzLnZpZXdSZWYpO2E+LTEmJnRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIucmVtb3ZlKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmNyksR2Uo''@;'; put 'put ''RnkpLEdlKHp4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWItY29udGVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKGNOZSw3KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0saW5wdXRz''@;'; put 'put ''Ont0YWJDb250ZW50SWQ6W05uLk5vbmUsImlkIiwidGFiQ29udGVudElkIl19LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sidGFiQ29udGVudFByb2plY3RlZFJlZiIsIiJdLFsicm9sZSIsInRhYnBhbmVsIiwxLCJ0YWItY29udGVudCIsMywiaWQiLCJo''@;'; put 'put ''aWRkZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsdU5lLDIsNiwibmctdGVtcGxhdGUiLG51bGwsMCxJYykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxxVWU9MDtjb25zdCAkWT1uZXcgU3QoIlRBQlNfSUQiKSxKVWU9e3Byb3ZpZGU6JFksdXNlRmFjdG9y''@;'; put 'put ''eTpmdW5jdGlvbiBYVWUoKXtyZXR1cm4iY2xyLXRhYnMtIitxVWUrK319O2xldCBRVWU9MCx3bT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMuZWw9aCx0aGlzLnRhYnNTZXJ2aWNlPU0sdGhpcy50''@;'; put 'put ''YWJzSWQ9RCx0aGlzLnRhYkxpbmtJZHx8KHRoaXMudGFiTGlua0lkPSJjbHItdGFiLWxpbmstIitRVWUrKyk7Y29uc3QgWj1mLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGlkZSk7dGhpcy50ZW1wbGF0ZVJlZkNvbnRhaW5lcj12LmNyZWF0ZUNvbXBvbmVudChaLHZvaWQgMCx2b2lkIDAsW1to''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnRdXSkuaW5zdGFuY2V9Z2V0IGluT3ZlcmZsb3coKXtyZXR1cm4gdGhpcy5faW5PdmVyZmxvdyYmdGhpcy50YWJzU2VydmljZS5sYXlvdXQhPT1NNy5WRVJUSUNBTH1zZXQgaW5PdmVyZmxvdyhhKXt0aGlzLl9pbk92ZXJmbG93PWF9Z2V0IGFkZExpbmtDbGFzc2VzKCl7''@;'; put 'put ''cmV0dXJuIXRoaXMuaW5PdmVyZmxvd31nZXQgYXJpYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UuY2hpbGRyZW4uZmluZChhPT5hLnRhYkxpbms9PT10aGlzKT8udGFiQ29udGVudD8udGFiQ29udGVudElkfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZp''@;'; put 'put ''Y2UuY3VycmVudD09PXRoaXMuaWR9Z2V0IHRhYmluZGV4KCl7cmV0dXJuIHRoaXMuYWN0aXZlPzA6LTF9YWN0aXZhdGUoKXt0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PXRoaXMuaWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGY3KSxH''@;'; put 'put ''ZShGeSksR2UoSmkpLEdlKFc1KSxHZShEbyksR2UoengpLEdlKCRZKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsInRhYiIsInR5cGUiLCJidXR0b24iXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hY3RpdmF0ZSgpfSksMiZhJiYob3AoImlkIixkLnRhYkxpbmtJZCksaHIoImFyaWEtY29udHJvbHMiLGQuYXJpYUNvbnRyb2xzKSgiYXJpYS1zZWxlY3RlZCIsZC5hY3RpdmUpKCJ0YWJpbmRleCIsZC50''@;'; put 'put ''YWJpbmRleCksVHIoImJ0biIsITApKCJidG4tbGluayIsZC5hZGRMaW5rQ2xhc3NlcykoIm5hdi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgiYWN0aXZlIixkLmFjdGl2ZSkpfSxpbnB1dHM6e3RhYkxpbmtJZDpbTm4uTm9uZSwiaWQiLCJ0YWJMaW5rSWQiXSxpbk92ZXJmbG93OltObi5Ob25l''@;'; put 'put ''LCJjbHJUYWJMaW5rSW5PdmVyZmxvdyIsImluT3ZlcmZsb3ciXX19KSxjfSkoKSxDbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsaC5yZWdpc3Rlcih0aGlzKX1nZXQgYWN0aXZlKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfW5nT25EZXN0cm95KCl7dGhpcy50YWJzU2VydmljZS51bnJlZ2lzdGVyKHRoaXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmNyksR2UoRnkpLEdlKHp4KSl9''@;'; put 'put ''LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsd20sNyksYW8oaCxfbSw3KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC50YWJMaW5rPWYuZmlyc3QpLENpKGY9U2koKSkm''@;'; put 'put ''JihkLnRhYkNvbnRlbnQ9Zi5maXJzdCl9fSxmZWF0dXJlczpbZGEoW25VZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksYWRlPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUYWJBY3Rpb24iLCIiXV0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl19KSxjfSkoKSxLWT0oKCk9PntjbGFzcyBje31y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZHJvcGRv''@;'; put 'put ''d24tbWVudSIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCkseDc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuaWZB''@;'; put 'put ''Y3RpdmVTZXJ2aWNlPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFic0lkPWYsdGhpcy5jb21tb25TdHJpbmdzPXYsdGhpcy50YWJMaW5rRWxlbWVudHM9W10sdGhpcy5fbW91c2Vkb3duPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl90YWJM''@;'; put 'put ''aW5rRGlyZWN0aXZlcz1bXX1nZXQgbGF5b3V0KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UubGF5b3V0fXNldCBsYXlvdXQoYSl7T2JqZWN0LmtleXMoTTcpLm1hcChkPT5NN1tkXSkuaW5kZXhPZihhKT49MCYmKHRoaXMudGFic1NlcnZpY2UubGF5b3V0PWEpfWdldCB0YWJMaW5rRGlyZWN0''@;'; put 'put ''aXZlcygpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlc31nZXQgYWN0aXZlVGFiSW5PdmVyZmxvdygpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5pbmRleE9mKHRoaXMudGFic1NlcnZpY2UuYWN0aXZlVGFiKT4tMX1nZXQgYWN0aXZlVGFiUG9zaXRpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmluZEluZGV4KGE9PmEuYWN0aXZlKX1nZXQgaXNDdXJyZW50SW5PdmVyZmxvdygpe3JldHVybiB0aGlzLmtleUZvY3VzLmN1cnJlbnQ+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1nZXQgaXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91''@;'; put 'put ''dD09PU03LlZFUlRJQ0FMfXNldCB0YWJPdmVyZmxvd0VsKGEpe3RoaXMuX3RhYk92ZXJmbG93RWw9YSYmYS5uYXRpdmVFbGVtZW50LHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZhJiZ0aGlzLmtleUZvY3VzLmZvY3VzQ3VycmVudCgpfWdldCBvdmVyZmxvd1Bvc2l0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3RhYkxpbmtEaXJlY3RpdmVzLmZpbHRlcihhPT4hYS5pbk92ZXJmbG93KS5sZW5ndGh9c2V0IHRhYkNvbnRlbnRWaWV3Q29udGFpbmVyKGEpe3RoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXI9YX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bnMucHVzaCh0aGlzLmxpc3RlbkZvclRhYkxpbmtDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVkRm9yVGFic0FjdGlvbnNDaGFuZ2VzKCkpLHR5cGVvZiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PiJ1IiYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1sw''@;'; put 'put ''XSYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1swXS5hY3RpdmF0ZSgpLHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfXRvZ2dsZU92ZXJmbG93T25Q''@;'; put 'put ''b3NpdGlvbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1hPj10aGlzLm92ZXJmbG93UG9zaXRpb259cmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZShhKXshdGhpcy5rZXlGb2N1cy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEucmVsYXRlZFRhcmdldCkmJnRoaXMua2V5Rm9jdXMuY3Vy''@;'; put 'put ''cmVudCE9PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24mJih0aGlzLmtleUZvY3VzLmN1cnJlbnQ9dGhpcy5hY3RpdmVUYWJQb3NpdGlvbil9dG9nZ2xlT3ZlcmZsb3dPbkNsaWNrKCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5pc0N1cnJlbnRJbk92ZXJmbG93JiZ0aGlzLnRvZ2dsZVNlcnZp''@;'; put 'put ''Y2Uub3Blbj90aGlzLm92ZXJmbG93UG9zaXRpb24tMTp0aGlzLm92ZXJmbG93UG9zaXRpb24pLHRoaXMuX21vdXNlZG93bj0hMX1vcGVuT3ZlcmZsb3dPbkZvY3VzKCl7IXRoaXMuX21vdXNlZG93biYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlz''@;'; put 'put ''LmFjdGl2ZVRhYlBvc2l0aW9uKX1jbG9zZU9uRm9jdXNPdXQoYSl7IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJiF0aGlzLl9tb3VzZWRvd24mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnRh''@;'; put 'put ''YkxpbmtFbGVtZW50c1t0aGlzLmFjdGl2ZVRhYlBvc2l0aW9uXT09PWEucmVsYXRlZFRhcmdldCYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKSl9Y2xvc2VPbkVzY2FwZUtleSgpe3RoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlv''@;'; put 'put ''bi0xKX1jbG9zZU9uT3V0c2lkZUNsaWNrKGEsZCl7Y29uc3QgaD10aGlzLnRhYnNBY3Rpb25zLnNvbWUoZj0+Zi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEudGFyZ2V0KSk7YS50YXJnZXQ9PT1kfHxkLmNvbnRhaW5zKGEudGFyZ2V0KXx8aHx8IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFp''@;'; put 'put ''bnMoYS50YXJnZXQpJiZ0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlvbi0xKX1zZXRUYWJMaW5rRWxlbWVudHMoKXt0aGlzLl90YWJMaW5rRGlyZWN0aXZlcz10aGlzLnRhYnMubWFwKGE9PmEudGFiTGluayksdGhpcy50''@;'; put 'put ''YWJMaW5rRWxlbWVudHM9dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMubWFwKGE9PmEuZWwubmF0aXZlRWxlbWVudCksdGhpcy50YWJzQWN0aW9ucyYmdGhpcy50YWJzQWN0aW9ucyYmdGhpcy50YWJMaW5rRWxlbWVudHMucHVzaCguLi50aGlzLnRhYnNBY3Rpb25zLm1hcChhPT5hLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQpKX1saXN0ZW5Gb3JUYWJMaW5rQ2hhbmdlcygpe3JldHVybiB0aGlzLnRhYnMuY2hhbmdlcy5waXBlKHgyKHRoaXMudGFicy5tYXAoYT0+YS50YWJMaW5rKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5zZXRUYWJMaW5rRWxlbWVudHMoKSl9bGlzdGVkRm9yVGFic0FjdGlvbnNDaGFuZ2Vz''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMudGFic0FjdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuc2V0VGFiTGlua0VsZW1lbnRzKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmNyksR2Uoc2MpLEdlKHp4KSxHZSgkWSksR2UoaXMpKX0sYy5c''@;'; put 'put ''dTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYnMiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsYWRlLDUsSmkpLGFvKGgsQ20sNCkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQudGFic0FjdGlvbnM9ZiksQ2koZj1TaSgpKSYm''@;'; put 'put ''KGQudGFicz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKHFhKHp5LDcpLHFhKEtZLDUsSmkpLHFhKGROZSw3LERvKSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5rZXlGb2N1cz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC50YWJPdmVyZmxvd0VsPWguZmlyc3QpLENp''@;'; put 'put ''KGg9U2koKSkmJihkLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJ0YWJzLXZlcnRpY2FsIixkLmlzVmVydGljYWwpfSxpbnB1dHM6e2xheW91dDpbTm4uTm9uZSwiY2xyTGF5b3V0IiwibGF5''@;'; put 'put ''b3V0Il19LGZlYXR1cmVzOltkYShbZjcsengsSlVlXSksdmQoW29nXSldLG5nQ29udGVudFNlbGVjdG9yczpmTmUsZGVjbHM6Nix2YXJzOjMsY29uc3RzOltbInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIiwiIl0sWyJ0YWJPdmVyZmxvd1RyaWdnZXIiLCIiXSxbInJvbGUiLCJ0YWJsaXN0Iiwi''@;'; put 'put ''Y2xyRGlyZWN0aW9uIiwiYm90aCIsMSwibmF2IiwzLCJjbHJGb2N1c0NoYW5nZSIsImZvY3Vzb3V0IiwiY2xyS2V5Rm9jdXMiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nSWYiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsIm5hdi1pdGVtIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQi''@;'; put 'put ''XSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsInRhYnMtb3ZlcmZsb3ciLCJib3R0b20tcmlnaHQiXSxbInJvbGUiLCJhcHBsaWNhdGlvbiIsMSwibmF2LWl0ZW0iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImJ0biIsImJ0bi1saW5rIiwibmF2LWxpbmsiLCJk''@;'; put 'put ''cm9wZG93bi10b2dnbGUiLDMsIm1vdXNlZG93biIsImZvY3VzIiwiY2xpY2siXSxbInNoYXBlIiwiZWxsaXBzaXMtaG9yaXpvbnRhbCJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiLDQsIm5nSWYiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0''@;'; put 'put ''Il0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLDQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9TG4oKTtzYShoTmUpLGRlKDAsInVsIiwyKSxGdCgiY2xyRm9jdXNDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLnRvZ2dsZU92ZXJmbG93''@;'; put 'put ''T25Qb3NpdGlvbih2KSl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLnJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3RpdmUodikpfSksZ3QoMSxnTmUsMiwxLCJuZy1jb250YWluZXIiLDMpKDIseU5lLDcsMTEsIm5nLWNvbnRhaW5lciIsNCksWXIoMyksaGUoKSxG''@;'; put 'put ''bCg0LG51bGwsMCl9MiZhJiYoTWUoImNscktleUZvY3VzIixkLnRhYkxpbmtFbGVtZW50cyksZmUoKSxNZSgibmdGb3JPZiIsZC50YWJMaW5rRGlyZWN0aXZlcyksZmUoKSxNZSgibmdJZiIsZC50YWJzU2VydmljZS5vdmVyZmxvd1RhYnMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOltucyxi''@;'; put 'put ''YSxOMSxycyx6eSxLWV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhUMGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMu''@;'; put 'put ''XHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxPMixBcywkVWUsWVksTzJdfSksY30pKCkscVk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmF2R3JvdXBDb3VudD0wfXJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQrK311bnJlZ2lzdGVyTmF2R3JvdXAoKXt0''@;'; put 'put ''aGlzLm5hdkdyb3VwQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWFk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25z''@;'; put 'put ''PTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zLS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4o''@;'; put 'put ''e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEpZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQ9bmV3IFduLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQ9bmV3IFduLHRoaXMuX2NvbGxhcHNlZD0hMSx0aGlzLl9jb2xsYXBzaWJs''@;'; put 'put ''ZT0hMX1nZXQgYW5pbWF0ZU9uQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7YT0hIWEsdGhpcy5jb2xsYXBzaWJsZSYmdGhpcy5fY29sbGFwc2VkIT09YSYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2aW9yKGEpfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9jb2xsYXBzaWJsZX1zZXQgY29sbGFw''@;'; put 'put ''c2libGUoYSl7dGhpcy5fY29sbGFwc2libGUhPT0oYT0hIWEpJiYoIWEmJnRoaXMuY29sbGFwc2VkJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoITEpLHRoaXMuX2NvbGxhcHNpYmxlPWEpfXVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLm5l''@;'; put 'put ''eHQoYSksdGhpcy5fY29sbGFwc2VkPWEsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxRWT0oKCk9''@;'; put 'put ''PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX25hdlNlcnZpY2U9YSx0aGlzLl9uYXZJY29uU2VydmljZT1kLHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuY29udGVudElkPU11KCksdGhpcy5fY29sbGFwc2Vk''@;'; put 'put ''Q2hhbmdlZD1uZXcgS3IoITApLHRoaXMuX3N1Yj1hLmNvbGxhcHNlZENoYW5nZWQuc3Vic2NyaWJlKHY9Pnt0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmVtaXQodil9KX1nZXQgY29sbGFwc2libGUoKXtyZXR1cm4gdGhpcy5fbmF2U2VydmljZS5jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUo''@;'; put 'put ''YSl7dGhpcy5fbmF2U2VydmljZS5jb2xsYXBzaWJsZT1hfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fbmF2U2VydmljZS5jb2xsYXBzZWR9c2V0IGNvbGxhcHNlZChhKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZD1hfWdldCBoYXNOYXZHcm91cHMoKXtyZXR1cm4gdGhpcy5fbmF2''@;'; put 'put ''R3JvdXBSZWdpc3RyYXRpb25TZXJ2aWNlLm5hdkdyb3VwQ291bnQ+MH1nZXQgaGFzSWNvbnMoKXtyZXR1cm4gdGhpcy5fbmF2SWNvblNlcnZpY2UuaGFzSWNvbnN9Z2V0IGFyaWFFeHBhbmRlZCgpe3JldHVybiB0aGlzLmNvbGxhcHNpYmxlP3RoaXMuY29sbGFwc2VkPyJmYWxzZSI6InRydWUi''@;'; put 'put ''Om51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWIudW5zdWJzY3JpYmUoKX10b2dnbGVCeUJ1dHRvbigpe3RoaXMuY29sbGFwc2VkPSF0aGlzLmNvbGxhcHNlZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSlkpLEdlKFhZKSxHZShxWSksR2Uo''@;'; put 'put ''aXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXZlcnRpY2FsLW5hdiJdXSxob3N0QXR0cnM6WzEsImNsci12ZXJ0aWNhbC1uYXYiXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImlzLWNvbGxhcHNlZCIsZC5jb2xsYXBz''@;'; put 'put ''ZWQpKCJoYXMtbmF2LWdyb3VwcyIsZC5oYXNOYXZHcm91cHMpKCJoYXMtaWNvbnMiLGQuaGFzSWNvbnMpfSxpbnB1dHM6e3RvZ2dsZUxhYmVsOltObi5Ob25lLCJjbHJWZXJ0aWNhbE5hdlRvZ2dsZUxhYmVsIiwidG9nZ2xlTGFiZWwiXSxjb2xsYXBzaWJsZTpbTm4uTm9uZSwiY2xyVmVydGlj''@;'; put 'put ''YWxOYXZDb2xsYXBzaWJsZSIsImNvbGxhcHNpYmxlIl0sY29sbGFwc2VkOltObi5Ob25lLCJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZCIsImNvbGxhcHNlZCJdfSxvdXRwdXRzOntfY29sbGFwc2VkQ2hhbmdlZDoiY2xyVmVydGljYWxOYXZDb2xsYXBzZWRDaGFuZ2UifSxmZWF0dXJlczpbZGEo''@;'; put 'put ''W0pZLFhZLHFZXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibmF2LXRyaWdnZXIiLDMsIm9uLWNvbGxhcHNlIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwibmF2LWNvbnRlbnQiLDMsImlkIl0sWyJ0eXBlIiwi''@;'; put 'put ''YnV0dG9uIiwiY2xhc3MiLCJuYXYtYnRuIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidGFiaW5kZXgiLCItMSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsIm5hdi10cmlnZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsIm5hdi10cmlnZ2Vy''@;'; put 'put ''LWljb24iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLCJ0YWJpbmRleCIsIi0xIiwxLCJuYXYtYnRuIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCxfTmUsMiw2LCJidXR0b24iLDApLGRlKDEsImRpdiIsMSksWXIoMiks''@;'; put 'put ''Z3QoMyx3TmUsMSwyLCJidXR0b24iLDIpLGhlKCkpLDImYSYmKE1lKCJuZ0lmIixkLmNvbGxhcHNpYmxlKSxmZSgpLE1lKCJpZCIsZC5jb250ZW50SWQpLGZlKDIpLE1lKCJuZ0lmIixkLmNvbGxhcHNpYmxlJiZkLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W2JhLHJzXSxlbmNhcHN1bGF0''@;'; put 'put ''aW9uOjJ9KSxjfSkoKSxlRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBXbn1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX1leHBhbmQoKXt0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCgh''@;'; put 'put ''MCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHRHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVzdHJveSQ9bmV3IFduLGgm''@;'; put 'put ''JnhkKGEubmF0aXZlRWxlbWVudCwiY2xpY2siKS5waXBlKFYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9PntoLmV4cGFuZCgpLGQubWFya0ZvckNoZWNrKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2UoRXMpLEdlKGVHLDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmVydGljYWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxhdHRyczpNTmUsbmdDb250ZW50U2VsZWN0b3JzOkVOZSxk''@;'; put 'put ''ZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKHhOZSksWXIoMCksZGUoMSwic3BhbiIsMCksWXIoMiwxKSxoZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksb2RlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''KXtUcy5hZGRJY29ucyhFeSxrMGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxPMixCTCxPMixBcyxCTF19KSxjfSkoKSxpWmU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbalVlLEdVZSxlWmUsb2RlLEJVZV19KSxjfSkoKSxaeT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQjBle2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZSh2WSksR2UodnMsOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0sZmVh''@;'; put 'put ''dHVyZXM6W3dhXX0pLGN9KSgpLEtMPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpO2NvbnN0IG9aZT0vZCsuK20rLit5Ky9pLHNaZT0v''@;'; put 'put ''bSsuK2QrLit5Ky9pLGxaZT0vZCt8bSt8eSsvaSxjWmU9L1xkKy9nLHVaZT0vTW9iaS9pLGRaZT0vXHUyMDBmL2csbkc9IllZWVkiLHFMPXtuYW1lOiJMSVRUTEVfRU5ESUFOIixmb3JtYXQ6WyJERCIsIk1NIixuR119LGFHPXtuYW1lOiJNSURETEVfRU5ESUFOIixmb3JtYXQ6WyJNTSIsIkRE''@;'; put 'put ''IixuR119LGhaZT17bmFtZToiQklHX0VORElBTiIsZm9ybWF0OltuRywiTU0iLCJERCJdfTtmdW5jdGlvbiBsZGUoYyxsKXtyZXR1cm4gbmV3IERhdGUoYyxsKzEsMCkuZ2V0RGF0ZSgpfWNsYXNzIHZaZXtjb25zdHJ1Y3RvcihsLGE9ITEsZD0hMSxoPSExLGY9ITEsdj0hMSxNPSExLEQ9ITEp''@;'; put 'put ''e3RoaXMuZGF5TW9kZWw9bCx0aGlzLmlzVG9kYXlzRGF0ZT1hLHRoaXMuaXNFeGNsdWRlZD1kLHRoaXMuaXNEaXNhYmxlZD1oLHRoaXMuaXNTZWxlY3RlZD1mLHRoaXMuaXNGb2N1c2FibGU9dix0aGlzLmlzUmFuZ2VTdGFydERheT1NLHRoaXMuaXNSYW5nZUVuZERheT1EfWdldCB0YWJJbmRl''@;'; put 'put ''eCgpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlPzA6LTF9fWNsYXNzIExke2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnllYXI9bCx0aGlzLm1vbnRoPWEsdGhpcy5kYXRlPWR9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGgmJnRo''@;'; put 'put ''aXMuZGF0ZT09PWwuZGF0ZX10b0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlKX1pbmNyZW1lbnRCeShsKXtjb25zdCBhPW5ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZStsKTtyZXR1cm4gbmV3IExkKGEuZ2V0RnVsbFll''@;'; put 'put ''YXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpfWNsb25lKCl7cmV0dXJuIG5ldyBMZCh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfXRvQ29tcGFyaXNvblN0cmluZygpe3JldHVybmAke3RoaXMueWVhcn0ke3RoaXMucGFkKHRoaXMubW9udGgpfSR7dGhpcy5wYWQodGhpcy5k''@;'; put 'put ''YXRlKX1gfXRvRGF0ZVN0cmluZygpe3JldHVybiB0aGlzLnRvRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse3dlZWtkYXk6ImxvbmciLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLHllYXI6Im51bWVyaWMifSl9aXNCZWZvcmUobCxhPSExKXtyZXR1cm4gYT90aGlzLnRvRGF0''@;'; put 'put ''ZSgpLmdldFRpbWUoKTw9bD8udG9EYXRlKCkuZ2V0VGltZSgpOnRoaXMudG9EYXRlKCkuZ2V0VGltZSgpPGw/LnRvRGF0ZSgpLmdldFRpbWUoKX1pc0FmdGVyKGwsYT0hMSl7cmV0dXJuIGE/dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk+PWw/LnRvRGF0ZSgpLmdldFRpbWUoKTp0aGlzLnRvRGF0''@;'; put 'put ''ZSgpLmdldFRpbWUoKT5sPy50b0RhdGUoKS5nZXRUaW1lKCl9cGFkKGwpe3JldHVybiBsPDEwP2AwJHtsfWA6YCR7bH1gfX1jbGFzcyBiWmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSl7dGhpcy5jYWxlbmRhcj1sLHRoaXMuc2VsZWN0ZWREYXk9YSx0aGlzLnNlbGVjdGVkRW5kRGF5PWQs''@;'; put 'put ''dGhpcy5mb2N1c2FibGVEYXk9aCx0aGlzLnRvZGF5PWYsdGhpcy5maXJzdERheU9mV2Vlaz12LHRoaXMuZXhjbHVkZWREYXRlcz1NLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3M9W10sdGhpcy5pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl9Z2V0IGNhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9j''@;'; put 'put ''YWxlbmRhclZpZXd9dXBkYXRlRm9jdXNhYmxlRGF5KGwpe3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMSksdGhpcy5zZXRGb2N1c2FibGVGbGFnKGwsITApLHRoaXMuZm9jdXNhYmxlRGF5PWx9dXBkYXRlU2VsZWN0ZWREYXkobCl7dGhpcy5zZXRTZWxlY3RlZERh''@;'; put 'put ''eSh0aGlzLnNlbGVjdGVkRGF5LCExKSx0aGlzLnNlbGVjdGVkRGF5PWwsdGhpcy5zZXRTZWxlY3RlZERheShsLCEwKX11cGRhdGVTZWxlY3RlZEVuZERheShsKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWRFbmREYXksITEpLHRoaXMuc2VsZWN0ZWRFbmREYXk9bCx0aGlzLnNl''@;'; put 'put ''dFNlbGVjdGVkRGF5KGwsITApfWluaXRpYWxpemVDYWxlbmRhclZpZXcoKXtjb25zdCBsPXRoaXMuY2FsZW5kYXIucHJldmlvdXNNb250aCgpLGE9dGhpcy5jYWxlbmRhci5uZXh0TW9udGgoKSxkPXRoaXMubnVtRGF5c0Zyb21QcmV2TW9udGhJbkNhbFZpZXcodGhpcy5jYWxlbmRhci55ZWFy''@;'; put 'put ''LHRoaXMuY2FsZW5kYXIubW9udGgpLGg9NDItKHRoaXMuY2FsZW5kYXIuZGF5cy5sZW5ndGgrZCk7bGV0IGY9W10sdj1bXTtkPjAmJihmPXRoaXMuZ2VuZXJhdGVEYXlWaWV3TW9kZWxzKGwuZGF5cy5zbGljZSgtMSpkKSwhMCwhMSkpLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3M9dGhpcy5nZW5l''@;'; put 'put ''cmF0ZURheVZpZXdNb2RlbHModGhpcy5jYWxlbmRhci5kYXlzLCExLCEwKSxoPjAmJih2PXRoaXMuZ2VuZXJhdGVEYXlWaWV3TW9kZWxzKGEuZGF5cy5zbGljZSgwLGgpLCEwLCExKSksdGhpcy5fY2FsZW5kYXJWaWV3PXRoaXMuZ2VuZXJhdGVDYWxlbmRhclZpZXcoZix0aGlzLmN1cnJNb250''@;'; put 'put ''aERheVZpZXdzLHYpLHRoaXMuaW5pdGlhbGl6ZVNlbGVjdGVkRGF5KCksdGhpcy5pbml0aWFsaXplRm9jdXNhYmxlRGF5KCl9aXNEYXRlRXhjbHVkZWQobCl7Y29uc3R7bWluRGF0ZTphLG1heERhdGU6ZH09dGhpcy5leGNsdWRlZERhdGVzLGg9YS50b0NvbXBhcmlzb25TdHJpbmcoKSxmPWQu''@;'; put 'put ''dG9Db21wYXJpc29uU3RyaW5nKCksdj1sLnRvQ29tcGFyaXNvblN0cmluZygpO3JldHVybiEodj49aCYmdjw9Zil9Z2VuZXJhdGVEYXlWaWV3TW9kZWxzKGwsYSxkKXtjb25zdCBoPWwubWFwKGY9Pm5ldyB2WmUoZiwhMSxhLHRoaXMuaXNEYXRlRXhjbHVkZWQoZiksITEsITEpKTtyZXR1cm4g''@;'; put 'put ''ZCYmdGhpcy5jYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy50b2RheSkmJihoW3RoaXMudG9kYXkuZGF0ZS0xXS5pc1RvZGF5c0RhdGU9ITApLGh9bnVtRGF5c0Zyb21QcmV2TW9udGhJbkNhbFZpZXcobCxhKXtjb25zdCBkPWZ1bmN0aW9uIHBaZShjLGwsYSl7cmV0dXJuIG5ldyBEYXRl''@;'; put 'put ''KGMsbCxhKS5nZXREYXkoKX0obCxhLDEpO3JldHVybiBkPj10aGlzLmZpcnN0RGF5T2ZXZWVrP2QtdGhpcy5maXJzdERheU9mV2Vlazo3K2QtdGhpcy5maXJzdERheU9mV2Vla31pc0RheUluQ2FsZW5kYXJWaWV3KGwpe3JldHVybiEhdGhpcy5jYWxlbmRhci5pc0RheUluQ2FsZW5kYXIobCl9''@;'; put 'put ''Z2VuZXJhdGVDYWxlbmRhclZpZXcobCxhLGQpe2NvbnN0IGg9Wy4uLmwsLi4uYSwuLi5kXSxmPVtdO2ZvcihsZXQgdj0wO3Y8Njt2KyspZlt2XT1oLnNsaWNlKDcqdiw3Kih2KzEpKTtyZXR1cm4gZn1pbml0aWFsaXplU2VsZWN0ZWREYXkoKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2Vs''@;'; put 'put ''ZWN0ZWREYXksITApLHRoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZEVuZERheSwhMCl9aW5pdGlhbGl6ZUZvY3VzYWJsZURheSgpe3RoaXMuZm9jdXNhYmxlRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5mb2N1c2FibGVEYXkpP3RoaXMuc2V0Rm9jdXNhYmxlRmxh''@;'; put 'put ''Zyh0aGlzLmZvY3VzYWJsZURheSwhMCk6dGhpcy5zZWxlY3RlZERheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuc2VsZWN0ZWREYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5zZWxlY3RlZERheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy5zZWxlY3RlZERheS5j''@;'; put 'put ''bG9uZSgpKTp0aGlzLnNlbGVjdGVkRW5kRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5zZWxlY3RlZEVuZERheSk/KHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLnNlbGVjdGVkRW5kRGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnNlbGVjdGVkRW5kRGF5LmNsb25l''@;'; put 'put ''KCkpOnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnRvZGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMudG9kYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMudG9kYXkuY2xvbmUoKSk6KHRoaXMuZm9jdXNhYmxlRGF5PW5ldyBMZCh0aGlzLmNhbGVuZGFyLnllYXIsdGhp''@;'; put 'put ''cy5jYWxlbmRhci5tb250aCwxNSksdGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCEwKSl9c2V0Rm9jdXNhYmxlRmxhZyhsLGEpe2wmJih0aGlzLmN1cnJNb250aERheVZpZXdzW2wuZGF0ZS0xXS5pc0ZvY3VzYWJsZT1hKX1zZXRTZWxlY3RlZERheShsLGEpe2wmJnRo''@;'; put 'put ''aXMuaXNEYXlJbkNhbGVuZGFyVmlldyhsKSYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbbD8uZGF0ZS0xXS5pc1NlbGVjdGVkPWEpfX1sZXQgWng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxvY2FsZT1hLHRoaXMuX2ZpcnN0RGF5T2ZXZWVrPTAsdGhpcy5pbml0aWFsaXpl''@;'; put 'put ''TG9jYWxlRGF0YSgpfWdldCBmaXJzdERheU9mV2Vlaygpe3JldHVybiB0aGlzLl9maXJzdERheU9mV2Vla31nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVEYXlzfWdldCBsb2NhbGVEYXlzTmFycm93KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXMubWFwKGE9PmEubmFycm93''@;'; put 'put ''KX1nZXQgbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWR9Z2V0IGxvY2FsZU1vbnRoc1dpZGUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzV2lkZX1nZXQgbG9jYWxlRGF0ZUZvcm1hdCgpe3JldHVybiB0aGlzLl9sb2NhbGVE''@;'; put 'put ''YXRlRm9ybWF0fWluaXRpYWxpemVMb2NhbGVEYXRhKCl7dGhpcy5pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250''@;'; put 'put ''aHNXaWRlKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF5cygpfWluaXRpYWxpemVMb2NhbGVEYXlzKCl7Y29uc3QgYT1bXSxkPWpVKHRoaXMubG9jYWxlLGQwLlN0YW5kYWxvbmUsZGwuV2lkZSkuc2xpY2UoKSxoPWpVKHRoaXMubG9jYWxlLGQwLlN0YW5kYWxvbmUsZGwuTmFycm93KS5zbGlj''@;'; put 'put ''ZSgpLGY9dGhpcy5maXJzdERheU9mV2Vlaztmb3IobGV0IHY9MDt2PDc7disrKWEucHVzaCh7ZGF5OmRbdl0sbmFycm93Omhbdl19KTtpZihmPjApe2NvbnN0IHY9YS5zcGxpY2UoMCxmKTthLnB1c2goLi4udil9dGhpcy5fbG9jYWxlRGF5cz1hfWluaXRpYWxpemVMb2NhbGVNb250aHNBYmJy''@;'; put 'put ''ZXZpYXRlZCgpe3RoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlhdGVkPXpVKHRoaXMubG9jYWxlLGQwLlN0YW5kYWxvbmUsZGwuQWJicmV2aWF0ZWQpLnNsaWNlKCl9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKXt0aGlzLl9sb2NhbGVNb250aHNXaWRlPXpVKHRoaXMubG9jYWxlLGQwLlN0''@;'; put 'put ''YW5kYWxvbmUsZGwuV2lkZSkuc2xpY2UoKX1pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKXt0aGlzLl9maXJzdERheU9mV2Vlaz1mdW5jdGlvbiB4X2UoYyl7cmV0dXJuIG8xKGMpW2VjLkZpcnN0RGF5T2ZXZWVrXX0odGhpcy5sb2NhbGUpfWluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCl7''@;'; put 'put ''dGhpcy5fbG9jYWxlRGF0ZUZvcm1hdD1mdW5jdGlvbiBNTShjLGwpe3JldHVybiBDMihvMShjKVtlYy5EYXRlRm9ybWF0XSxsKX0odGhpcy5sb2NhbGUsQ2QuU2hvcnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihCZikpfSxjLlx1MDI3NXBy''@;'; put 'put ''b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIE9ke2NvbnN0cnVjdG9yKGwsYSl7dGhpcy55ZWFyPWwsdGhpcy5tb250aD1hLHRoaXMuaW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVh''@;'; put 'put ''ciYmdGhpcy5tb250aD09PWwubW9udGh9aXNEYXlJbkNhbGVuZGFyKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1wcmV2aW91c01vbnRoKCl7cmV0dXJuIDA9PT10aGlzLm1vbnRoP25ldyBPZCh0aGlzLnllYXItMSwxMSk6bmV3IE9kKHRo''@;'; put 'put ''aXMueWVhcix0aGlzLm1vbnRoLTEpfW5leHRNb250aCgpe3JldHVybiAxMT09PXRoaXMubW9udGg/bmV3IE9kKHRoaXMueWVhcisxLDApOm5ldyBPZCh0aGlzLnllYXIsdGhpcy5tb250aCsxKX1wcmV2aW91c1llYXIoKXtyZXR1cm4gbmV3IE9kKHRoaXMueWVhci0xLHRoaXMubW9udGgpfW5l''@;'; put 'put ''eHRZZWFyKCl7cmV0dXJuIG5ldyBPZCh0aGlzLnllYXIrMSx0aGlzLm1vbnRoKX1pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKXtjb25zdCBsPWxkZSh0aGlzLnllYXIsdGhpcy5tb250aCk7dGhpcy5kYXlzPUFycmF5KGwpLmZpbGwobnVsbCkubWFwKChhLGQpPT5uZXcgTGQodGhpcy55ZWFy''@;'; put 'put ''LHRoaXMubW9udGgsZCsxKSl9fWxldCBNaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5pc1JhbmdlUGlja2VyPSExLHRoaXMuaGFzQWN0aW9uQnV0dG9ucz0hMSx0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZT1uZXcgV24sdGhp''@;'; put 'put ''cy5fc2VsZWN0ZWRFbmREYXlDaGFuZ2U9bmV3IFduLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlPW5ldyBXbix0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2U9bmV3IFduLHRoaXMuX3JlZnJlc2hDYWxlbmRhclZpZXc9bmV3IFduLHRoaXMuX2ZvY3VzZWREYXlDaGFuZ2U9bmV3IFdu''@;'; put 'put ''fWdldCB0b2RheSgpe3JldHVybiB0aGlzLl90b2RheX1nZXQgZGlzcGxheWVkQ2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJ9Z2V0IHNlbGVjdGVkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBzZWxl''@;'; put 'put ''Y3RlZEVuZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGZvY3VzT25DYWxl''@;'; put 'put ''bmRhckNoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGZvY3VzZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZERheUNoYW5nZS5hc09ic2VydmFibGUoKS5waXBlKEd1KGE9PnRoaXMuZm9jdXNlZERheT1hKSl9Z2V0''@;'; put 'put ''IHJlZnJlc2hDYWxlbmRhclZpZXcoKXtyZXR1cm4gdGhpcy5fcmVmcmVzaENhbGVuZGFyVmlldy5hc09ic2VydmFibGUoKX1ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoYSx7ZW1pdEV2ZW50OmR9PXtlbWl0RXZlbnQ6ITB9KXtpZih0aGlzLmlzUmFuZ2VQaWNrZXIpe2NvbnN0e3N0YXJ0RGF0''@;'; put 'put ''ZTpoLGVuZERhdGU6Zn09YTtoJiZmPyh0aGlzLnNldFNlbGVjdGVkRGF5KGgsZCksdGhpcy5zZXRTZWxlY3RlZEVuZERheShmLGQpKToobnVsbCE9PWYmJnRoaXMuc2V0U2VsZWN0ZWRFbmREYXkoZixkKSxudWxsIT09aCYmdGhpcy5zZXRTZWxlY3RlZERheShoLGQpKX1lbHNlIHRoaXMuc2V0''@;'; put 'put ''U2VsZWN0ZWREYXkoYSxkKTt0aGlzLl9yZWZyZXNoQ2FsZW5kYXJWaWV3Lm5leHQoKX1pbml0aWFsaXplQ2FsZW5kYXIoKXt0aGlzLmZvY3VzZWREYXk9bnVsbCx0aGlzLmluaXRpYWxpemVUb2RheXNEYXRlKCksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXI9dGhpcy5zZWxlY3RlZERheT9uZXcg''@;'; put 'put ''T2QodGhpcy5zZWxlY3RlZERheS55ZWFyLHRoaXMuc2VsZWN0ZWREYXkubW9udGgpOm5ldyBPZCh0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCl9Y2hhbmdlTW9udGgoYSl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgT2QodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIueWVh''@;'; put 'put ''cixhKSl9Y2hhbmdlWWVhcihhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBPZChhLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm1vbnRoKSl9bW92ZVRvTmV4dE1vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0TW9udGgo''@;'; put 'put ''KSl9bW92ZVRvUHJldmlvdXNNb250aCgpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIucHJldmlvdXNNb250aCgpKX1tb3ZlVG9OZXh0WWVhcigpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubmV4dFll''@;'; put 'put ''YXIoKSl9bW92ZVRvUHJldmlvdXNZZWFyKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c1llYXIoKSl9bW92ZVRvQ3VycmVudE1vbnRoKCl7dGhpcy5kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy50b2RheSl8''@;'; put 'put ''fHRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLm5leHQoKX1tb3ZlVG9TcGVjaWZpY01vbnRoKGEpe3RoaXMuZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFy''@;'; put 'put ''KGEpfHx0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBPZChhLnllYXIsYS5tb250aCkpfWluY3JlbWVudEZvY3VzRGF5KGEpe3RoaXMuaG92ZXJlZERheT10aGlzLmZvY3VzZWREYXk9dGhpcy5mb2N1c2VkRGF5LmluY3JlbWVudEJ5KGEpLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlz''@;'; put 'put ''RGF5SW5DYWxlbmRhcih0aGlzLmZvY3VzZWREYXkpP3RoaXMuX2ZvY3VzZWREYXlDaGFuZ2UubmV4dCh0aGlzLmZvY3VzZWREYXkpOnRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKHRoaXMuZm9jdXNlZERheS55ZWFyLHRoaXMuZm9jdXNlZERheS5tb250aCkpLHRoaXMuX2ZvY3Vz''@;'; put 'put ''T25DYWxlbmRhckNoYW5nZS5uZXh0KCl9cmVzZXRTZWxlY3RlZERheSgpe3RoaXMuc2VsZWN0ZWREYXk9dGhpcy5wZXJzaXN0ZWREYXRlLHRoaXMuc2VsZWN0ZWRFbmREYXk9dGhpcy5wZXJzaXN0ZWRFbmREYXRlfWNvbnZlcnREYXRlVG9EYXlNb2RlbChhKXtyZXR1cm4gbmV3IExkKGEuZ2V0''@;'; put 'put ''RnVsbFllYXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpfXNldFNlbGVjdGVkRGF5KGEsZCl7dGhpcy5zZWxlY3RlZERheT1hLGQmJnRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlLm5leHQoYSl9c2V0U2VsZWN0ZWRFbmREYXkoYSxkKXt0aGlzLnNlbGVjdGVkRW5kRGF5PWEsZCYmdGhpcy5f''@;'; put 'put ''c2VsZWN0ZWRFbmREYXlDaGFuZ2UubmV4dChhKX1zZXREaXNwbGF5ZWRDYWxlbmRhcihhKXt0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0VxdWFsKGEpfHwodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXI9YSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5uZXh0KCkpfWluaXRpYWxpemVU''@;'; put 'put ''b2RheXNEYXRlKCl7dGhpcy5fdG9kYXlzRnVsbERhdGU9bmV3IERhdGUsdGhpcy5fdG9kYXk9bmV3IExkKHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldEZ1bGxZZWFyKCksdGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0TW9udGgoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXREYXRlKCkpfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxTbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fbmdab25lPWEsdGhpcy5wbGF0Zm9ybUlkPWR9''@;'; put 'put ''Zm9jdXNDZWxsKGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMubmdab25lSXNTdGFibGVJbkJyb3dzZXIoKS5zdWJzY3JpYmUoKCk9Pntjb25zdCBkPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbdGFiaW5kZXg9IjAiXScpO2QmJmQuZm9jdXMoKX0p''@;'; put 'put ''fSl9Zm9jdXNJbnB1dChhKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMubmdab25lSXNTdGFibGVJbkJyb3dzZXIoKS5zdWJzY3JpYmUoKCk9PmEuZm9jdXMoKSkpfWVsZW1lbnRJc0ZvY3VzZWQoYSl7cmV0dXJuIHRsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50''@;'; put 'put ''LmFjdGl2ZUVsZW1lbnQ9PT1hfW5nWm9uZUlzU3RhYmxlSW5Ccm93c2VyKCl7cmV0dXJuIHRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKGFtKCksJGwoKCk9PnRsKHRoaXMucGxhdGZvcm1JZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoeHIoV2EpLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksY2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmRpc2FibGVkRGF0ZXM9e21pbkRhdGU6bmV3IExkKDAsMCwxKSxtYXhEYXRlOm5l''@;'; put 'put ''dyBMZCg5OTk5LDExLDMxKX0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD0iZGQvTU0veSIsdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PXFMLHRoaXMuZGVsaW1pdGVycz1bIi8iLCIvIl0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD1hLmxvY2FsZURhdGVGb3JtYXQsdGhpcy5pbml0aWFs''@;'; put 'put ''aXplTG9jYWxlRGlzcGxheUZvcm1hdCgpfWdldCBwbGFjZWhvbGRlclRleHQoKXtjb25zdCBhPXRoaXMubG9jYWxlRGlzcGxheUZvcm1hdC5mb3JtYXQ7cmV0dXJuIGFbMF0rdGhpcy5kZWxpbWl0ZXJzWzBdK2FbMV0rdGhpcy5kZWxpbWl0ZXJzWzFdK2FbMl19c2V0TWluRGF0ZShhKXtpZihh''@;'; put 'put ''KXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIpLm1hcCh2PT5wYXJzZUludCh2LDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IExkKGQsaC0xLGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IExkKDAsMCwxKX1zZXRNYXhEYXRlKGEpe2lmKGEpe2NvbnN0''@;'; put 'put ''W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKHY9PnBhcnNlSW50KHYsMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgTGQoZCxoLTEsZil9ZWxzZSB0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgTGQoOTk5OSwxMSwzMSl9c2V0UmFuZ2VPcHRpb25zKGEpe2NvbnN0IGQ9''@;'; put 'put ''dGhpcy52YWxpZGF0ZURhdGVSYW5nZU9wdGlvbnMoYSk7dGhpcy5kYXRlUmFuZ2VPcHRpb25zPWR8fFtdfWdldFJhbmdlT3B0aW9ucygpe3JldHVybiB0aGlzLmRhdGVSYW5nZU9wdGlvbnN9dG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpe2lmKGEpe2lmKGlzTmFOKGEuZ2V0VGltZSgp''@;'; put 'put ''KSlyZXR1cm4iIjtjb25zdCBkPWEuZ2V0RGF0ZSgpLGg9YS5nZXRNb250aCgpKzEsZj1kPjk/ZC50b1N0cmluZygpOiIwIitkLHY9aD45P2gudG9TdHJpbmcoKToiMCIraDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09cUw/Zit0aGlzLmRlbGltaXRlcnNbMF0rdit0aGlzLmRl''@;'; put 'put ''bGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PWFHP3YrdGhpcy5kZWxpbWl0ZXJzWzBdK2YrdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTphLmdldEZ1bGxZZWFyKCkrdGhpcy5kZWxpbWl0ZXJzWzBdK3YrdGhpcy5kZWxpbWl0''@;'; put 'put ''ZXJzWzFdK2Z9cmV0dXJuIiJ9Z2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSl7aWYoIWF8fCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbnVsbDtjb25zdCBkPWEubWF0Y2goY1plKTtpZighZHx8MyE9PWQubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0W2gsZix2XT1kO3JldHVybiB0aGlz''@;'; put 'put ''LmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1xTD90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh2LGYsaCk6dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09YUc/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUodixoLGYpOnRoaXMudmFsaWRhdGVBbmRHZXREYXRlKGgsZix2KX12YWxpZGF0ZURhdGVSYW5n''@;'; put 'put ''ZU9wdGlvbnMoYSl7Y29uc3QgZD1bXTtyZXR1cm4gYT8uZm9yRWFjaChoPT57MiE9PWg/LnZhbHVlPy5sZW5ndGh8fCJbb2JqZWN0IERhdGVdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChoPy52YWx1ZVswXSl8fCJbb2JqZWN0IERhdGVdIiE9PU9iamVjdC5wcm90b3R5cGUu''@;'; put 'put ''dG9TdHJpbmcuY2FsbChoPy52YWx1ZVsxXSl8fGQucHVzaChoKX0pLGR9aW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3JtYXQoKXtjb25zdCBhPXRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9b1plLnRlc3QoYSk/''@;'; put 'put ''cUw6c1plLnRlc3QoYSk/YUc6aFplLHRoaXMuZXh0cmFjdERlbGltaXRlcnMoKX1leHRyYWN0RGVsaW1pdGVycygpe2lmKHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQpe2NvbnN0IGQ9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC5yZXBsYWNlKGRaZSwiIikuc3BsaXQobFplKTtkJiY0PT09''@;'; put 'put ''ZC5sZW5ndGg/dGhpcy5kZWxpbWl0ZXJzPVtkWzFdLGRbMl1dOmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgcmVjZWl2ZWQuIERlbGltaXRlcnMgZXh0cmFjdGVkOiAiLGQpfX1pc1ZhbGlkTW9udGgoYSl7cmV0dXJuIGE+LTEmJmE8MTJ9aXNWYWxpZERhdGUoYSxkLGgp''@;'; put 'put ''e3JldHVybiBoPjAmJmg8PWxkZShhLGQpfXZhbGlkYXRlQW5kR2V0RGF0ZShhLGQsaCl7Y29uc3QgZj0rYSx2PStkLTEsTT0raDtpZighdGhpcy5pc1ZhbGlkTW9udGgodil8fCF0aGlzLmlzVmFsaWREYXRlKGYsdixNKSlyZXR1cm4gbnVsbDtjb25zdCBEPWZ1bmN0aW9uIGdaZShjKXtpZihj''@;'; put 'put ''Pjk5OTl8fGM+MTAwJiZjPDk5OXx8YzwxMClyZXR1cm4tMTtpZihjPjk5OSlyZXR1cm4gYztjb25zdCBsPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKTtsZXQgZD1jKzEwMCpNYXRoLmZsb29yKGwvMTAwKTtyZXR1cm4gZD5sKzIwJiYoZC09MTAwKSxkfShmKTtyZXR1cm4tMSE9PUQ/bmV3IERh''@;'; put 'put ''dGUoRCx2LE0pOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFp4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWXk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3Rv''@;'; put 'put ''dWNoZWRDaGFuZ2U9bmV3IFduLHRoaXMuX2RpcnR5Q2hhbmdlPW5ldyBXbn1nZXQgdG91Y2hlZENoYW5nZSgpe3JldHVybiB0aGlzLl90b3VjaGVkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBkaXJ0eUNoYW5nZSgpe3JldHVybiB0aGlzLl9kaXJ0eUNoYW5nZS5hc09ic2VydmFibGUoKX1t''@;'; put 'put ''YXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZENoYW5nZS5uZXh0KCl9bWFya0FzRGlydHkoKXt0aGlzLl9kaXJ0eUNoYW5nZS5uZXh0KCl9c2V0RGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZD1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxjZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMub25TZWxlY3REYXk9bmV3IEtyfWdldCBk''@;'; put 'put ''YXlWaWV3KCl7cmV0dXJuIHRoaXMuX2RheVZpZXd9c2V0IGRheVZpZXcoYSl7dGhpcy5fZGF5Vmlldz1hfWdldCBkYXlTdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXlWaWV3LmlzU2VsZWN0ZWQ/dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNr''@;'; put 'put ''ZXJTZWxlY3RlZExhYmVsLHtGVUxMX0RBVEU6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX0pOnRoaXMuX2RheVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9Z2V0IGlzUmFuZ2VTdGFydERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNS''@;'; put 'put ''YW5nZVBpY2tlciYmdGhpcy5kYXlWaWV3Py5kYXlNb2RlbD8udG9Db21wYXJpc29uU3RyaW5nKCk9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnRvQ29tcGFyaXNvblN0cmluZygpfWdldCBpc1JhbmdlRW5kRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0''@;'; put 'put ''aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRheVZpZXc/LmRheU1vZGVsPy50b0NvbXBhcmlzb25TdHJpbmcoKT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8udG9Db21wYXJpc29uU3RyaW5nKCl9aG92ZXJMaXN0ZW5lcigpe3RoaXMuZGF5Vmll''@;'; put 'put ''dy5pc0Rpc2FibGVkfHwodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsKX1vbkRheVZpZXdGb2N1cygpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c2VkRGF5PXRoaXMuZGF5Vmlldy5kYXlNb2RlbH1zZWxlY3REYXko''@;'; put 'put ''KXt0aGlzLmRheVZpZXcuaXNEaXNhYmxlZHx8dGhpcy5vblNlbGVjdERheS5lbWl0KHRoaXMuZGF5Vmlldy5kYXlNb2RlbCl9aXNJblJhbmdlKCl7cmV0dXJuISF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5z''@;'; put 'put ''ZWxlY3RlZERheSYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5P3RoaXMuX2RheVZpZXcuZGF5TW9kZWw/LmlzQWZ0ZXIodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNCZWZvcmUodGhp''@;'; put 'put ''cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KTohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSkmJnRoaXMuX2RheVZpZXcuZGF5TW9kZWw/LmlzQWZ0ZXIodGhp''@;'; put 'put ''cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNCZWZvcmUodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWREYXksITApKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko''@;'; put 'put ''R2UoTWgpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXkiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLmhvdmVyTGlzdGVuZXIoKX0pLDImYSYm''@;'; put 'put ''VHIoImRheSIsITApfSxpbnB1dHM6e2RheVZpZXc6W05uLk5vbmUsImNsckRheVZpZXciLCJkYXlWaWV3Il19LG91dHB1dHM6e29uU2VsZWN0RGF5OiJzZWxlY3REYXkifSxkZWNsczoyLHZhcnM6MTksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9j''@;'; put 'put ''dXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRheVZpZXdGb2N1cygpfSksTGUoMSksaGUoKSksMiZhJiYoVHIo''@;'; put 'put ''ImlzLXRvZGF5IixkLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGQuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLGQuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1NlbGVjdGVkKSgiaW4tcmFuZ2UiLGQuaXNJblJhbmdl''@;'; put 'put ''KCkpKCJpcy1zdGFydC1yYW5nZSIsZC5pc1JhbmdlU3RhcnREYXkpKCJpcy1lbmQtcmFuZ2UiLGQuaXNSYW5nZUVuZERheSksaHIoInRhYmluZGV4IixkLmRheVZpZXcudGFiSW5kZXgpKCJhcmlhLWN1cnJlbnQiLGQuZGF5Vmlldy5pc1RvZGF5c0RhdGU/ImRhdGUiOiJmYWxzZSIpKCJhcmlh''@;'; put 'put ''LWxhYmVsIixkLmRheVN0cmluZykoImFyaWEtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1NlbGVjdGVkKSxmZSgpLERyKCIgIixkLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2''@;'; put 'put ''LE0sRCl7dGhpcy5fbG9jYWxlSGVscGVyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9kYXRlSU9TZXJ2aWNlPWYsdGhpcy5fZWxSZWY9dix0aGlzLl9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPU0sdGhp''@;'; put 'put ''cy5fdG9nZ2xlU2VydmljZT1ELHRoaXMuX3N1YnM9W10sdGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpLHRoaXMuaW5pdGlhbGl6ZVN1YnNjcmlwdGlvbnMoKX1nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURheXN9Z2V0IGNhbGVuZGFy''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fWdldCBzZWxlY3RlZEVuZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdh''@;'; put 'put ''dGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl9Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0aGlz''@;'; put 'put ''Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vbktleURvd24oYSl7aWYoYSYmdGhpcy5mb2N1c2VkRGF5KXN3aXRjaChJMihhLmtleSkpe2Nhc2UgZ2EuQXJy''@;'; put 'put ''b3dVcDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNlIGdhLkFycm93RG93bjphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDcp''@;'; put 'put ''O2JyZWFrO2Nhc2UgZ2EuQXJyb3dMZWZ0OmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTEpO2JyZWFrO2Nhc2UgZ2EuQXJyb3dSaWdodDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNl''@;'; put 'put ''LmluY3JlbWVudEZvY3VzRGF5KDEpfX1zZXRTZWxlY3RlZERheShhKXtjb25zdCBkPXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rpb25CdXR0b25zLGg9dGhpcy51cGRhdGVDYWxlbmRhclZpZXdNb2RhbChhKTt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2Vs''@;'; put 'put ''ZWN0ZWREYXlDaGFuZ2VkKGgse2VtaXRFdmVudDohZH0pLGR8fCh0aGlzLl9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCksdGhpcy52YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigpKX1pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlzLl9k''@;'; put 'put ''YXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+''@;'; put 'put ''e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxlRGF5KGEpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXND''@;'; put 'put ''ZWxsKHRoaXMuX2VsUmVmKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlZnJlc2hDYWxlbmRhclZpZXcuc3Vic2NyaWJlKCgpPT57dGhpcy5yZWZyZXNoQ2FsZW5kYXJWaWV3TW9kYWwoKX0pKX12YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigpeyh0''@;'; put 'put ''aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl8fCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBp''@;'; put 'put ''Y2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmKHRoaXMuX3RvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9dXBkYXRlQ2FsZW5kYXJWaWV3TW9kYWwoYSl7Y29uc3QgZD10aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5fHxudWxsLGg9dGhpcy5fZGF0''@;'; put 'put ''ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI7bGV0IGY9dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZEVuZERheXx8bnVsbDtyZXR1cm4gaD8hZHx8ZCYmZnx8ZCYmYT8uaXNCZWZvcmUoZCk/KHRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkoYSks''@;'; put 'put ''ZiYmKGY9dm9pZCAwLHRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkoZikpKTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KGEpOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkoYSksaD97c3RhcnREYXRl''@;'; put 'put ''OnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXksZW5kRGF0ZTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRW5kRGF5fTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5fXJlZnJlc2hDYWxlbmRhclZpZXdNb2RhbCgpe3RoaXMuY2FsZW5kYXJWaWV3TW9k''@;'; put 'put ''ZWwudXBkYXRlU2VsZWN0ZWREYXkodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZEVuZERheSh0aGlzLl9kYXRlTmF2aWdh''@;'; put 'put ''dGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpfWdlbmVyYXRlQ2FsZW5kYXJWaWV3KCl7dGhpcy5jYWxlbmRhclZpZXdNb2RlbD1uZXcgYlplKHRoaXMuY2FsZW5kYXIsdGhpcy5zZWxlY3RlZERheSx0aGlzLnNlbGVjdGVkRW5kRGF5LHRoaXMuZm9jdXNlZERheSx0aGlzLnRvZGF5LHRoaXMu''@;'; put 'put ''X2xvY2FsZUhlbHBlclNlcnZpY2UuZmlyc3REYXlPZldlZWssdGhpcy5fZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoWngpLEdlKE1oKSxHZShTbSksR2UoY2cpLEdlKEppKSxHZShZeSksR2Uo''@;'; put 'put ''c2MpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1si''@;'; put 'put ''cm9sZSIsInByZXNlbnRhdGlvbiIsMSwiY2FsZW5kYXItdGFibGUiXSxbMSwiY2FsZW5kYXItcm93Iiwid2Vla2RheXMiXSxbImNsYXNzIiwiY2FsZW5kYXItY2VsbCB3ZWVrZGF5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiY2FsZW5kYXItcm93Iiw0LCJuZ0ZvciIsIm5nRm9y''@;'; put 'put ''T2YiXSxbMSwiY2FsZW5kYXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWzMsInNlbGVjdERheSIsImNsckRheVZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJihkZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLGd0KDIsVE5lLDMsMiwidGgiLDIpLGhlKCksZ3QoMyxrTmUsMiwxLCJ0ciIsMyksaGUoKSksMiZhJiYoZmUoMiksTWUoIm5nRm9yT2YiLGQubG9jYWxlRGF5cyksZmUoKSxNZSgibmdGb3JPZiIsZC5jYWxlbmRhclZpZXdN''@;'; put 'put ''b2RlbC5jYWxlbmRhclZpZXcpKX0sZGVwZW5kZW5jaWVzOltucyxjZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFhMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSxhJiYodGhpcy5faXNVc2VyQWdlbnRN''@;'; put 'put ''b2JpbGU9dVplLnRlc3QoYS5kZWZhdWx0Vmlldy5uYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLl9pbm5lcldpZHRoPWEuZGVmYXVsdFZpZXcuaW5uZXJXaWR0aCl9Z2V0IGlzRW5hYmxlZCgpe3JldHVybiEodGhpcy5fZG9jdW1lbnQmJnRoaXMuX2lubmVyV2lkdGg8NzY4JiZ0aGlzLl9pc1Vz''@;'; put 'put ''ZXJBZ2VudE1vYmlsZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHZzKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksb0c9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCxoLGYsdixNLEQsWixyZSxjZSxiZSxFZSxCZSl7c3VwZXIoYSxZeCxkLHYsZixoKSx0aGlzLmVsPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuY29udHJvbD12LHRoaXMuY29udGFpbmVyPU0sdGhpcy5kYXRlSU9TZXJ2aWNlPUQsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9Wix0aGlz''@;'; put 'put ''LmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT1yZSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9Y2UsdGhpcy5wbGF0Zm9ybUlkPWJlLHRoaXMuZm9jdXNTZXJ2aWNlPUVlLHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZT1CZSx0aGlzLmluZGV4PTF9Z2V0IGRpc2FibGVkKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT90aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR8fCEhdGhpcy5jb250cm9sPy5jb250cm9sPy5kaXNhYmxlZDpudWxsfXNldCBkaXNhYmxlZChhKXt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1D''@;'; put 'put ''b250cm9sU2VydmljZS5zZXREaXNhYmxlZChxZihhKSl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyP3RoaXMucGxhY2Vob2xkZXI6dGhpcy5kYXRlSU9TZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dH1nZXQgaW5wdXRUeXBlKCl7cmV0dXJuIHRsKHRoaXMucGxh''@;'; put 'put ''dGZvcm1JZCkmJnRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/ImRhdGUiOiJ0ZXh0In1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5wb3B1bGF0ZVNlcnZpY2VzRnJvbUNvbnRhaW5lckNvbXBvbmVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9y''@;'; put 'put ''VXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JEaXJ0eUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvcklucHV0UmVmb2N1cygpKX1uZ0FmdGVyVmlld0luaXQo''@;'; put 'put ''KXt0aGlzLnByb2Nlc3NJbml0aWFsSW5wdXRzKCl9c2V0Rm9jdXNTdGF0ZXMoKXt0aGlzLnNldEZvY3VzKCEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3N1cGVyLnRyaWdnZXJWYWxpZGF0aW9uKCksdGhpcy5zZXRGb2N1cyghMSl9b25WYWx1ZUNoYW5nZShhKXtjb25zdCBkPXRoaXMuZGF0ZUlP''@;'; put 'put ''U2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKTtpZih0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSYmZCl0aGlzLnVwZGF0ZURhdGUoZCwhMCk7ZWxzZSBpZih0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpKXtjb25zdFtoLGYsdl09YS52YWx1ZS5zcGxp''@;'; put 'put ''dCgiLSIpO3RoaXMudXBkYXRlRGF0ZShuZXcgRGF0ZSgraCwrZi0xLCt2KSwhMCl9ZWxzZSB0aGlzLmVtaXREYXRlT3V0cHV0KG51bGwpfWRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpe3JldHVybiEhdGhpcy5jb250cm9sfXNldERhdGUoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcg''@;'; put 'put ''RGF0ZShhKSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UhPT1hJiZ0aGlzLnVwZGF0ZURhdGUoYSksdGhpcy5pbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWV8fCh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZT1hKX11c2luZ0NsYXJpdHlEYXRlcGlja2VyKCl7cmV0dXJuIHRoaXMuZGF0ZXBp''@;'; put 'put ''Y2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH11c2luZ05hdGl2ZURhdGVwaWNrZXIoKXtyZXR1cm4hdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXNldEZvY3VzKGEpe3RoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD1hKX1wb3B1''@;'; put 'put ''bGF0ZVNlcnZpY2VzRnJvbUNvbnRhaW5lckNvbXBvbmVudCgpe3RoaXMuY29udGFpbmVyfHwodGhpcy5kYXRlSU9TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKGNnKSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihN''@;'; put 'put ''aCksdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoWEwpLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihZeSkpfXByb2Nlc3NJbml0aWFsSW5wdXRzKCl7dGhpcy5kYXRlcGlj''@;'; put 'put ''a2VySGFzRm9ybUNvbnRyb2woKT90aGlzLnVwZGF0ZURhdGUodGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKHRoaXMuY29udHJvbC52YWx1ZSkpOnRoaXMudXBkYXRlRGF0ZSh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZSl9dXBkYXRlRGF0ZShhLGQ9''@;'; put 'put ''ITEpe2NvbnN0IGg9dGhpcy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpO2lmKGQ/dGhpcy5lbWl0RGF0ZU91dHB1dChoKTp0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZT1oLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlKXtjb25zdCBmPWg/bmV3IExkKGguZ2V0RnVsbFllYXIoKSxoLmdl''@;'; put 'put ''dE1vbnRoKCksaC5nZXREYXRlKCkpOm51bGw7dGhpcy51cGRhdGVEYXlNb2RlbChmKX10aGlzLnVwZGF0ZUlucHV0KGgpfXVwZGF0ZUlucHV0KGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKTt0aGlzLnVzaW5nTmF0aXZl''@;'; put 'put ''RGF0ZXBpY2tlcigpPyhhLnNldE1pbnV0ZXMoYS5nZXRNaW51dGVzKCktYS5nZXRUaW1lem9uZU9mZnNldCgpKSx0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWVBc0RhdGUiLGEpKTp0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiZk''@;'; put 'put ''IT09dGhpcy5jb250cm9sLnZhbHVlP3RoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGQpOnRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZCksdGhpcy52YWxpZGF0ZURhdGVSYW5nZSgpfWVsc2UgdGhpcy5yZW5kZXJlci5zZXRQcm9w''@;'; put 'put ''ZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlIiwiIil9Z2V0VmFsaWREYXRlVmFsdWVGcm9tRGF0ZShhKXtpZih0aGlzLmRhdGVJT1NlcnZpY2Upe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKTtyZXR1cm4gdGhpcy5kYXRl''@;'; put 'put ''SU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGQpfXJldHVybiBudWxsfWVtaXREYXRlT3V0cHV0KGEpeyFmdW5jdGlvbiBtWmUoYyxsKXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJmwgaW5zdGFuY2VvZiBEYXRlJiZjLmdldEZ1bGxZZWFyKCk9PT1sLmdldEZ1bGxZZWFy''@;'; put 'put ''KCkmJmMuZ2V0TW9udGgoKT09PWwuZ2V0TW9udGgoKSYmYy5nZXREYXRlKCk9PT1sLmdldERhdGUoKX0oYSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSk/KHRoaXMuZGF0ZUNoYW5nZS5lbWl0KGEpLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWEpOiFhJiZ0aGlzLnByZXZpb3VzRGF0ZUNoYW5n''@;'; put 'put ''ZSYmKHRoaXMuZGF0ZUNoYW5nZS5lbWl0KG51bGwpLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPW51bGwpfWxpc3RlbkZvckNvbnRyb2xWYWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKT90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoJGwo''@;'; put 'put ''KCk9PiF0aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZWxlbWVudElzRm9jdXNlZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKSkuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSkpKTpudWxsfWxpc3Rl''@;'; put 'put ''bkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKXtyZXR1cm4gdGhpcy51c2VyU2VsZWN0ZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRlRGF0ZShhPy50b0RhdGUoKSwhMCkpfWxpc3RlbkZvclRvdWNoQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZp''@;'; put 'put ''Y2UudG91Y2hlZENoYW5nZS5waXBlKCRsKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNUb3VjaGVkKCkpfWxpc3RlbkZvckRpcnR5Q2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJv''@;'; put 'put ''bFNlcnZpY2UuZGlydHlDaGFuZ2UucGlwZSgkbCgoKT0+dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FzRGlydHkoKSl9bGlzdGVuRm9ySW5wdXRSZWZvY3VzKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRp''@;'; put 'put ''b25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnBpcGUoJGwoYT0+ISFhJiYhdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcikpLnN1YnNjcmliZSgoKT0+dGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzSW5wdXQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSl9''@;'; put 'put ''dmFsaWRhdGVEYXRlUmFuZ2UoKXtpZih0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKXtjb25zdCBhPXRoaXMubmdDb250cm9sU2VydmljZT8uY29udHJvbCxkPXRoaXMubmdDb250cm9sU2VydmljZT8uYWRkaXRpb25hbENvbnRyb2xzO3RoaXMuZGF0ZU5hdmlnYXRp''@;'; put 'put ''b25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5pc0JlZm9yZSh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSwhMCkmJihhPy5oYXNFcnJvcigicmFuZ2UiKXx8ZD8uc29tZShmPT5mLmhhc0Vycm9yKCJyYW5nZSIpKSkmJihhLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFs''@;'; put 'put ''aWRpdHkoe2VtaXRFdmVudDohMX0pLGQuZm9yRWFjaChmPT57Zj8uY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEbyksR2UoRHMpLEdlKEppKSxHZShF''@;'; put 'put ''byksR2UoZDEsMTApLEdlKENzKCgpPT5ZeCksOCksR2UoY2csOCksR2UoTWgsOCksR2UoWEwsOCksR2UoWXksOCksR2UoaW8pLEdlKFV5LDgpLEdlKFNtKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsaG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJmb2N1''@;'; put 'put ''cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZXRGb2N1c1N0YXRlcygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudHJpZ2dlclZhbGlkYXRpb24oKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uVmFsdWVDaGFuZ2UoZi50YXJnZXQpfSksMiZhJiYob3AoImRpc2FibGVk''@;'; put 'put ''IixkLmRpc2FibGVkKSxocigicGxhY2Vob2xkZXIiLGQucGxhY2Vob2xkZXJUZXh0KSgidHlwZSIsZC5pbnB1dFR5cGUpKX0saW5wdXRzOntwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOlt3YV19KSxjfSkoKSxkZGU9KCgpPT57Y2xhc3Mg''@;'; put 'put ''YyBleHRlbmRzIG9He2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmlucHV0V2lkdGg9MTN9c2V0IGRhdGUoYSl7dGhpcy5zZXREYXRlKGEpfWdldCBpbnB1dFNpemUoKXtyZXR1cm4gdGhpcy5pbnB1dFdpZHRofWdldCB1''@;'; put 'put ''c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXlDaGFuZ2V9dHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/''@;'; put 'put ''LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9dXBkYXRlRGF5TW9kZWwoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRW5kRGF0ZT10''@;'; put 'put ''aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1ZcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwi''@;'; put 'put ''Y2xyRW5kRGF0ZSIsIiJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJzaXplIixkLmlucHV0U2l6ZSksVHIoImNsci1pbnB1dCIsITApKX0saW5wdXRzOntpbnB1dFdpZHRoOiJpbnB1dFdpZHRoIixkYXRlOltObi5Ob25lLCJjbHJFbmREYXRlIiwi''@;'; put 'put ''ZGF0ZSJdfSxvdXRwdXRzOntkYXRlQ2hhbmdlOiJjbHJFbmREYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtTbV0pLHdhXX0pLGN9KSgpLEpMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBvR3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kYXRlQ2hhbmdlPW5ldyBLcigh''@;'; put 'put ''MSl9c2V0IGRhdGUoYSl7dGhpcy5zZXREYXRlKGEpfXNldCBtaW4oYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSksdGhpcy50cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKX1zZXQgbWF4KGEpe3RoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGEpLHRoaXMudHJpZ2dlckNv''@;'; put 'put ''bnRyb2xWYWxpZGF0aW9uKCl9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0''@;'; put 'put ''ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PWF9dHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSYmKHRoaXMuY29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbnRy''@;'; put 'put ''b2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycykpfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1ZcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siIiwiY2xyRGF0ZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1pbnB1dCIsITApfSxpbnB1dHM6e2RhdGU6W05uLk5vbmUsImNsckRhdGUiLCJkYXRlIl0sbWluOiJtaW4iLG1heDoibWF4In0sb3V0cHV0czp7ZGF0ZUNoYW5n''@;'; put 'put ''ZToiY2xyRGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbU21dKSx3YV19KSxjfSkoKSxoZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG9He2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmlucHV0V2lkdGg9MTN9c2V0IGRh''@;'; put 'put ''dGUoYSl7dGhpcy5zZXREYXRlKGEpfWdldCBpbnB1dFNpemUoKXtyZXR1cm4gdGhpcy5pbnB1dFdpZHRofWdldCB1c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2V9dHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlk''@;'; put 'put ''YXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9''@;'; put 'put ''dXBkYXRlRGF5TW9kZWwoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRGF0ZT10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1Z''@;'; put 'put ''cyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoInNpemUiLGQuaW5wdXRTaXplKSxfZCgidGV4dC1hbGlnbiIsInJpZ2h0''@;'; put 'put ''IiksVHIoImNsci1pbnB1dCIsITApKX0saW5wdXRzOntpbnB1dFdpZHRoOiJpbnB1dFdpZHRoIixkYXRlOltObi5Ob25lLCJjbHJTdGFydERhdGUiLCJkYXRlIl19LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsclN0YXJ0RGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbU21dKSx3YV19KSxjfSko''@;'; put 'put ''KSxHeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGlvbj1UZFsiYm90dG9tLWxlZnQiXSx0aGlzLl9jdXJyZW50Vmlldz0iREFZVklFVyJ9Z2V0IGlzRGF5Vmlldygpe3JldHVybiJEQVlWSUVXIj09PXRoaXMuX2N1cnJlbnRWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0''@;'; put 'put ''dXJuIllFQVJWSUVXIj09PXRoaXMuX2N1cnJlbnRWaWV3fWdldCBpc01vbnRoVmlldygpe3JldHVybiJNT05USFZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iTU9OVEhWSUVXIn1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5f''@;'; put 'put ''Y3VycmVudFZpZXc9IllFQVJWSUVXIn1jaGFuZ2VUb0RheVZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iREFZVklFVyJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p''@;'; put 'put ''LGN9KSgpLGZkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWEsdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWQsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRoaXMuX2VsUmVmPWYsdGhpcy5fdmlld01h''@;'; put 'put ''bmFnZXJTZXJ2aWNlPXYsdGhpcy5jb21tb25TdHJpbmdzPU0sdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg9dGhpcy5jYWxlbmRhck1vbnRoSW5kZXh9Z2V0IG1vbnRoTmFtZXMoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNXaWRlfWdldCBjYWxlbmRhck1v''@;'; put 'put ''bnRoSW5kZXgoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLm1vbnRofWdldCBjYWxlbmRhckVuZE1vbnRoSW5kZXgoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py5tb250aH1nZXQgeWVhckF0''@;'; put 'put ''dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0''@;'; put 'put ''aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1nZXQgY3VycmVudENhbGVuZGFyWWVhcigpe3JldHVybihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX1nZXQgY3VycmVudENhbGVuZGFyTW9udGgoKXtyZXR1cm4obmV3IERhdGUpLmdldE1vbnRoKCl9Z2V0''@;'; put 'put ''SXNSYW5nZVN0YXJ0TW9udGgoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vy''@;'; put 'put ''dmljZS5zZWxlY3RlZERheT8ubW9udGh9Z2V0SXNSYW5nZUVuZE1vbnRoKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXIm''@;'; put 'put ''JmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/Lm1vbnRofWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9ZZWFyVmlldygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2Uu''@;'; put 'put ''Zm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1vbktleURvd24oYSl7aWYoYSl7Y29uc3QgZD1JMihhLmtleSk7ZD09PWdhLkFycm93VXAmJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PjE/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleC09Mix0aGlzLl9kYXRlcGlja2Vy''@;'; put 'put ''Rm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOmQ9PT1nYS5BcnJvd0Rvd24mJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PDEwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgrPTIsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0Nl''@;'; put 'put ''bGwodGhpcy5fZWxSZWYpKTpkPT09Z2EuQXJyb3dSaWdodCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8MTE/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleCsrLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6ZD09''@;'; put 'put ''PWdhLkFycm93TGVmdCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg+MCYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleC0tLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSl9fWlzU2VsZWN0ZWQoYSl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcj09PXRoaXMuY2FsZW5kYXJZZWFyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5tb250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFy''@;'; put 'put ''PT09dGhpcy5jYWxlbmRhclllYXImJmE9PT10aGlzLmNhbGVuZGFyRW5kTW9udGhJbmRleH1vbkhvdmVyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkTW9udGg9YX1jaGFuZ2VNb250aChhKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuY2hhbmdlTW9udGgoYSks''@;'; put 'put ''dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvRGF5VmlldygpfWdldFRhYkluZGV4KGEpe3JldHVybiBhPT09dGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg/MDotMX1uZXh0WWVhcigpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9OZXh0WWVhcigpfXByZXZpb3VzWWVh''@;'; put 'put ''cigpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c1llYXIoKX1jdXJyZW50WWVhcigpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9DdXJyZW50TW9udGgoKX1pc0luUmFuZ2UoYSl7cmV0dXJuISF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uu''@;'; put 'put ''aXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5P3RoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIm''@;'; put 'put ''JmE+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Lm1vbnRoJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS5t''@;'; put 'put ''b250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIhPT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVh''@;'; put 'put ''ciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGh8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyIT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJnRoaXMuY2FsZW5kYXJZZWFy''@;'; put 'put ''PT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Lm1vbnRofHx0aGlzLmNhbGVuZGFyWWVhcj50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVh''@;'; put 'put ''ciYmdGhpcy5jYWxlbmRhclllYXI8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXI6ISghdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpJiYodGhpcy5j''@;'; put 'put ''YWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGgmJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aHx8dGhpcy5jYWxlbmRh''@;'; put 'put ''clllYXI+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShaeCksR2UoTWgpLEdlKFNt''@;'; put 'put ''KSxHZShKaSksR2UoR3kpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb250aHBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleWRv''@;'; put 'put ''d24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pLDImYSYmVHIoIm1vbnRocGlja2VyIiwhMCl9LGRlY2xzOjEzLHZhcnM6MTAsY29uc3RzOltbMSwiY2FsZW5kYXItaGVhZGVyIiwiaW4tbW9udGhwaWNrZXIiXSxbMSwieWVhci12aWV3LXN3aXRjaGVyIl0sWyJ0eXBlIiwi''@;'; put 'put ''YnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9u''@;'; put 'put ''IiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWzEsIm1vbnRocyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5k''@;'; put 'put ''LXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNrIiwibW91c2VlbnRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJtb250aCIsMywiY2xpY2siLCJtb3VzZWVudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh''@;'; put 'put ''JiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvWWVhclZpZXcoKX0pLExlKDMpLGhlKCkoKSxkZSg0LCJkaXYiLDMpKDUsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBk''@;'; put 'put ''LnByZXZpb3VzWWVhcigpfSksR3QoNiwiY2RzLWljb24iLDUpLGhlKCksZGUoNywiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudFllYXIoKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpLGRlKDksImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBkLm5leHRZZWFyKCl9KSxHdCgxMCwiY2RzLWljb24iLDcpLGhlKCkoKSgpLGRlKDExLCJkaXYiLDgpLGd0KDEyLEROZSwyLDEyLCJidXR0b24iLDkpLGhlKCkpLDImYSYmKGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLnllYXJBdHRyU3RyaW5nKSgidGl0bGUiLGQueWVhckF0''@;'; put 'put ''dHJTdHJpbmcpLGZlKCksRHIoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksZmUoMiksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3Vz''@;'; put 'put ''TW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0''@;'; put 'put ''cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksZmUoMiksTWUoIm5nRm9yT2YiLGQubW9udGhOYW1lcykpfSxkZXBlbmRlbmNpZXM6W25zLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxj''@;'; put 'put ''fSkoKTtjbGFzcyBXeHtjb25zdHJ1Y3RvcihsKXt0aGlzLnllYXI9bCx0aGlzLnllYXJSYW5nZT1bXSx0aGlzLmdlbmVyYXRlWWVhclJhbmdlKCl9Z2V0IG1pZGRsZVllYXIoKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2VbTWF0aC5mbG9vcih0aGlzLnllYXJSYW5nZS5sZW5ndGgvMildfW5leHRE''@;'; put 'put ''ZWNhZGUoKXtyZXR1cm4gbmV3IFd4KHRoaXMueWVhcisxMCl9cHJldmlvdXNEZWNhZGUoKXtyZXR1cm4gbmV3IFd4KHRoaXMueWVhci0xMCl9Y3VycmVudERlY2FkZSgpe3JldHVybiBuZXcgV3goKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKX1pblJhbmdlKGwpe3JldHVybiB0aGlzLnllYXJS''@;'; put 'put ''YW5nZS5pbmRleE9mKGwpPi0xfWdlbmVyYXRlWWVhclJhbmdlKCl7Y29uc3QgYT10aGlzLnllYXItdGhpcy55ZWFyJTEwO3RoaXMueWVhclJhbmdlPXRoaXMuZ2VuZXJhdGVSYW5nZShhLGErMTApfWdlbmVyYXRlUmFuZ2UobCxhKXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOmEtbH0sKGQs''@;'; put 'put ''aCk9PmgrbCl9fWxldCBnZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1hLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9lbFJlZj1mLHRoaXMuY29t''@;'; put 'put ''bW9uU3RyaW5ncz12LHRoaXMueWVhclJhbmdlTW9kZWw9bmV3IFd4KHRoaXMuY2FsZW5kYXJZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj10aGlzLmNhbGVuZGFyWWVhcn1nZXQgc2VsZWN0ZWRTdGFydFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5''@;'; put 'put ''Py55ZWFyfWdldCBzZWxlY3RlZEVuZFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9aXND''@;'; put 'put ''dXJyZW50Q2FsZW5kYXJZZWFyKGEpe3JldHVybiBhPT09KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfWdldElzUmFuZ2VTdGFydFllYXIoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNl''@;'; put 'put ''bGVjdGVkRGF5Py55ZWFyfWdldElzUmFuZ2VFbmRZZWFyKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9k''@;'; put 'put ''YXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0IGQ9STIoYS5rZXkpO2Q9PT1nYS5BcnJvd1VwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMikpOmQ9PT1nYS5BcnJvd0Rvd24/''@;'; put 'put ''KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDIpKTpkPT09Z2EuQXJyb3dSaWdodD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoMSkpOmQ9PT1nYS5BcnJvd0xlZnQmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNy''@;'; put 'put ''ZW1lbnRGb2N1c1llYXJCeSgtMSkpfX1jaGFuZ2VZZWFyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VZZWFyKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1vbkhvdmVyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3Zl''@;'; put 'put ''cmVkWWVhcj1hfXByZXZpb3VzRGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLnByZXZpb3VzRGVjYWRlKCl9Y3VycmVudERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UudG9kYXkueWVh''@;'; put 'put ''cil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwuY3VycmVudERlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmV4dERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2Rl''@;'; put 'put ''bC5uZXh0RGVjYWRlKCl9Z2V0VGFiSW5kZXgoYSl7cmV0dXJuIHRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9mb2N1c2VkWWVhcil8fCh0aGlzLl9mb2N1c2VkWWVhcj10aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5jYWxlbmRhclllYXIpP3RoaXMuY2FsZW5kYXJZ''@;'; put 'put ''ZWFyOnRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLnNlbGVjdGVkRW5kWWVhcik/dGhpcy5zZWxlY3RlZEVuZFllYXI6dGhpcy55ZWFyUmFuZ2VNb2RlbC5taWRkbGVZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj09PWE/MDotMX1pc0luUmFuZ2UoYSl7cmV0dXJuISF0aGlzLl9kYXRl''@;'; put 'put ''TmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhciYmdGhpcy5zZWxlY3RlZEVuZFllYXI/YT50aGlzLnNlbGVjdGVkU3RhcnRZZWFyJiZhPHRoaXMuc2VsZWN0ZWRFbmRZZWFyOiEoIXRoaXMuX2RhdGVO''@;'; put 'put ''YXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcnx8dGhpcy5zZWxlY3RlZEVuZFllYXIpJiZhPnRoaXMuc2VsZWN0ZWRTdGFydFllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRZZWFyKX1jaGFuZ2VUb0RheVZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNl''@;'; put 'put ''cnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9aW5jcmVtZW50Rm9jdXNZZWFyQnkoYSl7dGhpcy5fZm9jdXNlZFllYXI9dGhpcy5fZm9jdXNlZFllYXIrYSx0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD1hPjA/dGhpcy55''@;'; put 'put ''ZWFyUmFuZ2VNb2RlbC5uZXh0RGVjYWRlKCk6dGhpcy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''KEdlKE1oKSxHZShHeSksR2UoU20pLEdlKEppKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIteWVhcnBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEm''@;'; put 'put ''YSYmRnQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pLDImYSYmVHIoInllYXJwaWNrZXIiLCEwKX0sZGVjbHM6MTMsdmFyczo5LGNvbnN0czpbWzEsImNhbGVuZGFyLWhlYWRlciJdLFsxLCJjYWxlbmRhci1waWNrZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwx''@;'; put 'put ''LCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLCJ5ZWFyLXJhbmdlIiwzLCJjbGljayJdLFsxLCJ5ZWFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9u''@;'; put 'put ''IiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWzEsInllYXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjYWxlbmRhci1idG4geWVhciIsMywiaXMtc2VsZWN0ZWQiLCJpcy1zdGFydC1yYW5nZSIsImlzLWVuZC1y''@;'; put 'put ''YW5nZSIsImluLXJhbmdlIiwiaXMtdG9kYXkiLCJjbGljayIsIm1vdXNlZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVhciIsMywiY2xpY2siLCJtb3VzZWVudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYo''@;'; put 'put ''ZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvRGF5VmlldygpfSksTGUoMyksaGUoKSgpLGRlKDQsImRpdiIsMykoNSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJl''@;'; put 'put ''dmlvdXNEZWNhZGUoKX0pLEd0KDYsImNkcy1pY29uIiw1KSxoZSgpLGRlKDcsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnREZWNhZGUoKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpLGRlKDksImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBkLm5leHREZWNhZGUoKX0pLEd0KDEwLCJjZHMtaWNvbiIsNyksaGUoKSgpKCksZGUoMTEsImRpdiIsOCksZ3QoMTIsSU5lLDIsMTIsImJ1dHRvbiIsOSksaGUoKSksMiZhJiYoZmUoMyksVXUoIiAiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlWzBdLCIgLSAiLGQueWVh''@;'; put 'put ''clJhbmdlTW9kZWwueWVhclJhbmdlW2QueWVhclJhbmdlTW9kZWwueWVhclJhbmdlLmxlbmd0aC0xXSwiICIpLGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNEZWNhZGUpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy5kYXRlcGlja2VyUHJldmlvdXNEZWNhZGUpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50RGVjYWRlKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNhZGUpLGZlKCks''@;'; put 'put ''aHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0RGVjYWRlKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLGZlKDIpLE1lKCJuZ0Zvck9mIixkLnllYXJSYW5nZU1vZGVsLnllYXJSYW5nZSkp''@;'; put 'put ''fSxkZXBlbmRlbmNpZXM6W25zLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxtZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2''@;'; put 'put ''aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWZ9Z2V0IG1vbnRoQXR0clN0cmluZygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dCx7Q0FMRU5EQVJfTU9OVEg6dGhpcy5jYWxlbmRhck1vbnRo''@;'; put 'put ''fSl9Z2V0IHllYXJBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0WWVhclRleHQse0NBTEVOREFSX1lFQVI6dGhpcy5jYWxlbmRhclllYXIudG9TdHJpbmcoKX0pfWdldCBjYWxlbmRhck1v''@;'; put 'put ''bnRoKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlTW9udGhzQWJicmV2aWF0ZWRbdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLm1vbnRoXX1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vy''@;'; put 'put ''dmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWNoYW5nZVRvTW9udGhWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvTW9udGhWaWV3KCl9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb1llYXJWaWV3KCl9bmV4dE1vbnRo''@;'; put 'put ''KCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb05leHRNb250aCgpfXByZXZpb3VzTW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvUHJldmlvdXNNb250aCgpfWN1cnJlbnRNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9D''@;'; put 'put ''dXJyZW50TW9udGgoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoR3kpLEdlKE1oKSxHZShaeCksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheXBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwi''@;'; put 'put ''YXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRheXBpY2tlciIsITApfSxkZWNsczoxOCx2YXJzOjE0LGNvbnN0czpbWzEsImNsci1zci1vbmx5Il0sWzEsImNhbGVuZGFyLWhlYWRlciJdLFsxLCJjYWxlbmRhci1waWNrZXJzIl0s''@;'; put 'put ''WyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJtb250aHBpY2tlci10cmlnZ2VyIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVhcnBpY2tlci10cmlnZ2VyIiwzLCJjbGljayJdLFsxLCJjYWxlbmRhci1zd2l0Y2hlcnMiXSxbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInN3aXRjaGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInNoYXBlIiwiZXZlbnQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQp''@;'; put 'put ''ezEmYSYmKGRlKDAsImRpdiIsMCksTGUoMSksaGUoKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiYnV0dG9uIiwzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9Nb250aFZpZXcoKX0pLExlKDUpLGhlKCksZGUoNiwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9ZZWFyVmlldygpfSksTGUoNyksaGUoKSgpLGRlKDgsImRpdiIsNSkoOSwiYnV0dG9uIiw2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJldmlvdXNNb250aCgpfSksR3QoMTAsImNkcy1pY29uIiw3KSxoZSgpLGRlKDExLCJidXR0''@;'; put 'put ''b24iLDYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXJyZW50TW9udGgoKX0pLEd0KDEyLCJjZHMtaWNvbiIsOCksaGUoKSxkZSgxMywiYnV0dG9uIiw2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dE1vbnRoKCl9KSxHdCgxNCwiY2RzLWljb24iLDkpLGhl''@;'; put 'put ''KCkoKSgpLEd0KDE1LCJjbHItY2FsZW5kYXIiKSxkZSgxNiwiZGl2IiwwKSxMZSgxNyksaGUoKSksMiZhJiYoZmUoKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksZmUoMyksaHIoImFyaWEtbGFiZWwiLGQubW9udGhBdHRyU3RyaW5nKSgidGl0bGUiLGQubW9u''@;'; put 'put ''dGhBdHRyU3RyaW5nKSxmZSgpLERyKCIgIixkLmNhbGVuZGFyTW9udGgsIiAiKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLnllYXJBdHRyU3RyaW5nKSgidGl0bGUiLGQueWVhckF0dHJTdHJpbmcpLGZlKCksRHIoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksZmUoMiksaHIoImFyaWEtbGFiZWwi''@;'; put 'put ''LGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJy''@;'; put 'put ''ZW50TW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdz''@;'; put 'put ''LmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksZmUoMyksd3IoZC5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50RW5kKSl9LGRlcGVuZGVuY2llczpbcnMsdWRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx2ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlz''@;'; put 'put ''LmNvbW1vblN0cmluZ3M9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1oLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1mfWFwcGx5KCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Pyh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERh''@;'; put 'put ''eSxlbmREYXRlOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5fSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCkpOiF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS5zZWxlY3RlZERheSYmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCkpLHRoaXMudG9nZ2xlU2Vy''@;'; put 'put ''dmljZS5vcGVuPSExfWNhbmNlbCgpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlc2V0U2VsZWN0ZWREYXkoKSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaXMpLEdlKHNjKSxHZShNaCks''@;'; put 'put ''R2UoWXkpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItYWN0aW9ucyJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGVwaWNrZXItYWN0aW9ucyIsITApfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6''@;'; put 'put ''W1sxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FuY2VsKCl9KSxMZSgxKSxo''@;'; put 'put ''ZSgpLGRlKDIsImJ1dHRvbiIsMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFwcGx5KCl9KSxMZSgzKSxoZSgpKSwyJmEmJihmZSgpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLmNhbmNlbCksZmUoMiksd3IoZC5jb21tb25TdHJpbmdzLmtleXMuYXBwbHkpKX0sZW5jYXBzdWxh''@;'; put 'put ''dGlvbjoyfSksY30pKCksYmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy52aWV3TWFuYWdlclNlcnZpY2U9ZCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1oLHRoaXMuZGF0ZUlPU2VydmljZT1mfWdldCBpc01vbnRoVmll''@;'; put 'put ''dygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc01vbnRoVmlld31nZXQgaXNZZWFyVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc1llYXJWaWV3fWdldCBpc0RheVZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNEYXlWaWV3fWdl''@;'; put 'put ''dCBoYXNSYW5nZU9wdGlvbnMoKXtyZXR1cm4hIXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPy5pc1JhbmdlUGlja2VyJiYhIXRoaXMuZGF0ZVJhbmdlT3B0aW9ucz8ubGVuZ3RofWdldCBoYXNBY3Rpb25CdXR0b25zKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0Fj''@;'; put 'put ''dGlvbkJ1dHRvbnN9Z2V0IGRhdGVSYW5nZU9wdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRlSU9TZXJ2aWNlLmdldFJhbmdlT3B0aW9ucygpfW9uUmFuZ2VPcHRpb25TZWxlY3QoYSl7Y29uc3QgZD10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5jb252ZXJ0RGF0ZVRvRGF5TW9kZWwoYT8udmFs''@;'; put 'put ''dWVbMF0pLGg9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuY29udmVydERhdGVUb0RheU1vZGVsKGE/LnZhbHVlWzFdKTt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTpkLGVuZERhdGU6aH0se2VtaXRFdmVudDohdGhpcy5o''@;'; put 'put ''YXNBY3Rpb25CdXR0b25zfSksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvU3BlY2lmaWNNb250aChkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaXMpLEdlKEd5KSxHZShNaCksR2UoY2cpKX0sYy5cdTAyNzVjbXA9VnIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJkaWFsb2ciXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJhcmlhLW1vZGFsIiwhMCkoImFyaWEtbGFiZWwiLGQuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5rZXlzLmRhdGVwaWNrZXJEaWFsb2dMYWJlbCksVHIoImRhdGVwaWNrZXIiLCEwKSgiaGFzLXJhbmdlLW9wdGlvbiIsZC5oYXNSYW5nZU9wdGlvbnMpKCJoYXMtYWN0aW9uLWJ1dHRvbnMiLGQuaGFzQWN0aW9uQnV0dG9ucykpfSxmZWF0dXJlczpbZGEoW1NtXSldLGRlY2xzOjMsdmFy''@;'; put 'put ''czoyLGNvbnN0czpbWyJjYWxlbmRhclZpZXciLCIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWzEsImNsci1kYXRlLXJhbmdlLXBpY2tlci1uYXYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbImNs''@;'; put 'put ''clZlcnRpY2FsTmF2TGluayIsIiIsImhyZWYiLCJqYXZhc2NyaXB0OnZvaWQoMCkiLCJ0YWJpbmRleCIsIjAiLDMsImtleXVwLmVudGVyIiwiY2xpY2siXSxbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmZ3QoMCxPTmUsNSwyLCJuZy1jb250YWluZXIiLDEpKDEs''@;'; put 'put ''Vk5lLDQsNCwibmctdGVtcGxhdGUiLG51bGwsMCxJYyksMiZhKXtjb25zdCBoPWhhKDIpO01lKCJuZ0lmIixkLmhhc1JhbmdlT3B0aW9ucykoIm5nSWZFbHNlIixoKX19LGRlcGVuZGVuY2llczpbbnMsYmEsTjEsUVksdEcsZmRlLGdkZSxtZGUsdmRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSko''@;'; put 'put ''KSxZeD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlLEJlLHFlKXtpZihzdXBlcihxZSxFZSxiZSxCZSksdGhpcy5yZW5kZXJlcj1hLHRoaXMuZWxlbT1kLHRoaXMudG9nZ2xlU2VydmljZT1oLHRoaXMuZGF0ZU5hdmlnYXRp''@;'; put 'put ''b25TZXJ2aWNlPWYsdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9dix0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9TSx0aGlzLmRhdGVJT1NlcnZpY2U9RCx0aGlzLmNvbW1vblN0cmluZ3M9Wix0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1jZSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZp''@;'; put 'put ''Y2U9YmUsdGhpcy5sYXlvdXRTZXJ2aWNlPUVlLHRoaXMubmdDb250cm9sU2VydmljZT1CZSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1xZSx0aGlzLmZvY3VzPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHJlLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShydD0+e3RoaXMuZm9jdXM9cnR9''@;'; put 'put ''KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+e00ubWFya0FzVG91Y2hlZCgpfSkpLGYpe2NvbnN0IHJ0PWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7Zi5oYXNBY3Rpb25CdXR0b25zPWYuaXNSYW5nZVBpY2tlcj0iY2xy''@;'; put 'put ''LWRhdGUtcmFuZ2UtY29udGFpbmVyIj09PXJ0fX1zZXQgc2hvd0FjdGlvbkJ1dHRvbnMoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmIWE/Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIHJhbmdlIHBpY2tlciByZXF1aXJlcyBhY3Rpb24gYnV0dG9u''@;'; put 'put ''cywgW3Nob3dBY3Rpb25CdXR0b25zXSBjYW5ub3QgYmUgdHVybmVkIG9mZi4iKTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rpb25CdXR0b25zPWF9c2V0IGNsclBvc2l0aW9uKGEpe2EmJlRkW2FdJiYodGhpcy52aWV3TWFuYWdlclNlcnZpY2UucG9zaXRpb249VGRbYV0pfXNl''@;'; put 'put ''dCByYW5nZU9wdGlvbnMoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldFJhbmdlT3B0aW9ucyhhKX1zZXQgbWluKGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNaW5EYXRlKGEpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXQ/''@;'; put 'put ''LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21pbl0gaW5wdXQgb25seSB3b3JrcyBmb3IgZGF0ZSByYW5n''@;'; put 'put ''ZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWluYCBhdHRyaWJ1dGUvcHJvcGVydHkgZm9yIHNpbmdsZS1kYXRlIGlucHV0cy4iKX1zZXQgbWF4KGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGEpLHRo''@;'; put 'put ''aXMuY2xyU3RhcnREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21heF0gaW5wdXQgb25s''@;'; put 'put ''eSB3b3JrcyBmb3IgZGF0ZSByYW5nZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWF4YCBhdHRyaWJ1dGUvcHJvcGVydHkgZm9yIHNpbmdsZS1kYXRlIGlucHV0cy4iKX1zZXQgYWN0aW9uQnV0dG9uKGEpe3RoaXMudG9nZ2xlQnV0dG9uPWF9Z2V0IHBvcG92ZXJQb3NpdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbn1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1nZXQgaXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1nZXQgaXNJbnB1dERhdGVEaXNhYmxlZCgp''@;'; put 'put ''e3JldHVybiB0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5kaXNhYmxlZHx8dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlJiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR9Z2V0IGlzUmFuZ2VQaWNrZXIoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uu''@;'; put 'put ''aXNSYW5nZVBpY2tlcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGVSYW5nZVN0cnVjdHVyYWxDaGVja3MoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2E/dGhpcy5pbml0aWFsaXplQ2FsZW5kYXIoKToodGhp''@;'; put 'put ''cy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlc2V0U2VsZWN0ZWREYXkoKSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpKX1nZXRUb2dnbGVCdXR0b25MYWJlbChhKXtp''@;'; put 'put ''ZihhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYS50b0RhdGUoKSk7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsLHtTRUxF''@;'; put 'put ''Q1RFRF9EQVRFOmR9KX1yZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNob29zZURhdGVMYWJlbH1saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZS5waXBlKHgyKHRoaXMu''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSkuc3Vic2NyaWJlKGE9PntpZih0aGlzLmlzRW5hYmxlZCl7Y29uc3QgZD10aGlzLmdldFRvZ2dsZUJ1dHRvbkxhYmVsKGEpLGg9dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudDt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0''@;'; put 'put ''ZShoLCJhcmlhLWxhYmVsIixkKSx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShoLCJ0aXRsZSIsZCl9fSl9aW5pdGlhbGl6ZUNhbGVuZGFyKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5pdGlhbGl6ZUNhbGVuZGFyKCl9ZGF0ZVJhbmdlU3RydWN0dXJhbENoZWNrcygpe3RoaXMu''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlzLmNsckRhdGVJbnB1dCYmY29uc29sZS5lcnJvcigiRXJyb3IhIGNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyU3RhcnREYXRlIGFuZCBjbHJFbmREYXRlIGlucHV0cyIpLHRoaXMuY2xyU3Rh''@;'; put 'put ''cnREYXRlSW5wdXR8fGNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWluIGNsclN0YXJ0RGF0ZSBpbnB1dCIpLHRoaXMuY2xyRW5kRGF0ZUlucHV0fHxjb25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIG11''@;'; put 'put ''c3QgY29udGFpbiBjbHJFbmREYXRlIGlucHV0IikpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFbyksR2UoSmkpLEdlKHNjKSxHZShNaCksR2UoWEwpLEdlKFl5KSxHZShjZyksR2UoaXMpLEdlKFV5KSxHZShHeSksR2UoRGQpLEdlKENwLDgp''@;'; put 'put ''LEdlKGYxKSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZS1jb250YWluZXIiXSxbImNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxKTCw1KSxhbyhoLGhkZSw1''@;'; put 'put ''KSxhbyhoLGRkZSw1KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5jbHJEYXRlSW5wdXQ9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY2xyU3RhcnREYXRlSW5wdXQ9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY2xyRW5kRGF0ZUlucHV0PWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9u''@;'; put 'put ''KGEsZCl7aWYoMSZhJiZxYShCTmUsNSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5hY3Rpb25CdXR0b249aC5maXJzdCl9fSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1kYXRlLWNvbnRhaW5lciIsITApKCJjbHItZm9ybS1jb250cm9sLWRp''@;'; put 'put ''c2FibGVkIixkLmlzSW5wdXREYXRlRGlzYWJsZWQpKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0saW5wdXRzOntzaG93QWN0aW9uQnV0dG9uczoic2hvd0FjdGlvbkJ1dHRvbnMiLGNsclBvc2l0aW9uOiJjbHJQb3NpdGlvbiIscmFuZ2VPcHRpb25zOiJy''@;'; put 'put ''YW5nZU9wdGlvbnMiLG1pbjoibWluIixtYXg6Im1heCJ9LGZlYXR1cmVzOltkYShbQ2gsWngsRGQsVXksZjEsY2csTWgsWEwsWXksR3ksa2RdKSx2ZChbb2ddKSx3YV0sbmdDb250ZW50U2VsZWN0b3JzOnpOZSxkZWNsczoxNCx2YXJzOjE1LGNvbnN0czpbWyJhY3Rpb25CdXR0b24iLCIiXSxb''@;'; put 'put ''NCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsclBvcG92ZXJBbmNob3IiLCIiLDEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIi''@;'; put 'put ''LCJjbGFzcyIsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiZGlzYWJsZWQiLDQsIm5nSWYiXSxbImNka1RyYXBGb2N1cyIsIiIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwi''@;'; put 'put ''Y2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWlj''@;'; put 'put ''b24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMSwiZGF0ZS1yYW5nZS1zZXBhcmF0b3IiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJjbHItaW5wdXQt''@;'; put 'put ''Z3JvdXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIl0sWyJzdGF0dXMiLCJpbmZvIiwic2hhcGUiLCJjYWxlbmRhciJdLFsiY2RrVHJhcEZvY3VzIiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xy''@;'; put 'put ''LXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShqTmUpLFlyKDApLGd0KDEsVU5lLDEsMCwibGFi''@;'; put 'put ''ZWwiLDEpLGRlKDIsImRpdiIsMikoMywiZGl2IiwzKSg0LCJkaXYiLDQpLGd0KDUsWk5lLDUsMCwibmctY29udGFpbmVyIiwxKSxZcig2LDEpLGd0KDcsV05lLDMsMSwiYnV0dG9uIiw1KSg4LFlOZSwxLDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsNiksaGUoKSxndCg5LEdOZSwx''@;'; put 'put ''LDAsImNkcy1pY29uIiw3KSgxMCwkTmUsMSwwLCJjZHMtaWNvbiIsOCksaGUoKSxndCgxMSxLTmUsMSwwLCJuZy1jb250ZW50IiwxKSgxMixxTmUsMSwwLCJuZy1jb250ZW50IiwxKSgxMyxYTmUsMSwwLCJuZy1jb250ZW50IiwxKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJl''@;'; put 'put ''bCYmZC5hZGRHcmlkKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLFRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLGZlKCksTWUoIm5nSWYiLGQuaXNSYW5nZVBpY2tlciksZmUoMiksTWUoIm5nSWYiLGQuaXNFbmFibGVkKSxmZSgpLE1lKCJjbHJQb3BvdmVyQ29u''@;'; put 'put ''dGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5wb3BvdmVyUG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCksZmUoKSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCks''@;'; put 'put ''ZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCksTWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxNZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxaeSxQeCxOeCxIeCxycyxkcyxiZGVdLGVuY2Fw''@;'; put 'put ''c3VsYXRpb246Mn0pLGN9KSgpLHNHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlPWF9dmFsaWRhdGUoYSl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZh''@;'; put 'put ''bHVlKSxoPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCksZj10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO2lmKGQmJmQ8aClyZXR1cm57bWluOnttaW46aC50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6''@;'; put 'put ''ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19O2lmKGQmJmQ+ZilyZXR1cm57bWF4OnttYXg6Zi50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19fXJldHVybiBudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KShHZShjZyw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXSxbIiIsImNsclN0YXJ0RGF0ZSIsIiJdLFsiIiwiY2xyRW5kRGF0ZSIsIiJdXSxmZWF0dXJlczpbZGEoW3twcm92aWRlOmgwLHVzZUV4aXN0aW5nOmMsbXVsdGk6ITB9XSldfSks''@;'; put 'put ''Y30pKCkseVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCxFeSxMT2UsT09lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0''@;'; put 'put ''czpbUmEsS0wsQngsTzIsVngsQXMsYXUsb2RlXX0pLGN9KSgpO25ldyBTdCgiQ2xyRmlsZU1lc3NhZ2VzVGVtcGxhdGVDb250ZXh0Iik7bGV0IHdaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoUE9lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl''@;'; put 'put ''dHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsYXUsYXVdfSksY30pKCkseWRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKHYsZCxhLGgpLHRoaXMuaWZDb250''@;'; put 'put ''cm9sU3RhdGVTZXJ2aWNlPXYsdGhpcy5mb2N1cz0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChmLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShNPT50aGlzLmZvY3VzPU0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRGQpLEdlKENwLDgpLEdl''@;'; put 'put ''KGYxKSxHZShVeSksR2Uoa2QpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxfZGUsNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5p''@;'; put 'put ''bnB1dD1mLmZpcnN0KX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItZm9ybS1j''@;'; put 'put ''b250cm9sLXJlYWRvbmx5IixkLmlucHV0LnJlYWRvbmx5KSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbZGEoW1V5LGtkLGYxLENoLERkXSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpuVmUsZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250''@;'; put 'put ''cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItbnVtYmVyLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LWdyb3VwIl0sWzEsImNsci1pbnB1dC1ncm91cC1hY3Rpb25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24iLDMsImNs''@;'; put 'put ''aWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwibWludXMiLCJzaXplIiwic20iXSxbMSwiY2xyLW51bWJlci1pbnB1dC1zZXBhcmF0b3IiXSxbInNoYXBlIiwicGx1cyIsInNpemUiLCJzbSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xl''@;'; put 'put ''Iiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4''@;'; put 'put ''Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24i''@;'; put 'put ''XV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSh0VmUpLFlyKDApLGd0KDEsclZlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFlyKDUsMSksZGUoNiwiZGl2Iiw0KSg3LCJidXR0b24iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZC5pbnB1dC5zdGVwRG93bigpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCksR3QoOSwiZGl2Iiw3KSxkZSgxMCwiYnV0dG9uIiw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaW5wdXQuc3RlcFVwKCl9KSxHdCgxMSwiY2RzLWljb24iLDgpLGhlKCkoKSgpLGd0KDEy''@;'; put 'put ''LGlWZSwxLDAsImNkcy1pY29uIiw5KSgxMyxhVmUsMSwwLCJjZHMtaWNvbiIsMTApLGhlKCksZ3QoMTQsb1ZlLDEsMCwibmctY29udGVudCIsMCkoMTUsc1ZlLDEsMCwibmctY29udGVudCIsMCkoMTYsbFZlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIs''@;'; put 'put ''IWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLE1lKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSxUcigiY2xyLWZvY3VzIixkLmZvY3VzKSxmZSgzKSxNZSgiZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCksZmUoMyksTWUoImRpc2Fi''@;'; put 'put ''bGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpLGZlKDIpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxm''@;'; put 'put ''ZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxfZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtpZihzdXBlcihkLHlkZSxoLGYsdixNKSx0aGlzLmZv''@;'; put 'put ''Y3VzU2VydmljZT1hLHRoaXMuY29udHJvbD1mLHRoaXMuZWw9TSx0aGlzLmluZGV4PTEsIWEpdGhyb3cgbmV3IEVycm9yKCJjbHJOdW1iZXJJbnB1dCByZXF1aXJlcyBiZWluZyB3cmFwcGVkIGluIDxjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lcj4iKX1nZXQgcmVhZG9ubHkoKXtyZXR1cm4g''@;'; put 'put ''bnVsbCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoInJlYWRvbmx5Iil9dHJpZ2dlckZvY3VzKCl7IXRoaXMucmVhZG9ubHkmJnRoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD0hMCl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLnJlYWRv''@;'; put 'put ''bmx5fHwoc3VwZXIudHJpZ2dlclZhbGlkYXRpb24oKSx0aGlzLmZvY3VzU2VydmljZSYmKHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzZWQ9ITEpKX1zdGVwVXAoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3RlcFVwKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2''@;'; put 'put ''ZW50KCJpbnB1dCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pKSx0aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKCl9c3RlcERvd24oKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3RlcERvd24oKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcg''@;'; put 'put ''RXZlbnQoImlucHV0Iix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSkpLHRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoVXksOCksR2UoRG8pLEdlKERzKSxHZShkMSwxMCks''@;'; put 'put ''R2UoRW8pLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImNsck51bWJlcklucHV0IiwiIl1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGQudHJpZ2dlckZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZUcigiY2xyLWlucHV0IiwhMCkoImNsci1udW1iZXItaW5wdXQiLCEwKX0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLENaZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgsRk9lLEhPZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpO25ldyBT''@;'; put 'put ''dCh2b2lkIDApO2xldCB4WmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKE5PZSxWT2UsdmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtp''@;'; put 'put ''bXBvcnRzOltSYSxSYyxBcyxhdSxhdV19KSxjfSkoKSxsRz0oKCk9PntjbGFzcyBje25nT25Jbml0KCl7dGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5kaXNhYmxlR3JpZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxkcyw3KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmxhYmVsPWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24o''@;'; put 'put ''YSxkKXsyJmEmJlRyKCJjbHItcmFkaW8td3JhcHBlciIsITApfSxmZWF0dXJlczpbZGEoW0NoXSldLG5nQ29udGVudFNlbGVjdG9yczp1VmUsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGNWZSksWXIoMCksWXIoMSwx''@;'; put 'put ''KSxndCgyLGRWZSwxLDAsImxhYmVsIiwwKSksMiZhJiYoZmUoMiksTWUoIm5nSWYiLCFkLmxhYmVsKSl9LGRlcGVuZGVuY2llczpbYmEsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGNHPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBDN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEs''@;'; put 'put ''bEcsZCxoLGYsdil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSYWRpbyIsIiJdXSxmZWF0dXJlczpb''@;'; put 'put ''d2FdfSksY30pKCksRVplPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLmlmQ29udHJvbFN0''@;'; put 'put ''YXRlU2VydmljZT1mLHRoaXMuaW5saW5lPSExLHRoaXMuX2dlbmVyYXRlZElkPU11KCl9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9bmdBZnRlckNvbnRlbnRJ''@;'; put 'put ''bml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKSx0aGlzLnNldEFyaWFMYWJlbGxlZEJ5KCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMucmFkaW9zLmxlbmd0aD8icmFkaW9ncm91cCI6bnVsbH1zZXRBcmlhTGFiZWxsZWRCeSgpe2NvbnN0IGE9dGhpcy5ncm91cExhYmVsPy5uYXRpdmVF''@;'; put 'put ''bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKTthP3RoaXMuYXJpYUxhYmVsbGVkQnk9dGhpcy5yYWRpb3MubGVuZ3RoP2E6bnVsbDoodGhpcy5ncm91cExhYmVsPy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuX2dlbmVyYXRlZElkKSx0aGlzLmFyaWFMYWJlbGxlZEJ5PXRo''@;'; put 'put ''aXMucmFkaW9zLmxlbmd0aD90aGlzLl9nZW5lcmF0ZWRJZDpudWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmFk''@;'; put 'put ''aW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLGRzLDcsSmkpLGFvKGgsY0csNSkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuZ3JvdXBMYWJlbD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5yYWRpb3M9Zil9fSxob3N0VmFyczo4''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xlIixkLnJvbGUpKCJhcmlhLWxhYmVsbGVkYnkiLGQuYXJpYUxhYmVsbGVkQnkpLFRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQu''@;'; put 'put ''Y29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbZGEoW2YxLGtkLERkLHA3XSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpmVmUsZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbNCwibmdJZiJdLFsx''@;'; put 'put ''LCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2xyLXN1YnRleHQtd3JhcHBlciIsNCwibmdJZiJdLFsxLCJjbHItc3VidGV4dC13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJz''@;'; put 'put ''dGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFt''@;'; put 'put ''YXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0''@;'; put 'put ''ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGhWZSksWXIoMCksZ3QoMSxwVmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSxZcigzLDEpLGd0KDQsZ1ZlLDIsMCwiZGl2IiwyKSg1LF9WZSw1LDQsImRpdiIsMiksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsIWQubGFiZWwm''@;'; put 'put ''JmQuYWRkR3JpZCgpKSxmZSgpLFRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxNZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMiksTWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxNZSgibmdJZiIsZC5zaG93VmFsaWR8fGQuc2hvd0ludmFsaWQpKX0sZGVw''@;'; put 'put ''ZW5kZW5jaWVzOlt3dSxiYSxkcyxyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksVFplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7''@;'; put 'put ''dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLGF1LEJ4LEFzLGF1XX0pLGN9KSgpLEFaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxhdSxCeCxBcyxhdV19KSxjfSkoKSwkeT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9s''@;'; put 'put ''Q2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLm11bHRpPSExfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShh''@;'; put 'put ''PT57YSYmKHRoaXMubXVsdGk9YS52YWx1ZUFjY2Vzc29yIGluc3RhbmNlb2YgbXgsdGhpcy5jb250cm9sPWEpfSkpfXdyYXBwZXJDbGFzcygpe3JldHVybiB0aGlzLm11bHRpPyJjbHItbXVsdGlzZWxlY3Qtd3JhcHBlciI6ImNsci1zZWxlY3Qtd3JhcHBlciJ9fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENwLDgpLEdlKERkKSxHZShmMSksR2Uoa2QpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNlbGVjdC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8o''@;'; put 'put ''aCxteCw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLm11bHRpcGxlPWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJv''@;'; put 'put ''bD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W2RhKFtrZCxmMSxDaCxEZF0pLHdhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q1ZlLGRlY2xzOjEwLHZhcnM6OCxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5l''@;'; put 'put ''ciIsMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24i''@;'; put 'put ''LCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJd''@;'; put 'put ''LFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKHdWZSksWXIoMCksZ3QoMSxTVmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2''@;'; put 'put ''IiwxKSgzLCJkaXYiLDIpLFlyKDQsMSksZ3QoNSxNVmUsMSwwLCJjZHMtaWNvbiIsMykoNix4VmUsMSwwLCJjZHMtaWNvbiIsNCksaGUoKSxndCg3LEVWZSwxLDAsIm5nLWNvbnRlbnQiLDApKDgsVFZlLDEsMCwibmctY29udGVudCIsMCkoOSxBVmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgp''@;'; put 'put ''KSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKCksTWUoIm5nQ2xhc3MiLGQud3JhcHBlckNsYXNzKCkpLGZlKDIpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixk''@;'; put 'put ''LnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxFNz0oKCk9PntjbGFz''@;'; put 'put ''cyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLCR5LGQsaCxmLHYpLHRoaXMuaW5kZXg9MX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCksR2UoRW8pLEdlKEppKSl9LGMuXHUw''@;'; put 'put ''Mjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclNlbGVjdCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1zZWxlY3QiLCEwKX0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLGtaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxBcyxhdSxhdV19KSxjfSkoKSx3ZGU9KCgpPT57Y2xhc3MgYyBl''@;'; put 'put ''eHRlbmRzIHc3e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1ZcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRleHRhcmVhLWNvbnRhaW5lciJdXSxob3N0VmFyczo2''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbZGEo''@;'; put 'put ''W2tkLGYxLENoLERkXSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpEVmUsZGVjbHM6MTAsdmFyczo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci10ZXh0YXJlYS13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0''@;'; put 'put ''ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhp''@;'; put 'put ''ZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1o''@;'; put 'put ''aWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGtWZSksWXIoMCksZ3QoMSxJVmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLFlyKDQsMSksZ3QoNSxSVmUsMSwwLCJjZHMtaWNvbiIsMyko''@;'; put 'put ''NixMVmUsMSwwLCJjZHMtaWNvbiIsNCksaGUoKSxndCg3LE9WZSwxLDAsIm5nLWNvbnRlbnQiLDApKDgsUFZlLDEsMCwibmctY29udGVudCIsMCkoOSxGVmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCks''@;'; put 'put ''TWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDMpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxNZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLE1lKCJuZ0lmIixk''@;'; put 'put ''LnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxRTD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLHdkZSxkLGgsZix2KSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh''@;'; put 'put ''LGQpezImYSYmVHIoImNsci10ZXh0YXJlYSIsITApfSxmZWF0dXJlczpbd2FdfSksY30pKCksRFplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1v''@;'; put 'put ''ZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpLENkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1''@;'; put 'put ''aW5qPUFyKHtpbXBvcnRzOltSYSxhdSxMVWUsTlVlLHlaZSx3WmUsdGRlLHhaZSxUWmUsa1plLERaZSxBWmUsVlVlLENaZV19KSxjfSkoKSxTZGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0''@;'; put 'put ''eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCksSVplPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUWXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUpe3N1cGVyKGEsZCxoLGYsdixNLEQsWixyZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShFWSw4KSxHZSh2cyw4KSxHZShXYSksR2UoRG8pLEdlKHhZLDgpLEdlKHBtKSxHZShQTCksR2UoRXMpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxmZWF0dXJlczpbd2FdfSksY30pKCksUlpl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpLExaZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTtjbGFzcyBlT3t9bGV0IEd4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm5iQ2hhbmdlcz0wLHRoaXMuX2NoYW5nZT1uZXcgV259Z2V0''@;'; put 'put ''IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Y2hhbmdlU3RhcnQoKXt0aGlzLm5iQ2hhbmdlcysrfWNoYW5nZURvbmUoKXswPT0tLXRoaXMubmJDaGFuZ2VzJiZ0aGlzLl9jaGFuZ2UubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxNbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXI9YSx0aGlzLmFjdGl2YXRlZD0hMSx0aGlzLl9zaXplPTAsdGhpcy5fY3VycmVu''@;'; put 'put ''dD0xLHRoaXMuX2NoYW5nZT1uZXcgV24sdGhpcy5wcmV2ZW50RW1pdD0hMSx0aGlzLl9zaXplQ2hhbmdlPW5ldyBXbn1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhpcy5fc2l6ZTthIT09ZCYmKHRoaXMucHJldmVudEVtaXR8fHRoaXMuc3RhdGVE''@;'; put 'put ''ZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9zaXplPWEsdGhpcy5fY3VycmVudD0wPT09YT8xOk1hdGguZmxvb3IoZC9hKih0aGlzLl9jdXJyZW50LTEpKSsxLHRoaXMucHJldmVudEVtaXR8fCh0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSx0aGlzLl9zaXplQ2hhbmdlLm5l''@;'; put 'put ''eHQodGhpcy5fc2l6ZSksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCkpKSx0aGlzLnByZXZlbnRFbWl0PSExfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMuX3RvdGFsSXRlbXN8fDB9c2V0IHRvdGFsSXRlbXMoYSl7dGhpcy5fdG90YWxJdGVtcz1hLHRoaXMuY3VycmVudD50''@;'; put 'put ''aGlzLmxhc3QmJih0aGlzLmN1cnJlbnQ9dGhpcy5sYXN0KX1nZXQgbGFzdCgpe3JldHVybiB0aGlzLl9sYXN0P3RoaXMuX2xhc3Q6dGhpcy5zaXplPjAmJnRoaXMudG90YWxJdGVtcz9NYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1zL3RoaXMuc2l6ZSk6MX1zZXQgbGFzdChhKXt0aGlzLl9sYXN0''@;'; put 'put ''PWF9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNpemVDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2l6ZUNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe2EhPT10aGlz''@;'; put 'put ''Ll9jdXJyZW50JiYodGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2N1cnJlbnQ9YSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSl9Z2V0IGZpcnN0SXRlbSgpe3JldHVybiAwPT09dGhpcy5fdG90YWxJdGVtcz8tMTow''@;'; put 'put ''PT09dGhpcy5zaXplPzA6KHRoaXMuY3VycmVudC0xKSp0aGlzLnNpemV9Z2V0IGxhc3RJdGVtKCl7aWYoMD09PXRoaXMuX3RvdGFsSXRlbXMpcmV0dXJuLTE7aWYoMD09PXRoaXMuc2l6ZSlyZXR1cm4gdGhpcy50b3RhbEl0ZW1zLTE7bGV0IGE9dGhpcy5jdXJyZW50KnRoaXMuc2l6ZS0xO3Jl''@;'; put 'put ''dHVybiB0aGlzLnRvdGFsSXRlbXMmJihhPU1hdGgubWluKGEsdGhpcy50b3RhbEl0ZW1zLTEpKSxhfXByZXZpb3VzKCl7dGhpcy5jdXJyZW50PjEmJnRoaXMuY3VycmVudC0tfW5leHQoKXt0aGlzLmN1cnJlbnQ8dGhpcy5sYXN0JiZ0aGlzLmN1cnJlbnQrK31yZXNldFBhZ2VTaXplKGE9ITEp''@;'; put 'put ''e3RoaXMucHJldmVudEVtaXQ9YSx0aGlzLnNpemU9MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoR3gpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx1Zz0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCl7dGhpcy5fcGFnZT1hLHRoaXMuc3RhdGVEZWJvdW5jZXI9ZCx0aGlzLl9jaGFuZ2U9bmV3IFduLHRoaXMuX2FsbD1bXX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1oYXNBY3RpdmVGaWx0ZXJzKCl7Zm9yKGNvbnN0e2ZpbHRlcjph''@;'; put 'put ''fW9mIHRoaXMuX2FsbClpZihhJiZhLmlzQWN0aXZlKCkpcmV0dXJuITA7cmV0dXJuITF9Z2V0QWN0aXZlRmlsdGVycygpe2NvbnN0IGE9W107Zm9yKGNvbnN0e2ZpbHRlcjpkfW9mIHRoaXMuX2FsbClkJiZkLmlzQWN0aXZlKCkmJmEucHVzaChkKTtyZXR1cm4gYX1hZGQoYSl7Y29uc3QgZD1h''@;'; put 'put ''LmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW2FdKSk7bGV0IGg9ITE7Y29uc3QgZj1uZXcgdE8oYSwoKT0+e2lmKGgpcmV0dXJuO2QudW5zdWJzY3JpYmUoKTtjb25zdCB2PXRoaXMuX2FsbC5maW5kSW5kZXgoTT0+TS5maWx0ZXI9PT1h''@;'; put 'put ''KTt2Pj0wJiZ0aGlzLl9hbGwuc3BsaWNlKHYsMSksYS5pc0FjdGl2ZSgpJiZ0aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW10pLGg9ITB9KTtyZXR1cm4gdGhpcy5fYWxsLnB1c2goZiksYS5pc0FjdGl2ZSgpJiZ0aGlzLnJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoW2Fd''@;'; put 'put ''KSxmfWFjY2VwdHMoYSl7Zm9yKGNvbnN0e2ZpbHRlcjpkfW9mIHRoaXMuX2FsbClpZihkJiZkLmlzQWN0aXZlKCkmJiFkLmFjY2VwdHMoYSkpcmV0dXJuITE7cmV0dXJuITB9cmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCks''@;'; put 'put ''dGhpcy5fcGFnZS5jdXJyZW50PTEsdGhpcy5fY2hhbmdlLm5leHQoYSksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKE1tKSx4cihHeCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMs''@;'; put 'put ''ZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIHRPe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5maWx0ZXI9bCx0aGlzLnVucmVnaXN0ZXI9YX19bGV0IG5PPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWx0ZXJzPWF9Z2V0IGZpbHRlcigpe3JldHVybiB0aGlzLnJl''@;'; put 'put ''Z2lzdGVyZWQmJnRoaXMucmVnaXN0ZXJlZC5maWx0ZXJ9bmdPbkRlc3Ryb3koKXt0aGlzLmRlbGV0ZUZpbHRlcigpfXNldEZpbHRlcihhKXt0aGlzLmRlbGV0ZUZpbHRlcigpLGEgaW5zdGFuY2VvZiB0Tz90aGlzLnJlZ2lzdGVyZWQ9YTphJiYodGhpcy5yZWdpc3RlcmVkPXRoaXMuZmlsdGVy''@;'; put 'put ''cy5hZGQoYSkpfWRlbGV0ZUZpbHRlcigpe3RoaXMucmVnaXN0ZXJlZCYmKHRoaXMucmVnaXN0ZXJlZC51bnJlZ2lzdGVyKCksZGVsZXRlIHRoaXMucmVnaXN0ZXJlZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHVnKSl9LGMuXHUwMjc1ZGly''@;'; put 'put ''PUVyKHt0eXBlOmN9KSxjfSkoKTtjbGFzcyBNZGV7Y29uc3RydWN0b3IobCl7dGhpcy51dGlscz1sfWtleVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZigwPT09bC55KXJldHVybiBhO2EueT1sLnktMTtjb25zdCBkPXRoaXMudXRpbHMuaXNBY3Rp''@;'; put 'put ''b25DZWxsKGwpO3JldHVybiB0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSkmJiFkJiZ0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD0wOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihkP2EueT1hLnktMTphLng9YS54LXRoaXMudXRpbHMuYWN0aW9u''@;'; put 'put ''Q2VsbENvdW50KGwueSkpLGF9a2V5RG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7aWYobC55Pj0odGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowKSlyZXR1cm4gYTtjb25zdCBoPXRoaXMudXRpbHMuaXNBY3Rpb25DZWxs''@;'; put 'put ''KGwpO3JldHVybiBhLnk9bC55KzEsIWgmJnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYoYS55PWEueSsxLGEueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/MDphLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlMZWZ0KGwpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gMD09PWwueHx8KGEueD1sLngtMSksYX1rZXlSaWdodChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/Lmxlbmd0aC0xP3RoaXMudXRpbHMu''@;'; put 'put ''Z2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MDtyZXR1cm4gYS54PWwueDxkP2EueCsxOmEueCxhfWtleUVuZChsLGEpe2NvbnN0IGQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxoPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MDtyZXR1cm4g''@;'; put 'put ''ZC54PWg/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowLGEmJihkLnk9aCx0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhkLnkpJiYoZC54PXRoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coZC55KS5sZW5ndGgtMSkpLGR9a2V5SG9tZShsLGEpe2NvbnN0IGQ9dGhpcy51dGls''@;'; put 'put ''cy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gZC54PTAsYSYmKGQueT0wKSxkfWtleVBhZ2VVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueS1kPjA/bC55LWQrMToxLHRo''@;'; put 'put ''aXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNl''@;'; put 'put ''bGxDb3VudChsLnkpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYoYS55PWEueSsxLGEueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/MDphLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlQYWdlRG93bihsKXtjb25zdCBhPXRo''@;'; put 'put ''aXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueStoPj1kP2Q6bC55K2gsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCkmJnRoaXMu''@;'; put 'put ''dXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS55PWEueS0xOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJnRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT9hLng9MDp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD1hLngtdGhpcy51dGlscy5hY3Rpb25D''@;'; put 'put ''ZWxsQ291bnQobC55KTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmKGEueT1hLnkrMSxhLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpPzA6YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGF9fWNsYXNzIHhkZSBleHRlbmRzIE1kZXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsKXtzdXBlcihsKX1rZXlVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7aWYoMD09PWwueSlyZXR1cm4gYTtpZihhLnk9bC55LTEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCkpdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYm''@;'; put 'put ''YS55PjAmJihhLnk9YS55LTEpO2Vsc2Ugc3dpdGNoKHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpJiYoYS55PWEueS0xKSwhMCl7Y2FzZSB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpOmEueD0wO2JyZWFrO2Nhc2UhMT09PXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSk6YS54''@;'; put 'put ''PWwueDticmVhaztkZWZhdWx0OmEueD10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpfXJldHVybiBhfWtleURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowO3Jl''@;'; put 'put ''dHVybiBsLnk+PWR8fChhLnk9bC55KzEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/YS55PWEueTxkP2EueSsxOmEueToodGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJihhLnk9YS55KzEpLGEueD10aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpPzA6dGhpcy51dGlscy5hY3Rp''@;'; put 'put ''b25DZWxsQ291bnQoYS55KSkpLGF9a2V5TGVmdChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7cmV0dXJuIHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSl8fHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpPygwIT09bC54P2EueD1sLngtMTp0aGlz''@;'; put 'put ''LnV0aWxzLmlzQWN0aW9uQ2VsbChsKXx8KGEueT1sLnktMSxhLng9dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KS0xKSxhKTpzdXBlci5rZXlMZWZ0KGwpfWtleVJpZ2h0KGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZighdGhpcy51dGlscy5p''@;'; put 'put ''c0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpKXJldHVybiBzdXBlci5rZXlSaWdodChsKTtjb25zdCBkPXRoaXMudXRpbHMucm93cz8ubGVuZ3RoLTE/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVybiBsLng+PWR8fCh0''@;'; put 'put ''aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKSYmbC54PT09dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC54KS0xJiZ0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSk/KGEueT1sLnkrMSxhLng9MCk6YS54PWwueCsxKSxhfWtleUVu''@;'; put 'put ''ZChsLGEpe2NvbnN0IGQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4hdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpfHxhP3N1cGVyLmtleUVuZChsLGEpOihkLng9dGhpcy51dGlscy5nZXRDZWxsc0Zv''@;'; put 'put ''clJvdyhsLnkpLmxlbmd0aC0xLGQpfWtleUhvbWUobCxhKXtjb25zdCBkPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7cmV0dXJuIHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSl8fHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkpPyhkLng9MCxkLnk9bC55LTEsYSYm''@;'; put 'put ''KGQueT0wKSxkKTpzdXBlci5rZXlIb21lKGwsYSl9a2V5UGFnZVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55LWQ+MD9sLnktZCsxOjEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwo''@;'; put 'put ''bCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnktMSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueT1hLnkrMSxhLng9MCk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KT90aGlzLnV0aWxzLmlz''@;'; put 'put ''RGV0YWlsc1JvdyhsLnkpJiYodGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueD10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpKSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD0wKSxhfWtleVBhZ2VEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVh''@;'; put 'put ''dGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55K2g+PWQ/ZDpsLnkraCx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWls''@;'; put 'put ''c1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT9hLnk8ZCYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55KzEpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2Eu''@;'; put 'put ''eD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PTApLGF9fWNsYXNzIE9aZSBleHRlbmRzIHhkZXtjb25zdHJ1Y3RvcihsKXtzdXBlcihsKX1rZXlVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENl''@;'; put 'put ''bGxDb29yZHMobCk7aWYoMD09PWwueSlyZXR1cm4gYTtpZihhLnk9bC55LTEsdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpKXJldHVybiBzdXBlci5rZXlVcChsKTtjb25zdCBkPXRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpO3JldHVybiBkJiZ0aGlzLnV0aWxzLmlz''@;'; put 'put ''RGV0YWlsc1JvdyhhLnkpP2EueT1hLnktMTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT8oYS55PWEueS0xLHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSl8fChhLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyhs''@;'; put 'put ''LnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSk6IWQmJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLng9bC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGF9a2V5RG93bihsKXtj''@;'; put 'put ''b25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaD1kP3RoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MDtyZXR1cm4gbC55Pj1kP2E6KGEueT1sLnkrMSx0aGlzLnV0''@;'; put 'put ''aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/c3VwZXIua2V5RG93bihsKToodGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCl8fHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpP2EueT1hLnk8ZD9hLnkrMTphLnktMTphLng9dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdyhsLnkp''@;'; put 'put ''Lmxlbmd0aD5oP2wueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpOmwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpLGEpKX1rZXlMZWZ0KGwpe3JldHVybiBzdXBlci5rZXlMZWZ0KGwpfWtleVJpZ2h0KGwpe3JldHVybiBzdXBlci5rZXlSaWdodChsKX1rZXlFbmQo''@;'; put 'put ''bCxhKXtyZXR1cm4gc3VwZXIua2V5RW5kKGwsYSl9a2V5SG9tZShsLGEpe3JldHVybiBzdXBlci5rZXlIb21lKGwsYSl9a2V5UGFnZVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55''@;'; put 'put ''LWQ+MD9sLnktZCsxOjEsdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpP3N1cGVyLmtleVBhZ2VVcChsKToodGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnktMSk6dGhpcy51dGlscy5pc1Jvd1JlcGxh''@;'; put 'put ''Y2VkKGEueSk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8KGEueT1hLnkrMSxhLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD1sLngrdGhpcy51''@;'; put 'put ''dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PWwueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhKX1rZXlQYWdlRG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlz''@;'; put 'put ''LnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueStoPj1kP2Q6bC55K2gsdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpP3N1cGVyLmtleVBhZ2VEb3duKGwpOih0aGlzLnV0aWxz''@;'; put 'put ''LmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS55PGQmJihhLnk9YS55KzEsYS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNl''@;'; put 'put ''bGxDb3VudChhLnkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD1sLngtdGhpcy51dGlscy5h''@;'; put 'put ''Y3Rpb25DZWxsQ291bnQobC55KSksYSl9fWNsYXNzIFBaZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaG9zdD1sLHRoaXMuY29uZmlnPWF9Z2V0IGdyaWQoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLmtleUdyaWQpfWdldCByb3dzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyl9Z2V0IGNlbGxzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpfWdldCBjdXJyZW50Q2VsbENvb3JkaW5hdGVzKCl7Y29uc3QgbD10aGlzLmNl''@;'; put 'put ''bGxzP0FycmF5LmZyb20odGhpcy5jZWxscykuZmluZChoPT4iMCI9PT1oLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6bnVsbCxhPWw/bC5jbG9zZXN0KHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKTpudWxsO3JldHVybnt4OmEmJmw/QXJyYXkuZnJvbShhLnF1ZXJ5U2VsZWN0b3JBbGwodGhp''@;'; put 'put ''cy5jb25maWcua2V5R3JpZENlbGxzKSkuaW5kZXhPZihsKTowLHk6YSYmbCYmdGhpcy5yb3dzP0FycmF5LmZyb20odGhpcy5yb3dzKS5pbmRleE9mKGEpOjB9fWdldCBpdGVtc1BlclBhZ2UoKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZCIp''@;'; put 'put ''LmNsaWVudEhlaWdodC90aGlzLnJvd3NbMF0uY2xpZW50SGVpZ2h0KS0xfHwwfWdldE5leHRJdGVtQ29vcmRpbmF0ZShsKXtjb25zdCBhPXRoaXMuY3VycmVudENlbGxDb29yZGluYXRlcyxkPXRoaXMuZ2V0TmF2U3RyYXRlZ3koYSk7c3dpdGNoKGwua2V5KXtjYXNlIGdhLkFycm93VXA6cmV0''@;'; put 'put ''dXJuIGQua2V5VXAoYSk7Y2FzZSBnYS5BcnJvd0Rvd246cmV0dXJuIGQua2V5RG93bihhKTtjYXNlInJ0bCI9PT10aGlzLmhvc3QuZGlyP2dhLkFycm93UmlnaHQ6Z2EuQXJyb3dMZWZ0OnJldHVybiBkLmtleUxlZnQoYSk7Y2FzZSJydGwiPT09dGhpcy5ob3N0LmRpcj9nYS5BcnJvd0xlZnQ6''@;'; put 'put ''Z2EuQXJyb3dSaWdodDpyZXR1cm4gZC5rZXlSaWdodChhKTtjYXNlIGdhLkhvbWU6cmV0dXJuIGQua2V5SG9tZShhLGwuY3RybEtleSk7Y2FzZSBnYS5FbmQ6cmV0dXJuIGQua2V5RW5kKGEsbC5jdHJsS2V5KTtjYXNlIGdhLlBhZ2VVcDpyZXR1cm4gZC5rZXlQYWdlVXAoYSk7Y2FzZSBnYS5Q''@;'; put 'put ''YWdlRG93bjpyZXR1cm4gZC5rZXlQYWdlRG93bihhKTtkZWZhdWx0OnJldHVybiBhfX1nZXRDZWxsc0ZvclJvdyhsKXtyZXR1cm4gdGhpcy5yb3dzW2xdLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKX1pc0V4cGFuZGVkUm93KGwpe2NvbnN0IGE9dGhpcy5yb3dz''@;'; put 'put ''W2xdLnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1yb3ctZGV0YWlsIik7cmV0dXJuISFhJiYibm9uZSIhPT1hLnN0eWxlLmRpc3BsYXl9aXNEZXRhaWxzUm93KGwpe3JldHVybiB0aGlzLnJvd3NbbF0uY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXRhZ3JpZC1yb3ctZGV0YWlsIil9aXNSb3dSZXBs''@;'; put 'put ''YWNlZChsKXtyZXR1cm4hIXRoaXMucm93c1tsXS5jbG9zZXN0KCJjbHItZGctcm93LmRhdGFncmlkLXJvdy1yZXBsYWNlZCIpfWlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGwpe3JldHVybiAxPT09dGhpcy5yb3dzW2xdPy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxs''@;'; put 'put ''cykubGVuZ3RofWFjdGlvbkNlbGxDb3VudChsKXtyZXR1cm4gdGhpcy5hY3Rpb25DZWxsc0FzQXJyYXkobCkubGVuZ3RofWFjdGlvbkNlbGxzQXNBcnJheShsKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnJvd3NbbF0ucXVlcnlTZWxlY3RvckFsbCgiLmRhdGFncmlkLXJvdy1zdGlja3kgLmRh''@;'; put 'put ''dGFncmlkLWNlbGwsIC5kYXRhZ3JpZC1yb3ctc3RpY2t5IC5kYXRhZ3JpZC1jb2x1bW4iKSl9aXNBY3Rpb25DZWxsKGwpe3JldHVybiEhdGhpcy5hY3Rpb25DZWxsc0FzQXJyYXkobC55KVtsLnhdfWNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpe3JldHVybnt4OmwueCx5OmwueX19Z2V0TmF2U3Ry''@;'; put 'put ''YXRlZ3kobCl7c3dpdGNoKCEwKXtjYXNlIHRoaXMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3cobC55KTpyZXR1cm4gbmV3IHhkZSh0aGlzKTtjYXNlIHRoaXMuaXNEZXRhaWxzUm93KGwueSk6Y2FzZSB0aGlzLmlzRXhwYW5kZWRSb3cobC55KTpyZXR1cm4gbmV3IE9aZSh0aGlzKTtkZWZhdWx0''@;'; put 'put ''OnJldHVybiBuZXcgTWRlKHRoaXMpfX19Y29uc3QgRWRlPVsiYVtocmVmXSIsImFyZWFbaHJlZl0iLCJpbnB1dDpub3QoW2Rpc2FibGVkXSkiLCJidXR0b246bm90KFtkaXNhYmxlZF0pIiwic2VsZWN0Om5vdChbZGlzYWJsZWRdKSIsInRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSIsImlmcmFt''@;'; put 'put ''ZSIsIm9iamVjdCIsImVtYmVkIiwiW2NvbnRlbnRlZGl0YWJsZT10cnVlXSIsIltyb2xlPWJ1dHRvbl06bm90KFtkaXNhYmxlZF0pIl07ZnVuY3Rpb24gSFplKGMpe2NvbnN0IGw9RWRlLmpvaW4oIiwiKTtyZXR1cm4gYy5tYXRjaGVzKGwpfWxldCByTz0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKGEpe3RoaXMuem9uZT1hLHRoaXMuc2tpcEl0ZW1Gb2N1cz0hMSx0aGlzLmxpc3RlbmVyc0FkZGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFduLHRoaXMuX2FjdGl2ZUNlbGw9bnVsbCx0aGlzLmNvbmZpZz17a2V5R3JpZFJvd3M6J1tyb2xlPXJvd106bm90KC5kYXRhZ3JpZC1wbGFjZWhv''@;'; put 'put ''bGRlcik6bm90KFtzdHlsZSo9ImRpc3BsYXk6IG5vbmUiXSknLGtleUdyaWRDZWxsczoiW3JvbGU9Z3JpZGNlbGxdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50KSwgW3JvbGU9Y29sdW1uaGVhZGVyXTpub3QoLmRhdGFncmlk''@;'; put 'put ''LWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLGtleUdyaWQ6Iltyb2xlPWdyaWRdIn19bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9YWRkTGlz''@;'; put 'put ''dGVuZXJzKCl7dGhpcy5saXN0ZW5lcnNBZGRlZHx8KHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3hkKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwibW91c2Vkb3duIikucGlwZShWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGE9PntpZigxPT09YS5idXR0b25zJiYhYS5jdHJs''@;'; put 'put ''S2V5KXtjb25zdCBkPXRoaXMua2V5TmF2VXRpbHMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmtleU5hdlV0aWxzLmNlbGxzKS5maW5kKGg9Pmg9PT1hLnRhcmdldHx8aD09PWEudGFyZ2V0LmNsb3Nlc3QodGhpcy5jb25maWcua2V5R3JpZENlbGxzKSk6bnVsbDtkJiZ0aGlzLnNldEFjdGl2ZUNl''@;'; put 'put ''bGwoZCx7a2VlcEZvY3VzOkhaZShhLnRhcmdldCl9KX19KSx4ZCh0aGlzLmtleU5hdlV0aWxzLmdyaWQsIndoZWVsIikucGlwZShWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5yZW1vdmVBY3RpdmVDZWxsKCl9KSx4ZCh0aGlzLmtleU5hdlV0aWxzLmdyaWQsImZvY3Vz''@;'; put 'put ''b3V0IikucGlwZShmbSgwKSxWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZVdGlscy5ncmlkLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx0aGlzLnJlbW92ZUFjdGl2ZUNlbGwoKX0pLHhkKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwia2V5ZG93''@;'; put 'put ''biIpLnBpcGUoVjAodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoKCFhLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoImRyYWctaGFuZGxlIil8fGEua2V5IT09Z2EuQXJyb3dMZWZ0JiZhLmtleSE9PWdhLkFycm93UmlnaHQpJiYoYS5rZXk9PT1nYS5BcnJvd1VwfHxhLmtleT09''@;'; put 'put ''PWdhLkFycm93RG93bnx8YS5rZXk9PT1nYS5BcnJvd0xlZnR8fGEua2V5PT09Z2EuQXJyb3dSaWdodHx8YS5rZXk9PT1nYS5FbmR8fGEua2V5PT09Z2EuSG9tZXx8YS5rZXk9PT1nYS5QYWdlVXB8fGEua2V5PT09Z2EuUGFnZURvd24pKXtjb25zdCBkPXRoaXMua2V5TmF2VXRpbHMuZ2V0TmV4''@;'; put 'put ''dEl0ZW1Db29yZGluYXRlKGEpLGg9dGhpcy5rZXlOYXZVdGlscy5yb3dzP0FycmF5LmZyb20odGhpcy5rZXlOYXZVdGlscy5nZXRDZWxsc0ZvclJvdyhkLnkpKVtkLnhdOm51bGw7aCYmdGhpcy5zZXRBY3RpdmVDZWxsKGgpLGEucHJldmVudERlZmF1bHQoKX19KX0pLHRoaXMubGlzdGVuZXJz''@;'; put 'put ''QWRkZWQ9ITApfWluaXRpYWxpemVLZXlHcmlkKGEpe3RoaXMua2V5TmF2VXRpbHM9bmV3IFBaZShhLHRoaXMuY29uZmlnKSx0aGlzLmFkZExpc3RlbmVycygpLHRoaXMucmVzZXRLZXlHcmlkKCl9cmVzZXRLZXlHcmlkKCl7dGhpcy5rZXlOYXZVdGlscy5jZWxscz8uZm9yRWFjaChkPT5kLnNl''@;'; put 'put ''dEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpKSwodGhpcy5rZXlOYXZVdGlscy5jZWxscz90aGlzLmtleU5hdlV0aWxzLmNlbGxzWzBdOm51bGwpPy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpfXJlbW92ZUFjdGl2ZUNlbGwoKXt0aGlzLl9hY3RpdmVDZWxsPW51bGx9Z2V0QWN0aXZl''@;'; put 'put ''Q2VsbCgpe3JldHVybiB0aGlzLl9hY3RpdmVDZWxsfXNldEFjdGl2ZUNlbGwoYSx7a2VlcEZvY3VzOmR9PXtrZWVwRm9jdXM6ITF9KXtjb25zdCBoPXRoaXMua2V5TmF2VXRpbHMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmtleU5hdlV0aWxzLmNlbGxzKS5maW5kKGY9PiIwIj09PWYuZ2V0QXR0''@;'; put 'put ''cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsO2lmKGgmJmguc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksYS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHRoaXMuX2FjdGl2ZUNlbGw9YSwhdGhpcy5za2lwSXRlbUZvY3VzJiYhZCl7bGV0IGY7aWYoImNvbHVtbmhlYWRlciI9PT1h''@;'; put 'put ''LmdldEF0dHJpYnV0ZSgicm9sZSIpKWY9YTtlbHNle2NvbnN0IHY9ZnVuY3Rpb24gRlplKGMpe2NvbnN0IGE9Wy4uLkVkZSwnW3RhYmluZGV4PSIwIl06bm90KFtkaXNhYmxlZF0pJ10uam9pbigiLCIpO3JldHVybiBBcnJheS5mcm9tKGMucXVlcnlTZWxlY3RvckFsbChhKSl9KGEpO2Y9di5s''@;'; put 'put ''ZW5ndGg/dlswXTphfWYuZm9jdXMoKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFdhKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksJHg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG5Pe2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcihhKSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZT1oLHRoaXMucGxhdGZvcm1JZD1mLHRoaXMuZWxlbWVudFJlZj12LHRoaXMua2V5TmF2aWdhdGlvbj1NLHRoaXMub3BlbkNoYW5nZT1uZXcgS3IoITEpLHRo''@;'; put 'put ''aXMuYXJpYUV4cGFuZGVkPSExLHRoaXMucG9wb3ZlcklkPU11KCksdGhpcy5zbWFydFBvc2l0aW9uPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQUZURVIsYW5jaG9yOk9zLkVORCxjb250ZW50Ok9zLkVORH0sdGhpcy5fb3Blbj0hMSx0aGlzLnN1YnM9W10sdGhpcy5zdWJzLnB1c2goaC5v''@;'; put 'put ''cGVuQ2hhbmdlLnN1YnNjcmliZShEPT57dGhpcy5vcGVuPUQsdGhpcy5hcmlhRXhwYW5kZWQ9RH0pKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3RoaXMub3BlbiE9PShhPSEhYSkmJih0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuPWEsdGhpcy5vcGVuQ2hh''@;'; put 'put ''bmdlLmVtaXQoYSksIWEmJnRsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuYW5jaG9yLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmtleU5hdmlnYXRpb24mJih0aGlzLmtleU5hdmlnYXRpb24uc2tpcEl0ZW1Gb2N1cz1hKSx0aGlzLl9vcGVuPWEpfXNldCBjdXN0b21GaWx0ZXIoYSl7dGhp''@;'; put 'put ''cy5zZXRGaWx0ZXIoYSl9Z2V0IGFjdGl2ZSgpe3JldHVybiEhdGhpcy5maWx0ZXImJnRoaXMuZmlsdGVyLmlzQWN0aXZlKCl9bmdPbkNoYW5nZXMoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRUb2dnbGVCdXR0b25BcmlhTGFiZWwoKX0pfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ry''@;'; put 'put ''b3koKSx0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldFRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCgpe2NvbnN0IGg9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoImNsci1kZy1jb2x1bW4iKT8ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLWNvbHVt''@;'; put 'put ''bi10aXRsZSIpPy50ZXh0Q29udGVudC50cmltKCkudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLnRvZ2dsZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJBcmlhTGFiZWwse0NPTFVNTjpofHwiIn0p''@;'; put 'put ''fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh1ZyksR2UoaXMpLEdlKHNjKSxHZShpbyksR2UoSmkpLEdlKHJPLDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWZpbHRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXtpZigxJmEmJnFhKEhWZSw1LEppKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmFuY2hvcj1oLmZpcnN0KX19LGlucHV0czp7b3BlbjpbTm4uTm9uZSwiY2xyRGdGaWx0ZXJPcGVuIiwib3BlbiJdLGN1c3RvbUZpbHRlcjpbTm4uTm9uZSwiY2xyRGdGaWx0ZXIiLCJjdXN0b21G''@;'; put 'put ''aWx0ZXIiXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTplTyx1c2VFeGlzdGluZzpjfV0pLHdhLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6NCx2YXJzOjEzLGNvbnN0czpbWyJhbmNob3IiLCIiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQW5jaG9yIiwiIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZSJdLFsic29saWQiLCIiXSxbImNsYXNzIiwiZGF0YWdyaWQtZmlsdGVyIiwiY2RrVHJhcEZvY3VzIiwiIiwicm9sZSIsImRp''@;'; put 'put ''YWxvZyIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsiY2RrVHJhcEZvY3VzIiwiIiwicm9sZSIsImRpYWxvZyIs''@;'; put 'put ''MSwiZGF0YWdyaWQtZmlsdGVyIiwzLCJpZCJdLFsxLCJkYXRhZ3JpZC1maWx0ZXItY2xvc2Utd3JhcHBlciJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsMSwiY2xvc2UiXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MSZhJiYoc2EoKSxkZSgwLCJidXR0b24iLDEsMCksR3QoMiwiY2RzLWljb24iLDIpLGhlKCksZ3QoMyxOVmUsNSwzLCJkaXYiLDMpKSwyJmEmJihUcigiZGF0YWdyaWQtZmlsdGVyLW9wZW4iLGQub3BlbikoImRhdGFncmlkLWZpbHRlcmVkIixkLmFjdGl2ZSksaHIoImFyaWEtbGFiZWwi''@;'; put 'put ''LGQudG9nZ2xlQnV0dG9uQXJpYUxhYmVsKSgiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLnBvcG92ZXJJZCksZmUoMiksaHIoInN0YXR1cyIsZC5hY3RpdmU/ImluZm8iOm51bGwpKCJzaGFwZSIsZC5hY3RpdmU/ImZpbHRlci1ncmlkLWNpcmNsZSI6''@;'; put 'put ''ImZpbHRlci1ncmlkIiksZmUoKSxNZSgiY2xyUG9wb3ZlckNvbnRlbnQiLGQub3BlbikoImNsclBvcG92ZXJDb250ZW50QXQiLGQuc21hcnRQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2Ui''@;'; put 'put ''LCEwKSl9LGRlcGVuZGVuY2llczpbWnkscnMsUHgsTDFlLE54LEh4XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyB1R3tjb25zdHJ1Y3RvcihsKXt0aGlzLnByb3A9bCxsLmluZGV4T2YoIi4iKT49MCYmKHRoaXMuc3BsaXRQcm9wPWwuc3BsaXQoIi4iKSl9Z2V0UHJvcFZhbHVlKGwp''@;'; put 'put ''e2lmKHRoaXMuc3BsaXRQcm9wKXtsZXQgYT1sO2Zvcihjb25zdCBkIG9mIHRoaXMuc3BsaXRQcm9wKXtpZihudWxsPT09YXx8dHlwZW9mIGE+InUifHx0eXBlb2YgYVtkXT4idSIpcmV0dXJuO2E9YVtkXX1yZXR1cm4gYX1yZXR1cm4gbFt0aGlzLnByb3BdfX1jbGFzcyBpT3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGE9ITEpe3RoaXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IHVHKGwpfWFjY2VwdHMobCxhLGQpe2NvbnN0IGg9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKTtyZXR1cm4hKHZvaWQgMD09PWh8fG51bGwhPT1hJiYoIm51bWJlciIhPXR5cGVvZiBo''@;'; put 'put ''fHxoPGEpfHxudWxsIT09ZCYmKCJudW1iZXIiIT10eXBlb2YgaHx8aD5kKSl9fWNsYXNzIFQ3e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBXbix0aGlzLl9sb3c9bnVsbCx0aGlzLl9oaWdoPW51bGx9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''Y2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgdmFsdWUoKXtyZXR1cm5bdGhpcy5fbG93LHRoaXMuX2hpZ2hdfXNldCB2YWx1ZShsKXtjb25zdCBhPWxbMF0sZD1sWzFdOyhhIT09dGhpcy5fbG93fHxkIT09dGhpcy5faGlnaCkmJih0aGlzLl9sb3c9YSx0aGlzLl9oaWdoPWQsdGhpcy5fY2hh''@;'; put 'put ''bmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgbG93KCl7cmV0dXJuIHRoaXMuX2xvd31zZXQgbG93KGwpe2whPT10aGlzLl9sb3cmJih0aGlzLl9sb3c9bCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2hpZ2h9c2V0IGhpZ2gobCl7bCE9PXRoaXMuX2hpZ2gmJih0aGlzLl9oaWdoPWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIGlPP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZu''@;'; put 'put ''LnByb3AsbG93OnRoaXMuX2xvdyxoaWdoOnRoaXMuX2hpZ2h9OnRoaXN9aXNBY3RpdmUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2xvd3x8bnVsbCE9PXRoaXMuaGlnaH1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLl9sb3csdGhpcy5faGlnaCl9ZXF1YWxz''@;'; put 'put ''KGwpe3JldHVybiBsIGluc3RhbmNlb2YgVDcmJihsLmZpbHRlckZuIGluc3RhbmNlb2YgaU8/dGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIGlPJiZsLmZpbHRlckZuLnByb3A9PT10aGlzLmZpbHRlckZuLnByb3AmJmwubG93PT09dGhpcy5fbG93JiZsLmhpZ2g9PT10aGlzLl9oaWdoOmw9PT10''@;'; put 'put ''aGlzKX19bGV0IFRkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbk97Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhKSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlPWYsdGhpcy5uZ1pvbmU9dix0aGlzLmZpbHRlclZh''@;'; put 'put ''bHVlQ2hhbmdlPW5ldyBLcix0aGlzLm9wZW49ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF19c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiZBcnJheS5pc0FycmF5KGEpP2EmJihhWzBdIT09dGhpcy5m''@;'; put 'put ''aWx0ZXIubG93fHxhWzFdIT09dGhpcy5maWx0ZXIuaGlnaCkmJih0aGlzLmZpbHRlci5sb3c9Im51bWJlciI9PXR5cGVvZiBhWzBdP2FbMF06bnVsbCx0aGlzLmZpbHRlci5oaWdoPSJudW1iZXIiPT10eXBlb2YgYVsxXT9hWzFdOm51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEp''@;'; put 'put ''KTp0aGlzLmluaXRGaWx0ZXJWYWx1ZXM9YX1zZXQgY3VzdG9tTnVtZXJpY0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2YgdE8/YTpuZXcgVDcoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlcyYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWVzLGRlbGV0ZSB0aGlz''@;'; put 'put ''LmluaXRGaWx0ZXJWYWx1ZXMpfWdldCBtYXhQbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWF4UGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlfWdldCBtaW5QbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXJ8fHRoaXMu''@;'; put 'put ''Y29tbW9uU3RyaW5ncy5rZXlzLm1pblZhbHVlfWdldCBmcm9tTGFiZWxWYWx1ZSgpe3JldHVybiB0aGlzLmZyb21MYWJlbHx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZnJvbUxhYmVsfWdldCB0b0xhYmVsVmFsdWUoKXtyZXR1cm4gdGhpcy50b0xhYmVsfHx0aGlzLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy50b0xhYmVsfWdldCBsb3coKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmxvdyYmaXNGaW5pdGUodGhpcy5maWx0ZXIubG93KT90aGlzLmZpbHRlci5sb3c6bnVsbH1zZXQgbG93KGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRoaXMuZmlsdGVyLmxvdz8odGhp''@;'; put 'put ''cy5maWx0ZXIubG93PWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5sb3c9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxv''@;'; put 'put ''dyx0aGlzLmZpbHRlci5oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5oaWdoJiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5oaWdoKT90aGlzLmZpbHRlci5oaWdoOm51bGx9c2V0IGhpZ2goYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5m''@;'; put 'put ''aWx0ZXIuaGlnaD8odGhpcy5maWx0ZXIuaGlnaD1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIuaGlnaD1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1p''@;'; put 'put ''dChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lk''@;'; put 'put ''ZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVu''@;'; put 'put ''c3Vic2NyaWJlKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodWcpLEdlKHZtKSxHZShpcyksR2Uoc2MpLEdlKFdhKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSx2aWV3''@;'; put 'put ''UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYShWVmUsNSkscWEoJHgsNSkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOnttaW5QbGFjZWhvbGRlcjpbTm4uTm9uZSwi''@;'; put 'put ''Y2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJtaW5QbGFjZWhvbGRlciJdLG1heFBsYWNlaG9sZGVyOltObi5Ob25lLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsIm1heFBsYWNlaG9sZGVyIl0sZnJvbUxhYmVsOltObi5Ob25lLCJjbHJGaWx0ZXJGcm9tTGFiZWwiLCJmcm9tTGFiZWwiXSx0''@;'; put 'put ''b0xhYmVsOltObi5Ob25lLCJjbHJGaWx0ZXJUb0xhYmVsIiwidG9MYWJlbCJdLHZhbHVlOltObi5Ob25lLCJjbHJGaWx0ZXJWYWx1ZSIsInZhbHVlIl0sY3VzdG9tTnVtZXJpY0ZpbHRlcjpbTm4uTm9uZSwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY3VzdG9tTnVtZXJpY0ZpbHRlciJdfSxvdXRw''@;'; put 'put ''dXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbZGEoW3twcm92aWRlOmVPLHVzZUV4aXN0aW5nOmN9XSksd2FdLGRlY2xzOjEyLHZhcnM6MTAsY29uc3RzOltbImlucHV0X2xvdyIsIiJdLFsiaW5wdXRfaGlnaCIsIiJdLFszLCJjbHJEZ0Zp''@;'; put 'put ''bHRlck9wZW5DaGFuZ2UiLCJjbHJEZ0ZpbHRlciIsImNsckRnRmlsdGVyT3BlbiJdLFsxLCJkYXRhZ3JpZC1udW1lcmljLWZpbHRlci1mb3JtIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWyJjbHJOdW1iZXJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYi''@;'; put 'put ''LCJuYW1lIiwibG93IiwxLCJkYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciJdLFsiY2xyTnVtYmVySW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImhpZ2giLDEs''@;'; put 'put ''ImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPUxuKCk7ZGUoMCwiY2xyLWRnLWZpbHRlciIsMiksZ2koImNsckRnRmlsdGVyT3BlbkNo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLG1pKGQub3Blbix2KXx8KGQub3Blbj12KSxDdCh2KX0pLGRlKDEsImRpdiIsMykoMiwiY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiKSgzLCJsYWJlbCIsNCksTGUoNCksaGUoKSxkZSg1LCJpbnB1dCIsNSwwKSxnaSgibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLG1pKGQubG93LHYpfHwoZC5sb3c9diksQ3Qodil9KSxoZSgpKCksZGUoNywiY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiKSg4LCJsYWJlbCIsNCksTGUoOSksaGUoKSxkZSgxMCwiaW5wdXQiLDYsMSksZ2koIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxtaShkLmhpZ2gsdil8fChkLmhpZ2g9diksQ3Qodil9KSxoZSgpKCkoKSgpfTImYSYmKE1lKCJjbHJEZ0ZpbHRlciIsZC5yZWdpc3RlcmVkKSxwaSgiY2xyRGdGaWx0ZXJPcGVuIixkLm9wZW4pLGZlKDQpLHdyKGQuZnJvbUxhYmVsVmFsdWUpLGZl''@;'; put 'put ''KCkscGkoIm5nTW9kZWwiLGQubG93KSxNZSgicGxhY2Vob2xkZXIiLGQubWluUGxhY2Vob2xkZXJWYWx1ZSksaHIoImFyaWEtbGFiZWwiLGQubWluUGxhY2Vob2xkZXJWYWx1ZSksZmUoNCksd3IoZC50b0xhYmVsVmFsdWUpLGZlKCkscGkoIm5nTW9kZWwiLGQuaGlnaCksTWUoInBsYWNlaG9s''@;'; put 'put ''ZGVyIixkLm1heFBsYWNlaG9sZGVyVmFsdWUpLGhyKCJhcmlhLWxhYmVsIixkLm1heFBsYWNlaG9sZGVyVmFsdWUpKX0sZGVwZW5kZW5jaWVzOltkcyxfZGUseWRlLHFsLHZMLG5sLCRzLCR4XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBhT3tjb25zdHJ1Y3RvcihsLGE9ITEpe3Ro''@;'; put 'put ''aXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IHVHKGwpfWFjY2VwdHMobCxhKXtjb25zdCBkPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh0eXBlb2YgZD4idSIpJiYodGhpcy5leGFjdD8oIiIrZCkudG9Mb3dlckNhc2UoKT09PWE6KCIi''@;'; put 'put ''K2QpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MCl9fWNsYXNzIEE3e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBXbix0aGlzLl9sb3dlckNhc2VWYWx1ZT0iIix0aGlzLl9yYXdWYWx1ZT0iIn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9j''@;'; put 'put ''aGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBsb3dlckNhc2VWYWx1ZSgpe3JldHVybiB0aGlzLl9sb3dlckNhc2VWYWx1ZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIGFPP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZuLnByb3AsdmFsdWU6dGhpcy52YWx1ZX06''@;'; put 'put ''dGhpc31nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fcmF3VmFsdWV9c2V0IHZhbHVlKGwpe2x8fChsPSIiKSxsIT09dGhpcy5fcmF3VmFsdWUmJih0aGlzLl9yYXdWYWx1ZT1sLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPWwudG9Mb3dlckNhc2UoKS50cmltKCksdGhpcy5fY2hhbmdlcy5uZXh0KGwp''@;'; put 'put ''KX1pc0FjdGl2ZSgpe3JldHVybiEhdGhpcy52YWx1ZX1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLmxvd2VyQ2FzZVZhbHVlKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBBNyYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiBhTz90aGlzLmZpbHRl''@;'; put 'put ''ckZuIGluc3RhbmNlb2YgYU8mJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC52YWx1ZT09PXRoaXMudmFsdWU6bD09PXRoaXMpfX1sZXQgZEc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG5Pe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3N1cGVyKGEpLHRoaXMuZG9t''@;'; put 'put ''QWRhcHRlcj1kLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlPWYsdGhpcy5lbGVtZW50UmVmPXYsdGhpcy5jZHI9TSx0aGlzLm5nWm9uZT1ELHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMub3Blbj0hMSx0aGlzLmxhYmVsVmFsdWU9IiIsdGhp''@;'; put 'put ''cy5zdWJzPVtdfXNldCBjdXN0b21TdHJpbmdGaWx0ZXIoYSl7dGhpcy5zZXRGaWx0ZXIoYSBpbnN0YW5jZW9mIHRPP2E6bmV3IEE3KGEpKSx0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX1n''@;'; put 'put ''ZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIudmFsdWV9c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiYic3RyaW5nIj09dHlwZW9mIGE/KGF8fChhPSIiKSxhIT09dGhpcy5maWx0ZXIudmFsdWUmJih0aGlzLmZpbHRlci52YWx1ZT1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChh''@;'; put 'put ''KSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9Z2V0IHBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZmlsdGVySXRlbXN9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzLnB1c2godGhpcy5zbWFydFRvZ2dsZVNlcnZp''@;'; put 'put ''Y2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMub3Blbj1hLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kb21BZGFwdGVyLmZvY3VzKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCl9KX0pfSkpfW5nT25DaGFu''@;'; put 'put ''Z2VzKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2V0RmlsdGVyTGFiZWwoKSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX0pfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEZpbHRlckxhYmVsKCl7aWYodGhp''@;'; put 'put ''cy5sYWJlbClyZXR1cm4gdm9pZCh0aGlzLmxhYmVsVmFsdWU9dGhpcy5sYWJlbCk7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik7dGhpcy5sYWJlbFZh''@;'; put 'put ''bHVlPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckxhYmVsLHtDT0xVTU46ZD8udGV4dENvbnRlbnQudHJpbSgpfHwiIn0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh1Zyks''@;'; put 'put ''R2Uodm0pLEdlKGlzKSxHZShzYyksR2UoSmkpLEdlKEVzKSxHZShXYSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctc3RyaW5nLWZpbHRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYShCVmUsNSkscWEoJHgsNSkpLDImYSl7bGV0''@;'; put 'put ''IGg7Q2koaD1TaSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntwbGFjZWhvbGRlcjpbTm4uTm9uZSwiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciJdLGxhYmVsOltObi5Ob25lLCJjbHJGaWx0''@;'; put 'put ''ZXJMYWJlbCIsImxhYmVsIl0sY3VzdG9tU3RyaW5nRmlsdGVyOltObi5Ob25lLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImN1c3RvbVN0cmluZ0ZpbHRlciJdLHZhbHVlOltObi5Ob25lLCJjbHJGaWx0ZXJWYWx1ZSIsInZhbHVlIl19LG91dHB1dHM6e2ZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0''@;'; put 'put ''ZXJWYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6ZU8sdXNlRXhpc3Rpbmc6Y31dKSx3YSx3bF0sZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbImlucHV0IiwiIl0sWzMsImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIl0sWyJ0''@;'; put 'put ''eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJzZWFyY2giLCJjbHJJbnB1dCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1MbigpO2RlKDAsImNsci1kZy1m''@;'; put 'put ''aWx0ZXIiLDEpLGdpKCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxtaShkLm9wZW4sdil8fChkLm9wZW49diksQ3Qodil9KSxkZSgxLCJjbHItaW5wdXQtY29udGFpbmVyIikoMiwibGFiZWwiKSxMZSgzKSxoZSgpLGRlKDQsImlucHV0IiwyLDApLGdp''@;'; put 'put ''KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksbWkoZC52YWx1ZSx2KXx8KGQudmFsdWU9diksQ3Qodil9KSxoZSgpKCkoKX0yJmEmJihNZSgiY2xyRGdGaWx0ZXIiLGQucmVnaXN0ZXJlZCkscGkoImNsckRnRmlsdGVyT3BlbiIsZC5vcGVuKSxmZSgzKSx3cihkLmxh''@;'; put 'put ''YmVsVmFsdWUpLGZlKCkscGkoIm5nTW9kZWwiLGQudmFsdWUpLE1lKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclZhbHVlKSxocigiYXJpYS1sYWJlbCIsZC5wbGFjZWhvbGRlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbZHMsWjEsR0wscWwsbmwsJHMsJHhdLGVuY2Fwc3VsYXRpb246Mn0p''@;'; put 'put ''LGN9KSgpLHhtPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSeXt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3Jp''@;'; put 'put ''ZCJdXSxmZWF0dXJlczpbd2FdfSksY30pKCksS3k9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50PTB9Z2V0IGhhc0FjdGlvbmFibGVSb3coKXtyZXR1cm4gdGhpcy5hY3Rpb25hYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50''@;'; put 'put ''Kyt9dW5yZWdpc3Rlcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50LS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGs3PSgoKT0+e2NsYXNzIGMgZXh0ZW5k''@;'; put 'put ''cyBMeXtjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGctcm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLnJvd0FjdGlvbnM9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMucm93QWN0''@;'; put 'put ''aW9ucy5oYXNBY3Rpb25hYmxlUm93fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFcyksR2UoeG0sOCksR2UoS3kpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLGZl''@;'; put 'put ''YXR1cmVzOlt3YV19KSxjfSkoKSxBZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLm1vZGFsU3RhY2s9W10sdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXI9dGhpcy5vbktleVVwLmJpbmQodGhpcyl9dHJhY2tNb2RhbE9wZW4oYSl7ITE9PT10aGlz''@;'; put 'put ''Lm1vZGFsU3RhY2suaW5jbHVkZXMoYSkmJnRoaXMubW9kYWxTdGFjay51bnNoaWZ0KGEpLHRsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMua2V5VXBFdmVudExpc3RlbmVyKX10cmFja01vZGFsQ2xvc2UoYSl7Y29uc3QgZD10''@;'; put 'put ''aGlzLm1vZGFsU3RhY2suaW5kZXhPZihhKTtkPi0xJiZ0aGlzLm1vZGFsU3RhY2suc3BsaWNlKGQsMSksMD09PXRoaXMubW9kYWxTdGFjay5sZW5ndGgmJnRsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMua2V5VXBFdmVu''@;'; put 'put ''dExpc3RlbmVyKX1vbktleVVwKGEpe3RoaXMubW9kYWxTdGFjay5sZW5ndGgmJkkyKGEua2V5KT09PWdhLkVzY2FwZSYmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpLHRoaXMubW9kYWxTdGFja1swXS5jbG9zZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoeHIoaW8pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxYZj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubW9kYWxTdGFja1NlcnZpY2U9YSx0aGlzLnByZXZlbnRTY3Jv''@;'; put 'put ''bGw9ITEsdGhpcy50b2dnbGVTdGF0ZT0hMSx0aGlzLl9lbmFibGVkPSExLHRoaXMuX3N0YXRlPW5ldyBlaSh0aGlzLnRvZ2dsZVN0YXRlKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKGEpe3RoaXMuX2VuYWJsZWQ9YX1nZXQgcHJldmVudEZvY3VzU2Ny''@;'; put 'put ''b2xsKCl7cmV0dXJuIHRoaXMucHJldmVudFNjcm9sbH1zZXQgcHJldmVudEZvY3VzU2Nyb2xsKGEpe3RoaXMucHJldmVudFNjcm9sbD1hfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmNhY2hlfWdldCBzdGF0ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zdGF0ZS5hc09ic2VydmFibGUoKX1nZXQg''@;'; put 'put ''aXNPcGVuKCl7cmV0dXJuITA9PT10aGlzLnRvZ2dsZVN0YXRlfW9wZW4oYSxkKXt0aGlzLmNhY2hlPWEsdGhpcy5idXR0b249ZCx0aGlzLnRvZ2dsZVN0YXRlPSEwLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsT3Bl''@;'; put 'put ''bih0aGlzKX1jbG9zZSgpe3RoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5yZXR1cm5Gb2N1cygpLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsQ2xvc2UodGhpcyl9cmV0dXJuRm9jdXMoKXt0aGlzLmJ1dHRvbiYmKHRo''@;'; put 'put ''aXMuYnV0dG9uLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOnRoaXMucHJldmVudEZvY3VzU2Nyb2xsfSksdGhpcy5idXR0b249bnVsbCl9dG9nZ2xlKGEsZCl7dGhpcy5pc1Jvd09wZW4oYSl8fCFhP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oYSxkKX1pc1Jvd09wZW4oYSl7cmV0dXJuISghdGhpcy50''@;'; put 'put ''b2dnbGVTdGF0ZXx8dGhpcy5jYWNoZSE9PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihBZGUpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxxeT0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKGEpe3RoaXMuZGV0YWlsU2VydmljZT1hLHRoaXMuZXhwYW5kYWJsZUNvdW50PTB9Z2V0IGhhc0V4cGFuZGFibGVSb3coKXtyZXR1cm4hdGhpcy5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQmJnRoaXMuZXhwYW5kYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudCsr''@;'; put 'put ''fXVucmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihYZikpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEQ3PSgoKT0+e2NsYXNzIGMg''@;'; put 'put ''ZXh0ZW5kcyBMeXtjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGctcm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZGFibGVDb3VudD1ofWdldCBmbGF2b3IoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5leHBhbmRhYmxlQ291bnQuaGFzRXhwYW5kYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKHhtLDgpLEdlKHF5KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsi''@;'; put 'put ''Y2xyLWRnLXJvdyJdXSxmZWF0dXJlczpbd2FdfSksY30pKCk7Y2xhc3Mgb097Y29uc3RydWN0b3IobCl7dGhpcy5wcm9wPWwsdGhpcy5uZXN0ZWRQcm9wPW5ldyB1RyhsKX1jb21wYXJlKGwsYSl7bGV0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKSxoPXRoaXMubmVzdGVkUHJv''@;'; put 'put ''cC5nZXRQcm9wVmFsdWUoYSk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkJiYoZD1kLnRvTG93ZXJDYXNlKCkpLCJzdHJpbmciPT10eXBlb2YgaCYmKGg9aC50b0xvd2VyQ2FzZSgpKSx0eXBlb2YgZD4idSJ8fG51bGw9PT1kP3R5cGVvZiBoPiJ1Inx8bnVsbD09PWg/MDoxOnR5cGVvZiBoPiJ1''@;'; put 'put ''Inx8bnVsbD09PWh8fGQ8aD8tMTpkPmg/MTowfX12YXIgeGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNPUlRFRD0wXT0iVU5TT1JURUQiLGNbYy5BU0M9MV09IkFTQyIsY1tjLkRFU0M9LTFdPSJERVNDIixjfSh4aHx8e30pO2NvbnN0IFh5PSJkYXRhZ3JpZC1maXhlZC13aWR0aCIsS3g9''@;'; put 'put ''ImRhdGFncmlkLWhpZGRlbi1jb2x1bW4iO2xldCBoRz0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuY29sdW1uVmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMuY29sdW1uVmlldy5kZXN0cm95KCl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNvbHVtbiJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKGpWZSw1KSwyJmEpe2xldCBoO0NpKGg9U2ko''@;'; put 'put ''KSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJjb2x1bW5Qb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAselZlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxJ''@;'; put 'put ''YykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxzTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXI9YSx0aGlzLl9yZXZlcnNlPSExLHRoaXMuX2NoYW5nZT1uZXcgV259Z2V0IGNvbXBhcmF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcGFyYXRvcn1zZXQg''@;'; put 'put ''Y29tcGFyYXRvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY29tcGFyYXRvcj1hLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWdldCByZXZlcnNlKCl7cmV0dXJuIHRoaXMuX3JldmVyc2V9c2V0IHJldmVyc2Uo''@;'; put 'put ''YSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3JldmVyc2U9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoYSxkKXt0''@;'; put 'put ''aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5jb21wYXJhdG9yPT09YT90aGlzLl9yZXZlcnNlPXR5cGVvZiBkPCJ1IiYmZHx8IXRoaXMuX3JldmVyc2U6KHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLl9yZXZlcnNlPXR5cGVvZiBkPCJ1IiYmZCksdGhpcy5lbWl0Q2hhbmdl''@;'; put 'put ''KCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Y2xlYXIoKXt0aGlzLmNvbXBhcmF0b3I9bnVsbH1jb21wYXJlKGEsZCl7cmV0dXJuKHRoaXMucmV2ZXJzZT8tMToxKSp0aGlzLmNvbXBhcmF0b3IuY29tcGFyZShhLGQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0''@;'; put 'put ''aGlzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoR3gpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgSmY9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5BTElHTl9DT0xVTU5TPTBdPSJB''@;'; put 'put ''TElHTl9DT0xVTU5TIixjW2MuQ0FMQ1VMQVRFX01PREVfT049MV09IkNBTENVTEFURV9NT0RFX09OIixjW2MuQ0FMQ1VMQVRFX01PREVfT0ZGPTJdPSJDQUxDVUxBVEVfTU9ERV9PRkYiLGNbYy5DTEVBUl9XSURUSFM9M109IkNMRUFSX1dJRFRIUyIsY1tjLkNPTVBVVEVfQ09MVU1OX1dJRFRI''@;'; put 'put ''Uz00XT0iQ09NUFVURV9DT0xVTU5fV0lEVEhTIixjfShKZnx8e30pO2xldCBJNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVuZGVyU3RlcD1uZXcgV24sdGhpcy5hbHJlYWR5U2l6ZWQ9ITF9Z2V0IHJlbmRlclN0ZXAoKXtyZXR1cm4gdGhpcy5fcmVuZGVyU3RlcC5hc09i''@;'; put 'put ''c2VydmFibGUoKX1maWx0ZXJSZW5kZXJTdGVwcyhhKXtyZXR1cm4gdGhpcy5yZW5kZXJTdGVwLnBpcGUoJGwoZD0+YT09PWQpKX1yZXNpemUoKXt0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQ0FMQ1VMQVRFX01PREVfT04pLHRoaXMuYWxyZWFkeVNpemVkJiZ0aGlzLl9yZW5kZXJTdGVwLm5l''@;'; put 'put ''eHQoSmYuQ0xFQVJfV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQ09NUFVURV9DT0xVTU5fV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQUxJR05fQ09MVU1OUyksdGhpcy5hbHJlYWR5U2l6ZWQ9ITAsdGhpcy5fcmVuZGVyU3RlcC5uZXh0KEpmLkNBTENVTEFURV9N''@;'; put 'put ''T0RFX09GRil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGZHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLmRv''@;'; put 'put ''bUFkYXB0ZXI9ZCx0aGlzLm9yZ2FuaXplcj1oLHRoaXMuX3Jlc2l6ZWRCeT0wfWdldCByZXNpemVkQnkoKXtyZXR1cm4gdGhpcy5fcmVzaXplZEJ5fWdldCBtaW5Db2x1bW5XaWR0aCgpe3JldHVybiB0aGlzLmRvbUFkYXB0ZXIubWluV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KXx8OTZ9''@;'; put 'put ''Z2V0IG1heFJlc2l6ZVJhbmdlKCl7cmV0dXJuIHRoaXMud2lkdGhCZWZvcmVSZXNpemUtdGhpcy5taW5Db2x1bW5XaWR0aH1nZXQgd2lkdGhBZnRlclJlc2l6ZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplK3RoaXMuX3Jlc2l6ZWRCeX1zdGFydFJlc2l6ZSgpe3RoaXMuX3Jlc2l6''@;'; put 'put ''ZWRCeT0wLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMCx0aGlzLndpZHRoQmVmb3JlUmVzaXplPXRoaXMuZG9tQWRhcHRlci5jbGllbnRSZWN0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkud2lkdGh9ZW5kUmVzaXplKCl7dGhpcy5vcmdhbml6ZXIucmVzaXplKCl9Y2FsY3VsYXRlUmVz''@;'; put 'put ''aXplKGEpe2E8LXRoaXMubWF4UmVzaXplUmFuZ2U/KHRoaXMuX3Jlc2l6ZWRCeT0tdGhpcy5tYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITEpOih0aGlzLl9yZXNpemVkQnk9YSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITApfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihKaSkseHIodm0pLHhyKEk3KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkscEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnBsYXRmb3JtSWQ9YX1nZXQg''@;'; put 'put ''dGFibGVSZWYoKXtyZXR1cm4gdGhpcy5fdGFibGVSZWZ9c2V0IHRhYmxlUmVmKGEpe3RoaXMuX3RhYmxlUmVmPWF9c2V0IHRhYmxlKGEpe3RsKHRoaXMucGxhdGZvcm1JZCkmJmEubmF0aXZlRWxlbWVudCYmKHRoaXMudGFibGVSZWY9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSIpKX1nZXRDb2x1bW5EcmFnSGVpZ2h0KCl7cmV0dXJuIHRoaXMudGFibGVSZWY/YCR7dGhpcy50YWJsZVJlZi5jbGllbnRIZWlnaHR9cHhgOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKGlvKSl9LGMuXHUwMjc1''@;'; put 'put ''cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2U9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLnRhYmxlU2l6ZVNlcnZp''@;'; put 'put ''Y2U9Zix0aGlzLmNvbW1vblN0cmluZz12LHRoaXMuZG9jdW1lbnQ9TSx0aGlzLmNvbHVtblNlcGFyYXRvcklkPU11KCksdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0IGRlc2NyaXB0aW9uSWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFy''@;'; put 'put ''YXRvcklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlzLmNvbHVtbkhhbmRsZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3''@;'; put 'put ''SW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuY29sdW1uSGFuZGxlRWwsImtleWRvd24iLGE9Pnt0aGlzLnNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSksdGhpcy5tb3ZlVHJh''@;'; put 'put ''Y2tlck9uS2V5RG93bihhKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAiLGE9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChhKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNo''@;'; put 'put ''KGE9PmEoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgYT10aGlzLnRhYmxlU2l6ZVNlcnZpY2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdo''@;'; put 'put ''dCIsYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoYSl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNpemUoYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRy''@;'; put 'put ''YWNrZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJjb2wtcmVzaXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhp''@;'; put 'put ''ZGVUcmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9y''@;'; put 'put ''bSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb2x1bW5IYW5kbGVFbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgwcHgpIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksImN1cnNvciIsImF1dG8iKX1zaG93VHJhY2tl''@;'; put 'put ''ck9uRmlyc3RLZXlEb3duKGEpeyF0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSEwLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mo''@;'; put 'put ''dGhpcy5yZXNpemVUcmFja2VyRWwsIm9uLWFycm93LWtleS1yZXNpemUiKSx0aGlzLnNob3dUcmFja2VyKCkpfW1vdmVUcmFja2VyT25LZXlEb3duKGEpe3RoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKT8oYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm1vdmVUcmFja2VyKHRoaXMuY29sdW1u''@;'; put 'put ''UmVzaXplclNlcnZpY2UucmVzaXplZEJ5LTEyKSk6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSYmKGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsxMikpfWhpZGVUcmFja2VyT25LZXlVcChhKXt0aGlz''@;'; put 'put ''LnJlc2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWws''@;'; put 'put ''Im9uLWFycm93LWtleS1yZXNpemUiKSx0aGlzLmhpZGVUcmFja2VyKCksdGhpcy5jb2x1bW5IYW5kbGVFbC5mb2N1cygpKX1yZWRGbGFnVHJhY2tlcigpe3RoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSE9PXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5n''@;'; put 'put ''ZSYmKHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT10aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmlzV2l0aGluTWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlP3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVk''@;'; put 'put ''LW1heCIpOnRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVkLW1heCIpKX1pc0Fycm93TGVmdEtleUV2ZW50KGEpe3JldHVybiBJMihhLmtleSk9PT1nYS5BcnJvd0xlZnR9aXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSl7cmV0dXJuIEkyKGEua2V5KT09''@;'; put 'put ''PWdhLkFycm93UmlnaHR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGZHKSxHZShFbyksR2UoV2EpLEdlKHBHKSxHZShpcyksR2UodnMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi1zZXBhcmF0''@;'; put 'put ''b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoVVZlLDUpLHFhKFpWZSw1KSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5yZXNpemVUcmFja2VyUmVmPWguZmlyc3QpLENpKGg9U2koKSkmJihkLmNvbHVtbkhhbmRsZVJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIs''@;'; put 'put ''aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciIsITApfSxkZWNsczo2LHZhcnM6NCxjb25zdHM6W1siY29sdW1uSGFuZGxlIiwiIl0sWyJyZXNpemVUcmFja2VyIiwiIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2RrRHJhZyIsIiIsImNk''@;'; put 'put ''a0RyYWdMb2NrQXhpcyIsIngiLDEsImRhdGFncmlkLWNvbHVtbi1oYW5kbGUiLDMsImNka0RyYWdTdGFydGVkIiwiY2RrRHJhZ01vdmVkIiwiY2RrRHJhZ0VuZGVkIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdXSx0ZW1wbGF0ZTpmdW5j''@;'; put 'put ''dGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1MbigpO2RlKDAsImJ1dHRvbiIsMiwwKSxGdCgiY2RrRHJhZ1N0YXJ0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGgpLEN0KGQuc2hvd1RyYWNrZXIoKSl9KSgiY2RrRHJhZ01vdmVkIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC5tb3Zl''@;'; put 'put ''VHJhY2tlcih2LmRpc3RhbmNlLngpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxkLmhpZGVUcmFja2VyKCksQ3Qodi5zb3VyY2UuX2RyYWdSZWYucmVzZXQoKSl9KSxoZSgpLGRlKDIsInNwYW4iLDMpLExlKDMpLGhlKCksR3QoNCwiZGl2Iiw0LDEpfTImYSYm''@;'; put 'put ''KGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGQuZGVzY3JpcHRpb25JZCksZmUoMiksaHIoImlkIixkLmRlc2NyaXB0aW9uSWQpLGZlKCksRHIoIiAiLGQuY29tbW9uU3RyaW5nLmtleXMuY29s''@;'; put 'put ''dW1uU2VwYXJhdG9yRGVzY3JpcHRpb24sIiAiKSl9LGRlcGVuZGVuY2llczpbSVplXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxSNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbk97Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGgpLHRoaXMuZWw9YSx0aGlzLl9zb3J0PWQsdGhpcy52''@;'; put 'put ''Y3I9Zix0aGlzLmRldGFpbFNlcnZpY2U9dix0aGlzLmNoYW5nZURldGVjdG9yUmVmPU0sdGhpcy5zb3J0T3JkZXJDaGFuZ2U9bmV3IEtyLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMuY3VzdG9tRmlsdGVyPSExLHRoaXMuX2NvbFR5cGU9InN0cmluZyIsdGhpcy5fc29ydE9y''@;'; put 'put ''ZGVyPXhoLlVOU09SVEVELHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zaG93U2VwYXJhdG9yPSEwLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JEZXRhaWxQYW5l''@;'; put 'put ''Q2hhbmdlcygpKX1nZXQgaXNIaWRkZW4oKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhLeCl9Z2V0IHNob3dTZXBhcmF0b3IoKXtyZXR1cm4gdGhpcy5fc2hvd1NlcGFyYXRvcn1zZXQgc2hvd1NlcGFyYXRvcihhKXt0aGlzLl9zaG93U2VwYXJhdG9y''@;'; put 'put ''PWEsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgY29sVHlwZSgpe3JldHVybiB0aGlzLl9jb2xUeXBlfXNldCBjb2xUeXBlKGEpe3RoaXMuX2NvbFR5cGU9YX1nZXQgZmllbGQoKXtyZXR1cm4gdGhpcy5fZmllbGR9c2V0IGZpZWxkKGEpeyJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgYSYmKHRoaXMuX2ZpZWxkPWEsdGhpcy5fc29ydEJ5fHwodGhpcy5fc29ydEJ5PW5ldyBvTyhhKSkpfWdldCBzb3J0QnkoKXtyZXR1cm4gdGhpcy5fc29ydEJ5fXNldCBzb3J0QnkoYSl7InN0cmluZyI9PXR5cGVvZiBhP3RoaXMuX3NvcnRCeT1uZXcgb08oYSk6YT90aGlzLl9zb3J0Qnk9''@;'; put 'put ''YTp0aGlzLmZpZWxkP3RoaXMuX3NvcnRCeT1uZXcgb08odGhpcy5maWVsZCk6ZGVsZXRlIHRoaXMuX3NvcnRCeX1nZXQgc29ydE9yZGVyKCl7cmV0dXJuIHRoaXMuX3NvcnRPcmRlcn1zZXQgc29ydE9yZGVyKGEpe2lmKCEodHlwZW9mIGE+InUiKSYmdGhpcy5fc29ydE9yZGVyIT09YSlzd2l0''@;'; put 'put ''Y2goYSl7Y2FzZSB4aC5BU0M6dGhpcy5zb3J0KCExKTticmVhaztjYXNlIHhoLkRFU0M6dGhpcy5zb3J0KCEwKTticmVhaztkZWZhdWx0OnRoaXMuX3NvcnQuY2xlYXIoKX19c2V0IHVwZGF0ZUZpbHRlclZhbHVlKGEpe3RoaXMuZmlsdGVyP3RoaXMuZmlsdGVyIGluc3RhbmNlb2YgQTc/KCgh''@;'; put 'put ''YXx8InN0cmluZyIhPXR5cGVvZiBhKSYmKGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFQ3JiYoKCFhfHwhKGEgaW5zdGFuY2VvZiBBcnJheSkpJiYoYT1bbnVsbCxudWxsXSksMj09PWEubGVuZ3RoJiYo''@;'; put 'put ''YVswXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzBdfHxhWzFdIT09dGhpcy5maWx0ZXIudmFsdWVbMV0pJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9c2V0IHByb2plY3RlZEZpbHRlcihhKXthJiYodGhpcy5kZWxldGVGaWx0ZXIoKSx0aGlzLmN1c3RvbUZp''@;'; put 'put ''bHRlcj0hMCl9Z2V0IHNvcnRhYmxlKCl7cmV0dXJuISF0aGlzLl9zb3J0Qnl9Z2V0IGFyaWFTb3J0KCl7c3dpdGNoKHRoaXMuX3NvcnRPcmRlcil7Y2FzZSB4aC5BU0M6cmV0dXJuImFzY2VuZGluZyI7Y2FzZSB4aC5ERVNDOnJldHVybiJkZXNjZW5kaW5nIjtkZWZhdWx0OnJldHVybiJub25l''@;'; put 'put ''In19Z2V0IHNvcnREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc29ydERpcmVjdGlvbn1nZXQgZmlsdGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBBN3x8dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBUNz90aGlzLmZpbHRlci52YWx1ZTpudWxsfXNldCBmaWx0ZXJWYWx1''@;'; put 'put ''ZShhKXsodGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBBN3x8dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBUNykmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyLnZhbHVlKSl9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBl''@;'; put 'put ''ZEluamVjdG9yLmdldChoRyx0aGlzLnZjcikuY29sdW1uVmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBZTChoRyx0aGlzLnZjcil9bmdPbkNoYW5nZXMoYSl7YS5jb2xUeXBlJiZhLmNvbFR5cGUuY3VycmVudFZhbHVlJiZhLmNvbFR5cGUuY3VycmVudFZhbHVlIT09''@;'; put 'put ''YS5jb2xUeXBlLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmIXRoaXMuZmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuZmllbGQmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKSxhLmZpZWxkJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSYm''@;'; put 'put ''YS5maWVsZC5jdXJyZW50VmFsdWUhPT1hLmZpZWxkLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmdGhpcy5jb2xUeXBlJiZ0aGlzLnNldHVwRGVmYXVsdEZpbHRlcih0aGlzLmZpZWxkLHRoaXMuY29sVHlwZSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRo''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c29ydChhKXt0aGlzLnNvcnRhYmxlJiYodGhpcy5fc29ydC50b2dnbGUodGhpcy5fc29ydEJ5LGEpLHRoaXMuX3NvcnRPcmRlcj10aGlzLl9zb3J0LnJldmVyc2U/eGguREVTQzp4aC5BU0MsdGhpcy5fc29ydERp''@;'; put 'put ''cmVjdGlvbj10aGlzLl9zb3J0T3JkZXI9PT14aC5ERVNDPyJkb3duIjoidXAiLHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSl9bGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmli''@;'; put 'put ''ZShhPT57dGhpcy5zaG93U2VwYXJhdG9yIT09IWEmJih0aGlzLnNob3dTZXBhcmF0b3I9IWEpfSl9bGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMu''@;'; put 'put ''c29ydE9yZGVyIT09eGguVU5TT1JURUQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRPcmRlcj14aC5VTlNPUlRFRCx0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMuX3NvcnRPcmRlciksdGhpcy5fc29ydERpcmVjdGlvbj1udWxsKX0pfXNldHVwRGVmYXVs''@;'; put 'put ''dEZpbHRlcihhLGQpeyJudW1iZXIiPT09ZD90aGlzLnNldEZpbHRlcihuZXcgVDcobmV3IGlPKGEpKSk6InN0cmluZyI9PT1kJiZ0aGlzLnNldEZpbHRlcihuZXcgQTcobmV3IGFPKGEpKSksdGhpcy5maWx0ZXImJnRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy51cGRhdGVGaWx0ZXJWYWx1''@;'; put 'put ''ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2Uoc08pLEdlKHVnKSxHZShEbyksR2UoWGYpLEdlKEVzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxlTyw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnByb2plY3RlZEZpbHRlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFk''@;'; put 'put ''ZXIiXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJhcmlhLXNvcnQiLGQuYXJpYVNvcnQpLFRyKCJkYXRhZ3JpZC1jb2x1bW4iLCEwKSl9LGlucHV0czp7ZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6W05uLk5vbmUsImNsckZpbHRlclN0cmluZ1BsYWNl''@;'; put 'put ''aG9sZGVyIiwiZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIiXSxmaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcjpbTm4uTm9uZSwiY2xyRmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXIiLCJmaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyOltObi5O''@;'; put 'put ''b25lLCJjbHJGaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyIl0sY29sVHlwZTpbTm4uTm9uZSwiY2xyRGdDb2xUeXBlIiwiY29sVHlwZSJdLGZpZWxkOltObi5Ob25lLCJjbHJEZ0ZpZWxkIiwiZmllbGQiXSxzb3J0Qnk6W05uLk5vbmUsImNs''@;'; put 'put ''ckRnU29ydEJ5Iiwic29ydEJ5Il0sc29ydE9yZGVyOltObi5Ob25lLCJjbHJEZ1NvcnRPcmRlciIsInNvcnRPcmRlciJdLHVwZGF0ZUZpbHRlclZhbHVlOltObi5Ob25lLCJjbHJGaWx0ZXJWYWx1ZSIsInVwZGF0ZUZpbHRlclZhbHVlIl19LG91dHB1dHM6e3NvcnRPcmRlckNoYW5nZToiY2xy''@;'; put 'put ''RGdTb3J0T3JkZXJDaGFuZ2UiLGZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOlt2ZChbb2ddKSx3YSx3bF0sbmdDb250ZW50U2VsZWN0b3JzOllWZSxkZWNsczo5LHZhcnM6NSxjb25zdHM6W1siY29sdW1uVGl0bGUiLCIiXSxbMSwiZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uLWZsZXgiXSxbImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uLXRpdGxlIiwidHlwZSIsImJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFu''@;'; put 'put ''Z2UiLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''LXRpdGxlIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImRhdGFncmlkLWNvbHVtbi10aXRsZSIsMywiY2xpY2siXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsImNsYXNzIiwic29ydC1pY29uIiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJzaGFwZSIsImFycm93IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJzb3J0LWljb24iXSxbMywiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsImNsckRnU3RyaW5nRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiXSxbMywiY2xyRmlsdGVyVmFs''@;'; put 'put ''dWVDaGFuZ2UiLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsImNsckZpbHRlck1pblBsYWNlaG9sZGVyIiwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiXSxbMSwiZGF0YWdyaWQtY29sdW1uLXRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoV1Zl''@;'; put 'put ''KSxkZSgwLCJkaXYiLDEpLGd0KDEsS1ZlLDMsMiwiYnV0dG9uIiwyKSxZcigyKSxndCgzLHFWZSwxLDMsImNsci1kZy1zdHJpbmctZmlsdGVyIiwzKSg0LFhWZSwxLDQsImNsci1kZy1udW1lcmljLWZpbHRlciIsNCkoNSxKVmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSg3LGVCZSwy''@;'; put 'put ''LDEsInNwYW4iLDUpKDgsdEJlLDEsMCwiY2xyLWRnLWNvbHVtbi1zZXBhcmF0b3IiLDYpLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLGQuc29ydGFibGUpLGZlKDIpLE1lKCJuZ0lmIixkLmZpZWxkJiYhZC5jdXN0b21GaWx0ZXImJiJzdHJpbmciPT1kLmNvbFR5cGUpLGZlKCksTWUoIm5n''@;'; put 'put ''SWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmIm51bWJlciI9PWQuY29sVHlwZSksZmUoMyksTWUoIm5nSWYiLCFkLnNvcnRhYmxlKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dTZXBhcmF0b3IpKX0sZGVwZW5kZW5jaWVzOltiYSxOMSxycyxEZGUsVGRlLGRHXSxlbmNhcHN1bGF0aW9uOjIs''@;'; put 'put ''Y2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxkZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9maWx0ZXJzPWEsdGhpcy5fc29ydD1kLHRoaXMuX3BhZ2U9aCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5fc21hcnQ9ITEsdGhpcy5fZGlzcGxheWVkPVtdLHRoaXMuX2NoYW5n''@;'; put 'put ''ZT1uZXcgV24sdGhpcy5fYWxsQ2hhbmdlcz1uZXcgV24sdGhpcy50cmFja0J5PWY9PmZ9Z2V0IHNtYXJ0KCl7cmV0dXJuIHRoaXMuX3NtYXJ0fWdldCBhbGwoKXtyZXR1cm4gdGhpcy5fYWxsfXNldCBhbGwoYSl7dGhpcy5fYWxsPWEsdGhpcy5lbWl0QWxsQ2hhbmdlcyhhKSx0aGlzLnNtYXJ0''@;'; put 'put ''P3RoaXMuX2ZpbHRlckl0ZW1zKCk6KHRoaXMuX2Rpc3BsYXllZD1hLHRoaXMuZW1pdENoYW5nZSgpKX1nZXQgZGlzcGxheWVkKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZH1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgYWxsQ2hhbmdlcygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9hbGxDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCB1bmluaXRpYWxpemVkKCl7cmV0dXJuIXRoaXMuX2FsbH1kZXN0cm95KCl7dGhpcy5fZmlsdGVyc1N1YiYmdGhpcy5fZmlsdGVyc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3NvcnRTdWImJnRoaXMuX3NvcnRTdWIudW5z''@;'; put 'put ''dWJzY3JpYmUoKSx0aGlzLl9wYWdlU3ViJiZ0aGlzLl9wYWdlU3ViLnVuc3Vic2NyaWJlKCl9c21hcnRlbkRvd24oKXt0aGlzLl9zbWFydD0hMSx0aGlzLmRlc3Ryb3koKX1zbWFydGVuVXAoKXt0aGlzLl9zbWFydD0hMCx0aGlzLl9maWx0ZXJzU3ViPXRoaXMuX2ZpbHRlcnMuY2hhbmdlLnN1''@;'; put 'put ''YnNjcmliZSgoKT0+dGhpcy5fZmlsdGVySXRlbXMoKSksdGhpcy5fc29ydFN1Yj10aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zb3J0LmNvbXBhcmF0b3I/dGhpcy5fc29ydEl0ZW1zKCk6dGhpcy5fZmlsdGVySXRlbXMoKX0pLHRoaXMuX3BhZ2VTdWI9dGhpcy5fcGFn''@;'; put 'put ''ZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VQYWdlKCkpfXJlZnJlc2goKXt0aGlzLnNtYXJ0JiZ0aGlzLl9maWx0ZXJJdGVtcygpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmRpc3BsYXllZCl9ZW1pdEFsbENoYW5nZXMoYSl7dGhpcy5fYWxsQ2hhbmdl''@;'; put 'put ''cy5uZXh0KGEpfV9maWx0ZXJJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX2ZpbHRlcmVkPXRoaXMuX2ZpbHRlcnMuaGFzQWN0aXZlRmlsdGVycygpP3RoaXMuX2FsbC5maWx0ZXIoYT0+dGhpcy5fZmlsdGVycy5hY2NlcHRzKGEpKTp0aGlzLl9hbGwuc2xpY2UoKSx0aGlzLl9w''@;'; put 'put ''YWdlLnRvdGFsSXRlbXM9dGhpcy5fZmlsdGVyZWQubGVuZ3RoLHRoaXMuX3NvcnRJdGVtcygpKX1fc29ydEl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVkfHwodGhpcy5fc29ydC5jb21wYXJhdG9yJiZ0aGlzLl9maWx0ZXJlZC5zb3J0KChhLGQpPT50aGlzLl9zb3J0LmNvbXBhcmUoYSxkKSks''@;'; put 'put ''dGhpcy5fY2hhbmdlUGFnZSgpKX1fY2hhbmdlUGFnZSgpe3RoaXMudW5pbml0aWFsaXplZHx8dGhpcy5fcGFnZS5hY3RpdmF0ZWQmJjA9PT10aGlzLl9wYWdlLnNpemV8fCh0aGlzLl9kaXNwbGF5ZWQ9dGhpcy5fcGFnZS5zaXplPjA/dGhpcy5fZmlsdGVyZWQuc2xpY2UodGhpcy5fcGFnZS5m''@;'; put 'put ''aXJzdEl0ZW0sdGhpcy5fcGFnZS5sYXN0SXRlbSsxKTp0aGlzLl9maWx0ZXJlZCx0aGlzLmVtaXRDaGFuZ2UoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHVnKSx4cihzTykseHIoTW0pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh''@;'; put 'put ''Y3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxKeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmRpZmZlcnM9ZCx0aGlzLml0ZW1zPWgsdGhpcy5kaWZmZXI9bnVsbCx0aGlzLnN1YnNjcmlwdGlvbnM9W10saC5zbWFydGVuVXAoKSx0aGlz''@;'; put 'put ''Lml0ZXJhYmxlUHJveHk9bmV3IG5zKGYsYSxkKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmNoYW5nZS5zdWJzY3JpYmUodj0+e3RoaXMuaXRlcmFibGVQcm94eS5uZ0Zvck9mPXYsdGhpcy5pdGVyYWJsZVByb3h5Lm5nRG9DaGVjaygpfSkpfXNldCByYXdJdGVtcyhhKXt0aGlzLl9yYXdJ''@;'; put 'put ''dGVtcz1hfHxbXX1zZXQgdHJhY2tCeShhKXt0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JUcmFja0J5PWF9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1uZ0RvQ2hlY2soKXt0aGlzLmRpZmZlcnx8KHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKHRoaXMu''@;'; put 'put ''X3Jhd0l0ZW1zKS5jcmVhdGUodGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeSkpLHRoaXMuZGlmZmVyJiZ0aGlzLmRpZmZlci5kaWZmKHRoaXMuX3Jhd0l0ZW1zKSYmKHRoaXMuaXRlbXMuYWxsPXRoaXMuX3Jhd0l0ZW1zKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5m''@;'; put 'put ''b3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFNsKSxHZShlbSksR2UoZGcpLEdlKERvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRnSXRlbXMiLCIiLCJjbHJE''@;'; put 'put ''Z0l0ZW1zT2YiLCIiXV0saW5wdXRzOntyYXdJdGVtczpbTm4uTm9uZSwiY2xyRGdJdGVtc09mIiwicmF3SXRlbXMiXSx0cmFja0J5OltObi5Ob25lLCJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX19KSxjfSkoKSxnRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRl''@;'; put 'put ''bXM9YX1nZXQgZW1wdHlEYXRhZ3JpZCgpe3JldHVybiEodGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0ZW1zLmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGRnKSl9''@;'; put 'put ''LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8s''@;'; put 'put ''ZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXIiXSxbImNsYXNzIiwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCJdLFs0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXBsYWNlaG9s''@;'; put 'put ''ZGVyLWltYWdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxkZSgwLCJkaXYiLDApLGd0KDEsbkJlLDEsMCwiZGl2IiwxKSxkZSgyLCJzcGFuIiwyKSxndCgzLHJCZSwxLDAsIm5nLWNvbnRlbnQiLDMpLGhlKCkoKSksMiZhJiYoVHIoImRhdGFncmlkLWVtcHR5IixkLmVt''@;'; put 'put ''cHR5RGF0YWdyaWQpLGZlKCksTWUoIm5nSWYiLGQuZW1wdHlEYXRhZ3JpZCksZmUoMiksTWUoIm5nSWYiLGQuZW1wdHlEYXRhZ3JpZCkpfSxkZXBlbmRlbmNpZXM6W2JhXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxtRz0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuY2Vs''@;'; put 'put ''bFZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNlbGxWaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0''@;'; put 'put ''b3JzOltbImRnLXdyYXBwZWQtY2VsbCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKGlCZSw1KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJj''@;'; put 'put ''ZWxsUG9ydGFsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLGFCZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsSWMpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksUWY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnZjcj1hfWdldCBfdmll''@;'; put 'put ''dygpe3JldHVybiB0aGlzLndyYXBwZWRJbmplY3Rvci5nZXQobUcsdGhpcy52Y3IpLmNlbGxWaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IFlMKG1HLHRoaXMudmNyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8p''@;'; put 'put ''KX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNlbGwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxXTCw0KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnNpZ25wb3N0PWYpfX0saG9zdEF0dHJzOlsicm9sZSIsImdy''@;'; put 'put ''aWRjZWxsIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkYXRhZ3JpZC1jZWxsIiwhMCkoImRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIiLGQuc2lnbnBvc3QubGVuZ3RoPjApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSWRlPTAscXg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFUxe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlzLl9yZXBsYWNlPW5ldyBlaSghMSks''@;'; put 'put ''dGhpcy5fYW5pbWF0ZT1uZXcgV24sSWRlKyssdGhpcy5leHBhbmRhYmxlSWQ9ImNsci1kZy1leHBhbmRhYmxlLXJvdy0iK0lkZX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpeyhhPSEhYSkhPT10aGlzLl9leHBhbmRlZCYmKHRoaXMuX2V4cGFu''@;'; put 'put ''ZGVkPWEsdGhpcy5fYW5pbWF0ZS5uZXh0KCksdGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoYSkpfWdldCByZXBsYWNlKCl7cmV0dXJuIHRoaXMuX3JlcGxhY2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGFuaW1hdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZS5hc09ic2VydmFibGUoKX1sb2FkaW5nU3Rh''@;'; put 'put ''dGVDaGFuZ2UoYSl7c3VwZXIubG9hZGluZ1N0YXRlQ2hhbmdlKGEpLGEhPT16MS5MT0FESU5HJiZ0aGlzLl9hbmltYXRlLm5leHQoKX1zZXRSZXBsYWNlKGEpe3RoaXMuX3JlcGxhY2UubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIFF5PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRElTUExBWT0wXT0iRElTUExBWSIsY1tjLkNBTENVTEFURT0xXT0iQ0FMQ1VMQVRFIixjfShReXx8e30pLHBsPWZ1bmN0aW9uKGMpe3JldHVybiBj''@;'; put 'put ''W2MuTm9uZT0wXT0iTm9uZSIsY1tjLlNpbmdsZT0xXT0iU2luZ2xlIixjW2MuTXVsdGk9Ml09Ik11bHRpIixjfShwbHx8e30pO2xldCB2Rz0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucm93Vmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxs''@;'; put 'put ''KX1uZ09uRGVzdHJveSgpe3RoaXMucm93Vmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLXJvdyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxk''@;'; put 'put ''KXtpZigxJmEmJnFhKG9CZSw1KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJyb3dQb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgp''@;'; put 'put ''LGd0KDAsc0JlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxJYykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxWWmU9MCxlXz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5faXRlbXM9YSx0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQcmVzc2VkPSEx''@;'; put 'put ''LHRoaXMucm93U2VsZWN0aW9uTW9kZT0hMSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMubG9ja2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyBXbix0aGlzLl9zZWxlY3Rpb25UeXBlPXBsLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLnN1YnNjcmlwdGlvbnM9''@;'; put 'put ''W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVjdGlvbiIrVlplKyssdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0aGlzLnN1YnNjcmlw''@;'; put 'put ''dGlvbnMucHVzaChhLmFsbENoYW5nZXMuc3Vic2NyaWJlKGg9Pntjb25zdCBmPVtdO3N3aXRjaCh0aGlzLnNlbGVjdGlvblR5cGUpe2Nhc2UgcGwuTm9uZTpicmVhaztjYXNlIHBsLlNpbmdsZTp7bGV0IHYsTT0hMTt0aGlzLmN1cnJlbnRTaW5nbGUmJiF0aGlzLnByZXZTaW5nbGVTZWxlY3Rp''@;'; put 'put ''b25SZWYmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9YS50cmFja0J5KHRoaXMuY3VycmVudFNpbmdsZSkpLGguZm9yRWFjaChEPT57Y29uc3QgWj1hLnRyYWNrQnkoRCk7dGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPT09WiYmKHY9RCxNPSEwKSx0aGlzLmxvY2tlZFJlZnMuaW5k''@;'; put 'put ''ZXhPZihaKT4tMSYmZi5wdXNoKFopfSksYS5zbWFydCYmIXYmJihNPSEwKSxzZXRUaW1lb3V0KCgpPT57TSYmKHRoaXMuY3VycmVudFNpbmdsZT12KX0sMCk7YnJlYWt9Y2FzZSBwbC5NdWx0aTp7bGV0IHY9dGhpcy5jdXJyZW50LnNsaWNlKCksTT0hMTt0aGlzLmN1cnJlbnQubGVuZ3RoPjAm''@;'; put 'put ''JnRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoIT09dGhpcy5jdXJyZW50Lmxlbmd0aCYmKHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5jdXJyZW50LmZvckVhY2goRD0+e3RoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaChhLnRyYWNrQnkoRCkpfSkpLGguZm9yRWFjaChEPT57''@;'; put 'put ''Y29uc3QgWj1hLnRyYWNrQnkoRCk7dGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoWik+LTEmJmYucHVzaChaKX0pLHYubGVuZ3RoPjAmJihoLmZvckVhY2goRD0+e2NvbnN0IFo9YS50cmFja0J5KEQpLHJlPXRoaXMucHJldlNlbGVjdGlvblJlZnMuaW5kZXhPZihaKTtyZT4tMSYmKHZbcmVdPUQs''@;'; put 'put ''TT0hMCl9KSxhLnNtYXJ0JiYodj12LmZpbHRlcihEPT5oLmluZGV4T2YoRCk+LTEpLHRoaXMuY3VycmVudC5sZW5ndGghPT12Lmxlbmd0aCYmKE09ITApKSxzZXRUaW1lb3V0KCgpPT57TSYmKHRoaXMuY3VycmVudD12KX0sMCkpO2JyZWFrfX10aGlzLmxvY2tlZFJlZnM9Zn0pKSx0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbnMucHVzaCh0aGlzLnZhbHVlQ29sbGVjdG9yLnBpcGUoZm0oMCkpLnN1YnNjcmliZSgoKT0+dGhpcy5lbWl0Q2hhbmdlKCkpKX1nZXQgc2VsZWN0aW9uVHlwZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlfXNldCBzZWxlY3Rpb25UeXBlKGEpe2EhPT10aGlzLnNlbGVj''@;'; put 'put ''dGlvblR5cGUmJih0aGlzLl9zZWxlY3Rpb25UeXBlPWEsYT09PXBsLk5vbmU/ZGVsZXRlIHRoaXMuY3VycmVudDp0aGlzLnVwZGF0ZUN1cnJlbnQoW10sITEpKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMudXBkYXRlQ3VycmVudChhLCEw''@;'; put 'put ''KX1nZXQgY3VycmVudFNpbmdsZSgpe3JldHVybiB0aGlzLl9jdXJyZW50U2luZ2xlfXNldCBjdXJyZW50U2luZ2xlKGEpe2EhPT10aGlzLl9jdXJyZW50U2luZ2xlJiYodGhpcy5fY3VycmVudFNpbmdsZT1hLGEmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9dGhpcy5faXRlbXMudHJh''@;'; put 'put ''Y2tCeShhKSksdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBfc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGl8fHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGV9''@;'; put 'put ''Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9jdXJyZW50PVtdLHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPW51bGwsdGhpcy5fY3VycmVudFNpbmdsZT1udWxsLHRoaXMuZW1pdENoYW5nZSgpfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMu''@;'; put 'put ''Zm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXVwZGF0ZUN1cnJlbnQoYSxkKXt0aGlzLl9jdXJyZW50PWEsZCYmdGhpcy52YWx1ZUNvbGxlY3Rvci5uZXh0KGEpfWlzU2VsZWN0ZWQoYSl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGU/dGhpcy5jdXJyZW50U2luZ2xl''@;'; put 'put ''PT09YTp0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGkmJnRoaXMuY3VycmVudC5pbmRleE9mKGEpPj0wfXNldFNlbGVjdGVkKGEsZCl7Y29uc3QgaD10aGlzLmN1cnJlbnQ/dGhpcy5jdXJyZW50LmluZGV4T2YoYSk6LTE7c3dpdGNoKHRoaXMuX3NlbGVjdGlvblR5cGUpe2Nhc2UgcGwu''@;'; put 'put ''Tm9uZTpjYXNlIHBsLlNpbmdsZTpicmVhaztjYXNlIHBsLk11bHRpOmg+PTAmJiFkP3RoaXMuZGVzZWxlY3RJdGVtKGgpOmg8MCYmZCYmdGhpcy5zZWxlY3RJdGVtKGEpfX1pc0FsbFNlbGVjdGVkKCl7aWYodGhpcy5fc2VsZWN0aW9uVHlwZSE9PXBsLk11bHRpfHwhdGhpcy5faXRlbXMuZGlz''@;'; put 'put ''cGxheWVkKXJldHVybiExO2NvbnN0IGE9dGhpcy5faXRlbXMuZGlzcGxheWVkLmZpbHRlcihmPT4hMT09PXRoaXMuaXNMb2NrZWQoZikpO3JldHVybiEoYS5sZW5ndGg8MSkmJmEuZmlsdGVyKGY9PnRoaXMuY3VycmVudC5pbmRleE9mKGYpPi0xKS5sZW5ndGg9PT1hLmxlbmd0aH1sb2NrSXRl''@;'; put 'put ''bShhLGQpe2lmKHRoaXMuY2FuSXRCZUxvY2tlZCgpKXtjb25zdCBoPXRoaXMuX2l0ZW1zLnRyYWNrQnkoYSk7ITA9PT1kP3RoaXMubG9ja2VkUmVmcy5wdXNoKGgpOnRoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGY9PmghPT1mKX19aXNMb2NrZWQoYSl7aWYodGhpcy5j''@;'; put 'put ''YW5JdEJlTG9ja2VkKCkpe2NvbnN0IGQ9dGhpcy5faXRlbXMudHJhY2tCeShhKTtyZXR1cm4gdGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoZCk+LTF9cmV0dXJuITF9dG9nZ2xlQWxsKCl7dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLk5vbmV8fHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5n''@;'; put 'put ''bGV8fCh0aGlzLmlzQWxsU2VsZWN0ZWQoKT90aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57Y29uc3QgZD10aGlzLmN1cnJlbnQuaW5kZXhPZihhKTtkPi0xJiYhMT09PXRoaXMuaXNMb2NrZWQoYSkmJnRoaXMuZGVzZWxlY3RJdGVtKGQpfSk6dGhpcy5faXRlbXMuZGlzcGxheWVk''@;'; put 'put ''LmZvckVhY2goYT0+e3RoaXMuY3VycmVudC5pbmRleE9mKGEpPDAmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5zZWxlY3RJdGVtKGEpfSkpfXNlbGVjdEl0ZW0oYSl7dGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5jb25jYXQoYSksdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKHRo''@;'; put 'put ''aXMuX2l0ZW1zLnRyYWNrQnkoYSkpfWRlc2VsZWN0SXRlbShhKXtpZih0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LnNsaWNlKDAsYSkuY29uY2F0KHRoaXMuY3VycmVudC5zbGljZShhKzEpKSxhPHRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoKXtjb25zdCBkPXRoaXMucHJldlNlbGVj''@;'; put 'put ''dGlvblJlZnMuc3BsaWNlKGEsMSk7dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoaD0+aCE9PWRbMF0pfX1jYW5JdEJlTG9ja2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGUhPT1wbC5Ob25lfWVtaXRDaGFuZ2UoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwu''@;'; put 'put ''U2luZ2xlP3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNpbmdsZSk6dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLk11bHRpJiZ0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmN1cnJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihkZyks''@;'; put 'put ''eHIodWcpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxiRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXc9bmV3IGVpKFF5LkRJU1BMQVkpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMu''@;'; put 'put ''cHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNBTENVTEFURV9NT0RFX09OKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcubmV4dChReS5DQUxDVUxBVEUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJTdGVwcyhKZi5DQUxDVUxBVEVfTU9ERV9PRkYpLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KFF5LkRJU1BMQVkpKSl9Z2V0IHZpZXcoKXtyZXR1cm4gdGhpcy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEk3KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkseUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNlbGVjdGlvbj1hfW9uU2VsZWN0aW9uQ2VsbENsaWNrKGEpe3Ro''@;'; put 'put ''aXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGV8fCJMQUJFTCIhPT1hLnRhcmdldC50YWdOYW1lJiYiSU5QVVQiIT09YS50YXJnZXQudGFnTmFtZSYmYS50YXJnZXQucXVlcnlTZWxlY3RvcigiaW5wdXQiKT8uY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoR2UoZV8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJkYXRhZ3JpZC1zZWxlY3QiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2VsZWN0aW9uQ2VsbENsaWNr''@;'; put 'put ''KGYpfSl9fSksY30pKCksU3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5maWx0ZXJSZW5kZXJTdGVwcyhKZi5DTEVBUl9XSURUSFMpLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0U3RhdGUoYSl7''@;'; put 'put ''dGhpcy5zZXRXaWR0aChhKSx0aGlzLnNldEhpZGRlbihhKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFh5KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhp''@;'; put 'put ''cy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxLeCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlz''@;'; put 'put ''LmVsLm5hdGl2ZUVsZW1lbnQsS3gpfWNsZWFyV2lkdGgoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKEVvKSxHZShJNykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY2VsbCJdXX0pLGN9KSgpLGxPPTAsRW09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUs''@;'; put 'put ''Y2UsYmUsRWUpe3RoaXMuc2VsZWN0aW9uPWEsdGhpcy5yb3dBY3Rpb25TZXJ2aWNlPWQsdGhpcy5nbG9iYWxFeHBhbmRhYmxlPWgsdGhpcy5leHBhbmQ9Zix0aGlzLmRldGFpbFNlcnZpY2U9dix0aGlzLmRpc3BsYXlNb2RlPU0sdGhpcy52Y3I9RCx0aGlzLmNvbW1vblN0cmluZ3M9Y2UsdGhp''@;'; put 'put ''cy5pdGVtcz1iZSx0aGlzLmRvY3VtZW50PUVlLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IoITEpLHRoaXMuZGV0YWlsRGlzYWJsZWQ9ITEsdGhpcy5kZXRhaWxIaWRkZW49ITEsdGhpcy5za2VsZXRvbkxvYWRpbmc9ITEsdGhpcy5k''@;'; put 'put ''aXNwbGF5Q2VsbHM9ITEsdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSExLHRoaXMuU0VMRUNUSU9OX1RZUEU9cGwsdGhpcy5pdGVtQ2hhbmdlcz1uZXcgeXgoMSksdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fZGV0YWlsT3BlbkxhYmVsPSIiLHRoaXMuX2RldGFpbENsb3NlTGFiZWw9IiIs''@;'; put 'put ''dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9IiIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3NlbGVjdGFibGU9ITAsbE8rKyx0aGlzLmlkPSJjbHItZGctcm93IitsTyx0aGlzLnJhZGlvSWQ9ImNsci1kZy1yb3ctcmQiK2xPLHRoaXMuY2hlY2tib3hJZD0iY2xyLWRnLXJvdy1jYiIrbE8s''@;'; put 'put ''dGhpcy5leHBhbmRhYmxlSWQ9Zi5leHBhbmRhYmxlSWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gocTgoZi5yZXBsYWNlLGYuZXhwYW5kQ2hhbmdlKS5zdWJzY3JpYmUoKFtCZSxxZV0pPT57QmUmJnFlPyh0aGlzLnJlcGxhY2VkPSEwLFouYWRkQ2xhc3MocmUubmF0aXZlRWxlbWVudCwiZGF0''@;'; put 'put ''YWdyaWQtcm93LXJlcGxhY2VkIikpOih0aGlzLnJlcGxhY2VkPSExLFoucmVtb3ZlQ2xhc3MocmUubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpfSkpfWdldCBpdGVtKCl7cmV0dXJuIHRoaXMuX2l0ZW19c2V0IGl0ZW0oYSl7dGhpcy5faXRlbT1hLHRoaXMuaXRlbUNo''@;'; put 'put ''YW5nZXMubmV4dChhKSx0aGlzLmNsckRnU2VsZWN0YWJsZT10aGlzLl9zZWxlY3RhYmxlfWdldCBjbHJEZ1NlbGVjdGFibGUoKXtyZXR1cm4hdGhpcy5zZWxlY3Rpb24uaXNMb2NrZWQodGhpcy5pdGVtKX1zZXQgY2xyRGdTZWxlY3RhYmxlKGEpe3RoaXMuaXRlbSYmdGhpcy5zZWxlY3Rpb24u''@;'; put 'put ''bG9ja0l0ZW0odGhpcy5pdGVtLCJmYWxzZSI9PT1hfHwhMT09PWEpLHRoaXMuX3NlbGVjdGFibGU9YX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXBsLk5vbmU/dGhpcy5fc2VsZWN0ZWQ6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZCh0aGlz''@;'; put 'put ''Lml0ZW0pfXNldCBzZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuTm9uZT90aGlzLl9zZWxlY3RlZD1hOihhJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGk/dGhpcy5yYW5nZVNlbGVjdCgpOnRoaXMuc2VsZWN0aW9uLnJhbmdlU3Rh''@;'; put 'put ''cnQ9bnVsbCx0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3RlZCh0aGlzLml0ZW0sYSkpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZC5leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmQuZXhwYW5kZWQ9YX1nZXQgY2xyRGdEZXRhaWxPcGVuTGFiZWwoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZGV0YWlsT3BlbkxhYmVsP3RoaXMuX2RldGFpbE9wZW5MYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5vcGVufXNldCBjbHJEZ0RldGFpbE9wZW5MYWJlbChhKXt0aGlzLl9kZXRhaWxPcGVuTGFiZWw9YX1nZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2RldGFpbENsb3NlTGFiZWw/dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZX1zZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKGEpe3RoaXMuX2RldGFpbENsb3NlTGFiZWw9YX1nZXQgY2xyRGdSb3dTZWxlY3Rpb25MYWJlbCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9yb3dTZWxlY3Rpb25MYWJlbD90aGlzLl9yb3dTZWxlY3Rpb25MYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3R9c2V0IGNsckRnUm93U2VsZWN0aW9uTGFiZWwoYSl7dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5q''@;'; put 'put ''ZWN0b3IuZ2V0KHZHLHRoaXMudmNyKS5yb3dWaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IFlMKHZHLHRoaXMudmNyKSx0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sITE9PT10aGlzLmNsckRnU2VsZWN0YWJsZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7''@;'; put 'put ''dGhpcy5kZ0NlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5kZ0NlbGxzLmZvckVhY2goYT0+e2EuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuaW5zZXJ0KGEuX3ZpZXcpfSl9KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0''@;'; put 'put ''aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vic2NyaWJlKGE9Pntmb3IobGV0IGQ9dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Njcm9sbGFibGVDZWxscy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fY2FsY3VsYXRlZENlbGxzLmxlbmd0aDtkPjA7ZC0tKXRoaXMu''@;'; put 'put ''X2NhbGN1bGF0ZWRDZWxscy5kZXRhY2goKTthPT09UXkuQ0FMQ1VMQVRFPyh0aGlzLmRpc3BsYXlDZWxscz0hMSx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX2NhbGN1bGF0ZWRDZWxscy5pbnNlcnQoZC5fdmlldyl9KSk6KHRoaXMuZGlzcGxheUNl''@;'; put 'put ''bGxzPSEwLHRoaXMuZGdDZWxscy5mb3JFYWNoKGQ9PntkLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChkLl92aWV3KX0pKX0pLHRoaXMuZXhwYW5kLmFuaW1hdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSF0aGlzLmV4''@;'; put 'put ''cGFuZEFuaW1hdGlvblRyaWdnZXJ9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXRvZ2dsZShhPSF0aGlzLnNlbGVjdGVkKXthIT09dGhpcy5zZWxlY3RlZCYmKHRoaXMuc2VsZWN0ZWQ9YSx0aGlzLnNlbGVjdGVkQ2hhbmdl''@;'; put 'put ''ZC5lbWl0KGEpKX10b2dnbGVFeHBhbmQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRBbmltYXRpb24udXBkYXRlU3RhcnRIZWlnaHQoKSx0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Y2xl''@;'; put 'put ''YXJSYW5nZXMoYSl7YS5zaGlmdEtleSYmKHRoaXMuZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCksLTEhPT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IikmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGUoITApKSl9c2Vs''@;'; put 'put ''ZWN0Um93KGE9IXRoaXMuc2VsZWN0ZWQsZCl7IkxBQkVMIiE9PWQudGFyZ2V0LnRhZ05hbWUmJih0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09dGhpcy5TRUxFQ1RJT05fVFlQRS5TaW5nbGU/dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT10aGlzLml0ZW06dGhpcy50b2dnbGUo''@;'; put 'put ''YSkpfXJhbmdlU2VsZWN0KCl7Y29uc3QgYT10aGlzLml0ZW1zLmRpc3BsYXllZDtpZighYSlyZXR1cm47Y29uc3QgZD1hLmluZGV4T2YodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCk7aWYodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCYmdGhpcy5zZWxlY3Rpb24uY3VycmVudC5pbmNsdWRl''@;'; put 'put ''cyh0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0KSYmdGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkJiYtMSE9PWQpe2NvbnN0IGg9YS5pbmRleE9mKHRoaXMuaXRlbSksZj1uZXcgU2V0KHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuY29uY2F0KGEuc2xpY2UoTWF0aC5taW4oZCxoKSxNYXRoLm1h''@;'; put 'put ''eChkLGgpKzEpKSk7dGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKSx0aGlzLnNlbGVjdGlvbi5jdXJyZW50LnB1c2goLi4uZil9ZWxzZSB0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0PXRoaXMuaXRlbX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''YykoR2UoZV8pLEdlKEt5KSxHZShxeSksR2UocXgpLEdlKFhmKSxHZShiRyksR2UoRG8pLEdlKEVvKSxHZShKaSksR2UoaXMpLEdlKGRnKSxHZSh2cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCxoKXtpZigxJmEmJmFvKGgsUWYsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5kZ0NlbGxzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoVkwsNSkscWEobEJlLDUpLHFhKGNCZSw1LERvKSxxYSh1QmUsNSxEbykscWEoZEJlLDUsRG8pKSwyJmEpe2xldCBo''@;'; put 'put ''O0NpKGg9U2koKSkmJihkLmV4cGFuZEFuaW1hdGlvbj1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5kZXRhaWxCdXR0b249aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuX3N0aWNreUNlbGxzPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9zY3JvbGxhYmxlQ2VsbHM9aC5maXJzdCksQ2koaD1TaSgp''@;'; put 'put ''KSYmKGQuX2NhbGN1bGF0ZWRDZWxscz1oLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJyb3dncm91cCJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtb3ducyIsZC5pZCksVHIoImRhdGFncmlkLXJvdyIsITApKCJkYXRhZ3JpZC1yb3ct''@;'; put 'put ''c2tlbGV0b24iLGQuc2tlbGV0b25Mb2FkaW5nKSgiZGF0YWdyaWQtc2VsZWN0ZWQiLGQuc2VsZWN0ZWQpKX0saW5wdXRzOntkZXRhaWxEaXNhYmxlZDpbTm4uTm9uZSwiY2xyRGdEZXRhaWxEaXNhYmxlZCIsImRldGFpbERpc2FibGVkIl0sZGV0YWlsSGlkZGVuOltObi5Ob25lLCJjbHJEZ0Rl''@;'; put 'put ''dGFpbEhpZGRlbiIsImRldGFpbEhpZGRlbiJdLHNrZWxldG9uTG9hZGluZzpbTm4uTm9uZSwiY2xyRGdTa2VsZXRvbkxvYWRpbmciLCJza2VsZXRvbkxvYWRpbmciXSxpdGVtOltObi5Ob25lLCJjbHJEZ0l0ZW0iLCJpdGVtIl0sY2xyRGdTZWxlY3RhYmxlOiJjbHJEZ1NlbGVjdGFibGUiLHNl''@;'; put 'put ''bGVjdGVkOltObi5Ob25lLCJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxleHBhbmRlZDpbTm4uTm9uZSwiY2xyRGdFeHBhbmRlZCIsImV4cGFuZGVkIl0sY2xyRGdEZXRhaWxPcGVuTGFiZWw6ImNsckRnRGV0YWlsT3BlbkxhYmVsIixjbHJEZ0RldGFpbENsb3NlTGFiZWw6ImNsckRnRGV0''@;'; put 'put ''YWlsQ2xvc2VMYWJlbCIsY2xyRGdSb3dTZWxlY3Rpb25MYWJlbDoiY2xyRGdSb3dTZWxlY3Rpb25MYWJlbCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckRnRXhwYW5kZWRDaGFuZ2UifSxmZWF0dXJlczpbZGEoW3F4''@;'; put 'put ''LHtwcm92aWRlOlUxLHVzZUV4aXN0aW5nOnF4fSx7cHJvdmlkZTpEeCx1c2VFeGlzdGluZzpxeH1dKV0sbmdDb250ZW50U2VsZWN0b3JzOmZCZSxkZWNsczo5LHZhcnM6Myxjb25zdHM6W1siZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50IiwiIl0sWyJjYWxjdWxhdGVkQ2VsbHMiLCIiXSxbInN0''@;'; put 'put ''aWNreUNlbGxzIiwiIl0sWyJzY3JvbGxhYmxlQ2VsbHMiLCIiXSxbImRldGFpbEJ1dHRvbiIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRUcmlnZ2VyIiw0LCJuZ0lmIl0sWzQsIm5nSWYi''@;'; put 'put ''XSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwiY2xpY2siXSxbMywiY2xyRXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiLDMsImlkIl0s''@;'; put 'put ''WzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbImNsYXNzIiwiZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1hY3Rpb25zIGRhdGFn''@;'; put 'put ''cmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbImNs''@;'; put 'put ''YXNzIiwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIiwzLCJuZ0NsYXNzIl0sWzEsImRhdGFncmlkLXNjcm9sbGluZy1jZWxscyJd''@;'; put 'put ''LFsiY2xhc3MiLCJza2VsZXRvbi1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInRhYmlu''@;'; put 'put ''ZGV4IiwiLTEiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiY2xpY2siLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInRhYmluZGV4IiwiLTEiLCJ0''@;'; put 'put ''eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEs''@;'; put 'put ''ImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgi''@;'; put 'put ''LCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxl''@;'; put 'put ''LWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiJdLFsiY2xyU21hbGwiLCIiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwi''@;'; put 'put ''ZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwzLCJkaXNhYmxlZCIsImlzLW9wZW4iLCJjbGljayIsNCwibmdJZiJdLFsidGFiaW5kZXgi''@;'; put 'put ''LCItMSIsInR5cGUiLCJidXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24iXSxbMSwic2tl''@;'; put 'put ''bGV0b24tbG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGhCZSksZ3QoMCx5QmUsMywyLCJkaXYiLDYpKDEsd0JlLDIsMiwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw3KSgyLFNCZSwxLDEsbnVsbCw4KSgzLE1CZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAs''@;'; put 'put ''SWMpKDUsVkJlLDE3LDE0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxLEljKSxGbCg3LG51bGwsMikpLDImYSYmKE1lKCJuZ0lmIixkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlKSxmZSgpLE1lKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSYmZC5leHBhbmQuZXhwYW5kYWJs''@;'; put 'put ''ZSksZmUoKSxNZSgibmdJZiIsIWQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUmJiFkLmV4cGFuZC5leHBhbmRhYmxlKSl9LGRlcGVuZGVuY2llczpbd3UsYmEsTjEscnMsZHMsY0csbEcscWwsTWQsYkwsbmwsJHMsVkwsUmQsUWYseUcsU3BdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO3Zh''@;'; put 'put ''ciBXMT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLldJRFRIPTBdPSJXSURUSCIsY1tjLkhJRERFTj0xXT0iSElEREVOIixjW2MuSU5JVElBTElaRT0yXT0iSU5JVElBTElaRSIsY30oVzF8fHt9KTtjb25zdCBCWmU9T2JqZWN0LmtleXMoVzEpLm1hcChjPT5XMVtjXSkuZmlsdGVyKGM9PmM9PT1w''@;'; put 'put ''YXJzZUludChjLDEwKSYmYyE9PVcxLklOSVRJQUxJWkUpO2xldCBoZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb2x1bW5zPVtdLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlPW5ldyBlaShudWxsKSx0aGlzLl9jYWNoZT1bXX1nZXQgY29sdW1uU3RhdGVzKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29sdW1ucy5tYXAoYT0+YS52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+YS5oaWRlYWJsZSkubGVuZ3RoPjB9Z2V0IHZpc2libGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcihhPT4h''@;'; put 'put ''YS5oaWRkZW4pfWNhY2hlKCl7dGhpcy5fY2FjaGU9dGhpcy5jb2x1bW5zLm1hcChhPT57Y29uc3QgZD17Li4uYS52YWx1ZX07cmV0dXJuIGRlbGV0ZSBkLmNoYW5nZXMsZH0pfWhhc0NhY2hlKCl7cmV0dXJuISF0aGlzLl9jYWNoZS5sZW5ndGh9cmVzZXRUb0xhc3RDYWNoZSgpe3RoaXMuX2Nh''@;'; put 'put ''Y2hlLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPXsuLi5hLGNoYW5nZXM6QlplfTt0aGlzLmNvbHVtbnNbZF0ubmV4dChoKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGgpfSksdGhpcy5fY2FjaGU9W119ZW1pdFN0YXRlQ2hhbmdlQXQoYSxkKXt0aGlzLmNvbHVtbnNbYV0mJnRoaXMu''@;'; put 'put ''ZW1pdFN0YXRlQ2hhbmdlKHRoaXMuY29sdW1uc1thXSxkKX1lbWl0U3RhdGVDaGFuZ2UoYSxkKXtjb25zdCBoPXsuLi5hLnZhbHVlLC4uLmR9O2EubmV4dChoKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBqWmU9e2l0ZW1TaXplOjMyLG1pbkJ1ZmZlclB4OjIwMCxtYXhCdWZmZXJQeDo0MDB9O2xldCBSZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxE''@;'; put 'put ''LFoscmUsY2UsYmUsRWUsQmUpe3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9YSx0aGlzLml0ZXJhYmxlRGlmZmVycz1kLHRoaXMuaXRlbXM9aCx0aGlzLm5nWm9uZT1mLHRoaXMucmVuZGVyZXIyPXYsdGhpcy50ZW1wbGF0ZVJlZj1NLHRoaXMudmlld0NvbnRhaW5lclJlZj1ELHRoaXMuZGlyZWN0''@;'; put 'put ''aW9uYWxpdHk9Wix0aGlzLnNjcm9sbERpc3BhdGNoZXI9cmUsdGhpcy52aWV3cG9ydFJ1bGVyPWNlLHRoaXMuZGF0YWdyaWQ9YmUsdGhpcy5jb2x1bW5zU2VydmljZT1FZSx0aGlzLmluamVjdG9yPUJlLHRoaXMucmVuZGVyZWRSYW5nZUNoYW5nZT1uZXcgS3IsdGhpcy5wZXJzaXN0SXRlbXM9''@;'; put 'put ''ITAsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cz17Li4ualplfSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy50b3BJbmRleD0wLHRoaXMubXV0YXRpb25DaGFuZ2VzPW5ldyBNdXRhdGlvbk9ic2VydmVyKHFlPT57cWUuZm9yRWFjaChydD0+e3J0LnRhcmdldC5jbGFz''@;'; put 'put ''c0xpc3QuY29udGFpbnMoImRhdGFncmlkLWNvbXBhY3QiKSYmdGhpcy5pdGVtU2l6ZT4yNCYmKHRoaXMuaXRlbVNpemU9MjQpfSl9KSx0aGlzLnZpZXdSZXBlYXRlcj1uZXcgWjBlLHRoaXMuY2RrVmlydHVhbEZvcklucHV0cz17Y2RrVmlydHVhbEZvclRyYWNrQnk6cWU9PnFlfSxoLnNtYXJ0''@;'; put 'put ''ZW5VcCgpLGJlLmRldGFpbFNlcnZpY2UucHJldmVudEZvY3VzU2Nyb2xsPSEwLHRoaXMuZGF0YWdyaWRFbGVtZW50UmVmPWJlLmVsLHRoaXMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplPTIwLHRoaXMubXV0YXRpb25DaGFuZ2VzLm9ic2VydmUodGhpcy5kYXRhZ3JpZEVsZW1lbnRS''@;'; put 'put ''ZWYubmF0aXZlRWxlbWVudCx7YXR0cmlidXRlRmlsdGVyOlsiY2xhc3MiXSxhdHRyaWJ1dGVPbGRWYWx1ZTohMH0pLHRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5PW5ldyBFRmUodGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZSx0aGlzLl9jZGtGaXhlZFNp''@;'; put 'put ''emVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4LHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHgpfWdldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JPZn1zZXQgY2RrVmly''@;'; put 'put ''dHVhbEZvck9mKGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yT2Y9YSx0aGlzLml0ZW1zLmFsbD1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMu''@;'; put 'put ''Y2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoKXtyZXR1cm4g''@;'; put 'put ''dGhpcz8uY2RrVmlydHVhbEZvcklucHV0cz8uY2RrVmlydHVhbEZvclRlbXBsYXRlfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZT1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBj''@;'; put 'put ''ZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0''@;'; put 'put ''dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU9ZDcoYSksdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGl0ZW1TaXplKCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemV9c2V0IGl0ZW1TaXplKGEpe3RoaXMuX2Nka0ZpeGVkU2l6''@;'; put 'put ''ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemU9ZDcoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9Z2V0IG1pbkJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHh9c2V0IG1pbkJ1ZmZl''@;'; put 'put ''clB4KGEpe3RoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHg9ZDcoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9Z2V0IG1heEJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1''@;'; put 'put ''dHMubWF4QnVmZmVyUHh9c2V0IG1heEJ1ZmZlclB4KGEpe3RoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHg9ZDcoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9c2V0IGRhdGFSYW5nZShhKXthJiYodGhpcy5pdGVtcy5z''@;'; put 'put ''bWFydCYmdGhpcy5pdGVtcy5zbWFydGVuRG93bigpLHRoaXMudG90YWxJdGVtcz1hLnRvdGFsLHRoaXMudXBkYXRlRGF0YVJhbmdlKGEuc2tpcCxhLmRhdGEpKX1nZXQgdG90YWxJdGVtcygpe3JldHVybiB0aGlzLl90b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpe3RoaXMuX3RvdGFsSXRl''@;'; put 'put ''bXM9YX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluamVjdG9yLnJ1bkluQ29udGV4dCgoKT0+e3RoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0PXRoaXMuY3JlYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0Rm9yRGF0YWdyaWQodGhpcy5jaGFuZ2VEZXRlY3RvclJlZix0aGlzLm5nWm9uZSx0aGlz''@;'; put 'put ''LnJlbmRlcmVyMix0aGlzLmRpcmVjdGlvbmFsaXR5LHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcix0aGlzLnZpZXdwb3J0UnVsZXIsdGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWYsdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kpLHRoaXMuY2RrVmlydHVhbEZvcj1mdW5jdGlvbiBVWmUoYyxsLGEsZCxo''@;'; put 'put ''LGYpe2lmKCtOaWUubWFqb3I8MTkpcmV0dXJuIG5ldyBrTChjLGwsYSxkLGgsZik7e2NvbnN0IHY9RHMuY3JlYXRlKHtwYXJlbnQ6ZmkoaGMpLHByb3ZpZGVyczpbe3Byb3ZpZGU6RHksdXNlVmFsdWU6aH1dfSk7cmV0dXJuIERzLmNyZWF0ZSh7cGFyZW50OnYscHJvdmlkZXJzOlt7cHJvdmlk''@;'; put 'put ''ZTpEbyx1c2VWYWx1ZTpjfSx7cHJvdmlkZTpTbCx1c2VWYWx1ZTpsfSx7cHJvdmlkZTplbSx1c2VWYWx1ZTphfSx7cHJvdmlkZTpfWSx1c2VWYWx1ZTpkfSx7cHJvdmlkZTpXYSx1c2VWYWx1ZTpmfSx7cHJvdmlkZTprTCx1c2VDbGFzczprTH1dfSkuZ2V0KGtMKX19KHRoaXMudmlld0NvbnRh''@;'; put 'put ''aW5lclJlZix0aGlzLnRlbXBsYXRlUmVmLHRoaXMuaXRlcmFibGVEaWZmZXJzLHRoaXMudmlld1JlcGVhdGVyLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LHRoaXMubmdab25lKSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5uZ09uSW5pdCgpfSksdGhpcy5ncmlkUm9sZUVsZW1lbnQ9''@;'; put 'put ''dGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbcm9sZT0iZ3JpZCJdJyksdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5pdGVtcy5jaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLml0''@;'; put 'put ''ZW1zLnNtYXJ0JiYodGhpcy5jZGtWaXJ0dWFsRm9yLmNka1ZpcnR1YWxGb3JPZj1hKX0pLHRoaXMuY2RrVmlydHVhbEZvci5kYXRhU3RyZWFtLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGVBcmlhUm93Q291bnQoYS5sZW5ndGgpfSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xs''@;'; put 'put ''ZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudG9wSW5kZXg9YX0pLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW0uc3Vic2NyaWJlKGE9Pnt0aGlzLnJlbmRlcmVkUmFuZ2VDaGFuZ2UuZW1pdChhKX0pLHRoaXMuZGF0YWdyaWQucmVmcmVzaC5z''@;'; put 'put ''dWJzY3JpYmUoYT0+e2EuZmlsdGVycyYmdGhpcy5zY3JvbGxUb0luZGV4KDApfSksdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zU3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy52aWV3UmVwZWF0ZXIuZGV0YWNoKCl9KSl9bmdEb0NoZWNrKCl7dGhpcy5jZGtWaXJ0dWFsRm9yPy5u''@;'; put 'put ''Z0RvQ2hlY2soKSx0aGlzLnVwZGF0ZUFyaWFSb3dJbmRleGVzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNka1ZpcnR1YWxGb3I/Lm5nT25EZXN0cm95KCksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ/Lm5nT25EZXN0cm95KCksdGhpcy5tdXRhdGlvbkNoYW5nZXM/LmRpc2Nvbm5lY3QoKSx0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9c2Nyb2xsVXAoYSxkPSJhdXRvIil7dGhpcy5zY3JvbGxUb0luZGV4KHRoaXMudG9wSW5kZXgtYSxkKX1zY3JvbGxEb3duKGEsZD0iYXV0byIpe3RoaXMuc2Nyb2xsVG9JbmRleCh0aGlzLnRvcEluZGV4K2Es''@;'; put 'put ''ZCl9c2Nyb2xsVG9JbmRleChhLGQ9ImF1dG8iKXt0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydD8uc2Nyb2xsVG9JbmRleChhLGQpfXVwZGF0ZURhdGFSYW5nZShhLGQpe2xldCBoPXRoaXMuY2RrVmlydHVhbEZvck9mOyghdGhpcy5wZXJzaXN0SXRlbXN8fCFofHxoPy5sZW5ndGghPT10aGlz''@;'; put 'put ''LnRvdGFsSXRlbXMpJiYoaD1BcnJheSh0aGlzLnRvdGFsSXRlbXMpKSxoLnNwbGljZShhLGQubGVuZ3RoLC4uLmQpLHRoaXMuY2RrVmlydHVhbEZvck9mPUFycmF5LmZyb20oaCl9dXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpe2lmKHRoaXMuY2RrVmlydHVhbEZvcilmb3IoY29uc3QgYSBv''@;'; put 'put ''ZiBPYmplY3Qua2V5cyh0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMpKXRoaXMuY2RrVmlydHVhbEZvclthXSE9PXRoaXMuY2RrVmlydHVhbEZvcklucHV0c1thXSYmKHRoaXMuY2RrVmlydHVhbEZvclthXT10aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHNbYV0pfXVwZGF0ZUZpeGVkU2l6ZVZpcnR1''@;'; put 'put ''YWxTY3JvbGxJbnB1dHMoKXt0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneSYmdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kudXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZSx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0''@;'; put 'put ''dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4LHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHgpfXVwZGF0ZUFyaWFSb3dDb3VudChhKXt0aGlzLmdyaWRSb2xlRWxlbWVudD8uc2V0QXR0cmlidXRlKCJhcmlhLXJvd2NvdW50IixhLnRvU3RyaW5nKCkp''@;'; put 'put ''fXVwZGF0ZUFyaWFSb3dJbmRleGVzKCl7Zm9yKGxldCBhPTA7YTx0aGlzLnZpZXdDb250YWluZXJSZWYubGVuZ3RoO2ErKyl7Y29uc3QgZD10aGlzLnZpZXdDb250YWluZXJSZWYuZ2V0KGEpO2Qucm9vdE5vZGVzLmZpbmQoTT0+IkNMUi1ERy1ST1ciPT09TS50YWdOYW1lKT8ucXVlcnlTZWxl''@;'; put 'put ''Y3RvcignW3JvbGU9InJvdyJdJyk/LnNldEF0dHJpYnV0ZSgiYXJpYS1yb3dpbmRleCIsKGQuY29udGV4dC5pbmRleCsxKS50b1N0cmluZygpKX19Y3JlYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0Rm9yRGF0YWdyaWQoYSxkLGgsZix2LE0sRCxaKXtjb25zdCByZT1ELm5hdGl2ZUVsZW1lbnQu''@;'; put 'put ''cXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIiksY2U9RC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC10YWJsZSIpLGJlPUQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtcm93cyIpO2xldCBCZT0wLHFlPTA7ZnVuY3Rpb24gcnQoKXtiZS5zdHls''@;'; put 'put ''ZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVkoJHtCZX1weClgLGJlLnN0eWxlLmhlaWdodD1xZS1CZSsicHgifWNvbnN0IHB0PWZ1bmN0aW9uIHpaZShjLGwsYSxkLGgsZix2LE0sRCl7cmV0dXJuK05pZS5tYWpvcjwxOT9uZXcgRHkoYyxsLGEsaCxmLHYsTSxEKTpEcy5jcmVhdGUoe3BhcmVudDpm''@;'; put 'put ''aShoYykscHJvdmlkZXJzOlt7cHJvdmlkZTpKaSx1c2VWYWx1ZTpjfSx7cHJvdmlkZTpFcyx1c2VWYWx1ZTpsfSx7cHJvdmlkZTpXYSx1c2VWYWx1ZTphfSx7cHJvdmlkZTpFbyx1c2VWYWx1ZTpkfSx7cHJvdmlkZTpXMGUsdXNlVmFsdWU6aH0se3Byb3ZpZGU6cG0sdXNlVmFsdWU6Zn0se3By''@;'; put 'put ''b3ZpZGU6a3ksdXNlVmFsdWU6dn0se3Byb3ZpZGU6QUwsdXNlVmFsdWU6TX0se3Byb3ZpZGU6JDBlLHVzZVZhbHVlOkR9LHtwcm92aWRlOkR5LHVzZUNsYXNzOkR5fV19KS5nZXQoRHkpfSh7bmF0aXZlRWxlbWVudDpyZX0sYSxkLGgsWixmLHYsTSxudWxsKTtyZXR1cm4gcHQuX2NvbnRlbnRX''@;'; put 'put ''cmFwcGVyPXtuYXRpdmVFbGVtZW50OntzdHlsZTp7c2V0IHRyYW5zZm9ybShkdCl7QmU9dm9pZCAwPT09ZHQ/MDorL3RyYW5zbGF0ZVlcKChbMC05XSspcHhcKS8uZXhlYyhkdCk/LlsxXSxydCgpfX19fSxwdC5zZXRUb3RhbENvbnRlbnRTaXplPWR0PT57cWU9ZHQsY2Uuc3R5bGUuaGVpZ2h0''@;'; put 'put ''PWAke3FlfXB4YCxydCgpfSxwdH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKGVtKSxHZShkZyksR2UoV2EpLEdlKEVvKSxHZShTbCksR2UoRG8pLEdlKHBtKSxHZShreSksR2UoQUwpLEdlKENzKCgpPT5BbSkpLEdlKGhnKSxHZSho''@;'; put 'put ''YykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJWaXJ0dWFsU2Nyb2xsIiwiIl0sWyIiLCJDbHJWaXJ0dWFsU2Nyb2xsIiwiIl1dLGlucHV0czp7cGVyc2lzdEl0ZW1zOltObi5Ob25lLCJjbHJWaXJ0dWFsUGVyc2lzdEl0ZW1zIiwicGVyc2lzdEl0ZW1zIl0s''@;'; put 'put ''Y2RrVmlydHVhbEZvck9mOltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c09mIiwiY2RrVmlydHVhbEZvck9mIl0sY2RrVmlydHVhbEZvclRyYWNrQnk6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzVHJhY2tCeSIsImNka1ZpcnR1YWxGb3JUcmFja0J5Il0sY2RrVmlydHVhbEZvclRlbXBsYXRlOltO''@;'; put 'put ''bi5Ob25lLCJjbHJWaXJ0dWFsUm93c1RlbXBsYXRlIiwiY2RrVmlydHVhbEZvclRlbXBsYXRlIl0sY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplOltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c1RlbXBsYXRlQ2FjaGVTaXplIiwiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIl0s''@;'; put 'put ''aXRlbVNpemU6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzSXRlbVNpemUiLCJpdGVtU2l6ZSJdLG1pbkJ1ZmZlclB4OltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c01pbkJ1ZmZlclB4IiwibWluQnVmZmVyUHgiXSxtYXhCdWZmZXJQeDpbTm4uTm9uZSwiY2xyVmlydHVhbFJvd3NNYXhCdWZmZXJQ''@;'; put 'put ''eCIsIm1heEJ1ZmZlclB4Il0sZGF0YVJhbmdlOltObi5Ob25lLCJjbHJWaXJ0dWFsRGF0YVJhbmdlIiwiZGF0YVJhbmdlIl19LG91dHB1dHM6e3JlbmRlcmVkUmFuZ2VDaGFuZ2U6InJlbmRlcmVkUmFuZ2VDaGFuZ2UifSxmZWF0dXJlczpbZGEoW2RnXSldfSksY30pKCksTGRlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5maWx0ZXJzPWEsdGhpcy5zb3J0PWQsdGhpcy5wYWdlPWgsdGhpcy5kZWJvdW5jZXI9Zix0aGlzLmNoYW5nZT10aGlzLmRlYm91bmNlci5jaGFuZ2UucGlwZShMcigoKT0+dGhpcy5zdGF0ZSkpfWdldCBzdGF0ZSgpe2NvbnN0IGE9e307''@;'; put 'put ''dGhpcy5wYWdlLnNpemU+MCYmKGEucGFnZT17ZnJvbTp0aGlzLnBhZ2UuZmlyc3RJdGVtLHRvOnRoaXMucGFnZS5sYXN0SXRlbSxzaXplOnRoaXMucGFnZS5zaXplLGN1cnJlbnQ6dGhpcy5wYWdlLmN1cnJlbnR9KSx0aGlzLnNvcnQuY29tcGFyYXRvciYmKGEuc29ydD10aGlzLnNvcnQuY29t''@;'; put 'put ''cGFyYXRvciBpbnN0YW5jZW9mIG9PP3tieTp0aGlzLnNvcnQuY29tcGFyYXRvci5wcm9wLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9OntieTp0aGlzLnNvcnQuY29tcGFyYXRvcixyZXZlcnNlOnRoaXMuc29ydC5yZXZlcnNlfSk7Y29uc3QgZD10aGlzLmZpbHRlcnMuZ2V0QWN0aXZlRmls''@;'; put 'put ''dGVycygpO2lmKGQubGVuZ3RoPjApe2EuZmlsdGVycz1bXTtmb3IoY29uc3QgaCBvZiBkKWEuZmlsdGVycy5wdXNoKGguc3RhdGU/aC5zdGF0ZTpoKX1yZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIodWcpLHhyKHNPKSx4cihNbSks''@;'; put 'put ''eHIoR3gpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxUbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5z''@;'; put 'put ''ZXRDZWxsc1N0YXRlKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Q2VsbHNTdGF0ZSgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRDZWxs''@;'; put 'put ''c1N0YXRlKCl7dGhpcy5jZWxscy5sZW5ndGg9PT10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoJiZ0aGlzLmNlbGxzLmZvckVhY2goKGEsZCk9Pnt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbZF0mJmEucmVzZXRTdGF0ZSh0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNb''@;'; put 'put ''ZF0udmFsdWUpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGhnKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1yb3ciXSxbImNsci1kZy1yb3ctZGV0YWlsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9u''@;'; put 'put ''KGEsZCxoKXtpZigxJmEmJihhbyhoLGMsNSksYW8oaCxTcCw0KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5leHBhbmRhYmxlUm93PWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNlbGxzPWYpfX19KSxjfSkoKSxBbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQs''@;'; put 'put ''WixyZSxjZSxiZSxFZSxCZSxxZSxydCl7dGhpcy5vcmdhbml6ZXI9YSx0aGlzLml0ZW1zPWQsdGhpcy5leHBhbmRhYmxlUm93cz1oLHRoaXMuc2VsZWN0aW9uPWYsdGhpcy5yb3dBY3Rpb25TZXJ2aWNlPXYsdGhpcy5zdGF0ZVByb3ZpZGVyPU0sdGhpcy5kaXNwbGF5TW9kZT1ELHRoaXMucmVu''@;'; put 'put ''ZGVyZXI9Wix0aGlzLmRldGFpbFNlcnZpY2U9cmUsdGhpcy5kb2N1bWVudD1jZSx0aGlzLmVsPWJlLHRoaXMucGFnZT1FZSx0aGlzLmNvbW1vblN0cmluZ3M9QmUsdGhpcy5rZXlOYXZpZ2F0aW9uPXFlLHRoaXMuem9uZT1ydCx0aGlzLmNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsPXRo''@;'; put 'put ''aXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCx0aGlzLmNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJl''@;'; put 'put ''bD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzPSExLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5zaW5nbGVTZWxlY3RlZENoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLnJlZnJlc2g9''@;'; put 'put ''bmV3IEtyKCExKSx0aGlzLmN1c3RvbVNlbGVjdEFsbEVuYWJsZWQ9ITEsdGhpcy5jdXN0b21TZWxlY3RBbGw9bmV3IEtyLHRoaXMuU0VMRUNUSU9OX1RZUEU9cGwsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBwdD1NdSgpO3RoaXMuc2VsZWN0QWxsSWQ9ImNsci1kZy1zZWxlY3QtYWxs''@;'; put 'put ''LSIrcHQscmUuaWQ9cHR9Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5pdGVtcy5sb2FkaW5nfXNldCBsb2FkaW5nKGEpe3RoaXMuaXRlbXMubG9hZGluZz1hfXNldCBzZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPWE/cGwuTXVsdGk6cGwuTm9uZSx0aGlzLnNlbGVj''@;'; put 'put ''dGlvbi51cGRhdGVDdXJyZW50KGEsITEpfXNldCBzaW5nbGVTZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPXBsLlNpbmdsZSxhP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9YTp0aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlJiYodGhpcy5zZWxlY3Rpb24u''@;'; put 'put ''Y3VycmVudFNpbmdsZT1udWxsKX1zZXQgY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbihhKXt0aGlzLnNlbGVjdGlvbi5wcmVzZXJ2ZVNlbGVjdGlvbj1hfXNldCByb3dTZWxlY3Rpb25Nb2RlKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGU9YX1zZXQgdHJhY2tCeShhKXt0aGlzLml0''@;'; put 'put ''ZW1zLnRyYWNrQnk9YX1nZXQgYWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNBbGxTZWxlY3RlZCgpfXNldCBhbGxTZWxlY3RlZChhKXt0aGlzLmN1c3RvbVNlbGVjdEFsbEVuYWJsZWQ/dGhpcy5jdXN0b21TZWxlY3RBbGwuZW1pdChhKTp0aGlzLnNlbGVjdGlvbi50b2dn''@;'; put 'put ''bGVBbGwoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9dGhpcy5yb3dzLm1hcChkPT5kLml0ZW0pKTtjb25zdCBhPXRoaXMucm93cy5jaGFuZ2VzLnBpcGUoVjEoZD0+X3goZm8oZC5tYXAoaD0+aC5pdGVtKSkscTgoZC5tYXAoaD0+aC5p''@;'; put 'put ''dGVtQ2hhbmdlcykpLnBpcGUoZm0oMCkpKSkpO3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPWQpfSksdGhpcy5yb3dzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXll''@;'; put 'put ''ZFJvd3MubGVuZ3RoLTE7ZD49MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5nZXQoZCkuZGVzdHJveWVkJiZ0aGlzLl9kaXNwbGF5ZWRSb3dzLnJlbW92ZShkKTtpZih0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93cy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnVwZGF0''@;'; put 'put ''ZURldGFpbFN0YXRlKCksdGhpcy52aXJ0dWFsU2Nyb2xsKXtjb25zdCBkPXRoaXMua2V5TmF2aWdhdGlvbi5nZXRBY3RpdmVDZWxsKCk7ZCYmdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+dGhpcy5rZXlOYXZpZ2F0aW9uLnNldEFjdGl2ZUNlbGwoZCkp''@;'; put 'put ''fSl9fSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMua2V5TmF2aWdhdGlvbi5pbml0aWFsaXplS2V5R3JpZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLHRoaXMudXBkYXRlRGV0YWlsU3RhdGUoKSx0aGlzLnJlZnJlc2guZW1pdCh0aGlzLnN0YXRlUHJvdmlkZXIuc3RhdGUpLHRoaXMuX3N1YnNj''@;'; put 'put ''cmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlUHJvdmlkZXIuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnJlZnJlc2guZW1pdChhKSksdGhpcy5zZWxlY3Rpb24uY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXBsLlNpbmdsZT90aGlzLnNpbmdsZVNl''@;'; put 'put ''bGVjdGVkQ2hhbmdlZC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1wbC5NdWx0aSYmdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKX0pLHRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpLHRoaXMu''@;'; put 'put ''Y2xyRGdEaXNhYmxlUGFnZUZvY3VzfHx0aGlzLmRhdGFncmlkVGFibGUubmF0aXZlRWxlbWVudC5mb2N1cygpfSksdGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1YnNjcmliZShhPT57Zm9yKGxldCBkPXRoaXMuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3By''@;'; put 'put ''b2plY3RlZERpc3BsYXlDb2x1bW5zLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9jYWxjdWxhdGlvblJvd3Mu''@;'; put 'put ''bGVuZ3RoO2Q+MDtkLS0pdGhpcy5fY2FsY3VsYXRpb25Sb3dzLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9kaXNwbGF5ZWRSb3dzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX2Rpc3BsYXllZFJvd3MuZGV0YWNoKCk7YT09PVF5LkRJU1BMQVk/KHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhp''@;'; put 'put ''cy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSIpLHRoaXMuY29sdW1ucy5mb3JFYWNoKGQ9Pnt0aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93cy5pbnNl''@;'; put 'put ''cnQoZC5fdmlldyl9KSk6KHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSIpLHRoaXMuY29sdW1ucy5mb3JFYWNoKGQ9Pnt0aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSks''@;'; put 'put ''dGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMuX2NhbGN1bGF0aW9uUm93cy5pbnNlcnQoZC5fdmlldyl9KSl9KSksdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHhkKHRoaXMuZG9jdW1lbnQuYm9keSwia2V5ZG93biIpLnN1YnNjcmli''@;'; put 'put ''ZShhPT57IlNoaWZ0Ij09PWEua2V5JiYodGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkPSEwKX0pLHhkKHRoaXMuZG9jdW1lbnQuYm9keSwia2V5dXAiKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1hLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMSl9KSl9KX1uZ09uRGVz''@;'; put 'put ''dHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXRvZ2dsZUFsbFNlbGVjdGVkKGEpe2EucHJldmVudERlZmF1bHQoKSx0aGlzLnNlbGVjdEFsbENoZWNrYm94Py5uYXRpdmVFbGVtZW50LmNsaWNrKCl9cmVzaXplKCl7dGhpcy5vcmdhbml6ZXIu''@;'; put 'put ''cmVzaXplKCl9dXBkYXRlRGV0YWlsU3RhdGUoKXtpZih0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUmJnRoaXMuZGV0YWlsU2VydmljZS5pc09wZW4pe2NvbnN0IGE9dGhpcy5yb3dzLmZpbmQoZD0+dGhpcy5pdGVtcy50cmFja0J5KGQuaXRlbSk9PT10aGlzLml0ZW1zLnRyYWNrQnkodGhpcy5k''@;'; put 'put ''ZXRhaWxTZXJ2aWNlLnN0YXRlKSk7YT90aGlzLmRldGFpbFNlcnZpY2Uub3BlbihhLml0ZW0sYS5kZXRhaWxCdXR0b24ubmF0aXZlRWxlbWVudCk6dGhpcy52aXJ0dWFsU2Nyb2xsfHxzZXRUaW1lb3V0KCgpPT57dGhpcy5kZXRhaWxTZXJ2aWNlLmNsb3NlKCl9KX19ZGF0YUNoYW5nZWQoKXt0''@;'; put 'put ''aGlzLml0ZW1zLnJlZnJlc2goKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSTcpLEdlKGRnKSxHZShxeSksR2UoZV8pLEdlKEt5KSxHZShMZGUpLEdlKGJHKSxHZShFbyksR2UoWGYpLEdlKHZzKSxHZShKaSksR2UoTW0pLEdlKGlzKSxHZShy''@;'; put 'put ''TyksR2UoV2EpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLFJkZSw1KSxhbyhoLEp5LDUpLGFvKGgsZ0csNSksYW8oaCxSNyw0KSxhbyhoLEVtLDQpKSwyJmEp''@;'; put 'put ''e2xldCBmO0NpKGY9U2koKSkmJihkLnZpcnR1YWxTY3JvbGw9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuaXRlcmF0b3I9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQucGxhY2Vob2xkZXI9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY29sdW1ucz1mKSxDaShmPVNpKCkpJiYoZC5yb3dzPWYpfX0s''@;'; put 'put ''dmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoQkJlLDUsSmkpLHFhKGpCZSw1LEppKSxxYSh6QmUsNSxEbykscWEoVUJlLDUsRG8pLHFhKFpCZSw1LERvKSxxYShXQmUsNSxEbykscWEoWUJlLDUsRG8pLHFhKEdCZSw1KSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5kYXRh''@;'; put 'put ''Z3JpZD1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5kYXRhZ3JpZFRhYmxlPWguZmlyc3QpLENpKGg9U2koKSkmJihkLnNjcm9sbGFibGVDb2x1bW5zPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5fcHJvamVj''@;'; put 'put ''dGVkQ2FsY3VsYXRpb25Db2x1bW5zPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9kaXNwbGF5ZWRSb3dzPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9jYWxjdWxhdGlvblJvd3M9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuc2VsZWN0QWxsQ2hlY2tib3g9aC5maXJzdCl9fSxob3N0VmFyczo0''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGFncmlkLWhvc3QiLCEwKSgiZGF0YWdyaWQtZGV0YWlsLW9wZW4iLGQuZGV0YWlsU2VydmljZS5pc09wZW4pfSxpbnB1dHM6e2xvYWRpbmdNb3JlSXRlbXM6W05uLk5vbmUsImNsckxvYWRpbmdNb3JlSXRlbXMiLCJsb2Fk''@;'; put 'put ''aW5nTW9yZUl0ZW1zIl0sY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6ImNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsIixjbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWw6ImNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbCIsY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFM''@;'; put 'put ''YWJlbDoiY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCIsY2xyRGdEaXNhYmxlUGFnZUZvY3VzOiJjbHJEZ0Rpc2FibGVQYWdlRm9jdXMiLGN1c3RvbVNlbGVjdEFsbEVuYWJsZWQ6W05uLk5vbmUsImNsckRnQ3VzdG9tU2VsZWN0QWxsRW5hYmxlZCIsImN1c3RvbVNlbGVjdEFsbEVuYWJs''@;'; put 'put ''ZWQiXSxsb2FkaW5nOltObi5Ob25lLCJjbHJEZ0xvYWRpbmciLCJsb2FkaW5nIl0sc2VsZWN0ZWQ6W05uLk5vbmUsImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLHNpbmdsZVNlbGVjdGVkOltObi5Ob25lLCJjbHJEZ1NpbmdsZVNlbGVjdGVkIiwic2luZ2xlU2VsZWN0ZWQiXSxjbHJEZ1By''@;'; put 'put ''ZXNlcnZlU2VsZWN0aW9uOiJjbHJEZ1ByZXNlcnZlU2VsZWN0aW9uIixyb3dTZWxlY3Rpb25Nb2RlOltObi5Ob25lLCJjbHJEZ1Jvd1NlbGVjdGlvbiIsInJvd1NlbGVjdGlvbk1vZGUiXSx0cmFja0J5OltObi5Ob25lLCJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX0sb3V0cHV0czp7''@;'; put 'put ''c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixzaW5nbGVTZWxlY3RlZENoYW5nZWQ6ImNsckRnU2luZ2xlU2VsZWN0ZWRDaGFuZ2UiLHJlZnJlc2g6ImNsckRnUmVmcmVzaCIsY3VzdG9tU2VsZWN0QWxsOiJjbHJEZ0N1c3RvbVNlbGVjdEFsbCJ9LGZlYXR1cmVzOltkYShb''@;'; put 'put ''ZV8sc08sdWcsTW0sZGcsSTcsS3kscXksR3gsWGYsTGRlLHBHLGhnLGJHLHJPXSldLG5nQ29udGVudFNlbGVjdG9yczpLQmUsZGVjbHM6MzUsdmFyczo5LGNvbnN0czpbWyJkYXRhZ3JpZCIsIiJdLFsiZGF0YWdyaWRUYWJsZSIsIiJdLFsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiLCIiXSxb''@;'; put 'put ''ImRpc3BsYXllZFJvd3MiLCIiXSxbInByb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucyIsIiJdLFsiY2FsY3VsYXRpb25Sb3dzIiwiIl0sWyJzZWxlY3RBbGxDaGVja2JveCIsIiJdLFsxLCJkYXRhZ3JpZC1vdXRlci13cmFwcGVyIl0sWzEsImRhdGFncmlkLWlubmVyLXdyYXBwZXIiXSxbMSwi''@;'; put 'put ''ZGF0YWdyaWQiXSxbMSwiZGF0YWdyaWQtdGFibGUtd3JhcHBlciJdLFsicm9sZSIsImdyaWQiLCJ0YWJpbmRleCIsIi0xIiwxLCJkYXRhZ3JpZC10YWJsZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJkYXRhZ3JpZC1oZWFkZXIiXSxbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXJvdyJdLFsx''@;'; put 'put ''LCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDMsImtleWRv''@;'; put 'put ''d24uc3BhY2UiLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4g''@;'; put 'put ''ZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbMSwi''@;'; put 'put ''ZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsImRhdGFncmlkLXJvd3MiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWxvYWRpbmciLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zcGlubmVyIiw0LCJuZ0lmIl0sWzEsImRh''@;'; put 'put ''dGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlciJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwzLCJrZXlkb3duLnNwYWNlIl0s''@;'; put 'put ''WyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJpZCIsIm5nTW9k''@;'; put 'put ''ZWwiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsxLCJjbHItc3Itb25seSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWyJyb2xlIiwi''@;'; put 'put ''Y29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCIsImRhdGFncmlkLWZp''@;'; put 'put ''eGVkLWNvbHVtbiJdLFsxLCJkYXRhZ3JpZC1yb3ctbG9hZGluZyJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsImRhdGFncmlkLXNwaW5uZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgkQmUpLFlyKDApLGRlKDEsImRpdiIsNykoMiwiZGl2Iiw4KSgzLCJkaXYiLDksMCkoNSwi''@;'; put 'put ''ZGl2IiwxMCkoNiwiZGl2IiwxMSwxKSg4LCJkaXYiLDEyKSg5LCJkaXYiLDEzKSgxMCwiZGl2IiwxNCkoMTEsImRpdiIsMTUpLGd0KDEyLFhCZSwzLDEsImRpdiIsMTYpKDEzLEpCZSw0LDEsImRpdiIsMTcpKDE0LFFCZSw0LDEsImRpdiIsMTgpKDE1LGVqZSw0LDEsImRpdiIsMTkpLGhlKCks''@;'; put 'put ''ZGUoMTYsImRpdiIsMjApLEZsKDE3LG51bGwsMiksaGUoKSgpKCkoKSxkZSgxOSwiZGl2IiwyMSksZ3QoMjAsdGplLDUsMSwiY2xyLWRnLXJvdyIsMjIpLEZsKDIxLG51bGwsMyksZ3QoMjMsbmplLDUsMSwiY2xyLWRnLXJvdyIsMjIpLFlyKDI0LDEpLGd0KDI1LHJqZSwxLDAsImNsci1kZy1w''@;'; put 'put ''bGFjZWhvbGRlciIsMjMpLGhlKCkoKSgpKCksWXIoMjYsMiksZ3QoMjcsaWplLDMsMCwiZGl2IiwyNCksaGUoKSxZcigyOCwzKSxoZSgpLGRlKDI5LCJkaXYiLDI1KSgzMCwiZGl2IiwyNiksRmwoMzEsbnVsbCw0KSxoZSgpLEZsKDMzLG51bGwsNSksaGUoKSksMiZhJiYoZmUoMyksaHIoImFy''@;'; put 'put ''aWEtaGlkZGVuIiwhIWQuZGV0YWlsU2VydmljZS5pc09wZW58fG51bGwpLGZlKDkpLE1lKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5NdWx0aSksZmUoKSxNZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9O''@;'; put 'put ''X1RZUEUuU2luZ2xlKSxmZSgpLE1lKCJuZ0lmIixkLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksZmUoKSxNZSgibmdJZiIsZC5leHBhbmRhYmxlUm93cy5oYXNFeHBhbmRhYmxlUm93fHxkLmRldGFpbFNlcnZpY2UuZW5hYmxlZCksZmUoNSksTWUoIm5nSWYiLGQubG9hZGlu''@;'; put 'put ''Z01vcmVJdGVtcyksZmUoMyksTWUoIm5nSWYiLGQubG9hZGluZ01vcmVJdGVtcyksZmUoMiksTWUoIm5nSWYiLCFkLnBsYWNlaG9sZGVyKSxmZSgyKSxNZSgibmdJZiIsZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbYmEsZHMsTWQsbmwsJHMsUmQsUWYsZ0csRW0seUcsU3AsVG0sazcsRDdd''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IEdaZT1jPT5jO2xldCBPZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuY29sdW1uc1NlcnZpY2U9ZCx0aGlzLmFsbFNlbGVjdGVkPW5ldyBLcn1nZXQgY2xyQWxsU2VsZWN0ZWQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoYT0+YS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RBbGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1u''@;'; put 'put ''cygpLmZvckVhY2goYT0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7aGlkZGVuOiExLGNoYW5nZXM6W1cxLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5z''@;'; put 'put ''LmZpbHRlcihhPT5hLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaXMpLEdlKGhnKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdXSxvdXRw''@;'; put 'put ''dXRzOntjbHJBbGxTZWxlY3RlZDoiY2xyQWxsU2VsZWN0ZWQifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJzd2l0Y2gtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VsZWN0QWxsKCl9KSxMZSgxKSxoZSgpKSwyJmEmJihNZSgiZGlzYWJsZWQiLGQuYWxsSGlkZWFibGVzVmlzaWJsZSksZmUoKSxEcigiICIsZC5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0''@;'; put 'put ''QWxsLCIgIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxQZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMucG9wb3ZlcklkPU11KCksdGhpcy5vcGVuU3RhdGU9ITEsdGhpcy5zbWFydFBv''@;'; put 'put ''c2l0aW9uPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50Ok9zLlNUQVJUfSx0aGlzLnRyYWNrQnlGbj1HWmUsdGhpcy5zdWJzY3JpcHRpb249aC5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT50aGlzLm9wZW5TdGF0ZT1mKX1nZXQgYWxsQ29s''@;'; put 'put ''dW1uc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5fYWxsQ29sdW1uc1Zpc2libGV9c2V0IGFsbENvbHVtbnNWaXNpYmxlKGEpe3RoaXMuX2FsbENvbHVtbnNWaXNpYmxlPWF9Z2V0IGhpZGVhYmxlQ29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIo''@;'; put 'put ''ZD0+ZC52YWx1ZS5oaWRlYWJsZSkubWFwKGQ9PmQudmFsdWUpfWdldCBoYXNPbmx5T25lVmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoLXRoaXMuaGlkZWFibGVDb2x1bW5TdGF0ZXMubGVuZ3RoPT0wJiYxPT09dGhpcy5oaWRlYWJsZUNv''@;'; put 'put ''bHVtblN0YXRlcy5maWx0ZXIoZD0+IWQuaGlkZGVuKS5sZW5ndGh9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXRvZ2dsZUNvbHVtblN0YXRlKGEsZCl7Y29uc3QgaD10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGY9PmYudmFsdWU9PT1h''@;'; put 'put ''KVswXTt0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZShoLHtoaWRkZW46ZCxjaGFuZ2VzOltXMS5ISURERU5dfSl9dG9nZ2xlU3dpdGNoUGFuZWwoKXt0aGlzLm9wZW5TdGF0ZT0hdGhpcy5vcGVuU3RhdGV9YWxsQ29sdW1uc1NlbGVjdGVkKCl7dGhpcy5hbGxTZWxlY3RlZEVs''@;'; put 'put ''ZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcyksR2UoaGcpLEdlKHNjKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlIl1dLHZpZXdR''@;'; put 'put ''dWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEob2plLDUsSmkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuYWxsU2VsZWN0ZWRFbGVtZW50PWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjb2x1bW4tc3dpdGNoLXdyYXBwZXIi''@;'; put 'put ''LCEwKSgiYWN0aXZlIixkLm9wZW5TdGF0ZSl9LGZlYXR1cmVzOlt2ZChbb2ddKV0sZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbImFsbFNlbGVjdGVkIiwiIl0sWyJyb2xlIiwiYnV0dG9uIiwidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3IiLCIiLCJjbHJQb3BvdmVyT3BlbkNsb3Nl''@;'; put 'put ''QnV0dG9uIiwiIiwxLCJidG4iLCJidG4tc20iLCJjb2x1bW4tdG9nZ2xlLS1hY3Rpb24iXSxbImNsYXNzIiwiY29sdW1uLXN3aXRjaCIsInJvbGUiLCJkaWFsb2ciLCJjZGtUcmFwRm9jdXMiLCIiLDMsImlkIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJj''@;'; put 'put ''bHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbInJvbGUiLCJkaWFsb2ciLCJjZGtUcmFwRm9jdXMiLCIiLDEsImNvbHVtbi1zd2l0Y2giLDMsImlkIl0sWzEsInN3aXRjaC1oZWFkZXIiXSxbInRhYmluZGV4Iiwi''@;'; put 'put ''LTEiLDEsImNsci1zci1vbmx5Il0sWyJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsInRvZ2dsZS1zd2l0Y2gtY2xvc2UtYnV0dG9uIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSIsImFyaWEtaGlkZGVuIiwidHJ1''@;'; put 'put ''ZSJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJzd2l0Y2gtY29udGVudCIsImxpc3QtdW5zdHlsZWQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsInN3aXRjaC1mb290ZXIiXSxbMywiY2xyQWxsU2VsZWN0ZWQiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNo''@;'; put 'put ''ZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDEpLExlKDEpLGhlKCksZ3QoMixjamUsMTUsOSwiZGl2IiwyKSksMiZhJiYoaHIoImFy''@;'; put 'put ''aWEtY29udHJvbHMiLGQucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVuU3RhdGUpKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpLGZlKCksRHIoIiAiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnBpY2tDb2x1bW5zLCIgIiksZmUoKSxNZSgiY2xyUG9wb3ZlckNvbnRlbnQiLGQub3BlblN0''@;'; put 'put ''YXRlKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVzOltucyxOMSxaeSxycyxkcyxJZCxTaCxNZCxu''@;'; put 'put ''bCwkcyxQeCxMMWUsTngsSHgsT2RlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxIZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQ9YSxhJiZhLnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRo''@;'; put 'put ''aXMuZXhwYW5kYWJsZVJvd3NDb3VudC51bnJlZ2lzdGVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHF5LDgpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXX0pLGN9KSgpLGNP''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZpY2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT1wbH1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlXyksR2UoWGYpLEdlKGhnKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt''@;'; put 'put ''ZGctZm9vdGVyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtZm9vdGVyIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpoamUsZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItZm9ybS1jb250cm9sLWRpc2Fi''@;'; put 'put ''bGVkIl0sWzEsImRhdGFncmlkLWZvb3Rlci1zZWxlY3QiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiY2hlY2tlZCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIiJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJkYXRhZ3JpZC1mb290ZXItZGVzY3JpcHRpb24iXV0sdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShkamUpLGd0KDAsZmplLDgsMiwibmctY29udGFpbmVyIiwwKSgxLGdqZSw0LDEsIm5nLWNvbnRhaW5lciIsMCksWXIoMikpLDImYSYmKE1lKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5NdWx0aSYm''@;'; put 'put ''ZC5zZWxlY3Rpb24uY3VycmVudC5sZW5ndGg+MCksZmUoKSxNZSgibmdJZiIsIWQuZGV0YWlsU2VydmljZS5pc09wZW4pKX0sZGVwZW5kZW5jaWVzOltiYSxkcyxJZCxTaCxQZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IF9HPW5ldyBTdCgiQ09MVU1OX1NUQVRFIiksWFplPXtw''@;'; put 'put ''cm92aWRlOl9HLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gcVplKCl7cmV0dXJuIG5ldyBlaSh7Y2hhbmdlczpbXX0pfX07bGV0IFh4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wYWdlPWEsdGhpcy5wYWdlU2l6ZU9wdGlvbnNJZD1NdSgpfW5nT25Jbml0KCl7KCF0aGlzLnBhZ2VT''@;'; put 'put ''aXplT3B0aW9uc3x8MD09PXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCkmJih0aGlzLnBhZ2VTaXplT3B0aW9ucz1bdGhpcy5wYWdlLnNpemVdKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoTW0pKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2Utc2l6ZSJdXSxpbnB1dHM6e3BhZ2VTaXplT3B0aW9uczpbTm4uTm9uZSwiY2xyUGFnZVNpemVPcHRpb25zIiwicGFnZVNpemVPcHRpb25zIl0scGFnZVNpemVPcHRpb25zSWQ6W05uLk5vbmUsImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNp''@;'; put 'put ''emVPcHRpb25zSWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjUsdmFyczo2LGNvbnN0czpbWzMsImZvciJdLFsxLCJjbHItc2VsZWN0LXdyYXBwZXIiXSxbMywibmdNb2RlbENoYW5nZSIsImlkIiwibmdNb2RlbCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb''@;'; put 'put ''MywibmdWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwibGFiZWwiLDApLFlyKDEpLGhlKCksZGUoMiwiZGl2IiwxKSgzLCJzZWxlY3QiLDIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gbWkoZC5wYWdlLnNpemUsZil8fChkLnBh''@;'; put 'put ''Z2Uuc2l6ZT1mKSxmfSksZ3QoNCxtamUsMiwyLCJvcHRpb24iLDMpLGhlKCkoKSksMiZhJiYoTWUoImZvciIsZC5wYWdlU2l6ZU9wdGlvbnNJZCksZmUoMyksVHIoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCksTWUoImlkIixkLnBhZ2VTaXplT3B0aW9uc0lkKSxwaSgibmdNb2RlbCIsZC5w''@;'; put 'put ''YWdlLnNpemUpLGZlKCksTWUoIm5nRm9yT2YiLGQucGFnZVNpemVPcHRpb25zKSl9LGRlcGVuZGVuY2llczpbbnMsZHMsQTIsazIsVDIsbmwsJHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHVPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucGFnZT1hLHRoaXMuY29t''@;'; put 'put ''bW9uU3RyaW5ncz1kLHRoaXMuZGV0YWlsU2VydmljZT1oLHRoaXMuY3VycmVudENoYW5nZWQ9bmV3IEtyKCExKSxhLmFjdGl2YXRlZD0hMH1nZXQgcGFnZVNpemUoKXtyZXR1cm4gdGhpcy5wYWdlLnNpemV9c2V0IHBhZ2VTaXplKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5z''@;'; put 'put ''aXplPWEpfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMucGFnZS50b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS50b3RhbEl0ZW1zPWEpfWdldCBsYXN0UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdH1zZXQgbGFzdFBhZ2Uo''@;'; put 'put ''YSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLmxhc3Q9YSl9Z2V0IGN1cnJlbnRQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50fXNldCBjdXJyZW50UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UuY3VycmVudD1hKX1nZXQgZmlyc3RJdGVtKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMucGFnZS5maXJzdEl0ZW19Z2V0IGxhc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0SXRlbX1nZXQgbWlkZGxlUGFnZXMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnBhZ2UuY3VycmVudD4xJiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQtMSksYS5wdXNoKHRoaXMucGFn''@;'; put 'put ''ZS5jdXJyZW50KSx0aGlzLnBhZ2UuY3VycmVudDx0aGlzLnBhZ2UubGFzdCYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KzEpLGF9bmdPbkluaXQoKXt0aGlzLnBhZ2Uuc2l6ZXx8KHRoaXMucGFnZS5zaXplPTEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uPXRoaXMucGFnZS5jaGFuZ2Uuc3Vi''@;'; put 'put ''c2NyaWJlKGE9PnRoaXMuY3VycmVudENoYW5nZWQuZW1pdChhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnBhZ2UucmVzZXRQYWdlU2l6ZSghMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbiYmdGhpcy5fcGFnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByZXZpb3VzKCl7dGhpcy5wYWdlLnBy''@;'; put 'put ''ZXZpb3VzKCl9bmV4dCgpe3RoaXMucGFnZS5uZXh0KCl9dmVyaWZ5Q3VycmVudFBhZ2UoYSl7cGFyc2VJbnQoYS50YXJnZXQudmFsdWUsMTApIT09dGhpcy5wYWdlLmN1cnJlbnQmJihhLnRhcmdldC52YWx1ZT10aGlzLnBhZ2UuY3VycmVudCl9dXBkYXRlQ3VycmVudFBhZ2UoYSl7Y29uc3Qg''@;'; put 'put ''ZD1wYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCk7aXNOYU4oZCl8fCh0aGlzLnBhZ2UuY3VycmVudD1kPDE/MTpkPnRoaXMucGFnZS5sYXN0P3RoaXMucGFnZS5sYXN0OmQpLHRoaXMuY3VycmVudFBhZ2VJbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50LnRv''@;'; put 'put ''U3RyaW5nKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE1tKSxHZShpcyksR2UoWGYpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2luYXRpb24iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxk''@;'; put 'put ''LGgpe2lmKDEmYSYmYW8oaCxYeCw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLl9wYWdlU2l6ZUNvbXBvbmVudD1mLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEodmplLDUpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuY3VycmVudFBhZ2VJbnB1dFJl''@;'; put 'put ''Zj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicGFnaW5hdGlvbiIsITApfSxpbnB1dHM6e2Rpc2FibGVDdXJyZW50UGFnZUlucHV0OltObi5Ob25lLCJjbHJEZ1BhZ2VJbnB1dERpc2FibGVkIiwiZGlzYWJsZUN1cnJlbnRQYWdlSW5w''@;'; put 'put ''dXQiXSxwYWdlU2l6ZTpbTm4uTm9uZSwiY2xyRGdQYWdlU2l6ZSIsInBhZ2VTaXplIl0sdG90YWxJdGVtczpbTm4uTm9uZSwiY2xyRGdUb3RhbEl0ZW1zIiwidG90YWxJdGVtcyJdLGxhc3RQYWdlOltObi5Ob25lLCJjbHJEZ0xhc3RQYWdlIiwibGFzdFBhZ2UiXSxjdXJyZW50UGFnZTpbTm4u''@;'; put 'put ''Tm9uZSwiY2xyRGdQYWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5nZSJ9LG5nQ29udGVudFNlbGVjdG9yczp5amUsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInJlYWRPbmx5IiwiIl0sWyJjdXJyZW50UGFnZUlucHV0IiwiIl0sWzQs''@;'; put 'put ''Im5nSWYiXSxbImNsYXNzIiwicGFnaW5hdGlvbi1zaXplIiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tZGVzY3JpcHRpb24iXSxbImNsYXNzIiwicGFnaW5hdGlvbi1saXN0Iiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tc2l6ZSJdLFsxLCJwYWdpbmF0aW9uLWxpc3QiXSxbInR5cGUiLCJi''@;'; put 'put ''dXR0b24iLDEsInBhZ2luYXRpb24tZmlyc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJkb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLXByZXZpb3VzIiwzLCJjbGljayIs''@;'; put 'put ''ImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsidHlwZSIsInRleHQiLCJjbGFzcyIsInBhZ2luYXRpb24tY3VycmVudCBjbHItaW5wdXQiLDMsInNpemUiLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJibHVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwi''@;'; put 'put ''c3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsidHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywia2V5ZG93bi5lbnRlciIsImJsdXIiLCJzaXplIiwidmFsdWUiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRl''@;'; put 'put ''bXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoYmplKSxndCgwLE1qZSw1LDIsIm5nLWNvbnRhaW5lciIsMikoMSx4amUsMTQsMTAsIm5nLWNvbnRhaW5lciIsMikpLDImYSYmKE1lKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksZmUoKSxNZSgibmdJZiIsZC5kZXRhaWxTZXJ2''@;'; put 'put ''aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W2JhLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxMNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5kb21BZGFwdGVyPWYsdGhpcy5jb2x1bW5SZXNpemVy''@;'; put 'put ''U2VydmljZT12LHRoaXMuY29sdW1uc1NlcnZpY2U9TSx0aGlzLmNvbHVtblN0YXRlPUQsdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBLcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5maWx0ZXJS''@;'; put 'put ''ZW5kZXJTdGVwcyhKZi5DTEVBUl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Z2V0Q29sdW1uV2lkdGhTdGF0ZSgpe2NvbnN0IGE9dGhpcy5kZXRlY3RT''@;'; put 'put ''dHJpY3RXaWR0aCgpO3JldHVybnt3aWR0aDp0aGlzLmNvbXB1dGVXaWR0aChhKSxzdHJpY3RXaWR0aDphfX1zZXRDb2x1bW5TdGF0ZShhKXt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbYV09dGhpcy5jb2x1bW5TdGF0ZX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoPyh0aGlzLmNvbHVt''@;'; put 'put ''blJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmKHRoaXMucmVzaXplRW1pdHRlci5lbWl0KGEud2lkdGgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgiKSx0aGlzLndpZHRoU2V0PSExKSx0aGlzLnJlbmRlcmVyLmFkZENs''@;'; put 'put ''YXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhpcy5hdXRvU2V0PSExKToodGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWHkpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgi''@;'; put 'put ''KSx0aGlzLndpZHRoU2V0PSEwLHRoaXMuYXV0b1NldD0hMCl9c2V0SGlkZGVuKGEpe2EuaGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEt4KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxLeCl9Y2xlYXJX''@;'; put 'put ''aWR0aCgpe3RoaXMud2lkdGhTZXQmJiF0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKSx0aGlzLmF1dG9TZXQmJnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5l''@;'; put 'put ''bC5uYXRpdmVFbGVtZW50LFh5KX1kZXRlY3RTdHJpY3RXaWR0aCgpe3JldHVybiB0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeT90aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLndpZHRoQWZ0ZXJSZXNpemU6dGhpcy5hdXRvU2V0PzA6dGhpcy5kb21BZGFwdGVyLnVzZXJEZWZp''@;'; put 'put ''bmVkV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1jb21wdXRlV2lkdGgoYSl7bGV0IGQ9YTtyZXR1cm4gZHx8KGQ9dGhpcy5kb21BZGFwdGVyLnNjcm9sbFdpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpLGR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3''@;'; put 'put ''KGF8fGMpKEdlKEppKSxHZShFbyksR2UoSTcpLEdlKHZtKSxHZShmRyksR2UoaGcpLEdlKF9HKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4iXV0sb3V0cHV0czp7cmVzaXplRW1pdHRlcjoiY2xyRGdDb2x1bW5SZXNpemUifSxmZWF0dXJlczpb''@;'; put 'put ''ZGEoW2ZHLFhaZV0pXX0pLGN9KSgpLHRXZT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsQmFyV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsV2lkdGgoYSl7cmV0dXJuIDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIDB9Y2xpZW50UmVjdChhKXtyZXR1''@;'; put 'put ''cm57dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MH19bWluV2lkdGgoYSl7cmV0dXJuIDB9Zm9jdXMoYSl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBuV2U9Yz0+dGwoYyk/bmV3IHZtOm5ldyB0V2U7bGV0IHRfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlKXt0aGlzLmRhdGFncmlkPWEsdGhpcy5vcmdhbml6ZXI9ZCx0aGlzLml0ZW1zPWgsdGhp''@;'; put 'put ''cy5wYWdlPWYsdGhpcy5lbD12LHRoaXMucmVuZGVyZXI9TSx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9Wix0aGlzLmNvbHVtbnNTZXJ2aWNlPXJlLHRoaXMubmdab25lPWNlLHRoaXMua2V5TmF2aWdhdGlvbj1iZSx0aGlzLmNoYW5nZURldGVjdG9yUmVmPUVlLHRoaXMuX2hlaWdodFNldD0hMSx0''@;'; put 'put ''aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bnVsbCx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNPTVBVVEVf''@;'; put 'put ''Q09MVU1OX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNvbXB1dGVIZWFkZXJzV2lkdGgoKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuc2l6ZUNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9oZWlnaHRTZXQmJnRoaXMucmVzZXREYXRhZ3JpZEhlaWdodCgpfSkpLHRoaXMuc3Vi''@;'; put 'put ''c2NyaXB0aW9ucy5wdXNoKEQuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKEJlPT50aGlzLnRvZ2dsZURldGFpbFBhbmUoQmUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITApKX1uZ09uSW5pdCgpe3Ro''@;'; put 'put ''aXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1N0YXRlQ2hhbmdlLnN1YnNjcmliZShhPT50aGlzLmNvbHVtblN0YXRlQ2hhbmdlZChhKSksbnVsbD09PXRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQmJih0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25P''@;'; put 'put ''YnNlcnZlcigoW2FdKT0+eyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50fHxhLmlzSW50ZXJzZWN0aW5nKSYmdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGUmJih0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRo''@;'; put 'put ''aXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKX0pLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldHVwQ29sdW1ucygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRo''@;'; put 'put ''aXMuaGVhZGVycy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0dXBDb2x1bW5zKCksdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5zdGFiaWxpemVDb2x1bW5zKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50YWJsZVNpemVTZXJ2aWNlLnRhYmxlPXRoaXMuZWx9bmdB''@;'; put 'put ''ZnRlclZpZXdDaGVja2VkKCl7dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zJiZ0aGlzLnN0YWJpbGl6ZUNvbHVtbnMoKSx0aGlzLnNob3VsZENvbXB1dGVIZWlnaHQoKSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5jb21wdXRlRGF0''@;'; put 'put ''YWdyaWRIZWlnaHQoKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKX10b2dnbGVEZXRhaWxQYW5lKGEpe3RoaXMuaGVhZGVycyYmKGEmJiF0aGlzLmNv''@;'; put 'put ''bHVtbnNTZXJ2aWNlLmhhc0NhY2hlKCk/KHRoaXMuY29sdW1uc1NlcnZpY2UuY2FjaGUoKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLnZpc2libGVDb2x1bW5zLmZvckVhY2goKGQsaCk9PntoPjAmJnRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQoZC5jb2x1bW5JbmRleCx7Y2hh''@;'; put 'put ''bmdlczpbVzEuSElEREVOXSxoaWRkZW46YX0pfSkpOmF8fHRoaXMuY29sdW1uc1NlcnZpY2UucmVzZXRUb0xhc3RDYWNoZSgpKX1zZXR1cENvbHVtbnMoKXt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoYSxkKT0+YS5zZXRDb2x1bW5TdGF0ZShkKSksdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5z''@;'; put 'put ''LnNwbGljZSh0aGlzLmhlYWRlcnMubGVuZ3RoKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGEse2NoYW5nZXM6W1cxLklOSVRJQUxJWkVdLGNvbHVtbkluZGV4OmR9KX0pfXNob3VsZENvbXB1''@;'; put 'put ''dGVIZWlnaHQoKXtyZXR1cm4hdGhpcy5faGVpZ2h0U2V0JiZ0aGlzLnBhZ2Uuc2l6ZT4wJiZ0aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGg9PT10aGlzLnBhZ2Uuc2l6ZX1jb21wdXRlRGF0YWdyaWRIZWlnaHQoKXtjb25zdCBhPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwubmF0''@;'; put 'put ''aXZlRWxlbWVudCkuaGVpZ2h0O3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLGEpLHRoaXMuX2hlaWdodFNldD0hMH1yZXNldERhdGFncmlkSGVpZ2h0KCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhl''@;'; put 'put ''aWdodCIsIiIpLHRoaXMuX2hlaWdodFNldD0hMX1jb21wdXRlSGVhZGVyc1dpZHRoKCl7Y29uc3QgYT10aGlzLmhlYWRlcnMubGVuZ3RoLGQ9dGhpcy5oZWFkZXJzLm1hcChmPT5mLmdldENvbHVtbldpZHRoU3RhdGUoKSk7bGV0IGg9ITA7dGhpcy5oZWFkZXJzLmZvckVhY2goKGYsdik9Pntj''@;'; put 'put ''b25zdCBNPXtjaGFuZ2VzOltXMS5XSURUSF0sLi4uZFt2XX07TS5zdHJpY3RXaWR0aHx8KGg9ITEpLGE9PT12KzEmJmgmJihNLnN0cmljdFdpZHRoPTApLHRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQodixNKX0pfWNvbHVtblN0YXRlQ2hhbmdlZChhKXtpZighdGhpcy5o''@;'; put 'put ''ZWFkZXJzfHxudWxsPT1hLmNvbHVtbkluZGV4KXJldHVybjtjb25zdCBkPWEuY29sdW1uSW5kZXg7YS5jaGFuZ2VzJiZhLmNoYW5nZXMubGVuZ3RoJiZhLmNoYW5nZXMuZm9yRWFjaChoPT57c3dpdGNoKGgpe2Nhc2UgVzEuV0lEVEg6dGhpcy5oZWFkZXJzLmdldChkKS5zZXRXaWR0aChhKSx0''@;'; put 'put ''aGlzLnJvd3MuZm9yRWFjaChmPT57Zj8uY2VsbHMubGVuZ3RoPT09dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxlbmd0aCYmKGYuY2VsbHMuZ2V0KGQpLnNldFdpZHRoKGEpLGYuZXhwYW5kYWJsZVJvdz8uY2VsbHMuZ2V0KGQpPy5zZXRXaWR0aChhKSl9KTticmVhaztjYXNlIFcxLkhJ''@;'; put 'put ''RERFTjp0aGlzLmhlYWRlcnMuZ2V0KGQpLnNldEhpZGRlbihhKSx0aGlzLnJvd3MuZm9yRWFjaChmPT57Zi5jZWxscyYmZi5jZWxscy5sZW5ndGgmJihmLmNlbGxzLmdldChkKS5zZXRIaWRkZW4oYSksZi5leHBhbmRhYmxlUm93Py5jZWxscy5nZXQoZCk/LnNldEhpZGRlbihhKSl9KSx0aGlz''@;'; put 'put ''LnVwZGF0ZUNvbHVtblNlcGFyYXRvcnNWaXNpYmlsaXR5KCksdGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpO2JyZWFrO2Nhc2UgVzEuSU5JVElBTElaRTphLmhpZGVhYmxlJiZhLmhpZGRlbiYmKHRoaXMuaGVhZGVycy5nZXQoZCkuc2V0SGlkZGVuKGEpLHRoaXMucm93cy5mb3JF''@;'; put 'put ''YWNoKGY9PntmLnNldENlbGxzU3RhdGUoKSxmLmV4cGFuZGFibGVSb3c/LnNldENlbGxzU3RhdGUoKX0pKX19KX1zdGFiaWxpemVDb2x1bW5zKCl7dGhpcy5jb2x1bW5zU2l6ZXNTdGFibGV8fHRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD4wJiYodGhpcy5vcmdhbml6ZXIucmVzaXplKCks''@;'; put 'put ''dGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITApfXVwZGF0ZUNvbHVtblNlcGFyYXRvcnNWaXNpYmlsaXR5KCl7Y29uc3QgYT10aGlzLmRhdGFncmlkLmNvbHVtbnMuZmlsdGVyKGQ9PiFkLmlzSGlkZGVuKTthLmZvckVhY2goKGQsaCk9PntoPT09YS5sZW5ndGgtMT9kLnNob3dTZXBhcmF0b3I9''@;'; put 'put ''ITE6ZC5zaG93U2VwYXJhdG9yfHwoZC5zaG93U2VwYXJhdG9yPSEwKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShBbSksR2UoSTcpLEdlKGRnKSxHZShNbSksR2UoSmkpLEdlKEVvKSxHZShYZiksR2UocEcpLEdlKGhnKSxHZShXYSksR2Uo''@;'; put 'put ''ck8pLEdlKEVzKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxMNyw0KSxhbyhoLFRtLDQpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmhlYWRlcnM9Ziks''@;'; put 'put ''Q2koZj1TaSgpKSYmKGQucm93cz1mKX19LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6dm0sdXNlRmFjdG9yeTpuV2UsZGVwczpbaW9dfV0pXX0pLGN9KSgpLHJXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoQk9lLGpPZSx2eCx6T2UsQTBlLFVPZSxrMGUsWk9lLFdP''@;'; put 'put ''ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJaZSxLTCxBcyxDZGUsUmMsUFksTzIsTFplLFNkZSxqeSxWeCxZWV19KSxjfSkoKSxOZGU9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay1jb250ZW50Il1dfSksY30pKCksd0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2dlbmVy''@;'; put 'put ''YXRlZElkPW51bGwsdGhpcy5faWQ9bnVsbH1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPSJzdHJpbmciPT10eXBlb2YgYSYmIiIhPT1hP2E6dGhpcy5fZ2VuZXJhdGVkSWQrIiJ9bmdPbkluaXQoKXt0aGlzLl9nZW5lcmF0ZWRJZD0iY2xyLXN0YWNrLWxhYmVs''@;'; put 'put ''LSIrTXUoKSx0aGlzLmlkfHwodGhpcy5faWQ9dGhpcy5fZ2VuZXJhdGVkSWQrIiIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWxhYmVsIl1dLGhvc3RWYXJzOjEs''@;'; put 'put ''aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSko''@;'; put 'put ''KSxWZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IoITEpLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnVuaXF1''@;'; put 'put ''ZUlkPU11KCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZhbHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhpcy5fZnVsbHlJbml0aWFsaXpl''@;'; put 'put ''ZCYmKGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhwYW5kZWR9Z2V0IG9uU3RhY2tM''@;'; put 'put ''YWJlbEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMuZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1RpdGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5hcmlhTGV2ZWw/dGhpcy5hcmlh''@;'; put 'put ''TGV2ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5leHBh''@;'; put 'put ''bmRhYmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4cGFuZGFibGU9ITB9dG9nZ2xl''@;'; put 'put ''RXhwYW5kKGEpe0JkZShhKXx8dGhpcy5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdldFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3RhY2stY2hpbGRy''@;'; put 'put ''ZW4tJHt0aGlzLnVuaXF1ZUlkfWA6bnVsbH1wcmV2ZW50RGVmYXVsdElmTm90SW5wdXRFdmVudChhKXtCZGUoYSl8fGEucHJldmVudERlZmF1bHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoYywxMiksR2UoaXMpKX0sYy5cdTAyNzVjbXA9''@;'; put 'put ''VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsd0csNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5zdGFja0Jsb2NrVGl0bGU9Zi5maXJzdCl9fSxob3N0VmFyczoxMixob3N0Qmlu''@;'; put 'put ''ZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigicm9sZSIsImhlYWRpbmciKSgiYXJpYS1sZXZlbCIsZC5oZWFkaW5nTGV2ZWwpLFRyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsZC5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGQuZXhwYW5k''@;'; put 'put ''YWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGQuZ2V0Q2hhbmdlZFZhbHVlKSgib24tZm9jdXMiLGQub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbTm4uTm9uZSwiY2xyU2JFeHBhbmRlZCIsImV4cGFuZGVkIl0sZXhwYW5kYWJsZTpbTm4uTm9uZSwiY2xyU2JFeHBh''@;'; put 'put ''bmRhYmxlIiwiZXhwYW5kYWJsZSJdLGFyaWFMZXZlbDpbTm4uTm9uZSwiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxzZXRDaGFuZ2VkVmFsdWU6W05uLk5vbmUsImNsclNiTm90aWZ5Q2hhbmdlIiwic2V0Q2hhbmdlZFZhbHVlIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJj''@;'; put 'put ''bHJTYkV4cGFuZGVkQ2hhbmdlIn0sbmdDb250ZW50U2VsZWN0b3JzOkRqZSxkZWNsczo5LHZhcnM6OSxjb25zdHM6W1sxLCJzdGFjay1ibG9jay1sYWJlbCIsMywiY2xpY2siLCJrZXl1cC5lbnRlciIsImtleXVwLnNwYWNlIiwia2V5ZG93bi5zcGFjZSIsImZvY3VzIiwiYmx1ciIsImlkIl0s''@;'; put 'put ''WyJzaGFwZSIsImFuZ2xlIiwiY2xhc3MiLCJzdGFjay1ibG9jay1jYXJldCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItc3Itb25seSIsNCwibmdJZiJdLFsxLCJzdGFjay12aWV3LWtleSJdLFsxLCJzdGFjay1ibG9jay1jb250ZW50Il0sWzEsInN0YWNrLWNoaWxkcmVuIiwzLCJjbHJFeHBh''@;'; put 'put ''bmRUcmlnZ2VyIl0sWyJyb2xlIiwicmVnaW9uIiwzLCJoZWlnaHQiLDQsIm5nSWYiXSxbInNoYXBlIiwiYW5nbGUiLDEsInN0YWNrLWJsb2NrLWNhcmV0Il0sWzEsImNsci1zci1vbmx5Il0sWyJyb2xlIiwicmVnaW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2Eoa2plKSxk''@;'; put 'put ''ZSgwLCJkaXYiLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVFeHBhbmQoZil9KSgia2V5dXAuc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRvZ2dsZUV4cGFuZChm''@;'; put 'put ''KX0pKCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5wcmV2ZW50RGVmYXVsdElmTm90SW5wdXRFdmVudChmKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5mb2N1c2VkPSEwfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMX0pLGd0KDEsSWpl''@;'; put 'put ''LDEsMSwiY2RzLWljb24iLDEpKDIsUmplLDIsMSwic3BhbiIsMiksZGUoMywiZGl2IiwzKSxZcig0KSxoZSgpLGRlKDUsImRpdiIsNCksWXIoNiwxKSxoZSgpKCksZGUoNywiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw1KSxndCg4LExqZSwyLDQsImRpdiIsNiksaGUoKSksMiZhJiYoTWUo''@;'; put 'put ''ImlkIixkLnVuaXF1ZUlkKSxocigicm9sZSIsZC5yb2xlKSgidGFiaW5kZXgiLGQudGFiSW5kZXgpKCJhcmlhLWV4cGFuZGVkIixkLmFyaWFFeHBhbmRlZCkoImFyaWEtY29udHJvbHMiLGQuZ2V0U3RhY2tDaGlsZHJlbklkKCkpLGZlKCksTWUoIm5nSWYiLGQuZXhwYW5kYWJsZSksZmUoKSxN''@;'; put 'put ''ZSgibmdJZiIsZC5nZXRDaGFuZ2VkVmFsdWUpLGZlKDUpLE1lKCJjbHJFeHBhbmRUcmlnZ2VyIixkLmV4cGFuZGVkKSxmZSgpLE1lKCJuZ0lmIixkLmV4cGFuZGVkKSl9LGRlcGVuZGVuY2llczpbYmEscnMsVkxdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2Z1bmN0aW9uIEJkZShjKXtjb25z''@;'; put 'put ''dCBsPWM/LnRhcmdldDtyZXR1cm4hIWw/LnRhZ05hbWUmJlsiSU5QVVQiLCJURVhUQVJFQSIsIkJVVFRPTiIsIkEiLCJTRUxFQ1QiLCJPUFRJT04iXS5pbmNsdWRlcyhsLnRhZ05hbWUpfWxldCBDRz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLXZpZXciXV0sbmdDb250ZW50U2VsZWN0b3JzOlBqZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJzdGFjay12aWV3Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoT2pl''@;'; put 'put ''KSxZcigwKSxkZSgxLCJkaXYiLDApLFlyKDIsMSksaGUoKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGFXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoRXkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxBcyxTZGVdfSksY30pKCksTzc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlzLmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5ldyBXbn19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgamRlPXtwcm92aWRlOk83LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gb1dlKGMpe3JldHVybiBjfHxuZXcgTzd9LGRl''@;'; put 'put ''cHM6W1tuZXcgSTEsbmV3IGxkLE83XV19O2xldCB6ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlPWEsdGhpcy5leHBhbmRTZXJ2aWNlPWQsZCYmKHRoaXMuc3Vic2NyaXB0aW9uPWQuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShoPT57IWgmJnRo''@;'; put 'put ''aXMucGFyZW50JiYhYS5lYWdlciYmYS5yZWN1cnNpb24mJnRoaXMucGFyZW50LmNsZWFyQ2hpbGRyZW4oKX0pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpfXNob3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlz''@;'; put 'put ''LmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5tb2RlbCxjbHJNb2RlbDphfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLnBhcmVudD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE83KSxHZShVMSw4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJyb2xlIixkLnJvbGUpfSxpbnB1dHM6e3BhcmVudDoicGFyZW50IixjaGlsZHJlbjoiY2hpbGRyZW4ifSxkZWNsczoxLHZhcnM6MSxjb25z''@;'; put 'put ''dHM6W1s0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJmd0KDAsQmplLDIsMSwibmctY29udGFpbmVyIiwwKSwyJmEmJk1lKCJuZ0lmIixkLnNo''@;'; put 'put ''b3VsZFJlbmRlcigpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxOMV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyICR1PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVU5TRUxFQ1RFRD0wXT0iVU5TRUxFQ1RFRCIsY1tjLlNFTEVDVEVEPTFdPSJTRUxFQ1RFRCIsY1tjLklOREVURVJNSU5BVEU9''@;'; put 'put ''Ml09IklOREVURVJNSU5BVEUiLGN9KCR1fHx7fSk7Y2xhc3MgVWRle2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nJD1uZXcgZWkoITEpLHRoaXMuc2VsZWN0ZWQ9bmV3IGVpKCR1LlVOU0VMRUNURUQpLHRoaXMuX2xvYWRpbmc9ITF9Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5fbG9hZGlu''@;'; put 'put ''Z31zZXQgbG9hZGluZyhsKXt0aGlzLl9sb2FkaW5nPWwsdGhpcy5sb2FkaW5nJC5uZXh0KGwpfWdldCBkaXNhYmxlZCgpe3JldHVybiEoIXRoaXMuX2Rpc2FibGVkJiYhdGhpcy5wYXJlbnQ/LmRpc2FibGVkKX1zZXQgZGlzYWJsZWQobCl7dGhpcy5fZGlzYWJsZWQ9bH1kZXN0cm95KCl7dGhp''@;'; put 'put ''cy5zZWxlY3RlZC5jb21wbGV0ZSgpfXNldFNlbGVjdGVkKGwsYSxkKXtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSxkJiZsIT09JHUuSU5ERVRFUk1JTkFURSYmdGhpcy5jaGlsZHJlbiYmdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGg9PntoLmRpc2FibGVk''@;'; put 'put ''fHxoLnNldFNlbGVjdGVkKGwsITEsITApfSksYSYmdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9dG9nZ2xlU2VsZWN0aW9uKGwpe3RoaXMuZGlzYWJsZWR8fHRoaXMuc2V0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZC52YWx1ZT09PSR1LlNF''@;'; put 'put ''TEVDVEVEPyR1LlVOU0VMRUNURUQ6JHUuU0VMRUNURUQsITAsbCl9X3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpe2NvbnN0IGw9dGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRyZW4oKTtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChs''@;'; put 'put ''KSx0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX1jb21wdXRlU2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRyZW4oKXtsZXQgbD0hMSxhPSExO2Zvcihjb25zdCBkIG9mIHRoaXMuY2hpbGRyZW4pc3dpdGNoKGQuc2VsZWN0ZWQudmFsdWUpe2Nh''@;'; put 'put ''c2UgJHUuSU5ERVRFUk1JTkFURTppZihkLmRpc2FibGVkKWNvbnRpbnVlO3JldHVybiAkdS5JTkRFVEVSTUlOQVRFO2Nhc2UgJHUuU0VMRUNURUQ6aWYobD0hMCxhKXJldHVybiAkdS5JTkRFVEVSTUlOQVRFO2JyZWFrO2RlZmF1bHQ6aWYoYT0hMCxsKXJldHVybiAkdS5JTkRFVEVSTUlOQVRF''@;'; put 'put ''fXJldHVybiBsP2E/JHUuVU5TRUxFQ1RFRDokdS5TRUxFQ1RFRDokdS5VTlNFTEVDVEVEfX1jbGFzcyBkTyBleHRlbmRzIFVkZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigpLHRoaXMuZ2V0Q2hpbGRyZW49ZCx0aGlzLmZlYXR1cmVzU2VydmljZT1oLHRoaXMuY2hpbGRyZW5GZXRjaGVk''@;'; put 'put ''PSExLHRoaXMuX2NoaWxkcmVuPVtdLHRoaXMubW9kZWw9bCx0aGlzLnBhcmVudD1hfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLmZldGNoQ2hpbGRyZW4oKSx0aGlzLl9jaGlsZHJlbn1zZXQgY2hpbGRyZW4obCl7dGhpcy5fY2hpbGRyZW49bH1kZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksc3VwZXIuZGVzdHJveSgpfWNsZWFyQ2hpbGRyZW4oKXt0aGlzLl9jaGlsZHJlbi5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSxkZWxldGUgdGhpcy5fY2hpbGRyZW4sdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITF9ZmV0Y2hDaGlsZHJl''@;'; put 'put ''bigpe2lmKHRoaXMuY2hpbGRyZW5GZXRjaGVkKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Q2hpbGRyZW4odGhpcy5tb2RlbCk7IWZ1bmN0aW9uIHNXZShjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudGhlbn0obCk/Qk0obCk/KHRoaXMubG9hZGluZz0hMCx0aGlzLnN1YnNjcmlw''@;'; put 'put ''dGlvbj1sLnN1YnNjcmliZShhPT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFwQ2hpbGRyZW4oYSksdGhpcy5sb2FkaW5nPSExfSkpOnRoaXMuX2NoaWxkcmVuPWw/dGhpcy53cmFwQ2hpbGRyZW4obCk6W106KHRoaXMubG9hZGluZz0hMCxsLnRoZW4oYT0+e3RoaXMuX2NoaWxkcmVuPXRoaXMu''@;'; put 'put ''d3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKSx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMCx0aGlzLmZlYXR1cmVzU2VydmljZSYmdGhpcy5mZWF0dXJlc1NlcnZpY2UuY2hpbGRyZW5GZXRjaGVkLm5leHQoKX13cmFwQ2hpbGRyZW4obCl7cmV0dXJuIGwubWFwKGE9Pm5ldyBkTyhh''@;'; put 'put ''LHRoaXMsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSkpfX1sZXQgWmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1kLHRoaXMuY2RyPWh9bmdPbkNoYW5nZXMoKXtsZXQgYTthPUFycmF5''@;'; put 'put ''LmlzQXJyYXkodGhpcy5ub2Rlcyk/dGhpcy5ub2Rlcy5tYXAoZD0+bmV3IGRPKGQsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSk6W25ldyBkTyh0aGlzLm5vZGVzLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSldLHRoaXMuY2hp''@;'; put 'put ''bGRyZW5GZXRjaFN1YnNjcmlwdGlvbnx8KHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbj10aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQucGlwZShmbSgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpfSkpLHRoaXMuZmVhdHVyZXNTZXJ2''@;'; put 'put ''aWNlLnJlY3Vyc2lvbj17dGVtcGxhdGU6dGhpcy50ZW1wbGF0ZSxyb290OmF9fW5nT25EZXN0cm95KCl7dGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uJiZ0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8YykoR2UoU2wpLEdlKE83KSxHZShFcykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSZWN1cnNpdmVGb3IiLCIiLCJjbHJSZWN1cnNpdmVGb3JPZiIsIiJdXSxpbnB1dHM6e25vZGVzOltObi5Ob25lLCJjbHJSZWN1cnNpdmVG''@;'; put 'put ''b3JPZiIsIm5vZGVzIl0sZ2V0Q2hpbGRyZW46W05uLk5vbmUsImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIiwiZ2V0Q2hpbGRyZW4iXX0sZmVhdHVyZXM6W3dsXX0pLGN9KSgpLFNHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9mb2N1c1JlcXVlc3Q9bmV3IFduLHRoaXMu''@;'; put 'put ''X2ZvY3VzQ2hhbmdlPW5ldyBXbn1nZXQgZm9jdXNSZXF1ZXN0KCl7cmV0dXJuIHRoaXMuX2ZvY3VzUmVxdWVzdC5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Zm9jdXNOb2RlKGEpe2EmJnRoaXMuX2ZvY3Vz''@;'; put 'put ''UmVxdWVzdC5uZXh0KGEubm9kZUlkKX1icm9hZGNhc3RGb2N1c2VkTm9kZShhKXt0aGlzLmZvY3VzZWROb2RlSWQhPT1hJiYodGhpcy5mb2N1c2VkTm9kZUlkPWEsdGhpcy5fZm9jdXNDaGFuZ2UubmV4dChhKSl9Zm9jdXNQYXJlbnQoYSl7YSYmdGhpcy5mb2N1c05vZGUoYS5wYXJlbnQpfWZv''@;'; put 'put ''Y3VzRmlyc3RWaXNpYmxlTm9kZSgpe3RoaXMuZm9jdXNOb2RlKHRoaXMucm9vdE5vZGVNb2RlbHMmJnRoaXMucm9vdE5vZGVNb2RlbHNbMF0pfWZvY3VzTGFzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTGFzdFZpc2libGVJblRyZWUoKSl9Zm9jdXNOb2RlQWJvdmUo''@;'; put 'put ''YSl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTm9kZUFib3ZlKGEpKX1mb2N1c05vZGVCZWxvdyhhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQmVsb3coYSkpfWZvY3VzTm9kZVN0YXJ0c1dpdGgoYSxkKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRDbG9zZXN0Tm9kZVN0YXJ0c1dp''@;'; put 'put ''dGgoYSxkKSl9ZmluZFNpYmxpbmdzKGEpe3JldHVybiBhLnBhcmVudD9hLnBhcmVudC5jaGlsZHJlbjp0aGlzLnJvb3ROb2RlTW9kZWxzfWZpbmRMYXN0VmlzaWJsZUluTm9kZShhKXtpZighYSlyZXR1cm4gbnVsbDtpZihhLmV4cGFuZGVkJiZhLmNoaWxkcmVuLmxlbmd0aD4wKXtjb25zdCBk''@;'; put 'put ''PWEuY2hpbGRyZW47cmV0dXJuIHRoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKGRbZC5sZW5ndGgtMV0pfXJldHVybiBhfWZpbmROZXh0Rm9jdXNhYmxlKGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IGQ9dGhpcy5maW5kU2libGluZ3MoYSksaD1kLmluZGV4T2YoYSk7cmV0dXJuIGg8ZC5s''@;'; put 'put ''ZW5ndGgtMT9kW2grMV06aD09PWQubGVuZ3RoLTE/dGhpcy5maW5kTmV4dEZvY3VzYWJsZShhLnBhcmVudCk6bnVsbH1maW5kTGFzdFZpc2libGVJblRyZWUoKXtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVs''@;'; put 'put ''cy5sZW5ndGgmJnRoaXMucm9vdE5vZGVNb2RlbHNbdGhpcy5yb290Tm9kZU1vZGVscy5sZW5ndGgtMV0pfWZpbmROb2RlQWJvdmUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4gMD09PWg/YS5wYXJlbnQ6aD4w''@;'; put 'put ''P3RoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKGRbaC0xXSk6bnVsbH1maW5kTm9kZUJlbG93KGEpe3JldHVybiBhP2EuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjA/YS5jaGlsZHJlblswXTp0aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEpOm51bGx9ZmluZERlc2NlbmRlbnROb2RlU3Rh''@;'; put 'put ''cnRzV2l0aChhLGQpe2lmKGQuZXhwYW5kZWQmJmQuY2hpbGRyZW4ubGVuZ3RoPjApZm9yKGNvbnN0IGggb2YgZC5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGgpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9ZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChh''@;'; put 'put ''LGQpe2NvbnN0IGg9dGhpcy5maW5kU2libGluZ3MoZCk7Zm9yKGxldCB2PWguaW5kZXhPZihkKSsxO3Y8aC5sZW5ndGg7disrKXtjb25zdCBEPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaFt2XSk7aWYoRClyZXR1cm4gRH1yZXR1cm4gbnVsbH1maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEs''@;'; put 'put ''ZCl7Zm9yKGNvbnN0IGggb2YgdGhpcy5yb290Tm9kZU1vZGVscyl7aWYoZC5wYXJlbnQmJmQucGFyZW50PT09aCljb250aW51ZTtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kTm9kZVN0YXJ0c1dpdGgoYSxkKXtyZXR1''@;'; put 'put ''cm4gZD9kLnRleHRDb250ZW50LnN0YXJ0c1dpdGgoYSk/ZDp0aGlzLmZpbmREZXNjZW5kZW50Tm9kZVN0YXJ0c1dpdGgoYSxkKTpudWxsfWZpbmRDbG9zZXN0Tm9kZVN0YXJ0c1dpdGgoYSxkKXtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPXRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRz''@;'; put 'put ''V2l0aChhLGQpO2lmKGgpcmV0dXJuIGg7Y29uc3QgZj10aGlzLmZpbmRTaWJsaW5nTm9kZVN0YXJ0c1dpdGgoYSxkKTtyZXR1cm4gZnx8KHRoaXMuZmluZFJvb3ROb2RlU3RhcnRzV2l0aChhLGQpfHx0aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGQucGFyZW50KSl9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIGxXZSBleHRlbmRzIFVkZXtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMucGFyZW50PWwsbCYmbC5fYWRkQ2hpbGQodGhp''@;'; put 'put ''cyksdGhpcy5jaGlsZHJlbj1bXX1kZXN0cm95KCl7dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll9yZW1vdmVDaGlsZCh0aGlzKSxzdXBlci5kZXN0cm95KCl9X2FkZENoaWxkKGwpe3RoaXMuY2hpbGRyZW4ucHVzaChsKX1fcmVtb3ZlQ2hpbGQobCl7Y29uc3QgYT10aGlzLmNoaWxkcmVuLmlu''@;'; put 'put ''ZGV4T2YobCk7YT4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoYSwxKX19bGV0IGZnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5lbD1hfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiYWN0aXZlIil9YWN0aXZh''@;'; put 'put ''dGUoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljayYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbIiIsOCwiY2xyLXRyZWVub2RlLWxpbmsiXV19KSxjfSkoKSxQZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWil7dGhpcy5wbGF0Zm9ybUlkPWEsdGhpcy5mZWF0dXJlc1NlcnZpY2U9aCx0aGlzLmV4cGFuZFNlcnZpY2U9Zix0aGlzLmNv''@;'; put 'put ''bW1vblN0cmluZ3M9dix0aGlzLmZvY3VzTWFuYWdlcj1NLHRoaXMuZWxlbWVudFJlZj1ELHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcix0aGlzLlNUQVRFUz0kdSx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRoaXMubm9kZUlkPU11KCks''@;'; put 'put ''dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyBXbix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9aC5yZWN1cnNpb24/Wi52aWV3''@;'; put 'put ''P1oudmlldy5jb250ZXh0LmNsck1vZGVsOlouX2xWaWV3WzhdLmNsck1vZGVsOm5ldyBsV2UoZD9kLl9tb2RlbDpudWxsKSx0aGlzLl9tb2RlbC5ub2RlSWQ9dGhpcy5ub2RlSWR9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX21vZGVsLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlz''@;'; put 'put ''Ll9tb2RlbC5kaXNhYmxlZD1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPSR1LlVOU0VMRUNURUQpLCJi''@;'; put 'put ''b29sZWFuIj09dHlwZW9mIGEmJihhPWE/JHUuU0VMRUNURUQ6JHUuVU5TRUxFQ1RFRCksdGhpcy5za2lwRW1pdENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSx0aGlzLnNraXBF''@;'; put 'put ''bWl0Q2hhbmdlPSExfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfXNldCBjbHJGb3JUeXBlQWhlYWQoYSl7dGhpcy5fbW9kZWwudGV4dENvbnRlbnQ9V2RlKGF8fHRo''@;'; put 'put ''aXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50KX1nZXQgYXJpYVNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RhYmxlKCk/dGhpcy5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT0kdS5TRUxFQ1RFRDohIXRoaXMudHJlZU5vZGVMaW5rPy5hY3RpdmV8fG51bGx9Z2V0''@;'; put 'put ''IHRyZWVOb2RlTGluaygpe3JldHVybiB0aGlzLnRyZWVOb2RlTGlua0xpc3QmJnRoaXMudHJlZU5vZGVMaW5rTGlzdC5maXJzdH1nZXQgaXNQYXJlbnQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuY2hpbGRyZW4mJnRoaXMuX21vZGVsLmNoaWxkcmVuLmxlbmd0aD4wfW5nT25Jbml0KCl7dGhpcy5f''@;'; put 'put ''bW9kZWwuZXhwYW5kZWQ9dGhpcy5leHBhbmRlZCx0aGlzLl9tb2RlbC5kaXNhYmxlZD10aGlzLmRpc2FibGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUoJGwoKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnNl''@;'; put 'put ''bGVjdGVkQ2hhbmdlLmVtaXQoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cy5wdXNoKHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzUmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRleChhKX0pKSx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9tb2RlbC5sb2FkaW5nJC5waXBlKGZtKDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlFdmVudC5waXBlKGZt''@;'; put 'put ''KDIwMCkpLnN1YnNjcmliZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9tb2RlbC50ZXh0Q29udGVudHx8KHRoaXMuX21vZGVsLnRleHRD''@;'; put 'put ''b250ZW50PVdkZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCkpfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kZWwuZGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aXNFeHBhbmRhYmxlKCl7cmV0dXJuIHR5cGVv''@;'; put 'put ''ZiB0aGlzLmV4cGFuZGFibGU8InUiP3RoaXMuZXhwYW5kYWJsZTohIXRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRhYmxlfHx0aGlzLmlzUGFyZW50fWlzU2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfWZvY3VzVHJlZU5vZGUoKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50O3RsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1hJiYodGhpcy5zZXRUYWJJbmRleCgwKSxhLmZvY3VzKCksYS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9''@;'; put 'put ''KSl9YnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigpe3RoaXMuZm9jdXNNYW5hZ2VyLmJyb2FkY2FzdEZvY3VzZWROb2RlKHRoaXMubm9kZUlkKX1vbktleURvd24oYSl7c3dpdGNoKFJZKGEpLEkyKGEua2V5KSl7Y2FzZSBnYS5BcnJvd1VwOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUFi''@;'; put 'put ''b3ZlKHRoaXMuX21vZGVsKTticmVhaztjYXNlIGdhLkFycm93RG93bjp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk7YnJlYWs7Y2FzZSBnYS5BcnJvd1JpZ2h0OnRoaXMuZXhwYW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKTticmVhaztjYXNlIGdhLkFycm93TGVm''@;'; put 'put ''dDp0aGlzLmNvbGxhcHNlT3JGb2N1c1BhcmVudCgpO2JyZWFrO2Nhc2UgZ2EuSG9tZTphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNGaXJzdFZpc2libGVOb2RlKCk7YnJlYWs7Y2FzZSBnYS5FbmQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNNYW5hZ2Vy''@;'; put 'put ''LmZvY3VzTGFzdFZpc2libGVOb2RlKCk7YnJlYWs7Y2FzZSBnYS5FbnRlcjp0aGlzLnRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKTticmVhaztjYXNlIGdhLlNwYWNlOmNhc2UgZ2EuU3BhY2ViYXI6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVm''@;'; put 'put ''YXVsdCgpO2JyZWFrO2RlZmF1bHQ6aWYodGhpcy5fbW9kZWwudGV4dENvbnRlbnQmJmZ1bmN0aW9uIHF6ZShjKXtjb25zdCBsPWMua2V5O3JldHVybiBsLnRvTG93ZXJDYXNlKCkhPT1sLnRvVXBwZXJDYXNlKCl8fGw+PSIwIiYmbDw9IjkifShhKSlyZXR1cm4gdGhpcy50eXBlQWhlYWRLZXlC''@;'; put 'put ''dWZmZXIrPWEua2V5LHZvaWQgdGhpcy50eXBlQWhlYWRLZXlFdmVudC5uZXh0KHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyKX10aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn1zZXRUYWJJbmRleChhKXt0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD1hLHRoaXMuY29udGVudENvbnRhaW5l''@;'; put 'put ''ci5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLGEudG9TdHJpbmcoKSl9Y2hlY2tUYWJJbmRleChhKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0VGFiSW5kZXgoLTEp''@;'; put 'put ''fXRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5pc0V4cGFuZGFibGUoKSYmIXRoaXMuaXNTZWxlY3RhYmxlKCk/dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkOnRoaXMudHJpZ2dlckRlZmF1bHRBY3Rpb24oKSl9ZXhw''@;'; put 'put ''YW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0h''@;'; put 'put ''MCkpfWNvbGxhcHNlT3JGb2N1c1BhcmVudCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkP3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMTp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c1BhcmVudCh0aGlzLl9tb2RlbCkpfXRyaWdnZXJEZWZhdWx0QWN0aW9uKCl7dGhpcy50cmVl''@;'; put 'put ''Tm9kZUxpbms/dGhpcy50cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShH''@;'; put 'put ''ZShpbyksR2UoYywxMiksR2UoTzcpLEdlKFUxKSxHZShpcyksR2UoU0cpLEdlKEppKSxHZShEcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdHJlZS1ub2RlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsZmcsNCksMiZh''@;'; put 'put ''KXtsZXQgZjtDaShmPVNpKCkpJiYoZC50cmVlTm9kZUxpbmtMaXN0PWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShqamUsNyxKaSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5jb250ZW50Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItdHJlZS1ub2RlIiwhMCkoImRpc2FibGVkIixkLl9tb2RlbC5kaXNhYmxlZCl9LGlucHV0czp7ZXhwYW5kYWJsZTpbTm4uTm9uZSwiY2xyRXhwYW5kYWJsZSIsImV4cGFuZGFibGUiXSxkaXNhYmxlZDpbTm4uTm9uZSwiY2xyRGlzYWJsZWQi''@;'; put 'put ''LCJkaXNhYmxlZCJdLHNlbGVjdGVkOltObi5Ob25lLCJjbHJTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6W05uLk5vbmUsImNsckV4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJGb3JUeXBlQWhlYWQ6ImNsckZvclR5cGVBaGVhZCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlOiJjbHJT''@;'; put 'put ''ZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckV4cGFuZGVkQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtqZGUsVTEse3Byb3ZpZGU6RHgsdXNlRXhpc3Rpbmc6VTF9XSldLG5nQ29udGVudFNlbGVjdG9yczpVamUsZGVjbHM6MTIsdmFyczoxMixjb25zdHM6W1siY29udGVudENvbnRh''@;'; put 'put ''aW5lciIsIiJdLFsidHJlZW5vZGVDb250ZW50IiwiIl0sWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlkb3duIiwiZm9jdXMiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0''@;'; put 'put ''YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImRpc2FibGVkIiwiY2xpY2siLCJmb2N1cyIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIg''@;'; put 'put ''Y2xyLXRyZWVub2RlLWNoZWNrYm94Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1jb250ZW50IiwzLCJtb3VzZXVwIiw0LCJuZ0lmIl0sWzEsImNsci10cmVlbm9kZS1jaGlsZHJlbiJdLFszLCJwYXJlbnQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24i''@;'; put 'put ''LCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSIsMSwiY2xyLXRyZWVub2RlLWNhcmV0LWljb24iXSxbMSwiY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIl0sWzEsImNsci10cmVl''@;'; put 'put ''bm9kZS1zcGlubmVyIiwic3Bpbm5lciJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciIsImNsci10cmVlbm9kZS1jaGVja2JveCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLWNoZWNrYm94IiwzLCJjaGFuZ2UiLCJmb2N1''@;'; put 'put ''cyIsImlkIiwiZGlzYWJsZWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsMywiZm9yIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXRyZWVub2RlLWNvbnRlbnQiLDMsIm1vdXNldXAiXSxbImNsYXNzIiwiY2xyLXNyLW9ubHkiLDQs''@;'; put 'put ''Im5nSWYiXSxbMSwiY2xyLXNyLW9ubHkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9TG4oKTtzYSh6amUpLGRlKDAsImRpdiIsMiwwKSxGdCgia2V5ZG93biIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQub25LZXlEb3duKHYpKX0pKCJmb2N1cyIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gd3QoaCksQ3QoZC5icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCkpfSksZ3QoMixaamUsMiwyLCJidXR0b24iLDMpKDMsV2plLDIsMCwiZGl2Iiw0KSg0LFlqZSw0LDYsImRpdiIsNSkoNSxHamUsMiwxLCJkaXYiLDYpKDYsS2plLDIsMSwibmctdGVtcGxhdGUiLG51''@;'; put 'put ''bGwsMSxJYyksaGUoKSxkZSg4LCJkaXYiLDcpLFlyKDkpLFlyKDEwLDEpLEd0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSxoZSgpfTImYSYmKFRyKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmRpc2FibGVkKSxocigiYXJpYS1kaXNhYmxlZCIsZC5kaXNhYmxlZCkoImFy''@;'; put 'put ''aWEtZXhwYW5kZWQiLGQuaXNFeHBhbmRhYmxlKCk/ZC5leHBhbmRlZDpudWxsKSgiYXJpYS1zZWxlY3RlZCIsZC5hcmlhU2VsZWN0ZWQpLGZlKDIpLE1lKCJuZ0lmIixkLmlzRXhwYW5kYWJsZSgpJiYhZC5pc01vZGVsTG9hZGluZyYmIWQuZXhwYW5kU2VydmljZS5sb2FkaW5nKSxmZSgpLE1l''@;'; put 'put ''KCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksZmUoKSxNZSgibmdJZiIsZC5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSksZmUoKSxNZSgibmdJZiIsIWQuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLGZlKDMpLE1lKCJAdG9nZ2xlQ2hpbGRy''@;'; put 'put ''ZW5BbmltIixkLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIiksaHIoInJvbGUiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24/Imdyb3VwIjpudWxsKSxmZSgzKSxNZSgicGFyZW50IixkLl9tb2RlbCkpfSxkZXBlbmRl''@;'; put 'put ''bmNpZXM6W2JhLE4xLHJzLHpkZV0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbeWgoInRvZ2dsZUNoaWxkcmVuQW5pbSIsW2l1KCJjb2xsYXBzZWQgPT4gZXhwYW5kZWQiLFt1cyh7aGVpZ2h0OjB9KSxNMCgyMDAsdXMoe2hlaWdodDoiKiJ9KSldKSxpdSgiZXhwYW5kZWQgPT4g''@;'; put 'put ''Y29sbGFwc2VkIixbdXMoe2hlaWdodDoiKiJ9KSxNMCgyMDAsdXMoe2hlaWdodDowfSkpXSksU0woImV4cGFuZGVkIix1cyh7aGVpZ2h0OiIqIiwib3ZlcmZsb3cteSI6InZpc2libGUifSkpLFNMKCJjb2xsYXBzZWQiLHVzKHtoZWlnaHQ6MH0pKV0pXX19KSxjfSkoKTtmdW5jdGlvbiBXZGUo''@;'; put 'put ''Yyl7cmV0dXJuIGMudG9Mb2NhbGVMb3dlckNhc2UoKS50cmltKCl9bGV0IEVoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmVsPWYsdGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb25zPVtdLHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlPSExO2NvbnN0IE09di5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eGQoZi5uYXRpdmVFbGVtZW50LCJmb2N1c2luIikuc3Vic2NyaWJlKEQ9PntELnRhcmdldD09PWYubmF0aXZlRWxlbWVudCYmKGQuZm9jdXNGaXJzdFZpc2li''@;'; put 'put ''bGVOb2RlKCksaC5yZW1vdmVBdHRyaWJ1dGUoZi5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChNKX1zZXQgbGF6eShhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hYX1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''aXNNdWx0aVNlbGVjdGFibGV9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0TXVsdGlTZWxlY3RhYmxlKCksdGhpcy5zZXRSb290Tm9kZXMo''@;'; put 'put ''KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0TXVsdGlTZWxlY3RhYmxlKCl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjA/KHRoaXMuX2lzTXVsdGlTZWxlY3Rh''@;'; put 'put ''YmxlPSEwLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIikpOih0aGlzLl9pc011bHRpU2VsZWN0YWJsZT0hMSx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1l''@;'; put 'put ''bnQsImFyaWEtbXVsdGlzZWxlY3RhYmxlIikpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10aGlzLnJvb3ROb2Rlcy5tYXAoYT0+YS5fbW9kZWwpLmZpbHRlcihhPT4hYS5wYXJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKShHZShPNyksR2UoU0cpLEdlKEVvKSxHZShKaSksR2UoV2EpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxQZCw0KSwyJmEpe2xldCBm''@;'; put 'put ''O0NpKGY9U2koKSkmJihkLnJvb3ROb2Rlcz1mKX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigicm9sZSIsInRyZWUiKX0saW5wdXRzOntsYXp5OltObi5Ob25lLCJjbHJMYXp5IiwibGF6eSJdfSxmZWF0''@;'; put 'put ''dXJlczpbZGEoW2pkZSxTR10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMywiY2hpbGRyZW4iLDQsIm5nSWYiXSxbMywiY2hpbGRyZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApLGd0KDEscWplLDEsMSwiY2xyLXJl''@;'; put 'put ''Y3Vyc2l2ZS1jaGlsZHJlbiIsMCkpLDImYSYmKGZlKCksTWUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6W2JhLHpkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZFdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhF''@;'; put 'put ''eSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLFBZXX0pLGN9KSgpLGhXZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltyV2UsYVdlLGRXZV19KSxjfSkoKTtjb25zdCBmV2U9WyJpbmZvIiwid2FybmluZyIsImRhbmdlciIsInN1Y2Nlc3MiLCJuZXV0cmFsIiwidW5rbm93biIsImxv''@;'; put 'put ''YWRpbmciXTtsZXQgTUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmRlZmF1bHRJY29uU2hhcGU9ImluZm8tc3RhbmRhcmQiLHRoaXMuX2FsZXJ0SWNvblNoYXBlPSIiLHRoaXMuX2FsZXJ0VHlwZT0iaW5mbyJ9Z2V0IGFsZXJ0VHlwZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXtmV2UuaW5kZXhPZihhKT4tMSYmKHRoaXMuX2FsZXJ0VHlwZT1hKX1nZXQgYWxlcnRJY29uU2hhcGUoKXtyZXR1cm4iIj09PXRoaXMuX2FsZXJ0SWNvblNoYXBlP3RoaXMuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLl9hbGVy''@;'; put 'put ''dFR5cGUpLnNoYXBlOnRoaXMuX2FsZXJ0SWNvblNoYXBlfXNldCBhbGVydEljb25TaGFwZShhKXthP2EhPT10aGlzLl9hbGVydEljb25TaGFwZSYmKHRoaXMuX2FsZXJ0SWNvblNoYXBlPWEpOnRoaXMuX2FsZXJ0SWNvblNoYXBlPSIifWdldCBhbGVydEljb25UaXRsZSgpe3JldHVybiB0aGlz''@;'; put 'put ''Lmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS50aXRsZX1pY29uSW5mb0Zyb21UeXBlKGEpe2NvbnN0IGQ9e3NoYXBlOiIiLGNzc0NsYXNzOiIiLHRpdGxlOiIifTtzd2l0Y2goYSl7Y2FzZSJ3YXJuaW5nIjpkLnNoYXBlPSJ3YXJuaW5nLXN0YW5kYXJkIixkLmNzc0NsYXNzPSJh''@;'; put 'put ''bGVydC13YXJuaW5nIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLndhcm5pbmc7YnJlYWs7Y2FzZSJkYW5nZXIiOmQuc2hhcGU9ImVycm9yLXN0YW5kYXJkIixkLmNzc0NsYXNzPSJhbGVydC1kYW5nZXIiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyO2Jy''@;'; put 'put ''ZWFrO2Nhc2Uic3VjY2VzcyI6ZC5zaGFwZT0ic3VjY2Vzcy1zdGFuZGFyZCIsZC5jc3NDbGFzcz0iYWxlcnQtc3VjY2VzcyIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdWNjZXNzO2JyZWFrO2Nhc2UibmV1dHJhbCI6ZC5zaGFwZT0ibm90ZSIsZC5jc3NDbGFzcz0iYWxlcnQt''@;'; put 'put ''bmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5uZXV0cmFsO2JyZWFrO2Nhc2UidW5rbm93biI6ZC5zaGFwZT0iaGVscCIsZC5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy51bmtub3duO2JyZWFrO2Nhc2UibG9h''@;'; put 'put ''ZGluZyI6ZC5zaGFwZT0ibG9hZGluZyIsZC5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy51bmtub3duO2JyZWFrO2RlZmF1bHQ6ZC5zaGFwZT10aGlzLmRlZmF1bHRJY29uU2hhcGUsZC5jc3NDbGFzcz0iYWxlcnQtaW5mbyIsZC50aXRs''@;'; put 'put ''ZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5pbmZvfXJldHVybiBkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihpcykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGhPPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2U9bmV3IFdufWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe2EhPT10aGlzLl9jdXJyZW50JiYodGhpcy5fY3Vy''@;'; put 'put ''cmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpKX1nZXQgYWN0aXZlQWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzJiZ0aGlzLmFsbEFsZXJ0cy5maWx0ZXIoYT0+IWEuX2Nsb3NlZCl9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0cyYmdGhpcy5hY3RpdmVB''@;'; put 'put ''bGVydHNbdGhpcy5jdXJyZW50XX1zZXQgY3VycmVudEFsZXJ0KGEpe3RoaXMuY3VycmVudD10aGlzLmFjdGl2ZUFsZXJ0cy5pbmRleE9mKGEpfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0cyYmdGhpcy5hY3RpdmVBbGVydHMubGVuZ3RofHwwfW1hbmFnZShhKXt0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmFsbEFsZXJ0cz1hLHRoaXMuY3VycmVudD0ibnVtYmVyIj09dHlwZW9mIHRoaXMuX2N1cnJlbnQ/dGhpcy5fY3VycmVudDowLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudCksdGhpcy5zdWJzY3Jp''@;'; put 'put ''cHRpb249dGhpcy5hbGxBbGVydHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmN1cnJlbnQ+PXRoaXMuYWxsQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudD1NYXRoLm1heCgwLHRoaXMuYWxsQWxlcnRzLmxlbmd0aC0xKSl9KX1uZXh0KCl7dGhpcy5fY3VycmVudD10aGlzLmN1cnJl''@;'; put 'put ''bnQ9PT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgtMT8wOnRoaXMuY3VycmVudCsxLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpfXByZXZpb3VzKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ9MD09PXRoaXMuY3VycmVudD90aGlzLmFjdGl2''@;'; put 'put ''ZUFsZXJ0cy5sZW5ndGgtMTp0aGlzLmN1cnJlbnQtMSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9b3BlbigpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJih0aGlzLmN1cnJlbnRBbGVydHx8KHRoaXMuX2N1cnJlbnQ9MCksdGhpcy5fY2hhbmdlLm5leHQodGhpcy5f''@;'; put 'put ''Y3VycmVudCkpfWNsb3NlKGEpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJihhJiYodGhpcy5fY3VycmVudD1NYXRoLm1heCgwLHRoaXMuY3VycmVudC0xKSksdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCkpfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm''@;'; put 'put ''LHYsTSl7dGhpcy5pY29uU2VydmljZT1hLHRoaXMuY2RyPWQsdGhpcy5tdWx0aUFsZXJ0U2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMucmVuZGVyZXI9dix0aGlzLmhvc3RFbGVtZW50PU0sdGhpcy5pc1NtYWxsPSExLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5pc0FwcExldmVs''@;'; put 'put ''PSExLHRoaXMuY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbCx0aGlzLl9jbG9zZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5fY2xvc2VkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9pc0xpZ2h0''@;'; put 'put ''d2VpZ2h0PSExfWdldCBpc0xpZ2h0d2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2lzTGlnaHR3ZWlnaHR9c2V0IGlzTGlnaHR3ZWlnaHQoYSl7dGhpcy5faXNMaWdodHdlaWdodD1hLHRoaXMuY29uZmlnQWxlcnRUeXBlKHRoaXMuX29yaWdBbGVydFR5cGUpfWdldCBhbGVydFR5cGUoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXt0aGlzLl9vcmlnQWxlcnRUeXBlPWEsdGhpcy5jb25maWdBbGVydFR5cGUoYSl9c2V0IGFsZXJ0SWNvblNoYXBlKGEpe3RoaXMuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGU9YX1zZXQgY2xvc2VkKGEpe2EmJiF0''@;'; put 'put ''aGlzLl9jbG9zZWQ/dGhpcy5jbG9zZSgpOiFhJiZ0aGlzLl9jbG9zZWQmJnRoaXMub3BlbigpfWdldCBhbGVydENsYXNzKCl7cmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZSkuY3NzQ2xhc3N9Z2V0IGhpZGRlbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9oaWRkZW59c2V0IGhpZGRlbihhKXthIT09dGhpcy5faGlkZGVuJiYodGhpcy5faGlkZGVuPWEsdGhpcy5faGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCJhbGVydC1oaWRkZW4iKTp0aGlzLnJlbmRlcmVyLnJl''@;'; put 'put ''bW92ZUNsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwiYWxlcnQtaGlkZGVuIiksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1uZ09uSW5pdCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubXVsdGlBbGVydFNlcnZpY2Uu''@;'; put 'put ''Y2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhpZGRlbj10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydCE9PXRoaXN9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWNvbmZpZ0FsZXJ0VHlwZShhKXt0aGlz''@;'; put 'put ''Lmljb25TZXJ2aWNlLmFsZXJ0VHlwZT1hfW9wZW4oKXt0aGlzLl9jbG9zZWQ9ITEsdGhpcy5tdWx0aUFsZXJ0U2VydmljZSYmdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5vcGVuKCksdGhpcy5fY2xvc2VkQ2hhbmdlZC5lbWl0KCExKX1jbG9zZSgpe2lmKCF0aGlzLmNsb3NhYmxlKXJldHVybjtj''@;'; put 'put ''b25zdCBhPXRoaXMubXVsdGlBbGVydFNlcnZpY2U/LmN1cnJlbnRBbGVydD09PXRoaXM7dGhpcy5fY2xvc2VkPSEwLHRoaXMubXVsdGlBbGVydFNlcnZpY2U/LmFjdGl2ZUFsZXJ0cyYmdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jbG9zZShhKSx0aGlzLl9jbG9zZWRDaGFuZ2VkLmVtaXQoITAp''@;'; put 'put ''fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShNRyksR2UoRXMpLEdlKGhPLDgpLEdlKGlzKSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0Il1dLGlucHV0czp7aXNTbWFsbDpbTm4u''@;'; put 'put ''Tm9uZSwiY2xyQWxlcnRTaXplU21hbGwiLCJpc1NtYWxsIl0sY2xvc2FibGU6W05uLk5vbmUsImNsckFsZXJ0Q2xvc2FibGUiLCJjbG9zYWJsZSJdLGlzQXBwTGV2ZWw6W05uLk5vbmUsImNsckFsZXJ0QXBwTGV2ZWwiLCJpc0FwcExldmVsIl0sY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw6ImNs''@;'; put 'put ''ckNsb3NlQnV0dG9uQXJpYUxhYmVsIixpc0xpZ2h0d2VpZ2h0OltObi5Ob25lLCJjbHJBbGVydExpZ2h0d2VpZ2h0IiwiaXNMaWdodHdlaWdodCJdLGFsZXJ0VHlwZTpbTm4uTm9uZSwiY2xyQWxlcnRUeXBlIiwiYWxlcnRUeXBlIl0sYWxlcnRJY29uU2hhcGU6W05uLk5vbmUsImNsckFsZXJ0''@;'; put 'put ''SWNvbiIsImFsZXJ0SWNvblNoYXBlIl0sY2xvc2VkOltObi5Ob25lLCJjbHJBbGVydENsb3NlZCIsImNsb3NlZCJdfSxvdXRwdXRzOntfY2xvc2VkQ2hhbmdlZDoiY2xyQWxlcnRDbG9zZWRDaGFuZ2UifSxmZWF0dXJlczpbZGEoW01HXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczox''@;'; put 'put ''LHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJhbGVydCIsMywibmdDbGFzcyIsImFsZXJ0LXNtIiwiYWxlcnQtbGlnaHR3ZWlnaHQiLCJhbGVydC1hcHAtbGV2ZWwiLDQsIm5nSWYiXSxbMSwiYWxlcnQiLDMsIm5nQ2xhc3MiXSxbMSwiYWxlcnQtaXRlbXMiXSxbInR5cGUiLCJidXR0b24iLCJj''@;'; put 'put ''bGFzcyIsImNsb3NlIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCxKamUsNCw4LCJkaXYiLDApKSwyJmEmJk1lKCJu''@;'; put 'put ''Z0lmIiwhZC5fY2xvc2VkKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5pY29uU2VydmljZT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KShHZShNRykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnQtaXRlbSJdXSxob3N0QXR0cnM6WzEsImFsZXJ0LWl0ZW0iXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiYWxlcnQtaWNvbi13cmFwcGVyIl0sWyJj''@;'; put 'put ''bGFzcyIsImFsZXJ0LXNwaW5uZXIiLCJjbHJJbmxpbmUiLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQtaWNvbiIsInJvbGUiLCJpbWciLDQsIm5nSWYiXSxbImNscklubGluZSIsIiIsMSwiYWxlcnQtc3Bpbm5lciJdLFsicm9sZSIsImltZyIsMSwiYWxlcnQtaWNvbiJdXSx0ZW1wbGF0''@;'; put 'put ''ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwiZGl2IiwwKSxndCgxLFFqZSwxLDAsImNsci1zcGlubmVyIiwxKSgyLGV6ZSwxLDIsImNkcy1pY29uIiwyKSxoZSgpLFlyKDMpKSwyJmEmJihmZSgpLE1lKCJuZ0lmIiwibG9hZGluZyI9PT1kLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNo''@;'; put 'put ''YXBlKSxmZSgpLE1lKCJuZ0lmIiwibG9hZGluZyIhPT1kLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSl9LGRlcGVuZGVuY2llczpbYmEscnMsUmRdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFF4PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImFsZXJ0LXRleHQiXV19KSxjfSkoKSxHZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmN1''@;'; put 'put ''cnJlbnRBbGVydENoYW5nZT1uZXcgS3IoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEtyfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0aUFsZXJ0''@;'; put 'put ''U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IHByZXZpb3VzQWxlcnRBcmlh''@;'; put 'put ''TGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbCx7Q1VSUkVOVDooMT09PWE/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5j''@;'; put 'put ''b3VudDphLTEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9Z2V0IG5leHRBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5j''@;'; put 'put ''b21tb25TdHJpbmdzLmtleXMuYWxlcnROZXh0QWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KGE9PT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PzE6YSsxKS50b1N0cmluZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQudG9TdHJpbmcoKX0pfW5nT25Jbml0KCl7dGhp''@;'; put 'put ''cy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXM9dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5lbWl0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLmVtaXQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5hY3Rp''@;'; put 'put ''dmVBbGVydHNbYV0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcy51bnN1YnNjcmliZSgpfXBhZ2VVcCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubmV4dCgpfXBhZ2VEb3duKCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5wcmV2aW91cygpfX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShoTyksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cy1wYWdlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImFsZXJ0''@;'; put 'put ''cy1wYWdlciIsITApfSxpbnB1dHM6e2N1cnJlbnRBbGVydDpbTm4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0IiwiY3VycmVudEFsZXJ0Il0sY3VycmVudEFsZXJ0SW5kZXg6W05uLk5vbmUsImNsckN1cnJlbnRBbGVydEluZGV4IiwiY3VycmVudEFsZXJ0SW5kZXgiXX0sb3V0cHV0czp7Y3VycmVu''@;'; put 'put ''dEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGRlY2xzOjksdmFyczo2LGNvbnN0czpbWzEsImFsZXJ0cy1wYWdlci1jb250cm9sIl0sWzEsImFsZXJ0cy1wYWdlLWRvd24iXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImFsZXJ0cy1wYWdlci1idXR0b24iLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsxLCJhbGVydHMtcGFnZXItdGV4dCJdLFsxLCJhbGVydHMtcGFnZS11cCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJp''@;'; put 'put ''Z2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBhZ2VEb3duKCl9KSxHdCgzLCJjZHMtaWNvbiIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksTGUoNSks''@;'; put 'put ''aGUoKSxkZSg2LCJkaXYiLDUpKDcsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBhZ2VVcCgpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCkoKSgpKSwyJmEmJihmZSgyKSxocigiYXJpYS1sYWJlbCIsZC5wcmV2aW91c0FsZXJ0QXJpYUxhYmVsKSxmZSgpLGhy''@;'; put 'put ''KCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXMpLGZlKDIpLFV1KCIiLGQubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudCsxLCIgLyAiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQsIiIpLGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLm5leHRBbGVydEFyaWFMYWJlbCksZmUo''@;'; put 'put ''KSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHQpKX0sZGVwZW5kZW5jaWVzOltyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksJGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT1hLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdl''@;'; put 'put ''PW5ldyBLcighMSksdGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZT1uZXcgS3IoITEpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1zZXQgYWxsQWxlcnRzKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubWFuYWdlKGEpfXNldCBfaW5wdXRDdXJyZW50SW5kZXgoYSl7TnVtYmVyLmlzSW50ZWdl''@;'; put 'put ''cihhKSYmYT49MCYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1hKX1nZXQgY3VycmVudEFsZXJ0SW5kZXgoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50fXNldCBjdXJyZW50QWxlcnRJbmRleChhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9''@;'; put 'put ''YX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0fXNldCBjdXJyZW50QWxlcnQoYSl7YSYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0PWEpfWdldCBhbGVydHMoKXtyZXR1cm4gdGhpcy5hbGxBbGVydHMuZmls''@;'; put 'put ''dGVyKGE9PiExPT09YS5oaWRkZW4pfWdldCBjdXJyZW50QWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0P3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0LmFsZXJ0VHlwZToiIn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlLm5leHQoYSksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UubmV4dCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydCl9''@;'; put 'put ''KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMubXVsdGlBbGVydFNlcnZpY2UuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShoTykpfSxjLlx1MDI3NWNt''@;'; put 'put ''cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnRzIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsSngsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5hbGxBbGVydHM9Zil9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24o''@;'; put 'put ''YSxkKXsyJmEmJlRyKCJhbGVydHMiLCEwKSgiYWxlcnQtZGFuZ2VyIiwiZGFuZ2VyIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtaW5mbyIsImluZm8iPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1zdWNjZXNzIiwic3VjY2VzcyI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0''@;'; put 'put ''LXdhcm5pbmciLCJ3YXJuaW5nIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtbmV1dHJhbCIsIm5ldXRyYWwiPT1kLmN1cnJlbnRBbGVydFR5cGUpfSxpbnB1dHM6e19pbnB1dEN1cnJlbnRJbmRleDpbTm4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5wdXRDdXJyZW50SW5k''@;'; put 'put ''ZXgiXSxjdXJyZW50QWxlcnQ6W05uLk5vbmUsImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdl''@;'; put 'put ''In0sZmVhdHVyZXM6W2RhKFtoT10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6bnplLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzEsImFsZXJ0cy13cmFwcGVyIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4Iiw0LCJuZ0lmIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4Il1dLHRlbXBsYXRlOmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7MSZhJiYoc2EodHplKSxkZSgwLCJkaXYiLDApLGd0KDEscnplLDEsMSwiY2xyLWFsZXJ0cy1wYWdlciIsMSksWXIoMiksaGUoKSksMiZhJiYoZmUoKSxNZSgibmdJZiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKSl9LGRlcGVuZGVuY2llczpbYmEsR2RlXSxzdHls''@;'; put 'put ''ZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxLZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHNZLFlPZSxHT2UsJE9lLGxZLEtPZSx2eCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''fSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLE5ZLGp5XX0pLGN9KSgpLHBXZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30p''@;'; put 'put ''LGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltLZGVdfSksY30pKCkscWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YX1zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJuby1zY3JvbGxpbmciKX1yZXN1bWVTY3Jv''@;'; put 'put ''bGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygibm8tc2Nyb2xsaW5nIikmJnRoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgibm8tc2Nyb2xsaW5nIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''KHhyKHZzKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmZhZGVNb3ZlPSJmYWRlRG93biIsdGhpcy5iYWNrZHJvcD0hMH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksb3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlPWEsdGhpcy5jb21t''@;'; put 'put ''b25TdHJpbmdzPWQsdGhpcy5tb2RhbFN0YWNrU2VydmljZT1oLHRoaXMuY29uZmlndXJhdGlvbj1mLHRoaXMubW9kYWxJZD1NdSgpLHRoaXMuX29wZW49ITEsdGhpcy5fb3BlbkNoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLmNsb3NhYmxlPSEwLHRoaXMuY2xvc2VCdXR0b25BcmlhTGFiZWw9dGhp''@;'; put 'put ''cy5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UsdGhpcy5zaXplPSJtZCIsdGhpcy5zdGF0aWNCYWNrZHJvcD0hMCx0aGlzLnNraXBBbmltYXRpb249ITEsdGhpcy5zdG9wQ2xvc2U9ITEsdGhpcy5hbHRDbG9zZT1uZXcgS3IoITEpLHRoaXMuYnlwYXNzU2Nyb2xsU2VydmljZT0hMX1nZXQgZmFk''@;'; put 'put ''ZU1vdmUoKXtyZXR1cm4gdGhpcy5za2lwQW5pbWF0aW9uPyIiOnRoaXMuY29uZmlndXJhdGlvbi5mYWRlTW92ZX1zZXQgZmFkZU1vdmUoYSl7dGhpcy5jb25maWd1cmF0aW9uLmZhZGVNb3ZlPWF9Z2V0IGJhY2tkcm9wKCl7cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5iYWNrZHJvcH1uZ09u''@;'; put 'put ''Q2hhbmdlcyhhKXshdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlJiZhJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwiX29wZW4iKSYmKGEuX29wZW4uY3VycmVudFZhbHVlPyh0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnN0b3BTY3JvbGxpbmcoKSx0aGlzLm1vZGFsU3Rh''@;'; put 'put ''Y2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpKTp0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnJlc3VtZVNjcm9sbGluZygpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCl9b3Blbigpe3RoaXMuX29wZW58fCh0aGlzLl9vcGVuPSEwLHRo''@;'; put 'put ''aXMuX29wZW5DaGFuZ2VkLmVtaXQoITApLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbE9wZW4odGhpcykpfWJhY2tkcm9wQ2xpY2soKXt0aGlzLnN0YXRpY0JhY2tkcm9wP3RoaXMudGl0bGUubmF0aXZlRWxlbWVudC5mb2N1cygpOnRoaXMuY2xvc2UoKX1jbG9zZSgpe3RoaXMu''@;'; put 'put ''c3RvcENsb3NlP3RoaXMuYWx0Q2xvc2UuZW1pdCghMSk6IXRoaXMuY2xvc2FibGV8fCF0aGlzLl9vcGVufHwodGhpcy5fb3Blbj0hMSl9ZmFkZURvbmUoYSl7InZvaWQiPT09YS50b1N0YXRlJiYodGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFj''@;'; put 'put ''a01vZGFsQ2xvc2UodGhpcykpfXNjcm9sbFRvcCgpe3RoaXMuYm9keUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUbygwLDApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShxZGUpLEdlKGlzKSxHZShBZGUpLEdlKFhkZSkpfSxjLlx1''@;'; put 'put ''MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9kYWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxpemUsNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5tb2RhbENvbnRlbnRUZW1wbGF0ZT1mLmZpcnN0KX19LHZpZXdRdWVyeTpm''@;'; put 'put ''dW5jdGlvbihhLGQpe2lmKDEmYSYmKHFhKEMxZSw1KSxxYShTMWUsNSkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGl0bGU9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuYm9keUVsZW1lbnRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezIm''@;'; put 'put ''YSYmVHIoIm9wZW4iLGQuX29wZW4pfSxpbnB1dHM6e19vcGVuOltObi5Ob25lLCJjbHJNb2RhbE9wZW4iLCJfb3BlbiJdLGNsb3NhYmxlOltObi5Ob25lLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xvc2FibGUiXSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpbTm4uTm9uZSwiY2xyTW9kYWxDbG9zZUJ1''@;'; put 'put ''dHRvbkFyaWFMYWJlbCIsImNsb3NlQnV0dG9uQXJpYUxhYmVsIl0sc2l6ZTpbTm4uTm9uZSwiY2xyTW9kYWxTaXplIiwic2l6ZSJdLHN0YXRpY0JhY2tkcm9wOltObi5Ob25lLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwic3RhdGljQmFja2Ryb3AiXSxza2lwQW5pbWF0aW9uOltObi5Ob25l''@;'; put 'put ''LCJjbHJNb2RhbFNraXBBbmltYXRpb24iLCJza2lwQW5pbWF0aW9uIl0sc3RvcENsb3NlOltObi5Ob25lLCJjbHJNb2RhbFByZXZlbnRDbG9zZSIsInN0b3BDbG9zZSJdLGxhYmVsbGVkQnk6W05uLk5vbmUsImNsck1vZGFsTGFiZWxsZWRCeUlkIiwibGFiZWxsZWRCeSJdLGJ5cGFzc1Njcm9s''@;'; put 'put ''bFNlcnZpY2U6W05uLk5vbmUsImNsck1vZGFsT3ZlcnJpZGVTY3JvbGxTZXJ2aWNlIiwiYnlwYXNzU2Nyb2xsU2VydmljZSJdfSxvdXRwdXRzOntfb3BlbkNoYW5nZWQ6ImNsck1vZGFsT3BlbkNoYW5nZSIsYWx0Q2xvc2U6ImNsck1vZGFsQWx0ZXJuYXRlQ2xvc2UifSxmZWF0dXJlczpbZGEo''@;'; put 'put ''W10sW3FkZV0pLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6b3plLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJ0aXRsZSIsIiJdLFsiYm9keSIsIiJdLFsiY2xhc3MiLCJtb2RhbCIsMywibW9kYWwtZnVsbC1zY3JlZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ryb3AiLCJhcmlh''@;'; put 'put ''LWhpZGRlbiIsInRydWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsIl0sWyJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwiYXJpYS1tb2RhbCIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyIsMywiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiXSxbMSwiY2xyLXNyLW9ubHki''@;'; put 'put ''XSxbImNsYXNzIiwibW9kYWwtY29udGVudC13cmFwcGVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIl0sWyJjZGtGb2N1c0luaXRpYWwiLCIiLCJ0YWJpbmRl''@;'; put 'put ''eCIsIi0xIiwxLCJtb2RhbC10aXRsZS13cmFwcGVyIiwzLCJpZCJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHktd3JhcHBlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIs''@;'; put 'put ''IndpbmRvdy1jbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1iYWNrZHJvcCIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShhemUpLGd0KDAsY3plLDcsMTYsImRpdiIsMikoMSx1emUsMSwxLCJkaXYiLDMpKSwyJmEmJihNZSgibmdJZiIs''@;'; put 'put ''ZC5fb3BlbiksZmUoKSxNZSgibmdJZiIsZC5iYWNrZHJvcCkpfSxkZXBlbmRlbmNpZXM6W2JhLFp5LHJzXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlt5aCgiZmFkZU1vdmUiLFtpdSgiKiA9PiBmYWRlRG93biIsW3VzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUo''@;'; put 'put ''MCwgLTI1JSkifSksTTAoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGl1KCJmYWRlRG93biA9PiAqIixbTTAoIjAuMnMgZWFzZS1pbi1vdXQiLHVzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSksaXUoIiogPT4gZmFkZUxlZnQiLFt1cyh7b3BhY2l0eTowLHRy''@;'; put 'put ''YW5zZm9ybToidHJhbnNsYXRlKDI1JSwgMCkifSksTTAoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGl1KCJmYWRlTGVmdCA9PiAqIixbTTAoIjAuMnMgZWFzZS1pbi1vdXQiLHVzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMjUlLCAwKSJ9KSldKV0pLHloKCJmYWRlIixbaXUoInZv''@;'; put 'put ''aWQgPT4gKiIsW3VzKHtvcGFjaXR5OjB9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIsdXMoe29wYWNpdHk6Ljg1fSkpXSksaXUoIiogPT4gdm9pZCIsW00wKCIwLjJzIGVhc2UtaW4tb3V0Iix1cyh7b3BhY2l0eTowfSkpXSldKV19fSksY30pKCksS3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihhLGQsaCl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuaG9zdD1kLHRoaXMudGFiaW5kZXg9IjAiLHRoaXMudW5saXN0ZW5lcnM9W10saC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMub2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT50aGlzLmFkZE9yUmVtb3ZlVGFiSW5kZXgoKSks''@;'; put 'put ''dGhpcy5vYnNlcnZlci5vYnNlcnZlKGQubmF0aXZlRWxlbWVudCksdGhpcy51bmxpc3RlbmVycy5wdXNoKGEubGlzdGVuKGQubmF0aXZlRWxlbWVudCwibW91c2V1cCIsKCk9Pnt0aGlzLmFkZE9yUmVtb3ZlVGFiSW5kZXgoKX0pLGEubGlzdGVuKGQubmF0aXZlRWxlbWVudCwibW91c2Vkb3du''@;'; put 'put ''IiwoKT0+e3RoaXMucmVtb3ZlVGFiSW5kZXgoKX0pKX0pfW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLnVubGlzdGVuZXJzLmxlbmd0aDspdGhpcy51bmxpc3RlbmVycy5wb3AoKSgpO3RoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMub2JzZXJ2ZXI9bnVsbH1hZGRUYWJJbmRleCgpe3Ro''@;'; put 'put ''aXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsdGhpcy50YWJpbmRleCl9cmVtb3ZlVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKX1hZGRPclJl''@;'; put 'put ''bW92ZVRhYkluZGV4KCl7Y29uc3QgYT10aGlzLmhvc3QubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2EmJmEuY2xpZW50SGVpZ2h0PGEuc2Nyb2xsSGVpZ2h0P3RoaXMuYWRkVGFiSW5kZXgoKTp0aGlzLnJlbW92ZVRhYkluZGV4KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVvKSxHZShKaSksR2UoV2EpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJtb2RhbC1ib2R5Il1dfSksY30pKCksZk89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZ4KX19cmV0dXJuIGMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsS0wsQXMsQXNdfSksY30pKCksZ1dlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEtMLEFzLGZPLGZPLEFzXX0pLGN9KSgpLG1XZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVt''@;'; put 'put ''b2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKSxiV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHFPZSxYT2Usc1ksbFkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxqeSxBcyxqeV19KSxjfSkoKSxTV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHNZLGxZKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsZk8sS2RlXX0pLGN9KSgpLHowPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpj''@;'; put 'put ''fSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3BXZSxoV2UsQXMsZk8sUFksTzIsQkwsbFVlLENkZSxpWmUsVFVlLFNXZSxnV2UsS3plLGp5LG1XZSxWeCxiV2VdfSksY30pKCksTVdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmxvZ2dl''@;'; put 'put ''clNlcnZpY2U9ZCx0aGlzLl9zdWJzY3JpcHRpb249bmV3IHF0LHRoaXMubG9hZGluZz0hMSx0aGlzLmFsZXJ0Q2xvc2VkPSEwLHRoaXMuZGF0YT17dXNlcjpudWxsLHBhc3M6bnVsbH19bmdPbkluaXQoKXsiUmVkaXJlY3RlZCIhPT10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5s''@;'; put 'put ''b2dpbk1lY2hhbmlzbSYmKHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4uc3Vic2NyaWJlKGQ9Pnt0aGlzLmlzQWN0aXZlPWQ7bGV0IGg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpO2gmJihkP2guY2xhc3NMaXN0LmFkZCgic2hvdWxkLWxvZ2lu''@;'; put 'put ''Iik6aC5jbGFzc0xpc3QucmVtb3ZlKCJzaG91bGQtbG9naW4iKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zdWJtaXQoKXt0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9ITAsdGhpcy5kYXRhLnVzZXImJnRoaXMuZGF0YS5wYXNzJiZ0aGlz''@;'; put 'put ''LnNhc1NlcnZpY2UubG9naW4odGhpcy5kYXRhLnVzZXIsdGhpcy5kYXRhLnBhc3MpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSxhfHwodGhpcy5lcnJvck1zZz0iVXNlcm5hbWUgb3IgcGFzc3dvcmQgaW52YWxpZCIsdGhpcy5hbGVydENsb3NlZD0hMSl9LGE9Pnt0aGlzLmxvZ2dlclNlcnZp''@;'; put 'put ''Y2UubG9nKGEpLHRoaXMubG9hZGluZz0hMSx0aGlzLmVycm9yTXNnPWEsdGhpcy5hbGVydENsb3NlZD0hMX0pKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShCcyksR2UoU2QpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImFwcC1sb2dpbiJdXSxkZWNsczoyMCx2YXJzOjksY29uc3RzOltbMSwibG9naW4tc2lkZWJhci13cmFwcGVyIl0sWzEsImxvZ2luLXNpZGViYXIiLCJzaWRlQmFyUHJvcHMiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxO''@;'; put 'put ''MExDZmRBPT0vd2ViOS9pbWFnZXMvZGF0YWNvbnRyb2xsZXItc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyIsMSwibG9naW4tbG9nbyJdLFsxLCJsb2dpbiIsMywibmdTdWJtaXQiXSxbMSwidGl0bGUiXSxbMSwid2VsY29tZSJdLFsxLCJoaW50Il0sWzEsImxvZ2luLWdyb3VwIl0s''@;'; put 'put ''WyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJ1c2VyIiwidHlwZSIsInRleHQiLCJwbGFjZWhvbGRlciIsIlVzZXJuYW1lIiwxLCJ1c2VybmFtZSIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNscklucHV0IiwiIiwibmFtZSIsInBhc3MiLCJ0eXBlIiwicGFzc3dvcmQiLCJwbGFjZWhv''@;'; put 'put ''bGRlciIsIlBhc3N3b3JkIiwxLCJwYXNzd29yZCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydENsb3NlZCJdLFsiY2xyLWFsZXJ0LWl0ZW0iLCIiLDEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQt''@;'; put 'put ''dGV4dCJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLEd0KDIsImltZyIsMiks''@;'; put 'put ''ZGUoMywiZm9ybSIsMyksRnQoIm5nU3VibWl0IixmdW5jdGlvbigpe3JldHVybiBoLnN1Ym1pdCgpfSksZGUoNCwibGFiZWwiLDQpKDUsImgzIiw1KSxMZSg2LCJXZWxjb21lIHRvIiksaGUoKSxMZSg3LCIgRGF0YSBDb250cm9sbGVyICIpLGRlKDgsImg0Iiw2KSxMZSg5LCJDYXB0dXJlLCBS''@;'; put 'put ''ZXZpZXcsIGFuZCBBcHByb3ZlIiksaGUoKSgpLGRlKDEwLCJkaXYiLDcpKDExLCJpbnB1dCIsOCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRhdGEudXNlcix2KXx8KGguZGF0YS51c2VyPXYpLHZ9KSxoZSgpLGRlKDEyLCJpbnB1dCIsOSksZ2koIm5nTW9k''@;'; put 'put ''ZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRhdGEucGFzcyx2KXx8KGguZGF0YS5wYXNzPXYpLHZ9KSxoZSgpLGRlKDEzLCJjbHItYWxlcnQiLDEwKSxnaSgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmFsZXJ0Q2xvc2VkLHYpfHwoaC5h''@;'; put 'put ''bGVydENsb3NlZD12KSx2fSksZGUoMTQsImRpdiIsMTEpKDE1LCJzcGFuIiwxMiksTGUoMTYpLGhlKCkoKSgpLGRlKDE3LCJidXR0b24iLDEzKSxMZSgxOCwiIExvZyBpbiAiKSxoZSgpKCkoKSgpLEd0KDE5LCJkaXYiLDE0KSxoZSgpKSwyJmQmJihUcigiYWN0aXZlIixoLmlzQWN0aXZlKSxm''@;'; put 'put ''ZSgxMSkscGkoIm5nTW9kZWwiLGguZGF0YS51c2VyKSxmZSgpLHBpKCJuZ01vZGVsIixoLmRhdGEucGFzcyksZmUoKSxNZSgiY2xyQWxlcnRUeXBlIiwiYWxlcnQtZGFuZ2VyIikscGkoImNsckFsZXJ0Q2xvc2VkIixoLmFsZXJ0Q2xvc2VkKSxmZSgzKSx3cihoLmVycm9yTXNnKSxmZSgpLE1l''@;'; put 'put ''KCJjbHJMb2FkaW5nIixoLmxvYWRpbmcpKCJkaXNhYmxlZCIsaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbDcscWwsbmwsbzcsJHMseXAsSngsUXgsajAsUDIsZHMsWjFdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24geFdlKGMsbCl7MSZjJiYoZGUoMCwic3Bh''@;'; put 'put ''biIsMTApLExlKDEsImxvYWRpbmciKSxoZSgpKX1mdW5jdGlvbiBFV2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMSksTGUoMSwibG9hZGVkIiksaGUoKSl9ZnVuY3Rpb24gVFdlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTIpLExlKDEsImZhaWxlZCIpLGhlKCkpfWZ1bmN0aW9uIEFXZShj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsInAiKSgxLCJjb2RlIiksTGUoMiksaGUoKSxMZSgzLCIgXHhhMCAiKSxndCg0LHhXZSwyLDAsInNwYW4iLDcpKDUsRVdlLDIsMCwic3BhbiIsOCkoNixUV2UsMiwwLCJzcGFuIiw5KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksd3IoYS5w''@;'; put 'put ''cm9ncmFtKSxmZSgyKSxNZSgibmdJZiIsYS5ydW5uaW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5ydW5uaW5nJiZhLnN1Y2Nlc3NmdWwpLGZlKCksTWUoIm5nSWYiLCFhLnJ1bm5pbmcmJiFhLnN1Y2Nlc3NmdWwpfX1mdW5jdGlvbiBrV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc2lnbnBvc3Qt''@;'; put 'put ''Y29udGVudCIsNSksZ3QoMSxBV2UsNyw0LCJwIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtNZSgiY2xyUG9zaXRpb24iLCJib3R0b20tbWlkZGxlIiksZmUoKSxNZSgibmdGb3JPZiIsYS5yZXF1ZXN0cyl9fWxldCBEV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubG9h''@;'; put 'put ''ZGluZz0hMSx0aGlzLnJlcXVlc3RzPVtdLHRoaXMuX2xvYWRpbmdTdWI9bmV3IHF0fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7dGhpcy5fbG9hZGluZ1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvYWRpbmctaW5kaWNhdG9yIl1dLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzEsImxvYWRpbmctaW5kaWNhdG9yIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwic3Bp''@;'; put 'put ''bm5lci1pbnZlcnNlIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjIwIiwxLCJpcy1pbmZvIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImVycm9yIiwic2l6ZSIsIjI0IiwxLCJpcy1lcnJvciJdLFszLCJjbHJQb3NpdGlvbiIs''@;'; put 'put ''NCwiY2xySWZPcGVuIl0sWzMsImNsclBvc2l0aW9uIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJydW5uaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInN1Y2Nlc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmFpbCIsNCwibmdJZiJdLFsxLCJydW5uaW5nIl0sWzEsInN1Y2Nlc3Mi''@;'; put 'put ''XSxbMSwiZmFpbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiY2xyLXNpZ25wb3N0IiksR3QoMiwic3BhbiIsMSkoMywiY2xyLWljb24iLDIpKDQsImNsci1pY29uIiwzKSxndCg1LGtXZSwyLDIsImNsci1zaWducG9zdC1jb250ZW50Iiw0KSxoZSgp''@;'; put 'put ''KCkpLDImZCYmKGZlKDIpLF9kKCJkaXNwbGF5IixoLmxvYWRpbmc/ImlubGluZS1ibG9jayI6Im5vbmUiKSxmZSgpLF9kKCJkaXNwbGF5IiwhaC5sb2FkaW5nJiZoLnJlcXVlc3RzLmxlbmd0aD4wJiZoLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSxmZSgp''@;'; put 'put ''LF9kKCJkaXNwbGF5IiwhaC5sb2FkaW5nJiZoLnJlcXVlc3RzLmxlbmd0aD4wJiYhaC5yZXF1ZXN0c1swXS5zdWNjZXNzZnVsPyJpbmxpbmUtYmxvY2siOiJub25lIikpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEhsLEwyLFdMLHExZSxaTF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtmdW5jdGlvbiBJV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjZHMtaWNvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50b2dnbGVEYXJrTW9kZSghMCkpfSksaGUoKX19ZnVuY3Rpb24gUldlKGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PUxuKCk7ZGUoMCwiY2RzLWljb24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudG9nZ2xlRGFya01vZGUoITEpKX0pLGhlKCl9fWZ1bmN0aW9uIExXZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxHdCgxLCJpbWciLDE0KSxoZSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoKTtmZSgpLGZNKCJzcmMiLGEuZ2V0UGljdHVyZVVybCgpLFpDKX19ZnVuY3Rpb24gT1dlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTUpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO1RyKCJoaWRkZW4iLDA9PT1hLmZhaWxlZFJlcXMubGVuZ3RoKSxmZSgpLHdy''@;'; put 'put ''KGEuZmFpbGVkUmVxcy5sZW5ndGgpfX1mdW5jdGlvbiBQV2UoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxNiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7VHIoImhpZGRlbiIsMD09PWEuZGVidWdMb2dzLmxlbmd0aCksZmUoKSx3cihhLmRlYnVnTG9ncy5sZW5ndGgpfX1mdW5j''@;'; put 'put ''dGlvbiBGV2UoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxNyl9ZnVuY3Rpb24gSFdlKGMsbCl7MSZjJiYoc2koMCksZGUoMSwiYSIsMjgpKDIsInNwYW4iLDI5KSxMZSgzLCJEb2N1bWVudGF0aW9uIiksaGUoKSgpLGxpKCkpfWZ1bmN0aW9uIE5XZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1M''@;'; put 'put ''bigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51IiwxOCkoMSwiZGl2IiwxOSwwKSgzLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1oYSgyKTtyZXR1cm4gQ3QoUmUoKS5vbkRlYnVnUm93Q2xpY2soaCxmKSl9KSxkZSg0LCJj''@;'; put 'put ''bHItdG9nZ2xlLXdyYXBwZXIiKSg1LCJpbnB1dCIsMjEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuc2FzanNDb25maWcuZGVidWcsaCl8fChmLnNhc2pzQ29uZmlnLmRlYnVnPWgpLEN0KGgpfSksRnQoIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25EZWJ1Z01vZGVDaGFuZ2UoKSl9KSxoZSgpLGRlKDYsImxhYmVsIiksTGUoNywiRGVidWcgTW9kZSIpLGhlKCkoKSgpKCksZGUoOCwiYSIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5v''@;'; put 'put ''cGVuUmVxdWVzdHNNb2RhbCgpKX0pLGRlKDksInNwYW4iKSxMZSgxMCwiU0FTIFJlcXVlc3RzIiksaGUoKSgpLGd0KDExLEhXZSw0LDAsIm5nLWNvbnRhaW5lciIsNyksR3QoMTIsImRpdiIsMjMpLGRlKDEzLCJhIiwyNCkoMTQsInNwYW4iKSxMZSgxNSwiU3lzdGVtIiksaGUoKSgpLGRlKDE2''@;'; put 'put ''LCJhIiwyNSksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5sb2dvdXQoaCkpfSksZGUoMTcsInNwYW4iKSxMZSgxOCwiTG9nIE91dCIpLGhlKCksR3QoMTksImNsci1pY29uIiwyNiksaGUoKSxkZSgyMCwiZGl2IiwyNykoMjEsInNwYW4iKSxMZSgyMiksaGUo''@;'; put 'put ''KSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoNSkscGkoIm5nTW9kZWwiLGEuc2FzanNDb25maWcuZGVidWcpLGZlKDYpLE1lKCJuZ0lmIiwhYS5pc0RlcGxveVBhZ2UpLGZlKDExKSxEcigidiIsYS5jb21taXRWZXIsIiIpfX1sZXQgVldlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSxkLGgsZil7dGhpcy51c2VyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnVzZXJOYW1lPSJOb3QgbG9nZ2VkIGluIix0aGlzLnJlcVN1Yj1uZXcgcXQsdGhpcy51c2VyU3ViPW5ldyBxdCx0aGlzLmFwcExvZ3M9W10s''@;'; put 'put ''dGhpcy5kZWJ1Z0xvZ3M9W10sdGhpcy5mYWlsZWRSZXFzPVtdLHRoaXMuc2FzRXJyb3JzPVtdLHRoaXMuaXNWaXlhPSExLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMucmVxdWVzdHNDb3VudD0wLHRoaXMuY29tbWl0VmVyPSIiLHRoaXMuZGFya01vZGU9dGhpcy5l''@;'; put 'put ''dmVudFNlcnZpY2UuZGFya01vZGV9bmdPbkluaXQoKXt0aGlzLnVzZXJTdWI9dGhpcy51c2VyU2VydmljZS51c2VyQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy51c2VyTmFtZT1hLnVzZXJuYW1lfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwi''@;'; put 'put ''U0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCksdGhpcy5jb21taXRWZXI9InY3LjAuMCIucmVwbGFjZSgidiIsIiIpKyIuZzhjNjA0NzMifW5nT25EZXN0cm95KCl7dGhpcy5yZXFTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnVzZXJTdWIudW5z''@;'; put 'put ''dWJzY3JpYmUoKX10b2dnbGVEYXJrTW9kZShhKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVEYXJrTW9kZShhKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9b25EZWJ1Z01vZGVDaGFuZ2UoYSl7dGhpcy5zYXNqc0NvbmZpZyYmdGhp''@;'; put 'put ''cy5zYXNTZXJ2aWNlLnNldERlYnVnU3RhdGUodGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyl9b25EZWJ1Z1Jvd0NsaWNrKGEsZCl7YS5zdG9wUHJvcGFnYXRpb24oKSxLbi51c2VyRHJvcGRvd25Db25maWcuY2xvc2VPbkRlYnVnQ2xpY2smJnNldFRpbWVvdXQoKCk9PntkLmNsaWNrKCl9LDMwMCl9''@;'; put 'put ''bG9nb3V0KGEpe2EucHJldmVudERlZmF1bHQoKTt0cnl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfWNhdGNoKGQpe2NvbnNvbGUuZXJyb3IoZCl9fWdldFBpY3R1cmVVcmwoKXtyZXR1cm5gJHt0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy8ke3RoaXMudXNl''@;'; put 'put ''ck5hbWV9L2F2YXRhci9jb250ZW50YH1nZXQgaXNEZXBsb3lQYWdlKCl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95Iil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoX1cpLEdlKEJzKSxHZSh2YyksR2UoTHMpKX19''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1oZWFkZXItYWN0aW9ucyJdXSxkZWNsczoxNCx2YXJzOjcsY29uc3RzOltbImRyb3Bkb3duSXRlbURlYnVnIiwiIl0sWzEsImhlYWRlci1hY3Rpb25zIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVt''@;'; put 'put ''cy1jZW50ZXIiXSxbInNpemUiLCJtZCIsImNsYXNzIiwidGhlbWUtdG9nZ2xlLWljb24gY3Vyc29yLXBvaW50ZXIiLCJzaGFwZSIsIm1vb24iLCJpbnZlcnNlIiwiZmFsc2UiLCJzb2xpZCIsImZhbHNlIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2l6ZSIsIm1kIiwiY2xhc3MiLCJ0aGVtZS10''@;'; put 'put ''b2dnbGUtaWNvbiBjdXJzb3ItcG9pbnRlciIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiYXBwLW5hdi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25Ub2dnbGUiLCIiLDEsIm5hdi10ZXh0IiwiY29sb3Itd2hp''@;'; put 'put ''dGUiLCJ1c2VyLW5hdi10b2dnbGUiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1kYW5nZXIiLDMsImhpZGRlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1pbmZvIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbInNoYXBlIiwiY2FyZXQgZG93biIsNCwibmdJZiJd''@;'; put 'put ''LFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsic2l6ZSIsIm1kIiwic2hhcGUiLCJtb29uIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNpemUi''@;'; put 'put ''LCJtZCIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImFsdCIsInByb2ZpbGUgcGljdHVyZSIsMSwiYXZhdGFyLWltZyIsMywic3JjIl0sWzEsImJhZGdlIiwi''@;'; put 'put ''YmFkZ2UtZGFuZ2VyIl0sWzEsImJhZGdlIiwiYmFkZ2UtaW5mbyJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkZWJ1Zy1zd2l0Y2gtaXRlbSJdLFsxLCJ0b2dnbGUtc3dpdGNoIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsiaWQiLCJkZWJ1Zy10b2dnbGUxIiwidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsxLCJzZXBhcmF0b3IiXSxbImhyZWYiLCIuLi4iLCJyb3V0ZXJMaW5rIiwi''@;'; put 'put ''L3N5c3RlbSIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsiaHJlZiIsIi4uLiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwibG9nb3V0IiwxLCJjbHItbG9nb3V0Il0sWzEsImNvcHlSaWdodCJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8vZG9j''@;'; put 'put ''cy5kYXRhY29udHJvbGxlci5pbyIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsxLCJkcm9wZG93bi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGd0KDIsSVdlLDEsMCwiY2RzLWljb24iLDMpKDMsUldlLDEsMCwiY2RzLWljb24i''@;'; put 'put ''LDQpLGhlKCksR3QoNCwiYXBwLWxvYWRpbmctaW5kaWNhdG9yIiksZGUoNSwiY2xyLWRyb3Bkb3duIiw1KSg2LCJidXR0b24iLDYpKDcsInNwYW4iKSxMZSg4KSxoZSgpLGd0KDksTFdlLDIsMSwic3BhbiIsNykoMTAsT1dlLDIsMywic3BhbiIsOCkoMTEsUFdlLDIsMywic3BhbiIsOSkoMTIs''@;'; put 'put ''RldlLDEsMCwiY2xyLWljb24iLDEwKSxoZSgpLGd0KDEzLE5XZSwyMywzLCJjbHItZHJvcGRvd24tbWVudSIsMTEpLGhlKCkoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLCFoLmRhcmtNb2RlLnZhbHVlKSxmZSgpLE1lKCJuZ0lmIiwhIWguZGFya01vZGUudmFsdWUpLGZlKDUpLHdyKGgudXNl''@;'; put 'put ''ck5hbWUpLGZlKCksTWUoIm5nSWYiLCJOb3QgbG9nZ2VkIGluIiE9PWgudXNlck5hbWUmJmguaXNWaXlhKSxmZSgpLE1lKCJuZ0lmIiwhaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSxNZSgibmdJZiIsaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSxNZSgibmdJZiIsIWguaXNWaXlhKSl9LGRl''@;'; put 'put ''cGVuZGVuY2llczpbYmEsTWQsbmwsJHMsYzEsSGwscnMsTDIsZHMsSWQsQnksU2gsc2csZzcsbTcsVnksRFdlXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGRoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hbGVydHM9bmV3IFdufXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEJXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1hbGVydCIsMiks''@;'; put 'put ''Z2koImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5jbG9zZWQsaCl8fChmLmNsb3NlZD1oKSxDdChoKX0pLEZ0KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMiku''@;'; put 'put ''b25BbGVydENsb3NlKCkpfSksZGUoMSwiZGl2IiwzKSgyLCJzcGFuIiw0KSxMZSgzKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoImNsckFsZXJ0VHlwZSIsYS50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApLHBpKCJjbHJBbGVydENsb3NlZCIsYS5jbG9zZWQp''@;'; put 'put ''LGZlKDMpLERyKCIgIixhLm1lc3NhZ2UsIiAiKX19ZnVuY3Rpb24galdlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWFsZXJ0cyIpLGd0KDEsQldlLDQsNCwiY2xyLWFsZXJ0IiwxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0Zvck9mIixhLmFsZXJ0cyl9fWxldCB6V2U9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9hbGVydHNTZXJ2aWNlPWEsdGhpcy5hbGVydHM9W10sdGhpcy5oYXNPcGVuQWxlcnQ9ITEsdGhpcy5hbGVydHNTdWI9bmV3IHF0fW5nT25Jbml0KCl7dGhpcy5hbGVydHNTdWI9dGhpcy5fYWxlcnRzU2VydmljZS5hbGVydHMuc3Vi''@;'; put 'put ''c2NyaWJlKGE9Pnt0aGlzLmFsZXJ0cy5wdXNoKGEpLHRoaXMuaGFzT3BlbkFsZXJ0PSEwLGEuZXJyJiZjb25zb2xlLmVycm9yKGEuZXJyKX0pfW9uQWxlcnRDbG9zZSgpe3RoaXMuaGFzT3BlbkFsZXJ0PXRoaXMuYWxlcnRzLnNvbWUoYT0+IWEuY2xvc2VkKX1zdGF0aWN7dGhpcy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShkaGUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hbGVydHMiXV0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFw''@;'; put 'put ''cExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENsb3NlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIiwiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRBcHBMZXZlbCIsImNsckFsZXJ0Q2xvc2VkIl0sWzEsImFsZXJ0LWl0ZW0iXSxb''@;'; put 'put ''MSwiYWxlcnQtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmZ3QoMCxqV2UsMiwxLCJjbHItYWxlcnRzIiwwKSwyJmQmJk1lKCJuZ0lmIixoLmhhc09wZW5BbGVydCl9LGRlcGVuZGVuY2llczpbbnMsYmEsSngsJGRlLFF4XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpLHBPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNsYXNzZXM9IiJ9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjb250''@;'; put 'put ''YWN0LWxpbmsiXV0saW5wdXRzOntjbGFzc2VzOiJjbGFzc2VzIn0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhyZWYiLCJtYWlsdG86c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbz9zdWJqZWN0PUxpY2VuY2UiLDMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihk''@;'; put 'put ''ZSgwLCJhIiwwKSxMZSgxLCJzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksaGUoKSksMiZkJiYoVHIoInVuc2V0IiwiIiE9PWguY2xhc3NlcyksTWUoIm5nQ2xhc3MiLGguY2xhc3NlcykpfSxkZXBlbmRlbmNpZXM6W3d1XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGhoZT0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5vcHRpb25zU3ViamVjdCQ9bmV3IFduLHRoaXMucmVzdWx0Q2hhbmdlJD1uZXcgV259b3BlbihhKXtyZXR1cm4gdGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMCwuLi5hfSksdGhpcy5yZXN1bHRDaGFuZ2UkPW5ldyBXbix0''@;'; put 'put ''aGlzLnJlc3VsdENoYW5nZSQuYXNPYnNlcnZhYmxlKCl9Y2xvc2UoYSl7dGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMX0pLHRoaXMucmVzdWx0Q2hhbmdlJC5uZXh0KHtwYXNzd29yZDphfSksdGhpcy5yZXN1bHRDaGFuZ2UkLmNvbXBsZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gVVdlKGMsbCl7MSZjJiYoZGUoMCwicCIsMTMpLExlKDEs''@;'; put 'put ''IiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4uICIpLGhlKCkpfWZ1bmN0aW9uIFpXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMikoMSwiY2xyLW1vZGFsIiwzKSgyLCJoMyIsNCksTGUoMywiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIpLGhlKCks''@;'; put 'put ''ZGUoNCwiZGl2Iiw1KSg1LCJwIiw2KSxMZSg2LCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksaGUoKSxkZSg3LCJpbnB1dCIsNywwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLnBhc3N3b3JkSW5wdXQsaCl8fChmLnBhc3N3''@;'; put 'put ''b3JkSW5wdXQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoOSwiZGl2Iiw4KSgxMCwiZGl2IiksZ3QoMTEsVVdlLDIsMCwicCIsOSksaGUoKSxkZSgxMiwiZGl2IiwxMCkoMTMsImJ1dHRvbiIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jbG9zZSgpKX0pLExl''@;'; put 'put ''KDE0LCIgQ2FuY2VsICIpLGhlKCksZGUoMTUsImJ1dHRvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWhhKDgpO3JldHVybiBDdChSZSgpLmNsb3NlKGgudmFsdWUpKX0pLExlKDE2LCIgVW5sb2NrICIpLGhlKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC5u''@;'; put 'put ''Z0lmLGQ9aGEoOCksaD1SZSgpO2ZlKCksTWUoImNsck1vZGFsT3BlbiIsYS5vcGVuKSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLHBpKCJuZ01vZGVsIixoLnBhc3N3b3JkSW5wdXQpLGZlKDQpLE1lKCJuZ0lmIixhLmVycm9yKSxmZSg0KSxNZSgi''@;'; put 'put ''ZGlzYWJsZWQiLGQudmFsdWUubGVuZ3RoPDEpfX1sZXQgV1dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlPWEsdGhpcy5vcHRpb25zJD10aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2Uub3B0aW9uc1N1YmplY3QkLHRoaXMu''@;'; put 'put ''ZmlsZVVubG9ja0Vycm9yPSExLHRoaXMucGFzc3dvcmRJbnB1dD0iIn1jbG9zZShhKXt0aGlzLnBhc3N3b3JkSW5wdXQ9IiIsdGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLmNsb3NlKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl''@;'; put 'put ''KGhoZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiY2xhc3MiLCJleGNlbC1wYXNzd29yZC1yb290Iiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsImV4Y2VsLXBhc3N3b3JkLXJvb3QiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSIsImQt''@;'; put 'put ''ZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm0tMCJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFu''@;'; put 'put ''YWdlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbMSwiYnV0dG9ucyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0''@;'; put 'put ''eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGd0KDAsWldlLDE3LDYsImRpdiIsMSksZWwoMSwiYXN5bmMiKSks''@;'; put 'put ''MiZkJiZNZSgibmdJZiIsRGMoMSwxLGgub3B0aW9ucyQpKX0sZGVwZW5kZW5jaWVzOltiYSxxbCxubCwkcyxvdSxLdSxFTV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSx0RT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5maWxlT3Zlcj0hMSx0aGlzLmZpbGVEcm9w''@;'; put 'put ''cGVkPW5ldyBLcix0aGlzLmZpbGVEcmFnZ2VkT3Zlcj1uZXcgS3J9b25EcmFnT3ZlcihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNvbnRhaW5zRmlsZXMoYSkmJiF0aGlzLmZpbGVPdmVyJiYodGhpcy5maWxlT3Zlcj0hMCx0aGlzLmZpbGVEcmFnZ2Vk''@;'; put 'put ''T3Zlci5lbWl0KCkpfW9uRHJhZ0xlYXZlKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITF9b25kcm9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITE7Y29uc3QgZD1hLmRhdGFU''@;'; put 'put ''cmFuc2Zlci5maWxlcztkLmxlbmd0aD4wJiZ0aGlzLmZpbGVEcm9wcGVkLmVtaXQoZCl9Y29udGFpbnNGaWxlcyhhKXtpZihhJiZhLmRhdGFUcmFuc2ZlciYmYS5kYXRhVHJhbnNmZXIudHlwZXMpZm9yKGxldCBkPTA7ZDxhLmRhdGFUcmFuc2Zlci50eXBlcy5sZW5ndGg7ZCsrKWlmKCJGaWxl''@;'; put 'put ''cyI9PWEuZGF0YVRyYW5zZmVyLnR5cGVzW2RdKXJldHVybiEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJz''@;'; put 'put ''OjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiZHJhZ292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdMZWF2ZSh2KX0pKCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5v''@;'; put 'put ''bmRyb3Aodil9KSwyJmQmJlRyKCJmaWxlb3ZlciIsaC5maWxlT3Zlcil9LG91dHB1dHM6e2ZpbGVEcm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJmaWxlRHJhZ2dlZE92ZXIifX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZmhlPSgpPT5bXTtmdW5jdGlvbiBZV2UoYyxsKXsx''@;'; put 'put ''JmMmJihkZSgwLCJwIiw2KSxMZSgxLCJObyByZXF1ZXN0cyBtYWRlIiksaGUoKSl9ZnVuY3Rpb24gR1dlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1pY29uIiwxMyksaGUoKSl9ZnVuY3Rpb24gJFdlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1pY29uIiwx''@;'; put 'put ''NCksaGUoKSl9ZnVuY3Rpb24gS1dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPVJlKDMpLmluZGV4O3JldHVybiBDdChSZSgyKS5nb1RvTG9nTGluZShoLCJy''@;'; put 'put ''ZXF1ZXN0XyIrZiwiZXJyb3IiKSl9KSxkZSgxLCJidXR0b24iLDIzKSxMZSgyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHFXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDE5KSxHdCgxLCJjbHIt''@;'; put 'put ''aWNvbiIsMjApLExlKDIpLGd0KDMsS1dlLDMsMSwiY2xyLXRyZWUtbm9kZSIsMjEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKS4kaW1wbGljaXQ7ZmUoMiksRHIoIiBFcnJvcnMgKCIsYS5sb2dFcnJvcnMubGVuZ3RoLCIpICIpLGZlKCksTWUoIm5nRm9yT2YiLGEubG9nRXJyb3JzfHxHcygy''@;'; put 'put ''LGZoZSkpfX1mdW5jdGlvbiBYV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyMiksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9UmUoMykuaW5kZXg7cmV0dXJuIEN0KFJlKDIpLmdvVG9Mb2dMaW5lKGgsInJl''@;'; put 'put ''cXVlc3RfIitmLCJ3YXJuaW5nIikpfSksZGUoMSwiYnV0dG9uIiwyMyksTGUoMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBKV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiwxOSksR3QoMSwiY2xy''@;'; put 'put ''LWljb24iLDI0KSxMZSgyKSxndCgzLFhXZSwzLDEsImNsci10cmVlLW5vZGUiLDIxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKDIpLERyKCIgV2FybmluZ3MgKCIsYS5sb2dXYXJuaW5ncy5sZW5ndGgsIikgIiksZmUoKSxNZSgibmdGb3JPZiIsYS5sb2dXYXJuaW5n''@;'; put 'put ''c3x8R3MoMixmaGUpKX19ZnVuY3Rpb24gUVdlKGMsbCl7MSZjJiZHdCgwLCJkaXYiLDI1KSwyJmMmJk1lKCJpbm5lckhUTUwiLFJlKDIpLiRpbXBsaWNpdC5sb2dGaWxlLFY0KX1mdW5jdGlvbiBlWWUoYyxsKXsxJmMmJkd0KDAsImRpdiIsMjYpLDImYyYmTWUoInRleHRDb250ZW50IixSZSgy''@;'; put 'put ''KS4kaW1wbGljaXQubG9nRmlsZSl9ZnVuY3Rpb24gdFllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5kb3dubG9hZExvZyhoLmxvZ0Zp''@;'; put 'put ''bGUpKX0pLExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBuWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJjbHItdHJlZSIpLGd0KDIscVdlLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpKDMsSldlLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpLGhlKCks''@;'; put 'put ''Z3QoNCxRV2UsMSwxLCJkaXYiLDE2KSg1LGVZZSwxLDEsImRpdiIsMTcpKDYsdFllLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0LGQ9UmUoMik7ZmUoMiksTWUoIm5nSWYiLGEubG9nRXJyb3JzKSxmZSgpLE1lKCJuZ0lmIixhLmxvZ1dhcm5pbmdz''@;'; put 'put ''KSxmZSgpLE1lKCJuZ0lmIiwiU0FTVklZQSIhPT1kLnNlcnZlclR5cGUpLGZlKCksTWUoIm5nSWYiLCJTQVNWSVlBIj09PWQuc2VydmVyVHlwZSksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEubG9nRmlsZT9udWxsOmEubG9nRmlsZS5sZW5ndGgpPjApfX1mdW5jdGlvbiByWWUoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDIpLmRvd25sb2FkU291cmNlQ29kZShoLnNvdXJjZUNvZGUpKX0pLExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1m''@;'; put 'put ''dW5jdGlvbiBpWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI4KSxMZSgyKSxoZSgpLGd0KDMsclllLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKDIpLHdyKGEuc291cmNlQ29kZSksZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsKG51bGw9PWEuc291cmNlQ29kZT9udWxsOmEuc291cmNlQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBhWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQ7''@;'; put 'put ''cmV0dXJuIEN0KFJlKDIpLmRvd25sb2FkR2VuZXJhdGVkQ29kZShoLmdlbmVyYXRlZENvZGUpKX0pLExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBvWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI4KSxMZSgyKSxoZSgpLGd0KDMsYVll''@;'; put 'put ''LDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKDIpLERyKCIgIixhLmdlbmVyYXRlZENvZGUsIiAiKSxmZSgpLE1lKCJuZ0lmIiwobnVsbD09YS5nZW5lcmF0ZWRDb2RlP251bGw6YS5nZW5lcmF0ZWRDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9u''@;'; put 'put ''IHNZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9aC5rZXkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9bC4kaW1wbGljaXQ7VHIoInNlbGVjdGVkIixSZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT09PWEua2V5KSxmZSgpLERyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBsWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLGd0KDEsc1llLDIsMywiZGl2Iiwz''@;'; put 'put ''MyksZWwoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLERjKDIsMSxhLlNBU1dPUkspKX19ZnVuY3Rpb24gY1llKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMzgpKDEsInN0cm9uZyIpLExlKDIpLGhlKCkoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPVJlKDMpLiRpbXBsaWNpdDtmZSgyKSxEcigiIixhLnNlbGVjdGVkVGFibGUsIiAoZmlyc3QgMTAgcm93cykgIil9fWZ1bmN0aW9uIHVZZShjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRHIoIiAiLGEua2V5''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIGRZZShjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKS4kaW1wbGljaXQ7ZmUoKSxEcigiICIsZFthLmtleV0sIiAiKX19ZnVuY3Rpb24gaFllKGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSxn''@;'; put 'put ''dCgxLGRZZSwyLDEsInRkIiw0MCksZWwoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNCkuJGltcGxpY2l0O2ZlKCksTWUoIm5nRm9yT2YiLERjKDIsMSxhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpfX1mdW5jdGlvbiBmWWUoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJ0YWJsZSIsMzkpKDEsInRoZWFkIikoMiwidHIiKSxndCgzLHVZZSwyLDEsInRoIiw0MCksZWwoNCwia2V5dmFsdWUiKSxoZSgpKCksZGUoNSwidGJvZHkiKSxndCg2LGhZZSwzLDMsInRyIiw0MCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMykuJGltcGxpY2l0O2ZlKDMp''@;'; put 'put ''LE1lKCJuZ0Zvck9mIixEYyg0LDIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKSxmZSgzKSxNZSgibmdGb3JPZiIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3MpfX1mdW5jdGlvbiBwWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFi''@;'; put 'put ''LWNvbnRlbnQiKSxndCgxLGNZZSwzLDEsInAiLDM1KSxkZSgyLCJkaXYiLDM2KSxndCgzLGZZZSw3LDQsInRhYmxlIiwzNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSksZmUoMiksTWUoIm5nSWYiLGEuc2VsZWN0''@;'; put 'put ''ZWRUYWJsZSl9fWZ1bmN0aW9uIGdZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDI5KSgyLCJidXR0b24iLDMwKSxMZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLEd0KDQsImNsci1pY29uIiwzMSksaGUoKSxndCg1LGxZZSwzLDMs''@;'; put 'put ''ImNsci1kcm9wZG93bi1tZW51IiwzMiksaGUoKSxndCg2LHBZZSw0LDIsIm5nLXRlbXBsYXRlIiwxMiksZ2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpO3JldHVybiBtaShmLnRhYmxlc0FjdGl2ZSxoKXx8KGYudGFibGVzQWN0aXZlPWgpLEN0''@;'; put 'put ''KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKSxmZSg1KSxwaSgiY2xySWZBY3RpdmUiLGEudGFibGVzQWN0aXZlKX19ZnVuY3Rpb24gbVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXN0YWNr''@;'; put 'put ''LWJsb2NrIiw4KSgxLCJjbHItc3RhY2stbGFiZWwiKSxMZSgyKSxkZSgzLCJzcGFuIiw5KSxndCg0LEdXZSwyLDAsInNwYW4iLDUpKDUsJFdlLDIsMCwic3BhbiIsNSksaGUoKSgpLGRlKDYsImNsci1zdGFjay1jb250ZW50IiksTGUoNyksaGUoKSxkZSg4LCJjbHItc3RhY2stYmxvY2siLDEw''@;'; put 'put ''KSg5LCJjbHItc3RhY2stY29udGVudCIpKDEwLCJjbHItdGFicyIpKDExLCJjbHItdGFiIikoMTIsImJ1dHRvbiIsMTEpLExlKDEzLCJTQVMgTG9nIiksaGUoKSxndCgxNCxuWWUsNyw1LCJuZy10ZW1wbGF0ZSIsMTIpLGdpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7''@;'; put 'put ''Y29uc3QgZj1SZSgyKTtyZXR1cm4gbWkoZi5zYXNMb2dBY3RpdmUsaCl8fChmLnNhc0xvZ0FjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTUsImNsci10YWIiKSgxNiwiYnV0dG9uIiwxMSksTGUoMTcsIlNBUyBTb3VyY2UgQ29kZSIpLGhlKCksZ3QoMTgsaVllLDQsMiwibmctdGVtcGxhdGUi''@;'; put 'put ''LDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMik7cmV0dXJuIG1pKGYuc2FzU291cmNlQ29kZUFjdGl2ZSxoKXx8KGYuc2FzU291cmNlQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwx''@;'; put 'put ''MSksTGUoMjEsIlNBUyBHZW5lcmF0ZWQgQ29kZSIpLGhlKCksZ3QoMjIsb1llLDQsMiwibmctdGVtcGxhdGUiLDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMik7cmV0dXJuIG1pKGYuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSxoKXx8KGYu''@;'; put 'put ''c2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksZ3QoMjMsZ1llLDcsMiwiY2xyLXRhYiIsNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9UmUoMik7TWUoImlkIiwicmVxdWVzdF8iK2QpKCJjbHJTdGFja1ZpZXdMZXZlbCIs''@;'; put 'put ''MSksZmUoMiksRHIoIiAiLGEuc2VydmljZUxpbmssIiAiKSxmZSgyKSxNZSgibmdJZiIsKG51bGw9PWEubG9nV2FybmluZ3M/bnVsbDphLmxvZ1dhcm5pbmdzLmxlbmd0aCk+MCksZmUoKSxNZSgibmdJZiIsKG51bGw9PWEubG9nRXJyb3JzP251bGw6YS5sb2dFcnJvcnMubGVuZ3RoKT4wKSxm''@;'; put 'put ''ZSgyKSx3cihhLnBhcnNlZFRpbWVzdGFtcCksZmUoNykscGkoImNscklmQWN0aXZlIixoLnNhc0xvZ0FjdGl2ZSksZmUoNCkscGkoImNscklmQWN0aXZlIixoLnNhc1NvdXJjZUNvZGVBY3RpdmUpLGZlKDQpLHBpKCJjbHJJZkFjdGl2ZSIsaC5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlKSxmZSgp''@;'; put 'put ''LE1lKCJuZ0lmIixhLlNBU1dPUkspfX1mdW5jdGlvbiB2WWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc3RhY2stdmlldyIpLGd0KDEsbVllLDI0LDEwLCJjbHItc3RhY2stYmxvY2siLDcpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nRm9yT2YiLGEuc2FzanNSZXF1ZXN0''@;'; put 'put ''cyl9fWxldCBiWWU9KCgpPT57Y2xhc3MgY3tnZXQgb3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1zZXQgb3BlbmVkKGEpe3RoaXMuX29wZW5lZD1hLGEmJnRoaXMubW9kYWxPcGVuZWQoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuc2FzanNSZXF1ZXN0cyl9Y29uc3RydWN0b3Io''@;'; put 'put ''YSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuX29wZW5lZD0hMSx0aGlzLm9wZW5lZENoYW5nZT1uZXcgS3IsdGhpcy5zYXNMb2dBY3RpdmU9ITAsdGhpcy5zYXNTb3VyY2VDb2RlQWN0aXZlPSExLHRoaXMuc2Fz''@;'; put 'put ''R2VuZXJhdGVkQ29kZUFjdGl2ZT0hMSx0aGlzLnRhYmxlc0FjdGl2ZT0hMSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2FzanNSZXF1ZXN0cz1bXSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygp''@;'; put 'put ''LHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpfW5nT25Jbml0KCl7fXBhcnNlTG9nVGltZXN0YW1wKGEpe3JldHVybmAke3RoaXMuZm9ybWF0VGltZXN0YW1wKGEpfSAke3RoaXMudGltZXN0YW1wRnJvbU5vdyhhKX1gfWN1dEFwcExvYyhhKXtyZXR1cm4g''@;'; put 'put ''YS5yZXBsYWNlKHRoaXMuc2FzanNDb25maWcuYXBwTG9jKyIvIiwiIil9Zm9ybWF0VGltZXN0YW1wKGEpe3JldHVybiBPbyhhKS5mb3JtYXQoKT9PbyhhKS5mb3JtYXQoImRkZGQsIE1NTU0gRG8gWVlZWSwgaDptbTpzcyBhIik6YX10aW1lc3RhbXBGcm9tTm93KGEpe3JldHVybiBPbyhhKS5m''@;'; put 'put ''b3JtYXQoKT9gICgke09vKGEpLmZyb21Ob3coKX0pYDoiIn1tb2RhbE9wZW5DaGFuZ2UoYSl7dGhpcy5vcGVuZWQ9YSx0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMub3BlbmVkKX1tb2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzUmVxdWVz''@;'; put 'put ''dHMoKTtmb3IobGV0IGEgb2YgdGhpcy5zYXNqc1JlcXVlc3RzKXRoaXMucGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhhKSxhLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9jKGEuc2VydmljZUxpbmspLGEucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoYS50aW1lc3RhbXAp''@;'; put 'put ''fWdvVG9Mb2dMaW5lKGEsZCxoKXtjb25zdCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtpZihmKWlmKCJTQVNWSVlBIj09PXRoaXMuc2VydmVyVHlwZSl7Y29uc3QgTT0oZi50ZXh0Q29udGVudHx8IiIpLnNwbGl0KCJcbiIpO2xldCBEPS0x''@;'; put 'put ''O2ZvcihsZXQgYmU9MDtiZTxNLmxlbmd0aDtiZSsrKWlmKE1bYmVdLmluY2x1ZGVzKGEpKXtEPWJlO2JyZWFrfWlmKC0xPT09RClyZXR1cm47Y29uc3QgWj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtaLmNsYXNzTmFtZT0idGVtcC1saW5lLWhlaWdodC1jYWxjIixaLnRleHRDb250''@;'; put 'put ''ZW50PSJYIixmLmFwcGVuZENoaWxkKFopO2NvbnN0IHJlPVouY2xpZW50SGVpZ2h0O2YucmVtb3ZlQ2hpbGQoWiksZi5zY3JvbGxUb3A9cmUqRDtjb25zdCBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjZS5jbGFzc05hbWU9ImxpbmUtaGlnaGxpZ2h0LW92ZXJsYXkgIisoImVy''@;'; put 'put ''cm9yIj09PWg/ImVycm9yLWhpZ2hsaWdodCI6Indhcm5pbmctaGlnaGxpZ2h0IiksY2UuY2xhc3NMaXN0LmFkZCgidGVtcC1oZWlnaHQtc2V0dGVyIiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCItLWxpbmUtaGVpZ2h0IixgJHtyZX1weGApLGNlLmNsYXNz''@;'; put 'put ''TGlzdC5hZGQoImxpbmUtcG9zaXRpb24tc2V0dGVyIiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCItLWxpbmUtdG9wIixyZSpEKyJweCIpLGYuYXBwZW5kQ2hpbGQoY2UpLHNldFRpbWVvdXQoKCk9PntmLmNvbnRhaW5zKGNlKSYmZi5yZW1vdmVDaGlsZChj''@;'; put 'put ''ZSl9LDNlMyl9ZWxzZXtjb25zdCB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2cgZm9udGApO2ZvcihsZXQgTSBvZiBBcnJheS5mcm9tKHYpKWlmKE0udGV4dENvbnRlbnQ/LmluY2x1ZGVzKGEpKXtmLnNjcm9sbFRvcD1NLm9mZnNldFRvcC1m''@;'; put 'put ''Lm9mZnNldFRvcCxNLmNsYXNzTGlzdC5hZGQoImhpZ2hsaWdodGVkLWxpbmUiKSxzZXRUaW1lb3V0KCgpPT57TS5jbGFzc0xpc3QucmVtb3ZlKCJoaWdobGlnaHRlZC1saW5lIil9LDNlMyk7YnJlYWt9fX1wYXJzZUVycm9yc0FuZFdhcm5pbmdzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1''@;'; put 'put ''bmN0aW9uKigpe2lmKCFhfHwhYS5sb2dGaWxlfHwic3RyaW5nIiE9dHlwZW9mIGEubG9nRmlsZXx8dm9pZCAwIT09YS5sb2dFcnJvcnN8fHZvaWQgMCE9PWEubG9nV2FybmluZ3MpcmV0dXJuO2xldCBoPVtdLGY9W10sdj1hLmxvZ0ZpbGUuc3BsaXQoIlxuIiksTT1bLi4udl07Zm9yKGxldCBE''@;'; put 'put ''PTA7RDx2Lmxlbmd0aDtEKyspe2lmKC88Lio+RVJST1IvZ20udGVzdCh2W0RdKSl7bGV0IFo9dltEXS5zdWJzdHJpbmcodltEXS5pbmRleE9mKCJFIiksdltEXS5sZW5ndGgtMSk7aC5wdXNoKFopfWVsc2UvXkVSUk9SL2dtLnRlc3QodltEXSkmJihoLnB1c2godltEXSksIlNBU1ZJWUEiIT09''@;'; put 'put ''ZC5zZXJ2ZXJUeXBlJiYodltEXT0nPGZvbnQgY2xhc3M9ImVycm9yLWxpbmUiPicrdltEXSsiPC9mb250PiIpKTtpZigvPC4qPldBUk5JTkcvZ20udGVzdCh2W0RdKSl7bGV0IFo9dltEXS5zdWJzdHJpbmcodltEXS5pbmRleE9mKCJXIiksdltEXS5sZW5ndGgtMSk7Zi5wdXNoKFopfWVsc2Uv''@;'; put 'put ''XldBUk5JTkcvZ20udGVzdCh2W0RdKSYmKGYucHVzaCh2W0RdKSwiU0FTVklZQSIhPT1kLnNlcnZlclR5cGUmJih2W0RdPSc8Zm9udCBjbGFzcz0id2FybmluZy1saW5lIj4nK3ZbRF0rIjwvZm9udD4iKSl9ZC5sb2dnZXJTZXJ2aWNlLmxvZyhmKSwiU0FTVklZQSI9PT1kLnNlcnZlclR5cGUm''@;'; put 'put ''JihhLm9yaWdpbmFsTG9nRmlsZT1NLmpvaW4oIlxuIiksYS5sb2dGaWxlTGluZU1hcD17fSxoLmZvckVhY2goRD0+e2ZvcihsZXQgWj0wO1o8TS5sZW5ndGg7WisrKWlmKE1bWl0uaW5jbHVkZXMoRCkpe2EubG9nRmlsZUxpbmVNYXAuZXJyb3JzfHwoYS5sb2dGaWxlTGluZU1hcC5lcnJvcnM9''@;'; put 'put ''e30pLGEubG9nRmlsZUxpbmVNYXAuZXJyb3JzW0RdPVo7YnJlYWt9fSksZi5mb3JFYWNoKEQ9Pntmb3IobGV0IFo9MDtaPE0ubGVuZ3RoO1orKylpZihNW1pdLmluY2x1ZGVzKEQpKXthLmxvZ0ZpbGVMaW5lTWFwLndhcm5pbmdzfHwoYS5sb2dGaWxlTGluZU1hcC53YXJuaW5ncz17fSksYS5s''@;'; put 'put ''b2dGaWxlTGluZU1hcC53YXJuaW5nc1tEXT1aO2JyZWFrfX0pKSxhLmxvZ0ZpbGU9di5qb2luKCJcbiIpLGEubG9nRXJyb3JzPWgsYS5sb2dXYXJuaW5ncz1mfSkoKX1kb3dubG9hZExvZyhhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9h''@;'; put 'put ''ZFRleHRGaWxlKGBsb2dGaWxlLSR7ZH1gLGEpfWRvd25sb2FkU291cmNlQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzb3VyY2VDb2RlLSR7ZH1gLGEpfWRvd25sb2FkR2VuZXJhdGVkQ29kZShhKXtjb25z''@;'; put 'put ''dCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBnZW5lcmF0ZWRDb2RlLSR7ZH1gLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEJzKSxHZShTZCksR2UoU3UpKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXF1ZXN0cy1tb2RhbCJdXSxpbnB1dHM6e29wZW5lZDoib3BlbmVkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UifSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xyTW9kYWxTaXplIiwi''@;'; put 'put ''eGwiLDEsInJlcXVlc3RzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibXQtMCIsImQtaW5saW5lLWJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiLCJoLTcwdmgiXSxbImNsYXNzIiwibm8tcmVxcyIsNCwibmdJZiJdLFs0''@;'; put 'put ''LCJuZ0lmIl0sWzEsIm5vLXJlcXMiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2ZWwiXSxbMSwibWwtMTAiXSxbMSwiY29udGVudCJdLFsiY2xyVGFiTGluayIsIiJdLFszLCJjbHJJZkFjdGl2ZUNoYW5n''@;'; put 'put ''ZSIsImNscklmQWN0aXZlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwibWItNSIsImNvbG9yLWdyZWVuIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3ItcmVkIl0sWyJjbGFzcyIsImVyci1saW5rcyIsNCwibmdJZiJdLFsiY2xhc3Mi''@;'; put 'put ''LCJsb2ctd3JhcHBlciBzYXNsb2ciLDMsImlubmVySFRNTCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciBzYXNsb2cgdml5YSIsMywidGV4dENvbnRlbnQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tbGluayIsMywiY2xpY2siLDQsIm5nSWYi''@;'; put 'put ''XSxbMSwiZXJyLWxpbmtzIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJjb2xvci1yZWQiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEs''@;'; put 'put ''ImNvbG9yLWdyZWVuIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwzLCJpbm5lckhUTUwiXSxbMSwibG9nLXdyYXBwZXIiLCJzYXNsb2ciLCJ2aXlhIiwzLCJ0ZXh0Q29udGVudCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzEsImxvZy13cmFw''@;'; put 'put ''cGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ3b3JrLXRhYmxlcy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xhc3MiLCJkcm9wZG93bi1pdGVt''@;'; put 'put ''IiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZHJvcGRvd24taXRlbSIsMywiY2xpY2siXSxbImNsYXNzIiwibXQtMTAiLDQsIm5nSWYiXSxbMSwibWluLWgtNTB2aCJdLFsiY2xh''@;'; put 'put ''c3MiLCJ0YWJsZSBtdC0xMCIsNCwibmdJZiJdLFsxLCJtdC0xMCJdLFsxLCJ0YWJsZSIsIm10LTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksRnQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''dil7cmV0dXJuIGgubW9kYWxPcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLExlKDIsIiBSZXF1ZXN0IEhpc3RvcnkgIiksZGUoMywicCIsMiksTGUoNCksaGUoKSgpLGRlKDUsImRpdiIsMyksZ3QoNixZV2UsMiwwLCJwIiw0KSg3LHZZZSwyLDEsImNsci1zdGFjay12aWV3Iiw1KSxoZSgp''@;'; put 'put ''KCkpLDImZCYmKE1lKCJjbHJNb2RhbE9wZW4iLGgub3BlbmVkKSxmZSg0KSxEcigiQXBwIExvY2F0aW9uOiAiLGguc2FzanNDb25maWcuYXBwTG9jLCIiKSxmZSgyKSxNZSgibmdJZiIsKG51bGw9PWguc2FzanNSZXF1ZXN0cz9udWxsOmguc2FzanNSZXF1ZXN0cy5sZW5ndGgpPDEpLGZlKCks''@;'; put 'put ''TWUoIm5nSWYiLGgub3BlbmVkJiYobnVsbD09aC5zYXNqc1JlcXVlc3RzP251bGw6aC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk+MCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLENHLFZkZSx3RyxOZGUsRWgsUGQsZmcsSGwsb3UsS3UsSHksTDIsX20sQ20seDcsd20seW0sUzcsc2csZzcsbTcsVnks''@;'; put 'put ''d1JdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgeVlle2NvbnN0cnVjdG9yKCl7dGhpcy5zYXNTZXJ2aWNlPW51bGwsdGhpcy5tZXNzYWdlPSIiLHRoaXMuZGV0YWlscz1uZXcgcGhlfX1jbGFzcyBwaGV7fWZ1bmN0aW9uIF9ZZShjLGwpe2lmKDEmYyYmKGRlKDAsInAi''@;'; put 'put ''LDgpLExlKDEsIiBTQVMgU2VydmljZTogIiksZGUoMiwic3Ryb25nIiksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmRhdGEuc2FzU2VydmljZSl9fWZ1bmN0aW9uIHdZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSkoMSwicCIpKDIsInN0cm9uZyIpLExl''@;'; put 'put ''KDMsIlNZU1dBUk5JTkdURVhUOiIpLGhlKCksTGUoNCksaGUoKSxkZSg1LCJwIikoNiwic3Ryb25nIiksTGUoNywiU1lTRVJST1JURVhUOiIpLGhlKCksTGUoOCksaGUoKSxkZSg5LCJwIikoMTAsInN0cm9uZyIpLExlKDExLCJNQUM6IiksaGUoKSxMZSgxMiksaGUoKSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9UmUoKTtmZSg0KSxEcigiICIsYS5kYXRhLmRldGFpbHMuU1lTV0FSTklOR1RFWFQsIiIpLGZlKDQpLERyKCIgIixhLmRhdGEuZGV0YWlscy5TWVNFUlJPUlRFWFQsIiIpLGZlKDQpLERyKCIgIixhLmRhdGEuZGV0YWlscy5NQUMsIiIpfX1mdW5jdGlvbiBDWWUoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub3BlbkNvbmZpZ3VyYXRvcigpKX0pLExlKDEsIiBPcGVuIGNvbmZpZ3VyYXRvciAiKSxoZSgpfX1mdW5jdGlvbiBTWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4o''@;'; put 'put ''KTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxMZSgxLCIgT3BlbiByZXF1ZXN0cyBtb2RhbCAiKSxoZSgpfX1mdW5jdGlvbiBNWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgw''@;'; put 'put ''LCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuZG93bmxvYWRMb2coKSl9KSxMZSgxLCIgRG93bmxvYWQgbG9nICIpLGhlKCl9fWZ1bmN0aW9uIHhZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jbG9zZUFib3J0TW9kYWwoKSl9KSxMZSgxLCIgQ2xvc2UgIiksaGUoKX19ZnVuY3Rpb24gRVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChSZSgpLnJlbG9hZCgpKX0pLExlKDEsIiBSZWxvYWQgIiksaGUoKX19bGV0IFRZZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9''@;'; put 'put ''Zix0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2s9bmV3IEtyLHRoaXMuZGF0YT1uZXcgeVllLHRoaXMuZm9yY2VSZWxvYWQ9ITEsdGhpcy5tb2RhbEVuYWJsZWQ9ITAsdGhpcy5kZWZhdWx0RGF0YT17bW9kYWxUaXRsZToiQWJvcnQgTWVzc2FnZSIsc2FzU2VydmljZTpudWxsLG1lc3NhZ2U6IiIs''@;'; put 'put ''ZGV0YWlsczpuZXcgcGhlfX1uZ09uSW5pdCgpe2xldCBhPXsuLi50aGlzLmRlZmF1bHREYXRhLC4uLnRoaXMuZGF0YX07dGhpcy5kYXRhPWF9c2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihhKXtjb25zdCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhPy5pbmNsdWRl''@;'; put 'put ''cygic3RhcnR1cHNlcnZpY2UiKSYmZC5zZXJ2ZXJUeXBlPT09QjAuWS5TYXM5fWNsb3NlQWJvcnRNb2RhbCgpe3RoaXMub25Db25maXJtTW9kYWxDbGljay5lbWl0KCl9b3BlbkNvbmZpZ3VyYXRvcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIu''@;'; put 'put ''bmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHRoaXMuY2xvc2VBYm9ydE1vZGFsKCl9ZG93bmxvYWRMb2coKXt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgJHt0aGlzLmRhdGEuc2FzU2VydmljZX0tTE9HYCx0aGlzLmRhdGEuZGV0YWlscz8uTE9HfHwiRXJyb3IgcGFyc2lu''@;'; put 'put ''ZyB0aGUgbG9nIil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfXJlbG9hZCgpe2xvY2F0aW9uLnJlbG9hZCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1KSxHZSh2YyksR2Uo''@;'; put 'put ''QnMpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaW5mby1tb2RhbCJdXSxpbnB1dHM6e2RhdGE6ImRhdGEiLGZvcmNlUmVsb2FkOiJmb3JjZVJlbG9hZCJ9LG91dHB1dHM6e29uQ29uZmlybU1vZGFsQ2xpY2s6Im9uQ29uZmlybU1v''@;'; put 'put ''ZGFsQ2xpY2sifSxkZWNsczoxMyx2YXJzOjEyLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNsci1hYm9ydC1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJd''@;'; put 'put ''LFsiY2xhc3MiLCJzYXNTZXJ2aWNlIG10LTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRu''@;'; put 'put ''LXByaW1hcnkiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInNhc1NlcnZpY2UiLCJtdC0wIl0sWzEsInN5c3RleHQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIs''@;'; put 'put ''MCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgubW9kYWxFbmFibGVkLHYpfHwoaC5tb2RhbEVuYWJsZWQ9diksdn0pLGRlKDEsImgzIiwxKSxMZSgyKSxndCgzLF9ZZSw0LDEsInAiLDIpLGhlKCksZGUoNCwiZGl2IiwzKSxHdCg1LCJkaXYiLDQpLGd0''@;'; put 'put ''KDYsd1llLDEzLDMsImRpdiIsNSksaGUoKSxkZSg3LCJkaXYiLDYpLGd0KDgsQ1llLDIsMCwiYnV0dG9uIiw3KSg5LFNZZSwyLDAsImJ1dHRvbiIsNykoMTAsTVllLDIsMCwiYnV0dG9uIiw3KSgxMSx4WWUsMiwwLCJidXR0b24iLDcpKDEyLEVZZSwyLDAsImJ1dHRvbiIsNyksaGUoKSgpKSwy''@;'; put 'put ''JmQmJihwaSgiY2xyTW9kYWxPcGVuIixoLm1vZGFsRW5hYmxlZCksTWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCFoLmZvcmNlUmVsb2FkKSxmZSgyKSxEcigiICIsaC5kYXRhLm1vZGFsVGl0bGUsIiAiKSxmZSgpLE1lKCJuZ0lmIixoLmRhdGEuc2FzU2Vydmlj''@;'; put 'put ''ZSYmaC5kYXRhLnNhc1NlcnZpY2UubGVuZ3RoPjApLGZlKDIpLE1lKCJpbm5lckhUTUwiLGguZGF0YS5tZXNzYWdlLFY0KSxmZSgpLE1lKCJuZ0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKDIpLE1lKCJuZ0lmIixoLnNob3dDb25maWd1cmF0b3JCdXR0b24oaC5kYXRhLnNhc1NlcnZp''@;'; put 'put ''Y2UpKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKCksTWUoIm5nSWYiLChudWxsPT1oLmRhdGEuZGV0YWlscz9udWxsOmguZGF0YS5kZXRhaWxzLkxPRykmJihudWxsPT1oLmRhdGEuZGV0YWlsc3x8bnVsbD09aC5kYXRhLmRldGFpbHMuTE9HP251bGw6aC5kYXRh''@;'; put 'put ''LmRldGFpbHMuTE9HLnRyaW0oKS5sZW5ndGgpPjApLGZlKCksTWUoIm5nSWYiLCFoLmZvcmNlUmVsb2FkKSxmZSgpLE1lKCJuZ0lmIixoLmZvcmNlUmVsb2FkKSl9LGRlcGVuZGVuY2llczpbYmEsb3UsS3UsdEVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQVllPSgp''@;'; put 'put ''PT5bIi8iXSxnaGU9KCk9PlsiL3ZpZXciXSxtaGU9KCk9PlsiL2hvbWUiXSxFRz0oKT0+WyIvcmV2aWV3L3N1Ym1pdHRlZCJdLGtZZT0oKT0+WyIvcmV2aWV3L2FwcHJvdmUiXSxEWWU9KCk9PlsiL3Jldmlldy9oaXN0b3J5Il07ZnVuY3Rpb24gSVllKGMsbCl7MSZjJiYoc2koMCksZGUoMSwi''@;'; put 'put ''ZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLExlKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSB0byB1cGdyYWRlIGNvbnRhY3QgIiksR3QoNywiY29udGFjdC1saW5rIiwyMiksaGUoKSgpKCks''@;'; put 'put ''ZGUoOCwiYSIsMjMpLExlKDksIlVwZGF0ZSBMaWNlbmNlIEtleSIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gUlllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUs''@;'; put 'put ''ImRpdiIsMjEpLExlKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSBQcm9ibGVtIHdpdGggbGljZW5jZSAiKSxoZSgpKCkoKSxkZSg3LCJhIiwyNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMyk7cmV0dXJuIEN0KGgubGljZW5jZVByb2JsZW1EZXRh''@;'; put 'put ''aWxzKGgubGljZW5jZVByb2JsZW0udmFsdWUpKX0pLExlKDgsIk1vcmUgZGV0YWlscyIpLGhlKCksbGkoKX19ZnVuY3Rpb24gTFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxJWWUsMTAsMCwibmctY29udGFpbmVyIiwxKSgyLFJZZSw5LDAsIm5nLWNvbnRhaW5lciIsMSks''@;'; put 'put ''aGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5saWNlbmNlUHJvYmxlbS52YWx1ZSl9fWZ1bmN0aW9uIE9ZZShjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxMZSgxLCJVcGRh''@;'; put 'put ''dGUgTGljZW5jZSBLZXkiKSxoZSgpKX1mdW5jdGlvbiBQWWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI1KSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxHdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2IiwyMSksTGUoNiksR3QoNywiY29udGFjdC1saW5r''@;'; put 'put ''IiwyMiksTGUoOCksaGUoKSgpKCksZ3QoOSxPWWUsMiwwLCJhIiwyNiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDYpLFV1KCIgVGhpcyBsaWNlbnNlIGtleSB3aWxsIGV4cGlyZSBpbiAiLGEubGljZW5zZUV4cGlyaW5nRGF5cywiICIsMT09PWEubGljZW5zZUV4cGlyaW5nRGF5cz8i''@;'; put 'put ''ZGF5IjoiZGF5cyIsIi4gUGxlYXNlIGNvbnRhY3QgIiksZmUoMiksRHIoIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlIGZvciBzaXRlIGlkICIsYS5zeXNzaXRlLmdldFZhbHVlKCksIi4gIiksZmUoKSxNZSgibmdJZiIsIWEuZnJlZVRpZXJCYW5uZXIp''@;'; put 'put ''fX1mdW5jdGlvbiBGWWUoYyxsKXsxJmMmJihkZSgwLCJhIiwyMyksTGUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IiksaGUoKSl9ZnVuY3Rpb24gSFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyNSkoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24i''@;'; put 'put ''LDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLExlKDYsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgZXhjZWVkcyB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxpY2Vuc2UuIFBsZWFzZSBjb250YWN0ICIpLEd0KDcsImNvbnRhY3QtbGluayIsMjIpLExlKDgpLGhlKCkoKSgp''@;'; put 'put ''LGd0KDksRlllLDIsMCwiYSIsMjYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSg4KSxEcigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxmZSgpLE1lKCJuZ0lmIiwhYS5s''@;'; put 'put ''aWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIE5ZZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsTFllLDMsMiwiZGl2IiwxNCkoMixQWWUsMTAsNCwiZGl2IiwxNSkoMyxIWWUsMTAsMiwiZGl2IiwxNSksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUo''@;'; put 'put ''KSxNZSgibmdJZiIsYS5mcmVlVGllckJhbm5lciYmKCFhLmxpY2Vuc2VFeHBpcmluZ0RheXN8fGEubGljZW5zZUV4cGlyaW5nRGF5czwwKSksZmUoKSxNZSgibmdJZiIsYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lciksZmUoKSxNZSgibmdJZiIsYS5hcHBPdmVyQ2Fw''@;'; put 'put ''YWNpdHkpfX1mdW5jdGlvbiBWWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudG9nZ2xlU2lkZWJhcigpKX0pLEd0KDEsImNsci1pY29uIiwyOCksaGUoKX19ZnVuY3Rpb24gQlllKGMs''@;'; put 'put ''bCl7MSZjJiYoZGUoMCwiYSIsMjkpLEd0KDEsImltZyIsMzApKDIsImltZyIsMzEpLGhlKCkpLDImYyYmTWUoInJvdXRlckxpbmsiLEdzKDEsQVllKSl9ZnVuY3Rpb24galllKGMsbCl7MSZjJiYoZGUoMCwiYSIpLEd0KDEsInNwYW4iLDMyKSxoZSgpKX1mdW5jdGlvbiB6WWUoYyxsKXsxJmMm''@;'; put 'put ''JihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNDApKDEsImEiLDQxKSxMZSgyLCJWSUVXIiksaGUoKSxkZSgzLCJhIiw0MSksTGUoNCwiTE9BRCIpLGhlKCksZGUoNSwiYSIsNDEpLExlKDYsIlJFVklFVyIpLGhlKCkoKSksMiZjJiYoZmUoKSxNZSgicm91dGVyTGluayIsR3MoMyxnaGUpKSxm''@;'; put 'put ''ZSgyKSxNZSgicm91dGVyTGluayIsR3MoNCxtaGUpKSxmZSgyKSxNZSgicm91dGVyTGluayIsR3MoNSxFRykpKX1mdW5jdGlvbiBVWWUoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJkaXYiLDMzKSgyLCJjbHItZHJvcGRvd24iKSgzLCJidXR0b24iLDM0KSxMZSg0LCIgTWVudSAiKSxoZSgp''@;'; put 'put ''LGd0KDUselllLDcsNiwiY2xyLWRyb3Bkb3duLW1lbnUiLDM1KSxoZSgpKCksZGUoNiwiZGl2IiwzNikoNywiYSIsMzcpLExlKDgsIlZJRVciKSxoZSgpLGRlKDksImEiLDM4KSxMZSgxMCwiTE9BRCIpLGhlKCksZGUoMTEsImEiLDM5KSxMZSgxMiwiUkVWSUVXIiksaGUoKSgpLGxpKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1SZSgpO2ZlKDcpLE1lKCJyb3V0ZXJMaW5rIixHcyg3LGdoZSkpLGZlKDIpLFRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdG9yIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdC1yZWNvcmQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJob21l''@;'; put 'put ''IikpLE1lKCJyb3V0ZXJMaW5rIixHcyg4LG1oZSkpLGZlKDIpLFRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksTWUoInJvdXRlckxp''@;'; put 'put ''bmsiLEdzKDksRUcpKX19ZnVuY3Rpb24gWlllKGMsbCl7aWYoMSZjJiYoZGUoMCwibmF2Iiw0MikoMSwidWwiLDQzKSgyLCJsaSIsNDQpKDMsImEiLDM3KSxMZSg0LCJTVUJNSVQiKSxoZSgpKCksZGUoNSwibGkiLDQ0KSg2LCJhIiwzNyksTGUoNywiQVBQUk9WRSIpLGhlKCkoKSxkZSg4LCJs''@;'; put 'put ''aSIsNDQpKDksImEiLDM3KSxMZSgxMCwiSElTVE9SWSIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLE1lKCJyb3V0ZXJMaW5rIixHcyg1LEVHKSksZmUoMyksVHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIikpLE1lKCJyb3V0ZXJMaW5rIixH''@;'; put 'put ''cyg2LGtZZSkpLGZlKDMpLE1lKCJyb3V0ZXJMaW5rIixHcyg3LERZZSkpfX1mdW5jdGlvbiBXWWUoYyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiBZWWUoYyxsKXsxJmMmJkd0KDAsInJvdXRlci1vdXRsZXQiKX1mdW5jdGlvbiBHWWUoYyxsKXsxJmMmJkd0KDAsImFwcC1h''@;'; put 'put ''bGVydHMiKX1mdW5jdGlvbiAkWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhcHAtaW5mby1tb2RhbCIsNDUpLEZ0KCJvbkNvbmZpcm1Nb2RhbENsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLmNsb3NlQWJvcnRNb2RhbCho''@;'; put 'put ''LmlkKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7TWUoImRhdGEiLGEpKCJmb3JjZVJlbG9hZCIsIWQuc3RhcnR1cERhdGFMb2FkZWQmJjE9PT1kLnNhc2pzQWJvcnRzLmxlbmd0aCl9fWZ1bmN0aW9uIEtZZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNDkpLEd0''@;'; put 'put ''KDEsImRpdiIsNTApKDIsImRpdiIsNTEpKDMsImRpdiIsNTIpLGhlKCkpfWZ1bmN0aW9uIHFZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLEd0KDEsImltZyIsNDcpLGd0KDIsS1llLDQsMCwiZGl2Iiw0OCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYiLG51''@;'; put 'put ''bGw9PT1hLmFwcEFjdGl2ZSl9fVRzLmFkZEljb25zKFsibW9vbiIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOC4xMSAzMi4wMDAzQzEwLjMzIDMyLjAwMDMgNCAyNS43MjAzIDQgMTcuOTkwM0M0IDEwLjI2MDMgMTAuMDMgNC4yMDAzIDE3LjczIDQuMDAwM0MxOC4xNSAzLjk5MDMgMTguNTIgNC4y''@;'; put 'put ''MzAzIDE4LjY4IDQuNjEwM0MxOC44NCA0Ljk5MDMgMTguNzUgNS40MzAzIDE4LjQ2IDUuNzIwM0MxNi42OSA3LjQ1MDMgMTUuNzEgOS43NjAzIDE1LjcxIDEyLjIxMDNDMTUuNzEgMTcuMjQwMyAxOS44MyAyMS4zMzAzIDI0LjkxIDIxLjMzMDNDMjYuOSAyMS4zMzAzIDI4LjggMjAuNzAwMyAz''@;'; put 'put ''MC40MSAxOS41MTAzQzMwLjc0IDE5LjI3MDMgMzEuMTkgMTkuMjUwMyAzMS41MyAxOS40NjAzQzMxLjg4IDE5LjY4MDMgMzIuMDYgMjAuMDgwMyAzMS45OSAyMC40OTAzQzMwLjc4IDI3LjE2MDMgMjQuOTQgMzIuMDAwMyAxOC4xMSAzMi4wMDAzWk0xNS40MyA2LjI5MDNDOS45OSA3LjQ4MDMg''@;'; put 'put ''NiAxMi4yNDAzIDYgMTcuOTkwM0M2IDI0LjYxMDMgMTEuNDMgMzAuMDAwMyAxOC4xMSAzMC4wMDAzQzIzLjE2IDMwLjAwMDMgMjcuNTggMjYuOTIwMyAyOS4zNyAyMi40MDAzQzI3Ljk3IDIzLjAxMDMgMjYuNDYgMjMuMzIwMyAyNC45MSAyMy4zMjAzQzE4Ljc0IDIzLjMyMDMgMTMuNzEgMTgu''@;'; put 'put ''MzMwMyAxMy43MSAxMi4yMDAzQzEzLjcxIDEwLjA3MDMgMTQuMzEgOC4wMzAzIDE1LjQzIDYuMjgwM1Y2LjI5MDNaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LjExIDMyLjAwMDNDMTAuMzMgMzIuMDAwMyA0IDI1LjcyMDMgNCAxNy45OTAzQzQgMTAuMjYwMyAxMC4wMyA0LjIwMDMgMTcuNzMg''@;'; put 'put ''NC4wMDAzQzE4LjE1IDMuOTkwMyAxOC41MiA0LjIzMDMgMTguNjggNC42MTAzQzE4Ljg0IDQuOTkwMyAxOC43NSA1LjQzMDMgMTguNDYgNS43MjAzQzE2LjY5IDcuNDUwMyAxNS43MSA5Ljc2MDMgMTUuNzEgMTIuMjEwM0MxNS43MSAxNy4yNDAzIDE5LjgzIDIxLjMzMDMgMjQuOTEgMjEuMzMw''@;'; put 'put ''M0MyNi45IDIxLjMzMDMgMjguOCAyMC43MDAzIDMwLjQxIDE5LjUxMDNDMzAuNzQgMTkuMjcwMyAzMS4xOSAxOS4yNTAzIDMxLjUzIDE5LjQ2MDNDMzEuODggMTkuNjgwMyAzMi4wNiAyMC4wODAzIDMxLjk5IDIwLjQ5MDNDMzAuNzggMjcuMTYwMyAyNC45NCAzMi4wMDAzIDE4LjExIDMyLjAw''@;'; put 'put ''MDNaIi8+J31dLFsic3VuIix7b3V0bGluZTonPHBhdGggZD0iTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYu''@;'; put 'put ''MyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk03IDE4QzcgMTcuNDUgNi41NSAxNyA2IDE3SDNDMi40NSAxNyAyIDE3LjQ1IDIgMThDMiAxOC41NSAyLjQ1IDE5IDMgMTlINkM2LjU1IDE5IDcgMTguNTUgNyAxOFpNMTggN0Mx''@;'; put 'put ''OC41NSA3IDE5IDYuNTUgMTkgNlYzQzE5IDIuNDUgMTguNTUgMiAxOCAyQzE3LjQ1IDIgMTcgMi40NSAxNyAzVjZDMTcgNi41NSAxNy40NSA3IDE4IDdaTTI2LjQ5IDEwLjUxQzI2Ljc1IDEwLjUxIDI3IDEwLjQxIDI3LjIgMTAuMjJMMjkuMzIgOC4xQzI5LjcxIDcuNzEgMjkuNzEgNy4wOCAy''@;'; put 'put ''OS4zMiA2LjY5QzI4LjkzIDYuMyAyOC4zIDYuMyAyNy45MSA2LjY5TDI1Ljc5IDguODFDMjUuNCA5LjIgMjUuNCA5LjgzIDI1Ljc5IDEwLjIyQzI1Ljk5IDEwLjQyIDI2LjI0IDEwLjUxIDI2LjUgMTAuNTFIMjYuNDlaTTguODEgMjUuNzhMNi42OSAyNy45QzYuMyAyOC4yOSA2LjMgMjguOTIg''@;'; put 'put ''Ni42OSAyOS4zMUM2Ljg5IDI5LjUxIDcuMTQgMjkuNiA3LjQgMjkuNkM3LjY2IDI5LjYgNy45MSAyOS41IDguMTEgMjkuMzFMMTAuMjMgMjcuMTlDMTAuNjIgMjYuOCAxMC42MiAyNi4xNyAxMC4yMyAyNS43OEM5Ljg0IDI1LjM5IDkuMjEgMjUuMzkgOC44MiAyNS43OEg4LjgxWk0zMyAxN0gz''@;'; put 'put ''MEMyOS40NSAxNyAyOSAxNy40NSAyOSAxOEMyOSAxOC41NSAyOS40NSAxOSAzMCAxOUgzM0MzMy41NSAxOSAzNCAxOC41NSAzNCAxOEMzNCAxNy40NSAzMy41NSAxNyAzMyAxN1pNMTggOUMxMy4wNCA5IDkgMTMuMDQgOSAxOEM5IDIyLjk2IDEzLjA0IDI3IDE4IDI3QzIyLjk2IDI3IDI3IDIy''@;'; put 'put ''Ljk2IDI3IDE4QzI3IDEzLjA0IDIyLjk2IDkgMTggOVpNMTggMjVDMTQuMTQgMjUgMTEgMjEuODYgMTEgMThDMTEgMTQuMTQgMTQuMTQgMTEgMTggMTFDMjEuODYgMTEgMjUgMTQuMTQgMjUgMThDMjUgMjEuODYgMjEuODYgMjUgMTggMjVaTTI3LjE5IDI1Ljc4QzI2LjggMjUuMzkgMjYuMTcg''@;'; put 'put ''MjUuMzkgMjUuNzggMjUuNzhDMjUuMzkgMjYuMTcgMjUuMzkgMjYuOCAyNS43OCAyNy4xOUwyNy45IDI5LjMxQzI4LjEgMjkuNTEgMjguMzUgMjkuNiAyOC42MSAyOS42QzI4Ljg3IDI5LjYgMjkuMTIgMjkuNSAyOS4zMiAyOS4zMUMyOS43MSAyOC45MiAyOS43MSAyOC4yOSAyOS4zMiAyNy45''@;'; put 'put ''TDI3LjIgMjUuNzhIMjcuMTlaTTE4IDI5QzE3LjQ1IDI5IDE3IDI5LjQ1IDE3IDMwVjMzQzE3IDMzLjU1IDE3LjQ1IDM0IDE4IDM0QzE4LjU1IDM0IDE5IDMzLjU1IDE5IDMzVjMwQzE5IDI5LjQ1IDE4LjU1IDI5IDE4IDI5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04LjgxIDI1Ljc4TDYuNjkg''@;'; put 'put ''MjcuOUM2LjMgMjguMjkgNi4zIDI4LjkyIDYuNjkgMjkuMzFDNi44OSAyOS41MSA3LjE0IDI5LjYgNy40IDI5LjZDNy42NiAyOS42IDcuOTEgMjkuNSA4LjExIDI5LjMxTDEwLjIzIDI3LjE5QzEwLjYyIDI2LjggMTAuNjIgMjYuMTcgMTAuMjMgMjUuNzhDOS44NCAyNS4zOSA5LjIxIDI1LjM5''@;'; put 'put ''IDguODIgMjUuNzhIOC44MVpNNyAxOEM3IDE3LjQ1IDYuNTUgMTcgNiAxN0gzQzIuNDUgMTcgMiAxNy40NSAyIDE4QzIgMTguNTUgMi40NSAxOSAzIDE5SDZDNi41NSAxOSA3IDE4LjU1IDcgMThaTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41''@;'; put 'put ''MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk0yNi40OSAxMC41MUMyNi43NSAxMC41MSAy''@;'; put 'put ''NyAxMC40MSAyNy4yIDEwLjIyTDI5LjMyIDguMUMyOS43MSA3LjcxIDI5LjcxIDcuMDggMjkuMzIgNi42OUMyOC45MyA2LjMgMjguMyA2LjMgMjcuOTEgNi42OUwyNS43OSA4LjgxQzI1LjQgOS4yIDI1LjQgOS44MyAyNS43OSAxMC4yMkMyNS45OSAxMC40MiAyNi4yNCAxMC41MSAyNi41IDEw''@;'; put 'put ''LjUxSDI2LjQ5Wk0xOCA3QzE4LjU1IDcgMTkgNi41NSAxOSA2VjNDMTkgMi40NSAxOC41NSAyIDE4IDJDMTcuNDUgMiAxNyAyLjQ1IDE3IDNWNkMxNyA2LjU1IDE3LjQ1IDcgMTggN1pNMTggMjlDMTcuNDUgMjkgMTcgMjkuNDUgMTcgMzBWMzNDMTcgMzMuNTUgMTcuNDUgMzQgMTggMzRDMTgu''@;'; put 'put ''NTUgMzQgMTkgMzMuNTUgMTkgMzNWMzBDMTkgMjkuNDUgMTguNTUgMjkgMTggMjlaTTMzIDE3SDMwQzI5LjQ1IDE3IDI5IDE3LjQ1IDI5IDE4QzI5IDE4LjU1IDI5LjQ1IDE5IDMwIDE5SDMzQzMzLjU1IDE5IDM0IDE4LjU1IDM0IDE4QzM0IDE3LjQ1IDMzLjU1IDE3IDMzIDE3Wk0yNy4xOSAy''@;'; put 'put ''NS43OEMyNi44IDI1LjM5IDI2LjE3IDI1LjM5IDI1Ljc4IDI1Ljc4QzI1LjM5IDI2LjE3IDI1LjM5IDI2LjggMjUuNzggMjcuMTlMMjcuOSAyOS4zMUMyOC4xIDI5LjUxIDI4LjM1IDI5LjYgMjguNjEgMjkuNkMyOC44NyAyOS42IDI5LjEyIDI5LjUgMjkuMzIgMjkuMzFDMjkuNzEgMjguOTIg''@;'; put 'put ''MjkuNzEgMjguMjkgMjkuMzIgMjcuOUwyNy4yIDI1Ljc4SDI3LjE5Wk0xOCA5QzEzLjA0IDkgOSAxMy4wNCA5IDE4QzkgMjIuOTYgMTMuMDQgMjcgMTggMjdDMjIuOTYgMjcgMjcgMjIuOTYgMjcgMThDMjcgMTMuMDQgMjIuOTYgOSAxOCA5WiIvPid9XSxbImV4Y2xhbWF0aW9uLXRyaWFuZ2xl''@;'; put 'put ''Iix7b3V0bGluZTonPHBhdGggZD0iTTE3Ljk5NDMgMjAuOEMxOC41NDQgMjAuOCAxOC45OTM4IDIwLjM1IDE4Ljk5MzggMTkuOFYxNEMxOC45OTM4IDEzLjQ1IDE4LjU0NCAxMyAxNy45OTQzIDEzQzE3LjQ0NDUgMTMgMTYuOTk0NyAxMy40NSAxNi45OTQ3IDE0VjE5LjhDMTYuOTk0NyAyMC4z''@;'; put 'put ''NSAxNy40NDQ1IDIwLjggMTcuOTk0MyAyMC44Wk0xOC44NDM5IDIyLjk1QzE4LjcyMzkgMjIuODQgMTguNTk0IDIyLjc1IDE4LjQ1NDEgMjIuNjlDMTguMTY0MiAyMi41NyAxNy44MjQzIDIyLjU3IDE3LjUzNDUgMjIuNjlDMTcuMzk0NSAyMi43NSAxNy4yNjQ2IDIyLjg0IDE3LjE0NDYgMjIu''@;'; put 'put ''OTVDMTYuOTI0NyAyMy4xOCAxNi43OTQ4IDIzLjQ4IDE2Ljc5NDggMjMuOEMxNi43OTQ4IDI0LjEyIDE2LjkyNDcgMjQuNDIgMTcuMTQ0NiAyNC42NUMxNy4yNjQ2IDI0Ljc2IDE3LjM5NDUgMjQuODUgMTcuNTM0NSAyNC45MUMxNy42ODQ0IDI0Ljk3IDE3LjgzNDMgMjUgMTcuOTk0MyAyNUMx''@;'; put 'put ''OC4xNTQyIDI1IDE4LjMwNDEgMjQuOTcgMTguNDU0MSAyNC45MUMxOC41OTQgMjQuODUgMTguNzIzOSAyNC43NiAxOC44NDM5IDI0LjY1QzE5LjA2MzggMjQuNDIgMTkuMTkzNyAyNC4xMiAxOS4xOTM3IDIzLjhDMTkuMTkzNyAyMy42NCAxOS4xNjM3IDIzLjQ5IDE5LjEwMzggMjMuMzRDMTku''@;'; put 'put ''MDQzOCAyMy4yIDE4Ljk1MzggMjMuMDYgMTguODQzOSAyMi45NVpNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQu''@;'; put 'put ''ODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0yOC44NDk0IDI3LjQ3''@;'; put 'put ''QzI4Ljc1OTUgMjcuNjMgMjguNDc5NiAyOCAyNy45Mzk4IDI4SDguMDU4NjlDNy41MDg5NCAyOCA3LjIzOTA2IDI3LjYzIDcuMTQ5MSAyNy40N0M3LjA1OTE0IDI3LjMxIDYuODY5MjIgMjYuODkgNy4xNDkxIDI2LjQxTDE3LjA2NDcgOC41NUMxNy4zMzQ2IDguMDYgMTcuODA0MyA4IDE3Ljk4''@;'; put 'put ''NDMgOEMxOC4xNjQyIDggMTguNjM0IDguMDUgMTguOTAzOSA4LjU1TDI4LjgzOTQgMjYuNDFDMjkuMTA5MyAyNi44OSAyOC45MTk0IDI3LjMxIDI4LjgyOTQgMjcuNDdIMjguODQ5NFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5''@;'; put 'put ''IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMg''@;'; put 'put ''MzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0xNi43OTQ4IDEzLjVDMTYuNzk0OCAxMi44NCAxNy4zMzQ2IDEyLjMgMTcuOTk0MyAxMi4zQzE4LjY1NCAxMi4zIDE5LjE5MzcgMTIuODQgMTkuMTkzNyAxMy41''@;'; put 'put ''VjE5LjNDMTkuMTkzNyAxOS45NiAxOC42NTQgMjAuNSAxNy45OTQzIDIwLjVDMTcuMzM0NiAyMC41IDE2Ljc5NDggMTkuOTYgMTYuNzk0OCAxOS4zVjEzLjVaTTE4Ljk3MzggMjVDMTguODMzOSAyNS4xMyAxOC42ODQgMjUuMjMgMTguNTI0IDI1LjNDMTguMzQ0MSAyNS4zNyAxOC4xNzQyIDI1''@;'; put 'put ''LjQxIDE3Ljk5NDMgMjUuNDFDMTcuODE0MyAyNS40MSAxNy42MzQ0IDI1LjM4IDE3LjQ1NDUgMjUuM0MxNy4zMDQ2IDI1LjIzIDE3LjE1NDYgMjUuMTMgMTYuOTk0NyAyNC45OUMxNi43MzQ4IDI0LjcyIDE2LjU4NDkgMjQuMzcgMTYuNTg0OSAyNEMxNi41ODQ5IDIzLjYzIDE2LjcyNDggMjMu''@;'; put 'put ''MjkgMTYuOTk0NyAyM0MxNy4xMzQ2IDIyLjg3IDE3LjI4NDYgMjIuNzcgMTcuNDQ0NSAyMi43QzE3LjYxNDQgMjIuNjMgMTcuNzk0MyAyMi41OSAxNy45ODQzIDIyLjU5QzE4LjE3NDIgMjIuNTkgMTguMzU0MSAyMi42MyAxOC41MjQgMjIuN0MxOC42NzQgMjIuNzcgMTguODIzOSAyMi44NyAx''@;'; put 'put ''OC45NzM4IDIzQzE5LjA5MzggMjMuMTIgMTkuMjAzNyAyMy4yOCAxOS4yNzM3IDIzLjQ2QzE5LjM0MzcgMjMuNjQgMTkuMzgzNiAyMy44MSAxOS4zODM2IDIzLjk5QzE5LjM4MzYgMjQuMzUgMTkuMjQzNyAyNC43IDE4Ljk2MzggMjQuOTlMMTguOTczOCAyNVoiLz4nfV0sWyJ0YWJsZSIse291''@;'; put 'put ''dGxpbmU6JzxwYXRoIGQ9Ik0zMyAxOEMzMy41NSAxOCAzNCAxNy41NSAzNCAxN0MzNCAxNi40NSAzMy41NSAxNiAzMyAxNkgyOFY4SDMzQzMzLjU1IDggMzQgNy41NSAzNCA3QzM0IDYuNDUgMzMuNTUgNiAzMyA2SDhWM0M4IDIuNDUgNy41NSAyIDcgMkM2LjQ1IDIgNiAyLjQ1IDYgM1Y2SDND''@;'; put 'put ''Mi40NSA2IDIgNi40NSAyIDdDMiA3LjU1IDIuNDUgOCAzIDhINlYzM0M2IDMzLjU1IDYuNDUgMzQgNyAzNEM3LjU1IDM0IDggMzMuNTUgOCAzM1YyOEgxNlYzM0MxNiAzMy41NSAxNi40NSAzNCAxNyAzNEMxNy41NSAzNCAxOCAzMy41NSAxOCAzM1YyOEgyNlYzM0MyNiAzMy41NSAyNi40NSAz''@;'; put 'put ''NCAyNyAzNEMyNy41NSAzNCAyOCAzMy41NSAyOCAzM1YyOEgzM0MzMy41NSAyOCAzNCAyNy41NSAzNCAyN0MzNCAyNi40NSAzMy41NSAyNiAzMyAyNkgyOFYxOEgzM1pNMTYgMjZIOFYxOEgxNlYyNlpNMTYgMTZIOFY4SDE2VjE2Wk0yNiAyNkgxOFYxOEgyNlYyNlpNMjYgMTZIMThWOEgyNlYx''@;'; put 'put ''NloiLz4nfV0sWyJ0cmFzaCIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNy45OCAzMUMyOCAzMS4yNSAyNy45MiAzMS40OSAyNy43NiAzMS42OEMyNy42IDMxLjg3IDI3LjM3IDMxLjk4IDI3LjEyIDMySDguODVDOC42IDMxLjk4IDguMzcgMzEuODcgOC4yMSAzMS42OEM4LjA1IDMxLjQ5IDcuOTcg''@;'; put 'put ''MzEuMjUgNy45OSAzMVYxMS4wM0g1Ljk3VjMxQzUuOTUgMzEuNzggNi4yNCAzMi41MyA2Ljc4IDMzLjA5QzcuMzIgMzMuNjUgOC4wNiAzMy45OCA4Ljg1IDM0SDI3LjEyQzI3LjkgMzMuOTggMjguNjUgMzMuNjYgMjkuMTkgMzMuMDlDMjkuNzMgMzIuNTIgMzAuMDIgMzEuNzcgMzAgMzFWMTEu''@;'; put 'put ''MDNIMjcuOThWMzFaTTEzIDEyLjk4VjI3Ljk4SDE1LjAyVjEyLjk4SDEzWk0xNSA0SDIxVjZIMjNWNEMyMyAyLjkgMjIuMSAyIDIxIDJIMTVDMTMuOSAyIDEzIDIuOSAxMyA0VjZIMTVWNFpNMzAuOTkgNi45OEg1LjAxQzQuNDUgNi45OCA0IDcuNDMgNCA3Ljk4QzQgOC41MyA0LjQ1IDguOTgg''@;'; put 'put ''NS4wMSA4Ljk4SDMwLjk5QzMxLjU1IDguOTggMzIgOC41MyAzMiA3Ljk4QzMyIDcuNDMgMzEuNTUgNi45OCAzMC45OSA2Ljk4Wk0yMC45OCAxMi45OFYyNy45OEgyM1YxMi45OEgyMC45OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTUgNEgyMVY2SDIzVjRDMjMgMi45IDIyLjEgMiAyMSAySDE1''@;'; put 'put ''QzEzLjkgMiAxMyAyLjkgMTMgNFY2SDE1VjRaTTMwLjk5IDYuOThINS4wMUM0LjQ1IDYuOTggNCA3LjQzIDQgNy45OEM0IDguNTMgNC40NSA4Ljk4IDUuMDEgOC45OEgzMC45OUMzMS41NSA4Ljk4IDMyIDguNTMgMzIgNy45OEMzMiA3LjQzIDMxLjU1IDYuOTggMzAuOTkgNi45OFpNNS45NyAx''@;'; put 'put ''MS4wM1YzMUM1Ljk1IDMxLjc4IDYuMjQgMzIuNTMgNi43OCAzMy4wOUM3LjMyIDMzLjY1IDguMDYgMzMuOTggOC44NSAzNEgyNy4xMkMyNy45IDMzLjk4IDI4LjY1IDMzLjY2IDI5LjE5IDMzLjA5QzI5LjczIDMyLjUyIDMwLjAyIDMxLjc3IDMwIDMxVjExLjAzSDUuOTdaTTIwLjc5IDI4Ljgy''@;'; put 'put ''VjE1SDIzLjIxVjI5SDIwLjc5VjI4LjgyWk0xMi44MSAyOC44MlYxNUgxNS4yM1YyOUgxMi44MVYyOC44MloiLz4nfV0sWyJwcm9jZXNzLW9uLXZtIix7b3V0bGluZTonPHBhdGggZD0iTTEyIDE0LjUwMDFWMjQuNTAwMUMxMiAyNS4wNTAxIDEyLjQ1IDI1LjUwMDEgMTMgMjUuNTAwMUgyM0My''@;'; put 'put ''My41NSAyNS41MDAxIDI0IDI1LjA1MDEgMjQgMjQuNTAwMVYxNC41MDAxQzI0IDEzLjk1MDEgMjMuNTUgMTMuNTAwMSAyMyAxMy41MDAxSDEzQzEyLjQ1IDEzLjUwMDEgMTIgMTMuOTUwMSAxMiAxNC41MDAxWk0xNCAxNS41MDAxSDIyVjIzLjUwMDFIMTRWMTUuNTAwMVpNNS4yNiAyMi4yODAx''@;'; put 'put ''QzUuODEgMjIuMjAwMSA2LjE5IDIxLjcwMDEgNi4xMSAyMS4xNTAxQzYuMDMgMjAuNjEwMSA2IDIwLjA1MDEgNiAxOS40OTAxQzYgMTMuNDEwMSAxMC41NSA4LjM5MDA2IDE2LjQ3IDcuNjEwMDZMMTYuMjkgNy43OTAwNkMxNS45IDguMTgwMDYgMTUuOSA4LjgxMDA2IDE2LjI5IDkuMjAwMDZD''@;'; put 'put ''MTYuNDkgOS40MDAwNiAxNi43NCA5LjQ5MDA2IDE3IDkuNDkwMDZDMTcuMjYgOS40OTAwNiAxNy41MSA5LjM5MDA2IDE3LjcxIDkuMjAwMDZMMjAuNDIgNi40OTAwNkwxNy43MSAzLjc5MDA2QzE3LjMyIDMuNDAwMDYgMTYuNjkgMy40MDAwNiAxNi4zIDMuNzkwMDZDMTUuOTEgNC4xODAwNiAx''@;'; put 'put ''NS45MSA0LjgxMDA2IDE2LjMgNS4yMDAwNkwxNi42NiA1LjU2MDA2QzkuNTYgNi4yNTAwNiA0IDEyLjIzMDEgNCAxOS41MDAxQzQgMjAuMTUwMSA0LjA0IDIwLjgwMDEgNC4xMyAyMS40MzAxQzQuMiAyMS45MzAxIDQuNjMgMjIuMjkwMSA1LjEyIDIyLjI5MDFDNS4xNiAyMi4yOTAxIDUuMjEg''@;'; put 'put ''MjIuMjkwMSA1LjI2IDIyLjI5MDFWMjIuMjgwMVpNMjMuNjcgMzAuMDcwMUMyMS45NCAzMS4wMDAxIDE5Ljk4IDMxLjQ5MDEgMTggMzEuNDkwMUMxNC4zIDMxLjQ5MDEgMTAuODMgMjkuNzYwMSA4LjU3IDI2LjkwMDFMOC44MyAyNi45NDAxQzkuMzggMjcuMDQwMSA5Ljg5IDI2LjY2MDEgOS45''@;'; put 'put ''OCAyNi4xMjAxQzEwLjA3IDI1LjU4MDEgOS43IDI1LjA2MDEgOS4xNiAyNC45NzAxTDUuMzggMjQuMzQwMUw0Ljc1IDI4LjEyMDFDNC42NiAyOC42NjAxIDUuMDMgMjkuMTgwMSA1LjU3IDI5LjI3MDFDNS42MyAyOS4yNzAxIDUuNjggMjkuMjgwMSA1Ljc0IDI5LjI4MDFDNi4yMiAyOS4yODAx''@;'; put 'put ''IDYuNjQgMjguOTMwMSA2LjczIDI4LjQ1MDFMNi44MiAyNy45MjAxQzkuNDUgMzEuNDAwMSAxMy41OSAzMy41MDAxIDE4IDMzLjUwMDFDMjAuMzEgMzMuNTAwMSAyMi42IDMyLjkzMDEgMjQuNjIgMzEuODQwMUMyNS4xMSAzMS41ODAxIDI1LjI5IDMwLjk3MDEgMjUuMDMgMzAuNDkwMUMyNC43''@;'; put 'put ''NyAzMC4wMDAxIDI0LjE2IDI5LjgyMDEgMjMuNjggMzAuMDgwMUwyMy42NyAzMC4wNzAxWk0zMC4wOSAyNi44MzAxTDI5LjkgMjYuODYwMUMzMS4yNiAyNC42NjAxIDMyIDIyLjEyMDEgMzIgMTkuNDkwMUMzMiAxMy45MDAxIDI4LjY4IDguODUwMDYgMjMuNTUgNi42MzAwNkMyMy4wNCA2LjQx''@;'; put 'put ''MDA2IDIyLjQ2IDYuNjQwMDYgMjIuMjQgNy4xNTAwNkMyMi4wMiA3LjY2MDA2IDIyLjI1IDguMjUwMDYgMjIuNzYgOC40NjAwNkMyNy4xNiAxMC4zNjAxIDMwLjAxIDE0LjY5MDEgMzAuMDEgMTkuNDgwMUMzMC4wMSAyMS44MDAxIDI5LjM0IDI0LjA0MDEgMjguMSAyNS45NjAxTDI3Ljk5IDI1''@;'; put 'put ''LjMyMDFDMjcuOSAyNC43ODAxIDI3LjM5IDI0LjQwMDEgMjYuODQgMjQuNTAwMUMyNi4zIDI0LjU5MDEgMjUuOTMgMjUuMTAwMSAyNi4wMiAyNS42NTAxTDI2LjY0IDI5LjQzMDFMMzAuNDIgMjguODEwMUMzMC45NiAyOC43MjAxIDMxLjMzIDI4LjIxMDEgMzEuMjQgMjcuNjYwMUMzMS4xNSAy''@;'; put 'put ''Ny4xMjAxIDMwLjY0IDI2Ljc0MDEgMzAuMDkgMjYuODQwMVYyNi44MzAxWiIvPid9XSk7bGV0IFhZZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSl7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5y''@;'; put 'put ''b3V0ZT1mLHRoaXMubG9jYXRpb249dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUQsdGhpcy5jZHI9Wix0aGlzLmVsZW1lbnRSZWY9cmUsdGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPW51bGwsdGhpcy5zYXNqc0Fib3J0cz1bXSx0aGlzLmVkaXRvckFjdGl2ZT0h''@;'; put 'put ''MSx0aGlzLmFwcHJvdmVBY3RpdmU9ITEsdGhpcy5mcmVlVGllckJhbm5lcj10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIudmFsdWUsdGhpcy5saWNlbmNlUHJvYmxlbT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VQcm9ibGVtLHRoaXMuYXBwT3ZlckNhcGFjaXR5PSExLHRo''@;'; put 'put ''aXMuYXBwQWN0aXZlPW51bGwsdGhpcy5yZXF1ZXN0c01vZGFsPSExLHRoaXMuc2hvd1JlZ2lzdHJhdGlvbj0hMCx0aGlzLnN0YXJ0dXBEYXRhTG9hZGVkPSExLHRoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiExLGZlYXR1cmVOYW1lOiIifSx0aGlzLnN5c3NpdGU9dGhpcy5hcHBTZXJ2aWNl''@;'; put 'put ''LnN5c3NpdGUsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5wYXJzZURjQWRhcHRlclNldHRpbmdzKCksd2luZG93LmFwcGluZm89KCk9Pntjb25zb2xlLnRhYmxlKHsiQWRhcHRlciB2ZXJzaW9uIjoiNC4xMi4xIiwiQXBwIHZlcnNpb24i''@;'; put 'put ''OiJ2Ny4wLjAiLnJlcGxhY2UoInYiLCIiKSwiQnVpbGQgdGltZXN0YW1wIjpPbyhwYXJzZUludCgiMTc0OTY0OTU3ODA4OSIpKS5mb3JtYXQoIkRELU1NTS1ZWVlZIEhIOk1NIiksIi4uLiI6Ii4uLiJ9KX0sdGhpcy5zdWJzY3JpYmVUb0xpY2Vuc2VFdmVudHMoKSx0aGlzLmNvbW1pdFZlcj0i''@;'; put 'put ''djcuMC4wIi5yZXBsYWNlKCJ2IiwiIikrIi5nOGM2MDQ3MyIsaC5ldmVudHMuc3Vic2NyaWJlKGNlPT57aWYodGhpcy5yb3V0ZVVybD10aGlzLnJvdXRlci51cmwsdHlwZW9mIHRoaXMucm91dGVVcmw8InUiJiZ0aGlzLnJvdXRlVXJsLmxlbmd0aD40KXtsZXQgYmU9dGhpcy5yb3V0ZVVybC5z''@;'; put 'put ''cGxpdCgiLyIpWzFdOyJlZGl0b3IiPT09YmU/KHRoaXMuZXJyVG9wPSEwLHRoaXMuZWRpdG9yQWN0aXZlPSEwLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSk6ImhvbWUiPT09YmU/KHRoaXMuZXJyVG9wPSExLHRoaXMuZWRpdG9yQWN0aXZlPSEwLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSk6KHRoaXMu''@;'; put 'put ''ZXJyVG9wPSEwLHRoaXMuZWRpdG9yQWN0aXZlPSExKSxLbi5yb290UGFyYW09YmV9dHlwZW9mIHRoaXMucm91dGVVcmw8InUiJiZ0aGlzLnJvdXRlVXJsLmxlbmd0aD42JiYodGhpcy5hcHByb3ZlQWN0aXZlPSEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygiYXBwcm92ZURldCIpfHwhIXRoaXMu''@;'; put 'put ''cm91dGVVcmwuaW5jbHVkZXMoInRvYXBwcm92ZSIpKX0pLHRoaXMuc3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpLHRoaXMuc3Vic2NyaWJlVG9SZXF1ZXN0c01vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1N0YXJ0dXBEYXRhKCksdGhpcy5zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpLHRoaXMuc3Vi''@;'; put 'put ''c2NyaWJlVG9EZW1vTGltaXRNb2RhbCgpLHdpbmRvdy5mcmFtZUVsZW1lbnQmJih3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''ImFsbG93ZnVsbHNjcmVlbiIsIiIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJmcmFtZWJvcmRlciIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2luaGVpZ2h0IiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJn''@;'; put 'put ''aW53aWR0aCIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwiYXV0byIpLHdpbmRvdy5mb2N1cygpKX1wYXJzZURjQWRhcHRlclNldHRpbmdzKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzYXNqcyIpO2lmKCFhKXJldHVybiB0aGlz''@;'; put 'put ''LmxpY2VuY2VTZXJ2aWNlLmRlYWN0aXZhdGVBcHAoKSx2b2lkIHNldFRpbWVvdXQoKCk9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJQbGVhc2UgbWFrZSBzdXJlICdTQVNKUycgdGFnIHdpdGggY29uZmlnIGF0dHJpYnV0ZXMgaXMgYWRkZWQgdG8gaW5kZXguaHRt''@;'; put 'put ''bCIsbnVsbCwiU0FTanMgQ29uZmlnIG5vdCBmb3VuZCIpfSk7Y29uc3QgZD1mPT5hLmdldEF0dHJpYnV0ZShmKXx8dm9pZCAwLGg9e3NlcnZlclVybDpkKCJzZXJ2ZXJVcmwiKXx8IiIsYXBwTG9jOmQoImFwcExvYyIpfHwiIixzZXJ2ZXJUeXBlOmQoInNlcnZlclR5cGUiKSxsb2dpbk1lY2hh''@;'; put 'put ''bmlzbTpkKCJsb2dpbk1lY2hhbmlzbSIpfHwiIixhZG1pbkdyb3VwOmQoImFkbWluR3JvdXAiKXx8IiIsZGNQYXRoOmQoImRjUGF0aCIpfHwiIixkZWJ1ZzoidHJ1ZSI9PT1kKCJkZWJ1ZyIpfHwhMSx1c2VDb21wdXRlQXBpOnRoaXMucGFyc2VDb21wdXRlQXBpKGQoInVzZUNvbXB1dGVBcGki''@;'; put 'put ''KSksY29udGV4dE5hbWU6ZCgiY29udGV4dE5hbWUiKXx8IiIsaG90TGljZW5jZUtleTpkKCJob3RMaWNlbmNlS2V5Iil8fCIifTt0aGlzLmRjQWRhcHRlclNldHRpbmdzPWgsdGhpcy5hcHBTdG9yZVNlcnZpY2Uuc2V0RGNBZGFwdGVyU2V0dGluZ3MoaCksdGhpcy5hcHBTZXJ2aWNlLnNhc1Nl''@;'; put 'put ''cnZpY2VJbml0KCl9bGljZW5jZVByb2JsZW1EZXRhaWxzKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYSl9cGFyc2VDb21wdXRlQXBpKGEpe3JldHVybiB2b2lkIDA9PT1hfHwidW5kZWZpbmVkIj09PWF8fCJudWxsIj09PWE/bnVsbDoidHJ1ZSI9PT1hfHwhMX1zdWJzY3JpYmVUb0Rl''@;'; put 'put ''bW9MaW1pdE1vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25EZW1vTGltaXRNb2RhbFNob3cuc3Vic2NyaWJlKGE9Pnt0aGlzLmRlbW9MaW1pdE5vdGljZT17b3BlbjohMCxmZWF0dXJlTmFtZTphfX0pfXN1YnNjcmliZVRvTGljZW5zZUV2ZW50cygpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNB''@;'; put 'put ''cHBGcmVlVGllci5zdWJzY3JpYmUoYT0+e3RoaXMuZnJlZVRpZXJCYW5uZXI9YX0pLHRoaXMubGljZW5jZVNlcnZpY2UubGljZW5zZUV4cGlyZXNJbkRheXMuc3Vic2NyaWJlKGE9PnthJiZhPD0xNCYmKHRoaXMubGljZW5zZUV4cGlyaW5nRGF5cz1hKX0pLHRoaXMubGljZW5jZVNlcnZpY2Uu''@;'; put 'put ''aXNBcHBPdmVyQ2FwYWNpdHkuc3Vic2NyaWJlKGE9Pnt0aGlzLmFwcE92ZXJDYXBhY2l0eT1hfSl9c3Vic2NyaWJlVG9BcHBBY3RpdmUoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnN1YnNjcmliZShhPT57dGhpcy5hcHBBY3RpdmU9YX0pfXN1YnNjcmliZVRvU2hvd0Fi''@;'; put 'put ''b3J0TW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblNob3dBYm9ydE1vZGFsLnN1YnNjcmliZShhPT57YS5pZD10aGlzLnNhc2pzQWJvcnRzLmxlbmd0aCsxLHRoaXMuc2FzanNBYm9ydHMucHVzaChhKSx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCl9KX1zdWJzY3JpYmVUb1N0YXJ0dXBEYXRh''@;'; put 'put ''KCl7dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0YXJ0dXBEYXRhTG9hZGVkPSEwfSl9c3Vic2NyaWJlVG9SZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25SZXF1ZXN0c01vZGFsT3Blbi5zdWJzY3JpYmUoYT0+e3Ro''@;'; put 'put ''aXMucmVxdWVzdHNNb2RhbD0hMH0pfWNsb3NlQWJvcnRNb2RhbChhKXtsZXQgZD10aGlzLnNhc2pzQWJvcnRzLmZpbmRJbmRleChoPT5oLmlkPT09YSk7dGhpcy5zYXNqc0Fib3J0cy5zcGxpY2UoZCwxKX10b2dnbGVTaWRlYmFyKCl7dGhpcy5ldmVudFNlcnZpY2UudG9nZ2xlU2lkZWJhcigp''@;'; put 'put ''fWlzTWFpblJvdXRlKGEpe3JldHVybiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoYSl9b3BlbkxpY2VuY2luZ1BhZ2UoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL3VwZGF0ZSIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8''@;'; put 'put ''fGMpKEdlKG9MKSxHZSh1MSksR2UoTHMpLEdlKEN1KSxHZShmaCksR2UodmMpLEdlKFE4KSxHZShFcyksR2UoSmkpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm15LWFwcCJdXSxkZWNsczoyNix2YXJzOjE3LGNvbnN0czpbWzEsIm1haW4tY29udGFp''@;'; put 'put ''bmVyIl0sWzQsIm5nSWYiXSxbMSwiYXBwLWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgbWwtMTAgZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsImxvZ28iLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJocmVmIiwiIyIsImNsYXNzIiwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwic3VibmF2Iiw0LCJuZ0lmIl0sWzMsIm9wZW5lZENoYW5nZSIsIm9wZW5lZCJdLFsz''@;'; put 'put ''LCJkYXRhIiwiZm9yY2VSZWxvYWQiLCJvbkNvbmZpcm1Nb2RhbENsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJj''@;'; put 'put ''bHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbInNpemUiLCIyMCIsInNoYXBlIiwibG9jayJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsImFwcC1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC13YXJuaW5nIiwiaWQiLCJk''@;'; put 'put ''ZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydCBhbGVydC1hcHAtbGV2ZWwgYWxlcnQtZGFuZ2VyIiwiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsNCwibmdJZiJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwi''@;'; put 'put ''YWxlcnQiLCJhbGVydC1hcHAtbGV2ZWwiLCJhbGVydC13YXJuaW5nIl0sWzEsImFsZXJ0LWl0ZW1zIl0sWzEsImFsZXJ0LWl0ZW0iLCJzdGF0aWMiXSxbMSwiYWxlcnQtaWNvbi13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLDEsImFsZXJ0LWljb24iXSxbMSwiYWxlcnQt''@;'; put 'put ''dGV4dCJdLFsiY2xhc3NlcyIsImNvbG9yLXdoaXRlIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLDEsInVwZGF0ZS1rZXkiXSxbMSwidXBkYXRlLWtleSIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwi''@;'; put 'put ''YWxlcnQiLCJhbGVydC1hcHAtbGV2ZWwiLCJhbGVydC1kYW5nZXIiXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsImNsYXNzIiwidXBkYXRlLWtleSIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY3Vyc29yLXBvaW50ZXIiLCJzZWxlY3Qtbm9uZSIsIm1sLTEwIiwi''@;'; put 'put ''ZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsic2l6ZSIsIjI0Iiwic2hhcGUiLCJ0cmVlLXZpZXciXSxbImhyZWYiLCIjIiwxLCJuYXYtbGluayIsMywicm91dGVyTGluayJdLFsic3JjIiwiL1NBU1N0b3Jl''@;'; put 'put ''ZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYy1sb2dvLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28gd2l0aG91dCB0ZXh0IiwxLCJ3aXRob3V0LXRleHQiLCJkLWJsb2NrIiwiZC1tZC1ub25lIl0sWyJzcmMiLCIvU0FTU3Rv''@;'; put 'put ''cmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEsIndpdGgtdGV4dCIsImQtbm9uZSIsImQtbWQtYmxvY2siXSxbMSwiY2xyLWljb24iLCJoZWFkZXIt''@;'; put 'put ''bG9nbyIsIm1sLTEwIl0sWzEsImhlYWRlci1uYXYiLCJkLWZsZXgiLCJkLXNtLW5vbmUiXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsImFyaWEtbGFiZWwiLCJ0b2dnbGUgc2V0dGluZ3MgbWVudSIsMSwibmF2LWljb24iLCJjb2xvci13aGl0ZS1pIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRv''@;'; put 'put ''bS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbMSwiaGVhZGVyLW5hdiIsImQtbm9uZSIsImQtc20tZmxleCJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsMywicm91dGVyTGluayJdLFsxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwzLCJyb3V0ZXJM''@;'; put 'put ''aW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLCJjdXJzb3ItcG9pbnRlciIsMywicm91dGVyTGluayJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJyb3V0ZXJMaW5rIl0sWzEsInN1Ym5hdiJdLFsxLCJuYXYiXSxbMSwibmF2LWl0''@;'; put 'put ''ZW0iXSxbMywib25Db25maXJtTW9kYWxDbGljayIsImRhdGEiLCJmb3JjZVJlbG9hZCJdLFsxLCJhcHAtbG9hZGluZyJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRhY29udHJvbGxlci1zdmciLCJh''@;'; put 'put ''bHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJsb2FkaW5nLWxvZ28iXSxbImNsYXNzIiwic2xpZGVyIiw0LCJuZ0lmIl0sWzEsInNsaWRlciJdLFsxLCJsaW5lIl0sWzEsInN1YmxpbmUiLCJpbmMiXSxbMSwic3VibGluZSIsImRlYyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYm''@;'; put 'put ''KGRlKDAsImRpdiIsMCksZ3QoMSxOWWUsNCwzLCJuZy1jb250YWluZXIiLDEpLGRlKDIsImhlYWRlciIsMiksZ3QoMyxWWWUsMiwwLCJkaXYiLDMpLGRlKDQsImRpdiIsNCksZ3QoNSxCWWUsMywyLCJhIiw1KSg2LGpZZSwyLDAsImEiLDEpLGhlKCksZ3QoNyxVWWUsMTMsMTAsIm5nLWNvbnRh''@;'; put 'put ''aW5lciIsMSksR3QoOCwiYXBwLWhlYWRlci1hY3Rpb25zIiksaGUoKSxndCg5LFpZZSwxMSw4LCJuYXYiLDYpKDEwLFdZZSwxLDAsImFwcC1hbGVydHMiLDEpLGRlKDExLCJhcHAtcmVxdWVzdHMtbW9kYWwiLDcpLGdpKCJvcGVuZWRDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJl''@;'; put 'put ''cXVlc3RzTW9kYWwsdil8fChoLnJlcXVlc3RzTW9kYWw9diksdn0pLGhlKCksR3QoMTIsImFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCIpLGd0KDEzLFlZZSwxLDAsInJvdXRlci1vdXRsZXQiLDEpLEd0KDE0LCJhcHAtbG9naW4iKSxndCgxNSxHWWUsMSwwLCJhcHAtYWxlcnRzIiwxKSgxNiwk''@;'; put 'put ''WWUsMSwyLCJhcHAtaW5mby1tb2RhbCIsOCksZGUoMTcsImNsci1tb2RhbCIsOSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGVtb0xpbWl0Tm90aWNlLm9wZW4sdil8fChoLmRlbW9MaW1pdE5vdGljZS5vcGVuPXYpLHZ9KSxkZSgxOCwiaDMiLDEw''@;'; put 'put ''KSxMZSgxOSksR3QoMjAsImNsci1pY29uIiwxMSksaGUoKSxkZSgyMSwiZGl2IiwxMiksTGUoMjIsIiBDb250YWN0ICIpLEd0KDIzLCJjb250YWN0LWxpbmsiKSxMZSgyNCksaGUoKSgpKCksZ3QoMjUscVllLDMsMSwiZGl2IiwxMykpLDImZCYmKGZlKCksTWUoIm5nSWYiLCFoLnJvdXRlci51''@;'; put 'put ''cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSxNZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgidmlldyIpfHxoLmlzTWFpblJvdXRlKCJob21lIikmJiFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSxNZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygi''@;'; put 'put ''ZGVwbG95IikpLGZlKCksTWUoIm5nSWYiLGgucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLGZlKCksTWUoIm5nSWYiLCFoLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksZmUoMiksTWUoIm5nSWYiLGgucm91''@;'; put 'put ''dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGgucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxoLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksZmUoKSxNZSgibmdJZiIsIWguZXJyVG9wKSxmZSgpLHBpKCJvcGVuZWQiLGgucmVxdWVzdHNNb2RhbCksZmUoMiks''@;'; put 'put ''TWUoIm5nSWYiLGguc3RhcnR1cERhdGFMb2FkZWQpLGZlKDIpLE1lKCJuZ0lmIixoLmVyclRvcCksZmUoKSxNZSgibmdGb3JPZiIsaC5zYXNqc0Fib3J0cyksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLmRlbW9MaW1pdE5vdGljZS5vcGVuKSxNZSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJj''@;'; put 'put ''bHJNb2RhbFNpemUiLCJsZyIpLGZlKDIpLERyKCIgTG9ja2VkIEZlYXR1cmUgKCIsaC5kZW1vTGltaXROb3RpY2UuZmVhdHVyZU5hbWUsIikgIiksZmUoNSksRHIoIiB3aXRoIHlvdXIgc2l0ZSBpZCAoIixoLnN5c3NpdGUudmFsdWUsIikgdG8gYWN0aXZhdGUhICIpLGZlKCksTWUoIm5nSWYi''@;'; put 'put ''LCFoLnN0YXJ0dXBEYXRhTG9hZGVkKSl9LGRlcGVuZGVuY2llczpbbnMsYmEscmcsYzEscHksTVdlLFZXZSx6V2UscE8sV1dlLFF4LEhsLHJzLG91LEt1LEwyLHNnLGc3LG03LFZ5LHRFLGJZZSxUWWVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gdmhlKGMpe3Jl''@;'; put 'put ''dHVybiBuZXcgUW4oM2UzLCExKX1mdW5jdGlvbiBEbShjKXtzd2l0Y2goYy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHd4O2Nhc2UgMTpyZXR1cm4gY1swXTtkZWZhdWx0OnJldHVybiBuZXcgUjBlKGMpfX1mdW5jdGlvbiBiaGUoYyxsLGE9bmV3IE1hcCxkPW5ldyBNYXApe2NvbnN0IGg9''@;'; put 'put ''W10sZj1bXTtsZXQgdj0tMSxNPW51bGw7aWYobC5mb3JFYWNoKEQ9Pntjb25zdCBaPUQuZ2V0KCJvZmZzZXQiKSxyZT1aPT12LGNlPXJlJiZNfHxuZXcgTWFwO0QuZm9yRWFjaCgoYmUsRWUpPT57bGV0IEJlPUVlLHFlPWJlO2lmKCJvZmZzZXQiIT09RWUpc3dpdGNoKEJlPWMubm9ybWFsaXpl''@;'; put 'put ''UHJvcGVydHlOYW1lKEJlLGgpLHFlKXtjYXNlIiEiOnFlPWEuZ2V0KEVlKTticmVhaztjYXNlIGlnOnFlPWQuZ2V0KEVlKTticmVhaztkZWZhdWx0OnFlPWMubm9ybWFsaXplU3R5bGVWYWx1ZShFZSxCZSxxZSxoKX1jZS5zZXQoQmUscWUpfSkscmV8fGYucHVzaChjZSksTT1jZSx2PVp9KSxo''@;'; put 'put ''Lmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBfR2UoYyl7cmV0dXJuIG5ldyBRbigzNTAyLCExKX0oKTtyZXR1cm4gZn1mdW5jdGlvbiBURyhjLGwsYSxkKXtzd2l0Y2gobCl7Y2FzZSJzdGFydCI6Yy5vblN0YXJ0KCgpPT5kKGEmJkFHKGEsInN0YXJ0IixjKSkpO2JyZWFrO2Nhc2UiZG9uZSI6Yy5v''@;'; put 'put ''bkRvbmUoKCk9PmQoYSYmQUcoYSwiZG9uZSIsYykpKTticmVhaztjYXNlImRlc3Ryb3kiOmMub25EZXN0cm95KCgpPT5kKGEmJkFHKGEsImRlc3Ryb3kiLGMpKSl9fWZ1bmN0aW9uIEFHKGMsbCxhKXtjb25zdCBmPWtHKGMuZWxlbWVudCxjLnRyaWdnZXJOYW1lLGMuZnJvbVN0YXRlLGMudG9T''@;'; put 'put ''dGF0ZSxsfHxjLnBoYXNlTmFtZSxhLnRvdGFsVGltZT8/Yy50b3RhbFRpbWUsISFhLmRpc2FibGVkKSx2PWMuX2RhdGE7cmV0dXJuIG51bGwhPXYmJihmLl9kYXRhPXYpLGZ9ZnVuY3Rpb24ga0coYyxsLGEsZCxoPSIiLGY9MCx2KXtyZXR1cm57ZWxlbWVudDpjLHRyaWdnZXJOYW1lOmwsZnJv''@;'; put 'put ''bVN0YXRlOmEsdG9TdGF0ZTpkLHBoYXNlTmFtZTpoLHRvdGFsVGltZTpmLGRpc2FibGVkOiEhdn19ZnVuY3Rpb24gVGgoYyxsLGEpe2xldCBkPWMuZ2V0KGwpO3JldHVybiBkfHxjLnNldChsLGQ9YSksZH1mdW5jdGlvbiB5aGUoYyl7Y29uc3QgbD1jLmluZGV4T2YoIjoiKTtyZXR1cm5bYy5z''@;'; put 'put ''dWJzdHJpbmcoMSxsKSxjLnNsaWNlKGwrMSldfWNvbnN0IFJHZT10eXBlb2YgZG9jdW1lbnQ+InUiP251bGw6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Z1bmN0aW9uIERHKGMpe2NvbnN0IGw9Yy5wYXJlbnROb2RlfHxjLmhvc3R8fG51bGw7cmV0dXJuIGw9PT1SR2U/bnVsbDpsfWxldCBQ''@;'; put 'put ''Nz1udWxsLF9oZT0hMTtmdW5jdGlvbiB3aGUoYyxsKXtmb3IoO2w7KXtpZihsPT09YylyZXR1cm4hMDtsPURHKGwpfXJldHVybiExfWZ1bmN0aW9uIENoZShjLGwsYSl7aWYoYSlyZXR1cm4gQXJyYXkuZnJvbShjLnF1ZXJ5U2VsZWN0b3JBbGwobCkpO2NvbnN0IGQ9Yy5xdWVyeVNlbGVjdG9y''@;'; put 'put ''KGwpO3JldHVybiBkP1tkXTpbXX1sZXQgSUc9KCgpPT57Y2xhc3MgY3t2YWxpZGF0ZVN0eWxlUHJvcGVydHkoYSl7cmV0dXJuIGZ1bmN0aW9uIE9HZShjKXtQN3x8KFA3PWZ1bmN0aW9uIFBHZSgpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmJvZHk6bnVsbH0oKXx8e30s''@;'; put 'put ''X2hlPSEhUDcuc3R5bGUmJiJXZWJraXRBcHBlYXJhbmNlImluIFA3LnN0eWxlKTtsZXQgbD0hMDtyZXR1cm4gUDcuc3R5bGUmJiFmdW5jdGlvbiBMR2UoYyl7cmV0dXJuImVia2l0Ij09Yy5zdWJzdHJpbmcoMSw2KX0oYykmJihsPWMgaW4gUDcuc3R5bGUsIWwmJl9oZSYmKGw9IldlYmtpdCIr''@;'; put 'put ''Yy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStjLnNsaWNlKDEpaW4gUDcuc3R5bGUpKSxsfShhKX1tYXRjaGVzRWxlbWVudChhLGQpe3JldHVybiExfWNvbnRhaW5zRWxlbWVudChhLGQpe3JldHVybiB3aGUoYSxkKX1nZXRQYXJlbnRFbGVtZW50KGEpe3JldHVybiBERyhhKX1xdWVyeShhLGQs''@;'; put 'put ''aCl7cmV0dXJuIENoZShhLGQsaCl9Y29tcHV0ZVN0eWxlKGEsZCxoKXtyZXR1cm4gaHx8IiJ9YW5pbWF0ZShhLGQsaCxmLHYsTT1bXSxEKXtyZXR1cm4gbmV3IHd4KGgsZil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgUkd7c3RhdGlje3RoaXMuTk9PUD1uZXcgSUd9fWNsYXNzIExHe31jb25zdCBIR2U9MWUzLE9HPSJuZy1lbnRlciIsZ089Im5nLWxlYXZlIixtTz0ibmctdHJpZ2dlciIsdk89Ii5u''@;'; put 'put ''Zy10cmlnZ2VyIixNaGU9Im5nLWFuaW1hdGluZyIsUEc9Ii5uZy1hbmltYXRpbmciO2Z1bmN0aW9uIHBnKGMpe2lmKCJudW1iZXIiPT10eXBlb2YgYylyZXR1cm4gYztjb25zdCBsPWMubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIWx8fGwubGVuZ3RoPDI/MDpGRyhwYXJzZUZs''@;'; put 'put ''b2F0KGxbMV0pLGxbMl0pfWZ1bmN0aW9uIEZHKGMsbCl7cmV0dXJuInMiPT09bD9jKkhHZTpjfWZ1bmN0aW9uIGJPKGMsbCxhKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT9jOmZ1bmN0aW9uIFZHZShjLGwsYSl7bGV0IGgsZj0wLHY9IiI7aWYoInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBjKXtjb25zdCBNPWMubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1NKXJldHVybiBsLnB1c2godmhlKCkpLHtkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiIifTtoPUZH''@;'; put 'put ''KHBhcnNlRmxvYXQoTVsxXSksTVsyXSk7Y29uc3QgRD1NWzNdO251bGwhPUQmJihmPUZHKHBhcnNlRmxvYXQoRCksTVs0XSkpO2NvbnN0IFo9TVs1XTtaJiYodj1aKX1lbHNlIGg9YztpZighYSl7bGV0IE09ITEsRD1sLmxlbmd0aDtoPDAmJihsLnB1c2goZnVuY3Rpb24gSlllKCl7cmV0dXJu''@;'; put 'put ''IG5ldyBRbigzMTAwLCExKX0oKSksTT0hMCksZjwwJiYobC5wdXNoKGZ1bmN0aW9uIFFZZSgpe3JldHVybiBuZXcgUW4oMzEwMSwhMSl9KCkpLE09ITApLE0mJmwuc3BsaWNlKEQsMCx2aGUoKSl9cmV0dXJue2R1cmF0aW9uOmgsZGVsYXk6ZixlYXNpbmc6dn19KGMsbCxhKX1mdW5jdGlvbiBN''@;'; put 'put ''cChjLGwsYSl7bC5mb3JFYWNoKChkLGgpPT57Y29uc3QgZj1ORyhoKTthJiYhYS5oYXMoaCkmJmEuc2V0KGgsYy5zdHlsZVtmXSksYy5zdHlsZVtmXT1kfSl9ZnVuY3Rpb24gRjcoYyxsKXtsLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPU5HKGQpO2Muc3R5bGVbaF09IiJ9KX1mdW5jdGlvbiBu''@;'; put 'put ''RShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT8xPT1jLmxlbmd0aD9jWzBdOmZ1bmN0aW9uIGNQZShjLGw9bnVsbCl7cmV0dXJue3R5cGU6QW8uU2VxdWVuY2Usc3RlcHM6YyxvcHRpb25zOmx9fShjKTpjfWNvbnN0IEhHPW5ldyBSZWdFeHAoInt7XFxzKiguKz8pXFxzKn19IiwiZyIpO2Z1''@;'; put 'put ''bmN0aW9uIEVoZShjKXtsZXQgbD1bXTtpZigic3RyaW5nIj09dHlwZW9mIGMpe2xldCBhO2Zvcig7YT1IRy5leGVjKGMpOylsLnB1c2goYVsxXSk7SEcubGFzdEluZGV4PTB9cmV0dXJuIGx9ZnVuY3Rpb24gckUoYyxsLGEpe2NvbnN0IGQ9YCR7Y31gLGg9ZC5yZXBsYWNlKEhHLChmLHYpPT57''@;'; put 'put ''bGV0IE09bFt2XTtyZXR1cm4gbnVsbD09TSYmKGEucHVzaChmdW5jdGlvbiB0R2UoYyl7cmV0dXJuIG5ldyBRbigzMDAzLCExKX0oKSksTT0iIiksTS50b1N0cmluZygpfSk7cmV0dXJuIGg9PWQ/YzpofWNvbnN0IHpHZT0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gTkcoYyl7cmV0dXJuIGMu''@;'; put 'put ''cmVwbGFjZSh6R2UsKC4uLmwpPT5sWzFdLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIEFoKGMsbCxhKXtzd2l0Y2gobC50eXBlKXtjYXNlIEFvLlRyaWdnZXI6cmV0dXJuIGMudmlzaXRUcmlnZ2VyKGwsYSk7Y2FzZSBBby5TdGF0ZTpyZXR1cm4gYy52aXNpdFN0YXRlKGwsYSk7Y2FzZSBBby5U''@;'; put 'put ''cmFuc2l0aW9uOnJldHVybiBjLnZpc2l0VHJhbnNpdGlvbihsLGEpO2Nhc2UgQW8uU2VxdWVuY2U6cmV0dXJuIGMudmlzaXRTZXF1ZW5jZShsLGEpO2Nhc2UgQW8uR3JvdXA6cmV0dXJuIGMudmlzaXRHcm91cChsLGEpO2Nhc2UgQW8uQW5pbWF0ZTpyZXR1cm4gYy52aXNpdEFuaW1hdGUobCxh''@;'; put 'put ''KTtjYXNlIEFvLktleWZyYW1lczpyZXR1cm4gYy52aXNpdEtleWZyYW1lcyhsLGEpO2Nhc2UgQW8uU3R5bGU6cmV0dXJuIGMudmlzaXRTdHlsZShsLGEpO2Nhc2UgQW8uUmVmZXJlbmNlOnJldHVybiBjLnZpc2l0UmVmZXJlbmNlKGwsYSk7Y2FzZSBBby5BbmltYXRlQ2hpbGQ6cmV0dXJuIGMu''@;'; put 'put ''dmlzaXRBbmltYXRlQ2hpbGQobCxhKTtjYXNlIEFvLkFuaW1hdGVSZWY6cmV0dXJuIGMudmlzaXRBbmltYXRlUmVmKGwsYSk7Y2FzZSBBby5RdWVyeTpyZXR1cm4gYy52aXNpdFF1ZXJ5KGwsYSk7Y2FzZSBBby5TdGFnZ2VyOnJldHVybiBjLnZpc2l0U3RhZ2dlcihsLGEpO2RlZmF1bHQ6dGhy''@;'; put 'put ''b3cgZnVuY3Rpb24gbkdlKGMpe3JldHVybiBuZXcgUW4oMzAwNCwhMSl9KCl9fWZ1bmN0aW9uIFZHKGMsbCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGMpW2xdfWNvbnN0IFdHZT1uZXcgU2V0KFsid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdp''@;'; put 'put ''ZHRoIiwibWF4SGVpZ2h0IiwibGVmdCIsInRvcCIsImJvdHRvbSIsInJpZ2h0IiwiZm9udFNpemUiLCJvdXRsaW5lV2lkdGgiLCJvdXRsaW5lT2Zmc2V0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdSaWdodCIsIm1hcmdpblRvcCIsIm1hcmdp''@;'; put 'put ''bkxlZnQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5SaWdodCIsImJvcmRlclJhZGl1cyIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJ0ZXh0SW5kZW50IiwicGVyc3BlY3RpdmUi''@;'; put 'put ''XSk7Y2xhc3MgVGhlIGV4dGVuZHMgTEd7bm9ybWFsaXplUHJvcGVydHlOYW1lKGwsYSl7cmV0dXJuIE5HKGwpfW5vcm1hbGl6ZVN0eWxlVmFsdWUobCxhLGQsaCl7bGV0IGY9IiI7Y29uc3Qgdj1kLnRvU3RyaW5nKCkudHJpbSgpO2lmKFdHZS5oYXMoYSkmJjAhPT1kJiYiMCIhPT1kKWlmKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgZClmPSJweCI7ZWxzZXtjb25zdCBNPWQubWF0Y2goL15bKy1dP1tcZFwuXSsoW2Etel0qKSQvKTtNJiYwPT1NWzFdLmxlbmd0aCYmaC5wdXNoKGZ1bmN0aW9uIHJHZShjLGwpe3JldHVybiBuZXcgUW4oMzAwNSwhMSl9KCkpfXJldHVybiB2K2Z9fWNvbnN0IHlPPSIq''@;'; put 'put ''Ijtjb25zdCBfTz1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksd089bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBBaGUoYyxsKXtjb25zdCBhPV9PLmhhcyhjKXx8d08uaGFzKGMpLGQ9X08uaGFzKGwpfHx3Ty5oYXMobCk7cmV0dXJuKGgsZik9PntsZXQgdj1jPT15T3x8Yz09aCxNPWw9''@;'; put 'put ''PXlPfHxsPT1mO3JldHVybiF2JiZhJiYiYm9vbGVhbiI9PXR5cGVvZiBoJiYodj1oP19PLmhhcyhjKTp3Ty5oYXMoYykpLCFNJiZkJiYiYm9vbGVhbiI9PXR5cGVvZiBmJiYoTT1mP19PLmhhcyhsKTp3Ty5oYXMobCkpLHYmJk19fWNvbnN0IEtHZT1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIs''@;'; put 'put ''ImciKTtmdW5jdGlvbiBCRyhjLGwsYSxkKXtyZXR1cm4gbmV3IHFHZShjKS5idWlsZChsLGEsZCl9Y2xhc3MgcUdle2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RyaXZlcj1sfWJ1aWxkKGwsYSxkKXtjb25zdCBoPW5ldyBRR2UoYSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5n''@;'; put 'put ''U3RhdGUoaCksQWgodGhpcyxuRShsKSxoKX1fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShsKXtsLmN1cnJlbnRRdWVyeVNlbGVjdG9yPSIiLGwuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsbC5jb2xsZWN0ZWRTdHlsZXMuc2V0KCIiLG5ldyBNYXApLGwuY3VycmVudFRpbWU9MH12aXNp''@;'; put 'put ''dFRyaWdnZXIobCxhKXtsZXQgZD1hLnF1ZXJ5Q291bnQ9MCxoPWEuZGVwQ291bnQ9MDtjb25zdCBmPVtdLHY9W107cmV0dXJuIkAiPT1sLm5hbWUuY2hhckF0KDApJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGlHZSgpe3JldHVybiBuZXcgUW4oMzAwNiwhMSl9KCkpLGwuZGVmaW5pdGlvbnMu''@;'; put 'put ''Zm9yRWFjaChNPT57aWYodGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShhKSxNLnR5cGU9PUFvLlN0YXRlKXtjb25zdCBEPU0sWj1ELm5hbWU7Wi50b1N0cmluZygpLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChyZT0+e0QubmFtZT1yZSxmLnB1c2godGhpcy52aXNpdFN0YXRl''@;'; put 'put ''KEQsYSkpfSksRC5uYW1lPVp9ZWxzZSBpZihNLnR5cGU9PUFvLlRyYW5zaXRpb24pe2NvbnN0IEQ9dGhpcy52aXNpdFRyYW5zaXRpb24oTSxhKTtkKz1ELnF1ZXJ5Q291bnQsaCs9RC5kZXBDb3VudCx2LnB1c2goRCl9ZWxzZSBhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGFHZSgpe3JldHVybiBu''@;'; put 'put ''ZXcgUW4oMzAwNywhMSl9KCkpfSkse3R5cGU6QW8uVHJpZ2dlcixuYW1lOmwubmFtZSxzdGF0ZXM6Zix0cmFuc2l0aW9uczp2LHF1ZXJ5Q291bnQ6ZCxkZXBDb3VudDpoLG9wdGlvbnM6bnVsbH19dmlzaXRTdGF0ZShsLGEpe2NvbnN0IGQ9dGhpcy52aXNpdFN0eWxlKGwuc3R5bGVzLGEpLGg9''@;'; put 'put ''bC5vcHRpb25zJiZsLm9wdGlvbnMucGFyYW1zfHxudWxsO2lmKGQuY29udGFpbnNEeW5hbWljU3R5bGVzKXtjb25zdCBmPW5ldyBTZXQsdj1ofHx7fTtkLnN0eWxlcy5mb3JFYWNoKE09PntNIGluc3RhbmNlb2YgTWFwJiZNLmZvckVhY2goRD0+e0VoZShEKS5mb3JFYWNoKFo9Pnt2Lmhhc093''@;'; put 'put ''blByb3BlcnR5KFopfHxmLmFkZChaKX0pfSl9KSxmLnNpemUmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gb0dlKGMsbCl7cmV0dXJuIG5ldyBRbigzMDA4LCExKX0oMCxmLnZhbHVlcygpKSl9cmV0dXJue3R5cGU6QW8uU3RhdGUsbmFtZTpsLm5hbWUsc3R5bGU6ZCxvcHRpb25zOmg/e3BhcmFt''@;'; put 'put ''czpofTpudWxsfX12aXNpdFRyYW5zaXRpb24obCxhKXthLnF1ZXJ5Q291bnQ9MCxhLmRlcENvdW50PTA7Y29uc3QgZD1BaCh0aGlzLG5FKGwuYW5pbWF0aW9uKSxhKSxoPWZ1bmN0aW9uIFlHZShjLGwpe2NvbnN0IGE9W107cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoL1xzKixc''@;'; put 'put ''cyovKS5mb3JFYWNoKGQ9PmZ1bmN0aW9uIEdHZShjLGwsYSl7aWYoIjoiPT1jWzBdKXtjb25zdCBEPWZ1bmN0aW9uICRHZShjLGwpe3N3aXRjaChjKXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nhc2UiOmluY3JlbWVudCI6''@;'; put 'put ''cmV0dXJuKGEsZCk9PnBhcnNlRmxvYXQoZCk+cGFyc2VGbG9hdChhKTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybihhLGQpPT5wYXJzZUZsb2F0KGQpPHBhcnNlRmxvYXQoYSk7ZGVmYXVsdDpyZXR1cm4gbC5wdXNoKGZ1bmN0aW9uIG1HZShjKXtyZXR1cm4gbmV3IFFuKDMwMTYsITEpfSgpKSwi''@;'; put 'put ''KiA9PiAqIn19KGMsYSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEQpcmV0dXJuIHZvaWQgbC5wdXNoKEQpO2M9RH1jb25zdCBkPWMubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWR8fGQubGVuZ3RoPDQpcmV0dXJuIGEucHVzaChmdW5j''@;'; put 'put ''dGlvbiBnR2UoYyl7cmV0dXJuIG5ldyBRbigzMDE1LCExKX0oKSksbDtjb25zdCBoPWRbMV0sZj1kWzJdLHY9ZFszXTtsLnB1c2goQWhlKGgsdikpLCI8Ij09ZlswXSYmKGghPXlPfHx2IT15TykmJmwucHVzaChBaGUodixoKSl9KGQsYSxsKSk6YS5wdXNoKGMpLGF9KGwuZXhwcixhLmVycm9y''@;'; put 'put ''cyk7cmV0dXJue3R5cGU6QW8uVHJhbnNpdGlvbixtYXRjaGVyczpoLGFuaW1hdGlvbjpkLHF1ZXJ5Q291bnQ6YS5xdWVyeUNvdW50LGRlcENvdW50OmEuZGVwQ291bnQsb3B0aW9uczpINyhsLm9wdGlvbnMpfX12aXNpdFNlcXVlbmNlKGwsYSl7cmV0dXJue3R5cGU6QW8uU2VxdWVuY2Usc3Rl''@;'; put 'put ''cHM6bC5zdGVwcy5tYXAoZD0+QWgodGhpcyxkLGEpKSxvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0R3JvdXAobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWU7bGV0IGg9MDtjb25zdCBmPWwuc3RlcHMubWFwKHY9PnthLmN1cnJlbnRUaW1lPWQ7Y29uc3QgTT1BaCh0aGlzLHYsYSk7cmV0''@;'; put 'put ''dXJuIGg9TWF0aC5tYXgoaCxhLmN1cnJlbnRUaW1lKSxNfSk7cmV0dXJuIGEuY3VycmVudFRpbWU9aCx7dHlwZTpBby5Hcm91cCxzdGVwczpmLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlKGwsYSl7Y29uc3QgZD1mdW5jdGlvbiB0JGUoYyxsKXtpZihjLmhhc093blByb3Bl''@;'; put 'put ''cnR5KCJkdXJhdGlvbiIpKXJldHVybiBjO2lmKCJudW1iZXIiPT10eXBlb2YgYylyZXR1cm4gakcoYk8oYyxsKS5kdXJhdGlvbiwwLCIiKTtjb25zdCBhPWM7aWYoYS5zcGxpdCgvXHMrLykuc29tZShmPT4ieyI9PWYuY2hhckF0KDApJiYieyI9PWYuY2hhckF0KDEpKSl7Y29uc3QgZj1qRygw''@;'; put 'put ''LDAsIiIpO3JldHVybiBmLmR5bmFtaWM9ITAsZi5zdHJWYWx1ZT1hLGZ9Y29uc3QgaD1iTyhhLGwpO3JldHVybiBqRyhoLmR1cmF0aW9uLGguZGVsYXksaC5lYXNpbmcpfShsLnRpbWluZ3MsYS5lcnJvcnMpO2EuY3VycmVudEFuaW1hdGVUaW1pbmdzPWQ7bGV0IGgsZj1sLnN0eWxlcz9sLnN0''@;'; put 'put ''eWxlczp1cyh7fSk7aWYoZi50eXBlPT1Bby5LZXlmcmFtZXMpaD10aGlzLnZpc2l0S2V5ZnJhbWVzKGYsYSk7ZWxzZXtsZXQgdj1sLnN0eWxlcyxNPSExO2lmKCF2KXtNPSEwO2NvbnN0IFo9e307ZC5lYXNpbmcmJihaLmVhc2luZz1kLmVhc2luZyksdj11cyhaKX1hLmN1cnJlbnRUaW1lKz1k''@;'; put 'put ''LmR1cmF0aW9uK2QuZGVsYXk7Y29uc3QgRD10aGlzLnZpc2l0U3R5bGUodixhKTtELmlzRW1wdHlTdGVwPU0saD1EfXJldHVybiBhLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHt0eXBlOkFvLkFuaW1hdGUsdGltaW5nczpkLHN0eWxlOmgsb3B0aW9uczpudWxsfX12aXNpdFN0eWxlKGws''@;'; put 'put ''YSl7Y29uc3QgZD10aGlzLl9tYWtlU3R5bGVBc3QobCxhKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChkLGEpLGR9X21ha2VTdHlsZUFzdChsLGEpe2NvbnN0IGQ9W10saD1BcnJheS5pc0FycmF5KGwuc3R5bGVzKT9sLnN0eWxlczpbbC5zdHlsZXNdO2ZvcihsZXQgTSBvZiBoKSJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgTT9NPT09aWc/ZC5wdXNoKE0pOmEuZXJyb3JzLnB1c2gobmV3IFFuKDMwMDIsITEpKTpkLnB1c2gobmV3IE1hcChPYmplY3QuZW50cmllcyhNKSkpO2xldCBmPSExLHY9bnVsbDtyZXR1cm4gZC5mb3JFYWNoKE09PntpZihNIGluc3RhbmNlb2YgTWFwJiYoTS5oYXMo''@;'; put 'put ''ImVhc2luZyIpJiYodj1NLmdldCgiZWFzaW5nIiksTS5kZWxldGUoImVhc2luZyIpKSwhZikpZm9yKGxldCBEIG9mIE0udmFsdWVzKCkpaWYoRC50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe2Y9ITA7YnJlYWt9fSkse3R5cGU6QW8uU3R5bGUsc3R5bGVzOmQsZWFzaW5nOnYsb2Zmc2V0''@;'; put 'put ''Omwub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczpmLG9wdGlvbnM6bnVsbH19X3ZhbGlkYXRlU3R5bGVBc3QobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzO2xldCBoPWEuY3VycmVudFRpbWUsZj1hLmN1cnJlbnRUaW1lO2QmJmY+MCYmKGYtPWQuZHVyYXRpb24rZC5k''@;'; put 'put ''ZWxheSksbC5zdHlsZXMuZm9yRWFjaCh2PT57InN0cmluZyIhPXR5cGVvZiB2JiZ2LmZvckVhY2goKE0sRCk9Pntjb25zdCBaPWEuY29sbGVjdGVkU3R5bGVzLmdldChhLmN1cnJlbnRRdWVyeVNlbGVjdG9yKSxyZT1aLmdldChEKTtsZXQgY2U9ITA7cmUmJihmIT1oJiZmPj1yZS5zdGFydFRp''@;'; put 'put ''bWUmJmg8PXJlLmVuZFRpbWUmJihhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGxHZShjLGwsYSxkLGgpe3JldHVybiBuZXcgUW4oMzAxMCwhMSl9KCkpLGNlPSExKSxmPXJlLnN0YXJ0VGltZSksY2UmJlouc2V0KEQse3N0YXJ0VGltZTpmLGVuZFRpbWU6aH0pLGEub3B0aW9ucyYmZnVuY3Rpb24g''@;'; put 'put ''akdlKGMsbCxhKXtjb25zdCBkPWwucGFyYW1zfHx7fSxoPUVoZShjKTtoLmxlbmd0aCYmaC5mb3JFYWNoKGY9PntkLmhhc093blByb3BlcnR5KGYpfHxhLnB1c2goZnVuY3Rpb24gZUdlKGMpe3JldHVybiBuZXcgUW4oMzAwMSwhMSl9KCkpfSl9KE0sYS5vcHRpb25zLGEuZXJyb3JzKX0pfSl9''@;'; put 'put ''dmlzaXRLZXlmcmFtZXMobCxhKXtjb25zdCBkPXt0eXBlOkFvLktleWZyYW1lcyxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gY0dlKCl7cmV0dXJuIG5ldyBRbigzMDExLCExKX0oKSksZDts''@;'; put 'put ''ZXQgZj0wO2NvbnN0IHY9W107bGV0IE09ITEsRD0hMSxaPTA7Y29uc3QgcmU9bC5zdGVwcy5tYXAocHQ9Pntjb25zdCBkdD10aGlzLl9tYWtlU3R5bGVBc3QocHQsYSk7bGV0IEp0PW51bGwhPWR0Lm9mZnNldD9kdC5vZmZzZXQ6ZnVuY3Rpb24gZSRlKGMpe2lmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''YylyZXR1cm4gbnVsbDtsZXQgbD1udWxsO2lmKEFycmF5LmlzQXJyYXkoYykpYy5mb3JFYWNoKGE9PntpZihhIGluc3RhbmNlb2YgTWFwJiZhLmhhcygib2Zmc2V0Iikpe2NvbnN0IGQ9YTtsPXBhcnNlRmxvYXQoZC5nZXQoIm9mZnNldCIpKSxkLmRlbGV0ZSgib2Zmc2V0Iil9fSk7ZWxzZSBp''@;'; put 'put ''ZihjIGluc3RhbmNlb2YgTWFwJiZjLmhhcygib2Zmc2V0Iikpe2NvbnN0IGE9YztsPXBhcnNlRmxvYXQoYS5nZXQoIm9mZnNldCIpKSxhLmRlbGV0ZSgib2Zmc2V0Iil9cmV0dXJuIGx9KGR0LnN0eWxlcyksdm49MDtyZXR1cm4gbnVsbCE9SnQmJihmKyssdm49ZHQub2Zmc2V0PUp0KSxEPUR8''@;'; put 'put ''fHZuPDB8fHZuPjEsTT1NfHx2bjxaLFo9dm4sdi5wdXNoKHZuKSxkdH0pO0QmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gdUdlKCl7cmV0dXJuIG5ldyBRbigzMDEyLCExKX0oKSksTSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBkR2UoKXtyZXR1cm4gbmV3IFFuKDMyMDAsITEpfSgpKTtjb25z''@;'; put 'put ''dCBjZT1sLnN0ZXBzLmxlbmd0aDtsZXQgYmU9MDtmPjAmJmY8Y2U/YS5lcnJvcnMucHVzaChmdW5jdGlvbiBoR2UoKXtyZXR1cm4gbmV3IFFuKDMyMDIsITEpfSgpKTowPT1mJiYoYmU9MS8oY2UtMSkpO2NvbnN0IEVlPWNlLTEsQmU9YS5jdXJyZW50VGltZSxxZT1hLmN1cnJlbnRBbmltYXRl''@;'; put 'put ''VGltaW5ncyxydD1xZS5kdXJhdGlvbjtyZXR1cm4gcmUuZm9yRWFjaCgocHQsZHQpPT57Y29uc3QgSnQ9YmU+MD9kdD09RWU/MTpiZSpkdDp2W2R0XSx2bj1KdCpydDthLmN1cnJlbnRUaW1lPUJlK3FlLmRlbGF5K3ZuLHFlLmR1cmF0aW9uPXZuLHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QocHQs''@;'; put 'put ''YSkscHQub2Zmc2V0PUp0LGQuc3R5bGVzLnB1c2gocHQpfSksZH12aXNpdFJlZmVyZW5jZShsLGEpe3JldHVybnt0eXBlOkFvLlJlZmVyZW5jZSxhbmltYXRpb246QWgodGhpcyxuRShsLmFuaW1hdGlvbiksYSksb3B0aW9uczpINyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGVDaGlsZChsLGEp''@;'; put 'put ''e3JldHVybiBhLmRlcENvdW50Kysse3R5cGU6QW8uQW5pbWF0ZUNoaWxkLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKGwsYSl7cmV0dXJue3R5cGU6QW8uQW5pbWF0ZVJlZixhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZShsLmFuaW1hdGlvbixhKSxvcHRpb25z''@;'; put 'put ''Okg3KGwub3B0aW9ucyl9fXZpc2l0UXVlcnkobCxhKXtjb25zdCBkPWEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsaD1sLm9wdGlvbnN8fHt9O2EucXVlcnlDb3VudCsrLGEuY3VycmVudFF1ZXJ5PWw7Y29uc3RbZix2XT1mdW5jdGlvbiBYR2UoYyl7Y29uc3QgbD0hIWMuc3BsaXQoL1xzKixccyov''@;'; put 'put ''KS5maW5kKGE9PiI6c2VsZiI9PWEpO3JldHVybiBsJiYoYz1jLnJlcGxhY2UoS0dlLCIiKSksYz1jLnJlcGxhY2UoL0BcKi9nLHZPKS5yZXBsYWNlKC9AXHcrL2csYT0+dk8rIi0iK2Euc2xpY2UoMSkpLnJlcGxhY2UoLzphbmltYXRpbmcvZyxQRyksW2MsbF19KGwuc2VsZWN0b3IpO2EuY3Vy''@;'; put 'put ''cmVudFF1ZXJ5U2VsZWN0b3I9ZC5sZW5ndGg/ZCsiICIrZjpmLFRoKGEuY29sbGVjdGVkU3R5bGVzLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7Y29uc3QgTT1BaCh0aGlzLG5FKGwuYW5pbWF0aW9uKSxhKTtyZXR1cm4gYS5jdXJyZW50UXVlcnk9bnVsbCxhLmN1cnJlbnRRdWVy''@;'; put 'put ''eVNlbGVjdG9yPWQse3R5cGU6QW8uUXVlcnksc2VsZWN0b3I6ZixsaW1pdDpoLmxpbWl0fHwwLG9wdGlvbmFsOiEhaC5vcHRpb25hbCxpbmNsdWRlU2VsZjp2LGFuaW1hdGlvbjpNLG9yaWdpbmFsU2VsZWN0b3I6bC5zZWxlY3RvcixvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0U3RhZ2dl''@;'; put 'put ''cihsLGEpe2EuY3VycmVudFF1ZXJ5fHxhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGZHZSgpe3JldHVybiBuZXcgUW4oMzAxMywhMSl9KCkpO2NvbnN0IGQ9ImZ1bGwiPT09bC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06Yk8obC50aW1pbmdzLGEuZXJyb3JzLCEw''@;'; put 'put ''KTtyZXR1cm57dHlwZTpBby5TdGFnZ2VyLGFuaW1hdGlvbjpBaCh0aGlzLG5FKGwuYW5pbWF0aW9uKSxhKSx0aW1pbmdzOmQsb3B0aW9uczpudWxsfX19Y2xhc3MgUUdle2NvbnN0cnVjdG9yKGwpe3RoaXMuZXJyb3JzPWwsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMu''@;'; put 'put ''Y3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHRoaXMub3B0''@;'; put 'put ''aW9ucz1udWxsLHRoaXMudW5zdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzRm91bmQ9bmV3IFNldH19ZnVuY3Rpb24gSDcoYyl7cmV0dXJuIGM/KGM9ey4uLmN9KS5wYXJhbXMmJihjLnBhcmFtcz1mdW5jdGlvbiBKR2UoYyl7cmV0dXJuIGM/ey4uLmN9Om51bGx9KGMucGFyYW1zKSk6Yz17fSxjfWZ1''@;'; put 'put ''bmN0aW9uIGpHKGMsbCxhKXtyZXR1cm57ZHVyYXRpb246YyxkZWxheTpsLGVhc2luZzphfX1mdW5jdGlvbiB6RyhjLGwsYSxkLGgsZix2PW51bGwsTT0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50OmMsa2V5ZnJhbWVzOmwscHJlU3R5bGVQcm9wczphLHBvc3RTdHlsZVByb3BzOmQsZHVyYXRp''@;'; put 'put ''b246aCxkZWxheTpmLHRvdGFsVGltZTpoK2YsZWFzaW5nOnYsc3ViVGltZWxpbmU6TX19Y2xhc3MgQ097Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQobCl7cmV0dXJuIHRoaXMuX21hcC5nZXQobCl8fFtdfWFwcGVuZChsLGEpe2xldCBkPXRoaXMuX21hcC5nZXQobCk7ZHx8''@;'; put 'put ''dGhpcy5fbWFwLnNldChsLGQ9W10pLGQucHVzaCguLi5hKX1oYXMobCl7cmV0dXJuIHRoaXMuX21hcC5oYXMobCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19Y29uc3QgaSRlPW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxvJGU9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1bmN0aW9u''@;'; put 'put ''IFVHKGMsbCxhLGQsaCxmPW5ldyBNYXAsdj1uZXcgTWFwLE0sRCxaPVtdKXtyZXR1cm4obmV3IHMkZSkuYnVpbGRLZXlmcmFtZXMoYyxsLGEsZCxoLGYsdixNLEQsWil9Y2xhc3MgcyRle2J1aWxkS2V5ZnJhbWVzKGwsYSxkLGgsZix2LE0sRCxaLHJlPVtdKXtaPVp8fG5ldyBDTztjb25zdCBj''@;'; put 'put ''ZT1uZXcgWkcobCxhLFosaCxmLHJlLFtdKTtjZS5vcHRpb25zPUQ7Y29uc3QgYmU9RC5kZWxheT9wZyhELmRlbGF5KTowO2NlLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKGJlKSxjZS5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFt2XSxudWxsLGNlLmVycm9ycyxEKSxBaCh0aGlz''@;'; put 'put ''LGQsY2UpO2NvbnN0IEVlPWNlLnRpbWVsaW5lcy5maWx0ZXIoQmU9PkJlLmNvbnRhaW5zQW5pbWF0aW9uKCkpO2lmKEVlLmxlbmd0aCYmTS5zaXplKXtsZXQgQmU7Zm9yKGxldCBxZT1FZS5sZW5ndGgtMTtxZT49MDtxZS0tKXtjb25zdCBydD1FZVtxZV07aWYocnQuZWxlbWVudD09PWEpe0Jl''@;'; put 'put ''PXJ0O2JyZWFrfX1CZSYmIUJlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzKCkmJkJlLnNldFN0eWxlcyhbTV0sbnVsbCxjZS5lcnJvcnMsRCl9cmV0dXJuIEVlLmxlbmd0aD9FZS5tYXAoQmU9PkJlLmJ1aWxkS2V5ZnJhbWVzKCkpOlt6RyhhLFtdLFtdLFtdLDAsYmUsIiIsITEpXX12aXNpdFRy''@;'; put 'put ''aWdnZXIobCxhKXt9dmlzaXRTdGF0ZShsLGEpe312aXNpdFRyYW5zaXRpb24obCxhKXt9dmlzaXRBbmltYXRlQ2hpbGQobCxhKXtjb25zdCBkPWEuc3ViSW5zdHJ1Y3Rpb25zLmdldChhLmVsZW1lbnQpO2lmKGQpe2NvbnN0IGg9YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyksZj1hLmN1''@;'; put 'put ''cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSx2PXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGQsaCxoLm9wdGlvbnMpO2YhPXYmJmEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHYpfWEucHJldmlvdXNOb2RlPWx9dmlzaXRBbmltYXRlUmVmKGwsYSl7Y29uc3QgZD1hLmNyZWF0ZVN1YkNv''@;'; put 'put ''bnRleHQobC5vcHRpb25zKTtkLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLHRoaXMuX2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKFtsLm9wdGlvbnMsbC5hbmltYXRpb24ub3B0aW9uc10sYSxkKSx0aGlzLnZpc2l0UmVmZXJlbmNlKGwuYW5pbWF0aW9uLGQpLGEudHJhbnNmb3JtSW50b05l''@;'; put 'put ''d1RpbWVsaW5lKGQuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxhLnByZXZpb3VzTm9kZT1sfV9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhsLGEsZCl7Zm9yKGNvbnN0IGggb2YgbCl7Y29uc3QgZj1oPy5kZWxheTtpZihmKXtjb25zdCB2PSJudW1iZXIiPT10eXBlb2YgZj9mOnBnKHJF''@;'; put 'put ''KGYsaD8ucGFyYW1zPz97fSxhLmVycm9ycykpO2QuZGVsYXlOZXh0U3RlcCh2KX19fV92aXNpdFN1Ykluc3RydWN0aW9ucyhsLGEsZCl7bGV0IGY9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3Qgdj1udWxsIT1kLmR1cmF0aW9uP3BnKGQuZHVyYXRpb24pOm51bGwsTT1udWxs''@;'; put 'put ''IT1kLmRlbGF5P3BnKGQuZGVsYXkpOm51bGw7cmV0dXJuIDAhPT12JiZsLmZvckVhY2goRD0+e2NvbnN0IFo9YS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUoRCx2LE0pO2Y9TWF0aC5tYXgoZixaLmR1cmF0aW9uK1ouZGVsYXkpfSksZn12aXNpdFJlZmVyZW5jZShsLGEpe2EudXBkYXRl''@;'; put 'put ''T3B0aW9ucyhsLm9wdGlvbnMsITApLEFoKHRoaXMsbC5hbmltYXRpb24sYSksYS5wcmV2aW91c05vZGU9bH12aXNpdFNlcXVlbmNlKGwsYSl7Y29uc3QgZD1hLnN1YkNvbnRleHRDb3VudDtsZXQgaD1hO2NvbnN0IGY9bC5vcHRpb25zO2lmKGYmJihmLnBhcmFtc3x8Zi5kZWxheSkmJihoPWEu''@;'; put 'put ''Y3JlYXRlU3ViQ29udGV4dChmKSxoLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLG51bGwhPWYuZGVsYXkpKXtoLnByZXZpb3VzTm9kZS50eXBlPT1Bby5TdHlsZSYmKGguY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGgucHJldmlvdXNOb2RlPVNPKTtjb25zdCB2''@;'; put 'put ''PXBnKGYuZGVsYXkpO2guZGVsYXlOZXh0U3RlcCh2KX1sLnN0ZXBzLmxlbmd0aCYmKGwuc3RlcHMuZm9yRWFjaCh2PT5BaCh0aGlzLHYsaCkpLGguY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLGguc3ViQ29udGV4dENvdW50PmQmJmgudHJhbnNmb3JtSW50b05ld1Rp''@;'; put 'put ''bWVsaW5lKCkpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRHcm91cChsLGEpe2NvbnN0IGQ9W107bGV0IGg9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgZj1sLm9wdGlvbnMmJmwub3B0aW9ucy5kZWxheT9wZyhsLm9wdGlvbnMuZGVsYXkpOjA7bC5zdGVwcy5mb3JFYWNoKHY9''@;'; put 'put ''Pntjb25zdCBNPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMpO2YmJk0uZGVsYXlOZXh0U3RlcChmKSxBaCh0aGlzLHYsTSksaD1NYXRoLm1heChoLE0uY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxkLnB1c2goTS5jdXJyZW50VGltZWxpbmUpfSksZC5mb3JFYWNoKHY9PmEuY3Vy''@;'; put 'put ''cmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModikpLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGgpLGEucHJldmlvdXNOb2RlPWx9X3Zpc2l0VGltaW5nKGwsYSl7aWYobC5keW5hbWljKXtjb25zdCBkPWwuc3RyVmFsdWU7cmV0dXJuIGJPKGEucGFyYW1zP3JF''@;'; put 'put ''KGQsYS5wYXJhbXMsYS5lcnJvcnMpOmQsYS5lcnJvcnMpfXJldHVybntkdXJhdGlvbjpsLmR1cmF0aW9uLGRlbGF5OmwuZGVsYXksZWFzaW5nOmwuZWFzaW5nfX12aXNpdEFuaW1hdGUobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKGwudGlt''@;'; put 'put ''aW5ncyxhKSxoPWEuY3VycmVudFRpbWVsaW5lO2QuZGVsYXkmJihhLmluY3JlbWVudFRpbWUoZC5kZWxheSksaC5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7Y29uc3QgZj1sLnN0eWxlO2YudHlwZT09QW8uS2V5ZnJhbWVzP3RoaXMudmlzaXRLZXlmcmFtZXMoZixhKTooYS5pbmNyZW1lbnRU''@;'; put 'put ''aW1lKGQuZHVyYXRpb24pLHRoaXMudmlzaXRTdHlsZShmLGEpLGguYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkpLGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsYS5wcmV2aW91c05vZGU9bH12aXNpdFN0eWxlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZSxoPWEuY3VycmVudEFu''@;'; put 'put ''aW1hdGVUaW1pbmdzOyFoJiZkLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSYmZC5mb3J3YXJkRnJhbWUoKTtjb25zdCBmPWgmJmguZWFzaW5nfHxsLmVhc2luZztsLmlzRW1wdHlTdGVwP2QuYXBwbHlFbXB0eVN0ZXAoZik6ZC5zZXRTdHlsZXMobC5zdHlsZXMsZixhLmVycm9ycyxhLm9w''@;'; put 'put ''dGlvbnMpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRLZXlmcmFtZXMobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzLGg9YS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24sZj1kLmR1cmF0aW9uLE09YS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO00uZWFzaW5n''@;'; put 'put ''PWQuZWFzaW5nLGwuc3R5bGVzLmZvckVhY2goRD0+e00uZm9yd2FyZFRpbWUoKEQub2Zmc2V0fHwwKSpmKSxNLnNldFN0eWxlcyhELnN0eWxlcyxELmVhc2luZyxhLmVycm9ycyxhLm9wdGlvbnMpLE0uYXBwbHlTdHlsZXNUb0tleWZyYW1lKCl9KSxhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRp''@;'; put 'put ''bWVsaW5lQ29sbGVjdGVkU3R5bGVzKE0pLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGgrZiksYS5wcmV2aW91c05vZGU9bH12aXNpdFF1ZXJ5KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxoPWwub3B0aW9uc3x8e30sZj1oLmRlbGF5P3BnKGguZGVsYXkp''@;'; put 'put ''OjA7ZiYmKGEucHJldmlvdXNOb2RlLnR5cGU9PT1Bby5TdHlsZXx8MD09ZCYmYS5jdXJyZW50VGltZWxpbmUuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpKSYmKGEuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGEucHJldmlvdXNOb2RlPVNPKTtsZXQgdj1kO2Nv''@;'; put 'put ''bnN0IE09YS5pbnZva2VRdWVyeShsLnNlbGVjdG9yLGwub3JpZ2luYWxTZWxlY3RvcixsLmxpbWl0LGwuaW5jbHVkZVNlbGYsISFoLm9wdGlvbmFsLGEuZXJyb3JzKTthLmN1cnJlbnRRdWVyeVRvdGFsPU0ubGVuZ3RoO2xldCBEPW51bGw7TS5mb3JFYWNoKChaLHJlKT0+e2EuY3VycmVudFF1''@;'; put 'put ''ZXJ5SW5kZXg9cmU7Y29uc3QgY2U9YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyxaKTtmJiZjZS5kZWxheU5leHRTdGVwKGYpLFo9PT1hLmVsZW1lbnQmJihEPWNlLmN1cnJlbnRUaW1lbGluZSksQWgodGhpcyxsLmFuaW1hdGlvbixjZSksY2UuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5''@;'; put 'put ''bGVzVG9LZXlmcmFtZSgpLHY9TWF0aC5tYXgodixjZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksYS5jdXJyZW50UXVlcnlJbmRleD0wLGEuY3VycmVudFF1ZXJ5VG90YWw9MCxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh2KSxEJiYoYS5jdXJyZW50VGltZWxpbmUubWVyZ2VU''@;'; put 'put ''aW1lbGluZUNvbGxlY3RlZFN0eWxlcyhEKSxhLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksYS5wcmV2aW91c05vZGU9bH12aXNpdFN0YWdnZXIobCxhKXtjb25zdCBkPWEucGFyZW50Q29udGV4dCxoPWEuY3VycmVudFRpbWVsaW5lLGY9bC50aW1pbmdzLHY9TWF0''@;'; put 'put ''aC5hYnMoZi5kdXJhdGlvbiksTT12KihhLmN1cnJlbnRRdWVyeVRvdGFsLTEpO2xldCBEPXYqYS5jdXJyZW50UXVlcnlJbmRleDtzd2l0Y2goZi5kdXJhdGlvbjwwPyJyZXZlcnNlIjpmLmVhc2luZyl7Y2FzZSJyZXZlcnNlIjpEPU0tRDticmVhaztjYXNlImZ1bGwiOkQ9ZC5jdXJyZW50U3Rh''@;'; put 'put ''Z2dlclRpbWV9Y29uc3QgcmU9YS5jdXJyZW50VGltZWxpbmU7RCYmcmUuZGVsYXlOZXh0U3RlcChEKTtjb25zdCBjZT1yZS5jdXJyZW50VGltZTtBaCh0aGlzLGwuYW5pbWF0aW9uLGEpLGEucHJldmlvdXNOb2RlPWwsZC5jdXJyZW50U3RhZ2dlclRpbWU9aC5jdXJyZW50VGltZS1jZSsoaC5z''@;'; put 'put ''dGFydFRpbWUtZC5jdXJyZW50VGltZWxpbmUuc3RhcnRUaW1lKX19Y29uc3QgU089e307Y2xhc3MgWkd7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxEKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN1Ykluc3RydWN0aW9ucz1kLHRoaXMuX2VudGVyQ2xhc3NOYW1lPWgs''@;'; put 'put ''dGhpcy5fbGVhdmVDbGFzc05hbWU9Zix0aGlzLmVycm9ycz12LHRoaXMudGltZWxpbmVzPU0sdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT1TTyx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9u''@;'; put 'put ''cz17fSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PTAsdGhpcy5jdXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhpcy5jdXJyZW50VGltZWxpbmU9RHx8bmV3IE1PKHRoaXMuX2RyaXZlcixhLDApLE0ucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9Z2V0IHBh''@;'; put 'put ''cmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfXVwZGF0ZU9wdGlvbnMobCxhKXtpZighbClyZXR1cm47Y29uc3QgZD1sO2xldCBoPXRoaXMub3B0aW9ucztudWxsIT1kLmR1cmF0aW9uJiYoaC5kdXJhdGlvbj1wZyhkLmR1cmF0aW9uKSksbnVsbCE9ZC5kZWxheSYmKGguZGVsYXk9''@;'; put 'put ''cGcoZC5kZWxheSkpO2NvbnN0IGY9ZC5wYXJhbXM7aWYoZil7bGV0IHY9aC5wYXJhbXM7dnx8KHY9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMoZikuZm9yRWFjaChNPT57KCFhfHwhdi5oYXNPd25Qcm9wZXJ0eShNKSkmJih2W01dPXJFKGZbTV0sdix0aGlzLmVycm9ycykp''@;'; put 'put ''fSl9fV9jb3B5T3B0aW9ucygpe2NvbnN0IGw9e307aWYodGhpcy5vcHRpb25zKXtjb25zdCBhPXRoaXMub3B0aW9ucy5wYXJhbXM7aWYoYSl7Y29uc3QgZD1sLnBhcmFtcz17fTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGg9PntkW2hdPWFbaF19KX19cmV0dXJuIGx9Y3JlYXRlU3ViQ29udGV4''@;'; put 'put ''dChsPW51bGwsYSxkKXtjb25zdCBoPWF8fHRoaXMuZWxlbWVudCxmPW5ldyBaRyh0aGlzLl9kcml2ZXIsaCx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRU''@;'; put 'put ''aW1lbGluZS5mb3JrKGgsZHx8MCkpO3JldHVybiBmLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxmLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxmLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxmLnVwZGF0ZU9wdGlvbnMobCksZi5j''@;'; put 'put ''dXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LGYuY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxmLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLGZ9dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGwpe3JldHVybiB0''@;'; put 'put ''aGlzLnByZXZpb3VzTm9kZT1TTyx0aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCxsKSx0aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRv''@;'; put 'put ''VGltZWxpbmUobCxhLGQpe2NvbnN0IGg9e2R1cmF0aW9uOmE/P2wuZHVyYXRpb24sZGVsYXk6dGhpcy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUrKGQ/PzApK2wuZGVsYXksZWFzaW5nOiIifSxmPW5ldyBsJGUodGhpcy5fZHJpdmVyLGwuZWxlbWVudCxsLmtleWZyYW1lcyxsLnByZVN0''@;'; put 'put ''eWxlUHJvcHMsbC5wb3N0U3R5bGVQcm9wcyxoLGwuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUpO3JldHVybiB0aGlzLnRpbWVsaW5lcy5wdXNoKGYpLGh9aW5jcmVtZW50VGltZShsKXt0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlv''@;'; put 'put ''bitsKX1kZWxheU5leHRTdGVwKGwpe2w+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChsKX1pbnZva2VRdWVyeShsLGEsZCxoLGYsdil7bGV0IE09W107aWYoaCYmTS5wdXNoKHRoaXMuZWxlbWVudCksbC5sZW5ndGg+MCl7bD0obD1sLnJlcGxhY2UoaSRlLCIuIit0aGlz''@;'; put 'put ''Ll9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UobyRlLCIuIit0aGlzLl9sZWF2ZUNsYXNzTmFtZSk7bGV0IFo9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRoaXMuZWxlbWVudCxsLDEhPWQpOzAhPT1kJiYoWj1kPDA/Wi5zbGljZShaLmxlbmd0aCtkLFoubGVuZ3RoKTpaLnNsaWNlKDAsZCkpLE0ucHVz''@;'; put 'put ''aCguLi5aKX1yZXR1cm4hZiYmMD09TS5sZW5ndGgmJnYucHVzaChmdW5jdGlvbiBwR2UoYyl7cmV0dXJuIG5ldyBRbigzMDE0LCExKX0oKSksTX19Y2xhc3MgTU97Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhpcy5zdGFydFRpbWU9ZCx0aGlz''@;'; put 'put ''Ll9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9aCx0aGlzLmR1cmF0aW9uPTAsdGhpcy5lYXNpbmc9bnVsbCx0aGlzLl9wcmV2aW91c0tleWZyYW1lPW5ldyBNYXAsdGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1t''@;'; put 'put ''YXJ5PW5ldyBNYXAsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdTdHlsZXM9bmV3IE1hcCx0aGlzLl9iYWNrRmlsbD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1''@;'; put 'put ''cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuZ2V0KGEpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzfHwodGhpcy5fZ2xvYmFsVGltZWxpbmVT''@;'; put 'put ''dHlsZXM9dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuc2V0KGEsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykpLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWNvbnRhaW5zQW5pbWF0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5z''@;'; put 'put ''aXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKTtkZWZhdWx0OnJldHVybiEwfX1oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zaXplPjB9Z2V0IGN1cnJlbnRUaW1l''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259ZGVsYXlOZXh0U3RlcChsKXtjb25zdCBhPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmdGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplO3RoaXMuZHVyYXRpb258fGE/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGlt''@;'; put 'put ''ZStsKSxhJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9bH1mb3JrKGwsYSl7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksbmV3IE1PKHRoaXMuX2RyaXZlcixsLGF8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5l''@;'; put 'put ''U3R5bGVzTG9va3VwKX1fbG9hZEtleWZyYW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1''@;'; put 'put ''cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcy5zZXQodGhpcy5kdXJhdGlvbix0aGlzLl9jdXJyZW50S2V5ZnJhbWUpKX1mb3J3YXJkRnJhbWUoKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWZvcndhcmRU''@;'; put 'put ''aW1lKGwpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdGhpcy5kdXJhdGlvbj1sLHRoaXMuX2xvYWRLZXlmcmFtZSgpfV91cGRhdGVTdHlsZShsLGEpe3RoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuc2V0KGwsYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuc2V0KGwsYSksdGhp''@;'; put 'put ''cy5fc3R5bGVTdW1tYXJ5LnNldChsLHt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6YX0pfWFsbG93T25seVRpbWVsaW5lU3R5bGVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1hcHBseUVtcHR5U3RlcChsKXtsJiZ0''@;'; put 'put ''aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixsKTtmb3IobGV0W2EsZF1vZiB0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9iYWNrRmlsbC5zZXQoYSxkfHxpZyksdGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGlnKTt0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5''@;'; put 'put ''ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfXNldFN0eWxlcyhsLGEsZCxoKXthJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixhKTtjb25zdCBmPWgmJmgucGFyYW1zfHx7fSx2PWZ1bmN0aW9uIGMkZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtsZXQgZDtyZXR1cm4gYy5m''@;'; put 'put ''b3JFYWNoKGg9PntpZigiKiI9PT1oKXtkPz89bC5rZXlzKCk7Zm9yKGxldCBmIG9mIGQpYS5zZXQoZixpZyl9ZWxzZSBmb3IobGV0W2Ysdl1vZiBoKWEuc2V0KGYsdil9KSxhfShsLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKTtmb3IobGV0W00sRF1vZiB2KXtjb25zdCBaPXJFKEQsZixk''@;'; put 'put ''KTt0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChNLFopLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzKE0pfHx0aGlzLl9iYWNrRmlsbC5zZXQoTSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5nZXQoTSk/P2lnKSx0aGlzLl91cGRhdGVTdHlsZShNLFopfX1hcHBseVN0eWxlc1RvS2V5''@;'; put 'put ''ZnJhbWUoKXswIT10aGlzLl9wZW5kaW5nU3R5bGVzLnNpemUmJih0aGlzLl9wZW5kaW5nU3R5bGVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsbCl9KSx0aGlzLl9wZW5kaW5nU3R5bGVzLmNsZWFyKCksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5mb3JF''@;'; put 'put ''YWNoKChsLGEpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLmhhcyhhKXx8dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGwpfSkpfXNuYXBzaG90Q3VycmVudFN0eWxlcygpe2ZvcihsZXRbbCxhXW9mIHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpdGhpcy5fcGVuZGluZ1N0eWxlcy5zZXQo''@;'; put 'put ''bCxhKSx0aGlzLl91cGRhdGVTdHlsZShsLGEpfWdldEZpbmFsS2V5ZnJhbWUoKXtyZXR1cm4gdGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKX1nZXQgcHJvcGVydGllcygpe2NvbnN0IGw9W107Zm9yKGxldCBhIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSlsLnB1c2goYSk7cmV0''@;'; put 'put ''dXJuIGx9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhsKXtsLl9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fc3R5bGVTdW1tYXJ5LmdldChkKTsoIWh8fGEudGltZT5oLnRpbWUpJiZ0aGlzLl91cGRhdGVTdHlsZShkLGEudmFsdWUpfSl9YnVpbGRLZXlm''@;'; put 'put ''cmFtZXMoKXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpO2NvbnN0IGw9bmV3IFNldCxhPW5ldyBTZXQsZD0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uO2xldCBoPVtdO3RoaXMuX2tleWZyYW1lcy5mb3JFYWNoKChNLEQpPT57Y29uc3QgWj1uZXcgTWFw''@;'; put 'put ''KFsuLi50aGlzLl9iYWNrRmlsbCwuLi5NXSk7Wi5mb3JFYWNoKChyZSxjZSk9PnsiISI9PT1yZT9sLmFkZChjZSk6cmU9PT1pZyYmYS5hZGQoY2UpfSksZHx8Wi5zZXQoIm9mZnNldCIsRC90aGlzLmR1cmF0aW9uKSxoLnB1c2goWil9KTtjb25zdCBmPVsuLi5sLnZhbHVlcygpXSx2PVsuLi5h''@;'; put 'put ''LnZhbHVlcygpXTtpZihkKXtjb25zdCBNPWhbMF0sRD1uZXcgTWFwKE0pO00uc2V0KCJvZmZzZXQiLDApLEQuc2V0KCJvZmZzZXQiLDEpLGg9W00sRF19cmV0dXJuIHpHKHRoaXMuZWxlbWVudCxoLGYsdix0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xh''@;'; put 'put ''c3MgbCRlIGV4dGVuZHMgTU97Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTT0hMSl7c3VwZXIobCxhLHYuZGVsYXkpLHRoaXMua2V5ZnJhbWVzPWQsdGhpcy5wcmVTdHlsZVByb3BzPWgsdGhpcy5wb3N0U3R5bGVQcm9wcz1mLHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPU0sdGhpcy50''@;'; put 'put ''aW1pbmdzPXtkdXJhdGlvbjp2LmR1cmF0aW9uLGRlbGF5OnYuZGVsYXksZWFzaW5nOnYuZWFzaW5nfX1jb250YWluc0FuaW1hdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX1idWlsZEtleWZyYW1lcygpe2xldCBsPXRoaXMua2V5ZnJhbWVzLHtkZWxheTphLGR1cmF0aW9u''@;'; put 'put ''OmQsZWFzaW5nOmh9PXRoaXMudGltaW5ncztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSYmYSl7Y29uc3QgZj1bXSx2PWQrYSxNPWEvdixEPW5ldyBNYXAobFswXSk7RC5zZXQoIm9mZnNldCIsMCksZi5wdXNoKEQpO2NvbnN0IFo9bmV3IE1hcChsWzBdKTtaLnNldCgib2Zmc2V0''@;'; put 'put ''IixJaGUoTSkpLGYucHVzaChaKTtjb25zdCByZT1sLmxlbmd0aC0xO2ZvcihsZXQgY2U9MTtjZTw9cmU7Y2UrKyl7bGV0IGJlPW5ldyBNYXAobFtjZV0pO2NvbnN0IEVlPWJlLmdldCgib2Zmc2V0Iik7YmUuc2V0KCJvZmZzZXQiLEloZSgoYStFZSpkKS92KSksZi5wdXNoKGJlKX1kPXYsYT0w''@;'; put 'put ''LGg9IiIsbD1mfXJldHVybiB6Ryh0aGlzLmVsZW1lbnQsbCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxkLGEsaCwhMCl9fWZ1bmN0aW9uIEloZShjLGw9Myl7Y29uc3QgYT1NYXRoLnBvdygxMCxsLTEpO3JldHVybiBNYXRoLnJvdW5kKGMqYSkvYX1mdW5jdGlvbiBS''@;'; put 'put ''aGUoYyxsLGEsZCxoLGYsdixNLEQsWixyZSxjZSxiZSl7cmV0dXJue3R5cGU6MCxlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxpc1JlbW92YWxUcmFuc2l0aW9uOmgsZnJvbVN0YXRlOmEsZnJvbVN0eWxlczpmLHRvU3RhdGU6ZCx0b1N0eWxlczp2LHRpbWVsaW5lczpNLHF1ZXJpZWRFbGVtZW50''@;'; put 'put ''czpELHByZVN0eWxlUHJvcHM6Wixwb3N0U3R5bGVQcm9wczpyZSx0b3RhbFRpbWU6Y2UsZXJyb3JzOmJlfX1jb25zdCBXRz17fTtjbGFzcyBMaGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX3RyaWdnZXJOYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9zdGF0ZVN0eWxlcz1kfW1hdGNoKGwsYSxk''@;'; put 'put ''LGgpe3JldHVybiBmdW5jdGlvbiB1JGUoYyxsLGEsZCxoKXtyZXR1cm4gYy5zb21lKGY9PmYobCxhLGQsaCkpfSh0aGlzLmFzdC5tYXRjaGVycyxsLGEsZCxoKX1idWlsZFN0eWxlcyhsLGEsZCl7bGV0IGg9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KCIqIik7cmV0dXJuIHZvaWQgMCE9PWwmJiho''@;'; put 'put ''PXRoaXMuX3N0YXRlU3R5bGVzLmdldChsPy50b1N0cmluZygpKXx8aCksaD9oLmJ1aWxkU3R5bGVzKGEsZCk6bmV3IE1hcH1idWlsZChsLGEsZCxoLGYsdixNLEQsWixyZSl7Y29uc3QgY2U9W10sYmU9dGhpcy5hc3Qub3B0aW9ucyYmdGhpcy5hc3Qub3B0aW9ucy5wYXJhbXN8fFdHLEJlPXRo''@;'; put 'put ''aXMuYnVpbGRTdHlsZXMoZCxNJiZNLnBhcmFtc3x8V0csY2UpLHFlPUQmJkQucGFyYW1zfHxXRyxydD10aGlzLmJ1aWxkU3R5bGVzKGgscWUsY2UpLHB0PW5ldyBTZXQsZHQ9bmV3IE1hcCxKdD1uZXcgTWFwLHZuPSJ2b2lkIj09PWgsQ249e3BhcmFtczpPaGUocWUsYmUpLGRlbGF5OnRoaXMu''@;'; put 'put ''YXN0Lm9wdGlvbnM/LmRlbGF5fSx0bj1yZT9bXTpVRyhsLGEsdGhpcy5hc3QuYW5pbWF0aW9uLGYsdixCZSxydCxDbixaLGNlKTtsZXQgTW49MDtyZXR1cm4gdG4uZm9yRWFjaChDcj0+e01uPU1hdGgubWF4KENyLmR1cmF0aW9uK0NyLmRlbGF5LE1uKX0pLGNlLmxlbmd0aD9SaGUoYSx0aGlz''@;'; put 'put ''Ll90cmlnZ2VyTmFtZSxkLGgsdm4sQmUscnQsW10sW10sZHQsSnQsTW4sY2UpOih0bi5mb3JFYWNoKENyPT57Y29uc3QgR3I9Q3IuZWxlbWVudCxtcj1UaChkdCxHcixuZXcgU2V0KTtDci5wcmVTdHlsZVByb3BzLmZvckVhY2goYWk9Pm1yLmFkZChhaSkpO2NvbnN0IEduPVRoKEp0LEdyLG5l''@;'; put 'put ''dyBTZXQpO0NyLnBvc3RTdHlsZVByb3BzLmZvckVhY2goYWk9PkduLmFkZChhaSkpLEdyIT09YSYmcHQuYWRkKEdyKX0pLFJoZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCx2bixCZSxydCx0bixbLi4ucHQudmFsdWVzKCldLGR0LEp0LE1uKSl9fWZ1bmN0aW9uIE9oZShjLGwpe2NvbnN0IGE9''@;'; put 'put ''ey4uLmx9O3JldHVybiBPYmplY3QuZW50cmllcyhjKS5mb3JFYWNoKChbZCxoXSk9PntudWxsIT1oJiYoYVtkXT1oKX0pLGF9Y2xhc3MgZCRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnN0eWxlcz1sLHRoaXMuZGVmYXVsdFBhcmFtcz1hLHRoaXMubm9ybWFsaXplcj1kfWJ1aWxkU3R5bGVz''@;'; put 'put ''KGwsYSl7Y29uc3QgZD1uZXcgTWFwLGg9T2hlKGwsdGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gdGhpcy5zdHlsZXMuc3R5bGVzLmZvckVhY2goZj0+eyJzdHJpbmciIT10eXBlb2YgZiYmZi5mb3JFYWNoKCh2LE0pPT57diYmKHY9ckUodixoLGEpKTtjb25zdCBEPXRoaXMubm9ybWFsaXpl''@;'; put 'put ''ci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoTSxhKTt2PXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKE0sRCx2LGEpLGQuc2V0KE0sdil9KX0pLGR9fWNsYXNzIGYkZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5uYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9ub3JtYWxpemVyPWQs''@;'; put 'put ''dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPW5ldyBNYXAsYS5zdGF0ZXMuZm9yRWFjaChoPT57dGhpcy5zdGF0ZXMuc2V0KGgubmFtZSxuZXcgZCRlKGguc3R5bGUsaC5vcHRpb25zJiZoLm9wdGlvbnMucGFyYW1zfHx7fSxkKSl9KSxQaGUodGhpcy5zdGF0ZXMsInRy''@;'; put 'put ''dWUiLCIxIiksUGhlKHRoaXMuc3RhdGVzLCJmYWxzZSIsIjAiKSxhLnRyYW5zaXRpb25zLmZvckVhY2goaD0+e3RoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5wdXNoKG5ldyBMaGUobCxoLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbiBwJGUoYyxsLGEp''@;'; put 'put ''e3JldHVybiBuZXcgTGhlKGMse3R5cGU6QW8uVHJhbnNpdGlvbixhbmltYXRpb246e3R5cGU6QW8uU2VxdWVuY2Usc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKHYsTSk9PiEwXSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LGwpfShsLHRoaXMuc3RhdGVz''@;'; put 'put ''KX1nZXQgY29udGFpbnNRdWVyaWVzKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24obCxhLGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKHY9PnYubWF0Y2gobCxhLGQsaCkpfHxudWxsfW1hdGNoU3R5bGVzKGwsYSxkKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXMobCxhLGQpfX1mdW5jdGlvbiBQaGUoYyxsLGEpe2MuaGFzKGwpP2MuaGFzKGEpfHxjLnNldChhLGMuZ2V0KGwpKTpjLmhhcyhhKSYmYy5zZXQobCxjLmdldChhKSl9Y29uc3QgZyRlPW5ldyBDTztjbGFzcyBtJGV7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCxhLGQpe3RoaXMuYm9keU5vZGU9bCx0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fYW5pbWF0aW9ucz1uZXcgTWFwLHRoaXMuX3BsYXllcnNCeUlkPW5ldyBNYXAsdGhpcy5wbGF5ZXJzPVtdfXJlZ2lzdGVyKGwsYSl7Y29uc3QgZD1bXSxmPUJHKHRoaXMu''@;'; put 'put ''X2RyaXZlcixhLGQsW10pO2lmKGQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIHdHZShjKXtyZXR1cm4gbmV3IFFuKDM1MDMsITEpfSgpO3RoaXMuX2FuaW1hdGlvbnMuc2V0KGwsZil9X2J1aWxkUGxheWVyKGwsYSxkKXtjb25zdCBoPWwuZWxlbWVudCxmPWJoZSh0aGlzLl9ub3JtYWxpemVyLGwu''@;'; put 'put ''a2V5ZnJhbWVzLGEsZCk7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKGgsZixsLmR1cmF0aW9uLGwuZGVsYXksbC5lYXNpbmcsW10sITApfWNyZWF0ZShsLGEsZD17fSl7Y29uc3QgaD1bXSxmPXRoaXMuX2FuaW1hdGlvbnMuZ2V0KGwpO2xldCB2O2NvbnN0IE09bmV3IE1hcDtpZihmPyh2''@;'; put 'put ''PVVHKHRoaXMuX2RyaXZlcixhLGYsT0csZ08sbmV3IE1hcCxuZXcgTWFwLGQsZyRlLGgpLHYuZm9yRWFjaChyZT0+e2NvbnN0IGNlPVRoKE0scmUuZWxlbWVudCxuZXcgTWFwKTtyZS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGJlPT5jZS5zZXQoYmUsbnVsbCkpfSkpOihoLnB1c2goZnVuY3Rp''@;'; put 'put ''b24gQ0dlKCl7cmV0dXJuIG5ldyBRbigzMzAwLCExKX0oKSksdj1bXSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gU0dlKGMpe3JldHVybiBuZXcgUW4oMzUwNCwhMSl9KCk7TS5mb3JFYWNoKChyZSxjZSk9PntyZS5mb3JFYWNoKChiZSxFZSk9PntyZS5zZXQoRWUsdGhpcy5fZHJpdmVyLmNv''@;'; put 'put ''bXB1dGVTdHlsZShjZSxFZSxpZykpfSl9KTtjb25zdCBaPURtKHYubWFwKHJlPT57Y29uc3QgY2U9TS5nZXQocmUuZWxlbWVudCk7cmV0dXJuIHRoaXMuX2J1aWxkUGxheWVyKHJlLG5ldyBNYXAsY2UpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZC5zZXQobCxaKSxaLm9uRGVzdHJveSgo''@;'; put 'put ''KT0+dGhpcy5kZXN0cm95KGwpKSx0aGlzLnBsYXllcnMucHVzaChaKSxafWRlc3Ryb3kobCl7Y29uc3QgYT10aGlzLl9nZXRQbGF5ZXIobCk7YS5kZXN0cm95KCksdGhpcy5fcGxheWVyc0J5SWQuZGVsZXRlKGwpO2NvbnN0IGQ9dGhpcy5wbGF5ZXJzLmluZGV4T2YoYSk7ZD49MCYmdGhpcy5w''@;'; put 'put ''bGF5ZXJzLnNwbGljZShkLDEpfV9nZXRQbGF5ZXIobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXJzQnlJZC5nZXQobCk7aWYoIWEpdGhyb3cgZnVuY3Rpb24gTUdlKGMpe3JldHVybiBuZXcgUW4oMzMwMSwhMSl9KCk7cmV0dXJuIGF9bGlzdGVuKGwsYSxkLGgpe2NvbnN0IGY9a0coYSwiIiwiIiwi''@;'; put 'put ''Iik7cmV0dXJuIFRHKHRoaXMuX2dldFBsYXllcihsKSxkLGYsaCksKCk9Pnt9fWNvbW1hbmQobCxhLGQsaCl7aWYoInJlZ2lzdGVyIj09ZClyZXR1cm4gdm9pZCB0aGlzLnJlZ2lzdGVyKGwsaFswXSk7aWYoImNyZWF0ZSI9PWQpcmV0dXJuIHZvaWQgdGhpcy5jcmVhdGUobCxhLGhbMF18fHt9''@;'; put 'put ''KTtjb25zdCBmPXRoaXMuX2dldFBsYXllcihsKTtzd2l0Y2goZCl7Y2FzZSJwbGF5IjpmLnBsYXkoKTticmVhaztjYXNlInBhdXNlIjpmLnBhdXNlKCk7YnJlYWs7Y2FzZSJyZXNldCI6Zi5yZXNldCgpO2JyZWFrO2Nhc2UicmVzdGFydCI6Zi5yZXN0YXJ0KCk7YnJlYWs7Y2FzZSJmaW5pc2gi''@;'; put 'put ''OmYuZmluaXNoKCk7YnJlYWs7Y2FzZSJpbml0IjpmLmluaXQoKTticmVhaztjYXNlInNldFBvc2l0aW9uIjpmLnNldFBvc2l0aW9uKHBhcnNlRmxvYXQoaFswXSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dGhpcy5kZXN0cm95KGwpfX19Y29uc3QgRmhlPSJuZy1hbmltYXRlLXF1ZXVlZCIsWUc9''@;'; put 'put ''Im5nLWFuaW1hdGUtZGlzYWJsZWQiLHckZT1bXSxIaGU9e25hbWVzcGFjZUlkOiIiLHNldEZvclJlbW92YWw6ITEsc2V0Rm9yTW92ZTohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9LEMkZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yTW92ZTohMSxzZXRGb3JSZW1v''@;'; put 'put ''dmFsOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMH0sZTM9Il9fbmdfcmVtb3ZlZCI7Y2xhc3MgR0d7Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfWNvbnN0cnVjdG9yKGwsYT0iIil7dGhpcy5uYW1lc3BhY2VJZD1hO2NvbnN0IGQ9bCYm''@;'; put 'put ''bC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uIEUkZShjKXtyZXR1cm4gYz8/bnVsbH0oZD9sLnZhbHVlOmwpLGQpe2NvbnN0e3ZhbHVlOmYsLi4udn09bDt0aGlzLm9wdGlvbnM9dn1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1z''@;'; put 'put ''fHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9YWJzb3JiT3B0aW9ucyhsKXtjb25zdCBhPWwucGFyYW1zO2lmKGEpe2NvbnN0IGQ9dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGg9PntudWxsPT1kW2hdJiYoZFtoXT1hW2hdKX0pfX19Y29uc3QgaUU9InZvaWQi''@;'; put 'put ''LCRHPW5ldyBHRyhpRSk7Y2xhc3MgUyRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmlkPWwsdGhpcy5ob3N0RWxlbWVudD1hLHRoaXMuX2VuZ2luZT1kLHRoaXMucGxheWVycz1bXSx0aGlzLl90cmlnZ2Vycz1uZXcgTWFwLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnM9''@;'; put 'put ''bmV3IE1hcCx0aGlzLl9ob3N0Q2xhc3NOYW1lPSJuZy10bnMtIitsLEYyKGEsdGhpcy5faG9zdENsYXNzTmFtZSl9bGlzdGVuKGwsYSxkLGgpe2lmKCF0aGlzLl90cmlnZ2Vycy5oYXMoYSkpdGhyb3cgZnVuY3Rpb24geEdlKGMsbCl7cmV0dXJuIG5ldyBRbigzMzAyLCExKX0oKTtpZihudWxs''@;'; put 'put ''PT1kfHwwPT1kLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBFR2UoYyl7cmV0dXJuIG5ldyBRbigzMzAzLCExKX0oKTtpZighZnVuY3Rpb24gVCRlKGMpe3JldHVybiJzdGFydCI9PWN8fCJkb25lIj09Y30oZCkpdGhyb3cgZnVuY3Rpb24gVEdlKGMsbCl7cmV0dXJuIG5ldyBRbigzNDAwLCExKX0o''@;'; put 'put ''KTtjb25zdCBmPVRoKHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMsbCxbXSksdj17bmFtZTphLHBoYXNlOmQsY2FsbGJhY2s6aH07Zi5wdXNoKHYpO2NvbnN0IE09VGgodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCxsLG5ldyBNYXApO3JldHVybiBNLmhhcyhhKXx8KEYyKGwsbU8pLEYyKGws''@;'; put 'put ''bU8rIi0iK2EpLE0uc2V0KGEsJEcpKSwoKT0+e3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57Y29uc3QgRD1mLmluZGV4T2Yodik7RD49MCYmZi5zcGxpY2UoRCwxKSx0aGlzLl90cmlnZ2Vycy5oYXMoYSl8fE0uZGVsZXRlKGEpfSl9fXJlZ2lzdGVyKGwsYSl7cmV0dXJuIXRoaXMuX3Ry''@;'; put 'put ''aWdnZXJzLmhhcyhsKSYmKHRoaXMuX3RyaWdnZXJzLnNldChsLGEpLCEwKX1fZ2V0VHJpZ2dlcihsKXtjb25zdCBhPXRoaXMuX3RyaWdnZXJzLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiBBR2UoYyl7cmV0dXJuIG5ldyBRbigzNDAxLCExKX0oKTtyZXR1cm4gYX10cmlnZ2VyKGwsYSxk''@;'; put 'put ''LGg9ITApe2NvbnN0IGY9dGhpcy5fZ2V0VHJpZ2dlcihhKSx2PW5ldyBLRyh0aGlzLmlkLGEsbCk7bGV0IE09dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7TXx8KEYyKGwsbU8pLEYyKGwsbU8rIi0iK2EpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuc2V0KGwsTT1u''@;'; put 'put ''ZXcgTWFwKSk7bGV0IEQ9TS5nZXQoYSk7Y29uc3QgWj1uZXcgR0coZCx0aGlzLmlkKTtpZighKGQmJmQuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZEJiZaLmFic29yYk9wdGlvbnMoRC5vcHRpb25zKSxNLnNldChhLFopLER8fChEPSRHKSxaLnZhbHVlIT09aUUmJkQudmFsdWU9PT1aLnZh''@;'; put 'put ''bHVlKXtpZighZnVuY3Rpb24gRCRlKGMsbCl7Y29uc3QgYT1PYmplY3Qua2V5cyhjKSxkPU9iamVjdC5rZXlzKGwpO2lmKGEubGVuZ3RoIT1kLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO2lmKCFsLmhhc093blByb3BlcnR5KGYpfHxj''@;'; put 'put ''W2ZdIT09bFtmXSlyZXR1cm4hMX1yZXR1cm4hMH0oRC5wYXJhbXMsWi5wYXJhbXMpKXtjb25zdCBxZT1bXSxydD1mLm1hdGNoU3R5bGVzKEQudmFsdWUsRC5wYXJhbXMscWUpLHB0PWYubWF0Y2hTdHlsZXMoWi52YWx1ZSxaLnBhcmFtcyxxZSk7cWUubGVuZ3RoP3RoaXMuX2VuZ2luZS5yZXBv''@;'; put 'put ''cnRFcnJvcihxZSk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntGNyhsLHJ0KSxNcChsLHB0KX0pfXJldHVybn1jb25zdCBiZT1UaCh0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudCxsLFtdKTtiZS5mb3JFYWNoKHFlPT57cWUubmFtZXNwYWNlSWQ9PXRoaXMuaWQmJnFlLnRyaWdn''@;'; put 'put ''ZXJOYW1lPT1hJiZxZS5xdWV1ZWQmJnFlLmRlc3Ryb3koKX0pO2xldCBFZT1mLm1hdGNoVHJhbnNpdGlvbihELnZhbHVlLFoudmFsdWUsbCxaLnBhcmFtcyksQmU9ITE7aWYoIUVlKXtpZighaClyZXR1cm47RWU9Zi5mYWxsYmFja1RyYW5zaXRpb24sQmU9ITB9cmV0dXJuIHRoaXMuX2VuZ2lu''@;'; put 'put ''ZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6YSx0cmFuc2l0aW9uOkVlLGZyb21TdGF0ZTpELHRvU3RhdGU6WixwbGF5ZXI6dixpc0ZhbGxiYWNrVHJhbnNpdGlvbjpCZX0pLEJlfHwoRjIobCxGaGUpLHYub25TdGFydCgoKT0+''@;'; put 'put ''e2lfKGwsRmhlKX0pKSx2Lm9uRG9uZSgoKT0+e2xldCBxZT10aGlzLnBsYXllcnMuaW5kZXhPZih2KTtxZT49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShxZSwxKTtjb25zdCBydD10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQobCk7aWYocnQpe2xldCBwdD1ydC5pbmRleE9mKHYp''@;'; put 'put ''O3B0Pj0wJiZydC5zcGxpY2UocHQsMSl9fSksdGhpcy5wbGF5ZXJzLnB1c2godiksYmUucHVzaCh2KSx2fWRlcmVnaXN0ZXIobCl7dGhpcy5fdHJpZ2dlcnMuZGVsZXRlKGwpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZm9yRWFjaChhPT5hLmRlbGV0ZShsKSksdGhpcy5fZWxlbWVu''@;'; put 'put ''dExpc3RlbmVycy5mb3JFYWNoKChhLGQpPT57dGhpcy5fZWxlbWVudExpc3RlbmVycy5zZXQoZCxhLmZpbHRlcihoPT5oLm5hbWUhPWwpKX0pfWNsZWFyRWxlbWVudENhY2hlKGwpe3RoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZGVsZXRlKGwpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMu''@;'; put 'put ''ZGVsZXRlKGwpO2NvbnN0IGE9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2EmJihhLmZvckVhY2goZD0+ZC5kZXN0cm95KCkpLHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmRlbGV0ZShsKSl9X3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKGwsYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLl9lbmdpbmUuZHJpdmVyLnF1ZXJ5KGwsdk8sITApO2QuZm9yRWFjaChoPT57aWYoaFtlM10pcmV0dXJuO2NvbnN0IGY9dGhpcy5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChoKTtmLnNpemU/Zi5mb3JFYWNoKHY9PnYudHJpZ2dlckxlYXZlQW5pbWF0aW9uKGgs''@;'; put 'put ''YSwhMSwhMCkpOnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoaCl9KSx0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5kLmZvckVhY2goaD0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShoKSkpfXRyaWdnZXJMZWF2ZUFuaW1hdGlvbihsLGEsZCxoKXtjb25zdCBmPXRoaXMu''@;'; put 'put ''X2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpLHY9bmV3IE1hcDtpZihmKXtjb25zdCBNPVtdO2lmKGYuZm9yRWFjaCgoRCxaKT0+e2lmKHYuc2V0KFosRC52YWx1ZSksdGhpcy5fdHJpZ2dlcnMuaGFzKFopKXtjb25zdCByZT10aGlzLnRyaWdnZXIobCxaLGlFLGgpO3JlJiZNLnB1c2go''@;'; put 'put ''cmUpfX0pLE0ubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCxsLCEwLGEsdiksZCYmRG0oTSkub25Eb25lKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZShsKSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlz''@;'; put 'put ''dGVuZXJzKGwpe2NvbnN0IGE9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQobCksZD10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKTtpZihhJiZkKXtjb25zdCBoPW5ldyBTZXQ7YS5mb3JFYWNoKGY9Pntjb25zdCB2PWYubmFtZTtpZihoLmhhcyh2KSlyZXR1cm47aC5hZGQo''@;'; put 'put ''dik7Y29uc3QgRD10aGlzLl90cmlnZ2Vycy5nZXQodikuZmFsbGJhY2tUcmFuc2l0aW9uLFo9ZC5nZXQodil8fCRHLHJlPW5ldyBHRyhpRSksY2U9bmV3IEtHKHRoaXMuaWQsdixsKTt0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDps''@;'; put 'put ''LHRyaWdnZXJOYW1lOnYsdHJhbnNpdGlvbjpELGZyb21TdGF0ZTpaLHRvU3RhdGU6cmUscGxheWVyOmNlLGlzRmFsbGJhY2tUcmFuc2l0aW9uOiEwfSl9KX19cmVtb3ZlTm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5fZW5naW5lO2lmKGwuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJl''@;'; put 'put ''bW92YWxGb3JJbm5lclRyaWdnZXJzKGwsYSksdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24obCxhLCEwKSlyZXR1cm47bGV0IGg9ITE7aWYoZC50b3RhbEFuaW1hdGlvbnMpe2NvbnN0IGY9ZC5wbGF5ZXJzLmxlbmd0aD9kLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTpbXTtpZihm''@;'; put 'put ''JiZmLmxlbmd0aCloPSEwO2Vsc2V7bGV0IHY9bDtmb3IoO3Y9di5wYXJlbnROb2RlOylpZihkLnN0YXRlc0J5RWxlbWVudC5nZXQodikpe2g9ITA7YnJlYWt9fX1pZih0aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyhsKSxoKWQubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5p''@;'; put 'put ''ZCxsLCExLGEpO2Vsc2V7Y29uc3QgZj1sW2UzXTsoIWZ8fGY9PT1IaGUpJiYoZC5hZnRlckZsdXNoKCgpPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKGwpKSxkLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCksZC5fb25SZW1vdmFsQ29tcGxldGUobCxhKSl9fWluc2VydE5vZGUobCxhKXtGMihs''@;'; put 'put ''LHRoaXMuX2hvc3RDbGFzc05hbWUpfWRyYWluUXVldWVkVHJhbnNpdGlvbnMobCl7Y29uc3QgYT1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChkPT57Y29uc3QgaD1kLnBsYXllcjtpZihoLmRlc3Ryb3llZClyZXR1cm47Y29uc3QgZj1kLmVsZW1lbnQsdj10aGlzLl9lbGVtZW50TGlz''@;'; put 'put ''dGVuZXJzLmdldChmKTt2JiZ2LmZvckVhY2goTT0+e2lmKE0ubmFtZT09ZC50cmlnZ2VyTmFtZSl7Y29uc3QgRD1rRyhmLGQudHJpZ2dlck5hbWUsZC5mcm9tU3RhdGUudmFsdWUsZC50b1N0YXRlLnZhbHVlKTtELl9kYXRhPWwsVEcoZC5wbGF5ZXIsTS5waGFzZSxELE0uY2FsbGJhY2spfX0p''@;'; put 'put ''LGgubWFya2VkRm9yRGVzdHJveT90aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e2guZGVzdHJveSgpfSk6YS5wdXNoKGQpfSksdGhpcy5fcXVldWU9W10sYS5zb3J0KChkLGgpPT57Y29uc3QgZj1kLnRyYW5zaXRpb24uYXN0LmRlcENvdW50LHY9aC50cmFuc2l0aW9uLmFzdC5kZXBDb3Vu''@;'; put 'put ''dDtyZXR1cm4gMD09Znx8MD09dj9mLXY6dGhpcy5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQoZC5lbGVtZW50LGguZWxlbWVudCk/MTotMX0pfWRlc3Ryb3kobCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goYT0+YS5kZXN0cm95KCkpLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRy''@;'; put 'put ''aWdnZXJzKHRoaXMuaG9zdEVsZW1lbnQsbCl9fWNsYXNzIE0kZXtfb25SZW1vdmFsQ29tcGxldGUobCxhKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKGwsYSl9Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMu''@;'; put 'put ''c2NoZWR1bGVyPWgsdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxl''@;'; put 'put ''ZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFj''@;'; put 'put ''ZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShmLHYpPT57fX1nZXQgcXVldWVkUGxheWVycygpe2NvbnN0IGw9W107cmV0dXJuIHRoaXMuX25h''@;'; put 'put ''bWVzcGFjZUxpc3QuZm9yRWFjaChhPT57YS5wbGF5ZXJzLmZvckVhY2goZD0+e2QucXVldWVkJiZsLnB1c2goZCl9KX0pLGx9Y3JlYXRlTmFtZXNwYWNlKGwsYSl7Y29uc3QgZD1uZXcgUyRlKGwsYSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVt''@;'; put 'put ''ZW50KHRoaXMuYm9keU5vZGUsYSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxhKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGEsZCksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGEpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF09ZH1fYmFsYW5jZU5hbWVzcGFjZUxpc3QobCxh''@;'; put 'put ''KXtjb25zdCBkPXRoaXMuX25hbWVzcGFjZUxpc3QsaD10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50O2lmKGQubGVuZ3RoLTE+PTApe2xldCB2PSExLE09dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChhKTtmb3IoO007KXtjb25zdCBEPWguZ2V0KE0pO2lmKEQpe2NvbnN0IFo9ZC5p''@;'; put 'put ''bmRleE9mKEQpO2Quc3BsaWNlKForMSwwLGwpLHY9ITA7YnJlYWt9TT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KE0pfXZ8fGQudW5zaGlmdChsKX1lbHNlIGQucHVzaChsKTtyZXR1cm4gaC5zZXQoYSxsKSxsfXJlZ2lzdGVyKGwsYSl7bGV0IGQ9dGhpcy5fbmFtZXNwYWNlTG9va3Vw''@;'; put 'put ''W2xdO3JldHVybiBkfHwoZD10aGlzLmNyZWF0ZU5hbWVzcGFjZShsLGEpKSxkfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCl7bGV0IGg9dGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdO2gmJmgucmVnaXN0ZXIoYSxkKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KGwsYSl7bCYmKHRoaXMu''@;'; put 'put ''YWZ0ZXJGbHVzaCgoKT0+e30pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57Y29uc3QgZD10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTt0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShkLmhvc3RFbGVtZW50KTtjb25zdCBoPXRoaXMuX25hbWVzcGFjZUxpc3Qu''@;'; put 'put ''aW5kZXhPZihkKTtoPj0wJiZ0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShoLDEpLGQuZGVzdHJveShhKSxkZWxldGUgdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfSkpfV9mZXRjaE5hbWVzcGFjZShsKXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfWZldGNoTmFtZXNwYWNlc0J5''@;'; put 'put ''RWxlbWVudChsKXtjb25zdCBhPW5ldyBTZXQsZD10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7aWYoZClmb3IobGV0IGggb2YgZC52YWx1ZXMoKSlpZihoLm5hbWVzcGFjZUlkKXtjb25zdCBmPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGgubmFtZXNwYWNlSWQpO2YmJmEuYWRkKGYpfXJldHVy''@;'; put 'put ''biBhfXRyaWdnZXIobCxhLGQsaCl7aWYoeE8oYSkpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk7aWYoZilyZXR1cm4gZi50cmlnZ2VyKGEsZCxoKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKGwsYSxkLGgpe2lmKCF4TyhhKSlyZXR1cm47Y29uc3QgZj1hW2UzXTtpZihmJiZmLnNl''@;'; put 'put ''dEZvclJlbW92YWwpe2Yuc2V0Rm9yUmVtb3ZhbD0hMSxmLnNldEZvck1vdmU9ITA7Y29uc3Qgdj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihhKTt2Pj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKHYsMSl9aWYobCl7Y29uc3Qgdj10aGlzLl9mZXRj''@;'; put 'put ''aE5hbWVzcGFjZShsKTt2JiZ2Lmluc2VydE5vZGUoYSxkKX1oJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoYSl9Y29sbGVjdEVudGVyRWxlbWVudChsKXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaChsKX1tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKXthP3RoaXMuZGlzYWJs''@;'; put 'put ''ZWROb2Rlcy5oYXMobCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKGwpLEYyKGwsWUcpKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKGwpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZShsKSxpXyhsLFlHKSl9cmVtb3ZlTm9kZShsLGEsZCl7aWYoeE8oYSkpe3RoaXMuc2NoZWR1bGVyPy5u''@;'; put 'put ''b3RpZnkoKTtjb25zdCBoPWw/dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk6bnVsbDtoP2gucmVtb3ZlTm9kZShhLGQpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQobCxhLCExLGQpO2NvbnN0IGY9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQoYSk7ZiYmZi5pZCE9PWwmJmYucmVt''@;'; put 'put ''b3ZlTm9kZShhLGQpfWVsc2UgdGhpcy5fb25SZW1vdmFsQ29tcGxldGUoYSxkKX1tYXJrRWxlbWVudEFzUmVtb3ZlZChsLGEsZCxoLGYpe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGEpLGFbZTNdPXtuYW1lc3BhY2VJZDpsLHNldEZvclJlbW92YWw6aCxoYXNBbmltYXRpb246''@;'; put 'put ''ZCxyZW1vdmVkQmVmb3JlUXVlcmllZDohMSxwcmV2aW91c1RyaWdnZXJzVmFsdWVzOmZ9fWxpc3RlbihsLGEsZCxoLGYpe3JldHVybiB4TyhhKT90aGlzLl9mZXRjaE5hbWVzcGFjZShsKS5saXN0ZW4oYSxkLGgsZik6KCk9Pnt9fV9idWlsZEluc3RydWN0aW9uKGwsYSxkLGgsZil7cmV0dXJu''@;'; put 'put ''IGwudHJhbnNpdGlvbi5idWlsZCh0aGlzLmRyaXZlcixsLmVsZW1lbnQsbC5mcm9tU3RhdGUudmFsdWUsbC50b1N0YXRlLnZhbHVlLGQsaCxsLmZyb21TdGF0ZS5vcHRpb25zLGwudG9TdGF0ZS5vcHRpb25zLGEsZil9ZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKXtsZXQgYT10aGlzLmRyaXZl''@;'; put 'put ''ci5xdWVyeShsLHZPLCEwKTthLmZvckVhY2goZD0+dGhpcy5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoZCkpLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKGE9dGhpcy5kcml2ZXIucXVlcnkobCxQRywhMCksYS5mb3JFYWNoKGQ9PnRoaXMuZmluaXNo''@;'; put 'put ''QWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudChkKSkpfWRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChsKXtjb25zdCBhPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQobCk7YSYmYS5mb3JFYWNoKGQ9PntkLnF1ZXVlZD9kLm1hcmtlZEZvckRlc3Ryb3k9ITA6ZC5kZXN0''@;'; put 'put ''cm95KCl9KX1maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk7YSYmYS5mb3JFYWNoKGQ9PmQuZmluaXNoKCkpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIG5ldyBQcm9taXNlKGw9Pntp''@;'; put 'put ''Zih0aGlzLnBsYXllcnMubGVuZ3RoKXJldHVybiBEbSh0aGlzLnBsYXllcnMpLm9uRG9uZSgoKT0+bCgpKTtsKCl9KX1wcm9jZXNzTGVhdmVOb2RlKGwpe2NvbnN0IGE9bFtlM107aWYoYSYmYS5zZXRGb3JSZW1vdmFsKXtpZihsW2UzXT1IaGUsYS5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95''@;'; put 'put ''SW5uZXJBbmltYXRpb25zKGwpO2NvbnN0IGQ9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoYS5uYW1lc3BhY2VJZCk7ZCYmZC5jbGVhckVsZW1lbnRDYWNoZShsKX10aGlzLl9vblJlbW92YWxDb21wbGV0ZShsLGEuc2V0Rm9yUmVtb3ZhbCl9bC5jbGFzc0xpc3Q/LmNvbnRhaW5zKFlHKSYmdGhpcy5t''@;'; put 'put ''YXJrRWxlbWVudEFzRGlzYWJsZWQobCwhMSksdGhpcy5kcml2ZXIucXVlcnkobCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiLCEwKS5mb3JFYWNoKGQ9Pnt0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChkLCExKX0pfWZsdXNoKGw9LTEpe2xldCBhPVtdO2lmKHRoaXMubmV3SG9zdEVsZW1lbnRz''@;'; put 'put ''LnNpemUmJih0aGlzLm5ld0hvc3RFbGVtZW50cy5mb3JFYWNoKChkLGgpPT50aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChkLGgpKSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aClm''@;'; put 'put ''b3IobGV0IGQ9MDtkPHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7ZCsrKUYyKHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1tkXSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnN8fHRo''@;'; put 'put ''aXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGgpKXtjb25zdCBkPVtdO3RyeXthPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhkLGwpfWZpbmFsbHl7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspZFtoXSgpfX1lbHNlIGZvcihsZXQgZD0wO2Q8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1l''@;'; put 'put ''bnRzLmxlbmd0aDtkKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tkXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxl''@;'; put 'put ''bmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goZD0+ZCgpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtjb25zdCBkPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sYS5sZW5ndGg/RG0oYSkub25Eb25lKCgpPT57ZC5mb3JF''@;'; put 'put ''YWNoKGg9PmgoKSl9KTpkLmZvckVhY2goaD0+aCgpKX19cmVwb3J0RXJyb3IobCl7dGhyb3cgZnVuY3Rpb24ga0dlKGMpe3JldHVybiBuZXcgUW4oMzQwMiwhMSl9KCl9X2ZsdXNoQW5pbWF0aW9ucyhsLGEpe2NvbnN0IGQ9bmV3IENPLGg9W10sZj1uZXcgTWFwLHY9W10sTT1uZXcgTWFwLEQ9''@;'; put 'put ''bmV3IE1hcCxaPW5ldyBNYXAscmU9bmV3IFNldDt0aGlzLmRpc2FibGVkTm9kZXMuZm9yRWFjaChKbj0+e3JlLmFkZChKbik7Y29uc3QgSXI9dGhpcy5kcml2ZXIucXVlcnkoSm4sIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApO2ZvcihsZXQgJHI9MDskcjxJci5sZW5ndGg7JHIrKylyZS5hZGQo''@;'; put 'put ''SXJbJHJdKX0pO2NvbnN0IGNlPXRoaXMuYm9keU5vZGUsYmU9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLEVlPUJoZShiZSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLEJlPW5ldyBNYXA7bGV0IHFlPTA7RWUuZm9yRWFjaCgoSm4sSXIpPT57Y29uc3QgJHI9''@;'; put 'put ''T0crcWUrKztCZS5zZXQoSXIsJHIpLEpuLmZvckVhY2god2k9PkYyKHdpLCRyKSl9KTtjb25zdCBydD1bXSxwdD1uZXcgU2V0LGR0PW5ldyBTZXQ7Zm9yKGxldCBKbj0wO0puPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7Sm4rKyl7Y29uc3QgSXI9dGhpcy5jb2xsZWN0ZWRM''@;'; put 'put ''ZWF2ZUVsZW1lbnRzW0puXSwkcj1JcltlM107JHImJiRyLnNldEZvclJlbW92YWwmJihydC5wdXNoKElyKSxwdC5hZGQoSXIpLCRyLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShJciwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKHdpPT5wdC5hZGQod2kpKTpkdC5hZGQo''@;'; put 'put ''SXIpKX1jb25zdCBKdD1uZXcgTWFwLHZuPUJoZShiZSxBcnJheS5mcm9tKHB0KSk7dm4uZm9yRWFjaCgoSm4sSXIpPT57Y29uc3QgJHI9Z08rcWUrKztKdC5zZXQoSXIsJHIpLEpuLmZvckVhY2god2k9PkYyKHdpLCRyKSl9KSxsLnB1c2goKCk9PntFZS5mb3JFYWNoKChKbixJcik9Pntjb25z''@;'; put 'put ''dCAkcj1CZS5nZXQoSXIpO0puLmZvckVhY2god2k9PmlfKHdpLCRyKSl9KSx2bi5mb3JFYWNoKChKbixJcik9Pntjb25zdCAkcj1KdC5nZXQoSXIpO0puLmZvckVhY2god2k9PmlfKHdpLCRyKSl9KSxydC5mb3JFYWNoKEpuPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKEpuKX0pfSk7Y29uc3Qg''@;'; put 'put ''Q249W10sdG49W107Zm9yKGxldCBKbj10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO0puPj0wO0puLS0pdGhpcy5fbmFtZXNwYWNlTGlzdFtKbl0uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhhKS5mb3JFYWNoKCRyPT57Y29uc3Qgd2k9JHIucGxheWVyLGVhPSRyLmVsZW1lbnQ7aWYoQ24u''@;'; put 'put ''cHVzaCh3aSksdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7Y29uc3QgYXI9ZWFbZTNdO2lmKGFyJiZhci5zZXRGb3JNb3ZlKXtpZihhci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiZhci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhhcygkci50cmlnZ2VyTmFtZSkpe2NvbnN0''@;'; put 'put ''IEhyPWFyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KCRyLnRyaWdnZXJOYW1lKSxxcj10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQoJHIuZWxlbWVudCk7aWYocXImJnFyLmhhcygkci50cmlnZ2VyTmFtZSkpe2NvbnN0IG9uPXFyLmdldCgkci50cmlnZ2VyTmFtZSk7b24udmFsdWU9SHIs''@;'; put 'put ''cXIuc2V0KCRyLnRyaWdnZXJOYW1lLG9uKX19cmV0dXJuIHZvaWQgd2kuZGVzdHJveSgpfX1jb25zdCBmYT0hY2V8fCF0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQoY2UsZWEpLHZ0PUp0LmdldChlYSksTnQ9QmUuZ2V0KGVhKSxIdD10aGlzLl9idWlsZEluc3RydWN0aW9uKCRyLGQsTnQs''@;'; put 'put ''dnQsZmEpO2lmKEh0LmVycm9ycyYmSHQuZXJyb3JzLmxlbmd0aClyZXR1cm4gdm9pZCB0bi5wdXNoKEh0KTtpZihmYSlyZXR1cm4gd2kub25TdGFydCgoKT0+RjcoZWEsSHQuZnJvbVN0eWxlcykpLHdpLm9uRGVzdHJveSgoKT0+TXAoZWEsSHQudG9TdHlsZXMpKSx2b2lkIGgucHVzaCh3aSk7''@;'; put 'put ''aWYoJHIuaXNGYWxsYmFja1RyYW5zaXRpb24pcmV0dXJuIHdpLm9uU3RhcnQoKCk9PkY3KGVhLEh0LmZyb21TdHlsZXMpKSx3aS5vbkRlc3Ryb3koKCk9Pk1wKGVhLEh0LnRvU3R5bGVzKSksdm9pZCBoLnB1c2god2kpO2NvbnN0IEhuPVtdO0h0LnRpbWVsaW5lcy5mb3JFYWNoKGFyPT57YXIu''@;'; put 'put ''c3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITAsdGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhhci5lbGVtZW50KXx8SG4ucHVzaChhcil9KSxIdC50aW1lbGluZXM9SG4sZC5hcHBlbmQoZWEsSHQudGltZWxpbmVzKSx2LnB1c2goe2luc3RydWN0aW9uOkh0LHBsYXllcjp3aSxlbGVtZW50OmVhfSks''@;'; put 'put ''SHQucXVlcmllZEVsZW1lbnRzLmZvckVhY2goYXI9PlRoKE0sYXIsW10pLnB1c2god2kpKSxIdC5wcmVTdHlsZVByb3BzLmZvckVhY2goKGFyLEhyKT0+e2lmKGFyLnNpemUpe2xldCBxcj1ELmdldChIcik7cXJ8fEQuc2V0KEhyLHFyPW5ldyBTZXQpLGFyLmZvckVhY2goKG9uLHluKT0+cXIu''@;'; put 'put ''YWRkKHluKSl9fSksSHQucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgoYXIsSHIpPT57bGV0IHFyPVouZ2V0KEhyKTtxcnx8Wi5zZXQoSHIscXI9bmV3IFNldCksYXIuZm9yRWFjaCgob24seW4pPT5xci5hZGQoeW4pKX0pfSk7aWYodG4ubGVuZ3RoKXtjb25zdCBKbj1bXTt0bi5mb3JFYWNoKEly''@;'; put 'put ''PT57Sm4ucHVzaChmdW5jdGlvbiBER2UoYyxsKXtyZXR1cm4gbmV3IFFuKDM1MDUsITEpfSgpKX0pLENuLmZvckVhY2goSXI9PklyLmRlc3Ryb3koKSksdGhpcy5yZXBvcnRFcnJvcihKbil9Y29uc3QgTW49bmV3IE1hcCxDcj1uZXcgTWFwO3YuZm9yRWFjaChKbj0+e2NvbnN0IElyPUpuLmVs''@;'; put 'put ''ZW1lbnQ7ZC5oYXMoSXIpJiYoQ3Iuc2V0KElyLElyKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChKbi5wbGF5ZXIubmFtZXNwYWNlSWQsSm4uaW5zdHJ1Y3Rpb24sTW4pKX0pLGguZm9yRWFjaChKbj0+e2NvbnN0IElyPUpuLmVsZW1lbnQ7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKEly''@;'; put 'put ''LCExLEpuLm5hbWVzcGFjZUlkLEpuLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2god2k9PntUaChNbixJcixbXSkucHVzaCh3aSksd2kuZGVzdHJveSgpfSl9KTtjb25zdCBHcj1ydC5maWx0ZXIoSm49PnpoZShKbixELFopKSxtcj1uZXcgTWFwO1ZoZShtcix0aGlzLmRyaXZlcixkdCxaLGln''@;'; put 'put ''KS5mb3JFYWNoKEpuPT57emhlKEpuLEQsWikmJkdyLnB1c2goSm4pfSk7Y29uc3QgYWk9bmV3IE1hcDtFZS5mb3JFYWNoKChKbixJcik9PntWaGUoYWksdGhpcy5kcml2ZXIsbmV3IFNldChKbiksRCwiISIpfSksR3IuZm9yRWFjaChKbj0+e2NvbnN0IElyPW1yLmdldChKbiksJHI9YWkuZ2V0''@;'; put 'put ''KEpuKTttci5zZXQoSm4sbmV3IE1hcChbLi4uSXI/LmVudHJpZXMoKT8/W10sLi4uJHI/LmVudHJpZXMoKT8/W11dKSl9KTtjb25zdCBfaT1bXSxPbj1bXSx6cj17fTt2LmZvckVhY2goSm49Pntjb25zdHtlbGVtZW50OklyLHBsYXllcjokcixpbnN0cnVjdGlvbjp3aX09Sm47aWYoZC5oYXMo''@;'; put 'put ''SXIpKXtpZihyZS5oYXMoSXIpKXJldHVybiAkci5vbkRlc3Ryb3koKCk9Pk1wKElyLHdpLnRvU3R5bGVzKSksJHIuZGlzYWJsZWQ9ITAsJHIub3ZlcnJpZGVUb3RhbFRpbWUod2kudG90YWxUaW1lKSx2b2lkIGgucHVzaCgkcik7bGV0IGVhPXpyO2lmKENyLnNpemU+MSl7bGV0IHZ0PUlyO2Nv''@;'; put 'put ''bnN0IE50PVtdO2Zvcig7dnQ9dnQucGFyZW50Tm9kZTspe2NvbnN0IEh0PUNyLmdldCh2dCk7aWYoSHQpe2VhPUh0O2JyZWFrfU50LnB1c2godnQpfU50LmZvckVhY2goSHQ9PkNyLnNldChIdCxlYSkpfWNvbnN0IGZhPXRoaXMuX2J1aWxkQW5pbWF0aW9uKCRyLm5hbWVzcGFjZUlkLHdpLE1u''@;'; put 'put ''LGYsYWksbXIpO2lmKCRyLnNldFJlYWxQbGF5ZXIoZmEpLGVhPT09enIpX2kucHVzaCgkcik7ZWxzZXtjb25zdCB2dD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGVhKTt2dCYmdnQubGVuZ3RoJiYoJHIucGFyZW50UGxheWVyPURtKHZ0KSksaC5wdXNoKCRyKX19ZWxzZSBGNyhJcix3aS5m''@;'; put 'put ''cm9tU3R5bGVzKSwkci5vbkRlc3Ryb3koKCk9Pk1wKElyLHdpLnRvU3R5bGVzKSksT24ucHVzaCgkcikscmUuaGFzKElyKSYmaC5wdXNoKCRyKX0pLE9uLmZvckVhY2goSm49Pntjb25zdCBJcj1mLmdldChKbi5lbGVtZW50KTtpZihJciYmSXIubGVuZ3RoKXtjb25zdCAkcj1EbShJcik7Sm4u''@;'; put 'put ''c2V0UmVhbFBsYXllcigkcil9fSksaC5mb3JFYWNoKEpuPT57Sm4ucGFyZW50UGxheWVyP0puLnN5bmNQbGF5ZXJFdmVudHMoSm4ucGFyZW50UGxheWVyKTpKbi5kZXN0cm95KCl9KTtmb3IobGV0IEpuPTA7Sm48cnQubGVuZ3RoO0puKyspe2NvbnN0IElyPXJ0W0puXSwkcj1JcltlM107aWYo''@;'; put 'put ''aV8oSXIsZ08pLCRyJiYkci5oYXNBbmltYXRpb24pY29udGludWU7bGV0IHdpPVtdO2lmKE0uc2l6ZSl7bGV0IGZhPU0uZ2V0KElyKTtmYSYmZmEubGVuZ3RoJiZ3aS5wdXNoKC4uLmZhKTtsZXQgdnQ9dGhpcy5kcml2ZXIucXVlcnkoSXIsUEcsITApO2ZvcihsZXQgTnQ9MDtOdDx2dC5sZW5n''@;'; put 'put ''dGg7TnQrKyl7bGV0IEh0PU0uZ2V0KHZ0W050XSk7SHQmJkh0Lmxlbmd0aCYmd2kucHVzaCguLi5IdCl9fWNvbnN0IGVhPXdpLmZpbHRlcihmYT0+IWZhLmRlc3Ryb3llZCk7ZWEubGVuZ3RoP0EkZSh0aGlzLElyLGVhKTp0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoSXIpfXJldHVybiBydC5sZW5n''@;'; put 'put ''dGg9MCxfaS5mb3JFYWNoKEpuPT57dGhpcy5wbGF5ZXJzLnB1c2goSm4pLEpuLm9uRG9uZSgoKT0+e0puLmRlc3Ryb3koKTtjb25zdCBJcj10aGlzLnBsYXllcnMuaW5kZXhPZihKbik7dGhpcy5wbGF5ZXJzLnNwbGljZShJciwxKX0pLEpuLnBsYXkoKX0pLF9pfWFmdGVyRmx1c2gobCl7dGhp''@;'; put 'put ''cy5fZmx1c2hGbnMucHVzaChsKX1hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUobCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2gobCl9X2dldFByZXZpb3VzUGxheWVycyhsLGEsZCxoLGYpe2xldCB2PVtdO2lmKGEpe2NvbnN0IE09dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk7''@;'; put 'put ''TSYmKHY9TSl9ZWxzZXtjb25zdCBNPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQobCk7aWYoTSl7Y29uc3QgRD0hZnx8Zj09aUU7TS5mb3JFYWNoKFo9PntaLnF1ZXVlZHx8IUQmJloudHJpZ2dlck5hbWUhPWh8fHYucHVzaChaKX0pfX1yZXR1cm4oZHx8aCkmJih2PXYuZmlsdGVyKE09PiEo''@;'; put 'put ''ZCYmZCE9TS5uYW1lc3BhY2VJZHx8aCYmaCE9TS50cmlnZ2VyTmFtZSkpKSx2fV9iZWZvcmVBbmltYXRpb25CdWlsZChsLGEsZCl7Y29uc3QgZj1hLmVsZW1lbnQsdj1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmwsTT1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmEudHJpZ2dl''@;'; put 'put ''ck5hbWU7Zm9yKGNvbnN0IEQgb2YgYS50aW1lbGluZXMpe2NvbnN0IFo9RC5lbGVtZW50LHJlPVohPT1mLGNlPVRoKGQsWixbXSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKFoscmUsdixNLGEudG9TdGF0ZSkuZm9yRWFjaChFZT0+e2NvbnN0IEJlPUVlLmdldFJlYWxQbGF5ZXIoKTtCZS5i''@;'; put 'put ''ZWZvcmVEZXN0cm95JiZCZS5iZWZvcmVEZXN0cm95KCksRWUuZGVzdHJveSgpLGNlLnB1c2goRWUpfSl9RjcoZixhLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbihsLGEsZCxoLGYsdil7Y29uc3QgTT1hLnRyaWdnZXJOYW1lLEQ9YS5lbGVtZW50LFo9W10scmU9bmV3IFNldCxjZT1uZXcg''@;'; put 'put ''U2V0LGJlPWEudGltZWxpbmVzLm1hcChCZT0+e2NvbnN0IHFlPUJlLmVsZW1lbnQ7cmUuYWRkKHFlKTtjb25zdCBydD1xZVtlM107aWYocnQmJnJ0LnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgd3goQmUuZHVyYXRpb24sQmUuZGVsYXkpO2NvbnN0IHB0PXFlIT09RCxkdD1mdW5j''@;'; put 'put ''dGlvbiBrJGUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gamhlKGMsbCksbH0oKGQuZ2V0KHFlKXx8dyRlKS5tYXAoTW49Pk1uLmdldFJlYWxQbGF5ZXIoKSkpLmZpbHRlcihNbj0+ISFNbi5lbGVtZW50JiZNbi5lbGVtZW50PT09cWUpLEp0PWYuZ2V0KHFlKSx2bj12LmdldChxZSksQ249YmhlKHRo''@;'; put 'put ''aXMuX25vcm1hbGl6ZXIsQmUua2V5ZnJhbWVzLEp0LHZuKSx0bj10aGlzLl9idWlsZFBsYXllcihCZSxDbixkdCk7aWYoQmUuc3ViVGltZWxpbmUmJmgmJmNlLmFkZChxZSkscHQpe2NvbnN0IE1uPW5ldyBLRyhsLE0scWUpO01uLnNldFJlYWxQbGF5ZXIodG4pLFoucHVzaChNbil9cmV0dXJu''@;'; put 'put ''IHRufSk7Wi5mb3JFYWNoKEJlPT57VGgodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxCZS5lbGVtZW50LFtdKS5wdXNoKEJlKSxCZS5vbkRvbmUoKCk9PmZ1bmN0aW9uIHgkZShjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7aWYoZCl7aWYoZC5sZW5ndGgpe2NvbnN0IGg9ZC5pbmRleE9mKGEp''@;'; put 'put ''O2Quc3BsaWNlKGgsMSl9MD09ZC5sZW5ndGgmJmMuZGVsZXRlKGwpfXJldHVybiBkfSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LEJlLmVsZW1lbnQsQmUpKX0pLHJlLmZvckVhY2goQmU9PkYyKEJlLE1oZSkpO2NvbnN0IEVlPURtKGJlKTtyZXR1cm4gRWUub25EZXN0cm95KCgpPT57''@;'; put 'put ''cmUuZm9yRWFjaChCZT0+aV8oQmUsTWhlKSksTXAoRCxhLnRvU3R5bGVzKX0pLGNlLmZvckVhY2goQmU9PntUaChoLEJlLFtdKS5wdXNoKEVlKX0pLEVlfV9idWlsZFBsYXllcihsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZShsLmVsZW1lbnQsYSxsLmR1cmF0''@;'; put 'put ''aW9uLGwuZGVsYXksbC5lYXNpbmcsZCk6bmV3IHd4KGwuZHVyYXRpb24sbC5kZWxheSl9fWNsYXNzIEtHe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWVzcGFjZUlkPWwsdGhpcy50cmlnZ2VyTmFtZT1hLHRoaXMuZWxlbWVudD1kLHRoaXMuX3BsYXllcj1uZXcgd3gsdGhpcy5fY29udGFp''@;'; put 'put ''bnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5tYXJrZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1zZXRS''@;'; put 'put ''ZWFsUGxheWVyKGwpe3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj1sLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5mb3JFYWNoKChhLGQpPT57YS5mb3JFYWNoKGg9PlRHKGwsZCx2b2lkIDAsaCkpfSksdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmNsZWFyKCksdGhpcy5fY29u''@;'; put 'put ''dGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUobC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX1nZXRSZWFsUGxheWVyKCl7cmV0dXJuIHRoaXMuX3BsYXllcn1vdmVycmlkZVRvdGFsVGltZShsKXt0aGlzLnRvdGFsVGltZT1sfXN5bmNQbGF5ZXJFdmVudHMobCl7''@;'; put 'put ''Y29uc3QgYT10aGlzLl9wbGF5ZXI7YS50cmlnZ2VyQ2FsbGJhY2smJmwub25TdGFydCgoKT0+YS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLGwub25Eb25lKCgpPT50aGlzLmZpbmlzaCgpKSxsLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KGwsYSl7VGgodGhp''@;'; put 'put ''cy5fcXVldWVkQ2FsbGJhY2tzLGwsW10pLnB1c2goYSl9b25Eb25lKGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIixsKSx0aGlzLl9wbGF5ZXIub25Eb25lKGwpfW9uU3RhcnQobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0IixsKSx0aGlzLl9w''@;'; put 'put ''bGF5ZXIub25TdGFydChsKX1vbkRlc3Ryb3kobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLGwpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kobCl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5f''@;'; put 'put ''cGxheWVyLmhhc1N0YXJ0ZWQoKX1wbGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMu''@;'; put 'put ''X3BsYXllci5maW5pc2goKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24obCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbihs''@;'; put 'put ''KX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPXRoaXMuX3BsYXllcjthLnRyaWdnZXJDYWxsYmFjayYmYS50cmlnZ2VyQ2FsbGJhY2sobCl9fWZ1bmN0aW9uIHhPKGMpe3JldHVy''@;'; put 'put ''biBjJiYxPT09Yy5ub2RlVHlwZX1mdW5jdGlvbiBOaGUoYyxsKXtjb25zdCBhPWMuc3R5bGUuZGlzcGxheTtyZXR1cm4gYy5zdHlsZS5kaXNwbGF5PWw/PyJub25lIixhfWZ1bmN0aW9uIFZoZShjLGwsYSxkLGgpe2NvbnN0IGY9W107YS5mb3JFYWNoKEQ9PmYucHVzaChOaGUoRCkpKTtjb25z''@;'; put 'put ''dCB2PVtdO2QuZm9yRWFjaCgoRCxaKT0+e2NvbnN0IHJlPW5ldyBNYXA7RC5mb3JFYWNoKGNlPT57Y29uc3QgYmU9bC5jb21wdXRlU3R5bGUoWixjZSxoKTtyZS5zZXQoY2UsYmUpLCghYmV8fDA9PWJlLmxlbmd0aCkmJihaW2UzXT1DJGUsdi5wdXNoKFopKX0pLGMuc2V0KFoscmUpfSk7bGV0''@;'; put 'put ''IE09MDtyZXR1cm4gYS5mb3JFYWNoKEQ9Pk5oZShELGZbTSsrXSkpLHZ9ZnVuY3Rpb24gQmhlKGMsbCl7Y29uc3QgYT1uZXcgTWFwO2lmKGMuZm9yRWFjaChNPT5hLnNldChNLFtdKSksMD09bC5sZW5ndGgpcmV0dXJuIGE7Y29uc3QgaD1uZXcgU2V0KGwpLGY9bmV3IE1hcDtmdW5jdGlvbiB2''@;'; put 'put ''KE0pe2lmKCFNKXJldHVybiAxO2xldCBEPWYuZ2V0KE0pO2lmKEQpcmV0dXJuIEQ7Y29uc3QgWj1NLnBhcmVudE5vZGU7cmV0dXJuIEQ9YS5oYXMoWik/WjpoLmhhcyhaKT8xOnYoWiksZi5zZXQoTSxEKSxEfXJldHVybiBsLmZvckVhY2goTT0+e2NvbnN0IEQ9dihNKTsxIT09RCYmYS5nZXQo''@;'; put 'put ''RCkucHVzaChNKX0pLGF9ZnVuY3Rpb24gRjIoYyxsKXtjLmNsYXNzTGlzdD8uYWRkKGwpfWZ1bmN0aW9uIGlfKGMsbCl7Yy5jbGFzc0xpc3Q/LnJlbW92ZShsKX1mdW5jdGlvbiBBJGUoYyxsLGEpe0RtKGEpLm9uRG9uZSgoKT0+Yy5wcm9jZXNzTGVhdmVOb2RlKGwpKX1mdW5jdGlvbiBqaGUo''@;'; put 'put ''YyxsKXtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKyl7Y29uc3QgZD1jW2FdO2QgaW5zdGFuY2VvZiBSMGU/amhlKGQucGxheWVycyxsKTpsLnB1c2goZCl9fWZ1bmN0aW9uIHpoZShjLGwsYSl7Y29uc3QgZD1hLmdldChjKTtpZighZClyZXR1cm4hMTtsZXQgaD1sLmdldChjKTtyZXR1cm4g''@;'; put 'put ''aD9kLmZvckVhY2goZj0+aC5hZGQoZikpOmwuc2V0KGMsZCksYS5kZWxldGUoYyksITB9Y2xhc3MgYUV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5fZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMuX3RyaWdnZXJDYWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShmLHYp''@;'; put 'put ''PT57fSx0aGlzLl90cmFuc2l0aW9uRW5naW5lPW5ldyBNJGUobC5ib2R5LGEsZCxoKSx0aGlzLl90aW1lbGluZUVuZ2luZT1uZXcgbSRlKGwuYm9keSxhLGQpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KGYsdik9PnRoaXMub25SZW1vdmFsQ29tcGxldGUoZix2''@;'; put 'put ''KX1yZWdpc3RlclRyaWdnZXIobCxhLGQsaCxmKXtjb25zdCB2PWwrIi0iK2g7bGV0IE09dGhpcy5fdHJpZ2dlckNhY2hlW3ZdO2lmKCFNKXtjb25zdCBEPVtdLHJlPUJHKHRoaXMuX2RyaXZlcixmLEQsW10pO2lmKEQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIHlHZShjLGwpe3JldHVybiBuZXcg''@;'; put 'put ''UW4oMzQwNCwhMSl9KCk7TT1mdW5jdGlvbiBoJGUoYyxsLGEpe3JldHVybiBuZXcgZiRlKGMsbCxhKX0oaCxyZSx0aGlzLl9ub3JtYWxpemVyKSx0aGlzLl90cmlnZ2VyQ2FjaGVbdl09TX10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihhLGgsTSl9cmVnaXN0ZXIobCxh''@;'; put 'put ''KXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyKGwsYSl9ZGVzdHJveShsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveShsLGEpfW9uSW5zZXJ0KGwsYSxkLGgpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZShsLGEsZCxoKX1vblJlbW92ZShsLGEsZCl7''@;'; put 'put ''dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZW1vdmVOb2RlKGwsYSxkKX1kaXNhYmxlQW5pbWF0aW9ucyhsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsYSl9cHJvY2VzcyhsLGEsZCxoKXtpZigiQCI9PWQuY2hhckF0KDApKXtjb25zdFtmLHZdPXlo''@;'; put 'put ''ZShkKTt0aGlzLl90aW1lbGluZUVuZ2luZS5jb21tYW5kKGYsYSx2LGgpfWVsc2UgdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS50cmlnZ2VyKGwsYSxkLGgpfWxpc3RlbihsLGEsZCxoLGYpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W3YsTV09eWhlKGQpO3JldHVybiB0aGlzLl90aW1lbGlu''@;'; put 'put ''ZUVuZ2luZS5saXN0ZW4odixhLE0sZil9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKGwsYSxkLGgsZil9Zmx1c2gobD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaChsKX1nZXQgcGxheWVycygpe3JldHVyblsuLi50aGlzLl90cmFuc2l0aW9uRW5naW5lLnBs''@;'; put 'put ''YXllcnMsLi4udGhpcy5fdGltZWxpbmVFbmdpbmUucGxheWVyc119d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmFmdGVy''@;'; put 'put ''Rmx1c2hBbmltYXRpb25zRG9uZShsKX19Y2xhc3Mgb0V7c3RhdGlje3RoaXMuaW5pdGlhbFN0eWxlc0J5RWxlbWVudD1uZXcgV2Vha01hcH1jb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5fZWxlbWVudD1sLHRoaXMuX3N0YXJ0U3R5bGVzPWEsdGhpcy5fZW5kU3R5bGVzPWQsdGhpcy5fc3RhdGU9''@;'; put 'put ''MDtsZXQgaD1vRS5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmdldChsKTtofHxvRS5pbml0aWFsU3R5bGVzQnlFbGVtZW50LnNldChsLGg9bmV3IE1hcCksdGhpcy5faW5pdGlhbFN0eWxlcz1ofXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZNcCh0aGlzLl9lbGVt''@;'; put 'put ''ZW50LHRoaXMuX3N0YXJ0U3R5bGVzLHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0ZTwyJiYoTXAodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJihNcCh0aGlzLl9lbGVt''@;'; put 'put ''ZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0YXRlPDMmJihvRS5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFN0eWxlcyYm''@;'; put 'put ''KEY3KHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJihGNyh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLE1wKHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0''@;'; put 'put ''eWxlcyksdGhpcy5fc3RhdGU9Myl9fWZ1bmN0aW9uIHFHKGMpe2xldCBsPW51bGw7cmV0dXJuIGMuZm9yRWFjaCgoYSxkKT0+eyhmdW5jdGlvbiBSJGUoYyl7cmV0dXJuImRpc3BsYXkiPT09Y3x8InBvc2l0aW9uIj09PWN9KShkKSYmKGw9bHx8bmV3IE1hcCxsLnNldChkLGEpKX0pLGx9Y2xh''@;'; put 'put ''c3MgVWhle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuZWxlbWVudD1sLHRoaXMua2V5ZnJhbWVzPWEsdGhpcy5vcHRpb25zPWQsdGhpcy5fc3BlY2lhbFN0eWxlcz1oLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9p''@;'; put 'put ''bml0aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy50aW1lPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLmN1''@;'; put 'put ''cnJlbnRTbmFwc2hvdD1uZXcgTWFwLHRoaXMuX2R1cmF0aW9uPWQuZHVyYXRpb24sdGhpcy5fZGVsYXk9ZC5kZWxheXx8MCx0aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRv''@;'; put 'put ''bmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9X2J1aWxkUGxheWVyKCl7aWYodGhpcy5faW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX2luaXRpYWxpemVkPSEw''@;'; put 'put ''O2NvbnN0IGw9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVsZW1lbnQsbCx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9bC5sZW5ndGg/bFtsLmxlbmd0aC0xXTpuZXcgTWFwO2NvbnN0IGE9KCk9PnRoaXMuX29u''@;'; put 'put ''RmluaXNoKCk7dGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIixhKSx0aGlzLm9uRGVzdHJveSgoKT0+e3RoaXMuZG9tUGxheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZpbmlzaCIsYSl9KX1fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhp''@;'; put 'put ''cy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChsKXtjb25zdCBhPVtdO3JldHVybiBsLmZvckVhY2goZD0+e2EucHVzaChPYmplY3QuZnJvbUVudHJpZXMoZCkpfSksYX1fdHJpZ2dlcldlYkFuaW1hdGlvbihs''@;'; put 'put ''LGEsZCl7cmV0dXJuIGwuYW5pbWF0ZSh0aGlzLl9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QoYSksZCl9b25TdGFydChsKXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaChsKSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2gobCl9b25Eb25lKGwpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1''@;'; put 'put ''c2gobCksdGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfXBsYXkoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZu''@;'; put 'put ''cz1bXSx0aGlzLl9zdGFydGVkPSEwLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuc3RhcnQoKSksdGhpcy5kb21QbGF5ZXIucGxheSgpfXBhdXNlKCl7dGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIucGF1c2UoKX1maW5pc2goKXt0aGlzLmluaXQoKSx0aGlzLl9z''@;'; put 'put ''cGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmZpbmlzaCgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5kb21QbGF5ZXIuZmluaXNoKCl9cmVzZXQoKXt0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0''@;'; put 'put ''YXJ0ZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfV9yZXNldERvbVBsYXllclN0YXRlKCl7dGhpcy5kb21QbGF5ZXImJnRoaXMuZG9tUGxheWVyLmNhbmNlbCgpfXJlc3RhcnQoKXt0''@;'; put 'put ''aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5fc3BlY2lhbFN0''@;'; put 'put ''eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXNldFBvc2l0aW9uKGwpe3ZvaWQgMD09PXRoaXMuZG9tUGxheWVyJiZ0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5jdXJy''@;'; put 'put ''ZW50VGltZT1sKnRoaXMudGltZX1nZXRQb3NpdGlvbigpe3JldHVybisodGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU/PzApL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtjb25zdCBsPW5ldyBNYXA7''@;'; put 'put ''dGhpcy5oYXNTdGFydGVkKCkmJnRoaXMuX2ZpbmFsS2V5ZnJhbWUuZm9yRWFjaCgoZCxoKT0+eyJvZmZzZXQiIT09aCYmbC5zZXQoaCx0aGlzLl9maW5pc2hlZD9kOlZHKHRoaXMuZWxlbWVudCxoKSl9KSx0aGlzLmN1cnJlbnRTbmFwc2hvdD1sfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBh''@;'; put 'put ''PSJzdGFydCI9PT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIFpoZXt2YWxpZGF0ZVN0eWxlUHJvcGVydHkobCl7cmV0dXJuITB9dmFsaWRhdGVBbmltYXRhYmxlU3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH1t''@;'; put 'put ''YXRjaGVzRWxlbWVudChsLGEpe3JldHVybiExfWNvbnRhaW5zRWxlbWVudChsLGEpe3JldHVybiB3aGUobCxhKX1nZXRQYXJlbnRFbGVtZW50KGwpe3JldHVybiBERyhsKX1xdWVyeShsLGEsZCl7cmV0dXJuIENoZShsLGEsZCl9Y29tcHV0ZVN0eWxlKGwsYSxkKXtyZXR1cm4gVkcobCxhKX1h''@;'; put 'put ''bmltYXRlKGwsYSxkLGgsZix2PVtdKXtjb25zdCBEPXtkdXJhdGlvbjpkLGRlbGF5OmgsZmlsbDowPT1oPyJib3RoIjoiZm9yd2FyZHMifTtmJiYoRC5lYXNpbmc9Zik7Y29uc3QgWj1uZXcgTWFwLHJlPXYuZmlsdGVyKEVlPT5FZSBpbnN0YW5jZW9mIFVoZSk7KGZ1bmN0aW9uIFVHZShjLGwp''@;'; put 'put ''e3JldHVybiAwPT09Y3x8MD09PWx9KShkLGgpJiZyZS5mb3JFYWNoKEVlPT57RWUuY3VycmVudFNuYXBzaG90LmZvckVhY2goKEJlLHFlKT0+Wi5zZXQocWUsQmUpKX0pO2xldCBjZT1mdW5jdGlvbiBCR2UoYyl7cmV0dXJuIGMubGVuZ3RoP2NbMF1pbnN0YW5jZW9mIE1hcD9jOmMubWFwKGw9''@;'; put 'put ''Pm5ldyBNYXAoT2JqZWN0LmVudHJpZXMobCkpKTpbXX0oYSkubWFwKEVlPT5uZXcgTWFwKEVlKSk7Y2U9ZnVuY3Rpb24gWkdlKGMsbCxhKXtpZihhLnNpemUmJmwubGVuZ3RoKXtsZXQgZD1sWzBdLGg9W107aWYoYS5mb3JFYWNoKChmLHYpPT57ZC5oYXModil8fGgucHVzaCh2KSxkLnNldCh2''@;'; put 'put ''LGYpfSksaC5sZW5ndGgpZm9yKGxldCBmPTE7ZjxsLmxlbmd0aDtmKyspe2xldCB2PWxbZl07aC5mb3JFYWNoKE09PnYuc2V0KE0sVkcoYyxNKSkpfX1yZXR1cm4gbH0obCxjZSxaKTtjb25zdCBiZT1mdW5jdGlvbiBJJGUoYyxsKXtsZXQgYT1udWxsLGQ9bnVsbDtyZXR1cm4gQXJyYXkuaXNB''@;'; put 'put ''cnJheShsKSYmbC5sZW5ndGg/KGE9cUcobFswXSksbC5sZW5ndGg+MSYmKGQ9cUcobFtsLmxlbmd0aC0xXSkpKTpsIGluc3RhbmNlb2YgTWFwJiYoYT1xRyhsKSksYXx8ZD9uZXcgb0UoYyxhLGQpOm51bGx9KGwsY2UpO3JldHVybiBuZXcgVWhlKGwsY2UsRCxiZSl9fWNvbnN0IFdoZT0iQC5k''@;'; put 'put ''aXNhYmxlZCI7Y2xhc3MgWWhle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLmRlbGVnYXRlPWEsdGhpcy5lbmdpbmU9ZCx0aGlzLl9vbkRlc3Ryb3k9aCx0aGlzLlx1MDI3NXR5cGU9MH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVz''@;'; put 'put ''dHJveU5vZGUobCl7dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT8uKGwpfWRlc3Ryb3koKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhpcy5lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57cXVldWVNaWNyb3Rhc2soKCk9''@;'; put 'put ''Pnt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0pfSksdGhpcy5fb25EZXN0cm95Py4oKX1jcmVhdGVFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChsLGEpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudChsKX1j''@;'; put 'put ''cmVhdGVUZXh0KGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQobCl9YXBwZW5kQ2hpbGQobCxhKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKGwsYSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsITEpfWluc2VydEJlZm9yZShsLGEsZCxoPSEw''@;'; put 'put ''KXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZShsLGEsZCksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsaCl9cmVtb3ZlQ2hpbGQobCxhLGQpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsYSx0aGlzLmRlbGVnYXRlKX1zZWxlY3RSb290''@;'; put 'put ''RWxlbWVudChsLGEpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KGwsYSl9cGFyZW50Tm9kZShsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKGwpfW5leHRTaWJsaW5nKGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKGwpfXNldEF0dHJp''@;'; put 'put ''YnV0ZShsLGEsZCxoKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZShsLGEsZCxoKX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKGwsYSxkKX1hZGRDbGFzcyhsLGEpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3MobCxhKX1yZW1vdmVDbGFzcyhs''@;'; put 'put ''LGEpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3MobCxhKX1zZXRTdHlsZShsLGEsZCxoKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKGwsYSxkLGgpfXJlbW92ZVN0eWxlKGwsYSxkKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKGwsYSxkKX1zZXRQcm9wZXJ0eShsLGEsZCl7IkAiPT1hLmNo''@;'; put 'put ''YXJBdCgwKSYmYT09V2hlP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnMobCwhIWQpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkobCxhLGQpfXNldFZhbHVlKGwsYSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZShsLGEpfWxpc3RlbihsLGEsZCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGws''@;'; put 'put ''YSxkKX1kaXNhYmxlQW5pbWF0aW9ucyhsLGEpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKGwsYSl9fWNsYXNzIEwkZSBleHRlbmRzIFloZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGEsZCxoLGYpLHRoaXMuZmFjdG9yeT1sLHRoaXMubmFtZXNwYWNlSWQ9YX1zZXRQcm9w''@;'; put 'put ''ZXJ0eShsLGEsZCl7IkAiPT1hLmNoYXJBdCgwKT8iLiI9PWEuY2hhckF0KDEpJiZhPT1XaGU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyhsLGQ9dm9pZCAwPT09ZHx8ISFkKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsbCxhLnNsaWNlKDEpLGQpOnRoaXMuZGVsZWdhdGUu''@;'; put 'put ''c2V0UHJvcGVydHkobCxhLGQpfWxpc3RlbihsLGEsZCl7aWYoIkAiPT1hLmNoYXJBdCgwKSl7Y29uc3QgaD1mdW5jdGlvbiBPJGUoYyl7c3dpdGNoKGMpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93Ijpy''@;'; put 'put ''ZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIGN9fShsKTtsZXQgZj1hLnNsaWNlKDEpLHY9IiI7cmV0dXJuIkAiIT1mLmNoYXJBdCgwKSYmKFtmLHZdPWZ1bmN0aW9uIFAkZShjKXtjb25zdCBsPWMuaW5kZXhPZigiLiIpO3JldHVybltjLnN1YnN0cmluZygwLGwpLGMuc2xpY2UobCsxKV19''@;'; put 'put ''KGYpKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxoLGYsdixNPT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhNLl9kYXRhfHwtMSxkLE0pfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkKX19Y2xhc3MgRiRle2NvbnN0cnVjdG9y''@;'; put 'put ''KGwsYSxkKXt0aGlzLmRlbGVnYXRlPWwsdGhpcy5lbmdpbmU9YSx0aGlzLl96b25lPWQsdGhpcy5fY3VycmVudElkPTAsdGhpcy5fbWljcm90YXNrSWQ9MSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W10sdGhpcy5fcmVuZGVyZXJDYWNoZT1uZXcgTWFwLHRoaXMuX2NkUmVjdXJE''@;'; put 'put ''ZXB0aD0wLGEub25SZW1vdmFsQ29tcGxldGU9KGgsZik9Pntjb25zdCB2PWY/LnBhcmVudE5vZGUoaCk7diYmZi5yZW1vdmVDaGlsZCh2LGgpfX1jcmVhdGVSZW5kZXJlcihsLGEpe2NvbnN0IGg9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcihsLGEpO2lmKCFsfHwhYT8uZGF0YT8uYW5p''@;'; put 'put ''bWF0aW9uKXtjb25zdCBaPXRoaXMuX3JlbmRlcmVyQ2FjaGU7bGV0IHJlPVouZ2V0KGgpO3JldHVybiByZXx8KHJlPW5ldyBZaGUoIiIsaCx0aGlzLmVuZ2luZSwoKT0+Wi5kZWxldGUoaCkpLFouc2V0KGgscmUpKSxyZX1jb25zdCBmPWEuaWQsdj1hLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7''@;'; put 'put ''dGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIodixsKTtjb25zdCBNPVo9PntBcnJheS5pc0FycmF5KFopP1ouZm9yRWFjaChNKTp0aGlzLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZix2LGwsWi5uYW1lLFopfTtyZXR1cm4gYS5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKE0p''@;'; put 'put ''LG5ldyBMJGUodGhpcyx2LGgsdGhpcy5lbmdpbmUpfWJlZ2luKCl7dGhpcy5fY2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfV9zY2hlZHVsZUNvdW50VGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fbWljcm90YXNrSWQrK30p''@;'; put 'put ''fXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhsLGEsZCl7aWYobD49MCYmbDx0aGlzLl9taWNyb3Rhc2tJZClyZXR1cm4gdm9pZCB0aGlzLl96b25lLnJ1bigoKT0+YShkKSk7Y29uc3QgaD10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI7MD09aC5sZW5ndGgmJnF1ZXVlTWljcm90YXNr''@;'; put 'put ''KCgpPT57dGhpcy5fem9uZS5ydW4oKCk9PntoLmZvckVhY2goZj0+e2NvbnN0W3YsTV09Zjt2KE0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSxoLnB1c2goW2EsZF0pfWVuZCgpe3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMuX2NkUmVjdXJEZXB0aCYmdGhp''@;'; put 'put ''cy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3NjaGVkdWxlQ291bnRUYXNrKCksdGhpcy5lbmdpbmUuZmx1c2godGhpcy5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19bGV0IEgkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYUV7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCxoLGZpKGJiLHtvcHRpb25hbDohMH0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZmx1c2goKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoUkcpLHhyKExHKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgR2hlPVt7cHJvdmlkZTpMRyx1c2VGYWN0b3J5OmZ1bmN0aW9u''@;'; put 'put ''IE4kZSgpe3JldHVybiBuZXcgVGhlfX0se3Byb3ZpZGU6YUUsdXNlQ2xhc3M6SCRlfSx7cHJvdmlkZTp4OCx1c2VGYWN0b3J5OmZ1bmN0aW9uIFYkZShjLGwsYSl7cmV0dXJuIG5ldyBGJGUoYyxsLGEpfSxkZXBzOltjWixhRSxXYV19XSxYRz1be3Byb3ZpZGU6UkcsdXNlRmFjdG9yeTooKT0+''@;'; put 'put ''bmV3IFpoZX0se3Byb3ZpZGU6RmssdXNlVmFsdWU6IkJyb3dzZXJBbmltYXRpb25zIn0sLi4uR2hlXSwkaGU9W3twcm92aWRlOlJHLHVzZUNsYXNzOklHfSx7cHJvdmlkZTpGayx1c2VWYWx1ZToiTm9vcEFuaW1hdGlvbnMifSwuLi5HaGVdO2xldCBCJGU9KCgpPT57Y2xhc3MgY3tzdGF0aWMg''@;'; put 'put ''d2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6YS5kaXNhYmxlQW5pbWF0aW9ucz8kaGU6WEd9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOlhHLGltcG9ydHM6W1RvZV19KX19cmV0dXJuIGN9KSgpLGokZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW5vdC1mb3VuZCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjAsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUo''@;'; put 'put ''MCwiZGl2IiwwKSgxLCJwIiksTGUoMiwiNDA0IC0gTm90IEZvdW5kIiksaGUoKSgpKX0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxLaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31kb3dubG9hZEZpbGUoYSxkLGg9InR4dCIpe2xldCBmPW5ldyBCbG9iKFthXSx7dHlw''@;'; put 'put ''ZToidGV4dC9wbGFpbiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihmLGAke2R9LiR7aH1gKTtlbHNle2xldCB2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTt2LmhyZWY9ImRhdGE6''@;'; put 'put ''dGV4dC9wbGFpbiwiK2VuY29kZVVSSUNvbXBvbmVudChhKSx2LmRvd25sb2FkPWAke2R9LiR7aH1gLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodiksdi5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodil9fXJlYWRGaWxlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+''@;'; put 'put ''e2xldCBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPSgpPT57Zi5yZXN1bHQmJmQoSlNPTi5wYXJzZShmLnJlc3VsdC50b1N0cmluZygpKSl9LGYucmVhZEFzVGV4dChhKX0pfWNsZWFyVXBsb2FkSW5wdXQoYSl7YS50YXJnZXQudmFsdWU9IiJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7dmFyIGdnPXkoNTk0OCk7Y29uc3QgSkc9ZnVuY3Rpb24gVSRlKGMpe3JldHVybiJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgY3x8Q3koYykmJiJbb2JqZWN0IFN5bWJvbF0iPT1ieShjKX07dmFyIFokZT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxXJGU9L15cdyokLztmdW5jdGlvbiBRRyhjLGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjfHxudWxs''@;'; put 'put ''IT1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMsaD1sP2wuYXBwbHkodGhpcyxkKTpkWzBdLGY9YS5jYWNoZTtpZihmLmhhcyhoKSlyZXR1cm4gZi5nZXQoaCk7''@;'; put 'put ''dmFyIHY9Yy5hcHBseSh0aGlzLGQpO3JldHVybiBhLmNhY2hlPWYuc2V0KGgsdil8fGYsdn07cmV0dXJuIGEuY2FjaGU9bmV3KFFHLkNhY2hlfHxrVyksYX1RRy5DYWNoZT1rVztjb25zdCBLJGU9UUc7dmFyIFEkZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86''@;'; put 'put ''KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxlS2U9L1xcKFxcKT8vZyx0S2U9ZnVuY3Rpb24gWCRlKGMpe3ZhciBsPUskZShjLGZ1bmN0aW9uKGQpe3JldHVybiA1MDA9PT1hLnNpemUmJmEuY2xlYXIoKSxkfSksYT1sLmNhY2hlO3JldHVy''@;'; put 'put ''biBsfShmdW5jdGlvbihjKXt2YXIgbD1bXTtyZXR1cm4gNDY9PT1jLmNoYXJDb2RlQXQoMCkmJmwucHVzaCgiIiksYy5yZXBsYWNlKFEkZSxmdW5jdGlvbihhLGQsaCxmKXtsLnB1c2goaD9mLnJlcGxhY2UoZUtlLCIkMSIpOmR8fGEpfSksbH0pO2NvbnN0IG5LZT10S2U7dmFyIHFoZT11bT91''@;'; put 'put ''bS5wcm90b3R5cGU6dm9pZCAwLFhoZT1xaGU/cWhlLnRvU3RyaW5nOnZvaWQgMDtjb25zdCBvS2U9ZnVuY3Rpb24gSmhlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihTeShjKSlyZXR1cm4gZnVuY3Rpb24gcktlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMu''@;'; put 'put ''bGVuZ3RoLGg9QXJyYXkoZCk7KythPGQ7KWhbYV09bChjW2FdLGEsYyk7cmV0dXJuIGh9KGMsSmhlKSsiIjtpZihKRyhjKSlyZXR1cm4gWGhlP1hoZS5jYWxsKGMpOiIiO3ZhciBsPWMrIiI7cmV0dXJuIjAiPT1sJiYxL2M9PS0xLzA/Ii0wIjpsfSx1S2U9ZnVuY3Rpb24gY0tlKGMsbCl7cmV0''@;'; put 'put ''dXJuIFN5KGMpP2M6ZnVuY3Rpb24gWSRlKGMsbCl7aWYoU3koYykpcmV0dXJuITE7dmFyIGE9dHlwZW9mIGM7cmV0dXJuISgibnVtYmVyIiE9YSYmInN5bWJvbCIhPWEmJiJib29sZWFuIiE9YSYmbnVsbCE9YyYmIUpHKGMpKXx8VyRlLnRlc3QoYyl8fCFaJGUudGVzdChjKXx8bnVsbCE9bCYm''@;'; put 'put ''YyBpbiBPYmplY3QobCl9KGMsbCk/W2NdOm5LZShmdW5jdGlvbiBzS2UoYyl7cmV0dXJuIG51bGw9PWM/IiI6b0tlKGMpfShjKSl9LGZLZT1mdW5jdGlvbiBoS2UoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjfHxKRyhjKSlyZXR1cm4gYzt2YXIgbD1jKyIiO3JldHVybiIwIj09bCYmMS9jPT0t''@;'; put 'put ''MS8wPyItMCI6bH0seWM9ZnVuY3Rpb24gbUtlKGMsbCxhKXt2YXIgZD1udWxsPT1jP3ZvaWQgMDpmdW5jdGlvbiBwS2UoYyxsKXtmb3IodmFyIGE9MCxkPShsPXVLZShsLGMpKS5sZW5ndGg7bnVsbCE9YyYmYTxkOyljPWNbZktlKGxbYSsrXSldO3JldHVybiBhJiZhPT1kP2M6dm9pZCAwfShj''@;'; put 'put ''LGwpO3JldHVybiB2b2lkIDA9PT1kP2E6ZH07bGV0IGtoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucmVzcG9uc2U9bmV3IFduLHRoaXMuY2hhbmdlZFRhYmxl''@;'; put 'put ''PW5ldyBXbix0aGlzLmRldGFpbHM9bmV3IFduLHRoaXMuZGlmZnM9bmV3IFduLHRoaXMuY29sdW1ucz1uZXcgV24sdGhpcy52YWx1ZXM9bmV3IFduLHRoaXMuZmlsdGVyPW5ldyBXbix0aGlzLnF1ZXJ5PW5ldyBXbix0aGlzLnN1Ym1pdHREZXRhaWw9bmV3IFduLHRoaXMucmVtb3ZlUXVlcnk9''@;'; put 'put ''bmV3IFduLHRoaXMuc2V0U3VibWl0PW5ldyBXbix0aGlzLnNldFN1Ym1pdExpc3Q9bmV3IFdufWNhbGxTZXJ2aWNlKGEsZCxoLGYpe3ZhciB2PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IE09e307cmV0dXJuIE1bZF09W2FdLHtkYXRhOih5aWVsZCB2LnNhc1NlcnZpY2UucmVx''@;'; put 'put ''dWVzdChoLE0pKS5hZGFwdGVyUmVzcG9uc2UsbGliZHM6Zn19KSgpfXVwZGF0ZVRhYmxlKGEsZCxoLGYsdixNLEQpe3ZhciBaPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCByZT17anNkYXRhOmR9O2lmKHYpe2xldCBiZT1aLnBhcnNlRm9ybWF0cyh2KTtyZS4kanNkYXRhPXtmb3Jt''@;'; put 'put ''YXRzOmJlfX1yZXR1cm4gcmVbaF09W2FdLHlpZWxkIFouc2FzU2VydmljZS5yZXF1ZXN0KGYscmUsRCx7c3VwcHJlc3NFcnJvckFib3J0TW9kYWw6TSxzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOk19KX0pKCl9Z2V0QXBwcm92YWxzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5j''@;'; put 'put ''dGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2VuZERldGFpbHMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PU9iamVjdC5hc3NpZ24oe3N1Yjoh''@;'; put 'put ''MH0sYSk7Zi5zdWJtaXR0RGV0YWlsLm5leHQoe2RhdGE6aFtkXSx2aWV3RGF0YTp2fSl9KSgpfWdldFN1Ym1pdHRzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHN1Ym1pdHMiLG51bGwpKS5h''@;'; put 'put ''ZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdMaWJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMiLG51bGwpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXJlZnJlc2hMaWJJbmZvKGEpe3ZhciBk''@;'; put 'put ''PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9e2xpYjJyZWZyZXNoOlt7bGlicmVmOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvcmVmcmVzaGxpYmluZm8iLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdUYWJsZXMoYSl7dmFyIGQ9''@;'; put 'put ''dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9e1NBU0NvbnRyb2xUYWJsZTpbe01QTElCOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld3RhYmxlcyIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0RhdGEoYSxkKXt2YXIgaD10aGlz''@;'; put 'put ''O3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7TElCRFM6YSxGSUxURVJfUks6ZH1dfTtyZXR1cm4oeWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsZikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0RhdGFTZWFyY2goYSl7''@;'; put 'put ''dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKGgsZj0hMSx2LE0pe2xldCBaPXtTQVNDb250cm9sVGFibGU6W3tTRUFSQ0hUWVBFOmgubGVuZ3RoPjA/Zj8iTlVNIjoiQ0hBUiI6Ik5PTkUiLFNFQVJDSFZBTDpoLExJQkRTOnYsRklMVEVSX1JLOk19XX07cmV0dXJuKHlpZWxkIGQuc2Fz''@;'; put 'put ''U2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2RhdGEiLFopKS5hZGFwdGVyUmVzcG9uc2V9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Z2V0WExNYXBSdWxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBoPXtnZXR4bG1hcHNfaW46W3tYTE1BUF9JRDphfV19''@;'; put 'put ''O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXR4bG1hcHMiLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNob3dEaWZmcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNh''@;'; put 'put ''c1NlcnZpY2UucmVxdWVzdChoLHYse3VzZUNvbXB1dGVBcGk6bnVsbH0pKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXJlamVjdGluZyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVz''@;'; put 'put ''dChoLHYse3VzZUNvbXB1dGVBcGk6bnVsbH0pKS5hZGFwdGVyUmVzcG9uc2V9KSgpfWFwcHJvdmVUYWJsZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYpKS5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2V9KSgpfWdldEhpc3RvcnkoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zZXRRdWVyeVZhcmlhYmxlcyhh''@;'; put 'put ''LGQpe3RoaXMuY29sdW1ucy5uZXh0KHtkYXRhOntjb2xzOmR9LGxpYmRzOmF9KX1nZXRDaGFuZ2VJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBmPXtTQVNDb250cm9sVGFibGU6W3tUQUJMRTphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVz''@;'; put 'put ''dCgicHVibGljL2dldGNoYW5nZWluZm8iLGYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfWdldFF1ZXJ5VmFsdWVzKGEsZCxoLGYsdil7dmFyIE09dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IEQ9e2l3YW50Olt7bGliZHM6ZCxjb2w6YSwuLi5mJiZ7U1RBUlRST1c6Zn0sLi4udiYme1JP''@;'; put 'put ''V1M6dn19XX07cmV0dXJuIGgubGVuZ3RoPjAmJihELkZJTFRFUlFVRVJZPWgpLCh5aWVsZCBNLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGNvbHZhbHMiLEQpLmNhdGNoKFo9Pnt0aHJvdyBafSkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2F2ZVF1ZXJ5KGEsZCl7dmFyIGg9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGY9e2l3YW50Olt7ZmlsdGVyX3RhYmxlOmF9XSxmaWx0ZXJxdWVyeTpkfTtjb25zdCB2PXlpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmFsaWRhdGVmaWx0ZXIiLGYpO3JldHVybiBoLmZpbHRlci5uZXh0KHYpLHYuYWRhcHRlclJl''@;'; put 'put ''c3BvbnNlfSkoKX1vcGVuVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9e2l3YW50Olt7dGFibGVfaWQ6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoImF1ZGl0b3JzL2dldHN0YWdldGFibGUiLGgpKS5hZGFwdGVyUmVzcG9uc2V9''@;'; put 'put ''KSgpfWNoZWNrT3BlcmF0b3IoYSxkLGgpe2xldCBmO3N3aXRjaChhKXtjYXNlIkJFVFdFRU4iOmQgaW5zdGFuY2VvZiBBcnJheSYmKCIiIT09ZFswXSYmIiIhPT1kWzFdP2Y9ZFswXSsiIEFORCAiK2RbMV06IiIhPT1kWzBdJiYiIj09PWRbMV0/KGRbMV09Ii4iLGY9ZFswXSsiIEFORCAiK2Rb''@;'; put 'put ''MV0pOiIiPT09ZFswXSYmIiIhPT1kWzFdPyhkWzBdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKTooZFswXT0iLiIsZFsxXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSkpO2JyZWFrO2Nhc2UiSU4iOmNhc2UiTk9UIElOIjpsZXQgTT1bXTtpZih0eXBlb2YgZDwidSIpZm9yKGxldCBEPTA7RDxk''@;'; put 'put ''Lmxlbmd0aDtEKyspITA9PT1kW0RdLmNoZWNrZWQmJigiY2hhciI9PT1oPygic3RyaW5nIj09dHlwZW9mIGRbRF0udmFsJiYoZFtEXS52YWw9ZFtEXS52YWwucmVwbGFjZSgiJyIsIicnIikpLE0ucHVzaCgiJyIrZFtEXS52YWwrIiciKSk6KG51bGw9PT1kW0RdLnZhbCYmKGRbRF0udmFsPSIu''@;'; put 'put ''IiksTS5wdXNoKGRbRF0udmFsKSkpO2Q9IigiK00rIikiO2JyZWFrO2Nhc2UiQ09OVEFJTlMiOmE9Ij8iO2JyZWFrO2Nhc2UiTk9UIEVRVUFMIjphPSJuZSJ9cmV0dXJuIm51bSI9PT1oJiZudWxsPT09ZCYmKGQ9Ii4iKSwiUGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1kJiYoZD0iIiksLTEhPT1b''@;'; put 'put ''Ij0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YoYSkmJiJudW0iPT09aCYmIiI9PT1kJiYoZD0iLiIpLCJCRVRXRUVOIj09PWE/e3ZhbHVlOmYsb3BlcmF0b3I6YX06e3ZhbHVlOmQsb3BlcmF0b3I6YX19d2hlcmVDbGF1c2VDcmVhdG9yKGEsZCxoKXtsZXQgRCxjZSxmPSIiLFo9''@;'; put 'put ''IiIscmU9W107Zm9yKGxldCBFZT0wO0VlPGEucXVlcnlPYmoubGVuZ3RoO0VlKyspe2xldCBCZT0iIixxZT1hLnF1ZXJ5T2JqW0VlXTtmb3IobGV0IHJ0PTA7cnQ8cWUuZWxlbWVudHMubGVuZ3RoO3J0Kyspe2xldCBkdCxwdD1xZS5lbGVtZW50c1tydF07RD1ydDxxZS5lbGVtZW50cy5sZW5n''@;'; put 'put ''dGgtMT9xZS5jbGF1c2VMb2dpYzoiIjtmb3IobGV0IENyPTA7Q3I8cHQudmFsdWVzLmxlbmd0aDtDcisrKXtpZigic3RyaW5nIj09dHlwZW9mIHB0LnZhbHVlJiYibnVtYmVyIj09dHlwZW9mIHB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkKXB0LnZhbHVlPT09SlNPTi5zdHJpbmdpZnkocHQudmFs''@;'; put 'put ''dWVzW0NyXS5mb3JtYXR0ZWQpJiYoZHQ9cHQudmFsdWVzW0NyXS51bmZvcm1hdHRlZCk7ZWxzZXtsZXQgbXI9Im51bWJlciIhPXR5cGVvZiBwdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZCYmbnVsbCE9PXB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkP3B0LnZhbHVlc1tDcl0uZm9ybWF0dGVkLnRyaW0o''@;'; put 'put ''KTpwdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZDtwdC52YWx1ZT09PW1yJiYoZHQ9cHQudmFsdWVzW0NyXS51bmZvcm1hdHRlZCl9IlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09cHQudmFsdWUmJi0xIT09WyI9IiwiPiIsIjwiLCI8PSIsIj49IiwibmUiXS5pbmRleE9mKHB0Lm9wZXJhdG9yKSYmKGR0''@;'; put 'put ''PSIiKSwoIkNPTlRBSU5TIj09PXB0Lm9wZXJhdG9yfHwiTElLRSI9PT1wdC5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PXB0Lm9wZXJhdG9yKSYmKGR0PXB0LnZhbHVlKX1pZihkdHx8KGR0PXB0LnZhbHVlKSxwdC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5JiYiQkVUV0VFTiI9PT1wdC5vcGVy''@;'; put 'put ''YXRvcil7ZHQ9W10sZHQucHVzaChwdC52YWx1ZVswXSksZHQucHVzaChwdC52YWx1ZVsxXSk7Zm9yKGxldCBDcj0wO0NyPHB0LnZhbHVlcy5sZW5ndGg7Q3IrKylkdFswXT09PXB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkJiYoZHRbMF09cHQudmFsdWVzW0NyXS51bmZvcm1hdHRlZCksZHRbMV09''@;'; put 'put ''PT1wdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZCYmKGR0WzFdPXB0LnZhbHVlc1tDcl0udW5mb3JtYXR0ZWQpfWlmKHB0LnZhbHVlIGluc3RhbmNlb2YgQXJyYXkmJigiSU4iPT09cHQub3BlcmF0b3J8fCJOT1QgSU4iPT09cHQub3BlcmF0b3IpKXtkdD1bXSxkdD1wdC52YWx1ZTtmb3IobGV0IENy''@;'; put 'put ''PTA7Q3I8cHQudmFsdWVzLmxlbmd0aDtDcisrKWR0W0NyXSYmZHRbQ3JdLnZhbD09PXB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkJiYoZHRbQ3JdLnZhbD1wdC52YWx1ZXNbQ3JdLnVuZm9ybWF0dGVkKX1sZXQgSnQ9cHQudHlwZTtjb25zdCB2bj1wdC52YWx1ZVZhcmlhYmxlO2xldCBNbixDbj1u''@;'; put 'put ''dWxsPT09cHQudmFyaWFibGU/IiI6cHQudmFyaWFibGUsdG49bnVsbD09PXB0Lm9wZXJhdG9yPyIiOnB0Lm9wZXJhdG9yO01uPXRoaXMuY2hlY2tPcGVyYXRvcih0bixkdCxKdCkudmFsdWUsInN0cmluZyI9PXR5cGVvZiBNbiYmIigiIT09TW5bMF0mJihNbj1Nbi5yZXBsYWNlKCInIiwiJyci''@;'; put 'put ''KSksdG49dGhpcy5jaGVja09wZXJhdG9yKHRuLE1uLEp0KS5vcGVyYXRvciwiY2hhciI9PT1KdCYmIklOIiE9PXRuJiYiTk9UIElOIiE9PXRuPyh0eXBlb2YgTW4+InUiJiYoTW49IiIpLE1uPXZuPyIgIitNbisiICI6IiAnIitNbisiJyAiLEJlPUJlKyIgIitDbisiICIrdG4rTW4rRCk6KCJu''@;'; put 'put ''dW0iPT09SnQmJnR5cGVvZiBNbj4idSImJihNbj0iLiIpLE1uPXR5cGVvZiBNbj4idSI/IiI6IiAiK01uKyIgIixCZT1CZSsiICIrQ24rIiAiK3RuK01uK0QpfXJlLnB1c2goQmUpfVo9IiI7Zm9yKGxldCBFZT0wO0VlPHJlLmxlbmd0aDtFZSsrKWNlPUVlPHJlLmxlbmd0aC0xP2Q6IiIsWj0x''@;'; put 'put ''PT09cmUubGVuZ3RoP3JlWzBdOlorIiAoIityZVtFZV0rIikgIitjZTtyZXR1cm4gZj1aLnN1YnN0cigxKS5zbGljZSgwLC0xKSxaPSJXSEVSRSIrWisiOyIsdGhpcy5xdWVyeS5uZXh0KHt3aGVyZUNsYXVzZTpaLHN0cmluZzpmLG9iajphLGxpYmRzOmh9KSx7d2hlcmVDbGF1c2U6WixzdHJp''@;'; put 'put ''bmc6Zn19Y3JlYXRlRmlsdGVyUXVlcnlUYWJsZShhKXtjb25zdCBkPVtdO3JldHVybiBhLmZpbHRlckdyb3Vwcy5mb3JFYWNoKChoLGYpPT57aC5maWx0ZXJDbGF1c2VzLmZvckVhY2godj0+e2xldCBNPSIiOyJCRVRXRUVOIj09PXYub3BlcmF0b3I/TT1gJHt2LnZhbHVlWzBdfSBBTkQgJHt2''@;'; put 'put ''LnZhbHVlWzFdfWA6IklOIj09PXYub3BlcmF0b3J8fCJOT1QgSU4iPT09di5vcGVyYXRvcj8odi52YWx1ZS5mb3JFYWNoKEQ9PntpZihELmNoZWNrZWQpe2NvbnN0IFo9RC52YWw7InN0cmluZyIhPXR5cGVvZiBafHwoMCxnZy5pc1NwZWNpYWxNaXNzaW5nKShaKSYmImNoYXIiIT09di50eXBl''@;'; put 'put ''P00ubGVuZ3RoPjA/TSs9YCwke1p9YDpNPWAoJHtafWA6TS5sZW5ndGg+MD9NKz1gLCcke1oucmVwbGFjZSgvJy9nLCInJyIpfSdgOk09YCgnJHtaLnJlcGxhY2UoLycvZywiJyciKX0nYH19KSxNLmxlbmd0aD4wJiYoTSs9IikiKSk6IiI9PT12LnZhbHVlP009ImNoYXIiPT09di50eXBlPyIn''@;'; put 'put ''ICciOiIuIjoiY2hhciI9PT12LnR5cGUmJiF2LnZhbHVlVmFyaWFibGUmJihNPWAnJHt2LnZhbHVlLnJlcGxhY2UoLycvZywiJyciKX0nYCksZC5wdXNoKHtHUk9VUF9MT0dJQzphLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6aC5jbGF1c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6ZixW''@;'; put 'put ''QVJJQUJMRV9OTTp2LnZhcmlhYmxlLE9QRVJBVE9SX05NOnYub3BlcmF0b3IsUkFXX1ZBTFVFOk18fHYudmFsdWV9KX0pfSksZH1pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKGEsZCl7Y29uc3QgaD17cXVlcnlPYmo6W10sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp5YyhLbixhKS5m''@;'; put 'put ''aWx0ZXIucXVlcnlbMF0uR1JPVVBfTE9HSUN9O3ljKEtuLGEpLmZpbHRlci5jbGF1c2VzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaCkseWMoS24sYSkuZmlsdGVyLmdyb3VwTG9naWM9eWMoS24sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDO2xldCBmPSIiLHY9e2VsZW1l''@;'; put 'put ''bnRzOltdfSxNPTA7eWMoS24sYSkuZmlsdGVyLnF1ZXJ5LmZvckVhY2goRD0+e2NvbnN0IFo9e307Zm9yKGxldCByZT0wO3JlPGQubGVuZ3RoO3JlKyspaWYoZFtyZV0uTkFNRT09PUQuVkFSSUFCTEVfTk0pe2lmKGY9RC5TVUJHUk9VUF9MT0dJQyxaLmRkdHlwZT1kW3JlXS5ERFRZUEUsWi50''@;'; put 'put ''eXBlPWRbcmVdLlRZUEUsWi5vcGVyYXRvcnM9Im51bSI9PT1kW3JlXS5UWVBFP0tuLm9wZXJhdG9ycy5udW1PcGVyYXRvcnM6S24ub3BlcmF0b3JzLmNoYXJPcGVyYXRvcnMsWi5sb2dpYz1udWxsLFoub3BlcmF0b3I9RC5PUEVSQVRPUl9OTSxaLnZhcmlhYmxlPUQuVkFSSUFCTEVfTk0sImNo''@;'; put 'put ''YXIiPT09ZFtyZV0uVFlQRSlpZigiSU4iPT09RC5PUEVSQVRPUl9OTXx8Ik5PVCBJTiI9PT1ELk9QRVJBVE9SX05NKXtjb25zdCBjZT1bXSxFZT1ELlJBV19WQUxVRS5zbGljZSgxLC0xKS5zcGxpdCgiJywnIik7MT09PUVlLmxlbmd0aD9jZS5wdXNoKHtjaGVja2VkOiEwLHZhbDpFZVswXS5z''@;'; put 'put ''bGljZSgxLC0xKS5yZXBsYWNlKC8nJy9nLCInIil9KTpFZS5mb3JFYWNoKChCZSxxZSk9PntjZS5wdXNoKDA9PT1xZT97Y2hlY2tlZDohMCx2YWw6QmUuc2xpY2UoMSkucmVwbGFjZSgvJycvZywiJyIpfTpxZT09PUVlLmxlbmd0aC0xP3tjaGVja2VkOiEwLHZhbDpCZS5zbGljZSgwLC0xKS5y''@;'; put 'put ''ZXBsYWNlKC8nJy9nLCInIil9OntjaGVja2VkOiEwLHZhbDpCZS5yZXBsYWNlKC8nJy9nLCInIil9KX0pLFoudmFsdWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShjZSl9ZWxzZSBaLnZhbHVlPUQuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKTtlbHNlIGlm''@;'; put 'put ''KCJJTiI9PT1ELk9QRVJBVE9SX05NfHwiTk9UIElOIj09PUQuT1BFUkFUT1JfTk0pe2NvbnN0IGNlPVtdO0QuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCIsIikuZm9yRWFjaCgoQmUscWUpPT57Y2UucHVzaCh7Y2hlY2tlZDohMCx2YWw6QmV9KX0pLFoudmFsdWU9dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLmRlZXBDbG9uZShjZSl9ZWxzZSBpZigiQkVUV0VFTiI9PT1ELk9QRVJBVE9SX05NKXtjb25zdCBjZT1ELlJBV19WQUxVRS5zcGxpdCgiIEFORCAiKTtaLnZhbHVlPWNlfWVsc2UgWi52YWx1ZT1ELlJBV19WQUxVRTtaLnZhbHVlcz1bXSxNPT09RC5TVUJHUk9VUF9JRHx8KHljKEtu''@;'; put 'put ''LGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh2KSkseWMoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbTV0uY2xhdXNlTG9naWM9Zix5YyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5pbnZhbGlkQ2xhdXNl''@;'; put 'put ''PSExLE0rKyx2LmVsZW1lbnRzPVtdKSx2LmVsZW1lbnRzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShaKSk7YnJlYWt9fSksdi5lbGVtZW50cy5sZW5ndGg+MCYmKHljKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBD''@;'; put 'put ''bG9uZSh2KSkseWMoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbTV0uY2xhdXNlTG9naWM9Zix5YyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5pbnZhbGlkQ2xhdXNlPSExKSx5YyhLbixhKS5maWx0ZXIucXVlcnk9W119cmVtb3ZlQ2xhdXNlKCl7dmFyIGE9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIGEucmVtb3ZlUXVlcnkubmV4dCghMCksITB9KSgpfXNwZWNDb252ZXJzaW9uKGEpe2xldCBkPXt9LGg9W107aWYoaD1hLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5OQU1FLnRvVXBwZXJDYXNlKCl9KSxhIGluc3RhbmNlb2YgQXJyYXkpZm9y''@;'; put 'put ''KGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspZFtoW2ZdXT0xPT09YVtmXS5UWVBFP3tjb2xUeXBlOiJudW0iLGNvbExlbmd0aDphW2ZdLkxFTkdUSH06e2NvbFR5cGU6InN0cmluZyIsY29sTGVuZ3RoOmFbZl0uTEVOR1RIfTtyZXR1cm4gZH1zZXRTdWJtaXRSZWFkeSgpe3RoaXMuc2V0U3VibWl0''@;'; put 'put ''Lm5leHQoITApfXBhcnNlRm9ybWF0cyhhKXtjb25zdCBkPXt9LGg9YS52YXJzO2ZvcihsZXQgZiBvZiBPYmplY3Qua2V5cyhoKSl7Y29uc3Qgdj1oW2ZdLnR5cGUsTT1oW2ZdLmxlbmd0aDsibnVtIj09PXY/ZFtmXT0iYmVzdC4iOiJjaGFyIj09PXYmJihkW2ZdPWAkY2hhciR7TX0uYCl9cmV0''@;'; put 'put ''dXJuIGR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoQnMpLHhyKFN1KSx4cihTZCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHZLZShj''@;'; put 'put ''LGwpezEmYyYmKHNpKDApLGRlKDEsInNwYW4iLDIxKSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsInAiKSxMZSg0LCJEZXBsb3lpbmcuLi4iKSxoZSgpLGxpKCkpfWZ1bmN0aW9uIGJLZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiB5S2UoYyxsKXsxJmMm''@;'; put 'put ''Jkd0KDAsImNsci1pY29uIiwzMyl9ZnVuY3Rpb24gX0tlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMCksZ3QoMSxiS2UsMSwwLCJjbHItaWNvbiIsMzEpKDIseUtlLDEsMCwiY2xyLWljb24iLDI3KSxkZSgzLCJwIiksTGUoNCwiRGVwbG95IFNBUyBKb2JzIiksaGUoKSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoMyk7ZmUoKSxNZSgibmdJZiIsITA9PT1hLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLGZlKCksTWUoIm5nSWYiLCEhYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKX19ZnVuY3Rpb24gd0tlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIs''@;'; put 'put ''MzIpfWZ1bmN0aW9uIENLZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMzKX1mdW5jdGlvbiBTS2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMwKSxndCgxLHdLZSwxLDAsImNsci1pY29uIiwzMSkoMixDS2UsMSwwLCJjbHItaWNvbiIsMjcpLGRlKDMsInAiKSxMZSg0LCJDcmVhdGUg''@;'; put 'put ''ZGF0YWJhc2UiKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLGZlKCksTWUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24gTUtlKGMsbCl7MSZjJiZHdCgw''@;'; put 'put ''LCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIHhLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsInAiLDIyKSxMZSgyLCJEb25lIiksaGUoKSxHdCgzLCJociIsMjMpLGd0KDQsX0tlLDUsMiwiZGl2IiwyNCkoNSxTS2UsNSwyLCJkaXYiLDI0KSxHdCg2LCJociIsMjMpLGRl''@;'; put 'put ''KDcsImRpdiIsMjUpKDgsImJ1dHRvbiIsMjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxndCg5LE1LZSwxLDAsImNsci1pY29uIiwyNyksTGUoMTAsIiBMQVVOQ0ggIiksaGUoKSxkZSgxMSwiYnV0dG9uIiwyOCksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGgubWFrZURhdGFSZXNwb25zZSwiY3JlYXRlLWRhdGFiYXNlLWxvZyIsInR4dCIpKX0pLExlKDEyLCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSxHdCgxMywiaHIiLDIzKSxkZSgx''@;'; put 'put ''NCwiZGl2IiwyNSkoMTUsImJ1dHRvbiIsMjkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmF1dG9kZXBsb3lpbmc9ITEsQ3QoaC5hdXRvZGVwbG95RG9uZT0hMSl9KSxMZSgxNiwiIENsb3NlICIpLGhlKCksZGUoMTcsImJ1dHRvbiIsMjkpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub3BlblNhc1JlcXVlc3RzTW9kYWwoKSl9KSxMZSgxOCwiIFNBUyBSZXF1ZXN0cyAiKSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNCksTWUoIm5nSWYiLG51bGwhPT1hLmF1dG9EZXBsb3lTdGF0''@;'; put 'put ''dXMuZGVwbG95U2VydmljZVBhY2spLGZlKCksTWUoIm5nSWYiLG51bGwhPT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLGZlKDQpLE1lKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFja3x8ITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFr''@;'; put 'put ''ZURhdGEpfX1mdW5jdGlvbiBFS2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE5KSgxLCJkaXYiLDIwKSxndCgyLHZLZSw1LDAsIm5nLWNvbnRhaW5lciIsMTIpKDMseEtlLDE5LDMsIm5nLWNvbnRhaW5lciIsMTIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYi''@;'; put 'put ''LCFhLmF1dG9kZXBsb3lEb25lKSxmZSgpLE1lKCJuZ0lmIixhLmF1dG9kZXBsb3lEb25lKX19ZnVuY3Rpb24gVEtlKGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwzNiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5pZCksZmUoKSxEcigiICIs''@;'; put 'put ''YS5uYW1lLCIgIil9fWZ1bmN0aW9uIEFLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNlbGVjdCIsMzQpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuc2VsZWN0ZWRBZG1pbkdyb3VwLGgpfHwoZi5zZWxlY3Rl''@;'; put 'put ''ZEFkbWluR3JvdXA9aCksQ3QoaCl9KSxndCgxLFRLZSwyLDIsIm9wdGlvbiIsMzUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7cGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBzKX19ZnVuY3Rpb24ga0tlKGMsbCl7MSZj''@;'; put 'put ''JiZHdCgwLCJjbHItc3Bpbm5lciIsMzcpfWZ1bmN0aW9uIERLZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEuaWQpLGZlKCksRHIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBJS2UoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJzZWxlY3QiLDM0KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25Db21wdXRlQ29udGV4dENoYW5nZShoKSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3Qg''@;'; put 'put ''Zj1SZSgpO3JldHVybiBtaShmLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQsaCl8fChmLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQ9aCksQ3QoaCl9KSxndCgxLERLZSwyLDIsIm9wdGlvbiIsMzUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7cGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRDb21wdXRl''@;'; put 'put ''Q29udGV4dCksZmUoKSxNZSgibmdGb3JPZiIsYS5jb21wdXRlQ29udGV4dHMpfX1mdW5jdGlvbiBSS2UoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzNyl9ZnVuY3Rpb24gTEtlKGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwibGFiZWwiLDIpLExlKDIsIlJ1bm5pbmcgYXMgdXNlcjoi''@;'; put 'put ''KSxoZSgpLGRlKDMsImRpdiIsMykoNCwiZGl2Iiw0KSg1LCJwIiw1KSxMZSg2KSxoZSgpKCkoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSg2KSx3cihhLnJ1bm5pbmdBc1VzZXIpfX1sZXQgT0tlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlPWEsdGhpcy5kZXBsb3lTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5zYXNWaXlhU2VydmljZT1mLHRoaXMubG9nZ2VyU2VydmljZT12LHRoaXMuaGVscGVyU2VydmljZT1NLHRoaXMuc2FzSnNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuYXBwTG9jPSIiLHRo''@;'; put 'put ''aXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgS3IsdGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0PSIiLHRoaXMubWFrZURhdGFSZXNwb25zZT0iIix0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5hdXRvZGVwbG95aW5nPSEx''@;'; put 'put ''LHRoaXMuYXV0b2RlcGxveURvbmU9ITEsdGhpcy5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZT0hMCx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmFk''@;'; put 'put ''bWluR3JvdXBzTG9hZGluZz0hMSx0aGlzLmN1cnJlbnRVc2VySW5mb0xvYWRpbmc9ITEsdGhpcy5jb21wdXRlQ29udGV4dHNMb2FkaW5nPSExLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jdXJyZW50VXNlckluZm89bnVsbCx0aGlzLmNvbXB1dGVDb250ZXh0cz1bXSx0aGlzLmF1dG9EZXBs''@;'; put 'put ''b3lTdGF0dXM9e2RlcGxveVNlcnZpY2VQYWNrOm51bGwscnVuTWFrZURhdGE6bnVsbH19bmdPbkluaXQoKXt0aGlzLmxvYWREYXRhKCl9bG9hZERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXt5aWVsZCBhLmdldEFkbWluR3JvdXBzKCkseWllbGQgYS5nZXRDb21wdXRl''@;'; put 'put ''Q29udGV4dHMoKSx5aWVsZCBhLmdldEN1cnJlbnRVc2VyKCksc2V0VGltZW91dCgoKT0+e2Euc2VsZWN0ZWRDb21wdXRlQ29udGV4dCYmYS5vbkNvbXB1dGVDb250ZXh0Q2hhbmdlKGEuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCl9LDUwMCl9KSgpfWdldENvbXB1dGVDb250ZXh0cygpe3ZhciBh''@;'; put 'put ''PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2EuY29tcHV0ZUNvbnRleHRzTG9hZGluZz0hMCxhLnNhc1ZpeWFTZXJ2aWNlLmdldENvbXB1dGVDb250ZXh0cygpLnN1YnNjcmliZShmPT57YS5jb21wdXRlQ29udGV4dHNMb2FkaW5nPSExO2Nv''@;'; put 'put ''bnN0IHY9Zi5pdGVtcy5maW5kKE09PiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiPT09TS5uYW1lKTt2JiYoYS5zZWxlY3RlZENvbXB1dGVDb250ZXh0PXYuaWQpLGEuY29tcHV0ZUNvbnRleHRzPWYuaXRlbXMsZCgpfSxmPT57aChmKX0pfSl9KSgpfWdldEN1cnJlbnRVc2Vy''@;'; put 'put ''KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57YS5jdXJyZW50VXNlckluZm9Mb2FkaW5nPSEwLGEuc2FzVml5YVNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS5zdWJzY3JpYmUoZj0+e2EuY3VycmVudFVzZXJJbmZvTG9hZGluZz0h''@;'; put 'put ''MSxhLmN1cnJlbnRVc2VySW5mbz1mLGEuZGNQYXRoPWAvZXhwb3J0L3ZpeWEvaG9tZXMvJHtmLmlkfWAsZCgpfSxmPT57Y29uc29sZS5lcnJvcigiRXJyb3Igd2hpbGUgZ2V0dGluZyBjdXJyZW50IHVzZXIiLGYpLGgoZil9KX0pfSkoKX1nZXRBZG1pbkdyb3Vwcygpe3ZhciBhPXRoaXM7cmV0''@;'; put 'put ''dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2EuYWRtaW5Hcm91cHNMb2FkaW5nPSEwLGEuc2FzVml5YVNlcnZpY2UuZ2V0QWRtaW5Hcm91cHMoKS5zdWJzY3JpYmUoZj0+e2EuYWRtaW5Hcm91cHNMb2FkaW5nPSExLGEuYWRtaW5Hcm91cHM9Zi5pdGVtcy5t''@;'; put 'put ''YXAodj0+KHtpZDp2LmlkLG5hbWU6di5uYW1lfSkpLGQoKX0pfSl9KSgpfW9uQ29tcHV0ZUNvbnRleHRDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5zYXNWaXlhU2VydmljZS5nZXRDb21wdXRlQ29udGV4dEJ5SWQoYSkuc3Vic2NyaWJlKGg9PntkLnJ1bm5p''@;'; put 'put ''bmdBc1VzZXI9aC5hdHRyaWJ1dGVzJiZoLmF0dHJpYnV0ZXMucnVuU2VydmVyQXM/aC5hdHRyaWJ1dGVzLnJ1blNlcnZlckFzOmQuY3VycmVudFVzZXJJbmZvPy5pZHx8InVua25vd24ifSl9KSgpfWdldENvbXB1dGVDb250ZXh0TmFtZShhKXtyZXR1cm4gdGhpcy5jb21wdXRlQ29udGV4dHMu''@;'; put 'put ''ZmluZChkPT5kLmlkPT09YSk/Lm5hbWV8fHZvaWQgMH1leGVjdXRlSnNvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGlu''@;'; put 'put ''Z3M/LmFwcExvYyx2b2lkIDAsdm9pZCAwLCEwKSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITAsYS5pc0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVw''@;'; put 'put ''bGFjZSgvXFwvZ20sIiIpOmQubWVzc2FnZSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITEsYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aD9oOmR9YCksYS5hdXRvZGVwbG95aW5nPSExLHZvaWQo''@;'; put 'put ''YS5hdXRvZGVwbG95RG9uZT0hMSl9YS5pc1N1Ym1pdHRpbmdKc29uPSExfSkoKX1ydW5BdXRvRGVwbG95KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKGQ9ITEpe2EuYXV0b2RlcGxveWluZz0hMCxkJiZhLmV4ZWN1dGVKc29uKCksYS5yZWNyZWF0ZURhdGFiYXNlP2EuY3JlYXRl''@;'; put 'put ''RGF0YWJhc2UoKTphLmF1dG9kZXBsb3lEb25lPSEwfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNyZWF0ZURhdGFiYXNlKCl7bGV0IGE9e2Zyb21qczpbe0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLERDUEFUSDp0aGlzLmRjUGF0aH1dfSxkPXRoaXMuc2FzSnNDb25maWcuY29udGV4''@;'; put 'put ''dE5hbWU7aWYodGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0Lmxlbmd0aCYmdGhpcy5jb21wdXRlQ29udGV4dHMubGVuZ3RoKXtjb25zdCBmPXRoaXMuZ2V0Q29tcHV0ZUNvbnRleHROYW1lKHRoaXMuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCk7ZiYmKGQ9Zil9dGhpcy5zYXNKcy5yZXF1ZXN0''@;'; put 'put ''KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIsYSx7dXNlQ29tcHV0ZUFwaTpudWxsLGNvbnRleHROYW1lOmQsZGVidWc6ITB9LCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihmPT57dGhpcy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7dGhpcy5tYWtlRGF0''@;'; put 'put ''YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfXRoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hIShmLnJlc3VsdCYmZi5yZXN1bHQubGVuZ3RoPjApLHR5cGVvZiBmLnNhc2pzQWJvcnQ8InUiJiZ0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZS5zaG93QWJvcnRNb2RhbCgibWFrZWRhdGEiLGYuc2FzanNBYm9ydFswXS5NU0cse1NZU1dBUk5JTkdURVhUOmYuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOmYuU1lTRVJST1JURVhULE1BQzpmLnNhc2pzQWJvcnRbMF0uTUFDfSksdGhpcy5oZWxwZXJTZXJ2aWNlLmlzU3RyZWFtaW5n''@;'; put 'put ''Vml5YSgpJiZ0aGlzLnVwZGF0ZUluZGV4SHRtbENvbXB1dGVDb250ZXh0KCl9KS5jYXRjaChmPT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIm1ha2VkYXRhIixKU09OLnN0cmluZ2lmeShmKSksdGhpcy5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhPSExLHRoaXMuYXV0''@;'; put 'put ''b2RlcGxveURvbmU9ITA7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn19KX11cGRhdGVJbmRleEh0bWxDb21wdXRlQ29udGV4dCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGQ9''@;'; put 'put ''bG9jYXRpb24uc2VhcmNoLnNwbGl0KCIvIikucG9wKCksaD1kPy5pbmNsdWRlcygiLiIpP2Q6dm9pZCAwO2lmKCFoKXJldHVybiB2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIldlIGNvdWxkIG5vdCBmaWd1cmUgb3V0IHRoZSBmaWxlIG5hbWUgb2YgYGluZGV4Lmh0''@;'; put 'put ''bWxgIGJhc2VkIG9uIHRoZSB1cmwuIik7Y29uc3QgZj15aWVsZCBhLnNhc1NlcnZpY2UuZ2V0RmlsZUNvbnRlbnQoYCR7YS5hcHBMb2N9L3NlcnZpY2VzYCxoKTtpZighZilyZXR1cm4gdm9pZCBhLmxvZ2dlclNlcnZpY2UuZXJyb3IoYEZhaWxlZCB0byBnZXQgJHtofSBhdCAke2EuYXBwTG9j''@;'; put 'put ''fS9zZXJ2aWNlc2ApO2NvbnN0IHY9YS5nZXRDb21wdXRlQ29udGV4dE5hbWUoYS5zZWxlY3RlZENvbXB1dGVDb250ZXh0KTtpZighdilyZXR1cm4gdm9pZCBhLmxvZ2dlclNlcnZpY2UuZXJyb3IoYENvbXB1dGUgY29udGV4dCBuYW1lIG5vdCBmb3VuZCBmb3IgSUQ6ICR7YS5zZWxlY3RlZENv''@;'; put 'put ''bXB1dGVDb250ZXh0fSB8IExpc3Q6ICR7SlNPTi5zdHJpbmdpZnkoYS5jb21wdXRlQ29udGV4dHMpfWApO2NvbnN0IE09Zi5yZXBsYWNlKC9jb250ZXh0bmFtZT0iW14iXSoiL2csYGNvbnRleHRuYW1lPSIke3Z9ImApO3lpZWxkIGEuc2FzU2VydmljZS51cGRhdGVGaWxlQ29udGVudChgJHth''@;'; put 'put ''LmFwcExvY30vc2VydmljZXNgLGgsTSkuY2F0Y2goRD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSBEYXRhQ29udHJvbGxlci5odG1sOiAke0R9YCl9KX0pKCl9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxl''@;'; put 'put ''KGEsZCxoKX1vbkpzb25GaWxlQ2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoPWEudGFyZ2V0LmZpbGVzWzBdO2QuanNvbkZpbGU9eWllbGQgZC5kZXBsb3lTZXJ2aWNlLnJlYWRGaWxlKGgpfSkoKX1yZWNyZWF0ZURhdGFiYXNlQ2xpY2tlZChhKXshMD09''@;'; put 'put ''PWEudGFyZ2V0LmNoZWNrZWQmJih0aGlzLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMCl9Y2xlYXJVcGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vcGVuU2FzUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01v''@;'; put 'put ''ZGFsKCl9bmF2aWdhdGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZShLaGUpLEdlKEJzKSxHZShUVyksR2UoU2QpLEdlKFN1KSl9fXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXV0b21hdGljLWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MiLGFwcExvYzoiYXBwTG9jIixkY1BhdGg6ImRj''@;'; put 'put ''UGF0aCIsc2VsZWN0ZWRBZG1pbkdyb3VwOiJzZWxlY3RlZEFkbWluR3JvdXAifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6NDQsdmFyczoxMSxjb25zdHM6W1siY2xhc3MiLCJhdXRvLWRlcGxveSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRl''@;'; put 'put ''ciIsIm15LTE1Il0sWyJmb3IiLCJkY2xvYyIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJtdC0wIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwi''@;'; put 'put ''ZGMtbG9jLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiLCJzbWFsbC1tdCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwiZGNsb2MiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbHJTZWxlY3QiLCIiLCJuYW1lIiwib3B0aW9ucyIsMywibmdNb2RlbCIsIm5n''@;'; put 'put ''TW9kZWxDaGFuZ2UiLDQsIm5nSWYiXSxbImNscklubGluZSIsIiIsImNsYXNzIiwic3Bpbm5lci1zbSIsNCwibmdJZiJdLFsiZm9yIiwiY29tcHV0ZUNvbnRleHQiLDEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbNCwibmdJZiJdLFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0''@;'; put 'put ''bi1wcmltYXJ5IiwiZC1pbmxpbmUtYmxvY2siLCJtci0xMCIsMywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlw''@;'; put 'put ''ZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImF1dG8tZGVwbG95Il0sWzEsInNwaW5uZXItYm94Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLW1kIl0sWzEsIm0tMCIsImFsaWduLXNlbGYtc3RhcnQiXSxbMSwidy0xMDAiXSxbImNsYXNz''@;'; put 'put ''IiwiZGVwbG95LXN0YXR1cy1yb3ciLDQsIm5nSWYiXSxbMSwiYnV0dG9ucyJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1IiwibXItMCIsMywiY2xpY2siXSxbImNsYXNzIiwiZGVwbG95LWVycm9yIiwic2hhcGUiLCJ0aW1lcy1jaXJjbGUiLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRu''@;'; put 'put ''LXByaW1hcnktb3V0bGluZSIsIm10LTE1IiwibXItMCIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTE1IiwibXItMCIsImFsaWduLXNlbGYtZW5kIiwzLCJjbGljayJdLFsxLCJkZXBsb3ktc3RhdHVzLXJvdyJdLFsiY2xhc3MiLCJkZXBsb3ktc3VjY2Vz''@;'; put 'put ''cyIsInNoYXBlIiwic3VjY2Vzcy1zdGFuZGFyZCIsNCwibmdJZiJdLFsic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiwxLCJkZXBsb3ktc3VjY2VzcyJdLFsic2hhcGUiLCJ0aW1lcy1jaXJjbGUiLDEsImRlcGxveS1lcnJvciJdLFsiY2xyU2VsZWN0IiwiIiwibmFtZSIsIm9wdGlvbnMiLDMs''@;'; put 'put ''Im5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbImNscklubGluZSIsIiIsMSwic3Bpbm5lci1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGd0KDAsRUtlLDQsMiwiZGl2IiwwKSxkZSgxLCJoNCIs''@;'; put 'put ''MSksTGUoMiwiVml5YSBEZXBsb3kiKSxoZSgpLEd0KDMsImhyIiksZGUoNCwibGFiZWwiLDIpLExlKDUsIkFwcCBMb2MiKSxoZSgpLGRlKDYsImRpdiIsMykoNywiZGl2Iiw0KSg4LCJwIiw1KSxMZSg5KSxoZSgpKCkoKSxkZSgxMCwibGFiZWwiLDIpLExlKDExLCJEQyBMb2MiKSxoZSgpLGRl''@;'; put 'put ''KDEyLCJkaXYiLDYpKDEzLCJkaXYiLDcpKDE0LCJpbnB1dCIsOCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRjUGF0aCx2KXx8KGguZGNQYXRoPXYpLHZ9KSxoZSgpKCkoKSxkZSgxNSwibGFiZWwiLDIpLExlKDE2LCJTQVMgQWRtaW4gZ3JvdXAiKSxoZSgp''@;'; put 'put ''LGRlKDE3LCJkaXYiLDMpKDE4LCJkaXYiLDcpLGd0KDE5LEFLZSwyLDIsInNlbGVjdCIsOSkoMjAsa0tlLDEsMCwiY2xyLXNwaW5uZXIiLDEwKSxoZSgpKCksZGUoMjEsImxhYmVsIiwxMSksTGUoMjIsIkNvbXB1dGUgQ29udGV4dCIpLGhlKCksZGUoMjMsImRpdiIsMykoMjQsImRpdiIsNyks''@;'; put 'put ''Z3QoMjUsSUtlLDIsMiwic2VsZWN0Iiw5KSgyNixSS2UsMSwwLCJjbHItc3Bpbm5lciIsMTApLGhlKCkoKSxndCgyNyxMS2UsNywxLCJuZy1jb250YWluZXIiLDEyKSxHdCgyOCwiaHIiKSxkZSgyOSwiYnV0dG9uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJ1bkF1dG9E''@;'; put 'put ''ZXBsb3koKX0pLExlKDMwLCIgRGVwbG95XG4iKSxoZSgpLGRlKDMxLCJjbHItbW9kYWwiLDE0KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5yZWNyZWF0ZURhdGFiYXNlTW9kYWwsdil8fChoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD12KSx2fSksZGUo''@;'; put 'put ''MzIsImgzIiwxNSksTGUoMzMsIldhcm5pbmciKSxoZSgpLGRlKDM0LCJkaXYiLDE2KSxMZSgzNSwiIFRoaXMgYWN0aW9uIHdpbGwgcmVjcmVhdGUgdGhlIGRhdGFiYXNlIChpZiBpdCBleGlzdHMpLiBGb3IgYW4gaW5pdGlhbCBkZXBsb3ltZW50LCB0aGlzIGlzIGV4cGVjdGVkLiBJZiB0aGlz''@;'; put 'put ''IGlzIGEgcmUtZGVwbG95bWVudCwgeW91IHdpbGwgbG9zZSBhbnkgZXhpc3RpbmcgdGFibGVzIGluICIpLGRlKDM2LCJzdHJvbmciKSxMZSgzNyksaGUoKSxMZSgzOCwiLiAiKSxoZSgpLGRlKDM5LCJkaXYiLDE3KSg0MCwiYnV0dG9uIiwxOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSxoLnJlY3JlYXRlRGF0YWJhc2U9ITF9KSxMZSg0MSwiIENhbmNlbCAiKSxoZSgpLGRlKDQyLCJidXR0b24iLDE4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLGgucmVjcmVhdGVEYXRh''@;'; put 'put ''YmFzZT0hMH0pLExlKDQzLCIgT2sgIiksaGUoKSgpKCkpLDImZCYmKE1lKCJuZ0lmIixoLmF1dG9kZXBsb3lpbmcpLGZlKDkpLHdyKGguYXBwTG9jKSxmZSg1KSxwaSgibmdNb2RlbCIsaC5kY1BhdGgpLGZlKDUpLE1lKCJuZ0lmIiwhaC5hZG1pbkdyb3Vwc0xvYWRpbmcpLGZlKCksTWUoIm5n''@;'; put 'put ''SWYiLGguYWRtaW5Hcm91cHNMb2FkaW5nKSxmZSg1KSxNZSgibmdJZiIsIWguY29tcHV0ZUNvbnRleHRzTG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC5jb21wdXRlQ29udGV4dHNMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixoLnJ1bm5pbmdBc1VzZXIpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4i''@;'; put 'put ''LGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsKSxNZSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLHdyKGguZGNQYXRoKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsQTIsazIscWwsVDIsbmwsJHMsSGwsb3UsS3UsZHMsWjEsRTcsUmRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7''@;'; put 'put ''Y29uc3QgZSQ9KCk9Pih7c3RhbmRhbG9uZTohMH0pO2Z1bmN0aW9uIFBLZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNikoMSwicCIsNyksTGUoMiwiUGxlYXNlIGxvZyBpbiBmaXJzdCIpLGhlKCksZGUoMywibGFiZWwiLDgpLExlKDQsIlVzZXJuYW1lIiksaGUoKSxkZSg1LCJkaXYiLDkpKDYs''@;'; put 'put ''ImRpdiIsMTApLEd0KDcsImlucHV0IiwxMSksaGUoKSgpLGRlKDgsImxhYmVsIiwxMiksTGUoOSwiUGFzc3dvcmQiKSxoZSgpLGRlKDEwLCJkaXYiLDkpKDExLCJkaXYiLDEwKSxHdCgxMiwiaW5wdXQiLDEzKSxoZSgpKCksZGUoMTMsImJ1dHRvbiIsMTQpLExlKDE0LCJMb2cgaW4iKSxoZSgp''@;'; put 'put ''KCkpfWZ1bmN0aW9uIEZLZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEuaWQpLGZlKCksRHIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBIS2UoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFu''@;'; put 'put ''IiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKCksRHIoIiggIixhLmF0dHJpYnV0ZXMuc3lzVXNlcklkLCIgKSIpfX1mdW5jdGlvbiBOS2UoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDM2KSxMZSgxKSxndCgyLEhLZSwyLDEsInNwYW4iLDUpLGVsKDMs''@;'; put 'put ''Impzb24iKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInZhbHVlIixhLm5hbWUpLGZlKCksRHIoIiAiLGEubmFtZSwiICIpLGZlKCksTWUoIm5nSWYiLCJ7fSIhPURjKDMsMyxhLmF0dHJpYnV0ZXMpKX19ZnVuY3Rpb24gVktlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLExl''@;'; put 'put ''KDEsIkpTT04gU3VibWl0dGVkIFN1Y2Nlc3NmdWxseSIpLGhlKCkpfWZ1bmN0aW9uIEJLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMzcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgp''@;'; put 'put ''KX0pLEd0KDEsImNsci1pY29uIiwzOCksaGUoKX19ZnVuY3Rpb24gaktlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwicCIsMzkpLExlKDIsIkZpbGUgZXhlY3V0ZSBjb21wbGV0ZWQiKSxoZSgpLEd0KDMsImhyIiksZGUoNCwiZGl2IikoNSwiYnV0dG9uIiw0MCksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGguam9iTG9nLCJleGVjdXRlLXNjcmlwdC1sb2ciLCJ0eHQiKSl9KSxMZSg2LCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSxsaSgpfX1mdW5jdGlvbiB6S2UoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiLDQ0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxEcigiICIsYS5tYWtlRGF0YVJlc3BvbnNlLCIgIil9fWZ1bmN0aW9uIFVLZShjLGwpezEmYyYmKHNpKDApLGRlKDEsInNwYW4iLDI1KSxMZSgyLCIgVmFsaWRhdGluZyBkZXBsb3kuLi4gIiksaGUo''@;'; put 'put ''KSxkZSgzLCJzcGFuIiksTGUoNCwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gWktlKGMsbCl7MSZjJiYoc2koMCksR3QoMSwiY2xyLWljb24iLDQ2KSxkZSgyLCJzcGFuIiksTGUoMywiIFZhbGlkYXRpb24gZmFpbGVkICIpLGhlKCksbGkoKSl9ZnVuY3Rp''@;'; put 'put ''b24gV0tlKGMsbCl7MSZjJiYoc2koMCksR3QoMSwiY2xyLWljb24iLDQ3KSxkZSgyLCJzcGFuIiksTGUoMywiIFZhbGlkYXRpb24gc3VjY2VlZGVkICIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gWUtlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0NSksZ3QoMSxVS2UsNSwwLCJuZy1jb250YWlu''@;'; put 'put ''ZXIiLDUpKDIsWktlLDQsMCwibmctY29udGFpbmVyIiw1KSgzLFdLZSw0LDAsIm5nLWNvbnRhaW5lciIsNSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEuaXNWYWxpZGF0aW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJlcnJvciI9PT1hLnZh''@;'; put 'put ''bGlkYXRpb25TdGF0ZSksZmUoKSxNZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYic3VjY2VzcyI9PT1hLnZhbGlkYXRpb25TdGF0ZSl9fWZ1bmN0aW9uIEdLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsInAiLDM5KSxMZSgyLCJDcmVhdGUgRGF0YWJhc2UgQ29tcGxl''@;'; put 'put ''dGVkIiksaGUoKSxHdCgzLCJociIpLGd0KDQsektlLDIsMSwiZGl2Iiw0MSksZGUoNSwiYnV0dG9uIiw0MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLExlKDYsIiBMZXQncyBnZXQgc3RhcnRlZCAiKSxoZSgpLGRlKDcs''@;'; put 'put ''ImJ1dHRvbiIsNDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxMZSg4LCIgRG93bmxvYWQgbG9nICIpLGhlKCksZGUoOSwi''@;'; put 'put ''YnV0dG9uIiw0MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS52YWxpZGF0ZURlcGxveSgpKX0pLExlKDEwLCIgVmFsaWRhdGUgIiksaGUoKSxndCgxMSxZS2UsNCwzLCJkaXYiLDQzKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg0KSxNZSgibmdJ''@;'; put 'put ''ZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKSxmZSg3KSxNZSgibmdJZiIsIm5vbmUiIT09YS52YWxpZGF0aW9uU3RhdGV8fGEuaXNWYWxpZGF0aW5nKX19ZnVuY3Rpb24gJEtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZm9ybSIpKDIsImRpdiIsMTUpKDMs''@;'; put 'put ''ImxhYmVsIiwxNiksTGUoNCwiQWRtaW4gZ3JvdXAiKSxoZSgpLGRlKDUsImRpdiIsMTcpKDYsImRpdiIsMTgpKDcsInNlbGVjdCIsMTkpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuc2VsZWN0ZWRBZG1pbkdyb3VwLGgpfHwo''@;'; put 'put ''Zi5zZWxlY3RlZEFkbWluR3JvdXA9aCksQ3QoaCl9KSxndCg4LEZLZSwyLDIsIm9wdGlvbiIsMjApLGhlKCkoKSgpKCksZGUoOSwiZGl2IiwxNSkoMTAsImRpdiIpKDExLCJsYWJlbCIsMTYpLExlKDEyLCJDb250ZXh0IiksaGUoKSxkZSgxMywiZGl2IiwxNykoMTQsImRpdiIsMTgpKDE1LCJz''@;'; put 'put ''ZWxlY3QiLDIxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLnNlbGVjdGVkQ29udGV4dCxoKXx8KGYuc2VsZWN0ZWRDb250ZXh0PWgpLEN0KGgpfSksZ3QoMTYsTktlLDQsNSwib3B0aW9uIiwyMCksaGUoKSgpKCksZGUoMTcs''@;'; put 'put ''ImJ1dHRvbiIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5leGVjdXRhYmxlQ29udGV4dCgpKX0pLEd0KDE4LCJjbHItaWNvbiIsMjMpLGhlKCkoKSxkZSgxOSwiZGl2IiwyNCkoMjAsInNwYW4iLDI1KSxMZSgyMSwiIExvYWRpbmcgY29udGV4dHMuLi4g''@;'; put 'put ''IiksaGUoKSxkZSgyMiwic3BhbiIpLExlKDIzLCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSxoZSgpKCksZGUoMjQsImxhYmVsIiwyNiksTGUoMjUsIkRDIExvYyIpLGhlKCksZGUoMjYsImRpdiIsOSkoMjcsImRpdiIsMTApKDI4LCJpbnB1dCIsMjcpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5j''@;'; put 'put ''dGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuZGNQYXRoLGgpfHwoZi5kY1BhdGg9aCksQ3QoaCl9KSxGdCgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuc2F2ZURjUGF0aCgpKX0pLGhlKCkoKSgpLGRlKDI5LCJwIiwyOCksTGUoMzAsIiBT''@;'; put 'put ''ZWxlY3QgSlNPTiBmaWxlIHRvIHVwbG9hZCAoanNvbiBidWlsZCBmaWxlIHByZWxvYWRlZCk6ICIpLGhlKCksZGUoMzEsImRpdiIsMjkpKDMyLCJpbnB1dCIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9KSgiY2hh''@;'; put 'put ''bmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkpzb25GaWxlQ2hhbmdlKGgpKX0pLGhlKCkoKSxkZSgzMywiZGl2IiwzMSkoMzQsImJ1dHRvbiIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5leGVjdXRlSnNvbigpKX0pLExlKDM1''@;'; put 'put ''LCIgU1VCTUlUIEpTT04gIiksaGUoKSxndCgzNixWS2UsMiwwLCJzcGFuIiw1KSxoZSgpLGRlKDM3LCJwIiwyOCksTGUoMzgsIlNlbGVjdCBTQVMgZmlsZSB0byB1cGxvYWQ6IiksaGUoKSxkZSgzOSwiZGl2IiwyOSkoNDAsImlucHV0IiwzMCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoUmUoKS5jbGVhclVwbG9hZElucHV0KGgpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gZi5vblNhc0ZpbGVDaGFuZ2UoaCksQ3QoZi5kb3dubG9hZEZpbGVCdG49ITApfSksaGUoKSxndCg0MSxCS2UsMiwwLCJidXR0b24iLDMz''@;'; put 'put ''KSxoZSgpLGRlKDQyLCJkaXYiLDMxKSg0MywiYnV0dG9uIiwzNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmV4ZWN1dGVTQVMoKSl9KSxMZSg0NCwiIFNVQk1JVCAiKSxoZSgpKCkoKSxndCg0NSxqS2UsNywwLCJuZy1jb250YWluZXIiLDUpLGRlKDQ2LCJi''@;'; put 'put ''dXR0b24iLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuY3JlYXRlRGF0YWJhc2UoKSl9KSxMZSg0NywiIENyZWF0ZSBEYXRhYmFzZSAiKSxoZSgpLGd0KDQ4LEdLZSwxMiwyLCJuZy1jb250YWluZXIiLDUpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''UmUoKTtmZSg3KSxwaSgibmdNb2RlbCIsYS5zZWxlY3RlZEFkbWluR3JvdXApLE1lKCJuZ01vZGVsT3B0aW9ucyIsR3MoMTksZSQpKSxmZSgpLE1lKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBzKSxmZSgyKSxUcigiaGlkZGVuIixhLmNvbnRleHRzTG9hZGluZyksZmUoNSkscGkoIm5nTW9kZWwi''@;'; put 'put ''LGEuc2VsZWN0ZWRDb250ZXh0KSxNZSgibmdNb2RlbE9wdGlvbnMiLEdzKDIwLGUkKSksZmUoKSxNZSgibmdGb3JPZiIsYS5hbGxDb250ZXh0cyksZmUoMyksVHIoImhpZGRlbiIsIWEuY29udGV4dHNMb2FkaW5nKSxmZSg5KSxwaSgibmdNb2RlbCIsYS5kY1BhdGgpLE1lKCJuZ01vZGVsT3B0''@;'; put 'put ''aW9ucyIsR3MoMjEsZSQpKSxmZSg2KSxNZSgiY2xyTG9hZGluZyIsYS5pc1N1Ym1pdHRpbmdKc29uKSxmZSgyKSxNZSgibmdJZiIsYS5pc0pzb25TdWJtaXR0ZWQpLGZlKDUpLE1lKCJuZ0lmIixhLmRvd25sb2FkRmlsZUJ0biksZmUoMiksTWUoImNsckxvYWRpbmciLGEuZXhlY3V0aW5nU2Ny''@;'; put 'put ''aXB0KSxmZSgyKSxNZSgibmdJZiIsYS5qb2JMb2cubGVuZ3RoPjApLGZlKCksTWUoImNsckxvYWRpbmciLGEuY3JlYXRlRGF0YWJhc2VMb2FkaW5nKSxmZSgyKSxNZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKX19bGV0IEtLZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCxoLGYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5kZXBsb3lTZXJ2aWNlPWYsdGhpcy5zYXNKc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBLcix0aGlzLm5lZWRz''@;'; put 'put ''TG9naW49ITEsdGhpcy5hZG1pbkdyb3Vwcz1bXSx0aGlzLmFsbENvbnRleHRzPVtdLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMuc2VsZWN0ZWRDb250ZXh0PSIiLHRoaXMuam9iTG9nPSIiLHRoaXMubWFrZURhdGFSZXNwb25z''@;'; put 'put ''ZT0iIix0aGlzLmxpbmVzT2ZDb2RlPVtdLHRoaXMuZmlsZU5hbWU9IiIsdGhpcy5wcmVsb2FkZWRGaWxlPSEwLHRoaXMuZXhlY3V0ZVNBU0VuYWJsZWQ9ITEsdGhpcy5jb250ZXh0c0xvYWRpbmc9ITEsdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5leGVjdXRpbmdTY3JpcHQ9''@;'; put 'put ''ITEsdGhpcy5kb3dubG9hZEZpbGVCdG49ITEsdGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1pdHRlZD0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0ibm9uZSJ9bmdPbkluaXQoKXt9ZXhlY3V0YWJs''@;'; put 'put ''ZUNvbnRleHQoKXtyZXR1cm4gZWUoZnVuY3Rpb24qKCl7fSkoKX1jbGVhclVwbG9hZElucHV0KGEpe3RoaXMuZGVwbG95U2VydmljZS5jbGVhclVwbG9hZElucHV0KGEpfW9uU2FzRmlsZUNoYW5nZShhKXt0aGlzLnByZWxvYWRlZEZpbGU9ITE7bGV0IGQ9YS50YXJnZXQuZmlsZXNbMF07dGhp''@;'; put 'put ''cy5maWxlTmFtZT1kLm5hbWU7bGV0IGg9bmV3IEZpbGVSZWFkZXI7aC5vbmxvYWQ9KCk9PntoLnJlc3VsdCYmKHRoaXMubGluZXNPZkNvZGU9aC5yZXN1bHQuc3BsaXQoIlxuIiksdGhpcy5saW5lc09mQ29kZT10aGlzLmxpbmVzT2ZDb2RlLmZpbHRlcihmPT4iIiE9PWYmJm51bGwhPT1mKSx0''@;'; put 'put ''aGlzLmV4ZWN1dGVTQVNFbmFibGVkPSEwLHRoaXMuYWRkUHJlY29kZUxpbmVzKCkpfSxoLnJlYWRBc1RleHQoZCl9b25Kc29uRmlsZUNoYW5nZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgaD1hLnRhcmdldC5maWxlc1swXTtkLmpzb25GaWxlPXlpZWxkIGQuZGVw''@;'; put 'put ''bG95U2VydmljZS5yZWFkRmlsZShoKX0pKCl9YWRkUHJlY29kZUxpbmVzKCl7dGhpcy5saW5lc09mQ29kZS51bnNoaWZ0KGAlbGV0IGNvbnRleHQ9JHt0aGlzLnNlbGVjdGVkQ29udGV4dH07YCxgJWxldCBhcHBMb2M9JHt0aGlzLmFwcExvY307YCxgJWxldCBhZG1pbj0ke3RoaXMuc2VsZWN0''@;'; put 'put ''ZWRBZG1pbkdyb3VwfTtgLGAlbGV0IGRjcGF0aD0ke3RoaXMuZGNQYXRofTtgKX1kb3dubG9hZFNhc1ByZWNvZGVGaWxlKCl7bGV0IGE9dGhpcy5saW5lc09mQ29kZS5qb2luKCJcbiIpLGQ9dGhpcy5maWxlTmFtZS5zcGxpdCgiLiIpWzBdO3RoaXMuZG93bmxvYWRGaWxlKGEsZCwic2FzIil9''@;'; put 'put ''ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGEsZCxoKX1zYXZlRGNQYXRoKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImRlcGxveV9kY19sb2MiLHRoaXMuZGNQYXRoKX1leGVjdXRlSnNvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1''@;'; put 'put ''bmN0aW9uKigpe2EuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdm9pZCAwLHZvaWQgMCwhMCksYS5pc0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9''@;'; put 'put ''IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgvXFwvZ20sIiIpOmQubWVzc2FnZSx2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9PWg/aDpkfWAp''@;'; put 'put ''fWEuaXNTdWJtaXR0aW5nSnNvbj0hMX0pKCl9ZXhlY3V0ZVNBUygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuZXhlY3V0aW5nU2NyaXB0PSEwLGEuam9iTG9nPSIiLGEubWFrZURhdGFSZXNwb25zZT0iIjt0cnl7bGV0IGQ9eWllbGQgYS5zYXNKcy5leGVjdXRlU2NyaXB0''@;'; put 'put ''KHtmaWxlTmFtZTphLmZpbGVOYW1lLGxpbmVzT2ZDb2RlOmEubGluZXNPZkNvZGUsY29udGV4dE5hbWU6YS5zZWxlY3RlZENvbnRleHR9KTthLmxvZ2dlclNlcnZpY2UubG9nKGQpLCJzdHJpbmciPT10eXBlb2YgZC5sb2cmJihkLmxvZz1KU09OLnBhcnNlKGQubG9nKSksImVycm9yIj09PWQu''@;'; put 'put ''am9iU3RhdHVzP2FsZXJ0KCJFcnJvciEiKTphLmpvYkxvZz1kLmxvZy5pdGVtcz9kLmxvZy5pdGVtcy5tYXAoaD0+aC5saW5lKS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KGQubG9nKSxhLmV4ZWN1dGluZ1NjcmlwdD0hMX1jYXRjaHthLmV4ZWN1dGluZ1NjcmlwdD0hMX19KSgpfWNyZWF0''@;'; put 'put ''ZURhdGFiYXNlKGE9ITApe2lmKGEpe2xldCBmPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLnNlcnZlclVybCsiL1NBU0pvYkV4ZWN1dGlvbi8/X3Byb2dyYW09Iit0aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIvYWRtaW4vbWFrZWRhdGEmQURNSU49Iit0aGlzLnNl''@;'; put 'put ''bGVjdGVkQWRtaW5Hcm91cCsiJkRDUEFUSD0iK3RoaXMuZGNQYXRoKyImX2RlYnVnPTEzMSI7d2luZG93Lm9wZW4oZiwiX2JsYW5rIil9ZWxzZSB0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMCx0aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIix7ZnJvbWpz''@;'; put 'put ''Olt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHt1c2VDb21wdXRlQXBpOm51bGwsY29udGV4dE5hbWU6dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZSxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4dCgh''@;'; put 'put ''MCl9KS50aGVuKGY9Pnt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfXRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExfSkuY2F0Y2goZj0+e3RoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExO3RyeXt0''@;'; put 'put ''aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9fSl9bmF2aWdhdGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfXZhbGlkYXRlRGVwbG95KCl7dGhpcy5pc1ZhbGlkYXRpbmc9ITAsdGhpcy5zYXNT''@;'; put 'put ''ZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihhPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy52YWxpZGF0aW9uU3RhdGU9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzbGlicz8ic3VjY2VzcyI6ImVycm9yIix0aGlz''@;'; put 'put ''LmlzVmFsaWRhdGluZz0hMX0pLmNhdGNoKGE9Pnt0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0iZXJyb3IifSl9ZGVsZXRlS2V5cygpe2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJkZXBsb3lfZGNfbG9jIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybiBuZXcoZHx8YykoR2UoQnMpLEdlKHZjKSxHZShTZCksR2UoS2hlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbWFudWFsLWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmln''@;'; put 'put ''IixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6OSx2YXJzOjMsY29uc3RzOltbMSwiY2FyZC1oZWFkZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJkLWlubGluZS1ibG9j''@;'; put 'put ''ayIsIm1sLTEwIiwibWItMTAiLCJtdC0wIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiY2xlYXItbWVtb3J5LWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRlIiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIl0sWyJpZCIsImxvZ2luRm9ybSIsImNsYXNzIiwiZC1ub25lIiw0LCJuZ0lmIl0s''@;'; put 'put ''WzQsIm5nSWYiXSxbImlkIiwibG9naW5Gb3JtIiwxLCJkLW5vbmUiXSxbMSwibWItMTAiXSxbImZvciIsInVzZXJuYW1lIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsidHlwZSIsInRl''@;'; put 'put ''eHQiLCJpZCIsInVzZXJuYW1lIiwxLCJjbHItaW5wdXQiXSxbImZvciIsInBhc3N3b3JkIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsidHlwZSIsInBhc3N3b3JkIiwiaWQiLCJwYXNzd29yZCIsMSwiY2xyLWlucHV0Il0sWyJpZCIsImxvZ2luQnRuIiwxLCJidG4iLCJidG4tcHJpbWFyeSIs''@;'; put 'put ''ImQtbm9uZSJdLFsxLCJjbHItZm9ybS1jb250cm9sIl0sWyJmb3IiLCJzZWxlY3QtZnVsbCIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFsibmFtZSIsInNlbGVjdGVkQWRtaW5Hcm91cCIsImlkIiwi''@;'; put 'put ''YWRtaW5Hcm91cHNTZWxlY3QiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsibmFtZSIsInNlbGVjdGVkQ29udGV4dCIsMSwiY2xyLXNlbGVjdCIsMywibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFsidHlwZSIsImJ1dHRvbiIsImlkIiwiY29udGV4dHMtYnRuIiwxLCJidG4iLCJidG4taWNvbiIsMywiY2xpY2siXSxbInNoYXBlIiwicGxheSJdLFsxLCJkLWZsZXgiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwibXIt''@;'; put 'put ''MTAiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWyJuYW1lIiwiZGNQYXRoIiwidHlwZSIsInRleHQiLCJpZCIsImRjbG9jIiwxLCJjbHItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJmb2N1c291dCIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJd''@;'; put 'put ''LFsxLCJtdC0xMCJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsidHlwZSIsImZpbGUiLDMsImNsaWNrIiwiY2hhbmdlIl0sWzEsIm10LTIwIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsIiIsMSwibXQtMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJjbGFz''@;'; put 'put ''cyIsImJ0biBidG4tc20gYnRuLWljb24gbWluLXctMCB3LTQwIiwzLCJjbGljayIsNCwibmdJZiJdLFsiaWQiLCJkZXBsb3kiLDEsIm10LTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTEwIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMywi''@;'; put 'put ''dmFsdWUiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJtaW4tdy0wIiwidy00MCIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwibWItMCIsIm10LTEwIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMCIsIm1yLTIwIiwzLCJjbGljayJdLFsiY2xhc3MiLCJs''@;'; put 'put ''b2ctd3JhcHBlciIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1IiwzLCJjbGljayJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWJhciIsNCwibmdJZiJdLFsxLCJsb2ctd3JhcHBlciJdLFsxLCJ2YWxpZGF0aW9uLWJhciJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJj''@;'; put 'put ''bGUiLDEsImlzLWVycm9yIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsMSwiaXMtc3VjY2VzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksTGUoMSwiIENvbmZpZ3VyYXRvciAiKSxkZSgyLCJwIiwxKSxMZSgzKSxoZSgpLGRlKDQsImJ1dHRvbiIsMiks''@;'; put 'put ''RnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmRlbGV0ZUtleXMoKX0pLExlKDUsIiBDbGVhciBtZW1vcnkgIiksaGUoKSgpLGRlKDYsImRpdiIsMyksZ3QoNyxQS2UsMTUsMCwiZGl2Iiw0KSg4LCRLZSw0OSwyMiwibmctY29udGFpbmVyIiw1KSxoZSgpKSwyJmQmJihmZSgzKSxEcigi''@;'; put 'put ''QXBwIExvY2F0aW9uOiAiLGguYXBwTG9jLCIiKSxmZSg0KSxNZSgibmdJZiIsaC5uZWVkc0xvZ2luKSxmZSgpLE1lKCJuZ0lmIiwhaC5uZWVkc0xvZ2luKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsbDcsQTIsazIscWwsVDIsbmwsbzcsJHMseXAsSGwsajAsUDIsZHMsZVpdLGVuY2Fwc3VsYXRp''@;'; put 'put ''b246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gcUtlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxNSksR3QoMSwicHJvZ3Jlc3MiKSxoZSgpKX1mdW5jdGlvbiBYS2UoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDE2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7''@;'; put 'put ''TWUoInZhbHVlIixhLkdST1VQTkFNRSksZmUoKSxVdSgiICIsYS5HUk9VUE5BTUUsIiAtICIsYS5HUk9VUERFU0MsIiAiKX19bGV0IEpLZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLnNhc2pzU2VydmljZT1kLHRoaXMubG9jYXRpb249''@;'; put 'put ''aCx0aGlzLnNhc0pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEtyLHRoaXMuZGNEaXJlY3Rvcnk9IiIsdGhpcy5kY0FkbWluR3JvdXA9IkRDREVGQVVMVCIsdGhpcy5NRVRBUEVSU09OPSJuL2EiLHRoaXMuTUVUQVVTRVI9Im4vYSIsdGhpcy5T''@;'; put 'put ''WVNVU0VSSUQ9Im4vYSIsdGhpcy5TWVNIT1NUTkFNRT0ibi9hIix0aGlzLlNZU1ZMT05HPSJuL2EiLHRoaXMuZGNBZG1pbkdyb3VwTGlzdD1bXSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5zaG93TG9nb3V0PSExLHRoaXMudG1wRGlyZWN0b3JpZXM9e2xpbnV4OiIvdG1wL0RhdGFDb250cm9sbGVy''@;'; put 'put ''Iix3aW5kb3dzOiJDOlxcRGF0YUNvbnRyb2xsZXIifX1uZ09uSW5pdCgpe3RoaXMuZ2V0VXNlckdyb3VwcygpLHRoaXMuZ2V0U2VydmVySW5mbygpfWdldFNlcnZlckluZm8oKXt0aGlzLnNhc2pzU2VydmljZS5nZXRTZXJ2ZXJJbmZvKCkuc3Vic2NyaWJlKGE9PnsiZGVza3RvcCIhPT1hLm1v''@;'; put 'put ''ZGUmJih0aGlzLnNob3dMb2dvdXQ9ITApfSl9Z2V0VXNlckdyb3Vwcygpe3RoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLG51bGwpLnRoZW4oYT0+e3RoaXMuTUVUQVBFUlNPTj1hLmFkYXB0ZXJSZXNwb25zZS5NRl9H''@;'; put 'put ''RVRVU0VSLHRoaXMuU1lTVVNFUklEPWEuYWRhcHRlclJlc3BvbnNlLlNZU1VTRVJJRCx0aGlzLlNZU0hPU1ROQU1FPWEuYWRhcHRlclJlc3BvbnNlLlNZU0hPU1ROQU1FLHRoaXMuU1lTVkxPTkc9YS5hZGFwdGVyUmVzcG9uc2UuU1lTVkxPTkcsdGhpcy5kY0RpcmVjdG9yeT10aGlzLnRtcERp''@;'; put 'put ''cmVjdG9yaWVzW1siTCIsIkgiLCJBIiwiUyJdLmluY2x1ZGVzKGEuYWRhcHRlclJlc3BvbnNlLlNZU1NDUEwuc3Vic3RyaW5nKDAsMSkpPyJsaW51eCI6IndpbmRvd3MiXSx0aGlzLmRjQWRtaW5Hcm91cExpc3Q9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMuZGNBZG1pbkdyb3VwPXRo''@;'; put 'put ''aXMuZGNBZG1pbkdyb3VwTGlzdFswXS5HUk9VUE5BTUUsdGhpcy5sb2FkaW5nPSExfSxhPT57dGhpcy5sb2FkaW5nPSExfSl9bWFrZURhdGEoKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2NvbnN0IGg9dGhpcy5zYXNKc0NvbmZpZy5hcHBMb2M7bGV0IGY9dGhp''@;'; put 'put ''cy5zYXNKc0NvbmZpZy5zZXJ2ZXJVcmwsdj10aGlzLmRjRGlyZWN0b3J5O3RoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PUIwLlkuU2FzanM/dGhpcy5zYXNTZXJ2aWNlLnNhc2pzTWFrZWRhdGFDaGVja2luZygpLnRoZW4oRD0+e0QmJih0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgi''@;'; put 'put ''LyIpLGxvY2F0aW9uLnJlbG9hZCgpKX0pOnRoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PUIwLlkuU2FzOSYmKGY9IiIsZD13aW5kb3cubG9jYXRpb24ub3JpZ2luK2QrIi8iLHY9ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZGNEaXJlY3RvcnkpKSx3aW5kb3cub3BlbihgJHtmfHwiIn0k''@;'; put 'put ''e2R9P19wcm9ncmFtPSR7aH0vc2VydmljZXMvYWRtaW4vbWFrZWRhdGEmYWRtaW49JHt0aGlzLmRjQWRtaW5Hcm91cH0mcGF0aD0ke3Z9IGAsIl9ibGFuayIpfWxvZ291dCgpe3RoaXMuc2FzU2VydmljZS5sb2dvdXQoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJu''@;'; put 'put ''IG5ldyhkfHxjKShHZShCcyksR2UoVmNlKSxHZShmaCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJT''@;'; put 'put ''ZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6NDQsdmFyczoxMCxjb25zdHM6W1siY2xhc3MiLCJ0aGluUHJvZ3Jlc3MgcHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEs''@;'; put 'put ''InRleHQtY2VudGVyIiwibXktMTUiXSxbMSwibGlnaHQiXSxbMSwibS0wIl0sWzEsIm0tMCIsIm10LTEwIl0sWzEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbInBsYWNlaG9s''@;'; put 'put ''ZGVyIiwiVHlwZSBpbiBkaXJlY3RvcnkiLDEsImNsci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwibWItMTAiLCJtdC0wIiwidy01MHZ3Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5n''@;'; put 'put ''Rm9yT2YiXSxbMSwiY2xyLWZsZXgiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJtdC0xNSIsInRleHQtY2VudGVyIiwzLCJjbGljayJdLFsxLCJjYXJkLXRleHQiLCJwYi0xMCJdLFsxLCJ0aGluUHJvZ3Jlc3MiLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzMsInZhbHVl''@;'; put 'put ''Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ3QoMCxxS2UsMiwwLCJkaXYiLDApLGRlKDEsImg0IiwxKSxMZSgyLCJTYXNqcyBEZXBsb3kiKSxoZSgpLEd0KDMsImhyIiwyKSxkZSg0LCJwIiwzKSxMZSg1LCIgVG8gY29uZmlndXJlIERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhh''@;'; put 'put ''OSwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOlxuIiksaGUoKSxkZSg2LCJwIiw0KSxMZSg3LCIgUGxlYXNlIHNwZWNpZnkgYSBwaHlzaWNhbCBkaXJlY3RvcnkgKG9uIHRoZSAiKSxkZSg4LCJzdHJvbmciKSxMZSg5KSxoZSgpLExlKDEwLCIgY29tcHV0ZSBzZXJ2ZXIp''@;'; put 'put ''IGJlbG93LCB0byB3aGljaCB1c2VyICIpLGRlKDExLCJzdHJvbmciKSxMZSgxMiksaGUoKSxMZSgxMywiIGNhbiB3cml0ZSwgb24gYmVoYWxmIG9mIERhdGEgQ29udHJvbGxlci5cbiIpLGhlKCksZGUoMTQsImxhYmVsIiw1KSxMZSgxNSwiREMgU3RhZ2luZyBEaXJlY3RvcnkiKSxoZSgpLGRl''@;'; put 'put ''KDE2LCJkaXYiLDYpKDE3LCJkaXYiLDcpKDE4LCJpbnB1dCIsOCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRjRGlyZWN0b3J5LHYpfHwoaC5kY0RpcmVjdG9yeT12KSx2fSksaGUoKSgpKCksZGUoMTksInAiLDQpLExlKDIwLCIgQmVsb3cgYXJlIHRoZSBs''@;'; put 'put ''aXN0IG9mIGdyb3VwcyB0byB3aGljaCB5b3UgYmVsb25nLiBUaGUgZ3JvdXAgeW91IHNlbGVjdCB3aWxsIGJlY29tZSB0aGUgRGF0YSBDb250cm9sbGVyIEFkbWluIEdyb3VwLCBhbmQgZXZlcnlvbmUgaW4gaXQgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBhY2Nlc3MgdG8gRGF0YSBDb250cm9s''@;'; put 'put ''bGVyLlxuIiksaGUoKSxkZSgyMSwibGFiZWwiLDUpLExlKDIyLCJEYXRhIENvbnRyb2xsZXIgQWRtaW4gZ3JvdXAiKSxoZSgpLGRlKDIzLCJjbHItc2VsZWN0LWNvbnRhaW5lciIsOSkoMjQsInNlbGVjdCIsMTApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5k''@;'; put 'put ''Y0FkbWluR3JvdXAsdil8fChoLmRjQWRtaW5Hcm91cD12KSx2fSksZ3QoMjUsWEtlLDIsMywib3B0aW9uIiwxMSksaGUoKSgpLGRlKDI2LCJwIiw0KSxMZSgyNywiIE5vdywgY3JlYXRlIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFuZCBkZXBsb3kgdGhlIGNvbnRyb2wgbGlicmFyeSB1c2luZyB0''@;'; put 'put ''aGUgYWRtaW4gZ3JvdXAgc2VsZWN0ZWQgYWJvdmU6XG4iKSxoZSgpLGRlKDI4LCJkaXYiLDEyKSgyOSwiYnV0dG9uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm1ha2VEYXRhKCl9KSxMZSgzMCwiIFNVQk1JVCAiKSxoZSgpKCksR3QoMzEsImhyIiwyKSxkZSgzMiwiZGl2''@;'; put 'put ''IiwxNCkoMzMsInAiKSxMZSgzNCwiWW91IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWxzOiIpLGhlKCksZGUoMzUsInVsIikoMzYsImxpIiksTGUoMzcpLGhlKCksZGUoMzgsImxpIiksTGUoMzkpLGhlKCksZGUoNDAsImxpIiksTGUoNDEpLGhlKCksZGUoNDIs''@;'; put 'put ''ImxpIiksTGUoNDMpLGhlKCkoKSgpKSwyJmQmJihNZSgibmdJZiIsaC5sb2FkaW5nKSxmZSg5KSxEcigiICIsaC5TWVNIT1NUTkFNRSwiIiksZmUoMyksd3IoaC5TWVNVU0VSSUQpLGZlKDYpLHBpKCJuZ01vZGVsIixoLmRjRGlyZWN0b3J5KSxmZSg2KSxwaSgibmdNb2RlbCIsaC5kY0FkbWlu''@;'; put 'put ''R3JvdXApLGZlKCksTWUoIm5nRm9yT2YiLGguZGNBZG1pbkdyb3VwTGlzdCksZmUoMTIpLERyKCJNRVRBUEVSU09OOiAiLGguTUVUQVBFUlNPTiwiIiksZmUoMiksRHIoIlNZU1VTRVJJRDogIixoLlNZU1VTRVJJRCwiIiksZmUoMiksRHIoIlNZU0hPU1ROQU1FOiAiLGguU1lTSE9TVE5BTUUs''@;'; put 'put ''IiIpLGZlKDIpLERyKCJTWVNWTE9ORzogIixoLlNZU1ZMT05HLCIiKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsQTIsazIscWwsVDIsbmwsJHMsZHMsRTcsJHldLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gUUtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUo''@;'; put 'put ''MCwiZGl2Iiw0KSgxLCJkaXYiLDUpLExlKDIsIlRlcm1zIGFuZCBDb25kaXRpb25zIiksaGUoKSxkZSgzLCJkaXYiLDYpKDQsImRpdiIsNykoNSwicCIsOCksTGUoNiwiIFRoZSBEZW1vIHZlcnNpb24gb2YgRGF0YSBDb250cm9sbGVyIGlzIGZyZWUgZm9yIEVWQUxVQVRJT04gcHVycG9zZXMg''@;'; put 'put ''b25seS4gQmVmb3JlIHByb2NlZWRpbmcgd2l0aCBjb25maWd1cmF0aW9uLCBwbGVhc2UgY29uZmlybSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsIGFuZCBhZ3JlZWQgdG8gdGhlICIpLGRlKDcsImEiLDkpLExlKDgsIkRhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0''@;'; put 'put ''aW9uIEFncmVlbWVudCIpLGhlKCksTGUoOSwiLiAiKSxoZSgpKCksR3QoMTAsImhyIiwxMCksZGUoMTEsImNsci1jaGVja2JveC13cmFwcGVyIikoMTIsImlucHV0IiwxMSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS50ZXJtc0FncmVlQ2hhbmdlKCkpfSks''@;'; put 'put ''aGUoKSxkZSgxMywibGFiZWwiKSxMZSgxNCwiSSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGUgIiksZGUoMTUsImEiLDkpLExlKDE2LCJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YTkgRXZhbHVhdGlvbiBBZ3JlZW1lbnQiKSxoZSgpKCkoKSgpKCl9fWZ1bmN0aW9u''@;'; put 'put ''IGVxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTYpKDEsImFwcC1hdXRvbWF0aWMtZGVwbG95IiwxNyksRnQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncykoImFwcExvYyIsYS5hcHBMb2MpKCJkY1BhdGgiLGEuZGNQYXRoKSgic2VsZWN0ZWRBZG1pbkdy''@;'; put 'put ''b3VwIixhLnNlbGVjdGVkQWRtaW5Hcm91cCl9fWZ1bmN0aW9uIHRxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTgpKDEsImFwcC1tYW51YWwtZGVwbG95IiwxOSksRnQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLm9u''@;'; put 'put ''TmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIG5xZShjLGwpe2lm''@;'; put 'put ''KDEmYyYmKHNpKDApLGd0KDEsZXFlLDIsNiwiZGl2IiwxNCkoMix0cWUsMiwzLCJkaXYiLDE1KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsYS5hdXRvZGVwbG95KSxmZSgpLE1lKCJuZ0lmIiwhYS5hdXRvZGVwbG95KX19ZnVuY3Rpb24gcnFlKGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2IiwxNikoMiwiYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciIsMTkpLEZ0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksaGUoKSgpLGxpKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPVJlKDIpO2ZlKDIpLE1lKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpfX1mdW5jdGlvbiBpcWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJkaXYi''@;'; put 'put ''LDE2KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOSksRnQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksTWUoInNhc0pzIixh''@;'; put 'put ''LnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIGFxZShjLGwpe2lmKDEmYyYmKHNpKDAsMTIpLGd0KDEsbnFlLDMsMiwibmctY29udGFpbmVyIiwxMykoMixycWUsMywzLCJuZy1jb250''@;'; put 'put ''YWluZXIiLDEzKSgzLGlxZSwzLDMsIm5nLWNvbnRhaW5lciIsMTMpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO01lKCJuZ1N3aXRjaCIsITApLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKCksTWUoIm5n''@;'; put 'put ''U3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc2pzKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19bGV0IFFoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEs''@;'; put 'put ''ZCxoLGYpe3RoaXMuYXBwU3RvcmVTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnN0ZXA9MCx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuY2xpZW50X2lkPSIiLHRoaXMuY2xpZW50X3NlY3JldD0iIix0aGlzLmFwcExv''@;'; put 'put ''Yz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLmF1dG9kZXBsb3k9ITAsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuc2FzSnNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuU2VydmVyVHlwZT1CMC5ZLHRoaXMuZGNBZGFwdGVyU2V0dGluZ3M9''@;'; put 'put ''dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIm1hbnVhbGRlcGxveSIpJiYodGhpcy5hdXRvZGVwbG95PSExKSx0aGlzLnNhc0pzPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0luc3RhbmNlKCksdGhpcy5zYXNKc0Nv''@;'; put 'put ''bmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmFwcExvYz10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHRoaXMuY2xpZW50X2lkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfY2xpZW50X2lkIil8fCIiLHRoaXMuY2xpZW50X3NlY3JldD1s''@;'; put 'put ''b2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X3NlY3JldF9rZXkiKXx8IiIsdGhpcy5kY1BhdGg9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9kY19sb2MiKXx8IiJ9bmdPbkluaXQoKXt0aGlzLnNldERlcGxveURlZmF1bHRzKCl9c2V0RGVwbG95RGVmYXVsdHMoKXt0aGlzLmRjUGF0''@;'; put 'put ''aD10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5kY1BhdGh8fCIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFkbWluR3JvdXB8fCIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwfHwodGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IlNBU0FkbWluaXN0cmF0''@;'; put 'put ''b3JzIil9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYXV0b2RlcGxveXx8dGhpcy5nZXRBZG1pbkdyb3VwcygpLHRoaXMuc3RlcCsrfWdldEFkbWluR3JvdXBzKCl7ZmV0Y2godGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9zb3J0Qnk9bmFtZSZsaW1pdD01''@;'; put 'put ''MDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZDt0cnl7ZD1KU09OLnBhcnNlKGEpfWNhdGNoKGgpe2NvbnNvbGUuZXJyb3IoaCl9ZCYmKHRoaXMuYWRtaW5Hcm91cHM9ZC5pdGVtcyx0aGlzLnNlbGVjdGVk''@;'; put 'put ''QWRtaW5Hcm91cD10aGlzLmFkbWluR3JvdXBzWzBdLmlkKX0pfW9uTmF2aWdhdGVUb0hvbWUoKXt3aW5kb3cub3Blbihsb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0sIl9ibGFuayIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFE4KSxH''@;'; put 'put ''ZShCcyksR2UoU2QpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGVwbG95Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiLCJwb3NpdGlv''@;'; put 'put ''bi1yZWxhdGl2ZSJdLFsxLCJjbHItcm93Il0sWyJpZCIsIlRDUyIsImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCIsNCwibmdJZiJdLFsiaWQiLCJUQ1MiLDEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJjYXJkLXRleHQiXSxbMSwi''@;'; put 'put ''bXQtMCJdLFsiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9ldmFsdWF0aW9uLWxpY2VuY2UtYWdyZWVtZW50IiwidGFyZ2V0IiwiX2JsYW5rIl0sWzEsImxpZ2h0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywiY2hhbmdlIl0sWzMsIm5nU3dp''@;'; put 'put ''dGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJhdXRvZGVwbG95LXNlY3Rpb24gY2FyZCIsNCwibmdJZiJdLFsiaWQiLCJtYWluYm9keSIsImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsxLCJhdXRvZGVwbG95LXNlY3Rpb24iLCJjYXJkIl0sWzMsIm9uTmF2aWdhdGVUb0hvbWUi''@;'; put 'put ''LCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiLCJhcHBMb2MiLCJkY1BhdGgiLCJzZWxlY3RlZEFkbWluR3JvdXAiXSxbImlkIiwibWFpbmJvZHkiLDEsImNhcmQiXSxbMywib25OYXZpZ2F0ZVRvSG9tZSIsInNhc0pzIiwic2FzSnNDb25maWciLCJkY0FkYXB0ZXJT''@;'; put 'put ''ZXR0aW5ncyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxndCgyLFFLZSwxNywwLCJkaXYiLDIpLGhlKCksZ3QoMyxhcWUsNCw0LCJuZy1jb250YWluZXIiLDMpLGhlKCkpLDImZCYmKGZlKDIpLE1lKCJuZ0lmIiwwPT09aC5zdGVwKSxm''@;'; put 'put ''ZSgpLE1lKCJuZ0lmIixoLnN0ZXA+MCkpfSxkZXBlbmRlbmNpZXM6W2JhLFMyLGNwLGRzLElkLFNoLE9LZSxLS2UsSktlXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IG9xZT1be3BhdGg6IiIsY29tcG9uZW50OlFoZX0se3BhdGg6Im1hbnVhbGRlcGxveSIsY29tcG9u''@;'; put 'put ''ZW50OlFoZX1dO2xldCBzcWU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pjLmZvckNoaWxk''@;'; put 'put ''KG9xZSksemNdfSl9fXJldHVybiBjfSkoKSxscWU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6''@;'; put 'put ''W1JhLFJjLHowLHNxZV19KX19cmV0dXJuIGN9KSgpO3koNDk1MzcpLHkoNzc1MjUpLHkoNTc3MikseSg2OTg3NSkseSgxNjA5MykseSg5NTYwOCkseSgxNjQ5MykseSg2MTkzNCkseSgxMDEwMSkseSgyNjg4OSkseSg0MzI4NykseSg2NTc0NSkseSgyOTcwOCkseSg2NTExNykseSgxMDM2Myk7''@;'; put 'put ''Y29uc3R7ZW50cmllczplMmUsc2V0UHJvdG90eXBlT2Y6dDJlLGlzRnJvemVuOmNxZSxnZXRQcm90b3R5cGVPZjp1cWUsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmRxZX09T2JqZWN0O2xldHtmcmVlemU6WTEsc2VhbDpIMixjcmVhdGU6bjJlfT1PYmplY3Qse2FwcGx5OnQkLGNvbnN0cnVj''@;'; put 'put ''dDpuJH09dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0O1kxfHwoWTE9ZnVuY3Rpb24obCl7cmV0dXJuIGx9KSxIMnx8KEgyPWZ1bmN0aW9uKGwpe3JldHVybiBsfSksdCR8fCh0JD1mdW5jdGlvbihsLGEsZCl7cmV0dXJuIGwuYXBwbHkoYSxkKX0pLG4kfHwobiQ9ZnVuY3Rpb24obCxhKXty''@;'; put 'put ''ZXR1cm4gbmV3IGwoLi4uYSl9KTtjb25zdCBUTz0kMShBcnJheS5wcm90b3R5cGUuZm9yRWFjaCksaHFlPSQxKEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZikscjJlPSQxKEFycmF5LnByb3RvdHlwZS5wb3ApLHNFPSQxKEFycmF5LnByb3RvdHlwZS5wdXNoKSxmcWU9JDEoQXJyYXkucHJv''@;'; put 'put ''dG90eXBlLnNwbGljZSksQU89JDEoU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSksciQ9JDEoU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyksaTJlPSQxKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLGxFPSQxKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSkscHFlPSQxKFN0cmluZy5wcm90''@;'; put 'put ''b3R5cGUuaW5kZXhPZiksZ3FlPSQxKFN0cmluZy5wcm90b3R5cGUudHJpbSksdDM9JDEoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksRzE9JDEoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxjRT1mdW5jdGlvbiBtcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBsPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG4kKGMsYSl9fShUeXBlRXJyb3IpO2Z1bmN0aW9uICQxKGMpe3JldHVybiBmdW5jdGlvbihsKXtsIGluc3RhbmNlb2YgUmVnRXhwJiYobC5sYXN0SW5kZXg9MCk7Zm9yKHZhciBh''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3JldHVybiB0JChjLGwsZCl9fWZ1bmN0aW9uIGJzKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRz''@;'; put 'put ''WzJdOkFPO3QyZSYmdDJlKGMsbnVsbCk7bGV0IGQ9bC5sZW5ndGg7Zm9yKDtkLS07KXtsZXQgaD1sW2RdO2lmKCJzdHJpbmciPT10eXBlb2YgaCl7Y29uc3QgZj1hKGgpO2YhPT1oJiYoY3FlKGwpfHwobFtkXT1mKSxoPWYpfWNbaF09ITB9cmV0dXJuIGN9ZnVuY3Rpb24gdnFlKGMpe2Zvcihs''@;'; put 'put ''ZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKXQzKGMsbCl8fChjW2xdPW51bGwpO3JldHVybiBjfWZ1bmN0aW9uIG1nKGMpe2NvbnN0IGw9bjJlKG51bGwpO2Zvcihjb25zdFthLGRdb2YgZTJlKGMpKXQzKGMsYSkmJihsW2FdPUFycmF5LmlzQXJyYXkoZCk/dnFlKGQpOmQmJiJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgZCYmZC5jb25zdHJ1Y3Rvcj09PU9iamVjdD9tZyhkKTpkKTtyZXR1cm4gbH1mdW5jdGlvbiB1RShjLGwpe2Zvcig7bnVsbCE9PWM7KXtjb25zdCBkPWRxZShjLGwpO2lmKGQpe2lmKGQuZ2V0KXJldHVybiAkMShkLmdldCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGQudmFsdWUpcmV0dXJu''@;'; put 'put ''ICQxKGQudmFsdWUpfWM9dXFlKGMpfXJldHVybiBmdW5jdGlvbiBhKCl7cmV0dXJuIG51bGx9fWNvbnN0IGEyZT1ZMShbImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJi''@;'; put 'put ''bG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNlbnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb250ZW50IiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9n''@;'; put 'put ''IiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1lbnQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImki''@;'; put 'put ''LCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYWluIiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVudWl0ZW0iLCJtZXRlciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUi''@;'; put 'put ''LCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2VjdGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxl''@;'; put 'put ''IiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXSksaSQ9WTEoWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBo''@;'; put 'put ''aXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBoIiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxp''@;'; put 'put ''bmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRp''@;'; put 'put ''dGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLGEkPVkxKFsiZmVCbGVuZCIsImZlQ29sb3JNYXRyaXgiLCJmZUNvbXBvbmVudFRyYW5zZmVyIiwiZmVDb21wb3NpdGUiLCJmZUNvbnZvbHZlTWF0cml4IiwiZmVEaWZmdXNlTGlnaHRpbmciLCJmZURpc3BsYWNlbWVudE1hcCIs''@;'; put 'put ''ImZlRGlzdGFudExpZ2h0IiwiZmVEcm9wU2hhZG93IiwiZmVGbG9vZCIsImZlRnVuY0EiLCJmZUZ1bmNCIiwiZmVGdW5jRyIsImZlRnVuY1IiLCJmZUdhdXNzaWFuQmx1ciIsImZlSW1hZ2UiLCJmZU1lcmdlIiwiZmVNZXJnZU5vZGUiLCJmZU1vcnBob2xvZ3kiLCJmZU9mZnNldCIsImZlUG9p''@;'; put 'put ''bnRMaWdodCIsImZlU3BlY3VsYXJMaWdodGluZyIsImZlU3BvdExpZ2h0IiwiZmVUaWxlIiwiZmVUdXJidWxlbmNlIl0pLGJxZT1ZMShbImFuaW1hdGUiLCJjb2xvci1wcm9maWxlIiwiY3Vyc29yIiwiZGlzY2FyZCIsImZvbnQtZmFjZSIsImZvbnQtZmFjZS1mb3JtYXQiLCJmb250LWZhY2Ut''@;'; put 'put ''bmFtZSIsImZvbnQtZmFjZS1zcmMiLCJmb250LWZhY2UtdXJpIiwiZm9yZWlnbm9iamVjdCIsImhhdGNoIiwiaGF0Y2hwYXRoIiwibWVzaCIsIm1lc2hncmFkaWVudCIsIm1lc2hwYXRjaCIsIm1lc2hyb3ciLCJtaXNzaW5nLWdseXBoIiwic2NyaXB0Iiwic2V0Iiwic29saWRjb2xvciIsInVu''@;'; put 'put ''a25vd24iLCJ1c2UiXSksbyQ9WTEoWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVyIiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93Iiwi''@;'; put 'put ''bXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciIsIm1wcmVzY3JpcHRzIl0pLHlxZT1ZMShbIm1hY3Rpb24iLCJtYWxpZ25ncm91cCIsIm1hbGlnbm1hcmsi''@;'; put 'put ''LCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2FycnkiLCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ciLCJzZW1hbnRpY3MiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIsIm5vbmUiXSksbzJlPVkxKFsiI3RleHQiXSksczJlPVkxKFsiYWNj''@;'; put 'put ''ZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwi''@;'; put 'put ''Y2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBp''@;'; put 'put ''Y3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0''@;'; put 'put ''bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIs''@;'; put 'put ''Im5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvcG92ZXIiLCJwb3BvdmVydGFyZ2V0IiwicG9wb3ZlcnRhcmdldGFjdGlvbiIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwi''@;'; put 'put ''cmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3Jj''@;'; put 'put ''Iiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsIndyYXAiLCJ4bWxucyIsInNsb3QiXSkscyQ9WTEoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0''@;'; put 'put ''ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYW1wbGl0dWRlIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAi''@;'; put 'put ''LCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1''@;'; put 'put ''c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJleHBvbmVudCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxv''@;'; put 'put ''b2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGll''@;'; put 'put ''bnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJpbnRlcmNlcHQiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFu''@;'; put 'put ''ZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwi''@;'; put 'put ''bWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlv''@;'; put 'put ''biIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmlt''@;'; put 'put ''aXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzbG9wZSIsInNwZWN1bGFyY29uc3RhbnQiLCJz''@;'; put 'put ''cGVjdWxhcmV4cG9uZW50Iiwic3ByZWFkbWV0aG9kIiwic3RhcnRvZmZzZXQiLCJzdGRkZXZpYXRpb24iLCJzdGl0Y2h0aWxlcyIsInN0b3AtY29sb3IiLCJzdG9wLW9wYWNpdHkiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtbGluZWNhcCIsInN0cm9r''@;'; put 'put ''ZS1saW5lam9pbiIsInN0cm9rZS1taXRlcmxpbWl0Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2Utd2lkdGgiLCJzdHlsZSIsInN1cmZhY2VzY2FsZSIsInN5c3RlbWxhbmd1YWdlIiwidGFiaW5kZXgiLCJ0YWJsZXZhbHVlcyIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNm''@;'; put 'put ''b3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYt''@;'; put 'put ''eSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFu''@;'; put 'put ''ZHBhbiJdKSxsMmU9WTEoWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNv''@;'; put 'put ''ZGluZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxxdW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5z''@;'; put 'put ''aXplIiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dzcGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIi''@;'; put 'put ''LCJzZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksa089WTEoWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUi''@;'; put 'put ''LCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSxfcWU9SDIoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSx3cWU9SDIoLzwlW1x3XFddKnxbXHdcV10qJT4vZ20pLENxZT1IMigvXCRce1tcd1xXXSovZ20pLFNxZT1IMigvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0rJC8pLE1xZT1I''@;'; put 'put ''MigvXmFyaWEtW1wtXHddKyQvKSxjMmU9SDIoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwfG1hdHJpeCk6fFteYS16XXxbYS16Ky5cLV0rKD86W15hLXorLlwtOl18JCkpL2kpLHhxZT1IMigvXig/Olx3K3NjcmlwdHxkYXRhKTovaSksRXFlPUgy''@;'; put 'put ''KC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLHUyZT1IMigvXmh0bWwkL2kpLFRxZT1IMigvXlthLXpdWy5cd10qKC1bLlx3XSspKyQvaSk7dmFyIGQyZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxBUklBX0FUVFI6''@;'; put 'put ''TXFlLEFUVFJfV0hJVEVTUEFDRTpFcWUsQ1VTVE9NX0VMRU1FTlQ6VHFlLERBVEFfQVRUUjpTcWUsRE9DVFlQRV9OQU1FOnUyZSxFUkJfRVhQUjp3cWUsSVNfQUxMT1dFRF9VUkk6YzJlLElTX1NDUklQVF9PUl9EQVRBOnhxZSxNVVNUQUNIRV9FWFBSOl9xZSxUTVBMSVRfRVhQUjpDcWV9KTt2''@;'; put 'put ''YXIgRHFlPWZ1bmN0aW9uIGYyZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdztjb25zdCBsPWNvPT5mMmUoY28pO2lmKGwudmVyc2lvbj0iMy4yLjYiLGwucmVtb3ZlZD1b''@;'; put 'put ''XSwhY3x8IWMuZG9jdW1lbnR8fDkhPT1jLmRvY3VtZW50Lm5vZGVUeXBlfHwhYy5FbGVtZW50KXJldHVybiBsLmlzU3VwcG9ydGVkPSExLGw7bGV0e2RvY3VtZW50OmF9PWM7Y29uc3QgZD1hLGg9ZC5jdXJyZW50U2NyaXB0LHtEb2N1bWVudEZyYWdtZW50OmYsSFRNTFRlbXBsYXRlRWxlbWVu''@;'; put 'put ''dDp2LE5vZGU6TSxFbGVtZW50OkQsTm9kZUZpbHRlcjpaLE5hbWVkTm9kZU1hcDpyZT1jLk5hbWVkTm9kZU1hcHx8Yy5Nb3pOYW1lZEF0dHJNYXAsSFRNTEZvcm1FbGVtZW50OmNlLERPTVBhcnNlcjpiZSx0cnVzdGVkVHlwZXM6RWV9PWMsQmU9RC5wcm90b3R5cGUscWU9dUUoQmUsImNsb25l''@;'; put 'put ''Tm9kZSIpLHJ0PXVFKEJlLCJyZW1vdmUiKSxwdD11RShCZSwibmV4dFNpYmxpbmciKSxkdD11RShCZSwiY2hpbGROb2RlcyIpLEp0PXVFKEJlLCJwYXJlbnROb2RlIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHYpe2NvbnN0IGNvPWEuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtjby5jb250''@;'; put 'put ''ZW50JiZjby5jb250ZW50Lm93bmVyRG9jdW1lbnQmJihhPWNvLmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IHZuLENuPSIiO2NvbnN0e2ltcGxlbWVudGF0aW9uOnRuLGNyZWF0ZU5vZGVJdGVyYXRvcjpNbixjcmVhdGVEb2N1bWVudEZyYWdtZW50OkNyLGdldEVsZW1lbnRzQnlUYWdOYW1l''@;'; put 'put ''OkdyfT1hLHtpbXBvcnROb2RlOm1yfT1kO2xldCBHbj17YWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzOltdLGFmdGVyU2FuaXRpemVTaGFkb3dET006W10sYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzOltdLGJlZm9yZVNhbml0aXplRWxlbWVudHM6W10s''@;'; put 'put ''YmVmb3JlU2FuaXRpemVTaGFkb3dET006W10sdXBvblNhbml0aXplQXR0cmlidXRlOltdLHVwb25TYW5pdGl6ZUVsZW1lbnQ6W10sdXBvblNhbml0aXplU2hhZG93Tm9kZTpbXX07bC5pc1N1cHBvcnRlZD0iZnVuY3Rpb24iPT10eXBlb2YgZTJlJiYiZnVuY3Rpb24iPT10eXBlb2YgSnQmJnRu''@;'; put 'put ''JiZ2b2lkIDAhPT10bi5jcmVhdGVIVE1MRG9jdW1lbnQ7Y29uc3R7TVVTVEFDSEVfRVhQUjphaSxFUkJfRVhQUjpfaSxUTVBMSVRfRVhQUjpPbixEQVRBX0FUVFI6enIsQVJJQV9BVFRSOkpuLElTX1NDUklQVF9PUl9EQVRBOklyLEFUVFJfV0hJVEVTUEFDRTokcixDVVNUT01fRUxFTUVOVDp3''@;'; put 'put ''aX09ZDJlO2xldHtJU19BTExPV0VEX1VSSTplYX09ZDJlLGZhPW51bGw7Y29uc3QgdnQ9YnMoe30sWy4uLmEyZSwuLi5pJCwuLi5hJCwuLi5vJCwuLi5vMmVdKTtsZXQgTnQ9bnVsbDtjb25zdCBIdD1icyh7fSxbLi4uczJlLC4uLnMkLC4uLmwyZSwuLi5rT10pO2xldCBIbj1PYmplY3Quc2Vh''@;'; put 'put ''bChuMmUobnVsbCx7dGFnTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhdHRyaWJ1dGVOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGFsbG93Q3VzdG9t''@;'; put 'put ''aXplZEJ1aWx0SW5FbGVtZW50czp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6ITF9fSkpLHRyPW51bGwsYXI9bnVsbCxIcj0hMCxxcj0hMCxvbj0hMSx5bj0hMCxwbj0hMSxwcj0hMCwkbj0hMSxkcj0hMSxVcj0hMSxabj0hMSxzcj0hMSxOcj0hMSxN''@;'; put 'put ''cj0hMCxacj0hMSxCYT0hMCxJbz0hMSxabz17fSxwcz1udWxsO2NvbnN0IE1vPWJzKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJu''@;'; put 'put ''b2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSk7bGV0IGhzPW51bGw7Y29uc3QgbmM9YnMoe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNl''@;'; put 'put ''IiwiaW1hZ2UiLCJ0cmFjayJdKTtsZXQgUW89bnVsbDtjb25zdCBNMz1icyh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLGFk''@;'; put 'put ''PSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixVcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEpjPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtsZXQgcXM9SmMsQmw9ITEsZXM9bnVsbDtjb25zdCBFMT1icyh7fSxbYWQsVXMsSmNdLHIkKTtsZXQgeDM9''@;'; put 'put ''YnMoe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0Il0pLFFnPWJzKHt9LFsiYW5ub3RhdGlvbi14bWwiXSk7Y29uc3QgZDQ9YnMoe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSk7bGV0IGF2PW51bGw7Y29uc3QgVkE9WyJhcHBsaWNhdGlvbi94aHRtbCt4bWwi''@;'; put 'put ''LCJ0ZXh0L2h0bWwiXTtsZXQgJGE9bnVsbCx4Nj1udWxsO2NvbnN0IFd0ZT1hLmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxaTj1mdW5jdGlvbihncil7cmV0dXJuIGdyIGluc3RhbmNlb2YgUmVnRXhwfHxnciBpbnN0YW5jZW9mIEZ1bmN0aW9ufSxCQT1mdW5jdGlvbigpe2xldCBncj1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307aWYoIXg2fHx4NiE9PWdyKXtpZigoIWdyfHwib2JqZWN0IiE9dHlwZW9mIGdyKSYmKGdyPXt9KSxncj1tZyhnciksYXY9LTE9PT1WQS5pbmRleE9mKGdyLlBBUlNFUl9NRURJQV9UWVBFKT8idGV4dC9o''@;'; put 'put ''dG1sIjpnci5QQVJTRVJfTUVESUFfVFlQRSwkYT0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PWF2P3IkOkFPLGZhPXQzKGdyLCJBTExPV0VEX1RBR1MiKT9icyh7fSxnci5BTExPV0VEX1RBR1MsJGEpOnZ0LE50PXQzKGdyLCJBTExPV0VEX0FUVFIiKT9icyh7fSxnci5BTExPV0VEX0FUVFIs''@;'; put 'put ''JGEpOkh0LGVzPXQzKGdyLCJBTExPV0VEX05BTUVTUEFDRVMiKT9icyh7fSxnci5BTExPV0VEX05BTUVTUEFDRVMsciQpOkUxLFFvPXQzKGdyLCJBRERfVVJJX1NBRkVfQVRUUiIpP2JzKG1nKE0zKSxnci5BRERfVVJJX1NBRkVfQVRUUiwkYSk6TTMsaHM9dDMoZ3IsIkFERF9EQVRBX1VSSV9U''@;'; put 'put ''QUdTIik/YnMobWcobmMpLGdyLkFERF9EQVRBX1VSSV9UQUdTLCRhKTpuYyxwcz10MyhnciwiRk9SQklEX0NPTlRFTlRTIik/YnMoe30sZ3IuRk9SQklEX0NPTlRFTlRTLCRhKTpNbyx0cj10MyhnciwiRk9SQklEX1RBR1MiKT9icyh7fSxnci5GT1JCSURfVEFHUywkYSk6bWcoe30pLGFyPXQz''@;'; put 'put ''KGdyLCJGT1JCSURfQVRUUiIpP2JzKHt9LGdyLkZPUkJJRF9BVFRSLCRhKTptZyh7fSksWm89ISF0MyhnciwiVVNFX1BST0ZJTEVTIikmJmdyLlVTRV9QUk9GSUxFUyxIcj0hMSE9PWdyLkFMTE9XX0FSSUFfQVRUUixxcj0hMSE9PWdyLkFMTE9XX0RBVEFfQVRUUixvbj1nci5BTExPV19VTktO''@;'; put 'put ''T1dOX1BST1RPQ09MU3x8ITEseW49ITEhPT1nci5BTExPV19TRUxGX0NMT1NFX0lOX0FUVFIscG49Z3IuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxwcj0hMSE9PWdyLlNBRkVfRk9SX1hNTCwkbj1nci5XSE9MRV9ET0NVTUVOVHx8ITEsWm49Z3IuUkVUVVJOX0RPTXx8ITEsc3I9Z3IuUkVUVVJO''@;'; put 'put ''X0RPTV9GUkFHTUVOVHx8ITEsTnI9Z3IuUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsVXI9Z3IuRk9SQ0VfQk9EWXx8ITEsTXI9ITEhPT1nci5TQU5JVElaRV9ET00sWnI9Z3IuU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLEJhPSExIT09Z3IuS0VFUF9DT05URU5ULElvPWdyLklOX1BMQUNFfHwh''@;'; put 'put ''MSxlYT1nci5BTExPV0VEX1VSSV9SRUdFWFB8fGMyZSxxcz1nci5OQU1FU1BBQ0V8fEpjLHgzPWdyLk1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU3x8eDMsUWc9Z3IuSFRNTF9JTlRFR1JBVElPTl9QT0lOVFN8fFFnLEhuPWdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HfHx7fSxnci5D''@;'; put 'put ''VVNUT01fRUxFTUVOVF9IQU5ETElORyYmWk4oZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKEhuLnRhZ05hbWVDaGVjaz1nci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spLGdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZaTihnci5DVVNU''@;'; put 'put ''T01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYoSG4uYXR0cmlidXRlTmFtZUNoZWNrPWdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayksZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJiJib29sZWFuIj09dHlwZW9mIGdyLkNVU1RP''@;'; put 'put ''TV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKEhuLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz1nci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMpLHBuJiYocXI9ITEpLHNyJiYoWm49''@;'; put 'put ''ITApLFpvJiYoZmE9YnMoe30sbzJlKSxOdD1bXSwhMD09PVpvLmh0bWwmJihicyhmYSxhMmUpLGJzKE50LHMyZSkpLCEwPT09Wm8uc3ZnJiYoYnMoZmEsaSQpLGJzKE50LHMkKSxicyhOdCxrTykpLCEwPT09Wm8uc3ZnRmlsdGVycyYmKGJzKGZhLGEkKSxicyhOdCxzJCksYnMoTnQsa08pKSwh''@;'; put 'put ''MD09PVpvLm1hdGhNbCYmKGJzKGZhLG8kKSxicyhOdCxsMmUpLGJzKE50LGtPKSkpLGdyLkFERF9UQUdTJiYoZmE9PT12dCYmKGZhPW1nKGZhKSksYnMoZmEsZ3IuQUREX1RBR1MsJGEpKSxnci5BRERfQVRUUiYmKE50PT09SHQmJihOdD1tZyhOdCkpLGJzKE50LGdyLkFERF9BVFRSLCRhKSks''@;'; put 'put ''Z3IuQUREX1VSSV9TQUZFX0FUVFImJmJzKFFvLGdyLkFERF9VUklfU0FGRV9BVFRSLCRhKSxnci5GT1JCSURfQ09OVEVOVFMmJihwcz09PU1vJiYocHM9bWcocHMpKSxicyhwcyxnci5GT1JCSURfQ09OVEVOVFMsJGEpKSxCYSYmKGZhWyIjdGV4dCJdPSEwKSwkbiYmYnMoZmEsWyJodG1sIiwi''@;'; put 'put ''aGVhZCIsImJvZHkiXSksZmEudGFibGUmJihicyhmYSxbInRib2R5Il0pLGRlbGV0ZSB0ci50Ym9keSksZ3IuVFJVU1RFRF9UWVBFU19QT0xJQ1kpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnci5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MKXRocm93IGNFKCdUUlVTVEVEX1RZUEVT''@;'; put 'put ''X1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZ3IuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMKXRocm93IGNFKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1''@;'; put 'put ''cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO3ZuPWdyLlRSVVNURURfVFlQRVNfUE9MSUNZLENuPXZuLmNyZWF0ZUhUTUwoIiIpfWVsc2Ugdm9pZCAwPT09dm4mJih2bj1mdW5jdGlvbihsLGEpe2lmKCJvYmplY3QiIT10eXBlb2YgbHx8ImZ1''@;'; put 'put ''bmN0aW9uIiE9dHlwZW9mIGwuY3JlYXRlUG9saWN5KXJldHVybiBudWxsO2xldCBkPW51bGw7Y29uc3QgaD0iZGF0YS10dC1wb2xpY3ktc3VmZml4IjthJiZhLmhhc0F0dHJpYnV0ZShoKSYmKGQ9YS5nZXRBdHRyaWJ1dGUoaCkpO2NvbnN0IGY9ImRvbXB1cmlmeSIrKGQ/IiMiK2Q6IiIpO3Ry''@;'; put 'put ''eXtyZXR1cm4gbC5jcmVhdGVQb2xpY3koZix7Y3JlYXRlSFRNTDp2PT52LGNyZWF0ZVNjcmlwdFVSTDp2PT52fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK2YrIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX0oRWUsaCkpLG51bGwhPT12''@;'; put 'put ''biYmInN0cmluZyI9PXR5cGVvZiBDbiYmKENuPXZuLmNyZWF0ZUhUTUwoIiIpKTtZMSYmWTEoZ3IpLHg2PWdyfX0sV049YnMoe30sWy4uLmkkLC4uLmEkLC4uLmJxZV0pLFlOPWJzKHt9LFsuLi5vJCwuLi55cWVdKSxZdD1mdW5jdGlvbihncil7c0UobC5yZW1vdmVkLHtlbGVtZW50OmdyfSk7''@;'; put 'put ''dHJ5e0p0KGdyKS5yZW1vdmVDaGlsZChncil9Y2F0Y2h7cnQoZ3IpfX0sdjA9ZnVuY3Rpb24oZ3IsUWkpe3RyeXtzRShsLnJlbW92ZWQse2F0dHJpYnV0ZTpRaS5nZXRBdHRyaWJ1dGVOb2RlKGdyKSxmcm9tOlFpfSl9Y2F0Y2h7c0UobC5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOlFp''@;'; put 'put ''fSl9aWYoUWkucmVtb3ZlQXR0cmlidXRlKGdyKSwiaXMiPT09Z3IpaWYoWm58fHNyKXRyeXtZdChRaSl9Y2F0Y2h7fWVsc2UgdHJ5e1FpLnNldEF0dHJpYnV0ZShnciwiIil9Y2F0Y2h7fX0sWnM9ZnVuY3Rpb24oZ3Ipe2xldCBRaT1udWxsLFhhPW51bGw7aWYoVXIpZ3I9IjxyZW1vdmU+PC9y''@;'; put 'put ''ZW1vdmU+IitncjtlbHNle2NvbnN0IFJ1PWkyZShnciwvXltcclxuXHQgXSsvKTtYYT1SdSYmUnVbMF19ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1hdiYmcXM9PT1KYyYmKGdyPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5''@;'; put 'put ''PicrZ3IrIjwvYm9keT48L2h0bWw+Iik7Y29uc3QgZGM9dm4/dm4uY3JlYXRlSFRNTChncik6Z3I7aWYocXM9PT1KYyl0cnl7UWk9KG5ldyBiZSkucGFyc2VGcm9tU3RyaW5nKGRjLGF2KX1jYXRjaHt9aWYoIVFpfHwhUWkuZG9jdW1lbnRFbGVtZW50KXtRaT10bi5jcmVhdGVEb2N1bWVudChx''@;'; put 'put ''cywidGVtcGxhdGUiLG51bGwpO3RyeXtRaS5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MPUJsP0NuOmRjfWNhdGNoe319Y29uc3QgQTA9UWkuYm9keXx8UWkuZG9jdW1lbnRFbGVtZW50O3JldHVybiBnciYmWGEmJkEwLmluc2VydEJlZm9yZShhLmNyZWF0ZVRleHROb2RlKFhhKSxBMC5jaGls''@;'; put 'put ''ZE5vZGVzWzBdfHxudWxsKSxxcz09PUpjP0dyLmNhbGwoUWksJG4/Imh0bWwiOiJib2R5IilbMF06JG4/UWkuZG9jdW1lbnRFbGVtZW50OkEwfSxHTj1mdW5jdGlvbihncil7cmV0dXJuIE1uLmNhbGwoZ3Iub3duZXJEb2N1bWVudHx8Z3IsZ3IsWi5TSE9XX0VMRU1FTlR8Wi5TSE9XX0NPTU1F''@;'; put 'put ''TlR8Wi5TSE9XX1RFWFR8Wi5TSE9XX1BST0NFU1NJTkdfSU5TVFJVQ1RJT058Wi5TSE9XX0NEQVRBX1NFQ1RJT04sbnVsbCl9LEU2PWZ1bmN0aW9uKGdyKXtyZXR1cm4gZ3IgaW5zdGFuY2VvZiBjZSYmKCJzdHJpbmciIT10eXBlb2YgZ3Iubm9kZU5hbWV8fCJzdHJpbmciIT10eXBlb2YgZ3Iu''@;'; put 'put ''dGV4dENvbnRlbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBnci5yZW1vdmVDaGlsZHx8IShnci5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgcmUpfHwiZnVuY3Rpb24iIT10eXBlb2YgZ3IucmVtb3ZlQXR0cmlidXRlfHwiZnVuY3Rpb24iIT10eXBlb2YgZ3Iuc2V0QXR0cmlidXRlfHwic3RyaW5nIiE9''@;'; put 'put ''dHlwZW9mIGdyLm5hbWVzcGFjZVVSSXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGdyLmluc2VydEJlZm9yZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGdyLmhhc0NoaWxkTm9kZXMpfSxlNT1mdW5jdGlvbihncil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE0mJmdyIGluc3RhbmNlb2YgTX07ZnVuY3Rp''@;'; put 'put ''b24gRTMoY28sZ3IsUWkpe1RPKGNvLFhhPT57WGEuY2FsbChsLGdyLFFpLHg2KX0pfWNvbnN0ICROPWZ1bmN0aW9uKGdyKXtsZXQgUWk9bnVsbDtpZihFMyhHbi5iZWZvcmVTYW5pdGl6ZUVsZW1lbnRzLGdyLG51bGwpLEU2KGdyKSlyZXR1cm4gWXQoZ3IpLCEwO2NvbnN0IFhhPSRhKGdyLm5v''@;'; put 'put ''ZGVOYW1lKTtpZihFMyhHbi51cG9uU2FuaXRpemVFbGVtZW50LGdyLHt0YWdOYW1lOlhhLGFsbG93ZWRUYWdzOmZhfSkscHImJmdyLmhhc0NoaWxkTm9kZXMoKSYmIWU1KGdyLmZpcnN0RWxlbWVudENoaWxkKSYmRzEoLzxbL1x3IV0vZyxnci5pbm5lckhUTUwpJiZHMSgvPFsvXHchXS9nLGdy''@;'; put 'put ''LnRleHRDb250ZW50KXx8Nz09PWdyLm5vZGVUeXBlfHxwciYmOD09PWdyLm5vZGVUeXBlJiZHMSgvPFsvXHddL2csZ3IuZGF0YSkpcmV0dXJuIFl0KGdyKSwhMDtpZighZmFbWGFdfHx0cltYYV0pe2lmKCF0cltYYV0mJnFOKFhhKSYmKEhuLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4''@;'; put 'put ''cCYmRzEoSG4udGFnTmFtZUNoZWNrLFhhKXx8SG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkhuLnRhZ05hbWVDaGVjayhYYSkpKXJldHVybiExO2lmKEJhJiYhcHNbWGFdKXtjb25zdCBkYz1KdChncil8fGdyLnBhcmVudE5vZGUsQTA9ZHQoZ3IpfHxnci5jaGlsZE5vZGVz''@;'; put 'put ''O2lmKEEwJiZkYylmb3IobGV0IFQxPUEwLmxlbmd0aC0xO1QxPj0wOy0tVDEpe2NvbnN0IFpoPXFlKEEwW1QxXSwhMCk7WmguX19yZW1vdmFsQ291bnQ9KGdyLl9fcmVtb3ZhbENvdW50fHwwKSsxLGRjLmluc2VydEJlZm9yZShaaCxwdChncikpfX1yZXR1cm4gWXQoZ3IpLCEwfXJldHVybiBn''@;'; put 'put ''ciBpbnN0YW5jZW9mIEQmJiFmdW5jdGlvbihncil7bGV0IFFpPUp0KGdyKTsoIVFpfHwhUWkudGFnTmFtZSkmJihRaT17bmFtZXNwYWNlVVJJOnFzLHRhZ05hbWU6InRlbXBsYXRlIn0pO2NvbnN0IFhhPUFPKGdyLnRhZ05hbWUpLGRjPUFPKFFpLnRhZ05hbWUpO3JldHVybiEhZXNbZ3IubmFt''@;'; put 'put ''ZXNwYWNlVVJJXSYmKGdyLm5hbWVzcGFjZVVSST09PVVzP1FpLm5hbWVzcGFjZVVSST09PUpjPyJzdmciPT09WGE6UWkubmFtZXNwYWNlVVJJPT09YWQ/InN2ZyI9PT1YYSYmKCJhbm5vdGF0aW9uLXhtbCI9PT1kY3x8eDNbZGNdKTohIVdOW1hhXTpnci5uYW1lc3BhY2VVUkk9PT1hZD9RaS5u''@;'; put 'put ''YW1lc3BhY2VVUkk9PT1KYz8ibWF0aCI9PT1YYTpRaS5uYW1lc3BhY2VVUkk9PT1Vcz8ibWF0aCI9PT1YYSYmUWdbZGNdOiEhWU5bWGFdOmdyLm5hbWVzcGFjZVVSST09PUpjPyEoUWkubmFtZXNwYWNlVVJJPT09VXMmJiFRZ1tkY118fFFpLm5hbWVzcGFjZVVSST09PWFkJiYheDNbZGNdKSYm''@;'; put 'put ''IVlOW1hhXSYmKGQ0W1hhXXx8IVdOW1hhXSk6ISgiYXBwbGljYXRpb24veGh0bWwreG1sIiE9PWF2fHwhZXNbZ3IubmFtZXNwYWNlVVJJXSkpfShncil8fCgibm9zY3JpcHQiPT09WGF8fCJub2VtYmVkIj09PVhhfHwibm9mcmFtZXMiPT09WGEpJiZHMSgvPFwvbm8oc2NyaXB0fGVtYmVkfGZy''@;'; put 'put ''YW1lcykvaSxnci5pbm5lckhUTUwpPyhZdChnciksITApOihwbiYmMz09PWdyLm5vZGVUeXBlJiYoUWk9Z3IudGV4dENvbnRlbnQsVE8oW2FpLF9pLE9uXSxkYz0+e1FpPWxFKFFpLGRjLCIgIil9KSxnci50ZXh0Q29udGVudCE9PVFpJiYoc0UobC5yZW1vdmVkLHtlbGVtZW50OmdyLmNsb25l''@;'; put 'put ''Tm9kZSgpfSksZ3IudGV4dENvbnRlbnQ9UWkpKSxFMyhHbi5hZnRlclNhbml0aXplRWxlbWVudHMsZ3IsbnVsbCksITEpfSxLTj1mdW5jdGlvbihncixRaSxYYSl7aWYoTXImJigiaWQiPT09UWl8fCJuYW1lIj09PVFpKSYmKFhhIGluIGF8fFhhIGluIFd0ZSkpcmV0dXJuITE7aWYoKCFxcnx8''@;'; put 'put ''YXJbUWldfHwhRzEoenIsUWkpKSYmKCFIcnx8IUcxKEpuLFFpKSkpaWYoIU50W1FpXXx8YXJbUWldKXtpZighKHFOKGdyKSYmKEhuLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRzEoSG4udGFnTmFtZUNoZWNrLGdyKXx8SG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rp''@;'; put 'put ''b24mJkhuLnRhZ05hbWVDaGVjayhncikpJiYoSG4uYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZHMShIbi5hdHRyaWJ1dGVOYW1lQ2hlY2ssUWkpfHxIbi5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmSG4uYXR0cmlidXRlTmFtZUNoZWNrKFFp''@;'; put 'put ''KSl8fCJpcyI9PT1RaSYmSG4uYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYoSG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZHMShIbi50YWdOYW1lQ2hlY2ssWGEpfHxIbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmSG4udGFnTmFtZUNoZWNrKFhh''@;'; put 'put ''KSkpKXJldHVybiExfWVsc2UgaWYoIVFvW1FpXSYmIUcxKGVhLGxFKFhhLCRyLCIiKSkmJigic3JjIiE9PVFpJiYieGxpbms6aHJlZiIhPT1RaSYmImhyZWYiIT09UWl8fCJzY3JpcHQiPT09Z3J8fDAhPT1wcWUoWGEsImRhdGE6Iil8fCFoc1tncl0pJiYoIW9ufHxHMShJcixsRShYYSwkciwi''@;'; put 'put ''IikpKSYmWGEpcmV0dXJuITE7cmV0dXJuITB9LHFOPWZ1bmN0aW9uKGdyKXtyZXR1cm4iYW5ub3RhdGlvbi14bWwiIT09Z3ImJmkyZShncix3aSl9LFhOPWZ1bmN0aW9uKGdyKXtFMyhHbi5iZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMsZ3IsbnVsbCk7Y29uc3R7YXR0cmlidXRlczpRaX09Z3I7''@;'; put 'put ''aWYoIVFpfHxFNihncikpcmV0dXJuO2NvbnN0IFhhPXthdHRyTmFtZToiIixhdHRyVmFsdWU6IiIsa2VlcEF0dHI6ITAsYWxsb3dlZEF0dHJpYnV0ZXM6TnQsZm9yY2VLZWVwQXR0cjp2b2lkIDB9O2xldCBkYz1RaS5sZW5ndGg7Zm9yKDtkYy0tOyl7Y29uc3QgQTA9UWlbZGNdLHtuYW1lOlJ1''@;'; put 'put ''LG5hbWVzcGFjZVVSSTpUMSx2YWx1ZTpaaH09QTAsc3Y9JGEoUnUpLHpBPVpoO2xldCBrMD0idmFsdWUiPT09UnU/ekE6Z3FlKHpBKTtpZihYYS5hdHRyTmFtZT1zdixYYS5hdHRyVmFsdWU9azAsWGEua2VlcEF0dHI9ITAsWGEuZm9yY2VLZWVwQXR0cj12b2lkIDAsRTMoR24udXBvblNhbml0''@;'; put 'put ''aXplQXR0cmlidXRlLGdyLFhhKSxrMD1YYS5hdHRyVmFsdWUsWnImJigiaWQiPT09c3Z8fCJuYW1lIj09PXN2KSYmKHYwKFJ1LGdyKSxrMD0idXNlci1jb250ZW50LSIrazApLHByJiZHMSgvKCgtLSE/fF0pPil8PFwvKHN0eWxlfHRpdGxlKS9pLGswKSl7djAoUnUsZ3IpO2NvbnRpbnVlfWlm''@;'; put 'put ''KFhhLmZvcmNlS2VlcEF0dHIpY29udGludWU7aWYoIVhhLmtlZXBBdHRyKXt2MChSdSxncik7Y29udGludWV9aWYoIXluJiZHMSgvXC8+L2ksazApKXt2MChSdSxncik7Y29udGludWV9cG4mJlRPKFthaSxfaSxPbl0sSk49PntrMD1sRShrMCxKTiwiICIpfSk7Y29uc3Qga3c9JGEoZ3Iubm9k''@;'; put 'put ''ZU5hbWUpO2lmKEtOKGt3LHN2LGswKSl7aWYodm4mJiJvYmplY3QiPT10eXBlb2YgRWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBFZS5nZXRBdHRyaWJ1dGVUeXBlJiYhVDEpc3dpdGNoKEVlLmdldEF0dHJpYnV0ZVR5cGUoa3csc3YpKXtjYXNlIlRydXN0ZWRIVE1MIjprMD12bi5jcmVhdGVIVE1M''@;'; put 'put ''KGswKTticmVhaztjYXNlIlRydXN0ZWRTY3JpcHRVUkwiOmswPXZuLmNyZWF0ZVNjcmlwdFVSTChrMCl9aWYoazAhPT16QSl0cnl7VDE/Z3Iuc2V0QXR0cmlidXRlTlMoVDEsUnUsazApOmdyLnNldEF0dHJpYnV0ZShSdSxrMCksRTYoZ3IpP1l0KGdyKTpyMmUobC5yZW1vdmVkKX1jYXRjaHt2''@;'; put 'put ''MChSdSxncil9fWVsc2UgdjAoUnUsZ3IpfUUzKEduLmFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzLGdyLG51bGwpfSxvdj1mdW5jdGlvbiBjbyhncil7bGV0IFFpPW51bGw7Y29uc3QgWGE9R04oZ3IpO2ZvcihFMyhHbi5iZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSxncixudWxsKTtRaT1YYS5uZXh0''@;'; put 'put ''Tm9kZSgpOylFMyhHbi51cG9uU2FuaXRpemVTaGFkb3dOb2RlLFFpLG51bGwpLCROKFFpKSxYTihRaSksUWkuY29udGVudCBpbnN0YW5jZW9mIGYmJmNvKFFpLmNvbnRlbnQpO0UzKEduLmFmdGVyU2FuaXRpemVTaGFkb3dET00sZ3IsbnVsbCl9O3JldHVybiBsLnNhbml0aXplPWZ1bmN0aW9u''@;'; put 'put ''KGNvKXtsZXQgZ3I9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LFFpPW51bGwsWGE9bnVsbCxkYz1udWxsLEEwPW51bGw7aWYoQmw9IWNvLEJsJiYoY289Ilx4M2MhLS1ceDNlIiksInN0cmluZyIhPXR5cGVvZiBjbyYmIWU1KGNvKSl7''@;'; put 'put ''aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGNvLnRvU3RyaW5nKXRocm93IGNFKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJzdHJpbmciIT10eXBlb2YoY289Y28udG9TdHJpbmcoKSkpdGhyb3cgY0UoImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1pZighbC5pc1N1''@;'; put 'put ''cHBvcnRlZClyZXR1cm4gY287aWYoZHJ8fEJBKGdyKSxsLnJlbW92ZWQ9W10sInN0cmluZyI9PXR5cGVvZiBjbyYmKElvPSExKSxJbyl7aWYoY28ubm9kZU5hbWUpe2NvbnN0IFpoPSRhKGNvLm5vZGVOYW1lKTtpZighZmFbWmhdfHx0cltaaF0pdGhyb3cgY0UoInJvb3Qgbm9kZSBpcyBmb3Ji''@;'; put 'put ''aWRkZW4gYW5kIGNhbm5vdCBiZSBzYW5pdGl6ZWQgaW4tcGxhY2UiKX19ZWxzZSBpZihjbyBpbnN0YW5jZW9mIE0pUWk9WnMoIlx4M2MhLS0tLVx4M2UiKSxYYT1RaS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoY28sITApLDE9PT1YYS5ub2RlVHlwZSYmIkJPRFkiPT09WGEubm9kZU5hbWV8''@;'; put 'put ''fCJIVE1MIj09PVhhLm5vZGVOYW1lP1FpPVhhOlFpLmFwcGVuZENoaWxkKFhhKTtlbHNle2lmKCFabiYmIXBuJiYhJG4mJi0xPT09Y28uaW5kZXhPZigiPCIpKXJldHVybiB2biYmTnI/dm4uY3JlYXRlSFRNTChjbyk6Y287aWYoUWk9WnMoY28pLCFRaSlyZXR1cm4gWm4/bnVsbDpOcj9Dbjoi''@;'; put 'put ''In1RaSYmVXImJll0KFFpLmZpcnN0Q2hpbGQpO2NvbnN0IFJ1PUdOKElvP2NvOlFpKTtmb3IoO2RjPVJ1Lm5leHROb2RlKCk7KSROKGRjKSxYTihkYyksZGMuY29udGVudCBpbnN0YW5jZW9mIGYmJm92KGRjLmNvbnRlbnQpO2lmKElvKXJldHVybiBjbztpZihabil7aWYoc3IpZm9yKEEwPUNy''@;'; put 'put ''LmNhbGwoUWkub3duZXJEb2N1bWVudCk7UWkuZmlyc3RDaGlsZDspQTAuYXBwZW5kQ2hpbGQoUWkuZmlyc3RDaGlsZCk7ZWxzZSBBMD1RaTtyZXR1cm4oTnQuc2hhZG93cm9vdHx8TnQuc2hhZG93cm9vdG1vZGUpJiYoQTA9bXIuY2FsbChkLEEwLCEwKSksQTB9bGV0IFQxPSRuP1FpLm91dGVy''@;'; put 'put ''SFRNTDpRaS5pbm5lckhUTUw7cmV0dXJuICRuJiZmYVsiIWRvY3R5cGUiXSYmUWkub3duZXJEb2N1bWVudCYmUWkub3duZXJEb2N1bWVudC5kb2N0eXBlJiZRaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSYmRzEodTJlLFFpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSYmKFQxPSI8''@;'; put 'put ''IURPQ1RZUEUgIitRaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSsiPlxuIitUMSkscG4mJlRPKFthaSxfaSxPbl0sWmg9PntUMT1sRShUMSxaaCwiICIpfSksdm4mJk5yP3ZuLmNyZWF0ZUhUTUwoVDEpOlQxfSxsLnNldENvbmZpZz1mdW5jdGlvbigpe0JBKGFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSksZHI9ITB9LGwuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXt4Nj1udWxsLGRyPSExfSxsLmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24oY28sZ3IsUWkpe3g2fHxCQSh7fSk7Y29uc3QgWGE9JGEoY28pLGRjPSRhKGdyKTty''@;'; put 'put ''ZXR1cm4gS04oWGEsZGMsUWkpfSxsLmFkZEhvb2s9ZnVuY3Rpb24oY28sZ3IpeyJmdW5jdGlvbiI9PXR5cGVvZiBnciYmc0UoR25bY29dLGdyKX0sbC5yZW1vdmVIb29rPWZ1bmN0aW9uKGNvLGdyKXtpZih2b2lkIDAhPT1ncil7Y29uc3QgUWk9aHFlKEduW2NvXSxncik7cmV0dXJuLTE9PT1R''@;'; put 'put ''aT92b2lkIDA6ZnFlKEduW2NvXSxRaSwxKVswXX1yZXR1cm4gcjJlKEduW2NvXSl9LGwucmVtb3ZlSG9va3M9ZnVuY3Rpb24oY28pe0duW2NvXT1bXX0sbC5yZW1vdmVBbGxIb29rcz1mdW5jdGlvbigpe0duPXthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVu''@;'; put 'put ''dHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9u''@;'; put 'put ''U2FuaXRpemVTaGFkb3dOb2RlOltdfX0sbH0oKTtmdW5jdGlvbiBwMmUoYyl7Y29uc3QgbD1jLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTxsOyljW2FdPVtjW2FdXSxhKz0xfWZ1bmN0aW9uIGwkKGMsbCl7Y29uc3QgYT1sLmxlbmd0aDtsZXQgZD0wO2Zvcig7ZDxhOyljLnB1c2gobFtkXSksZCs9''@;'; put 'put ''MX1mdW5jdGlvbiBoRShjKXtjb25zdCBsPVtdO2lmKCFjfHwwPT09Yy5sZW5ndGh8fCFjWzBdfHwwPT09Y1swXS5sZW5ndGgpcmV0dXJuIGw7Y29uc3QgYT1jLmxlbmd0aCxkPWNbMF0ubGVuZ3RoO2ZvcihsZXQgaD0wO2g8YTtoKyspZm9yKGxldCBmPTA7ZjxkO2YrKylsW2ZdfHwobFtmXT1b''@;'; put 'put ''XSksbFtmXVtoXT1jW2hdW2ZdO3JldHVybiBsfWZ1bmN0aW9uIHF1KGMsbCxhLGQpe2xldCBoPS0xLGY9Yyx2PWE7QXJyYXkuaXNBcnJheShjKXx8KGY9QXJyYXkuZnJvbShjKSk7Y29uc3QgTT1mLmxlbmd0aDtmb3IoZCYmTSYmKGgrPTEsdj1mW2hdKSxoKz0xO2g8TTspdj1sKHYsZltoXSxo''@;'; put 'put ''LGYpLGgrPTE7cmV0dXJuIHZ9ZnVuY3Rpb24gSW0oYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoLGY9W107bGV0IHY9LTE7Zm9yKDthPGg7KXtjb25zdCBNPWRbYV07bChNLGEsZCkmJih2Kz0xLGZbdl09TSksYSs9''@;'; put 'put ''MX1yZXR1cm4gZn1mdW5jdGlvbiB5cyhjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgsZj1bXTtsZXQgdj0tMTtmb3IoO2E8aDspdis9MSxmW3ZdPWwoZFthXSxhLGQpLGErPTE7cmV0dXJuIGZ9ZnVuY3Rpb24gWW4o''@;'; put 'put ''YyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoO2Zvcig7YTxoJiYhMSE9PWwoZFthXSxhLGQpOylhKz0xO3JldHVybiBjfWZ1bmN0aW9uIGcyZShjKXtyZXR1cm4gcXUoYywobCxhKT0+bCthLDApfWZ1bmN0aW9uIElx''@;'; put 'put ''ZShjKXtyZXR1cm4gcXUoYywobCxhKT0+bD5hP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBScWUoYyl7cmV0dXJuIHF1KGMsKGwsYSk9Pmw8YT9sOmEsQXJyYXkuaXNBcnJheShjKT9jWzBdOnZvaWQgMCl9ZnVuY3Rpb24gTHFlKGMpe3JldHVybiBjLmxlbmd0''@;'; put 'put ''aD9nMmUoYykvYy5sZW5ndGg6MH1mdW5jdGlvbiBtMmUoYyl7cmV0dXJuIHF1KGMsKGwsYSk9PmwuY29uY2F0KEFycmF5LmlzQXJyYXkoYSk/bTJlKGEpOmEpLFtdKX1mdW5jdGlvbiB2MmUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gWW4oYyxhPT57LTE9PT1sLmluZGV4T2YoYSkmJmwucHVzaChh''@;'; put 'put ''KX0pLGx9ZnVuY3Rpb24gYyQoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3JldHVybiBZbihoLHY9PntmPWYuZmlsdGVyKE09PiF2LmluY2x1ZGVzKE0p''@;'; put 'put ''KX0pLGZ9ZnVuY3Rpb24gT3FlKCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF07bGV0IGY9ZDtyZXR1cm4gWW4oaCx2PT57Zj1mLmZpbHRlcihNPT52LmluY2x1ZGVzKE0p''@;'; put 'put ''KX0pLGZ9ZnVuY3Rpb24gUHFlKCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF0sZj1uZXcgU2V0KGQpO3JldHVybiBZbihoLHY9PntZbih2LE09PntmLmhhcyhNKXx8Zi5h''@;'; put 'put ''ZGQoTSl9KX0pLEFycmF5LmZyb20oZil9ZnVuY3Rpb24gdSQoYyl7cmV0dXJuIGMuc3BsaXQoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIgIil9ZnVuY3Rpb24gZ2woYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJy''@;'; put 'put ''YXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBxdShjLChmLHYsTSk9PmYrdi5yZXBsYWNlKC9ccj9cblxzKi9nLCIiKSsoYVtNXT9hW01dOiIiKSwiIikudHJpbSgpfWZ1bmN0aW9uIGxjKGMpe2xldCBsO3N3aXRjaCh0eXBlb2YgYyl7Y2FzZSJz''@;'; put 'put ''dHJpbmciOmNhc2UibnVtYmVyIjpsPWAke2N9YDticmVhaztjYXNlIm9iamVjdCI6bD1udWxsPT09Yz8iIjpjLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmw9IiI7YnJlYWs7ZGVmYXVsdDpsPWMudG9TdHJpbmcoKX1yZXR1cm4gbH1mdW5jdGlvbiBQYShjKXtyZXR1cm4gdHlw''@;'; put 'put ''ZW9mIGM8InUifWZ1bmN0aW9uIF9jKGMpe3JldHVybiB0eXBlb2YgYz4idSJ9ZnVuY3Rpb24gVWMoYyl7cmV0dXJuIG51bGw9PT1jfHwiIj09PWN8fF9jKGMpfWZ1bmN0aW9uIGIyZShjKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChj''@;'; put 'put ''KX1jb25zdCBmRT0ibGVuZ3RoIixwRT1jPT5wYXJzZUludChjLDE2KSx5MmU9Yz0+cGFyc2VJbnQoYywxMCksRE89KGMsbCxhKT0+Yy5zdWJzdHIobCxhKSxnRT1jPT5jLmNvZGVQb2ludEF0KDApLTY1LGQkPWM9PmAke2N9YC5yZXBsYWNlKC9cLS9nLCIiKSxGcWU9Yz0+cEUoRE8oZCQoYyks''@;'; put 'put ''cEUoIjEyIiksZ0UoIkYiKSkpLyhwRShETyhkJChjKSxnRSgiQiIpLH5+IVtdW2ZFXSkpfHw5KSxIcWU9KCk9PnR5cGVvZiBsb2NhdGlvbjwidSImJi9eKFthLXowLTlcLV0rXC4pP1x4NjhceDYxXHg2RVx4NjRceDczXHg2Rlx4NkVceDc0XHg2MVx4NjJceDZDXHg2NVx4MkVceDYzXHg2Rlx4''@;'; put 'put ''NkQkL2kudGVzdChsb2NhdGlvbi5ob3N0KTtsZXQgXzJlPSExO2NvbnN0IHcyZT17aW52YWxpZDooKT0+Z2xgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHN1cHBvcnRA''@;'; put 'put ''aGFuZHNvbnRhYmxlLmNvbS5gLGV4cGlyZWQ6Yz0+e2xldHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIGdsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFs''@;'; put 'put ''bGVkXHgyMAogICAgdmVyc2lvbiAke2F9LiBSZW5ldyB5b3VyIGxpY2Vuc2Uga2V5IGF0IGhhbmRzb250YWJsZS5jb20gb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvclx4MjAKICAgIHRvICR7bH0uIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHNh''@;'; put 'put ''bGVzQGhhbmRzb250YWJsZS5jb20uYH0sbWlzc2luZzooKT0+Z2xgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2UgeW91ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBj''@;'; put 'put ''YW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0XHgyMAogICAgdXMgYXQg''@;'; put 'put ''c3VwcG9ydEBoYW5kc29udGFibGUuY29tLmAsbm9uX2NvbW1lcmNpYWw6KCk9PiIifSxDMmU9e2ludmFsaWQ6KCk9PmdsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9j''@;'; put 'put ''cy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBvbiBob3cgdG9ceDIwCiAgICBpbnN0YWxsIGl0IHByb3Blcmx5IG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBo''@;'; put 'put ''YW5kc29udGFibGUuY29tPC9hPi5gLGV4cGlyZWQ6Yz0+e2xldHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIGdsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5z''@;'; put 'put ''dGFsbGVkXHgyMAogICAgdmVyc2lvbiAke2F9LiA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vcHJpY2luZyIgdGFyZ2V0PSJfYmxhbmsiPlJlbmV3PC9hPiB5b3VyXHgyMAogICAgbGljZW5zZSBrZXkgb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvciB0''@;'; put 'put ''byAke2x9LiBJZiB5b3UgbmVlZCBhbnlceDIwCiAgICBoZWxwLCBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzYWxlc0BoYW5kc29udGFibGUuY29tIj5zYWxlc0BoYW5kc29udGFibGUuY29tPC9hPi5gfSxtaXNzaW5nOigpPT5nbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFu''@;'; put 'put ''ZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAK''@;'; put 'put ''ICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBhYm91dCBp''@;'; put 'put ''dCBpblx4MjAKICAgIHRoZSBkb2N1bWVudGF0aW9uIG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLG5vbl9jb21tZXJjaWFsOigpPT4iIn07ZnVuY3Rpb24gUzJlKGMsbCl7Y29u''@;'; put 'put ''c3QgYT0hVWMoYyksZD0ic3RyaW5nIj09dHlwZW9mIGMmJiJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI9PT1jLnRvTG93ZXJDYXNlKCksaD0iMTUuMy4wIjtsZXQgZix2PSJpbnZhbGlkIixNPSJpbnZhbGlkIjtjb25zdCBEPWZ1bmN0aW9uIE5xZShjKXtsZXQgbD1bXVtmRV0sYT1s''@;'; put 'put ''O2lmKGNbZkVdIT09Z0UoIloiKSlyZXR1cm4hMTtmb3IobGV0IGQ9IiIsaD0iQjxINFArIi5zcGxpdCgiIiksZj1nRShoLnNoaWZ0KCkpO2Y7Zj1nRShoLnNoaWZ0KCl8fCJBIikpLS1mPCIiW2ZFXT9hfD0oeTJlKGAke3kyZShwRShkKSsocEUoRE8oYyxNYXRoLmFicyhmKSwyKSkrW10pLnBh''@;'; put 'put ''ZFN0YXJ0KDIsIjAiKSl9YCklOTd8fDIpPj4xOmQ9RE8oYyxmLGY/MT09PWhbZkVdPzk6ODo2KTtyZXR1cm4gYT09PWx9KGM9ZCQoY3x8IiIpKTtpZihhfHxkfHxEKWlmKEQpe2NvbnN0IFo9T28oIjI5LzA0LzIwMjUiLCJERC9NTS9ZWVlZIikscmU9TWF0aC5mbG9vcihaLnRvRGF0ZSgpLmdl''@;'; put 'put ''dFRpbWUoKS84NjRlNSksY2U9RnFlKGMpO2Y9T28oODY0ZTUqKGNlKzEpLCJ4IikuZm9ybWF0KCJNTU1NIERELCBZWVlZIikscmU+Y2U/KHY9ImV4cGlyZWQiLE09ImV4cGlyZWQiKToodj0idmFsaWQiLE09InZhbGlkIil9ZWxzZSBkPyh2PSJub25fY29tbWVyY2lhbCIsTT0idmFsaWQiKToo''@;'; put 'put ''dj0iaW52YWxpZCIsTT0iaW52YWxpZCIpO2Vsc2Ugdj0ibWlzc2luZyIsTT0ibWlzc2luZyI7aWYoSHFlKCkmJih2PSJ2YWxpZCIsTT0idmFsaWQiKSwhXzJlJiYidmFsaWQiIT09diYmKHcyZVt2XSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkmJmNvbnNvbGVbIm5vbl9jb21t''@;'; put 'put ''ZXJjaWFsIj09PXY/ImluZm8iOiJ3YXJuIl0odzJlW3ZdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSksXzJlPSEwKSwidmFsaWQiIT09TSYmbC5wYXJlbnROb2RlJiZDMmVbTV0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pKXtjb25zdCByZT1kb2N1bWVudC5j''@;'; put 'put ''cmVhdGVFbGVtZW50KCJkaXYiKTtyZS5jbGFzc05hbWU9ImhhbmRzb250YWJsZSBob3QtZGlzcGxheS1saWNlbnNlLWluZm8iLHJlLmlubmVySFRNTD1DMmVbTV0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pLGwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocmUsbC5uZXh0U2li''@;'; put 'put ''bGluZyl9fWZ1bmN0aW9uIHAxKGMpe3JldHVybiBjWzBdLnRvVXBwZXJDYXNlKCkrYy5zdWJzdHIoMSl9ZnVuY3Rpb24gVnFlKCl7Y29uc3QgYz1bXTtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtsZXQgaD1h''@;'; put 'put ''Lmxlbmd0aDtmb3IoO2g7KXtoLT0xO2NvbnN0IGY9bGMoYVtoXSkudG9Mb3dlckNhc2UoKTstMT09PWMuaW5kZXhPZihmKSYmYy5wdXNoKGYpfXJldHVybiAxPT09Yy5sZW5ndGh9ZnVuY3Rpb24gaCQoKXtmdW5jdGlvbiBjKCl7cmV0dXJuIE1hdGguZmxvb3IoNjU1MzYqKDErTWF0aC5yYW5k''@;'; put 'put ''b20oKSkpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSl9cmV0dXJuIGMoKStjKCkrYygpK2MoKX1mdW5jdGlvbiBmJChjKXtyZXR1cm4vXihbMC05XVswLTldPyUkKXwoXjEwMCUkKS8udGVzdChjKX1mdW5jdGlvbiBwJChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuYCR7Y31gLnJlcGxhY2UoLyg/OlxcKT9cWyhbXltcXV0rKV0vZywoYSxkKT0+IlxcIj09PWEuY2hhckF0KDApP2Euc3Vic3RyKDEsYS5sZW5ndGgtMSk6dm9pZCAwPT09bFtkXT8iIjpsW2RdKX1mdW5jdGlvbiBnJChjKXtyZXR1cm4g''@;'; put 'put ''SU8oYCR7Y31gLHtBTExPV0VEX1RBR1M6W119KX1mdW5jdGlvbiBJTyhjLGwpe3JldHVybiBEcWUuc2FuaXRpemUoYyxsKX1jb25zdCBONz1jPT5bInRhYmluZGV4IixjXSxLcWU9KCk9Plsicm9sZSIsImNoZWNrYm94Il0sbUU9Yz0+WyJhcmlhLWxhYmVsIixjXSxWNz0oKT0+WyJhcmlhLWhp''@;'; put 'put ''ZGRlbiIsInRydWUiXSxFMmU9Yz0+WyJhcmlhLWhhc3BvcHVwIixjXSxUMmU9Yz0+WyJhcmlhLXJvd2NvdW50IixjXSxSTz1jPT5bImFyaWEtY29sY291bnQiLGNdLEEyZT1jPT5bImFyaWEtcm93aW5kZXgiLGNdLHYkPWM9PlsiYXJpYS1jb2xpbmRleCIsY10sTjI9Yz0+WyJhcmlhLWV4cGFu''@;'; put 'put ''ZGVkIixjXSxrMmU9KCk9PlsiYXJpYS1yZWFkb25seSIsInRydWUiXSxEMmU9KCk9PlsiYXJpYS1pbnZhbGlkIiwidHJ1ZSJdLEkyZT1jPT5bImFyaWEtY2hlY2tlZCIsY10sclhlPWM9PlsiYXJpYS1jb250cm9scyIsY10sYVhlPWM9PlsiYXJpYS1saXZlIixjXSxvWGU9Yz0+WyJhcmlhLXJl''@;'; put 'put ''bGV2YW50IixjXSxzWGU9Yz0+WyJhcmlhLXNldHNpemUiLGNdLGxYZT1jPT5bImFyaWEtcG9zaW5zZXQiLGNdO2Z1bmN0aW9uIFIyZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPS0xLGQ9bnVsbCxoPWM7Zm9yKDtu''@;'; put 'put ''dWxsIT09aDspe2lmKGE9PT1sKXtkPWg7YnJlYWt9aC5ob3N0JiZoLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2g9aC5ob3N0OihhKz0xLGg9aC5wYXJlbnROb2RlKX1yZXR1cm4gZH1mdW5jdGlvbiB2RShjLGwpe2NvbnN0IGE9Yy5jbG9zZXN0KCIuaGFuZHNvbnRh''@;'; put 'put ''YmxlIik7cmV0dXJuISFhJiYoYS5wYXJlbnROb2RlPT09bHx8YT09PWwpfWZ1bmN0aW9uIEwyZShjKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGMucGFyZW50KSYmYy5mcmFtZUVsZW1lbnR9ZnVuY3Rpb24gQjcoYyl7cmV0dXJuIEwyZShjKSYmYy5wYXJlbnR9ZnVuY3Rpb24gY1hl''@;'; put 'put ''KGMpe3JldHVybiEhT2JqZWN0LmdldFByb3RvdHlwZU9mKGMucGFyZW50KX1mdW5jdGlvbiBSbShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtj''@;'; put 'put ''b25zdHtFTEVNRU5UX05PREU6ZCxET0NVTUVOVF9GUkFHTUVOVF9OT0RFOmh9PU5vZGU7bGV0IGY9Yztmb3IoO251bGwhPWYmJmYhPT1hOyl7Y29uc3R7bm9kZVR5cGU6dixub2RlTmFtZTpNfT1mO2lmKHY9PT1kJiYobC5pbmNsdWRlcyhNKXx8bC5pbmNsdWRlcyhmKSkpcmV0dXJuIGY7Y29u''@;'; put 'put ''c3R7aG9zdDpEfT1mO2Y9RCYmdj09PWg/RDpmLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gYkUoYyxsLGEpe2NvbnN0IGQ9W107bGV0IGg9Yztmb3IoO2gmJihoPVJtKGgsbCxhKSxoJiYoIWF8fGEuY29udGFpbnMoaCkpKTspZC5wdXNoKGgpLGg9aC5ob3N0JiZoLm5vZGVUeXBl''@;'; put 'put ''PT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2guaG9zdDpoLnBhcmVudE5vZGU7Y29uc3QgZj1kLmxlbmd0aDtyZXR1cm4gZj9kW2YtMV06bnVsbH1mdW5jdGlvbiBPMmUoYyxsKXtjb25zdCBhPXtlbGVtZW50OnZvaWQgMCxjbGFzc05hbWVzOltdfTtsZXQgZD1jO2Zvcig7bnVsbCE9''@;'; put 'put ''PWQmJmQhPT1jLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiYhYS5lbGVtZW50Oyl7aWYoInN0cmluZyI9PXR5cGVvZiBsJiZkLmNsYXNzTGlzdC5jb250YWlucyhsKSlhLmVsZW1lbnQ9ZCxhLmNsYXNzTmFtZXMucHVzaChsKTtlbHNlIGlmKGwgaW5zdGFuY2VvZiBSZWdFeHApe2Nv''@;'; put 'put ''bnN0IGg9QXJyYXkuZnJvbShkLmNsYXNzTGlzdCkuZmlsdGVyKGY9PmwudGVzdChmKSk7aC5sZW5ndGgmJihhLmVsZW1lbnQ9ZCxhLmNsYXNzTmFtZXMucHVzaCguLi5oKSl9ZD1kLnBhcmVudEVsZW1lbnR9cmV0dXJuIGF9ZnVuY3Rpb24gTG0oYyxsKXtsZXQgYT1jLnBhcmVudE5vZGUsZD1b''@;'; put 'put ''XTtmb3IoInN0cmluZyI9PXR5cGVvZiBsP2Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYy5kZWZhdWx0Vmlldz9jLnF1ZXJ5U2VsZWN0b3JBbGwobCk6Yy5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwobCksMCk6ZC5wdXNoKGwpO251bGwhPT1hOyl7aWYoZC5pbmRleE9mKGEp''@;'; put 'put ''Pi0xKXJldHVybiEwO2E9YS5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIFAyZShjKXtsZXQgbD0wLGE9YztpZihhLnByZXZpb3VzU2libGluZylmb3IoO2E9YS5wcmV2aW91c1NpYmxpbmc7KWwrPTE7cmV0dXJuIGx9ZnVuY3Rpb24gT20oYyxsLGEpe2NvbnN0IGQ9YS5wYXJlbnRFbGVt''@;'; put 'put ''ZW50LnF1ZXJ5U2VsZWN0b3IoYC5odF9jbG9uZV8ke2N9YCk7cmV0dXJuIGQ/ZC5jb250YWlucyhsKTpudWxsfWZ1bmN0aW9uIEYyZShjKXtyZXR1cm4gYyYmYy5sZW5ndGg/Yy5maWx0ZXIobD0+ISFsKTpbXX1mdW5jdGlvbiBIMmUoYyxsKXtpZighY3x8IWMubGVuZ3RoKXJldHVybiBsP3ty''@;'; put 'put ''ZWdleEZyZWU6W10scmVnZXhlczpbXX06W107Y29uc3QgYT1bXSxkPVtdO3JldHVybiBkLnB1c2goLi4uYy5maWx0ZXIoaD0+e2NvbnN0IGY9aCBpbnN0YW5jZW9mIFJlZ0V4cDtyZXR1cm4gZiYmbCYmYS5wdXNoKGgpLCFmfSkpLGw/e3JlZ2V4RnJlZTpkLHJlZ2V4ZXM6YX06ZH1mdW5jdGlv''@;'; put 'put ''biBwbyhjLGwpe3JldHVybiB2b2lkIDAhPT1jLmNsYXNzTGlzdCYmInN0cmluZyI9PXR5cGVvZiBsJiYiIiE9PWwmJmMuY2xhc3NMaXN0LmNvbnRhaW5zKGwpfWZ1bmN0aW9uIFRpKGMsbCl7InN0cmluZyI9PXR5cGVvZiBsJiYobD1sLnNwbGl0KCIgIikpLChsPUYyZShsKSkubGVuZ3RoPjAm''@;'; put 'put ''JmMuY2xhc3NMaXN0LmFkZCguLi5sKX1mdW5jdGlvbiBsbyhjLGwpeyJzdHJpbmciPT10eXBlb2YgbD9sPWwuc3BsaXQoIiAiKTpsIGluc3RhbmNlb2YgUmVnRXhwJiYobD1bbF0pO2xldHtyZWdleEZyZWU6YSxyZWdleGVzOmR9PUgyZShsLCEwKTthPUYyZShhKSxhLmxlbmd0aD4wJiZjLmNs''@;'; put 'put ''YXNzTGlzdC5yZW1vdmUoLi4uYSksZC5mb3JFYWNoKGg9PntjLmNsYXNzTGlzdC5mb3JFYWNoKGY9PntoLnRlc3QoZikmJmMuY2xhc3NMaXN0LnJlbW92ZShmKX0pfSl9ZnVuY3Rpb24gdm8oYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l''@;'; put 'put ''bnRzWzFdOltdLGE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7QXJyYXkuaXNBcnJheShsKXx8KGw9W1tsLGFdXSksbC5mb3JFYWNoKGQ9PntBcnJheS5pc0FycmF5KGQpJiYiIiE9PWRbMF0mJmMuc2V0QXR0cmlidXRlKC4uLmQpfSl9ZnVuY3Rpb24gajcoYyl7bGV0''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdOyJzdHJpbmciPT10eXBlb2YgbD9sPWwuc3BsaXQoIiAiKTpsIGluc3RhbmNlb2YgUmVnRXhwJiYobD1bbF0pO2NvbnN0e3JlZ2V4RnJlZTphLHJlZ2V4ZXM6ZH09SDJlKGwsITApO2Eu''@;'; put 'put ''Zm9yRWFjaChoPT57IiIhPT1oJiZjLnJlbW92ZUF0dHJpYnV0ZShoKX0pLGQuZm9yRWFjaChoPT57Yy5nZXRBdHRyaWJ1dGVOYW1lcygpLmZvckVhY2goZj0+e2gudGVzdChmKSYmYy5yZW1vdmVBdHRyaWJ1dGUoZil9KX0pfWZ1bmN0aW9uIHkkKGMpe2lmKDM9PT1jLm5vZGVUeXBlKWMucGFy''@;'; put 'put ''ZW50Tm9kZS5yZW1vdmVDaGlsZChjKTtlbHNlIGlmKFsiVEFCTEUiLCJUSEVBRCIsIlRCT0RZIiwiVEZPT1QiLCJUUiJdLmluZGV4T2YoYy5ub2RlTmFtZSk+LTEpe2NvbnN0IGw9Yy5jaGlsZE5vZGVzO2ZvcihsZXQgYT1sLmxlbmd0aC0xO2E+PTA7YS0tKXkkKGxbYV0pfX1mdW5jdGlvbiB4''@;'; put 'put ''cChjKXtsZXQgbDtmb3IoO2w9Yy5sYXN0Q2hpbGQ7KWMucmVtb3ZlQ2hpbGQobCl9Y29uc3QgTjJlPS8oPCguKik+fCYoLiopOykvO2Z1bmN0aW9uIHo3KGMsbCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtOMmUudGVz''@;'; put 'put ''dChsKT9jLmlubmVySFRNTD1hP0lPKGwpOmw6UG0oYyxsKX1mdW5jdGlvbiBQbShjLGwpe2NvbnN0IGE9Yy5maXJzdENoaWxkO2EmJjM9PT1hLm5vZGVUeXBlJiZudWxsPT09YS5uZXh0U2libGluZz9hLnRleHRDb250ZW50PWw6KHhwKGMpLGMuYXBwZW5kQ2hpbGQoYy5vd25lckRvY3VtZW50''@;'; put 'put ''LmNyZWF0ZVRleHROb2RlKGwpKSl9ZnVuY3Rpb24gVTcoYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9Yy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O2xldCBkPWM7Zm9yKDtkIT09bDspe2lmKG51bGw9PT1kKXJldHVybiExO2lmKGQubm9kZVR5cGU9PT1O''@;'; put 'put ''b2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe2lmKGQuaG9zdCl7aWYoZC5ob3N0LmltcGwpcmV0dXJuIFU3KGQuaG9zdC5pbXBsKTtpZihkLmhvc3QpcmV0dXJuIFU3KGQuaG9zdCk7dGhyb3cgbmV3IEVycm9yKCJMb3N0IGluIFdlYiBDb21wb25lbnRzIHdvcmxkIil9cmV0dXJuITF9aWYo''@;'; put 'put ''Im5vbmUiPT09YS5nZXRDb21wdXRlZFN0eWxlKGQpLmRpc3BsYXkpcmV0dXJuITE7ZD1kLnBhcmVudE5vZGV9cmV0dXJuITB9ZnVuY3Rpb24gVjJlKGMpe2NvbnN0IGE9Yy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O2xldCBkPWM7Zm9yKDtkLnBhcmVudE5vZGU7KXtpZigiMHB4Ij09PWQu''@;'; put 'put ''c3R5bGUuaGVpZ2h0fHwiMCI9PT1kLnN0eWxlLmhlaWdodClyZXR1cm4iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShkKS5vdmVyZmxvdztkPWQucGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiBVMChjKXtjb25zdCBsPWMub3duZXJEb2N1bWVudCxhPWwuZGVmYXVsdFZpZXcsZD1s''@;'; put 'put ''LmRvY3VtZW50RWxlbWVudDtsZXQgZix2LE0saD1jO2ZvcihmPWgub2Zmc2V0TGVmdCx2PWgub2Zmc2V0VG9wLE09aDsoaD1oLm9mZnNldFBhcmVudCkmJmghPT1sLmJvZHkmJiJvZmZzZXRMZWZ0ImluIGg7KWYrPWgub2Zmc2V0TGVmdCx2Kz1oLm9mZnNldFRvcCxNPWg7cmV0dXJuIE0mJiJm''@;'; put 'put ''aXhlZCI9PT1NLnN0eWxlLnBvc2l0aW9uJiYoZis9YS5wYWdlWE9mZnNldHx8ZC5zY3JvbGxMZWZ0LHYrPWEucGFnZVlPZmZzZXR8fGQuc2Nyb2xsVG9wKSx7bGVmdDpmLHRvcDp2fX1mdW5jdGlvbiBfJCgpe3JldHVybihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw''@;'; put 'put ''XT9hcmd1bWVudHNbMF06d2luZG93KS5zY3JvbGxZfWZ1bmN0aW9uIExPKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3cpLnNjcm9sbFh9ZnVuY3Rpb24gT08oYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gYz09PWw/XyQobCk6Yy5zY3JvbGxUb3B9ZnVuY3Rpb24gdyQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gYz09''@;'; put 'put ''PWw/TE8obCk6Yy5zY3JvbGxMZWZ0fWZ1bmN0aW9uIHlFKGMpe2xldCBsPWMub3duZXJEb2N1bWVudCxhPWw/bC5kZWZhdWx0Vmlldzp2b2lkIDA7bHx8KGw9Yy5kb2N1bWVudD9jLmRvY3VtZW50OmMsYT1sLmRlZmF1bHRWaWV3KTtjb25zdCBkPVsiYXV0byIsInNjcm9sbCJdO2xldCBoPWMu''@;'; put 'put ''cGFyZW50Tm9kZTtmb3IoO2gmJmguc3R5bGUmJmwuYm9keSE9PWg7KXtsZXR7b3ZlcmZsb3c6ZixvdmVyZmxvd1g6dixvdmVyZmxvd1k6TX09aC5zdHlsZTtpZihbZix2LE1dLmluY2x1ZGVzKCJzY3JvbGwiKSlyZXR1cm4gaDtpZigoe292ZXJmbG93OmYsb3ZlcmZsb3dYOnYsb3ZlcmZsb3dZ''@;'; put 'put ''Ok19PWEuZ2V0Q29tcHV0ZWRTdHlsZShoKSksZC5pbmNsdWRlcyhmKXx8ZC5pbmNsdWRlcyh2KXx8ZC5pbmNsdWRlcyhNKXx8aC5jbGllbnRIZWlnaHQ8PWguc2Nyb2xsSGVpZ2h0KzEmJihkLmluY2x1ZGVzKE0pfHxkLmluY2x1ZGVzKGYpKXx8aC5jbGllbnRXaWR0aDw9aC5zY3JvbGxXaWR0''@;'; put 'put ''aCsxJiYoZC5pbmNsdWRlcyh2KXx8ZC5pbmNsdWRlcyhmKSkpcmV0dXJuIGg7aD1oLnBhcmVudE5vZGV9cmV0dXJuIGF9ZnVuY3Rpb24gQjJlKGMpe3JldHVybiBjLnNjcm9sbEhlaWdodC1jLmNsaWVudEhlaWdodH1mdW5jdGlvbiBqMmUoYyl7cmV0dXJuIGMuc2Nyb2xsV2lkdGgtYy5jbGll''@;'; put 'put ''bnRXaWR0aH1mdW5jdGlvbiBhXyhjKXtjb25zdCBsPWMub3duZXJEb2N1bWVudCxhPWwuZGVmYXVsdFZpZXc7bGV0IGQ9Yy5wYXJlbnROb2RlO2Zvcig7ZCYmZC5zdHlsZSYmbC5ib2R5IT09ZDspe2lmKCJ2aXNpYmxlIiE9PWQuc3R5bGUub3ZlcmZsb3cmJiIiIT09ZC5zdHlsZS5vdmVyZmxv''@;'; put 'put ''dylyZXR1cm4gZDtjb25zdCBoPWEuZ2V0Q29tcHV0ZWRTdHlsZShkKSxmPVsic2Nyb2xsIiwiaGlkZGVuIiwiYXV0byJdLHY9aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpLE09aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy15IiksRD1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJm''@;'; put 'put ''bG93LXgiKTtpZihmLmluY2x1ZGVzKHYpfHxmLmluY2x1ZGVzKE0pfHxmLmluY2x1ZGVzKEQpKXJldHVybiBkO2Q9ZC5wYXJlbnROb2RlfXJldHVybiBhfWZ1bmN0aW9uIF9FKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJd''@;'; put 'put ''OndpbmRvdztpZighYylyZXR1cm47aWYoYz09PWEpcmV0dXJuIndpZHRoIj09PWw/YCR7YS5pbm5lcldpZHRofXB4YDoiaGVpZ2h0Ij09PWw/YCR7YS5pbm5lckhlaWdodH1weGA6dm9pZCAwO2NvbnN0IGQ9Yy5zdHlsZVtsXTtpZigiIiE9PWQmJnZvaWQgMCE9PWQpcmV0dXJuIGQ7Y29uc3Qg''@;'; put 'put ''aD1hLmdldENvbXB1dGVkU3R5bGUoYyk7cmV0dXJuIiIhPT1oW2xdJiZ2b2lkIDAhPT1oW2xdP2hbbF06dm9pZCAwfWZ1bmN0aW9uIHVYZShjLGwpe2NvbnN0e3NlbGVjdG9yVGV4dDphfT1sO2xldCBkPSExO3JldHVybiBsLnR5cGU9PT1DU1NSdWxlLlNUWUxFX1JVTEUmJmEmJihjLm1zTWF0''@;'; put 'put ''Y2hlc1NlbGVjdG9yP2Q9Yy5tc01hdGNoZXNTZWxlY3RvcihhKTpjLm1hdGNoZXMmJihkPWMubWF0Y2hlcyhhKSkpLGR9ZnVuY3Rpb24gc3UoYyl7cmV0dXJuIGMub2Zmc2V0V2lkdGh9ZnVuY3Rpb24geHUoYyl7cmV0dXJuIGMub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIG9fKGMpe3JldHVybiBj''@;'; put 'put ''LmNsaWVudEhlaWdodHx8Yy5pbm5lckhlaWdodH1mdW5jdGlvbiBDJChjKXtyZXR1cm4gYy5jbGllbnRXaWR0aHx8Yy5pbm5lcldpZHRofWZ1bmN0aW9uIGRYZShjLGwsYSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gaFhlKGMsbCxhKXtjLnJlbW92ZUV2ZW50TGlzdGVu''@;'; put 'put ''ZXIobCxhLCExKX1mdW5jdGlvbiBTJChjKXtyZXR1cm4gYy5zZWxlY3Rpb25TdGFydD9jLnNlbGVjdGlvblN0YXJ0OjB9ZnVuY3Rpb24gejJlKGMpe3JldHVybiBjLnNlbGVjdGlvbkVuZD9jLnNlbGVjdGlvbkVuZDowfWZ1bmN0aW9uIGZYZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3c7Y29uc3QgbD1jLmRvY3VtZW50O2xldCBhPSIiO3JldHVybiBjLmdldFNlbGVjdGlvbj9hPWMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTpsLnNlbGVjdGlvbiYmIkNvbnRyb2wiIT09bC5zZWxlY3Rpb24udHlwZSYm''@;'; put 'put ''KGE9bC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0KSxhfWZ1bmN0aW9uIE0kKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztjLmdldFNlbGVjdGlvbiYmKGMuZ2V0U2VsZWN0aW9uKCkuZW1wdHk/Yy5nZXRT''@;'; put 'put ''ZWxlY3Rpb24oKS5lbXB0eSgpOmMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzJiZjLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpKX1mdW5jdGlvbiB3RShjLGwsYSl7aWYodm9pZCAwPT09YSYmKGE9bCksYy5zZXRTZWxlY3Rpb25SYW5nZSl7Yy5mb2N1cygpO3RyeXtj''@;'; put 'put ''LnNldFNlbGVjdGlvblJhbmdlKGwsYSl9Y2F0Y2h7Y29uc3QgaD1jLnBhcmVudE5vZGUsZj1oLnN0eWxlLmRpc3BsYXk7aC5zdHlsZS5kaXNwbGF5PSJibG9jayIsYy5zZXRTZWxlY3Rpb25SYW5nZShsLGEpLGguc3R5bGUuZGlzcGxheT1mfX19bGV0IHgkLGxfO2Z1bmN0aW9uIGYwKCl7bGV0''@;'; put 'put ''IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O3JldHVybiB2b2lkIDA9PT14JCYmKHgkPWZ1bmN0aW9uIHBYZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1sw''@;'; put 'put ''XTpkb2N1bWVudDtjb25zdCBsPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZS5oZWlnaHQ9IjIwMHB4IixsLnN0eWxlLndpZHRoPSIxMDAlIjtjb25zdCBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5zdHlsZS5ib3hTaXppbmc9ImNvbnRlbnQtYm94IixhLnN0eWxlLmhlaWdodD0i''@;'; put 'put ''MTUwcHgiLGEuc3R5bGUubGVmdD0iMHB4IixhLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixhLnN0eWxlLnRvcD0iMHB4IixhLnN0eWxlLndpZHRoPSIyMDBweCIsYS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGEuYXBwZW5kQ2hpbGQobCks''@;'; put 'put ''KGMuYm9keXx8Yy5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKGEpO2NvbnN0IGQ9bC5vZmZzZXRXaWR0aDthLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiO2xldCBoPWwub2Zmc2V0V2lkdGg7cmV0dXJuIGQ9PT1oJiYoaD1hLmNsaWVudFdpZHRoKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxl''@;'; put 'put ''bWVudCkucmVtb3ZlQ2hpbGQoYSksZC1ofShjKSkseCR9ZnVuY3Rpb24gRSQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBXaW5kb3c/Yy5kb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodD5jLmlubmVySGVpZ2h0OmMub2Zmc2V0V2lkdGghPT1jLmNsaWVudFdpZHRofWZ1bmN0aW9uIFQkKGMpe3Jl''@;'; put 'put ''dHVybiBjIGluc3RhbmNlb2YgV2luZG93P2MuZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aD5jLmlubmVyV2lkdGg6Yy5vZmZzZXRIZWlnaHQhPT1jLmNsaWVudEhlaWdodH1mdW5jdGlvbiBQTyhjLGwsYSl7Yy5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZTNkKCR7bH0sJHthfSwwKWB9ZnVu''@;'; put 'put ''Y3Rpb24gZ1hlKGMpe2xldCBsO3JldHVybiBjLnN0eWxlLnRyYW5zZm9ybSYmIiIhPT0obD1jLnN0eWxlLnRyYW5zZm9ybSk/WyJ0cmFuc2Zvcm0iLGxdOi0xfWZ1bmN0aW9uIENFKGMpe2Muc3R5bGUudHJhbnNmb3JtJiYiIiE9PWMuc3R5bGUudHJhbnNmb3JtJiYoYy5zdHlsZS50cmFuc2Zv''@;'; put 'put ''cm09IiIpfWZ1bmN0aW9uIFNFKGMpe3JldHVybiBjJiYoWyJJTlBVVCIsIlNFTEVDVCIsIlRFWFRBUkVBIl0uaW5kZXhPZihjLm5vZGVOYW1lKT4tMXx8InRydWUiPT09Yy5jb250ZW50RWRpdGFibGUpfWZ1bmN0aW9uIEZPKGMpe3JldHVybiBTRShjKSYmITE9PT1jLmhhc0F0dHJpYnV0ZSgi''@;'; put 'put ''ZGF0YS1ob3QtaW5wdXQiKX1mdW5jdGlvbiBtWGUoYyl7Rk8oYy5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHxjLnNlbGVjdCgpfWZ1bmN0aW9uIEEkKGMpe3JldHVybiFjLnBhcmVudE5vZGV9ZnVuY3Rpb24gVTJlKGMsbCl7bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChkLGgpPT57''@;'; put 'put ''ZC5mb3JFYWNoKGY9PntmLmlzSW50ZXJzZWN0aW5nJiZudWxsIT09Yy5vZmZzZXRQYXJlbnQmJihsKCksaC51bm9ic2VydmUoYykpfSl9LHtyb290OmMub3duZXJEb2N1bWVudC5ib2R5fSkub2JzZXJ2ZShjKX1mdW5jdGlvbiBrJChjKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBkPWMub3duZXJEb2N1bWVudCxoPWQuY3JlYXRlUmFuZ2UoKSxmPWQuZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9u''@;'; put 'put ''KCk7dm8oYywiY29udGVudGVkaXRhYmxlIiwhMCksYSYmdm8oYywuLi5WNygpKSxsJiZUaShjLCJpbnZpc2libGVTZWxlY3Rpb24iKSxoLnNlbGVjdE5vZGVDb250ZW50cyhjKSxmLnJlbW92ZUFsbFJhbmdlcygpLGYuYWRkUmFuZ2UoaCl9ZnVuY3Rpb24gRCQoYyl7bGV0IGw9IShhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25zdCBhPWMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRTZWxlY3Rpb24oKTtjLmhhc0F0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSYmYy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiks''@;'; put 'put ''YS5yZW1vdmVBbGxSYW5nZXMoKSxsJiZsbyhjLCJpbnZpc2libGVTZWxlY3Rpb24iKSxjLnJlbW92ZUF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil9ZnVuY3Rpb24gWjJlKGMsbCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50''@;'; put 'put ''c1syXTtrJChjLGEpLGwoKSxEJChjLGEpfWZ1bmN0aW9uIEVwKGMpe3ZhciBsO2NvbnN0IGE9bnVsbD09Y3x8bnVsbD09PShsPWMub3duZXJEb2N1bWVudCl8fHZvaWQgMD09PWw/dm9pZCAwOmwuZGVmYXVsdFZpZXcuRWxlbWVudDtyZXR1cm4hIShhJiZudWxsIT09YSYmYyBpbnN0YW5jZW9m''@;'; put 'put ''IGEpfWZ1bmN0aW9uIG1sKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWZ1bmN0aW9uIFcyZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwLGE9MDtjb25zdCBkPXtsYXN0Q2FsbFRocm90dGxlZDohMH07bGV0''@;'; put 'put ''IGg9bnVsbDtyZXR1cm4gZnVuY3Rpb24gZigpe2Zvcih2YXIgdj1hcmd1bWVudHMubGVuZ3RoLE09bmV3IEFycmF5KHYpLEQ9MDtEPHY7RCsrKU1bRF09YXJndW1lbnRzW0RdO2NvbnN0IFo9RGF0ZS5ub3coKTtsZXQgcmU9ITE7ZC5sYXN0Q2FsbFRocm90dGxlZD0hMCxhfHwoYT1aLHJlPSEw''@;'; put 'put ''KTtjb25zdCBjZT1sLShaLWEpO3JldHVybiByZT8oZC5sYXN0Q2FsbFRocm90dGxlZD0hMSxjLmFwcGx5KHRoaXMsTSkpOihoJiZjbGVhclRpbWVvdXQoaCksaD1zZXRUaW1lb3V0KCgpPT57ZC5sYXN0Q2FsbFRocm90dGxlZD0hMSxjLmFwcGx5KHRoaXMsTSksYT0wLGg9dm9pZCAwfSxjZSkp''@;'; put 'put ''LGR9fWZ1bmN0aW9uIHZYZShjKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTA7Y29uc3QgZD1XMmUoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwKTtsZXQgaD1h''@;'; put 'put ''O2Z1bmN0aW9uIHYoKXtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxEPW5ldyBBcnJheShNKSxaPTA7WjxNO1orKylEW1pdPWFyZ3VtZW50c1taXTtyZXR1cm4gaD8oaC09MSxjLmFwcGx5KHRoaXMsRCkpOmQuYXBwbHkodGhpcyxEKX1yZXR1cm4gdi5jbGVhckhpdHM9ZnVuY3Rpb24gZigp''@;'; put 'put ''e2g9YX0sdn1mdW5jdGlvbiBNRShjKXtsZXQgZCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsYT1udWxsO3JldHVybiBmdW5jdGlvbiBoKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008''@;'; put 'put ''ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGEmJmNsZWFyVGltZW91dChhKSxhPXNldFRpbWVvdXQoKCk9PntkPWMuYXBwbHkodGhpcyx2KX0sbCksZH19ZnVuY3Rpb24gYlhlKCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFth''@;'; put 'put ''XT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1sO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdj1hcmd1bWVudHMubGVuZ3RoLE09bmV3IEFycmF5KHYpLEQ9MDtEPHY7RCsrKU1bRF09YXJndW1lbnRzW0RdO3JldHVybiBxdShoLChaLHJlKT0+cmUoWiksZC5hcHBseSh0aGlzLE0pKX19''@;'; put 'put ''ZnVuY3Rpb24gSSQoYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7''@;'; put 'put ''TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBjLmFwcGx5KHRoaXMsYS5jb25jYXQodikpfX1mdW5jdGlvbiBZMmUoYyl7Y29uc3QgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJh''@;'; put 'put ''eShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtjb25zdCBEPWQuY29uY2F0KHYpO2xldCBaO3JldHVybiBaPUQubGVuZ3RoPj1sP2MuYXBwbHkodGhpcyxEKTphKEQpLFp9fShbXSl9ZnVuY3Rpb24geVhlKGMpe2NvbnN0IGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGEoZCl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07Y29uc3QgRD1kLmNvbmNhdCh2LnJldmVyc2UoKSk7bGV0IFo7cmV0dXJuIFo9RC5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLEQpOmEo''@;'; put 'put ''RCksWn19KFtdKX1mdW5jdGlvbiBITyhjLGwsYSxkLGgsZix2LE0pe3JldHVybiBQYShNKT9jLmNhbGwobCxhLGQsaCxmLHYsTSk6UGEodik/Yy5jYWxsKGwsYSxkLGgsZix2KTpQYShmKT9jLmNhbGwobCxhLGQsaCxmKTpQYShoKT9jLmNhbGwobCxhLGQsaCk6UGEoZCk/Yy5jYWxsKGwsYSxk''@;'; put 'put ''KTpQYShhKT9jLmNhbGwobCxhKTpjLmNhbGwobCl9ZnVuY3Rpb24gc18oYyl7bGV0IGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/bD1jLmxlbmd0aD9uZXcgQXJyYXkoYy5sZW5ndGgpLmZpbGwobnVsbCk6W106KGw9e30sWG8oYywoYSxkKT0+eyJfX2NoaWxkcmVuIiE9PWQmJihsW2RdPWEm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgYSYmIUFycmF5LmlzQXJyYXkoYSk/c18oYSk6QXJyYXkuaXNBcnJheShhKT9hLmxlbmd0aCYmIm9iamVjdCI9PXR5cGVvZiBhWzBdJiYhQXJyYXkuaXNBcnJheShhWzBdKT9bc18oYVswXSldOltdOm51bGwpfSkpLGx9ZnVuY3Rpb24gRzJlKGMsbCl7cmV0dXJu''@;'; put 'put ''IGwucHJvdG90eXBlLmNvbnN0cnVjdG9yPWwsYy5wcm90b3R5cGU9bmV3IGwsYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjfWZ1bmN0aW9uIEV1KGMsbCxhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk7cmV0dXJuIFhvKGwsKGgsZik9PnsoITE9PT1kfHxhLmluY2x1ZGVzKGYpKSYmKGNb''@;'; put 'put ''Zl09aCl9KSxjfWZ1bmN0aW9uIHhFKGMsbCl7WG8obCwoYSxkKT0+e2xbZF0mJiJvYmplY3QiPT10eXBlb2YgbFtkXT8oY1tkXXx8KGNbZF09QXJyYXkuaXNBcnJheShsW2RdKT9bXToiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobFtkXSk/bFtkXTp7''@;'; put 'put ''fSkseEUoY1tkXSxsW2RdKSk6Y1tkXT1sW2RdfSl9ZnVuY3Rpb24gZzEoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpOmN9ZnVuY3Rpb24gbjMoYyl7Y29uc3QgbD17fTtyZXR1cm4gWG8oYywoYSxkKT0+e2xbZF09YX0pLGx9ZnVuY3Rp''@;'; put 'put ''b24gVGwoYyl7Yy5NSVhJTlN8fChjLk1JWElOUz1bXSk7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBZbihhLGg9PntjLk1JWElOUy5wdXNoKGguTUlYSU5fTkFNRSksWG8oaCwo''@;'; put 'put ''Zix2KT0+e2lmKHZvaWQgMCE9PWMucHJvdG90eXBlW3ZdKXRocm93IG5ldyBFcnJvcihgTWl4aW4gY29uZmxpY3QuIFByb3BlcnR5ICcke3Z9JyBhbHJlYWR5IGV4aXN0IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uYCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYpYy5wcm90b3R5cGVbdl09''@;'; put 'put ''ZjtlbHNle2NvbnN0IEQ9ZnVuY3Rpb24ocmUpe2NvbnN0IGNlPWBfJHtyZX1gO3JldHVybiBmdW5jdGlvbihiZSl7dGhpc1tjZV09YmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsdix7Z2V0OmZ1bmN0aW9uKHJlLGNlKXtjb25zdCBiZT1gXyR7cmV9YDtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpc1tiZV0mJih0aGlzW2JlXT0oQmU9PntsZXQgcWU9QmU7cmV0dXJuKEFycmF5LmlzQXJyYXkocWUpfHxxbyhxZSkpJiYocWU9ZzEocWUpKSxxZX0pKGNlKSksdGhpc1tiZV19fSh2LGYpLHNldDpEKHYpLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSks''@;'; put 'put ''Y31mdW5jdGlvbiBOTyhjLGwpe3JldHVybiBKU09OLnN0cmluZ2lmeShjKT09PUpTT04uc3RyaW5naWZ5KGwpfWZ1bmN0aW9uIHFvKGMpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfWZ1bmN0aW9uIFRwKGMsbCxhLGQpe2QudmFs''@;'; put 'put ''dWU9YSxkLndyaXRhYmxlPSExIT09ZC53cml0YWJsZSxkLmVudW1lcmFibGU9ITEhPT1kLmVudW1lcmFibGUsZC5jb25maWd1cmFibGU9ITEhPT1kLmNvbmZpZ3VyYWJsZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLGQpfWZ1bmN0aW9uIFhvKGMsbCl7Zm9yKGNvbnN0IGEgaW4gYylpZigo''@;'; put 'put ''IWMuaGFzT3duUHJvcGVydHl8fGMuaGFzT3duUHJvcGVydHkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGEpKSYmITE9PT1sKGNbYV0sYSxjKSlicmVhaztyZXR1cm4gY31mdW5jdGlvbiAkMmUoYyxsKXtjb25zdCBhPWwuc3BsaXQoIi4iKTtsZXQgZD1jO3JldHVy''@;'; put 'put ''biBYbyhhLGg9PntpZihkPWRbaF0sdm9pZCAwPT09ZClyZXR1cm4gZD12b2lkIDAsITF9KSxkfWZ1bmN0aW9uIFZPKGMsbCxhKXtpZigic3RyaW5nIiE9dHlwZW9mIGwpcmV0dXJuO2NvbnN0IGQ9bC5zcGxpdCgiLiIpO2xldCBoPWM7ZC5mb3JFYWNoKChmLHYpPT57Il9fcHJvdG9fXyI9PT1m''@;'; put 'put ''fHwiY29uc3RydWN0b3IiPT09Znx8InByb3RvdHlwZSI9PT1mfHwodiE9PWQubGVuZ3RoLTE/KFR1KGgsZil8fChoW2ZdPXt9KSxoPWhbZl0pOmhbZl09YSl9KX1mdW5jdGlvbiBCTyhjKXtpZighcW8oYykpcmV0dXJuIDA7Y29uc3QgbD1mdW5jdGlvbihhKXtsZXQgZD0wO3JldHVybiBxbyhh''@;'; put 'put ''KT9YbyhhLChoLGYpPT57Il9fY2hpbGRyZW4iIT09ZiYmKGQrPWwoaCkpfSk6ZCs9MSxkfTtyZXR1cm4gbChjKX1mdW5jdGlvbiBGZChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InZhbHVlIjtjb25zdCBhPWBfJHtsfWAs''@;'; put 'put ''ZD17X3RvdWNoZWQ6ITEsW2FdOmMsaXNUb3VjaGVkKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWR9fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsbCx7Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXt0aGlzLl90b3VjaGVkPSEwLHRoaXNbYV09aH0sZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITB9KSxkfWZ1bmN0aW9uIFR1KGMsbCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGwpfWZ1bmN0aW9uIEVFKGMpe3JldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGMpfWZ1bmN0aW9uIFRFKGMpe3dpbmRvdy5jYW5jZWxB''@;'; put 'put ''bmltYXRpb25GcmFtZShjKX1mdW5jdGlvbiBSJCgpe3JldHVybiJvbnRvdWNoc3RhcnQiaW4gd2luZG93fWZ1bmN0aW9uIEsyZSgpe3JldHVybiB0eXBlb2Ygd2luZG93PCJ1In1mdW5jdGlvbiBxMmUoYyl7cmV0dXJuIGxffHwobF89Im9iamVjdCI9PXR5cGVvZiBJbnRsP25ldyBJbnRsLkNv''@;'; put 'put ''bGxhdG9yKGMsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5jb21wYXJlOiJmdW5jdGlvbiI9PXR5cGVvZiBTdHJpbmcucHJvdG90eXBlLmxvY2FsZUNvbXBhcmU/KGEsZCk9PmAke2F9YC5sb2NhbGVDb21wYXJlKGQpOihhLGQpPT5h''@;'; put 'put ''PT09ZD8wOmE+ZD8tMToxLGxfKX15KDk1NDkzKTtjb25zdCBWMj1jPT57Y29uc3QgbD17dmFsdWU6ITEsdGVzdDooYSxkKT0+e2wudmFsdWU9YyhhLGQpfX07cmV0dXJuIGx9LGJnPXtjaHJvbWU6VjIoKGMsbCk9Pi9DaHJvbWUvLnRlc3QoYykmJi9Hb29nbGUvLnRlc3QobCkpLGNocm9tZVdl''@;'; put 'put ''YktpdDpWMihjPT4vQ3JpT1MvLnRlc3QoYykpLGVkZ2U6VjIoYz0+L0VkZ2UvLnRlc3QoYykpLGVkZ2VXZWJLaXQ6VjIoYz0+L0VkZ2lPUy8udGVzdChjKSksZmlyZWZveDpWMihjPT4vRmlyZWZveC8udGVzdChjKSksZmlyZWZveFdlYktpdDpWMihjPT4vRnhpT1MvLnRlc3QoYykpLG1vYmls''@;'; put 'put ''ZTpWMihjPT4vQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QoYykpLHNhZmFyaTpWMigoYyxsKT0+L1NhZmFyaS8udGVzdChjKSYmL0FwcGxlIENvbXB1dGVyLy50ZXN0KGwpKX0sY189e21hYzpWMihjPT4vXk1hYy8u''@;'; put 'put ''dGVzdChjKSksd2luOlYyKGM9Pi9eV2luLy50ZXN0KGMpKSxsaW51eDpWMihjPT4vXkxpbnV4Ly50ZXN0KGMpKSxpb3M6VjIoYz0+L2lQaG9uZXxpUGFkfGlQb2QvaS50ZXN0KGMpKX07ZnVuY3Rpb24gWDJlKCl7bGV0e3VzZXJBZ2VudDpjPW5hdmlnYXRvci51c2VyQWdlbnQsdmVuZG9yOmw9''@;'; put 'put ''bmF2aWdhdG9yLnZlbmRvcn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O1hvKGJnLGE9PntsZXR7dGVzdDpkfT1hO2QoYyxsKX0pfWZ1bmN0aW9uIEoyZSgpe2xldHtwbGF0Zm9ybTpjPW5hdmlnYXRvci5wbGF0Zm9ybX09YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O1hvKGNfLGw9PntsZXR7dGVzdDphfT1sO2EoYyl9KX1mdW5jdGlvbiBMJCgpe3JldHVybiBiZy5jaHJvbWUudmFsdWV9ZnVuY3Rpb24gUTJlKCl7cmV0dXJuIGJnLmNocm9tZVdlYktpdC52YWx1ZX1m''@;'; put 'put ''dW5jdGlvbiBqTygpe3JldHVybiBiZy5maXJlZm94LnZhbHVlfWZ1bmN0aW9uIGVmZSgpe3JldHVybiBiZy5maXJlZm94V2ViS2l0LnZhbHVlfWZ1bmN0aW9uIEFFKCl7cmV0dXJuIGJnLnNhZmFyaS52YWx1ZX1mdW5jdGlvbiB0ZmUoKXtyZXR1cm4gYmcuZWRnZS52YWx1ZX1mdW5jdGlvbiBf''@;'; put 'put ''WGUoKXtyZXR1cm4gYmcuZWRnZVdlYktpdC52YWx1ZX1mdW5jdGlvbiBBcCgpe3JldHVybiBiZy5tb2JpbGUudmFsdWV9ZnVuY3Rpb24gTyQoKXtyZXR1cm4gY18uaW9zLnZhbHVlfWZ1bmN0aW9uIFAkKCl7bGV0e21heFRvdWNoUG9pbnRzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuYXZpZ2F0b3I7cmV0dXJuIGM+MiYmY18ubWFjLnZhbHVlfWZ1bmN0aW9uIEYkKCl7cmV0dXJuIGNfLndpbi52YWx1ZX1mdW5jdGlvbiB6Tygpe3JldHVybiBjXy5tYWMudmFsdWV9ZnVuY3Rpb24gd1hlKCl7cmV0dXJuIGNfLmxpbnV4LnZh''@;'; put 'put ''bHVlfUsyZSgpJiYoWDJlKCksSjJlKCkpO2NvbnN0IFlhPXtBTFQ6MTgsQVJST1dfRE9XTjo0MCxBUlJPV19MRUZUOjM3LEFSUk9XX1JJR0hUOjM5LEFSUk9XX1VQOjM4LEFVRElPX0RPV046ak8oKT8xODI6MTc0LEFVRElPX01VVEU6ak8oKT8xODE6MTczLEFVRElPX1VQOmpPKCk/MTgzOjE3''@;'; put 'put ''NSxCQUNLU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09NTUE6MTg4LENPTU1BTkRfTEVGVDo5MSxDT01NQU5EX1JJR0hUOjkzLENPTU1BTkRfRklSRUZPWDoyMjQsQ09OVFJPTDoxNyxERUxFVEU6NDYsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxGMToxMTIsRjI6MTEzLEYzOjExNCxGNDoxMTUs''@;'; put 'put ''RjU6MTE2LEY2OjExNyxGNzoxMTgsRjg6MTE5LEY5OjEyMCxGMTA6MTIxLEYxMToxMjIsRjEyOjEyMyxGMTM6MTI0LEYxNDoxMjUsRjE1OjEyNixGMTY6MTI3LEYxNzoxMjgsRjE4OjEyOSxGMTk6MTMwLEhPTUU6MzYsSU5TRVJUOjQ1LE1FRElBX05FWFQ6MTc2LE1FRElBX1BMQVlfUEFVU0U6''@;'; put 'put ''MTc5LE1FRElBX1BSRVY6MTc3LE1FRElBX1NUT1A6MTc4LE5VTEw6MCxOVU1fTE9DSzoxNDQsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEFVU0U6MTksUEVSSU9EOjE5MCxTQ1JPTExfTE9DSzoxNDUsU0hJRlQ6MTYsU1BBQ0U6MzIsVEFCOjksQTo2NSxDOjY3LEQ6NjgsRjo3MCxMOjc2LE86''@;'; put 'put ''NzksUDo4MCxTOjgzLFY6ODYsWDo4OCxZOjg5LFo6OTB9LENYZT1bWWEuQUxULFlhLkFSUk9XX0RPV04sWWEuQVJST1dfTEVGVCxZYS5BUlJPV19SSUdIVCxZYS5BUlJPV19VUCxZYS5BVURJT19ET1dOLFlhLkFVRElPX01VVEUsWWEuQVVESU9fVVAsWWEuQkFDS1NQQUNFLFlhLkNBUFNfTE9D''@;'; put 'put ''SyxZYS5ERUxFVEUsWWEuRU5ELFlhLkVOVEVSLFlhLkVTQ0FQRSxZYS5GMSxZYS5GMixZYS5GMyxZYS5GNCxZYS5GNSxZYS5GNixZYS5GNyxZYS5GOCxZYS5GOSxZYS5GMTAsWWEuRjExLFlhLkYxMixZYS5GMTMsWWEuRjE0LFlhLkYxNSxZYS5GMTYsWWEuRjE3LFlhLkYxOCxZYS5GMTksWWEu''@;'; put 'put ''SE9NRSxZYS5JTlNFUlQsWWEuTUVESUFfTkVYVCxZYS5NRURJQV9QTEFZX1BBVVNFLFlhLk1FRElBX1BSRVYsWWEuTUVESUFfU1RPUCxZYS5OVUxMLFlhLk5VTV9MT0NLLFlhLlBBR0VfRE9XTixZYS5QQUdFX1VQLFlhLlBBVVNFLFlhLlNDUk9MTF9MT0NLLFlhLlNISUZULFlhLlRBQl07ZnVu''@;'; put 'put ''Y3Rpb24gbmZlKGMpe3JldHVybiAzMj09PWN8fGM+PTQ4JiZjPD01N3x8Yz49OTYmJmM8PTExMXx8Yz49MTg2JiZjPD0xOTJ8fGM+PTIxOSYmYzw9MjIyfHxjPj0yMjZ8fGM+PTY1JiZjPD05MH1mdW5jdGlvbiBIJChjKXtyZXR1cm4gQ1hlLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIFNYZShjKXtj''@;'; put 'put ''b25zdCBsPVtdO3JldHVybiB6TygpP2wucHVzaChZYS5DT01NQU5EX0xFRlQsWWEuQ09NTUFORF9SSUdIVCxZYS5DT01NQU5EX0ZJUkVGT1gpOmwucHVzaChZYS5DT05UUk9MKSxsLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIHJmZShjKXtyZXR1cm5bWWEuQ09OVFJPTCxZYS5DT01NQU5EX0xFRlQs''@;'; put 'put ''WWEuQ09NTUFORF9SSUdIVCxZYS5DT01NQU5EX0ZJUkVGT1hdLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIHVfKGMsbCl7Y29uc3QgYT1sLnNwbGl0KCJ8Iik7bGV0IGQ9ITE7cmV0dXJuIFluKGEsaD0+e2lmKGM9PT1ZYVtoXSlyZXR1cm4gZD0hMCwhMX0pLGR9ZnVuY3Rpb24gQjIoYyl7Yy5pc0lt''@;'; put 'put ''bWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZD0hMSxjLmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBGbShjKXtyZXR1cm4hMT09PWMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWR9ZnVuY3Rpb24gSG0oYyl7cmV0dXJuIDI9PT1jLmJ1dHRvbn1mdW5jdGlvbiBVTyhjKXtyZXR1cm4gMD09''@;'; put 'put ''PWMuYnV0dG9ufWZ1bmN0aW9uIGlmZShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFRvdWNoRXZlbnR9ZnVuY3Rpb24gYWZlKGMsbCl7Y29uc3QgYT17eDpjLm9mZnNldFgseTpjLm9mZnNldFl9O2xldCBkPWMudGFyZ2V0O2lmKCFFcChsKXx8ZCE9PWwmJmQuY29udGFpbnMobCkpcmV0dXJuIGE7''@;'; put 'put ''Zm9yKDtkIT09bDspYS54Kz1kLm9mZnNldExlZnQsYS55Kz1kLm9mZnNldFRvcCxkPWQub2Zmc2V0UGFyZW50O3JldHVybiBhfWZ1bmN0aW9uIGlsKCl7UGEoY29uc29sZSkmJmNvbnNvbGUud2FybiguLi5hcmd1bWVudHMpfWZ1bmN0aW9uIE4kKCl7UGEoY29uc29sZSkmJmNvbnNvbGUuZXJy''@;'; put 'put ''b3IoLi4uYXJndW1lbnRzKX1jb25zdCBaNz1bImFmdGVyQ2VsbE1ldGFSZXNldCIsImFmdGVyQ2hhbmdlIiwiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIiwiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVE''@;'; put 'put ''cm9wZG93bk1lbnVTZXRJdGVtcyIsImFmdGVyQ29udGV4dE1lbnVIaWRlIiwiYmVmb3JlQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb250ZXh0TWVudVNob3ciLCJhZnRlckNvcHlMaW1pdCIsImJlZm9yZUNyZWF0ZUNvbCIsImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLCJhZnRlckNyZWF0''@;'; put 'put ''ZUNvbCIsImJlZm9yZUNyZWF0ZVJvdyIsImFmdGVyQ3JlYXRlUm93IiwiYWZ0ZXJEZXNlbGVjdCIsImFmdGVyRGVzdHJveSIsImFmdGVyRG9jdW1lbnRLZXlEb3duIiwiYWZ0ZXJEcmF3U2VsZWN0aW9uIiwiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiLCJiZWZvcmVDb21wb3NpdGlvblN0''@;'; put 'put ''YXJ0IiwiYWZ0ZXJHZXRDZWxsTWV0YSIsImFmdGVyR2V0Q29sSGVhZGVyIiwiYWZ0ZXJHZXRSb3dIZWFkZXIiLCJhZnRlckluaXQiLCJhZnRlckxvYWREYXRhIiwiYWZ0ZXJVcGRhdGVEYXRhIiwiYWZ0ZXJNb21lbnR1bVNjcm9sbCIsImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIiwiYWZ0''@;'; put 'put ''ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsImFmdGVyT25DZWxsTW91c2VEb3duIiwiYWZ0ZXJPbkNlbGxNb3VzZVVwIiwiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsImFmdGVyT25DZWxsTW91c2VPdmVyIiwiYWZ0ZXJPbkNlbGxNb3VzZU91dCIsImFmdGVyUmVtb3ZlQ29sIiwiYWZ0ZXJSZW1v''@;'; put 'put ''dmVSb3ciLCJiZWZvcmVSZW5kZXJlciIsImFmdGVyUmVuZGVyZXIiLCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIiwiYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5IiwiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbCIsImFmdGVyU2Ny''@;'; put 'put ''b2xsSG9yaXpvbnRhbGx5IiwiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwiYWZ0ZXJTY3JvbGwiLCJhZnRlclNlbGVjdGlvbiIsImFmdGVyU2VsZWN0aW9uQnlQcm9wIiwiYWZ0ZXJTZWxlY3Rpb25FbmQiLCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQi''@;'; put 'put ''LCJiZWZvcmVTZWxlY3RDb2x1bW5zIiwiYWZ0ZXJTZWxlY3RDb2x1bW5zIiwiYmVmb3JlU2VsZWN0Um93cyIsImFmdGVyU2VsZWN0Um93cyIsImFmdGVyU2V0Q2VsbE1ldGEiLCJhZnRlclJlbW92ZUNlbGxNZXRhIiwiYWZ0ZXJTZXREYXRhQXRDZWxsIiwiYWZ0ZXJTZXREYXRhQXRSb3dQcm9w''@;'; put 'put ''IiwiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiwiYWZ0ZXJTZXRUaGVtZSIsImFmdGVyVXBkYXRlU2V0dGluZ3MiLCJhZnRlclZhbGlkYXRlIiwiYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UiLCJhZnRlckxhbmd1YWdlQ2hhbmdlIiwiYmVmb3JlQXV0b2ZpbGwiLCJhZnRlckF1dG9maWxsIiwiYmVm''@;'; put 'put ''b3JlQ2VsbEFsaWdubWVudCIsImJlZm9yZUNoYW5nZSIsImJlZm9yZUNoYW5nZVJlbmRlciIsImJlZm9yZURyYXdCb3JkZXJzIiwiYmVmb3JlR2V0Q2VsbE1ldGEiLCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsImJlZm9yZUluaXQiLCJiZWZvcmVJbml0V2Fsa29udGFibGUiLCJiZWZvcmVMb2Fk''@;'; put 'put ''RGF0YSIsImJlZm9yZVVwZGF0ZURhdGEiLCJiZWZvcmVLZXlEb3duIiwiYmVmb3JlT25DZWxsTW91c2VEb3duIiwiYmVmb3JlT25DZWxsTW91c2VVcCIsImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IiwiYmVmb3JlT25DZWxsTW91c2VPdmVyIiwiYmVmb3JlT25DZWxsTW91c2VPdXQiLCJiZWZv''@;'; put 'put ''cmVSZW1vdmVDb2wiLCJiZWZvcmVSZW1vdmVSb3ciLCJiZWZvcmVWaWV3UmVuZGVyIiwiYWZ0ZXJWaWV3UmVuZGVyIiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJiZWZvcmVSb3dXcmFwIiwiYmVmb3JlQ29sdW1uV3JhcCIsImJlZm9yZVNldENlbGxNZXRhIiwiYmVmb3JlU2VsZWN0''@;'; put 'put ''aW9uRm9jdXNTZXQiLCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsImJlZm9yZVNldFJhbmdlU3RhcnQiLCJiZWZvcmVTZXRSYW5nZUVuZCIsImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsImJlZm9yZVRvdWNoU2Nyb2xsIiwiYmVmb3JlVmFsaWRhdGUiLCJiZWZvcmVWYWx1ZVJlbmRl''@;'; put 'put ''ciIsImNvbnN0cnVjdCIsImluaXQiLCJtb2RpZnlDb2xIZWFkZXIiLCJtb2RpZnlDb2xXaWR0aCIsIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIiwibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLCJtb2RpZnlSb3dIZWFkZXIiLCJtb2RpZnlSb3dIZWlnaHQiLCJtb2RpZnlSb3dIZWlnaHRC''@;'; put 'put ''eU92ZXJsYXlOYW1lIiwibW9kaWZ5RGF0YSIsIm1vZGlmeVNvdXJjZURhdGEiLCJtb2RpZnlSb3dEYXRhIiwibW9kaWZ5R2V0Q2VsbENvb3JkcyIsIm1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLCJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRl''@;'; put 'put ''ciIsImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJiZWZvcmVDb2x1bW5Tb3J0IiwiYWZ0ZXJDb2x1bW5Tb3J0IiwibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsIm1v''@;'; put 'put ''ZGlmeUNvcHlhYmxlUmFuZ2UiLCJiZWZvcmVDdXQiLCJhZnRlckN1dCIsImJlZm9yZUNvcHkiLCJhZnRlckNvcHkiLCJiZWZvcmVQYXN0ZSIsImFmdGVyUGFzdGUiLCJiZWZvcmVDb2x1bW5GcmVlemUiLCJhZnRlckNvbHVtbkZyZWV6ZSIsImJlZm9yZUNvbHVtbk1vdmUiLCJhZnRlckNvbHVt''@;'; put 'put ''bk1vdmUiLCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsImFmdGVyQ29sdW1uVW5mcmVlemUiLCJiZWZvcmVSb3dNb3ZlIiwiYWZ0ZXJSb3dNb3ZlIiwiYmVmb3JlQ29sdW1uUmVzaXplIiwiYWZ0ZXJDb2x1bW5SZXNpemUiLCJiZWZvcmVSb3dSZXNpemUiLCJhZnRlclJvd1Jlc2l6ZSIsImFmdGVy''@;'; put 'put ''R2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIiwiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLCJiZWZvcmVGaWx0ZXIiLCJhZnRlckZpbHRlciIsImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLCJhZnRlck5hbWVkRXhwcmVzc2lvbkFk''@;'; put 'put ''ZGVkIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiwiYWZ0ZXJTaGVldEFkZGVkIiwiYWZ0ZXJTaGVldFJlbmFtZWQiLCJhZnRlclNoZWV0UmVtb3ZlZCIsIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIiwiYmVmb3JlVW5kbyIsImJlZm9y''@;'; put 'put ''ZVVuZG9TdGFja0NoYW5nZSIsImFmdGVyVW5kbyIsImFmdGVyVW5kb1N0YWNrQ2hhbmdlIiwiYmVmb3JlUmVkbyIsImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsImFmdGVyUmVkbyIsImFmdGVyUmVkb1N0YWNrQ2hhbmdlIiwibW9kaWZ5Um93SGVhZGVyV2lkdGgiLCJtb2RpZnlUcmFuc2Zvcm1G''@;'; put 'put ''b2N1cyIsIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwibW9kaWZ5VHJhbnNmb3JtRW5kIiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJp''@;'; put 'put ''ZGUiLCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCJiZWZvcmVIaWRlUm93cyIsImFmdGVySGlkZVJvd3MiLCJiZWZvcmVVbmhpZGVSb3dzIiwiYWZ0ZXJVbmhpZGVSb3dzIiwiYmVmb3JlSGlkZUNvbHVtbnMiLCJhZnRl''@;'; put 'put ''ckhpZGVDb2x1bW5zIiwiYmVmb3JlVW5oaWRlQ29sdW1ucyIsImFmdGVyVW5oaWRlQ29sdW1ucyIsImJlZm9yZVRyaW1Sb3ciLCJhZnRlclRyaW1Sb3ciLCJiZWZvcmVVbnRyaW1Sb3ciLCJhZnRlclVudHJpbVJvdyIsImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVu''@;'; put 'put ''dVNob3ciLCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCJiZWZvcmVBZGRDaGlsZCIsImFmdGVyQWRkQ2hpbGQiLCJiZWZvcmVEZXRhY2hDaGlsZCIsImFmdGVyRGV0YWNoQ2hpbGQiLCJiZWZvcmVCZWdpbkVkaXRpbmciLCJhZnRlckJlZ2luRWRpdGluZyIsImJlZm9yZU1lcmdlQ2VsbHMiLCJh''@;'; put 'put ''ZnRlck1lcmdlQ2VsbHMiLCJiZWZvcmVVbm1lcmdlQ2VsbHMiLCJhZnRlclVubWVyZ2VDZWxscyIsImFmdGVyTGlzdGVuIiwiYWZ0ZXJVbmxpc3RlbiIsImFmdGVyUmVmcmVzaERpbWVuc2lvbnMiLCJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9yZUNvbHVtbkNvbGxhcHNlIiwiYWZ0''@;'; put 'put ''ZXJDb2x1bW5Db2xsYXBzZSIsImJlZm9yZUNvbHVtbkV4cGFuZCIsImFmdGVyQ29sdW1uRXhwYW5kIiwibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIl0sViQ9bmV3IE1hcChbWyJtb2RpZnlSb3ciLCI4LjAuMCJdLFsibW9kaWZ5Q29sIiwiOC4wLjAiXSxbInVubW9kaWZ5Um93IiwiOC4wLjAi''@;'; put 'put ''XSxbInVubW9kaWZ5Q29sIiwiOC4wLjAiXSxbInNraXBMZW5ndGhDYWNoZSIsIjguMC4wIl0sWyJoaWRkZW5Db2x1bW4iLCI4LjAuMCJdLFsiaGlkZGVuUm93IiwiOC4wLjAiXV0pLEIkPW5ldyBNYXAoW1tdXSk7ZnVuY3Rpb24gaiQoYyxsLGEpe29mZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rp''@;'; put 'put ''b24gb2ZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBzZmUoYyxsLGEpe3JldHVybiBjLnNldChaTyhjLGwpLGEpLGF9ZnVuY3Rpb24g''@;'; put 'put ''WjAoYyxsKXtyZXR1cm4gYy5nZXQoWk8oYyxsKSl9ZnVuY3Rpb24gWk8oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJl''@;'; put 'put ''c2VudCBvbiB0aGlzIG9iamVjdCIpfXkoMjMwMTIpLHkoODEyNjApO3ZhciBEaD1uZXcgV2Vha01hcCxkXz1uZXcgV2Vha01hcCx6JD1uZXcgV2Vha01hcCxVJD1uZXcgV2Vha1NldDtjbGFzcyBsZmV7Y29uc3RydWN0b3IoKXsoZnVuY3Rpb24gTVhlKGMsbCl7b2ZlKGMsbCksbC5hZGQoYyl9''@;'; put 'put ''KSh0aGlzLFUkKSxqJCh0aGlzLERoLG5ldyBNYXApLGokKHRoaXMsZF8sbmV3IE1hcCksaiQodGhpcyx6JCxuZXcgU2V0KSxaNy5mb3JFYWNoKGw9PlpPKFUkLHRoaXMsY2ZlKS5jYWxsKHRoaXMsbCkpfWdldEhvb2tzKGwpe3ZhciBhO3JldHVybiBudWxsIT09KGE9WjAoRGgsdGhpcykuZ2V0''@;'; put 'put ''KGwpKSYmdm9pZCAwIT09YT9hOltdfWFkZChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtaMChEaCx0aGlzKS5oYXMobCl8fChaTyhVJCx0aGlzLGNmZSkuY2FsbCh0aGlzLGwpLFo3LnB1c2gobCkpO2NvbnN0IGg9''@;'; put 'put ''WjAoRGgsdGhpcykuZ2V0KGwpO2lmKGguZmluZChaPT5aLmNhbGxiYWNrPT09YSkpcmV0dXJuO2NvbnN0IGY9TnVtYmVyLmlzSW50ZWdlcihkLm9yZGVySW5kZXgpP2Qub3JkZXJJbmRleDowLHY9ISFkLnJ1bk9uY2UsTT0hIWQuaW5pdGlhbEhvb2s7bGV0IEQ9ITE7aWYoTSl7Y29uc3QgWj1o''@;'; put 'put ''LmZpbmQocmU9PnJlLmluaXRpYWxIb29rKTtaJiYoWi5jYWxsYmFjaz1hLEQ9ITApfWlmKCFEKXtoLnB1c2goe2NhbGxiYWNrOmEsb3JkZXJJbmRleDpmLHJ1bk9uY2U6dixpbml0aWFsSG9vazpNLHNraXA6ITF9KTtsZXQgWj1aMCh6JCx0aGlzKS5oYXMobCk7IVomJjAhPT1mJiYoWj0hMCxa''@;'; put 'put ''MCh6JCx0aGlzKS5hZGQobCkpLFomJmgubGVuZ3RoPjEmJlowKERoLHRoaXMpLnNldChsLGgudG9Tb3J0ZWQoKHJlLGNlKT0+cmUub3JkZXJJbmRleC1jZS5vcmRlckluZGV4KSl9fWhhcyhsKXtyZXR1cm4gWjAoRGgsdGhpcykuaGFzKGwpJiZaMChEaCx0aGlzKS5nZXQobCkubGVuZ3RoPjB9''@;'; put 'put ''cmVtb3ZlKGwsYSl7aWYoIVowKERoLHRoaXMpLmhhcyhsKSlyZXR1cm4hMTtjb25zdCBkPVowKERoLHRoaXMpLmdldChsKSxoPWQuZmluZChmPT5mLmNhbGxiYWNrPT09YSk7aWYoaCl7bGV0IGY9WjAoZF8sdGhpcykuZ2V0KGwpO3JldHVybiBoLnNraXA9ITAsZis9MSxmPjEwMCYmKFowKERo''@;'; put 'put ''LHRoaXMpLnNldChsLGQuZmlsdGVyKHY9PiF2LnNraXApKSxmPTApLFowKGRfLHRoaXMpLnNldChsLGYpLCEwfXJldHVybiExfWRlc3Ryb3koKXtaMChEaCx0aGlzKS5jbGVhcigpLFowKGRfLHRoaXMpLmNsZWFyKCksc2ZlKERoLHRoaXMsbnVsbCksc2ZlKGRfLHRoaXMsbnVsbCl9fWZ1bmN0''@;'; put 'put ''aW9uIGNmZShjKXtaMChEaCx0aGlzKS5zZXQoYyxbXSksWjAoZF8sdGhpcykuc2V0KGMsMCl9Y29uc3Qga1hlPWdsYFRoZSBwbHVnaW4gaG9vayAiW2hvb2tOYW1lXSIgd2FzIHJlbW92ZWQgaW4gSGFuZHNvbnRhYmxlIFtyZW1vdmVkSW5WZXJzaW9uXS5ceDIwCiAgUGxlYXNlIGNvbnN1bHQg''@;'; put 'put ''cmVsZWFzZSBub3RlcyBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9yZWxlYXNlcy90YWcvW3JlbW92ZWRJblZlcnNpb25dIHRvXHgyMAogIGxlYXJuIGFib3V0IHRoZSBtaWdyYXRpb24gcGF0aC5gO2NsYXNzIFNhe2NvbnN0cnVjdG9yKCl7IWZ1bmN0aW9u''@;'; put 'put ''IEVYZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVFhlKGMpe3ZhciBsPWZ1bmN0aW9uIEFYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImdsb2JhbEJ1Y2tldCIsbmV3IGxmZSl9c3RhdGljIGdldFNpbmdsZXRv''@;'; put 'put ''bigpe3JldHVybiBmdW5jdGlvbiBJWGUoKXtyZXR1cm4gRFhlfSgpfWdldEJ1Y2tldCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBsPyhsLnBsdWdpbkhvb2tCdWNrZXR8fChsLnBsdWdpbkhvb2tCdWNr''@;'; put 'put ''ZXQ9bmV3IGxmZSksbC5wbHVnaW5Ib29rQnVja2V0KTp0aGlzLmdsb2JhbEJ1Y2tldH1hZGQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAw''@;'; put 'put ''O3JldHVybiBBcnJheS5pc0FycmF5KGEpP1luKGEsZj0+dGhpcy5hZGQobCxmLGQpKTooViQuaGFzKGwpJiZpbChwJChrWGUse2hvb2tOYW1lOmwscmVtb3ZlZEluVmVyc2lvbjpWJC5nZXQobCl9KSksQiQuaGFzKGwpJiZpbChCJC5nZXQobCkpLHRoaXMuZ2V0QnVja2V0KGQpLmFkZChsLGEs''@;'; put 'put ''e29yZGVySW5kZXg6aCxydW5PbmNlOiExfSkpLHRoaXN9b25jZShsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGg9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7cmV0dXJuIEFycmF5Lmlz''@;'; put 'put ''QXJyYXkoYSk/WW4oYSxmPT50aGlzLm9uY2UobCxmLGQpKTp0aGlzLmdldEJ1Y2tldChkKS5hZGQobCxhLHtvcmRlckluZGV4OmgscnVuT25jZTohMH0pLHRoaXN9YWRkQXNGaXhlZChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50''@;'; put 'put ''c1syXTpudWxsO3JldHVybiBBcnJheS5pc0FycmF5KGEpP1luKGEsaD0+dGhpcy5hZGRBc0ZpeGVkKGwsaCxkKSk6dGhpcy5nZXRCdWNrZXQoZCkuYWRkKGwsYSx7aW5pdGlhbEhvb2s6ITB9KSx0aGlzfXJlbW92ZShsLGEpe3JldHVybiB0aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCkucmVtb3ZlKGwsYSl9aGFzKGwpe3JldHVybiB0aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCkuaGFzKGwpfXJ1bihsLGEsZCxo''@;'; put 'put ''LGYsdixNLEQpe3tjb25zdCBaPXRoaXMuZ2V0QnVja2V0KCkuZ2V0SG9va3MoYSkscmU9Wj9aLmxlbmd0aDowO2xldCBjZT0wO2lmKHJlKWZvcig7Y2U8cmU7KXtpZighWltjZV18fFpbY2VdLnNraXApe2NlKz0xO2NvbnRpbnVlfWNvbnN0IGJlPUhPKFpbY2VdLmNhbGxiYWNrLGwsZCxoLGYs''@;'; put 'put ''dixNLEQpO3ZvaWQgMCE9PWJlJiYoZD1iZSksWltjZV0mJlpbY2VdLnJ1bk9uY2UmJnRoaXMucmVtb3ZlKGEsWltjZV0uY2FsbGJhY2spLGNlKz0xfX17Y29uc3QgWj10aGlzLmdldEJ1Y2tldChsKS5nZXRIb29rcyhhKSxyZT1aP1oubGVuZ3RoOjA7bGV0IGNlPTA7aWYocmUpZm9yKDtjZTxy''@;'; put 'put ''ZTspe2lmKCFaW2NlXXx8WltjZV0uc2tpcCl7Y2UrPTE7Y29udGludWV9Y29uc3QgYmU9SE8oWltjZV0uY2FsbGJhY2ssbCxkLGgsZix2LE0sRCk7dm9pZCAwIT09YmUmJihkPWJlKSxaW2NlXSYmWltjZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUoYSxaW2NlXS5jYWxsYmFjayxsKSxjZSs9MX19''@;'; put 'put ''cmV0dXJuIGR9ZGVzdHJveSgpe3RoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsKS5kZXN0cm95KCl9cmVnaXN0ZXIobCl7dGhpcy5pc1JlZ2lzdGVyZWQobCl8fFo3LnB1c2gobCl9ZGVyZWdpc3RlcihsKXt0''@;'; put 'put ''aGlzLmlzUmVnaXN0ZXJlZChsKSYmWjcuc3BsaWNlKFo3LmluZGV4T2YobCksMSl9aXNEZXByZWNhdGVkKGwpe3JldHVybiBCJC5oYXMobCl8fFYkLmhhcyhsKX1pc1JlZ2lzdGVyZWQobCl7cmV0dXJuIFo3LmluZGV4T2YobCk+PTB9Z2V0UmVnaXN0ZXJlZCgpe3JldHVybiBaN319Y29uc3Qg''@;'; put 'put ''RFhlPW5ldyBTYSxaJD1uZXcgTWFwO2Z1bmN0aW9uIHIzKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjb21tb24iO1okLmhhcyhjKXx8WiQuc2V0KGMsbmV3IE1hcCk7Y29uc3QgbD1aJC5nZXQoYyk7cmV0dXJue3JlZ2lz''@;'; put 'put ''dGVyOmZ1bmN0aW9uIGEoTSxEKXtsLnNldChNLEQpfSxnZXRJdGVtOmZ1bmN0aW9uIGQoTSl7cmV0dXJuIGwuZ2V0KE0pfSxoYXNJdGVtOmZ1bmN0aW9uIGgoTSl7cmV0dXJuIGwuaGFzKE0pfSxnZXROYW1lczpmdW5jdGlvbiBmKCl7cmV0dXJuWy4uLmwua2V5cygpXX0sZ2V0VmFsdWVzOmZ1''@;'; put 'put ''bmN0aW9uIHYoKXtyZXR1cm5bLi4ubC52YWx1ZXMoKV19fX1jb25zdCBXJD1uZXcgV2Vha01hcCx7cmVnaXN0ZXI6UlhlLGdldEl0ZW06dWZlLGhhc0l0ZW06ZGZlLGdldE5hbWVzOkxYZX09cjMoImVkaXRvcnMiKTtmdW5jdGlvbiBPWGUoYyl7Y29uc3QgbD17fSxhPWM7dGhpcy5nZXRDb25z''@;'; put 'put ''dHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBjfSx0aGlzLmdldEluc3RhbmNlPWZ1bmN0aW9uKGQpe3JldHVybiBkLmd1aWQgaW4gbHx8KGxbZC5ndWlkXT1uZXcgYShkKSksbFtkLmd1aWRdfSxTYS5nZXRTaW5nbGV0b24oKS5hZGQoImFmdGVyRGVzdHJveSIsZnVuY3Rpb24oKXtsW3RoaXMu''@;'; put 'put ''Z3VpZF09bnVsbH0pfWZ1bmN0aW9uIGhmZShjLGwpe2xldCBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKVckLmdldChjKXx8SGQobnVsbCxjKSxhPVckLmdldChjKTtlbHNle2lmKCJzdHJpbmciIT10eXBlb2YgYyl0aHJvdyBFcnJvcignT25seSBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgY2Fu''@;'; put 'put ''IGJlIHBhc3NlZCBhcyAiZWRpdG9yIiBwYXJhbWV0ZXInKTthPXVmZShjKX1pZighYSl0aHJvdyBFcnJvcihgTm8gZWRpdG9yIHJlZ2lzdGVyZWQgdW5kZXIgbmFtZSAiJHtjfSJgKTtyZXR1cm4gYS5nZXRJbnN0YW5jZShsKX1mdW5jdGlvbiBXTyhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''YylyZXR1cm4gYztpZighZGZlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIGVkaXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiB1ZmUoYykuZ2V0Q29uc3RydWN0b3IoKX1mdW5jdGlvbiBIZChjLGwpe2MmJiJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuRURJ''@;'; put 'put ''VE9SX1RZUEUpO2NvbnN0IGE9bmV3IE9YZShsKTsic3RyaW5nIj09dHlwZW9mIGMmJlJYZShjLGEpLFckLnNldChsLGEpfWxldCBZTz0wO2NvbnN0IGoyPWNsYXNzIE5YZXtjb25zdHJ1Y3Rvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt''@;'; put 'put ''ZW50c1swXTpudWxsOyhmdW5jdGlvbiBQWGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEZYZShjKXt2YXIgbD1mdW5jdGlvbiBIWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywiY29udGV4dCIsdm9pZCAwKSx0''@;'; put 'put ''aGlzLmNvbnRleHQ9bHx8dGhpcyx0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnN8fCh0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnM9W10pfWFkZEV2ZW50TGlzdGVuZXIobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNb''@;'; put 'put ''M107ZnVuY3Rpb24gZih2KXtkLmNhbGwodGhpcyxmdW5jdGlvbiBWWGUoYyl7Y29uc3QgbD1jLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjtyZXR1cm4gYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXtsLmFwcGx5KHRoaXMpLEIyKHRoaXMpfSxjfSh2KSl9cmV0dXJuIHRo''@;'; put 'put ''aXMuY29udGV4dC5ldmVudExpc3RlbmVycy5wdXNoKHtlbGVtZW50OmwsZXZlbnQ6YSxjYWxsYmFjazpkLGNhbGxiYWNrUHJveHk6ZixvcHRpb25zOmgsZXZlbnRNYW5hZ2VyOnRoaXN9KSxsLmFkZEV2ZW50TGlzdGVuZXIoYSxmLGgpLFlPKz0xLCgpPT57dGhpcy5yZW1vdmVFdmVudExpc3Rl''@;'; put 'put ''bmVyKGwsYSxkKX19cmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsZCl7bGV0IHYsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGY9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtmb3IoO2Y7KWlmKGYtPTEsdj10aGlzLmNv''@;'; put 'put ''bnRleHQuZXZlbnRMaXN0ZW5lcnNbZl0sdi5ldmVudD09PWEmJnYuZWxlbWVudD09PWwpe2lmKGQmJmQhPT12LmNhbGxiYWNrfHxoJiZ2LmV2ZW50TWFuYWdlciE9PXRoaXMpY29udGludWU7dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShmLDEpLHYuZWxlbWVudC5yZW1vdmVF''@;'; put 'put ''dmVudExpc3RlbmVyKHYuZXZlbnQsdi5jYWxsYmFja1Byb3h5LHYub3B0aW9ucyksWU8tPTF9fWNsZWFyRXZlbnRzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZighdGhpcy5jb250ZXh0KXJldHVybjtsZXQgYT10aGlz''@;'; put 'put ''LmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7YTspe2EtPTE7Y29uc3QgZD10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnNbYV07bCYmZC5ldmVudE1hbmFnZXIhPT10aGlzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShhLDEpLGQuZWxlbWVudC5yZW1v''@;'; put 'put ''dmVFdmVudExpc3RlbmVyKGQuZXZlbnQsZC5jYWxsYmFja1Byb3h5LGQub3B0aW9ucyksWU8tPTEpfX1jbGVhcigpe3RoaXMuY2xlYXJFdmVudHMoKX1kZXN0cm95KCl7dGhpcy5jbGVhckV2ZW50cygpLHRoaXMuY29udGV4dD1udWxsfWRlc3Ryb3lXaXRoT3duRXZlbnRzT25seSgpe3RoaXMu''@;'; put 'put ''Y2xlYXJFdmVudHMoITApLHRoaXMuY29udGV4dD1udWxsfWZpcmVFdmVudChsLGEpe2xldCBkPWwuZG9jdW1lbnQsaD1sO2R8fChkPWwub3duZXJEb2N1bWVudD9sLm93bmVyRG9jdW1lbnQ6bCxoPWQuZGVmYXVsdFZpZXcpO2NvbnN0IGY9e2J1YmJsZXM6ITAsY2FuY2VsYWJsZToibW91c2Vt''@;'; put 'put ''b3ZlIiE9PWEsdmlldzpoLGRldGFpbDowLHNjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDoxLGNsaWVudFk6MSxjdHJsS2V5OiExLGFsdEtleTohMSxzaGlmdEtleTohMSxtZXRhS2V5OiExLGJ1dHRvbjowLHJlbGF0ZWRUYXJnZXQ6dm9pZCAwfTtsZXQgdjtkLmNyZWF0ZUV2ZW50Pyh2PWQu''@;'; put 'put ''Y3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIiksdi5pbml0TW91c2VFdmVudChhLGYuYnViYmxlcyxmLmNhbmNlbGFibGUsZi52aWV3LGYuZGV0YWlsLGYuc2NyZWVuWCxmLnNjcmVlblksZi5jbGllbnRYLGYuY2xpZW50WSxmLmN0cmxLZXksZi5hbHRLZXksZi5zaGlmdEtleSxmLm1ldGFLZXks''@;'; put 'put ''Zi5idXR0b24sZi5yZWxhdGVkVGFyZ2V0fHxkLmJvZHkucGFyZW50Tm9kZSkpOnY9ZC5jcmVhdGVFdmVudE9iamVjdCgpLGwuZGlzcGF0Y2hFdmVudD9sLmRpc3BhdGNoRXZlbnQodik6bC5maXJlRXZlbnQoYG9uJHthfWAsdil9fTtmdW5jdGlvbiBXNyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp''@;'; put 'put ''b24gVVhlKGMpe3ZhciBsPWZ1bmN0aW9uIFpYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl''@;'; put 'put ''dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g''@;'; put 'put ''Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gWSQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBHTz1uZXcgV2Vha1NldDtjbGFzcyBHJHtjb25zdHJ1Y3RvcihsLGEsZCl7KGZ1bmN0aW9uIGpYZShjLGwpeyhmdW5jdGlvbiB6WGUoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsR08pLFc3KHRoaXMsImhvdCIsdm9pZCAwKSxXNyh0aGlzLCJ0YWJsZU1l''@;'; put 'put ''dGEiLHZvaWQgMCksVzcodGhpcywic2VsZWN0aW9uIix2b2lkIDApLFc3KHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxXNyh0aGlzLCJkZXN0cm95ZWQiLCExKSxXNyh0aGlzLCJhY3RpdmVFZGl0b3IiLHZvaWQgMCksVzcodGhpcywiY2VsbFByb3BlcnRpZXMiLHZvaWQgMCksdGhpcy5o''@;'; put 'put ''b3Q9bCx0aGlzLnRhYmxlTWV0YT1hLHRoaXMuc2VsZWN0aW9uPWQsdGhpcy5ldmVudE1hbmFnZXI9bmV3IGoyKGwpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixoPT5ZJChHTyx0aGlzLGZmZSkuY2FsbCh0aGlzLGgpKSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVD''@;'; put 'put ''b21wb3NpdGlvblN0YXJ0IixoPT5ZJChHTyx0aGlzLGZmZSkuY2FsbCh0aGlzLGgpKSx0aGlzLmhvdC52aWV3Ll93dC51cGRhdGUoIm9uQ2VsbERibENsaWNrIiwoaCxmLHYpPT5ZJChHTyx0aGlzLFdYZSkuY2FsbCh0aGlzLGgsZix2KSl9Z2V0QWN0aXZlRWRpdG9yKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''YWN0aXZlRWRpdG9yfXByZXBhcmVFZGl0b3IoKXt2YXIgbDtpZih0aGlzLmFjdGl2ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZUVkaXRvcighMSwhMSxaPT57WiYmdGhpcy5wcmVwYXJlRWRpdG9yKCl9KTtjb25zdCBhPW51bGw9''@;'; put 'put ''PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7aWYoIWF8fGEuaXNIZWFkZXIoKSlyZXR1cm47Y29uc3R7cm93OmQsY29sOmh9PWEsZj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsZCxoLCEx''@;'; put 'put ''LCJtZXRhIik7bGV0IHY9ZCxNPWg7aWYoQXJyYXkuaXNBcnJheShmKSYmKFt2LE1dPWYpLHRoaXMuY2VsbFByb3BlcnRpZXM9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodixNKSwhdGhpcy5pc0NlbGxFZGl0YWJsZSgpKXJldHVybiB2b2lkIHRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKTtjb25zdCBE''@;'; put 'put ''PXRoaXMuaG90LmdldENlbGwoZCxoLCEwKTtpZihEKXtjb25zdCBaPXRoaXMuaG90LmdldENlbGxFZGl0b3IodGhpcy5jZWxsUHJvcGVydGllcykscmU9dGhpcy5ob3QuY29sVG9Qcm9wKE0pLGNlPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2''@;'; put 'put ''KSxNKTt0aGlzLmFjdGl2ZUVkaXRvcj1oZmUoWix0aGlzLmhvdCksdGhpcy5hY3RpdmVFZGl0b3IucHJlcGFyZShkLGgscmUsRCxjZSx0aGlzLmNlbGxQcm9wZXJ0aWVzKX19aXNFZGl0b3JPcGVuZWQoKXtyZXR1cm4gdGhpcy5hY3RpdmVFZGl0b3ImJnRoaXMuYWN0aXZlRWRpdG9yLmlzT3Bl''@;'; put 'put ''bmVkKCl9b3BlbkVkaXRvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYoIXRoaXMuaXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7Y29uc3QgaD10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2xldCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVCZWdpbkVkaXRpbmciLGguaGlnaGxpZ2h0LnJvdyxoLmhpZ2hsaWdodC5jb2wsbCxhLGQpO2EgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiYiYm9vbGVhbiIhPXR5cGVvZiBmJiYoZj0wPT09dGhpcy5o''@;'; put 'put ''b3Quc2VsZWN0aW9uLmdldExheWVyTGV2ZWwoKSYmaC5pc1NpbmdsZSgpKSwhMSE9PWY/KHRoaXMuYWN0aXZlRWRpdG9yfHwodGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpLHRoaXMucHJlcGFyZUVkaXRvcigpKSx0aGlzLmFjdGl2ZUVkaXRvciYmKGQmJnRoaXMuYWN0aXZlRWRpdG9y''@;'; put 'put ''LmVuYWJsZUZ1bGxFZGl0TW9kZSgpLHRoaXMuYWN0aXZlRWRpdG9yLmJlZ2luRWRpdGluZyhsLGEpKSk6dGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpfWNsb3NlRWRpdG9yKGwsYSxkKXt0aGlzLmFjdGl2ZUVkaXRvcj90aGlzLmFjdGl2ZUVkaXRvci5maW5pc2hFZGl0aW5nKGwsYSxkKTpkJiZk''@;'; put 'put ''KCExKX1jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKGwpe3RoaXMuY2xvc2VFZGl0b3IoITEsbCl9Y2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZShsKXt0aGlzLmNsb3NlRWRpdG9yKCEwLGwpfWNsZWFyQWN0aXZlRWRpdG9yKCl7dGhpcy5hY3RpdmVFZGl0b3I9dm9pZCAwfWlz''@;'; put 'put ''Q2VsbEVkaXRhYmxlKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSx7cm93OmQsY29sOmh9PWwuaGlnaGxpZ2h0LHtyb3dJbmRleE1hcHBlcjpm''@;'; put 'put ''LGNvbHVtbkluZGV4TWFwcGVyOnZ9PXRoaXMuaG90LE09Zi5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KGQpKXx8di5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGgpKTtyZXR1cm4hKHRoaXMuY2VsbFByb3BlcnRpZXMucmVhZE9ubHl8fCFhfHxNKX1tb3ZlU2Vs''@;'; put 'put ''ZWN0aW9uQWZ0ZXJFbnRlcihsKXtjb25zdCBhPXsuLi4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy50YWJsZU1ldGEuZW50ZXJNb3Zlcz90aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzKGwpOnRoaXMudGFibGVNZXRhLmVudGVyTW92ZXN9O2wuc2hpZnRLZXkmJihhLnJvdz0tYS5yb3csYS5jb2w9''@;'; put 'put ''LWEuY29sKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpP3RoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybUZvY3VzKGEucm93LGEuY29sKTp0aGlzLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydChhLnJvdyxhLmNvbCwhMCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuZXZl''@;'; put 'put ''bnRNYW5hZ2VyLmRlc3Ryb3koKX19ZnVuY3Rpb24gZmZlKGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKXx8IWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fEZtKGMpKXJldHVybjtjb25zdHtrZXlDb2RlOmF9PWMs''@;'; put 'put ''ZD0oYy5jdHJsS2V5fHxjLm1ldGFLZXkpJiYhYy5hbHRLZXk7KCF0aGlzLmFjdGl2ZUVkaXRvcnx8dGhpcy5hY3RpdmVFZGl0b3ImJiF0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSkmJiFIJChhKSYmIXJmZShhKSYmIWQmJiF0aGlzLmlzRWRpdG9yT3BlbmVkKCkmJnRoaXMub3BlbkVk''@;'; put 'put ''aXRvcigiIixjKX1mdW5jdGlvbiBXWGUoYyxsKXtsLmlzQ2VsbCgpJiZ0aGlzLm9wZW5FZGl0b3IobnVsbCxjLCEwKX1jb25zdCBwZmU9bmV3IFdlYWtNYXA7RyQuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oYyxsLGEpe2xldCBkPXBmZS5nZXQoYyk7cmV0dXJuIGR8fChkPW5ldyBHJChjLGwsYSks''@;'; put 'put ''cGZlLnNldChjLGQpKSxkfTtjb25zdCBZWGU9RyQ7ZnVuY3Rpb24ga0UoYyxsLGEpe2dmZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZ2ZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0''@;'; put 'put ''d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBjYyhjLGwpe3JldHVybiBjLmdldCh5ZyhjLGwpKX1mdW5jdGlvbiBERShjLGwsYSl7cmV0dXJuIGMuc2V0KHlnKGMsbCksYSksYX1mdW5jdGlvbiB5ZyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0''@;'; put 'put ''dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgaF89T2JqZWN0LmZyZWV6ZSh7Q0VMTDoiY2VsbCIsTUlYRUQ6Im1peGVkIn0pO3ZhciBYdT1uZXcgV2Vha01h''@;'; put 'put ''cCwkTz1uZXcgV2Vha01hcCxLTz1uZXcgV2Vha01hcCxxTz1uZXcgV2Vha01hcCxYTz1uZXcgV2Vha01hcCxObT1uZXcgV2Vha1NldDtjbGFzcyAkWGV7Y29uc3RydWN0b3IobCl7dmFyIGE9dGhpczsoZnVuY3Rpb24gR1hlKGMsbCl7Z2ZlKGMsbCksbC5hZGQoYyl9KSh0aGlzLE5tKSxrRSh0''@;'; put 'put ''aGlzLFh1LHZvaWQgMCksa0UodGhpcywkTyx2b2lkIDApLGtFKHRoaXMsS08sMSksa0UodGhpcyxxTyxudWxsKSxrRSh0aGlzLFhPLG5ldyBNYXApO2NvbnN0IGQ9bC5nZXRTZXR0aW5ncygpO0RFKFh1LHRoaXMsbCksREUoJE8sdGhpcyxkLmltZUZhc3RFZGl0P2hfLk1JWEVEOmhfLkNFTEwp''@;'; put 'put ''LGNjKFh1LHRoaXMpLmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHlnKE5tLGEscVhlKS5jYWxsKGEsLi4uZil9KSxjYyhY''@;'; put 'put ''dSx0aGlzKS5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4geWcoTm0sYSxtZmUpLmNhbGwoYSwuLi5mKX0pLGNjKFh1LHRoaXMpLmFk''@;'; put 'put ''ZEhvb2soImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHlnKE5tLGEsbWZlKS5jYWxsKGEsLi4uZil9KSxjYyhYdSx0aGlzKS5hZGRI''@;'; put 'put ''b29rKCJhZnRlclNlbGVjdGlvbkVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4geWcoTm0sYSxLWGUpLmNhbGwoYSwuLi5mKX0pfWdldEZvY3VzTW9kZSgpe3JldHVybiBj''@;'; put 'put ''YygkTyx0aGlzKX1zZXRGb2N1c01vZGUobCl7T2JqZWN0LnZhbHVlcyhoXykuaW5jbHVkZXMobCk/REUoJE8sdGhpcyxsKTppbChgIiR7bH0iIGlzIG5vdCBhIHZhbGlkIGZvY3VzIG1vZGUuYCl9Z2V0UmVmb2N1c0RlbGF5KCl7cmV0dXJuIGNjKEtPLHRoaXMpfXNldFJlZm9jdXNEZWxheShs''@;'; put 'put ''KXtERShLTyx0aGlzLGwpfXNldFJlZm9jdXNFbGVtZW50R2V0dGVyKGwpe0RFKHFPLHRoaXMsbCl9Z2V0UmVmb2N1c0VsZW1lbnQoKXt2YXIgbDtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY2MocU8sdGhpcyk/Y2MocU8sdGhpcykuY2FsbCh0aGlzKTpudWxsPT09KGw9Y2MoWHUsdGhpcyku''@;'; put 'put ''Z2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLlRFWFRBUkVBfWZvY3VzT25IaWdobGlnaHRlZENlbGwobCl7Y29uc3QgYT1kPT57dmFyIGgsZjtjb25zdCB2PW51bGw9PT0oaD1jYyhYdSx0aGlzKS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09aD92b2lk''@;'; put 'put ''IDA6aC5oaWdobGlnaHQ7aWYoIXYpcmV0dXJuO2xldCBNPWNjKFh1LHRoaXMpLnJ1bkhvb2tzKCJtb2RpZnlGb2N1c2VkRWxlbWVudCIsdi5yb3csdi5jb2wsZCk7RXAoTSl8fChNPWQpLE0mJihudWxsPT09KGY9Y2MoWHUsdGhpcykuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1mfHwh''@;'; put 'put ''Zi5pc09wZW5lZCgpKSYmTS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfTtsP2EobCk6eWcoTm0sdGhpcywkJCkuY2FsbCh0aGlzLGQ9PmEoZCkpfXJlZm9jdXNUb0VkaXRvclRleHRhcmVhKCl7dmFyIGw7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/''@;'; put 'put ''YXJndW1lbnRzWzBdOmNjKEtPLHRoaXMpO3ZhciBkLGg7IWNjKFh1LHRoaXMpLmdldFNldHRpbmdzKCkuaW1lRmFzdEVkaXR8fG51bGwhPT0obD1jYyhYdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSkmJnZvaWQgMCE9PWwmJmwuaXNPcGVuZWQoKXx8KG51bGw9PT0oZD1jYyhYdSx0aGlzKS5n''@;'; put 'put ''ZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWR8fG51bGw9PT0oaD1kLnJlZnJlc2hWYWx1ZSl8fHZvaWQgMD09PWh8fGguY2FsbChkKSxjYyhYTyx0aGlzKS5oYXMoYSl8fGNjKFhPLHRoaXMpLnNldChhLE1FKCgpPT57dmFyIGY7Y2MoWHUsdGhpcykuaXNEZXN0cm95ZWR8fG51bGw9PT0o''@;'; put 'put ''Zj10aGlzLmdldFJlZm9jdXNFbGVtZW50KCkpfHx2b2lkIDA9PT1mfHxmLnNlbGVjdCgpfSxhKSksY2MoWE8sdGhpcykuZ2V0KGEpKCkpfX1mdW5jdGlvbiAkJChjKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD1jYyhYdSx0aGlzKS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09''@;'; put 'put ''bD92b2lkIDA6bC5oaWdobGlnaHQ7aWYoIWF8fCFjYyhYdSx0aGlzKS5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShhKSlyZXR1cm4gdm9pZCBjKG51bGwpO2NvbnN0IGQ9Y2MoWHUsdGhpcykuZ2V0Q2VsbChhLnJvdyxhLmNvbCwhMCk7bnVsbD09PWQ/Y2MoWHUsdGhpcykuYWRkSG9va09uY2Uo''@;'; put 'put ''ImFmdGVyU2Nyb2xsIiwoKT0+e2MoY2MoWHUsdGhpcykuZ2V0Q2VsbChhLnJvdyxhLmNvbCwhMCkpfSk6YyhkKX1mdW5jdGlvbiBtZmUoKXt5ZyhObSx0aGlzLCQkKS5jYWxsKHRoaXMsYz0+e2NvbnN0e2FjdGl2ZUVsZW1lbnQ6bH09Y2MoWHUsdGhpcykucm9vdERvY3VtZW50O2wmJkZPKGwp''@;'; put 'put ''JiZsLmJsdXIoKSx0aGlzLmZvY3VzT25IaWdobGlnaHRlZENlbGwoYyl9KX1mdW5jdGlvbiBLWGUoKXt5ZyhObSx0aGlzLCQkKS5jYWxsKHRoaXMsYz0+e3RoaXMuZ2V0Rm9jdXNNb2RlKCk9PT1oXy5NSVhFRCYmIlREIj09PWM/Lm5vZGVOYW1lJiZ0aGlzLnJlZm9jdXNUb0VkaXRvclRleHRh''@;'; put 'put ''cmVhKCl9KX1mdW5jdGlvbiBxWGUoYyl7ImJvb2xlYW4iPT10eXBlb2YgYy5pbWVGYXN0RWRpdCYmdGhpcy5zZXRGb2N1c01vZGUoYy5pbWVGYXN0RWRpdD9oXy5NSVhFRDpoXy5DRUxMKX15KDE2MjI5KSx5KDQ0MjEzKTtjb25zdCB2ZmU9eyImbmJzcDsiOiIgIiwiJmFtcDsiOiImIiwiJmx0''@;'; put 'put ''OyI6IjwiLCImZ3Q7IjoiPiJ9LFhYZT1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKHZmZSkubWFwKGM9PmAoJHtjfSlgKS5qb2luKCJ8IiksImdpIik7ZnVuY3Rpb24gSyQoYyl7Y29uc3QgbD1jLmhhc0NvbEhlYWRlcnMoKSxhPWMuaGFzUm93SGVhZGVycygpLGQ9W2w/LTE6MCxhPy0xOjAsYy5j''@;'; put 'put ''b3VudFJvd3MoKS0xLGMuY291bnRDb2xzKCktMV0saD1jLmdldERhdGEoLi4uZCksZj1oLmxlbmd0aCx2PWY+MD9oWzBdLmxlbmd0aDowLE09WyI8dGFibGU+IiwiPC90YWJsZT4iXSxEPWw/WyI8dGhlYWQ+IiwiPC90aGVhZD4iXTpbXSxaPVsiPHRib2R5PiIsIjwvdGJvZHk+Il0scmU9YT8x''@;'; put 'put ''OjAsY2U9bD8xOjA7Zm9yKGxldCBiZT0wO2JlPGY7YmUrPTEpe2NvbnN0IEVlPWwmJjA9PT1iZSxCZT1bXTtmb3IobGV0IHJ0PTA7cnQ8djtydCs9MSl7Y29uc3QgcHQ9IUVlJiZhJiYwPT09cnQ7bGV0IGR0PSIiO2lmKEVlKWR0PWA8dGg+JHtjLmdldENvbEhlYWRlcihydC1yZSl9PC90aD5g''@;'; put 'put ''O2Vsc2UgaWYocHQpZHQ9YDx0aD4ke2MuZ2V0Um93SGVhZGVyKGJlLWNlKX08L3RoPmA7ZWxzZXtjb25zdCBKdD1oW2JlXVtydF0se2hpZGRlbjp2bixyb3dzcGFuOkNuLGNvbHNwYW46dG59PWMuZ2V0Q2VsbE1ldGEoYmUtY2UscnQtcmUpO2lmKCF2bil7Y29uc3QgTW49W107aWYoQ24mJk1u''@;'; put 'put ''LnB1c2goYHJvd3NwYW49IiR7Q259ImApLHRuJiZNbi5wdXNoKGBjb2xzcGFuPSIke3RufSJgKSxVYyhKdCkpZHQ9YDx0ZCAke01uLmpvaW4oIiAiKX0+PC90ZD5gO2Vsc2V7Y29uc3QgQ3I9SnQudG9TdHJpbmcoKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5y''@;'; put 'put ''ZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJcbiIpLnJlcGxhY2UoL1x4MjAvZ2ksIiZuYnNwOyIpLnJlcGxhY2UoL1x0L2dpLCImIzk7Iik7ZHQ9YDx0ZCAke01uLmpvaW4oIiAiKX0+JHtDcn08L3RkPmB9fX1CZS5wdXNoKGR0KX1jb25zdCBxZT1b''@;'; put 'put ''Ijx0cj4iLC4uLkJlLCI8L3RyPiJdLmpvaW4oIiIpO0VlP0Quc3BsaWNlKDEsMCxxZSk6Wi5zcGxpY2UoLTEsMCxxZSl9cmV0dXJuIE0uc3BsaWNlKDEsMCxELmpvaW4oIiIpLFouam9pbigiIikpLE0uam9pbigiIil9ZnVuY3Rpb24gcSQoYyl7Y29uc3QgbD1jLmxlbmd0aCxhPVsiPHRhYmxl''@;'; put 'put ''PiJdO2ZvcihsZXQgZD0wO2Q8bDtkKz0xKXtjb25zdCBoPWNbZF0sZj1oLmxlbmd0aCx2PVtdOzA9PT1kJiZhLnB1c2goIjx0Ym9keT4iKTtmb3IobGV0IE09MDtNPGY7TSs9MSl7Y29uc3QgRD1oW01dLFo9VWMoRCk/IiI6RC50b1N0cmluZygpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBs''@;'; put 'put ''YWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJcbiIpLnJlcGxhY2UoL1x4MjB7Mix9L2dpLHJlPT5gPHNwYW4gc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4keyImbmJzcDsiLnJl''@;'; put 'put ''cGVhdChyZS5sZW5ndGgtMSl9IDwvc3Bhbj5gKS5yZXBsYWNlKC9cdC9naSwiJiM5OyIpO3YucHVzaChgPHRkPiR7Wn08L3RkPmApfWEucHVzaCgiPHRyPiIsLi4udiwiPC90cj4iKSxkKzE9PT1sJiZhLnB1c2goIjwvdGJvZHk+Iil9cmV0dXJuIGEucHVzaCgiPC90YWJsZT4iKSxhLmpvaW4o''@;'; put 'put ''IiIpfWZ1bmN0aW9uIGJmZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ZG9jdW1lbnQ7Y29uc3QgYT17fSxkPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmFwcGVuZENo''@;'; put 'put ''aWxkKGgpO2xldCBmPWM7aWYoInN0cmluZyI9PXR5cGVvZiBmKXtjb25zdCBKdD1mLnJlcGxhY2UoLzx0ZFxiW14+XSo/PihbXHNcU10qPyk8XC9ccyp0ZD4vZyx2bj0+e2NvbnN0IENuPXZuLm1hdGNoKC88dGRcYltePl0qPz4vZylbMF07cmV0dXJuYCR7Q259JHt2bi5zdWJzdHJpbmcoQ24u''@;'; put 'put ''bGVuZ3RoLHZuLmxhc3RJbmRleE9mKCI8IikpLnRyaW0oKS5yZXBsYWNlQWxsKC9cblxzKy9nLCIgIikucmVwbGFjZUFsbCgvPHAuKj8+L2csIlxuIikucmVwbGFjZSgiXG4iLCIiKS5yZXBsYWNlQWxsKC88XC8oLiopPlxzKyQvZ20sIjwvJDE+IikucmVwbGFjZSgvKDwoPyFicikoW14+XSsp''@;'; put 'put ''PikvZ2ksIiIpLnJlcGxhY2VBbGwoL14mbmJzcDskL2dtLCIiKX08L3RkPmB9KTtoLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYCR7SnR9YCksZj1oLnF1ZXJ5U2VsZWN0b3IoInRhYmxlIil9aWYoIWZ8fCFmdW5jdGlvbiBKWGUoYyl7cmV0dXJuIlRBQkxFIj09PShjJiZjLm5v''@;'; put 'put ''ZGVOYW1lfHwiIil9KGYpKXJldHVybjtjb25zdCB2PWgucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lJD0iZW5lcmF0b3IiXScpLE09bnVsbCE9PWYucXVlcnlTZWxlY3RvcigidGJvZHkgdGgiKSxEPWYucXVlcnlTZWxlY3RvcigidHIiKSxaPUQ/QXJyYXkuZnJvbShELmNlbGxzKS5yZWR1Y2Uo''@;'; put 'put ''KEp0LHZuKT0+SnQrdm4uY29sU3BhbiwwKS0oTT8xOjApOjAscmU9Zi50Rm9vdCYmQXJyYXkuZnJvbShmLnRGb290LnJvd3MpfHxbXSxjZT1bXTtsZXQgYmU9ITEsRWU9MCxCZT0wO2lmKGYudEhlYWQpe2NvbnN0IEp0PUFycmF5LmZyb20oZi50SGVhZC5yb3dzKS5maWx0ZXIodm49Pntjb25z''@;'; put 'put ''dCBDbj1udWxsIT09dm4ucXVlcnlTZWxlY3RvcigidGQiKTtyZXR1cm4gQ24mJmNlLnB1c2godm4pLCFDbn0pO0VlPUp0Lmxlbmd0aCxiZT1FZT4wLEVlPjE/YS5uZXN0ZWRIZWFkZXJzPUFycmF5LmZyb20oSnQpLnJlZHVjZSgodm4sQ24pPT57Y29uc3QgdG49QXJyYXkuZnJvbShDbi5jZWxs''@;'; put 'put ''cykucmVkdWNlKChNbixDcixHcik9PntpZihNJiYwPT09R3IpcmV0dXJuIE1uO2NvbnN0e2NvbFNwYW46bXIsaW5uZXJIVE1MOkdufT1DcjtyZXR1cm4gTW4ucHVzaChtcj4xP3tsYWJlbDpHbixjb2xzcGFuOm1yfTpHbiksTW59LFtdKTtyZXR1cm4gdm4ucHVzaCh0biksdm59LFtdKTpiZSYm''@;'; put 'put ''KGEuY29sSGVhZGVycz1BcnJheS5mcm9tKEp0WzBdLmNoaWxkcmVuKS5yZWR1Y2UoKHZuLENuLHRuKT0+KE0mJjA9PT10bnx8dm4ucHVzaChDbi5pbm5lckhUTUwpLHZuKSxbXSkpfWNlLmxlbmd0aCYmKGEuZml4ZWRSb3dzVG9wPWNlLmxlbmd0aCkscmUubGVuZ3RoJiYoYS5maXhlZFJvd3NC''@;'; put 'put ''b3R0b209cmUubGVuZ3RoKTtjb25zdCBxZT1bLi4uY2UsLi4uQXJyYXkuZnJvbShmLnRCb2RpZXMpLnJlZHVjZSgoSnQsdm4pPT4oSnQucHVzaCguLi5BcnJheS5mcm9tKHZuLnJvd3MpKSxKdCksW10pLC4uLnJlXTtCZT1xZS5sZW5ndGg7Y29uc3QgcnQ9bmV3IEFycmF5KEJlKTtmb3IobGV0''@;'; put 'put ''IEp0PTA7SnQ8QmU7SnQrKylydFtKdF09bmV3IEFycmF5KFopO2NvbnN0IHB0PVtdLGR0PVtdO2ZvcihsZXQgSnQ9MDtKdDxCZTtKdCsrKXtjb25zdCBDbj1BcnJheS5mcm9tKHFlW0p0XS5jZWxscyksdG49Q24ubGVuZ3RoO2ZvcihsZXQgTW49MDtNbjx0bjtNbisrKXtjb25zdCBDcj1DbltN''@;'; put 'put ''bl0se25vZGVOYW1lOkdyLGlubmVySFRNTDptcixyb3dTcGFuOkduLGNvbFNwYW46YWl9PUNyLF9pPXJ0W0p0XS5maW5kSW5kZXgoT249PnZvaWQgMD09PU9uKTtpZigiVEQiPT09R3Ipe2lmKEduPjF8fGFpPjEpe2ZvcihsZXQgSXI9SnQ7SXI8SnQrR247SXIrKylpZihJcjxCZSlmb3IobGV0''@;'; put 'put ''ICRyPV9pOyRyPF9pK2FpOyRyKyspcnRbSXJdWyRyXT1udWxsO2NvbnN0IHpyPUNyLmdldEF0dHJpYnV0ZSgic3R5bGUiKTt6ciYmenIuaW5jbHVkZXMoIm1zby1pZ25vcmU6Y29sc3BhbiIpfHxwdC5wdXNoKHtjb2w6X2kscm93Okp0LHJvd3NwYW46R24sY29sc3BhbjphaX0pfWxldCBPbj0i''@;'; put 'put ''IjtPbj12JiYvZXhjZWwvZ2kudGVzdCh2LmNvbnRlbnQpP21yLnJlcGxhY2UoL1tcclxuXVtceDIwXXswLDJ9L2csIiAiKS5yZXBsYWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/W1x4MjBdezAsM30vZ2ltLCJcclxuIik6bXIucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dPy9naW0sIlxyXG4i''@;'; put 'put ''KSxydFtKdF1bX2ldPU9uLnJlcGxhY2UoWFhlLHpyPT52ZmVbenJdKX1lbHNlIGR0LnB1c2gobXIpfX1yZXR1cm4gcHQubGVuZ3RoJiYoYS5tZXJnZUNlbGxzPXB0KSxkdC5sZW5ndGgmJihhLnJvd0hlYWRlcnM9ZHQpLHJ0Lmxlbmd0aCYmKGEuZGF0YT1ydCksYX1mdW5jdGlvbiBtMShjKXts''@;'; put 'put ''ZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107Y29uc3QgYT10eXBlb2YgYztpZigibnVtYmVyIj09PWEpcmV0dXJuIWlzTmFOKGMpJiZpc0Zpbml0ZShjKTtpZigic3RyaW5nIj09PWEpe2lmKDA9PT1jLmxlbmd0aClyZXR1cm4h''@;'; put 'put ''MTtpZigxPT09Yy5sZW5ndGgpcmV0dXJuL1xkLy50ZXN0KGMpO2NvbnN0IGQ9QXJyYXkuZnJvbShuZXcgU2V0KFsiLiIsLi4ubF0pKS5tYXAoaD0+YFxcJHtofWApLmpvaW4oInwiKTtyZXR1cm4gbmV3IFJlZ0V4cChgXlsrLV0/KCgoJHtkfSk/XFxkKygoJHtkfSlcXGQrKT8oZVsrLV0/XFxk''@;'; put 'put ''Kyk/KXwoMHhbYS1mXFxkXSspKSRgLCJpIikudGVzdChjLnRyaW0oKSl9cmV0dXJuIm9iamVjdCI9PT1hJiYhKCFjfHwibnVtYmVyIiE9dHlwZW9mIGMudmFsdWVPZigpfHxjIGluc3RhbmNlb2YgRGF0ZSl9ZnVuY3Rpb24geWZlKGMpe3JldHVybiBtMShjLFsiLCJdKX1mdW5jdGlvbiBHYShj''@;'; put 'put ''LGwsYSl7bGV0IGQ9LTE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBsPyhhPWwsbD1jKTpkPWMtMTsrK2Q8PWwmJiExIT09YShkKTspO31mdW5jdGlvbiBYJChjLGwsYSl7bGV0IGQ9YysxO2ZvcigiZnVuY3Rpb24iPT10eXBlb2YgbCYmKGE9bCxsPTApOy0tZD49bCYmITEhPT1hKGQpOyk7fWZ1''@;'; put 'put ''bmN0aW9uIEokKGMsbCl7cmV0dXJuIGw9cGFyc2VJbnQobC50b1N0cmluZygpLnJlcGxhY2UoIiUiLCIiKSwxMCksbD1pc05hTihsKT8wOmwscGFyc2VJbnQoYypsLzEwMCwxMCl9ZnVuY3Rpb24ga3MoYyxsLGEpe3JldHVybiBNYXRoLm1pbihjLGwpPT09Yz9sOk1hdGgubWF4KGMsYSk9PT1j''@;'; put 'put ''P2E6Y31jb25zdCBfZmU9bmV3IE1hcChbWyJhc2MiLFstMSwxXV0sWyJkZXNjIixbMSwtMV1dXSksZUplPWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSBtYXAuYCx0SmU9Yz0+YFRoZSBwcmlvcml0eSAnJHtjfScgaXMgbm90IGEgbnVtYmVyLmAsckpl''@;'; put 'put ''PWM9PmBUaGUgaWQgJyR7Y30nIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSBtYXAuYDtmdW5jdGlvbiBKTygpe2xldHtlcnJvcklkRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBNYXA7ZnVuY3Rp''@;'; put 'put ''b24gTSgpe3JldHVyblsuLi5sXX1mdW5jdGlvbiBEKFope3JldHVybiBsLmhhcyhaKX1yZXR1cm4gYz1tbChjKT9jOnJKZSx7YWRkSXRlbTpmdW5jdGlvbiBhKFoscmUpe2lmKEQoWikpdGhyb3cgbmV3IEVycm9yKGMoWikpO2wuc2V0KFoscmUpfSxjbGVhcjpmdW5jdGlvbiBoKCl7bC5jbGVh''@;'; put 'put ''cigpfSxnZXRJZDpmdW5jdGlvbiBmKFope2NvbnN0W3JlXT1NKCkuZmluZChjZT0+e2xldFtiZSxFZV09Y2U7cmV0dXJuIFo9PT1FZSYmYmV9KXx8W251bGxdO3JldHVybiByZX0sZ2V0SXRlbTpmdW5jdGlvbiB2KFope3JldHVybiBsLmdldChaKX0sZ2V0SXRlbXM6TSxoYXNJdGVtOkQscmVt''@;'; put 'put ''b3ZlSXRlbTpmdW5jdGlvbiBkKFope3JldHVybiBsLmRlbGV0ZShaKX19fWNvbnN0IGlKZT1jPT5gJyR7Y30nIHZhbHVlIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSB1bmlxdWUgc2V0LmAsZUs9Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAiJHtjfSIgcGx1Z2luLmAsd2ZlPWZ1''@;'; put 'put ''bmN0aW9uIG5KZSgpe2xldHtlcnJvclByaW9yaXR5RXhpc3RzOmMsZXJyb3JQcmlvcml0eU5hTjpsfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgYT1uZXcgTWFwO3JldHVybiBjPW1sKGMpP2M6ZUplLGw9bWwobCk/bDp0''@;'; put 'put ''SmUse2FkZEl0ZW06ZnVuY3Rpb24gZChmLHYpe2lmKCFtMShmKSl0aHJvdyBuZXcgRXJyb3IobChmKSk7aWYoYS5oYXMoZikpdGhyb3cgbmV3IEVycm9yKGMoZikpO2Euc2V0KGYsdil9LGdldEl0ZW1zOmZ1bmN0aW9uIGgoKXtsZXQgZj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1swXT9hcmd1bWVudHNbMF06ImFzYyI7Y29uc3RbdixNXT1fZmUuZ2V0KGYpfHxfZmUuZ2V0KCJhc2MiKTtyZXR1cm5bLi4uYV0uc29ydCgoRCxaKT0+RFswXTxaWzBdP3Y6TSkubWFwKEQ9PkRbMV0pfX19KHtlcnJvclByaW9yaXR5RXhpc3RzOmM9PmBUaGVyZSBpcyBhbHJlYWR5''@;'; put 'put ''IHJlZ2lzdGVyZWQgcGx1Z2luIG9uIHByaW9yaXR5ICIke2N9Ii5gLGVycm9yUHJpb3JpdHlOYU46Yz0+YFRoZSBwcmlvcml0eSAiJHtjfSIgaXMgbm90IGEgbnVtYmVyLmB9KSxDZmU9ZnVuY3Rpb24gYUplKCl7bGV0e2Vycm9ySXRlbUV4aXN0czpjfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgbD1uZXcgU2V0O3JldHVybiBjPW1sKGMpP2M6aUplLHthZGRJdGVtOmZ1bmN0aW9uIGEoZil7aWYobC5oYXMoZikpdGhyb3cgbmV3IEVycm9yKGMoZikpO2wuYWRkKGYpfSxjbGVhcjpmdW5jdGlvbiBoKCl7bC5jbGVh''@;'; put 'put ''cigpfSxnZXRJdGVtczpmdW5jdGlvbiBkKCl7cmV0dXJuWy4uLmxdfX19KHtlcnJvckl0ZW1FeGlzdHM6ZUt9KSx0Sz1KTyh7ZXJyb3JJZEV4aXN0czplS30pO2Z1bmN0aW9uIG5LKCl7cmV0dXJuWy4uLndmZS5nZXRJdGVtcygpLC4uLkNmZS5nZXRJdGVtcygpXX1mdW5jdGlvbiBJRShjKXtj''@;'; put 'put ''b25zdCBsPXAxKGMpO3JldHVybiB0Sy5nZXRJdGVtKGwpfWZ1bmN0aW9uIFBzKGMsbCxhKXtbYyxsLGFdPWZ1bmN0aW9uIGxKZShjLGwsYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJihjPShsPWMpLlBMVUdJTl9LRVksYT1sLlBMVUdJTl9QUklPUklUWSksW2MsbCxhXX0oYyxsLGEp''@;'; put 'put ''LHZvaWQgMD09PUlFKGMpJiZmdW5jdGlvbiBzSmUoYyxsLGEpe2NvbnN0IGQ9cDEoYyk7aWYodEsuaGFzSXRlbShkKSl0aHJvdyBuZXcgRXJyb3IoZUsoZCkpO3ZvaWQgMD09PWE/Q2ZlLmFkZEl0ZW0oZCk6d2ZlLmFkZEl0ZW0oYSxkKSx0Sy5hZGRJdGVtKGQsbCl9KGMsbCxhKX1jb25zdHty''@;'; put 'put ''ZWdpc3RlcjpjSmUsZ2V0SXRlbTp1SmUsaGFzSXRlbTpTZmUsZ2V0TmFtZXM6ZEplfT1yMygicmVuZGVyZXJzIik7ZnVuY3Rpb24gUU8oYyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIVNmZShjKSl0aHJvdyBFcnJvcihgTm8gcmVnaXN0ZXJlZCByZW5kZXJlciBmb3Vu''@;'; put 'put ''ZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiB1SmUoYyl9ZnVuY3Rpb24gSWgoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLlJFTkRFUkVSX1RZUEUpLGNKZShjLGwpfWNvbnN0e3JlZ2lzdGVyOmhKZSxnZXRJdGVtOmZKZSxoYXNJdGVtOk1mZSxnZXROYW1lczpwSmV9PXIz''@;'; put 'put ''KCJ2YWxpZGF0b3JzIik7ZnVuY3Rpb24gcksoYyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIU1mZShjKSl0aHJvdyBFcnJvcihgTm8gcmVnaXN0ZXJlZCB2YWxpZGF0b3IgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gZkplKGMpfWZ1bmN0aW9uIFk3KGMs''@;'; put 'put ''bCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5WQUxJREFUT1JfVFlQRSksaEplKGMsbCl9ZnVuY3Rpb24ga3AoYyxsLGEpeyhmdW5jdGlvbiBnSmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVs''@;'; put 'put ''ZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFFhKGMsbCl7cmV0dXJuIGMuZ2V0KHhmZShjLGwpKX1mdW5jdGlvbiBWbShjLGwsYSl7cmV0dXJuIGMuc2V0KHhmZShjLGwpLGEpLGF9ZnVuY3Rpb24geGZlKGMsbCxhKXtpZigiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgejI9bmV3IFdlYWtNYXAsaUs9bmV3IFdlYWtNYXAseDA9bmV3''@;'; put 'put ''IFdlYWtNYXAsZl89bmV3IFdlYWtNYXAsZVA9bmV3IFdlYWtNYXAsaTM9bmV3IFdlYWtNYXAsYUs9bmV3IFdlYWtNYXAsUkU9bmV3IFdlYWtNYXAsRzc9bmV3IFdlYWtNYXAsRHA9bmV3IFdlYWtNYXA7Y29uc3QgRWZlPWNsYXNzIG1KZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7bGV0IE09''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOm51bGw7a3AodGhpcyx6Mix2b2lkIDApLGtwKHRoaXMsaUssdm9pZCAwKSxrcCh0aGlzLHgwLHZvaWQgMCksa3AodGhpcyxmXyx2b2lkIDApLGtwKHRoaXMsZVAsdm9pZCAwKSxrcCh0aGlzLGkz''@;'; put 'put ''LHZvaWQgMCksa3AodGhpcyxhSyx2b2lkIDApLGtwKHRoaXMsUkUsdm9pZCAwKSxrcCh0aGlzLEc3LFtudWxsLG51bGxdKSxrcCh0aGlzLERwLFtudWxsLG51bGxdKSxWbSh6Mix0aGlzLGQpLFZtKGlLLHRoaXMsYSksVm0oeDAsdGhpcyxmKSxWbShmXyx0aGlzLHYpLFZtKGVQLHRoaXMsTSks''@;'; put 'put ''Vm0oaTMsdGhpcyxoKSxWbShhSyx0aGlzLGwpLHRoaXMucmVnaXN0ZXJFdmVudHMoKX1yZWdpc3RlckV2ZW50cygpe1FhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuaG9sZGVyLCJjb250ZXh0bWVudSIsZD0+dGhpcy5vbkNvbnRleHRNZW51KGQpKSxRYShpMyx0aGlz''@;'; put 'put ''KS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLlRBQkxFLCJtb3VzZW92ZXIiLGQ9PnRoaXMub25Nb3VzZU92ZXIoZCkpLFFhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuVEFCTEUsIm1vdXNlb3V0IixkPT50aGlzLm9uTW91c2VPdXQoZCkpO2NvbnN0IGw9KCk9''@;'; put 'put ''PntRYShpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLmhvbGRlciwidG91Y2hzdGFydCIsZD0+dGhpcy5vblRvdWNoU3RhcnQoZCkpLFFhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuaG9sZGVyLCJ0b3VjaGVuZCIsZD0+dGhpcy5vblRvdWNoRW5k''@;'; put 'put ''KGQpKSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nfHwodGhpcy5tb21lbnR1bVNjcm9sbGluZz17fSksUWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsInNjcm9sbCIsKCk9PntjbGVhclRpbWVvdXQodGhpcy5tb21lbnR1bVNjcm9sbGluZy5fdGltZW91dCks''@;'; put 'put ''dGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nfHxRYSh6Mix0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZVRvdWNoU2Nyb2xsIiksdGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nPSEwLHRoaXMubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMu''@;'; put 'put ''dG91Y2hBcHBsaWVkfHwodGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nPSExLFFhKHoyLHRoaXMpLmdldFNldHRpbmcoIm9uQWZ0ZXJNb21lbnR1bVNjcm9sbCIpKX0sMjAwKX0pfTtBcCgpP2woKTooUiQoKSYmbCgpLCgoKT0+e1FhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEo''@;'; put 'put ''eDAsdGhpcykuaG9sZGVyLCJtb3VzZXVwIixkPT50aGlzLm9uTW91c2VVcChkKSksUWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsIm1vdXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSl9KSgpKX1zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGwpe2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5wYXJlbnRDZWxsKGwpLmNvb3JkcztpZihRYShSRSx0aGlzKSYmZCl7Y29uc3RbaCxmXT1bZC5yb3csUWEoUkUsdGhpcykuZnJvbS5yb3ddLFt2LE1dPVtkLmNvbCxRYShSRSx0aGlzKS5mcm9tLmNvbF07cmV0dXJuIGg9PT1mJiZ2PT09TX1yZXR1cm4hMX1wYXJlbnRDZWxs''@;'; put 'put ''KGwpe2NvbnN0IGE9e30saD1iRShsLFsiVEQiLCJUSCJdLFFhKHgwLHRoaXMpLlRBQkxFKTtyZXR1cm4gaD8oYS5jb29yZHM9UWEoeDAsdGhpcykuZ2V0Q29vcmRzKGgpLGEuVEQ9aCk6cG8obCwid3RCb3JkZXIiKSYmcG8obCwiY3VycmVudCIpPyhhLmNvb3Jkcz1RYShmXyx0aGlzKS5nZXRG''@;'; put 'put ''b2N1c1NlbGVjdGlvbigpLmNlbGxSYW5nZS5oaWdobGlnaHQsYS5URD1RYSh4MCx0aGlzKS5nZXRDZWxsKGEuY29vcmRzKSk6cG8obCwid3RCb3JkZXIiKSYmcG8obCwiYXJlYSIpJiZRYShmXyx0aGlzKS5nZXRBcmVhU2VsZWN0aW9uKCkuY2VsbFJhbmdlJiYoYS5jb29yZHM9UWEoZl8sdGhp''@;'; put 'put ''cykuZ2V0QXJlYVNlbGVjdGlvbigpLmNlbGxSYW5nZS50byxhLlREPVFhKHgwLHRoaXMpLmdldENlbGwoYS5jb29yZHMpKSxhfW9uTW91c2VEb3duKGwpe2NvbnN0IGE9UWEoaUssdGhpcykucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsZD1JJChSMmUsbC50YXJnZXQpLGg9bC50YXJnZXQ7''@;'; put 'put ''aWYoIVsiVEQiLCJUSCJdLmluY2x1ZGVzKGEubm9kZU5hbWUpJiYoaD09PWF8fGQoMCk9PT1hfHxkKDEpPT09YSkpcmV0dXJuO2NvbnN0IGY9dGhpcy5wYXJlbnRDZWxsKGgpO3BvKGgsImNvcm5lciIpP1FhKHoyLHRoaXMpLmdldFNldHRpbmcoIm9uQ2VsbENvcm5lck1vdXNlRG93biIsbCxo''@;'; put 'put ''KTpmLlREJiZRYSh6Mix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlRG93biIpJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VEb3duIixsLGYuY29vcmRzLGYuVEQpLCgwPT09bC5idXR0b258fHRoaXMudG91Y2hBcHBsaWVkKSYmZi5URCYmKFFhKERwLHRoaXMpWzBdPWYuVEQsY2xlYXJU''@;'; put 'put ''aW1lb3V0KFFhKEc3LHRoaXMpWzBdKSxRYShHNyx0aGlzKVswXT1zZXRUaW1lb3V0KCgpPT57UWEoRHAsdGhpcylbMF09bnVsbH0sMWUzKSl9b25Db250ZXh0TWVudShsKXtpZihRYSh6Mix0aGlzKS5oYXMoIm9uQ2VsbENvbnRleHRNZW51Iikpe2NvbnN0IGE9dGhpcy5wYXJlbnRDZWxsKGwu''@;'; put 'put ''dGFyZ2V0KTthLlREJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsQ29udGV4dE1lbnUiLGwsYS5jb29yZHMsYS5URCl9fW9uTW91c2VPdmVyKGwpe2lmKCFRYSh6Mix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlT3ZlciIpKXJldHVybjtjb25zdCBhPVFhKHgwLHRoaXMpLlRBQkxFLGQ9YkUobC50''@;'; put 'put ''YXJnZXQsWyJURCIsIlRIIl0sYSksaD1RYShlUCx0aGlzKXx8dGhpcztkJiZkIT09aC5sYXN0TW91c2VPdmVyJiZMbShkLGEpJiYoaC5sYXN0TW91c2VPdmVyPWQsdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlT3ZlciIsbCxRYSh4MCx0aGlzKS5nZXRDb29yZHMoZCksZCkpfW9uTW91''@;'; put 'put ''c2VPdXQobCl7aWYoIVFhKHoyLHRoaXMpLmhhcygib25DZWxsTW91c2VPdXQiKSlyZXR1cm47Y29uc3QgYT1RYSh4MCx0aGlzKS5UQUJMRSxkPWJFKGwudGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGg9YkUobC5yZWxhdGVkVGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGY9UWEoZVAsdGhpcyl8fHRoaXM7''@;'; put 'put ''ZCYmZCE9PWgmJkxtKGQsYSkmJih0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VPdXQiLGwsUWEoeDAsdGhpcykuZ2V0Q29vcmRzKGQpLGQpLG51bGw9PT1oJiYoZi5sYXN0TW91c2VPdmVyPW51bGwpKX1vbk1vdXNlVXAobCl7Y29uc3QgYT10aGlzLnBhcmVudENlbGwobC50YXJnZXQp''@;'; put 'put ''O2EuVEQmJlFhKHoyLHRoaXMpLmhhcygib25DZWxsTW91c2VVcCIpJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VVcCIsbCxhLmNvb3JkcyxhLlREKSwoMD09PWwuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJihhLlREPT09UWEoRHAsdGhpcylbMF0mJmEuVEQ9PT1RYShEcCx0''@;'; put 'put ''aGlzKVsxXT8ocG8obC50YXJnZXQsImNvcm5lciIpP3RoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxDb3JuZXJEYmxDbGljayIsbCxhLmNvb3JkcyxhLlREKTp0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsRGJsQ2xpY2siLGwsYS5jb29yZHMsYS5URCksUWEoRHAsdGhpcylbMF09bnVsbCxRYShE''@;'; put 'put ''cCx0aGlzKVsxXT1udWxsKTphLlREPT09UWEoRHAsdGhpcylbMF0mJihRYShEcCx0aGlzKVsxXT1hLlRELGNsZWFyVGltZW91dChRYShHNyx0aGlzKVsxXSksUWEoRzcsdGhpcylbMV09c2V0VGltZW91dCgoKT0+e1FhKERwLHRoaXMpWzFdPW51bGx9LDUwMCkpKX1vblRvdWNoU3RhcnQobCl7''@;'; put 'put ''Vm0oUkUsdGhpcyxRYShmXyx0aGlzKS5nZXRGb2N1c1NlbGVjdGlvbigpLmNlbGxSYW5nZSksdGhpcy50b3VjaEFwcGxpZWQ9ITAsdGhpcy5vbk1vdXNlRG93bihsKX1vblRvdWNoRW5kKGwpe3ZhciBhO2NvbnN0IGQ9bC50YXJnZXQsaD1udWxsPT09KGE9dGhpcy5wYXJlbnRDZWxsKGQpKXx8''@;'; put 'put ''dm9pZCAwPT09YT92b2lkIDA6YS5jb29yZHMsZj1QYShoKSYmaC5yb3c+PTAmJmguY29sPj0wO2lmKGwuY2FuY2VsYWJsZSYmZiYmUWEoejIsdGhpcykuZ2V0U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikpe2NvbnN0IE09WyJBIiwiQlVUVE9OIiwiSU5QVVQiXTtPJCgpJiYoUTJlKCl8''@;'; put 'put ''fGVmZSgpKSYmdGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGQpJiYhTS5pbmNsdWRlcyhkLnRhZ05hbWUpP2wucHJldmVudERlZmF1bHQoKTp0aGlzLnNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQoZCl8fGwucHJldmVudERlZmF1bHQoKX10aGlzLm9uTW91c2VVcChsKSx0aGlzLnRvdWNoQXBw''@;'; put 'put ''bGllZD0hMX1jYWxsTGlzdGVuZXIobCxhLGQsaCl7Y29uc3QgZj1RYSh6Mix0aGlzKS5nZXRTZXR0aW5nUHVyZShsKTtmJiZmKGEsZCxoLFFhKGFLLHRoaXMpLmNhbGwodGhpcykpfWRlc3Ryb3koKXtjbGVhclRpbWVvdXQoUWEoRzcsdGhpcylbMF0pLGNsZWFyVGltZW91dChRYShHNyx0aGlz''@;'; put 'put ''KVsxXSksUWEoaTMsdGhpcykuZGVzdHJveSgpfX07ZnVuY3Rpb24gb0soYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHZKZShjKXt2YXIgbD1mdW5jdGlvbiBiSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2''@;'; put 'put ''b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5n''@;'; put 'put ''Ok51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IF9KZT1j''@;'; put 'put ''bGFzcyB5SmV7Y29uc3RydWN0b3IobCxhLGQpe29LKHRoaXMsIm9mZnNldCIsdm9pZCAwKSxvSyh0aGlzLCJ0b3RhbCIsdm9pZCAwKSxvSyh0aGlzLCJjb3VudFRIIix2b2lkIDApLHRoaXMub2Zmc2V0PWwsdGhpcy50b3RhbD1hLHRoaXMuY291bnRUSD1kfW9mZnNldHRlZChsKXtyZXR1cm4g''@;'; put 'put ''bCt0aGlzLm9mZnNldH11bk9mZnNldHRlZChsKXtyZXR1cm4gbC10aGlzLm9mZnNldH1yZW5kZXJlZFRvU291cmNlKGwpe3JldHVybiB0aGlzLm9mZnNldHRlZChsKX1zb3VyY2VUb1JlbmRlcmVkKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkKGwpfW9mZnNldHRlZFRIKGwpe3JldHVybiBs''@;'; put 'put ''LXRoaXMuY291bnRUSH11bk9mZnNldHRlZFRIKGwpe3JldHVybiBsK3RoaXMuY291bnRUSH12aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9Tb3VyY2VDb2x1bW4obCl7cmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGwpKX1zb3VyY2VDb2x1bW5Ub1Zpc2libGVS''@;'; put 'put ''b3dIZWFkZWRDb2x1bW4obCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVuZGVyZWQobCkpfX07ZnVuY3Rpb24gc0soYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHdKZShjKXt2YXIgbD1mdW5jdGlvbiBDSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFj''@;'; put 'put ''KXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJp''@;'; put 'put ''bWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy''@;'; put 'put ''YWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IE1KZT1jbGFzcyBTSmV7Y29uc3RydWN0b3IobCxhLGQpe3NLKHRoaXMsIm9mZnNldCIsdm9pZCAwKSxzSyh0aGlzLCJ0b3RhbCIsdm9pZCAwKSxzSyh0aGlzLCJjb3VudFRIIix2b2lkIDApLHRoaXMub2Zmc2V0PWwsdGhpcy50''@;'; put 'put ''b3RhbD1hLHRoaXMuY291bnRUSD1kfW9mZnNldHRlZChsKXtyZXR1cm4gbCt0aGlzLm9mZnNldH11bk9mZnNldHRlZChsKXtyZXR1cm4gbC10aGlzLm9mZnNldH1yZW5kZXJlZFRvU291cmNlKGwpe3JldHVybiB0aGlzLm9mZnNldHRlZChsKX1zb3VyY2VUb1JlbmRlcmVkKGwpe3JldHVybiB0''@;'; put 'put ''aGlzLnVuT2Zmc2V0dGVkKGwpfW9mZnNldHRlZFRIKGwpe3JldHVybiBsLXRoaXMuY291bnRUSH11bk9mZnNldHRlZFRIKGwpe3JldHVybiBsK3RoaXMuY291bnRUSH12aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3cobCl7cmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9m''@;'; put 'put ''ZnNldHRlZFRIKGwpKX1zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVuZGVyZWQobCkpfX07ZnVuY3Rpb24gdFAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhKZShjKXt2YXIgbD1mdW5jdGlvbiBFSmUo''@;'; put 'put ''YyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJA''@;'; put 'put ''QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7''@;'; put 'put ''dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFRKZXtjb25zdHJ1Y3Rvcigpe3RQKHRoaXMsImN1cnJlbnRTaXplIiwwKSx0UCh0aGlzLCJuZXh0U2l6ZSIsMCksdFAodGhpcywiY3VycmVudE9mZnNldCIsMCksdFAodGhp''@;'; put 'put ''cywibmV4dE9mZnNldCIsMCl9c2V0U2l6ZShsKXt0aGlzLmN1cnJlbnRTaXplPXRoaXMubmV4dFNpemUsdGhpcy5uZXh0U2l6ZT1sfXNldE9mZnNldChsKXt0aGlzLmN1cnJlbnRPZmZzZXQ9dGhpcy5uZXh0T2Zmc2V0LHRoaXMubmV4dE9mZnNldD1sfX1mdW5jdGlvbiBjSyhjLGwsYSl7cmV0''@;'; put 'put ''dXJuKGw9ZnVuY3Rpb24ga0plKGMpe3ZhciBsPWZ1bmN0aW9uIERKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6''@;'; put 'put ''bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgSUple2NvbnN0cnVjdG9yKCl7Y0sodGhpcywic2l6ZSIsbmV3IFRKZSksY0sodGhpcywid29ya2lu''@;'; put 'put ''Z1NwYWNlIiwwKSxjSyh0aGlzLCJzaGFyZWRTaXplIixudWxsKX1zZXRTaXplKGwpe3RoaXMuc2l6ZS5zZXRTaXplKGwpfXNldE9mZnNldChsKXt0aGlzLnNpemUuc2V0T2Zmc2V0KGwpfWdldFZpZXdTaXplKCl7cmV0dXJuIHRoaXMuc2l6ZX1pc1NoYXJlZCgpe3JldHVybiBudWxsIT09dGhp''@;'; put 'put ''cy5zaGFyZWRTaXplfWlzUGxhY2VPbihsKXtyZXR1cm4gdGhpcy53b3JraW5nU3BhY2U9PT1sfWFwcGVuZChsKXt0aGlzLndvcmtpbmdTcGFjZT0xLGwud29ya2luZ1NwYWNlPTIsdGhpcy5zaGFyZWRTaXplPWwuZ2V0Vmlld1NpemUoKX1wcmVwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTIs''@;'; put 'put ''bC53b3JraW5nU3BhY2U9MSx0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3U2l6ZSgpfX15KDI5NzYwKTtjbGFzcyBBZmV7Y29uc3RydWN0b3IobCxhKXsoZnVuY3Rpb24gUkplKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBMSmUoYyl7dmFyIGw9ZnVuY3Rpb24gT0plKGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsIm9yZGVyIixbXSksdGhpcy5vcmRlcj1bLi4uQXJyYXkoYSkua2V5cygpXS5tYXAoZD0+bCtkKX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMub3JkZXIubGVuZ3RofWhhcyhsKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5vcmRlci5pbmRleE9mKGwpPi0xfWdldChsKXtyZXR1cm4gbDx0aGlzLm9yZGVyLmxlbmd0aD90aGlzLm9yZGVyW2xdOi0xfXJlbW92ZShsKXt0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YobCksMSl9cHJlcGVuZChsKXtyZXR1cm4gdGhpcy5vcmRlci51bnNoaWZ0KGwp''@;'; put 'put ''LHRoaXMub3JkZXIucG9wKCl9fWNsYXNzIE5KZXtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gUEplKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBGSmUoYyl7dmFyIGw9ZnVuY3Rpb24gSEplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0''@;'; put 'put ''cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xd''@;'; put 'put ''PWEsY30pKHRoaXMsInNpemVTZXQiLHZvaWQgMCksdGhpcy5zaXplU2V0PWx9ZGlmZigpe2NvbnN0e3NpemVTZXQ6bH09dGhpcyx7Y3VycmVudFNpemU6YSxuZXh0U2l6ZTpkfT1sLmdldFZpZXdTaXplKCk7bGV0IGg9TWF0aC5tYXgoZCxhKTtpZigwPT09aClyZXR1cm5bXTtjb25zdHtjdXJy''@;'; put 'put ''ZW50T2Zmc2V0OmYsbmV4dE9mZnNldDp2fT1sLmdldFZpZXdTaXplKCksTT1uZXcgQWZlKGYsYSksRD1uZXcgQWZlKHYsZCksWj1bXTtmb3IobGV0IHJlPTA7cmU8aDtyZSsrKXtjb25zdCBjZT1NLmdldChyZSksYmU9RC5nZXQocmUpO2lmKC0xPT09YmUpWi5wdXNoKFsicmVtb3ZlIixjZV0p''@;'; put 'put ''O2Vsc2UgaWYoLTE9PT1jZSkhbC5pc1NoYXJlZCgpfHxsLmlzU2hhcmVkKCkmJmwuaXNQbGFjZU9uKDIpP1oucHVzaChbImFwcGVuZCIsYmVdKTpaLnB1c2goWyJwcmVwZW5kIixiZV0pO2Vsc2UgaWYoYmU+Y2UpTS5oYXMoYmUpJiYoTS5yZW1vdmUoYmUpLGQ8PU0ubGVuZ3RoJiYoaC09MSkp''@;'; put 'put ''LFoucHVzaChbInJlcGxhY2UiLGJlLGNlXSk7ZWxzZSBpZihiZTxjZSl7Y29uc3QgRWU9TS5wcmVwZW5kKGJlKTtaLnB1c2goWyJpbnNlcnRfYmVmb3JlIixiZSxjZSxFZV0pfWVsc2UgWi5wdXNoKFsibm9uZSIsYmVdKX1yZXR1cm4gWn19ZnVuY3Rpb24gcF8oYyxsLGEpe3JldHVybihsPWZ1''@;'; put 'put ''bmN0aW9uIFZKZShjKXt2YXIgbD1mdW5jdGlvbiBCSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''ZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwp''@;'; put 'put ''KWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGtmZXtjb25zdHJ1Y3RvcihsLGEpe3BfKHRoaXMsInJvb3ROb2RlIix2b2lkIDApLHBfKHRoaXMsIm5vZGVzUG9v''@;'; put 'put ''bCIsdm9pZCAwKSxwXyh0aGlzLCJzaXplU2V0IixuZXcgSUplKSxwXyh0aGlzLCJjb2xsZWN0ZWROb2RlcyIsW10pLHBfKHRoaXMsInZpZXdEaWZmZXIiLG5ldyBOSmUodGhpcy5zaXplU2V0KSkscF8odGhpcywibGVhZHMiLFtdKSx0aGlzLnJvb3ROb2RlPWwsdGhpcy5ub2Rlc1Bvb2w9YX1z''@;'; put 'put ''ZXRTaXplKGwpe3JldHVybiB0aGlzLnNpemVTZXQuc2V0U2l6ZShsKSx0aGlzfXNldE9mZnNldChsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnNldE9mZnNldChsKSx0aGlzfWlzU2hhcmVkVmlld1NldCgpe3JldHVybiB0aGlzLnNpemVTZXQuaXNTaGFyZWQoKX1nZXROb2RlKGwpe3JldHVybiBs''@;'; put 'put ''PHRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoP3RoaXMuY29sbGVjdGVkTm9kZXNbbF06bnVsbH1nZXRDdXJyZW50Tm9kZSgpe2NvbnN0IGw9dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg7cmV0dXJuIGw+MD90aGlzLmNvbGxlY3RlZE5vZGVzW2wtMV06bnVsbH1hcHBseUNvbW1hbmQobCl7''@;'; put 'put ''Y29uc3R7cm9vdE5vZGU6YX09dGhpcyxbZCxoLGYsdl09bCxNPXRoaXMubm9kZXNQb29sKGgpO3N3aXRjaCh0aGlzLmNvbGxlY3RlZE5vZGVzLnB1c2goTSksZCl7Y2FzZSJwcmVwZW5kIjphLmluc2VydEJlZm9yZShNLGEuZmlyc3RDaGlsZCk7YnJlYWs7Y2FzZSJhcHBlbmQiOmEuYXBwZW5k''@;'; put 'put ''Q2hpbGQoTSk7YnJlYWs7Y2FzZSJpbnNlcnRfYmVmb3JlIjphLmluc2VydEJlZm9yZShNLHRoaXMubm9kZXNQb29sKGYpKSxhLnJlbW92ZUNoaWxkKHRoaXMubm9kZXNQb29sKHYpKTticmVhaztjYXNlInJlcGxhY2UiOmEucmVwbGFjZUNoaWxkKE0sdGhpcy5ub2Rlc1Bvb2woZikpO2JyZWFr''@;'; put 'put ''O2Nhc2UicmVtb3ZlIjphLnJlbW92ZUNoaWxkKE0pfX1zdGFydCgpe3RoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoPTAsdGhpcy5sZWFkcz10aGlzLnZpZXdEaWZmZXIuZGlmZigpfXJlbmRlcigpe3RoaXMubGVhZHMubGVuZ3RoPjAmJnRoaXMuYXBwbHlDb21tYW5kKHRoaXMubGVhZHMuc2hp''@;'; put 'put ''ZnQoKSl9ZW5kKCl7Zm9yKDt0aGlzLmxlYWRzLmxlbmd0aD4wOyl0aGlzLmFwcGx5Q29tbWFuZCh0aGlzLmxlYWRzLnNoaWZ0KCkpfX1jbGFzcyBEZmUgZXh0ZW5kcyBrZmV7cHJlcGVuZFZpZXcobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5wcmVwZW5kKGwuc2l6ZVNldCksbC5zaXplU2V0LmFw''@;'; put 'put ''cGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9YXBwZW5kVmlldyhsKXtyZXR1cm4gdGhpcy5zaXplU2V0LmFwcGVuZChsLnNpemVTZXQpLGwuc2l6ZVNldC5wcmVwZW5kKHRoaXMuc2l6ZVNldCksdGhpc319ZnVuY3Rpb24gSWZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBqSmUoYyl7dmFyIGw9''@;'; put 'put ''ZnVuY3Rpb24gekplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBVSmV7Y29uc3RydWN0b3IobCl7SWZlKHRoaXMsIm5vZGVUeXBlIix2b2lkIDApLElmZSh0aGlzLCJwb29sIixuZXcgTWFwKSx0aGlzLm5vZGVUeXBl''@;'; put 'put ''PWwudG9VcHBlckNhc2UoKX1zZXRSb290RG9jdW1lbnQobCl7dGhpcy5yb290RG9jdW1lbnQ9bH1vYnRhaW4obCxhKXtjb25zdCBoPSJudW1iZXIiPT10eXBlb2YgYT9gJHtsfXgke2F9YDpsLnRvU3RyaW5nKCk7aWYodGhpcy5wb29sLmhhcyhoKSlyZXR1cm4gdGhpcy5wb29sLmdldChoKTtj''@;'; put 'put ''b25zdCBmPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5ub2RlVHlwZSk7cmV0dXJuIHRoaXMucG9vbC5zZXQoaCxmKSxmfX1mdW5jdGlvbiBMRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWkplKGMpe3ZhciBsPWZ1bmN0aW9uIFdKZShjLGwpe2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCBy''@;'; put 'put ''ZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6''@;'; put 'put ''ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgT0V7Y29uc3RydWN0b3IobCxhKXtMRSh0aGlzLCJub2Rlc1Bvb2wiLG51bGwpLExFKHRoaXMsIm5vZGVUeXBlIix2b2lkIDApLExFKHRoaXMsInJvb3ROb2RlIix2b2lkIDApLExFKHRoaXMsInRhYmxlIixu''@;'; put 'put ''dWxsKSxMRSh0aGlzLCJyZW5kZXJlZE5vZGVzIiwwKSx0aGlzLm5vZGVzUG9vbD0ic3RyaW5nIj09dHlwZW9mIGw/bmV3IFVKZShsKTpudWxsLHRoaXMubm9kZVR5cGU9bCx0aGlzLnJvb3ROb2RlPWF9c2V0VGFibGUobCl7dGhpcy5ub2Rlc1Bvb2wmJnRoaXMubm9kZXNQb29sLnNldFJvb3RE''@;'; put 'put ''b2N1bWVudChsLnJvb3REb2N1bWVudCksdGhpcy50YWJsZT1sfWFkanVzdCgpe31yZW5kZXIoKXt9fWZ1bmN0aW9uIFJmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWUplKGMpe3ZhciBsPWZ1bmN0aW9uIEdKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy''@;'; put 'put ''IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu''@;'; put 'put ''Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh''@;'; put 'put ''YmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgJEplIGV4dGVuZHMgT0V7Y29uc3RydWN0b3IoKXtzdXBlcigiVEgiKSxSZmUodGhpcywib3JkZXJWaWV3cyIsbmV3IFdlYWtNYXApLFJmZSh0aGlzLCJzb3VyY2VSb3dJbmRleCIsMCl9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlz''@;'; put 'put ''Lm9yZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5vcmRlclZpZXdzLmdldChsKTooYT1uZXcgRGZlKGwsZD0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKHRoaXMuc291cmNlUm93SW5kZXgsZCkpLHRoaXMub3JkZXJWaWV3cy5zZXQobCxhKSksYX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bCxy''@;'; put 'put ''b3dIZWFkZXJGdW5jdGlvbnM6YSxyb3dIZWFkZXJzQ291bnQ6ZCxyb3dzOmgsY2VsbHM6Zn09dGhpcy50YWJsZTtmb3IobGV0IHY9MDt2PGw7disrKXtjb25zdCBNPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZSh2KSxEPWguZ2V0UmVuZGVyZWROb2RlKHYpO3RoaXMuc291cmNlUm93''@;'; put 'put ''SW5kZXg9TTtjb25zdCBaPXRoaXMub2J0YWluT3JkZXJWaWV3KEQpLHJlPWYub2J0YWluT3JkZXJWaWV3KEQpO1ouYXBwZW5kVmlldyhyZSkuc2V0U2l6ZShkKS5zZXRPZmZzZXQoMCkuc3RhcnQoKTtmb3IobGV0IGNlPWQtMTtjZT49MDtjZS0tKXtaLnJlbmRlcigpO2NvbnN0IGJlPVouZ2V0''@;'; put 'put ''Q3VycmVudE5vZGUoKTtiZS5jbGFzc05hbWU9IiIsYmUucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLGo3KGJlLFtuZXcgUmVnRXhwKCJhcmlhLSguKikiKSxuZXcgUmVnRXhwKCJyb2xlIildKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8oYmUsW1sicm9sZSIsInJvd2hlYWRlciJd''@;'; put 'put ''LFsic2NvcGUiLCJyb3ciXSx2JChjZSsxKSxONygtMSldKSxhW2NlXShNLGJlLGNlKX1aLmVuZCgpfX19Y2xhc3MgS0plIGV4dGVuZHMgT0V7Y29uc3RydWN0b3IobCl7c3VwZXIobnVsbCxsKX1hZGp1c3QoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bCxyb3dIZWFkZXJzQ291bnQ6YX09''@;'; put 'put ''dGhpcy50YWJsZTtsZXQgZD10aGlzLnJvb3ROb2RlLmZpcnN0Q2hpbGQ7aWYobCl7Y29uc3R7Y29sdW1uc1RvUmVuZGVyOmh9PXRoaXMudGFibGUsZj1oK2E7Zm9yKGxldCBNPTAsRD1sO008RDtNKyspe2ZvcihkPXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1tNXSxkfHwoZD10aGlzLnRhYmxl''@;'; put 'put ''LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLHRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQoZCkpLHRoaXMucmVuZGVyZWROb2Rlcz1kLmNoaWxkTm9kZXMubGVuZ3RoO3RoaXMucmVuZGVyZWROb2RlczxmOylkLmFwcGVuZENoaWxkKHRoaXMudGFibGUucm9vdERvY3VtZW50LmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoInRoIikpLHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5mOylkLnJlbW92ZUNoaWxkKGQubGFzdENoaWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMtPTF9Y29uc3Qgdj10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXMubGVuZ3RoO2lmKHY+bClm''@;'; put 'put ''b3IobGV0IE09bDtNPHY7TSsrKXRoaXMucm9vdE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpfWVsc2UgZCYmeHAoZCl9cmVuZGVyKCl7Y29uc3R7Y29sdW1uSGVhZGVyc0NvdW50Omx9PXRoaXMudGFibGU7dGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKHRo''@;'; put 'put ''aXMucm9vdE5vZGUsW1sicm9sZSIsInJvd2dyb3VwIl1dKTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3R7Y29sdW1uSGVhZGVyRnVuY3Rpb25zOmQsY29sdW1uc1RvUmVuZGVyOmgscm93SGVhZGVyc0NvdW50OmZ9PXRoaXMudGFibGUsdj10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbYV07''@;'; put 'put ''dGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKHYsW1sicm9sZSIsInJvdyJdLEEyZShhKzEpXSk7Zm9yKGxldCBNPS0xKmY7TTxoO00rPTEpe2NvbnN0IEQ9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKE0pLFo9di5jaGlsZE5vZGVzW00rZl07Wi5jbGFzc05hbWU9IiIs''@;'; put 'put ''Wi5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksajcoWixbbmV3IFJlZ0V4cCgiYXJpYS0oLiopIiksbmV3IFJlZ0V4cCgicm9sZSIpXSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKFosW3YkKE0rMSt0aGlzLnRhYmxlLnJvd0hlYWRlcnNDb3VudCksTjcoLTEpLFsicm9sZSIsImNv''@;'; put 'put ''bHVtbmhlYWRlciJdLC4uLk0+PTA/W1sic2NvcGUiLCJjb2wiXV06W1sicm9sZSIsInJvdyJdXV0pLGRbYV0oRCxaLGEpfX19fWxldCBMZmU9ITE7Y2xhc3MgcUplIGV4dGVuZHMgT0V7Y29uc3RydWN0b3IobCl7c3VwZXIobnVsbCxsKX1hZGp1c3QoKXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6''@;'; put 'put ''bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZSxkPWwrYTtmb3IoO3RoaXMucmVuZGVyZWROb2RlczxkOyl0aGlzLnJvb3ROb2RlLmFwcGVuZENoaWxkKHRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNvbCIpKSx0aGlzLnJlbmRlcmVkTm9kZXMrPTE7Zm9yKDt0''@;'; put 'put ''aGlzLnJlbmRlcmVkTm9kZXM+ZDspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCksdGhpcy5yZW5kZXJlZE5vZGVzLT0xfXJlbmRlcigpe3RoaXMuYWRqdXN0KCk7Y29uc3R7Y29sdW1uc1RvUmVuZGVyOmwscm93SGVhZGVyc0NvdW50OmF9PXRoaXMu''@;'; put 'put ''dGFibGU7IUxmZSYmbD4xZTMmJihMZmU9ITAsaWwoZ2xgUGVyZm9ybWFuY2UgdGlwOiBIYW5kc29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlzaWJsZSBjb2x1bW5zLlx4MjAKICAgICAgICBDb25zaWRlciBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIGNvbHVtbnMg''@;'; put 'put ''Ynkgc3BlY2lmeWluZyB0aGUgdGFibGUgd2lkdGggYW5kL29yXHgyMAogICAgICAgIHR1cm5pbmcgb2ZmIHRoZSAicmVuZGVyQWxsQ29sdW1ucyIgb3B0aW9uLmApKTtmb3IobGV0IGg9MDtoPGE7aCsrKXtjb25zdCBmPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShoKSx2PXRo''@;'; put 'put ''aXMudGFibGUuY29sdW1uVXRpbHMuZ2V0SGVhZGVyV2lkdGgoZik7dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW2hdLnN0eWxlLndpZHRoPWAke3Z9cHhgfWZvcihsZXQgaD0wO2g8bDtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLHY9dGhpcy50YWJs''@;'; put 'put ''ZS5jb2x1bW5VdGlscy5nZXRXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaCthXS5zdHlsZS53aWR0aD1gJHt2fXB4YH1jb25zdCBkPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtkJiZUaShkLCJyb3dIZWFkZXIiKX19bGV0IE9mZT0hMTtjbGFzcyBlUWUgZXh0ZW5kcyBPRXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsKXtzdXBlcigiVFIiLGwpLGZ1bmN0aW9uIFhKZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSkplKGMpe3ZhciBsPWZ1bmN0aW9uIFFKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv''@;'; put 'put ''aWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6''@;'; put 'put ''TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm9yZGVy''@;'; put 'put ''VmlldyIsdm9pZCAwKSx0aGlzLm9yZGVyVmlldz1uZXcga2ZlKGwsYT0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKGEpKX1nZXRSZW5kZXJlZE5vZGUobCl7cmV0dXJuIHRoaXMub3JkZXJWaWV3LmdldE5vZGUobCl9aGFzU3RhbGVDb250ZW50KGwpe3JldHVybiB0aGlzLm9yZGVyVmlldy5oYXNT''@;'; put 'put ''dGFsZUNvbnRlbnQobCl9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmx9PXRoaXMudGFibGU7IU9mZSYmbD4xZTMmJihPZmU9ITAsaWwoZ2xgUGVyZm9ybWFuY2UgdGlwOiBIYW5kc29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlzaWJsZSByb3dzLlx4MjAKICAgICAgICBD''@;'; put 'put ''b25zaWRlciBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgYnkgc3BlY2lmeWluZyB0aGUgdGFibGUgaGVpZ2h0IGFuZC9vclx4MjAKICAgICAgICB0dXJuaW5nIG9mZiB0aGUgInJlbmRlckFsbFJvd3MiIG9wdGlvbi5gKSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkm''@;'; put 'put ''JnZvKHRoaXMucm9vdE5vZGUsW1sicm9sZSIsInJvd2dyb3VwIl1dKSx0aGlzLm9yZGVyVmlldy5zZXRTaXplKGwpLnNldE9mZnNldCh0aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoMCkpLnN0YXJ0KCk7Zm9yKGxldCBoPTA7aDxsO2grKyl7dGhpcy5vcmRlclZpZXcucmVuZGVyKCk7''@;'; put 'put ''Y29uc3QgZj10aGlzLm9yZGVyVmlldy5nZXRDdXJyZW50Tm9kZSgpLHY9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKGgpO3ZhciBhLGQ7dGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKGYsW1sicm9sZSIsInJvdyJdLEEyZSh2KyhudWxsIT09KGE9bnVsbD09PShkPXRoaXMu''@;'; put 'put ''dGFibGUucm93VXRpbHMpfHx2b2lkIDA9PT1kfHxudWxsPT09KGQ9ZC5kYXRhQWNjZXNzT2JqZWN0KXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jb2x1bW5IZWFkZXJzLmxlbmd0aCkmJnZvaWQgMCE9PWE/YTowKSsxKV0pLCh2KzEpJTI9PTA/cG8oZiwiaHRfX3Jvd19ldmVuIil8fChsbyhmLCJo''@;'; put 'put ''dF9fcm93X29kZCIpLFRpKGYsImh0X19yb3dfZXZlbiIpKTpwbyhmLCJodF9fcm93X29kZCIpfHwobG8oZiwiaHRfX3Jvd19ldmVuIiksVGkoZiwiaHRfX3Jvd19vZGQiKSl9dGhpcy5vcmRlclZpZXcuZW5kKCl9fWZ1bmN0aW9uIFBmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdFFlKGMp''@;'; put 'put ''e3ZhciBsPWZ1bmN0aW9uIG5RZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgclFlIGV4dGVuZHMgT0V7Y29uc3RydWN0b3IoKXtzdXBlcigiVEQiKSxQZmUodGhpcywib3JkZXJWaWV3cyIsbmV3IFdlYWtNYXApLFBm''@;'; put 'put ''ZSh0aGlzLCJzb3VyY2VSb3dJbmRleCIsMCl9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5vcmRlclZpZXdzLmdldChsKTooYT1uZXcgRGZlKGwsZD0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKHRoaXMuc291cmNlUm93SW5kZXgs''@;'; put 'put ''ZCksdGhpcy5ub2RlVHlwZSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLGNvbHVtbnNUb1JlbmRlcjphLHJvd3M6ZCxyb3dIZWFkZXJzOmh9PXRoaXMudGFibGU7Zm9yKGxldCBNPTA7TTxsO00rKyl7Y29uc3QgRD10aGlzLnRhYmxl''@;'; put 'put ''LnJlbmRlcmVkUm93VG9Tb3VyY2UoTSksWj1kLmdldFJlbmRlcmVkTm9kZShNKTt0aGlzLnNvdXJjZVJvd0luZGV4PUQ7Y29uc3QgcmU9dGhpcy5vYnRhaW5PcmRlclZpZXcoWiksY2U9aC5vYnRhaW5PcmRlclZpZXcoWik7cmUucHJlcGVuZFZpZXcoY2UpLnNldFNpemUoYSkuc2V0T2Zmc2V0''@;'; put 'put ''KDApLnN0YXJ0KCk7Zm9yKGxldCBiZT0wO2JlPGE7YmUrKyl7cmUucmVuZGVyKCk7Y29uc3QgRWU9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGJlKSxCZT1yZS5nZXRDdXJyZW50Tm9kZSgpO3ZhciBmLHY7cG8oQmUsImhpZGUiKXx8KEJlLmNsYXNzTmFtZT0iIiksQmUucmVt''@;'; put 'put ''b3ZlQXR0cmlidXRlKCJzdHlsZSIpLEJlLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIiksajcoQmUsW25ldyBSZWdFeHAoImFyaWEtKC4qKSIpLG5ldyBSZWdFeHAoInJvbGUiKV0pLHRoaXMudGFibGUuY2VsbFJlbmRlcmVyKEQsRWUsQmUpLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2byhC''@;'; put 'put ''ZSxbLi4uQmUuaGFzQXR0cmlidXRlKCJyb2xlIik/W106W1sicm9sZSIsImdyaWRjZWxsIl1dLE43KC0xKSx2JChFZSsobnVsbCE9PShmPW51bGw9PT0odj10aGlzLnRhYmxlLnJvd1V0aWxzKXx8dm9pZCAwPT09dnx8bnVsbD09PSh2PXYuZGF0YUFjY2Vzc09iamVjdCl8fHZvaWQgMD09PXY/''@;'; put 'put ''dm9pZCAwOnYucm93SGVhZGVycy5sZW5ndGgpJiZ2b2lkIDAhPT1mP2Y6MCkrMSldKX1yZS5lbmQoKX19fWZ1bmN0aW9uIEp1KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBpUWUoYyl7dmFyIGw9ZnVuY3Rpb24gYVFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2''@;'; put 'put ''YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1''@;'; put 'put ''ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp''@;'; put 'put ''dGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBvUWV7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSZW5kZXJlcjphLHN0eWxlc0hhbmRsZXI6ZH09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O0p1KHRoaXMsInJvb3ROb2RlIix2b2lkIDAp''@;'; put 'put ''LEp1KHRoaXMsInJvb3REb2N1bWVudCIsdm9pZCAwKSxKdSh0aGlzLCJyb3dIZWFkZXJzIixudWxsKSxKdSh0aGlzLCJjb2x1bW5IZWFkZXJzIixudWxsKSxKdSh0aGlzLCJjb2xHcm91cCIsbnVsbCksSnUodGhpcywicm93cyIsbnVsbCksSnUodGhpcywiY2VsbHMiLG51bGwpLEp1KHRoaXMs''@;'; put 'put ''InJvd0ZpbHRlciIsbnVsbCksSnUodGhpcywiY29sdW1uRmlsdGVyIixudWxsKSxKdSh0aGlzLCJyb3dVdGlscyIsbnVsbCksSnUodGhpcywiY29sdW1uVXRpbHMiLG51bGwpLEp1KHRoaXMsInJvd3NUb1JlbmRlciIsMCksSnUodGhpcywiY29sdW1uc1RvUmVuZGVyIiwwKSxKdSh0aGlzLCJy''@;'; put 'put ''b3dIZWFkZXJGdW5jdGlvbnMiLFtdKSxKdSh0aGlzLCJyb3dIZWFkZXJzQ291bnQiLDApLEp1KHRoaXMsImNvbHVtbkhlYWRlckZ1bmN0aW9ucyIsW10pLEp1KHRoaXMsImNvbHVtbkhlYWRlcnNDb3VudCIsMCksSnUodGhpcywiY2VsbFJlbmRlcmVyIix2b2lkIDApLEp1KHRoaXMsImFjdGl2''@;'; put 'put ''ZU92ZXJsYXlOYW1lIix2b2lkIDApLEp1KHRoaXMsInN0eWxlc0hhbmRsZXIiLHZvaWQgMCksdGhpcy5yb290Tm9kZT1sLHRoaXMucm9vdERvY3VtZW50PXRoaXMucm9vdE5vZGUub3duZXJEb2N1bWVudCx0aGlzLmNlbGxSZW5kZXJlcj1hLHRoaXMuc3R5bGVzSGFuZGxlcj1kfXNldEFjdGl2''@;'; put 'put ''ZU92ZXJsYXlOYW1lKGwpe3RoaXMuYWN0aXZlT3ZlcmxheU5hbWU9bH1zZXRBeGlzVXRpbHMobCxhKXt0aGlzLnJvd1V0aWxzPWwsdGhpcy5jb2x1bW5VdGlscz1hfXNldFZpZXdwb3J0U2l6ZShsLGEpe3RoaXMucm93c1RvUmVuZGVyPWwsdGhpcy5jb2x1bW5zVG9SZW5kZXI9YX1zZXRGaWx0''@;'; put 'put ''ZXJzKGwsYSl7dGhpcy5yb3dGaWx0ZXI9bCx0aGlzLmNvbHVtbkZpbHRlcj1hfXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKXt0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1sLHRoaXMucm93SGVhZGVyc0NvdW50PWwubGVuZ3RoLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPWEsdGhp''@;'; put 'put ''cy5jb2x1bW5IZWFkZXJzQ291bnQ9YS5sZW5ndGh9c2V0UmVuZGVyZXJzKCl7bGV0e3Jvd0hlYWRlcnM6bCxjb2x1bW5IZWFkZXJzOmEsY29sR3JvdXA6ZCxyb3dzOmgsY2VsbHM6Zn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2wu''@;'; put 'put ''c2V0VGFibGUodGhpcyksYS5zZXRUYWJsZSh0aGlzKSxkLnNldFRhYmxlKHRoaXMpLGguc2V0VGFibGUodGhpcyksZi5zZXRUYWJsZSh0aGlzKSx0aGlzLnJvd0hlYWRlcnM9bCx0aGlzLmNvbHVtbkhlYWRlcnM9YSx0aGlzLmNvbEdyb3VwPWQsdGhpcy5yb3dzPWgsdGhpcy5jZWxscz1mfXJl''@;'; put 'put ''bmRlcmVkUm93VG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCl9cmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKX1pc0FyaWFFbmFibGVkKCl7cmV0dXJuIHRoaXMucm93''@;'; put 'put ''VXRpbHMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpfXJlbmRlcigpe3RoaXMuY29sR3JvdXAuYWRqdXN0KCksdGhpcy5jb2x1bW5IZWFkZXJzLmFkanVzdCgpLHRoaXMucm93cy5hZGp1c3QoKSx0aGlzLnJvd0hlYWRlcnMuYWRqdXN0KCksdGhpcy5jb2x1bW5IZWFkZXJzLnJl''@;'; put 'put ''bmRlcigpLHRoaXMucm93cy5yZW5kZXIoKSx0aGlzLnJvd0hlYWRlcnMucmVuZGVyKCksdGhpcy5jZWxscy5yZW5kZXIoKSx0aGlzLmNvbHVtblV0aWxzLmNhbGN1bGF0ZVdpZHRocygpLHRoaXMuY29sR3JvdXAucmVuZGVyKCk7Y29uc3R7cm93c1RvUmVuZGVyOmwscm93czphfT10aGlzO2Zv''@;'; put 'put ''cihsZXQgZD0wO2Q8bDtkKyspe2NvbnN0IGg9YS5nZXRSZW5kZXJlZE5vZGUoZCksZj10aGlzLnJvd1V0aWxzO2lmKGguZmlyc3RDaGlsZCl7Y29uc3Qgdj10aGlzLnJlbmRlcmVkUm93VG9Tb3VyY2UoZCksTT1mLmdldEhlaWdodEJ5T3ZlcmxheU5hbWUodix0aGlzLmFjdGl2ZU92ZXJsYXlO''@;'; put 'put ''YW1lKSxaPXRoaXMuc3R5bGVzSGFuZGxlci5hcmVDZWxsc0JvcmRlckJveCgpPzA6MTtoLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0PU0/TS1aKyJweCI6IiJ9fX19Y2xhc3Mgc1Fle2NvbnN0cnVjdG9yKCl7bGV0e1RBQkxFOmwsVEhFQUQ6YSxDT0xHUk9VUDpkLFRCT0RZOmgscm93VXRpbHM6''@;'; put 'put ''Zixjb2x1bW5VdGlsczp2LGNlbGxSZW5kZXJlcjpNLHN0eWxlc0hhbmRsZXI6RH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMucmVuZGVyZXI9bmV3IG9RZShsLHtjZWxsUmVuZGVyZXI6TSxzdHlsZXNIYW5kbGVyOkR9KSx0''@;'; put 'put ''aGlzLnJlbmRlcmVyLnNldFJlbmRlcmVycyh7cm93SGVhZGVyczpuZXcgJEplLGNvbHVtbkhlYWRlcnM6bmV3IEtKZShhKSxjb2xHcm91cDpuZXcgcUplKGQpLHJvd3M6bmV3IGVRZShoKSxjZWxsczpuZXcgclFlfSksdGhpcy5yZW5kZXJlci5zZXRBeGlzVXRpbHMoZix2KX1zZXRBY3RpdmVP''@;'; put 'put ''dmVybGF5TmFtZShsKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRBY3RpdmVPdmVybGF5TmFtZShsKSx0aGlzfXNldEZpbHRlcnMobCxhKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRGaWx0ZXJzKGwsYSksdGhpc31zZXRWaWV3cG9ydFNpemUobCxhKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5z''@;'; put 'put ''ZXRWaWV3cG9ydFNpemUobCxhKSx0aGlzfXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKGwsYSksdGhpc31hZGp1c3QoKXt0aGlzLnJlbmRlcmVyLmFkanVzdCgpfXJlbmRlcigpe3RoaXMucmVuZGVy''@;'; put 'put ''ZXIucmVuZGVyKCl9fWZ1bmN0aW9uIHVLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBsUWUoYyl7dmFyIGw9ZnVuY3Rpb24gY1FlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9''@;'; put 'put ''YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJz''@;'; put 'put ''dHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB1UWV7Y29uc3RydWN0b3IobCxhKXt1''@;'; put 'put ''Syh0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLHVLKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksdUsodGhpcywiaGVhZGVyV2lkdGhzIixuZXcgTWFwKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0aGlzLnd0U2V0dGluZ3M9YX1nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53dFNl''@;'; put 'put ''dHRpbmdzLmdldFNldHRpbmcoImNvbHVtbldpZHRoIixsKXx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpfWdldEhlYWRlckhlaWdodChsKXtsZXQgYT10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0''@;'; put 'put ''KCk7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYoYT1hP01hdGgubWF4KGEsZCk6ZCksYX1nZXRIZWFkZXJXaWR0aChsKXtyZXR1cm4gdGhpcy5oZWFkZXJXaWR0aHMuZ2V0KHRoaXMu''@;'; put 'put ''ZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpKX1jYWxjdWxhdGVXaWR0aHMoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXM7bGV0IGE9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpO2lmKGE9bC5nZXRTZXR0aW5nKCJvbk1vZGlm''@;'; put 'put ''eVJvd0hlYWRlcldpZHRoIixhKSxudWxsIT1hKXtjb25zdCBkPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxoPWwuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7Zm9yKGxldCBmPTA7ZjxkO2YrKyl7bGV0IHY9QXJyYXkuaXNBcnJheShhKT9hW2ZdOmE7dj12Pz9o''@;'; put 'put ''LHRoaXMuaGVhZGVyV2lkdGhzLnNldChmLHYpfX19fWZ1bmN0aW9uIEZmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZFFlKGMpe3ZhciBsPWZ1bmN0aW9uIGhRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lm''@;'; put 'put ''KHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJp''@;'; put 'put ''bmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZlFl''@;'; put 'put ''e2NvbnN0cnVjdG9yKGwsYSl7RmZlKHRoaXMsImRhdGFBY2Nlc3NPYmplY3QiLHZvaWQgMCksRmZlKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWF9Z2V0SGVpZ2h0KGwpe2xldCBhPXRoaXMud3RTZXR0aW5ncy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJyb3dIZWlnaHQiLGwpO2NvbnN0IGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tsXTtyZXR1cm4gdm9pZCAwIT09ZCYmKGE9dm9pZCAwPT09YT9kOk1hdGgubWF4KGEsZCkpLGF9Z2V0SGVpZ2h0QnlPdmVybGF5TmFtZShsLGEpe2xldCBk''@;'; put 'put ''PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWlnaHRCeU92ZXJsYXlOYW1lIixsLGEpO2NvbnN0IGg9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tsXTtyZXR1cm4gdm9pZCAwIT09aCYmKGQ9dm9pZCAwPT09ZD9oOk1hdGgubWF4KGQsaCkp''@;'; put 'put ''LGR9fWNvbnN0ICQ3PSJ0b3AiLElwPSJib3R0b20iLEs3PSJpbmxpbmVfc3RhcnQiLHE3PSJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsQm09ImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIixIZmU9WyQ3LElwLEs3LHE3LEJtXSxwUWU9bmV3IE1hcChbWyQ3LGBodF9jbG9uZV8keyQ3fWBd''@;'; put 'put ''LFtJcCxgaHRfY2xvbmVfJHtJcH1gXSxbSzcsYGh0X2Nsb25lXyR7Szd9IGh0X2Nsb25lX2xlZnRgXSxbcTcsYGh0X2Nsb25lXyR7cTd9IGh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lcmBdLFtCbSxgaHRfY2xvbmVfJHtCbX0gaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyYF1dKTtmdW5jdGlv''@;'; put 'put ''biBScChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZ1FlKGMpe3ZhciBsPWZ1bmN0aW9uIG1RZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgbV89Y2xhc3MgdlFle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7UnAodGhp''@;'; put 'put ''cywid3RTZXR0aW5ncyIsbnVsbCksUnAodGhpcywiZG9tQmluZGluZ3MiLHZvaWQgMCksUnAodGhpcywiVEJPRFkiLG51bGwpLFJwKHRoaXMsIlRIRUFEIixudWxsKSxScCh0aGlzLCJDT0xHUk9VUCIsbnVsbCksUnAodGhpcywiaGFzVGFibGVIZWlnaHQiLCEwKSxScCh0aGlzLCJoYXNUYWJs''@;'; put 'put ''ZVdpZHRoIiwhMCksUnAodGhpcywiaXNUYWJsZVZpc2libGUiLCExKSxScCh0aGlzLCJ0YWJsZU9mZnNldCIsMCksUnAodGhpcywiaG9sZGVyT2Zmc2V0IiwwKSx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5pc01hc3Rlcj0ibWFzdGVyIj09PWYsdGhpcy5uYW1lPWYsdGhpcy5kYXRhQWNjZXNz''@;'; put 'put ''T2JqZWN0PWwsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmluc3RhbmNlPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy53b3Q9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLlRBQkxFPWQucm9vdFRhYmxlLHkkKHRoaXMuVEFCTEUpLHRoaXMu''@;'; put 'put ''c3ByZWFkZXI9dGhpcy5jcmVhdGVTcHJlYWRlcih0aGlzLlRBQkxFKSx0aGlzLmhpZGVyPXRoaXMuY3JlYXRlSGlkZXIodGhpcy5zcHJlYWRlciksdGhpcy5ob2xkZXI9dGhpcy5jcmVhdGVIb2xkZXIodGhpcy5oaWRlciksdGhpcy53dFJvb3RFbGVtZW50PXRoaXMuaG9sZGVyLnBhcmVudE5v''@;'; put 'put ''ZGUsdGhpcy5pc01hc3RlciYmdGhpcy5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5maXhUYWJsZURvbVRyZWUoKSx0aGlzLnJvd0ZpbHRlcj1udWxsLHRoaXMuY29sdW1uRmlsdGVyPW51bGwsdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9ITE7Y29uc3Qgdj10aGlz''@;'; put 'put ''Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJvd0hlYWRlcldpZHRoIik7dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgicm93SGVhZGVyV2lkdGgiLCgpPT50aGlzLl9tb2RpZnlSb3dIZWFkZXJXaWR0aCh2KSksdGhpcy5yb3dVdGlscz1uZXcgZlFlKHRoaXMuZGF0YUFjY2Vzc09iamVjdCx0''@;'; put 'put ''aGlzLnd0U2V0dGluZ3MpLHRoaXMuY29sdW1uVXRpbHM9bmV3IHVRZSh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLnRhYmxlUmVuZGVyZXI9bmV3IHNRZSh7VEFCTEU6dGhpcy5UQUJMRSxUSEVBRDp0aGlzLlRIRUFELENPTEdST1VQOnRoaXMuQ09MR1JPVVAs''@;'; put 'put ''VEJPRFk6dGhpcy5UQk9EWSxyb3dVdGlsczp0aGlzLnJvd1V0aWxzLGNvbHVtblV0aWxzOnRoaXMuY29sdW1uVXRpbHMsY2VsbFJlbmRlcmVyOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgiY2VsbFJlbmRlcmVyIiksc3R5bGVzSGFuZGxlcjp0aGlzLmRhdGFBY2Nlc3NPYmplY3Qu''@;'; put 'put ''c3R5bGVzSGFuZGxlcn0pfWlzKGwpe3JldHVybiB0aGlzLm5hbWU9PT1sfWZpeFRhYmxlRG9tVHJlZSgpe2NvbnN0IGw9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQ7dGhpcy5UQk9EWT10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRib2R5IiksdGhpcy5UQk9EWXx8KHRoaXMuVEJP''@;'; put 'put ''RFk9bC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLHRoaXMuVEFCTEUuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSkpLHRoaXMuVEhFQUQ9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJ0aGVhZCIpLHRoaXMuVEhFQUR8fCh0aGlzLlRIRUFEPWwuY3JlYXRlRWxlbWVudCgidGhlYWQiKSx0aGlzLlRB''@;'; put 'put ''QkxFLmluc2VydEJlZm9yZSh0aGlzLlRIRUFELHRoaXMuVEJPRFkpKSx0aGlzLkNPTEdST1VQPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigiY29sZ3JvdXAiKSx0aGlzLkNPTEdST1VQfHwodGhpcy5DT0xHUk9VUD1sLmNyZWF0ZUVsZW1lbnQoImNvbGdyb3VwIiksdGhpcy5UQUJMRS5pbnNl''@;'; put 'put ''cnRCZWZvcmUodGhpcy5DT0xHUk9VUCx0aGlzLlRIRUFEKSl9Y3JlYXRlU3ByZWFkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0IGQ7cmV0dXJuKCFhfHxhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFwbyhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5y''@;'; put 'put ''b290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5jbGFzc05hbWU9Ind0U3ByZWFkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksZC5hcHBlbmRDaGlsZChsKSksZC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIp''@;'; put 'put ''JiZ2byhkLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLGR9Y3JlYXRlSGlkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0IGQ7cmV0dXJuKCFhfHxhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFwbyhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290''@;'; put 'put ''RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5jbGFzc05hbWU9Ind0SGlkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksZC5hcHBlbmRDaGlsZChsKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGQsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSks''@;'; put 'put ''ZH1jcmVhdGVIb2xkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0IGQ7cmV0dXJuKCFhfHxhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFwbyhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5z''@;'; put 'put ''dHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGQuY2xhc3NOYW1lPSJ3dEhvbGRlciIsdm8oZCxbTjcoLTEpXSksYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSx0aGlzLmlzTWFzdGVyJiYoZC5wYXJlbnROb2RlLmNsYXNzTmFtZSs9Imh0X21hc3RlciBoYW5kc29udGFibGUiLGQucGFyZW50Tm9kZS5z''@;'; put 'put ''ZXRBdHRyaWJ1dGUoImRpciIsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJydGxNb2RlIik/InJ0bCI6Imx0ciIpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2byhkLnBhcmVudE5vZGUsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSkpLGQuYXBwZW5k''@;'; put 'put ''Q2hpbGQobCkpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2byhkLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLGR9ZHJhdygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7d3RTZXR0''@;'; put 'put ''aW5nczphfT10aGlzLHt3dE92ZXJsYXlzOmQsd3RWaWV3cG9ydDpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1hLmdldFNldHRpbmcoInRvdGFsUm93cyIpLHY9YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxNPWEuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLEQ9TS5sZW5ndGgsWj1h''@;'; put 'put ''LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKSxyZT1aLmxlbmd0aDtsZXQgY2U9bDtpZih0aGlzLmlzTWFzdGVyJiYoZC5iZWZvcmVEcmF3KCksdGhpcy5ob2xkZXJPZmZzZXQ9VTAodGhpcy5ob2xkZXIpLGNlPWguY3JlYXRlQ2FsY3VsYXRvcnMoY2UpLEQmJiFhLmdldFNldHRpbmcoImZp''@;'; put 'put ''eGVkQ29sdW1uc1N0YXJ0IikpKXtjb25zdCBFZT1kLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLEJlPXRoaXMuY29ycmVjdEhlYWRlcldpZHRoO3RoaXMuY29ycmVjdEhlYWRlcldpZHRoPTAhPT1FZSxCZSE9PXRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYoY2U9ITEp''@;'; put 'put ''fWlmKGNlKXRoaXMuaXNNYXN0ZXImJmQucmVmcmVzaCghMCk7ZWxzZXt0aGlzLnRhYmxlT2Zmc2V0PXRoaXMuaXNNYXN0ZXI/VTAodGhpcy5UQUJMRSk6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnBhcmVudFRhYmxlT2Zmc2V0O2NvbnN0IEVlPU1hdGgubWF4KHRoaXMuZ2V0Rmlyc3RSZW5kZXJl''@;'; put 'put ''ZFJvdygpLDApLEJlPU1hdGgubWF4KHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpLDApO3RoaXMucm93RmlsdGVyPW5ldyBNSmUoRWUsZixyZSksdGhpcy5jb2x1bW5GaWx0ZXI9bmV3IF9KZShCZSx2LEQpO2xldCBxZT0hMDtpZih0aGlzLmlzTWFzdGVyKXt0aGlzLmFsaWduT3Zlcmxh''@;'; put 'put ''eXNXaXRoVHJpbW1pbmdDb250YWluZXIoKTtjb25zdCBydD17fTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYmVmb3JlRHJhdyIsITAscnQpLHFlPSEwIT09cnQuc2tpcFJlbmRlcn1xZSYmKHRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKE0sWiksKHRo''@;'; put 'put ''aXMuaXMoSXApfHx0aGlzLmlzKEJtKSkmJnRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKE0sW10pLHRoaXMucmVzZXRPdmVyc2l6ZWRSb3dzKCksdGhpcy50YWJsZVJlbmRlcmVyLnNldEFjdGl2ZU92ZXJsYXlOYW1lKHRoaXMubmFtZSkuc2V0Vmlld3BvcnRT''@;'; put 'put ''aXplKHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSx0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCkpLnNldEZpbHRlcnModGhpcy5yb3dGaWx0ZXIsdGhpcy5jb2x1bW5GaWx0ZXIpLnJlbmRlcigpLHRoaXMuaXNNYXN0ZXImJnRoaXMubWFya092ZXJzaXplZENvbHVtbkhlYWRlcnMo''@;'; put 'put ''KSx0aGlzLmFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKSwodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyhJcCkpJiZ0aGlzLm1hcmtPdmVyc2l6ZWRSb3dzKCksdGhpcy5pc01hc3Rlcj8odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpfHxoLmNyZWF0''@;'; put 'put ''ZVZpc2libGVDYWxjdWxhdG9ycygpLGQucmVmcmVzaCghMSksZC5hcHBseVRvRE9NKCksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uRHJhdyIsITApKTp0aGlzLmlzKElwKSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNsb25lU291cmNlLnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNT''@;'; put 'put ''aXplKCkpfWxldCBiZT0hMTtyZXR1cm4gdGhpcy5pc01hc3RlciYmKGJlPWQudG9wT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxkLmJvdHRvbU92ZXJsYXkuY2xvbmUmJihiZT1kLmJvdHRvbU92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fGJlKSxiZT1kLmlubGluZVN0YXJ0T3Zl''@;'; put 'put ''cmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8YmUsZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLmJvdHRvbUlubGluZVN0YXJ0''@;'; put 'put ''Q29ybmVyT3ZlcmxheS5jbG9uZSYmZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCkpLGJlPyhkLnJlZnJlc2hBbGwoKSxkLmFkanVzdEVsZW1lbnRzU2l6ZSgpKTp0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc2VsZWN0aW9uTWFuYWdlci5zZXRBY3Rp''@;'; put 'put ''dmVPdmVybGF5KHRoaXMuZmFjYWRlR2V0dGVyKCkpLnJlbmRlcihjZSksdGhpcy5pc01hc3RlciYmZC5hZnRlckRyYXcoKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3QuZHJhd249ITAsdGhpc31tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIobCl7Y29uc3QgYT10aGlzLmNvbHVtbkZpbHRlci5y''@;'; put 'put ''ZW5kZXJlZFRvU291cmNlKGwpO2xldCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2NvbnN0IGg9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBmLHYsTTtjb25zdCBEPXRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJIZWlnaHQiKXx8W107Zm9yKDtkOylkLT0xLGY9dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoZCksdj10aGlzLmdldENvbHVtbkhlYWRlcihhLGQpLHYmJihNPW9fKHYpLCghZiYmaDxNfHxmPE0pJiYodGhpcy5kYXRhQWNjZXNz''@;'; put 'put ''T2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1NKSxBcnJheS5pc0FycmF5KEQpP251bGwhPURbZF0mJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPURbZF0pOmlzTmFOKEQpfHwodGhpcy5kYXRhQWNj''@;'; put 'put ''ZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1EKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPChEW2RdfHxEKSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENv''@;'; put 'put ''bHVtbkhlYWRlcnNbZF09RFtkXXx8RCkpfWFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMsYT10aGlzLlRIRUFELmNoaWxkTm9kZXMsZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzO2Zvcihs''@;'; put 'put ''ZXQgZj0wLHY9bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2Y8djtmKyspaWYoZFtmXSl7aWYoIWFbZl18fDA9PT1hW2ZdLmNoaWxkTm9kZXMubGVuZ3RoKXJldHVybjthW2ZdLmNoaWxkTm9kZXNbMF0uc3R5bGUuaGVpZ2h0PWAke2RbZl19cHhgfX1yZXNldE92ZXJzaXpl''@;'; put 'put ''ZFJvd3MoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3d0Vmlld3BvcnQ6YX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCh0aGlzLmlzTWFzdGVyfHx0aGlzLmlzKElwKSkmJiFsLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXtjb25zdCBkPXRoaXMuZ2V0UmVuZGVy''@;'; put 'put ''ZWRSb3dzQ291bnQoKTtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoaCk7YS5vdmVyc2l6ZWRSb3dzJiZhLm92ZXJzaXplZFJvd3NbZl0mJihhLm92ZXJzaXplZFJvd3NbZl09dm9pZCAwKX19fWdldENlbGwobCl7bGV0IGE9bC5y''@;'; put 'put ''b3csZD1sLmNvbDtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENlbGxDb29yZHMiLGEsZCwhdGhpcy5pc01hc3RlciwicmVuZGVyIik7aWYoaCYmQXJyYXkuaXNBcnJheShoKSYmKFthLGRdPWgpLHRoaXMuaXNSb3dCZWZvcmVSZW5kZXJlZFJvd3MoYSkp''@;'; put 'put ''cmV0dXJuLTE7aWYodGhpcy5pc1Jvd0FmdGVyUmVuZGVyZWRSb3dzKGEpKXJldHVybi0yO2lmKHRoaXMuaXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTM7aWYodGhpcy5pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGQpKXJldHVybi00O2NvbnN0IGY9dGhpcy5n''@;'; put 'put ''ZXRSb3coYSk7aWYoIWYmJmE+PTApdGhyb3cgbmV3IEVycm9yKCJUUiB3YXMgZXhwZWN0ZWQgdG8gYmUgcmVuZGVyZWQgYnV0IGlzIG5vdCIpO2NvbnN0IHY9Zi5jaGlsZE5vZGVzW3RoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihkKV07aWYo''@;'; put 'put ''IXYmJmQ+PTApdGhyb3cgbmV3IEVycm9yKCJURCBvciBUSCB3YXMgZXhwZWN0ZWQgdG8gYmUgcmVuZGVyZWQgYnV0IGlzIG5vdCIpO3JldHVybiB2fWdldFJvdyhsKXtsZXQgYT1udWxsLGQ9bnVsbDt2YXIgaCxmO3JldHVybiBsPDA/KGE9bnVsbD09PShoPXRoaXMucm93RmlsdGVyKXx8dm9p''@;'; put 'put ''ZCAwPT09aD92b2lkIDA6aC5zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCksZD10aGlzLlRIRUFEKTooYT1udWxsPT09KGY9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNvdXJjZVRvUmVuZGVyZWQobCksZD10aGlzLlRCT0RZKSx2b2lkIDAhPT1hJiZ2b2lk''@;'; put 'put ''IDAhPT1kJiYhKGQuY2hpbGROb2Rlcy5sZW5ndGg8YSsxKSYmZC5jaGlsZE5vZGVzW2FdfWdldENvbHVtbkhlYWRlcihsKXtjb25zdCBkPXRoaXMuVEhFQUQuY2hpbGROb2Rlc1thcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MF07cmV0dXJu''@;'; put 'put ''IGQ/LmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpXX1nZXRDb2x1bW5IZWFkZXJzKGwpe2NvbnN0IGE9W10sZD10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCk7''@;'; put 'put ''cmV0dXJuIHRoaXMuVEhFQUQuY2hpbGROb2Rlcy5mb3JFYWNoKGg9Pntjb25zdCBmPWguY2hpbGROb2Rlc1tkXTtmJiZhLnB1c2goZil9KSxhfWdldFJvd0hlYWRlcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtpZihh''@;'; put 'put ''Pj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aClyZXR1cm47Y29uc3QgaD10aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpLGY9aDwwP3RoaXMucm93RmlsdGVyLnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKTpoLE09KGg8MD90''@;'; put 'put ''aGlzLlRIRUFEOnRoaXMuVEJPRFkpLmNoaWxkTm9kZXNbZl07cmV0dXJuIE0/LmNoaWxkTm9kZXNbYV19Z2V0Um93SGVhZGVycyhsKXtjb25zdCBhPVtdLGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg7Zm9yKGxldCBoPTA7aDxkO2grKyl7Y29uc3Qg''@;'; put 'put ''Zj10aGlzLlRCT0RZLmNoaWxkTm9kZXNbdGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKV0sdj1mPy5jaGlsZE5vZGVzW2hdO3YmJmEucHVzaCh2KX1yZXR1cm4gYX1nZXRDb29yZHMobCl7bGV0IGE9bDtpZigiVEQiIT09YS5ub2RlTmFtZSYmIlRIIiE9PWEubm9kZU5hbWUmJihh''@;'; put 'put ''PVJtKGEsWyJURCIsIlRIIl0pKSxudWxsPT09YSlyZXR1cm4gbnVsbDtjb25zdCBkPWEucGFyZW50Tm9kZTtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPWQucGFyZW50Tm9kZTtsZXQgZj1QMmUoZCksdj1hLmNlbGxJbmRleDtPbShxNyxhLHRoaXMud3RSb290RWxlbWVudCl8fE9tKCQ3LGEs''@;'; put 'put ''dGhpcy53dFJvb3RFbGVtZW50KT8iVEhFQUQiPT09aC5ub2RlTmFtZSYmKGYtPWguY2hpbGROb2Rlcy5sZW5ndGgpOk9tKEJtLGEsdGhpcy53dFJvb3RFbGVtZW50KXx8T20oSXAsYSx0aGlzLnd0Um9vdEVsZW1lbnQpP2Y9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIp''@;'; put 'put ''LWguY2hpbGROb2Rlcy5sZW5ndGgrZjpoPT09dGhpcy5USEVBRD9mPXRoaXMucm93RmlsdGVyLnZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhmKTp0aGlzLnJvd0ZpbHRlciYmKGY9dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShmKSksT20ocTcsYSx0aGlzLnd0Um9vdEVs''@;'; put 'put ''ZW1lbnQpfHxPbShLNyxhLHRoaXMud3RSb290RWxlbWVudCl8fE9tKEJtLGEsdGhpcy53dFJvb3RFbGVtZW50KT92PXRoaXMuY29sdW1uRmlsdGVyLm9mZnNldHRlZFRIKHYpOnRoaXMuY29sdW1uRmlsdGVyJiYodj10aGlzLmNvbHVtbkZpbHRlci52aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9T''@;'; put 'put ''b3VyY2VDb2x1bW4odikpO2NvbnN0IE09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsZix2KTtyZXR1cm4gTSYmQXJyYXkuaXNBcnJheShNKSYmKFtmLHZdPU0pLHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoZix2KX1tYXJrT3ZlcnNpemVk''@;'; put 'put ''Um93cygpe2lmKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSlyZXR1cm47bGV0IGw9dGhpcy5UQk9EWS5jaGlsZE5vZGVzLmxlbmd0aDtjb25zdCBhPWwqdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hl''@;'; put 'put ''aWdodCgpLGQ9b18odGhpcy5UQk9EWSktMSxoPXRoaXMud290LnN0eWxlc0hhbmRsZXIuYXJlQ2VsbHNCb3JkZXJCb3goKSxmPWg/eHU6b18sdj1oPzA6MSxNPWg/MTowO2xldCBELFoscmUsY2UsYmU7aWYoYSE9PWR8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0''@;'; put 'put ''b20iKSlmb3IoO2w7KXtsLT0xLHJlPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCksRD10aGlzLmdldFJvd0hlaWdodChyZSksY2U9dGhpcy5nZXRUckZvclJvdyhyZSksYmU9Y2UucXVlcnlTZWxlY3RvcigidGgiKTtjb25zdCBFZT0wPT09cmU/TTowO1o9YmU/ZihiZSk6Zihj''@;'; put 'put ''ZSktdiwoIUQmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKTxaLUVlfHxEPFopJiYoaHx8KForPTEpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3NbcmVdPVopfX1nZXRUckZvclJvdyhsKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCldfWlzQ29sdW1uSGVhZGVyUmVuZGVyZWQobCl7aWYobD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO3JldHVy''@;'; put 'put ''biBNYXRoLmFicyhsKTw9ZH1pc1Jvd0hlYWRlclJlbmRlcmVkKGwpe2lmKGw+PTApcmV0dXJuITE7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnMobCk8PWR9aXNSb3dCZWZvcmVSZW5kZXJlZFJvd3MobCl7''@;'; put 'put ''Y29uc3QgYT10aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTtyZXR1cm4gbDwwJiZhPD0wPyF0aGlzLmlzUm93SGVhZGVyUmVuZGVyZWQobCk6bDxhfWlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MobCl7cmV0dXJuIGw+dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0NvbHVtbkJlZm9yZVJlbmRl''@;'; put 'put ''cmVkQ29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpO3JldHVybiBsPDAmJmE8PTA/IXRoaXMuaXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1ucyhsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJmw+''@;'; put 'put ''dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1pc0NvbHVtbkFmdGVyVmlld3BvcnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZsPnRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKX1pc1Jvd0FmdGVyVmlld3BvcnQobCl7cmV0dXJuIHRoaXMucm93RmlsdGVyJiZsPnRoaXMuZ2V0''@;'; put 'put ''TGFzdFZpc2libGVSb3coKX1pc0NvbHVtbkJlZm9yZVZpZXdwb3J0KGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKTwwJiZsPj0wfWlzTGFzdFJvd0Z1bGx5VmlzaWJsZSgpe3JldHVybiB0aGlzLmdldExhc3RWaXNpYmxl''@;'; put 'put ''Um93KCk9PT10aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzTGFzdENvbHVtbkZ1bGx5VmlzaWJsZSgpe3JldHVybiB0aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk9PT10aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWFsbFJvd3NJblZpZXdwb3J0KCl7cmV0dXJuIHRoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT09PXRoaXMuZ2V0VmlzaWJsZVJvd3NDb3VudCgpfWFsbENvbHVtbnNJblZpZXdwb3J0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKT09PXRoaXMuZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpfWdl''@;'; put 'put ''dFJvd0hlaWdodChsKXtyZXR1cm4gdGhpcy5yb3dVdGlscy5nZXRIZWlnaHQobCl9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldEhlYWRlckhlaWdodChsKX1nZXRDb2x1bW5XaWR0aChsKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRXaWR0''@;'; put 'put ''aChsKX1oYXNEZWZpbmVkU2l6ZSgpe3JldHVybiB0aGlzLmhhc1RhYmxlSGVpZ2h0JiZ0aGlzLmhhc1RhYmxlV2lkdGh9Z2V0V2lkdGgoKXtyZXR1cm4gc3UodGhpcy5UQUJMRSl9Z2V0SGVpZ2h0KCl7cmV0dXJuIHh1KHRoaXMuVEFCTEUpfWdldFRvdGFsV2lkdGgoKXtjb25zdCBsPXN1KHRo''@;'; put 'put ''aXMuaGlkZXIpO3JldHVybiAwIT09bD9sOnRoaXMuZ2V0V2lkdGgoKX1nZXRUb3RhbEhlaWdodCgpe2NvbnN0IGw9eHUodGhpcy5oaWRlcik7cmV0dXJuIDAhPT1sP2w6dGhpcy5nZXRIZWlnaHQoKX1pc1Zpc2libGUoKXtyZXR1cm4gVTcodGhpcy5UQUJMRSl9X21vZGlmeVJvd0hlYWRlcldp''@;'; put 'put ''ZHRoKGwpe2xldCBhPW1sKGwpP2woKTpudWxsO3JldHVybiBBcnJheS5pc0FycmF5KGEpPyhhPVsuLi5hXSxhW2EubGVuZ3RoLTFdPXRoaXMuX2NvcnJlY3RSb3dIZWFkZXJXaWR0aChhW2EubGVuZ3RoLTFdKSk6YT10aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgoYSksYX1fY29ycmVjdFJv''@;'; put 'put ''d0hlYWRlcldpZHRoKGwpe2xldCBhPWw7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBsJiYoYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIikpLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYoYSs9MSksYX19LE5mZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygp''@;'; put 'put ''e3JldHVybiAwPT09dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpPy0xOjB9LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygp''@;'; put 'put ''fSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJl''@;'; put 'put ''bmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIikpfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb2x1bW5IZWFkZXJzLmxlbmd0aH19O1RwKE5mZSwiTUlYSU5fTkFNRSIsInN0aWNreVJvd3NUb3AiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxl''@;'; put 'put ''OiExfSk7Y29uc3QgVmZlPU5mZSxCZmU9e2dldEZpcnN0UmVuZGVyZWRDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVtblJlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFj''@;'; put 'put ''Y2Vzc09iamVjdC5zdGFydENvbHVtblZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uUGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30s''@;'; put 'put ''Z2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uUmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uVmlzaWJsZTty''@;'; put 'put ''ZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRDb2x1bW5zUmVuZGVyZWR9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1Zpc2libGV9LGdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmpl''@;'; put 'put ''Y3Qucm93SGVhZGVycy5sZW5ndGh9fTtUcChCZmUsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkQ29sdW1ucyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBkSz1CZmU7Y2xhc3MgaEsgZXh0ZW5kcyBtX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLCQ3KX19''@;'; put 'put ''VGwoaEssVmZlKSxUbChoSyxkSyk7Y29uc3QgX1FlPWhLO2Z1bmN0aW9uIG5QKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90''@;'; put 'put ''IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgUEU9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gamZlKGMpe2NvbnN0e3d0U2V0dGluZ3M6bCxpbmxpbmVTdGFydE92ZXJsYXk6YSx3dFRhYmxlOmQsd3RWaWV3cG9ydDpoLHRvdGFsQ29sdW1uczpmLHJvb3RXaW5kb3c6dn09dGhpcy5kYXRhQWNj''@;'; put 'put ''ZXNzT2JqZWN0O2lmKGEubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT12KXtsZXQgRD1udWxsO2lmKGwuZ2V0U2V0dGluZygicnRsTW9kZSIpKXtjb25zdCByZT1kLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0Q9TWF0aC5hYnMocmUucmlnaHQtdGhpcy5kYXRhQWNjZXNzT2Jq''@;'; put 'put ''ZWN0LnJvb3RXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoKX1lbHNlIEQ9VTAoZC53dFJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0IFo9TWF0aC5hYnModyQodix2KSk7aWYoRD5aKXtjb25zdCByZT1DJCh2KTtsZXQgY2U9aC5nZXRSb3dIZWFkZXJXaWR0aCgpO2Zv''@;'; put 'put ''cihsZXQgYmU9MTtiZTw9ZjtiZSsrKWlmKGNlKz1hLnN1bUNlbGxTaXplcyhiZS0xLGJlKSxEK2NlLVo+PXJlKXtjPWJlLTI7YnJlYWt9fX1yZXR1cm4gY31mdW5jdGlvbiB6ZmUoYyl7Y29uc3R7dG9wT3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxSb3dzOmgscm9vdFdp''@;'; put 'put ''bmRvdzpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYobC5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWYpe2NvbnN0IHY9VTAoYS53dFJvb3RFbGVtZW50KSxNPU9PKGYsZik7aWYodi50b3A+TSl7Y29uc3QgRD1vXyhmKTtsZXQgWj1kLmdldENvbHVtbkhlYWRlckhlaWdodCgpO2Zv''@;'; put 'put ''cihsZXQgcmU9MTtyZTw9aDtyZSsrKWlmKForPWwuc3VtQ2VsbFNpemVzKHJlLTEscmUpLHYudG9wK1otTT49RCl7Yz1yZS0yO2JyZWFrfX19cmV0dXJuIGN9Y29uc3QgVFFlPWNsYXNzIEVRZXtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gd1FlKGMsbCl7KGZ1bmN0aW9uIENRZShjLGwpe2lm''@;'; put 'put ''KGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxQRSksZnVuY3Rpb24gU1FlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBNUWUo''@;'; put 'put ''Yyl7dmFyIGw9ZnVuY3Rpb24geFFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bH1zY3JvbGxWaWV3cG9ydChsLGEsZCl7aWYo''@;'; put 'put ''bC5jb2w8MHx8bC5yb3c8MClyZXR1cm4hMTtjb25zdCBoPXRoaXMuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobC5jb2wsYSksZj10aGlzLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLnJvdyxkKTtyZXR1cm4gaHx8Zn1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsKXtsZXQgYT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImF1dG8iO2NvbnN0e2RyYXduOmQsdG90YWxDb2x1bW5zOmh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZighZClyZXR1cm4hMTtjb25zdCBmPUZkKGEpO2lmKGw9dGhpcy5kYXRhQWNjZXNzT2Jq''@;'; put 'put ''ZWN0Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsbCxmKSwhTnVtYmVyLmlzSW50ZWdlcihsKXx8bDwwfHxsPmgpcmV0dXJuITE7YT1mLnZhbHVlO2NvbnN0e2ZpeGVkQ29sdW1uc1N0YXJ0OnYsaW5saW5lU3RhcnRPdmVybGF5Ok19''@;'; put 'put ''PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxEPSJhdXRvIj09PWE7aWYoRCYmbDx2KXJldHVybiExO2NvbnN0IFo9dGhpcy5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSxyZT10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk7bGV0IGNlPSExO3JldHVybihEJiYobDxafHxsPnJlKXx8IUQpJiYoY2U9''@;'; put 'put ''TS5zY3JvbGxUbyhsLEQ/bD49dGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpOiJlbmQiPT09YSkpLGNlfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImF1dG8i''@;'; put 'put ''O2NvbnN0e2RyYXduOmQsdG90YWxSb3dzOmh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZighZClyZXR1cm4hMTtjb25zdCBmPUZkKGEpO2lmKGw9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLGws''@;'; put 'put ''ZiksIU51bWJlci5pc0ludGVnZXIobCl8fGw8MHx8bD5oKXJldHVybiExO2E9Zi52YWx1ZTtjb25zdHtmaXhlZFJvd3NCb3R0b206dixmaXhlZFJvd3NUb3A6TSx0b3BPdmVybGF5OkR9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxaPSJhdXRvIj09PWE7aWYoWiYmKGw8TXx8bD5oLXYtMSkpcmV0''@;'; put 'put ''dXJuITE7Y29uc3QgcmU9dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSxjZT10aGlzLmdldExhc3RWaXNpYmxlUm93KCk7bGV0IGJlPSExO3JldHVybihaJiYobDxyZXx8bD5jZSl8fCFaKSYmKGJlPUQuc2Nyb2xsVG8obCxaP2w+PXRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKToi''@;'; put 'put ''Ym90dG9tIj09PWEpKSxiZX1nZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCl9Z2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gblAoUEUsdGhpcyx6ZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NP''@;'; put 'put ''YmplY3Qud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1''@;'; put 'put ''cm4gblAoUEUsdGhpcyx6ZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKX1nZXRGaXJzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxl''@;'; put 'put ''Q29sdW1uKCl9Z2V0TGFzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gblAoUEUsdGhpcyxqZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5k''@;'; put 'put ''YXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gblAoUEUsdGhpcyxqZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0UGFydGlh''@;'; put 'put ''bGx5VmlzaWJsZUNvbHVtbigpKX19O2Z1bmN0aW9uIFVmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRFFlKGMpe3ZhciBsPWZ1bmN0aW9uIElRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9''@;'; put 'put ''PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVy''@;'; put 'put ''KShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gdl8oYyxsKXty''@;'; put 'put ''ZXR1cm4gYy5nZXQoV2ZlKGMsbCkpfWZ1bmN0aW9uIFpmZShjLGwsYSl7cmV0dXJuIGMuc2V0KFdmZShjLGwpLGEpLGF9ZnVuY3Rpb24gV2ZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgX2c9bmV3IFdlYWtNYXA7Y2xhc3MgclB7Y29uc3RydWN0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRz''@;'; put 'put ''WzJdO1VmZSh0aGlzLCJyb3ciLG51bGwpLFVmZSh0aGlzLCJjb2wiLG51bGwpLGZ1bmN0aW9uIEFRZShjLGwsYSl7KGZ1bmN0aW9uIGtRZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdp''@;'; put 'put ''Y2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsX2csITEpLFpmZShfZyx0aGlzLGQpLHR5cGVvZiBsPCJ1IiYmdHlwZW9mIGE8InUiJiYodGhpcy5yb3c9bCx0aGlzLmNvbD1hKX1pc1ZhbGlkKGwpe2NvbnN0e2NvdW50Um93czphLGNvdW50Q29sczpkLGNvdW50Um93''@;'; put 'put ''SGVhZGVyczpoLGNvdW50Q29sSGVhZGVyczpmfT17Y291bnRSb3dzOjAsY291bnRDb2xzOjAsY291bnRSb3dIZWFkZXJzOjAsY291bnRDb2xIZWFkZXJzOjAsLi4ubH07cmV0dXJuISghTnVtYmVyLmlzSW50ZWdlcih0aGlzLnJvdyl8fCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuY29sKXx8dGhp''@;'; put 'put ''cy5yb3c8LWZ8fHRoaXMuY29sPC1ofHx0aGlzLnJvdz49YXx8dGhpcy5jb2w+PWQpfWlzRXF1YWwobCl7cmV0dXJuIGw9PT10aGlzfHx0aGlzLnJvdz09PWwucm93JiZ0aGlzLmNvbD09PWwuY29sfWlzSGVhZGVyKCl7cmV0dXJuIXRoaXMuaXNDZWxsKCl9aXNDZWxsKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''cm93Pj0wJiZ0aGlzLmNvbD49MH1pc1J0bCgpe3JldHVybiB2XyhfZyx0aGlzKX1pc1NvdXRoRWFzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49bC5yb3cmJih2XyhfZyx0aGlzKT90aGlzLmNvbDw9bC5jb2w6dGhpcy5jb2w+PWwuY29sKX1pc05vcnRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJv''@;'; put 'put ''dzw9bC5yb3cmJih2XyhfZyx0aGlzKT90aGlzLmNvbD49bC5jb2w6dGhpcy5jb2w8PWwuY29sKX1pc1NvdXRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49bC5yb3cmJih2XyhfZyx0aGlzKT90aGlzLmNvbD49bC5jb2w6dGhpcy5jb2w8PWwuY29sKX1pc05vcnRoRWFzdE9mKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLnJvdzw9bC5yb3cmJih2XyhfZyx0aGlzKT90aGlzLmNvbDw9bC5jb2w6dGhpcy5jb2w+PWwuY29sKX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5yb3c9bnVsbD09PXRoaXMucm93P3RoaXMucm93Ok1hdGgubWF4KHRoaXMucm93LDApLHRoaXMuY29sPW51bGw9PT10aGlzLmNvbD90''@;'; put 'put ''aGlzLmNvbDpNYXRoLm1heCh0aGlzLmNvbCwwKSx0aGlzfWFzc2lnbihsKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihsPy5yb3cpJiYodGhpcy5yb3c9bC5yb3cpLE51bWJlci5pc0ludGVnZXIobD8uY29sKSYmKHRoaXMuY29sPWwuY29sKSxsIGluc3RhbmNlb2YgclAmJlpmZShfZyx0aGlz''@;'; put 'put ''LGwuaXNSdGwoKSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgclAodGhpcy5yb3csdGhpcy5jb2wsdl8oX2csdGhpcykpfXRvT2JqZWN0KCl7cmV0dXJue3Jvdzp0aGlzLnJvdyxjb2w6dGhpcy5jb2x9fX1jb25zdCBpUD1yUDtmdW5jdGlvbiBmSyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g''@;'; put 'put ''T1FlKGMpe3ZhciBsPWZ1bmN0aW9uIFBRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy''@;'; put 'put ''biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gVTIoYyxsKXtyZXR1cm4gYy5nZXQoWWZlKGMsbCkpfWZ1bmN0aW9uIFlmZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIE5kPW5ldyBXZWFrTWFwO2NsYXNzIHBLe2NvbnN0cnVjdG9yKGwpe2xl''@;'; put 'put ''dCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmwsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYm''@;'; put 'put ''YXJndW1lbnRzWzNdO2ZLKHRoaXMsImhpZ2hsaWdodCIsbnVsbCksZksodGhpcywiZnJvbSIsbnVsbCksZksodGhpcywidG8iLG51bGwpLGZ1bmN0aW9uIFJRZShjLGwsYSl7KGZ1bmN0aW9uIExRZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFs''@;'; put 'put ''aXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsTmQsITEpLHRoaXMuaGlnaGxpZ2h0PWwuY2xvbmUoKSx0aGlzLmZyb209YS5jbG9uZSgpLHRoaXMudG89ZC5jbG9uZSgpLGZ1bmN0aW9uIEZRZShjLGwsYSl7''@;'; put 'put ''Yy5zZXQoWWZlKGMsbCksYSl9KE5kLHRoaXMsaCl9c2V0SGlnaGxpZ2h0KGwpe3JldHVybiB0aGlzLmhpZ2hsaWdodD1sLmNsb25lKCksdGhpc31zZXRGcm9tKGwpe3JldHVybiB0aGlzLmZyb209bC5jbG9uZSgpLHRoaXN9c2V0VG8obCl7cmV0dXJuIHRoaXMudG89bC5jbG9uZSgpLHRoaXN9''@;'; put 'put ''bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLHRoaXMuZnJvbS5ub3JtYWxpemUoKSx0aGlzLnRvLm5vcm1hbGl6ZSgpLHRoaXN9aXNWYWxpZChsKXtyZXR1cm4gdGhpcy5mcm9tLmlzVmFsaWQobCkmJnRoaXMudG8uaXNWYWxpZChsKX1pc1NpbmdsZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmlzU2luZ2xlQ2VsbCgpfHx0aGlzLmlzU2luZ2xlSGVhZGVyKCl9aXNTaW5nbGVDZWxsKCl7cmV0dXJuIHRoaXMuZnJvbS5yb3c+PTAmJnRoaXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhpcy5mcm9tLmNvbD49MCYmdGhpcy5mcm9tLmNvbD09PXRoaXMudG8uY29sfWlz''@;'; put 'put ''U2luZ2xlSGVhZGVyKCl7cmV0dXJuKHRoaXMuZnJvbS5yb3c8MHx8dGhpcy5mcm9tLmNvbDwwKSYmdGhpcy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0aGlzLmZyb20uY29sPT09dGhpcy50by5jb2x9aXNIZWFkZXIoKXtyZXR1cm4hKCF0aGlzLmZyb20uaXNIZWFkZXIoKXx8IXRoaXMudG8u''@;'; put 'put ''aXNIZWFkZXIoKSl8fHRoaXMuZnJvbS5jb2w8MCYmdGhpcy50by5jb2w8MHx8dGhpcy5mcm9tLnJvdzwwJiZ0aGlzLnRvLnJvdzwwfWNvbnRhaW5zSGVhZGVycygpe3JldHVybiB0aGlzLmZyb20uaXNIZWFkZXIoKXx8dGhpcy50by5pc0hlYWRlcigpfWdldE91dGVySGVpZ2h0KCl7cmV0dXJu''@;'; put 'put ''IE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLU1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpKzF9Z2V0T3V0ZXJXaWR0aCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKS1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8u''@;'; put 'put ''Y29sKSsxfWdldEhlaWdodCgpe2lmKHRoaXMuZnJvbS5yb3c8MCYmdGhpcy50by5yb3c8MClyZXR1cm4gMDtjb25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5yb3csMCksYT1NYXRoLm1heCh0aGlzLnRvLnJvdywwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0V2lk''@;'; put 'put ''dGgoKXtpZih0aGlzLmZyb20uY29sPDAmJnRoaXMudG8uY29sPDApcmV0dXJuIDA7Y29uc3QgbD1NYXRoLm1heCh0aGlzLmZyb20uY29sLDApLGE9TWF0aC5tYXgodGhpcy50by5jb2wsMCk7cmV0dXJuIE1hdGgubWF4KGwsYSktTWF0aC5taW4obCxhKSsxfWdldENlbGxzQ291bnQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5nZXRXaWR0aCgpKnRoaXMuZ2V0SGVpZ2h0KCl9aW5jbHVkZXMobCl7Y29uc3R7cm93OmEsY29sOmR9PWwsaD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxmPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4gaC5yb3c8PWEmJmYucm93Pj1hJiZoLmNv''@;'; put 'put ''bDw9ZCYmZi5jb2w+PWR9aW5jbHVkZXNSYW5nZShsKXtyZXR1cm4gdGhpcy5pbmNsdWRlcyhsLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSkmJnRoaXMuaW5jbHVkZXMobC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpKX1pc0VxdWFsKGwpe3JldHVybiBNYXRoLm1pbih0aGlzLmZyb20ucm93''@;'; put 'put ''LHRoaXMudG8ucm93KT09PU1hdGgubWluKGwuZnJvbS5yb3csbC50by5yb3cpJiZNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgubWF4KGwuZnJvbS5yb3csbC50by5yb3cpJiZNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWluKGwu''@;'; put 'put ''ZnJvbS5jb2wsbC50by5jb2wpJiZNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWF4KGwuZnJvbS5jb2wsbC50by5jb2wpfW92ZXJsYXBzKGwpe3JldHVybiBsLmlzU291dGhFYXN0T2YodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSkmJmwuaXNOb3J0aFdl''@;'; put 'put ''c3RPZih0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSl9aXNTb3V0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGwpfWlzTm9y''@;'; put 'put ''dGhXZXN0T2YobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihsKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihsKX1pc092ZXJsYXBwaW5nSG9yaXpvbnRhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVy''@;'; put 'put ''VG9wRW5kQ29ybmVyKCkuY29sPj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2wmJnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2w8PWwuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2x8fHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcEVu''@;'; put 'put ''ZENvcm5lcigpLmNvbCYmdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sPj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2x9aXNPdmVybGFwcGluZ1ZlcnRpY2FsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRv''@;'; put 'put ''cFJpZ2h0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvd3x8dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLnJvdzw9bC5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93JiZ0aGlz''@;'; put 'put ''LmdldE91dGVyVG9wRW5kQ29ybmVyKCkucm93Pj1sLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5yb3d9ZXhwYW5kKGwpe2NvbnN0IGE9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksZD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuKGwucm93PGEucm93fHxsLmNv''@;'; put 'put ''bDxhLmNvbHx8bC5yb3c+ZC5yb3d8fGwuY29sPmQuY29sKSYmKHRoaXMuZnJvbT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKGEucm93LGwucm93KSxNYXRoLm1pbihhLmNvbCxsLmNvbCkpLHRoaXMudG89dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChkLnJvdyxsLnJv''@;'; put 'put ''dyksTWF0aC5tYXgoZC5jb2wsbC5jb2wpKSwhMCl9ZXhwYW5kQnlSYW5nZShsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2lmKHRoaXMuaW5jbHVkZXNSYW5nZShsKXx8IXRoaXMub3ZlcmxhcHMobCkpcmV0dXJuITE7''@;'; put 'put ''Y29uc3QgZD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxoPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxmPXRoaXMuZ2V0RGlyZWN0aW9uKCksdj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxNPWwuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxEPU1hdGgubWluKGQu''@;'; put 'put ''cm93LHYucm93KSxaPU1hdGgubWluKGQuY29sLHYuY29sKSxyZT1NYXRoLm1heChoLnJvdyxNLnJvdyksY2U9TWF0aC5tYXgoaC5jb2wsTS5jb2wpLGJlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoRCxaKSxFZT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKHJlLGNlKTtyZXR1cm4gdGhpcy5mcm9t''@;'; put 'put ''PWJlLHRoaXMudG89RWUsdGhpcy5zZXREaXJlY3Rpb24oZiksYSYmKHRoaXMuaGlnaGxpZ2h0LnJvdz09PXRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvdyYmIk4tUyI9PT10aGlzLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJnRoaXMuZmxpcERpcmVjdGlvblZlcnRpY2FsbHko''@;'; put 'put ''KSx0aGlzLmhpZ2hsaWdodC5jb2w9PT10aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5jb2wmJiJXLUUiPT09dGhpcy5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJnRoaXMuZmxpcERpcmVjdGlvbkhvcml6b250YWxseSgpKSwhMH1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9t''@;'; put 'put ''LmlzTm9ydGhXZXN0T2YodGhpcy50byk/Ik5XLVNFIjp0aGlzLmZyb20uaXNOb3J0aEVhc3RPZih0aGlzLnRvKT8iTkUtU1ciOnRoaXMuZnJvbS5pc1NvdXRoRWFzdE9mKHRoaXMudG8pPyJTRS1OVyI6dGhpcy5mcm9tLmlzU291dGhXZXN0T2YodGhpcy50byk/IlNXLU5FIjp2b2lkIDB9c2V0''@;'; put 'put ''RGlyZWN0aW9uKGwpe3N3aXRjaChsKXtjYXNlIk5XLVNFIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpXTticmVhaztjYXNlIk5FLVNXIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdl''@;'; put 'put ''dE91dGVyVG9wUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNFLU5XIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpXTticmVhaztj''@;'; put 'put ''YXNlIlNXLU5FIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpXX19Z2V0VmVydGljYWxEaXJlY3Rpb24oKXtyZXR1cm5bIk5FLVNXIiwiTlctU0UiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0''@;'; put 'put ''aW9uKCkpPi0xPyJOLVMiOiJTLU4ifWdldEhvcml6b250YWxEaXJlY3Rpb24oKXtyZXR1cm5bIk5XLVNFIiwiU1ctTkUiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJXLUUiOiJFLVcifWZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9u''@;'; put 'put ''KCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0''@;'; put 'put ''aW9uKCJOVy1TRSIpfX1mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''U0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpfX1nZXRUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cp''@;'; put 'put ''LE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0VG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRUb3BTdGFydENvcm5lcigpfWdldEJvdHRvbUVuZENvcm5lcigpe3JldHVybiB0''@;'; put 'put ''aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRCb3R0b21SaWdodENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldEJvdHRvbVN0''@;'; put 'put ''YXJ0Q29ybmVyKCk6dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKX1nZXRUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFs''@;'; put 'put ''aXplKCl9Z2V0VG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gVTIoTmQsdGhpcyk/dGhpcy5nZXRUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0VG9wRW5kQ29ybmVyKCl9Z2V0Qm90dG9tU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20u''@;'; put 'put ''cm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tTGVmdENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldEJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKX1nZXRP''@;'; put 'put ''dXRlclRvcFN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wTGVmdENvcm5lcigpe3JldHVybiBVMihOZCx0aGlz''@;'; put 'put ''KT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlz''@;'; put 'put ''LmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCl9Z2V0T3V0ZXJUb3BFbmRDb3JuZXIoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJUb3BSaWdodENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3Ju''@;'; put 'put ''ZXIoKTp0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1n''@;'; put 'put ''ZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gVTIoTmQsdGhpcyk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpfWlzQ29ybmVyKGwpe3JldHVybiBsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIo''@;'; put 'put ''KSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1nZXRPcHBvc2l0ZUNvcm5lcihsKXtyZXR1cm4gbCBp''@;'; put 'put ''bnN0YW5jZW9mIGlQJiYobC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKT90aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk6bC5pc0Vx''@;'; put 'put ''dWFsKHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dm9pZCAwKX1nZXRCb3JkZXJzU2hhcmVkV2l0''@;'; put 'put ''aChsKXtpZighdGhpcy5pbmNsdWRlc1JhbmdlKGwpKXJldHVybltdO2NvbnN0IGFfdG9wPU1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLGFfYm90dG9tPU1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLGFfbGVmdD1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRo''@;'; put 'put ''aXMudG8uY29sKSxhX3JpZ2h0PU1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLGRfdG9wPU1hdGgubWluKGwuZnJvbS5yb3csbC50by5yb3cpLGRfYm90dG9tPU1hdGgubWF4KGwuZnJvbS5yb3csbC50by5yb3cpLGRfbGVmdD1NYXRoLm1pbihsLmZyb20uY29sLGwudG8uY29s''@;'; put 'put ''KSxkX3JpZ2h0PU1hdGgubWF4KGwuZnJvbS5jb2wsbC50by5jb2wpLGg9W107cmV0dXJuIGFfdG9wPT09ZF90b3AmJmgucHVzaCgidG9wIiksYV9yaWdodD09PWRfcmlnaHQmJmgucHVzaChVMihOZCx0aGlzKT8ibGVmdCI6InJpZ2h0IiksYV9ib3R0b209PT1kX2JvdHRvbSYmaC5wdXNoKCJi''@;'; put 'put ''b3R0b20iKSxhX2xlZnQ9PT1kX2xlZnQmJmgucHVzaChVMihOZCx0aGlzKT8icmlnaHQiOiJsZWZ0IiksaH1nZXRJbm5lcigpe2NvbnN0IGw9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZD1bXTtmb3IobGV0IGg9bC5yb3c7''@;'; put 'put ''aDw9YS5yb3c7aCsrKWZvcihsZXQgZj1sLmNvbDtmPD1hLmNvbDtmKyspKHRoaXMuZnJvbS5yb3chPT1ofHx0aGlzLmZyb20uY29sIT09ZikmJih0aGlzLnRvLnJvdyE9PWh8fHRoaXMudG8uY29sIT09ZikmJmQucHVzaCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpO3JldHVybiBkfWdl''@;'; put 'put ''dEFsbCgpe2NvbnN0IGw9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZD1bXTtmb3IobGV0IGg9bC5yb3c7aDw9YS5yb3c7aCsrKWZvcihsZXQgZj1sLmNvbDtmPD1hLmNvbDtmKyspZC5wdXNoKGwucm93PT09aCYmbC5jb2w9''@;'; put 'put ''PT1mP2w6YS5yb3c9PT1oJiZhLmNvbD09PWY/YTp0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpO3JldHVybiBkfWZvckFsbChsKXtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgaD1hLnJvdzto''@;'; put 'put ''PD1kLnJvdztoKyspZm9yKGxldCBmPWEuY29sO2Y8PWQuY29sO2YrKylpZighMT09PWwoaCxmKSlyZXR1cm59Y2xvbmUoKXtyZXR1cm4gbmV3IHBLKHRoaXMuaGlnaGxpZ2h0LHRoaXMuZnJvbSx0aGlzLnRvLFUyKE5kLHRoaXMpKX10b09iamVjdCgpe3JldHVybntmcm9tOnRoaXMuZnJvbS50''@;'; put 'put ''b09iamVjdCgpLHRvOnRoaXMudG8udG9PYmplY3QoKX19X2NyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gbmV3IGlQKGwsYSxVMihOZCx0aGlzKSl9fWNvbnN0IGdLPXBLO2Z1bmN0aW9uIFoyKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBIUWUoYyl7dmFyIGw9ZnVuY3Rpb24gTlFlKGMs''@;'; put 'put ''bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0''@;'; put 'put ''b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh''@;'; put 'put ''bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBtS3tnZXQgZXZlbnRNYW5hZ2VyKCl7cmV0dXJuIG5ldyBqMih0aGlzKX1jb25zdHJ1Y3RvcihsLGEpe1oyKHRoaXMsInd0VGFibGUiLHZvaWQgMCksWjIodGhpcywid3RTY3Jv''@;'; put 'put ''bGwiLHZvaWQgMCksWjIodGhpcywid3RWaWV3cG9ydCIsdm9pZCAwKSxaMih0aGlzLCJ3dE92ZXJsYXlzIix2b2lkIDApLFoyKHRoaXMsInNlbGVjdGlvbk1hbmFnZXIiLHZvaWQgMCksWjIodGhpcywid3RFdmVudCIsdm9pZCAwKSxaMih0aGlzLCJndWlkIixgd3RfJHtoJCgpfWApLFoyKHRo''@;'; put 'put ''aXMsImRyYXdJbnRlcnJ1cHRlZCIsITEpLFoyKHRoaXMsImRyYXduIiwhMSksWjIodGhpcywiYWN0aXZlT3ZlcmxheU5hbWUiLCJtYXN0ZXIiKSxaMih0aGlzLCJkb21CaW5kaW5ncyIsdm9pZCAwKSxaMih0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZG9tQmluZGluZ3M9e3Jvb3RU''@;'; put 'put ''YWJsZTpsLHJvb3REb2N1bWVudDpsLm93bmVyRG9jdW1lbnQscm9vdFdpbmRvdzpsLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LHRoaXMud3RTZXR0aW5ncz1hLHRoaXMud3RTY3JvbGw9bmV3IFRRZSh0aGlzLmNyZWF0ZVNjcm9sbERhbygpKX1maW5kT3JpZ2luYWxIZWFkZXJzKCl7Y29u''@;'; put 'put ''c3QgbD1bXTtpZih0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlcy5sZW5ndGgmJnRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoKXtmb3IobGV0IGE9MCxkPXRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3Ro''@;'; put 'put ''O2E8ZDthKyspbC5wdXNoKHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbYV0uaW5uZXJIVE1MKTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aHx8dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgiY29sdW1uSGVhZGVycyIs''@;'; put 'put ''W2Z1bmN0aW9uKGEsZCl7UG0oZCxsW2FdKX1dKX19Y3JlYXRlQ2VsbENvb3JkcyhsLGEpe3JldHVybiBuZXcgaVAobCxhLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIikpfWNyZWF0ZUNlbGxSYW5nZShsLGEsZCl7cmV0dXJuIG5ldyBnSyhsLGEsZCx0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygicnRsTW9kZSIpKX1kcmF3KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5kcmF3SW50ZXJydXB0ZWQ9ITEsIXRoaXMud3RUYWJsZS5pc1Zpc2libGUoKXx8VjJlKHRoaXMud3RU''@;'; put 'put ''YWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpP3RoaXMuZHJhd0ludGVycnVwdGVkPSEwOnRoaXMud3RUYWJsZS5kcmF3KGwpLHRoaXN9Z2V0Q2VsbChsKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pKXJldHVybiB0aGlz''@;'; put 'put ''Lnd0VGFibGUuZ2V0Q2VsbChsKTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSx2PXRo''@;'; put 'put ''aXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO2lmKGwucm93PGgmJmwuY29sPHYpcmV0dXJuIHRoaXMud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwucm93PGgpcmV0dXJuIHRoaXMu''@;'; put 'put ''d3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLmNvbDx2JiZsLnJvdz49ZC1mKXtpZih0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVy''@;'; put 'put ''bGF5LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKX1lbHNle2lmKGwuY29sPHYpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRD''@;'; put 'put ''ZWxsKGwpO2lmKGwucm93PGQmJmwucm93Pj1kLWYmJnRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5JiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpfXJldHVy''@;'; put 'put ''biB0aGlzLnd0VGFibGUuZ2V0Q2VsbChsKX1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnQobCxhLGQpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnRIb3Jpem9u''@;'; put 'put ''dGFsbHkobCxhKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKXtyZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKX1nZXRWaWV3cG9ydCgpe3JldHVyblt0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCksdGhpcy53dFRhYmxlLmdldEZp''@;'; put 'put ''cnN0VmlzaWJsZUNvbHVtbigpLHRoaXMud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpLHRoaXMud3RUYWJsZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpXX1kZXN0cm95KCl7dGhpcy53dE92ZXJsYXlzLmRlc3Ryb3koKSx0aGlzLnd0RXZlbnQuZGVzdHJveSgpfWNyZWF0ZVNjcm9sbERhbygp''@;'; put 'put ''e2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IGRyYXduKCl7cmV0dXJuIGwuZHJhd259LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdl''@;'; put 'put ''dCB3dFRhYmxlKCl7cmV0dXJuIGwud3RUYWJsZX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gbC53dFZpZXdwb3J0fSxnZXQgd3RTZXR0aW5ncygpe3JldHVybiBsLnd0U2V0dGluZ3N9LGdldCByb290V2luZG93KCl7cmV0dXJuIGwuZG9tQmluZGluZ3Mucm9vdFdpbmRvd30sZ2V0IHRvdGFs''@;'; put 'put ''Um93cygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIil9LGdldCB0b3RhbENvbHVtbnMoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpfSxnZXQgZml4ZWRSb3dzVG9wKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0''@;'; put 'put ''aW5nKCJmaXhlZFJvd3NUb3AiKX0sZ2V0IGZpeGVkUm93c0JvdHRvbSgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIil9LGdldCBmaXhlZENvbHVtbnNTdGFydCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3Rh''@;'; put 'put ''cnQiKX19fWdldFRhYmxlRGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGx9LGdldCBwYXJlbnRUYWJsZU9mZnNldCgpe3JldHVybiBsLmNsb25lU291cmNlLnd0VGFibGUudGFibGVPZmZzZXR9LGdldCBjbG9uZVNvdXJjZSgpe3JldHVybiBsLmNsb25lU291cmNl''@;'; put 'put ''fSxnZXQgd29ya3NwYWNlV2lkdGgoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9LGdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gbC53dE92ZXJsYXlzfSxnZXQgc2VsZWN0aW9uTWFuYWdlcigpe3Jl''@;'; put 'put ''dHVybiBsLnNlbGVjdGlvbk1hbmFnZXJ9LGdldCBzdHlsZXNIYW5kbGVyKCl7cmV0dXJuIGwuc3R5bGVzSGFuZGxlcn0sZ2V0IGRyYXduKCl7cmV0dXJuIGwuZHJhd259LHNldCBkcmF3bihhKXtsLmRyYXduPWF9LGdldCB3dFRhYmxlKCl7cmV0dXJuIGwud3RUYWJsZX0sZ2V0IHN0YXJ0Q29s''@;'; put 'put ''dW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgc3RhcnRDb2x1bW5WaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBzdGFydENv''@;'; put 'put ''bHVtblBhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IGVuZENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5lbmRDb2x1''@;'; put 'put ''bW59LGdldCBlbmRDb2x1bW5WaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgZW5kQ29sdW1uUGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxh''@;'; put 'put ''dG9yLmVuZENvbHVtbn0sZ2V0IGNvdW50Q29sdW1uc1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvdW50Q29sdW1uc1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5j''@;'; put 'put ''b3VudH0sZ2V0IHN0YXJ0Um93UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgc3RhcnRSb3dWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBzdGFydFJv''@;'; put 'put ''d1BhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IGVuZFJvd1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBlbmRSb3dWaXNp''@;'; put 'put ''YmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93fSxnZXQgZW5kUm93UGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGNvdW50Um93c1JlbmRlcmVk''@;'; put 'put ''KCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvdW50Um93c1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvbHVtbkhlYWRlcnMoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdl''@;'; put 'put ''dFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKX0sZ2V0IHJvd0hlYWRlcnMoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKX19fX1mdW5jdGlvbiBHZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFZRZShjKXt2YXIgbD1mdW5jdGlvbiBCUWUoYyxsKXtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0''@;'; put 'put ''aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGpRZSBleHRlbmRzIG1Le2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcihsLGEpLEdmZSh0aGlzLCJjbG9uZVNvdXJjZSIsdm9pZCAwKSxHZmUodGhpcywiY2xvbmVPdmVybGF5Iix2b2lkIDAp''@;'; put 'put ''O2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZhY2FkZSIsdGhpcyk7dGhpcy5jbG9uZVNvdXJjZT1kLnNvdXJjZSx0aGlzLmNsb25lT3ZlcmxheT1kLm92ZXJsYXksdGhpcy5zdHlsZXNIYW5kbGVyPWQuc3R5bGVzSGFuZGxlcix0aGlzLnd0VGFibGU9dGhpcy5jbG9uZU92''@;'; put 'put ''ZXJsYXkuY3JlYXRlVGFibGUodGhpcy5nZXRUYWJsZURhbygpLGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1kLnZpZXdwb3J0LHRoaXMuc2VsZWN0aW9uTWFuYWdlcj1kLnNlbGVjdGlvbk1hbmFnZXIsdGhpcy53dEV2ZW50PW5ldyBFZmUoaCx0''@;'; put 'put ''aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyLGQuZXZlbnQpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfX1jbGFzcyBGRXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpeyhmdW5jdGlvbiB6''@;'; put 'put ''UWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFVRZShjKXt2YXIgbD1mdW5jdGlvbiBaUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIp''@;'; put 'put ''O2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wi''@;'; put 'put ''PT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywid3RTZXR0aW5ncyIsbnVsbCksVHAodGhpcywid290IixsLHt3cml0YWJs''@;'; put 'put ''ZTohMX0pLHRoaXMuZG9tQmluZGluZ3M9Zix0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RTZXR0aW5ncz1oO2NvbnN0e1RBQkxFOnYsaGlkZXI6TSxzcHJlYWRlcjpELGhvbGRlcjpaLHd0Um9vdEVsZW1lbnQ6cmV9PXRoaXMud290Lnd0VGFibGU7dGhpcy5pbnN0YW5jZT10aGlzLndvdCx0''@;'; put 'put ''aGlzLnR5cGU9ZCx0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PW51bGwsdGhpcy5UQUJMRT12LHRoaXMuaGlkZXI9TSx0aGlzLnNwcmVhZGVyPUQsdGhpcy5ob2xkZXI9Wix0aGlzLnd0Um9vdEVsZW1lbnQ9cmUsdGhpcy50cmltbWluZ0NvbnRhaW5lcj1hXyh0aGlzLmhpZGVyLnBh''@;'; put 'put ''cmVudE5vZGUucGFyZW50Tm9kZSksdGhpcy5uZWVkRnVsbFJlbmRlcj10aGlzLnNob3VsZEJlUmVuZGVyZWQoKSx0aGlzLmNsb25lPXRoaXMubWFrZUNsb25lKCl9aGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCl7cmV0dXJuIHRoaXMubmVlZEZ1bGxSZW5kZXIhPT10aGlzLnNob3VsZEJlUmVu''@;'; put 'put ''ZGVyZWQoKX11cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKGwpeyJiZWZvcmUiPT09bCYmdGhpcy5zaG91bGRCZVJlbmRlcmVkKCk/dGhpcy5uZWVkRnVsbFJlbmRlcj0hMDoiYWZ0ZXIiPT09bCYmIXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpJiYodGhpcy5uZWVkRnVsbFJlbmRlcj0hMSl9c2hvdWxk''@;'; put 'put ''QmVSZW5kZXJlZCgpe3JldHVybiEwfXVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCl7dGhpcy50cmltbWluZ0NvbnRhaW5lcj1hXyh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx7''@;'; put 'put ''cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/dGhpcy53b3Qud3RUYWJs''@;'; put 'put ''ZS5ob2xkZXI6eUUobC5UQUJMRSl9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb24obCxhLGQpe2lmKCExPT09dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5jb250YWlucyhsKSlyZXR1cm4gdm9pZCBpbChgVGhlIHByb3ZpZGVkIGVsZW1lbnQgaXMgbm90IGEgY2hpbGQgb2YgdGhlICR7dGhpcy50''@;'; put 'put ''eXBlfSBvdmVybGF5YCk7Y29uc3QgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGY9ZDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSx2PWE8dGhpcy53dFNldHRpbmdzLmdldFNldHRp''@;'; put 'put ''bmcoImZpeGVkUm93c1RvcCIpLE09YT49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxEPXRoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlcixaPXtzdGFydDp0aGlzLmdldFJlbGF0aXZl''@;'; put 'put ''U3RhcnRQb3NpdGlvbihEKSx0b3A6RC5vZmZzZXRUb3B9LHJlPXtzdGFydDp0aGlzLmdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihsKSx0b3A6bC5vZmZzZXRUb3B9O2xldCBjZT1udWxsO3JldHVybiBjZT1oP3RoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5XaW5kb3codixmLHJl''@;'; put 'put ''LFopOnRoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xkZXIodixNLGYscmUsWiksY2V9Z2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpe3JldHVybiB0aGlzLmlzUnRsKCk/bC5vZmZzZXRQYXJlbnQub2Zmc2V0V2lkdGgtbC5vZmZzZXRMZWZ0LWwub2Zmc2V0V2lkdGg6bC5v''@;'; put 'put ''ZmZzZXRMZWZ0fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCB2PTAsTT0wO2lmKGEpe2xldCBEPWYubGVmdDt0aGlzLmlzUnRsKCkmJihE''@;'; put 'put ''PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdy5pbm5lcldpZHRoLShmLmxlZnQrZi53aWR0aCtmMCgpKSksdj1EPD0wPy0xKkQ6MH1lbHNlIHY9aC5zdGFydDtyZXR1cm4gTT1sP3RoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtZi50b3A6aC50''@;'; put 'put ''b3Ase3N0YXJ0OmQuc3RhcnQrdix0b3A6ZC50b3ArTX19Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xkZXIobCxhLGQsaCxmKXtjb25zdCB2X2hvcml6b250YWw9dGhpcy53b3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSx2X3ZlcnRp''@;'; put 'put ''Y2FsPXRoaXMud290Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpO2xldCBNPTAsRD0wO2lmKGR8fChNPXZfaG9yaXpvbnRhbC1mLnN0YXJ0KSxhKXtjb25zdCBaPXRoaXMud290Lnd0VGFibGUud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtE''@;'; put 'put ''PS0xKnRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ArWi50b3B9ZWxzZSBsfHwoRD12X3ZlcnRpY2FsLWYudG9wKTtyZXR1cm57c3RhcnQ6aC5zdGFydC1NLHRvcDpoLnRvcC1EfX1tYWtlQ2xvbmUoKXtpZigtMT09PUhmZS5pbmRleE9mKHRoaXMu''@;'; put 'put ''dHlwZSkpdGhyb3cgbmV3IEVycm9yKGBDbG9uZSB0eXBlICIke3RoaXMudHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7Y29uc3R7d3RUYWJsZTpsLHd0U2V0dGluZ3M6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyxmPWQuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgiZGl2Iiksdj1kLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksTT1sLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtmLmNsYXNzTmFtZT1gJHtwUWUuZ2V0KHRoaXMudHlwZSl9IGhhbmRzb250YWJsZWAsZi5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5pc1J0bCgpPyJydGwiOiJsdHIi''@;'; put 'put ''KSxmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS50b3A9MCxmLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLmlzUnRsKCk/Zi5zdHlsZS5yaWdodD0wOmYuc3R5bGUubGVmdD0wLGEuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdm8oZixbWyJyb2xlIiwicHJlc2VudGF0''@;'; put 'put ''aW9uIl1dKSx2LmNsYXNzTmFtZT1sLlRBQkxFLmNsYXNzTmFtZSxsLlRBQkxFLmdldEF0dHJpYnV0ZSgicm9sZSIpJiZ2LnNldEF0dHJpYnV0ZSgicm9sZSIsbC5UQUJMRS5nZXRBdHRyaWJ1dGUoInJvbGUiKSksZi5hcHBlbmRDaGlsZCh2KSxNLmFwcGVuZENoaWxkKGYpO2NvbnN0IFo9dGhp''@;'; put 'put ''cy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PSEwPT09Wnx8Imhvcml6b250YWwiPT09WiYmdGhpcy50eXBlPT09JDd8fCJ2ZXJ0aWNhbCI9PT1aJiZ0aGlzLnR5cGU9PT1LNz9oOiJoaWRkZW4i''@;'; put 'put ''PT09aC5nZXRDb21wdXRlZFN0eWxlKE0pLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6eUUobC5UQUJMRSksbmV3IGpRZSh2LHRoaXMud3RTZXR0aW5ncyx7c291cmNlOnRoaXMud290LG92ZXJsYXk6dGhpcyx2aWV3cG9ydDp0aGlzLndvdC53dFZpZXdwb3J0LGV2ZW50''@;'; put 'put ''OnRoaXMud290Lnd0RXZlbnQsc2VsZWN0aW9uTWFuYWdlcjp0aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyLHN0eWxlc0hhbmRsZXI6dGhpcy53b3Quc3R5bGVzSGFuZGxlcn0pfXJlZnJlc2goKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1l''@;'; put 'put ''bnRzWzBdO2lmKHRoaXMubmVlZEZ1bGxSZW5kZXIpe2NvbnN0IGE9dGhpcy5jbG9uZS5jbG9uZVNvdXJjZTthLmFjdGl2ZU92ZXJsYXlOYW1lPXRoaXMuY2xvbmUud3RUYWJsZS5uYW1lLHRoaXMuY2xvbmUuZHJhdyhsKSxhLmFjdGl2ZU92ZXJsYXlOYW1lPSJtYXN0ZXIifX1yZXNldCgpe2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlcjtbbC5zdHlsZSx0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUsbC5wYXJlbnROb2RlLnN0eWxlXS5mb3JFYWNoKHY9Pnt2LndpZHRoPSIiLHYuaGVpZ2h0PSIifSl9aXNSdGwoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoInJ0bE1vZGUiKX1kZXN0cm95KCl7dGhpcy5jbG9uZS5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1jb25zdCB2Sz1jPT57Y29uc3QgbD1jLnN0eWxlc0hhbmRsZXI7aWYobC5pc0NsYXNzaWNUaGVtZSgpKXJldHVybiBPYmplY3QuZnJlZXplKHt3aWR0aDo2LGhlaWdodDo2LGJvcmRl''@;'; put 'put ''cldpZHRoOjEsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJDb2xvcjoiI0ZGRiJ9KTtjb25zdCBhPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1zaXplIiksZD1sLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtYXV0b2ZpbGwtYm9yZGVyLXdpZHRoIiksaD1sLmdldENT''@;'; put 'put ''U1ZhcmlhYmxlVmFsdWUoImNlbGwtYXV0b2ZpbGwtYm9yZGVyLWNvbG9yIik7cmV0dXJuIE9iamVjdC5mcmVlemUoe3dpZHRoOmEsaGVpZ2h0OmEsYm9yZGVyV2lkdGg6ZCxib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOmh9KX07Y2xhc3MgJFFlIGV4dGVuZHMgRkV7Y29uc3RydWN0''@;'; put 'put ''b3IobCxhLGQsaCl7c3VwZXIobCxhLCQ3LGQsaCksZnVuY3Rpb24gV1FlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZUWUoYyl7dmFyIGw9ZnVuY3Rpb24gR1FlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYo''@;'; put 'put ''dm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmlu''@;'; put 'put ''ZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2Fj''@;'; put 'put ''aGVkRml4ZWRSb3dzVG9wIiwtMSksdGhpcy5jYWNoZWRGaXhlZFJvd3NUb3A9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1''@;'; put 'put ''bWVudHNbZF07cmV0dXJuIG5ldyBfUWUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy5zaG91''@;'; put 'put ''bGRCZVJlbmRlcmVkKCl8fCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGlu''@;'; put 'put ''ZygicHJldmVudE92ZXJmbG93Iik7bGV0IGg9MCxmPSExO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1hfHxkJiYidmVydGljYWwiPT09ZCloPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxDRShsKTtlbHNle2NvbnN0e3d0VGFibGU6TX09dGhpcy53b3QsRD1NLmhpZGVyLmdldEJvdW5k''@;'; put 'put ''aW5nQ2xpZW50UmVjdCgpO2Y9TWF0aC5jZWlsKEQuYm90dG9tKT09PWwub2Zmc2V0SGVpZ2h0LGg9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksUE8obCwiMHB4IixgJHtofXB4YCl9Y29uc3Qgdj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihoLGYpO3JldHVybiB0aGlzLmFkanVz''@;'; put 'put ''dEVsZW1lbnRzU2l6ZSgpLHZ9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtsZXQgaD0hMTtpZihkPT09YSYmbCE9PWEuc2Nyb2xsWSl7Y29uc3QgZj1hLnNjcm9sbFk7YS5z''@;'; put 'put ''Y3JvbGxUbyhMTyhhKSxsKSxoPWYhPT1hLnNjcm9sbFl9ZWxzZSBpZihsIT09ZC5zY3JvbGxUb3Ape2NvbnN0IGY9ZC5zY3JvbGxUb3A7ZC5zY3JvbGxUb3A9bCxoPWYhPT1kLnNjcm9sbFRvcH1yZXR1cm4gaH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9s''@;'; put 'put ''bEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53b3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KXtjb25zdCB2PXRoaXMud290Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGgpO2YrPXZvaWQgMD09PXY/''@;'; put 'put ''ZDp2LGgrPTF9cmV0dXJuIGZ9YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxl''@;'; put 'put ''bWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLHY9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLE09dGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwiaG9yaXpvbnRhbCI9PT1NKXtsZXQgWj1hLmdldFdvcmtzcGFjZVdpZHRoKCk7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiYoWi09ZjAoZCkpLFo9TWF0aC5taW4oWixsLnd0Um9vdEVsZW1lbnQu''@;'; put 'put ''c2Nyb2xsV2lkdGgpLHYud2lkdGg9YCR7Wn1weGB9ZWxzZSB2LndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9di53aWR0aDtsZXQgRD14dSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2wuaGFzRGVmaW5lZFNpemUoKXx8KEQ9MCksdi5oZWlnaHQ9YCR7''@;'; put 'put ''RH1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGUsYT12Syh0aGlzLndvdCksZD10aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyLmdldEZvY3VzU2VsZWN0aW9uKCk/cGFyc2VJbnQoYS5oZWlnaHQsMTApLzI6MDt0aGlzLmNsb25l''@;'; put 'put ''Lnd0VGFibGUuaGlkZXIuc3R5bGUud2lkdGg9dGhpcy5oaWRlci5zdHlsZS53aWR0aCxsLnN0eWxlLndpZHRoPWwucGFyZW50Tm9kZS5zdHlsZS53aWR0aCxsLnN0eWxlLmhlaWdodD1gJHtwYXJzZUludChsLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0LDEwKStkfXB4YH1hcHBseVRvRE9NKCl7''@;'; put 'put ''Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qud3RWaWV3''@;'; put 'put ''cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0''@;'; put 'put ''eWxlLmJvdHRvbT0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09Im51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2NvbnN0e3dvdDpkLHd0''@;'; put 'put ''U2V0dGluZ3M6aH09dGhpcyx2PShkLmNsb25lU291cmNlP2QuY2xvbmVTb3VyY2U6ZCkud3RUYWJsZS5ob2xkZXIsTT1oLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKSxaPTA9PT1oLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpJiZNLmxlbmd0aD4wJiYhcG8odi5wYXJlbnROb2RlLCJp''@;'; put 'put ''bm5lckJvcmRlclRvcCIpPzE6MDtsZXQgcmU9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLGNlPTA7aWYoYSYmdGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpJiYoYT0hMSksYSYmdi5vZmZzZXRIZWlnaHQh''@;'; put 'put ''PT12LmNsaWVudEhlaWdodCYmKGNlPWYwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYSl7Y29uc3QgYmU9aC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxFZT1oLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3JlKz10aGlzLnN1bUNlbGxTaXplcygwLGwrMSkscmUtPWQu''@;'; put 'put ''d3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLXRoaXMuc3VtQ2VsbFNpemVzKEVlLWJlLEVlKSxyZSs9MSxyZSs9Wn1lbHNlIHJlKz10aGlzLnN1bUNlbGxTaXplcyhoLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGwpO3JldHVybiByZSs9Y2UsQjJlKHRoaXMubWFpblRhYmxlU2Ny''@;'; put 'put ''b2xsYWJsZUVsZW1lbnQpPT09cmUtWiYmWj4wJiZ0aGlzLndvdC53dE92ZXJsYXlzLmV4cGFuZEhpZGVyVmVydGljYWxseUJ5KFopLHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24ocmUpfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9''@;'; put 'put ''PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gT08odGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfWdldE92ZXJs''@;'; put 'put ''YXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09bCYmKCFhfHwidmVydGljYWwiIT09YSkpe2NvbnN0IHY9''@;'; put 'put ''dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpO2Q9TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwwKSxkPnYmJihkPTApfXJldHVybiBkfWFkanVzdEhl''@;'; put 'put ''YWRlckJvcmRlcnNQb3NpdGlvbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0e3d0U2V0dGluZ3M6ZH09dGhpcyxoPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsZj1kLmdldFNldHRpbmcoInRv''@;'; put 'put ''dGFsQ29sdW1ucyIpLHY9Imhvcml6b250YWwiPT09ZC5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtmP2xvKGgsImVtcHR5Q29sdW1ucyIpOlRpKGgsImVtcHR5Q29sdW1ucyIpO2xldCBNPSExO2lmKCFhJiYhdil7Y29uc3QgRD1kLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFo9''@;'; put 'put ''dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3AhPT1ELHJlPWQuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2lmKChafHwwPT09RCkmJnJlLmxlbmd0aD4wKXtjb25zdCBjZT1wbyhoLCJpbm5lckJvcmRlclRvcCIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzVG9wPWQuZ2V0U2V0dGluZygiZml4ZWRS''@;'; put 'put ''b3dzVG9wIiksbHx8MD09PWQuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KFRpKGgsImlubmVyQm9yZGVyVG9wIiksTT0hY2UpOihsbyhoLCJpbm5lckJvcmRlclRvcCIpLE09Y2UpfX1yZXR1cm4gTX19Y29uc3QgJGZlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmdldFJl''@;'; put 'put ''bmRlcmVkUm93c0NvdW50KCk7cmV0dXJuIDA9PT1jPy0xOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS1jfSxnZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk/LTE6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJv''@;'; put 'put ''d3MiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikpfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50OigpPT4wfTtUcCgkZmUsIk1JWElOX05BTUUiLCJzdGlj''@;'; put 'put ''a3lSb3dzQm90dG9tIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IEtmZT0kZmU7Y2xhc3MgYksgZXh0ZW5kcyBtX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLElwKX19VGwoYkssS2ZlKSxUbChiSyxkSyk7Y29uc3QgcVFlPWJLO2NsYXNzIGVldCBleHRl''@;'; put 'put ''bmRzIEZFe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxJcCxkLGgpLGZ1bmN0aW9uIFhRZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSlFlKGMpe3ZhciBsPWZ1bmN0aW9uIFFRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts''@;'; put 'put ''XT1hLGN9KHRoaXMsImNhY2hlZEZpeGVkUm93c0JvdHRvbSIsLTEpLHRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5''@;'; put 'put ''KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgcVFlKC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZighdGhp''@;'; put 'put ''cy5uZWVkRnVsbFJlbmRlcnx8IXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfHwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7''@;'; put 'put ''YS5zdHlsZS50b3A9IiI7bGV0IGQ9MDtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTt0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09bHx8aCYmInZlcnRpY2FsIj09PWg/KGQ9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMucmVwb3NpdGlv''@;'; put 'put ''bk92ZXJsYXkoKSk6KGQ9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksYS5zdHlsZS5ib3R0b209YCR7ZH1weGApO2NvbnN0IGY9dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oZCk7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksZn1yZXBvc2l0aW9uT3ZlcmxheSgpe2Nv''@;'; put 'put ''bnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0''@;'; put 'put ''KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoZis9ZjAoZCkpLGguc3R5bGUuYm90dG9tPWAke2Z9cHhgfXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxk''@;'; put 'put ''PXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7bGV0IGg9ITE7aWYoZD09PWEmJmwhPT1hLnNjcm9sbFkpe2NvbnN0IGY9YS5zY3JvbGxZO2Euc2Nyb2xsVG8oTE8oYSksdG9wKSxoPWYhPT1hLnNjcm9sbFl9ZWxzZSBpZihsIT09ZC5zY3JvbGxUb3Ape2NvbnN0IGY9ZC5zY3JvbGxU''@;'; put 'put ''b3A7ZC5zY3JvbGxUb3A9bCxoPWYhPT1kLnNjcm9sbFRvcH1yZXR1cm4gaH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0e3d0VGFibGU6ZCxzdHlsZXNIYW5kbGVyOmh9PXRoaXMud290''@;'; put 'put ''LGY9aC5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IHY9bCxNPTA7Zm9yKDt2PGE7KXtjb25zdCBEPWQuZ2V0Um93SGVpZ2h0KHYpO00rPXZvaWQgMD09PUQ/ZjpELHYrPTF9cmV0dXJuIE19YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMu''@;'; put 'put ''bmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRv''@;'; put 'put ''dzpofT10aGlzLmRvbUJpbmRpbmdzLHY9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLE09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwiaG9yaXpvbnRhbCI9PT1NKXts''@;'; put 'put ''ZXQgWj1hLmdldFdvcmtzcGFjZVdpZHRoKCk7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiYoWi09ZjAoZCkpLFo9TWF0aC5taW4oWixsLnd0Um9vdEVsZW1lbnQuc2Nyb2xsV2lkdGgpLHYud2lkdGg9YCR7Wn1weGB9ZWxzZSB2LndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5''@;'; put 'put ''bGUud2lkdGg9di53aWR0aDtsZXQgRD14dSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2wuaGFzRGVmaW5lZFNpemUoKXx8KEQ9MCksdi5oZWlnaHQ9YCR7RH1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGU7dGhpcy5jbG9u''@;'; put 'put ''ZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRoaXMuaGlkZXIuc3R5bGUud2lkdGgsbC5zdHlsZS53aWR0aD1sLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsbC5zdHlsZS5oZWlnaHQ9bC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3Vs''@;'; put 'put ''YXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLm5l''@;'; put 'put ''ZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53''@;'; put 'put ''dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2xldCBkPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKTtj''@;'; put 'put ''b25zdCBmPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXI7bGV0IHY9MDthJiZmLm9mZnNldEhlaWdodCE9PWYuY2xpZW50SGVpZ2h0JiYodj1mMCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGE/KGQrPXRo''@;'; put 'put ''aXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxkLT10aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCksZCs9MSk6ZCs9dGhpcy5zdW1DZWxsU2l6ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGwpLGQrPXYsdGhpcy5zZXRTY3JvbGxQb3Np''@;'; put 'put ''dGlvbihkKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIE9P''@;'; put 'put ''KHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIp''@;'; put 'put ''O2xldCBkPTA7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lcj09PWwmJighYXx8InZlcnRpY2FsIiE9PWEpKXtjb25zdCBoPXRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKSx2PWgtdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksTT10aGlzLmRvbUJpbmRpbmdzLnJv''@;'; put 'put ''b3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O2Q9TWF0aC5tYXgodGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS1NK2gsMCksZD52JiYoZD0wKX1yZXR1cm4gZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29u''@;'; put 'put ''c3QgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksZD10aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbSE9PWEsaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2xldCBmPSExO2lmKChkfHwwPT09YSkmJmgubGVuZ3RoPjAp''@;'; put 'put ''e2NvbnN0IHY9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxNPXBvKHYsImlubmVyQm9yZGVyQm90dG9tIik7dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGx8fDA9PT10aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KFRpKHYsImlubmVyQm9yZGVyQm90dG9tIiksZj0hTSk6KGxvKHYsImlubmVyQm9yZGVyQm90dG9tIiksZj1NKX1yZXR1cm4gZn19Y29uc3QgcWZlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Qu''@;'; put 'put ''c3RhcnRSb3dSZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtjb25zdCBj''@;'; put 'put ''PXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJvd1BhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1JlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0''@;'; put 'put ''VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1Zpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93UGFydGlhbGx5VmlzaWJsZTtyZXR1''@;'; put 'put ''cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1JlbmRlcmVkfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NWaXNpYmxlfSxnZXRDb2x1''@;'; put 'put ''bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvbHVtbkhlYWRlcnMubGVuZ3RofX07VHAocWZlLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZFJvd3MiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgWGZlPXFmZSxKZmU9e2dldEZpcnN0UmVu''@;'; put 'put ''ZGVyZWRDb2x1bW4oKXtyZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKT8tMTowfSxnZXRGaXJzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRMYXN0UGFy''@;'; put 'put ''dGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikpfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKX0sZ2V0Um93SGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb3dIZWFkZXJzLmxlbmd0aH19O1Rw''@;'; put 'put ''KEpmZSwiTUlYSU5fTkFNRSIsInN0aWNreUNvbHVtbnNTdGFydCIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCB5Sz1KZmU7Y2xhc3MgX0sgZXh0ZW5kcyBtX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLEs3KX19VGwoX0ssWGZlKSxUbChfSyx5Syk7Y29u''@;'; put 'put ''c3QgcmV0PV9LO2NsYXNzIGlldCBleHRlbmRzIEZFe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxLNyxkLGgpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5l''@;'; put 'put ''dyByZXQoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdDtpZighdGhpcy5uZWVkRnVsbFJl''@;'; put 'put ''bmRlcnx8IXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfHwhbC5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGlu''@;'; put 'put ''ZygicHJldmVudE92ZXJmbG93Iik7bGV0IGY9MDt0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09YXx8aCYmImhvcml6b250YWwiPT09aD8oZj10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksQ0UoZCkpOihmPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSksUE8oZCxg''@;'; put 'put ''JHtmfXB4YCwiMHB4IikpO2NvbnN0IHY9dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oZik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdn1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7bGV0IGQ9ITE7dGhp''@;'; put 'put ''cy5pc1J0bCgpJiYobD0tbCk7Y29uc3QgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O2lmKGg9PT1hJiZsIT09YS5zY3JvbGxYKXtjb25zdCBmPWEuc2Nyb2xsWDthLnNjcm9sbFRvKGwsXyQoYSkpLGQ9ZiE9PWEuc2Nyb2xsWH1lbHNlIGlmKGwhPT1oLnNjcm9sbExlZnQpe2Nv''@;'; put 'put ''bnN0IGY9aC5zY3JvbGxMZWZ0O2guc2Nyb2xsTGVmdD1sLGQ9ZiE9PWguc2Nyb2xsTGVmdH1yZXR1cm4gZH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbFZlcnRpY2FsbHkiKX1zdW1DZWxsU2l6ZXMobCxhKXtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKTtsZXQgaD1sLGY9MDtmb3IoO2g8YTspZis9dGhpcy53b3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChoKXx8ZCxoKz0xO3JldHVybiBmfWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSx0aGlz''@;'; put 'put ''Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5k''@;'; put 'put ''b3c6aH09dGhpcy5kb21CaW5kaW5ncyx2PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aHx8InZlcnRpY2FsIj09PU0pe2xl''@;'; put 'put ''dCBaPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCk7YS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihaLT1mMChkKSksWj1NYXRoLm1pbihaLGwud3RSb290RWxlbWVudC5zY3JvbGxIZWlnaHQpLHYuaGVpZ2h0PWAke1p9cHhgfWVsc2Ugdi5oZWlnaHQ9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRl''@;'; put 'put ''ci5zdHlsZS5oZWlnaHQ9di5oZWlnaHQ7Y29uc3QgRD1zdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3Yud2lkdGg9YCR7RH1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGUsYT12Syh0aGlzLndvdCksZD10aGlzLndvdC5z''@;'; put 'put ''ZWxlY3Rpb25NYW5hZ2VyLmdldEZvY3VzU2VsZWN0aW9uKCk/cGFyc2VJbnQoYS53aWR0aCwxMCkvMjowO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS5oZWlnaHQ9dGhpcy5oaWRlci5zdHlsZS5oZWlnaHQsbC5zdHlsZS5oZWlnaHQ9bC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCxs''@;'; put 'put ''LnN0eWxlLndpZHRoPWAke3BhcnNlSW50KGwucGFyZW50Tm9kZS5zdHlsZS53aWR0aCwxMCkrZH1weGB9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGE9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiO2lmKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGVbYV09YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAh''@;'; put 'put ''PT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSBjb2x1bW5zUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGVbYV09IjAifXRoaXMuaXNSdGwoKT90aGlzLnNwcmVhZGVyLnN0eWxlLmxlZnQ9IiI6dGhpcy5zcHJlYWRlci5zdHlsZS5yaWdodD0i''@;'; put 'put ''Iix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXt0aGlzLmNsb25lLnd0VGFibGUuc3ByZWFkZXIuc3R5bGUudG9wPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5z''@;'; put 'put ''dGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtjb25zdHt3dFNldHRpbmdzOmR9PXRoaXMsaD1kLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSxmPWQuZ2V0U2V0dGluZygiZml4''@;'; put 'put ''ZWRDb2x1bW5zU3RhcnQiKSxNPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXIsRD0wPT09ZiYmaC5sZW5ndGg+MCYmIXBvKE0ucGFyZW50Tm9kZSwiaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpPzE6MDtsZXQgWj10aGlz''@;'; put 'put ''LmdldFRhYmxlUGFyZW50T2Zmc2V0KCkscmU9MDtyZXR1cm4gYSYmdGhpcy53b3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChsKT50aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKSYmKGE9ITEpLGEmJk0ub2Zmc2V0V2lkdGghPT1NLmNsaWVudFdpZHRoJiYocmU9ZjAodGhp''@;'; put 'put ''cy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhPyhaKz10aGlzLnN1bUNlbGxTaXplcygwLGwrMSksWi09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCksWis9RCk6Wis9dGhpcy5zdW1DZWxsU2l6ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29s''@;'; put 'put ''dW1uc1N0YXJ0IiksbCksWis9cmUsajJlKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQpPT09Wi1EJiZEPjAmJnRoaXMud290Lnd0T3ZlcmxheXMuZXhwYW5kSGlkZXJIb3Jpem9udGFsbHlCeShEKSx0aGlzLnNldFNjcm9sbFBvc2l0aW9uKFopfWdldFRhYmxlUGFyZW50T2Zmc2V0''@;'; put 'put ''KCl7bGV0IGE9MDtyZXR1cm4hdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpJiZ0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93JiYoYT10aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC5sZWZ0KSxhfWdldFNj''@;'; put 'put ''cm9sbFBvc2l0aW9uKCl7cmV0dXJuIE1hdGguYWJzKHckKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KSl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO3JldHVybiB0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09bHx8YSYmImhvcml6b250YWwiPT09YXx8KGQ9dGhpcy5pc1J0bCgpP01hdGguYWJzKE1hdGgubWluKHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlz''@;'; put 'put ''LmdldFNjcm9sbFBvc2l0aW9uKCksMCkpOk1hdGgubWF4KHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksMCksZD50aGlzLndvdC53dFRhYmxlLmdldFRvdGFsV2lkdGgoKS10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxXaWR0aCgpJiYoZD0w''@;'; put 'put ''KSksZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLGQ9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxoPWEuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLGY9YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLHY9''@;'; put 'put ''YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxNPSJ2ZXJ0aWNhbCI9PT1hLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3Y/bG8oZCwiZW1wdHlSb3dzIik6VGkoZCwiZW1wdHlSb3dzIik7bGV0IEQ9ITE7aWYoIU0paWYoZiYmIWgubGVuZ3RoKVRpKGQsImlubmVyQm9yZGVyTGVmdCBp''@;'; put 'put ''bm5lckJvcmRlcklubGluZVN0YXJ0Iik7ZWxzZSBpZighZiYmaC5sZW5ndGgpe2NvbnN0IFo9cG8oZCwiaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2w/KFRpKGQsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0IiksRD0hWik6KGxvKGQsImlubmVyQm9yZGVyTGVmdCBp''@;'; put 'put ''bm5lckJvcmRlcklubGluZVN0YXJ0IiksRD1aKX1yZXR1cm4gRH19Y2xhc3Mgd0sgZXh0ZW5kcyBtX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLHE3KX19VGwod0ssVmZlKSxUbCh3Syx5Syk7Y29uc3QgYWV0PXdLO2Z1bmN0aW9uIFFmZShjLGwsYSl7cmV0dXJuKGw9ZnVu''@;'; put 'put ''Y3Rpb24gb2V0KGMpe3ZhciBsPWZ1bmN0aW9uIHNldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBk''@;'; put 'put ''KXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkp''@;'; put 'put ''aW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgY2V0IGV4dGVuZHMgRkV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3N1cGVyKGwsYSxxNyxkLGgpLFFmZSh0aGlz''@;'; put 'put ''LCJ0b3BPdmVybGF5Iix2b2lkIDApLFFmZSh0aGlzLCJpbmxpbmVTdGFydE92ZXJsYXkiLHZvaWQgMCksdGhpcy50b3BPdmVybGF5PWYsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9dn1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtk''@;'; put 'put ''PGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgYWV0KC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlclRvcE92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRl''@;'; put 'put ''cklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9k''@;'; put 'put ''ZTt0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P1BPKGwsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSkrInB4IixgJHt0aGlzLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgp''@;'; put 'put ''fXB4YCk6Q0UobCk7bGV0IGE9eHUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBkPXN1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KGE9MCksbC5zdHlsZS5oZWlnaHQ9YCR7YX1weGAsbC5zdHlsZS53''@;'; put 'put ''aWR0aD1gJHtkfXB4YCwhMX19Y2xhc3MgQ0sgZXh0ZW5kcyBtX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLEJtKX19VGwoQ0ssS2ZlKSxUbChDSyx5Syk7Y29uc3QgdWV0PUNLO2NsYXNzIGRldCBleHRlbmRzIEZFe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtzdXBlcihs''@;'; put 'put ''LGEsQm0sZCxoKSx0aGlzLmJvdHRvbU92ZXJsYXk9Zix0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT12fWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyB1ZXQoLi4uYSl9''@;'; put 'put ''c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7''@;'; put 'put ''Y29uc3R7d290Omx9PXRoaXM7aWYodGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCFsLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7aWYoYS5zdHlsZS50b3A9IiIsdGhpcy50cmltbWlu''@;'; put 'put ''Z0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl7Y29uc3QgZj10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCksdj10aGlzLmJvdHRvbU92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpO2Euc3R5bGVbdGhpcy5pc1J0bCgpPyJyaWdodCI6Imxl''@;'; put 'put ''ZnQiXT1gJHtmfXB4YCxhLnN0eWxlLmJvdHRvbT1gJHt2fXB4YH1lbHNlIENFKGEpLHRoaXMucmVwb3NpdGlvbk92ZXJsYXkoKTtsZXQgZD14dSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2NvbnN0IGg9c3UodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1cm4gdGhpcy53b3Qud3RU''@;'; put 'put ''YWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoZD0wKSxhLnN0eWxlLmhlaWdodD1gJHtkfXB4YCxhLnN0eWxlLndpZHRoPWAke2h9cHhgLCExfXJlcG9zaXRpb25PdmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkfT10aGlzLmRvbUJp''@;'; put 'put ''bmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2xldCBmPTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFzVmVydGljYWxTY3JvbGwoKSYmYS5oYXNIb3Jpem9udGFsU2Ny''@;'; put 'put ''b2xsKCkmJihmKz1mMChkKSksaC5zdHlsZS5ib3R0b209YCR7Zn1weGB9fWZ1bmN0aW9uIGFQKGMsbCxhKXsoZnVuY3Rpb24gaGV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBv''@;'; put 'put ''biBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3ZyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZmV0KGMpe3ZhciBsPWZ1bmN0aW9uIHBldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lm''@;'; put 'put ''KHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJp''@;'; put 'put ''bmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24g''@;'; put 'put ''WDcoYyxsLGEpe3JldHVybiBjLnNldChlM2UoYyxsKSxhKSxhfWZ1bmN0aW9uIENnKGMsbCl7cmV0dXJuIGMuZ2V0KGUzZShjLGwpKX1mdW5jdGlvbiBlM2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDph''@;'; put 'put ''O3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBiXz1uZXcgV2Vha01hcCxvUD1uZXcgV2Vha01hcCx5Xz1uZXcgV2Vha01hcCxzUD1uZXcgV2Vha01hcDtjb25zdCBtZXQ9Y2xhc3MgZ2V0e2NvbnN0cnVjdG9y''@;'; put 'put ''KGwsYSxkLGgsZix2KXt3Zyh0aGlzLCJ3b3QiLG51bGwpLGFQKHRoaXMsYl8sW10pLHdnKHRoaXMsInRvcE92ZXJsYXkiLG51bGwpLHdnKHRoaXMsImJvdHRvbU92ZXJsYXkiLG51bGwpLHdnKHRoaXMsImlubGluZVN0YXJ0T3ZlcmxheSIsbnVsbCksd2codGhpcywidG9wSW5saW5lU3RhcnRD''@;'; put 'put ''b3JuZXJPdmVybGF5IixudWxsKSx3Zyh0aGlzLCJib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLHdnKHRoaXMsImJyb3dzZXJMaW5lSGVpZ2h0Iix2b2lkIDApLHdnKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLGFQKHRoaXMsb1AsITEpLGFQKHRoaXMseV8sMCksYVAodGhp''@;'; put 'put ''cyxzUCxudWxsKSx3Zyh0aGlzLCJyZXNpemVPYnNlcnZlciIsbmV3IFJlc2l6ZU9ic2VydmVyKHJlPT57RUUoKCk9PnshQXJyYXkuaXNBcnJheShyZSl8fCFyZS5sZW5ndGh8fChYNyh5Xyx0aGlzLENnKHlfLHRoaXMpKzEpLDEwMD09PUNnKHlfLHRoaXMpJiYoaWwoIlRoZSBSZXNpemVPYnNl''@;'; put 'put ''cnZlciBjYWxsYmFjayB3YXMgZmlyZWQgdG9vIG1hbnkgdGltZXMgaW4gZGlyZWN0IHN1Y2Nlc3Npb24uXG5UaGlzIG1heSBiZSBkdWUgdG8gYW4gaW5maW5pdGUgbG9vcCBjYXVzZWQgYnkgc2V0dGluZyBhIGR5bmFtaWMgaGVpZ2h0L3dpZHRoIChmb3IgZXhhbXBsZSwgd2l0aCB0aGUgYGR2''@;'; put 'put ''aGAgdW5pdHMpIHRvIGEgSGFuZHNvbnRhYmxlIGNvbnRhaW5lcidzIHBhcmVudC4gXG5UaGUgb2JzZXJ2ZXIgd2lsbCBiZSBkaXNjb25uZWN0ZWQuIiksdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCkpLG51bGwhPT1DZyhzUCx0aGlzKSYmY2xlYXJUaW1lb3V0KENnKHNQLHRoaXMp''@;'; put 'put ''KSxYNyhzUCx0aGlzLHNldFRpbWVvdXQoKCk9PntYNyh5Xyx0aGlzLDApfSwxMDApKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Db250YWluZXJFbGVtZW50UmVzaXplIikpfSl9KSksdGhpcy53b3Q9bCx0aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5m''@;'; put 'put ''YWNhZGVHZXR0ZXI9YSx0aGlzLnd0VGFibGU9djtjb25zdHtyb290RG9jdW1lbnQ6TSxyb290V2luZG93OkR9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmV2ZW50TWFuYWdlcj1mLHRoaXMuc2Nyb2xsYmFyU2l6ZT1mMChNKTtjb25zdCBaPSJoaWRkZW4i''@;'; put 'put ''PT09RC5nZXRDb21wdXRlZFN0eWxlKHYud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9Wj92LmhvbGRlcjp5RSh2LlRBQkxFKSx0aGlzLmluaXRPdmVybGF5cygpLHRoaXMuZGVzdHJveWVkPSExLHRo''@;'; put 'put ''aXMua2V5UHJlc3NlZD0hMSx0aGlzLnNwcmVhZGVyTGFzdFNpemU9e3dpZHRoOm51bGwsaGVpZ2h0Om51bGx9LHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPSExLHRoaXMuaW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCksdGhpcy5yZWdpc3Rlckxpc3Rl''@;'; put 'put ''bmVycygpLHRoaXMubGFzdFNjcm9sbFg9RC5zY3JvbGxYLHRoaXMubGFzdFNjcm9sbFk9RC5zY3JvbGxZfWdldE92ZXJsYXlzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBhPVsuLi5DZyhiXyx0aGlzKV07cmV0''@;'; put 'put ''dXJuIGwmJmEucHVzaCh0aGlzLnd0VGFibGUpLGF9aW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3REb2N1bWVudDphfT10aGlzLmRvbUJpbmRpbmdzLGQ9bC5nZXRDb21wdXRlZFN0eWxlKGEuYm9keSksaD1wYXJzZUludChkLmxpbmVIZWlnaHQsMTApLGY9''@;'; put 'put ''MS4yKnBhcnNlSW50KGQuZm9udFNpemUsMTApO3RoaXMuYnJvd3NlckxpbmVIZWlnaHQ9aHx8Zn1pbml0T3ZlcmxheXMoKXtjb25zdCBsPVt0aGlzLndvdCx0aGlzLmZhY2FkZUdldHRlcix0aGlzLnd0U2V0dGluZ3MsdGhpcy5kb21CaW5kaW5nc107dGhpcy50b3BPdmVybGF5PW5ldyAkUWUo''@;'; put 'put ''Li4ubCksdGhpcy5ib3R0b21PdmVybGF5PW5ldyBlZXQoLi4ubCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9bmV3IGlldCguLi5sKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgY2V0KC4uLmwsdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5KSx0''@;'; put 'put ''aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgZGV0KC4uLmwsdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5KSxYNyhiXyx0aGlzLFt0aGlzLnRvcE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRo''@;'; put 'put ''aXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSl9YmVmb3JlRHJhdygpe1g3KG9QLHRoaXMsQ2coYl8sdGhpcykucmVkdWNlKChsLGEpPT5hLmhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpfHxsLCExKSksQ2coYl8sdGhp''@;'; put 'put ''cykuZm9yRWFjaChsPT5sLnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoImJlZm9yZSIpKX1hZnRlckRyYXcoKXt0aGlzLnN5bmNTY3JvbGxXaXRoTWFzdGVyKCksQ2coYl8sdGhpcykuZm9yRWFjaChsPT57Y29uc3QgYT1sLmhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpO2wudXBkYXRlU3RhdGVP''@;'; put 'put ''ZlJlbmRlcmluZygiYWZ0ZXIiKSxhJiYhbC5uZWVkRnVsbFJlbmRlciYmbC5yZXNldCgpfSl9cmVmcmVzaEFsbCgpe2lmKHRoaXMud290LmRyYXduKXtpZighdGhpcy53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiB2b2lkIHRoaXMuZGVzdHJveSgpO3RoaXMud290LmRyYXcoITAp''@;'; put 'put ''LHRoaXMudmVydGljYWxTY3JvbGxpbmcmJnRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nJiZ0aGlzLnRvcE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0h''@;'; put 'put ''MX19cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3Mse21haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50OmR9PXRoaXMudG9wT3ZlcmxheSx7bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ6aH09dGhpcy5pbmxpbmVT''@;'; put 'put ''dGFydE92ZXJsYXk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5ZG93biIsY2U9PnRoaXMub25LZXlEb3duKGNlKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5dXAiLCgpPT50''@;'; put 'put ''aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJ2aXNpYmlsaXR5Y2hhbmdlIiwoKT0+dGhpcy5vbktleVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwic2Nyb2xsIixjZT0+dGhpcy5vblRhYmxlU2Nyb2xsKGNlKSx7''@;'; put 'put ''cGFzc2l2ZTohMH0pLGQhPT1oJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsInNjcm9sbCIsY2U9PnRoaXMub25UYWJsZVNjcm9sbChjZSkse3Bhc3NpdmU6ITB9KTtjb25zdCBmPWEuZGV2aWNlUGl4ZWxSYXRpbyYmYS5kZXZpY2VQaXhlbFJhdGlvPjEsdj10aGlzLnNj''@;'; put 'put ''cm9sbGFibGVFbGVtZW50PT09YSxNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50V2hlZWwiKSxEPXtwYXNzaXZlOnZ9O2xldCByZTsoTXx8Znx8IUwkKCkpJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LCJ3''@;'; put 'put ''aGVlbCIsY2U9PnRoaXMub25DbG9uZVdoZWVsKGNlLE0pLEQpLFt0aGlzLnRvcE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5''@;'; put 'put ''XS5mb3JFYWNoKGNlPT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihjZS5jbG9uZS53dFRhYmxlLmhvbGRlciwid2hlZWwiLGJlPT50aGlzLm9uQ2xvbmVXaGVlbChiZSxNKSxEKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwicmVzaXplIiwoKT0+''@;'; put 'put ''e0VFKCgpPT57Y2xlYXJUaW1lb3V0KHJlKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25XaW5kb3dSZXNpemUiKSxyZT1zZXRUaW1lb3V0KCgpPT57WDcoeV8sdGhpcywwKX0sMjAwKX0pfSksdnx8dGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3RUYWJsZS53dFJvb3RF''@;'; put 'put ''bGVtZW50LnBhcmVudEVsZW1lbnQpfW9uVGFibGVTY3JvbGwobCl7Y29uc3QgYT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxoPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxl''@;'; put 'put ''RWxlbWVudCxmPWwudGFyZ2V0O3RoaXMua2V5UHJlc3NlZCYmKGghPT1hJiZmIT09YSYmIWwudGFyZ2V0LmNvbnRhaW5zKGgpfHxkIT09YSYmZiE9PWEmJiFsLnRhcmdldC5jb250YWlucyhkKSl8fHRoaXMuc3luY1Njcm9sbFBvc2l0aW9ucyhsKX1vbkNsb25lV2hlZWwobCxhKXtjb25zdHty''@;'; put 'put ''b290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxmPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx2PWwudGFyZ2V0LE09ZiE9PWQmJnYhPT1kJiYhdi5jb250YWlu''@;'; put 'put ''cyhmKSxEPWghPT1kJiZ2IT09ZCYmIXYuY29udGFpbnMoaCk7aWYodGhpcy5rZXlQcmVzc2VkJiYoTXx8RCl8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1kKXJldHVybjtjb25zdCBaPXRoaXMudHJhbnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGwpOyhhfHx0aGlzLnNjcm9sbGFibGVFbGVt''@;'; put 'put ''ZW50IT09ZCYmWikmJmwucHJldmVudERlZmF1bHQoKX1vbktleURvd24obCl7dGhpcy5rZXlQcmVzc2VkPXVfKGwua2V5Q29kZSwiQVJST1dfVVB8QVJST1dfUklHSFR8QVJST1dfRE9XTnxBUlJPV19MRUZUIil9b25LZXlVcCgpe3RoaXMua2V5UHJlc3NlZD0hMX10cmFuc2xhdGVNb3VzZVdo''@;'; put 'put ''ZWVsVG9TY3JvbGwobCl7bGV0IGE9aXNOYU4obC5kZWx0YVkpPy0xKmwud2hlZWxEZWx0YVk6bC5kZWx0YVksZD1pc05hTihsLmRlbHRhWCk/LTEqbC53aGVlbERlbHRhWDpsLmRlbHRhWDsxPT09bC5kZWx0YU1vZGUmJihkKz1kKnRoaXMuYnJvd3NlckxpbmVIZWlnaHQsYSs9YSp0aGlzLmJy''@;'; put 'put ''b3dzZXJMaW5lSGVpZ2h0KTtjb25zdCBoPXRoaXMuc2Nyb2xsVmVydGljYWxseShhKSxmPXRoaXMuc2Nyb2xsSG9yaXpvbnRhbGx5KGQpO3JldHVybiBofHxmfXNjcm9sbFZlcnRpY2FsbHkobCl7Y29uc3QgYT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcDtyZXR1cm4gdGhpcy5z''@;'; put 'put ''Y3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3ArPWwsYSE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wfXNjcm9sbEhvcml6b250YWxseShsKXtjb25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdDtyZXR1cm4gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3Jv''@;'; put 'put ''bGxMZWZ0Kz1sLGEhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnR9c3luY1Njcm9sbFBvc2l0aW9ucygpe2lmKHRoaXMuZGVzdHJveWVkKXJldHVybjtjb25zdCBsPXRoaXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcixhPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5''@;'; put 'put ''LmNsb25lLnd0VGFibGUuaG9sZGVyO2xldCBkPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCxoPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wO2lmKHRoaXMud290Lnd0Vmlld3BvcnQuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmKGQ9dGhpcy5z''@;'; put 'put ''Y3JvbGxhYmxlRWxlbWVudC5zY3JvbGxYKSx0aGlzLndvdC53dFZpZXdwb3J0LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiYoaD10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFkpLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz10aGlzLmxhc3RTY3JvbGxYIT09ZCx0aGlz''@;'; put 'put ''LnZlcnRpY2FsU2Nyb2xsaW5nPXRoaXMubGFzdFNjcm9sbFkhPT1oLHRoaXMubGFzdFNjcm9sbFg9ZCx0aGlzLmxhc3RTY3JvbGxZPWgsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nKXtsLnNjcm9sbExlZnQ9ZDtjb25zdCBmPXRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlcj90aGlz''@;'; put 'put ''LmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXI6bnVsbDtmJiYoZi5zY3JvbGxMZWZ0PWQpfXRoaXMudmVydGljYWxTY3JvbGxpbmcmJihhLnNjcm9sbFRvcD1oKSx0aGlzLnJlZnJlc2hBbGwoKX1zeW5jU2Nyb2xsV2l0aE1hc3Rlcigpe2lmKCFDZyhvUCx0aGlzKSlyZXR1cm47''@;'; put 'put ''Y29uc3QgbD10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQse3Njcm9sbExlZnQ6YSxzY3JvbGxUb3A6ZH09bDt0aGlzLnRvcE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdD1hKSx0''@;'; put 'put ''aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdD1hKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFi''@;'; put 'put ''bGUuaG9sZGVyLnNjcm9sbFRvcD1kKSxYNyhvUCx0aGlzLCExKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXJFdmVudHMoITApLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMudG9w''@;'; put 'put ''T3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJnRoaXMuYm90dG9tT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKTtjb25zdHt3dFRhYmxlOmx9PXRoaXMse3Jvb3RXaW5kb3c6YX09dGhpcy5k''@;'; put 'put ''b21CaW5kaW5nczt0aGlzLnNjcm9sbGFibGVFbGVtZW50PSJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGwud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpP2wuaG9sZGVyOnlFKGwuVEFCTEUpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMo''@;'; put 'put ''KX1kZXN0cm95KCl7dGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMudG9wT3ZlcmxheS5kZXN0cm95KCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkuZGVzdHJveSgpLHRoaXMuaW5saW5l''@;'; put 'put ''U3RhcnRPdmVybGF5LmRlc3Ryb3koKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZGVzdHJveSgpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVy''@;'; put 'put ''T3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZGVzdHJveSgpLHRoaXMuZGVzdHJveWVkPSEwfXJlZnJlc2goKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlTGFz''@;'; put 'put ''dFNwcmVhZGVyU2l6ZSgpJiZ0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LnJlZnJlc2gobCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkucmVmcmVzaChsKSx0aGlzLnRvcE92ZXJsYXkucmVmcmVzaChsKSx0aGlz''@;'; put 'put ''LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9t''@;'; put 'put ''SW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2gobCl9dXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpe2NvbnN0IGw9dGhpcy53dFRhYmxlLnNwcmVhZGVyLGE9bC5jbGllbnRXaWR0aCxkPWwuY2xpZW50SGVpZ2h0LGg9YSE9PXRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aHx8ZCE9PXRo''@;'; put 'put ''aXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ7cmV0dXJuIGgmJih0aGlzLnNwcmVhZGVyTGFzdFNpemUud2lkdGg9YSx0aGlzLnNwcmVhZGVyTGFzdFNpemUuaGVpZ2h0PWQpLGh9YWRqdXN0RWxlbWVudHNTaXplKCl7Y29uc3R7d3RWaWV3cG9ydDpsfT10aGlzLndvdCx7d3RUYWJsZTphfT10''@;'; put 'put ''aGlzLHtyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLnNjcm9sbGFibGVFbGVtZW50PT09ZCxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSx2PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxNPWwuZ2V0Um93SGVh''@;'; put 'put ''ZGVyV2lkdGgoKSxaPWwuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCkrdGhpcy50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLHYpKzEscmU9TSt0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxmKSxiZT1hLmhpZGVyLnN0eWxlLHFlPSgoKT0+IWgmJnRoaXMuc2Nyb2xsYWJs''@;'; put 'put ''ZUVsZW1lbnQuc2Nyb2xsVG9wPk1hdGgubWF4KDAsWi1hLmhvbGRlci5jbGllbnRIZWlnaHQpKSgpPzE6MCxydD0oKCk9PiFoJiZ0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQ+TWF0aC5tYXgoMCxyZS1hLmhvbGRlci5jbGllbnRXaWR0aCkpKCk/MTowO2JlLndpZHRoPWAke3Jl''@;'; put 'put ''K3J0fXB4YCxiZS5oZWlnaHQ9YCR7WitxZX1weGAsdGhpcy50b3BPdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuYm90dG9tT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKX1leHBhbmRIaWRlclZl''@;'; put 'put ''cnRpY2FsbHlCeShsKXtjb25zdHt3dFRhYmxlOmF9PXRoaXM7YS5oaWRlci5zdHlsZS5oZWlnaHQ9YCR7cGFyc2VJbnQoYS5oaWRlci5zdHlsZS5oZWlnaHQsMTApK2x9cHhgfWV4cGFuZEhpZGVySG9yaXpvbnRhbGx5QnkobCl7Y29uc3R7d3RUYWJsZTphfT10aGlzO2EuaGlkZXIuc3R5bGUu''@;'; put 'put ''d2lkdGg9YCR7cGFyc2VJbnQoYS5oaWRlci5zdHlsZS53aWR0aCwxMCkrbH1weGB9YXBwbHlUb0RPTSgpe3RoaXMud3RUYWJsZS5pc1Zpc2libGUoKSYmKHRoaXMudG9wT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkuYXBw''@;'; put 'put ''bHlUb0RPTSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmFwcGx5VG9ET00oKSl9Z2V0UGFyZW50T3ZlcmxheShsKXtpZighbClyZXR1cm4gbnVsbDtsZXQgZD1udWxsO3JldHVybiBZbihbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3Zlcmxh''@;'; put 'put ''eSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0saD0+e2gmJmguY2xvbmUmJmguY2xvbmUud3RUYWJsZS5UQUJMRS5jb250YWlucyhsKSYmKGQ9aC5jbG9uZSl9KSxkfXN5bmNPdmVybGF5VGFibGVDbGFzc05hbWVz''@;'; put 'put ''KCl7Y29uc3QgbD10aGlzLnd0VGFibGUuVEFCTEU7WW4oW3RoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLGQ9''@;'; put 'put ''PntkJiYoZC5jbG9uZS53dFRhYmxlLlRBQkxFLmNsYXNzTmFtZT1sLmNsYXNzTmFtZSl9KX19O2Z1bmN0aW9uIHQzZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdmV0KGMpe3ZhciBsPWZ1bmN0aW9uIGJldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9''@;'; put 'put ''Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9''@;'; put 'put ''cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl''@;'; put 'put ''OiEwfSk6Y1tsXT1hLGN9Y2xhc3MgeWV0e2NvbnN0cnVjdG9yKGwpe3QzZSh0aGlzLCJzZXR0aW5ncyIse30pLHQzZSh0aGlzLCJkZWZhdWx0cyIsT2JqZWN0LmZyZWV6ZSh0aGlzLmdldERlZmF1bHRzKCkpKSxYbyh0aGlzLmRlZmF1bHRzLChhLGQpPT57aWYodm9pZCAwIT09bFtkXSl0aGlz''@;'; put 'put ''LnNldHRpbmdzW2RdPWxbZF07ZWxzZXtpZih2b2lkIDA9PT1hKXRocm93IG5ldyBFcnJvcihgQSByZXF1aXJlZCBzZXR0aW5nICIke2R9IiB3YXMgbm90IHByb3ZpZGVkYCk7dGhpcy5zZXR0aW5nc1tkXT1hfX0pfWdldERlZmF1bHRzKCl7cmV0dXJue2ZhY2FkZTp2b2lkIDAsdGFibGU6dm9p''@;'; put 'put ''ZCAwLGlzRGF0YVZpZXdJbnN0YW5jZTohMCxleHRlcm5hbFJvd0NhbGN1bGF0b3I6ITEsY3VycmVudFJvd0NsYXNzTmFtZTpudWxsLGN1cnJlbnRDb2x1bW5DbGFzc05hbWU6bnVsbCxwcmV2ZW50T3ZlcmZsb3c6KCk9PiExLHByZXZlbnRXaGVlbDohMSxkYXRhOnZvaWQgMCxmaXhlZENvbHVt''@;'; put 'put ''bnNTdGFydDowLGZpeGVkUm93c1RvcDowLGZpeGVkUm93c0JvdHRvbTowLHNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpPjB8fHRoaXMuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aD4wLHNob3VsZFJl''@;'; put 'put ''bmRlclRvcE92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIik+MHx8dGhpcy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoPjAsc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKT4wLG1p''@;'; put 'put ''blNwYXJlUm93czowLHJvd0hlYWRlcnM6KCk9PltdLGNvbHVtbkhlYWRlcnM6KCk9PltdLHRvdGFsUm93czp2b2lkIDAsdG90YWxDb2x1bW5zOnZvaWQgMCxjZWxsUmVuZGVyZXI6KGwsYSxkKT0+e1BtKGQsdGhpcy5nZXRTZXR0aW5nKCJkYXRhIixsLGEpPz8iIil9LGNvbHVtbldpZHRoKCl7''@;'; put 'put ''fSxyb3dIZWlnaHQoKXt9LHJvd0hlaWdodEJ5T3ZlcmxheU5hbWUoKXt9LGRlZmF1bHRDb2x1bW5XaWR0aDo1MCxzZWxlY3Rpb25zOm51bGwsaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlcjohMSx2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTpudWxsLHZpZXdwb3J0Q29sdW1uQ2FsY3Vs''@;'; put 'put ''YXRvck92ZXJyaWRlOm51bGwsdmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQ6bnVsbCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZDpudWxsLG9uQ2VsbE1vdXNlRG93bjpudWxsLG9uQ2VsbENvbnRleHRNZW51Om51bGwsb25DZWxsTW91c2VPdmVyOm51bGwsb25DZWxsTW91''@;'; put 'put ''c2VPdXQ6bnVsbCxvbkNlbGxNb3VzZVVwOm51bGwsb25DZWxsRGJsQ2xpY2s6bnVsbCxvbkNlbGxDb3JuZXJNb3VzZURvd246bnVsbCxvbkNlbGxDb3JuZXJEYmxDbGljazpudWxsLGJlZm9yZURyYXc6bnVsbCxvbkRyYXc6bnVsbCxvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOm51bGws''@;'; put 'put ''b25BZnRlckRyYXdTZWxlY3Rpb246bnVsbCxvbkJlZm9yZURyYXdCb3JkZXJzOm51bGwsb25CZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseTpsPT5sLG9uQmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5Omw9Pmwsb25TY3JvbGxIb3Jpem9udGFsbHk6bnVsbCxvblNjcm9sbFZl''@;'; put 'put ''cnRpY2FsbHk6bnVsbCxvbkJlZm9yZVRvdWNoU2Nyb2xsOm51bGwsb25BZnRlck1vbWVudHVtU2Nyb2xsOm51bGwsb25Nb2RpZnlSb3dIZWFkZXJXaWR0aDpudWxsLG9uTW9kaWZ5R2V0Q2VsbENvb3JkczpudWxsLG9uTW9kaWZ5R2V0Q29vcmRzRWxlbWVudDpudWxsLG9uTW9kaWZ5R2V0Q29v''@;'; put 'put ''cmRzOm51bGwsb25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6bD0+bCxvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjpsPT5sLG9uV2luZG93UmVzaXplOm51bGwsb25Db250YWluZXJFbGVtZW50UmVzaXplOm51bGwscmVuZGVyQWxsQ29sdW1uczohMSxyZW5kZXJBbGxSb3dz''@;'; put 'put ''OiExLGdyb3VwczohMSxyb3dIZWFkZXJXaWR0aDpudWxsLGNvbHVtbkhlYWRlckhlaWdodDpudWxsLGhlYWRlckNsYXNzTmFtZTpudWxsLHJ0bE1vZGU6ITEsYXJpYVRhZ3M6ITB9fXVwZGF0ZShsLGEpe3JldHVybiB2b2lkIDA9PT1hP1hvKGwsKGQsaCk9Pnt0aGlzLnNldHRpbmdzW2hdPWR9''@;'; put 'put ''KTp0aGlzLnNldHRpbmdzW2xdPWEsdGhpc31nZXRTZXR0aW5nKGwsYSxkLGgsZil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc2V0dGluZ3NbbF0/dGhpcy5zZXR0aW5nc1tsXShhLGQsaCxmKTp2b2lkIDAhPT1hJiZBcnJheS5pc0FycmF5KHRoaXMuc2V0dGluZ3NbbF0pP3RoaXMu''@;'; put 'put ''c2V0dGluZ3NbbF1bYV06dGhpcy5zZXR0aW5nc1tsXX1nZXRTZXR0aW5nUHVyZShsKXtyZXR1cm4gdGhpcy5zZXR0aW5nc1tsXX1oYXMobCl7cmV0dXJuISF0aGlzLnNldHRpbmdzW2xdfX1jbGFzcyBTSyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsIm1h''@;'; put 'put ''c3RlciIpfWFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKXtjb25zdCBsPWFfKHRoaXMud3RSb290RWxlbWVudCkse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncztpZihsPT09YSl0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iil8fCh0''@;'; put 'put ''aGlzLmhvbGRlci5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIsdGhpcy53dFJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIik7ZWxzZXtjb25zdCBkPWwucGFyZW50RWxlbWVudCxoPV9FKGwsImhlaWdodCIsYSksZj1fRShsLCJvdmVyZmxvdyIsYSksdj10aGlzLmhvbGRlci5z''@;'; put 'put ''dHlsZSx7c2Nyb2xsV2lkdGg6TSxzY3JvbGxIZWlnaHQ6RH09bDtsZXQgWj1sLm9mZnNldFdpZHRoLHJlPWwub2Zmc2V0SGVpZ2h0O2lmKGQmJlsiYXV0byIsImhpZGRlbiIsInNjcm9sbCJdLmluY2x1ZGVzKGYpKXtjb25zdCBiZT1sLmNsb25lTm9kZSghMSk7YmUuc3R5bGUub3ZlcmZsb3c9''@;'; put 'put ''ImF1dG8iLGJlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC5uZXh0RWxlbWVudFNpYmxpbmc/ZC5pbnNlcnRCZWZvcmUoYmUsbC5uZXh0RWxlbWVudFNpYmxpbmcpOmQuYXBwZW5kQ2hpbGQoYmUpO2NvbnN0IEVlPXBhcnNlSW50KGEuZ2V0Q29tcHV0ZWRTdHlsZShiZSkuaGVpZ2h0LDEw''@;'; put 'put ''KTtkLnJlbW92ZUNoaWxkKGJlKSwwPT09RWUmJihyZT0wKX1yZT1NYXRoLm1pbihyZSxEKSx2LmhlaWdodD0iYXV0byI9PT1oPyJhdXRvIjpgJHtyZX1weGAsWj1NYXRoLm1pbihaLE0pLHYud2lkdGg9YCR7Wn1weGAsdi5vdmVyZmxvdz0iIix0aGlzLmhhc1RhYmxlSGVpZ2h0PSJhdXRvIj09''@;'; put 'put ''PXYuaGVpZ2h0fHxyZT4wLHRoaXMuaGFzVGFibGVXaWR0aD1aPjB9dGhpcy5pc1RhYmxlVmlzaWJsZT1VNyh0aGlzLlRBQkxFKX1tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RWaWV3cG9ydDphfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qs''@;'; put 'put ''ZD0ibWFzdGVyIixmPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtpZihmJiYhYS5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkW2RdKXtjb25zdCBNPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxEPXRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291''@;'; put 'put ''bnQoKTtmb3IobGV0IFo9MDtaPGY7WisrKWZvcihsZXQgcmU9LTEqTTtyZTxEO3JlKyspdGhpcy5tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIocmUpO2EuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZFtkXT0hMH19fVRsKFNLLFhmZSksVGwoU0ssZEspO2NvbnN0IF9ldD1TSztm''@;'; put 'put ''dW5jdGlvbiBIRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gd2V0KGMpe3ZhciBsPWZ1bmN0aW9uIENldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgTWV0e2NvbnN0cnVjdG9yKCl7SEUodGhpcywiY291bnQiLDAp''@;'; put 'put ''LEhFKHRoaXMsInN0YXJ0Um93IiwwKSxIRSh0aGlzLCJlbmRSb3ciLDApLEhFKHRoaXMsInN0YXJ0UG9zaXRpb24iLDApLEhFKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCEwKX1pbml0aWFsaXplKGwpe2xldHt0b3RhbFJvd3M6YX09bDt0aGlzLmNvdW50PWEsdGhpcy5l''@;'; put 'put ''bmRSb3c9dGhpcy5jb3VudC0xfXByb2Nlc3MoKXt9ZmluYWxpemUoKXt9fWZ1bmN0aW9uIE5FKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB4ZXQoYyl7dmFyIGw9ZnVuY3Rpb24gRWV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By''@;'; put 'put ''aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu''@;'; put 'put ''ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs''@;'; put 'put ''Y315KDM5MDkyKSx5KDE0MzYwKTtjbGFzcyBuM2V7Y29uc3RydWN0b3IoKXtORSh0aGlzLCJjb3VudCIsMCksTkUodGhpcywic3RhcnRSb3ciLG51bGwpLE5FKHRoaXMsImVuZFJvdyIsbnVsbCksTkUodGhpcywic3RhcnRQb3NpdGlvbiIsbnVsbCksTkUodGhpcywiaXNWaXNpYmxlSW5Ucmlt''@;'; put 'put ''bWluZ0NvbnRhaW5lciIsITEpfWluaXRpYWxpemUoKXt9cHJvY2VzcyhsLGEpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZEhlaWdodDpkLHplcm9CYXNlZFNjcm9sbE9mZnNldDpoLGlubmVyVmlld3BvcnRIZWlnaHQ6Zn09YTtkPD1oJiYodGhpcy5zdGFydFJvdz1sKSxkPj1oJiZkPD1mJiZudWxs''@;'; put 'put ''PT09dGhpcy5zdGFydFJvdyYmKHRoaXMuc3RhcnRSb3c9bCksdGhpcy5lbmRSb3c9bH1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydEhlaWdodDpoLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Zix0b3RhbFJvd3M6dixuZWVkUmV2ZXJzZTpNLHN0YXJ0''@;'; put 'put ''UG9zaXRpb25zOkQscm93SGVpZ2h0Olp9PWw7aWYodGhpcy5lbmRSb3c9PT12LTEmJk0pZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFydFJvdz4wOyl7Y29uc3QgY2U9RFt0aGlzLmVuZFJvd10rWi1EW3RoaXMuc3RhcnRSb3ctMV07aWYodGhpcy5zdGFydFJvdy09MSxj''@;'; put 'put ''ZT49aC1mKWJyZWFrfXRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9RFt0aGlzLnN0YXJ0Um93XSkmJnZvaWQgMCE9PWE/YTpudWxsLHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKGQraC1mPDB8fGQ+RC5hdCgtMSkrWiksdjx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93''@;'; put 'put ''PXYtMSksbnVsbCE9PXRoaXMuc3RhcnRSb3cmJih0aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWZ1bmN0aW9uIHIzZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVGV0KGMpe3ZhciBsPWZ1bmN0aW9uIEFldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMp''@;'; put 'put ''cmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt''@;'; put 'put ''aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJh''@;'; put 'put ''YmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mga2V0IGV4dGVuZHMgbjNle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxyM2UodGhpcywicm93U3RhcnRPZmZzZXQiLDApLHIzZSh0aGlzLCJyb3dFbmRPZmZzZXQiLDApfWZpbmFsaXplKGwpe3ZhciBhO3N1cGVy''@;'; put 'put ''LmZpbmFsaXplKGwpO2NvbnN0e292ZXJyaWRlRm46ZCx0b3RhbFJvd3M6aCxzdGFydFBvc2l0aW9uczpmfT1sO2lmKG51bGwhPT10aGlzLnN0YXJ0Um93JiYiZnVuY3Rpb24iPT10eXBlb2YgZCl7Y29uc3Qgdj10aGlzLnN0YXJ0Um93LE09dGhpcy5lbmRSb3c7ZCh0aGlzKSx0aGlzLnJvd1N0''@;'; put 'put ''YXJ0T2Zmc2V0PXYtdGhpcy5zdGFydFJvdyx0aGlzLnJvd0VuZE9mZnNldD10aGlzLmVuZFJvdy1NfXRoaXMuc3RhcnRSb3c8MCYmKHRoaXMuc3RhcnRSb3c9MCksdGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1mW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGwsaDx0aGlz''@;'; put 'put ''LmVuZFJvdyYmKHRoaXMuZW5kUm93PWgtMSksbnVsbCE9PXRoaXMuc3RhcnRSb3cmJih0aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWZ1bmN0aW9uIFZFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEZXQoYyl7dmFyIGw9ZnVuY3Rpb24gSWV0KGMsbCl7aWYoIm9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2''@;'; put 'put ''ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51''@;'; put 'put ''bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBSZXR7Y29uc3RydWN0b3IoKXtWRSh0aGlzLCJjb3VudCIsMCksVkUodGhpcywic3RhcnRSb3ciLG51bGwpLFZFKHRoaXMsImVuZFJvdyIsbnVsbCksVkUodGhpcywic3RhcnRQb3NpdGlvbiIs''@;'; put 'put ''bnVsbCksVkUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITEpfWluaXRpYWxpemUoKXt9cHJvY2VzcyhsLGEpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZEhlaWdodDpkLHplcm9CYXNlZFNjcm9sbE9mZnNldDpoLGlubmVyVmlld3BvcnRIZWlnaHQ6Zixyb3dIZWlnaHQ6dn09''@;'; put 'put ''YTtkPj1oJiZkK3Y8PWYmJihudWxsPT09dGhpcy5zdGFydFJvdyYmKHRoaXMuc3RhcnRSb3c9bCksdGhpcy5lbmRSb3c9bCl9ZmluYWxpemUobCl7dmFyIGE7Y29uc3R7c2Nyb2xsT2Zmc2V0OmQsdmlld3BvcnRIZWlnaHQ6aCxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OmYsdG90YWxSb3dz''@;'; put 'put ''OnYsbmVlZFJldmVyc2U6TSxzdGFydFBvc2l0aW9uczpELHJvd0hlaWdodDpafT1sO2lmKHRoaXMuZW5kUm93PT09di0xJiZNKWZvcih0aGlzLnN0YXJ0Um93PXRoaXMuZW5kUm93O3RoaXMuc3RhcnRSb3c+MDspe2NvbnN0IGJlPURbdGhpcy5lbmRSb3ddK1otRFt0aGlzLnN0YXJ0Um93LTFd''@;'; put 'put ''O2lmKGJlPD1oLWYmJih0aGlzLnN0YXJ0Um93LT0xKSxiZT49aC1mKWJyZWFrfXRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9RFt0aGlzLnN0YXJ0Um93XSkmJnZvaWQgMCE9PWE/YTpudWxsO2NvbnN0IHJlPWQraC1mLGNlPW51bGw9PT10aGlzLnN0YXJ0Um93PzA6bC5nZXRSb3dIZWln''@;'; put 'put ''aHQodGhpcy5zdGFydFJvdyk7dGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEocmU8Y2V8fGQ+RC5hdCgtMSkpLHY8dGhpcy5lbmRSb3cmJih0aGlzLmVuZFJvdz12LTEpLG51bGwhPT10aGlzLnN0YXJ0Um93JiYodGhpcy5jb3VudD10aGlzLmVuZFJvdy10aGlzLnN0YXJ0Um93''@;'; put 'put ''KzEpfX1mdW5jdGlvbiBCRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTGV0KGMpe3ZhciBsPWZ1bmN0aW9uIE9ldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChj''@;'; put 'put ''LGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7''@;'; put 'put ''cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgUGV0e2NvbnN0cnVjdG9yKCl7QkUodGhpcywiY291''@;'; put 'put ''bnQiLDApLEJFKHRoaXMsInN0YXJ0Q29sdW1uIiwwKSxCRSh0aGlzLCJlbmRDb2x1bW4iLDApLEJFKHRoaXMsInN0YXJ0UG9zaXRpb24iLDApLEJFKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCEwKX1pbml0aWFsaXplKGwpe2xldHt0b3RhbENvbHVtbnM6YX09bDt0aGlz''@;'; put 'put ''LmNvdW50PWEsdGhpcy5lbmRDb2x1bW49dGhpcy5jb3VudC0xfXByb2Nlc3MoKXt9ZmluYWxpemUoKXt9fWZ1bmN0aW9uIGpFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBGZXQoYyl7dmFyIGw9ZnVuY3Rpb24gSGV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2''@;'; put 'put ''YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1''@;'; put 'put ''ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp''@;'; put 'put ''dGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBpM2V7Y29uc3RydWN0b3IoKXtqRSh0aGlzLCJjb3VudCIsMCksakUodGhpcywic3RhcnRDb2x1bW4iLG51bGwpLGpFKHRoaXMsImVuZENvbHVtbiIsbnVsbCksakUodGhpcywic3RhcnRQb3NpdGlvbiIsbnVsbCksakUodGhpcywiaXNWaXNpYmxl''@;'; put 'put ''SW5UcmltbWluZ0NvbnRhaW5lciIsITEpfWluaXRpYWxpemUoKXt9cHJvY2VzcyhsLGEpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZFdpZHRoOmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0Omgsdmlld3BvcnRXaWR0aDpmfT1hO2Q8PWgmJih0aGlzLnN0YXJ0Q29sdW1uPWwpLGQ+PWgmJmQ8PWgrKGg+''@;'; put 'put ''MD9mKzE6ZikmJm51bGw9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLnN0YXJ0Q29sdW1uPWwpLHRoaXMuZW5kQ29sdW1uPWx9ZmluYWxpemUobCl7dmFyIGE7Y29uc3R7c2Nyb2xsT2Zmc2V0OmQsdmlld3BvcnRXaWR0aDpoLGlubGluZVN0YXJ0T2Zmc2V0OmYsemVyb0Jhc2VkU2Nyb2xsT2Zm''@;'; put 'put ''c2V0OnYsdG90YWxDb2x1bW5zOk0sbmVlZFJldmVyc2U6RCxzdGFydFBvc2l0aW9uczpaLGNvbHVtbldpZHRoOnJlfT1sO2lmKHRoaXMuZW5kQ29sdW1uPT09TS0xJiZEKWZvcih0aGlzLnN0YXJ0Q29sdW1uPXRoaXMuZW5kQ29sdW1uO3RoaXMuc3RhcnRDb2x1bW4+MDspe2NvbnN0IEVlPVpb''@;'; put 'put ''dGhpcy5lbmRDb2x1bW5dK3JlLVpbdGhpcy5zdGFydENvbHVtbi0xXTtpZih0aGlzLnN0YXJ0Q29sdW1uLT0xLEVlPmgpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1aW3RoaXMuc3RhcnRDb2x1bW5dKSYmdm9pZCAwIT09YT9hOm51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1t''@;'; put 'put ''aW5nQ29udGFpbmVyPSEoZCtoLSh2PjA/aCsxOmgpPC0xKmZ8fGQ+Wi5hdCgtMSkrcmV8fC0xKmQtaD4wKSxNPHRoaXMuZW5kQ29sdW1uJiYodGhpcy5lbmRDb2x1bW49TS0xKSxudWxsIT09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuY291bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENv''@;'; put 'put ''bHVtbisxKX19ZnVuY3Rpb24gYTNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBOZXQoYyl7dmFyIGw9ZnVuY3Rpb24gVmV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5j''@;'; put 'put ''YWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJp''@;'; put 'put ''bmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBCZXQgZXh0ZW5kcyBpM2V7Y29uc3RydWN0''@;'; put 'put ''b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGEzZSh0aGlzLCJjb2x1bW5TdGFydE9mZnNldCIsMCksYTNlKHRoaXMsImNvbHVtbkVuZE9mZnNldCIsMCl9ZmluYWxpemUobCl7dmFyIGE7c3VwZXIuZmluYWxpemUobCk7Y29uc3R7b3ZlcnJpZGVGbjpkLHRvdGFsQ29sdW1uczpoLHN0YXJ0UG9z''@;'; put 'put ''aXRpb25zOmZ9PWw7aWYobnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBkKXtjb25zdCB2PXRoaXMuc3RhcnRDb2x1bW4sTT10aGlzLmVuZENvbHVtbjtkKHRoaXMpLHRoaXMuY29sdW1uU3RhcnRPZmZzZXQ9di10aGlzLnN0YXJ0Q29sdW1uLHRoaXMuY29sdW1u''@;'; put 'put ''RW5kT2Zmc2V0PXRoaXMuZW5kQ29sdW1uLU19dGhpcy5zdGFydENvbHVtbjwwJiYodGhpcy5zdGFydENvbHVtbj0wKSx0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPWZbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbCxoPHRoaXMuZW5kQ29sdW1uJiYodGhpcy5lbmRD''@;'; put 'put ''b2x1bW49aC0xKSxudWxsIT09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuY291bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENvbHVtbisxKX19ZnVuY3Rpb24gekUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGpldChjKXt2YXIgbD1mdW5jdGlvbiB6ZXQoYyxsKXtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg''@;'; put 'put ''cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFVldHtjb25zdHJ1Y3Rvcigpe3pFKHRoaXMsImNvdW50IiwwKSx6RSh0aGlzLCJzdGFydENvbHVtbiIsbnVsbCksekUodGhpcywiZW5kQ29sdW1uIixudWxsKSx6RSh0aGlzLCJzdGFydFBvc2l0aW9uIixu''@;'; put 'put ''dWxsKSx6RSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkV2lkdGg6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCx2aWV3cG9ydFdpZHRoOmYsY29sdW1uV2lkdGg6dn09YTtkPj1o''@;'; put 'put ''JiZkK3Y8PWgrKGg+MD9mKzE6ZikmJihudWxsPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5zdGFydENvbHVtbj1sKSx0aGlzLmVuZENvbHVtbj1sKX1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydFdpZHRoOmgsaW5saW5lU3RhcnRPZmZzZXQ6Zix6ZXJv''@;'; put 'put ''QmFzZWRTY3JvbGxPZmZzZXQ6dix0b3RhbENvbHVtbnM6TSxuZWVkUmV2ZXJzZTpELHN0YXJ0UG9zaXRpb25zOlosY29sdW1uV2lkdGg6cmV9PWw7aWYodGhpcy5lbmRDb2x1bW49PT1NLTEmJkQpZm9yKHRoaXMuc3RhcnRDb2x1bW49dGhpcy5lbmRDb2x1bW47dGhpcy5zdGFydENvbHVtbj4w''@;'; put 'put ''Oyl7Y29uc3QgQmU9Wlt0aGlzLmVuZENvbHVtbl0rcmUtWlt0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKEJlPD1oJiYodGhpcy5zdGFydENvbHVtbi09MSksQmU+PWgpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1aW3RoaXMuc3RhcnRDb2x1bW5dKSYmdm9pZCAwIT09YT9hOm51''@;'; put 'put ''bGw7Y29uc3QgYmU9ZCtoLSh2PjA/aCsxOmgpLEVlPW51bGw9PT10aGlzLnN0YXJ0Q29sdW1uPzA6bC5nZXRDb2x1bW5XaWR0aCh0aGlzLnN0YXJ0Q29sdW1uKTt0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShiZTwtMSpmfHxkPlouYXQoLTEpfHwtMSpkLWg+LTEqRWUpLE08''@;'; put 'put ''dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1NLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiBvM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFpldChjKXt2YXIgbD1mdW5j''@;'; put 'put ''dGlvbiBXZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHMzZXtjb25zdHJ1Y3RvcihsKXtvM2UodGhpcywiY2FsY3VsYXRpb25UeXBlcyIsW10pLG8zZSh0aGlzLCJjYWxjdWxhdGlvblJlc3VsdHMiLG5ldyBNYXAp''@;'; put 'put ''LHRoaXMuY2FsY3VsYXRpb25UeXBlcz1sfV9pbml0aWFsaXplKGwpe3RoaXMuY2FsY3VsYXRpb25UeXBlcy5mb3JFYWNoKGE9PntsZXRbZCxoXT1hO3RoaXMuY2FsY3VsYXRpb25SZXN1bHRzLnNldChkLGgpLGguaW5pdGlhbGl6ZShsKX0pfV9wcm9jZXNzKGwsYSl7dGhpcy5jYWxjdWxhdGlv''@;'; put 'put ''blR5cGVzLmZvckVhY2goZD0+e2xldFssaF09ZDtyZXR1cm4gaC5wcm9jZXNzKGwsYSl9KX1fZmluYWxpemUobCl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVhY2goYT0+e2xldFssZF09YTtyZXR1cm4gZC5maW5hbGl6ZShsKX0pfWdldFJlc3VsdHNGb3IobCl7cmV0dXJuIHRoaXMuY2Fs''@;'; put 'put ''Y3VsYXRpb25SZXN1bHRzLmdldChsKX19ZnVuY3Rpb24gVzIoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFlldChjKXt2YXIgbD1mdW5jdGlvbiBHZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh''@;'; put 'put ''PT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJl''@;'; put 'put ''cikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzICRldCBleHRlbmRz''@;'; put 'put ''IHMzZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y2FsY3VsYXRpb25UeXBlczphLHZpZXdwb3J0SGVpZ2h0OmQsc2Nyb2xsT2Zmc2V0OmgsdG90YWxSb3dzOmYsZGVmYXVsdFJvd0hlaWdodDp2LHJvd0hlaWdodEZuOk0sb3ZlcnJpZGVGbjpELGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Wn09bDtz''@;'; put 'put ''dXBlcihhKSxXMih0aGlzLCJ2aWV3cG9ydEhlaWdodCIsMCksVzIodGhpcywic2Nyb2xsT2Zmc2V0IiwwKSxXMih0aGlzLCJ6ZXJvQmFzZWRTY3JvbGxPZmZzZXQiLDApLFcyKHRoaXMsInRvdGFsUm93cyIsMCksVzIodGhpcywicm93SGVpZ2h0Rm4iLG51bGwpLFcyKHRoaXMsInJvd0hlaWdo''@;'; put 'put ''dCIsMCksVzIodGhpcywib3ZlcnJpZGVGbiIsbnVsbCksVzIodGhpcywiaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCIsMCksVzIodGhpcywiaW5uZXJWaWV3cG9ydEhlaWdodCIsMCksVzIodGhpcywidG90YWxDYWxjdWxhdGVkSGVpZ2h0IiwwKSxXMih0aGlzLCJzdGFydFBvc2l0aW9ucyIs''@;'; put 'put ''W10pLFcyKHRoaXMsIm5lZWRSZXZlcnNlIiwhMCksdGhpcy5kZWZhdWx0SGVpZ2h0PXYsdGhpcy52aWV3cG9ydEhlaWdodD1kLHRoaXMuc2Nyb2xsT2Zmc2V0PWgsdGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQ9TWF0aC5tYXgoaCwwKSx0aGlzLnRvdGFsUm93cz1mLHRoaXMucm93SGVpZ2h0''@;'; put 'put ''Rm49TSx0aGlzLm92ZXJyaWRlRm49RCx0aGlzLmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ9Wj8/MCx0aGlzLmlubmVyVmlld3BvcnRIZWlnaHQ9dGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQrdGhpcy52aWV3cG9ydEhlaWdodC10aGlzLmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsdGhp''@;'; put 'put ''cy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXt0aGlzLl9pbml0aWFsaXplKHRoaXMpO2ZvcihsZXQgbD0wO2w8dGhpcy50b3RhbFJvd3M7bCsrKWlmKHRoaXMucm93SGVpZ2h0PXRoaXMuZ2V0Um93SGVpZ2h0KGwpLHRoaXMuX3Byb2Nlc3MobCx0aGlzKSx0aGlzLnN0YXJ0UG9zaXRpb25zLnB1''@;'; put 'put ''c2godGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQpLHRoaXMudG90YWxDYWxjdWxhdGVkSGVpZ2h0Kz10aGlzLnJvd0hlaWdodCx0aGlzLnRvdGFsQ2FsY3VsYXRlZEhlaWdodD49dGhpcy5pbm5lclZpZXdwb3J0SGVpZ2h0KXt0aGlzLm5lZWRSZXZlcnNlPSExO2JyZWFrfXRoaXMuX2ZpbmFs''@;'; put 'put ''aXplKHRoaXMpfWdldFJvd0hlaWdodChsKXtjb25zdCBhPXRoaXMucm93SGVpZ2h0Rm4obCk7cmV0dXJuIGlzTmFOKGEpP3RoaXMuZGVmYXVsdEhlaWdodDphfX1mdW5jdGlvbiBhMyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gS2V0KGMpe3ZhciBsPWZ1bmN0aW9uIHFldChjLGwpe2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp''@;'; put 'put ''dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVu''@;'; put 'put ''dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgX189NTA7Y2xhc3MgWGV0IGV4dGVuZHMgczNle2NvbnN0cnVjdG9yKGwpe2xldHtjYWxjdWxhdGlvblR5cGVzOmEsdmlld3BvcnRXaWR0aDpkLHNjcm9sbE9mZnNldDpoLHRvdGFsQ29sdW1u''@;'; put 'put ''czpmLGNvbHVtbldpZHRoRm46dixvdmVycmlkZUZuOk0saW5saW5lU3RhcnRPZmZzZXQ6RH09bDtzdXBlcihhKSxhMyh0aGlzLCJ2aWV3cG9ydFdpZHRoIiwwKSxhMyh0aGlzLCJzY3JvbGxPZmZzZXQiLDApLGEzKHRoaXMsInplcm9CYXNlZFNjcm9sbE9mZnNldCIsMCksYTModGhpcywidG90''@;'; put 'put ''YWxDb2x1bW5zIiwwKSxhMyh0aGlzLCJjb2x1bW5XaWR0aEZuIixudWxsKSxhMyh0aGlzLCJjb2x1bW5XaWR0aCIsMCksYTModGhpcywib3ZlcnJpZGVGbiIsbnVsbCksYTModGhpcywiaW5saW5lU3RhcnRPZmZzZXQiLDApLGEzKHRoaXMsInRvdGFsQ2FsY3VsYXRlZFdpZHRoIiwwKSxhMyh0''@;'; put 'put ''aGlzLCJzdGFydFBvc2l0aW9ucyIsW10pLGEzKHRoaXMsIm5lZWRSZXZlcnNlIiwhMCksdGhpcy52aWV3cG9ydFdpZHRoPWQsdGhpcy5zY3JvbGxPZmZzZXQ9aCx0aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldD1NYXRoLm1heChoLDApLHRoaXMudG90YWxDb2x1bW5zPWYsdGhpcy5jb2x1bW5X''@;'; put 'put ''aWR0aEZuPXYsdGhpcy5vdmVycmlkZUZuPU0sdGhpcy5pbmxpbmVTdGFydE9mZnNldD1ELHRoaXMuY2FsY3VsYXRlKCl9Y2FsY3VsYXRlKCl7dGhpcy5faW5pdGlhbGl6ZSh0aGlzKTtmb3IobGV0IGw9MDtsPHRoaXMudG90YWxDb2x1bW5zO2wrKylpZih0aGlzLmNvbHVtbldpZHRoPXRoaXMu''@;'; put 'put ''Z2V0Q29sdW1uV2lkdGgobCksdGhpcy5fcHJvY2VzcyhsLHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbnMucHVzaCh0aGlzLnRvdGFsQ2FsY3VsYXRlZFdpZHRoKSx0aGlzLnRvdGFsQ2FsY3VsYXRlZFdpZHRoKz10aGlzLmNvbHVtbldpZHRoLHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGg+PXRo''@;'; put 'put ''aXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0K3RoaXMudmlld3BvcnRXaWR0aCl7dGhpcy5uZWVkUmV2ZXJzZT0hMTticmVha310aGlzLl9maW5hbGl6ZSh0aGlzKX1nZXRDb2x1bW5XaWR0aChsKXtjb25zdCBhPXRoaXMuY29sdW1uV2lkdGhGbihsKTtyZXR1cm4gaXNOYU4oYSk/X186YX19Y29u''@;'; put 'put ''c3QgUWV0PWNsYXNzIEpldHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud290PWwud290LHRoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5kb21CaW5kaW5ncz1hLHRoaXMud3RTZXR0aW5ncz1kLHRoaXMud3RUYWJsZT1mLHRoaXMub3ZlcnNp''@;'; put 'put ''emVkUm93cz1bXSx0aGlzLm92ZXJzaXplZENvbHVtbkhlYWRlcnM9W10sdGhpcy5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkPXt9LHRoaXMuY2xpZW50SGVpZ2h0PTAsdGhpcy5yb3dIZWFkZXJXaWR0aD1OYU4sdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCx0aGlzLmNv''@;'; put 'put ''bHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMucm93c0NhbGN1bGF0b3JUeXBlcz1uZXcgTWFwKFtbInJlbmRlcmVkIiwoKT0+dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJlbmRlckFsbFJvd3MiKT9uZXcgTWV0Om5ldyBrZXRdLFsiZnVsbHlWaXNpYmxlIiwoKT0+bmV3IFJl''@;'; put 'put ''dF0sWyJwYXJ0aWFsbHlWaXNpYmxlIiwoKT0+bmV3IG4zZV1dKSx0aGlzLmNvbHVtbnNDYWxjdWxhdG9yVHlwZXM9bmV3IE1hcChbWyJyZW5kZXJlZCIsKCk9PnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyZW5kZXJBbGxDb2x1bW5zIik/bmV3IFBldDpuZXcgQmV0XSxbImZ1bGx5Vmlz''@;'; put 'put ''aWJsZSIsKCk9Pm5ldyBVZXRdLFsicGFydGlhbGx5VmlzaWJsZSIsKCk9Pm5ldyBpM2VdXSksdGhpcy5ldmVudE1hbmFnZXI9aCx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdywicmVzaXplIiwoKT0+e3RoaXMuY2xpZW50SGVp''@;'; put 'put ''Z2h0PXRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9KX1nZXRXb3Jrc3BhY2VIZWlnaHQoKXtjb25zdCBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXI7bGV0IGQ9MDtyZXR1cm4gZD1hPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMu''@;'; put 'put ''ZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ6eHUoYSk+MCYmYS5jbGllbnRIZWlnaHQ+MD9hLmNsaWVudEhlaWdodDoxLzAsZH1nZXRWaWV3cG9ydEhlaWdodCgpe2xldCBsPXRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCk7aWYobD09PTEvMCly''@;'; put 'put ''ZXR1cm4gbDtjb25zdCBhPXRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk7cmV0dXJuIGE+MCYmKGwtPWEpLGx9Z2V0V29ya3NwYWNlV2lkdGgoKXtjb25zdHtyb290RG9jdW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5s''@;'; put 'put ''aW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXI7bGV0IGg7aWYoZD09PWEpe2NvbnN0IGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpO2g9dGhpcy53dFRhYmxlLmhvbGRlci5vZmZzZXRXaWR0aCx0aGlzLmdldFJvd0hlYWRlcldpZHRoKCkrdGhpcy5z''@;'; put 'put ''dW1Db2x1bW5XaWR0aHMoMCxmKT5oJiYoaD1sLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCl9ZWxzZSBoPWQuY2xpZW50V2lkdGg7cmV0dXJuIGh9Z2V0Vmlld3BvcnRXaWR0aCgpe2NvbnN0IGw9dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpO2lmKGw9PT0xLzApcmV0dXJuIGw7Y29uc3Qg''@;'; put 'put ''YT10aGlzLmdldFJvd0hlYWRlcldpZHRoKCk7cmV0dXJuIGE+MD9sLWE6bH1oYXNWZXJ0aWNhbFNjcm9sbCgpe2lmKHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IGY9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVy''@;'; put 'put ''biBmLnNjcm9sbEhlaWdodD5mLmNsaWVudEhlaWdodH1jb25zdHtob2xkZXI6bCxoaWRlcjphfT10aGlzLnd0VGFibGUsaD1hLm9mZnNldEhlaWdodDtyZXR1cm4gbC5jbGllbnRIZWlnaHQ8aHx8aD50aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpfWhhc0hvcml6b250YWxTY3JvbGwoKXtpZih0''@;'; put 'put ''aGlzLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBmPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyZXR1cm4gZi5zY3JvbGxXaWR0aD5mLmNsaWVudFdpZHRofWNvbnN0e2hvbGRlcjpsLGhpZGVyOmF9PXRoaXMud3RUYWJsZSxo''@;'; put 'put ''PWEub2Zmc2V0V2lkdGg7cmV0dXJuIGwuY2xpZW50V2lkdGg8aHx8aD50aGlzLmdldFdvcmtzcGFjZVdpZHRoKCl9aXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRv''@;'; put 'put ''bUJpbmRpbmdzLnJvb3RXaW5kb3d9aXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93fXN1bUNvbHVtbldpZHRo''@;'; put 'put ''cyhsLGEpe2xldCBkPTAsaD1sO2Zvcig7aDxhOylkKz10aGlzLnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgoaCksaCs9MTtyZXR1cm4gZH1nZXRXb3Jrc3BhY2VPZmZzZXQoKXtyZXR1cm4gVTAodGhpcy53dFRhYmxlLmhvbGRlcil9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoP2lzTmFOKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0KSYmKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0PXh1KHRoaXMud3RUYWJsZS5USEVBRCkpOnRoaXMuY29sdW1uSGVhZGVySGVpZ2h0PTAsdGhpcy5jb2x1bW5I''@;'; put 'put ''ZWFkZXJIZWlnaHR9Z2V0Um93SGVhZGVyV2lkdGgoKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKTtpZihsKXt0aGlzLnJvd0hlYWRlcldpZHRoPTA7Zm9yKGxldCBk''@;'; put 'put ''PTAsaD1hLmxlbmd0aDtkPGg7ZCsrKXRoaXMucm93SGVhZGVyV2lkdGgrPWxbZF18fGx9aWYoaXNOYU4odGhpcy5yb3dIZWFkZXJXaWR0aCkpaWYoYS5sZW5ndGgpe2xldCBkPXRoaXMud3RUYWJsZS5UQUJMRS5xdWVyeVNlbGVjdG9yKCJUSCIpO3RoaXMucm93SGVhZGVyV2lkdGg9MDtmb3Io''@;'; put 'put ''bGV0IGg9MCxmPWEubGVuZ3RoO2g8ZjtoKyspZD8odGhpcy5yb3dIZWFkZXJXaWR0aCs9c3UoZCksZD1kLm5leHRTaWJsaW5nKTp0aGlzLnJvd0hlYWRlcldpZHRoKz01MH1lbHNlIHRoaXMucm93SGVhZGVyV2lkdGg9MDtyZXR1cm4gdGhpcy5yb3dIZWFkZXJXaWR0aD10aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygib25Nb2RpZnlSb3dIZWFkZXJXaWR0aCIsdGhpcy5yb3dIZWFkZXJXaWR0aCl8fHRoaXMucm93SGVhZGVyV2lkdGgsdGhpcy5yb3dIZWFkZXJXaWR0aH1jcmVhdGVSb3dzQ2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzBdP2FyZ3VtZW50c1swXTpbInJlbmRlcmVkIiwiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdO2NvbnN0e3d0U2V0dGluZ3M6YSx3dFRhYmxlOmR9PXRoaXM7bGV0IGYsdixoPXRoaXMuZ2V0Vmlld3BvcnRIZWlnaHQoKTt0aGlzLnJvd0hlYWRlcldpZHRoPU5hTjtsZXQg''@;'; put 'put ''TT10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wU2Nyb2xsUG9zaXRpb24tdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcFBhcmVudE9mZnNldDtjb25zdCBEPWEuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksWj1hLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLHJlPWEuZ2V0U2V0dGlu''@;'; put 'put ''ZygidG90YWxSb3dzIik7cmV0dXJuIEQmJk0+PTAmJih2PXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLEQpLE0rPXYsaC09diksWiYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuY2xvbmUmJih2PXRoaXMuZGF0YUFjY2Vzc09iamVj''@;'; put 'put ''dC5ib3R0b21PdmVybGF5LnN1bUNlbGxTaXplcyhyZS1aLHJlKSxoLT12KSxmPWQuaG9sZGVyLmNsaWVudEhlaWdodD09PWQuaG9sZGVyLm9mZnNldEhlaWdodD8wOmYwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSxuZXcgJGV0KHtjYWxjdWxhdGlvblR5cGVzOmwubWFwKGNlPT5b''@;'; put 'put ''Y2UsdGhpcy5yb3dzQ2FsY3VsYXRvclR5cGVzLmdldChjZSkoKV0pLHZpZXdwb3J0SGVpZ2h0Omgsc2Nyb2xsT2Zmc2V0Ok0sdG90YWxSb3dzOmEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksZGVmYXVsdFJvd0hlaWdodDp0aGlzLmluc3RhbmNlLnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJv''@;'; put 'put ''d0hlaWdodCgpLHJvd0hlaWdodEZuOmNlPT5kLmdldFJvd0hlaWdodChjZSksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIpLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Zn0pfWNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKCl7bGV0''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlsicmVuZGVyZWQiLCJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl07Y29uc3R7d3RTZXR0aW5nczphLHd0VGFibGU6ZH09dGhpcztsZXQgaD10aGlzLmdldFZpZXdwb3J0V2lk''@;'; put 'put ''dGgoKSxmPU1hdGguYWJzKHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFNjcm9sbFBvc2l0aW9uKS10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRQYXJlbnRPZmZzZXQ7dGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9TmFOO2NvbnN0IHY9YS5nZXRTZXR0aW5nKCJmaXhl''@;'; put 'put ''ZENvbHVtbnNTdGFydCIpO2lmKHYmJmY+PTApe2NvbnN0IE09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCx2KTtmKz1NLGgtPU19cmV0dXJuIGQuaG9sZGVyLmNsaWVudFdpZHRoIT09ZC5ob2xkZXIub2Zmc2V0V2lkdGgmJihoLT1mMCh0''@;'; put 'put ''aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLG5ldyBYZXQoe2NhbGN1bGF0aW9uVHlwZXM6bC5tYXAoTT0+W00sdGhpcy5jb2x1bW5zQ2FsY3VsYXRvclR5cGVzLmdldChNKSgpXSksdmlld3BvcnRXaWR0aDpoLHNjcm9sbE9mZnNldDpmLHRvdGFsQ29sdW1uczphLmdldFNldHRpbmco''@;'; put 'put ''InRvdGFsQ29sdW1ucyIpLGNvbHVtbldpZHRoRm46TT0+ZC5nZXRDb2x1bW5XaWR0aChNKSxvdmVycmlkZUZuOmEuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiksaW5saW5lU3RhcnRPZmZzZXQ6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0''@;'; put 'put ''YXJ0UGFyZW50T2Zmc2V0fSl9Y3JlYXRlQ2FsY3VsYXRvcnMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyxkPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoKSxoPXRoaXMuY3Jl''@;'; put 'put ''YXRlQ29sdW1uc0NhbGN1bGF0b3IoKTtpZihsJiYhYS5nZXRTZXR0aW5nKCJyZW5kZXJBbGxSb3dzIikpe2NvbnN0IGY9ZC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKTtsPXRoaXMuYXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChmKX1pZihsJiYhYS5nZXRT''@;'; put 'put ''ZXR0aW5nKCJyZW5kZXJBbGxDb2x1bW5zIikpe2NvbnN0IGY9aC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKTtsPXRoaXMuYXJlQWxsUHJvcG9zZWRWaXNpYmxlQ29sdW1uc0FscmVhZHlSZW5kZXJlZChmKX1yZXR1cm4gbHx8KHRoaXMucm93c1JlbmRlckNhbGN1bGF0b3I9ZC5nZXRS''@;'; put 'put ''ZXN1bHRzRm9yKCJyZW5kZXJlZCIpLHRoaXMuY29sdW1uc1JlbmRlckNhbGN1bGF0b3I9aC5nZXRSZXN1bHRzRm9yKCJyZW5kZXJlZCIpKSx0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxh''@;'; put 'put ''dG9yPWguZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9ZC5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9aC5nZXRSZXN1bHRzRm9yKCJw''@;'; put 'put ''YXJ0aWFsbHlWaXNpYmxlIiksbH1jcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMoKXtjb25zdCBsPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoWyJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl0pLGE9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcihbImZ1bGx5VmlzaWJsZSIs''@;'; put 'put ''InBhcnRpYWxseVZpc2libGUiXSk7dGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9bC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj1hLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMucm93c1BhcnRpYWxseVZpc2li''@;'; put 'put ''bGVDYWxjdWxhdG9yPWwuZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPWEuZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpfWFyZUFsbFByb3Bvc2VkVmlzaWJsZVJvd3NBbHJlYWR5UmVuZGVyZWQo''@;'; put 'put ''bCl7aWYoIXRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiExO2xldHtzdGFydFJvdzphLGVuZFJvdzpkfT1sO2lmKG51bGw9PT1hJiZudWxsPT09ZCl7aWYoIWwuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcilyZXR1cm4hMDthPXRoaXMucm93c1BhcnRpYWxseVZpc2libGVD''@;'; put 'put ''YWxjdWxhdG9yLnN0YXJ0Um93LGQ9dGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93fWNvbnN0e3N0YXJ0Um93OmgsZW5kUm93OmYscm93U3RhcnRPZmZzZXQ6dixyb3dFbmRPZmZzZXQ6TX09dGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcixEPXRoaXMud3RTZXR0aW5n''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xLFo9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkIik7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoWikmJlo+MD8oYT1NYXRoLm1heCgwLGEtTWF0aC5taW4odixaKSksZD1NYXRoLm1pbihE''@;'; put 'put ''LGQrTWF0aC5taW4oTSxaKSkpOiJhdXRvIj09PVomJihhPU1hdGgubWF4KDAsYS1NYXRoLmNlaWwodi8yKSksZD1NYXRoLm1pbihELGQrTWF0aC5jZWlsKE0vMikpKSwhKGE8aHx8YT09PWgmJmE+MHx8ZD5mfHxkPT09ZiYmZDxEKX1hcmVBbGxQcm9wb3NlZFZpc2libGVDb2x1bW5zQWxyZWFk''@;'; put 'put ''eVJlbmRlcmVkKGwpe2lmKCF0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcilyZXR1cm4hMTtsZXR7c3RhcnRDb2x1bW46YSxlbmRDb2x1bW46ZH09bDtpZihudWxsPT09YSYmbnVsbD09PWQpe2lmKCFsLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIpcmV0dXJuITA7YT10aGlzLmNv''@;'; put 'put ''bHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbixkPXRoaXMuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZENvbHVtbn1jb25zdHtzdGFydENvbHVtbjpoLGVuZENvbHVtbjpmLGNvbHVtblN0YXJ0T2Zmc2V0OnYsY29sdW1uRW5kT2Zmc2V0Ok19''@;'; put 'put ''PXRoaXMuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IsRD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiktMSxaPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZCIpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2Vy''@;'; put 'put ''KFopJiZaPjA/KGE9TWF0aC5tYXgoMCxhLU1hdGgubWluKHYsWikpLGQ9TWF0aC5taW4oRCxkK01hdGgubWluKE0sWikpKToiYXV0byI9PT1aJiYoYT1NYXRoLm1heCgwLGEtTWF0aC5jZWlsKHYvMikpLGQ9TWF0aC5taW4oRCxkK01hdGguY2VpbChNLzIpKSksIShhPGh8fGE9PT1oJiZhPjB8''@;'; put 'put ''fGQ+Znx8ZD09PWYmJmQ8RCl9cmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCl7WG8odGhpcy5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkLChsLGEsZCk9PntkW2FdPXZvaWQgMH0pfX07ZnVuY3Rpb24gbDNlKGMsbCxhKXtjM2UoYyxsKSxsLnNldChjLGEpfWZ1''@;'; put 'put ''bmN0aW9uIGMzZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gWmMoYyxsKXtyZXR1cm4gYy5nZXQoVUUoYyxsKSl9ZnVuY3Rpb24gdTNl''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4gYy5zZXQoVUUoYyxsKSxhKSxhfWZ1bmN0aW9uIFVFKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90''@;'; put 'put ''IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX15KDkzOTA5KTt2YXIgbzM9bmV3IFdlYWtNYXAsdjE9bmV3IFdlYWtNYXAsbFA9bmV3IFdlYWtTZXQ7Y2xhc3MgdHR0e2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIGV0dChjLGwpe2MzZShjLGwpLGwuYWRkKGMpfSkodGhpcyxsUCksbDNlKHRoaXMs''@;'; put 'put ''bzMsdm9pZCAwKSxsM2UodGhpcyx2MSx2b2lkIDApfXNldEFjdGl2ZU92ZXJsYXkobCl7cmV0dXJuIHUzZSh2MSx0aGlzLGwpLHRoaXN9c2V0QWN0aXZlU2VsZWN0aW9uKGwpe3JldHVybiB1M2UobzMsdGhpcyxsKSx0aGlzfXNjYW4oKXtjb25zdCBsPVpjKG8zLHRoaXMpLnNldHRpbmdzLnNl''@;'; put 'put ''bGVjdGlvblR5cGUsYT1uZXcgU2V0O3JldHVybiJhY3RpdmUtaGVhZGVyIj09PWw/KHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSk6ImFyZWEiPT09bD90aGlzLnNjYW5DZWxsc1Jhbmdl''@;'; put 'put ''KGQ9PmEuYWRkKGQpKToiZm9jdXMiPT09bD8odGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpKToiZmlsbCI9PT1sP3RoaXMuc2Nh''@;'; put 'put ''bkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpOiJoZWFkZXIiPT09bD8odGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpKToicm93Ij09PWw/KHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShk''@;'; put 'put ''PT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luQ2VsbHNSYW5nZShkPT5hLmFkZChkKSkpOiJjb2x1bW4iPT09bCYmKHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuQ29sdW1uc0luQ2VsbHNSYW5nZShkPT5hLmFkZChkKSkpLGF9c2NhbkNvbHVt''@;'; put 'put ''bnNJbkhlYWRlcnNSYW5nZShsKXtjb25zdFthLGQsaCxmXT1aYyhvMyx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6dn09WmModjEsdGhpcyksTT12LmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCksRD12LmdldENvbHVtbkhlYWRlcnNDb3VudCgpO2xldCBaPTA7Zm9yKGxldCByZT0tdi5n''@;'; put 'put ''ZXRSb3dIZWFkZXJzQ291bnQoKTtyZTxNO3JlKyspe2NvbnN0IGNlPXYuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UocmUpO2lmKCEoY2U8ZHx8Y2U+Zikpe2ZvcihsZXQgYmU9LUQ7YmU8MDtiZSsrKXtpZihiZTxhfHxiZT5oKWNvbnRpbnVlO2NvbnN0IEVlPWJlK0Q7bGV0IEJlPXYu''@;'; put 'put ''Z2V0Q29sdW1uSGVhZGVyKGNlLEVlKTtjb25zdCBxZT1aYyh2MSx0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsY2UsRWUse3NlbGVjdGlvblR5cGU6WmMobzMsdGhpcykuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxjb2x1bW5DdXJzb3I6WixzZWxl''@;'; put 'put ''Y3Rpb25XaWR0aDpmLWQrMX0pO251bGwhPT1xZSYmKHFlIT09Y2UmJihCZT12LmdldENvbHVtbkhlYWRlcihxZSxFZSkpLGwoQmUpKX1aKz0xfX19c2NhblJvd3NJbkhlYWRlcnNSYW5nZShsKXtjb25zdFthLGQsaCxmXT1aYyhvMyx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6dn09WmMo''@;'; put 'put ''djEsdGhpcyksTT12LmdldFJlbmRlcmVkUm93c0NvdW50KCksRD12LmdldFJvd0hlYWRlcnNDb3VudCgpO2xldCBaPTA7Zm9yKGxldCByZT0tdi5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKTtyZTxNO3JlKyspe2NvbnN0IGNlPXYucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UocmUpO2lmKCEo''@;'; put 'put ''Y2U8YXx8Y2U+aCkpe2ZvcihsZXQgYmU9LUQ7YmU8MDtiZSsrKXtpZihiZTxkfHxiZT5mKWNvbnRpbnVlO2NvbnN0IEVlPWJlK0Q7bGV0IEJlPXYuZ2V0Um93SGVhZGVyKGNlLEVlKTtjb25zdCBxZT1aYyh2MSx0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRl''@;'; put 'put ''ciIsY2UsRWUse3NlbGVjdGlvblR5cGU6WmMobzMsdGhpcykuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxyb3dDdXJzb3I6WixzZWxlY3Rpb25IZWlnaHQ6aC1hKzF9KTtudWxsIT09cWUmJihxZSE9PWNlJiYoQmU9di5nZXRSb3dIZWFkZXIocWUsRWUpKSxsKEJlKSl9Wis9MX19fXNjYW5DZWxs''@;'; put 'put ''c1JhbmdlKGwpe2NvbnN0e3d0VGFibGU6YX09WmModjEsdGhpcyk7VUUobFAsdGhpcyxudHQpLmNhbGwodGhpcywoZCxoKT0+e2NvbnN0IGY9YS5nZXRDZWxsKFpjKHYxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZCxoKSksdj1aYyh2MSx0aGlzKS5nZXRTZXR0aW5nKCJvbkFmdGVyRHJhd1Nl''@;'; put 'put ''bGVjdGlvbiIsZCxoLFpjKG8zLHRoaXMpLnNldHRpbmdzLmxheWVyTGV2ZWwpOyJzdHJpbmciPT10eXBlb2YgdiYmVGkoZix2KSxsKGYpfSl9c2NhblJvd3NJbkNlbGxzUmFuZ2UobCl7Y29uc3RbYSwsZF09WmMobzMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOmh9PVpjKHYxLHRoaXMp''@;'; put 'put ''O1VFKGxQLHRoaXMsZDNlKS5jYWxsKHRoaXMsKGYsdik9PntpZihmPj1hJiZmPD1kKXtjb25zdCBNPWguZ2V0Q2VsbChaYyh2MSx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGYsdikpO2woTSl9fSl9c2NhbkNvbHVtbnNJbkNlbGxzUmFuZ2UobCl7Y29uc3RbLGEsLGRdPVpjKG8zLHRoaXMpLmdl''@;'; put 'put ''dENvcm5lcnMoKSx7d3RUYWJsZTpofT1aYyh2MSx0aGlzKTtVRShsUCx0aGlzLGQzZSkuY2FsbCh0aGlzLChmLHYpPT57aWYodj49YSYmdjw9ZCl7Y29uc3QgTT1oLmdldENlbGwoWmModjEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhmLHYpKTtsKE0pfX0pfX1mdW5jdGlvbiBudHQoYyl7bGV0''@;'; put 'put ''W2wsYSxkLGhdPVpjKG8zLHRoaXMpLmdldENvcm5lcnMoKTtpZihsPDAmJmQ8MHx8YTwwJiZoPDApcmV0dXJuO2NvbnN0e3d0VGFibGU6Zn09WmModjEsdGhpcyksdj1sIT09ZHx8YSE9PWg7aWYoYT1NYXRoLm1heChhLDApLGg9TWF0aC5tYXgoaCwwKSxsPU1hdGgubWF4KGwsMCksZD1NYXRo''@;'; put 'put ''Lm1heChkLDApLHYpe2lmKGE9TWF0aC5tYXgoYSxmLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSksaD1NYXRoLm1pbihoLGYuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCkpLGw9TWF0aC5tYXgobCxmLmdldEZpcnN0UmVuZGVyZWRSb3coKSksZD1NYXRoLm1pbihkLGYuZ2V0TGFzdFJlbmRlcmVk''@;'; put 'put ''Um93KCkpLGg8YXx8ZDxsKXJldHVybn1lbHNlIGlmKCFFcChmLmdldENlbGwoWmModjEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhsLGEpKSkpcmV0dXJuO2ZvcihsZXQgTT1sO008PWQ7TSs9MSlmb3IobGV0IEQ9YTtEPD1oO0QrPTEpYyhNLEQpfWZ1bmN0aW9uIGQzZShjKXtjb25zdHt3dFRh''@;'; put 'put ''YmxlOmx9PVpjKHYxLHRoaXMpLGE9bC5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLGQ9bC5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgaD0wO2g8YTtoKz0xKXtjb25zdCBmPWwucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoaCk7Zm9yKGxldCB2PTA7djxkO3YrPTEpYyhmLGwu''@;'; put 'put ''Y29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UodikpfX1jb25zdCBoM2U9Y2xhc3MgcnR0e2NvbnN0cnVjdG9yKGwsYSl7YSYmKHRoaXMuZXZlbnRNYW5hZ2VyPWwuZXZlbnRNYW5hZ2VyLHRoaXMuaW5zdGFuY2U9bCx0aGlzLndvdD1sLHRoaXMuc2V0dGluZ3M9YSx0aGlzLm1vdXNlRG93''@;'; put 'put ''bj0hMSx0aGlzLm1haW49bnVsbCx0aGlzLnRvcD1udWxsLHRoaXMuYm90dG9tPW51bGwsdGhpcy5zdGFydD1udWxsLHRoaXMuZW5kPW51bGwsdGhpcy50b3BTdHlsZT1udWxsLHRoaXMuYm90dG9tU3R5bGU9bnVsbCx0aGlzLnN0YXJ0U3R5bGU9bnVsbCx0aGlzLmVuZFN0eWxlPW51bGwsdGhp''@;'; put 'put ''cy5jb3JuZXJEZWZhdWx0U3R5bGU9dksodGhpcy5pbnN0YW5jZSksdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldD0tTWF0aC5jZWlsKHBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yKSx0aGlzLmNvcm5lcj1udWxsLHRoaXMuY29ybmVyU3R5bGU9bnVsbCx0''@;'; put 'put ''aGlzLmNyZWF0ZUJvcmRlcnMoYSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0IGw9dGhpcy53b3Qucm9vdERvY3VtZW50LmJvZHk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLCgpPT50aGlzLm9uTW91''@;'; put 'put ''c2VEb3duKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpO2ZvcihsZXQgYT0wLGQ9dGhpcy5tYWluLmNoaWxkTm9kZXMubGVuZ3RoO2E8ZDthKyspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0''@;'; put 'put ''aGlzLm1haW4uY2hpbGROb2Rlc1thXSwibW91c2VlbnRlciIsZj0+dGhpcy5vbk1vdXNlRW50ZXIoZix0aGlzLm1haW4uY2hpbGROb2Rlc1thXSkpfW9uTW91c2VEb3duKCl7dGhpcy5tb3VzZURvd249ITB9b25Nb3VzZVVwKCl7dGhpcy5tb3VzZURvd249ITF9b25Nb3VzZUVudGVyKGwsYSl7''@;'; put 'put ''aWYoIXRoaXMubW91c2VEb3dufHwhdGhpcy53b3QuZ2V0U2V0dGluZygiaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlciIpKXJldHVybjtsLnByZXZlbnREZWZhdWx0KCksQjIobCk7Y29uc3QgZD10aGlzLGg9dGhpcy53b3Qucm9vdERvY3VtZW50LmJvZHksZj1hLmdldEJvdW5kaW5nQ2xpZW50''@;'; put 'put ''UmVjdCgpO2Euc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLGZ1bmN0aW9uIE0oRCl7KGZ1bmN0aW9uIHYoRCl7aWYoRC5jbGllbnRZPE1hdGguZmxvb3IoZi50b3ApfHxELmNsaWVudFk+TWF0aC5jZWlsKGYudG9w''@;'; put 'put ''K2YuaGVpZ2h0KXx8RC5jbGllbnRYPE1hdGguZmxvb3IoZi5sZWZ0KXx8RC5jbGllbnRYPk1hdGguY2VpbChmLmxlZnQrZi53aWR0aCkpcmV0dXJuITB9KShEKSYmKGQuZXZlbnRNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoaCwibW91c2Vtb3ZlIixNKSxhLnN0eWxlLmRpc3BsYXk9ImJs''@;'; put 'put ''b2NrIil9KX1jcmVhdGVCb3JkZXJzKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLndvdDt0aGlzLm1haW49YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtjb25zdCBkPVsidG9wIiwic3RhcnQiLCJib3R0b20iLCJlbmQiLCJjb3JuZXIiXTtsZXQgaD10aGlzLm1haW4uc3R5bGU7aC5wb3Np''@;'; put 'put ''dGlvbj0iYWJzb2x1dGUiLGgudG9wPTAsaC5sZWZ0PTA7Zm9yKGxldCBNPTA7TTw1O00rKyl7Y29uc3QgRD1kW01dLFo9YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtaLmNsYXNzTmFtZT1gd3RCb3JkZXIgJHt0aGlzLnNldHRpbmdzLmNsYXNzTmFtZXx8IiJ9YCx0aGlzLnNldHRpbmdzW0RdJiZ0''@;'; put 'put ''aGlzLnNldHRpbmdzW0RdLmhpZGUmJihaLmNsYXNzTmFtZSs9IiBoaWRkZW4iKSxoPVouc3R5bGUsaC5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5zZXR0aW5nc1tEXSYmdGhpcy5zZXR0aW5nc1tEXS5jb2xvcj90aGlzLnNldHRpbmdzW0RdLmNvbG9yOmwuYm9yZGVyLmNvbG9yLGguaGVpZ2h0PXRo''@;'; put 'put ''aXMuc2V0dGluZ3NbRF0mJnRoaXMuc2V0dGluZ3NbRF0ud2lkdGg/YCR7dGhpcy5zZXR0aW5nc1tEXS53aWR0aH1weGA6YCR7bC5ib3JkZXIud2lkdGh9cHhgLGgud2lkdGg9dGhpcy5zZXR0aW5nc1tEXSYmdGhpcy5zZXR0aW5nc1tEXS53aWR0aD9gJHt0aGlzLnNldHRpbmdzW0RdLndpZHRo''@;'; put 'put ''fXB4YDpgJHtsLmJvcmRlci53aWR0aH1weGAsdGhpcy5tYWluLmFwcGVuZENoaWxkKFopfXRoaXMudG9wPXRoaXMubWFpbi5jaGlsZE5vZGVzWzBdLHRoaXMuc3RhcnQ9dGhpcy5tYWluLmNoaWxkTm9kZXNbMV0sdGhpcy5ib3R0b209dGhpcy5tYWluLmNoaWxkTm9kZXNbMl0sdGhpcy5lbmQ9''@;'; put 'put ''dGhpcy5tYWluLmNoaWxkTm9kZXNbM10sdGhpcy50b3BTdHlsZT10aGlzLnRvcC5zdHlsZSx0aGlzLnN0YXJ0U3R5bGU9dGhpcy5zdGFydC5zdHlsZSx0aGlzLmJvdHRvbVN0eWxlPXRoaXMuYm90dG9tLnN0eWxlLHRoaXMuZW5kU3R5bGU9dGhpcy5lbmQuc3R5bGUsdGhpcy5jb3JuZXI9dGhp''@;'; put 'put ''cy5tYWluLmNoaWxkTm9kZXNbNF0sdGhpcy5jb3JuZXIuY2xhc3NOYW1lKz0iIGNvcm5lciIsdGhpcy5jb3JuZXJTdHlsZT10aGlzLmNvcm5lci5zdHlsZSx0aGlzLmNvcm5lclN0eWxlLndpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxl''@;'; put 'put ''LmhlaWdodD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHR9cHhgLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyPVtgJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyU3R5bGUsdGhpcy5jb3JuZXJEZWZh''@;'; put 'put ''dWx0U3R5bGUuYm9yZGVyQ29sb3JdLmpvaW4oIiAiKSxBcCgpJiZ0aGlzLmluc3RhbmNlLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpJiZ0aGlzLmNyZWF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzKCksdGhpcy5kaXNhcHBlYXIoKTtjb25zdHt3dFRhYmxlOmZ9PXRoaXMud290''@;'; put 'put ''O2xldCB2PWYuYm9yZGVyc0hvbGRlcjt2fHwodj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHYuY2xhc3NOYW1lPSJodEJvcmRlcnMiLGYuYm9yZGVyc0hvbGRlcj12LGYuc3ByZWFkZXIuYXBwZW5kQ2hpbGQodikpLHYuYXBwZW5kQ2hpbGQodGhpcy5tYWluKX1jcmVhdGVNdWx0aXBsZVNlbGVj''@;'; put 'put ''dG9ySGFuZGxlcygpe2NvbnN0e3Jvb3REb2N1bWVudDpsLHN0eWxlc0hhbmRsZXI6YX09dGhpcy53b3QsZD1hLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1zaXplIiksaD1hLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItcmFk''@;'; put 'put ''aXVzIiksZj1hLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1iYWNrZ3JvdW5kLWNvbG9yIiksdj1hLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItd2lkdGgiKSxNPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUt''@;'; put 'put ''aGFuZGxlLWJvcmRlci1jb2xvciIpO3RoaXMuc2VsZWN0aW9uSGFuZGxlcz17dG9wOmwuY3JlYXRlRWxlbWVudCgiRElWIiksdG9wSGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbUhpdEFyZWE6bC5jcmVhdGVFbGVtZW50''@;'; put 'put ''KCJESVYiKX0sdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZSB0b3BMZWZ0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIHRvcExl''@;'; put 'put ''ZnRTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuY2xhc3NOYW1lPSJi''@;'; put 'put ''b3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzPXt0b3A6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5zdHlsZSx0b3BIaXRBcmVhOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy50''@;'; put 'put ''b3BIaXRBcmVhLnN0eWxlLGJvdHRvbTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLnN0eWxlLGJvdHRvbUhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuc3R5bGV9LFhvKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiNDBweCIsd2lkdGg6IjQwcHgi''@;'; put 'put ''LCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCg0MC8xLjUsMTApfXB4YH0sKGJlLEVlKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJlYVtFZV09YmUsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BIaXRBcmVhW0VlXT1iZX0pLFhvKGEuaXNDbGFz''@;'; put 'put ''c2ljVGhlbWUoKT97cG9zaXRpb246ImFic29sdXRlIixoZWlnaHQ6IjEwcHgiLHdpZHRoOiIxMHB4IiwiYm9yZGVyLXJhZGl1cyI6YCR7cGFyc2VJbnQoMTAvMS41LDEwKX1weGAsYmFja2dyb3VuZDoiI0Y1RjVGRiIsYm9yZGVyOiIxcHggc29saWQgIzQyODVjOCJ9Ontwb3NpdGlvbjoiYWJz''@;'; put 'put ''b2x1dGUiLGhlaWdodDpgJHtkfXB4YCx3aWR0aDpgJHtkfXB4YCwiYm9yZGVyLXJhZGl1cyI6YCR7aH1weGAsYmFja2dyb3VuZDpgJHtmfWAsYm9yZGVyOmAke3Z9cHggc29saWQgJHtNfWB9LChiZSxFZSk9Pnt0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbVtFZV09YmUsdGhp''@;'; put 'put ''cy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BbRWVdPWJlfSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3ApLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhp''@;'; put 'put ''cy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEpLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYSl9aXNQYXJ0UmFuZ2UobCxhKXtjb25zdCBkPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0QXJlYVNlbGVjdGlvbigpO3JldHVy''@;'; put 'put ''biEoIWQuY2VsbFJhbmdlfHxsPT09ZC5jZWxsUmFuZ2UudG8ucm93JiZhPT09ZC5jZWxsUmFuZ2UudG8uY29sKX11cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXNQb3NpdGlvbihsLGEsZCxoLGYsdil7Y29uc3QgRD10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUi''@;'; put 'put ''KT8icmlnaHQiOiJsZWZ0Iix7dG9wOlosdG9wSGl0QXJlYTpyZSxib3R0b206Y2UsYm90dG9tSGl0QXJlYTpiZX09dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcyxFZT1wYXJzZUludChaLmJvcmRlcldpZHRoLDEwKSxCZT1wYXJzZUludChaLndpZHRoLDEwKSxxZT1wYXJzZUludChyZS53''@;'; put 'put ''aWR0aCwxMCkscnQ9dGhpcy53b3Qud3RUYWJsZS5nZXRXaWR0aCgpLHB0PXRoaXMud290Lnd0VGFibGUuZ2V0SGVpZ2h0KCk7Wi50b3A9YCR7cGFyc2VJbnQoZC1CZS0xLDEwKX1weGAsWltEXT1gJHtwYXJzZUludChoLUJlLTEsMTApfXB4YCxyZS50b3A9YCR7cGFyc2VJbnQoZC1xZS80KjMs''@;'; put 'put ''MTApfXB4YCxyZVtEXT1gJHtwYXJzZUludChoLXFlLzQqMywxMCl9cHhgO2NvbnN0IGR0PU1hdGgubWluKHBhcnNlSW50KGgrZiwxMCkscnQtQmUtMipFZSksSnQ9TWF0aC5taW4ocGFyc2VJbnQoaCtmLXFlLzQsMTApLHJ0LXFlLTIqRWUpO2NlW0RdPWAke2R0fXB4YCxiZVtEXT1gJHtKdH1w''@;'; put 'put ''eGA7Y29uc3Qgdm49TWF0aC5taW4ocGFyc2VJbnQoZCt2LDEwKSxwdC1CZS0yKkVlKSxDbj1NYXRoLm1pbihwYXJzZUludChkK3YtcWUvNCwxMCkscHQtcWUtMipFZSk7Y2UudG9wPWAke3ZufXB4YCxiZS50b3A9YCR7Q259cHhgLHRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUm''@;'; put 'put ''JnRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUoKT8oWi5kaXNwbGF5PSJibG9jayIscmUuZGlzcGxheT0iYmxvY2siLHRoaXMuaXNQYXJ0UmFuZ2UobCxhKT8oY2UuZGlzcGxheT0ibm9uZSIsYmUuZGlzcGxheT0ibm9uZSIpOihjZS5kaXNwbGF5PSJibG9jayIsYmUuZGlzcGxh''@;'; put 'put ''eT0iYmxvY2siKSk6KFouZGlzcGxheT0ibm9uZSIsY2UuZGlzcGxheT0ibm9uZSIscmUuZGlzcGxheT0ibm9uZSIsYmUuZGlzcGxheT0ibm9uZSIpLGw9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfHxhPT09dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpPyhaLnpJbmRleD0iOTk5OSIscmUuekluZGV4PSI5OTk5Iik6KFouekluZGV4PSIiLHJlLnpJbmRleD0iIil9YXBwZWFyKGwpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO2xldFthLGQsaCxmXT1sO2lmKGE8MCYmaDwwfHxkPDAmJmY8MClyZXR1''@;'; put 'put ''cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2NvbnN0e3d0VGFibGU6dixyb290RG9jdW1lbnQ6TSxyb290V2luZG93OkR9PXRoaXMud290LFo9YSE9PWh8fGQhPT1mLHJlPXYuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpLGNlPXYuZ2V0TGFzdFJlbmRlcmVkUm93KCksYmU9di5nZXRGaXJzdFJlbmRl''@;'; put 'put ''cmVkQ29sdW1uKCksRWU9di5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKTtpZihiZTwwJiZFZTwwfHxyZTwwJiZjZTwwKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7bGV0IEJlO2lmKFope2lmKGQ9TWF0aC5tYXgoZCxiZSksZj1NYXRoLm1pbihmLEVlKSxhPU1hdGgubWF4KGEscmUpLGg9''@;'; put 'put ''TWF0aC5taW4oaCxjZSksZjxkfHxoPGEpcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtCZT12LmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhhLGQpKX1lbHNlIGlmKEJlPXYuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGEsZCkpLCFFcChCZSkpcmV0dXJu''@;'; put 'put ''IHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtjb25zdCBxZT1aP3YuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGgsZikpOkJlLHJ0PVUwKEJlKSxwdD1aP1UwKHFlKTpydCxkdD1VMCh2LlRBQkxFKSxKdD1ydC50b3Asdm49cnQubGVmdCxDbj10aGlzLndvdC53dFNldHRpbmdzLmdl''@;'; put 'put ''dFNldHRpbmcoInJ0bE1vZGUiKTtsZXQgdG49MCxNbj0wO2lmKENuKXtjb25zdCBJcj1zdSh2LlRBQkxFKSwkcj1zdShCZSk7TW49dm4rJHItcHQubGVmdCx0bj1ELmlubmVyV2lkdGgtdm4tJHItKEQuaW5uZXJXaWR0aC1kdC5sZWZ0LUlyKS0xfWVsc2UgTW49cHQubGVmdCtzdShxZSktdm4s''@;'; put 'put ''dG49dm4tZHQubGVmdC0xO2lmKHRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZChhLGgpKXtjb25zdCAkcj10aGlzLmdldERpbWVuc2lvbnNGcm9tSGVhZGVyKCJjb2x1bW5zIixkLGYsYSxkdCk7bGV0IHdpPW51bGw7JHImJihbd2ksdG4sTW5dPSRyKSx3aSYmKEJlPXdpKX1sZXQgQ3I9SnQt''@;'; put 'put ''ZHQudG9wLTEsR3I9cHQudG9wK3h1KHFlKS1KdDtpZih0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoZCxmKSl7Y29uc3QgJHI9dGhpcy5nZXREaW1lbnNpb25zRnJvbUhlYWRlcigicm93cyIsYSxoLGQsZHQpO2xldCB3aT1udWxsOyRyJiYoW3dpLENyLEdyXT0kciksd2kmJihCZT13aSl9Y29u''@;'; put 'put ''c3QgbXI9RC5nZXRDb21wdXRlZFN0eWxlKEJlKTtwYXJzZUludChtci5ib3JkZXJUb3BXaWR0aCwxMCk+MCYmKENyKz0xLEdyPUdyPjA/R3ItMTowKSxwYXJzZUludChtcltDbj8iYm9yZGVyUmlnaHRXaWR0aCI6ImJvcmRlckxlZnRXaWR0aCJdLDEwKT4wJiYodG4rPTEsTW49TW4+MD9Nbi0x''@;'; put 'put ''OjApO2NvbnN0IEduPUNuPyJyaWdodCI6ImxlZnQiO3RoaXMudG9wU3R5bGUudG9wPWAke0NyfXB4YCx0aGlzLnRvcFN0eWxlW0duXT1gJHt0bn1weGAsdGhpcy50b3BTdHlsZS53aWR0aD1gJHtNbn1weGAsdGhpcy50b3BTdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5zdGFydFN0eWxlLnRv''@;'; put 'put ''cD1gJHtDcn1weGAsdGhpcy5zdGFydFN0eWxlW0duXT1gJHt0bn1weGAsdGhpcy5zdGFydFN0eWxlLmhlaWdodD1gJHtHcn1weGAsdGhpcy5zdGFydFN0eWxlLmRpc3BsYXk9ImJsb2NrIjtjb25zdCBhaT1NYXRoLmZsb29yKHRoaXMuc2V0dGluZ3MuYm9yZGVyLndpZHRoLzIpO3RoaXMuYm90''@;'; put 'put ''dG9tU3R5bGUudG9wPUNyK0dyLWFpKyJweCIsdGhpcy5ib3R0b21TdHlsZVtHbl09YCR7dG59cHhgLHRoaXMuYm90dG9tU3R5bGUud2lkdGg9YCR7TW59cHhgLHRoaXMuYm90dG9tU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuZW5kU3R5bGUudG9wPWAke0NyfXB4YCx0aGlzLmVuZFN0eWxl''@;'; put 'put ''W0duXT10bitNbi1haSsicHgiLHRoaXMuZW5kU3R5bGUuaGVpZ2h0PWAke0dyKzF9cHhgLHRoaXMuZW5kU3R5bGUuZGlzcGxheT0iYmxvY2siO2xldCBfaT10aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNpYmxlO19pPSJmdW5jdGlvbiI9PXR5cGVvZiBfaT9faSh0aGlzLnNldHRpbmdz''@;'; put 'put ''LmxheWVyTGV2ZWwpOl9pO2NvbnN0IE9uPXRoaXMud290LmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsaCxmLCExLCJyZW5kZXIiKTtsZXRbenIsSm5dPVtoLGZdO2lmKE9uJiZBcnJheS5pc0FycmF5KE9uKSYmKFssLHpyLEpuXT1PbiksQXAoKXx8IV9pfHx0aGlzLmlzUGFy''@;'; put 'put ''dFJhbmdlKHpyLEpuKSl0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2Vsc2V7dGhpcy5jb3JuZXJTdHlsZS50b3A9Q3IrR3IrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCsicHgiLHRoaXMuY29ybmVyU3R5bGVb''@;'; put 'put ''R25dPXRuK01uK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgrInB4Iix0aGlzLmNvcm5lclN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29y''@;'; put 'put ''bmVyU3R5bGUuYm9yZGVyTGVmdFdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLndp''@;'; put 'put ''ZHRoPXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSI7bGV0IElyPWFfKHYuVEFCTEUpO2NvbnN0ICRyPUlyPT09RDskciYmKElyPU0uZG9jdW1lbnRFbGVtZW50KTtjb25zdCB3aT1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRT''@;'; put 'put ''dHlsZS5ib3JkZXJXaWR0aCwxMCktMSxlYT1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIpLGZhPU1hdGguY2VpbChwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsMTApLzIpO2lmKGY9PT10aGlzLndvdC5nZXRTZXR0''@;'; put 'put ''aW5nKCJ0b3RhbENvbHVtbnMiKS0xKXtjb25zdCB2dD0kcj9xZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OnFlLm9mZnNldExlZnQ7bGV0IE50PSExLEh0PTA7Q24/KEh0PXZ0LXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLE50PUh0PDApOihIdD12''@;'; put 'put ''dCtzdShxZSkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsTnQ9SHQ+PUMkKElyKSksTnQmJih0aGlzLmNvcm5lclN0eWxlW0duXT1gJHtNYXRoLmZsb29yKHRuK01uK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtZWEtd2kpfXB4YCx0aGlzLmNvcm5l''@;'; put 'put ''clN0eWxlW0NuPyJib3JkZXJMZWZ0V2lkdGgiOiJib3JkZXJSaWdodFdpZHRoIl09MCl9aWYoaD09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEpe2NvbnN0IEh0PSgkcj9xZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A6cWUub2Zmc2V0VG9wKSt4dShxZSkrcGFyc2VJ''@;'; put 'put ''bnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yPj1vXyhJciksSG49dGhpcy53b3Quc3R5bGVzSGFuZGxlci5pc0NsYXNzaWNUaGVtZSgpO2lmKEh0KXtjb25zdCB0cj1NYXRoLmZsb29yKENyK0dyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtZmEtd2kpO0huPyh0''@;'; put 'put ''aGlzLmNvcm5lclN0eWxlLnRvcD1gJHt0cn1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD0wKTp0aGlzLmNvcm5lclN0eWxlLnRvcD10ci0xKyJweCJ9fXRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0iYmxvY2sifUFwKCkmJnRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygi''@;'; put 'put ''aXNEYXRhVmlld0luc3RhbmNlIikmJnRoaXMudXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24oaCxmLENyLHRuLE1uLEdyKX1pc0VudGlyZUNvbHVtblNlbGVjdGVkKGwsYSl7cmV0dXJuIGw9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSYmYT09''@;'; put 'put ''PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNFbnRpcmVSb3dTZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWdl''@;'; put 'put ''dERpbWVuc2lvbnNGcm9tSGVhZGVyKGwsYSxkLGgsZil7Y29uc3R7d3RUYWJsZTp2fT10aGlzLndvdCxNPXYud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2xldCBEPW51bGwsWj1udWxsLHJlPW51bGwsY2U9bnVsbCxiZT1udWxsLEVlPW51bGwsQmU9bnVsbCxxZT1udWxsO3N3aXRjaChsKXtj''@;'; put 'put ''YXNlInJvd3MiOkQ9ZnVuY3Rpb24oKXtyZXR1cm4gdi5nZXRSb3dIZWFkZXIoLi4uYXJndW1lbnRzKX0sWj1mdW5jdGlvbigpe3JldHVybiB4dSguLi5hcmd1bWVudHMpfSxyZT0iaHRfX3NlbGVjdGlvbi0tcm93cyIsRWU9InRvcCI7YnJlYWs7Y2FzZSJjb2x1bW5zIjpEPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHYuZ2V0Q29sdW1uSGVhZGVyKC4uLmFyZ3VtZW50cyl9LFo9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoLi4uYXJndW1lbnRzKX0scmU9Imh0X19zZWxlY3Rpb24tLWNvbHVtbnMiLEVlPSJsZWZ0In1pZihNLmNsYXNzTGlzdC5jb250YWlucyhyZSkpe2NvbnN0IHJ0PXRoaXMud290Lmdl''@;'; put 'put ''dFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoQmU9RChhLHJ0LWgpLHFlPUQoZCxydC1oKSwhQmV8fCFxZSlyZXR1cm4hMTtjb25zdCBwdD1VMChCZSksZHQ9VTAocWUpO3JldHVybiBCZSYmcWUmJihjZT1wdFtFZV0tZltFZV0tMSxiZT1kdFtFZV0rWihxZSktcHRbRWVdKSxb''@;'; put 'put ''QmUsY2UsYmVdfXJldHVybiExfWNoYW5nZUJvcmRlclN0eWxlKGwsYSl7Y29uc3QgZD10aGlzW2xdLnN0eWxlLGg9YVtsXTshaHx8aC5oaWRlP1RpKHRoaXNbbF0sImhpZGRlbiIpOihwbyh0aGlzW2xdLCJoaWRkZW4iKSYmbG8odGhpc1tsXSwiaGlkZGVuIiksZC5iYWNrZ3JvdW5kQ29sb3I9''@;'; put 'put ''aC5jb2xvciwoInRvcCI9PT1sfHwiYm90dG9tIj09PWwpJiYoZC5oZWlnaHQ9YCR7aC53aWR0aH1weGApLCgic3RhcnQiPT09bHx8ImVuZCI9PT1sKSYmKGQud2lkdGg9YCR7aC53aWR0aH1weGApKX1jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZShsKXtjb25zdCBkPXRoaXNbbF0uc3R5bGU7''@;'; put 'put ''ZC5iYWNrZ3JvdW5kQ29sb3I9IiMwMDAiLGQud2lkdGg9IjFweCIsZC5oZWlnaHQ9IjFweCJ9dG9nZ2xlSGlkZGVuQ2xhc3MobCxhKXt0aGlzLmNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlKGwpLGE/VGkodGhpc1tsXSwiaGlkZGVuIik6bG8odGhpc1tsXSwiaGlkZGVuIil9ZGlzYXBwZWFy''@;'; put 'put ''KCl7dGhpcy50b3BTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuc3RhcnRTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmVuZFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSIsQXAoKSYmdGhp''@;'; put 'put ''cy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wSGl0QXJlYS5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhh''@;'; put 'put ''bmRsZXMuc3R5bGVzLmJvdHRvbS5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbUhpdEFyZWEuZGlzcGxheT0ibm9uZSIpfWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95V2l0aE93bkV2ZW50c09ubHkoKSx0aGlzLm1haW4ucGFyZW50''@;'; put 'put ''Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLm1haW4pfX07ZnVuY3Rpb24gd18oYyxsLGEpe2YzZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZjNlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0''@;'; put 'put ''d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBhcyhjLGwpe3JldHVybiBjLmdldChNSyhjLGwpKX1mdW5jdGlvbiBwM2UoYyxsLGEpe3JldHVybiBjLnNldChNSyhjLGwpLGEpLGF9ZnVuY3Rpb24gTUsoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJl''@;'; put 'put ''dHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBiMT1uZXcgV2Vha01hcCxWZD1uZXcgV2Vha01hcCx4Sz1uZXcgV2Vha01hcCxaRT1uZXcgV2Vha01hcCxFSz1u''@;'; put 'put ''ZXcgV2Vha01hcCxKNz1uZXcgV2Vha01hcCxnM2U9bmV3IFdlYWtTZXQ7Y2xhc3MgYXR0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBpdHQoYyxsKXtmM2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsZzNlKSx3Xyh0aGlzLGIxLHZvaWQgMCksd18odGhpcyxWZCx2b2lkIDApLHdfKHRoaXMseEss''@;'; put 'put ''bmV3IHR0dCksd18odGhpcyxaRSxuZXcgV2Vha01hcCksd18odGhpcyxFSyxuZXcgV2Vha1NldCksd18odGhpcyxKNyxuZXcgTWFwKSxwM2UoVmQsdGhpcyxsKX1zZXRBY3RpdmVPdmVybGF5KGwpe3JldHVybiBwM2UoYjEsdGhpcyxsKSxhcyh4Syx0aGlzKS5zZXRBY3RpdmVPdmVybGF5KGFz''@;'; put 'put ''KGIxLHRoaXMpKSxhcyhaRSx0aGlzKS5oYXMoYXMoYjEsdGhpcykpfHxhcyhaRSx0aGlzKS5zZXQoYXMoYjEsdGhpcyksbmV3IFNldCksdGhpc31nZXRGb2N1c1NlbGVjdGlvbigpe3JldHVybiBudWxsIT09YXMoVmQsdGhpcyk/YXMoVmQsdGhpcykuZ2V0Rm9jdXMoKTpudWxsfWdldEFyZWFT''@;'; put 'put ''ZWxlY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWFzKFZkLHRoaXMpP2FzKFZkLHRoaXMpLmNyZWF0ZUxheWVyZWRBcmVhKCk6bnVsbH1nZXRCb3JkZXJJbnN0YW5jZShsKXtpZighbC5zZXR0aW5ncy5ib3JkZXIpcmV0dXJuIG51bGw7aWYoYXMoSjcsdGhpcykuaGFzKGwpKXtjb25zdCBkPWFzKEo3''@;'; put 'put ''LHRoaXMpLmdldChsKTtpZihkLmhhcyhhcyhiMSx0aGlzKSkpcmV0dXJuIGQuZ2V0KGFzKGIxLHRoaXMpKTtjb25zdCBoPW5ldyBoM2UoYXMoYjEsdGhpcyksbC5zZXR0aW5ncyk7cmV0dXJuIGQuc2V0KGFzKGIxLHRoaXMpLGgpLGh9Y29uc3QgYT1uZXcgaDNlKGFzKGIxLHRoaXMpLGwuc2V0''@;'; put 'put ''dGluZ3MpO3JldHVybiBhcyhKNyx0aGlzKS5zZXQobCxuZXcgTWFwKFtbYXMoYjEsdGhpcyksYV1dKSksYX1nZXRCb3JkZXJJbnN0YW5jZXMobCl7dmFyIGEsZDtyZXR1cm4gQXJyYXkuZnJvbShudWxsIT09KGE9bnVsbD09PShkPWFzKEo3LHRoaXMpLmdldChsKSl8fHZvaWQgMD09PWQ/dm9p''@;'; put 'put ''ZCAwOmQudmFsdWVzKCkpJiZ2b2lkIDAhPT1hP2E6W10pfWRlc3Ryb3lCb3JkZXJzKGwpe2FzKEo3LHRoaXMpLmdldChsKS5mb3JFYWNoKGE9PmEuZGVzdHJveSgpKSxhcyhKNyx0aGlzKS5kZWxldGUobCl9cmVuZGVyKGwpe2lmKG51bGw9PT1hcyhWZCx0aGlzKSlyZXR1cm47bCYmTUsoZzNl''@;'; put 'put ''LHRoaXMsb3R0KS5jYWxsKHRoaXMpO2NvbnN0IGE9QXJyYXkuZnJvbShhcyhWZCx0aGlzKSksZD1uZXcgTWFwLGg9bmV3IE1hcDtmb3IobGV0IGY9MDtmPGEubGVuZ3RoO2YrKyl7Y29uc3Qgdj1hW2ZdLHtjbGFzc05hbWU6TSxoZWFkZXJBdHRyaWJ1dGVzOkQsY3JlYXRlTGF5ZXJzOlosc2Vs''@;'; put 'put ''ZWN0aW9uVHlwZTpyZX09di5zZXR0aW5nczthcyhFSyx0aGlzKS5oYXModil8fChhcyhFSyx0aGlzKS5hZGQodiksdi5hZGRMb2NhbEhvb2soImRlc3Ryb3kiLCgpPT50aGlzLmRlc3Ryb3lCb3JkZXJzKHYpKSk7Y29uc3QgY2U9dGhpcy5nZXRCb3JkZXJJbnN0YW5jZSh2KTtpZih2LmlzRW1w''@;'; put 'put ''dHkoKSl7Y2U/LmRpc2FwcGVhcigpO2NvbnRpbnVlfU0mJmFzKHhLLHRoaXMpLnNldEFjdGl2ZVNlbGVjdGlvbih2KS5zY2FuKCkuZm9yRWFjaChCZT0+e2lmKGQuaGFzKEJlKSl7Y29uc3QgcWU9ZC5nZXQoQmUpO3FlLmhhcyhNKSYmITA9PT1aP3FlLnNldChNLHFlLmdldChNKSsxKTpxZS5z''@;'; put 'put ''ZXQoTSwxKX1lbHNlIGQuc2V0KEJlLG5ldyBNYXAoW1tNLDFdXSkpO0QmJihoLmhhcyhCZSl8fGguc2V0KEJlLFtdKSwiVEgiPT09QmUubm9kZU5hbWUmJmguZ2V0KEJlKS5wdXNoKC4uLkQpKX0pO2NvbnN0IGJlPXYuZ2V0Q29ybmVycygpO2FzKGIxLHRoaXMpLmdldFNldHRpbmcoIm9uQmVm''@;'; put 'put ''b3JlRHJhd0JvcmRlcnMiLGJlLHJlKSxjZT8uYXBwZWFyKGJlKX1kLmZvckVhY2goKGYsdik9Pnt2YXIgTTtjb25zdCBEPUFycmF5LmZyb20oZikubWFwKFo9PntsZXRbcmUsY2VdPVo7cmV0dXJuIDE9PT1jZT9yZTpbcmUsLi4uQXJyYXkuZnJvbSh7bGVuZ3RoOmNlLTF9LChiZSxFZSk9PmAk''@;'; put 'put ''e3JlfS0ke0VlKzF9YCldfSkuZmxhdCgpO0QuZm9yRWFjaChaPT5hcyhaRSx0aGlzKS5nZXQoYXMoYjEsdGhpcykpLmFkZChaKSksVGkodixEKSwiVEQiPT09di5ub2RlTmFtZSYmQXJyYXkuaXNBcnJheShudWxsPT09KE09YXMoVmQsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PU0/dm9pZCAw''@;'; put 'put ''Ok0uY2VsbEF0dHJpYnV0ZXMpJiZ2byh2LGFzKFZkLHRoaXMpLm9wdGlvbnMuY2VsbEF0dHJpYnV0ZXMpfSksQXJyYXkuZnJvbShoLmtleXMoKSkuZm9yRWFjaChmPT57dm8oZixbLi4uaC5nZXQoZildKX0pfX1mdW5jdGlvbiBvdHQoKXtjb25zdCBjPWFzKFpFLHRoaXMpLmdldChhcyhiMSx0''@;'; put 'put ''aGlzKSksbD1hcyhiMSx0aGlzKS53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiKTtpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKWMuYWRkKGxbYV0pO2MuZm9yRWFjaChhPT57dmFyIGQsaDtjb25zdCBmPWFz''@;'; put 'put ''KGIxLHRoaXMpLnd0VGFibGUuVEFCTEUucXVlcnlTZWxlY3RvckFsbChgLiR7YX1gKTtsZXQgdj1bXTtBcnJheS5pc0FycmF5KG51bGw9PT0oZD1hcyhWZCx0aGlzKS5vcHRpb25zKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jZWxsQXR0cmlidXRlcykmJih2PWFzKFZkLHRoaXMpLm9wdGlvbnMu''@;'; put 'put ''Y2VsbEF0dHJpYnV0ZXMubWFwKE09Pk1bMF0pKSxBcnJheS5pc0FycmF5KG51bGw9PT0oaD1hcyhWZCx0aGlzKS5vcHRpb25zKXx8dm9pZCAwPT09aD92b2lkIDA6aC5oZWFkZXJBdHRyaWJ1dGVzKSYmKHY9Wy4uLnYsLi4uYXMoVmQsdGhpcykub3B0aW9ucy5oZWFkZXJBdHRyaWJ1dGVzLm1h''@;'; put 'put ''cChNPT5NWzBdKV0pO2ZvcihsZXQgTT0wLEQ9Zi5sZW5ndGg7TTxEO00rKylsbyhmW01dLGEpLGo3KGZbTV0sdil9KSxjLmNsZWFyKCl9ZnVuY3Rpb24gUTcoYyxsLGEpe20zZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gbTNlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB3YyhjLGwpe3JldHVybiBjLmdldChsMyhjLGwpKX1mdW5jdGlvbiBzMyhjLGwsYSl7cmV0dXJuIGMuc2V0KGwzKGMsbCksYSksYX1mdW5jdGlvbiBsMyhj''@;'; put 'put ''LGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIExwPW5ldyBXZWFrTWFwLFNn''@;'; put 'put ''PW5ldyBXZWFrTWFwLFRLPW5ldyBXZWFrTWFwLEFLPW5ldyBXZWFrTWFwLGptPW5ldyBXZWFrTWFwLFdFPW5ldyBXZWFrTWFwLFlFPW5ldyBXZWFrTWFwLE9wPW5ldyBXZWFrU2V0O2NsYXNzIGx0dHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gc3R0KGMsbCl7bTNlKGMsbCksbC5hZGQoYyl9''@;'; put 'put ''KSh0aGlzLE9wKSxRNyh0aGlzLExwLHZvaWQgMCksUTcodGhpcyxTZyx2b2lkIDApLFE3KHRoaXMsVEssdm9pZCAwKSxRNyh0aGlzLEFLLHZvaWQgMCksUTcodGhpcyxqbSwhMCksUTcodGhpcyxXRSx7fSksUTcodGhpcyxZRSx7fSksczMoU2csdGhpcyxsLnJvb3RUYWJsZS5wYXJlbnRFbGVt''@;'; put 'put ''ZW50LnBhcmVudEVsZW1lbnQpLHMzKEFLLHRoaXMsbC5yb290RG9jdW1lbnQpfWlzQ2xhc3NpY1RoZW1lKCl7cmV0dXJuIHdjKGptLHRoaXMpfWdldENTU1ZhcmlhYmxlVmFsdWUobCl7dmFyIGE7aWYod2Moam0sdGhpcykpcmV0dXJuIG51bGw7aWYod2MoV0UsdGhpcylbYC0taHQtJHtsfWBd''@;'; put 'put ''KXJldHVybiB3YyhXRSx0aGlzKVtgLS1odC0ke2x9YF07Y29uc3QgZD1udWxsIT09KGE9bDMoT3AsdGhpcyxodHQpLmNhbGwodGhpcyxgLS1odC0ke2x9YCkpJiZ2b2lkIDAhPT1hP2E6bDMoT3AsdGhpcyx5M2UpLmNhbGwodGhpcyxgLS1odC0ke2x9YCk7cmV0dXJuIG51bGwhPT1kPyh3YyhX''@;'; put 'put ''RSx0aGlzKVtgLS1odC0ke2x9YF09ZCxkKTp2b2lkIDB9Z2V0U3R5bGVGb3JURChsKXt2YXIgYTtyZXR1cm4gbnVsbD09PShhPXdjKFlFLHRoaXMpKXx8dm9pZCAwPT09YT92b2lkIDA6YS50ZFtsXX1nZXREZWZhdWx0Um93SGVpZ2h0KCl7aWYod2Moam0sdGhpcykpcmV0dXJuIDIzO2NvbnN0''@;'; put 'put ''IGw9bDMoT3AsdGhpcyxjdHQpLmNhbGwodGhpcyk7cmV0dXJuIWwmJnBvKHdjKFNnLHRoaXMpLCJodC13cmFwcGVyIik/KGlsKGBUaGUgIiR7d2MoTHAsdGhpcyl9IiB0aGVtZSBpcyBlbmFibGVkLCBidXQgaXRzIHN0eWxlc2hlZXRzIGFyZSBtaXNzaW5nIG9yIG5vdCBpbXBvcnRlZCBjb3Jy''@;'; put 'put ''ZWN0bHkuIEltcG9ydCB0aGUgY29ycmVjdCBDU1MgZmlsZXMgaW4gb3JkZXIgdG8gdXNlIHRoYXQgdGhlbWUuYCksczMoam0sdGhpcywhMCksdGhpcy51c2VUaGVtZSgpLDIzKTpsfWFyZUNlbGxzQm9yZGVyQm94KCl7cmV0dXJuImJvcmRlci1ib3giPT09dGhpcy5nZXRTdHlsZUZvclREKCJi''@;'; put 'put ''b3gtc2l6aW5nIil9dXNlVGhlbWUobCl7aWYoIWwpcmV0dXJuIGwzKE9wLHRoaXMsYjNlKS5jYWxsKHRoaXMpLHMzKGptLHRoaXMsITApLHZvaWQgczMoTHAsdGhpcyxsfHx2b2lkIDApO2wmJmwhPT13YyhMcCx0aGlzKSYmKHdjKExwLHRoaXMpJiZsMyhPcCx0aGlzLGZ0dCkuY2FsbCh0aGlz''@;'; put 'put ''KSxzMyhMcCx0aGlzLGwpLHMzKGptLHRoaXMsITEpLGwzKE9wLHRoaXMsdXR0KS5jYWxsKHRoaXMpLGwzKE9wLHRoaXMsYjNlKS5jYWxsKHRoaXMpKX1nZXRUaGVtZU5hbWUoKXtyZXR1cm4gd2MoTHAsdGhpcyl9cmVtb3ZlQ2xhc3NOYW1lcygpe3BvKHdjKFNnLHRoaXMpLHdjKExwLHRoaXMp''@;'; put 'put ''KSYmbG8od2MoU2csdGhpcyksd2MoTHAsdGhpcykpfX1mdW5jdGlvbiBjdHQoKXtjb25zdCBjPXRoaXMuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgibGluZS1oZWlnaHQiKSxsPXRoaXMuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC12ZXJ0aWNhbC1wYWRkaW5nIiksYT1NYXRoLmNlaWwocGFyc2VG''@;'; put 'put ''bG9hdCh0aGlzLmdldFN0eWxlRm9yVEQoImJvcmRlci1ib3R0b20td2lkdGgiKSkpO3JldHVybiBudWxsPT09Y3x8bnVsbD09PWx8fGlzTmFOKGEpP251bGw6YysyKmwrYX1mdW5jdGlvbiB1dHQoKXtsbyh3YyhTZyx0aGlzKSwvaHQtdGhlbWUtLiovZyksVGkod2MoU2csdGhpcyksd2MoTHAs''@;'; put 'put ''dGhpcykpfWZ1bmN0aW9uIGIzZSgpe3RoaXMuaXNDbGFzc2ljVGhlbWUoKXx8czMoVEssdGhpcyxnZXRDb21wdXRlZFN0eWxlKHdjKFNnLHRoaXMpKSk7Y29uc3QgYz1sMyhPcCx0aGlzLGR0dCkuY2FsbCh0aGlzLFsiYm94LXNpemluZyIsImJvcmRlci1ib3R0b20td2lkdGgiXSk7d2MoWUUs''@;'; put 'put ''dGhpcykudGQ9ey4uLndjKFlFLHRoaXMpLnRkLCJib3gtc2l6aW5nIjpjWyJib3gtc2l6aW5nIl0sImJvcmRlci1ib3R0b20td2lkdGgiOmNbImJvcmRlci1ib3R0b20td2lkdGgiXX19ZnVuY3Rpb24gZHR0KGMpe2NvbnN0IGw9d2MoQUssdGhpcyksYT13YyhTZyx0aGlzKSxkPWwuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgidGFibGUiKSxoPWwuY3JlYXRlRWxlbWVudCgidGJvZHkiKSxmPWwuY3JlYXRlRWxlbWVudCgidHIiKSx2PWwuY3JlYXRlRWxlbWVudCgidHIiKSxNPWwuY3JlYXRlRWxlbWVudCgidGQiKTt2LmFwcGVuZENoaWxkKE0pLGguYXBwZW5kQ2hpbGQoZiksaC5hcHBlbmRDaGlsZCh2''@;'; put 'put ''KSxkLmFwcGVuZENoaWxkKGgpLGEuYXBwZW5kQ2hpbGQoZCk7Y29uc3QgRD1nZXRDb21wdXRlZFN0eWxlKE0pLFo9e307cmV0dXJuIGMuZm9yRWFjaChyZT0+e1pbcmVdPUQuZ2V0UHJvcGVydHlWYWx1ZShyZSl9KSxhLnJlbW92ZUNoaWxkKGQpLFp9ZnVuY3Rpb24gaHR0KGMpe2NvbnN0IGw9''@;'; put 'put ''TWF0aC5jZWlsKHBhcnNlRmxvYXQobDMoT3AsdGhpcyx5M2UpLmNhbGwodGhpcyxjKSkpO3JldHVybiBOdW1iZXIuaXNOYU4obCk/bnVsbDpsfWZ1bmN0aW9uIHkzZShjKXtjb25zdCBsPXdjKFRLLHRoaXMpLmdldFByb3BlcnR5VmFsdWUoYyk7cmV0dXJuIiI9PT1sP251bGw6bH1mdW5jdGlv''@;'; put 'put ''biBmdHQoKXtzMyhZRSx0aGlzLHt9KSxzMyhXRSx0aGlzLHt9KSxzMyhqbSx0aGlzLCEwKX1jbGFzcyBwdHQgZXh0ZW5kcyBtS3tjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsbmV3IHlldChhKSksdGhpcy5zdHlsZXNIYW5kbGVyPW5ldyBsdHQodGhpcy5kb21CaW5kaW5ncyk7Y29uc3QgZD10''@;'; put 'put ''aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlzLnd0VGFibGU9bmV3IF9ldCh0aGlzLmdldFRhYmxlRGFvKCksZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyksdGhpcy53dFZpZXdwb3J0PW5ldyBRZXQodGhpcy5nZXRWaWV3cG9ydERhbygpLHRo''@;'; put 'put ''aXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSksdGhpcy5zZWxlY3Rpb25NYW5hZ2VyPW5ldyBhdHQodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNlbGVjdGlvbnMiKSksdGhpcy53dEV2ZW50PW5ldyBFZmUoZCx0aGlzLmRv''@;'; put 'put ''bUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyKSx0aGlzLnd0T3ZlcmxheXM9bmV3IG1ldCh0aGlzLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhp''@;'; put 'put ''cy53dFRhYmxlKSx0aGlzLmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCksdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJzKCl9ZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKXtjb25zdCBhPVtdLGQ9W107WG8oe3Jvd0hlYWRlcnM6Imh0Um93SGVhZGVycyIsY29sdW1uSGVhZGVyczoiaHRD''@;'; put 'put ''b2x1bW5IZWFkZXJzIn0sKGgsZik9Pnt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhmKS5sZW5ndGgmJmQucHVzaChoKSxhLnB1c2goaCl9KSxsbyh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlLGEpLFRpKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5v''@;'; put 'put ''ZGUsZCl9Z2V0T3ZlcmxheUJ5TmFtZShsKXt2YXIgYTtpZighSGZlLmluY2x1ZGVzKGwpKXJldHVybiBudWxsO2NvbnN0IGQ9bC5yZXBsYWNlKC9fKFthLXpdKS9nLGg9PmhbMV0udG9VcHBlckNhc2UoKSk7cmV0dXJuIG51bGwhPT0oYT10aGlzLnd0T3ZlcmxheXNbYCR7ZH1PdmVybGF5YF0p''@;'; put 'put ''JiZ2b2lkIDAhPT1hP2E6bnVsbH1nZXRWaWV3cG9ydERhbygpe2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IHdvdCgpe3JldHVybiBsfSxnZXQgdG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LnRyaW1taW5nQ29udGFpbmVyfSxnZXQg''@;'; put 'put ''aW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcn0sZ2V0IHRvcFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0''@;'; put 'put ''aW9uKCl9LGdldCB0b3BQYXJlbnRPZmZzZXQoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IGlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQ''@;'; put 'put ''b3NpdGlvbigpfSxnZXQgaW5saW5lU3RhcnRQYXJlbnRPZmZzZXQoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpfSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheX0sZ2V0IGlubGluZVN0''@;'; put 'put ''YXJ0T3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5fSxnZXQgYm90dG9tT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheX19fX1jbGFzcyBrS3tjb25zdHJ1Y3RvcihsKXtsIGluc3RhbmNlb2YgbUs/dGhpcy5fd290PWw6dGhp''@;'; put 'put ''cy5faW5pdEZyb21TZXR0aW5ncyhsKX1faW5pdEZyb21TZXR0aW5ncyhsKXtsLmZhY2FkZT1hPT57Y29uc3QgZD1uZXcga0soYSk7cmV0dXJuKCk9PmR9LHRoaXMuX3dvdD1uZXcgcHR0KGwudGFibGUsbCl9Z2V0IGd1aWQoKXtyZXR1cm4gdGhpcy5fd290Lmd1aWR9Z2V0IHJvb3REb2N1bWVu''@;'; put 'put ''dCgpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50fWdldCByb290V2luZG93KCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290V2luZG93fWdldCB3dFNldHRpbmdzKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzfWdldCBjbG9uZVNvdXJjZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl93b3QuY2xvbmVTb3VyY2V9Z2V0IGNsb25lT3ZlcmxheSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVPdmVybGF5fWdldCBzZWxlY3Rpb25NYW5hZ2VyKCl7cmV0dXJuIHRoaXMuX3dvdC5zZWxlY3Rpb25NYW5hZ2VyfWdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X3dvdC53dFZpZXdwb3J0fWdldCB3dE92ZXJsYXlzKCl7cmV0dXJuIHRoaXMuX3dvdC53dE92ZXJsYXlzfWdldCB3dFRhYmxlKCl7cmV0dXJuIHRoaXMuX3dvdC53dFRhYmxlfWdldCB3dEV2ZW50KCl7cmV0dXJuIHRoaXMuX3dvdC53dEV2ZW50fWdldCB3dFNjcm9sbCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll93b3Qud3RTY3JvbGx9Z2V0IGRyYXduKCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3bn1zZXQgZHJhd24obCl7dGhpcy5fd290LmRyYXduPWx9Z2V0IGFjdGl2ZU92ZXJsYXlOYW1lKCl7cmV0dXJuIHRoaXMuX3dvdC5hY3RpdmVPdmVybGF5TmFtZX1nZXQgZHJhd0ludGVycnVwdGVkKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3dvdC5kcmF3SW50ZXJydXB0ZWR9c2V0IGRyYXdJbnRlcnJ1cHRlZChsKXt0aGlzLl93b3QuZHJhd0ludGVycnVwdGVkPWx9Z2V0IGxhc3RNb3VzZU92ZXIoKXtyZXR1cm4gdGhpcy5fd290Lmxhc3RNb3VzZU92ZXJ9c2V0IGxhc3RNb3VzZU92ZXIobCl7dGhpcy5fd290Lmxh''@;'; put 'put ''c3RNb3VzZU92ZXI9bH1nZXQgbW9tZW50dW1TY3JvbGxpbmcoKXtyZXR1cm4gdGhpcy5fd290Lm1vbWVudHVtU2Nyb2xsaW5nfXNldCBtb21lbnR1bVNjcm9sbGluZyhsKXt0aGlzLl93b3QubW9tZW50dW1TY3JvbGxpbmc9bH1nZXQgdG91Y2hBcHBsaWVkKCl7cmV0dXJuIHRoaXMuX3dvdC50''@;'; put 'put ''b3VjaEFwcGxpZWR9c2V0IHRvdWNoQXBwbGllZChsKXt0aGlzLl93b3QudG91Y2hBcHBsaWVkPWx9Z2V0IGRvbUJpbmRpbmdzKCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5nc31nZXQgZXZlbnRMaXN0ZW5lcnMoKXtyZXR1cm4gdGhpcy5fd290LmV2ZW50TGlzdGVuZXJzfXNldCBldmVu''@;'; put 'put ''dExpc3RlbmVycyhsKXt0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnM9bH1nZXQgZXZlbnRNYW5hZ2VyKCl7cmV0dXJuIHRoaXMuX3dvdC5ldmVudE1hbmFnZXJ9Z2V0IHN0eWxlc0hhbmRsZXIoKXtyZXR1cm4gdGhpcy5fd290LnN0eWxlc0hhbmRsZXJ9Y3JlYXRlQ2VsbENvb3JkcyhsLGEpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl93b3QuY3JlYXRlQ2VsbENvb3JkcyhsLGEpfWNyZWF0ZUNlbGxSYW5nZShsLGEsZCl7cmV0dXJuIHRoaXMuX3dvdC5jcmVhdGVDZWxsUmFuZ2UobCxhLGQpfWRyYXcoKXtyZXR1cm4gdGhpcy5fd290LmRyYXcoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMF0mJmFyZ3VtZW50c1swXSksdGhpc31nZXRDZWxsKGwpe3JldHVybiB0aGlzLl93b3QuZ2V0Q2VsbChsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pfXNjcm9sbFZpZXdwb3J0KGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LnNjcm9s''@;'; put 'put ''bFZpZXdwb3J0KGwsYSxkKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0VmVydGlj''@;'; put 'put ''YWxseShsLGEpfWdldFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRWaWV3cG9ydCgpfWdldE92ZXJsYXlOYW1lKCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZU92ZXJsYXk/dGhpcy5fd290LmNsb25lT3ZlcmxheS50eXBlOiJtYXN0ZXIifWdldE92ZXJsYXlCeU5hbWUobCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3dvdC5nZXRPdmVybGF5QnlOYW1lKGwpfWV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl7cmV0dXJuIHRoaXMuX3dvdC5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpfXVwZGF0ZShsLGEpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy51cGRhdGUobCxhKSx0aGlzfWdl''@;'; put 'put ''dFNldHRpbmcobCxhLGQsaCxmKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhsLGEsZCxoLGYpfWhhc1NldHRpbmcobCl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLmhhc1NldHRpbmcobCl9ZGVzdHJveSgpe3RoaXMuX3dvdC5kZXN0cm95KCl9fWZ1bmN0aW9u''@;'; put 'put ''IF8zZShjKXtsZXR7aXNTaGlmdEtleTpsLGlzTGVmdENsaWNrOmEsaXNSaWdodENsaWNrOmQsY29vcmRzOmgsc2VsZWN0aW9uOmYsY29udHJvbGxlcjp2LGNlbGxDb29yZHNGYWN0b3J5Ok19PWM7Y29uc3QgRD1mLmlzU2VsZWN0ZWQoKT9mLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50KCk6''@;'; put 'put ''bnVsbCxaPWYuaXNTZWxlY3RlZEJ5Q29ybmVyKCkscmU9Zi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtpZihmLm1hcmtTb3VyY2UoIm1vdXNlIiksbCYmRCloLnJvdz49MCYmaC5jb2w+PTAmJiF2LmNlbGw/Zi5zZXRSYW5nZUVuZChoKTooWnx8cmUpJiZoLnJvdz49MCYmaC5jb2w+PTAmJiF2''@;'; put 'put ''LmNlbGw/Zi5zZXRSYW5nZUVuZChNKGgucm93LGguY29sKSk6WiYmaC5yb3c8MCYmIXYuY29sdW1uP2Yuc2V0UmFuZ2VFbmQoTShELnRvLnJvdyxoLmNvbCkpOnJlJiZoLmNvbDwwJiYhdi5yb3c/Zi5zZXRSYW5nZUVuZChNKGgucm93LEQudG8uY29sKSk6KCFaJiYhcmUmJmguY29sPDB8fFom''@;'; put 'put ''JmguY29sPDApJiYhdi5yb3c/Zi5zZWxlY3RSb3dzKE1hdGgubWF4KEQuZnJvbS5yb3csMCksaC5yb3csaC5jb2wpOighWiYmIXJlJiZoLnJvdzwwfHxyZSYmaC5yb3c8MCkmJiF2LmNvbHVtbiYmZi5zZWxlY3RDb2x1bW5zKE1hdGgubWF4KEQuZnJvbS5jb2wsMCksaC5jb2wsaC5yb3cpO2Vs''@;'; put 'put ''c2V7Y29uc3QgY2U9IWYuaW5JblNlbGVjdGlvbihoKSxiZT1hfHxkJiZjZTtoLnJvdzwwJiZoLmNvbD49MCYmIXYuY29sdW1uP2JlJiZmLnNlbGVjdENvbHVtbnMoaC5jb2wsaC5jb2wsaC5yb3cpOmguY29sPDAmJmgucm93Pj0wJiYhdi5yb3c/YmUmJmYuc2VsZWN0Um93cyhoLnJvdyxoLnJv''@;'; put 'put ''dyxoLmNvbCk6aC5jb2w+PTAmJmgucm93Pj0wJiYhdi5jZWxsP2JlJiZmLnNldFJhbmdlU3RhcnQoaCk6aC5jb2w8MCYmaC5yb3c8MCYmZi5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwLGZvY3VzUG9zaXRpb246e3JvdzowLGNvbDowfX0pfWYubWFya0VuZFNv''@;'; put 'put ''dXJjZSgpfWNvbnN0IG10dD1uZXcgTWFwKFtbIm1vdXNlZG93biIsXzNlXSxbIm1vdXNlb3ZlciIsZnVuY3Rpb24gZ3R0KGMpe2xldHtpc0xlZnRDbGljazpsLGNvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmfT1jO2lmKCFsKXJldHVybjtjb25z''@;'; put 'put ''dCB2PWQuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksTT1kLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLEQ9ZC50YWJsZVByb3BzLmNvdW50Q29scygpLFo9ZC50YWJsZVByb3BzLmNvdW50Um93cygpO2QubWFya1NvdXJjZSgibW91c2UiKSxNJiYhaC5jb2x1bW4/ZC5zZXRSYW5nZUVuZChm''@;'; put 'put ''KFotMSxhLmNvbCkpOnYmJiFoLnJvdz9kLnNldFJhbmdlRW5kKGYoYS5yb3csRC0xKSk6aC5jZWxsfHxkLnNldFJhbmdlRW5kKGEpLGQubWFya0VuZFNvdXJjZSgpfV0sWyJ0b3VjaHN0YXJ0IixfM2VdXSk7ZnVuY3Rpb24gdzNlKGMsbCl7bGV0e2Nvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRy''@;'; put 'put ''b2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmfT1sO210dC5nZXQoYy50eXBlKSh7Y29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmYsaXNTaGlmdEtleTpjLnNoaWZ0S2V5LGlzTGVmdENsaWNrOlVPKGMpfHwidG91Y2hzdGFydCI9PT1jLnR5cGUs''@;'; put 'put ''aXNSaWdodENsaWNrOkhtKGMpfSl9Y29uc3QgQzNlPW5ldyBXZWFrTWFwLERLPVN5bWJvbCgicm9vdEluc3RhbmNlIik7ZnVuY3Rpb24gY1AoYyl7cmV0dXJuIEMzZS5oYXMoYyl9ZnVuY3Rpb24gem0oYyxsLGEpe1MzZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUzNlKGMsbCl7aWYobC5o''@;'; put 'put ''YXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBVbShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gX3R0KGMpe3ZhciBsPWZ1bmN0aW9uIHd0dChjLGwpe2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp''@;'; put 'put ''dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVu''@;'; put 'put ''dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gQXUoYyxsKXtyZXR1cm4gYy5nZXQoQ18oYyxsKSl9ZnVuY3Rpb24gQmQoYyxsLGEpe3JldHVybiBjLnNldChDXyhjLGwpLGEpLGF9ZnVuY3Rpb24gQ18oYyxsLGEpe2lmKCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBJSz1uZXcgV2Vha01hcCx1UD1uZXcgV2Vha01hcCxkUD1u''@;'; put 'put ''ZXcgV2Vha01hcCxNZz1uZXcgV2Vha01hcCxjMz1uZXcgV2Vha01hcCxSSz1uZXcgV2Vha01hcCxMSz1uZXcgV2Vha01hcCxTXz1uZXcgV2Vha01hcCxHRT1uZXcgV2Vha1NldDtmdW5jdGlvbiBNM2UoKXtyZXR1cm4gcGFyc2VJbnQodGhpcy5ob3Qucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRl''@;'; put 'put ''KFJPKClbMF0pLDEwKX1mdW5jdGlvbiBTdHQoYyl7Y29uc3QgbD1DXyhHRSx0aGlzLE0zZSkuY2FsbCh0aGlzKStjO3ZvKHRoaXMuaG90LnJvb3RFbGVtZW50LC4uLlJPKGwpKX1mdW5jdGlvbiBNdHQoKXtjb25zdCBjPXRoaXMuaG90LnJvb3RFbGVtZW50O3RoaXMuaGFzVmVydGljYWxTY3Jv''@;'; put 'put ''bGwoKT9UaShjLCJodEhhc1Njcm9sbFkiKTpsbyhjLCJodEhhc1Njcm9sbFkiKSx0aGlzLmhhc0hvcml6b250YWxTY3JvbGwoKT9UaShjLCJodEhhc1Njcm9sbFgiKTpsbyhjLCJodEhhc1Njcm9sbFgiKX1jb25zdCB4dHQ9Y2xhc3MgQ3R0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiB5dHQo''@;'; put 'put ''YyxsKXtTM2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsR0UpLFVtKHRoaXMsImhvdCIsdm9pZCAwKSxVbSh0aGlzLCJldmVudE1hbmFnZXIiLHZvaWQgMCksVW0odGhpcywic2V0dGluZ3MiLHZvaWQgMCksVW0odGhpcywiVEhFQUQiLHZvaWQgMCksVW0odGhpcywiVEJPRFkiLHZvaWQgMCksVW0o''@;'; put 'put ''dGhpcywiX3d0Iix2b2lkIDApLFVtKHRoaXMsImFjdGl2ZVd0Iix2b2lkIDApLHptKHRoaXMsSUssMCksem0odGhpcyx1UCwwKSxVbSh0aGlzLCJwb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUiLCExKSx6bSh0aGlzLGRQLCExKSx6bSh0aGlzLE1nLHZvaWQgMCksem0odGhpcyxjMyx2b2lk''@;'; put 'put ''IDApLHptKHRoaXMsUkssMCksem0odGhpcyxMSywwKSx6bSh0aGlzLFNfLG51bGwpLHRoaXMuaG90PWwsdGhpcy5ldmVudE1hbmFnZXI9bmV3IGoyKHRoaXMuaG90KSx0aGlzLnNldHRpbmdzPXRoaXMuaG90LmdldFNldHRpbmdzKCksdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMucmVnaXN0''@;'; put 'put ''ZXJFdmVudHMoKSx0aGlzLmluaXRpYWxpemVXYWxrb250YWJsZSgpfXJlbmRlcigpe2lmKCF0aGlzLmhvdC5pc1JlbmRlclN1c3BlbmRlZCgpKXtjb25zdCBsPXRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcjt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVuZGVyIixsKSx0aGlzLnBvc3Rwb25l''@;'; put 'put ''ZEFkanVzdEVsZW1lbnRzU2l6ZSYmKHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplPSExLHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCkpLHRoaXMuX3d0LmRyYXcoIWwpLENfKEdFLHRoaXMsTXR0KS5jYWxsKHRoaXMpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbmRlciIsbCks''@;'; put 'put ''dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSExfX1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLmhvdC5pc1JlbmRlclN1c3BlbmRlZCgpP3RoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplPSEwOnRoaXMuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCl9Z2V0Q2VsbEF0''@;'; put 'put ''Q29vcmRzKGwsYSl7Y29uc3QgZD10aGlzLl93dC5nZXRDZWxsKGwsYSk7cmV0dXJuIGQ8MD9udWxsOmR9c2Nyb2xsVmlld3BvcnQobCxhLGQpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydChsLGEsZCl9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''d3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl9Y3JlYXRlRWxlbWVudHMoKXtjb25zdHtyb290RWxlbWVudDpsLHJvb3REb2N1bWVudDphfT10''@;'; put 'put ''aGlzLmhvdCxkPWwuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO2QmJmwuc2V0QXR0cmlidXRlKCJkYXRhLW9yaWdpbmFsc3R5bGUiLGQpLFRpKGwsImhhbmRzb250YWJsZSIpLEJkKGMzLHRoaXMsYS5jcmVhdGVFbGVtZW50KCJUQUJMRSIpKSxUaShBdShjMyx0aGlzKSwiaHRDb3JlIiksdGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSYmVGkoQXUoYzMsdGhpcyksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSksdGhpcy5zZXR0aW5ncy5hcmlhVGFncyYmKHZvKEF1KGMzLHRoaXMpLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLHZvKGwsW1sicm9s''@;'; put 'put ''ZSIsInRyZWVncmlkIl0sVDJlKC0xKSxSTyh0aGlzLmhvdC5jb3VudENvbHMoKSksWyJhcmlhLW11bHRpc2VsZWN0YWJsZSIsInRydWUiXV0pKSx0aGlzLlRIRUFEPWEuY3JlYXRlRWxlbWVudCgiVEhFQUQiKSxBdShjMyx0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLlRIRUFEKSx0aGlzLlRCT0RZ''@;'; put 'put ''PWEuY3JlYXRlRWxlbWVudCgiVEJPRFkiKSxBdShjMyx0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLlRCT0RZKSx0aGlzLmhvdC50YWJsZT1BdShjMyx0aGlzKSx0aGlzLmhvdC5jb250YWluZXIuaW5zZXJ0QmVmb3JlKEF1KGMzLHRoaXMpLHRoaXMuaG90LmNvbnRhaW5lci5maXJzdENoaWxkKX1y''@;'; put 'put ''ZWdpc3RlckV2ZW50cygpe2NvbnN0e3Jvb3RFbGVtZW50Omwscm9vdERvY3VtZW50OmEsc2VsZWN0aW9uOmQscm9vdFdpbmRvdzpofT10aGlzLmhvdCxmPWEuZG9jdW1lbnRFbGVtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIixNPT57QmQoZFAs''@;'; put 'put ''dGhpcywhMCksdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKE0udGFyZ2V0KXx8KE0kKGgpLE0ucHJldmVudERlZmF1bHQoKSxoLmZvY3VzKCkpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+e0JkKGRQLHRoaXMsITEpfSksdGhpcy5ldmVu''@;'; put 'put ''dE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLE09PntBdShkUCx0aGlzKSYmIXRoaXMuaXNUZXh0U2VsZWN0aW9uQWxsb3dlZChNLnRhcmdldCkmJih0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZNJChoKSxNLnByZXZlbnREZWZhdWx0KCkpfSksdGhpcy5l''@;'; put 'put ''dmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJrZXl1cCIsTT0+e2QuaXNJblByb2dyZXNzKCkmJiFNLnNoaWZ0S2V5JiZkLmZpbmlzaCgpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJtb3VzZXVwIixNPT57ZC5pc0luUHJvZ3Jlc3MoKSYmVU8oTSkmJmQu''@;'; put 'put ''ZmluaXNoKCksQmQoTWcsdGhpcywhMSk7Y29uc3QgRD1GTyhhLmFjdGl2ZUVsZW1lbnQpO1NFKGEuYWN0aXZlRWxlbWVudCkmJiFEfHwoRHx8IWQuaXNTZWxlY3RlZCgpJiYhZC5pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKSYmIWwuY29udGFpbnMoTS50YXJnZXQpJiYhSG0oTSkpJiZ0aGlzLmhv''@;'; put 'put ''dC51bmxpc3RlbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJjb250ZXh0bWVudSIsTT0+e2QuaXNJblByb2dyZXNzKCkmJkhtKE0pJiYoZC5maW5pc2goKSxCZChNZyx0aGlzLCExKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsInRv''@;'; put 'put ''dWNoZW5kIiwoKT0+e2QuaXNJblByb2dyZXNzKCkmJmQuZmluaXNoKCksQmQoTWcsdGhpcywhMSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsIm1vdXNlZG93biIsTT0+e2NvbnN0IEQ9TS50YXJnZXQsWj1NLnh8fE0uY2xpZW50WCxyZT1NLnl8fE0uY2xpZW50WTts''@;'; put 'put ''ZXQgY2U9TS50YXJnZXQ7aWYoQXUoTWcsdGhpcyl8fCFsfHwhdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7aG9sZGVyOmJlfT10aGlzLl93dC53dFRhYmxlO2lmKGNlPT09YmUpe2NvbnN0IEJlPWYwKGEpO2lmKGEuZWxlbWVudEZyb21Qb2ludChaK0JlLHJlKSE9PWJlfHxhLmVsZW1lbnRG''@;'; put 'put ''cm9tUG9pbnQoWixyZStCZSkhPT1iZSlyZXR1cm59ZWxzZSBmb3IoO2NlIT09Zjspe2lmKG51bGw9PT1jZSl7aWYoTS5pc1RhcmdldFdlYkNvbXBvbmVudClicmVhaztyZXR1cm59aWYoY2U9PT1sKXJldHVybjtjZT1jZS5wYXJlbnROb2RlfSgiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0''@;'; put 'put ''aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM/dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMoRCk6dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMpP3RoaXMuaG90LmRlc2VsZWN0Q2VsbCgpOnRoaXMuaG90LmRlc3Ryb3lFZGl0b3IoITEsITEpfSk7bGV0IHY9''@;'; put 'put ''QjcoaCk7Zm9yKDtudWxsIT09djspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih2LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiY2xpY2siLCgpPT57dGhpcy5ob3QudW5saXN0ZW4oKX0pLHY9Qjcodik7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihBdShj''@;'; put 'put ''Myx0aGlzKSwic2VsZWN0c3RhcnQiLE09Pnt0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9ufHxTRShNLnRhcmdldCl8fE0ucHJldmVudERlZmF1bHQoKX0pfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiB0aGlz''@;'; put 'put ''LmhvdC5fY3JlYXRlQ2VsbENvb3JkcyguLi50aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChhLGQpKX10cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgobCxhKXtsZXQgZD1sPj0wP3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21S''@;'; put 'put ''ZW5kZXJhYmxlSW5kZXgobCk6bCxoPWE+PTA/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKTphO3JldHVybiBudWxsPT09ZCYmKGQ9bCksbnVsbD09PWgmJihoPWEpLFtkLGhdfWNvdW50UmVuZGVyYWJsZUluZGV4ZXMobCxhKXtjb25z''@;'; put 'put ''dCBkPU1hdGgubWluKGwuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxhKSxoPWwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQtMSwtMSk7cmV0dXJuIG51bGw9PT1oPzA6bC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpKzF9Y291bnRSZW5kZXJhYmxlQ29sdW1ucygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsdGhpcy5zZXR0aW5ncy5tYXhDb2xzKX1jb3VudFJlbmRlcmFibGVSb3dzKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5kZXhlcyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0''@;'; put 'put ''aGlzLnNldHRpbmdzLm1heFJvd3MpfWNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhsLGEsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCkpfWNvdW50Tm90SGlkZGVuQ29sdW1uSW5k''@;'; put 'put ''ZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhsLGEsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsdGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCkpfWNvdW50Tm90SGlkZGVuSW5kZXhlcyhsLGEsZCxoKXtpZihpc05hTihsKXx8bDwwKXJldHVybiAwO2Nv''@;'; put 'put ''bnN0IGY9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhKSx2PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtpZighTnVtYmVyLmlzSW50ZWdlcih2KSlyZXR1cm4gMDtsZXQgTT0wO3JldHVybiBhPDA/TT12KzE6YT4wJiYoTT1oLXYpLE19Y291bnROb3RIaWRkZW5GaXhl''@;'; put 'put ''ZENvbHVtbnNTdGFydCgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuQ29sdW1uSW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRl''@;'; put 'put ''bkZpeGVkUm93c1RvcCgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwtMSl9Y291bnROb3RIaWRkZW5GaXhlZFJv''@;'; put 'put ''d3NCb3R0b20oKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygpLGE9TWF0aC5tYXgobC1wYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRvbSwxMCksMCk7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKGEsMSl9Y291bnRSZW5kZXJhYmxlQ29sdW1uc0lu''@;'; put 'put ''UmFuZ2UobCxhKXtsZXQgZD0wO2ZvcihsZXQgaD1sO2g8PWE7aCsrKW51bGwhPT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpJiYoZCs9MSk7cmV0dXJuIGR9Y291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UobCxhKXtsZXQgZD0wO2Zv''@;'; put 'put ''cihsZXQgaD1sO2g8PWE7aCsrKW51bGwhPT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpJiYoZCs9MSk7cmV0dXJuIGR9Z2V0U3R5bGVzSGFuZGxlcigpe3JldHVybiB0aGlzLl93dC5zdHlsZXNIYW5kbGVyfWdldERlZmF1bHRSb3dIZWln''@;'; put 'put ''aHQoKXtyZXR1cm4gdGhpcy5fd3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCl9YWRkQ2xhc3NOYW1lVG9MaWNlbnNlRWxlbWVudChsKXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmhvdC5yb290RWxlbWVudC5wYXJlbnROb2RlKXx8dm9pZCAwPT09YT92b2lkIDA6''@;'; put 'put ''YS5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7ZCYmVGkoZCxsKX1yZW1vdmVDbGFzc05hbWVGcm9tTGljZW5zZUVsZW1lbnQobCl7dmFyIGE7Y29uc3QgZD1udWxsPT09KGE9dGhpcy5ob3Qucm9vdEVsZW1lbnQucGFyZW50Tm9kZSl8fHZvaWQgMD09PWE/dm9p''@;'; put 'put ''ZCAwOmEucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO2QmJmxvKGQsbCl9aXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl7Y29uc3QgbD10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCkrdGhpcy5jb3VudE5vdEhpZGRlbkZpeGVk''@;'; put 'put ''Um93c0JvdHRvbSgpLGE9dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCk7cmV0dXJuIHRoaXMuaG90LmNvdW50UmVuZGVyZWRSb3dzKCk+bCYmdGhpcy5ob3QuY291bnRSZW5kZXJlZENvbHMoKT5hfWluaXRpYWxpemVXYWxrb250YWJsZSgpe2NvbnN0IGw9e2FyaWFUYWdz''@;'; put 'put ''OnRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MscnRsTW9kZTp0aGlzLmhvdC5pc1J0bCgpLGV4dGVybmFsUm93Q2FsY3VsYXRvcjp0aGlzLmhvdC5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIikmJnRoaXMuaG90LmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKS5pc0VuYWJsZWQoKSx0YWJsZTpBdShjMyx0''@;'; put 'put ''aGlzKSxpc0RhdGFWaWV3SW5zdGFuY2U6KCk9PmNQKHRoaXMuaG90KSxwcmV2ZW50T3ZlcmZsb3c6KCk9PnRoaXMuc2V0dGluZ3MucHJldmVudE92ZXJmbG93LHByZXZlbnRXaGVlbDooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50V2hlZWwsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hv''@;'; put 'put ''bGQ6KCk9PnRoaXMuc2V0dGluZ3Mudmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQsdmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQ6KCk9PnRoaXMuc2V0dGluZ3Mudmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQsZGF0YTooZix2KT0+dGhpcy5ob3QuZ2V0RGF0YUF0Q2Vs''@;'; put 'put ''bCguLi50aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChmLHYpKSx0b3RhbFJvd3M6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlUm93cygpLHRvdGFsQ29sdW1uczooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksZml4ZWRDb2x1bW5zU3RhcnQ6KCk9PnRo''@;'; put 'put ''aXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpLGZpeGVkUm93c1RvcDooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpLGZpeGVkUm93c0JvdHRvbTooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpLHNob3VsZFJlbmRlcklubGluZVN0''@;'; put 'put ''YXJ0T3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydD4wfHxsLnJvd0hlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJUb3BPdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcD4wfHxsLmNvbHVtbkhlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRS''@;'; put 'put ''ZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRvbT4wLG1pblNwYXJlUm93czooKT0+dGhpcy5zZXR0aW5ncy5taW5TcGFyZVJvd3MscmVuZGVyQWxsUm93czp0aGlzLnNldHRpbmdzLnJlbmRlckFsbFJvd3MscmVuZGVyQWxsQ29sdW1uczp0aGlzLnNl''@;'; put 'put ''dHRpbmdzLnJlbmRlckFsbENvbHVtbnMscm93SGVhZGVyczooKT0+e2NvbnN0IGY9W107cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmZi5wdXNoKCh2LE0pPT57Y29uc3QgRD12Pj0wP3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgo''@;'; put 'put ''dik6djt0aGlzLmFwcGVuZFJvd0hlYWRlcihELE0pfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixmKSxCZCh1UCx0aGlzLGYubGVuZ3RoKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZDXyhHRSx0aGlzLE0zZSkuY2FsbCh0aGlzKT09''@;'; put 'put ''PXRoaXMuaG90LmNvdW50Q29scygpJiZDXyhHRSx0aGlzLFN0dCkuY2FsbCh0aGlzLEF1KHVQLHRoaXMpKSxmfSxjb2x1bW5IZWFkZXJzOigpPT57Y29uc3QgZj1bXTtyZXR1cm4gdGhpcy5ob3QuaGFzQ29sSGVhZGVycygpJiZmLnB1c2goKHYsTSk9Pntjb25zdCBEPXY+PTA/dGhpcy5ob3Qu''@;'; put 'put ''Y29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2O3RoaXMuYXBwZW5kQ29sSGVhZGVyKEQsTSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGYpLEJkKElLLHRoaXMsZi5sZW5ndGgpLGZ9LGNvbHVtbldp''@;'; put 'put ''ZHRoOmY9Pntjb25zdCB2PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik7cmV0dXJuIHRoaXMuaG90LmdldENvbFdpZHRoKG51bGw9PT12P2Y6dil9LHJvd0hlaWdodDpmPT57Y29uc3Qgdj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5n''@;'; put 'put ''ZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpO3JldHVybiB0aGlzLmhvdC5nZXRSb3dIZWlnaHQobnVsbD09PXY/Zjp2KX0scm93SGVpZ2h0QnlPdmVybGF5TmFtZTooZix2KT0+e2NvbnN0IE09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRl''@;'; put 'put ''eChmKSxEPW51bGw9PT1NP2Y6TTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLHRoaXMuaG90LmdldFJvd0hlaWdodChEKSxELHYpfSxjZWxsUmVuZGVyZXI6KGYsdixNKT0+e2NvbnN0W0QsWl09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVy''@;'; put 'put ''YWJsZVRvVmlzdWFsSW5kZXgoZix2KSxyZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsRCxaLCExLCJtZXRhIik7bGV0IGNlPUQsYmU9WjtBcnJheS5pc0FycmF5KHJlKSYmKFtjZSxiZV09cmUpO2NvbnN0IEVlPXRoaXMuaG90LmdldENlbGxNZXRhKGNlLGJlKSxC''@;'; put 'put ''ZT10aGlzLmhvdC5jb2xUb1Byb3AoYmUpO2xldCBxZT10aGlzLmhvdC5nZXREYXRhQXRSb3dQcm9wKGNlLEJlKTt0aGlzLmhvdC5oYXNIb29rKCJiZWZvcmVWYWx1ZVJlbmRlciIpJiYocWU9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZhbHVlUmVuZGVyIixxZSxFZSkpLHRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVSZW5kZXJlciIsTSxELFosQmUscWUsRWUpLHRoaXMuaG90LmdldENlbGxSZW5kZXJlcihFZSkodGhpcy5ob3QsTSxELFosQmUscWUsRWUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbmRlcmVyIixNLEQsWixCZSxxZSxFZSl9LHNlbGVjdGlvbnM6dGhpcy5ob3Qu''@;'; put 'put ''c2VsZWN0aW9uLmhpZ2hsaWdodCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOigpPT50aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uLG9uV2luZG93UmVzaXplOigpPT57dGhpcy5ob3QmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmdGhpcy5ob3QucmVmcmVzaERpbWVuc2lvbnMoKX0s''@;'; put 'put ''b25Db250YWluZXJFbGVtZW50UmVzaXplOigpPT57dGhpcy5ob3QmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmVTcodGhpcy5ob3Qucm9vdEVsZW1lbnQpJiZ0aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9ucygpfSxvbkNlbGxNb3VzZURvd246KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5z''@;'; put 'put ''bGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModikscmU9e3JvdzohMSxjb2x1bW46ITEsY2VsbDohMX07dGhpcy5ob3QubGlzdGVuKCksdGhpcy5hY3RpdmVXdD1ELEJkKE1nLHRoaXMsITApLEJkKFNfLHRoaXMse3g6Zi5jbGllbnRYLHk6Zi5jbGllbnRZfSksdGhpcy5ob3QucnVu''@;'; put 'put ''SG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZixaLE0scmUpLCFGbShmKSYmKHczZShmLHtjb29yZHM6WixzZWxlY3Rpb246dGhpcy5ob3Quc2VsZWN0aW9uLGNvbnRyb2xsZXI6cmUsY2VsbENvb3Jkc0ZhY3Rvcnk6KGNlLGJlKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoY2Us''@;'; put 'put ''YmUpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VEb3duIixmLFosTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvbnRleHRNZW51OihmLHYsTSxEKT0+e2NvbnN0IFo9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpO3Ro''@;'; put 'put ''aXMuYWN0aXZlV3Q9RCxCZChNZyx0aGlzLCExKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNJblByb2dyZXNzKCkmJnRoaXMuaG90LnNlbGVjdGlvbi5maW5pc2goKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLGYsWixNKSwhRm0oZikmJih0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsZixaLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZU91dDooZix2LE0sRCk9Pntjb25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KTt0aGlzLmFjdGl2ZVd0PUQsdGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlT3V0IixmLFosTSksIUZtKGYpJiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdXQiLGYsWixNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsTW91c2VPdmVyOihmLHYsTSxEKT0+e2NvbnN0IFo9dGhpcy50''@;'; put 'put ''cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpLHJlPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuYWN0aXZlV3Q9RCx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmLFosTSxyZSksIUZtKGYpJiYoQXUoTWcsdGhpcykmJighQXUo''@;'; put 'put ''U18sdGhpcyl8fEF1KFNfLHRoaXMpLnghPT1mLmNsaWVudFh8fEF1KFNfLHRoaXMpLnkhPT1mLmNsaWVudFkpJiZ3M2UoZix7Y29vcmRzOlosc2VsZWN0aW9uOnRoaXMuaG90LnNlbGVjdGlvbixjb250cm9sbGVyOnJlLGNlbGxDb29yZHNGYWN0b3J5OihjZSxiZSk9PnRoaXMuaG90Ll9jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzKGNlLGJlKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsZixaLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QsQmQoU18sdGhpcyxudWxsKSl9LG9uQ2VsbE1vdXNlVXA6KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5zbGF0ZUZyb21S''@;'; put 'put ''ZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModik7dGhpcy5hY3RpdmVXdD1ELHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZVVwIixmLFosTSksIUZtKGYpJiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJih0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZVVwIixmLFos''@;'; put 'put ''TSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvcm5lck1vdXNlRG93bjpmPT57Zi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsZil9LG9uQ2VsbENvcm5lckRibENsaWNrOmY9PntmLnByZXZlbnREZWZhdWx0''@;'; put 'put ''KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLGYpfSxiZWZvcmVEcmF3OihmLHYpPT50aGlzLmJlZm9yZVJlbmRlcihmLHYpLG9uRHJhdzpmPT50aGlzLmFmdGVyUmVuZGVyKGYpLG9uQmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5OihmLHYpPT57''@;'; put 'put ''Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixEPWY8MDtsZXQgWj1mO3JldHVybiBEfHwoWj1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZiksbnVsbCE9PVopPyhaPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLFosdiksdGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsIiksRD9aOk0uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaKSk6Zn0sb25CZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseTooZix2KT0+e2NvbnN0IE09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsRD1mPDA7''@;'; put 'put ''bGV0IFo9ZjtyZXR1cm4gRHx8KFo9TS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpLG51bGwhPT1aKT8oWj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLFosdiksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xs''@;'; put 'put ''IiksRD9aOk0uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaKSk6Zn0sb25TY3JvbGxWZXJ0aWNhbGx5OigpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsVmVydGljYWxseSIpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbCIpfSxvblNjcm9sbEhvcml6b250YWxs''@;'; put 'put ''eTooKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbCIpfSxvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMi''@;'; put 'put ''KSxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjooZix2LE0pPT57Y29uc3QgRD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixaPWY8MDtsZXQgcmU9ZjtafHwocmU9RC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpKTtjb25zdCBjZT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3Jl''@;'; put 'put ''SGlnaGxpZ2h0aW5nUm93SGVhZGVyIixyZSx2LE0pO3JldHVybiBaP2NlOkQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChELmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwxKSl9LG9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOihmLHYsTSk9Pntjb25zdCBEPXRoaXMu''@;'; put 'put ''aG90LmNvbHVtbkluZGV4TWFwcGVyLFo9ZjwwO2xldCByZT1mO1p8fChyZT1ELmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpO2NvbnN0IGNlPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLHJlLHYsTSk7cmV0dXJuIFo/Y2U6RC5nZXRS''@;'; put 'put ''ZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLDEpKX0sb25BZnRlckRyYXdTZWxlY3Rpb246KGYsdixNKT0+e2xldCBEO2NvbnN0W1oscmVdPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGYsdiksY2U9dGhpcy5o''@;'; put 'put ''b3Quc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKTtpZihjZS5zaXplKCk+MCl7Y29uc3QgRWU9Y2UucGVla0J5SW5kZXgoTT8/MCk7RD1bRWUuZnJvbS5yb3csRWUuZnJvbS5jb2wsRWUudG8ucm93LEVlLnRvLmNvbF19cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyYXdTZWxl''@;'; put 'put ''Y3Rpb24iLFoscmUsRCxNKX0sb25CZWZvcmVEcmF3Qm9yZGVyczooZix2KT0+e2NvbnN0W00sRCxaLHJlXT1mLGNlPVt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21S''@;'; put 'put ''ZW5kZXJhYmxlSW5kZXgoRCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChaKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHJlKV07cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVEcmF3Qm9yZGVycyIsY2Usdil9LG9uQmVmb3JlVG91Y2hTY3JvbGw6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVUb3VjaFNjcm9sbCIpLG9uQWZ0ZXJNb21lbnR1bVNjcm9sbDooKT0+dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTW9tZW50dW1TY3JvbGwiKSxvbk1vZGlmeVJvd0hl''@;'; put 'put ''YWRlcldpZHRoOmY9PnRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsZiksb25Nb2RpZnlHZXRDZWxsQ29vcmRzOihmLHYsTSxEKT0+e2NvbnN0IFo9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIscmU9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsY2U9dj49MD9yZS5n''@;'; put 'put ''ZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpOnYsYmU9Zj49MD9aLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik6ZixFZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsYmUsY2UsTSxEKTtpZihBcnJheS5pc0FycmF5KEVlKSl7Y29uc3RbQmUscWUs''@;'; put 'put ''cnQscHRdPUVlO3JldHVybltCZT49MD9aLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoQmUsMSkpOkJlLHFlPj0wP3JlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocmUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHFlLDEpKTpx''@;'; put 'put ''ZSxydD49MD9aLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocnQsLTEpKTpydCxwdD49MD9yZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHJlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChwdCwtMSkpOnB0XX19LG9uTW9kaWZ5''@;'; put 'put ''R2V0Q29vcmRzRWxlbWVudDooZix2KT0+e2NvbnN0IE09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsRD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixaPXY+PTA/RC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpOnYscmU9Zj49MD9NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5k''@;'; put 'put ''ZXgoZik6ZixjZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIscmUsWik7aWYoQXJyYXkuaXNBcnJheShjZSkpe2NvbnN0W2JlLEVlXT1jZTtyZXR1cm5bYmU+PTA/TS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE0uZ2V0TmVhcmVzdE5vdEhpZGRlbklu''@;'; put 'put ''ZGV4KGJlLDEpKTpiZSxFZT49MD9ELmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRWUsMSkpOkVlXX19LHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOmY9PntsZXQgdj10aGlzLnNldHRpbmdzLnZpZXdwb3J0Um93UmVuZGVyaW5n''@;'; put 'put ''T2Zmc2V0O2lmKCJhdXRvIj09PXYmJnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wJiYodj0xMCksdj4wfHwiYXV0byI9PT12KXtjb25zdCBNPXRoaXMuY291bnRSZW5kZXJhYmxlUm93cygpLEQ9Zi5zdGFydFJvdyxaPWYuZW5kUm93O2lmKCJudW1iZXIiPT10eXBlb2YgdilmLnN0YXJ0Um93''@;'; put 'put ''PU1hdGgubWF4KEQtdiwwKSxmLmVuZFJvdz1NYXRoLm1pbihaK3YsTS0xKTtlbHNlIGlmKCJhdXRvIj09PXYpe2NvbnN0IHJlPU1hdGgubWF4KDEsTWF0aC5jZWlsKFovTSoxMikpO2Yuc3RhcnRSb3c9TWF0aC5tYXgoRC1yZSwwKSxmLmVuZFJvdz1NYXRoLm1pbihaK3JlLE0tMSl9fXRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmKX0sdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6Zj0+e2xldCB2PXRoaXMuc2V0dGluZ3Mudmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ7aWYoImF1dG8iPT09diYmdGhpcy5zZXR0''@;'; put 'put ''aW5ncy5maXhlZENvbHVtbnNTdGFydCYmKHY9MTApLHY+MHx8ImF1dG8iPT09dil7Y29uc3QgTT10aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxEPWYuc3RhcnRDb2x1bW4sWj1mLmVuZENvbHVtbjtpZigibnVtYmVyIj09dHlwZW9mIHYmJihmLnN0YXJ0Q29sdW1uPU1hdGgubWF4KEQt''@;'; put 'put ''diwwKSxmLmVuZENvbHVtbj1NYXRoLm1pbihaK3YsTS0xKSksImF1dG8iPT09dil7Y29uc3QgcmU9TWF0aC5tYXgoMSxNYXRoLmNlaWwoWi9NKjYpKTtmLnN0YXJ0Q29sdW1uPU1hdGgubWF4KEQtcmUsMCksZi5lbmRDb2x1bW49TWF0aC5taW4oWityZSxNLTEpfX10aGlzLmhvdC5ydW5Ib29r''@;'; put 'put ''cygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZil9LHJvd0hlYWRlcldpZHRoOigpPT50aGlzLnNldHRpbmdzLnJvd0hlYWRlcldpZHRoLGNvbHVtbkhlYWRlckhlaWdodDooKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvbHVtbkhlYWRlckhl''@;'; put 'put ''aWdodCIpO3JldHVybiB0aGlzLnNldHRpbmdzLmNvbHVtbkhlYWRlckhlaWdodHx8Zn19O3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVJbml0V2Fsa29udGFibGUiLGwpLHRoaXMuX3d0PW5ldyBrSyhsKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0O2NvbnN0IGE9dGhpcy5fd3Qud3RUYWJsZS5z''@;'; put 'put ''cHJlYWRlcix7d2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5ob3Qucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5zZXRMYXN0U2l6ZShkLGgpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2Vkb3duIixmPT57Zi50YXJnZXQ9PT1hJiYzPT09''@;'; put 'put ''Zi53aGljaCYmZi5zdG9wUHJvcGFnYXRpb24oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwiY29udGV4dG1lbnUiLGY9PntmLnRhcmdldD09PWEmJjM9PT1mLndoaWNoJiZmLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0''@;'; put 'put ''ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLnNldHRpbmdzLm9ic2VydmVET01WaXNpYmlsaXR5JiZ0aGlzLl93dC5kcmF3SW50ZXJydXB0ZWQmJnRoaXMuaG90LnJlbmRlcigpfSl9aXNUZXh0U2VsZWN0aW9uQWxsb3dlZChsKXtp''@;'; put 'put ''ZihTRShsKSlyZXR1cm4hMDtjb25zdCBhPUxtKGwsdGhpcy5fd3Qud3RUYWJsZS5zcHJlYWRlcik7cmV0dXJuISEoITA9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZhfHwiY2VsbCI9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzU2VsZWN0ZWRP''@;'; put 'put ''bmx5Q2VsbCgpJiZhfHwhdGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmdGhpcy5pc0NlbGxFZGl0ZWQoKSYmdGhpcy5pc1NlbGVjdGVkT25seUNlbGwoKSl9aXNNb3VzZURvd24oKXtyZXR1cm4gQXUoTWcsdGhpcyl9aXNTZWxlY3RlZE9ubHlDZWxsKCl7dmFyIGwsYTtyZXR1cm4g''@;'; put 'put ''bnVsbCE9PShsPW51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZUNlbGwoKSkmJnZvaWQgMCE9PWwmJmx9aXNDZWxsRWRpdGVkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKTtyZXR1cm4gbCYm''@;'; put 'put ''bC5pc09wZW5lZCgpfWJlZm9yZVJlbmRlcihsLGEpe2wmJnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3UmVuZGVyIix0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIsYSl9YWZ0ZXJSZW5kZXIobCl7bCYmdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld1JlbmRlciIsdGhpcy5ob3QuZm9y''@;'; put 'put ''Y2VGdWxsUmVuZGVyKX1hcHBlbmRSb3dIZWFkZXIobCxhKXtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IGQ9YS5maXJzdENoaWxkO2lmKCFwbyhkLCJyZWxhdGl2ZSIpKXJldHVybiB4cChhKSx2b2lkIHRoaXMuYXBwZW5kUm93SGVhZGVyKGwsYSk7dGhpcy51cGRhdGVDZWxsSGVhZGVyKGQucXVl''@;'; put 'put ''cnlTZWxlY3RvcigiLnJvd0hlYWRlciIpLGwsdGhpcy5ob3QuZ2V0Um93SGVhZGVyKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDpkLGdldFJvd0hlYWRlcjpofT10aGlzLmhvdCxmPWQuY3JlYXRlRWxlbWVudCgiZGl2Iiksdj1kLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtmLmNsYXNzTmFtZT0i''@;'; put 'put ''cmVsYXRpdmUiLHYuY2xhc3NOYW1lPSJyb3dIZWFkZXIiLHRoaXMudXBkYXRlQ2VsbEhlYWRlcih2LGwsaCksZi5hcHBlbmRDaGlsZCh2KSxhLmFwcGVuZENoaWxkKGYpfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlciIsbCxhKX1hcHBlbmRDb2xIZWFkZXIobCxhKXtsZXQg''@;'; put 'put ''ZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5ob3QuZ2V0Q29sSGVhZGVyLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjA7Y29uc3QgZj0oKT0+e2NvbnN0IHY9bD49MD90''@;'; put 'put ''aGlzLmhvdC5nZXRDb2x1bW5NZXRhKGwpLmhlYWRlckNsYXNzTmFtZTpudWxsO3JldHVybiB2P3Yuc3BsaXQoIiAiKTpbXX07aWYoYS5maXJzdENoaWxkKXtjb25zdCB2PWEuZmlyc3RDaGlsZDtwbyh2LCJyZWxhdGl2ZSIpPyh0aGlzLnVwZGF0ZUNlbGxIZWFkZXIodi5xdWVyeVNlbGVjdG9y''@;'; put 'put ''KCIuY29sSGVhZGVyIiksbCxkLGgpLHYuY2xhc3NOYW1lPSIiLFRpKHYsWyJyZWxhdGl2ZSIsLi4uZigpXSkpOih4cChhKSx0aGlzLmFwcGVuZENvbEhlYWRlcihsLGEsZCxoKSl9ZWxzZXtjb25zdHtyb290RG9jdW1lbnQ6dn09dGhpcy5ob3QsTT12LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEQ9''@;'; put 'put ''di5jcmVhdGVFbGVtZW50KCJzcGFuIiksWj1mKCk7TS5jbGFzc0xpc3QuYWRkKCJyZWxhdGl2ZSIsLi4uWiksRC5jbGFzc05hbWU9ImNvbEhlYWRlciIsdGhpcy5zZXR0aW5ncy5hcmlhVGFncyYmKHZvKE0sInJvbGUiLCJwcmVzZW50YXRpb24iKSx2byhELCJyb2xlIiwicHJlc2VudGF0aW9u''@;'; put 'put ''IikpLHRoaXMudXBkYXRlQ2VsbEhlYWRlcihELGwsZCxoKSxNLmFwcGVuZENoaWxkKEQpLGEuYXBwZW5kQ2hpbGQoTSl9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Q29sSGVhZGVyIixsLGEsaCl9dXBkYXRlQ2VsbEhlYWRlcihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAsZj1hO2NvbnN0IHY9dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGwpfHx0aGlzLl93dDtsLnBhcmVudE5vZGUmJihwbyhsLCJjb2xIZWFkZXIiKT9mPXYud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9S''@;'; put 'put ''ZW5kZXJlZChhKTpwbyhsLCJyb3dIZWFkZXIiKSYmKGY9di53dFRhYmxlLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGEpKSksZj4tMT96NyhsLGQoYSxoKSk6KFBtKGwsIlx4YTAiKSxUaShsLCJjb3JuZXJIZWFkZXIiKSl9bWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgobCl7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCktbDtyZXR1cm4gZD4wP2Q6MH1tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQobCl7Y29uc3QgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpLWw7cmV0dXJuIGQ+MD9kOjB9c2V0TGFzdFNp''@;'; put 'put ''emUobCxhKXtCZChSSyx0aGlzLGwpLEJkKExLLHRoaXMsYSl9Z2V0TGFzdFNpemUoKXtyZXR1cm57d2lkdGg6QXUoUkssdGhpcyksaGVpZ2h0OkF1KExLLHRoaXMpfX1nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxh''@;'; put 'put ''dG9yKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz8wLDEpfWdl''@;'; put 'put ''dExhc3RSZW5kZXJlZFZpc2libGVSb3coKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUu''@;'; put 'put ''Z2V0TGFzdFJlbmRlcmVkUm93KCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz90aGlzLmhvdC5jb3VudFJvd3MoKS0xLC0xKX1nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9y''@;'; put 'put ''KXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz8wLDEp''@;'; put 'put ''fWdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMu''@;'; put 'put ''X3d0Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz90aGlzLmhvdC5jb3VudENvbHMoKS0xLC0xKX1nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1''@;'; put 'put ''YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0VmlzaWJsZVJvdygpKX1nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwu''@;'; put 'put ''Z2V0TGFzdFZpc2libGVSb3coKSl9Z2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSl9Z2V0TGFzdEZ1''@;'; put 'put ''bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RWaXNpYmxlQ29sdW1uKCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlz''@;'; put 'put ''LmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1''@;'; put 'put ''YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4''@;'; put 'put ''KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xs''@;'; put 'put ''LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfWdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiBBdShJSyx0aGlzKX1nZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gQXUodVAsdGhpcyl9Z2V0Vmlld3BvcnRXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0Lmdl''@;'; put 'put ''dFZpZXdwb3J0V2lkdGgoKX1nZXRXb3Jrc3BhY2VXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9Z2V0Vmlld3BvcnRIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpfWdldFdvcmtzcGFjZUhl''@;'; put 'put ''aWdodCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpfWdldEVsZW1lbnRPdmVybGF5TmFtZShsKXt2YXIgYTtyZXR1cm4obnVsbCE9PShhPXRoaXMuX3d0Lnd0T3ZlcmxheXMuZ2V0UGFyZW50T3ZlcmxheShsKSkmJnZvaWQgMCE9PWE/YTp0aGlzLl93''@;'; put 'put ''dCkud3RUYWJsZS5uYW1lfWdldE92ZXJsYXlCeU5hbWUobCl7cmV0dXJuIHRoaXMuX3d0LmdldE92ZXJsYXlCeU5hbWUobCl9Z2V0QWN0aXZlT3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd3QuYWN0aXZlT3ZlcmxheU5hbWV9aXNWaXNpYmxlKCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUu''@;'; put 'put ''aXNWaXNpYmxlKCl9aGFzVmVydGljYWxTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5oYXNWZXJ0aWNhbFNjcm9sbCgpfWhhc0hvcml6b250YWxTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5oYXNIb3Jpem9udGFsU2Nyb2xsKCl9Z2V0VGFibGVXaWR0aCgp''@;'; put 'put ''e3JldHVybiB0aGlzLl93dC53dFRhYmxlLmdldFdpZHRoKCl9Z2V0VGFibGVIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRIZWlnaHQoKX1nZXRUYWJsZU9mZnNldCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZU9mZnNldCgpfWdldFJvd0hlYWRl''@;'; put 'put ''cldpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKX1pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKX1pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl9ZGVzdHJveSgp''@;'; put 'put ''e3RoaXMuX3d0LmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fTt5KDEzOTA4KTtjb25zdCB4M2U9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIixPSz14M2UubGVuZ3RoO2Z1bmN0aW9uIGhQKGMpe2xldCBkLGw9YysxLGE9IiI7Zm9yKDtsPjA7KWQ9KGwtMSklT0ss''@;'; put 'put ''YT1TdHJpbmcuZnJvbUNoYXJDb2RlKDY1K2QpK2EsbD1wYXJzZUludCgobC1kKS9PSywxMCk7cmV0dXJuIGF9ZnVuY3Rpb24gRXR0KGMpe2xldCBsPTA7aWYoYylmb3IobGV0IGE9MCxkPWMubGVuZ3RoLTE7YTxjLmxlbmd0aDthKz0xLGQtPTEpbCs9T0sqKmQqKHgzZS5pbmRleE9mKGNbYV0p''@;'; put 'put ''KzEpO3JldHVybiBsLT0xLGx9ZnVuY3Rpb24gVHR0KCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEwMCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2NvbnN0IGE9''@;'; put 'put ''W107bGV0IGQsaDtmb3IoZD0wO2Q8YztkKyspe2NvbnN0IGY9W107Zm9yKGg9MDtoPGw7aCsrKWYucHVzaChoUChoKSsoZCsxKSk7YS5wdXNoKGYpfXJldHVybiBhfWZ1bmN0aW9uIEF0dCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50''@;'; put 'put ''c1swXToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25zdCBmPXt9O2ZvcihoPTA7aDxsO2grKylmW2Bwcm9wJHtofWBdPWhQKGgpKyhkKzEpO2EucHVzaChm''@;'; put 'put ''KX1yZXR1cm4gYX1mdW5jdGlvbiBrdHQoYyxsKXtjb25zdCBhPVtdO2xldCBkO2ZvcihsZXQgaD0wO2g8YztoKyspe2Q9W107Zm9yKGxldCBmPTA7ZjxsO2YrKylkLnB1c2goIiIpO2EucHVzaChkKX1yZXR1cm4gYX1mdW5jdGlvbiBQSyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPWM7Y29uc3QgZD1bXTtyZXR1cm4oIUFycmF5LmlzQXJyYXkoYyl8fCFBcnJheS5pc0FycmF5KGNbMF0pKSYmKGE9W2NdKSxhLmZvckVhY2goKGgsZik9PntBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaCgodixNKT0+e2QucHVz''@;'; put 'put ''aChbZitsLE0sdl0pfSk6T2JqZWN0LmtleXMoaCkuZm9yRWFjaCh2PT57ZC5wdXNoKFtmK2wsdixoW3ZdXSl9KX0pLGR9ZnVuY3Rpb24gRksoYyl7bGV0IGw9MDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmKGNbMF0mJkFycmF5LmlzQXJyYXkoY1swXSk/bD1jWzBdLmxlbmd0aDpjWzBdJiZx''@;'; put 'put ''byhjWzBdKSYmKGw9Qk8oY1swXSkpKSxsfWZ1bmN0aW9uIEUzZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYmYy5ldmVyeShsPT5BcnJheS5pc0FycmF5KGwpKSl9ZnVuY3Rpb24gVDNlKGMpe3JldHVybiEhKEFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJiZjLmV2''@;'; put 'put ''ZXJ5KGw9PiJvYmplY3QiPT10eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJm51bGwhPT1sKSl9ZnVuY3Rpb24gJEUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIER0dChjKXt2YXIgbD1mdW5jdGlvbiBJdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBh''@;'; put 'put ''PWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp''@;'; put 'put ''fXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs''@;'; put 'put ''ZTohMH0pOmNbbF09YSxjfWNvbnN0IEx0dD1jbGFzcyBSdHR7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdOyRFKHRoaXMsImhvdCIsdm9pZCAwKSwkRSh0aGlzLCJkYXRhIix2b2lkIDApLCRFKHRo''@;'; put 'put ''aXMsImRhdGFUeXBlIiwiYXJyYXkiKSwkRSh0aGlzLCJjb2xUb1Byb3AiLCgpPT57fSksJEUodGhpcywicHJvcFRvQ29sIiwoKT0+e30pLHRoaXMuaG90PWwsdGhpcy5kYXRhPWF9bW9kaWZ5Um93RGF0YShsKXtsZXQgYTtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5Um93RGF0YSIp''@;'; put 'put ''JiYoYT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsbCkpLHZvaWQgMD09PWF8fE51bWJlci5pc0ludGVnZXIoYSk/dGhpcy5kYXRhW2xdOmF9Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRhdGEmJjAhPT10aGlzLmRhdGEubGVuZ3RoP3RoaXMuZ2V0QnlSYW5nZShudWxsLG51bGws''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSk6dGhpcy5kYXRhfXNldERhdGEobCl7dGhpcy5kYXRhPWx9Z2V0QXRDb2x1bW4obCl7Y29uc3QgYT1bXTtyZXR1cm4gWW4odGhpcy5kYXRhLChkLGgpPT57Y29uc3QgZj10aGlzLmdldEF0Q2Vs''@;'; put 'put ''bChoLGwpO2EucHVzaChmKX0pLGF9Z2V0QXRSb3cobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Y29uc3QgZj12b2lkIDA9PT1hJiZ2b2lkIDA9PT1kLHtkYXRhRG90Tm90YXRpb246dn09dGhpcy5ob3QuZ2V0U2V0''@;'; put 'put ''dGluZ3MoKTtsZXQgTT1udWxsLEQ9bnVsbDtpZihNPXRoaXMubW9kaWZ5Um93RGF0YShsKSxBcnJheS5pc0FycmF5KE0pKUQ9W10sZj9NLmZvckVhY2goKFoscmUpPT57RFtyZV09dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLHJlLE0pfSk6R2EoYSxkLFo9PntEW1otYV09dGhpcy5nZXRBdFBo''@;'; put 'put ''eXNpY2FsQ2VsbChsLFosTSl9KTtlbHNlIGlmKHFvKE0pfHxtbChNKSlpZihEPWg/W106e30sIWZ8fGgpe2NvbnN0IHJlPXRoaXMuY291bnRGaXJzdFJvd0tleXMoKS0xO0dhKDAscmUsY2U9Pntjb25zdCBiZT10aGlzLmNvbFRvUHJvcChjZSk7aWYoY2U+PShhfHwwKSYmY2U8PShkfHxyZSkm''@;'; put 'put ''JiFOdW1iZXIuaXNJbnRlZ2VyKGJlKSl7Y29uc3QgRWU9dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLGJlLE0pO2g/RC5wdXNoKEVlKTp2P1ZPKEQsYmUsRWUpOkRbYmVdPUVlfX0pfWVsc2UgWG8oTSwoWixyZSk9Pntjb25zdCBjZT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwscmUsTSk7dj9W''@;'; put 'put ''TyhELHJlLGNlKTpEW3JlXT1jZX0pO3JldHVybiBEfXNldEF0Q2VsbChsLGEsZCl7aWYoIShsPj10aGlzLmNvdW50Um93cygpfHxhPj10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCkpKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGg9RmQoZCk7dGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxoLCJzZXQiKSxoLmlzVG91Y2hlZCgpJiYoZD1oLnZhbHVlKX1bIl9fcHJvdG9fXyIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIl0uaW5jbHVkZXMobCl8fChOdW1iZXIuaXNJbnRlZ2VyKGEpP3RoaXMuZGF0YVtsXVthXT1kOlZP''@;'; put 'put ''KHRoaXMuZGF0YVtsXSxhLGQpKX19Z2V0QXRQaHlzaWNhbENlbGwobCxhLGQpe2xldCBoPW51bGw7aWYoZClpZigic3RyaW5nIj09dHlwZW9mIGEpe2NvbnN0e2RhdGFEb3ROb3RhdGlvbjpmfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2g9Zj8kMmUoZCxhKTpkW2FdfWVsc2UgaD0iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgYT9hKGQpOmRbYV07aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBmPUZkKGgpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixsLGEsZiwiZ2V0IiksZi5pc1RvdWNoZWQoKSYmKGg9Zi52YWx1ZSl9cmV0dXJuIGh9''@;'; put 'put ''Z2V0QXRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLm1vZGlmeVJvd0RhdGEobCk7cmV0dXJuIHRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx0aGlzLmNvbFRvUHJvcChhKSxkKX1nZXRCeVJhbmdlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l''@;'; put 'put ''bnRzWzBdOm51bGwsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD0hMSxmPW51bGwsdj1udWxsLE09bnVsbCxEPW51bGw7''@;'; put 'put ''bnVsbD09PWx8fG51bGw9PT1hPyhoPSEwLGY9MCxNPXRoaXMuY291bnRSb3dzKCktMSk6KGY9TWF0aC5taW4obC5yb3csYS5yb3cpLHY9TWF0aC5taW4obC5jb2wsYS5jb2wpLE09TWF0aC5tYXgobC5yb3csYS5yb3cpLEQ9TWF0aC5tYXgobC5jb2wsYS5jb2wpKTtjb25zdCBaPVtdO3JldHVy''@;'; put 'put ''biBHYShmLE0scmU9PntaLnB1c2goaD90aGlzLmdldEF0Um93KHJlLHZvaWQgMCx2b2lkIDAsZCk6dGhpcy5nZXRBdFJvdyhyZSx2LEQsZCkpfSksWn1jb3VudFJvd3MoKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiKSl7Y29uc3QgbD10aGlzLmhvdC5ydW5Ib29r''@;'; put 'put ''cygibW9kaWZ5U291cmNlTGVuZ3RoIik7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbH1yZXR1cm4gdGhpcy5kYXRhLmxlbmd0aH1jb3VudEZpcnN0Um93S2V5cygpe3JldHVybiBGSyh0aGlzLmRhdGEpfWRlc3Ryb3koKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmhvdD1udWxsfX07eSgy''@;'; put 'put ''MDI5MSk7Y29uc3QgQTNlPXtfbG9jYWxIb29rczpPYmplY3QuY3JlYXRlKG51bGwpLGFkZExvY2FsSG9vayhjLGwpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzW2NdfHwodGhpcy5fbG9jYWxIb29rc1tjXT1bXSksdGhpcy5fbG9jYWxIb29rc1tjXS5wdXNoKGwpLHRoaXN9LHJ1bkxvY2FsSG9v''@;'; put 'put ''a3MoYyxsLGEsZCxoLGYsdil7aWYodGhpcy5fbG9jYWxIb29rc1tjXSl7Y29uc3QgTT10aGlzLl9sb2NhbEhvb2tzW2NdLmxlbmd0aDtmb3IobGV0IEQ9MDtEPE07RCsrKUhPKHRoaXMuX2xvY2FsSG9va3NbY11bRF0sdGhpcyxsLGEsZCxoLGYsdil9fSxjbGVhckxvY2FsSG9va3MoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fbG9jYWxIb29rcz17fSx0aGlzfX07VHAoQTNlLCJNSVhJTl9OQU1FIiwibG9jYWxIb29rcyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCB5MT1BM2U7ZnVuY3Rpb24gazNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBQdHQoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''RnR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBlOXtjb25zdHJ1Y3Rvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2szZSh0aGlzLCJp''@;'; put 'put ''bmRleGVkVmFsdWVzIixbXSksazNlKHRoaXMsImluaXRWYWx1ZU9yRm4iLHZvaWQgMCksdGhpcy5pbml0VmFsdWVPckZuPWx9Z2V0VmFsdWVzKCl7cmV0dXJuIHRoaXMuaW5kZXhlZFZhbHVlc31nZXRWYWx1ZUF0SW5kZXgobCl7Y29uc3QgYT10aGlzLmluZGV4ZWRWYWx1ZXM7aWYobDxhLmxl''@;'; put 'put ''bmd0aClyZXR1cm4gYVtsXX1zZXRWYWx1ZXMobCl7dGhpcy5pbmRleGVkVmFsdWVzPWwuc2xpY2UoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXNldFZhbHVlQXRJbmRleChsLGEpe3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNb''@;'; put 'put ''bF09YSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhcigpe3RoaXMuc2V0RGVmYXVsdFZhbHVlcygpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmdldFZhbHVlcygpLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aD0wLG1sKHRoaXMuaW5pdFZhbHVlT3JGbik/R2EobC0xLGE9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNoKHRoaXMuaW5pdFZhbHVlT3JGbihhKSkpOkdh''@;'; put 'put ''KGwtMSwoKT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1pbml0KGwpe3JldHVybiB0aGlzLnNldERlZmF1bHRWYWx1ZXMobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbml0IiksdGhpc31pbnNlcnQoKXt0''@;'; put 'put ''aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXJlbW92ZSgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5pbmRleGVkVmFsdWVzPW51bGwsdGhpcy5pbml0VmFsdWVPckZuPW51bGx9fWZ1bmN0aW9uIEhLKGMsbCxh''@;'; put 'put ''KXtyZXR1cm5bLi4uYy5zbGljZSgwLGwpLC4uLmEsLi4uYy5zbGljZShsKV19ZnVuY3Rpb24gS0UoYyxsKXtyZXR1cm4gSW0oYyxhPT4hMT09PWwuaW5jbHVkZXMoYSkpfWZ1bmN0aW9uIE5LKGMsbCl7cmV0dXJuIHlzKGMsYT0+YS1sLmZpbHRlcihkPT5kPGEpLmxlbmd0aCl9ZnVuY3Rpb24g''@;'; put 'put ''VksoYyxsKXtjb25zdCBhPWxbMF0sZD1sLmxlbmd0aDtyZXR1cm4geXMoYyxoPT5oPj1hP2grZDpoKX1UbChlOSx5MSk7Y2xhc3MgRDNlIGV4dGVuZHMgZTl7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPVZLKHRoaXMuaW5kZXhlZFZhbHVlcyxhKTt0aGlz''@;'; put 'put ''LmluZGV4ZWRWYWx1ZXM9SEsoZCxsLGEpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPUtFKHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9TksoYSxsKSxzdXBlci5yZW1vdmUobCl9fWZ1bmN0aW9uIEJLKGMsbCxhLGQpe2NvbnN0IGg9YS5sZW5n''@;'; put 'put ''dGg/YVswXTp2b2lkIDA7cmV0dXJuWy4uLmMuc2xpY2UoMCxoKSwuLi5hLm1hcCgoZix2KT0+bWwoZCk/ZChmLHYpOmQpLC4uLnZvaWQgMD09PWg/W106Yy5zbGljZShoKV19ZnVuY3Rpb24gaksoYyxsKXtyZXR1cm4gSW0oYywoYSxkKT0+ITE9PT1sLmluY2x1ZGVzKGQpKX1jbGFzcyBabSBl''@;'; put 'put ''eHRlbmRzIGU5e2luc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1CSyh0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1qSyh0aGlzLmluZGV4ZWRWYWx1ZXMsbCksc3VwZXIu''@;'; put 'put ''cmVtb3ZlKGwpfX1jbGFzcyBmUCBleHRlbmRzIFpte2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl9Z2V0SGlkZGVuSW5kZXhlcygpe3JldHVybiBxdSh0aGlzLmdldFZhbHVlcygpLChsLGEsZCk9Pihh''@;'; put 'put ''JiZsLnB1c2goZCksbCksW10pfX1jbGFzcyBwUCBleHRlbmRzIGU5e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBIdHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE50dChjKXt2YXIgbD1mdW5jdGlvbiBWdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8''@;'; put 'put ''fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJvcmRlck9mSW5kZXhlcyIsW10pfWdldFZhbHVlcygpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcChsPT50aGlzLmluZGV4ZWRWYWx1ZXNbbF0pfXNldFZhbHVlcyhsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPVsu''@;'; put 'put ''Li5BcnJheShsLmxlbmd0aCkua2V5cygpXSxzdXBlci5zZXRWYWx1ZXMobCl9c2V0VmFsdWVBdEluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoO3JldHVybiBsPHRo''@;'; put 'put ''aXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSwhMT09PXRoaXMub3JkZXJPZkluZGV4ZXMuaW5jbHVkZXMobCkmJnRoaXMub3JkZXJPZkluZGV4ZXMuc3BsaWNlKGQsMCxsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhclZhbHVl''@;'; put 'put ''KGwpe3RoaXMub3JkZXJPZkluZGV4ZXM9S0UodGhpcy5vcmRlck9mSW5kZXhlcyxbbF0pLG1sKHRoaXMuaW5pdFZhbHVlT3JGbik/c3VwZXIuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5pbml0VmFsdWVPckZuKGwpKTpzdXBlci5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmluaXRWYWx1ZU9yRm4p''@;'; put 'put ''fWdldExlbmd0aCgpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5vcmRlck9m''@;'; put 'put ''SW5kZXhlcy5sZW5ndGg9MCxzdXBlci5zZXREZWZhdWx0VmFsdWVzKGwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1CSyh0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksdGhpcy5vcmRlck9mSW5kZXhlcz1WSyh0aGlzLm9yZGVyT2ZJbmRleGVzLGEp''@;'; put 'put ''LHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9aksodGhpcy5pbmRleGVkVmFsdWVzLGwpLHRoaXMub3JkZXJPZkluZGV4ZXM9S0UodGhpcy5vcmRlck9mSW5kZXhlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPU5LKHRoaXMub3JkZXJPZkluZGV4ZXMsbCks''@;'; put 'put ''c3VwZXIucmVtb3ZlKGwpfWdldEVudHJpZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+W2wsdGhpcy5nZXRWYWx1ZUF0SW5kZXgobCldKX19Y2xhc3MgcUUgZXh0ZW5kcyBabXtjb25zdHJ1Y3Rvcigpe3N1cGVyKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfWdldFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuIHF1KHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNvbnN0IEkzZT1uZXcgTWFwKFtbImhpZGluZyIsZlBdLFsiaW5kZXgiLGU5XSxbImxpbmtlZFBoeXNpY2Fs''@;'; put 'put ''SW5kZXhUb1ZhbHVlIixwUF0sWyJwaHlzaWNhbEluZGV4VG9WYWx1ZSIsWm1dLFsidHJpbW1pbmciLHFFXV0pO2xldCB6Sz0wO2NsYXNzIFVLe2NvbnN0cnVjdG9yKCl7IWZ1bmN0aW9uIGp0dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24genR0KGMpe3ZhciBsPWZ1bmN0aW9uIFV0dChjLGwp''@;'; put 'put ''e2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q''@;'; put 'put ''cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1''@;'; put 'put ''ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImNvbGxlY3Rpb24iLG5ldyBNYXApfXJlZ2lzdGVyKGwsYSl7ITE9PT10aGlzLmNvbGxlY3Rpb24uaGFzKGwpJiYodGhpcy5jb2xsZWN0aW9uLnNldChsLGEpLGEuYWRkTG9jYWxI''@;'; put 'put ''b29rKCJjaGFuZ2UiLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSkpLHpLKz0xKX11bnJlZ2lzdGVyKGwpe2NvbnN0IGE9dGhpcy5jb2xsZWN0aW9uLmdldChsKTtQYShhKSYmKGEuZGVzdHJveSgpLHRoaXMuY29sbGVjdGlvbi5kZWxldGUobCksdGhpcy5ydW5Mb2NhbEhvb2tz''@;'; put 'put ''KCJjaGFuZ2UiLGEpLHpLLT0xKX11bnJlZ2lzdGVyQWxsKCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKGwsYSk9PnRoaXMudW5yZWdpc3RlcihhKSksdGhpcy5jb2xsZWN0aW9uLmNsZWFyKCl9Z2V0KGwpe3JldHVybiBfYyhsKT9BcnJheS5mcm9tKHRoaXMuY29sbGVjdGlvbi52YWx1ZXMo''@;'; put 'put ''KSk6dGhpcy5jb2xsZWN0aW9uLmdldChsKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5jb2xsZWN0aW9uLnNpemV9cmVtb3ZlRnJvbUV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9PnthLnJlbW92ZShsKX0pfWluc2VydFRvRXZlcnkobCxhKXt0aGlzLmNvbGxlY3Rpb24uZm9y''@;'; put 'put ''RWFjaChkPT57ZC5pbnNlcnQobCxhKX0pfWluaXRFdmVyeShsKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChhPT57YS5pbml0KGwpfSl9fWZ1bmN0aW9uIFpLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXdHQoYyl7dmFyIGw9ZnVuY3Rpb24gWXR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31UbChVSyx5MSk7Y2xhc3MgUjNlIGV4dGVuZHMgVUt7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLFpLKHRoaXMsIm1lcmdlZFZhbHVlc0NhY2hlIixbXSksWksodGhpcywiYWdncmVnYXRpb25GdW5jdGlvbiIsdm9pZCAwKSxa''@;'; put 'put ''Syh0aGlzLCJmYWxsYmFja1ZhbHVlIix2b2lkIDApLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbj1sLHRoaXMuZmFsbGJhY2tWYWx1ZT1hfWdldE1lcmdlZFZhbHVlcygpe2lmKCEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0p''@;'; put 'put ''KXJldHVybiB0aGlzLm1lcmdlZFZhbHVlc0NhY2hlO2lmKDA9PT10aGlzLmdldExlbmd0aCgpKXJldHVybltdO2NvbnN0IGE9eXModGhpcy5nZXQoKSxmPT5mLmdldFZhbHVlcygpKSxkPVtdLGg9UGEoYVswXSkmJmFbMF0ubGVuZ3RofHwwO2ZvcihsZXQgZj0wO2Y8aDtmKz0xKXtjb25zdCB2''@;'; put 'put ''PVtdO2ZvcihsZXQgTT0wO008dGhpcy5nZXRMZW5ndGgoKTtNKz0xKXYucHVzaChhW01dW2ZdKTtkLnB1c2godil9cmV0dXJuIHlzKGQsdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uKX1nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKGEpW2xd''@;'; put 'put ''O3JldHVybiBQYShkKT9kOnRoaXMuZmFsbGJhY2tWYWx1ZX11cGRhdGVDYWNoZSgpe3RoaXMubWVyZ2VkVmFsdWVzQ2FjaGU9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoITEpfX1mdW5jdGlvbiBMM2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBXSz1uZXcgV2Vha01hcDtjbGFzcyBPM2V7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24gR3R0KGMsbCxhKXsoZnVuY3Rpb24g''@;'; put 'put ''JHR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxXSyxbXSl9c3Vic2NyaWJlKGwpe3JldHVybiB0aGlzLmFk''@;'; put 'put ''ZExvY2FsSG9vaygiY2hhbmdlIixsKSx0aGlzLl93cml0ZShmdW5jdGlvbiBxdHQoYyxsKXtyZXR1cm4gYy5nZXQoTDNlKGMsbCkpfShXSyx0aGlzKSksdGhpc311bnN1YnNjcmliZSgpe3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoInVuc3Vic2NyaWJlIiksdGhpcy5jbGVhckxvY2FsSG9v''@;'; put 'put ''a3MoKSx0aGlzfV93cml0ZShsKXtyZXR1cm4gbC5sZW5ndGg+MCYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwpLHRoaXN9X3dyaXRlSW5pdGlhbENoYW5nZXMobCl7IWZ1bmN0aW9uIEt0dChjLGwsYSl7Yy5zZXQoTDNlKGMsbCksYSl9KFdLLHRoaXMsbCl9fWZ1bmN0aW9uIFAzZShj''@;'; put 'put ''LGwpe2NvbnN0IGE9W107bGV0IGQ9MCxoPTA7Zm9yKDtkPGMubGVuZ3RoJiZoPGwubGVuZ3RoO2QrKyxoKyspY1tkXSE9PWxbaF0mJmEucHVzaCh7b3A6InJlcGxhY2UiLGluZGV4Omgsb2xkVmFsdWU6Y1tkXSxuZXdWYWx1ZTpsW2hdfSk7Zm9yKDtkPGwubGVuZ3RoO2QrKylhLnB1c2goe29w''@;'; put 'put ''OiJpbnNlcnQiLGluZGV4OmQsb2xkVmFsdWU6dm9pZCAwLG5ld1ZhbHVlOmxbZF19KTtmb3IoO2g8Yy5sZW5ndGg7aCsrKWEucHVzaCh7b3A6InJlbW92ZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2hdLG5ld1ZhbHVlOnZvaWQgMH0pO3JldHVybiBhfWZ1bmN0aW9uIFhFKGMsbCxhKXsoZnVuY3Rp''@;'; put 'put ''b24gWHR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZMihjLGwpe3JldHVybiBjLmdldChGM2UoYyxs''@;'; put 'put ''KSl9ZnVuY3Rpb24gZ1AoYyxsLGEpe3JldHVybiBjLnNldChGM2UoYyxsKSxhKSxhfWZ1bmN0aW9uIEYzZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0''@;'; put 'put ''ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9VGwoTzNlLHkxKTt2YXIgbVA9bmV3IFdlYWtNYXAsSkU9bmV3IFdlYWtNYXAsdlA9bmV3IFdlYWtNYXAsYlA9bmV3IFdlYWtNYXAseVA9bmV3IFdlYWtNYXA7Y2xhc3MgSnR0e2NvbnN0cnVjdG9yKCl7bGV0e2luaXRp''@;'; put 'put ''YWxJbmRleFZhbHVlOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtYRSh0aGlzLG1QLG5ldyBTZXQpLFhFKHRoaXMsSkUsW10pLFhFKHRoaXMsdlAsW10pLFhFKHRoaXMsYlAsITEpLFhFKHRoaXMseVAsITEpLGdQKHlQLHRoaXMs''@;'; put 'put ''bD8/ITEpfWNyZWF0ZU9ic2VydmVyKCl7Y29uc3QgbD1uZXcgTzNlO3JldHVybiBZMihtUCx0aGlzKS5hZGQobCksbC5hZGRMb2NhbEhvb2soInVuc3Vic2NyaWJlIiwoKT0+e1kyKG1QLHRoaXMpLmRlbGV0ZShsKX0pLGwuX3dyaXRlSW5pdGlhbENoYW5nZXMoUDNlKFkyKEpFLHRoaXMpLFky''@;'; put 'put ''KHZQLHRoaXMpKSksbH1lbWl0KGwpe2xldCBhPVkyKHZQLHRoaXMpOyghWTIoYlAsdGhpcyl8fFkyKEpFLHRoaXMpLmxlbmd0aCE9PWwubGVuZ3RoKSYmKDA9PT1sLmxlbmd0aD9sPW5ldyBBcnJheShhLmxlbmd0aCkuZmlsbChZMih5UCx0aGlzKSk6Z1AoSkUsdGhpcyxuZXcgQXJyYXkobC5s''@;'; put 'put ''ZW5ndGgpLmZpbGwoWTIoeVAsdGhpcykpKSxZMihiUCx0aGlzKXx8KGdQKGJQLHRoaXMsITApLGE9WTIoSkUsdGhpcykpKTtjb25zdCBkPVAzZShhLGwpO1kyKG1QLHRoaXMpLmZvckVhY2goaD0+aC5fd3JpdGUoZCkpLGdQKHZQLHRoaXMsbCl9fWZ1bmN0aW9uIEsxKGMsbCxhKXtyZXR1cm4o''@;'; put 'put ''bD1mdW5jdGlvbiBRdHQoYyl7dmFyIGw9ZnVuY3Rpb24gZW50KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIi''@;'; put 'put ''fShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBZS3tjb25zdHJ1Y3Rvcigpe0sxKHRoaXMsImluZGV4ZXNTZXF1ZW5jZSIsbmV3IEQzZSksSzEodGhpcywi''@;'; put 'put ''dHJpbW1pbmdNYXBzQ29sbGVjdGlvbiIsbmV3IFIzZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSkpLEsxKHRoaXMsImhpZGluZ01hcHNDb2xsZWN0aW9uIixuZXcgUjNlKGw9Pmwuc29tZShhPT4hMD09PWEpLCExKSksSzEodGhpcywidmFyaW91c01hcHNDb2xsZWN0aW9uIixuZXcgVUspLEsx''@;'; put 'put ''KHRoaXMsImhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlIixuZXcgSnR0KHtpbml0aWFsSW5kZXhWYWx1ZTohMX0pKSxLMSh0aGlzLCJub3RUcmltbWVkSW5kZXhlc0NhY2hlIixbXSksSzEodGhpcywibm90SGlkZGVuSW5kZXhlc0NhY2hlIixbXSksSzEodGhpcywiaXNCYXRjaGVkIiwhMSksSzEo''@;'; put 'put ''dGhpcywiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZCIsITEpLEsxKHRoaXMsImluZGV4ZXNDaGFuZ2VTb3VyY2UiLHZvaWQgMCksSzEodGhpcywidHJpbW1lZEluZGV4ZXNDaGFuZ2VkIiwhMSksSzEodGhpcywiaGlkZGVuSW5kZXhlc0NoYW5nZWQiLCExKSxLMSh0aGlzLCJyZW5kZXJhYmxlUGh5''@;'; put 'put ''c2ljYWxJbmRleGVzQ2FjaGUiLFtdKSxLMSh0aGlzLCJmcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZSIsbmV3IE1hcCksSzEodGhpcywiZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZSIsbmV3IE1hcCksdGhpcy5pbmRleGVzU2VxdWVuY2UuYWRkTG9jYWxIb29rKCJj''@;'; put 'put ''aGFuZ2UiLCgpPT57dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsdGhpcy5p''@;'; put 'put ''bmRleGVzU2VxdWVuY2UsbnVsbCl9KSx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy50cmlt''@;'; put 'put ''bWluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLmhpZGluZ01h''@;'; put 'put ''cHNDb2xsZWN0aW9uKX0pLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24pfSl9c3VzcGVuZE9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0h''@;'; put 'put ''MH1yZXN1bWVPcGVyYXRpb25zKCl7dGhpcy5pc0JhdGNoZWQ9ITEsdGhpcy51cGRhdGVDYWNoZSgpfWNyZWF0ZUNoYW5nZXNPYnNlcnZlcihsKXtpZigiaGlkaW5nIiE9PWwpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbmRleCBtYXAgdHlwZSAiJHtsfSIuYCk7cmV0dXJuIHRoaXMu''@;'; put 'put ''aGlkaW5nQ2hhbmdlc09ic2VydmFibGUuY3JlYXRlT2JzZXJ2ZXIoKX1jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKGwsYSxkKXtyZXR1cm4gdGhpcy5yZWdpc3Rlck1hcChsLGZ1bmN0aW9uIEJ0dChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06bnVsbDtpZighSTNlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBtYXAgdHlwZSAoIiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gbmV3KEkzZS5nZXQoYykpKGwpfShhLGQpKX1yZWdpc3Rlck1hcChsLGEpe2lmKHRoaXMudHJpbW1pbmdN''@;'; put 'put ''YXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGwpfHx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5nZXQobCkpdGhyb3cgRXJyb3IoYE1hcCB3aXRoIG5hbWUgIiR7bH0iIGhhcyBiZWVuIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTthIGluc3RhbmNl''@;'; put 'put ''b2YgcUU/dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk6YSBpbnN0YW5jZW9mIGZQP3RoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTp0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihsLGEpO2NvbnN0IGQ9dGhpcy5nZXROdW1i''@;'; put 'put ''ZXJPZkluZGV4ZXMoKTtyZXR1cm4gZD4wJiZhLmluaXQoZCksYX11bnJlZ2lzdGVyTWFwKGwpe3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51''@;'; put 'put ''bnJlZ2lzdGVyKGwpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKX1nZXRQaHlz''@;'; put 'put ''aWNhbEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPXRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZVtsXTtyZXR1cm4gUGEoYSk/YTpudWxsfWdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKXtjb25zdCBhPXRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlW2xdO3Jl''@;'; put 'put ''dHVybiBQYShhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLmdldChsKTtyZXR1cm4gUGEoYSk/YTpudWxsfWdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Z2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgobCkpfWdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuZ2V0KGwpO3JldHVybiBQYShh''@;'; put 'put ''KT9hOm51bGx9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihudWxsPT09dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKSlyZXR1cm4gbnVsbDtpZih0aGlz''@;'; put 'put ''LmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuaGFzKGwpKXJldHVybiBsO2NvbnN0IGY9QXJyYXkuZnJvbSh0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUua2V5cygpKTtsZXQgdj0tMTtyZXR1cm4gdj1hPjA/Zi5maW5kSW5kZXgoTT0+TT5sKTpmLnJl''@;'; put 'put ''dmVyc2UoKS5maW5kSW5kZXgoTT0+TTxsKSwtMT09PXY/ZD90aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLC1hLCExKTpudWxsOmZbdl19aW5pdFRvTGVuZ3RoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMu''@;'; put 'put ''Z2V0TnVtYmVyT2ZJbmRleGVzKCk7dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkobCkua2V5cygpXSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT1bLi4ubmV3IEFycmF5KGwpLmtleXMoKV0sdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0No''@;'; put 'put ''YW5nZVNvdXJjZT0iaW5pdCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5pdChsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5zdXNwZW5kT3BlcmF0aW9u''@;'; put 'put ''cygpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKX1maXRUb0xlbmd0aChsKXtjb25zdCBhPXRoaXMuZ2V0''@;'; put 'put ''TnVtYmVyT2ZJbmRleGVzKCk7aWYobDxhKXtjb25zdCBkPVsuLi5BcnJheSh0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLWwpLmtleXMoKV0ubWFwKGg9PmgrbCk7dGhpcy5yZW1vdmVJbmRleGVzKGQpfWVsc2UgdGhpcy5pbnNlcnRJbmRleGVzKGEsbC1hKX1nZXRJbmRleGVzU2VxdWVuY2Uo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5pbmRleGVzU2VxdWVuY2UuZ2V0VmFsdWVzKCl9c2V0SW5kZXhlc1NlcXVlbmNlKGwpe3ZvaWQgMD09PXRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0idXBkYXRlIiksdGhpcy5pbmRleGVzU2VxdWVuY2Uuc2V0VmFsdWVz''@;'; put 'put ''KGwpLCJ1cGRhdGUiPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCl9Z2V0Tm90VHJpbW1lZEluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRz''@;'; put 'put ''WzBdKT90aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzVHJpbW1lZChkKSl9Z2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmxlbmd0aH1n''@;'; put 'put ''ZXROb3RIaWRkZW5JbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9PT10aGlz''@;'; put 'put ''LmlzSGlkZGVuKGQpKX1nZXROb3RIaWRkZW5JbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcygpLmxlbmd0aH1nZXRSZW5kZXJhYmxlSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxh''@;'; put 'put ''cmd1bWVudHNbMF0pP3RoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlOnRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmFibGVJ''@;'; put 'put ''bmRleGVzKCkubGVuZ3RofWdldE51bWJlck9mSW5kZXhlcygpe3JldHVybiB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmxlbmd0aH1tb3ZlSW5kZXhlcyhsLGEpeyJudW1iZXIiPT10eXBlb2YgbCYmKGw9W2xdKTtjb25zdCBkPXlzKGwsWj0+dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChaKSksaD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksZj1sLmxlbmd0aCx2PUtFKHRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCksZCksTT12LmZpbHRlcihaPT4hMT09PXRoaXMuaXNUcmltbWVkKFopKTtsZXQgRD12LmluZGV4T2YoTVtNLmxlbmd0aC0xXSkrMTthK2Y8''@;'; put 'put ''aCYmKEQ9di5pbmRleE9mKE1bYV0pKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Im1vdmUiLHRoaXMuc2V0SW5kZXhlc1NlcXVlbmNlKEhLKHYsRCxkKSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMH1pc1RyaW1tZWQobCl7cmV0dXJuIHRoaXMudHJpbW1pbmdNYXBzQ29sbGVj''@;'; put 'put ''dGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCl9aXNIaWRkZW4obCl7cmV0dXJuIHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwpfWluc2VydEluZGV4ZXMobCxhKXtjb25zdCBkPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKVtsXSxoPVBhKGQp''@;'; put 'put ''P2Q6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSxmPXRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5jbHVkZXMoZCk/dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5pbmRleE9mKGQpOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksdj15cyhuZXcgQXJyYXkoYSkuZmlsbChoKSwoTSxEKT0+''@;'; put 'put ''TStEKTt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbnNlcnQiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmluc2VydChmLHYpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRv''@;'; put 'put ''RXZlcnkoZix2KSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZix2KSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGYsdiksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCl9cmVtb3ZlSW5kZXhlcyhsKXt0aGlzLnN1c3BlbmRPcGVyYXRpb25z''@;'; put 'put ''KCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJyZW1vdmUiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnJlbW92ZShsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy5oaWRpbmdNYXBzQ29s''@;'; put 'put ''bGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpfXVwZGF0ZUNhY2hlKCl7KCEwPT09KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1''@;'; put 'put ''bWVudHNbMF0pfHwhMT09PXRoaXMuaXNCYXRjaGVkJiYhMD09PSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWR8fHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkfHx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkKSkmJih0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUo''@;'; put 'put ''KSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoITEpLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcyghMSksdGhpcy5yZW5k''@;'; put 'put ''ZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcyghMSksdGhpcy5jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygpLHRoaXMuY2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQm''@;'; put 'put ''JnRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuZW1pdCh0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNhY2hlVXBkYXRlZCIse2luZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ6dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2Vk''@;'; put 'put ''LHRyaW1tZWRJbmRleGVzQ2hhbmdlZDp0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZCxoaWRkZW5JbmRleGVzQ2hhbmdlZDp0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkfSksdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSExLHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSExLHRoaXMu''@;'; put 'put ''aGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITEpfWNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCl7Y29uc3QgbD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDth''@;'; put 'put ''Kz0xKXtjb25zdCBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoYSk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5zZXQoZCxhKX19Y2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpe2NvbnN0IGw9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhl''@;'; put 'put ''c0xlbmd0aCgpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpLGg9dGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChkKTt0''@;'; put 'put ''aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuc2V0KGgsYSl9fX1mdW5jdGlvbiBIM2UoYyl7Y29uc3QgYT0vXihbYS16QS1aXXsyfSktKFthLXpBLVpdezJ9KSQvLmV4ZWMoYyk7cmV0dXJuIGE/YCR7YVsxXS50b0xvd2VyQ2FzZSgpfS0ke2FbMl0udG9VcHBlckNhc2Uo''@;'; put 'put ''KX1gOmN9ZnVuY3Rpb24gTjNlKGMpe1BhKGMpJiZOJChnbGBMYW5ndWFnZSB3aXRoIGNvZGUgIiR7Y30iIHdhcyBub3QgZm91bmQuIFlvdSBzaG91bGQgcmVnaXN0ZXIgcGFydGljdWxhciBsYW5ndWFnZVx4MjAKICAgIGJlZm9yZSB1c2luZyBpdC4gUmVhZCBtb3JlIGFib3V0IHRoaXMgaXNz''@;'; put 'put ''dWUgYXQ6IGh0dHBzOi8vZG9jcy5oYW5kc29udGFibGUuY29tL2kxOG4vbWlzc2luZy1sYW5ndWFnZS1jb2RlLmApfVRsKFlLLHkxKTtjb25zdHtyZWdpc3RlcjpybnQsZ2V0VmFsdWVzOmludH09cjMoInBocmFzZUZvcm1hdHRlcnMiKTshZnVuY3Rpb24gYW50KGMsbCl7cm50KGMsbCl9KCJw''@;'; put 'put ''bHVyYWxpemUiLGZ1bmN0aW9uIG5udChjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZOdW1iZXIuaXNJbnRlZ2VyKGwpP2NbbF06Y30pO2NvbnN0IFYzZT0iQ29udGV4dE1lbnU6aXRlbXMiLEdLPWAke1YzZX0ubm9JdGVtc2AsJEs9YCR7VjNlfS5pbnNlcnRSb3dBYm92ZWAsS0s9YCR7''@;'; put 'put ''VjNlfS5pbnNlcnRSb3dCZWxvd2AscUs9YCR7VjNlfS5pbnNlcnRDb2x1bW5PblRoZUxlZnRgLFhLPWAke1YzZX0uaW5zZXJ0Q29sdW1uT25UaGVSaWdodGAsSks9YCR7VjNlfS5yZW1vdmVSb3dgLFFLPWAke1YzZX0ucmVtb3ZlQ29sdW1uYCxlcT1gJHtWM2V9LnVuZG9gLHRxPWAke1YzZX0u''@;'; put 'put ''cmVkb2AsX1A9YCR7VjNlfS5yZWFkT25seWAsbnE9YCR7VjNlfS5jbGVhckNvbHVtbmAscnE9YCR7VjNlfS5jb3B5YCxpcT1gJHtWM2V9LmNvcHlXaXRoSGVhZGVyc2AsYXE9YCR7VjNlfS5jb3B5V2l0aEdyb3VwSGVhZGVyc2Asb3E9YCR7VjNlfS5jb3B5SGVhZGVyc09ubHlgLHNxPWAke1Yz''@;'; put 'put ''ZX0uY3V0YCxscT1gJHtWM2V9LmZyZWV6ZUNvbHVtbmAsY3E9YCR7VjNlfS51bmZyZWV6ZUNvbHVtbmAsdXE9YCR7VjNlfS5tZXJnZUNlbGxzYCxkcT1gJHtWM2V9LnVubWVyZ2VDZWxsc2AsaHE9YCR7VjNlfS5hZGRDb21tZW50YCxmcT1gJHtWM2V9LmVkaXRDb21tZW50YCxwcT1gJHtWM2V9''@;'; put 'put ''LnJlbW92ZUNvbW1lbnRgLGdxPWAke1YzZX0ucmVhZE9ubHlDb21tZW50YCxtcT1gJHtWM2V9LmFsaWduYCx2cT1gJHtWM2V9LmFsaWduLmxlZnRgLGJxPWAke1YzZX0uYWxpZ24uY2VudGVyYCx5cT1gJHtWM2V9LmFsaWduLnJpZ2h0YCxfcT1gJHtWM2V9LmFsaWduLmp1c3RpZnlgLHdxPWAk''@;'; put 'put ''e1YzZX0uYWxpZ24udG9wYCxDcT1gJHtWM2V9LmFsaWduLm1pZGRsZWAsU3E9YCR7VjNlfS5hbGlnbi5ib3R0b21gLE1xPWAke1YzZX0uYm9yZGVyc2AseHE9YCR7VjNlfS5ib3JkZXJzLnRvcGAsRXE9YCR7VjNlfS5ib3JkZXJzLnJpZ2h0YCxUcT1gJHtWM2V9LmJvcmRlcnMuYm90dG9tYCxB''@;'; put 'put ''cT1gJHtWM2V9LmJvcmRlcnMubGVmdGAsa3E9YCR7VjNlfS5ib3JkZXJzLnJlbW92ZWAsRHE9YCR7VjNlfS5uZXN0ZWRIZWFkZXJzLmluc2VydENoaWxkUm93YCxJcT1gJHtWM2V9Lm5lc3RlZEhlYWRlcnMuZGV0YWNoRnJvbVBhcmVudGAsUnE9YCR7VjNlfS5oaWRlQ29sdW1uYCxMcT1gJHtW''@;'; put 'put ''M2V9LnNob3dDb2x1bW5gLE9xPWAke1YzZX0uaGlkZVJvd2AsUHE9YCR7VjNlfS5zaG93Um93YCxxMT0iRmlsdGVyczoiLFdjPWAke3ExfWNvbmRpdGlvbnNgLHdQPWAke1djfS5ub25lYCxGcT1gJHtXY30uaXNFbXB0eWAsSHE9YCR7V2N9LmlzTm90RW1wdHlgLE5xPWAke1djfS5pc0VxdWFs''@;'; put 'put ''VG9gLFZxPWAke1djfS5pc05vdEVxdWFsVG9gLEJxPWAke1djfS5iZWdpbnNXaXRoYCxqcT1gJHtXY30uZW5kc1dpdGhgLHpxPWAke1djfS5jb250YWluc2AsVXE9YCR7V2N9LmRvZXNOb3RDb250YWluYCxzbnQ9YCR7V2N9LmJ5VmFsdWVgLFpxPWAke1djfS5ncmVhdGVyVGhhbmAsV3E9YCR7''@;'; put 'put ''V2N9LmdyZWF0ZXJUaGFuT3JFcXVhbFRvYCxZcT1gJHtXY30ubGVzc1RoYW5gLEdxPWAke1djfS5sZXNzVGhhbk9yRXF1YWxUb2AsJHE9YCR7V2N9LmlzQmV0d2VlbmAsS3E9YCR7V2N9LmlzTm90QmV0d2VlbmAscXE9YCR7V2N9LmFmdGVyYCxYcT1gJHtXY30uYmVmb3JlYCxKcT1gJHtXY30u''@;'; put 'put ''dG9kYXlgLFFxPWAke1djfS50b21vcnJvd2AsZVg9YCR7V2N9Lnllc3RlcmRheWAsdFg9YCR7cTF9bGFiZWxzLmZpbHRlckJ5Q29uZGl0aW9uYCxuWD1gJHtxMX1sYWJlbHMuZmlsdGVyQnlWYWx1ZWAsclg9YCR7cTF9bGFiZWxzLmNvbmp1bmN0aW9uYCxDUD1gJHtxMX1sYWJlbHMuZGlzanVu''@;'; put 'put ''Y3Rpb25gLFNQPWAke3ExfXZhbHVlcy5ibGFua0NlbGxzYCxpWD1gJHtxMX1idXR0b25zLnNlbGVjdEFsbGAsYVg9YCR7cTF9YnV0dG9ucy5jbGVhcmAsb1g9YCR7cTF9YnV0dG9ucy5va2Asc1g9YCR7cTF9YnV0dG9ucy5jYW5jZWxgLGxYPWAke3ExfWJ1dHRvbnMucGxhY2Vob2xkZXIuc2Vh''@;'; put 'put ''cmNoYCxjWD1gJHtxMX1idXR0b25zLnBsYWNlaG9sZGVyLnZhbHVlYCx1WD1gJHtxMX1idXR0b25zLnBsYWNlaG9sZGVyLnNlY29uZFZhbHVlYCxkWD0iQ2hlY2tib3hSZW5kZXJlcjoiLGhYPWAke2RYfWNoZWNrZWRgLGZYPWAke2RYfXVuY2hlY2tlZGAsQjNlPXtsYW5ndWFnZUNvZGU6ImVu''@;'; put 'put ''LVVTIixbR0tdOiJObyBhdmFpbGFibGUgb3B0aW9ucyIsWyRLXToiSW5zZXJ0IHJvdyBhYm92ZSIsW0tLXToiSW5zZXJ0IHJvdyBiZWxvdyIsW3FLXToiSW5zZXJ0IGNvbHVtbiBsZWZ0IixbWEtdOiJJbnNlcnQgY29sdW1uIHJpZ2h0IixbSktdOlsiUmVtb3ZlIHJvdyIsIlJlbW92ZSByb3dz''@;'; put 'put ''Il0sW1FLXTpbIlJlbW92ZSBjb2x1bW4iLCJSZW1vdmUgY29sdW1ucyJdLFtlcV06IlVuZG8iLFt0cV06IlJlZG8iLFtfUF06IlJlYWQgb25seSIsW25xXToiQ2xlYXIgY29sdW1uIixbbXFdOiJBbGlnbm1lbnQiLFt2cV06IkxlZnQiLFticV06IkNlbnRlciIsW3lxXToiUmlnaHQiLFtfcV06''@;'; put 'put ''Ikp1c3RpZnkiLFt3cV06IlRvcCIsW0NxXToiTWlkZGxlIixbU3FdOiJCb3R0b20iLFtscV06IkZyZWV6ZSBjb2x1bW4iLFtjcV06IlVuZnJlZXplIGNvbHVtbiIsW01xXToiQm9yZGVycyIsW3hxXToiVG9wIixbRXFdOiJSaWdodCIsW1RxXToiQm90dG9tIixbQXFdOiJMZWZ0Iixba3FdOiJS''@;'; put 'put ''ZW1vdmUgYm9yZGVyKHMpIixbaHFdOiJBZGQgY29tbWVudCIsW2ZxXToiRWRpdCBjb21tZW50IixbcHFdOiJEZWxldGUgY29tbWVudCIsW2dxXToiUmVhZC1vbmx5IGNvbW1lbnQiLFt1cV06Ik1lcmdlIGNlbGxzIixbZHFdOiJVbm1lcmdlIGNlbGxzIixbcnFdOiJDb3B5IixbaXFdOlsiQ29w''@;'; put 'put ''eSB3aXRoIGhlYWRlciIsIkNvcHkgd2l0aCBoZWFkZXJzIl0sW2FxXTpbIkNvcHkgd2l0aCBncm91cCBoZWFkZXIiLCJDb3B5IHdpdGggZ3JvdXAgaGVhZGVycyJdLFtvcV06WyJDb3B5IGhlYWRlciBvbmx5IiwiQ29weSBoZWFkZXJzIG9ubHkiXSxbc3FdOiJDdXQiLFtEcV06Ikluc2VydCBj''@;'; put 'put ''aGlsZCByb3ciLFtJcV06IkRldGFjaCBmcm9tIHBhcmVudCIsW1JxXTpbIkhpZGUgY29sdW1uIiwiSGlkZSBjb2x1bW5zIl0sW0xxXTpbIlNob3cgY29sdW1uIiwiU2hvdyBjb2x1bW5zIl0sW09xXTpbIkhpZGUgcm93IiwiSGlkZSByb3dzIl0sW1BxXTpbIlNob3cgcm93IiwiU2hvdyByb3dz''@;'; put 'put ''Il0sW3dQXToiTm9uZSIsW0ZxXToiSXMgZW1wdHkiLFtIcV06IklzIG5vdCBlbXB0eSIsW05xXToiSXMgZXF1YWwgdG8iLFtWcV06IklzIG5vdCBlcXVhbCB0byIsW0JxXToiQmVnaW5zIHdpdGgiLFtqcV06IkVuZHMgd2l0aCIsW3pxXToiQ29udGFpbnMiLFtVcV06IkRvZXMgbm90IGNvbnRh''@;'; put 'put ''aW4iLFtacV06IkdyZWF0ZXIgdGhhbiIsW1dxXToiR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIixbWXFdOiJMZXNzIHRoYW4iLFtHcV06Ikxlc3MgdGhhbiBvciBlcXVhbCB0byIsWyRxXToiSXMgYmV0d2VlbiIsW0txXToiSXMgbm90IGJldHdlZW4iLFtxcV06IkFmdGVyIixbWHFdOiJCZWZv''@;'; put 'put ''cmUiLFtKcV06IlRvZGF5IixbUXFdOiJUb21vcnJvdyIsW2VYXToiWWVzdGVyZGF5IixbU1BdOiJCbGFuayBjZWxscyIsW3RYXToiRmlsdGVyIGJ5IGNvbmRpdGlvbiIsW25YXToiRmlsdGVyIGJ5IHZhbHVlIixbclhdOiJBbmQiLFtDUF06Ik9yIixbaVhdOiJTZWxlY3QgYWxsIixbYVhdOiJD''@;'; put 'put ''bGVhciIsW29YXToiT0siLFtzWF06IkNhbmNlbCIsW2xYXToiU2VhcmNoIixbY1hdOiJWYWx1ZSIsW3VYXToiU2Vjb25kIHZhbHVlIixbaFhdOiJDaGVja2VkIixbZlhdOiJVbmNoZWNrZWQifSxsbnQ9VyxwWD1CM2UubGFuZ3VhZ2VDb2RlLHtyZWdpc3RlcjpjbnQsZ2V0SXRlbTpqM2UsaGFz''@;'; put 'put ''SXRlbTp1bnQsZ2V0VmFsdWVzOmRudH09cjMoImxhbmd1YWdlc0RpY3Rpb25hcmllcyIpO2Z1bmN0aW9uIHozZShjLGwpe2xldCBhPWMsZD1sO3JldHVybiBxbyhjKSYmKGQ9YyxhPWQubGFuZ3VhZ2VDb2RlKSxmdW5jdGlvbiBobnQoYyxsKXtjIT09cFgmJmZ1bmN0aW9uIHRudChjLGwpe1hv''@;'; put 'put ''KGwsKGEsZCk9PntfYyhjW2RdKSYmKGNbZF09YSl9KX0obCxqM2UocFgpKX0oYSxkKSxjbnQoYSxnMShkKSksZzEoZCl9ZnVuY3Rpb24gVTNlKGMpe3JldHVybiBnWChjKT9nMShqM2UoYykpOm51bGx9ZnVuY3Rpb24gZ1goYyl7cmV0dXJuIHVudChjKX1mdW5jdGlvbiBaM2UoYyxsLGEpe2Nv''@;'; put 'put ''bnN0IGQ9VTNlKGMpO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2NvbnN0IGg9ZFtsXTtpZihfYyhoKSlyZXR1cm4gbnVsbDtjb25zdCBmPWZ1bmN0aW9uIHBudChjLGwpe2xldCBhPWM7cmV0dXJuIFluKGZ1bmN0aW9uIG9udCgpe3JldHVybiBpbnQoKX0oKSxkPT57YT1kKGMsbCl9KSxhfSho''@;'; put 'put ''LGEpO3JldHVybiBBcnJheS5pc0FycmF5KGYpP2ZbMF06Zn16M2UoQjNlKTtjb25zdCBXM2U9ImFjdGl2ZS1oZWFkZXIiLG1YPSJoZWFkZXIiLHZYPSJhcmVhIixRRT0iZm9jdXMiO2NsYXNzIFkzZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2V0dGluZ3M9bCx0aGlzLmNlbGxSYW5nZT1hfHxu''@;'; put 'put ''dWxsfWlzRW1wdHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuY2VsbFJhbmdlfWFkZChsKXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dGhpcy5jZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy5jZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9cmVwbGFjZShsLGEpe2lm''@;'; put 'put ''KCF0aGlzLmlzRW1wdHkoKSl7aWYodGhpcy5jZWxsUmFuZ2UuZnJvbS5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS5mcm9tPWEsITA7aWYodGhpcy5jZWxsUmFuZ2UudG8uaXNFcXVhbChsKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UudG89YSwhMH1yZXR1cm4hMX1jbGVhcigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNlbGxSYW5nZT1udWxsLHRoaXN9Z2V0Q29ybmVycygpe2NvbnN0IGw9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm5bbC5yb3csbC5jb2wsYS5yb3csYS5jb2xd''@;'; put 'put ''fWRlc3Ryb3koKXt0aGlzLnJ1bkxvY2FsSG9va3MoImRlc3Ryb3kiKX19VGwoWTNlLHkxKTtjb25zdCBfbnQ9WTNlO2NvbnN0IHhnPWNsYXNzIE1udCBleHRlbmRzIF9udHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsbnVsbCksZnVuY3Rpb24gd250KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlv''@;'; put 'put ''biBDbnQoYyl7dmFyIGw9ZnVuY3Rpb24gU250KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0''@;'; put 'put ''dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBj''@;'; put 'put ''P09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywidmlzdWFsQ2VsbFJhbmdlIixudWxsKSx0aGlzLnZpc3VhbENlbGxSYW5nZT1hfHxudWxsLHRoaXMuY29tbWl0KCl9YWRk''@;'; put 'put ''KGwpe3JldHVybiBudWxsPT09dGhpcy52aXN1YWxDZWxsUmFuZ2U/dGhpcy52aXN1YWxDZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy52aXN1YWxDZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy52aXN1YWxDZWxsUmFuZ2U9''@;'; put 'put ''bnVsbCxzdXBlci5jbGVhcigpfXRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seShsKXtsZXR7ZnJvbTphLHRvOmR9PWwsaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoYSwxKSxmPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhkLC0xKTtyZXR1cm4gbnVsbD09PWh8fG51''@;'; put 'put ''bGw9PT1mP251bGw6KChoLnJvdz5mLnJvd3x8aC5jb2w+Zi5jb2wpJiYoaD1hLGY9ZCksdGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoaCxoLGYpKX1nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''Ml0/YXJndW1lbnRzWzJdOmE7Y29uc3QgaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLnJvd0luZGV4TWFwcGVyLGwucm93LGEpO2lmKG51bGw9PT1oKXJldHVybiBudWxsO2NvbnN0IGY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0''@;'; put 'put ''aW5ncy5jb2x1bW5JbmRleE1hcHBlcixsLmNvbCxkKTtyZXR1cm4gbnVsbD09PWY/bnVsbDp0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKX1nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhLGQpe3JldHVybiBhPDA/YTpsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLGQp''@;'; put 'put ''fWNvbW1pdCgpe2lmKG51bGw9PT10aGlzLnZpc3VhbENlbGxSYW5nZSlyZXR1cm4gdGhpcztjb25zdCBsPXRoaXMudHJpbVRvVmlzaWJsZUNlbGxzUmFuZ2VPbmx5KHRoaXMudmlzdWFsQ2VsbFJhbmdlKTtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVsbD09PWw/bnVsbDp0aGlzLmNyZWF0ZVJl''@;'; put 'put ''bmRlcmFibGVDZWxsUmFuZ2UobC5mcm9tLGwudG8pLHRoaXN9c3luY1dpdGgobCl7Y29uc3QgYT1sLmZyb20uY2xvbmUoKS5ub3JtYWxpemUoKSxkPSJOLVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEsaD0iVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpPzE6LTEs''@;'; put 'put ''Zj10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jkcyh0aGlzLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQpO2xldCB2PW51bGw7aWYoKG51bGw9PT1mfHxudWxsPT09Zi5jb2x8fG51bGw9PT1mLnJvdykmJih2PXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhhLGQs''@;'; put 'put ''aCkpLG51bGwhPT12JiZsLm92ZXJsYXBzKHYpKXtjb25zdCBNPWwuaGlnaGxpZ2h0LmNsb25lKCk7aWYoTS5yb3c+PTAmJihNLnJvdz12LnJvdyksTS5jb2w+PTAmJihNLmNvbD12LmNvbCksbnVsbD09PXRoaXMuY2VsbFJhbmdlKXtjb25zdCBEPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5k''@;'; put 'put ''ZXJhYmxlQ29vcmRzKE0pO3RoaXMuY2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKEQpfWwuc2V0SGlnaGxpZ2h0KE0pfXJldHVybiJmb2N1cyI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvblR5cGUmJm51bGwhPT1mJiZudWxsPT09diYmbC5zZXRIaWdobGlnaHQodGhp''@;'; put 'put ''cy52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0KSx0aGlzfWdldENvcm5lcnMoKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5jZWxsUmFuZ2U7cmV0dXJuW01hdGgubWluKGwucm93LGEucm93KSxNYXRoLm1pbihsLmNvbCxhLmNvbCksTWF0aC5tYXgobC5yb3csYS5yb3cpLE1hdGgubWF4KGwu''@;'; put 'put ''Y29sLGEuY29sKV19Z2V0VmlzdWFsQ29ybmVycygpe2NvbnN0IGw9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSksYT10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxS''@;'; put 'put ''YW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKSk7cmV0dXJuW2wucm93LGwuY29sLGEucm93LGEuY29sXX1jcmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhsKSxoPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9S''@;'; put 'put ''ZW5kZXJhYmxlQ29vcmRzKGEpO3JldHVybiBudWxsPT09ZC5yb3d8fG51bGw9PT1kLmNvbHx8bnVsbD09PWgucm93fHxudWxsPT09aC5jb2w/bnVsbDp0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShkLGQsaCl9fTtmdW5jdGlvbiBiWChjKXtsZXR7YWN0aXZlSGVhZGVyQ2xhc3NOYW1l''@;'; put 'put ''OmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6VzNlfSl9ZnVuY3Rpb24geG50KGMpe2xldHthcmVhQ29ybmVyVmlzaWJsZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB4Zyh7Y2xhc3NOYW1lOiJhcmVhIixjcmVhdGVMYXllcnM6ITAsYm9yZGVy''@;'; put 'put ''Ont3aWR0aDoxLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmx9LC4uLmEsc2VsZWN0aW9uVHlwZTp2WH0pfWZ1bmN0aW9uIEVudChjKXtsZXR7Li4ubH09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6ImhpZ2hsaWdodCIsLi4ubCxzZWxlY3Rpb25UeXBlOnZYfSl9ZnVuY3Rpb24g''@;'; put 'put ''VG50KGMpe2xldHtjb2x1bW5DbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZToiY29sdW1uIn0pfWZ1bmN0aW9uIEczZShjKXtsZXR7aGVhZGVyQ2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6''@;'; put 'put ''bCwuLi5hLHNlbGVjdGlvblR5cGU6bVh9KX1mdW5jdGlvbiBJbnQoYyl7bGV0e3Jvd0NsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB4Zyh7Y2xhc3NOYW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOiJyb3cifSl9ZnVuY3Rpb24gamQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE9udChj''@;'; put 'put ''KXt2YXIgbD1mdW5jdGlvbiBQbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEVnKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwz''@;'; put 'put ''P2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgUHA9bmV3IFdlYWtTZXQ7Y2xhc3MgRm50e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBSbnQoYyxsKXsoZnVuY3Rpb24gTG50KGMsbCl7aWYobC5oYXMo''@;'; put 'put ''YykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLFBwKSxqZCh0aGlzLCJvcHRpb25zIix2b2lkIDApLGpkKHRoaXMsImxheWVyTGV2ZWwiLDAp''@;'; put 'put ''LGpkKHRoaXMsImZvY3VzIix2b2lkIDApLGpkKHRoaXMsImZpbGwiLHZvaWQgMCksamQodGhpcywibGF5ZXJlZEFyZWFzIixuZXcgTWFwKSxqZCh0aGlzLCJhcmVhcyIsbmV3IE1hcCksamQodGhpcywicm93SGVhZGVycyIsbmV3IE1hcCksamQodGhpcywiY29sdW1uSGVhZGVycyIsbmV3IE1h''@;'; put 'put ''cCksamQodGhpcywiYWN0aXZlUm93SGVhZGVycyIsbmV3IE1hcCksamQodGhpcywiYWN0aXZlQ29sdW1uSGVhZGVycyIsbmV3IE1hcCksamQodGhpcywiYWN0aXZlQ29ybmVySGVhZGVycyIsbmV3IE1hcCksamQodGhpcywicm93SGlnaGxpZ2h0cyIsbmV3IE1hcCksamQodGhpcywiY29sdW1u''@;'; put 'put ''SGlnaGxpZ2h0cyIsbmV3IE1hcCksamQodGhpcywiY3VzdG9tU2VsZWN0aW9ucyIsW10pLHRoaXMub3B0aW9ucz1sLHRoaXMuZm9jdXM9ZnVuY3Rpb24gQW50KGMpe2xldHtjZWxsQ29ybmVyVmlzaWJsZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB4Zyh7Y2xhc3NOYW1lOiJjdXJyZW50IixoZWFk''@;'; put 'put ''ZXJBdHRyaWJ1dGVzOltbImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIl1dLGJvcmRlcjp7d2lkdGg6Mixjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTpsfSwuLi5hLHNlbGVjdGlvblR5cGU6UUV9KX0obCksdGhpcy5maWxsPWZ1bmN0aW9uIERudChjKXtsZXR7Li4ubH09YztyZXR1cm4gbmV3''@;'; put 'put ''IHhnKHtjbGFzc05hbWU6ImZpbGwiLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiI2ZmMDAwMCJ9LC4uLmwsc2VsZWN0aW9uVHlwZToiZmlsbCJ9KX0obCl9aXNFbmFibGVkRm9yKGwsYSl7bGV0IGQ9bDtsPT09UUUmJihkPSJjdXJyZW50Iik7bGV0IGg9dGhpcy5vcHRpb25zLmRpc2FibGVkQ2Vs''@;'; put 'put ''bFNlbGVjdGlvbihhLnJvdyxhLmNvbCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1baF0pLCExPT09aHx8QXJyYXkuaXNBcnJheShoKSYmIWguaW5jbHVkZXMoZCl9dXNlTGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLmxheWVyTGV2ZWw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAsdGhpc31nZXRGb2N1cygpe3JldHVybiB0aGlzLmZvY3VzfWdldEZpbGwoKXtyZXR1cm4gdGhpcy5maWxsfWNyZWF0ZUxheWVyZWRBcmVhKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmxheWVyZWRBcmVhcyx4bnQp''@;'; put 'put ''fWdldExheWVyZWRBcmVhcygpe3JldHVyblsuLi50aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKV19Y3JlYXRlQXJlYSgpe3JldHVybiBFZyhQcCx0aGlzLFRnKS5jYWxsKHRoaXMsdGhpcy5hcmVhcyxFbnQpfWdldEFyZWFzKCl7cmV0dXJuWy4uLnRoaXMuYXJlYXMudmFsdWVzKCldfWNyZWF0''@;'; put 'put ''ZVJvd0hlYWRlcigpe3JldHVybiBFZyhQcCx0aGlzLFRnKS5jYWxsKHRoaXMsdGhpcy5yb3dIZWFkZXJzLEczZSl9Z2V0Um93SGVhZGVycygpe3JldHVyblsuLi50aGlzLnJvd0hlYWRlcnMudmFsdWVzKCldfWNyZWF0ZUNvbHVtbkhlYWRlcigpe3JldHVybiBFZyhQcCx0aGlzLFRnKS5jYWxs''@;'; put 'put ''KHRoaXMsdGhpcy5jb2x1bW5IZWFkZXJzLEczZSl9Z2V0Q29sdW1uSGVhZGVycygpe3JldHVyblsuLi50aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCldfWNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigpe3JldHVybiBFZyhQcCx0aGlzLFRnKS5jYWxsKHRoaXMsdGhpcy5hY3RpdmVSb3dIZWFkZXJz''@;'; put 'put ''LGJYKX1nZXRBY3RpdmVSb3dIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMsYlgpfWdldEFjdGl2''@;'; put 'put ''ZUNvbHVtbkhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVDb3JuZXJIZWFkZXIoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMuYWN0aXZlQ29ybmVySGVhZGVycyxiWCl9Z2V0QWN0aXZlQ29ybmVy''@;'; put 'put ''SGVhZGVycygpe3JldHVyblsuLi50aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCldfWNyZWF0ZVJvd0hpZ2hsaWdodCgpe3JldHVybiBFZyhQcCx0aGlzLFRnKS5jYWxsKHRoaXMsdGhpcy5yb3dIaWdobGlnaHRzLEludCl9Z2V0Um93SGlnaGxpZ2h0cygpe3JldHVyblsuLi50aGlz''@;'; put 'put ''LnJvd0hpZ2hsaWdodHMudmFsdWVzKCldfWNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgpe3JldHVybiBFZyhQcCx0aGlzLFRnKS5jYWxsKHRoaXMsdGhpcy5jb2x1bW5IaWdobGlnaHRzLFRudCl9Z2V0Q29sdW1uSGlnaGxpZ2h0cygpe3JldHVyblsuLi50aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFs''@;'; put 'put ''dWVzKCldfWdldEN1c3RvbVNlbGVjdGlvbnMoKXtyZXR1cm5bLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zLnZhbHVlcygpXX1hZGRDdXN0b21TZWxlY3Rpb24obCl7dGhpcy5jdXN0b21TZWxlY3Rpb25zLnB1c2goZnVuY3Rpb24ga250KGMpe2xldHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6''@;'; put 'put ''YSwuLi5kfT1jO3JldHVybiBuZXcgeGcoey4uLmwsLi4uZCxzZWxlY3Rpb25UeXBlOiJjdXN0b20tc2VsZWN0aW9uIn0sYSl9KHsuLi50aGlzLm9wdGlvbnMsLi4ubH0pKX1jbGVhcigpe3RoaXMuZm9jdXMuY2xlYXIoKSx0aGlzLmZpbGwuY2xlYXIoKSxZbih0aGlzLmFyZWFzLnZhbHVlcygp''@;'; put 'put ''LGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5yb3dIZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMuYWN0''@;'; put 'put ''aXZlUm93SGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMucm93SGlnaGxpZ2h0''@;'; put 'put ''cy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5jb2x1bW5IaWdobGlnaHRzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVyblt0aGlzLmZvY3VzLHRoaXMuZmlsbCwuLi50aGlzLmFyZWFzLnZhbHVlcygpLC4uLnRoaXMubGF5ZXJlZEFy''@;'; put 'put ''ZWFzLnZhbHVlcygpLC4uLnRoaXMucm93SGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVSb3dIZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZUNvcm5lckhl''@;'; put 'put ''YWRlcnMudmFsdWVzKCksLi4udGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpLC4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKSwuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnNdW1N5bWJvbC5pdGVyYXRvcl0oKX19ZnVuY3Rpb24gVGcoYyxsKXtjb25zdCBhPXRoaXMubGF5ZXJMZXZl''@;'; put 'put ''bDtpZihjLmhhcyhhKSlyZXR1cm4gYy5nZXQoYSk7Y29uc3QgZD1sKHtsYXllckxldmVsOmEsLi4udGhpcy5vcHRpb25zfSk7cmV0dXJuIGMuc2V0KGEsZCksZH1jb25zdCBIbnQ9Rm50O2Z1bmN0aW9uICQzZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTm50KGMpe3ZhciBsPWZ1bmN0aW9u''@;'; put 'put ''IFZudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgQm50e2NvbnN0cnVjdG9yKGwpeyQzZSh0aGlzLCJyYW5nZXMiLFtdKSwkM2UodGhpcywiY3JlYXRlQ2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY3JlYXRlQ2VsbFJh''@;'; put 'put ''bmdlPWx9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5zaXplKCl9c2V0KGwpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShsKSksdGhpc31hZGQobCl7cmV0dXJuIHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFuZ2Uo''@;'; put 'put ''bCkpLHRoaXN9cG9wKCl7cmV0dXJuIHRoaXMucmFuZ2VzLnBvcCgpLHRoaXN9Y3VycmVudCgpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KHRoaXMuc2l6ZSgpLTEpfXByZXZpb3VzKCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgodGhpcy5zaXplKCktMil9aW5jbHVkZXMobCl7cmV0dXJuIHRo''@;'; put 'put ''aXMucmFuZ2VzLnNvbWUoYT0+YS5pbmNsdWRlcyhsKSl9Y2xlYXIoKXtyZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RoPTAsdGhpc31zaXplKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aH1wZWVrQnlJbmRleCgpe2xldCBhLGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMF0/YXJndW1lbnRzWzBdOjA7cmV0dXJuIGw+PTAmJmw8dGhpcy5zaXplKCkmJihhPXRoaXMucmFuZ2VzW2xdKSxhfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMucmFuZ2VzW1N5bWJvbC5pdGVyYXRvcl0oKX19Y29uc3Qgam50PUJudDtmdW5jdGlvbiB5WChjLGwsYSl7SzNl''@;'; put 'put ''KGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBLM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGpzKGMsbCl7cmV0dXJuIGMuZ2V0KFF1''@;'; put 'put ''KGMsbCkpfWZ1bmN0aW9uIE1QKGMsbCxhKXtyZXR1cm4gYy5zZXQoUXUoYyxsKSxhKSxhfWZ1bmN0aW9uIFF1KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2''@;'; put 'put ''YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgeFA9bmV3IFdlYWtNYXAsdWM9bmV3IFdlYWtNYXAsdTM9bmV3IFdlYWtNYXAscDA9bmV3IFdlYWtTZXQ7Y2xhc3MgcTNle2NvbnN0cnVjdG9yKGwsYSl7KGZ1bmN0aW9uIHpudChjLGwpe0szZShjLGwpLGwu''@;'; put 'put ''YWRkKGMpfSkodGhpcyxwMCkseVgodGhpcyx4UCx2b2lkIDApLHlYKHRoaXMsdWMsdm9pZCAwKSx5WCh0aGlzLHUzLHt4OjAseTowfSksTVAoeFAsdGhpcyxsKSxNUCh1Yyx0aGlzLGEpfXRyYW5zZm9ybVN0YXJ0KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPWpzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMobCxhKTtsZXQgZj1qcyh4UCx0aGlzKS5jdXJyZW50KCkuaGlnaGxpZ2h0O2NvbnN0IHY9anModWMsdGhpcykudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGYpO2xldCBNPTAsRD0wO2lm''@;'; put 'put ''KHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlVHJhbnNmb3JtU3RhcnQiLGgpLG51bGwhPT12LnJvdyYmbnVsbCE9PXYuY29sKXtjb25zdHt3aWR0aDpaLGhlaWdodDpyZX09UXUocDAsdGhpcyxKM2UpLmNhbGwodGhpcykse3JvdzpjZSxjb2w6YmV9PVF1KHAwLHRoaXMsUTNlKS5jYWxsKHRo''@;'; put 'put ''aXMsZiksRWU9anModWMsdGhpcykuZml4ZWRSb3dzQm90dG9tKCksQmU9anModWMsdGhpcykubWluU3BhcmVSb3dzKCkscWU9anModWMsdGhpcykubWluU3BhcmVDb2xzKCkscnQ9anModWMsdGhpcykuYXV0b1dyYXBSb3coKSxwdD1qcyh1Yyx0aGlzKS5hdXRvV3JhcENvbCgpLGR0PWpzKHVj''@;'; put 'put ''LHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoY2UraC5yb3csYmUraC5jb2wpO2lmKGR0LnJvdz49cmUpe2NvbnN0IENuPUZkKGQmJkJlPjAmJjA9PT1FZSksdG49ZHQuY29sKzEsTW49anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhkdC5yb3ctcmUsdG4+PVo/dG4tWjp0bik7dGhpcy5ydW5M''@;'; put 'put ''b2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIixDbixRdShwMCx0aGlzLE1fKS5jYWxsKHRoaXMsTW4pLHRuPj1aKSxDbi52YWx1ZT90aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLGpzKHVjLHRoaXMpLmNvdW50UmVuZGVyYWJsZVJvd3MoKSk6cHQmJmR0LmFzc2lnbihN''@;'; put 'put ''bil9ZWxzZSBpZihkdC5yb3c8MCl7Y29uc3QgQ249RmQocHQpLHRuPWR0LmNvbC0xLE1uPWpzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMocmUrZHQucm93LHRuPDA/Wit0bjp0bik7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIixDbixRdShwMCx0aGlzLE1fKS5jYWxs''@;'; put 'put ''KHRoaXMsTW4pLHRuPDApLHB0JiZkdC5hc3NpZ24oTW4pfWlmKGR0LmNvbD49Wil7Y29uc3QgQ249RmQoZCYmcWU+MCksdG49ZHQucm93KzEsTW49anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh0bj49cmU/dG4tcmU6dG4sZHQuY29sLVopO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3Jl''@;'; put 'put ''Um93V3JhcCIsQ24sUXUocDAsdGhpcyxNXykuY2FsbCh0aGlzLE1uKSx0bj49cmUpLENuLnZhbHVlP3RoaXMucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVxdWlyZSIsanModWMsdGhpcykuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpKTpydCYmZHQuYXNzaWduKE1uKX1lbHNlIGlmKGR0LmNv''@;'; put 'put ''bDwwKXtjb25zdCBDbj1GZChydCksdG49ZHQucm93LTEsTW49anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh0bjwwP3JlK3RuOnRuLForZHQuY29sKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJvd1dyYXAiLENuLFF1KHAwLHRoaXMsTV8pLmNhbGwodGhpcyxNbiksdG48MCkscnQm''@;'; put 'put ''JmR0LmFzc2lnbihNbil9Y29uc3R7cm93RGlyOkp0LGNvbERpcjp2bn09UXUocDAsdGhpcyxYM2UpLmNhbGwodGhpcyxkdCk7TT1KdCxEPXZuLGY9UXUocDAsdGhpcyxNXykuY2FsbCh0aGlzLGR0KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmLE0s''@;'; put 'put ''RCksZn10cmFuc2Zvcm1FbmQobCxhKXtjb25zdCBkPWpzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMobCxhKSxoPWpzKHhQLHRoaXMpLmN1cnJlbnQoKSxmPWpzKHVjLHRoaXMpLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoLmhpZ2hsaWdodCksdj1RdShwMCx0aGlzLF9YKS5jYWxsKHRo''@;'; put 'put ''aXMsaC50by5yb3csaC5mcm9tLnJvdyksTT1RdShwMCx0aGlzLHdYKS5jYWxsKHRoaXMsaC50by5jb2wsaC5mcm9tLmNvbCksRD1oLnRvLmNsb25lKCk7bGV0IFo9MCxyZT0wO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlVHJhbnNmb3JtRW5kIixkKSxudWxsIT09Zi5yb3cmJm51bGwh''@;'; put 'put ''PT1mLmNvbCYmbnVsbCE9PXYmJm51bGwhPT1NKXtjb25zdHtyb3c6Y2UsY29sOmJlfT1RdShwMCx0aGlzLFEzZSkuY2FsbCh0aGlzLGguaGlnaGxpZ2h0KSxFZT1qcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHYrZC5yb3csTStkLmNvbCksQmU9aC5nZXRUb3BTdGFydENvcm5lcigpLHFl''@;'; put 'put ''PWguZ2V0VG9wRW5kQ29ybmVyKCkscnQ9aC5nZXRCb3R0b21FbmRDb3JuZXIoKTtpZihkLmNvbDwwJiZNPj1iZSYmRWUuY29sPGJlKXtjb25zdCB2bj1FZS5jb2wtYmU7RWUuY29sPVF1KHAwLHRoaXMsd1gpLmNhbGwodGhpcyxCZS5jb2wscWUuY29sKSt2bn1lbHNlIGlmKGQuY29sPjAmJk08''@;'; put 'put ''PWJlJiZFZS5jb2w+YmUpe2NvbnN0IHZuPVF1KHAwLHRoaXMsd1gpLmNhbGwodGhpcyxxZS5jb2wsQmUuY29sKSxDbj1NYXRoLm1heChFZS5jb2wtdm4sMSk7RWUuY29sPXZuK0NufWlmKGQucm93PDAmJnY+PWNlJiZFZS5yb3c8Y2Upe2NvbnN0IHZuPUVlLnJvdy1jZTtFZS5yb3c9UXUocDAs''@;'; put 'put ''dGhpcyxfWCkuY2FsbCh0aGlzLEJlLnJvdyxydC5yb3cpK3ZufWVsc2UgaWYoZC5yb3c+MCYmdjw9Y2UmJkVlLnJvdz5jZSl7Y29uc3Qgdm49UXUocDAsdGhpcyxfWCkuY2FsbCh0aGlzLHJ0LnJvdyxCZS5yb3cpLENuPU1hdGgubWF4KEVlLnJvdy12biwxKTtFZS5yb3c9dm4rQ259Y29uc3R7''@;'; put 'put ''cm93RGlyOnB0LGNvbERpcjpkdH09UXUocDAsdGhpcyxYM2UpLmNhbGwodGhpcyxFZSk7Wj1wdCxyZT1kdDtjb25zdCBKdD1RdShwMCx0aGlzLE1fKS5jYWxsKHRoaXMsRWUpOzA9PT1kLnJvdyYmMCE9PWQuY29sP0QuY29sPUp0LmNvbDowIT09ZC5yb3cmJjA9PT1kLmNvbD9ELnJvdz1KdC5y''@;'; put 'put ''b3c6KEQucm93PUp0LnJvdyxELmNvbD1KdC5jb2wpfXJldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyVHJhbnNmb3JtRW5kIixELFoscmUpLER9c2V0T2Zmc2V0U2l6ZShsKXtsZXR7eDphLHk6ZH09bDtNUCh1Myx0aGlzLHt4OmEseTpkfSl9cmVzZXRPZmZzZXRTaXplKCl7TVAodTMs''@;'; put 'put ''dGhpcyx7eDowLHk6MH0pfX1mdW5jdGlvbiBYM2UoYyl7Y29uc3R7d2lkdGg6bCxoZWlnaHQ6YX09UXUocDAsdGhpcyxKM2UpLmNhbGwodGhpcyk7bGV0IGQ9MCxoPTA7cmV0dXJuIGMucm93PDA/KGQ9LTEsYy5yb3c9MCk6Yy5yb3c+MCYmYy5yb3c+PWEmJihkPTEsYy5yb3c9YS0xKSxjLmNv''@;'; put 'put ''bDwwPyhoPS0xLGMuY29sPTApOmMuY29sPjAmJmMuY29sPj1sJiYoaD0xLGMuY29sPWwtMSkse3Jvd0RpcjpkLGNvbERpcjpofX1mdW5jdGlvbiBKM2UoKXtyZXR1cm57d2lkdGg6anModTMsdGhpcykueCtqcyh1Yyx0aGlzKS5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksaGVpZ2h0OmpzKHUz''@;'; put 'put ''LHRoaXMpLnkranModWMsdGhpcykuY291bnRSZW5kZXJhYmxlUm93cygpfX1mdW5jdGlvbiBfWChjLGwpe2NvbnN0IGE9anModWMsdGhpcykuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdyhjLGwpO3JldHVybiBudWxsPT09YT9udWxsOmpzKHUzLHRoaXMpLnkrYX1mdW5jdGlvbiB3''@;'; put 'put ''WChjLGwpe2NvbnN0IGE9anModWMsdGhpcykuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbihjLGwpO3JldHVybiBudWxsPT09YT9udWxsOmpzKHUzLHRoaXMpLngrYX1mdW5jdGlvbiBRM2UoYyl7Y29uc3R7cm93OmwsY29sOmF9PWpzKHVjLHRoaXMpLnZpc3VhbFRvUmVuZGVy''@;'; put 'put ''YWJsZUNvb3JkcyhjKTtpZihudWxsPT09bHx8bnVsbD09PWEpdGhyb3cgbmV3IEVycm9yKCJSZW5kZXJhYmxlIGNvb3JkcyBhcmUgbm90IHZpc2libGUuIik7cmV0dXJuIGpzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoanModTMsdGhpcykueStsLGpzKHUzLHRoaXMpLngrYSl9ZnVuY3Rp''@;'; put 'put ''b24gTV8oYyl7Y29uc3QgbD1jLmNsb25lKCk7cmV0dXJuIGwuY29sPWMuY29sLWpzKHUzLHRoaXMpLngsbC5yb3c9Yy5yb3ctanModTMsdGhpcykueSxqcyh1Yyx0aGlzKS5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMobCl9VGwocTNlLHkxKTtjb25zdCBlcGU9cTNlLFVudD1bMywyXSxabnQ9''@;'; put 'put ''W1sibnVtYmVyIl0sWyJudW1iZXIiLCJzdHJpbmciXSxbIm51bWJlciIsInVuZGVmaW5lZCJdLFsibnVtYmVyIiwic3RyaW5nIiwidW5kZWZpbmVkIl1dLFNYPVN5bWJvbCgicm9vdCIpLG5wZT1TeW1ib2woImNoaWxkIik7ZnVuY3Rpb24geF8oYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4x''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlNYO2lmKGwhPT1TWCYmbCE9PW5wZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdXNlZCBpbnRlcm5hbGx5IG9ubHkgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi4iKTtjb25zdCBhPUFycmF5Lmlz''@;'; put 'put ''QXJyYXkoYyksZD1sPT09U1g7bGV0IGg9MDtpZihhKXtjb25zdCBmPWNbMF07MD09PWMubGVuZ3RoP2g9MTpkJiZmIGluc3RhbmNlb2YgZ0s/aD0zOmQmJkFycmF5LmlzQXJyYXkoZik/aD14XyhmLG5wZSk6Yy5sZW5ndGg+PTImJmMubGVuZ3RoPD00JiYhYy5zb21lKChNLEQpPT4hWm50W0Rd''@;'; put 'put ''LmluY2x1ZGVzKHR5cGVvZiBNKSkmJihoPTIpfXJldHVybiBofWZ1bmN0aW9uIGVUKGMpe2xldHtjcmVhdGVDZWxsQ29vcmRzOmwsY3JlYXRlQ2VsbFJhbmdlOmEsa2VlcERpcmVjdGlvbjpkPSExLHByb3BUb0NvbDpofT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sx''@;'; put 'put ''XT9hcmd1bWVudHNbMV06e307aWYoIVVudC5pbmNsdWRlcyhjKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNlbGVjdGlvbiByYW5nZXMgc2NoZW1hIHR5cGUgd2FzIHByb3ZpZGVkLiIpO3JldHVybiBmdW5jdGlvbihmKXtjb25zdCB2PTM9PT1jO2xldCBNPXY/Zi5mcm9tLnJvdzpm''@;'; put 'put ''WzBdLEQ9dj9mLmZyb20uY29sOmZbMV0sWj12P2YudG8ucm93OmZbMl0scmU9dj9mLnRvLmNvbDpmWzNdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBoJiYoInN0cmluZyI9PXR5cGVvZiBEJiYoRD1oKEQpKSwic3RyaW5nIj09dHlwZW9mIHJlJiYocmU9aChyZSkpKSxfYyhaKSYmKFo9TSksX2Mo''@;'; put 'put ''cmUpJiYocmU9RCksIWQpe2NvbnN0IEVlPU0sQmU9RCxxZT1aLHJ0PXJlO009TWF0aC5taW4oRWUscWUpLEQ9TWF0aC5taW4oQmUscnQpLFo9TWF0aC5tYXgoRWUscWUpLHJlPU1hdGgubWF4KEJlLHJ0KX1jb25zdCBjZT1sKE0sRCksYmU9bChaLHJlKTtyZXR1cm4gYShjZSxjZSxiZSl9fWZ1''@;'; put 'put ''bmN0aW9uIEVfKGMsbCxhKXsoZnVuY3Rpb24gR250KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB0OShj''@;'; put 'put ''LGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gJG50KGMpe3ZhciBsPWZ1bmN0aW9uIEtudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5''@;'; put 'put ''cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gQ2MoYyxsKXtyZXR1cm4gYy5nZXQocnBlKGMsbCkpfWZ1bmN0aW9uIEZwKGMs''@;'; put 'put ''bCxhKXtyZXR1cm4gYy5zZXQocnBlKGMsbCksYSksYX1mdW5jdGlvbiBycGUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3Qg''@;'; put 'put ''cHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBfMT1uZXcgV2Vha01hcCxuOT1uZXcgV2Vha01hcCxBUD1uZXcgV2Vha01hcCx0VD1uZXcgV2Vha01hcCxrUD1uZXcgV2Vha01hcCxuVD1uZXcgV2Vha01hcDtjbGFzcyBpcGV7Y29uc3RydWN0b3IobCxhKXt2YXIgZD10aGlzO3Q5KHRoaXMs''@;'; put 'put ''InNldHRpbmdzIix2b2lkIDApLHQ5KHRoaXMsInRhYmxlUHJvcHMiLHZvaWQgMCksdDkodGhpcywiaW5Qcm9ncmVzcyIsITEpLHQ5KHRoaXMsInNlbGVjdGVkUmFuZ2UiLG5ldyBqbnQoKGgsZix2KT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShoLGYsdikpKSx0OSh0aGlzLCJo''@;'; put 'put ''aWdobGlnaHQiLHZvaWQgMCksRV8odGhpcyxfMSx2b2lkIDApLEVfKHRoaXMsbjksdm9pZCAwKSx0OSh0aGlzLCJzZWxlY3RlZEJ5Um93SGVhZGVyIixuZXcgU2V0KSx0OSh0aGlzLCJzZWxlY3RlZEJ5Q29sdW1uSGVhZGVyIixuZXcgU2V0KSxFXyh0aGlzLEFQLCExKSxFXyh0aGlzLHRULCEx''@;'; put 'put ''KSxFXyh0aGlzLGtQLCJ1bmtub3duIiksRV8odGhpcyxuVCwtMSksdGhpcy5zZXR0aW5ncz1sLHRoaXMudGFibGVQcm9wcz1hLHRoaXMuaGlnaGxpZ2h0PW5ldyBIbnQoe2hlYWRlckNsYXNzTmFtZTpsLmN1cnJlbnRIZWFkZXJDbGFzc05hbWUsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOmwuYWN0''@;'; put 'put ''aXZlSGVhZGVyQ2xhc3NOYW1lLHJvd0NsYXNzTmFtZTpsLmN1cnJlbnRSb3dDbGFzc05hbWUsY29sdW1uQ2xhc3NOYW1lOmwuY3VycmVudENvbENsYXNzTmFtZSxjZWxsQXR0cmlidXRlczpbWyJhcmlhLXNlbGVjdGVkIiwidHJ1ZSJdXSxyb3dJbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMu''@;'; put 'put ''cm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLmNvbHVtbkluZGV4TWFwcGVyLGRpc2FibGVkQ2VsbFNlbGVjdGlvbjooaCxmKT0+dGhpcy50YWJsZVByb3BzLmlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uKGgsZiksY2VsbENvcm5lclZpc2libGU6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gZC5pc0NlbGxDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyl9LGFyZWFDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNBcmVhQ29ybmVyVmlzaWJsZSguLi5hcmd1bWVudHMpfSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3Bz''@;'; put 'put ''LnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGNy''@;'; put 'put ''ZWF0ZUNlbGxSYW5nZTooaCxmLHYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZix2KX0pLEZwKF8xLHRoaXMsbmV3IGVwZSh0aGlzLnNlbGVjdGVkUmFuZ2Use3Jvd0luZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''cjp0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIsY291bnRSZW5kZXJhYmxlUm93czooKT0+dGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSxjb3VudFJlbmRlcmFibGVDb2x1bW5zOigpPT50aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygp''@;'; put 'put ''LHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgpLHJlbmRlcmFibGVUb1Zpc3VhbENvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGgpLGZpbmRGaXJzdE5vbkhpZGRlblJl''@;'; put 'put ''bmRlcmFibGVSb3c6ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3coLi4uYXJndW1lbnRzKX0sZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbjpmdW5jdGlvbigpe3JldHVybiBkLnRhYmxlUHJvcHMuZmluZEZpcnN0''@;'; put 'put ''Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbiguLi5hcmd1bWVudHMpfSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGZpeGVkUm93c0JvdHRvbTooKT0+bC5maXhlZFJvd3NCb3R0b20sbWluU3BhcmVSb3dzOigpPT5sLm1pblNw''@;'; put 'put ''YXJlUm93cyxtaW5TcGFyZUNvbHM6KCk9PmwubWluU3BhcmVDb2xzLGF1dG9XcmFwUm93OigpPT5sLmF1dG9XcmFwUm93LGF1dG9XcmFwQ29sOigpPT5sLmF1dG9XcmFwQ29sfSkpLEZwKG45LHRoaXMsbmV3IGVwZSh0aGlzLnNlbGVjdGVkUmFuZ2Use3Jvd0luZGV4TWFwcGVyOnRoaXMudGFi''@;'; put 'put ''bGVQcm9wcy5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIsY291bnRSZW5kZXJhYmxlUm93czooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtyZXR1cm4gdGhpcy50YWJsZVByb3BzLmNvdW50''@;'; put 'put ''UmVuZGVyYWJsZVJvd3NJblJhbmdlKDAsaC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLnJvdyl9LGNvdW50UmVuZGVyYWJsZUNvbHVtbnM6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7cmV0dXJuIHRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVDb2x1''@;'; put 'put ''bW5zSW5SYW5nZSgwLGguZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5jb2wpfSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJl''@;'; put 'put ''bmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93OmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVQcm9wcy5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93KC4uLmFyZ3VtZW50cyl9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVD''@;'; put 'put ''b2x1bW46ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4oLi4uYXJndW1lbnRzKX0sY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKSxmaXhlZFJvd3NCb3R0b206''@;'; put 'put ''KCk9PjAsbWluU3BhcmVSb3dzOigpPT4wLG1pblNwYXJlQ29sczooKT0+MCxhdXRvV3JhcFJvdzooKT0+ITAsYXV0b1dyYXBDb2w6KCk9PiEwfSkpLENjKF8xLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLmYpfSksQ2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLmYpfSksQ2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZv''@;'; put 'put ''cmVUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLENjKF8xLHRo''@;'; put 'put ''aXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1F''@;'; put 'put ''bmQiLC4uLmYpfSksQ2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJpbnNlcnRSb3dSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImlu''@;'; put 'put ''c2VydFJvd1JlcXVpcmUiLC4uLmYpfSksQ2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxv''@;'; put 'put ''Y2FsSG9va3MoImluc2VydENvbFJlcXVpcmUiLC4uLmYpfSksQ2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVSb3dXcmFwIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVy''@;'; put 'put ''biBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJvd1dyYXAiLC4uLmYpfSksQ2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVDb2x1bW5XcmFwIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRz''@;'; put 'put ''W3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLC4uLmYpfSksQ2MobjksdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3Yr''@;'; put 'put ''KylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uZil9KSxDYyhuOSx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''Zj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uZil9KX1nZXRTZWxlY3RlZFJhbmdlKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZX1tYXJrU291cmNlKGwpe0Zw''@;'; put 'put ''KGtQLHRoaXMsbCl9bWFya0VuZFNvdXJjZSgpe0ZwKGtQLHRoaXMsInVua25vd24iKX1nZXRTZWxlY3Rpb25Tb3VyY2UoKXtyZXR1cm4gQ2Moa1AsdGhpcyl9c2V0RXhwZWN0ZWRMYXllcnMobCl7RnAoblQsdGhpcyxsKX1iZWdpbigpe3RoaXMuaW5Qcm9ncmVzcz0hMH1maW5pc2goKXt0aGlz''@;'; put 'put ''LnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKSksdGhpcy5pblByb2dyZXNzPSExLEZwKG5ULHRoaXMsLTEpfWlzSW5Qcm9ncmVzcygpe3JldHVybiB0aGlzLmluUHJvZ3Jlc3N9c2V0UmFuZ2VTdGFydChsLGEpe2xl''@;'; put 'put ''dCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bDtjb25zdCBmPSJtdWx0aXBsZSI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1v''@;'; put 'put ''ZGUsdj1fYyhhKT90aGlzLnRhYmxlUHJvcHMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpOmEsTT1sLmNsb25lKCk7RnAoQVAsdGhpcywhMSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IisoZD8iT25seSI6IiIpLE0pLCghZnx8ZiYmIXYmJl9j''@;'; put 'put ''KGEpKSYmdGhpcy5zZWxlY3RlZFJhbmdlLmNsZWFyKCksdGhpcy5zZWxlY3RlZFJhbmdlLmFkZChNKS5jdXJyZW50KCkuc2V0SGlnaGxpZ2h0KGguY2xvbmUoKSksMD09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpJiYodGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmNsZWFyKCksdGhpcy5zZWxlY3Rl''@;'; put 'put ''ZEJ5Q29sdW1uSGVhZGVyLmNsZWFyKCkpLGR8fHRoaXMuc2V0UmFuZ2VFbmQobCl9c2V0UmFuZ2VTdGFydE9ubHkobCxhKXt0aGlzLnNldFJhbmdlU3RhcnQobCxhLCEwLGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpsKX1zZXRSYW5nZUVu''@;'; put 'put ''ZChsKXtpZih0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKXJldHVybjtjb25zdCBhPWwuY2xvbmUoKSxkPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxoPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxmPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuY2xvbmUoKS5zZXRU''@;'; put 'put ''byhsKS5pc1NpbmdsZUhlYWRlcigpO2lmKChkPjB8fGg+MCkmJigwPT09ZCYmYS5jb2w8MCYmIWZ8fDA9PT1oJiZhLnJvdzwwJiYhZikpcmV0dXJuO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLGEpLHRoaXMuYmVnaW4oKTtjb25zdCB2PXRoaXMuc2VsZWN0ZWRSYW5n''@;'; put 'put ''ZS5jdXJyZW50KCk7aWYodGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzfHx2LmhpZ2hsaWdodC5ub3JtYWxpemUoKSwic2luZ2xlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSl2LnNldEZyb20odi5oaWdobGlnaHQpLHYuc2V0VG8odi5oaWdobGlnaHQpO2Vsc2V7Y29uc3Qg''@;'; put 'put ''RD12LmdldEhvcml6b250YWxEaXJlY3Rpb24oKSxaPXYuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSxyZT10aGlzLmlzTXVsdGlwbGUoKTt2LnNldFRvKGEpLHJlJiYoRCE9PXYuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpfHwxPT09di5nZXRXaWR0aCgpJiYhdi5pbmNsdWRlcyh2LmhpZ2hsaWdo''@;'; put 'put ''dCkpJiZ2LmZyb20uYXNzaWduKHtjb2w6di5oaWdobGlnaHQuY29sfSkscmUmJihaIT09di5nZXRWZXJ0aWNhbERpcmVjdGlvbigpfHwxPT09di5nZXRIZWlnaHQoKSYmIXYuaW5jbHVkZXModi5oaWdobGlnaHQpKSYmdi5mcm9tLmFzc2lnbih7cm93OnYuaGlnaGxpZ2h0LnJvd30pfWQ+MCYm''@;'; put 'put ''aD4wJiYoIXRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVyc3x8dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzJiYhdi5pc1NpbmdsZUhlYWRlcigpKSYmdi50by5ub3JtYWxpemUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUhpZ2hsaWdodFNldCIpLHRoaXMuc2V0UmFuZ2VG''@;'; put 'put ''b2N1cyh0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmhpZ2hsaWdodCksdGhpcy5hcHBseUFuZENvbW1pdCgpO2NvbnN0IE09LTE9PT1DYyhuVCx0aGlzKXx8dGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKT09PUNjKG5ULHRoaXMpO3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZXRSYW5n''@;'; put 'put ''ZUVuZCIsbCxNKX1hcHBseUFuZENvbW1pdCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn''@;'; put 'put ''dW1lbnRzWzFdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2NvbnN0IGQ9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGg9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO2E8dGhpcy5oaWdobGlnaHQubGF5ZXJMZXZlbCYmKFluKHRoaXMuaGlnaGxpZ2h0LmdldEFyZWFzKCksQmU9PntCZS5j''@;'; put 'put ''bGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0TGF5ZXJlZEFyZWFzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0Um93SGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldENvbHVtbkhlYWRlcnMoKSxCZT0+e0JlLmNsZWFy''@;'; put 'put ''KCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVSb3dIZWFkZXJzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlQ29sdW1uSGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2ZUNvcm5lckhlYWRlcnMo''@;'; put 'put ''KSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRSb3dIaWdobGlnaHRzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0Q29sdW1uSGlnaGxpZ2h0cygpLEJlPT57QmUuY2xlYXIoKX0pKSx0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEp''@;'; put 'put ''O2NvbnN0IGY9dGhpcy5oaWdobGlnaHQuY3JlYXRlQXJlYSgpLHY9dGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJlZEFyZWEoKSxNPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hlYWRlcigpLEQ9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGVhZGVyKCksWj10aGlzLmhpZ2hsaWdodC5j''@;'; put 'put ''cmVhdGVBY3RpdmVSb3dIZWFkZXIoKSxyZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIoKSxjZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb3JuZXJIZWFkZXIoKSxiZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIaWdobGlnaHQoKSxFZT10aGlzLmhpZ2hs''@;'; put 'put ''aWdodC5jcmVhdGVDb2x1bW5IaWdobGlnaHQoKTtpZihmLmNsZWFyKCksdi5jbGVhcigpLE0uY2xlYXIoKSxELmNsZWFyKCksWi5jbGVhcigpLHJlLmNsZWFyKCksY2UuY2xlYXIoKSxiZS5jbGVhcigpLEVlLmNsZWFyKCksdGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKHZYLGwuaGlnaGxp''@;'; put 'put ''Z2h0KSYmKHRoaXMuaXNNdWx0aXBsZSgpfHxhPj0xKSYmKGYuYWRkKGwuZnJvbSkuYWRkKGwudG8pLmNvbW1pdCgpLHYuYWRkKGwuZnJvbSkuYWRkKGwudG8pLmNvbW1pdCgpLDE9PT1hKSl7Y29uc3QgQmU9dGhpcy5zZWxlY3RlZFJhbmdlLnByZXZpb3VzKCk7dGhpcy5oaWdobGlnaHQudXNl''@;'; put 'put ''TGF5ZXJMZXZlbChhLTEpLHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKS5hZGQoQmUuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoQmUpLHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCkuYWRkKEJlLmZyb20pLmNvbW1pdCgpLnN5bmNXaXRoKEJlKSx0aGlzLmhpZ2hsaWdodC51''@;'; put 'put ''c2VMYXllckxldmVsKGEpfWlmKHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihtWCxsLmhpZ2hsaWdodCkpe2lmKCFsLmlzU2luZ2xlSGVhZGVyKCkpe2NvbnN0IHJ0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGwuZnJvbS5yb3csMCksLTEpLHB0PXRoaXMu''@;'; put 'put ''dGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGwudG8ucm93LC0xKSxkdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxNYXRoLm1heChsLmZyb20uY29sLDApKSxKdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxsLnRvLmNvbCk7InNpbmdsZSI9PT10''@;'; put 'put ''aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGU/KE0uYWRkKHJ0KS5jb21taXQoKSxELmFkZChkdCkuY29tbWl0KCksYmUuYWRkKHJ0KS5jb21taXQoKSxFZS5hZGQoZHQpLmNvbW1pdCgpKTooTS5hZGQocnQpLmFkZChwdCkuY29tbWl0KCksRC5hZGQoZHQpLmFkZChKdCkuY29tbWl0KCksYmUu''@;'; put 'put ''YWRkKHJ0KS5hZGQocHQpLmNvbW1pdCgpLEVlLmFkZChkdCkuYWRkKEp0KS5jb21taXQoKSl9Y29uc3QgQmU9IUNjKHRULHRoaXMpJiZ0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmKGg+MCYmaD09PWwuZ2V0V2lkdGgoKXx8MD09PWgmJnRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkp''@;'; put 'put ''LHFlPSFDYyh0VCx0aGlzKSYmdGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCkmJihkPjAmJmQ9PT1sLmdldEhlaWdodCgpfHwwPT09ZCYmdGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSk7QmUmJlouYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4''@;'; put 'put ''KGwuZnJvbS5yb3csMCksTWF0aC5taW4oLXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSwtMSkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgobC50by5yb3csMCksLTEpKS5jb21taXQoKSxxZSYmcmUuYWRkKHRoaXMudGFibGVQcm9wcy5j''@;'; put 'put ''cmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKC10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksLTEpLE1hdGgubWF4KGwuZnJvbS5jb2wsMCkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsTWF0aC5tYXgobC50by5jb2wsMCkpKS5jb21taXQoKSxCZSYm''@;'; put 'put ''cWUmJmNlLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtdGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLC10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsLTEpKS5jb21t''@;'; put 'put ''aXQoKX19c2V0UmFuZ2VGb2N1cyhsKXtpZih0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKXJldHVybjtjb25zdCBhPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7dGhpcy5pblByb2dyZXNzfHx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldEZvY3VzIixsKTtjb25zdCBkPXRo''@;'; put 'put ''aXMuaGlnaGxpZ2h0LmdldEZvY3VzKCk7ZC5jbGVhcigpLGEuc2V0SGlnaGxpZ2h0KGwpLHRoaXMuaW5Qcm9ncmVzc3x8dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVIaWdobGlnaHRTZXQiKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoUUUsYS5oaWdobGlnaHQpJiZkLmFkZChhLmhp''@;'; put 'put ''Z2hsaWdodCkuY29tbWl0KCkuc3luY1dpdGgoYSksdGhpcy5pblByb2dyZXNzfHwoRnAoQVAsdGhpcywhMCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldEZvY3VzIixhLmhpZ2hsaWdodCkpfXRyYW5zZm9ybVN0YXJ0KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnM/Q2MoXzEsdGhpcykuc2V0T2Zmc2V0U2l6ZSh7eDp0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCkseTp0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCl9KTpDYyhf''@;'; put 'put ''MSx0aGlzKS5yZXNldE9mZnNldFNpemUoKSx0aGlzLnNldFJhbmdlU3RhcnQoQ2MoXzEsdGhpcykudHJhbnNmb3JtU3RhcnQobCxhLGQpKX10cmFuc2Zvcm1FbmQobCxhKXt0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnM/Q2MoXzEsdGhpcykuc2V0T2Zmc2V0U2l6ZSh7eDp0aGlzLnRh''@;'; put 'put ''YmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCkseTp0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCl9KTpDYyhfMSx0aGlzKS5yZXNldE9mZnNldFNpemUoKSx0aGlzLnNldFJhbmdlRW5kKENjKF8xLHRoaXMpLnRyYW5zZm9ybUVuZChsLGEpKX10cmFuc2Zvcm1Gb2N1cyhsLGEpe2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSx7cm93OmgsY29sOmZ9PWQuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsZi0xKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVS''@;'; put 'put ''b3dzSW5SYW5nZSgwLGgtMSk7ZC5oaWdobGlnaHQuaXNIZWFkZXIoKT9DYyhuOSx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OmY8MD9NYXRoLmFicyhmKTotdix5Omg8MD9NYXRoLmFicyhoKTotTX0pOkNjKG45LHRoaXMpLnNldE9mZnNldFNpemUoe3g6ZjwwPzA6LXYseTpoPDA/MDotTX0pO2Nv''@;'; put 'put ''bnN0IEQ9Q2MobjksdGhpcykudHJhbnNmb3JtU3RhcnQobCxhKTt0aGlzLnNldFJhbmdlRm9jdXMoRC5ub3JtYWxpemUoKSl9c2hpZnRSb3dzKGwsYSl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7aWYodGhpcy5pc1Nl''@;'; put 'put ''bGVjdGVkQnlDb3JuZXIoKSl0aGlzLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITB9KTtlbHNlIGlmKHRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fGQuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLnJvdz49bCl7Y29uc3R7ZnJvbTpoLHRvOmYsaGln''@;'; put 'put ''aGxpZ2h0OnZ9PWQsTT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksRD10aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFo9dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxyZT1aPy0xOjAsY2U9Wj8wOmE7dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCk7Y29uc3QgYmU9''@;'; put 'put ''dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoa3MoaC5yb3crY2UscmUsTS0xKSxoLmNvbCksRWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoa3MoZi5yb3crYSxyZSxNLTEpLGYuY29sKTt0aGlzLm1hcmtTb3VyY2UoInNoaWZ0Iiksdi5yb3c+PWw/dGhpcy5zZXRS''@;'; put 'put ''YW5nZVN0YXJ0T25seShiZSwhMCx0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyhrcyh2LnJvdythLDAsTS0xKSx2LmNvbCkpOnRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoYmUsITApLEQmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLFom''@;'; put 'put ''JnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoRWUpLHRoaXMubWFya0VuZFNvdXJjZSgpfX1zaGlmdENvbHVtbnMobCxhKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5zZWxlY3Rl''@;'; put 'put ''ZFJhbmdlLmN1cnJlbnQoKTtpZih0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpKXRoaXMuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMH0pO2Vsc2UgaWYodGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8ZC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29s''@;'; put 'put ''Pj1sKXtjb25zdHtmcm9tOmgsdG86ZixoaWdobGlnaHQ6dn09ZCxNPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxEPXRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksWj10aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLHJlPUQ/LTE6MCxjZT1EPzA6YTt0aGlzLmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2UoKS5wb3AoKTtjb25zdCBiZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLnJvdyxrcyhoLmNvbCtjZSxyZSxNLTEpKSxFZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxrcyhmLmNvbCthLHJlLE0tMSkpO3RoaXMubWFya1NvdXJjZSgi''@;'; put 'put ''c2hpZnQiKSx2LmNvbD49bD90aGlzLnNldFJhbmdlU3RhcnRPbmx5KGJlLCEwLHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHYucm93LGtzKHYuY29sK2EsMCxNLTEpKSk6dGhpcy5zZXRSYW5nZVN0YXJ0T25seShiZSwhMCksRCYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFk''@;'; put 'put ''ZCh0aGlzLmdldExheWVyTGV2ZWwoKSksWiYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChFZSksdGhpcy5tYXJrRW5kU291cmNlKCl9fWdldExheWVyTGV2ZWwoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdl''@;'; put 'put ''LnNpemUoKS0xfWlzU2VsZWN0ZWQoKXtyZXR1cm4hdGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKX1pc011bHRpcGxlKCl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybiExO2NvbnN0IGw9RmQoIXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaXNTaW5nbGUoKSk7cmV0dXJuIHRo''@;'; put 'put ''aXMucnVuTG9jYWxIb29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixsKSxsLnZhbHVlfWlzRm9jdXNTZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCgpJiZDYyhBUCx0aGlzKX1pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7cmV0dXJuIXRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKGwpJiYoLTE9PT1sP3RoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5zaXplPjA6dGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmhhcyhs''@;'; put 'put ''KSl9aXNFbnRpcmVSb3dTZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtjb25zdCBhPWg9Pntjb25zdHtjb2w6Zn09aC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksdj10aGlz''@;'; put 'put ''LnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7cmV0dXJuKHY+MCYmZjwwfHwwPT09dikmJmguZ2V0V2lkdGgoKT09PU19O2lmKC0xPT09bClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpLnNvbWUoaD0+YShoKSk7''@;'; put 'put ''Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgobCk7cmV0dXJuISFkJiZhKGQpfWlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwo''@;'; put 'put ''KTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKC0xPT09bD90aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5oYXMobCkpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7Y29uc3QgYT1oPT57Y29uc3R7cm93OmZ9PWguZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLE09dGhpcy50YWJsZVByb3BzLmNv''@;'; put 'put ''dW50Um93cygpO3JldHVybih2PjAmJmY8MHx8MD09PXYpJiZoLmdldEhlaWdodCgpPT09TX07aWYoLTE9PT1sKXJldHVybiBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkuc29tZShoPT5hKGgpKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRleChsKTtyZXR1cm4h''@;'; put 'put ''IWQmJmEoZCl9aXNTZWxlY3RlZEJ5QW55SGVhZGVyKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKC0xKXx8dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpfWlzU2VsZWN0ZWRCeUNvcm5lcigpe3JldHVybiB0aGlz''@;'; put 'put ''LnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmhhcyh0aGlzLmdldExheWVyTGV2ZWwoKSl9aW5JblNlbGVjdGlvbihsKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlLmluY2x1ZGVzKGwpfWlzQ2VsbENv''@;'; put 'put ''cm5lclZpc2libGUoKXtyZXR1cm4gdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJiF0aGlzLmlzTXVsdGlwbGUoKX1pc0NlbGxWaXNpYmxlKGwpe2NvbnN0IGE9dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jk''@;'; put 'put ''cyhsKTtyZXR1cm4gbnVsbCE9PWEucm93JiZudWxsIT09YS5jb2x9aXNBcmVhQ29ybmVyVmlzaWJsZShsKXtyZXR1cm4oIU51bWJlci5pc0ludGVnZXIobCl8fGw9PT10aGlzLmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2V0dGluZ3MuZmlsbEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0Vk''@;'; put 'put ''aXRvck9wZW5lZCgpJiZ0aGlzLmlzTXVsdGlwbGUoKX1jbGVhcigpe3RoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCl9ZGVzZWxlY3QoKXt0aGlzLmlzU2VsZWN0ZWQoKSYmKHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmNsZWFyKCksdGhpcy5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJhZnRlckRlc2VsZWN0IikpfXNlbGVjdEFsbCgpe3ZhciBsO2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGg9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOntmb2N1c1Bvc2l0aW9uOiExLGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiExfTtjb25zdCBmPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMo''@;'; put 'put ''KSxNPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSxEPXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxaPWQ/LUQ6MCxyZT1hPy1NOjA7aWYoMD09PVomJjA9PT1yZSYmKDA9PT1mfHwwPT09dikpcmV0dXJuO2xldCBjZT1udWxsPT09KGw9dGhpcy5nZXRTZWxlY3Rl''@;'; put 'put ''ZFJhbmdlKCkuY3VycmVudCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7Y29uc3R7Zm9jdXNQb3NpdGlvbjpiZSxkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDpFZX09aDtGcCh0VCx0aGlzLEVlKSxiZSYmTnVtYmVyLmlzSW50ZWdlcihiZT8ucm93KSYmTnVtYmVyLmlzSW50ZWdl''@;'; put 'put ''cihiZT8uY29sKSYmKGNlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGtzKGJlLnJvdyxaLGYtMSksa3MoYmUuY29sLHJlLHYtMSkpKTtjb25zdCBCZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhaLHJlKSxxZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhmLTEsdi0xKTt0aGlzLmNsZWFyKCksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShCZSx2b2lkIDAsY2UpLHJlPDAmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLFo8MCYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdl''@;'; put 'put ''dExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChxZSksdGhpcy5maW5pc2goKSxGcCh0VCx0aGlzLCExKX1zZWxlY3RDZWxscyhsKXt2YXIgYT10aGlzO2NvbnN0IGQ9eF8obCk7aWYoMT09PWQpcmV0dXJuITE7aWYoMD09PWQpdGhyb3cgbmV3IEVycm9yKGdsYFVuc3VwcG9ydGVkIGZv''@;'; put 'put ''cm1hdCBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlcyB3YXMgcGFzc2VkLiBUbyBzZWxlY3QgY2VsbHMgcGFzc1x4MjAKICAgICAgICB0aGUgY29vcmRpbmF0ZXMgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIChbW3Jvd1N0YXJ0LCBjb2x1bW5TdGFydC9jb2x1bW5Qcm9wU3RhcnQsIHJvd0VuZCxceDIw''@;'; put 'put ''CiAgICAgICAgY29sdW1uRW5kL2NvbHVtblByb3BFbmRdXSkgb3IgYXMgYW4gYXJyYXkgb2YgQ2VsbFJhbmdlIG9iamVjdHMuYCk7Y29uc3QgaD1lVChkLHtjcmVhdGVDZWxsQ29vcmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGEudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC4uLmFyZ3VtZW50''@;'; put 'put ''cyl9LGNyZWF0ZUNlbGxSYW5nZTpmdW5jdGlvbigpe3JldHVybiBhLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKC4uLmFyZ3VtZW50cyl9LHByb3BUb0NvbDpEPT50aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKEQpLGtlZXBEaXJlY3Rpb246ITB9KSxmPXRoaXMuc2V0dGluZ3MubmF2aWdh''@;'; put 'put ''YmxlSGVhZGVycyx2PXtjb3VudFJvd3M6dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGNvdW50Q29sczp0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksY291bnRSb3dIZWFkZXJzOmY/dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpOjAsY291bnRDb2xIZWFkZXJzOmY/dGhp''@;'; put 'put ''cy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpOjB9LE09IWwuc29tZShEPT57Y29uc3QgWj1oKEQpLHJlPVouaXNWYWxpZCh2KTtyZXR1cm4hKHJlJiYhWi5jb250YWluc0hlYWRlcnMoKXx8cmUmJlouY29udGFpbnNIZWFkZXJzKCkmJlouaXNTaW5nbGVIZWFkZXIoKSl9KTtyZXR1cm4g''@;'; put 'put ''TSYmKHRoaXMuY2xlYXIoKSx0aGlzLnNldEV4cGVjdGVkTGF5ZXJzKGwubGVuZ3RoKSxZbihsLEQ9Pntjb25zdHtmcm9tOlosdG86cmV9PWgoRCk7dGhpcy5zZXRSYW5nZVN0YXJ0T25seShaLmNsb25lKCksITEpLHRoaXMuc2V0UmFuZ2VFbmQocmUuY2xvbmUoKSl9KSx0aGlzLmZpbmlzaCgp''@;'; put 'put ''KSxNfXNlbGVjdENvbHVtbnMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtjb25zdCBoPSJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgbD90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGwpOmwsZj0ic3RyaW5nIj09dHlwZW9mIGE/dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChhKTphLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLE09dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLEQ9dGhpcy50YWJsZVByb3Bz''@;'; put 'put ''LmNvdW50Q29sSGVhZGVycygpLFo9MD09PUQ/MDotRCxyZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhaLGgpLGNlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHYtMSxmKSxiZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKHJlLHJlLGNlKS5pc1Zh''@;'; put 'put ''bGlkKHtjb3VudFJvd3M6dixjb3VudENvbHM6TSxjb3VudFJvd0hlYWRlcnM6MCxjb3VudENvbEhlYWRlcnM6RH0pO2lmKGJlKXtsZXQgRWU9MCxCZT0wO051bWJlci5pc0ludGVnZXIoZD8ucm93KSYmTnVtYmVyLmlzSW50ZWdlcihkPy5jb2wpPyhFZT1rcyhkLnJvdyxaLHYtMSksQmU9a3Mo''@;'; put 'put ''ZC5jb2wsTWF0aC5taW4oaCxmKSxNYXRoLm1heChoLGYpKSk6KEVlPWtzKGQsWix2LTEpLEJlPWgpO2NvbnN0IHFlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKEVlLEJlKSxydD0wPT09RD8wOmtzKHFlLnJvdyxaLC0xKSxwdD12LTEsZHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMocnQsaCksSnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMocHQsZik7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZWxlY3RDb2x1bW5zIixkdCxKdCxxZSksZHQucm93PXJ0LEp0LnJvdz1wdCx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGR0LHZvaWQgMCxx''@;'; put 'put ''ZSksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChKdCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdENvbHVtbnMiLGR0LEp0LHFlKSx0aGlzLmZpbmlzaCgpfXJldHVybiBiZX1zZWxlY3RSb3dzKGwp''@;'; put 'put ''e2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7Y29uc3QgaD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksZj10aGlz''@;'; put 'put ''LnRhYmxlUHJvcHMuY291bnRDb2xzKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksTT0wPT09dj8wOi12LEQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobCxNKSxaPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEsZi0xKSxyZT10aGlzLnRh''@;'; put 'put ''YmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKEQsRCxaKS5pc1ZhbGlkKHtjb3VudFJvd3M6aCxjb3VudENvbHM6Zixjb3VudFJvd0hlYWRlcnM6dixjb3VudENvbEhlYWRlcnM6MH0pO2lmKHJlKXtsZXQgY2U9MCxiZT0wO051bWJlci5pc0ludGVnZXIoZD8ucm93KSYmTnVtYmVyLmlzSW50ZWdl''@;'; put 'put ''cihkPy5jb2wpPyhjZT1rcyhkLnJvdyxNYXRoLm1pbihsLGEpLE1hdGgubWF4KGwsYSkpLGJlPWtzKGQuY29sLE0sZi0xKSk6KGNlPWwsYmU9a3MoZCxNLGYtMSkpO2NvbnN0IEVlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGNlLGJlKSxCZT0wPT09dj8wOmtzKEVlLmNvbCxN''@;'; put 'put ''LC0xKSxxZT1mLTEscnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobCxCZSkscHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYSxxZSk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZWxlY3RSb3dzIixydCxwdCxFZSkscnQuY29sPUJlLHB0LmNvbD1xZSx0''@;'; put 'put ''aGlzLnNldFJhbmdlU3RhcnRPbmx5KHJ0LHZvaWQgMCxFZSksdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChwdCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdFJvd3MiLHJ0LHB0LEVlKSx0aGlzLmZpbmlz''@;'; put 'put ''aCgpfXJldHVybiByZX1yZWZyZXNoKCl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBsPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxhPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtpZigwPT09bHx8MD09PWEpcmV0dXJuIHZvaWQgdGhpcy5kZXNlbGVjdCgpO2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCktMSkse2Zyb206aCx0bzpmLGhpZ2hsaWdodDp2fT1kO3RoaXMuY2xlYXIoKSx2LmFzc2lnbih7cm93OmtzKHYucm93LC0xLzAsbC0xKSxjb2w6a3Modi5jb2wsLTEvMCxhLTEpfSks''@;'; put 'put ''aC5hc3NpZ24oe3JvdzprcyhoLnJvdywtMS8wLGwtMSksY29sOmtzKGguY29sLC0xLzAsYS0xKX0pLGYuYXNzaWduKHtyb3c6a3MoZi5yb3csMCxsLTEpLGNvbDprcyhmLmNvbCwwLGEtMSl9KSx0aGlzLnNlbGVjdGVkUmFuZ2UucmFuZ2VzLnB1c2goZCksdGhpcy5oaWdobGlnaHQuaXNFbmFi''@;'; put 'put ''bGVkRm9yKFFFLHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaGlnaGxpZ2h0KSYmdGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKS5hZGQodikuY29tbWl0KCkuc3luY1dpdGgoZCksdGhpcy5hcHBseUFuZENvbW1pdChkKX1jb21taXQoKXtpZih0aGlzLmhpZ2hsaWdodC5nZXRDdXN0b21T''@;'; put 'put ''ZWxlY3Rpb25zKCkuZm9yRWFjaChoPT57aC5jb21taXQoKX0pLCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgYT10aGlzLmdldExheWVyTGV2ZWwoKSxkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7dGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKFFFLGQuaGlnaGxpZ2h0''@;'; put 'put ''KSYmdGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKS5jb21taXQoKS5zeW5jV2l0aChkKTtmb3IobGV0IGg9MDtoPHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk7aCs9MSl7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKSx2''@;'; put 'put ''PXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCksTT10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIZWFkZXIoKSxEPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhlYWRlcigpLFo9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlUm93SGVhZGVyKCkscmU9dGhpcy5oaWdobGln''@;'; put 'put ''aHQuY3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCksY2U9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCksYmU9dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0KCksRWU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7Zi5jb21taXQo''@;'; put 'put ''KSx2LmNvbW1pdCgpLE0uY29tbWl0KCksRC5jb21taXQoKSxaLmNvbW1pdCgpLHJlLmNvbW1pdCgpLGNlLmNvbW1pdCgpLGJlLmNvbW1pdCgpLEVlLmNvbW1pdCgpfXRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSl9fVRsKGlwZSx5MSk7Y29uc3QgcW50PWlwZSx7cmVnaXN0ZXI6WG50''@;'; put 'put ''LGdldEl0ZW06Sm50LGhhc0l0ZW06YXBlLGdldE5hbWVzOlFudH09cjMoImNlbGxUeXBlcyIpO2Z1bmN0aW9uIE1YKGMpe2lmKCFhcGUoYykpdGhyb3cgRXJyb3IoYFlvdSBkZWNsYXJlZCBjZWxsIHR5cGUgIiR7Y30iIGFzIGEgc3RyaW5nIHRoYXQgaXMgbm90IG1hcHBlZCB0byBhIGtub3du''@;'; put 'put ''IG9iamVjdC5cbiAgICAgICAgICAgICAgICAgQ2VsbCB0eXBlIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgc3RyaW5nIG1hcHBlZCB0byBhbiBvYmplY3QgcmVnaXN0ZXJlZCBieVxuICAgICAgICAgICAgICAgICAiSGFuZHNvbnRhYmxlLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlIiBtZXRo''@;'; put 'put ''b2RgKTtyZXR1cm4gSm50KGMpfWZ1bmN0aW9uIEcyKGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5DRUxMX1RZUEUpO2NvbnN0e2VkaXRvcjphLHJlbmRlcmVyOmQsdmFsaWRhdG9yOmh9PWw7YSYmSGQoYyxhKSxkJiZJaChjLGQpLGgmJlk3KGMsaCksWG50KGMsbCl9ZnVuY3Rp''@;'; put 'put ''b24gRFAoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Yztjb25zdCBkPSJzdHJpbmciPT10eXBlb2YgbC50eXBlP01YKGwudHlwZSk6bC50eXBlO2lmKGMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyYmWG8o''@;'; put 'put ''bCwoZix2KT0+e2MuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcy5kZWxldGUodil9KSwhcW8oZCkpcmV0dXJuO2E9PT1jJiYhYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiYoYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzPW5ldyBTZXQpO2NvbnN0IGg9''@;'; put 'put ''e307WG8oZCwoZix2KT0+e3ZhciBNOyhmdW5jdGlvbiBlcnQoYyxsKXt2YXIgYTtyZXR1cm4iQ0VMTF9UWVBFIiE9PWMmJigobnVsbD09PShhPWwuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaGFzKGMpKXx8IVR1KGwsYykpfSkodixhKSYm''@;'; put 'put ''KGhbdl09ZixudWxsPT09KE09Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09TXx8TS5hZGQodikpfSksRXUoYyxoKX1mdW5jdGlvbiBJUChjKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjKSYmYz49MH1mdW5jdGlvbiBSUChjLGwpe2lmKCFjKCkpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKGBBc3NlcnRpb24gZmFpbGVkOiAke2x9YCl9ZnVuY3Rpb24gTFAoYyl7cmV0dXJuIG51bGw9PWN9Y29uc3Qgb3BlPSgpPT4oe19hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM6dm9pZCAwLGFjdGl2ZUhlYWRlckNsYXNzTmFtZToiaHRfX2FjdGl2ZV9oaWdobGlnaHQi''@;'; put 'put ''LGFsbG93RW1wdHk6ITAsYWxsb3dIdG1sOiExLGFsbG93SW5zZXJ0Q29sdW1uOiEwLGFsbG93SW5zZXJ0Um93OiEwLGFsbG93SW52YWxpZDohMCxhbGxvd1JlbW92ZUNvbHVtbjohMCxhbGxvd1JlbW92ZVJvdzohMCxhcmlhVGFnczohMCxhdXRvQ29sdW1uU2l6ZTp2b2lkIDAsYXV0b1Jvd1Np''@;'; put 'put ''emU6dm9pZCAwLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGJpbmRSb3dzV2l0aEhlYWRlcnM6dm9pZCAwLGNlbGw6W10sY2VsbHM6dm9pZCAwLGNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAsY2xhc3NOYW1lOnZvaWQgMCxjb2xIZWFkZXJzOm51bGwsY29sbGFwc2libGVDb2x1bW5zOnZv''@;'; put 'put ''aWQgMCxjb2x1bW5IZWFkZXJIZWlnaHQ6dm9pZCAwLGNvbHVtbnM6dm9pZCAwLGNvbHVtblNvcnRpbmc6dm9pZCAwLGNvbHVtblN1bW1hcnk6dm9pZCAwLGNvbFdpZHRoczp2b2lkIDAsY29tbWVudGVkQ2VsbENsYXNzTmFtZToiaHRDb21tZW50Q2VsbCIsY29tbWVudHM6ITEsY29udGV4dE1l''@;'; put 'put ''bnU6dm9pZCAwLGNvcHlhYmxlOiEwLGNvcHlQYXN0ZTohMCxjb3JyZWN0Rm9ybWF0OiExLGN1cnJlbnRDb2xDbGFzc05hbWU6dm9pZCAwLGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6Imh0X19oaWdobGlnaHQiLGN1cnJlbnRSb3dDbGFzc05hbWU6dm9pZCAwLGN1c3RvbUJvcmRlcnM6ITEsZGF0''@;'; put 'put ''YTp2b2lkIDAsZGF0YURvdE5vdGF0aW9uOiEwLGRhdGFTY2hlbWE6dm9pZCAwLGRhdGVGb3JtYXQ6IkREL01NL1lZWVkiLHRpbWVGb3JtYXQ6Img6bW06c3MgYSIsZGF0ZVBpY2tlckNvbmZpZzp2b2lkIDAsZGVmYXVsdERhdGU6dm9pZCAwLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ITEsZHJh''@;'; put 'put ''Z1RvU2Nyb2xsOiEwLGRyb3Bkb3duTWVudTp2b2lkIDAsZWRpdG9yOnZvaWQgMCxlbnRlckJlZ2luc0VkaXRpbmc6ITAsZW50ZXJNb3Zlczp7Y29sOjAscm93OjF9LGZpbGxIYW5kbGU6e2F1dG9JbnNlcnRSb3c6ITF9LGZpbHRlcjohMCxmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiExLGZpbHRl''@;'; put 'put ''cnM6dm9pZCAwLGZpeGVkQ29sdW1uc0xlZnQ6MCxmaXhlZENvbHVtbnNTdGFydDowLGZpeGVkUm93c0JvdHRvbTowLGZpeGVkUm93c1RvcDowLGZvcm11bGFzOnZvaWQgMCxmcmFnbWVudFNlbGVjdGlvbjohMSxoZWFkZXJDbGFzc05hbWU6dm9pZCAwLGhlaWdodDp2b2lkIDAsaGlkZGVuQ29s''@;'; put 'put ''dW1uczp2b2lkIDAsaGlkZGVuUm93czp2b2lkIDAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsaW1lRmFzdEVkaXQ6ITEsaXNFbXB0eUNvbChjKXtsZXQgbCxhLGQ7Zm9yKGw9MCxhPXRoaXMuY291bnRSb3dzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChsLGMp''@;'; put 'put ''LCExPT09VWMoZCkpcmV0dXJuITE7cmV0dXJuITB9LGlzRW1wdHlSb3coYyl7bGV0IGwsYSxkLGg7Zm9yKGw9MCxhPXRoaXMuY291bnRDb2xzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChjLGwpLCExPT09VWMoZCkpcmV0dXJuIm9iamVjdCI9PXR5cGVvZiBkJiYoaD10aGlz''@;'; put 'put ''LmdldENlbGxNZXRhKGMsbCksTk8odGhpcy5nZXRTY2hlbWEoKVtoLnByb3BdLGQpKTtyZXR1cm4hMH0sbGFiZWw6dm9pZCAwLGxhbmd1YWdlOiJlbi1VUyIsbGF5b3V0RGlyZWN0aW9uOiJpbmhlcml0IixsaWNlbnNlS2V5OnZvaWQgMCxsb2NhbGU6ImVuLVVTIixtYW51YWxDb2x1bW5GcmVl''@;'; put 'put ''emU6dm9pZCAwLG1hbnVhbENvbHVtbk1vdmU6dm9pZCAwLG1hbnVhbENvbHVtblJlc2l6ZTp2b2lkIDAsbWFudWFsUm93TW92ZTp2b2lkIDAsbWFudWFsUm93UmVzaXplOnZvaWQgMCxtYXhDb2xzOjEvMCxtYXhSb3dzOjEvMCxtZXJnZUNlbGxzOiExLG1pbkNvbHM6MCxtaW5Sb3dzOjAsbWlu''@;'; put 'put ''U3BhcmVDb2xzOjAsbWluU3BhcmVSb3dzOjAsbXVsdGlDb2x1bW5Tb3J0aW5nOnZvaWQgMCxuYXZpZ2FibGVIZWFkZXJzOiExLHRhYk5hdmlnYXRpb246ITAsbmVzdGVkSGVhZGVyczp2b2lkIDAsbmVzdGVkUm93czp2b2lkIDAsbm9Xb3JkV3JhcENsYXNzTmFtZToiaHROb1dyYXAiLG51bWVy''@;'; put 'put ''aWNGb3JtYXQ6dm9pZCAwLG9ic2VydmVET01WaXNpYmlsaXR5OiEwLG91dHNpZGVDbGlja0Rlc2VsZWN0czohMCxwZXJzaXN0ZW50U3RhdGU6dm9pZCAwLHBsYWNlaG9sZGVyOnZvaWQgMCxwbGFjZWhvbGRlckNlbGxDbGFzc05hbWU6Imh0UGxhY2Vob2xkZXIiLHByZXZlbnRPdmVyZmxvdzoh''@;'; put 'put ''MSxwcmV2ZW50V2hlZWw6ITEscmVhZE9ubHk6ITEscmVhZE9ubHlDZWxsQ2xhc3NOYW1lOiJodERpbW1lZCIscmVuZGVyQWxsUm93czohMSxyZW5kZXJBbGxDb2x1bW5zOiExLHJlbmRlcmVyOnZvaWQgMCxyb3dIZWFkZXJzOnZvaWQgMCxyb3dIZWFkZXJXaWR0aDp2b2lkIDAscm93SGVpZ2h0''@;'; put 'put ''czp2b2lkIDAsc2VhcmNoOiExLHNlbGVjdGlvbk1vZGU6Im11bHRpcGxlIixzZWxlY3RPcHRpb25zOnZvaWQgMCxza2lwQ29sdW1uT25QYXN0ZTohMSxza2lwUm93T25QYXN0ZTohMSxzb3J0QnlSZWxldmFuY2U6ITAsc291cmNlOnZvaWQgMCxzdGFydENvbHM6NSxzdGFydFJvd3M6NSxzdHJl''@;'; put 'put ''dGNoSDoibm9uZSIsc3RyaWN0OnZvaWQgMCx0YWJsZUNsYXNzTmFtZTp2b2lkIDAsdGhlbWVOYW1lOnZvaWQgMCx0YWJNb3Zlczp7cm93OjAsY29sOjF9LHRpdGxlOnZvaWQgMCx0cmltRHJvcGRvd246ITAsdHJpbVJvd3M6dm9pZCAwLHRyaW1XaGl0ZXNwYWNlOiEwLHR5cGU6InRleHQiLHVu''@;'; put 'put ''Y2hlY2tlZFRlbXBsYXRlOnZvaWQgMCx1bmRvOiEwLHZhbGlkYXRvcjp2b2lkIDAsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZDowLHZpZXdwb3J0Um93''@;'; put 'put ''UmVuZGVyaW5nVGhyZXNob2xkOjAsdmlzaWJsZVJvd3M6MTAsd2lkdGg6dm9pZCAwLHdvcmRXcmFwOiEwfSk7ZnVuY3Rpb24gc3BlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBucnQoYyl7dmFyIGw9ZnVuY3Rpb24gcnJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4g''@;'; put 'put ''Yzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2''@;'; put 'put ''YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAs''@;'; put 'put ''d3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBhcnR7Y29uc3RydWN0b3IobCl7c3BlKHRoaXMsIm1ldGFDdG9yIixjbGFzc3t9KSxzcGUodGhpcywibWV0YSIsdm9pZCAwKSx0aGlzLm1ldGE9dGhpcy5tZXRhQ3Rvci5wcm90b3R5cGUsRXUodGhpcy5tZXRhLG9wZSgpKSx0aGlzLm1ldGEu''@;'; put 'put ''aW5zdGFuY2U9bH1nZXRNZXRhQ29uc3RydWN0b3IoKXtyZXR1cm4gdGhpcy5tZXRhQ3Rvcn1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe3ZhciBhO0V1KHRoaXMubWV0YSxsKSxEUCh0aGlzLm1ldGEsey4uLmwsdHlwZTpudWxsIT09KGE9bC50eXBlKSYmdm9pZCAw''@;'; put 'put ''IT09YT9hOnRoaXMubWV0YS50eXBlfSxsKX19Y2xhc3MgY3J0e2NvbnN0cnVjdG9yKGwpeyFmdW5jdGlvbiBvcnQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHNydChjKXt2YXIgbD1mdW5jdGlvbiBscnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNb''@;'; put 'put ''U3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJl''@;'; put 'put ''dHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZToh''@;'; put 'put ''MH0pOmNbbF09YSxjfSh0aGlzLCJtZXRhIix2b2lkIDApO2NvbnN0IGE9bC5nZXRNZXRhQ29uc3RydWN0b3IoKTt0aGlzLm1ldGE9bmV3IGF9Z2V0TWV0YSgpe3JldHVybiB0aGlzLm1ldGF9dXBkYXRlTWV0YShsKXtFdSh0aGlzLm1ldGEsbCksRFAodGhpcy5tZXRhLGwsbCl9fWZ1bmN0aW9u''@;'; put 'put ''IE9QKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB1cnQoYyl7dmFyIGw9ZnVuY3Rpb24gZHJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi''@;'; put 'put ''KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s''@;'; put 'put ''Ij09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBQUHtjb25zdHJ1Y3RvcihsKXtPUCh0aGlzLCJ2YWx1ZUZhY3RvcnkiLHZv''@;'; put 'put ''aWQgMCksT1AodGhpcywiZGF0YSIsW10pLE9QKHRoaXMsImluZGV4IixbXSksT1AodGhpcywiaG9sZXMiLG5ldyBTZXQpLHRoaXMudmFsdWVGYWN0b3J5PWx9b2J0YWluKGwpe1JQKCgpPT5JUChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlci4iKTtjb25zdCBhPXRoaXMuX2dldFN0''@;'; put 'put ''b3JhZ2VJbmRleEJ5S2V5KGwpO2xldCBkO2lmKGE+PTApZD10aGlzLmRhdGFbYV0sdm9pZCAwPT09ZCYmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5kYXRhW2FdPWQpO2Vsc2UgaWYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmhvbGVzLnNpemU+MCl7Y29uc3QgaD10aGlzLmhv''@;'; put 'put ''bGVzLnZhbHVlcygpLm5leHQoKS52YWx1ZTt0aGlzLmhvbGVzLmRlbGV0ZShoKSx0aGlzLmRhdGFbaF09ZCx0aGlzLmluZGV4W2xdPWh9ZWxzZSB0aGlzLmRhdGEucHVzaChkKSx0aGlzLmluZGV4W2xdPXRoaXMuZGF0YS5sZW5ndGgtMTtyZXR1cm4gZH1pbnNlcnQobCl7bGV0IGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7UlAoKCk9PklQKGwpfHxMUChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPVtdLGg9dGhpcy5kYXRhLmxlbmd0aDtmb3Io''@;'; put 'put ''bGV0IHY9MDt2PGE7disrKWQucHVzaChoK3YpLHRoaXMuZGF0YS5wdXNoKHZvaWQgMCk7Y29uc3QgZj1MUChsKT90aGlzLmluZGV4Lmxlbmd0aDpsO3RoaXMuaW5kZXg9Wy4uLnRoaXMuaW5kZXguc2xpY2UoMCxmKSwuLi5kLC4uLnRoaXMuaW5kZXguc2xpY2UoZildfXJlbW92ZShsKXtsZXQg''@;'; put 'put ''YT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTtSUCgoKT0+SVAobCl8fExQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IGQ9dGhpcy5pbmRleC5zcGxpY2Uo''@;'; put 'put ''TFAobCk/dGhpcy5pbmRleC5sZW5ndGgtYTpsLGEpO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07Im51bWJlciI9PXR5cGVvZiBmJiZ0aGlzLmhvbGVzLmFkZChmKX19c2l6ZSgpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoLXRoaXMuaG9sZXMuc2l6ZX12YWx1ZXMo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5kYXRhLmZpbHRlcigobCxhKT0+dm9pZCAwIT09bCYmIXRoaXMuaG9sZXMuaGFzKGEpKVtTeW1ib2wuaXRlcmF0b3JdKCl9ZW50cmllcygpe2NvbnN0IGw9W107Zm9yKGxldCBkPTA7ZDx0aGlzLmRhdGEubGVuZ3RoO2QrKyl7Y29uc3QgaD10aGlzLl9nZXRLZXlCeVN0''@;'; put 'put ''b3JhZ2VJbmRleChkKTstMSE9PWgmJnZvaWQgMCE9PXRoaXMuZGF0YVtkXSYmbC5wdXNoKFtoLHRoaXMuZGF0YVtkXV0pfWxldCBhPTA7cmV0dXJue25leHQ6KCk9PntpZihhPGwubGVuZ3RoKXtjb25zdCBkPWxbYV07cmV0dXJuIGErPTEse3ZhbHVlOmQsZG9uZTohMX19cmV0dXJue2RvbmU6''@;'; put 'put ''ITB9fX19Y2xlYXIoKXt0aGlzLmRhdGE9W10sdGhpcy5pbmRleD1bXSx0aGlzLmhvbGVzLmNsZWFyKCl9X2dldFN0b3JhZ2VJbmRleEJ5S2V5KGwpe3JldHVybiB0aGlzLmluZGV4Lmxlbmd0aD5sP3RoaXMuaW5kZXhbbF06LTF9X2dldEtleUJ5U3RvcmFnZUluZGV4KGwpe3JldHVybiB0aGlz''@;'; put 'put ''LmluZGV4LmluZGV4T2YobCl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9fWZ1bmN0aW9uIGxwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gaHJ0KGMpe3ZhciBsPWZ1bmN0aW9uIGZydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7''@;'; put 'put ''dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFs''@;'; put 'put ''dWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdy''@;'; put 'put ''aXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgcHJ0PVsiZGF0YSIsIndpZHRoIl07Y2xhc3MgZ3J0e2NvbnN0cnVjdG9yKGwpe2xwZSh0aGlzLCJnbG9iYWxNZXRhIix2b2lkIDApLGxwZSh0aGlzLCJtZXRhcyIsbmV3IFBQKCgpPT50aGlzLl9jcmVhdGVNZXRhKCkpKSx0aGlzLmdsb2JhbE1l''@;'; put 'put ''dGE9bCx0aGlzLm1ldGFzPW5ldyBQUCgoKT0+dGhpcy5fY3JlYXRlTWV0YSgpKX11cGRhdGVNZXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldE1ldGEobCk7RXUoZCxhKSxEUChkLGEpfWNyZWF0ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7dGhp''@;'; put 'put ''cy5tZXRhcy5yZW1vdmUobCxhKX1nZXRNZXRhKGwpe3JldHVybiB0aGlzLm1ldGFzLm9idGFpbihsKX1nZXRNZXRhQ29uc3RydWN0b3IobCl7cmV0dXJuIHRoaXMubWV0YXMub2J0YWluKGwpLmNvbnN0cnVjdG9yfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZU1ldGEo''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24gdHJ0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtmdW5jdGlvbiBhKCl7fUcyZShhLGMpO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWEucHJvdG90eXBlW2xbZF1dPXZvaWQgMDty''@;'; put 'put ''ZXR1cm4gYX0odGhpcy5nbG9iYWxNZXRhLmdldE1ldGFDb25zdHJ1Y3RvcigpLHBydCkucHJvdG90eXBlfX1mdW5jdGlvbiBjcGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG1ydChjKXt2YXIgbD1mdW5jdGlvbiB2cnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBj''@;'; put 'put ''O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh''@;'; put 'put ''bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3''@;'; put 'put ''cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGJydHtjb25zdHJ1Y3RvcihsKXtjcGUodGhpcywiY29sdW1uTWV0YSIsdm9pZCAwKSxjcGUodGhpcywibWV0YXMiLG5ldyBQUCgoKT0+dGhpcy5fY3JlYXRlUm93KCkpKSx0aGlzLmNvbHVtbk1ldGE9bH11cGRhdGVNZXRhKGwsYSxkKXtjb25z''@;'; put 'put ''dCBoPXRoaXMuZ2V0TWV0YShsLGEpO0V1KGgsZCksRFAoaCxkKX1jcmVhdGVSb3cobCxhKXt0aGlzLm1ldGFzLmluc2VydChsLGEpfWNyZWF0ZUNvbHVtbihsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXRhcy5zaXplKCk7ZCsrKXRoaXMubWV0YXMub2J0YWluKGQpLmluc2VydChsLGEpfXJl''@;'; put 'put ''bW92ZVJvdyhsLGEpe3RoaXMubWV0YXMucmVtb3ZlKGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkucmVtb3ZlKGwsYSl9Z2V0TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLm1ldGFzLm9idGFpbihs''@;'; put 'put ''KS5vYnRhaW4oYSk7cmV0dXJuIHZvaWQgMD09PWQ/aDpoW2RdfXNldE1ldGEobCxhLGQsaCl7dmFyIGY7Y29uc3Qgdj10aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSk7bnVsbD09PShmPXYuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PWZ8fGYuZGVsZXRl''@;'; put 'put ''KGQpLHZbZF09aH1yZW1vdmVNZXRhKGwsYSxkKXtkZWxldGUgdGhpcy5tZXRhcy5vYnRhaW4obCkub2J0YWluKGEpW2RdfWdldE1ldGFzKCl7Y29uc3QgbD1bXSxhPUFycmF5LmZyb20odGhpcy5tZXRhcy52YWx1ZXMoKSk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspUGEoYVtkXSkmJmwu''@;'; put 'put ''cHVzaCguLi5hW2RdLnZhbHVlcygpKTtyZXR1cm4gbH1nZXRNZXRhc0F0Um93KGwpe1JQKCgpPT5JUChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlci4iKTtjb25zdCBhPW5ldyBNYXAodGhpcy5tZXRhcyk7cmV0dXJuIGEuaGFzKGwpP0FycmF5LmZyb20oYS5nZXQobCkudmFsdWVz''@;'; put 'put ''KCkpOltdfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZVJvdygpe3JldHVybiBuZXcgUFAobD0+dGhpcy5fY3JlYXRlTWV0YShsKSl9X2NyZWF0ZU1ldGEobCl7cmV0dXJuIG5ldyh0aGlzLmNvbHVtbk1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKGwpKX19Y2xhc3MgdXBl''@;'; put 'put ''e2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXTt0aGlzLmhvdD1sLHRoaXMuZ2xvYmFsTWV0''@;'; put 'put ''YT1uZXcgYXJ0KGwpLHRoaXMudGFibGVNZXRhPW5ldyBjcnQodGhpcy5nbG9iYWxNZXRhKSx0aGlzLmNvbHVtbk1ldGE9bmV3IGdydCh0aGlzLmdsb2JhbE1ldGEpLHRoaXMuY2VsbE1ldGE9bmV3IGJydCh0aGlzLmNvbHVtbk1ldGEpLGQuZm9yRWFjaChoPT5uZXcgaCh0aGlzKSksdGhpcy5n''@;'; put 'put ''bG9iYWxNZXRhLnVwZGF0ZU1ldGEoYSl9Z2V0R2xvYmFsTWV0YSgpe3JldHVybiB0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YSgpfXVwZGF0ZUdsb2JhbE1ldGEobCl7dGhpcy5nbG9iYWxNZXRhLnVwZGF0ZU1ldGEobCl9Z2V0VGFibGVNZXRhKCl7cmV0dXJuIHRoaXMudGFibGVNZXRhLmdldE1l''@;'; put 'put ''dGEoKX11cGRhdGVUYWJsZU1ldGEobCl7dGhpcy50YWJsZU1ldGEudXBkYXRlTWV0YShsKX1nZXRDb2x1bW5NZXRhKGwpe3JldHVybiB0aGlzLmNvbHVtbk1ldGEuZ2V0TWV0YShsKX11cGRhdGVDb2x1bW5NZXRhKGwsYSl7dGhpcy5jb2x1bW5NZXRhLnVwZGF0ZU1ldGEobCxhKX1nZXRDZWxs''@;'; put 'put ''TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmNlbGxNZXRhLmdldE1ldGEobCxhKTtyZXR1cm4gaC52aXN1YWxSb3c9ZC52aXN1YWxSb3csaC52aXN1YWxDb2w9ZC52aXN1YWxDb2x1bW4saC5yb3c9bCxoLmNvbD1hLGQuc2tpcE1ldGFFeHRlbnNpb258fHRoaXMucnVuTG9jYWxIb29rcygiYWZ0''@;'; put 'put ''ZXJHZXRDZWxsTWV0YSIsaCksaH1nZXRDZWxsTWV0YUtleVZhbHVlKGwsYSxkKXtpZigic3RyaW5nIiE9dHlwZW9mIGQpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGNlbGwgbWV0YSBvYmplY3Qga2V5IGlzIG5vdCBhIHN0cmluZyIpO3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGEo''@;'; put 'put ''bCxhLGQpfXNldENlbGxNZXRhKGwsYSxkLGgpe3RoaXMuY2VsbE1ldGEuc2V0TWV0YShsLGEsZCxoKX11cGRhdGVDZWxsTWV0YShsLGEsZCl7dGhpcy5jZWxsTWV0YS51cGRhdGVNZXRhKGwsYSxkKX1yZW1vdmVDZWxsTWV0YShsLGEsZCl7dGhpcy5jZWxsTWV0YS5yZW1vdmVNZXRhKGwsYSxk''@;'; put 'put ''KX1nZXRDZWxsc01ldGEoKXtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhcygpfWdldENlbGxzTWV0YUF0Um93KGwpe3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGFzQXRSb3cobCl9Y3JlYXRlUm93KGwpe3RoaXMuY2VsbE1ldGEuY3JlYXRlUm93KGwsYXJndW1lbnRzLmxlbmd0aD4x''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfXJlbW92ZVJvdyhsKXt0aGlzLmNlbGxNZXRhLnJlbW92ZVJvdyhsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxKX1jcmVhdGVDb2x1bW4obCl7bGV0IGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5jcmVhdGVDb2x1bW4obCxhKSx0aGlzLmNvbHVtbk1ldGEuY3JlYXRlQ29sdW1uKGwsYSl9cmVtb3ZlQ29sdW1uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEucmVtb3ZlQ29sdW1uKGwsYSksdGhpcy5jb2x1bW5NZXRhLnJlbW92ZUNvbHVtbihsLGEpfWNsZWFyQ2VsbHNDYWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpfWNsZWFyQ2FjaGUoKXt0aGlzLmNlbGxN''@;'; put 'put ''ZXRhLmNsZWFyQ2FjaGUoKSx0aGlzLmNvbHVtbk1ldGEuY2xlYXJDYWNoZSgpfX1mdW5jdGlvbiBkcGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHlydChjKXt2YXIgbD1mdW5jdGlvbiBfcnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb''@;'; put 'put ''bF09YSxjfVRsKHVwZSx5MSk7Y2xhc3Mgd3J0e2NvbnN0cnVjdG9yKGwpe3ZhciBhPXRoaXM7ZHBlKHRoaXMsIm1ldGFNYW5hZ2VyIix2b2lkIDApLGRwZSh0aGlzLCJtZXRhU3luY01lbW8iLG5ldyBNYXApLHRoaXMubWV0YU1hbmFnZXI9bCxsLmFkZExvY2FsSG9vaygiYWZ0ZXJHZXRDZWxs''@;'; put 'put ''TWV0YSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5leHRlbmRDZWxsTWV0YSguLi5hcmd1bWVudHMpfSksU2EuZ2V0U2luZ2xldG9uKCkuYWRkKCJiZWZvcmVSZW5kZXIiLGQ9PntkJiZ0aGlzLm1ldGFTeW5jTWVtby5jbGVhcigpfSx0aGlzLm1ldGFNYW5hZ2VyLmhvdCl9ZXh0ZW5kQ2VsbE1ldGEo''@;'; put 'put ''bCl7dmFyIGE7Y29uc3R7cm93OmQsY29sOmh9PWw7aWYobnVsbCE9PShhPXRoaXMubWV0YVN5bmNNZW1vLmdldChkKSkmJnZvaWQgMCE9PWEmJmEuaGFzKGgpKXJldHVybjtjb25zdHt2aXN1YWxSb3c6Zix2aXN1YWxDb2w6dn09bCxNPXRoaXMubWV0YU1hbmFnZXIuaG90LEQ9TS5jb2xUb1By''@;'; put 'put ''b3Aodik7bC5wcm9wPUQsTS5ydW5Ib29rcygiYmVmb3JlR2V0Q2VsbE1ldGEiLGYsdixsKTtjb25zdCBaPVR1KGwsInR5cGUiKT9sLnR5cGU6bnVsbDtsZXQgcmU9bWwobC5jZWxscyk/bC5jZWxscyhkLGgsRCk6bnVsbDtpZihaKWlmKHJlKXt2YXIgY2U7cmUudHlwZT1udWxsIT09KGNlPXJl''@;'; put 'put ''LnR5cGUpJiZ2b2lkIDAhPT1jZT9jZTpafWVsc2UgcmU9e3R5cGU6Wn07cmUmJnRoaXMubWV0YU1hbmFnZXIudXBkYXRlQ2VsbE1ldGEoZCxoLHJlKSxNLnJ1bkhvb2tzKCJhZnRlckdldENlbGxNZXRhIixmLHYsbCksdGhpcy5tZXRhU3luY01lbW8uaGFzKGQpfHx0aGlzLm1ldGFTeW5jTWVt''@;'; put 'put ''by5zZXQoZCxuZXcgU2V0KSx0aGlzLm1ldGFTeW5jTWVtby5nZXQoZCkuYWRkKGgpfX1mdW5jdGlvbiB4WChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTXJ0KGMpe3ZhciBsPWZ1bmN0aW9uIHhydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1i''@;'; put 'put ''b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu''@;'; put 'put ''KCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6''@;'; put 'put ''Y1tsXT1hLGN9dmFyIGhwZT1uZXcgV2Vha01hcDtjbGFzcyBBcnR7Y29uc3RydWN0b3IobCl7eFgodGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCkseFgodGhpcywidXNhZ2VUcmFja2VyIixuZXcgU2V0KSx4WCh0aGlzLCJwcm9wRGVzY3JpcHRvcnMiLG5ldyBNYXAoW1siYXJpYVRhZ3MiLHtp''@;'; put 'put ''bml0T25seTohMH1dLFsiZml4ZWRDb2x1bW5zTGVmdCIse3RhcmdldDoiZml4ZWRDb2x1bW5zU3RhcnQiLG9uQ2hhbmdlKGEpe2lmKHRoaXMubWV0YU1hbmFnZXIuaG90LmlzUnRsKCkmJiJmaXhlZENvbHVtbnNMZWZ0Ij09PWEpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xl''@;'; put 'put ''ZnRgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKTtpZih0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc0xlZnQiKSYmdGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNTdGFydCIpKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBhbmQgYGZpeGVkQ29sdW1uc1N0YXJ0YCBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFzZSB1c2Ugb25seSB0aGUgb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIil9fV0sWyJsYXlvdXREaXJlY3Rpb24iLHtpbml0''@;'; put 'put ''T25seTohMH1dLFsicmVuZGVyQWxsQ29sdW1ucyIse2luaXRPbmx5OiEwfV0sWyJyZW5kZXJBbGxSb3dzIix7aW5pdE9ubHk6ITB9XV0pKSxmdW5jdGlvbiBDcnQoYyxsLGEpeyhmdW5jdGlvbiBTcnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlh''@;'; put 'put ''bGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLGhwZSwoYSxkLGgpPT57aWYoIWgpdGhyb3cgbmV3IEVycm9yKGBUaGUgXGAke2F9XGAgb3B0aW9uIGNhbiBub3QgYmUgdXBkYXRlZCBhZnRlciB0aGUgSGFu''@;'; put 'put ''ZHNvbnRhYmxlIGlzIGluaXRpYWxpemVkLmApfSksdGhpcy5tZXRhTWFuYWdlcj1sLHRoaXMuZXh0ZW5kTWV0YVByb3BzKCl9ZXh0ZW5kTWV0YVByb3BzKCl7dGhpcy5wcm9wRGVzY3JpcHRvcnMuZm9yRWFjaCgobCxhKT0+e2NvbnN0e2luaXRPbmx5OmQsdGFyZ2V0Omgsb25DaGFuZ2U6Zn09''@;'; put 'put ''bCx2PSJzdHJpbmciPT10eXBlb2YgaCxNPXY/aDphLEQ9YF8ke019YDt0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YVtEXT10aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YVtNXSxmPyh0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLEQsZiksdiYmdGhpcy5pbnN0YWxsUHJv''@;'; put 'put ''cFdhdGNoZXIoaCxELGYpKTpkJiYodGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoYSxELGZ1bmN0aW9uIEVydChjLGwpe3JldHVybiBjLmdldChmdW5jdGlvbiBUcnQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/''@;'; put 'put ''bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShjLGwpKX0oaHBlLHRoaXMpKSx0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5nc3x8KHRoaXMubWV0YU1hbmFnZXIuZ2xv''@;'; put 'put ''YmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzPVtdKSx0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5ncy5wdXNoKGEpKX0pfWluc3RhbGxQcm9wV2F0Y2hlcihsLGEsZCl7Y29uc3QgaD10aGlzO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLm1l''@;'; put 'put ''dGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YSxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGYpe2NvbnN0IHY9IWgudXNhZ2VUcmFja2VyLmhhcyhsKTtoLnVzYWdlVHJhY2tlci5hZGQobCksZC5jYWxsKGgsbCxmLHYpLHRoaXNbYV09Zn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6''@;'; put 'put ''ITB9KX19Y29uc3QgZnBlPS9eKFxyXG58XG5ccnxccnxcbikvLGtydD0vXlteXHRcclxuXSsvLHBwZT0vXlx0LztmdW5jdGlvbiByVChjKXtsZXQgbCxhLGQsaCx2LGY9IiI7Zm9yKGw9MCxhPWMubGVuZ3RoO2w8YTtsKz0xKXtmb3IoaD1jW2xdLmxlbmd0aCxkPTA7ZDxoO2QrPTEpZD4wJiYo''@;'; put 'put ''Zis9Ilx0Iiksdj1jW2xdW2RdLCJzdHJpbmciPT10eXBlb2Ygdj92LmluZGV4T2YoIlxuIik+LTE/Zis9YCIke3YucmVwbGFjZSgvIi9nLCciIicpfSJgOmYrPXY6Zis9bnVsbD09dj8iIjp2O2whPT1hLTEmJihmKz0iXG4iKX1yZXR1cm4gZn1mdW5jdGlvbiByOShjLGwsYSl7cmV0dXJuKGw9''@;'; put 'put ''ZnVuY3Rpb24gSXJ0KGMpe3ZhciBsPWZ1bmN0aW9uIFJydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0o''@;'; put 'put ''bCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVF97c3RhdGljIGdldCBERVNUSU5BVElPTl9SRU5ERVJFUigpe3JldHVybiAxfXN0YXRpYyBnZXQgREVTVElO''@;'; put 'put ''QVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUigpe3JldHVybiAyfWNvbnN0cnVjdG9yKGwsYSxkKXtyOSh0aGlzLCJob3QiLHZvaWQgMCkscjkodGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCkscjkodGhpcywidGFibGVNZXRhIix2b2lkIDApLHI5KHRoaXMsImRhdGFTb3VyY2UiLHZvaWQgMCks''@;'; put 'put ''cjkodGhpcywiZHVja1NjaGVtYSIsdm9pZCAwKSxyOSh0aGlzLCJjb2xUb1Byb3BDYWNoZSIsdm9pZCAwKSxyOSh0aGlzLCJwcm9wVG9Db2xDYWNoZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMubWV0YU1hbmFnZXI9ZCx0aGlzLnRhYmxlTWV0YT1kLmdldFRhYmxlTWV0YSgpLHRoaXMuZGF0''@;'; put 'put ''YVNvdXJjZT1hLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSx0aGlzLmNyZWF0ZU1hcCgpfWNyZWF0ZU1hcCgpe2NvbnN0IGw9dGhpcy5nZXRTY2hlbWEoKTtpZih0eXBlb2YgbD4idSIpdGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gY3JlYXRlIGBjb2x1bW5zYCBkZWZpbml0aW9uIGJ1dCB5''@;'; put 'put ''b3UgZGlkbid0IHByb3ZpZGUgYHNjaGVtYWAgbm9yIGBkYXRhYCIpO2NvbnN0IGE9dGhpcy50YWJsZU1ldGEuY29sdW1ucztsZXQgZDtpZih0aGlzLmNvbFRvUHJvcENhY2hlPVtdLHRoaXMucHJvcFRvQ29sQ2FjaGU9bmV3IE1hcCxhKXtsZXQgaD0wLGY9MCx2PSExO2lmKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBhKXtjb25zdCBNPUJPKGwpO2g9TT4wP006dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLHY9ITB9ZWxzZSBoPU1hdGgubWluKHRoaXMudGFibGVNZXRhLm1heENvbHMsYS5sZW5ndGgpO2ZvcihkPTA7ZDxoO2QrKyl7Y29uc3QgTT12P2EoZCk6YVtkXTtpZihxbyhNKSl7aWYodHlw''@;'; put 'put ''ZW9mIE0uZGF0YTwidSIpe2NvbnN0IEQ9dj9mOmQ7dGhpcy5jb2xUb1Byb3BDYWNoZVtEXT1NLmRhdGEsdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQoTS5kYXRhLEQpfWYrPTF9fX1lbHNlIHRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMobCl9Y291bnRGaXJzdFJvd0tleXMoKXtyZXR1cm4gRkso''@;'; put 'put ''dGhpcy5kYXRhU291cmNlKX1yZWN1cnNpdmVEdWNrQ29sdW1ucyhsLGEsZCl7bGV0IHYsaD1hLGY9ZDtyZXR1cm4gdHlwZW9mIGg+InUiJiYoaD0wLGY9IiIpLCJvYmplY3QiPT10eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJlhvKGwsKE0sRCk9PntudWxsPT09TT8odj1mK0QsdGhpcy5j''@;'; put 'put ''b2xUb1Byb3BDYWNoZS5wdXNoKHYpLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KHYsaCksaCs9MSk6aD10aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKE0saCxgJHtEfS5gKX0pLGh9Y29sVG9Qcm9wKGwpe2lmKCExPT09TnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbDtjb25zdCBhPXRoaXMu''@;'; put 'put ''aG90LnRvUGh5c2ljYWxDb2x1bW4obCk7cmV0dXJuIG51bGw9PT1hP2w6dGhpcy5jb2xUb1Byb3BDYWNoZSYmUGEodGhpcy5jb2xUb1Byb3BDYWNoZVthXSk/dGhpcy5jb2xUb1Byb3BDYWNoZVthXTphfXByb3BUb0NvbChsKXtjb25zdCBhPXRoaXMucHJvcFRvQ29sQ2FjaGUuZ2V0KGwpO2lm''@;'; put 'put ''KFBhKGEpKXJldHVybiB0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtjb25zdCBkPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpO3JldHVybiBudWxsPT09ZD9sOmR9Z2V0U2NoZW1hKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hO3JldHVybiBsPyJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBsP2woKTpsOnRoaXMuZHVja1NjaGVtYX1jcmVhdGVEdWNrU2NoZW1hKCl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZSYmdGhpcy5kYXRhU291cmNlWzBdP3NfKHRoaXMuZGF0YVNvdXJjZVswXSk6e319cmVmcmVzaER1Y2tTY2hlbWEoKXt0aGlzLmR1Y2tTY2hlbWE9dGhpcy5jcmVhdGVE''@;'; put 'put ''dWNrU2NoZW1hKCl9Y3JlYXRlUm93KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHtzb3VyY2U6ZCxtb2RlOmg9ImFib3ZlIn09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRz''@;'; put 'put ''WzJdOnt9O2NvbnN0IGY9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7bGV0IHY9ZixNPTAsRD1sO2lmKCgibnVtYmVyIiE9dHlwZW9mIER8fEQ+PWYpJiYoRD1mKSxEPHRoaXMuaG90LmNvdW50Um93cygpJiYodj10aGlzLmhvdC50b1BoeXNpY2FsUm93KEQpKSwhMT09PXRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLEQsYSxkKXx8bnVsbD09PXYpcmV0dXJue2RlbHRhOjB9O2NvbnN0IHJlPXRoaXMudGFibGVNZXRhLm1heFJvd3MsY2U9dGhpcy5nZXRTY2hlbWEoKS5sZW5ndGgsYmU9W107Zm9yKDtNPGEmJmYrTTxyZTspe2xldCBCZT1udWxsOyJhcnJheSI9PT10''@;'; put 'put ''aGlzLmhvdC5kYXRhVHlwZT90aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hP0JlPWcxKHRoaXMuZ2V0U2NoZW1hKCkpOihCZT1bXSxHYShjZS0xLCgpPT5CZS5wdXNoKG51bGwpKSk6ImZ1bmN0aW9uIj09PXRoaXMuaG90LmRhdGFUeXBlP0JlPXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEoRCtN''@;'; put 'put ''KTooQmU9e30seEUoQmUsdGhpcy5nZXRTY2hlbWEoKSkpLGJlLnB1c2goQmUpLE0rPTF9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhELE0pLCJiZWxvdyI9PT1oJiYodj1NYXRoLm1pbih2KzEsZikpLHRoaXMuc3BsaWNlRGF0YSh2LDAsYmUpO2NvbnN0IEVlPXRoaXMu''@;'; put 'put ''aG90LnRvVmlzdWFsUm93KHYpO3JldHVybiB0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKT09PWJlLmxlbmd0aCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuaG90LmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxNPjAmJihudWxsPT1sP3RoaXMubWV0YU1h''@;'; put 'put ''bmFnZXIuY3JlYXRlUm93KG51bGwsTSk6ImF1dG8iIT09ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVSb3codixhKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixFZSxNLGQpLHtkZWx0YTpNLHN0YXJ0UGh5c2ljYWxJbmRleDp2fX1jcmVhdGVDb2wobCl7bGV0IGE9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEse3NvdXJjZTpkLG1vZGU6aD0ic3RhcnQifT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aWYoIXRoaXMuaG90LmlzQ29sdW1uTW9kaWZp''@;'; put 'put ''Y2F0aW9uQWxsb3dlZCgpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNyZWF0ZSBuZXcgY29sdW1uLiBXaGVuIGRhdGEgc291cmNlIGluIGFuIG9iamVjdCwgeW91IGNhbiBvbmx5IGhhdmUgYXMgbXVjaCBjb2x1bW5zIGFzIGRlZmluZWQgaW4gZmlyc3QgZGF0YSByb3csIGRhdGEgc2NoZW1h''@;'; put 'put ''IG9yIGluIHRoZSAnY29sdW1ucycgc2V0dGluZy5JZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGFkZCBuZXcgY29sdW1ucywgeW91IGhhdmUgdG8gdXNlIGFycmF5IGRhdGFzb3VyY2UuIik7Y29uc3QgZj10aGlzLmRhdGFTb3VyY2Usdj10aGlzLnRhYmxlTWV0YS5tYXhDb2xzLE09dGhpcy5o''@;'; put 'put ''b3QuY291bnRTb3VyY2VDb2xzKCk7bGV0IEQ9bDtpZigoIm51bWJlciIhPXR5cGVvZiBEfHxEPj1NKSYmKEQ9TSksITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlQ29sIixELGEsZCkpcmV0dXJue2RlbHRhOjB9O2xldCByZT1NO0Q8dGhpcy5ob3QuY291bnRDb2xzKCkmJihy''@;'; put 'put ''ZT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKEQpKTtjb25zdCBjZT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsZXQgYmU9dGhpcy5ob3QuY291bnRDb2xzKCksRWU9MCxCZT1yZTsiZW5kIj09PWgmJihCZT1NYXRoLm1pbihCZSsxLE0pKTtjb25zdCBxZT1CZTtmb3IoO0VlPGEmJmJl''@;'; put 'put ''PHY7KXtpZigibnVtYmVyIiE9dHlwZW9mIER8fEQ+PWJlKWlmKGNlPjApZm9yKGxldCBwdD0wO3B0PGNlO3B0Kz0xKXR5cGVvZiBmW3B0XT4idSImJihmW3B0XT1bXSksZltwdF0ucHVzaChudWxsKTtlbHNlIGYucHVzaChbbnVsbF0pO2Vsc2UgZm9yKGxldCBwdD0wO3B0PGNlO3B0KyspZltw''@;'; put 'put ''dF0uc3BsaWNlKEJlLDAsbnVsbCk7RWUrPTEsQmUrPTEsYmUrPTF9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhELEVlKSxFZT4wJiYobnVsbD09bD90aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZUNvbHVtbihudWxsLEVlKToiYXV0byIhPT1kJiZ0aGlzLm1ldGFNYW5h''@;'; put 'put ''Z2VyLmNyZWF0ZUNvbHVtbihxZSxhKSk7Y29uc3QgcnQ9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4ocWUpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVDb2wiLHJ0LEVlLGQpLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSx7ZGVsdGE6RWUsc3RhcnRQaHlzaWNhbEluZGV4''@;'; put 'put ''OnFlfX1yZW1vdmVSb3cobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEsZD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxoPU51bWJlci5pc0ludGVnZXIobCk/bDotYTtjb25zdCBmPXRoaXMudmlz''@;'; put 'put ''dWFsUm93c1RvUGh5c2ljYWwoaCxhKSx2PXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2lmKGg9KHYraCkldiwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGgsZi5sZW5ndGgsZixkKSlyZXR1cm4hMTtjb25zdCBEPWYubGVuZ3RoO2lmKHRoaXMuZmlsdGVyRGF0''@;'; put 'put ''YShoLEQsZiksaDx0aGlzLmhvdC5jb3VudFJvd3MoKSl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhmKTtjb25zdCByZT1QYSh0aGlzLnRhYmxlTWV0YS5jb2x1bW5zKXx8UGEodGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYSl8fHRoaXMudGFibGVNZXRhLmNvbEhlYWRl''@;'; put 'put ''cnM7MD09PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkmJiFyZSYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtdKX1yZXR1cm4gZi5zbGljZSgwKS5zb3J0KChyZSxjZSk9PmNlLXJlKS5mb3JFYWNoKHJl''@;'; put 'put ''PT57dGhpcy5tZXRhTWFuYWdlci5yZW1vdmVSb3cocmUsMSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVSb3ciLGgsRCxmLGQpLCEwfXJlbW92ZUNvbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJvYmplY3QiPT09dGhpcy5ob3QuZGF0YVR5cGV8fHRoaXMudGFibGVNZXRhLmNvbHVtbnMpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgcmVtb3ZlIGNvbHVtbiB3aXRoIG9iamVjdCBkYXRhIHNvdXJjZSBvciBjb2x1bW5z''@;'; put 'put ''IG9wdGlvbiBzcGVjaWZpZWQiKTtsZXQgaD0ibnVtYmVyIiE9dHlwZW9mIGw/LWE6bDtoPSh0aGlzLmhvdC5jb3VudENvbHMoKStoKSV0aGlzLmhvdC5jb3VudENvbHMoKTtjb25zdCBmPXRoaXMudmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwoaCxhKSx2PWYuc2xpY2UoMCkuc29ydCgoY2UsYmUp''@;'; put 'put ''PT5iZS1jZSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ29sIixoLGEsZixkKSlyZXR1cm4hMTtsZXQgRD0hMDtjb25zdCBaPXYubGVuZ3RoLHJlPXRoaXMuZGF0YVNvdXJjZTtmb3IobGV0IGNlPTA7Y2U8WjtjZSsrKUQmJmZbMF0hPT1mW2NlXS1jZSYmKEQ9ITEp''@;'; put 'put ''O2lmKEQpZm9yKGxldCBjZT0wLGJlPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2NlPGJlO2NlKyspcmVbY2VdLnNwbGljZShmWzBdLGEpLDA9PT1jZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4oZlswXSxhKTtlbHNlIGZvcihsZXQgY2U9MCxiZT10aGlzLmhvdC5jb3VudFNv''@;'; put 'put ''dXJjZVJvd3MoKTtjZTxiZTtjZSsrKWZvcihsZXQgRWU9MDtFZTxaO0VlKyspcmVbY2VdLnNwbGljZSh2W0VlXSwxKSwwPT09Y2UmJnRoaXMubWV0YU1hbmFnZXIucmVtb3ZlQ29sdW1uKHZbRWVdLDEpO3JldHVybiBoPHRoaXMuaG90LmNvdW50Q29scygpJiYodGhpcy5ob3QuY29sdW1uSW5k''@;'; put 'put ''ZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhmKSwhdGhpcy50YWJsZU1ldGEucm93SGVhZGVycyYmMD09PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkmJnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSkpLHRo''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNvbCIsaCxhLGYsZCksdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLCEwfXNwbGljZUNvbChsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXREYXRhQXRDb2wobCksZj1oLnNsaWNlKGEsYStkKSx2PWguc2xpY2UoYStkKTtmb3IodmFyIE09YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxEPW5ldyBBcnJheShNPjM/TS0zOjApLFo9MztaPE07WisrKURbWi0zXT1hcmd1bWVudHNbWl07bCQoRCx2KTtsZXQgcmU9MDtmb3IoO3JlPGQ7KUQucHVzaChudWxsKSxyZSs9MTtyZXR1cm4gcDJlKEQpLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGEsbCxELG51''@;'; put 'put ''bGwsbnVsbCwic3BsaWNlQ29sIiksZn1zcGxpY2VSb3cobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Um93KGwpLGY9aC5zbGljZShhLGErZCksdj1oLnNsaWNlKGErZCk7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsRD1uZXcgQXJyYXkoTT4zP00tMzowKSxaPTM7''@;'; put 'put ''WjxNO1orKylEW1otM109YXJndW1lbnRzW1pdO2wkKEQsdik7bGV0IHJlPTA7Zm9yKDtyZTxkOylELnB1c2gobnVsbCkscmUrPTE7cmV0dXJuIHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGwsYSxbRF0sbnVsbCxudWxsLCJzcGxpY2VSb3ciKSxmfXNwbGljZURhdGEobCxhLGQpe2lmKCEx''@;'; put 'put ''IT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURhdGFTcGxpY2UiLGwsYSxkKSl7Y29uc3QgZj1bLi4udGhpcy5kYXRhU291cmNlLnNsaWNlKDAsbCksLi4uZCwuLi50aGlzLmRhdGFTb3VyY2Uuc2xpY2UobCldO3RoaXMuZGF0YVNvdXJjZS5sZW5ndGg9MCxmLmZvckVhY2godj0+dGhpcy5k''@;'; put 'put ''YXRhU291cmNlLnB1c2godikpfX1maWx0ZXJEYXRhKGwsYSxkKXtsZXQgaD10aGlzLmhvdC5ydW5Ib29rcygiZmlsdGVyRGF0YSIsbCxhLGQpOyExPT09QXJyYXkuaXNBcnJheShoKSYmKGg9dGhpcy5kYXRhU291cmNlLmZpbHRlcigoZix2KT0+LTE9PT1kLmluZGV4T2YodikpKSx0aGlzLmRh''@;'; put 'put ''dGFTb3VyY2UubGVuZ3RoPTAsQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5kYXRhU291cmNlLGgpfWdldChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKTtsZXQgaD10aGlzLmRhdGFTb3VyY2VbZF07Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5''@;'; put 'put ''Um93RGF0YSIsZCk7aD1pc05hTihmKT9mOmg7Y29uc3R7ZGF0YURvdE5vdGF0aW9uOnZ9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7bGV0IE09bnVsbDtpZihoJiZoLmhhc093blByb3BlcnR5JiZUdShoLGEpKU09aFthXTtlbHNlIGlmKHYmJiJzdHJpbmciPT10eXBlb2YgYSYmYS5pbmRleE9m''@;'; put 'put ''KCIuIik+LTEpe2xldCBEPWg7aWYoIUQpcmV0dXJuIG51bGw7Y29uc3QgWj1hLnNwbGl0KCIuIik7Zm9yKGxldCByZT0wLGNlPVoubGVuZ3RoO3JlPGNlO3JlKyspaWYoRD1EW1pbcmVdXSx0eXBlb2YgRD4idSIpcmV0dXJuIG51bGw7TT1EfWVsc2UiZnVuY3Rpb24iPT10eXBlb2YgYSYmKE09''@;'; put 'put ''YSh0aGlzLmRhdGFTb3VyY2Uuc2xpY2UoZCxkKzEpWzBdKSk7aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBEPUZkKE0pO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlEYXRhIixkLHRoaXMucHJvcFRvQ29sKGEpLEQsImdldCIpLEQuaXNUb3VjaGVkKCkmJihNPUQu''@;'; put 'put ''dmFsdWUpfXJldHVybiBNfWdldENvcHlhYmxlKGwsYSl7cmV0dXJuIHRoaXMuaG90LmdldENlbGxNZXRhKGwsdGhpcy5wcm9wVG9Db2woYSkpLmNvcHlhYmxlP3RoaXMuZ2V0KGwsYSk6IiJ9c2V0KGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCk7bGV0IGY9ZCx2PXRo''@;'; put 'put ''aXMuZGF0YVNvdXJjZVtoXTtjb25zdCBNPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixoKTtpZih2PWlzTmFOKE0pP006dix0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlEYXRhIikpe2NvbnN0IFo9RmQoZik7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeURhdGEiLGgsdGhpcy5w''@;'; put 'put ''cm9wVG9Db2woYSksWiwic2V0IiksWi5pc1RvdWNoZWQoKSYmKGY9Wi52YWx1ZSl9Y29uc3R7ZGF0YURvdE5vdGF0aW9uOkR9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7aWYodiYmdi5oYXNPd25Qcm9wZXJ0eSYmVHUodixhKSl2W2FdPWY7ZWxzZSBpZihEJiYic3RyaW5nIj09dHlwZW9mIGEm''@;'; put 'put ''JmEuaW5kZXhPZigiLiIpPi0xKXtsZXQgY2UsWj12LHJlPTA7Y29uc3QgYmU9YS5zcGxpdCgiLiIpO2ZvcihyZT0wLGNlPWJlLmxlbmd0aC0xO3JlPGNlO3JlKyspe2lmKCJfX3Byb3RvX18iPT09YmVbcmVdfHwiY29uc3RydWN0b3IiPT09YmVbcmVdfHwicHJvdG90eXBlIj09PWJlW3JlXSly''@;'; put 'put ''ZXR1cm47dHlwZW9mIFpbYmVbcmVdXT4idSImJihaW2JlW3JlXV09e30pLFo9WltiZVtyZV1dfVpbYmVbcmVdXT1mfWVsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpYSh0aGlzLmRhdGFTb3VyY2Uuc2xpY2UoaCxoKzEpWzBdLGYpO2Vsc2V7aWYoIl9fcHJvdG9fXyI9PT1hfHwiY29uc3Ry''@;'; put 'put ''dWN0b3IiPT09YXx8InByb3RvdHlwZSI9PT1hKXJldHVybjt2W2FdPWZ9fXZpc3VhbFJvd3NUb1BoeXNpY2FsKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKSxoPVtdO2xldCBNLGY9KGQrbCklZCx2PWE7Zm9yKDtmPGQmJnY7KU09dGhpcy5ob3QudG9QaHlzaWNhbFJv''@;'; put 'put ''dyhmKSxoLnB1c2goTSksdi09MSxmKz0xO3JldHVybiBofXZpc3VhbENvbHVtbnNUb1BoeXNpY2FsKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMoKSxoPVtdO2xldCBmPShkK2wpJWQsdj1hO2Zvcig7ZjxkJiZ2Oyl7Y29uc3QgTT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGYp''@;'; put 'put ''O2gucHVzaChNKSx2LT0xLGYrPTF9cmV0dXJuIGh9Y2xlYXIoKXtmb3IobGV0IGw9MDtsPHRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2wrKylmb3IobGV0IGE9MDthPHRoaXMuaG90LmNvdW50Q29scygpO2ErKyl0aGlzLnNldChsLHRoaXMuY29sVG9Qcm9wKGEpLCIiKX1nZXRMZW5ndGgo''@;'; put 'put ''KXtjb25zdCBsPXRoaXMudGFibGVNZXRhLm1heFJvd3M7bGV0IGE7YT1sPDB8fDA9PT1sPzA6bHx8MS8wO2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtyZXR1cm4gTWF0aC5taW4oZCxhKX1nZXRBbGwoKXtjb25zdCBsPXtyb3c6''@;'; put 'put ''MCxjb2w6MH0sYT17cm93Ok1hdGgubWF4KHRoaXMuaG90LmNvdW50Um93cygpLTEsMCksY29sOk1hdGgubWF4KHRoaXMuaG90LmNvdW50Q29scygpLTEsMCl9O3JldHVybiBsLnJvdy1hLnJvdyE9MHx8dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk/dGhpcy5nZXRSYW5nZShsLGEsVF8uREVT''@;'; put 'put ''VElOQVRJT05fUkVOREVSRVIpOltdfWNvdW50Q2FjaGVkQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbFRvUHJvcENhY2hlLmxlbmd0aH1nZXRSYW5nZShsLGEsZCl7Y29uc3QgaD1bXTtsZXQgZix2LE07Y29uc3QgRD10aGlzLnRhYmxlTWV0YS5tYXhSb3dzLFo9dGhpcy50YWJsZU1ldGEubWF4''@;'; put 'put ''Q29scztpZigwPT09RHx8MD09PVopcmV0dXJuW107Y29uc3QgcmU9ZD09PVRfLkRFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1I/dGhpcy5nZXRDb3B5YWJsZTp0aGlzLmdldCxjZT1NYXRoLm1pbihNYXRoLm1heChELTEsMCksTWF0aC5tYXgobC5yb3csYS5yb3cpKSxiZT1NYXRoLm1p''@;'; put 'put ''bihNYXRoLm1heChaLTEsMCksTWF0aC5tYXgobC5jb2wsYS5jb2wpKTtmb3IoZj1NYXRoLm1pbihsLnJvdyxhLnJvdyk7Zjw9Y2U7ZisrKXtNPVtdO2NvbnN0IEVlPWY+PTA/dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhmKTpmO2Zvcih2PU1hdGgubWluKGwuY29sLGEuY29sKTt2PD1iZSYmbnVs''@;'; put 'put ''bCE9PUVlO3YrKylNLnB1c2gocmUuY2FsbCh0aGlzLGYsdGhpcy5jb2xUb1Byb3AodikpKTtudWxsIT09RWUmJmgucHVzaChNKX1yZXR1cm4gaH1nZXRUZXh0KGwsYSl7cmV0dXJuIHJUKHRoaXMuZ2V0UmFuZ2UobCxhLFRfLkRFU1RJTkFUSU9OX1JFTkRFUkVSKSl9Z2V0Q29weWFibGVUZXh0''@;'; put 'put ''KGwsYSl7cmV0dXJuIHJUKHRoaXMuZ2V0UmFuZ2UobCxhLFRfLkRFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1IpKX1kZXN0cm95KCl7dGhpcy5ob3Q9bnVsbCx0aGlzLm1ldGFNYW5hZ2VyPW51bGwsdGhpcy5kYXRhU291cmNlPW51bGwsdGhpcy5kdWNrU2NoZW1hPW51bGwsdGhpcy5j''@;'; put 'put ''b2xUb1Byb3BDYWNoZS5sZW5ndGg9MCx0aGlzLnByb3BUb0NvbENhY2hlLmNsZWFyKCksdGhpcy5wcm9wVG9Db2xDYWNoZT12b2lkIDB9fWNvbnN0IExydD1UXztmdW5jdGlvbiBncGUoYyxsLGEsZCl7Y29uc3R7aG90SW5zdGFuY2U6aCxkYXRhTWFwOmYsZGF0YVNvdXJjZTp2LGludGVybmFs''@;'; put 'put ''U291cmNlOk0sc291cmNlOkQsbWV0YU1hbmFnZXI6WixmaXJzdFJ1bjpyZX09ZCxjZT1wMShNKSxiZT1oLmdldFNldHRpbmdzKCk7aC5kYXRhVHlwZT1BcnJheS5pc0FycmF5KGJlLmRhdGFTY2hlbWEpPyJhcnJheSI6bWwoYmUuZGF0YVNjaGVtYSk/ImZ1bmN0aW9uIjoib2JqZWN0IixmJiZm''@;'; put 'put ''LmRlc3Ryb3koKSxjPWgucnVuSG9va3MoYGJlZm9yZSR7Y2V9YCxjLHJlLEQpO2NvbnN0IEVlPW5ldyBMcnQoaCxjLFopO2lmKGwoRWUpLCJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9PWMpYy5wdXNoJiZjLnNwbGljZXx8KGM9W2NdKTtlbHNle2lmKG51bGwhPT1jKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cihgJHtNfSBvbmx5IGFjY2VwdHMgYXJyYXkgb2Ygb2JqZWN0cyBvciBhcnJheSBvZiBhcnJheXMgKCR7dHlwZW9mIGN9IGdpdmVuKWApO3tjb25zdCBCZT1FZS5nZXRTY2hlbWEoKTtjPVtdO2xldCBxZSxydD0wLHB0PTA7Zm9yKHJ0PTAscHQ9YmUuc3RhcnRSb3dzO3J0PHB0O3J0KyspaWYo''@;'; put 'put ''Im9iamVjdCIhPT1oLmRhdGFUeXBlJiYiZnVuY3Rpb24iIT09aC5kYXRhVHlwZXx8IWJlLmRhdGFTY2hlbWEpaWYoImFycmF5Ij09PWguZGF0YVR5cGUpcWU9ZzEoQmVbMF0pLGMucHVzaChxZSk7ZWxzZXtxZT1bXTtmb3IobGV0IGR0PTAsSnQ9YmUuc3RhcnRDb2xzO2R0PEp0O2R0KyspcWUu''@;'; put 'put ''cHVzaChudWxsKTtjLnB1c2gocWUpfWVsc2UgcWU9ZzEoQmUpLGMucHVzaChxZSl9fUFycmF5LmlzQXJyYXkoY1swXSkmJihoLmRhdGFUeXBlPSJhcnJheSIpLGJlLmRhdGE9YyxFZS5kYXRhU291cmNlPWMsdi5kYXRhPWMsdi5kYXRhVHlwZT1oLmRhdGFUeXBlLHYuY29sVG9Qcm9wPUVlLmNv''@;'; put 'put ''bFRvUHJvcC5iaW5kKEVlKSx2LnByb3BUb0NvbD1FZS5wcm9wVG9Db2wuYmluZChFZSksdi5jb3VudENhY2hlZENvbHVtbnM9RWUuY291bnRDYWNoZWRDb2x1bW5zLmJpbmQoRWUpLGEoRWUpLGgucnVuSG9va3MoYGFmdGVyJHtjZX1gLGMscmUsRCkscmV8fChoLnJ1bkhvb2tzKCJhZnRlckNo''@;'; put 'put ''YW5nZSIsbnVsbCxNKSxoLnJlbmRlcigpKSxoLmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZvKGgucm9vdEVsZW1lbnQsW1QyZSgtMSksUk8oaC5jb3VudENvbHMoKSsoaC52aWV3P2guY291bnRSb3dIZWFkZXJzKCk6MCkpXSl9ZnVuY3Rpb24gQV8oYyl7RXAoYykmJmMuc2Nyb2xsSW50b1Zp''@;'; put 'put ''ZXcoe2Jsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJlc3QifSl9ZnVuY3Rpb24gRlAoYyl7Y29uc3R7c2VsZWN0aW9uOmwsdmlldzphfT1jLGQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGg9bC5nZXRTZWxlY3Rpb25Tb3VyY2UoKSxmPWEuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4o''@;'; put 'put ''KSx2PWEuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLE09ZC5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxEPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLFo9TTw9ZixyZT1EPj12LGNlPWEuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxiZT1hLmdldExhc3RGdWxseVZpc2libGVSb3co''@;'; put 'put ''KSxFZT1kLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93LEJlPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93LHFlPUVlPD1jZSxydD1CZT49YmU7cmV0dXJue2dldENvbXB1dGVkQ29sdW1uVGFyZ2V0OnB0PT4ibW91c2UiPT09aHx8ImtleWJvYXJkIj09PWg/cHQuY29sOlomJnJlP2QuaGlnaGxp''@;'; put 'put ''Z2h0LmNvbDpaP006cmU/RDpwdC5jb2wsZ2V0Q29tcHV0ZWRSb3dUYXJnZXQ6cHQ9PiJtb3VzZSI9PT1ofHwia2V5Ym9hcmQiPT09aD9wdC5yb3c6cWUmJnJ0P2QuaGlnaGxpZ2h0LnJvdzpxZT9FZTpydD9CZTpwdC5yb3d9fWNvbnN0IG1wZT0iZ3JpZERlZmF1bHQiLFdtPSJlZGl0b3JNYW5h''@;'; put 'put ''Z2VyLmhhbmRsaW5nRWRpdG9yIjtmdW5jdGlvbiB2cGUoYyl7Y29uc3QgYT1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBhLnR5cGU9InRleHQiLGEubmFtZT0iX19odEZvY3VzQ2F0Y2hlciIsYS5jbGFzc0xpc3QuYWRkKCJodEZvY3VzQ2F0Y2hlciIpLGMu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8oYSxbbUUoIkZvY3VzIGNhdGNoZXIiKV0pLGF9ZnVuY3Rpb24gRVgoYyl7Y29uc3R7cm93SW5kZXhNYXBwZXI6bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtuYXZpZ2FibGVIZWFkZXJzOmR9PWMuZ2V0U2V0dGluZ3MoKTtsZXQgaD1kJiZjLmNv''@;'; put 'put ''dW50Q29sSGVhZGVycygpPjA/LWMuY291bnRDb2xIZWFkZXJzKCk6MCxmPWQmJmMuY291bnRSb3dIZWFkZXJzKCk+MD8tYy5jb3VudFJvd0hlYWRlcnMoKTowO3JldHVybiAwPT09aCYmKGg9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpKSwwPT09ZiYmKGY9YS5nZXRWaXN1YWxG''@;'; put 'put ''cm9tUmVuZGVyYWJsZUluZGV4KGYpKSxudWxsPT09aHx8bnVsbD09PWY/bnVsbDpjLl9jcmVhdGVDZWxsQ29vcmRzKGgsZil9ZnVuY3Rpb24gVFgoYyl7dmFyIGwsYTtjb25zdHtyb3dJbmRleE1hcHBlcjpkLGNvbHVtbkluZGV4TWFwcGVyOmh9PWMse25hdmlnYWJsZUhlYWRlcnM6Zn09Yy5n''@;'; put 'put ''ZXRTZXR0aW5ncygpO2xldCB2PWQuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS0xLE09aC5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLTE7aWYodjwwKXtpZighZnx8MD09PWMuY291bnRDb2xIZWFkZXJzKCkpcmV0dXJuIG51bGw7dj0tMX1pZihNPDApe2lmKCFmfHwwPT09Yy5j''@;'; put 'put ''b3VudENvbEhlYWRlcnMoKSlyZXR1cm4gbnVsbDtNPS0xfXJldHVybiBjLl9jcmVhdGVDZWxsQ29vcmRzKG51bGwhPT0obD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodikpJiZ2b2lkIDAhPT1sP2w6dixudWxsIT09KGE9aC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE0p''@;'; put 'put ''KSYmdm9pZCAwIT09YT9hOk0pfWNvbnN0IGJwZT1uZXcgTWFwKFtbIiAiLCJzcGFjZSJdLFsic3BhY2ViYXIiLCJzcGFjZSJdLFsic2Nyb2xsIiwic2Nyb2xsbG9jayJdLFsiZGVsIiwiZGVsZXRlIl0sWyJlc2MiLCJlc2NhcGUiXSxbIm1lZGlhbmV4dHRyYWNrIiwibWVkaWF0cmFja25leHQi''@;'; put 'put ''XSxbIm1lZGlhcHJldmlvdXN0cmFjayIsIm1lZGlhdHJhY2twcmV2aW91cyJdLFsidm9sdW1ldXAiLCJhdWRpb3ZvbHVtZXVwIl0sWyJ2b2x1bWVkb3duIiwiYXVkaW92b2x1bWVkb3duIl0sWyJ2b2x1bWVtdXRlIiwiYXVkaW92b2x1bWVtdXRlIl0sWyJtdWx0aXBseSIsIioiXSxbImFkZCIs''@;'; put 'put ''IisiXSxbImRpdmlkZSIsIi8iXSxbInN1YnRyYWN0IiwiLSJdLFsibGVmdCIsImFycm93bGVmdCJdLFsicmlnaHQiLCJhcnJvd3JpZ2h0Il0sWyJ1cCIsImFycm93dXAiXSxbImRvd24iLCJhcnJvd2Rvd24iXV0pLEhQPWM9PmMubWFwKGw9Pntjb25zdCBhPWwudG9Mb3dlckNhc2UoKTtyZXR1''@;'; put 'put ''cm4gYnBlLmhhcyhhKT9icGUuZ2V0KGEpOmF9KS5zb3J0KCkuam9pbigiKyIpLHlwZT1uZXcgTWFwKFtbOTYsIm51bXBhZDAiXSxbOTcsIm51bXBhZDEiXSxbOTgsIm51bXBhZDIiXSxbOTksIm51bXBhZDMiXSxbMTAwLCJudW1wYWQ0Il0sWzEwMSwibnVtcGFkNSJdLFsxMDIsIm51bXBhZDYi''@;'; put 'put ''XSxbMTAzLCJudW1wYWQ3Il0sWzEwNCwibnVtcGFkOCJdLFsxMDUsIm51bXBhZDkiXSxbMTA2LCJtdWx0aXBseSJdLFsxMDcsImFkZCJdLFsxMDgsImRlY2ltYWwiXSxbMTA5LCJzdWJ0cmFjdCJdLFsxMTAsImRlY2ltYWwiXSxbMTExLCJkaXZpZGUiXSxbMTEyLCJmMSJdLFsxMTMsImYyIl0s''@;'; put 'put ''WzExNCwiZjMiXSxbMTE1LCJmNCJdLFsxMTYsImY1Il0sWzExNywiZjYiXSxbMTE4LCJmNyJdLFsxMTksImY4Il0sWzEyMCwiZjkiXSxbMTIxLCJmMTAiXSxbMTIyLCJmMTEiXSxbMTIzLCJmMTIiXSxbMTg2LCJzZW1pY29sb24iXSxbMTg3LCJlcXVhbCJdLFsxODgsImNvbW1hIl0sWzE4OSwi''@;'; put 'put ''bWludXMiXSxbMTkwLCJwZXJpb2QiXSxbMTkxLCJzbGFzaCJdLFsxOTIsImJhY2txdW90ZSJdLFsyMTksImJyYWNrZXRsZWZ0Il0sWzIyMCwiYmFja3NsYXNoIl0sWzIyMSwiYnJhY2tldHJpZ2h0Il0sWzIyMiwicXVvdGUiXV0pLEFYPWM9PntsZXR7d2hpY2g6bCxrZXk6YX09YztpZih5cGUu''@;'; put 'put ''aGFzKGwpKXJldHVybiB5cGUuZ2V0KGwpO2NvbnN0IGQ9U3RyaW5nLmZyb21DaGFyQ29kZShsKS50b0xvd2VyQ2FzZSgpO3JldHVybi9eW2EtejAtOV0kLy50ZXN0KGQpP2Q6YS50b0xvd2VyQ2FzZSgpfSxfcGU9U3ltYm9sKCJzaG9ydGN1dC1jb250ZXh0Iik7ZnVuY3Rpb24gd3BlKGMpe3Jl''@;'; put 'put ''dHVybiBxbyhjKSYmYy5fX2tpbmRPZj09PV9wZX1jb25zdCAkcnQ9WyJtZXRhIiwiYWx0Iiwic2hpZnQiLCJjb250cm9sIl0saVQ9ZnVuY3Rpb24gR3J0KCl7Y29uc3QgYz1uZXcgU2V0O3JldHVybntwcmVzcyhsKXtjLmFkZChsKX0scmVsZWFzZShsKXtjLmRlbGV0ZShsKX0scmVsZWFzZUFs''@;'; put 'put ''bCgpe2MuY2xlYXIoKX0saXNQcmVzc2VkOmw9PmMuaGFzKGwpfX0oKSxhVD1bXTtsZXQgTlA9MDtjb25zdCBxcnQ9Yz0+e2xldHtvd25lcldpbmRvdzpsLGhhbmRsZUV2ZW50OmEsYmVmb3JlS2V5RG93bjpkLGFmdGVyS2V5RG93bjpofT1jO2NvbnN0IGY9Sk8oe2Vycm9ySWRFeGlzdHM6QmU9''@;'; put 'put ''PmBUaGUgIiR7QmV9IiBjb250ZXh0IG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkLmB9KTtsZXQgdj0iZ3JpZCI7Y29uc3QgRD0oKT0+dixaPUJlPT5mLmdldEl0ZW0oQmUpO2xldCBjZT0hMTtjb25zdCBiZT1mdW5jdGlvbihCZSxxZSl7bGV0IHJ0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpEKCk7Y29uc3QgcHQ9d3BlKHJ0KT9ydDpaKHJ0KTtsZXQgZHQ9ITE7aWYoIXB0Lmhhc1Nob3J0Y3V0KHFlKSlyZXR1cm4gZHQ7Y29uc3QgSnQ9cHQuZ2V0U2hvcnRjdXRzKHFlKTtmb3IobGV0IHZuPTA7dm48SnQubGVuZ3RoO3ZuKysp''@;'; put 'put ''e2NvbnN0e2NhbGxiYWNrOkNuLHJ1bk9ubHlJZjp0bixwcmV2ZW50RGVmYXVsdDpNbixzdG9wUHJvcGFnYXRpb246Q3IsY2FwdHVyZUN0cmw6R3IsZm9yd2FyZFRvQ29udGV4dDptcn09SnRbdm5dO2lmKCEwPT09dG4oQmUpKXtpZihjZT1HcixkdD0hMT09PUNuKEJlLHFlKSxjZT0hMSxNbiYm''@;'; put 'put ''QmUucHJldmVudERlZmF1bHQoKSxDciYmKEIyKEJlKSxCZS5zdG9wUHJvcGFnYXRpb24oKSksZHQpYnJlYWs7bXImJmJlKEJlLHFlLG1yKX19cmV0dXJuIGR0fSxFZT1mdW5jdGlvbiBLcnQoYyxsLGEsZCxoKXtjb25zdCBmPUVlPT4kcnQuaW5jbHVkZXMoRWUpLHY9ZnVuY3Rpb24oRWUpe2xl''@;'; put 'put ''dCBCZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IHFlPVtdO3JldHVybiBFZS5hbHRLZXkmJnFlLnB1c2goImFsdCIpLEJlJiYoRWUuY3RybEtleXx8RWUubWV0YUtleSk/cWUucHVzaCgiY29udHJvbC9tZXRhIik6KEVlLmN0''@;'; put 'put ''cmxLZXkmJnFlLnB1c2goImNvbnRyb2wiKSxFZS5tZXRhS2V5JiZxZS5wdXNoKCJtZXRhIikpLEVlLnNoaWZ0S2V5JiZxZS5wdXNoKCJzaGlmdCIpLHFlfSxNPUVlPT57aWYoITE9PT1sKEVlKXx8ITE9PT1hKEVlKXx8MjI5PT09RWUua2V5Q29kZXx8InN0cmluZyIhPXR5cGVvZiBFZS5rZXl8''@;'; put 'put ''fEZtKEVlKSlyZXR1cm47Y29uc3QgcWU9QVgoRWUpO2xldCBydD1bXTtmKHFlKXx8KHJ0PXYoRWUpKTtjb25zdCBwdD1bcWVdLmNvbmNhdChydCk7IWgoRWUscHQpJiYoek8oKSYmcnQuaW5jbHVkZXMoIm1ldGEiKXx8IXpPKCkmJnJ0LmluY2x1ZGVzKCJjb250cm9sIikpJiZoKEVlLFtxZV0u''@;'; put 'put ''Y29uY2F0KHYoRWUsITApKSksZChFZSl9LEQ9RWU9PntpZigic3RyaW5nIj09dHlwZW9mIEVlLmtleSl7Y29uc3QgQmU9QVgoRWUpO2YoQmUpJiZpVC5wcmVzcyhCZSl9fSxaPUVlPT57aWYoInN0cmluZyI9PXR5cGVvZiBFZS5rZXkpe2NvbnN0IEJlPUFYKEVlKTtmKEJlKSYmaVQucmVsZWFz''@;'; put 'put ''ZShCZSl9fSxyZT0oKT0+e2lULnJlbGVhc2VBbGwoKX07cmV0dXJue21vdW50OigpPT57bGV0IEVlPWM7Zm9yKE5QKz0xO0VlOykxPT09TlAmJihFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsRCksYVQucHVzaCh7ZXZlbnQ6ImtleWRvd24i''@;'; put 'put ''LGxpc3RlbmVyOkR9KSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLFopLGFULnB1c2goe2V2ZW50OiJrZXl1cCIsbGlzdGVuZXI6Wn0pKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTSks''@;'; put 'put ''RWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHJlKSxFZT1CNyhFZSl9LHVubW91bnQ6KCk9PntsZXQgRWU9Yztmb3IoTlAtPTE7RWU7KXtpZigwPT09TlApe2ZvcihsZXQgQmU9MDtCZTxhVC5sZW5ndGg7QmUrKyl7Y29uc3R7ZXZlbnQ6cWUsbGlz''@;'; put 'put ''dGVuZXI6cnR9PWFUW0JlXTtFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihxZSxydCl9YVQubGVuZ3RoPTB9RWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLE0pLEVlLmRvY3VtZW50LmRvY3VtZW50''@;'; put 'put ''RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixyZSksRWU9QjcoRWUpfX0saXNQcmVzc2VkOkVlPT5pVC5pc1ByZXNzZWQoRWUpLHJlbGVhc2VQcmVzc2VkS2V5czooKT0+aVQucmVsZWFzZUFsbCgpfX0obCxhLGQsaCxiZSk7cmV0dXJuIEVlLm1vdW50KCkse2FkZENvbnRleHQ6''@;'; put 'put ''QmU9Pntjb25zdCBxZT0oYz0+e2NvbnN0IGw9Sk8oe2Vycm9ySWRFeGlzdHM6RD0+YFRoZSAiJHtEfSIgc2hvcnRjdXQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGluIHRoZSAiJHtjfSIgY29udGV4dC5gfSksYT1mdW5jdGlvbigpe2xldHtrZXlzOkQsY2FsbGJhY2s6Wixncm91cDpyZSxydW5P''@;'; put 'put ''bmx5SWY6Y2U9KCgpPT4hMCksY2FwdHVyZUN0cmw6YmU9ITEscHJldmVudERlZmF1bHQ6RWU9ITAsc3RvcFByb3BhZ2F0aW9uOkJlPSExLHJlbGF0aXZlVG9Hcm91cDpxZSxwb3NpdGlvbjpydCxmb3J3YXJkVG9Db250ZXh0OnB0fT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1swXT9hcmd1bWVudHNbMF06e307aWYoX2MocmUpKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gZGVmaW5lIHRoZSBzaG9ydGN1dCdzIGdyb3VwLiIpO2lmKCExPT09bWwoWikpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2hvcnRjdXQncyBjYWxsYmFjayBuZWVkcyB0byBiZSBhIGZ1''@;'; put 'put ''bmN0aW9uLiIpO2lmKCExPT09QXJyYXkuaXNBcnJheShEKSl0aHJvdyBuZXcgRXJyb3IoZ2xgUGFzcyB0aGUgc2hvcnRjdXRcJ3Mga2V5cyBhcyBhbiBhcnJheSBvZiBhcnJheXMsXHgyMAogICAgICB1c2luZyB0aGUgS2V5Ym9hcmRFdmVudC5rZXkgcHJvcGVydGllczpceDIwCiAgICAgIGh0''@;'; put 'put ''dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzLmApO2NvbnN0IGR0PXtjYWxsYmFjazpaLGdyb3VwOnJlLHJ1bk9ubHlJZjpjZSxjYXB0dXJlQ3RybDpiZSxwcmV2ZW50RGVmYXVsdDpFZSxzdG9wUHJvcGFn''@;'; put 'put ''YXRpb246QmV9O1BhKHFlKSYmKGR0LnJlbGF0aXZlVG9Hcm91cD1xZSxkdC5wb3NpdGlvbj1ydCksd3BlKHB0KSYmKGR0LmZvcndhcmRUb0NvbnRleHQ9cHQpLEQuZm9yRWFjaChKdD0+e2NvbnN0IHZuPUhQKEp0KTtpZihsLmhhc0l0ZW0odm4pKXtjb25zdCB0bj1sLmdldEl0ZW0odm4pO2xl''@;'; put 'put ''dCBNbj10bi5maW5kSW5kZXgoQ3I9PkNyLmdyb3VwPT09cWUpOy0xIT09TW4/ImJlZm9yZSI9PT1ydD9Nbi09MTpNbis9MTpNbj10bi5sZW5ndGgsdG4uc3BsaWNlKE1uLDAsZHQpfWVsc2UgbC5hZGRJdGVtKHZuLFtkdF0pfSl9LGg9RD0+e2NvbnN0IFo9SFAoRCk7bC5yZW1vdmVJdGVtKFop''@;'; put 'put ''fTtyZXR1cm57X19raW5kT2Y6X3BlLGFkZFNob3J0Y3V0OmEsYWRkU2hvcnRjdXRzOmZ1bmN0aW9uKEQpe2xldCBaPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtELmZvckVhY2gocmU9PntYbyhaLChjZSxiZSk9PnshMT09PU9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZSxiZSkmJihyZVtiZV09WltiZV0pfSksYShyZSl9KX0sZ2V0U2hvcnRjdXRzOkQ9Pntjb25zdCBaPUhQKEQpLHJlPWwuZ2V0SXRlbShaKTtyZXR1cm4gUGEocmUpP3JlLnNsaWNlKCk6W119LGhhc1Nob3J0Y3V0OkQ9Pntjb25zdCBa''@;'; put 'put ''PUhQKEQpO3JldHVybiBsLmhhc0l0ZW0oWil9LHJlbW92ZVNob3J0Y3V0c0J5S2V5czpoLHJlbW92ZVNob3J0Y3V0c0J5R3JvdXA6RD0+e2wuZ2V0SXRlbXMoKS5mb3JFYWNoKHJlPT57bGV0W2NlLGJlXT1yZTtjb25zdCBFZT1iZS5maWx0ZXIoQmU9PkJlLmdyb3VwIT09RCk7MD09PUVlLmxl''@;'; put 'put ''bmd0aD9oKChjPT5jLnNwbGl0KCIrIikpKGNlKSk6KGJlLmxlbmd0aD0wLGJlLnB1c2goLi4uRWUpKX0pfX19KShCZSk7cmV0dXJuIGYuYWRkSXRlbShCZSxxZSkscWV9LGdldEFjdGl2ZUNvbnRleHROYW1lOkQsZ2V0Q29udGV4dDpaLHNldEFjdGl2ZUNvbnRleHROYW1lOkJlPT57aWYoIWYu''@;'; put 'put ''aGFzSXRlbShCZSkpdGhyb3cgbmV3IEVycm9yKGdsYFlvdSd2ZSB0cmllZCB0byBhY3RpdmF0ZSB0aGUgIiR7QmV9IiBzaG9ydGN1dCBjb250ZXh0XHgyMAogICAgICAgIHRoYXQgZG9lcyBub3QgZXhpc3QuIEJlZm9yZSBhY3RpdmF0aW9uLCByZWdpc3RlciB0aGUgY29udGV4dCB1c2luZyB0''@;'; put 'put ''aGUgImFkZENvbnRleHQiIG1ldGhvZC5gKTt2PUJlfSxpc0N0cmxQcmVzc2VkOigpPT4hY2UmJihFZS5pc1ByZXNzZWQoImNvbnRyb2wiKXx8RWUuaXNQcmVzc2VkKCJtZXRhIikpLHJlbGVhc2VQcmVzc2VkS2V5czooKT0+RWUucmVsZWFzZVByZXNzZWRLZXlzKCksZGVzdHJveTooKT0+RWUu''@;'; put 'put ''dW5tb3VudCgpfX0sWHJ0PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmUiLGNhbGxiYWNrKGMpe2MuX2dldEVkaXRvck1hbmFnZXIoKS5jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKCl9fSxDcGU9e19ob29rc1N0b3JhZ2U6T2JqZWN0LmNyZWF0ZShudWxsKSxhZGRIb29rKGMsbCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2hvb2tzU3RvcmFnZVtjXXx8KHRoaXMuX2hvb2tzU3RvcmFnZVtjXT1bXSksdGhpcy5ob3QuYWRkSG9vayhjLGwpLHRoaXMuX2hvb2tzU3RvcmFnZVtjXS5wdXNoKGwpLHRoaXN9LHJlbW92ZUhvb2tzQnlLZXkoYyl7WW4odGhpcy5faG9va3NTdG9yYWdlW2NdfHxbXSxsPT57dGhp''@;'; put 'put ''cy5ob3QucmVtb3ZlSG9vayhjLGwpfSl9LGNsZWFySG9va3MoKXtYbyh0aGlzLl9ob29rc1N0b3JhZ2UsKGMsbCk9PnRoaXMucmVtb3ZlSG9va3NCeUtleShsKSksdGhpcy5faG9va3NTdG9yYWdlPXt9fX07VHAoQ3BlLCJNSVhJTl9OQU1FIiwiaG9va3NSZWZSZWdpc3RlcmVyIix7d3JpdGFi''@;'; put 'put ''bGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFFydD1DcGU7ZnVuY3Rpb24gZDMoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGVpdChjKXt2YXIgbD1mdW5jdGlvbiB0aXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl''@;'; put 'put ''XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/''@;'; put 'put ''U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0''@;'; put 'put ''IGx1PU9iamVjdC5mcmVlemUoe1ZJUkdJTjoiU1RBVEVfVklSR0lOIixFRElUSU5HOiJTVEFURV9FRElUSU5HIixXQUlUSU5HOiJTVEFURV9XQUlUSU5HIixGSU5JU0hFRDoiU1RBVEVfRklOSVNIRUQifSk7Y2xhc3Mga197c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJiYXNlIn1j''@;'; put 'put ''b25zdHJ1Y3RvcihsKXtkMyh0aGlzLCJob3QiLHZvaWQgMCksZDModGhpcywic3RhdGUiLGx1LlZJUkdJTiksZDModGhpcywiX29wZW5lZCIsITEpLGQzKHRoaXMsIl9mdWxsRWRpdE1vZGUiLCExKSxkMyh0aGlzLCJfY2xvc2VDYWxsYmFjayIsbnVsbCksZDModGhpcywiVEQiLG51bGwpLGQz''@;'; put 'put ''KHRoaXMsInJvdyIsbnVsbCksZDModGhpcywiY29sIixudWxsKSxkMyh0aGlzLCJwcm9wIixudWxsKSxkMyh0aGlzLCJvcmlnaW5hbFZhbHVlIixudWxsKSxkMyh0aGlzLCJjZWxsUHJvcGVydGllcyIsbnVsbCksdGhpcy5ob3Q9bCx0aGlzLmluaXQoKX1fZmlyZUNhbGxiYWNrcyhsKXt0aGlz''@;'; put 'put ''Ll9jbG9zZUNhbGxiYWNrJiYodGhpcy5fY2xvc2VDYWxsYmFjayhsKSx0aGlzLl9jbG9zZUNhbGxiYWNrPW51bGwpfWluaXQoKXt9Z2V0VmFsdWUoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGdldFZhbHVlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1zZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJF''@;'; put 'put ''ZGl0b3Igc2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfW9wZW4oKXt0aHJvdyBFcnJvcigiRWRpdG9yIG9wZW4oKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfWNsb3NlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBjbG9zZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9cHJlcGFyZShs''@;'; put 'put ''LGEsZCxoLGYsdil7dGhpcy5URD1oLHRoaXMucm93PWwsdGhpcy5jb2w9YSx0aGlzLnByb3A9ZCx0aGlzLm9yaWdpbmFsVmFsdWU9Zix0aGlzLmNlbGxQcm9wZXJ0aWVzPXYsdGhpcy5zdGF0ZT10aGlzLmlzT3BlbmVkKCk/dGhpcy5zdGF0ZTpsdS5WSVJHSU59ZXh0ZW5kKCl7cmV0dXJuIGNs''@;'; put 'put ''YXNzIGV4dGVuZHMgdGhpcy5jb25zdHJ1Y3Rvcnt9fXNhdmVWYWx1ZShsLGEpe2xldCBkLGgsZix2O2lmKGEpe2NvbnN0IEQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7ZD1NYXRoLm1heChNYXRoLm1pbihEWzBdLERbMl0pLDApLGg9TWF0aC5tYXgoTWF0aC5taW4oRFsxXSxEWzNdKSww''@;'; put 'put ''KSxmPU1hdGgubWF4KERbMF0sRFsyXSksdj1NYXRoLm1heChEWzFdLERbM10pfWVsc2VbZCxoLGYsdl09W3RoaXMucm93LHRoaXMuY29sLG51bGwsbnVsbF07Y29uc3QgTT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsZCxoLCExLCJtZXRhIik7QXJyYXkuaXNBcnJh''@;'; put 'put ''eShNKSYmKFtkLGhdPU0pLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGQsaCxsLGYsdiwiZWRpdCIpfWJlZ2luRWRpdGluZyhsLGEpe2lmKHRoaXMuc3RhdGUhPT1sdS5WSVJHSU4pcmV0dXJuO2NvbnN0IGQ9dGhpcy5ob3QsaD1kLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9t''@;'; put 'put ''VmlzdWFsSW5kZXgodGhpcy5yb3cpLGY9ZC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMuY29sKSx2PSgpPT57aWYodGhpcy5zdGF0ZT1sdS5FRElUSU5HLHRoaXMuaXNJbkZ1bGxFZGl0TW9kZSgpKXtjb25zdCBEPSJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''bD9sOmxjKHRoaXMub3JpZ2luYWxWYWx1ZSk7dGhpcy5zZXRWYWx1ZShEKX10aGlzLm9wZW4oYSksdGhpcy5fb3BlbmVkPSEwLHRoaXMuZm9jdXMoKSxkLnZpZXcucmVuZGVyKCksZC5ydW5Ib29rcygiYWZ0ZXJCZWdpbkVkaXRpbmciLHRoaXMucm93LHRoaXMuY29sKX07dGhpcy5ob3QuYWRk''@;'; put 'put ''SG9va09uY2UoImFmdGVyU2Nyb2xsIix2KSxkLnZpZXcuc2Nyb2xsVmlld3BvcnQoZC5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKXx8KHRoaXMuaG90LnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsIix2KSx2KCkpfWZpbmlzaEVkaXRpbmcobCxhLGQpe2xldCBoO2lmKGQpe2NvbnN0IGY9dGhpcy5f''@;'; put 'put ''Y2xvc2VDYWxsYmFjazt0aGlzLl9jbG9zZUNhbGxiYWNrPXY9PntmJiZmKHYpLGQodiksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX19aWYoIXRoaXMuaXNXYWl0aW5nKCkpe2lmKHRoaXMuc3RhdGU9PT1sdS5WSVJHSU4pcmV0dXJuIHZvaWQgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+''@;'; put 'put ''e3RoaXMuX2ZpcmVDYWxsYmFja3MoITApfSk7aWYodGhpcy5zdGF0ZT09PWx1LkVESVRJTkcpe2lmKGwpcmV0dXJuIHRoaXMuY2FuY2VsQ2hhbmdlcygpLHZvaWQgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTtjb25zdCBmPXRoaXMuZ2V0VmFsdWUoKTtoPXRoaXMuY2VsbFByb3BlcnRpZXMudHJp''@;'; put 'put ''bVdoaXRlc3BhY2U/W1sic3RyaW5nIj09dHlwZW9mIGY/U3RyaW5nLnByb3RvdHlwZS50cmltLmNhbGwoZnx8IiIpOmZdXTpbW2ZdXSx0aGlzLnN0YXRlPWx1LldBSVRJTkcsdGhpcy5zYXZlVmFsdWUoaCxhKSx0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMp''@;'; put 'put ''P3RoaXMuaG90LmFkZEhvb2tPbmNlKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsdj0+e3RoaXMuc3RhdGU9bHUuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKHYpfSk6KHRoaXMuc3RhdGU9bHUuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKCEwKSl9fX1jYW5jZWxDaGFuZ2VzKCl7dGhpcy5z''@;'; put 'put ''dGF0ZT1sdS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoKX1kaXNjYXJkRWRpdG9yKGwpe3RoaXMuc3RhdGU9PT1sdS5GSU5JU0hFRCYmKCExPT09bCYmITAhPT10aGlzLmNlbGxQcm9wZXJ0aWVzLmFsbG93SW52YWxpZD8odGhpcy5ob3Quc2VsZWN0Q2VsbCh0aGlzLnJvdyx0aGlzLmNv''@;'; put 'put ''bCksdGhpcy5mb2N1cygpLHRoaXMuc3RhdGU9bHUuRURJVElORyx0aGlzLl9maXJlQ2FsbGJhY2tzKCExKSk6KHRoaXMuY2xvc2UoKSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5fZnVsbEVkaXRNb2RlPSExLHRoaXMuc3RhdGU9bHUuVklSR0lOLHRoaXMuX2ZpcmVDYWxsYmFja3MoITApLHRoaXMu''@;'; put 'put ''aG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIikpKX1lbmFibGVGdWxsRWRpdE1vZGUoKXt0aGlzLl9mdWxsRWRpdE1vZGU9ITB9aXNJbkZ1bGxFZGl0TW9kZSgpe3JldHVybiB0aGlzLl9mdWxsRWRpdE1vZGV9aXNPcGVuZWQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fb3BlbmVkfWlzV2FpdGluZygpe3JldHVybiB0aGlzLnN0YXRlPT09bHUuV0FJVElOR31nZXRFZGl0ZWRDZWxsUmVjdCgpe3ZhciBsO2NvbnN0IGE9dGhpcy5nZXRFZGl0ZWRDZWxsKCk7aWYoIWEpcmV0dXJuO2NvbnN0e3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuaG90LnZp''@;'; put 'put ''ZXcuX3d0LGY9dGhpcy5ob3Qucm9vdFdpbmRvdyx2PVUwKGEpLE09c3UoYSksRD1VMCh0aGlzLmhvdC5yb290RWxlbWVudCksWj1zdSh0aGlzLmhvdC5yb290RWxlbWVudCkscmU9ZC50b3BPdmVybGF5LmhvbGRlcixjZT1kLmlubGluZVN0YXJ0T3ZlcmxheS5ob2xkZXIsYmU9cmUhPT1mP3Jl''@;'; put 'put ''LnNjcm9sbFRvcDowLEVlPWNlIT09Zj9jZS5zY3JvbGxMZWZ0OjAsQmU9Zi5pbm5lcldpZHRoLUQubGVmdC1aLHt3dFRhYmxlOnFlfT1udWxsIT09KGw9ZC5nZXRQYXJlbnRPdmVybGF5KGEpKSYmdm9pZCAwIT09bD9sOnRoaXMuaG90LnZpZXcuX3d0LHJ0PXFlLm5hbWUscHQ9WyJtYXN0ZXIi''@;'; put 'put ''LCJpbmxpbmVfc3RhcnQiXS5pbmNsdWRlcyhydCk/YmU6MCxkdD1bIm1hc3RlciIsInRvcCIsImJvdHRvbSJdLmluY2x1ZGVzKHJ0KT9FZTowO2xldCB2bj12LnRvcC1ELnRvcC0odi50b3A9PT1ELnRvcD8wOjEpLXB0LENuPTA7Q249dGhpcy5ob3QuaXNSdGwoKT9mLmlubmVyV2lkdGgtdi5s''@;'; put 'put ''ZWZ0LU0tQmUtMStkdDp2LmxlZnQtRC5sZWZ0LTEtZHQsWyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHJ0KSYmKHZuKz1kLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSxbImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5j''@;'; put 'put ''bHVkZXMocnQpJiYoQ24rPU1hdGguYWJzKGQuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSkpO2NvbnN0IHRuPXRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKSxNbj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMucm93''@;'; put 'put ''KSxDcj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMuY29sKSxtcj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkUm93''@;'; put 'put ''c0JvdHRvbSIpOyh0biYmTW48PTB8fE1uPT09bXIpJiYodm4rPTEpLENyPD0wJiYoQ24rPTEpO2NvbnN0IEduPWgucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbixhaT1oLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24sX2k9TWF0aC5hYnMoZC5pbmxpbmVT''@;'; put 'put ''dGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSksT249ZC50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksenI9ZjAodGhpcy5ob3Qucm9vdERvY3VtZW50KTtsZXQgSm49YS5vZmZzZXRUb3A7aWYoWyJpbmxpbmVfc3RhcnQiLCJtYXN0ZXIiXS5pbmNsdWRlcyhydCkmJihKbis9''@;'; put 'put ''R24tT24pLFsiYm90dG9tIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhydCkpe2NvbnN0e3d0Vmlld3BvcnQ6SHIsd3RUYWJsZTpxcn09ZC5ib3R0b21PdmVybGF5LmNsb25lO0puKz1Ici5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1xci5nZXRIZWlnaHQoKS16cn1sZXQg''@;'; put 'put ''SXI9YS5vZmZzZXRMZWZ0O3RoaXMuaG90LmlzUnRsKCk/KElyPUlyPj0wP3FlLmdldFdpZHRoKCktYS5vZmZzZXRMZWZ0Ok1hdGguYWJzKElyKSxJcis9YWktX2ktTSk6WyJ0b3AiLCJtYXN0ZXIiLCJib3R0b20iXS5pbmNsdWRlcyhydCkmJihJcis9YWktX2kpO2NvbnN0ICRyPWYuZ2V0Q29t''@;'; put 'put ''cHV0ZWRTdHlsZSh0aGlzLlREKSx3aT10aGlzLmhvdC5pc1J0bCgpPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIixlYT1wYXJzZUludCgkclt3aV0sMTApPjA/MDoxLGZhPXBhcnNlSW50KCRyLmJvcmRlclRvcFdpZHRoLDEwKT4wPzA6MSx2dD1zdShhKStlYSxOdD14dShh''@;'; put 'put ''KStmYSxIdD1FJChyZSk/enI6MCxIbj1UJChjZSk/enI6MCx0cj10aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKElyKS1IdCtlYTtyZXR1cm57dG9wOnZuLHN0YXJ0OkNuLGhlaWdodDpOdCxtYXhIZWlnaHQ6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlz''@;'; put 'put ''aWJsZUVsZW1lbnRIZWlnaHQoSm4pLUhuK2ZhLHRoaXMuaG90LnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKSx3aWR0aDp2dCxtYXhXaWR0aDp0cn19Z2V0RWRpdGVkQ2VsbHNMYXllckNsYXNzKCl7c3dpdGNoKHRoaXMuY2hlY2tFZGl0b3JTZWN0aW9uKCkpe2Nhc2UiaW5saW5lLXN0YXJ0''@;'; put 'put ''IjpyZXR1cm4iaHRfY2xvbmVfbGVmdCBodF9jbG9uZV9pbmxpbmVfc3RhcnQiO2Nhc2UiYm90dG9tIjpyZXR1cm4iaHRfY2xvbmVfYm90dG9tIjtjYXNlImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyIGh0X2Nsb25lX2JvdHRv''@;'; put 'put ''bV9pbmxpbmVfc3RhcnRfY29ybmVyIjtjYXNlInRvcCI6cmV0dXJuImh0X2Nsb25lX3RvcCI7Y2FzZSJ0b3AtaW5saW5lLXN0YXJ0LWNvcm5lciI6cmV0dXJuImh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lciBodF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciI7ZGVmYXVsdDpyZXR1cm4i''@;'; put 'put ''aHRfY2xvbmVfbWFzdGVyIn19Z2V0RWRpdGVkQ2VsbCgpe3JldHVybiB0aGlzLmhvdC5nZXRDZWxsKHRoaXMucm93LHRoaXMuY29sLCEwKX1jaGVja0VkaXRvclNlY3Rpb24oKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygpO2xldCBhPSIiO3JldHVybiB0aGlzLnJvdzx0aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcD9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/InRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjoidG9wIjp0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSYmdGhpcy5yb3c+PWwtdGhp''@;'; put 'put ''cy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20/YT10aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PyJib3R0b20taW5saW5lLXN0YXJ0LWNvcm5lciI6ImJvdHRvbSI6dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENv''@;'; put 'put ''bHVtbnNTdGFydCYmKGE9ImlubGluZS1zdGFydCIpLGF9fVRsKGtfLFFydCk7Y29uc3Qgcml0PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmVCeUFycm93S2V5cyIsY2FsbGJhY2soYyxsLGEpe2NvbnN0IGQ9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpLGg9ZC5nZXRBY3RpdmVFZGl0b3IoKTtoLmlz''@;'; put 'put ''SW5GdWxsRWRpdE1vZGUoKSYmaC5zdGF0ZT09PWx1LkVESVRJTkd8fChkLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMoKSxjLmdldFNlbGVjdGVkKCkmJihhLmluY2x1ZGVzKCJhcnJvd2Rvd24iKT9jLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgxLDApOmEuaW5jbHVkZXMoImFycm93dXAi''@;'; put 'put ''KT9jLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtMSwwKTphLmluY2x1ZGVzKCJhcnJvd2xlZnQiKT9jLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLC0xKmMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpOmEuaW5jbHVkZXMoImFycm93cmlnaHQiKSYmYy5zZWxlY3Rpb24udHJhbnNmb3JtU3Rh''@;'; put 'put ''cnQoMCxjLmdldERpcmVjdGlvbkZhY3RvcigpKSksbC5wcmV2ZW50RGVmYXVsdCgpKX19LGlpdD17bmFtZToiZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlciIsY2FsbGJhY2soYyxsKXtjb25zdCBhPWMuX2dldEVkaXRvck1hbmFnZXIoKTthLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMobC5j''@;'; put 'put ''dHJsS2V5fHxsLm1ldGFLZXkpLGEubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCl9fSxhaXQ9e25hbWU6ImVkaXRvckNsb3NlV2l0aG91dFNhdmluZyIsY2FsbGJhY2soYyl7Y29uc3QgbD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCk7bC5jbG9zZUVkaXRvckFuZFJlc3RvcmVPcmlnaW5hbFZhbHVl''@;'; put 'put ''KGMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpKSxsLmFjdGl2ZUVkaXRvci5mb2N1cygpfX0sb2l0PXtuYW1lOiJlZGl0b3JGYXN0T3BlbiIsY2FsbGJhY2soYyxsKXtjb25zdHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2EuaXNIZWFkZXIoKXx8''@;'; put 'put ''Yy5fZ2V0RWRpdG9yTWFuYWdlcigpLm9wZW5FZGl0b3IobnVsbCxsLCEwKX19LHNpdD17bmFtZToiZWRpdG9yT3BlbiIsY2FsbGJhY2soYyxsLGEpe2NvbnN0IGQ9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpLGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtoaWdobGlnaHQ6Zn09aDtpZihjLnNl''@;'; put 'put ''bGVjdGlvbi5pc011bHRpcGxlKCkmJiFoLmlzSGVhZGVyKCkmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wJiZjLmNvdW50UmVuZGVyZWRSb3dzKCk+MCl7Y29uc3Qgdj1jLmdldFNldHRpbmdzKCksTT0iZnVuY3Rpb24iPT10eXBlb2Ygdi5lbnRlck1vdmVzP3YuZW50ZXJNb3ZlcyhsKTp2LmVu''@;'; put 'put ''dGVyTW92ZXM7YS5pbmNsdWRlcygic2hpZnQiKT9jLnNlbGVjdGlvbi50cmFuc2Zvcm1Gb2N1cygtTS5yb3csLU0uY29sKTpjLnNlbGVjdGlvbi50cmFuc2Zvcm1Gb2N1cyhNLnJvdyxNLmNvbCl9ZWxzZSBmLmlzSGVhZGVyKCl8fChjLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5n''@;'; put 'put ''P2QuY2VsbFByb3BlcnRpZXMucmVhZE9ubHk/ZC5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKTpkLm9wZW5FZGl0b3IobnVsbCxsLCEwKTpkLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGwpLEIyKGwpKX19LGNpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duIixjYWxsYmFjayhj''@;'; put 'put ''KXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTshbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVh''@;'; put 'put ''ZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKDEsMCksbC5tYXJrRW5kU291cmNlKCkpfX0sdWl0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRl''@;'; put 'put ''eE1hcHBlcjphfT1jLHt0bzpkfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1NYXRoLm1pbihkLnJvdytjLmNvdW50VmlzaWJsZVJvd3MoKSxjLmNvdW50Um93cygpLTEpLGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaCwtMSk7aWYobnVsbCE9PWYpe2NvbnN0IHY9Yy5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhmLGQuY29sKSxNPWQucm93LWMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxEPU1hdGgubWluKHYucm93LU0sYy5jb3VudFJvd3MoKS0xKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZUVuZCh2KSxsLm1hcmtFbmRTb3VyY2UoKSxjLnNjcm9sbFZpZXdw''@;'; put 'put ''b3J0VG8oe3JvdzpELHZlcnRpY2FsU25hcDoidG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0sZGl0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvbkxlZnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFz''@;'; put 'put ''dCgpOyFsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGEuaXNDZWxsKCl8fGEuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSkmJihsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1FbmQoMCwtMSpjLmdl''@;'; put 'put ''dERpcmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKSl9fSxoaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uUmlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpOyFsLmlzU2VsZWN0ZWRC''@;'; put 'put ''eVJvd0hlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGEuaXNDZWxsKCl8fGEuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSkmJihsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1FbmQoMCxjLmdldERpcmVjdGlvbkZhY3RvcigpKSxs''@;'; put 'put ''Lm1hcmtFbmRTb3VyY2UoKSl9fSxmaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Db2x1bW5zIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmEsZnJvbTpkLHRvOmh9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtsLm1hcmtTb3VyY2UoImtleWJv''@;'; put 'put ''YXJkIiksbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKT9sLnNlbGVjdEFsbCghMCwhMCk6Yy5zZWxlY3RDb2x1bW5zKGQuY29sLGguY29sLGEpLGwubWFya0VuZFNvdXJjZSgpfX0scGl0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdEJvdHRvbSIsY2FsbGJhY2soYyl7Y29uc3R7''@;'; put 'put ''c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5v''@;'; put 'put ''dEhpZGRlbkluZGV4KGMuY291bnRSb3dzKCktMSwtMSksRD1oLmNsb25lKCk7RC5yb3c9ZC5yb3csbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQobC5nZXRMYXllckxldmVs''@;'; put 'put ''KCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhNLGYuY29sKSksbC5tYXJrRW5kU291cmNlKCl9fX0sZ2l0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGluZUVuZCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6''@;'; put 'put ''YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJmQuaXNDZWxsKCkpe2NvbnN0IHY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3Vu''@;'; put 'put ''dENvbHMoKS0xLC0xKSxNPWguY2xvbmUoKTtNLmNvbD1kLmNvbCxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KE0sdm9pZCAwLCExLGQuY2xvbmUoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LHYpKSxsLm1hcmtFbmRTb3VyY2UoKX19''@;'; put 'put ''fSxtaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwuaXNT''@;'; put 'put ''ZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZkLmlzQ2VsbCgpKXtjb25zdCB2PXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LDEpLEQ9aC5jbG9uZSgpO0QuY29s''@;'; put 'put ''PWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csTSkpLGwubWFya0VuZFNvdXJjZSgpfX19LHZpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rp''@;'; put 'put ''b25Ub01vc3RMZWZ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO2lm''@;'; put 'put ''KGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1tjLmNvdW50Q29scygpLTEsLTFdOlswLDFdKSxEPWguY2xvbmUoKTtELmNvbD1kLmNvbCxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAw''@;'; put 'put ''LCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxiaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9N''@;'; put 'put ''b3N0UmlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7aWYoZC5p''@;'; put 'put ''c0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlzUnRsKCk/WzAsMV06W2MuY291bnRDb2xzKCktMSwtMV0pLEQ9aC5jbG9uZSgpO0QuY29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEs''@;'; put 'put ''ZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csTSkpLGwubWFya0VuZFNvdXJjZSgpfX19LHlpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RU''@;'; put 'put ''b3AiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7''@;'; put 'put ''Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpLEQ9aC5jbG9uZSgpO0Qucm93PWQucm93LGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKGwuZ2V0TGF5''@;'; put 'put ''ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoTSxmLmNvbCkpLGwubWFya0VuZFNvdXJjZSgpfX19LF9pdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub1Jvd3MiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YSxmcm9t''@;'; put 'put ''OmQsdG86aH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpP2wuc2VsZWN0QWxsKCEwLCEwKTpjLnNlbGVjdFJvd3MoZC5yb3csaC5yb3csYSksbC5tYXJrRW5kU291cmNlKCl9fSx3aXQ9e25hbWU6''@;'; put 'put ''ImV4dGVuZENlbGxzU2VsZWN0aW9uVXAiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpOyFsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGEuaXNDZWxsKCl8''@;'; put 'put ''fGEuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkmJihsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1FbmQoLTEsMCksbC5tYXJrRW5kU291cmNlKCkpfX0sQ2l0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdodCIsY2Fs''@;'; put 'put ''bGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7dG86ZH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGg9TWF0aC5tYXgoZC5yb3ctYy5jb3VudFZpc2libGVSb3dzKCksMCksZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLDEpO2lmKG51bGwhPT1m''@;'; put 'put ''KXtjb25zdCB2PWMuX2NyZWF0ZUNlbGxDb29yZHMoZixkLmNvbCksTT1kLnJvdy1jLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksRD1NYXRoLm1heCh2LnJvdy1NLDApO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlRW5kKHYpLGwubWFya0VuZFNvdXJjZSgpLGMuc2Nyb2xs''@;'; put 'put ''Vmlld3BvcnRUbyh7cm93OkQsdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJzdGFydCJ9KX19fSxNaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uRG93biIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9y''@;'; put 'put ''bVN0YXJ0KDEsMCksbC5tYXJrRW5kU291cmNlKCl9fSx4aXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtuYXZpZ2FibGVIZWFkZXJzOmF9PWMuZ2V0U2V0dGluZ3MoKSxkPWE/Yy5jb3VudENv''@;'; put 'put ''bEhlYWRlcnMoKTowLHtyb3c6aH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgZj1jLmNvdW50VmlzaWJsZVJvd3MoKStkO2Y9MD09PWY/MTpmLGg9PT1jLmNvdW50Um93cygpLTE/Zj0xOmgrZj5jLmNvdW50Um93cygpJiYoZj1jLmNvdW50Um93cygpLWgtMSksbC5t''@;'; put 'put ''YXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoZiwwKSxsLm1hcmtFbmRTb3VyY2UoKSxjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdzwwJiZjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzowfSl9fSxFaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uSW5s''@;'; put 'put ''aW5lRW5kIixjYWxsYmFjayhjLGwpe2NvbnN0e3NlbGVjdGlvbjphfT1jLGQ9Yy5nZXRTZXR0aW5ncygpLGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9ImZ1bmN0aW9uIj09dHlwZW9mIGQudGFiTW92ZXM/ZC50YWJNb3ZlcyhsKTpkLnRhYk1vdmVzO2EubWFya1NvdXJjZSgia2V5Ym9h''@;'; put 'put ''cmQiKSxhLmlzTXVsdGlwbGUoKSYmIWguaXNIZWFkZXIoKSYmYy5jb3VudFJlbmRlcmVkQ29scygpPjAmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wP2EudHJhbnNmb3JtRm9jdXMoLWYucm93LC1mLmNvbCk6YS50cmFuc2Zvcm1TdGFydCgtZi5yb3csLWYuY29sKSxhLm1hcmtFbmRTb3VyY2Uo''@;'; put 'put ''KX19LFRpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVTdGFydCIsY2FsbGJhY2soYyxsKXtjb25zdHtzZWxlY3Rpb246YX09YyxkPWMuZ2V0U2V0dGluZ3MoKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxmPSJmdW5jdGlvbiI9PXR5cGVvZiBkLnRhYk1vdmVzP2QudGFiTW92''@;'; put 'put ''ZXMobCk6ZC50YWJNb3ZlczthLm1hcmtTb3VyY2UoImtleWJvYXJkIiksYS5pc011bHRpcGxlKCkmJiFoLmlzSGVhZGVyKCkmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wJiZjLmNvdW50UmVuZGVyZWRSb3dzKCk+MD9hLnRyYW5zZm9ybUZvY3VzKGYucm93LGYuY29sKTphLnRyYW5zZm9ybVN0''@;'; put 'put ''YXJ0KGYucm93LGYuY29sKSxhLm1hcmtFbmRTb3VyY2UoKX19LEFpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25MZWZ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgwLC0xKmMuZ2V0RGlyZWN0aW9u''@;'; put 'put ''RmFjdG9yKCkpLGwubWFya0VuZFNvdXJjZSgpfX0sa2l0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkp''@;'; put 'put ''LGwubWFya0VuZFNvdXJjZSgpfX0sRGl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbSIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2NvbDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBkPWMucm93SW5kZXhNYXBwZXIuZ2V0''@;'; put 'put ''TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRSb3dzKCktMSwtMSk7bnVsbD09PWQmJihkPS0xKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhkLGEpKX19LElpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b21JbmxpbmVFbmQiLGNhbGxiYWNrKGMp''@;'; put 'put ''e2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09YyxoPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sMTApLGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS1oLTEsLTEpLHY9ZC5nZXRO''@;'; put 'put ''ZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudENvbHMoKS0xLC0xKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSksbC5tYXJrRW5kU291cmNlKCl9fSxSaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5s''@;'; put 'put ''aW5lRW5kIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyxhLmdl''@;'; put 'put ''dE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Q29scygpLTEsLTEpKSksbC5tYXJrRW5kU291cmNlKCl9fSxMaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMs''@;'; put 'put ''ZD1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3csZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLDEpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQo''@;'; put 'put ''Yy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKSxsLm1hcmtFbmRTb3VyY2UoKX19LE9pdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RMZWZ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLGQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgp''@;'; put 'put ''LmhpZ2hsaWdodC5yb3c7bGV0IGg9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1tjLmNvdW50Q29scygpLTEsLTFdOlswLDFdKTtudWxsPT09aCYmKGg9Yy5pc1J0bCgpPy0xOi1jLmNvdW50Um93SGVhZGVycygpKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5z''@;'; put 'put ''ZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKSksbC5tYXJrRW5kU291cmNlKCl9fSxQaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0UmlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse3JvdzpkfT1jLmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBoPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmMuaXNSdGwoKT9bMCwxXTpbYy5jb3VudENvbHMoKS0xLC0xXSk7bnVsbD09PWgmJihoPWMuaXNSdGwoKT8tYy5jb3VudFJvd0hlYWRlcnMoKTotMSksbC5tYXJrU291cmNl''@;'; put 'put ''KCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGQsaCkpLGwubWFya0VuZFNvdXJjZSgpfX0sRml0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRvcCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2NvbDphfT1jLmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBkPWMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSk7bnVsbD09PWQmJihkPS1jLmNvdW50Q29sSGVhZGVycygpKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMoZCxhKSksbC5tYXJrRW5kU291cmNlKCl9fSxIaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09YyxoPXBhcnNlSW50''@;'; put 'put ''KGMuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3AsMTApLGY9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSx2PWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsMSksTT1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLDEpO2wubWFya1NvdXJjZSgi''@;'; put 'put ''a2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3Jkcyh2LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19LE5pdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25VcCIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRy''@;'; put 'put ''YW5zZm9ybVN0YXJ0KC0xLDApLGwubWFya0VuZFNvdXJjZSgpfX0sVml0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblVwQnlWaWV3cG9ydEhpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7bmF2aWdhYmxlSGVhZGVyczphfT1jLmdldFNldHRpbmdzKCksZD1hP2MuY291''@;'; put 'put ''bnRDb2xIZWFkZXJzKCk6MCx7cm93Omh9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGY9Yy5jb3VudFZpc2libGVSb3dzKCkrZDtmPTA9PT1mPy0xOi1mLGg9PT0tZD9mPS0xOmgrZjxkJiYoZj0tKGgrZCkpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5z''@;'; put 'put ''Zm9ybVN0YXJ0KGYsMCksbC5tYXJrRW5kU291cmNlKCksYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3c8MCYmYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6MH0pfX0saml0PXtuYW1lOiJlbXB0eVNlbGVjdGVkQ2VsbHMiLGNhbGxiYWNrKGMpe2MuZW1wdHlTZWxlY3RlZENl''@;'; put 'put ''bGxzKCksYy5fZ2V0RWRpdG9yTWFuYWdlcigpLnByZXBhcmVFZGl0b3IoKX19LHppdD17bmFtZToic2Nyb2xsVG9Gb2N1c2VkQ2VsbCIsY2FsbGJhY2soYyl7Y29uc3R7aGlnaGxpZ2h0Omx9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKS0x''@;'; put 'put ''LGQ9Yy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLTEsaD1jLmdldExhc3RGdWxseVZpc2libGVSb3coKSsxLGY9Yy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCkrMSx2PWMuX2NyZWF0ZUNlbGxDb29yZHMoYSxkKSxNPWMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKTtpZighYy5fY3Jl''@;'; put 'put ''YXRlQ2VsbFJhbmdlKHYsdixNKS5pbmNsdWRlcyhsKSYmKGwucm93Pj0wfHxsLmNvbD49MCkpe2NvbnN0IFo9e307aWYobC5jb2w+PTApe2NvbnN0IHJlPU1hdGguZmxvb3IoYy5jb3VudFZpc2libGVDb2xzKCkvMik7Wi5jb2w9TWF0aC5tYXgobC5jb2wtcmUsMCl9aWYobC5yb3c+PTApe2Nv''@;'; put 'put ''bnN0IHJlPU1hdGguZmxvb3IoYy5jb3VudFZpc2libGVSb3dzKCkvMik7Wi5yb3c9TWF0aC5tYXgobC5yb3ctcmUsMCl9Yy5zY3JvbGxWaWV3cG9ydFRvKHsuLi5aLHZlcnRpY2FsU25hcDoidG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0sVWl0PXtuYW1lOiJzZWxlY3RBbGxDZWxs''@;'; put 'put ''cyIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITB9KSxsLm1hcmtFbmRTb3VyY2UoKX19LFppdD17bmFtZToic2VsZWN0QWxsQ2VsbHNBbmRIZWFkZXJzIixj''@;'; put 'put ''YWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMX0pLGwubWFya0VuZFNvdXJjZSgpfX0sV2l0PXtuYW1lOiJwb3B1bGF0ZVNlbGVjdGVkQ2VsbHNEYXRhIixjYWxs''@;'; put 'put ''YmFjayhjKXtjb25zdCBsPWMuZ2V0U2VsZWN0ZWRSYW5nZSgpLHtyb3c6YSxjb2w6ZH09bFtsLmxlbmd0aC0xXS5oaWdobGlnaHQubm9ybWFsaXplKCksaD1jLmdldERhdGFBdENlbGwoYSxkKSxmPW5ldyBNYXA7Zm9yKGxldCB2PTA7djxsLmxlbmd0aDt2KyspbFt2XS5mb3JBbGwoKE0sRCk9''@;'; put 'put ''PntpZihNPj0wJiZEPj0wJiYoTSE9PWF8fEQhPT1kKSl7Y29uc3R7cmVhZE9ubHk6Wn09Yy5nZXRDZWxsTWV0YShNLEQpO1p8fGYuc2V0KGAke019eCR7RH1gLFtNLEQsaF0pfX0pO2Muc2V0RGF0YUF0Q2VsbChBcnJheS5mcm9tKGYudmFsdWVzKCkpKX19LFlpdD1bLi4uZnVuY3Rpb24gbGl0''@;'; put 'put ''KCl7cmV0dXJuW1hydCxyaXQsaWl0LGFpdCxvaXQsc2l0XX0oKSwuLi5mdW5jdGlvbiBTaXQoKXtyZXR1cm5bY2l0LHVpdCxkaXQsaGl0LGZpdCxwaXQsZ2l0LG1pdCx2aXQsYml0LHlpdCxfaXQsd2l0LENpdF19KCksLi4uZnVuY3Rpb24gQml0KCl7cmV0dXJuW01pdCx4aXQsRWl0LFRpdCxB''@;'; put 'put ''aXQsa2l0LERpdCxJaXQsUml0LExpdCxPaXQsUGl0LEZpdCxIaXQsTml0LFZpdF19KCksaml0LHppdCxVaXQsWml0LFdpdF07ZnVuY3Rpb24gU3BlKGMpe2NvbnN0IGw9e307cmV0dXJuIFlpdC5mb3JFYWNoKGE9PntsZXR7bmFtZTpkLGNhbGxiYWNrOmh9PWE7bFtkXT1mdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBoKGMsLi4udil9fSksbH1mdW5jdGlvbiBHaXQoYyl7Y29uc3QgbD1jLmdldFNob3J0Y3V0TWFuYWdlcigpLmFkZENvbnRleHQoImVkaXRvciIpLGE9U3Bl''@;'; put 'put ''KGMpLGQ9e2dyb3VwOldtfTtsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlcihoLGYpfSx7a2V5czpbWyJFbnRlciIsIkNvbnRyb2wvTWV0YSJdLFsiRW50ZXIiLCJDb250''@;'; put 'put ''cm9sL01ldGEiLCJTaGlmdCJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyKGgsZil9LHtrZXlzOltbIlRhYiJdLFsiVGFiIiwiU2hpZnQiXSxbIlBhZ2VEb3duIl0sWyJQYWdlVXAiXV0sZm9yd2FyZFRvQ29udGV4dDpjLmdldFNo''@;'; put 'put ''b3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKSxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JDbG9zZUFuZFNhdmUoaCxmKX0se2tleXM6W1siQXJyb3dEb3duIl0sWyJBcnJvd1VwIl0sWyJBcnJvd0xlZnQiXSxbIkFycm93UmlnaHQiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJh''@;'; put 'put ''Y2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlQnlBcnJvd0tleXMoaCxmKX0se2tleXM6W1siRXNjYXBlIl0sWyJFc2NhcGUiLCJDb250cm9sL01ldGEiXV0sY2FsbGJhY2s6KCk9PmEuZWRpdG9yQ2xvc2VXaXRob3V0U2F2aW5nKCl9XSxkKX1mdW5jdGlvbiAkaXQoYyl7Y29uc3QgbD1j''@;'; put 'put ''LmdldFNob3J0Y3V0TWFuYWdlcigpLmFkZENvbnRleHQoImdyaWQiKSxhPVNwZShjKSxkPXtydW5Pbmx5SWY6KCk9Pntjb25zdHtuYXZpZ2FibGVIZWFkZXJzOmh9PWMuZ2V0U2V0dGluZ3MoKTtyZXR1cm4gUGEoYy5nZXRTZWxlY3RlZCgpKSYmKGh8fCFoJiZjLmNvdW50UmVuZGVyZWRSb3dz''@;'; put 'put ''KCk+MCYmYy5jb3VudFJlbmRlcmVkQ29scygpPjApfSxncm91cDptcGV9O2wuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJGMiJdXSxjYWxsYmFjazpoPT5hLmVkaXRvckZhc3RPcGVuKGgpfSx7a2V5czpbWyJFbnRlciJdLFsiRW50ZXIiLCJTaGlmdCJdXSxjYWxsYmFjazooaCxmKT0+YS5lZGl0''@;'; put 'put ''b3JPcGVuKGgsZil9LHtrZXlzOltbIkJhY2tzcGFjZSJdLFsiRGVsZXRlIl1dLGNhbGxiYWNrOigpPT5hLmVtcHR5U2VsZWN0ZWRDZWxscygpfV0se2dyb3VwOldtLHJ1bk9ubHlJZjooKT0+UGEoYy5nZXRTZWxlY3RlZCgpKX0pLGwuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01l''@;'; put 'put ''dGEiLCJBIl1dLGNhbGxiYWNrOigpPT5hLnNlbGVjdEFsbENlbGxzKCkscnVuT25seUlmOigpPT57dmFyIGg7cmV0dXJuIShudWxsIT09KGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKSYmdm9pZCAwIT09aCYmaC5oaWdobGlnaHQuaXNIZWFkZXIoKSl9fSx7a2V5czpbWyJDb250cm9sL01l''@;'; put 'put ''dGEiLCJBIl1dLGNhbGxiYWNrOigpPT57fSxydW5Pbmx5SWY6KCk9Pnt2YXIgaDtyZXR1cm4gbnVsbD09PShoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaGlnaGxpZ2h0LmlzSGVhZGVyKCl9LHByZXZlbnREZWZhdWx0OiEwfSx7a2V5czpbWyJDb250''@;'; put 'put ''cm9sL01ldGEiLCJTaGlmdCIsIlNwYWNlIl1dLGNhbGxiYWNrOigpPT5hLnNlbGVjdEFsbENlbGxzQW5kSGVhZGVycygpfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+YS5wb3B1bGF0ZVNlbGVjdGVkQ2VsbHNEYXRhKCkscnVuT25seUlmOigpPT57dmFy''@;'; put 'put ''IGgsZjtyZXR1cm4hKG51bGwhPT0oaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpJiZ2b2lkIDAhPT1oJiZoLmhpZ2hsaWdodC5pc0hlYWRlcigpKSYmKG51bGw9PT0oZj1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmdldENlbGxzQ291bnQoKSk+MX19''@;'; put 'put ''LHtrZXlzOltbIkNvbnRyb2wiLCJTcGFjZSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvQ29sdW1ucygpfSx7a2V5czpbWyJTaGlmdCIsIlNwYWNlIl1dLHN0b3BQcm9wYWdhdGlvbjohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1Nl''@;'; put 'put ''bGVjdGlvblRvUm93cygpfSx7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVXAoKX0se2tleXM6W1siQXJyb3dVcCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRv''@;'; put 'put ''cCgpfSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcCgpfSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rp''@;'; put 'put ''b25Ub01vc3RUb3AoKSxydW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uRG93bigp''@;'; put 'put ''fSx7a2V5czpbWyJBcnJvd0Rvd24iLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b20oKX0se2tleXM6W1siQXJyb3dEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rp''@;'; put 'put ''b25Eb3duKCl9LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0Qm90dG9tKCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5l''@;'; put 'put ''cigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvbkxlZnQoKX0se2tleXM6W1siQXJyb3dMZWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxi''@;'; put 'put ''YWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0TGVmdCgpfSx7a2V5czpbWyJBcnJvd0xlZnQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvbkxlZnQoKX0se2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVy''@;'; put 'put ''ZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RMZWZ0KCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkFycm93UmlnaHQi''@;'; put 'put ''XV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25SaWdodCgpfSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0UmlnaHQoKX0se2tleXM6W1siQXJyb3dSaWdodCIs''@;'; put 'put ''IlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uUmlnaHQoKX0se2tleXM6W1siQXJyb3dSaWdodCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0UmlnaHQoKSxy''@;'; put 'put ''dW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siSG9tZSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZVN0''@;'; put 'put ''YXJ0KCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkhvbWUiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0KCl9LHtrZXlzOltbIkhvbWUiLCJD''@;'; put 'put ''b250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3BJbmxpbmVTdGFydCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJFbmQiXV0sY2Fw''@;'; put 'put ''dHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0''@;'; put 'put ''ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQoKX0se2tleXM6W1siRW5kIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tSW5saW5lRW5kKCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWlu''@;'; put 'put ''VGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblVwQnlWaWV3cG9ydEhpZ2h0KCl9LHtrZXlzOltbIlBhZ2VVcCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0''@;'; put 'put ''aW9uVXBCeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlBhZ2VEb3duIl1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQoKX0se2tleXM6W1siUGFnZURvd24iLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlv''@;'; put 'put ''bkRvd25CeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpoPT5hLm1vdmVDZWxsU2VsZWN0aW9uSW5saW5lU3RhcnQoaCl9LHtrZXlzOltbIlNoaWZ0IiwiVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOmg9PmEubW92''@;'; put 'put ''ZUNlbGxTZWxlY3Rpb25JbmxpbmVFbmQoaCl9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkJhY2tzcGFjZSJdXSxjYWxsYmFjazooKT0+YS5zY3JvbGxUb0ZvY3VzZWRDZWxsKCl9XSxkKX1mdW5jdGlvbiBNcGUoYyl7Y29uc3R7Y2xhc3NOYW1lczpsfT1PMmUoYywvaHQtdGhlbWUtW2EtekEt''@;'; put 'put ''WjAtOV8tXSsvKTtyZXR1cm4gbC5wb3AoKX1sZXQga1g9bnVsbDtjb25zdCBEWD1uZXcgTWFwO2Z1bmN0aW9uIHhwZShjLGwpe3ZhciBhLGQ9dGhpcztsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLGY9dGhpcztjb25zdCB2PW5l''@;'; put 'put ''dyBqMihmKTtsZXQgTSxELFoscmUsY2UsYmUsRWU9ITA7KGZ1bmN0aW9uIGJ0dChjKXtyZXR1cm4gYz09PURLfSkoaCkmJmZ1bmN0aW9uIHZ0dChjKXtDM2Uuc2V0KGMsITApfSh0aGlzKSx0aGlzLnJvb3RFbGVtZW50PWMsdGhpcy5yb290RG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LHRoaXMu''@;'; put 'put ''cm9vdFdpbmRvdz10aGlzLnJvb3REb2N1bWVudC5kZWZhdWx0Vmlldyx0aGlzLmlzRGVzdHJveWVkPSExLHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj0wLHRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj0wO2NvbnN0IEJlPW51bGwhPT0oYT1sPy5sYXlvdXREaXJlY3Rpb24pJiZ2''@;'; put 'put ''b2lkIDAhPT1hP2E6ImluaGVyaXQiLHFlPVsicnRsIiwibHRyIl0uaW5jbHVkZXMoQmUpP0JlOnRoaXMucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMucm9vdEVsZW1lbnQpLmRpcmVjdGlvbjt0aGlzLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGlyIixxZSksdGhpcy5pc1J0''@;'; put 'put ''bD1mdW5jdGlvbigpe3JldHVybiJydGwiPT09cWV9LHRoaXMuaXNMdHI9ZnVuY3Rpb24oKXtyZXR1cm4hZi5pc1J0bCgpfSx0aGlzLmdldERpcmVjdGlvbkZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBmLmlzTHRyKCk/MTotMX0sbC5sYW5ndWFnZT1mdW5jdGlvbiBnbnQoYyl7bGV0IGw9SDNl''@;'; put 'put ''KGMpO3JldHVybiBnWChsKXx8KGw9cFgsTjNlKGMpKSxsfShsLmxhbmd1YWdlKTtjb25zdCBydD1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobCkuZmlsdGVyKHZ0PT57bGV0W050XT12dDtyZXR1cm4hKFNhLmdldFNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZChOdCl8fFNhLmdl''@;'; put 'put ''dFNpbmdsZXRvbigpLmlzRGVwcmVjYXRlZChOdCkpfSkpLHB0PW5ldyB1cGUoZixydCxbd3J0LEFydF0pLGR0PXB0LmdldFRhYmxlTWV0YSgpLEp0PXB0LmdldEdsb2JhbE1ldGEoKSx2bj1KTygpO3RoaXMuY29udGFpbmVyPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp''@;'; put 'put ''LGMuaW5zZXJ0QmVmb3JlKHRoaXMuY29udGFpbmVyLGMuZmlyc3RDaGlsZCksY1AodGhpcykmJihTMmUobC5saWNlbnNlS2V5LGMpLFRpKGMsImh0LXdyYXBwZXIiKSksdGhpcy5ndWlkPWBodF8ke2gkKCl9YCxEWC5zZXQodGhpcy5ndWlkLHRoaXMpLHRoaXMuY29sdW1uSW5kZXhNYXBwZXI9''@;'; put 'put ''bmV3IFlLLHRoaXMucm93SW5kZXhNYXBwZXI9bmV3IFlLLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHZ0PT57Zi5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdnQpfSksdGhpcy5yb3dJbmRleE1hcHBlci5h''@;'; put 'put ''ZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdnQ9PntmLnJ1bkhvb2tzKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix2dCl9KSx2LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjb21wb3NpdGlvbnN0YXJ0Iix2dD0+e2YucnVu''@;'; put 'put ''SG9va3MoImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLHZ0KX0pLEQ9bmV3IEx0dChmKSwoIXRoaXMucm9vdEVsZW1lbnQuaWR8fCJodF8iPT09dGhpcy5yb290RWxlbWVudC5pZC5zdWJzdHJpbmcoMCwzKSkmJih0aGlzLnJvb3RFbGVtZW50LmlkPXRoaXMuZ3VpZCk7bGV0IEdyPW5ldyBxbnQo''@;'; put 'put ''ZHQse3Jvd0luZGV4TWFwcGVyOmYucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6Zi5jb2x1bW5JbmRleE1hcHBlcixjb3VudENvbHM6KCk9PmYuY291bnRDb2xzKCksY291bnRSb3dzOigpPT5mLmNvdW50Um93cygpLHByb3BUb0NvbDp2dD0+TS5wcm9wVG9Db2wodnQpLGlzRWRp''@;'; put 'put ''dG9yT3BlbmVkOigpPT4hIWYuZ2V0QWN0aXZlRWRpdG9yKCkmJmYuZ2V0QWN0aXZlRWRpdG9yKCkuaXNPcGVuZWQoKSxjb3VudFJlbmRlcmFibGVDb2x1bW5zOigpPT50aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGNvdW50UmVuZGVyYWJsZVJvd3M6KCk9PnRoaXMudmlldy5j''@;'; put 'put ''b3VudFJlbmRlcmFibGVSb3dzKCksY291bnRSb3dIZWFkZXJzOigpPT50aGlzLmNvdW50Um93SGVhZGVycygpLGNvdW50Q29sSGVhZGVyczooKT0+dGhpcy5jb3VudENvbEhlYWRlcnMoKSxjb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZTpmdW5jdGlvbigpe3JldHVybiBkLnZpZXcuY291bnRS''@;'; put 'put ''ZW5kZXJhYmxlUm93c0luUmFuZ2UoLi4uYXJndW1lbnRzKX0sY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gZC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKC4uLmFyZ3VtZW50cyl9LGdldFNob3J0Y3V0TWFuYWdlcjooKT0+Zi5nZXRT''@;'; put 'put ''aG9ydGN1dE1hbmFnZXIoKSxjcmVhdGVDZWxsQ29vcmRzOih2dCxOdCk9PmYuX2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLGNyZWF0ZUNlbGxSYW5nZToodnQsTnQsSHQpPT5mLl9jcmVhdGVDZWxsUmFuZ2UodnQsTnQsSHQpLHZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jkczp2dD0+e2NvbnN0e3Jv''@;'; put 'put ''dzpOdCxjb2w6SHR9PXZ0O3JldHVybiBmLl9jcmVhdGVDZWxsQ29vcmRzKE50Pj0wP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChOdCk6TnQsSHQ+PTA/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEh0KTpIdCl9''@;'; put 'put ''LHJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkczp2dD0+e2NvbnN0e3JvdzpOdCxjb2w6SHR9PXZ0O3JldHVybiBmLl9jcmVhdGVDZWxsQ29vcmRzKE50Pj0wP2Yucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChOdCk6TnQsSHQ+PTA/Zi5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEh0KTpIdCl9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3c6KHZ0LE50KT0+e2NvbnN0IEh0PU50PnZ0PzE6LTEsSG49TWF0aC5taW4odnQsTnQpLHRyPU1hdGgubWF4KHZ0LE50KSxhcj1mLnJvd0luZGV4TWFwcGVyLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleCh2dCxIdCk7cmV0dXJuIG51bGw9PT1hcnx8MT09PUh0JiZhcj50cnx8LTE9PT1IdCYmYXI8SG4/bnVsbDphcj49MD9mLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYXIpOmFyfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJh''@;'; put 'put ''YmxlQ29sdW1uOih2dCxOdCk9Pntjb25zdCBIdD1OdD52dD8xOi0xLEhuPU1hdGgubWluKHZ0LE50KSx0cj1NYXRoLm1heCh2dCxOdCksYXI9Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodnQsSHQpO3JldHVybiBudWxsPT09YXJ8fDE9PT1IdCYmYXI+dHJ8''@;'; put 'put ''fC0xPT09SHQmJmFyPEhuP251bGw6YXI+PTA/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGFyKTphcn0saXNEaXNhYmxlZENlbGxTZWxlY3Rpb246KHZ0LE50KT0+dnQ8MHx8TnQ8MD9mLmdldFNldHRpbmdzKCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlv''@;'; put 'put ''bjpmLmdldENlbGxNZXRhKHZ0LE50KS5kaXNhYmxlVmlzdWFsU2VsZWN0aW9ufSk7dGhpcy5zZWxlY3Rpb249R3I7Y29uc3QgbXI9dnQ9PntsZXR7aGlkZGVuSW5kZXhlc0NoYW5nZWQ6TnR9PXZ0O3RoaXMuZm9yY2VGdWxsUmVuZGVyPSEwLE50JiZ0aGlzLnNlbGVjdGlvbi5jb21taXQoKX07''@;'; put 'put ''ZnVuY3Rpb24gYWkodnQsTnQpe2NvbnN0IEh0PSJjbGFzc05hbWUiPT09dnQ/Zi5yb290RWxlbWVudDpmLnRhYmxlO2lmKEVlKVRpKEh0LE50KTtlbHNle2xldCBIbj1bXSx0cj1bXTtKdFt2dF0mJihIbj1BcnJheS5pc0FycmF5KEp0W3Z0XSk/SnRbdnRdOnUkKEp0W3Z0XSkpLE50JiYodHI9''@;'; put 'put ''QXJyYXkuaXNBcnJheShOdCk/TnQ6dSQoTnQpKTtjb25zdCBhcj1jJChIbix0ciksSHI9YyQodHIsSG4pO2FyLmxlbmd0aCYmbG8oSHQsYXIpLEhyLmxlbmd0aCYmVGkoSHQsSHIpfUp0W3Z0XT1OdH1mdW5jdGlvbiBfaSgpe2xldCB2dD0hMTtyZXR1cm57dmFsaWRhdG9yc0luUXVldWU6MCx2''@;'; put 'put ''YWxpZDohMCxhZGRWYWxpZGF0b3JUb1F1ZXVlKCl7dGhpcy52YWxpZGF0b3JzSW5RdWV1ZSs9MSx2dD0hMX0scmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl7dGhpcy52YWxpZGF0b3JzSW5RdWV1ZT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTE8MD8wOnRoaXMudmFsaWRhdG9yc0luUXVldWUt''@;'; put 'put ''MSx0aGlzLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sb25RdWV1ZUVtcHR5KCl7fSxjaGVja0lmUXVldWVJc0VtcHR5KCl7MD09PXRoaXMudmFsaWRhdG9yc0luUXVldWUmJiExPT09dnQmJih2dD0hMCx0aGlzLm9uUXVldWVFbXB0eSh0aGlzLnZhbGlkKSl9fX1mdW5jdGlvbiBPbih2dCl7Y29u''@;'; put 'put ''c3QgTnQ9dnQucmVwbGFjZSgiLCIsIi4iKTtyZXR1cm4hMT09PWlzTmFOKHBhcnNlRmxvYXQoTnQpKT9wYXJzZUZsb2F0KE50KTp2dH1mdW5jdGlvbiB6cih2dCxOdCxIdCl7aWYoIXZ0Lmxlbmd0aClyZXR1cm4gdm9pZCBIdCgpO2NvbnN0IEhuPWYuZ2V0QWN0aXZlRWRpdG9yKCksdHI9bmV3''@;'; put 'put ''IF9pO2xldCBhcj0hMDt0ci5vblF1ZXVlRW1wdHk9KCk9PntIbiYmYXImJkhuLmNhbmNlbENoYW5nZXMoKSxIdCgpfTtmb3IobGV0IEhyPXZ0Lmxlbmd0aC0xO0hyPj0wO0hyLS0pe2NvbnN0W3FyLG9uXT12dFtIcl0seW49TS5wcm9wVG9Db2wob24pO2xldCBwbjtwbj1OdW1iZXIuaXNJbnRl''@;'; put 'put ''Z2VyKHluKT9mLmdldENlbGxNZXRhKHFyLHluKTp7Li4uT2JqZWN0LmdldFByb3RvdHlwZU9mKGR0KSwuLi5kdH0sZi5nZXRDZWxsVmFsaWRhdG9yKHBuKSYmKHRyLmFkZFZhbGlkYXRvclRvUXVldWUoKSxmLnZhbGlkYXRlQ2VsbCh2dFtIcl1bM10scG4sZnVuY3Rpb24ocHIsJG4pe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihkcil7aWYoImJvb2xlYW4iIT10eXBlb2YgZHIpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJvb2xlYW4iKTshMT09PWRyJiYhMT09PSRuLmFsbG93SW52YWxpZCYmKGFyPSExLHZ0LnNwbGljZShwciwxKSwkbi52YWxpZD0hMCks''@;'; put 'put ''dHIucmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl9fShIcixwbiksTnQpKX10ci5jaGVja0lmUXVldWVJc0VtcHR5KCl9ZnVuY3Rpb24gSm4odnQsTnQpe2ZvcihsZXQgSG49dnQubGVuZ3RoLTE7SG4+PTA7SG4tLSl7bGV0IHRyPSExO2lmKG51bGwhPT12dFtIbl0pe2lmKG51bGwhPXZ0W0hu''@;'; put 'put ''XVsyXXx8bnVsbCE9dnRbSG5dWzNdKXtpZihkdC5hbGxvd0luc2VydFJvdylmb3IoO3Z0W0huXVswXT5mLmNvdW50Um93cygpLTE7KXtjb25zdHtkZWx0YTphcn09TS5jcmVhdGVSb3codm9pZCAwLHZvaWQgMCx7c291cmNlOiJhdXRvIn0pO2lmKDA9PT1hcil7dHI9ITA7YnJlYWt9fWlmKCJh''@;'; put 'put ''cnJheSI9PT1mLmRhdGFUeXBlJiYoIWR0LmNvbHVtbnN8fDA9PT1kdC5jb2x1bW5zLmxlbmd0aCkmJmR0LmFsbG93SW5zZXJ0Q29sdW1uKWZvcig7TS5wcm9wVG9Db2wodnRbSG5dWzFdKT5mLmNvdW50Q29scygpLTE7KXtjb25zdHtkZWx0YTphcn09TS5jcmVhdGVDb2wodm9pZCAwLHZvaWQg''@;'; put 'put ''MCx7c291cmNlOiJhdXRvIn0pO2lmKDA9PT1hcil7dHI9ITA7YnJlYWt9fXRyfHxNLnNldCh2dFtIbl1bMF0sdnRbSG5dWzFdLHZ0W0huXVszXSl9fWVsc2UgdnQuc3BsaWNlKEhuLDEpfWlmKHZ0Lmxlbmd0aD4wKXtaLmFkanVzdFJvd3NBbmRDb2xzKCksZi5ydW5Ib29rcygiYmVmb3JlQ2hh''@;'; put 'put ''bmdlUmVuZGVyIix2dCxOdCkscmUuY2xvc2VFZGl0b3IoKSxmLnJlbmRlcigpLHJlLnByZXBhcmVFZGl0b3IoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLHZ0LE50fHwiZWRpdCIpO2NvbnN0IEhuPWYuZ2V0QWN0aXZlRWRpdG9yKCk7SG4m''@;'; put 'put ''JlBhKEhuLnJlZnJlc2hWYWx1ZSkmJkhuLnJlZnJlc2hWYWx1ZSgpfWVsc2UgZi5yZW5kZXIoKX1mdW5jdGlvbiBJcih2dCxOdCxIdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodnQpP3Z0OltbdnQsTnQsSHRdXX1mdW5jdGlvbiAkcih2dCxOdCl7Y29uc3QgSHQ9Zi5ydW5Ib29rcygiYmVmb3Jl''@;'; put 'put ''Q2hhbmdlIix2dCxOdHx8ImVkaXQiKSxIbj12dC5maWx0ZXIoYXI9Pm51bGwhPT1hcik7dmFyIHRyO2lmKCExPT09SHR8fDA9PT1Ibi5sZW5ndGgpcmV0dXJuIG51bGw9PT0odHI9Zi5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PXRyfHx0ci5jYW5jZWxDaGFuZ2VzKCksW107Zm9yKGxl''@;'; put 'put ''dCBhcj1Ibi5sZW5ndGgtMTthcj49MDthci0tKXtjb25zdFtIcixxciwsb25dPUhuW2FyXSx5bj1NLnByb3BUb0NvbChxcik7bGV0IHBuO3BuPU51bWJlci5pc0ludGVnZXIoeW4pP2YuZ2V0Q2VsbE1ldGEoSHIseW4pOnsuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoZHQpLC4uLmR0fTtjb25z''@;'; put 'put ''dHt0eXBlOnByLGNoZWNrZWRUZW1wbGF0ZTokbix1bmNoZWNrZWRUZW1wbGF0ZTpkcn09cG47aWYoIm51bWVyaWMiPT09cHImJiJzdHJpbmciPT10eXBlb2Ygb24mJnlmZShvbikmJihIblthcl1bM109T24ob24pKSwiY2hlY2tib3giPT09cHIpe2NvbnN0IFVyPWxjKG9uKSxabj1Vcj09PWxj''@;'; put 'put ''KCRuKSxzcj1Vcj09PWxjKGRyKTsoWm58fHNyKSYmKEhuW2FyXVszXT1abj8kbjpkcil9fXJldHVybiBIbn10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIixtciksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIs''@;'; put 'put ''bXIpLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJTZXRSYW5nZUVuZCIsKHZ0LE50KT0+e2NvbnN0IEh0PUZkKCExKSxIbj10aGlzLnNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCkse2Zyb206dHIsdG86YXJ9PUhuLmN1cnJlbnQoKSxIcj1Ibi5zaXplKCktMTt0aGlzLnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlclNlbGVjdGlvbiIsdHIucm93LHRyLmNvbCxhci5yb3csYXIuY29sLEh0LEhyKSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsdHIucm93LGYuY29sVG9Qcm9wKHRyLmNvbCksYXIucm93LGYuY29sVG9Qcm9wKGFyLmNvbCksSHQsSHIpLE50JiYoIUh0''@;'; put 'put ''LmlzVG91Y2hlZCgpfHxIdC5pc1RvdWNoZWQoKSYmIUh0LnZhbHVlKSYmYmUuc2Nyb2xsVG8odnQpO2NvbnN0IHFyPUdyLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLG9uPUdyLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO3FyJiZvbj9UaSh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVj''@;'; put 'put ''dGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSk6cXI/KGxvKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSxUaSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1yb3dzIikpOm9uPyhsbyh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2Vs''@;'; put 'put ''ZWN0aW9uLS1yb3dzIiksVGkodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIpKTpsbyh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSksInNoaWZ0IiE9PUdyLmdldFNlbGVjdGlvblNvdXJjZSgp''@;'; put 'put ''JiZyZS5jbG9zZUVkaXRvcihudWxsKSxmLnZpZXcucmVuZGVyKCkscmUucHJlcGFyZUVkaXRvcigpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRGb2N1cyIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsdnQucm93LHZ0LmNvbCl9''@;'; put 'put ''KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2V0Rm9jdXMiLHZ0PT57Y29uc3QgTnQ9RmQoITEpO3RoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLHZ0LnJvdyx2dC5jb2wsTnQpLCghTnQuaXNUb3VjaGVkKCl8fE50LmlzVG91Y2hlZCgpJiYhTnQudmFs''@;'; put 'put ''dWUpJiZiZS5zY3JvbGxUbyh2dCkscmUuY2xvc2VFZGl0b3IoKSxmLnZpZXcucmVuZGVyKCkscmUucHJlcGFyZUVkaXRvcigpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIix2dD0+e2NvbnN0IE50PXZ0Lmxlbmd0aC0xLHtmcm9tOkh0LHRv''@;'; put 'put ''OkhufT12dFtOdF07dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmQiLEh0LnJvdyxIdC5jb2wsSG4ucm93LEhuLmNvbCxOdCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLEh0LnJvdyxmLmNvbFRvUHJvcChIdC5jb2wpLEhuLnJvdyxmLmNvbFRvUHJvcChI''@;'; put 'put ''bi5jb2wpLE50KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2dD0+e2NvbnN0IE50PXRoaXMucnVuSG9va3MoImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsdnQudmFsdWUpO3Z0LnZhbHVlJiYodnQudmFsdWU9TnQpfSksdGhpcy5z''@;'; put 'put ''ZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckRlc2VsZWN0IiwoKT0+e3JlLmNsb3NlRWRpdG9yKCksZi52aWV3LnJlbmRlcigpLGxvKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSx0aGlzLnJ1bkhvb2tzKCJhZnRl''@;'; put 'put ''ckRlc2VsZWN0Iil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZUhpZ2hsaWdodFNldCIsKCk9PnRoaXMucnVuSG9va3MoImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIpKS5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5Iixm''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3Jl''@;'; put 'put ''U2V0UmFuZ2VFbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZUVuZCIsLi4uTnQpfSkuYWRkTG9jYWxIb29r''@;'; put 'put ''KCJiZWZvcmVTZWxlY3RDb2x1bW5zIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsLi4uTnQpfSku''@;'; put 'put ''YWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlclNlbGVjdENvbHVtbnMi''@;'; put 'put ''LC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2VsZWN0Um93cyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNlbGVj''@;'; put 'put ''dFJvd3MiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3RSb3dzIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0ZXJT''@;'; put 'put ''ZWxlY3RSb3dzIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5y''@;'; put 'put ''dW5Ib29rcygibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3Vt''@;'; put 'put ''ZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9''@;'; put 'put ''MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxO''@;'; put 'put ''dD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVS''@;'; put 'put ''b3dXcmFwIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlUm93V3JhcCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVD''@;'; put 'put ''b2x1bW5XcmFwIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uV3JhcCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJp''@;'; put 'put ''bnNlcnRSb3dSZXF1aXJlIix2dD0+dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdnQsMSwiYXV0byIpKS5hZGRMb2NhbEhvb2soImluc2VydENvbFJlcXVpcmUiLHZ0PT50aGlzLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0Iix2dCwxLCJhdXRvIikpLFo9e2FsdGVyKHZ0LE50KXtsZXQg''@;'; put 'put ''SHQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjEsSG49YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAsdHI9YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTp2b2lkIDA7Y29uc3QgYXI9SHI9PntpZigwPT09''@;'; put 'put ''SHIubGVuZ3RoKXJldHVybltdO2NvbnN0IHFyPVsuLi5Icl07cmV0dXJuIHFyLnNvcnQoKHluLHBuKT0+e2xldFtwcl09eW4sWyRuXT1wbjtyZXR1cm4gcHI9PT0kbj8wOnByPiRuPzE6LTF9KSxxdShxciwoeW4scG4pPT57bGV0W3ByLCRuXT1wbjtjb25zdCBkcj15blt5bi5sZW5ndGgtMV0s''@;'; put 'put ''W1VyLFpuXT1kcixzcj1VcitabjtpZihwcjw9c3Ipe2NvbnN0IE5yPU1hdGgubWF4KCRuLShzci1wciksMCk7ZHJbMV0rPU5yfWVsc2UgeW4ucHVzaChbcHIsJG5dKTtyZXR1cm4geW59LFtxclswXV0pfTtzd2l0Y2godnQpe2Nhc2UiaW5zZXJ0X3Jvd19iZWxvdyI6Y2FzZSJpbnNlcnRfcm93''@;'; put 'put ''X2Fib3ZlIjpjb25zdCBIcj1mLmNvdW50U291cmNlUm93cygpO2lmKGR0Lm1heFJvd3M9PT1IcilyZXR1cm47Y29uc3QgcXI9Imluc2VydF9yb3dfYmVsb3ciPT09dnQ/ImJlbG93IjoiYWJvdmUiO050PU50Pz8oImJlbG93Ij09PXFyP0hyOjApO2NvbnN0e2RlbHRhOm9uLHN0YXJ0UGh5c2lj''@;'; put 'put ''YWxJbmRleDp5bn09TS5jcmVhdGVSb3coTnQsSHQse3NvdXJjZTpIbixtb2RlOnFyfSk7R3Iuc2hpZnRSb3dzKGYudG9WaXN1YWxSb3coeW4pLG9uKTticmVhaztjYXNlImluc2VydF9jb2xfc3RhcnQiOmNhc2UiaW5zZXJ0X2NvbF9lbmQiOmNvbnN0IHBuPSJpbnNlcnRfY29sX2VuZCI9PT12''@;'; put 'put ''dD8iZW5kIjoic3RhcnQiO050PU50Pz8oImVuZCI9PT1wbj9mLmNvdW50U291cmNlQ29scygpOjApO2NvbnN0e2RlbHRhOnByLHN0YXJ0UGh5c2ljYWxJbmRleDokbn09TS5jcmVhdGVDb2woTnQsSHQse3NvdXJjZTpIbixtb2RlOnBufSk7aWYocHIpe2lmKEFycmF5LmlzQXJyYXkoZHQuY29s''@;'; put 'put ''SGVhZGVycykpe2NvbnN0IFpuPVtmLnRvVmlzdWFsQ29sdW1uKCRuKSwwXTtabi5sZW5ndGgrPXByLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoZHQuY29sSGVhZGVycyxabil9R3Iuc2hpZnRDb2x1bW5zKGYudG9WaXN1YWxDb2x1bW4oJG4pLHByKX1icmVhaztjYXNlInJlbW92ZV9y''@;'; put 'put ''b3ciOmNvbnN0IGRyPVpuPT57bGV0IHNyPTA7WW4oWm4sTnI9PntsZXRbTXIsWnJdPU5yO2NvbnN0IGFhPVVjKE1yKT9mLmNvdW50Um93cygpLTE6TWF0aC5tYXgoTXItc3IsMCk7aWYoTnVtYmVyLmlzSW50ZWdlcihNcikmJihNcj1NYXRoLm1heChNci1zciwwKSksIU0ucmVtb3ZlUm93KE1y''@;'; put 'put ''LFpyLEhuKSlyZXR1cm47aWYoR3IuaXNTZWxlY3RlZCgpKXtjb25zdHtyb3c6TW99PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7TW8+PU1yJiZNbzw9TXIrWnItMSYmcmUuY2xvc2VFZGl0b3IoITApfWNvbnN0IElvPWYuY291bnRSb3dzKCksWm89ZHQuZml4ZWRSb3dzVG9w''@;'; put 'put ''O1pvPj1hYSsxJiYoZHQuZml4ZWRSb3dzVG9wLT1NYXRoLm1pbihacixaby1hYSkpO2NvbnN0IHBzPWR0LmZpeGVkUm93c0JvdHRvbTtwcyYmYWE+PUlvLXBzJiYoZHQuZml4ZWRSb3dzQm90dG9tLT1NYXRoLm1pbihacixwcykpLDA9PT1Jbz9Hci5kZXNlbGVjdCgpOiJDb250ZXh0TWVudS5y''@;'; put 'put ''ZW1vdmVSb3ciPT09SG4/R3IucmVmcmVzaCgpOkdyLnNoaWZ0Um93cyhNciwtWnIpLHNyKz1acn0pfTtBcnJheS5pc0FycmF5KE50KT9kcihhcihOdCkpOmRyKFtbTnQsSHRdXSk7YnJlYWs7Y2FzZSJyZW1vdmVfY29sIjpjb25zdCBVcj1abj0+e2xldCBzcj0wO1luKFpuLE5yPT57bGV0W01y''@;'; put 'put ''LFpyXT1Ocjtjb25zdCBhYT1VYyhNcik/Zi5jb3VudENvbHMoKS0xOk1hdGgubWF4KE1yLXNyLDApO2xldCBCYT1mLnRvUGh5c2ljYWxDb2x1bW4oYWEpO2lmKE51bWJlci5pc0ludGVnZXIoTXIpJiYoTXI9TWF0aC5tYXgoTXItc3IsMCkpLCFNLnJlbW92ZUNvbChNcixacixIbikpcmV0dXJu''@;'; put 'put ''O2lmKEdyLmlzU2VsZWN0ZWQoKSl7Y29uc3R7Y29sOk1vfT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O01vPj1NciYmTW88PU1yK1pyLTEmJnJlLmNsb3NlRWRpdG9yKCEwKX0wPT09Zi5jb3VudENvbHMoKT9Hci5kZXNlbGVjdCgpOiJDb250ZXh0TWVudS5yZW1vdmVDb2x1''@;'; put 'put ''bW4iPT09SG4/R3IucmVmcmVzaCgpOkdyLnNoaWZ0Q29sdW1ucyhNciwtWnIpO2NvbnN0IHBzPWR0LmZpeGVkQ29sdW1uc1N0YXJ0O3BzPj1hYSsxJiYoZHQuZml4ZWRDb2x1bW5zU3RhcnQtPU1hdGgubWluKFpyLHBzLWFhKSksQXJyYXkuaXNBcnJheShkdC5jb2xIZWFkZXJzKSYmKHR5cGVv''@;'; put 'put ''ZiBCYT4idSImJihCYT0tMSksZHQuY29sSGVhZGVycy5zcGxpY2UoQmEsWnIpKSxzcis9WnJ9KX07QXJyYXkuaXNBcnJheShOdCk/VXIoYXIoTnQpKTpVcihbW050LEh0XV0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBzdWNoIGFjdGlvbiAiJHt2dH0iYCl9''@;'; put 'put ''dHJ8fFouYWRqdXN0Um93c0FuZENvbHMoKSxmLnZpZXcucmVuZGVyKCksZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxhZGp1c3RSb3dzQW5kQ29scygpe2NvbnN0IHZ0PWR0Lm1pblJvd3MsTnQ9ZHQubWluU3BhcmVSb3dzLEh0PWR0Lm1pbkNvbHMsSG49ZHQubWluU3BhcmVDb2xzO2lm''@;'; put 'put ''KHZ0KXtjb25zdCB0cj1mLmNvdW50Um93cygpO3RyPHZ0JiZNLmNyZWF0ZVJvdyh0cix2dC10cix7c291cmNlOiJhdXRvIn0pfWlmKE50KXtjb25zdCB0cj1mLmNvdW50RW1wdHlSb3dzKCEwKTtpZih0cjxOdCl7Y29uc3QgSHI9TWF0aC5taW4oTnQtdHIsZHQubWF4Um93cy1mLmNvdW50U291''@;'; put 'put ''cmNlUm93cygpKTtNLmNyZWF0ZVJvdyhmLmNvdW50Um93cygpLEhyLHtzb3VyY2U6ImF1dG8ifSl9fXtsZXQgdHI7KEh0fHxIbikmJih0cj1mLmNvdW50RW1wdHlDb2xzKCEwKSk7bGV0IGFyPWYuY291bnRDb2xzKCk7aWYoSHQmJiFkdC5jb2x1bW5zJiZhcjxIdCl7Y29uc3QgSHI9SHQtYXI7''@;'; put 'put ''dHIrPUhyLE0uY3JlYXRlQ29sKGFyLEhyLHtzb3VyY2U6ImF1dG8ifSl9aWYoSG4mJiFkdC5jb2x1bW5zJiYiYXJyYXkiPT09Zi5kYXRhVHlwZSYmdHI8SG4pe2FyPWYuY291bnRDb2xzKCk7Y29uc3QgcXI9TWF0aC5taW4oSG4tdHIsZHQubWF4Q29scy1hcik7TS5jcmVhdGVDb2woYXIscXIs''@;'; put 'put ''e3NvdXJjZToiYXV0byJ9KX19fSxwb3B1bGF0ZUZyb21BcnJheSh2dCxOdCxIdCxIbix0cil7bGV0IGFyLEhyLHFyLG9uO2NvbnN0IHluPVtdLHBuPXt9LHByPVtdLCRuPXZ0LnJvdyxkcj12dC5jb2w7aWYoSHI9TnQubGVuZ3RoLDA9PT1IcilyZXR1cm4hMTtsZXQgVXI9MCxabj0wO3N3aXRj''@;'; put 'put ''aChxbyhIdCkmJihVcj1IdC5jb2wtZHIrMSxabj1IdC5yb3ctJG4rMSksdHIpe2Nhc2Uic2hpZnRfZG93biI6Y29uc3Qgc3I9aEUoTnQpLE5yPXNyLmxlbmd0aCxNcj1NYXRoLm1heChOcixVciksWnI9Zi5nZXREYXRhKCkuc2xpY2UoJG4pLGFhPWhFKFpyKS5zbGljZShkcixkcitNcik7Zm9y''@;'; put 'put ''KHFyPTA7cXI8TXI7cXIrPTEpaWYocXI8TnIpe2Zvcihhcj0wLEhyPXNyW3FyXS5sZW5ndGg7YXI8Wm4tSHI7YXIrPTEpc3JbcXJdLnB1c2goc3JbcXJdW2FyJUhyXSk7cHIucHVzaChzcltxcl0uY29uY2F0KHFyPGFhLmxlbmd0aD9hYVtxcl06bmV3IEFycmF5KFpyLmxlbmd0aCkuZmlsbChu''@;'; put 'put ''dWxsKSkpfWVsc2UgcHIucHVzaChzcltxciVOcl0uY29uY2F0KGFhW3FyXSkpO2YucG9wdWxhdGVGcm9tQXJyYXkoJG4sZHIsaEUocHIpKTticmVhaztjYXNlInNoaWZ0X3JpZ2h0Ijpjb25zdCBCYT1OdC5sZW5ndGgsSW89TWF0aC5tYXgoQmEsWm4pLFpvPWYuZ2V0RGF0YSgpLnNsaWNlKCRu''@;'; put 'put ''KS5tYXAoVXM9PlVzLnNsaWNlKGRyKSk7Zm9yKGFyPTA7YXI8SW87YXIrPTEpaWYoYXI8QmEpe2Zvcihxcj0wLG9uPU50W2FyXS5sZW5ndGg7cXI8VXItb247cXIrPTEpTnRbYXJdLnB1c2goTnRbYXJdW3FyJW9uXSk7aWYoYXI8Wm8ubGVuZ3RoKWZvcihsZXQgVXM9MDtVczxab1thcl0ubGVu''@;'; put 'put ''Z3RoO1VzKz0xKU50W2FyXS5wdXNoKFpvW2FyXVtVc10pO2Vsc2UgTnRbYXJdLnB1c2goLi4ubmV3IEFycmF5KFpvWzBdLmxlbmd0aCkuZmlsbChudWxsKSl9ZWxzZSBOdC5wdXNoKE50W2FyJUhyXS5zbGljZSgwLElvKS5jb25jYXQoWm9bYXJdKSk7Zi5wb3B1bGF0ZUZyb21BcnJheSgkbixk''@;'; put 'put ''cixOdCk7YnJlYWs7ZGVmYXVsdDpwbi5yb3c9dnQucm93LHBuLmNvbD12dC5jb2w7bGV0IG5jLHBzPTAsTW89MCxocz0hMDtjb25zdCBRbz1mdW5jdGlvbihKYyl7bGV0IHFzPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2NvbnN0''@;'; put 'put ''IEJsPU50W0pjJU50Lmxlbmd0aF07cmV0dXJuIG51bGwhPT1xcz9CbFtxcyVCbC5sZW5ndGhdOkJsfSxNMz1OdC5sZW5ndGgsYWQ9SHQ/SHQucm93LXZ0LnJvdysxOjA7Zm9yKEhyPUh0P2FkOk1hdGgubWF4KE0zLGFkKSxhcj0wO2FyPEhyJiYhKEh0JiZwbi5yb3c+SHQucm93JiZhZD5NM3x8''@;'; put 'put ''IWR0LmFsbG93SW5zZXJ0Um93JiZwbi5yb3c+Zi5jb3VudFJvd3MoKS0xfHxwbi5yb3c+PWR0Lm1heFJvd3MpO2FyKyspe2NvbnN0IFVzPWFyLXBzLEpjPVFvKFVzKS5sZW5ndGgscXM9SHQ/SHQuY29sLXZ0LmNvbCsxOjA7aWYob249SHQ/cXM6TWF0aC5tYXgoSmMscXMpLHBuLmNvbD12dC5j''@;'; put 'put ''b2wsbmM9Zi5nZXRDZWxsTWV0YShwbi5yb3cscG4uY29sKSwiQ29weVBhc3RlLnBhc3RlIiE9PUhuJiYiQXV0b2ZpbGwuZmlsbCIhPT1Ibnx8IW5jLnNraXBSb3dPblBhc3RlKXtmb3IoTW89MCxxcj0wO3FyPG9uJiYhKEh0JiZwbi5jb2w+SHQuY29sJiZxcz5KY3x8IWR0LmFsbG93SW5zZXJ0''@;'; put 'put ''Q29sdW1uJiZwbi5jb2w+Zi5jb3VudENvbHMoKS0xfHxwbi5jb2w+PWR0Lm1heENvbHMpO3FyKyspe2lmKG5jPWYuZ2V0Q2VsbE1ldGEocG4ucm93LHBuLmNvbCksKCJDb3B5UGFzdGUucGFzdGUiPT09SG58fCJBdXRvZmlsbC5maWxsIj09PUhuKSYmbmMuc2tpcENvbHVtbk9uUGFzdGUpe01v''@;'; put 'put ''Kz0xLHBuLmNvbCs9MSxvbis9MTtjb250aW51ZX1pZihuYy5yZWFkT25seSYmIlVuZG9SZWRvLnVuZG8iIT09SG4pe3BuLmNvbCs9MTtjb250aW51ZX1sZXQgZXM9UW8oVXMscXItTW8pLEUxPWYuZ2V0RGF0YUF0Q2VsbChwbi5yb3cscG4uY29sKTtpZihudWxsIT09ZXMmJiJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgZXMpaWYoQXJyYXkuaXNBcnJheShlcykmJm51bGw9PT1FMSYmKEUxPVtdKSxudWxsPT09RTF8fCJvYmplY3QiIT10eXBlb2YgRTEpaHM9ITE7ZWxzZXtjb25zdCB4Mz1zXyhBcnJheS5pc0FycmF5KEUxKT9FMTpFMVswXXx8RTEpLFFnPXNfKEFycmF5LmlzQXJyYXkoZXMpP2VzOmVz''@;'; put 'put ''WzBdfHxlcyk7Tk8oeDMsUWcpfHxBcnJheS5pc0FycmF5KHgzKSYmQXJyYXkuaXNBcnJheShRZyk/ZXM9ZzEoZXMpOmhzPSExfWVsc2UgbnVsbCE9PUUxJiYib2JqZWN0Ij09dHlwZW9mIEUxJiYoaHM9ITEpO2hzJiZ5bi5wdXNoKFtwbi5yb3cscG4uY29sLGVzXSksaHM9ITAscG4uY29sKz0x''@;'; put 'put ''fXBuLnJvdys9MX1lbHNlIHBzKz0xLHBuLnJvdys9MSxIcis9MX1mLnNldERhdGFBdENlbGwoeW4sbnVsbCxudWxsLEhufHwicG9wdWxhdGVGcm9tQXJyYXkiKX19fSx0aGlzLmluaXQ9ZnVuY3Rpb24oKXtELnNldERhdGEoZHQuZGF0YSksZi5ydW5Ib29rcygiYmVmb3JlSW5pdCIpLChBcCgp''@;'; put 'put ''fHxQJCgpKSYmVGkoZi5yb290RWxlbWVudCwibW9iaWxlIiksdGhpcy51cGRhdGVTZXR0aW5ncyhsLCEwKSx0aGlzLnZpZXc9bmV3IHh0dCh0aGlzKTtjb25zdCB2dD1kdC50aGVtZU5hbWV8fE1wZShmLnJvb3RFbGVtZW50KTtmLnVzZVRoZW1lKHZ0KSxmLnZpZXcuYWRkQ2xhc3NOYW1lVG9M''@;'; put 'put ''aWNlbnNlRWxlbWVudChmLmdldEN1cnJlbnRUaGVtZU5hbWUoKSkscmU9WVhlLmdldEluc3RhbmNlKGYsZHQsR3IpLGJlPWZ1bmN0aW9uIGpydChjKXtjb25zdHtzZWxlY3Rpb246bH09YztsZXQgYT0hMSxkPSExO3JldHVybntyZXN1bWUoKXtkPSExfSxzdXNwZW5kKCl7ZD0hMH0sc2tpcE5l''@;'; put 'put ''eHRTY3JvbGxDeWNsZSgpe2E9ITB9LHNjcm9sbFRvKGgpe3ZhciBmO2lmKGF8fGQpcmV0dXJuIHZvaWQoYT0hMSk7bGV0IHY7bC5pc0ZvY3VzU2VsZWN0aW9uQ2hhbmdlZCgpP3Y9ZnVuY3Rpb24gRnJ0KGMpe3JldHVybiBsPT57Yy5zY3JvbGxWaWV3cG9ydFRvKGwudG9PYmplY3QoKSwoKT0+''@;'; put 'put ''e2NvbnN0e3JvdzphLGNvbDpkfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O0FfKGMuZ2V0Q2VsbChhLGQsITApKX0pfX0oYyk6bC5pc1NlbGVjdGVkQnlDb3JuZXIoKT92PSgpPT57fTpsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpP3Y9ZnVuY3Rpb24gVnJ0KGMpe3JldHVy''@;'; put 'put ''biBsPT57Y29uc3QgYT1GUChjKS5nZXRDb21wdXRlZFJvd1RhcmdldChsKTtjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzphfSwoKT0+e2NvbnN0IGQ9ISFjLmdldFNldHRpbmdzKCkucm93SGVhZGVycztBXyhjLmdldENlbGwoYSxkPy0xOjAsITApKX0pfX0oYyk6bC5pc1NlbGVjdGVkQnlDb2x1''@;'; put 'put ''bW5IZWFkZXIoKT92PWZ1bmN0aW9uIE9ydChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9RlAoYykuZ2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQobCk7Yy5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6YX0sKCk9Pntjb25zdCBkPSEhYy5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnM7QV8oYy5nZXRDZWxsKGQ/''@;'; put 'put ''LTE6MCxhLCEwKSl9KX19KGMpOjE9PT1sLmdldFNlbGVjdGVkUmFuZ2UoKS5zaXplKCkmJmwuaXNNdWx0aXBsZSgpP3Y9ZnVuY3Rpb24gSHJ0KGMpe3JldHVybiBsPT57Y29uc3QgYT1GUChjKSxkPXtyb3c6YS5nZXRDb21wdXRlZFJvd1RhcmdldChsKSxjb2w6YS5nZXRDb21wdXRlZENvbHVt''@;'; put 'put ''blRhcmdldChsKX07Yy5zY3JvbGxWaWV3cG9ydFRvKGQsKCk9Pntjb25zdHtyb3c6aCxjb2w6Zn09ZDtBXyhjLmdldENlbGwoaCxmLCEwKSl9KX19KGMpOjEhPT1sLmdldFNlbGVjdGVkUmFuZ2UoKS5zaXplKCl8fGwuaXNNdWx0aXBsZSgpP2wuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKT4x''@;'; put 'put ''JiYodj1mdW5jdGlvbiBOcnQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPUZQKGMpLGQ9e3JvdzphLmdldENvbXB1dGVkUm93VGFyZ2V0KGwpLGNvbDphLmdldENvbXB1dGVkQ29sdW1uVGFyZ2V0KGwpfTtjLnNjcm9sbFZpZXdwb3J0VG8oZCwoKT0+e2NvbnN0e3JvdzpoLGNvbDpmfT1kO0FfKGMu''@;'; put 'put ''Z2V0Q2VsbChoLGYsITApKX0pfX0oYykpOnY9ZnVuY3Rpb24gQnJ0KGMpe3JldHVybiBsPT57Y29uc3QgYT1jLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Tb3VyY2UoKSx7cm93OmQsY29sOmh9PWwsZj0oKT0+e0FfKGMuZ2V0Q2VsbChkLGgsITApKX07aWYoZDwwJiZoPj0wKWMuc2Nyb2xsVmll''@;'; put 'put ''d3BvcnRUbyh7Y29sOmh9LGYpO2Vsc2UgaWYoaDwwJiZkPj0wKWMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OmR9LGYpO2Vsc2V7aWYoIm1vdXNlIj09PWEmJihoPT09Yy52aWV3LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl8fGQ9PT1jLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2li''@;'; put 'put ''bGVSb3coKSkpcmV0dXJuO2Muc2Nyb2xsVmlld3BvcnRUbyh7cm93OmQsY29sOmh9LGYpfX19KGMpLG51bGw9PT0oZj12KXx8dm9pZCAwPT09Znx8ZihoKX19fShmKSxjZT1uZXcgJFhlKGYpLGNQKHRoaXMpJiZmdW5jdGlvbiBVcnQoYyl7Y29uc3QgbD1mdW5jdGlvbiBacnQoYyl7cmV0dXJu''@;'; put 'put ''IGw9PntpZighbClyZXR1cm4gbnVsbDtjb25zdCBhPUVYKGMpLGQ9VFgoYyk7cmV0dXJuIGwuY29sPGEuY29sJiYobC5jb2w9YS5jb2wpLGwuY29sPmQuY29sJiYobC5jb2w9ZC5jb2wpLGwucm93PGEucm93JiYobC5yb3c9YS5yb3cpLGwucm93PmQucm93JiYobC5yb3c9ZC5yb3cpLGx9fShj''@;'; put 'put ''KTtsZXQgYTtjb25zdHthY3RpdmF0ZTpkLGRlYWN0aXZhdGU6aH09ZnVuY3Rpb24genJ0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdCBhPWMucm9vdEVsZW1lbnQsZD12cGUoYyksaD12cGUoYyk7cmV0dXJu''@;'; put 'put ''IGQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5sPy5vbkZvY3VzRnJvbVRvcCgpKSxoLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+bD8ub25Gb2N1c0Zyb21Cb3R0b20oKSksYS5maXJzdENoaWxkLmJlZm9yZShkKSxhLmxhc3RDaGlsZC5hZnRlcihoKSx7YWN0aXZhdGUoKXtj''@;'; put 'put ''Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntkLnRhYkluZGV4PTAsaC50YWJJbmRleD0wfSwxMCl9LGRlYWN0aXZhdGUoKXtjLl9yZWdpc3RlclRpbWVvdXQoKCk9PntkLnRhYkluZGV4PS0xLGgudGFiSW5kZXg9LTF9LDEwKX19fShjLHtvbkZvY3VzRnJvbVRvcCgpe3ZhciBjZTtjb25zdCBiZT1u''@;'; put 'put ''dWxsIT09KGNlPWwoYSkpJiZ2b2lkIDAhPT1jZT9jZTpFWChjKTtiZSYmKGMucnVuSG9va3MoIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiZnJvbV9hYm92ZSIsYmUpLGMuc2VsZWN0Q2VsbChiZS5yb3csYmUuY29sKSksYy5saXN0ZW4oKX0sb25Gb2N1c0Zyb21Cb3R0b20oKXt2YXIg''@;'; put 'put ''Y2U7Y29uc3QgYmU9bnVsbCE9PShjZT1sKGEpKSYmdm9pZCAwIT09Y2U/Y2U6VFgoYyk7YmUmJihjLnJ1bkhvb2tzKCJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsImZyb21fYmVsb3ciLGJlKSxjLnNlbGVjdENlbGwoYmUucm93LGJlLmNvbCkpLGMubGlzdGVuKCl9fSksZj17d3JhcHBl''@;'; put 'put ''ZDohMSxmbGlwcGVkOiExfTtsZXQgdj0hMCxNPSExLEQ9ITE7Yy5hZGRIb29rKCJhZnRlckxpc3RlbiIsKCk9PmgoKSksYy5hZGRIb29rKCJhZnRlclVubGlzdGVuIiwoKT0+ZCgpKSxjLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoY2UsYmUsRWUsQmUscWUpPT57dmFyIHJ0O00mJihmLndy''@;'; put 'put ''YXBwZWQmJmYuZmxpcHBlZHx8RCkmJihEPSExLHFlLnZhbHVlPSEwKSx2JiYoYT1udWxsPT09KHJ0PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PXJ0P3ZvaWQgMDpydC5oaWdobGlnaHQpfSksYy5hZGRIb29rKCJiZWZvcmVSb3dXcmFwIiwoY2UsYmUsRWUpPT57Zi53cmFw''@;'; put 'put ''cGVkPSEwLGYuZmxpcHBlZD1FZX0pO2NvbnN0IHJlPXtrZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsc3RvcFByb3BhZ2F0aW9uOiExLHJlbGF0aXZlVG9Hcm91cDptcGUsZ3JvdXA6ImZvY3VzQ2F0Y2hlciJ9O2MuZ2V0U2hvcnRjdXRNYW5hZ2VyKCku''@;'; put 'put ''Z2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbey4uLnJlLGNhbGxiYWNrOigpPT57Y29uc3R7dGFiTmF2aWdhdGlvbjpjZX09Yy5nZXRTZXR0aW5ncygpO009ITAsYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpJiYhY2UmJih2PSExKSxjZXx8KEQ9ITApfSxwb3NpdGlvbjoiYmVmb3Jl''@;'; put 'put ''In0sey4uLnJlLGNhbGxiYWNrOmNlPT57Y29uc3R7dGFiTmF2aWdhdGlvbjpiZSxhdXRvV3JhcFJvdzpFZX09Yy5nZXRTZXR0aW5ncygpO2lmKE09ITEsdj0hMCwhYmV8fCFjLnNlbGVjdGlvbi5pc1NlbGVjdGVkKCl8fEVlJiZmLndyYXBwZWQmJmYuZmxpcHBlZHx8IUVlJiZmLndyYXBwZWQp''@;'; put 'put ''cmV0dXJuIEVlJiZmLndyYXBwZWQmJmYuZmxpcHBlZCYmKGE9Y2Uuc2hpZnRLZXk/RVgoYyk6VFgoYykpLGZ1bmN0aW9uIFooKXtmLndyYXBwZWQ9ITEsZi5mbGlwcGVkPSExLGMuZGVzZWxlY3RDZWxsKCksYy51bmxpc3RlbigpfSgpLCExO2NlLnByZXZlbnREZWZhdWx0KCl9LHBvc2l0aW9u''@;'; put 'put ''OiJhZnRlciJ9XSl9KGYpLGYucnVuSG9va3MoImluaXQiKSx0aGlzLnJlbmRlcigpLEVlJiZudWxsPT09Zi5yb290RWxlbWVudC5vZmZzZXRQYXJlbnQmJlUyZShmLnJvb3RFbGVtZW50LCgpPT57Zi52aWV3Ll93dC53dE92ZXJsYXlzLnVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKSxmLnJlbmRl''@;'; put 'put ''cigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0pLCJvYmplY3QiPT10eXBlb2YgRWUmJihmLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsRWVbMF0sRWVbMV0pLEVlPSExKSxmLnJ1bkhvb2tzKCJhZnRlckluaXQiKX0sdGhpcy5fY3JlYXRlQ2VsbENvb3Jkcz1mdW5jdGlvbih2dCxOdCl7''@;'; put 'put ''cmV0dXJuIGYudmlldy5fd3QuY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCl9LHRoaXMuX2NyZWF0ZUNlbGxSYW5nZT1mdW5jdGlvbih2dCxOdCxIdCl7cmV0dXJuIGYudmlldy5fd3QuY3JlYXRlQ2VsbFJhbmdlKHZ0LE50LEh0KX0sdGhpcy52YWxpZGF0ZUNlbGw9ZnVuY3Rpb24odnQsTnQsSHQs''@;'; put 'put ''SG4pe2xldCB0cj1mLmdldENlbGxWYWxpZGF0b3IoTnQpO2Z1bmN0aW9uIGFyKEhyKXtpZihhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmIWFyZ3VtZW50c1sxXXx8ITA9PT1OdC5oaWRkZW4pcmV0dXJuIHZvaWQgSHQoSHIpO2NvbnN0IG9uPU50LnZpc3VhbENv''@;'; put 'put ''bCx5bj1OdC52aXN1YWxSb3cscG49Zi5nZXRDZWxsKHluLG9uLCEwKTtpZihwbiYmIlRIIiE9PXBuLm5vZGVOYW1lKXtjb25zdCBwcj1mLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoeW4pLCRuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZy''@;'; put 'put ''b21WaXN1YWxJbmRleChvbik7Zi52aWV3Ll93dC5nZXRTZXR0aW5nKCJjZWxsUmVuZGVyZXIiLHByLCRuLHBuKX1IdChIcil9YjJlKHRyKSYmKHRyPWZ1bmN0aW9uKEhyKXtyZXR1cm4gZnVuY3Rpb24ocXIsb24pe29uKEhyLnRlc3QocXIpKX19KHRyKSksbWwodHIpPyh2dD1mLnJ1bkhvb2tz''@;'; put 'put ''KCJiZWZvcmVWYWxpZGF0ZSIsdnQsTnQudmlzdWFsUm93LE50LnByb3AsSG4pLGYuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57dHIuY2FsbChOdCx2dCxIcj0+e2YmJihIcj1mLnJ1bkhvb2tzKCJhZnRlclZhbGlkYXRlIixIcix2dCxOdC52aXN1YWxSb3csTnQucHJvcCxIbiksTnQudmFsaWQ9''@;'; put 'put ''SHIsYXIoSHIpLGYucnVuSG9va3MoInBvc3RBZnRlclZhbGlkYXRlIixIcix2dCxOdC52aXN1YWxSb3csTnQucHJvcCxIbikpfSl9KSk6Zi5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9PntOdC52YWxpZD0hMCxhcihOdC52YWxpZCwhMSl9KX0sdGhpcy5zZXREYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0''@;'; put 'put ''LE50LEh0LEhuKXtjb25zdCB0cj1Jcih2dCxOdCxIdCksYXI9W107bGV0IHFyLG9uLHluLEhyPUhuO2Zvcihxcj0wLG9uPXRyLmxlbmd0aDtxcjxvbjtxcisrKXtpZigib2JqZWN0IiE9dHlwZW9mIHRyW3FyXSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNjZXB0''@;'; put 'put ''cyByb3cgbnVtYmVyIG9yIGNoYW5nZXMgYXJyYXkgb2YgYXJyYXlzIGFzIGl0cyBmaXJzdCBwYXJhbWV0ZXIiKTtpZigibnVtYmVyIiE9dHlwZW9mIHRyW3FyXVsxXSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNjZXB0cyByb3cgYW5kIGNvbHVtbiBudW1iZXIg''@;'; put 'put ''YXMgaXRzIHBhcmFtZXRlcnMuIElmIHlvdSB3YW50IHRvIHVzZSBvYmplY3QgcHJvcGVydHkgbmFtZSwgdXNlIG1ldGhvZCBgc2V0RGF0YUF0Um93UHJvcGAiKTt5bj10cltxcl1bMV0+PXRoaXMuY291bnRDb2xzKCk/dHJbcXJdWzFdOk0uY29sVG9Qcm9wKHRyW3FyXVsxXSksYXIucHVzaChb''@;'; put 'put ''dHJbcXJdWzBdLHluLEQuZ2V0QXRDZWxsKHRoaXMudG9QaHlzaWNhbFJvdyh0cltxcl1bMF0pLHRyW3FyXVsxXSksdHJbcXJdWzJdXSl9IUhyJiYib2JqZWN0Ij09dHlwZW9mIHZ0JiYoSHI9TnQpO2NvbnN0IHBuPSRyKGFyLEhyKTtmLnJ1bkhvb2tzKCJhZnRlclNldERhdGFBdENlbGwiLHBu''@;'; put 'put ''LEhyKSx6cihwbixIciwoKT0+e0puKHBuLEhyKX0pfSx0aGlzLnNldERhdGFBdFJvd1Byb3A9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2NvbnN0IHRyPUlyKHZ0LE50LEh0KSxhcj1bXTtsZXQgcXIsb24sSHI9SG47Zm9yKHFyPTAsb249dHIubGVuZ3RoO3FyPG9uO3FyKyspYXIucHVzaChbdHJb''@;'; put 'put ''cXJdWzBdLHRyW3FyXVsxXSxELmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3codHJbcXJdWzBdKSx0cltxcl1bMV0pLHRyW3FyXVsyXV0pOyFIciYmIm9iamVjdCI9PXR5cGVvZiB2dCYmKEhyPU50KTtjb25zdCB5bj0kcihhcixIbik7Zi5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRSb3dQ''@;'; put 'put ''cm9wIix5bixIciksenIoeW4sSHIsKCk9PntKbih5bixIcil9KX0sdGhpcy5saXN0ZW49ZnVuY3Rpb24oKXtmJiYhZi5pc0xpc3RlbmluZygpJiYoRFguZm9yRWFjaCh2dD0+e2YhPT12dCYmdnQudW5saXN0ZW4oKX0pLGtYPWYuZ3VpZCxmLnJ1bkhvb2tzKCJhZnRlckxpc3RlbiIpKX0sdGhp''@;'; put 'put ''cy51bmxpc3Rlbj1mdW5jdGlvbigpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmKGtYPW51bGwsZi5ydW5Ib29rcygiYWZ0ZXJVbmxpc3RlbiIpKX0sdGhpcy5pc0xpc3RlbmluZz1mdW5jdGlvbigpe3JldHVybiBrWD09PWYuZ3VpZH0sdGhpcy5kZXN0cm95RWRpdG9yPWZ1bmN0aW9uKCl7bGV0IE50''@;'; put 'put ''PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07cmUuY2xvc2VFZGl0b3IoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSksZi52aWV3LnJlbmRlcigpLE50JiZHci5pc1NlbGVjdGVk''@;'; put 'put ''KCkmJnJlLnByZXBhcmVFZGl0b3IoKX0sdGhpcy5wb3B1bGF0ZUZyb21BcnJheT1mdW5jdGlvbih2dCxOdCxIdCxIbix0cixhcixIcil7aWYoIm9iamVjdCIhPXR5cGVvZiBIdHx8Im9iamVjdCIhPXR5cGVvZiBIdFswXSl0aHJvdyBuZXcgRXJyb3IoInBvcHVsYXRlRnJvbUFycmF5IHBhcmFt''@;'; put 'put ''ZXRlciBgaW5wdXRgIG11c3QgYmUgYW4gYXJyYXkgb2YgYXJyYXlzIik7Y29uc3QgcXI9Im51bWJlciI9PXR5cGVvZiBIbj9mLl9jcmVhdGVDZWxsQ29vcmRzKEhuLHRyKTpudWxsO3JldHVybiBaLnBvcHVsYXRlRnJvbUFycmF5KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLEh0LHFyLGFy''@;'; put 'put ''LEhyKX0sdGhpcy5zcGxpY2VDb2w9ZnVuY3Rpb24odnQsTnQsSHQpe2Zvcih2YXIgSG49YXJndW1lbnRzLmxlbmd0aCx0cj1uZXcgQXJyYXkoSG4+Mz9Ibi0zOjApLGFyPTM7YXI8SG47YXIrKyl0clthci0zXT1hcmd1bWVudHNbYXJdO3JldHVybiBNLnNwbGljZUNvbCh2dCxOdCxIdCwuLi50''@;'; put 'put ''cil9LHRoaXMuc3BsaWNlUm93PWZ1bmN0aW9uKHZ0LE50LEh0KXtmb3IodmFyIEhuPWFyZ3VtZW50cy5sZW5ndGgsdHI9bmV3IEFycmF5KEhuPjM/SG4tMzowKSxhcj0zO2FyPEhuO2FyKyspdHJbYXItM109YXJndW1lbnRzW2FyXTtyZXR1cm4gTS5zcGxpY2VSb3codnQsTnQsSHQsLi4udHIp''@;'; put 'put ''fSx0aGlzLmdldFNlbGVjdGVkPWZ1bmN0aW9uKCl7aWYoR3IuaXNTZWxlY3RlZCgpKXJldHVybiB5cyhHci5nZXRTZWxlY3RlZFJhbmdlKCksdnQ9PntsZXR7ZnJvbTpOdCx0bzpIdH09dnQ7cmV0dXJuW050LnJvdyxOdC5jb2wsSHQucm93LEh0LmNvbF19KX0sdGhpcy5nZXRTZWxlY3RlZExh''@;'; put 'put ''c3Q9ZnVuY3Rpb24oKXtjb25zdCB2dD10aGlzLmdldFNlbGVjdGVkKCk7bGV0IE50O3JldHVybiB2dCYmdnQubGVuZ3RoPjAmJihOdD12dFt2dC5sZW5ndGgtMV0pLE50fSx0aGlzLmdldFNlbGVjdGVkUmFuZ2U9ZnVuY3Rpb24oKXtpZihHci5pc1NlbGVjdGVkKCkpcmV0dXJuIEFycmF5LmZy''@;'; put 'put ''b20oR3IuZ2V0U2VsZWN0ZWRSYW5nZSgpKX0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdD1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBOdDtyZXR1cm4gdnQmJnZ0Lmxlbmd0aD4wJiYoTnQ9dnRbdnQubGVuZ3RoLTFdKSxOdH0sdGhpcy5lbXB0eVNl''@;'; put 'put ''bGVjdGVkQ2VsbHM9ZnVuY3Rpb24odnQpe2lmKCFHci5pc1NlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgTnQ9W107WW4oR3IuZ2V0U2VsZWN0ZWRSYW5nZSgpLEh0PT57aWYoSHQuaXNTaW5nbGVIZWFkZXIoKSlyZXR1''@;'; put 'put ''cm47Y29uc3QgSG49SHQuZ2V0VG9wU3RhcnRDb3JuZXIoKSx0cj1IdC5nZXRCb3R0b21FbmRDb3JuZXIoKTtHYShIbi5yb3csdHIucm93LGFyPT57R2EoSG4uY29sLHRyLmNvbCxIcj0+e3RoaXMuZ2V0Q2VsbE1ldGEoYXIsSHIpLnJlYWRPbmx5fHxOdC5wdXNoKFthcixIcixudWxsXSl9KX0p''@;'; put 'put ''fSksTnQubGVuZ3RoPjAmJnRoaXMuc2V0RGF0YUF0Q2VsbChOdCx2dCl9LHRoaXMuaXNSZW5kZXJTdXNwZW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPjB9LHRoaXMuc3VzcGVuZFJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVuZGVyU3VzcGVuZGVk''@;'; put 'put ''Q291bnRlcis9MX0sdGhpcy5yZXN1bWVSZW5kZXI9ZnVuY3Rpb24oKXtjb25zdCB2dD10aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXItMTt0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9TWF0aC5tYXgodnQsMCksIXRoaXMuaXNSZW5kZXJTdXNwZW5kZWQoKSYmdnQ9PT10aGlzLnJlbmRl''@;'; put 'put ''clN1c3BlbmRlZENvdW50ZXImJmYudmlldy5yZW5kZXIoKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnZpZXcmJih0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCl8fGYudmlldy5yZW5kZXIoKSl9LHRoaXMuYmF0Y2hSZW5kZXI9ZnVuY3Rpb24o''@;'; put 'put ''dnQpe3RoaXMuc3VzcGVuZFJlbmRlcigpO2NvbnN0IE50PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1lUmVuZGVyKCksTnR9LHRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPjB9LHRoaXMuc3VzcGVuZEV4ZWN1''@;'; put 'put ''dGlvbj1mdW5jdGlvbigpe3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcis9MSx0aGlzLmNvbHVtbkluZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygpfSx0aGlzLnJlc3VtZUV4ZWN1dGlvbj1mdW5jdGlvbigp''@;'; put 'put ''e2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IE50PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlci0xO3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heChOdCwwKSwoIXRoaXMuaXNFeGVj''@;'; put 'put ''dXRpb25TdXNwZW5kZWQoKSYmTnQ9PT10aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXJ8fHZ0KSYmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpKX0sdGhpcy5iYXRjaEV4ZWN1dGlvbj1m''@;'; put 'put ''dW5jdGlvbih2dCl7bGV0IE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07dGhpcy5zdXNwZW5kRXhlY3V0aW9uKCk7Y29uc3QgSHQ9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVFeGVjdXRpb24oTnQpLEh0fSx0aGlzLmJhdGNoPWZ1bmN0''@;'; put 'put ''aW9uKHZ0KXt0aGlzLnN1c3BlbmRSZW5kZXIoKSx0aGlzLnN1c3BlbmRFeGVjdXRpb24oKTtjb25zdCBOdD12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbigpLHRoaXMucmVzdW1lUmVuZGVyKCksTnR9LHRoaXMucmVmcmVzaERpbWVuc2lvbnM9ZnVuY3Rpb24oKXtpZighZi52aWV3''@;'; put 'put ''KXJldHVybjtjb25zdCB2dD1mLnZpZXcse3dpZHRoOk50LGhlaWdodDpIdH09dnQuZ2V0TGFzdFNpemUoKSx7d2lkdGg6SG4saGVpZ2h0OnRyfT1mLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGFyPUhuIT09TnR8fHRyIT09SHQ7ITEhPT1mLnJ1bkhvb2tzKCJiZWZvcmVS''@;'; put 'put ''ZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOk50LGhlaWdodDpIdH0se3dpZHRoOkhuLGhlaWdodDp0cn0sYXIpJiYoKGFyfHx2dC5fd3Qud3RPdmVybGF5cy5zY3JvbGxhYmxlRWxlbWVudD09PWYucm9vdFdpbmRvdykmJih2dC5zZXRMYXN0U2l6ZShIbix0ciksZi5yZW5kZXIoKSx2dC5hZGp1''@;'; put 'put ''c3RFbGVtZW50c1NpemUoKSksZi5ydW5Ib29rcygiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOk50LGhlaWdodDpIdH0se3dpZHRoOkhuLGhlaWdodDp0cn0sYXIpKX0sdGhpcy51cGRhdGVEYXRhPWZ1bmN0aW9uKHZ0LE50KXtncGUodnQsSHQ9PntNPUh0fSxIdD0+e009SHQsZi5j''@;'; put 'put ''b2x1bW5JbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxmLnJvd0luZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpLFouYWRqdXN0Um93c0FuZENvbHMoKSxHci5yZWZyZXNoKCl9LHtob3RJbnN0YW5jZTpmLGRh''@;'; put 'put ''dGFNYXA6TSxkYXRhU291cmNlOkQsaW50ZXJuYWxTb3VyY2U6InVwZGF0ZURhdGEiLHNvdXJjZTpOdCxtZXRhTWFuYWdlcjpwdCxmaXJzdFJ1bjpFZX0pfSx0aGlzLmxvYWREYXRhPWZ1bmN0aW9uKHZ0LE50KXtncGUodnQsSHQ9PntNPUh0fSwoKT0+e3B0LmNsZWFyQ2VsbHNDYWNoZSgpLGYu''@;'; put 'put ''aW5pdEluZGV4TWFwcGVycygpLFouYWRqdXN0Um93c0FuZENvbHMoKSxHci5yZWZyZXNoKCksRWUmJihFZT1bbnVsbCwibG9hZERhdGEiXSl9LHtob3RJbnN0YW5jZTpmLGRhdGFNYXA6TSxkYXRhU291cmNlOkQsaW50ZXJuYWxTb3VyY2U6ImxvYWREYXRhIixzb3VyY2U6TnQsbWV0YU1hbmFn''@;'; put 'put ''ZXI6cHQsZmlyc3RSdW46RWV9KX0sdGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQ9ZnVuY3Rpb24oKXtjb25zdCB2dD1kdC5jb2x1bW5zO2xldCBOdD0wO2lmKEFycmF5LmlzQXJyYXkodnQpKU50PXZ0Lmxlbmd0aDtlbHNlIGlmKG1sKHZ0KSlpZigiYXJyYXkiPT09Zi5kYXRhVHlwZSl7Y29u''@;'; put 'put ''c3QgSHQ9dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtmb3IobGV0IEhuPTA7SG48SHQ7SG4rPTEpdnQoSG4pJiYoTnQrPTEpfWVsc2UoIm9iamVjdCI9PT1mLmRhdGFUeXBlfHwiZnVuY3Rpb24iPT09Zi5kYXRhVHlwZSkmJihOdD1NLmNvbFRvUHJvcENhY2hlLmxlbmd0aCk7ZWxzZSBpZihQYShk''@;'; put 'put ''dC5kYXRhU2NoZW1hKSl7Y29uc3QgSHQ9TS5nZXRTY2hlbWEoKTtOdD1BcnJheS5pc0FycmF5KEh0KT9IdC5sZW5ndGg6Qk8oSHQpfWVsc2UgTnQ9dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtyZXR1cm4gTnR9LHRoaXMuaW5pdEluZGV4TWFwcGVycz1mdW5jdGlvbigpe3RoaXMuY29sdW1uSW5k''@;'; put 'put ''ZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLHRoaXMucm93SW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpfSx0aGlzLmdldERhdGE9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe3JldHVybiBfYyh2dCk/TS5nZXRB''@;'; put 'put ''bGwoKTpNLmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoSHQsSG4pLE0uREVTVElOQVRJT05fUkVOREVSRVIpfSx0aGlzLmdldENvcHlhYmxlVGV4dD1mdW5jdGlvbih2dCxOdCxIdCxIbil7cmV0dXJuIE0uZ2V0Q29weWFibGVUZXh0KGYu''@;'; put 'put ''X2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoSHQsSG4pKX0sdGhpcy5nZXRDb3B5YWJsZURhdGE9ZnVuY3Rpb24odnQsTnQpe3JldHVybiBNLmdldENvcHlhYmxlKHZ0LE0uY29sVG9Qcm9wKE50KSl9LHRoaXMuZ2V0U2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IE0uZ2V0U2NoZW1hKCl9LHRoaXMudXBkYXRlU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBOdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IEh0PShFZT9mLmxvYWREYXRhOmYudXBkYXRlRGF0YSkuYmluZCh0aGlzKTtsZXQg''@;'; put 'put ''dHIsYXIsSG49ITE7aWYoUGEodnQucm93cykpdGhyb3cgbmV3IEVycm9yKCdUaGUgInJvd3MiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRSb3dzLCBtaW5Sb3dzIG9yIG1heFJvd3M/Jyk7aWYoUGEodnQuY29scykpdGhyb3cgbmV3IEVycm9yKCdU''@;'; put 'put ''aGUgImNvbHMiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRDb2xzLCBtaW5Db2xzIG9yIG1heENvbHM/Jyk7aWYoUGEodnQuZ2FudHRDaGFydCkpdGhyb3cgbmV3IEVycm9yKCdTaW5jZSA4LjAuMCB0aGUgImdhbnR0Q2hhcnQiIHNldHRpbmcgaXMg''@;'; put 'put ''bm8gbG9uZ2VyIHN1cHBvcnRlZC4nKTtmb3IodHIgaW4gdnQubGFuZ3VhZ2UmJmZ1bmN0aW9uIEduKHZ0KXtjb25zdCBOdD1IM2UodnQpO2dYKE50KT8oZi5ydW5Ib29rcygiYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UiLE50KSxKdC5sYW5ndWFnZT1OdCxmLnJ1bkhvb2tzKCJhZnRlckxhbmd1YWdl''@;'; put 'put ''Q2hhbmdlIixOdCkpOk4zZSh2dCl9KHZ0Lmxhbmd1YWdlKSx2dClpZigiZGF0YSIhPT10ciYmImxhbmd1YWdlIiE9PXRyKWlmKCJjbGFzc05hbWUiPT09dHIpYWkoImNsYXNzTmFtZSIsdnQuY2xhc3NOYW1lKTtlbHNlIGlmKCJ0YWJsZUNsYXNzTmFtZSI9PT10ciYmZi50YWJsZSlhaSgidGFi''@;'; put 'put ''bGVDbGFzc05hbWUiLHZ0LnRhYmxlQ2xhc3NOYW1lKSxmLnZpZXcuX3d0Lnd0T3ZlcmxheXMuc3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKTtlbHNlIGlmKFNhLmdldFNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZCh0cil8fFNhLmdldFNpbmdsZXRvbigpLmlzRGVwcmVjYXRlZCh0cikpe2Nv''@;'; put 'put ''bnN0IHBuPXZ0W3RyXTttbChwbik/KFNhLmdldFNpbmdsZXRvbigpLmFkZEFzRml4ZWQodHIscG4sZiksZHRbdHJdPXBuKTpBcnJheS5pc0FycmF5KHBuKSYmKFNhLmdldFNpbmdsZXRvbigpLmFkZCh0cixwbixmKSxkdFt0cl09cG4pfWVsc2UhTnQmJlR1KHZ0LHRyKSYmKEp0W3RyXT12dFt0''@;'; put 'put ''cl0pO3ZvaWQgMD09PXZ0LmRhdGEmJnZvaWQgMD09PWR0LmRhdGE/SHQobnVsbCwidXBkYXRlU2V0dGluZ3MiKTp2b2lkIDAhPT12dC5kYXRhP0h0KHZ0LmRhdGEsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09dnQuY29sdW1ucyYmKE0uY3JlYXRlTWFwKCksZi5pbml0SW5kZXhNYXBwZXJz''@;'; put 'put ''KCkpO2NvbnN0IEhyPWYuY291bnRDb2xzKCkscXI9ZHQuY29sdW1ucztpZihxciYmbWwocXIpJiYoSG49ITApLCh2b2lkIDAhPT12dC5jZWxsfHx2b2lkIDAhPT12dC5jZWxsc3x8dm9pZCAwIT09dnQuY29sdW1ucykmJnB0LmNsZWFyQ2FjaGUoKSxIcj4wKWZvcih0cj0wLGFyPTA7dHI8SHI7''@;'; put 'put ''dHIrKyl7aWYocXIpe2NvbnN0IHBuPUhuP3FyKHRyKTpxclthcl07cG4mJnB0LnVwZGF0ZUNvbHVtbk1ldGEoYXIscG4pfWFyKz0xfVBhKHZ0LmNlbGwpJiZYbyh2dC5jZWxsLHBuPT57Zi5zZXRDZWxsTWV0YU9iamVjdChwbi5yb3cscG4uY29sLHBuKX0pLGYucnVuSG9va3MoImFmdGVyQ2Vs''@;'; put 'put ''bE1ldGFSZXNldCIpO2xldCBvbj1mLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodDsiIiE9PW9uJiYob249cGFyc2VJbnQoZi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQsMTApKTtsZXQgeW49dnQuaGVpZ2h0O2lmKG1sKHluKSYmKHluPXluKCkpLE50JiZmLnJvb3RFbGVtZW50LmdldEF0dHJp''@;'; put 'put ''YnV0ZSgic3R5bGUiKSYmZi5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtaW5pdGlhbHN0eWxlIixmLnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgic3R5bGUiKSksbnVsbD09PXluKXtjb25zdCBwbj1mLnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1pbml0aWFsc3R5bGUi''@;'; put 'put ''KTtwbiYmKHBuLmluZGV4T2YoImhlaWdodCIpPi0xfHxwbi5pbmRleE9mKCJvdmVyZmxvdyIpPi0xKT9mLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgic3R5bGUiLHBuKTooZi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ9IiIsZi5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iIil9ZWxz''@;'; put 'put ''ZSB2b2lkIDAhPT15biYmKGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PWlzTmFOKHluKT9gJHt5bn1gOmAke3lufXB4YCxmLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKTtpZih0eXBlb2YgdnQud2lkdGg8InUiKXtsZXQgcG49dnQud2lkdGg7bWwocG4pJiYocG49cG4o''@;'; put 'put ''KSksZi5yb290RWxlbWVudC5zdHlsZS53aWR0aD1pc05hTihwbik/YCR7cG59YDpgJHtwbn1weGB9aWYoIU50KXtpZihmLnZpZXcpe2Yudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKSxmLnZpZXcuX3d0LmV4cG9ydFNldHRpbmdzQXND''@;'; put 'put ''bGFzc05hbWVzKCk7Y29uc3QgcG49Zi5nZXRDdXJyZW50VGhlbWVOYW1lKCkscHI9VHUodnQsInRoZW1lTmFtZSIpO3BuJiZwciYmcG4hPT12dC50aGVtZU5hbWUmJihmLnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpLnJlbW92ZUNsYXNzTmFtZXMoKSxmLnZpZXcucmVtb3ZlQ2xhc3NOYW1lRnJv''@;'; put 'put ''bUxpY2Vuc2VFbGVtZW50KHBuKSk7Y29uc3QgJG49cHImJnZ0LnRoZW1lTmFtZXx8TXBlKGYucm9vdEVsZW1lbnQpO2YudXNlVGhlbWUoJG4pLGYudmlldy5hZGRDbGFzc05hbWVUb0xpY2Vuc2VFbGVtZW50KGYuZ2V0Q3VycmVudFRoZW1lTmFtZSgpKX1mLnJ1bkhvb2tzKCJhZnRlclVwZGF0''@;'; put 'put ''ZVNldHRpbmdzIix2dCl9Wi5hZGp1c3RSb3dzQW5kQ29scygpLGYudmlldyYmIUVlJiYoZi5yZW5kZXIoKSxmLnZpZXcuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCkpLCFOdCYmZi52aWV3JiYoIiI9PT1vbnx8IiI9PT15bnx8dm9pZCAwPT09eW4pJiZvbiE9PXluJiZmLnZp''@;'; put 'put ''ZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygpfSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKCl7Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZExhc3QoKTtpZihkdC5nZXRWYWx1ZSl7aWYobWwoZHQuZ2V0VmFsdWUpKXJldHVybiBkdC5nZXRWYWx1ZS5jYWxsKGYp''@;'; put 'put ''O2lmKHZ0KXJldHVybiBmLmdldERhdGEoKVt2dFswXVswXV1bZHQuZ2V0VmFsdWVdfWVsc2UgaWYodnQpcmV0dXJuIGYuZ2V0RGF0YUF0Q2VsbCh2dFswXSx2dFsxXSl9LHRoaXMuZ2V0U2V0dGluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gZHR9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNl''@;'; put 'put ''bGVjdEFsbCgpLHRoaXMuZW1wdHlTZWxlY3RlZENlbGxzKCl9LHRoaXMuYWx0ZXI9ZnVuY3Rpb24odnQsTnQsSHQsSG4sdHIpe1ouYWx0ZXIodnQsTnQsSHQsSG4sdHIpfSx0aGlzLmdldENlbGw9ZnVuY3Rpb24odnQsTnQpe2xldCBIdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1syXSYmYXJndW1lbnRzWzJdLEhuPU50LHRyPXZ0O2lmKE50Pj0wKXtpZih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlzaWNhbENvbHVtbihOdCkpKXJldHVybiBudWxsO0huPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21W''@;'; put 'put ''aXN1YWxJbmRleChOdCl9aWYodnQ+PTApe2lmKHRoaXMucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy50b1BoeXNpY2FsUm93KHZ0KSkpcmV0dXJuIG51bGw7dHI9dGhpcy5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0KX1yZXR1cm4gbnVsbD09PXRy''@;'; put 'put ''fHxudWxsPT09SG58fHZvaWQgMD09PXRyfHx2b2lkIDA9PT1Ibj9udWxsOmYudmlldy5nZXRDZWxsQXRDb29yZHMoZi5fY3JlYXRlQ2VsbENvb3Jkcyh0cixIbiksSHQpfSx0aGlzLmdldENvb3Jkcz1mdW5jdGlvbih2dCl7Y29uc3QgTnQ9dGhpcy52aWV3Ll93dC53dFRhYmxlLmdldENvb3Jk''@;'; put 'put ''cyh2dCk7aWYobnVsbD09PU50KXJldHVybiBudWxsO2NvbnN0e3JvdzpIdCxjb2w6SG59PU50O2xldCB0cj1IdCxhcj1IbjtyZXR1cm4gSHQ+PTAmJih0cj10aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoSHQpKSxIbj49MCYmKGFyPXRoaXMuY29sdW1u''@;'; put 'put ''SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChIbikpLGYuX2NyZWF0ZUNlbGxDb29yZHModHIsYXIpfSx0aGlzLmNvbFRvUHJvcD1mdW5jdGlvbih2dCl7cmV0dXJuIE0uY29sVG9Qcm9wKHZ0KX0sdGhpcy5wcm9wVG9Db2w9ZnVuY3Rpb24odnQpe3JldHVybiBNLnBy''@;'; put 'put ''b3BUb0NvbCh2dCl9LHRoaXMudG9WaXN1YWxSb3c9dnQ9PnRoaXMucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodnQpLHRoaXMudG9WaXN1YWxDb2x1bW49dnQ9PnRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodnQpLHRo''@;'; put 'put ''aXMudG9QaHlzaWNhbFJvdz12dD0+dGhpcy5yb3dJbmRleE1hcHBlci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh2dCksdGhpcy50b1BoeXNpY2FsQ29sdW1uPXZ0PT50aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KHZ0KSx0aGlzLmdldERhdGFB''@;'; put 'put ''dENlbGw9ZnVuY3Rpb24odnQsTnQpe3JldHVybiBNLmdldCh2dCxNLmNvbFRvUHJvcChOdCkpfSx0aGlzLmdldERhdGFBdFJvd1Byb3A9ZnVuY3Rpb24odnQsTnQpe3JldHVybiBNLmdldCh2dCxOdCl9LHRoaXMuZ2V0RGF0YUF0Q29sPWZ1bmN0aW9uKHZ0KXtjb25zdCBOdD1bXSxIdD1NLmdl''@;'; put 'put ''dFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMoMCx2dCksZi5fY3JlYXRlQ2VsbENvb3JkcyhkdC5kYXRhLmxlbmd0aC0xLHZ0KSxNLkRFU1RJTkFUSU9OX1JFTkRFUkVSKTtmb3IobGV0IEhuPTA7SG48SHQubGVuZ3RoO0huKz0xKWZvcihsZXQgdHI9MDt0cjxIdFtIbl0ubGVuZ3RoO3RyKz0x''@;'; put 'put ''KU50LnB1c2goSHRbSG5dW3RyXSk7cmV0dXJuIE50fSx0aGlzLmdldERhdGFBdFByb3A9ZnVuY3Rpb24odnQpe2NvbnN0IE50PVtdLEh0PU0uZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3JkcygwLE0ucHJvcFRvQ29sKHZ0KSksZi5fY3JlYXRlQ2VsbENvb3JkcyhkdC5kYXRhLmxlbmd0aC0x''@;'; put 'put ''LE0ucHJvcFRvQ29sKHZ0KSksTS5ERVNUSU5BVElPTl9SRU5ERVJFUik7Zm9yKGxldCBIbj0wO0huPEh0Lmxlbmd0aDtIbis9MSlmb3IobGV0IHRyPTA7dHI8SHRbSG5dLmxlbmd0aDt0cis9MSlOdC5wdXNoKEh0W0huXVt0cl0pO3JldHVybiBOdH0sdGhpcy5nZXRTb3VyY2VEYXRhPWZ1bmN0''@;'; put 'put ''aW9uKHZ0LE50LEh0LEhuKXtsZXQgdHI7cmV0dXJuIHRyPXZvaWQgMD09PXZ0P0QuZ2V0RGF0YSgpOkQuZ2V0QnlSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KSxmLl9jcmVhdGVDZWxsQ29vcmRzKEh0LEhuKSksdHJ9LHRoaXMuZ2V0U291cmNlRGF0YUFycmF5PWZ1bmN0aW9uKHZ0''@;'; put 'put ''LE50LEh0LEhuKXtsZXQgdHI7cmV0dXJuIHRyPXZvaWQgMD09PXZ0P0QuZ2V0RGF0YSghMCk6RC5nZXRCeVJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoSHQsSG4pLCEwKSx0cn0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDb2w9ZnVuY3Rpb24odnQp''@;'; put 'put ''e3JldHVybiBELmdldEF0Q29sdW1uKHZ0KX0sdGhpcy5zZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtjb25zdCB0cj1Jcih2dCxOdCxIdCksYXI9dGhpcy5oYXNIb29rKCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiKSxIcj1bXTthciYmWW4odHIsb249PntsZXRb''@;'; put 'put ''eW4scG4scHJdPW9uO0hyLnB1c2goW3luLHBuLEQuZ2V0QXRDZWxsKHluLHBuKSxwcl0pfSksWW4odHIsb249PntsZXRbeW4scG4scHJdPW9uO0Quc2V0QXRDZWxsKHluLHBuLHByKX0pLGFyJiZ0aGlzLnJ1bkhvb2tzKCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLEhyLEhuKSx0aGlzLnJl''@;'; put 'put ''bmRlcigpO2NvbnN0IHFyPWYuZ2V0QWN0aXZlRWRpdG9yKCk7cXImJlBhKHFyLnJlZnJlc2hWYWx1ZSkmJnFyLnJlZnJlc2hWYWx1ZSgpfSx0aGlzLmdldFNvdXJjZURhdGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIEQuZ2V0QXRSb3codnQpfSx0aGlzLmdldFNvdXJjZURhdGFBdENlbGw9''@;'; put 'put ''ZnVuY3Rpb24odnQsTnQpe3JldHVybiBELmdldEF0Q2VsbCh2dCxOdCl9LHRoaXMuZ2V0RGF0YUF0Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gTS5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LDApLGYuX2NyZWF0ZUNlbGxDb29yZHModnQsdGhpcy5jb3VudENvbHMoKS0xKSxNLkRF''@;'; put 'put ''U1RJTkFUSU9OX1JFTkRFUkVSKVswXXx8W119LHRoaXMuZ2V0RGF0YVR5cGU9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2NvbnN0IHRyPXZvaWQgMD09PXZ0P1swLDAsdGhpcy5jb3VudFJvd3MoKSx0aGlzLmNvdW50Q29scygpXTpbdnQsTnQsSHQsSG5dLFthcixIcl09dHI7bGV0WywscXIsb25d''@;'; put 'put ''PXRyLHluPW51bGwscG49bnVsbDt2b2lkIDA9PT1xciYmKHFyPWFyKSx2b2lkIDA9PT1vbiYmKG9uPUhyKTtsZXQgcHI9Im1peGVkIjtyZXR1cm4gR2EoTWF0aC5tYXgoTWF0aC5taW4oYXIscXIpLDApLE1hdGgubWF4KGFyLHFyKSwkbj0+e2xldCBkcj0hMDtyZXR1cm4gR2EoTWF0aC5tYXgo''@;'; put 'put ''TWF0aC5taW4oSHIsb24pLDApLE1hdGgubWF4KEhyLG9uKSxVcj0+KHBuPXRoaXMuZ2V0Q2VsbE1ldGEoJG4sVXIpLnR5cGUseW4/ZHI9eW49PT1wbjp5bj1wbixkcikpLHByPWRyP3BuOiJtaXhlZCIsZHJ9KSxwcn0sdGhpcy5yZW1vdmVDZWxsTWV0YT1mdW5jdGlvbih2dCxOdCxIdCl7Y29u''@;'; put 'put ''c3RbSG4sdHJdPVt0aGlzLnRvUGh5c2ljYWxSb3codnQpLHRoaXMudG9QaHlzaWNhbENvbHVtbihOdCldO2xldCBhcj1wdC5nZXRDZWxsTWV0YUtleVZhbHVlKEhuLHRyLEh0KTshMSE9PWYucnVuSG9va3MoImJlZm9yZVJlbW92ZUNlbGxNZXRhIix2dCxOdCxIdCxhcikmJihwdC5yZW1vdmVD''@;'; put 'put ''ZWxsTWV0YShIbix0cixIdCksZi5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsdnQsTnQsSHQsYXIpKSxhcj1udWxsfSx0aGlzLnNwbGljZUNlbGxzTWV0YT1mdW5jdGlvbih2dCl7bGV0IE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50''@;'; put 'put ''c1sxXTowO2Zvcih2YXIgSHQ9YXJndW1lbnRzLmxlbmd0aCxIbj1uZXcgQXJyYXkoSHQ+Mj9IdC0yOjApLHRyPTI7dHI8SHQ7dHIrKylIblt0ci0yXT1hcmd1bWVudHNbdHJdO2lmKEhuLmxlbmd0aD4wJiYhQXJyYXkuaXNBcnJheShIblswXSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgM3JkIGFy''@;'; put 'put ''Z3VtZW50IChjZWxsTWV0YVJvd3MpIGhhcyB0byBiZSBwYXNzZWQgYXMgYW4gYXJyYXkgb2YgY2VsbCBtZXRhIG9iamVjdHMgYXJyYXkuIik7TnQ+MCYmcHQucmVtb3ZlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2dCksTnQpLEhuLmxlbmd0aD4wJiZZbihIbi5yZXZlcnNlKCksYXI9PntwdC5j''@;'; put 'put ''cmVhdGVSb3codGhpcy50b1BoeXNpY2FsUm93KHZ0KSksWW4oYXIsKEhyLHFyKT0+dGhpcy5zZXRDZWxsTWV0YU9iamVjdCh2dCxxcixIcikpfSksZi5yZW5kZXIoKX0sdGhpcy5zZXRDZWxsTWV0YU9iamVjdD1mdW5jdGlvbih2dCxOdCxIdCl7Im9iamVjdCI9PXR5cGVvZiBIdCYmWG8oSHQs''@;'; put 'put ''KEhuLHRyKT0+e3RoaXMuc2V0Q2VsbE1ldGEodnQsTnQsdHIsSG4pfSl9LHRoaXMuc2V0Q2VsbE1ldGE9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2lmKCExPT09Zi5ydW5Ib29rcygiYmVmb3JlU2V0Q2VsbE1ldGEiLHZ0LE50LEh0LEhuKSlyZXR1cm47bGV0IGFyPXZ0LEhyPU50O3Z0PHRoaXMu''@;'; put 'put ''Y291bnRSb3dzKCkmJihhcj10aGlzLnRvUGh5c2ljYWxSb3codnQpKSxOdDx0aGlzLmNvdW50Q29scygpJiYoSHI9dGhpcy50b1BoeXNpY2FsQ29sdW1uKE50KSkscHQuc2V0Q2VsbE1ldGEoYXIsSHIsSHQsSG4pLGYucnVuSG9va3MoImFmdGVyU2V0Q2VsbE1ldGEiLHZ0LE50LEh0LEhuKX0s''@;'; put 'put ''dGhpcy5nZXRDZWxsc01ldGE9ZnVuY3Rpb24oKXtyZXR1cm4gcHQuZ2V0Q2VsbHNNZXRhKCl9LHRoaXMuZ2V0Q2VsbE1ldGE9ZnVuY3Rpb24odnQsTnQpe2xldCBIdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e3NraXBNZXRhRXh0ZW5z''@;'; put 'put ''aW9uOiExfSxIbj10aGlzLnRvUGh5c2ljYWxSb3codnQpLHRyPXRoaXMudG9QaHlzaWNhbENvbHVtbihOdCk7cmV0dXJuIG51bGw9PT1IbiYmKEhuPXZ0KSxudWxsPT09dHImJih0cj1OdCkscHQuZ2V0Q2VsbE1ldGEoSG4sdHIse3Zpc3VhbFJvdzp2dCx2aXN1YWxDb2x1bW46TnQsLi4uSHR9''@;'; put 'put ''KX0sdGhpcy5nZXRDb2x1bW5NZXRhPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gcHQuZ2V0Q29sdW1uTWV0YSh0aGlzLnRvUGh5c2ljYWxDb2x1bW4odnQpKX0sdGhpcy5nZXRDZWxsTWV0YUF0Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gcHQuZ2V0Q2VsbHNNZXRhQXRSb3codnQpfSx0aGlzLmlzQ29s''@;'; put 'put ''dW1uTW9kaWZpY2F0aW9uQWxsb3dlZD1mdW5jdGlvbigpe3JldHVybiEoIm9iamVjdCI9PT1mLmRhdGFUeXBlfHxkdC5jb2x1bW5zKX0sdGhpcy5nZXRDZWxsUmVuZGVyZXI9ZnVuY3Rpb24odnQsTnQpe2NvbnN0IEh0PSJudW1iZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCxOdCku''@;'; put 'put ''cmVuZGVyZXI6dnQucmVuZGVyZXI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBIdD9RTyhIdCk6X2MoSHQpP1FPKCJ0ZXh0Iik6SHR9LHRoaXMuZ2V0Q2VsbEVkaXRvcj1mdW5jdGlvbih2dCxOdCl7Y29uc3QgSHQ9Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE50KS5lZGl0''@;'; put 'put ''b3I6dnQuZWRpdG9yO3JldHVybiJzdHJpbmciPT10eXBlb2YgSHQ/V08oSHQpOl9jKEh0KT9XTygidGV4dCIpOkh0fSx0aGlzLmdldENlbGxWYWxpZGF0b3I9ZnVuY3Rpb24odnQsTnQpe2NvbnN0IEh0PSJudW1iZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCxOdCkudmFsaWRhdG9y''@;'; put 'put ''OnZ0LnZhbGlkYXRvcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEh0P3JLKEh0KTpIdH0sdGhpcy52YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKHZ0KXt0aGlzLl92YWxpZGF0ZUNlbGxzKHZ0KX0sdGhpcy52YWxpZGF0ZVJvd3M9ZnVuY3Rpb24odnQsTnQpe2lmKCFBcnJheS5pc0FycmF5KHZ0KSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoInZhbGlkYXRlUm93cyBwYXJhbWV0ZXIgYHJvd3NgIG11c3QgYmUgYW4gYXJyYXkiKTt0aGlzLl92YWxpZGF0ZUNlbGxzKE50LHZ0KX0sdGhpcy52YWxpZGF0ZUNvbHVtbnM9ZnVuY3Rpb24odnQsTnQpe2lmKCFBcnJheS5pc0FycmF5KHZ0KSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoInZhbGlkYXRlQ29sdW1ucyBwYXJhbWV0ZXIgYGNvbHVtbnNgIG11c3QgYmUgYW4gYXJyYXkiKTt0aGlzLl92YWxpZGF0ZUNlbGxzKE50LHZvaWQgMCx2dCl9LHRoaXMuX3ZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24odnQsTnQsSHQpe2NvbnN0IEhuPW5ldyBfaTt2dCYmKEhuLm9uUXVldWVF''@;'; put 'put ''bXB0eT12dCk7bGV0IHRyPWYuY291bnRSb3dzKCktMTtmb3IoO3RyPj0wOyl7aWYodm9pZCAwIT09TnQmJi0xPT09TnQuaW5kZXhPZih0cikpe3RyLT0xO2NvbnRpbnVlfWxldCBhcj1mLmNvdW50Q29scygpLTE7Zm9yKDthcj49MDspdm9pZCAwPT09SHR8fC0xIT09SHQuaW5kZXhPZihhcik/''@;'; put 'put ''KEhuLmFkZFZhbGlkYXRvclRvUXVldWUoKSxmLnZhbGlkYXRlQ2VsbChmLmdldERhdGFBdENlbGwodHIsYXIpLGYuZ2V0Q2VsbE1ldGEodHIsYXIpLEhyPT57aWYoImJvb2xlYW4iIT10eXBlb2YgSHIpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJv''@;'; put 'put ''b2xlYW4iKTshMT09PUhyJiYoSG4udmFsaWQ9ITEpLEhuLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfSwidmFsaWRhdGVDZWxscyIpLGFyLT0xKTphci09MTt0ci09MX1Ibi5jaGVja0lmUXVldWVJc0VtcHR5KCl9LHRoaXMuZ2V0Um93SGVhZGVyPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9ZHQu''@;'; put 'put ''cm93SGVhZGVycyxIdD12dDtyZXR1cm4gdm9pZCAwIT09SHQmJihIdD1mLnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWFkZXIiLEh0KSksdm9pZCAwPT09SHQ/KE50PVtdLEdhKGYuY291bnRSb3dzKCktMSxIbj0+e050LnB1c2goZi5nZXRSb3dIZWFkZXIoSG4pKX0pKTpBcnJheS5pc0FycmF5KE50''@;'; put 'put ''KSYmdm9pZCAwIT09TnRbSHRdP050PU50W0h0XTptbChOdCk/TnQ9TnQoSHQpOk50JiYic3RyaW5nIiE9dHlwZW9mIE50JiYibnVtYmVyIiE9dHlwZW9mIE50JiYoTnQ9SHQrMSksTnR9LHRoaXMuaGFzUm93SGVhZGVycz1mdW5jdGlvbigpe3JldHVybiEhZHQucm93SGVhZGVyc30sdGhpcy5o''@;'; put 'put ''YXNDb2xIZWFkZXJzPWZ1bmN0aW9uKCl7aWYobnVsbCE9ZHQuY29sSGVhZGVycylyZXR1cm4hIWR0LmNvbEhlYWRlcnM7Zm9yKGxldCB2dD0wLE50PWYuY291bnRDb2xzKCk7dnQ8TnQ7dnQrKylpZihmLmdldENvbEhlYWRlcih2dCkpcmV0dXJuITA7cmV0dXJuITF9LHRoaXMuZ2V0Q29sSGVh''@;'; put 'put ''ZGVyPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOi0xO2NvbnN0IEh0PWYucnVuSG9va3MoIm1vZGlmeUNvbEhlYWRlciIsdnQpO2lmKHZvaWQgMD09PUh0KXtjb25zdCBxcj1bXSxvbj1mLmNvdW50Q29s''@;'; put 'put ''cygpO2ZvcihsZXQgeW49MDt5bjxvbjt5bisrKXFyLnB1c2goZi5nZXRDb2xIZWFkZXIoeW4pKTtyZXR1cm4gcXJ9bGV0IEhuPWR0LmNvbEhlYWRlcnM7Y29uc3QgYXI9Zi50b1BoeXNpY2FsQ29sdW1uKEh0KSxIcj1mdW5jdGlvbihxcil7Y29uc3Qgb249W10seW49Zi5jb3VudENvbHMoKTts''@;'; put 'put ''ZXQgcG49MDtmb3IoO3BuPHluO3BuKyspbWwoZHQuY29sdW1ucykmJmR0LmNvbHVtbnMocG4pJiZvbi5wdXNoKHBuKTtyZXR1cm4gb25bcXJdfShhcik7cmV0dXJuITE9PT1kdC5jb2xIZWFkZXJzP0huPW51bGw6ZHQuY29sdW1ucyYmbWwoZHQuY29sdW1ucykmJmR0LmNvbHVtbnMoSHIpJiZk''@;'; put 'put ''dC5jb2x1bW5zKEhyKS50aXRsZT9Ibj1kdC5jb2x1bW5zKEhyKS50aXRsZTpkdC5jb2x1bW5zJiZkdC5jb2x1bW5zW2FyXSYmZHQuY29sdW1uc1thcl0udGl0bGU/SG49ZHQuY29sdW1uc1thcl0udGl0bGU6QXJyYXkuaXNBcnJheShkdC5jb2xIZWFkZXJzKSYmdm9pZCAwIT09ZHQuY29sSGVh''@;'; put 'put ''ZGVyc1thcl0/SG49ZHQuY29sSGVhZGVyc1thcl06bWwoZHQuY29sSGVhZGVycyk/SG49ZHQuY29sSGVhZGVycyhhcik6ZHQuY29sSGVhZGVycyYmInN0cmluZyIhPXR5cGVvZiBkdC5jb2xIZWFkZXJzJiYibnVtYmVyIiE9dHlwZW9mIGR0LmNvbEhlYWRlcnMmJihIbj1oUChIdCkpLEhuPWYu''@;'; put 'put ''cnVuSG9va3MoIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixIbix2dCxOdCksSG59LHRoaXMuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ7aWYodnQ+PTAmJihOdD1mLmdldENlbGxNZXRhKDAsdnQpLndpZHRoKSwodm9pZCAwPT09TnR8fE50PT09ZHQud2lk''@;'; put 'put ''dGgpJiYoTnQ9ZHQuY29sV2lkdGhzKSxudWxsIT1OdCl7c3dpdGNoKHR5cGVvZiBOdCl7Y2FzZSJvYmplY3QiOk50PU50W3Z0XTticmVhaztjYXNlImZ1bmN0aW9uIjpOdD1OdCh2dCl9InN0cmluZyI9PXR5cGVvZiBOdCYmKE50PXBhcnNlSW50KE50LDEwKSl9cmV0dXJuIE50fSx0aGlzLmdl''@;'; put 'put ''dENvbFdpZHRoPWZ1bmN0aW9uKHZ0LE50KXtsZXQgSHQ9Zi5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3ModnQpO3JldHVybiBIdD1mLnJ1bkhvb2tzKCJtb2RpZnlDb2xXaWR0aCIsSHQsdnQsTnQpLHZvaWQgMD09PUh0JiYoSHQ9X18pLEh0fSx0aGlzLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGlu''@;'; put 'put ''Z3M9ZnVuY3Rpb24odnQpe2NvbnN0IE50PXRoaXMudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IEh0PWR0LnJvd0hlaWdodHM7aWYobnVsbCE9SHQpe3N3aXRjaCh0eXBlb2YgSHQpe2Nhc2Uib2JqZWN0IjpIdD1IdFt2dF07YnJlYWs7Y2FzZSJmdW5jdGlvbiI6SHQ9SHQodnQpfSJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgSHQmJihIdD1wYXJzZUludChIdCwxMCkpfXJldHVybiBudWxsIT1IdCYmSHQ8TnQ/TnQ6SHR9LHRoaXMuZ2V0Um93SGVpZ2h0PWZ1bmN0aW9uKHZ0LE50KXtsZXQgSHQ9Zi5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gSHQ9Zi5ydW5Ib29rcygi''@;'; put 'put ''bW9kaWZ5Um93SGVpZ2h0IixIdCx2dCxOdCksSHR9LHRoaXMuY291bnRTb3VyY2VSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIEQuY291bnRSb3dzKCl9LHRoaXMuY291bnRTb3VyY2VDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIEQuY291bnRGaXJzdFJvd0tleXMoKX0sdGhpcy5jb3VudFJvd3M9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gTS5nZXRMZW5ndGgoKX0sdGhpcy5jb3VudENvbHM9ZnVuY3Rpb24oKXtjb25zdCB2dD1kdC5tYXhDb2xzLE50PXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtyZXR1cm4gTWF0aC5taW4odnQsTnQpfSx0aGlzLmNvdW50''@;'; put 'put ''UmVuZGVyZWRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxlUm93cz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RU''@;'; put 'put ''YWJsZS5nZXRWaXNpYmxlUm93c0NvdW50KCk6LTF9LHRoaXMuY291bnRSZW5kZXJlZENvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudFZpc2libGVDb2xzPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFZpc2libGVDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudFJvd0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3LmdldFJvd0hlYWRlcnNDb3VudCgpfSx0aGlzLmNvdW50Q29sSGVh''@;'; put 'put ''ZGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl9LHRoaXMuY291bnRFbXB0eVJvd3M9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxOdD0wO3JldHVybiBY''@;'; put 'put ''JChmLmNvdW50Um93cygpLTEsSHQ9PntpZihmLmlzRW1wdHlSb3coSHQpKU50Kz0xO2Vsc2UgaWYoITA9PT12dClyZXR1cm4hMX0pLE50fSx0aGlzLmNvdW50RW1wdHlDb2xzPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1''@;'; put 'put ''bWVudHNbMF0sTnQ9MDtyZXR1cm4gWCQoZi5jb3VudENvbHMoKS0xLEh0PT57aWYoZi5pc0VtcHR5Q29sKEh0KSlOdCs9MTtlbHNlIGlmKCEwPT09dnQpcmV0dXJuITF9KSxOdH0sdGhpcy5pc0VtcHR5Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gZHQuaXNFbXB0eVJvdy5jYWxsKGYsdnQpfSx0''@;'; put 'put ''aGlzLmlzRW1wdHlDb2w9ZnVuY3Rpb24odnQpe3JldHVybiBkdC5pc0VtcHR5Q29sLmNhbGwoZix2dCl9LHRoaXMuc2VsZWN0Q2VsbD1mdW5jdGlvbih2dCxOdCxIdCxIbil7bGV0IHRyPSEoYXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0s''@;'; put 'put ''YXI9IShhcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XSl8fGFyZ3VtZW50c1s1XTtyZXR1cm4hX2ModnQpJiYhX2MoTnQpJiZ0aGlzLnNlbGVjdENlbGxzKFtbdnQsTnQsSHQsSG5dXSx0cixhcil9LHRoaXMuc2VsZWN0Q2VsbHM9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltbXV0sSHQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTshMT09PSghKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzFdKXx8YXJndW1lbnRzWzFdKSYmYmUuc3VzcGVuZCgpO2NvbnN0IEhuPUdyLnNlbGVjdENlbGxzKHZ0KTtyZXR1cm4gSG4mJkh0JiZmLmxpc3RlbigpLGJlLnJlc3VtZSgpLEhufSx0aGlzLnNlbGVjdENvbHVtbnM9ZnVuY3Rpb24odnQpe3JldHVybiBHci5zZWxlY3RDb2x1bW5zKHZ0LGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2dCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHRoaXMuc2VsZWN0Um93cz1mdW5jdGlvbih2dCl7cmV0dXJuIEdyLnNlbGVjdFJvd3ModnQsYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZ0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sdGhpcy5kZXNlbGVjdENlbGw9ZnVuY3Rpb24oKXtHci5kZXNlbGVjdCgpfSx0aGlzLnNlbGVjdEFsbD1mdW5jdGlvbigpe2xldCB2dD0hKGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2dCxIdD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtiZS5za2lw''@;'; put 'put ''TmV4dFNjcm9sbEN5Y2xlKCksR3Iuc2VsZWN0QWxsKHZ0LE50LEh0KX07Y29uc3Qgd2k9KHZ0LE50KT0+dnQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE50LDEsITApO3RoaXMuc2Nyb2xsVmlld3BvcnRUbz1mdW5jdGlvbih2dCxOdCl7dmFyIEh0OyJudW1iZXIiPT10eXBlb2YgdnQmJih2''@;'; put 'put ''dD17cm93OmFyZ3VtZW50c1swXSxjb2w6YXJndW1lbnRzWzFdLHZlcnRpY2FsU25hcDphcmd1bWVudHNbMl0/ImJvdHRvbSI6InRvcCIsaG9yaXpvbnRhbFNuYXA6YXJndW1lbnRzWzNdPyJlbmQiOiJzdGFydCIsY29uc2lkZXJIaWRkZW5JbmRleGVzOm51bGw9PT0oSHQ9YXJndW1lbnRzWzRd''@;'; put 'put ''KXx8dm9pZCAwPT09SHR8fEh0fSk7Y29uc3R7cm93OkhuLGNvbDp0cixjb25zaWRlckhpZGRlbkluZGV4ZXM6YXJ9PXZ0Pz97fTtsZXQgSHI9SG4scXI9dHI7aWYobWwoTnQpJiZ0aGlzLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIsTnQpLHZvaWQgMD09PWFyfHxhcil7Y29uc3QgcHI9TnVt''@;'; put 'put ''YmVyLmlzSW50ZWdlcihIbikmJkhuPj0wLCRuPU51bWJlci5pc0ludGVnZXIodHIpJiZ0cj49MCxkcj1wcj93aSh0aGlzLnJvd0luZGV4TWFwcGVyLEhuKTp2b2lkIDAsVXI9JG4/d2kodGhpcy5jb2x1bW5JbmRleE1hcHBlcix0cik6dm9pZCAwO2lmKG51bGw9PT1kcnx8bnVsbD09PVVyKXJl''@;'; put 'put ''dHVybiExO0hyPXByP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkcik6SG4scXI9JG4/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFVyKTp0cn1jb25zdCBvbj1OdW1iZXIuaXNJbnRlZ2VyKEhyKSx5bj1OdW1i''@;'; put 'put ''ZXIuaXNJbnRlZ2VyKHFyKTtsZXQgcG49ITE7cmV0dXJuIG9uJiZIcj49MCYmeW4mJnFyPj0wP3BuPWYudmlldy5zY3JvbGxWaWV3cG9ydChmLl9jcmVhdGVDZWxsQ29vcmRzKEhyLHFyKSx2dC5ob3Jpem9udGFsU25hcCx2dC52ZXJ0aWNhbFNuYXApOm9uJiZIcj49MCYmKHluJiZxcjwwfHwh''@;'; put 'put ''eW4pP3BuPWYudmlldy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoSHIsdnQudmVydGljYWxTbmFwKTp5biYmcXI+PTAmJihvbiYmSHI8MHx8IW9uKSYmKHBuPWYudmlldy5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShxcix2dC5ob3Jpem9udGFsU25hcCkpLG1sKE50KSYmKHBuP3RoaXMu''@;'; put 'put ''dmlldy5yZW5kZXIoKToodGhpcy5yZW1vdmVIb29rKCJhZnRlclNjcm9sbCIsTnQpLHRoaXMuX3JlZ2lzdGVyTWljcm90YXNrKCgpPT5OdCgpKSkpLHBufSx0aGlzLnNjcm9sbFRvRm9jdXNlZENlbGw9ZnVuY3Rpb24odnQpe2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkpcmV0dXJu''@;'; put 'put ''ITE7bWwodnQpJiZ0aGlzLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIsdnQpO2NvbnN0e2hpZ2hsaWdodDpOdH09dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLEh0PXRoaXMuc2Nyb2xsVmlld3BvcnRUbyhOdC50b09iamVjdCgpKTtyZXR1cm4gSHQ/dGhpcy52aWV3LnJlbmRlcigpOm1s''@;'; put 'put ''KHZ0KSYmKHRoaXMucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLHZ0KSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaygoKT0+dnQoKSkpLEh0fSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZihmLl9jbGVhclRpbWVvdXRzKCksZi5fY2xlYXJJbW1lZGlhdGVzKCksZi52aWV3JiZmLnZpZXcuZGVz''@;'; put 'put ''dHJveSgpLEQmJkQuZGVzdHJveSgpLEQ9bnVsbCx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcigpLmRlc3Ryb3koKSxwdC5jbGVhckNhY2hlKCksRFguZGVsZXRlKHRoaXMuZ3VpZCksY1AoZikpe2NvbnN0IHZ0PXRoaXMucm9vdERvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5ob3QtZGlzcGxheS1s''@;'; put 'put ''aWNlbnNlLWluZm8iKTt2dCYmdnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2dCl9eHAoZi5yb290RWxlbWVudCksdi5kZXN0cm95KCkscmUmJnJlLmRlc3Ryb3koKSxmLmJhdGNoRXhlY3V0aW9uKCgpPT57Zi5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyQWxsKCksZi5jb2x1bW5JbmRleE1h''@;'; put 'put ''cHBlci51bnJlZ2lzdGVyQWxsKCksdm4uZ2V0SXRlbXMoKS5mb3JFYWNoKHZ0PT57bGV0WyxOdF09dnQ7TnQuZGVzdHJveSgpfSksdm4uY2xlYXIoKSxmLnJ1bkhvb2tzKCJhZnRlckRlc3Ryb3kiKX0sITApLFNhLmdldFNpbmdsZXRvbigpLmRlc3Ryb3koZiksWG8oZiwodnQsTnQsSHQpPT57''@;'; put 'put ''bWwodnQpP0h0W050XT1mdW5jdGlvbiBlYSh2dCl7cmV0dXJuKCk9Pnt0aHJvdyBuZXcgRXJyb3IoYFRoZSAiJHt2dH0iIG1ldGhvZCBjYW5ub3QgYmUgY2FsbGVkIGJlY2F1c2UgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdHJveWVkYCl9fShOdCk6Imd1aWQiIT09''@;'; put 'put ''TnQmJihIdFtOdF09bnVsbCl9KSxmLmlzRGVzdHJveWVkPSEwLE0mJk0uZGVzdHJveSgpLE09bnVsbCxaPW51bGwsR3I9bnVsbCxyZT1udWxsLGY9bnVsbH0sdGhpcy5nZXRBY3RpdmVFZGl0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gcmUuZ2V0QWN0aXZlRWRpdG9yKCl9LHRoaXMuZ2V0Rmlyc3RS''@;'; put 'put ''ZW5kZXJlZFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCl9LHRoaXMuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpfSx0aGlzLmdl''@;'; put 'put ''dEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RSZW5kZXJlZFZpc2li''@;'; put 'put ''bGVDb2x1bW4oKX0sdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0RnVsbHlWaXNpYmxl''@;'; put 'put ''Um93KCl9LHRoaXMuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdEZ1bGx5Vmlz''@;'; put 'put ''aWJsZUNvbHVtbigpfSx0aGlzLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl9LHRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExh''@;'; put 'put ''c3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl9LHRoaXMuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBmLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRQbHVnaW49ZnVuY3Rpb24odnQpe3JldHVybiB2bi5nZXRJdGVtKHAxKHZ0KSl9LHRoaXMuZ2V0UGx1Z2luTmFtZT1mdW5jdGlvbih2dCl7cmV0dXJuIHZ0PT09dGhpcy51bmRvUmVkbz90aGlz''@;'; put 'put ''LnVuZG9SZWRvLmNvbnN0cnVjdG9yLlBMVUdJTl9LRVk6dm4uZ2V0SWQodnQpfSx0aGlzLmdldEluc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHRoaXMuYWRkSG9vaz1mdW5jdGlvbih2dCxOdCxIdCl7U2EuZ2V0U2luZ2xldG9uKCkuYWRkKHZ0LE50LGYsSHQpfSx0aGlzLmhhc0hvb2s9''@;'; put 'put ''ZnVuY3Rpb24odnQpe3JldHVybiBTYS5nZXRTaW5nbGV0b24oKS5oYXModnQsZil8fFNhLmdldFNpbmdsZXRvbigpLmhhcyh2dCl9LHRoaXMuYWRkSG9va09uY2U9ZnVuY3Rpb24odnQsTnQsSHQpe1NhLmdldFNpbmdsZXRvbigpLm9uY2UodnQsTnQsZixIdCl9LHRoaXMucmVtb3ZlSG9vaz1m''@;'; put 'put ''dW5jdGlvbih2dCxOdCl7U2EuZ2V0U2luZ2xldG9uKCkucmVtb3ZlKHZ0LE50LGYpfSx0aGlzLnJ1bkhvb2tzPWZ1bmN0aW9uKHZ0LE50LEh0LEhuLHRyLGFyLEhyKXtyZXR1cm4gU2EuZ2V0U2luZ2xldG9uKCkucnVuKGYsdnQsTnQsSHQsSG4sdHIsYXIsSHIpfSx0aGlzLmdldFRyYW5zbGF0''@;'; put 'put ''ZWRQaHJhc2U9ZnVuY3Rpb24odnQsTnQpe3JldHVybiBaM2UoZHQubGFuZ3VhZ2UsdnQsTnQpfSx0aGlzLnRvSFRNTD0oKT0+SyQodGhpcyksdGhpcy50b1RhYmxlRWxlbWVudD0oKT0+e2NvbnN0IHZ0PXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB2dC5p''@;'; put 'put ''bnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLEskKHRoaXMpKSx2dC5maXJzdEVsZW1lbnRDaGlsZH0sdGhpcy50aW1lb3V0cz1bXSx0aGlzLnVzZVRoZW1lPXZ0PT57dGhpcy52aWV3LmdldFN0eWxlc0hhbmRsZXIoKS51c2VUaGVtZSh2dCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZXRU''@;'; put 'put ''aGVtZSIsdnQsISFFZSl9LHRoaXMuZ2V0Q3VycmVudFRoZW1lTmFtZT0oKT0+dGhpcy52aWV3LmdldFN0eWxlc0hhbmRsZXIoKS5nZXRUaGVtZU5hbWUoKSx0aGlzLl9yZWdpc3RlclRpbWVvdXQ9ZnVuY3Rpb24odnQpe2xldCBIdD12dDsiZnVuY3Rpb24iPT10eXBlb2YgSHQmJihIdD1zZXRU''@;'; put 'put ''aW1lb3V0KEh0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowKSksdGhpcy50aW1lb3V0cy5wdXNoKEh0KX0sdGhpcy5fY2xlYXJUaW1lb3V0cz1mdW5jdGlvbigpe1luKHRoaXMudGltZW91dHMsdnQ9PntjbGVhclRpbWVvdXQodnQpfSl9''@;'; put 'put ''LHRoaXMuaW1tZWRpYXRlcz1bXSx0aGlzLl9yZWdpc3RlckltbWVkaWF0ZT1mdW5jdGlvbih2dCl7dGhpcy5pbW1lZGlhdGVzLnB1c2goc2V0SW1tZWRpYXRlKHZ0KSl9LHRoaXMuX2NsZWFySW1tZWRpYXRlcz1mdW5jdGlvbigpe1luKHRoaXMuaW1tZWRpYXRlcyx2dD0+e2NsZWFySW1tZWRp''@;'; put 'put ''YXRlKHZ0KX0pfSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaz1mdW5jdGlvbih2dCl7dGhpcy5yb290V2luZG93LnF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5pc0Rlc3Ryb3llZHx8dnQoKX0pfSx0aGlzLl9nZXRFZGl0b3JNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHJlfTtjb25zdCBmYT1x''@;'; put 'put ''cnQoe2hhbmRsZUV2ZW50OigpPT5mLmlzTGlzdGVuaW5nKCksYmVmb3JlS2V5RG93bjp2dD0+dGhpcy5ydW5Ib29rcygiYmVmb3JlS2V5RG93biIsdnQpLGFmdGVyS2V5RG93bjp2dD0+e3RoaXMuaXNEZXN0cm95ZWR8fGYucnVuSG9va3MoImFmdGVyRG9jdW1lbnRLZXlEb3duIix2dCl9LG93''@;'; put 'put ''bmVyV2luZG93OnRoaXMucm9vdFdpbmRvd30pO3RoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIix2dD0+eyExPT09dnQuY3RybEtleSYmITE9PT12dC5tZXRhS2V5JiZmYS5yZWxlYXNlUHJlc3NlZEtleXMoKX0pLHRoaXMuZ2V0U2hvcnRjdXRNYW5hZ2VyPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGZhfSx0aGlzLmdldEZvY3VzTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiBjZX0sbksoKS5mb3JFYWNoKHZ0PT57Y29uc3QgTnQ9SUUodnQpO3ZuLmFkZEl0ZW0odnQsbmV3IE50KHRoaXMpKX0pLGZ1bmN0aW9uIEtpdChjKXtbJGl0LEdpdF0uZm9yRWFjaChsPT5sKGMpKX0oZiks''@;'; put 'put ''ZmEuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSxTYS5nZXRTaW5nbGV0b24oKS5ydW4oZiwiY29uc3RydWN0Iil9ZnVuY3Rpb24gRXBlKGMsbCxhKXtjLmFkZEV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBUcGUoYyxsLGEpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsITEp''@;'; put 'put ''fWZ1bmN0aW9uIFZQKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjKX1mdW5jdGlvbiBBcGUoYyl7Y29uc3QgYT17bWluSGVpZ2h0OjIwMCxtYXhIZWlnaHQ6MzAwLG1pbldpZHRoOjEwMCxtYXhXaWR0aDozMDAsdGV4dENvbnRlbnQ6Y2U9''@;'; put 'put ''PmNlLnZhbHVlLC4uLmFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fX0sZD1jLmJvZHksaD1jLmNyZWF0ZVRleHROb2RlKCIiKSxmPWMuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCB2O2Z1bmN0aW9uIE0oKXt2YXIgY2UsYmU7aC50ZXh0''@;'; put 'put ''Q29udGVudD1hLnRleHRDb250ZW50KHYpLGYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixmLnN0eWxlLmZvbnRTaXplPVZQKHYpLmZvbnRTaXplLGYuc3R5bGUuZm9udEZhbWlseT1WUCh2KS5mb250RmFtaWx5LGYuc3R5bGUud2hpdGVTcGFjZT0icHJlIixkLmFwcGVuZENoaWxkKGYpO2Nv''@;'; put 'put ''bnN0IEVlPXBhcnNlSW50KChudWxsPT09KGNlPVZQKHYpKXx8dm9pZCAwPT09Y2U/dm9pZCAwOmNlLnBhZGRpbmdJbmxpbmVTdGFydCl8fDAsMTApLEJlPXBhcnNlSW50KChudWxsPT09KGJlPVZQKHYpKXx8dm9pZCAwPT09YmU/dm9pZCAwOmJlLnBhZGRpbmdJbmxpbmVFbmQpfHwwLDEwKSxx''@;'; put 'put ''ZT1mLmNsaWVudFdpZHRoK0VlK0JlKzE7ZC5yZW1vdmVDaGlsZChmKTtjb25zdCBydD12LnN0eWxlO3J0LmhlaWdodD1gJHthLm1pbkhlaWdodH1weGAscnQud2lkdGg9YS5taW5XaWR0aD5xZT9gJHthLm1pbldpZHRofXB4YDpxZT5hLm1heFdpZHRoP2Ake2EubWF4V2lkdGh9cHhgOmAke3Fl''@;'; put 'put ''fXB4YDtjb25zdCBwdD12LnNjcm9sbEhlaWdodD92LnNjcm9sbEhlaWdodC0xOjA7YS5taW5IZWlnaHQ+cHQ/cnQuaGVpZ2h0PWAke2EubWluSGVpZ2h0fXB4YDphLm1heEhlaWdodDxwdD8ocnQuaGVpZ2h0PWAke2EubWF4SGVpZ2h0fXB4YCxydC5vdmVyZmxvd1k9InZpc2libGUiKTpydC5o''@;'; put 'put ''ZWlnaHQ9YCR7cHR9cHhgfWZ1bmN0aW9uIEQoKXtjLmRlZmF1bHRWaWV3LnNldFRpbWVvdXQoTSwwKX1yZXR1cm57aW5pdDpmdW5jdGlvbiByZShjZSxiZSl7bGV0IEVlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07dj1jZSxmdW5jdGlv''@;'; put 'put ''biBaKGNlKXtpZihjZSYmY2UubWluSGVpZ2h0KWlmKCJpbmhlcml0Ij09PWNlLm1pbkhlaWdodClhLm1pbkhlaWdodD12LmNsaWVudEhlaWdodDtlbHNle2NvbnN0IGJlPXBhcnNlSW50KGNlLm1pbkhlaWdodCwxMCk7aXNOYU4oYmUpfHwoYS5taW5IZWlnaHQ9YmUpfWlmKGNlJiZjZS5tYXhI''@;'; put 'put ''ZWlnaHQpaWYoImluaGVyaXQiPT09Y2UubWF4SGVpZ2h0KWEubWF4SGVpZ2h0PXYuY2xpZW50SGVpZ2h0O2Vsc2V7Y29uc3QgYmU9cGFyc2VJbnQoY2UubWF4SGVpZ2h0LDEwKTtpc05hTihiZSl8fChhLm1heEhlaWdodD1iZSl9aWYoY2UmJmNlLm1pbldpZHRoKWlmKCJpbmhlcml0Ij09PWNl''@;'; put 'put ''Lm1pbldpZHRoKWEubWluV2lkdGg9di5jbGllbnRXaWR0aDtlbHNle2NvbnN0IGJlPXBhcnNlSW50KGNlLm1pbldpZHRoLDEwKTtpc05hTihiZSl8fChhLm1pbldpZHRoPWJlKX1pZihjZSYmY2UubWF4V2lkdGgpaWYoImluaGVyaXQiPT09Y2UubWF4V2lkdGgpYS5tYXhXaWR0aD12LmNsaWVu''@;'; put 'put ''dFdpZHRoO2Vsc2V7Y29uc3QgYmU9cGFyc2VJbnQoY2UubWF4V2lkdGgsMTApO2lzTmFOKGJlKXx8KGEubWF4V2lkdGg9YmUpfWYuZmlyc3RDaGlsZHx8KGYuY2xhc3NOYW1lPSJhdXRvUmVzaXplIixmLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIsZi5hcHBlbmRDaGlsZChoKSl9KGJl''@;'; put 'put ''KSwiVEVYVEFSRUEiPT09di5ub2RlTmFtZSYmKHYuc3R5bGUucmVzaXplPSJub25lIix2LnN0eWxlLmhlaWdodD1gJHthLm1pbkhlaWdodH1weGAsdi5zdHlsZS5taW5XaWR0aD1gJHthLm1pbldpZHRofXB4YCx2LnN0eWxlLm1heFdpZHRoPWAke2EubWF4V2lkdGh9cHhgLHYuc3R5bGUub3Zl''@;'; put 'put ''cmZsb3dZPSJoaWRkZW4iKSxFZSYmKEVwZSh2LCJpbnB1dCIsTSksRXBlKHYsImtleWRvd24iLEQpKSxNKCl9LHJlc2l6ZTpNLHVuT2JzZXJ2ZSgpe1RwZSh2LCJpbnB1dCIsTSksVHBlKHYsImtleWRvd24iLEQpfX19ZnVuY3Rpb24ga3BlKGMsbCl7Y29uc3QgYT1TJChsKSxkPWwudmFsdWUu''@;'; put 'put ''c3BsaXQoIlxuIik7bGV0IGg9YSxmPTA7Zm9yKGxldCB2PTA7djxkLmxlbmd0aDt2KyspezAhPT12JiYoZis9ZFt2LTFdLmxlbmd0aCsxKTtjb25zdCBEPWYrZFt2XS5sZW5ndGg7aWYoImhvbWUiPT09Yz9oPWY6ImVuZCI9PT1jJiYoaD1EKSxhPD1EKWJyZWFrfXdFKGwsaCl9ZnVuY3Rpb24g''@;'; put 'put ''aTkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHFpdChjKXt2YXIgbD1mdW5jdGlvbiBYaXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIp''@;'; put 'put ''O2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wi''@;'; put 'put ''PT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IEJQPSJodF9lZGl0b3JfaGlkZGVuIixEcGU9InRleHRFZGl0b3IiO2NsYXNz''@;'; put 'put ''IGE5IGV4dGVuZHMga197c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0ZXh0In1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxpOSh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBqMih0aGlzKSksaTkodGhpcywiYXV0b1Jlc2l6ZSIsQXBlKHRoaXMuaG90LnJvb3REb2N1bWVudCkpLGk5''@;'; put 'put ''KHRoaXMsIlRFWFRBUkVBIix2b2lkIDApLGk5KHRoaXMsInRleHRhcmVhU3R5bGUiLHZvaWQgMCksaTkodGhpcywiVEVYVEFSRUFfUEFSRU5UIix2b2lkIDApLGk5KHRoaXMsInRleHRhcmVhUGFyZW50U3R5bGUiLHZvaWQgMCksaTkodGhpcywibGF5ZXJDbGFzcyIsdm9pZCAwKSx0aGlzLmV2''@;'; put 'put ''ZW50TWFuYWdlcj1uZXcgajIodGhpcyksdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMuYmluZEV2ZW50cygpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlckRlc3Ryb3kiLCgpPT50aGlzLmRlc3Ryb3koKSl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5URVhUQVJFQS52YWx1ZX1zZXRWYWx1''@;'; put 'put ''ZShsKXt0aGlzLlRFWFRBUkVBLnZhbHVlPWx9b3Blbigpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0''@;'; put 'put ''Y3V0cygpfWNsb3NlKCl7dGhpcy5hdXRvUmVzaXplLnVuT2JzZXJ2ZSgpLHZFKHRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMuaG90LnJvb3RFbGVtZW50KSYmdGhpcy5ob3QubGlzdGVuKCksdGhpcy5oaWRlRWRpdGFibGVFbGVtZW50KCksdGhpcy51bnJlZ2lzdGVy''@;'; put 'put ''U2hvcnRjdXRzKCl9cHJlcGFyZShsLGEsZCxoLGYsdil7Y29uc3QgTT10aGlzLnN0YXRlO2lmKHN1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpLCF2LnJlYWRPbmx5KXt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCEwKTtjb25zdHthbGxvd0ludmFsaWQ6RH09djtEJiYhdGhpcy5pc09wZW5lZCgp''@;'; put 'put ''JiYodGhpcy5URVhUQVJFQS52YWx1ZT0iIiksTSE9PWx1LkZJTklTSEVEJiYhdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmhpZGVFZGl0YWJsZUVsZW1lbnQoKX19YmVnaW5FZGl0aW5nKGwsYSl7dGhpcy5zdGF0ZT09PWx1LlZJUkdJTiYmKHRoaXMuVEVYVEFSRUEudmFsdWU9IiIsc3VwZXIuYmVn''@;'; put 'put ''aW5FZGl0aW5nKGwsYSkpfWZvY3VzKCl7dGhpcy5URVhUQVJFQS5zZWxlY3QoKSx3RSh0aGlzLlRFWFRBUkVBLHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDt0aGlzLlRFWFRBUkVBPWwuY3JlYXRlRWxl''@;'; put 'put ''bWVudCgiVEVYVEFSRUEiKSx2byh0aGlzLlRFWFRBUkVBLFtbImRhdGEtaG90LWlucHV0IiwiIl0sTjcoLTEpXSksVGkodGhpcy5URVhUQVJFQSwiaGFuZHNvbnRhYmxlSW5wdXQiKSx0aGlzLnRleHRhcmVhU3R5bGU9dGhpcy5URVhUQVJFQS5zdHlsZSx0aGlzLnRleHRhcmVhU3R5bGUud2lk''@;'; put 'put ''dGg9MCx0aGlzLnRleHRhcmVhU3R5bGUuaGVpZ2h0PTAsdGhpcy50ZXh0YXJlYVN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIsdGhpcy5URVhUQVJFQV9QQVJFTlQ9bC5jcmVhdGVFbGVtZW50KCJESVYiKSxUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCwiaGFuZHNvbnRhYmxlSW5wdXRIb2xkZXIi''@;'; put 'put ''KSxwbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpJiZsbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpLFRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULEJQKSx0aGlzLnRleHRhcmVhUGFyZW50U3R5bGU9dGhpcy5URVhUQVJFQV9QQVJFTlQuc3R5bGUs''@;'; put 'put ''dGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQSksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQV9QQVJFTlQpfWhpZGVFZGl0YWJsZUVsZW1lbnQoKXt0ZmUoKSYmKHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSIt''@;'; put 'put ''OTk5OTlweCIpLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vcGFjaXR5PSIwIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUuaGVpZ2h0PSIxcHgiLGxvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcyks''@;'; put 'put ''VGkodGhpcy5URVhUQVJFQV9QQVJFTlQsQlApfXNob3dFZGl0YWJsZUVsZW1lbnQoKXt0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUuaGVpZ2h0PSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vdmVyZmxvdz0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUucG9zaXRpb249IiIsdGhpcy50''@;'; put 'put ''ZXh0YXJlYVBhcmVudFN0eWxlW3RoaXMuaG90LmlzUnRsKCk/ImxlZnQiOiJyaWdodCJdPSJhdXRvIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0eT0iMSIsdGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRlbnQ9IiI7Y29uc3QgbD10aGlzLlRFWFRBUkVBX1BBUkVOVC5jaGlsZE5v''@;'; put 'put ''ZGVzO2xldCBhPSExO0dhKGwubGVuZ3RoLTEsZD0+e2lmKHBvKGxbZF0sImhhbmRzb250YWJsZUVkaXRvciIpKXJldHVybiBhPSEwLCExfSkscG8odGhpcy5URVhUQVJFQV9QQVJFTlQsQlApJiZsbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCxCUCksYT8odGhpcy5sYXllckNsYXNzPSJodF9lZGl0''@;'; put 'put ''b3JfdmlzaWJsZSIsVGkodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSk6KHRoaXMubGF5ZXJDbGFzcz10aGlzLmdldEVkaXRlZENlbGxzTGF5ZXJDbGFzcygpLFRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykpfXJlZnJlc2hWYWx1ZSgpe2NvbnN0''@;'; put 'put ''IGw9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0aGlzLnJvdyksYT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsdGhpcy5jb2wpO3RoaXMub3JpZ2luYWxWYWx1ZT1hLHRoaXMuc2V0VmFsdWUoYSksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNpb25zKCl7bGV0''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLnN0YXRlIT09bHUuRURJVElORyYmIWwpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQobHx8dGhpcy5jbG9zZSgp''@;'; put 'put ''KTtjb25zdHt0b3A6YSxzdGFydDpkLHdpZHRoOmgsbWF4V2lkdGg6ZixoZWlnaHQ6dixtYXhIZWlnaHQ6TX09dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS50b3A9YCR7YX1weGAsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlW3RoaXMuaG90LmlzUnRs''@;'; put 'put ''KCk/InJpZ2h0IjoibGVmdCJdPWAke2R9cHhgLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpO2NvbnN0IEQ9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuVEQpO3RoaXMuVEVYVEFSRUEuc3R5bGUuZm9udFNpemU9RC5mb250U2l6ZSx0aGlzLlRFWFRBUkVBLnN0''@;'; put 'put ''eWxlLmZvbnRGYW1pbHk9RC5mb250RmFtaWx5LHRoaXMuVEVYVEFSRUEuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMuVEQuc3R5bGUuYmFja2dyb3VuZENvbG9yLHRoaXMuYXV0b1Jlc2l6ZS5pbml0KHRoaXMuVEVYVEFSRUEse21pbldpZHRoOk1hdGgubWluKGgsZiksbWluSGVpZ2h0Ok1h''@;'; put 'put ''dGgubWluKHYsTSksbWF4V2lkdGg6ZixtYXhIZWlnaHQ6TX0sITApfWJpbmRFdmVudHMoKXtPJCgpJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuVEVYVEFSRUEsImZvY3Vzb3V0IiwoKT0+dGhpcy5maW5pc2hFZGl0aW5nKCExKSksdGhpcy5hZGRIb29rKCJhZnRl''@;'; put 'put ''clNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLCgpPT57dGhpcy5yZWZy''@;'; put 'put ''ZXNoRGltZW5zaW9ucygpLHRoaXMuc3RhdGU9PT1sdS5FRElUSU5HJiZ0aGlzLmZvY3VzKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnN0YXRlPT09bHUuRURJVElORyYmdGhpcy5mb2N1cygpfSl9YWxsb3dLZXlF''@;'; put 'put ''dmVudFByb3BhZ2F0aW9uKCl7fWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGg9KCk9Pnt0aGlz''@;'; put 'put ''LmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2VydFRleHQiLCExLCJcbiIpfTthLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6Zj0+IXRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCkm''@;'; put 'put ''JiFmLmFsdEtleX0se2tleXM6W1siTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6KCk9PiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpfSx7a2V5czpbWyJBbHQiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGgoKSwhMSl9LHtrZXlzOltbIkhv''@;'; put 'put ''bWUiXV0sY2FsbGJhY2s6KGYsdik9PntsZXRbTV09djtrcGUoTSx0aGlzLlRFWFRBUkVBKX19LHtrZXlzOltbIkVuZCJdXSxjYWxsYmFjazooZix2KT0+e2xldFtNXT12O2twZShNLHRoaXMuVEVYVEFSRUEpfX1dLHtydW5Pbmx5SWY6KCk9PlBhKHRoaXMuaG90LmdldFNlbGVjdGVkKCkpLGdy''@;'; put 'put ''b3VwOkRwZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKERwZSl9fWZ1bmN0aW9uIG9UKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09di5hcmlhVGFncyxEPVtdLFo9''@;'; put 'put ''W10scmU9W10sY2U9W107di5jbGFzc05hbWUmJlRpKGwsdi5jbGFzc05hbWUpLHYucmVhZE9ubHk/KEQucHVzaCh2LnJlYWRPbmx5Q2VsbENsYXNzTmFtZSksTSYmY2UucHVzaChrMmUoKSkpOk0mJnJlLnB1c2goazJlKClbMF0pLCExPT09di52YWxpZCYmdi5pbnZhbGlkQ2VsbENsYXNzTmFt''@;'; put 'put ''ZT8oRC5wdXNoKHYuaW52YWxpZENlbGxDbGFzc05hbWUpLE0mJmNlLnB1c2goRDJlKCkpKTooWi5wdXNoKHYuaW52YWxpZENlbGxDbGFzc05hbWUpLE0mJnJlLnB1c2goRDJlKClbMF0pKSwhMT09PXYud29yZFdyYXAmJnYubm9Xb3JkV3JhcENsYXNzTmFtZSYmRC5wdXNoKHYubm9Xb3JkV3Jh''@;'; put 'put ''cENsYXNzTmFtZSksIWYmJnYucGxhY2Vob2xkZXImJkQucHVzaCh2LnBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZSksbG8obCxaKSxUaShsLEQpLGo3KGwscmUpLHZvKGwsY2UpfWZ1bmN0aW9uIEFnKGMsbCxhLGQsaCxmLHYpe29ULmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKTtsZXQgTT1m''@;'; put 'put ''OyFNJiZ2LnBsYWNlaG9sZGVyJiYoTT12LnBsYWNlaG9sZGVyKSxNPWxjKE0pLHYudHJpbVdoaXRlc3BhY2UmJihNPU0udHJpbSgpKSxQbShsLE0pfW9ULlJFTkRFUkVSX1RZUEU9ImJhc2UiLEFnLlJFTkRFUkVSX1RZUEU9InRleHQiO2NvbnN0IElwZT17Q0VMTF9UWVBFOiJ0ZXh0IixlZGl0''@;'; put 'put ''b3I6YTkscmVuZGVyZXI6QWd9O2Z1bmN0aW9uIGgzKGMsbCl7Y29uc3QgYT1uZXcgeHBlKGMsbHx8e30sREspO3JldHVybiBhLmluaXQoKSxhfUcyKElwZSksaDMuZWRpdG9ycz17QmFzZUVkaXRvcjprX30saDMuQ29yZT1mdW5jdGlvbihjKXtyZXR1cm4gbmV3IHhwZShjLGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxESyl9LGgzLkRlZmF1bHRTZXR0aW5ncz1vcGUoKSxoMy5ob29rcz1TYS5nZXRTaW5nbGV0b24oKSxoMy5DZWxsQ29vcmRzPWlQLGgzLkNlbGxSYW5nZT1nSyxoMy5wYWNrYWdlTmFtZT0iaGFuZHNvbnRhYmxl''@;'; put 'put ''IixoMy5idWlsZERhdGU9IjI0LzA0LzIwMjUgMTA6NTk6MDAiLGgzLnZlcnNpb249IjE1LjMuMCIsaDMubGFuZ3VhZ2VzPXtkaWN0aW9uYXJ5S2V5czpsbnQsZ2V0TGFuZ3VhZ2VEaWN0aW9uYXJ5OlUzZSxnZXRMYW5ndWFnZXNEaWN0aW9uYXJpZXM6ZnVuY3Rpb24gZm50KCl7cmV0dXJuIGRu''@;'; put 'put ''dCgpfSxyZWdpc3Rlckxhbmd1YWdlRGljdGlvbmFyeTp6M2UsZ2V0VHJhbnNsYXRlZFBocmFzZTpaM2V9O2NvbnN0IG9zPWgzLG5hdD1bImNvbnRhaW5lciJdLElYPW5ldyBNYXAsUnBlPSJUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50IHdhcyBkZXN0''@;'; put 'put ''cm95ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIHByb3Blcmx5LiI7bGV0IFltPSgoKT0+e2NsYXNzIGN7Z2V0SW5zdGFuY2UoYSl7Y29uc3QgZD1JWC5nZXQoYSk7cmV0dXJuIGQuaXNEZXN0cm95ZWQ/KGNvbnNvbGUud2FybihScGUpLG51bGwpOmR9cmVnaXN0ZXJJbnN0YW5jZShhLGQpe3JldHVy''@;'; put 'put ''biBJWC5zZXQoYSxkKX1yZW1vdmVJbnN0YW5jZShhKXtyZXR1cm4gSVguZGVsZXRlKGEpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtj''@;'; put 'put ''b25zdCByYXQ9T2JqZWN0LmtleXMob3MuRGVmYXVsdFNldHRpbmdzKSxMcGU9b3MuaG9va3MuZ2V0UmVnaXN0ZXJlZCgpO2xldCBPcGU9KCgpPT57Y2xhc3MgY3ttZXJnZVNldHRpbmdzKGEpe2NvbnN0IGQ9InNldHRpbmdzImluIGEmJiJvYmplY3QiPT10eXBlb2YgYS5zZXR0aW5ncyxoPWQ/''@;'; put 'put ''YS5zZXR0aW5nczp7fTtyZXR1cm4gTHBlLmNvbmNhdChyYXQpLmZvckVhY2godj0+e2NvbnN0IE09THBlLmluZGV4T2Yodik+LTE7bGV0IEQ7ZCYmTSYmKEQ9YS5zZXR0aW5nc1t2XSksdm9pZCAwIT09YVt2XSYmKEQ9YVt2XSksdm9pZCAwIT09RCYmKGhbdl09Im5nWm9uZSJpbiBhJiYiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgRCYmTT9mdW5jdGlvbiguLi5aKXtyZXR1cm4gYS5uZ1pvbmUucnVuKCgpPT5ELmFwcGx5KHRoaXMsWikpfTpEKX0pLGh9cHJlcGFyZUNoYW5nZXMoYSl7Y29uc3QgZD17fTtyZXR1cm4gT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmPT57YS5oYXNPd25Qcm9wZXJ0eShm''@;'; put 'put ''KSYmKGRbZl09YVtmXS5jdXJyZW50VmFsdWUpfSksZH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCksRF89KCgpPT57Y2xhc3MgY3tfaG90''@;'; put 'put ''VGFibGVSZWdpc3RlcmVyO19ob3RTZXR0aW5nc1Jlc29sdmVyO25nWm9uZTtjb250YWluZXI7X19ob3RJbnN0YW5jZT1udWxsO2NvbHVtbnNDb21wb25lbnRzPVtdO3NldHRpbmdzO2hvdElkPSIiO2FjdGl2ZUhlYWRlckNsYXNzTmFtZTthbGxvd0VtcHR5O2FsbG93SHRtbDthbGxvd0luc2Vy''@;'; put 'put ''dENvbHVtbjthbGxvd0luc2VydFJvdzthbGxvd0ludmFsaWQ7YWxsb3dSZW1vdmVDb2x1bW47YWxsb3dSZW1vdmVSb3c7YXJpYVRhZ3M7YXV0b0NvbHVtblNpemU7YXV0b1Jvd1NpemU7YXV0b1dyYXBDb2w7YXV0b1dyYXBSb3c7YmluZFJvd3NXaXRoSGVhZGVycztjZWxsO2NlbGxzO2NoZWNr''@;'; put 'put ''ZWRUZW1wbGF0ZTtjbGFzc05hbWU7Y29sSGVhZGVycztjb2xsYXBzaWJsZUNvbHVtbnM7Y29sdW1uSGVhZGVySGVpZ2h0O2NvbHVtbnM7Y29sdW1uU29ydGluZztjb2x1bW5TdW1tYXJ5O2NvbFdpZHRocztjb21tZW50ZWRDZWxsQ2xhc3NOYW1lO2NvbW1lbnRzO2NvbnRleHRNZW51O2NvcHlh''@;'; put 'put ''YmxlO2NvcHlQYXN0ZTtjb3JyZWN0Rm9ybWF0O2N1cnJlbnRDb2xDbGFzc05hbWU7Y3VycmVudEhlYWRlckNsYXNzTmFtZTtjdXJyZW50Um93Q2xhc3NOYW1lO2N1c3RvbUJvcmRlcnM7ZGF0YTtkYXRhRG90Tm90YXRpb247ZGF0YVNjaGVtYTtkYXRlRm9ybWF0O2RhdGVQaWNrZXJDb25maWc7''@;'; put 'put ''ZGVmYXVsdERhdGU7dGFiTmF2aWdhdGlvbjt0aGVtZU5hbWU7ZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjtkcmFnVG9TY3JvbGw7ZHJvcGRvd25NZW51O2VkaXRvcjtlbnRlckJlZ2luc0VkaXRpbmc7ZW50ZXJNb3ZlcztmaWxsSGFuZGxlO2ZpbHRlcjtmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlO2Zp''@;'; put 'put ''bHRlcnM7Zml4ZWRDb2x1bW5zTGVmdDtmaXhlZENvbHVtbnNTdGFydDtmaXhlZFJvd3NCb3R0b207Zml4ZWRSb3dzVG9wO2Zvcm11bGFzO2ZyYWdtZW50U2VsZWN0aW9uO2hlYWRlckNsYXNzTmFtZTtoZWlnaHQ7aGlkZGVuQ29sdW1ucztoaWRkZW5Sb3dzO2ludmFsaWRDZWxsQ2xhc3NOYW1l''@;'; put 'put ''O2ltZUZhc3RFZGl0O2xhYmVsO2xhbmd1YWdlO2xheW91dERpcmVjdGlvbjtsaWNlbnNlS2V5O2xvY2FsZTttYW51YWxDb2x1bW5GcmVlemU7bWFudWFsQ29sdW1uTW92ZTttYW51YWxDb2x1bW5SZXNpemU7bWFudWFsUm93TW92ZTttYW51YWxSb3dSZXNpemU7bWF4Q29sczttYXhSb3dzO21l''@;'; put 'put ''cmdlQ2VsbHM7bWluQ29sczttaW5Sb3dzO21pblNwYXJlQ29sczttaW5TcGFyZVJvd3M7bXVsdGlDb2x1bW5Tb3J0aW5nO25hdmlnYWJsZUhlYWRlcnM7bmVzdGVkSGVhZGVycztuZXN0ZWRSb3dzO25vV29yZFdyYXBDbGFzc05hbWU7bnVtZXJpY0Zvcm1hdDtvYnNlcnZlRE9NVmlzaWJpbGl0''@;'; put 'put ''eTtvdXRzaWRlQ2xpY2tEZXNlbGVjdHM7cGVyc2lzdGVudFN0YXRlO3BsYWNlaG9sZGVyO3BsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZTtwcmV2ZW50T3ZlcmZsb3c7cHJldmVudFdoZWVsO3JlYWRPbmx5O3JlYWRPbmx5Q2VsbENsYXNzTmFtZTtyZW5kZXJBbGxDb2x1bW5zO3JlbmRlckFsbFJv''@;'; put 'put ''d3M7cmVuZGVyZXI7cm93SGVhZGVycztyb3dIZWFkZXJXaWR0aDtyb3dIZWlnaHRzO3NlYXJjaDtzZWxlY3Rpb25Nb2RlO3NlbGVjdE9wdGlvbnM7c2tpcENvbHVtbk9uUGFzdGU7c2tpcFJvd09uUGFzdGU7c29ydEJ5UmVsZXZhbmNlO3NvdXJjZTtzdGFydENvbHM7c3RhcnRSb3dzO3N0cmV0''@;'; put 'put ''Y2hIO3N0cmljdDt0YWJsZUNsYXNzTmFtZTt0YWJNb3Zlczt0aXRsZTt0cmltRHJvcGRvd247dHJpbVJvd3M7dHJpbVdoaXRlc3BhY2U7dHlwZTt1bmNoZWNrZWRUZW1wbGF0ZTt1bmRvO3ZhbGlkYXRvcjt2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDt2aWV3cG9ydFJvd1JlbmRlcmlu''@;'; put 'put ''Z09mZnNldDt2aXNpYmxlUm93czt3aWR0aDt3b3JkV3JhcDthZnRlckFkZENoaWxkO2FmdGVyQXV0b2ZpbGw7YWZ0ZXJCZWdpbkVkaXRpbmc7YWZ0ZXJDZWxsTWV0YVJlc2V0O2FmdGVyQ2hhbmdlO2FmdGVyQ2hhbmdlc09ic2VydmVkO2FmdGVyQ29sdW1uQ29sbGFwc2U7YWZ0ZXJDb2x1bW5F''@;'; put 'put ''eHBhbmQ7YWZ0ZXJDb2x1bW5GcmVlemU7YWZ0ZXJDb2x1bW5Nb3ZlO2FmdGVyQ29sdW1uUmVzaXplO2FmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2U7YWZ0ZXJDb2x1bW5Tb3J0O2FmdGVyQ29sdW1uVW5mcmVlemU7YWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zO2FmdGVyQ29udGV4dE1l''@;'; put 'put ''bnVIaWRlO2FmdGVyQ29udGV4dE1lbnVTaG93O2FmdGVyQ29weTthZnRlckNvcHlMaW1pdDthZnRlckNyZWF0ZUNvbDthZnRlckNyZWF0ZVJvdzthZnRlckN1dDthZnRlckRlc2VsZWN0O2FmdGVyRGVzdHJveTthZnRlckRldGFjaENoaWxkO2FmdGVyRG9jdW1lbnRLZXlEb3duO2FmdGVyRHJh''@;'; put 'put ''d1NlbGVjdGlvbjthZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zO2FmdGVyRHJvcGRvd25NZW51SGlkZTthZnRlckRyb3Bkb3duTWVudVNob3c7YWZ0ZXJGaWx0ZXI7YWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZTthZnRlckdldENlbGxNZXRhO2FmdGVyR2V0Q29sSGVhZGVyO2FmdGVy''@;'; put 'put ''R2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzO2FmdGVyR2V0Um93SGVhZGVyO2FmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzO2FmdGVySGlkZUNvbHVtbnM7YWZ0ZXJIaWRlUm93czthZnRlckluaXQ7YWZ0ZXJMYW5ndWFnZUNoYW5nZTthZnRlckxpc3RlbjthZnRlckxvYWREYXRhO2FmdGVyTWVy''@;'; put 'put ''Z2VDZWxsczthZnRlck1vZGlmeVRyYW5zZm9ybUVuZDthZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzO2FmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQ7YWZ0ZXJNb21lbnR1bVNjcm9sbDthZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkO2FmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZDthZnRlck9u''@;'; put 'put ''Q2VsbENvbnRleHRNZW51O2FmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2s7YWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd247YWZ0ZXJPbkNlbGxNb3VzZURvd247YWZ0ZXJPbkNlbGxNb3VzZU91dDthZnRlck9uQ2VsbE1vdXNlT3ZlcjthZnRlck9uQ2VsbE1vdXNlVXA7YWZ0ZXJQYXN0ZTthZnRl''@;'; put 'put ''clBsdWdpbnNJbml0aWFsaXplZDthZnRlclJlZG87YWZ0ZXJSZWRvU3RhY2tDaGFuZ2U7YWZ0ZXJSZWZyZXNoRGltZW5zaW9uczthZnRlclJlbW92ZUNlbGxNZXRhO2FmdGVyUmVtb3ZlQ29sO2FmdGVyUmVtb3ZlUm93O2FmdGVyUmVuZGVyO2FmdGVyUmVuZGVyZXI7YWZ0ZXJSb3dNb3ZlO2Fm''@;'; put 'put ''dGVyUm93UmVzaXplO2FmdGVyUm93U2VxdWVuY2VDaGFuZ2U7YWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHk7YWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5O2FmdGVyU2Nyb2xsO2FmdGVyU2VsZWN0Q29sdW1uczthZnRlclNlbGVjdGlvbjthZnRlclNlbGVjdGlvbkJ5UHJvcDthZnRlclNlbGVjdGlvbkVu''@;'; put 'put ''ZDthZnRlclNlbGVjdGlvbkVuZEJ5UHJvcDthZnRlclNlbGVjdGlvbkZvY3VzU2V0O2FmdGVyU2VsZWN0Um93czthZnRlclNldENlbGxNZXRhO2FmdGVyU2V0RGF0YUF0Q2VsbDthZnRlclNldERhdGFBdFJvd1Byb3A7YWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsO2FmdGVyU2V0VGhlbWU7YWZ0''@;'; put 'put ''ZXJTaGVldEFkZGVkO2FmdGVyU2hlZXRSZW5hbWVkO2FmdGVyU2hlZXRSZW1vdmVkO2FmdGVyVHJpbVJvdzthZnRlclVuZG87YWZ0ZXJVbmRvU3RhY2tDaGFuZ2U7YWZ0ZXJVbmhpZGVDb2x1bW5zO2FmdGVyVW5oaWRlUm93czthZnRlclVubGlzdGVuO2FmdGVyVW5tZXJnZUNlbGxzO2FmdGVy''@;'; put 'put ''VW50cmltUm93O2FmdGVyVXBkYXRlRGF0YTthZnRlclVwZGF0ZVNldHRpbmdzO2FmdGVyVmFsaWRhdGU7YWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZTthZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlO2FmdGVyVmlld1JlbmRlcjtiZWZvcmVBZGRDaGlsZDti''@;'; put 'put ''ZWZvcmVBdXRvZmlsbDtiZWZvcmVCZWdpbkVkaXRpbmc7YmVmb3JlQ2VsbEFsaWdubWVudDtiZWZvcmVDaGFuZ2U7YmVmb3JlQ2hhbmdlUmVuZGVyO2JlZm9yZUNvbHVtbkNvbGxhcHNlO2JlZm9yZUNvbHVtbkV4cGFuZDtiZWZvcmVDb2x1bW5GcmVlemU7YmVmb3JlQ29sdW1uTW92ZTtiZWZv''@;'; put 'put ''cmVDb2x1bW5SZXNpemU7YmVmb3JlQ29sdW1uU29ydDtiZWZvcmVDb2x1bW5XcmFwO2JlZm9yZUNvbHVtblVuZnJlZXplO2JlZm9yZUNvbXBvc2l0aW9uU3RhcnQ7YmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcztiZWZvcmVDb250ZXh0TWVudVNob3c7YmVmb3JlQ29weTtiZWZvcmVDcmVhdGVD''@;'; put 'put ''b2w7YmVmb3JlQ3JlYXRlUm93O2JlZm9yZUN1dDtiZWZvcmVEZXRhY2hDaGlsZDtiZWZvcmVEcmF3Qm9yZGVycztiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcztiZWZvcmVEcm9wZG93bk1lbnVTaG93O2JlZm9yZUZpbHRlcjtiZWZvcmVHZXRDZWxsTWV0YTtiZWZvcmVIaWRlQ29sdW1uczti''@;'; put 'put ''ZWZvcmVIaWRlUm93cztiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI7YmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyO2JlZm9yZUluaXQ7YmVmb3JlSW5pdFdhbGtvbnRhYmxlO2JlZm9yZUtleURvd247YmVmb3JlTGFuZ3VhZ2VDaGFuZ2U7YmVmb3JlTG9hZERhdGE7YmVmb3JlTWVy''@;'; put 'put ''Z2VDZWxscztiZWZvcmVPbkNlbGxDb250ZXh0TWVudTtiZWZvcmVPbkNlbGxNb3VzZURvd247YmVmb3JlT25DZWxsTW91c2VPdXQ7YmVmb3JlT25DZWxsTW91c2VPdmVyO2JlZm9yZU9uQ2VsbE1vdXNlVXA7YmVmb3JlUGFzdGU7YmVmb3JlUmVkbztiZWZvcmVSZWRvU3RhY2tDaGFuZ2U7YmVm''@;'; put 'put ''b3JlUmVmcmVzaERpbWVuc2lvbnM7YmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM7YmVmb3JlUmVtb3ZlQ2VsbE1ldGE7YmVmb3JlUmVtb3ZlQ29sO2JlZm9yZVJlbW92ZVJvdztiZWZvcmVSZW5kZXI7YmVmb3JlUmVuZGVyZXI7YmVmb3JlUm93TW92ZTtiZWZvcmVSb3dSZXNpemU7YmVmb3Jl''@;'; put 'put ''Um93V3JhcDtiZWZvcmVTZWxlY3RDb2x1bW5zO2JlZm9yZVNlbGVjdGlvbkZvY3VzU2V0O2JlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldDtiZWZvcmVTZWxlY3RSb3dzO2JlZm9yZVNldENlbGxNZXRhO2JlZm9yZVNldFJhbmdlRW5kO2JlZm9yZVNldFJhbmdlU3RhcnQ7YmVmb3JlU2V0UmFu''@;'; put 'put ''Z2VTdGFydE9ubHk7YmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoO2JlZm9yZVRvdWNoU2Nyb2xsO2JlZm9yZVRyaW1Sb3c7YmVmb3JlVW5kbztiZWZvcmVVbmRvU3RhY2tDaGFuZ2U7YmVmb3JlVW5oaWRlQ29sdW1ucztiZWZvcmVVbmhpZGVSb3dzO2JlZm9yZVVubWVyZ2VDZWxscztiZWZv''@;'; put 'put ''cmVVbnRyaW1Sb3c7YmVmb3JlVXBkYXRlRGF0YTtiZWZvcmVWYWxpZGF0ZTtiZWZvcmVWYWx1ZVJlbmRlcjtiZWZvcmVWaWV3cG9ydFNjcm9sbDtiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseTtiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk7YmVmb3JlVmlld1JlbmRlcjtj''@;'; put 'put ''b25zdHJ1Y3Q7aW5pdDttb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQ7bW9kaWZ5QXV0b2ZpbGxSYW5nZTttb2RpZnlDb2xIZWFkZXI7bW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0O21vZGlmeUNvbHVtbkhlYWRlclZhbHVlO21vZGlmeUNvbFdpZHRoO21vZGlmeUNvcHlhYmxlUmFuZ2U7bW9kaWZ5''@;'; put 'put ''RmlsdGVyc011bHRpU2VsZWN0VmFsdWU7bW9kaWZ5Rm9jdXNlZEVsZW1lbnQ7bW9kaWZ5RGF0YTttb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbjttb2RpZnlHZXRDZWxsQ29vcmRzO21vZGlmeUdldENvb3Jkc0VsZW1lbnQ7bW9kaWZ5Um93RGF0YTttb2RpZnlSb3dIZWFkZXI7bW9kaWZ5Um93''@;'; put 'put ''SGVhZGVyV2lkdGg7bW9kaWZ5Um93SGVpZ2h0O21vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWU7bW9kaWZ5U291cmNlRGF0YTttb2RpZnlUcmFuc2Zvcm1FbmQ7bW9kaWZ5VHJhbnNmb3JtRm9jdXM7bW9kaWZ5VHJhbnNmb3JtU3RhcnQ7cGVyc2lzdGVudFN0YXRlTG9hZDtwZXJzaXN0ZW50''@;'; put 'put ''U3RhdGVSZXNldDtwZXJzaXN0ZW50U3RhdGVTYXZlO2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXI9YSx0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyPWQsdGhpcy5uZ1pvbmU9aH1nZXQgaG90SW5zdGFuY2UoKXtyZXR1cm4hdGhpcy5fX2hvdEluc3RhbmNlfHx0''@;'; put 'put ''aGlzLl9faG90SW5zdGFuY2UmJiF0aGlzLl9faG90SW5zdGFuY2UuaXNEZXN0cm95ZWQ/dGhpcy5fX2hvdEluc3RhbmNlOih0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVtb3ZlSW5zdGFuY2UodGhpcy5ob3RJZCksY29uc29sZS53YXJuKFJwZSksbnVsbCl9c2V0IGhvdEluc3RhbmNlKGEp''@;'; put 'put ''e3RoaXMuX19ob3RJbnN0YW5jZT1hfW5nQWZ0ZXJWaWV3SW5pdCgpe2NvbnN0IGE9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKHRoaXMpO2lmKHRoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjApe2NvbnN0IGQ9W107dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5m''@;'; put 'put ''b3JFYWNoKGg9PntkLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGgpKX0pLGEuY29sdW1ucz1kfXRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZT1uZXcgb3MuQ29yZSh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVt''@;'; put 'put ''ZW50LGEpLHRoaXMuaG90SWQmJnRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5yZWdpc3Rlckluc3RhbmNlKHRoaXMuaG90SWQsdGhpcy5ob3RJbnN0YW5jZSksdGhpcy5ob3RJbnN0YW5jZS5pbml0KCl9KX1uZ09uQ2hhbmdlcyhhKXtpZihudWxsPT09dGhpcy5ob3RJbnN0YW5jZSlyZXR1cm47''@;'; put 'put ''Y29uc3QgZD10aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLnByZXBhcmVDaGFuZ2VzKGEpO3RoaXMudXBkYXRlSG90VGFibGUoZCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2UmJnRoaXMuaG90SW5zdGFuY2UuZGVzdHJv''@;'; put 'put ''eSgpfSksdGhpcy5ob3RJZCYmdGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlbW92ZUluc3RhbmNlKHRoaXMuaG90SWQpfXVwZGF0ZUhvdFRhYmxlKGEpe3RoaXMuaG90SW5zdGFuY2UmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVT''@;'; put 'put ''ZXR0aW5ncyhhLCExKX0pfW9uQWZ0ZXJDb2x1bW5zQ2hhbmdlKCl7aWYodm9pZCAwIT09dGhpcy5jb2x1bW5zQ29tcG9uZW50cyYmdGhpcy5jb2x1bW5zQ29tcG9uZW50cy5sZW5ndGg+MCl7Y29uc3QgYT1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmZvckVhY2goaD0+e2EucHVzaCh0aGlz''@;'; put 'put ''Ll9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3MoaCkpfSksdGhpcy51cGRhdGVIb3RUYWJsZSh7Y29sdW1uczphfSl9fW9uQWZ0ZXJDb2x1bW5zTnVtYmVyQ2hhbmdlKCl7Y29uc3QgYT1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0aD4wJiZ0aGlzLmNvbHVtbnNDb21w''@;'; put 'put ''b25lbnRzLmZvckVhY2goZD0+e2EucHVzaCh0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3MoZCkpfSksdGhpcy51cGRhdGVIb3RUYWJsZSh7Y29sdW1uczphfSl9YWRkQ29sdW1uKGEpe3RoaXMuY29sdW1uc0NvbXBvbmVudHMucHVzaChhKSx0aGlzLm9uQWZ0ZXJDb2x1''@;'; put 'put ''bW5zTnVtYmVyQ2hhbmdlKCl9cmVtb3ZlQ29sdW1uKGEpe2NvbnN0IGQ9dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5pbmRleE9mKGEpO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuc3BsaWNlKGQsMSksdGhpcy5vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShZbSksR2UoT3BlKSxHZShXYSkpfTtzdGF0aWMgXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImhvdC10YWJsZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKG5hdCw1KSwyJmQpe2xldCBmO0NpKGY9U2ko''@;'; put 'put ''KSkmJihoLmNvbnRhaW5lcj1mLmZpcnN0KX19LGlucHV0czp7c2V0dGluZ3M6InNldHRpbmdzIixob3RJZDoiaG90SWQiLGFjdGl2ZUhlYWRlckNsYXNzTmFtZToiYWN0aXZlSGVhZGVyQ2xhc3NOYW1lIixhbGxvd0VtcHR5OiJhbGxvd0VtcHR5IixhbGxvd0h0bWw6ImFsbG93SHRtbCIsYWxs''@;'; put 'put ''b3dJbnNlcnRDb2x1bW46ImFsbG93SW5zZXJ0Q29sdW1uIixhbGxvd0luc2VydFJvdzoiYWxsb3dJbnNlcnRSb3ciLGFsbG93SW52YWxpZDoiYWxsb3dJbnZhbGlkIixhbGxvd1JlbW92ZUNvbHVtbjoiYWxsb3dSZW1vdmVDb2x1bW4iLGFsbG93UmVtb3ZlUm93OiJhbGxvd1JlbW92ZVJvdyIs''@;'; put 'put ''YXJpYVRhZ3M6ImFyaWFUYWdzIixhdXRvQ29sdW1uU2l6ZToiYXV0b0NvbHVtblNpemUiLGF1dG9Sb3dTaXplOiJhdXRvUm93U2l6ZSIsYXV0b1dyYXBDb2w6ImF1dG9XcmFwQ29sIixhdXRvV3JhcFJvdzoiYXV0b1dyYXBSb3ciLGJpbmRSb3dzV2l0aEhlYWRlcnM6ImJpbmRSb3dzV2l0aEhl''@;'; put 'put ''YWRlcnMiLGNlbGw6ImNlbGwiLGNlbGxzOiJjZWxscyIsY2hlY2tlZFRlbXBsYXRlOiJjaGVja2VkVGVtcGxhdGUiLGNsYXNzTmFtZToiY2xhc3NOYW1lIixjb2xIZWFkZXJzOiJjb2xIZWFkZXJzIixjb2xsYXBzaWJsZUNvbHVtbnM6ImNvbGxhcHNpYmxlQ29sdW1ucyIsY29sdW1uSGVhZGVy''@;'; put 'put ''SGVpZ2h0OiJjb2x1bW5IZWFkZXJIZWlnaHQiLGNvbHVtbnM6ImNvbHVtbnMiLGNvbHVtblNvcnRpbmc6ImNvbHVtblNvcnRpbmciLGNvbHVtblN1bW1hcnk6ImNvbHVtblN1bW1hcnkiLGNvbFdpZHRoczoiY29sV2lkdGhzIixjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJjb21tZW50ZWRDZWxs''@;'; put 'put ''Q2xhc3NOYW1lIixjb21tZW50czoiY29tbWVudHMiLGNvbnRleHRNZW51OiJjb250ZXh0TWVudSIsY29weWFibGU6ImNvcHlhYmxlIixjb3B5UGFzdGU6ImNvcHlQYXN0ZSIsY29ycmVjdEZvcm1hdDoiY29ycmVjdEZvcm1hdCIsY3VycmVudENvbENsYXNzTmFtZToiY3VycmVudENvbENsYXNz''@;'; put 'put ''TmFtZSIsY3VycmVudEhlYWRlckNsYXNzTmFtZToiY3VycmVudEhlYWRlckNsYXNzTmFtZSIsY3VycmVudFJvd0NsYXNzTmFtZToiY3VycmVudFJvd0NsYXNzTmFtZSIsY3VzdG9tQm9yZGVyczoiY3VzdG9tQm9yZGVycyIsZGF0YToiZGF0YSIsZGF0YURvdE5vdGF0aW9uOiJkYXRhRG90Tm90''@;'; put 'put ''YXRpb24iLGRhdGFTY2hlbWE6ImRhdGFTY2hlbWEiLGRhdGVGb3JtYXQ6ImRhdGVGb3JtYXQiLGRhdGVQaWNrZXJDb25maWc6ImRhdGVQaWNrZXJDb25maWciLGRlZmF1bHREYXRlOiJkZWZhdWx0RGF0ZSIsdGFiTmF2aWdhdGlvbjoidGFiTmF2aWdhdGlvbiIsdGhlbWVOYW1lOiJ0aGVtZU5h''@;'; put 'put ''bWUiLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImRpc2FibGVWaXN1YWxTZWxlY3Rpb24iLGRyYWdUb1Njcm9sbDoiZHJhZ1RvU2Nyb2xsIixkcm9wZG93bk1lbnU6ImRyb3Bkb3duTWVudSIsZWRpdG9yOiJlZGl0b3IiLGVudGVyQmVnaW5zRWRpdGluZzoiZW50ZXJCZWdpbnNFZGl0aW5nIixl''@;'; put 'put ''bnRlck1vdmVzOiJlbnRlck1vdmVzIixmaWxsSGFuZGxlOiJmaWxsSGFuZGxlIixmaWx0ZXI6ImZpbHRlciIsZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZToiZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsZmlsdGVyczoiZmlsdGVycyIsZml4ZWRDb2x1bW5zTGVmdDoiZml4ZWRDb2x1bW5zTGVmdCIs''@;'; put 'put ''Zml4ZWRDb2x1bW5zU3RhcnQ6ImZpeGVkQ29sdW1uc1N0YXJ0IixmaXhlZFJvd3NCb3R0b206ImZpeGVkUm93c0JvdHRvbSIsZml4ZWRSb3dzVG9wOiJmaXhlZFJvd3NUb3AiLGZvcm11bGFzOiJmb3JtdWxhcyIsZnJhZ21lbnRTZWxlY3Rpb246ImZyYWdtZW50U2VsZWN0aW9uIixoZWFkZXJD''@;'; put 'put ''bGFzc05hbWU6ImhlYWRlckNsYXNzTmFtZSIsaGVpZ2h0OiJoZWlnaHQiLGhpZGRlbkNvbHVtbnM6ImhpZGRlbkNvbHVtbnMiLGhpZGRlblJvd3M6ImhpZGRlblJvd3MiLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJpbnZhbGlkQ2VsbENsYXNzTmFtZSIsaW1lRmFzdEVkaXQ6ImltZUZhc3RFZGl0''@;'; put 'put ''IixsYWJlbDoibGFiZWwiLGxhbmd1YWdlOiJsYW5ndWFnZSIsbGF5b3V0RGlyZWN0aW9uOiJsYXlvdXREaXJlY3Rpb24iLGxpY2Vuc2VLZXk6ImxpY2Vuc2VLZXkiLGxvY2FsZToibG9jYWxlIixtYW51YWxDb2x1bW5GcmVlemU6Im1hbnVhbENvbHVtbkZyZWV6ZSIsbWFudWFsQ29sdW1uTW92''@;'; put 'put ''ZToibWFudWFsQ29sdW1uTW92ZSIsbWFudWFsQ29sdW1uUmVzaXplOiJtYW51YWxDb2x1bW5SZXNpemUiLG1hbnVhbFJvd01vdmU6Im1hbnVhbFJvd01vdmUiLG1hbnVhbFJvd1Jlc2l6ZToibWFudWFsUm93UmVzaXplIixtYXhDb2xzOiJtYXhDb2xzIixtYXhSb3dzOiJtYXhSb3dzIixtZXJn''@;'; put 'put ''ZUNlbGxzOiJtZXJnZUNlbGxzIixtaW5Db2xzOiJtaW5Db2xzIixtaW5Sb3dzOiJtaW5Sb3dzIixtaW5TcGFyZUNvbHM6Im1pblNwYXJlQ29scyIsbWluU3BhcmVSb3dzOiJtaW5TcGFyZVJvd3MiLG11bHRpQ29sdW1uU29ydGluZzoibXVsdGlDb2x1bW5Tb3J0aW5nIixuYXZpZ2FibGVIZWFk''@;'; put 'put ''ZXJzOiJuYXZpZ2FibGVIZWFkZXJzIixuZXN0ZWRIZWFkZXJzOiJuZXN0ZWRIZWFkZXJzIixuZXN0ZWRSb3dzOiJuZXN0ZWRSb3dzIixub1dvcmRXcmFwQ2xhc3NOYW1lOiJub1dvcmRXcmFwQ2xhc3NOYW1lIixudW1lcmljRm9ybWF0OiJudW1lcmljRm9ybWF0IixvYnNlcnZlRE9NVmlzaWJp''@;'; put 'put ''bGl0eToib2JzZXJ2ZURPTVZpc2liaWxpdHkiLG91dHNpZGVDbGlja0Rlc2VsZWN0czoib3V0c2lkZUNsaWNrRGVzZWxlY3RzIixwZXJzaXN0ZW50U3RhdGU6InBlcnNpc3RlbnRTdGF0ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixwbGFjZWhvbGRlckNlbGxDbGFzc05hbWU6InBsYWNl''@;'; put 'put ''aG9sZGVyQ2VsbENsYXNzTmFtZSIscHJldmVudE92ZXJmbG93OiJwcmV2ZW50T3ZlcmZsb3ciLHByZXZlbnRXaGVlbDoicHJldmVudFdoZWVsIixyZWFkT25seToicmVhZE9ubHkiLHJlYWRPbmx5Q2VsbENsYXNzTmFtZToicmVhZE9ubHlDZWxsQ2xhc3NOYW1lIixyZW5kZXJBbGxDb2x1bW5z''@;'; put 'put ''OiJyZW5kZXJBbGxDb2x1bW5zIixyZW5kZXJBbGxSb3dzOiJyZW5kZXJBbGxSb3dzIixyZW5kZXJlcjoicmVuZGVyZXIiLHJvd0hlYWRlcnM6InJvd0hlYWRlcnMiLHJvd0hlYWRlcldpZHRoOiJyb3dIZWFkZXJXaWR0aCIscm93SGVpZ2h0czoicm93SGVpZ2h0cyIsc2VhcmNoOiJzZWFyY2gi''@;'; put 'put ''LHNlbGVjdGlvbk1vZGU6InNlbGVjdGlvbk1vZGUiLHNlbGVjdE9wdGlvbnM6InNlbGVjdE9wdGlvbnMiLHNraXBDb2x1bW5PblBhc3RlOiJza2lwQ29sdW1uT25QYXN0ZSIsc2tpcFJvd09uUGFzdGU6InNraXBSb3dPblBhc3RlIixzb3J0QnlSZWxldmFuY2U6InNvcnRCeVJlbGV2YW5jZSIs''@;'; put 'put ''c291cmNlOiJzb3VyY2UiLHN0YXJ0Q29sczoic3RhcnRDb2xzIixzdGFydFJvd3M6InN0YXJ0Um93cyIsc3RyZXRjaEg6InN0cmV0Y2hIIixzdHJpY3Q6InN0cmljdCIsdGFibGVDbGFzc05hbWU6InRhYmxlQ2xhc3NOYW1lIix0YWJNb3ZlczoidGFiTW92ZXMiLHRpdGxlOiJ0aXRsZSIsdHJp''@;'; put 'put ''bURyb3Bkb3duOiJ0cmltRHJvcGRvd24iLHRyaW1Sb3dzOiJ0cmltUm93cyIsdHJpbVdoaXRlc3BhY2U6InRyaW1XaGl0ZXNwYWNlIix0eXBlOiJ0eXBlIix1bmNoZWNrZWRUZW1wbGF0ZToidW5jaGVja2VkVGVtcGxhdGUiLHVuZG86InVuZG8iLHZhbGlkYXRvcjoidmFsaWRhdG9yIix2aWV3''@;'; put 'put ''cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDoidmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQiLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OiJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsdmlzaWJsZVJvd3M6InZpc2libGVSb3dzIix3aWR0aDoid2lkdGgiLHdvcmRXcmFwOiJ3''@;'; put 'put ''b3JkV3JhcCIsYWZ0ZXJBZGRDaGlsZDoiYWZ0ZXJBZGRDaGlsZCIsYWZ0ZXJBdXRvZmlsbDoiYWZ0ZXJBdXRvZmlsbCIsYWZ0ZXJCZWdpbkVkaXRpbmc6ImFmdGVyQmVnaW5FZGl0aW5nIixhZnRlckNlbGxNZXRhUmVzZXQ6ImFmdGVyQ2VsbE1ldGFSZXNldCIsYWZ0ZXJDaGFuZ2U6ImFmdGVy''@;'; put 'put ''Q2hhbmdlIixhZnRlckNoYW5nZXNPYnNlcnZlZDoiYWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQiLGFmdGVyQ29sdW1uQ29sbGFwc2U6ImFmdGVyQ29sdW1uQ29sbGFwc2UiLGFmdGVyQ29sdW1uRXhwYW5kOiJhZnRlckNvbHVtbkV4cGFuZCIsYWZ0ZXJDb2x1bW5GcmVlemU6ImFmdGVyQ29sdW1uRnJl''@;'; put 'put ''ZXplIixhZnRlckNvbHVtbk1vdmU6ImFmdGVyQ29sdW1uTW92ZSIsYWZ0ZXJDb2x1bW5SZXNpemU6ImFmdGVyQ29sdW1uUmVzaXplIixhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlOiJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIixhZnRlckNvbHVtblNvcnQ6ImFmdGVyQ29sdW1uU29ydCIs''@;'; put 'put ''YWZ0ZXJDb2x1bW5VbmZyZWV6ZToiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zOiJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGFmdGVyQ29udGV4dE1lbnVIaWRlOiJhZnRlckNvbnRleHRNZW51SGlkZSIsYWZ0ZXJDb250ZXh0TWVu''@;'; put 'put ''dVNob3c6ImFmdGVyQ29udGV4dE1lbnVTaG93IixhZnRlckNvcHk6ImFmdGVyQ29weSIsYWZ0ZXJDb3B5TGltaXQ6ImFmdGVyQ29weUxpbWl0IixhZnRlckNyZWF0ZUNvbDoiYWZ0ZXJDcmVhdGVDb2wiLGFmdGVyQ3JlYXRlUm93OiJhZnRlckNyZWF0ZVJvdyIsYWZ0ZXJDdXQ6ImFmdGVyQ3V0''@;'; put 'put ''IixhZnRlckRlc2VsZWN0OiJhZnRlckRlc2VsZWN0IixhZnRlckRlc3Ryb3k6ImFmdGVyRGVzdHJveSIsYWZ0ZXJEZXRhY2hDaGlsZDoiYWZ0ZXJEZXRhY2hDaGlsZCIsYWZ0ZXJEb2N1bWVudEtleURvd246ImFmdGVyRG9jdW1lbnRLZXlEb3duIixhZnRlckRyYXdTZWxlY3Rpb246ImFmdGVy''@;'; put 'put ''RHJhd1NlbGVjdGlvbiIsYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9uczoiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsYWZ0ZXJEcm9wZG93bk1lbnVIaWRlOiJhZnRlckRyb3Bkb3duTWVudUhpZGUiLGFmdGVyRHJvcGRvd25NZW51U2hvdzoiYWZ0ZXJEcm9wZG93bk1l''@;'; put 'put ''bnVTaG93IixhZnRlckZpbHRlcjoiYWZ0ZXJGaWx0ZXIiLGFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGU6ImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGFmdGVyR2V0Q2VsbE1ldGE6ImFmdGVyR2V0Q2VsbE1ldGEiLGFmdGVyR2V0Q29sSGVhZGVyOiJhZnRlckdldENvbEhlYWRlciIsYWZ0''@;'; put 'put ''ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnM6ImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixhZnRlckdldFJvd0hlYWRlcjoiYWZ0ZXJHZXRSb3dIZWFkZXIiLGFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzOiJhZnRlckdldFJvd0hlYWRlclJlbmRlcmVycyIsYWZ0ZXJIaWRlQ29s''@;'; put 'put ''dW1uczoiYWZ0ZXJIaWRlQ29sdW1ucyIsYWZ0ZXJIaWRlUm93czoiYWZ0ZXJIaWRlUm93cyIsYWZ0ZXJJbml0OiJhZnRlckluaXQiLGFmdGVyTGFuZ3VhZ2VDaGFuZ2U6ImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLGFmdGVyTGlzdGVuOiJhZnRlckxpc3RlbiIsYWZ0ZXJMb2FkRGF0YToiYWZ0ZXJM''@;'; put 'put ''b2FkRGF0YSIsYWZ0ZXJNZXJnZUNlbGxzOiJhZnRlck1lcmdlQ2VsbHMiLGFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kOiJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1czoiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsYWZ0ZXJNb2RpZnlUcmFuc2Zv''@;'; put 'put ''cm1TdGFydDoiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsYWZ0ZXJNb21lbnR1bVNjcm9sbDoiYWZ0ZXJNb21lbnR1bVNjcm9sbCIsYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZDoiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIsYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkOiJhZnRl''@;'; put 'put ''ck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGFmdGVyT25DZWxsQ29udGV4dE1lbnU6ImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2s6ImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLGFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duOiJhZnRlck9uQ2Vs''@;'; put 'put ''bENvcm5lck1vdXNlRG93biIsYWZ0ZXJPbkNlbGxNb3VzZURvd246ImFmdGVyT25DZWxsTW91c2VEb3duIixhZnRlck9uQ2VsbE1vdXNlT3V0OiJhZnRlck9uQ2VsbE1vdXNlT3V0IixhZnRlck9uQ2VsbE1vdXNlT3ZlcjoiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLGFmdGVyT25DZWxsTW91c2VV''@;'; put 'put ''cDoiYWZ0ZXJPbkNlbGxNb3VzZVVwIixhZnRlclBhc3RlOiJhZnRlclBhc3RlIixhZnRlclBsdWdpbnNJbml0aWFsaXplZDoiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLGFmdGVyUmVkbzoiYWZ0ZXJSZWRvIixhZnRlclJlZG9TdGFja0NoYW5nZToiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGFm''@;'; put 'put ''dGVyUmVmcmVzaERpbWVuc2lvbnM6ImFmdGVyUmVmcmVzaERpbWVuc2lvbnMiLGFmdGVyUmVtb3ZlQ2VsbE1ldGE6ImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLGFmdGVyUmVtb3ZlQ29sOiJhZnRlclJlbW92ZUNvbCIsYWZ0ZXJSZW1vdmVSb3c6ImFmdGVyUmVtb3ZlUm93IixhZnRlclJlbmRlcjoi''@;'; put 'put ''YWZ0ZXJSZW5kZXIiLGFmdGVyUmVuZGVyZXI6ImFmdGVyUmVuZGVyZXIiLGFmdGVyUm93TW92ZToiYWZ0ZXJSb3dNb3ZlIixhZnRlclJvd1Jlc2l6ZToiYWZ0ZXJSb3dSZXNpemUiLGFmdGVyUm93U2VxdWVuY2VDaGFuZ2U6ImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLGFmdGVyU2Nyb2xsSG9y''@;'; put 'put ''aXpvbnRhbGx5OiJhZnRlclNjcm9sbEhvcml6b250YWxseSIsYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5OiJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLGFmdGVyU2Nyb2xsOiJhZnRlclNjcm9sbCIsYWZ0ZXJTZWxlY3RDb2x1bW5zOiJhZnRlclNlbGVjdENvbHVtbnMiLGFmdGVyU2VsZWN0aW9uOiJh''@;'; put 'put ''ZnRlclNlbGVjdGlvbiIsYWZ0ZXJTZWxlY3Rpb25CeVByb3A6ImFmdGVyU2VsZWN0aW9uQnlQcm9wIixhZnRlclNlbGVjdGlvbkVuZDoiYWZ0ZXJTZWxlY3Rpb25FbmQiLGFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wOiJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsYWZ0ZXJTZWxlY3Rpb25Gb2N1''@;'; put 'put ''c1NldDoiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsYWZ0ZXJTZWxlY3RSb3dzOiJhZnRlclNlbGVjdFJvd3MiLGFmdGVyU2V0Q2VsbE1ldGE6ImFmdGVyU2V0Q2VsbE1ldGEiLGFmdGVyU2V0RGF0YUF0Q2VsbDoiYWZ0ZXJTZXREYXRhQXRDZWxsIixhZnRlclNldERhdGFBdFJvd1Byb3A6ImFm''@;'; put 'put ''dGVyU2V0RGF0YUF0Um93UHJvcCIsYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsOiJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLGFmdGVyU2V0VGhlbWU6ImFmdGVyU2V0VGhlbWUiLGFmdGVyU2hlZXRBZGRlZDoiYWZ0ZXJTaGVldEFkZGVkIixhZnRlclNoZWV0UmVuYW1lZDoiYWZ0ZXJTaGVl''@;'; put 'put ''dFJlbmFtZWQiLGFmdGVyU2hlZXRSZW1vdmVkOiJhZnRlclNoZWV0UmVtb3ZlZCIsYWZ0ZXJUcmltUm93OiJhZnRlclRyaW1Sb3ciLGFmdGVyVW5kbzoiYWZ0ZXJVbmRvIixhZnRlclVuZG9TdGFja0NoYW5nZToiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGFmdGVyVW5oaWRlQ29sdW1uczoiYWZ0''@;'; put 'put ''ZXJVbmhpZGVDb2x1bW5zIixhZnRlclVuaGlkZVJvd3M6ImFmdGVyVW5oaWRlUm93cyIsYWZ0ZXJVbmxpc3RlbjoiYWZ0ZXJVbmxpc3RlbiIsYWZ0ZXJVbm1lcmdlQ2VsbHM6ImFmdGVyVW5tZXJnZUNlbGxzIixhZnRlclVudHJpbVJvdzoiYWZ0ZXJVbnRyaW1Sb3ciLGFmdGVyVXBkYXRlRGF0''@;'; put 'put ''YToiYWZ0ZXJVcGRhdGVEYXRhIixhZnRlclVwZGF0ZVNldHRpbmdzOiJhZnRlclVwZGF0ZVNldHRpbmdzIixhZnRlclZhbGlkYXRlOiJhZnRlclZhbGlkYXRlIixhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJy''@;'; put 'put ''aWRlIixhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixhZnRlclZpZXdSZW5kZXI6ImFmdGVyVmlld1JlbmRlciIsYmVmb3JlQWRkQ2hpbGQ6ImJlZm9yZUFkZENoaWxkIixiZWZvcmVBdXRvZmlsbDoiYmVmb3Jl''@;'; put 'put ''QXV0b2ZpbGwiLGJlZm9yZUJlZ2luRWRpdGluZzoiYmVmb3JlQmVnaW5FZGl0aW5nIixiZWZvcmVDZWxsQWxpZ25tZW50OiJiZWZvcmVDZWxsQWxpZ25tZW50IixiZWZvcmVDaGFuZ2U6ImJlZm9yZUNoYW5nZSIsYmVmb3JlQ2hhbmdlUmVuZGVyOiJiZWZvcmVDaGFuZ2VSZW5kZXIiLGJlZm9y''@;'; put 'put ''ZUNvbHVtbkNvbGxhcHNlOiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYmVmb3JlQ29sdW1uRXhwYW5kOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGJlZm9yZUNvbHVtbkZyZWV6ZToiYmVmb3JlQ29sdW1uRnJlZXplIixiZWZvcmVDb2x1bW5Nb3ZlOiJiZWZvcmVDb2x1bW5Nb3ZlIixiZWZvcmVDb2x1''@;'; put 'put ''bW5SZXNpemU6ImJlZm9yZUNvbHVtblJlc2l6ZSIsYmVmb3JlQ29sdW1uU29ydDoiYmVmb3JlQ29sdW1uU29ydCIsYmVmb3JlQ29sdW1uV3JhcDoiYmVmb3JlQ29sdW1uV3JhcCIsYmVmb3JlQ29sdW1uVW5mcmVlemU6ImJlZm9yZUNvbHVtblVuZnJlZXplIixiZWZvcmVDb21wb3NpdGlvblN0''@;'; put 'put ''YXJ0OiJiZWZvcmVDb21wb3NpdGlvblN0YXJ0IixiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zOiJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIixiZWZvcmVDb250ZXh0TWVudVNob3c6ImJlZm9yZUNvbnRleHRNZW51U2hvdyIsYmVmb3JlQ29weToiYmVmb3JlQ29weSIsYmVmb3JlQ3JlYXRl''@;'; put 'put ''Q29sOiJiZWZvcmVDcmVhdGVDb2wiLGJlZm9yZUNyZWF0ZVJvdzoiYmVmb3JlQ3JlYXRlUm93IixiZWZvcmVDdXQ6ImJlZm9yZUN1dCIsYmVmb3JlRGV0YWNoQ2hpbGQ6ImJlZm9yZURldGFjaENoaWxkIixiZWZvcmVEcmF3Qm9yZGVyczoiYmVmb3JlRHJhd0JvcmRlcnMiLGJlZm9yZURyb3Bk''@;'; put 'put ''b3duTWVudVNldEl0ZW1zOiJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsYmVmb3JlRHJvcGRvd25NZW51U2hvdzoiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsYmVmb3JlRmlsdGVyOiJiZWZvcmVGaWx0ZXIiLGJlZm9yZUdldENlbGxNZXRhOiJiZWZvcmVHZXRDZWxsTWV0YSIsYmVmb3Jl''@;'; put 'put ''SGlkZUNvbHVtbnM6ImJlZm9yZUhpZGVDb2x1bW5zIixiZWZvcmVIaWRlUm93czoiYmVmb3JlSGlkZVJvd3MiLGJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6ImJlZm9yZUhp''@;'; put 'put ''Z2hsaWdodGluZ1Jvd0hlYWRlciIsYmVmb3JlSW5pdDoiYmVmb3JlSW5pdCIsYmVmb3JlSW5pdFdhbGtvbnRhYmxlOiJiZWZvcmVJbml0V2Fsa29udGFibGUiLGJlZm9yZUtleURvd246ImJlZm9yZUtleURvd24iLGJlZm9yZUxhbmd1YWdlQ2hhbmdlOiJiZWZvcmVMYW5ndWFnZUNoYW5nZSIs''@;'; put 'put ''YmVmb3JlTG9hZERhdGE6ImJlZm9yZUxvYWREYXRhIixiZWZvcmVNZXJnZUNlbGxzOiJiZWZvcmVNZXJnZUNlbGxzIixiZWZvcmVPbkNlbGxDb250ZXh0TWVudToiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLGJlZm9yZU9uQ2VsbE1vdXNlRG93bjoiYmVmb3JlT25DZWxsTW91c2VEb3duIixi''@;'; put 'put ''ZWZvcmVPbkNlbGxNb3VzZU91dDoiYmVmb3JlT25DZWxsTW91c2VPdXQiLGJlZm9yZU9uQ2VsbE1vdXNlT3ZlcjoiYmVmb3JlT25DZWxsTW91c2VPdmVyIixiZWZvcmVPbkNlbGxNb3VzZVVwOiJiZWZvcmVPbkNlbGxNb3VzZVVwIixiZWZvcmVQYXN0ZToiYmVmb3JlUGFzdGUiLGJlZm9yZVJl''@;'; put 'put ''ZG86ImJlZm9yZVJlZG8iLGJlZm9yZVJlZG9TdGFja0NoYW5nZToiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixiZWZvcmVSZWZyZXNoRGltZW5zaW9uczoiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLGJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOiJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1l''@;'; put 'put ''cyIsYmVmb3JlUmVtb3ZlQ2VsbE1ldGE6ImJlZm9yZVJlbW92ZUNlbGxNZXRhIixiZWZvcmVSZW1vdmVDb2w6ImJlZm9yZVJlbW92ZUNvbCIsYmVmb3JlUmVtb3ZlUm93OiJiZWZvcmVSZW1vdmVSb3ciLGJlZm9yZVJlbmRlcjoiYmVmb3JlUmVuZGVyIixiZWZvcmVSZW5kZXJlcjoiYmVmb3Jl''@;'; put 'put ''UmVuZGVyZXIiLGJlZm9yZVJvd01vdmU6ImJlZm9yZVJvd01vdmUiLGJlZm9yZVJvd1Jlc2l6ZToiYmVmb3JlUm93UmVzaXplIixiZWZvcmVSb3dXcmFwOiJiZWZvcmVSb3dXcmFwIixiZWZvcmVTZWxlY3RDb2x1bW5zOiJiZWZvcmVTZWxlY3RDb2x1bW5zIixiZWZvcmVTZWxlY3Rpb25Gb2N1''@;'; put 'put ''c1NldDoiYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQiLGJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldDoiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IixiZWZvcmVTZWxlY3RSb3dzOiJiZWZvcmVTZWxlY3RSb3dzIixiZWZvcmVTZXRDZWxsTWV0YToiYmVmb3JlU2V0Q2VsbE1ldGEiLGJl''@;'; put 'put ''Zm9yZVNldFJhbmdlRW5kOiJiZWZvcmVTZXRSYW5nZUVuZCIsYmVmb3JlU2V0UmFuZ2VTdGFydDoiYmVmb3JlU2V0UmFuZ2VTdGFydCIsYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHk6ImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IixiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6ImJlZm9yZVN0''@;'; put 'put ''cmV0Y2hpbmdDb2x1bW5XaWR0aCIsYmVmb3JlVG91Y2hTY3JvbGw6ImJlZm9yZVRvdWNoU2Nyb2xsIixiZWZvcmVUcmltUm93OiJiZWZvcmVUcmltUm93IixiZWZvcmVVbmRvOiJiZWZvcmVVbmRvIixiZWZvcmVVbmRvU3RhY2tDaGFuZ2U6ImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsYmVmb3Jl''@;'; put 'put ''VW5oaWRlQ29sdW1uczoiYmVmb3JlVW5oaWRlQ29sdW1ucyIsYmVmb3JlVW5oaWRlUm93czoiYmVmb3JlVW5oaWRlUm93cyIsYmVmb3JlVW5tZXJnZUNlbGxzOiJiZWZvcmVVbm1lcmdlQ2VsbHMiLGJlZm9yZVVudHJpbVJvdzoiYmVmb3JlVW50cmltUm93IixiZWZvcmVVcGRhdGVEYXRhOiJi''@;'; put 'put ''ZWZvcmVVcGRhdGVEYXRhIixiZWZvcmVWYWxpZGF0ZToiYmVmb3JlVmFsaWRhdGUiLGJlZm9yZVZhbHVlUmVuZGVyOiJiZWZvcmVWYWx1ZVJlbmRlciIsYmVmb3JlVmlld3BvcnRTY3JvbGw6ImJlZm9yZVZpZXdwb3J0U2Nyb2xsIixiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseToi''@;'; put 'put ''YmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLGJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseToiYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5IixiZWZvcmVWaWV3UmVuZGVyOiJiZWZvcmVWaWV3UmVuZGVyIixjb25zdHJ1Y3Q6ImNvbnN0cnVjdCIsaW5pdDoiaW5p''@;'; put 'put ''dCIsbW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkOiJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLG1vZGlmeUF1dG9maWxsUmFuZ2U6Im1vZGlmeUF1dG9maWxsUmFuZ2UiLG1vZGlmeUNvbEhlYWRlcjoibW9kaWZ5Q29sSGVhZGVyIixtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQ6Im1vZGlmeUNv''@;'; put 'put ''bHVtbkhlYWRlckhlaWdodCIsbW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWU6Im1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixtb2RpZnlDb2xXaWR0aDoibW9kaWZ5Q29sV2lkdGgiLG1vZGlmeUNvcHlhYmxlUmFuZ2U6Im1vZGlmeUNvcHlhYmxlUmFuZ2UiLG1vZGlmeUZpbHRlcnNNdWx0aVNlbGVj''@;'; put 'put ''dFZhbHVlOiJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIsbW9kaWZ5Rm9jdXNlZEVsZW1lbnQ6Im1vZGlmeUZvY3VzZWRFbGVtZW50Iixtb2RpZnlEYXRhOiJtb2RpZnlEYXRhIixtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbjoibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLG1v''@;'; put 'put ''ZGlmeUdldENlbGxDb29yZHM6Im1vZGlmeUdldENlbGxDb29yZHMiLG1vZGlmeUdldENvb3Jkc0VsZW1lbnQ6Im1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLG1vZGlmeVJvd0RhdGE6Im1vZGlmeVJvd0RhdGEiLG1vZGlmeVJvd0hlYWRlcjoibW9kaWZ5Um93SGVhZGVyIixtb2RpZnlSb3dIZWFk''@;'; put 'put ''ZXJXaWR0aDoibW9kaWZ5Um93SGVhZGVyV2lkdGgiLG1vZGlmeVJvd0hlaWdodDoibW9kaWZ5Um93SGVpZ2h0Iixtb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lOiJtb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lIixtb2RpZnlTb3VyY2VEYXRhOiJtb2RpZnlTb3VyY2VEYXRhIixtb2Rp''@;'; put 'put ''ZnlUcmFuc2Zvcm1FbmQ6Im1vZGlmeVRyYW5zZm9ybUVuZCIsbW9kaWZ5VHJhbnNmb3JtRm9jdXM6Im1vZGlmeVRyYW5zZm9ybUZvY3VzIixtb2RpZnlUcmFuc2Zvcm1TdGFydDoibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLHBlcnNpc3RlbnRTdGF0ZUxvYWQ6InBlcnNpc3RlbnRTdGF0ZUxvYWQi''@;'; put 'put ''LHBlcnNpc3RlbnRTdGF0ZVJlc2V0OiJwZXJzaXN0ZW50U3RhdGVSZXNldCIscGVyc2lzdGVudFN0YXRlU2F2ZToicGVyc2lzdGVudFN0YXRlU2F2ZSJ9LGZlYXR1cmVzOltkYShbWW0sT3BlXSksd2xdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJjb250YWluZXIiLCIiXSxbMywiaWQiXV0s''@;'; put 'put ''dGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsImRpdiIsMSwwKSwyJmQmJk1lKCJpZCIsaC5ob3RJZCl9LGVuY2Fwc3VsYXRpb246Mn0pfXJldHVybiBjfSkoKSxvOT0oKCk9PntjbGFzcyBje3N0YXRpYyB2ZXJzaW9uPSIxNS4zLjAiO3N0YXRpYyBmb3JSb290KCl7cmV0dXJue25n''@;'; put 'put ''TW9kdWxlOmMscHJvdmlkZXJzOltZbV19fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NW1vZD1raSh7dHlwZTpjfSk7c3RhdGljIFx1MDI3NWluaj1Bcih7fSl9cmV0dXJuIGN9KSgpO2NvbnN0IFBwZT0iaGFuZHNvbnRhYmxlRWRp''@;'; put 'put ''dG9yIjtjbGFzcyBSWCBleHRlbmRzIGE5e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iaGFuZHNvbnRhYmxlIn1vcGVuKCl7c3VwZXIub3BlbigpO2NvbnN0IGw9dGhpcy5odENvbnRhaW5lci5zdHlsZTt0aGlzLmh0RWRpdG9yJiYodGhpcy5odEVkaXRvci5kZXN0cm95KCksbC53''@;'; put 'put ''aWR0aD0iIixsLmhlaWdodD0iIixsLm92ZXJmbG93PSIiKSwibm9uZSI9PT1sLmRpc3BsYXkmJihsLmRpc3BsYXk9IiIpLHRoaXMuaHRFZGl0b3I9bmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKHRoaXMuaHRDb250YWluZXIsdGhpcy5odE9wdGlvbnMpLHRoaXMuaHRFZGl0b3IuaW5pdCgpLHRo''@;'; put 'put ''aXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0iIix0aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdD90aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwoMCwwKTp0aGlzLmh0RWRpdG9yLmRlc2VsZWN0Q2VsbCgpLHdFKHRoaXMuVEVYVEFSRUEsMCx0aGlzLlRFWFRBUkVBLnZhbHVl''@;'; put 'put ''Lmxlbmd0aCksdGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6dGhpcy5nZXRXaWR0aCgpLGhlaWdodDp0aGlzLmdldEhlaWdodCgpfSksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfWNsb3NlKCl7dGhpcy5odEVkaXRvciYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5''@;'; put 'put ''bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMucmVtb3ZlSG9va3NCeUtleSgiYmVmb3JlS2V5RG93biIpLHN1cGVyLmNsb3NlKCl9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdik7Y29uc3QgTT10aGlzLEQ9e3N0YXJ0Um93czowLHN0YXJ0Q29sczowLG1pblJv''@;'; put 'put ''d3M6MCxtaW5Db2xzOjAsY2xhc3NOYW1lOiJsaXN0Ym94Iixjb3B5UGFzdGU6ITEsYXV0b0NvbHVtblNpemU6ITEsYXV0b1Jvd1NpemU6ITEscmVhZE9ubHk6ITAsZmlsbEhhbmRsZTohMSxhdXRvV3JhcENvbDohMSxhdXRvV3JhcFJvdzohMSxhcmlhVGFnczohMSx0aGVtZU5hbWU6dGhpcy5o''@;'; put 'put ''b3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLGFmdGVyT25DZWxsTW91c2VEb3duKFoscmUpe2NvbnN0IGNlPXRoaXMuZ2V0U291cmNlRGF0YShyZS5yb3cscmUuY29sKTt2b2lkIDAhPT1jZSYmTS5zZXRWYWx1ZShjZSksTS5ob3QuZGVzdHJveUVkaXRvcigpfSxwcmV2ZW50V2hlZWw6ITAsbGF5''@;'; put 'put ''b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9O3RoaXMuY2VsbFByb3BlcnRpZXMuaGFuZHNvbnRhYmxlJiZFdShELHYuaGFuZHNvbnRhYmxlKSx0aGlzLmh0T3B0aW9ucz1EfWJlZ2luRWRpdGluZyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5v''@;'; put 'put ''bkJlZ2luRWRpdGluZztkJiYhMT09PWQoKXx8c3VwZXIuYmVnaW5FZGl0aW5nKGwsYSl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2wuY2xhc3NOYW1lPSJoYW5kc29udGFi''@;'; put 'put ''bGVFZGl0b3IiLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKGwpLHRoaXMuaHRDb250YWluZXI9bCx0aGlzLmFzc2lnbkhvb2tzKCl9ZmluaXNoRWRpdGluZyhsLGEsZCl7aWYodGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5pc0xpc3RlbmluZygpJiZ0aGlzLmhvdC5saXN0''@;'; put 'put ''ZW4oKSx0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmdldFNlbGVjdGVkTGFzdCgpKXtjb25zdCBoPXRoaXMuaHRFZGl0b3IuZ2V0VmFsdWUoKTt2b2lkIDAhPT1oJiZ0aGlzLnNldFZhbHVlKGgpfXN1cGVyLmZpbmlzaEVkaXRpbmcobCxhLGQpfWdldEhlaWdodCgpe3JldHVybiB0aGlz''@;'; put 'put ''Lmh0RWRpdG9yLnZpZXcuZ2V0VGFibGVIZWlnaHQoKSsxfWdldFdpZHRoKCl7cmV0dXJuIHRoaXMuaHRFZGl0b3Iudmlldy5nZXRUYWJsZVdpZHRoKCl9YXNzaWduSG9va3MoKXt0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dmFyIGw7bnVsbD09PShsPXRoaXMuaHRFZGl0''@;'; put 'put ''b3IpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChsLGEpPT57dmFyIGQ7YXx8bnVsbD09PShkPXRoaXMuaHRFZGl0b3IpfHx2b2lkIDA9PT1kfHxkLnVzZVRoZW1lKGwpfSl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO3N1cGVyLnJlZ2lzdGVyU2hvcnRjdXRzKCk7Y29uc3QgaD0oZix2KT0+e2NvbnN0IE09dGhpcy5odEVkaXRvcjtpZih2b2lkIDAhPT1mJiYoZjwwfHxNLmZsaXBwZWQmJmY+TS5jb3VudFJvd3MoKS0xP00u''@;'; put 'put ''ZGVzZWxlY3RDZWxsKCk6TS5zZWxlY3RDZWxsKGYsMCksTS5nZXREYXRhKCkubGVuZ3RoKSlyZXR1cm4gdi5wcmV2ZW50RGVmYXVsdCgpLEIyKHYpLHRoaXMuaG90Lmxpc3RlbigpLHRoaXMuVEVYVEFSRUEuZm9jdXMoKSwhMX07YS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0s''@;'; put 'put ''Y2FsbGJhY2s6Zj0+e2NvbnN0IHY9dGhpcy5odEVkaXRvcjtsZXQgTSxEO3JldHVybiF2LmdldFNlbGVjdGVkTGFzdCgpJiZ2LmZsaXBwZWQ/TT12LmNvdW50Um93cygpLTE6di5nZXRTZWxlY3RlZExhc3QoKSYmKHYuZmxpcHBlZD8oRD12LmdldFNlbGVjdGVkTGFzdCgpWzBdLE09TWF0aC5t''@;'; put 'put ''YXgoMCxELTEpKTooRD12LmdldFNlbGVjdGVkTGFzdCgpWzBdLE09RC0xKSksaChNLGYpfSxwcmV2ZW50RGVmYXVsdDohMX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOmY9Pntjb25zdCB2PXRoaXMuaHRFZGl0b3I7bGV0IE0sRDtpZih2LmdldFNlbGVjdGVkTGFzdCgpfHx2LmZs''@;'; put 'put ''aXBwZWQpe2lmKHYuZ2V0U2VsZWN0ZWRMYXN0KCkpaWYodi5mbGlwcGVkKU09di5nZXRTZWxlY3RlZExhc3QoKVswXSsxO2Vsc2UgaWYoIXYuZmxpcHBlZCl7Y29uc3QgWj12LmNvdW50Um93cygpLTE7RD12LmdldFNlbGVjdGVkTGFzdCgpWzBdLE09TWF0aC5taW4oWixEKzEpfX1lbHNlIE09''@;'; put 'put ''MDtyZXR1cm4gaChNLGYpfSxwcmV2ZW50RGVmYXVsdDohMX1dLHtncm91cDpQcGUscmVsYXRpdmVUb0dyb3VwOldtLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIo''@;'; put 'put ''KS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFBwZSl9fWZ1bmN0aW9uIEZwZShjLGwsYSl7SHBlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBIcGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUg''@;'; put 'put ''c2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGpQKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBvYXQoYyl7dmFyIGw9ZnVuY3Rpb24gc2F0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By''@;'; put 'put ''aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu''@;'; put 'put ''ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs''@;'; put 'put ''Y31mdW5jdGlvbiBMWChjLGwpe3JldHVybiBjLmdldChPWChjLGwpKX1mdW5jdGlvbiBPWChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFBYPW5ldyBXZWFrTWFwLE5wZT1uZXcgV2Vha01hcCxGWD1uZXcgV2Vha1NldDtjbGFzcyBIWCBleHRlbmRzIFJYe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBhYXQoYyxsKXtIcGUoYyxsKSxs''@;'; put 'put ''LmFkZChjKX0odGhpcyxGWCksalAodGhpcywicXVlcnkiLG51bGwpLGpQKHRoaXMsInN0cmlwcGVkQ2hvaWNlcyIsW10pLGpQKHRoaXMsInJhd0Nob2ljZXMiLFtdKSxGcGUodGhpcyxQWCx0aGlzLmhvdC5ndWlkLnNsaWNlKDAsOSkpLEZwZSh0aGlzLE5wZSxNRSgoKT0+e3RoaXMuZm9jdXMo''@;'; put 'put ''KX0sMTAwKSksalAodGhpcywic29ydEJ5UmVsZXZhbmNlIixmdW5jdGlvbihsLGEsZCl7Y29uc3QgaD1bXSxmPVtdLHY9bC5sZW5ndGg7bGV0IEQsWixyZSxjZSxNPWEubGVuZ3RoO2lmKDA9PT12KXtmb3IocmU9MDtyZTxNO3JlKyspZi5wdXNoKHJlKTtyZXR1cm4gZn1mb3IocmU9MDtyZTxN''@;'; put 'put ''O3JlKyspe2lmKFo9ZyQobGMoYVtyZV0pKSxkKWNlPVouaW5kZXhPZihsKTtlbHNle2NvbnN0IGJlPXRoaXMuY2VsbFByb3BlcnRpZXMubG9jYWxlO2NlPVoudG9Mb2NhbGVMb3dlckNhc2UoYmUpLmluZGV4T2YobC50b0xvY2FsZUxvd2VyQ2FzZShiZSkpfS0xIT09Y2UmJihEPVoubGVuZ3Ro''@;'; put 'put ''LWNlLXYsaC5wdXNoKHtiYXNlSW5kZXg6cmUsaW5kZXg6Y2UsY2hhcnNMZWZ0OkQsdmFsdWU6Wn0pKX1mb3IoaC5zb3J0KChiZSxFZSk9PntpZigtMT09PUVlLmluZGV4KXJldHVybi0xO2lmKC0xPT09YmUuaW5kZXgpcmV0dXJuIDE7aWYoYmUuaW5kZXg8RWUuaW5kZXgpcmV0dXJuLTE7aWYo''@;'; put 'put ''RWUuaW5kZXg8YmUuaW5kZXgpcmV0dXJuIDE7aWYoYmUuaW5kZXg9PT1FZS5pbmRleCl7aWYoYmUuY2hhcnNMZWZ0PEVlLmNoYXJzTGVmdClyZXR1cm4tMTtpZihiZS5jaGFyc0xlZnQ+RWUuY2hhcnNMZWZ0KXJldHVybiAxfXJldHVybiAwfSkscmU9MCxNPWgubGVuZ3RoO3JlPE07cmUrKylm''@;'; put 'put ''LnB1c2goaFtyZV0uYmFzZUluZGV4KTtyZXR1cm4gZn0pfXN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iYXV0b2NvbXBsZXRlIn1nZXRWYWx1ZSgpe2NvbnN0IGw9dGhpcy5yYXdDaG9pY2VzLmZpbmQoYT0+dGhpcy5zdHJpcFZhbHVlSWZOZWVkZWQoYSk9PT10aGlzLlRFWFRBUkVB''@;'; put 'put ''LnZhbHVlKTtyZXR1cm4gUGEobCk/bDp0aGlzLlRFWFRBUkVBLnZhbHVlfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSxUaSh0aGlzLmh0Q29udGFpbmVyLCJhdXRvY29tcGxldGVFZGl0b3IiKSxUaSh0aGlzLmh0Q29udGFpbmVyLC0xPT09dGhpcy5ob3Qucm9vdFdp''@;'; put 'put ''bmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZigiTWFjIik/IiI6Imh0TWFjU2Nyb2xsIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8odGhpcy5URVhUQVJFQSxbWyJ0eXBlIiwidGV4dCJdLFsicm9sZSIsImNvbWJvYm94Il0sRTJlKCJsaXN0Ym94IiksWyJhcmlh''@;'; put 'put ''LWF1dG9jb21wbGV0ZSIsImxpc3QiXV0pfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZvKHRoaXMuVEVYVEFSRUEsW04yKCJmYWxzZSIpLHJYZShgJHtMWChQWCx0aGlzKX0tbGlzdGJveC0k''@;'; put 'put ''e2x9LSR7YX1gKV0pfW9wZW4oKXtzdXBlci5vcGVuKCk7Y29uc3QgbD12b2lkIDA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bnx8dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd24sYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzLGQ9QXJyYXkuaXNBcnJh''@;'; put 'put ''eSh0aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZSk/dGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2U6bnVsbCxoPWQ/Lmxlbmd0aCx7cm93OmYsY29sOnZ9PXRoaXM7dGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCksdGhpcy5mb2N1cygpLHRoaXMuYWRkSG9vaygiYmVmb3JlS2V5RG93biIsTT0+''@;'; put 'put ''dGhpcy5vbkJlZm9yZUtleURvd24oTSkpLHRoaXMuaHRFZGl0b3IuYWRkSG9vaygiYWZ0ZXJTY3JvbGwiLExYKE5wZSx0aGlzKSksdGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7Y29sV2lkdGhzOmw/W3N1KHRoaXMuVEVYVEFSRUEpLTJdOnZvaWQgMCxhdXRvQ29sdW1uU2l6ZTohMCxy''@;'; put 'put ''ZW5kZXJlcjooTSxELFoscmUsY2UsYmUsRWUpPT57QWcoTSxELFoscmUsY2UsYmUsRWUpO2NvbnN0e2ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6QmUsYWxsb3dIdG1sOnFlLGxvY2FsZTpydH09dGhpcy5jZWxsUHJvcGVydGllcyxwdD10aGlzLnF1ZXJ5O2xldCBKdCx2bixkdD1sYyhiZSk7ZHQm''@;'; put 'put ''JiFxZSYmKEp0PSEwPT09QmU/ZHQuaW5kZXhPZihwdCk6ZHQudG9Mb2NhbGVMb3dlckNhc2UocnQpLmluZGV4T2YocHQudG9Mb2NhbGVMb3dlckNhc2UocnQpKSwtMSE9PUp0JiYodm49ZHQuc3Vic3RyKEp0LHB0Lmxlbmd0aCksZHQ9ZHQucmVwbGFjZSh2bixgPHN0cm9uZz4ke3ZufTwvc3Ry''@;'; put 'put ''b25nPmApKSksYSYmdm8oRCxbWyJyb2xlIiwib3B0aW9uIl0sLi4uZD9bc1hlKGgpXTpbXSwuLi5kP1tsWGUoZC5pbmRleE9mKGJlKSsxKV06W10sWyJpZCIsYCR7dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5pZH1fJHtafS0ke3JlfWBdXSksRC5pbm5lckhUTUw9ZHR9LGFmdGVyU2VsZWN0''@;'; put 'put ''aW9uRW5kOihNLEQpPT57aWYoYSl7Y29uc3QgWj1jZT0+e3ZvKGNlLFtbImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIl1dKSx2byh0aGlzLlRFWFRBUkVBLC4uLihjPT5bImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsY10pKGNlLmlkKSl9LHJlPXRoaXMuaHRFZGl0b3IuZ2V0Q2VsbChNLEQsITApO251''@;'; put 'put ''bGwhPT1yZT9aKHJlKTp0aGlzLmh0RWRpdG9yLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT57Y29uc3QgY2U9dGhpcy5odEVkaXRvci5nZXRDZWxsKE0sRCwhMCk7WihjZSl9KX19fSksYSYmKHZvKHRoaXMuaHRFZGl0b3Iudmlldy5fd3Qud3RPdmVybGF5cy53dFRh''@;'; put 'put ''YmxlLlRBQkxFLCJyb2xlIiwicHJlc2VudGF0aW9uIiksdm8odGhpcy5odEVkaXRvci5yb290RWxlbWVudCxbWyJyb2xlIiwibGlzdGJveCJdLGFYZSgicG9saXRlIiksb1hlKCJ0ZXh0IiksWyJpZCIsYCR7TFgoUFgsdGhpcyl9LWxpc3Rib3gtJHtmfS0ke3Z9YF1dKSx2byh0aGlzLlRFWFRB''@;'; put 'put ''UkVBLC4uLk4yKCJ0cnVlIikpKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5xdWVyeUNob2ljZXModGhpcy5URVhUQVJFQS52YWx1ZSl9KX1jbG9zZSgpe3RoaXMucmVtb3ZlSG9va3NCeUtleSgiYmVmb3JlS2V5RG93biIpLHN1cGVyLmNsb3NlKCksdGhpcy5ob3QuZ2V0''@;'; put 'put ''U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8odGhpcy5URVhUQVJFQSxbTjIoImZhbHNlIildKX1kaXNjYXJkRWRpdG9yKGwpe3N1cGVyLmRpc2NhcmRFZGl0b3IobCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1xdWVyeUNob2ljZXMobCl7Y29uc3QgYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJj''@;'; put 'put ''ZTt0aGlzLnF1ZXJ5PWwsImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5jYWxsKHRoaXMuY2VsbFByb3BlcnRpZXMsbCxkPT57dGhpcy5yYXdDaG9pY2VzPWQsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoZCkpfSk6QXJyYXkuaXNBcnJheShhKT8odGhpcy5y''@;'; put 'put ''YXdDaG9pY2VzPWEsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoYSkpKTp0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KFtdKX11cGRhdGVDaG9pY2VzTGlzdChsKXtjb25zdCBhPVMkKHRoaXMuVEVYVEFSRUEpLGQ9ejJlKHRoaXMuVEVYVEFSRUEpLGg9dGhp''@;'; put 'put ''cy5jZWxsUHJvcGVydGllcy5zb3J0QnlSZWxldmFuY2UsZj10aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcjtsZXQgdj1udWxsLE09bnVsbCxEPWw7aCYmKHY9dGhpcy5zb3J0QnlSZWxldmFuY2UodGhpcy5zdHJpcFZhbHVlSWZOZWVkZWQodGhpcy5nZXRWYWx1ZSgpKSxELHRoaXMuY2VsbFBy''@;'; put 'put ''b3BlcnRpZXMuZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSkpO2NvbnN0IFo9QXJyYXkuaXNBcnJheSh2KT92Lmxlbmd0aDowO2lmKCExPT09ZilaJiYoTT12WzBdKTtlbHNle2NvbnN0IHJlPVtdO2ZvcihsZXQgY2U9MCxiZT1ELmxlbmd0aDtjZTxiZSYmIShoJiZaPD1jZSk7Y2UrKylyZS5wdXNo''@;'; put 'put ''KFo/RFt2W2NlXV06RFtjZV0pO009MCxEPXJlfXRoaXMuc3RyaXBwZWRDaG9pY2VzPUQsdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PTA9PT1ELmxlbmd0aD8ibm9uZSI6IiIsdGhpcy5odEVkaXRvci5sb2FkRGF0YShoRShbRF0pKSxELmxlbmd0aD4wJiYodGhpcy51''@;'; put 'put ''cGRhdGVEcm9wZG93bkRpbWVuc2lvbnMoKSx0aGlzLmZsaXBEcm9wZG93bklmTmVlZGVkKCksITA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdCYmdGhpcy5oaWdobGlnaHRCZXN0TWF0Y2hpbmdDaG9pY2UoTSkpLHRoaXMuaG90Lmxpc3RlbigpLHdFKHRoaXMuVEVYVEFSRUEsYSxhPT09''@;'; put 'put ''ZD92b2lkIDA6ZCl9ZmxpcERyb3Bkb3duSWZOZWVkZWQoKXtjb25zdCBsPXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKSxhPWwuaGVpZ2h0O2xldCBkPWwudG9wO2lmKHRoaXMuaG90LnZpZXcuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IE09dGhpcy5ob3Qudmlldy5n''@;'; put 'put ''ZXRUYWJsZU9mZnNldCgpLnRvcC10aGlzLmhvdC5yb290V2luZG93LnNjcm9sbFk7ZD1NYXRoLm1heChkK00sMCl9Y29uc3QgaD10aGlzLmdldEhlaWdodCgpLGY9dGhpcy5ob3Qudmlldy5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1kLWEsdj1oPmYmJmQ+ZithO3JldHVybiB2P3RoaXMuZmxpcERy''@;'; put 'put ''b3Bkb3duKGgpOnRoaXMudW5mbGlwRHJvcGRvd24oKSx0aGlzLmxpbWl0RHJvcGRvd25JZk5lZWRlZCh2P2Q6ZixoKSx2fWxpbWl0RHJvcGRvd25JZk5lZWRlZChsLGEpe2lmKGE+bCl7bGV0IGQ9MCxoPTAsZj0wLHY9bnVsbDtkb3tmPXRoaXMuaHRFZGl0b3IuZ2V0Um93SGVpZ2h0KGgpfHx0''@;'; put 'put ''aGlzLmh0RWRpdG9yLnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpLGQrPWYsaCs9MX13aGlsZShkPGwpO3Y9ZC1mLHRoaXMuaHRFZGl0b3IuZmxpcHBlZCYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wPXBhcnNlSW50KHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5''@;'; put 'put ''bGUudG9wLDEwKSthLXYrInB4IiksdGhpcy5zZXREcm9wZG93bkhlaWdodChkLWYpfX1mbGlwRHJvcGRvd24obCl7Y29uc3QgYT10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2EucG9zaXRpb249ImFic29sdXRlIixhLnRvcD0tbCsicHgiLHRoaXMuaHRFZGl0b3IuZmxpcHBlZD0h''@;'; put 'put ''MH11bmZsaXBEcm9wZG93bigpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtsLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC50b3A9IiIsdGhpcy5odEVkaXRvci5mbGlwcGVkPXZvaWQgMH11cGRhdGVEcm9wZG93bkRpbWVuc2lvbnMoKXt0aGlzLmh0RWRpdG9yLnVwZGF0''@;'; put 'put ''ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFdpZHRoKCksaGVpZ2h0OnRoaXMuZ2V0SGVpZ2h0KCl9KSxPWChGWCx0aGlzLFZwZSkuY2FsbCh0aGlzKSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfXNldERyb3Bkb3du''@;'; put 'put ''SGVpZ2h0KGwpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2hlaWdodDpsfSksT1goRlgsdGhpcyxWcGUpLmNhbGwodGhpcyksdGhpcy5odEVkaXRvci52aWV3Ll93dC53dFRhYmxlLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKX1oaWdobGlnaHRCZXN0TWF0Y2hp''@;'; put 'put ''bmdDaG9pY2UobCl7Im51bWJlciI9PXR5cGVvZiBsP3RoaXMuaHRFZGl0b3Iuc2VsZWN0Q2VsbChsLDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsITEpOnRoaXMuaHRFZGl0b3IuZGVzZWxlY3RDZWxsKCl9Z2V0SGVpZ2h0KCl7Y29uc3QgbD10aGlzLmhvdC5yb290V2luZG93LmdldENvbXB1dGVk''@;'; put 'put ''U3R5bGUodGhpcy5odENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIikpLGE9cGFyc2VJbnQobC5ib3JkZXJUb3BXaWR0aCwxMCkrcGFyc2VJbnQobC5ib3JkZXJCb3R0b21XaWR0aCwxMCksZD1NYXRoLm1pbih0aGlzLmNlbGxQcm9wZXJ0aWVzLnZpc2libGVSb3dzLHRoaXMuc3Ry''@;'; put 'put ''aXBwZWRDaG9pY2VzLmxlbmd0aCk7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDpkfSwoZix2KT0+dikucmVkdWNlKChmLHYpPT5mKyh0aGlzLmh0RWRpdG9yLmdldFJvd0hlaWdodCh2KXx8dGhpcy5odEVkaXRvci52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKSksMCkrYSsxfWdldFdpZHRo''@;'; put 'put ''KCl7Y29uc3QgbD10aGlzLmhvdC5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5odENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIikpLGE9cGFyc2VJbnQobC5ib3JkZXJJbmxpbmVTdGFydFdpZHRoLDEwKStwYXJzZUludChsLmJvcmRlcklubGluZUVuZFdpZHRoLDEw''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5odEVkaXRvci5nZXRDb2xXaWR0aCgwKSthfXN0cmlwVmFsdWVJZk5lZWRlZChsKXtyZXR1cm4gdGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKFtsXSlbMF19c3RyaXBWYWx1ZXNJZk5lZWRlZChsKXtjb25zdHthbGxvd0h0bWw6YX09dGhpcy5jZWxsUHJvcGVydGllcyxk''@;'; put 'put ''PXlzKGwsZj0+bGMoZikpO3JldHVybiB5cyhkLGY9PmE/ZjpnJChmKSl9YWxsb3dLZXlFdmVudFByb3BhZ2F0aW9uKGwpe2NvbnN0IGE9dGhpcy5odEVkaXRvci5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGRfcm93PWE/YS5mcm9tLnJvdzotMTtsZXQgaD0hMTtyZXR1cm4gbD09PVlhLkFSUk9X''@;'; put 'put ''X0RPV04mJmRfcm93PjAmJmRfcm93PHRoaXMuaHRFZGl0b3IuY291bnRSb3dzKCktMSYmKGg9ITApLGw9PT1ZYS5BUlJPV19VUCYmZF9yb3c+LTEmJihoPSEwKSxofW9uQmVmb3JlS2V5RG93bihsKXtpZihuZmUobC5rZXlDb2RlKXx8bC5rZXlDb2RlPT09WWEuQkFDS1NQQUNFfHxsLmtleUNv''@;'; put 'put ''ZGU9PT1ZYS5ERUxFVEV8fGwua2V5Q29kZT09PVlhLklOU0VSVCl7bGV0IGE9MTA7aWYobC5rZXlDb2RlPT09WWEuQyYmKGwuY3RybEtleXx8bC5tZXRhS2V5KSlyZXR1cm47dGhpcy5pc09wZW5lZCgpfHwoYSs9MTApLHRoaXMuaHRFZGl0b3ImJnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQo''@;'; put 'put ''KCk9Pnt0aGlzLnF1ZXJ5Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKX0sYSl9fX1mdW5jdGlvbiBWcGUoKXt0aGlzLmh0RWRpdG9yLnZpZXcuaGFzVmVydGljYWxTY3JvbGwoKSYmdGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6dGhpcy5nZXRXaWR0aCgpK2YwKHRoaXMu''@;'; put 'put ''aG90LnJvb3REb2N1bWVudCl9KX1jbGFzcyBCcGUgZXh0ZW5kcyBrX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImNoZWNrYm94In1iZWdpbkVkaXRpbmcobCxhKXtpZihhJiYibW91c2V1cCI9PT1hLnR5cGUmJiJURCI9PT1hLnRhcmdldC5ub2RlTmFtZSl7Y29uc3QgZD10aGlz''@;'; put 'put ''LlRELnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKTtwbyhkLCJodEJhZFZhbHVlIil8fGQuY2xpY2soKX19ZmluaXNoRWRpdGluZygpe31pbml0KCl7fW9wZW4oKXt9Y2xvc2UoKXt9Z2V0VmFsdWUoKXt9c2V0VmFsdWUoKXt9Zm9jdXMoKXt9fWNvbnN0IEdtPSgpPT53''@;'; put 'put ''aW5kb3csJDI9KCk9PndpbmRvdy5kb2N1bWVudCxOWD0oYyxsKT0+d2luZG93LnNldFRpbWVvdXQoYyxsKSxIcD1mdW5jdGlvbihjLGwsYSxkKXtjLmFkZEV2ZW50TGlzdGVuZXIobCxhLCEhZCl9LGtnPWZ1bmN0aW9uKGMsbCxhLGQpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsISFkKX0s''@;'; put 'put ''Umg9ZnVuY3Rpb24oYyxsKXtyZXR1cm4tMSE9PSgiICIrYy5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgIitsKyIgIil9LFZYPWZ1bmN0aW9uKGMsbCl7UmgoYyxsKXx8KGMuY2xhc3NOYW1lPSIiPT09Yy5jbGFzc05hbWU/bDpjLmNsYXNzTmFtZSsiICIrbCl9LEJYPWZ1bmN0aW9uKGMsbCl7''@;'; put 'put ''Yy5jbGFzc05hbWU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMudHJpbT9jLnRyaW0oKTpjLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oKCIgIitjLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoIiAiK2wrIiAiLCIgIikpfSxqWD1mdW5jdGlvbihjKXtyZXR1cm4vQXJyYXkvLnRlc3QoT2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS50b1N0cmluZy5jYWxsKGMpKX0sTGg9ZnVuY3Rpb24oYyl7cmV0dXJuL0RhdGUvLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpKSYmIWlzTmFOKGMuZ2V0VGltZSgpKX0sZGF0PWZ1bmN0aW9uKGMpe2xldCBsPWMuZ2V0RGF5KCk7cmV0dXJuIDA9PT1sfHw2''@;'; put 'put ''PT09bH0saGF0PWZ1bmN0aW9uKGMpe3JldHVybiBjJTQ9PTAmJmMlMTAwIT0wfHxjJTQwMD09MH0sanBlPWZ1bmN0aW9uKGMsbCl7cmV0dXJuWzMxLGhhdChjKT8yOToyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV1bbF19LHpQPWZ1bmN0aW9uKGMpe0xoKGMpJiZjLnNldEhvdXJz''@;'; put 'put ''KDAsMCwwLDApfSxVUD1mdW5jdGlvbihjLGwpe3JldHVybiBjLmdldFRpbWUoKT09PWwuZ2V0VGltZSgpfSxaUD1mdW5jdGlvbihjLGwsYSl7bGV0IGQsaDtmb3IoZCBpbiBsKWg9dm9pZCAwIT09Y1tkXSxoJiYib2JqZWN0Ij09dHlwZW9mIGxbZF0mJm51bGwhPT1sW2RdJiZ2b2lkIDA9PT1s''@;'; put 'put ''W2RdLm5vZGVOYW1lP0xoKGxbZF0pP2EmJihjW2RdPW5ldyBEYXRlKGxbZF0uZ2V0VGltZSgpKSk6algobFtkXSk/YSYmKGNbZF09bFtkXS5zbGljZSgwKSk6Y1tkXT1aUCh7fSxsW2RdLGEpOihhfHwhaCkmJihjW2RdPWxbZF0pO3JldHVybiBjfSx6cGU9ZnVuY3Rpb24oYyxsLGEpe2xldCBk''@;'; put 'put ''PSQyKCkuY3JlYXRlRXZlbnQoIkhUTUxFdmVudHMiKTtkLmluaXRFdmVudChsLCEwLCExKSxkPVpQKGQsYSksYy5kaXNwYXRjaEV2ZW50KGQpfSxVcGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMubW9udGg8MCYmKGMueWVhci09TWF0aC5jZWlsKE1hdGguYWJzKGMubW9udGgpLzEyKSxjLm1vbnRo''@;'; put 'put ''Kz0xMiksYy5tb250aD4xMSYmKGMueWVhcis9TWF0aC5mbG9vcihNYXRoLmFicyhjLm1vbnRoKS8xMiksYy5tb250aC09MTIpLGN9LE5wPXtmaWVsZDpudWxsLGJvdW5kOnZvaWQgMCxhcmlhTGFiZWw6IlVzZSB0aGUgYXJyb3cga2V5cyB0byBwaWNrIGEgZGF0ZSIscG9zaXRpb246ImJvdHRv''@;'; put 'put ''bSBsZWZ0IixyZXBvc2l0aW9uOiEwLGZvcm1hdDoiWVlZWS1NTS1ERCIsdG9TdHJpbmc6bnVsbCxwYXJzZTpudWxsLGRlZmF1bHREYXRlOm51bGwsc2V0RGVmYXVsdERhdGU6ITEsZmlyc3REYXk6MCxmaXJzdFdlZWtPZlllYXJNaW5EYXlzOjQsZm9ybWF0U3RyaWN0OiExLG1pbkRhdGU6bnVs''@;'; put 'put ''bCxtYXhEYXRlOm51bGwseWVhclJhbmdlOjEwLHNob3dXZWVrTnVtYmVyOiExLHBpY2tXaG9sZVdlZWs6ITEsbWluWWVhcjowLG1heFllYXI6OTk5OSxtaW5Nb250aDp2b2lkIDAsbWF4TW9udGg6dm9pZCAwLHN0YXJ0UmFuZ2U6bnVsbCxlbmRSYW5nZTpudWxsLGlzUlRMOiExLHllYXJTdWZm''@;'; put 'put ''aXg6IiIsc2hvd01vbnRoQWZ0ZXJZZWFyOiExLHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ITEsZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiExLG51bWJlck9mTW9udGhzOjEsbWFpbkNhbGVuZGFyOiJsZWZ0Iixjb250YWluZXI6dm9pZCAwLGJs''@;'; put 'put ''dXJGaWVsZE9uU2VsZWN0OiEwLGkxOG46e3ByZXZpb3VzTW9udGg6IlByZXZpb3VzIE1vbnRoIixuZXh0TW9udGg6Ik5leHQgTW9udGgiLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIs''@;'; put 'put ''Ik9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sd2Vla2RheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHdlZWtkYXlzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmki''@;'; put 'put ''LCJTYXQiXX0sdGhlbWU6bnVsbCxldmVudHM6W10sb25TZWxlY3Q6bnVsbCxvbk9wZW46bnVsbCxvbkNsb3NlOm51bGwsb25EcmF3Om51bGwsa2V5Ym9hcmRJbnB1dDohMH0sWnBlPWZ1bmN0aW9uKGMsbCxhKXtmb3IobCs9Yy5maXJzdERheTtsPj03OylsLT03O3JldHVybiBhP2MuaTE4bi53''@;'; put 'put ''ZWVrZGF5c1Nob3J0W2xdOmMuaTE4bi53ZWVrZGF5c1tsXX0sZmF0PWZ1bmN0aW9uKGMpe2xldCBsPVtdLGE9ImZhbHNlIjtpZihjLmlzRW1wdHkpe2lmKCFjLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpcmV0dXJuJzx0ZCBjbGFzcz0iaXMtZW1wdHkiPjwvdGQ+JztsLnB1c2go''@;'; put 'put ''ImlzLW91dHNpZGUtY3VycmVudC1tb250aCIpLGMuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzfHxsLnB1c2goImlzLXNlbGVjdGlvbi1kaXNhYmxlZCIpfXJldHVybiBjLmlzRGlzYWJsZWQmJmwucHVzaCgiaXMtZGlzYWJsZWQiKSxjLmlzVG9kYXkmJmwucHVz''@;'; put 'put ''aCgiaXMtdG9kYXkiKSxjLmlzU2VsZWN0ZWQmJihsLnB1c2goImlzLXNlbGVjdGVkIiksYT0idHJ1ZSIpLGMuaGFzRXZlbnQmJmwucHVzaCgiaGFzLWV2ZW50IiksYy5pc0luUmFuZ2UmJmwucHVzaCgiaXMtaW5yYW5nZSIpLGMuaXNTdGFydFJhbmdlJiZsLnB1c2goImlzLXN0YXJ0cmFuZ2Ui''@;'; put 'put ''KSxjLmlzRW5kUmFuZ2UmJmwucHVzaCgiaXMtZW5kcmFuZ2UiKSwnPHRkIGRhdGEtZGF5PSInK2MuZGF5KyciIGNsYXNzPSInK2wuam9pbigiICIpKyciIGFyaWEtc2VsZWN0ZWQ9IicrYSsnIj48YnV0dG9uIGNsYXNzPSJwaWthLWJ1dHRvbiBwaWthLWRheSIgdHlwZT0iYnV0dG9uIiBkYXRh''@;'; put 'put ''LXBpa2EteWVhcj0iJytjLnllYXIrJyIgZGF0YS1waWthLW1vbnRoPSInK2MubW9udGgrJyIgZGF0YS1waWthLWRheT0iJytjLmRheSsnIj4nK2MuZGF5KyI8L2J1dHRvbj48L3RkPiJ9LGdhdD1mdW5jdGlvbihjLGwsYSxkLGgpe2xldCBmPW5ldyBEYXRlKGQsYSxsKTtyZXR1cm4nPHRkIGNs''@;'; put 'put ''YXNzPSJwaWthLXdlZWsiPicrKGMuaGFzTW9tZW50P2MubW9tZW50KGYpLmlzb1dlZWsoKTpmdW5jdGlvbihjLGwpe2Muc2V0SG91cnMoMCwwLDAsMCk7bGV0IGE9Yy5nZXREYXRlKCksZD1jLmdldERheSgpLGg9bCxmPWgtMSxNPWZ1bmN0aW9uKGJlKXtyZXR1cm4oYmUrNy0xKSU3fTtjLnNl''@;'; put 'put ''dERhdGUoYStmLU0oZCkpO2xldCBEPW5ldyBEYXRlKGMuZ2V0RnVsbFllYXIoKSwwLGgpLHJlPShjLmdldFRpbWUoKS1ELmdldFRpbWUoKSkvODY0ZTU7cmV0dXJuIDErTWF0aC5yb3VuZCgocmUtZitNKEQuZ2V0RGF5KCkpKS83KX0oZixoKSkrIjwvdGQ+In0sbWF0PWZ1bmN0aW9uKGMsbCxh''@;'; put 'put ''LGQpe3JldHVybic8dHIgY2xhc3M9InBpa2Etcm93JysoYT8iIHBpY2std2hvbGUtd2VlayI6IiIpKyhkPyIgaXMtc2VsZWN0ZWQiOiIiKSsnIj4nKyhsP2MucmV2ZXJzZSgpOmMpLmpvaW4oIiIpKyI8L3RyPiJ9LHlhdD1mdW5jdGlvbihjLGwsYSxkLGgsZil7bGV0IHYsTSxELEVlLEJlLFo9''@;'; put 'put ''Yy5fbyxyZT1hPT09Wi5taW5ZZWFyLGNlPWE9PT1aLm1heFllYXIsYmU9JzxkaXYgaWQ9IicrZisnIiBjbGFzcz0icGlrYS10aXRsZSIgcm9sZT0iaGVhZGluZyIgYXJpYS1saXZlPSJwb2xpdGUiPicscWU9ITAscnQ9ITA7Zm9yKEQ9W10sdj0wO3Y8MTI7disrKUQucHVzaCgnPG9wdGlvbiB2''@;'; put 'put ''YWx1ZT0iJysoYT09PWg/di1sOjEyK3YtbCkrJyInKyh2PT09ZD8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsocmUmJnY8Wi5taW5Nb250aHx8Y2UmJnY+Wi5tYXhNb250aD8nIGRpc2FibGVkPSJkaXNhYmxlZCInOiIiKSsiPiIrWi5pMThuLm1vbnRoc1t2XSsiPC9vcHRpb24+Iik7Zm9y''@;'; put 'put ''KEVlPSc8ZGl2IGNsYXNzPSJwaWthLWxhYmVsIj4nK1ouaTE4bi5tb250aHNbZF0rJzxzZWxlY3QgY2xhc3M9InBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LW1vbnRoIiB0YWJpbmRleD0iLTEiPicrRC5qb2luKCIiKSsiPC9zZWxlY3Q+PC9kaXY+IixqWChaLnllYXJSYW5nZSk/KHY9Wi55ZWFy''@;'; put 'put ''UmFuZ2VbMF0sTT1aLnllYXJSYW5nZVsxXSsxKToodj1hLVoueWVhclJhbmdlLE09MSthK1oueWVhclJhbmdlKSxEPVtdO3Y8TSYmdjw9Wi5tYXhZZWFyO3YrKyl2Pj1aLm1pblllYXImJkQucHVzaCgnPG9wdGlvbiB2YWx1ZT0iJyt2KyciJysodj09PWE/JyBzZWxlY3RlZD0ic2VsZWN0ZWQi''@;'; put 'put ''JzoiIikrIj4iK3YrIjwvb3B0aW9uPiIpO3JldHVybiBCZT0nPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+JythK1oueWVhclN1ZmZpeCsnPHNlbGVjdCBjbGFzcz0icGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QteWVhciIgdGFiaW5kZXg9Ii0xIj4nK0Quam9pbigiIikrIjwvc2VsZWN0PjwvZGl2''@;'; put 'put ''PiIsYmUrPVouc2hvd01vbnRoQWZ0ZXJZZWFyP0JlK0VlOkVlK0JlLHJlJiYoMD09PWR8fFoubWluTW9udGg+PWQpJiYocWU9ITEpLGNlJiYoMTE9PT1kfHxaLm1heE1vbnRoPD1kKSYmKHJ0PSExKSwwPT09bCYmKGJlKz0nPGJ1dHRvbiBjbGFzcz0icGlrYS1wcmV2JysocWU/IiI6IiBpcy1k''@;'; put 'put ''aXNhYmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+JytaLmkxOG4ucHJldmlvdXNNb250aCsiPC9idXR0b24+IiksbD09PWMuX28ubnVtYmVyT2ZNb250aHMtMSYmKGJlKz0nPGJ1dHRvbiBjbGFzcz0icGlrYS1uZXh0JysocnQ/IiI6IiBpcy1kaXNhYmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+Jyta''@;'; put 'put ''LmkxOG4ubmV4dE1vbnRoKyI8L2J1dHRvbj4iKSxiZSsiPC9kaXY+In07ZnVuY3Rpb24gelgoYyl7bGV0IGw9dGhpcyxhPWwuY29uZmlnKGMpO2wuX29uTW91c2VEb3duPWZ1bmN0aW9uKGgpe2lmKCFsLl92KXJldHVybjtsZXQgZj0oaD1ofHxHbSgpLmV2ZW50KS50YXJnZXR8fGguc3JjRWxl''@;'; put 'put ''bWVudDtpZihmKWlmKFJoKGYsImlzLWRpc2FibGVkIil8fCghUmgoZiwicGlrYS1idXR0b24iKXx8UmgoZiwiaXMtZW1wdHkiKXx8UmgoZi5wYXJlbnROb2RlLCJpcy1kaXNhYmxlZCIpP1JoKGYsInBpa2EtcHJldiIpP2wucHJldk1vbnRoKCk6UmgoZiwicGlrYS1uZXh0IikmJmwubmV4dE1v''@;'; put 'put ''bnRoKCk6KGwuc2V0RGF0ZShuZXcgRGF0ZShmLmdldEF0dHJpYnV0ZSgiZGF0YS1waWthLXllYXIiKSxmLmdldEF0dHJpYnV0ZSgiZGF0YS1waWthLW1vbnRoIiksZi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1kYXkiKSkpLGEuYm91bmQmJk5YKGZ1bmN0aW9uKCl7bC5oaWRlKCksYS5ibHVy''@;'; put 'put ''RmllbGRPblNlbGVjdCYmYS5maWVsZCYmYS5maWVsZC5ibHVyKCl9LDEwMCkpKSxSaChmLCJwaWthLXNlbGVjdCIpKWwuX2M9ITA7ZWxzZXtpZighaC5wcmV2ZW50RGVmYXVsdClyZXR1cm4gaC5yZXR1cm5WYWx1ZT0hMSwhMTtoLnByZXZlbnREZWZhdWx0KCl9fSxsLl9vbkNoYW5nZT1mdW5j''@;'; put 'put ''dGlvbihoKXtsZXQgZj0oaD1ofHxHbSgpLmV2ZW50KS50YXJnZXR8fGguc3JjRWxlbWVudDtmJiYoUmgoZiwicGlrYS1zZWxlY3QtbW9udGgiKT9sLmdvdG9Nb250aChmLnZhbHVlKTpSaChmLCJwaWthLXNlbGVjdC15ZWFyIikmJmwuZ290b1llYXIoZi52YWx1ZSkpfSxsLl9vbktleUNoYW5n''@;'; put 'put ''ZT1mdW5jdGlvbihoKXtpZihoPWh8fEdtKCkuZXZlbnQsbC5pc1Zpc2libGUoKSlzd2l0Y2goaC5rZXlDb2RlKXtjYXNlIDEzOmNhc2UgMjc6YS5maWVsZCYmYS5maWVsZC5ibHVyKCk7YnJlYWs7Y2FzZSAzNzpsLmFkanVzdERhdGUoInN1YnRyYWN0IiwxKTticmVhaztjYXNlIDM4OmwuYWRq''@;'; put 'put ''dXN0RGF0ZSgic3VidHJhY3QiLDcpO2JyZWFrO2Nhc2UgMzk6bC5hZGp1c3REYXRlKCJhZGQiLDEpO2JyZWFrO2Nhc2UgNDA6bC5hZGp1c3REYXRlKCJhZGQiLDcpO2JyZWFrO2Nhc2UgODpjYXNlIDQ2Omwuc2V0RGF0ZShudWxsKX19LGwuX3BhcnNlRmllbGRWYWx1ZT1mdW5jdGlvbigpe2lm''@;'; put 'put ''KGEucGFyc2UpcmV0dXJuIGEucGFyc2UoYS5maWVsZC52YWx1ZSxhLmZvcm1hdCk7aWYodGhpcy5oYXNNb21lbnQpe2xldCBoPXRoaXMubW9tZW50KGEuZmllbGQudmFsdWUsYS5mb3JtYXQsYS5mb3JtYXRTdHJpY3QpO3JldHVybiBoJiZoLmlzVmFsaWQoKT9oLnRvRGF0ZSgpOm51bGx9cmV0''@;'; put 'put ''dXJuIG5ldyBEYXRlKERhdGUucGFyc2UoYS5maWVsZC52YWx1ZSkpfSxsLl9vbklucHV0Q2hhbmdlPWZ1bmN0aW9uKGgpe2xldCBmO2guZmlyZWRCeSE9PWwmJihmPWwuX3BhcnNlRmllbGRWYWx1ZSgpLExoKGYpJiZsLnNldERhdGUoZiksbC5fdnx8bC5zaG93KCkpfSxsLl9vbklucHV0Rm9j''@;'; put 'put ''dXM9ZnVuY3Rpb24oKXtsLnNob3coKX0sbC5fb25JbnB1dENsaWNrPWZ1bmN0aW9uKCl7bC5zaG93KCl9LGwuX29uSW5wdXRCbHVyPWZ1bmN0aW9uKCl7bGV0IGg9JDIoKS5hY3RpdmVFbGVtZW50O2Rve2lmKFJoKGgsInBpa2Etc2luZ2xlIikpcmV0dXJufXdoaWxlKGg9aC5wYXJlbnROb2Rl''@;'; put 'put ''KTtsLl9jfHwobC5fYj1OWChmdW5jdGlvbigpe2wuaGlkZSgpfSw1MCkpLGwuX2M9ITF9LGwuX29uQ2xpY2s9ZnVuY3Rpb24oaCl7bGV0IGY9KGg9aHx8R20oKS5ldmVudCkudGFyZ2V0fHxoLnNyY0VsZW1lbnQsdj1mO2lmKGYpeyFoYXNFdmVudExpc3RlbmVycyYmUmgoZiwicGlrYS1zZWxl''@;'; put 'put ''Y3QiKSYmKGYub25jaGFuZ2V8fChmLnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCJyZXR1cm47IiksSHAoZiwiY2hhbmdlIixsLl9vbkNoYW5nZSkpKTtkb3tpZihSaCh2LCJwaWthLXNpbmdsZSIpfHx2PT09YS50cmlnZ2VyKXJldHVybn13aGlsZSh2PXYucGFyZW50Tm9kZSk7bC5fdiYmZiE9''@;'; put 'put ''PWEudHJpZ2dlciYmdiE9PWEudHJpZ2dlciYmbC5oaWRlKCl9fSxsLmVsPSQyKCkuY3JlYXRlRWxlbWVudCgiZGl2IiksbC5lbC5jbGFzc05hbWU9InBpa2Etc2luZ2xlIisoYS5pc1JUTD8iIGlzLXJ0bCI6IiIpKyhhLnRoZW1lPyIgIithLnRoZW1lOiIiKSxIcChsLmVsLCJtb3VzZWRvd24i''@;'; put 'put ''LGwuX29uTW91c2VEb3duLCEwKSxIcChsLmVsLCJ0b3VjaGVuZCIsbC5fb25Nb3VzZURvd24sITApLEhwKGwuZWwsImNoYW5nZSIsbC5fb25DaGFuZ2UpLGEua2V5Ym9hcmRJbnB1dCYmSHAoJDIoKSwia2V5ZG93biIsbC5fb25LZXlDaGFuZ2UpLGEuZmllbGQmJihhLmNvbnRhaW5lcj9hLmNv''@;'; put 'put ''bnRhaW5lci5hcHBlbmRDaGlsZChsLmVsKTphLmJvdW5kPyQyKCkuYm9keS5hcHBlbmRDaGlsZChsLmVsKTphLmZpZWxkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwuZWwsYS5maWVsZC5uZXh0U2libGluZyksSHAoYS5maWVsZCwiY2hhbmdlIixsLl9vbklucHV0Q2hhbmdlKSxhLmRlZmF1''@;'; put 'put ''bHREYXRlfHwoYS5kZWZhdWx0RGF0ZT1sLl9wYXJzZUZpZWxkVmFsdWUoKSxhLnNldERlZmF1bHREYXRlPSEwKSk7bGV0IGQ9YS5kZWZhdWx0RGF0ZTtMaChkKT9hLnNldERlZmF1bHREYXRlP2wuc2V0RGF0ZShkLCEwKTpsLmdvdG9EYXRlKGQpOmwuZ290b0RhdGUobmV3IERhdGUpLGEuYm91''@;'; put 'put ''bmQ/KHRoaXMuaGlkZSgpLGwuZWwuY2xhc3NOYW1lKz0iIGlzLWJvdW5kIixIcChhLnRyaWdnZXIsImNsaWNrIixsLl9vbklucHV0Q2xpY2spLEhwKGEudHJpZ2dlciwiZm9jdXMiLGwuX29uSW5wdXRGb2N1cyksSHAoYS50cmlnZ2VyLCJibHVyIixsLl9vbklucHV0Qmx1cikpOnRoaXMuc2hv''@;'; put 'put ''dygpfWZ1bmN0aW9uIFdwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gU2F0KGMpe3ZhciBsPWZ1bmN0aW9uIE1hdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChj''@;'; put 'put ''LGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7''@;'; put 'put ''cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gVVgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXpYLnByb3RvdHlwZT17Y29uZmlnOmZ1bmN0aW9uKGMpe3RoaXMuX298fCh0''@;'; put 'put ''aGlzLl9vPVpQKHt9LE5wLCEwKSk7bGV0IGw9WlAodGhpcy5fbyxjLCEwKTtsLmlzUlRMPSEhbC5pc1JUTCxsLmZpZWxkPWwuZmllbGQmJmwuZmllbGQubm9kZU5hbWU/bC5maWVsZDpudWxsLGwudGhlbWU9InN0cmluZyI9PXR5cGVvZiBsLnRoZW1lJiZsLnRoZW1lP2wudGhlbWU6bnVsbCxs''@;'; put 'put ''LmJvdW5kPSEhKHZvaWQgMCE9PWwuYm91bmQ/bC5maWVsZCYmbC5ib3VuZDpsLmZpZWxkKSxsLnRyaWdnZXI9bC50cmlnZ2VyJiZsLnRyaWdnZXIubm9kZU5hbWU/bC50cmlnZ2VyOmwuZmllbGQsbC5kaXNhYmxlV2Vla2VuZHM9ISFsLmRpc2FibGVXZWVrZW5kcyxsLmRpc2FibGVEYXlGbj0i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgbC5kaXNhYmxlRGF5Rm4/bC5kaXNhYmxlRGF5Rm46bnVsbDtsZXQgYT1wYXJzZUludChsLm51bWJlck9mTW9udGhzLDEwKXx8MTtpZihsLm51bWJlck9mTW9udGhzPWE+ND80OmEsTGgobC5taW5EYXRlKXx8KGwubWluRGF0ZT0hMSksTGgobC5tYXhEYXRlKXx8''@;'; put 'put ''KGwubWF4RGF0ZT0hMSksbC5taW5EYXRlJiZsLm1heERhdGUmJmwubWF4RGF0ZTxsLm1pbkRhdGUmJihsLm1heERhdGU9bC5taW5EYXRlPSExKSxsLm1pbkRhdGUmJnRoaXMuc2V0TWluRGF0ZShsLm1pbkRhdGUpLGwubWF4RGF0ZSYmdGhpcy5zZXRNYXhEYXRlKGwubWF4RGF0ZSksalgobC55''@;'; put 'put ''ZWFyUmFuZ2UpKXtsZXQgZD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktMTA7bC55ZWFyUmFuZ2VbMF09cGFyc2VJbnQobC55ZWFyUmFuZ2VbMF0sMTApfHxkLGwueWVhclJhbmdlWzFdPXBhcnNlSW50KGwueWVhclJhbmdlWzFdLDEwKXx8ZH1lbHNlIGwueWVhclJhbmdlPU1hdGguYWJzKHBh''@;'; put 'put ''cnNlSW50KGwueWVhclJhbmdlLDEwKSl8fE5wLnllYXJSYW5nZSxsLnllYXJSYW5nZT4xMDAmJihsLnllYXJSYW5nZT0xMDApO3JldHVybiBsfSx0b1N0cmluZzpmdW5jdGlvbihjKXtyZXR1cm4gYz1jfHx0aGlzLl9vLmZvcm1hdCxMaCh0aGlzLl9kKT90aGlzLl9vLnRvU3RyaW5nP3RoaXMu''@;'; put 'put ''X28udG9TdHJpbmcodGhpcy5fZCxjKTp0aGlzLmhhc01vbWVudD90aGlzLm1vbWVudCh0aGlzLl9kKS5mb3JtYXQoYyk6dGhpcy5fZC50b0RhdGVTdHJpbmcoKToiIn0sZ2V0TW9tZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzTW9tZW50P3RoaXMubW9tZW50KHRoaXMuX2QpOm51bGx9''@;'; put 'put ''LHNldE1vbWVudDpmdW5jdGlvbihjLGwpe3RoaXMuaGFzTW9tZW50JiZ0aGlzLm1vbWVudC5pc01vbWVudChjKSYmdGhpcy5zZXREYXRlKGMudG9EYXRlKCksbCl9LHVzZU1vbWVudDpmdW5jdGlvbihjKXt0aGlzLmhhc01vbWVudD0hMCx0aGlzLm1vbWVudD1jfSxnZXREYXRlOmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIExoKHRoaXMuX2QpP25ldyBEYXRlKHRoaXMuX2QuZ2V0VGltZSgpKTpudWxsfSxzZXREYXRlOmZ1bmN0aW9uKGMsbCl7aWYoIWMpcmV0dXJuIHRoaXMuX2Q9bnVsbCx0aGlzLl9vLmZpZWxkJiYodGhpcy5fby5maWVsZC52YWx1ZT0iIix6cGUodGhpcy5fby5maWVsZCwiY2hh''@;'; put 'put ''bmdlIix7ZmlyZWRCeTp0aGlzfSkpLHRoaXMuZHJhdygpO2lmKCJzdHJpbmciPT10eXBlb2YgYyYmKGM9bmV3IERhdGUoRGF0ZS5wYXJzZShjKSkpLCFMaChjKSlyZXR1cm47bGV0IGE9dGhpcy5fby5taW5EYXRlLGQ9dGhpcy5fby5tYXhEYXRlO0xoKGEpJiZjPGE/Yz1hOkxoKGQpJiZjPmQm''@;'; put 'put ''JihjPWQpLHRoaXMuX2Q9bmV3IERhdGUoYy5nZXRUaW1lKCkpLHpQKHRoaXMuX2QpLHRoaXMuZ290b0RhdGUodGhpcy5fZCksdGhpcy5fby5maWVsZCYmKHRoaXMuX28uZmllbGQudmFsdWU9dGhpcy50b1N0cmluZygpLHpwZSh0aGlzLl9vLmZpZWxkLCJjaGFuZ2UiLHtmaXJlZEJ5OnRoaXN9''@;'; put 'put ''KSksIWwmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uU2VsZWN0JiZ0aGlzLl9vLm9uU2VsZWN0LmNhbGwodGhpcyx0aGlzLmdldERhdGUoKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5zZXREYXRlKG51bGwpfSxnb3RvRGF0ZTpmdW5jdGlvbihjKXtsZXQgbD0hMDtpZihMaChjKSl7''@;'; put 'put ''aWYodGhpcy5jYWxlbmRhcnMpe2xldCBhPW5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgsMSksZD1uZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ueWVhcix0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVu''@;'; put 'put ''ZGFycy5sZW5ndGgtMV0ubW9udGgsMSksaD1jLmdldFRpbWUoKTtkLnNldE1vbnRoKGQuZ2V0TW9udGgoKSsxKSxkLnNldERhdGUoZC5nZXREYXRlKCktMSksbD1oPGEuZ2V0VGltZSgpfHxkLmdldFRpbWUoKTxofWwmJih0aGlzLmNhbGVuZGFycz1be21vbnRoOmMuZ2V0TW9udGgoKSx5ZWFy''@;'; put 'put ''OmMuZ2V0RnVsbFllYXIoKX1dLCJyaWdodCI9PT10aGlzLl9vLm1haW5DYWxlbmRhciYmKHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKz0xLXRoaXMuX28ubnVtYmVyT2ZNb250aHMpKSx0aGlzLmFkanVzdENhbGVuZGFycygpfX0sYWRqdXN0RGF0ZTpmdW5jdGlvbihjLGwpe2xldCBoLGE9dGhp''@;'; put 'put ''cy5nZXREYXRlKCl8fG5ldyBEYXRlLGQ9MjQqcGFyc2VJbnQobCkqNjAqNjAqMWUzOyJhZGQiPT09Yz9oPW5ldyBEYXRlKGEudmFsdWVPZigpK2QpOiJzdWJ0cmFjdCI9PT1jJiYoaD1uZXcgRGF0ZShhLnZhbHVlT2YoKS1kKSksdGhpcy5zZXREYXRlKGgpfSxhZGp1c3RDYWxlbmRhcnM6ZnVu''@;'; put 'put ''Y3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXT1VcGUodGhpcy5jYWxlbmRhcnNbMF0pO2ZvcihsZXQgYz0xO2M8dGhpcy5fby5udW1iZXJPZk1vbnRocztjKyspdGhpcy5jYWxlbmRhcnNbY109VXBlKHttb250aDp0aGlzLmNhbGVuZGFyc1swXS5tb250aCtjLHllYXI6dGhpcy5jYWxlbmRhcnNb''@;'; put 'put ''MF0ueWVhcn0pO3RoaXMuZHJhdygpfSxnb3RvVG9kYXk6ZnVuY3Rpb24oKXt0aGlzLmdvdG9EYXRlKG5ldyBEYXRlKX0sZ290b01vbnRoOmZ1bmN0aW9uKGMpe2lzTmFOKGMpfHwodGhpcy5jYWxlbmRhcnNbMF0ubW9udGg9cGFyc2VJbnQoYywxMCksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKSl9''@;'; put 'put ''LG5leHRNb250aDpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKyssdGhpcy5hZGp1c3RDYWxlbmRhcnMoKX0scHJldk1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgtLSx0aGlzLmFkanVzdENhbGVuZGFycygpfSxnb3RvWWVhcjpmdW5jdGlvbihjKXtp''@;'; put 'put ''c05hTihjKXx8KHRoaXMuY2FsZW5kYXJzWzBdLnllYXI9cGFyc2VJbnQoYywxMCksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKSl9LHNldE1pbkRhdGU6ZnVuY3Rpb24oYyl7YyBpbnN0YW5jZW9mIERhdGU/KHpQKGMpLHRoaXMuX28ubWluRGF0ZT1jLHRoaXMuX28ubWluWWVhcj1jLmdldEZ1bGxZ''@;'; put 'put ''ZWFyKCksdGhpcy5fby5taW5Nb250aD1jLmdldE1vbnRoKCkpOih0aGlzLl9vLm1pbkRhdGU9TnAubWluRGF0ZSx0aGlzLl9vLm1pblllYXI9TnAubWluWWVhcix0aGlzLl9vLm1pbk1vbnRoPU5wLm1pbk1vbnRoLHRoaXMuX28uc3RhcnRSYW5nZT1OcC5zdGFydFJhbmdlKSx0aGlzLmRyYXco''@;'; put 'put ''KX0sc2V0TWF4RGF0ZTpmdW5jdGlvbihjKXtjIGluc3RhbmNlb2YgRGF0ZT8oelAoYyksdGhpcy5fby5tYXhEYXRlPWMsdGhpcy5fby5tYXhZZWFyPWMuZ2V0RnVsbFllYXIoKSx0aGlzLl9vLm1heE1vbnRoPWMuZ2V0TW9udGgoKSk6KHRoaXMuX28ubWF4RGF0ZT1OcC5tYXhEYXRlLHRoaXMu''@;'; put 'put ''X28ubWF4WWVhcj1OcC5tYXhZZWFyLHRoaXMuX28ubWF4TW9udGg9TnAubWF4TW9udGgsdGhpcy5fby5lbmRSYW5nZT1OcC5lbmRSYW5nZSksdGhpcy5kcmF3KCl9LHNldFN0YXJ0UmFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5fby5zdGFydFJhbmdlPWN9LHNldEVuZFJhbmdlOmZ1bmN0aW9uKGMp''@;'; put 'put ''e3RoaXMuX28uZW5kUmFuZ2U9Y30sZHJhdzpmdW5jdGlvbihjKXtpZighdGhpcy5fdiYmIWMpcmV0dXJuO2xldCBNLGw9dGhpcy5fbyxhPWwubWluWWVhcixkPWwubWF4WWVhcixoPWwubWluTW9udGgsZj1sLm1heE1vbnRoLHY9IiI7dGhpcy5feTw9YSYmKHRoaXMuX3k9YSwhaXNOYU4oaCkm''@;'; put 'put ''JnRoaXMuX208aCYmKHRoaXMuX209aCkpLHRoaXMuX3k+PWQmJih0aGlzLl95PWQsIWlzTmFOKGYpJiZ0aGlzLl9tPmYmJih0aGlzLl9tPWYpKTtmb3IobGV0IEQ9MDtEPGwubnVtYmVyT2ZNb250aHM7RCsrKU09InBpa2EtdGl0bGUtIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBs''@;'; put 'put ''YWNlKC9bXmEtel0rL2csIiIpLnN1YnN0cigwLDIpLHYrPSc8ZGl2IGNsYXNzPSJwaWthLWxlbmRhciI+Jyt5YXQodGhpcyxELHRoaXMuY2FsZW5kYXJzW0RdLnllYXIsdGhpcy5jYWxlbmRhcnNbRF0ubW9udGgsdGhpcy5jYWxlbmRhcnNbMF0ueWVhcixNKSt0aGlzLnJlbmRlcih0aGlzLmNh''@;'; put 'put ''bGVuZGFyc1tEXS55ZWFyLHRoaXMuY2FsZW5kYXJzW0RdLm1vbnRoLE0pKyI8L2Rpdj4iO3RoaXMuZWwuaW5uZXJIVE1MPXYsbC5ib3VuZCYmImhpZGRlbiIhPT1sLmZpZWxkLnR5cGUmJk5YKGZ1bmN0aW9uKCl7bC50cmlnZ2VyLmZvY3VzKCl9LDEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlz''@;'; put 'put ''Ll9vLm9uRHJhdyYmdGhpcy5fby5vbkRyYXcodGhpcyksbC5ib3VuZCYmbC5maWVsZC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGwuYXJpYUxhYmVsKX0sYWRqdXN0UG9zaXRpb246ZnVuY3Rpb24oKXtsZXQgYyxsLGEsZCxoLGYsdixNLEQsWixyZTt0aGlzLl9vLmNvbnRhaW5lcnx8KHRo''@;'; put 'put ''aXMuZWwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixjPXRoaXMuX28udHJpZ2dlcixsPXRoaXMuZWwub2Zmc2V0V2lkdGgsYT10aGlzLmVsLm9mZnNldEhlaWdodCxkPUdtKCkuaW5uZXJXaWR0aHx8JDIoKS5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsaD1HbSgpLmlubmVySGVpZ2h0''@;'; put 'put ''fHwkMigpLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsZj0kMigpLmJvZHkuc2Nyb2xsVG9wfHwkMigpLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsWj0hMCxyZT0hMCxEPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1ELmxlZnQrR20oKS5wYWdlWE9mZnNldCxNPUQuYm90dG9t''@;'; put 'put ''K0dtKCkucGFnZVlPZmZzZXQsKHRoaXMuX28ucmVwb3NpdGlvbiYmditsPmR8fHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigicmlnaHQiKT4tMSYmdi1sK2Mub2Zmc2V0V2lkdGg+MCkmJih2PXYtbCtjLm9mZnNldFdpZHRoLFo9ITEpLCh0aGlzLl9vLnJlcG9zaXRpb24mJk0rYT5oK2Z8fHRo''@;'; put 'put ''aXMuX28ucG9zaXRpb24uaW5kZXhPZigidG9wIik+LTEmJk0tYS1jLm9mZnNldEhlaWdodD4wKSYmKE09TS1hLWMub2Zmc2V0SGVpZ2h0LHJlPSExKSx2PDAmJih2PTApLE08MCYmKE09MCksdGhpcy5lbC5zdHlsZS5sZWZ0PXYrInB4Iix0aGlzLmVsLnN0eWxlLnRvcD1NKyJweCIsVlgodGhp''@;'; put 'put ''cy5lbCxaPyJsZWZ0LWFsaWduZWQiOiJyaWdodC1hbGlnbmVkIiksVlgodGhpcy5lbCxyZT8iYm90dG9tLWFsaWduZWQiOiJ0b3AtYWxpZ25lZCIpLEJYKHRoaXMuZWwsWj8icmlnaHQtYWxpZ25lZCI6ImxlZnQtYWxpZ25lZCIpLEJYKHRoaXMuZWwscmU/InRvcC1hbGlnbmVkIjoiYm90dG9t''@;'; put 'put ''LWFsaWduZWQiKSl9LHJlbmRlcjpmdW5jdGlvbihjLGwsYSl7bGV0IGQ9dGhpcy5fbyxoPW5ldyBEYXRlLGY9anBlKGMsbCksdj1uZXcgRGF0ZShjLGwsMSkuZ2V0RGF5KCksTT1bXSxEPVtdO3pQKGgpLGQuZmlyc3REYXk+MCYmKHYtPWQuZmlyc3REYXksdjwwJiYodis9NykpO2xldCBaPTA9''@;'; put 'put ''PT1sPzExOmwtMSxyZT0xMT09PWw/MDpsKzEsY2U9MD09PWw/Yy0xOmMsYmU9MTE9PT1sP2MrMTpjLEVlPWpwZShjZSxaKSxCZT1mK3YscWU9QmU7Zm9yKDtxZT43OylxZS09NztCZSs9Ny1xZTtsZXQgcnQ9ITE7Zm9yKGxldCBwdD0wLGR0PTA7cHQ8QmU7cHQrKyl7bGV0IEp0PW5ldyBEYXRl''@;'; put 'put ''KGMsbCxwdC12KzEpLHZuPSEhTGgodGhpcy5fZCkmJlVQKEp0LHRoaXMuX2QpLENuPVVQKEp0LGgpLHRuPS0xIT09ZC5ldmVudHMuaW5kZXhPZihKdC50b0RhdGVTdHJpbmcoKSksTW49cHQ8dnx8cHQ+PWYrdixDcj1wdC12KzEsR3I9bCxtcj1jLEduPWQuc3RhcnRSYW5nZSYmVVAoZC5zdGFy''@;'; put 'put ''dFJhbmdlLEp0KSxhaT1kLmVuZFJhbmdlJiZVUChkLmVuZFJhbmdlLEp0KSxfaT1kLnN0YXJ0UmFuZ2UmJmQuZW5kUmFuZ2UmJmQuc3RhcnRSYW5nZTxKdCYmSnQ8ZC5lbmRSYW5nZSxPbj1kLm1pbkRhdGUmJkp0PGQubWluRGF0ZXx8ZC5tYXhEYXRlJiZKdD5kLm1heERhdGV8fGQuZGlzYWJs''@;'; put 'put ''ZVdlZWtlbmRzJiZkYXQoSnQpfHxkLmRpc2FibGVEYXlGbiYmZC5kaXNhYmxlRGF5Rm4oSnQpO01uJiYocHQ8dj8oQ3I9RWUrQ3IsR3I9Wixtcj1jZSk6KENyLT1mLEdyPXJlLG1yPWJlKSksZC5waWNrV2hvbGVXZWVrJiZ2biYmKHJ0PSEwKSxELnB1c2goZmF0KHtkYXk6Q3IsbW9udGg6R3Is''@;'; put 'put ''eWVhcjptcixoYXNFdmVudDp0bixpc1NlbGVjdGVkOnZuLGlzVG9kYXk6Q24saXNEaXNhYmxlZDpPbixpc0VtcHR5Ok1uLGlzU3RhcnRSYW5nZTpHbixpc0VuZFJhbmdlOmFpLGlzSW5SYW5nZTpfaSxzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOmQuc2hvd0RheXNJbk5leHRBbmRQ''@;'; put 'put ''cmV2aW91c01vbnRocyxlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ZC5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHN9KSksNz09KytkdCYmKGQuc2hvd1dlZWtOdW1iZXImJkQudW5zaGlmdChnYXQodGhpcyxwdC12LGwsYyxkLmZp''@;'; put 'put ''cnN0V2Vla09mWWVhck1pbkRheXMpKSxNLnB1c2gobWF0KEQsZC5pc1JUTCxkLnBpY2tXaG9sZVdlZWsscnQpKSxEPVtdLGR0PTAscnQ9ITEpfXJldHVybiBmdW5jdGlvbihjLGwsYSl7cmV0dXJuJzx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwaWthLXRh''@;'; put 'put ''YmxlIiByb2xlPSJncmlkIiBhcmlhLWxhYmVsbGVkYnk9IicrYSsnIj4nK2Z1bmN0aW9uKGMpe2xldCBsLGE9W107Zm9yKGMuc2hvd1dlZWtOdW1iZXImJmEucHVzaCgiPHRoPjwvdGg+IiksbD0wO2w8NztsKyspYS5wdXNoKCc8dGggc2NvcGU9ImNvbCI+PGFiYnIgdGl0bGU9IicrWnBlKGMs''@;'; put 'put ''bCkrJyI+JytacGUoYyxsLCEwKSsiPC9hYmJyPjwvdGg+Iik7cmV0dXJuIjx0aGVhZD48dHI+IisoYy5pc1JUTD9hLnJldmVyc2UoKTphKS5qb2luKCIiKSsiPC90cj48L3RoZWFkPiJ9KGMpK2Z1bmN0aW9uKGMpe3JldHVybiI8dGJvZHk+IitjLmpvaW4oIiIpKyI8L3Rib2R5PiJ9KGwpKyI8''@;'; put 'put ''L3RhYmxlPiJ9KGQsTSxhKX0saXNWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Z9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLmlzVmlzaWJsZSgpfHwodGhpcy5fdj0hMCx0aGlzLmRyYXcoKSxCWCh0aGlzLmVsLCJpcy1oaWRkZW4iKSx0aGlzLl9vLmJvdW5kJiYoSHAoJDIoKSwiY2xp''@;'; put 'put ''Y2siLHRoaXMuX29uQ2xpY2spLHRoaXMuYWRqdXN0UG9zaXRpb24oKSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25PcGVuJiZ0aGlzLl9vLm9uT3Blbi5jYWxsKHRoaXMpKX0saGlkZTpmdW5jdGlvbigpe2xldCBjPXRoaXMuX3Y7ITEhPT1jJiYodGhpcy5fby5ib3VuZCYma2coJDIo''@;'; put 'put ''KSwiY2xpY2siLHRoaXMuX29uQ2xpY2spLHRoaXMuX28uY29udGFpbmVyfHwodGhpcy5lbC5zdHlsZS5wb3NpdGlvbj0ic3RhdGljIix0aGlzLmVsLnN0eWxlLmxlZnQ9ImF1dG8iLHRoaXMuZWwuc3R5bGUudG9wPSJhdXRvIiksVlgodGhpcy5lbCwiaXMtaGlkZGVuIiksdGhpcy5fdj0hMSx2''@;'; put 'put ''b2lkIDAhPT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbkNsb3NlJiZ0aGlzLl9vLm9uQ2xvc2UuY2FsbCh0aGlzKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtsZXQgYz10aGlzLl9vO3RoaXMuaGlkZSgpLGtnKHRoaXMuZWwsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24sITAp''@;'; put 'put ''LGtnKHRoaXMuZWwsInRvdWNoZW5kIix0aGlzLl9vbk1vdXNlRG93biwhMCksa2codGhpcy5lbCwiY2hhbmdlIix0aGlzLl9vbkNoYW5nZSksYy5rZXlib2FyZElucHV0JiZrZygkMigpLCJrZXlkb3duIix0aGlzLl9vbktleUNoYW5nZSksYy5maWVsZCYmKGtnKGMuZmllbGQsImNoYW5nZSIs''@;'; put 'put ''dGhpcy5fb25JbnB1dENoYW5nZSksYy5ib3VuZCYmKGtnKGMudHJpZ2dlciwiY2xpY2siLHRoaXMuX29uSW5wdXRDbGljayksa2coYy50cmlnZ2VyLCJmb2N1cyIsdGhpcy5fb25JbnB1dEZvY3VzKSxrZyhjLnRyaWdnZXIsImJsdXIiLHRoaXMuX29uSW5wdXRCbHVyKSkpLHRoaXMuZWwucGFy''@;'; put 'put ''ZW50Tm9kZSYmdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpfX07Y29uc3QgWXBlPSJkYXRlIixHcGU9ImRhdGVFZGl0b3IiO3ZhciBXUD1uZXcgV2Vha1NldDtjbGFzcyAkcGUgZXh0ZW5kcyBhOXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rp''@;'; put 'put ''b24gd2F0KGMsbCl7KGZ1bmN0aW9uIENhdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLFdQKSxXcGUodGhpcywi''@;'; put 'put ''cGFyZW50RGVzdHJveWVkIiwhMSksV3BlKHRoaXMsIiRkYXRlUGlja2VyIixudWxsKX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuIFlwZX1pbml0KCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE9vKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gaW5jbHVkZSBtb21lbnQuanMg''@;'; put 'put ''dG8geW91ciBwcm9qZWN0LiIpO3N1cGVyLmluaXQoKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95RWxlbWVudHMoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChsLGEpPT57YXx8KGxv''@;'; put 'put ''KHRoaXMuZGF0ZVBpY2tlciwvaHQtdGhlbWUtLiovZyksVGkodGhpcy5kYXRlUGlja2VyLGwpKX0pfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0aGlzLmRhdGVQaWNrZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZGF0''@;'; put 'put ''ZVBpY2tlclN0eWxlPXRoaXMuZGF0ZVBpY2tlci5zdHlsZSx0aGlzLmRhdGVQaWNrZXJTdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS56SW5kZXg9OTk5OSx0''@;'; put 'put ''aGlzLmRhdGVQaWNrZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIpLFRpKHRoaXMuZGF0ZVBpY2tlciwiaHREYXRlcGlja2VySG9sZGVyIik7Y29uc3QgbD10aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCk7bG8odGhpcy5kYXRlUGlja2VyLC9o''@;'; put 'put ''dC10aGVtZS0uKi9nKSxUaSh0aGlzLmRhdGVQaWNrZXIsbCksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5kYXRlUGlja2VyKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZGF0ZVBpY2tlciwibW91c2Vkb3duIixhPT57cG8oYS50''@;'; put 'put ''YXJnZXQsInBpa2EtZGF5IikmJnRoaXMuaGlkZURhdGVwaWNrZXIoKSxhLnN0b3BQcm9wYWdhdGlvbigpfSl9ZGVzdHJveUVsZW1lbnRzKCl7Y29uc3QgbD10aGlzLmRhdGVQaWNrZXIucGFyZW50Tm9kZTt0aGlzLiRkYXRlUGlja2VyJiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSxsJiZs''@;'; put 'put ''LnJlbW92ZUNoaWxkKHRoaXMuZGF0ZVBpY2tlcil9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdil9b3Blbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2NvbnN0IGQ9dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7dGhpcy5zaG93RGF0ZXBpY2tlcihsKSxzdXBlci5vcGVuKCksZC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgic3Vi''@;'; put 'put ''dHJhY3QiLDEpfX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgiYWRkIiwxKX19LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLiRkYXRlUGlja2VyLmFkanVzdERhdGUoInN1YnRyYWN0Iiw3KX19''@;'; put 'put ''LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgiYWRkIiw3KX19XSx7Z3JvdXA6R3BlfSl9Y2xvc2UoKXt2YXIgbDt0aGlzLl9vcGVuZWQ9ITEsbnVsbCE9PShsPXRoaXMuJGRhdGVQaWNrZXIpJiZ2b2lkIDAhPT1sJiZsLmRl''@;'; put 'put ''c3Ryb3kmJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pntjb25zdCBoPXRoaXMuaG90Ll9nZXRFZGl0b3JNYW5hZ2VyKCk7aC5jbG9zZUVkaXRvcigpLHRoaXMuaG90LnZpZXcucmVuZGVyKCksaC5wcmVwYXJlRWRpdG9yKCl9KSx0aGlz''@;'; put 'put ''LmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEdwZSksc3VwZXIuY2xvc2UoKX1maW5pc2hFZGl0aW5nKCl7c3VwZXIuZmluaXNoRWRpdGluZyhhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw''@;'; put 'put ''XSYmYXJndW1lbnRzWzBdLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pfXNob3dEYXRlcGlja2VyKGwpe2NvbnN0IGE9VVgoV1AsdGhpcyxaWCkuY2FsbCh0aGlzKSxkPXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSxoPSEhbCYmSCQo''@;'; put 'put ''bC5rZXlDb2RlKTtsZXQgZjt0aGlzLmRhdGVQaWNrZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuJGRhdGVQaWNrZXI9bmV3IHpYKHRoaXMuZ2V0RGF0ZVBpY2tlckNvbmZpZygpKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy4kZGF0ZVBpY2tlci51c2VNb21lbnQmJnRoaXMuJGRhdGVQ''@;'; put 'put ''aWNrZXIudXNlTW9tZW50KE9vKSx0aGlzLiRkYXRlUGlja2VyLl9vbklucHV0Rm9jdXM9ZnVuY3Rpb24oKXt9LHRoaXMub3JpZ2luYWxWYWx1ZT8oZj10aGlzLm9yaWdpbmFsVmFsdWUsT28oZixhLCEwKS5pc1ZhbGlkKCkmJnRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KE9vKGYsYSksITAp''@;'; put 'put ''LHRoaXMuZ2V0VmFsdWUoKSE9PXRoaXMub3JpZ2luYWxWYWx1ZSYmdGhpcy5zZXRWYWx1ZSh0aGlzLm9yaWdpbmFsVmFsdWUpLCFoJiYhZCYmdGhpcy5zZXRWYWx1ZSgiIikpOnRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGU/KGY9dGhpcy5jZWxsUHJvcGVydGllcy5kZWZhdWx0RGF0''@;'; put 'put ''ZSxPbyhmLGEsITApLmlzVmFsaWQoKSYmdGhpcy4kZGF0ZVBpY2tlci5zZXRNb21lbnQoT28oZixhKSwhMCksIWgmJiFkJiZ0aGlzLnNldFZhbHVlKCIiKSk6dGhpcy4kZGF0ZVBpY2tlci5nb3RvVG9kYXkoKX1oaWRlRGF0ZXBpY2tlcigpe3RoaXMuZGF0ZVBpY2tlclN0eWxlLmRpc3BsYXk9''@;'; put 'put ''Im5vbmUiLHRoaXMuJGRhdGVQaWNrZXIuaGlkZSgpfWdldERhdGVQaWNrZXJDb25maWcoKXt2YXIgbDtjb25zdCBhPXRoaXMuVEVYVEFSRUEsZD17fTt0aGlzLmNlbGxQcm9wZXJ0aWVzJiZ0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVQaWNrZXJDb25maWcmJnhFKGQsdGhpcy5jZWxsUHJvcGVy''@;'; put 'put ''dGllcy5kYXRlUGlja2VyQ29uZmlnKTtjb25zdCBoPWQub25TZWxlY3QsZj1kLm9uQ2xvc2U7cmV0dXJuIGQuZmllbGQ9YSxkLnRyaWdnZXI9YSxkLmNvbnRhaW5lcj10aGlzLmRhdGVQaWNrZXIsZC5ib3VuZD0hMSxkLmtleWJvYXJkSW5wdXQ9ITEsZC5mb3JtYXQ9bnVsbCE9PShsPWQuZm9y''@;'; put 'put ''bWF0KSYmdm9pZCAwIT09bD9sOlVYKFdQLHRoaXMsWlgpLmNhbGwodGhpcyksZC5yZXBvc2l0aW9uPWQucmVwb3NpdGlvbnx8ITEsZC5pc1JUTD0hMSxkLm9uU2VsZWN0PXY9PntsZXQgTT12O2lzTmFOKE0uZ2V0VGltZSgpKXx8KE09T28oTSkuZm9ybWF0KFVYKFdQLHRoaXMsWlgpLmNhbGwo''@;'; put 'put ''dGhpcykpKSx0aGlzLnNldFZhbHVlKE0pLGgmJmgoKSxBcCgpJiZ0aGlzLmhpZGVEYXRlcGlja2VyKCl9LGQub25DbG9zZT0oKT0+e3RoaXMucGFyZW50RGVzdHJveWVkfHx0aGlzLmZpbmlzaEVkaXRpbmcoITEpLGYmJmYoKX0sZH1yZWZyZXNoRGltZW5zaW9ucyhsKXt2YXIgYTtpZihzdXBl''@;'; put 'put ''ci5yZWZyZXNoRGltZW5zaW9ucyhsKSx0aGlzLnN0YXRlIT09bHUuRURJVElORylyZXR1cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwhdGhpcy5URClyZXR1cm4gdm9pZCB0aGlzLmhpZGVEYXRlcGlja2VyKCk7Y29uc3R7cm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1h''@;'; put 'put ''cHBlcjpofT10aGlzLmhvdCx7d3RPdmVybGF5czpmfT10aGlzLmhvdC52aWV3Ll93dCx7d3RUYWJsZTp2fT1udWxsIT09KGE9Zi5nZXRQYXJlbnRPdmVybGF5KHRoaXMuVEQpKSYmdm9pZCAwIT09YT9hOnRoaXMuaG90LnZpZXcuX3d0LE09ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4''@;'; put 'put ''KHYuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpLEQ9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSksWj1oLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4o''@;'; put 'put ''KSkscmU9aC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSk7aWYodGhpcy5yb3c+PU0mJnRoaXMucm93PD1EJiZ0aGlzLmNvbD49WiYmdGhpcy5jb2w8PXJlKXtjb25zdCBjZT10aGlzLlRELmdldEJvdW5kaW5nQ2xpZW50UmVj''@;'; put 'put ''dCgpO3RoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD1gJHt0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0K2NlLnRvcCt4dSh0aGlzLlREKX1weGA7bGV0IGJlPXRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXQ7dGhpcy5ob3QuaXNSdGwoKT9iZSs9Y2UucmlnaHQtc3UodGhpcy5k''@;'; put 'put ''YXRlUGlja2VyKTpiZSs9Y2UubGVmdCx0aGlzLmRhdGVQaWNrZXJTdHlsZS5sZWZ0PWAke2JlfXB4YH1lbHNlIHRoaXMuaGlkZURhdGVwaWNrZXIoKX19ZnVuY3Rpb24gWlgoKXt2YXIgYztyZXR1cm4gbnVsbCE9PShjPXRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZUZvcm1hdCkmJnZvaWQgMCE9''@;'; put 'put ''PWM/YzoiREQvTU0vWVlZWSJ9Y2xhc3MgS3BlIGV4dGVuZHMgSFh7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJkcm9wZG93biJ9cHJlcGFyZShsLGEsZCxoLGYsdil7di5maWx0ZXI9ITEsdi5zdHJpY3Q9ITAsc3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdil9fWNsYXNzIHFwZSBl''@;'; put 'put ''eHRlbmRzIGE5e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4ibnVtZXJpYyJ9fWNsYXNzIFhwZSBleHRlbmRzIGE5e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBBYXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGthdChjKXt2YXIgbD1mdW5jdGlv''@;'; put 'put ''biBEYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJhdXRvUmVzaXplIixBcGUodGhpcy5ob3Qucm9vdERvY3VtZW50LHt0ZXh0Q29udGVudDpsPT4iXHUyMDIyIi5yZXBlYXQobC52YWx1ZS5sZW5ndGgpfSkpfXN0''@;'; put 'put ''YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4icGFzc3dvcmQifWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0aGlzLlRFWFRBUkVBPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRl''@;'; put 'put ''KCJ0eXBlIiwicGFzc3dvcmQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSx0aGlzLlRFWFRBUkVBLmNsYXNzTmFtZT0iaGFuZHNvbnRhYmxlSW5wdXQiLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxlLHRoaXMudGV4dGFyZWFT''@;'; put 'put ''dHlsZS53aWR0aD0wLHRoaXMudGV4dGFyZWFTdHlsZS5oZWlnaHQ9MCx4cCh0aGlzLlRFWFRBUkVBX1BBUkVOVCksdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQSl9fWNvbnN0IFdYPSJodF9lZGl0b3JfdmlzaWJsZSIsSnBlPSJzZWxlY3RFZGl0b3IiO2Ns''@;'; put 'put ''YXNzIFFwZSBleHRlbmRzIGtfe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4ic2VsZWN0In1pbml0KCl7dGhpcy5zZWxlY3RXcmFwcGVyPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnNlbGVjdD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgic2VsZWN0IiksdGhpcy5zZWxlY3Quc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsInRydWUiKSx0aGlzLnNlbGVjdFdyYXBwZXIuc3R5bGUuZGlzcGxheT0ibm9uZSI7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksYT10''@;'; put 'put ''aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2wuY2xhc3NOYW1lPSJodEF1dG9jb21wbGV0ZUFycm93IixhJiZsLnNldEF0dHJpYnV0ZSguLi5WNygpKSxsLmFwcGVuZENoaWxkKHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHUyNWJjIikpLFRpKHRoaXMuc2Vs''@;'; put 'put ''ZWN0V3JhcHBlciwiaHRTZWxlY3RFZGl0b3IiKSx0aGlzLnNlbGVjdFdyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpLHRoaXMuc2VsZWN0V3JhcHBlci5pbnNlcnRCZWZvcmUobCx0aGlzLnNlbGVjdFdyYXBwZXIuZmlyc3RDaGlsZCksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5k''@;'; put 'put ''Q2hpbGQodGhpcy5zZWxlY3RXcmFwcGVyKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnNlbGVjdC52YWx1ZX1zZXRWYWx1ZShsKXt0aGlzLnNlbGVjdC52YWx1ZT1sfW9wZW4oKXt0aGlzLl9vcGVuZWQ9ITAsdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRo''@;'; put 'put ''aXMuc2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCl9Y2xvc2UoKXt0aGlzLl9vcGVuZWQ9ITEsdGhpcy5zZWxlY3RXcmFwcGVyLnN0''@;'; put 'put ''eWxlLmRpc3BsYXk9Im5vbmUiLHBvKHRoaXMuc2VsZWN0V3JhcHBlcixXWCkmJmxvKHRoaXMuc2VsZWN0V3JhcHBlcixXWCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5jbGVhckhvb2tzKCl9Zm9jdXMoKXt0aGlzLnNlbGVjdC5mb2N1cygpfXJlZ2lzdGVySG9va3MoKXt0aGlz''@;'; put 'put ''LmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblJlc2l6ZSIs''@;'; put 'put ''KCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSl9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdik7Y29uc3QgTT10aGlzLmNlbGxQcm9wZXJ0aWVz''@;'; put 'put ''LnNlbGVjdE9wdGlvbnM7bGV0IEQ7RD10aGlzLnByZXBhcmVPcHRpb25zKCJmdW5jdGlvbiI9PXR5cGVvZiBNP00odGhpcy5yb3csdGhpcy5jb2wsdGhpcy5wcm9wKTpNKSx4cCh0aGlzLnNlbGVjdCksWG8oRCwoWixyZSk9Pntjb25zdCBjZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgiT1BUSU9OIik7Y2UudmFsdWU9cmUsejcoY2UsWiksdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQoY2UpfSl9cHJlcGFyZU9wdGlvbnMobCl7bGV0IGE9e307aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGQ9MCxoPWwubGVuZ3RoO2Q8aDtkKyspYVtsW2RdXT1sW2RdO2Vsc2Ui''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIGwmJihhPWwpO3JldHVybiBhfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLnJvdyx0aGlzLnByb3ApO3RoaXMub3JpZ2luYWxWYWx1ZT1sLHRoaXMuc2V0VmFsdWUobCksdGhpcy5yZWZyZXNoRGltZW5zaW9u''@;'; put 'put ''cygpfXJlZnJlc2hEaW1lbnNpb25zKCl7aWYodGhpcy5zdGF0ZSE9PWx1LkVESVRJTkcpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZSgpO2NvbnN0e3RvcDpsLHN0YXJ0OmEsd2lkdGg6ZCxoZWlnaHQ6aH09dGhp''@;'; put 'put ''cy5nZXRFZGl0ZWRDZWxsUmVjdCgpLGY9dGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlO2YuaGVpZ2h0PWAke2h9cHhgLGYud2lkdGg9YCR7ZH1weGAsZi50b3A9YCR7bH1weGAsZlt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHthfXB4YCxmLm1hcmdpbj0iMHB4IixUaSh0aGlz''@;'; put 'put ''LnNlbGVjdFdyYXBwZXIsV1gpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKSxkPXtncm91cDpKcGV9O3RoaXMuaXNJbkZ1bGxFZGl0TW9kZSgpJiZhLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJy''@;'; put 'put ''b3dVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleC0xO2g+PTAmJih0aGlzLnNlbGVjdFtoXS5zZWxlY3RlZD0hMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgr''@;'; put 'put ''MTtoPD10aGlzLnNlbGVjdC5sZW5ndGgtMSYmKHRoaXMuc2VsZWN0W2hdLnNlbGVjdGVkPSEwKX19XSxkKX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChKcGUpfX1j''@;'; put 'put ''bGFzcyBlNGUgZXh0ZW5kcyBhOXtzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInRpbWUifXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpLHRoaXMuVEVYVEFSRUEuZGlyPSJsdHIifX1mdW5jdGlvbiBZWChjLGwsYSxkLGgsZix2KXtvVC5hcHBs''@;'; put 'put ''eSh0aGlzLFtjLGwsYSxkLGgsZix2XSksejcobCxmPz8iIiwhMSl9ZnVuY3Rpb24gSV8oYyxsLGEsZCxoLGYsdil7Y29uc3R7cm9vdERvY3VtZW50Ok19PWMsRD12LmFsbG93SHRtbD9ZWDpBZyxaPU0uY3JlYXRlRWxlbWVudCgiRElWIikscmU9Yy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2lm''@;'; put 'put ''KFouY2xhc3NOYW1lPSJodEF1dG9jb21wbGV0ZUFycm93IixyZSYmWi5zZXRBdHRyaWJ1dGUoLi4uVjcoKSksWi5hcHBlbmRDaGlsZChNLmNyZWF0ZVRleHROb2RlKCJcdTI1YmMiKSksRC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksbC5maXJzdENoaWxkfHxsLmFwcGVuZENoaWxkKE0u''@;'; put 'put ''Y3JlYXRlVGV4dE5vZGUoIlx4YTAiKSksbC5pbnNlcnRCZWZvcmUoWixsLmZpcnN0Q2hpbGQpLFRpKGwsImh0QXV0b2NvbXBsZXRlIiksIWMuYWNBcnJvd0xpc3RlbmVyKXtjb25zdCBjZT1uZXcgajIoYyk7Yy5hY0Fycm93TGlzdGVuZXI9ZnVuY3Rpb24oYmUpe3BvKGJlLnRhcmdldCwiaHRB''@;'; put 'put ''dXRvY29tcGxldGVBcnJvdyIpJiZjLnZpZXcuX3d0LmdldFNldHRpbmcoIm9uQ2VsbERibENsaWNrIixudWxsLGMuX2NyZWF0ZUNlbGxDb29yZHMoYSxkKSxsKX0sY2UuYWRkRXZlbnRMaXN0ZW5lcihjLnJvb3RFbGVtZW50LCJtb3VzZWRvd24iLGMuYWNBcnJvd0xpc3RlbmVyKSxjLmFkZEhv''@;'; put 'put ''b2tPbmNlKCJhZnRlckRlc3Ryb3kiLCgpPT57Y2UuZGVzdHJveSgpfSl9fWZ1bmN0aW9uIEdYKGMsbCxhLGQsaCxmLHYpe0lfLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKX1ZWC5SRU5ERVJFUl9UWVBFPSJodG1sIixJXy5SRU5ERVJFUl9UWVBFPSJhdXRvY29tcGxldGUiLEdYLlJFTkRF''@;'; put 'put ''UkVSX1RZUEU9ImRyb3Bkb3duIjtjb25zdCB0NGU9bmV3IFdlYWtNYXAsbjRlPW5ldyBXZWFrTWFwLE5hdD0iaHRCYWRWYWx1ZSIsUl89ImRhdGEtcm93IixMXz0iZGF0YS1jb2wiLFZhdD0iY2hlY2tib3hSZW5kZXJlciI7ZnVuY3Rpb24gJFgoYyxsLGEsZCxoLGYsdil7Y29uc3R7cm9vdERv''@;'; put 'put ''Y3VtZW50Ok19PWMsRD1jLmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7b1QuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGZ1bmN0aW9uIEJhdChjKXtsZXQgbD1uNGUuZ2V0KGMpO2lmKCFsKXtjb25zdHtyb290RWxlbWVudDphfT1jO2w9bmV3IGoyKGMpLGwuYWRkRXZlbnRMaXN0ZW5lcihh''@;'; put 'put ''LCJjbGljayIsZD0+ZnVuY3Rpb24gWmF0KGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIUtYKGEpfHwhYS5oYXNBdHRyaWJ1dGUoUl8pfHwhYS5oYXNBdHRyaWJ1dGUoTF8pKXJldHVybjtjb25zdCBkPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKFJfKSwxMCksaD1wYXJzZUludChhLmdldEF0''@;'; put 'put ''dHJpYnV0ZShMXyksMTApO2wuZ2V0Q2VsbE1ldGEoZCxoKS5yZWFkT25seSYmYy5wcmV2ZW50RGVmYXVsdCgpfShkLGMpKSxsLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsZD0+ZnVuY3Rpb24gVWF0KGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7S1goYSkmJighYS5oYXNBdHRyaWJ1dGUo''@;'; put 'put ''Ul8pfHwhYS5oYXNBdHRyaWJ1dGUoTF8pfHxzZXRUaW1lb3V0KGwubGlzdGVuLDEwKSl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjaGFuZ2UiLGQ9PmZ1bmN0aW9uIFdhdChjLGwpe2NvbnN0e3RhcmdldDphfT1jO2lmKCFLWChhKXx8IWEuaGFzQXR0cmlidXRlKFJfKXx8IWEuaGFz''@;'; put 'put ''QXR0cmlidXRlKExfKSlyZXR1cm47Y29uc3QgZD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShSXyksMTApLGg9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoTF8pLDEwKSxmPWwuZ2V0Q2VsbE1ldGEoZCxoKTtpZighZi5yZWFkT25seSl7bGV0IHY9bnVsbDt2PWMudGFyZ2V0LmNoZWNrZWQ/dm9p''@;'; put 'put ''ZCAwPT09Zi51bmNoZWNrZWRUZW1wbGF0ZXx8Zi5jaGVja2VkVGVtcGxhdGU6dm9pZCAwIT09Zi51bmNoZWNrZWRUZW1wbGF0ZSYmZi51bmNoZWNrZWRUZW1wbGF0ZSxsLnNldERhdGFBdENlbGwoZCxoLHYpfX0oZCxjKSksbjRlLnNldChjLGwpfX0oYyk7bGV0IFo9ZnVuY3Rpb24gamF0KGMp''@;'; put 'put ''e2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBsLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVySW5wdXQiLGwudHlwZT0iY2hlY2tib3giLGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksbC5jbG9uZU5vZGUoITEpfShNKTtjb25zdCByZT12LmxhYmVs''@;'; put 'put ''O2xldCBjZT0hMTtpZih0eXBlb2Ygdi5jaGVja2VkVGVtcGxhdGU+InUiJiYodi5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiB2LnVuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKHYudW5jaGVja2VkVGVtcGxhdGU9ITEpLHhwKGwpLGY9PT12LmNoZWNrZWRUZW1wbGF0ZXx8bGMoZikudG9Mb2Nh''@;'; put 'put ''bGVMb3dlckNhc2Uodi5sb2NhbGUpPT09bGModi5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT9aLmNoZWNrZWQ9ITA6Zj09PXYudW5jaGVja2VkVGVtcGxhdGV8fGxjKGYpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT09PWxjKHYudW5jaGVja2VkVGVt''@;'; put 'put ''cGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT9aLmNoZWNrZWQ9ITE6VWMoZik/VGkoWiwibm9WYWx1ZSIpOihaLnN0eWxlLmRpc3BsYXk9Im5vbmUiLFRpKFosTmF0KSxjZT0hMCksdm8oWixbW1JfLGFdLFtMXyxkXV0pLEQmJnZvKFosW21FKGMuZ2V0VHJhbnNsYXRlZFBocmFz''@;'; put 'put ''ZShaLmNoZWNrZWQ/aFg6ZlgpKSxJMmUoWi5jaGVja2VkKSxLcWUoKV0pLCFjZSYmcmUpe2xldCBxZT0iIjtpZihyZS52YWx1ZSlxZT0iZnVuY3Rpb24iPT10eXBlb2YgcmUudmFsdWU/cmUudmFsdWUuY2FsbCh0aGlzLGEsZCxoLGYpOnJlLnZhbHVlO2Vsc2UgaWYocmUucHJvcGVydHkpe2Nv''@;'; put 'put ''bnN0IHB0PWMuZ2V0RGF0YUF0Um93UHJvcChhLHJlLnByb3BlcnR5KTtxZT1udWxsIT09cHQ/cHQ6IiJ9Y29uc3QgcnQ9ZnVuY3Rpb24gemF0KGMsbCxhKXtjb25zdCBkPWMuY3JlYXRlRWxlbWVudCgibGFiZWwiKTtkLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVyTGFiZWwgIisoYT8i''@;'; put 'put ''ZnVsbFdpZHRoIjoiIik7Y29uc3QgaD1jLmNyZWF0ZVRleHROb2RlKGwpO2lmKGEpe2NvbnN0IGY9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zi5hcHBlbmRDaGlsZChoKSxkLmFwcGVuZENoaWxkKGYpfWVsc2UgZC5hcHBlbmRDaGlsZChoKTtyZXR1cm4gZC5jbG9uZU5vZGUoITApfShNLHFl''@;'; put 'put ''LCEwIT09cmUuc2VwYXJhdGVkKTsiYmVmb3JlIj09PXJlLnBvc2l0aW9uP3JlLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZChydCksbC5hcHBlbmRDaGlsZChaKSk6KHJ0LmFwcGVuZENoaWxkKFopLFo9cnQpOighcmUucG9zaXRpb258fCJhZnRlciI9PT1yZS5wb3NpdGlvbikmJihyZS5zZXBh''@;'; put 'put ''cmF0ZWQ/KGwuYXBwZW5kQ2hpbGQoWiksbC5hcHBlbmRDaGlsZChydCkpOihydC5pbnNlcnRCZWZvcmUoWixydC5maXJzdENoaWxkKSxaPXJ0KSl9ZnVuY3Rpb24gRWUoKXtsZXQgcWU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25z''@;'; put 'put ''dCBydD1jLmdldFNlbGVjdGVkUmFuZ2UoKSxwdD1bXSxkdD1uZXcgTWFwO2xldCBKdD1bXSx2bj0wO2lmKHJ0KXtmb3IobGV0IENuPTA7Q248cnQubGVuZ3RoO0NuKyspe2NvbnN0e3Jvdzp0bixjb2w6TW59PXJ0W0NuXS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Q3IsY29sOkdyfT1ydFtD''@;'; put 'put ''bl0uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBtcj10bjttcjw9Q3I7bXIrPTEpZm9yKGxldCBHbj1NbjtHbjw9R3I7R24rPTEpe2NvbnN0IGFpPWMuZ2V0Q2VsbE1ldGEobXIsR24pO2lmKGFpLmhpZGRlbiljb250aW51ZTtjb25zdCBfaT17Y2hlY2tlZFRlbXBsYXRlOmFpLmNoZWNr''@;'; put 'put ''ZWRUZW1wbGF0ZSx1bmNoZWNrZWRUZW1wbGF0ZTphaS51bmNoZWNrZWRUZW1wbGF0ZX07aWYoImNoZWNrYm94IiE9PWFpLnR5cGUpeyEwPT09cWUmJiFhaS5yZWFkT25seSYmKGR0LmhhcyhwdC5sZW5ndGgpP2R0LnNldChwdC5sZW5ndGgsWy4uLmR0LmdldChwdC5sZW5ndGgpLFttcixHbixu''@;'; put 'put ''dWxsXV0pOmR0LnNldChwdC5sZW5ndGgsW1ttcixHbixudWxsXV0pKTtjb250aW51ZX1pZighMD09PWFpLnJlYWRPbmx5KWNvbnRpbnVlO3R5cGVvZiBhaS5jaGVja2VkVGVtcGxhdGU+InUiJiYoYWkuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2YgYWkudW5jaGVja2VkVGVtcGxhdGU+InUi''@;'; put 'put ''JiYoYWkudW5jaGVja2VkVGVtcGxhdGU9ITEpO2NvbnN0IE9uPWMuZ2V0RGF0YUF0Q2VsbChtcixHbik7ITE9PT1xZT9bYWkuY2hlY2tlZFRlbXBsYXRlLGFpLmNoZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpXS5pbmNsdWRlcyhPbik/SnQucHVzaChbbXIsR24sYWkudW5jaGVja2VkVGVtcGxh''@;'; put 'put ''dGUsX2ldKTpbYWkudW5jaGVja2VkVGVtcGxhdGUsYWkudW5jaGVja2VkVGVtcGxhdGUudG9TdHJpbmcoKSxudWxsLHZvaWQgMF0uaW5jbHVkZXMoT24pJiZKdC5wdXNoKFttcixHbixhaS5jaGVja2VkVGVtcGxhdGUsX2ldKTpKdC5wdXNoKFttcixHbixhaS51bmNoZWNrZWRUZW1wbGF0ZSxf''@;'; put 'put ''aV0pLHZuKz0xfXB0LnB1c2godm4pLHZuPTB9SnQ9SnQuZXZlcnkoQ249PntsZXRbLCx0bl09Q247cmV0dXJuIHRuPT09SnRbMF1bMl19KT9KdC5tYXAoQ249PntsZXRbdG4sTW4sQ3JdPUNuO3JldHVyblt0bixNbixDcl19KTpKdC5tYXAoQ249PntsZXRbdG4sTW4sLENyXT1DbjtyZXR1cm5b''@;'; put 'put ''dG4sTW4sQ3IuY2hlY2tlZFRlbXBsYXRlXX0pLEp0Lmxlbmd0aD4wJiZwdC5mb3JFYWNoKChDbix0bik9PntsZXQgTW49SnQuc3BsaWNlKDAsQ24pO2R0LnNpemUmJmR0Lmhhcyh0bikmJihNbj1bLi4uTW4sLi4uZHQuZ2V0KHRuKV0pLGMuc2V0RGF0YUF0Q2VsbChNbil9KX19ZnVuY3Rpb24g''@;'; put 'put ''QmUoKXtjb25zdCBxZT1jLmdldFNlbGVjdGVkUmFuZ2UoKTtpZihxZSl7Zm9yKGxldCBydD0wO3J0PHFlLmxlbmd0aDtydCsrKXtjb25zdCBwdD1xZVtydF0uZ2V0VG9wU3RhcnRDb3JuZXIoKSxkdD1xZVtydF0uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBKdD1wdC5yb3c7SnQ8PWR0''@;'; put 'put ''LnJvdztKdCsrKWZvcihsZXQgdm49cHQuY29sO3ZuPD1kdC5jb2w7dm4rKyl7aWYoYy5nZXRDZWxsTWV0YShKdCx2bikucmVhZE9ubHkpY29udGludWU7Y29uc3QgdG49Yy5nZXRDZWxsKEp0LHZuKTtpZihFcCh0bikmJnRuLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''IikubGVuZ3RoPjApcmV0dXJuITB9fXJldHVybiExfX0oIXJlfHxyZSYmIXJlLnNlcGFyYXRlZCkmJmwuYXBwZW5kQ2hpbGQoWiksY2UmJmwuYXBwZW5kQ2hpbGQoTS5jcmVhdGVUZXh0Tm9kZSgiI2JhZC12YWx1ZSMiKSksdDRlLmhhcyhjKXx8KHQ0ZS5zZXQoYywhMCksZnVuY3Rpb24gYmUo''@;'; put 'put ''KXtjLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbInNwYWNlIl1dLGNhbGxiYWNrOigpPT4oRWUoKSwhQmUoKSkscnVuT25seUlmOigpPT57dmFyIGR0O3JldHVybiBudWxsPT09KGR0PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo''@;'; put 'put ''KSl8fHZvaWQgMD09PWR0P3ZvaWQgMDpkdC5oaWdobGlnaHQuaXNDZWxsKCl9fSx7a2V5czpbWyJlbnRlciJdXSxjYWxsYmFjazooKT0+KEVlKCksIUJlKCkpLHJ1bk9ubHlJZjooKT0+e2NvbnN0IGR0PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4gYy5nZXRTZXR0aW5ncygpLmVu''@;'; put 'put ''dGVyQmVnaW5zRWRpdGluZyYmZHQ/LmhpZ2hsaWdodC5pc0NlbGwoKSYmIWMuc2VsZWN0aW9uLmlzTXVsdGlwbGUoKX19LHtrZXlzOltbImRlbGV0ZSJdLFsiYmFja3NwYWNlIl1dLGNhbGxiYWNrOigpPT4oRWUoITApLCFCZSgpKSxydW5Pbmx5SWY6KCk9Pnt2YXIgZHQ7cmV0dXJuIG51bGw9''@;'; put 'put ''PT0oZHQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09ZHQ/dm9pZCAwOmR0LmhpZ2hsaWdodC5pc0NlbGwoKX19XSx7Z3JvdXA6VmF0LHJlbGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIn0pfSgpKX1mdW5jdGlvbiBLWChjKXtyZXR1cm4iSU5QVVQiPT09Yy50''@;'; put 'put ''YWdOYW1lJiYiY2hlY2tib3giPT09Yy5nZXRBdHRyaWJ1dGUoInR5cGUiKX1mdW5jdGlvbiBxWChjLGwsYSxkLGgsZix2KXtJXy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9U2EuZ2V0U2luZ2xldG9uKCkuYWRkKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLGZ1bmN0aW9uKGMsbCxh''@;'; put 'put ''KXtjb25zdHtsYWJlbDpkLHR5cGU6aCxyb3c6Zixjb2x1bW46dixwcm9wOk19PWw7aWYoImNoZWNrYm94Ij09PWgpe2lmKGQpe2NvbnN0e3ZhbHVlOkQscHJvcGVydHk6Wn09ZDtsZXQgcmU9YTtpZihEKXJlPSJmdW5jdGlvbiI9PXR5cGVvZiBEP0QoZix2LE0sYSk6RDtlbHNlIGlmKFope2Nv''@;'; put 'put ''bnN0IGNlPXRoaXMuZ2V0RGF0YUF0Um93UHJvcChmLFopO3JlPW51bGwhPT1jZT9jZTphfWM9cmV9cmV0dXJuIGN9fSksJFguUkVOREVSRVJfVFlQRT0iY2hlY2tib3giLHFYLlJFTkRFUkVSX1RZUEU9ImhhbmRzb250YWJsZSI7dmFyIFhYLGk0ZSxKWCxhNGUsUVgsczRlLEdhdD10eXBlb2Yg''@;'; put 'put ''Z2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uICRhdChjKXtyZXR1cm4gYyYmYy5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blBy''@;'; put 'put ''b3BlcnR5LmNhbGwoYywiZGVmYXVsdCIpP2MuZGVmYXVsdDpjfWZ1bmN0aW9uIG80ZSgpe2lmKGE0ZSlyZXR1cm4gSlg7YTRlPTE7Y29uc3QgYz1be2tleToiWmlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw3KX0se2tleToiWkIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNyl9LHtrZXk6IllpQiIs''@;'; put 'put ''ZmFjdG9yOk1hdGgucG93KDEwMjQsOCl9LHtrZXk6IllCIixmYWN0b3I6TWF0aC5wb3coMWUzLDgpfSx7a2V5OiJUaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDQpfSx7a2V5OiJUQiIsZmFjdG9yOk1hdGgucG93KDFlMyw0KX0se2tleToiUGlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw1KX0s''@;'; put 'put ''e2tleToiUEIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNSl9LHtrZXk6Ik1pQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMil9LHtrZXk6Ik1CIixmYWN0b3I6TWF0aC5wb3coMWUzLDIpfSx7a2V5OiJLaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDEpfSx7a2V5OiJLQiIsZmFjdG9yOk1hdGgucG93''@;'; put 'put ''KDFlMywxKX0se2tleToiR2lCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwzKX0se2tleToiR0IiLGZhY3RvcjpNYXRoLnBvdygxZTMsMyl9LHtrZXk6IkVpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNil9LHtrZXk6IkVCIixmYWN0b3I6TWF0aC5wb3coMWUzLDYpfSx7a2V5OiJCIixmYWN0b3I6''@;'; put 'put ''MX1dO2Z1bmN0aW9uIGwoRCl7cmV0dXJuIEQucmVwbGFjZSgvWy0vXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfWZ1bmN0aW9uIGEoRCxaLHJlLGNlLGJlLEVlLEJlKXtpZighaXNOYU4oK0QpKXJldHVybitEO2xldCBxZT0iIixydD1ELnJlcGxhY2UoLyheW14oXSopXCgoLiopXCkoW14p''@;'; put 'put ''XSokKS8sIiQxJDIkMyIpO2lmKHJ0IT09RClyZXR1cm4tMSphKHJ0LFoscmUsY2UsYmUsRWUpO2ZvcihsZXQgdG49MDt0bjxjLmxlbmd0aDt0bisrKXtsZXQgTW49Y1t0bl07aWYocWU9RC5yZXBsYWNlKFJlZ0V4cChgKFswLTkgXSkoJHtNbi5rZXl9KSRgKSwiJDEiKSxxZSE9PUQpcmV0dXJu''@;'; put 'put ''IGEocWUsWixyZSxjZSxiZSxFZSkqTW4uZmFjdG9yfWlmKHFlPUQucmVwbGFjZSgiJSIsIiIpLHFlIT09RClyZXR1cm4gYShxZSxaLHJlLGNlLGJlLEVlKS8xMDA7bGV0IHB0PXBhcnNlRmxvYXQoRCk7aWYoaXNOYU4ocHQpKXJldHVybjtsZXQgZHQ9Y2UocHQpO2lmKGR0JiYiLiIhPT1kdCYm''@;'; put 'put ''KHFlPUQucmVwbGFjZShuZXcgUmVnRXhwKGAke2woZHQpfSRgKSwiIikscWUhPT1EKSlyZXR1cm4gYShxZSxaLHJlLGNlLGJlLEVlKTtsZXQgSnQ9e307T2JqZWN0LmtleXMoRWUpLmZvckVhY2godG49PntKdFtFZVt0bl1dPXRufSk7bGV0IHZuPU9iamVjdC5rZXlzKEp0KS5zb3J0KCkucmV2''@;'; put 'put ''ZXJzZSgpLENuPXZuLmxlbmd0aDtmb3IobGV0IHRuPTA7dG48Q247dG4rKyl7bGV0IE1uPXZuW3RuXSxDcj1KdFtNbl07aWYocWU9RC5yZXBsYWNlKE1uLCIiKSxxZSE9PUQpe2xldCBHcjtzd2l0Y2goQ3Ipe2Nhc2UidGhvdXNhbmQiOkdyPU1hdGgucG93KDEwLDMpO2JyZWFrO2Nhc2UibWls''@;'; put 'put ''bGlvbiI6R3I9TWF0aC5wb3coMTAsNik7YnJlYWs7Y2FzZSJiaWxsaW9uIjpHcj1NYXRoLnBvdygxMCw5KTticmVhaztjYXNlInRyaWxsaW9uIjpHcj1NYXRoLnBvdygxMCwxMil9cmV0dXJuIGEocWUsWixyZSxjZSxiZSxFZSkqR3J9fX1mdW5jdGlvbiBoKEQsWixyZT0iIixjZSxiZSxFZSxC''@;'; put 'put ''ZSl7aWYoIiI9PT1EKXJldHVybjtpZihEPT09YmUpcmV0dXJuIDA7bGV0IHFlPWZ1bmN0aW9uIGQoRCxaLHJlKXtsZXQgY2U9RC5yZXBsYWNlKHJlLCIiKTtyZXR1cm4gY2U9Y2UucmVwbGFjZShuZXcgUmVnRXhwKGAoWzAtOV0pJHtsKFoudGhvdXNhbmRzKX0oWzAtOV0pYCwiZyIpLCIkMSQy''@;'; put 'put ''IiksY2U9Y2UucmVwbGFjZShaLmRlY2ltYWwsIi4iKSxjZX0oRCxaLHJlKTtyZXR1cm4gYShxZSxaLHJlLGNlLGJlLEVlKX1yZXR1cm4gSlg9e3VuZm9ybWF0OmZ1bmN0aW9uIE0oRCxaKXtjb25zdCByZT1ySigpO2xldCBydCxjZT1yZS5jdXJyZW50RGVsaW1pdGVycygpLGJlPXJlLmN1cnJl''@;'; put 'put ''bnRDdXJyZW5jeSgpLnN5bWJvbCxFZT1yZS5jdXJyZW50T3JkaW5hbCgpLEJlPXJlLmdldFplcm9Gb3JtYXQoKSxxZT1yZS5jdXJyZW50QWJicmV2aWF0aW9ucygpO2lmKCJzdHJpbmciPT10eXBlb2YgRClydD1mdW5jdGlvbiBmKEQsWil7aWYoIUQuaW5kZXhPZigiOiIpfHwiOiI9PT1aLnRo''@;'; put 'put ''b3VzYW5kcylyZXR1cm4hMTtsZXQgY2U9RC5zcGxpdCgiOiIpO2lmKDMhPT1jZS5sZW5ndGgpcmV0dXJuITE7bGV0IEVlPStjZVsxXSxCZT0rY2VbMl07cmV0dXJuIWlzTmFOKCtjZVswXSkmJiFpc05hTihFZSkmJiFpc05hTihCZSl9KEQsY2UpP2Z1bmN0aW9uIHYoRCl7bGV0IFo9RC5zcGxp''@;'; put 'put ''dCgiOiIpO3JldHVybitaWzJdKzYwKitaWzFdKzM2MDAqK1pbMF19KEQpOmgoRCxjZSxiZSxFZSxCZSxxZSk7ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIEQpcmV0dXJuO3J0PUR9aWYodm9pZCAwIT09cnQpcmV0dXJuIHJ0fX19ZnVuY3Rpb24gZUooKXtpZihzNGUpcmV0dXJuIFFYO3M0ZT0x''@;'; put 'put ''O2xldCBjPW80ZSgpO2NvbnN0IGw9L15bYS16XXsyLDN9KC1bYS16QS1aXXs0fSk/KC0oW0EtWl17Mn18WzAtOV17M30pKT8kLyxaPXtvdXRwdXQ6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJjdXJyZW5jeSIsInBlcmNlbnQiLCJieXRlIiwidGltZSIsIm9yZGluYWwiLCJudW1iZXIi''@;'; put 'put ''XX0sYmFzZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbImRlY2ltYWwiLCJiaW5hcnkiLCJnZW5lcmFsIl0scmVzdHJpY3Rpb246KHJ0LHB0KT0+ImJ5dGUiPT09cHQub3V0cHV0LG1lc3NhZ2U6ImBiYXNlYCBtdXN0IGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGBi''@;'; put 'put ''eXRlYCIsbWFuZGF0b3J5OnJ0PT4iYnl0ZSI9PT1ydC5vdXRwdXR9LGNoYXJhY3RlcmlzdGljOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9uOnJ0PT5ydD49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0scHJlZml4OiJzdHJpbmciLHBvc3RmaXg6InN0cmluZyIsZm9yY2VB''@;'; put 'put ''dmVyYWdlOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsidHJpbGxpb24iLCJiaWxsaW9uIiwibWlsbGlvbiIsInRob3VzYW5kIl19LGF2ZXJhZ2U6ImJvb2xlYW4iLGxvd1ByZWNpc2lvbjp7dHlwZToiYm9vbGVhbiIscmVzdHJpY3Rpb246KHJ0LHB0KT0+ITA9PT1wdC5hdmVyYWdlLG1l''@;'; put 'put ''c3NhZ2U6ImBsb3dQcmVjaXNpb25gIG11c3QgYmUgcHJvdmlkZWQgb25seSB3aGVuIHRoZSBvcHRpb24gYGF2ZXJhZ2VgIGlzIHNldCJ9LGN1cnJlbmN5UG9zaXRpb246e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJwcmVmaXgiLCJpbmZpeCIsInBvc3RmaXgiXX0sY3VycmVuY3lTeW1i''@;'; put 'put ''b2w6InN0cmluZyIsdG90YWxMZW5ndGg6e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb25zOlt7cmVzdHJpY3Rpb246cnQ9PnJ0Pj0wLG1lc3NhZ2U6InZhbHVlIG11c3QgYmUgcG9zaXRpdmUifSx7cmVzdHJpY3Rpb246KHJ0LHB0KT0+IXB0LmV4cG9uZW50aWFsLG1lc3NhZ2U6ImB0b3RhbExl''@;'; put 'put ''bmd0aGAgaXMgaW5jb21wYXRpYmxlIHdpdGggYGV4cG9uZW50aWFsYCJ9XX0sbWFudGlzc2E6e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb246cnQ9PnJ0Pj0wLG1lc3NhZ2U6InZhbHVlIG11c3QgYmUgcG9zaXRpdmUifSxvcHRpb25hbE1hbnRpc3NhOiJib29sZWFuIix0cmltTWFudGlzc2E6''@;'; put 'put ''ImJvb2xlYW4iLHJvdW5kaW5nRnVuY3Rpb246ImZ1bmN0aW9uIixvcHRpb25hbENoYXJhY3RlcmlzdGljOiJib29sZWFuIix0aG91c2FuZFNlcGFyYXRlZDoiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ImJvb2xlYW4iLHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkQWJicmV2aWF0aW9uOiJib29sZWFuIixhYmJyZXZpYXRpb25zOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZDoic3RyaW5nIixtaWxsaW9uOiJzdHJpbmciLGJpbGxpb246InN0cmluZyIsdHJpbGxpb246InN0cmluZyJ9fSxuZWdhdGl2ZTp7dHlwZToic3RyaW5nIix2''@;'; put 'put ''YWxpZFZhbHVlczpbInNpZ24iLCJwYXJlbnRoZXNpcyJdfSxmb3JjZVNpZ246ImJvb2xlYW4iLGV4cG9uZW50aWFsOnt0eXBlOiJib29sZWFuIn0scHJlZml4U3ltYm9sOnt0eXBlOiJib29sZWFuIixyZXN0cmljdGlvbjoocnQscHQpPT4icGVyY2VudCI9PT1wdC5vdXRwdXQsbWVzc2FnZToi''@;'; put 'put ''YHByZWZpeFN5bWJvbGAgY2FuIGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGBwZXJjZW50YCJ9fSxyZT17bGFuZ3VhZ2VUYWc6e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwLHJlc3RyaWN0aW9uOnJ0PT5ydC5tYXRjaChsKSxtZXNzYWdlOiJ0aGUgbGFuZ3VhZ2UgdGFn''@;'; put 'put ''IG11c3QgZm9sbG93IHRoZSBCQ1AgNDcgc3BlY2lmaWNhdGlvbiAoc2VlIGh0dHBzOi8vdG9vbHMuaWVmdC5vcmcvaHRtbC9iY3A0NykifSxkZWxpbWl0ZXJzOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZHM6InN0cmluZyIsZGVjaW1hbDoic3RyaW5nIix0aG91c2FuZHNTaXpl''@;'; put 'put ''OiJudW1iZXIifSxtYW5kYXRvcnk6ITB9LGFiYnJldmlhdGlvbnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH0sbWlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LGJpbGxpb246e3R5cGU6InN0cmluZyIsbWFu''@;'; put 'put ''ZGF0b3J5OiEwfSx0cmlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9fSxtYW5kYXRvcnk6ITB9LHNwYWNlU2VwYXJhdGVkOiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiJib29sZWFuIixvcmRpbmFsOnt0eXBlOiJmdW5jdGlvbiIsbWFuZGF0b3J5OiEwfSxieXRl''@;'; put 'put ''czp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7YmluYXJ5U3VmZml4ZXM6Im9iamVjdCIsZGVjaW1hbFN1ZmZpeGVzOiJvYmplY3QifX0sY3VycmVuY3k6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3N5bWJvbDoic3RyaW5nIixwb3NpdGlvbjoic3RyaW5nIixjb2RlOiJzdHJpbmcifSxtYW5k''@;'; put 'put ''YXRvcnk6ITB9LGRlZmF1bHRzOiJmb3JtYXQiLG9yZGluYWxGb3JtYXQ6ImZvcm1hdCIsYnl0ZUZvcm1hdDoiZm9ybWF0IixwZXJjZW50YWdlRm9ybWF0OiJmb3JtYXQiLGN1cnJlbmN5Rm9ybWF0OiJmb3JtYXQiLHRpbWVEZWZhdWx0czoiZm9ybWF0Iixmb3JtYXRzOnt0eXBlOiJvYmplY3Qi''@;'; put 'put ''LGNoaWxkcmVuOntmb3VyRGlnaXRzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ont0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdp''@;'; put 'put ''dGhOb0RlY2ltYWxzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH19fX07ZnVuY3Rpb24gYmUocnQpe3JldHVybiB2b2lkIDAhPT1jLnVuZm9ybWF0KHJ0KX1mdW5jdGlvbiBFZShydCxwdCxkdCxKdD0hMSl7bGV0IHZuPU9iamVjdC5rZXlzKHJ0KS5tYXAoQ249PntpZighcHRbQ25dKXJl''@;'; put 'put ''dHVybiBjb25zb2xlLmVycm9yKGAke2R0fSBJbnZhbGlkIGtleTogJHtDbn1gKSwhMTtsZXQgdG49cnRbQ25dLE1uPXB0W0NuXTtpZigic3RyaW5nIj09dHlwZW9mIE1uJiYoTW49e3R5cGU6TW59KSwiZm9ybWF0Ij09PU1uLnR5cGUpe2lmKCFFZSh0bixaLGBbVmFsaWRhdGUgJHtDbn1dYCwh''@;'; put 'put ''MCkpcmV0dXJuITF9ZWxzZSBpZih0eXBlb2YgdG4hPT1Nbi50eXBlKXJldHVybiBjb25zb2xlLmVycm9yKGAke2R0fSAke0NufSB0eXBlIG1pc21hdGNoZWQ6ICIke01uLnR5cGV9IiBleHBlY3RlZCwgIiR7dHlwZW9mIHRufSIgcHJvdmlkZWRgKSwhMTtpZihNbi5yZXN0cmljdGlvbnMmJk1u''@;'; put 'put ''LnJlc3RyaWN0aW9ucy5sZW5ndGgpe2xldCBDcj1Nbi5yZXN0cmljdGlvbnMubGVuZ3RoO2ZvcihsZXQgR3I9MDtHcjxDcjtHcisrKXtsZXR7cmVzdHJpY3Rpb246bXIsbWVzc2FnZTpHbn09TW4ucmVzdHJpY3Rpb25zW0dyXTtpZighbXIodG4scnQpKXJldHVybiBjb25zb2xlLmVycm9yKGAk''@;'; put 'put ''e2R0fSAke0NufSBpbnZhbGlkIHZhbHVlOiAke0dufWApLCExfX1yZXR1cm4gTW4ucmVzdHJpY3Rpb24mJiFNbi5yZXN0cmljdGlvbih0bixydCk/KGNvbnNvbGUuZXJyb3IoYCR7ZHR9ICR7Q259IGludmFsaWQgdmFsdWU6ICR7TW4ubWVzc2FnZX1gKSwhMSk6TW4udmFsaWRWYWx1ZXMmJi0x''@;'; put 'put ''PT09TW4udmFsaWRWYWx1ZXMuaW5kZXhPZih0bik/KGNvbnNvbGUuZXJyb3IoYCR7ZHR9ICR7Q259IGludmFsaWQgdmFsdWU6IG11c3QgYmUgYW1vbmcgJHtKU09OLnN0cmluZ2lmeShNbi52YWxpZFZhbHVlcyl9LCAiJHt0bn0iIHByb3ZpZGVkYCksITEpOiEoTW4uY2hpbGRyZW4mJiFFZSh0''@;'; put 'put ''bixNbi5jaGlsZHJlbixgW1ZhbGlkYXRlICR7Q259XWApKX0pO3JldHVybiBKdHx8dm4ucHVzaCguLi5PYmplY3Qua2V5cyhwdCkubWFwKENuPT57bGV0IHRuPXB0W0NuXTtpZigic3RyaW5nIj09dHlwZW9mIHRuJiYodG49e3R5cGU6dG59KSx0bi5tYW5kYXRvcnkpe2xldCBNbj10bi5tYW5k''@;'; put 'put ''YXRvcnk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE1uJiYoTW49TW4ocnQpKSxNbiYmdm9pZCAwPT09cnRbQ25dKXJldHVybiBjb25zb2xlLmVycm9yKGAke2R0fSBNaXNzaW5nIG1hbmRhdG9yeSBrZXkgIiR7Q259ImApLCExfXJldHVybiEwfSkpLHZuLnJlZHVjZSgoQ24sdG4pPT5DbiYmdG4s''@;'; put 'put ''ITApfWZ1bmN0aW9uIEJlKHJ0KXtyZXR1cm4gRWUocnQsWiwiW1ZhbGlkYXRlIGZvcm1hdF0iKX1yZXR1cm4gUVg9e3ZhbGlkYXRlOmZ1bmN0aW9uIGNlKHJ0LHB0KXtsZXQgZHQ9YmUocnQpLEp0PUJlKHB0KTtyZXR1cm4gZHQmJkp0fSx2YWxpZGF0ZUZvcm1hdDpCZSx2YWxpZGF0ZUlucHV0''@;'; put 'put ''OmJlLHZhbGlkYXRlTGFuZ3VhZ2U6ZnVuY3Rpb24gcWUocnQpe3JldHVybiBFZShydCxyZSwiW1ZhbGlkYXRlIGxhbmd1YWdlXSIpfX19dmFyIG5KLGw0ZSx0Sj17cGFyc2VGb3JtYXQ6ZnVuY3Rpb24gZG90KGMsbD17fSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBjP2M6KGM9ZnVuY3Rpb24g''@;'; put 'put ''cWF0KGMsbCl7bGV0IGE9Yy5tYXRjaCgvXnsoW159XSopfS8pO3JldHVybiBhPyhsLnByZWZpeD1hWzFdLGMuc2xpY2UoYVswXS5sZW5ndGgpKTpjfShjLGwpLGM9ZnVuY3Rpb24gWGF0KGMsbCl7bGV0IGE9Yy5tYXRjaCgveyhbXn1dKil9JC8pO3JldHVybiBhPyhsLnBvc3RmaXg9YVsxXSxj''@;'; put 'put ''LnNsaWNlKDAsLWFbMF0ubGVuZ3RoKSk6Y30oYyxsKSxmdW5jdGlvbiBKYXQoYyxsKXtpZigtMT09PWMuaW5kZXhPZigiJCIpKXtpZigtMT09PWMuaW5kZXhPZigiJSIpKXJldHVybi0xIT09Yy5pbmRleE9mKCJiZCIpPyhsLm91dHB1dD0iYnl0ZSIsdm9pZChsLmJhc2U9ImdlbmVyYWwiKSk6''@;'; put 'put ''LTEhPT1jLmluZGV4T2YoImIiKT8obC5vdXRwdXQ9ImJ5dGUiLHZvaWQobC5iYXNlPSJiaW5hcnkiKSk6LTEhPT1jLmluZGV4T2YoImQiKT8obC5vdXRwdXQ9ImJ5dGUiLHZvaWQobC5iYXNlPSJkZWNpbWFsIikpOnZvaWQoLTE9PT1jLmluZGV4T2YoIjoiKT8tMSE9PWMuaW5kZXhPZigibyIp''@;'; put 'put ''JiYobC5vdXRwdXQ9Im9yZGluYWwiKTpsLm91dHB1dD0idGltZSIpO2wub3V0cHV0PSJwZXJjZW50In1lbHNlIGwub3V0cHV0PSJjdXJyZW5jeSJ9KGMsbCksZnVuY3Rpb24gdG90KGMsbCl7bGV0IGE9Yy5tYXRjaCgvWzEtOV0rWzAtOV0qLyk7YSYmKGwudG90YWxMZW5ndGg9K2FbMF0pfShj''@;'; put 'put ''LGwpLGZ1bmN0aW9uIG5vdChjLGwpe2xldCBkPWMuc3BsaXQoIi4iKVswXS5tYXRjaCgvMCsvKTtkJiYobC5jaGFyYWN0ZXJpc3RpYz1kWzBdLmxlbmd0aCl9KGMsbCksZnVuY3Rpb24gbG90KGMsbCl7aWYoLTEhPT1jLmluZGV4T2YoIi4iKSl7bGV0IGE9Yy5zcGxpdCgiLiIpWzBdO2wub3B0''@;'; put 'put ''aW9uYWxDaGFyYWN0ZXJpc3RpYz0tMT09PWEuaW5kZXhPZigiMCIpfX0oYyxsKSxmdW5jdGlvbiBhb3QoYyxsKXstMSE9PWMuaW5kZXhPZigiYSIpJiYobC5hdmVyYWdlPSEwKX0oYyxsKSxmdW5jdGlvbiBvb3QoYyxsKXstMSE9PWMuaW5kZXhPZigiSyIpP2wuZm9yY2VBdmVyYWdlPSJ0aG91''@;'; put 'put ''c2FuZCI6LTEhPT1jLmluZGV4T2YoIk0iKT9sLmZvcmNlQXZlcmFnZT0ibWlsbGlvbiI6LTEhPT1jLmluZGV4T2YoIkIiKT9sLmZvcmNlQXZlcmFnZT0iYmlsbGlvbiI6LTEhPT1jLmluZGV4T2YoIlQiKSYmKGwuZm9yY2VBdmVyYWdlPSJ0cmlsbGlvbiIpfShjLGwpLGZ1bmN0aW9uIHJvdChj''@;'; put 'put ''LGwpe2xldCBhPWMuc3BsaXQoIi4iKVsxXTtpZihhKXtsZXQgZD1hLm1hdGNoKC8wKy8pO2QmJihsLm1hbnRpc3NhPWRbMF0ubGVuZ3RoKX19KGMsbCksZnVuY3Rpb24gc290KGMsbCl7Yy5tYXRjaCgvXFtcLl0vKT9sLm9wdGlvbmFsTWFudGlzc2E9ITA6Yy5tYXRjaCgvXC4vKSYmKGwub3B0''@;'; put 'put ''aW9uYWxNYW50aXNzYT0hMSl9KGMsbCksZnVuY3Rpb24gaW90KGMsbCl7Y29uc3QgYT1jLnNwbGl0KCIuIilbMV07YSYmKGwudHJpbU1hbnRpc3NhPS0xIT09YS5pbmRleE9mKCJbIikpfShjLGwpLGZ1bmN0aW9uIFFhdChjLGwpey0xIT09Yy5pbmRleE9mKCIsIikmJihsLnRob3VzYW5kU2Vw''@;'; put 'put ''YXJhdGVkPSEwKX0oYyxsKSxmdW5jdGlvbiBlb3QoYyxsKXstMSE9PWMuaW5kZXhPZigiICIpJiYobC5zcGFjZVNlcGFyYXRlZD0hMCxsLnNwYWNlU2VwYXJhdGVkQ3VycmVuY3k9ITAsKGwuYXZlcmFnZXx8bC5mb3JjZUF2ZXJhZ2UpJiYobC5zcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbj0h''@;'; put 'put ''MCkpfShjLGwpLGZ1bmN0aW9uIGNvdChjLGwpe2MubWF0Y2goL15cKz9cKFteKV0qXCkkLykmJihsLm5lZ2F0aXZlPSJwYXJlbnRoZXNpcyIpLGMubWF0Y2goL15cKz8tLykmJihsLm5lZ2F0aXZlPSJzaWduIil9KGMsbCksZnVuY3Rpb24gdW90KGMsbCl7Yy5tYXRjaCgvXlwrLykmJihsLmZv''@;'; put 'put ''cmNlU2lnbj0hMCl9KGMsbCksbCl9fTtmdW5jdGlvbiBySigpe2lmKGw0ZSlyZXR1cm4gbko7bDRlPTE7Y29uc3QgYz1mdW5jdGlvbiBLYXQoKXtyZXR1cm4gaTRlfHwoaTRlPTEsWFg9e2xhbmd1YWdlVGFnOiJlbi1VUyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0s''@;'; put 'put ''YWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sc3BhY2VTZXBhcmF0ZWQ6ITEsb3JkaW5hbDpmdW5jdGlvbihjKXtsZXQgbD1jJTEwO3JldHVybiAxPT1+fihjJTEwMC8xMCk/InRoIjoxPT09bD8ic3QiOjI9PT1sPyJuZCI6''@;'; put 'put ''Mz09PWw/InJkIjoidGgifSxieXRlczp7YmluYXJ5U3VmZml4ZXM6WyJCIiwiS2lCIiwiTWlCIiwiR2lCIiwiVGlCIiwiUGlCIiwiRWlCIiwiWmlCIiwiWWlCIl0sZGVjaW1hbFN1ZmZpeGVzOlsiQiIsIktCIiwiTUIiLCJHQiIsIlRCIiwiUEIiLCJFQiIsIlpCIiwiWUIiXX0sY3VycmVuY3k6''@;'; put 'put ''e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxM''@;'; put 'put ''ZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1''@;'; put 'put ''bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSksWFh9KCksbD1lSigpLGE9dEo7bGV0IGgsZD17fSxmPXt9LHY9bnVsbCxNPXt9O2Z1bmN0aW9uIEQocmUpe2g9cmV9ZnVuY3Rpb24gWigpe3JldHVybiBmW2hdfXJl''@;'; put 'put ''dHVybiBkLmxhbmd1YWdlcz0oKT0+T2JqZWN0LmFzc2lnbih7fSxmKSxkLmN1cnJlbnRMYW5ndWFnZT0oKT0+aCxkLmN1cnJlbnRCeXRlcz0oKT0+WigpLmJ5dGVzfHx7fSxkLmN1cnJlbnRDdXJyZW5jeT0oKT0+WigpLmN1cnJlbmN5LGQuY3VycmVudEFiYnJldmlhdGlvbnM9KCk9PlooKS5h''@;'; put 'put ''YmJyZXZpYXRpb25zLGQuY3VycmVudERlbGltaXRlcnM9KCk9PlooKS5kZWxpbWl0ZXJzLGQuY3VycmVudE9yZGluYWw9KCk9PlooKS5vcmRpbmFsLGQuY3VycmVudERlZmF1bHRzPSgpPT5PYmplY3QuYXNzaWduKHt9LFooKS5kZWZhdWx0cyxNKSxkLmN1cnJlbnRPcmRpbmFsRGVmYXVsdEZv''@;'; put 'put ''cm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS5vcmRpbmFsRm9ybWF0KSxkLmN1cnJlbnRCeXRlRGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS5ieXRlRm9ybWF0KSxkLmN1cnJlbnRQZXJjZW50''@;'; put 'put ''YWdlRGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS5wZXJjZW50YWdlRm9ybWF0KSxkLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxaKCkuY3VycmVuY3lG''@;'; put 'put ''b3JtYXQpLGQuY3VycmVudFRpbWVEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksWigpLnRpbWVGb3JtYXQpLGQuc2V0RGVmYXVsdHM9cmU9PntyZT1hLnBhcnNlRm9ybWF0KHJlKSxsLnZhbGlkYXRlRm9ybWF0KHJlKSYmKE09cmUpfSxkLmdl''@;'; put 'put ''dFplcm9Gb3JtYXQ9KCk9PnYsZC5zZXRaZXJvRm9ybWF0PXJlPT52PSJzdHJpbmciPT10eXBlb2YgcmU/cmU6bnVsbCxkLmhhc1plcm9Gb3JtYXQ9KCk9Pm51bGwhPT12LGQubGFuZ3VhZ2VEYXRhPXJlPT57aWYocmUpe2lmKGZbcmVdKXJldHVybiBmW3JlXTt0aHJvdyBuZXcgRXJyb3IoYFVu''@;'; put 'put ''a25vd24gdGFnICIke3JlfSJgKX1yZXR1cm4gWigpfSxkLnJlZ2lzdGVyTGFuZ3VhZ2U9KHJlLGNlPSExKT0+e2lmKCFsLnZhbGlkYXRlTGFuZ3VhZ2UocmUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsYW5ndWFnZSBkYXRhIik7ZltyZS5sYW5ndWFnZVRhZ109cmUsY2UmJkQocmUubGFu''@;'; put 'put ''Z3VhZ2VUYWcpfSxkLnNldExhbmd1YWdlPShyZSxjZT1jLmxhbmd1YWdlVGFnKT0+e2lmKCFmW3JlXSl7bGV0IGJlPXJlLnNwbGl0KCItIilbMF0sRWU9T2JqZWN0LmtleXMoZikuZmluZChCZT0+QmUuc3BsaXQoIi0iKVswXT09PWJlKTtyZXR1cm4gZltFZV0/dm9pZCBEKEVlKTp2b2lkIEQo''@;'; put 'put ''Y2UpfUQocmUpfSxkLnJlZ2lzdGVyTGFuZ3VhZ2UoYyksaD1jLmxhbmd1YWdlVGFnLG5KPWR9dmFyIGM0ZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGMpeyFmdW5jdGlvbihsKXt2YXIgYSxkPS9eLT8oPzpcZCsoPzpcLlxkKik/fFwuXGQrKSg/OmVbKy1dP1xkKyk/JC9pLGg9TWF0aC5jZWls''@;'; put 'put ''LGY9TWF0aC5mbG9vcix2PSJbQmlnTnVtYmVyIEVycm9yXSAiLE09disiTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czogIixEPTFlMTQsWj0xNCxyZT05MDA3MTk5MjU0NzQwOTkxLGNlPVsxLDEwLDEwMCwxZTMsMWU0LDFlNSwxZTYsMWU3LDFl''@;'; put 'put ''OCwxZTksMWUxMCwxZTExLDFlMTIsMWUxM10sYmU9MWU3LEVlPTFlOTtmdW5jdGlvbiBxZSh0bil7dmFyIE1uPTB8dG47cmV0dXJuIHRuPjB8fHRuPT09TW4/TW46TW4tMX1mdW5jdGlvbiBydCh0bil7Zm9yKHZhciBNbixDcixHcj0xLG1yPXRuLmxlbmd0aCxHbj10blswXSsiIjtHcjxtcjsp''@;'; put 'put ''e2ZvcihNbj10bltHcisrXSsiIixDcj1aLU1uLmxlbmd0aDtDci0tO01uPSIwIitNbik7R24rPU1ufWZvcihtcj1Hbi5sZW5ndGg7NDg9PT1Hbi5jaGFyQ29kZUF0KC0tbXIpOyk7cmV0dXJuIEduLnNsaWNlKDAsbXIrMXx8MSl9ZnVuY3Rpb24gcHQodG4sTW4pe3ZhciBDcixHcixtcj10bi5j''@;'; put 'put ''LEduPU1uLmMsYWk9dG4ucyxfaT1Nbi5zLE9uPXRuLmUsenI9TW4uZTtpZighYWl8fCFfaSlyZXR1cm4gbnVsbDtpZihHcj1HbiYmIUduWzBdLChDcj1tciYmIW1yWzBdKXx8R3IpcmV0dXJuIENyP0dyPzA6LV9pOmFpO2lmKGFpIT1faSlyZXR1cm4gYWk7aWYoQ3I9YWk8MCxHcj1Pbj09enIs''@;'; put 'put ''IW1yfHwhR24pcmV0dXJuIEdyPzA6IW1yXkNyPzE6LTE7aWYoIUdyKXJldHVybiBPbj56cl5Dcj8xOi0xO2ZvcihfaT0oT249bXIubGVuZ3RoKTwoenI9R24ubGVuZ3RoKT9Pbjp6cixhaT0wO2FpPF9pO2FpKyspaWYobXJbYWldIT1HblthaV0pcmV0dXJuIG1yW2FpXT5HblthaV1eQ3I/MTot''@;'; put 'put ''MTtyZXR1cm4gT249PXpyPzA6T24+enJeQ3I/MTotMX1mdW5jdGlvbiBkdCh0bixNbixDcixHcil7aWYodG48TW58fHRuPkNyfHx0biE9PWYodG4pKXRocm93IEVycm9yKHYrKEdyfHwiQXJndW1lbnQiKSsoIm51bWJlciI9PXR5cGVvZiB0bj90bjxNbnx8dG4+Q3I/IiBvdXQgb2YgcmFuZ2U6''@;'; put 'put ''ICI6IiBub3QgYW4gaW50ZWdlcjogIjoiIG5vdCBhIHByaW1pdGl2ZSBudW1iZXI6ICIpK1N0cmluZyh0bikpfWZ1bmN0aW9uIEp0KHRuKXt2YXIgTW49dG4uYy5sZW5ndGgtMTtyZXR1cm4gcWUodG4uZS9aKT09TW4mJnRuLmNbTW5dJTIhPTB9ZnVuY3Rpb24gdm4odG4sTW4pe3JldHVybih0''@;'; put 'put ''bi5sZW5ndGg+MT90bi5jaGFyQXQoMCkrIi4iK3RuLnNsaWNlKDEpOnRuKSsoTW48MD8iZSI6ImUrIikrTW59ZnVuY3Rpb24gQ24odG4sTW4sQ3Ipe3ZhciBHcixtcjtpZihNbjwwKXtmb3IobXI9Q3IrIi4iOysrTW47bXIrPUNyKTt0bj1tcit0bn1lbHNlIGlmKCsrTW4+KEdyPXRuLmxlbmd0''@;'; put 'put ''aCkpe2Zvcihtcj1DcixNbi09R3I7LS1Nbjttcis9Q3IpO3RuKz1tcn1lbHNlIE1uPEdyJiYodG49dG4uc2xpY2UoMCxNbikrIi4iK3RuLnNsaWNlKE1uKSk7cmV0dXJuIHRufWE9ZnVuY3Rpb24gQmUodG4pe3ZhciBNbixDcixHcixvbix5bixtcj1IdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9y''@;'; put 'put ''Okh0LHRvU3RyaW5nOm51bGwsdmFsdWVPZjpudWxsfSxHbj1uZXcgSHQoMSksYWk9MjAsX2k9NCxPbj0tNyx6cj0yMSxKbj0tMWU3LElyPTFlNywkcj0hMSx3aT0xLGVhPTAsZmE9e3ByZWZpeDoiIixncm91cFNpemU6MyxzZWNvbmRhcnlHcm91cFNpemU6MCxncm91cFNlcGFyYXRvcjoiLCIs''@;'; put 'put ''ZGVjaW1hbFNlcGFyYXRvcjoiLiIsZnJhY3Rpb25Hcm91cFNpemU6MCxmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiJceGEwIixzdWZmaXg6IiJ9LHZ0PSIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLE50PSEwO2Z1bmN0aW9uIEh0KG9uLHluKXt2YXIgcG4scHIsJG4sZHIs''@;'; put 'put ''VXIsWm4sc3IsTnIsTXI9dGhpcztpZighKE1yIGluc3RhbmNlb2YgSHQpKXJldHVybiBuZXcgSHQob24seW4pO2lmKG51bGw9PXluKXtpZihvbiYmITA9PT1vbi5faXNCaWdOdW1iZXIpcmV0dXJuIE1yLnM9b24ucyx2b2lkKCFvbi5jfHxvbi5lPklyP01yLmM9TXIuZT1udWxsOm9uLmU8Sm4/''@;'; put 'put ''TXIuYz1bTXIuZT0wXTooTXIuZT1vbi5lLE1yLmM9b24uYy5zbGljZSgpKSk7aWYoKFpuPSJudW1iZXIiPT10eXBlb2Ygb24pJiYwKm9uPT0wKXtpZihNci5zPTEvb248MD8ob249LW9uLC0xKToxLG9uPT09fn5vbil7Zm9yKGRyPTAsVXI9b247VXI+PTEwO1VyLz0xMCxkcisrKTtyZXR1cm4g''@;'; put 'put ''dm9pZChkcj5Jcj9Nci5jPU1yLmU9bnVsbDooTXIuZT1kcixNci5jPVtvbl0pKX1Ocj1TdHJpbmcob24pfWVsc2V7aWYoIWQudGVzdChOcj1TdHJpbmcob24pKSlyZXR1cm4gR3IoTXIsTnIsWm4pO01yLnM9NDU9PU5yLmNoYXJDb2RlQXQoMCk/KE5yPU5yLnNsaWNlKDEpLC0xKToxfShkcj1O''@;'; put 'put ''ci5pbmRleE9mKCIuIikpPi0xJiYoTnI9TnIucmVwbGFjZSgiLiIsIiIpKSwoVXI9TnIuc2VhcmNoKC9lL2kpKT4wPyhkcjwwJiYoZHI9VXIpLGRyKz0rTnIuc2xpY2UoVXIrMSksTnI9TnIuc3Vic3RyaW5nKDAsVXIpKTpkcjwwJiYoZHI9TnIubGVuZ3RoKX1lbHNle2lmKGR0KHluLDIsdnQu''@;'; put 'put ''bGVuZ3RoLCJCYXNlIiksMTA9PXluJiZOdClyZXR1cm4gSHIoTXI9bmV3IEh0KG9uKSxhaStNci5lKzEsX2kpO2lmKE5yPVN0cmluZyhvbiksWm49Im51bWJlciI9PXR5cGVvZiBvbil7aWYoMCpvbiE9MClyZXR1cm4gR3IoTXIsTnIsWm4seW4pO2lmKE1yLnM9MS9vbjwwPyhOcj1Oci5zbGlj''@;'; put 'put ''ZSgxKSwtMSk6MSxIdC5ERUJVRyYmTnIucmVwbGFjZSgvXjBcLjAqfFwuLywiIikubGVuZ3RoPjE1KXRocm93IEVycm9yKE0rb24pfWVsc2UgTXIucz00NT09PU5yLmNoYXJDb2RlQXQoMCk/KE5yPU5yLnNsaWNlKDEpLC0xKToxO2Zvcihwbj12dC5zbGljZSgwLHluKSxkcj1Vcj0wLHNyPU5y''@;'; put 'put ''Lmxlbmd0aDtVcjxzcjtVcisrKWlmKHBuLmluZGV4T2YocHI9TnIuY2hhckF0KFVyKSk8MCl7aWYoIi4iPT1wcil7aWYoVXI+ZHIpe2RyPXNyO2NvbnRpbnVlfX1lbHNlIGlmKCEkbiYmKE5yPT1Oci50b1VwcGVyQ2FzZSgpJiYoTnI9TnIudG9Mb3dlckNhc2UoKSl8fE5yPT1Oci50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpJiYoTnI9TnIudG9VcHBlckNhc2UoKSkpKXskbj0hMCxVcj0tMSxkcj0wO2NvbnRpbnVlfXJldHVybiBHcihNcixTdHJpbmcob24pLFpuLHluKX1abj0hMSwoZHI9KE5yPUNyKE5yLHluLDEwLE1yLnMpKS5pbmRleE9mKCIuIikpPi0xP05yPU5yLnJlcGxhY2UoIi4iLCIiKTpkcj1O''@;'; put 'put ''ci5sZW5ndGh9Zm9yKFVyPTA7NDg9PT1Oci5jaGFyQ29kZUF0KFVyKTtVcisrKTtmb3Ioc3I9TnIubGVuZ3RoOzQ4PT09TnIuY2hhckNvZGVBdCgtLXNyKTspO2lmKE5yPU5yLnNsaWNlKFVyLCsrc3IpKXtpZihzci09VXIsWm4mJkh0LkRFQlVHJiZzcj4xNSYmKG9uPnJlfHxvbiE9PWYob24p''@;'; put 'put ''KSl0aHJvdyBFcnJvcihNK01yLnMqb24pO2lmKChkcj1kci1Vci0xKT5JcilNci5jPU1yLmU9bnVsbDtlbHNlIGlmKGRyPEpuKU1yLmM9W01yLmU9MF07ZWxzZXtpZihNci5lPWRyLE1yLmM9W10sVXI9KGRyKzEpJVosZHI8MCYmKFVyKz1aKSxVcjxzcil7Zm9yKFVyJiZNci5jLnB1c2goK05y''@;'; put 'put ''LnNsaWNlKDAsVXIpKSxzci09WjtVcjxzcjspTXIuYy5wdXNoKCtOci5zbGljZShVcixVcis9WikpO1VyPVotKE5yPU5yLnNsaWNlKFVyKSkubGVuZ3RofWVsc2UgVXItPXNyO2Zvcig7VXItLTtOcis9IjAiKTtNci5jLnB1c2goK05yKX19ZWxzZSBNci5jPVtNci5lPTBdfWZ1bmN0aW9uIEhu''@;'; put 'put ''KG9uLHluLHBuLHByKXt2YXIgJG4sZHIsVXIsWm4sc3I7aWYobnVsbD09cG4/cG49X2k6ZHQocG4sMCw4KSwhb24uYylyZXR1cm4gb24udG9TdHJpbmcoKTtpZigkbj1vbi5jWzBdLFVyPW9uLmUsbnVsbD09eW4pc3I9cnQob24uYyksc3I9MT09cHJ8fDI9PXByJiYoVXI8PU9ufHxVcj49enIp''@;'; put 'put ''P3ZuKHNyLFVyKTpDbihzcixVciwiMCIpO2Vsc2UgaWYoZHI9KG9uPUhyKG5ldyBIdChvbikseW4scG4pKS5lLFpuPShzcj1ydChvbi5jKSkubGVuZ3RoLDE9PXByfHwyPT1wciYmKHluPD1kcnx8ZHI8PU9uKSl7Zm9yKDtabjx5bjtzcis9IjAiLFpuKyspO3NyPXZuKHNyLGRyKX1lbHNlIGlm''@;'; put 'put ''KHluLT1Vcixzcj1DbihzcixkciwiMCIpLGRyKzE+Wm4pe2lmKC0teW4+MClmb3Ioc3IrPSIuIjt5bi0tO3NyKz0iMCIpO31lbHNlIGlmKCh5bis9ZHItWm4pPjApZm9yKGRyKzE9PVpuJiYoc3IrPSIuIik7eW4tLTtzcis9IjAiKTtyZXR1cm4gb24uczwwJiYkbj8iLSIrc3I6c3J9ZnVuY3Rp''@;'; put 'put ''b24gdHIob24seW4pe2Zvcih2YXIgcG4scHIsJG49MSxkcj1uZXcgSHQob25bMF0pOyRuPG9uLmxlbmd0aDskbisrKSghKHByPW5ldyBIdChvblskbl0pKS5zfHwocG49cHQoZHIscHIpKT09PXlufHwwPT09cG4mJmRyLnM9PT15bikmJihkcj1wcik7cmV0dXJuIGRyfWZ1bmN0aW9uIGFyKG9u''@;'; put 'put ''LHluLHBuKXtmb3IodmFyIHByPTEsJG49eW4ubGVuZ3RoOyF5blstLSRuXTt5bi5wb3AoKSk7Zm9yKCRuPXluWzBdOyRuPj0xMDskbi89MTAscHIrKyk7cmV0dXJuKHBuPXByK3BuKlotMSk+SXI/b24uYz1vbi5lPW51bGw6cG48Sm4/b24uYz1bb24uZT0wXToob24uZT1wbixvbi5jPXluKSxv''@;'; put 'put ''bn1mdW5jdGlvbiBIcihvbix5bixwbixwcil7dmFyICRuLGRyLFVyLFpuLHNyLE5yLE1yLFpyPW9uLmMsYWE9Y2U7aWYoWnIpe2U6e2Zvcigkbj0xLFpuPVpyWzBdO1puPj0xMDtabi89MTAsJG4rKyk7aWYoKGRyPXluLSRuKTwwKWRyKz1aLHNyPVpyW05yPTBdLE1yPWYoc3IvYWFbJG4tKFVy''@;'; put 'put ''PXluKS0xXSUxMCk7ZWxzZSBpZigoTnI9aCgoZHIrMSkvWikpPj1aci5sZW5ndGgpe2lmKCFwcilicmVhayBlO2Zvcig7WnIubGVuZ3RoPD1Ocjtaci5wdXNoKDApKTtzcj1Ncj0wLCRuPTEsVXI9KGRyJT1aKS1aKzF9ZWxzZXtmb3Ioc3I9Wm49WnJbTnJdLCRuPTE7Wm4+PTEwO1puLz0xMCwk''@;'; put 'put ''bisrKTtNcj0oVXI9KGRyJT1aKS1aKyRuKTwwPzA6Zihzci9hYVskbi1Vci0xXSUxMCl9aWYocHI9cHJ8fHluPDB8fG51bGwhPVpyW05yKzFdfHwoVXI8MD9zcjpzciVhYVskbi1Vci0xXSkscHI9cG48ND8oTXJ8fHByKSYmKDA9PXBufHxwbj09KG9uLnM8MD8zOjIpKTpNcj41fHw1PT1NciYm''@;'; put 'put ''KDQ9PXBufHxwcnx8Nj09cG4mJihkcj4wP1VyPjA/c3IvYWFbJG4tVXJdOjA6WnJbTnItMV0pJTEwJjF8fHBuPT0ob24uczwwPzg6NykpLHluPDF8fCFaclswXSlyZXR1cm4gWnIubGVuZ3RoPTAscHI/KFpyWzBdPWFhWyhaLSh5bi09b24uZSsxKSVaKSVaXSxvbi5lPS15bnx8MCk6WnJbMF09''@;'; put 'put ''b24uZT0wLG9uO2lmKDA9PWRyPyhaci5sZW5ndGg9TnIsWm49MSxOci0tKTooWnIubGVuZ3RoPU5yKzEsWm49YWFbWi1kcl0sWnJbTnJdPVVyPjA/Zihzci9hYVskbi1Vcl0lYWFbVXJdKSpabjowKSxwcilmb3IoOzspe2lmKDA9PU5yKXtmb3IoZHI9MSxVcj1aclswXTtVcj49MTA7VXIvPTEw''@;'; put 'put ''LGRyKyspO2ZvcihVcj1aclswXSs9Wm4sWm49MTtVcj49MTA7VXIvPTEwLFpuKyspO2RyIT1abiYmKG9uLmUrKyxaclswXT09RCYmKFpyWzBdPTEpKTticmVha31pZihacltOcl0rPVpuLFpyW05yXSE9RClicmVhaztacltOci0tXT0wLFpuPTF9Zm9yKGRyPVpyLmxlbmd0aDswPT09WnJbLS1k''@;'; put 'put ''cl07WnIucG9wKCkpO31vbi5lPklyP29uLmM9b24uZT1udWxsOm9uLmU8Sm4mJihvbi5jPVtvbi5lPTBdKX1yZXR1cm4gb259ZnVuY3Rpb24gcXIob24pe3ZhciB5bixwbj1vbi5lO3JldHVybiBudWxsPT09cG4/b24udG9TdHJpbmcoKTooeW49cnQob24uYykseW49cG48PU9ufHxwbj49enI/''@;'; put 'put ''dm4oeW4scG4pOkNuKHluLHBuLCIwIiksb24uczwwPyItIit5bjp5bil9cmV0dXJuIEh0LmNsb25lPUJlLEh0LlJPVU5EX1VQPTAsSHQuUk9VTkRfRE9XTj0xLEh0LlJPVU5EX0NFSUw9MixIdC5ST1VORF9GTE9PUj0zLEh0LlJPVU5EX0hBTEZfVVA9NCxIdC5ST1VORF9IQUxGX0RPV049NSxI''@;'; put 'put ''dC5ST1VORF9IQUxGX0VWRU49NixIdC5ST1VORF9IQUxGX0NFSUw9NyxIdC5ST1VORF9IQUxGX0ZMT09SPTgsSHQuRVVDTElEPTksSHQuY29uZmlnPUh0LnNldD1mdW5jdGlvbihvbil7dmFyIHluLHBuO2lmKG51bGwhPW9uKXtpZigib2JqZWN0IiE9dHlwZW9mIG9uKXRocm93IEVycm9yKHYr''@;'; put 'put ''Ik9iamVjdCBleHBlY3RlZDogIitvbik7aWYob24uaGFzT3duUHJvcGVydHkoeW49IkRFQ0lNQUxfUExBQ0VTIikmJihkdChwbj1vblt5bl0sMCxFZSx5biksYWk9cG4pLG9uLmhhc093blByb3BlcnR5KHluPSJST1VORElOR19NT0RFIikmJihkdChwbj1vblt5bl0sMCw4LHluKSxfaT1wbiks''@;'; put 'put ''b24uaGFzT3duUHJvcGVydHkoeW49IkVYUE9ORU5USUFMX0FUIikmJigocG49b25beW5dKSYmcG4ucG9wPyhkdChwblswXSwtRWUsMCx5biksZHQocG5bMV0sMCxFZSx5biksT249cG5bMF0senI9cG5bMV0pOihkdChwbiwtRWUsRWUseW4pLE9uPS0oenI9cG48MD8tcG46cG4pKSksb24uaGFz''@;'; put 'put ''T3duUHJvcGVydHkoeW49IlJBTkdFIikpaWYoKHBuPW9uW3luXSkmJnBuLnBvcClkdChwblswXSwtRWUsLTEseW4pLGR0KHBuWzFdLDEsRWUseW4pLEpuPXBuWzBdLElyPXBuWzFdO2Vsc2V7aWYoZHQocG4sLUVlLEVlLHluKSwhcG4pdGhyb3cgRXJyb3Iodit5bisiIGNhbm5vdCBiZSB6ZXJv''@;'; put 'put ''OiAiK3BuKTtKbj0tKElyPXBuPDA/LXBuOnBuKX1pZihvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iQ1JZUFRPIikpe2lmKChwbj1vblt5bl0pIT09ISFwbil0aHJvdyBFcnJvcih2K3luKyIgbm90IHRydWUgb3IgZmFsc2U6ICIrcG4pO2lmKHBuKXtpZighKHR5cGVvZiBjcnlwdG88InUiJiZjcnlw''@;'; put 'put ''dG8mJihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzfHxjcnlwdG8ucmFuZG9tQnl0ZXMpKSl0aHJvdyAkcj0hcG4sRXJyb3IodisiY3J5cHRvIHVuYXZhaWxhYmxlIik7JHI9cG59ZWxzZSAkcj1wbn1pZihvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iTU9EVUxPX01PREUiKSYmKGR0KHBuPW9uW3luXSww''@;'; put 'put ''LDkseW4pLHdpPXBuKSxvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iUE9XX1BSRUNJU0lPTiIpJiYoZHQocG49b25beW5dLDAsRWUseW4pLGVhPXBuKSxvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iRk9STUFUIikpe2lmKCJvYmplY3QiIT10eXBlb2YocG49b25beW5dKSl0aHJvdyBFcnJvcih2K3luKyIg''@;'; put 'put ''bm90IGFuIG9iamVjdDogIitwbik7ZmE9cG59aWYob24uaGFzT3duUHJvcGVydHkoeW49IkFMUEhBQkVUIikpe2lmKCJzdHJpbmciIT10eXBlb2YocG49b25beW5dKXx8L14uPyR8WytcLS5cc118KC4pLipcMS8udGVzdChwbikpdGhyb3cgRXJyb3Iodit5bisiIGludmFsaWQ6ICIrcG4pO050''@;'; put 'put ''PSIwMTIzNDU2Nzg5Ij09cG4uc2xpY2UoMCwxMCksdnQ9cG59fXJldHVybntERUNJTUFMX1BMQUNFUzphaSxST1VORElOR19NT0RFOl9pLEVYUE9ORU5USUFMX0FUOltPbix6cl0sUkFOR0U6W0puLElyXSxDUllQVE86JHIsTU9EVUxPX01PREU6d2ksUE9XX1BSRUNJU0lPTjplYSxGT1JNQVQ6''@;'; put 'put ''ZmEsQUxQSEFCRVQ6dnR9fSxIdC5pc0JpZ051bWJlcj1mdW5jdGlvbihvbil7aWYoIW9ufHwhMCE9PW9uLl9pc0JpZ051bWJlcilyZXR1cm4hMTtpZighSHQuREVCVUcpcmV0dXJuITA7dmFyIHluLHBuLHByPW9uLmMsJG49b24uZSxkcj1vbi5zO2U6aWYoIltvYmplY3QgQXJyYXldIj09e30u''@;'; put 'put ''dG9TdHJpbmcuY2FsbChwcikpe2lmKCgxPT09ZHJ8fC0xPT09ZHIpJiYkbj49LUVlJiYkbjw9RWUmJiRuPT09Zigkbikpe2lmKDA9PT1wclswXSl7aWYoMD09PSRuJiYxPT09cHIubGVuZ3RoKXJldHVybiEwO2JyZWFrIGV9aWYoKHluPSgkbisxKSVaKTwxJiYoeW4rPVopLFN0cmluZyhwclsw''@;'; put 'put ''XSkubGVuZ3RoPT15bil7Zm9yKHluPTA7eW48cHIubGVuZ3RoO3luKyspaWYoKHBuPXByW3luXSk8MHx8cG4+PUR8fHBuIT09ZihwbikpYnJlYWsgZTtpZigwIT09cG4pcmV0dXJuITB9fX1lbHNlIGlmKG51bGw9PT1wciYmbnVsbD09PSRuJiYobnVsbD09PWRyfHwxPT09ZHJ8fC0xPT09ZHIp''@;'; put 'put ''KXJldHVybiEwO3Rocm93IEVycm9yKHYrIkludmFsaWQgQmlnTnVtYmVyOiAiK29uKX0sSHQubWF4aW11bT1IdC5tYXg9ZnVuY3Rpb24oKXtyZXR1cm4gdHIoYXJndW1lbnRzLC0xKX0sSHQubWluaW11bT1IdC5taW49ZnVuY3Rpb24oKXtyZXR1cm4gdHIoYXJndW1lbnRzLDEpfSxIdC5yYW5k''@;'; put 'put ''b209KG9uPTkwMDcxOTkyNTQ3NDA5OTIseW49TWF0aC5yYW5kb20oKSpvbiYyMDk3MTUxP2Z1bmN0aW9uKCl7cmV0dXJuIGYoTWF0aC5yYW5kb20oKSpvbil9OmZ1bmN0aW9uKCl7cmV0dXJuIDgzODg2MDgqKDEwNzM3NDE4MjQqTWF0aC5yYW5kb20oKXwwKSsoODM4ODYwOCpNYXRoLnJhbmRv''@;'; put 'put ''bSgpfDApfSxmdW5jdGlvbihwbil7dmFyIHByLCRuLGRyLFVyLFpuLHNyPTAsTnI9W10sTXI9bmV3IEh0KEduKTtpZihudWxsPT1wbj9wbj1haTpkdChwbiwwLEVlKSxVcj1oKHBuL1opLCRyKWlmKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpe2Zvcihwcj1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVz''@;'; put 'put ''KG5ldyBVaW50MzJBcnJheShVcio9MikpO3NyPFVyOykoWm49MTMxMDcyKnByW3NyXSsocHJbc3IrMV0+Pj4xMSkpPj05ZTE1Pygkbj1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgyKSkscHJbc3JdPSRuWzBdLHByW3NyKzFdPSRuWzFdKTooTnIucHVzaChabiUxZTE0''@;'; put 'put ''KSxzcis9Mik7c3I9VXIvMn1lbHNle2lmKCFjcnlwdG8ucmFuZG9tQnl0ZXMpdGhyb3cgJHI9ITEsRXJyb3IodisiY3J5cHRvIHVuYXZhaWxhYmxlIik7Zm9yKHByPWNyeXB0by5yYW5kb21CeXRlcyhVcio9Nyk7c3I8VXI7KShabj0yODE0NzQ5NzY3MTA2NTYqKDMxJnByW3NyXSkrMTA5OTUx''@;'; put 'put ''MTYyNzc3NipwcltzcisxXSs0Mjk0OTY3Mjk2KnByW3NyKzJdKzE2Nzc3MjE2KnByW3NyKzNdKyhwcltzcis0XTw8MTYpKyhwcltzcis1XTw8OCkrcHJbc3IrNl0pPj05ZTE1P2NyeXB0by5yYW5kb21CeXRlcyg3KS5jb3B5KHByLHNyKTooTnIucHVzaChabiUxZTE0KSxzcis9Nyk7c3I9VXIv''@;'; put 'put ''N31pZighJHIpZm9yKDtzcjxVcjspKFpuPXluKCkpPDllMTUmJihOcltzcisrXT1abiUxZTE0KTtmb3IoVXI9TnJbLS1zcl0scG4lPVosVXImJnBuJiYoTnJbc3JdPWYoVXIvKFpuPWNlW1otcG5dKSkqWm4pOzA9PT1Ocltzcl07TnIucG9wKCksc3ItLSk7aWYoc3I8MClOcj1bZHI9MF07ZWxz''@;'; put 'put ''ZXtmb3IoZHI9LTE7MD09PU5yWzBdO05yLnNwbGljZSgwLDEpLGRyLT1aKTtmb3Ioc3I9MSxabj1OclswXTtabj49MTA7Wm4vPTEwLHNyKyspO3NyPFomJihkci09Wi1zcil9cmV0dXJuIE1yLmU9ZHIsTXIuYz1OcixNcn0pLEh0LnN1bT1mdW5jdGlvbigpe2Zvcih2YXIgb249MSx5bj1hcmd1''@;'; put 'put ''bWVudHMscG49bmV3IEh0KHluWzBdKTtvbjx5bi5sZW5ndGg7KXBuPXBuLnBsdXMoeW5bb24rK10pO3JldHVybiBwbn0sQ3I9ZnVuY3Rpb24oKXt2YXIgb249IjAxMjM0NTY3ODkiO2Z1bmN0aW9uIHluKHBuLHByLCRuLGRyKXtmb3IodmFyIFVyLHNyLFpuPVswXSxOcj0wLE1yPXBuLmxlbmd0''@;'; put 'put ''aDtOcjxNcjspe2Zvcihzcj1abi5sZW5ndGg7c3ItLTtabltzcl0qPXByKTtmb3IoWm5bMF0rPWRyLmluZGV4T2YocG4uY2hhckF0KE5yKyspKSxVcj0wO1VyPFpuLmxlbmd0aDtVcisrKVpuW1VyXT4kbi0xJiYobnVsbD09Wm5bVXIrMV0mJihabltVcisxXT0wKSxabltVcisxXSs9Wm5bVXJd''@;'; put 'put ''LyRufDAsWm5bVXJdJT0kbil9cmV0dXJuIFpuLnJldmVyc2UoKX1yZXR1cm4gZnVuY3Rpb24ocG4scHIsJG4sZHIsVXIpe3ZhciBabixzcixOcixNcixacixhYSxCYSxJbyxabz1wbi5pbmRleE9mKCIuIikscHM9YWksTW89X2k7Zm9yKFpvPj0wJiYoTXI9ZWEsZWE9MCxwbj1wbi5yZXBsYWNl''@;'; put 'put ''KCIuIiwiIiksYWE9KElvPW5ldyBIdChwcikpLnBvdyhwbi5sZW5ndGgtWm8pLGVhPU1yLElvLmM9eW4oQ24ocnQoYWEuYyksYWEuZSwiMCIpLDEwLCRuLG9uKSxJby5lPUlvLmMubGVuZ3RoKSxOcj1Ncj0oQmE9eW4ocG4scHIsJG4sVXI/KFpuPXZ0LG9uKTooWm49b24sdnQpKSkubGVuZ3Ro''@;'; put 'put ''OzA9PUJhWy0tTXJdO0JhLnBvcCgpKTtpZighQmFbMF0pcmV0dXJuIFpuLmNoYXJBdCgwKTtpZihabzwwPy0tTnI6KGFhLmM9QmEsYWEuZT1OcixhYS5zPWRyLEJhPShhYT1NbihhYSxJbyxwcyxNbywkbikpLmMsWnI9YWEucixOcj1hYS5lKSxabz1CYVtzcj1OcitwcysxXSxNcj0kbi8yLFpy''@;'; put 'put ''PVpyfHxzcjwwfHxudWxsIT1CYVtzcisxXSxacj1Nbzw0PyhudWxsIT1ab3x8WnIpJiYoMD09TW98fE1vPT0oYWEuczwwPzM6MikpOlpvPk1yfHxabz09TXImJig0PT1Nb3x8WnJ8fDY9PU1vJiYxJkJhW3NyLTFdfHxNbz09KGFhLnM8MD84OjcpKSxzcjwxfHwhQmFbMF0pcG49WnI/Q24oWm4u''@;'; put 'put ''Y2hhckF0KDEpLC1wcyxabi5jaGFyQXQoMCkpOlpuLmNoYXJBdCgwKTtlbHNle2lmKEJhLmxlbmd0aD1zcixacilmb3IoLS0kbjsrK0JhWy0tc3JdPiRuOylCYVtzcl09MCxzcnx8KCsrTnIsQmE9WzFdLmNvbmNhdChCYSkpO2ZvcihNcj1CYS5sZW5ndGg7IUJhWy0tTXJdOyk7Zm9yKFpvPTAs''@;'; put 'put ''cG49IiI7Wm88PU1yO3BuKz1abi5jaGFyQXQoQmFbWm8rK10pKTtwbj1DbihwbixOcixabi5jaGFyQXQoMCkpfXJldHVybiBwbn19KCksTW49ZnVuY3Rpb24oKXtmdW5jdGlvbiBvbihwciwkbixkcil7dmFyIFVyLFpuLHNyLE5yLE1yPTAsWnI9cHIubGVuZ3RoLGFhPSRuJWJlLEJhPSRuL2Jl''@;'; put 'put ''fDA7Zm9yKHByPXByLnNsaWNlKCk7WnItLTspTXI9KChabj1hYSooc3I9cHJbWnJdJWJlKSsoVXI9QmEqc3IrKE5yPXByW1pyXS9iZXwwKSphYSklYmUqYmUrTXIpL2RyfDApKyhVci9iZXwwKStCYSpOcixwcltacl09Wm4lZHI7cmV0dXJuIE1yJiYocHI9W01yXS5jb25jYXQocHIpKSxwcn1m''@;'; put 'put ''dW5jdGlvbiB5bihwciwkbixkcixVcil7dmFyIFpuLHNyO2lmKGRyIT1Vcilzcj1kcj5Vcj8xOi0xO2Vsc2UgZm9yKFpuPXNyPTA7Wm48ZHI7Wm4rKylpZihwcltabl0hPSRuW1puXSl7c3I9cHJbWm5dPiRuW1puXT8xOi0xO2JyZWFrfXJldHVybiBzcn1mdW5jdGlvbiBwbihwciwkbixkcixV''@;'; put 'put ''cil7Zm9yKHZhciBabj0wO2RyLS07KXByW2RyXS09Wm4scHJbZHJdPShabj1wcltkcl08JG5bZHJdPzE6MCkqVXIrcHJbZHJdLSRuW2RyXTtmb3IoOyFwclswXSYmcHIubGVuZ3RoPjE7cHIuc3BsaWNlKDAsMSkpO31yZXR1cm4gZnVuY3Rpb24ocHIsJG4sZHIsVXIsWm4pe3ZhciBzcixOcixN''@;'; put 'put ''cixacixhYSxCYSxJbyxabyxwcyxNbyxocyxuYyxRbyxNMyxhZCxVcyxKYyxxcz1wci5zPT0kbi5zPzE6LTEsQmw9cHIuYyxlcz0kbi5jO2lmKCEoQmwmJkJsWzBdJiZlcyYmZXNbMF0pKXJldHVybiBuZXcgSHQocHIucyYmJG4ucyYmKEJsPyFlc3x8QmxbMF0hPWVzWzBdOmVzKT9CbCYmMD09''@;'; put 'put ''QmxbMF18fCFlcz8wKnFzOnFzLzA6TmFOKTtmb3IocHM9KFpvPW5ldyBIdChxcykpLmM9W10scXM9ZHIrKE5yPXByLmUtJG4uZSkrMSxabnx8KFpuPUQsTnI9cWUocHIuZS9aKS1xZSgkbi5lL1opLHFzPXFzL1p8MCksTXI9MDtlc1tNcl09PShCbFtNcl18fDApO01yKyspO2lmKGVzW01yXT4o''@;'; put 'put ''QmxbTXJdfHwwKSYmTnItLSxxczwwKXBzLnB1c2goMSksWnI9ITA7ZWxzZXtmb3IoTTM9QmwubGVuZ3RoLFVzPWVzLmxlbmd0aCxNcj0wLHFzKz0yLChhYT1mKFpuLyhlc1swXSsxKSkpPjEmJihlcz1vbihlcyxhYSxabiksQmw9b24oQmwsYWEsWm4pLFVzPWVzLmxlbmd0aCxNMz1CbC5sZW5n''@;'; put 'put ''dGgpLFFvPVVzLGhzPShNbz1CbC5zbGljZSgwLFVzKSkubGVuZ3RoO2hzPFVzO01vW2hzKytdPTApO0pjPWVzLnNsaWNlKCksSmM9WzBdLmNvbmNhdChKYyksYWQ9ZXNbMF0sZXNbMV0+PVpuLzImJmFkKys7ZG97aWYoYWE9MCwoc3I9eW4oZXMsTW8sVXMsaHMpKTwwKXtpZihuYz1Nb1swXSxV''@;'; put 'put ''cyE9aHMmJihuYz1uYypabisoTW9bMV18fDApKSwoYWE9ZihuYy9hZCkpPjEpZm9yKGFhPj1abiYmKGFhPVpuLTEpLElvPShCYT1vbihlcyxhYSxabikpLmxlbmd0aCxocz1Nby5sZW5ndGg7MT09eW4oQmEsTW8sSW8saHMpOylhYS0tLHBuKEJhLFVzPElvP0pjOmVzLElvLFpuKSxJbz1CYS5s''@;'; put 'put ''ZW5ndGgsc3I9MTtlbHNlIDA9PWFhJiYoc3I9YWE9MSksSW89KEJhPWVzLnNsaWNlKCkpLmxlbmd0aDtpZihJbzxocyYmKEJhPVswXS5jb25jYXQoQmEpKSxwbihNbyxCYSxocyxabiksaHM9TW8ubGVuZ3RoLC0xPT1zcilmb3IoO3luKGVzLE1vLFVzLGhzKTwxOylhYSsrLHBuKE1vLFVzPGhz''@;'; put 'put ''P0pjOmVzLGhzLFpuKSxocz1Nby5sZW5ndGh9ZWxzZSAwPT09c3ImJihhYSsrLE1vPVswXSk7cHNbTXIrK109YWEsTW9bMF0/TW9baHMrK109QmxbUW9dfHwwOihNbz1bQmxbUW9dXSxocz0xKX13aGlsZSgoUW8rKzxNM3x8bnVsbCE9TW9bMF0pJiZxcy0tKTtacj1udWxsIT1Nb1swXSxwc1sw''@;'; put 'put ''XXx8cHMuc3BsaWNlKDAsMSl9aWYoWm49PUQpe2ZvcihNcj0xLHFzPXBzWzBdO3FzPj0xMDtxcy89MTAsTXIrKyk7SHIoWm8sZHIrKFpvLmU9TXIrTnIqWi0xKSsxLFVyLFpyKX1lbHNlIFpvLmU9TnIsWm8ucj0rWnI7cmV0dXJuIFpvfX0oKSxHcj1mdW5jdGlvbigpe3ZhciBvbj0vXigtPykw''@;'; put 'put ''KFt4Ym9dKSg/PVx3W1x3Ll0qJCkvaSx5bj0vXihbXi5dKylcLiQvLHBuPS9eXC4oW14uXSspJC8scHI9L14tPyhJbmZpbml0eXxOYU4pJC8sJG49L15ccypcKyg/PVtcdy5dKXxeXHMrfFxzKyQvZztyZXR1cm4gZnVuY3Rpb24oZHIsVXIsWm4sc3Ipe3ZhciBOcixNcj1abj9VcjpVci5yZXBs''@;'; put 'put ''YWNlKCRuLCIiKTtpZihwci50ZXN0KE1yKSlkci5zPWlzTmFOKE1yKT9udWxsOk1yPDA/LTE6MTtlbHNle2lmKCFabiYmKE1yPU1yLnJlcGxhY2Uob24sZnVuY3Rpb24oWnIsYWEsQmEpe3JldHVybiBOcj0ieCI9PShCYT1CYS50b0xvd2VyQ2FzZSgpKT8xNjoiYiI9PUJhPzI6OCxzciYmc3Ih''@;'; put 'put ''PU5yP1pyOmFhfSksc3ImJihOcj1zcixNcj1Nci5yZXBsYWNlKHluLCIkMSIpLnJlcGxhY2UocG4sIjAuJDEiKSksVXIhPU1yKSlyZXR1cm4gbmV3IEh0KE1yLE5yKTtpZihIdC5ERUJVRyl0aHJvdyBFcnJvcih2KyJOb3QgYSIrKHNyPyIgYmFzZSAiK3NyOiIiKSsiIG51bWJlcjogIitVcik7''@;'; put 'put ''ZHIucz1udWxsfWRyLmM9ZHIuZT1udWxsfX0oKSxtci5hYnNvbHV0ZVZhbHVlPW1yLmFicz1mdW5jdGlvbigpe3ZhciBvbj1uZXcgSHQodGhpcyk7cmV0dXJuIG9uLnM8MCYmKG9uLnM9MSksb259LG1yLmNvbXBhcmVkVG89ZnVuY3Rpb24ob24seW4pe3JldHVybiBwdCh0aGlzLG5ldyBIdChv''@;'; put 'put ''bix5bikpfSxtci5kZWNpbWFsUGxhY2VzPW1yLmRwPWZ1bmN0aW9uKG9uLHluKXt2YXIgcG4scHIsJG47aWYobnVsbCE9b24pcmV0dXJuIGR0KG9uLDAsRWUpLG51bGw9PXluP3luPV9pOmR0KHluLDAsOCksSHIobmV3IEh0KHRoaXMpLG9uK3RoaXMuZSsxLHluKTtpZighKHBuPXRoaXMuYykp''@;'; put 'put ''cmV0dXJuIG51bGw7aWYocHI9KCgkbj1wbi5sZW5ndGgtMSktcWUodGhpcy5lL1opKSpaLCRuPXBuWyRuXSlmb3IoOyRuJTEwPT0wOyRuLz0xMCxwci0tKTtyZXR1cm4gcHI8MCYmKHByPTApLHByfSxtci5kaXZpZGVkQnk9bXIuZGl2PWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gTW4odGhpcyxu''@;'; put 'put ''ZXcgSHQob24seW4pLGFpLF9pKX0sbXIuZGl2aWRlZFRvSW50ZWdlckJ5PW1yLmlkaXY9ZnVuY3Rpb24ob24seW4pe3JldHVybiBNbih0aGlzLG5ldyBIdChvbix5biksMCwxKX0sbXIuZXhwb25lbnRpYXRlZEJ5PW1yLnBvdz1mdW5jdGlvbihvbix5bil7dmFyIHBuLHByLCRuLGRyLFpuLHNy''@;'; put 'put ''LE5yLE1yLFpyPXRoaXM7aWYoKG9uPW5ldyBIdChvbikpLmMmJiFvbi5pc0ludGVnZXIoKSl0aHJvdyBFcnJvcih2KyJFeHBvbmVudCBub3QgYW4gaW50ZWdlcjogIitxcihvbikpO2lmKG51bGwhPXluJiYoeW49bmV3IEh0KHluKSksWm49b24uZT4xNCwhWnIuY3x8IVpyLmNbMF18fDE9PVpy''@;'; put 'put ''LmNbMF0mJiFaci5lJiYxPT1aci5jLmxlbmd0aHx8IW9uLmN8fCFvbi5jWzBdKXJldHVybiBNcj1uZXcgSHQoTWF0aC5wb3coK3FyKFpyKSxabj9vbi5zKigyLUp0KG9uKSk6K3FyKG9uKSkpLHluP01yLm1vZCh5bik6TXI7aWYoc3I9b24uczwwLHluKXtpZih5bi5jPyF5bi5jWzBdOiF5bi5z''@;'; put 'put ''KXJldHVybiBuZXcgSHQoTmFOKTsocHI9IXNyJiZaci5pc0ludGVnZXIoKSYmeW4uaXNJbnRlZ2VyKCkpJiYoWnI9WnIubW9kKHluKSl9ZWxzZXtpZihvbi5lPjkmJihaci5lPjB8fFpyLmU8LTF8fCgwPT1aci5lP1pyLmNbMF0+MXx8Wm4mJlpyLmNbMV0+PTI0ZTc6WnIuY1swXTw4ZTEzfHxa''@;'; put 'put ''biYmWnIuY1swXTw9OTk5OTk3NWU3KSkpcmV0dXJuIGRyPVpyLnM8MCYmSnQob24pPy0wOjAsWnIuZT4tMSYmKGRyPTEvZHIpLG5ldyBIdChzcj8xL2RyOmRyKTtlYSYmKGRyPWgoZWEvWisyKSl9Zm9yKFpuPyhwbj1uZXcgSHQoLjUpLHNyJiYob24ucz0xKSxOcj1KdChvbikpOk5yPSgkbj1N''@;'; put 'put ''YXRoLmFicygrcXIob24pKSklMixNcj1uZXcgSHQoR24pOzspe2lmKE5yKXtpZighKE1yPU1yLnRpbWVzKFpyKSkuYylicmVhaztkcj9Nci5jLmxlbmd0aD5kciYmKE1yLmMubGVuZ3RoPWRyKTpwciYmKE1yPU1yLm1vZCh5bikpfWlmKCRuKXtpZigwPT09KCRuPWYoJG4vMikpKWJyZWFrO05y''@;'; put 'put ''PSRuJTJ9ZWxzZSBpZihIcihvbj1vbi50aW1lcyhwbiksb24uZSsxLDEpLG9uLmU+MTQpTnI9SnQob24pO2Vsc2V7aWYoMD09KCRuPStxcihvbikpKWJyZWFrO05yPSRuJTJ9WnI9WnIudGltZXMoWnIpLGRyP1pyLmMmJlpyLmMubGVuZ3RoPmRyJiYoWnIuYy5sZW5ndGg9ZHIpOnByJiYoWnI9''@;'; put 'put ''WnIubW9kKHluKSl9cmV0dXJuIHByP01yOihzciYmKE1yPUduLmRpdihNcikpLHluP01yLm1vZCh5bik6ZHI/SHIoTXIsZWEsX2ksdm9pZCAwKTpNcil9LG1yLmludGVnZXJWYWx1ZT1mdW5jdGlvbihvbil7dmFyIHluPW5ldyBIdCh0aGlzKTtyZXR1cm4gbnVsbD09b24/b249X2k6ZHQob24s''@;'; put 'put ''MCw4KSxIcih5bix5bi5lKzEsb24pfSxtci5pc0VxdWFsVG89bXIuZXE9ZnVuY3Rpb24ob24seW4pe3JldHVybiAwPT09cHQodGhpcyxuZXcgSHQob24seW4pKX0sbXIuaXNGaW5pdGU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuY30sbXIuaXNHcmVhdGVyVGhhbj1tci5ndD1mdW5jdGlvbihv''@;'; put 'put ''bix5bil7cmV0dXJuIHB0KHRoaXMsbmV3IEh0KG9uLHluKSk+MH0sbXIuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbz1tci5ndGU9ZnVuY3Rpb24ob24seW4pe3JldHVybiAxPT09KHluPXB0KHRoaXMsbmV3IEh0KG9uLHluKSkpfHwwPT09eW59LG1yLmlzSW50ZWdlcj1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biEhdGhpcy5jJiZxZSh0aGlzLmUvWik+dGhpcy5jLmxlbmd0aC0yfSxtci5pc0xlc3NUaGFuPW1yLmx0PWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gcHQodGhpcyxuZXcgSHQob24seW4pKTwwfSxtci5pc0xlc3NUaGFuT3JFcXVhbFRvPW1yLmx0ZT1mdW5jdGlvbihvbix5bil7cmV0dXJuLTE9''@;'; put 'put ''PT0oeW49cHQodGhpcyxuZXcgSHQob24seW4pKSl8fDA9PT15bn0sbXIuaXNOYU49ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5zfSxtci5pc05lZ2F0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuczwwfSxtci5pc1Bvc2l0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucz4wfSxtci5pc1pl''@;'; put 'put ''cm89ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYyYmMD09dGhpcy5jWzBdfSxtci5taW51cz1mdW5jdGlvbihvbix5bil7dmFyIHBuLHByLCRuLGRyLFVyPXRoaXMsWm49VXIucztpZih5bj0ob249bmV3IEh0KG9uLHluKSkucywhWm58fCF5bilyZXR1cm4gbmV3IEh0KE5hTik7aWYoWm4hPXlu''@;'; put 'put ''KXJldHVybiBvbi5zPS15bixVci5wbHVzKG9uKTt2YXIgc3I9VXIuZS9aLE5yPW9uLmUvWixNcj1Vci5jLFpyPW9uLmM7aWYoIXNyfHwhTnIpe2lmKCFNcnx8IVpyKXJldHVybiBNcj8ob24ucz0teW4sb24pOm5ldyBIdChacj9VcjpOYU4pO2lmKCFNclswXXx8IVpyWzBdKXJldHVybiBaclsw''@;'; put 'put ''XT8ob24ucz0teW4sb24pOm5ldyBIdChNclswXT9VcjozPT1faT8tMDowKX1pZihzcj1xZShzciksTnI9cWUoTnIpLE1yPU1yLnNsaWNlKCksWm49c3ItTnIpe2ZvcigoZHI9Wm48MCk/KFpuPS1abiwkbj1Ncik6KE5yPXNyLCRuPVpyKSwkbi5yZXZlcnNlKCkseW49Wm47eW4tLTskbi5wdXNo''@;'; put 'put ''KDApKTskbi5yZXZlcnNlKCl9ZWxzZSBmb3IocHI9KGRyPShabj1Nci5sZW5ndGgpPCh5bj1aci5sZW5ndGgpKT9abjp5bixabj15bj0wO3luPHByO3luKyspaWYoTXJbeW5dIT1aclt5bl0pe2RyPU1yW3luXTxaclt5bl07YnJlYWt9aWYoZHImJigkbj1NcixNcj1acixacj0kbixvbi5zPS1v''@;'; put 'put ''bi5zKSwoeW49KHByPVpyLmxlbmd0aCktKHBuPU1yLmxlbmd0aCkpPjApZm9yKDt5bi0tO01yW3BuKytdPTApO2Zvcih5bj1ELTE7cHI+Wm47KXtpZihNclstLXByXTxacltwcl0pe2Zvcihwbj1wcjtwbiYmIU1yWy0tcG5dO01yW3BuXT15bik7LS1Ncltwbl0sTXJbcHJdKz1EfU1yW3ByXS09''@;'; put 'put ''WnJbcHJdfWZvcig7MD09TXJbMF07TXIuc3BsaWNlKDAsMSksLS1Ocik7cmV0dXJuIE1yWzBdP2FyKG9uLE1yLE5yKToob24ucz0zPT1faT8tMToxLG9uLmM9W29uLmU9MF0sb24pfSxtci5tb2R1bG89bXIubW9kPWZ1bmN0aW9uKG9uLHluKXt2YXIgcG4scHIsJG49dGhpcztyZXR1cm4gb249''@;'; put 'put ''bmV3IEh0KG9uLHluKSwhJG4uY3x8IW9uLnN8fG9uLmMmJiFvbi5jWzBdP25ldyBIdChOYU4pOiFvbi5jfHwkbi5jJiYhJG4uY1swXT9uZXcgSHQoJG4pOig5PT13aT8ocHI9b24ucyxvbi5zPTEscG49TW4oJG4sb24sMCwzKSxvbi5zPXByLHBuLnMqPXByKTpwbj1NbigkbixvbiwwLHdpKSwh''@;'; put 'put ''KG9uPSRuLm1pbnVzKHBuLnRpbWVzKG9uKSkpLmNbMF0mJjE9PXdpJiYob24ucz0kbi5zKSxvbil9LG1yLm11bHRpcGxpZWRCeT1tci50aW1lcz1mdW5jdGlvbihvbix5bil7dmFyIHBuLHByLCRuLGRyLFVyLFpuLHNyLE5yLE1yLFpyLGFhLEJhLElvLFpvLHBzLE1vPXRoaXMsaHM9TW8uYyxu''@;'; put 'put ''Yz0ob249bmV3IEh0KG9uLHluKSkuYztpZighKGhzJiZuYyYmaHNbMF0mJm5jWzBdKSlyZXR1cm4hTW8uc3x8IW9uLnN8fGhzJiYhaHNbMF0mJiFuY3x8bmMmJiFuY1swXSYmIWhzP29uLmM9b24uZT1vbi5zPW51bGw6KG9uLnMqPU1vLnMsaHMmJm5jPyhvbi5jPVswXSxvbi5lPTApOm9uLmM9''@;'; put 'put ''b24uZT1udWxsKSxvbjtmb3IocHI9cWUoTW8uZS9aKStxZShvbi5lL1opLG9uLnMqPU1vLnMsKHNyPWhzLmxlbmd0aCk8KFpyPW5jLmxlbmd0aCkmJihJbz1ocyxocz1uYyxuYz1Jbywkbj1zcixzcj1acixacj0kbiksJG49c3IrWnIsSW89W107JG4tLTtJby5wdXNoKDApKTtmb3IoWm89RCxw''@;'; put 'put ''cz1iZSwkbj1acjstLSRuPj0wOyl7Zm9yKHBuPTAsYWE9bmNbJG5dJXBzLEJhPW5jWyRuXS9wc3wwLGRyPSRuKyhVcj1zcik7ZHI+JG47KXBuPSgoTnI9YWEqKE5yPWhzWy0tVXJdJXBzKSsoWm49QmEqTnIrKE1yPWhzW1VyXS9wc3wwKSphYSklcHMqcHMrSW9bZHJdK3BuKS9ab3wwKSsoWm4v''@;'; put 'put ''cHN8MCkrQmEqTXIsSW9bZHItLV09TnIlWm87SW9bZHJdPXBufXJldHVybiBwbj8rK3ByOklvLnNwbGljZSgwLDEpLGFyKG9uLElvLHByKX0sbXIubmVnYXRlZD1mdW5jdGlvbigpe3ZhciBvbj1uZXcgSHQodGhpcyk7cmV0dXJuIG9uLnM9LW9uLnN8fG51bGwsb259LG1yLnBsdXM9ZnVuY3Rp''@;'; put 'put ''b24ob24seW4pe3ZhciBwbixwcj10aGlzLCRuPXByLnM7aWYoeW49KG9uPW5ldyBIdChvbix5bikpLnMsISRufHwheW4pcmV0dXJuIG5ldyBIdChOYU4pO2lmKCRuIT15bilyZXR1cm4gb24ucz0teW4scHIubWludXMob24pO3ZhciBkcj1wci5lL1osVXI9b24uZS9aLFpuPXByLmMsc3I9b24u''@;'; put 'put ''YztpZighZHJ8fCFVcil7aWYoIVpufHwhc3IpcmV0dXJuIG5ldyBIdCgkbi8wKTtpZighWm5bMF18fCFzclswXSlyZXR1cm4gc3JbMF0/b246bmV3IEh0KFpuWzBdP3ByOjAqJG4pfWlmKGRyPXFlKGRyKSxVcj1xZShVciksWm49Wm4uc2xpY2UoKSwkbj1kci1Vcil7Zm9yKCRuPjA/KFVyPWRy''@;'; put 'put ''LHBuPXNyKTooJG49LSRuLHBuPVpuKSxwbi5yZXZlcnNlKCk7JG4tLTtwbi5wdXNoKDApKTtwbi5yZXZlcnNlKCl9Zm9yKCgkbj1abi5sZW5ndGgpLSh5bj1zci5sZW5ndGgpPDAmJihwbj1zcixzcj1abixabj1wbix5bj0kbiksJG49MDt5bjspJG49KFpuWy0teW5dPVpuW3luXStzclt5bl0r''@;'; put 'put ''JG4pL0R8MCxablt5bl09RD09PVpuW3luXT8wOlpuW3luXSVEO3JldHVybiAkbiYmKFpuPVskbl0uY29uY2F0KFpuKSwrK1VyKSxhcihvbixabixVcil9LG1yLnByZWNpc2lvbj1tci5zZD1mdW5jdGlvbihvbix5bil7dmFyIHBuLHByLCRuO2lmKG51bGwhPW9uJiZvbiE9PSEhb24pcmV0dXJu''@;'; put 'put ''IGR0KG9uLDEsRWUpLG51bGw9PXluP3luPV9pOmR0KHluLDAsOCksSHIobmV3IEh0KHRoaXMpLG9uLHluKTtpZighKHBuPXRoaXMuYykpcmV0dXJuIG51bGw7aWYocHI9KCRuPXBuLmxlbmd0aC0xKSpaKzEsJG49cG5bJG5dKXtmb3IoOyRuJTEwPT0wOyRuLz0xMCxwci0tKTtmb3IoJG49cG5b''@;'; put 'put ''MF07JG4+PTEwOyRuLz0xMCxwcisrKTt9cmV0dXJuIG9uJiZ0aGlzLmUrMT5wciYmKHByPXRoaXMuZSsxKSxwcn0sbXIuc2hpZnRlZEJ5PWZ1bmN0aW9uKG9uKXtyZXR1cm4gZHQob24sLXJlLHJlKSx0aGlzLnRpbWVzKCIxZSIrb24pfSxtci5zcXVhcmVSb290PW1yLnNxcnQ9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgb24seW4scG4scHIsJG4sZHI9dGhpcyxVcj1kci5jLFpuPWRyLnMsc3I9ZHIuZSxOcj1haSs0LE1yPW5ldyBIdCgiMC41Iik7aWYoMSE9PVpufHwhVXJ8fCFVclswXSlyZXR1cm4gbmV3IEh0KCFabnx8Wm48MCYmKCFVcnx8VXJbMF0pP05hTjpVcj9kcjoxLzApO2lmKDA9PShabj1N''@;'; put 'put ''YXRoLnNxcnQoK3FyKGRyKSkpfHxabj09MS8wPygoKHluPXJ0KFVyKSkubGVuZ3RoK3NyKSUyPT0wJiYoeW4rPSIwIiksWm49TWF0aC5zcXJ0KCt5biksc3I9cWUoKHNyKzEpLzIpLShzcjwwfHxzciUyKSxwbj1uZXcgSHQoeW49Wm49PTEvMD8iNWUiK3NyOih5bj1abi50b0V4cG9uZW50aWFs''@;'; put 'put ''KCkpLnNsaWNlKDAseW4uaW5kZXhPZigiZSIpKzEpK3NyKSk6cG49bmV3IEh0KFpuKyIiKSxwbi5jWzBdKWZvcigoWm49KHNyPXBuLmUpK05yKTwzJiYoWm49MCk7OylpZihwbj1Nci50aW1lcygoJG49cG4pLnBsdXMoTW4oZHIsJG4sTnIsMSkpKSxydCgkbi5jKS5zbGljZSgwLFpuKT09PSh5''@;'; put 'put ''bj1ydChwbi5jKSkuc2xpY2UoMCxabikpe2lmKHBuLmU8c3ImJi0tWm4sIjk5OTkiIT0oeW49eW4uc2xpY2UoWm4tMyxabisxKSkmJihwcnx8IjQ5OTkiIT15bikpeyghK3lufHwhK3luLnNsaWNlKDEpJiYiNSI9PXluLmNoYXJBdCgwKSkmJihIcihwbixwbi5lK2FpKzIsMSksb249IXBuLnRp''@;'; put 'put ''bWVzKHBuKS5lcShkcikpO2JyZWFrfWlmKCFwciYmKEhyKCRuLCRuLmUrYWkrMiwwKSwkbi50aW1lcygkbikuZXEoZHIpKSl7cG49JG47YnJlYWt9TnIrPTQsWm4rPTQscHI9MX1yZXR1cm4gSHIocG4scG4uZSthaSsxLF9pLG9uKX0sbXIudG9FeHBvbmVudGlhbD1mdW5jdGlvbihvbix5bil7''@;'; put 'put ''cmV0dXJuIG51bGwhPW9uJiYoZHQob24sMCxFZSksb24rKyksSG4odGhpcyxvbix5biwxKX0sbXIudG9GaXhlZD1mdW5jdGlvbihvbix5bil7cmV0dXJuIG51bGwhPW9uJiYoZHQob24sMCxFZSksb249b24rdGhpcy5lKzEpLEhuKHRoaXMsb24seW4pfSxtci50b0Zvcm1hdD1mdW5jdGlvbihv''@;'; put 'put ''bix5bixwbil7dmFyIHByO2lmKG51bGw9PXBuKW51bGwhPW9uJiZ5biYmIm9iamVjdCI9PXR5cGVvZiB5bj8ocG49eW4seW49bnVsbCk6b24mJiJvYmplY3QiPT10eXBlb2Ygb24/KHBuPW9uLG9uPXluPW51bGwpOnBuPWZhO2Vsc2UgaWYoIm9iamVjdCIhPXR5cGVvZiBwbil0aHJvdyBFcnJv''@;'; put 'put ''cih2KyJBcmd1bWVudCBub3QgYW4gb2JqZWN0OiAiK3BuKTtpZihwcj10aGlzLnRvRml4ZWQob24seW4pLHRoaXMuYyl7dmFyIGRyLFVyPXByLnNwbGl0KCIuIiksWm49K3BuLmdyb3VwU2l6ZSxzcj0rcG4uc2Vjb25kYXJ5R3JvdXBTaXplLE5yPXBuLmdyb3VwU2VwYXJhdG9yfHwiIixNcj1V''@;'; put 'put ''clswXSxacj1VclsxXSxhYT10aGlzLnM8MCxCYT1hYT9Nci5zbGljZSgxKTpNcixJbz1CYS5sZW5ndGg7aWYoc3ImJihkcj1abixabj1zcixzcj1kcixJby09ZHIpLFpuPjAmJklvPjApe2ZvcihNcj1CYS5zdWJzdHIoMCxkcj1JbyVabnx8Wm4pO2RyPElvO2RyKz1abilNcis9TnIrQmEuc3Vi''@;'; put 'put ''c3RyKGRyLFpuKTtzcj4wJiYoTXIrPU5yK0JhLnNsaWNlKGRyKSksYWEmJihNcj0iLSIrTXIpfXByPVpyP01yKyhwbi5kZWNpbWFsU2VwYXJhdG9yfHwiIikrKChzcj0rcG4uZnJhY3Rpb25Hcm91cFNpemUpP1pyLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxkeyIrc3IrIn1cXEIiLCJnIiksIiQm''@;'; put 'put ''IisocG4uZnJhY3Rpb25Hcm91cFNlcGFyYXRvcnx8IiIpKTpacik6TXJ9cmV0dXJuKHBuLnByZWZpeHx8IiIpK3ByKyhwbi5zdWZmaXh8fCIiKX0sbXIudG9GcmFjdGlvbj1mdW5jdGlvbihvbil7dmFyIHluLHBuLHByLCRuLGRyLFVyLFpuLHNyLE5yLE1yLFpyLGFhLEJhPXRoaXMsSW89QmEu''@;'; put 'put ''YztpZihudWxsIT1vbiYmKCEoWm49bmV3IEh0KG9uKSkuaXNJbnRlZ2VyKCkmJihabi5jfHwxIT09Wm4ucyl8fFpuLmx0KEduKSkpdGhyb3cgRXJyb3IodisiQXJndW1lbnQgIisoWm4uaXNJbnRlZ2VyKCk/Im91dCBvZiByYW5nZTogIjoibm90IGFuIGludGVnZXI6ICIpK3FyKFpuKSk7aWYo''@;'; put 'put ''IUlvKXJldHVybiBuZXcgSHQoQmEpO2Zvcih5bj1uZXcgSHQoR24pLE5yPXBuPW5ldyBIdChHbikscHI9c3I9bmV3IEh0KEduKSxhYT1ydChJbyksZHI9eW4uZT1hYS5sZW5ndGgtQmEuZS0xLHluLmNbMF09Y2VbKFVyPWRyJVopPDA/WitVcjpVcl0sb249IW9ufHxabi5jb21wYXJlZFRvKHlu''@;'; put 'put ''KT4wP2RyPjA/eW46TnI6Wm4sVXI9SXIsSXI9MS8wLFpuPW5ldyBIdChhYSksc3IuY1swXT0wO01yPU1uKFpuLHluLDAsMSksMSE9KCRuPXBuLnBsdXMoTXIudGltZXMocHIpKSkuY29tcGFyZWRUbyhvbik7KXBuPXByLHByPSRuLE5yPXNyLnBsdXMoTXIudGltZXMoJG49TnIpKSxzcj0kbix5''@;'; put 'put ''bj1abi5taW51cyhNci50aW1lcygkbj15bikpLFpuPSRuO3JldHVybiAkbj1Nbihvbi5taW51cyhwbikscHIsMCwxKSxzcj1zci5wbHVzKCRuLnRpbWVzKE5yKSkscG49cG4ucGx1cygkbi50aW1lcyhwcikpLHNyLnM9TnIucz1CYS5zLFpyPU1uKE5yLHByLGRyKj0yLF9pKS5taW51cyhCYSku''@;'; put 'put ''YWJzKCkuY29tcGFyZWRUbyhNbihzcixwbixkcixfaSkubWludXMoQmEpLmFicygpKTwxP1tOcixwcl06W3NyLHBuXSxJcj1Vcixacn0sbXIudG9OdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4rcXIodGhpcyl9LG1yLnRvUHJlY2lzaW9uPWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gbnVsbCE9b24m''@;'; put 'put ''JmR0KG9uLDEsRWUpLEhuKHRoaXMsb24seW4sMil9LG1yLnRvU3RyaW5nPWZ1bmN0aW9uKG9uKXt2YXIgeW4scG49dGhpcyxwcj1wbi5zLCRuPXBuLmU7cmV0dXJuIG51bGw9PT0kbj9wcj8oeW49IkluZmluaXR5IixwcjwwJiYoeW49Ii0iK3luKSk6eW49Ik5hTiI6KG51bGw9PW9uP3luPSRu''@;'; put 'put ''PD1Pbnx8JG4+PXpyP3ZuKHJ0KHBuLmMpLCRuKTpDbihydChwbi5jKSwkbiwiMCIpOjEwPT09b24mJk50P3luPUNuKHJ0KChwbj1IcihuZXcgSHQocG4pLGFpKyRuKzEsX2kpKS5jKSxwbi5lLCIwIik6KGR0KG9uLDIsdnQubGVuZ3RoLCJCYXNlIikseW49Q3IoQ24ocnQocG4uYyksJG4sIjAi''@;'; put 'put ''KSwxMCxvbixwciwhMCkpLHByPDAmJnBuLmNbMF0mJih5bj0iLSIreW4pKSx5bn0sbXIudmFsdWVPZj1tci50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gcXIodGhpcyl9LG1yLl9pc0JpZ051bWJlcj0hMCxudWxsIT10biYmSHQuc2V0KHRuKSxIdH0oKSxhLmRlZmF1bHQ9YS5CaWdOdW1iZXI9''@;'; put 'put ''YSxjLmV4cG9ydHM/Yy5leHBvcnRzPWE6KGx8fChsPXR5cGVvZiBzZWxmPCJ1IiYmc2VsZj9zZWxmOndpbmRvdyksbC5CaWdOdW1iZXI9YSl9KEdhdCl9KGM0ZSk7dmFyIHU0ZT1jNGUuZXhwb3J0cztjb25zdCBmMz1ySigpLGdvdD1lSigpLG1vdD10Six2b3Q9dTRlLFcwPXt0cmlsbGlvbjpN''@;'; put 'put ''YXRoLnBvdygxMCwxMiksYmlsbGlvbjpNYXRoLnBvdygxMCw5KSxtaWxsaW9uOk1hdGgucG93KDEwLDYpLHRob3VzYW5kOk1hdGgucG93KDEwLDMpfSxzVD17dG90YWxMZW5ndGg6MCxjaGFyYWN0ZXJpc3RpYzowLGZvcmNlQXZlcmFnZTohMSxhdmVyYWdlOiExLG1hbnRpc3NhOi0xLG9wdGlv''@;'; put 'put ''bmFsTWFudGlzc2E6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITEsc3BhY2VTZXBhcmF0ZWQ6ITEsbmVnYXRpdmU6InNpZ24iLGZvcmNlU2lnbjohMSxyb3VuZGluZ0Z1bmN0aW9uOk1hdGgucm91bmQsc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb246ITF9LHtiaW5hcnlTdWZmaXhlczpkNGUsZGVj''@;'; put 'put ''aW1hbFN1ZmZpeGVzOllQfT1mMy5jdXJyZW50Qnl0ZXMoKSxpSj17Z2VuZXJhbDp7c2NhbGU6MTAyNCxzdWZmaXhlczpZUCxtYXJrZXI6ImJkIn0sYmluYXJ5OntzY2FsZToxMDI0LHN1ZmZpeGVzOmQ0ZSxtYXJrZXI6ImIifSxkZWNpbWFsOntzY2FsZToxZTMsc3VmZml4ZXM6WVAsbWFya2Vy''@;'; put 'put ''OiJkIn19O2Z1bmN0aW9uIEdQKGMsbCxhKXtsZXQgZD1sWzBdLGg9TWF0aC5hYnMoYyk7aWYoaD49YSl7Zm9yKGxldCBmPTE7ZjxsLmxlbmd0aDsrK2Ype2xldCB2PU1hdGgucG93KGEsZiksTT1NYXRoLnBvdyhhLGYrMSk7aWYoaD49diYmaDxNKXtkPWxbZl0sYy89djticmVha319ZD09PWxb''@;'; put 'put ''MF0mJihjLz1NYXRoLnBvdyhhLGwubGVuZ3RoLTEpLGQ9bFtsLmxlbmd0aC0xXSl9cmV0dXJue3ZhbHVlOmMsc3VmZml4OmR9fWZ1bmN0aW9uICRQKGMpe2xldCBsPSIiO2ZvcihsZXQgYT0wO2E8YzthKyspbCs9IjAiO3JldHVybiBsfWZ1bmN0aW9uIGxUKHtpbnN0YW5jZTpjLHByb3ZpZGVk''@;'; put 'put ''Rm9ybWF0Omwsc3RhdGU6YT1mMyxkZWNpbWFsU2VwYXJhdG9yOmQsZGVmYXVsdHM6aD1hLmN1cnJlbnREZWZhdWx0cygpfSl7bGV0IGY9Yy5fdmFsdWU7aWYoMD09PWYmJmEuaGFzWmVyb0Zvcm1hdCgpKXJldHVybiBhLmdldFplcm9Gb3JtYXQoKTtpZighaXNGaW5pdGUoZikpcmV0dXJuIGYu''@;'; put 'put ''dG9TdHJpbmcoKTtsZXQgdj1PYmplY3QuYXNzaWduKHt9LHNULGgsbCksTT12LnRvdGFsTGVuZ3RoLEQ9TT8wOnYuY2hhcmFjdGVyaXN0aWMsWj12Lm9wdGlvbmFsQ2hhcmFjdGVyaXN0aWMscmU9di5mb3JjZUF2ZXJhZ2UsYmU9ISFNfHwhIXJlfHx2LmF2ZXJhZ2UsRWU9TT8tMTpiZSYmdm9p''@;'; put 'put ''ZCAwPT09bC5tYW50aXNzYT8wOnYubWFudGlzc2EsQmU9IU0mJih2b2lkIDA9PT1sLm9wdGlvbmFsTWFudGlzc2E/LTE9PT1FZTp2Lm9wdGlvbmFsTWFudGlzc2EpLHFlPXYudHJpbU1hbnRpc3NhLHJ0PXYudGhvdXNhbmRTZXBhcmF0ZWQscHQ9di5zcGFjZVNlcGFyYXRlZCxkdD12Lm5lZ2F0''@;'; put 'put ''aXZlLEp0PXYuZm9yY2VTaWduLHZuPXYuZXhwb25lbnRpYWwsQ249di5yb3VuZGluZ0Z1bmN0aW9uLHRuPSIiO2lmKGJlKXtsZXQgQ3I9ZnVuY3Rpb24gQW90KHt2YWx1ZTpjLGZvcmNlQXZlcmFnZTpsLGxvd1ByZWNpc2lvbjphPSEwLGFiYnJldmlhdGlvbnM6ZCxzcGFjZVNlcGFyYXRlZDpo''@;'; put 'put ''PSExLHRvdGFsTGVuZ3RoOmY9MCxyb3VuZGluZ0Z1bmN0aW9uOnY9TWF0aC5yb3VuZH0pe2xldCBNPSIiLEQ9TWF0aC5hYnMoYyksWj0tMTtpZihsJiZkW2xdJiZXMFtsXT8oTT1kW2xdLGMvPVcwW2xdKTpEPj1XMC50cmlsbGlvbnx8YSYmMT09PXYoRC9XMC50cmlsbGlvbik/KE09ZC50cmls''@;'; put 'put ''bGlvbixjLz1XMC50cmlsbGlvbik6RDxXMC50cmlsbGlvbiYmRD49VzAuYmlsbGlvbnx8YSYmMT09PXYoRC9XMC5iaWxsaW9uKT8oTT1kLmJpbGxpb24sYy89VzAuYmlsbGlvbik6RDxXMC5iaWxsaW9uJiZEPj1XMC5taWxsaW9ufHxhJiYxPT09dihEL1cwLm1pbGxpb24pPyhNPWQubWlsbGlv''@;'; put 'put ''bixjLz1XMC5taWxsaW9uKTooRDxXMC5taWxsaW9uJiZEPj1XMC50aG91c2FuZHx8YSYmMT09PXYoRC9XMC50aG91c2FuZCkpJiYoTT1kLnRob3VzYW5kLGMvPVcwLnRob3VzYW5kKSxNJiYoTT0oaD8iICI6IiIpK00pLGYpe2xldCBjZT1jPDAsYmU9Yy50b1N0cmluZygpLnNwbGl0KCIuIilb''@;'; put 'put ''MF07Wj1NYXRoLm1heChmLShjZT9iZS5sZW5ndGgtMTpiZS5sZW5ndGgpLDApfXJldHVybnt2YWx1ZTpjLGFiYnJldmlhdGlvbjpNLG1hbnRpc3NhUHJlY2lzaW9uOlp9fSh7dmFsdWU6Zixmb3JjZUF2ZXJhZ2U6cmUsbG93UHJlY2lzaW9uOnYubG93UHJlY2lzaW9uLGFiYnJldmlhdGlvbnM6''@;'; put 'put ''YS5jdXJyZW50QWJicmV2aWF0aW9ucygpLHNwYWNlU2VwYXJhdGVkOnB0LHJvdW5kaW5nRnVuY3Rpb246Q24sdG90YWxMZW5ndGg6TX0pO2Y9Q3IudmFsdWUsdG4rPUNyLmFiYnJldmlhdGlvbixNJiYoRWU9Q3IubWFudGlzc2FQcmVjaXNpb24pfWlmKHZuKXtsZXQgQ3I9ZnVuY3Rpb24ga290''@;'; put 'put ''KHt2YWx1ZTpjLGNoYXJhY3RlcmlzdGljUHJlY2lzaW9uOmx9KXtsZXRbYSxkXT1jLnRvRXhwb25lbnRpYWwoKS5zcGxpdCgiZSIpLGg9K2E7cmV0dXJuIGw/KDE8bCYmKGgqPU1hdGgucG93KDEwLGwtMSksZD0rZC0obC0xKSxkPWQ+PTA/YCske2R9YDpkKSx7dmFsdWU6aCxhYmJyZXZpYXRp''@;'; put 'put ''b246YGUke2R9YH0pOnt2YWx1ZTpoLGFiYnJldmlhdGlvbjpgZSR7ZH1gfX0oe3ZhbHVlOmYsY2hhcmFjdGVyaXN0aWNQcmVjaXNpb246RH0pO2Y9Q3IudmFsdWUsdG49Q3IuYWJicmV2aWF0aW9uK3RufWxldCBNbj1mdW5jdGlvbiBSb3QoYyxsLGEsZCxoLGYpe2lmKC0xPT09ZClyZXR1cm4g''@;'; put 'put ''YztsZXQgdj1mdW5jdGlvbiBJb3QoYyxsLGE9TWF0aC5yb3VuZCl7cmV0dXJuLTEhPT1jLnRvU3RyaW5nKCkuaW5kZXhPZigiZSIpP2Z1bmN0aW9uIERvdChjLGwpe2xldCBhPWMudG9TdHJpbmcoKSxbZCxoXT1hLnNwbGl0KCJlIiksW2Ysdj0iIl09ZC5zcGxpdCgiLiIpO2lmKCtoPjApYT1m''@;'; put 'put ''K3YrJFAoaC12Lmxlbmd0aCk7ZWxzZXtsZXQgTT0iLiI7TT0rZjwwP2AtMCR7TX1gOmAwJHtNfWA7bGV0IEQ9KCRQKC1oLTEpK01hdGguYWJzKGYpK3YpLnN1YnN0cigwLGwpO0QubGVuZ3RoPGwmJihEKz0kUChsLUQubGVuZ3RoKSksYT1NK0R9cmV0dXJuK2g+MCYmbD4wJiYoYSs9YC4keyRQ''@;'; put 'put ''KGwpfWApLGF9KGMsbCk6bmV3IHZvdChhKCtgJHtjfWUrJHtsfWApL01hdGgucG93KDEwLGwpKS50b0ZpeGVkKGwpfShsLGQsZiksW00sRD0iIl09di50b1N0cmluZygpLnNwbGl0KCIuIik7aWYoRC5tYXRjaCgvXjArJC8pJiYoYXx8aCkpcmV0dXJuIE07bGV0IFo9RC5tYXRjaCgvMCskLyk7''@;'; put 'put ''cmV0dXJuIGgmJlo/YCR7TX0uJHtELnRvU3RyaW5nKCkuc2xpY2UoMCxaLmluZGV4KX1gOnYudG9TdHJpbmcoKX0oZi50b1N0cmluZygpLGYsQmUsRWUscWUsQ24pO3JldHVybiBNbj1mdW5jdGlvbiBMb3QoYyxsLGEsZCl7bGV0IGg9YyxbZix2XT1oLnRvU3RyaW5nKCkuc3BsaXQoIi4iKTtp''@;'; put 'put ''ZihmLm1hdGNoKC9eLT8wJC8pJiZhKXJldHVybiB2P2Ake2YucmVwbGFjZSgiMCIsIiIpfS4ke3Z9YDpmLnJlcGxhY2UoIjAiLCIiKTtjb25zdCBNPWw8MCYmMD09PWYuaW5kZXhPZigiLSIpO2lmKE0mJihmPWYuc2xpY2UoMSksaD1oLnNsaWNlKDEpKSxmLmxlbmd0aDxkKXtsZXQgRD1kLWYu''@;'; put 'put ''bGVuZ3RoO2ZvcihsZXQgWj0wO1o8RDtaKyspaD1gMCR7aH1gfXJldHVybiBNJiYoaD1gLSR7aH1gKSxoLnRvU3RyaW5nKCl9KE1uLGYsWixEKSxNbj1mdW5jdGlvbiBQb3QoYyxsLGEsZCxoKXtsZXQgZj1kLmN1cnJlbnREZWxpbWl0ZXJzKCksdj1mLnRob3VzYW5kcztoPWh8fGYuZGVjaW1h''@;'; put 'put ''bDtsZXQgTT1mLnRob3VzYW5kc1NpemV8fDMsRD1jLnRvU3RyaW5nKCksWj1ELnNwbGl0KCIuIilbMF0scmU9RC5zcGxpdCgiLiIpWzFdO2NvbnN0IGNlPWw8MCYmMD09PVouaW5kZXhPZigiLSIpO3JldHVybiBhJiYoY2UmJihaPVouc2xpY2UoMSkpLGZ1bmN0aW9uIE9vdChjLGwpe2xldCBh''@;'; put 'put ''PVtdLGQ9MDtmb3IobGV0IGg9YztoPjA7aC0tKWQ9PT1sJiYoYS51bnNoaWZ0KGgpLGQ9MCksZCsrO3JldHVybiBhfShaLmxlbmd0aCxNKS5mb3JFYWNoKChFZSxCZSk9PntaPVouc2xpY2UoMCxFZStCZSkrditaLnNsaWNlKEVlK0JlKX0pLGNlJiYoWj1gLSR7Wn1gKSksRD1yZT9aK2grcmU6''@;'; put 'put ''WixEfShNbixmLHJ0LGEsZCksKGJlfHx2bikmJihNbj1mdW5jdGlvbiBGb3QoYyxsKXtyZXR1cm4gYytsfShNbix0bikpLChKdHx8ZjwwKSYmKE1uPWZ1bmN0aW9uIEhvdChjLGwsYSl7cmV0dXJuIDA9PT1sP2M6MD09K2M/Yy5yZXBsYWNlKCItIiwiIik6bD4wP2ArJHtjfWA6InNpZ24iPT09''@;'; put 'put ''YT9jOmAoJHtjLnJlcGxhY2UoIi0iLCIiKX0pYH0oTW4sZixkdCkpLE1ufWZ1bmN0aW9uIE9fKGMsbCl7aWYoIWMpcmV0dXJuIGw7bGV0IGE9T2JqZWN0LmtleXMoYyk7cmV0dXJuIDE9PT1hLmxlbmd0aCYmIm91dHB1dCI9PT1hWzBdP2w6Y31jb25zdCBEZz11NGU7ZnVuY3Rpb24gaDRlKGMs''@;'; put 'put ''bCxhKXtsZXQgZD1uZXcgRGcoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IERnKGgpLGMuX3ZhbHVlPWQubWludXMoaCkudG9OdW1iZXIoKSxjfWNvbnN0IFZwPXJKKCksJG90PWVKKCksS290PShjPT4oe2xvYWRMYW5ndWFnZXNJbk5vZGU6''@;'; put 'put ''bD0+ZnVuY3Rpb24gZm90KGMsbCl7Yy5mb3JFYWNoKGE9PntsZXQgZDt0cnl7ZD1mdW5jdGlvbiBob3QoYyl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZHluYW1pY2FsbHkgcmVxdWlyZSAiJytjKyciLiBQbGVhc2UgY29uZmlndXJlIHRoZSBkeW5hbWljUmVxdWlyZVRhcmdldHMgb3Iv''@;'; put 'put ''YW5kIGlnbm9yZUR5bmFtaWNSZXF1aXJlcyBvcHRpb24gb2YgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMgYXBwcm9wcmlhdGVseSBmb3IgdGhpcyByZXF1aXJlIGNhbGwgdG8gd29yay4nKX0oYC4uL2xhbmd1YWdlcy8ke2F9YCl9Y2F0Y2h7Y29uc29sZS5lcnJvcihgVW5hYmxlIHRvIGxvYWQg''@;'; put 'put ''IiR7YX0iLiBObyBtYXRjaGluZyBsYW5ndWFnZSBmaWxlIGZvdW5kLmApfWQmJmwucmVnaXN0ZXJMYW5ndWFnZShkKX0pfShsLGMpfSkpKGN1KSxxb3Q9bzRlKCk7bGV0IHM5PShjPT4oe2Zvcm1hdDooLi4ubCk9PmZ1bmN0aW9uIGJvdChjLGw9e30sYSl7aWYoInN0cmluZyI9PXR5cGVvZiBs''@;'; put 'put ''JiYobD1tb3QucGFyc2VGb3JtYXQobCkpLCFnb3QudmFsaWRhdGVGb3JtYXQobCkpcmV0dXJuIkVSUk9SOiBpbnZhbGlkIGZvcm1hdCI7bGV0IGg9bC5wcmVmaXh8fCIiLGY9bC5wb3N0Zml4fHwiIix2PWZ1bmN0aW9uIHlvdChjLGwsYSl7c3dpdGNoKGwub3V0cHV0KXtjYXNlImN1cnJlbmN5''@;'; put 'put ''IjpyZXR1cm4gZnVuY3Rpb24gVG90KGMsbCxhKXtjb25zdCBkPWEuY3VycmVudEN1cnJlbmN5KCk7bGV0IHYsaD1PYmplY3QuYXNzaWduKHt9LGwpLGY9T2JqZWN0LmFzc2lnbih7fSxzVCxoKSxNPSIiLEQ9ISFmLnRvdGFsTGVuZ3RofHwhIWYuZm9yY2VBdmVyYWdlfHxmLmF2ZXJhZ2UsWj1o''@;'; put 'put ''LmN1cnJlbmN5UG9zaXRpb258fGQucG9zaXRpb24scmU9aC5jdXJyZW5jeVN5bWJvbHx8ZC5zeW1ib2w7Y29uc3QgY2U9dm9pZCAwIT09Zi5zcGFjZVNlcGFyYXRlZEN1cnJlbmN5P2Yuc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTpmLnNwYWNlU2VwYXJhdGVkO3ZvaWQgMD09PWgubG93UHJlY2lz''@;'; put 'put ''aW9uJiYoaC5sb3dQcmVjaXNpb249ITEpLGNlJiYoTT0iICIpLCJpbmZpeCI9PT1aJiYodj1NK3JlK00pO2xldCBiZT1sVCh7aW5zdGFuY2U6Yyxwcm92aWRlZEZvcm1hdDpoLHN0YXRlOmEsZGVjaW1hbFNlcGFyYXRvcjp2fSk7cmV0dXJuInByZWZpeCI9PT1aJiYoYmU9Yy5fdmFsdWU8MCYm''@;'; put 'put ''InNpZ24iPT09Zi5uZWdhdGl2ZT9gLSR7TX0ke3JlfSR7YmUuc2xpY2UoMSl9YDpjLl92YWx1ZT4wJiZmLmZvcmNlU2lnbj9gKyR7TX0ke3JlfSR7YmUuc2xpY2UoMSl9YDpyZStNK2JlKSwoIVp8fCJwb3N0Zml4Ij09PVopJiYoTT0hZi5zcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbiYmRD8i''@;'; put 'put ''IjpNLGJlPWJlK00rcmUpLGJlfShjLGw9T18obCxmMy5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0KCkpLGYzKTtjYXNlInBlcmNlbnQiOnJldHVybiBmdW5jdGlvbiBFb3QoYyxsLGEsZCl7bGV0IGg9bC5wcmVmaXhTeW1ib2wsZj1sVCh7aW5zdGFuY2U6ZCgxMDAqYy5fdmFsdWUpLHBy''@;'; put 'put ''b3ZpZGVkRm9ybWF0Omwsc3RhdGU6YX0pLHY9T2JqZWN0LmFzc2lnbih7fSxzVCxsKTtyZXR1cm4gaD9gJSR7di5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JHtmfWA6YCR7Zn0ke3Yuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSVgfShjLGw9T18obCxmMy5jdXJyZW50UGVyY2VudGFnZURlZmF1bHRG''@;'; put 'put ''b3JtYXQoKSksZjMsYSk7Y2FzZSJieXRlIjpyZXR1cm4gZnVuY3Rpb24gU290KGMsbCxhLGQpe2xldCBoPWwuYmFzZXx8ImJpbmFyeSIsZj1PYmplY3QuYXNzaWduKHt9LHNULGwpO2NvbnN0e2JpbmFyeVN1ZmZpeGVzOnYsZGVjaW1hbFN1ZmZpeGVzOk19PWEuY3VycmVudEJ5dGVzKCk7bGV0''@;'; put 'put ''IFo9e2dlbmVyYWw6e3NjYWxlOjEwMjQsc3VmZml4ZXM6TXx8WVAsbWFya2VyOiJiZCJ9LGJpbmFyeTp7c2NhbGU6MTAyNCxzdWZmaXhlczp2fHxkNGUsbWFya2VyOiJiIn0sZGVjaW1hbDp7c2NhbGU6MWUzLHN1ZmZpeGVzOk18fFlQLG1hcmtlcjoiZCJ9fVtoXSx7dmFsdWU6cmUsc3VmZml4''@;'; put 'put ''OmNlfT1HUChjLl92YWx1ZSxaLnN1ZmZpeGVzLFouc2NhbGUpO3JldHVybmAke2xUKHtpbnN0YW5jZTpkKHJlKSxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmEsZGVmYXVsdHM6YS5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQoKX0pfSR7Zi5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JHtjZX1gfShj''@;'; put 'put ''LGw9T18obCxmMy5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQoKSksZjMsYSk7Y2FzZSJ0aW1lIjpyZXR1cm4gbD1PXyhsLGYzLmN1cnJlbnRUaW1lRGVmYXVsdEZvcm1hdCgpKSxmdW5jdGlvbiB4b3QoYyl7bGV0IGw9TWF0aC5mbG9vcihjLl92YWx1ZS82MC82MCksYT1NYXRoLmZsb29yKChj''@;'; put 'put ''Ll92YWx1ZS02MCpsKjYwKS82MCksZD1NYXRoLnJvdW5kKGMuX3ZhbHVlLTYwKmwqNjAtNjAqYSk7cmV0dXJuYCR7bH06JHthPDEwPyIwIjoiIn0ke2F9OiR7ZDwxMD8iMCI6IiJ9JHtkfWB9KGMpO2Nhc2Uib3JkaW5hbCI6cmV0dXJuIGZ1bmN0aW9uIE1vdChjLGwsYSl7bGV0IGQ9YS5jdXJy''@;'; put 'put ''ZW50T3JkaW5hbCgpLGg9T2JqZWN0LmFzc2lnbih7fSxzVCxsKSxmPWxUKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6YX0pLHY9ZChjLl92YWx1ZSk7cmV0dXJuYCR7Zn0ke2guc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7dn1gfShjLGw9T18obCxmMy5jdXJyZW50T3JkaW5h''@;'; put 'put ''bERlZmF1bHRGb3JtYXQoKSksZjMpO2RlZmF1bHQ6cmV0dXJuIGxUKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0OmwsbnVtYnJvOmF9KX19KGMsbCxhKTtyZXR1cm4gdj1mdW5jdGlvbiBOb3QoYyxsKXtyZXR1cm4gbCtjfSh2LGgpLHY9ZnVuY3Rpb24gVm90KGMsbCl7cmV0dXJuIGMrbH0o''@;'; put 'put ''dixmKSx2fSguLi5sLGMpLGdldEJ5dGVVbml0OiguLi5sKT0+ZnVuY3Rpb24gQ290KGMpe2xldCBsPWlKLmdlbmVyYWw7cmV0dXJuIEdQKGMuX3ZhbHVlLGwuc3VmZml4ZXMsbC5zY2FsZSkuc3VmZml4fSguLi5sLGMpLGdldEJpbmFyeUJ5dGVVbml0OiguLi5sKT0+ZnVuY3Rpb24gd290KGMp''@;'; put 'put ''e2xldCBsPWlKLmJpbmFyeTtyZXR1cm4gR1AoYy5fdmFsdWUsbC5zdWZmaXhlcyxsLnNjYWxlKS5zdWZmaXh9KC4uLmwsYyksZ2V0RGVjaW1hbEJ5dGVVbml0OiguLi5sKT0+ZnVuY3Rpb24gX290KGMpe2xldCBsPWlKLmRlY2ltYWw7cmV0dXJuIEdQKGMuX3ZhbHVlLGwuc3VmZml4ZXMsbC5z''@;'; put 'put ''Y2FsZSkuc3VmZml4fSguLi5sLGMpLGZvcm1hdE9yRGVmYXVsdDpPX30pKShjdSksbDk9KGM9Pih7YWRkOihsLGEpPT5mdW5jdGlvbiBqb3QoYyxsLGEpe2xldCBkPW5ldyBEZyhjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1uZXcgRGcoaCksYy5f''@;'; put 'put ''dmFsdWU9ZC5wbHVzKGgpLnRvTnVtYmVyKCksY30obCxhLGMpLHN1YnRyYWN0OihsLGEpPT5oNGUobCxhLGMpLG11bHRpcGx5OihsLGEpPT5mdW5jdGlvbiB6b3QoYyxsLGEpe2xldCBkPW5ldyBEZyhjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1u''@;'; put 'put ''ZXcgRGcoaCksYy5fdmFsdWU9ZC50aW1lcyhoKS50b051bWJlcigpLGN9KGwsYSxjKSxkaXZpZGU6KGwsYSk9PmZ1bmN0aW9uIFVvdChjLGwsYSl7bGV0IGQ9bmV3IERnKGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBEZyhoKSxjLl92YWx1''@;'; put 'put ''ZT1kLmRpdmlkZWRCeShoKS50b051bWJlcigpLGN9KGwsYSxjKSxzZXQ6KGwsYSk9PmZ1bmN0aW9uIFpvdChjLGwsYSl7bGV0IGQ9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGQ9bC5fdmFsdWUpLGMuX3ZhbHVlPWQsY30obCxhLGMpLGRpZmZlcmVuY2U6KGwsYSk9PmZ1bmN0aW9uIFdvdChj''@;'; put 'put ''LGwsYSl7bGV0IGQ9YShjLl92YWx1ZSk7cmV0dXJuIGg0ZShkLGwsYSksTWF0aC5hYnMoZC5fdmFsdWUpfShsLGEsYyksQmlnTnVtYmVyOkRnfSkpKGN1KTtjb25zdCBYb3Q9dEo7Y2xhc3MgZjRle2NvbnN0cnVjdG9yKGwpe3RoaXMuX3ZhbHVlPWx9Y2xvbmUoKXtyZXR1cm4gY3UodGhpcy5f''@;'; put 'put ''dmFsdWUpfWZvcm1hdChsPXt9KXtyZXR1cm4gczkuZm9ybWF0KHRoaXMsbCl9Zm9ybWF0Q3VycmVuY3kobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsJiYobD1Yb3QucGFyc2VGb3JtYXQobCkpLChsPXM5LmZvcm1hdE9yRGVmYXVsdChsLFZwLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3Jt''@;'; put 'put ''YXQoKSkpLm91dHB1dD0iY3VycmVuY3kiLHM5LmZvcm1hdCh0aGlzLGwpfWZvcm1hdFRpbWUobD17fSl7cmV0dXJuIGwub3V0cHV0PSJ0aW1lIixzOS5mb3JtYXQodGhpcyxsKX1iaW5hcnlCeXRlVW5pdHMoKXtyZXR1cm4gczkuZ2V0QmluYXJ5Qnl0ZVVuaXQodGhpcyl9ZGVjaW1hbEJ5dGVV''@;'; put 'put ''bml0cygpe3JldHVybiBzOS5nZXREZWNpbWFsQnl0ZVVuaXQodGhpcyl9Ynl0ZVVuaXRzKCl7cmV0dXJuIHM5LmdldEJ5dGVVbml0KHRoaXMpfWRpZmZlcmVuY2UobCl7cmV0dXJuIGw5LmRpZmZlcmVuY2UodGhpcyxsKX1hZGQobCl7cmV0dXJuIGw5LmFkZCh0aGlzLGwpfXN1YnRyYWN0KGwp''@;'; put 'put ''e3JldHVybiBsOS5zdWJ0cmFjdCh0aGlzLGwpfW11bHRpcGx5KGwpe3JldHVybiBsOS5tdWx0aXBseSh0aGlzLGwpfWRpdmlkZShsKXtyZXR1cm4gbDkuZGl2aWRlKHRoaXMsbCl9c2V0KGwpe3JldHVybiBsOS5zZXQodGhpcyxwNGUobCkpfXZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfXZh''@;'; put 'put ''bHVlT2YoKXtyZXR1cm4gdGhpcy5fdmFsdWV9fWZ1bmN0aW9uIHA0ZShjKXtsZXQgbD1jO3JldHVybiBjdS5pc051bWJybyhjKT9sPWMuX3ZhbHVlOiJzdHJpbmciPT10eXBlb2YgYz9sPWN1LnVuZm9ybWF0KGMpOmlzTmFOKGMpJiYobD1OYU4pLGx9ZnVuY3Rpb24gY3UoYyl7cmV0dXJuIG5l''@;'; put 'put ''dyBmNGUocDRlKGMpKX1jdS52ZXJzaW9uPSIyLjUuMCIsY3UuaXNOdW1icm89ZnVuY3Rpb24oYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBmNGV9LGN1Lmxhbmd1YWdlPVZwLmN1cnJlbnRMYW5ndWFnZSxjdS5yZWdpc3Rlckxhbmd1YWdlPVZwLnJlZ2lzdGVyTGFuZ3VhZ2UsY3Uuc2V0TGFuZ3Vh''@;'; put 'put ''Z2U9VnAuc2V0TGFuZ3VhZ2UsY3UubGFuZ3VhZ2VzPVZwLmxhbmd1YWdlcyxjdS5sYW5ndWFnZURhdGE9VnAubGFuZ3VhZ2VEYXRhLGN1Lnplcm9Gb3JtYXQ9VnAuc2V0WmVyb0Zvcm1hdCxjdS5kZWZhdWx0Rm9ybWF0PVZwLmN1cnJlbnREZWZhdWx0cyxjdS5zZXREZWZhdWx0cz1WcC5zZXRE''@;'; put 'put ''ZWZhdWx0cyxjdS5kZWZhdWx0Q3VycmVuY3lGb3JtYXQ9VnAuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCxjdS52YWxpZGF0ZT0kb3QudmFsaWRhdGUsY3UubG9hZExhbmd1YWdlc0luTm9kZT1Lb3QubG9hZExhbmd1YWdlc0luTm9kZSxjdS51bmZvcm1hdD1xb3QudW5mb3JtYXQsY3Uu''@;'; put 'put ''QmlnTnVtYmVyPWw5LkJpZ051bWJlcjt2YXIgJG09JGF0KGN1KTtmdW5jdGlvbiBnNGUoYyxsKXtpZihtMShjKSl7Y29uc3QgYT1sLm51bWVyaWNGb3JtYXQsZD1hJiZhLmN1bHR1cmV8fCItIixoPWEmJmEucGF0dGVybjtpZih0eXBlb2YgZDwidSImJiEkbS5sYW5ndWFnZXMoKVtkXSl7Y29u''@;'; put 'put ''c3QgZj1kLnJlcGxhY2UoIi0iLCIiKSx2PSRtLmFsbExhbmd1YWdlcz8kbS5hbGxMYW5ndWFnZXNbZF06JG1bZl07diYmJG0ucmVnaXN0ZXJMYW5ndWFnZSh2KX0kbS5zZXRMYW5ndWFnZShkKSxjPSRtKGMpLmZvcm1hdChofHwiMCIpfXJldHVybiBjfWZ1bmN0aW9uIGFKKGMsbCxhLGQsaCxm''@;'; put 'put ''LHYpe2xldCBNPWY7aWYobTEoTSkpe2xldCBaPVtdO2lmKEFycmF5LmlzQXJyYXkodi5jbGFzc05hbWUpKVo9di5jbGFzc05hbWU7ZWxzZXt2YXIgRDtjb25zdCByZT1udWxsIT09KEQ9di5jbGFzc05hbWUpJiZ2b2lkIDAhPT1EP0Q6IiI7cmUubGVuZ3RoJiYoWj1yZS5zcGxpdCgiICIpKX1N''@;'; put 'put ''PWc0ZShNLHYpLFouaW5kZXhPZigiaHRMZWZ0Iik8MCYmWi5pbmRleE9mKCJodENlbnRlciIpPDAmJlouaW5kZXhPZigiaHRSaWdodCIpPDAmJlouaW5kZXhPZigiaHRKdXN0aWZ5Iik8MCYmWi5wdXNoKCJodFJpZ2h0IiksWi5pbmRleE9mKCJodE51bWVyaWMiKTwwJiZaLnB1c2goImh0TnVt''@;'; put 'put ''ZXJpYyIpLHYuY2xhc3NOYW1lPVouam9pbigiICIpLGwuZGlyPSJsdHIifUFnKGMsbCxhLGQsaCxNLHYpfWZ1bmN0aW9uIG9KKGMsbCxhLGQsaCxmLHYpe0FnLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKTtjb25zdCBEPXYuaGFzaFN5bWJvbHx8IioiO2xldCBaPSIiO0dhKCh2Lmhhc2hM''@;'; put 'put ''ZW5ndGh8fGwuaW5uZXJIVE1MLmxlbmd0aCktMSwoKT0+e1orPUR9KSx6NyhsLFopfWZ1bmN0aW9uIHNKKGMsbCxhLGQsaCxmLHYpe0FnLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKX1mdW5jdGlvbiBsSihjLGwsYSxkLGgsZix2KXtBZy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSks''@;'; put 'put ''bC5kaXI9Imx0ciJ9ZnVuY3Rpb24gY1QoYyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSx0aGlzLmFsbG93RW1wdHkmJiIiPT09YT9sKCEwKTp0aGlzLnN0cmljdCYmdGhpcy5zb3VyY2U/ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc291cmNlP3RoaXMuc291cmNlKGEsbTRlKGEsbCkpOm00''@;'; put 'put ''ZShhLGwpKHRoaXMuc291cmNlKTpsKCEwKX1mdW5jdGlvbiBtNGUoYyxsKXtjb25zdCBhPWM7cmV0dXJuIGZ1bmN0aW9uKGQpe2xldCBoPSExO2ZvcihsZXQgZj0wLHY9ZC5sZW5ndGg7Zjx2O2YrKylpZihhPT09ZFtmXSl7aD0hMDticmVha31sKGgpfX1mdW5jdGlvbiB2NGUoYyl7Y29uc3Qg''@;'; put 'put ''bD1uZXcgRGF0ZShjKTtyZXR1cm4gaXNOYU4obmV3IERhdGUoYCR7Y31UMDA6MDBgKS5nZXREYXRlKCkpP2w6bmV3IERhdGUobC5nZXRUaW1lKCkrNmU0KmwuZ2V0VGltZXpvbmVPZmZzZXQoKSl9ZnVuY3Rpb24gS1AoYyxsKXtjb25zdCBhPWhmZShZcGUsdGhpcy5pbnN0YW5jZSk7bGV0IGQ9''@;'; put 'put ''YyxoPSEwO251bGw9PWQmJihkPSIiKTtsZXQgZj1PbyhkLHRoaXMuZGF0ZUZvcm1hdHx8YS5kZWZhdWx0RGF0ZUZvcm1hdCwhMCkuaXNWYWxpZCgpLHY9T28obmV3IERhdGUoZCkpLmlzVmFsaWQoKXx8ZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09ZCYmKHY9ITAsZj0hMCksdnx8KGg9ITEp''@;'; put 'put ''LCF2JiZmJiYoaD0hMCksdiYmIWYpaWYoITA9PT10aGlzLmNvcnJlY3RGb3JtYXQpe2NvbnN0IE09ZnVuY3Rpb24gb3N0KGMsbCl7Y29uc3QgYT1Pbyh2NGUoYykpLGQ9T28oYyxsKSxoPWMuc2VhcmNoKC9bQS1aYS16XS9nKT4tMTtsZXQgZjtyZXR1cm4gZj1hLmlzVmFsaWQoKSYmYS5mb3Jt''@;'; put 'put ''YXQoIngiKT09PWQuZm9ybWF0KCJ4Iil8fCFkLmlzVmFsaWQoKXx8aD9hOmQsZi5mb3JtYXQobCl9KGQsdGhpcy5kYXRlRm9ybWF0KTt0aGlzLmluc3RhbmNlLnNldERhdGFBdENlbGwodGhpcy52aXN1YWxSb3csdGhpcy52aXN1YWxDb2wsTSwiZGF0ZVZhbGlkYXRvciIpLGg9ITB9ZWxzZSBo''@;'; put 'put ''PSExO2woaCl9ZnVuY3Rpb24gY0ooYyxsKXtjVC5hcHBseSh0aGlzLFtjLGxdKX1mdW5jdGlvbiB1SihjLGwpe2xldCBhPWM7bnVsbD09YSYmKGE9IiIpLGwoISghdGhpcy5hbGxvd0VtcHR5fHwiIiE9PWEpfHwiIiE9PWEmJm0xKGMpKX1hSi5SRU5ERVJFUl9UWVBFPSJudW1lcmljIixvSi5S''@;'; put 'put ''RU5ERVJFUl9UWVBFPSJwYXNzd29yZCIsc0ouUkVOREVSRVJfVFlQRT0ic2VsZWN0IixsSi5SRU5ERVJFUl9UWVBFPSJ0aW1lIixjVC5WQUxJREFUT1JfVFlQRT0iYXV0b2NvbXBsZXRlIixLUC5WQUxJREFUT1JfVFlQRT0iZGF0ZSIsY0ouVkFMSURBVE9SX1RZUEU9ImRyb3Bkb3duIix1Si5W''@;'; put 'put ''QUxJREFUT1JfVFlQRT0ibnVtZXJpYyI7Y29uc3QgY3N0PVsiWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaIiwiWCIsIngiXTtmdW5jdGlvbiBxUChjLGwpe2NvbnN0IGE9dGhpcy50aW1lRm9ybWF0fHwiaDptbTpzcyBhIjtsZXQgZD0hMCxoPWM7bnVsbD09PWgmJihoPSIiKSxoPS9eXGR7Myx9''@;'; put 'put ''JC8udGVzdChoKT9wYXJzZUludChoLDEwKTpoO2NvbnN0IGY9L15cZHsxLDJ9JC8udGVzdChoKTtmJiYoaCs9IjowMCIpO2NvbnN0IHY9T28oaCxjc3QsITApLmlzVmFsaWQoKT9PbyhoKTpPbyhoLGEpO2xldCBNPXYuaXNWYWxpZCgpLEQ9T28oaCxhLCEwKS5pc1ZhbGlkKCkmJiFmO2lmKHRo''@;'; put 'put ''aXMuYWxsb3dFbXB0eSYmIiI9PT1oJiYoTT0hMCxEPSEwKSxNfHwoZD0hMSksIU0mJkQmJihkPSEwKSxNJiYhRClpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3QgWj12LmZvcm1hdChhKTt0aGlzLmluc3RhbmNlLnNldERhdGFBdENlbGwodGhpcy52aXN1YWxSb3csdGhpcy52aXN1''@;'; put 'put ''YWxDb2wsWiwidGltZVZhbGlkYXRvciIpLGQ9ITB9ZWxzZSBkPSExO2woZCl9cVAuVkFMSURBVE9SX1RZUEU9InRpbWUiO2NvbnN0IGhzdD17Q0VMTF9UWVBFOiJhdXRvY29tcGxldGUiLGVkaXRvcjpIWCxyZW5kZXJlcjpJXyx2YWxpZGF0b3I6Y1R9LGZzdD17Q0VMTF9UWVBFOiJjaGVja2Jv''@;'; put 'put ''eCIsZWRpdG9yOkJwZSxyZW5kZXJlcjokWH07ZnVuY3Rpb24gYjRlKGMsbCxhLGQsaCxmLHYpe0lfLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKX1iNGUuUkVOREVSRVJfVFlQRT0iZGF0ZSI7Y29uc3QgZ3N0PXtDRUxMX1RZUEU6ImRhdGUiLGVkaXRvcjokcGUscmVuZGVyZXI6YjRlLHZh''@;'; put 'put ''bGlkYXRvcjpLUH0sbXN0PXtDRUxMX1RZUEU6ImRyb3Bkb3duIixlZGl0b3I6S3BlLHJlbmRlcmVyOkdYLHZhbGlkYXRvcjpjSixmaWx0ZXI6ITEsc3RyaWN0OiEwfSx2c3Q9e0NFTExfVFlQRToiaGFuZHNvbnRhYmxlIixlZGl0b3I6UlgscmVuZGVyZXI6cVh9LGJzdD17Q0VMTF9UWVBFOiJu''@;'; put 'put ''dW1lcmljIixlZGl0b3I6cXBlLHJlbmRlcmVyOmFKLHZhbGlkYXRvcjp1SixkYXRhVHlwZToibnVtYmVyIn0seXN0PXtDRUxMX1RZUEU6InBhc3N3b3JkIixlZGl0b3I6WHBlLHJlbmRlcmVyOm9KLGNvcHlhYmxlOiExfSxfc3Q9e0NFTExfVFlQRToic2VsZWN0IixlZGl0b3I6UXBlLHJlbmRl''@;'; put 'put ''cmVyOnNKfSx3c3Q9e0NFTExfVFlQRToidGltZSIsZWRpdG9yOmU0ZSxyZW5kZXJlcjpsSix2YWxpZGF0b3I6cVB9O2Z1bmN0aW9uIHk0ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdp''@;'; put 'put ''Y2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUF8oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhzdChjKXt2YXIgbD1mdW5jdGlvbiBFc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2''@;'; put 'put ''YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9''@;'; put 'put ''KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEZfKGMsbCl7cmV0dXJu''@;'; put 'put ''IGMuZ2V0KF80ZShjLGwpKX1mdW5jdGlvbiBfNGUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlz''@;'; put 'put ''IG9iamVjdCIpfWNvbnN0IHc0ZT1uZXcgTWFwKFtbInBsdWdpbiIsZnVuY3Rpb24gb0plKGMpe3JldHVybiEhSUUoYyl9XSxbImNlbGwtdHlwZSIsYXBlXSxbImVkaXRvciIsZGZlXSxbInJlbmRlcmVyIixTZmVdLFsidmFsaWRhdG9yIixNZmVdXSksQzRlPVN5bWJvbCgibWFpblNldHRpbmci''@;'; put 'put ''KSxYUD1bXTtsZXQgYzk9bnVsbDt2YXIgdTk9bmV3IFdlYWtNYXAsUzRlPW5ldyBXZWFrU2V0O2NsYXNzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJiYXNlIn1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblt0aGlzLlBMVUdJTl9LRVldfXN0YXRpYyBnZXQgREVG''@;'; put 'put ''QVVMVF9TRVRUSU5HUygpe3JldHVybnt9fWNvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBTc3QoYyxsKXt5NGUoYyxsKSxsLmFkZChjKX0pKHRoaXMsUzRlKSxQXyh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBqMih0aGlzKSksUF8odGhpcywicGx1Z2luTmFtZSIsbnVsbCksUF8odGhpcywicGx1''@;'; put 'put ''Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzIixbXSksUF8odGhpcywiaXNQbHVnaW5zUmVhZHkiLCExKSxQXyh0aGlzLCJlbmFibGVkIiwhMSksUF8odGhpcywiaW5pdGlhbGl6ZWQiLCExKSxmdW5jdGlvbiBNc3QoYyxsLGEpe3k0ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsdTkse30pLFRwKHRo''@;'; put 'put ''aXMsImhvdCIsbCx7d3JpdGFibGU6ITF9KSxjOT1udWxsLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwoKT0+dGhpcy5vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGE9PnRoaXMub25V''@;'; put 'put ''cGRhdGVTZXR0aW5ncyhhKSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlSW5pdCIsKCk9PnRoaXMuaW5pdCgpKX1pbml0KCl7dGhpcy5wbHVnaW5OYW1lPXRoaXMuaG90LmdldFBsdWdpbk5hbWUodGhpcyk7Y29uc3QgbD10aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9ERVBTLGE9QXJyYXkuaXNB''@;'; put 'put ''cnJheShsKT9sOltdO2lmKGEubGVuZ3RoPjApe2NvbnN0IGg9W107aWYoYS5mb3JFYWNoKGY9Pntjb25zdFt2LE1dPWYuc3BsaXQoIjoiKTtpZighdzRlLmhhcyh2KSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGx1Z2luIGRlcGVuZGVuY3kgdHlwZSAiJHt2fSIgd2FzIGZvdW5kLmApO3c0''@;'; put 'put ''ZS5nZXQodikoTSl8fGgucHVzaChgIC0gJHtNfSAoJHt2fSlgKX0pLGgubGVuZ3RoPjApe2NvbnN0IGY9W2BUaGUgJHt0aGlzLnBsdWdpbk5hbWV9IHBsdWdpbiByZXF1aXJlcyB0aGUgZm9sbG93aW5nIG1vZHVsZXM6XG5gLGAke2guam9pbigiXG4iKX1cbmBdLmpvaW4oIiIpO1hQLnB1c2go''@;'; put 'put ''Zil9fWlmKGM5fHwoYzk9bksoKSksYzkuaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpPj0wJiZjOS5zcGxpY2UoYzkuaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpLDEpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsKCk9Pnt0aGlzLmlzRW5hYmxlZCYmdGhp''@;'; put 'put ''cy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKX0pLDA9PT1jOS5sZW5ndGgpe2lmKFhQLmxlbmd0aD4wKXtjb25zdCBoPVtgJHtYUC5qb2luKCJcbiIpfVxuYCwiWW91IGhhdmUgdG8gaW1wb3J0IGFuZCByZWdpc3RlciB0aGVtIG1hbnVhbGx5LiJdLmpvaW4oIiIpO3Rocm93IFhQ''@;'; put 'put ''Lmxlbmd0aD0wLG5ldyBFcnJvcihoKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiKX10aGlzLmluaXRpYWxpemVkPSEwfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZD0hMH1kaXNhYmxlUGx1Z2luKCl7dmFyIGw7bnVsbD09PShsPXRoaXMuZXZlbnRNYW5h''@;'; put 'put ''Z2VyKXx8dm9pZCAwPT09bHx8bC5jbGVhcigpLHRoaXMuY2xlYXJIb29rcygpLHRoaXMuZW5hYmxlZD0hMX1nZXRTZXR0aW5nKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9LRVldO2lmKHZvaWQgMD09PWwpcmV0dXJuIGE7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfU0VUVElOR1M7dmFyIGgsZjtyZXR1cm4oQXJyYXkuaXNBcnJheShhKXx8cW8oYSkpJiZkW0M0ZV09PT1sP0FycmF5LmlzQXJyYXkoYSk/YTpudWxsIT09KGg9YVtsXSkmJnZvaWQgMCE9PWg/aDpkW2xdOnFvKGEpJiZudWxsIT09KGY9YVtsXSkm''@;'; put 'put ''JnZvaWQgMCE9PWY/ZjpkW2xdfWFkZEhvb2sobCxhLGQpe0ZfKHU5LHRoaXMpW2xdPUZfKHU5LHRoaXMpW2xdfHxbXTtjb25zdCBoPUZfKHU5LHRoaXMpW2xdO3RoaXMuaG90LmFkZEhvb2sobCxhLGQpLGgucHVzaChhKSxGXyh1OSx0aGlzKVtsXT1ofXJlbW92ZUhvb2tzKGwpe1luKEZfKHU5''@;'; put 'put ''LHRoaXMpW2xdfHxbXSxhPT57dGhpcy5ob3QucmVtb3ZlSG9vayhsLGEpfSl9Y2xlYXJIb29rcygpe2NvbnN0IGw9Rl8odTksdGhpcyk7WG8obCwoYSxkKT0+dGhpcy5yZW1vdmVIb29rcyhkKSksbC5sZW5ndGg9MH1jYWxsT25QbHVnaW5zUmVhZHkobCl7dGhpcy5pc1BsdWdpbnNSZWFkeT9s''@;'; put 'put ''KCk6dGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MucHVzaChsKX1vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCl7WW4odGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MsbD0+bCgpKSx0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5sZW5ndGg9MCx0aGlzLmlz''@;'; put 'put ''UGx1Z2luc1JlYWR5PSEwfW9uVXBkYXRlU2V0dGluZ3MobCl7Y29uc3QgYT1fNGUoUzRlLHRoaXMsQXN0KS5jYWxsKHRoaXMsbCk7dGhpcy5pc0VuYWJsZWQmJih0aGlzLmVuYWJsZWQmJiF0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmRpc2FibGVQbHVnaW4oKSwhdGhpcy5lbmFibGVkJiZ0aGlz''@;'; put 'put ''LmlzRW5hYmxlZCgpJiZ0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmYSYmdGhpcy51cGRhdGVQbHVnaW4obCkpfXVwZGF0ZVBsdWdpbigpe31kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPXRoaXMuZXZlbnRNYW5hZ2VyKXx8dm9pZCAwPT09bHx8''@;'; put 'put ''bC5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCksWG8odGhpcywoYSxkKT0+eyJob3QiIT09ZCYmKHRoaXNbZF09bnVsbCl9KSxkZWxldGUgdGhpcy50LGRlbGV0ZSB0aGlzLmhvdH19ZnVuY3Rpb24gQXN0KGMpe2lmKCFjKXJldHVybiExO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5TRVRU''@;'; put 'put ''SU5HX0tFWVM7aWYoImJvb2xlYW4iPT10eXBlb2YgbClyZXR1cm4gbDtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKylpZih2b2lkIDAhPT1jW2xbYV1dKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGQ5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBrc3QoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''RHN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBkSj1jbGFzcyBJc3R7Y29uc3RydWN0b3IobCl7ZDkodGhpcywiaG90IixudWxsKSxkOSh0aGlzLCJjb250YWluZXIiLG51bGwpLGQ5KHRoaXMsImluamVjdGVkIiwh''@;'; put 'put ''MSksZDkodGhpcywicm93cyIsW10pLGQ5KHRoaXMsImNvbHVtbnMiLFtdKSxkOSh0aGlzLCJzYW1wbGVzIixudWxsKSxkOSh0aGlzLCJzZXR0aW5ncyIse3VzZUhlYWRlcnM6ITB9KSx0aGlzLmhvdD1sfWFkZFJvdyhsLGEpe2lmKHRoaXMuY29sdW1ucy5sZW5ndGgpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJEb2Vzbid0IHN1cHBvcnQgbXVsdGktZGltZW5zaW9uYWwgdGFibGUiKTt0aGlzLnJvd3MubGVuZ3RofHwodGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSk7Y29uc3QgZD17cm93Omx9O3RoaXMucm93cy5wdXNoKGQp''@;'; put 'put ''LHRoaXMuc2FtcGxlcz1hLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2wobCkpLHRoaXMudGFibGUudHIuYXBwZW5kQ2hpbGQodGhpcy5jcmVh''@;'; put 'put ''dGVSb3cobCkpLDA9PT1sJiZUaSh0aGlzLnRhYmxlLnRhYmxlLCJodEdob3N0VGFibGVGaXJzdFJvdyIpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFibGUudGFibGV9YWRkQ29sdW1uSGVhZGVyc1Jvdyhs''@;'; put 'put ''KXtpZihudWxsIT10aGlzLmhvdC5nZXRDb2xIZWFkZXIoMCkpe2NvbnN0IGQ9e3JvdzotMX07dGhpcy5yb3dzLnB1c2goZCksdGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSx0aGlzLnNhbXBsZXM9bCx0aGlzLnRhYmxl''@;'; put 'put ''PXRoaXMuY3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1lKSx0aGlzLnRhYmxlLmNvbEdyb3VwLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sR3JvdXBzQ29sKCkpLHRoaXMuYXBwZW5kQ29sdW1uSGVhZGVyc1JvdygpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRD''@;'; put 'put ''aGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFibGUudGFibGV9fWFkZENvbHVtbihsLGEpe2lmKHRoaXMucm93cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJEb2Vzbid0IHN1cHBvcnQgbXVsdGktZGltZW5zaW9uYWwgdGFibGUiKTt0aGlzLmNvbHVtbnMubGVuZ3Ro''@;'; put 'put ''fHwodGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSk7Y29uc3QgZD17Y29sOmx9O3RoaXMuY29sdW1ucy5wdXNoKGQpLHRoaXMuc2FtcGxlcz1hLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJs''@;'; put 'put ''ZS5jbGFzc05hbWUpLHRoaXMuZ2V0U2V0dGluZygidXNlSGVhZGVycyIpJiZudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGwpJiZ0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihsLHRoaXMudGFibGUudGgsdm9pZCAwLC0xKSx0aGlzLnRhYmxlLnRCb2R5LmFwcGVuZENoaWxkKHRo''@;'; put 'put ''aXMuY3JlYXRlQ29sKGwpKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWdldEhlaWdodHMobCl7dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLFluKHRoaXMucm93cyxhPT57''@;'; put 'put ''Y29uc3R7aGVpZ2h0OmR9PWEudGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bChhLnJvdyxNYXRoLmNlaWwoZCkpfSl9Z2V0V2lkdGhzKGwpe3RoaXMuaW5qZWN0ZWR8fHRoaXMuaW5qZWN0VGFibGUoKSxZbih0aGlzLmNvbHVtbnMsYT0+e2NvbnN0e3dpZHRoOmR9PWEudGFibGUuZ2V0''@;'; put 'put ''Qm91bmRpbmdDbGllbnRSZWN0KCk7bChhLmNvbCxNYXRoLmNlaWwoZCkpfSl9c2V0U2V0dGluZ3MobCl7dGhpcy5zZXR0aW5ncz1sfXNldFNldHRpbmcobCxhKXt0aGlzLnNldHRpbmdzfHwodGhpcy5zZXR0aW5ncz17fSksdGhpcy5zZXR0aW5nc1tsXT1hfWdldFNldHRpbmdzKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuc2V0dGluZ3N9Z2V0U2V0dGluZyhsKXtyZXR1cm4gdGhpcy5zZXR0aW5ncz90aGlzLnNldHRpbmdzW2xdOm51bGx9Y3JlYXRlQ29sR3JvdXBzQ29sKGwpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gdGhpcy5ob3Qu''@;'; put 'put ''aGFzUm93SGVhZGVycygpJiZhLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudCgtMSwtMSkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGQ9PntZbihkLnN0cmluZ3MsaD0+e2EuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xFbGVtZW50KGguY29sLGwpKX0pfSksYX1jcmVhdGVSb3co''@;'; put 'put ''bCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoInRoIik7cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmKHRoaXMuaG90LnZpZXcuYXBwZW5kUm93SGVhZGVyKGwsaCksZC5hcHBlbmRD''@;'; put 'put ''aGlsZChoKSksdGhpcy5zYW1wbGVzLmZvckVhY2goZj0+e1luKGYuc3RyaW5ncyx2PT57Y29uc3QgTT12LmNvbCxEPXRoaXMuaG90LmdldENlbGxNZXRhKGwsTSksWj10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoRCkscmU9YS5jcmVhdGVFbGVtZW50KCJ0ZCIpO3JlLnNldEF0dHJpYnV0ZSgi''@;'; put 'put ''Z2hvc3QtdGFibGUiLDEpLFoodGhpcy5ob3QscmUsbCxNLHRoaXMuaG90LmNvbFRvUHJvcChNKSx2LnZhbHVlLEQpLGQuYXBwZW5kQ2hpbGQocmUpfSl9KSxkfWFwcGVuZENvbHVtbkhlYWRlcnNSb3coKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3QsYT1sLmNyZWF0ZURvY3VtZW50''@;'; put 'put ''RnJhZ21lbnQoKSxkPVtdO2lmKHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSl7Y29uc3QgaD1sLmNyZWF0ZUVsZW1lbnQoInRoIik7ZC5wdXNoKFstMSxoXSksYS5hcHBlbmRDaGlsZChoKX10aGlzLnNhbXBsZXMuZm9yRWFjaChoPT57WW4oaC5zdHJpbmdzLGY9Pntjb25zdCB2PWYuY29sLE09''@;'; put 'put ''bC5jcmVhdGVFbGVtZW50KCJ0aCIpO2QucHVzaChbdixNXSksYS5hcHBlbmRDaGlsZChNKX0pfSksdGhpcy50YWJsZS50SGVhZC5hcHBlbmRDaGlsZChhKSxZbihkLGg9Pntjb25zdFtmLHZdPWg7dGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIoZix2KX0pfWNyZWF0ZUNvbChsKXtjb25z''@;'; put 'put ''dHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gdGhpcy5zYW1wbGVzLmZvckVhY2goaD0+e1luKGguc3RyaW5ncyxmPT57Y29uc3Qgdj1mLnJvdyxNPXRoaXMuaG90LmdldENlbGxNZXRhKHYsbCksRD10aGlzLmhvdC5nZXRDZWxs''@;'; put 'put ''UmVuZGVyZXIoTSksWj1hLmNyZWF0ZUVsZW1lbnQoInRkIikscmU9YS5jcmVhdGVFbGVtZW50KCJ0ciIpO1ouc2V0QXR0cmlidXRlKCJnaG9zdC10YWJsZSIsMSksRCh0aGlzLmhvdCxaLHYsbCx0aGlzLmhvdC5jb2xUb1Byb3AobCksZi52YWx1ZSxNKSxyZS5hcHBlbmRDaGlsZChaKSxkLmFw''@;'; put 'put ''cGVuZENoaWxkKHJlKX0pfSksZH1jbGVhbigpe3RoaXMucm93cy5sZW5ndGg9MCx0aGlzLnJvd3NbLTFdPXZvaWQgMCx0aGlzLmNvbHVtbnMubGVuZ3RoPTAsdGhpcy5zYW1wbGVzJiZ0aGlzLnNhbXBsZXMuY2xlYXIoKSx0aGlzLnNhbXBsZXM9bnVsbCx0aGlzLnJlbW92ZVRhYmxlKCl9aW5q''@;'; put 'put ''ZWN0VGFibGUoKXt0aGlzLmluamVjdGVkfHwoKChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCl8fHRoaXMuaG90LnJvb3RFbGVtZW50KS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lci5mcmFnbWVudCksdGhpcy5pbmplY3RlZD0h''@;'; put 'put ''MCl9cmVtb3ZlVGFibGUoKXt0aGlzLmluamVjdGVkJiZ0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZSYmKHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyLmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVsbCx0''@;'; put 'put ''aGlzLmluamVjdGVkPSExKX1jcmVhdGVDb2xFbGVtZW50KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIik7bGV0IGg9MDthPj0wJiZsPj0wJiYoaD10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGwpLmNvbHNwYW4pO2xldCBmPXRoaXMuaG90Lmdl''@;'; put 'put ''dENvbFdpZHRoKGwpO2lmKGg+MSlmb3IobGV0IHY9bCsxO3Y8bCtoO3YrKylmKz10aGlzLmhvdC5nZXRDb2xXaWR0aCh2KTtyZXR1cm4gZC5zdHlsZS53aWR0aD1gJHtmfXB4YCxkfWNyZWF0ZVRhYmxlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/''@;'; put 'put ''YXJndW1lbnRzWzBdOiIiO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGY9YS5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHY9YS5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLE09YS5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJjb2xncm91cCIpLEQ9YS5jcmVhdGVFbGVtZW50KCJ0ciIpLFo9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmlzVmVydGljYWwoKSYmaC5hcHBlbmRDaGlsZChNKSx0aGlzLmlzSG9yaXpvbnRhbCgpJiYoRC5hcHBlbmRDaGlsZChaKSxmLmFwcGVuZENoaWxk''@;'; put 'put ''KEQpLGguc3R5bGUudGFibGVMYXlvdXQ9ImF1dG8iLGguc3R5bGUud2lkdGg9ImF1dG8iKSxoLmFwcGVuZENoaWxkKGYpLHRoaXMuaXNWZXJ0aWNhbCgpJiZ2LmFwcGVuZENoaWxkKEQpLGguYXBwZW5kQ2hpbGQodiksVGkoaCxsKSxkLmFwcGVuZENoaWxkKGgpLHtmcmFnbWVudDpkLHRhYmxl''@;'; put 'put ''OmgsdEhlYWQ6Zix0Qm9keTp2LGNvbEdyb3VwOk0sdHI6RCx0aDpafX1jcmVhdGVDb250YWluZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVE''@;'; put 'put ''b2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBUaShoLGBodEdob3N0VGFibGUgaHRBdXRvU2l6ZSAke2wudHJpbSgpfWApLGQuYXBwZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsY29udGFpbmVyOmh9fWlzVmVydGljYWwoKXtyZXR1cm4hKCF0aGlzLnJv''@;'; put 'put ''d3MubGVuZ3RofHx0aGlzLmNvbHVtbnMubGVuZ3RoKX1pc0hvcml6b250YWwoKXtyZXR1cm4hKCF0aGlzLmNvbHVtbnMubGVuZ3RofHx0aGlzLnJvd3MubGVuZ3RoKX19O2Z1bmN0aW9uIEpQKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBSc3QoYyl7dmFyIGw9ZnVuY3Rpb24gTHN0KGMsbCl7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1By''@;'; put 'put ''aW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVl''@;'; put 'put ''OmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBoSntzdGF0aWMgZ2V0IFNBTVBMRV9DT1VOVCgpe3JldHVybiAzfWNvbnN0cnVjdG9yKGwpe0pQKHRoaXMsInNhbXBsZXMiLG51bGwpLEpQKHRoaXMsImRhdGFGYWN0b3J5IixudWxs''@;'; put 'put ''KSxKUCh0aGlzLCJjdXN0b21TYW1wbGVDb3VudCIsbnVsbCksSlAodGhpcywiYWxsb3dEdXBsaWNhdGVzIiwhMSksdGhpcy5kYXRhRmFjdG9yeT1sfWdldFNhbXBsZUNvdW50KCl7cmV0dXJuIHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ/dGhpcy5jdXN0b21TYW1wbGVDb3VudDpoSi5TQU1QTEVf''@;'; put 'put ''Q09VTlR9c2V0U2FtcGxlQ291bnQobCl7dGhpcy5jdXN0b21TYW1wbGVDb3VudD1sfXNldEFsbG93RHVwbGljYXRlcyhsKXt0aGlzLmFsbG93RHVwbGljYXRlcz1sfWdlbmVyYXRlUm93U2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygicm93IixhLGwpfWdlbmVyYXRl''@;'; put 'put ''Q29sdW1uU2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygiY29sIixhLGwpfWdlbmVyYXRlU2FtcGxlcyhsLGEsZCl7Y29uc3QgaD1uZXcgTWFwLHtmcm9tOmYsdG86dn09Im51bWJlciI9PXR5cGVvZiBkP3tmcm9tOmQsdG86ZH06ZDtyZXR1cm4gR2EoZix2LE09Pntj''@;'; put 'put ''b25zdCBEPXRoaXMuZ2VuZXJhdGVTYW1wbGUobCxhLE0pO2guc2V0KE0sRCl9KSxofWdlbmVyYXRlU2FtcGxlKGwsYSxkKXtpZigicm93IiE9PWwmJiJjb2wiIT09bCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNhbXBsZSB0eXBlIik7Y29uc3QgaD1uZXcgTWFwLGY9InJvdyI9PT1s''@;'; put 'put ''PyJjb2wiOiJyb3ciLHY9W107cmV0dXJuIEdhKGEuZnJvbSxhLnRvLE09Pntjb25zdCBEPSJyb3ciPT09bD90aGlzLmRhdGFGYWN0b3J5KGQsTSk6dGhpcy5kYXRhRmFjdG9yeShNLGQpO2lmKCExPT09RClyZXR1cm47Y29uc3R7dmFsdWU6WixidW5kbGVTZWVkOnJlfT1ELGNlPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgcmUmJnJlLmxlbmd0aD4wO2xldCBiZTtiZT1jZT9yZTpxbyhaKT9gJHtPYmplY3Qua2V5cyhaKS5sZW5ndGh9YDpBcnJheS5pc0FycmF5KFopP2Ake1oubGVuZ3RofWA6YCR7bGMoWikubGVuZ3RofWAsaC5oYXMoYmUpfHxoLnNldChiZSx7bmVlZGVkOnRoaXMuZ2V0U2FtcGxl''@;'; put 'put ''Q291bnQoKSxzdHJpbmdzOltdfSk7Y29uc3QgRWU9aC5nZXQoYmUpO0VlLm5lZWRlZCYmKCEodi5pbmRleE9mKFopPi0xKXx8dGhpcy5hbGxvd0R1cGxpY2F0ZXN8fGNlKSYmKEVlLnN0cmluZ3MucHVzaCh7dmFsdWU6WixbZl06TX0pLHYucHVzaChaKSxFZS5uZWVkZWQtPTEpfSksaH19Y29u''@;'; put 'put ''c3QgTTRlPWhKO2Z1bmN0aW9uIGZKKGMsbCxhKXt4NGUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHg0ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9''@;'; put 'put ''ZnVuY3Rpb24gdVQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFBzdChjKXt2YXIgbD1mdW5jdGlvbiBGc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwi''@;'; put 'put ''ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy''@;'; put 'put ''biJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEttKGMsbCl7cmV0dXJuIGMuZ2V0KHpkKGMsbCkpfWZ1''@;'; put 'put ''bmN0aW9uIFFQKGMsbCxhKXtyZXR1cm4gYy5zZXQoemQoYyxsKSxhKSxhfWZ1bmN0aW9uIHpkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l''@;'; put 'put ''bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIik7Y29uc3QgcEo9ImF1dG9Db2x1bW5TaXplIjt2YXIgZ0o9bmV3IFdlYWtNYXAsSF89bmV3IFdlYWtNYXAsTl89bmV3IFdlYWtNYXAs''@;'; put 'put ''T2g9bmV3IFdlYWtTZXQ7Y2xhc3MgZFQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gcEp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VU''@;'; put 'put ''VElOR1MoKXtyZXR1cm57dXNlSGVhZGVyczohMCxzYW1wbGluZ1JhdGlvOm51bGwsYWxsb3dTYW1wbGVEdXBsaWNhdGVzOiExfX1zdGF0aWMgZ2V0IENBTENVTEFUSU9OX1NURVAoKXtyZXR1cm4gNTB9c3RhdGljIGdldCBTWU5DX0NBTENVTEFUSU9OX0xJTUlUKCl7cmV0dXJuIDUwfWNvbnN0''@;'; put 'put ''cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIE9zdChjLGwpe3g0ZShjLGwpLGwuYWRkKGMpfSh0aGlzLE9oKSx1VCh0aGlzLCJnaG9zdFRhYmxlIixuZXcgZEoodGhpcy5ob3QpKSx1VCh0aGlzLCJzYW1wbGVzR2VuZXJhdG9yIixuZXcgTTRlKChhLGQpPT57Y29uc3QgaD10aGlzLmhvdC50''@;'; put 'put ''b1BoeXNpY2FsUm93KGEpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihkKTtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihoKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oZikpcmV0dXJuITE7Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0YShh''@;'; put 'put ''LGQpO2xldCBNPSIiO3Yuc3Bhbm5lZHx8KE09dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChhLGQpKTtsZXQgRD0iIjtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIikmJihEPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQi''@;'; put 'put ''LEQsdixNKSkse3ZhbHVlOk0sYnVuZGxlU2VlZDpEfX0pKSx1VCh0aGlzLCJpblByb2dyZXNzIiwhMSksdVQodGhpcywibWVhc3VyZWRDb2x1bW5zIiwwKSx1VCh0aGlzLCJjb2x1bW5XaWR0aHNNYXAiLG5ldyBabSksZkoodGhpcyxnSiwhMSksZkoodGhpcyxIXyxbXSksZkoodGhpcyxOXyxb''@;'; put 'put ''XSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImF1dG9Db2x1bW5TaXplIix0aGlzLmNvbHVtbldpZHRoc01hcCksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChhLGQsaCk9PnpkKE9oLHRoaXMsQTRlKS5jYWxsKHRoaXMsYSxkLGgpKX1pc0VuYWJs''@;'; put 'put ''ZWQoKXtyZXR1cm4hMSE9PXRoaXMuaG90LmdldFNldHRpbmdzKClbcEpdJiYhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5jb2xXaWR0aHN9ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuZ2hvc3RUYWJsZS5zZXRTZXR0aW5nKCJ1c2VIZWFkZXJz''@;'; put 'put ''Iix0aGlzLmdldFNldHRpbmcoInVzZUhlYWRlcnMiKSksdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldEFsbG93RHVwbGljYXRlcyh0aGlzLmdldFNldHRpbmcoImFsbG93U2FtcGxlRHVwbGljYXRlcyIpKTtjb25zdCBhPXRoaXMuZ2V0U2V0dGluZygic2FtcGxpbmdSYXRpbyIpO2EmJiFpc05h''@;'; put 'put ''TihhKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KGEsMTApKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVu''@;'; put 'put ''dHNbZl07cmV0dXJuIHpkKE9oLGwsanN0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4g''@;'; put 'put ''emQoT2gsbCx6c3QpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gemQoT2gs''@;'; put 'put ''bCxac3QpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyIiwoKT0+emQoT2gsdGhpcyxCc3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLChkLGgpPT50aGlzLmdldENvbHVtbldpZHRoKGgsZCkpLHRoaXMuYWRkSG9vaygiaW5pdCIs''@;'; put 'put ''KCk9PnpkKE9oLHRoaXMsVXN0KS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtRUChOXyx0aGlzLHRoaXMuZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQoKSksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRp''@;'; put 'put ''c2FibGVQbHVnaW4oKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKGwsYSxkKT0+emQoT2gsdGhpcyxBNGUpLmNhbGwodGhpcyxsLGEsZCkpfWNhbGN1bGF0ZVZpc2libGVDb2x1bW5zV2lkdGgoKXtpZighdGhpcy5ob3QuY291bnRSb3dzKCkpcmV0dXJuO2NvbnN0IGw9dGhp''@;'; put 'put ''cy5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSxhPXRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTstMSE9PWwmJi0xIT09YSYmdGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206bCx0bzphfSx2b2lkIDAsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyKX1jYWxjdWxhdGVDb2x1bW5zV2lk''@;'; put 'put ''dGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7ZnJvbTow''@;'; put 'put ''LHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9OmwsZj0ibnVtYmVyIj09dHlwZW9mIGE/e2Zyb206YSx0bzphfTph''@;'; put 'put ''O0dhKGguZnJvbSxoLnRvLHY9PntsZXQgTT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYpO251bGw9PT1NJiYoTT12KSwoZHx8bnVsbD09PXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChNKSYmIXRoaXMuaG90Ll9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyhNKSkmJnpk''@;'; put 'put ''KE9oLHRoaXMsRTRlKS5jYWxsKHRoaXMsdixmKX0pLHRoaXMuZ2hvc3RUYWJsZS5jb2x1bW5zLmxlbmd0aCYmKHpkKE9oLHRoaXMsVDRlKS5jYWxsKHRoaXMpLHRoaXMubWVhc3VyZWRDb2x1bW5zPWgudG8rMSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9Y2FsY3VsYXRlQWxsQ29sdW1uc1dp''@;'; put 'put ''ZHRoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9MDtj''@;'; put 'put ''b25zdCBoPXRoaXMuaG90LmNvdW50Q29scygpLTE7bGV0IGY9bnVsbDt0aGlzLmluUHJvZ3Jlc3M9ITA7Y29uc3Qgdj0oKT0+e2lmKCF0aGlzLmhvdClyZXR1cm4gVEUoZiksdm9pZCh0aGlzLmluUHJvZ3Jlc3M9ITEpO3RoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOmQsdG86TWF0''@;'; put 'put ''aC5taW4oZCtkVC5DQUxDVUxBVElPTl9TVEVQLGgpfSxsLGEpLGQ9ZCtkVC5DQUxDVUxBVElPTl9TVEVQKzEsZDxoP2Y9RUUodik6KFRFKGYpLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0sTT10aGlzLmdldFN5bmNDYWxjdWxhdGlvbkxp''@;'; put 'put ''bWl0KCk7TT49MCYmKHRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOjAsdG86TX0sbCxhKSxkPU0rMSksZDxoP3YoKTp0aGlzLmluUHJvZ3Jlc3M9ITF9cmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKXt0aGlzLmhvdC52aWV3LmlzVmlzaWJsZSgpJiZ0aGlzLmNhbGN1bGF0ZUFs''@;'; put 'put ''bENvbHVtbnNXaWR0aCh7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LCEwKX1nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtwSl07bGV0IGE9ZFQuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNv''@;'; put 'put ''dW50Q29scygpLTE7cmV0dXJuIHFvKGwpJiYoYT1sLnN5bmNMaW1pdCxmJChhKT9hPUokKGQsYSk6YT4+PTApLE1hdGgubWluKGEsZCl9Z2V0Q29sdW1uV2lkdGgobCxhKXtsZXQgZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLGg9''@;'; put 'put ''YTtyZXR1cm4gdm9pZCAwPT09aCYmKGg9dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpLGQmJiJudW1iZXIiPT10eXBlb2YgaCYmKGg9TWF0aC5tYXgoaCxfXykpKSxofWdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3ZhciBs''@;'; put 'put ''O3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSkmJnZvaWQgMCE9PWw/bDotMX1nZXRMYXN0VmlzaWJsZUNvbHVtbigpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpKSYm''@;'; put 'put ''dm9pZCAwIT09bD9sOi0xfWZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuaG90LmdldENvbEhlYWRlcigpLnJlZHVjZSgoZCxoLGYpPT57Y29uc3Qgdj1LbShIXyx0aGlzKS5sZW5ndGg7cmV0dXJuKHYtMTxmfHxLbShIXyx0aGlzKVtmXSE9PWgpJiZkLnB1''@;'; put 'put ''c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZikpLHYtMTxmP0ttKEhfLHRoaXMpLnB1c2goaCk6S20oSF8sdGhpcylbZl09aCxkfSxbXSl9Y2xlYXJDYWNoZShsKXtBcnJheS5pc0FycmF5KGwpP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bC5mb3JFYWNoKGE9Pnt0aGlzLmNvbHVt''@;'; put 'put ''bldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxudWxsKX0pfSwhMCk6dGhpcy5jb2x1bW5XaWR0aHNNYXAuY2xlYXIoKX1pc05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhdGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkQ29sdW1ucykuZmls''@;'; put 'put ''dGVyKGw9Pm51bGw9PT1sKS5sZW5ndGh9ZGVzdHJveSgpe3RoaXMuZ2hvc3RUYWJsZS5jbGVhbigpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVnN0KGMpe2NvbnN0IGw9e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfTtjLmZvckVhY2goYT0+e2NvbnN0IGQ9dGhpcy5ob3Qu''@;'; put 'put ''dG9QaHlzaWNhbENvbHVtbihhKTtudWxsIT09ZCYmKHRoaXMuaG90Ll9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyhkKXx8emQoT2gsdGhpcyxFNGUpLmNhbGwodGhpcyxhLGwpKX0pLHRoaXMuZ2hvc3RUYWJsZS5jb2x1bW5zLmxlbmd0aCYmKHpkKE9oLHRoaXMsVDRlKS5jYWxsKHRoaXMpLHRo''@;'; put 'put ''aXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1mdW5jdGlvbiBFNGUoYyxsKXt0aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVDb2x1bW5TYW1wbGVzKGMsbCkuZm9yRWFjaCgoZCxoKT0+dGhpcy5naG9zdFRhYmxlLmFkZENvbHVtbihoLGQpKX1mdW5jdGlvbiBUNGUoKXt0aGlzLmhvdC5iYXRj''@;'; put 'put ''aEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aHMoKGMsbCk9Pntjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYyk7dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbCl9KX0sITApfWZ1bmN0aW9uIEJzdCgpe3RoaXMuY2FsY3VsYXRl''@;'; put 'put ''VmlzaWJsZUNvbHVtbnNXaWR0aCgpLHRoaXMuaW5Qcm9ncmVzc3x8KHpkKE9oLHRoaXMsVnN0KS5jYWxsKHRoaXMsS20oTl8sdGhpcykpLFFQKE5fLHRoaXMsW10pKX1mdW5jdGlvbiBqc3QoYyxsKXtsfHx0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9ZnVuY3Rpb24genN0KGMp''@;'; put 'put ''e2NvbnN0IGw9Yy5yZWR1Y2UoKGEsZCk9PntsZXRbLGhdPWQ7Y29uc3QgZj10aGlzLmhvdC5wcm9wVG9Db2woaCk7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZikmJi0xPT09YS5pbmRleE9mKGYpJiZhLnB1c2goZiksYX0sW10pO0ttKE5fLHRoaXMpLnB1c2goLi4ubCl9ZnVuY3Rpb24gQTRl''@;'; put 'put ''KGMsbCxhKXtsZXQgZD1jO3JldHVybiBhJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgobCx2b2lkIDAsITApLGQ9dGhpcy5nZXRDb2x1bW5XaWR0aChsLHZvaWQgMCwhMSkpLGR9ZnVuY3Rpb24gVXN0KCl7UVAoSF8sdGhpcyx0aGlzLmhvdC5nZXRDb2xIZWFkZXIoKSksdGhpcy5yZWNh''@;'; put 'put ''bGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpLFFQKGdKLHRoaXMsITApfWZ1bmN0aW9uIFpzdChjKXtpZighS20oZ0osdGhpcykpcmV0dXJuO2NvbnN0IGw9Yy5yZWR1Y2UoKGEsZCk9Pnt2YXIgaDtjb25zdCBmPW51bGw9PT0oaD1kLmFkZHJlc3MpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmNvbDtp''@;'; put 'put ''ZihOdW1iZXIuaXNJbnRlZ2VyKGYpKXtjb25zdCB2PXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGYpOy0xPT09YS5pbmRleE9mKHYpJiZhLnB1c2godil9cmV0dXJuIGF9LFtdKTtLbShOXyx0aGlzKS5wdXNoKC4uLmwpfWNvbnN0IGg5PXtob3Jpem9udGFsOiJob3Jpem9udGFsIix2ZXJ0aWNh''@;'; put 'put ''bDoidmVydGljYWwifTtmdW5jdGlvbiBWXyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gS3N0KGMpe3ZhciBsPWZ1bmN0aW9uIHFzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk''@;'; put 'put ''PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi''@;'; put 'put ''c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gaFQoYyxsLGEpe2lmKCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlB''@;'; put 'put ''dXRvZmlsbFJhbmdlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUF1dG9maWxsIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQXV0b2ZpbGwiKTtjb25zdCBKc3Q9WyJmaWxsSGFuZGxlIl07dmFyIEJfPW5ldyBXZWFrU2V0O2NsYXNzIHRsdCBleHRlbmRz''@;'; put 'put ''IEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBHc3QoYyxsKXsoZnVuY3Rpb24gJHN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBv''@;'; put 'put ''YmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsQl8pLFZfKHRoaXMsImFkZGluZ1N0YXJ0ZWQiLCExKSxWXyh0aGlzLCJtb3VzZURvd25PbkNlbGxDb3JuZXIiLCExKSxWXyh0aGlzLCJtb3VzZURyYWdPdXRzaWRlIiwhMSksVl8odGhpcywiaGFuZGxlRHJhZ2dlZENlbGxzIiwwKSxWXyh0''@;'; put 'put ''aGlzLCJkaXJlY3Rpb25zIixbXSksVl8odGhpcywiYXV0b0luc2VydFJvdyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJhdXRvZmlsbCJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bImF1''@;'; put 'put ''dG9maWxsIiwuLi5Kc3RdfWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpbGxIYW5kbGV9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5tYXBTZXR0aW5ncygpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxs''@;'; put 'put ''Q29ybmVyTW91c2VEb3duIixsPT5oVChCXyx0aGlzLHJsdCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLGw9PmhUKEJfLHRoaXMsbmx0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIiwobCxh''@;'; put 'put ''KT0+aFQoQl8sdGhpcyxpbHQpLmNhbGwodGhpcyxhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJNYXBwZWRT''@;'; put 'put ''ZXR0aW5ncygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTZWxlY3Rpb25EYXRhKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtyb3c6YSxjb2w6ZH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6aCxjb2w6Zn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx2''@;'; put 'put ''PXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixbe3N0YXJ0Um93OmEsc3RhcnRDb2w6ZCxlbmRSb3c6aCxlbmRDb2w6Zn1dKSxNPVtdLEQ9W10sWj1bXTtyZXR1cm4gWW4odixyZT0+e2ZvcihsZXQgY2U9cmUuc3RhcnRSb3c7Y2U8PXJlLmVuZFJvdztjZSs9MSktMT09''@;'; put 'put ''PU0uaW5kZXhPZihjZSkmJk0ucHVzaChjZSk7Zm9yKGxldCBjZT1yZS5zdGFydENvbDtjZTw9cmUuZW5kQ29sO2NlKz0xKS0xPT09RC5pbmRleE9mKGNlKSYmRC5wdXNoKGNlKX0pLFluKE0scmU9Pntjb25zdCBjZT1bXTtZbihELGJlPT57Y2UucHVzaCh0aGlzLmhvdC5nZXRDb3B5YWJsZURh''@;'; put 'put ''dGEocmUsYmUpKX0pLFoucHVzaChjZSl9KSxafWZpbGxJbigpe2lmKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlzRW1wdHkoKSlyZXR1cm4hMTtjb25zdFtsLGEsZCxoXT10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3Ju''@;'; put 'put ''ZXJzKCksZj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9Zi5nZXRUb3BTdGFydENvcm5lcigpLE09Zi5nZXRCb3R0b21FbmRDb3JuZXIoKTt0aGlzLnJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpO2NvbnN0IEQ9W3Yucm93LHYuY29sLE0ucm93LE0uY29sXSxaPXRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixbTWF0aC5taW4odi5yb3csbCksTWF0aC5taW4odi5jb2wsYSksTWF0aC5tYXgoTS5yb3csZCksTWF0aC5tYXgoTS5jb2wsaCldLEQpLHtkaXJlY3Rpb25PZkRyYWc6cmUsc3RhcnRPZkRyYWdDb29yZHM6Y2UsZW5kT2ZEcmFnQ29v''@;'; put 'put ''cmRzOmJlfT1mdW5jdGlvbiBXc3QoYyxsLGEpe2xldCBkLGgsZjtyZXR1cm4gbFswXT09PWNbMF0mJmxbMV08Y1sxXT8oZj0ibGVmdCIsZD1hKGxbMF0sbFsxXSksaD1hKGxbMl0sY1sxXS0xKSk6bFsyXT09PWNbMl0mJmxbMF09PT1jWzBdJiZsWzNdPmNbM10/KGY9InJpZ2h0IixkPWEobFsw''@;'; put 'put ''XSxjWzNdKzEpLGg9YShsWzJdLGxbM10pKTpsWzBdPGNbMF0mJmxbMV09PT1jWzFdPyhmPSJ1cCIsZD1hKGxbMF0sbFsxXSksaD1hKGNbMF0tMSxsWzNdKSk6bFsyXT5jWzJdJiZsWzFdPT09Y1sxXSYmKGY9ImRvd24iLGQ9YShjWzJdKzEsbFsxXSksaD1hKGxbMl0sbFszXSkpLGQmJmQubm9y''@;'; put 'put ''bWFsaXplKCksaCYmaC5ub3JtYWxpemUoKSx7ZGlyZWN0aW9uT2ZEcmFnOmYsc3RhcnRPZkRyYWdDb29yZHM6ZCxlbmRPZkRyYWdDb29yZHM6aH19KEQsWiwoRWUsQmUpPT50aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhFZSxCZSkpO2lmKGNlJiZjZS5yb3c+LTEmJmNlLmNvbD4tMSl7Y29u''@;'; put 'put ''c3QgRWU9dGhpcy5nZXRTZWxlY3Rpb25EYXRhKCksQmU9Zi5jbG9uZSgpLHFlPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoY2UsY2UsYmUpLHJ0PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBdXRvZmlsbCIsRWUsQmUscWUscmUpO2lmKCExPT09cnQpcmV0dXJuIHRoaXMuaG90LnNlbGVj''@;'; put 'put ''dGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCksdGhpcy5ob3QucmVuZGVyKCksITE7bGV0IHB0PXJ0O2NvbnN0IGR0PXJ0O2lmKFsidXAiLCJsZWZ0Il0uaW5kZXhPZihyZSk+LTEmJigxIT09ZHQubGVuZ3RofHwwIT09ZHRbMF0ubGVuZ3RoKSlpZihwdD1bXSwidXAiPT09cmUpe2Nv''@;'; put 'put ''bnN0IEp0PWJlLnJvdy1jZS5yb3crMSx2bj1KdCVkdC5sZW5ndGg7Zm9yKGxldCBDbj0wO0NuPEp0O0NuKyspcHQucHVzaChkdFsoQ24rKGR0Lmxlbmd0aC12bikpJWR0Lmxlbmd0aF0pfWVsc2V7Y29uc3QgSnQ9YmUuY29sLWNlLmNvbCsxLHZuPUp0JWR0WzBdLmxlbmd0aDtmb3IobGV0IENu''@;'; put 'put ''PTA7Q248ZHQubGVuZ3RoO0NuKyspe3B0LnB1c2goW10pO2ZvcihsZXQgdG49MDt0bjxKdDt0bisrKXB0W0NuXS5wdXNoKGR0W0NuXVsodG4rKGR0W0NuXS5sZW5ndGgtdm4pKSVkdFtDbl0ubGVuZ3RoXSl9fXRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGNlLnJvdyxjZS5jb2wscHQsYmUu''@;'; put 'put ''cm93LGJlLmNvbCxgJHt0aGlzLnBsdWdpbk5hbWV9LmZpbGxgLG51bGwpLHRoaXMuc2V0U2VsZWN0aW9uKFopLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckF1dG9maWxsIixwdCxCZSxxZSxyZSksdGhpcy5ob3QucmVuZGVyKCl9ZWxzZSB0aGlzLmhvdC52aWV3LnJlbmRlcigpO3JldHVybiEw''@;'; put 'put ''fXJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChsKXtyZXR1cm4gbC5yb3c8MCYmKGwucm93PTApLGwuY29sPDAmJihsLmNvbD0wKSxsfWdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPWEuZ2V0Qm90dG9t''@;'; put 'put ''RW5kQ29ybmVyKCk7bGV0IGg9bDtpZih0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoaDkudmVydGljYWwpJiZ0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoaDkuaG9yaXpvbnRhbCkpe2NvbnN0IGY9YS5nZXRUb3BTdGFydENvcm5lcigpOyhkLmNvbDw9bC5jb2x8fGYuY29sPj1sLmNvbCkmJiho''@;'; put 'put ''PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGwuY29sKSksKGQucm93PGwucm93fHxmLnJvdz5sLnJvdykmJihoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQuY29sKSl9ZWxzZSBpZih0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoaDkudmVydGljYWwpKWg9dGhp''@;'; put 'put ''cy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csZC5jb2wpO2Vsc2V7aWYoIXRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhoOS5ob3Jpem9udGFsKSlyZXR1cm47aD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNvbCl9cmV0dXJuIHRoaXMucmVkdWNlU2VsZWN0aW9uQXJl''@;'; put 'put ''YUlmTmVlZGVkKGgpfXNob3dCb3JkZXIobCl7Y29uc3QgYT10aGlzLmdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGwpO2EmJnRoaXMucmVkcmF3Qm9yZGVycyhhKX1hZGRSb3coKXt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3df''@;'; put 'put ''YmVsb3ciLHZvaWQgMCwxLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGApLHRoaXMuYWRkaW5nU3RhcnRlZD0hMX0sMjAwKX1hZGROZXdSb3dJZk5lZWRlZCgpe2lmKCF0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5pc0VtcHR5KCkmJiExPT09dGhpcy5hZGRpbmdTdGFy''@;'; put 'put ''dGVkJiZ0aGlzLmF1dG9JbnNlcnRSb3cpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksYT10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksZD10aGlzLmhvdC5jb3VudFJvd3MoKTtsWzJdPGQtMSYmYVsyXT09PWQtMSYm''@;'; put 'put ''KHRoaXMuYWRkaW5nU3RhcnRlZD0hMCx0aGlzLmFkZFJvdygpKX19Z2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0RGF0YSgpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGg7Zm9yKGxldCBmPWxbMl0rMTtmPGQ7ZisrKXtmb3IobGV0''@;'; put 'put ''IEQ9bFsxXTtEPD1sWzNdO0QrKylpZighVWMoYVtmXVtEXSkpcmV0dXJuLTE7Y29uc3QgTT1hW2ZdW2xbM10rMV07KCFVYyhhW2ZdW2xbMV0tMV0pfHwhVWMoTSkpJiYoaD1mKX1yZXR1cm4gaH1hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KGwsYSl7dGhpcy5o''@;'; put 'put ''b3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobFswXSxsWzFdKSkuYWRkKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEsbFszXSkpLmNvbW1pdCgpfXNldFNlbGVjdGlvbihsKXt0aGlzLmhvdC5zZWxlY3RD''@;'; put 'put ''ZWxsKC4uLnlzKGwsYT0+TWF0aC5tYXgoYSwwKSksITEsITEpfXNlbGVjdEFkamFjZW50KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxhPXRoaXMuZ2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwpO3JldHVybi0xIT09YSYmdm9pZCAwIT09YSYmKHRoaXMu''@;'; put 'put ''YWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJbmRleChsLGEpLCEwKX1yZXNldFNlbGVjdGlvbk9mRHJhZ2dlZEFyZWEoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCl9cmVkcmF3Qm9y''@;'; put 'put ''ZGVycyhsKXt0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmZyb20pLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLnRvKS5hZGQobCkuY29tbWl0KCksdGhpcy5ob3Qudmll''@;'; put 'put ''dy5yZW5kZXIoKX1nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUobCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50OmF9PXRoaXMuaG90LnJvb3REb2N1bWVudCxkPVUwKHRoaXMuaG90LnRhYmxlKS50b3AtKHRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVlPZmZzZXR8fGEuc2Nyb2xsVG9wKSt4dSh0''@;'; put 'put ''aGlzLmhvdC50YWJsZSksaD1VMCh0aGlzLmhvdC50YWJsZSkubGVmdC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldHx8YS5zY3JvbGxMZWZ0KStzdSh0aGlzLmhvdC50YWJsZSk7cmV0dXJuIGwuY2xpZW50WT5kJiZsLmNsaWVudFg8PWh9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtk''@;'; put 'put ''b2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PmhUKEJfLHRoaXMsYWx0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92''@;'; put 'put ''ZSIsYT0+aFQoQl8sdGhpcyxvbHQpLmNhbGwodGhpcyxhKSl9Y2xlYXJNYXBwZWRTZXR0aW5ncygpe3RoaXMuZGlyZWN0aW9ucy5sZW5ndGg9MCx0aGlzLmF1dG9JbnNlcnRSb3c9ITF9bWFwU2V0dGluZ3MoKXtjb25zdCBsPWZ1bmN0aW9uIFlzdChjKXtjb25zdCBsPXt9O3JldHVybiEwPT09''@;'; put 'put ''Yz8obC5kaXJlY3Rpb25zPU9iamVjdC5rZXlzKGg5KSxsLmF1dG9JbnNlcnRSb3c9ITApOnFvKGMpPyhsLmF1dG9JbnNlcnRSb3c9ISFQYShjLmF1dG9JbnNlcnRSb3cpJiZjLmRpcmVjdGlvbiE9PWg5Lmhvcml6b250YWwmJmMuYXV0b0luc2VydFJvdyxsLmRpcmVjdGlvbnM9UGEoYy5kaXJl''@;'; put 'put ''Y3Rpb24pP1tjLmRpcmVjdGlvbl06T2JqZWN0LmtleXMoaDkpKToic3RyaW5nIj09dHlwZW9mIGM/KGwuZGlyZWN0aW9ucz1bY10sbC5hdXRvSW5zZXJ0Um93PSEwKToobC5kaXJlY3Rpb25zPVtdLGwuYXV0b0luc2VydFJvdz0hMSksbH0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFu''@;'; put 'put ''ZGxlKTt0aGlzLmRpcmVjdGlvbnM9bC5kaXJlY3Rpb25zLHRoaXMuYXV0b0luc2VydFJvdz1sLmF1dG9JbnNlcnRSb3d9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gbmx0KCl7dGhpcy5zZWxlY3RBZGphY2VudCgpJiZ0aGlzLmZpbGxJbigpfWZ1bmN0aW9uIHJsdCgpe3Ro''@;'; put 'put ''aXMuaGFuZGxlRHJhZ2dlZENlbGxzPTEsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITB9ZnVuY3Rpb24gaWx0KGMpe3RoaXMubW91c2VEb3duT25DZWxsQ29ybmVyJiYhdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRoaXMuaGFuZGxl''@;'; put 'put ''RHJhZ2dlZENlbGxzKz0xLHRoaXMuc2hvd0JvcmRlcihjKSx0aGlzLmFkZE5ld1Jvd0lmTmVlZGVkKCkpfWZ1bmN0aW9uIGFsdCgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MSYmdGhpcy5maWxsSW4oKSx0aGlzLmhhbmRsZURyYWdnZWRDZWxs''@;'; put 'put ''cz0wLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSExKX1mdW5jdGlvbiBvbHQoYyl7Y29uc3QgbD10aGlzLmdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZShjKTshMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MCYmbD8odGhpcy5tb3VzZURyYWdP''@;'; put 'put ''dXRzaWRlPSEwLHRoaXMuYWRkaW5nU3RhcnRlZD0hMCk6dGhpcy5tb3VzZURyYWdPdXRzaWRlPSExLHRoaXMubW91c2VEcmFnT3V0c2lkZSYmdGhpcy5hdXRvSW5zZXJ0Um93JiZ0aGlzLmFkZFJvdygpfWZ1bmN0aW9uIEQ0ZShjLGwsYSl7STRlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBJ''@;'; put 'put ''NGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGpfKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBsbHQoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''Y2x0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBSNGUoYyxsLGEpe3JldHVybiBjLnNldChCcChjLGwpLGEpLGF9ZnVuY3Rpb24gZUYoYyxsKXtyZXR1cm4gYy5nZXQoQnAoYyxsKSl9ZnVuY3Rpb24gQnAoYyxs''@;'; put 'put ''LGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IG1KPSJhdXRvUm93U2l6ZSI7''@;'; put 'put ''dmFyIGZUPW5ldyBXZWFrTWFwLHZKPW5ldyBXZWFrTWFwLElnPW5ldyBXZWFrU2V0O2NsYXNzIHBUIGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIG1KfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDQwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlT''@;'; put 'put ''KCl7cmV0dXJuITB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3VzZUhlYWRlcnM6ITAsc2FtcGxpbmdSYXRpbzpudWxsLGFsbG93U2FtcGxlRHVwbGljYXRlczohMX19c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19D''@;'; put 'put ''QUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gc2x0KGMsbCl7STRlKGMsbCksbC5hZGQoYyl9KHRoaXMsSWcpLGpfKHRoaXMsImhlYWRlckhlaWdodCIsbnVsbCksal8odGhpcywiZ2hvc3RUYWJsZSIsbmV3IGRKKHRoaXMuaG90''@;'; put 'put ''KSksal8odGhpcywic2FtcGxlc0dlbmVyYXRvciIsbmV3IE00ZSgoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKSxmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZCk7aWYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4oaCl8fHRoaXMuaG90LmNvbHVt''@;'; put 'put ''bkluZGV4TWFwcGVyLmlzSGlkZGVuKGYpfHxhPj0wJiZkPj0wJiZ0aGlzLmhvdC5nZXRDZWxsTWV0YShhLGQpLmhpZGRlbilyZXR1cm4hMTtsZXQgdjtyZXR1cm4gYT49MD92PXRoaXMuaG90LmdldERhdGFBdENlbGwoYSxkKTotMT09PWEmJih2PXRoaXMuaG90LmdldENvbEhlYWRlcihkKSks''@;'; put 'put ''e3ZhbHVlOnZ9fSkpLGpfKHRoaXMsImluUHJvZ3Jlc3MiLCExKSxqXyh0aGlzLCJtZWFzdXJlZFJvd3MiLDApLGpfKHRoaXMsInJvd0hlaWdodHNNYXAiLG5ldyBabSksRDRlKHRoaXMsZlQsW10pLEQ0ZSh0aGlzLHZKLCExKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgi''@;'; put 'put ''YXV0b1Jvd1NpemUiLHRoaXMucm93SGVpZ2h0c01hcCksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLChhLGQsaCk9PkJwKElnLHRoaXMsTDRlKS5jYWxsKHRoaXMsYSxkLGgpKX1pc0VuYWJsZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbbUpdO3JldHVybiEwPT09''@;'; put 'put ''bHx8cW8obCl9ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1cGxpY2F0ZXModGhpcy5nZXRTZXR0aW5nKCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKSk7Y29uc3QgYT10aGlzLmdldFNldHRpbmco''@;'; put 'put ''InNhbXBsaW5nUmF0aW8iKTthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChhLDEwKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQp''@;'; put 'put ''LGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBCcChJZyxsLHBsdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKysp''@;'; put 'put ''aFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEJwKElnLGwsZ2x0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKCk9PnRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gQnAoSWcsbCx2bHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyIiwoKT0+QnAoSWcsdGhpcyxmbHQp''@;'; put 'put ''LmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwoZCxoKT0+dGhpcy5nZXRSb3dIZWlnaHQoaCxkKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+QnAoSWcsdGhpcyxtbHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0''@;'; put 'put ''IiwoKT0+dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaGVhZGVySGVpZ2h0PW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93UmVzaXplIiwobCxhLGQpPT5CcChJZyx0''@;'; put 'put ''aGlzLEw0ZSkuY2FsbCh0aGlzLGwsYSxkKSl9Y2FsY3VsYXRlVmlzaWJsZVJvd3NIZWlnaHQoKXtpZighdGhpcy5ob3QuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSxhPXRoaXMuZ2V0TGFzdFZpc2libGVSb3coKTstMSE9PWwmJi0xIT09YSYm''@;'; put 'put ''dGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmwsdG86YX0sdm9pZCAwLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcil9Y2FsY3VsYXRlUm93c0hlaWdodCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRv''@;'; put 'put ''OnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJn''@;'; put 'put ''dW1lbnRzWzJdO2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bCxmPSJudW1iZXIiPT10eXBlb2YgYT97ZnJvbTphLHRvOmF9OmE7aWYobnVsbCE9PXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3Qgdj10aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVS''@;'; put 'put ''b3dTYW1wbGVzKC0xLGYpO3RoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW5IZWFkZXJzUm93KHYuZ2V0KC0xKSl9R2EoaC5mcm9tLGgudG8sdj0+e2xldCBNPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codik7bnVsbD09PU0mJihNPXYpLChkfHxudWxsPT09dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZh''@;'; put 'put ''bHVlQXRJbmRleChNKSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXModixmKS5mb3JFYWNoKChaLHJlKT0+dGhpcy5naG9zdFRhYmxlLmFkZFJvdyhyZSxaKSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigo''@;'; put 'put ''KT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRIZWlnaHRzKCh2LE0pPT57djwwP3RoaXMuaGVhZGVySGVpZ2h0PU06dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLE0pfSl9LCEwKSx0aGlzLm1lYXN1cmVkUm93cz1oLnRvKzEsdGhpcy5n''@;'; put 'put ''aG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD0wO2NvbnN0IGg9dGhpcy5ob3QuY291bnRSb3dzKCktMTtsZXQgZj1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25zdCB2PSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBURShmKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhp''@;'; put 'put ''cy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmQsdG86TWF0aC5taW4oZCtwVC5DQUxDVUxBVElPTl9TVEVQLGgpfSxsLGEpLGQ9ZCtwVC5DQUxDVUxBVElPTl9TVEVQKzEsZDxoP2Y9RUUodik6KFRFKGYpLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRz''@;'; put 'put ''U2l6ZSgpKX0sTT10aGlzLmdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCk7TT49MCYmKHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTowLHRvOk19LGwsYSksZD1NKzEpLGQ8aD92KCk6KHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX1y''@;'; put 'put ''ZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXt0aGlzLmhvdC52aWV3LmlzVmlzaWJsZSgpJiZ0aGlzLmNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoe2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSwhMCl9Z2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCBsPXRoaXMuaG90Lmdl''@;'; put 'put ''dFNldHRpbmdzKClbbUpdO2xldCBhPXBULlNZTkNfQ0FMQ1VMQVRJT05fTElNSVQ7Y29uc3QgZD10aGlzLmhvdC5jb3VudFJvd3MoKS0xO3JldHVybiBxbyhsKSYmKGE9bC5zeW5jTGltaXQsZiQoYSk/YT1KJChkLGEpOmE+Pj0wKSxNYXRoLm1pbihhLGQpfWdldFJvd0hlaWdodChsLGEpe2Nv''@;'; put 'put ''bnN0IGQ9bDwwP3RoaXMuaGVhZGVySGVpZ2h0OnRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSk7bGV0IGg9YTtyZXR1cm4gbnVsbCE9PWQmJmQ+KGF8fDApJiYoaD1kKSxofWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmhlYWRlckhlaWdodH1nZXRGaXJzdFZpc2libGVSb3coKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCkpJiZ2b2lkIDAhPT1sP2w6LTF9Z2V0TGFzdFZpc2libGVSb3coKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMu''@;'; put 'put ''aG90LmdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKSkmJnZvaWQgMCE9PWw/bDotMX1jbGVhckNhY2hlKGwpe3RoaXMuaGVhZGVySGVpZ2h0PW51bGwsQXJyYXkuaXNBcnJheShsKT90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wuZm9yRWFjaChhPT57dGhpcy5yb3dIZWlnaHRzTWFw''@;'; put 'put ''LnNldFZhbHVlQXRJbmRleChhLG51bGwpfSl9LCEwKTp0aGlzLnJvd0hlaWdodHNNYXAuY2xlYXIoKX1jbGVhckNhY2hlQnlSYW5nZShsKXtjb25zdHtmcm9tOmEsdG86ZH09Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bDt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0dh''@;'; put 'put ''KE1hdGgubWluKGEsZCksTWF0aC5tYXgoYSxkKSxoPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChoLG51bGwpfSl9LCEwKX1pc05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhdGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZFJv''@;'; put 'put ''d3MpLmZpbHRlcihsPT5udWxsPT09bCkubGVuZ3RofWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGhsdChjKXtjb25zdCBsPXtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX07Yy5mb3JFYWNoKGE9Pnt0aGlzLnNhbXBs''@;'; put 'put ''ZXNHZW5lcmF0b3IuZ2VuZXJhdGVSb3dTYW1wbGVzKGEsbCkuZm9yRWFjaCgoaCxmKT0+dGhpcy5naG9zdFRhYmxlLmFkZFJvdyhmLGgpKX0pLHRoaXMuZ2hvc3RUYWJsZS5yb3dzLmxlbmd0aCYmKHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5naG9zdFRhYmxlLmdldEhlaWdo''@;'; put 'put ''dHMoKGEsZCk9Pntjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSk7dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChoLGQpfSl9LCEwKSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9ZnVuY3Rpb24gZmx0KCl7dGhpcy5jYWxjdWxhdGVWaXNpYmxlUm93c0hlaWdodCgp''@;'; put 'put ''LHRoaXMuaW5Qcm9ncmVzc3x8KEJwKElnLHRoaXMsaGx0KS5jYWxsKHRoaXMsZUYoZlQsdGhpcykpLFI0ZShmVCx0aGlzLFtdKSl9ZnVuY3Rpb24gTDRlKGMsbCxhKXtsZXQgZD1jO3JldHVybiBhJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KGwsdm9pZCAwLCEwKSxkPXRoaXMuZ2V0Um93''@;'; put 'put ''SGVpZ2h0KGwpKSxkfWZ1bmN0aW9uIHBsdChjLGwpe2x8fHRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9ZnVuY3Rpb24gZ2x0KGMpe2NvbnN0IGw9Yy5yZWR1Y2UoKGEsZCk9PntsZXRbaF09ZDtyZXR1cm4tMT09PWEuaW5kZXhPZihoKSYmYS5wdXNoKGgpLGF9LFtdKTtlRihmVCx0''@;'; put 'put ''aGlzKS5wdXNoKC4uLmwpfWZ1bmN0aW9uIG1sdCgpe3RoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCksUjRlKHZKLHRoaXMsITApfWZ1bmN0aW9uIHZsdChjKXtpZighZUYodkosdGhpcykpcmV0dXJuO2NvbnN0IGw9Yy5yZWR1Y2UoKGEsZCk9Pnt2YXIgaDtjb25zdCBmPW51bGw9PT0o''@;'; put 'put ''aD1kLmFkZHJlc3MpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnJvdztpZihOdW1iZXIuaXNJbnRlZ2VyKGYpKXtjb25zdCB2PXRoaXMuaG90LnRvVmlzdWFsUm93KGYpOy0xPT09YS5pbmRleE9mKHYpJiZhLnB1c2godil9cmV0dXJuIGF9LFtdKTtlRihmVCx0aGlzKS5wdXNoKC4uLmwpfWNvbnN0''@;'; put 'put ''IE80ZT1uZXcgTWFwKFtbImluZGV4ZXNTZXF1ZW5jZSIse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpISyxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpLRX1dLFsicGh5c2ljYWxseUluZGV4ZWQiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6QkssZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6''@;'; put 'put ''akt9XV0pLFA0ZT1jPT57aWYoITE9PT1PNGUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgQWx0ZXIgc3RyYXRlZ3kgd2l0aCBJRCAnJHtjfScgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIE80ZS5nZXQoYyl9LHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6Ymx0LGdldExpc3RXaXRoUmVtb3Zl''@;'; put 'put ''ZEl0ZW1zOnlsdH09UDRlKCJwaHlzaWNhbGx5SW5kZXhlZCIpLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6Q2x0LGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOlNsdH09UDRlKCJwaHlzaWNhbGx5SW5kZXhlZCIpO2NvbnN0IEY0ZT0iYmluZFJvd3NXaXRoSGVhZGVycyIsSDRlPW5ldyBNYXAo''@;'; put 'put ''W1sibG9vc2UiLGNsYXNzIF9sdCBleHRlbmRzIGU5e2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7Y29uc3QgZD1WSyh0aGlzLmluZGV4ZWRWYWx1ZXMsYSk7dGhpcy5pbmRleGVkVmFsdWVzPWJsdChkLGwsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHN1cGVyLmluc2VydChs''@;'; put 'put ''LGEpfXJlbW92ZShsKXtjb25zdCBhPXlsdCh0aGlzLmluZGV4ZWRWYWx1ZXMsbCk7dGhpcy5pbmRleGVkVmFsdWVzPU5LKGEsbCksc3VwZXIucmVtb3ZlKGwpfX1dLFsic3RyaWN0IixjbGFzcyBNbHQgZXh0ZW5kcyBlOXtjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe3Ro''@;'; put 'put ''aXMuaW5kZXhlZFZhbHVlcz1DbHQodGhpcy5pbmRleGVkVmFsdWVzLGwsYSwoZCxoKT0+dGhpcy5nZXROZXh0VmFsdWUoaCkpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9U2x0KHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9Z2V0''@;'; put 'put ''TmV4dFZhbHVlKGwpe3JldHVybiBNYXRoLm1heCguLi50aGlzLmdldFZhbHVlcygpKSsxK2x9fV1dKTt2YXIgTjRlPW5ldyBXZWFrU2V0O2NsYXNzIE9sdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBFbHQoYyxsKXsoZnVuY3Rpb24gVGx0''@;'; put 'put ''KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsTjRlKSxmdW5jdGlvbiBBbHQoYyxsLGEpe3JldHVybihsPWZ1bmN0''@;'; put 'put ''aW9uIGtsdChjKXt2YXIgbD1mdW5jdGlvbiBEbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZCly''@;'; put 'put ''ZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWlu''@;'; put 'put ''IGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJoZWFkZXJJbmRleGVzIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gRjRlfXN0YXRpYyBnZXQg''@;'; put 'put ''UExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIxMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbRjRlXX1lbmFibGVQbHVnaW4oKXt2YXIgbDtpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9bnVsbCE9PShsPUg0ZS5nZXQodGhpcy5nZXRTZXR0aW5nKCkp''@;'; put 'put ''KSYmdm9pZCAwIT09bD9sOkg0ZS5nZXQoImxvb3NlIik7dGhpcy5oZWFkZXJJbmRleGVzPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJiaW5kUm93c1dpdGhIZWFkZXJzIixuZXcgYSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXIiLGQ9PmZ1bmN0aW9uIElsdChj''@;'; put 'put ''LGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KE40ZSx0aGlzLFBsdCkuY2FsbCh0''@;'; put 'put ''aGlzLGQpKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVhZGVycyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBQ''@;'; put 'put ''bHQoYyl7cmV0dXJuIHRoaXMuaGVhZGVySW5kZXhlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhjKSl9ZnVuY3Rpb24gVjRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVt''@;'; put 'put ''ZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBCNGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE5sdChjKXt2YXIgbD1mdW5jdGlvbiBWbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lk''@;'; put 'put ''IDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51''@;'; put 'put ''bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGo0ZShj''@;'; put 'put ''LGwpe3JldHVybiBjLmdldCh6XyhjLGwpKX1mdW5jdGlvbiBiSihjLGwsYSl7cmV0dXJuIGMuc2V0KHpfKGMsbCksYSksYX1mdW5jdGlvbiB6XyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdEY9ImNvbGxhcHNpYmxlQ29sdW1ucyIsamx0PVsibmVzdGVkSGVhZGVycyJdLFVfPSJjb2xsYXBzaWJsZUluZGljYXRvciIsejRlPXRGLFU0ZT1uZXcgTWFwKFtbImNv''@;'; put 'put ''bGxhcHNlIix7aGlkZUNvbHVtbjohMCxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkNvbGxhcHNlIn1dLFsiZXhwYW5kIix7aGlkZUNvbHVtbjohMSxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGFmdGVySG9vazoiYWZ0ZXJD''@;'; put 'put ''b2x1bW5FeHBhbmQifV1dKTt2YXIgWl89bmV3IFdlYWtNYXAsZ1Q9bmV3IFdlYWtTZXQ7Y2xhc3Mgemx0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEZsdChjLGwpe1Y0ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGdUKSxCNGUodGhpcywibmVz''@;'; put 'put ''dGVkSGVhZGVyc1BsdWdpbiIsbnVsbCksQjRlKHRoaXMsImhlYWRlclN0YXRlTWFuYWdlciIsbnVsbCksZnVuY3Rpb24gSGx0KGMsbCxhKXtWNGUoYyxsKSxsLnNldChjLGEpfSh0aGlzLFpfLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB0Rn1zdGF0aWMgZ2V0IFBMVUdJ''@;'; put 'put ''Tl9QUklPUklUWSgpe3JldHVybiAyOTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOk5lc3RlZEhlYWRlcnMiXX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblt0RiwuLi5qbHRdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KVt0Rl19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTthfHxpbCgiWW91IG5lZWQgdG8gY29uZmlndXJlIHRoZSBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gaW4gb3JkZXIg''@;'; put 'put ''dG8gdXNlIGNvbGxhcHNpYmxlIGhlYWRlcnMuIiksYkooWl8sdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKHRoaXMucGx1Z2luTmFtZSwiaGlkaW5nIikpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4o''@;'; put 'put ''Im5lc3RlZEhlYWRlcnMiKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlcj10aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZ2V0U3RhdGVNYW5hZ2VyKCksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+el8oZ1QsdGhpcyxXbHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gel8oZ1QsbCxZbHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpfKGdULGwsVWx0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsKGQsaCxmKT0+el8oZ1QsdGhpcyxabHQp''@;'; put 'put ''LmNhbGwodGhpcyxkLGgsZikpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKHRoaXMuaG90LnZpZXcpe2lmKCF0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZGV0ZWN0ZWRPdmVybGFwcGVk''@;'; put 'put ''SGVhZGVycyl7Y29uc3R7Y29sbGFwc2libGVDb2x1bW5zOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7ImJvb2xlYW4iPT10eXBlb2YgbD90aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZShhPT4oe2NvbGxhcHNpYmxlOmEub3JpZ0NvbHNwYW4+MX0pKTpBcnJheS5pc0FycmF5KGwp''@;'; put 'put ''JiYodGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoKCk9Pih7Y29sbGFwc2libGU6ITF9KSksdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWVyZ2VTdGF0ZVdpdGgobCkpfXN1cGVyLnVwZGF0ZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBw''@;'; put 'put ''ZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLGJKKFpfLHRoaXMsbnVsbCksdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luPW51bGwsdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5jbGVhckJ1dHRvbnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1''@;'; put 'put ''dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pnt2YXIgbDtjb25zdHtyb3c6YSxjb2w6ZH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQs''@;'; put 'put ''e2NvbGxhcHNpYmxlOmgsaXNDb2xsYXBzZWQ6Zixjb2x1bW5JbmRleDp2fT1udWxsIT09KGw9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGEsZCkpJiZ2b2lkIDAhPT1sP2w6e307aWYoaClyZXR1cm4gZj90aGlzLmV4cGFuZFNlY3Rpb24oe3JvdzphLGNv''@;'; put 'put ''bDp2fSk6dGhpcy5jb2xsYXBzZVNlY3Rpb24oe3JvdzphLGNvbDp2fSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7cmV0dXJuKG51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5pc1NpbmdsZSgpKSYmKG51bGw9PT0oYT10''@;'; put 'put ''aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5oaWdobGlnaHQuaXNIZWFkZXIoKSl9LGdyb3VwOno0ZSxyZWxhdGl2ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRj''@;'; put 'put ''dXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoejRlKX1jbGVhckJ1dHRvbnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoLGE9dGhp''@;'; put 'put ''cy5ob3Qudmlldy5fd3Qud3RUYWJsZS5USEVBRCxkPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFELGg9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk/dGhpcy5ob3Qudmlldy5f''@;'; put 'put ''d3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsLGY9ZnVuY3Rpb24odil7diYmdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHYpfTtHYSgwLGwtMSx2PT57Y29uc3QgTT1hLmNoaWxkTm9kZXNbdl0sRD1kLmNoaWxkTm9kZXNb''@;'; put 'put ''dl0sWj1oP2guY2hpbGROb2Rlc1t2XTpudWxsO0dhKDAsTS5jaGlsZE5vZGVzLmxlbmd0aC0xLHJlPT57bGV0IGNlPU0uY2hpbGROb2Rlc1tyZV0ucXVlcnlTZWxlY3RvcihgLiR7VV99YCk7ZihjZSksRCYmRC5jaGlsZE5vZGVzW3JlXSYmKGNlPUQuY2hpbGROb2Rlc1tyZV0ucXVlcnlTZWxl''@;'; put 'put ''Y3RvcihgLiR7VV99YCksZihjZSkpLGgmJlomJlouY2hpbGROb2Rlc1tyZV0mJihjZT1aLmNoaWxkTm9kZXNbcmVdLnF1ZXJ5U2VsZWN0b3IoYC4ke1VffWApLGYoY2UpKX0pfSl9ZXhwYW5kU2VjdGlvbihsKXt0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbbF0sImV4cGFuZCIpfWNv''@;'; put 'put ''bGxhcHNlU2VjdGlvbihsKXt0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbbF0sImNvbGxhcHNlIil9dG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucyhsKXtjb25zdCBhPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1hcE5vZGVzKGQ9Pntjb25zdHtjb2xsYXBzaWJsZTpoLG9yaWdD''@;'; put 'put ''b2xzcGFuOmYsaGVhZGVyTGV2ZWw6dixjb2x1bW5JbmRleDpNLGlzQ29sbGFwc2VkOkR9PWQ7aWYoITA9PT1oJiZmPjEmJihEJiYiZXhwYW5kIj09PWx8fCFEJiYiY29sbGFwc2UiPT09bCkpcmV0dXJue3Jvdzp0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5sZXZlbFRvUm93Q29vcmRzKHYpLGNv''@;'; put 'put ''bDpNfX0pO3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKGEsbCl9Y29sbGFwc2VBbGwoKXt0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMoImNvbGxhcHNlIil9ZXhwYW5kQWxsKCl7dGhpcy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCJleHBhbmQiKX10b2dnbGVD''@;'; put 'put ''b2xsYXBzaWJsZVNlY3Rpb24obCxhKXtpZighVTRlLmhhcyhhKSl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGFjdGlvbiBpcyBwYXNzZWQgKCR7YX0pLmApO2lmKCFBcnJheS5pc0FycmF5KGwpKXJldHVybjtjb25zdCBkPUltKGwsRWU9PntsZXR7cm93OkJlfT1FZTtyZXR1cm4gQmU8''@;'; put 'put ''MH0pO2xldCBoPWQubGVuZ3RoPjA7WW4oZCxFZT0+e3ZhciBCZTtsZXR7cm93OnFlLGNvbDpydH09RWU7Y29uc3R7Y29sbGFwc2libGU6cHQsaXNDb2xsYXBzZWQ6ZHR9PW51bGwhPT0oQmU9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyU2V0dGluZ3MocWUscnQpKSYmdm9pZCAw''@;'; put 'put ''IT09QmU/QmU6e307aWYoIXB0fHxkdCYmImNvbGxhcHNlIj09PWF8fCFkdCYmImV4cGFuZCI9PT1hKXJldHVybiBoPSExLCExfSk7Y29uc3QgZj1bXSx2PVtdO2gmJlluKGQsRWU9PntsZXR7cm93OkJlLGNvbDpxZX09RWU7Y29uc3R7Y29sc3BhbkNvbXBlbnNhdGlvbjpydCxhZmZlY3RlZENv''@;'; put 'put ''bHVtbnM6cHQscm9sbGJhY2tNb2RpZmljYXRpb246ZHR9PXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLnRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGEsQmUscWUpO3J0PjAmJih2LnB1c2goLi4ucHQpLGYucHVzaChkdCkpfSk7Y29uc3QgTT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKTtsZXQg''@;'; put 'put ''RD1bXTsiY29sbGFwc2UiPT09YT9EPXYyZShbLi4uTSwuLi52XSk6ImV4cGFuZCI9PT1hJiYoRD1JbShNLEVlPT4hdi5pbmNsdWRlcyhFZSkpKTtjb25zdCBaPVU0ZS5nZXQoYSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcyhaLmJlZm9yZUhvb2ssTSxELGgpKXJldHVybiB2b2lkIFluKGYs''@;'; put 'put ''RWU9PntFZSgpfSk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbih2LEVlPT57ajRlKFpfLHRoaXMpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKEVlKSxaLmhpZGVDb2x1bW4pfSl9LCEwKTtjb25zdCBjZT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMo''@;'; put 'put ''KS5sZW5ndGghPT1NLmxlbmd0aCxiZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCJjb2xsYXBzZSI9PT1hJiZjZSYmYmUpe2NvbnN0e3JvdzpFZSxjb2w6QmV9PWJlLmhpZ2hsaWdodDtpZigodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4oRWUpfHx0aGlzLmhv''@;'; put 'put ''dC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihCZSkpJiZ2LmluY2x1ZGVzKEJlKSl7Y29uc3QgcnQ9RWU+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEVlLDEsITApOkVlLHB0PUJlPj0wP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdl''@;'; put 'put ''dE5lYXJlc3ROb3RIaWRkZW5JbmRleChCZSwxLCEwKTpCZTtudWxsIT09cnQmJm51bGwhPT1wdCYmdGhpcy5ob3Quc2VsZWN0Q2VsbChydCxwdCl9fXRoaXMuaG90LnJ1bkhvb2tzKFouYWZ0ZXJIb29rLE0sRCxoLGNlKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVs''@;'; put 'put ''ZW1lbnRzU2l6ZSgpfWdldENvbGxhcHNlZENvbHVtbnMoKXtyZXR1cm4gajRlKFpfLHRoaXMpLmdldEhpZGRlbkluZGV4ZXMoKX1kZXN0cm95KCl7YkooWl8sdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFVsdChjLGwsYSl7dmFyIGQ7Y29uc3R7Y29sbGFwc2libGU6aCxv''@;'; put 'put ''cmlnQ29sc3BhbjpmLGlzQ29sbGFwc2VkOnZ9PW51bGwhPT0oZD10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhhLGMpKSYmdm9pZCAwIT09ZD9kOnt9LE09aCYmZj4xJiZjPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LEQ9dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztsZXQgWj1sLnF1ZXJ5U2VsZWN0b3IoYC4ke1VffWApO3ZhciByZTtqNyhsLFtOMigiIilbMF1dKSxNPyhafHwoWj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksVGkoWixVXyksbC5xdWVyeVNlbGVjdG9yKCJkaXY6''@;'; put 'put ''Zmlyc3QtY2hpbGQiKS5hcHBlbmRDaGlsZChaKSksbG8oWixbImNvbGxhcHNlZCIsImV4cGFuZGVkIl0pLHY/KFRpKFosImNvbGxhcHNlZCIpLFBtKFosIisiKSxEJiZ2byhsLC4uLk4yKCExKSkpOihUaShaLCJleHBhbmRlZCIpLFBtKFosIi0iKSxEJiZ2byhsLC4uLk4yKCEwKSkpLEQmJnZv''@;'; put 'put ''KFosLi4uVjcoKSkpOm51bGw9PT0ocmU9Wil8fHZvaWQgMD09PXJlfHxyZS5yZW1vdmUoKX1mdW5jdGlvbiBabHQoYyxsKXtwbyhjLnRhcmdldCxVXykmJihwbyhjLnRhcmdldCwiZXhwYW5kZWQiKT8odGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGMudGFyZ2V0LCJtb3VzZXVwIiksdGhp''@;'; put 'put ''cy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJjb2xsYXBzZSIpKTpwbyhjLnRhcmdldCwiY29sbGFwc2VkIikmJih0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQoYy50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbbF0sImV4cGFuZCIpKSxC''@;'; put 'put ''MihjKSl9ZnVuY3Rpb24gV2x0KCl7dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBZbHQoYyxsKXtsfHx0aGlzLnVwZGF0ZVBsdWdpbigpfWZ1bmN0aW9uIGY5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBHbHQoYyl7dmFyIGw9ZnVuY3Rpb24gJGx0KGMsbCl7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJl''@;'; put 'put ''dHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZToh''@;'; put 'put ''MCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBLbHQ9WyJzb3J0RW1wdHlDZWxscyIsImluZGljYXRvciIsImhlYWRlckFjdGlvbiIsImNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiXTtjbGFzcyBRbHR7Y29uc3RydWN0b3IobCxhKXtmOSh0aGlzLCJob3QiLHZv''@;'; put 'put ''aWQgMCksZjkodGhpcywic29ydGluZ1N0YXRlcyIsbmV3IHBQKSxmOSh0aGlzLCJzb3J0RW1wdHlDZWxscyIsITEpLGY5KHRoaXMsImluZGljYXRvciIsITApLGY5KHRoaXMsImhlYWRlckFjdGlvbiIsITApLGY5KHRoaXMsImNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiLHZvaWQgMCksZjkodGhp''@;'; put 'put ''cywibWFwTmFtZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMubWFwTmFtZT1hLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGEsdGhpcy5zb3J0aW5nU3RhdGVzKX11cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKXtxbyhsKSYmWG8obCwoYSxkKT0+e0tsdC5pbmNs''@;'; put 'put ''dWRlcyhkKSYmKHRoaXNbZF09YSl9KX1nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpe2NvbnN0IGw9e3NvcnRFbXB0eUNlbGxzOnRoaXMuc29ydEVtcHR5Q2VsbHMsaW5kaWNhdG9yOnRoaXMuaW5kaWNhdG9yLGhlYWRlckFjdGlvbjp0aGlzLmhlYWRlckFjdGlvbn07cmV0dXJuImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSYmKGwuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT10aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkpLGx9Z2V0U29ydE9yZGVyT2ZDb2x1bW4obCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT10aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0''@;'; put 'put ''VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5zb3J0T3JkZXJ9Z2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpe3JldHVybiBsPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCksdGhpcy5zb3J0aW5nU3RhdGVzLmdl''@;'; put 'put ''dEVudHJpZXMoKS5maW5kSW5kZXgoYT0+e2xldFtkXT1hO3JldHVybiBkPT09bH0pfWdldE51bWJlck9mU29ydGVkQ29sdW1ucygpe3JldHVybiB0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0TGVuZ3RoKCl9aXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0TnVt''@;'; put 'put ''YmVyT2ZTb3J0ZWRDb2x1bW5zKCl9aXNDb2x1bW5Tb3J0ZWQobCl7cmV0dXJuIHFvKHRoaXMuc29ydGluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSkpfWdldFNvcnRTdGF0ZXMoKXtyZXR1cm4gbnVsbD09PXRoaXMuc29ydGluZ1N0YXRlcz9b''@;'; put 'put ''XTp0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0RW50cmllcygpLm1hcChhPT57bGV0W2QsaF09YTtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGQpLC4uLmh9fSl9Z2V0Q29sdW1uU29ydFN0YXRlKGwpe2NvbnN0IGE9dGhpcy5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtpZihQ''@;'; put 'put ''YShhKSlyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOmF9fXNldFNvcnRTdGF0ZXMobCl7dGhpcy5zb3J0aW5nU3RhdGVzLmNsZWFyKCk7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKz0xKXRoaXMuc29ydGluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVt''@;'; put 'put ''bihsW2FdLmNvbHVtbikse3NvcnRPcmRlcjpsW2FdLnNvcnRPcmRlcn0pfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMubWFwTmFtZSksdGhpcy5zb3J0aW5nU3RhdGVzPW51bGx9fWZ1bmN0aW9uIFo0ZShjLGwsYSl7Y29uc3QgZD1sLmxv''@;'; put 'put ''Y2FsZTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtjb25zdHtzb3J0RW1wdHlDZWxsczp2fT1hO3JldHVybiJzdHJpbmciPT10eXBlb2YgaCYmKGg9aC50b0xvY2FsZUxvd2VyQ2FzZShkKSksInN0cmluZyI9PXR5cGVvZiBmJiYoZj1mLnRvTG9jYWxlTG93ZXJDYXNlKGQpKSxoPT09Zj9qcDpVYyho''@;'; put 'put ''KT9VYyhmKT9qcDp2JiYiYXNjIj09PWM/WWM6R2M6VWMoZik/diYmImFzYyI9PT1jP0djOlljOmlzTmFOKGgpJiYhaXNOYU4oZik/ImFzYyI9PT1jP0djOlljOiFpc05hTihoKSYmaXNOYU4oZil8fChpc05hTihoKXx8aXNOYU4oZil8fChoPXBhcnNlRmxvYXQoaCksZj1wYXJzZUZsb2F0KGYp''@;'; put 'put ''KSxoPGYpPyJhc2MiPT09Yz9ZYzpHYzpoPmY/ImFzYyI9PT1jP0djOlljOmpwfX1jb25zdHtyZWdpc3RlcjptVCxnZXRJdGVtOlk0ZSxoYXNJdGVtOmxjdH09cjMoInNvcnRpbmcuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSIpLHtyZWdpc3RlcjpHNGUsZ2V0SXRlbTpjY3R9PXIzKCJzb3J0aW5n''@;'; put 'put ''Lm1haW5Tb3J0Q29tcGFyYXRvciIpO2Z1bmN0aW9uICQ0ZShjKXtyZXR1cm4gbGN0KGMpP1k0ZShjKTpZNGUoImRlZmF1bHQiKX1tVCgiY2hlY2tib3giLGZ1bmN0aW9uIG5jdChjLGwsYSl7Y29uc3QgZD1sLmNoZWNrZWRUZW1wbGF0ZSxoPWwudW5jaGVja2VkVGVtcGxhdGUse3NvcnRFbXB0''@;'; put 'put ''eUNlbGxzOmZ9PWE7cmV0dXJuIGZ1bmN0aW9uKHYsTSl7Y29uc3QgRD1VYyh2KSxaPVVjKE0pLHJlPUQ/aDp2LGNlPVo/aDpNLGJlPXJlPT09aHx8cmU9PT1kLEVlPWNlPT09aHx8Y2U9PT1kO2lmKCExPT09Zil7aWYoRCYmITE9PT1aKXJldHVybiBHYztpZighMT09PUQmJlopcmV0dXJuIFlj''@;'; put 'put ''fXJldHVybiExPT09YmUmJkVlPyJhc2MiPT09Yz9ZYzpHYzpiZSYmITE9PT1FZT8iYXNjIj09PWM/R2M6WWM6ITE9PT1iZSYmITE9PT1FZT9aNGUoYyxsLGEpKHYsTSk6cmU9PT1oJiZjZT09PWQ/ImFzYyI9PT1jP1ljOkdjOnJlPT09ZCYmY2U9PT1oPyJhc2MiPT09Yz9HYzpZYzpqcH19KSxt''@;'; put 'put ''VCgiZGF0ZSIsZnVuY3Rpb24gaWN0KGMsbCxhKXtyZXR1cm4gUTRlKGMsbC5kYXRlRm9ybWF0LGEpfSksbVQoImRlZmF1bHQiLFo0ZSksbVQoIm51bWVyaWMiLGZ1bmN0aW9uIGVjdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1wYXJzZUZsb2F0KGQpLHY9cGFyc2VGbG9h''@;'; put 'put ''dChoKSx7c29ydEVtcHR5Q2VsbHM6TX09YTtpZihmPT09dnx8aXNOYU4oZikmJmlzTmFOKHYpKXJldHVybiBqcDtpZihNKXtpZihVYyhkKSlyZXR1cm4iYXNjIj09PWM/WWM6R2M7aWYoVWMoaCkpcmV0dXJuImFzYyI9PT1jP0djOlljfXJldHVybiBpc05hTihmKT9HYzppc05hTih2KT9ZYzpm''@;'; put 'put ''PHY/ImFzYyI9PT1jP1ljOkdjOmY+dj8iYXNjIj09PWM/R2M6WWM6anB9fSksbVQoInRpbWUiLGZ1bmN0aW9uIG9jdChjLGwsYSl7cmV0dXJuIFE0ZShjLGwudGltZUZvcm1hdCxhKX0pO2NvbnN0IGpwPTAsWWM9LTEsR2M9MSxuRj0iYXNjIixyRj0iZGVzYyIsSzRlPSJjb2xIZWFkZXIiO2Z1''@;'; put 'put ''bmN0aW9uIHE0ZShjKXtpZihjIT09ckYpcmV0dXJuIGM9PT1uRj9yRjpuRn1mdW5jdGlvbiBYNGUoYyl7cmV0dXJuIGMucXVlcnlTZWxlY3RvcihgLiR7SzRlfWApfWZ1bmN0aW9uIEo0ZShjLGwpe2lmKGM8MHx8IWwucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBhPWwucGFyZW50Tm9kZS5w''@;'; put 'put ''YXJlbnROb2RlLmNoaWxkTm9kZXM7cmV0dXJuIEFycmF5LmZyb20oYSkuaW5kZXhPZihsLnBhcmVudE5vZGUpLWEubGVuZ3RoPT0tMX1mdW5jdGlvbiB5SihjLGwsYSl7cmV0dXJuLTE9PT1jJiZsPj0wJiYhMT09PUhtKGEpfWZ1bmN0aW9uIFE0ZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQs''@;'; put 'put ''aCl7Y29uc3R7c29ydEVtcHR5Q2VsbHM6Zn09YTtpZihkPT09aClyZXR1cm4ganA7aWYoVWMoZCkpcmV0dXJuIFVjKGgpP2pwOmYmJiJhc2MiPT09Yz9ZYzpHYztpZihVYyhoKSlyZXR1cm4gZiYmImFzYyI9PT1jP0djOlljO2NvbnN0IHY9T28oZCxsKSxNPU9vKGgsbCk7cmV0dXJuIHYuaXNW''@;'; put 'put ''YWxpZCgpP00uaXNWYWxpZCgpP00uaXNBZnRlcih2KT8iYXNjIj09PWM/WWM6R2M6TS5pc0JlZm9yZSh2KT8iYXNjIj09PWM/R2M6WWM6anA6WWM6R2N9fWNvbnN0IGVnZT0iaW5kaWNhdG9yRGlzYWJsZWQiLHRnZT0iY29sdW1uU29ydGluZyIsbmdlPSJzb3J0QWN0aW9uIixyZ2U9bmV3IE1h''@;'; put 'put ''cChbW25GLCJhc2NlbmRpbmciXSxbckYsImRlc2NlbmRpbmciXV0pO2Z1bmN0aW9uIGlGKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB3Y3QoYyl7dmFyIGw9ZnVuY3Rpb24gQ2N0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1p''@;'; put 'put ''dGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9''@;'; put 'put ''PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31m''@;'; put 'put ''dW5jdGlvbiBXXyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgYUY9''@;'; put 'put ''ImNvbHVtblNvcnRpbmciLG9GPSJhcHBlbmQiLGlnZT1hRjtHNGUoYUYsZnVuY3Rpb24gYmN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Y29uc3RbLC4uLmhdPWEsWywuLi5mXT1kO3JldHVybiBmdW5jdGlvbihNKXtjb25zdCBEPWNbMF0sWj1sWzBdLHJlPWhbMF0sY2U9ZlswXSxiZT1a''@;'; put 'put ''LmNvbHVtblNvcnRpbmc7cmV0dXJuKGJlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/YmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTokNGUoWi50eXBlKSkoRCxaLGJlKShyZSxjZSl9KCl9fSksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtblNvcnQiKSxTYS5nZXRTaW5n''@;'; put 'put ''bGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5Tb3J0Iik7Y29uc3QgdlQ9bmV3IFdlYWtNYXA7dmFyIHA5PW5ldyBXZWFrU2V0O2NsYXNzIGFnZSBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiB5Y3QoYyxsKXsoZnVuY3Rpb24gX2N0KGMs''@;'; put 'put ''bCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMscDkpLGlGKHRoaXMsImNvbHVtblN0YXRlc01hbmFnZXIiLG51bGwpLGlG''@;'; put 'put ''KHRoaXMsImNvbHVtbk1ldGFDYWNoZSIsbnVsbCksaUYodGhpcywicGx1Z2luS2V5IixhRiksaUYodGhpcywiaW5kZXhlc1NlcXVlbmNlQ2FjaGUiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBhRn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA1MH1p''@;'; put 'put ''c0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodlQuaGFzKHRoaXMuaG90KSYmdlQuZ2V0KHRoaXMuaG90KSE9PXRoaXMucGx1Z2luS2V5KXJldHVybiB0aGlzLmhvdC51cGRhdGVTZXR0''@;'; put 'put ''aW5ncyh7W3RoaXMucGx1Z2luS2V5XTohMX0pLHZvaWQgZnVuY3Rpb24gZmN0KGMsbCl7aWwoZ2xgUGx1Z2lucyBcYGNvbHVtblNvcnRpbmdcYCBhbmQgXGBtdWx0aUNvbHVtblNvcnRpbmdcYCBzaG91bGQgbm90IGJlIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXHgyMAogICAgT25seSBcYCR7''@;'; put 'put ''Y31cYCB3aWxsIHdvcmsuIFRoZSBcYCR7bH1cYCBwbHVnaW4gd2lsbCByZW1haW4gZGlzYWJsZWQuYCl9KHZULmdldCh0aGlzLmhvdCksdGhpcy5wbHVnaW5LZXkpO3RoaXMuZW5hYmxlZHx8KHZULnNldCh0aGlzLmhvdCx0aGlzLnBsdWdpbktleSksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2Vy''@;'; put 'put ''PW5ldyBRbHQodGhpcy5ob3QsYCR7dGhpcy5wbHVnaW5LZXl9LnNvcnRpbmdTdGF0ZXNgKSx0aGlzLmNvbHVtbk1ldGFDYWNoZT1uZXcgWm0oYT0+e2xldCBkPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEpO3JldHVybiBudWxsPT09ZCYmKGQ9YSksdGhpcy5nZXRNZXJnZWRQbHVnaW5TZXR0''@;'; put 'put ''aW5ncyhkKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5fS5jb2x1bW5NZXRhYCx0aGlzLmNvbHVtbk1ldGFDYWNoZSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PldfKHA5LHRoaXMseGN0KS5jYWxsKHRo''@;'; put 'put ''aXMsYSxkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFdfKHA5LGwsVGN0KS5jYWxsKGwsLi4uZCl9KSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIiwoYSxkKT0+dGhpcy5vbkFmdGVyT25DZWxsTW91c2VEb3duKGEsZCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+V18ocDksdGhpcyxfSikuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBXXyhwOSxsLEVjdCkuY2FsbChsLC4uLmQpfSksdGhpcy5ob3QudmlldyYmV18ocDksdGhpcyxfSikuY2FsbCh0aGlzKSx0aGlzLnJlZ2lz''@;'; put 'put ''dGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtjb25zdCBsPShhLGQpPT57Y29uc3QgaD1YNGUoZCk7ITE9PT1KNGUoYSxkKXx8bnVsbD09PWh8fHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhoKX07dlQuZGVsZXRlKHRoaXMuaG90KSx0aGlzLmhv''@;'; put 'put ''dC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCl9KSx0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e251bGwhPT10aGlzLmlu''@;'; put 'put ''ZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXkpLHRoaXMuaW5k''@;'; put 'put ''ZXhlc1NlcXVlbmNlQ2FjaGU9bnVsbCl9LCEwKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5fS5jb2x1bW5NZXRhYCksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNvbHVtbk1ldGFDYWNoZT1udWxsLHRo''@;'; put 'put ''aXMuY29sdW1uU3RhdGVzTWFuYWdlcj1udWxsLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpb''@;'; put 'put ''WyJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiB0aGlzLnNvcnQodGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGwuY29sKSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7Y29uc3QgZD1udWxs''@;'; put 'put ''PT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBkJiYobnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlKCkpJiZ0aGlzLmhv''@;'; put 'put ''dC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShkKSYmLTE9PT1kLnJvdyYmZC5jb2w+PTB9LHJlbGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIixncm91cDppZ2V9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgi''@;'; put 'put ''Z3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoaWdlKX1zb3J0KGwpe2NvbnN0IGE9dGhpcy5nZXRTb3J0Q29uZmlnKCksZD10aGlzLmdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyhsKSxoPXRoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhkKTshMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVDb2x1bW5Tb3J0IixhLGQsaCkmJigwPT09YS5sZW5ndGgmJm51bGw9PT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSxuZXcgRDNlKSx0aGlzLmlu''@;'; put 'put ''ZGV4ZXNTZXF1ZW5jZUNhY2hlLnNldFZhbHVlcyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSkpLGgmJih0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhkKSx0aGlzLnNvcnRCeVByZXNldFNvcnRTdGF0ZXMoZCksdGhpcy5zYXZlQWxs''@;'; put 'put ''U29ydFNldHRpbmdzKGQpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Tb3J0IixhLGg/ZDphLGgpLGgmJnRoaXMuaG90LnJlbmRlcigpKX1jbGVhclNvcnQoKXt0aGlzLnNvcnQoW10pfWlzU29ydGVkKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMuY29sdW1uU3RhdGVzTWFu''@;'; put 'put ''YWdlci5pc0xpc3RPZlNvcnRlZENvbHVtbnNFbXB0eSgpfWdldFNvcnRDb25maWcobCl7cmV0dXJuIFBhKGwpP3RoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRDb2x1bW5Tb3J0U3RhdGUobCk6dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRTdGF0ZXMoKX1zZXRTb3J0Q29uZmln''@;'; put 'put ''KGwpe2NvbnN0IGE9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3MobCk7dGhpcy5hcmVWYWxpZFNvcnRDb25maWdzKGEpJiZ0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhhKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgwLDEpOltsXX1hcmVWYWxpZFNvcnRDb25maWdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuIGZ1bmN0aW9uIGhjdChjKXtpZihjLnNv''@;'; put 'put ''bWUoYT0+ITE9PT1mdW5jdGlvbiBkY3QoYyl7aWYoITE9PT1xbyhjKSlyZXR1cm4hMTtjb25zdHtjb2x1bW46bCxzb3J0T3JkZXI6YX09YztyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihsKSYmW25GLHJGXS5pbmNsdWRlcyhhKX0oYSkpKXJldHVybiExO2NvbnN0IGw9Yy5tYXAoYT0+e2xldHtj''@;'; put 'put ''b2x1bW46ZH09YTtyZXR1cm4gZH0pO3JldHVybiBuZXcgU2V0KGwpLnNpemU9PT1sLmxlbmd0aH0obCkmJmwuZXZlcnkoZD0+e2xldHtjb2x1bW46aH09ZDtyZXR1cm4gaDw9YSYmaD49MH0pfXNhdmVBbGxTb3J0U2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIu''@;'; put 'put ''Z2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKTthLmluaXRpYWxDb25maWc9eXMobCxoPT57bGV0e2NvbHVtbjpmLC4uLnZ9PWg7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGYpLC4uLnZ9fSksdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJj''@;'; put 'put ''b2x1bW5Tb3J0aW5nIixhKX1nZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpe2NvbnN0IGw9e307dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJjb2x1bW5Tb3J0aW5nIixsKTtjb25zdCBhPWwudmFsdWU7cmV0dXJuIFBhKGEpJiZBcnJheS5pc0FycmF5KGEuaW5pdGlh''@;'; put 'put ''bENvbmZpZykmJihhLmluaXRpYWxDb25maWc9eXMoYS5pbml0aWFsQ29uZmlnLGg9PntsZXR7Y29sdW1uOmYsLi4udn09aDtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGYpLC4uLnZ9fSkpLGF9Z2V0Q29sdW1uTmV4dENvbmZpZyhsKXtjb25zdCBhPXRoaXMuY29sdW1u''@;'; put 'put ''U3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtpZihQYShhKSl7Y29uc3QgaD1xNGUoYSk7cmV0dXJuIFBhKGgpP3tjb2x1bW46bCxzb3J0T3JkZXI6aH06dm9pZCAwfWNvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCk7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSYmbD49MCYm''@;'; put 'put ''bDxkKXJldHVybntjb2x1bW46bCxzb3J0T3JkZXI6cTRlKCl9fWdldE5leHRTb3J0Q29uZmlnKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvRjtjb25zdCBkPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRJbmRleE9m''@;'; put 'put ''Q29sdW1uSW5Tb3J0UXVldWUobCksaD0tMSE9PWQsZj10aGlzLmdldFNvcnRDb25maWcoKSx2PXRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhsKTtpZihoKXtpZihfYyh2KSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKV07aWYoYT09PW9GKXJldHVyblsuLi5mLnNsaWNl''@;'; put 'put ''KDAsZCksLi4uZi5zbGljZShkKzEpLHZdO2lmKCJyZXBsYWNlIj09PWEpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSx2LC4uLmYuc2xpY2UoZCsxKV19cmV0dXJuIFBhKHYpP2YuY29uY2F0KHYpOmZ9Z2V0UGx1Z2luQ29sdW1uQ29uZmlnKGwpe2lmKHFvKGwpKXtjb25zdCBhPWxbdGhpcy5wbHVn''@;'; put 'put ''aW5LZXldO2lmKHFvKGEpKXJldHVybiBhfXJldHVybnt9fWdldE1lcmdlZFBsdWdpblNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV0sZD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKSxoPXRo''@;'; put 'put ''aXMuaG90LmdldENlbGxNZXRhKDAsbCksZj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZi5jb2x1bW5zKT9PYmplY3QuYXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNvbHVtbkNvbmZpZyhmLmNvbHVtbnNbbF0pKTptbChmLmNvbHVtbnMpP09iamVjdC5h''@;'; put 'put ''c3NpZ24oZCxhLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGYuY29sdW1ucyhsKSkpOk9iamVjdC5hc3NpZ24oZCxhKX1nZXRGaXJzdENlbGxTZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCksZD1PYmplY3QuY3JlYXRlKGEpO3JldHVybiBkW3RoaXMucGx1''@;'; put 'put ''Z2luS2V5XT10aGlzLmNvbHVtbk1ldGFDYWNoZS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSksZH1nZXROdW1iZXJPZlJvd3NUb1NvcnQobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO3JldHVybiBhLm1heFJvd3M8PWw/YS5tYXhSb3dzOmwt''@;'; put 'put ''YS5taW5TcGFyZVJvd3N9c29ydEJ5UHJlc2V0U29ydFN0YXRlcyhsKXtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSksMD09PWwubGVuZ3RoKXJldHVybjtjb25zdCBhPVtdLGQ9dGhpcy5o''@;'; put 'put ''b3QuY291bnRSb3dzKCksaD1aPT55cyhsLHJlPT50aGlzLmhvdC5nZXREYXRhQXRDZWxsKFoscmUuY29sdW1uKSk7Zm9yKGxldCBaPTA7Wjx0aGlzLmdldE51bWJlck9mUm93c1RvU29ydChkKTtaKz0xKWEucHVzaChbdGhpcy5ob3QudG9QaHlzaWNhbFJvdyhaKV0uY29uY2F0KGgoWikpKTtj''@;'; put 'put ''b25zdCBmPXlzKGEsWj0+WlswXSk7IWZ1bmN0aW9uIHVjdChjLGwpe2NvbnN0IGE9Y2N0KGwpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+Mj9kLTI6MCksZj0yO2Y8ZDtmKyspaFtmLTJdPWFyZ3VtZW50c1tmXTtjLnNvcnQoYSguLi5oKSl9KGEsdGhpcy5wbHVn''@;'; put 'put ''aW5LZXkseXMobCxaPT5aLnNvcnRPcmRlcikseXMobCxaPT50aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKFouY29sdW1uKSkpO2ZvcihsZXQgWj1hLmxlbmd0aDtaPGQ7Wis9MSlhLnB1c2goW1pdLmNvbmNhdChoKFopKSk7Y29uc3Qgdj15cyhhLFo9PlpbMF0pLE09bmV3IE1hcCh5cyhmLCha''@;'; put 'put ''LHJlKT0+W1osdltyZV1dKSksRD15cyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxaPT5NLmhhcyhaKT9NLmdldChaKTpaKTt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UoRCl9c29ydEJ5U2V0dGluZ3MobCl7aWYocW8obCkp''@;'; put 'put ''e3RoaXMuY29sdW1uU3RhdGVzTWFuYWdlci51cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKTtjb25zdCBhPWwuaW5pdGlhbENvbmZpZzsoQXJyYXkuaXNBcnJheShhKXx8cW8oYSkpJiZ0aGlzLnNvcnQoYSl9ZWxzZSB0aGlzLmhvdC5yZW5kZXIoKX11cGRhdGVIZWFkZXJDbGFzc2VzKGwp''@;'; put 'put ''e2lmKGxvKGwsZnVuY3Rpb24gdmN0KCl7cmV0dXJuIEFycmF5LmZyb20ocmdlLnZhbHVlcygpKS5jb25jYXQobmdlLGVnZSx0Z2UpfSgpKSwhMSE9PXRoaXMuZW5hYmxlZCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gt''@;'; put 'put ''MV09YXJndW1lbnRzW2hdO1RpKGwsZnVuY3Rpb24gbWN0KGMsbCxhLGQpe2NvbnN0IGg9W3RnZV07aWYoZCYmaC5wdXNoKG5nZSksITE9PT1hKXJldHVybiBoLnB1c2goZWdlKSxoO2NvbnN0IGY9Yy5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtyZXR1cm4gUGEoZikmJmgucHVzaChyZ2UuZ2V0''@;'; put 'put ''KGYpKSxofSguLi5kKSl9fW9uVXBkYXRlU2V0dGluZ3MobCl7c3VwZXIub25VcGRhdGVTZXR0aW5ncyhsKSxudWxsIT09dGhpcy5jb2x1bW5NZXRhQ2FjaGUmJnRoaXMuY29sdW1uTWV0YUNhY2hlLmluaXQodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkp''@;'; put 'put ''LFBhKGxbdGhpcy5wbHVnaW5LZXldKSYmdGhpcy5zb3J0QnlTZXR0aW5ncyhsW3RoaXMucGx1Z2luS2V5XSl9d2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEpe3JldHVybiB0aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKGEpW3RoaXMucGx1Z2luS2V5XS5oZWFkZXJBY3Rpb24mJnBvKGwu''@;'; put 'put ''dGFyZ2V0LEs0ZSl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpe2lmKCExIT09eUooYS5yb3csYS5jb2wsbCkmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpJiYodGhpcy5ob3Qu''@;'; put 'put ''ZGVzZWxlY3RDZWxsKCksdGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhhLmNvbCkpO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCksaD10aGlzLmdldENvbHVtbk5leHRDb25maWcoYS5jb2wpO251bGwhPWQmJmQuaXNPcGVuZWQoKSYmdGhpcy5ob3QuZ2V0Q2VsbFZhbGlkYXRvcihk''@;'; put 'put ''LnJvdyxkLmNvbCk/dGhpcy5ob3QuYWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIiwoKT0+e3RoaXMuc29ydChoKX0pOnRoaXMuc29ydChoKX19ZGVzdHJveSgpe3ZhciBsO251bGw9PT0obD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSxz''@;'; put 'put ''dXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIF9KKCl7Y29uc3QgYz10aGlzLmdldEFsbFNhdmVkU29ydFNldHRpbmdzKCk7aWYocW8oYykpdGhpcy5zb3J0QnlTZXR0aW5ncyhjKTtlbHNle2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV07dGhpcy5zb3J0QnlT''@;'; put 'put ''ZXR0aW5ncyhsKX19ZnVuY3Rpb24geGN0KGMsbCl7Y29uc3QgYT1YNGUobCk7aWYoITE9PT1KNGUoYyxsKXx8bnVsbD09PWEpcmV0dXJuO2NvbnN0IGQ9dGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhjKVt0aGlzLnBsdWdpbktleV07aWYodGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGEsdGhp''@;'; put 'put ''cy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLGMsZC5pbmRpY2F0b3IsZC5oZWFkZXJBY3Rpb24pLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0IHY9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRPcmRlck9mQ29sdW1uKGMpO3ZvKGwsLi4uKGM9PlsiYXJpYS1zb3J0''@;'; put 'put ''IixjXSkodj9gJHt2fWVuZGluZ2A6Im5vbmUiKSl9fWZ1bmN0aW9uIEVjdChjKXshMD09PWMmJnRoaXMuaG90LnZpZXcmJldfKHA5LHRoaXMsX0opLmNhbGwodGhpcyl9ZnVuY3Rpb24gVGN0KGMsbCxhLGQpeyExIT09eUoobC5yb3csbC5jb2wsYykmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVy''@;'; put 'put ''Q2xpY2tlZChjLGwuY29sKSYmdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpJiYoZC5jb2x1bW49ITApfWZ1bmN0aW9uIGc5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBBY3QoYyl7dmFyIGw9ZnVuY3Rpb24ga2N0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBJY3Q9Y2xhc3MgRGN0e2NvbnN0cnVjdG9yKGwsYSl7ZzkodGhpcywicGx1Z2luIix2b2lkIDApLGc5KHRoaXMsImhvdCIsdm9pZCAwKSxnOSh0aGlzLCJlbmRwb2ludHMiLFtdKSxnOSh0aGlzLCJzZXR0aW5ncyIs''@;'; put 'put ''dm9pZCAwKSxnOSh0aGlzLCJzZXR0aW5nc1R5cGUiLCJhcnJheSIpLGc5KHRoaXMsImN1cnJlbnRFbmRwb2ludCIsbnVsbCksZzkodGhpcywiY2VsbHNUb1NldENhY2hlIixbXSksdGhpcy5wbHVnaW49bCx0aGlzLmhvdD10aGlzLnBsdWdpbi5ob3QsdGhpcy5zZXR0aW5ncz1hfWluaXRFbmRw''@;'; put 'put ''b2ludHMoKXt0aGlzLmVuZHBvaW50cz10aGlzLnBhcnNlU2V0dGluZ3MoKSx0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1nZXRFbmRwb2ludChsKXtyZXR1cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxsTWlzc2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdz''@;'; put 'put ''KVtsXTp0aGlzLmVuZHBvaW50c1tsXX1nZXRBbGxFbmRwb2ludHMoKXtyZXR1cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxsTWlzc2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdzKTp0aGlzLmVuZHBvaW50c31maWxsTWlzc2luZ0VuZHBvaW50RGF0YShsKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5wYXJzZVNldHRpbmdzKGwuY2FsbCh0aGlzKSl9cGFyc2VTZXR0aW5ncyhsKXtjb25zdCBhPVtdO2xldCBkPWw7aWYoZHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuc2V0dGluZ3MpcmV0dXJuIGR8fChkPXRoaXMuc2V0dGluZ3MpLFluKGQsaD0+e2NvbnN0IGY9e307dGhp''@;'; put 'put ''cy5hc3NpZ25TZXR0aW5nKGgsZiwicmFuZ2VzIixbWzAsdGhpcy5ob3QuY291bnRSb3dzKCktMV1dKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyZXZlcnNlZFJvd0Nvb3JkcyIsITEpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uUm93IixuZXcgRXJyb3IoIlxuICAgICAg''@;'; put 'put ''ICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gcm93IGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJvcGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZGVzdGluYXRpb25Db2x1bW4iLG5ldyBFcnJvcigiXG4gICAg''@;'; put 'put ''ICAgIFlvdSBtdXN0IHByb3ZpZGUgYSBkZXN0aW5hdGlvbiBjb2x1bW4gZm9yIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29yayBwcm9wZXJseSFcbiAgICAgICIpKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJzb3VyY2VDb2x1bW4iLGguZGVzdGluYXRpb25Db2x1''@;'; put 'put ''bW4pLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInR5cGUiLCJzdW0iKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJmb3JjZU51bWVyaWMiLCExKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJzdXBwcmVzc0RhdGFUeXBlRXJyb3JzIiwhMCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiY3VzdG9t''@;'; put 'put ''RnVuY3Rpb24iLG51bGwpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJlYWRPbmx5IiwhMCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicm91bmRGbG9hdCIsITEpLGEucHVzaChmKX0pLGE7dGhpcy5zZXR0aW5nc1R5cGU9ImZ1bmN0aW9uIn1hc3NpZ25TZXR0aW5nKGwsYSxkLGgpe2lmKCJy''@;'; put 'put ''YW5nZXMiIT09ZHx8dm9pZCAwIT09bFtkXSl7aWYoInJhbmdlcyIhPT1kfHwwIT09bFtkXS5sZW5ndGgpaWYodm9pZCAwPT09bFtkXSl7aWYoaCBpbnN0YW5jZW9mIEVycm9yKXRocm93IGg7YVtkXT1ofWVsc2UgYVtkXT0iZGVzdGluYXRpb25Sb3ciPT09ZCYmYS5yZXZlcnNlZFJvd0Nvb3Jk''@;'; put 'put ''cz90aGlzLmhvdC5jb3VudFJvd3MoKS1sW2RdLTE6bFtkXX1lbHNlIGFbZF09aH1yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbihsLGEsZCl7aWYoImZ1bmN0aW9uIiE9PXRoaXMuc2V0dGluZ3NUeXBlKXJldHVybjtjb25zdCBoPWwuaW5kZXhPZigicm93Iik+LTE/InJvdyI6''@;'; put 'put ''ImNvbCIsZj10aGlzLmdldEFsbEVuZHBvaW50cygpO1luKGYsdj0+eyJyb3ciPT09aCYmdi5kZXN0aW5hdGlvblJvdz49YSYmKCJpbnNlcnRfcm93Ij09PWw/di5hbHRlclJvd09mZnNldD1kOiJyZW1vdmVfcm93Ij09PWwmJih2LmFsdGVyUm93T2Zmc2V0PS0xKmQpKSwiY29sIj09PWgmJnYu''@;'; put 'put ''ZGVzdGluYXRpb25Db2x1bW4+PWEmJigiaW5zZXJ0X2NvbCI9PT1sP3YuYWx0ZXJDb2x1bW5PZmZzZXQ9ZDoicmVtb3ZlX2NvbCI9PT1sJiYodi5hbHRlckNvbHVtbk9mZnNldD0tMSpkKSl9KSx0aGlzLnJlc2V0QWxsRW5kcG9pbnRzKGYsITEpfXJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFs''@;'; put 'put ''dGVyYXRpb24obCxhLGQsaCxmKXtsZXQgdj0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdKXx8YXJndW1lbnRzWzVdO2lmKCJmdW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZSl7Y29uc3QgYmU9KCk9Pih0aGlzLmhvdC5yZW1vdmVIb29rKCJiZWZvcmVWaWV3''@;'; put 'put ''UmVuZGVyIixiZSksdGhpcy5yZWZyZXNoQWxsRW5kcG9pbnRzKCkpO3JldHVybiB2b2lkIHRoaXMuaG90LmFkZEhvb2tPbmNlKCJiZWZvcmVWaWV3UmVuZGVyIixiZSl9Y29uc3QgTT1sLmluZGV4T2YoInJvdyIpPi0xPyJyb3ciOiJjb2wiLEQ9bC5pbmRleE9mKCJyZW1vdmUiKT4tMT8tMTox''@;'; put 'put ''LFo9dGhpcy5nZXRBbGxFbmRwb2ludHMoKSxyZT0wPT09bC5pbmRleE9mKCJtb3ZlX3JvdyIpLGNlPWE7WW4oWixiZT0+eyJyb3ciPT09TSYmYmUuZGVzdGluYXRpb25Sb3c+PWNlJiYoYmUuYWx0ZXJSb3dPZmZzZXQ9RCpkKSwiY29sIj09PU0mJmJlLmRlc3RpbmF0aW9uQ29sdW1uPj1jZSYm''@;'; put 'put ''KGJlLmFsdGVyQ29sdW1uT2Zmc2V0PUQqZCl9KSx0aGlzLnJlc2V0QWxsRW5kcG9pbnRzKFosIXJlKSxZbihaLHJlP2JlPT57dGhpcy5leHRlbmRFbmRwb2ludFJhbmdlcyhiZSxjZSxoWzBdLGgubGVuZ3RoKSx0aGlzLnJlY3JlYXRlUGh5c2ljYWxSYW5nZXMoYmUpLHRoaXMuY2xlYXJPZmZz''@;'; put 'put ''ZXRJbmZvcm1hdGlvbihiZSl9OmJlPT57dGhpcy5zaGlmdEVuZHBvaW50Q29vcmRpbmF0ZXMoYmUsY2UpfSksdiYmdGhpcy5yZWZyZXNoQWxsRW5kcG9pbnRzKCl9Y2xlYXJPZmZzZXRJbmZvcm1hdGlvbihsKXtsLmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFsdGVyQ29sdW1uT2Zmc2V0PXZv''@;'; put 'put ''aWQgMH1leHRlbmRFbmRwb2ludFJhbmdlcyhsLGEsZCxoKXtZbihsLnJhbmdlcyxmPT57ZlsxXSYmKGE+PWZbMF0mJmE8PWZbMV0/ZD5mWzFdP2ZbMV0rPWg6ZDxmWzBdJiYoZlswXS09aCk6ZD49ZlswXSYmZDw9ZlsxXSYmKGZbMV0tPWgsYTw9ZlswXSYmKGZbMF0rPTEsZlsxXSs9MSkpKX0p''@;'; put 'put ''fXJlY3JlYXRlUGh5c2ljYWxSYW5nZXMobCl7Y29uc3QgZD1bXSxoPVtdO1luKGwucmFuZ2VzLGY9Pntjb25zdCB2PVtdO2lmKGZbMV0pZm9yKGxldCBNPWZbMF07TTw9ZlsxXTtNKyspdi5wdXNoKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coTSkpO2Vsc2Ugdi5wdXNoKHRoaXMuaG90LnRvUGh5''@;'; put 'put ''c2ljYWxSb3coZlswXSkpO2gucHVzaCh2KX0pLFluKGgsZj0+e2xldCB2PVtdO1luKGYsKE0sRCk9PnswPT09RD92LnB1c2goTSk6ZltEXSE9PWZbRC0xXSsxJiYodi5wdXNoKGZbRC0xXSksZC5wdXNoKHYpLHY9W10sdi5wdXNoKE0pKSxEPT09Zi5sZW5ndGgtMSYmKHYucHVzaChNKSxkLnB1''@;'; put 'put ''c2godikpfSl9KSxsLnJhbmdlcz1kfXNoaWZ0RW5kcG9pbnRDb29yZGluYXRlcyhsLGEpe2wuYWx0ZXJSb3dPZmZzZXQmJjAhPT1sLmFsdGVyUm93T2Zmc2V0PyhsLmRlc3RpbmF0aW9uUm93Kz1sLmFsdGVyUm93T2Zmc2V0fHwwLFluKGwucmFuZ2VzLGQ9PntZbihkLChoLGYpPT57aD49YSYm''@;'; put 'put ''KGRbZl0rPWwuYWx0ZXJSb3dPZmZzZXR8fDApfSl9KSk6bC5hbHRlckNvbHVtbk9mZnNldCYmMCE9PWwuYWx0ZXJDb2x1bW5PZmZzZXQmJihsLmRlc3RpbmF0aW9uQ29sdW1uKz1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwLGwuc291cmNlQ29sdW1uKz1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwKX1y''@;'; put 'put ''ZXNldEFsbEVuZHBvaW50cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldEFsbEVuZHBvaW50cygpLGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTts''@;'; put 'put ''LnNvbWUoaD0+e2NvbnN0IHY9aC5hbHRlckNvbHVtbk9mZnNldHx8MDtyZXR1cm4gaC5kZXN0aW5hdGlvblJvdysoaC5hbHRlclJvd09mZnNldHx8MCk+PXRoaXMuaG90LmNvdW50Um93cygpfHxoLmRlc3RpbmF0aW9uQ29sdW1uK3Y+PXRoaXMuaG90LmNvdW50Q29scygpfSl8fCh0aGlzLmNl''@;'; put 'put ''bGxzVG9TZXRDYWNoZT1bXSxZbihsLGg9Pnt0aGlzLnJlc2V0RW5kcG9pbnRWYWx1ZShoLGEpfSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdKX1yZWZyZXNoQWxsRW5kcG9p''@;'; put 'put ''bnRzKCl7dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sWW4odGhpcy5nZXRBbGxFbmRwb2ludHMoKSxsPT57dGhpcy5jdXJyZW50RW5kcG9pbnQ9bCx0aGlzLnBsdWdpbi5jYWxjdWxhdGUobCksdGhpcy5zZXRFbmRwb2ludFZhbHVlKGwsImluaXQiKX0pLHRoaXMuY3VycmVudEVuZHBvaW50PW51''@;'; put 'put ''bGwsdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKGwpe2NvbnN0IGE9W107dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sWW4obCwoZCxo''@;'; put 'put ''LGYpPT57YCR7ZFsyXXx8IiJ9YCE9YCR7ZFszXX1gJiZZbih0aGlzLmdldEFsbEVuZHBvaW50cygpLCh2LE0pPT57dGhpcy5ob3QucHJvcFRvQ29sKGZbaF1bMV0pPT09di5zb3VyY2VDb2x1bW4mJi0xPT09YS5pbmRleE9mKE0pJiZhLnB1c2goTSl9KX0pLFluKGEsZD0+e3RoaXMucmVmcmVz''@;'; put 'put ''aEVuZHBvaW50KHRoaXMuZ2V0RW5kcG9pbnQoZCkpfSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hDZWxsTWV0YXMoKXt0aGlzLmVuZHBvaW50cy5mb3JFYWNo''@;'; put 'put ''KGw9Pntjb25zdCBhPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKG51bGwhPT1hKXtjb25zdCBkPXRoaXMuaG90LmdldENlbGxNZXRhKGEsbC5kZXN0aW5hdGlvbkNvbHVtbik7ZC5yZWFkT25seT1sLnJlYWRPbmx5LGQuY2xhc3NOYW1lPSJjb2x1bW5TdW1tYXJ5''@;'; put 'put ''UmVzdWx0In19KX1yZWZyZXNoRW5kcG9pbnQobCl7dGhpcy5jdXJyZW50RW5kcG9pbnQ9bCx0aGlzLnBsdWdpbi5jYWxjdWxhdGUobCksdGhpcy5zZXRFbmRwb2ludFZhbHVlKGwpLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGx9cmVzZXRFbmRwb2ludFZhbHVlKGwpe2xldCBhPSEoYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07Y29uc3QgaD1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwO3RoaXMuY2VsbHNUb1NldENhY2hlLnB1c2goW3RoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3crKGEmJmwuYWx0ZXJSb3dPZmZz''@;'; put 'put ''ZXR8fDApKSx0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsLmRlc3RpbmF0aW9uQ29sdW1uKyhhP2g6MCkpLCIiXSl9c2V0RW5kcG9pbnRWYWx1ZShsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD10aGlzLmhv''@;'; put 'put ''dC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KTtpZihsLmRlc3RpbmF0aW9uUm93Pj10aGlzLmhvdC5jb3VudFJvd3MoKXx8bC5kZXN0aW5hdGlvbkNvbHVtbj49dGhpcy5ob3QuY291bnRDb2xzKCkpcmV0dXJuIHZvaWQgdGhpcy50aHJvd091dE9mQm91bmRzV2FybmluZygpO2NvbnN0''@;'; put 'put ''IGY9dGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYobnVsbCE9PWYpe2NvbnN0IHY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixsLmRlc3RpbmF0aW9uQ29sdW1uKTsoImluaXQiPT09YXx8di5yZWFkT25seSE9PWwucmVhZE9ubHkpJiYodi5yZWFkT25seT1sLnJlYWRP''@;'; put 'put ''bmx5LHYuY2xhc3NOYW1lPSJjb2x1bW5TdW1tYXJ5UmVzdWx0Iil9aWYoKCEwPT09bC5yb3VuZEZsb2F0fHxOdW1iZXIuaXNJbnRlZ2VyKGwucm91bmRGbG9hdCkpJiYhaXNOYU4obC5yZXN1bHQpKXtjb25zdCB2PWwucm91bmRGbG9hdDtsZXQgTT0wO051bWJlci5pc0ludGVnZXIodikmJihN''@;'; put 'put ''PU1hdGgubWluKE1hdGgubWF4KDAsdiksMTAwKSksbC5yZXN1bHQ9bC5yZXN1bHQudG9GaXhlZChNKX1kP3RoaXMuaG90LnNldERhdGFBdENlbGwoaCxsLmRlc3RpbmF0aW9uQ29sdW1uLGwucmVzdWx0LCJDb2x1bW5TdW1tYXJ5LnNldCIpOnRoaXMuY2VsbHNUb1NldENhY2hlLnB1c2goW2gs''@;'; put 'put ''bC5kZXN0aW5hdGlvbkNvbHVtbixsLnJlc3VsdF0pLGwuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGwuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfXRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCl7aWwoIk9uZSBvZiB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2lucycgZGVzdGluYXRpb24gcG9pbnRz''@;'; put 'put ''IHlvdSBwcm92aWRlZCBpcyBiZXlvbmQgdGhlIHRhYmxlIGJvdW5kYXJpZXMhIil9fTtmdW5jdGlvbiB3SihjKXtyZXR1cm4gbnVsbD09Y3x8aXNOYU4oYyl9ZnVuY3Rpb24gc0YoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IENKPSJjb2x1bW5TdW1tYXJ5Ijt2YXIgYlQ9bmV3IFdlYWtTZXQ7Y2xhc3MgTmN0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBl''@;'; put 'put ''ciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFJjdChjLGwpeyhmdW5jdGlvbiBMY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChj''@;'; put 'put ''KX0odGhpcyxiVCksZnVuY3Rpb24gT2N0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBQY3QoYyl7dmFyIGw9ZnVuY3Rpb24gRmN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9''@;'; put 'put ''YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJz''@;'; put 'put ''dHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZW5kcG9pbnRzIixudWxsKX1zdGF0''@;'; put 'put ''aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gQ0p9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjIwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDSl19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLnNl''@;'; put 'put ''dHRpbmdzPXRoaXMuaG90LmdldFNldHRpbmdzKClbQ0pdLHRoaXMuZW5kcG9pbnRzPW5ldyBJY3QodGhpcyx0aGlzLnNldHRpbmdzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2gr''@;'; put 'put ''KylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gc0YoYlQsbCxWY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07''@;'; put 'put ''cmV0dXJuIHNGKGJULGwsamN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHNGKGJU''@;'; put 'put ''LGwsQmN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0''@;'; put 'put ''ZUNvbCIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5l''@;'; put 'put ''dyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVh''@;'; put 'put ''dGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1''@;'; put 'put ''Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5l''@;'; put 'put ''bmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX3JvdyIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09''@;'; put 'put ''YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5''@;'; put 'put ''KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBzRihiVCxsLHpjdCkuY2FsbChsLC4uLmQpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmVuZHBvaW50cz1udWxsLHRoaXMuc2V0dGluZ3M9bnVsbCx0aGlzLmN1cnJlbnRFbmRwb2lu''@;'; put 'put ''dD1udWxsLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZW5kcG9pbnRzLmluaXRFbmRwb2ludHMoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1jYWxjdWxhdGUobCl7c3dpdGNoKGwudHlwZS50''@;'; put 'put ''b0xvd2VyQ2FzZSgpKXtjYXNlInN1bSI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVTdW0obCk7YnJlYWs7Y2FzZSJtaW4iOmNhc2UibWF4IjpsLnJlc3VsdD10aGlzLmNhbGN1bGF0ZU1pbk1heChsLGwudHlwZSk7YnJlYWs7Y2FzZSJjb3VudCI6bC5yZXN1bHQ9dGhpcy5jb3VudEVudHJpZXMo''@;'; put 'put ''bCk7YnJlYWs7Y2FzZSJhdmVyYWdlIjpsLnJlc3VsdD10aGlzLmNhbGN1bGF0ZUF2ZXJhZ2UobCk7YnJlYWs7Y2FzZSJjdXN0b20iOmwucmVzdWx0PWwuY3VzdG9tRnVuY3Rpb24uY2FsbCh0aGlzLGwpfX1jYWxjdWxhdGVTdW0obCl7bGV0IGE9MDtyZXR1cm4gWG8obC5yYW5nZXMsZD0+e2Er''@;'; put 'put ''PXRoaXMuZ2V0UGFydGlhbFN1bShkLGwuc291cmNlQ29sdW1uKX0pLGF9Z2V0UGFydGlhbFN1bShsLGEpe2xldCBkPTAsaD1sWzFdfHxsWzBdLGY9bnVsbCx2PTA7ZG97aWYoZj10aGlzLmdldENlbGxWYWx1ZShoLGEpLGY9d0ooZik/bnVsbDpmLG51bGwhPT1mKXtjb25zdCBNPShgJHtmfWAu''@;'; put 'put ''c3BsaXQoIi4iKVsxXXx8W10pLmxlbmd0aHx8MTtNPnYmJih2PU0pfWQrPWZ8fDAsaC09MX13aGlsZShoPj1sWzBdKTtyZXR1cm4gTWF0aC5yb3VuZChkKjEwKip2KS8xMCoqdn1jYWxjdWxhdGVNaW5NYXgobCxhKXtsZXQgZD1udWxsO3JldHVybiBYbyhsLnJhbmdlcyxoPT57Y29uc3QgZj10''@;'; put 'put ''aGlzLmdldFBhcnRpYWxNaW5NYXgoaCxsLnNvdXJjZUNvbHVtbixhKTtpZihudWxsPT09ZCYmbnVsbCE9PWYmJihkPWYpLG51bGwhPT1mKXN3aXRjaChhKXtjYXNlIm1pbiI6ZD1NYXRoLm1pbihkLGYpO2JyZWFrO2Nhc2UibWF4IjpkPU1hdGgubWF4KGQsZil9fSksbnVsbD09PWQ/Ik5vdCBl''@;'; put 'put ''bm91Z2ggZGF0YSI6ZH1nZXRQYXJ0aWFsTWluTWF4KGwsYSxkKXtsZXQgdixoPW51bGwsZj1sWzFdfHxsWzBdO2Rve2lmKHY9dGhpcy5nZXRDZWxsVmFsdWUoZixhKSx2PXdKKHYpP251bGw6dixudWxsPT09aCloPXY7ZWxzZSBpZihudWxsIT09dilzd2l0Y2goZCl7Y2FzZSJtaW4iOmg9TWF0''@;'; put 'put ''aC5taW4oaCx2KTticmVhaztjYXNlIm1heCI6aD1NYXRoLm1heChoLHYpfWYtPTF9d2hpbGUoZj49bFswXSk7cmV0dXJuIGh9Y291bnRFbXB0eShsLGEpe2xldCBkLGg9MCxmPWxbMV18fGxbMF07ZG97ZD10aGlzLmdldENlbGxWYWx1ZShmLGEpLGQ9d0ooZCk/bnVsbDpkLG51bGw9PT1kJiYo''@;'; put 'put ''aCs9MSksZi09MX13aGlsZShmPj1sWzBdKTtyZXR1cm4gaH1jb3VudEVudHJpZXMobCl7bGV0IGE9MDtyZXR1cm4gWG8obC5yYW5nZXMsaD0+e2NvbnN0IGY9dm9pZCAwPT09aFsxXT8xOmhbMV0taFswXSsxLHY9dGhpcy5jb3VudEVtcHR5KGgsbC5zb3VyY2VDb2x1bW4pO2ErPWYsYS09dn0p''@;'; put 'put ''LGF9Y2FsY3VsYXRlQXZlcmFnZShsKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGVTdW0obCkvdGhpcy5jb3VudEVudHJpZXMobCl9Z2V0Q2VsbFZhbHVlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1Zpc3VhbFJvdyhsKSxoPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEpO2xldCBmPXRoaXMuaG90''@;'; put 'put ''LmdldFNvdXJjZURhdGFBdENlbGwobCxhKSx2PSIiO2lmKG51bGwhPT1kJiZudWxsIT09aCYmKHY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxoKS5jbGFzc05hbWV8fCIiKSx2LmluZGV4T2YoImNvbHVtblN1bW1hcnlSZXN1bHQiKT4tMSlyZXR1cm4gbnVsbDtpZih0aGlzLmVuZHBvaW50cy5j''@;'; put 'put ''dXJyZW50RW5kcG9pbnQuZm9yY2VOdW1lcmljJiYoInN0cmluZyI9PXR5cGVvZiBmJiYoZj1mLnJlcGxhY2UoLywvLCIuIikpLGY9cGFyc2VGbG9hdChmKSksaXNOYU4oZikmJiF0aGlzLmVuZHBvaW50cy5jdXJyZW50RW5kcG9pbnQuc3VwcHJlc3NEYXRhVHlwZUVycm9ycyl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoZ2xgQ29sdW1uU3VtbWFyeSBwbHVnaW46IGNlbGwgYXQgKCR7bH0sICR7YX0pIGlzIG5vdCBpbiBhXHgyMAogICAgICAgICAgbnVtZXJpYyBmb3JtYXQuIENhbm5vdCBkbyB0aGUgY2FsY3VsYXRpb24uYCk7cmV0dXJuIGZ9fWZ1bmN0aW9uIFZjdCgpe3RoaXMuZW5kcG9pbnRzLmlu''@;'; put 'put ''aXRFbmRwb2ludHMoKX1mdW5jdGlvbiBCY3QoYyl7dm9pZCAwIT09Yy5jb2x1bW5zJiZ0aGlzLmVuZHBvaW50cy5yZWZyZXNoQ2VsbE1ldGFzKCl9ZnVuY3Rpb24gamN0KGMsbCl7YyYmIkNvbHVtblN1bW1hcnkucmVzZXQiIT09bCYmIkNvbHVtblN1bW1hcnkuc2V0IiE9PWwmJiJsb2FkRGF0''@;'; put 'put ''YSIhPT1sJiZ0aGlzLmVuZHBvaW50cy5yZWZyZXNoQ2hhbmdlZEVuZHBvaW50cyhjKX1mdW5jdGlvbiB6Y3QoYyxsKXt0aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGNbMF0sYy5sZW5ndGgsYyx0aGlzLnBsdWdpbk5hbWUpLHRo''@;'; put 'put ''aXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oIm1vdmVfcm93IixsLGMubGVuZ3RoLGMsdGhpcy5wbHVnaW5OYW1lKX1mdW5jdGlvbiBTSihjLGwsYSl7b2dlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBvZ2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFlfKGMsbCl7cmV0dXJuIGMuZ2V0KHhKKGMsbCkpfWZ1bmN0aW9uIE1KKGMsbCxhKXtyZXR1cm4gYy5zZXQoeEooYyxsKSxhKSxhfWZ1''@;'; put 'put ''bmN0aW9uIHhKKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgbEY9bmV3''@;'; put 'put ''IFdlYWtNYXAsY0Y9bmV3IFdlYWtNYXAsdUY9bmV3IFdlYWtNYXAsc2dlPW5ldyBXZWFrU2V0O2NsYXNzIGxnZXtjb25zdHJ1Y3RvcigpeyhmdW5jdGlvbiBVY3QoYyxsKXtvZ2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsc2dlKSxTSih0aGlzLGxGLCEwKSxTSih0aGlzLGNGLG51bGwpLFNKKHRo''@;'; put 'put ''aXMsdUYsbmV3IFJlc2l6ZU9ic2VydmVyKGw9PnhKKHNnZSx0aGlzLFpjdCkuY2FsbCh0aGlzLGwpKSl9c2V0T2JzZXJ2ZWRFbGVtZW50KGwpe01KKGNGLHRoaXMsbCl9dW5vYnNlcnZlKCl7WV8odUYsdGhpcykudW5vYnNlcnZlKFlfKGNGLHRoaXMpKX1vYnNlcnZlKCl7TUoobEYsdGhpcywh''@;'; put 'put ''MCksWV8odUYsdGhpcykub2JzZXJ2ZShZXyhjRix0aGlzKSl9ZGVzdHJveSgpe1lfKHVGLHRoaXMpLmRpc2Nvbm5lY3QoKX19ZnVuY3Rpb24gWmN0KGMpeyFZXyhsRix0aGlzKSYmQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGg/Yy5mb3JFYWNoKGw9PntsZXR7Ym9yZGVyQm94U2l6ZTphfT1s''@;'; put 'put ''O2NvbnN0e2lubGluZVNpemU6ZCxibG9ja1NpemU6aH09YVswXTt0aGlzLnJ1bkxvY2FsSG9va3MoInJlc2l6ZSIsZCxoKX0pOk1KKGxGLHRoaXMsITEpfWZ1bmN0aW9uIG05KGMsbCxhKXsoZnVuY3Rpb24gV2N0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90''@;'; put 'put ''IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBObChjLGwpe3JldHVybiBjLmdldChjZ2UoYyxsKSl9ZnVuY3Rpb24gUmcoYyxsLGEpe3JldHVybiBjLnNldChjZ2UoYyxsKSxhKSxhfWZ1''@;'; put 'put ''bmN0aW9uIGNnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9VGwobGdlLHkx''@;'; put 'put ''KTt2YXIgdjk9bmV3IFdlYWtNYXAsRUo9bmV3IFdlYWtNYXAsTGc9bmV3IFdlYWtNYXAscW09bmV3IFdlYWtNYXAsWG09bmV3IFdlYWtNYXAsZEY9bmV3IFdlYWtNYXAsR189bmV3IFdlYWtNYXA7Y2xhc3MgYjl7c3RhdGljIGdldCBDTEFTU19FRElUT1JfQ09OVEFJTkVSKCl7cmV0dXJuImh0''@;'; put 'put ''Q29tbWVudHNDb250YWluZXIifXN0YXRpYyBnZXQgQ0xBU1NfRURJVE9SKCl7cmV0dXJuImh0Q29tbWVudHMifXN0YXRpYyBnZXQgQ0xBU1NfSU5QVVQoKXtyZXR1cm4iaHRDb21tZW50VGV4dEFyZWEifXN0YXRpYyBnZXQgQ0xBU1NfQ0VMTCgpe3JldHVybiJodENvbW1lbnRDZWxsIn1jb25z''@;'; put 'put ''dHJ1Y3RvcihsLGEpe3ZhciBkPXRoaXM7bTkodGhpcyx2OSx2b2lkIDApLG05KHRoaXMsRUosITEpLG05KHRoaXMsTGcsbnVsbCksbTkodGhpcyxxbSx2b2lkIDApLG05KHRoaXMsWG0sdm9pZCAwKSxtOSh0aGlzLGRGLCEwKSxtOSh0aGlzLEdfLG5ldyBsZ2UpLFJnKHY5LHRoaXMsbCksUmco''@;'; put 'put ''RUosdGhpcyxhKSxSZyhxbSx0aGlzLHRoaXMuY3JlYXRlRWRpdG9yKCkpLFJnKFhtLHRoaXMsTmwocW0sdGhpcykuc3R5bGUpLE5sKEdfLHRoaXMpLnNldE9ic2VydmVkRWxlbWVudCh0aGlzLmdldElucHV0RWxlbWVudCgpKSxObChHXyx0aGlzKS5hZGRMb2NhbEhvb2soInJlc2l6ZSIsZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJyZXNpemUiLC4uLmYpfSksdGhpcy5oaWRlKCl9c2V0UG9zaXRpb24obCxhKXtObChYbSx0aGlzKS5sZWZ0''@;'; put 'put ''PWAke2x9cHhgLE5sKFhtLHRoaXMpLnRvcD1gJHthfXB4YH1zZXRTaXplKGwsYSl7aWYobCYmYSl7Y29uc3QgZD10aGlzLmdldElucHV0RWxlbWVudCgpO2Quc3R5bGUud2lkdGg9YCR7bH1weGAsZC5zdHlsZS5oZWlnaHQ9YCR7YX1weGB9fWdldFNpemUoKXtyZXR1cm57d2lkdGg6c3UodGhp''@;'; put 'put ''cy5nZXRJbnB1dEVsZW1lbnQoKSksaGVpZ2h0Onh1KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpfX1vYnNlcnZlU2l6ZSgpe05sKEdfLHRoaXMpLm9ic2VydmUoKX1yZXNldFNpemUoKXtjb25zdCBsPXRoaXMuZ2V0SW5wdXRFbGVtZW50KCk7bC5zdHlsZS53aWR0aD0iIixsLnN0eWxlLmhlaWdo''@;'; put 'put ''dD0iIn1zZXRSZWFkT25seVN0YXRlKGwpe3RoaXMuZ2V0SW5wdXRFbGVtZW50KCkucmVhZE9ubHk9bH1zaG93KCl7TmwoWG0sdGhpcykuZGlzcGxheT0iYmxvY2siLFJnKGRGLHRoaXMsITEpfWhpZGUoKXtObChHXyx0aGlzKS51bm9ic2VydmUoKSxObChkRix0aGlzKXx8KE5sKFhtLHRoaXMp''@;'; put 'put ''LmRpc3BsYXk9Im5vbmUiKSxSZyhkRix0aGlzLCEwKX1pc1Zpc2libGUoKXtyZXR1cm4iYmxvY2siPT09TmwoWG0sdGhpcykuZGlzcGxheX1zZXRWYWx1ZSgpe2NvbnN0IGE9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIil8fCIiO3Ro''@;'; put 'put ''aXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWU9YX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldElucHV0RWxlbWVudCgpLnZhbHVlfWlzRm9jdXNlZCgpe3JldHVybiBObCh2OSx0aGlzKS5hY3RpdmVFbGVtZW50PT09dGhpcy5nZXRJbnB1dEVsZW1lbnQoKX1mb2N1cygpe3RoaXMuZ2V0SW5w''@;'; put 'put ''dXRFbGVtZW50KCkuZm9jdXMoKX1jcmVhdGVFZGl0b3IoKXtjb25zdCBsPU5sKHY5LHRoaXMpLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGE9TmwodjksdGhpcykuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtyZXR1cm4gbC5zdHlsZS5kaXNwbGF5PSJub25lIixSZyhMZyx0aGlzLE5sKHY5LHRo''@;'; put 'put ''aXMpLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxObChMZyx0aGlzKS5zZXRBdHRyaWJ1dGUoImRpciIsTmwoRUosdGhpcyk/InJ0bCI6Imx0ciIpLFRpKE5sKExnLHRoaXMpLGI5LkNMQVNTX0VESVRPUl9DT05UQUlORVIpLE5sKHY5LHRoaXMpLmJvZHkuYXBwZW5kQ2hpbGQoTmwoTGcsdGhpcykp''@;'; put 'put ''LFRpKGwsYjkuQ0xBU1NfRURJVE9SKSxUaShhLGI5LkNMQVNTX0lOUFVUKSxhLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCEwKSxsLmFwcGVuZENoaWxkKGEpLE5sKExnLHRoaXMpLmFwcGVuZENoaWxkKGwpLGx9Z2V0SW5wdXRFbGVtZW50KCl7cmV0dXJuIE5sKHFtLHRoaXMpLnF1''@;'; put 'put ''ZXJ5U2VsZWN0b3IoYC4ke2I5LkNMQVNTX0lOUFVUfWApfWdldEVkaXRvckVsZW1lbnQoKXtyZXR1cm4gTmwocW0sdGhpcyl9ZGVzdHJveSgpe2NvbnN0IGw9TmwoTGcsdGhpcyk/TmwoTGcsdGhpcykucGFyZW50Tm9kZTpudWxsO05sKHFtLHRoaXMpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo''@;'; put 'put ''TmwocW0sdGhpcykpLFJnKHFtLHRoaXMsbnVsbCksUmcoWG0sdGhpcyxudWxsKSxObChHXyx0aGlzKS5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZChObChMZyx0aGlzKSl9fVRsKGI5LHkxKTtjb25zdCBZY3Q9Yjk7ZnVuY3Rpb24gVEooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEdjdChj''@;'; put 'put ''KXt2YXIgbD1mdW5jdGlvbiAkY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHVnZXtjb25zdHJ1Y3RvcihsKXtUSih0aGlzLCJ3YXNMYXN0QWN0aW9uU2hvdyIsITApLFRKKHRoaXMsInNob3dEZWJvdW5jZWQiLG51''@;'; put 'put ''bGwpLFRKKHRoaXMsImhpZGluZ1RpbWVyIixudWxsKSx0aGlzLnVwZGF0ZURlbGF5KGwpfWhpZGUoKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSExLHRoaXMuaGlkaW5nVGltZXI9c2V0VGltZW91dCgoKT0+eyExPT09dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tz''@;'; put 'put ''KCJoaWRlIil9LDI1MCl9c2hvdyhsKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLHRoaXMuc2hvd0RlYm91bmNlZChsKX1jYW5jZWxIaWRpbmcoKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLGNsZWFyVGltZW91dCh0aGlzLmhpZGluZ1RpbWVyKSx0aGlzLmhpZGluZ1RpbWVyPW51bGx9''@;'; put 'put ''dXBkYXRlRGVsYXkoKXt0aGlzLnNob3dEZWJvdW5jZWQ9TUUoYT0+e3RoaXMud2FzTGFzdEFjdGlvblNob3cmJnRoaXMucnVuTG9jYWxIb29rcygic2hvdyIsYS5mcm9tLnJvdyxhLmZyb20uY29sKX0sYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz''@;'; put 'put ''WzBdOjI1MCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCl9fVRsKHVnZSx5MSk7Y29uc3QgWGN0PXVnZSxzcz0iLS0tLS0tLS0tIjtmdW5jdGlvbiB5OShjLGwpe2NvbnN0IGE9e307cmV0dXJuIFluKGMsZD0+e2QuZm9yQWxsKChoLGYpPT57aD49MCYmZj49MCYmKGFbaF18fChh''@;'; put 'put ''W2hdPVtdKSxhW2hdW2ZdPWwoaCxmKSl9KX0pLGF9ZnVuY3Rpb24gSm0oYyxsLGEsZCxoKXtZbihjLGY9PntmLmZvckFsbCgodixNKT0+e3Y+PTAmJk0+PTAmJmZ1bmN0aW9uIHJ1dChjLGwsYSxkLGgsZil7Y29uc3Qgdj1oKGMsbCk7bGV0IE09ZDt2LmNsYXNzTmFtZSYmKE09InZlcnRpY2Fs''@;'; put 'put ''Ij09PWE/ZnVuY3Rpb24gdHV0KGMsbCl7cmV0dXJuLTEhPT1jLmluZGV4T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0VG9wIiwiIikucmVwbGFjZSgiaHRNaWRkbGUiLCIiKS5yZXBsYWNlKCJodEJvdHRvbSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7bH1gfSh2LmNsYXNzTmFtZSxkKTpmdW5j''@;'; put 'put ''dGlvbiBudXQoYyxsKXtyZXR1cm4tMSE9PWMuaW5kZXhPZihsKT9jOmAke2MucmVwbGFjZSgiaHRMZWZ0IiwiIikucmVwbGFjZSgiaHRDZW50ZXIiLCIiKS5yZXBsYWNlKCJodFJpZ2h0IiwiIikucmVwbGFjZSgiaHRKdXN0aWZ5IiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KHYuY2xh''@;'; put 'put ''c3NOYW1lLGQpKSxmKGMsbCwiY2xhc3NOYW1lIixNKX0odixNLGwsYSxkLGgpfSl9KX1mdW5jdGlvbiBkZ2UoYyl7cmV0dXJuYDxzcGFuIGNsYXNzPSJzZWxlY3RlZCI+XHUyNzEzPC9zcGFuPiR7Y31gfWZ1bmN0aW9uIGhGKGMsbCl7bGV0IGE9ITE7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykm''@;'; put 'put ''JlluKGMsZD0+KGQuZm9yQWxsKChoLGYpPT57aWYoaD49MCYmZj49MCYmbChoLGYpKXJldHVybiBhPSEwLCExfSksYSkpLGF9ZnVuY3Rpb24gZkYoYyxsKXtjb25zdCBhPXt0b3A6MCxsZWZ0OjB9O2lmKGwhPT1jLm93bmVyRG9jdW1lbnQpe2NvbnN0e2ZyYW1lRWxlbWVudDpkfT1sLmRlZmF1''@;'; put 'put ''bHRWaWV3LHt0b3A6aCxsZWZ0OmZ9PWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS50b3A9aCxhLmxlZnQ9Zn1yZXR1cm4gYX1mdW5jdGlvbiAkXyhjLGwsYSl7aGdlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBoZ2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD''@;'; put 'put ''YW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFFtKGMsbCxhKXtyZXR1cm4gYy5zZXQoVWQoYyxsKSxhKSxhfWZ1bmN0aW9uIEpvKGMsbCl7cmV0dXJuIGMuZ2V0KFVkKGMsbCkpfWZ1bmN0aW9uIFVkKGMsbCxh''@;'; put 'put ''KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBwRj0iY29tbWVudHMiLE9nPSJj''@;'; put 'put ''b21tZW50Iix5VD0idmFsdWUiLGdGPSJyZWFkT25seSIsX1Q9cEYsQUo9YHBsdWdpbjoke3BGfWA7dmFyIEFsPW5ldyBXZWFrTWFwLHpwPW5ldyBXZWFrTWFwLG1GPW5ldyBXZWFrTWFwLHZGPW5ldyBXZWFrTWFwLGtKPW5ldyBXZWFrTWFwLGJGPW5ldyBXZWFrTWFwLFBoPW5ldyBXZWFrU2V0''@;'; put 'put ''O2NsYXNzIHV1dCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBhdXQoYyxsKXtoZ2UoYyxsKSxsLmFkZChjKX0odGhpcyxQaCksZnVuY3Rpb24gb3V0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBzdXQoYyl7dmFyIGw9ZnVuY3Rpb24gbHV0''@;'; put 'put ''KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws''@;'; put 'put ''e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywicmFuZ2UiLHt9KSwkXyh0aGlzLEFsLG51bGwpLCRfKHRoaXMsenAsbnVsbCksJF8odGhpcyxtRiwhMSksJF8odGhpcyx2RiwhMSksJF8odGhpcyxrSixudWxsKSwkXyh0''@;'; put 'put ''aGlzLGJGLCIiKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gcEZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNjB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue2Rpc3BsYXlEZWxheToyNTB9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKVtwRl19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChKbyhBbCx0aGlzKXx8KFFtKEFsLHRoaXMsbmV3IFljdCh0aGlzLmhvdC5yb290RG9jdW1lbnQsdGhpcy5ob3QuaXNSdGwoKSkpLEpvKEFsLHRoaXMpLmFkZExvY2FsSG9vaygicmVz''@;'; put 'put ''aXplIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBVZChQaCxsLGJ1dCkuY2FsbChsLC4uLmQpfSkpLEpvKHpwLHRoaXMpfHxRbSh6cCx0aGlzLG5ldyBYY3QodGhpcy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJkaXNwbGF5RGVsYXkiKSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixhPT50aGlzLmFkZFRvQ29udGV4dE1lbnUoYSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXJlciIsKGEsZCxoLGYsdixNKT0+VWQoUGgsdGhpcyxndXQpLmNhbGwo''@;'; put 'put ''dGhpcyxhLE0pKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsIiwoKT0+VWQoUGgsdGhpcyx5dXQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJCZWdpbkVkaXRpbmciLCgpPT50aGlzLmhpZGUoKSksdGhpcy5hZGRIb29rKCJhZnRlckRvY3VtZW50S2V5RG93biIsYT0+VWQoUGgs''@;'; put 'put ''dGhpcyxwZ2UpLmNhbGwodGhpcyxhKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb21wb3NpdGlvblN0YXJ0IixhPT5VZChQaCx0aGlzLHBnZSkuY2FsbCh0aGlzLGEpKSx0aGlzLmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1u''@;'; put 'put ''ZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFVkKFBoLGwsX3V0KS5jYWxsKGwsLi4uZCl9KSxKbyh6cCx0aGlzKS5hZGRMb2NhbEhvb2soImhpZGUiLCgpPT50aGlzLmhpZGUoKSksSm8oenAsdGhpcykuYWRkTG9jYWxIb29rKCJzaG93IiwoYSxkKT0+''@;'; put 'put ''dGhpcy5zaG93QXRDZWxsKGEsZCkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe0pvKHpwLHRoaXMpLnVwZGF0ZURlbGF5KHRoaXMuZ2V0U2V0dGluZygiZGlzcGxheURlbGF5Iikp''@;'; put 'put ''LHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBsPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLGE9bC5nZXRDb250ZXh0KCJncmlk''@;'; put 'put ''IiksZD1sLmFkZENvbnRleHQoQUopO2EuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbCIsIkFsdCIsIk0iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7UW0odkYsdGhpcywhMCksdGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgo''@;'; put 'put ''KT0+e3RoaXMuc2V0UmFuZ2UoaCksdGhpcy5zaG93KCksdGhpcy5mb2N1c0VkaXRvcigpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoQUopLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntRbSh2Rix0aGlzLCExKX0pfSl9LHN0b3BQcm9wYWdhdGlvbjohMCxydW5Pbmx5SWY6KCk9Pnt2''@;'; put 'put ''YXIgaDtyZXR1cm4gbnVsbD09PShoPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodC5pc0NlbGwoKX0sZ3JvdXA6X1R9KSxkLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazooKT0+e0pvKEFsLHRoaXMp''@;'; put 'put ''LnNldFZhbHVlKEpvKGJGLHRoaXMpKSx0aGlzLmhpZGUoKSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LHJ1bk9ubHlJZjooKT0+Sm8oQWwsdGhpcykuaXNWaXNpYmxlKCkmJkpvKEFsLHRoaXMpLmlzRm9jdXNlZCgpLGdyb3VwOl9UfSksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJD''@;'; put 'put ''b250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+e3RoaXMuaGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKX0scnVuT25seUlmOigpPT5KbyhBbCx0aGlzKS5pc1Zpc2libGUoKSYmSm8oQWwsdGhpcykuaXNGb2N1c2VkKCksZ3JvdXA6X1R9KSxkLmFkZFNob3J0''@;'; put 'put ''Y3V0KHtrZXlzOltbIlNoaWZ0IiwiVGFiIl0sWyJUYWIiXV0sZm9yd2FyZFRvQ29udGV4dDpsLmdldENvbnRleHQoImdyaWQiKSxjYWxsYmFjazooKT0+e0pvKEFsLHRoaXMpLnNldFZhbHVlKEpvKEFsLHRoaXMpLmdldFZhbHVlKCkpLHRoaXMuaGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5h''@;'; put 'put ''bWUoImdyaWQiKX0sZ3JvdXA6X1R9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoX1QpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRo''@;'; put 'put ''aXMuaG90LGE9dGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlb3ZlciIsZD0+VWQoUGgsdGhpcyxmdXQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRv''@;'; put 'put ''d24iLGQ9PlVkKFBoLHRoaXMsZHV0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PlVkKFBoLHRoaXMscHV0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsImZvY3VzIiwoKT0+''@;'; put 'put ''VWQoUGgsdGhpcyx2dXQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwiYmx1ciIsKCk9PlVkKFBoLHRoaXMsbXV0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50''@;'; put 'put ''KCksIm1vdXNlZG93biIsZD0+VWQoUGgsdGhpcyxodXQpLmNhbGwodGhpcyxkKSl9c2V0UmFuZ2UobCl7dGhpcy5yYW5nZT1sfWNsZWFyUmFuZ2UoKXt0aGlzLnJhbmdlPXt9fXRhcmdldElzQ2VsbFdpdGhDb21tZW50KGwpe2NvbnN0IGE9Um0obC50YXJnZXQsIlREIiwiVEJPRFkiKTtyZXR1''@;'; put 'put ''cm4hIShhJiZwbyhhLCJodENvbW1lbnRDZWxsIikmJlJtKGEsW3RoaXMuaG90LnJvb3RFbGVtZW50XSkpfXRhcmdldElzQ29tbWVudFRleHRBcmVhKGwpe3JldHVybiB0aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpPT09bC50YXJnZXR9c2V0Q29tbWVudChsKXtpZighdGhpcy5yYW5nZS5m''@;'; put 'put ''cm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3QgYT1KbyhBbCx0aGlzKS5nZXRWYWx1ZSgpO2xldCBkPSIiO251bGwhPWw/ZD1sOm51bGwh''@;'; put 'put ''PWEmJihkPWEpLHRoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtbeVRdOmR9KSx0aGlzLmhvdC5yZW5kZXIoKX1zZXRDb21tZW50QXRDZWxsKGwsYSxkKXt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKGwsYSl9KSx0aGlzLnNldENvbW1lbnQoZCl9cmVtb3ZlQ29tbWVudCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0''@;'; put 'put ''aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO3RoaXMuaG90LnNldENlbGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCxPZyksbCYmdGhpcy5ob3QucmVuZGVyKCksdGhpcy5o''@;'; put 'put ''aWRlKCl9cmVtb3ZlQ29tbWVudEF0Q2VsbChsLGEpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07dGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpfSksdGhpcy5yZW1vdmVDb21t''@;'; put 'put ''ZW50KGQpfWdldENvbW1lbnQoKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wseVQpfWdldENvbW1lbnRBdENlbGwobCxhKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShsLGEseVQpfXNob3coKXt2YXIgbDtpZigh''@;'; put 'put ''dGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3R7ZnJvbTp7cm93OmEsY29sOmR9fT10aGlzLnJhbmdlO2lmKGE8MHx8''@;'; put 'put ''YT50aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xfHxkPDB8fGQ+dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCktMSlyZXR1cm4hMTtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCk7cmV0dXJuIEpvKHpwLHRoaXMp''@;'; put 'put ''LmNhbmNlbEhpZGluZygpLEpvKEFsLHRoaXMpLnNldFZhbHVlKG51bGwhPT0obD1oW09nXT9oW09nXVt5VF06bnVsbCkmJnZvaWQgMCE9PWw/bDoiIiksSm8oQWwsdGhpcykuc2hvdygpLHRoaXMucmVmcmVzaEVkaXRvcighMCksITB9c2hvd0F0Q2VsbChsLGEpe3JldHVybiB0aGlzLnNldFJh''@;'; put 'put ''bmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnNob3coKX1oaWRlKCl7Sm8oQWwsdGhpcykuaGlkZSgpfXJlZnJlc2hFZGl0b3IoKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF18fHRoaXMu''@;'; put 'put ''cmFuZ2UuZnJvbSYmSm8oQWwsdGhpcykuaXNWaXNpYmxlKCkpKXJldHVybjtjb25zdHtyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PXRoaXMuaG90LHtyb3c6aCxjb2w6Zn09dGhpcy5yYW5nZS5mcm9tO2xldCB2PWEuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCho''@;'; put 'put ''KSxNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtjb25zdCBEPW51bGw9PT12O0pvKEFsLHRoaXMpLnNldFBvc2l0aW9uKDAsMCksbnVsbD09PXYmJih2PWEuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLC0xKSkpLG51''@;'; put 'put ''bGw9PT1NJiYoTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZiwtMSkpKTtjb25zdCBaPW51bGw9PT12LHJlPW51bGw9PT1NO3Y9dj8/MCxNPU0/PzA7Y29uc3R7cm9vdFdpbmRvdzpjZSx2aWV3Ontfd3Q6YmV9fT10aGlzLmhvdCx7''@;'; put 'put ''d3RUYWJsZTpFZX09YmUsQmU9YmUuZ2V0Q2VsbCh7cm93OnYsY29sOk19LCEwKSxxZT10aGlzLmdldENvbW1lbnRNZXRhKGgsZiwic3R5bGUiKTtxZT9KbyhBbCx0aGlzKS5zZXRTaXplKHFlLndpZHRoLHFlLmhlaWdodCk6Sm8oQWwsdGhpcykucmVzZXRTaXplKCk7Y29uc3QgcnQ9cmU/MDpF''@;'; put 'put ''ZS5nZXRDb2x1bW5XaWR0aChNKSxwdD1EJiYhWj94dShCZSk6MCx7bGVmdDpkdCx0b3A6SnQsd2lkdGg6dm4saGVpZ2h0OkNufT1CZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6dG4saGVpZ2h0Ok1ufT1KbyhBbCx0aGlzKS5nZXRTaXplKCkse2lubmVyV2lkdGg6Q3IsaW5uZXJI''@;'; put 'put ''ZWlnaHQ6R3J9PXRoaXMuaG90LnJvb3RXaW5kb3csbXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCxHbj1mMCh0aGlzLmhvdC5yb290RG9jdW1lbnQpLGFpPUUkKHRoaXMuaG90LnJvb3RXaW5kb3cpP0duOjAsX2k9VCQodGhpcy5ob3Qucm9vdFdpbmRvdyk/R246MDts''@;'; put 'put ''ZXQgT249ZHQrY2Uuc2Nyb2xsWCtydCx6cj1KdCtjZS5zY3JvbGxZK3B0O3RoaXMuaG90LmlzUnRsKCkmJihPbi09dG4rcnQpLHRoaXMuaG90LmlzTHRyKCkmJmR0K3ZuK3RuPkNyLWFpP09uPWR0K2NlLnNjcm9sbFgtdG4tMTp0aGlzLmhvdC5pc1J0bCgpJiZPbjwtKG1yLnNjcm9sbFdpZHRo''@;'; put 'put ''LW1yLmNsaWVudFdpZHRoKSYmKE9uPWR0K2NlLnNjcm9sbFgrcnQrMSksSnQrTW4+R3ItX2kmJih6ci09TW4tQ24rMSksSm8oQWwsdGhpcykuc2V0UG9zaXRpb24oT24senIpLEpvKEFsLHRoaXMpLnNldFJlYWRPbmx5U3RhdGUodGhpcy5nZXRDb21tZW50TWV0YShoLGYsZ0YpKSxKbyhBbCx0''@;'; put 'put ''aGlzKS5vYnNlcnZlU2l6ZSgpfWZvY3VzRWRpdG9yKCl7Sm8oQWwsdGhpcykuZm9jdXMoKX11cGRhdGVDb21tZW50TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpW09nXTtsZXQgZjtoPyhmPWcxKGgpLHhFKGYsZCkpOmY9ZCx0aGlzLmhvdC5zZXRDZWxsTWV0''@;'; put 'put ''YShsLGEsT2csZil9Z2V0Q29tbWVudE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKTtpZihoW09nXSlyZXR1cm4gaFtPZ11bZF19YWRkVG9Db250ZXh0TWVudShsKXtsLml0ZW1zLnB1c2goe25hbWU6c3N9LGZ1bmN0aW9uIFFjdChjKXtyZXR1cm57a2V5OiJj''@;'; put 'put ''b21tZW50c0FkZEVkaXQiLG5hbWUoKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gbnVsbCE9YSYmYS5pc0NlbGwoKSYmYy5nZXRDb21tZW50QXRDZWxsKGEucm93LGEuY29s''@;'; put 'put ''KT90aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZnEpOnRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShocSl9LGNhbGxiYWNrKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7Yy5zZXRSYW5nZShsKSxjLnNob3coKSxjLmZvY3VzRWRpdG9yKCl9LGRpc2FibGVkKCl7Y29uc3Qg''@;'; put 'put ''bD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRl''@;'; put 'put ''cmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSxmdW5jdGlvbiBldXQoYyl7cmV0dXJue2tleToiY29tbWVudHNSZW1vdmUiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHBxKX0sY2FsbGJhY2soKXt0aGlzLmdldFNlbGVjdGVk''@;'; put 'put ''UmFuZ2VMYXN0KCkuZm9yQWxsKChhLGQpPT57YT49MCYmZD49MCYmYy5yZW1vdmVDb21tZW50QXRDZWxsKGEsZCwhMSl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFsfHxsLmhpZ2hsaWdodC5pc0hlYWRl''@;'; put 'put ''cigpfHx0aGlzLnNlbGVjdGlvbi5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJnRoaXMuc2VsZWN0aW9uLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZFJvd3MoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZENvbHMoKSl9fX0odGhpcyksZnVuY3Rpb24gaXV0''@;'; put 'put ''KGMpe3JldHVybntrZXk6ImNvbW1lbnRzUmVhZE9ubHkiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShncSk7cmV0dXJuIGhGKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChkLGgpPT5jLmdldENvbW1lbnRNZXRhKGQsaCxnRikpP2RnZShsKTpsfSxjYWxsYmFjaygp''@;'; put 'put ''e3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mb3JBbGwoKGEsZCk9PntpZihhPj0wJiZkPj0wKXtjb25zdCBoPSEhYy5nZXRDb21tZW50TWV0YShhLGQsZ0YpO2MudXBkYXRlQ29tbWVudE1ldGEoYSxkLHtbZ0ZdOiFofSl9fSl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fCFjLmdldENvbW1lbnRBdENlbGwobC5oaWdobGlnaHQucm93LGwuaGlnaGxpZ2h0LmNvbCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRp''@;'; put 'put ''cmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSl9Z2V0RWRpdG9ySW5wdXRFbGVtZW50KCl7cmV0dXJuIEpvKEFsLHRoaXMpLmdldElucHV0RWxlbWVudCgpfWRlc3Ryb3koKXt2YXIg''@;'; put 'put ''bCxhO251bGw9PT0obD1KbyhBbCx0aGlzKSl8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLG51bGw9PT0oYT1Kbyh6cCx0aGlzKSl8fHZvaWQgMD09PWF8fGEuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gZHV0KGMpe2lmKHRoaXMuaG90LnZpZXcmJnRoaXMuaG90LnZpZXcu''@;'; put 'put ''X3d0JiYhSm8obUYsdGhpcykmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGMpKXtjb25zdCBsPVJtKGMudGFyZ2V0LCJURCIsIlRCT0RZIik7bGV0IGE9bnVsbDtsJiYoYT10aGlzLmhvdC5nZXRDb29yZHMobCkpLCghbHx8dGhpcy5yYW5nZS5mcm9tJiZhJiYodGhpcy5yYW5nZS5m''@;'; put 'put ''cm9tLnJvdyE9PWEucm93fHx0aGlzLnJhbmdlLmZyb20uY29sIT09YS5jb2wpKSYmdGhpcy5oaWRlKCl9fWZ1bmN0aW9uIGh1dChjKXtjLnN0b3BQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGZ1dChjKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3Q7aWYoIShKbyhtRix0aGlzKXx8Sm8o''@;'; put 'put ''QWwsdGhpcykuaXNGb2N1c2VkKCl8fHBvKGMudGFyZ2V0LCJ3dEJvcmRlciIpfHxKbyhrSix0aGlzKT09PWMudGFyZ2V0KSYmSm8oQWwsdGhpcykpaWYoUW0oa0osdGhpcyxsLmVsZW1lbnRGcm9tUG9pbnQoYy5jbGllbnRYLGMuY2xpZW50WSkpLHRoaXMudGFyZ2V0SXNDZWxsV2l0aENvbW1l''@;'; put 'put ''bnQoYykpe2NvbnN0IGE9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5nZXRDb29yZHMoYy50YXJnZXQpKTtKbyh6cCx0aGlzKS5zaG93KGEpfWVsc2UgTG0oYy50YXJnZXQsbCkmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGMpJiZKbyh6cCx0aGlzKS5oaWRlKCl9''@;'; put 'put ''ZnVuY3Rpb24gcHV0KCl7UW0obUYsdGhpcywhMSl9ZnVuY3Rpb24gZ3V0KGMsbCl7bFtPZ10mJmxbT2ddW3lUXSYmVGkoYyxsLmNvbW1lbnRlZENlbGxDbGFzc05hbWUpfWZ1bmN0aW9uIG11dCgpe1FtKGJGLHRoaXMsIiIpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2''@;'; put 'put ''ZUNvbnRleHROYW1lKCJncmlkIiksdGhpcy5zZXRDb21tZW50KCl9ZnVuY3Rpb24gdnV0KCl7UW0oYkYsdGhpcyx0aGlzLmdldENvbW1lbnQoKSksdGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoQUopfWZ1bmN0aW9u''@;'; put 'put ''IGJ1dChjLGwpe3RoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtzdHlsZTp7d2lkdGg6YyxoZWlnaHQ6bH19KX1mdW5jdGlvbiBwZ2UoYyl7Sm8oQWwsdGhpcykuaXNGb2N1c2VkKCkmJkIyKGMpfWZ1bmN0aW9uIHl1dCgpe0pv''@;'; put 'put ''KHZGLHRoaXMpfHx0aGlzLmhpZGUoKX1mdW5jdGlvbiBfdXQoKXtjb25zdCBjPUpvKEFsLHRoaXMpLmdldEVkaXRvckVsZW1lbnQoKTtsbyhjLC9odC10aGVtZS0uKi9nKSxUaShjLHRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSl9ZnVuY3Rpb24gREooYyxsLGEpe3JldHVybihsPWZ1''@;'; put 'put ''bmN0aW9uIHd1dChjKXt2YXIgbD1mdW5jdGlvbiBDdXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''ZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwp''@;'; put 'put ''KWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGdnZXtjb25zdHJ1Y3RvcihsKXtESih0aGlzLCJob3QiLHZvaWQgMCksREoodGhpcywiY29tbWFuZHMiLHt9KSxE''@;'; put 'put ''Sih0aGlzLCJjb21tb25DYWxsYmFjayIsbnVsbCksdGhpcy5ob3Q9bH1yZWdpc3RlckNvbW1hbmQobCxhKXt0aGlzLmNvbW1hbmRzW2xdPWF9c2V0Q29tbW9uQ2FsbGJhY2sobCl7dGhpcy5jb21tb25DYWxsYmFjaz1sfWV4ZWN1dGUobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1u''@;'; put 'put ''ZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO2NvbnN0IGY9bC5zcGxpdCgiOiIpLHY9ZlswXSxNPTI9PT1mLmxlbmd0aD9mWzFdOm51bGw7bGV0IEQ9dGhpcy5jb21tYW5kc1t2XTtpZighRCl0aHJvdyBuZXcgRXJyb3IoYE1lbnUgY29tbWFuZCAn''@;'; put 'put ''JHt2fScgbm90IGV4aXN0cy5gKTtpZihNJiZELnN1Ym1lbnUmJihEPWZ1bmN0aW9uIFN1dChjLGwpe2xldCBhO3JldHVybiBZbihsLGQ9Pntjb25zdCBoPWQua2V5P2Qua2V5LnNwbGl0KCI6Iik6bnVsbDtpZihBcnJheS5pc0FycmF5KGgpJiZoWzFdPT09YylyZXR1cm4gYT1kLCExfSksYX0o''@;'; put 'put ''TSxELnN1Ym1lbnUuaXRlbXMpKSwhMD09PUQuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBELmRpc2FibGVkJiYhMD09PUQuZGlzYWJsZWQuY2FsbCh0aGlzLmhvdCl8fFR1KEQsInN1Ym1lbnUiKSlyZXR1cm47Y29uc3QgWj1bXTsiZnVuY3Rpb24iPT10eXBlb2YgRC5jYWxsYmFjayYm''@;'; put 'put ''Wi5wdXNoKEQuY2FsbGJhY2spLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbW1vbkNhbGxiYWNrJiZaLnB1c2godGhpcy5jb21tb25DYWxsYmFjayksZC51bnNoaWZ0KGYuam9pbigiOiIpKSxZbihaLHJlPT5yZS5hcHBseSh0aGlzLmhvdCxkKSl9fWNvbnN0IEsyPSJhbGlnbm1lbnQiLHlG''@;'; put 'put ''PSJjbGVhcl9jb2x1bW4iLHdUPSJjb2xfbGVmdCIsQ1Q9ImNvbF9yaWdodCIsU1Q9Im1ha2VfcmVhZF9vbmx5IixfRj0icmVkbyIsTVQ9InJlbW92ZV9jb2wiLHdGPSJyZW1vdmVfcm93IixDRj0icm93X2Fib3ZlIixTRj0icm93X2JlbG93Iix4VD0ibm9faXRlbXMiLE1GPSJ1bmRvIixtZ2U9''@;'; put 'put ''W0NGLFNGLHdULENULHlGLHdGLE1ULE1GLF9GLFNULEsyLHNzLHhUXSx2Z2U9e1tzc106ZnVuY3Rpb24gSmN0KCl7cmV0dXJue25hbWU6c3N9fSxbeFRdOmZ1bmN0aW9uIE91dCgpe3JldHVybntrZXk6eFQsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoR0spfSxkaXNh''@;'; put 'put ''YmxlZDohMCxpc0NvbW1hbmQ6ITF9fSxbQ0ZdOmZ1bmN0aW9uIFJ1dCgpe3JldHVybntrZXk6Q0YsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoJEspfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcExlZnRDb3JuZXIo''@;'; put 'put ''KTt0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixjLnJvdywxLCJDb250ZXh0TWVudS5yb3dBYm92ZSIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIo''@;'; put 'put ''KXx8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5yb3c8MHx8dGhpcy5jb3VudFNvdXJjZVJvd3MoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3MpfHwhIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwPT09dGhpcy5jb3VudFJvd3MoKX0saGlkZGVuKCl7''@;'; put 'put ''cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvd319fSxbU0ZdOmZ1bmN0aW9uIEx1dCgpe3JldHVybntrZXk6U0YsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoS0spfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFz''@;'; put 'put ''dCgpLmdldEJvdHRvbVJpZ2h0Q29ybmVyKCk7dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsYy5yb3csMSwiQ29udGV4dE1lbnUucm93QmVsb3ciKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24u''@;'; put 'put ''aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQucm93PDB8fHRoaXMuY291bnRTb3VyY2VSb3dzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2Vy''@;'; put 'put ''dFJvd319fSxbd1RdOmZ1bmN0aW9uIEV1dCgpe3JldHVybntrZXk6d1QsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocUspfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcExlZnRDb3JuZXIoKSxsPXRoaXMuaXNSdGwo''@;'; put 'put ''KT8iaW5zZXJ0X2NvbF9lbmQiOiJpbnNlcnRfY29sX3N0YXJ0Ijt0aGlzLmFsdGVyKGwsYy5jb2wsMSwiQ29udGV4dE1lbnUuY29sdW1uTGVmdCIpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IGM9dGhpcy5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5jb2w8MHx8dGhpcy5jb3VudFNvdXJjZUNvbHMoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heENvbHMpfHwhIXRo''@;'; put 'put ''aXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwPT09dGhpcy5jb3VudENvbHMoKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbQ1RdOmZ1bmN0aW9uIFR1dCgpe3JldHVybntrZXk6Q1QsbmFtZSgpe3JldHVybiB0aGlz''@;'; put 'put ''LmdldFRyYW5zbGF0ZWRQaHJhc2UoWEspfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcFJpZ2h0Q29ybmVyKCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9jb2xfc3RhcnQiOiJpbnNlcnRfY29sX2VuZCI7dGhpcy5hbHRlcihsLGMuY29sLDEs''@;'; put 'put ''IkNvbnRleHRNZW51LmNvbHVtblJpZ2h0Iil9LGRpc2FibGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJv''@;'; put 'put ''d0hlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwfHx0aGlzLmNvdW50U291cmNlQ29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW3lGXTpm''@;'; put 'put ''dW5jdGlvbiB4dXQoKXtyZXR1cm57a2V5OnlGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG5xKX0sY2FsbGJhY2soYyxsKXtjb25zdCBhPWxbMF0uc3RhcnQuY29sLGQ9bFswXS5lbmQuY29sO3RoaXMuY291bnRSb3dzKCkmJnRoaXMucG9wdWxhdGVGcm9tQXJyYXko''@;'; put 'put ''MCxhLFtbbnVsbF1dLE1hdGgubWF4KGxbMF0uc3RhcnQucm93LGxbMF0uZW5kLnJvdyksZCwiQ29udGV4dE1lbnUuY2xlYXJDb2x1bW4iKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighY3x8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdo''@;'; put 'put ''dC5jb2w8MHx8IXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKXJldHVybiEwO2xldCBsPSExO3JldHVybiBjLmZvckFsbCgoYSxkKT0+e2lmKGE8MHx8ZDwwKXJldHVybiEwO2NvbnN0e3JlYWRPbmx5Omh9PXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKTtyZXR1cm4hIWh8''@;'; put 'put ''fChsPSEwLCExKX0pLCFsfX19LFt3Rl06ZnVuY3Rpb24gSXV0KCl7cmV0dXJue2tleTp3RixuYW1lKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkKCk7bGV0IGw9MDtpZihjKWlmKGMubGVuZ3RoPjEpbD0xO2Vsc2V7Y29uc3RbYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlz''@;'; put 'put ''LmdldFRyYW5zbGF0ZWRQaHJhc2UoSkssbCl9LGNhbGxiYWNrKCl7dGhpcy5hbHRlcigicmVtb3ZlX3JvdyIsZnVuY3Rpb24gWW50KGMpe2NvbnN0IGw9eF8oYy5nZXRTZWxlY3RlZCgpKTtpZigwPT09bHx8MT09PWwpcmV0dXJuW107Y29uc3QgYT1lVChsLHtjcmVhdGVDZWxsQ29vcmRzOmMu''@;'; put 'put ''X2NyZWF0ZUNlbGxDb29yZHMuYmluZChjKSxjcmVhdGVDZWxsUmFuZ2U6Yy5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQoYyl9KSxkPW5ldyBTZXQ7cmV0dXJuIFluKGMuZ2V0U2VsZWN0ZWQoKSx2PT57Y29uc3R7ZnJvbTpNLHRvOkR9PWEodiksWj1NYXRoLm1heChNLnJvdywwKTtZbihBcnJheS5m''@;'; put 'put ''cm9tKG5ldyBBcnJheShELnJvdy1aKzEpLChjZSxiZSk9PlorYmUpLGNlPT57ZC5oYXMoY2UpfHxkLmFkZChjZSl9KX0pLHF1KEFycmF5LmZyb20oZCkuc29ydCgodixNKT0+di1NKSwodixNLEQsWik9PigwIT09RCYmTT09PVpbRC0xXSsxP3Zbdi5sZW5ndGgtMV1bMV0rPTE6di5wdXNoKFtN''@;'; put 'put ''LDFdKSx2KSxbXSl9KHRoaXMpLDEsIkNvbnRleHRNZW51LnJlbW92ZVJvdyIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LnJvdzwwKXJldHVybiEwO2NvbnN0IGw9dGhpcy5jb3Vu''@;'; put 'put ''dFJvd3MoKTtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PWw6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fDA9PT1sfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlUm93fX19LFtNVF06''@;'; put 'put ''ZnVuY3Rpb24gRHV0KCl7cmV0dXJue2tleTpNVCxuYW1lKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkKCk7bGV0IGw9MDtpZihjKWlmKGMubGVuZ3RoPjEpbD0xO2Vsc2V7Y29uc3RbLGEsLGRdPWNbMF07YS1kIT0wJiYobD0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFFL''@;'; put 'put ''LGwpfSxjYWxsYmFjaygpe3RoaXMuYWx0ZXIoInJlbW92ZV9jb2wiLGZ1bmN0aW9uIFdudChjKXtjb25zdCBsPXhfKGMuZ2V0U2VsZWN0ZWQoKSk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9ZVQobCx7Y3JlYXRlQ2VsbENvb3JkczpjLl9jcmVhdGVDZWxsQ29vcmRzLmJpbmQo''@;'; put 'put ''YyksY3JlYXRlQ2VsbFJhbmdlOmMuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKGMpfSksZD1uZXcgU2V0O3JldHVybiBZbihjLmdldFNlbGVjdGVkKCksdj0+e2NvbnN0e2Zyb206TSx0bzpEfT1hKHYpLFo9TWF0aC5tYXgoTS5jb2wsMCk7WW4oQXJyYXkuZnJvbShuZXcgQXJyYXkoRC5jb2wtWisx''@;'; put 'put ''KSwoY2UsYmUpPT5aK2JlKSxjZT0+e2QuaGFzKGNlKXx8ZC5hZGQoY2UpfSl9KSxxdShBcnJheS5mcm9tKGQpLnNvcnQoKHYsTSk9PnYtTSksKHYsTSxELFopPT4oMCE9PUQmJk09PT1aW0QtMV0rMT92W3YubGVuZ3RoLTFdWzFdKz0xOnYucHVzaChbTSwxXSksdiksW10pfSh0aGlzKSxudWxs''@;'; put 'put ''LCJDb250ZXh0TWVudS5yZW1vdmVDb2x1bW4iKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSlyZXR1cm4hMDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighY3x8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5j''@;'; put 'put ''b2w8MClyZXR1cm4hMDtjb25zdCBsPXRoaXMuY291bnRDb2xzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT1sOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHwwPT09bH0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKS5hbGxvd1JlbW92ZUNvbHVtbn19fSxbTUZdOmZ1bmN0aW9uIFB1dCgpe3JldHVybntrZXk6TUYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZXEpfSxjYWxsYmFjaygpe3RoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLnVuZG8oKX0saGlkZGVuKCl7Y29uc3Qg''@;'; put 'put ''Yz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hY3x8IWMuaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLmlzVW5kb0F2YWlsYWJsZSgpfX19LFtfRl06ZnVuY3Rpb24ga3V0KCl7cmV0dXJue2tleTpfRixuYW1lKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh0cSl9LGNhbGxiYWNrKCl7dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikucmVkbygpfSxoaWRkZW4oKXtjb25zdCBjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpO3JldHVybiFjfHwhYy5pc0VuYWJsZWQoKX0sZGlzYWJsZWQoKXtyZXR1''@;'; put 'put ''cm4hdGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikuaXNSZWRvQXZhaWxhYmxlKCl9fX0sW1NUXTpmdW5jdGlvbiBBdXQoKXtyZXR1cm57a2V5OlNULGNoZWNrYWJsZTohMCxhcmlhQ2hlY2tlZCgpe3JldHVybiBoRih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwobCxhKT0+dGhpcy5nZXRDZWxs''@;'; put 'put ''TWV0YShsLGEpLnJlYWRPbmx5KX0sYXJpYUxhYmVsKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfUCl9LG5hbWUoKXtsZXQgYz10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoX1ApO3JldHVybiBoRih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoYSxkKT0+dGhpcy5nZXRDZWxs''@;'; put 'put ''TWV0YShhLGQpLnJlYWRPbmx5KSYmKGM9ZGdlKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1oRihjLChhLGQpPT50aGlzLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpO1luKGMsYT0+e2EuZm9yQWxsKChkLGgpPT57ZD49MCYmaD49MCYmdGhp''@;'; put 'put ''cy5zZXRDZWxsTWV0YShkLGgsInJlYWRPbmx5IiwhbCl9KX0pLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIShjJiYhYy5pc1NpbmdsZUhlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVy''@;'; put 'put ''KCkmJjAhPT10aGlzLmNvdW50Um93cygpJiYwIT09dGhpcy5jb3VudENvbHMoKSYmdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkmJjAhPT10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5sZW5ndGgpfX19LFtLMl06ZnVuY3Rpb24gTXV0KCl7cmV0dXJue2tleTpLMixuYW1lKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Z2V0VHJhbnNsYXRlZFBocmFzZShtcSl9LGRpc2FibGVkKCl7aWYoMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybiEwO2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEoYyYmIWMuaXNTaW5nbGVIZWFkZXIoKSYmdGhpcy5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9LHN1Ym1lbnU6e2l0ZW1zOlt7a2V5OmAke0syfTpsZWZ0YCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh2cSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2UoKSxsPXk5KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0TGVmdCI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEo''@;'; put 'put ''aCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke0syfTpjZW50ZXJgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGJxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2Vs''@;'; put 'put ''ZWN0ZWRSYW5nZSgpLGw9eTkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRDZW50ZXIiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEptKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRh''@;'; put 'put ''KGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtLMn06cmlnaHRgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHlxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2Vs''@;'; put 'put ''ZWN0ZWRSYW5nZSgpLGw9eTkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRSaWdodCI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEo''@;'; put 'put ''aCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke0syfTpqdXN0aWZ5YCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfcSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2UoKSxsPXk5KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0SnVzdGlmeSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1l''@;'; put 'put ''dGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7bmFtZTpzc30se2tleTpgJHtLMn06dG9wYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh3cSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10''@;'; put 'put ''aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXk5KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodFRvcCI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2Vs''@;'; put 'put ''bE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke0syfTptaWRkbGVgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKENxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMu''@;'; put 'put ''Z2V0U2VsZWN0ZWRSYW5nZSgpLGw9eTkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0TWlkZGxlIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxs''@;'; put 'put ''TWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9OmJvdHRvbWAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoU3EpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlKCksbD15OShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRCb3R0b20iO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEptKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxN''@;'; put 'put ''ZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX1dfX19fTtmdW5jdGlvbiBiZ2UoKXtjb25zdCBjPXt9O3JldHVybiBYbyh2Z2UsKGwsYSk9PntjW2FdPWwoKX0pLGN9ZnVuY3Rpb24gSUooYyxsLGEpe3JldHVy''@;'; put 'put ''bihsPWZ1bmN0aW9uIEZ1dChjKXt2YXIgbD1mdW5jdGlvbiBIdXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwr''@;'; put 'put ''IiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHlnZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtJSih0aGlzLCJob3QiLHZvaWQgMCksSUoodGhpcywicHJlZGVmaW5lZEl0ZW1zIixiZ2UoKSksSUoodGhpcywiZGVmYXVsdE9yZGVyUGF0dGVybiIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybj1hfXNldFByZWRl''@;'; put 'put ''ZmluZWRJdGVtcyhsKXtjb25zdCBhPXt9O3RoaXMuZGVmYXVsdE9yZGVyUGF0dGVybi5sZW5ndGg9MCxYbyhsLChkLGgpPT57bGV0IGY9IiI7ZC5uYW1lPT09c3M/KGFbc3NdPWQsZj1zcyk6aXNOYU4ocGFyc2VJbnQoaCwxMCkpPyhkLmtleT12b2lkIDA9PT1kLmtleT9oOmQua2V5LGFbaF09''@;'; put 'put ''ZCxmPWQua2V5KTooYVtkLmtleV09ZCxmPWQua2V5KSx0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4ucHVzaChmKX0pLHRoaXMucHJlZGVmaW5lZEl0ZW1zPWF9Z2V0SXRlbXMoKXtyZXR1cm4gZnVuY3Rpb24gTnV0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMV0/YXJndW1lbnRzWzFdOltdLGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IGQ9W107bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJu''@;'; put 'put ''IGgmJmguaXRlbXM/aD1oLml0ZW1zOkFycmF5LmlzQXJyYXkoaCl8fChoPWwpLHFvKGgpP1hvKGgsKGYsdik9PntsZXQgTT1hWyJzdHJpbmciPT10eXBlb2YgZj9mOnZdO018fChNPWYpLHFvKGYpP0V1KE0sZik6InN0cmluZyI9PXR5cGVvZiBNJiYoTT17bmFtZTpNfSksdm9pZCAwPT09TS5r''@;'; put 'put ''ZXkmJihNLmtleT12KSxkLnB1c2goTSl9KTpZbihoLChmLHYpPT57bGV0IE09YVtmXTshTSYmbWdlLmluZGV4T2YoZik+PTB8fChNfHwoTT17bmFtZTpmLGtleTpgJHt2fWB9KSxxbyhmKSYmRXUoTSxmKSx2b2lkIDA9PT1NLmtleSYmKE0ua2V5PXYpLGQucHVzaChNKSl9KSxkfShhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCx0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4sdGhpcy5wcmVkZWZpbmVkSXRlbXMpfX1mdW5jdGlvbiBlNihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVnV0KGMpe3ZhciBsPWZ1bmN0aW9uIEJ1dChj''@;'; put 'put ''LGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBA''@;'; put 'put ''dG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2''@;'; put 'put ''YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MganV0e2NvbnN0cnVjdG9yKGwsYSl7ZTYodGhpcywidG9wIix2b2lkIDApLGU2KHRoaXMsInRvcFJlbGF0aXZlIix2b2lkIDApLGU2KHRoaXMsImxlZnQiLHZvaWQgMCksZTYo''@;'; put 'put ''dGhpcywibGVmdFJlbGF0aXZlIix2b2lkIDApLGU2KHRoaXMsInNjcm9sbFRvcCIsdm9pZCAwKSxlNih0aGlzLCJzY3JvbGxMZWZ0Iix2b2lkIDApLGU2KHRoaXMsImNlbGxIZWlnaHQiLHZvaWQgMCksZTYodGhpcywiY2VsbFdpZHRoIix2b2lkIDApO2NvbnN0IGQ9YS5zY3JvbGxZLGg9YS5z''@;'; put 'put ''Y3JvbGxYO2xldCBmLHYsTSxELFoscmU7dGhpcy5yb290V2luZG93PWEsdGhpcy50eXBlPXRoaXMuZ2V0U291cmNlVHlwZShsKSwibGl0ZXJhbCI9PT10aGlzLnR5cGU/KGY9cGFyc2VJbnQobC50b3AsMTApLE09cGFyc2VJbnQobC5sZWZ0LDEwKSxaPWwuaGVpZ2h0fHwwLHJlPWwud2lkdGh8''@;'; put 'put ''fDAsdj1mLEQ9TSxmKz1kLE0rPWgpOiJldmVudCI9PT10aGlzLnR5cGUmJihmPXBhcnNlSW50KGwucGFnZVksMTApLE09cGFyc2VJbnQobC5wYWdlWCwxMCksWj1sLnRhcmdldC5jbGllbnRIZWlnaHQscmU9bC50YXJnZXQuY2xpZW50V2lkdGgsdj1mLWQsRD1NLWgpLHRoaXMudG9wPWYsdGhp''@;'; put 'put ''cy50b3BSZWxhdGl2ZT12LHRoaXMubGVmdD1NLHRoaXMubGVmdFJlbGF0aXZlPUQsdGhpcy5zY3JvbGxUb3A9ZCx0aGlzLnNjcm9sbExlZnQ9aCx0aGlzLmNlbGxIZWlnaHQ9Wix0aGlzLmNlbGxXaWR0aD1yZX1nZXRTb3VyY2VUeXBlKGwpe2xldCBhPSJsaXRlcmFsIjtyZXR1cm4gbCBpbnN0''@;'; put 'put ''YW5jZW9mIEV2ZW50JiYoYT0iZXZlbnQiKSxhfWZpdHNBYm92ZShsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZT49bC5vZmZzZXRIZWlnaHR9Zml0c0JlbG93KGwpe3JldHVybiB0aGlzLnRvcFJlbGF0aXZlK2wub2Zmc2V0SGVpZ2h0PD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5pbm5lckhlaWdodCl9Zml0c09uUmlnaHQobCl7cmV0dXJuIHRoaXMubGVmdFJlbGF0aXZlK3RoaXMuY2VsbFdpZHRoK2wub2Zmc2V0V2lkdGg8PShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sx''@;'; put 'put ''XT9hcmd1bWVudHNbMV06dGhpcy5yb290V2luZG93LmlubmVyV2lkdGgpfWZpdHNPbkxlZnQobCl7cmV0dXJuIHRoaXMubGVmdFJlbGF0aXZlPj1sLm9mZnNldFdpZHRofX1mdW5jdGlvbiBFVChjLGwsYSl7KGZ1bmN0aW9uIHp1dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gVW8oYyxsKXtyZXR1cm4gYy5nZXQoX2dlKGMsbCkpfWZ1bmN0aW9uIHhGKGMsbCxhKXtyZXR1cm4gYy5zZXQoX2dlKGMs''@;'; put 'put ''bCksYSksYX1mdW5jdGlvbiBfZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIp''@;'; put 'put ''fXZhciBYMT1uZXcgV2Vha01hcCxaZD1uZXcgV2Vha01hcCxXZD1uZXcgV2Vha01hcCxSSj1uZXcgV2Vha01hcCxLXz1uZXcgV2Vha01hcDtjbGFzcyBVdXR7Y29uc3RydWN0b3IobCl7RVQodGhpcyxYMSx2b2lkIDApLEVUKHRoaXMsWmQsdm9pZCAwKSxFVCh0aGlzLFdkLHZvaWQgMCksRVQo''@;'; put 'put ''dGhpcyxSSiwhMSksRVQodGhpcyxLXyx7YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfSkseEYoUkosdGhpcyxsKX1zZXRPZmZzZXQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuIFVvKEtfLHRoaXMp''@;'; put 'put ''W2xdPWEsdGhpc31zZXRFbGVtZW50KGwpe3JldHVybiB4RihYMSx0aGlzLGwpLHRoaXN9c2V0UGFyZW50RWxlbWVudChsKXtyZXR1cm4geEYoWmQsdGhpcyxsKSx0aGlzfXVwZGF0ZVBvc2l0aW9uKGwpe3hGKFdkLHRoaXMsbmV3IGp1dChsLFVvKFgxLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVm''@;'; put 'put ''YXVsdFZpZXcpKSxVbyhSSix0aGlzKT8oVW8oV2QsdGhpcykuZml0c0JlbG93KFVvKFgxLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKTpVbyhXZCx0aGlzKS5maXRzQWJvdmUoVW8oWDEsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25BYm92ZUN1cnNvcigpOnRoaXMuc2V0UG9z''@;'; put 'put ''aXRpb25CZWxvd0N1cnNvcigpLHRoaXMudXBkYXRlSG9yaXpvbnRhbFBvc2l0aW9uKCkpOih0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKSx0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCkpfXVwZGF0ZUhvcml6b250YWxQb3NpdGlvbigpeyJydGwiPT09VW8oWDEsdGhpcyku''@;'; put 'put ''ZGlyP1VvKFdkLHRoaXMpLmZpdHNPbkxlZnQoVW8oWDEsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcigpOnRoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKTpVbyhXZCx0aGlzKS5maXRzT25SaWdodChVbyhYMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbk9uUmln''@;'; put 'put ''aHRPZkN1cnNvcigpOnRoaXMuc2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcigpfXNldFBvc2l0aW9uQWJvdmVDdXJzb3IoKXtsZXQgbD1VbyhLXyx0aGlzKS5hYm92ZStVbyhXZCx0aGlzKS50b3AtVW8oWDEsdGhpcykub2Zmc2V0SGVpZ2h0O2lmKFVvKFpkLHRoaXMpKXtjb25zdCBkPVVvKFpk''@;'; put 'put ''LHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShVbyhaZCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHRfbWFzdGVyIikpLGg9TnVtYmVyLnBhcnNlSW50KGQucGFkZGluZ1RvcCwxMCksZj1OdW1iZXIucGFyc2VJbnQoZC5ib3JkZXJUb3AsMTApO2w9VW8o''@;'; put 'put ''V2QsdGhpcykudG9wK1VvKFdkLHRoaXMpLmNlbGxIZWlnaHQtVW8oWDEsdGhpcykuc2Nyb2xsSGVpZ2h0K2grZn1VbyhYMSx0aGlzKS5zdHlsZS50b3A9YCR7bH1weGB9c2V0UG9zaXRpb25CZWxvd0N1cnNvcigpe2xldCBsPVVvKEtfLHRoaXMpLmJlbG93K1VvKFdkLHRoaXMpLnRvcCsxO2lm''@;'; put 'put ''KFVvKFpkLHRoaXMpKXtjb25zdCBkPVVvKFpkLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShVbyhaZCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHRfbWFzdGVyIikpLGg9TnVtYmVyLnBhcnNlSW50KGQucGFkZGluZ1RvcCwxMCksZj1OdW1iZXIucGFy''@;'; put 'put ''c2VJbnQoZC5ib3JkZXJUb3AsMTApO2w9VW8oV2QsdGhpcykudG9wLWgtZi0xfVVvKFgxLHRoaXMpLnN0eWxlLnRvcD1gJHtsfXB4YH1zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpe2xldCBsPVVvKFdkLHRoaXMpLmxlZnQ7aWYoVW8oWmQsdGhpcykpe2NvbnN0IGE9VW8oWmQsdGhpcyku''@;'; put 'put ''b3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyxkPU51bWJlci5wYXJzZUludChhLmdldENvbXB1dGVkU3R5bGUoVW8oWmQsdGhpcykucXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKS5ib3JkZXJSaWdodFdpZHRoLDEwKTtsKz1VbyhXZCx0aGlzKS5jZWxsV2lkdGgrZH1lbHNlIGwrPVVvKEtfLHRo''@;'; put 'put ''aXMpLnJpZ2h0O1VvKFgxLHRoaXMpLnN0eWxlLmxlZnQ9YCR7bH1weGB9c2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcigpe2xldCBsPVVvKEtfLHRoaXMpLmxlZnQrVW8oV2QsdGhpcykubGVmdC1VbyhYMSx0aGlzKS5vZmZzZXRXaWR0aDtpZihVbyhaZCx0aGlzKSl7Y29uc3QgYT1VbyhaZCx0''@;'; put 'put ''aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O2wtPU51bWJlci5wYXJzZUludChhLmdldENvbXB1dGVkU3R5bGUoVW8oWmQsdGhpcykucXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKS5ib3JkZXJMZWZ0V2lkdGgsMTApfVVvKFgxLHRoaXMpLnN0eWxlLmxlZnQ9YCR7bH1weGB9fWZ1bmN0''@;'; put 'put ''aW9uIHdnZShjKXtsZXR7aW5pdGlhbFBhZ2U6bD0tMSxzaXplOmE9KCgpPT4wKSxvbkl0ZW1TZWxlY3Q6ZD0oKCk9Pnt9KSxvbkNsZWFyOmg9KCgpPT57fSl9PWM7Y29uc3QgZj1uZXcgU2V0O2xldCB2PWtzKGwsLTEsQmUoKS0xKTtmdW5jdGlvbiBNKHJ0LHB0KXtjb25zdCBkdD1CZSgpLTE7''@;'; put 'put ''cmV0dXJuIHJ0PDAmJihydD1kdCkscnQ+ZHQmJihydD0wKSxmLmhhcyhydCk/LTE6KGYuYWRkKHJ0KSwhMT09PWQocnQsITEpJiYocnQ9TSgxPT09cHQ/KytydDotLXJ0LHB0KSkscnQpfWZ1bmN0aW9uIEJlKCl7cmV0dXJuIE1hdGgubWF4KGEoKSwwKX1yZXR1cm57c2V0Q3VycmVudFBhZ2U6''@;'; put 'put ''ZnVuY3Rpb24gRChydCl7cnQ+LTEmJnJ0PEJlKCkmJiExIT09ZChydCwhMCkmJih2PXJ0KX0sZ2V0Q3VycmVudFBhZ2U6ZnVuY3Rpb24gWigpe3JldHVybiB2fSx0b0ZpcnN0SXRlbTpmdW5jdGlvbiByZSgpe0JlKCk+MCYmKGYuY2xlYXIoKSx2PU0oMCwxKSl9LHRvTGFzdEl0ZW06ZnVuY3Rp''@;'; put 'put ''b24gY2UoKXtCZSgpPjAmJihmLmNsZWFyKCksdj1NKEJlKCktMSwtMSkpfSx0b05leHRJdGVtOmZ1bmN0aW9uIGJlKCl7QmUoKT4wJiYoZi5jbGVhcigpLHY9TSgrK3YsMSkpfSx0b1ByZXZpb3VzSXRlbTpmdW5jdGlvbiBFZSgpe0JlKCk+MCYmKGYuY2xlYXIoKSx2PU0oLS12LC0xKSl9LGdl''@;'; put 'put ''dFNpemU6QmUsY2xlYXI6ZnVuY3Rpb24gcWUoKXtmLmNsZWFyKCksdj1sLGgoKX19fWZ1bmN0aW9uIExKKGMpe3JldHVybiBUdShjLCJzdWJtZW51Iil9ZnVuY3Rpb24gT0ooYyl7cmV0dXJuIG5ldyBSZWdFeHAoc3MsImkiKS50ZXN0KGMubmFtZSl9ZnVuY3Rpb24gRUYoYyxsKXtyZXR1cm4h''@;'; put 'put ''MD09PWMuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBjLmRpc2FibGVkJiYhMD09PWMuZGlzYWJsZWQuY2FsbChsKX1mdW5jdGlvbiBDZ2UoYyl7cmV0dXJuIFR1KGMsImRpc2FibGVTZWxlY3Rpb24iKX1mdW5jdGlvbiBTZ2UoYyxsKXtjb25zdCBhPWMuc2xpY2UoMCk7Zm9yKGxldCBk''@;'; put 'put ''PTA7ZDxhLmxlbmd0aCYmYVtkXS5uYW1lPT09bDspYS5zaGlmdCgpO3JldHVybiBhfWZ1bmN0aW9uIFF1dChjKXtyZXR1cm4hMD09PWMuY2hlY2thYmxlfWZ1bmN0aW9uIHIwdChjKXtyZXR1cm4obCxhLGQsaCxmLHYpPT57Y29uc3QgTT1sLmdldFNvdXJjZURhdGFBdFJvdyhkKSxEPWMucm9v''@;'; put 'put ''dERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFo9ImZ1bmN0aW9uIj09dHlwZW9mIHY/di5jYWxsKGMpOnYscmU9ImZ1bmN0aW9uIj09dHlwZW9mIE0uYXJpYUxhYmVsP00uYXJpYUxhYmVsLmNhbGwoYyk6TS5hcmlhTGFiZWwsY2U9ImZ1bmN0aW9uIj09dHlwZW9mIE0uYXJpYUNoZWNr''@;'; put 'put ''ZWQ/TS5hcmlhQ2hlY2tlZC5jYWxsKGMpOk0uYXJpYUNoZWNrZWQ7aWYoeHAoYSksVGkoRCwiaHRJdGVtV3JhcHBlciIpLGMuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3QgYmU9IUVGKE0sYykmJiFDZ2UoTSkmJiFPSihNKTt2byhhLFsuLi5RdXQoTSk/W1sicm9sZSIsIm1lbnVpdGVt''@;'; put 'put ''Y2hlY2tib3giXSxtRShyZSksSTJlKGNlKV06W1sicm9sZSIsIm1lbnVpdGVtIl0sbUUoWildLC4uLmJlP1tONygtMSldOltdLC4uLkVGKE0sYyk/W1siYXJpYS1kaXNhYmxlZCIsInRydWUiXV06W10sLi4uTEooTSk/W04yKCExKV06W11dKX1hLmNsYXNzTmFtZT0iIixhLmFwcGVuZENoaWxk''@;'; put 'put ''KEQpLE9KKE0pP1RpKGEsImh0U2VwYXJhdG9yIik6ImZ1bmN0aW9uIj09dHlwZW9mIE0ucmVuZGVyZXI/KFRpKGEsImh0Q3VzdG9tTWVudVJlbmRlcmVyIiksYS5hcHBlbmRDaGlsZChNLnJlbmRlcmVyKGwsRCxkLGgsZixaKSkpOno3KEQsWiksRUYoTSxjKT9UaShhLCJodERpc2FibGVkIik6''@;'; put 'put ''Q2dlKE0pP1RpKGEsImh0U2VsZWN0aW9uRGlzYWJsZWQiKTpMSihNKSYmVGkoYSwiaHRTdWJtZW51Iil9fWZ1bmN0aW9uIFBKKGMsbCxhKXsoZnVuY3Rpb24gaTB0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0''@;'; put 'put ''ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBVcChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYTB0KGMpe3ZhciBsPWZ1bmN0aW9uIG8wdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1i''@;'; put 'put ''b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu''@;'; put 'put ''KCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6''@;'; put 'put ''Y1tsXT1hLGN9ZnVuY3Rpb24gRkooYyxsLGEpe3JldHVybiBjLnNldChFZ2UoYyxsKSxhKSxhfWZ1bmN0aW9uIF85KGMsbCl7cmV0dXJuIGMuZ2V0KEVnZShjLGwpKX1mdW5jdGlvbiBFZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBUVD1uZXcgV2Vha01hcCxURj1uZXcgV2Vha01hcCxBRj1uZXcgV2Vha01hcDtjbGFzcyBxX3tnZXQgdGFibGVCb3JkZXJXaWR0''@;'; put 'put ''aCgpe3JldHVybiB2b2lkIDA9PT1fOShBRix0aGlzKSYmdGhpcy5ob3RNZW51JiZGSihBRix0aGlzLHBhcnNlSW50KHRoaXMuaG90TWVudS5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5ob3RNZW51LnZpZXcuX3d0Lnd0VGFibGUuVEFCTEUpLmJvcmRlcldpZHRoLDEwKSksXzko''@;'; put 'put ''QUYsdGhpcyl9Y29uc3RydWN0b3IobCxhKXt2YXIgZD10aGlzO1VwKHRoaXMsImhvdCIsdm9pZCAwKSxVcCh0aGlzLCJvcHRpb25zIix2b2lkIDApLFVwKHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IGoyKHRoaXMpKSxVcCh0aGlzLCJjb250YWluZXIiLHZvaWQgMCksVXAodGhpcywicG9zaXRp''@;'; put 'put ''b25lciIsdm9pZCAwKSxVcCh0aGlzLCJob3RNZW51IixudWxsKSxVcCh0aGlzLCJob3RTdWJNZW51cyIse30pLFVwKHRoaXMsInBhcmVudE1lbnUiLHZvaWQgMCksVXAodGhpcywibWVudUl0ZW1zIixudWxsKSxVcCh0aGlzLCJvcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzIixudWxsKSxQSih0''@;'; put 'put ''aGlzLFRULHZvaWQgMCksUEoodGhpcyxURix2b2lkIDApLFBKKHRoaXMsQUYsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMub3B0aW9ucz1hfHx7cGFyZW50Om51bGwsbmFtZTpudWxsLGNsYXNzTmFtZToiIixrZWVwSW5WaWV3cG9ydDohMCxzdGFuZGFsb25lOiExLG1pbldpZHRoOjIxNSxjb250''@;'; put 'put ''YWluZXI6dGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudH0sdGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5vcHRpb25zLm5hbWUpLHRoaXMucG9zaXRpb25lcj1uZXcgVXV0KHRoaXMub3B0aW9ucy5rZWVwSW5WaWV3cG9ydCksdGhpcy5wYXJlbnRN''@;'; put 'put ''ZW51PXRoaXMub3B0aW9ucy5wYXJlbnR8fG51bGwsdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2''@;'; put 'put ''PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uQ2hhbmdlIiwuLi5mKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChoLGYpPT57dmFyIHY7Znx8bnVsbD09PSh2PXRoaXMuaG90TWVu''@;'; put 'put ''dSl8fHZvaWQgMD09PXZ8fHYudXNlVGhlbWUoaCl9KX1yZWdpc3RlckV2ZW50cygpe2xldCBsPXRoaXMuaG90LnJvb3RXaW5kb3c7Zm9yKDtsOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsIm1vdXNlZG93biIsYT0+dGhpcy5vbkRvY3VtZW50TW91c2VE''@;'; put 'put ''b3duKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsInRvdWNoc3RhcnQiLGE9PnRoaXMub25Eb2N1bWVudE1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJjb250ZXh0bWVudSIsYT0+dGhp''@;'; put 'put ''cy5vbkRvY3VtZW50Q29udGV4dE1lbnUoYSkpLGw9QjcobCl9c2V0TWVudUl0ZW1zKGwpe3RoaXMubWVudUl0ZW1zPWx9Z2V0TmF2aWdhdG9yKCl7cmV0dXJuIF85KFRULHRoaXMpfWdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpe3JldHVybiBfOShURix0aGlzKX1nZXRTZWxlY3RlZEl0ZW0o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKT90aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKVswXSk6bnVsbH1oYXNTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0''@;'; put 'put ''ZWRMYXN0KCkpfWlzU3ViTWVudSgpe3JldHVybiBudWxsIT09dGhpcy5wYXJlbnRNZW51fW9wZW4oKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZU9wZW4iKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0iYmxv''@;'; put 'put ''Y2siO2NvbnN0IGw9TUUoTT0+dGhpcy5vcGVuU3ViTWVudShNKSwzMDApLGE9dGhpcy5vcHRpb25zLm1pbldpZHRofHwyMTU7bGV0IGQ9ITEsaD1JbSh0aGlzLm1lbnVJdGVtcyxNPT4oTS5rZXk9PT14VCYmKGQ9ITApLGZ1bmN0aW9uIEt1dChjLGwpe3JldHVybiFjLmhpZGRlbnx8ISgiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgYy5oaWRkZW4mJmMuaGlkZGVuLmNhbGwobCkpfShNLHRoaXMuaG90KSkpO2lmKGgubGVuZ3RoPDEmJiFkKWgucHVzaChiZ2UoKVt4VF0pO2Vsc2UgaWYoMD09PWgubGVuZ3RoKXJldHVybjtoPWZ1bmN0aW9uIEp1dChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06c3MsYT1jLnNsaWNlKDApO3JldHVybiBhPVNnZShhLGwpLGE9ZnVuY3Rpb24gcXV0KGMsbCl7bGV0IGE9Yy5zbGljZSgwKTtyZXR1cm4gYS5yZXZlcnNlKCksYT1TZ2UoYSxsKSxhLnJldmVyc2UoKSxhfShhLGwpLGE9ZnVuY3Rp''@;'; put 'put ''b24gWHV0KGMpe2NvbnN0IGw9W107cmV0dXJuIFluKGMsKGEsZCk9PntkPjA/bFtsLmxlbmd0aC0xXS5uYW1lIT09YS5uYW1lJiZsLnB1c2goYSk6bC5wdXNoKGEpfSksbH0oYSksYX0oaCxzcyk7bGV0IGY9ITE7Y29uc3Qgdj17ZGF0YTpoLGNvbEhlYWRlcnM6ITEsYXV0b0NvbHVtblNpemU6''@;'; put 'put ''ITAsYXV0b1dyYXBSb3c6ITEsbW9kaWZ5Q29sV2lkdGg6TT0+UGEoTSkmJk08YT9hOk0sYXV0b1Jvd1NpemU6ITEscmVhZE9ubHk6ITAsZWRpdG9yOiExLGNvcHlQYXN0ZTohMSxoaWRkZW5Sb3dzOiEwLG1heENvbHM6MSxjb2x1bW5zOlt7ZGF0YToibmFtZSIscmVuZGVyZXI6cjB0KHRoaXMu''@;'; put 'put ''aG90KX1dLHJlbmRlckFsbFJvd3M6ITAsZnJhZ21lbnRTZWxlY3Rpb246ITEsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiExLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImFyZWEiLGxheW91dERpcmVjdGlvbjp0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIiLGFyaWFUYWdzOiExLHRoZW1lTmFt''@;'; put 'put ''ZTp0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksYmVmb3JlUmVmcmVzaERpbWVuc2lvbnM6KCk9PiExLGJlZm9yZU9uQ2VsbE1vdXNlT3ZlcjooTSxEKT0+e185KFRULHRoaXMpLnNldEN1cnJlbnRQYWdlKEQucm93KX0sYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6KE0sRCk9Pnt0aGlzLmlz''@;'; put 'put ''QWxsU3ViTWVudXNDbG9zZWQoKT9sKEQucm93KTp0aGlzLm9wZW5TdWJNZW51KEQucm93KX0sYWZ0ZXJPbkNlbGxDb250ZXh0TWVudTpNPT57TS5wcmV2ZW50RGVmYXVsdCgpLEYkKCkmJmYmJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuY2xvc2UoITApfSxhZnRlclNlbGVjdGlvbjoo''@;'; put 'put ''TSxELFoscmUsY2UpPT57dGhpcy5ob3RNZW51LnZpZXcuaXNNb3VzZURvd24oKSYmKGNlLnZhbHVlPSEwKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uQ2hhbmdlIix0aGlzLmdldFNlbGVjdGVkSXRlbSgpKX0sYmVmb3JlT25DZWxsTW91c2VVcDpNPT57dGhpcy5oYXNTZWxl''@;'; put 'put ''Y3RlZEl0ZW0oKSYmKGY9IXRoaXMuaXNDb21tYW5kUGFzc2l2ZSh0aGlzLmdldFNlbGVjdGVkSXRlbSgpKSx0aGlzLmV4ZWN1dGVDb21tYW5kKE0pKX0sYWZ0ZXJPbkNlbGxNb3VzZVVwOk09PnsoIUYkKCl8fCFIbShNKSkmJmYmJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJihBcCgpfHxQJCgp''@;'; put 'put ''P3RoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PnRoaXMuY2xvc2UoITApLDMyNSk6dGhpcy5jbG9zZSghMCkpfSxhZnRlclVubGlzdGVuOigpPT57IXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuaXNPcGVuZWQoKSYmdGhpcy5ob3RNZW51Lmxpc3RlbigpfX07dGhpcy5vcmlnT3V0''@;'; put 'put ''c2lkZUNsaWNrRGVzZWxlY3RzPXRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzPSExLHRoaXMuaG90TWVudT1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IodGhpcy5jb250YWluZXIs''@;'; put 'put ''diksdGhpcy5ob3RNZW51LmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMub25BZnRlckluaXQoKSksdGhpcy5ob3RNZW51LmluaXQoKSxGSihUVCx0aGlzLGZ1bmN0aW9uIGUwdChjKXtyZXR1cm4gd2dlKHtzaXplOigpPT5jLmNvdW50Um93cygpLG9uSXRlbVNlbGVjdChsLGEpe2NvbnN0''@;'; put 'put ''IGQ9Yy5nZXRDZWxsKGwsMCk7aWYoIWR8fGZ1bmN0aW9uIFd1dChjKXtyZXR1cm4gcG8oYywiaHRTZXBhcmF0b3IiKX0oZCl8fGZ1bmN0aW9uIEd1dChjKXtyZXR1cm4gcG8oYywiaHREaXNhYmxlZCIpfShkKXx8ZnVuY3Rpb24gJHV0KGMpe3JldHVybiBwbyhjLCJodFNlbGVjdGlvbkRpc2Fi''@;'; put 'put ''bGVkIil9KGQpKXJldHVybiExO2Muc2VsZWN0Q2VsbChsLDAsLi4uYT9bbCwwLCExLCExXTpbXSl9LG9uQ2xlYXIoKXtjLmRlc2VsZWN0Q2VsbCgpfX0pfSh0aGlzLmhvdE1lbnUpKSxGSihURix0aGlzLGZ1bmN0aW9uIG4wdChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107Y29uc3QgYT1bXTtmdW5jdGlvbiBkKFoscmUpe00ocmUpLmFkZFNob3J0Y3V0cyhaLHtncm91cDoibWVudSJ9KX1mdW5jdGlvbiBoKFoscmUpe2NvbnN0IGNlPU0ocmUpO1ouZm9yRWFjaChiZT0+e2xldHtrZXlzOkVlfT1iZTtFZS5mb3JF''@;'; put 'put ''YWNoKEJlPT5jZS5yZW1vdmVTaG9ydGN1dHNCeUtleXMoQmUpKX0pLGEucHVzaCh7c2hvcnRjdXRzOlosY29udGV4dE5hbWU6cmV9KSxkKFoscmUpfWZ1bmN0aW9uIHYoWil7cmV0dXJuIFo/YG1lbnU6JHtafWA6Im1lbnUifWZ1bmN0aW9uIE0oWil7dmFyIHJlO2NvbnN0IGNlPWMuaG90TWVu''@;'; put 'put ''dS5nZXRTaG9ydGN1dE1hbmFnZXIoKSxiZT12KFopO3JldHVybiBudWxsIT09KHJlPWNlLmdldENvbnRleHQoYmUpKSYmdm9pZCAwIT09cmU/cmU6Y2UuYWRkQ29udGV4dChiZSl9cmV0dXJuIGQoZnVuY3Rpb24gdDB0KGMpe2NvbnN0e2hvdDpsLGhvdE1lbnU6YX09YztyZXR1cm5be2tleXM6''@;'; put 'put ''W1siQ29udHJvbC9NZXRhIiwiQSJdXSxmb3J3YXJkVG9Db250ZXh0OmwuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNrOigpPT5jLmNsb3NlKCEwKX0se2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazooZCxoKT0+e2NvbnN0IGY9''@;'; put 'put ''bC5nZXRTZXR0aW5ncygpLHY9ImZ1bmN0aW9uIj09dHlwZW9mIGYudGFiTW92ZXM/Zi50YWJNb3ZlcyhkKTpmLnRhYk1vdmVzO2guaW5jbHVkZXMoInNoaWZ0Iik/bC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLXYucm93LC12LmNvbCk6bC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQodi5y''@;'; put 'put ''b3csdi5jb2wpLGMuY2xvc2UoITApfX0se2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT5jLmNsb3NlKCl9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b05leHRJdGVtKCl9LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9''@;'; put 'put ''PmMuZ2V0TmF2aWdhdG9yKCkudG9QcmV2aW91c0l0ZW0oKX0se2tleXM6W1tsLmlzUnRsKCk/IkFycm93TGVmdCI6IkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBkPWEuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYoZCl7Y29uc3QgaD1jLm9wZW5TdWJNZW51KGRbMF0pO2gmJmguZ2V0''@;'; put 'put ''TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19fSx7a2V5czpbW2wuaXNSdGwoKT8iQXJyb3dSaWdodCI6IkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e2EuZ2V0U2VsZWN0ZWRMYXN0KCkmJmMuaXNTdWJNZW51KCkmJihjLmNsb3NlKCksYy5pc1N1Yk1lbnUoKSYmYy5wYXJlbnRNZW51Lmhv''@;'; put 'put ''dE1lbnUubGlzdGVuKCkpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQXJyb3dVcCJdLFsiSG9tZSJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBcnJvd0Rvd24iXSxbIkVuZCJdXSxjYWxsYmFjazooKT0+''@;'; put 'put ''Yy5nZXROYXZpZ2F0b3IoKS50b0xhc3RJdGVtKCl9LHtrZXlzOltbIkVudGVyIl0sWyJTcGFjZSJdXSxjYWxsYmFjazpkPT57Y29uc3QgaD1hLmdldFNlbGVjdGVkTGFzdCgpO2gmJihhLmdldFNvdXJjZURhdGFBdFJvdyhoWzBdKS5zdWJtZW51P2Mub3BlblN1Yk1lbnUoaFswXSkuZ2V0TmF2''@;'; put 'put ''aWdhdG9yKCkudG9GaXJzdEl0ZW0oKTooYy5leGVjdXRlQ29tbWFuZChkKSxjLmNsb3NlKCEwKSkpfX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT57YS5nZXRTZWxlY3RlZExhc3QoKT9hLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtYS5jb3VudFZpc2libGVSb3dzKCksMCk6''@;'; put 'put ''Yy5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9PnthLmdldFNlbGVjdGVkTGFzdCgpP2Euc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGEuY291bnRWaXNpYmxlUm93cygpLDApOmMuZ2V0TmF2aWdhdG9yKCkudG9MYXN0SXRl''@;'; put 'put ''bSgpfX1dfShjKSksbC5mb3JFYWNoKFo9PntsZXR7c2hvcnRjdXRzOnJlLGNvbnRleHROYW1lOmNlfT1aO2gocmUsY2UpfSkse2FkZEN1c3RvbVNob3J0Y3V0czpoLGdldEN1c3RvbVNob3J0Y3V0czpmdW5jdGlvbiBmKCl7cmV0dXJuWy4uLmFdfSxnZXRDb250ZXh0Ok0sbGlzdGVuOmZ1bmN0''@;'; put 'put ''aW9uIEQoWil7Yy5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKHYoWikpfX19KHRoaXMpKSxfOShURix0aGlzKS5saXN0ZW4oKSx0aGlzLmZvY3VzKCksdGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PnRo''@;'; put 'put ''aXMucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJhZnRlclN1Ym1lbnVPcGVuIix0aGlzKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlck9wZW4iLHRoaXMpfWNsb3NlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0''@;'; put 'put ''aGlzLmlzT3BlbmVkKCkpaWYobCYmdGhpcy5pc1N1Yk1lbnUoKSl0aGlzLnBhcmVudE1lbnUuY2xvc2UoKTtlbHNlIGlmKF85KFRULHRoaXMpLmNsZWFyKCksdGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ob3RNZW51LmRl''@;'; put 'put ''c3Ryb3koKSx0aGlzLmhvdE1lbnU9bnVsbCx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cz10aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIiksdGhpcy5pc1N1Yk1lbnUoKSl7aWYodGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3QgYT10aGlzLnBhcmVudE1lbnUuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTthJiZ2byh0aGlzLnBhcmVudE1lbnUuaG90TWVudS5nZXRDZWxsKGFbMF0sMCksW04yKCExKV0pfXRoaXMucGFyZW50TWVudS5ob3RNZW51Lmxpc3RlbigpfX1v''@;'; put 'put ''cGVuU3ViTWVudShsKXtpZighdGhpcy5ob3RNZW51KXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3RNZW51LmdldENlbGwobCwwKTtpZih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSwhYXx8IWZ1bmN0aW9uIFl1dChjKXtyZXR1cm4gcG8oYywiaHRTdWJtZW51Iil9KGEpKXJldHVybiExO2NvbnN0''@;'; put 'put ''IGQ9dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhsKSxoPW5ldyBxXyh0aGlzLmhvdCx7cGFyZW50OnRoaXMsbmFtZTpkLm5hbWUsY2xhc3NOYW1lOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5jb250YWluZXJ9''@;'; put 'put ''KTtyZXR1cm4gaC5zZXRNZW51SXRlbXMoZC5zdWJtZW51Lml0ZW1zKSxoLm9wZW4oKSxoLnNldFBvc2l0aW9uKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuaG90U3ViTWVudXNbZC5rZXldPWgsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8oYSxbTjIoITApXSks''@;'; put 'put ''aH1jbG9zZVN1Yk1lbnUobCl7Y29uc3QgYT10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KGwpLGQ9dGhpcy5ob3RTdWJNZW51c1thLmtleV07aWYoZCl7ZC5kZXN0cm95KCksZGVsZXRlIHRoaXMuaG90U3ViTWVudXNbYS5rZXldO2NvbnN0IGg9dGhpcy5ob3RNZW51LmdldENlbGwo''@;'; put 'put ''bCwwKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byhoLFtOMighMSldKX19Y2xvc2VBbGxTdWJNZW51cygpe1luKHRoaXMuaG90TWVudS5nZXREYXRhKCksKGwsYSk9PnRoaXMuY2xvc2VTdWJNZW51KGEpKX1pc0FsbFN1Yk1lbnVzQ2xvc2VkKCl7cmV0dXJuIDA9PT1PYmpl''@;'; put 'put ''Y3Qua2V5cyh0aGlzLmhvdFN1Yk1lbnVzKS5sZW5ndGh9Zm9jdXMoKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0aGlzLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbigpLHRoaXMuaG90TWVudS5s''@;'; put 'put ''aXN0ZW4oKSl9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZTt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY2xvc2UoKSx0aGlzLnBhcmVudE1lbnU9bnVsbCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRh''@;'; put 'put ''aW5lcil9aXNPcGVuZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuaG90TWVudX1leGVjdXRlQ29tbWFuZChsKXtpZighdGhpcy5pc09wZW5lZCgpfHwhdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSlyZXR1cm47Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkSXRlbSgpO2lmKHRoaXMucnVuTG9jYWxIb29r''@;'; put 'put ''cygic2VsZWN0IixhLGwpLHRoaXMuaXNDb21tYW5kUGFzc2l2ZShhKSlyZXR1cm47Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksaD1kP2Z1bmN0aW9uIFp1dChjKXtyZXR1cm4geXMoYyxsPT4oe3N0YXJ0OmwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxlbmQ6bC5nZXRCb3R0b21F''@;'; put 'put ''bmRDb3JuZXIoKX0pKX0oZCk6W107dGhpcy5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxsKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCl9aXNDb21tYW5kUGFzc2l2ZShsKXty''@;'; put 'put ''ZXR1cm4hMT09PWwuaXNDb21tYW5kfHxPSihsKXx8RUYobCx0aGlzLmhvdCl8fExKKGwpfXNldE9mZnNldChsKXt0aGlzLnBvc2l0aW9uZXIuc2V0T2Zmc2V0KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjApfXNldFBvc2l0aW9uKGwp''@;'; put 'put ''e3RoaXMuaXNTdWJNZW51KCkmJnRoaXMucG9zaXRpb25lci5zZXRQYXJlbnRFbGVtZW50KHRoaXMucGFyZW50TWVudS5jb250YWluZXIpLHRoaXMucG9zaXRpb25lci5zZXRFbGVtZW50KHRoaXMuY29udGFpbmVyKS51cGRhdGVQb3NpdGlvbihsKX11cGRhdGVNZW51RGltZW5zaW9ucygpe2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5ob3RNZW51LnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpLHt3dFRhYmxlOmF9PXRoaXMuaG90TWVudS52aWV3Ll93dCxkPXRoaXMuaG90TWVudS5nZXRTZXR0aW5ncygpLmRhdGEsaD1hLmhpZGVyLnN0eWxlLGY9YS5ob2xkZXIuc3R5bGUsdj1wYXJzZUludChoLndpZHRoLDEw''@;'; put 'put ''KSxNPXF1KGQsKEQsWixyZSk9Pntjb25zdCBiZT10aGlzLmhvdE1lbnUuZ2V0Q2VsbChyZSwwKT94dSh0aGlzLmhvdE1lbnUuZ2V0Q2VsbChyZSwwKSk6MDtyZXR1cm4gRCsoWi5uYW1lPT09c3M/MTpiZSl9LDApO2wuaXNDbGFzc2ljVGhlbWUoKT8oZi53aWR0aD1gJHt2KzN9cHhgLGYuaGVp''@;'; put 'put ''Z2h0PWAke00rM31weGApOihmLndpZHRoPWAke3Z9cHhgLGYuaGVpZ2h0PWAke019cHhgKSxoLmhlaWdodD1mLmhlaWdodH1jcmVhdGVDb250YWluZXIoKXtjb25zdCBhPXRoaXMub3B0aW9ucy5jb250YWluZXIub3duZXJEb2N1bWVudDtsZXQgaCxkPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBkJiYobWwoZCkmJihkPWQuY2FsbCh0aGlzLmhvdCksZD1udWxsPT09ZHx8X2MoZCk/IiI6ZC50b1N0cmluZygpKSxkPWQucmVwbGFjZSgvW15BLVphLXowLTldL2csIl8iKSxkPWAke3RoaXMub3B0aW9ucy5jbGFz''@;'; put 'put ''c05hbWV9U3ViXyR7ZH1gLGg9YS5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfS4ke2R9YCkpLGh8fChoPWEuY3JlYXRlRWxlbWVudCgiZGl2IiksVGkoaCxgaHRNZW51IGhhbmRzb250YWJsZSAke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9YCksZCYmVGkoaCxkKSx0''@;'; put 'put ''aGlzLm9wdGlvbnMuY29udGFpbmVyLmFwcGVuZENoaWxkKGgpKSxofW9uQWZ0ZXJJbml0KCl7dGhpcy51cGRhdGVNZW51RGltZW5zaW9ucygpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZvKHRoaXMuaG90TWVudS5yb290RWxlbWVudCxbWyJyb2xlIiwibWVudSJdLE43KC0x''@;'; put 'put ''KV0pfW9uRG9jdW1lbnRNb3VzZURvd24obCl7dGhpcy5pc09wZW5lZCgpJiYodGhpcy5vcHRpb25zLnN0YW5kYWxvbmUmJnRoaXMuaG90TWVudSYmIUxtKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCl8fCh0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKXx8dGhpcy5pc1N1Yk1l''@;'; put 'put ''bnUoKSkmJiFMbShsLnRhcmdldCwiLmh0TWVudSIpKSYmdGhpcy5jbG9zZSghMCl9b25Eb2N1bWVudENvbnRleHRNZW51KGwpe3RoaXMuaXNPcGVuZWQoKSYmcG8obC50YXJnZXQsImh0Q29yZSIpJiZMbShsLnRhcmdldCx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpJiZsLnByZXZlbnREZWZh''@;'; put 'put ''dWx0KCl9fWZ1bmN0aW9uIEhKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBjMHQoYyl7dmFyIGw9ZnVuY3Rpb24gdTB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs''@;'; put 'put ''KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci''@;'; put 'put ''KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBrRihjLGwsYSl7aWYoImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9VGwocV8seTEpO2NvbnN0IEFUPSJjb250ZXh0TWVudSIsQWdlPUFUO1Nh''@;'; put 'put ''LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29udGV4dE1lbnVTaG93IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVTaG93IiksU2Eu''@;'; put 'put ''Z2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVIaWRlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVFeGVjdXRlIik7dmFyIGtUPW5ldyBXZWFrU2V0O2NsYXNzIERGIGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5h''@;'; put 'put ''cmd1bWVudHMpLGZ1bmN0aW9uIHMwdChjLGwpeyhmdW5jdGlvbiBsMHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhp''@;'; put 'put ''cyxrVCksSEoodGhpcywiY29tbWFuZEV4ZWN1dG9yIixuZXcgZ2dlKHRoaXMuaG90KSksSEoodGhpcywiaXRlbXNGYWN0b3J5IixudWxsKSxISih0aGlzLCJtZW51IixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gQVR9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXty''@;'; put 'put ''ZXR1cm4gNzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxUX0lURU1TKCl7cmV0dXJuW0NGLFNGLHNzLHdULENULHNzLHdGLE1ULHNzLE1GLF9GLHNzLFNULHNzLEsyXX1pc0VuYWJsZWQoKXtyZXR1cm4h''@;'; put 'put ''IXRoaXMuaG90LmdldFNldHRpbmdzKClbQVRdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbQVRdOyJmdW5jdGlvbiI9PXR5cGVvZiBhLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5z''@;'; put 'put ''ZXRDb21tb25DYWxsYmFjayhhLmNhbGxiYWNrKSx0aGlzLm1lbnU9bmV3IHFfKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0Q29udGV4dE1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjphLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keX0pLHRoaXMubWVudS5h''@;'; put 'put ''ZGRMb2NhbEhvb2soImJlZm9yZU9wZW4iLCgpPT5rRihrVCx0aGlzLGYwdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+a0Yoa1QsdGhpcyxwMHQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5r''@;'; put 'put ''RihrVCx0aGlzLGcwdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiZXhlY3V0ZUNvbW1hbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGwuZXhlY3V0''@;'; put 'put ''ZUNvbW1hbmQuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvbnRleHRNZW51IixkPT5rRihrVCx0aGlzLGgwdCkuY2FsbCh0aGlzLGQpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNh''@;'; put 'put ''YmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmKHRoaXMubWVudS5kZXN0cm95KCksdGhpcy5tZW51PW51bGwpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRp''@;'; put 'put ''c2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sL01ldGEiLCJTaGlmdCIsIkJhY2tzbGFzaCJdLFsiU2hpZnQiLCJGMTAiXV0sY2FsbGJhY2s6''@;'; put 'put ''KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLmhvdC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCk7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsKGwucm93LGwuY29sLCEwKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWZGKHRoaXMubWVu''@;'; put 'put ''dS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KTt0aGlzLm9wZW4oe2xlZnQ6YS5sZWZ0K2QubGVmdCx0b3A6YS50b3ArZC50b3AtMSthLmhlaWdodH0se2xlZnQ6YS53aWR0aCxhYm92ZTotYS5oZWlnaHR9KSx0aGlzLm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX0s''@;'; put 'put ''cnVuT25seUlmOigpPT57dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBhJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShhKSYmIXRoaXMubWVudS5pc09w''@;'; put 'put ''ZW5lZCgpfSxncm91cDpBZ2V9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoQWdlKX1vcGVuKGwpe3ZhciBhO2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfTtpZihudWxsIT09KGE9dGhpcy5tZW51KSYmdm9pZCAwIT09YSYmYS5pc09wZW5lZCgpKXJldHVybjt0aGlzLnByZXBhcmVNZW51SXRlbXMoKSx0aGlzLm1lbnUub3BlbigpO2NvbnN0''@;'; put 'put ''IGg9dGhpcy5tZW51LnRhYmxlQm9yZGVyV2lkdGg+MDtYbyhkLChmLHYpPT57Y29uc3QgTT1bImJlbG93IiwicmlnaHQiXS5pbmNsdWRlcyh2KT9mKzE6Zi0xO3RoaXMubWVudS5zZXRPZmZzZXQodixoP2Y6TSl9KSx0aGlzLm1lbnUuc2V0UG9zaXRpb24obCl9Y2xvc2UoKXt2YXIgbDtudWxs''@;'; put 'put ''PT09KGw9dGhpcy5tZW51KXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpLHRoaXMuaXRlbXNGYWN0b3J5PW51bGx9ZXhlY3V0ZUNvbW1hbmQobCl7bnVsbD09PXRoaXMuaXRlbXNGYWN0b3J5JiZ0aGlzLnByZXBhcmVNZW51SXRlbXMoKTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB''@;'; put 'put ''cnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07dGhpcy5jb21tYW5kRXhlY3V0b3IuZXhlY3V0ZShsLC4uLmQpfXByZXBhcmVNZW51SXRlbXMoKXt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgeWdlKHRoaXMuaG90LERGLkRFRkFVTFRfSVRFTVMpO2NvbnN0IGw9''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtBVF0sYT17aXRlbXM6dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMobCl9O3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGEpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhhLml0ZW1z''@;'; put 'put ''KTtjb25zdCBkPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGwpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIixkKSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKGQpLFluKGQsaD0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKGgua2V5''@;'; put 'put ''LGgpKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGgwdChjKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKCksYT1sLnJvd0hlYWRlcnMsZD1sLmNvbEhlYWRlcnMsZj1jLnRhcmdldDtp''@;'; put 'put ''Zih0aGlzLmNsb3NlKCkscG8oZiwiaGFuZHNvbnRhYmxlSW5wdXQiKXx8KGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpLCEoYXx8ZHx8ZnVuY3Rpb24gaChNKXtyZXR1cm4iVEQiPT09TS5ub2RlTmFtZXx8IlREIj09PU0ucGFyZW50Tm9kZS5ub2RlTmFtZX0oZil8fHBv''@;'; put 'put ''KGYsImN1cnJlbnQiKSYmcG8oZiwid3RCb3JkZXIiKSkpKXJldHVybjtjb25zdCB2PWZGKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KTt0aGlzLm9wZW4oe3RvcDpjLmNsaWVudFkrdi50b3AsbGVmdDpjLmNsaWVudFgrdi5sZWZ0fSl9ZnVuY3Rpb24gZjB0KCl7''@;'; put 'put ''dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gcDB0KCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVTaG93Iix0aGlzKX1mdW5jdGlvbiBnMHQoKXt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJDb250ZXh0TWVudUhpZGUiLHRoaXMpfURGLlNFUEFSQVRPUj17bmFtZTpzc307Y2xhc3MgdzB0e2NvbnN0cnVjdG9yKCl7dGhpcy5kYXRhPXt9fXNldERhdGEobCxhKXt0aGlzLmRhdGFbbF09YX1nZXREYXRhKGwpe3JldHVybiB0aGlzLmRhdGFbbF18fHZvaWQgMH19Y2xhc3MgQzB0e2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7dGhpcy5jbGlwYm9hcmREYXRhPW5ldyB3MHR9cHJldmVudERlZmF1bHQoKXt9Y29tcG9zZWRQYXRoKCl7cmV0dXJuW119fWZ1bmN0aW9uIFhfKGMsbCxhKXtrZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGtnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSjEoYyxsKXtyZXR1cm4gYy5nZXQoUV8oYyxsKSl9ZnVuY3Rpb24gSl8oYyxsLGEpe3JldHVybiBjLnNldChRXyhjLGwpLGEpLGF9ZnVuY3Rpb24g''@;'; put 'put ''UV8oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB0Nj1uZXcgV2Vha01h''@;'; put 'put ''cCxOSj1uZXcgV2Vha01hcCxEVD1uZXcgV2Vha01hcCxWSj1uZXcgV2Vha01hcCxCSj1uZXcgV2Vha01hcCxJVD1uZXcgV2Vha01hcCxSVD1uZXcgV2Vha1NldDtjbGFzcyBNMHR7Y29uc3RydWN0b3IobCl7bGV0e2NvdW50Um93czphLGNvdW50Q29sdW1uczpkLHJvd3NMaW1pdDpoLGNvbHVt''@;'; put 'put ''bnNMaW1pdDpmLGNvdW50Q29sdW1uSGVhZGVyczp2fT1sOyhmdW5jdGlvbiBTMHQoYyxsKXtrZ2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsUlQpLFhfKHRoaXMsdDYsdm9pZCAwKSxYXyh0aGlzLE5KLHZvaWQgMCksWF8odGhpcyxEVCx2b2lkIDApLFhfKHRoaXMsVkosdm9pZCAwKSxYXyh0aGlz''@;'; put 'put ''LEJKLHZvaWQgMCksWF8odGhpcyxJVCx2b2lkIDApLEpfKE5KLHRoaXMsYSksSl8oRFQsdGhpcyxkKSxKXyhWSix0aGlzLGgpLEpfKEJKLHRoaXMsZiksSl8oSVQsdGhpcyx2KX1zZXRTZWxlY3RlZFJhbmdlKGwpe0pfKHQ2LHRoaXMsbCl9Z2V0Q2VsbHNSYW5nZSgpe2lmKDA9PT1KMShOSix0''@;'; put 'put ''aGlzKS5jYWxsKHRoaXMpfHwwPT09SjEoRFQsdGhpcykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtyb3c6bCxjb2w6YX09SjEodDYsdGhpcykuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmQsY29sOmh9PUoxKHQ2LHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLGY9UV8oUlQsdGhp''@;'; put 'put ''cyx4MHQpLmNhbGwodGhpcyxsLGQpLHY9UV8oUlQsdGhpcyxqSikuY2FsbCh0aGlzLGEsaCk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmQhPT1mfHxoIT09dixzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmYsZW5kQ29sOnZ9fWdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKXtp''@;'; put 'put ''ZigwPT09SjEoRFQsdGhpcykuY2FsbCh0aGlzKXx8MD09PUoxKElULHRoaXMpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PUoxKHQ2LHRoaXMpLmdldFRvcFN0YXJ0Q29ybmVyKCkse2NvbDphfT1KMSh0Nix0aGlzKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPVFfKFJULHRo''@;'; put 'put ''aXMsakopLmNhbGwodGhpcyxsLGEpO3JldHVybntpc1JhbmdlVHJpbW1lZDphIT09ZCxzdGFydFJvdzotMSxzdGFydENvbDpsLGVuZFJvdzotMSxlbmRDb2w6ZH19Z2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PUoxKERULHRoaXMpLmNhbGwodGhpcyl8fDA9PT1KMShJVCx0aGlz''@;'; put 'put ''KS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDpsfT1KMSh0Nix0aGlzKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09SjEodDYsdGhpcykuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZD1RXyhSVCx0aGlzLGpKKS5jYWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6''@;'; put 'put ''YSE9PWQsc3RhcnRSb3c6LUoxKElULHRoaXMpLmNhbGwodGhpcyksc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fX1mdW5jdGlvbiBqSihjLGwpe3JldHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrSjEoQkosdGhpcykuY2FsbCh0aGlzKS0xLGMpKX1mdW5jdGlvbiB4MHQoYyxsKXty''@;'; put 'put ''ZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK0oxKFZKLHRoaXMpLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gRGdlKGMpe2NvbnN0IGw9W10sYT1bXTtyZXR1cm4gWW4oYyxkPT57R2EoTWF0aC5taW4oZC5zdGFydFJvdyxkLmVuZFJvdyksTWF0aC5tYXgoZC5zdGFydFJvdyxkLmVuZFJv''@;'; put 'put ''dyksRD0+ey0xPT09bC5pbmRleE9mKEQpJiZsLnB1c2goRCl9KSxHYShNYXRoLm1pbihkLnN0YXJ0Q29sLGQuZW5kQ29sKSxNYXRoLm1heChkLnN0YXJ0Q29sLGQuZW5kQ29sKSxEPT57LTE9PT1hLmluZGV4T2YoRCkmJmEucHVzaChEKX0pfSkse3Jvd3M6bCxjb2x1bW5zOmF9fWZ1bmN0aW9u''@;'; put 'put ''IG42KGMsbCxhKXtJZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIElnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gTFQoYyxsLGEp''@;'; put 'put ''e3JldHVybihsPWZ1bmN0aW9uIFQwdChjKXt2YXIgbD1mdW5jdGlvbiBBMHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''bD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFlkKGMsbCl7cmV0dXJuIGMuZ2V0KEdkKGMsbCkpfWZ1bmN0aW9uIHAzKGMsbCxhKXty''@;'; put 'put ''ZXR1cm4gYy5zZXQoR2QoYyxsKSxhKSxhfWZ1bmN0aW9uIEdkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQg''@;'; put 'put ''b24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5TGltaXQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5Q29weWFibGVSYW5nZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDdXQiKSxTYS5nZXRTaW5nbGV0''@;'; put 'put ''b24oKS5yZWdpc3RlcigiYWZ0ZXJDdXQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUGFzdGUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJQYXN0ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb3B5IiksU2EuZ2V0U2luZ2xldG9u''@;'; put 'put ''KCkucmVnaXN0ZXIoImFmdGVyQ29weSIpO2NvbnN0IHpKPSJjb3B5UGFzdGUiLEQwdD1bImZyYWdtZW50U2VsZWN0aW9uIl0sUmdlPVsnPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJIYW5kc29udGFibGUiLz4nLCc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPnRke3doaXRlLXNwYWNl''@;'; put 'put ''Om5vcm1hbH1icnttc28tZGF0YS1wbGFjZW1lbnQ6c2FtZS1jZWxsfTwvc3R5bGU+J10uam9pbigiIik7dmFyIFVKPW5ldyBXZWFrTWFwLFpKPW5ldyBXZWFrTWFwLFdKPW5ldyBXZWFrTWFwLGV3PW5ldyBXZWFrTWFwLElGPW5ldyBXZWFrTWFwLFJGPW5ldyBXZWFrTWFwLHR3PW5ldyBXZWFr''@;'; put 'put ''TWFwLExGPW5ldyBXZWFrTWFwLEZoPW5ldyBXZWFrU2V0O2NsYXNzIEkwdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBFMHQoYyxsKXtJZ2UoYyxsKSxsLmFkZChjKX0odGhpcyxGaCksTFQodGhpcywiY29sdW1uc0xpbWl0IiwxLzApLExU''@;'; put 'put ''KHRoaXMsInJvd3NMaW1pdCIsMS8wKSxMVCh0aGlzLCJwYXN0ZU1vZGUiLCJvdmVyd3JpdGUiKSxMVCh0aGlzLCJ1aUNvbnRhaW5lciIsdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkpLG42KHRoaXMsVUosITEpLG42KHRoaXMsWkosITEpLG42KHRoaXMsV0osITEpLG42KHRoaXMsZXcsImNl''@;'; put 'put ''bGxzLW9ubHkiKSxuNih0aGlzLElGLCExKSxuNih0aGlzLFJGLCExKSxuNih0aGlzLHR3LG5ldyBNMHQoe2NvdW50Um93czooKT0+dGhpcy5ob3QuY291bnRSb3dzKCksY291bnRDb2x1bW5zOigpPT50aGlzLmhvdC5jb3VudENvbHMoKSxyb3dzTGltaXQ6KCk9PnRoaXMucm93c0xpbWl0LGNv''@;'; put 'put ''bHVtbnNMaW1pdDooKT0+dGhpcy5jb2x1bW5zTGltaXQsY291bnRDb2x1bW5IZWFkZXJzOigpPT50aGlzLmhvdC52aWV3LmdldENvbHVtbkhlYWRlcnNDb3VudCgpfSkpLG42KHRoaXMsTEYsITEpLExUKHRoaXMsImNvcHlhYmxlUmFuZ2VzIixbXSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7''@;'; put 'put ''cmV0dXJuIHpKfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3pKLC4uLkQwdF19c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gODB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3Bhc3RlTW9kZToib3ZlcndyaXRlIixyb3dzTGltaXQ6MS8w''@;'; put 'put ''LGNvbHVtbnNMaW1pdDoxLzAsY29weUNvbHVtbkhlYWRlcnM6ITEsY29weUNvbHVtbkdyb3VwSGVhZGVyczohMSxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITF9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt6Sl19ZW5hYmxlUGx1Z2luKCl7dmFyIGwsYSxkPXRo''@;'; put 'put ''aXM7dGhpcy5lbmFibGVkfHwodGhpcy5wYXN0ZU1vZGU9bnVsbCE9PShsPXRoaXMuZ2V0U2V0dGluZygicGFzdGVNb2RlIikpJiZ2b2lkIDAhPT1sP2w6dGhpcy5wYXN0ZU1vZGUsdGhpcy5yb3dzTGltaXQ9aXNOYU4odGhpcy5nZXRTZXR0aW5nKCJyb3dzTGltaXQiKSk/dGhpcy5yb3dzTGlt''@;'; put 'put ''aXQ6dGhpcy5nZXRTZXR0aW5nKCJyb3dzTGltaXQiKSx0aGlzLmNvbHVtbnNMaW1pdD1pc05hTih0aGlzLmdldFNldHRpbmcoImNvbHVtbnNMaW1pdCIpKT90aGlzLmNvbHVtbnNMaW1pdDp0aGlzLmdldFNldHRpbmcoImNvbHVtbnNMaW1pdCIpLHAzKFVKLHRoaXMsdGhpcy5nZXRTZXR0aW5n''@;'; put 'put ''KCJjb3B5Q29sdW1uSGVhZGVycyIpKSxwMyhaSix0aGlzLHRoaXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkdyb3VwSGVhZGVycyIpKSxwMyhXSix0aGlzLHRoaXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkhlYWRlcnNPbmx5IikpLHRoaXMudWlDb250YWluZXI9bnVsbCE9PShhPXRoaXMuZ2V0''@;'; put 'put ''U2V0dGluZygidWlDb250YWluZXIiKSkmJnZvaWQgMCE9PWE/YTp0aGlzLnVpQ29udGFpbmVyLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixoPT5HZChGaCx0aGlzLE8wdCkuY2FsbCh0aGlzLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIixm''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBHZChGaCxkLFAwdCkuY2FsbChkLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsKCk9PkdkKEZoLHRoaXMs''@;'; put 'put ''RjB0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwiY29weSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkNvcHkoLi4uYXJndW1lbnRzKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5o''@;'; put 'put ''b3Qucm9vdERvY3VtZW50LCJjdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DdXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJwYXN0ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblBhc3RlKC4uLmFyZ3Vt''@;'; put 'put ''ZW50cyl9KSxBRSgpJiYodGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSwibW91c2VlbnRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3Vt''@;'; put 'put ''ZW50c1t2XTtyZXR1cm4gR2QoRmgsZCxIMHQpLmNhbGwoZCwuLi5mKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHksIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJy''@;'; put 'put ''YXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIEdkKEZoLGQsTjB0KS5jYWxsKGQsLi4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoKT0+R2QoRmgsdGhpcyxWMHQpLmNhbGwodGhpcykpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1''@;'; put 'put ''Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfWNvcHkoKXtwMyhldyx0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd''@;'; put 'put ''P2FyZ3VtZW50c1swXToiY2VsbHMtb25seSIpLHAzKElGLHRoaXMsITApLEdkKEZoLHRoaXMsTGdlKS5jYWxsKHRoaXMsImNvcHkiKX1jb3B5Q2VsbHNPbmx5KCl7dGhpcy5jb3B5KCJjZWxscy1vbmx5Iil9Y29weUNvbHVtbkhlYWRlcnNPbmx5KCl7dGhpcy5jb3B5KCJjb2x1bW4taGVhZGVy''@;'; put 'put ''cy1vbmx5Iil9Y29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzIil9Y29weVdpdGhDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIil9Y3V0KCl7cDMoUkYsdGhpcywhMCksR2QoRmgsdGhpcyxM''@;'; put 'put ''Z2UpLmNhbGwodGhpcywiY3V0Iil9Z2V0UmFuZ2VkQ29weWFibGVEYXRhKGwpe3JldHVybiByVCh0aGlzLmdldFJhbmdlZERhdGEobCkpfWdldFJhbmdlZERhdGEobCl7Y29uc3QgYT1bXSx7cm93czpkLGNvbHVtbnM6aH09RGdlKGwpO3JldHVybiBZbihkLGY9Pntjb25zdCB2PVtdO1luKGgs''@;'; put 'put ''TT0+e3YucHVzaChmPDA/dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKE0sZik6dGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKGYsTSkpfSksYS5wdXNoKHYpfSksYX1wYXN0ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixhPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2lmKCFsJiYhYSlyZXR1cm47Y29uc3QgZD1uZXcgQzB0O2wmJmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixsKSxhJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9o''@;'; put 'put ''dG1sIixhKSx0aGlzLm9uUGFzdGUoZCl9c2V0Q29weWFibGVUZXh0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtpZihsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuIHZvaWQodGhpcy5jb3B5YWJsZVJhbmdlcz1bXSk7WWQodHcsdGhpcyku''@;'; put 'put ''c2V0U2VsZWN0ZWRSYW5nZShsKTtjb25zdCBhPW5ldyBNYXAoW1siaGVhZGVycyIsbnVsbF0sWyJjZWxscyIsbnVsbF1dKTsiY29sdW1uLWhlYWRlcnMtb25seSI9PT1ZZChldyx0aGlzKT9hLnNldCgiaGVhZGVycyIsWWQodHcsdGhpcykuZ2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5n''@;'; put 'put ''ZSgpKTooIndpdGgtY29sdW1uLWhlYWRlcnMiPT09WWQoZXcsdGhpcyk/YS5zZXQoImhlYWRlcnMiLFlkKHR3LHRoaXMpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk6IndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiPT09WWQoZXcsdGhpcykmJmEuc2V0KCJoZWFkZXJzIixZ''@;'; put 'put ''ZCh0dyx0aGlzKS5nZXRBbGxDb2x1bW5IZWFkZXJzUmFuZ2UoKSksYS5zZXQoImNlbGxzIixZZCh0dyx0aGlzKS5nZXRDZWxsc1JhbmdlKCkpKSx0aGlzLmNvcHlhYmxlUmFuZ2VzPUFycmF5LmZyb20oYS52YWx1ZXMoKSkuZmlsdGVyKGg9Pm51bGwhPT1oKS5tYXAoaD0+e2xldHtzdGFydFJv''@;'; put 'put ''dzpmLHN0YXJ0Q29sOnYsZW5kUm93Ok0sZW5kQ29sOkR9PWg7cmV0dXJue3N0YXJ0Um93OmYsc3RhcnRDb2w6dixlbmRSb3c6TSxlbmRDb2w6RH19KSx0aGlzLmNvcHlhYmxlUmFuZ2VzPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb3B5YWJsZVJhbmdlIix0aGlzLmNvcHlhYmxlUmFuZ2Vz''@;'; put 'put ''KTtjb25zdCBkPWEuZ2V0KCJjZWxscyIpO2lmKG51bGwhPT1kJiZkLmlzUmFuZ2VUcmltbWVkKXtjb25zdHtzdGFydFJvdzpoLHN0YXJ0Q29sOmYsZW5kUm93OnYsZW5kQ29sOk19PWQ7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weUxpbWl0Iix2LWgrMSxNLWYrMSx0aGlzLnJvd3NMaW1p''@;'; put 'put ''dCx0aGlzLmNvbHVtbnNMaW1pdCl9fWlzRWRpdG9yT3BlbmVkKCl7dmFyIGw7cmV0dXJuIG51bGw9PT0obD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaXNPcGVuZWQoKX1wb3B1bGF0ZVZhbHVlcyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbC5sZW5ndGgpcmV0dXJuO2NvbnN0IGQ9bC5sZW5ndGgsaD1sWzBdLmxlbmd0aCxmPVtdLHtyb3c6dixjb2w6TX09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6''@;'; put 'put ''RCxjb2w6Wn09YS5nZXRCb3R0b21FbmRDb3JuZXIoKTtsZXQgcmU9dixjZT1NLGJlPXYsRWU9TTtmb3IoO2YubGVuZ3RoPGR8fHJlPD1EOyl7Y29uc3R7c2tpcFJvd09uUGFzdGU6QmUsdmlzdWFsUm93OnFlfT10aGlzLmhvdC5nZXRDZWxsTWV0YShyZSxNKTtpZihyZT1xZSsxLCEwPT09QmUp''@;'; put 'put ''Y29udGludWU7YmU9cWUsY2U9TTtjb25zdCBydD1bXSxwdD1mLmxlbmd0aCVkO2Zvcig7cnQubGVuZ3RoPGh8fGNlPD1aOyl7Y29uc3R7c2tpcENvbHVtbk9uUGFzdGU6ZHQsdmlzdWFsQ29sOkp0fT10aGlzLmhvdC5nZXRDZWxsTWV0YSh2LGNlKTsoY2U9SnQrMSwhMCE9PWR0KSYmKEVlPUp0''@;'; put 'put ''LHJ0LnB1c2gobFtwdF1bcnQubGVuZ3RoJWhdKSl9Zi5wdXNoKHJ0KX1yZXR1cm4gcDMoTEYsdGhpcywhMCksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkodixNLGYsdm9pZCAwLHZvaWQgMCwiQ29weVBhc3RlLnBhc3RlIix0aGlzLnBhc3RlTW9kZSksW3YsTSxiZSxFZV19b25Db3B5KGwp''@;'; put 'put ''e2NvbnN0IGE9bC5jb21wb3NlZFBhdGgoKVswXSxkPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9jdXNFbGVtZW50KCksaD1hPy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iik7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFZZChJRix0aGlzKXx8dGhpcy5pc0Vk''@;'; put 'put ''aXRvck9wZW5lZCgpfHxFcChhKSYmKGgmJmEhPT1kfHwhaCYmYSE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhdkUoYSx0aGlzLmhvdC5yb290RWxlbWVudCkpKXJldHVybjtsLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDb3B5YWJsZVRleHQoKSxwMyhJRix0aGlzLCExKTtjb25z''@;'; put 'put ''dCBmPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKSx2PUdkKEZoLHRoaXMsUjB0KS5jYWxsKHRoaXMsdGhpcy5jb3B5YWJsZVJhbmdlcyk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvcHkiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyx2KSl7Y29uc3QgRD1yVChm''@;'; put 'put ''KTtpZihsJiZsLmNsaXBib2FyZERhdGEpe2NvbnN0IFo9cSQoZik7bC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLEQpLGwuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLFtSZ2UsWl0uam9pbigiIikpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYm''@;'; put 'put ''dGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLEQpO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvcHkiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyx2KX1wMyhldyx0aGlzLCJjZWxscy1vbmx5Iil9b25DdXQobCl7Y29uc3QgYT1sLmNvbXBvc2VkUGF0aCgp''@;'; put 'put ''WzBdLGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPWE/Lmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKTtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSYmIVlkKFJGLHRoaXMpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fEVwKGEpJiYoaCYm''@;'; put 'put ''YSE9PWR8fCFoJiZhIT09dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkmJiF2RShhLHRoaXMuaG90LnJvb3RFbGVtZW50KSkpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSx0aGlzLnNldENvcHlhYmxlVGV4dCgpLHAzKFJGLHRoaXMsITEpO2NvbnN0IGY9dGhpcy5nZXRSYW5nZWREYXRhKHRo''@;'; put 'put ''aXMuY29weWFibGVSYW5nZXMpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDdXQiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcykpe2NvbnN0IE09clQoZik7aWYobCYmbC5jbGlwYm9hcmREYXRhKXtjb25zdCBEPXEkKGYpO2wuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixN''@;'; put 'put ''KSxsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixbUmdlLERdLmpvaW4oIiIpKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJUZXh0IixNKTt0aGlzLmhvdC5lbXB0eVNlbGVjdGVkQ2Vs''@;'; put 'put ''bHMoIkNvcHlQYXN0ZS5jdXQiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDdXQiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyl9fW9uUGFzdGUobCl7Y29uc3QgYT1sLmNvbXBvc2VkUGF0aCgpWzBdLGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPWE/''@;'; put 'put ''Lmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKTtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHwhdGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKXx8RXAoYSkmJihoJiZhIT09ZHx8IWgmJmEhPT10aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSYmIXZF''@;'; put 'put ''KGEsdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47bGV0IGY7aWYobC5wcmV2ZW50RGVmYXVsdCgpLGwmJnR5cGVvZiBsLmNsaXBib2FyZERhdGE8InUiKXtjb25zdCByZT1JTyhsLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9odG1sIikse0FERF9UQUdTOlsibWV0YSJdLEFERF9B''@;'; put 'put ''VFRSOlsiY29udGVudCJdLEZPUkNFX0JPRFk6ITB9KTtmPXJlJiYvKDx0YWJsZSl8KDxUQUJMRSkvZy50ZXN0KHJlKT9iZmUocmUsdGhpcy5ob3Qucm9vdERvY3VtZW50KS5kYXRhOmwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L3BsYWluIil9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZl''@;'; put 'put ''bnQ+InUiJiZ0eXBlb2YgdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhPCJ1IiYmKGY9dGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLmdldERhdGEoIlRleHQiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBmJiYoZj1mdW5jdGlvbiBEcnQoYyl7Y29uc3QgbD1bWyIiXV07''@;'; put 'put ''aWYoMD09PWMubGVuZ3RoKXJldHVybiBsO2xldCBoLGE9MCxkPTA7Zm9yKDtjLmxlbmd0aD4wJiZoIT09Yy5sZW5ndGg7KWlmKGg9Yy5sZW5ndGgsYy5tYXRjaChwcGUpKWM9Yy5yZXBsYWNlKHBwZSwiIiksYSs9MSxsW2RdW2FdPSIiO2Vsc2UgaWYoYy5tYXRjaChmcGUpKWM9Yy5yZXBsYWNl''@;'; put 'put ''KGZwZSwiIiksYT0wLGQrPTEsbFtkXT1bIiJdO2Vsc2V7bGV0IGY9IiI7aWYoYy5zdGFydHNXaXRoKCciJykpe2xldCB2PTAsTT0hMDtmb3IoO007KXtjb25zdCBEPWMuc2xpY2UoMCwxKTsnIic9PT1EJiYodis9MSksZis9RCwoMD09PShjPWMuc2xpY2UoMSkpLmxlbmd0aHx8Yy5tYXRjaCgv''@;'; put 'put ''XltcdFxyXG5dLykmJnYlMj09MCkmJihNPSExKX1mPWYucmVwbGFjZSgvXiIvLCIiKS5yZXBsYWNlKC8iJC8sIiIpLnJlcGxhY2UoL1siXSovZyxEPT5uZXcgQXJyYXkoTWF0aC5mbG9vcihELmxlbmd0aC8yKSkuZmlsbCgnIicpLmpvaW4oIiIpKX1lbHNle2NvbnN0IHY9Yy5tYXRjaChrcnQp''@;'; put 'put ''O2Y9dj92WzBdOiIiLGM9Yy5zbGljZShmLmxlbmd0aCl9bFtkXVthXT1mfXJldHVybiBsfShmKSksdm9pZCAwPT09Znx8ZiYmMD09PWYubGVuZ3RofHwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVQYXN0ZSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKSlyZXR1cm47Y29uc3RbdixNLEQs''@;'; put 'put ''Wl09dGhpcy5wb3B1bGF0ZVZhbHVlcyhmKTt0aGlzLmhvdC5zZWxlY3RDZWxsKHYsTSxNYXRoLm1pbih0aGlzLmhvdC5jb3VudFJvd3MoKS0xLEQpLE1hdGgubWluKHRoaXMuaG90LmNvdW50Q29scygpLTEsWikpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhc3RlIixmLHRoaXMuY29weWFi''@;'; put 'put ''bGVSYW5nZXMpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIExnZShjKXtpZihBRSgpKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYobCl7Y29uc3R7cm93OmEsY29sOmR9PWwuaGlnaGxpZ2h0LGg9dGhpcy5ob3QuZ2V0Q2VsbChhLGQsITAp''@;'; put 'put ''O2gmJloyZShoLCgpPT57dGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKGMpfSl9fWVsc2UgdGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKGMpfWZ1bmN0aW9uIFIwdChjKXtjb25zdHtyb3dzOmx9PURnZShjKTtsZXQgYT0wO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGgm''@;'; put 'put ''JiEobFtkXT49MCk7ZCsrKWErPTE7cmV0dXJue2NvbHVtbkhlYWRlcnNDb3VudDphfX1mdW5jdGlvbiBMMHQoKXtpZih0aGlzLmhvdC5pc0xpc3RlbmluZygpKXtjb25zdCBjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoYyl7Y29uc3R7cm93OmwsY29sOmF9PWMuaGlnaGxp''@;'; put 'put ''Z2h0LGQ9dGhpcy5ob3QuZ2V0Q2VsbChsLGEsITApO2QmJmskKGQpfX19ZnVuY3Rpb24gT2dlKCl7aWYodGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKGMpe2NvbnN0e3JvdzpsLGNvbDphfT1jLmhpZ2hsaWdodCxkPXRo''@;'; put 'put ''aXMuaG90LmdldENlbGwobCxhLCEwKTtudWxsIT1kJiZkLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikmJkQkKGQpfX19ZnVuY3Rpb24gTzB0KGMpe2MuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gbTB0KGMpe3JldHVybntrZXk6ImNvcHkiLG5hbWUoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHJxKX0sY2FsbGJhY2soKXtjLmNvcHlDZWxsc09ubHkoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0''@;'; put 'put ''KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLFlkKFVKLHRoaXMpJiZjLml0ZW1zLnB1c2goZnVuY3Rpb24geTB0KGMpe3JldHVybntrZXk6ImNvcHlf''@;'; put 'put ''d2l0aF9jb2x1bW5faGVhZGVycyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9rcyhsLmdldFdpZHRoKCktMSwwLDEpOjA7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShpcSxhKX0sY2FsbGJhY2soKXtjLmNvcHlXaXRoQ29sdW1uSGVhZGVy''@;'; put 'put ''cygpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0''@;'; put 'put ''aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksWWQoWkosdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiBiMHQoYyl7cmV0dXJue2tleToiY29weV93aXRoX2NvbHVtbl9ncm91cF9oZWFkZXJzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP2tzKGwuZ2V0''@;'; put 'put ''V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGFxLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpfHwhdGhpcy5nZXRTZXR0aW5ncygpLm5lc3RlZEhlYWRl''@;'; put 'put ''cnMpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLFlkKFdKLHRoaXMpJiZj''@;'; put 'put ''Lml0ZW1zLnB1c2goZnVuY3Rpb24gdjB0KGMpe3JldHVybntrZXk6ImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9rcyhsLmdldFdpZHRoKCktMSwwLDEpOjA7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBo''@;'; put 'put ''cmFzZShvcSxhKX0sY2FsbGJhY2soKXtjLmNvcHlDb2x1bW5IZWFkZXJzT25seSgpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEw''@;'; put 'put ''O2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksYy5pdGVtcy5wdXNoKGZ1bmN0aW9uIF8wdChjKXtyZXR1cm57a2V5OiJjdXQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHNxKX0sY2FsbGJh''@;'; put 'put ''Y2soKXtjLmN1dCgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5n''@;'; put 'put ''ZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSl9ZnVuY3Rpb24gUDB0KGMsbCxhLGQsaCl7WWQoTEYsdGhpcykmJihoLnZhbHVlPSEwKSxwMyhMRix0aGlzLCExKX1mdW5jdGlvbiBGMHQoKXt0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fHRoaXMuaG90''@;'; put 'put ''LmdldFNldHRpbmdzKCkuZnJhZ21lbnRTZWxlY3Rpb258fHRoaXMuc2V0Q29weWFibGVUZXh0KCl9ZnVuY3Rpb24gSDB0KCl7R2QoRmgsdGhpcyxPZ2UpLmNhbGwodGhpcyl9ZnVuY3Rpb24gTjB0KCl7R2QoRmgsdGhpcyxMMHQpLmNhbGwodGhpcyl9ZnVuY3Rpb24gVjB0KCl7R2QoRmgsdGhp''@;'; put 'put ''cyxPZ2UpLmNhbGwodGhpcyl9ZnVuY3Rpb24gUGdlKGMsbCl7cmV0dXJuYGJvcmRlcl9yb3cke2N9Y29sJHtsfWB9ZnVuY3Rpb24gWUooYyl7dmFyIGwsYTtyZXR1cm4oUGEoYy5zdGFydCl8fFBhKGMubGVmdCkpJiYoYy5zdGFydD1udWxsIT09KGw9Yy5zdGFydCkmJnZvaWQgMCE9PWw/bDpj''@;'; put 'put ''LmxlZnQpLChQYShjLmVuZCl8fFBhKGMucmlnaHQpKSYmKGMuZW5kPW51bGwhPT0oYT1jLmVuZCkmJnZvaWQgMCE9PWE/YTpjLnJpZ2h0KSxkZWxldGUgYy5sZWZ0LGRlbGV0ZSBjLnJpZ2h0LGN9ZnVuY3Rpb24gUFQoYyl7cmV0dXJuIFBhKGMuc3RhcnQpJiYoYy5sZWZ0PWMuc3RhcnQpLFBh''@;'; put 'put ''KGMuZW5kKSYmKGMucmlnaHQ9Yy5lbmQpLGN9ZnVuY3Rpb24gR0ooYyxsKXtyZXR1cm57aWQ6UGdlKGMsbCksYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjMDAwIixjb3JuZXJWaXNpYmxlOiExfSxyb3c6Yyxjb2w6bCx0b3A6e2hpZGU6ITB9LGJvdHRvbTp7aGlkZTohMH0sc3RhcnQ6e2hpZGU6''@;'; put 'put ''ITB9LGVuZDp7aGlkZTohMH19fWZ1bmN0aW9uIEZnKGMsbCl7bGV0IGE9ITE7cmV0dXJuIFluKGMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGQ9PntkLmZvckFsbCgoaCxmKT0+e2lmKGg8MHx8ZjwwKXJldHVybjtjb25zdCB2PWMuZ2V0Q2VsbE1ldGEoaCxmKS5ib3JkZXJzO2lmKHYpe2lmKCFsKXJl''@;'; put 'put ''dHVybiBhPSEwLCExO2lmKCFUdSh2W2xdLCJoaWRlIil8fCExPT09dltsXS5oaWRlKXJldHVybiBhPSEwLCExfX0pfSksYX1mdW5jdGlvbiBPRihjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj5cdTI3MTM8L3NwYW4+JHtjfWB9Y29uc3QgWjB0PW5ldyBNYXAoW1sibGVmdCIsInN0''@;'; put 'put ''YXJ0Il0sWyJyaWdodCIsImVuZCJdXSk7ZnVuY3Rpb24gWTB0KGMpe3JldHVybntrZXk6ImJvcmRlcnM6dG9wIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHhxKTtyZXR1cm4gRmcodGhpcywidG9wIikmJihsPU9GKGwpKSxsfSxjYWxsYmFjayhsLGEpe2NvbnN0IGQ9''@;'; put 'put ''RmcodGhpcywidG9wIik7Yy5wcmVwYXJlQm9yZGVyKGEsInRvcCIsZCl9fX1mdW5jdGlvbiBHMHQoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJzdGFydCI6ImVuZCI7cmV0dXJue2tleToiYm9yZGVyczpyaWdodCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShFcSk7''@;'; put 'put ''cmV0dXJuIEZnKHRoaXMsbCkmJihhPU9GKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9RmcodGhpcyxsKTtjLnByZXBhcmVCb3JkZXIoZCxsLGgpfX19ZnVuY3Rpb24gJDB0KGMpe3JldHVybntrZXk6ImJvcmRlcnM6Ym90dG9tIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVk''@;'; put 'put ''UGhyYXNlKFRxKTtyZXR1cm4gRmcodGhpcywiYm90dG9tIikmJihsPU9GKGwpKSxsfSxjYWxsYmFjayhsLGEpe2NvbnN0IGQ9RmcodGhpcywiYm90dG9tIik7Yy5wcmVwYXJlQm9yZGVyKGEsImJvdHRvbSIsZCl9fX1mdW5jdGlvbiBLMHQoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJlbmQi''@;'; put 'put ''OiJzdGFydCI7cmV0dXJue2tleToiYm9yZGVyczpsZWZ0IixuYW1lKCl7bGV0IGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEFxKTtyZXR1cm4gRmcodGhpcyxsKSYmKGE9T0YoYSkpLGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD1GZyh0aGlzLGwpO2MucHJlcGFyZUJvcmRlcihkLGwsaCl9''@;'; put 'put ''fX1mdW5jdGlvbiBxMHQoYyl7cmV0dXJue2tleToiYm9yZGVyczpub19ib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShrcSl9LGNhbGxiYWNrKGwsYSl7Yy5wcmVwYXJlQm9yZGVyKGEsIm5vQm9yZGVycyIpfSxkaXNhYmxlZCgpe3JldHVybiFGZyh0aGlz''@;'; put 'put ''KX19fWZ1bmN0aW9uIEZnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29u''@;'; put 'put ''c3QgUEY9ImN1c3RvbUJvcmRlcnMiO3ZhciAkSj1uZXcgV2Vha1NldDtjbGFzcyByMXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gWDB0KGMsbCl7KGZ1bmN0aW9uIEowdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLCRKKSxmdW5jdGlvbiBRMHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGUxdChjKXt2YXIgbD1mdW5jdGlvbiB0MXQoYyxsKXtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0''@;'; put 'put ''aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzYXZlZEJvcmRlcnMiLFtdKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUEZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTB9aXNFbmFibGVkKCl7cmV0''@;'; put 'put ''dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BGXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsbD0+RmdlKCRKLHRoaXMsaTF0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9''@;'; put 'put ''PkZnZSgkSix0aGlzLGExdCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhpZGVCb3JkZXJzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCks''@;'; put 'put ''dGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXNldEJvcmRlcnMobCxhKXtsZXQgZD1bInRvcCIsImJvdHRvbSIsInN0YXJ0IiwiZW5kIl0saD1udWxsO2EmJih0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihbYV0pLGQ9T2JqZWN0LmtleXMoYSksaD1Z''@;'; put 'put ''SihhKSk7Y29uc3Qgdj1lVCh4XyhsKSx7Y3JlYXRlQ2VsbENvb3Jkczp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKHRoaXMuaG90KSxjcmVhdGVDZWxsUmFuZ2U6dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKHRoaXMuaG90KX0pO1luKGwsTT0+e3YoTSkuZm9yQWxsKChE''@;'; put 'put ''LFopPT57WW4oZCxyZT0+e3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChELFosaCxmdW5jdGlvbiBXMHQoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1aMHQuZ2V0KGMpKSYmdm9pZCAwIT09bD9sOmN9KHJlKSl9KX0pfSksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1nZXRCb3Jk''@;'; put 'put ''ZXJzKGwpe2lmKCFBcnJheS5pc0FycmF5KGwpKXJldHVybiB0aGlzLnNhdmVkQm9yZGVycztjb25zdCBkPWVUKHhfKGwpLHtjcmVhdGVDZWxsQ29vcmRzOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLmJpbmQodGhpcy5ob3QpLGNyZWF0ZUNlbGxSYW5nZTp0aGlzLmhvdC5fY3JlYXRlQ2Vs''@;'; put 'put ''bFJhbmdlLmJpbmQodGhpcy5ob3QpfSksaD1bXTtyZXR1cm4gWW4obCxmPT57ZChmKS5mb3JBbGwoKHYsTSk9PntZbih0aGlzLnNhdmVkQm9yZGVycyxEPT57RC5yb3c9PT12JiZELmNvbD09PU0mJmgucHVzaChQVChEKSl9KX0pfSksaH1jbGVhckJvcmRlcnMobCl7bD90aGlzLnNldEJvcmRl''@;'; put 'put ''cnMobCk6KFluKHRoaXMuc2F2ZWRCb3JkZXJzLGE9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhhLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGEucm93LGEuY29sLCJib3JkZXJzIil9KSx0aGlzLnNhdmVkQm9y''@;'; put 'put ''ZGVycy5sZW5ndGg9MCl9aW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGwsYSl7dGhpcy5jaGVja1NhdmVkQm9yZGVycyhsKXx8dGhpcy5zYXZlZEJvcmRlcnMucHVzaChsKTtjb25zdCBoPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3cs''@;'; put 'put ''bC5jb2wpKTt0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGgsYSl8fHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuYWRkQ3VzdG9tU2VsZWN0aW9uKHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6aH0pfXByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQobCxhLGQsaCl7Y29uc3Qg''@;'; put 'put ''Zj10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuaG90LmNvdW50Q29scygpO2lmKGw+PWZ8fGE+PXYpcmV0dXJuO2xldCBNPUdKKGwsYSk7ZCYmKE09ZnVuY3Rpb24gajB0KGMsbCl7cmV0dXJuIFR1KGwsImJvcmRlciIpJiZsLmJvcmRlciYmKGMuYm9yZGVyPWwuYm9yZGVyKSxUdShsLCJ0''@;'; put 'put ''b3AiKSYmUGEobC50b3ApJiYobC50b3A/KHFvKGwudG9wKXx8KGwudG9wPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMudG9wPWwudG9wKToobC50b3A9e2hpZGU6ITB9LGMudG9wPWwudG9wKSksVHUobCwiYm90dG9tIikmJlBhKGwuYm90dG9tKSYmKGwuYm90dG9tPyhxbyhsLmJvdHRvbSl8''@;'; put 'put ''fChsLmJvdHRvbT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmJvdHRvbT1sLmJvdHRvbSk6KGwuYm90dG9tPXtoaWRlOiEwfSxjLmJvdHRvbT1sLmJvdHRvbSkpLFR1KGwsInN0YXJ0IikmJlBhKGwuc3RhcnQpJiYobC5zdGFydD8ocW8obC5zdGFydCl8fChsLnN0YXJ0PXt3aWR0aDoxLGNv''@;'; put 'put ''bG9yOiIjMDAwIn0pLGMuc3RhcnQ9bC5zdGFydCk6KGwuc3RhcnQ9e2hpZGU6ITB9LGMuc3RhcnQ9bC5zdGFydCkpLFR1KGwsImVuZCIpJiZQYShsLmVuZCkmJihsLmVuZD8ocW8obC5lbmQpfHwobC5lbmQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5lbmQ9bC5lbmQpOihsLmVuZD17aGlk''@;'; put 'put ''ZTohMH0sYy5lbmQ9bC5lbmQpKSxjfShNLGQpLFluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxEPT57aWYoTS5pZD09PUQuc2V0dGluZ3MuaWQpcmV0dXJuIE9iamVjdC5hc3NpZ24oRC5zZXR0aW5ncyxkKSxNLmlkPUQuc2V0dGluZ3MuaWQsTS50b3A9''@;'; put 'put ''RC5zZXR0aW5ncy50b3AsTS5ib3R0b209RC5zZXR0aW5ncy5ib3R0b20sTS5zdGFydD1ELnNldHRpbmdzLnN0YXJ0LE0uZW5kPUQuc2V0dGluZ3MuZW5kLCExfSkpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIsUFQoTSkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdz''@;'; put 'put ''KE0saCl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGwsYSl7Y29uc3QgZD1NYXRoLm1pbihsLnRvLnJvdyx0aGlzLmhvdC5jb3VudFJvd3MoKS0xKSxoPU1hdGgubWluKGwudG8uY29sLHRoaXMuaG90LmNvdW50Q29scygpLTEpO0dhKGwuZnJvbS5yb3csZCxmPT57R2EobC5m''@;'; put 'put ''cm9tLmNvbCxoLHY9Pntjb25zdCBNPUdKKGYsdik7bGV0IEQ9MDtmPT09bC5mcm9tLnJvdyYmVHUoYSwidG9wIikmJihEKz0xLE0udG9wPWEudG9wKSxmPT09bC50by5yb3cmJlR1KGEsImJvdHRvbSIpJiYoRCs9MSxNLmJvdHRvbT1hLmJvdHRvbSksdj09PWwuZnJvbS5jb2wmJlR1KGEsInN0''@;'; put 'put ''YXJ0IikmJihEKz0xLE0uc3RhcnQ9YS5zdGFydCksdj09PWwudG8uY29sJiZUdShhLCJlbmQiKSYmKEQrPTEsTS5lbmQ9YS5lbmQpLEQ+MCYmKHRoaXMuaG90LnNldENlbGxNZXRhKGYsdiwiYm9yZGVycyIsUFQoTSkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKE0pKX0pfSl9cmVt''@;'; put 'put ''b3ZlQWxsQm9yZGVycyhsLGEpe2NvbnN0IGQ9UGdlKGwsYSk7dGhpcy5zcGxpY2VCb3JkZXIoZCksdGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MoZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShsLGEsImJvcmRlcnMiKX1z''@;'; put 'put ''ZXRCb3JkZXIobCxhLGQsaCl7bGV0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKS5ib3JkZXJzO2Y9ZiYmdm9pZCAwIT09Zi5ib3JkZXI/WUooZik6R0oobCxhKSxoPyhmW2RdPXtoaWRlOiEwfSw0PT09dGhpcy5jb3VudEhpZGUoZik/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKGwsYSk6KHRo''@;'; put 'put ''aXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixQVChmKSkpKTooZltkXT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9LHRoaXMuY2hlY2tD''@;'; put 'put ''dXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixQVChmKSkpfXByZXBhcmVCb3JkZXIobCxhLGQpe1luKGwsaD0+e2xldHtzdGFydDpmLGVuZDp2fT1o''@;'; put 'put ''O2lmKGYucm93PT09di5yb3cmJmYuY29sPT09di5jb2wpIm5vQm9yZGVycyI9PT1hP3RoaXMucmVtb3ZlQWxsQm9yZGVycyhmLnJvdyxmLmNvbCk6dGhpcy5zZXRCb3JkZXIoZi5yb3csZi5jb2wsYSxkKTtlbHNlIHN3aXRjaChhKXtjYXNlIm5vQm9yZGVycyI6R2EoZi5jb2wsdi5jb2wsTT0+''@;'; put 'put ''e0dhKGYucm93LHYucm93LEQ9Pnt0aGlzLnJlbW92ZUFsbEJvcmRlcnMoRCxNKX0pfSk7YnJlYWs7Y2FzZSJ0b3AiOkdhKGYuY29sLHYuY29sLE09Pnt0aGlzLnNldEJvcmRlcihmLnJvdyxNLGEsZCl9KTticmVhaztjYXNlImJvdHRvbSI6R2EoZi5jb2wsdi5jb2wsTT0+e3RoaXMuc2V0Qm9y''@;'; put 'put ''ZGVyKHYucm93LE0sYSxkKX0pO2JyZWFrO2Nhc2Uic3RhcnQiOkdhKGYucm93LHYucm93LE09Pnt0aGlzLnNldEJvcmRlcihNLGYuY29sLGEsZCl9KTticmVhaztjYXNlImVuZCI6R2EoZi5yb3csdi5yb3csTT0+e3RoaXMuc2V0Qm9yZGVyKE0sdi5jb2wsYSxkKX0pfX0pfWNyZWF0ZUN1c3Rv''@;'; put 'put ''bUJvcmRlcnMobCl7WW4obCxhPT57Y29uc3QgZD1ZSihhKTthLnJhbmdlP3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGEucmFuZ2UsZCk6dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKGEucm93LGEuY29sLGQpfSl9Y291bnRIaWRlKGwpe2NvbnN0e3Rv''@;'; put 'put ''cDphLGJvdHRvbTpkLHN0YXJ0OmgsZW5kOmZ9PWw7cmV0dXJuIHF1KFthLGQsaCxmXSwoTSxEKT0+e2xldCBaPU07cmV0dXJuIEQmJkQuaGlkZSYmKForPTEpLFp9LDApfWNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsKXtjb25zdCBhPXlzKHRoaXMuaG90LnNlbGVjdGlvbi5o''@;'; put 'put ''aWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxkPT5kLnNldHRpbmdzLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9uc1thXS5jbGVhcigpfWNsZWFyTnVsbENlbGxSYW5nZSgpe1luKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdo''@;'; put 'put ''bGlnaHQuY3VzdG9tU2VsZWN0aW9ucywobCxhKT0+e2lmKG51bGw9PT1sLmNlbGxSYW5nZSlyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmRlc3Ryb3koKSx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMu''@;'; put 'put ''c3BsaWNlKGEsMSksITF9KX1oaWRlQm9yZGVycygpe1luKHRoaXMuc2F2ZWRCb3JkZXJzLGw9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpfSl9c3BsaWNlQm9yZGVyKGwpe2NvbnN0IGE9eXModGhpcy5zYXZl''@;'; put 'put ''ZEJvcmRlcnMsZD0+ZC5pZCkuaW5kZXhPZihsKTthPi0xJiZ0aGlzLnNhdmVkQm9yZGVycy5zcGxpY2UoYSwxKX1jaGVja1NhdmVkQm9yZGVycyhsKXtsZXQgYT0hMTtyZXR1cm4gND09PXRoaXMuY291bnRIaWRlKGwpPyh0aGlzLnNwbGljZUJvcmRlcihsLmlkKSxhPSEwKTpZbih0aGlzLnNh''@;'; put 'put ''dmVkQm9yZGVycywoaCxmKT0+e2lmKGwuaWQ9PT1oLmlkKXJldHVybiB0aGlzLnNhdmVkQm9yZGVyc1tmXT1sLGE9ITAsITF9KSxhfWNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShsLGEsZCl7bGV0IGg9ITE7cmV0dXJuIFluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGln''@;'; put 'put ''aHQuY3VzdG9tU2VsZWN0aW9ucyxmPT57aWYobC5pZD09PWYuc2V0dGluZ3MuaWQpcmV0dXJuIFluKHRoaXMuaG90LnZpZXcuX3d0LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Qm9yZGVySW5zdGFuY2VzKGYpLE09PntNLnRvZ2dsZUhpZGRlbkNsYXNzKGEsZCl9KSxoPSEwLCExfSksaH1jaGVja0N1''@;'; put 'put ''c3RvbVNlbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5jb3VudEhpZGUobCk7bGV0IGY9ITE7cmV0dXJuIDQ9PT1oPyh0aGlzLnJlbW92ZUFsbEJvcmRlcnMobC5yb3csbC5jb2wpLGY9ITApOlluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyx2PT57''@;'; put 'put ''aWYobC5pZD09PXYuc2V0dGluZ3MuaWQpcmV0dXJuIHYudmlzdWFsQ2VsbFJhbmdlPWEsdi5jb21taXQoKSxkJiZZbih0aGlzLmhvdC52aWV3Ll93dC5zZWxlY3Rpb25NYW5hZ2VyLmdldEJvcmRlckluc3RhbmNlcyh2KSxEPT57RC5jaGFuZ2VCb3JkZXJTdHlsZShkLGwpfSksZj0hMCwhMX0p''@;'; put 'put ''LGZ9Y2hhbmdlQm9yZGVyU2V0dGluZ3MoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbUEZdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGE9ZzEobCk7dGhpcy5jaGVja1NldHRpbmdzQ29oZXNpb24oYSksYS5sZW5ndGh8fCh0aGlzLnNhdmVkQm9yZGVycz1hKSx0aGlzLmNy''@;'; put 'put ''ZWF0ZUN1c3RvbUJvcmRlcnMoYSl9ZWxzZSB2b2lkIDAhPT1sJiZ0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnModGhpcy5zYXZlZEJvcmRlcnMpfWNoZWNrU2V0dGluZ3NDb2hlc2lvbihsKXtjb25zdCBhPWZ1bmN0aW9uIHowdChjKXtyZXR1cm4gYy5zb21lKGw9PlBhKGwubGVmdCl8fFBhKGwu''@;'; put 'put ''cmlnaHQpKX0obCksZD1mdW5jdGlvbiBVMHQoYyl7cmV0dXJuIGMuc29tZShsPT5QYShsLnN0YXJ0KXx8UGEobC5lbmQpKX0obCk7aWYoYSYmZCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAibGVmdCIvInJpZ2h0IiBhbmQgInN0YXJ0Ii8iZW5kIiBvcHRpb25zIHNob3VsZCBub3QgYmUgdXNlZCB0''@;'; put 'put ''b2dldGhlci4gUGxlYXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKTtpZih0aGlzLmhvdC5pc1J0bCgpJiZhKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRp''@;'; put 'put ''b24gInN0YXJ0Ii8iZW5kIi4nKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBpMXQoYyl7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQRl0mJmMuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0se2tleToiYm9yZGVycyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5z''@;'; put 'put ''bGF0ZWRQaHJhc2UoTXEpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEobCYmIWwuaXNTaW5nbGVIZWFkZXIoKSl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxzdWJtZW51OntpdGVtczpbWTB0KHRoaXMpLEcwdCh0''@;'; put 'put ''aGlzKSwkMHQodGhpcyksSzB0KHRoaXMpLHEwdCh0aGlzKV19fSl9ZnVuY3Rpb24gYTF0KCl7dGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpfWZ1bmN0aW9uIEtKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBsMXQoYyl7dmFyIGw9ZnVuY3Rpb24gYzF0KGMsbCl7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJl''@;'; put 'put ''dHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZToh''@;'; put 'put ''MCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBIZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVu''@;'; put 'put ''dCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IE5nZT0iZHJhZ1RvU2Nyb2xsIjt2YXIgcUo9bmV3IFdlYWtTZXQ7Y2xhc3MgZDF0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG8xdChjLGwpeyhmdW5jdGlvbiBzMXQo''@;'; put 'put ''YyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxxSiksS0oodGhpcywiYm91bmRhcmllcyIsbnVsbCksS0oodGhpcywi''@;'; put 'put ''Y2FsbGJhY2siLG51bGwpLEtKKHRoaXMsImxpc3RlbmluZyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBOZ2V9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTAwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtOZ2VdfWVu''@;'; put 'put ''YWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGw9PkhnZShxSix0aGlzLFZnZSkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixsPT5IZ2UocUosdGhpcyxWZ2UpLmNhbGwo''@;'; put 'put ''dGhpcyxsKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnVucmVnaXN0ZXJFdmVu''@;'; put 'put ''dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2V0Qm91bmRhcmllcygpe3RoaXMuYm91bmRhcmllcz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2xlZnQ6MCxyaWdodDp0aGlzLmhvdC5yb290V2luZG93LmlubmVyV2lkdGgsdG9wOjAs''@;'; put 'put ''Ym90dG9tOnRoaXMuaG90LnJvb3RXaW5kb3cuaW5uZXJIZWlnaHR9fXNldENhbGxiYWNrKGwpe3RoaXMuY2FsbGJhY2s9bH1jaGVjayhsLGEpe2xldCBkPTAsaD0wO2E8dGhpcy5ib3VuZGFyaWVzLnRvcD9oPWEtdGhpcy5ib3VuZGFyaWVzLnRvcDphPnRoaXMuYm91bmRhcmllcy5ib3R0b20m''@;'; put 'put ''JihoPWEtdGhpcy5ib3VuZGFyaWVzLmJvdHRvbSksbDx0aGlzLmJvdW5kYXJpZXMubGVmdD9kPWwtdGhpcy5ib3VuZGFyaWVzLmxlZnQ6bD50aGlzLmJvdW5kYXJpZXMucmlnaHQmJihkPWwtdGhpcy5ib3VuZGFyaWVzLnJpZ2h0KSx0aGlzLmNhbGxiYWNrKGQsaCl9bGlzdGVuKCl7dGhpcy5s''@;'; put 'put ''aXN0ZW5pbmc9ITB9dW5saXN0ZW4oKXt0aGlzLmxpc3RlbmluZz0hMX1pc0xpc3RlbmluZygpe3JldHVybiB0aGlzLmxpc3RlbmluZ31yZWdpc3RlckV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5ob3Q7bGV0IGE9bDtmb3IoO2E7KXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIoYS5kb2N1bWVudCwiY29udGV4dG1lbnUiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91c2V1cCIsKCk9PnRoaXMudW5saXN0ZW4oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l''@;'; put 'put ''cihhLmRvY3VtZW50LCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLGE9QjcoYSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9b25Nb3VzZU1vdmUobCl7dGhpcy5pc0xpc3RlbmluZygpJiZ0aGlzLmNoZWNrKGwuY2xpZW50WCxsLmNsaWVu''@;'; put 'put ''dFkpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFZnZShjKXtpZihIbShjKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7dGhpcy5zZXRCb3VuZGFyaWVzKGwhPT10aGlz''@;'; put 'put ''LmhvdC5yb290V2luZG93P2wuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6dm9pZCAwKSx0aGlzLnNldENhbGxiYWNrKChhLGQpPT57dmFyIGgsZjtjb25zdCB2PW51bGwhPT0oaD1sLnNjcm9sbExlZnQpJiZ2b2lkIDAhPT1oP2g6bC5zY3JvbGxYLE09bnVsbCE9PShmPWwuc2Nyb2xsVG9wKSYm''@;'; put 'put ''dm9pZCAwIT09Zj9mOmwuc2Nyb2xsWTtsLnNjcm9sbCh2KzUwKk1hdGguc2lnbihhKSxNKzIwKk1hdGguc2lnbihkKSl9KSx0aGlzLmxpc3RlbigpfWZ1bmN0aW9uIEJnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy''@;'; put 'put ''aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gWEooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHAxdChjKXt2YXIgbD1mdW5jdGlvbiBnMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl''@;'; put 'put ''XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/''@;'; put 'put ''U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0''@;'; put 'put ''aW9uIGpnZShjLGwsYSl7cmV0dXJuIGMuc2V0KHEyKGMsbCksYSksYX1mdW5jdGlvbiBxMihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIpLFNhLmdldFNpbmdsZXRvbigp''@;'; put 'put ''LnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudVNob3ciKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RXhlY3V0ZSIpO2NvbnN0IEZGPSJkcm9wZG93bk1lbnUi''@;'; put 'put ''LEZUPSJjaGFuZ2VUeXBlIixKSj1GRjt2YXIgSEY9bmV3IFdlYWtNYXAsZzM9bmV3IFdlYWtTZXQ7Y2xhc3MgTkYgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gRkZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjMwfXN0YXRpYyBnZXQgUExV''@;'; put 'put ''R0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVyblt3VCxDVCxzcyxNVCxzcyx5RixzcyxTVCxzcyxLMl19Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gaDF0KGMsbCl7QmdlKGMsbCksbC5hZGQo''@;'; put 'put ''Yyl9KHRoaXMsZzMpLFhKKHRoaXMsImNvbW1hbmRFeGVjdXRvciIsbmV3IGdnZSh0aGlzLmhvdCkpLFhKKHRoaXMsIml0ZW1zRmFjdG9yeSIsbnVsbCksWEoodGhpcywibWVudSIsbnVsbCksZnVuY3Rpb24gZjF0KGMsbCxhKXtCZ2UoYyxsKSxsLnNldChjLGEpfSh0aGlzLEhGLCExKSx0aGlz''@;'; put 'put ''LmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PnEyKGczLHRoaXMseTF0KS5jYWxsKHRoaXMsYSxkKSl9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbRkZdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVy''@;'; put 'put ''bjt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgeWdlKHRoaXMuaG90LE5GLkRFRkFVTFRfSVRFTVMpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJn''@;'; put 'put ''dW1lbnRzW3ZdO3JldHVybiBxMihnMyxsLHgxdCkuY2FsbChsLC4uLmYpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFy''@;'; put 'put ''Z3VtZW50c1t2XTtyZXR1cm4gcTIoZzMsbCxNMXQpLmNhbGwobCwuLi5mKX0pO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGRl0sZD17aXRlbXM6dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoYSl9O3RoaXMucmVnaXN0ZXJFdmVudHMoKSwiZnVuY3Rpb24iPT10eXBlb2YgYS5j''@;'; put 'put ''YWxsYmFjayYmdGhpcy5jb21tYW5kRXhlY3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2soYS5jYWxsYmFjayksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMuY2FsbE9uUGx1Z2luc1JlYWR5KCgpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRv''@;'; put 'put ''d25NZW51RGVmYXVsdE9wdGlvbnMiLGQpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhkLml0ZW1zKTtjb25zdCBoPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGEpO3RoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bmV3IHFfKHRoaXMuaG90''@;'; put 'put ''LHtjbGFzc05hbWU6Imh0RHJvcGRvd25NZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6YS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLGgpLHRoaXMubWVudS5zZXRN''@;'; put 'put ''ZW51SXRlbXMoaCksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3JlT3BlbiIsKCk9PnEyKGczLHRoaXMsXzF0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT5xMihnMyx0aGlzLHcxdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2Fs''@;'; put 'put ''SG9vaygiYWZ0ZXJTdWJtZW51T3BlbiIsZj0+cTIoZzMsdGhpcyxDMXQpLmNhbGwodGhpcyxmKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnEyKGczLHRoaXMsUzF0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gbC5leGVjdXRlQ29tbWFuZC5jYWxsKGwsLi4udil9KSxZbihoLGY9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFu''@;'; put 'put ''ZChmLmtleSxmKSl9KX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMudW5yZWdpc3Rl''@;'; put 'put ''clNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9KCk9Pntjb25zdHtoaWdobGlnaHQ6ZH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZigoZC5pc0hlYWRlcigpJiYtMT09PWQucm93fHxkLmlzQ2VsbCgpKSYmZC5j''@;'; put 'put ''b2w+PTApe3RoaXMuaG90LnNlbGVjdENvbHVtbnMoZC5jb2wsZC5jb2wsLTEpO2NvbnN0e2Zyb206aH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxmPWZGKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KSx2PXRoaXMuaG90LmdldENlbGwoLTEsaC5j''@;'; put 'put ''b2wsITApLnF1ZXJ5U2VsZWN0b3IoYC4ke0ZUfWApLE09di5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm9wZW4oe2xlZnQ6TS5sZWZ0K2YubGVmdCx0b3A6TS50b3Ardi5vZmZzZXRIZWlnaHQrZi50b3B9LHtsZWZ0Ok0ud2lkdGgscmlnaHQ6MCxhYm92ZTowLGJlbG93OjN9KSx0aGlz''@;'; put 'put ''Lm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19O3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIlNoaWZ0IiwiQWx0IiwiQXJyb3dEb3duIl0sWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxs''@;'; put 'put ''YmFjazphLHJ1bk9ubHlJZjooKT0+e3ZhciBkO2NvbnN0IGg9bnVsbD09PShkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmhpZ2hsaWdodDtyZXR1cm4gaCYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaCkmJmguaXNIZWFk''@;'; put 'put ''ZXIoKSYmIXRoaXMubWVudS5pc09wZW5lZCgpfSxjYXB0dXJlQ3RybDohMCxncm91cDpKSn0se2tleXM6W1siU2hpZnQiLCJBbHQiLCJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6YSxydW5Pbmx5SWY6KCk9Pnt2YXIgZDtjb25zdCBoPW51bGw9PT0oZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''TGFzdCgpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5oaWdobGlnaHQ7cmV0dXJuIGgmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGgpJiZoLmlzQ2VsbCgpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGdyb3VwOkpKfV0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5n''@;'; put 'put ''ZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChKSil9cmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LCJjbGljayIsbD0+cTIoZzMsdGhpcyxiMXQp''@;'; put 'put ''LmNhbGwodGhpcyxsKSl9b3BlbihsKXt2YXIgYTtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH07bnVsbCE9PShhPXRoaXMubWVudSkmJnZvaWQgMCE9PWEmJmEuaXNPcGVu''@;'; put 'put ''ZWQoKXx8KHRoaXMubWVudS5vcGVuKCksWG8oZCwoaCxmKT0+e3RoaXMubWVudS5zZXRPZmZzZXQoZixoKX0pLHRoaXMubWVudS5zZXRQb3NpdGlvbihsKSl9Y2xvc2UoKXt2YXIgbDtudWxsPT09KGw9dGhpcy5tZW51KXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpfWV4ZWN1dGVDb21tYW5kKGwp''@;'; put 'put ''e2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKGwsLi4uZCl9c2V0TGlzdGVuaW5nKCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTt0aGlzLm1lbnUuaXNPcGVuZWQoKSYmKGw/dGhpcy5tZW51LmhvdE1lbnUubGlzdGVuKCk6dGhpcy5tZW51LmhvdE1lbnUudW5saXN0ZW4oKSl9ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0''@;'; put 'put ''cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB6Z2UoYyl7Yy5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PiExfV0pfWZ1bmN0aW9uIGIxdChjKXtpZihwbyhjLnRhcmdl''@;'; put 'put ''dCxGVCkpe2NvbnN0IGw9ZkYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpLGE9Yy50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Yy5zdG9wUHJvcGFnYXRpb24oKSxqZ2UoSEYsdGhpcywhMSksdGhpcy5vcGVuKHtsZWZ0OmEubGVmdCtsLmxlZnQsdG9w''@;'; put 'put ''OmEudG9wK2MudGFyZ2V0Lm9mZnNldEhlaWdodCtsLnRvcH0se2xlZnQ6YS53aWR0aCxyaWdodDowLGFib3ZlOjAsYmVsb3c6M30pfX1mdW5jdGlvbiB5MXQoYyxsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtpZighYSlyZXR1cm47Y29uc3QgZD1hLnBhcmVudE5vZGUuY2hpbGROb2RlcyxoPUFy''@;'; put 'put ''cmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZCxhKTtpZihjPDB8fGghPT1kLmxlbmd0aC0xKXJldHVybjtjb25zdCBmPWwucXVlcnlTZWxlY3RvcihgLiR7RlR9YCk7aWYodGhpcy5lbmFibGVkJiZmKXJldHVybjtpZighdGhpcy5lbmFibGVkKXJldHVybiB2b2lkKGYmJmYucGFyZW50Tm9k''@;'; put 'put ''ZS5yZW1vdmVDaGlsZChmKSk7Y29uc3Qgdj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7di5jbGFzc05hbWU9RlQsdi50eXBlPSJidXR0b24iLHYudGFiSW5kZXg9LTEsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmKHZvKHYsW1Y3KCksbUUo''@;'; put 'put ''IiAiKV0pLHZvKGwsW0UyZSgibWVudSIpXSkpLHYub25jbGljaz1mdW5jdGlvbigpe3JldHVybiExfSxsLmZpcnN0Q2hpbGQuaW5zZXJ0QmVmb3JlKHYsbC5maXJzdENoaWxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIF8xdCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVT''@;'; put 'put ''aG93Iix0aGlzKX1mdW5jdGlvbiB3MXQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93Iix0aGlzKSxxMihnMyx0aGlzLHpnZSkuY2FsbCh0aGlzLHRoaXMubWVudSl9ZnVuY3Rpb24gQzF0KGMpe3EyKGczLHRoaXMsemdlKS5jYWxsKHRoaXMsYyl9ZnVuY3Rpb24g''@;'; put 'put ''UzF0KCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51SGlkZSIsdGhpcyl9ZnVuY3Rpb24gTTF0KGMpe3JldHVybiBmdW5jdGlvbiBtMXQoYyxsKXtyZXR1cm4gYy5nZXQocTIoYyxsKSl9KEhGLHRoaXMpP251bGw6Y31mdW5jdGlvbiB4MXQo''@;'; put 'put ''Yyl7cG8oYy50YXJnZXQsRlQpJiZqZ2UoSEYsdGhpcywhMCl9ZnVuY3Rpb24gVWdlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBFMXQoYyl7dmFyIGw9ZnVuY3Rpb24gVDF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s''@;'; put 'put ''P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31ORi5T''@;'; put 'put ''RVBBUkFUT1I9e25hbWU6c3N9O2NvbnN0IGsxdD1jbGFzcyBBMXR7Y29uc3RydWN0b3IobCl7VWdlKHRoaXMsImhvdCIsdm9pZCAwKSxVZ2UodGhpcywib3B0aW9ucyIse30pLHRoaXMuaG90PWx9c2V0T3B0aW9ucyhsKXt0aGlzLm9wdGlvbnM9bH1nZXREYXRhKCl7Y29uc3R7c3RhcnRSb3c6''@;'; put 'put ''bCxzdGFydENvbDphLGVuZFJvdzpkLGVuZENvbDpofT10aGlzLl9nZXREYXRhUmFuZ2UoKSxmPXRoaXMub3B0aW9ucyx2PVtdO3JldHVybiBHYShsLGQsTT0+e2NvbnN0IEQ9W107IWYuZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coTSl8fChHYShhLGgsWj0+eyFmLmV4cG9y''@;'; put 'put ''dEhpZGRlbkNvbHVtbnMmJnRoaXMuX2lzSGlkZGVuQ29sdW1uKFopfHxELnB1c2godGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChNLFopKX0pLHYucHVzaChEKSl9KSx2fWdldFJvd0hlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMub3B0aW9ucy5yb3dIZWFkZXJzKXtjb25zdHtzdGFydFJvdzph''@;'; put 'put ''LGVuZFJvdzpkfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxoPXRoaXMuaG90LmdldFJvd0hlYWRlcigpO0dhKGEsZCxmPT57IXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Sb3dzJiZ0aGlzLl9pc0hpZGRlblJvdyhmKXx8bC5wdXNoKGhbZl0pfSl9cmV0dXJuIGx9Z2V0Q29sdW1uSGVhZGVycygp''@;'; put 'put ''e2NvbnN0IGw9W107aWYodGhpcy5vcHRpb25zLmNvbHVtbkhlYWRlcnMpe2NvbnN0e3N0YXJ0Q29sOmEsZW5kQ29sOmR9PXRoaXMuX2dldERhdGFSYW5nZSgpLGg9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCk7R2EoYSxkLGY9PnshdGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlbkNvbHVtbnMmJnRo''@;'; put 'put ''aXMuX2lzSGlkZGVuQ29sdW1uKGYpfHxsLnB1c2goaFtmXSl9KX1yZXR1cm4gbH1fZ2V0RGF0YVJhbmdlKCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMoKS0xLGE9dGhpcy5ob3QuY291bnRSb3dzKCktMTtsZXRbZD0wLGg9MCxmPWEsdj1sXT10aGlzLm9wdGlvbnMucmFuZ2U7cmV0dXJu''@;'; put 'put ''IGQ9TWF0aC5tYXgoZCwwKSxoPU1hdGgubWF4KGgsMCksZj1NYXRoLm1pbihmLGEpLHY9TWF0aC5taW4odixsKSx7c3RhcnRSb3c6ZCxzdGFydENvbDpoLGVuZFJvdzpmLGVuZENvbDp2fX1faXNIaWRkZW5Sb3cobCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRo''@;'; put 'put ''aXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfV9pc0hpZGRlbkNvbHVtbihsKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl9fTtmdW5jdGlvbiBaZ2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEQxdChjKXt2''@;'; put 'put ''YXIgbD1mdW5jdGlvbiBJMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFFKe3N0YXRpYyBnZXQgREVGQVVMVF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L3BsYWluIixmaWxlRXh0ZW5zaW9uOiJ0eHQi''@;'; put 'put ''LGZpbGVuYW1lOiJIYW5kc29udGFibGUgW1lZWVldLVtNTV0tW0REXSIsZW5jb2Rpbmc6InV0Zi04Iixib206ITEsY29sdW1uSGVhZGVyczohMSxyb3dIZWFkZXJzOiExLGV4cG9ydEhpZGRlbkNvbHVtbnM6ITEsZXhwb3J0SGlkZGVuUm93czohMSxyYW5nZTpbXX19Y29uc3RydWN0b3IobCxh''@;'; put 'put ''KXtaZ2UodGhpcywiZGF0YVByb3ZpZGVyIix2b2lkIDApLFpnZSh0aGlzLCJvcHRpb25zIix2b2lkIDApLHRoaXMuZGF0YVByb3ZpZGVyPWwsdGhpcy5vcHRpb25zPXRoaXMuX21lcmdlT3B0aW9ucyhhKSx0aGlzLmRhdGFQcm92aWRlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyl9X21lcmdl''@;'; put 'put ''T3B0aW9ucyhsKXtsZXQgYT1uMyh0aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfT1BUSU9OUyk7Y29uc3QgZD1uZXcgRGF0ZTtyZXR1cm4gYT1FdShuMyhRSi5ERUZBVUxUX09QVElPTlMpLGEpLGE9RXUoYSxsKSxhLmZpbGVuYW1lPXAkKGEuZmlsZW5hbWUse1lZWVk6ZC5nZXRGdWxsWWVhcigp''@;'; put 'put ''LE1NOmAke2QuZ2V0TW9udGgoKSsxfWAucGFkU3RhcnQoMiwiMCIpLEREOmAke2QuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwiMCIpfSksYX19Y29uc3QgUjF0PVFKO2Z1bmN0aW9uIFdnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGVRPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIFUxdChjKXtyZXR1cm4gYy5zdGFydHNXaXRoKCI9Iil8fGMuc3RhcnRzV2l0aCgiKyIp''@;'; put 'put ''fHxjLnN0YXJ0c1dpdGgoIi0iKXx8Yy5zdGFydHNXaXRoKCJAIil8fGMuc3RhcnRzV2l0aCgiXHQiKXx8Yy5zdGFydHNXaXRoKCJcciIpP2AnJHtjfWA6Y31mdW5jdGlvbiBaMXQoYyxsKXtyZXR1cm4gbC50ZXN0KGMpP2AnJHtjfWA6Y31jb25zdCB0UT17Y3N2OmNsYXNzIHoxdCBleHRlbmRz''@;'; put 'put ''IFIxdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gTDF0KGMsbCl7KGZ1bmN0aW9uIE8xdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4g''@;'; put 'put ''b2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGVRKX1zdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpe3JldHVybnttaW1lVHlwZToidGV4dC9jc3YiLGZpbGVFeHRlbnNpb246ImNzdiIsYm9tOiEwLGNvbHVtbkRlbGltaXRlcjoiLCIscm93RGVsaW1pdGVyOiJcclxuIixzYW5pdGl6''@;'; put 'put ''ZVZhbHVlczohMX19ZXhwb3J0KCl7Y29uc3QgbD10aGlzLm9wdGlvbnMsYT10aGlzLmRhdGFQcm92aWRlci5nZXREYXRhKCk7bGV0IGQ9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Q29sdW1uSGVhZGVycygpO2NvbnN0IGg9ZC5sZW5ndGg+MCxmPXRoaXMuZGF0YVByb3ZpZGVyLmdldFJvd0hlYWRl''@;'; put 'put ''cnMoKSx2PWYubGVuZ3RoPjA7bGV0IE09bC5ib20/Ilx1ZmVmZiI6IiI7cmV0dXJuIGgmJihkPXlzKGQsRD0+dGhpcy5fZXNjYXBlQ2VsbChELHtmb3JjZTohMCxzYW5pdGl6ZVZhbHVlOmwuc2FuaXRpemVWYWx1ZXN9KSksdiYmKE0rPWwuY29sdW1uRGVsaW1pdGVyKSxNKz1kLmpvaW4obC5j''@;'; put 'put ''b2x1bW5EZWxpbWl0ZXIpLE0rPWwucm93RGVsaW1pdGVyKSxZbihhLChELFopPT57Wj4wJiYoTSs9bC5yb3dEZWxpbWl0ZXIpLHYmJihNKz10aGlzLl9lc2NhcGVDZWxsKGZbWl0se3Nhbml0aXplVmFsdWU6bC5zYW5pdGl6ZVZhbHVlc30pLE0rPWwuY29sdW1uRGVsaW1pdGVyKTtjb25zdCBy''@;'; put 'put ''ZT1ELm1hcChjZT0+dGhpcy5fZXNjYXBlQ2VsbChjZSx7c2FuaXRpemVWYWx1ZTpsLnNhbml0aXplVmFsdWVzfSkpLmpvaW4obC5jb2x1bW5EZWxpbWl0ZXIpO00rPXJlfSksTX1fZXNjYXBlQ2VsbChsKXtsZXR7Zm9yY2U6YT0hMSxzYW5pdGl6ZVZhbHVlOmQ9ITF9PWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxoPWxjKGwpO3JldHVybiIiPT09aHx8KGQmJihhPSEwKSxkIGluc3RhbmNlb2YgUmVnRXhwP2g9V2dlKGVRLHRoaXMsWjF0KS5jYWxsKHRoaXMsaCxkKToiZnVuY3Rpb24iPT10eXBlb2YgZD9oPWQoaCk6ZCYmKGg9''@;'; put 'put ''V2dlKGVRLHRoaXMsVTF0KS5jYWxsKHRoaXMsaCkpLChhfHxoLmluZGV4T2YoIlxyIik+PTB8fGguaW5kZXhPZignIicpPj0wfHxoLmluZGV4T2YoIlxuIik+PTB8fGguaW5kZXhPZih0aGlzLm9wdGlvbnMuY29sdW1uRGVsaW1pdGVyKT49MCkmJihoPWgucmVwbGFjZShuZXcgUmVnRXhwKCci''@;'; put 'put ''JywiZyIpLCciIicpLGg9YCIke2h9ImApKSxofX19O2NsYXNzIHExdCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJleHBvcnRGaWxlIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNDB9aXNFbmFibGVkKCl7cmV0dXJuITB9ZXhwb3J0QXNT''@;'; put 'put ''dHJpbmcobCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pLmV4cG9ydCgpfWV4cG9ydEFzQmxvYihsKXtyZXR1cm4gdGhpcy5fY3JlYXRlQmxvYih0aGlzLl9jcmVhdGVU''@;'; put 'put ''eXBlRm9ybWF0dGVyKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KSl9ZG93bmxvYWRGaWxlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdHtyb290''@;'; put 'put ''RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuaG90LGY9dGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGEpLHY9dGhpcy5fY3JlYXRlQmxvYihmKSxNPWguVVJMfHxoLndlYmtpdFVSTCxEPWQuY3JlYXRlRWxlbWVudCgiYSIpLFo9YCR7Zi5vcHRpb25zLmZpbGVuYW1lfS4ke2Yub3B0''@;'; put 'put ''aW9ucy5maWxlRXh0ZW5zaW9ufWA7aWYodm9pZCAwIT09RC5kb3dubG9hZCl7Y29uc3QgcmU9TS5jcmVhdGVPYmplY3RVUkwodik7RC5zdHlsZS5kaXNwbGF5PSJub25lIixELnNldEF0dHJpYnV0ZSgiaHJlZiIscmUpLEQuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsWiksZC5ib2R5LmFwcGVu''@;'; put 'put ''ZENoaWxkKEQpLEQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgiY2xpY2siKSksZC5ib2R5LnJlbW92ZUNoaWxkKEQpLHNldFRpbWVvdXQoKCk9PntNLnJldm9rZU9iamVjdFVSTChyZSl9LDEwMCl9ZWxzZSBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmbmF2aWdhdG9yLm1zU2F2''@;'; put 'put ''ZU9yT3BlbkJsb2IodixaKX1fY3JlYXRlVHlwZUZvcm1hdHRlcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIXRRW2xdKXRocm93IG5ldyBFcnJvcihgRXhwb3J0IGZvcm1hdCB0eXBlICIke2x9IiBpcyBub3Qg''@;'; put 'put ''c3VwcG9ydGVkLmApO3JldHVybiBmdW5jdGlvbiBHMXQoYyxsLGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0UVtjXT9uZXcgdFFbY10obCxhKTpudWxsfShsLG5ldyBrMXQodGhpcy5ob3QpLGEpfV9jcmVhdGVCbG9iKGwpe2xldCBhPW51bGw7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYm''@;'; put 'put ''KGE9bmV3IEJsb2IoW2wuZXhwb3J0KCldLHt0eXBlOmAke2wub3B0aW9ucy5taW1lVHlwZX07Y2hhcnNldD0ke2wub3B0aW9ucy5lbmNvZGluZ31gfSkpLGF9fWZ1bmN0aW9uIG53KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBYMXQoYyl7dmFyIGw9ZnVuY3Rpb24gSjF0KGMsbCl7aWYoIm9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2''@;'; put 'put ''ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51''@;'; put 'put ''bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBIVHtjb25zdHJ1Y3RvcihsLGEpe2xldHtpZDpkLHN0YXRlbGVzczpoPSEwfT1hO253KHRoaXMsImhvdCIsdm9pZCAwKSxudyh0aGlzLCJpZCIsdm9pZCAwKSxudyh0aGlzLCJlbGVtZW50cyIs''@;'; put 'put ''W10pLG53KHRoaXMsImhpZGRlbiIsITEpLG53KHRoaXMsInN0YXRlSWQiLCIiKSxudyh0aGlzLCJzdGF0ZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMuaWQ9ZCx0aGlzLnN0YXRlSWQ9YEZpbHRlcnMuY29tcG9uZW50LiR7dGhpcy5pZH1gLHRoaXMuc3RhdGU9aD9udWxsOnRoaXMuaG90LmNv''@;'; put 'put ''bHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCxuZXcgcFApfWdldEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuZWxlbWVudHN9cmVzZXQoKXtZbih0aGlzLmVsZW1lbnRzLGw9PmwucmVzZXQoKSl9aGlkZSgpe3RoaXMuaGlkZGVuPSEwfXNob3coKXt0aGlzLmhpZGRlbj0h''@;'; put 'put ''MX1pc0hpZGRlbigpe3JldHVybiBudWxsPT09dGhpcy5ob3R8fHRoaXMuaGlkZGVufXJlc3RvcmVTdGF0ZShsKXt0aGlzLnN0YXRlJiZ0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGUuZ2V0VmFsdWVBdEluZGV4KGwpKX1zZXRTdGF0ZSgpe3Rocm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIHNldHRp''@;'; put 'put ''bmcgbG9naWMgaXMgbm90IGltcGxlbWVudGVkIil9c2F2ZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5nZXRTdGF0ZSgpKX1nZXRTdGF0ZSgpe3Rocm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIGdhdGhlcmluZyBsb2dpYyBpcyBub3QgaW1w''@;'; put 'put ''bGVtZW50ZWQiKX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQpLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCksWW4odGhpcy5lbGVtZW50cyxsPT5sLmRlc3Ryb3koKSksdGhpcy5zdGF0ZT1udWxsLHRoaXMuZWxlbWVudHM9bnVs''@;'; put 'put ''bCx0aGlzLmhvdD1udWxsfX1UbChIVCx5MSk7Y29uc3QgTlQ9e307ZnVuY3Rpb24gcjYoYyxsKXtpZighTlRbY10pdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO2NvbnN0e2NvbmRpdGlvbjphLGRlc2NyaXB0b3I6ZH09TlRbY107bGV0IGg9''@;'; put 'put ''bDtyZXR1cm4gZC5pbnB1dFZhbHVlc0RlY29yYXRvciYmKGg9ZC5pbnB1dFZhbHVlc0RlY29yYXRvcihoKSksZnVuY3Rpb24oZil7cmV0dXJuIGEuYXBwbHkoZi5tZXRhLmluc3RhbmNlLFtdLmNvbmNhdChbZl0sW2hdKSl9fWZ1bmN0aW9uIHc5KGMpe2lmKCFOVFtjXSl0aHJvdyBFcnJvcihg''@;'; put 'put ''RmlsdGVyIGNvbmRpdGlvbiAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIE5UW2NdLmRlc2NyaXB0b3J9ZnVuY3Rpb24ga3UoYyxsLGEpe2Eua2V5PWMsTlRbY109e2NvbmRpdGlvbjpsLGRlc2NyaXB0b3I6YX19Y29uc3QgRTA9Im5vbmUiO2t1KEUwLGZ1bmN0aW9uIFExdCgpe3Jl''@;'; put 'put ''dHVybiEwfSx7bmFtZTp3UCxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITF9KTtjb25zdCBWVD0iZW1wdHkiO2t1KFZULGZ1bmN0aW9uIGVkdChjKXtyZXR1cm4gVWMoYy52YWx1ZSl9LHtuYW1lOkZxLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFZGPSJub3Rf''@;'; put 'put ''ZW1wdHkiO2t1KFZGLGZ1bmN0aW9uIHRkdChjLGwpe3JldHVybiFyNihWVCxsKShjKX0se25hbWU6SHEsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgQlQ9ImVxIjtrdShCVCxmdW5jdGlvbiBuZHQoYyxsKXtsZXRbYV09bDtyZXR1cm4gbGMoYy52YWx1ZSkudG9Mb2Nh''@;'; put 'put ''bGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSk9PT1sYyhhKX0se25hbWU6TnEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgQkY9Im5lcSI7a3UoQkYsZnVuY3Rpb24gcmR0KGMsbCl7cmV0dXJuIXI2KEJULGwpKGMpfSx7bmFtZTpWcSxpbnB1dHNDb3VudDoxLHNob3dP''@;'; put 'put ''cGVyYXRvcnM6ITB9KSxrdSgiZ3QiLGZ1bmN0aW9uIGlkdChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZT5kfSx7bmFtZTpacSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxrdSgiZ3Rl''@;'; put 'put ''IixmdW5jdGlvbiBhZHQoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU+PWR9LHtuYW1lOldxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGt1KCJsdCIsZnVuY3Rpb24gb2R0KGMsbCl7''@;'; put 'put ''bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPGR9LHtuYW1lOllxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGt1KCJsdGUiLGZ1bmN0aW9uIHNkdChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4i''@;'; put 'put ''bnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZTw9ZH0se25hbWU6R3EsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgblE9ImRhdGVfYWZ0ZXIiO2t1KG5RLGZ1bmN0aW9uIGxkdChjLGwpe2xldFthXT1sO2NvbnN0IGQ9T28o''@;'; put 'put ''Yy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCksaD1PbyhhLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hKCFkLmlzVmFsaWQoKXx8IWguaXNWYWxpZCgpKSYmZC5kaWZmKGgpPj0wfSx7bmFtZTpxcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCByUT0iZGF0ZV9iZWZv''@;'; put 'put ''cmUiO2t1KHJRLGZ1bmN0aW9uIGNkdChjLGwpe2xldFthXT1sO2NvbnN0IGQ9T28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCksaD1PbyhhLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hKCFkLmlzVmFsaWQoKXx8IWguaXNWYWxpZCgpKSYmZC5kaWZmKGgpPD0wfSx7bmFtZTpYcSxpbnB1''@;'; put 'put ''dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBqRj0iYmV0d2VlbiI7a3UoakYsZnVuY3Rpb24gdWR0KGMsbCl7bGV0W2EsZF09bCxoPWEsZj1kO2lmKCJudW1lcmljIj09PWMubWV0YS50eXBlKXtjb25zdCB2PXBhcnNlRmxvYXQoaCwxMCksTT1wYXJzZUZsb2F0KGYsMTApO2g9''@;'; put 'put ''TWF0aC5taW4odixNKSxmPU1hdGgubWF4KHYsTSl9ZWxzZSBpZigiZGF0ZSI9PT1jLm1ldGEudHlwZSl7Y29uc3Qgdj1yNihyUSxbZl0pLE09cjYoblEsW2hdKTtyZXR1cm4gdihjKSYmTShjKX1yZXR1cm4gYy52YWx1ZT49aCYmYy52YWx1ZTw9Zn0se25hbWU6JHEsaW5wdXRzQ291bnQ6Mixz''@;'; put 'put ''aG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgWGdlPSJub3RfYmV0d2VlbiI7a3UoWGdlLGZ1bmN0aW9uIGRkdChjLGwpe3JldHVybiFyNihqRixsKShjKX0se25hbWU6S3EsaW5wdXRzQ291bnQ6MixzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgSmdlPSJiZWdpbnNfd2l0aCI7a3UoSmdlLGZ1bmN0''@;'; put 'put ''aW9uIGhkdChjLGwpe2xldFthXT1sO3JldHVybiBsYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5zdGFydHNXaXRoKGxjKGEpKX0se25hbWU6QnEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksa3UoImVuZHNfd2l0aCIsZnVuY3Rpb24gZmR0KGMs''@;'; put 'put ''bCl7bGV0W2FdPWw7cmV0dXJuIGxjKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLmVuZHNXaXRoKGxjKGEpKX0se25hbWU6anEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgaVE9ImNvbnRhaW5zIjtrdShpUSxmdW5jdGlvbiBwZHQoYyxs''@;'; put 'put ''KXtsZXRbYV09bDtyZXR1cm4gbGMoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuaW5kZXhPZihsYyhhKSk+PTB9LHtuYW1lOnpxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGU1ZT0ibm90X2NvbnRhaW5zIjtrdShlNWUsZnVuY3Rpb24g''@;'; put 'put ''Z2R0KGMsbCl7cmV0dXJuIXI2KGlRLGwpKGMpfSx7bmFtZTpVcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB0NWU9ImRhdGVfdG9tb3Jyb3ciO2t1KHQ1ZSxmdW5jdGlvbiBtZHQoYyl7Y29uc3QgbD1PbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4h''@;'; put 'put ''IWwuaXNWYWxpZCgpJiZsLmlzU2FtZShPbygpLnN1YnRyYWN0KC0xLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6UXEsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IG41ZT0iZGF0ZV90b2RheSI7a3UobjVlLGZ1bmN0aW9uIHZkdChjKXtjb25zdCBsPU9vKGMudmFsdWUsYy5tZXRh''@;'; put 'put ''LmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKE9vKCkuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6SnEsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IHI1ZT0iZGF0ZV95ZXN0ZXJkYXkiO2t1KHI1ZSxmdW5jdGlvbiBiZHQoYyl7Y29uc3QgbD1PbyhjLnZhbHVlLGMu''@;'; put 'put ''bWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShPbygpLnN1YnRyYWN0KDEsImRheXMiKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTplWCxpbnB1dHNDb3VudDowfSk7Y29uc3QgYTVlPXtudW1lcmljOltFMCxzcyxWVCxWRixzcyxCVCxCRixzcywiZ3Qi''@;'; put 'put ''LCJndGUiLCJsdCIsImx0ZSIsakYsWGdlXSx0ZXh0OltFMCxzcyxWVCxWRixzcyxCVCxCRixzcyxKZ2UsImVuZHNfd2l0aCIsc3MsaVEsZTVlXSxkYXRlOltFMCxzcyxWVCxWRixzcyxCVCxCRixzcyxyUSxuUSxqRixzcyx0NWUsbjVlLHI1ZV19O2Z1bmN0aW9uIGpUKGMsbCxhKXtyZXR1cm4o''@;'; put 'put ''bD1mdW5jdGlvbiBDZHQoYyl7dmFyIGw9ZnVuY3Rpb24gU2R0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIi''@;'; put 'put ''fShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBhUT0iYnVpbHQiLG9RPSJidWlsZGluZyIsbzVlPVsiY2xpY2siLCJpbnB1dCIsImtleWRvd24iLCJrZXlw''@;'; put 'put ''cmVzcyIsImtleXVwIiwiZm9jdXMiLCJibHVyIiwiY2hhbmdlIl07Y2xhc3MgSGh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBuMyh7Y2xhc3NOYW1lOiIiLHZhbHVlOiIiLHRhZ05hbWU6ImRpdiIsY2hpbGRyZW46W10sd3JhcEl0OiEwfSl9Y29uc3RydWN0b3IobCxhKXtqVCh0aGlz''@;'; put 'put ''LCJob3QiLHZvaWQgMCksalQodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgajIodGhpcykpLGpUKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksalQodGhpcywiX2VsZW1lbnQiLHZvaWQgMCksalQodGhpcywiYnVpbGRTdGF0ZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMub3B0aW9ucz1FdShIaC5E''@;'; put 'put ''RUZBVUxUUyxhKSx0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy53cmFwSXQ/ImRpdiI6dGhpcy5vcHRpb25zLnRhZ05hbWUpfXNldFZhbHVlKGwpe3RoaXMub3B0aW9ucy52YWx1ZT1sLHRoaXMudXBkYXRlKCl9Z2V0VmFsdWUo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlfWdldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuYnVpbGRTdGF0ZT09PW9RP3RoaXMuX2VsZW1lbnQ6dGhpcy5idWlsZFN0YXRlPT09YVE/KHRoaXMudXBkYXRlKCksdGhpcy5fZWxlbWVudCk6KHRoaXMuYnVpbGRTdGF0ZT1vUSx0aGlzLmJ1aWxk''@;'; put 'put ''KCksdGhpcy5idWlsZFN0YXRlPWFRLHRoaXMuX2VsZW1lbnQpfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5idWlsZFN0YXRlPT09YVF9dHJhbnNsYXRlSWZQb3NzaWJsZShsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGwmJmwuc3RhcnRzV2l0aChxMSk/dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBo''@;'; put 'put ''cmFzZShsKTpsfWJ1aWxkKCl7Y29uc3QgbD0oYSxkKT0+e3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSxkLGg9PnRoaXMucnVuTG9jYWxIb29rcyhkLGgsdGhpcykpfTtpZih0aGlzLmJ1aWxkU3RhdGV8fCh0aGlzLmJ1aWxkU3RhdGU9b1EpLHRoaXMuX2VsZW1lbnQuc2V0''@;'; put 'put ''QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLHZvaWQgMCE9PXRoaXMub3B0aW9ucy50YWJJbmRleCYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0aGlzLm9wdGlvbnMudGFiSW5kZXgpLHZvaWQgMCE9PXRoaXMub3B0aW9ucy5yb2xlJiZ0aGlzLl9lbGVtZW50''@;'; put 'put ''LnNldEF0dHJpYnV0ZSgicm9sZSIsdGhpcy5vcHRpb25zLnJvbGUpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJlRpKHRoaXMuX2VsZW1lbnQsdGhpcy5vcHRpb25zLmNsYXNzTmFtZSksdGhpcy5vcHRpb25zLmNoaWxkcmVuLmxlbmd0aClZbih0aGlzLm9wdGlvbnMuY2hpbGRyZW4sYT0+dGhp''@;'; put 'put ''cy5fZWxlbWVudC5hcHBlbmRDaGlsZChhLmVsZW1lbnQpKTtlbHNlIGlmKHRoaXMub3B0aW9ucy53cmFwSXQpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLnRhZ05hbWUpO2Euc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITAp''@;'; put 'put ''LFhvKHRoaXMub3B0aW9ucywoZCxoKT0+e3ZvaWQgMCE9PWFbaF0mJiJjbGFzc05hbWUiIT09aCYmInRhZ05hbWUiIT09aCYmImNoaWxkcmVuIiE9PWgmJihhW2hdPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZShkKSl9KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpLFluKG81ZSxkPT5s''@;'; put 'put ''KGEsZCkpfWVsc2UgWW4obzVlLGE9PmwodGhpcy5fZWxlbWVudCxhKSl9dXBkYXRlKCl7fXJlc2V0KCl7dGhpcy5vcHRpb25zLnZhbHVlPSIiLHRoaXMudXBkYXRlKCl9c2hvdygpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSIifWhpZGUoKXt0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxh''@;'; put 'put ''eT0ibm9uZSJ9Zm9jdXMoKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlcj1udWxsLHRoaXMuaG90PW51bGwsdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZWxl''@;'; put 'put ''bWVudCksdGhpcy5fZWxlbWVudD1udWxsfX1mdW5jdGlvbiBzNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHpGKGMsbCl7cmV0dXJu''@;'; put 'put ''IGMuZ2V0KHNRKGMsbCkpfWZ1bmN0aW9uIHNRKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBv''@;'; put 'put ''YmplY3QiKX1UbChIaCx5MSk7dmFyIHJ3PW5ldyBXZWFrTWFwLGw1ZT1uZXcgV2Vha1NldDtjbGFzcyBpNiBleHRlbmRzIEhoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gbjMoe3BsYWNlaG9sZGVyOiIiLHR5cGU6InRleHQiLHRhZ05hbWU6ImlucHV0Iix0YWJJbmRleDotMX0pfWNv''@;'; put 'put ''bnN0cnVjdG9yKGwsYSl7c3VwZXIobCxFdShpNi5ERUZBVUxUUyxhKSksZnVuY3Rpb24gTWR0KGMsbCl7czVlKGMsbCksbC5hZGQoYyl9KHRoaXMsbDVlKSxmdW5jdGlvbiB4ZHQoYyxsLGEpe3M1ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMscncsdm9pZCAwKSx0aGlzLnJlZ2lzdGVySG9va3Mo''@;'; put 'put ''KX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImtleXVwIixsPT5zUShsNWUsdGhpcyxUZHQpLmNhbGwodGhpcyxsKSl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyhmdW5jdGlvbiBFZHQo''@;'; put 'put ''YyxsLGEpe2Muc2V0KHNRKGMsbCksYSl9KShydyx0aGlzLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCksVGkodGhpcy5fZWxlbWVudCwiaHRVSUlucHV0IiksVGkobCwiaHRVSUlucHV0SWNvbiIpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobCksdGhpcy51cGRhdGUoKX11cGRhdGUoKXt0''@;'; put 'put ''aGlzLmlzQnVpbHQoKSYmKHpGKHJ3LHRoaXMpLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsekYocncsdGhpcykucGxhY2Vob2xkZXI9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlciksekYocncsdGhpcykudmFsdWU9dGhpcy50cmFuc2xhdGVJZlBvc3Np''@;'; put 'put ''YmxlKHRoaXMub3B0aW9ucy52YWx1ZSkpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJnpGKHJ3LHRoaXMpLmZvY3VzKCl9fWZ1bmN0aW9uIFRkdChjKXt0aGlzLm9wdGlvbnMudmFsdWU9Yy50YXJnZXQudmFsdWV9ZnVuY3Rpb24gelQoYyxsLGEpe2M1ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rp''@;'; put 'put ''b24gYzVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBpdyhjLGwsYSl7cmV0dXJuIGMuc2V0KFVUKGMsbCksYSksYX1mdW5jdGlvbiAk''@;'; put 'put ''YyhjLGwpe3JldHVybiBjLmdldChVVChjLGwpKX1mdW5jdGlvbiBVVChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVz''@;'; put 'put ''ZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGcwPW5ldyBXZWFrTWFwLFVGPW5ldyBXZWFrTWFwLFpGPW5ldyBXZWFrTWFwLGxRPW5ldyBXZWFrTWFwLFdGPW5ldyBXZWFrTWFwLFlGPW5ldyBXZWFrU2V0O2NsYXNzIFpUIGV4dGVuZHMgSGh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBu''@;'; put 'put ''Myh7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Iix3cmFwSXQ6ITEsdGFiSW5kZXg6LTF9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsRXUoWlQuREVGQVVMVFMsYSkpLGZ1bmN0aW9uIEFkdChjLGwpe2M1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLFlGKSx6VCh0aGlzLGcwLG51bGwpLHpUKHRoaXMs''@;'; put 'put ''VUYsW10pLHpUKHRoaXMsWkYsdm9pZCAwKSx6VCh0aGlzLGxRLHZvaWQgMCkselQodGhpcyxXRix2b2lkIDApLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldE1lbnUoKXtyZXR1cm4gJGMoZzAsdGhpcyl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxIb29rKCJjbGljayIsKCk9PlVUKFlG''@;'; put 'put ''LHRoaXMsSWR0KS5jYWxsKHRoaXMpKX1zZXRJdGVtcyhsKXtpdyhVRix0aGlzLHRoaXMudHJhbnNsYXRlTmFtZXMobCkpLCRjKGcwLHRoaXMpJiYkYyhnMCx0aGlzKS5zZXRNZW51SXRlbXMoJGMoVUYsdGhpcykpfXRyYW5zbGF0ZU5hbWVzKGwpe3JldHVybiBZbihsLGE9PnthLm5hbWU9dGhp''@;'; put 'put ''cy50cmFuc2xhdGVJZlBvc3NpYmxlKGEubmFtZSl9KSxsfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxpdyhnMCx0aGlzLG5ldyBxXyh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFNlbGVjdFVJIGh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IixrZWVwSW5WaWV3cG9ydDohMSxzdGFuZGFsb25lOiEwLGNv''@;'; put 'put ''bnRhaW5lcjp0aGlzLm9wdGlvbnMubWVudUNvbnRhaW5lcn0pKSwkYyhnMCx0aGlzKS5zZXRNZW51SXRlbXMoJGMoVUYsdGhpcykpO2NvbnN0IGw9bmV3IEhoKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3RDYXB0aW9uIn0pLGE9bmV3IEhoKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0''@;'; put 'put ''VUlTZWxlY3REcm9wZG93biJ9KTtpdyhaRix0aGlzLGwpLGl3KGxRLHRoaXMsbC5lbGVtZW50KSxpdyhXRix0aGlzLGEpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJih2byhhLmVsZW1lbnQsW1Y3KCldKSx2byh0aGlzLl9lbGVtZW50LFtbInJvbGUiLCJsaXN0Ym94Il1dKSks''@;'; put 'put ''WW4oW2wsYV0sZD0+dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChkLmVsZW1lbnQpKSwkYyhnMCx0aGlzKS5hZGRMb2NhbEhvb2soInNlbGVjdCIsZD0+VVQoWUYsdGhpcyxrZHQpLmNhbGwodGhpcyxkKSksJGMoZzAsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+VVQoWUYs''@;'; put 'put ''dGhpcyxEZHQpLmNhbGwodGhpcykpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtsZXQgbDtsPXRoaXMub3B0aW9ucy52YWx1ZT90aGlzLm9wdGlvbnMudmFsdWUubmFtZTokYyhnMCx0aGlzKS5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh3UCksJGMo''@;'; put 'put ''bFEsdGhpcykudGV4dENvbnRlbnQ9bCxzdXBlci51cGRhdGUoKX1vcGVuT3B0aW9ucygpe2NvbnN0IGw9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyRjKGcwLHRoaXMpJiYoJGMoZzAsdGhpcykub3BlbigpLCRjKGcwLHRoaXMpLnNldFBvc2l0aW9uKHtsZWZ0OnRoaXMu''@;'; put 'put ''aG90LmlzTHRyKCk/bC5sZWZ0LTU6bC5sZWZ0LTMxLHRvcDpsLnRvcC0xLHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0fSksJGMoZzAsdGhpcykuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKSwkYyhnMCx0aGlzKS5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5hZGRDdXN0b21T''@;'; put 'put ''aG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6YT0+e3RoaXMuY2xvc2VPcHRpb25zKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJ0YWJLZXlkb3duIixhKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PiExfV0pKX1jbG9z''@;'; put 'put ''ZU9wdGlvbnMoKXskYyhnMCx0aGlzKSYmJGMoZzAsdGhpcykuY2xvc2UoKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZ0aGlzLmVsZW1lbnQuZm9jdXMoKX1kZXN0cm95KCl7JGMoZzAsdGhpcykmJigkYyhnMCx0aGlzKS5kZXN0cm95KCksaXcoZzAsdGhpcyxudWxsKSksJGMoWkYsdGhpcykm''@;'; put 'put ''JiRjKFpGLHRoaXMpLmRlc3Ryb3koKSwkYyhXRix0aGlzKSYmJGMoV0YsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24ga2R0KGMpe2MubmFtZSE9PXNzJiYodGhpcy5vcHRpb25zLnZhbHVlPWMsdGhpcy51cGRhdGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVj''@;'; put 'put ''dCIsdGhpcy5vcHRpb25zLnZhbHVlKSl9ZnVuY3Rpb24gRGR0KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIil9ZnVuY3Rpb24gSWR0KCl7dGhpcy5vcGVuT3B0aW9ucygpfWZ1bmN0aW9uIHU1ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gT2R0KGMpe3ZhciBsPWZ1bmN0aW9u''@;'; put 'put ''IFBkdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gZDVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgY1E9bmV3IFdlYWtTZXQ7Y2xhc3MgdVEgZXh0ZW5kcyBIVHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiExfSksZnVuY3Rpb24gUmR0KGMsbCl7''@;'; put 'put ''KGZ1bmN0aW9uIExkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGNRKSx1NWUodGhpcywibmFtZSIsIiIpLHU1''@;'; put 'put ''ZSh0aGlzLCJhZGRTZXBhcmF0b3IiLCExKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuYWRkU2VwYXJhdG9yPWEuYWRkU2VwYXJhdG9yLHRoaXMuZWxlbWVudHMucHVzaChuZXcgWlQodGhpcy5ob3Qse21lbnVDb250YWluZXI6YS5tZW51Q29udGFpbmVyfSkpLHRoaXMuZWxlbWVudHMucHVzaChu''@;'; put 'put ''ZXcgaTYodGhpcy5ob3Qse3BsYWNlaG9sZGVyOmNYfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgaTYodGhpcy5ob3Qse3BsYWNlaG9sZGVyOnVYfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soInNl''@;'; put 'put ''bGVjdCIsbD0+ZDVlKGNRLHRoaXMsRmR0KS5jYWxsKHRoaXMsbCkpLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpKS5hZGRMb2NhbEhvb2soInRhYktleWRvd24iLGw9PnRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0VGFiS2V5''@;'; put 'put ''ZG93biIsbCkpLFluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGw9PntsLmFkZExvY2FsSG9vaygia2V5ZG93biIsYT0+ZDVlKGNRLHRoaXMsSGR0KS5jYWxsKHRoaXMsYSkpfSl9c2V0U3RhdGUobCl7aWYodGhpcy5yZXNldCgpLCFsKXJldHVybjtjb25zdCBhPW4zKGwuY29tbWFuZCk7YS5u''@;'; put 'put ''YW1lLnN0YXJ0c1dpdGgoV2MpJiYoYS5uYW1lPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoYS5uYW1lKSksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYSksWW4obC5hcmdzLChkLGgpPT57aWYoaD5hLmlucHV0c0NvdW50LTEpcmV0dXJuITE7Y29uc3QgZj10aGlzLmdl''@;'; put 'put ''dElucHV0RWxlbWVudChoKTtmLnNldFZhbHVlKGQpLGZbYS5pbnB1dHNDb3VudD5oPyJzaG93IjoiaGlkZSJdKCksaHx8dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+Zi5mb2N1cygpLDEwKX0pfWdldFN0YXRlKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5nZXRWYWx1''@;'; put 'put ''ZSgpfHx3OShFMCksYT1bXTtyZXR1cm4gWW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksKGQsaCk9PntsLmlucHV0c0NvdW50PmgmJmEucHVzaChkLmdldFZhbHVlKCkpfSkse2NvbW1hbmQ6bCxhcmdzOmF9fXVwZGF0ZVN0YXRlKGwsYSl7Y29uc3QgZD13OShsP2wubmFtZTpFMCk7dGhpcy5z''@;'; put 'put ''dGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYSx7Y29tbWFuZDpkLGFyZ3M6bD9sLmFyZ3M6W119KSxsfHxZbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxoPT5oLnNldFZhbHVlKG51bGwpKX1nZXRTZWxlY3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2Vv''@;'; put 'put ''ZiBaVClbMF19Z2V0SW5wdXRFbGVtZW50KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpW2xdfWdldElucHV0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5m''@;'; put 'put ''aWx0ZXIobD0+bCBpbnN0YW5jZW9mIGk2KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZix2''@;'; put 'put ''KT0+e1RpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiIpLHRoaXMuYWRkU2VwYXJhdG9yJiZUaShhLnBhcmVudE5vZGUsImJvcmRlciIpO2NvbnN0IE09dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBUaShNLCJodEZpbHRlcnNN''@;'; put 'put ''ZW51TGFiZWwiKSxNLnRleHRDb250ZW50PXYsYS5hcHBlbmRDaGlsZChNKSxhLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxZbih0aGlzLmVsZW1lbnRzLEQ9PmEuYXBwZW5kQ2hpbGQoRC5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5n''@;'; put 'put ''ZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO2xldCBhPVt3OShFMCldO2lmKG51bGwhPT1sKXtjb25zdHt2aXN1YWxJbmRleDpkfT1sO2E9ZnVuY3Rpb24gd2R0KGMpe2NvbnN0IGw9W107bGV0IGE9YztyZXR1cm4gYTVlW2FdfHwoYT0idGV4dCIpLFluKGE1ZVthXSxk''@;'; put 'put ''PT57bGV0IGg7aD1kPT09c3M/e25hbWU6c3N9Om4zKHc5KGQpKSxsLnB1c2goaCl9KSxsfSh0aGlzLmhvdC5nZXREYXRhVHlwZSgwLGQsdGhpcy5ob3QuY291bnRSb3dzKCksZCkpfVluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGQ9PmQuaGlkZSgpKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQo''@;'; put 'put ''KS5zZXRJdGVtcyhhKSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGFbMF0pfX1mdW5jdGlvbiBGZHQoYyl7WW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksKGwsYSk9PntsW2MuaW5wdXRzQ291bnQ+YT8ic2hvdyI6ImhpZGUiXSgpLDA9PT1hJiZ0aGlz''@;'; put 'put ''LmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT5sLmZvY3VzKCksMTApfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGMpfWZ1bmN0aW9uIEhkdChjKXt1XyhjLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSxCMihjKSl9Y29uc3QgV1Q9e307ZnVu''@;'; put 'put ''Y3Rpb24gVmR0KGMpe3JldHVybiBXVFtjXS5uYW1lfWZ1bmN0aW9uIGRRKGMsbCxhKXtXVFtjXT17bmFtZTpsLGZ1bmM6YX19Y29uc3QgYTY9ImNvbmp1bmN0aW9uIjtkUShhNixyWCxmdW5jdGlvbiBqZHQoYyxsKXtyZXR1cm4gYy5ldmVyeShhPT5hLmZ1bmMobCkpfSk7Y29uc3QgR0Y9ImRp''@;'; put 'put ''c2p1bmN0aW9uIjtkUShHRixDUCxmdW5jdGlvbiBVZHQoYyxsKXtyZXR1cm4gYy5zb21lKGE9PmEuZnVuYyhsKSl9KTtjb25zdCBoUT0iZGlzanVuY3Rpb25XaXRoRXh0cmFDb25kaXRpb24iO2Z1bmN0aW9uIGg1ZShjLGwsYSl7KGZ1bmN0aW9uIFlkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gWVQoYyxsKXtyZXR1cm4gYy5nZXQocDVlKGMsbCkpfWZ1bmN0aW9uIGY1ZShjLGwsYSl7cmV0dXJu''@;'; put 'put ''IGMuc2V0KHA1ZShjLGwpLGEpLGF9ZnVuY3Rpb24gcDVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24g''@;'; put 'put ''dGhpcyBvYmplY3QiKX1kUShoUSxDUCxmdW5jdGlvbiBXZHQoYyxsKXtpZihjLmxlbmd0aDwzKXRocm93IEVycm9yKCJPcGVyYXRpb24gZG9lc24ndCB3b3JrIG9uIGxlc3MgdGhlbiB0aHJlZSBjb25kaXRpb25zLiIpO3JldHVybiBjLnNsaWNlKDAsYy5sZW5ndGgtMSkuc29tZShhPT5hLmZ1''@;'; put 'put ''bmMobCkpJiZjW2MubGVuZ3RoLTFdLmZ1bmMobCl9KTt2YXIgYXc9bmV3IFdlYWtNYXAsZlE9bmV3IFdlYWtNYXA7Y2xhc3MgJEYgZXh0ZW5kcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHt0eXBlOiJyYWRpbyIsdGFnTmFtZToiaW5wdXQiLGNsYXNzTmFtZToiaHRVSVJh''@;'; put 'put ''ZGlvIixsYWJlbDp7fX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxFdSgkRi5ERUZBVUxUUyxhKSksaDVlKHRoaXMsYXcsdm9pZCAwKSxoNWUodGhpcyxmUSx2b2lkIDApfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50''@;'; put 'put ''KCJsYWJlbCIpO2wudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCksbC5odG1sRm9yPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwuaHRtbEZvciksZjVlKGZRLHRoaXMsbCksZjVlKGF3''@;'; put 'put ''LHRoaXMsdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKSxZVChhdyx0aGlzKS5jaGVja2VkPXRoaXMub3B0aW9ucy5jaGVja2VkLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobCksdGhpcy51cGRhdGUoKX11cGRhdGUoKXt0aGlzLmlzQnVpbHQoKSYmKFlUKGZRLHRoaXMpLnRleHRDb250ZW50''@;'; put 'put ''PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwudGV4dENvbnRlbnQpKX1pc0NoZWNrZWQoKXtyZXR1cm4hIXRoaXMuaXNCdWlsdCgpJiZZVChhdyx0aGlzKS5jaGVja2VkfXNldENoZWNrZWQoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO3RoaXMuaXNCdWlsdCgpJiYoWVQoYXcsdGhpcykuY2hlY2tlZD1sKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZZVChhdyx0aGlzKS5mb2N1cygpfX12YXIgbTVlPW5ldyBXZWFrU2V0O2NsYXNzIFFkdCBleHRlbmRzIEhUe2NvbnN0cnVjdG9y''@;'; put 'put ''KGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiBHZHQoYyxsKXsoZnVuY3Rpb24gJGR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBv''@;'; put 'put ''YmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsbTVlKSxmdW5jdGlvbiBLZHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHFkdChjKXt2YXIgbD1mdW5jdGlvbiBYZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl''@;'; put 'put ''XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/''@;'; put 'put ''U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlz''@;'; put 'put ''LCJuYW1lIiwiIiksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmJ1aWxkT3BlcmF0b3JzRWxlbWVudCgpfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMu''@;'; put 'put ''aXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhKT0+KFRpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudU9wZXJhdG9ycyIpLFluKHRoaXMuZWxlbWVudHMsZD0+YS5hcHBlbmRDaGlsZChkLmVsZW1lbnQpKSxhKX19YnVpbGRPcGVyYXRvcnNFbGVtZW50KCl7Y29uc3QgbD1bYTYsR0ZdO1luKGws''@;'; put 'put ''YT0+e2NvbnN0IGQ9bmV3ICRGKHRoaXMuaG90LHtuYW1lOiJvcGVyYXRvciIsbGFiZWw6e2h0bWxGb3I6YSx0ZXh0Q29udGVudDpWZHQoYSl9LHZhbHVlOmEsY2hlY2tlZDphPT09bFswXSxpZDphfSk7ZC5hZGRMb2NhbEhvb2soImNoYW5nZSIsaD0+ZnVuY3Rpb24gSmR0KGMsbCxhKXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0obTVlLHRoaXMsZWh0KS5jYWxsKHRoaXMsaCkpLHRo''@;'; put 'put ''aXMuZWxlbWVudHMucHVzaChkKX0pfXNldENoZWNrZWQobCl7aWYodGhpcy5lbGVtZW50cy5sZW5ndGg8bCl0aHJvdyBFcnJvcihnbGBSYWRpbyBidXR0b24gd2l0aCBpbmRleCAke2x9IGRvZXNuJ3QgZXhpc3QuYCk7WW4odGhpcy5lbGVtZW50cywoYSxkKT0+e2Euc2V0Q2hlY2tlZChkPT09''@;'; put 'put ''bCl9KX1nZXRBY3RpdmVPcGVyYXRpb25JZCgpe2NvbnN0IGw9dGhpcy5lbGVtZW50cy5maW5kKGE9PmEgaW5zdGFuY2VvZiAkRiYmYS5pc0NoZWNrZWQoKSk7cmV0dXJuIGw/bC5nZXRWYWx1ZSgpOmE2fWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKX1zZXRT''@;'; put 'put ''dGF0ZShsKXt0aGlzLnJlc2V0KCksbCYmdGhpcy5nZXRBY3RpdmVPcGVyYXRpb25JZCgpIT09bCYmWW4odGhpcy5lbGVtZW50cyxhPT57YS5zZXRDaGVja2VkKGEuZ2V0VmFsdWUoKT09PWwpfSl9dXBkYXRlU3RhdGUoKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1swXT9hcmd1bWVudHNbMF06YTY7ZD09PWhRJiYoZD1HRiksdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZCl9cmVzZXQoKXt0aGlzLnNldENoZWNrZWQoMCl9fWZ1bmN0aW9uIGVodChjKXt0aGlzLnNldFN0YXRl''@;'; put 'put ''KGMudGFyZ2V0LnZhbHVlKX1mdW5jdGlvbiBuaHQoYyxsKXtsZXQgYT1jO3JldHVybiIiPT09YSYmKGE9YCgke2x9KWApLGF9ZnVuY3Rpb24gR1QoYyl7Y29uc3QgbD1uZXcgU2V0KGMpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbC5oYXMoYSl9fWZ1bmN0aW9uIHBRKGMpe3JldHVybiBj''@;'; put 'put ''Pz8iIn1mdW5jdGlvbiBnUShjKXtyZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGMpKS5tYXAobD0+cFEobCkpLnNvcnQoKGwsYSk9PiJudW1iZXIiPT10eXBlb2YgbCYmIm51bWJlciI9PXR5cGVvZiBhP2wtYTpsPT09YT8wOmw+YT8xOi0xKX1mdW5jdGlvbiB2NWUoYyxsLGEsZCl7Y29uc3Qg''@;'; put 'put ''aD1bXSxmPWM9PT1sO2xldCB2O3JldHVybiBmfHwodj1HVChsKSksYy5mb3JFYWNoKE09PntsZXQgRD0hMTsoZnx8dihNKSkmJihEPSEwKTtjb25zdCBaPXtjaGVja2VkOkQsdmFsdWU6TSx2aXN1YWxWYWx1ZTpuaHQoTSxhKX07ZCYmZChaKSxoLnB1c2goWil9KSxofWZ1bmN0aW9uIG1RKGMs''@;'; put 'put ''bCl7cmV0dXJuIGMuZ2V0KGI1ZShjLGwpKX1mdW5jdGlvbiBiNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2Vu''@;'; put 'put ''dCBvbiB0aGlzIG9iamVjdCIpfXEyZSgpO3ZhciAkVD1uZXcgV2Vha01hcDtjbGFzcyBLVCBleHRlbmRzIEhoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gbjMoe2hyZWY6IiMiLHRhZ05hbWU6ImEiLHRhYkluZGV4Oi0xLHJvbGU6ImJ1dHRvbiJ9KX1jb25zdHJ1Y3RvcihsLGEpe3N1''@;'; put 'put ''cGVyKGwsRXUoS1QuREVGQVVMVFMsYSkpLGZ1bmN0aW9uIHJodChjLGwsYSl7KGZ1bmN0aW9uIGlodChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShj''@;'; put 'put ''LGwpLGwuc2V0KGMsYSl9KHRoaXMsJFQsdm9pZCAwKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCksZnVuY3Rpb24gYWh0KGMsbCxhKXtjLnNldChiNWUoYyxsKSxhKX0oJFQsdGhpcyx0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYobVEoJFQsdGhpcyku''@;'; put 'put ''dGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy50ZXh0Q29udGVudCkpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJm1RKCRULHRoaXMpLmZvY3VzKCl9YWN0aXZhdGUoKXttUSgkVCx0aGlzKS5jbGljaygpfX1mdW5jdGlvbiBvdyhjLGwsYSl7eTVlKGMs''@;'; put 'put ''bCksbC5zZXQoYyxhKX1mdW5jdGlvbiB5NWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGpvKGMsbCl7cmV0dXJuIGMuZ2V0KHN3KGMs''@;'; put 'put ''bCkpfWZ1bmN0aW9uIG0zKGMsbCxhKXtyZXR1cm4gYy5zZXQoc3coYyxsKSxhKSxhfWZ1bmN0aW9uIHN3KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRl''@;'; put 'put ''IGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBfNWU9Im11bHRpcGxlU2VsZWN0Lml0ZW1Cb3giO3ZhciB2Mz1uZXcgV2Vha01hcCx1dT1uZXcgV2Vha01hcCx2UT1uZXcgV2Vha01hcCxIZz1uZXcgV2Vha01hcCxvNj1uZXcgV2Vha01hcCxzNj1uZXcgV2Vh''@;'; put 'put ''a01hcCxxVD1uZXcgV2Vha1NldDtjbGFzcyBYVCBleHRlbmRzIEhoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gbjMoe2NsYXNzTmFtZToiaHRVSU11bHRpcGxlU2VsZWN0Iix2YWx1ZTpbXX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxFdShYVC5ERUZBVUxUUyxhKSksZnVuY3Rp''@;'; put 'put ''b24gb2h0KGMsbCl7eTVlKGMsbCksbC5hZGQoYyl9KHRoaXMscVQpLG93KHRoaXMsdjMsW10pLG93KHRoaXMsdXUsdm9pZCAwKSxvdyh0aGlzLHZRLHZvaWQgMCksb3codGhpcyxIZyx2b2lkIDApLG93KHRoaXMsbzYsdm9pZCAwKSxvdyh0aGlzLHM2LHZvaWQgMCksbTMoSGcsdGhpcyxuZXcg''@;'; put 'put ''aTYodGhpcy5ob3Qse3BsYWNlaG9sZGVyOmxYLGNsYXNzTmFtZToiaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIn0pKSxtMyhvNix0aGlzLG5ldyBLVCh0aGlzLmhvdCx7dGV4dENvbnRlbnQ6aVgsY2xhc3NOYW1lOiJodFVJU2VsZWN0QWxsIn0pKSxtMyhzNix0aGlzLG5ldyBLVCh0aGlzLmhv''@;'; put 'put ''dCx7dGV4dENvbnRlbnQ6YVgsY2xhc3NOYW1lOiJodFVJQ2xlYXJBbGwifSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldEl0ZW1zQm94KCl7cmV0dXJuIGpvKHV1LHRoaXMpfXJlZ2lzdGVySG9va3MoKXtqbyhIZyx0aGlzKS5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PnN3KHFULHRoaXMs''@;'; put 'put ''bGh0KS5jYWxsKHRoaXMsbCkpLGpvKEhnLHRoaXMpLmFkZExvY2FsSG9vaygiaW5wdXQiLGw9PnN3KHFULHRoaXMsc2h0KS5jYWxsKHRoaXMsbCkpLGpvKG82LHRoaXMpLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PnN3KHFULHRoaXMsY2h0KS5jYWxsKHRoaXMsbCkpLGpvKHM2LHRoaXMpLmFk''@;'; put 'put ''ZExvY2FsSG9vaygiY2xpY2siLGw9PnN3KHFULHRoaXMsdWh0KS5jYWxsKHRoaXMsbCkpfXNldEl0ZW1zKGwpe3ZhciBhO20zKHYzLHRoaXMsbCksbnVsbD09PShhPWpvKHV1LHRoaXMpKXx8dm9pZCAwPT09YXx8YS5sb2FkRGF0YShqbyh2Myx0aGlzKSl9c2V0TG9jYWxlKGwpe20zKHZRLHRo''@;'; put 'put ''aXMsbCl9Z2V0TG9jYWxlKCl7cmV0dXJuIGpvKHZRLHRoaXMpfWdldEl0ZW1zKCl7cmV0dXJuWy4uLmpvKHYzLHRoaXMpXX1nZXRWYWx1ZSgpe3JldHVybiBmdW5jdGlvbiBoaHQoYyl7Y29uc3QgbD1bXTtyZXR1cm4gYy5mb3JFYWNoKGE9PnthLmNoZWNrZWQmJmwucHVzaChhLnZhbHVlKX0p''@;'; put 'put ''LGx9KGpvKHYzLHRoaXMpKX1nZXRTZWFyY2hJbnB1dEVsZW1lbnQoKXtyZXR1cm4gam8oSGcsdGhpcyl9Z2V0U2VsZWN0QWxsRWxlbWVudCgpe3JldHVybiBqbyhvNix0aGlzKX1nZXRDbGVhckFsbEVsZW1lbnQoKXtyZXR1cm4gam8oczYsdGhpcyl9aXNTZWxlY3RlZEFsbFZhbHVlcygpe3Jl''@;'; put 'put ''dHVybiBqbyh2Myx0aGlzKS5sZW5ndGg9PT10aGlzLmdldFZhbHVlKCkubGVuZ3RofWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3QsYT1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9bmV3IEhoKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxl''@;'; put 'put ''Y3Rpb25Db250cm9scyIsY2hpbGRyZW46W2pvKG82LHRoaXMpLGpvKHM2LHRoaXMpXX0pO3RoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoam8oSGcsdGhpcykuZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChkLmVsZW1lbnQpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSk7''@;'; put 'put ''Y29uc3QgaD1mPT57dmFyIHY7aWYoIXRoaXMuX2VsZW1lbnQpcmV0dXJuO251bGw9PT0odj1qbyh1dSx0aGlzKSl8fHZvaWQgMD09PXZ8fHYuZGVzdHJveSgpLFRpKGYsImh0VUlNdWx0aXBsZVNlbGVjdEhvdCIpLG0zKHV1LHRoaXMsbmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKGYse2RhdGE6''@;'; put 'put ''am8odjMsdGhpcyksY29sdW1uczpbe2RhdGE6ImNoZWNrZWQiLHR5cGU6ImNoZWNrYm94IixsYWJlbDp7cHJvcGVydHk6InZpc3VhbFZhbHVlIixwb3NpdGlvbjoiYWZ0ZXIifX1dLGJlZm9yZVJlbmRlcmVyOihaLHJlLGNlLGJlLEVlLEJlKT0+e1oudGl0bGU9QmUuaW5zdGFuY2UuZ2V0RGF0''@;'; put 'put ''YUF0Um93UHJvcChyZSxCZS5sYWJlbC5wcm9wZXJ0eSl9LGFmdGVyTGlzdGVuOigpPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJmb2N1cyIsdGhpcyl9LGJlZm9yZU9uQ2VsbE1vdXNlVXA6KCk9Pntqbyh1dSx0aGlzKS5saXN0ZW4oKX0sbW9kaWZ5Q29sV2lkdGg6Wj0+e2NvbnN0IHJlPWpvKHV1''@;'; put 'put ''LHRoaXMpLmNvbnRhaW5lci5zY3JvbGxXaWR0aC1mMChsKTtyZXR1cm4gdm9pZCAwIT09WiYmWjxyZT9yZTpafSxtYXhDb2xzOjEsYXV0b1dyYXBDb2w6ITAsaGVpZ2h0OjExMCxjb3B5UGFzdGU6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsZmlsbEhhbmRsZTohMSxmcmFnbWVu''@;'; put 'put ''dFNlbGVjdGlvbjoiY2VsbCIsdGFiTW92ZXM6e3JvdzoxLGNvbDowfSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLGxheW91dERpcmVjdGlvbjp0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIifSkpLGpvKHV1LHRoaXMpLmluaXQoKSx0aGlzLmhvdC5hZGRIb29r''@;'; put 'put ''KCJhZnRlclNldFRoZW1lIiwoWixyZSk9PntyZXx8am8odXUsdGhpcykudXNlVGhlbWUoWil9KTtjb25zdCBEPWpvKHV1LHRoaXMpLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKTtELnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhbIlRhYiJdKSxELnJlbW92ZVNob3J0Y3V0''@;'; put 'put ''c0J5S2V5cyhbIlNoaWZ0IiwiVGFiIl0pLEQuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOlo9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLFosdGhpcyl9LGdyb3VwOl81ZX0pLEQuYWRkU2hvcnRjdXQoe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJd''@;'; put 'put ''XSxjYWxsYmFjazpaPT57am8odXUsdGhpcykuZGVzZWxlY3RDZWxsKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixaLHRoaXMpLHRoaXMucnVuTG9jYWxIb29rcygibGlzdFRhYktleWRvd24iLFosdGhpcyl9LGdyb3VwOl81ZX0pfTtoKGEpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVv''@;'; put 'put ''dXQoKCk9PmgoYSksMTAwKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZqbyh1dSx0aGlzKS5saXN0ZW4oKX1yZXNldCgpe2pvKEhnLHRoaXMpLnJlc2V0KCksam8obzYsdGhpcykucmVzZXQoKSxqbyhzNix0aGlzKS5yZXNldCgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoam8odXUsdGhp''@;'; put 'put ''cykubG9hZERhdGEoZnVuY3Rpb24gZGh0KGMsbCl7Y29uc3QgYT1HVChsKTtyZXR1cm4gYy5tYXAoZD0+KGQuY2hlY2tlZD1hKGQudmFsdWUpLGQpKX0oam8odjMsdGhpcyksdGhpcy5vcHRpb25zLnZhbHVlKSksc3VwZXIudXBkYXRlKCkpfWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9am8o''@;'; put 'put ''dXUsdGhpcykpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSxqbyhIZyx0aGlzKS5kZXN0cm95KCksam8oczYsdGhpcykuZGVzdHJveSgpLGpvKG82LHRoaXMpLmRlc3Ryb3koKSxtMyhIZyx0aGlzLG51bGwpLG0zKHM2LHRoaXMsbnVsbCksbTMobzYsdGhpcyxudWxsKSxtMyh1dSx0aGlzLG51''@;'; put 'put ''bGwpLG0zKHYzLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBzaHQoYyl7Y29uc3QgbD1jLnRhcmdldC52YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmdldExvY2FsZSgpKTtsZXQgYTthPSIiPT09bD9bLi4uam8odjMsdGhpcyldOmpvKHYzLHRoaXMpLmZpbHRlcihk''@;'; put 'put ''PT5gJHtkLnZhbHVlfWAudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSkuaW5kZXhPZihsKT49MCksam8odXUsdGhpcykubG9hZERhdGEoYSl9ZnVuY3Rpb24gbGh0KGMpe3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsYyx0aGlzKSxJJCh1XyxjLmtleUNvZGUpKCJBUlJP''@;'; put 'put ''V19ET1dOIikmJihjLnByZXZlbnREZWZhdWx0KCksQjIoYyksam8odXUsdGhpcykubGlzdGVuKCksam8odXUsdGhpcykuc2VsZWN0Q2VsbCgwLDApKX1mdW5jdGlvbiBjaHQoYyl7Y29uc3QgbD1bXTtjLnByZXZlbnREZWZhdWx0KCksam8odXUsdGhpcykuZ2V0U291cmNlRGF0YSgpLmZvckVh''@;'; put 'put ''Y2goKGEsZCk9PnthLmNoZWNrZWQ9ITAsbC5wdXNoKFBLKGEsZClbMF0pfSksam8odXUsdGhpcykuc2V0U291cmNlRGF0YUF0Q2VsbChsKX1mdW5jdGlvbiB1aHQoYyl7Y29uc3QgbD1bXTtjLnByZXZlbnREZWZhdWx0KCksam8odXUsdGhpcykuZ2V0U291cmNlRGF0YSgpLmZvckVhY2goKGEs''@;'; put 'put ''ZCk9PnthLmNoZWNrZWQ9ITEsbC5wdXNoKFBLKGEsZClbMF0pfSksam8odXUsdGhpcykuc2V0U291cmNlRGF0YUF0Q2VsbChsKX1jb25zdCBDOT0iYnlfdmFsdWUiO2Z1bmN0aW9uIEtGKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1rdShDOSxmdW5jdGlvbiBmaHQoYyxsKXtsZXRbYV09bDtyZXR1cm4gYShjLnZhbHVlKX0se25hbWU6IkJ5IHZhbHVlIixpbnB1dHNDb3Vu''@;'; put 'put ''dDowLGlucHV0VmFsdWVzRGVjb3JhdG9yKGMpe2xldFtsXT1jO3JldHVybltHVChsKV19LHNob3dPcGVyYXRvcnM6ITF9KTt2YXIgQzVlLEpUPW5ldyBXZWFrU2V0O2NsYXNzIHlodCBleHRlbmRzIEhUe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxm''@;'; put 'put ''dW5jdGlvbiBwaHQoYyxsKXsoZnVuY3Rpb24gZ2h0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsSlQpLGZ1bmN0''@;'; put 'put ''aW9uIG1odChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdmh0KGMpe3ZhciBsPWZ1bmN0aW9uIGJodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZh''@;'; put 'put ''dWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5''@;'; put 'put ''bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVu''@;'; put 'put ''dHMucHVzaChuZXcgWFQodGhpcy5ob3QpKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PktGKEpULHRoaXMsX2h0KS5jYWxsKHRoaXMsbCkpLmFkZExvY2FsSG9vaygi''@;'; put 'put ''bGlzdFRhYktleWRvd24iLGw9PnRoaXMucnVuTG9jYWxIb29rcygibGlzdFRhYktleWRvd24iLGwpKSx0aGlzLmhvdC5hZGRIb29rKCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIsKGwsYSk9PktGKEpULHRoaXMsd2h0KS5jYWxsKHRoaXMsbCxhKSl9Z2V0RWxlbWVudHMoKXtjb25z''@;'; put 'put ''dCBsPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7cmV0dXJuW2wuZ2V0U2VhcmNoSW5wdXRFbGVtZW50KCksbC5nZXRTZWxlY3RBbGxFbGVtZW50KCksbC5nZXRDbGVhckFsbEVsZW1lbnQoKSx0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpXX1zZXRTdGF0ZShsKXtpZih0''@;'; put 'put ''aGlzLnJlc2V0KCksbCYmbC5jb21tYW5kLmtleT09PUM5KXtjb25zdCBhPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7YS5zZXRJdGVtcyhsLml0ZW1zU25hcHNob3QpLGEuc2V0VmFsdWUobC5hcmdzWzBdKSxhLnNldExvY2FsZShsLmxvY2FsZSl9fWdldFN0YXRlKCl7Y29uc3Qg''@;'; put 'put ''bD10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLGE9bC5nZXRJdGVtcygpO3JldHVybntjb21tYW5kOntrZXk6bC5pc1NlbGVjdGVkQWxsVmFsdWVzKCl8fCFhLmxlbmd0aD9FMDpDOX0sYXJnczpbbC5nZXRWYWx1ZSgpXSxpdGVtc1NuYXBzaG90OmF9fXVwZGF0ZVN0YXRlKGwpe2Nv''@;'; put 'put ''bnN0IGE9KGQsaCxmLHYsTSk9Pntjb25zdFtEXT1JbShoLGNlPT5jZS5uYW1lPT09QzkpLFo9e30scmU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShTUCk7aWYoRCl7Y29uc3QgY2U9dihkLE0pLGJlPXlzKGNlLGR0PT5kdC52YWx1ZSksRWU9bmV3IE1hcChjZS5tYXAoZHQ9PltkdC52''@;'; put 'put ''YWx1ZSx0aGlzLmhvdC5nZXRDZWxsTWV0YShkdC5tZXRhLnZpc3VhbFJvdyxkdC5tZXRhLnZpc3VhbENvbCldKSksQmU9Z1EoYmUpO2YmJihELmFyZ3NbMF09Zik7Y29uc3QgcWU9W10scnQ9djVlKEJlLEQuYXJnc1swXSxyZSxkdD0+e2R0LmNoZWNrZWQmJnFlLnB1c2goZHQudmFsdWUpLEtG''@;'; put 'put ''KEpULHRoaXMsdzVlKS5jYWxsKHRoaXMsZHQsRWUpfSk7Wi5sb2NhbGU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbHVtbikubG9jYWxlLFouYXJncz1bcWVdLFouY29tbWFuZD13OShDOSksWi5pdGVtc1NuYXBzaG90PXJ0fWVsc2UgWi5hcmdzPVtd''@;'; put 'put ''LFouY29tbWFuZD13OShFMCk7dGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoZCxaKX07YShsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbHVtbixsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdlLGwuZmlsdGVyZWRSb3dzRmFjdG9yeSksbC5k''@;'; put 'put ''ZXBlbmRlbnRDb25kaXRpb25TdGFja3MubGVuZ3RoJiZhKGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbHVtbixsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrc1swXS5jb25kaXRpb25zLGwuY29uZGl0aW9uQXJnc0NoYW5nZSxsLmZpbHRlcmVkUm93c0ZhY3RvcnksbC5lZGl0ZWRD''@;'; put 'put ''b25kaXRpb25TdGFjayl9Z2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2VvZiBYVClbMF19Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxk''@;'; put 'put ''aXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEsZCxoLGYsdik9PntUaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVWYWx1ZSIpO2NvbnN0IE09dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVy''@;'; put 'put ''biBUaShNLCJodEZpbHRlcnNNZW51TGFiZWwiKSxNLnRleHRDb250ZW50PXYsYS5hcHBlbmRDaGlsZChNKSxhLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxZbih0aGlzLmVsZW1lbnRzLEQ9PmEuYXBwZW5kQ2hpbGQoRC5lbGVtZW50KSksYX19fXJlc2V0KCl7''@;'; put 'put ''Y29uc3QgbD10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFNQKSxhPXRoaXMuX2dldENvbHVtblZpc2libGVWYWx1ZXMoKSxkPWEubWFwKEQ9PkQudmFsdWUpLGg9bmV3IE1hcChhLm1hcChEPT5bRC52YWx1ZSxELm1ldGFdKSksZj1nUShkKSx2PXY1ZShmLGYsbCxEPT57S0YoSlQsdGhp''@;'; put 'put ''cyx3NWUpLmNhbGwodGhpcyxELGgpfSk7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyh2KSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoZik7Y29uc3QgTT10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5n''@;'; put 'put ''ZXRTZWxlY3RlZENvbHVtbigpO251bGwhPT1NJiZ0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldExvY2FsZSh0aGlzLmhvdC5nZXRDZWxsTWV0YSgwLE0udmlzdWFsSW5kZXgpLmxvY2FsZSl9X2dldENvbHVtblZpc2libGVWYWx1ZXMoKXtjb25zdCBsPXRoaXMuaG90LmdldFBs''@;'; put 'put ''dWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7cmV0dXJuIG51bGw9PT1sP1tdOnlzKHRoaXMuaG90LmdldERhdGFBdENvbChsLnZpc3VhbEluZGV4KSwoYSxkKT0+KHt2YWx1ZTpwUShhKSxtZXRhOnRoaXMuaG90LmdldENlbGxNZXRhKGQsbC52aXN1YWxJbmRleCl9KSl9fWZ1''@;'; put 'put ''bmN0aW9uIF9odChjKXt1XyhjLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSxCMihjKSl9ZnVuY3Rpb24gdzVlKGMsbCl7dGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiKSYmKGMudmlzdWFsVmFsdWU9dGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIixjLnZpc3VhbFZhbHVlLGwuZ2V0KGMudmFsdWUpKSl9ZnVuY3Rpb24gd2h0KGMsbCl7cmV0dXJuIm51bWVyaWMiPT09bC50eXBlP2c0ZShjLGwpOmN9dmFyIFM1ZT1uZXcgV2Vha1NldDtjbGFzcyBRVCBleHRlbmRz''@;'; put 'put ''IEhUe3N0YXRpYyBnZXQgQlVUVE9OX09LKCl7cmV0dXJuIm9rIn1zdGF0aWMgZ2V0IEJVVFRPTl9DQU5DRUwoKXtyZXR1cm4iY2FuY2VsIn1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiEwfSksZnVuY3Rpb24gQ2h0KGMsbCl7KGZ1bmN0aW9uIFNodChjLGwp''@;'; put 'put ''e2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLFM1ZSksZnVuY3Rpb24gTWh0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB4''@;'; put 'put ''aHQoYyl7dmFyIGw9ZnVuY3Rpb24gRWh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJu''@;'; put 'put ''IGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywibmFtZSIsIiIpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBpNih0aGlzLmhvdCx7dHlwZToiYnV0''@;'; put 'put ''dG9uIix2YWx1ZTpvWCxjbGFzc05hbWU6Imh0VUlCdXR0b24gaHRVSUJ1dHRvbk9LIixpZGVudGlmaWVyOlFULkJVVFRPTl9PS30pKSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IGk2KHRoaXMuaG90LHt0eXBlOiJidXR0b24iLHZhbHVlOnNYLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0''@;'; put 'put ''dG9uQ2FuY2VsIixpZGVudGlmaWVyOlFULkJVVFRPTl9DQU5DRUx9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe1luKHRoaXMuZWxlbWVudHMsbD0+e2wuYWRkTG9jYWxIb29rKCJjbGljayIsKGEsZCk9PmZ1bmN0aW9uIFRodChjLGwsYSl7aWYoImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KFM1ZSx0aGlzLEFodCkuY2FsbCh0aGlzLGEsZCkpfSl9Z2V0TWVudUl0''@;'; put 'put ''ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4oVGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51QWN0aW9uQmFy''@;'; put 'put ''IiksWW4odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1hY2NlcHQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFjY2VwdCIpfWNhbmNlbCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIil9fWZ1bmN0aW9uIEFodChjLGwpe2wub3B0aW9ucy5pZGVudGlm''@;'; put 'put ''aWVyPT09QzVlLkJVVFRPTl9PSz90aGlzLmFjY2VwdCgpOnRoaXMuY2FuY2VsKCl9ZnVuY3Rpb24gYlEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGtodChjKXt2YXIgbD1mdW5jdGlvbiBEaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb''@;'; put 'put ''bF09YSxjfUM1ZT1RVDtjb25zdCBNNWU9IkNvbmRpdGlvbkNvbGxlY3Rpb24uZmlsdGVyaW5nU3RhdGVzIjtjbGFzcyB4NWV7Y29uc3RydWN0b3IobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtiUSh0aGlzLCJob3Qi''@;'; put 'put ''LHZvaWQgMCksYlEodGhpcywiaXNNYXBSZWdpc3RyYWJsZSIsdm9pZCAwKSxiUSh0aGlzLCJmaWx0ZXJpbmdTdGF0ZXMiLG5ldyBwUCksdGhpcy5ob3Q9bCx0aGlzLmlzTWFwUmVnaXN0cmFibGU9YSwhMD09PXRoaXMuaXNNYXBSZWdpc3RyYWJsZT90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5yZWdpc3Rlck1hcChNNWUsdGhpcy5maWx0ZXJpbmdTdGF0ZXMpOnRoaXMuZmlsdGVyaW5nU3RhdGVzLmluaXQodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkubGVu''@;'; put 'put ''Z3RofWlzTWF0Y2gobCxhKXt2YXIgZDtjb25zdCBoPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChhKSxmPW51bGwhPT0oZD1oPy5jb25kaXRpb25zKSYmdm9pZCAwIT09ZD9kOltdLHY9aD8ub3BlcmF0aW9uO3JldHVybiB0aGlzLmlzTWF0Y2hJbkNvbmRpdGlvbnMoZixs''@;'; put 'put ''LHYpfWlzTWF0Y2hJbkNvbmRpdGlvbnMobCxhKXtyZXR1cm4hbC5sZW5ndGh8fGZ1bmN0aW9uIE5kdChjKXtpZighV1RbY10pdGhyb3cgRXJyb3IoYE9wZXJhdGlvbiB3aXRoIGlkICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdCBsPVdUW2NdLmZ1bmM7cmV0dXJuIGZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7cmV0dXJuIGwoYSxkKX19KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTphNikobCxhKX1hZGRDb25kaXRpb24obCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06YTYs''@;'; put 'put ''aD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtjb25zdCBmPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCkubG9jYWxlLHY9YS5hcmdzLm1hcChyZT0+InN0cmluZyI9PXR5cGVvZiByZT9yZS50b0xvY2FsZUxvd2VyQ2FzZShmKTpyZSksTT1hLm5hbWV8fGEuY29tbWFu''@;'; put 'put ''ZC5rZXk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVBZGQiLGwpO2NvbnN0IEQ9dGhpcy5nZXRPcGVyYXRpb24obCk7aWYoRCl7aWYoRCE9PWQpdGhyb3cgRXJyb3IoZ2xgVGhlIGNvbHVtbiBvZiBpbmRleCAke2x9IGhhcyBiZWVuIGFscmVhZHkgYXBwbGllZCB3aXRoIGEgXGAke0R9XGBc''@;'; put 'put ''eDIwCiAgICAgICAgZmlsdGVyIG9wZXJhdGlvbi4gVXNlIFxgcmVtb3ZlQ29uZGl0aW9uc1xgIHRvIGNsZWFyIHRoZSBjdXJyZW50IGNvbmRpdGlvbnMgYW5kIHRoZW4gYWRkIG5ldyBvbmVzLlx4MjAKICAgICAgICBNaW5kIHRoYXQgeW91IGNhbm5vdCBtaXggZGlmZmVyZW50IHR5cGVzIG9m''@;'; put 'put ''IG9wZXJhdGlvbnMgKGZvciBpbnN0YW5jZSwgaWYgeW91IHVzZSBcYGNvbmp1bmN0aW9uXGAsXHgyMAogICAgICAgIHVzZSBpdCBjb25zZXF1ZW50bHkgZm9yIGEgcGFydGljdWxhciBjb2x1bW4pLmApfWVsc2UgaWYoX2MoV1RbZF0pKXRocm93IG5ldyBFcnJvcihnbGBVbmV4cGVjdGVkIG9w''@;'; put 'put ''ZXJhdGlvbiBuYW1lZCBcYCR7ZH1cYC4gUG9zc2libGUgb25lcyBhcmVceDIwCiAgICAgICAgXGBkaXNqdW5jdGlvblxgIGFuZCBcYGNvbmp1bmN0aW9uXGAuYCk7Y29uc3QgWj10aGlzLmdldENvbmRpdGlvbnMobCk7MD09PVoubGVuZ3RoP3RoaXMuZmlsdGVyaW5nU3RhdGVzLnNldFZhbHVl''@;'; put 'put ''QXRJbmRleChsLHtvcGVyYXRpb246ZCxjb25kaXRpb25zOlt7bmFtZTpNLGFyZ3M6dixmdW5jOnI2KE0sdil9XX0saCk6Wi5wdXNoKHtuYW1lOk0sYXJnczp2LGZ1bmM6cjYoTSx2KX0pLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJBZGQiLGwpfWdldENvbmRpdGlvbnMobCl7dmFyIGEsZDty''@;'; put 'put ''ZXR1cm4gbnVsbCE9PShhPW51bGw9PT0oZD10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgobCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNvbmRpdGlvbnMpJiZ2b2lkIDAhPT1hP2E6W119Z2V0T3BlcmF0aW9uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5maWx0''@;'; put 'put ''ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGwpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vcGVyYXRpb259Z2V0RmlsdGVyZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAobD0+e2xldFthXT1sO3JldHVybiBhfSl9Z2V0Q29sdW1uU3Rh''@;'; put 'put ''Y2tQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKS5pbmRleE9mKGwpfWV4cG9ydEFsbENvbmRpdGlvbnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLnJlZHVjZSgobCxhKT0+e2xldFtkLHtvcGVyYXRpb246aCxjb25kaXRpb25z''@;'; put 'put ''OmZ9XT1hO3JldHVybiBsLnB1c2goe2NvbHVtbjpkLG9wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Zi5tYXAodj0+e2xldHtuYW1lOk0sYXJnczpEfT12O3JldHVybntuYW1lOk0sYXJnczpbLi4uRF19fSl9KSxsfSxbXSl9aW1wb3J0QWxsQ29uZGl0aW9ucyhsKXt0aGlzLmNsZWFuKCksbC5mb3JF''@;'; put 'put ''YWNoKGE9PnthLmNvbmRpdGlvbnMuZm9yRWFjaChkPT50aGlzLmFkZENvbmRpdGlvbihhLmNvbHVtbixkKSl9KX1yZW1vdmVDb25kaXRpb25zKGwpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlUmVtb3ZlIixsKSx0aGlzLmZpbHRlcmluZ1N0YXRlcy5jbGVhclZhbHVlKGwpLHRoaXMucnVu''@;'; put 'put ''TG9jYWxIb29rcygiYWZ0ZXJSZW1vdmUiLGwpfWNsZWFuKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDbGVhbiIpLHRoaXMuZmlsdGVyaW5nU3RhdGVzLmNsZWFyKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsZWFuIil9aGFzQ29uZGl0aW9ucyhsLGEpe2NvbnN0IGQ9dGhpcy5n''@;'; put 'put ''ZXRDb25kaXRpb25zKGwpO3JldHVybiBhP2Quc29tZShoPT5oLm5hbWU9PT1hKTpkLmxlbmd0aD4wfWRlc3Ryb3koKXt0aGlzLmlzTWFwUmVnaXN0cmFibGUmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoTTVlKSx0aGlzLmZpbHRlcmluZ1N0YXRlcz1udWxsLHRo''@;'; put 'put ''aXMuY2xlYXJMb2NhbEhvb2tzKCl9fVRsKHg1ZSx5MSk7Y29uc3QgRTVlPXg1ZTtmdW5jdGlvbiBUNWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIElodChjKXt2YXIgbD1mdW5jdGlvbiBSaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb''@;'; put 'put ''bF09YSxjfWNvbnN0IEE1ZT1jbGFzcyBMaHR7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOigpPT5bXTtUNWUodGhpcywiY29uZGl0aW9uQ29sbGVjdGlvbiIsdm9pZCAwKSxUNWUodGhpcywiY29sdW1u''@;'; put 'put ''RGF0YUZhY3RvcnkiLHZvaWQgMCksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPWwsdGhpcy5jb2x1bW5EYXRhRmFjdG9yeT1hfWZpbHRlcigpe2xldCBsPVtdO3JldHVybiBZbih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0RmlsdGVyZWRDb2x1bW5zKCksKGEsZCk9PntsZXQgaD10aGlz''@;'; put 'put ''LmNvbHVtbkRhdGFGYWN0b3J5KGEpO2QmJihoPXRoaXMuX2dldEludGVyc2VjdERhdGEoaCxsKSksbD10aGlzLmZpbHRlckJ5Q29sdW1uKGEsaCl9KSxsfWZpbHRlckJ5Q29sdW1uKGwpe2NvbnN0IGQ9W107cmV0dXJuIFluKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzFdP2FyZ3VtZW50c1sxXTpbXSxoPT57dm9pZCAwIT09aCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmlzTWF0Y2goaCxsKSYmZC5wdXNoKGgpfSksZH1fZ2V0SW50ZXJzZWN0RGF0YShsLGEpe2NvbnN0IGQ9W107cmV0dXJuIFluKGEsaD0+e2NvbnN0IGY9aC5tZXRhLnZpc3VhbFJvdzt2''@;'; put 'put ''b2lkIDAhPT1sW2ZdJiYoZFtmXT1sW2ZdKX0pLGR9fTtmdW5jdGlvbiBTOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRmh0KGMpe3ZhciBsPWZ1bmN0aW9uIEhodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lm''@;'; put 'put ''KHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJp''@;'; put 'put ''bmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24g''@;'; put 'put ''eVEoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBxRj1uZXcgV2Vha1Nl''@;'; put 'put ''dDtjbGFzcyBrNWV7Y29uc3RydWN0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06KCk9PltdOyhmdW5jdGlvbiBPaHQoYyxsKXsoZnVuY3Rpb24gUGh0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLHFGKSxTOSh0aGlzLCJob3QiLHZvaWQgMCksUzkodGhpcywiY29uZGl0aW9uQ29sbGVjdGlvbiIsdm9pZCAwKSxTOSh0aGlzLCJj''@;'; put 'put ''b2x1bW5EYXRhRmFjdG9yeSIsdm9pZCAwKSxTOSh0aGlzLCJjaGFuZ2VzIixbXSksUzkodGhpcywiZ3JvdXBpbmciLCExKSxTOSh0aGlzLCJsYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbiIsLTEpLFM5KHRoaXMsImxhdGVzdE9yZGVyU3RhY2siLFtdKSx0aGlzLmhvdD1sLHRoaXMuY29uZGl0''@;'; put 'put ''aW9uQ29sbGVjdGlvbj1hLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9ZCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVSZW1vdmUiLGg9PnlRKHFGLHRoaXMsTmh0KS5jYWxsKHRoaXMsaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2so''@;'; put 'put ''ImFmdGVyUmVtb3ZlIixoPT50aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckFkZCIsaD0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9v''@;'; put 'put ''aygiYmVmb3JlQ2xlYW4iLCgpPT55UShxRix0aGlzLFZodCkuY2FsbCh0aGlzKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJDbGVhbiIsKCk9PnlRKHFGLHRoaXMsQmh0KS5jYWxsKHRoaXMpKX1ncm91cENoYW5nZXMoKXt0aGlzLmdyb3VwaW5nPSEwfWZs''@;'; put 'put ''dXNoKCl7dGhpcy5ncm91cGluZz0hMSxZbih0aGlzLmNoYW5nZXMsbD0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4obCl9KSx0aGlzLmNoYW5nZXMubGVuZ3RoPTB9dXBkYXRlU3RhdGVzQXRDb2x1bW4obCxhKXt2YXIgZD10aGlzO2lmKHRoaXMuZ3JvdXBpbmcpcmV0dXJuIHZvaWQoLTE9''@;'; put 'put ''PT10aGlzLmNoYW5nZXMuaW5kZXhPZihsKSYmdGhpcy5jaGFuZ2VzLnB1c2gobCkpO2NvbnN0IGg9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtsZXQgZj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKTstMT09''@;'; put 'put ''PWYmJihmPXRoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb24pO2NvbnN0IHY9aC5zbGljZSgwLGYpLE09aC5zbGljZShmKTtNLmxlbmd0aCYmTVswXS5jb2x1bW49PT1sJiZNLnNoaWZ0KCk7Y29uc3QgRD1ZMmUoZnVuY3Rpb24ocmUsY2Upe2xldCBiZT1hcmd1bWVudHMubGVuZ3RoPjIm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107Y29uc3QgRWU9bmV3IEU1ZShkLmhvdCwhMSksQmU9W10uY29uY2F0KHJlLGJlKTtFZS5pbXBvcnRBbGxDb25kaXRpb25zKEJlKTtjb25zdCBxZT1kLmNvbHVtbkRhdGFGYWN0b3J5KGNlKTtsZXQgcnQ7cnQ9RWUuaXNFbXB0''@;'; put 'put ''eSgpP3FlOm5ldyBBNWUoRWUsZHQ9PmQuY29sdW1uRGF0YUZhY3RvcnkoZHQpKS5maWx0ZXIoKSxydD15cyhydCxkdD0+ZHQubWV0YS52aXN1YWxSb3cpO2NvbnN0IHB0PUdUKHJ0KTtyZXR1cm4gRWUuZGVzdHJveSgpLEltKHFlLGR0PT5wdChkdC5tZXRhLnZpc3VhbFJvdykpfSkodiksWj1b''@;'; put 'put ''XS5jb25jYXQodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbmRpdGlvbnMobCkpO3RoaXMucnVuTG9jYWxIb29rcygidXBkYXRlIix7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbHVtbjpsLGNvbmRpdGlvbnM6Wn0sZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzOk0sZmlsdGVyZWRSb3dz''@;'; put 'put ''RmFjdG9yeTpELGNvbmRpdGlvbkFyZ3NDaGFuZ2U6YX0pfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLFhvKHRoaXMsKGwsYSk9Pnt0aGlzW2FdPW51bGx9KX19ZnVuY3Rpb24gTmh0KGMpe3RoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb249dGhpcy5jb25kaXRpb25Db2xs''@;'; put 'put ''ZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24oYyl9ZnVuY3Rpb24gVmh0KCl7dGhpcy5sYXRlc3RPcmRlclN0YWNrPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKX1mdW5jdGlvbiBCaHQoKXtZbih0aGlzLmxhdGVzdE9yZGVyU3RhY2ssYz0+e3RoaXMu''@;'; put 'put ''dXBkYXRlU3RhdGVzQXRDb2x1bW4oYyl9KX1UbChrNWUseTEpO2NvbnN0IGpodD1rNWUsZUE9ImZpbHRlcnMiO2Z1bmN0aW9uIF9RKGMsbCxhKXtENWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEQ1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0''@;'; put 'put ''aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gdEEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFdodChjKXt2YXIgbD1mdW5jdGlvbiBZaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNb''@;'; put 'put ''U3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJl''@;'; put 'put ''dHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZToh''@;'; put 'put ''MH0pOmNbbF09YSxjfWZ1bmN0aW9uIFhGKGMsbCxhKXtyZXR1cm4gYy5zZXQoJGQoYyxsKSxhKSxhfWZ1bmN0aW9uIFgyKGMsbCl7cmV0dXJuIGMuZ2V0KCRkKGMsbCkpfWZ1bmN0aW9uICRkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB3UT0iZmlsdGVycyIsSTVlPXdRO3ZhciBOZz1uZXcgV2Vha01hcCxDUT1uZXcgV2Vha01hcCxNOT1uZXcgV2Vha01hcCxO''@;'; put 'put ''aD1uZXcgV2Vha1NldDtjbGFzcyAkaHQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gd1F9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjUwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpEcm9wZG93bk1lbnUiLCJw''@;'; put 'put ''bHVnaW46SGlkZGVuUm93cyIsImNlbGwtdHlwZTpjaGVja2JveCJdfWNvbnN0cnVjdG9yKGwpe3ZhciBhO3N1cGVyKGwpLGE9dGhpcyxmdW5jdGlvbiBaaHQoYyxsKXtENWUoYyxsKSxsLmFkZChjKX0odGhpcyxOaCksdEEodGhpcywiZHJvcGRvd25NZW51UGx1Z2luIixudWxsKSx0QSh0aGlz''@;'; put 'put ''LCJjb25kaXRpb25Db2xsZWN0aW9uIixudWxsKSx0QSh0aGlzLCJjb25kaXRpb25VcGRhdGVPYnNlcnZlciIsbnVsbCksdEEodGhpcywiY29tcG9uZW50cyIsbmV3IE1hcChbWyJmaWx0ZXJfYnlfY29uZGl0aW9uIixudWxsXSxbImZpbHRlcl9vcGVyYXRvcnMiLG51bGxdLFsiZmlsdGVyX2J5''@;'; put 'put ''X2NvbmRpdGlvbjIiLG51bGxdLFsiZmlsdGVyX2J5X3ZhbHVlIixudWxsXSxbImZpbHRlcl9hY3Rpb25fYmFyIixudWxsXV0pKSx0QSh0aGlzLCJmaWx0ZXJzUm93c01hcCIsbnVsbCksX1EodGhpcyxOZyx2b2lkIDApLF9RKHRoaXMsQ1EsbmV3IFdlYWtTZXQpLF9RKHRoaXMsTTksW10pLHRo''@;'; put 'put ''aXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiAkZChOaCxhLHQydCkuY2FsbChhLC4uLmgpfSl9aXNFbmFibGVkKCl7''@;'; put 'put ''cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3dRXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5maWx0ZXJzUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsbmV3IHFFKSx0''@;'; put 'put ''aGlzLmRyb3Bkb3duTWVudVBsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oImRyb3Bkb3duTWVudSIpO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsZD1hJiZhLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSxoPU09PihNLmFkZExvY2Fs''@;'; put 'put ''SG9vaygiYWNjZXB0IiwoKT0+JGQoTmgsdGhpcyxSNWUpLmNhbGwodGhpcywiYWNjZXB0IikpLE0uYWRkTG9jYWxIb29rKCJjYW5jZWwiLCgpPT4kZChOaCx0aGlzLFI1ZSkuY2FsbCh0aGlzLCJjYW5jZWwiKSksTS5hZGRMb2NhbEhvb2soImNoYW5nZSIsRD0+JGQoTmgsdGhpcyxlMnQpLmNh''@;'; put 'put ''bGwodGhpcyxNLEQpKSxNKSxmPSgpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKHRYKX06YDtpZighdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpKXtjb25zdCBNPW5ldyB1USh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24iLG5hbWU6''@;'; put 'put ''ZixhZGRTZXBhcmF0b3I6ITEsbWVudUNvbnRhaW5lcjpkfSk7TS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT4kZChOaCx0aGlzLEw1ZSkuY2FsbCh0aGlzKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIsaChNKSl9aWYodGhpcy5jb21wb25lbnRzLmdl''@;'; put 'put ''dCgiZmlsdGVyX29wZXJhdG9ycyIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfb3BlcmF0b3JzIixuZXcgUWR0KHRoaXMuaG90LHtpZDoiZmlsdGVyX29wZXJhdG9ycyIsbmFtZToiT3BlcmF0b3JzIn0pKSwhdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIi''@;'; put 'put ''KSl7Y29uc3QgTT1uZXcgdVEodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbmFtZToiIixhZGRTZXBhcmF0b3I6ITAsbWVudUNvbnRhaW5lcjpkfSk7TS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT4kZChOaCx0aGlzLEw1ZSkuY2FsbCh0aGlzKSksdGhpcy5jb21w''@;'; put 'put ''b25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLGgoTSkpfWlmKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfdmFsdWUiLGgobmV3IHlodCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV92YWx1ZSIsbmFt''@;'; put 'put ''ZTooKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShuWCl9OmB9KSkpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9hY3Rpb25fYmFyIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9hY3Rpb25fYmFyIixoKG5ldyBRVCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9hY3Rp''@;'; put 'put ''b25fYmFyIixuYW1lOiJBY3Rpb24gYmFyIn0pKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9ufHwodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW5ldyBFNWUodGhpcy5ob3QpKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyfHwodGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcj1uZXcg''@;'; put 'put ''amh0KHRoaXMuaG90LHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbixNPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihNKSksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5hZGRMb2NhbEhvb2soInVwZGF0ZSIsTT0+JGQoTmgsdGhpcyxuMnQpLmNhbGwodGhpcyxNKSkpLHRoaXMuY29tcG9u''@;'; put 'put ''ZW50cy5mb3JFYWNoKE09Pk0uc2hvdygpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsRD1uZXcgQXJyYXkoTSksWj0wO1o8TTtaKyspRFtaXT1hcmd1bWVudHNbWl07cmV0dXJuICRk''@;'; put 'put ''KE5oLGwsUWh0KS5jYWxsKGwsLi4uRCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCgpPT4kZChOaCx0aGlzLEpodCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCgpPT4kZChOaCx0aGlzLHFodCkuY2FsbCh0aGlzKSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCgpPT4kZChOaCx0aGlzLFhodCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsTT0+JGQoTmgsdGhpcyxLaHQpLmNhbGwodGhpcyxNKSksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUm''@;'; put 'put ''JnRoaXMuZHJvcGRvd25NZW51UGx1Z2luJiYodGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZGlzYWJsZVBsdWdpbigpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmVuYWJsZVBsdWdpbigpKSwhWDIoTmcsdGhpcykmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmVuYWJsZWQpe2NvbnN0IE09W3tm''@;'; put 'put ''b2N1czooKT0+e2NvbnN0IFo9WDIoTmcsdGhpcykuZ2V0TWVudSgpLHJlPVouZ2V0TmF2aWdhdG9yKCksY2U9WDIoTmcsdGhpcykuZ2V0TGFzdE1lbnVQYWdlKCk7Wi5mb2N1cygpLGNlPjA/cmUuc2V0Q3VycmVudFBhZ2UoY2UpOnJlLnRvRmlyc3RJdGVtKCl9fSwuLi5BcnJheS5mcm9tKHRo''@;'; put 'put ''aXMuY29tcG9uZW50cykubWFwKFo9PntsZXRbLHJlXT1aO3JldHVybiByZS5nZXRFbGVtZW50cygpfSkuZmxhdCgpXTtYRihOZyx0aGlzLGZ1bmN0aW9uIFVodChjLGwpe2xldCBkLGE9LTE7Y29uc3QgaD1mdW5jdGlvbiB6aHQoYyl7cmV0dXJuIHdnZSh7aW5pdGlhbFBhZ2U6MCxzaXplOigp''@;'; put 'put ''PT5jLmxlbmd0aCxvbkl0ZW1TZWxlY3Q6KGEsZCk9Pntjb25zdCBoPWNbYV07cmV0dXJuIGggaW5zdGFuY2VvZiBYVD9kOiEoaC5lbGVtZW50JiYhVTcoaC5lbGVtZW50KSkmJnZvaWQgaC5mb2N1cygpfX0pfShsKSxmPWNlPT4oKT0+e2QuaXNPcGVuZWQoKSYmZC5nZXRLZXlib2FyZFNob3J0''@;'; put 'put ''Y3V0c0N0cmwoKS5saXN0ZW4oZUEpLGguc2V0Q3VycmVudFBhZ2UobC5pbmRleE9mKGNlKSl9O2Z1bmN0aW9uIHYoY2Upe2NvbnN0IGJlPWQuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCksRWU9Y2UuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCk7aC5jbGVhcigpLEVlLmFkZEN1c3RvbVNo''@;'; put 'put ''b3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxmb3J3YXJkVG9Db250ZXh0OmJlLmdldENvbnRleHQoZUEpLGNhbGxiYWNrOigpPT57Y2UuaXNTdWJNZW51KCkmJmNlLmNsb3NlKCksYmUubGlzdGVuKGVBKX19XSksIWNlLmlzU3ViTWVudSgpJiZiZS5hZGRDdXN0b21T''@;'; put 'put ''aG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6QmU9Pntjb25zdCBxZT1kLmdldE5hdmlnYXRvcigpO3FlLmdldEN1cnJlbnRQYWdlKCk+LTEmJihhPXFlLmdldEN1cnJlbnRQYWdlKCkpLHFlLmNsZWFyKCksQmUuc2hpZnRLZXk/aC50b1ByZXZpb3Vz''@;'; put 'put ''SXRlbSgpOmgudG9OZXh0SXRlbSgpfX0se2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57ZC5jbG9zZSgpfX0se2tleXM6W1siRW50ZXIiXSxbIlNwYWNlIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOkJlPT57Y29uc3QgcWU9bFtoLmdldEN1cnJlbnRQYWdlKCldO3FlIGlu''@;'; put 'put ''c3RhbmNlb2YgWlQmJihxZS5vcGVuT3B0aW9ucygpLEJlLnByZXZlbnREZWZhdWx0KCkpLHFlIGluc3RhbmNlb2YgS1QmJihxZS5hY3RpdmF0ZSgpLEJlLnByZXZlbnREZWZhdWx0KCkpLHFlIGluc3RhbmNlb2YgSGh8fEJlLnByZXZlbnREZWZhdWx0KCl9fV0sZUEpfWZ1bmN0aW9uIEQoY2Up''@;'; put 'put ''e2NlLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLGJlPT57YmUua2V5LnN0YXJ0c1dpdGgoImZpbHRlcl8iKXx8aC5jbGVhcigpfSksY2UuYWRkTG9jYWxIb29rKCJhZnRlclN1Ym1lbnVPcGVuIix2KSxjZS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsdiksZD1jZX1yZXR1''@;'; put 'put ''cm4gbC5mb3JFYWNoKGNlPT57Y2UgaW5zdGFuY2VvZiBIaCYmKGNlLmFkZExvY2FsSG9vaygiY2xpY2siLGYoY2UpKSxjZS5hZGRMb2NhbEhvb2soImZvY3VzIixmKGNlKSksY2UuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIixmKGNlKSkpfSksRChjKSx7Li4uaCxsaXN0ZW46ZnVuY3Rpb24g''@;'; put 'put ''TSgpe2QuZm9jdXMoKSxkLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbihlQSl9LHNldE1lbnU6RCxnZXRNZW51OmZ1bmN0aW9uIFooKXtyZXR1cm4gZH0sZ2V0TGFzdE1lbnVQYWdlOmZ1bmN0aW9uIHJlKCl7cmV0dXJuIGF9fX0odGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVu''@;'; put 'put ''dSxNKSk7Y29uc3QgRD1aPT57WDIoTmcsdGhpcykubGlzdGVuKCksWi5wcmV2ZW50RGVmYXVsdCgpLHVfKFoua2V5Q29kZSwiVEFCIikmJihaLnNoaWZ0S2V5P1gyKE5nLHRoaXMpLnRvUHJldmlvdXNJdGVtKCk6WDIoTmcsdGhpcykudG9OZXh0SXRlbSgpKX07dGhpcy5jb21wb25lbnRzLmdl''@;'; put 'put ''dCgiZmlsdGVyX2J5X3ZhbHVlIikuYWRkTG9jYWxIb29rKCJsaXN0VGFiS2V5ZG93biIsRCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmFkZExvY2FsSG9vaygic2VsZWN0VGFiS2V5ZG93biIsRCl9dGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVu''@;'; put 'put ''YWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbDt0aGlzLmVuYWJsZWQmJihudWxsIT09KGw9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pJiZ2b2lkIDAhPT1sJiZsLmVuYWJsZWQmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jb21w''@;'; put 'put ''b25lbnRzLmZvckVhY2goKGEsZCk9PnthLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGQsbnVsbCl9KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJN''@;'; put 'put ''YXAodGhpcy5wbHVnaW5OYW1lKSksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkFsdCIs''@;'; put 'put ''IkEiXV0sc3RvcFByb3BhZ2F0aW9uOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZCgpO3RoaXMuY2xlYXJDb25kaXRpb25zKCksdGhpcy5maWx0ZXIoKSxsJiZ0aGlzLmhvdC5zZWxlY3RDZWxscyhsKX0sZ3JvdXA6STVlfSl9dW5yZWdpc3RlclNob3J0Y3V0''@;'; put 'put ''cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEk1ZSl9YWRkQ29uZGl0aW9uKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106YTY7''@;'; put 'put ''Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oZix7Y29tbWFuZDp7a2V5OmF9LGFyZ3M6ZH0saCl9cmVtb3ZlQ29uZGl0aW9ucyhsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhp''@;'; put 'put ''cy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoYSl9Y2xlYXJDb25kaXRpb25zKGwpe2lmKHZvaWQgMD09PWwpdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmNsZWFuKCk7ZWxzZXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25D''@;'; put 'put ''b2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoYSl9fWltcG9ydENvbmRpdGlvbnMobCl7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmltcG9ydEFsbENvbmRpdGlvbnMobCl9ZXhwb3J0Q29uZGl0aW9ucygpe3JldHVybiB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0''@;'; put 'put ''aW9ucygpfWZpbHRlcigpe2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxhPXRoaXMuX2NyZWF0ZURhdGFGaWx0ZXIoKSxkPSF0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNFbXB0eSgpO2xldCBoPVtdO2NvbnN0IGY9dGhpcy5leHBvcnRDb25kaXRp''@;'; put 'put ''b25zKCksdj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRmlsdGVyIixmLFgyKE05LHRoaXMpKTtpZighMSE9PXYmJmQpe2NvbnN0IE09W107dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCksaD15cyhhLmZpbHRlcigpLFo9PloubWV0YS52''@;'; put 'put ''aXN1YWxSb3cpO2NvbnN0IEQ9R1QoaCk7R2EodGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMSxaPT57RChaKXx8TS5wdXNoKFopfSksWW4oTSxaPT57dGhpcy5maWx0ZXJzUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoWiwhMCl9KX0sITApLCFsJiYhaC5sZW5ndGgmJnRoaXMuaG90LmRlc2Vs''@;'; put 'put ''ZWN0Q2VsbCgpLFhGKE05LHRoaXMsdGhpcy5leHBvcnRDb25kaXRpb25zKCkpfWVsc2UhMT09PXZ8fGQ/dGhpcy5pbXBvcnRDb25kaXRpb25zKFgyKE05LHRoaXMpKTooWEYoTTksdGhpcyx0aGlzLmV4cG9ydENvbmRpdGlvbnMoKSksdGhpcy5maWx0ZXJzUm93c01hcC5jbGVhcigpKTt0aGlz''@;'; put 'put ''LmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZ0aGlzLmhvdC5zZWxlY3RDZWxsKGw/LTE6MCx0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5jb2wpLCExIT09diYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckZpbHRlciIsZiksdGhpcy5ob3Qudmlldy5hZGp1''@;'; put 'put ''c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKSl9Z2V0U2VsZWN0ZWRDb2x1bW4oKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGE/e3Zpc3VhbEluZGV4''@;'; put 'put ''OmEuY29sLHBoeXNpY2FsSW5kZXg6dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhLmNvbCl9Om51bGx9Z2V0RGF0YU1hcEF0Q29sdW1uKGwpe2NvbnN0IGE9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCksZD1bXTtyZXR1cm4gWW4odGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q29sKGEpLCho''@;'; put 'put ''LGYpPT57dmFyIHY7Y29uc3R7cm93Ok0sY29sOkQsdmlzdWFsQ29sOlosdmlzdWFsUm93OnJlLHR5cGU6Y2UsaW5zdGFuY2U6YmUsZGF0ZUZvcm1hdDpFZSxsb2NhbGU6QmV9PXRoaXMuaG90LmdldENlbGxNZXRhKGYsYSkscWU9bnVsbCE9PSh2PXRoaXMuaG90LmdldERhdGFBdENlbGwodGhp''@;'; put 'put ''cy5ob3QudG9WaXN1YWxSb3coZiksYSkpJiZ2b2lkIDAhPT12P3Y6aDtkLnB1c2goe21ldGE6e3JvdzpNLGNvbDpELHZpc3VhbENvbDpaLHZpc3VhbFJvdzpyZSx0eXBlOmNlLGluc3RhbmNlOmJlLGRhdGVGb3JtYXQ6RWUsbG9jYWxlOkJlfSx2YWx1ZTpwUShxZSl9KX0pLGR9dXBkYXRlVmFs''@;'; put 'put ''dWVDb21wb25lbnRDb25kaXRpb24obCl7Y29uc3QgZD1nUSh0aGlzLmhvdC5nZXREYXRhQXRDb2wobCkpO3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIudXBkYXRlU3RhdGVzQXRDb2x1bW4obCxkKX1yZXN0b3JlQ29tcG9uZW50cyhsKXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlz''@;'; put 'put ''LmdldFNlbGVjdGVkQ29sdW1uKCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnBoeXNpY2FsSW5kZXg7bC5mb3JFYWNoKGg9PntoLmlzSGlkZGVuKCl8fGgucmVzdG9yZVN0YXRlKGQpfSksdGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpfWdldE9wZXJhdGlvbkJhc2Vk''@;'; put 'put ''T25Bcmd1bWVudHMobCxhLGQsaCl7bGV0IGY9bDtyZXR1cm4gZj09PUdGJiZhLmNvbW1hbmQua2V5IT09RTAmJmQuY29tbWFuZC5rZXkhPT1FMCYmaC5jb21tYW5kLmtleSE9PUUwP2Y9aFE6aC5jb21tYW5kLmtleSE9PUUwJiYoYS5jb21tYW5kLmtleT09PUUwfHxkLmNvbW1hbmQua2V5PT09''@;'; put 'put ''RTApJiYoZj1hNiksZn1zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKXt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uc2V0TGlzdGVuaW5nKCl9dXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50''@;'; put 'put ''cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKSx7Y29tbWFuZDphfT1sLmdldFN0YXRlKCksZD1bdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIildO2Euc2hvd09wZXJhdG9ycz90aGlzLnNo''@;'; put 'put ''b3dDb21wb25lbnRzKC4uLmQpOnRoaXMuaGlkZUNvbXBvbmVudHMoLi4uZCl9X2NyZWF0ZURhdGFGaWx0ZXIoKXtyZXR1cm4gbmV3IEE1ZShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLGE9PnRo''@;'; put 'put ''aXMuZ2V0RGF0YU1hcEF0Q29sdW1uKGEpKX1nZXRJbmRleGVzT2ZDb21wb25lbnRzKCl7Y29uc3QgbD1bXTtpZighdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pcmV0dXJuIGw7Y29uc3QgYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9''@;'; put 'put ''bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBZbihoLHY9PntZbihhLm1lbnVJdGVtcywoTSxEKT0+e00ua2V5PT09di5nZXRNZW51SXRlbURlc2NyaXB0b3IoKS5rZXkmJmwucHVzaChEKX0pfSksbH1jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSgp''@;'; put 'put ''e2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXJldHVybjtjb25zdCBkPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuaG90TWVudSxoPWQuZ2V0UGx1Z2luKCJoaWRk''@;'; put 'put ''ZW5Sb3dzIik7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZj4xP2YtMTowKSxNPTE7TTxmO00rKyl2W00tMV09YXJndW1lbnRzW01dO2NvbnN0IEQ9dGhpcy5nZXRJbmRleGVzT2ZDb21wb25lbnRzKC4uLnYpO2w/aC5zaG93Um93cyhEKTpoLmhpZGVSb3dzKEQpLGQu''@;'; put 'put ''cmVuZGVyKCl9aGlkZUNvbXBvbmVudHMoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCExLC4uLmEpfXNob3dDb21wb25lbnRzKCl7Zm9yKHZhciBs''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSghMCwuLi5hKX1kZXN0cm95KCl7dGhpcy5lbmFibGVkJiYodGhpcy5jb21wb25lbnRzLmZvckVhY2goKGwsYSk9PntudWxs''@;'; put 'put ''IT09bCYmKGwuZGVzdHJveSgpLHRoaXMuY29tcG9uZW50cy5zZXQoYSxudWxsKSl9KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZGVzdHJveSgpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhp''@;'; put 'put ''cy5wbHVnaW5OYW1lKSksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBLaHQoYyl7YyYmWW4oYyxsPT57Y29uc3RbLGFdPWwsZD10aGlzLmhvdC5wcm9wVG9Db2woYSk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMoZCkmJnRoaXMudXBkYXRlVmFsdWVDb21wb25lbnRD''@;'; put 'put ''b25kaXRpb24oZCl9KX1mdW5jdGlvbiBxaHQoKXtjb25zdCBjPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7dGhpcy5yZXN0b3JlQ29tcG9uZW50cyhBcnJheS5mcm9tKHRoaXMuY29tcG9uZW50cy52YWx1ZXMoKSkpLGMudXBkYXRlTWVudURpbWVuc2lvbnMoKX1mdW5jdGlvbiBYaHQo''@;'; put 'put ''KXt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3NlT3B0aW9ucygpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3NlT3B0aW9ucygpfWZ1bmN0aW9u''@;'; put 'put ''IEpodCgpe2NvbnN0IGM9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudTtYMihDUSx0aGlzKS5oYXMoYyl8fFgyKE5nLHRoaXMpLnNldE1lbnUoYyksWDIoQ1EsdGhpcykuYWRkKGMpfWZ1bmN0aW9uIFFodChjKXtjLml0ZW1zLnB1c2goe25hbWU6c3N9KSx0aGlzLmNvbXBvbmVudHMuZm9y''@;'; put 'put ''RWFjaChsPT57Yy5pdGVtcy5wdXNoKGwuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkpfSl9ZnVuY3Rpb24gUjVlKGMpe3ZhciBsO2lmKCJhY2NlcHQiPT09Yyl7Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCk7dmFyIGE7aWYobnVsbD09PWQpcmV0dXJuIHZvaWQobnVsbD09PShhPXRo''@;'; put 'put ''aXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09YXx8YS5jbG9zZSgpKTtjb25zdHtwaHlzaWNhbEluZGV4Omh9PWQsZj10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U3RhdGUoKSx2PXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25k''@;'; put 'put ''aXRpb24yIikuZ2V0U3RhdGUoKSxNPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLmdldFN0YXRlKCksRD10aGlzLmdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHModGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLmdldEFjdGl2ZU9wZXJhdGlv''@;'; put 'put ''bklkKCksZix2LE0pO3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZ3JvdXBDaGFuZ2VzKCk7bGV0IFo9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24oaCk7LTE9PT1aJiYoWj12b2lkIDApLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVD''@;'; put 'put ''b25kaXRpb25zKGgpLGYuY29tbWFuZC5rZXkhPT1FMCYmKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oaCxmLEQsWiksdi5jb21tYW5kLmtleSE9PUUwJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGgsdixELFopKSxNLmNvbW1hbmQua2V5IT09''@;'; put 'put ''RTAmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oaCxNLEQsWiksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5mbHVzaCgpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKHJlPT5yZS5zYXZlU3RhdGUoaCkpLHRoaXMuZmlsdGVyKCl9bnVsbD09PShsPXRoaXMuZHJv''@;'; put 'put ''cGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpfWZ1bmN0aW9uIGUydChjLGwpe2NvbnN0IGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudTt0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCksYy5jb25zdHJ1Y3Rvcj09PXVRJiYhbC5pbnB1''@;'; put 'put ''dHNDb3VudCYmdGhpcy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKSxhLnVwZGF0ZU1lbnVEaW1lbnNpb25zKCl9ZnVuY3Rpb24gTDVlKCl7dGhpcy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKX1mdW5jdGlvbiB0MnQoYyxsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVt''@;'; put 'put ''bihjKTt0aGlzLmVuYWJsZWQmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGQpJiZhPT09dGhpcy5ob3Qudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKS0xP1RpKGwsImh0RmlsdGVyc0FjdGl2ZSIpOmxvKGwsImh0RmlsdGVyc0FjdGl2ZSIpfWZ1bmN0aW9uIG4y''@;'; put 'put ''dChjKXt2YXIgbDtpZihudWxsPT09KGw9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1sfHwhbC5lbmFibGVkKXJldHVybjtjb25zdHtlZGl0ZWRDb25kaXRpb25TdGFjazp7Y29uZGl0aW9uczphLGNvbHVtbjpkfSxjb25kaXRpb25BcmdzQ2hhbmdlOmh9PWM7QXJyYXkuaXNB''@;'; put 'put ''cnJheShoKSYmWEYoTTksdGhpcyxYMihNOSx0aGlzKS5tYXAoTT0+KE0uY29sdW1uPT09ZCYmYS5sZW5ndGg+MCYmTS5jb25kaXRpb25zLmZvckVhY2goRD0+eyJieV92YWx1ZSI9PT1ELm5hbWUmJihELmFyZ3M9W1suLi5oXV0pfSksTSkpKTtjb25zdCBmPWEuZmlsdGVyKE09Pk0ubmFtZT09''@;'; put 'put ''PUM5KSx2PWEuZmlsdGVyKE09Pk0ubmFtZSE9PUM5KTtpZihmLmxlbmd0aD49Mnx8di5sZW5ndGg+PTMpaWwoZ2xgVGhlIGZpbHRlciBjb25kaXRpb25zIGhhdmUgYmVlbiBhcHBsaWVkIHByb3Blcmx5LCBidXQgY291bGRu4oCZdCBiZSBkaXNwbGF5ZWQgdmlzdWFsbHkuXHgyMAogICAgICAg''@;'; put 'put ''IFRoZSBvdmVyYWxsIGFtb3VudCBvZiBjb25kaXRpb25zIGV4Y2VlZCB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgZHJvcGRvd24gbWVudS5ceDIwCiAgICAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGRvY3VtZW50YXRpb24uYCk7ZWxzZXtjb25zdCBNPXRoaXMuY29uZGl0aW9uQ29sbGVj''@;'; put 'put ''dGlvbi5nZXRPcGVyYXRpb24oZCk7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLnVwZGF0ZVN0YXRlKHZbMF0sZCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS51cGRhdGVTdGF0ZSh2WzFdLGQpLHRoaXMuY29tcG9uZW50cy5n''@;'; put 'put ''ZXQoImZpbHRlcl9vcGVyYXRvcnMiKS51cGRhdGVTdGF0ZShNLGQpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLnVwZGF0ZVN0YXRlKGMpfX1jb25zdCBPNWU9ImludGVybmFsLXVzZS1pbi1oYW5kc29udGFibGUiLFNRPXtsaWNlbnNlS2V5Ok81ZSx1c2VBcnJheUFy''@;'; put 'put ''aXRobWV0aWM6ITAsdXNlQ29sdW1uSW5kZXg6ITEsdXNlU3RhdHM6ITEsZXZhbHVhdGVOdWxsVG9aZXJvOiEwLHByZWNpc2lvbkVwc2lsb246MWUtMTMscHJlY2lzaW9uUm91bmRpbmc6MTQsc21hcnRSb3VuZGluZzohMCxsZWFwWWVhcjE5MDA6ITEsbnVsbERhdGU6e3llYXI6MTg5OSxtb250''@;'; put 'put ''aDoxMixkYXk6MzB9LG51bGxZZWFyOjMwLGRhdGVGb3JtYXRzOlsiREQvTU0vWVlZWSIsIkREL01NL1lZIl0sdGltZUZvcm1hdHM6WyJoaDptbSIsImhoOm1tOnNzLnNzcyJdLG1hdGNoV2hvbGVDZWxsOiEwLHVzZVJlZ3VsYXJFeHByZXNzaW9uczohMSx1c2VXaWxkY2FyZHM6ITAsZnVuY3Rp''@;'; put 'put ''b25BcmdTZXBhcmF0b3I6IiwiLHRob3VzYW5kU2VwYXJhdG9yOiIiLGRlY2ltYWxTZXBhcmF0b3I6Ii4iLGxhbmd1YWdlOiJlbkdCIn07ZnVuY3Rpb24gUDVlKGMpe3ZhciBsO3JldHVybnttYXhDb2x1bW5zOmMubWF4Q29sdW1ucyxtYXhSb3dzOmMubWF4Um93cyxsYW5ndWFnZTpudWxsPT09''@;'; put 'put ''KGw9Y1t3MV0pfHx2b2lkIDA9PT1sfHxudWxsPT09KGw9bC5sYW5ndWFnZSl8fHZvaWQgMD09PWw/dm9pZCAwOmwubGFuZ0NvZGV9fWZ1bmN0aW9uIEY1ZShjKXtyZXR1cm4gT2JqZWN0LmtleXMoYykucmVkdWNlKChsLGEpPT4oImh5cGVyZm9ybXVsYSIhPT1hJiYobFthXT1jW2FdKSxsKSx7''@;'; put 'put ''fSl9ZnVuY3Rpb24gSkYoKXtjb25zdCBjPSJlbmdpbmVfcmVsYXRpb25zaGlwIixsPXIzKHcxKTtyZXR1cm4gbC5oYXNJdGVtKGMpfHxsLnJlZ2lzdGVyKGMsbmV3IE1hcCksbC5nZXRJdGVtKGMpfWZ1bmN0aW9uIE1RKCl7Y29uc3QgYz0ic2hhcmVkX2VuZ2luZV91c2FnZSIsbD1yMyh3MSk7''@;'; put 'put ''cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdpc3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5jdGlvbiBINWUoYyl7dmFyIGw7Y29uc3QgYT1KRigpLGQ9MD09PWEuc2l6ZT9bXTpBcnJheS5mcm9tKG51bGwhPT0obD1hLmdldChjKSkmJnZvaWQgMCE9PWw/bDpbXSk7cmV0dXJuIG5l''@;'; put 'put ''dyBNYXAoZC5tYXAoaD0+W2guZ2V0UGx1Z2luKCJmb3JtdWxhcyIpLnNoZWV0SWQsaF0pKX1mdW5jdGlvbiBONWUoYyxsKXtpZihjKXtjb25zdCBhPUpGKCksZD1hLmdldChjKSxoPU1RKCksZj1oLmdldChjKTtkJiZkLmluY2x1ZGVzKGwpJiYoZC5zcGxpY2UoZC5pbmRleE9mKGwpLDEpLDA9''@;'; put 'put ''PT1kLmxlbmd0aCYmYS5kZWxldGUoYykpLGYmJmYuaW5jbHVkZXMobC5ndWlkKSYmKGYuc3BsaWNlKGYuaW5kZXhPZihsLmd1aWQpLDEpLDA9PT1mLmxlbmd0aCYmKGguZGVsZXRlKGMpLGMuZGVzdHJveSgpKSl9fWNvbnN0IFY1ZT0iREQvTU0vWVlZWSI7ZnVuY3Rpb24geFEoYyxsKXtyZXR1''@;'; put 'put ''cm4ic3RyaW5nIj09dHlwZW9mIGMmJiJkYXRlIj09PWx9ZnVuY3Rpb24gQjVlKGMsbCl7cmV0dXJuIE9vKGMsbCwhMCkuaXNWYWxpZCgpfWZ1bmN0aW9uIGo1ZShjLGwpe3JldHVybiBPbyhjLGwsITApLmZvcm1hdChWNWUpfWZ1bmN0aW9uIGcydChjLGwpe3JldHVybiBPbyhjLFY1ZSwhMCku''@;'; put 'put ''Zm9ybWF0KGwpfWZ1bmN0aW9uIHo1ZShjLGwpe2NvbnN0IGQ9bmV3IERhdGUoRGF0ZS5VVEMoMCwwLGMrLTEpKTtyZXR1cm4gT28oZCkuZm9ybWF0KGwpfWZ1bmN0aW9uIEVRKGMsbCxhKXtjb25zdCBkPWZ1bmN0aW9uIHYydChjLGwpe2NvbnN0IGE9W107cmV0dXJuIGMuZm9yRWFjaChkPT57''@;'; put 'put ''Y29uc3QgaD17ZnJvbTpkLHRvOmx9O2EuZm9yRWFjaChmPT57Zi5mcm9tPmguZnJvbSYmZi50bzw9aC5mcm9tJiZmLmZyb20+Zi50byYmKGguZnJvbSs9MSl9KSxoLmZyb20+PWwmJihsKz0xKSxhLnB1c2goaCl9KSxhfShjLGZ1bmN0aW9uIG0ydChjLGwsYSl7Y29uc3QgZD1BcnJheS5mcm9t''@;'; put 'put ''KEFycmF5KGEpLmtleXMoKSkuZmlsdGVyKGY9PiExPT09Yy5pbmNsdWRlcyhmKSk7dmFyIGg7cmV0dXJuIDA9PT1sP251bGwhPT0oaD1kW2xdKSYmdm9pZCAwIT09aD9oOjA6ZFtsLTFdKzF9KGMsbCxhKSk7cmV0dXJuIGZ1bmN0aW9uIGIydChjKXtyZXR1cm4gYy5mb3JFYWNoKChsLGEpPT57''@;'; put 'put ''Yy5zbGljZShhKzEpLmZvckVhY2goaD0+e2guZnJvbT5sLmZyb20mJmguZnJvbTxoLnRvJiYoaC5mcm9tLT0xKX0pfSksY30oZCl9ZnVuY3Rpb24geDkoYyxsLGEpeyhmdW5jdGlvbiB5MnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0''@;'; put 'put ''aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFNjKGMsbCl7cmV0dXJuIGMuZ2V0KFU1ZShjLGwpKX1mdW5jdGlvbiBsNihjLGwsYSl7cmV0dXJuIGMuc2V0KFU1ZShjLGwpLGEpLGF9ZnVuY3Rpb24gVTVlKGMs''@;'; put 'put ''bCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgbkE9bmV3IFdlYWtNYXAsYzY9''@;'; put 'put ''bmV3IFdlYWtNYXAsVmg9bmV3IFdlYWtNYXAsUUY9bmV3IFdlYWtNYXAsVFE9bmV3IFdlYWtNYXAsQVE9bmV3IFdlYWtNYXAsZUg9bmV3IFdlYWtNYXA7Y29uc3QgWjVlPWNsYXNzIF8ydHtjb25zdHJ1Y3RvcihsLGEsZCl7eDkodGhpcyxuQSx2b2lkIDApLHg5KHRoaXMsYzYsdm9pZCAwKSx4''@;'; put 'put ''OSh0aGlzLFZoLHZvaWQgMCkseDkodGhpcyxRRixbXSkseDkodGhpcyxUUSxbXSkseDkodGhpcyxBUSx2b2lkIDApLHg5KHRoaXMsZUgsW10pLGw2KG5BLHRoaXMsbCksbDYoYzYsdGhpcyxhKSxsNihWaCx0aGlzLGQpfXNldFJlbW92ZWRIZkluZGV4ZXMobCl7cmV0dXJuIGw2KGVILHRoaXMs''@;'; put 'put ''bC5tYXAoYT0+e2NvbnN0IGQ9U2MoYzYsdGhpcykuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoYSk7cmV0dXJuIHRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkKX0pKSxTYyhlSCx0aGlzKX1nZXRSZW1vdmVkSGZJbmRleGVzKCl7cmV0dXJuIFNjKGVILHRoaXMpfWdldEhmSW5k''@;'; put 'put ''ZXhGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT1TYyhjNix0aGlzKS5nZXRJbmRleGVzU2VxdWVuY2UoKSxkPVNjKGM2LHRoaXMpLmdldE5vdFRyaW1tZWRJbmRleGVzKCk7cmV0dXJuIGEuaW5kZXhPZihkW2xdLGwpfXN5bmNNb3ZlcyhsKXtjb25zdCBkPWBtb3ZlJHtwMShTYyhuQSx0aGlz''@;'; put 'put ''KSl9c2A7U2MoVmgsdGhpcykuZ2V0RW5naW5lKCkuYmF0Y2goKCk9PntsLmZvckVhY2goaD0+e2guZnJvbSE9PWgudG8mJmguZnJvbSsxIT09aC50byYmU2MoVmgsdGhpcykuZ2V0RW5naW5lKClbZF0oU2MoVmgsdGhpcykuZ2V0U2hlZXRJZCgpLGguZnJvbSwxLGgudG8pfSl9KX1zdG9yZU1v''@;'; put 'put ''dmVzSW5mb3JtYXRpb24obCxhLGQpeyExIT09ZCYmKGw2KFRRLHRoaXMsbC5tYXAoaD0+dGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpKSksbDYoQVEsdGhpcyx0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSkpKX1jYWxjdWxhdGVBbmRTeW5jTW92ZXMobCxhKXtpZihT''@;'; put 'put ''YyhWaCx0aGlzKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpfHwhMT09PWx8fCExPT09YSlyZXR1cm47Y29uc3QgZD1FUShTYyhUUSx0aGlzKSxTYyhBUSx0aGlzKSxTYyhjNix0aGlzKS5nZXROdW1iZXJPZkluZGV4ZXMoKSk7bnVsbD09PVNjKFZoLHRoaXMpLmdldFNoZWV0SWQoKT9TYyhWaCx0''@;'; put 'put ''aGlzKS5nZXRQb3N0cG9uZUFjdGlvbigoKT0+dGhpcy5zeW5jTW92ZXMoZCkpOnRoaXMuc3luY01vdmVzKGQpfWdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCl7Y29uc3QgbD1gc2V0JHtwMShTYyhuQSx0aGlzKSl9T3JkZXJgO3JldHVybiBhPT57aWYoU2MoVmgsdGhpcykuaXNQZXJmb3Jt''@;'; put 'put ''aW5nVW5kb1JlZG8oKSlyZXR1cm47Y29uc3QgZD1TYyhjNix0aGlzKS5nZXRJbmRleGVzU2VxdWVuY2UoKTtpZigidXBkYXRlIj09PWEmJmQubGVuZ3RoPjApe2NvbnN0IGg9U2MoUUYsdGhpcykubWFwKEQ9PmQuaW5kZXhPZihEKSksZj1TYyhWaCx0aGlzKS5nZXRFbmdpbmUoKS5nZXRTaGVl''@;'; put 'put ''dERpbWVuc2lvbnMoU2MoVmgsdGhpcykuZ2V0U2hlZXRJZCgpKTtsZXQgdjt2PSJyb3ciPT09U2MobkEsdGhpcyk/Zi5oZWlnaHQ6Zi53aWR0aDtmb3IobGV0IEQ9aC5sZW5ndGg7RDx2O0QrPTEpaC5wdXNoKEQpO1NjKFZoLHRoaXMpLmdldEVuZ2luZSgpW2xdKFNjKFZoLHRoaXMpLmdldFNo''@;'; put 'put ''ZWV0SWQoKSxoKX1sNihRRix0aGlzLGQpfX1pbml0KCl7bDYoUUYsdGhpcyxTYyhjNix0aGlzKS5nZXRJbmRleGVzU2VxdWVuY2UoKSl9fTtmdW5jdGlvbiBFOShjLGwsYSl7KGZ1bmN0aW9uIHcydChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFs''@;'; put 'put ''aXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gVmcoYyxsKXtyZXR1cm4gYy5nZXQoVzVlKGMsbCkpfWZ1bmN0aW9uIFQ5KGMsbCxhKXtyZXR1cm4gYy5zZXQoVzVlKGMsbCksYSksYX1mdW5jdGlvbiBX''@;'; put 'put ''NWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB0SD1uZXcgV2Vha01h''@;'; put 'put ''cCxuSD1uZXcgV2Vha01hcCxrUT1uZXcgV2Vha01hcCxEUT1uZXcgV2Vha01hcCxJUT1uZXcgV2Vha01hcCxSUT1uZXcgV2Vha01hcCxMUT1uZXcgV2Vha01hcDtjb25zdCBTMnQ9Y2xhc3MgQzJ0e2NvbnN0cnVjdG9yKGwsYSxkKXtFOSh0aGlzLHRILHZvaWQgMCksRTkodGhpcyxuSCx2b2lk''@;'; put 'put ''IDApLEU5KHRoaXMsa1Esdm9pZCAwKSxFOSh0aGlzLERRLCExKSxFOSh0aGlzLElRLCExKSxFOSh0aGlzLFJRLG51bGwpLEU5KHRoaXMsTFEsbnVsbCksVDkodEgsdGhpcyxuZXcgWjVlKCJyb3ciLGwsdGhpcykpLFQ5KG5ILHRoaXMsbmV3IFo1ZSgiY29sdW1uIixhLHRoaXMpKSxUOShrUSx0''@;'; put 'put ''aGlzLGQpfWdldEZvckF4aXMobCl7cmV0dXJuIFZnKCJyb3ciPT09bD90SDpuSCx0aGlzKX1zZXRQZXJmb3JtVW5kbyhsKXtUOShEUSx0aGlzLGwpfXNldFBlcmZvcm1SZWRvKGwpe1Q5KElRLHRoaXMsbCl9aXNQZXJmb3JtaW5nVW5kb1JlZG8oKXtyZXR1cm4gVmcoRFEsdGhpcyl8fFZnKElR''@;'; put 'put ''LHRoaXMpfWdldFNoZWV0SWQoKXtyZXR1cm4gVmcoTFEsdGhpcyl9Z2V0RW5naW5lKCl7cmV0dXJuIFZnKFJRLHRoaXMpfWdldFBvc3Rwb25lQWN0aW9uKCl7cmV0dXJuIFZnKGtRLHRoaXMpfXNldHVwU3luY0VuZHBvaW50KGwsYSl7VDkoUlEsdGhpcyxsKSxUOShMUSx0aGlzLGEpLFZnKHRI''@;'; put 'put ''LHRoaXMpLmluaXQoKSxWZyhuSCx0aGlzKS5pbml0KCl9fTtmdW5jdGlvbiBBOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geDJ0KGMpe3ZhciBsPWZ1bmN0aW9uIEUydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVd''@;'; put 'put ''O2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9T''@;'; put 'put ''dHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rp''@;'; put 'put ''b24gT1EoYyxsLGEpe1k1ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gWTVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB1NihjLGws''@;'; put 'put ''YSl7cmV0dXJuIGMuc2V0KHpzKGMsbCksYSksYX1mdW5jdGlvbiBrOShjLGwpe3JldHVybiBjLmdldCh6cyhjLGwpKX1mdW5jdGlvbiB6cyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdzE9ImZvcm11bGFzIixUMnQ9WyJtYXhSb3dzIiwibWF4Q29sdW1ucyIsImxhbmd1YWdlIl07U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTmFtZWRFeHByZXNz''@;'; put 'put ''aW9uQWRkZWQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRBZGRlZCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0UmVtb3ZlZCIpLFNh''@;'; put 'put ''LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0UmVuYW1lZCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIik7Y29uc3QgbHc9Yz0+IlVuZG9SZWRvLnVuZG8iPT09Y3x8IlVuZG9SZWRvLnJlZG8iPT09Y3x8ImF1dG8iPT09''@;'; put 'put ''Yzt2YXIgQmc9bmV3IFdlYWtNYXAsckg9bmV3IFdlYWtNYXAsckE9bmV3IFdlYWtNYXAsS3M9bmV3IFdlYWtTZXQ7Y2xhc3MgazJ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXt2YXIgbDtzdXBlciguLi5hcmd1bWVudHMpLGw9dGhpcyxmdW5jdGlvbiBNMnQoYyxsKXtZNWUoYyxsKSxsLmFk''@;'; put 'put ''ZChjKX0odGhpcyxLcyksT1EodGhpcyxCZywhMSksT1EodGhpcyxySCwhMSksT1EodGhpcyxyQSxbWyJ2YWx1ZXNVcGRhdGVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB6''@;'; put 'put ''cyhLcyxsLFcydCkuY2FsbChsLC4uLmQpfV0sWyJuYW1lZEV4cHJlc3Npb25BZGRlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4genMoS3MsbCxZMnQpLmNhbGwobCwuLi5k''@;'; put 'put ''KX1dLFsibmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4genMoS3MsbCxHMnQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRBZGRlZCIsZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4genMoS3MsbCwkMnQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRSZW5hbWVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB6cyhLcyxsLEsydCkuY2FsbChsLC4uLmQpfV0sWyJzaGVldFJlbW92ZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKysp''@;'; put 'put ''ZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHpzKEtzLGwscTJ0KS5jYWxsKGwsLi4uZCl9XV0pLEE5KHRoaXMsInN0YXRpY1JlZ2lzdGVyIixyMygiZm9ybXVsYXMiKSksQTkodGhpcywiZW5naW5lIixudWxsKSxBOSh0aGlzLCJzaGVldElkIixudWxsKSxBOSh0aGlzLCJzaGVldE5hbWUiLG51''@;'; put 'put ''bGwpLEE5KHRoaXMsImluZGV4U3luY2VyIixudWxsKSxBOSh0aGlzLCJyb3dBeGlzU3luY2VyIixudWxsKSxBOSh0aGlzLCJjb2x1bW5BeGlzU3luY2VyIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdzF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4g''@;'; put 'put ''MjYwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3cxLC4uLlQydF19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3cxXX1lbmFibGVQbHVnaW4oKXt2YXIgbCxhPXRoaXM7aWYoIXRoaXMuZW5hYmxlZCl7aWYodGhpcy5lbmdpbmU9bnVsbCE9PShs''@;'; put 'put ''PWZ1bmN0aW9uIG8ydChjKXtjb25zdCBsPWMuZ2V0U2V0dGluZ3MoKSxhPWxbdzFdLGQ9YT8uZW5naW5lO2lmKCEwPT09YXx8X2MoZCkpcmV0dXJuIG51bGw7dmFyIGg7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGQuaHlwZXJmb3JtdWxhfHwiZnVuY3Rpb24iPT10eXBlb2YgZClyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gczJ0KGMsbCxhKXtjb25zdCBkPWxbdzFdLGg9ZnVuY3Rpb24gcjJ0KGMpe3ZhciBsO2NvbnN0IGE9Y1t3MV0sZD1GNWUobnVsbCE9YSYmbnVsbCE9PShsPWEuZW5naW5lKSYmdm9pZCAwIT09bCYmbC5oeXBlcmZvcm11bGE/YS5lbmdpbmU6e30pLGg9UDVlKGMpO3JldHVybnsuLi5T''@;'; put 'put ''USwuLi5kLC4uLmh9fShsKSxmPUpGKCksdj1NUSgpOyhmdW5jdGlvbiBsMnQoYyxsKXtsJiZsLmZvckVhY2goYT0+e2NvbnN0e25hbWU6ZCxwbHVnaW46aCx0cmFuc2xhdGlvbnM6Zn09YTt0cnl7Yy5yZWdpc3RlckZ1bmN0aW9uKGQsaCxmKX1jYXRjaCh2KXtpbCh2Lm1lc3NhZ2UpfX0pfSko''@;'; put 'put ''YyxkLmZ1bmN0aW9ucyksZnVuY3Rpb24gYzJ0KGMsbCl7aWYobCl7Y29uc3R7bGFuZ0NvZGU6YX09bDt0cnl7Yy5yZWdpc3Rlckxhbmd1YWdlKGEsbCl9Y2F0Y2goZCl7aWwoZC5tZXNzYWdlKX19fShjLGQubGFuZ3VhZ2UpO2NvbnN0IE09Yy5idWlsZEVtcHR5KGgpO3JldHVybiBmLnNldChN''@;'; put 'put ''LFthXSksdi5zZXQoTSxbYS5ndWlkXSksZnVuY3Rpb24gdTJ0KGMsbCl7bCYmKGMuc3VzcGVuZEV2YWx1YXRpb24oKSxsLmZvckVhY2goYT0+e2NvbnN0e25hbWU6ZCxleHByZXNzaW9uOmgsc2NvcGU6ZixvcHRpb25zOnZ9PWE7dHJ5e2MuYWRkTmFtZWRFeHByZXNzaW9uKGQsaCxmLHYpfWNh''@;'; put 'put ''dGNoKE0pe2lsKE0ubWVzc2FnZSl9fSksYy5yZXN1bWVFdmFsdWF0aW9uKCkpfShNLGQubmFtZWRFeHByZXNzaW9ucyksTS5vbigic2hlZXRBZGRlZCIsKCk9PntNLnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksTS5vbigic2hlZXRSZW1vdmVkIiwoKT0+e00ucmVidWlsZEFuZFJlY2FsY3Vs''@;'; put 'put ''YXRlKCl9KSxNfShudWxsIT09KGg9ZC5oeXBlcmZvcm11bGEpJiZ2b2lkIDAhPT1oP2g6ZCxsLGMpO2lmKCJvYmplY3QiPT10eXBlb2YgZCYmX2MoZC5oeXBlcmZvcm11bGEpKXtjb25zdCBmPUpGKCksdj1NUSgpLmdldChkKTtyZXR1cm4gZi5oYXMoZCl8fGYuc2V0KGQsW10pLGYuZ2V0KGQp''@;'; put 'put ''LnB1c2goYyksdiYmdi5wdXNoKGMuZ3VpZCksZC5nZXRDb25maWcoKS5saWNlbnNlS2V5fHxkLnVwZGF0ZUNvbmZpZyh7bGljZW5zZUtleTpPNWV9KSwoZC5nZXRDb25maWcoKS5sZWFwWWVhcjE5MDAhPT1TUS5sZWFwWWVhcjE5MDB8fCExPT09Tk8oZC5nZXRDb25maWcoKS5udWxsRGF0ZSxT''@;'; put 'put ''US5udWxsRGF0ZSkpJiZpbChnbGBJZiB5b3UgdXNlIEh5cGVyRm9ybXVsYSB3aXRoIEhhbmRzb250YWJsZSwga2VlcCB0aGUgZGVmYXVsdCBcYGxlYXBZZWFyMTkwMFxgIGFuZCBcYG51bGxEYXRlXGAgCiAgICAgIHNldHRpbmdzLiBPdGhlcndpc2UsIEh5cGVyRm9ybXVsYSdzIGRhdGVzIG1h''@;'; put 'put ''eSBub3Qgc3luYyBjb3JyZWN0bHkgd2l0aCBIYW5kc29udGFibGUncyBkYXRlcy5gKSxkfXJldHVybiBudWxsfSh0aGlzLmhvdCkpJiZ2b2lkIDAhPT1sP2w6dGhpcy5lbmdpbmUsIXRoaXMuZW5naW5lKXJldHVybiB2b2lkIGlsKCJNaXNzaW5nIHRoZSByZXF1aXJlZCBgZW5naW5lYCBrZXkg''@;'; put 'put ''aW4gdGhlIEZvcm11bGFzIHNldHRpbmdzLiBQbGVhc2UgZmlsbCBpdCB3aXRoIGVpdGhlciBhbiBlbmdpbmUgY2xhc3Mgb3IgYW4gZW5naW5lIGluc3RhbmNlLiIpO2lmKG51bGwhPT10aGlzLnNoZWV0TmFtZSYmIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSl7''@;'; put 'put ''Y29uc3QgZD10aGlzLmFkZFNoZWV0KHRoaXMuc2hlZXROYW1lLHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpKTshMSE9PWQmJnpzKEtzLHRoaXMsaUEpLmNhbGwodGhpcyxkKX10aGlzLmFkZEhvb2soImJlZm9yZUxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLEc1ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5''@;'; put 'put ''KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLCQ1ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVcGRhdGVEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7Zisr''@;'; put 'put ''KWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLEc1ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNb''@;'; put 'put ''Zl07cmV0dXJuIHpzKEtzLGEsJDVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsTDJ0''@;'; put 'put ''KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsTzJ0KS5jYWxsKGEsLi4uaCl9''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLEQydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJh''@;'; put 'put ''ZnRlclNldFNvdXJjZURhdGFBdENlbGwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsUDJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0''@;'; put 'put ''RGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxLNWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9w''@;'; put 'put ''IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLEs1ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsRjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxIMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJy''@;'; put 'put ''YXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsQjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7Zisr''@;'; put 'put ''KWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLGoydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNb''@;'; put 'put ''Zl07cmV0dXJuIHpzKEtzLGEsTjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3Ms''@;'; put 'put ''YSxWMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsejJ0KS5jYWxsKGEsLi4u''@;'; put 'put ''aCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLFUydCkuY2FsbChhLC4uLmgpfSksdGhpcy5pbmRleFN5''@;'; put 'put ''bmNlcj1uZXcgUzJ0KHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGQ9Pnt0aGlzLmhvdC5hZGRIb29rT25jZSgiaW5pdCIsKCk9PntkKCl9KX0pLHRoaXMucm93QXhpc1N5bmNlcj10aGlzLmluZGV4U3luY2VyLmdldEZvckF4aXMoInJvdyIpLHRo''@;'; put 'put ''aXMuY29sdW1uQXhpc1N5bmNlcj10aGlzLmluZGV4U3luY2VyLmdldEZvckF4aXMoImNvbHVtbiIpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLHRoaXMucm93QXhpc1N5bmNlci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0aGlzLmhvdC5hZGRIb29r''@;'; put 'put ''KCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIix0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsKGQsaCxmLHYpPT57dGhpcy5yb3dBeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlv''@;'; put 'put ''bihkLGgsdil9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIiwoZCxoLGYsdik9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKGQsaCx2KX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUm93TW92ZSIsKGQsaCxmLHYsTSk9Pnt0aGlzLnJv''@;'; put 'put ''d0F4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHYsTSl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtbk1vdmUiLChkLGgsZix2LE0pPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3Zlcyh2LE0pfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3Jl''@;'; put 'put ''Q29sdW1uRnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2RdLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsaCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtbkZyZWV6ZSIsKGQsaCk9Pnt0aGlz''@;'; put 'put ''LmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKGgsaCl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtkXSx0aGlzLmhvdC5nZXRTZXR0aW5ncygp''@;'; put 'put ''LmZpeGVkQ29sdW1uc1N0YXJ0LTEsaCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtblVuZnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoaCxoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDZWxsTWV0YVJlc2V0IixmdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLFIydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVy''@;'; put 'put ''Zm9ybVVuZG8oITApLHRoaXMuZW5naW5lLnVuZG8oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVkbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCEwKSx0aGlzLmVuZ2luZS5yZWRvKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3lu''@;'; put 'put ''Y2VyLnNldFBlcmZvcm1VbmRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9''@;'; put 'put ''bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLFoydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVBdXRvZmlsbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7''@;'; put 'put ''ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxJMnQpLmNhbGwoYSwuLi5oKX0pLGs5KHJBLHRoaXMpLmZvckVhY2goZD0+e2xldFtoLGZdPWQ7cmV0dXJuIHRoaXMuZW5naW5lLm9uKGgsZil9KSxzdXBlci5lbmFibGVQbHVnaW4oKX19ZGlzYWJsZVBsdWdpbigpe2s5''@;'; put 'put ''KHJBLHRoaXMpLmZvckVhY2gobD0+e2xldFthLGRdPWw7cmV0dXJuIHRoaXMuZW5naW5lLm9mZihhLGQpfSksTjVlKHRoaXMuZW5naW5lLHRoaXMuaG90KSx0aGlzLmVuZ2luZT1udWxsLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4obCl7Y29uc3QgYT1mdW5jdGlvbiBpMnQo''@;'; put 'put ''Yyl7dmFyIGw7Y29uc3QgYT1jW3cxXTtyZXR1cm57Li4uRjVlKG51bGwhPWEmJm51bGwhPT0obD1hLmVuZ2luZSkmJnZvaWQgMCE9PWwmJmwuaHlwZXJmb3JtdWxhP2EuZW5naW5lOnt9KSwuLi5QNWUoYyl9fSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpKTsoZnVuY3Rpb24gYTJ0KGMsbCl7cmV0''@;'; put 'put ''dXJuIE9iamVjdC5rZXlzKGwpLnNvbWUoYT0+dm9pZCAwIT09bFthXSYmbFthXSE9PWNbYV0pfSkodGhpcy5lbmdpbmUuZ2V0Q29uZmlnKCksYSkmJnRoaXMuZW5naW5lLnVwZGF0ZUNvbmZpZyhhKTtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbdzFdO2lmKFBhKGQpJiZQYShkLnNo''@;'; put 'put ''ZWV0TmFtZSkmJmQuc2hlZXROYW1lIT09dGhpcy5zaGVldE5hbWUmJnRoaXMuc3dpdGNoU2hlZXQoZC5zaGVldE5hbWUpLCFsLmRhdGEmJm51bGw9PT10aGlzLnNoZWV0TmFtZSl7Y29uc3QgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3cxXS5zaGVldE5hbWU7aWYoaCYmdGhpcy5lbmdpbmUu''@;'; put 'put ''ZG9lc1NoZWV0RXhpc3QoaCkpdGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk7ZWxzZXtjb25zdCBmPXRoaXMuYWRkU2hlZXQoaD8/dm9pZCAwLHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpKTt6cyhLcyx0aGlzLGlBKS5jYWxsKHRoaXMsZil9fXN1cGVyLnVwZGF0ZVBsdWdp''@;'; put 'put ''bihsKX1kZXN0cm95KCl7azkockEsdGhpcykuZm9yRWFjaChsPT57dmFyIGE7bGV0W2QsaF09bDtyZXR1cm4gbnVsbD09PShhPXRoaXMuZW5naW5lKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vZmYoZCxoKX0pLHU2KHJBLHRoaXMsbnVsbCksTjVlKHRoaXMuZW5naW5lLHRoaXMuaG90KSx0aGlz''@;'; put 'put ''LmVuZ2luZT1udWxsLHN1cGVyLmRlc3Ryb3koKX1hZGRTaGVldChsLGEpe2lmKFBhKGEpJiYhRTNlKGEpKXJldHVybiBpbCgiVGhlIHByb3ZpZGVkIGRhdGEgc2hvdWxkIGJlIGFuIGFycmF5IG9mIGFycmF5cy4iKSwhMTtpZihudWxsIT1sJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChs''@;'; put 'put ''KSlyZXR1cm4gaWwoIlNoZWV0IHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgYWxyZWFkeSBleGlzdHMuIiksITE7dHJ5e2NvbnN0IGQ9dGhpcy5lbmdpbmUuYWRkU2hlZXQobD8/dm9pZCAwKTtyZXR1cm4gYSYmdGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuZW5naW5lLmdldFNoZWV0''@;'; put 'put ''SWQoZCksYSksZH1jYXRjaChkKXtyZXR1cm4gaWwoZC5tZXNzYWdlKSwhMX19c3dpdGNoU2hlZXQobCl7aWYoIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGwpKXJldHVybiB2b2lkIE4kKGBUaGUgc2hlZXQgbmFtZWQgXGAke2x9XGAgZG9lcyBub3QgZXhpc3QsIHN3aXRjaCBhYm9ydGVk''@;'; put 'put ''LmApO3pzKEtzLHRoaXMsaUEpLmNhbGwodGhpcyxsKTtjb25zdCBhPXRoaXMuZW5naW5lLmdldFNoZWV0U2VyaWFsaXplZCh0aGlzLnNoZWV0SWQpO2EubGVuZ3RoPjAmJnRoaXMuaG90LmxvYWREYXRhKGEsYCR7cDEodzEpfS5zd2l0Y2hTaGVldGApfWdldENlbGxUeXBlKGwsYSl7bGV0IGQ9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZDtjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO3JldHVybiBudWxsIT09aCYmbnVsbCE9PWY/dGhpcy5l''@;'; put 'put ''bmdpbmUuZ2V0Q2VsbFR5cGUoe3NoZWV0OmQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKX0pOiJFTVBUWSJ9aXNGb3JtdWxhQ2VsbFR5cGUobCxh''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5lbmdpbmUuZG9lc0NlbGxIYXZlRm9ybXVsYSh7c2hlZXQ6YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgo''@;'; put 'put ''bCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSl9cmVuZGVyRGVwZW5kZW50U2hlZXRzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD1uZXcgU2V0O2wu''@;'; put 'put ''Zm9yRWFjaChoPT57dmFyIGY7Y29uc3Qgdj1udWxsPT1ofHxudWxsPT09KGY9aC5hZGRyZXNzKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5zaGVldDt2b2lkIDAhPT12JiYoZC5oYXModil8fGQuYWRkKHYpKX0pLEg1ZSh0aGlzLmVuZ2luZSkuZm9yRWFjaCgoaCxmKT0+e3ZhciB2OyhhfHxmIT09''@;'; put 'put ''dGhpcy5zaGVldElkKSYmZC5oYXMoZikmJihoLnJlbmRlcigpLG51bGw9PT0odj1oLnZpZXcpfHx2b2lkIDA9PT12fHx2LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0pfXZhbGlkYXRlRGVwZW5kZW50Q2VsbHMobCl7Y29uc3QgZD1mPT57dmFyIHY7Y29uc3R7cm93Ok0sY29sOkQsc2hlZXQ6Wn09''@;'; put 'put ''bnVsbCE9PSh2PWY/LmFkZHJlc3MpJiZ2b2lkIDAhPT12P3Y6e307cmV0dXJuIFBhKFopP2Ake1p9OiR7TX14JHtEfWA6IiJ9LGg9bmV3IFNldCgoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdKS5tYXAoZj0+ZChmKSkpO2wuZm9yRWFj''@;'; put 'put ''aChmPT57dmFyIHYsTTtjb25zdHtyb3c6RCxjb2w6Wn09bnVsbCE9PSh2PWYuYWRkcmVzcykmJnZvaWQgMCE9PXY/djp7fTtpZighMT09PVBhKEQpfHwhMT09PVBhKFopfHxEPj10aGlzLmhvdC5jb3VudFJvd3MoKXx8Wj49dGhpcy5ob3QuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IHJlPW51''@;'; put 'put ''bGw9PWZ8fG51bGw9PT0oTT1mLmFkZHJlc3MpfHx2b2lkIDA9PT1NP3ZvaWQgMDpNLnNoZWV0LGNlPWQoZik7aWYodm9pZCAwIT09cmUmJiFoLmhhcyhjZSkpe2NvbnN0IGJlPUg1ZSh0aGlzLmVuZ2luZSkuZ2V0KHJlKTtpZighYmUpcmV0dXJuO2JlLnZhbGlkYXRlQ2VsbChiZS5nZXREYXRh''@;'; put 'put ''QXRDZWxsKEQsWiksYmUuZ2V0Q2VsbE1ldGEoRCxaKSwoKT0+e30pfX0pfXN5bmNDaGFuZ2VXaXRoRW5naW5lKGwsYSxkKXtjb25zdCBoPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZklu''@;'; put 'put ''ZGV4RnJvbVZpc3VhbEluZGV4KGEpLHNoZWV0OnRoaXMuc2hlZXRJZH07aWYoIXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKGgpKXJldHVybiB2b2lkIGlsKGBOb3QgcG9zc2libGUgdG8gc2V0IGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KGgpfWApO2Nv''@;'; put 'put ''bnN0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKTtyZXR1cm4geFEoZCxmLnR5cGUpJiYoQjVlKGQsZi5kYXRlRm9ybWF0KT9kPWo1ZShkLGYuZGF0ZUZvcm1hdCk6ITE9PT1mdW5jdGlvbiBwMnQoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiZjLnN0YXJ0c1dpdGgoIj0iKX0oZCkm''@;'; put 'put ''JihkPWAnJHtkfWApKSx0aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoaCxkKX19ZnVuY3Rpb24gaUEoYyl7dGhpcy5zaGVldE5hbWU9Yyx0aGlzLnNoZWV0SWQ9dGhpcy5lbmdpbmUuZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSl9ZnVuY3Rpb24gRDJ0KGMsbCxhKXtjb25zdCBkPXRoaXMu''@;'; put 'put ''aG90LnByb3BUb0NvbChhKTtpZih0aGlzLmlzRm9ybXVsYUNlbGxUeXBlKGwsZCkpe2NvbnN0IGg9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCks''@;'; put 'put ''c2hlZXQ6dGhpcy5zaGVldElkfSxmPXRoaXMuaG90LmdldENlbGxNZXRhKGwsZCk7bGV0IHY9dGhpcy5lbmdpbmUuZ2V0Q2VsbFZhbHVlKGgpO3JldHVybiJkYXRlIj09PWYudHlwZSYmbTEodikmJih2PXo1ZSh2LGYuZGF0ZUZvcm1hdCkpLCJvYmplY3QiPT10eXBlb2YgdiYmbnVsbCE9PXY/''@;'; put 'put ''di52YWx1ZTp2fXJldHVybiBjfWZ1bmN0aW9uIEkydChjLGwsYSl7Y29uc3R7cm93OmQsY29sOmh9PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmYsY29sOnZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCkse3JvdzpNLGNvbDpEfT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpaLGNvbDpy''@;'; put 'put ''ZX09YS5nZXRCb3R0b21FbmRDb3JuZXIoKSxjZT17c3RhcnQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCksc2hlZXQ6dGhpcy5zaGVldElkfSxl''@;'; put 'put ''bmQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodiksc2hlZXQ6dGhpcy5zaGVldElkfX0sYmU9e3N0YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2Vy''@;'; put 'put ''LmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoTSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KEQpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoWiksY29s''@;'; put 'put ''OnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHJlKSxzaGVldDp0aGlzLnNoZWV0SWR9fTtpZighMT09PXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKGJlKSlyZXR1cm4hMTtjb25zdCBFZT10aGlzLmVuZ2luZS5nZXRGaWxs''@;'; put 'put ''UmFuZ2VEYXRhKGNlLGJlKSx7cm93OkJlLGNvbDpxZX09Y2Uuc3RhcnQse3JvdzpydCxjb2w6cHR9PWNlLmVuZCxkdD1ydC1CZSsxLEp0PXB0LXFlKzE7Zm9yKGxldCB2bj0wO3ZuPEVlLmxlbmd0aDt2bis9MSlmb3IobGV0IENuPTA7Q248RWVbdm5dLmxlbmd0aDtDbis9MSl7Y29uc3QgdG49''@;'; put 'put ''RWVbdm5dW0NuXSxNbj1CZSt2biVkdCxDcj1xZStDbiVKdCxHcj10aGlzLmhvdC5nZXRDZWxsTWV0YShNbixDcik7eFEodG4sR3IudHlwZSkmJih0bi5zdGFydHNXaXRoKCInIik/RWVbdm5dW0NuXT10bi5zbGljZSgxKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoTW4sQ3IsdGhpcy5z''@;'; put 'put ''aGVldElkKSYmKEVlW3ZuXVtDbl09ZzJ0KHRuLEdyLmRhdGVGb3JtYXQpKSl9cmV0dXJuIEVlfWZ1bmN0aW9uIEc1ZShjLGwpeyhhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06IiIpLmluY2x1ZGVzKHAxKHcxKSl8fHU2KHJILHRoaXMsX2Mo''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kYXRhKSl9ZnVuY3Rpb24gUjJ0KCl7aWYoazkockgsdGhpcykpcmV0dXJuIHZvaWQgdGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk7Y29uc3QgYz10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKTtjLmZvckVhY2goKGEsZCk9PnthLmZv''@;'; put 'put ''ckVhY2goKGgsZik9Pntjb25zdCB2PXRoaXMuaG90LmdldENlbGxNZXRhKGQsZix7c2tpcE1ldGFFeHRlbnNpb246ITB9KSxNPXYuZGF0ZUZvcm1hdDt4UShoLHYudHlwZSkmJihCNWUoaCxNKT9jW2RdW2ZdPWo1ZShoLE0pOmguc3RhcnRzV2l0aCgiPSIpfHwoY1tkXVtmXT1gJyR7aH1gKSl9''@;'; put 'put ''KX0pLHU2KEJnLHRoaXMsITApO2NvbnN0IGw9dGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxjKTt0aGlzLmluZGV4U3luY2VyLnNldHVwU3luY0VuZHBvaW50KHRoaXMuZW5naW5lLHRoaXMuc2hlZXRJZCksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMobCksdTYo''@;'; put 'put ''QmcsdGhpcywhMSl9ZnVuY3Rpb24gJDVlKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiO2lmKGEuaW5jbHVkZXMocDEodzEpKSlyZXR1cm47Y29uc3QgZD1mdW5jdGlvbiBkMnQoYyxsKXtyZXR1cm4oX2MobCl8fCFj''@;'; put 'put ''LmRvZXNTaGVldEV4aXN0KGwpKSYmKGw9Yy5hZGRTaGVldChsKSksbH0odGhpcy5lbmdpbmUsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt3MV0uc2hlZXROYW1lKTtpZih6cyhLcyx0aGlzLGlBKS5jYWxsKHRoaXMsZCksInVwZGF0ZVNldHRpbmdzIiE9PWEpaWYoazkockgsdGhpcykpdGhpcy5z''@;'; put 'put ''d2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk7ZWxzZXtjb25zdCBoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpO2lmKHRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVwbGFjZVNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsaCkpe3U2KEJnLHRoaXMsITApO2NvbnN0IGY9dGhpcy5l''@;'; put 'put ''bmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxoKTt0aGlzLmluZGV4U3luY2VyLnNldHVwU3luY0VuZHBvaW50KHRoaXMuZW5naW5lLHRoaXMuc2hlZXRJZCksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZiksdTYoQmcsdGhpcywhMSl9fX1mdW5jdGlvbiBMMnQoYyxsLGEs''@;'; put 'put ''ZCl7aWYoImdldCIhPT1kfHxrOShCZyx0aGlzKXx8bnVsbD09PXRoaXMuc2hlZXROYW1lfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpKXJldHVybjtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGMpO2lmKG51bGw9PT1ofHxudWxsPT09bClyZXR1cm47''@;'; put 'put ''Y29uc3QgZj10aGlzLmdldENlbGxUeXBlKGgsbCk7aWYoIlZBTFVFIj09PWZ8fCJFTVBUWSI9PT1mKXJldHVybiB2b2lkKGEudmFsdWU9ZnVuY3Rpb24gZjJ0KGMpe3JldHVybiBmdW5jdGlvbiBoMnQoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiYiJyI9PT1jLmNoYXJBdCgwKSYmIj0i''@;'; put 'put ''PT09Yy5jaGFyQXQoMSl9KGMpP2Muc3Vic3RyKDEpOmN9KGEudmFsdWUpKTtjb25zdCB2PXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLHNoZWV0''@;'; put 'put ''OnRoaXMuc2hlZXRJZH07bGV0IE09dGhpcy5lbmdpbmUuZ2V0Q2VsbFZhbHVlKHYpO2NvbnN0IEQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoaCxsLHtza2lwTWV0YUV4dGVuc2lvbjohMH0pOyJkYXRlIj09PUQudHlwZSYmbTEoTSkmJihNPXo1ZShNLEQuZGF0ZUZvcm1hdCkpLGEudmFsdWU9Im9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBNJiZudWxsIT09TT9NLnZhbHVlOk19ZnVuY3Rpb24gTzJ0KGMsbCxhLGQpe2lmKCJnZXQiIT09ZHx8azkoQmcsdGhpcyl8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47Y29uc3Qg''@;'; put 'put ''aD10aGlzLmhvdC50b1Zpc3VhbFJvdyhjKSxmPXRoaXMuaG90LnByb3BUb0NvbChsKTtpZihudWxsPT09aHx8bnVsbD09PWYpcmV0dXJuO2NvbnN0IHY9dGhpcy5nZXRDZWxsVHlwZShoLGYpO2lmKCJWQUxVRSI9PT12fHwiRU1QVFkiPT09dilyZXR1cm47Y29uc3QgTT10aGlzLmVuZ2luZS5n''@;'; put 'put ''ZXRTaGVldERpbWVuc2lvbnModGhpcy5lbmdpbmUuZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSkpO2lmKDA9PT1NLndpZHRoJiYwPT09TS5oZWlnaHQpcmV0dXJuO2NvbnN0IEQ9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxjb2w6dGhpcy5j''@;'; put 'put ''b2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksc2hlZXQ6dGhpcy5zaGVldElkfTthLnZhbHVlPXRoaXMuZW5naW5lLmdldENlbGxTZXJpYWxpemVkKEQpfWZ1bmN0aW9uIEs1ZShjLGwpe2lmKGx3KGwpKXJldHVybjtjb25zdCBhPVtdLGQ9W10saD10aGlzLmVu''@;'; put 'put ''Z2luZS5iYXRjaCgoKT0+e2MuZm9yRWFjaChmPT57bGV0W3YsTSwsRF09Zjtjb25zdCBaPXRoaXMuaG90LnByb3BUb0NvbChNKSxyZT10aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLGNlPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oWiksYmU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0''@;'; put 'put ''SGZJbmRleEZyb21WaXN1YWxJbmRleCh2KSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoWiksc2hlZXQ6dGhpcy5zaGVldElkfTtudWxsIT09cmUmJm51bGwhPT1jZT90aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKHYsWixEKTphLnB1c2goW3Ys''@;'; put 'put ''WixEXSksZC5wdXNoKHthZGRyZXNzOmJlfSl9KX0pO2EubGVuZ3RoJiZ0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLCgpPT57Y29uc3QgZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2EuZm9yRWFjaCh2PT57bGV0W00sRCxaXT12O3RoaXMuc3luY0NoYW5nZVdpdGhFbmdpbmUo''@;'; put 'put ''TSxELFopfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmLCEwKX0pLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGgpLHRoaXMudmFsaWRhdGVEZXBlbmRlbnRDZWxscyhoLGQpfWZ1bmN0aW9uIFAydChjLGwpe2lmKGx3KGwpKXJldHVybjtjb25zdCBhPVtdLGQ9W107Yy5mb3JF''@;'; put 'put ''YWNoKGg9PntsZXRbZix2LCxNXT1oO2NvbnN0IEQ9dGhpcy5ob3QucHJvcFRvQ29sKHYpO2lmKCFtMShEKSlyZXR1cm47Y29uc3QgWj17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRl''@;'; put 'put ''eEZyb21WaXN1YWxJbmRleChEKSxzaGVldDp0aGlzLnNoZWV0SWR9O3RoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKFopPyhkLnB1c2goe2FkZHJlc3M6Wn0pLGEucHVzaCguLi50aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoWixNKSkpOmlsKGBOb3QgcG9zc2li''@;'; put 'put ''bGUgdG8gc2V0IHNvdXJjZSBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShaKX1gKX0pLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGEpLHRoaXMudmFsaWRhdGVEZXBlbmRlbnRDZWxscyhhLGQpfWZ1bmN0aW9uIEYydChjLGwpe2xldCBhPXRoaXMucm93QXhpc1N5bmNlci5nZXRI''@;'; put 'put ''ZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpO2lmKGM+PXRoaXMuaG90LmNvdW50Um93cygpJiYoYT1jKSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRSb3dzKHRoaXMu''@;'; put 'put ''c2hlZXRJZCxbYSxsXSkpcmV0dXJuITF9ZnVuY3Rpb24gSDJ0KGMsbCl7bGV0IGE9dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyk7aWYoYz49dGhpcy5ob3QuY291bnRDb2xzKCkmJihhPWMpLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2lu''@;'; put 'put ''ZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb0FkZENvbHVtbnModGhpcy5zaGVldElkLFthLGxdKSlyZXR1cm4hMX1mdW5jdGlvbiBOMnQoYyxsLGEpe3JldHVybiExIT09dGhpcy5yb3dBeGlzU3luY2VyLnNldFJlbW92ZWRIZklu''@;'; put 'put ''ZGV4ZXMoYSkuZXZlcnkoZj0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVSb3dzKHRoaXMuc2hlZXRJZCxbZiwxXSkpJiZ2b2lkIDB9ZnVuY3Rpb24gVjJ0KGMsbCxhKXtyZXR1cm4hMSE9PXRoaXMuY29sdW1uQXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGEpLmV2ZXJ5''@;'; put 'put ''KGY9PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2YsMV0pKSYmdm9pZCAwfWZ1bmN0aW9uIEIydChjLGwsYSl7aWYobHcoYSkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5lbmdpbmUuYWRkUm93cyh0aGlzLnNoZWV0SWQsW3RoaXMucm93QXhpc1N5''@;'; put 'put ''bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpLGxdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhkKX1mdW5jdGlvbiBqMnQoYyxsLGEpe2lmKGx3KGEpKXJldHVybjtjb25zdCBkPXRoaXMuZW5naW5lLmFkZENvbHVtbnModGhpcy5zaGVldElkLFt0aGlzLmNvbHVtbkF4aXNT''@;'; put 'put ''eW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKSxsXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZCl9ZnVuY3Rpb24gejJ0KGMsbCxhLGQpe2lmKGx3KGQpKXJldHVybjtjb25zdCBoPXRoaXMucm93QXhpc1N5bmNlci5nZXRSZW1vdmVkSGZJbmRleGVzKCkuc29ydCgodixN''@;'; put 'put ''KT0+TS12KSxmPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57aC5mb3JFYWNoKHY9Pnt0aGlzLmVuZ2luZS5yZW1vdmVSb3dzKHRoaXMuc2hlZXRJZCxbdiwxXSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYpfWZ1bmN0aW9uIFUydChjLGwsYSxkKXtpZihsdyhkKSlyZXR1cm47Y29u''@;'; put 'put ''c3QgaD10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKHYsTSk9Pk0tdiksZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2guZm9yRWFjaCh2PT57dGhpcy5lbmdpbmUucmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3YsMV0pfSl9KTt0aGlzLnJlbmRl''@;'; put 'put ''ckRlcGVuZGVudFNoZWV0cyhmKX1mdW5jdGlvbiBaMnQoYyxsLGEpe3ZhciBkO3U2KEJnLHRoaXMsITApO2NvbnN0IGg9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KGEsMCxhKygobnVsbD09PShkPWwuX19jaGlsZHJlbil8fHZvaWQgMD09PWQ/dm9pZCAwOmQubGVuZ3RoKXx8MCksdGhp''@;'; put 'put ''cy5ob3QuY291bnRTb3VyY2VDb2xzKCkpO3U2KEJnLHRoaXMsITEpLGguZm9yRWFjaCgoZix2KT0+e2YuZm9yRWFjaCgoTSxEKT0+e3RoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyh7Y29sOkQscm93OmErdixzaGVldDp0aGlzLnNoZWV0SWR9LFtbTV1dKX0pfSl9ZnVuY3Rpb24gVzJ0KGMp''@;'; put 'put ''e3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixjKX1mdW5jdGlvbiBZMnQoYyxsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIsYyxsKX1mdW5jdGlvbiBHMnQoYyxsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJOYW1l''@;'; put 'put ''ZEV4cHJlc3Npb25SZW1vdmVkIixjLGwpfWZ1bmN0aW9uICQydChjKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldEFkZGVkIixjKX1mdW5jdGlvbiBLMnQoYyxsKXt6cyhLcyx0aGlzLGlBKS5jYWxsKHRoaXMsbCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW5hbWVkIixj''@;'; put 'put ''LGwpfWZ1bmN0aW9uIHEydChjLGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVtb3ZlZCIsYyxsKX1mdW5jdGlvbiBxNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNl''@;'; put 'put ''IG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEQ5KGMsbCl7cmV0dXJuIGMuZ2V0KGQ2KGMsbCkpfWZ1bmN0aW9uIFg1ZShjLGwsYSl7cmV0dXJuIGMuc2V0KGQ2KGMsbCksYSksYX1mdW5jdGlvbiBkNihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVDb2x1bW5zIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0''@;'; put 'put ''ZXIoImFmdGVySGlkZUNvbHVtbnMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlQ29sdW1ucyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuaGlkZUNvbHVtbnMiKTtjb25zdCBKNWU9ImhpZGRlbkNvbHVtbnMiO3ZhciBacD1uZXcgV2Vha01h''@;'; put 'put ''cCxJOT1uZXcgV2Vha1NldDtjbGFzcyBuZnQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gUTJ0KGMsbCl7cTVlKGMsbCksbC5hZGQoYyl9KHRoaXMsSTkpLGZ1bmN0aW9uIGVmdChjLGwsYSl7cTVlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxa''@;'; put 'put ''cCxudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gSjVlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMxMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57Y29weVBhc3RlRW5hYmxlZDohMCxpbmRpY2F0b3JzOiExLGNvbHVtbnM6W119''@;'; put 'put ''fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtKNWVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoWDVlKFpwLHRoaXMsbmV3IGZQKSxEOShacCx0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5kNihJOSx0aGlzLGxmdCkuY2Fs''@;'; put 'put ''bCh0aGlzKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLEQ5KFpwLHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5l''@;'; put 'put ''dyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZDYoSTksbCxzZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsKGEsZCxoKT0+ZDYoSTksdGhpcyxpZnQpLmNhbGwodGhpcyxhLGQsaCkpLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''bW9kaWZ5Q29sV2lkdGgiLChhLGQpPT5kNihJOSx0aGlzLHJmdCkuY2FsbCh0aGlzLGEsZCksMiksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3Vt''@;'; put 'put ''ZW50c1toXTtyZXR1cm4gZDYoSTksbCxvZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29weWFibGVSYW5nZSIsYT0+ZDYoSTksdGhpcyxhZnQpLmNhbGwodGhpcyxhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdp''@;'; put 'put ''bigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksdGhpcy5yZXNldENlbGxzTWV0YSgpfXNo''@;'; put 'put ''b3dDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPUQ5KFpwLHRoaXMpLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxlbmd0aD4wO2QmJnYmJihZbihsLm1hcChaPT50aGlzLmhvdC50b1BoeXNp''@;'; put 'put ''Y2FsQ29sdW1uKFopKSxaPT57ZltaXT0hMX0pLGg9cXUoZiwoWixyZSxjZSk9PihyZSYmWi5wdXNoKHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGNlKSksWiksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmhpZGVDb2x1bW5zIixhLGgsZCYmdikmJihkJiZ2JiZEOShacCx0''@;'; put 'put ''aGlzKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmhpZGVDb2x1bW5zIixhLGgsZCYmdixkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXNob3dDb2x1bW4oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxh''@;'; put 'put ''PW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnNob3dDb2x1bW5zKGEpfWhpZGVDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9tKG5ldyBT''@;'; put 'put ''ZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlkZUNvbHVtbnMiLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCx2PT57RDkoWnAsdGhpcykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4o''@;'; put 'put ''diksITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJIaWRlQ29sdW1ucyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX1oaWRlQ29sdW1uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07''@;'; put 'put ''dGhpcy5oaWRlQ29sdW1ucyhhKX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIHlzKEQ5KFpwLHRoaXMpLmdldEhpZGRlbkluZGV4ZXMoKSxsPT50aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKSl9aXNIaWRkZW4obCl7cmV0dXJuIEQ5KFpwLHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhv''@;'; put 'put ''dC50b1BoeXNpY2FsQ29sdW1uKGwpKXx8ITF9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiEhKEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPjApJiZsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9cmVzZXRDZWxs''@;'; put 'put ''c01ldGEoKXtZbih0aGlzLmhvdC5nZXRDZWxsc01ldGEoKSxsPT57bC5za2lwQ29sdW1uT25QYXN0ZT0hMX0pfWRlc3Ryb3koKXtYNWUoWnAsdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHJmdChjLGwpe3JldHVybiB0aGlzLmlzSGlkZGVuKGwpPzA6dGhpcy5nZXRTZXR0''@;'; put 'put ''aW5nKCJpbmRpY2F0b3JzIikmJih0aGlzLmlzSGlkZGVuKGwrMSl8fHRoaXMuaXNIaWRkZW4obC0xKSkmJiJudW1iZXIiPT10eXBlb2YgYyYmdGhpcy5ob3QuaGFzQ29sSGVhZGVycygpP2MrMTU6dm9pZCAwfWZ1bmN0aW9uIGlmdChjLGwsYSl7aWYoITE9PT10aGlzLmdldFNldHRpbmcoImNv''@;'; put 'put ''cHlQYXN0ZUVuYWJsZWQiKSYmdGhpcy5pc0hpZGRlbihsKSYmKGEuc2tpcENvbHVtbk9uUGFzdGU9ITApLHRoaXMuaXNIaWRkZW4obC0xKSlhLmNsYXNzTmFtZT1hLmNsYXNzTmFtZXx8IiIsLTE9PT1hLmNsYXNzTmFtZS5pbmRleE9mKCJhZnRlckhpZGRlbkNvbHVtbiIpJiYoYS5jbGFzc05h''@;'; put 'put ''bWUrPSIgYWZ0ZXJIaWRkZW5Db2x1bW4iKTtlbHNlIGlmKGEuY2xhc3NOYW1lKXtjb25zdCBkPWEuY2xhc3NOYW1lLnNwbGl0KCIgIik7aWYoZC5sZW5ndGg+MCl7Y29uc3QgaD1kLmluZGV4T2YoImFmdGVySGlkZGVuQ29sdW1uIik7aD4tMSYmZC5zcGxpY2UoaCwxKSxhLmNsYXNzTmFtZT1k''@;'; put 'put ''LmpvaW4oIiAiKX19fWZ1bmN0aW9uIGFmdChjKXtpZih0aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSlyZXR1cm4gYztjb25zdCBsPVtdLGE9KGQsaCxmLHYpPT57bC5wdXNoKHtzdGFydFJvdzpkLGVuZFJvdzpoLHN0YXJ0Q29sOmYsZW5kQ29sOnZ9KX07cmV0dXJuIFluKGMs''@;'; put 'put ''ZD0+e2xldCBoPSEwLGY9MDtHYShkLnN0YXJ0Q29sLGQuZW5kQ29sLHY9Pnt0aGlzLmlzSGlkZGVuKHYpPyhofHxhKGQuc3RhcnRSb3csZC5lbmRSb3csZix2LTEpLGg9ITApOihoJiYoZj12KSx2PT09ZC5lbmRDb2wmJmEoZC5zdGFydFJvdyxkLmVuZFJvdyxmLHYpLGg9ITEpfSl9KSxsfWZ1''@;'; put 'put ''bmN0aW9uIG9mdChjLGwpe2lmKCF0aGlzLmdldFNldHRpbmcoImluZGljYXRvcnMiKXx8YzwwKXJldHVybjtjb25zdCBhPVtdO2M+PTEmJnRoaXMuaXNIaWRkZW4oYy0xKSYmYS5wdXNoKCJhZnRlckhpZGRlbkNvbHVtbiIpLGM8dGhpcy5ob3QuY291bnRDb2xzKCktMSYmdGhpcy5pc0hpZGRl''@;'; put 'put ''bihjKzEpJiZhLnB1c2goImJlZm9yZUhpZGRlbkNvbHVtbiIpLFRpKGwsYSl9ZnVuY3Rpb24gc2Z0KGMpe2MuaXRlbXMucHVzaCh7bmFtZTpzc30sZnVuY3Rpb24gWDJ0KGMpe3JldHVybntrZXk6ImhpZGRlbl9jb2x1bW5zX2hpZGUiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRM''@;'; put 'put ''YXN0KCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFssZCwsaF09bDtkLWghPTAmJihhPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUnEsYSl9LGNhbGxiYWNrKCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPU1h''@;'; put 'put ''dGgubWF4KE1hdGgubWluKGwuY29sLGEuY29sKSwwKSxoPU1hdGgubWF4KGwuY29sLGEuY29sKSxmPVtdO2ZvcihsZXQgRD1kO0Q8PWg7RCs9MSlmLnB1c2goRCk7Yy5oaWRlQ29sdW1ucyhmKTtjb25zdCBNPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4''@;'; put 'put ''KGZbZi5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihNKSYmTT49MD90aGlzLnNlbGVjdENvbHVtbnMoTSk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7cmV0dXJuISh0''@;'; put 'put ''aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfX19KHRoaXMpLGZ1bmN0aW9uIEoydChjKXtjb25zdCBsPVtdO3JldHVybntrZXk6ImhpZGRlbl9jb2x1bW5zX3Nob3ciLG5hbWUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5nZXRUcmFuc2xhdGVkUGhyYXNlKExxLGwubGVuZ3RoPjE/MTowKX0sY2FsbGJhY2soKXt2YXIgYSxkO2lmKDA9PT1sLmxlbmd0aClyZXR1cm47bGV0IGg9bFswXSxmPWxbbC5sZW5ndGgtMV07aD1udWxsIT09KGE9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVu''@;'; put 'put ''SW5kZXgoaC0xLC0xKSkmJnZvaWQgMCE9PWE/YTowLGY9bnVsbCE9PShkPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYrMSwxKSkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmNvdW50Q29scygpLTEsYy5zaG93Q29sdW1ucyhsKSx0aGlzLnJlbmRlcigpLHRo''@;'; put 'put ''aXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxmLWgrMT09PXRoaXMuY291bnRDb2xzKCl8fHRoaXMuc2VsZWN0Q29sdW1ucyhoLGYpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtjb25zdCBhPXlzKGMuZ2V0SGlkZGVuQ29sdW1ucygpLGNlPT50aGlzLnRvUGh5c2ljYWxDb2x1bW4oY2UpKTtp''@;'; put 'put ''ZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5ndGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGg9ZC5nZXRUb3BTdGFy''@;'; put 'put ''dENvcm5lcigpLmNvbCxmPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLHY9dGhpcy5jb2x1bW5JbmRleE1hcHBlcixNPXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxEPXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKSxaPXYuZ2V0Tm90VHJpbW1lZEluZGV4ZXMo''@;'; put 'put ''KSxyZT1bXTtpZihoIT09Zil7aWYoZi1oKzE+RC1NKzEpe2NvbnN0IEVlPVouc2xpY2UoaCxmKzEpO3JlLnB1c2goLi4uRWUuZmlsdGVyKEJlPT5hLmluY2x1ZGVzKEJlKSkpfX1lbHNlIGlmKDA9PT1NJiZNPGgpcmUucHVzaCguLi5aLnNsaWNlKDAsaCkpO2Vsc2UgaWYobnVsbD09PU0pcmUu''@;'; put 'put ''cHVzaCguLi5aLnNsaWNlKDAsdGhpcy5jb3VudENvbHMoKSkpO2Vsc2V7Y29uc3QgY2U9dGhpcy5jb3VudENvbHMoKS0xO0Q9PT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2UsLTEpKSYmY2U+ZiYmcmUucHVzaCguLi5aLnNsaWNl''@;'; put 'put ''KGYrMSkpfXJldHVybiBZbihyZSxjZT0+e2wucHVzaCh0aGlzLnRvVmlzdWFsQ29sdW1uKGNlKSl9KSwwPT09bC5sZW5ndGh9fX0odGhpcykpfWZ1bmN0aW9uIGxmdCgpe2NvbnN0IGM9dGhpcy5nZXRTZXR0aW5nKCJjb2x1bW5zIik7QXJyYXkuaXNBcnJheShjKSYmdGhpcy5oaWRlQ29sdW1u''@;'; put 'put ''cyhjKX1mdW5jdGlvbiBRNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFI5KGMsbCl7cmV0dXJuIGMuZ2V0KGg2KGMsbCkpfWZ1bmN0''@;'; put 'put ''aW9uIGVtZShjLGwsYSl7cmV0dXJuIGMuc2V0KGg2KGMsbCksYSksYX1mdW5jdGlvbiBoNihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVSb3dzIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVySGlkZVJvd3MiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlUm93''@;'; put 'put ''cyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuaGlkZVJvd3MiKTtjb25zdCB0bWU9ImhpZGRlblJvd3MiO3ZhciBXcD1uZXcgV2Vha01hcCxMOT1uZXcgV2Vha1NldDtjbGFzcyBwZnQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVu''@;'; put 'put ''Y3Rpb24gZGZ0KGMsbCl7UTVlKGMsbCksbC5hZGQoYyl9KHRoaXMsTDkpLGZ1bmN0aW9uIGhmdChjLGwsYSl7UTVlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxXcCxudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdG1lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0''@;'; put 'put ''dXJuIDMyMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57Y29weVBhc3RlRW5hYmxlZDohMCxpbmRpY2F0b3JzOiExLHJvd3M6W119fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0bWVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhp''@;'; put 'put ''cy5lbmFibGVkfHwoZW1lKFdwLHRoaXMsbmV3IGZQKSxSOShXcCx0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5oNihMOSx0aGlzLF9mdCkuY2FsbCh0aGlzKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLFI5KFdwLHRoaXMpKSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gaDYoTDksbCx5ZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsKGEsZCxoKT0+aDYoTDksdGhpcyxtZnQpLmNhbGwodGhpcyxhLGQsaCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwoYSxkKT0+aDYoTDksdGhpcyxnZnQpLmNhbGwodGhpcyxhLGQpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Um93''@;'; put 'put ''SGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBoNihMOSxsLGJmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixhPT5o''@;'; put 'put ''NihMOSx0aGlzLHZmdCkuY2FsbCh0aGlzLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigp''@;'; put 'put ''LHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd1Jvd3MobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9UjkoV3As''@;'; put 'put ''dGhpcykuZ2V0VmFsdWVzKCkuc2xpY2UoKSx2PWwubGVuZ3RoPjA7ZCYmdiYmKFluKGwubWFwKFo9PnRoaXMuaG90LnRvUGh5c2ljYWxSb3coWikpLFo9PntmW1pdPSExfSksaD1xdShmLChaLHJlLGNlKT0+KHJlJiZaLnB1c2godGhpcy5ob3QudG9WaXN1YWxSb3coY2UpKSxaKSxbXSkpLCEx''@;'; put 'put ''IT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuaGlkZVJvd3MiLGEsaCxkJiZ2KSYmKGQmJnYmJlI5KFdwLHRoaXMpLnNldFZhbHVlcyhmKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmhpZGVSb3dzIixhLGgsZCYmdixkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXNob3dSb3coKXtmb3Io''@;'; put 'put ''dmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnNob3dSb3dzKGEpfWhpZGVSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Sb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1B''@;'; put 'put ''cnJheS5mcm9tKG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlkZVJvd3MiLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCx2PT57UjkoV3AsdGhpcykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5''@;'; put 'put ''c2ljYWxSb3codiksITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJIaWRlUm93cyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX1oaWRlUm93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNb''@;'; put 'put ''ZF07dGhpcy5oaWRlUm93cyhhKX1nZXRIaWRkZW5Sb3dzKCl7cmV0dXJuIHlzKFI5KFdwLHRoaXMpLmdldEhpZGRlbkluZGV4ZXMoKSxsPT50aGlzLmhvdC50b1Zpc3VhbFJvdyhsKSl9aXNIaWRkZW4obCl7cmV0dXJuIFI5KFdwLHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1Bo''@;'; put 'put ''eXNpY2FsUm93KGwpKXx8ITF9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Um93cygpO3JldHVybiEhKEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPjApJiZsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9cmVzZXRDZWxsc01ldGEoKXtZ''@;'; put 'put ''bih0aGlzLmhvdC5nZXRDZWxsc01ldGEoKSxsPT57bC5za2lwUm93T25QYXN0ZT0hMX0pfWRlc3Ryb3koKXtlbWUoV3AsdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGdmdChjLGwpe3JldHVybiB0aGlzLmlzSGlkZGVuKGwpPzA6Y31mdW5jdGlvbiBtZnQoYyxsLGEpe2lm''@;'; put 'put ''KCExPT09dGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikmJnRoaXMuaXNIaWRkZW4oYykmJihhLnNraXBSb3dPblBhc3RlPSEwKSx0aGlzLmlzSGlkZGVuKGMtMSkpYS5jbGFzc05hbWU9YS5jbGFzc05hbWV8fCIiLC0xPT09YS5jbGFzc05hbWUuaW5kZXhPZigiYWZ0ZXJIaWRk''@;'; put 'put ''ZW5Sb3ciKSYmKGEuY2xhc3NOYW1lKz0iIGFmdGVySGlkZGVuUm93Iik7ZWxzZSBpZihhLmNsYXNzTmFtZSl7Y29uc3QgZD1hLmNsYXNzTmFtZS5zcGxpdCgiICIpO2lmKGQubGVuZ3RoPjApe2NvbnN0IGg9ZC5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpO2g+LTEmJmQuc3BsaWNlKGgsMSks''@;'; put 'put ''YS5jbGFzc05hbWU9ZC5qb2luKCIgIil9fX1mdW5jdGlvbiB2ZnQoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikpcmV0dXJuIGM7Y29uc3QgbD1bXSxhPShkLGgsZix2KT0+e2wucHVzaCh7c3RhcnRSb3c6ZCxlbmRSb3c6aCxzdGFydENvbDpmLGVuZENvbDp2fSl9''@;'; put 'put ''O3JldHVybiBZbihjLGQ9PntsZXQgaD0hMCxmPTA7R2EoZC5zdGFydFJvdyxkLmVuZFJvdyx2PT57dGhpcy5pc0hpZGRlbih2KT8oaHx8YShmLHYtMSxkLnN0YXJ0Q29sLGQuZW5kQ29sKSxoPSEwKTooaCYmKGY9diksdj09PWQuZW5kUm93JiZhKGYsdixkLnN0YXJ0Q29sLGQuZW5kQ29sKSxo''@;'; put 'put ''PSExKX0pfSksbH1mdW5jdGlvbiBiZnQoYyxsKXtpZighdGhpcy5nZXRTZXR0aW5nKCJpbmRpY2F0b3JzIil8fGM8MClyZXR1cm47Y29uc3QgYT1bXTtjPj0xJiZ0aGlzLmlzSGlkZGVuKGMtMSkmJmEucHVzaCgiYWZ0ZXJIaWRkZW5Sb3ciKSxjPHRoaXMuaG90LmNvdW50Um93cygpLTEmJnRo''@;'; put 'put ''aXMuaXNIaWRkZW4oYysxKSYmYS5wdXNoKCJiZWZvcmVIaWRkZW5Sb3ciKSxUaShsLGEpfWZ1bmN0aW9uIHlmdChjKXtjLml0ZW1zLnB1c2goe25hbWU6c3N9LGZ1bmN0aW9uIGNmdChjKXtyZXR1cm57a2V5OiJoaWRkZW5fcm93c19oaWRlIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVj''@;'; put 'put ''dGVkTGFzdCgpO2xldCBhPTA7aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3RbZCwsaF09bDtkLWghPTAmJihhPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoT3EsYSl9LGNhbGxiYWNrKCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxk''@;'; put 'put ''PU1hdGgubWF4KE1hdGgubWluKGwucm93LGEucm93KSwwKSxoPU1hdGgubWF4KGwucm93LGEucm93KSxmPVtdO2ZvcihsZXQgRD1kO0Q8PWg7RCs9MSlmLnB1c2goRCk7Yy5oaWRlUm93cyhmKTtjb25zdCBNPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZb''@;'; put 'put ''Zi5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihNKSYmTT49MD90aGlzLnNlbGVjdFJvd3MoTSk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7cmV0dXJuISh0aGlzLnNl''@;'; put 'put ''bGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfX19KHRoaXMpLGZ1bmN0aW9uIHVmdChjKXtjb25zdCBsPVtdO3JldHVybntrZXk6ImhpZGRlbl9yb3dzX3Nob3ciLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xh''@;'; put 'put ''dGVkUGhyYXNlKFBxLGwubGVuZ3RoPjE/MTowKX0sY2FsbGJhY2soKXt2YXIgYSxkO2lmKDA9PT1sLmxlbmd0aClyZXR1cm47bGV0IGg9bFswXSxmPWxbbC5sZW5ndGgtMV07aD1udWxsIT09KGE9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaC0xLC0xKSkm''@;'; put 'put ''JnZvaWQgMCE9PWE/YTowLGY9bnVsbCE9PShkPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYrMSwxKSkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmNvdW50Um93cygpLTEsYy5zaG93Um93cyhsKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50''@;'; put 'put ''c1NpemUoKSxmLWgrMT09PXRoaXMuY291bnRSb3dzKCl8fHRoaXMuc2VsZWN0Um93cyhoLGYpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtjb25zdCBhPXlzKGMuZ2V0SGlkZGVuUm93cygpLGNlPT50aGlzLnRvUGh5c2ljYWxSb3coY2UpKTtpZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5''@;'; put 'put ''Um93SGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5ndGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGg9ZC5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxmPWQuZ2V0Qm90dG9tRW5kQ29y''@;'; put 'put ''bmVyKCkucm93LHY9dGhpcy5yb3dJbmRleE1hcHBlcixNPXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxEPXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKSxaPXYuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKSxyZT1bXTtpZihoIT09Zil7aWYoZi1oKzE+RC1NKzEpe2Nv''@;'; put 'put ''bnN0IEVlPVouc2xpY2UoaCxmKzEpO3JlLnB1c2goLi4uRWUuZmlsdGVyKEJlPT5hLmluY2x1ZGVzKEJlKSkpfX1lbHNlIGlmKDA9PT1NJiZNPGgpcmUucHVzaCguLi5aLnNsaWNlKDAsaCkpO2Vsc2UgaWYobnVsbD09PU0pcmUucHVzaCguLi5aLnNsaWNlKDAsdGhpcy5jb3VudFJvd3MoKSkp''@;'; put 'put ''O2Vsc2V7Y29uc3QgY2U9dGhpcy5jb3VudFJvd3MoKS0xO0Q9PT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2UsLTEpKSYmY2U+ZiYmcmUucHVzaCguLi5aLnNsaWNlKGYrMSkpfXJldHVybiBZbihyZSxjZT0+e2wucHVzaCh0aGlz''@;'; put 'put ''LnRvVmlzdWFsUm93KGNlKSl9KSwwPT09bC5sZW5ndGh9fX0odGhpcykpfWZ1bmN0aW9uIF9mdCgpe2NvbnN0IGM9dGhpcy5nZXRTZXR0aW5nKCJyb3dzIik7QXJyYXkuaXNBcnJheShjKSYmdGhpcy5oaWRlUm93cyhjKX1mdW5jdGlvbiBubWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFBRKGMsbCl7cmV0dXJuIGMuZ2V0KGlIKGMsbCkpfWZ1bmN0aW9uIEZRKGMsbCxhKXtyZXR1cm4gYy5zZXQoaUgoYyxsKSxhKSxhfWZ1bmN0''@;'; put 'put ''aW9uIGlIKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0''@;'; put 'put ''b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uRnJlZXplIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uRnJlZXplIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtblVuZnJlZXplIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFm''@;'; put 'put ''dGVyQ29sdW1uVW5mcmVlemUiKTtjb25zdCBybWU9Im1hbnVhbENvbHVtbkZyZWV6ZSI7dmFyIE85PW5ldyBXZWFrTWFwLEhRPW5ldyBXZWFrU2V0O2NsYXNzIEVmdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBTZnQoYyxsKXtubWUoYyxs''@;'; put 'put ''KSxsLmFkZChjKX0odGhpcyxIUSksZnVuY3Rpb24gTWZ0KGMsbCxhKXtubWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLE85LCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gcm1lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDExMH1pc0VuYWJsZWQoKXtyZXR1''@;'; put 'put ''cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbcm1lXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsbD0+aUgoSFEsdGhpcyxUZnQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1''@;'; put 'put ''bW5Nb3ZlIiwobCxhKT0+aUgoSFEsdGhpcyxBZnQpLmNhbGwodGhpcyxsLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe0ZRKE85LHRoaXMsITEpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVu''@;'; put 'put ''YWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWZyZWV6ZUNvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCksZD1hLmZpeGVkQ29sdW1uc1N0YXJ0PHRoaXMuaG90LmNvdW50Q29scygpJiZsPmEuZml4ZWRDb2x1bW5zU3RhcnQtMTtQUShPOSx0aGlzKXx8RlEo''@;'; put 'put ''TzksdGhpcywhMCksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uRnJlZXplIixsLGQpJiYoZCYmKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYS5maXhlZENvbHVtbnNTdGFydCksYS5fZml4ZWRDb2x1bW5zU3RhcnQrPTEpLHRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlckNvbHVtbkZyZWV6ZSIsbCxkKSl9dW5mcmVlemVDb2x1bW4obCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGQ9YS5maXhlZENvbHVtbnNTdGFydD4wJiZsPD1hLmZpeGVkQ29sdW1uc1N0YXJ0LTE7UFEoTzksdGhpcyl8fEZRKE85LHRoaXMsITApLCExIT09''@;'; put 'put ''dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblVuZnJlZXplIixsLGQpJiYoZCYmKGEuX2ZpeGVkQ29sdW1uc1N0YXJ0LT0xLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYS5maXhlZENvbHVtbnNTdGFydCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNv''@;'; put 'put ''bHVtblVuZnJlZXplIixsLGQpKX19ZnVuY3Rpb24gVGZ0KGMpe2MuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gd2Z0KGMpe3JldHVybntrZXk6ImZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGxxKX0sY2FsbGJhY2so''@;'; put 'put ''bCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy5mcmVlemVDb2x1bW4oZCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGhpZGRlbigpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IGE9ITE7cmV0dXJuKHZvaWQgMD09PWx8fGwu''@;'; put 'put ''bGVuZ3RoPjF8fGxbMF0uZnJvbS5jb2whPT1sWzBdLnRvLmNvbHx8bFswXS5mcm9tLmNvbDw9dGhpcy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LTEpJiYoYT0hMCksYX19fSh0aGlzKSxmdW5jdGlvbiBDZnQoYyl7cmV0dXJue2tleToidW5mcmVlemVfY29sdW1uIixuYW1lKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShjcSl9LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MudW5mcmVlemVDb2x1bW4oZCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGhpZGRlbigpe2NvbnN0IGw9dGhpcy5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlKCk7bGV0IGE9ITE7cmV0dXJuKHZvaWQgMD09PWx8fGwubGVuZ3RoPjF8fGxbMF0uZnJvbS5jb2whPT1sWzBdLnRvLmNvbHx8bFswXS5mcm9tLmNvbD49dGhpcy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0KSYmKGE9ITApLGF9fX0odGhpcykpfWZ1bmN0''@;'; put 'put ''aW9uIEFmdChjLGwpe2lmKFBRKE85LHRoaXMpKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ7aWYobDxhfHxjLnNvbWUoZD0+ZDxhKSlyZXR1cm4hMX19ZnVuY3Rpb24gYUgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGtmdChjKXt2YXIgbD1mdW5j''@;'; put 'put ''dGlvbiBEZnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGN3PSJweCIsb21lPWNsYXNzIElmdHtjb25zdHJ1Y3RvcihsKXthSCh0aGlzLCJob3QiLHZvaWQgMCksYUgodGhpcywiX2VsZW1lbnQiLG51bGwpLGFIKHRo''@;'; put 'put ''aXMsInN0YXRlIiwwKSxhSCh0aGlzLCJpbmxpbmVQcm9wZXJ0eSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMuaW5saW5lUHJvcGVydHk9bC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWFwcGVuZFRvKGwpe2wuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5zdGF0ZT0yfWJ1aWxkKCl7''@;'; put 'put ''MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2Vs''@;'; put 'put ''ZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9aXNBcHBlbmRlZCgpe3JldHVybiAyPT09dGhpcy5zdGF0ZX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuc3RhdGU+PTF9c2V0UG9zaXRpb24obCxhKXttMShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wPWwrY3cpLG0xKGEp''@;'; put 'put ''JiYodGhpcy5fZWxlbWVudC5zdHlsZVt0aGlzLmlubGluZVByb3BlcnR5XT1hK2N3KX1nZXRQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5fZWxlbWVudC5zdHlsZTtyZXR1cm57dG9wOmwudG9wP3BhcnNlSW50KGwudG9wLDEwKTowLHN0YXJ0OmxbdGhpcy5pbmxpbmVQcm9wZXJ0eV0/cGFyc2VJ''@;'; put 'put ''bnQobFt0aGlzLmlubGluZVByb3BlcnR5XSwxMCk6MH19c2V0U2l6ZShsLGEpe20xKGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1sK2N3KSxtMShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWErY3cpfWdldFNpemUoKXtyZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVudC5z''@;'; put 'put ''dHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6MH19c2V0T2Zmc2V0KGwsYSl7bTEobCkmJih0aGlzLl9lbGVtZW50''@;'; put 'put ''LnN0eWxlLm1hcmdpblRvcD1sK2N3KSxtMShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbYG1hcmdpbiR7cDEodGhpcy5pbmxpbmVQcm9wZXJ0eSl9YF09YStjdyl9Z2V0T2Zmc2V0KCl7Y29uc3QgbD10aGlzLl9lbGVtZW50LnN0eWxlLGE9YG1hcmdpbiR7cDEodGhpcy5pbmxpbmVQcm9wZXJ0''@;'; put 'put ''eSl9YDtyZXR1cm57dG9wOmwubWFyZ2luVG9wP3BhcnNlSW50KGwubWFyZ2luVG9wLDEwKTowLHN0YXJ0OmxbYV0/cGFyc2VJbnQobFthXSwxMCk6MH19fSxPZnQ9Y2xhc3MgTGZ0IGV4dGVuZHMgb21le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFs''@;'; put 'put ''Q29sdW1uTW92ZS0tYmFja2xpZ2h0Iil9fSxIZnQ9Y2xhc3MgRmZ0IGV4dGVuZHMgb21le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lIil9fTtmdW5jdGlvbiBiMyhjLGwsYSl7c21lKGMsbCksbC5zZXQoYyxh''@;'; put 'put ''KX1mdW5jdGlvbiBzbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEtkKGMsbCxhKXtyZXR1cm4gYy5zZXQoZjYoYyxsKSxhKSxhfWZ1''@;'; put 'put ''bmN0aW9uIHphKGMsbCl7cmV0dXJuIGMuZ2V0KGY2KGMsbCkpfWZ1bmN0aW9uIGY2KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMg''@;'; put 'put ''bm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uTW92ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbk1vdmUiKTtjb25zdCBWUT0ibWFudWFsQ29sdW1uTW92ZSIsbG1lPSJodF9fbWFudWFs''@;'; put 'put ''Q29sdW1uTW92ZSIsb0g9InNob3ctdWkiLEJRPSJvbi1tb3ZpbmctLWNvbHVtbnMiLGpRPSJhZnRlci1zZWxlY3Rpb24tLWNvbHVtbnMiO3ZhciBRMT1uZXcgV2Vha01hcCxwNj1uZXcgV2Vha01hcCxqZz1uZXcgV2Vha01hcCxzSD1uZXcgV2Vha01hcCxnNj1uZXcgV2Vha01hcCxlZD1uZXcg''@;'; put 'put ''V2Vha01hcCxsSD1uZXcgV2Vha01hcCxKMj1uZXcgV2Vha01hcCx1dz1uZXcgV2Vha01hcCxjSD1uZXcgV2Vha01hcCxhQT1uZXcgV2Vha01hcCxQOT1uZXcgV2Vha1NldDtjbGFzcyBCZnQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gTmZ0''@;'; put 'put ''KGMsbCl7c21lKGMsbCksbC5hZGQoYyl9KHRoaXMsUDkpLGIzKHRoaXMsUTEsbmV3IE9mdCh0aGlzLmhvdCkpLGIzKHRoaXMscDYsbmV3IEhmdCh0aGlzLmhvdCkpLGIzKHRoaXMsamcsW10pLGIzKHRoaXMsc0gsMCksYjModGhpcyxnNiwhMSksYjModGhpcyxlZCx7fSksYjModGhpcyxsSCx2''@;'; put 'put ''b2lkIDApLGIzKHRoaXMsSjIsdm9pZCAwKSxiMyh0aGlzLHV3LHZvaWQgMCksYjModGhpcyxjSCx2b2lkIDApLGIzKHRoaXMsYUEsdm9pZCAwKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gVlF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTIwfWlzRW5hYmxl''@;'; put 'put ''ZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtWUV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJh''@;'; put 'put ''eShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZjYoUDksbCxqZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDto''@;'; put 'put ''PGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBmNihQOSxsLFVmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT5mNihQOSx0aGlzLFdmdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBmNihQOSxsLFlmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLFRpKHRoaXMuaG90''@;'; put 'put ''LnJvb3RFbGVtZW50LGxtZSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtsbyh0''@;'; put 'put ''aGlzLmhvdC5yb290RWxlbWVudCxsbWUpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLHphKFExLHRoaXMpLmRlc3Ryb3koKSx6YShwNix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW1vdmVDb2x1bW4obCxhKXtyZXR1cm4gdGhpcy5tb3ZlQ29sdW1ucyhbbF0sYSl9bW92''@;'; put 'put ''ZUNvbHVtbnMobCxhKXtjb25zdCBkPXphKGxILHRoaXMpLGg9dGhpcy5pc01vdmVQb3NzaWJsZShsLGEpLGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtbk1vdmUiLGwsYSxkLGgpO2lmKEtkKGxILHRoaXMsdm9pZCAwKSwhMT09PWYpcmV0dXJuO2gmJnRoaXMuaG90LmNvbHVtbklu''@;'; put 'put ''ZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYSk7Y29uc3Qgdj1oJiZ0aGlzLmlzQ29sdW1uT3JkZXJDaGFuZ2VkKGwsYSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbk1vdmUiLGwsYSxkLGgsdiksdn1kcmFnQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMuZHJhZ0NvbHVtbnMo''@;'; put 'put ''W2xdLGEpfWRyYWdDb2x1bW5zKGwsYSl7Y29uc3QgZD10aGlzLmNvdW50RmluYWxJbmRleChsLGEpO3JldHVybiBLZChsSCx0aGlzLGEpLHRoaXMubW92ZUNvbHVtbnMobCxkKX1pc01vdmVQb3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJp''@;'; put 'put ''bW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCx2PWwuc29tZShEPT5EPDApLE09bC5zb21lKEQ9PkQ+PWQpO3JldHVybiEoaHx8Znx8dnx8TSl9aXNDb2x1bW5PcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX1jb3VudEZpbmFsSW5k''@;'; put 'put ''ZXgobCxhKXtjb25zdCBkPXF1KGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldENvbHVtbnNXaWR0aChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXI7bGV0IGg9MDtmb3IobGV0IGY9bDtmPD1hO2YrPTEpe2NvbnN0IHY9ZC5nZXRSZW5kZXJh''@;'; put 'put ''YmxlRnJvbVZpc3VhbEluZGV4KGYpO2Y8MD9oKz10aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCl8fDA6bnVsbCE9PXYmJihoKz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldENvbHVtbldpZHRoKHYpfHwwKX1yZXR1cm4gaH1tb3ZlQnlTZXR0aW5n''@;'; put 'put ''c09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtWUV07aWYoQXJyYXkuaXNBcnJheShsKSl0aGlzLm1vdmVDb2x1bW5zKGwsMCk7ZWxzZSBpZih2b2lkIDAhPT1sKXtjb25zdCBhPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2EubGVuZ3RoJiZ0aGlzLm1vdmVDb2x1''@;'; put 'put ''bW5zKGEsMCl9fWlzRml4ZWRDb2x1bW5zU3RhcnQobCl7cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydH1wZXJzaXN0ZW50U3RhdGVTYXZlKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxDb2x1bW5Nb3ZlIix0''@;'; put 'put ''aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9cGVyc2lzdGVudFN0YXRlTG9hZCgpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwibWFudWFsQ29sdW1uTW92ZSIsbCksbC52YWx1ZT9sLnZhbHVl''@;'; put 'put ''OltdfXByZXBhcmVDb2x1bW5zVG9Nb3ZpbmcobCxhKXtjb25zdCBkPVtdO3JldHVybiBHYShsLGEsaD0+e2QucHVzaChoKX0pLGR9cmVmcmVzaFBvc2l0aW9ucygpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpO3RoaXMuaXNGaXhlZENvbHVtbnNT''@;'; put 'put ''dGFydCh6YShKMix0aGlzKSkmJmw+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh7Y29sOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLTEsLTEpfSk7Y29uc3QgYT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGQ9dGhpcy5ob3Qudmll''@;'; put 'put ''dy5fd3Qud3RPdmVybGF5cy5zY3JvbGxhYmxlRWxlbWVudCxoPSJudW1iZXIiPT10eXBlb2YgZC5zY3JvbGxYP2Quc2Nyb2xsWDpkLnNjcm9sbExlZnQ7bGV0IGY9dGhpcy5ob3Qudmlldy5USEVBRC5vZmZzZXRMZWZ0K3RoaXMuZ2V0Q29sdW1uc1dpZHRoKDAsemEoSjIsdGhpcyktMSk7Y29u''@;'; put 'put ''c3Qgdj1hLmhpZGVyLm9mZnNldFdpZHRoLE09YS5UQk9EWS5vZmZzZXRMZWZ0LEQ9emEoUTEsdGhpcykuZ2V0T2Zmc2V0KCkuc3RhcnQsWj16YShRMSx0aGlzKS5nZXRTaXplKCkud2lkdGg7bGV0IHJlPTAsY2U9MDtpZih0aGlzLmhvdC5pc1J0bCgpKXtjb25zdCBCZT10aGlzLmhvdC5yb290''@;'; put 'put ''V2luZG93LHFlPXN1KHRoaXMuaG90LnJvb3RFbGVtZW50KSxydD1CZS5pbm5lcldpZHRoLXphKHV3LHRoaXMpLXFlO2NlPUJlLmlubmVyV2lkdGgtemEoZWQsdGhpcykuZXZlbnRQYWdlWC1ydC0odm9pZCAwPT09ZC5zY3JvbGxYP2g6MCl9ZWxzZSBjZT16YShlZCx0aGlzKS5ldmVudFBhZ2VY''@;'; put 'put ''LSh6YSh1dyx0aGlzKS0odm9pZCAwPT09ZC5zY3JvbGxYP2g6MCkpO2lmKHphKGNILHRoaXMpJiYocmU9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDb2x1bW5IZWFkZXIoLTEpLm9mZnNldFdpZHRoKSx0aGlzLmlzRml4''@;'; put 'put ''ZWRDb2x1bW5zU3RhcnQoemEoSjIsdGhpcykpJiYoZis9aCksZis9cmUsemEoSjIsdGhpcyk8MCl6YShhQSx0aGlzKT4wP3phKGVkLHRoaXMpLmNvbD0wOnphKGVkLHRoaXMpLmNvbD1sPjA/bC0xOmw7ZWxzZSBpZih6YShlZCx0aGlzKS5URC5vZmZzZXRXaWR0aC8yK2Y8PWNlKXtjb25zdCBC''@;'; put 'put ''ZT16YShKMix0aGlzKT49emEoc0gsdGhpcyk/emEoc0gsdGhpcyktMTp6YShKMix0aGlzKTt6YShlZCx0aGlzKS5jb2w9QmUrMSxmKz16YShlZCx0aGlzKS5URC5vZmZzZXRXaWR0aH1lbHNlIHphKGVkLHRoaXMpLmNvbD16YShKMix0aGlzKTtsZXQgYmU9Y2UsRWU9ZjtjZStaK0Q+PXY/YmU9''@;'; put 'put ''di1aLUQ6Y2UrRDxNK3JlJiYoYmU9TStyZStNYXRoLmFicyhEKSksZj49di0xP0VlPXYtMTowPT09RWU/RWU9MTp2b2lkIDAhPT1kLnNjcm9sbFgmJnphKEoyLHRoaXMpPHphKGFBLHRoaXMpJiYoRWUtPXphKHV3LHRoaXMpPD1kLnNjcm9sbFg/emEodXcsdGhpcyk6MCksemEoUTEsdGhpcyku''@;'; put 'put ''c2V0UG9zaXRpb24obnVsbCxiZSksemEocDYsdGhpcykuc2V0UG9zaXRpb24obnVsbCxFZSl9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3Zl''@;'; put 'put ''IixhPT5mNihQOSx0aGlzLHpmdCkuY2FsbCh0aGlzLGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5mNihQOSx0aGlzLFpmdCkuY2FsbCh0aGlzKSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9YnVpbGRQ''@;'; put 'put ''bHVnaW5VSSgpe3phKFExLHRoaXMpLmJ1aWxkKCksemEocDYsdGhpcykuYnVpbGQoKX1kZXN0cm95KCl7emEoUTEsdGhpcykuZGVzdHJveSgpLHphKHA2LHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGpmdChjLGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LnZpZXcu''@;'; put 'put ''X3d0Lnd0VGFibGUsZj10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksdj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLE09cG8oYy50YXJnZXQsInNvcnRBY3Rpb24iKTtpZighdnx8IWZ8fHphKGc2LHRoaXMpfHwwIT09Yy5idXR0b258fE0pcmV0''@;'; put 'put ''dXJuIEtkKGc2LHRoaXMsITEpLHphKGpnLHRoaXMpLmxlbmd0aD0wLHZvaWQgbG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsW0JRLG9IXSk7Y29uc3QgRD16YShwNix0aGlzKS5pc0J1aWx0KCkmJiF6YShwNix0aGlzKS5pc0FwcGVuZGVkKCksWj16YShRMSx0aGlzKS5pc0J1aWx0KCkmJiF6YShR''@;'; put 'put ''MSx0aGlzKS5pc0FwcGVuZGVkKCk7RCYmWiYmKHphKHA2LHRoaXMpLmFwcGVuZFRvKGguaGlkZXIpLHphKFExLHRoaXMpLmFwcGVuZFRvKGguaGlkZXIpKTtjb25zdHtmcm9tOnJlLHRvOmNlfT12LGJlPU1hdGgubWluKHJlLmNvbCxjZS5jb2wpLEVlPU1hdGgubWF4KHJlLmNvbCxjZS5jb2wp''@;'; put 'put ''O2lmKGwucm93PDAmJmwuY29sPj1iZSYmbC5jb2w8PUVlKXtkLmNvbHVtbj0hMCxLZChnNix0aGlzLCEwKTtjb25zdCBCZT1hLmZpcnN0Q2hpbGQ/YWZlKGMsYS5maXJzdENoaWxkKS54OmMub2Zmc2V0WDt6YShlZCx0aGlzKS5ldmVudFBhZ2VYPWMucGFnZVgsS2QoSjIsdGhpcyxsLmNvbCks''@;'; put 'put ''emEoZWQsdGhpcykuVEQ9YSx6YShlZCx0aGlzKS5jb2w9bC5jb2wsS2QoamcsdGhpcyx0aGlzLnByZXBhcmVDb2x1bW5zVG9Nb3ZpbmcoYmUsRWUpKSxLZChjSCx0aGlzLCEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzKSxLZChzSCx0aGlzLHRoaXMuaG90LmNvdW50Q29scygp''@;'; put 'put ''KSxLZChhQSx0aGlzLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpLEtkKHV3LHRoaXMsVTAodGhpcy5ob3Qucm9vdEVsZW1lbnQpLmxlZnQpO2NvbnN0IHFlPXphKGNILHRoaXMpPy0xOjAscnQ9aC5ob2xkZXIuc2Nyb2xsVG9wK2guZ2V0Q29sdW1uSGVhZGVySGVp''@;'; put 'put ''Z2h0KDApKzEscHQ9bC5jb2w8emEoYUEsdGhpcyksZHQ9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpLEp0PU1hdGguYWJzKEJlLSh0aGlzLmhvdC5pc1J0bCgpP2Eub2Zmc2V0V2lkdGg6MCkpLHZuPXRoaXMuZ2V0Q29s''@;'; put 'put ''dW1uc1dpZHRoKGJlLGwuY29sLTEpK0p0LENuPXRoaXMuZ2V0Q29sdW1uc1dpZHRoKHFlLGJlLTEpKyhwdD9kdDowKSt2bjt6YShRMSx0aGlzKS5zZXRQb3NpdGlvbihydCxDbiksemEoUTEsdGhpcykuc2V0U2l6ZSh0aGlzLmdldENvbHVtbnNXaWR0aChiZSxFZSksaC5oaWRlci5vZmZzZXRI''@;'; put 'put ''ZWlnaHQtcnQpLHphKFExLHRoaXMpLnNldE9mZnNldChudWxsLC12biksVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsQlEpfWVsc2UgbG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsalEpLEtkKGc2LHRoaXMsITEpLHphKGpnLHRoaXMpLmxlbmd0aD0wfWZ1bmN0aW9uIHpmdChjKXt6YShnNix0aGlz''@;'; put 'put ''KSYmKHphKGVkLHRoaXMpLmV2ZW50UGFnZVg9Yy5wYWdlWCx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSl9ZnVuY3Rpb24gVWZ0KGMsbCxhLGQpeyF0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpfHwhemEoZzYsdGhpcyl8fCh6YShqZyx0aGlzKS5pbmRleE9mKGwuY29sKT4tMT9sbyh0''@;'; put 'put ''aGlzLmhvdC5yb290RWxlbWVudCxvSCk6VGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsb0gpLGQucm93PSEwLGQuY29sdW1uPSEwLGQuY2VsbD0hMCxLZChKMix0aGlzLGwuY29sKSx6YShlZCx0aGlzKS5URD1hKX1mdW5jdGlvbiBaZnQoKXtjb25zdCBjPXphKGVkLHRoaXMpLmNvbCxsPXphKGpn''@;'; put 'put ''LHRoaXMpLmxlbmd0aDtpZihLZChKMix0aGlzLHZvaWQgMCksS2QoZzYsdGhpcywhMSksbG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsW0JRLG9ILGpRXSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiZUaSh0aGlzLmhvdC5yb290RWxlbWVudCxqUSksbDwx''@;'; put 'put ''fHx2b2lkIDA9PT1jKXJldHVybjtjb25zdCBhPXphKGpnLHRoaXMpWzBdLGQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKSxoPXRoaXMuZHJhZ0NvbHVtbnMoemEoamcsdGhpcyksYyk7aWYoemEoamcsdGhpcykubGVuZ3RoPTAsITA9PT1oKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUo''@;'; put 'put ''KSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZCk7dGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhmLGYrbC0xKX19ZnVuY3Rpb24gV2Z0KCl7Y29uc3QgYz10aGlzLmhvdC52aWV3Ll93dC53''@;'; put 'put ''dFRhYmxlLGQ9Yy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMStjLmhvbGRlci5zY3JvbGxUb3A7emEoUTEsdGhpcykuc2V0UG9zaXRpb24oZCksemEoUTEsdGhpcykuc2V0U2l6ZShudWxsLGMuaGlkZXIub2Zmc2V0SGVpZ2h0LWQpfWZ1bmN0aW9uIFlmdCgpe3RoaXMubW92ZUJ5U2V0dGlu''@;'; put 'put ''Z3NPckxvYWQoKX1mdW5jdGlvbiBDMShjLGwsYSl7Y21lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBjbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIp''@;'; put 'put ''fWZ1bmN0aW9uIGR1KGMsbCxhKXtyZXR1cm4gYy5zZXQoeTMoYyxsKSxhKSxhfWZ1bmN0aW9uIEVhKGMsbCl7cmV0dXJuIGMuZ2V0KHkzKGMsbCkpfWZ1bmN0aW9uIHkzKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB1SD0ibWFudWFsQ29sdW1uUmVzaXplIix1bWU9Im1hbnVhbENvbHVtbldpZHRocyI7dmFyIHpnPW5ldyBXZWFrTWFwLGRIPW5ldyBXZWFrTWFw''@;'; put 'put ''LEJoPW5ldyBXZWFrTWFwLGhIPW5ldyBXZWFrTWFwLFlwPW5ldyBXZWFrTWFwLEtmdD1uZXcgV2Vha01hcCxkdz1uZXcgV2Vha01hcCxmSD1uZXcgV2Vha01hcCxxZD1uZXcgV2Vha01hcCxVZz1uZXcgV2Vha01hcCxGOT1uZXcgV2Vha01hcCxwSD1uZXcgV2Vha01hcCxvQT1uZXcgV2Vha01h''@;'; put 'put ''cCxzQT1uZXcgV2Vha01hcCxqaD1uZXcgV2Vha01hcCxsQT1uZXcgV2Vha01hcCxHcD1uZXcgV2Vha1NldDtjbGFzcyBxZnQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdUh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTMwfWNvbnN0cnVj''@;'; put 'put ''dG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIEdmdChjLGwpe2NtZShjLGwpLGwuYWRkKGMpfSh0aGlzLEdwKSxDMSh0aGlzLHpnLG51bGwpLEMxKHRoaXMsZEgsbnVsbCksQzEodGhpcyxCaCxbXSksQzEodGhpcyxoSCxudWxsKSxDMSh0aGlzLFlwLG51bGwpLEMxKHRoaXMsS2Z0LG51bGwpLEMx''@;'; put 'put ''KHRoaXMsZHcsbnVsbCksQzEodGhpcyxmSCxudWxsKSxDMSh0aGlzLHFkLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksQzEodGhpcyxVZyx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikpLEMxKHRoaXMsRjksbnVsbCksQzEodGhp''@;'; put 'put ''cyxwSCwhMSksQzEodGhpcyxvQSwwKSxDMSh0aGlzLHNBLG51bGwpLEMxKHRoaXMsamgsdm9pZCAwKSxDMSh0aGlzLGxBLHZvaWQgMCksVGkoRWEocWQsdGhpcyksIm1hbnVhbENvbHVtblJlc2l6ZXIiKSxUaShFYShVZyx0aGlzKSwibWFudWFsQ29sdW1uUmVzaXplckd1aWRlIil9Z2V0IGlu''@;'; put 'put ''bGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3VIXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KGR1KGpoLHRoaXMsbmV3IFptKSxFYShqaCx0aGlz''@;'; put 'put ''KS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT55MyhHcCx0aGlzLFhmdCkuY2FsbCh0aGlzKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLEVhKGpoLHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB5MyhHcCxsLHIzdCkuY2FsbChsLC4uLmQpfSwxKSx0aGlzLmFkZEhvb2soImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsZnVuY3Rpb24oKXtmb3Io''@;'; put 'put ''dmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4geTMoR3AsbCxpM3QpLmNhbGwobCwuLi5kKX0sMSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHkzKEdwLGwsYTN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2lu''@;'; put 'put ''KCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7ZHUobEEsdGhpcyxFYShqaCx0aGlzKS5nZXRWYWx1ZXMoKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHN1cGVyLmRpc2Fi''@;'; put 'put ''bGVQbHVnaW4oKX1zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLHVtZSxFYShqaCx0aGlzKS5nZXRWYWx1ZXMoKSl9bG9hZE1hbnVhbENvbHVtbldpZHRocygpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJwZXJzaXN0ZW50U3RhdGVMb2FkIix1bWUsbCksbC52YWx1ZX1zZXRNYW51YWxTaXplKGwsYSl7Y29uc3QgZD1NYXRoLm1heChhLDIwKSxoPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7cmV0dXJuIEVhKGpoLHRoaXMpLnNldFZhbHVlQXRJbmRleChoLGQpLGR9Y2xlYXJNYW51YWxT''@;'; put 'put ''aXplKGwpe2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtFYShqaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoYSxudWxsKX1zZXR1cEhhbmRsZVBvc2l0aW9uKGwpe2lmKCFsLnBhcmVudE5vZGUpcmV0dXJuO2R1KHpnLHRoaXMsbCk7Y29uc3R7X3d0OmF9PXRoaXMuaG90LnZp''@;'; put 'put ''ZXcsZD1hLnd0VGFibGUuZ2V0Q29vcmRzKEVhKHpnLHRoaXMpKSxoPWQuY29sO2lmKGg8MClyZXR1cm47Y29uc3QgZj14dShFYSh6Zyx0aGlzKSksdj1FYSh6Zyx0aGlzKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgRDtoPGEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSYm''@;'; put 'put ''KEQ9YS53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihFYSh6Zyx0aGlzKSxkLnJvdyxkLmNvbCkpLER8fChEPWEud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKEVhKHpnLHRoaXMpLGQucm93''@;'; put 'put ''LGQuY29sKSksZHUoZEgsdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpKSxkdShCaCx0aGlzLFtdKTtjb25zdCBaPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlz''@;'; put 'put ''U2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJlomJlluKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKSxjZT0+e0dhKGNlLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGNlLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxCZT0+e0VhKEJo''@;'; put 'put ''LHRoaXMpLmluY2x1ZGVzKEJlKXx8RWEoQmgsdGhpcykucHVzaChCZSl9KX0pLEVhKEJoLHRoaXMpLmluY2x1ZGVzKEVhKGRILHRoaXMpKXx8ZHUoQmgsdGhpcyxbRWEoZEgsdGhpcyldKSxkdShmSCx0aGlzLEQuc3RhcnQtNiksZHUoZHcsdGhpcyxwYXJzZUludCh2LndpZHRoLDEwKSksRWEo''@;'; put 'put ''cWQsdGhpcykuc3R5bGUudG9wPWAke0QudG9wfXB4YCxFYShxZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7RWEoZkgsdGhpcykrRWEoZHcsdGhpcyl9cHhgLEVhKHFkLHRoaXMpLnN0eWxlLmhlaWdodD1gJHtmfXB4YCx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChF''@;'; put 'put ''YShxZCx0aGlzKSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7RWEocWQsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke0VhKGZILHRoaXMpK0VhKGhILHRoaXMpfXB4YH1zZXR1cEd1aWRlUG9zaXRpb24oKXtjb25zdCBsPXBhcnNlSW50KHh1KEVhKHFkLHRoaXMpKSwxMCksYT1wYXJz''@;'; put 'put ''ZUludChFYShxZCx0aGlzKS5zdHlsZS50b3AsMTApK2wsZD10aGlzLmhvdC52aWV3LmdldFRhYmxlSGVpZ2h0KCk7VGkoRWEocWQsdGhpcyksImFjdGl2ZSIpLFRpKEVhKFVnLHRoaXMpLCJhY3RpdmUiKSxFYShVZyx0aGlzKS5zdHlsZS50b3A9YCR7YX1weGAsdGhpcy5yZWZyZXNoR3VpZGVQ''@;'; put 'put ''b3NpdGlvbigpLEVhKFVnLHRoaXMpLnN0eWxlLmhlaWdodD1kLWwrInB4Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChFYShVZyx0aGlzKSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXtFYShVZyx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09RWEocWQsdGhpcykuc3R5bGVb''@;'; put 'put ''dGhpcy5pbmxpbmVEaXJdfWhpZGVIYW5kbGVBbmRHdWlkZSgpe2xvKEVhKHFkLHRoaXMpLCJhY3RpdmUiKSxsbyhFYShVZyx0aGlzKSwiYWN0aXZlIil9Y2hlY2tJZkNvbHVtbkhlYWRlcihsKXtjb25zdCBhPVJtKGwsWyJUSEVBRCJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSx7dG9wT3Zlcmxh''@;'; put 'put ''eTpkLHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpofT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3JldHVybltkLmNsb25lLnd0VGFibGUuVEhFQUQsaC5jbG9uZS53dFRhYmxlLlRIRUFEXS5pbmNsdWRlcyhhKX1nZXRDbG9zZXN0VEhQYXJlbnQobCl7cmV0dXJuIlRBQkxFIiE9''@;'; put 'put ''PWwudGFnTmFtZT8iVEgiPT09bC50YWdOYW1lP2w6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC5wYXJlbnROb2RlKTpudWxsfWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IGw9KCk9Pnt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxh''@;'; put 'put ''PShkLGgpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIixFYShZcCx0aGlzKSxkLCEwKTt2b2lkIDAhPT1mJiZkdShZcCx0aGlzLGYpLHRoaXMuc2V0TWFudWFsU2l6ZShkLEVhKFlwLHRoaXMpKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0''@;'; put 'put ''aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLEVhKFlwLHRoaXMpLGQsITApLGgmJmwoKX07RWEob0EsdGhpcyk+PTImJihFYShCaCx0aGlzKS5sZW5ndGg+MT8oWW4oRWEoQmgsdGhpcyksaD0+e2EoaCl9KSxsKCkpOlluKEVhKEJoLHRoaXMpLGg9PnthKGgsITApfSkpLGR1''@;'; put 'put ''KG9BLHRoaXMsMCksZHUoc0EsdGhpcyxudWxsKX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3RFbGVtZW50OmF9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2VvdmVyIixkPT55MyhHcCx0aGlzLEpmdCkuY2FsbCh0aGlzLGQp''@;'; put 'put ''KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZG93biIsZD0+eTMoR3AsdGhpcyxRZnQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGQ9PnkzKEdwLHRoaXMsZTN0KS5jYWxsKHRoaXMsZCkp''@;'; put 'put ''LHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnkzKEdwLHRoaXMsdDN0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKEVhKHFkLHRoaXMpLCJjb250ZXh0bWVudSIsKCk9PnkzKEdwLHRoaXMsbjN0KS5jYWxs''@;'; put 'put ''KHRoaXMpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBYZnQoKXtjb25zdCBjPXRoaXMuaG90LmdldFNldHRpbmdzKClbdUhdLGw9dGhpcy5sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCk7dHlwZW9mIGw8InUiP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bC5mb3JF''@;'; put 'put ''YWNoKChhLGQpPT57RWEoamgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApOkFycmF5LmlzQXJyYXkoYyk/KHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57Yy5mb3JFYWNoKChhLGQpPT57RWEoamgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApLGR1KGxBLHRo''@;'; put 'put ''aXMsYykpOiEwPT09YyYmQXJyYXkuaXNBcnJheShFYShsQSx0aGlzKSkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RWEobEEsdGhpcykuZm9yRWFjaCgoYSxkKT0+e0VhKGpoLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSl9LCEwKX1mdW5jdGlvbiBKZnQoYyl7aWYoIUEkKGMu''@;'; put 'put ''dGFyZ2V0KSYmITAhPT1FYShwSCx0aGlzKSYmdGhpcy5jaGVja0lmQ29sdW1uSGVhZGVyKGMudGFyZ2V0KSl7Y29uc3QgbD10aGlzLmdldENsb3Nlc3RUSFBhcmVudChjLnRhcmdldCk7aWYoIWwpcmV0dXJuO2NvbnN0IGE9bC5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKTtsJiYobnVsbD09PWF8''@;'; put 'put ''fCIxIj09PWEpJiYoRWEoRjksdGhpcyl8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihsKSl9fWZ1bmN0aW9uIFFmdChjKXtjLnRhcmdldC5wYXJlbnROb2RlPT09dGhpcy5ob3Qucm9vdEVsZW1lbnQmJnBvKGMudGFyZ2V0LCJtYW51YWxDb2x1bW5SZXNpemVyIikmJih0aGlzLnNldHVwSGFu''@;'; put 'put ''ZGxlUG9zaXRpb24oRWEoemcsdGhpcykpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksZHUoRjksdGhpcywhMCksbnVsbD09PUVhKHNBLHRoaXMpJiYoZHUoc0EsdGhpcyxzZXRUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCkpLHRoaXMuaG90Ll9yZWdpc3Rl''@;'; put 'put ''clRpbWVvdXQoRWEoc0EsdGhpcykpKSxkdShvQSx0aGlzLEVhKG9BLHRoaXMpKzEpLHRoaXMuc3RhcnRYPWMucGFnZVgsZHUoWXAsdGhpcyxFYShkdyx0aGlzKSkpfWZ1bmN0aW9uIGUzdChjKXtpZihFYShGOSx0aGlzKSl7Y29uc3QgbD0oYy5wYWdlWC10aGlzLnN0YXJ0WCkqdGhpcy5ob3Qu''@;'; put 'put ''Z2V0RGlyZWN0aW9uRmFjdG9yKCk7ZHUoaEgsdGhpcyxFYShkdyx0aGlzKStsKSxZbihFYShCaCx0aGlzKSxhPT57ZHUoWXAsdGhpcyx0aGlzLnNldE1hbnVhbFNpemUoYSxFYShoSCx0aGlzKSkpfSksdGhpcy5yZWZyZXNoSGFuZGxlUG9zaXRpb24oKSx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0''@;'; put 'put ''aW9uKCl9fWZ1bmN0aW9uIHQzdCgpe2NvbnN0IGM9KCk9Pnt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxsPShhLGQpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsRWEoWXAsdGhpcyksYSwhMSksZCYmYygpLHRo''@;'; put 'put ''aXMuc2F2ZU1hbnVhbENvbHVtbldpZHRocygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblJlc2l6ZSIsRWEoWXAsdGhpcyksYSwhMSl9O0VhKEY5LHRoaXMpJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSxkdShGOSx0aGlzLCExKSxFYShZcCx0aGlzKSE9PUVhKGR3LHRoaXMp''@;'; put 'put ''JiYoRWEoQmgsdGhpcykubGVuZ3RoPjE/KFluKEVhKEJoLHRoaXMpLGQ9PntsKGQpfSksYygpKTpZbihFYShCaCx0aGlzKSxkPT57bChkLCEwKX0pKSx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oRWEoemcsdGhpcykpKX1mdW5jdGlvbiBuM3QoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgp''@;'; put 'put ''LHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKEVhKHFkLHRoaXMpKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChFYShVZyx0aGlzKSksZHUoRjksdGhpcywhMSksZHUocEgsdGhpcywhMCksdGhpcy5ob3QuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57ZHUocEgsdGhp''@;'; put 'put ''cywhMSl9KX1mdW5jdGlvbiByM3QoYyxsKXtsZXQgYT1jO2lmKHRoaXMuZW5hYmxlZCl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpLGg9RWEoamgsdGhpcykuZ2V0VmFsdWVBdEluZGV4KGQpO3RoaXMuaG90LmdldFNldHRpbmdzKClbdUhdJiZoJiYoYT1oKX1yZXR1cm4g''@;'; put 'put ''YX1mdW5jdGlvbiBpM3QoYyxsKXtjb25zdCBhPUVhKGpoLHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGE/YTpjfWZ1bmN0aW9uIGEzdCgpe3RoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQucmVzZXRI''@;'; put 'put ''YXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCl9ZnVuY3Rpb24gelEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG8zdChjKXt2YXIgbD1mdW5jdGlvbiBzM3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtp''@;'; put 'put ''Zih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3Ry''@;'; put 'put ''aW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGh3''@;'; put 'put ''PSJweCIsZm1lPWNsYXNzIGwzdHtjb25zdHJ1Y3RvcihsKXt6USh0aGlzLCJob3QiLHZvaWQgMCkselEodGhpcywiX2VsZW1lbnQiLG51bGwpLHpRKHRoaXMsInN0YXRlIiwwKSx0aGlzLmhvdD1sfWFwcGVuZFRvKGwpe2wuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5zdGF0ZT0y''@;'; put 'put ''fWJ1aWxkKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxk''@;'; put 'put ''KHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9aXNBcHBlbmRlZCgpe3JldHVybiAyPT09dGhpcy5zdGF0ZX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuc3RhdGU+PTF9c2V0UG9zaXRpb24obCxhKXt2b2lkIDAhPT1sJiYodGhpcy5fZWxlbWVudC5zdHlsZS50''@;'; put 'put ''b3A9bCtodyksdm9pZCAwIT09YSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdD1hK2h3KX1nZXRQb3NpdGlvbigpe3JldHVybnt0b3A6dGhpcy5fZWxlbWVudC5zdHlsZS50b3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS50b3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxl''@;'; put 'put ''LmxlZnQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0LDEwKTowfX1zZXRTaXplKGwsYSl7bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9bCtodyksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWEraHcpfWdldFNpemUoKXtyZXR1cm57d2lkdGg6dGhpcy5fZWxl''@;'; put 'put ''bWVudC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6MH19c2V0T2Zmc2V0KGwsYSl7bCYmKHRoaXMuX2VsZW1l''@;'; put 'put ''bnQuc3R5bGUubWFyZ2luVG9wPWwraHcpLGEmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQ9YStodyl9Z2V0T2Zmc2V0KCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcCwxMCk6MCxs''@;'; put 'put ''ZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQsMTApOjB9fX0sZDN0PWNsYXNzIHUzdCBleHRlbmRzIGZtZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksVGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbFJvd01v''@;'; put 'put ''dmUtLWJhY2tsaWdodCIpfX0scDN0PWNsYXNzIGYzdCBleHRlbmRzIGZtZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksVGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZSIpfX07ZnVuY3Rpb24gZncoYyxsLGEpe3BtZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24g''@;'; put 'put ''cG1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBIOShjLGwsYSl7cmV0dXJuIGMuc2V0KG02KGMsbCksYSksYX1mdW5jdGlvbiBGbyhj''@;'; put 'put ''LGwpe3JldHVybiBjLmdldChtNihjLGwpKX1mdW5jdGlvbiBtNihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50''@;'; put 'put ''IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVJvd01vdmUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJSb3dNb3ZlIik7Y29uc3QgWlE9Im1hbnVhbFJvd01vdmUiLGdtZT0iaHRfX21hbnVhbFJvd01vdmUiLGdIPSJzaG93LXVp''@;'; put 'put ''IixXUT0ib24tbW92aW5nLS1yb3dzIixZUT0iYWZ0ZXItc2VsZWN0aW9uLS1yb3dzIjt2YXIgdGQ9bmV3IFdlYWtNYXAsdjY9bmV3IFdlYWtNYXAsWmc9bmV3IFdlYWtNYXAsYjY9bmV3IFdlYWtNYXAsWGQ9bmV3IFdlYWtNYXAsbUg9bmV3IFdlYWtNYXAsTjk9bmV3IFdlYWtTZXQ7Y2xhc3Mg''@;'; put 'put ''djN0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGczdChjLGwpe3BtZShjLGwpLGwuYWRkKGMpfSh0aGlzLE45KSxmdyh0aGlzLHRkLG5ldyBkM3QodGhpcy5ob3QpKSxmdyh0aGlzLHY2LG5ldyBwM3QodGhpcy5ob3QpKSxmdyh0aGlzLFpn''@;'; put 'put ''LFtdKSxmdyh0aGlzLGI2LHZvaWQgMCksZncodGhpcyxYZCx7fSksZncodGhpcyxtSCx2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBaUX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRT''@;'; put 'put ''ZXR0aW5ncygpW1pRXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJn''@;'; put 'put ''dW1lbnRzW2hdO3JldHVybiBtNihOOSxsLGIzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07''@;'; put 'put ''cmV0dXJuIG02KE45LGwsXzN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+bTYoTjksdGhpcyxDM3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTYoTjksbCxTM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxUaSh0aGlzLmhvdC5yb290RWxlbWVudCxnbWUpLHN1cGVy''@;'; put 'put ''LmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7bG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsZ21l''@;'; put 'put ''KSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxGbyh0ZCx0aGlzKS5kZXN0cm95KCksRm8odjYsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlUm93KGwsYSl7cmV0dXJuIHRoaXMubW92ZVJvd3MoW2xdLGEpfW1vdmVSb3dzKGwsYSl7Y29uc3QgZD1GbyhtSCx0aGlz''@;'; put 'put ''KSxoPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dNb3ZlIixsLGEsZCxoKTtpZihIOShtSCx0aGlzLHZvaWQgMCksITE9PT1mKXJldHVybjtoJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEpO2NvbnN0IHY9aCYm''@;'; put 'put ''dGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixsLGEsZCxoLHYpLHZ9ZHJhZ1JvdyhsLGEpe3JldHVybiB0aGlzLmRyYWdSb3dzKFtsXSxhKX1kcmFnUm93cyhsLGEpe2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgo''@;'; put 'put ''bCxhKTtyZXR1cm4gSDkobUgsdGhpcyxhKSx0aGlzLm1vdmVSb3dzKGwsZCl9aXNNb3ZlUG9zc2libGUobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaD1sLmxlbmd0aCthPmQsZj1hPDAsdj1sLnNvbWUoRD0+RDwwKSxN''@;'; put 'put ''PWwuc29tZShEPT5EPj1kKTtyZXR1cm4hKGh8fGZ8fHZ8fE0pfWlzUm93T3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9Y291bnRGaW5hbEluZGV4KGwsYSl7Y29uc3QgZD1xdShsLChoLGYpPT4oZjxhJiYoaCs9MSksaCksMCk7cmV0dXJuIGEtZH1nZXRS''@;'; put 'put ''b3dzSGVpZ2h0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcjtsZXQgaD0wO2ZvcihsZXQgZj1sO2Y8PWE7ZisrKXtjb25zdCB2PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtudWxsIT09diYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93''@;'; put 'put ''SGVpZ2h0KHYpfHx0aGlzLmhvdC52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKSl9cmV0dXJuIGh9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbWlFdO2lmKEFycmF5LmlzQXJyYXkobCkpdGhpcy5tb3ZlUm93cyhsLDApO2Vsc2UgaWYodm9p''@;'; put 'put ''ZCAwIT09bCl7Y29uc3QgYT10aGlzLnBlcnNpc3RlbnRTdGF0ZUxvYWQoKTthLmxlbmd0aCYmdGhpcy5tb3ZlUm93cyhhLDApfX1pc0ZpeGVkUm93VG9wKGwpe3JldHVybiBsPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wfWlzRml4ZWRSb3dCb3R0b20obCl7cmV0dXJuIGw+''@;'; put 'put ''dGhpcy5ob3QuY291bnRSb3dzKCktMS10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbX1wZXJzaXN0ZW50U3RhdGVTYXZlKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxSb3dNb3ZlIix0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5n''@;'; put 'put ''ZXRJbmRleGVzU2VxdWVuY2UoKSl9cGVyc2lzdGVudFN0YXRlTG9hZCgpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwibWFudWFsUm93TW92ZSIsbCksbC52YWx1ZT9sLnZhbHVlOltdfXByZXBhcmVSb3dzVG9Nb3ZpbmcoKXtjb25z''@;'; put 'put ''dCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1bXTtpZighbClyZXR1cm4gYTtjb25zdHtmcm9tOmQsdG86aH09bDtyZXR1cm4gR2EoTWF0aC5taW4oZC5yb3csaC5yb3cpLE1hdGgubWF4KGQucm93LGgucm93KSxNPT57YS5wdXNoKE0pfSksYX1yZWZyZXNoUG9zaXRpb25z''@;'; put 'put ''KCl7Y29uc3QgbD1GbyhYZCx0aGlzKS5jb29yZHMsYT10aGlzLmhvdC5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLGQ9dGhpcy5ob3QuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpLGg9dGhpcy5ob3QuY291bnRSb3dzKCk7dGhpcy5pc0ZpeGVkUm93VG9wKGwucm93KSYmYT4wJiZ0aGlzLmhv''@;'; put 'put ''dC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLTEsLTEpKSx0aGlzLmlzRml4ZWRSb3dCb3R0b20obC5yb3cpJiZkPGgmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0''@;'; put 'put ''TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQrMSwxKSx2b2lkIDAsITApO2NvbnN0IGY9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSx2PUZvKFhkLHRoaXMpLlRELE09dGhpcy5ob3Qucm9vdEVsZW1lbnQsRD1VMChNKSxaPWFfKE0pLHJlPWYuaG9sZGVyLnNjcm9sbFRvcCxiZT1ELnRvcC0odGhp''@;'; put 'put ''cy5ob3Qucm9vdFdpbmRvdyE9PVo/Wi5zY3JvbGxUb3A6MCksRWU9Rm8oWGQsdGhpcykuZXZlbnRQYWdlWS1iZStyZSxCZT1mLmhpZGVyLm9mZnNldEhlaWdodCxxZT1mLlRCT0RZLm9mZnNldFRvcCxydD1Gbyh0ZCx0aGlzKS5nZXRPZmZzZXQoKS50b3AscHQ9Rm8odGQsdGhpcykuZ2V0U2l6''@;'; put 'put ''ZSgpLmhlaWdodCxkdD12Lm9mZnNldEhlaWdodC8yLEp0PXYub2Zmc2V0SGVpZ2h0O2xldCB2bj10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldEhlaWdodCt0aGlzLmdldFJvd3NIZWlnaHQoMCxsLnJvdy0xKTtjb25zdCBDbj1FZT49dm4rZHQ7dGhpcy5pc0ZpeGVkUm93VG9wKGwucm93KSYm''@;'; put 'put ''KHZuKz10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSxsLnJvdzwwP0ZvKFhkLHRoaXMpLnJvdz1hPjA/YS0xOmE6Q24/KEZvKFhkLHRoaXMpLnJvdz1sLnJvdysxLHZuKz0wPT09bC5yb3c/SnQtMTpKdCk6Rm8oWGQsdGhpcykucm93''@;'; put 'put ''PWwucm93O2xldCB0bj1FZSxNbj12bjtFZStwdCtydD49QmU/dG49QmUtcHQtcnQ6RWUrcnQ8cWUmJih0bj1xZStNYXRoLmFicyhydCkpLHZuPj1CZS0xJiYoTW49QmUtMSksRm8odGQsdGhpcykuc2V0UG9zaXRpb24odG4pLEZvKHY2LHRoaXMpLnNldFBvc2l0aW9uKE1uKX1yZWdpc3RlckV2''@;'; put 'put ''ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9Pm02KE45LHRoaXMseTN0KS5jYWxsKHRoaXMsYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlz''@;'; put 'put ''dGVuZXIobCwibW91c2V1cCIsKCk9Pm02KE45LHRoaXMsdzN0KS5jYWxsKHRoaXMpKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX1idWlsZFBsdWdpblVJKCl7Rm8odGQsdGhpcykuYnVpbGQoKSxGbyh2Nix0aGlzKS5idWlsZCgpfWRlc3Ryb3koKXtGbyh0''@;'; put 'put ''ZCx0aGlzKS5kZXN0cm95KCksRm8odjYsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gYjN0KGMsbCxhLGQpe2NvbnN0e3d0VGFibGU6aCx3dFZpZXdwb3J0OmZ9PXRoaXMuaG90LnZpZXcuX3d0LHY9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hl''@;'; put 'put ''YWRlcigpLE09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighTXx8IXZ8fEZvKGI2LHRoaXMpfHwwIT09Yy5idXR0b24pcmV0dXJuIEg5KGI2LHRoaXMsITEpLEZvKFpnLHRoaXMpLmxlbmd0aD0wLHZvaWQgbG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsW1dRLGdIXSk7Y29uc3Qg''@;'; put 'put ''RD1Gbyh2Nix0aGlzKS5pc0J1aWx0KCkmJiFGbyh2Nix0aGlzKS5pc0FwcGVuZGVkKCksWj1Gbyh0ZCx0aGlzKS5pc0J1aWx0KCkmJiFGbyh0ZCx0aGlzKS5pc0FwcGVuZGVkKCk7RCYmWiYmKEZvKHY2LHRoaXMpLmFwcGVuZFRvKGguaGlkZXIpLEZvKHRkLHRoaXMpLmFwcGVuZFRvKGguaGlk''@;'; put 'put ''ZXIpKTtjb25zdHtmcm9tOnJlLHRvOmNlfT1NLGJlPU1hdGgubWluKHJlLnJvdyxjZS5yb3cpLEVlPU1hdGgubWF4KHJlLnJvdyxjZS5yb3cpO2lmKGwuY29sPDAmJmwucm93Pj1iZSYmbC5yb3c8PUVlKXtkLnJvdz0hMCxIOShiNix0aGlzLCEwKSxGbyhYZCx0aGlzKS5ldmVudFBhZ2VZPWMu''@;'; put 'put ''cGFnZVksRm8oWGQsdGhpcykuY29vcmRzPWwsRm8oWGQsdGhpcykuVEQ9YSxIOShaZyx0aGlzLHRoaXMucHJlcGFyZVJvd3NUb01vdmluZygpKTtjb25zdCBCZT1oLmhvbGRlci5zY3JvbGxMZWZ0K2YuZ2V0Um93SGVhZGVyV2lkdGgoKSxxZT10aGlzLmdldFJvd3NIZWlnaHQoYmUsbC5yb3ct''@;'; put 'put ''MSkrKGMuY2xpZW50WS1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCk7Rm8odGQsdGhpcykuc2V0UG9zaXRpb24obnVsbCxCZSksRm8odGQsdGhpcykuc2V0U2l6ZShoLmhpZGVyLm9mZnNldFdpZHRoLUJlLHRoaXMuZ2V0Um93c0hlaWdodChiZSxFZSkpLEZvKHRkLHRoaXMpLnNldE9m''@;'; put 'put ''ZnNldCgtcWUsbnVsbCksVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsV1EpLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpfWVsc2UgbG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsWVEpLEg5KGI2LHRoaXMsITEpLEZvKFpnLHRoaXMpLmxlbmd0aD0wfWZ1bmN0aW9uIHkzdChjKXtGbyhiNix0aGlzKSYm''@;'; put 'put ''KEZvKFhkLHRoaXMpLmV2ZW50UGFnZVk9Yy5wYWdlWSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSl9ZnVuY3Rpb24gXzN0KGMsbCxhLGQpeyF0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpfHwhRm8oYjYsdGhpcyl8fChGbyhaZyx0aGlzKS5pbmRleE9mKGwucm93KT4tMT9sbyh0aGlz''@;'; put 'put ''LmhvdC5yb290RWxlbWVudCxnSCk6VGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsZ0gpLGQucm93PSEwLGQuY29sdW1uPSEwLGQuY2VsbD0hMCxGbyhYZCx0aGlzKS5jb29yZHM9bCxGbyhYZCx0aGlzKS5URD1hKX1mdW5jdGlvbiB3M3QoKXtjb25zdCBjPUZvKFhkLHRoaXMpLnJvdyxsPUZvKFpn''@;'; put 'put ''LHRoaXMpLmxlbmd0aDtpZihIOShiNix0aGlzLCExKSxsbyh0aGlzLmhvdC5yb290RWxlbWVudCxbV1EsZ0gsWVFdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJlRpKHRoaXMuaG90LnJvb3RFbGVtZW50LFlRKSxsPDF8fHZvaWQgMD09PWMpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGE9Rm8oWmcsdGhpcylbMF0sZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGg9dGhpcy5kcmFnUm93cyhGbyhaZyx0aGlzKSxjKTtpZihGbyhaZyx0aGlzKS5sZW5ndGg9MCwhMD09PWgpe3RoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90''@;'; put 'put ''LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhkKTt0aGlzLmhvdC5zZWxlY3RSb3dzKGYsZitsLTEpfX1mdW5jdGlvbiBDM3QoKXtjb25zdCBjPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZD10aGlzLmhvdC52aWV3Ll93dC53dFZpZXdw''@;'; put 'put ''b3J0LmdldFJvd0hlYWRlcldpZHRoKCkrYy5ob2xkZXIuc2Nyb2xsTGVmdDtGbyh0ZCx0aGlzKS5zZXRQb3NpdGlvbihudWxsLGQpLEZvKHRkLHRoaXMpLnNldFNpemUoYy5oaWRlci5vZmZzZXRXaWR0aC1kKX1mdW5jdGlvbiBTM3QoKXt0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZnVu''@;'; put 'put ''Y3Rpb24gUzEoYyxsLGEpe21tZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gbW1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBLYyhj''@;'; put 'put ''LGwsYSl7cmV0dXJuIGMuc2V0KFdnKGMsbCksYSksYX1mdW5jdGlvbiBNYShjLGwpe3JldHVybiBjLmdldChXZyhjLGwpKX1mdW5jdGlvbiBXZyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3Qgdkg9Im1hbnVhbFJvd1Jlc2l6ZSIsdm1lPSJtYW51YWxSb3dIZWlnaHRzIjt2YXIgJHA9bmV3IFdlYWtNYXAsYkg9bmV3IFdlYWtNYXAsemg9bmV3IFdlYWtNYXAsY0E9''@;'; put 'put ''bmV3IFdlYWtNYXAseTY9bmV3IFdlYWtNYXAsR1E9bmV3IFdlYWtNYXAscHc9bmV3IFdlYWtNYXAseUg9bmV3IFdlYWtNYXAsbmQ9bmV3IFdlYWtNYXAsS3A9bmV3IFdlYWtNYXAsVjk9bmV3IFdlYWtNYXAsX0g9bmV3IFdlYWtNYXAsdUE9bmV3IFdlYWtNYXAsZEE9bmV3IFdlYWtNYXAsXzM9''@;'; put 'put ''bmV3IFdlYWtNYXAsaEE9bmV3IFdlYWtNYXAsXzY9bmV3IFdlYWtTZXQ7Y2xhc3MgRTN0IGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHZIfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0''@;'; put 'put ''aW9uIE0zdChjLGwpe21tZShjLGwpLGwuYWRkKGMpfSh0aGlzLF82KSxTMSh0aGlzLCRwLG51bGwpLFMxKHRoaXMsYkgsbnVsbCksUzEodGhpcyx6aCxbXSksUzEodGhpcyxjQSxudWxsKSxTMSh0aGlzLHk2LG51bGwpLFMxKHRoaXMsR1EsbnVsbCksUzEodGhpcyxwdyxudWxsKSxTMSh0aGlz''@;'; put 'put ''LHlILG51bGwpLFMxKHRoaXMsbmQsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxTMSh0aGlzLEtwLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksUzEodGhpcyxWOSwhMSksUzEodGhpcyxfSCwhMSksUzEodGhpcyx1QSwwKSxT''@;'; put 'put ''MSh0aGlzLGRBLG51bGwpLFMxKHRoaXMsXzMsdm9pZCAwKSxTMSh0aGlzLGhBLHZvaWQgMCksVGkoTWEobmQsdGhpcyksIm1hbnVhbFJvd1Jlc2l6ZXIiKSxUaShNYShLcCx0aGlzKSwibWFudWFsUm93UmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0''@;'; put 'put ''bCgpPyJyaWdodCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3ZIXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fChLYyhfMyx0aGlzLG5ldyBabSksTWEoXzMsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+V2coXzYsdGhpcyxMM3Qp''@;'; put 'put ''LmNhbGwodGhpcykpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxNYShfMyx0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChsLGEpPT5XZyhfNix0aGlzLFIzdCkuY2FsbCh0aGlzLGwsYSkpLHRoaXMuYmluZEV2ZW50cygp''@;'; put 'put ''LHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtLYyhoQSx0aGlzLE1hKF8zLHRoaXMpLmdldFZhbHVlcygpKSx0aGlzLmhvdC5yb3dJ''@;'; put 'put ''bmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNhdmVNYW51YWxSb3dIZWlnaHRzKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLHZtZSxNYShfMyx0aGlzKS5nZXRWYWx1ZXMoKSl9bG9hZE1hbnVh''@;'; put 'put ''bFJvd0hlaWdodHMoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsdm1lLGwpLGwudmFsdWV9c2V0TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPU1hdGgubWF4KGEsdGhpcy5ob3Qudmll''@;'; put 'put ''dy5nZXREZWZhdWx0Um93SGVpZ2h0KCkpO3JldHVybiBNYShfMyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxoKSxofWdldExhc3REZXNpcmVkUm93SGVpZ2h0KCl7cmV0dXJuIE1hKGNBLHRoaXMpfXNldHVwSGFuZGxlUG9zaXRpb24obCl7S2MoJHAsdGhpcyxsKTtjb25zdHt2aWV3OmF9PXRo''@;'; put 'put ''aXMuaG90LHtfd3Q6ZH09YSxoPWQud3RUYWJsZS5nZXRDb29yZHMoTWEoJHAsdGhpcykpLGY9aC5yb3c7aWYoZjwwKXJldHVybjtjb25zdCB2PXN1KE1hKCRwLHRoaXMpKSxNPU1hKCRwLHRoaXMpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQ9ZjxkLmdldFNldHRpbmcoImZpeGVkUm93c1Rv''@;'; put 'put ''cCIpLFo9Zj49YS5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoMCwxKS1kLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpO2xldCByZTtEP3JlPWQud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oTWEoJHAsdGhpcyksaC5y''@;'; put 'put ''b3csaC5jb2wpOlomJihyZT1kLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKE1hKCRwLHRoaXMpLGgucm93LGguY29sKSkscmV8fChyZT1kLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFJlbGF0aXZlQ2Vs''@;'; put 'put ''bFBvc2l0aW9uKE1hKCRwLHRoaXMpLGgucm93LGguY29sKSksS2MoYkgsdGhpcyx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpKSxLYyh6aCx0aGlzLFtdKTtjb25zdCBjZT10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVy''@;'; put 'put ''KCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZjZSYmWW4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLEVlPT57R2EoRWUuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csRWUuZ2V0Qm90dG9tU3Rh''@;'; put 'put ''cnRDb3JuZXIoKS5yb3cscnQ9PntNYSh6aCx0aGlzKS5pbmNsdWRlcyhydCl8fE1hKHpoLHRoaXMpLnB1c2gocnQpfSl9KSxNYSh6aCx0aGlzKS5pbmNsdWRlcyhNYShiSCx0aGlzKSl8fEtjKHpoLHRoaXMsW01hKGJILHRoaXMpXSksS2MoeUgsdGhpcyxyZS50b3AtNiksS2MocHcsdGhpcyxw''@;'; put 'put ''YXJzZUludChNLmhlaWdodCwxMCkpLE1hKG5kLHRoaXMpLnN0eWxlLnRvcD1gJHtNYSh5SCx0aGlzKStNYShwdyx0aGlzKX1weGAsTWEobmQsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke3JlLnN0YXJ0fXB4YCxNYShuZCx0aGlzKS5zdHlsZS53aWR0aD1gJHt2fXB4YCx0aGlzLmhv''@;'; put 'put ''dC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChNYShuZCx0aGlzKSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7TWEobmQsdGhpcykuc3R5bGUudG9wPWAke01hKHlILHRoaXMpK01hKGNBLHRoaXMpfXB4YH1zZXR1cEd1aWRlUG9zaXRpb24oKXtjb25zdCBsPXBhcnNlSW50KHN1KE1hKG5kLHRo''@;'; put 'put ''aXMpKSwxMCksYT1wYXJzZUludChNYShuZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl0sMTApK2wsZD10aGlzLmhvdC52aWV3LmdldFRhYmxlV2lkdGgoKTtUaShNYShuZCx0aGlzKSwiYWN0aXZlIiksVGkoTWEoS3AsdGhpcyksImFjdGl2ZSIpLE1hKEtwLHRoaXMpLnN0eWxlLnRvcD1N''@;'; put 'put ''YShuZCx0aGlzKS5zdHlsZS50b3AsTWEoS3AsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke2F9cHhgLE1hKEtwLHRoaXMpLnN0eWxlLndpZHRoPWQtbCsicHgiLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKE1hKEtwLHRoaXMpKX1yZWZyZXNoR3VpZGVQb3NpdGlvbigp''@;'; put 'put ''e01hKEtwLHRoaXMpLnN0eWxlLnRvcD1NYShuZCx0aGlzKS5zdHlsZS50b3B9aGlkZUhhbmRsZUFuZEd1aWRlKCl7bG8oTWEobmQsdGhpcyksImFjdGl2ZSIpLGxvKE1hKEtwLHRoaXMpLCJhY3RpdmUiKX1jaGVja0lmUm93SGVhZGVyKGwpe2NvbnN0IGE9Um0obCxbIlRCT0RZIl0sdGhpcy5o''@;'; put 'put ''b3Qucm9vdEVsZW1lbnQpLHtpbmxpbmVTdGFydE92ZXJsYXk6ZCx0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk6aCxib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk6Zn09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cztyZXR1cm5bZC5jbG9uZS53dFRhYmxlLlRCT0RZLGguY2xv''@;'; put 'put ''bmUud3RUYWJsZS5UQk9EWSxmLmNsb25lLnd0VGFibGUuVEJPRFldLmluY2x1ZGVzKGEpfWdldENsb3Nlc3RUSFBhcmVudChsKXtyZXR1cm4iVEFCTEUiIT09bC50YWdOYW1lPyJUSCI9PT1sLnRhZ05hbWU/bDp0aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnBhcmVudE5vZGUpOm51bGx9Z2V0''@;'; put 'put ''QWN0dWFsUm93SGVpZ2h0KGwpe2NvbnN0IGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQobCk7cmV0dXJuIHZvaWQgMCE9PWEmJk1hKHk2LHRoaXMpPGE/YTpNYSh5Nix0aGlzKX1hZnRlck1vdXNlRG93blRpbWVvdXQoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QucmVu''@;'; put 'put ''ZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sYT0oZCxoKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCk7dm9pZCAwIT09ZiYmS2MoeTYsdGhpcyxmKSx0aGlzLnNldE1h''@;'; put 'put ''bnVhbFNpemUoZCxNYSh5Nix0aGlzKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChkKSxkLCEwKSxoJiZsKCl9O01hKHVBLHRoaXMpPj0yJiYoTWEoemgsdGhpcykubGVuZ3RoPjE/KFluKE1hKHpoLHRoaXMpLGg9PnthKGgpfSks''@;'; put 'put ''bCgpKTpZbihNYSh6aCx0aGlzKSxoPT57YShoLCEwKX0pKSxLYyh1QSx0aGlzLDApLEtjKGRBLHRoaXMsbnVsbCl9YmluZEV2ZW50cygpe2NvbnN0e3Jvb3RFbGVtZW50Omwscm9vdFdpbmRvdzphfT10aGlzLmhvdDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNl''@;'; put 'put ''b3ZlciIsZD0+V2coXzYsdGhpcyxUM3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLGQ9PldnKF82LHRoaXMsQTN0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2Vt''@;'; put 'put ''b3ZlIixkPT5XZyhfNix0aGlzLGszdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLCgpPT5XZyhfNix0aGlzLEQzdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihNYShuZCx0aGlzKSwi''@;'; put 'put ''Y29udGV4dG1lbnUiLCgpPT5XZyhfNix0aGlzLEkzdCkuY2FsbCh0aGlzKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVDN0KGMpe2lmKCFBJChjLnRhcmdldCkmJiEwIT09TWEoX0gsdGhpcykmJnRoaXMuY2hlY2tJZlJvd0hlYWRlcihjLnRhcmdldCkpe2NvbnN0IGw9''@;'; put 'put ''dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQoYy50YXJnZXQpO2wmJihNYShWOSx0aGlzKXx8dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGwpKX19ZnVuY3Rpb24gQTN0KGMpe3BvKGMudGFyZ2V0LCJtYW51YWxSb3dSZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oTWEoJHAsdGhp''@;'; put 'put ''cykpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksS2MoVjksdGhpcywhMCksbnVsbD09PU1hKGRBLHRoaXMpJiYoS2MoZEEsdGhpcyxzZXRUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCkpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoTWEoZEEsdGhpcykp''@;'; put 'put ''KSxLYyh1QSx0aGlzLE1hKHVBLHRoaXMpKzEpLEtjKEdRLHRoaXMsYy5wYWdlWSksS2MoeTYsdGhpcyxNYShwdyx0aGlzKSkpfWZ1bmN0aW9uIGszdChjKXtNYShWOSx0aGlzKSYmKEtjKGNBLHRoaXMsTWEocHcsdGhpcykrKGMucGFnZVktTWEoR1EsdGhpcykpKSxZbihNYSh6aCx0aGlzKSxs''@;'; put 'put ''PT57S2MoeTYsdGhpcyx0aGlzLnNldE1hbnVhbFNpemUobCxNYShjQSx0aGlzKSkpfSksdGhpcy5yZWZyZXNoSGFuZGxlUG9zaXRpb24oKSx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCkpfWZ1bmN0aW9uIEQzdCgpe2NvbnN0IGM9KCk9Pnt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52''@;'; put 'put ''aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxsPShhLGQpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoYSksYSwhMSksZCYmYygpLHRoaXMuc2F2ZU1hbnVhbFJvd0hlaWdodHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJS''@;'; put 'put ''b3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGEpLGEsITEpfTtNYShWOSx0aGlzKSYmKHRoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksS2MoVjksdGhpcywhMSksTWEoeTYsdGhpcykhPT1NYShwdyx0aGlzKSYmKE1hKHpoLHRoaXMpLmxlbmd0aD4xPyhZbihNYSh6aCx0aGlzKSxk''@;'; put 'put ''PT57bChkKX0pLGMoKSk6WW4oTWEoemgsdGhpcyksZD0+e2woZCwhMCl9KSksdGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKE1hKCRwLHRoaXMpKSl9ZnVuY3Rpb24gSTN0KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChNYShuZCx0''@;'; put 'put ''aGlzKSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoTWEoS3AsdGhpcykpLEtjKFY5LHRoaXMsITEpLEtjKF9ILHRoaXMsITApLHRoaXMuaG90Ll9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e0tjKF9ILHRoaXMsITEpfSl9ZnVuY3Rpb24gUjN0KGMsbCl7bGV0IGE9YztpZih0aGlz''@;'; put 'put ''LmVuYWJsZWQpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPU1hKF8zLHRoaXMpLmdldFZhbHVlQXRJbmRleChkKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3ZIXSYmaCYmKGE9aCl9cmV0dXJuIGF9ZnVuY3Rpb24gTDN0KCl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZXR0aW5n''@;'; put 'put ''cygpW3ZIXSxsPXRoaXMubG9hZE1hbnVhbFJvd0hlaWdodHMoKTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3R5cGVvZiBsPCJ1Ij9sLmZvckVhY2goKGEsZCk9PntNYShfMyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pOkFycmF5LmlzQXJyYXkoYyk/KGMuZm9yRWFjaCgoYSxk''@;'; put 'put ''KT0+e01hKF8zLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSksS2MoaEEsdGhpcyxjKSk6ITA9PT1jJiZBcnJheS5pc0FycmF5KE1hKGhBLHRoaXMpKSYmTWEoaEEsdGhpcykuZm9yRWFjaCgoYSxkKT0+e01hKF8zLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSl9LCEwKX1mdW5jdGlv''@;'; put 'put ''biBCOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRjN0KGMpe3ZhciBsPWZ1bmN0aW9uIEgzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gYm1lKGMsbCl7cmV0dXJuIGMuZ2V0KHltZShjLGwpKX1mdW5jdGlv''@;'; put 'put ''biB3SChjLGwsYSl7cmV0dXJuIGMuc2V0KHltZShjLGwpLGEpLGF9ZnVuY3Rpb24geW1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQg''@;'; put 'put ''aXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX15KDY4MTQ2KSx5KDc0OTkpO3ZhciBqOT1uZXcgV2Vha01hcDtjb25zdCBxcD1jbGFzcyBOM3R7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe0I5KHRoaXMsInJvdyIsdm9pZCAwKSxCOSh0aGlzLCJjb2wiLHZvaWQgMCksQjkodGhpcywi''@;'; put 'put ''cm93c3BhbiIsdm9pZCAwKSxCOSh0aGlzLCJjb2xzcGFuIix2b2lkIDApLEI5KHRoaXMsInJlbW92ZWQiLCExKSxCOSh0aGlzLCJjZWxsQ29vcmRzRmFjdG9yeSIsdm9pZCAwKSxCOSh0aGlzLCJjZWxsUmFuZ2VGYWN0b3J5Iix2b2lkIDApLGZ1bmN0aW9uIE8zdChjLGwsYSl7KGZ1bmN0aW9u''@;'; put 'put ''IFAzdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsajksbnVsbCksdGhpcy5yb3c9bCx0aGlzLmNvbD1hLHRo''@;'; put 'put ''aXMucm93c3Bhbj1kLHRoaXMuY29sc3Bhbj1oLHRoaXMuY2VsbENvb3Jkc0ZhY3Rvcnk9Zix0aGlzLmNlbGxSYW5nZUZhY3Rvcnk9dn1zdGF0aWMgTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkLHJvd3NwYW46aCxjb2xzcGFuOmZ9PWw7cmV0dXJuIGdsYFRoZSBt''@;'; put 'put ''ZXJnZWQgY2VsbCBkZWNsYXJlZCB3aXRoIHtyb3c6ICR7YX0sIGNvbDogJHtkfSxceDIwCiAgICAgIHJvd3NwYW46ICR7aH0sIGNvbHNwYW46ICR7Zn19IGNvbnRhaW5zIG5lZ2F0aXZlIHZhbHVlcywgd2hpY2ggaXNceDIwCiAgICAgIG5vdCBzdXBwb3J0ZWQuIEl0IHdpbGwgbm90IGJlIGFk''@;'; put 'put ''ZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIElTX09VVF9PRl9CT1VORFNfV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIGdsYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0gaXMgcG9zaXRpb25lZFx4MjAKICAgICAgKG9yIHBvc2l0aW9u''@;'; put 'put ''ZWQgcGFydGlhbGx5KSBvdXRzaWRlIG9mIHRoZSB0YWJsZSByYW5nZS4gSXQgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZSBmaXggeW91ciBzZXR1cC5gfXN0YXRpYyBJU19TSU5HTEVfQ0VMTChsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIGdsYFRoZSBtZXJnZWQgY2Vs''@;'; put 'put ''bCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0gaGFzIGJvdGggInJvd3NwYW4iXHgyMAogICAgICBhbmQgImNvbHNwYW4iIGRlY2xhcmVkIGFzICIxIiwgd2hpY2ggbWFrZXMgaXQgYSBzaW5nbGUgY2VsbC4gSXQgY2Fubm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIFpF''@;'; put 'put ''Uk9fU1BBTl9XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZ2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSBoYXMgInJvd3NwYW4iXHgyMAogICAgICBvciAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjAiLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVk''@;'; put 'put ''LiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKXtsZXR7cm93OmEsY29sOmQscm93c3BhbjpoLGNvbHNwYW46Zn09bDtyZXR1cm4gYTwwfHxkPDB8fGg8MHx8ZjwwfXN0YXRpYyBpc1NpbmdsZUNlbGwobCl7bGV0''@;'; put 'put ''e3Jvd3NwYW46YSxjb2xzcGFuOmR9PWw7cmV0dXJuIDE9PT1kJiYxPT09YX1zdGF0aWMgY29udGFpbnNaZXJvU3BhbihsKXtsZXR7cm93c3BhbjphLGNvbHNwYW46ZH09bDtyZXR1cm4gMD09PWR8fDA9PT1hfXN0YXRpYyBpc091dE9mQm91bmRzKGwsYSxkKXtyZXR1cm4gbC5yb3c8MHx8bC5j''@;'; put 'put ''b2w8MHx8bC5yb3c+PWF8fGwucm93K2wucm93c3Bhbi0xPj1hfHxsLmNvbD49ZHx8bC5jb2wrbC5jb2xzcGFuLTE+PWR9bm9ybWFsaXplKGwpe2NvbnN0IGE9bC5jb3VudFJvd3MoKSxkPWwuY291bnRDb2xzKCk7dGhpcy5yb3c8MD90aGlzLnJvdz0wOnRoaXMucm93PmEtMSYmKHRoaXMucm93''@;'; put 'put ''PWEtMSksdGhpcy5jb2w8MD90aGlzLmNvbD0wOnRoaXMuY29sPmQtMSYmKHRoaXMuY29sPWQtMSksdGhpcy5yb3crdGhpcy5yb3dzcGFuPmEtMSYmKHRoaXMucm93c3Bhbj1hLXRoaXMucm93KSx0aGlzLmNvbCt0aGlzLmNvbHNwYW4+ZC0xJiYodGhpcy5jb2xzcGFuPWQtdGhpcy5jb2wpLHdI''@;'; put 'put ''KGo5LHRoaXMsbnVsbCl9aW5jbHVkZXMobCxhKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRoaXMuY29sPD1hJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49bCYmdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE+PWF9aW5jbHVkZXNIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuY29sPD1sJiZ0aGlz''@;'; put 'put ''LmNvbCt0aGlzLmNvbHNwYW4tMT49bH1pbmNsdWRlc1ZlcnRpY2FsbHkobCl7cmV0dXJuIHRoaXMucm93PD1sJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49bH1zaGlmdChsLGEpe2NvbnN0IGQ9bFswXXx8bFsxXSxoPWErTWF0aC5hYnMobFswXXx8bFsxXSktMSxmPWxbMF0/ImNvbHNwYW4i''@;'; put 'put ''OiJyb3dzcGFuIix2PWxbMF0/ImNvbCI6InJvdyIsTT1NYXRoLm1pbihhLGgpLEQ9TWF0aC5tYXgoYSxoKSxaPXRoaXNbdl0scmU9dGhpc1t2XSt0aGlzW2ZdLTE7aWYoWj49YSYmKHRoaXNbdl0rPWQpLGQ+MClhPD1yZSYmYT5aJiYodGhpc1tmXSs9ZCk7ZWxzZSBpZihkPDApe2lmKE08PVom''@;'; put 'put ''JkQ+PXJlKXJldHVybiB0aGlzLnJlbW92ZWQ9ITAsd0goajksdGhpcyxudWxsKSwhMTtpZihaPj1NJiZaPD1EKXtjb25zdCBjZT1ELVorMSxiZT1NYXRoLmFicyhkKS1jZTt0aGlzW3ZdLT1iZStkLHRoaXNbZl0tPWNlfWVsc2UgWjw9TSYmcmU+PUQ/dGhpc1tmXSs9ZDpaPD1NJiZyZT49TSYm''@;'; put 'put ''cmU8RCYmKHRoaXNbZl0tPXJlLU0rMSl9cmV0dXJuIHdIKGo5LHRoaXMsbnVsbCksITB9aXNGYXJ0aGVyKGwsYSl7cmV0dXJuIWx8fCgiZG93biI9PT1hP2wucm93K2wucm93c3Bhbi0xPHRoaXMucm93K3RoaXMucm93c3Bhbi0xOiJ1cCI9PT1hP2wucm93PnRoaXMucm93OiJyaWdodCI9PT1h''@;'; put 'put ''P2wuY29sK2wuY29sc3Bhbi0xPHRoaXMuY29sK3RoaXMuY29sc3Bhbi0xOiJsZWZ0Ij09PWE/bC5jb2w+dGhpcy5jb2w6bnVsbCl9Z2V0TGFzdFJvdygpe3JldHVybiB0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMX1nZXRMYXN0Q29sdW1uKCl7cmV0dXJuIHRoaXMuY29sK3RoaXMuY29sc3Bhbi0x''@;'; put 'put ''fWdldFJhbmdlKCl7cmV0dXJuIGJtZShqOSx0aGlzKXx8d0goajksdGhpcyx0aGlzLmNlbGxSYW5nZUZhY3RvcnkodGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5jZWxsQ29vcmRz''@;'; put 'put ''RmFjdG9yeSh0aGlzLmdldExhc3RSb3coKSx0aGlzLmdldExhc3RDb2x1bW4oKSkpKSxibWUoajksdGhpcyl9fTtmdW5jdGlvbiBDSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gajN0KGMpe3ZhciBsPWZ1bmN0aW9uIHozdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJu''@;'; put 'put ''IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gejkoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBv''@;'; put 'put ''biB0aGlzIG9iamVjdCIpfXZhciB3Nj1uZXcgV2Vha1NldDtjbGFzcyBTSHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gVjN0KGMsbCl7KGZ1bmN0aW9uIEIzdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUg''@;'; put 'put ''ZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyx3NiksQ0godGhpcywicGx1Z2luIix2b2lkIDApLENIKHRoaXMsIm1lcmdlZENlbGxzIixbXSksQ0godGhpcywibWVyZ2VkQ2VsbHNNYXRyaXgiLG5ldyBNYXApLENIKHRoaXMsImhvdCIsdm9pZCAw''@;'; put 'put ''KSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90fXN0YXRpYyBJU19PVkVSTEFQUElOR19XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZ2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSwgb3ZlcmxhcHNceDIwCiAgICAgIHdpdGggdGhlIG90''@;'; put 'put ''aGVyIGRlY2xhcmVkIG1lcmdlZCBjZWxsLiBUaGUgb3ZlcmxhcHBpbmcgbWVyZ2VkIGNlbGwgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZVx4MjAKICAgICAgZml4IHlvdXIgc2V0dXAuYH1nZXQobCxhKXt2YXIgZDtyZXR1cm4hKCF0aGlzLm1lcmdlZENlbGxzTWF0cml4Lmhh''@;'; put 'put ''cyhsKXx8bnVsbD09PShkPXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguZ2V0KGwpLmdldChhKSl8fHZvaWQgMD09PWQpJiZkfWdldEJ5UmFuZ2UobCl7Y29uc3R7cm93OmEsY29sOmR9PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmgsY29sOmZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksdj10''@;'; put 'put ''aGlzLm1lcmdlZENlbGxzLmxlbmd0aDtsZXQgTT0hMTtmb3IobGV0IEQ9MDtEPHY7RCsrKXtjb25zdCBaPXRoaXMubWVyZ2VkQ2VsbHNbRF0se3JvdzpyZSxjb2w6Y2Uscm93c3BhbjpiZSxjb2xzcGFuOkVlfT1aO2lmKHJlPj1hJiZyZStiZS0xPD1oJiZjZT49ZCYmY2UrRWUtMTw9Zil7TT1a''@;'; put 'put ''O2JyZWFrfX1yZXR1cm4gTX1maWx0ZXJPdmVybGFwcGluZ01lcmdlQ2VsbHMobCl7Y29uc3QgYT1uZXcgU2V0O3JldHVybiB0aGlzLm1lcmdlZENlbGxzLmZvckVhY2goaD0+e2NvbnN0e3JvdzpmLGNvbDp2LGNvbHNwYW46TSxyb3dzcGFuOkR9PWg7Zm9yKGxldCBaPWY7WjxmK0Q7WisrKWZv''@;'; put 'put ''cihsZXQgcmU9djtyZTx2K007cmUrKylhLmFkZChgciR7Wn0sYyR7cmV9YCl9KSxsLmZpbHRlcihoPT57Y29uc3R7cm93OmYsY29sOnYsY29sc3BhbjpNLHJvd3NwYW46RH09aCxaPW5ldyBTZXQ7bGV0IHJlPSExO2ZvcihsZXQgY2U9ZjtjZTxmK0Q7Y2UrKyl7Zm9yKGxldCBiZT12O2JlPHYr''@;'; put 'put ''TTtiZSsrKXtjb25zdCBFZT1gciR7Y2V9LGMke2JlfWA7aWYoYS5oYXMoRWUpKXtpbChTSC5JU19PVkVSTEFQUElOR19XQVJOSU5HKGgpKSxyZT0hMDticmVha31aLmFkZChFZSl9aWYocmUpYnJlYWt9cmV0dXJuIHJlfHxhLmFkZCguLi5aKSwhcmV9KX1nZXRXaXRoaW5SYW5nZShsKXtsZXQg''@;'; put 'put ''YT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0e3JvdzpkLGNvbDpofT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpmLGNvbDp2fT1sLmdldEJvdHRvbUVuZENvcm5lcigpLE09W107Zm9yKGxldCBEPWQ7RDw9ZjtEKyspZm9y''@;'; put 'put ''KGxldCBaPWg7Wjw9djtaKyspe2NvbnN0IHJlPXRoaXMuZ2V0KEQsWik7cmUmJihhfHwhYSYmcmUucm93PT09RCYmcmUuY29sPT09WikmJk0ucHVzaChyZSl9cmV0dXJuIE19YWRkKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNb''@;'; put 'put ''MV07Y29uc3QgZD1sLnJvdyxoPWwuY29sLE09bmV3IHFwKGQsaCxsLnJvd3NwYW4sbC5jb2xzcGFuLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UpLEQ9dGhpcy5nZXQoZCxoKSxaPSFhJiZ0aGlzLmlzT3ZlcmxhcHBpbmcoTSk7cmV0dXJuIER8''@;'; put 'put ''fFo/KFomJmlsKFNILklTX09WRVJMQVBQSU5HX1dBUk5JTkcoTSkpLCExKToodGhpcy5ob3QmJk0ubm9ybWFsaXplKHRoaXMuaG90KSx0aGlzLm1lcmdlZENlbGxzLnB1c2goTSksejkodzYsdGhpcyxfbWUpLmNhbGwodGhpcyxNKSxNKX1yZW1vdmUobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGws''@;'; put 'put ''YSksaD1kP3RoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZihkKTotMTtyZXR1cm4hKCFkfHwtMT09PWgpJiYodGhpcy5tZXJnZWRDZWxscy5zcGxpY2UoaCwxKSx6OSh3Nix0aGlzLFUzdCkuY2FsbCh0aGlzLGQpLGQpfWNsZWFyKCl7WW4odGhpcy5tZXJnZWRDZWxscyxsPT57bGV0e3JvdzphLGNv''@;'; put 'put ''bDpkLHJvd3NwYW46aCxjb2xzcGFuOmZ9PWw7R2EoYSxhK2gsdj0+e0dhKGQsZCtmLE09Pntjb25zdCBEPXRoaXMuaG90LmdldENlbGwodixNKTtEJiYoRC5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxELnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLEQuc3R5bGUuZGlzcGxheT0iIil9''@;'; put 'put ''KX0pfSksdGhpcy5tZXJnZWRDZWxscy5sZW5ndGg9MCx0aGlzLm1lcmdlZENlbGxzTWF0cml4PW5ldyBNYXB9aXNPdmVybGFwcGluZyhsKXtjb25zdCBhPWwuZ2V0UmFuZ2UoKTtmb3IobGV0IGQ9MDtkPHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoO2QrKylpZih0aGlzLm1lcmdlZENlbGxzW2Rd''@;'; put 'put ''LmdldFJhbmdlKCkub3ZlcmxhcHMoYSkpcmV0dXJuITA7cmV0dXJuITF9aXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLmdldChsLGEpO2lmKCFkKXJldHVybiExO2NvbnN0e3JvdzpoLGNvbDpmLHJvd3NwYW46dixjb2xzcGFuOk19PWQsRD10aGlzLmhvdC52''@;'; put 'put ''aWV3LmdldEFjdGl2ZU92ZXJsYXlOYW1lKCksWj1bInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRCk/MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpLHJlPVsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0''@;'; put 'put ''b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEQpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxjZT1rcyhaLGgsaCt2LTEpLGJlPWtzKHJlLGYsZitNLTEpO3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVu''@;'; put 'put ''SW5kZXgoY2UsMSk9PT1sJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYmUsMSk9PT1hfWdldEZpcnN0UmVuZGVyYWJsZUNvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtpZighZHx8dGhpcy5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdl''@;'; put 'put ''ZENlbGwobCxhKSlyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKTtjb25zdCBoPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLnJvdywxKSxmPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleChkLmNvbCwxKTtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKX1nZXRTdGFydE1vc3RDb2x1bW5JbmRleChsLGEpe2NvbnN0IGQ9ejkodzYsdGhpcyxNSCkuY2FsbCh0aGlzLGwsImNvbCIsLTEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYo''@;'; put 'put ''ZFtmXTw9YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofWdldEVuZE1vc3RDb2x1bW5JbmRleChsLGEpe2NvbnN0IGQ9ejkodzYsdGhpcyxNSCkuY2FsbCh0aGlzLGwsImNvbCIsMSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPj1hKXtoPWRbZl07YnJlYWt9cmV0''@;'; put 'put ''dXJuIGh9Z2V0VG9wTW9zdFJvd0luZGV4KGwsYSl7Y29uc3QgZD16OSh3Nix0aGlzLE1IKS5jYWxsKHRoaXMsbCwicm93IiwtMSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPD1hKXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9Z2V0Qm90dG9tTW9zdFJvd0luZGV4''@;'; put 'put ''KGwsYSl7Y29uc3QgZD16OSh3Nix0aGlzLE1IKS5jYWxsKHRoaXMsbCwicm93IiwxKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl0+PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1zaGlmdENvbGxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPVswLDBdO3N3aXRjaChs''@;'; put 'put ''KXtjYXNlInJpZ2h0IjpoWzBdKz1kO2JyZWFrO2Nhc2UibGVmdCI6aFswXS09ZDticmVhaztjYXNlImRvd24iOmhbMV0rPWQ7YnJlYWs7Y2FzZSJ1cCI6aFsxXS09ZH1jb25zdCBmPVtdO3RoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaCh2PT57di5zaGlmdChoLGEpLHYucmVtb3ZlZCYmZi5wdXNo''@;'; put 'put ''KHYpfSksZi5mb3JFYWNoKHY9Pnt0aGlzLm1lcmdlZENlbGxzLnNwbGljZSh0aGlzLm1lcmdlZENlbGxzLmluZGV4T2YodiksMSl9KSx0aGlzLm1lcmdlZENlbGxzTWF0cml4LmNsZWFyKCksdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKHY9Pnt6OSh3Nix0aGlzLF9tZSkuY2FsbCh0aGlzLHYp''@;'; put 'put ''fSl9fWZ1bmN0aW9uIE1IKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjE7Y29uc3QgZD1uZXcgTWFwLGg9MT09PWE/Yy5nZXRUb3BTdGFydENvcm5lcigpOmMuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZj0xPT09YT9jLmdl''@;'; put 'put ''dEJvdHRvbUVuZENvcm5lcigpOmMuZ2V0VG9wU3RhcnRDb3JuZXIoKTtmb3IobGV0IHY9aC5yb3c7MT09PWE/djw9Zi5yb3c6dj49Zi5yb3c7dis9YSlmb3IobGV0IE09aC5jb2w7MT09PWE/TTw9Zi5jb2w6TT49Zi5jb2w7TSs9YSl7Y29uc3QgRD0icm93Ij09PWw/djpNLFo9dGhpcy5nZXQo''@;'; put 'put ''dixNKTtsZXQgcmU9RDtaJiYocmU9MT09PWE/WltsXStaW2Ake2x9c3BhbmBdLTE6WltsXSksZC5oYXMoRCl8fGQuc2V0KEQsbmV3IFNldCksZC5nZXQoRCkuYWRkKHJlKX1yZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KEFycmF5LmZyb20oZC5lbnRyaWVzKCkpLmZpbHRlcih2PT57bGV0WyxN''@;'; put 'put ''XT12O3JldHVybiAxPT09TS5zaXplfSkuZmxhdE1hcCh2PT57bGV0WyxNXT12O3JldHVybiBBcnJheS5mcm9tKE0pfSkpKX1mdW5jdGlvbiBfbWUoYyl7Zm9yKGxldCBsPWMucm93O2w8Yy5yb3crYy5yb3dzcGFuO2wrKylmb3IobGV0IGE9Yy5jb2w7YTxjLmNvbCtjLmNvbHNwYW47YSsrKXRo''@;'; put 'put ''aXMubWVyZ2VkQ2VsbHNNYXRyaXguaGFzKGwpfHx0aGlzLm1lcmdlZENlbGxzTWF0cml4LnNldChsLG5ldyBNYXApLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguZ2V0KGwpLnNldChhLGMpfWZ1bmN0aW9uIFUzdChjKXtmb3IobGV0IGw9Yy5yb3c7bDxjLnJvdytjLnJvd3NwYW47bCsrKWZvcihs''@;'; put 'put ''ZXQgYT1jLmNvbDthPGMuY29sK2MuY29sc3BhbjthKyspdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5nZXQobCkuZGVsZXRlKGEpfWNvbnN0IFozdD1TSDtmdW5jdGlvbiAkUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVzN0KGMpe3ZhciBsPWZ1bmN0aW9uIFkzdChjLGwpe2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVz''@;'; put 'put ''dCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFi''@;'; put 'put ''bGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgJDN0PWNsYXNzIEczdHtjb25zdHJ1Y3RvcihsKXskUSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksJFEodGhpcywibWVyZ2VkQ2VsbHNDb2xsZWN0aW9uIix2b2lkIDApLCRRKHRoaXMsImN1cnJlbnRGaWxs''@;'; put 'put ''RGF0YSIsbnVsbCksdGhpcy5wbHVnaW49bCx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbj10aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb259Z2V0RGlyZWN0aW9uKGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZD1hWzBdPT09bFswXSYmYVsxXT09PWxbMV0mJmFbM109PT1sWzNdPyJk''@;'; put 'put ''b3duIjphWzJdPT09bFsyXSYmYVsxXT09PWxbMV0mJmFbM109PT1sWzNdPyJ1cCI6YVsxXT09PWxbMV0mJmFbMl09PT1sWzJdPyJyaWdodCI6ImxlZnQiLGR9c25hcERyYWdBcmVhKGwsYSxkLGgpe2NvbnN0IGY9YS5zbGljZSgwKSx2PXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxbTSxE''@;'; put 'put ''LFoscmVdPWwsYmU9WyJ1cCIsImRvd24iXS5pbmRleE9mKGQpPi0xP1otTSsxOnJlLUQrMSxCZT12LU1hdGguZmxvb3Iodi9iZSkqYmUscWU9dGhpcy5nZXRGYXJ0aGVzdENvbGxlY3Rpb24obCxhLGQsaCk7aWYocWUpaWYoImRvd24iPT09ZCl7Y29uc3QgcnQ9cWUucm93K3FlLnJvd3NwYW4t''@;'; put 'put ''TS1CZTtmWzJdK3J0Pj10aGlzLnBsdWdpbi5ob3QuY291bnRSb3dzKCk/ZlsyXS09QmU6ZlsyXSs9QmU/cnQ6MH1lbHNlIGlmKCJyaWdodCI9PT1kKXtjb25zdCBydD1xZS5jb2wrcWUuY29sc3Bhbi1ELUJlO2ZbM10rcnQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudENvbHMoKT9mWzNdLT1CZTpm''@;'; put 'put ''WzNdKz1CZT9ydDowfWVsc2UgaWYoInVwIj09PWQpe2NvbnN0IHJ0PVotQmUtcWUucm93KzE7ZlswXStydDwwP2ZbMF0rPUJlOmZbMF0tPUJlP3J0OjB9ZWxzZSBpZigibGVmdCI9PT1kKXtjb25zdCBydD1yZS1CZS1xZS5jb2wrMTtmWzFdK3J0PDA/ZlsxXSs9QmU6ZlsxXS09QmU/cnQ6MH1y''@;'; put 'put ''ZXR1cm4gdGhpcy51cGRhdGVDdXJyZW50RmlsbENhY2hlKHtiYXNlQXJlYTpsLGRyYWdEaXJlY3Rpb246ZCxmb3VuZE1lcmdlZENlbGxzOmgsZmlsbFNpemU6dixkcmFnQXJlYTpmLGN5Y2xlTGVuZ3RoOmJlfSksZn11cGRhdGVDdXJyZW50RmlsbENhY2hlKGwpe3RoaXMuY3VycmVudEZpbGxE''@;'; put 'put ''YXRhfHwodGhpcy5jdXJyZW50RmlsbERhdGE9e30pLEV1KHRoaXMuY3VycmVudEZpbGxEYXRhLGwpfWdldEF1dG9maWxsU2l6ZShsLGEsZCl7Y29uc3RbaCxmLHYsTV09bCxbRCxaLHJlLGNlXT1hO3N3aXRjaChkKXtjYXNlInVwIjpyZXR1cm4gaC1EO2Nhc2UiZG93biI6cmV0dXJuIHJlLXY7''@;'; put 'put ''Y2FzZSJsZWZ0IjpyZXR1cm4gZi1aO2Nhc2UicmlnaHQiOnJldHVybiBjZS1NO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWdldERyYWdBcmVhKGwsYSxkKXtjb25zdFtoLGYsdixNXT1sLFtELFoscmUsY2VdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybltELFosaC0xLE1dO2Nhc2UiZG93biI6''@;'; put 'put ''e2NvbnN0IGJlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChyZSxNKTtyZXR1cm5bdisxLGYscmUrKGJlP2JlLnJvd3NwYW4tMTowKSxNXX1jYXNlImxlZnQiOnJldHVybltELFosdixmLTFdO2Nhc2UicmlnaHQiOntjb25zdCBiZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5n''@;'; put 'put ''ZXQocmUsTSk7cmV0dXJuW2gsTSsoYmU/YmUuY29sc3Bhbi0xOjApLHJlLGNlXX1kZWZhdWx0OnJldHVybiBudWxsfX1nZXRGYXJ0aGVzdENvbGxlY3Rpb24obCxhLGQsaCl7Y29uc3RbZix2LE0sRF09bCxaPVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMSxyZT1aP006RCxjZT1aP2Y6dixi''@;'; put 'put ''ZT10aGlzLmdldEF1dG9maWxsU2l6ZShsLGEsZCksRWU9Wj9NLWYrMTpELXYrMSxxZT1iZS1NYXRoLmZsb29yKGJlL0VlKSpFZTtsZXQgcnQ9bnVsbCxwdD1udWxsLGR0PW51bGw7c3dpdGNoKGQpe2Nhc2UidXAiOnJ0PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLGR0PXJlLXFlKzE7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJsZWZ0IjpydD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLGR0PXJlLXFlKzE7YnJlYWs7Y2FzZSJkb3duIjpydD0iaW5jbHVkZXNWZXJ0aWNhbGx5IixkdD1jZStxZS0xO2JyZWFrO2Nhc2UicmlnaHQiOnJ0PSJpbmNsdWRlc0hvcml6b250YWxseSIsZHQ9Y2UrcWUtMX1yZXR1cm4gWW4oaCxK''@;'; put 'put ''dD0+e0p0W3J0XShkdCkmJkp0LmlzRmFydGhlcihwdCxkKSYmKHB0PUp0KX0pLHB0fXJlY3JlYXRlQWZ0ZXJEYXRhUG9wdWxhdGlvbihsKXtpZighdGhpcy5jdXJyZW50RmlsbERhdGEpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRSYW5nZUZyb21DaGFuZ2VzKGwpLGQ9dGhpcy5jdXJyZW50Rmls''@;'; put 'put ''bERhdGEuZm91bmRNZXJnZWRDZWxscyxoPXRoaXMuY3VycmVudEZpbGxEYXRhLmRyYWdEaXJlY3Rpb24sZj0oWixyZSk9Pntzd2l0Y2goaCl7Y2FzZSJ1cCI6cmV0dXJuIFoucm93LXJlPj1hLmZyb20ucm93O2Nhc2UiZG93biI6cmV0dXJuIFoucm93K1oucm93c3Bhbi0xK3JlPD1hLnRvLnJv''@;'; put 'put ''dztjYXNlImxlZnQiOnJldHVybiBaLmNvbC1yZT49YS5mcm9tLmNvbHVtbjtjYXNlInJpZ2h0IjpyZXR1cm4gWi5jb2wrWi5jb2xzcGFuLTErcmU8PWEudG8uY29sdW1uO2RlZmF1bHQ6cmV0dXJuIG51bGx9fTtsZXQgdj0wLE09bnVsbCxEPTE7ZG97Zm9yKGxldCBaPTA7WjxkLmxlbmd0aDta''@;'; put 'put ''Kz0xKXtpZihNPWRbWl0sdj1EKnRoaXMuY3VycmVudEZpbGxEYXRhLmN5Y2xlTGVuZ3RoLGYoTSx2KSlzd2l0Y2goaCl7Y2FzZSJ1cCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LXYscm93c3BhbjpNLnJvd3NwYW4sY29sOk0uY29sLGNvbHNwYW46''@;'; put 'put ''TS5jb2xzcGFufSwhMCk7YnJlYWs7Y2FzZSJkb3duIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5yb3crdixyb3dzcGFuOk0ucm93c3Bhbixjb2w6TS5jb2wsY29sc3BhbjpNLmNvbHNwYW59LCEwKTticmVhaztjYXNlImxlZnQiOnRoaXMucGx1Z2luLm1l''@;'; put 'put ''cmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdyxyb3dzcGFuOk0ucm93c3Bhbixjb2w6TS5jb2wtdixjb2xzcGFuOk0uY29sc3Bhbn0sITApO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdyxyb3dzcGFuOk0u''@;'; put 'put ''cm93c3Bhbixjb2w6TS5jb2wrdixjb2xzcGFuOk0uY29sc3Bhbn0sITApfVo9PT1kLmxlbmd0aC0xJiYoRCs9MSl9fXdoaWxlKGYoTSx2KSk7dGhpcy5jdXJyZW50RmlsbERhdGE9bnVsbCx0aGlzLnBsdWdpbi5ob3QucmVuZGVyKCksZC5sZW5ndGg+MCYmdGhpcy5wbHVnaW4uaWZDaHJvbWVG''@;'; put 'put ''b3JjZVJlcGFpbnQoKX1nZXRSYW5nZUZyb21DaGFuZ2VzKGwpe2NvbnN0IGE9e21pbjpudWxsLG1heDpudWxsfSxkPXttaW46bnVsbCxtYXg6bnVsbH07cmV0dXJuIFluKGwsaD0+e2NvbnN0IGY9aFswXSx2PXRoaXMucGx1Z2luLmhvdC5wcm9wVG9Db2woaFsxXSk7KG51bGw9PT1hLm1pbnx8''@;'; put 'put ''ZjxhLm1pbikmJihhLm1pbj1mKSwobnVsbD09PWEubWF4fHxmPmEubWF4KSYmKGEubWF4PWYpLChudWxsPT09ZC5taW58fHY8ZC5taW4pJiYoZC5taW49diksKG51bGw9PT1kLm1heHx8dj5kLm1heCkmJihkLm1heD12KX0pLHtmcm9tOntyb3c6YS5taW4sY29sdW1uOmQubWlufSx0bzp7cm93''@;'; put 'put ''OmEubWF4LGNvbHVtbjpkLm1heH19fWRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD10aGlzLmdldERyYWdBcmVhKGwsYSxkKSxbZix2LE0sRF09aCxaPXRoaXMucGx1Z2luLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpLHJlPXRoaXMucGx1Z2luLmhvdC5fY3Jl''@;'; put 'put ''YXRlQ2VsbENvb3JkcyhNLEQpLGNlPXRoaXMucGx1Z2luLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKFosWixyZSk7aWYoMD09PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGNlLCEwKS5sZW5ndGgpcmV0dXJuITE7Y29uc3QgRWU9dGhpcy5tZXJnZWRDZWxsc0NvbGxl''@;'; put 'put ''Y3Rpb24uZ2V0V2l0aGluUmFuZ2UoY2UsITEpO3JldHVybiAwPT09RWUubGVuZ3RofHwoInVwIj09PWR8fCJkb3duIj09PWQ/IUVlLmV2ZXJ5KEJlPT57bGV0e2NvbHNwYW46cWV9PUJlO3JldHVybiBxZT09PWNlLmdldFdpZHRoKCl9KTohRWUuZXZlcnkoQmU9PntsZXR7cm93c3BhbjpxZX09''@;'; put 'put ''QmU7cmV0dXJuIHFlPT09Y2UuZ2V0SGVpZ2h0KCl9KSl9fTtmdW5jdGlvbiBLUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSzN0KGMpe3ZhciBsPWZ1bmN0aW9uIHEzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVd''@;'; put 'put ''O2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9T''@;'; put 'put ''dHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3Qg''@;'; put 'put ''SjN0PWNsYXNzIFgzdHtjb25zdHJ1Y3RvcihsKXtLUSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksS1EodGhpcywiaG90Iix2b2lkIDApLEtRKHRoaXMsImZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lIiwiZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwiKSx0aGlzLnBsdWdpbj1sLHRoaXMu''@;'; put 'put ''aG90PWwuaG90fWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShsLGEsZCxoKXtjb25zdCBmPU1hdGgubWluKGRbMF0sZFsyXSksdj1NYXRoLm1pbihkWzFdLGRbM10pLE09TWF0aC5tYXgoZFswXSxkWzJdKSxEPU1hdGgubWF4KGRbMV0sZFszXSk7aWYodm9pZCAwPT09aHx8IXRoaXMu''@;'; put 'put ''cGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwobCxhKSlyZXR1cm47Y29uc3QgcmU9dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpO2lmKCFyZSlyZXR1cm47Y29uc3QgY2U9cmUuZ2V0TGFzdFJvdygpLGJlPXJl''@;'; put 'put ''LmdldExhc3RDb2x1bW4oKTtyZXR1cm4gZjw9cmUucm93JiZ2PD1yZS5jb2wmJk0+PWNlJiZEPj1iZT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS0ke2h9YDp0aGlzLmlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZChyZSx0aGlzLnBsdWdpbi5ob3QuZ2V0U2VsZWN0''@;'; put 'put ''ZWRSYW5nZSgpKT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS1tdWx0aXBsZWA6dm9pZCAwfWlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZChsLGEpe2NvbnN0IGQ9W107aWYoIWF8fCFsKXJldHVybiExO2ZvcihsZXQgaD0wO2g8bC5yb3dzcGFuO2grPTEpZm9yKGxl''@;'; put 'put ''dCBmPTA7ZjxsLmNvbHNwYW47Zis9MSlkLnB1c2godGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3craCxsLmNvbCtmKSk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKz0xKXtjb25zdCBmPVtdO2ZvcihsZXQgdj0wO3Y8YS5sZW5ndGg7dis9MSlmW3ZdPWFbdl0uaW5jbHVkZXMoZFto''@;'; put 'put ''XSk7aWYoIWYuaW5jbHVkZXMoITApKXJldHVybiExfXJldHVybiEwfWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl7Y29uc3QgbD1bXTtmb3IobGV0IGE9MDthPD03O2ErPTEpbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7''@;'; put 'put ''YX1gKTtyZXR1cm4gbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYCksbH19O2Z1bmN0aW9uIGZBKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBlcHQoYyl7dmFyIGw9ZnVuY3Rpb24gdHB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBj''@;'; put 'put ''fHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBh''@;'; put 'put ''IHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB3bWV7Y29uc3RydWN0b3IobCl7ZkEodGhpcywiZGF0YSIsdm9pZCAwKSxmQSh0aGlzLCJuZXh0IixudWxsKSxmQSh0aGlzLCJwcmV2IixudWxsKSx0aGlzLmRhdGE9bH19Y29uc3QgeEg9Y2xhc3MgbnB0e2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7ZkEodGhpcywiZmlyc3QiLG51bGwpLGZBKHRoaXMsImxhc3QiLG51bGwpfXB1c2gobCl7Y29uc3QgYT1uZXcgd21lKGwpO2lmKG51bGw9PT10aGlzLmZpcnN0KXRoaXMuZmlyc3Q9YSx0aGlzLmxhc3Q9YTtlbHNle2NvbnN0IGQ9dGhpcy5sYXN0O3RoaXMubGFzdD1hLGEucHJldj1k''@;'; put 'put ''LGQubmV4dD1hfXJldHVybiBhfXVuc2hpZnQobCl7Y29uc3QgYT1uZXcgd21lKGwpO2lmKG51bGw9PT10aGlzLmZpcnN0KXRoaXMuZmlyc3Q9YSx0aGlzLmxhc3Q9YTtlbHNle2NvbnN0IGQ9dGhpcy5maXJzdDt0aGlzLmZpcnN0PWEsYS5uZXh0PWQsZC5wcmV2PWF9fWlub3JkZXIobCl7bGV0''@;'; put 'put ''IGE9dGhpcy5maXJzdDtmb3IoO2E7KXtjb25zdCBkPWwoYSk7aWYoYT09PXRoaXMubGFzdHx8ITA9PT1kKWJyZWFrO2E9YS5uZXh0fX1yZW1vdmUobCl7aWYobnVsbD09PXRoaXMuZmlyc3QpcmV0dXJuITE7bGV0IGQsaCxhPXRoaXMuZmlyc3Q7Zm9yKDthOyl7aWYoYS5kYXRhPT09bClyZXR1''@;'; put 'put ''cm4gZD1hLm5leHQsaD1hLnByZXYsZCYmKGQucHJldj1oKSxoJiYoaC5uZXh0PWQpLGE9PT10aGlzLmZpcnN0JiYodGhpcy5maXJzdD1kKSxhPT09dGhpcy5sYXN0JiYodGhpcy5sYXN0PWgpLCEwO2E9YS5uZXh0fXJldHVybiExfWhhc0N5Y2xlKCl7bGV0IGw9dGhpcy5maXJzdCxhPXRoaXMu''@;'; put 'put ''Zmlyc3Q7Zm9yKDs7KXtpZihudWxsPT09bHx8KGw9bC5uZXh0LG51bGw9PT1sKSlyZXR1cm4hMTtpZihsPWwubmV4dCxhPWEubmV4dCxsPT09YSlyZXR1cm4hMH19cG9wKCl7aWYobnVsbD09PXRoaXMubGFzdClyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMubGFzdDtyZXR1cm4gdGhpcy5sYXN0''@;'; put 'put ''PXRoaXMubGFzdC5wcmV2LGx9c2hpZnQoKXtpZihudWxsPT09dGhpcy5maXJzdClyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMuZmlyc3Q9dGhpcy5maXJzdC5uZXh0LGx9cmVjdXJzaXZlUmV2ZXJzZSgpe2lmKCF0aGlzLmZpcnN0KXJldHVybjsoZnVuY3Rpb24g''@;'; put 'put ''bChkLGgpe2gmJihsKGgsaC5uZXh0KSxoLm5leHQ9ZCl9KSh0aGlzLmZpcnN0LHRoaXMuZmlyc3QubmV4dCksdGhpcy5maXJzdC5uZXh0PW51bGw7Y29uc3QgYT10aGlzLmZpcnN0O3RoaXMuZmlyc3Q9dGhpcy5sYXN0LHRoaXMubGFzdD1hfXJldmVyc2UoKXtpZighdGhpcy5maXJzdHx8IXRo''@;'; put 'put ''aXMuZmlyc3QubmV4dClyZXR1cm47bGV0IGQsbD10aGlzLmZpcnN0Lm5leHQsYT10aGlzLmZpcnN0O2Zvcig7bDspZD1sLm5leHQsbC5uZXh0PWEsYS5wcmV2PWwsYT1sLGw9ZDt0aGlzLmZpcnN0Lm5leHQ9bnVsbCx0aGlzLmxhc3QucHJldj1udWxsLGQ9dGhpcy5maXJzdCx0aGlzLmZpcnN0''@;'; put 'put ''PWEsdGhpcy5sYXN0PWR9fTtmdW5jdGlvbiBVOShjLGwsYSl7Q21lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBDbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9i''@;'; put 'put ''amVjdCIpfWZ1bmN0aW9uIHZsKGMsbCl7cmV0dXJuIGMuZ2V0KEVIKGMsbCkpfWZ1bmN0aW9uIFVoKGMsbCxhKXtyZXR1cm4gYy5zZXQoRUgoYyxsKSxhKSxhfWZ1bmN0aW9uIEVIKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgWHA9bmV3IFdlYWtNYXAsSnA9bmV3IFdlYWtNYXAsUXA9bmV3IFdlYWtNYXAsZTQ9bmV3IFdlYWtNYXAscVE9bmV3IFdlYWtNYXAsVEg9''@;'; put 'put ''bmV3IFdlYWtNYXAsQUg9bmV3IFdlYWtNYXAsWFE9bmV3IFdlYWtTZXQ7Y2xhc3MgaXB0e2NvbnN0cnVjdG9yKGwpe2xldHttZXJnZWRDZWxsc0dldHRlcjphLHJvd0luZGV4TWFwcGVyOmQsY29sdW1uSW5kZXhNYXBwZXI6aH09bDsoZnVuY3Rpb24gcnB0KGMsbCl7Q21lKGMsbCksbC5hZGQo''@;'; put 'put ''Yyl9KSh0aGlzLFhRKSxVOSh0aGlzLFhwLG5ldyB4SCksVTkodGhpcyxKcCxuZXcgeEgpLFU5KHRoaXMsUXAsbnVsbCksVTkodGhpcyxlNCxudWxsKSxVOSh0aGlzLHFRLG51bGwpLFU5KHRoaXMsVEgsbnVsbCksVTkodGhpcyxBSCxudWxsKSxVaChxUSx0aGlzLGEpLFVoKFRILHRoaXMsZCks''@;'; put 'put ''VWgoQUgsdGhpcyxoKX1nZXRDdXJyZW50VmVydGljYWxOb2RlKCl7cmV0dXJuIHZsKGU0LHRoaXMpLmRhdGF9Z2V0Rmlyc3RWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gdmwoSnAsdGhpcykuZmlyc3QuZGF0YX1nZXROZXh0VmVydGljYWxOb2RlKCl7cmV0dXJuIHZsKGU0LHRoaXMpLm5leHQuZGF0''@;'; put 'put ''YX1nZXRQcmV2VmVydGljYWxOb2RlKCl7cmV0dXJuIHZsKGU0LHRoaXMpLnByZXYuZGF0YX1nZXRDdXJyZW50SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gdmwoUXAsdGhpcykuZGF0YX1nZXRGaXJzdEhvcml6b250YWxOb2RlKCl7cmV0dXJuIHZsKFhwLHRoaXMpLmZpcnN0LmRhdGF9Z2V0TmV4''@;'; put 'put ''dEhvcml6b250YWxOb2RlKCl7cmV0dXJuIHZsKFFwLHRoaXMpLm5leHQuZGF0YX1nZXRQcmV2SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gdmwoUXAsdGhpcykucHJldi5kYXRhfXNldFByZXZOb2RlQXNBY3RpdmUoKXtVaChlNCx0aGlzLHZsKGU0LHRoaXMpLnByZXYpLFVoKFFwLHRoaXMsdmwo''@;'; put 'put ''UXAsdGhpcykucHJldil9c2V0TmV4dE5vZGVBc0FjdGl2ZSgpe1VoKGU0LHRoaXMsdmwoZTQsdGhpcykubmV4dCksVWgoUXAsdGhpcyx2bChRcCx0aGlzKS5uZXh0KX1idWlsZEZvY3VzT3JkZXIobCl7Y29uc3QgYT1sLmdldFRvcFN0YXJ0Q29ybmVyKCksZD1sLmdldEJvdHRvbUVuZENvcm5l''@;'; put 'put ''cigpLGg9bmV3IFdlYWtTZXQ7VWgoWHAsdGhpcyxuZXcgeEgpO2ZvcihsZXQgdj1hLnJvdzt2PD1kLnJvdzt2KyspaWYoIXZsKFRILHRoaXMpLmlzSGlkZGVuKHYpKWZvcihsZXQgTT1hLmNvbDtNPD1kLmNvbDtNKyspe2lmKHZsKEFILHRoaXMpLmlzSGlkZGVuKE0pKWNvbnRpbnVlO2NvbnN0''@;'; put 'put ''IEQ9RUgoWFEsdGhpcyxTbWUpLmNhbGwodGhpcyxsLHZsKFhwLHRoaXMpLGgsdixNKTtEJiZVaChRcCx0aGlzLEQpfXZsKFhwLHRoaXMpLmZpcnN0JiYodmwoWHAsdGhpcykuZmlyc3QucHJldj12bChYcCx0aGlzKS5sYXN0LHZsKFhwLHRoaXMpLmxhc3QubmV4dD12bChYcCx0aGlzKS5maXJz''@;'; put 'put ''dCk7Y29uc3QgZj1uZXcgV2Vha1NldDtVaChKcCx0aGlzLG5ldyB4SCk7Zm9yKGxldCB2PWEuY29sO3Y8PWQuY29sO3YrKylpZighdmwoQUgsdGhpcykuaXNIaWRkZW4odikpZm9yKGxldCBNPWEucm93O008PWQucm93O00rKyl7aWYodmwoVEgsdGhpcykuaXNIaWRkZW4oTSkpY29udGludWU7''@;'; put 'put ''Y29uc3QgRD1FSChYUSx0aGlzLFNtZSkuY2FsbCh0aGlzLGwsdmwoSnAsdGhpcyksZixNLHYpO0QmJlVoKGU0LHRoaXMsRCl9dmwoSnAsdGhpcykuZmlyc3QmJih2bChKcCx0aGlzKS5maXJzdC5wcmV2PXZsKEpwLHRoaXMpLmxhc3QsdmwoSnAsdGhpcykubGFzdC5uZXh0PXZsKEpwLHRoaXMp''@;'; put 'put ''LmZpcnN0KX1zZXRBY3RpdmVOb2RlKGwsYSl7cmV0dXJuIHZsKFhwLHRoaXMpLmlub3JkZXIoZD0+e2NvbnN0e3Jvd1N0YXJ0Omgscm93RW5kOmYsY29sU3RhcnQ6dixjb2xFbmQ6TX09ZC5kYXRhO2lmKGw+PWgmJmw8PWYmJmE+PXYmJmE8PU0pcmV0dXJuIFVoKFFwLHRoaXMsZCksITF9KSx2''@;'; put 'put ''bChKcCx0aGlzKS5pbm9yZGVyKGQ9Pntjb25zdHtyb3dTdGFydDpoLHJvd0VuZDpmLGNvbFN0YXJ0OnYsY29sRW5kOk19PWQuZGF0YTtpZihsPj1oJiZsPD1mJiZhPj12JiZhPD1NKXJldHVybiBVaChlNCx0aGlzLGQpLCExfSksdGhpc319ZnVuY3Rpb24gU21lKGMsbCxhLGQsaCl7Y29uc3Qg''@;'; put 'put ''Zj1jLmdldFRvcFN0YXJ0Q29ybmVyKCksdj1jLmdldEJvdHRvbUVuZENvcm5lcigpLE09Yy5oaWdobGlnaHQuY2xvbmUoKS5ub3JtYWxpemUoKSxEPXZsKHFRLHRoaXMpLmNhbGwodGhpcyxkLGgpO2lmKEQmJmEuaGFzKEQpKXJldHVybiBudWxsO2NvbnN0IFo9e2NvbFN0YXJ0OmgsY29sRW5k''@;'; put 'put ''Omgscm93U3RhcnQ6ZCxyb3dFbmQ6ZH07aWYoRCl7aWYoYS5hZGQoRCksRC5yb3c8Zi5yb3d8fEQucm93K0Qucm93c3Bhbi0xPnYucm93fHxELmNvbDxmLmNvbHx8RC5jb2wrRC5jb2xzcGFuLTE+di5jb2wpcmV0dXJuIG51bGw7Wi5jb2xTdGFydD1ELmNvbCxaLmNvbEVuZD1ELmNvbCtELmNv''@;'; put 'put ''bHNwYW4tMSxaLnJvd1N0YXJ0PUQucm93LFoucm93RW5kPUQucm93K0Qucm93c3Bhbi0xfWNvbnN0IHJlPWwucHVzaChaKTtyZXR1cm4gZD09PU0ucm93JiZoPT09TS5jb2x8fEQmJk0ucm93Pj1ELnJvdyYmTS5yb3c8PUQucm93K0Qucm93c3Bhbi0xJiZNLmNvbD49RC5jb2wmJk0uY29sPD1E''@;'; put 'put ''LmNvbCtELmNvbHNwYW4tMT9yZTpudWxsfWZ1bmN0aW9uIE1tZShjLGwsYSl7Y29uc3R7dmlldzpkLHJvd0luZGV4TWFwcGVyOmh9PWMsZj1kLmdldFN0eWxlc0hhbmRsZXIoKSx2PWQuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBNPTA7Zm9yKGxldCBaPWw7WjxsK2E7WisrKWlmKCFoLmlz''@;'; put 'put ''SGlkZGVuKFopKXt2YXIgRDtNKz1udWxsIT09KEQ9Yy5nZXRSb3dIZWlnaHQoWikpJiZ2b2lkIDAhPT1EP0Q6diwwPT09WiYmIWYuaXNDbGFzc2ljVGhlbWUoKSYmKE0rPTEpfXJldHVybiBNfWZ1bmN0aW9uIGtIKGMsbCxhKXt4bWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHhtZShjLGwp''@;'; put 'put ''e2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSlEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHNwdChjKXt2YXIgbD1mdW5jdGlvbiBscHQoYyxs''@;'; put 'put ''KXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv''@;'; put 'put ''UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFs''@;'; put 'put ''dWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHBBKGMsbCxhKXtyZXR1cm4gYy5zZXQoa2woYyxsKSxhKSxhfWZ1bmN0aW9uIHRjKGMsbCl7cmV0dXJuIGMuZ2V0KGtsKGMsbCkpfWZ1bmN0aW9uIGtsKGMsbCxhKXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVm''@;'; put 'put ''b3JlTWVyZ2VDZWxscyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck1lcmdlQ2VsbHMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5tZXJnZUNlbGxzIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5tZXJnZUNlbGxzIik7Y29uc3Qg''@;'; put 'put ''UVE9Im1lcmdlQ2VsbHMiLEVtZT1RUTt2YXIgUTI9bmV3IFdlYWtNYXAsZWY9bmV3IFdlYWtNYXAsdDQ9bmV3IFdlYWtNYXAsVG1lPW5ldyBXZWFrTWFwLFZsPW5ldyBXZWFrU2V0O2NsYXNzIHVwdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlv''@;'; put 'put ''biBvcHQoYyxsKXt4bWUoYyxsKSxsLmFkZChjKX0odGhpcyxWbCksSlEodGhpcywibWVyZ2VkQ2VsbHNDb2xsZWN0aW9uIixudWxsKSxKUSh0aGlzLCJhdXRvZmlsbENhbGN1bGF0aW9ucyIsbnVsbCksSlEodGhpcywic2VsZWN0aW9uQ2FsY3VsYXRpb25zIixudWxsKSxrSCh0aGlzLFEyLG51''@;'; put 'put ''bGwpLGtIKHRoaXMsZWYse3JvdzowLGNvbDowfSksa0godGhpcyx0NCxuZXcgaXB0KHttZXJnZWRDZWxsc0dldHRlcjoobCxhKT0+dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSkscm93SW5kZXhNYXBwZXI6dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBw''@;'; put 'put ''ZXI6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXJ9KSksa0godGhpcyxUbWUsZnVuY3Rpb24gYXB0KGMpe2NvbnN0e2hvdDpsfT1jLHtyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PWwsaD1uZXcgTWFwO3JldHVybntiZWZvcmU6ZnVuY3Rpb24gZigpe30sYWZ0ZXI6ZnVu''@;'; put 'put ''Y3Rpb24gdihNLEQsWil7Y29uc3QgcmU9Yy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KEQsWik7aWYoIXFvKHJlKSlyZXR1cm4gTS5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxNLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLEFFKCkmJmguaGFzKEQpJiYhbC5nZXRTZXR0aW5ncygp''@;'; put 'put ''LnJvd0hlYWRlcnMmJihNLnN0eWxlLmhlaWdodD1gJHtoLmdldChEKX1weGAsaC5kZWxldGUoRCkpLHZvaWQoTS5zdHlsZS5kaXNwbGF5PSIiKTtjb25zdHtyb3c6Y2UsY29sOmJlLGNvbHNwYW46RWUscm93c3BhbjpCZX09cmUsW3FlLHJ0XT1jLnRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRl''@;'; put 'put ''cmFibGUoY2UsQmUsYmUsRWUpLHB0PWMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKTtpZihBRSgpJiYwPT09YmUmJiFsLmdldFNldHRpbmdzKCkucm93SGVhZGVycyl7Y29uc3QgbXI9TW1lKGwsY2UsQmUpO2guc2V0KEQsbXIvQmUpfWNvbnN0IHZuPXFlLWEuZ2V0UmVuZGVyYWJsZUZyb21W''@;'; put 'put ''aXN1YWxJbmRleChEKSsxLENuPXJ0LWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaKSsxO2xldCB0bj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwxKSxNbj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChiZSwxKTtpZihwdCl7Y29uc3QgbXI9bC52aWV3LmdldEFjdGl2''@;'; put 'put ''ZU92ZXJsYXlOYW1lKCk7WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKG1yKXx8KHRuPU1hdGgubWF4KHRuLGwuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5s''@;'; put 'put ''aW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKG1yKXx8KE1uPU1hdGgubWF4KE1uLGwuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSkpfWNvbnN0IENyPU1hdGgubWluKEJlLHZuKSxHcj1NYXRoLm1pbihFZSxDbik7dG49PT1EJiZNbj09PVo/KE0uc2V0QXR0cmlidXRlKCJyb3dz''@;'; put 'put ''cGFuIixDciksTS5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLEdyKSk6KE0ucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksTS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxNLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX19fSh0aGlzKSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFFR''@;'; put 'put ''fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE1MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57W0M0ZV06ImNlbGxzIix2aXJ0dWFsaXplZDohMSxjZWxsczpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1FRXX1l''@;'; put 'put ''bmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPW5ldyBaM3QodGhpcyksdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucz1uZXcgJDN0KHRoaXMpLHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zPW5ldyBKM3QodGhpcyksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsZHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5z''@;'; put 'put ''Zm9ybUZvY3VzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLGZwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxwcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLGdwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsbXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsa21lKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''LGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLGttZSkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB''@;'; put 'put ''cnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxicHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxo''@;'; put 'put ''PTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCx5cHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFto''@;'; put 'put ''XT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsX3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUdldENlbGxDb29yZHMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNb''@;'; put 'put ''aF07cmV0dXJuIGtsKFZsLGwsQW1lKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJu''@;'; put 'put ''IGtsKFZsLGwsQW1lKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmws''@;'; put 'put ''bCxocHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXJlciIsZnVuY3Rpb24oKXtyZXR1cm4gdGMoVG1lLGwpLmFmdGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCx2cHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCx3cHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxDcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxTcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxNcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSks''@;'; put 'put ''aD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwseHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09''@;'; put 'put ''YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLEVwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1''@;'; put 'put ''cm4ga2woVmwsbCxUcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsQXB0KS5j''@;'; put 'put ''YWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLGtwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJiZWZvcmVEcmF3Qm9yZGVycyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxEcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJE''@;'; put 'put ''cmF3U2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLElwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDZWxsQ2xh''@;'; put 'put ''c3NOYW1lcyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxScHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQmVnaW5FZGl0aW5nIixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLExwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lIixmdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLE9wdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLChhLGQpPT57aWYoIk1lcmdl''@;'; put 'put ''Q2VsbHMiPT09ZClyZXR1cm4hMX0pLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xsZWN0aW9ucygpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LnJlbmRlcigpLHN1cGVyLmRpc2Fi''@;'; put 'put ''bGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3MoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1pZkNocm9tZUZvcmNlUmVwYWludCgpe2lmKCFMJCgpKXJldHVybjtjb25zdCBsPVtd''@;'; put 'put ''O2xldCBhPVtdO3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmZvckVhY2goZD0+e2NvbnN0e3JvdzpoLHJvd3NwYW46Zn09ZDtmb3IobGV0IHY9aCsxO3Y8aCtmO3YrKylhLnB1c2godil9KSxhPVsuLi5uZXcgU2V0KGEpXSxhLmZvckVhY2goZD0+e2NvbnN0IGg9dGhp''@;'; put 'put ''cy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkKTt0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmdldE92ZXJsYXlzKCEwKS5tYXAoZj0+Im1hc3RlciI9PT1mPy5uYW1lP2Y6Zi5jbG9uZS53dFRhYmxlKS5mb3JFYWNoKGY9Pntjb25zdCB2PWYu''@;'; put 'put ''Z2V0Um93KGgpO3YmJih2LnN0eWxlLmJhY2tncm91bmQ9X0UodiwiYmFja2dyb3VuZENvbG9yIikucmVwbGFjZSgiKSIsIiwgMC45OSkiKSxsLnB1c2godikpfSl9KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57bC5mb3JFYWNoKGQ9Pnt2YXIgaDtkLnN0eWxlLmJhY2tncm91bmQ9''@;'; put 'put ''bnVsbD09PShoPV9FKGQsImJhY2tncm91bmRDb2xvciIpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5yZXBsYWNlKCIsIDAuOTkpIiwiKSIpfSl9LDEpfXZhbGlkYXRlU2V0dGluZyhsKXtyZXR1cm4hKCFsfHwocXAuY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKT8oaWwocXAuTkVHQVRJVkVfVkFM''@;'; put 'put ''VUVTX1dBUk5JTkcobCkpLDEpOnFwLmlzT3V0T2ZCb3VuZHMobCx0aGlzLmhvdC5jb3VudFJvd3MoKSx0aGlzLmhvdC5jb3VudENvbHMoKSk/KGlsKHFwLklTX09VVF9PRl9CT1VORFNfV0FSTklORyhsKSksMSk6cXAuaXNTaW5nbGVDZWxsKGwpPyhpbChxcC5JU19TSU5HTEVfQ0VMTChsKSks''@;'; put 'put ''MSk6cXAuY29udGFpbnNaZXJvU3BhbihsKSYmKGlsKHFwLlpFUk9fU1BBTl9XQVJOSU5HKGwpKSwxKSkpfWdlbmVyYXRlRnJvbVNldHRpbmdzKCl7Y29uc3QgbD10aGlzLmdldFNldHRpbmcoImNlbGxzIikuZmlsdGVyKGg9PnRoaXMudmFsaWRhdGVTZXR0aW5nKGgpKSxhPXRoaXMubWVyZ2Vk''@;'; put 'put ''Q2VsbHNDb2xsZWN0aW9uLmZpbHRlck92ZXJsYXBwaW5nTWVyZ2VDZWxscyhsKSxkPVtdO2EuZm9yRWFjaChoPT57Y29uc3R7cm93OmYsY29sOnYscm93c3BhbjpNLGNvbHNwYW46RH09aCxaPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsdikscmU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxD''@;'; put 'put ''b29yZHMoZitNLTEsditELTEpLGNlPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoWixaLHJlKTt0aGlzLm1lcmdlUmFuZ2UoY2UsITAsITApO2ZvcihsZXQgYmU9ZjtiZTxmK007YmUrKylmb3IobGV0IEVlPXY7RWU8ditEO0VlKyspKGJlIT09Znx8RWUhPT12KSYmZC5wdXNoKFtiZSxFZSxu''@;'; put 'put ''dWxsXSl9KSwwIT09ZC5sZW5ndGgmJnRoaXMuaG90LnNldERhdGFBdENlbGwoZCx2b2lkIDAsdm9pZCAwLHRoaXMucGx1Z2luTmFtZSl9Y2xlYXJDb2xsZWN0aW9ucygpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmNsZWFyKCl9Y2FuTWVyZ2VSYW5nZShsKXtyZXR1cm4hIShhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKXx8dGhpcy52YWxpZGF0ZVNldHRpbmcobCl9bWVyZ2VTZWxlY3Rpb24oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24odGhpcy5ob3QuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMubWVyZ2VSYW5nZShsKSx0aGlzLmhvdC5zZWxlY3RDZWxs''@;'; put 'put ''KGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX11bm1lcmdlU2VsZWN0aW9uKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2NvbnN0e2Zyb206''@;'; put 'put ''YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfW1lcmdlUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1sLmdldFRvcFN0YXJ0Q29ybmVyKCksZj1sLmdldEJvdHRvbUVuZENvcm5lcigpLHY9e3JvdzpoLnJvdyxjb2w6aC5jb2wscm93c3BhbjpmLnJvdy1oLnJvdysxLGNvbHNwYW46Zi5jb2wt''@;'; put 'put ''aC5jb2wrMX0sTT1bXTtsZXQgRD1udWxsO3JldHVybiEhdGhpcy5jYW5NZXJnZVJhbmdlKHYsYSkmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlTWVyZ2VDZWxscyIsbCxhKSxHYSgwLHYucm93c3Bhbi0xLHJlPT57R2EoMCx2LmNvbHNwYW4tMSxjZT0+e2xldCBiZT1udWxsO01bcmVdfHwo''@;'; put 'put ''TVtyZV09W10pLDA9PT1yZSYmMD09PWNlP2JlPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2LnJvdyksdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih2LmNvbCkpOnRoaXMuaG90LnNldENlbGxNZXRhKHYucm93K3JlLHYuY29sK2NlLCJoaWRk''@;'; put 'put ''ZW4iLCEwKSxNW3JlXVtjZV09YmV9KX0pLHRoaXMuaG90LnNldENlbGxNZXRhKHYucm93LHYuY29sLCJzcGFubmVkIiwhMCksIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh2LGEpfHwoZD9EPVt2LnJvdyx2LmNvbCxNXTp0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheSh2LnJvdyx2''@;'; put 'put ''LmNvbCxNLHZvaWQgMCx2b2lkIDAsdGhpcy5wbHVnaW5OYW1lKSxhfHx0aGlzLmlmQ2hyb21lRm9yY2VSZXBhaW50KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyTWVyZ2VDZWxscyIsbCx2LGEpLEQpKX11bm1lcmdlUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGwpOzAhPT1kLmxlbmd0aCYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbm1lcmdlQ2VsbHMiLGwsYSksWW4oZCxoPT57dGhpcy5tZXJnZWRDZWxs''@;'; put 'put ''c0NvbGxlY3Rpb24ucmVtb3ZlKGgucm93LGguY29sKSxHYSgwLGgucm93c3Bhbi0xLGY9PntHYSgwLGguY29sc3Bhbi0xLHY9Pnt0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdytmLGguY29sK3YsImhpZGRlbiIpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93K2YsaC5jb2wrdiwi''@;'; put 'put ''Y29weWFibGUiKX0pfSksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3csaC5jb2wsInNwYW5uZWQiKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVubWVyZ2VDZWxscyIsbCxhKSx0aGlzLmhvdC5yZW5kZXIoKSl9dG9nZ2xlTWVyZ2UobCl7Y29uc3R7ZnJvbTphLHRvOmR9PWwuY2xv''@;'; put 'put ''bmUoKS5ub3JtYWxpemUoKSxoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChhLnJvdyxhLmNvbCk7aC5yb3c9PT1hLnJvdyYmaC5jb2w9PT1hLmNvbCYmaC5yb3craC5yb3dzcGFuLTE9PT1kLnJvdyYmaC5jb2wraC5jb2xzcGFuLTE9PT1kLmNvbD90aGlzLnVubWVyZ2VSYW5nZShs''@;'; put 'put ''KTp0aGlzLm1lcmdlU2VsZWN0aW9uKGwpfW1lcmdlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKSx2PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7dGhpcy5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZixmLHYpKX11''@;'; put 'put ''bm1lcmdlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKSx2PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7dGhpcy51bm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsdikpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhp''@;'; put 'put ''cy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wiLCJtIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2QmJiFkLmlzU2luZ2xlSGVhZGVyKCkmJih0aGlz''@;'; put 'put ''LnRvZ2dsZU1lcmdlKGQpLHRoaXMuaG90LnJlbmRlcigpKX0scnVuT25seUlmOmQ9PiFkLmFsdEtleSxncm91cDpFbWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAo''@;'; put 'put ''RW1lKX1tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0YXJ0Um93KTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlv''@;'; put 'put ''bi5nZXQoaCxmKTtpZihxbyh2KSl7Y29uc3QgTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodi5yb3csMSkpO2lmKE08bC5zdGFydFJvdylyZXR1cm4gbC5zdGFydFJvdz1NLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0''@;'; put 'put ''KGwsYSl9fX1tb2RpZnlWaWV3cG9ydFJvd0VuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5lbmRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u''@;'; put 'put ''LmdldChoLGYpO2lmKHFvKHYpKXtjb25zdCBEPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LnJvdyt2LnJvd3NwYW4tMSwtMSkpO2lmKEQ+bC5lbmRSb3cpcmV0dXJuIGwuZW5kUm93PUQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0''@;'; put 'put ''Um93RW5kKGwsYSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0YXJ0Q29sdW1uKTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1l''@;'; put 'put ''cmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoZixoKTtpZihxbyh2KSl7Y29uc3QgTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodi5jb2wsMSkpO2lmKE08bC5zdGFydENvbHVtbilyZXR1cm4gbC5zdGFydENvbHVtbj1NLHZvaWQgdGhp''@;'; put 'put ''cy5tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5lbmRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0x''@;'; put 'put ''KXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLGgpO2lmKHFvKHYpKXtjb25zdCBEPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LmNvbCt2LmNvbHNwYW4tMSwtMSkpO2lmKEQ+bC5lbmRDb2x1bW4pcmV0''@;'; put 'put ''dXJuIGwuZW5kQ29sdW1uPUQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGwsYSl9fX10cmFuc2xhdGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxlKGwsYSxkLGgpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmYsY29sdW1uSW5kZXhNYXBwZXI6dn09dGhpcy5ob3Q7bGV0IE0sRDtyZXR1''@;'; put 'put ''cm4gTT0wPT09YT9mLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLDEpOmYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwrYS0xLC0xKSxEPTA9PT1oP3YuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQsMSk6di5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCtoLTEsLTEpLFtsPj0wP2Yu''@;'; put 'put ''Z2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChNKTpsLGQ+PTA/di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQpOmRdfX1mdW5jdGlvbiBkcHQoKXt0aGlzLmdlbmVyYXRlRnJvbVNldHRpbmdzKCksdGhpcy5ob3QucmVuZGVyKCl9ZnVuY3Rpb24gaHB0KGMpe2lmKGMpe2NvbnN0''@;'; put 'put ''IGw9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMsYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9YS5nZXRUb3BTdGFydENvcm5lcigpLGg9YS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2YrPTEpaWYoZC5yb3c9PT1s''@;'; put 'put ''W2ZdLnJvdyYmZC5jb2w9PT1sW2ZdLmNvbCYmaC5yb3c9PT1sW2ZdLnJvdytsW2ZdLnJvd3NwYW4tMSYmaC5jb2w9PT1sW2ZdLmNvbCtsW2ZdLmNvbHNwYW4tMSlyZXR1cm4hMX1yZXR1cm4gY31mdW5jdGlvbiBmcHQoYyl7dGMoZWYsdGhpcykucm93PWMucm93LHRjKGVmLHRoaXMpLmNvbD1j''@;'; put 'put ''LmNvbH1mdW5jdGlvbiBwcHQoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtoaWdobGlnaHQ6YX09bCx7Y29sdW1uSW5kZXhNYXBwZXI6ZCxyb3dJbmRleE1hcHBlcjpofT10aGlzLmhvdDt0YyhRMix0aGlzKSYmKG51bGwhPT1oLmdldFJlbmRlcmFibGVGcm9t''@;'; put 'put ''VmlzdWFsSW5kZXgodGMoUTIsdGhpcykucm93KSYmKGEucm93PXRjKFEyLHRoaXMpLnJvdyksbnVsbCE9PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0YyhRMix0aGlzKS5jb2wpJiYoYS5jb2w9dGMoUTIsdGhpcykuY29sKSxwQShRMix0aGlzLG51bGwpKTtjb25zdCBmPXRoaXMu''@;'; put 'put ''bWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChhLnJvdyxhLmNvbCk7aWYoIWYpcmV0dXJuO2NvbnN0IHY9Zi5jb2wsTT1mLmNvbCtmLmNvbHNwYW4tMTtpZihjLmNvbDwwKXtjb25zdCBjZT1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLmNvbD49diYmYS5jb2w8PU0/di0xOk0sLTEpO2Mu''@;'; put 'put ''Y29sPW51bGw9PT1jZT8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGEuY29sKTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShjZSxhLmNvbCktMSwxKX1lbHNlIGlmKGMuY29sPjApe2NvbnN0IGNlPWQu''@;'; put 'put ''Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEuY29sPj12JiZhLmNvbDw9TT9NKzE6diwxKTtjLmNvbD1udWxsPT09Y2U/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShhLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5j''@;'; put 'put ''b3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShhLmNvbCxjZSktMSwxKX1jb25zdCBEPWYucm93LFo9Zi5yb3crZi5yb3dzcGFuLTE7aWYoYy5yb3c8MCl7Y29uc3QgY2U9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5yb3c+PUQmJmEucm93PD1aP0QtMTpaLC0xKTtjLnJvdz1udWxs''@;'; put 'put ''PT09Y2U/LXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxhLnJvdyk6LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoY2UsYS5yb3cpLTEsMSl9ZWxzZSBpZihjLnJvdz4wKXtjb25zdCBjZT1oLmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5JbmRleChhLnJvdz49RCYmYS5yb3c8PVo/WisxOkQsMSk7Yy5yb3c9bnVsbD09PWNlP3RoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoYS5yb3csdGhpcy5ob3QuY291bnRSb3dzKCkpOk1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93''@;'; put 'put ''c0luUmFuZ2UoYS5yb3csY2UpLTEsMSl9fWZ1bmN0aW9uIGdwdChjKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sLmNsb25lKCkse3RvOmR9PWwse2NvbHVtbkluZGV4TWFwcGVyOmgscm93SW5kZXhNYXBwZXI6Zn09dGhpcy5ob3Qsdj0oTSxEKT0+e2EuZXhw''@;'; put 'put ''YW5kKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0sRCkpO2ZvcihsZXQgWj0wO1o8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO1orPTEpYS5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW1pdLmdldFJh''@;'; put 'put ''bmdlKCkpfTtpZihjLmNvbDwwKXtsZXQgTT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRTdGFydE1vc3RDb2x1bW5JbmRleChsLGQuY29sKStjLmNvbDt2KGQucm93LE0pLCJFLVciPT09bC5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJiJFLVciPT09YS5nZXRIb3Jpem9udGFsRGly''@;'; put 'put ''ZWN0aW9uKCkmJihNPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wpO2NvbnN0IEQ9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKTtudWxsIT09RCYmKGMuY29sPS1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKEQsZC5jb2wpLTEsMSkp''@;'; put 'put ''fWVsc2UgaWYoYy5jb2w+MCl7bGV0IE09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0RW5kTW9zdENvbHVtbkluZGV4KGwsZC5jb2wpK2MuY29sO3YoZC5yb3csTSksIlctRSI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmIlctRSI9PT1hLmdldEhvcml6b250YWxEaXJlY3Rp''@;'; put 'put ''b24oKSYmKE09YS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wpO2NvbnN0IEQ9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSk7bnVsbCE9PUQmJihjLmNvbD1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGQuY29sLEQpLTEsMSkpfWlm''@;'; put 'put ''KGMucm93PDApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFRvcE1vc3RSb3dJbmRleChsLGQucm93KStjLnJvdzt2KE0sZC5jb2wpLCJTLU4iPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYiUy1OIj09PWEuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmKE09YS5nZXRU''@;'; put 'put ''b3BTdGFydENvcm5lcigpLnJvdyk7Y29uc3QgRD1mLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpO251bGwhPT1EJiYoYy5yb3c9LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoRCxkLnJvdyktMSwxKSl9ZWxzZSBpZihjLnJvdz4wKXtsZXQg''@;'; put 'put ''TT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRCb3R0b21Nb3N0Um93SW5kZXgobCxkLnJvdykrYy5yb3c7dihNLGQuY29sKSwiTi1TIj09PWwuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmIk4tUyI9PT1hLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJihNPWEuZ2V0Qm90dG9tU3RhcnRD''@;'; put 'put ''b3JuZXIoKS5yb3cpO2NvbnN0IEQ9Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSk7bnVsbCE9PUQmJihjLnJvdz1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGQucm93LEQpLTEsMSkpfX1mdW5jdGlvbiBtcHQoKXtjb25zdCBjPXRoaXMu''@;'; put 'put ''aG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDpsfT1jO2lmKHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKXJldHVybiB2b2lkIHBBKFEyLHRoaXMsbC5jbG9u''@;'; put 'put ''ZSgpKTtmb3IobGV0IGQ9MDtkPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtkKz0xKWMuZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1tkXS5nZXRSYW5nZSgpLCExKTtmb3IobGV0IGQ9MDtkPHRoaXMubWVy''@;'; put 'put ''Z2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtkKz0xKWMuZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1tkXS5nZXRSYW5nZSgpLCExKTtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLnJvdyxsLmNv''@;'; put 'put ''bCk7cEEoUTIsdGhpcyxsLmNsb25lKCkpLGEmJmwuYXNzaWduKGEpfWZ1bmN0aW9uIEFtZShjLGwsYSxkKXtpZihjPDB8fGw8MClyZXR1cm47Y29uc3QgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYyxsKTtpZighaClyZXR1cm47Y29uc3R7cm93OmYsY29sOnYsY29sc3BhbjpN''@;'; put 'put ''LHJvd3NwYW46RH09aCxaPWYscmU9dixjZT1mK0QtMSxiZT12K00tMTtpZigicmVuZGVyIj09PWQmJnRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSl7Y29uc3QgRWU9dGhpcy5ob3Qudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpLEJlPVsidG9wIiwidG9wX2lubGluZV9zdGFydF9j''@;'; put 'put ''b3JuZXIiXS5pbmNsdWRlcyhFZSk/MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpLHFlPVsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEVlKT8wOnRoaXMuaG90LmdldEZp''@;'; put 'put ''cnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCk7cmV0dXJuW2tzKEJlLFosY2UpLGtzKHFlLHJlLGJlKSxrcyh0aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCksWixjZSksa3ModGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLHJlLGJlKV19cmV0dXJuW1os''@;'; put 'put ''cmUsY2UsYmVdfWZ1bmN0aW9uIHZwdChjKXtjLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIFEzdChjKXtyZXR1cm57a2V5OiJtZXJnZUNlbGxzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO2lmKGwpe2NvbnN0IGE9Yy5tZXJnZWRDZWxsc0Nv''@;'; put 'put ''bGxlY3Rpb24uZ2V0KGxbMF0sbFsxXSk7aWYoYS5yb3c9PT1sWzBdJiZhLmNvbD09PWxbMV0mJmEucm93K2Eucm93c3Bhbi0xPT09bFsyXSYmYS5jb2wrYS5jb2xzcGFuLTE9PT1sWzNdKXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZHEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0''@;'; put 'put ''ZWRQaHJhc2UodXEpfSxjYWxsYmFjaygpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtsLnNldERpcmVjdGlvbih0aGlzLmlzUnRsKCk/Ik5FLVNXIjoiTlctU0UiKTtjb25zdHtmcm9tOmEsdG86ZH09bDtjLnRvZ2dsZU1lcmdlKGwpLHRoaXMuc2Vs''@;'; put 'put ''ZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO3JldHVybiFsfHxxcC5pc1NpbmdsZUNlbGwoe3JvdzpsWzBdLGNvbDpsWzFdLHJvd3NwYW46bFsyXS1sWzBdKzEsY29sc3BhbjpsWzNdLWxbMV0rMX0p''@;'; put 'put ''fHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKX0saGlkZGVuOiExfX0odGhpcykpfWZ1bmN0aW9uIGttZSgpe3BBKFEyLHRoaXMsbnVsbCl9ZnVuY3Rpb24gYnB0KCl7aWYodGMoUTIsdGhpcykuaXNDZWxsKCkpcmV0dXJuO2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRS''@;'; put 'put ''YW5nZUxhc3QoKSxsPWMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSxhPWMuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpLGQ9dGMoUTIsdGhpcykuY2xvbmUoKS5ub3JtYWxpemUoKTt0Yyh0NCx0aGlzKS5zZXRBY3RpdmVOb2RlKGQucm93LGQuY29sKSx0YyhlZix0aGlzKS5yb3c+MHx8dGMoZWYs''@;'; put 'put ''dGhpcykuY29sPjA/dGModDQsdGhpcykuc2V0UHJldk5vZGVBc0FjdGl2ZSgpOigiRS1XIj09PWEmJnRjKGVmLHRoaXMpLmNvbDwwfHwiUy1OIj09PWwmJnRjKGVmLHRoaXMpLnJvdzwwKSYmdGModDQsdGhpcykuc2V0TmV4dE5vZGVBc0FjdGl2ZSgpfWZ1bmN0aW9uIHlwdChjLGwpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7Y29sdW1uSW5kZXhNYXBwZXI6ZCxyb3dJbmRleE1hcHBlcjpofT10aGlzLmhvdDtsZXQgZj1udWxsLHY9bnVsbDtpZih0YyhlZix0aGlzKS5jb2w8MCl7Y29uc3R7cm93RW5kOk0sY29sRW5kOkR9PXRjKHQ0LHRoaXMpLmdldFBy''@;'; put 'put ''ZXZIb3Jpem9udGFsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwtMSksZj1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKX1lbHNlIGlmKHRjKGVmLHRoaXMpLmNvbD4wKXtjb25zdHtyb3dTdGFydDpNLGNvbFN0YXJ0OkR9PXRjKHQ0LHRoaXMpLmdldE5leHRI''@;'; put 'put ''b3Jpem9udGFsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwxKSxmPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sMSl9ZWxzZSBpZih0YyhlZix0aGlzKS5yb3c8MCl7Y29uc3R7cm93RW5kOk0sY29sRW5kOkR9PXRjKHQ0LHRoaXMpLmdldFByZXZWZXJ0aWNhbE5v''@;'; put 'put ''ZGUoKTt2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQsLTEpLGY9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSl9ZWxzZSBpZih0YyhlZix0aGlzKS5yb3c+MCl7Y29uc3R7cm93U3RhcnQ6TSxjb2xTdGFydDpEfT10Yyh0NCx0aGlzKS5nZXROZXh0VmVydGljYWxOb2RlKCk7''@;'; put 'put ''dj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELDEpLGY9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKX1pZihudWxsIT09Znx8bnVsbCE9PXYpe2NvbnN0IE09dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSxEPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChN''@;'; put 'put ''LnJvdyxNLmNvbCksWj10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZvY3VzKCk7Yz1NLnJvdyxsPU0uY29sLGEuaGlnaGxpZ2h0LmFzc2lnbihEP3tyb3c6dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQucm93LDEpLGNvbDp0aGlzLmhv''@;'; put 'put ''dC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRC5jb2wsMSl9Ok0pLFouY2xlYXIoKSxaLmFkZChNKS5jb21taXQoKX10Yyh0NCx0aGlzKS5zZXRBY3RpdmVOb2RlKGMsbCkscEEoZWYsdGhpcyx7cm93OjAsY29sOjB9KX1mdW5jdGlvbiBfcHQoKXt0aGlzLmhv''@;'; put 'put ''dC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmlzSGVhZGVyKCl8fHRjKHQ0LHRoaXMpLmJ1aWxkRm9jdXNPcmRlcih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKX1mdW5jdGlvbiB3cHQoYyxsLGEpe2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGMsbCk7ZCYm''@;'; put 'put ''KGQucm93IT09Y3x8ZC5jb2whPT1sP2EuY29weWFibGU9ITE6KGEucm93c3Bhbj1kLnJvd3NwYW4sYS5jb2xzcGFuPWQuY29sc3BhbikpfWZ1bmN0aW9uIENwdChjKXtpZih0aGlzLmdldFNldHRpbmcoInZpcnR1YWxpemVkIikpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCk7''@;'; put 'put ''dGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGMsbCksdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZChjLGwpfWZ1bmN0aW9uIFNwdChjKXtpZih0aGlzLmdldFNldHRpbmcoInZpcnR1YWxpemVkIikpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCk7dGhpcy5tb2RpZnlWaWV3''@;'; put 'put ''cG9ydENvbHVtblN0YXJ0KGMsbCksdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChjLGwpfWZ1bmN0aW9uIE1wdChjLGwpe2NvbnN0IGE9dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5nZXREaXJlY3Rpb24obCxjKTtpZih0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmRyYWdBcmVhT3Zl''@;'; put 'put ''cmxhcHNDb2xsZWN0aW9ucyhsLGMsYSkpcmV0dXJuIGw7Y29uc3QgZD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzBdLGxbMV0pLGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobFsyXSxsWzNdKSxmPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZCxkLGgpLHY9dGhpcy5tZXJn''@;'; put 'put ''ZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoZik7cmV0dXJuIDA9PT12Lmxlbmd0aD9jOnRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuc25hcERyYWdBcmVhKGwsYyxhLHYpfWZ1bmN0aW9uIHhwdChjLGwpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlv''@;'; put 'put ''bnMoInJpZ2h0IixjLGwpfWZ1bmN0aW9uIEVwdChjLGwpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoImxlZnQiLGMsbCl9ZnVuY3Rpb24gVHB0KGMsbCxhKXsiYXV0byIhPT1hJiZ0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25z''@;'; put 'put ''KCJkb3duIixjLGwpfWZ1bmN0aW9uIEFwdChjLGwpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoInVwIixjLGwpfWZ1bmN0aW9uIGtwdChjLGwpeyJBdXRvZmlsbC5maWxsIj09PWwmJnRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMucmVjcmVhdGVBZnRlckRh''@;'; put 'put ''dGFQb3B1bGF0aW9uKGMpfWZ1bmN0aW9uIERwdChjLGwpe2lmKGwmJiJhcmVhIj09PWwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtZbih0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShhKSxoPT57YS5nZXRCb3R0b21FbmRDb3JuZXIo''@;'; put 'put ''KS5yb3c9PT1oLmdldExhc3RSb3coKSYmYS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2w9PT1oLmdldExhc3RDb2x1bW4oKSYmKGNbMl09aC5yb3csY1szXT1oLmNvbCl9KX19ZnVuY3Rpb24gSXB0KGMsbCxhLGQpe2lmKGEpcmV0dXJuIHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFNl''@;'; put 'put ''bGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShjLGwsYSxkKX1mdW5jdGlvbiBScHQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKX1mdW5jdGlvbiBMcHQoYyxsLGEsZCl7aWYoIShkIGluc3RhbmNlb2Yg''@;'; put 'put ''TW91c2VFdmVudCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxmPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEJ5UmFuZ2UoaCk7aWYoIWYpcmV0dXJuO2NvbnN0IHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csZi5jb2wpLE09''@;'; put 'put ''dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3crZi5yb3dzcGFuLTEsZi5jb2wrZi5jb2xzcGFuLTEpO3JldHVybiAwPT09dGhpcy5ob3Quc2VsZWN0aW9uLmdldExheWVyTGV2ZWwoKSYmaC5pc0VxdWFsKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pKX1mdW5jdGlvbiBP''@;'; put 'put ''cHQoYyxsLGEpe2lmKHRoaXMuaG90LmdldFNldHRpbmdzKCkucm93SGVhZGVyc3x8ImJvdHRvbSI9PT1hfHwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiPT09YSlyZXR1cm4gYztsZXQgZCxoO2lmKCJtYXN0ZXIiPT09YSlkPXRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29s''@;'; put 'put ''dW1uKCksaD10aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCk7ZWxzZXtjb25zdCBiZT10aGlzLmhvdC52aWV3LmdldE92ZXJsYXlCeU5hbWUoYSk7ZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGJlLmNsb25lLnd0''@;'; put 'put ''VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpKSxoPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYmUuY2xvbmUud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKSl9aWYoIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdl''@;'; put 'put ''dChsLGQpKXJldHVybiBjO2NvbnN0IHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxkKSxNPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsaCksRD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHYsdixNKSxaPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJh''@;'; put 'put ''bmdlKEQsITApLHJlPVoucmVkdWNlKChiZSxFZSk9PntsZXR7cm93c3BhbjpCZX09RWU7cmV0dXJuIE1hdGgubWF4KGJlLEJlKX0sMSk7bGV0IGNlPTA7cmV0dXJuIFoubGVuZ3RoPjEmJlpbMF0ucm93c3BhbjxyZSYmKGNlPXJlLVpbMF0ucm93c3BhbiksWi5mb3JFYWNoKGJlPT57bGV0e3Jv''@;'; put 'put ''d3NwYW46RWV9PWJlLEJlPTA7QmU9InRvcCI9PT1hfHwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiPT09YT9NYXRoLm1pbihyZSx0aGlzLmhvdC52aWV3LmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCktbCk6RWUtY2UsYz1NYXRoLm1heChjPz8wLE1tZSh0aGlzLmhvdCxsLEJlKSl9KSxj''@;'; put 'put ''fWNvbnN0IERIPSJtdWx0aUNvbHVtblNvcnRpbmciLEltZT1ESDtHNGUoREgsZnVuY3Rpb24gUHB0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Y29uc3RbLC4uLmhdPWEsWywuLi5mXT1kO3JldHVybiBmdW5jdGlvbiB2KE0pe2NvbnN0IEQ9Y1tNXSxaPWxbTV0scmU9aFtNXSxjZT1mW01d''@;'; put 'put ''LGJlPVoubXVsdGlDb2x1bW5Tb3J0aW5nLEJlPShiZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5P2JlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk6JDRlKFoudHlwZSkpKEQsWixiZSkocmUsY2UpO2lmKEJlPT09anApe2NvbnN0IHFlPU0rMTtpZih0eXBlb2YgbFtxZV08InUiKXJldHVybiB2KHFl''@;'; put 'put ''KX1yZXR1cm4gQmV9KDApfX0pO2NsYXNzIHpwdCBleHRlbmRzIGFnZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gTnB0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBWcHQoYyl7dmFyIGw9ZnVuY3Rpb24gQnB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBj''@;'; put 'put ''fHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBh''@;'; put 'put ''IHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywicGx1Z2luS2V5IixESCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIERIfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE3MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKClbdGhpcy5wbHVnaW5LZXldfWVuYWJsZVBsdWdpbigpe3N1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0''@;'; put 'put ''TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJTaGlmdCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuLTE9PT1sLnJvdyYmbC5jb2w+PTAmJnRoaXMu''@;'; put 'put ''c29ydCh0aGlzLmdldE5leHRTb3J0Q29uZmlnKGwuY29sLG9GKSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7Y29uc3QgZD1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBkJiYobnVsbD09''@;'; put 'put ''PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlKCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShkKSYmZC5pc0hlYWRlcigpfSxyZWxhdGl2ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSIsZ3JvdXA6''@;'; put 'put ''SW1lfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChJbWUpfXNvcnQobCl7c3VwZXIuc29ydChsKX1jbGVhclNvcnQo''@;'; put 'put ''KXtzdXBlci5jbGVhclNvcnQoKX1pc1NvcnRlZCgpe3JldHVybiBzdXBlci5pc1NvcnRlZCgpfWdldFNvcnRDb25maWcobCl7cmV0dXJuIHN1cGVyLmdldFNvcnRDb25maWcobCl9c2V0U29ydENvbmZpZyhsKXtzdXBlci5zZXRTb3J0Q29uZmlnKGwpfWdldE5vcm1hbGl6ZWRTb3J0Q29uZmln''@;'; put 'put ''cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sOltsXX11cGRhdGVIZWFkZXJDbGFzc2VzKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9h''@;'; put 'put ''LTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtzdXBlci51cGRhdGVIZWFkZXJDbGFzc2VzKGwsLi4uZCksbG8obCxmdW5jdGlvbiBIcHQoYyl7Y29uc3QgbD1jLmNsYXNzTmFtZS5zcGxpdCgiICIpLGE9bmV3IFJlZ0V4cCgiXnNvcnQtWzAtOV17MSwyfSQiKTtyZXR1cm4g''@;'; put 'put ''bC5maWx0ZXIoZD0+YS50ZXN0KGQpKX0obCkpLCExIT09dGhpcy5lbmFibGVkJiZUaShsLGZ1bmN0aW9uIEZwdChjLGwsYSl7Y29uc3QgZD1bXTtyZXR1cm4hMT09PWF8fGMuaXNDb2x1bW5Tb3J0ZWQobCkmJmMuZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCk+MSYmZC5wdXNoKGBzb3J0LSR7''@;'; put 'put ''Yy5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCkrMX1gKSxkfSguLi5kKSl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpeyExIT09eUooYS5yb3csYS5jb2wsbCkmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSYmKHRoaXMuaG90LmdldFNob3J0Y3V0TWFu''@;'; put 'put ''YWdlcigpLmlzQ3RybFByZXNzZWQoKT8odGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhhLmNvbCksdGhpcy5zb3J0KHRoaXMuZ2V0TmV4dFNvcnRDb25maWcoYS5jb2wsb0YpKSk6dGhpcy5zb3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhhLmNvbCkp''@;'; put 'put ''KX19ZnVuY3Rpb24gUm1lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVcHQoYyl7dmFyIGw9ZnVuY3Rpb24gWnB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMs''@;'; put 'put ''bHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTty''@;'; put 'put ''ZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBHcHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1''@;'; put 'put ''cGVyKC4uLmFyZ3VtZW50cyksUm1lKHRoaXMsImRyYWdnZWQiLFtdKSxSbWUodGhpcywibGFzdFNldENlbGwiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJtdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE2''@;'; put 'put ''MH1pc0VuYWJsZWQoKXtyZXR1cm4gQXAoKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLHtyb290RWxlbWVudDphfT10aGlzLmhvdDtmdW5j''@;'; put 'put ''dGlvbiBkKGgpe2lmKDE9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybiBsLmRyYWdnZWQuc3BsaWNlKDAsbC5kcmFnZ2VkLmxlbmd0aCksITA7Y29uc3QgZj1sLmRyYWdnZWQuaW5kZXhPZihoKTtpZigtMT09PWYpcmV0dXJuITE7MD09PWY/bC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGljZSgwLDEp''@;'; put 'put ''OjE9PT1mJiYobC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGljZSgtMSkpfXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hzdGFydCIsaD0+e2xldCBmO3JldHVybiBwbyhoLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZj1sLmhvdC5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlTGFzdCgpLGwuZHJhZ2dlZC5wdXNoKCJ0b3AiKSxsLnRvdWNoU3RhcnRSYW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhlaWdodCgpLGRpcmVjdGlvbjpmLmdldERpcmVjdGlvbigpfSxoLnByZXZlbnREZWZhdWx0KCksITEpOnBvKGgudGFyZ2V0LCJib3R0''@;'; put 'put ''b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhmPWwuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbC5kcmFnZ2VkLnB1c2goImJvdHRvbSIpLGwudG91Y2hTdGFydFJhbmdlPXt3aWR0aDpmLmdldFdpZHRoKCksaGVpZ2h0OmYuZ2V0SGVpZ2h0KCksZGlyZWN0aW9uOmYuZ2V0RGlyZWN0''@;'; put 'put ''aW9uKCl9LGgucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaGVuZCIsaD0+cG8oaC50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGQuY2FsbChsLCJ0b3AiKSxsLnRvdWNoU3RhcnRSYW5n''@;'; put 'put ''ZT12b2lkIDAsaC5wcmV2ZW50RGVmYXVsdCgpLCExKTpwbyhoLnRhcmdldCwiYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZC5jYWxsKGwsImJvdHRvbSIpLGwudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxoLnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMCksdGhpcy5ldmVudE1h''@;'; put 'put ''bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaG1vdmUiLGg9Pntjb25zdHtyb290RG9jdW1lbnQ6Zn09dGhpcy5ob3Q7bGV0IHYsTSxELFoscmUsY2U7aWYoMD09PWwuZHJhZ2dlZC5sZW5ndGgpcmV0dXJuO2NvbnN0IGJlPWYuZWxlbWVudEZyb21Qb2ludChoLnRvdWNoZXNbMF0uY2xp''@;'; put 'put ''ZW50WCxoLnRvdWNoZXNbMF0uY2xpZW50WSk7IWJlfHxiZT09PWwubGFzdFNldENlbGx8fCgoIlREIj09PWJlLm5vZGVOYW1lfHwiVEgiPT09YmUubm9kZU5hbWUpJiYodj1sLmhvdC5nZXRDb29yZHMoYmUpLC0xPT09di5jb2wmJih2LmNvbD0wKSxNPWwuaG90LmdldFNlbGVjdGVkUmFuZ2VM''@;'; put 'put ''YXN0KCksRD1NLmdldFdpZHRoKCksWj1NLmdldEhlaWdodCgpLHJlPU0uZ2V0RGlyZWN0aW9uKCksMT09PUQmJjE9PT1aJiZsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQodiksY2U9bC5nZXRDdXJyZW50UmFuZ2VDb29yZHMoTSx2LGwudG91Y2hTdGFydFJhbmdlLmRpcmVjdGlvbixyZSxs''@;'; put 'put ''LmRyYWdnZWRbMF0pLG51bGwhPT1jZS5zdGFydCYmbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlU3RhcnQoY2Uuc3RhcnQpLGwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZUVuZChjZS5lbmQpLGwubGFzdFNldENlbGw9YmUpLGgucHJldmVudERlZmF1bHQoKSl9KX1nZXRDdXJyZW50UmFuZ2VDb29y''@;'; put 'put ''ZHMobCxhLGQsaCxmKXtjb25zdCB2PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxNPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksRD1sLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCksWj1sLmdldFRvcEVuZENvcm5lcigpO2xldCByZT17c3RhcnQ6bnVsbCxlbmQ6bnVsbH07c3dpdGNoKGQpe2Nhc2UiTkUt''@;'; put 'put ''U1ciOnN3aXRjaChoKXtjYXNlIk5FLVNXIjpjYXNlIk5XLVNFIjpyZT0idG9wIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LGwuaGlnaGxpZ2h0LmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKEQucm93LGEuY29sKX06e3N0YXJ0OnRoaXMu''@;'; put 'put ''aG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwuaGlnaGxpZ2h0LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKX07YnJlYWs7Y2FzZSJTRS1OVyI6ImJvdHRvbSI9PT1mJiYocmU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0ucm93''@;'; put 'put ''LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpfSl9YnJlYWs7Y2FzZSJOVy1TRSI6c3dpdGNoKGgpe2Nhc2UiTkUtU1ciOiJ0b3AiPT09Zj9yZT17c3RhcnQ6YSxlbmQ6RH06cmUuZW5kPWE7YnJlYWs7Y2FzZSJOVy1TRSI6InRvcCI9PT1mP3JlPXtz''@;'; put 'put ''dGFydDphLGVuZDpNfTpyZS5lbmQ9YTticmVhaztjYXNlIlNFLU5XIjoidG9wIj09PWY/cmU9e3N0YXJ0OmEsZW5kOnZ9OnJlLmVuZD1hO2JyZWFrO2Nhc2UiU1ctTkUiOiJ0b3AiPT09Zj9yZT17c3RhcnQ6YSxlbmQ6Wn06cmUuZW5kPWF9YnJlYWs7Y2FzZSJTVy1ORSI6c3dpdGNoKGgpe2Nh''@;'; put 'put ''c2UiTlctU0UiOnJlPSJib3R0b20iPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhELnJvdyxhLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxhLmNvbCks''@;'; put 'put ''ZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LE0uY29sKX07YnJlYWs7Y2FzZSJTVy1ORSI6cmU9InRvcCI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdodC5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhh''@;'; put 'put ''LnJvdyxNLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHYucm93LGEuY29sKX07YnJlYWs7Y2FzZSJTRS1OVyI6ImJvdHRvbSI9PT1mP3JlPXtzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2Vs''@;'; put 'put ''bENvb3JkcyhhLnJvdyxaLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHYucm93LGEuY29sKX06InRvcCI9PT1mJiYocmU9e3N0YXJ0OkQsZW5kOmF9KX1icmVhaztjYXNlIlNFLU5XIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6Y2FzZSJORS1TVyI6Y2FzZSJTVy1ORSI6InRv''@;'; put 'put ''cCI9PT1mJiYocmUuZW5kPWEpO2JyZWFrO2Nhc2UiU0UtTlciOiJ0b3AiPT09Zj9yZS5lbmQ9YTpyZT17c3RhcnQ6YSxlbmQ6dn19fXJldHVybiByZX1pc0RyYWdnZWQoKXtyZXR1cm4gdGhpcy5kcmFnZ2VkLmxlbmd0aD4wfX1mdW5jdGlvbiBlZWUoKXtsZXR7bGFiZWw6Yz0iIixjb2xzcGFu''@;'; put 'put ''Omw9MSxvcmlnQ29sc3BhbjphPTEsY29sbGFwc2libGU6ZD0hMSxjcm9zc0hpZGRlbkNvbHVtbnM6aD1bXSxpc0NvbGxhcHNlZDpmPSExLGlzSGlkZGVuOnY9ITEsaXNSb290Ok09ITEsaXNQbGFjZWhvbGRlcjpEPSExLGhlYWRlckNsYXNzTmFtZXM6Wj1bXX09YXJndW1lbnRzLmxlbmd0aD4w''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybntsYWJlbDpjLGNvbHNwYW46bCxvcmlnQ29sc3BhbjphLGNvbGxhcHNpYmxlOmQsaXNDb2xsYXBzZWQ6Zixjcm9zc0hpZGRlbkNvbHVtbnM6aCxpc0hpZGRlbjp2LGlzUm9vdDpNLGlzUGxhY2Vob2xkZXI6RCxo''@;'; put 'put ''ZWFkZXJDbGFzc05hbWVzOlp9fWZ1bmN0aW9uIHRlZShjLGwsYSl7KGZ1bmN0aW9uIEtwdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwu''@;'; put 'put ''c2V0KGMsYSl9ZnVuY3Rpb24gdzMoYyxsKXtyZXR1cm4gYy5nZXQoT21lKGMsbCkpfWZ1bmN0aW9uIGdBKGMsbCxhKXtyZXR1cm4gYy5zZXQoT21lKGMsbCksYSksYX1mdW5jdGlvbiBPbWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IFBtZT1bImxhYmVsIiwiY29sbGFwc2libGUiXTt2YXIgWWc9bmV3IFdlYWtNYXAsWjk9bmV3IFdlYWtNYXAsbmVlPW5ldyBX''@;'; put 'put ''ZWFrTWFwO2NsYXNzIHFwdHtjb25zdHJ1Y3Rvcigpe3RlZSh0aGlzLFlnLFtdKSx0ZWUodGhpcyxaOSwwKSx0ZWUodGhpcyxuZWUsMS8wKX1zZXRDb2x1bW5zTGltaXQobCl7Z0EobmVlLHRoaXMsbCl9c2V0RGF0YSgpe2dBKFlnLHRoaXMsZnVuY3Rpb24gJHB0KGMpe2xldCBsPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLzA7Y29uc3QgYT1bXTtpZigwPT09bClyZXR1cm4gYTtZbihjLGg9Pntjb25zdCBmPVtdO2xldCB2PTA7YS5wdXNoKGYpLFluKGgsTT0+e2NvbnN0IEQ9ZWVlKCk7aWYocW8oTSkpe2NvbnN0e2xhYmVsOnJl''@;'; put 'put ''LGNvbHNwYW46Y2UsaGVhZGVyQ2xhc3NOYW1lOmJlfT1NO0QubGFiZWw9bGMocmUpLCJudW1iZXIiPT10eXBlb2YgY2UmJmNlPjEmJihELmNvbHNwYW49Y2UsRC5vcmlnQ29sc3Bhbj1jZSksInN0cmluZyI9PXR5cGVvZiBiZSYmKEQuaGVhZGVyQ2xhc3NOYW1lcz1bLi4uYmUuc3BsaXQoIiAi''@;'; put 'put ''KV0pfWVsc2UgRC5sYWJlbD1sYyhNKTt2Kz1ELm9yaWdDb2xzcGFuO2xldCBaPSExO2lmKHY+PWwmJihELmNvbHNwYW49RC5vcmlnQ29sc3Bhbi0odi1sKSxELm9yaWdDb2xzcGFuPUQuY29sc3BhbixaPSEwKSxmLnB1c2goRCksRC5jb2xzcGFuPjEpZm9yKGxldCByZT0wO3JlPEQuY29sc3Bh''@;'; put 'put ''bi0xO3JlKyspZi5wdXNoKHtsYWJlbDoiIixpc1BsYWNlaG9sZGVyOiEwfSk7cmV0dXJuIVp9KX0pO2NvbnN0IGQ9TWF0aC5tYXgoLi4ueXMoYSxoPT5oLmxlbmd0aCkpO3JldHVybiBZbihhLGg9PntpZihoLmxlbmd0aDxkKXtjb25zdCBmPXlzKG5ldyBBcnJheShkLWgubGVuZ3RoKSwoKT0+''@;'; put 'put ''ZWVlKCkpO2guc3BsaWNlKGgubGVuZ3RoLDAsLi4uZil9fSksYX0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLHczKG5lZSx0aGlzKSkpLGdBKFo5LHRoaXMsdzMoWWcsdGhpcykubGVuZ3RoKX1nZXREYXRhKCl7cmV0dXJuIHczKFln''@;'; put 'put ''LHRoaXMpfW1lcmdlV2l0aChsKXtZbihsLGE9PntsZXR7cm93OmQsY29sOmgsLi4uZn09YTtjb25zdCB2PXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MoZCxoKTtudWxsIT09diYmRXUodixmLFBtZSl9KX1tYXAobCl7WW4odzMoWWcsdGhpcyksYT0+e1luKGEsZD0+e2NvbnN0IGg9bCh7Li4uZH0p''@;'; put 'put ''O3FvKGgpJiZFdShkLGgsUG1lKX0pfSl9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZDtpZihsPj13MyhaOSx0aGlzKXx8bDwwKXJldHVybiBudWxsO2NvbnN0IGg9dzMoWWcsdGhpcylbbF07cmV0dXJuITE9PT1BcnJheS5pc0FycmF5KGgpfHxhPj1oLmxlbmd0aD9udWxsOm51bGwhPT0o''@;'; put 'put ''ZD1oW2FdKSYmdm9pZCAwIT09ZD9kOm51bGx9Z2V0SGVhZGVyc1NldHRpbmdzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjE7Y29uc3QgaD1bXTtpZihsPj13MyhaOSx0aGlzKXx8bDwwKXJldHVybiBoO2NvbnN0IGY9''@;'; put 'put ''dzMoWWcsdGhpcylbbF07bGV0IHY9MDtmb3IobGV0IE09YTtNPGYubGVuZ3RoO00rKyl7Y29uc3QgRD1mW01dO2lmKEQuaXNQbGFjZWhvbGRlcil0aHJvdyBuZXcgRXJyb3IoIlRoZSBmaXJzdCBjb2x1bW4gc2V0dGluZ3MgY2Fubm90IG92ZXJsYXAgdGhlIG90aGVyIGhlYWRlciBsYXllcnMi''@;'; put 'put ''KTtpZih2Kz1ELmNvbHNwYW4saC5wdXNoKEQpLEQuY29sc3Bhbj4xJiYoTSs9RC5jb2xzcGFuLTEpLHY9PT1kKWJyZWFrO2lmKHY+ZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBsYXN0IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpfXJldHVy''@;'; put 'put ''biBofWdldExheWVyc0NvdW50KCl7cmV0dXJuIHczKFo5LHRoaXMpfWdldENvbHVtbnNDb3VudCgpe3JldHVybiB3MyhaOSx0aGlzKT4wP3czKFlnLHRoaXMpWzBdLmxlbmd0aDowfWNsZWFyKCl7Z0EoWWcsdGhpcyxbXSksZ0EoWjksdGhpcywwKX19ZnVuY3Rpb24gcmVlKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4obD1mdW5jdGlvbiBYcHQoYyl7dmFyIGw9ZnVuY3Rpb24gSnB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDps''@;'; put 'put ''KyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBGbWU9IkRGLXByZS1vcmRlciIsQm1lPW5ldyBNYXAoW1tGbWUsZnVuY3Rpb24gSG1lKGMsbCl7bGV0''@;'; put 'put ''IGE9Yy5jYWxsKGwsdGhpcyk7Zm9yKGxldCBkPTA7ZDx0aGlzLmNoaWxkcy5sZW5ndGg7ZCsrKXtpZighMT09PWEpcmV0dXJuITE7YT1IbWUuY2FsbCh0aGlzLmNoaWxkc1tkXSxjLGwpfXJldHVybiBhfV0sWyJERi1wb3N0LW9yZGVyIixmdW5jdGlvbiBObWUoYyxsKXtmb3IobGV0IGE9MDth''@;'; put 'put ''PHRoaXMuY2hpbGRzLmxlbmd0aDthKyspaWYoITE9PT1ObWUuY2FsbCh0aGlzLmNoaWxkc1thXSxjLGwpKXJldHVybiExO3JldHVybiBjLmNhbGwobCx0aGlzKX1dLFsiQkYiLGZ1bmN0aW9uIGU0dChjLGwpe2NvbnN0IGE9W3RoaXNdOyFmdW5jdGlvbiBkKCl7aWYoMD09PWEubGVuZ3RoKXJl''@;'; put 'put ''dHVybjtjb25zdCBoPWEuc2hpZnQoKTthLnB1c2goLi4uaC5jaGlsZHMpLCExIT09Yy5jYWxsKGwsaCkmJmQoKX0oKX1dXSk7Y2xhc3MgSUh7Y29uc3RydWN0b3IobCl7cmVlKHRoaXMsImRhdGEiLHt9KSxyZWUodGhpcywicGFyZW50IixudWxsKSxyZWUodGhpcywiY2hpbGRzIixbXSksdGhp''@;'; put 'put ''cy5kYXRhPWx9YWRkQ2hpbGQobCl7bC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcy5wdXNoKGwpfWNsb25lVHJlZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzO2NvbnN0IGE9bmV3IElIKHsuLi5sLmRhdGF9KTtmb3Io''@;'; put 'put ''bGV0IGQ9MDtkPGwuY2hpbGRzLmxlbmd0aDtkKyspYS5hZGRDaGlsZCh0aGlzLmNsb25lVHJlZShsLmNoaWxkc1tkXSkpO3JldHVybiBhfXJlcGxhY2VUcmVlV2l0aChsKXt0aGlzLmRhdGE9ey4uLmwuZGF0YX0sdGhpcy5jaGlsZHM9W107Zm9yKGxldCBhPTA7YTxsLmNoaWxkcy5sZW5ndGg7''@;'; put 'put ''YSsrKXRoaXMuYWRkQ2hpbGQobC5jaGlsZHNbYV0pfXdhbGtEb3duKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiQkYiO2lmKCFCbWUuaGFzKGEpKXRocm93IG5ldyBFcnJvcihgVHJhdmVyc2FsIHN0cmF0ZWd5ICIke2F9''@;'; put 'put ''IiBkb2VzIG5vdCBleGlzdGApO0JtZS5nZXQoYSkuY2FsbCh0aGlzLGwsdGhpcyl9d2Fsa1VwKGwpe2NvbnN0IGE9dGhpcyxkPWg9PnshMSE9PWwuY2FsbChhLGgpJiZudWxsIT09aC5wYXJlbnQmJmQoaC5wYXJlbnQpfTtkKHRoaXMpfX1mdW5jdGlvbiBpZWUoYyxsLGEpeyhmdW5jdGlvbiBu''@;'; put 'put ''NHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHJkKGMsbCl7cmV0dXJuIGMuZ2V0KGptZShjLGwpKX1m''@;'; put 'put ''dW5jdGlvbiBqbWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBndz1u''@;'; put 'put ''ZXcgV2Vha01hcCxXOT1uZXcgV2Vha01hcCxtdz1uZXcgV2Vha01hcDtjbGFzcyBpNHR7Y29uc3RydWN0b3IobCl7aWVlKHRoaXMsZ3csbmV3IE1hcCksaWVlKHRoaXMsVzksbmV3IE1hcCksaWVlKHRoaXMsbXcsbnVsbCksZnVuY3Rpb24gcjR0KGMsbCxhKXtjLnNldChqbWUoYyxsKSxhKX0o''@;'; put 'put ''bXcsdGhpcyxsKX1nZXRSb290cygpe3JldHVybiBBcnJheS5mcm9tKHJkKGd3LHRoaXMpLnZhbHVlcygpKX1nZXRSb290QnlDb2x1bW4obCl7bGV0IGE7cmV0dXJuIHJkKFc5LHRoaXMpLmhhcyhsKSYmKGE9cmQoZ3csdGhpcykuZ2V0KHJkKFc5LHRoaXMpLmdldChsKSkpLGF9Z2V0Tm9kZShs''@;'; put 'put ''LGEpe2NvbnN0IGQ9dGhpcy5nZXRSb290QnlDb2x1bW4oYSk7aWYoIWQpcmV0dXJuO2NvbnN0IGg9YS1yZChXOSx0aGlzKS5nZXQoYSk7bGV0IHYsZj0wO3JldHVybiBkLndhbGtEb3duKE09Pntjb25zdHtkYXRhOntvcmlnQ29sc3BhbjpELGhlYWRlckxldmVsOlp9fT1NO2lmKGw9PT1aKXtp''@;'; put 'put ''ZihoPj1mJiZoPD1mK0QtMSlyZXR1cm4gdj1NLHYuZGF0YS5pc1Jvb3Q9YT09PXYuZGF0YS5jb2x1bW5JbmRleCwhMTtmKz1EfX0pLHZ9cmVidWlsZFRyZWVJbmRleCgpe2xldCBsPTA7cmQoVzksdGhpcykuY2xlYXIoKSxZbihyZChndyx0aGlzKSxhPT57bGV0Wyx7ZGF0YTp7Y29sc3Bhbjpk''@;'; put 'put ''fX1dPWE7Zm9yKGxldCBoPWw7aDxsK2Q7aCsrKXJkKFc5LHRoaXMpLnNldChoLGwpO2wrPWR9KX1idWlsZFRyZWUoKXt0aGlzLmNsZWFyKCk7Y29uc3QgbD1yZChtdyx0aGlzKS5nZXRDb2x1bW5zQ291bnQoKTtsZXQgYT0wO2Zvcig7YTxsOyl7Y29uc3QgZD1yZChtdyx0aGlzKS5nZXRIZWFk''@;'; put 'put ''ZXJTZXR0aW5ncygwLGEpLGg9bmV3IElIO3JkKGd3LHRoaXMpLnNldChhLGgpLHRoaXMuYnVpbGRMZWF2ZXMoaCxhLDAsZC5vcmlnQ29sc3BhbiksYSs9ZC5vcmlnQ29sc3Bhbn10aGlzLnJlYnVpbGRUcmVlSW5kZXgoKX1idWlsZExlYXZlcyhsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjE7Y29uc3QgZj1yZChtdyx0aGlzKS5nZXRIZWFkZXJzU2V0dGluZ3MoZCxhLGgpO2QrPTEsWW4oZix2PT57Y29uc3QgTT17Li4udixoZWFkZXJMZXZlbDpkLTEsY29sdW1uSW5kZXg6YX07bGV0IEQ7MT09PWQ/KGwuZGF0''@;'; put 'put ''YT1NLEQ9bCk6KEQ9bmV3IElIKE0pLGwuYWRkQ2hpbGQoRCkpLGQ8cmQobXcsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKSYmdGhpcy5idWlsZExlYXZlcyhELGEsZCx2Lm9yaWdDb2xzcGFuKSxhKz12Lm9yaWdDb2xzcGFufSl9Y2xlYXIoKXtyZChndyx0aGlzKS5jbGVhcigpLHJkKFc5LHRoaXMp''@;'; put 'put ''LmNsZWFyKCl9fWZ1bmN0aW9uIHptZShjLGwpe2Mud2Fsa0Rvd24oYT0+e2xldHtkYXRhOmQsY2hpbGRzOmh9PWE7aWYoIWQuaXNIaWRkZW4mJihsKGQuY29sdW1uSW5kZXgpLDA9PT1oLmxlbmd0aCkpZm9yKGxldCBmPTE7ZjxkLmNvbHNwYW47ZisrKWwoZC5jb2x1bW5JbmRleCtmKX0pfWZ1''@;'; put 'put ''bmN0aW9uIFJIKGMsbCl7bGV0e2NoaWxkczphfT1jO2lmKDAhPT1hLmxlbmd0aClyZXR1cm4gYVswXS5kYXRhW2xdfWZ1bmN0aW9uIExIKGMpe3JldHVybiBSSChjLCJvcmlnQ29sc3BhbiIpPT09Yy5kYXRhLm9yaWdDb2xzcGFufWZ1bmN0aW9uIGFlZShjKXtjb25zdHtkYXRhOmwsY2hpbGRz''@;'; put 'put ''OmF9PWM7aWYoIWwuaXNDb2xsYXBzZWR8fGwuaXNIaWRkZW58fGwub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihMSChjKSlyZXR1cm4gYWVlKGFbMF0pO2wuaXNDb2xs''@;'; put 'put ''YXBzZWQ9ITE7Y29uc3QgaD1hLnNsaWNlKDEpLGY9bmV3IFNldDtsZXQgdj0wO2lmKGgubGVuZ3RoPjApWW4oaCxNPT57TS5yZXBsYWNlVHJlZVdpdGgoTS5kYXRhLmNsb25lZFRyZWUpLE0uZGF0YS5jbG9uZWRUcmVlPW51bGwsdis9TS5kYXRhLmNvbHNwYW4sem1lKE0sWj0+e2YuYWRkKFop''@;'; put 'put ''fSl9KTtlbHNle2NvbnN0e2NvbHNwYW46TSxvcmlnQ29sc3BhbjpELGNvbHVtbkluZGV4Olp9PWw7dj1ELU07Zm9yKGxldCByZT0xO3JlPEQ7cmUrKylmLmFkZChaK3JlKX1yZXR1cm4gYy53YWxrVXAoTT0+e2NvbnN0e2RhdGE6RH09TTtELmNvbHNwYW4rPXYsRC5jb2xzcGFuPj1ELm9yaWdD''@;'; put 'put ''b2xzcGFuPyhELmNvbHNwYW49RC5vcmlnQ29sc3BhbixELmlzQ29sbGFwc2VkPSExKTpMSChNKSYmKEQuaXNDb2xsYXBzZWQ9UkgoTSwiaXNDb2xsYXBzZWQiKSl9KSx7cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pm9lZShjKSxhZmZlY3RlZENvbHVtbnM6QXJyYXkuZnJvbShmKSxjb2xzcGFu''@;'; put 'put ''Q29tcGVuc2F0aW9uOnZ9fWZ1bmN0aW9uIG9lZShjKXt2YXIgbDtjb25zdHtkYXRhOmEsY2hpbGRzOmR9PWM7aWYoYS5pc0NvbGxhcHNlZHx8YS5pc0hpZGRlbnx8YS5vcmlnQ29sc3Bhbjw9MSlyZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9LGFmZmVjdGVkQ29sdW1uczpbXSxj''@;'; put 'put ''b2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKExIKGMpKXJldHVybiBvZWUoZFswXSk7YS5pc0NvbGxhcHNlZD0hMDtjb25zdCBmPWQuc2xpY2UoMSksdj1uZXcgU2V0O2lmKGYubGVuZ3RoPjApWW4oZixEPT57em1lKEQsWj0+e3YuYWRkKFopfSksRC5kYXRhLmNsb25lZFRyZWU9RC5jbG9uZVRy''@;'; put 'put ''ZWUoKSxELndhbGtEb3duKFo9PntsZXR7ZGF0YTpyZX09WjtyZS5pc0hpZGRlbj0hMH0pfSk7ZWxzZXtjb25zdHtvcmlnQ29sc3BhbjpELGNvbHVtbkluZGV4Olp9PWE7Zm9yKGxldCByZT0xO3JlPEQ7cmUrKyl2LmFkZChaK3JlKX1jb25zdCBNPWEuY29sc3Bhbi0obnVsbCE9PShsPVJIKGMs''@;'; put 'put ''ImNvbHNwYW4iKSkmJnZvaWQgMCE9PWw/bDoxKTtyZXR1cm4gYy53YWxrVXAoRD0+e2NvbnN0e2RhdGE6Wn09RDtaLmNvbHNwYW4tPU0sWi5jb2xzcGFuPD0xPyhaLmNvbHNwYW49MSxaLmlzQ29sbGFwc2VkPSEwKTpMSChEKSYmKFouaXNDb2xsYXBzZWQ9UkgoRCwiaXNDb2xsYXBzZWQiKSl9''@;'; put 'put ''KSx7cm9sbGJhY2tNb2RpZmljYXRpb246KCk9PmFlZShjKSxhZmZlY3RlZENvbHVtbnM6QXJyYXkuZnJvbSh2KSxjb2xzcGFuQ29tcGVuc2F0aW9uOk19fWNvbnN0IFVtZT1uZXcgTWFwKFtbImNvbGxhcHNlIixvZWVdLFsiZXhwYW5kIixhZWVdLFsiaGlkZS1jb2x1bW4iLGZ1bmN0aW9uIGE0''@;'; put 'put ''dChjLGwpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihjLmNoaWxkcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoZ2xgVGhlIHBhc3NlZCBub2RlIGlzIG5v''@;'; put 'put ''dCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwgdGhlIGhpZGUgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6YX09Yy5kYXRhO2lmKGEuaW5jbHVkZXMobCkpcmV0dXJuO2xl''@;'; put 'put ''dCBkPSExO2Mud2Fsa1VwKGg9Pntjb25zdHtkYXRhOntjb2xsYXBzaWJsZTpmfX09aDtpZihmKXJldHVybiBkPSEwLCExfSksIWQmJmMud2Fsa1VwKGg9Pntjb25zdHtkYXRhOmZ9PWg7Zi5jcm9zc0hpZGRlbkNvbHVtbnMucHVzaChsKSxmLmNvbHNwYW4+MT9mLmNvbHNwYW4tPTE6Zi5pc0hp''@;'; put 'put ''ZGRlbj0hMH0pfV0sWyJzaG93LWNvbHVtbiIsZnVuY3Rpb24gbzR0KGMsbCl7aWYoIU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52YWxpZCB0eXBlLiIpO2lmKGMuY2hpbGRzLmxlbmd0aD4wKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcihnbGBUaGUgcGFzc2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24gdGhlIHRyZWUuIE9ubHkgZm9yXHgyMAp0aGUgbGFzdCBub2RlLCB0aGUgc2hvdyBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBsaWVkLmApO2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1u''@;'; put 'put ''czphfT1jLmRhdGE7aWYoIWEuaW5jbHVkZXMobCkpcmV0dXJuO2xldCBkPSExO2Mud2Fsa1VwKGg9Pntjb25zdHtkYXRhOntjb2xsYXBzaWJsZTpmfX09aDtpZihmKXJldHVybiBkPSEwLCExfSksIWQmJmMud2Fsa1VwKGg9Pntjb25zdHtkYXRhOmZ9PWg7Zi5jcm9zc0hpZGRlbkNvbHVtbnMu''@;'; put 'put ''c3BsaWNlKGYuY3Jvc3NIaWRkZW5Db2x1bW5zLmluZGV4T2YobCksMSksIWYuaXNIaWRkZW4mJmYuY29sc3BhbjxmLm9yaWdDb2xzcGFuJiYoZi5jb2xzcGFuKz0xKSxmLmlzSGlkZGVuPSExfSl9XV0pO2Z1bmN0aW9uIE9IKGMpe2NvbnN0IGw9W107cmV0dXJuIFluKGMsYT0+e2Eud2Fsa0Rv''@;'; put 'put ''d24oZD0+e2NvbnN0IGg9ZC5kYXRhLHtvcmlnQ29sc3BhbjpmLGNvbHVtbkluZGV4OnYsaGVhZGVyTGV2ZWw6TSxjcm9zc0hpZGRlbkNvbHVtbnM6RH09aCxaPWZ1bmN0aW9uIGM0dChjLGwpe2xldCBhO3JldHVybiBBcnJheS5pc0FycmF5KGNbbF0pP2E9Y1tsXTooYT1bXSxjW2xdPWEpLGF9''@;'; put 'put ''KGwsTSk7bGV0IHJlPSExO2ZvcihsZXQgY2U9djtjZTx2K2Y7Y2UrKylpZihELmluY2x1ZGVzKGNlKXx8cmUpWi5wdXNoKHtsYWJlbDoiIixpc1BsYWNlaG9sZGVyOiEwfSk7ZWxzZXtjb25zdCBFZT1sNHQoaCk7RWUuaXNSb290PSEwLFoucHVzaChFZSkscmU9ITB9fSl9KSxsfWZ1bmN0aW9u''@;'; put 'put ''IGw0dChjKXtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6bCwuLi5hfT1lZWUoYyk7cmV0dXJuIGF9ZnVuY3Rpb24gc2VlKGMsbCxhKXsoZnVuY3Rpb24gdTR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBl''@;'; put 'put ''bGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBtQShjLGwsYSl7cmV0dXJuIGMuc2V0KFptZShjLGwpLGEpLGF9ZnVuY3Rpb24gcWMoYyxsKXtyZXR1cm4gYy5nZXQoWm1lKGMsbCkpfWZ1bmN0aW9uIFptZShjLGwsYSl7aWYoImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIG40PW5ldyBXZWFrTWFwLEpkPW5ldyBXZWFrTWFwLFk5PW5l''@;'; put 'put ''dyBXZWFrTWFwO2NsYXNzIGQ0dHtjb25zdHJ1Y3Rvcigpe3NlZSh0aGlzLG40LG5ldyBxcHQpLHNlZSh0aGlzLEpkLG5ldyBpNHQocWMobjQsdGhpcykpKSxzZWUodGhpcyxZOSxbW11dKX1zZXRTdGF0ZShsKXtxYyhuNCx0aGlzKS5zZXREYXRhKGwpO2xldCBhPSExO3RyeXtxYyhKZCx0aGlz''@;'; put 'put ''KS5idWlsZFRyZWUoKX1jYXRjaHtxYyhKZCx0aGlzKS5jbGVhcigpLHFjKG40LHRoaXMpLmNsZWFyKCksYT0hMH1yZXR1cm4gbUEoWTksdGhpcyxPSChxYyhKZCx0aGlzKS5nZXRSb290cygpKSksYX1zZXRDb2x1bW5zTGltaXQobCl7cWMobjQsdGhpcykuc2V0Q29sdW1uc0xpbWl0KGwpfW1l''@;'; put 'put ''cmdlU3RhdGVXaXRoKGwpe2NvbnN0IGE9eXMobCxkPT57bGV0e3JvdzpoLC4uLmZ9PWQ7cmV0dXJue3JvdzpoPDA/dGhpcy5yb3dDb29yZHNUb0xldmVsKGgpOmgsLi4uZn19KTtxYyhuNCx0aGlzKS5tZXJnZVdpdGgoYSkscWMoSmQsdGhpcykuYnVpbGRUcmVlKCksbUEoWTksdGhpcyxPSChx''@;'; put 'put ''YyhKZCx0aGlzKS5nZXRSb290cygpKSl9bWFwU3RhdGUobCl7cWMobjQsdGhpcykubWFwKGwpLHFjKEpkLHRoaXMpLmJ1aWxkVHJlZSgpLG1BKFk5LHRoaXMsT0gocWMoSmQsdGhpcykuZ2V0Um9vdHMoKSkpfW1hcE5vZGVzKGwpe3JldHVybiBxdShxYyhKZCx0aGlzKS5nZXRSb290cygpLChh''@;'; put 'put ''LGQpPT4oZC53YWxrRG93bihoPT57Y29uc3QgZj1sKGguZGF0YSk7dm9pZCAwIT09ZiYmYS5wdXNoKGYpfSksYSksW10pfXRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGwsYSxkKXthPDAmJihhPXRoaXMucm93Q29vcmRzVG9MZXZlbChhKSk7Y29uc3QgaD1xYyhKZCx0aGlzKS5nZXROb2RlKGEs''@;'; put 'put ''ZCk7bGV0IGY7cmV0dXJuIGgmJihmPWZ1bmN0aW9uIHM0dChjLGwsYSl7aWYoIVVtZS5oYXMoYykpdGhyb3cgbmV3IEVycm9yKGBUaGUgbm9kZSBtb2RpZmllciBhY3Rpb24gKCIke2N9IikgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIFVtZS5nZXQoYykobCxhKX0obCxoLGQpLG1BKFk5LHRo''@;'; put 'put ''aXMsT0gocWMoSmQsdGhpcykuZ2V0Um9vdHMoKSkpKSxmfXRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24obCxhKXtyZXR1cm4gdGhpcy50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihsLC0xLGEpfXJvd0Nvb3Jkc1RvTGV2ZWwobCl7aWYobD49MClyZXR1cm4gbnVsbDtjb25zdCBhPWwrTWF0aC5t''@;'; put 'put ''YXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiBhPDA/bnVsbDphfWxldmVsVG9Sb3dDb29yZHMobCl7aWYobDwwKXJldHVybiBudWxsO2NvbnN0IGE9bC1NYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIGE+PTA/bnVsbDphfWdldEhlYWRlclNldHRpbmdz''@;'; put 'put ''KGwsYSl7dmFyIGQsaDtyZXR1cm4gbDwwJiYobD10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwobCkpLG51bGw9PT1sfHxsPj10aGlzLmdldExheWVyc0NvdW50KCk/bnVsbDpudWxsIT09KGQ9bnVsbD09PShoPXFjKFk5LHRoaXMpW2xdKXx8dm9pZCAwPT09aD92b2lkIDA6aFthXSkmJnZvaWQgMCE9''@;'; put 'put ''PWQ/ZDpudWxsfWdldEhlYWRlclRyZWVOb2RlRGF0YShsLGEpe2NvbnN0IGQ9dGhpcy5nZXRIZWFkZXJUcmVlTm9kZShsLGEpO3JldHVybiBkP3suLi5kLmRhdGF9Om51bGx9Z2V0SGVhZGVyVHJlZU5vZGUobCxhKXtyZXR1cm4gbDwwJiYobD10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwobCkpLG51''@;'; put 'put ''bGw9PT1sfHxsPj10aGlzLmdldExheWVyc0NvdW50KCk/bnVsbDpxYyhKZCx0aGlzKS5nZXROb2RlKGwsYSl8fG51bGx9ZmluZFRvcE1vc3RFbnRpcmVIZWFkZXJMZXZlbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bDtj''@;'; put 'put ''b25zdCBkPWEtbCsxO2xldCBoPSExLGY9bnVsbDtmb3IobGV0IHY9bDt2PD1hO3YrKyl7Y29uc3QgTT1xYyhKZCx0aGlzKS5nZXRSb290QnlDb2x1bW4odik7aWYoIU0pYnJlYWs7aD0hMCxNLndhbGtEb3duKEQ9Pntjb25zdHtjb2x1bW5JbmRleDpaLGhlYWRlckxldmVsOnJlLG9yaWdDb2xz''@;'; put 'put ''cGFuOmNlLGlzSGlkZGVuOmJlfT1ELmRhdGE7YmV8fGNlPD1kJiZaPj1sJiZaK2NlLTE8PWEmJihudWxsPT09Znx8cmU8ZikmJihmPXJlKX0sRm1lKX1yZXR1cm4gaCYmbnVsbD09PWY/LTE6dGhpcy5sZXZlbFRvUm93Q29vcmRzKGY/PzApfWZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGwsYSl7''@;'; put 'put ''dmFyIGQ7Y29uc3R7aXNSb290Omh9PW51bGwhPT0oZD10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsYSkpJiZ2b2lkIDAhPT1kP2Q6e2lzUm9vdDohMH07aWYoaClyZXR1cm4gYTtsZXQgZj1hLTE7Zm9yKDtmPj0wOyl7dmFyIHY7Y29uc3R7aXNSb290Ok19PW51bGwhPT0odj10aGlzLmdldEhl''@;'; put 'put ''YWRlclNldHRpbmdzKGwsZikpJiZ2b2lkIDAhPT12P3Y6e2lzUm9vdDohMH07aWYoTSlicmVhaztmLT0xfXJldHVybiBmfWZpbmRSaWdodE1vc3RDb2x1bW5JbmRleChsLGEpe3ZhciBkO2NvbnN0e2lzUm9vdDpoLG9yaWdDb2xzcGFuOmZ9PW51bGwhPT0oZD10aGlzLmdldEhlYWRlclNldHRp''@;'; put 'put ''bmdzKGwsYSkpJiZ2b2lkIDAhPT1kP2Q6e2lzUm9vdDohMCxvcmlnQ29sc3BhbjoxfTtpZihoKXJldHVybiBhK2YtMTtsZXQgdj1hKzE7Zm9yKDt2PHRoaXMuZ2V0Q29sdW1uc0NvdW50KCk7KXt2YXIgTTtjb25zdHtpc1Jvb3Q6RH09bnVsbCE9PShNPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3Mo''@;'; put 'put ''bCx2KSkmJnZvaWQgMCE9PU0/TTp7aXNSb290OiEwfTtpZihEKWJyZWFrO3YrPTF9cmV0dXJuIHYtMX1nZXRMYXllcnNDb3VudCgpe3JldHVybiBxYyhuNCx0aGlzKS5nZXRMYXllcnNDb3VudCgpfWdldENvbHVtbnNDb3VudCgpe3JldHVybiBxYyhuNCx0aGlzKS5nZXRDb2x1bW5zQ291bnQo''@;'; put 'put ''KX1jbGVhcigpe21BKFk5LHRoaXMsW10pLHFjKG40LHRoaXMpLmNsZWFyKCkscWMoSmQsdGhpcykuY2xlYXIoKX19ZnVuY3Rpb24gdkEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGg0dChjKXt2YXIgbD1mdW5jdGlvbiBmNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy''@;'; put 'put ''biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl''@;'; put 'put ''IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGc0dD1jbGFzcyBwNHR7Y29uc3RydWN0b3IobCxhKXt2QSh0aGlzLCJob3QiLHZvaWQgMCksdkEodGhpcywibmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIiLHZvaWQgMCksdkEodGhpcywibGF5ZXJzQ291bnQiLDApLHZBKHRoaXMsImNv''@;'; put 'put ''bnRhaW5lciIsdm9pZCAwKSx2QSh0aGlzLCJ3aWR0aHNNYXAiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyPWEsdGhpcy53aWR0aHNNYXA9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCgibmVzdGVk''@;'; put 'put ''SGVhZGVycy53aWR0aHNNYXAiLCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpfXNldExheWVyc0NvdW50KGwpe3JldHVybiB0aGlzLmxheWVyc0NvdW50PWwsdGhpc31nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53aWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1''@;'; put 'put ''bW4obCkpfWJ1aWxkV2lkdGhzTWFwKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCk7dGhpcy5jb250YWluZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhhbmRzb250YWJsZSIs''@;'; put 'put ''Imh0R2hvc3RUYWJsZSIsImh0QXV0b1NpemUiKSxsJiZ0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKGwpLHRoaXMuX2J1aWxkR2hvc3RUYWJsZSh0aGlzLmNvbnRhaW5lciksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpO2NvbnN0IGE9''@;'; put 'put ''dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgidHI6bGFzdC1vZi10eXBlIHRoIiksZD1hLmxlbmd0aDt0aGlzLndpZHRoc01hcC5jbGVhcigpO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFi''@;'; put 'put ''bGVJbmRleChoKSx2PXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZik7dGhpcy53aWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KHYsYVtoXS5vZmZzZXRXaWR0aCl9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVs''@;'; put 'put ''bH1fYnVpbGRHaG9zdFRhYmxlKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphLGNvbHVtbkluZGV4TWFwcGVyOmR9PXRoaXMuaG90LGg9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZj1hLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksdj0hIXRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25N''@;'; put 'put ''ZW51LE09ZC5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO2ZvcihsZXQgRD0wO0Q8dGhpcy5sYXllcnNDb3VudDtEKyspe2NvbnN0IFo9YS5jcmVhdGVFbGVtZW50KCJ0ciIpO2ZvcihsZXQgcmU9MDtyZTxNO3JlKyspe2xldCBjZT1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgo''@;'; put 'put ''cmUpO251bGw9PT1jZSYmKGNlPXJlKTtjb25zdCBiZT1hLmNyZWF0ZUVsZW1lbnQoInRoIiksRWU9dGhpcy5uZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcihELGNlKTtpZihFZSYmKCFFZS5pc1BsYWNlaG9sZGVyfHxFZS5pc0hpZGRlbikpe2xldCBCZT1FZS5sYWJlbDt2JiYoQmUrPSc8YnV0''@;'; put 'put ''dG9uIGNsYXNzPSJjaGFuZ2VUeXBlIj48L2J1dHRvbj4nKSx6NyhiZSxCZSksYmUuY29sU3Bhbj1FZS5jb2xzcGFuLFouYXBwZW5kQ2hpbGQoYmUpfX1mLmFwcGVuZENoaWxkKFopfWguYXBwZW5kQ2hpbGQoZiksbC5hcHBlbmRDaGlsZChoKX1jbGVhcigpe3RoaXMud2lkdGhzTWFwLmNsZWFy''@;'; put 'put ''KCksdGhpcy5jb250YWluZXI9bnVsbH19O2Z1bmN0aW9uIFdtZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdjR0KGMpe3ZhciBsPWZ1bmN0aW9uIGI0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg''@;'; put 'put ''MCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVt''@;'; put 'put ''YmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gYkEoYyxs''@;'; put 'put ''LGEpe1ltZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gWW1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBHZyhjLGwsYSl7cmV0dXJu''@;'; put 'put ''IGMuc2V0KFhjKGMsbCksYSksYX1mdW5jdGlvbiBfcyhjLGwpe3JldHVybiBjLmdldChYYyhjLGwpKX1mdW5jdGlvbiBYYyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgR21lPSJuZXN0ZWRIZWFkZXJzIjt2YXIgRGw9bmV3IFdlYWtNYXAsQzY9bmV3IFdlYWtNYXAseUE9bmV3IFdlYWtNYXAsUEg9bmV3IFdlYWtNYXAsRkg9bmV3IFdlYWtNYXAsaHU9bmV3IFdl''@;'; put 'put ''YWtTZXQ7Y2xhc3MgXzR0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG00dChjLGwpe1ltZShjLGwpLGwuYWRkKGMpfSh0aGlzLGh1KSxiQSh0aGlzLERsLG5ldyBkNHQpLGJBKHRoaXMsQzYsbnVsbCksYkEodGhpcyx5QSxudWxsKSxiQSh0''@;'; put 'put ''aGlzLFBILCExKSxiQSh0aGlzLEZILG51bGwpLFdtZSh0aGlzLCJnaG9zdFRhYmxlIixuZXcgZzR0KHRoaXMuaG90LChsLGEpPT50aGlzLmdldEhlYWRlclNldHRpbmdzKGwsYSkpKSxXbWUodGhpcywiZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tF''@;'; put 'put ''WSgpe3JldHVybiBHbWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjgwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtHbWVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtuZXN0ZWRI''@;'; put 'put ''ZWFkZXJzOmF9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7KCFBcnJheS5pc0FycmF5KGEpfHwhQXJyYXkuaXNBcnJheShhWzBdKSkmJmlsKGdsYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4gVGhlIHNldHRpbmdzIGhhcyB0byBiZVx4MjAKICAg''@;'; put 'put ''ICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGFycmF5cyBlLnEuIFtbJ0ExJywgeyBsYWJlbDogJ0EyJywgY29sc3BhbjogMiB9XV1gKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT5YYyhodSx0aGlzLEY0dCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRl''@;'; put 'put ''ckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLEg0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24i''@;'; put 'put ''LGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsTTR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigp''@;'; put 'put ''e2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLHg0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBk''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsRTR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsVDR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxBNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJy''@;'; put 'put ''YXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsazR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoKT0+WGMoaHUsdGhpcyxISCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3Vz''@;'; put 'put ''U2V0IiwoKT0+WGMoaHUsdGhpcyxISCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tm''@;'; put 'put ''XTtyZXR1cm4gWGMoaHUsbCx3NHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGQ9PlhjKGh1LHRoaXMsSTR0KS5jYWxsKHRoaXMsZCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBk''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsTDR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLE80dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsQzR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNvcHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXko''@;'; put 'put ''ZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsUzR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtm''@;'; put 'put ''KyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsRDR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0w''@;'; put 'put ''O2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsUjR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUZvY3VzZWRFbGVtZW50IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhb''@;'; put 'put ''Zl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLFA0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLCgpPT5YYyhodSx0aGlzLEhIKS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5hZGRM''@;'; put 'put ''b2NhbEhvb2soImNhY2hlVXBkYXRlZCIsKCk9PlhjKGh1LHRoaXMsSEgpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMudXBkYXRlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6bH09dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKTtfcyhEbCx0aGlzKS5zZXRDb2x1bW5zTGltaXQodGhpcy5ob3QuY291bnRDb2xzKCkpLEFycmF5LmlzQXJyYXkobCkmJih0aGlzLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnM9X3MoRGwsdGhpcykuc2V0U3RhdGUobCkpLHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVk''@;'; put 'put ''SGVhZGVycyYmaWwoZ2xgWW91ciBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gc2V0dXAgY29udGFpbnMgb3ZlcmxhcHBpbmcgaGVhZGVycy4gVGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb25ceDIwCiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLmApLHRo''@;'; put 'put ''aXMuZW5hYmxlZCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVzKCkuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9ITA9PT1hPyJoaWRlLWNvbHVtbiI6InNob3ctY29sdW1uIjtfcyhEbCx0aGlzKS50cmlnZ2VyQ29sdW1uTW9k''@;'; put 'put ''aWZpY2F0aW9uKGgsZCl9KSwhX3MoQzYsdGhpcykmJnRoaXMuZW5hYmxlZCYmR2coQzYsdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVDaGFuZ2VzT2JzZXJ2ZXIoImhpZGluZyIpLnN1YnNjcmliZShhPT57YS5mb3JFYWNoKGQ9PntsZXR7b3A6aCxpbmRleDpmLG5ld1Zh''@;'; put 'put ''bHVlOnZ9PWQ7aWYoInJlcGxhY2UiPT09aCl7Y29uc3QgTT0hMD09PXY/ImhpZGUtY29sdW1uIjoic2hvdy1jb2x1bW4iO19zKERsLHRoaXMpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oTSxmKX19KSx0aGlzLmdob3N0VGFibGUuYnVpbGRXaWR0aHNNYXAoKX0pKSx0aGlzLmdob3N0VGFi''@;'; put 'put ''bGUuc2V0TGF5ZXJzQ291bnQodGhpcy5nZXRMYXllcnNDb3VudCgpKS5idWlsZFdpZHRoc01hcCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsZWFyQ29sc3BhbnMoKSxfcyhEbCx0aGlzKS5jbGVhcigpLF9zKEM2LHRoaXMpLnVuc3Vic2NyaWJlKCksR2co''@;'; put 'put ''QzYsdGhpcyxudWxsKSx0aGlzLmdob3N0VGFibGUuY2xlYXIoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0U3RhdGVNYW5hZ2VyKCl7cmV0dXJuIF9zKERsLHRoaXMpfWdldExheWVyc0NvdW50KCl7cmV0dXJuIF9zKERsLHRoaXMpLmdldExheWVyc0NvdW50KCl9Z2V0SGVhZGVyU2V0dGlu''@;'; put 'put ''Z3MobCxhKXtyZXR1cm4gX3MoRGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKX1jbGVhckNvbHNwYW5zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0e193dDpsfT10aGlzLmhvdC52aWV3LGE9bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoLGQ9bC53dFRh''@;'; put 'put ''YmxlLlRIRUFELGg9bC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCxmPWwud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk/bC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFEOm51bGw7''@;'; put 'put ''Zm9yKGxldCB2PTA7djxhO3YrKyl7Y29uc3QgTT1kLmNoaWxkTm9kZXNbdl07aWYoIU0pYnJlYWs7Y29uc3QgRD1oLmNoaWxkTm9kZXNbdl0sWj1mP2YuY2hpbGROb2Rlc1t2XTpudWxsO2ZvcihsZXQgcmU9MCxjZT1NLmNoaWxkTm9kZXMubGVuZ3RoO3JlPGNlO3JlKyspTS5jaGlsZE5vZGVz''@;'; put 'put ''W3JlXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxsbyhNLmNoaWxkTm9kZXNbcmVdLCJoaWRkZW5IZWFkZXIiKSxEJiZELmNoaWxkTm9kZXNbcmVdJiYoRC5jaGlsZE5vZGVzW3JlXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxsbyhELmNoaWxkTm9kZXNbcmVdLCJoaWRkZW5IZWFk''@;'; put 'put ''ZXIiKSksZiYmWiYmWi5jaGlsZE5vZGVzW3JlXSYmKFouY2hpbGROb2Rlc1tyZV0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksbG8oWi5jaGlsZE5vZGVzW3JlXSwiaGlkZGVuSGVhZGVyIikpfX1oZWFkZXJSZW5kZXJlckZhY3RvcnkobCl7dmFyIGE9dGhpcztjb25zdCBkPXRoaXMuaG90''@;'; put 'put ''LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7cmV0dXJuKGgsZik9Pnt2YXIgdjtjb25zdHtjb2x1bW5JbmRleE1hcHBlcjpNLHZpZXc6RH09dGhpcy5ob3Q7bGV0IFo9TS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpO251bGw9PT1aJiYoWj1oKSxmLnJl''@;'; put 'put ''bW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGxvKGYsImhpZGRlbkhlYWRlciIpLGxvKGYsImhpZGRlbkhlYWRlclRleHQiKTtjb25zdHtjb2xzcGFuOnJlLGlzSGlkZGVuOmNlLGlzUGxhY2Vob2xkZXI6YmUsaGVhZGVyQ2xhc3NOYW1lczpFZX09bnVsbCE9PSh2PV9zKERsLHRoaXMpLmdldEhl''@;'; put 'put ''YWRlclNldHRpbmdzKGwsWikpJiZ2b2lkIDAhPT12P3Y6e2xhYmVsOiIifTtpZihiZXx8Y2UpVGkoZiwiaGlkZGVuSGVhZGVyIik7ZWxzZSBpZihyZT4xKXt2YXIgQmUscWUscnQ7Y29uc3R7d3RPdmVybGF5czpwdH09RC5fd3QsZHQ9bnVsbD09PShCZT1wdC50b3BJbmxpbmVTdGFydENvcm5l''@;'; put 'put ''ck92ZXJsYXkpfHx2b2lkIDA9PT1CZT92b2lkIDA6QmUuY2xvbmUud3RUYWJsZS5USEVBRC5jb250YWlucyhmKSxKdD1udWxsPT09KHFlPXB0LmlubGluZVN0YXJ0T3ZlcmxheSl8fHZvaWQgMD09PXFlP3ZvaWQgMDpxZS5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpOyhudWxsPT09''@;'; put 'put ''KHJ0PXB0LnRvcE92ZXJsYXkpfHx2b2lkIDA9PT1ydD92b2lkIDA6cnQuY2xvbmUud3RUYWJsZS5USEVBRC5jb250YWlucyhmKSkmJlo8ZCYmVGkoZiwiaGlkZGVuSGVhZGVyVGV4dCIpO2NvbnN0IENuPWR0fHxKdD9NYXRoLm1pbihyZSxkLWgpOnJlO0NuPjEmJmYuc2V0QXR0cmlidXRlKCJj''@;'; put 'put ''b2xzcGFuIixDbil9aWYodGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIoWixmLGZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0Q29sdW1uSGVhZGVyVmFsdWUoLi4uYXJndW1lbnRzKX0sbCksIWJlJiYhY2Upe2NvbnN0IHB0PWYucXVlcnlTZWxlY3RvcigiZGl2LnJlbGF0aXZlIik7cHQmJkVl''@;'; put 'put ''JiZFZS5sZW5ndGg+MCYmKGxvKHB0LHRoaXMuaG90LmdldENvbHVtbk1ldGEoWikuaGVhZGVyQ2xhc3NOYW1lKSxUaShwdCxFZSkpfX19Z2V0Q29sdW1uSGVhZGVyVmFsdWUobCxhKXt2YXIgZDtjb25zdHtpc0hpZGRlbjpoLGlzUGxhY2Vob2xkZXI6Zn09bnVsbCE9PShkPV9zKERsLHRoaXMp''@;'; put 'put ''LmdldEhlYWRlclNldHRpbmdzKGEsbCkpJiZ2b2lkIDAhPT1kP2Q6e307cmV0dXJuIGZ8fGg/IiI6dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGwsYSl9ZGVzdHJveSgpe0dnKERsLHRoaXMsbnVsbCksbnVsbCE9PV9zKEM2LHRoaXMpJiYoX3MoQzYsdGhpcykudW5zdWJzY3JpYmUoKSxHZyhDNix0''@;'; put 'put ''aGlzLG51bGwpKSxzdXBlci5kZXN0cm95KCl9X2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpe2lmKCEobC5yb3c+PTB8fGwuY29sPDApKXJldHVybiBfcyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEobC5yb3csbC5jb2wpfX1mdW5jdGlvbiBISCgpe3ZhciBjO2NvbnN0''@;'; put 'put ''IGw9bnVsbD09PShjPXRoaXMuaG90KXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtjb25zdHtoaWdobGlnaHQ6YX09bDtpZihhLmlzSGVhZGVyKCkmJmEuY29sPj0wKXtjb25zdCBoPV9zKERsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVt''@;'; put 'put ''bkluZGV4KGEucm93LGEuY29sKSxmPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0Rm9jdXMoKTtmLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQuY29sPWgsZi52aXN1YWxDZWxsUmFuZ2UuZnJvbS5jb2w9aCxmLnZpc3VhbENlbGxSYW5nZS50by5jb2w9aCxmLmNvbW1pdCgpfX1m''@;'; put 'put ''dW5jdGlvbiB3NHQoYyxsKXt2YXIgYTtjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWQpcmV0dXJuIGM7Y29uc3R7aGlnaGxpZ2h0Omh9PWQse25hdmlnYWJsZUhlYWRlcnM6Zn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSx2PXRoaXMuaG90LnNlbGVjdGlvbi5p''@;'; put 'put ''c1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxNPWY/aC5yb3c6bnVsbD09PShhPV9zKEZILHRoaXMpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5yb3csRD12P2M6aC5jb2wsWj1NPDAmJkQ+PTA7aWYoR2coRkgsdGhpcyxudWxsKSwhWilyZXR1cm4gYztjb25zdCByZT10aGlzLmhvdC5nZXRGaXJz''@;'; put 'put ''dEZ1bGx5VmlzaWJsZUNvbHVtbigpLGNlPXRoaXMuaG90LmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKSxiZT1jZS1yZSsxLEVlPV9zKERsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KE0sRCksQmU9X3MoRGwsdGhpcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KE0sRCkscWU9''@;'; put 'put ''QmUtRWUrMTtpZihFZTxyZSYmQmU+Y2UpcmV0dXJuIEVlO2lmKHYpe2xldCBydD1udWxsO3JldHVybiBFZT49cmUmJkJlPmNlP3FlPmJlPyhsLnZhbHVlPSJzdGFydCIscnQ9RWUpOihsLnZhbHVlPSJlbmQiLHJ0PUJlKTpFZTxyZSYmQmU8PWNlJiYocWU+YmU/KGwudmFsdWU9ImVuZCIscnQ9''@;'; put 'put ''QmUpOihsLnZhbHVlPSJzdGFydCIscnQ9RWUpKSxydH1yZXR1cm4gRWU8PXJlP0VlOkJlfWZ1bmN0aW9uIEM0dChjLGwsYSl7Y29uc3QgZD1fcyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEobCxjKTtpZighZClyZXR1cm4gYztjb25zdHtjb2x1bW5DdXJzb3I6aCxzZWxlY3Rpb25U''@;'; put 'put ''eXBlOmYsc2VsZWN0aW9uV2lkdGg6dn09YSx7aXNSb290Ok0sY29sc3BhbjpEfT1fcyhEbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhsLGMpO2lmKGY9PT1tWCl7aWYoIU0pcmV0dXJuIGQuY29sdW1uSW5kZXh9ZWxzZSBpZihmPT09VzNlJiYoRD52LWh8fCFNKSlyZXR1cm4gbnVsbDtyZXR1''@;'; put 'put ''cm4gY31mdW5jdGlvbiBTNHQoYyxsLGEpe2xldHtjb2x1bW5IZWFkZXJzQ291bnQ6ZH09YTtpZigwIT09ZClmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2YrKyl7Y29uc3R7c3RhcnRSb3c6dixzdGFydENvbDpNLGVuZFJvdzpELGVuZENvbDpafT1sW2ZdLHJlPUQtdisxO2lmKHY+PTB8fDE9PU0t''@;'; put 'put ''WisxKWJyZWFrO2ZvcihsZXQgYmU9TTtiZTw9WjtiZSsrKWZvcihsZXQgRWU9djtFZTw9RDtFZSsrKXt2YXIgaDtjb25zdCBCZT1yZStFZSxxZT1iZS1NOzAhPT1xZSYmITE9PT0obnVsbD09PShoPV9zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShFZSxiZSkpfHx2b2lkIDA9PT1o''@;'; put 'put ''P3ZvaWQgMDpoLmlzUm9vdCkmJihjW0JlXVtxZV09IiIpfX19ZnVuY3Rpb24gTTR0KGMsbCxhLGQpe3RoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpJiYoZC5jb2x1bW49ITApfWZ1bmN0aW9uIHg0dChjLGwpe2NvbnN0IGE9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRh''@;'; put 'put ''QnlDb29yZHMobCk7aWYoIWEpcmV0dXJuO0dnKHlBLHRoaXMsbC5jbG9uZSgpKSxHZyhQSCx0aGlzLCEwKTtjb25zdHtzZWxlY3Rpb246ZH09dGhpcy5ob3QsaD1kLmlzU2VsZWN0ZWQoKT9kLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50KCk6bnVsbCxmPVtdLHtjb2x1bW5JbmRleDp2LG9y''@;'; put 'put ''aWdDb2xzcGFuOk19PWEsRD0hZC5pbkluU2VsZWN0aW9uKGwpO2Muc2hpZnRLZXkmJmg/bC5jb2w8aC5mcm9tLmNvbD9mLnB1c2goaC5nZXRUb3BFbmRDb3JuZXIoKS5jb2wsdixsLnJvdyk6Zi5wdXNoKGwuY29sPmguZnJvbS5jb2w/aC5nZXRUb3BTdGFydENvcm5lcigpLmNvbDp2LHYrTS0x''@;'; put 'put ''LGwucm93KTooVU8oYyl8fEhtKGMpJiZEfHxpZmUoYykpJiZmLnB1c2godix2K00tMSxsLnJvdyksZC5zZWxlY3RDb2x1bW5zKC4uLmYpfWZ1bmN0aW9uIEU0dChjLGwsYSxkKXtpZighdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpfHxkLmNvbHVtbilyZXR1cm47Y29uc3QgaD10aGlzLl9n''@;'; put 'put ''ZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKTtpZighaClyZXR1cm47Y29uc3R7Y29sdW1uSW5kZXg6ZixvcmlnQ29sc3Bhbjp2fT1oLE09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxEPU0uZ2V0VG9wU3RhcnRDb3JuZXIoKSxaPU0uZ2V0Qm90dG9tRW5kQ29ybmVyKCks''@;'; put 'put ''e2Zyb206cmV9PU07ZC5jb2x1bW49ITAsZC5jZWxsPSEwO2NvbnN0IGNlPVtdLGJlPWtzKGwucm93LC0xLzAsLTEpO2wuY29sPHJlLmNvbD9jZS5wdXNoKFouY29sLGYsYmUpOmNlLnB1c2gobC5jb2w+cmUuY29sP0QuY29sOmYsZit2LTEsYmUpLHRoaXMuaG90LnNlbGVjdGlvbi5zZWxlY3RD''@;'; put 'put ''b2x1bW5zKC4uLmNlKX1mdW5jdGlvbiBUNHQoKXtHZyhQSCx0aGlzLCExKX1mdW5jdGlvbiBBNHQoKXtjb25zdHtuYXZpZ2FibGVIZWFkZXJzOmN9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7aWYoIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKXx8IV9zKFBILHRoaXMpfHwhYylyZXR1cm47''@;'; put 'put ''Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bC5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxkPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLHtjb2x1bW5JbmRleDpoLG9yaWdDb2xzcGFuOmZ9PV9zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShfcyh5''@;'; put 'put ''QSx0aGlzKS5yb3csX3MoeUEsdGhpcykuY29sKTtpZihsLnNldEhpZ2hsaWdodChfcyh5QSx0aGlzKSksZj5sLmdldFdpZHRoKCl8fGg8YXx8aCtmLTE+ZCl7Y29uc3Qgdj1fcyhEbCx0aGlzKS5maW5kVG9wTW9zdEVudGlyZUhlYWRlckxldmVsKGtzKGEsaCxoK2YtMSksa3MoZCxoLGgrZi0x''@;'; put 'put ''KSk7bC5oaWdobGlnaHQucm93PXYsbC5oaWdobGlnaHQuY29sPWwuZnJvbS5jb2x9fWZ1bmN0aW9uIGs0dChjKXtjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93K2Mucm93LGwuY29sK2Mu''@;'; put 'put ''Y29sKTtpZighKGEuaXNIZWFkZXIoKSYmYS5jb2w+PTApKXJldHVybjtjb25zdCBoPV9zKERsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGEucm93LGEuY29sKSxmPV9zKERsLHRoaXMpLmZpbmRSaWdodE1vc3RDb2x1bW5JbmRleChhLnJvdyxhLmNvbCk7aWYoYy5jb2w8MCl7Y29u''@;'; put 'put ''c3QgTT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobC5jb2w+PWgmJmwuY29sPD1mP2gtMTpmLC0xKTtjLmNvbD1udWxsPT09TT8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGwuY29sKTotTWF0aC5tYXgo''@;'; put 'put ''dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShNLGwuY29sKS0xLDEpfWVsc2UgaWYoYy5jb2w+MCl7Y29uc3QgTT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobC5jb2w+PWgmJmwuY29sPD1mP2YrMTpoLDEpO2Mu''@;'; put 'put ''Y29sPW51bGw9PT1NP3RoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UobC5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCkpOk1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UobC5jb2wsTSktMSwxKX19ZnVuY3Rpb24gRDR0''@;'; put 'put ''KGMsbCxhKXtjb25zdCBkPWMucm93LGg9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMoe3JvdzpkLGNvbDpjLmNvbH0pLGY9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMoe3JvdzpkLGNvbDpsLmNvbH0pO0dnKEZILHRoaXMsYS5jbG9uZSgpKSxsLmNvbDxj''@;'; put 'put ''LmNvbD8oaCYmKGMuY29sPWguY29sdW1uSW5kZXgraC5vcmlnQ29sc3Bhbi0xKSxmJiYobC5jb2w9Zi5jb2x1bW5JbmRleCkpOmwuY29sPj1jLmNvbCYmKGgmJihjLmNvbD1oLmNvbHVtbkluZGV4KSxmJiYobC5jb2w9Zi5jb2x1bW5JbmRleCtmLm9yaWdDb2xzcGFuLTEpKX1mdW5jdGlvbiBJ''@;'; put 'put ''NHQoYyl7aWYoX3MoRGwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKT4wKXtjLmxlbmd0aD0wO2ZvcihsZXQgbD0wO2w8X3MoRGwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKTtsKyspYy5wdXNoKHRoaXMuaGVhZGVyUmVuZGVyZXJGYWN0b3J5KGwpKX19ZnVuY3Rpb24gUjR0KGMpe2NvbnN0IGw9X3Mo''@;'; put 'put ''RGwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKTtsZXQgYT1jLnN0YXJ0Q29sdW1uLGQ9ISFsO2ZvcihsZXQgaD0wO2g8bDtoKyspe2NvbnN0IGY9X3MoRGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoaCxjLnN0YXJ0Q29sdW1uKSx2PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdl''@;'; put 'put ''dFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7aWYoZj49MCYmKGQ9ITEpLG0xKHYpJiZ2PGMuc3RhcnRDb2x1bW4pe2E9djticmVha319Yy5zdGFydENvbHVtbj1kP19zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YSgwLGEpLmNvbHVtbkluZGV4OmF9ZnVuY3Rpb24gTDR0KGMs''@;'; put 'put ''bCl7Y29uc3QgYT10aGlzLmdob3N0VGFibGUuZ2V0V2lkdGgobCk7cmV0dXJuIGM+YT9jOmF9ZnVuY3Rpb24gTzR0KGMsbCxhKXt2YXIgZDtjb25zdHtsYWJlbDpofT1udWxsIT09KGQ9X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGEsbCkpJiZ2b2lkIDAhPT1kP2Q6e2xhYmVs''@;'; put 'put ''OiIifTtyZXR1cm4gaH1mdW5jdGlvbiBQNHQoYyxsKXtpZihjPDApcmV0dXJuIHRoaXMuaG90LmdldENlbGwoYyxfcyhEbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChjLGwpLCEwKX1mdW5jdGlvbiBGNHQoKXt0aGlzLnVwZGF0ZVBsdWdpbigpfWZ1bmN0aW9uIEg0dChjLGwpe2x8''@;'; put 'put ''fHRoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gX0EoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE40dChjKXt2YXIgbD1mdW5jdGlvbiBWNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1h''@;'; put 'put ''KXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlciko''@;'; put 'put ''Yyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGo0dD1jbGFzcyBCNHR7''@;'; put 'put ''Y29uc3RydWN0b3IobCxhKXtfQSh0aGlzLCJob3QiLHZvaWQgMCksX0EodGhpcywiZGF0YSIsbnVsbCksX0EodGhpcywicGx1Z2luIix2b2lkIDApLF9BKHRoaXMsInBhcmVudFJlZmVyZW5jZSIsbmV3IFdlYWtNYXApLF9BKHRoaXMsImNhY2hlIix7bGV2ZWxzOltdLGxldmVsQ291bnQ6MCxy''@;'; put 'put ''b3dzOltdLG5vZGVJbmZvOm5ldyBXZWFrTWFwfSksdGhpcy5ob3Q9YSx0aGlzLnBsdWdpbj1sfXNldERhdGEobCl7dGhpcy5kYXRhPWx9Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRhdGF9Z2V0UmF3U291cmNlRGF0YSgpe2xldCBsPW51bGw7cmV0dXJuIHRoaXMucGx1Z2luLmRpc2FibGVDb3Jl''@;'; put 'put ''QVBJTW9kaWZpZXJzKCksbD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhKCksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLGx9dXBkYXRlV2l0aERhdGEobCl7dGhpcy5zZXREYXRhKGwpLHRoaXMucmV3cml0ZUNhY2hlKCl9cmV3cml0ZUNhY2hlKCl7dGhpcy5jYWNoZT17bGV2''@;'; put 'put ''ZWxzOltdLGxldmVsQ291bnQ6MCxyb3dzOltdLG5vZGVJbmZvOm5ldyBXZWFrTWFwfSxHYSgwLHRoaXMuZGF0YS5sZW5ndGgtMSxsPT57dGhpcy5jYWNoZU5vZGUodGhpcy5kYXRhW2xdLDAsbnVsbCl9KX1jYWNoZU5vZGUobCxhLGQpe3RoaXMuY2FjaGUubGV2ZWxzW2FdfHwodGhpcy5jYWNo''@;'; put 'put ''ZS5sZXZlbHNbYV09W10sdGhpcy5jYWNoZS5sZXZlbENvdW50Kz0xKSx0aGlzLmNhY2hlLmxldmVsc1thXS5wdXNoKGwpLHRoaXMuY2FjaGUucm93cy5wdXNoKGwpLHRoaXMuY2FjaGUubm9kZUluZm8uc2V0KGwse3BhcmVudDpkLHJvdzp0aGlzLmNhY2hlLnJvd3MubGVuZ3RoLTEsbGV2ZWw6''@;'; put 'put ''YX0pLHRoaXMuaGFzQ2hpbGRyZW4obCkmJlluKGwuX19jaGlsZHJlbixoPT57dGhpcy5jYWNoZU5vZGUoaCxhKzEsbCl9KX1nZXREYXRhT2JqZWN0KGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5yb3dzW2xdfXJlYWRUcmVlTm9kZXMobCxhLGQsaCl7bGV0IGY9ITEsdj1hO2lm''@;'; put 'put ''KGlzTmFOKHYpJiZ2LmVuZClyZXR1cm4gdjtsZXQgTT1sO3JldHVybiBNfHwoTT17X19jaGlsZHJlbjp0aGlzLmRhdGF9LGY9ITAsdi09MSksbnVsbCE9ZCYmdj09PWQ/e3Jlc3VsdDpNLGVuZDohMH06bnVsbCE9aCYmTT09PWg/e3Jlc3VsdDp2LGVuZDohMH06KHYrPTEsTS5fX2NoaWxkcmVu''@;'; put 'put ''JiZZbihNLl9fY2hpbGRyZW4sRD0+e2lmKHRoaXMucGFyZW50UmVmZXJlbmNlLnNldChELGY/bnVsbDpNKSx2PXRoaXMucmVhZFRyZWVOb2RlcyhELHYsZCxoKSxpc05hTih2KSYmdi5lbmQpcmV0dXJuITF9KSx2KX1tb2NrUGFyZW50KCl7Y29uc3QgbD10aGlzLm1vY2tOb2RlKCk7cmV0dXJu''@;'; put 'put ''IGwuX19jaGlsZHJlbj10aGlzLmRhdGEsbH1tb2NrTm9kZSgpe2NvbnN0IGw9e307cmV0dXJuIFhvKHRoaXMuZGF0YVswXSwoYSxkKT0+e2xbZF09bnVsbH0pLGx9Z2V0Um93SW5kZXgobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5yb3d9Z2V0Um93''@;'; put 'put ''SW5kZXhXaXRoaW5QYXJlbnQobCl7bGV0IGE9bnVsbDthPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpO2NvbnN0IGQ9dGhpcy5nZXRSb3dQYXJlbnQobCk7cmV0dXJuIG51bGw9PWQ/dGhpcy5kYXRhLmluZGV4T2YoYSk6ZC5fX2NoaWxkcmVuLmluZGV4T2YoYSl9Y291bnRBbGxS''@;'; put 'put ''b3dzKCl7cmV0dXJuIHRoaXMuY291bnRDaGlsZHJlbih7X19jaGlsZHJlbjp0aGlzLmRhdGF9KX1jb3VudENoaWxkcmVuKGwpe2xldCBhPTAsZD1sO3JldHVybiBpc05hTihkKXx8KGQ9dGhpcy5nZXREYXRhT2JqZWN0KGQpKSxkJiZkLl9fY2hpbGRyZW4/KFluKGQuX19jaGlsZHJlbixoPT57''@;'; put 'put ''YSs9MSxoLl9fY2hpbGRyZW4mJihhKz10aGlzLmNvdW50Q2hpbGRyZW4oaCkpfSksYSk6MH1nZXRSb3dQYXJlbnQobCl7bGV0IGE7cmV0dXJuIGE9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCksdGhpcy5nZXRSb3dPYmplY3RQYXJlbnQoYSl9Z2V0Um93T2JqZWN0UGFyZW50KGwp''@;'; put 'put ''e3JldHVybiBsJiYib2JqZWN0Ij09dHlwZW9mIGw/dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkucGFyZW50Om51bGx9Z2V0Um93TGV2ZWwobCl7bGV0IGE9bnVsbDtyZXR1cm4gYT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSxhP3RoaXMuZ2V0Um93T2JqZWN0TGV2ZWwoYSk6''@;'; put 'put ''bnVsbH1nZXRSb3dPYmplY3RMZXZlbChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLmxldmVsfWhhc0NoaWxkcmVuKGwpe2xldCBhPWw7cmV0dXJuIGlzTmFOKGEpfHwoYT10aGlzLmdldERhdGFPYmplY3QoYSkpLCEoIWEuX19jaGlsZHJlbnx8IWEu''@;'; put 'put ''X19jaGlsZHJlbi5sZW5ndGgpfWlzQ2hpbGQobCl7cmV0dXJuIG51bGwhPT10aGlzLmdldFJvd1BhcmVudChsKX1nZXRDaGlsZChsLGEpe3ZhciBkO3JldHVybihudWxsPT09KGQ9bC5fX2NoaWxkcmVuKXx8dm9pZCAwPT09ZD92b2lkIDA6ZFthXSl8fG51bGx9aXNSb3dIaWdoZXN0TGV2ZWwo''@;'; put 'put ''bCl7cmV0dXJuIXRoaXMuaXNDaGlsZChsKX1pc1BhcmVudChsKXt2YXIgYTtsZXQgZD1sO3JldHVybiBpc05hTihkKXx8KGQ9dGhpcy5nZXREYXRhT2JqZWN0KGQpKSxkJiYhIWQuX19jaGlsZHJlbiYmMCE9PShudWxsPT09KGE9ZC5fX2NoaWxkcmVuKXx8dm9pZCAwPT09YT92b2lkIDA6YS5s''@;'; put 'put ''ZW5ndGgpfWFkZENoaWxkKGwsYSl7bGV0IGQ9YTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsZCk7bGV0IGg9bnVsbDtsJiYoaD10aGlzLmdldFJvd0luZGV4KGwpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixoK3RoaXMuY291bnRDaGlsZHJlbihs''@;'; put 'put ''KSsxLDEpO2xldCBmPWw7bHx8KGY9dGhpcy5tb2NrUGFyZW50KCkpLGYuX19jaGlsZHJlbnx8KGYuX19jaGlsZHJlbj1bXSksZHx8KGQ9dGhpcy5tb2NrTm9kZSgpKSxmLl9fY2hpbGRyZW4ucHVzaChkKSx0aGlzLnJld3JpdGVDYWNoZSgpO2NvbnN0IHY9dGhpcy5nZXRSb3dJbmRleChkKTt0''@;'; put 'put ''aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKHYsMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93Iix2LDEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixsLGQpfWFkZENoaWxkQXRJbmRleChsLGEsZCl7bGV0IGYsaD1kO2lmKGh8fChoPXRo''@;'; put 'put ''aXMubW9ja05vZGUoKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUFkZENoaWxkIixsLGgsYSksbCl7Y29uc3QgTT10aGlzLmdldFJvd0luZGV4KGwpK2ErMTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixNLDEpLGwuX19jaGlsZHJlbi5zcGxpY2UoYSxudWxsLGgpLHRo''@;'; put 'put ''aXMucmV3cml0ZUNhY2hlKCksdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksIl9fY2hpbGRyZW4iLGwuX19jaGlsZHJlbiwiTmVzdGVkUm93cy5hZGRDaGlsZEF0''@;'; put 'put ''SW5kZXgiKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKE0sMSksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsTSwxKSxmPU19ZWxzZSB0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1v''@;'; put 'put ''ZGlmaWVycygpLHRoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixhLDEsIk5lc3RlZFJvd3MuYWRkQ2hpbGRBdEluZGV4IiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLGY9dGhpcy5nZXRSb3dJbmRleCh0aGlzLmRhdGFbYV0pO2g9dGhpcy5nZXREYXRhT2Jq''@;'; put 'put ''ZWN0KGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixsLGgsYSl9YWRkU2libGluZyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImJlbG93Ijtjb25zdCBkPXRoaXMudHJhbnNsYXRlVHJpbW1lZFJvdyhs''@;'; put 'put ''KSxoPXRoaXMuZ2V0Um93UGFyZW50KGQpLGY9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChkKTtzd2l0Y2goYSl7Y2FzZSJiZWxvdyI6dGhpcy5hZGRDaGlsZEF0SW5kZXgoaCxmKzEsbnVsbCk7YnJlYWs7Y2FzZSJhYm92ZSI6dGhpcy5hZGRDaGlsZEF0SW5kZXgoaCxmLG51bGwpfX1k''@;'; put 'put ''ZXRhY2hGcm9tUGFyZW50KGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1udWxsO2NvbnN0IGg9W107QXJyYXkuaXNBcnJheShsKT8oR2EobFswXSxsWzJdLGJlPT57Y29uc3QgRWU9dGhpcy50cmFuc2xhdGVUcmlt''@;'; put 'put ''bWVkUm93KGJlKTtoLnB1c2godGhpcy5nZXREYXRhT2JqZWN0KEVlKSl9KSxHYSgwLGgubGVuZ3RoLTIsYmU9Pnt0aGlzLmRldGFjaEZyb21QYXJlbnQoaFtiZV0sITEpfSksZD1oW2gubGVuZ3RoLTFdKTpkPWw7Y29uc3QgZj10aGlzLmdldFJvd0luZGV4KGQpLHY9dGhpcy5jb3VudENoaWxk''@;'; put 'put ''cmVuKGQpLE09dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChkKSxEPXRoaXMuZ2V0Um93UGFyZW50KGQpLFo9dGhpcy5nZXRSb3dQYXJlbnQoRCkscmU9dGhpcy5nZXRSb3dJbmRleChaKTtsZXQgY2U9bnVsbDtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGV0YWNoQ2hpbGQiLEQs''@;'; put 'put ''ZCksbnVsbCE9TSl7Y29uc3QgYmU9QXJyYXkuZnJvbShuZXcgQXJyYXkoZit2KzEpLmtleXMoKSkuc3BsaWNlKC0xKih2KzEpKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlUm93IixmLHYrMSxiZSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxELl9fY2hpbGRyZW4uc3BsaWNl''@;'; put 'put ''KE0sMSksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVSb3ciLGYsdisxLGJlLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLFope2NlPXJlK3RoaXMuY291bnRDaGlsZHJlbihaKTtjb25zdCBFZT10aGlzLmdldENoaWxkKFosdGhpcy5jb3VudENoaWxk''@;'; put 'put ''cmVuKFopLTEpLEJlPXRoaXMuZ2V0Um93SW5kZXgoRWUpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLEJlKzEsdisxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLFouX19jaGlsZHJlbi5wdXNoKGQpfWVsc2UgY2U9dGhpcy5ob3QuY291bnRSb3dzKCkrMSx0aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixjZS0yLHYrMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmRhdGEucHVzaChkKX10aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsY2UtMix2KzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSks''@;'; put 'put ''dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGV0YWNoQ2hpbGQiLEQsZCx0aGlzLmdldFJvd0luZGV4KGQpKSxhJiZ0aGlzLmhvdC5yZW5kZXIoKX1maWx0ZXJEYXRhKGwsYSxkKXtjb25zdCBoPVtdO1luKGQsZj0+e2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoZikpfSksWW4oaCxmPT57Y29u''@;'; put 'put ''c3Qgdj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGYpLE09dGhpcy5nZXRSb3dQYXJlbnQoZik7bnVsbD09PU0/dGhpcy5kYXRhLnNwbGljZSh2LDEpOk0uX19jaGlsZHJlbi5zcGxpY2UodiwxKX0pLHRoaXMucmV3cml0ZUNhY2hlKCl9c3BsaWNlRGF0YShsLGEsZCl7Y29uc3QgaD10''@;'; put 'put ''aGlzLmdldERhdGFPYmplY3QobC0xKTtsZXQgZj1udWxsLHY9bDtoJiZoLl9fY2hpbGRyZW4mJjA9PT1oLl9fY2hpbGRyZW4ubGVuZ3RoPyhmPWgsdj0wKTpsPHRoaXMuY291bnRBbGxSb3dzKCkmJihmPXRoaXMuZ2V0Um93UGFyZW50KGwpLHY9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVu''@;'; put 'put ''dChsKSksZj9kP2YuX19jaGlsZHJlbi5zcGxpY2UodixhLC4uLmQpOmYuX19jaGlsZHJlbi5zcGxpY2UodixhKTpkP3RoaXMuZGF0YS5zcGxpY2UodixhLC4uLmQpOnRoaXMuZGF0YS5zcGxpY2UodixhKSx0aGlzLnJld3JpdGVDYWNoZSgpfXN5bmNSb3dXaXRoUmF3U291cmNlKGwpe2xldCBh''@;'; put 'put ''PWwsZD1hO2Rve2Q9dGhpcy5nZXRSb3dQYXJlbnQoZCksbnVsbCE9PWQmJihhPWQpfXdoaWxlKG51bGwhPT1kKTt0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChhKSwi''@;'; put 'put ''X19jaGlsZHJlbiIsYS5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLnN5bmNSb3dXaXRoUmF3U291cmNlIiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpfW1vdmVSb3cobCxhLGQsaCl7Y29uc3QgZj1hPT09dGhpcy5ob3QuY291bnRSb3dzKCksdj10aGlzLmdldFJvd1BhcmVu''@;'; put 'put ''dChsKSxNPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksRD12Ll9fY2hpbGRyZW4uc2xpY2UoTSxNKzEpLFo9bD5hO2xldCByZT10aGlzLmdldFJvd1BhcmVudChmP2EtMTphKTtudWxsPT1yZSYmKHJlPXRoaXMuZ2V0Um93UGFyZW50KGEtMSkpLG51bGw9PXJlJiYocmU9dGhpcy5n''@;'; put 'put ''ZXREYXRhT2JqZWN0KGEtMSkpLHJlP3JlLl9fY2hpbGRyZW58fChyZS5fX2NoaWxkcmVuPVtdKToocmU9dGhpcy5nZXREYXRhT2JqZWN0KGEpLHJlLl9fY2hpbGRyZW49W10pO2NvbnN0IGNlPWZ8fGR8fGg/cmUuX19jaGlsZHJlbi5sZW5ndGg6dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVu''@;'; put 'put ''dChhKSxiZT12PT09cmU7cmUuX19jaGlsZHJlbi5zcGxpY2UoY2UsMCxEWzBdKSx2Ll9fY2hpbGRyZW4uc3BsaWNlKE0rKFomJmJlPzE6MCksMSksdGhpcy5zeW5jUm93V2l0aFJhd1NvdXJjZSh2KSxiZXx8dGhpcy5zeW5jUm93V2l0aFJhd1NvdXJjZShyZSl9dHJhbnNsYXRlVHJpbW1lZFJv''@;'; put 'put ''dyhsKXtyZXR1cm4gdGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJP3RoaXMucGx1Z2luLmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9dW50cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2lu''@;'; put 'put ''Z1VJLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhsKTpsfX07ZnVuY3Rpb24gJG1lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB6NHQoYyl7dmFyIGw9ZnVuY3Rpb24gVTR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07''@;'; put 'put ''aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0''@;'; put 'put ''cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBs''@;'; put 'put ''ZWU9Y2xhc3MgWjR0e2NvbnN0cnVjdG9yKGwsYSl7JG1lKHRoaXMsImhvdCIsdm9pZCAwKSwkbWUodGhpcywicGx1Z2luIix2b2lkIDApLHRoaXMuaG90PWEsdGhpcy5wbHVnaW49bH19O2NsYXNzICRnIGV4dGVuZHMgbGVle3N0YXRpYyBnZXQgQ1NTX0NMQVNTRVMoKXtyZXR1cm57aW5kaWNh''@;'; put 'put ''dG9yQ29udGFpbmVyOiJodF9uZXN0aW5nTGV2ZWxzIixwYXJlbnQ6Imh0X25lc3RpbmdQYXJlbnQiLGluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsIixlbXB0eUluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsX2VtcHR5IixidXR0b246Imh0X25lc3RpbmdCdXR0b24iLGV4cGFuZEJ1dHRvbjoi''@;'; put 'put ''aHRfbmVzdGluZ0V4cGFuZCIsY29sbGFwc2VCdXR0b246Imh0X25lc3RpbmdDb2xsYXBzZSJ9fWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2luZ1VJPXRoaXMucGx1Z2luLmNvbGxhcHNpbmdV''@;'; put 'put ''SSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9bnVsbH1hcHBlbmRMZXZlbEluZGljYXRvcnMobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0xldmVsKGQpLGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpLHY9''@;'; put 'put ''YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiRElWIilbMF0sTT12LnF1ZXJ5U2VsZWN0b3IoInNwYW4ucm93SGVhZGVyIiksRD12LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzc149Imh0X25lc3RpbmciXScpLFo9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztpZihZbihELHJlPT57cmUm''@;'; put 'put ''JnYucmVtb3ZlQ2hpbGQocmUpfSksVGkoYSwkZy5DU1NfQ0xBU1NFUy5pbmRpY2F0b3JDb250YWluZXIpLGgpe2NvbnN0e3Jvb3REb2N1bWVudDpyZX09dGhpcy5ob3QsY2U9TS5jbG9uZU5vZGUoITApO3YuaW5uZXJIVE1MPSIiLEdhKDAsaC0xLCgpPT57Y29uc3QgYmU9cmUuY3JlYXRlRWxl''@;'; put 'put ''bWVudCgiU1BBTiIpO1RpKGJlLCRnLkNTU19DTEFTU0VTLmVtcHR5SW5kaWNhdG9yKSx2LmFwcGVuZENoaWxkKGJlKX0pLHYuYXBwZW5kQ2hpbGQoY2UpfWlmKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikpe2NvbnN0IHJlPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVt''@;'; put 'put ''ZW50KCJESVYiKTtaJiZ2byhyZSxbVjcoKV0pLFRpKGEsJGcuQ1NTX0NMQVNTRVMucGFyZW50KSx0aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZChkKT8oVGkocmUsYCR7JGcuQ1NTX0NMQVNTRVMuYnV0dG9ufSAkeyRnLkNTU19DTEFTU0VTLmV4cGFuZEJ1dHRvbn1gKSxa''@;'; put 'put ''JiZ2byhhLFtOMighMSldKSk6KFRpKHJlLGAkeyRnLkNTU19DTEFTU0VTLmJ1dHRvbn0gJHskZy5DU1NfQ0xBU1NFUy5jb2xsYXBzZUJ1dHRvbn1gKSxaJiZ2byhhLFtOMighMCldKSksdi5hcHBlbmRDaGlsZChyZSl9fXVwZGF0ZVJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWw7YXx8KGE9dGhp''@;'; put 'put ''cy5kYXRhTWFuYWdlci5jYWNoZS5sZXZlbENvdW50KTtjb25zdCBkPXRoaXMuaG90LnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpO2xldCBoPTExO2QuaXNDbGFzc2ljVGhlbWUoKXx8KGg9MipkLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtaG9yaXpvbnRhbC1wYWRkaW5nIikpLHRoaXMucm93''@;'; put 'put ''SGVhZGVyV2lkdGhDYWNoZT1NYXRoLm1heCg1MCxoKzEwKmErMjUpLHRoaXMuaG90LnJlbmRlcigpfX1jb25zdCBLbWU9JGcsWTR0PWNsYXNzIFc0dCBleHRlbmRzIGxlZXtjb25zdHJ1Y3RvcihsLGEpe3ZhciBkO3N1cGVyKGwsYSksZD10aGlzLHRoaXMuZGF0YU1hbmFnZXI9dGhpcy5wbHVn''@;'; put 'put ''aW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzZWRSb3dzPVtdLHRoaXMuY29sbGFwc2VkUm93c1N0YXNoPXtzdGFzaDpmdW5jdGlvbigpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07ZC5sYXN0Q29sbGFwc2VkUm93cz1kLmNv''@;'; put 'put ''bGxhcHNlZFJvd3Muc2xpY2UoMCksZC5leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGQubGFzdENvbGxhcHNlZFJvd3MsaCl9LHNoaWZ0U3Rhc2g6ZnVuY3Rpb24oaCxmKXtsZXQgdj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtudWxsPT1m''@;'; put 'put ''JiYoZj0xLzApLFluKGQubGFzdENvbGxhcHNlZFJvd3MsKE0sRCk9PntNPj1oJiZNPGYmJihkLmxhc3RDb2xsYXBzZWRSb3dzW0RdPU0rdil9KX0sYXBwbHlTdGFzaDpmdW5jdGlvbigpe2QuY29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGQubGFzdENvbGxhcHNlZFJvd3MsIShhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSksZC5sYXN0Q29sbGFwc2VkUm93cz12b2lkIDB9LHRyaW1TdGFzaDooaCxmKT0+e0dhKGgsaCtmLTEsdj0+e2NvbnN0IE09dGhpcy5sYXN0Q29sbGFwc2VkUm93cy5pbmRleE9mKHYpO00+LTEmJnRoaXMubGFz''@;'; put 'put ''dENvbGxhcHNlZFJvd3Muc3BsaWNlKE0sMSl9KX19fWNvbGxhcHNlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxh''@;'; put 'put ''cmd1bWVudHNbMl07Y29uc3QgaD1bXTtsZXQgZj1udWxsLHY9bnVsbCxNPW51bGw7cmV0dXJuIGlzTmFOKGwpPyhmPWwsdj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGYpKTooZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksdj1sKSx0aGlzLmRhdGFNYW5hZ2VyLmhh''@;'; put 'put ''c0NoaWxkcmVuKGYpJiZZbihmLl9fY2hpbGRyZW4sRD0+e2gucHVzaCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KEQpKX0pLE09dGhpcy5jb2xsYXBzZVJvd3MoaCwhMCwhMSksZCYmdGhpcy50cmltUm93cyhNKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpLC0xPT09dGhpcy5jb2xs''@;'; put 'put ''YXBzZWRSb3dzLmluZGV4T2YodikmJnRoaXMuY29sbGFwc2VkUm93cy5wdXNoKHYpLE19Y29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107WW4obCxmPT57aC5wdXNoKC4uLnRoaXMuY29sbGFwc2VDaGlsZHJlbihmLCExLCExKSl9KSxkJiZ0aGlzLnRyaW1Sb3dzKGgpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCl9Y29sbGFwc2VSb3cobCl7''@;'; put 'put ''dGhpcy5jb2xsYXBzZVJvd3MoW2xdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pfWNvbGxhcHNlUm93cyhsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPVtdO3JldHVybiBZbihsLGY9PntoLnB1c2goZiksYSYmdGhpcy5jb2xsYXBzZUNoaWxkUm93cyhmLGgpfSksZCYmdGhpcy50cmltUm93cyhoKSxofWNvbGxhcHNlQ2hpbGRSb3dz''@;'; put 'put ''KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihsKSYmWW4odGhp''@;'; put 'put ''cy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLl9fY2hpbGRyZW4sdj0+e2NvbnN0IE09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleCh2KTthLnB1c2goTSksdGhpcy5jb2xsYXBzZUNoaWxkUm93cyhNLGEpfSksaCYmdGhpcy50cmltUm93cyhhKX1leHBhbmRSb3cobCl7dGhpcy5l''@;'; put 'put ''eHBhbmRSb3dzKFtsXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX1leHBhbmRSb3dzKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9W107cmV0dXJuIFluKGwsZj0+e2gucHVzaChmKSxhJiZ0aGlzLmV4cGFuZENoaWxkUm93cyhmLGgpfSksZCYmdGhpcy51bnRyaW1Sb3dzKGgpLGh9ZXhwYW5kQ2hpbGRSb3dzKGwpe2xldCBhPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihsKSYmWW4odGhpcy5kYXRhTWFuYWdl''@;'; put 'put ''ci5nZXREYXRhT2JqZWN0KGwpLl9fY2hpbGRyZW4sdj0+e2lmKCF0aGlzLmlzQW55UGFyZW50Q29sbGFwc2VkKHYpKXtjb25zdCBNPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgodik7YS5wdXNoKE0pLHRoaXMuZXhwYW5kQ2hpbGRSb3dzKE0sYSl9fSksaCYmdGhpcy51bnRyaW1Sb3dz''@;'; put 'put ''KGEpfWV4cGFuZENoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107bGV0IGY9''@;'; put 'put ''bnVsbCx2PW51bGwsTT1udWxsO3JldHVybiBpc05hTihsKT8oZj1sLHY9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChsKSk6KGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLHY9bCksdGhpcy5jb2xsYXBzZWRSb3dzLnNwbGljZSh0aGlzLmNvbGxhcHNlZFJvd3MuaW5k''@;'; put 'put ''ZXhPZih2KSwxKSx0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGYpJiZZbihmLl9fY2hpbGRyZW4sRD0+e2NvbnN0IFo9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChEKTtoLnB1c2goWil9KSxNPXRoaXMuZXhwYW5kUm93cyhoLCEwLCExKSxkJiZ0aGlzLnVudHJpbVJvd3MoTSks''@;'; put 'put ''YSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSxNfWV4cGFuZE11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0p''@;'; put 'put ''fHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtZbihsLGY9PntoLnB1c2goLi4udGhpcy5leHBhbmRDaGlsZHJlbihmLCExLCExKSl9KSxkJiZ0aGlzLnVudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZUFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5n''@;'; put 'put ''ZXREYXRhKCksYT1bXTtZbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGQpJiZhLnB1c2goZCl9KSx0aGlzLmNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihhKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfWV4cGFuZEFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXRE''@;'; put 'put ''YXRhKCksYT1bXTtZbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGQpJiZhLnB1c2goZCl9KSx0aGlzLmV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oYSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX10cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKGws''@;'; put 'put ''YT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKX11bnRyaW1Sb3dzKGwpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCxhPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMSl9''@;'; put 'put ''KX0sITApfWFyZUNoaWxkcmVuQ29sbGFwc2VkKGwpe2xldCBhPWlzTmFOKGwpP2w6dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLGQ9ITA7cmV0dXJuIG51bGw9PT1hJiYoYT17X19jaGlsZHJlbjp0aGlzLmRhdGFNYW5hZ2VyLmRhdGF9KSx0aGlzLmRhdGFNYW5hZ2VyLmhhc0No''@;'; put 'put ''aWxkcmVuKGEpJiZZbihhLl9fY2hpbGRyZW4saD0+e2NvbnN0IGY9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChoKTtpZighdGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5nZXRWYWx1ZUF0SW5kZXgoZikpcmV0dXJuIGQ9ITEsITF9KSxkfWlzQW55UGFyZW50Q29sbGFwc2VkKGwp''@;'; put 'put ''e2xldCBhPWw7Zm9yKDtudWxsIT09YTspe2E9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoYSk7Y29uc3QgZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGEpO2lmKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKGQpPi0xKXJldHVybiEwfXJldHVybiExfXRvZ2dsZVN0YXRl''@;'; put 'put ''KGwsYSl7aWYoYS5jb2w+PTApcmV0dXJuO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGEucm93KTtwbyhsLnRhcmdldCxLbWUuQ1NTX0NMQVNTRVMuYnV0dG9uKSYmKHRoaXMuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoZCk/dGhpcy5leHBhbmRDaGlsZHJlbihkKTp0aGlzLmNvbGxh''@;'; put 'put ''cHNlQ2hpbGRyZW4oZCksQjIobCkpfXRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCl9dW50cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLmhvdC50b1Zpc3VhbFJvdyhsKX1yZW5kZXJBbmRBZGp1c3QoKXt0aGlzLmhvdC5yZW5k''@;'; put 'put ''ZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfX07dmFyIHFtZT1uZXcgV2Vha01hcDtjb25zdCB0Z3Q9Y2xhc3MgZWd0IGV4dGVuZHMgbGVle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBLNHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9u''@;'; put 'put ''IHE0dChjKXt2YXIgbD1mdW5jdGlvbiBYNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1''@;'; put 'put ''cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJkYXRhTWFuYWdlciIsdGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIpLGZ1bmN0aW9uIEc0dChjLGwsYSl7KGZ1bmN0aW9uICQ0''@;'; put 'put ''dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMscW1lLHtyb3dfYWJvdmU6KGwsYSk9Pnt0aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLmFkZFNpYmxpbmcoYVthLmxlbmd0aC0xXS5zdGFydC5yb3csImFib3ZlIil9LHJvd19iZWxvdzoobCxhKT0+e3RoaXMuZGF0YU1hbmFnZXIuYWRkU2libGluZyhhW2EubGVuZ3RoLTFdLnN0YXJ0LnJvdywiYmVsb3ciKX19KX1hcHBlbmRPcHRpb25zKGwpe2NvbnN0IGE9W3trZXk6ImFk''@;'; put 'put ''ZF9jaGlsZCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRHEpfSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpWzBdKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0''@;'; put 'put ''RGF0YU9iamVjdChkKTt0aGlzLmRhdGFNYW5hZ2VyLmFkZENoaWxkKGgpfSxkaXNhYmxlZDooKT0+e2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7cmV0dXJuIWR8fGRbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhv''@;'; put 'put ''dC5jb3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se2tleToiZGV0YWNoX2Zyb21fcGFyZW50IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShJcSl9LGNhbGxiYWNrOigpPT57dGhpcy5kYXRhTWFuYWdlci5kZXRhY2hGcm9tUGFyZW50''@;'; put 'put ''KHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpKX0sZGlzYWJsZWQ6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGg9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGRbMF0pO3JldHVybiF0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChoKXx8''@;'; put 'put ''IWR8fGRbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se25hbWU6Ii0tLS0tLS0tLSJ9XTtyZXR1cm4gR2EoMCxsLml0ZW1zLmxlbmd0aC0xLGQ9''@;'; put 'put ''PntpZigwPT09ZClyZXR1cm4gWW4oYSwoaCxmKT0+e2wuaXRlbXMuc3BsaWNlKGQrZiwwLGgpfSksITF9KSx0aGlzLm1vZGlmeVJvd0luc2VydGluZ09wdGlvbnMobCl9bW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKXtyZXR1cm4gR2EoMCxsLml0ZW1zLmxlbmd0aC0xLGE9Pntjb25zdCBk''@;'; put 'put ''PWZ1bmN0aW9uIEo0dChjLGwpe3JldHVybiBjLmdldChmdW5jdGlvbiBRNHQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3Qg''@;'; put 'put ''cHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShjLGwpKX0ocW1lLHRoaXMpW2wuaXRlbXNbYV0ua2V5XTtudWxsIT1kJiYobC5pdGVtc1thXS5jYWxsYmFjaz1kKX0pLGx9fTtmdW5jdGlvbiBOSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbmd0KGMpe3ZhciBsPWZ1bmN0aW9uIHJndChjLGwp''@;'; put 'put ''e2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q''@;'; put 'put ''cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1''@;'; put 'put ''ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgaWd0e2NvbnN0cnVjdG9yKGwpe05IKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxOSCh0aGlzLCJob3QiLHZvaWQgMCksTkgodGhpcywiZGF0YU1hbmFnZXIiLHZvaWQgMCksTkgodGhp''@;'; put 'put ''cywiY29sbGFwc2luZ1VJIix2b2lkIDApLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5ob3QsdGhpcy5kYXRhTWFuYWdlcj1sLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2luZ1VJPWwuY29sbGFwc2luZ1VJfW9uQmVmb3JlUm93TW92ZShsLGEsZCxoKXtpZih0aGlzLmRpc3BsYXlBUElDb21w''@;'; put 'put ''YXRpYmlsaXR5V2FybmluZyh7cm93czpsLGZpbmFsSW5kZXg6YSxkcm9wSW5kZXg6ZCxtb3ZlUG9zc2libGU6aH0pKXJldHVybiExO3RoaXMubW92ZWRUb0NvbGxhcHNlZD0hMTtjb25zdCB2PWQ9PT10aGlzLmhvdC5jb3VudFJvd3MoKSxNPXY/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk6''@;'; put 'put ''dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGQpO2xldCBEPSEwO2NvbnN0IFo9bC5tYXAoQmU9PntpZighRClyZXR1cm4hMTtjb25zdCBxZT10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coQmUpO3JldHVybiBEPXRoaXMuc2hvdWxkQWxsb3dNb3Zpbmco''@;'; put 'put ''cWUsTSkscWV9KSxyZT0tMT09PVouaW5kZXhPZihNKTtpZighRHx8IXJlKXJldHVybiExO2NvbnN0IGNlPXRoaXMuZ2V0QmFzZVBhcmVudChaKSxiZT10aGlzLmdldFRhcmdldFBhcmVudCh2LE0pLEVlPWNlPT09YmU7cmV0dXJuIHRoaXMubW92ZWRUb0NvbGxhcHNlZD10aGlzLmNvbGxhcHNp''@;'; put 'put ''bmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZChiZSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCksdGhpcy5zaGlmdENvbGxhcHNpYmxlUGFyZW50c0xvY2F0aW9ucyhaLE0sRWUpLHRoaXMubW92ZVJvd3MoWixNLGJlKSx0aGlzLmRhdGFNYW5hZ2VyLnJld3Jp''@;'; put 'put ''dGVDYWNoZSgpLHRoaXMubW92ZUNlbGxzTWV0YShaLE0pLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCExKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixsLGEsZCxoLGgmJnRoaXMuaXNSb3dPcmRlckNoYW5nZWQobCxhKSksdGhpcy5o''@;'; put 'put ''b3QucmVuZGVyKCksdGhpcy5zZWxlY3RDZWxscyhsLGQpLCExfWRpc3BsYXlBUElDb21wYXRpYmlsaXR5V2FybmluZyhsKXtjb25zdHtyb3dzOmEsZmluYWxJbmRleDpkLGRyb3BJbmRleDpoLG1vdmVQb3NzaWJsZTpmfT1sO2xldCB2PSExO3JldHVybiBfYyhoKSYmKGlsKGdsYFNpbmNlIHZl''@;'; put 'put ''cnNpb24gOC4wLjAgb2YgdGhlIEhhbmRzb250YWJsZSB0aGUgJ21vdmVSb3dzJyBtZXRob2QgaXNuJ3QgdXNlZCBmb3IgbW92aW5nIHJvd3NceDIwCiAgICAgIHdoZW4gdGhlIE5lc3RlZFJvd3MgcGx1Z2luIGlzIGVuYWJsZWQuIFBsZWFzZSB1c2UgdGhlICdkcmFnUm93cycgbWV0aG9kIGlu''@;'; put 'put ''c3RlYWQuYCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsYSxkLGgsZiwhMSksdj0hMCksdn1zaG91bGRBbGxvd01vdmluZyhsLGEpe3JldHVybiEodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChsKXx8dGhpcy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChsKXx8bD09''@;'; put 'put ''PWF8fDA9PT1hKX1nZXRCYXNlUGFyZW50KGwpe3JldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChsWzBdKX1nZXRUYXJnZXRQYXJlbnQobCxhKXtsZXQgZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChsP2EtMTphKTtyZXR1cm4gbnVsbD09ZCYmKGQ9dGhpcy5kYXRh''@;'; put 'put ''TWFuYWdlci5nZXRSb3dQYXJlbnQoYS0xKSksZH1zaGlmdENvbGxhcHNpYmxlUGFyZW50c0xvY2F0aW9ucyhsLGEsZCl7ZHx8KE1hdGgubWF4KC4uLmwpPD1hP3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGxbMF0sYSwtMSpsLmxlbmd0aCk6dGhpcy5j''@;'; put 'put ''b2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYSxsWzBdLGwubGVuZ3RoKSl9bW92ZVJvd3MobCxhLGQpe2NvbnN0IGg9YT09PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZCkrdGhpcy5kYXRhTWFuYWdlci5jb3VudENoaWxkcmVuKGQpKzE7dGhpcy5ob3Qu''@;'; put 'put ''YmF0Y2hSZW5kZXIoKCk9PntsLmZvckVhY2goZj0+e3RoaXMuZGF0YU1hbmFnZXIubW92ZVJvdyhmLGEsdGhpcy5tb3ZlZFRvQ29sbGFwc2VkLGgpfSl9KX1tb3ZlQ2VsbHNNZXRhKGwsYSl7Y29uc3QgZD1bXSxoPU1hdGgubWF4KC4uLmwpPGE7bC5mb3JFYWNoKGY9PntkLnB1c2godGhpcy5o''@;'; put 'put ''b3QuZ2V0Q2VsbE1ldGFBdFJvdyhmKSl9KSx0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEobFswXSxsLmxlbmd0aCksdGhpcy5ob3Quc3BsaWNlQ2VsbHNNZXRhKGEtKGg/ZC5sZW5ndGg6MCksMCwuLi5kKX1zZWxlY3RDZWxscyhsLGEpe2NvbnN0IGQ9bC5sZW5ndGg7bGV0IGg9MCxmPTA7aWYo''@;'; put 'put ''dGhpcy5tb3ZlZFRvQ29sbGFwc2VkKXtsZXQgdj1udWxsO3Y9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGxbZC0xXTxhP2EtZDphKTtjb25zdCBNPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KG51bGw9PT12P3RoaXMuaG90LmNvdW50U291cmNlUm93cygpLTE6''@;'; put 'put ''di0xKSxEPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoTSk7aD10aGlzLmRhdGFNYW5hZ2VyLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhEKSxmPWh9ZWxzZSBsW2QtMV08YT8oZj1hLTEsaD1mLWQrMSk6KGg9YSxmPWgrZC0xKTt0aGlzLmhvdC5zZWxlY3RDZWxscyhbW2gsMCxmLHRoaXMu''@;'; put 'put ''aG90LmNvdW50Q29scygpLTFdXSwhMSl9aXNSb3dPcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX19ZnVuY3Rpb24gWG1lKGMsbCxhKXtKbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEptZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gY2VlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBvZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gc2d0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYyly''@;'; put 'put ''ZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1p''@;'; put 'put ''dGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFi''@;'; put 'put ''bGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBWSChjLGwpe3JldHVybiBjLmdldChtMChjLGwpKX1mdW5jdGlvbiBCSChjLGwsYSl7cmV0dXJuIGMuc2V0KG0wKGMsbCksYSksYX1mdW5jdGlvbiBtMChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5o''@;'; put 'put ''YXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3Qgakg9Im5lc3RlZFJvd3MiLFFtZT1qSDt2YXIgekg9bmV3IFdlYWtNYXAsdnc9bmV3IFdlYWtN''@;'; put 'put ''YXAsVDA9bmV3IFdlYWtTZXQ7Y2xhc3MgdWd0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGFndChjLGwpe0ptZShjLGwpLGwuYWRkKGMpfSh0aGlzLFQwKSxjZWUodGhpcywiZGF0YU1hbmFnZXIiLG51bGwpLGNlZSh0aGlzLCJoZWFkZXJz''@;'; put 'put ''VUkiLG51bGwpLGNlZSh0aGlzLCJjb2xsYXBzZWRSb3dzTWFwIixudWxsKSxYbWUodGhpcyx6SCwhMSksWG1lKHRoaXMsdncsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBqSH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMDB9aXNFbmFibGVkKCl7cmV0''@;'; put 'put ''dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2pIXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuY29sbGFwc2VkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgibmVzdGVkUm93cyIsbmV3IHFFKSx0aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyPW5ldyBqNHQodGhpcyx0aGlzLmhvdCksdGhpcy5jb2xsYXBzaW5nVUk9bmV3IFk0dCh0aGlzLHRoaXMuaG90KSx0aGlzLmhlYWRlcnNVST1uZXcgS21lKHRoaXMsdGhpcy5ob3QpLHRoaXMuY29udGV4dE1lbnVVST1uZXcgdGd0KHRoaXMsdGhpcy5ob3QpLHRoaXMucm93TW92ZUNvbnRy''@;'; put 'put ''b2xsZXI9bmV3IGlndCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxNZ3QpLmNhbGwobCwuLi5kKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCx4Z3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9k''@;'; put 'put ''aWZ5Um93RGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVJvd0RhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5U291cmNlTGVuZ3RoIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5U291cmNlTGVuZ3RoKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImJlZm9yZURhdGFTcGxpY2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVEYXRhU3BsaWNlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImZpbHRlckRhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTto''@;'; put 'put ''KyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsZmd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2gr''@;'; put 'put ''KylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxwZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVu''@;'; put 'put ''dHNbaF07cmV0dXJuIG0wKFQwLGwsZ2d0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1''@;'; put 'put ''cm4gbTAoVDAsbCxoZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLGJndCku''@;'; put 'put ''Y2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCx2Z3QpLmNhbGwobCwuLi5kKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYmVmb3JlQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwseWd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVy''@;'; put 'put ''QWRkQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsX2d0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURldGFjaENoaWxkIixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLHdndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''YT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLENndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxtZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJy''@;'; put 'put ''YXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsU2d0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd01vdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKysp''@;'; put 'put ''ZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsZGd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUxvYWREYXRhIixhPT5tMChUMCx0aGlzLGU2ZSkuY2FsbCh0aGlzLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGE9Pm0wKFQwLHRoaXMsZTZl''@;'; put 'put ''KS5jYWxsKHRoaXMsYSkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoIm5lc3RlZFJvd3MiKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5k''@;'; put 'put ''aXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCk7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKTt0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZGF0YU1hbmFnZXIudXBkYXRlV2l0aERhdGEobCksc3VwZXIudXBkYXRlUGx1Z2luKCl9cmVn''@;'; put 'put ''aXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPXRo''@;'; put 'put ''aXMuY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobC5yb3cpO3JldHVybiB0aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZChhKT90aGlzLmNvbGxhcHNpbmdVSS5leHBhbmRDaGlsZHJlbihhKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZUNoaWxkcmVuKGEp''@;'; put 'put ''LCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO2NvbnN0IGQ9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8''@;'; put 'put ''dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoZCkmJi0xPT09ZC5jb2wmJmQucm93Pj0wfSxncm91cDpRbWUscmVsYXRpdmVUb0dyb3VwOldtLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3Ro''@;'; put 'put ''aXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFFtZSl9ZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKXtCSCh2dyx0aGlzLCEwKX1lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCl7QkgodncsdGhpcywhMSl9b25Nb2RpZnlS''@;'; put 'put ''b3dEYXRhKGwpe2lmKCFWSCh2dyx0aGlzKSlyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpfW9uTW9kaWZ5U291cmNlTGVuZ3RoKCl7aWYoIVZIKHZ3LHRoaXMpKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmNvdW50QWxsUm93cygpfW9uQmVmb3JlRGF0YVNwbGljZShs''@;'; put 'put ''LGEsZCl7cmV0dXJuISghVkgodncsdGhpcykmJiF0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKGwpJiYodGhpcy5kYXRhTWFuYWdlci5zcGxpY2VEYXRhKGwsYSxkKSwxKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gZGd0KGMsbCxhLGQpe3JldHVybiB0''@;'; put 'put ''aGlzLnJvd01vdmVDb250cm9sbGVyLm9uQmVmb3JlUm93TW92ZShjLGwsYSxkKX1mdW5jdGlvbiBoZ3QoYyxsLGEpe3RoaXMuY29sbGFwc2luZ1VJLnRvZ2dsZVN0YXRlKGMsbCxhKX1mdW5jdGlvbiBmZ3QoYyxsLGEpe3JldHVybiB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rh''@;'; put 'put ''c2guc3Rhc2goKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gudHJpbVN0YXNoKGFbMF0sbCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYVswXSxudWxsLC0xKmwpLHRoaXMuZGF0YU1hbmFnZXIuZmlsdGVyRGF0YShjLGwsYSks''@;'; put 'put ''QkgoekgsdGhpcywhMCksdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCkuc2xpY2UoKX1mdW5jdGlvbiBwZ3QoYyl7cmV0dXJuIHRoaXMuY29udGV4dE1lbnVVSS5hcHBlbmRPcHRpb25zKGMpfWZ1bmN0aW9uIGdndChjLGwpe3RoaXMuaGVhZGVyc1VJLmFwcGVuZExldmVsSW5kaWNhdG9ycyhj''@;'; put 'put ''LGwpfWZ1bmN0aW9uIG1ndChjKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWFkZXJzVUkucm93SGVhZGVyV2lkdGhDYWNoZSxjKX1mdW5jdGlvbiB2Z3QoYyxsLGEsZCl7ZCE9PXRoaXMucGx1Z2luTmFtZSYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e0JIKHpILHRoaXMsITEpLHRo''@;'; put 'put ''aXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKX0pfWZ1bmN0aW9uIGJndChjLGwsYSl7Y29uc3QgZD1BcnJheS5mcm9tKGEucmVkdWNlKChoLGYpPT57aWYodGhpcy5kYXRhTWFuYWdlci5p''@;'; put 'put ''c1BhcmVudChmKSl7Y29uc3Qgdj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZikuX19jaGlsZHJlbjtyZXR1cm4gaC5hZGQoZiksQXJyYXkuaXNBcnJheSh2KSYmdi5mb3JFYWNoKE09PmguYWRkKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoTSkpKSxofXJldHVybiBoLmFk''@;'; put 'put ''ZChmKX0sbmV3IFNldCkpO2EubGVuZ3RoPTAsYS5wdXNoKC4uLmQpfWZ1bmN0aW9uIHlndCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfWZ1bmN0aW9uIF9ndChjLGwpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNo''@;'; put 'put ''KHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobCkpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCksdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiB3Z3QoKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRS''@;'; put 'put ''b3dzU3Rhc2guc3Rhc2goKX1mdW5jdGlvbiBDZ3QoYyxsLGEpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGEsbnVsbCwtMSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRh''@;'; put 'put ''dGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIFNndCgpe3RoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCl9ZnVuY3Rpb24gTWd0KCl7dGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiB4Z3QoYyxsKXtWSCh6SCx0aGlzKSYmKGwuc2tpcFJlbmRlcj0h''@;'; put 'put ''MCl9ZnVuY3Rpb24gZTZlKGMpe2lmKCFUM2UoYykpcmV0dXJuIE4kKCJUaGUgTmVzdGVkIFJvd3MgcGx1Z2luIHJlcXVpcmVzIGFuIEFycmF5IG9mIE9iamVjdHMgYXMgYSBkYXRhc2V0IHRvIGJlIHByb3ZpZGVkLiBUaGUgcGx1Z2luIGhhcyBiZWVuIGRpc2FibGVkLiIpLHRoaXMuaG90Lmdl''@;'; put 'put ''dFNldHRpbmdzKClbakhdPSExLHZvaWQgdGhpcy5kaXNhYmxlUGx1Z2luKCk7dGhpcy5kYXRhTWFuYWdlci5zZXREYXRhKGMpLHRoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCl9ZnVuY3Rpb24gdWVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBFZ3QoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''VGd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBrZ3Q9Y2xhc3MgQWd0e2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5k''@;'; put 'put ''b3c7dWVlKHRoaXMsInJvb3RXaW5kb3ciLHZvaWQgMCksdWVlKHRoaXMsInByZWZpeCIsdm9pZCAwKSx1ZWUodGhpcywic2F2ZWRLZXlzIixbXSksdGhpcy5yb290V2luZG93PWEsdGhpcy5wcmVmaXg9bCx0aGlzLmxvYWRTYXZlZEtleXMoKX1zYXZlVmFsdWUobCxhKXt0aGlzLnJvb3RXaW5k''@;'; put 'put ''b3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7bH1gLEpTT04uc3RyaW5naWZ5KGEpKSwtMT09PXRoaXMuc2F2ZWRLZXlzLmluZGV4T2YobCkmJih0aGlzLnNhdmVkS2V5cy5wdXNoKGwpLHRoaXMuc2F2ZVNhdmVkS2V5cygpKX1sb2FkVmFsdWUobCxhKXtjb25zdCBo''@;'; put 'put ''PXRoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLnByZWZpeH1fJHt0eXBlb2YgbD4idSI/YTpsfWApO3JldHVybiBudWxsPT09aD92b2lkIDA6SlNPTi5wYXJzZShoKX1yZXNldChsKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7''@;'; put 'put ''dGhpcy5wcmVmaXh9XyR7bH1gKX1yZXNldEFsbCgpe1luKHRoaXMuc2F2ZWRLZXlzLChsLGEpPT57dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMucHJlZml4fV8ke3RoaXMuc2F2ZWRLZXlzW2FdfWApfSksdGhpcy5jbGVhclNhdmVkS2V5cygpfWxvYWRT''@;'; put 'put ''YXZlZEtleXMoKXtjb25zdCBsPXRoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLnByZWZpeH1fX3BlcnNpc3RlbnRTdGF0ZUtleXNgKSxhPSJzdHJpbmciPT10eXBlb2YgbD9KU09OLnBhcnNlKGwpOnZvaWQgMDt0aGlzLnNhdmVkS2V5cz1hfHxbXX1zYXZlU2F2''@;'; put 'put ''ZWRLZXlzKCl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5c2AsSlNPTi5zdHJpbmdpZnkodGhpcy5zYXZlZEtleXMpKX1jbGVhclNhdmVkS2V5cygpe3RoaXMuc2F2ZWRLZXlzLmxlbmd0aD0wLHRoaXMuc2F2''@;'; put 'put ''ZVNhdmVkS2V5cygpfX07U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVNhdmUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlTG9hZCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIp''@;'; put 'put ''O2NvbnN0IHQ2ZT0icGVyc2lzdGVudFN0YXRlIjtjbGFzcyBPZ3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRGd0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBJZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gUmd0KGMsbCl7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0''@;'; put 'put ''IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJs''@;'; put 'put ''ZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywic3RvcmFnZSIsdm9pZCAwKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdDZlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlz''@;'; put 'put ''LmhvdC5nZXRTZXR0aW5ncygpW3Q2ZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5zdG9yYWdlfHwodGhpcy5zdG9yYWdlPW5ldyBrZ3QodGhpcy5ob3Qucm9vdEVsZW1lbnQuaWQsdGhpcy5ob3Qucm9vdFdpbmRvdykpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVudFN0YXRl''@;'; put 'put ''U2F2ZSIsKGwsYSk9PnRoaXMuc2F2ZVZhbHVlKGwsYSkpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVudFN0YXRlTG9hZCIsKGwsYSk9PnRoaXMubG9hZFZhbHVlKGwsYSkpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVudFN0YXRlUmVzZXQiLCgpPT50aGlzLnJlc2V0VmFsdWUoKSksc3VwZXIuZW5h''@;'; put 'put ''YmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnN0b3JhZ2U9dm9pZCAwLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWxvYWRWYWx1ZShsLGEpe2Eu''@;'; put 'put ''dmFsdWU9dGhpcy5zdG9yYWdlLmxvYWRWYWx1ZShsKX1zYXZlVmFsdWUobCxhKXt0aGlzLnN0b3JhZ2Uuc2F2ZVZhbHVlKGwsYSl9cmVzZXRWYWx1ZShsKXt0eXBlb2YgbD4idSI/dGhpcy5zdG9yYWdlLnJlc2V0QWxsKCk6dGhpcy5zdG9yYWdlLnJlc2V0KGwpfWRlc3Ryb3koKXtzdXBlci5k''@;'; put 'put ''ZXN0cm95KCl9fWZ1bmN0aW9uIGRlZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSGd0KGMpe3ZhciBsPWZ1bmN0aW9uIE5ndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEu''@;'; put 'put ''Y2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3Ry''@;'; put 'put ''aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gbjZlKGMsbCxhKXtpZigiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBoZWU9InNlYXJjaCIsamd0PWZ1bmN0aW9uKGMsbCxh''@;'; put 'put ''LGQsaCl7Yy5nZXRDZWxsTWV0YShsLGEpLmlzU2VhcmNoUmVzdWx0PWh9LHpndD1mdW5jdGlvbihjLGwsYSl7cmV0dXJuIShfYyhjKXx8bnVsbD09PWN8fCFjLnRvTG9jYWxlTG93ZXJDYXNlfHwwPT09Yy5sZW5ndGh8fF9jKGwpfHxudWxsPT09bCkmJi0xIT09bC50b1N0cmluZygpLnRvTG9j''@;'; put 'put ''YWxlTG93ZXJDYXNlKGEubG9jYWxlKS5pbmRleE9mKGMudG9Mb2NhbGVMb3dlckNhc2UoYS5sb2NhbGUpKX07dmFyIGZlZT1uZXcgV2Vha1NldDtjbGFzcyBVZ3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gUGd0KGMsbCl7KGZ1bmN0aW9u''@;'; put 'put ''IEZndChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGZlZSksZGVlKHRoaXMsImNhbGxiYWNrIixqZ3QpLGRlZSh0''@;'; put 'put ''aGlzLCJxdWVyeU1ldGhvZCIsemd0KSxkZWUodGhpcywic2VhcmNoUmVzdWx0Q2xhc3MiLCJodFNlYXJjaFJlc3VsdCIpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBoZWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTkwfWlzRW5hYmxlZCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmhvdC5nZXRTZXR0aW5ncygpW2hlZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtoZWVdO3RoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3MoYSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5k''@;'; put 'put ''ZXJlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbjZlKGZlZSxsLHI2ZSkuY2FsbChsLC4uLmgpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3Zh''@;'; put 'put ''ciBsPXRoaXM7Y29uc3QgYT1mdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBuNmUoZmVlLGwscjZlKS5jYWxsKGwsLi4uaCl9O3RoaXMuaG90LmFkZEhvb2soImJlZm9yZVJlbmRl''@;'; put 'put ''cmVyIixhKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVJlbmRlcmVyIixhKX0pLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBs''@;'; put 'put ''dWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXF1ZXJ5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmdldENhbGxiYWNrKCksZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1''@;'; put 'put ''bWVudHNbMl06dGhpcy5nZXRRdWVyeU1ldGhvZCgpO2NvbnN0IGg9dGhpcy5ob3QuY291bnRSb3dzKCksZj10aGlzLmhvdC5jb3VudENvbHMoKSx2PVtdLE09dGhpcy5ob3Q7cmV0dXJuIEdhKDAsaC0xLEQ9PntHYSgwLGYtMSxaPT57Y29uc3QgcmU9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChE''@;'; put 'put ''LFopLGNlPXRoaXMuaG90LmdldENlbGxNZXRhKEQsWiksYmU9Y2Uuc2VhcmNoLmNhbGxiYWNrfHxhLEJlPShjZS5zZWFyY2gucXVlcnlNZXRob2R8fGQpKGwscmUsY2UpO0JlJiZ2LnB1c2goe3JvdzpELGNvbDpaLGRhdGE6cmV9KSxiZSYmYmUoTSxELFoscmUsQmUpfSl9KSx2fWdldENhbGxi''@;'; put 'put ''YWNrKCl7cmV0dXJuIHRoaXMuY2FsbGJhY2t9c2V0Q2FsbGJhY2sobCl7dGhpcy5jYWxsYmFjaz1sfWdldFF1ZXJ5TWV0aG9kKCl7cmV0dXJuIHRoaXMucXVlcnlNZXRob2R9c2V0UXVlcnlNZXRob2QobCl7dGhpcy5xdWVyeU1ldGhvZD1sfWdldFNlYXJjaFJlc3VsdENsYXNzKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9c2V0U2VhcmNoUmVzdWx0Q2xhc3MobCl7dGhpcy5zZWFyY2hSZXN1bHRDbGFzcz1sfXVwZGF0ZVBsdWdpblNldHRpbmdzKGwpe3FvKGwpJiYobC5zZWFyY2hSZXN1bHRDbGFzcyYmdGhpcy5zZXRTZWFyY2hSZXN1bHRDbGFzcyhsLnNlYXJjaFJlc3Vs''@;'; put 'put ''dENsYXNzKSxsLnF1ZXJ5TWV0aG9kJiZ0aGlzLnNldFF1ZXJ5TWV0aG9kKGwucXVlcnlNZXRob2QpLGwuY2FsbGJhY2smJnRoaXMuc2V0Q2FsbGJhY2sobC5jYWxsYmFjaykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHI2ZShjLGwsYSxkLGgsZil7Y29uc3Qgdj1mLmNs''@;'; put 'put ''YXNzTmFtZXx8W107bGV0IE09W107InN0cmluZyI9PXR5cGVvZiB2P009di5zcGxpdCgiICIpOk0ucHVzaCguLi52KSx0aGlzLmlzRW5hYmxlZCgpJiZmLmlzU2VhcmNoUmVzdWx0P00uaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcyl8fE0ucHVzaChgJHt0aGlzLnNlYXJjaFJlc3Vs''@;'; put 'put ''dENsYXNzfWApOk0uaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcykmJk0uc3BsaWNlKE0uaW5kZXhPZih0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSwxKSxmLmNsYXNzTmFtZT1NLmpvaW4oIiAiKX1mdW5jdGlvbiBVSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWmd0KGMpe3ZhciBs''@;'; put 'put ''PWZ1bmN0aW9uIFdndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgaTZle2NvbnN0cnVjdG9yKGwpe1VIKHRoaXMsInZpZXdwb3J0V2lkdGgiLHZvaWQgMCksVUgodGhpcywib3ZlcndyaXRlQ29sdW1uV2lkdGhGbiIs''@;'; put 'put ''dm9pZCAwKSxVSCh0aGlzLCJiYXNlV2lkdGhzIixuZXcgTWFwKSxVSCh0aGlzLCJzdHJldGNoZWRXaWR0aHMiLG5ldyBNYXApLHRoaXMub3ZlcndyaXRlQ29sdW1uV2lkdGhGbj1sfXByZXBhcmUobCl7bGV0e3ZpZXdwb3J0V2lkdGg6YX09bDt0aGlzLnZpZXdwb3J0V2lkdGg9YSx0aGlzLmJh''@;'; put 'put ''c2VXaWR0aHMuY2xlYXIoKSx0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpfXNldENvbHVtbkJhc2VXaWR0aChsLGEpe3RoaXMuYmFzZVdpZHRocy5zZXQobCxhKX1jYWxjdWxhdGUoKXt9Z2V0V2lkdGhzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5zdHJldGNoZWRXaWR0aHMpfX1jbGFz''@;'; put 'put ''cyBZZ3QgZXh0ZW5kcyBpNmV7Y2FsY3VsYXRlKCl7Y29uc3QgbD1BcnJheS5mcm9tKHRoaXMuYmFzZVdpZHRocykucmVkdWNlKChjZSxiZSk9PntsZXRbLEVlXT1iZTtyZXR1cm4gY2UrRWV9LDApO2lmKHRoaXMudmlld3BvcnRXaWR0aC1sPDApcmV0dXJuIHZvaWQgdGhpcy5zdHJldGNoZWRX''@;'; put 'put ''aWR0aHMuY2xlYXIoKTtjb25zdCBkPXRoaXMudmlld3BvcnRXaWR0aC9sLGg9W10sZj1bXTtsZXQgdj10aGlzLnZpZXdwb3J0V2lkdGgsTT0wO2lmKHRoaXMuYmFzZVdpZHRocy5mb3JFYWNoKChjZSxiZSk9Pntjb25zdCBFZT1NYXRoLnJvdW5kKGNlKmQpLEJlPXRoaXMub3ZlcndyaXRlQ29s''@;'; put 'put ''dW1uV2lkdGhGbihFZSxiZSk7RWU9PT1CZSYmRWU+PV9fPyhoLnB1c2goW2JlLEJlXSksTSs9QmUpOkVlIT09QmUmJihoLnB1c2goW2JlLEJlXSksZi5wdXNoKGJlKSx2LT1CZSl9KSx2PD1fXylyZXR1cm4gdm9pZCB0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpO2NvbnN0IEQ9di9NO2xl''@;'; put 'put ''dCBaPS0xLHJlPTA7aC5mb3JFYWNoKChjZSxiZSk9PntsZXRbRWUsQmVdPWNlLHFlPUJlO2YuaW5jbHVkZXMoRWUpfHwocWU9TWF0aC5yb3VuZChCZSpEKSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KEVlLHFlKSxaPUVlLGJlPGgubGVuZ3RoLTEmJihyZSs9cWUpfSksdGhpcy5zdHJldGNo''@;'; put 'put ''ZWRXaWR0aHMuc2l6ZT4xJiZ0aGlzLnN0cmV0Y2hlZFdpZHRocy5zZXQoWixNYXRoLnJvdW5kKHRoaXMudmlld3BvcnRXaWR0aC1yZSkpfX1mdW5jdGlvbiBhNmUoYyxsLGEpeyhmdW5jdGlvbiBHZ3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlh''@;'; put 'put ''bGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHBlZShjLGwpe3JldHVybiBjLmdldChvNmUoYyxsKSl9ZnVuY3Rpb24gWkgoYyxsLGEpe3JldHVybiBjLnNldChvNmUoYyxsKSxhKSxhfWZ1bmN0aW9u''@;'; put 'put ''IG82ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFdIPW5ldyBXZWFr''@;'; put 'put ''TWFwLHdBPW5ldyBXZWFrTWFwO2NsYXNzICRndCBleHRlbmRzIGk2ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksYTZlKHRoaXMsV0gsMCksYTZlKHRoaXMsd0EsLTEpfXByZXBhcmUobCl7c3VwZXIucHJlcGFyZShsKSxaSChXSCx0aGlzLDApLFpIKHdBLHRoaXMsLTEpfXNl''@;'; put 'put ''dENvbHVtbkJhc2VXaWR0aChsLGEpe3N1cGVyLnNldENvbHVtbkJhc2VXaWR0aChsLGEpLFpIKHdBLHRoaXMsbCksWkgoV0gsdGhpcyxhKX1jYWxjdWxhdGUoKXtpZigtMT09PXBlZSh3QSx0aGlzKSlyZXR1cm47Y29uc3QgbD1BcnJheS5mcm9tKHRoaXMuYmFzZVdpZHRocykucmVkdWNlKChk''@;'; put 'put ''LGgpPT57bGV0WyxmXT1oO3JldHVybiBkK2Z9LDApLGE9TWF0aC5tYXgodGhpcy52aWV3cG9ydFdpZHRoLWwrcGVlKFdILHRoaXMpLDApO3RoaXMuc3RyZXRjaGVkV2lkdGhzLnNldChwZWUod0EsdGhpcyksYSl9fWZ1bmN0aW9uIFlIKGMsbCxhKXtzNmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0''@;'; put 'put ''aW9uIHM2ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZnUoYyxsKXtyZXR1cm4gYy5nZXQoYncoYyxsKSl9ZnVuY3Rpb24gZ2VlKGMs''@;'; put 'put ''bCxhKXtyZXR1cm4gYy5zZXQoYncoYyxsKSxhKSxhfWZ1bmN0aW9uIGJ3KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHBy''@;'; put 'put ''ZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTTE9bmV3IFdlYWtNYXAseXc9bmV3IFdlYWtNYXAsbWVlPW5ldyBXZWFrTWFwLEdIPW5ldyBXZWFrTWFwLENBPW5ldyBXZWFrU2V0O2NsYXNzIFhndHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gS2d0KGMsbCl7czZlKGMsbCksbC5hZGQoYyl9''@;'; put 'put ''KSh0aGlzLENBKSxZSCh0aGlzLE0xLHZvaWQgMCksWUgodGhpcyx5dyx2b2lkIDApLFlIKHRoaXMsbWVlLG5ldyBNYXAoW1siYWxsIixuZXcgWWd0KGJ3KENBLHRoaXMsbDZlKS5iaW5kKHRoaXMpKV0sWyJsYXN0IixuZXcgJGd0KGJ3KENBLHRoaXMsbDZlKS5iaW5kKHRoaXMpKV1dKSksWUgo''@;'; put 'put ''dGhpcyxHSCwibm9uZSIpLGdlZShNMSx0aGlzLGwpLGdlZSh5dyx0aGlzLGZ1KE0xLHRoaXMpLmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAoInN0cmV0Y2hDb2x1bW5zIiwicGh5c2ljYWxJbmRleFRvVmFsdWUiKSl9dXNlU3RyYXRlZ3kobCl7Z2VlKEdILHRo''@;'; put 'put ''aXMsZnUobWVlLHRoaXMpLmhhcyhsKT9sOiJub25lIil9cmVmcmVzaFN0cmV0Y2hpbmcoKXsibm9uZSIhPT1mdShHSCx0aGlzKT9mdShNMSx0aGlzKS5iYXRjaEV4ZWN1dGlvbigoKT0+e2Z1KHl3LHRoaXMpLmNsZWFyKCk7Y29uc3QgbD1mdShtZWUsdGhpcykuZ2V0KGZ1KEdILHRoaXMpKTts''@;'; put 'put ''ZXQgZD1mdShNMSx0aGlzKS52aWV3LmdldFZpZXdwb3J0V2lkdGgoKTtidyhDQSx0aGlzLEpndCkuY2FsbCh0aGlzKSYmKGQtPWYwKGZ1KE0xLHRoaXMpLnJvb3REb2N1bWVudCkpLGwucHJlcGFyZSh7dmlld3BvcnRXaWR0aDpkfSk7Zm9yKGxldCBoPTA7aDxmdShNMSx0aGlzKS5jb3VudENv''@;'; put 'put ''bHMoKTtoKyspZnUoTTEsdGhpcykuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oZnUoTTEsdGhpcykudG9QaHlzaWNhbENvbHVtbihoKSl8fGwuc2V0Q29sdW1uQmFzZVdpZHRoKGgsYncoQ0EsdGhpcyxRZ3QpLmNhbGwodGhpcyxoKSk7bC5jYWxjdWxhdGUoKSxsLmdldFdpZHRocygpLmZv''@;'; put 'put ''ckVhY2goaD0+e2xldFtmLHZdPWg7ZnUoeXcsdGhpcykuc2V0VmFsdWVBdEluZGV4KGZ1KE0xLHRoaXMpLnRvUGh5c2ljYWxDb2x1bW4oZiksdil9KX0sITApOmZ1KHl3LHRoaXMpLmNsZWFyKCl9Z2V0U3RyZXRjaGVkV2lkdGgobCl7cmV0dXJuIGZ1KHl3LHRoaXMpLmdldFZhbHVlQXRJbmRl''@;'; put 'put ''eChmdShNMSx0aGlzKS50b1BoeXNpY2FsQ29sdW1uKGwpKX19ZnVuY3Rpb24gSmd0KCl7Y29uc3R7dmlldzpjfT1mdShNMSx0aGlzKTtpZihjLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXJldHVybiExO2NvbnN0IGw9Yy5nZXRWaWV3cG9ydEhlaWdodCgpLGE9ZnUoTTEsdGhp''@;'; put 'put ''cykuY291bnRSb3dzKCksZD1jLmdldFN0eWxlc0hhbmRsZXIoKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGg9MCxmPSExO2ZvcihsZXQgTT0wO008YTtNKyspe3ZhciB2O2lmKGgrPShudWxsIT09KHY9ZnUoTTEsdGhpcykuZ2V0Um93SGVpZ2h0KE0pKSYmdm9pZCAwIT09dj92OmQpKygw''@;'; put 'put ''PT09TT8xOjApLGg+bCl7Zj0hMDticmVha319cmV0dXJuIGZ9ZnVuY3Rpb24gUWd0KGMpe3ZhciBsO3JldHVybiBudWxsIT09KGw9ZnUoTTEsdGhpcykuZ2V0Q29sV2lkdGgoYywiU3RyZXRjaENvbHVtbnMiKSkmJnZvaWQgMCE9PWw/bDpfX31mdW5jdGlvbiBsNmUoYyxsKXtyZXR1cm4gZnUo''@;'; put 'put ''TTEsdGhpcykucnVuSG9va3MoImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsYyxsKX1mdW5jdGlvbiB2ZWUoYyxsLGEpe2M2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gYzZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhl''@;'; put 'put ''IHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBiZWUoYyxsLGEpe3JldHVybiBjLnNldCgkSChjLGwpLGEpLGF9ZnVuY3Rpb24gS2coYyxsKXtyZXR1cm4gYy5nZXQoJEgoYyxsKSl9ZnVuY3Rpb24gJEgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBfdz1uZXcgV2Vha01hcCxLSD1uZXcgV2Vha01hcCxTQT1uZXcgV2Vh''@;'; put 'put ''a01hcCx5ZWU9bmV3IFdlYWtTZXQ7Y2xhc3MgcjV0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGU1dChjLGwpe2M2ZShjLGwpLGwuYWRkKGMpfSh0aGlzLHllZSksdmVlKHRoaXMsX3csbmV3IFhndCh0aGlzLmhvdCkpLHZlZSh0aGlzLEtI''@;'; put 'put ''LG51bGwpLHZlZSh0aGlzLFNBLG5ldyBSZXNpemVPYnNlcnZlcihsPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dmFyIGE7bnVsbCE9PShhPXRoaXMuaG90KSYmdm9pZCAwIT09YSYmYS52aWV3LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJmwuZm9yRWFjaChkPT57''@;'; put 'put ''bGV0e2NvbnRlbnRSZWN0Omh9PWQ7bnVsbCE9PUtnKEtILHRoaXMpJiZLZyhLSCx0aGlzKSE9PWgud2lkdGgmJih0aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpLGJlZShLSCx0aGlzLGgud2lkdGgpfSl9KX0pKX1zdGF0aWMg''@;'; put 'put ''Z2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ic3RyZXRjaENvbHVtbnMifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE1NX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWlzRW5hYmxlZCgpe3JldHVyblsiYWxsIiwibGFzdCJdLmluY2x1ZGVzKHRoaXMuaG90''@;'; put 'put ''LmdldFNldHRpbmdzKCkuc3RyZXRjaEgpfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoS2coX3csdGhpcykudXNlU3RyYXRlZ3kodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCksS2coU0EsdGhpcykub2JzZXJ2ZSh0aGlzLmhvdC5yb290RWxlbWVudCks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuICRIKHllZSxsLGE1dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2Rp''@;'; put 'put ''ZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gJEgoeWVlLGwsaTV0KS5jYWxsKGwsLi4uZCl9LDEwKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1''@;'; put 'put ''Z2luKCl7S2coX3csdGhpcykudXNlU3RyYXRlZ3kodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSxLZyhTQSx0aGlzKS51bm9ic2VydmUodGhpcy5ob3Qucm9vdEVsZW1lbnQp''@;'; put 'put ''fWdldENvbHVtbldpZHRoKGwpe3JldHVybiBLZyhfdyx0aGlzKS5nZXRTdHJldGNoZWRXaWR0aChsKX1kZXN0cm95KCl7S2coU0EsdGhpcykuZGlzY29ubmVjdCgpLGJlZShTQSx0aGlzLG51bGwpLGJlZShfdyx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gaTV0KGMsbCxh''@;'; put 'put ''KXtpZihhPT09dGhpcy5wbHVnaW5OYW1lKXJldHVybjtjb25zdCBkPXRoaXMuZ2V0Q29sdW1uV2lkdGgobCk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBkP2Q6Y31mdW5jdGlvbiBhNXQoYyl7YyYmS2coX3csdGhpcykucmVmcmVzaFN0cmV0Y2hpbmcoKX1mdW5jdGlvbiBxSChjLGwsYSl7cmV0''@;'; put 'put ''dXJuKGw9ZnVuY3Rpb24gbDV0KGMpe3ZhciBsPWZ1bmN0aW9uIGM1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6''@;'; put 'put ''bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gX2VlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1''@;'; put 'put ''cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgWEg9bmV3IFdlYWtTZXQ7Y2xhc3MgaDV0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVu''@;'; put 'put ''dHMpLGZ1bmN0aW9uIG81dChjLGwpeyhmdW5jdGlvbiBzNXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxYSCks''@;'; put 'put ''cUgodGhpcywic2Nyb2xsYmFycyIsW10pLHFIKHRoaXMsImNsb25lcyIsW10pLHFIKHRoaXMsImxvY2tlZENvbGxlY3Rpb24iLCExKSxxSCh0aGlzLCJmcmVlemVPdmVybGF5cyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJ0b3VjaFNjcm9sbCJ9c3RhdGljIGdldCBQTFVH''@;'; put 'put ''SU5fUFJJT1JJVFkoKXtyZXR1cm4gMjAwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9aXNFbmFibGVkKCl7cmV0dXJuIFIkKCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlclZpZXdSZW5kZXIiLCgpPT5fZWUoWEgsdGhpcyxmNXQp''@;'; put 'put ''LmNhbGwodGhpcykpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSExLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJF''@;'; put 'put ''dmVudHMoKXt0aGlzLmFkZEhvb2soImJlZm9yZVRvdWNoU2Nyb2xsIiwoKT0+X2VlKFhILHRoaXMscDV0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTW9tZW50dW1TY3JvbGwiLCgpPT5fZWUoWEgsdGhpcyxnNXQpLmNhbGwodGhpcykpfX1mdW5jdGlvbiBmNXQoKXtpZih0aGlz''@;'; put 'put ''LmxvY2tlZENvbGxlY3Rpb24pcmV0dXJuO2NvbnN0e3RvcE92ZXJsYXk6Yyxib3R0b21PdmVybGF5OmwsaW5saW5lU3RhcnRPdmVybGF5OmEsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmQsYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Omh9PXRoaXMuaG90LnZpZXcuX3d0Lnd0''@;'; put 'put ''T3ZlcmxheXM7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSEwLHRoaXMuc2Nyb2xsYmFycy5sZW5ndGg9MCx0aGlzLnNjcm9sbGJhcnMucHVzaChjKSxsLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChsKSx0aGlzLnNjcm9sbGJhcnMucHVzaChhKSxkJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChk''@;'; put 'put ''KSxoJiZoLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChoKSx0aGlzLmNsb25lcz1bXSxjLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksbC5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChsLmNsb25l''@;'; put 'put ''Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGEubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goYS5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxkJiZ0aGlzLmNsb25lcy5wdXNoKGQuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksaCYmaC5jbG9uZSYm''@;'; put 'put ''dGhpcy5jbG9uZXMucHVzaChoLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpfWZ1bmN0aW9uIHA1dCgpe3RoaXMuZnJlZXplT3ZlcmxheXM9ITAsWW4odGhpcy5jbG9uZXMsYz0+e1RpKGMsImhpZGUtdHdlZW4iKX0pfWZ1bmN0aW9uIGc1dCgpe3RoaXMuZnJlZXplT3ZlcmxheXM9''@;'; put 'put ''ITEsWW4odGhpcy5jbG9uZXMsYz0+e2xvKGMsImhpZGUtdHdlZW4iKSxUaShjLCJzaG93LXR3ZWVuIil9KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57WW4odGhpcy5jbG9uZXMsYz0+e2xvKGMsInNob3ctdHdlZW4iKX0pfSw0MDApLFluKHRoaXMuc2Nyb2xsYmFycyxjPT57Yy5y''@;'; put 'put ''ZWZyZXNoKCksYy5yZXNldEZpeGVkUG9zaXRpb24oKX0pLHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKX1jb25zdCBKSD0idHJpbVJvd3MiO3ZhciB1NmU9bmV3IFdlYWtTZXQ7Y2xhc3MgUzV0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBl''@;'; put 'put ''ciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG01dChjLGwpeyhmdW5jdGlvbiB2NXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChj''@;'; put 'put ''KX0odGhpcyx1NmUpLGZ1bmN0aW9uIGI1dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geTV0KGMpe3ZhciBsPWZ1bmN0aW9uIF81dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk''@;'; put 'put ''PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi''@;'; put 'put ''c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInRyaW1tZWRSb3dzTWFwIixudWxs''@;'; put 'put ''KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gSkh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzMwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtKSF19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy50cmltbWVk''@;'; put 'put ''Um93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgidHJpbVJvd3MiLG5ldyBxRSksdGhpcy50cmltbWVkUm93c01hcC5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5mdW5jdGlvbiB3NXQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwp''@;'; put 'put ''KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfSh1NmUsdGhpcyxNNXQpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtj''@;'; put 'put ''b25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbSkhdO0FycmF5LmlzQXJyYXkobCkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy50cmltbWVkUm93c01hcC5jbGVhcigpLFluKGwsYT0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEw''@;'; put 'put ''KSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgidHJpbVJvd3MiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0VHJpbW1lZFJvd3MoKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRUcmltbWVk''@;'; put 'put ''SW5kZXhlcygpfXRyaW1Sb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRyaW1Sb3ciLGEs''@;'; put 'put ''aCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCx2PT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgodiwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclRyaW1Sb3ciLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9dHJpbVJv''@;'; put 'put ''dygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudHJpbVJvd3MoYSl9dW50cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQg''@;'; put 'put ''aD1hO2NvbnN0IGY9dGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9bC5sZW5ndGg+MDtkJiZ2JiYoWW4obCxEPT57ZltEXT0hMX0pLGg9cXUoZiwoRCxaLHJlKT0+KFomJkQucHVzaChyZSksRCksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbnRy''@;'; put 'put ''aW1Sb3ciLGEsaCxkJiZ2KSYmKGQmJnYmJnRoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVudHJpbVJvdyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX11bnRyaW1Sb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxh''@;'; put 'put ''PW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnVudHJpbVJvd3MoYSl9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChsKXx8ITF9dW50cmltQWxsKCl7dGhpcy51bnRyaW1Sb3dzKHRoaXMuZ2V0VHJp''@;'; put 'put ''bW1lZFJvd3MoKSl9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO3JldHVybiBsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gTTV0KCl7Y29uc3QgYz10''@;'; put 'put ''aGlzLmhvdC5nZXRTZXR0aW5ncygpW0pIXTtBcnJheS5pc0FycmF5KGMpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKGMsbD0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGwsITApfSl9LCEwKX1jbGFzcyB0Zntjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24g''@;'; put 'put ''eDV0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBFNXQoYyl7dmFyIGw9ZnVuY3Rpb24gVDV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi''@;'; put 'put ''KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s''@;'; put 'put ''Ij09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsImFjdGlvblR5cGUiLCIiKSx0aGlzLmFjdGlvblR5cGU9bH11bmRvKCl7''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX1yZWRvKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19ZnVuY3Rpb24gUUgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEE1dChjKXt2YXIgbD1mdW5jdGlvbiBrNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu''@;'; put 'put ''IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHdlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtzdGF0ZUJlZm9yZTphLHJhbmdlOmQsdHlwZTpoLGFsaWdubWVudDpmfT1sO3N1cGVyKCJjZWxsX2FsaWdubWVudCIpLFFIKHRoaXMsInN0YXRlQmVmb3Jl''@;'; put 'put ''Iix2b2lkIDApLFFIKHRoaXMsInJhbmdlIix2b2lkIDApLFFIKHRoaXMsInR5cGUiLHZvaWQgMCksUUgodGhpcywiYWxpZ25tZW50Iix2b2lkIDApLHRoaXMuc3RhdGVCZWZvcmU9YSx0aGlzLnJhbmdlPWQsdGhpcy50eXBlPWgsdGhpcy5hbGlnbm1lbnQ9Zn1zdGF0aWMgc3RhcnRSZWdpc3Rl''@;'; put 'put ''cmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ2VsbEFsaWdubWVudCIsKGQsaCxmLHYpPT57YS5kb25lKCgpPT5uZXcgd2VlKHtzdGF0ZUJlZm9yZTpkLHJhbmdlOmgsdHlwZTpmLGFsaWdubWVudDp2fSkpfSl9dW5kbyhsLGEpe1luKHRoaXMucmFuZ2UsZD0+e2QuZm9yQWxsKCho''@;'; put 'put ''LGYpPT57aD49MCYmZj49MCYmbC5zZXRDZWxsTWV0YShoLGYsImNsYXNzTmFtZSIsdGhpcy5zdGF0ZUJlZm9yZVtoXVtmXXx8IiBodExlZnQiKX0pfSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnJlbmRlcigpfXJlZG8obCxhKXtKbSh0aGlzLnJhbmdlLHRoaXMudHlw''@;'; put 'put ''ZSx0aGlzLmFsaWdubWVudCwoZCxoKT0+bC5nZXRDZWxsTWV0YShkLGgpLChkLGgsZix2KT0+bC5zZXRDZWxsTWV0YShkLGgsZix2KSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnJlbmRlcigpfX1mdW5jdGlvbiBkNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEQ1''@;'; put 'put ''dChjKXt2YXIgbD1mdW5jdGlvbiBJNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4g''@;'; put 'put ''ZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIENlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtjb2x1bW5zOmEsZmluYWxJbmRleDpkfT1sO3N1cGVyKCJjb2xfbW92''@;'; put 'put ''ZSIpLGQ2ZSh0aGlzLCJjb2x1bW5zIix2b2lkIDApLGQ2ZSh0aGlzLCJmaW5hbENvbHVtbkluZGV4Iix2b2lkIDApLHRoaXMuY29sdW1ucz1hLnNsaWNlKCksdGhpcy5maW5hbENvbHVtbkluZGV4PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9y''@;'; put 'put ''ZUNvbHVtbk1vdmUiLChkLGgpPT57ITEhPT1kJiZhLmRvbmUoKCk9Pm5ldyBDZWUoe2NvbHVtbnM6ZCxmaW5hbEluZGV4Omh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksRVEo''@;'; put 'put ''dGhpcy5jb2x1bW5zLHRoaXMuZmluYWxDb2x1bW5JbmRleCxsLmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaChmPT57bGV0e2Zyb206dix0bzpNfT1mO3Y8TSYmKE0tPTEpLGQubW92ZUNvbHVtbihNLHYpfSksbC5yZW5kZXIoKSxsLmRl''@;'; put 'put ''c2VsZWN0Q2VsbCgpLGwuc2VsZWN0Q29sdW1ucyh0aGlzLmNvbHVtbnNbMF0sdGhpcy5jb2x1bW5zWzBdK3RoaXMuY29sdW1ucy5sZW5ndGgtMSl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIi''@;'; put 'put ''LGEpLGQubW92ZUNvbHVtbnModGhpcy5jb2x1bW5zLnNsaWNlKCksdGhpcy5maW5hbENvbHVtbkluZGV4KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RDb2x1bW5zKHRoaXMuZmluYWxDb2x1bW5JbmRleCx0aGlzLmZpbmFsQ29sdW1uSW5kZXgrdGhpcy5jb2x1bW5zLmxl''@;'; put 'put ''bmd0aC0xKX19ZnVuY3Rpb24gaDZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBSNXQoYyl7dmFyIGw9ZnVuY3Rpb24gTDV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5j''@;'; put 'put ''YWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJp''@;'; put 'put ''bmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBTZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3Rv''@;'; put 'put ''cihsKXtsZXR7Y3VycmVudFNvcnRTdGF0ZTphLG5ld1NvcnRTdGF0ZTpkfT1sO3N1cGVyKCJjb2xfc29ydCIpLGg2ZSh0aGlzLCJwcmV2aW91c1NvcnRTdGF0ZSIsdm9pZCAwKSxoNmUodGhpcywibmV4dFNvcnRTdGF0ZSIsdm9pZCAwKSx0aGlzLnByZXZpb3VzU29ydFN0YXRlPWEsdGhpcy5u''@;'; put 'put ''ZXh0U29ydFN0YXRlPWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUNvbHVtblNvcnQiLChkLGgsZik9PntmJiZhLmRvbmUoKCk9Pm5ldyBTZWUoe2N1cnJlbnRTb3J0U3RhdGU6ZCxuZXdTb3J0U3RhdGU6aH0pKX0pfXVuZG8obCxhKXtjb25z''@;'; put 'put ''dCBkPWwuZ2V0UGx1Z2luKCJjb2x1bW5Tb3J0aW5nIiksaD1sLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksZj1oLmlzRW5hYmxlZCgpP2g6ZDt0aGlzLnByZXZpb3VzU29ydFN0YXRlLmxlbmd0aD9mLnNvcnQodGhpcy5wcmV2aW91c1NvcnRTdGF0ZSk6Zi5jbGVhclNvcnQoKSxh''@;'; put 'put ''KCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImNvbHVtblNvcnRpbmciKSxoPWwuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKTsoaC5pc0VuYWJsZWQoKT9oOmQpLnNvcnQodGhpcy5uZXh0U29ydFN0YXRlKSxhKCl9fWZ1bmN0aW9uIGY2ZShjLGwsYSl7cmV0dXJuKGw9''@;'; put 'put ''ZnVuY3Rpb24gTzV0KGMpe3ZhciBsPWZ1bmN0aW9uIFA1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0o''@;'; put 'put ''bCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgTWVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsYW1vdW50OmR9PWw7c3VwZXIoImlu''@;'; put 'put ''c2VydF9jb2wiKSxmNmUodGhpcywiaW5kZXgiLHZvaWQgMCksZjZlKHRoaXMsImFtb3VudCIsdm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5hbW91bnQ9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChkLGgsZik9PnthLmRv''@;'; put 'put ''bmUoKCk9Pm5ldyBNZWUoe2luZGV4OmQsYW1vdW50Omh9KSxmKX0pfXVuZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsYSksbC5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tP''@;'; put 'put ''bmNlKCJhZnRlckNyZWF0ZUNvbCIsYSksbC5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBwNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEY1dChjKXt2YXIgbD1mdW5jdGlvbiBINXQoYyxsKXtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0''@;'; put 'put ''aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHhlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGFtb3VudDpkfT1sO3N1cGVyKCJpbnNlcnRfcm93IikscDZlKHRoaXMsImluZGV4Iix2b2lkIDApLHA2ZSh0aGlz''@;'; put 'put ''LCJhbW91bnQiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuYW1vdW50PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoZCxoLGYpPT57YS5kb25lKCgpPT5uZXcgeGVlKHtpbmRleDpkLGFtb3VudDpofSksZil9KX11bmRv''@;'; put 'put ''KGwsYSl7Y29uc3QgZD1sLmNvdW50Um93cygpLGg9bC5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93czt0aGlzLmluZGV4Pj1kJiZ0aGlzLmluZGV4LWg8ZCYmKHRoaXMuaW5kZXgtPWgpLGwuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlUm93IixhKSxsLmFsdGVyKCJyZW1vdmVfcm93Iix0aGlz''@;'; put 'put ''LmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyQ3JlYXRlUm93IixhKSxsLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIGVOKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4obD1mdW5jdGlvbiBONXQoYyl7dmFyIGw9ZnVuY3Rpb24gVjV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9m''@;'; put 'put ''IGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBFZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7Y2hhbmdlczphLHNlbGVjdGVk''@;'; put 'put ''OmQsY291bnRDb2xzOmgsY291bnRSb3dzOmZ9PWw7c3VwZXIoImNoYW5nZSIpLGVOKHRoaXMsImNoYW5nZXMiLHZvaWQgMCksZU4odGhpcywic2VsZWN0ZWQiLHZvaWQgMCksZU4odGhpcywiY291bnRDb2xzIix2b2lkIDApLGVOKHRoaXMsImNvdW50Um93cyIsdm9pZCAwKSx0aGlzLmNoYW5n''@;'; put 'put ''ZXM9YSx0aGlzLnNlbGVjdGVkPWQsdGhpcy5jb3VudENvbHM9aCx0aGlzLmNvdW50Um93cz1mfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVDaGFuZ2UiLGZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1kJiZkLmxlbmd0aDtmJiZkLmZpbmQoRD0+e2Nv''@;'; put 'put ''bnN0WywsWixyZV09RDtyZXR1cm4gWiE9PXJlfSkmJmEuZG9uZSgoKT0+e2NvbnN0IEQ9ZC5yZWR1Y2UoKHJlLGNlKT0+KHJlLnB1c2goWy4uLmNlXSkscmUpLFtdKTtELmZvckVhY2gocmU9PntyZVsxXT1sLnByb3BUb0NvbChyZVsxXSl9KTtjb25zdCBaPWY+MT90aGlzLmdldFNlbGVjdGVk''@;'; put 'put ''KCk6W1tEWzBdWzBdLERbMF1bMV1dXTtyZXR1cm4gbmV3IEVlZSh7Y2hhbmdlczpELHNlbGVjdGVkOlosY291bnRDb2xzOmwuY291bnRDb2xzKCksY291bnRSb3dzOmwuY291bnRSb3dzKCl9KX0saCl9KX11bmRvKGwsYSl7Y29uc3QgZD1nMSh0aGlzLmNoYW5nZXMpO2ZvcihsZXQgdj0wLE09''@;'; put 'put ''ZC5sZW5ndGg7djxNO3YrKylkW3ZdLnNwbGljZSgzLDEpO2wuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIixhKSxsLnNldERhdGFBdENlbGwoZCxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKTtjb25zdCBoPWwuY291bnRSb3dzKCktdGhpcy5jb3VudFJvd3M7aD4wJiZsLmFsdGVyKCJyZW1v''@;'; put 'put ''dmVfcm93IixudWxsLGgsIlVuZG9SZWRvLnVuZG8iKTtjb25zdCBmPWwuY291bnRDb2xzKCktdGhpcy5jb3VudENvbHM7Zj4wJiZsLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpJiZsLmFsdGVyKCJyZW1vdmVfY29sIixudWxsLGYsIlVuZG9SZWRvLnVuZG8iKSxsLnNjcm9sbFRvRm9j''@;'; put 'put ''dXNlZENlbGwoKSxsLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEpfXJlZG8obCxhKXtjb25zdCBkPWcxKHRoaXMuY2hhbmdlcyk7Zm9yKGxldCBoPTAsZj1kLmxlbmd0aDtoPGY7aCsrKWRbaF0uc3BsaWNlKDIsMSk7bC5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGEpLGwuc2V0''@;'; put 'put ''RGF0YUF0Q2VsbChkLG51bGwsbnVsbCwiVW5kb1JlZG8ucmVkbyIpLHRoaXMuc2VsZWN0ZWQmJmwuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSl9fWZ1bmN0aW9uIGc2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQjV0KGMpe3ZhciBsPWZ1bmN0aW9uIGo1dChjLGwpe2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp''@;'; put 'put ''dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVu''@;'; put 'put ''dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVGVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2NvbmRpdGlvbnNTdGFjazphLHByZXZpb3VzQ29uZGl0aW9uc1N0YWNrOmR9PWw7c3VwZXIoImZpbHRlciIpLGc2ZSh0aGlzLCJj''@;'; put 'put ''b25kaXRpb25zU3RhY2siLHZvaWQgMCksZzZlKHRoaXMsInByZXZpb3VzQ29uZGl0aW9uc1N0YWNrIix2b2lkIDApLHRoaXMuY29uZGl0aW9uc1N0YWNrPWEsdGhpcy5wcmV2aW91c0NvbmRpdGlvbnNTdGFjaz1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29r''@;'; put 'put ''KCJiZWZvcmVGaWx0ZXIiLChkLGgpPT57YS5kb25lKCgpPT5uZXcgVGVlKHtjb25kaXRpb25zU3RhY2s6ZCxwcmV2aW91c0NvbmRpdGlvbnNTdGFjazpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImZpbHRlcnMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIi''@;'; put 'put ''LGEpLGQuaW1wb3J0Q29uZGl0aW9ucyh0aGlzLnByZXZpb3VzQ29uZGl0aW9uc1N0YWNrKSxkLmZpbHRlcigpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLmltcG9ydENvbmRpdGlvbnModGhpcy5j''@;'; put 'put ''b25kaXRpb25zU3RhY2spLGQuZmlsdGVyKCl9fWNsYXNzIEFlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtkYXRhOmEsY2VsbFJhbmdlOmR9PWw7c3VwZXIoIm1lcmdlX2NlbGxzIiksZnVuY3Rpb24gejV0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVNXQoYyl7dmFyIGw9ZnVu''@;'; put 'put ''Y3Rpb24gWjV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY2VsbFJhbmdlPWQsdGhpcy5kYXRhPWF9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFk''@;'; put 'put ''ZEhvb2soImJlZm9yZU1lcmdlQ2VsbHMiLChkLGgpPT57aWYoaClyZXR1cm47Y29uc3QgZj1kLmdldFRvcFN0YXJ0Q29ybmVyKCksdj1kLmdldEJvdHRvbUVuZENvcm5lcigpLE09bC5nZXREYXRhKGYucm93LGYuY29sLHYucm93LHYuY29sKTthLmRvbmUoKCk9Pm5ldyBBZWUoe2RhdGE6TSxj''@;'; put 'put ''ZWxsUmFuZ2U6ZH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCk7Y29uc3QgaD10aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENv''@;'; put 'put ''cm5lcigpO2wucG9wdWxhdGVGcm9tQXJyYXkoaC5yb3csaC5jb2wsdGhpcy5kYXRhLHZvaWQgMCx2b2lkIDAsIk1lcmdlQ2VsbHMiKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tZXJnZVJh''@;'; put 'put ''bmdlKHRoaXMuY2VsbFJhbmdlKX19ZnVuY3Rpb24gbTZlKGMsbCxhLGQsaCl7Y29uc3QgZj1bInZpc3VhbFJvdyIsInZpc3VhbENvbCIsInJvdyIsImNvbCIsInByb3AiXSx2PWYubGVuZ3RoLE09W107cmV0dXJuIEdhKGQsaCxEPT57R2EobCxhLFo9Pntjb25zdCByZT1jLmdldENlbGxNZXRh''@;'; put 'put ''KFosRCk7aWYoT2JqZWN0LmtleXMocmUpLmxlbmd0aCE9PXYpe2NvbnN0IGNlPU9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhyZSkuZmlsdGVyKGJlPT57bGV0W0VlXT1iZTtyZXR1cm4hMT09PWYuaW5jbHVkZXMoRWUpfSkpO00ucHVzaChbcmUudmlzdWFsUm93LHJlLnZpc3Vh''@;'; put 'put ''bENvbCxjZV0pfX0pfSksTX1mdW5jdGlvbiBxZyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVzV0KGMpe3ZhciBsPWZ1bmN0aW9uIFk1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh''@;'; put 'put ''ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o''@;'; put 'put ''Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mga2VlIGV4dGVuZHMgdGZ7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7bGV0e2luZGV4OmEsaW5kZXhlczpkLGRhdGE6aCxhbW91bnQ6ZixoZWFkZXJzOnYsY29sdW1uUG9zaXRpb25zOk0scm93UG9zaXRpb25zOkQsZml4ZWRDb2x1bW5zU3RhcnQ6WixyZW1vdmVkQ2VsbE1ldGFzOnJlfT1sO3N1cGVyKCJyZW1vdmVfY29sIikscWcodGhpcywi''@;'; put 'put ''aW5kZXgiLHZvaWQgMCkscWcodGhpcywiaW5kZXhlcyIsdm9pZCAwKSxxZyh0aGlzLCJkYXRhIix2b2lkIDApLHFnKHRoaXMsImFtb3VudCIsdm9pZCAwKSxxZyh0aGlzLCJoZWFkZXJzIix2b2lkIDApLHFnKHRoaXMsImNvbHVtblBvc2l0aW9ucyIsdm9pZCAwKSxxZyh0aGlzLCJyb3dQb3Np''@;'; put 'put ''dGlvbnMiLHZvaWQgMCkscWcodGhpcywiZml4ZWRDb2x1bW5zU3RhcnQiLHZvaWQgMCkscWcodGhpcywicmVtb3ZlZENlbGxNZXRhcyIsdm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5pbmRleGVzPWQsdGhpcy5kYXRhPWgsdGhpcy5hbW91bnQ9Zix0aGlzLmhlYWRlcnM9dix0aGlzLmNvbHVt''@;'; put 'put ''blBvc2l0aW9ucz1NLnNsaWNlKDApLHRoaXMucm93UG9zaXRpb25zPUQuc2xpY2UoMCksdGhpcy5maXhlZENvbHVtbnNTdGFydD1aLHRoaXMucmVtb3ZlZENlbGxNZXRhcz1yZX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIiwo''@;'; put 'put ''ZCxoLGYsdik9PnthLmRvbmUoKCk9Pntjb25zdCBEPWwuZ2V0U291cmNlRGF0YUFycmF5KCksWj0obC5jb3VudENvbHMoKStkKSVsLmNvdW50Q29scygpLHJlPVoraC0xLGNlPVtdLGJlPVtdLEVlPVtdO3JldHVybiBHYShELmxlbmd0aC0xLEJlPT57Y29uc3QgcWU9W10scnQ9RFtCZV07R2Eo''@;'; put 'put ''WixyZSxwdD0+e3FlLnB1c2gocnRbbC50b1BoeXNpY2FsQ29sdW1uKHB0KV0pfSksY2UucHVzaChxZSl9KSxHYShoLTEsQmU9PntFZS5wdXNoKGwudG9QaHlzaWNhbENvbHVtbihaK0JlKSl9KSxBcnJheS5pc0FycmF5KGwuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzKSYmR2EoaC0xLEJlPT57''@;'; put 'put ''YmUucHVzaChsLmdldFNldHRpbmdzKCkuY29sSGVhZGVyc1tsLnRvUGh5c2ljYWxDb2x1bW4oWitCZSldfHxudWxsKX0pLG5ldyBrZWUoe2luZGV4OlosaW5kZXhlczpFZSxkYXRhOmNlLGFtb3VudDpoLGhlYWRlcnM6YmUsY29sdW1uUG9zaXRpb25zOmwuY29sdW1uSW5kZXhNYXBwZXIuZ2V0''@;'; put 'put ''SW5kZXhlc1NlcXVlbmNlKCkscm93UG9zaXRpb25zOmwucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCksZml4ZWRDb2x1bW5zU3RhcnQ6bC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LHJlbW92ZWRDZWxsTWV0YXM6bTZlKGwsMCxsLmNvdW50Um93cygpLFoscmUp''@;'; put 'put ''fSl9LHYpfSl9dW5kbyhsLGEpe2wuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD10aGlzLmZpeGVkQ29sdW1uc1N0YXJ0O2NvbnN0IGg9dGhpcy5pbmRleGVzLnNsaWNlKDApLnNvcnQoKSxmPShyZSxjZSxiZSk9PmJlW3RoaXMuaW5kZXhlcy5pbmRleE9mKGhbY2VdKV0sdj10aGlz''@;'; put 'put ''LmRhdGEubGVuZ3RoLE09W107Zm9yKGxldCByZT0wO3JlPHY7cmUrKylNLnB1c2goeXModGhpcy5kYXRhW3JlXSxmKSk7Y29uc3QgRD15cyh0aGlzLmhlYWRlcnMsZiksWj1bXTtsLmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmNvbHVtblBvc2l0aW9ucyksbC5h''@;'; put 'put ''bHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsbC50b1Zpc3VhbENvbHVtbih0aGlzLmluZGV4ZXNbMF0pLHRoaXMuaW5kZXhlcy5sZW5ndGgsIlVuZG9SZWRvLnVuZG8iKSxsLmJhdGNoRXhlY3V0aW9uKCgpPT57bC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dQb3Np''@;'; put 'put ''dGlvbnMpLGwuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuY29sdW1uUG9zaXRpb25zKX0sITApLFluKGwuZ2V0U291cmNlRGF0YUFycmF5KCksKHJlLGNlKT0+e1luKGgsKGJlLEVlKT0+e3JlW2JlXT1NW2NlXVtFZV0sWi5wdXNoKFtjZSxiZSxyZVtiZV1dKX0p''@;'; put 'put ''fSksdHlwZW9mIHRoaXMuaGVhZGVyczwidSImJlluKEQsKHJlLGNlKT0+e2wuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzW2hbY2VdXT1yZX0pLHRoaXMucmVtb3ZlZENlbGxNZXRhcy5mb3JFYWNoKHJlPT57bGV0W2NlLGJlLEVlXT1yZTtsLnNldENlbGxNZXRhT2JqZWN0KGNlLGJlLEVlKX0p''@;'; put 'put ''LGwuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksbC5zZXRTb3VyY2VEYXRhQXRDZWxsKFosbnVsbCxudWxsLCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlQ29sIixhKSxsLmFsdGVyKCJyZW1vdmVfY29sIix0aGlzLmluZGV4LHRo''@;'; put 'put ''aXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIHd3KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBHNXQoYyl7dmFyIGw9ZnVuY3Rpb24gJDV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9p''@;'; put 'put ''ZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpO''@;'; put 'put ''dW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBEZWUgZXh0''@;'; put 'put ''ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxkYXRhOmQsZml4ZWRSb3dzQm90dG9tOmgsZml4ZWRSb3dzVG9wOmYscm93SW5kZXhlc1NlcXVlbmNlOnYscmVtb3ZlZENlbGxNZXRhczpNfT1sO3N1cGVyKCJyZW1vdmVfcm93Iiksd3codGhpcywiaW5kZXgiLHZvaWQgMCksd3co''@;'; put 'put ''dGhpcywiZGF0YSIsdm9pZCAwKSx3dyh0aGlzLCJmaXhlZFJvd3NCb3R0b20iLHZvaWQgMCksd3codGhpcywiZml4ZWRSb3dzVG9wIix2b2lkIDApLHd3KHRoaXMsInJvd0luZGV4ZXNTZXF1ZW5jZSIsdm9pZCAwKSx3dyh0aGlzLCJyZW1vdmVkQ2VsbE1ldGFzIix2b2lkIDApLHRoaXMuaW5k''@;'; put 'put ''ZXg9YSx0aGlzLmRhdGE9ZCx0aGlzLmZpeGVkUm93c0JvdHRvbT1oLHRoaXMuZml4ZWRSb3dzVG9wPWYsdGhpcy5yb3dJbmRleGVzU2VxdWVuY2U9dix0aGlzLnJlbW92ZWRDZWxsTWV0YXM9TX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlUmVt''@;'; put 'put ''b3ZlUm93IiwoZCxoLGYsdik9PnthLmRvbmUoKCk9Pntjb25zdCBEPWwudG9QaHlzaWNhbFJvdyhkKSxaPUQraC0xLHJlPWcxKGwuZ2V0U291cmNlRGF0YShELDAsRCtoLTEsbC5jb3VudFNvdXJjZUNvbHMoKS0xKSk7cmV0dXJuIG5ldyBEZWUoe2luZGV4OkQsZGF0YTpyZSxmaXhlZFJvd3NC''@;'; put 'put ''b3R0b206bC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSxmaXhlZFJvd3NUb3A6bC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcCxyb3dJbmRleGVzU2VxdWVuY2U6bC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxyZW1vdmVkQ2VsbE1ldGFzOm02ZShsLEQsWiww''@;'; put 'put ''LGwuY291bnRDb2xzKCktMSl9KX0sdil9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFNldHRpbmdzKCksaD1bXTtkLmZpeGVkUm93c0JvdHRvbT10aGlzLmZpeGVkUm93c0JvdHRvbSxkLmZpeGVkUm93c1RvcD10aGlzLmZpeGVkUm93c1RvcCx0aGlzLmRhdGEuZm9yRWFjaCgoZix2KT0+e09i''@;'; put 'put ''amVjdC5rZXlzKGYpLmZvckVhY2goTT0+e2NvbnN0IEQ9cGFyc2VJbnQoTSwxMCk7aC5wdXNoKFt0aGlzLmluZGV4K3YsaXNOYU4oRCk/TTpELGZbTV1dKX0pfSksbC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dJbmRleGVzU2VxdWVuY2UpLGwuYWx0ZXIoImlu''@;'; put 'put ''c2VydF9yb3dfYWJvdmUiLGwudG9WaXN1YWxSb3codGhpcy5pbmRleCksdGhpcy5kYXRhLmxlbmd0aCwiVW5kb1JlZG8udW5kbyIpLGwucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93SW5kZXhlc1NlcXVlbmNlKSx0aGlzLnJlbW92ZWRDZWxsTWV0YXMuZm9yRWFj''@;'; put 'put ''aChmPT57bGV0W3YsTSxEXT1mO2wuc2V0Q2VsbE1ldGFPYmplY3QodixNLEQpfSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnNldFNvdXJjZURhdGFBdENlbGwoaCxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJS''@;'; put 'put ''ZW1vdmVSb3ciLGEpLGwuYWx0ZXIoInJlbW92ZV9yb3ciLGwudG9WaXN1YWxSb3codGhpcy5pbmRleCksdGhpcy5kYXRhLmxlbmd0aCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiB2NmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEs1dChjKXt2YXIgbD1mdW5jdGlvbiBxNXQoYyxsKXtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJp''@;'; put 'put ''bWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6''@;'; put 'put ''YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEllZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtyb3dzOmEsZmluYWxJbmRleDpkfT1sO3N1cGVyKCJyb3dfbW92ZSIpLHY2ZSh0aGlzLCJyb3dzIix2b2lkIDApLHY2ZSh0''@;'; put 'put ''aGlzLCJmaW5hbFJvd0luZGV4Iix2b2lkIDApLHRoaXMucm93cz1hLnNsaWNlKCksdGhpcy5maW5hbFJvd0luZGV4PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZVJvd01vdmUiLChkLGgpPT57ITEhPT1kJiZhLmRvbmUoKCk9Pm5ldyBJZWUo''@;'; put 'put ''e3Jvd3M6ZCxmaW5hbEluZGV4Omh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsUm93TW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksRVEodGhpcy5yb3dzLHRoaXMuZmluYWxSb3dJbmRleCxsLnJvd0luZGV4TWFwcGVyLmdldE51bWJl''@;'; put 'put ''ck9mSW5kZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaChmPT57bGV0e2Zyb206dix0bzpNfT1mO3Y8TSYmKE0tPTEpLGQubW92ZVJvdyhNLHYpfSksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Um93cyh0aGlzLnJvd3NbMF0sdGhpcy5yb3dzWzBdK3RoaXMucm93cy5sZW5n''@;'; put 'put ''dGgtMSl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbFJvd01vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubW92ZVJvd3ModGhpcy5yb3dzLnNsaWNlKCksdGhpcy5maW5hbFJvd0luZGV4KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCks''@;'; put 'put ''bC5zZWxlY3RSb3dzKHRoaXMuZmluYWxSb3dJbmRleCx0aGlzLmZpbmFsUm93SW5kZXgrdGhpcy5yb3dzLmxlbmd0aC0xKX19Y2xhc3MgUmVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSYW5nZTphfT1sO3N1cGVyKCJ1bm1lcmdlX2NlbGxzIiksZnVuY3Rpb24gWDV0KGMs''@;'; put 'put ''bCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKNXQoYyl7dmFyIGw9ZnVuY3Rpb24gUTV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw''@;'; put 'put ''ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY2VsbFJhbmdlPWF9c3RhdGljIHN0YXJ0''@;'; put 'put ''UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyVW5tZXJnZUNlbGxzIiwoZCxoKT0+e2h8fGEuZG9uZSgoKT0+bmV3IFJlZSh7Y2VsbFJhbmdlOmR9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVy''@;'; put 'put ''Vmlld1JlbmRlciIsYSksZC5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC51bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApLGwucmVu''@;'; put 'put ''ZGVyKCl9fWZ1bmN0aW9uIExlZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcm10KGMpe3ZhciBsPWZ1bmN0aW9uIGltdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs''@;'; put 'put ''bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gT2VlKGMsbCxhKXtpZigiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5kbyIp''@;'; put 'put ''LFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuZG8iKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUmVkbyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJlZG8iKTtjb25zdCB5NmU9bmV3IFNldDt2YXIgdE49bmV3IFdlYWtTZXQ7Y2xhc3Mg''@;'; put 'put ''c210IGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInVuZG9SZWRvIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxZTN9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiB0''@;'; put 'put ''bXQoYyxsKXsoZnVuY3Rpb24gbm10KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsdE4pLExlZSh0aGlzLCJkb25l''@;'; put 'put ''QWN0aW9ucyIsW10pLExlZSh0aGlzLCJ1bmRvbmVBY3Rpb25zIixbXSksTGVlKHRoaXMsImlnbm9yZU5ld0FjdGlvbnMiLCExKSxmdW5jdGlvbiBlbXQoYyxsKXtbd2VlLENlZSxTZWUsTWVlLHhlZSxFZWUsVGVlLEFlZSxrZWUsRGVlLEllZSxSZWVdLmZvckVhY2goYT0+YS5zdGFydFJlZ2lz''@;'; put 'put ''dGVyaW5nRXZlbnRzKGMsbCkpfShsLHRoaXMpfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS51bmRvfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gT2VlKHROLGwsbG10KS5jYWxsKGwsLi4uZCl9KSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksT2VlKHROLHRoaXMsY210KS5jYWxsKHRoaXMpLHN1cGVyLmVuYWJsZVBs''@;'; put 'put ''dWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuY2xlYXIoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxPZWUodE4sdGhpcyx1bXQpLmNhbGwodGhpcyl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5n''@;'; put 'put ''ZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJ6Il1dLGNhbGxiYWNrOigpPT57dGhpcy51bmRvKCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJ5Il0sWyJDb250cm9sL01ldGEiLCJTaGlmdCIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlz''@;'; put 'put ''LnJlZG8oKX19XSx7cnVuT25seUlmOmY9PiFmLmFsdEtleSxncm91cDoidW5kb1JlZG8ifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKCJ1bmRvUmVkbyIpfWRvbmUo''@;'; put 'put ''bCxhKXtpZih0aGlzLmlnbm9yZU5ld0FjdGlvbnN8fCJVbmRvUmVkby51bmRvIj09PWF8fCJVbmRvUmVkby5yZWRvIj09PWF8fCJhdXRvIj09PWEpcmV0dXJuO2NvbnN0IGg9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG9TdGFj''@;'; put 'put ''a0NoYW5nZSIsaCxhKSlyZXR1cm47Y29uc3Qgdj1sKCksTT10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmRvbmVBY3Rpb25zLnB1c2godiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixoLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsTSksdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsTSx0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKSl9dW5kbygpe2lmKCF0aGlzLmlzVW5kb0F2YWlsYWJs''@;'; put 'put ''ZSgpKXJldHVybjtjb25zdCBsPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixsKTtjb25zdCBhPXRoaXMuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixsLHRo''@;'; put 'put ''aXMuZG9uZUFjdGlvbnMuc2xpY2UoKSk7Y29uc3QgZD1nMShhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvIixkKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO2NvbnN0IGY9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3Mo''@;'; put 'put ''ImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsZiksYS51bmRvKHRoaXMuaG90LCgpPT57dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMudW5kb25lQWN0aW9ucy5wdXNoKGEpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixmLHRoaXMudW5kb25lQWN0aW9ucy5z''@;'; put 'put ''bGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvIixkKX1yZWRvKCl7aWYoIXRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsbCk7Y29u''@;'; put 'put ''c3QgYT10aGlzLnVuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixsLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBkPWcxKGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG8iLGQpKXJldHVybjt0''@;'; put 'put ''aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgZj10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsZiksYS5yZWRvKHRoaXMuaG90LCgpPT57dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMuZG9uZUFjdGlvbnMu''@;'; put 'put ''cHVzaChhKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsZix0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG8iLGQpfWlzVW5kb0F2YWlsYWJsZSgpe3JldHVybiB0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD4wfWlz''@;'; put 'put ''UmVkb0F2YWlsYWJsZSgpe3JldHVybiB0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPjB9Y2xlYXIoKXt0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MH1kZXN0cm95KCl7dGhpcy5jbGVhcigpLHRoaXMuZG9uZUFjdGlvbnM9bnVsbCx0aGlzLnVu''@;'; put 'put ''ZG9uZUFjdGlvbnM9bnVsbCxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGxtdChjLGwpeyJsb2FkRGF0YSI9PT1sJiZ0aGlzLmNsZWFyKCl9ZnVuY3Rpb24gY210KCl7Y29uc3QgYz1sPT57eTZlLmhhcyhsKXx8KGlsKGdsYFRoZSAiJHtsfSIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIGl0''@;'; put 'put ''IHdpbGwgYmUgcmVtb3ZlZFx4MjAKICAgICAgICAgIGZyb20gdGhlIENvcmUgQVBJIGluIHRoZSBmdXR1cmUuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCBmcm9tIHRoZSBVbmRvUmVkbyBwbHVnaW5ceDIwCiAgICAgICAgICAoZS5nLiBcYGhvdEluc3RhbmNlLmdldFBsdWdpbigidW5kb1JlZG8i''@;'; put 'put ''KS4ke2x9KClcYCkuYCkseTZlLmFkZChsKSl9O3RoaXMuaG90LnVuZG89KCk9PntjKCJ1bmRvIiksdGhpcy51bmRvKCl9LHRoaXMuaG90LnJlZG89KCk9PntjKCJyZWRvIiksdGhpcy5yZWRvKCl9LHRoaXMuaG90LmlzVW5kb0F2YWlsYWJsZT0oKT0+KGMoImlzVW5kb0F2YWlsYWJsZSIpLHRo''@;'; put 'put ''aXMuaXNVbmRvQXZhaWxhYmxlKCkpLHRoaXMuaG90LmlzUmVkb0F2YWlsYWJsZT0oKT0+KGMoImlzUmVkb0F2YWlsYWJsZSIpLHRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpLHRoaXMuaG90LmNsZWFyVW5kbz0oKT0+e2MoImNsZWFyIiksdGhpcy5jbGVhcigpfSx0aGlzLmhvdC51bmRvUmVkbz10''@;'; put 'put ''aGlzfWZ1bmN0aW9uIHVtdCgpe2RlbGV0ZSB0aGlzLmhvdC51bmRvLGRlbGV0ZSB0aGlzLmhvdC5yZWRvLGRlbGV0ZSB0aGlzLmhvdC5pc1VuZG9BdmFpbGFibGUsZGVsZXRlIHRoaXMuaG90LmlzUmVkb0F2YWlsYWJsZSxkZWxldGUgdGhpcy5ob3QuY2xlYXJVbmRvLGRlbGV0ZSB0aGlzLmhv''@;'; put 'put ''dC51bmRvUmVkb31mdW5jdGlvbiBuTigpeyhmdW5jdGlvbiBPYXQoKXtIZChrXyksSGQoSFgpLEhkKEJwZSksSGQoJHBlKSxIZChLcGUpLEhkKFJYKSxIZChxcGUpLEhkKFhwZSksSGQoUXBlKSxIZChhOSksSGQoZTRlKX0pKCksZnVuY3Rpb24gcnN0KCl7SWgoSV8pLEloKG9UKSxJaCgkWCks''@;'; put 'put ''SWgoR1gpLEloKHFYKSxJaChZWCksSWgoYUopLEloKG9KKSxJaChzSiksSWgoQWcpLEloKGxKKX0oKSxmdW5jdGlvbiBkc3QoKXtZNyhjVCksWTcoY0opLFk3KEtQKSxZNyh1SiksWTcocVApfSgpLGZ1bmN0aW9uIENzdCgpe0cyKGhzdCksRzIoZnN0KSxHMihnc3QpLEcyKG1zdCksRzIodnN0''@;'; put 'put ''KSxHMihic3QpLEcyKHlzdCksRzIoX3N0KSxHMihJcGUpLEcyKHdzdCl9KCksZnVuY3Rpb24gZG10KCl7UHMoZFQpLFBzKHRsdCksUHMocFQpLFBzKE9sdCksUHMoemx0KSxQcyhhZ2UpLFBzKE5jdCksUHModXV0KSxQcyhERiksUHMoSTB0KSxQcyhyMXQpLFBzKGQxdCksUHMoTkYpLFBzKHEx''@;'; put 'put ''dCksUHMoJGh0KSxQcyhrMnQpLFBzKG5mdCksUHMocGZ0KSxQcyhFZnQpLFBzKEJmdCksUHMocWZ0KSxQcyh2M3QpLFBzKEUzdCksUHModXB0KSxQcyh6cHQpLFBzKEdwdCksUHMoXzR0KSxQcyh1Z3QpLFBzKE9ndCksUHMoVWd0KSxQcyhyNXQpLFBzKGg1dCksUHMoUzV0KSxQcyhzbXQpfSgp''@;'; put 'put ''fWxldCBuZj0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSl9fXJldHVybiBjfSkoKSxD''@;'; put 'put ''dz0oKCk9PntjbGFzcyBje25nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOltfVyxkaGVdLGltcG9y''@;'; put 'put ''dHM6W1JhLFJjLHpjLHowLG5mXX0pfX1yZXR1cm4gY30pKCksTUE9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIo''@;'; put 'put ''e2ltcG9ydHM6W1JhXX0pfX1yZXR1cm4gY30pKCksXzZlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBv''@;'; put 'put ''cnRzOltSYSx6MCxSYSxSY119KX19cmV0dXJuIGN9KSgpLEc5PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtp''@;'; put 'put ''bXBvcnRzOltSYSxSYyx6MCx6YyxDdyxNQSxuZixfNmVdfSl9fXJldHVybiBjfSkoKTtjbGFzcyBQZWV7Y29uc3RydWN0b3IoKXt0aGlzLnF1ZXVlPVtdfWFkZFRvUXVldWUobCl7dGhpcy5xdWV1ZS5wdXNoKC4uLmwpfX12YXIgRmVlLEhlZSxOZWUsVmVlLEJlZTtuTigpLGZ1bmN0aW9uIGht''@;'; put 'put ''dChjKXtjb25zdCBsPSEodHlwZW9mIHdpbmRvdz4idSIpJiZ3aW5kb3cualF1ZXJ5O2wmJihsLmZuLmhhbmRzb250YWJsZT1mdW5jdGlvbihhKXtjb25zdCBkPXRoaXMuZmlyc3QoKTtsZXQgZixoPWQuZGF0YSgiaGFuZHNvbnRhYmxlIik7aWYoInN0cmluZyIhPXR5cGVvZiBhKXtjb25zdCBa''@;'; put 'put ''PWF8fHt9O3JldHVybiBoP2gudXBkYXRlU2V0dGluZ3MoWik6KGg9bmV3IGMuQ29yZShkWzBdLFopLGQuZGF0YSgiaGFuZHNvbnRhYmxlIixoKSxoLmluaXQoKSksZH1pZihoKXtpZighKHR5cGVvZiBoW2FdPCJ1IikpdGhyb3cgbmV3IEVycm9yKGBIYW5kc29udGFibGUgZG8gbm90IHByb3Zp''@;'; put 'put ''ZGUgYWN0aW9uOiAke2F9YCk7Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodj4xP3YtMTowKSxEPTE7RDx2O0QrKylNW0QtMV09YXJndW1lbnRzW0RdO2Y9aFthXS5jYWxsKGgsLi4uTSksImRlc3Ryb3kiPT09YSYmZC5yZW1vdmVEYXRhKCl9cmV0dXJuIGZ9KX0ob3Mp''@;'; put 'put ''LG9zLl9fR2hvc3RUYWJsZT1kSixvcy5fZ2V0TGlzdGVuZXJzQ291bnRlcj1mdW5jdGlvbiBCWGUoKXtyZXR1cm4gWU99LG9zLl9nZXRSZWdpc3RlcmVkTWFwc0NvdW50ZXI9ZnVuY3Rpb24gWnR0KCl7cmV0dXJuIHpLfSxvcy5FdmVudE1hbmFnZXI9ajI7Y29uc3QgZm10PVtJLE8sVSxZLEYs''@;'; put 'put ''dyxfLEssUCxnLHosTF0scG10PVtCLE5dO29zLmhlbHBlcj17fSxvcy5kb209e30sWW4oZm10LGM9PntZbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjKSxsPT57Il8iIT09bC5jaGFyQXQoMCkmJihvcy5oZWxwZXJbbF09Y1tsXSl9KX0pLFluKHBtdCxjPT57WW4oT2JqZWN0LmdldE93''@;'; put 'put ''blByb3BlcnR5TmFtZXMoYyksbD0+eyJfIiE9PWwuY2hhckF0KDApJiYob3MuZG9tW2xdPWNbbF0pfSl9KSxvcy5jZWxsVHlwZXM9bnVsbCE9PShGZWU9b3MuY2VsbFR5cGVzKSYmdm9pZCAwIT09RmVlP0ZlZTp7fSxZbihRbnQoKSxjPT57b3MuY2VsbFR5cGVzW2NdPU1YKGMpfSksb3MuY2Vs''@;'; put 'put ''bFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGU9RzIsb3MuY2VsbFR5cGVzLmdldENlbGxUeXBlPU1YLG9zLmVkaXRvcnM9bnVsbCE9PShIZWU9b3MuZWRpdG9ycykmJnZvaWQgMCE9PUhlZT9IZWU6e30sWW4oTFhlKCksYz0+e29zLmVkaXRvcnNbYCR7cDEoYyl9RWRpdG9yYF09V08oYyl9KSxvcy5l''@;'; put 'put ''ZGl0b3JzLnJlZ2lzdGVyRWRpdG9yPUhkLG9zLmVkaXRvcnMuZ2V0RWRpdG9yPVdPLG9zLnJlbmRlcmVycz1udWxsIT09KE5lZT1vcy5yZW5kZXJlcnMpJiZ2b2lkIDAhPT1OZWU/TmVlOnt9LFluKGRKZSgpLGM9Pntjb25zdCBsPVFPKGMpOyJiYXNlIj09PWMmJihvcy5yZW5kZXJlcnMuY2Vs''@;'; put 'put ''bERlY29yYXRvcj1sKSxvcy5yZW5kZXJlcnNbYCR7cDEoYyl9UmVuZGVyZXJgXT1sfSksb3MucmVuZGVyZXJzLnJlZ2lzdGVyUmVuZGVyZXI9SWgsb3MucmVuZGVyZXJzLmdldFJlbmRlcmVyPVFPLG9zLnZhbGlkYXRvcnM9bnVsbCE9PShWZWU9b3MudmFsaWRhdG9ycykmJnZvaWQgMCE9PVZl''@;'; put 'put ''ZT9WZWU6e30sWW4ocEplKCksYz0+e29zLnZhbGlkYXRvcnNbYCR7cDEoYyl9VmFsaWRhdG9yYF09cksoYyl9KSxvcy52YWxpZGF0b3JzLnJlZ2lzdGVyVmFsaWRhdG9yPVk3LG9zLnZhbGlkYXRvcnMuZ2V0VmFsaWRhdG9yPXJLLG9zLnBsdWdpbnM9bnVsbCE9PShCZWU9b3MucGx1Z2lucykm''@;'; put 'put ''JnZvaWQgMCE9PUJlZT9CZWU6e30sWW4obksoKSxjPT57b3MucGx1Z2luc1tjXT1JRShjKX0pLG9zLnBsdWdpbnNbYCR7cDEoRnMuUExVR0lOX0tFWSl9UGx1Z2luYF09RnMsb3MucGx1Z2lucy5yZWdpc3RlclBsdWdpbj1Qcyxvcy5wbHVnaW5zLmdldFBsdWdpbj1JRTtjb25zdCBqZWU9b3Ms''@;'; put 'put ''emVlPShjLGwsYSk9Pntmb3IobGV0IGQgb2YgYyl7Y29uc3QgaD1sLmZpbmQodj0+di5kYXRhPT09ZC5OQU1FKSxmPWEudmFyc1tkLk5BTUVdO2YmJihkLlRZUEU9WyJEQVRFIiwiREFURVRJTUUiLCJUSU1FIl0uaW5jbHVkZXMoZC5ERFRZUEUpPyJudW0iOmYudHlwZSksaCYmZC5ERVNDJiYo''@;'; put 'put ''aC5kZXNjPWQuREVTQyksaCYmZi5sZW5ndGgmJihoLmxlbmd0aD1wYXJzZUludChmLmxlbmd0aCkpLGgmJmQuQ0xTX1JVTEUmJihoLmNsc1J1bGU9ZC5DTFNfUlVMRSl9cmV0dXJuIGx9O2Z1bmN0aW9uIFVlZShjLGwpe2lmKG51bGw9PWN8fCFpc05hTihjKSYmaXNGaW5pdGUoYykpcmV0dXJu''@;'; put 'put ''IGwmJmwoITApLCEwO2NvbnN0IGE9KDAsZ2cuaXNTcGVjaWFsTWlzc2luZykoYyk7cmV0dXJuIGwmJmwoYSksYX1jb25zdCB3NmU9e0NBU0U6KGMsbCk9Pntzd2l0Y2gobCl7Y2FzZSJVUENBU0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRlcyhjKXx8InN0cmluZyI9PXR5cGVvZiBj''@;'; put 'put ''JiZjLnRvU3RyaW5nKCk9PT1jLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtjYXNlIkxPV0NBU0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRlcyhjKXx8InN0cmluZyI9PXR5cGVvZiBjJiZjLnRvU3RyaW5nKCk9PT1jLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKX1yZXR1cm4hMH0s''@;'; put 'put ''TUlOVkFMOihjLGwpPT57Y29uc3QgYT1VZWUoYyksZD1wYXJzZUZsb2F0KGMpO3JldHVybighYXx8IWlzTmFOKGQpKSYmZD49TnVtYmVyKGwudG9TdHJpbmcoKSl9LE1BWFZBTDooYyxsKT0+e2NvbnN0IGE9VWVlKGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4hKCFhfHwhaXNOYU4oZCkpfHxk''@;'; put 'put ''PD1OdW1iZXIobC50b1N0cmluZygpKX0sTk9UTlVMTDooYyxsKT0+bnVsbCE9YyYmYy50b1N0cmluZygpLmxlbmd0aD4wfTt2YXIgWmVlPXkoNzgzNzUpO2NsYXNzIHltdCBleHRlbmRzIGplZS5lZGl0b3JzLkF1dG9jb21wbGV0ZUVkaXRvcntjb25zdHJ1Y3RvcihsKXtzdXBlcihsKX1jcmVh''@;'; put 'put ''dGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCl9b3BlbihsKXtzdXBlci5vcGVuKGwpLHRoaXMuaXNDZWxsTnVtZXJpYygpP3RoaXMuaHRDb250YWluZXIuY2xhc3NMaXN0LmFkZCgibnVtZXJpY0xpc3Rib3giKTp0aGlzLmh0Q29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm51''@;'; put 'put ''bWVyaWNMaXN0Ym94Iil9aXNDZWxsTnVtZXJpYygpe3JldHVybiB0aGlzLmNlbGxQcm9wZXJ0aWVzPy5jbGFzc05hbWU/LmluY2x1ZGVzKCJodE51bWVyaWMiKX19Y2xhc3MgQzZle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXt0aGlzLnJ1bGVzPVtdLHRoaXMuZHFydWxlcz1bXSx0aGlzLmRx''@;'; put 'put ''ZGF0YT1bXSx0aGlzLmhpZGRlbkNvbHVtbnM9W10sdGhpcy5wcmltYXJ5S2V5cz1bXSx0aGlzLmV4ZWN1dGVIb3RWYWxpZGF0b3I9KE0sRCxaKT0+e2NvbnN0IHJlPXsuLi5NLHZhbGlkYXRvcjp2b2lkIDAsY29ycmVjdEZvcm1hdDohMSxyb3c6MCxjb2w6MCxpbnN0YW5jZTpuZXcgamVlKGRv''@;'; put 'put ''Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHt9KSx2aXN1YWxSb3c6MCx2aXN1YWxDb2w6MCxwcm9wOjB9O251bGw9PUQmJihEPSIiKSxNJiZNLnZhbGlkYXRvciYmImZ1bmN0aW9uIj09dHlwZW9mIE0udmFsaWRhdG9yP00udmFsaWRhdG9yLmNhbGwocmUsRCxjZT0+e1omJlooY2UpfSk6''@;'; put 'put ''WiYmWighMSl9LHRoaXMucmVnaXN0ZXJDdXN0b21FZGl0b3JzKCksdGhpcy5zYXNwYXJhbXM9bCx0aGlzLmhvdEluc3RhbmNlPXYsdGhpcy5ydWxlcz0oYz0+e3RyeXtyZXR1cm4gSlNPTi5wYXJzZShgWyR7Y31dYCl9Y2F0Y2h7cmV0dXJuW119fSkobC5DT0xUWVBFKSx0aGlzLnJ1bGVzPXpl''@;'; put 'put ''ZShkLHRoaXMucnVsZXMsYSksdGhpcy5ydWxlcz0oYz0+e2lmKCFaZWVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0pcmV0dXJuIGM7Zm9yKGxldCBhIG9mIGMpIm51bWVyaWMiPT09YS50eXBlJiYoYS5udW1lcmljRm9ybWF0PXtwYXR0ZXJuOiIwLDAiLGN1bHR1cmU6d2luZG93Lm5hdmln''@;'; put 'put ''YXRvci5sYW5ndWFnZX0pO3JldHVybiBjfSkodGhpcy5ydWxlcyksdGhpcy5kcXJ1bGVzPWgsdGhpcy5kcWRhdGE9Zix0aGlzLnByaW1hcnlLZXlzPWwuUEsuc3BsaXQoIiAiKSx0aGlzLnVwZGF0ZURxRGF0YSgpLHRoaXMuc2V0dXBWYWxpZGF0aW9ucygpfXJlZ2lzdGVyQ3VzdG9tRWRpdG9y''@;'; put 'put ''cygpe2plZS5lZGl0b3JzLnJlZ2lzdGVyRWRpdG9yKCJhdXRvY29tcGxldGUuY3VzdG9tIix5bXQpfWdldFJ1bGVzKCl7cmV0dXJuIHRoaXMucnVsZXN9Z2V0UnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3JldHVybiB0aGlzLnJ1bGVzW2FdfWdldEhpZGRlbkNvbHVtbnMo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5oaWRkZW5Db2x1bW5zfXVwZGF0ZVJ1bGUobCxhKXtsZXQgZD10aGlzLmdldFJ1bGVJbmRleChsKTt0aGlzLnJ1bGVzW2RdPXsuLi50aGlzLnJ1bGVzW2RdLC4uLmF9fXJlbW92ZVJ1bGUobCl7Y29uc3QgYT10aGlzLmdldFJ1bGVJbmRleChsKTt0aGlzLnJ1bGVzLnNw''@;'; put 'put ''bGljZShhLDEpfWdldERxRGV0YWlscyhsKXtyZXR1cm4gbD90aGlzLmRxcnVsZXMuZmlsdGVyKGE9PmEuQkFTRV9DT0w9PT1sKTp0aGlzLmRxcnVsZXN9aXNEcUNvbChsKXtyZXR1cm4hIXRoaXMuZHFydWxlcy5maW5kKGE9PmEuQkFTRV9DT0w9PT1sKX1oYXNEcVJ1bGVzKGwsYSxkPSExKXty''@;'; put 'put ''ZXR1cm4gZD90aGlzLmRxcnVsZXMuZmlsdGVyKGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSkubGVuZ3RoPT09YS5sZW5ndGg6ISF0aGlzLmRxcnVsZXMuZmluZChoPT5oLkJBU0VfQ09MPT09bCYmYS5pbmNsdWRlcyhoLlJVTEVfVFlQRSkpfWdldERxRHJvcGRv''@;'; put 'put ''d25Tb3VyY2UobCl7bGV0IGE9W107cmV0dXJuIHRoaXMuZHFydWxlcy5mb3JFYWNoKGQ9PntkLkJBU0VfQ09MLnRvU3RyaW5nKCk9PT1sLmRhdGEmJmwuZGF0YS50b1N0cmluZygpJiZbIkhBUkRTRUxFQ1QiLCJTT0ZUU0VMRUNUIiwiSEFSRFNFTEVDVF9IT09LIiwiU09GVFNFTEVDVF9IT09L''@;'; put 'put ''Il0uaW5jbHVkZXMoZC5SVUxFX1RZUEUudG9TdHJpbmcoKSkmJnRoaXMuZHFkYXRhLmZpbHRlcihoPT5oLkJBU0VfQ09MPT09ZC5CQVNFX0NPTCkuZm9yRWFjaChoPT57YS5wdXNoKGwudHlwZSYmIm51bWVyaWMiPT09bC50eXBlP051bWJlcihoLlJVTEVfREFUQSk6aC5SVUxFX0RBVEEpfSl9''@;'; put 'put ''KSxhfXVwZGF0ZURxRGF0YSgpe3RoaXMuZHFkYXRhLmxlbmd0aD4wJiYoYz0+e2NvbnN0IGw9W107cmV0dXJuIHRoaXMuZHFkYXRhLmZvckVhY2goYT0+e2wuaW5jbHVkZXMoYS5CQVNFX0NPTCl8fGwucHVzaChhLkJBU0VfQ09MKX0pLGx9KSgpLmZvckVhY2goYT0+e2xldCBkPSExO3RoaXMu''@;'; put 'put ''ZHFydWxlcy5sZW5ndGg+MCYmdGhpcy5kcXJ1bGVzLmZvckVhY2goaD0+e2guQkFTRV9DT0w9PT1hJiYoIlNPRlRTRUxFQ1QiPT09aC5SVUxFX1RZUEV8fCJIQVJEU0VMRUNUIj09PWguUlVMRV9UWVBFKSYmKGQ9ITApfSksZHx8dGhpcy5kcXJ1bGVzLnB1c2goe0JBU0VfQ09MOmEsUlVMRV9U''@;'; put 'put ''WVBFOiJTT0ZUU0VMRUNUIixSVUxFX1ZBTFVFOmEsWDoxfSl9KX1zZXR1cFZhbGlkYXRpb25zKCl7Zm9yKGxldCBsPTA7bDx0aGlzLnJ1bGVzLmxlbmd0aDtsKyspe2NvbnN0IGE9dGhpcy5ydWxlc1tsXS5kYXRhfHwiIjtpZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWEp''@;'; put 'put ''e2lmKHRoaXMuaXNEcUNvbChhKSl7bGV0IGg9dGhpcy5nZXREcURyb3Bkb3duU291cmNlKHRoaXMucnVsZXNbbF0pO2gubGVuZ3RoPjAmJih0aGlzLnJ1bGVzW2xdLnNvdXJjZT1oLHRoaXMucnVsZXNbbF0udHlwZT0iYXV0b2NvbXBsZXRlIix0aGlzLnJ1bGVzW2xdLmVkaXRvcj0iYXV0b2Nv''@;'; put 'put ''bXBsZXRlLmN1c3RvbSIsdGhpcy5ydWxlc1tsXS5maWx0ZXI9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiU09GVFNFTEVDVCJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMCksdGhp''@;'; put 'put ''cy5oYXNEcVJ1bGVzKGEsWyJTT0ZUU0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJIQVJEU0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMCksdGhpcy5oYXNEcVJ1bGVzKGEsWyJOT1ROVUxMIl0pJiYodGhp''@;'; put 'put ''cy5ydWxlc1tsXS5hbGxvd0VtcHR5PSExKX0idHJ1ZSI9PT10aGlzLnJ1bGVzW2xdLmNvcnJlY3RGb3JtYXQmJih0aGlzLnJ1bGVzW2xdLmNvcnJlY3RGb3JtYXQ9ITApLHRoaXMuc2V0RGVmYXVsdFZhbGlkYXRvcih0aGlzLGwpLHRoaXMuc2V0Q29sdW1uTGV2ZWxTZWN1cml0eShsKX19dGhp''@;'; put 'put ''cy5zYXNwYXJhbXM/LkNMU19GTEFHJiZ0aGlzLmhpZGRlbkNvbHVtbnMucHVzaCgwKX1zZXREZWZhdWx0VmFsaWRhdG9yKGwsYSl7dGhpcy5ydWxlc1thXS52YWxpZGF0b3I9ZnVuY3Rpb24oZCxoKXtjb25zdCBmPWwucnVsZXNbYV0uZGF0YT8udG9TdHJpbmcoKSx2PWwucnVsZXNbYV0udHlw''@;'; put 'put ''ZXx8IiI7bGV0IE09bnVsbDtyZXR1cm4iYXV0b2NvbXBsZXRlIiE9PXRoaXMuZWRpdG9yJiYiYXV0b2NvbXBsZXRlLmN1c3RvbSIhPT10aGlzLmVkaXRvcnx8KGwuZ2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKCJhdXRvY29tcGxldGUiKS5jYWxsKHRoaXMsZCxEPT57TT1EfSksTSk/KGwuZ2V0''@;'; put 'put ''SGFuZHNvbnRhYmxlVmFsaWRhdG9yKHYpLmNhbGwodGhpcyxkLEQ9PntNPUR9KSxNP2wubGVuZ3RoQ2hlY2soZCxsLnJ1bGVzW2FdLmxlbmd0aCx2KT9sLmlzRHFDb2woZnx8IiIpJiYhKChjLGwpPT57Zm9yKGxldCBhIG9mIGMpaWYodzZlW2EuUlVMRV9UWVBFXSYmIXc2ZVthLlJVTEVfVFlQ''@;'; put 'put ''RV0obCxhLlJVTEVfVkFMVUUpKXJldHVybiBjb25zb2xlLndhcm4oYERRIEludmFsaWQgUmVhc29uOiAke2EuUlVMRV9UWVBFfVxuVmFsdWU6ICR7bH0pXG5SdWxlIFZhbHVlOiAke2EuUlVMRV9WQUxVRS5sZW5ndGg+MCYmIiAiIT09YS5SVUxFX1ZBTFVFP2EuUlVMRV9WQUxVRToiTm90IGRl''@;'; put 'put ''ZmluZWQifWApLCExO3JldHVybiEwfSkobC5nZXREcURldGFpbHMoZnx8IiIpLGQpPyhjb25zb2xlLndhcm4oYERRIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKTp2b2lkIGgoITApOihjb25zb2xlLndhcm4oYExlbmd0aCBWYWxpZGF0aW9uIC0gaW52''@;'; put 'put ''YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSk6KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSkpOihjb25zb2xlLndhcm4oYEhPVCBOYXRpdmUgVmFsaWRhdGlvbiAoYXV0b2NvbXBsZXRlKSAtIGlu''@;'; put 'put ''dmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpfX1sZW5ndGhDaGVjayhsLGEsZCl7aWYoKDAsZ2cuaXNTcGVjaWFsTWlzc2luZykobCl8fG51bGw9PWx8fG51bGw9PWEpcmV0dXJuITA7aWYoIm51bWVyaWMiPT09ZCl7aWYoOD09PWEpcmV0dXJuITA7aWYoYTwzfHxhPjh8fCFOdW1i''@;'; put 'put ''ZXIuaXNJbnRlZ2VyKGEpKXJldHVybiBjb25zb2xlLndhcm4oImludmFsaWQgbGVuZ3RoIGZyb20gU0FTLCBydWxlIGxlbmd0aCBjYW4gb25seSBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMy04IiksITE7Y29uc3QgaD1OdW1iZXIobCk9PT1sJiZsJTEhPTA7aWYoYTw4JiZoKXJldHVybiBjb25z''@;'; put 'put ''b2xlLndhcm4oInJlZHVjZWQgbGVuZ3RoIG51bWVyaWNzIGNhbm5vdCBjb250YWluIGRlY2ltYWxzIGVsc2UgcHJlY2lzaW9uIHdpbGwgYmUgYWZmZWN0ZWQiKSwhMTtzd2l0Y2goYSl7Y2FzZSAzOnJldHVybiBsPD04MTkyO2Nhc2UgNDpyZXR1cm4gbDw9MjA5NzE1MjtjYXNlIDU6cmV0dXJu''@;'; put 'put ''IGw8PTUzNjg3MDkxMjtjYXNlIDY6cmV0dXJuIGw8PTEzNzQzODk1MzQ3MjtjYXNlIDc6cmV0dXJuIGw8PTM1MTg0MzcyMDg4ODMyfX1yZXR1cm4gbC50b1N0cmluZygpLmxlbmd0aDw9YX1nZXRIYW5kc29udGFibGVWYWxpZGF0b3IobCl7c3dpdGNoKGwpe2Nhc2UiYXV0b2NvbXBsZXRlIjpy''@;'; put 'put ''ZXR1cm4gY1Q7Y2FzZSJudW1lcmljIjpyZXR1cm4gVWVlO2Nhc2UiZGF0ZSI6cmV0dXJuIEtQO2Nhc2UidGltZSI6cmV0dXJuIHFQO2RlZmF1bHQ6cmV0dXJuKGEsZCk9PmQ/ZCghMCk6bnVsbH19Z2V0UnVsZUluZGV4KGwpe3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9sOnRoaXMucnVsZXMu''@;'; put 'put ''ZmluZEluZGV4KGE9PmEuZGF0YT09PWwpfXNldENvbHVtbkxldmVsU2VjdXJpdHkobCl7aWYoIXRoaXMuc2FzcGFyYW1zPy5DTFNfRkxBRylyZXR1cm47Y29uc3QgYT10aGlzLnJ1bGVzW2xdO2lmKHRoaXMucHJpbWFyeUtleXMuaW5jbHVkZXMoYS5kYXRhKSYmKGEuY2xzUnVsZT0iUkVBRCIp''@;'; put 'put ''LCJISURFIj09PWEuY2xzUnVsZSYmdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2gobCksIlJFQUQiPT09YS5jbHNSdWxlJiYoYS5yZWFkT25seT0hMCksIkVESVQiPT09YS5jbHNSdWxlKXthLnJlYWRPbmx5PSExO2NvbnN0IGQ9dGhpcy5oaWRkZW5Db2x1bW5zLmluZGV4T2YobCk7dGhpcy5oaWRk''@;'; put 'put ''ZW5Db2x1bW5zLnNwbGljZShkLDEpfX19Y29uc3Qgck49e251bWVyaWM6IiIsZGVmYXVsdDoiIn0sX210PShjLGwpPT5jPyJhdXRvY29tcGxldGUiPT09Yz9sJiZsLnNvdXJjZT9sLnNvdXJjZVswXTpbXTpyTi5oYXNPd25Qcm9wZXJ0eShjKT9yTltjXTpyTi5kZWZhdWx0OnJOLmRlZmF1bHQs''@;'; put 'put ''V2VlPWM9Pm5ldyBEYXRlKE1hdGgucm91bmQoODY0MDAqKGMtMjU1NjkpKjFlMykpLENtdD0oYyxsLGEsZCxoLGYsdik9PihHZWUobCksbC5pbm5lckhUTUw9YCR7Zj9mLnRvU3RyaW5nKCk6IiJ9IDxjZHMtaWNvbiBzaGFwZT0iZXhjbGFtYXRpb24tdHJpYW5nbGUiIHN0YXR1cz0id2Fybmlu''@;'; put 'put ''ZyI+PC9jZHMtaWNvbj5gLGwpLFllZT0oYyxsLGEsZCxoLGYsdik9PihHZWUobCksbC5pbm5lckhUTUw9Znx8IiIsbCksU210PShjLGwsYSxkLGgsZix2KT0+KEdlZShsKSxsLmlubmVySFRNTD1gJHtmP2YudG9TdHJpbmcoKToiIn0gPHNwYW4gY2xhc3M9InNwaW5uZXIgc3Bpbm5lci1zbSB2''@;'; put 'put ''ZXJ0aWNhbC1hbGlnbi1taWRkbGUiPjwvc3Bhbj5gLGwpLEdlZT1jPT57Yy5jbGFzc0xpc3QuY29udGFpbnMoImh0RGFyayIpfHxjLmNsYXNzTGlzdC5hZGQoImh0RGFyayIpfSxTNmU9Yz0+e2xldCBsPSgiMCIrYy5nZXRVVENIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIw''@;'; put 'put ''IitjLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixsKz0oIjAiK2MuZ2V0VVRDU2Vjb25kcygpKS5zbGljZSgtMiksbH0sJGVlPWM9PmMuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoYy5nZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrYy5nZXREYXRlKCkpLnNsaWNlKC0y''@;'; put 'put ''KSxLZWU9Yz0+ISEvXi17MCwxfVxkKyQvLnRlc3QoYyksTTZlPWM9PiEhL15cZCtcLlxkKyQvLnRlc3QoYykscWVlPShjLGwpPT5uZXcgRmlsZShbY10sbCx7bGFzdE1vZGlmaWVkOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSk7dmFyIER1PXkoNjM1NzgpLHg2ZT15KDk0MjQ4KSxFNmU9eSg4Mzgz''@;'; put 'put ''OCk7Y2xhc3MgVDZle2NvbnN0cnVjdG9yKGwpe3RoaXMubGljZW5jZVN0YXRlPWwubGljZW5jZVN0YXRlfXBhcnNlU3ByZWFkc2hlZXRGaWxlKGwsYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKCh2LE0pPT57Y29uc3QgRD1sLnVwbG9hZGVyfHxuZXcgUGVlO2lmKGwud29y''@;'; put 'put ''a2Jvb2spdGhpcy5wYXJzZUV4Y2VsRmlsZShsLGwud29ya2Jvb2ssRCxoKS50aGVuKFo9Pnt2KFopfSkuY2F0Y2goWj0+e00oWil9KTtlbHNle2NvbnN0IHJlPWwuZmlsZTtsLmVuY29kaW5nfHwobC5lbmNvZGluZz0iVVRGLTgiKSxkJiZkKGBMb2FkaW5nICR7cmUubmFtZX0gaW50byB0aGUg''@;'; put 'put ''YnJvd3NlcmApO2xldCBjZT1yZS5uYW1lLnNsaWNlKHJlLm5hbWUubGFzdEluZGV4T2YoIi4iKSsxLHJlLm5hbWUubGFzdEluZGV4T2YoIi4iKSs0KTtpZigieGxzIiE9PWNlLnRvTG93ZXJDYXNlKCkpe2lmKCJjc3YiPT09Y2UudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5wYXJzZUNzdkZp''@;'; put 'put ''bGUobCxELGNlKS50aGVuKGJlPT52KGJlKSkuY2F0Y2goYmU9Pk0oYmUpKTt7bGV0IGJlPSdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+JytsLmZpbGUubmFtZSsnPC9iPiIuIFBsZWFzZSB1cGxvYWQgY3N2IG9yIGV4Y2VsIGZpbGUuJztyZXR1cm4gRC5xdWV1ZS5wb3AoKSxNKGJlKX19e2xldCBi''@;'; put 'put ''ZT1uZXcgRmlsZVJlYWRlcjtiZS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgQmU9ZWUoZnVuY3Rpb24qKHFlKXtjb25zdCBydD15aWVsZCBmLnhzbHhTdGFydFJlYWRpbmcocWUsYSxsLnBhc3N3b3JkKTtpZighcnQpcmV0dXJuIE0oIk5vIHdvcmtib29rIGZvdW5kLiIpO2YucGFyc2VFeGNlbEZp''@;'; put 'put ''bGUobCxydCxELGgpLnRoZW4ocHQ9Pnt2KHB0KX0pLmNhdGNoKHB0PT57TShwdCl9KX0pO3JldHVybiBmdW5jdGlvbihxZSl7cmV0dXJuIEJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksYmUucmVhZEFzQXJyYXlCdWZmZXIocmUpfX19KX1wYXJzZUV4Y2VsRmlsZShsLGEsZCxoKXtyZXR1''@;'; put 'put ''cm4gbmV3IFByb21pc2UoKGYsdik9PntsZXQgTT0hMSxEPVtdO2NvbnN0IFo9WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLmwuaGVhZGVyQXJyYXldLHJlPXRoaXMuc2VhcmNoRGF0YUluRXhjZWwoYSxsKTtsZXQgY2U9W107aWYocmUuZm91bmQ/KE09ITAsY2U9cmUuZm91''@;'; put 'put ''bmQuYXJyYXlEYXRhLHJlLmZvdW5kLmhlYWRlcnMuaW5jbHVkZXMoIl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyIpfHwoY2U9Y2UubWFwKEJlPT4oQmUudW5zaGlmdCh7djoiIn0pLEJlKSkpLGgmJmgoYFNoZWV0OiAke3JlLmZvdW5kLnNoZWV0TmFtZX1cblJhbmdlOiAke3JlLmZv''@;'; put 'put ''dW5kLnN0YXJ0QWRkcmVzc306JHtyZS5mb3VuZC5lbmRBZGRyZXNzfWApKTpEPXJlLm1pc3Npbmd8fFtdLEQubGVuZ3RoPjApe2xldCBCZT1ELm1hcChxZT0+YFNoZWV0OiAke3FlLnNoZWV0TmFtZX0uXG5NaXNzaW5nIGNvbHVtbnM6ICR7cWUubWlzc2luZ0hlYWRlcnMuam9pbigiLCIpfWAp''@;'; put 'put ''LmpvaW4oIlxuXG4iKTtyZXR1cm4gZC5xdWV1ZS5wb3AoKSx2KEJlKX1pZigwPT09Y2UubGVuZ3RofHwwPT09Y2VbMF0ubGVuZ3RoKXtsZXQgQmU9Ik5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIjtyZXR1cm4gZC5xdWV1ZS5wb3AoKSx2KEJlKX1pZigobC5kYXRlVGltZUhlYWRl''@;'; put 'put ''cnMubGVuZ3RoPjB8fGwuZGF0ZUhlYWRlcnMubGVuZ3RoPjB8fGwudGltZUhlYWRlcnMubGVuZ3RoPjApJiYoY2U9dGhpcy51cGRhdGVEYXRlVGltZUNvbHMoWixjZSxsKSksbC54bFJ1bGVzLmxlbmd0aD4wJiYoY2U9dGhpcy51cGRhdGVYTFJ1bGVDb2xzKFosY2UsbCkpLCFNKXtsZXQgQmU9''@;'; put 'put ''IiI7cmV0dXJuIEJlPTA9PT1ELmxlbmd0aD8iTm8gcmVsZXZhbnQgZGF0YSBmb3VuZCBpbiBGaWxlICEiOkQubWFwKHFlPT5gU2hlZXQ6ICR7cWUuc2hlZXROYW1lfS5cbk1pc3NpbmcgY29sdW1uczogJHtxZS5taXNzaW5nSGVhZGVycy5qb2luKCIsIil9YCkuam9pbigiXG5cbiIpLGQucXVl''@;'; put 'put ''dWUucG9wKCksdihCZSl9e2wuaGVhZGVyU2hvdz1aLGNlPWNlLm1hcChKdD0+SnQubWFwKHZuPT4ibiI9PT12bi50fHx2bi53P3ZuLnY6InN0cmluZyI9PXR5cGVvZiB2bi52P3ZuLnYudHJpbSgpOnZuLnYpKSxjZT1jZS5tYXAoSnQ9Pkp0Lm1hcCgodm4sQ24pPT57IXZuJiYwIT09dm4mJih2''@;'; put 'put ''bj0iIik7Y29uc3QgdG49bC5oZWFkZXJTaG93W0NuXTtyZXR1cm4ibnVtZXJpYyI9PT1sLmRjVmFsaWRhdG9yPy5nZXRSdWxlKHRuKT8udHlwZSYmKDAsZ2cuaXNTcGVjaWFsTWlzc2luZykodm4pJiYhdm4uaW5jbHVkZXMoIi4iKSYmKHZuPSIuIit2biksdm59KSk7Y29uc3QgQmU9Y2Uuc2xp''@;'; put 'put ''Y2UoMCx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IHB0LHFlPUR1LnV0aWxzLmpzb25fdG9fc2hlZXQoQmUse3NraXBIZWFkZXI6ITB9KSxydD1EdS51dGlscy5zaGVldF90b19jc3YocWUpO2lmKHJ0PVouam9pbigiLCIpKyJcbiIrcnQsIldMQVRJTjEi''@;'; put 'put ''PT09bC5lbmNvZGluZyl7bGV0IEp0PXg2ZS5kZWNvZGUoRTZlLkJ1ZmZlci5mcm9tKHJ0KSwiQ1AtMTI1MiIpO3B0PW5ldyBCbG9iKFtKdF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KX1lbHNlIHB0PW5ldyBCbG9iKFtydF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtsZXQgZHQ9cWVl''@;'; put 'put ''KHB0LGwuZmlsZS5uYW1lKyIuY3N2Iik7ZC5hZGRUb1F1ZXVlKFtkdF0pfWlmKDA9PT1jZS5sZW5ndGgpcmV0dXJuIHYoYFRhYmxlIGluIHRoZSBmaWxlIGlzIGVtcHR5LiBEYXRhIGZvdW5kIG9uIHNoZWV0OiAke3JlLmZvdW5kPy5zaGVldE5hbWV8fCIifWApO2lmKCFyZS5mb3VuZClyZXR1''@;'; put 'put ''cm4gdigiTm8gcmVsZXZhbnQgZGF0YSBmb3VuZC4gJ2ZvdW5kJyBvYmplY3QgaXMgZW1wdHksIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQuIik7Y29uc3QgYmU9cmUuZm91bmQuc3RhcnRBZGRyZXNzfHwiIixFZT1yZS5mb3VuZC5lbmRBZGRyZXNzfHwiIjtyZXR1cm4gZih7dXBsb2FkZXI6''@;'; put 'put ''ZCxkYXRhOmNlLHJhbmdlU2hlZXRSZXM6e2ZvdW5kOiEhcmUuZm91bmQsc2hlZXROYW1lOnJlLmZvdW5kLnNoZWV0TmFtZSxyYW5nZVN0YXJ0QWRkcmVzczpiZSxyYW5nZUVuZEFkZHJlc3M6RWUscmFuZ2VBZGRyZXNzOmAke2JlfToke0VlfWAsbWlzc2luZ0hlYWRlcnM6RH0saGVhZGVyU2hv''@;'; put 'put ''dzpsLmhlYWRlclNob3d9KX0pfXBhcnNlQ3N2RmlsZShsLGEsZCl7cmV0dXJuIG5ldyBQcm9taXNlKChoLGYpPT57aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT0xLzApcmV0dXJuIGEucXVldWUucG9wKCksZigiRXhjZWwgZmlsZXMgb25seS4gVG8gdW5s''@;'; put 'put ''b2NrIENTViB1cGxvYWRzLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIik7aWYoIldMQVRJTjEiIT09bC5lbmNvZGluZylyZXR1cm4gaCh7dXBsb2FkZXI6YX0pO3tsZXQgdj1uZXcgRmlsZVJlYWRlcjt2Lm9ubG9hZD1EPT57bGV0IFo9eDZlLmRlY29kZShFNmUu''@;'; put 'put ''QnVmZmVyLmZyb20oRC50YXJnZXQucmVzdWx0KSwiQ1AtMTI1MiIpLHJlPW5ldyBCbG9iKFtaXSx7dHlwZTpkfSksY2U9cWVlKHJlLGwuZmlsZS5uYW1lKTtyZXR1cm4gYS5xdWV1ZS5wb3AoKSxhLmFkZFRvUXVldWUoW2NlXSksaCh7dXBsb2FkZXI6YX0pfSx2LnJlYWRBc0FycmF5QnVmZmVy''@;'; put 'put ''KGwuZmlsZSl9fSl9Ynl0ZXNUb01CKGwpe3JldHVybiBwYXJzZUZsb2F0KChsLzEwNDg1NzYpLnRvRml4ZWQoMikpfXhzbHhTdGFydFJlYWRpbmcobCxhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGY9ZWUoZnVuY3Rpb24qKHYsTSl7Y29uc3QgRD1o''@;'; put 'put ''LnRvQnN0cihsLnRhcmdldC5yZXN1bHQpO2xldCBaLHJlPSExO2NvbnN0IGNlPXt0eXBlOiJiaW5hcnkiLGNlbGxEYXRlczohMSxjZWxsRm9ybXVsYTohMCxjZWxsU3R5bGVzOiEwLGNlbGxORjohMSxjZWxsVGV4dDohMSxwYXNzd29yZDpkfTt0cnl7Wj15aWVsZCBoLnhsc3hSZWFkKEQsey4u''@;'; put 'put ''LmNlfSl9Y2F0Y2goYmUpe2lmKCFiZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikpcmV0dXJuIE0oIkVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKTt7cmU9ITA7bGV0IEVlPSExO2Zvcig7cmU7KXtjb25zdCBCZT15aWVsZCBhKHtlcnJvcjpFZX0pO2lmKEJlKXRy''@;'; put 'put ''eXtaPXlpZWxkIGgueGxzeFJlYWQoRCx7Li4uY2UscGFzc3dvcmQ6QmV9KSxyZT0hMSxFZT0hMX1jYXRjaChxZSl7RWU9ITAscWUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpfHwocmU9ITEpfWVsc2UgcmU9ITF9fX1yZXR1cm4gWj92KFopOk0oIkZhaWxlZCB0''@;'; put 'put ''byBwYXJzZSBhIHdvcmtib29rIil9KTtyZXR1cm4gZnVuY3Rpb24odixNKXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX14bHN4UmVhZChsLGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2lmKGEmJmEucGFzc3dvcmQpcmV0dXJuIGNvbnNvbGUuaW5mbygiTm90IHVz''@;'; put 'put ''aW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCAtIGhhcyBwYXNzd29yZCIpLGQoRHUucmVhZChsLGEpKTtpZih0eXBlb2YgV29ya2VyPiJ1IilyZXR1cm4gY29uc29sZS5pbmZvKCJOb3QgdXNpbmcgd29ya2VyIHRvIHBhcnNlIHRoZSBYTFNYIC0gbm8gV29ya2VyIGF2YWlsYWJsZSBpbiB0''@;'; put 'put ''aGlzIGVudmlyb25tZW50IiksZChEdS5yZWFkKGwsYSkpO2NvbnNvbGUuaW5mbygiVXNpbmcgd29ya2VyIHRvIHBhcnNlIHRoZSBYTFNYIik7Y29uc3QgZj1uZXcgV29ya2VyKHkudHUobmV3IFVSTCh5LnAreS51KDQxMSkseS5iKSkpO2Yub25tZXNzYWdlPSh7ZGF0YTp2fSk9PnsicmVhZGlu''@;'; put 'put ''Z19lbmQiPT09di5ldmVudD9kKHYud29ya2Jvb2spOnYuZXJyb3I/aCh2LmVycm9yKTooY29uc29sZS5pbmZvKCJXb3JrZXIgZmFpbGVkIHRvIHBhcnNlIHRoZSBYTFNYIC0gZmFsbGJhY2sgdG8gbm9uIHdvcmtlciBwYXJzaW5nIiksZChEdS5yZWFkKHYsYSkpKX0sZi5wb3N0TWVzc2FnZSh7''@;'; put 'put ''ZGF0YTpsLG9wdHM6YX0pLHNldFRpbWVvdXQoKCk9PmQoRHUucmVhZChsLGEpKSw2ZTUpfSl9c2VhcmNoRGF0YUluRXhjZWwobCxhKXtsZXQgZCxoLGYsdixNPSIiLEQ9W10scmU9WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLmEuaGVhZGVyQXJyYXldLm1hcChiZT0+YmUu''@;'; put 'put ''dG9Mb3dlckNhc2UoKSksY2U9cmUucmVkdWNlKChiZSxFZSk9PihiZVtFZV09LTEsYmUpLHt9KTtmb3IobGV0IGJlIG9mIGwuU2hlZXROYW1lcyl7ZD12b2lkIDAsaD12b2lkIDAsY2U9cmUucmVkdWNlKCh0bixNbik9Pih0bltNbl09LTEsdG4pLHt9KTtsZXQgRWU9W107TT1iZTtjb25zdCBC''@;'; put 'put ''ZT1sLlNoZWV0c1tNXTtpZihPYmplY3Qua2V5cyhCZSkuZm9yRWFjaCh0bj0+e2NvbnN0IE1uPUJlW3RuXS52O2lmKE1uJiYic3RyaW5nIj09dHlwZW9mIE1uKXtjb25zdCBDcj1Nbi50b0xvd2VyQ2FzZSgpO3JlLmluZGV4T2YoQ3IpPi0xJiYoY2VbQ3JdPXRuLGR8fChkPXRuKSxoPXRuKX19''@;'; put 'put ''KSwtMT09PWNlLl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyYmZGVsZXRlIGNlLl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyxFZT1PYmplY3Qua2V5cyhjZSkuZmlsdGVyKHRuPT4tMT09PWNlW3RuXSksRWUubGVuZ3RoPjApe0QucHVzaCh7c2hlZXROYW1lOk0sbWlzc2lu''@;'; put 'put ''Z0hlYWRlcnM6RWUubWFwKHRuPT50bi50b1VwcGVyQ2FzZSgpKX0pO2NvbnRpbnVlfWNvbnN0IHFlPU9iamVjdC5rZXlzKGNlKTtsZXQgZHQscnQ9W10scHQ9W107cWUuc29ydCgodG4sTW4pPT57Y29uc3QgQ3I9YS5oZWFkZXJQa3MuaW5jbHVkZXModG4pPzE6MDtyZXR1cm4oYS5oZWFkZXJQ''@;'; put 'put ''a3MuaW5jbHVkZXMoTW4pPzE6MCktQ3J9KS5mb3JFYWNoKHRuPT57Y29uc3QgTW49Y2VbdG5dLENyPU1uLm1hdGNoKC9cRCsvKSxHcj1Nbi5tYXRjaCgvXGQrLyksbXI9KENyP0NyWzBdOi0xKXx8LTEsYWk9cGFyc2VJbnQoKEdyP0dyWzBdOi0xKXx8LTEpKzE7bGV0IF9pPTA7aWYoZHQpZm9y''@;'; put 'put ''KGxldCBPbj1haTtPbjw9ZHQ7T24rKyl7Y29uc3QgSm49QmVbYCR7bXJ9JHtPbn1gXTtpZihhLmhlYWRlclBrcy5pbmNsdWRlcyh0bikmJih2b2lkIDA9PT1Kbnx8dm9pZCAwPT09Sm4udikpe2R0PU9uO2JyZWFrfXJ0W19pXXx8cnQucHVzaCh7fSksSm4mJihydFtfaV1bdG5dPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgSm4udj9Kbi52LnRyaW0oKTpKbi52KSxwdFtfaV18fHB0LnB1c2goW10pLHB0W19pXS5wdXNoKEpuPz97djoiIn0pLF9pKyt9ZWxzZXtsZXQgT249YWk7Zm9yKDt2b2lkIDA9PT1kdDspe2NvbnN0IHpyPWAke21yfSR7T259YCxKbj1CZVt6cl07aWYoIUpufHx2b2lkIDA9PT1K''@;'; put 'put ''bi52KXtkdD1Pbi0xO2JyZWFrfXJ0W19pXXx8cnQucHVzaCh7fSkscnRbX2ldW3RuXT0ibiI9PT1CZVt6cl0udD9CZVt6cl0udjpCZVt6cl0udz9CZVt6cl0udzoic3RyaW5nIj09dHlwZW9mIEJlW3pyXS52P0JlW3pyXS52LnRyaW0oKTpCZVt6cl0udixwdFtfaV18fHB0LnB1c2goW10pLHB0''@;'; put 'put ''W19pXS5wdXNoKEpuPz97djoiIn0pLE9uKyssX2krK319aWYoZCYmaCl7Y29uc3QgT249aC5tYXRjaCgvXEQrLyk7Zj1kLHY9YCR7T259JHtkdH1gfX0pO2NvbnN0IHZuPVtdO2xldCBDbjtyZXR1cm4gcnQuZm9yRWFjaCgodG4sTW4pPT57bGV0IENyPSExO2EuaGVhZGVyUGtzLmZvckVhY2go''@;'; put 'put ''R3I9Pnt2b2lkIDA9PT10bltHci50b0xvd2VyQ2FzZSgpXSYmKENyPSEwKX0pLENyJiYodm4ucHVzaChNbiksQ258fChDbj1NbikpfSksQ24/KHJ0LnNwbGljZShDbiwxLzApLHB0LnNwbGljZShDbiwxLzApKTp2bi5zb3J0KCh0bixNbik9Pk1uLXRuKS5mb3JFYWNoKHRuPT57cnQuc3BsaWNl''@;'; put 'put ''KHRuLDEpLHB0LnNwbGljZSh0biwxKX0pLHB0Lmxlbmd0aD97Zm91bmQ6e2RhdGE6cnQsYXJyYXlEYXRhOnB0LHNoZWV0TmFtZTpNLHN0YXJ0QWRkcmVzczpmLGVuZEFkZHJlc3M6dixoZWFkZXJzOnFlfX06e319cmV0dXJue21pc3Npbmc6RH19dXBkYXRlRGF0ZVRpbWVDb2xzKGwsYSxkKXtp''@;'; put 'put ''ZihkLmRhdGVIZWFkZXJzLmxlbmd0aD4wKXtjb25zdCBoPVtdO2QuZGF0ZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1sLmluZGV4T2YoZikmJmgucHVzaChsLmluZGV4T2YoZikpfSksYS5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2NvbnN0IE09Zlt2XTtpZihLZWUoTS52KSl7Y29uc3Qg''@;'; put 'put ''RD1XZWUoTnVtYmVyKE0udikpO00udj1ELmdldEZ1bGxZZWFyKCkrIi0iKygiMCIrKEQuZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpKyItIisoIjAiK0QuZ2V0RGF0ZSgpKS5zbGljZSgtMil9ZWxzZSBpZihNJiZNLnYmJi0xPT09TS52LnRvU3RyaW5nKCkuaW5kZXhPZigiOiIpKXtjb25zdCBE''@;'; put 'put ''PW5ldyBEYXRlKE0udik7IkludmFsaWQgRGF0ZSIhPT1ELnRvVVRDU3RyaW5nKCkmJihNLnY9JGVlKEQpKX1mW3ZdPU19KX0pfWlmKGQudGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtdO2QudGltZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1sLmluZGV4T2YoZikmJmgucHVzaChsLmlu''@;'; put 'put ''ZGV4T2YoZikpfSksYS5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2NvbnN0IE09Zlt2XTtpZihLZWUoTS52KXx8TTZlKE0udil8fE0udi5pbmNsdWRlcygiRS0iKSl7Y29uc3QgRD1XZWUoTnVtYmVyKE0udikpO00udj1TNmUoRCl9Zlt2XT1NfSl9KX1pZihkLmRhdGVUaW1lSGVhZGVycy5s''@;'; put 'put ''ZW5ndGg+MCl7bGV0IGg9W107ZC5kYXRlVGltZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1sLmluZGV4T2YoZikmJmgucHVzaChsLmluZGV4T2YoZikpfSksYS5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2NvbnN0IE09Zlt2XTtpZihLZWUoTS52KXx8TTZlKE0udikpe2NvbnN0IEQ9V2Vl''@;'; put 'put ''KE51bWJlcihNLnYpKTtNLnY9JGVlKEQpKyIgIitTNmUoRCl9ZWxzZXtpZigtMT09PU0udi5pbmRleE9mKCIgIikmJi0xIT09TS52LmluZGV4T2YoIjoiKSl7bGV0IFo9TS52LnN1YnN0cmluZygwLE0udi5pbmRleE9mKCI6IikpO1o9WisiICIrTS52LnN1YnN0cmluZyhNLnYuaW5kZXhPZigi''@;'; put 'put ''OiIpKzEpLE0udj1afWNvbnN0IEQ9bmV3IERhdGUoTS52KTsiSW52YWxpZCBEYXRlIiE9PUQudG9VVENTdHJpbmcoKSYmKE0udj0kZWUoRCkrIiAiKyhjPT57bGV0IGw9KCIwIitjLmdldEhvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIGw9bCsoIjAiK2MuZ2V0TWludXRlcygpKS5zbGlj''@;'; put 'put ''ZSgtMikrIjoiLGwrPSgiMCIrYy5nZXRTZWNvbmRzKCkpLnNsaWNlKC0yKSxsfSkoRCkpfWZbdl09TX0pfSl9cmV0dXJuIGF9dXBkYXRlWExSdWxlQ29scyhsLGEsZCl7aWYoZC54bFJ1bGVzLmxlbmd0aD4wKXtjb25zdCBoPVtdO2QueGxSdWxlcy5mb3JFYWNoKGY9PnstMSE9PWwuaW5kZXhP''@;'; put 'put ''ZihmLlhMX0NPTFVNTikmJihmLmluZGV4PWwuaW5kZXhPZihmLlhMX0NPTFVNTiksaC5wdXNoKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdi5pbmRleF07IkZPUk1VTEEiPT09di5YTF9SVUxFJiYiZiJpbiBNJiYoIm4iPT09TS50P00udj0iPSIrTS5mOk0u''@;'; put 'put ''dz0iPSIrTS5mKSxmW3ZdPU19KX0pfXJldHVybiBhfXRvQnN0cihsKXtsZXQgYT1uZXcgVWludDhBcnJheShsKSxkPSIiLGg9YS5ieXRlTGVuZ3RoO2ZvcihsZXQgZj0wO2Y8aDtmKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZShhW2ZdKTtyZXR1cm4gZH19bGV0IEE2ZT0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnByb21wdEV4Y2VsUGFz''@;'; put 'put ''c3dvcmQ9Zj0+bmV3IFByb21pc2UoKHYsTSk9Pnt0aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2Uub3BlbihmKS5zdWJzY3JpYmUoRD0+e3YoRC5wYXNzd29yZCl9KX0pfXBhcnNlRXhjZWxGaWxlKGEsZCxoKXtyZXR1cm4gbmV3IFQ2ZSh7bGljZW5jZVN0YXRlOnRoaXMubGljZW5jZVN0''@;'; put 'put ''YXRlfSkucGFyc2VTcHJlYWRzaGVldEZpbGUoYSx0aGlzLnByb21wdEV4Y2VsUGFzc3dvcmQsZCxoKX14bHN4UmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57Y29uc3QgZj1uZXcgVDZlKHtsaWNlbmNlU3RhdGU6dGhpcy5saWNlbmNlU3RhdGV9KTtsZXQgdj1uZXcgRmls''@;'; put 'put ''ZVJlYWRlcjt2Lm9ubG9hZD1NPT57Zi54c2x4U3RhcnRSZWFkaW5nKE0sdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkKS50aGVuKEQ9PntkKEQpfSkuY2F0Y2goRD0+e2goRCl9KX0sdi5yZWFkQXNBcnJheUJ1ZmZlcihhKX0pfXBhcnNlRXhjZWxTaGVldE5hbWVzKGEpe3ZhciBkPXRoaXM7cmV0''@;'; put 'put ''dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoaCxmKT0+e2NvbnN0IHY9bmV3IEZpbGVSZWFkZXI7aWYoIWEpcmV0dXJuIGNvbnNvbGUud2FybigiZmlsZSBpcyBtaXNzaW5nIiksaCh7c2hlZXROYW1lczpbXX0pO3Yub25sb2FkPWZ1bmN0aW9uKCl7dmFyIE09ZWUoZnVu''@;'; put 'put ''Y3Rpb24qKEQpe2lmKCFEPy50YXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJGaWxlIHJlYWRlciBldmVudC50YXJnZXQgaXMgbWlzc2luZyIpO2xldCBaLGNlLHJlPSExO2NvbnN0IGJlPUQudGFyZ2V0LnJlc3VsdDt0cnl7Wj1EdS5yZWFkKGJlLHtib29rU2hlZXRzOiEwLHR5cGU6''@;'; put 'put ''ImJpbmFyeSJ9KX1jYXRjaChFZSl7aWYoIUVlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKSlyZXR1cm4gZigiRXJyb3IgcmVhZGluZyB0aGUgZmlsZSIpO3tyZT0hMDtsZXQgQmU9ITE7Zm9yKDtyZTspe2lmKGNlPXlpZWxkIGQucHJvbXB0RXhjZWxQYXNzd29y''@;'; put 'put ''ZCh7ZXJyb3I6QmV9KSwhY2UpcmV0dXJuIHJlPSExLGYoIk5vIHBhc3N3b3JkIHByb3ZpZGVkIik7dHJ5e1o9RHUucmVhZChiZSx7Ym9va1NoZWV0czohMCx0eXBlOiJiaW5hcnkiLHBhc3N3b3JkOmNlfSkscmU9ITEsQmU9ITF9Y2F0Y2gocWUpe0JlPSEwLHFlLm1lc3NhZ2UudG9Mb3dlckNh''@;'; put 'put ''c2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKXx8KHJlPSExKX1pZighY2UpcmV0dXJuIGYoIkludmFsaWQgcGFzc3dvcmQsIGZhaWxlZCB0byBkZWNyeXB0IHRoZSBmaWxlIil9fX1pZighWilyZXR1cm4gZigiRXJyb3IgcGFyc2luZyB0aGUgd29ya2Jvb2siKTt0cnl7cmV0dXJuIGgoe3NoZWV0''@;'; put 'put ''TmFtZXM6Wi5TaGVldE5hbWVzLHBhc3N3b3JkOmNlfSl9Y2F0Y2goRWUpe2NvbnNvbGUuZXJyb3IoRWUpfX0pO3JldHVybiBmdW5jdGlvbihEKXtyZXR1cm4gTS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHYub25lcnJvcj1mdW5jdGlvbihNKXtjb25zb2xlLmxvZyhNKX0sdi5yZWFkQXNC''@;'; put 'put ''aW5hcnlTdHJpbmcoYSl9KX0pKCl9Ynl0ZXNUb01CKGEpe3JldHVybiBwYXJzZUZsb2F0KChhLzEwNDg1NzYpLnRvRml4ZWQoMikpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKGhoZSkseHIodmMpLHhyKHUxKSl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgJDk9dm9pZCAwLFRtdD1bImVuLUdCIixbWyJhIiwicCJdLFsiYW0iLCJwbSJdLCQ5XSxbWyJhbSIsInBtIl0sJDksJDldLFtbIlMiLCJNIiwiVCIs''@;'; put 'put ''IlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIs''@;'; put 'put ''IlNhIl1dLCQ5LFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwdCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2gi''@;'; put 'put ''LCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sJDksW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwxLFs2LDBdLFsiZGQvTU0veSIsImQg''@;'; put 'put ''TU1NIHkiLCJkIE1NTU0geSIsIkVFRUUsIGQgTU1NTSB5Il0sWyJISDptbSIsIkhIOm1tOnNzIiwiSEg6bW06c3MgeiIsIkhIOm1tOnNzIHp6enoiXSxbInsxfSwgezB9IiwkOSwiezF9ICdhdCcgezB9IiwkOV0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIs''@;'; put 'put ''Ilx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJHQlAiLCJceGEzIiwiQnJpdGlzaCBQb3VuZCIse0pQWTpbIkpQXHhhNSIsIlx4YTUiXSxVU0Q6WyJVUyQiLCIkIl19LCJsdHIiLGZ1bmN0aW9uIEVtdChjKXtjb25zdCBhPU1h''@;'; put 'put ''dGguZmxvb3IoTWF0aC5hYnMoYykpLGQ9Yy50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PWEmJjA9PT1kPzE6NX1dLEFtdD1bImlucHV0Il0sa210PVsiKiJdLERtdD0oYyxsKT0+KHsid2lkdGgucHgiOmMsIm1heC1oZWlnaHQucHgiOmx9KTtm''@;'; put 'put ''dW5jdGlvbiBJbXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDcpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksRHIoIiAiLGEubG9hZGluZ01vcmU/IkxvYWRpbmcuLi4iOiJMT0FEIE1PUkUiLCIgIil9fWxldCBrNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh''@;'; put 'put ''KXt0aGlzLmNkcj1hLHRoaXMuaW5wdXRJZD0iIix0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuYXV0b2NvbXBsZXRlPSJvZmYiLHRoaXMudGFiaW5kZXg9IiIsdGhpcy5lbWl0T25seVNlbGVjdGVkPSExLHRo''@;'; put 'put ''aXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy5vbklucHV0S2V5ZG93bj1uZXcgS3IsdGhpcy5vbklucHV0Q2hhbmdlPW5ldyBLcix0aGlzLnZhbHVlQ2hhbmdlPW5ldyBLcix0aGlzLm9uTG9hZGluZ01vcmU9bmV3IEtyLHRoaXMuZGF0YWxpc3RPcGVuPSExLHRoaXMuYWZ0ZXJPcGVuTG9ja0Rl''@;'; put 'put ''bGF5PTE1MCx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5pbnB1dENsaWVudFJlY3Q9e30sdGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmxvYWRpbmdNb3JlPSExfW5nT25Jbml0KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQo''@;'; put 'put ''KCk9Pnt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX0sNTAwKX1vbklucHV0RmlyZWQoYSxkLGgpe3RoaXMub3BlbkRhdGFsaXN0KCJjbGljayIhPT1oKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMuZmlsdGVyT3B0aW9uc0xpc3QoKSwoIXRoaXMuZW1pdE9ubHlTZWxlY3Rl''@;'; put 'put ''ZHx8ZCkmJih0aGlzLm9uSW5wdXRDaGFuZ2UuZW1pdCh7dGFyZ2V0Ont2YWx1ZTp0aGlzLnZhbHVlfX0pLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKSl9b25JbnB1dENsaWNrKGEpe3RoaXMub3BlbkRhdGFsaXN0KCl9b3BlbkRhdGFsaXN0KGE9ITApe3RoaXMuZGF0YWxpc3RP''@;'; put 'put ''cGVuPSEwLGEmJih0aGlzLmFmdGVyT3BlbkxvY2s9ITAsdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLmFmdGVyT3BlbkxvY2s9ITF9LHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5KSl9Y2xvc2VEYXRhbGlzdCgpe2NsZWFyVGltZW91dCh0aGlzLmFm''@;'; put 'put ''dGVyT3BlbkxvY2tEZWxheVRpbWVvdXQpLHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMSx0aGlzLmRhdGFsaXN0T3Blbj0hMX1yZXNldERhdGFsaXN0RmlsdGVyKCl7dGhpcy5maWx0ZXJPcHRpb25zTGlzdCghMCl9b25JbnB1dEZvY3VzaW4oYSl7dGhpcy5pbnB1dEZvY3VzZWQ9ITB9b25JbnB1dEZv''@;'; put 'put ''Y3Vzb3V0KGEpe3RoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9b25JbnB1dE1vdXNlZW50ZXIoYSl7dGhpcy5pbnB1dENsaWVudFJlY3Qud2lkdGh8fHRoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfWZpbHRlck9wdGlvbnNMaXN0KGEpe2NvbnN0IGQ9''@;'; put 'put ''ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb25gKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdO2lmKDA9PT10aGlzLnZhbHVlLmxlbmd0aCl7Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51''@;'; put 'put ''ZX1pZihhKXtmLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO2NvbnRpbnVlfWNvbnN0IHY9Zi5pbm5lclRleHR8fCIiLE09Zi52YWx1ZXx8IiI7KHYrTSk/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy52YWx1ZS50b0xvd2VyQ2FzZSgpKT9mLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRl''@;'; put 'put ''biIpOmYuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fXNldFRvQ2xvc2VEYXRhbGlzdCgpe3RoaXMuZGF0YWxpc3RDbG9zZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2V8fHRoaXMuYWZ0ZXJPcGVuTG9ja3x8KHRoaXMuY2xvc2VEYXRhbGlzdCgpLHRo''@;'; put 'put ''aXMudW5zZWxlY3RBbGxPcHRpb25zKCksdGhpcy5yZXNldERhdGFsaXN0RmlsdGVyKCkpfSwxMDApfWNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKXtjb25zdCBkPXRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Qud2lkdGg+MCYmZC5oZWln''@;'; put 'put ''aHQ+MCYmKHRoaXMuaW5wdXRDbGllbnRSZWN0PXt3aWR0aDpkLndpZHRoLGJvdHRvbTpkLmJvdHRvbX0pLHRoaXMuaW5uZXJIZWlnaHQ9d2luZG93LmlubmVySGVpZ2h0fW9uRGF0YUxpc3RNb3VzZUVudGVyKGEpe3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITB9b25EYXRhTGlzdE1vdXNl''@;'; put 'put ''TGVhdmUoYSl7dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9b25EYXRhTGlzdFNjcm9sbChhKXt0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uRGF0YUxpc3RDbGljayhhKXtjb25zdCBkPWEudGFyZ2V0OyJsb2Fk''@;'; put 'put ''LW1vcmUiIT09ZC5kYXRhc2V0Py50eXBlPyJPUFRJT04iIT09ZC50YWdOYW1lfHx0aGlzLnNldE9wdGlvblZhbHVlKGQuaW5uZXJUZXh0LGQudmFsdWUpOnRoaXMubG9hZE1vcmUoKX1sb2FkTW9yZSgpe3RoaXMub25Mb2FkaW5nTW9yZS5lbWl0KHtsb2FkTW9yZUZpbmlzaGVkOmE9Pnt0aGlz''@;'; put 'put ''LmxvYWRpbmdNb3JlPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9YX19KSx0aGlzLmxvYWRpbmdNb3JlPSEwfXNldE9wdGlvblZhbHVlKGEsZCl7KGF8fGQpJiYoZHx8KGQ9YSkpLGQmJih0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMudmFsdWU9ZCx0aGlzLm9uSW5wdXRGaXJlZChu''@;'; put 'put ''dWxsLCEwLCJjbGljayIpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCkpfW9uTWFpbktleWRvd24oYSl7c3dpdGNoKGEua2V5KXtjYXNlIkFycm93VXAiOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygidXAiKTticmVhaztjYXNlIkFycm93RG93biI6dGhpcy5nZXRPcHRpb25zTW92ZUZvY3Vz''@;'; put 'put ''KCJkb3duIik7YnJlYWs7Y2FzZSJFbnRlciI6dGhpcy5zZWxlY3RGb2N1c2VkT3B0aW9uKCl9fW9uSW5wdXRLZXl1cChhKXtyZXR1cm4hdGhpcy5kYXRhbGlzdE9wZW58fCgiRXNjYXBlIj09PWEua2V5PyhhLnN0b3BQcm9wYWdhdGlvbigpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCks''@;'; put 'put ''dGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKSwhMSk6dm9pZCAwKX11bnNlbGVjdEFsbE9wdGlvbnMoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5jbGFz''@;'; put 'put ''c0xpc3QucmVtb3ZlKCJmb2N1c2VkIil9c2VsZWN0Rm9jdXNlZE9wdGlvbigpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb24uZm9jdXNlZGApO2EmJnRoaXMub25EYXRhTGlzdENsaWNrKHt0YXJnZXQ6YX0pLHRoaXMuc2V0''@;'; put 'put ''VG9DbG9zZURhdGFsaXN0KCl9Z2V0T3B0aW9uc01vdmVGb2N1cyhhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uOm5vdCguaGlkZGVuKWApO2xldCBoPTA7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspe2NvbnN0''@;'; put 'put ''IHY9ZFtmXTtpZih2LmNsYXNzTGlzdC5jb250YWlucygiZm9jdXNlZCIpKXtoPSJkb3duIj09PWE/ZisxOmYtMSxoPDAmJihoPWQubGVuZ3RoLTEpLGg+ZC5sZW5ndGgtMSYmKGg9MCksdi5jbGFzc0xpc3QucmVtb3ZlKCJmb2N1c2VkIik7YnJlYWt9fWRbaF0uY2xhc3NMaXN0LmFkZCgiZm9j''@;'; put 'put ''dXNlZCIpfW9uUmVzaXplKGEpe3RoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEVzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXV0b2Nv''@;'; put 'put ''bXBsZXRlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoQW10LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguaW5wdXRFbGVtZW50PWYuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgicmVzaXplIixmdW5jdGlvbih2KXtyZXR1cm4g''@;'; put 'put ''aC5vblJlc2l6ZSh2KX0sMCxxQyl9LGlucHV0czp7aW5wdXRJZDoiaW5wdXRJZCIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxlZCIsdHlwZToidHlwZSIsYXV0b2NvbXBsZXRlOiJhdXRvY29tcGxldGUiLHRhYmluZGV4OiJ0YWJpbmRl''@;'; put 'put ''eCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9ubHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7b25JbnB1dEtleWRvd246Im9uSW5wdXRLZXlkb3duIixvbklucHV0Q2hhbmdlOiJvbklucHV0Q2hhbmdlIix2YWx1ZUNoYW5nZToidmFsdWVDaGFu''@;'; put 'put ''Z2UiLG9uTG9hZGluZ01vcmU6Im9uTG9hZGluZ01vcmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6a210LGRlY2xzOjksdmFyczoxNSxjb25zdHM6W1siaW5wdXQiLCIiXSxbIm9wdGlvbnMiLCIiXSxbMSwiYXV0b2NvbXBsZXRlLXdyYXBwZXIiLDMsImtleWRvd24iXSxbInR5cGUiLCJ0ZXh0Iiwi''@;'; put 'put ''YXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwidGFiaW5kZXgiLCIwIiwxLCJpbnB1dC12YWwiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjbGljayIsIm1vdXNlZW50ZXIiLCJmb2N1cyIsImZvY3Vzb3V0Iiwia2V5dXAiLCJpZCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbCIsImRpc2Fi''@;'; put 'put ''bGVkIl0sWzEsIm92ZXJsYXkiXSxbMSwiZGF0YWxpc3QiLDMsImNsaWNrIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJzY3JvbGwiLCJuZ1N0eWxlIiwiaWQiXSxbImRhdGEtdHlwZSIsImxvYWQtbW9yZSIsImNsYXNzIiwibG9hZC1tb3JlIiw0LCJuZ0lmIl0sWyJkYXRhLXR5cGUiLCJs''@;'; put 'put ''b2FkLW1vcmUiLDEsImxvYWQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO3NhKCksZGUoMCwiZGl2IiwyKSxGdCgia2V5ZG93biIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25NYWluS2V5ZG93bihNKSl9KSxkZSgxLCJpbnB1dCIs''@;'; put 'put ''MywwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgudmFsdWUsTSl8fChoLnZhbHVlPU0pLEN0KE0pfSksRnQoImNsaWNrIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0Q2xpY2soTSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGaXJlZChNKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dE1vdXNlZW50ZXIoTSkpfSkoImZvY3VzIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0Rm9jdXNpbihN''@;'; put 'put ''KSl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGb2N1c291dChNKSl9KSgia2V5dXAiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRLZXl1cChNKSl9KSxoZSgpLEd0KDMsImRpdiIsNCksZGUoNCwiZGl2Iiw1KSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RDbGljayhNKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25EYXRhTGlzdE1vdXNlRW50ZXIoTSkpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxD''@;'; put 'put ''dChoLm9uRGF0YUxpc3RNb3VzZUxlYXZlKE0pKX0pKCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RTY3JvbGwoTSkpfSksZGUoNSwiZGl2IixudWxsLDEpLFlyKDcpLGhlKCksZ3QoOCxJbXQsMiwxLCJvcHRpb24iLDYpLGhlKCkoKX1pZigyJmQpe2Nv''@;'; put 'put ''bnN0IGY9aGEoNik7ZmUoKSxNZSgiaWQiLGguaW5wdXRJZCkoInBsYWNlaG9sZGVyIixoLnBsYWNlaG9sZGVyKSxwaSgibmdNb2RlbCIsaC52YWx1ZSksTWUoImRpc2FibGVkIixoLmRpc2FibGVkKSxocigibGlzdCIsImRhdGFsaXN0XyIraC5pbnB1dElkKSxmZSgyKSxUcigiaGlkZGVuIiwh''@;'; put 'put ''aC5kYXRhbGlzdE9wZW4pLGZlKCksVHIoImhpZGRlbiIsIWguZGF0YWxpc3RPcGVuKSxNZSgibmdTdHlsZSIsbHAoMTIsRG10LGguaW5wdXRDbGllbnRSZWN0LndpZHRoLGguaW5uZXJIZWlnaHQmJmguaW5wdXRDbGllbnRSZWN0LmJvdHRvbT9oLmlubmVySGVpZ2h0LWguaW5wdXRDbGllbnRS''@;'; put 'put ''ZWN0LmJvdHRvbTp2b2lkIDApKSgiaWQiLCJkYXRhbGlzdF8iK2guaW5wdXRJZCksZmUoNCksTWUoIm5nSWYiLGYuY2hpbGRyZW4ubGVuZ3RoPjAmJmguZW5hYmxlTG9hZE1vcmUpfX0sZGVwZW5kZW5jaWVzOltiYSxub2UsQTIsazIscWwsbmwsJHNdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1''@;'; put 'put ''cm4gY30pKCksUm10PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7aWYoInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aDwxKXJldHVybiBhO3N3aXRjaChkKXtjYXNlImRhdGUiOnJldHVybiBPbyhhLCJERE1NTVlZWVk6aGg6bW06c3MiKS5mb3JtYXQoIkREL01NL1lZWVkiKTtjYXNl''@;'; put 'put ''InRpbWUiOntpZigic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBwYXJzaW5nIHRpbWUuIFZhbHVlIGlzIG5vdCBzdHJpbmcuIik7Y29uc3QgaD1wYXJzZUludChhLnNwbGl0KCI6IilbMF0pLGY9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzFdKSx2PXBhcnNlSW50KGEu''@;'; put 'put ''c3BsaXQoIjoiKVsyXSk7cmV0dXJuYCR7aDwxMD8iMCIraDpofToke2Y8MTA/IjAiK2Y6Zn06JHt2PDEwPyIwIit2OnZ9YH19cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP2E6YS50b1N0cmluZygpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJkYXRlVGltZUZvcm1hdHRlciIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IExtdD1bImlucHV0Il0sT210PVsiKiJdO2Z1bmN0aW9uIFBtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLExlKDEsIiAv''@;'; put 'put ''ICIpLGRlKDIsInNwYW4iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25DaGFuZ2VMYWJlbCgic2Vjb25kIikpfSksTGUoMyksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxUcigidmFsdWUtdHlwZS1zZWxlY3RlZCIsInNlY29u''@;'; put 'put ''ZCI9PT1hLmxhYmVsU2VsZWN0ZWQpLGZlKCksd3IoYS5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIEZtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImxhYmVsIiw0KSgxLCJzcGFuIiw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25DaGFuZ2VM''@;'; put 'put ''YWJlbCgiZmlyc3QiKSl9KSxMZSgyKSxoZSgpLGd0KDMsUG10LDQsMywibmctY29udGFpbmVyIiw2KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO1RyKCJzZWNvbmRMYWJlbEFjdGl2ZSIsYS5zZWNvbmRMYWJlbCYmYS5zZWNvbmRMYWJlbC5sZW5ndGg+MCksZmUoKSxUcigidmFsdWUtdHlw''@;'; put 'put ''ZS1zZWxlY3RlZCIsImZpcnN0Ij09PWEubGFiZWxTZWxlY3RlZCksZmUoKSx3cihhLmxhYmVsKSxmZSgpLE1lKCJuZ0lmIixhLnNlY29uZExhYmVsKX19ZnVuY3Rpb24gSG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiY2xyLWRhdGUtY29udGFpbmVyIikoMiwiaW5w''@;'; put 'put ''dXQiLDcpLGVsKDMsImRhdGVUaW1lRm9ybWF0dGVyIiksRnQoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uRGF0ZUlucHV0RmlyZWQoaCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmlucHV0Rm9jdXNlZD0hMCl9''@;'; put 'put ''KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkZvY3VzaW5JbnB1dChoKSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChSZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25JbnB1dE1vdXNlT3V0KCkpfSksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoImlkIixhLmlucHV0SWQpKCJwbGFjZWhvbGRlciIs''@;'; put 'put ''ejgoMyw1LGEudGVtcCwiZGF0ZSIpKSgiY2xyRGF0ZSIsYS52YWx1ZSkoImRpc2FibGVkIixhLmRpc2FibGVkKSxocigibGlzdCIsImRhdGFsaXN0XyIrYS5pbnB1dElkKX19ZnVuY3Rpb24gTm10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiaW5wdXQiLDgpLEZ0KCJp''@;'; put 'put ''bnB1dCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25JbnB1dEZpcmVkKGgpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5pbnB1dEZvY3VzZWQ9ITApfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmlucHV0''@;'; put 'put ''Rm9jdXNlZD0hMSl9KSgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25Gb2N1c2luSW5wdXQoaCkpfSkoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbklucHV0TW91c2VPdmVyKCkpfSkoIm1vdXNlb3V0IixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB3dChhKSxDdChSZSgpLm9uSW5wdXRNb3VzZU91dCgpKX0pLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJ2YWx1ZSIsYS52YWx1ZSkoImlkIixhLmlucHV0SWQpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksaHIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5w''@;'; put 'put ''dXRJZCl9fWZ1bmN0aW9uIFZtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImFwcC1hdXRvY29tcGxldGUiLDksMCksRnQoIm9uSW5wdXRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgib25Mb2FkaW5nTW9y''@;'; put 'put ''ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuYXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCkpfSksWXIoMyksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoImlucHV0SWQiLGEuaW5wdXRJZCkoInZhbHVlIiwobnVsbD09YS52YWx1ZT9udWxsOmEudmFs''@;'; put 'put ''dWUudG9TdHJpbmcoKSl8fCIiKSgiZW5hYmxlTG9hZE1vcmUiLGEuZW5hYmxlTG9hZE1vcmUpKCJlbWl0T25seVNlbGVjdGVkIixhLmVtaXRPbmx5U2VsZWN0ZWQpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCl9fWxldCBENmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5wdXRJ''@;'; put 'put ''ZD0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmRpc2FibGVTb2Z0c2VsZWN0PSExLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPSExLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMub25JbnB1dEV2''@;'; put 'put ''ZW50PW5ldyBLcix0aGlzLmZvY3VzaW5JbnB1dD1uZXcgS3IsdGhpcy5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlPW5ldyBLcix0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2U9bmV3IEtyLHRoaXMudGVtcD0iIix0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLmxhYmVsU2VsZWN0ZWQ9ImZpcnN0''@;'; put 'put ''In1uZ09uQ2hhbmdlcyhhKXthLnZhbHVlJiZhLnZhbHVlLmN1cnJlbnRWYWx1ZSE9PWEudmFsdWUucHJldmlvdXNWYWx1ZSYmdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGEudmFsdWUuY3VycmVudFZhbHVlKX1uZ09uSW5pdCgpe31hdXRvY29tcGxldGVMb2FkaW5nTW9yZShhKXt0aGlzLm9uQXV0''@;'; put 'put ''b2NvbXBsZXRlTG9hZGluZ01vcmUuZW1pdChhKX1vbklucHV0RmlyZWQoYSl7Y29uc3QgZD1hLnRhcmdldC52YWx1ZTt0aGlzLnRlbXA9ZCx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZCksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbkRhdGVJbnB1dEZpcmVkKGEpe3RoaXMudGVtcD1hLHRo''@;'; put 'put ''aXMudmFsdWVDaGFuZ2UuZW1pdChhKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGEpfW9uSW5wdXRNb3VzZU91dCgpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnZhbHVlPXRoaXMudGVtcCx0aGlzLnRlbXA9IiIpfW9uSW5wdXRNb3VzZU92ZXIoKXt0aGlzLmRpc2FibGVTb2Z0c2Vs''@;'; put 'put ''ZWN0fHwodGhpcy50ZW1wPXRoaXMudmFsdWU/dGhpcy52YWx1ZToiIix0aGlzLnZhbHVlPSIiKX1vbkZvY3VzaW5JbnB1dChhKXt0aGlzLmZvY3VzaW5JbnB1dC5lbWl0KGEpfW9uQ2hhbmdlTGFiZWwoYSl7dGhpcy5sYWJlbFNlbGVjdGVkPWEsdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlLmVt''@;'; put 'put ''aXQoImZpcnN0Ij09PWE/dGhpcy5sYWJlbDp0aGlzLnNlY29uZExhYmVsKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zb2Z0LXNlbGVjdCJdXSx2aWV3''@;'; put 'put ''UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKExtdCw1KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLmlucHV0RWxlbWVudD1mLmZpcnN0KX19LGlucHV0czp7aW5wdXRJZDoiaW5wdXRJZCIsbGFiZWw6ImxhYmVsIixzZWNvbmRMYWJlbDoic2Vjb25kTGFiZWwiLHZhbHVlOiJ2YWx1''@;'; put 'put ''ZSIsZGlzYWJsZWQ6ImRpc2FibGVkIix0eXBlOiJ0eXBlIixkaXNhYmxlU29mdHNlbGVjdDoiZGlzYWJsZVNvZnRzZWxlY3QiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdlOiJ2''@;'; put 'put ''YWx1ZUNoYW5nZSIsb25JbnB1dEV2ZW50OiJvbklucHV0RXZlbnQiLGZvY3VzaW5JbnB1dDoiZm9jdXNpbklucHV0IixvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlOiJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixzZWxlY3RlZExhYmVsQ2hhbmdlOiJzZWxlY3RlZExhYmVsQ2hhbmdlIn0s''@;'; put 'put ''ZmVhdHVyZXM6W3dsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6T210LGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWyJpbnB1dCIsIiJdLFsiY2xhc3MiLCJjbHItY29udHJvbC1sYWJlbCIsMywic2Vjb25kTGFiZWxBY3RpdmUiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNl''@;'; put 'put ''Il0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzMsImNsaWNrIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJkYXRlIiwiY2xyRGF0ZSIsIiIsMywiY2xyRGF0ZUNoYW5nZSIsImZvY3VzIiwiZm9jdXNvdXQiLCJmb2N1c2luIiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJpZCIsInBsYWNlaG9sZGVy''@;'; put 'put ''IiwiY2xyRGF0ZSIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGltZSIsInN0ZXAiLCIxIiwxLCJpbnB1dC12YWwiLDMsImlucHV0IiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLFsidHlwZSIsInRleHQi''@;'; put 'put ''LCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLDEsImlucHV0LXZhbCIsMywib25JbnB1dENoYW5nZSIsIm9uTG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImVtaXRPbmx5U2VsZWN0ZWQiLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5j''@;'; put 'put ''dGlvbihkLGgpezEmZCYmKHNhKCksZ3QoMCxGbXQsNCw2LCJsYWJlbCIsMSksc2koMSwyKSxndCgyLEhtdCw0LDgsIm5nLWNvbnRhaW5lciIsMykoMyxObXQsMiw0LCJuZy1jb250YWluZXIiLDMpKDQsVm10LDQsNSwibmctY29udGFpbmVyIiwzKSxsaSgpKSwyJmQmJihNZSgibmdJZiIsaC5s''@;'; put 'put ''YWJlbCksZmUoKSxNZSgibmdTd2l0Y2giLGgudHlwZSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsInRpbWUiKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJ0ZXh0IikpfSxkZXBlbmRlbmNpZXM6W2JhLFMyLGNwLGRzLFl4LEpMLHNHLGs2''@;'; put 'put ''ZSxSbXRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksU3c9KCgpPT57Y2xhc3MgY3tzZXQgbmdWYXIoYSl7dGhpcy5jb250ZXh0LiRpbXBsaWNpdD10aGlzLmNvbnRleHQubmdWYXI9YSx0aGlzLmhhc1ZpZXd8fCh0aGlzLnZjUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRl''@;'; put 'put ''bXBsYXRlUmVmLHRoaXMuY29udGV4dCksdGhpcy5oYXNWaWV3PSEwKX1jb25zdHJ1Y3RvcihhLGQpe3RoaXMudGVtcGxhdGVSZWY9YSx0aGlzLnZjUmVmPWQsdGhpcy5jb250ZXh0PXskaW1wbGljaXQ6bnVsbCxuZ1ZhcjpudWxsfSx0aGlzLmhhc1ZpZXc9ITF9c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoU2wpLEdlKERvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1ZhciIsIiJdXSxpbnB1dHM6e25nVmFyOiJuZ1ZhciJ9fSl9fXJldHVybiBjfSkoKSxCbXQ9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhKXt0aGlzLmhlbHBlclNlcnZpY2U9YX10cmFuc2Zvcm0oYSxkPSJkYXlzIixoPSExKXtpZih2b2lkIDA9PT1hJiYoYT0iIiksInN0cmluZyIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkpLDA9PT1hLmxlbmd0aCl7aWYoImRheXMiPT09ZClyZXR1cm4gbnVsbDtp''@;'; put 'put ''Zigic2Vjb25kcyI9PT1kKXJldHVybiBoPyIxMTowMDowMCI6bnVsbH1sZXQgZj10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQpO2lmKDQ9PT1hLnNwbGl0KCI6IikubGVuZ3RoKXtjb25zdCBNPWEuc3BsaXQoIjoiKTtmPW5ldyBEYXRlKE1bMF0pLGYuc2V0''@;'; put 'put ''SG91cnMocGFyc2VJbnQoTVsxXSkpLGYuc2V0TWludXRlcyhwYXJzZUludChNWzJdKSksZi5zZXRTZWNvbmRzKHBhcnNlSW50KE1bM10pKX1lbHNlIGlzTmFOKE51bWJlcihhKSkmJihmPW5ldyBEYXRlKGEpKTtsZXQgdj1gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5n''@;'; put 'put ''ZXRIb3VycygpLnRvU3RyaW5nKCkpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldE1pbnV0ZXMoKS50b1N0cmluZygpKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSl9YDtyZXR1cm4gaD92OmZ9''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoU3UsMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToic2FzVG9Kc0RhdGUiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKSxqbXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhKXt0aGlzLmhlbHBlclNlcnZpY2U9YX10cmFuc2Zvcm0oYSl7aWYobnVsbD09YXx8IiI9PT1hKXJldHVybiIiO2xldCBkLGgsZjtpZigic3RyaW5nIj09dHlwZW9mIGEmJjM9PT1hLnNwbGl0KCI6IikubGVuZ3RoKXtjb25zdCB2PWEuc3BsaXQoIjoiKTtkPXZbMF0saD12WzFdLGY9''@;'; put 'put ''dlsyXX1lbHNlIm51bWJlciIhPXR5cGVvZiBhJiYoYT1wYXJzZUludChhKSksZD1NYXRoLmZsb29yKGEvMzYwMCksaD1NYXRoLmZsb29yKGElMzYwMC82MCksZj1NYXRoLmZsb29yKGElMzYwMCU2MCk7cmV0dXJuYCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGQpfToke3Ro''@;'; put 'put ''aXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhoKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZil9YH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShTdSwxNikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxs''@;'; put 'put ''KHtuYW1lOiJzZWNvbmRzUGFyc2VyIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgem10PShjLGwsYSk9Pih7cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YX0pLFVtdD0oYyxsLGEsZCk9Pih7cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxp''@;'; put 'put ''c0RhdGVUaW1lOmR9KSxabXQ9KGMsbCxhLGQpPT4oe3JhbmdlOiJzdGFydCIscXVlcnk6YyxxdWVyeVZhbHVlSW5kZXg6MCxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9KSxXbXQ9KGMsbCxhLGQpPT4oe3JhbmdlOiJlbmQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4''@;'; put 'put ''OjEscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSk7ZnVuY3Rpb24gWW10KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyMiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJzZWxlY3RlZCIsUmUoKS5sb2dpY09wZXJhdG9yc1swXSks''@;'; put 'put ''ZmUoKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBHbXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDIzKSxMZSgxLCJcbiAgICAgICAgIiksR3QoMiwicHJvZ3Jlc3MiKSxMZSgzLCJcbiAgICAgICIpLGhlKCkpfWZ1bmN0aW9uICRtdChjLGwpezEmYyYmR3QoMCwiZGl2Iil9ZnVuY3Rpb24gS210''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyMiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJzZWxlY3RlZCIsUmUoMikubG9naWNPcGVyYXRvcnNbMF0pLGZlKCksRHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gcW10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxu''@;'; put 'put ''KCk7ZGUoMCwiYnV0dG9uIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5hZGRHcm91cENsYXVzZSgpKX0pLEd0KDEsImNsci1pY29uIiwzMyksZGUoMiwic3BhbiIpLExlKDMsIkdyb3VwIiksaGUoKSgpfX1mdW5jdGlvbiBYbXQoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuaW5kZXg7cmV0dXJuIEN0KFJlKCkucmVtb3ZlR3JvdXBDbGF1c2UoaCkpfSksaGUoKX19ZnVuY3Rpb24gSm10KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9u''@;'; put 'put ''IiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRHIoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBRbXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx3cihhKX19ZnVuY3Rpb24g''@;'; put 'put ''ZTZ0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiB0NnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKS5pbmRleCxmPVJlKCkuaW5kZXgsdj1SZSgpO3JldHVybiB2''@;'; put 'put ''LmN1cnJlbnRRdWVyeUluZGV4PWgsQ3Qodi5jdXJyZW50Q2xhdXNlSW5kZXg9Zil9KSxMZSgyLCIgQ2hvb3NlIHZhbHVlcyAiKSxoZSgpLGd0KDMsZTZ0LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMiksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXgsZj1S''@;'; put 'put ''ZSgpLmluZGV4O1JlKCk7Y29uc3Qgdj1oYSgzNyk7ZmUoMyksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLHYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIscE0oMix6bXQsZCxoLGYpKX19ZnVuY3Rpb24gbjZ0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiByNnQoYyxsKXtpZigxJmMmJihkZSgw''@;'; put 'put ''LCJkaXYiLDU0KSxndCgxLG42dCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLm5nVmFyLGQ9UmUoKSxoPWQuJGltcGxpY2l0LGY9ZC5pbmRleCx2PVJlKCkuaW5kZXgsTT1SZSgpLEQ9aGEoMzEpLFo9aGEoMzMpO2ZlKCksTWUoIm5nVGVtcGxhdGVPdXRs''@;'; put 'put ''ZXQiLGEmJk0udXNlUGlja2Vycz9EOlopKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSkkoMixVbXQsaCxmLHYsYSkpfX1mdW5jdGlvbiBpNnQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIGE2dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gbzZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2''@;'; put 'put ''Iiw1NSkoMSwiZGl2Iiw1NiksZ3QoMixpNnQsMSwwLCJuZy1jb250YWluZXIiLDUzKSxoZSgpLGRlKDMsImRpdiIsNTcpLGd0KDQsYTZ0LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5uZ1ZhcixkPVJlKCksaD1kLiRpbXBsaWNpdCxmPWQuaW5kZXgs''@;'; put 'put ''dj1SZSgpLmluZGV4LE09UmUoKSxEPWhhKDMxKSxaPWhhKDM1KTtmZSgyKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmTS51c2VQaWNrZXJzP0Q6WikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixKSSg0LFptdCxoLGYsdixhKSksZmUoMiksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0u''@;'; put 'put ''dXNlUGlja2Vycz9EOlopKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSkkoOSxXbXQsaCxmLHYsYSkpfX1mdW5jdGlvbiBzNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDU4KSgxLCJsYWJlbCIsNyksTGUoMiwiVmFsdWUiKSxoZSgpLGRlKDMsImlucHV0Iiw1OSks''@;'; put 'put ''Z2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMikuJGltcGxpY2l0O3JldHVybiBtaShmLnZhbHVlLGgpfHwoZi52YWx1ZT1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLmluZGV4LHY9UmUo''@;'; put 'put ''KS5pbmRleDtyZXR1cm4gQ3QoUmUoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLGYsdikpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKS4kaW1wbGljaXQ7ZmUoMykscGkoIm5nTW9kZWwiLGEudmFsdWUpfX1mdW5jdGlvbiBsNnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ2KSxndCgx''@;'; put 'put ''LHQ2dCw0LDYsImRpdiIsNDcpKDIscjZ0LDIsNywiZGl2Iiw0OCkoMyxvNnQsNSwxNCwiZGl2Iiw0OSkoNCxzNnQsNCwxLCJkaXYiLDUwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIklOIj09PWEub3BlcmF0b3J8fCJOT1QgSU4iPT09YS5vcGVy''@;'; put 'put ''YXRvciksZmUoKSxNZSgibmdJZiIsIkJFVFdFRU4iIT09YS5vcGVyYXRvciYmIklOIiE9PWEub3BlcmF0b3ImJiJOT1QgSU4iIT09YS5vcGVyYXRvciYmIkxJS0UiIT09YS5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWEub3BlcmF0b3ImJiJCRUdJTlNfV0lUSCIhPT1hLm9wZXJhdG9yKSxmZSgp''@;'; put 'put ''LE1lKCJuZ0lmIiwiQkVUV0VFTiI9PT1hLm9wZXJhdG9yKSxmZSgpLE1lKCJuZ0lmIiwiTElLRSI9PT1hLm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09YS5vcGVyYXRvcnx8IkNPTlRBSU5TIj09PWEub3BlcmF0b3IpfX1mdW5jdGlvbiBjNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtk''@;'; put 'put ''ZSgwLCJkaXYiLDEwKSgxLCJkaXYiLDM1KSgyLCJkaXYiLDM2KSgzLCJhcHAtc29mdC1zZWxlY3QiLDM3KSxnaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBtaShmLnZhcmlhYmxlLGgpfHwoZi52YXJpYWJsZT1oKSxDdChoKX0pLEZ0''@;'; put 'put ''KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLiRpbXBsaWNpdCxNPWYuaW5kZXgsRD1SZSgpLmluZGV4O3JldHVybiBDdChSZSgpLnZhcmlhYmxlSW5wdXRDaGFuZ2Uodi52YXJpYWJsZSxNLEQsaCkpfSksZ3QoNCxKbXQsMiwxLCJvcHRpb24iLDM4KSxoZSgp''@;'; put 'put ''KCkoKSxkZSg1LCJkaXYiLDM5KSg2LCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDcsImxhYmVsIiksTGUoOCwiT3BlcmF0b3IiKSxoZSgpLGRlKDksInNlbGVjdCIsNDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5v''@;'; put 'put ''cGVyYXRvcixoKXx8KGYub3BlcmF0b3I9aCksQ3QoaCl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLGY9aC4kaW1wbGljaXQsdj1oLmluZGV4LE09UmUoKS5pbmRleDtyZXR1cm4gQ3QoUmUoKS5zZXRWYXJpYWJsZU9wZXJhdG9yKHYsZi5vcGVyYXRvcixN''@;'; put 'put ''KSl9KSxndCgxMCxRbXQsMiwxLCJvcHRpb24iLDM4KSxoZSgpKCkoKSxndCgxMSxsNnQsNSw0LCJkaXYiLDQxKSxkZSgxMiwiZGl2Iiw0MikoMTMsImJ1dHRvbiIsNDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4LGY9UmUoKS5pbmRleDtyZXR1cm4gQ3QoUmUo''@;'; put 'put ''KS5yZW1vdmVDbGF1c2UoaCxmKSl9KSxHdCgxNCwiY2xyLWljb24iLDQ0KSgxNSwic3BhbiIpLGhlKCksZGUoMTYsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuaW5kZXg7cmV0dXJuIEN0KFJlKCkuYWRkQ2xhdXNlKGgpKX0pLEd0KDE3LCJj''@;'; put 'put ''bHItaWNvbiIsMzMpKDE4LCJzcGFuIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVJlKCkuaW5kZXgsZj1SZSgpO1RyKCJpbnZhbGlkLWNsYXVzZSIsYS5pbnZhbGlkQ2xhdXNlKSxmZSgzKSxNZSgiaWQiLCJzZWxlY3RfdmFsc192YXJfaWQiK2Qr''@;'; put 'put ''Il8iK2gpKCJpbnB1dElkIiwidmFsc192YXJfaWQiK2QrIl8iK2gpKCJlbWl0T25seVNlbGVjdGVkIiwhMCkscGkoInZhbHVlIixhLnZhcmlhYmxlKSxmZSgpLE1lKCJuZ0Zvck9mIixmLmNvbHMpLGZlKDUpLHBpKCJuZ01vZGVsIixhLm9wZXJhdG9yKSxmZSgpLE1lKCJuZ0Zvck9mIixhLm9w''@;'; put 'put ''ZXJhdG9ycyksZmUoKSxNZSgibmdWYXIiLCJEQVRFIj09PWEuZGR0eXBlfHwiREFURVRJTUUiPT09YS5kZHR5cGV8fCJUSU1FIj09PWEuZGR0eXBlKSxmZSgyKSxNZSgiZGlzYWJsZWQiLDE9PT1mLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHMubGVuZ3RoKX19ZnVuY3Rpb24gdTZ0KGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNCkoMSwiZGl2IiwxMCkoMiwiZGl2IiwyNSkoMywiZGl2IiwyNikoNCwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg1LCJsYWJlbCIpLExlKDYsIkxvZ2ljIiksaGUoKSxkZSg3LCJzZWxlY3QiLDI3KSxnaSgibmdNb2RlbENoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuY2xhdXNlTG9naWMsaCl8fChmLmNsYXVzZUxvZ2ljPWgpLEN0KGgpfSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuc2V0TG9naWMoKSl9KSxndCg4LEtt''@;'; put 'put ''dCwyLDIsIm9wdGlvbiIsMTMpLGhlKCkoKSgpLEd0KDksImJyIiksZ3QoMTAscW10LDQsMCwiYnV0dG9uIiwyOCksaGUoKSxkZSgxMSwiZGl2IiwyOSksZ3QoMTIsWG10LDEsMCwiY2xyLWljb24iLDMwKSgxMyxjNnQsMTksMTEsImRpdiIsMzEpLGhlKCkoKSxHdCgxNCwiYnIiKSxoZSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7ZmUoKSxUcigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxpZENsYXVzZSksZmUoNikscGkoIm5nTW9kZWwiLGEuY2xhdXNlTG9naWMpLE1lKCJkaXNhYmxlZCIsYS5lbGVtZW50cy5sZW5ndGg8MiksZmUoKSxNZSgibmdGb3JPZiIsZC5s''@;'; put 'put ''b2dpY09wZXJhdG9ycyksZmUoMiksTWUoIm5nSWYiLGQuaW5uZXJXaWR0aD43NjgpLGZlKDIpLE1lKCJuZ0lmIixkLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPjEpLGZlKCksTWUoIm5nRm9yT2YiLGEuZWxlbWVudHMpfX1mdW5jdGlvbiBkNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtz''@;'; put 'put ''aSgwKSxkZSgxLCJhcHAtc29mdC1zZWxlY3QiLDYyKSxlbCgyLCJzYXNUb0pzRGF0ZSIpLGVsKDMsInNhc1RvSnNEYXRlIiksRnQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXgsRD1mLnF1ZXJ5SW5kZXgs''@;'; put 'put ''Wj1mLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLmRhdGVDaGFuZ2UoaCx2LEQsWixNKSl9KSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCksZD1hLnF1ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1hLnF1ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O2ZlKCksTWUoImRpc2FibGVT''@;'; put 'put ''b2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD9EYygyLDMsZC52YWx1ZVtoXSk6RGMoMyw1LGQudmFsdWUpKX19ZnVuY3Rpb24gaDZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYXBwLXNvZnQtc2Vs''@;'; put 'put ''ZWN0Iiw2MyksZWwoMiwic2FzVG9Kc0RhdGUiKSxlbCgzLCJzYXNUb0pzRGF0ZSIpLEZ0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5nZXRRdWVyeURhdGVUaW1lKE0sdiku''@;'; put 'put ''ZGF0ZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLGY9aC5xdWVyeSx2PWgucXVlcnlWYWx1ZUluZGV4LE09aC5xdWVyeUluZGV4LEQ9aC5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5kYXRlVGltZUNoYW5nZShmLE0sRCx2KSl9KSxoZSgpLGRl''@;'; put 'put ''KDQsImFwcC1zb2Z0LXNlbGVjdCIsNjQpLGVsKDUsInNhc1RvSnNEYXRlIiksZWwoNiwic2FzVG9Kc0RhdGUiKSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkuZ2V0UXVl''@;'; put 'put ''cnlEYXRlVGltZShNLHYpLnRpbWU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKSxmPWgucXVlcnksdj1oLnF1ZXJ5VmFsdWVJbmRleCxNPWgucXVlcnlJbmRleCxEPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkuZGF0ZVRpbWVDaGFuZ2UoZixN''@;'; put 'put ''LEQsdikpfSksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLGQ9YS5xdWVyeSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtmZSgpLE1lKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitmKyJfIit2KSgi''@;'; put 'put ''dmFsdWUiLHZvaWQgMCE9PWg/ejgoMiw2LGQudmFsdWVbaF0sInNlY29uZHMiKTp6OCgzLDksZC52YWx1ZSwic2Vjb25kcyIpKSxmZSgzKSxNZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfdGltZSIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP2JVKDUsMTIs''@;'; put 'put ''ZC52YWx1ZVtoXSwic2Vjb25kcyIsITApOmJVKDYsMTYsZC52YWx1ZSwic2Vjb25kcyIsITApKX19ZnVuY3Rpb24gZjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2NSksZWwoMiwic2Vjb25kc1BhcnNlciIpLGVsKDMsInNlY29uZHNQ''@;'; put 'put ''YXJzZXIiKSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXgsRD1mLnF1ZXJ5SW5kZXgsWj1mLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLnRpbWVDaGFuZ2UoaCx2LEQsWixNKSl9KSxoZSgpLGxp''@;'; put 'put ''KCl9aWYoMiZjKXtjb25zdCBhPVJlKCksZD1hLnF1ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1hLnF1ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O2ZlKCksTWUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzXyIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP0Rj''@;'; put 'put ''KDIsMyxkLnZhbHVlW2hdKTpEYygzLDUsZC52YWx1ZSkpfX1mdW5jdGlvbiBwNnQoYyxsKXsxJmMmJihzaSgwLDYwKSxndCgxLGQ2dCw0LDcsIm5nLWNvbnRhaW5lciIsNjEpKDIsaDZ0LDcsMjAsIm5nLWNvbnRhaW5lciIsNjEpKDMsZjZ0LDQsNywibmctY29udGFpbmVyIiw2MSksbGkoKSks''@;'; put 'put ''MiZjJiYoTWUoIm5nU3dpdGNoIixsLnF1ZXJ5LmRkdHlwZSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwiREFURSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsIkRBVEVUSU1FIiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwiVElNRSIpKX1mdW5jdGlvbiBnNnQoYyxsKXtpZigxJmMmJihkZSgw''@;'; put 'put ''LCJvcHRpb24iLDY4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoInZhbHVlIixhLnVuZm9ybWF0dGVkKSxmZSgpLERyKCIgIixhLmZvcm1hdHRlZC50cmltKCksIiAiKX19ZnVuY3Rpb24gbTZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxnNnQsMiwy''@;'; put 'put ''LCJvcHRpb24iLDY3KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5xdWVyeTtmZSgpLE1lKCJuZ0Zvck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIHY2dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNjgpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtNZSgidmFs''@;'; put 'put ''dWUiLGEuTkFNRSksZmUoKSxEcigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIGI2dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsdjZ0LDIsMiwib3B0aW9uIiw2OSksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMikucXVlcnk7ZmUoKSxNZSgibmdJZiIsYS5UWVBFPT09''@;'; put 'put ''ZC50eXBlKX19ZnVuY3Rpb24geTZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxiNnQsMiwxLCJuZy1jb250YWluZXIiLDM4KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdGb3JPZiIsYS5jb2xzKX19ZnVuY3Rpb24gXzZ0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PUxuKCk7ZGUoMCwiYXBwLXNvZnQtc2VsZWN0Iiw2NiksRnQoInNlbGVjdGVkTGFiZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkucXVlcnk7cmV0dXJuIEN0KFJlKCkuc2VsZWN0ZWRMYWJlbENoYW5nZShoLGYpKX0pLGdpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29u''@;'; put 'put ''c3QgZj13dChhKS5xdWVyeTtyZXR1cm4gbWkoZi52YWx1ZSxoKXx8KGYudmFsdWU9aCksQ3QoaCl9KSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5zZXRWYXJpYWJsZVZhbHVl''@;'; put 'put ''cyhoLnRhcmdldC52YWx1ZSx2LE0pKX0pKCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5xdWVyeSxNPWYucXVlcnlJbmRleCxEPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KFJlKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShoLHYu''@;'; put 'put ''dmFyaWFibGUsTSxEKSl9KSxndCgxLG02dCwyLDEsImRpdiIsMjApKDIseTZ0LDIsMSwiZGl2IiwyMCksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5xdWVyeSxkPWwucXVlcnlJbmRleCxoPWwuY2xhdXNlSW5kZXg7TWUoInNlY29uZExhYmVsIiwiVmFyaWFibGUiKSgiZW1pdE9ubHlTZWxlY3Rl''@;'; put 'put ''ZCIsYS52YWx1ZVZhcmlhYmxlKSgiaW5wdXRJZCIsInZhbHNfIitkKyJfIitoKSxwaSgidmFsdWUiLGEudmFsdWUpLE1lKCJlbmFibGVMb2FkTW9yZSIsYS5ub2JzPmEudmFsdWVzLmxlbmd0aCksZmUoKSxNZSgibmdJZiIsIWEudmFsdWVWYXJpYWJsZSksZmUoKSxNZSgibmdJZiIsYS52YWx1''@;'; put 'put ''ZVZhcmlhYmxlKX19ZnVuY3Rpb24gdzZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw2OCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJ2YWx1ZSIsYS5mb3JtYXR0ZWQpLGZlKCksRHIoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIEM2dChjLGwp''@;'; put 'put ''e2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImFwcC1zb2Z0LXNlbGVjdCIsNzApLGdpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnksTT1mLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4gbWkodi52YWx1ZVtNXSxoKXx8KHYudmFsdWVbTV09aCksQ3Qo''@;'; put 'put ''aCl9KSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSksZj1oLnF1ZXJ5LHY9aC5xdWVyeUluZGV4LE09aC5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5zZXRWYXJpYWJsZVZhbHVlcyhmLnZhbHVlLHYsTSkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUi''@;'; put 'put ''LGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLnF1ZXJ5LE09Zi5xdWVyeUluZGV4LEQ9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoUmUoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgsdi52YXJpYWJsZSxNLEQpKX0pLGd0KDEsdzZ0LDIsMiwib3B0aW9uIiw2NyksaGUoKX1pZigy''@;'; put 'put ''JmMpe2NvbnN0IGE9bC5yYW5nZSxkPWwucXVlcnksaD1sLnF1ZXJ5VmFsdWVJbmRleDtNZSgiaW5wdXRJZCIsInZhbHMtIithKyJfIitsLnF1ZXJ5SW5kZXgrIl8iK2wuY2xhdXNlSW5kZXgpLHBpKCJ2YWx1ZSIsZC52YWx1ZVtoXSksTWUoImVuYWJsZUxvYWRNb3JlIixkLm5vYnM+ZC52YWx1''@;'; put 'put ''ZXMubGVuZ3RoKSgiZGlzYWJsZWQiLHZvaWQgMCE9PWgmJiJzdGFydCIhPT1hJiYhZC52YWx1ZVswXSksZmUoKSxNZSgibmdGb3JPZiIsZC52YWx1ZXMpfX1mdW5jdGlvbiBTNnQoYyxsKXsxJmMmJihkZSgwLCJoNSIsNzgpLExlKDEsIiBObyB2YWx1ZXMgYXZhaWxhYmxlLiAiKSxoZSgpKX1m''@;'; put 'put ''dW5jdGlvbiBNNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEsImlucHV0Iiw4MCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuaW5kZXgsdj1SZSgyKS5xdWVyeTtyZXR1cm4gbWkodi52YWx1ZVtm''@;'; put 'put ''XS5jaGVja2VkLGgpfHwodi52YWx1ZVtmXS5jaGVja2VkPWgpLEN0KGgpfSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMiksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChSZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgsdixN''@;'; put 'put ''KSl9KSxoZSgpLGRlKDIsImxhYmVsIiksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1SZSgyKS5xdWVyeTtmZSgpLHBpKCJuZ01vZGVsIixoLnZhbHVlW2RdLmNoZWNrZWQpLGZlKDIpLERyKCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlv''@;'; put 'put ''biB4NnQoYyxsKXtpZigxJmMmJihkZSgwLCJzZWN0aW9uIiw3OSkoMSwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpLGd0KDIsTTZ0LDQsMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDM4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpLnF1ZXJ5O2ZlKDIpLE1lKCJuZ0Zvck9mIixhLnZhbHVl''@;'; put 'put ''cyl9fWZ1bmN0aW9uIEU2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1tb2RhbCIsNzEpKDEsImgzIiw3MiksTGUoMiwiU2VsZWN0IHZhbHVlcyIpLGhlKCksZGUoMywiZGl2Iiw3MyksZ3QoNCxTNnQsMiwwLCJoNSIsNzQpKDUseDZ0LDMsMSwic2VjdGlvbiIsNzUpLGhl''@;'; put 'put ''KCksZGUoNiwiZGl2Iiw3NikoNywiYnV0dG9uIiw3NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKTtyZXR1cm4gaC5jdXJyZW50UXVlcnlJbmRleD0tMSxDdChoLmN1cnJlbnRDbGF1c2VJbmRleD0tMSl9KSxMZSg4LCIgQXBwbHkgIiksaGUoKSgpKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5kZXgsaD1sLmNsYXVzZUluZGV4LGY9UmUoKTtNZSgiY2xyTW9kYWxPcGVuIixmLmN1cnJlbnRRdWVyeUluZGV4PT09ZCYmZi5jdXJyZW50Q2xhdXNlSW5kZXg9PT1oKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLE1lKCJuZ0lmIiwh''@;'; put 'put ''Zi5pc0FycihhLnZhbHVlKSksZmUoKSxNZSgibmdJZiIsZi5pc0FycihhLnZhbHVlKSl9fSFmdW5jdGlvbiByd2UoYyxsLGEpeyhmdW5jdGlvbiBSOWUoYyxsLGEpeyJzdHJpbmciIT10eXBlb2YgbCYmKGE9bCxsPWNbZWMuTG9jYWxlSWRdKSxsPWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9f''@;'; put 'put ''L2csIi0iKSxVYltsXT1jLGEmJihVYltsXVtlYy5FeHRyYURhdGFdPWEpfSkoYyxsLGEpfShUbXQpO2xldCBYZWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgs''@;'; put 'put ''dGhpcy5jZGY9Zix0aGlzLmNhY2hpbmc9ITAsdGhpcy5yb3dzX2luY3JlbWVudD0xMDAsdGhpcy5pbml0aWFsX3Jvd3M9MWUzLHRoaXMuY2xhdXNlQW10PVsiIl0sdGhpcy5udW1PcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSx0''@;'; put 'put ''aGlzLmNoYXJPcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5ub3RJbj0hMSx0aGlzLm5vdEFycj0hMCx0aGlzLndhc0JldHdlZW49ITEsdGhpcy53aGVyZUNsYXVzZUxvYWRpbmc9ITEsdGhpcy5keW5hbWljV2hlcmVD''@;'; put 'put ''bGF1c2U9ITAsdGhpcy51c2VQaWNrZXJzPSExLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVWYXJpYWJsZTohMSxzdGFydHJvdzowLHJvd3M6MCxub2Jz''@;'; put 'put ''OjAsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dLGNsYXVzZUxvZ2ljOiIiLGludmFsaWRDbGF1c2U6ITF9LHRoaXMuc2VsVmFyPXtpbmRleDpudWxsLGZvcm1hdDpudWxsLHR5cGU6bnVsbH0sdGhpcy5pbk9iaj1be2NoZWNrZWQ6ITEsdmFsdWU6bnVsbH1dLHRoaXMuZ3JvdXBMb2dpYz0iQU5E''@;'; put 'put ''Iix0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30sdGhpcy5sb2dpY09wZXJhdG9ycz1bIkFORCIsIk9SIl0sdGhpcy5xdWVyeURhdGVUaW1lPVtdLHRoaXMuY3VycmVudENsYXVzZUluZGV4PS0x''@;'; put 'put ''LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9LTEsdGhpcy5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbCx0aGlzLmlubmVyV2lkdGg9d2luZG93LnNjcmVlbi53aWR0aCx0aGlzLmlubmVyV2lkdGg+NzY4JiYodGhpcy5ub0JvcmRlcj0iYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBncmF5OyIpfWdldFF1''@;'; put 'put ''ZXJ5RGF0ZVRpbWUoYSxkKXtsZXQgaD10aGlzLnF1ZXJ5RGF0ZVRpbWUuZmluZChmPT5mLmNsYXVzZUluZGV4PT09YSYmZi5xdWVyeUluZGV4PT09ZCk7aWYoIWgpe2NvbnN0IGY9dGhpcy5xdWVyeURhdGVUaW1lLnB1c2goe2NsYXVzZUluZGV4OmEscXVlcnlJbmRleDpkLGRhdGU6IiIsdGlt''@;'; put 'put ''ZToiIn0pLTE7aD10aGlzLnF1ZXJ5RGF0ZVRpbWVbZl19cmV0dXJuIGh9dXNlUGlja2Vyc0NoYW5nZSgpe3RoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLnVzZVBpY2tlcnMmJnRoaXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKGE9PnthLmVsZW1lbnRzLmZvckVhY2goZD0+e1siREFURVRJ''@;'; put 'put ''TUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKGQuZGR0eXBlKSYmZC52YWx1ZVZhcmlhYmxlJiYoZC52YWx1ZT0iIixkLnZhbHVlVmFyaWFibGU9ITEpfSl9KX1yZXNldEZpbHRlcigpe3RoaXMud2hlcmVTdHJpbmc9dm9pZCAwLHRoaXMud2hlcmVDbGF1c2U9dm9pZCAwLHRoaXMucXVlcnlP''@;'; put 'put ''Ymo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSx0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpb''@;'; put 'put ''XSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30sdGhpcy53aGVyZUNsYXVzZUZuKCEwKX1zZXRUb0dsb2JhbHMoKXtpZighdGhpcy5jYWNoaW5nKXJldHVybjtsZXQgYT0iIjsiaG9tZSI9PT1Lbi5yb290UGFyYW18fCJlZGl0b3IiPT09S24ucm9vdFBhcmFtP2E9dGhpcy52aWV3Ym94SWQ/''@;'; put 'put ''YHZpZXdib3hlcy4ke3RoaXMudmlld2JveElkfWA6ImVkaXRvciI6InZpZXciPT09S24ucm9vdFBhcmFtJiYoYT0idmlld2VyIikseWMoS24sYSkuZmlsdGVyLmdyb3VwTG9naWM9dGhpcy5ncm91cExvZ2ljLCJzdHJpbmciPT10eXBlb2YgdGhpcy53aGVyZUNsYXVzZSYmKHljKEtuLGEpLmZp''@;'; put 'put ''bHRlci53aGVyZUNsYXVzZT10aGlzLndoZXJlQ2xhdXNlKSwic3RyaW5nIj09dHlwZW9mIHRoaXMubGliZHMmJih5YyhLbixhKS5maWx0ZXIubGliZHM9dGhpcy5saWJkcykseWMoS24sYSkuZmlsdGVyLmNsYXVzZXM9dGhpcy5jbGF1c2VzfWdldEZyb21HbG9iYWxzKCl7aWYoIXRoaXMuY2Fj''@;'; put 'put ''aGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUtuLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLHljKEtu''@;'; put 'put ''LGEpLmZpbHRlci5jb2xzLmxlbmd0aD4wJiYodGhpcy5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoeWMoS24sYSkuZmlsdGVyLmNvbHMpKSkseWMoS24sYSkuZmlsdGVyLnZhbHMubGVuZ3RoPjAmJih0aGlzLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh5YyhLbixhKS5m''@;'; put 'put ''aWx0ZXIudmFscykpKSwiIiE9PXljKEtuLGEpLmZpbHRlci5ncm91cExvZ2ljJiYodGhpcy5ncm91cExvZ2ljPXljKEtuLGEpLmZpbHRlci5ncm91cExvZ2ljLHRoaXMud2hlcmVDbGF1c2U9eWMoS24sYSkuZmlsdGVyLndoZXJlQ2xhdXNlLHRoaXMubGliZHM9eWMoS24sYSkuZmlsdGVyLmxp''@;'; put 'put ''YmRzLHRoaXMuY2xhdXNlcz15YyhLbixhKS5maWx0ZXIuY2xhdXNlcyx0aGlzLndoZXJlQ2xhdXNlRm4oKSl9c2V0R3JvdXBMb2dpYyhhKXt0aGlzLmdyb3VwTG9naWM9YSx0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9''@;'; put 'put ''ZGF0ZUNoYW5nZShhLGQsaCxmLHYpe2xldCBNPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKGEpOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQgMCE9PXYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbdl09TSksdGhpcy5z''@;'; put 'put ''ZXRWYXJpYWJsZVZhbHVlcyhNLGgsZil9ZGF0ZVRpbWVDaGFuZ2UoYSxkLGgsZil7Y29uc3Qgdj10aGlzLmdldFF1ZXJ5RGF0ZVRpbWUoaCxkKTtpZigiIj09PXYuZGF0ZSl7aWYoIiI9PT1hLnZhbHVlKXJldHVybjt2LmRhdGU9YS52YWx1ZS5zcGxpdCgiOiIpWzBdfWNvbnN0IE09cGFyc2VJ''@;'; put 'put ''bnQodi50aW1lLnNwbGl0KCI6IilbMF0pLEQ9cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMV0pLFo9cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMl0pfHwwO2xldCByZT1uZXcgRGF0ZSh2LmRhdGUpLGNlPW5ldyBEYXRlKHJlLmdldEZ1bGxZZWFyKCkscmUuZ2V0TW9udGgoKSxyZS5n''@;'; put 'put ''ZXREYXRlKCksTSxELFopLGJlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKGNlLCJzZWNvbmRzIik7IkJFVFdFRU4iPT09YS5vcGVyYXRvciYmdm9pZCAwIT09ZiYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZVtmXT1iZSksdGhp''@;'; put 'put ''cy5zZXRWYXJpYWJsZVZhbHVlcyhiZSxkLGgpfXRpbWVDaGFuZ2UoYSxkLGgsZix2KXthPWEudGFyZ2V0LnZhbHVlO2xldCBiZT02MCpwYXJzZUludChhLnNwbGl0KCI6IilbMF0pKjYwKzYwKnBhcnNlSW50KGEuc3BsaXQoIjoiKVsxXSkrKHBhcnNlSW50KGEuc3BsaXQoIjoiKVsyXSl8fDAp''@;'; put 'put ''OyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQgMCE9PXYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbdl09YmUpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoYmUsaCxmKX1keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGEsZCl7bGV0IGg9W107aWYodGhp''@;'; put 'put ''cy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xfHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMubGVuZ3RoPjEpZm9yKGxldCBmPTA7Zjx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2YrKylmb3IobGV0IHY9MDt2PHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50''@;'; put 'put ''cy5sZW5ndGg7disrKXtpZihmPT09YSYmdj09PWR8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhcmlhYmxlKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0ub3Bl''@;'; put 'put ''cmF0b3IpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZSkpY29udGludWU7bGV0IE09IiI7Y29uc3QgRD10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0ub3BlcmF0b3IsWj10aGlzLmNsYXVzZXMucXVl''@;'; put 'put ''cnlPYmpbZl0uZWxlbWVudHNbdl0udmFyaWFibGU7IkJFVFdFRU4iPT09RD9NPWAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZVswXX0gQU5EICR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW3ZdLnZhbHVlWzFdfWA6IklOIj09PUR8fCJOT1QgSU4iPT09RD8o''@;'; put 'put ''dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW3ZdLnZhbHVlLmZvckVhY2gocmU9PntpZihyZS5jaGVja2VkKXtsZXQgY2U9cmUudmFsOyJzdHJpbmciIT10eXBlb2YgY2V8fCgwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKGNlKT9NLmxlbmd0aD4wP00rPWAsJHtjZX1gOk09YCgke2NlfWA6TS5sZW5n''@;'; put 'put ''dGg+MD9NKz1gLCcke2NlfSdgOk09YCgnJHtjZX0nYH19KSxNLmxlbmd0aD4wJiYoTSs9IikiKSk6IiI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWU/TT0iY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udHlwZT8iJyAnIjoi''@;'; put 'put ''LiI6ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnR5cGUmJihNPWAnJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWV9J2ApLGgucHVzaCh7R1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9H''@;'; put 'put ''SUM6dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOlosT1BFUkFUT1JfTk06RCxSQVdfVkFMVUU6TXx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlfSl9cmV0dXJuIGh9Z2V0VmFsdWVz''@;'; put 'put ''TG9hZE1vcmUoYSxkLGgsZil7dmFyIHY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgTT12LmxpYmRzfHwiIjt0cnl7aWYodm9pZCAwIT09di5jb2xzKXtmb3IobGV0IHFlPTA7cWU8di5jb2xzLmxlbmd0aDtxZSsrKXYuY29sc1txZV0uTkFNRT09PWQmJih2LnNlbFZhci5pbmRl''@;'; put 'put ''eD1xZSk7Y29uc3QgRD12LmNvbHNbdi5zZWxWYXIuaW5kZXhdLkREVFlQRSx7c3RhcnRyb3c6Wixyb3dzOnJlfT12LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0sY2U9di5yb3dzX2luY3JlbWVudCxiZT1aK3JlO2xldCBFZT1bXTt2LmR5bmFtaWNXaGVyZUNsYXVzZSYmKEVlPXYu''@;'; put 'put ''ZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihmLGgpKTtjb25zdCBCZT1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhEKTt2LnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhkLE0sRWUsYmUsY2UpLnRoZW4ocWU9Pntjb25zdCBydD1xZS52YWxzLHtTVEFSVFJPVzpw''@;'; put 'put ''dCxST1dTOmR0LE5PQlM6SnR9PXFlLm1ldGFbMF07aWYodi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnN0YXJ0cm93PXB0LHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5yb3dzPWR0LHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5ub2JzPUp0LDE9''@;'; put 'put ''PT1ydC5sZW5ndGgmJiIiPT09cnRbMF0uRk9STUFUVEVEJiYiIj09PXJ0WzBdLlVORk9STUFUVEVEP2EubG9hZE1vcmVGaW5pc2hlZCghMSk6KHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMucHVzaCguLi5ydC5tYXAodG49Pntjb25zdCBNbj0ibnVtIj09PXFlLiR2''@;'; put 'put ''YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgR3I9TW4mJigwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKHRuLlVORk9STUFUVEVEKT8iLiIrdG4uVU5GT1JNQVRURUQ6dG4uVU5GT1JNQVRURUQ7cmV0dXJuIE1uJiZudWxsPT09R3ImJihHcj0iLiIpLHtmb3JtYXR0ZWQ6QmU/dG4uRk9STUFU''@;'; put 'put ''VEVELnNwbGl0KCIuIilbMF06dG4uRk9STUFUVEVELHVuZm9ybWF0dGVkOkdyfX0pKSxhLmxvYWRNb3JlRmluaXNoZWQoSnQtdi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5sZW5ndGg+MCkpLHYud2hlcmVDbGF1c2VGbigpLHYuc2V0VG9HbG9iYWxzKCksdi53aGVy''@;'; put 'put ''ZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PXYucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDp2bixxdWVyeUluZGV4OkNufT12LnBlbmRpbmdJTlZhbHVlc1NldDt2LnNldElOVmFsdWVzKHZuLENuKSx2LnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfXYuY2RmLmRldGVjdENo''@;'; put 'put ''YW5nZXMoKX0pLmNhdGNoKHFlPT57di53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goRCl7di5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsRCl9fSkoKX1nZXRWYWx1ZXMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9u''@;'; put 'put ''Kigpe2Yud2hlcmVDbGF1c2VMb2FkaW5nPSEwO2xldCB2PSIiO3ZvaWQgMCE9PWYubGliZHMmJih2PWYubGliZHMpLGYuY2xlYXJWYWx1ZXMoZCxoKSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVzPVtdLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52''@;'; put 'put ''YWx1ZT0iIixmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ub3BlcmF0b3I9Ij0iLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YXJpYWJsZT1hO3RyeXtpZih2b2lkIDAhPT1mLmNvbHMpe2ZvcihsZXQgcmU9MDtyZTxmLmNvbHMubGVuZ3RoO3JlKyspZi5jb2xz''@;'; put 'put ''W3JlXS5OQU1FPT09YSYmKGYuc2VsVmFyLmluZGV4PXJlKTtjb25zdCBNPWYuY29sc1tmLnNlbFZhci5pbmRleF0uRERUWVBFO2YuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5kZHR5cGU9TSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udHlwZT1mLmNvbHNbZi5z''@;'; put 'put ''ZWxWYXIuaW5kZXhdLlRZUEUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9ycz0ibnVtIj09PWYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS50eXBlP2YubnVtT3BlcmF0b3JzOmYuY2hhck9wZXJhdG9ycztsZXQgRD1bXTtmLmR5bmFtaWNXaGVyZUNs''@;'; put 'put ''YXVzZSYmKEQ9Zi5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGgsZCkpO2NvbnN0IFo9WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoTSk7Zi5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoYSx2LEQsMSxmLmluaXRpYWxfcm93cykudGhlbihyZT0+e2NvbnN0IGNl''@;'; put 'put ''PXJlLnZhbHMse1NUQVJUUk9XOmJlLFJPV1M6RWUsTk9CUzpCZX09cmUubWV0YVswXTtpZihmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0uc3RhcnRyb3c9YmUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnJvd3M9RWUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVs''@;'; put 'put ''ZW1lbnRzW2RdLm5vYnM9QmUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlcz1jZS5tYXAocWU9Pntjb25zdCBydD0ibnVtIj09PXJlLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgZHQ9cnQmJigwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKHFlLlVORk9STUFU''@;'; put 'put ''VEVEKT8iLiIrcWUuVU5GT1JNQVRURUQ6cWUuVU5GT1JNQVRURUQ7cmV0dXJuIHJ0JiZudWxsPT09ZHQmJihkdD0iLiIpLHtmb3JtYXR0ZWQ6Wj9xZS5GT1JNQVRURUQuc3BsaXQoIi4iKVswXTpxZS5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6ZHR9fSkuc2xpY2UoMCwyZTMpLGYud2hlcmVDbGF1''@;'; put 'put ''c2VGbigpLGYuc2V0VG9HbG9iYWxzKCksZi53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PWYucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDpxZSxxdWVyeUluZGV4OnJ0fT1mLnBlbmRpbmdJTlZhbHVlc1NldDtmLnNldElOVmFsdWVzKHFlLHJ0KSxmLnBlbmRpbmdJ''@;'; put 'put ''TlZhbHVlc1NldD1udWxsfWYuY2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKHJlPT57Zi53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goTSl7Zi5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsTSl9fSkoKX1nZXRsb2dpYyhhKXt0aGlz''@;'; put 'put ''LmxvZ2ljPWEsdGhpcy53aGVyZUNsYXVzZUZuKCl9c2V0TG9naWMoKXt0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWlzQXJyKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXkmJmEubGVuZ3RoPjAmJnR5cGVvZiBhWzBdLmNoZWNrZWQ8InUifXNlbGVjdGVkTGFi''@;'; put 'put ''ZWxDaGFuZ2UoYSxkKXtkLnZhbHVlVmFyaWFibGU9IlZhcmlhYmxlIj09PWEsZC52YWx1ZT0iIix0aGlzLndoZXJlQ2xhdXNlRm4oKX12YXJpYWJsZUlucHV0Q2hhbmdlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzKGEsZCxoKX1zZXRWYXJpYWJsZVZhbHVlcyhhLGQsaCl7bGV0IGY9dGhpcy5j''@;'; put 'put ''bGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9yOyJCRVRXRUVOIiE9PWYmJiJJTiIhPT1mJiYiTk9UIElOIiE9PWYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWU9YS50b1N0cmluZygpKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNl''@;'; put 'put ''dFRvR2xvYmFscygpfXNldFZhcmlhYmxlT3BlcmF0b3IoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZTtmIGluc3RhbmNlb2YgQXJyYXkmJiJJTiIhPT1kJiYiTk9UIElOIiE9PWQmJihmPWYgaW5zdGFuY2VvZiBBcnJheSYmMj09PWYubGVu''@;'; put 'put ''Z3RoJiYic3RyaW5nIj09dHlwZW9mIGZbMF0/ZlswXToiIiksdGhpcy5jbGVhclZhbHVlc09wZXJhdG9yKGEsaCksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLm9wZXJhdG9yPWQsKCI9Ij09PWR8fCI+Ij09PWR8fCI8Ij09PWR8fCI8PSI9PT1kfHwiPj0iPT09ZHx8Ik5F''@;'; put 'put ''Ij09PWQpJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPWYpLCJCRVRXRUVOIj09PWQmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU9W10sdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlLnB1c2go''@;'; put 'put ''ZiksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlLnB1c2goIiIpKSwoIklOIj09PWR8fCJOT1QgSU4iPT09ZCkmJnRoaXMuc2V0SU5WYWx1ZXMoaCxhKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXNldElOVmFsdWVzKGEsZCl7Y29u''@;'; put 'put ''c3QgaD1bXSxmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tkXS52YWx1ZXM7Zi5sZW5ndGg8MSYmKHRoaXMucGVuZGluZ0lOVmFsdWVzU2V0PXtjbGF1c2VJbmRleDphLHF1ZXJ5SW5kZXg6ZH0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKWgucHVzaCh7Y2hlY2tlZDoh''@;'; put 'put ''MSx2YWw6Zlt2XS5mb3JtYXR0ZWR9KTt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbZF0udmFsdWU9aH1jbGVhclZhbHVlcyhhLGQpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS52YWx1ZT0iIn1jbGVhclZhbHVlc09wZXJhdG9yKGEsZCl7bGV0IGg9dGhp''@;'; put 'put ''cy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2FdLm9wZXJhdG9yOygiQkVUV0VFTiI9PT1ofHwiSU4iPT09aHx8Ik5PVCBJTiI9PT1ofHwiQ09OVEFJTlMiPT09aCkmJnRoaXMuY2xlYXJWYWx1ZXMoYSxkKX1oYXNJbnZhbGlkQ2x1YXNlKGEpe2ZvcihsZXQgZCBvZiBhKWlmKGQuaW52''@;'; put 'put ''YWxpZENsYXVzZT0hMSwiIj09PWQudmFsdWUmJiJORSIhPT1kLm9wZXJhdG9yJiYiQ09OVEFJTlMiIT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFyaWFibGV8fG51bGw9PT1kLm9wZXJhdG9yfHxudWxsPT09ZC52YWx1ZSlyZXR1cm4gZC5pbnZhbGlkQ2xhdXNlPSEwLCEwO3JldHVybiBhLmlu''@;'; put 'put ''dmFsaWRDbGF1c2U9ITEsITF9aGFzSW52YWxpZEdyb3VwQ2x1YXNlKCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2ErKyl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHRoaXMuY2xh''@;'; put 'put ''dXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSEwLCEwO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSExfXJldHVybiExfWFkZENsYXVzZShhKXtpZih0aGlzLmhhc0ludmFsaWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzKSlyZXR1''@;'; put 'put ''cm4gdm9pZCB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpO3RoaXMuY2xhdXNlQW10LnB1c2goIiIpLHRoaXMuY2xhdXNlcy5xdWVyeU9i''@;'; put 'put ''althXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSk7bGV0IGQ9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljO3RoaXMuY2xhdXNlcy5xdWVy''@;'; put 'put ''eU9ialthXS5jbGF1c2VMb2dpYz10eXBlb2YgZD4idSI/IkFORCI6Ik9SIj09PWQ/Ik9SIjoiQU5EIix0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWFkZEdyb3VwQ2xhdXNlKCl7dGhpcy5oYXNJbnZhbGlkR3JvdXBDbHVhc2UoKT90aGlzLmV2ZW50U2VydmljZS5z''@;'; put 'put ''aG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpOih0aGlzLmNsYXVzZXMucXVlcnlPYmoucHVzaCh7ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpu''@;'; put 'put ''dWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19KSx0aGlzLnNldFRvR2xvYmFscygpKX1pc0luSHRtbENvbGxlY3Rpb24oYSxkKXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylpZihkW2hdLnZhbHVlPT09YSlyZXR1cm4hMDtyZXR1cm4hMX1y''@;'; put 'put ''ZW1vdmVHcm91cENsYXVzZShhKXt0aGlzLmNsYXVzZXMucXVlcnlPYmouc3BsaWNlKGEsMSksdGhpcy53aGVyZUNsYXVzZUZuKCl9cmVtb3ZlQ2xhdXNlKGEsZCl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMu''@;'; put 'put ''c2V0VG9HbG9iYWxzKCl9d2hlcmVDbGF1c2VGbihhPSExKXtjb25zdCBkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5jbGF1c2VzKTtpZihhJiYoZC5xdWVyeU9ialswXS5lbGVtZW50cz1bXSksdm9pZCAwIT09dGhpcy5saWJkcyl7bGV0IGg9dGhpcy5zYXNTdG9yZVNlcnZp''@;'; put 'put ''Y2Uud2hlcmVDbGF1c2VDcmVhdG9yKGQsdGhpcy5ncm91cExvZ2ljLHRoaXMubGliZHMpO2F8fCh0aGlzLndoZXJlQ2xhdXNlPWgud2hlcmVDbGF1c2UsdGhpcy53aGVyZVN0cmluZz1oLnN0cmluZyl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigp''@;'; put 'put ''e2EuX3JlbW92ZVFyeT1hLnNhc1N0b3JlU2VydmljZS5yZW1vdmVRdWVyeS5zdWJzY3JpYmUoZD0+e2EuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD49MSYmKGEuY2xh''@;'; put 'put ''dXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHM9W10sYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxs''@;'; put 'put ''LHZhbHVlczpbXSxvcGVyYXRvcnM6W119KSxhLndoZXJlQ2xhdXNlRm4oKSkpfSksYS5jb2x1bW5zU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLmNvbHVtbnMuc3Vic2NyaWJlKGQ9PntsZXQgaD1kLmRhdGEuY29sczsiaG9tZSIhPT1Lbi5yb290UGFyYW0mJiJlZGl0b3IiIT09S24ucm9vdFBhcmFt''@;'; put 'put ''fHwoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEtuLmVkaXRvci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSksInZpZXciPT09S24ucm9vdFBhcmFtJiZLbi52aWV3ZXIuZmlsdGVyLmNvbHMubGVuZ3RoPDEmJihhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsS24u''@;'; put 'put ''dmlld2VyLmZpbHRlci5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKSxhLmxpYmRzfHwoYS5saWJkcz1kLmxpYmRzKX0pLGEudmFsdWVzU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLnZhbHVlcy5zdWJzY3JpYmUoZD0+eygiaG9tZSI9PT1Lbi5yb290UGFyYW18fCJlZGl0b3IiPT09''@;'; put 'put ''S24ucm9vdFBhcmFtKSYmS24uZWRpdG9yLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxLbi5lZGl0b3IuZmlsdGVyLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSksInZpZXciPT09S24ucm9vdFBhcmFtJiZLbi52aWV3ZXIuZmlsdGVyLnZhbHMu''@;'; put 'put ''bGVuZ3RoPDEmJihhLnZhbHM9ZC52YWxzLEtuLnZpZXdlci5maWx0ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQudmFscykpKX0pfSkoKX1vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil9bmdBZnRlckNv''@;'; put 'put ''bnRlbnRJbml0KCl7dGhpcy5nZXRGcm9tR2xvYmFscygpLHNldFRpbWVvdXQoKCk9PntsZXQgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdmFsc192YXJfaWQwXzAiKTthJiZhLmZvY3VzKCl9LDUwMCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtbnNTdWImJnRoaXMuY29sdW1uc1N1Yi51''@;'; put 'put ''bnN1YnNjcmliZSgpLHRoaXMudmFsdWVzU3ViJiZ0aGlzLnZhbHVlc1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGtoKSxHZSh2YyksR2UoU3UpLEdlKEVzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcXVlcnkiXV0saW5wdXRzOntjYWNoaW5nOiJjYWNoaW5nIix2aWV3Ym94SWQ6InZpZXdib3hJZCJ9LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6QmYsdXNlVmFsdWU6ImVuLUdCIn1dKV0sZGVjbHM6MzgsdmFyczoxMSxjb25zdHM6W1sicGlja2VyIiwi''@;'; put 'put ''Il0sWyJub3RQaWNrZXIiLCIiXSxbIm5vdFBpY2tlclJhbmdlIiwiIl0sWyJjaGVja2JveFZhbHVlcyIsIiJdLFsxLCJjbHItZmxleC1yb3ciLCJjbHItZm9ybS1jb250cm9sIiwibS0wIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hl''@;'; put 'put ''Y2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsIm1sLTE1Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImlkIiwidXNlUGlja2VycyIsMywibmdNb2RlbENoYW5n''@;'; put 'put ''ZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMSwiY2xyLXJvdyJdLFsxLCJzZWxlY3QiLCJjbHItY29sLW1kLTIiLCJtYi0zMCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sWzMsInNlbGVjdGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb''@;'; put 'put ''MSwiY2xyLWNvbC1tZC0xMCIsIm1iLTMwIl0sWzEsImxpbmUtbnVtYmVycyIsImxhbmd1YWdlLW1hcmt1cCJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwibGFuZ3VhZ2Utc3FsIl0sWzEsImNvbnRlbnQiXSxbMSwiY2xhdXNlcy1jb250YWlu''@;'; put 'put ''ZXIiLCJjbHItY29sLW1kLTEyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiY2xhdXNlLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInNlbGVjdGVkIl0sWzEsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMSwiY2xhdXNlLXJvdyJdLFsxLCJjbGF1c2UtbG9naWMiLCJj''@;'; put 'put ''bHItY29sLW1kLTIiXSxbMSwic2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9jayBtdC0xMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2xhdXNlLXF1ZXJ5Iiwi''@;'; put 'put ''Y2xyLWNvbC1tZC0xMCJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsImNsYXNzIiwicmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1yb3ciLDMsImludmFsaWQtY2xhdXNlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwi''@;'; put 'put ''YnRuIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLCJtdC0xMCIsMywiY2xpY2siXSxbInNoYXBlIiwicGx1cyJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsMSwicmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIl0sWzEsInZhcmlhYmxlLWNvbCIsImZvcm0tZ3Jv''@;'; put 'put ''dXAiLCJjbHItY29sLW1kLTMiXSxbMSwiZGF0YWxpc3Qtd3JhcHBlciJdLFsibGFiZWwiLCJWYXJpYWJsZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJpZCIsImlucHV0SWQiLCJlbWl0T25seVNlbGVjdGVkIiwidmFsdWUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm9w''@;'; put 'put ''ZXJhdG9yLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsYXNzIiwidmFsdWUtY29sIGZvcm0tZ3JvdXAgY2xyLWNvbC1tZC0zIiw0LCJuZ1ZhciJdLFsxLCJjbGF1c2UtYnV0dG9ucyIsImNs''@;'; put 'put ''ci1jb2wtbWQtMiIsImJ0bi1ncm91cCJdLFsxLCJidG4iLCJidG4td2FybmluZyIsImJ0bi1ibG9jayIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJtaW51cyJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbMSwidmFsdWUtY29sIiwiZm9y''@;'; put 'put ''bS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsiY2xhc3MiLCJjaGVja2JveC12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpbmdsZS1maWVsZC12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJhbmdlLXZhbHMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY29udGFpbnMtdmFscyIsNCwibmdJZiJd''@;'; put 'put ''LFsxLCJjaGVja2JveC12YWxzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsMywiY2xpY2siXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsInNpbmdsZS1maWVsZC12YWxzIl0sWzEsInJhbmdlLXZhbHMiXSxbMSwiZnJv''@;'; put 'put ''bSJdLFsxLCJ0byJdLFsxLCJjb250YWlucy12YWxzIl0sWyJ0eXBlIiwidGV4dCIsMSwiaW5wdXQtdmFsIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywidmFsdWVD''@;'; put 'put ''aGFuZ2UiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJ0eXBlIiwidGltZSIsMywi''@;'; put 'put ''dmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJ0aW1lIiwzLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsibGFiZWwiLCJW''@;'; put 'put ''YWx1ZSIsMywic2VsZWN0ZWRMYWJlbENoYW5nZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Iiwib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsInNlY29uZExhYmVsIiwiZW1pdE9ubHlTZWxlY3RlZCIsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIl0sWzMsInZhbHVl''@;'; put 'put ''Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMywidmFsdWUiLDQsIm5nSWYiXSxbImxhYmVsIiwiVmFsdWUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Iiwib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3Jl''@;'; put 'put ''IiwiZGlzYWJsZWQiXSxbMSwiaW4tdmFsdWVzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwibm8tdmFsdWVzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZvcm0tYmxvY2siLDQsIm5n''@;'; put 'put ''SWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwibm8tdmFsdWVzIl0sWzEsImZvcm0tYmxvY2siXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdN''@;'; put 'put ''b2RlbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO2RlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSgyLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDMsImlucHV0Iiw2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgu''@;'; put 'put ''ZHluYW1pY1doZXJlQ2xhdXNlLE0pfHwoaC5keW5hbWljV2hlcmVDbGF1c2U9TSksQ3QoTSl9KSxoZSgpLGRlKDQsImxhYmVsIiw3KSxMZSg1LCJEeW5hbWljIHdoZXJlIGNsYXVzZSIpLGhlKCkoKSgpLGRlKDYsImRpdiIsOCkoNywiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSg4LCJpbnB1dCIs''@;'; put 'put ''OSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnVzZVBpY2tlcnMsTSl8fChoLnVzZVBpY2tlcnM9TSksQ3QoTSl9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnVzZVBpY2tlcnNDaGFuZ2UoKSl9KSxoZSgpLGRlKDks''@;'; put 'put ''ImxhYmVsIiw3KSxMZSgxMCwiIFVzZSBwaWNrZXJzICIpLGhlKCkoKSgpKCksZGUoMTEsImRpdiIsMTApKDEyLCJkaXYiLDExKSgxMywiY2xyLXNlbGVjdC1jb250YWluZXIiKSgxNCwibGFiZWwiKSxMZSgxNSwiR3JvdXAgbG9naWMiKSxoZSgpLGRlKDE2LCJzZWxlY3QiLDEyKSxnaSgibmdN''@;'; put 'put ''b2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZ3JvdXBMb2dpYyxNKXx8KGguZ3JvdXBMb2dpYz1NKSxDdChNKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnNldEdyb3VwTG9naWMoaC5ncm91cExvZ2ljKSl9KSxndCgx''@;'; put 'put ''NyxZbXQsMiwyLCJvcHRpb24iLDEzKSxoZSgpKCkoKSxkZSgxOCwiZGl2IiwxNCkoMTksInByZSIsMTUpLExlKDIwLCIgICAgICAiKSxndCgyMSxHbXQsNCwwLCJkaXYiLDE2KSxMZSgyMiwiXG5cbiAgICAgICIpLGRlKDIzLCJjb2RlIiwxNyksTGUoMjQpLGhlKCksTGUoMjUsIlxuICAgICIp''@;'; put 'put ''LGhlKCkoKSgpLGRlKDI2LCJkaXYiLDE4KSgyNywiZGl2IiwxOSksZ3QoMjgsJG10LDEsMCwiZGl2IiwyMCkoMjksdTZ0LDE1LDgsImRpdiIsMjEpLGhlKCkoKSxndCgzMCxwNnQsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSgzMixfNnQsMyw3LCJuZy10ZW1wbGF0ZSIsbnVsbCwxLElj''@;'; put 'put ''KSgzNCxDNnQsMiw1LCJuZy10ZW1wbGF0ZSIsbnVsbCwyLEljKSgzNixFNnQsOSw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwzLEljKX0yJmQmJihmZSgzKSxwaSgibmdNb2RlbCIsaC5keW5hbWljV2hlcmVDbGF1c2UpLGZlKDUpLHBpKCJuZ01vZGVsIixoLnVzZVBpY2tlcnMpLGZlKDgpLE1lKCJk''@;'; put 'put ''aXNhYmxlZCIsKG51bGw9PWguY2xhdXNlc3x8bnVsbD09aC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6aC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk8MSkscGkoIm5nTW9kZWwiLGguZ3JvdXBMb2dpYyksZmUoKSxNZSgibmdGb3JPZiIsaC5sb2dpY09wZXJhdG9ycyksZmUoNCksTWUoIm5nSWYi''@;'; put 'put ''LGgud2hlcmVDbGF1c2VMb2FkaW5nKSxmZSgzKSx3cihoLndoZXJlQ2xhdXNlKSxmZSgzKSxUcigiY2xyLWNvbC1tZC0xMCIsKG51bGw9PWguY2xhdXNlc3x8bnVsbD09aC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6aC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk+MSksZmUoKSxNZSgibmdJZiIs''@;'; put 'put ''KG51bGw9PWguY2xhdXNlc3x8bnVsbD09aC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6aC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk+MSksZmUoKSxNZSgibmdGb3JPZiIsaC5jbGF1c2VzLnF1ZXJ5T2JqKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsTjEsUzIsY3AsSGwsb3UsS3UsZHMsSWQsQnks''@;'; put 'put ''U2gsRTcsJHksQTIsazIscWwsTWQsVDIsbmwsJHMsRDZlLFN3LEJtdCxqbXRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCkscjQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31vbkNsaWNrKGEpe2EudGFyZ2V0LmZvY3VzKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBTdGVhbEZvY3VzIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNsaWNrIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNsaWNr''@;'; put 'put ''KHYpfSl9fSl9fXJldHVybiBjfSkoKTtjb25zdCBUNnQ9WyJzZWFyY2hMaWJUcmVlSW5wdXQiXTtmdW5jdGlvbiBBNnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24gazZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDEyKSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsQ3QoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBENnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYi''@;'; put 'put ''LDcpKDIsImlucHV0Iiw4LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYubGlicmFyaWVzU2VhcmNoLGgpfHwoZi5saWJyYXJpZXNTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KFJlKCkubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKSxndCg0LEE2dCwxLDAsImNsci1pY29uIiw5KSg1LGs2dCwxLDAsImNsci1pY29uIiwxMCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgy''@;'; put 'put ''KSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEk2dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDExKX1mdW5jdGlvbiBSNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTIp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxSZSgpO2NvbnN0IGg9aGEoMyksZj1SZSgyKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxoZSgpfX1mdW5jdGlv''@;'; put 'put ''biBMNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0IiwxOCwyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuc2VhcmNoU3Ry''@;'; put 'put ''aW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLGhlKCksZ3QoNCxJNnQsMSwwLCJjbHItaWNvbiIsOSkoNSxS''@;'; put 'put ''NnQsMSwwLCJjbHItaWNvbiIsMTApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgyKS4kaW1wbGljaXQ7ZmUoMikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5n''@;'; put 'put ''dGg+MCl9fWZ1bmN0aW9uIE82dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBQNnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gRjZ0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLExlKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFj''@;'; put 'put ''dCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGhlKCkpfWZ1bmN0aW9uIEg2dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxndCgxLEY2dCwyLDAsInNwYW4iLDI1KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5uZ1ZhcjtmZSgpLE1lKCJuZ0lmIixh''@;'; put 'put ''KX19ZnVuY3Rpb24gTjZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIFY2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLFJlKCk7Y29uc3QgaD1oYSgzKSxmPVJlKDMpLiRpbXBs''@;'; put 'put ''aWNpdCx2PVJlKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIEI2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRp''@;'; put 'put ''diIsNykoMiwiaW5wdXQiLDI5LDIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChh''@;'; put 'put ''KTtjb25zdCBoPVJlKDMpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMykudHJlZU9uRmlsdGVyKGgsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCksZ3QoNCxONnQsMSwwLCJjbHItaWNvbiIsOSkoNSxWNnQsMSwwLCJjbHItaWNvbiIsMTApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyks''@;'; put 'put ''ZD1SZSgzKS4kaW1wbGljaXQ7ZmUoMikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGo2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAs''@;'; put 'put ''ImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1SZSgzKS4kaW1wbGljaXQsdj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY29sdW1uT25DbGljayhoLHYsZikpfSksR3QoMiwiY2xyLWlj''@;'; put 'put ''b24iLDMxKSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoNik7ZmUoKSxUcigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxmZSgyKSxEcigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIHo2dChjLGwpe2lmKDEmYyYm''@;'; put 'put ''KHNpKDApLGd0KDEsQjZ0LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoMixqNnQsNCwzLCJjbHItdHJlZS1ub2RlIiw0KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGEuY29sdW1ucyksZmUoKSxNZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rp''@;'; put 'put ''b24gVTZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5uZ1ZhcixmPVJlKCkuJGltcGxpY2l0LHY9UmUoMikuJGltcGxpY2l0LE09UmUoKTtyZXR1cm4gQ3QoaD8i''@;'; put 'put ''IjpNLnRhYmxlT25DbGljayhmLlRBQkxFVVJJLGYsdikpfSksc2koMiwyMSksZ3QoMyxPNnQsMSwwLCJjbHItaWNvbiIsMjIpKDQsUDZ0LDEsMCwiY2xyLWljb24iLDIzKSxsaSgpLExlKDUpLGhlKCksZ3QoNixINnQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwyNCkoNyx6NnQsMywyLCJu''@;'; put 'put ''Zy1jb250YWluZXIiLDI1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9UmUoKS4kaW1wbGljaXQsaD1SZSgyKS4kaW1wbGljaXQsZj1SZSgpO2ZlKCksVHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgiYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLGZlKCks''@;'; put 'put ''TWUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwhMCksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwhMSksZmUoKSxEcigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpLGZlKDIpLE1lKCJuZ0lmIixmLmhhc0NvbHVtbnMpfX1mdW5jdGlvbiBa''@;'; put 'put ''NnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS50cmVlTm9kZUNsaWNrZWQoaCxmLHYudGFibGVzKSl9''@;'; put 'put ''KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGd0KDEsVTZ0LDgsOSwiY2xyLXRvb2x0aXAiLDE5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRp''@;'; put 'put ''bXBsaWNpdCxkPWwuaW5kZXgsaD1SZSgzKTtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdDb2x1bW5zJiYhYS5jb2x1bW5zKSxmZSgpLE1lKCJuZ1ZhciIsZCsxPmgubGljZW5jZVN0YXRl''@;'; put 'put ''LnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gVzZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTQsMSksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4g''@;'; put 'put ''Q3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubGlicmFyeUxpc3QpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgyLCJwIiwx''@;'; put 'put ''NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9aGEoMSksZj1SZSgpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIHYubGliPWYuTElCUkFSWUlELEN0KHYubGlicmFyeU9uQ2xpY2sodi5saWJ8fCIiLGYsaCkpfSksR3QoMywiY2xyLWljb24iLDE2KSxMZSg0KSxoZSgpLGd0''@;'; put 'put ''KDUsTDZ0LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoNixaNnQsMiw1LCJjbHItdHJlZS1ub2RlIiwxNyksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9h''@;'; put 'put ''ZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDQpLERyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksZmUoKSxNZSgibmdJZiIsYS50YWJsZXMpLGZlKCksTWUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gWTZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxXNnQsNyw3''@;'; put 'put ''LCJjbHItdHJlZS1ub2RlIiwxMyksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBHNnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMyKSgxLCJzcGFuIiwzMyksTGUoMiwiIExvYWRpbmcuLi4g''@;'; put 'put ''IiksaGUoKSgpKX1sZXQgJDZ0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zZWFyY2hMaWJJbnB1dExpc3Q9bmV3IGZkLHRoaXMudGFibGVPbkNsaWNrRW1pdHRlcj1uZXcgS3IsdGhpcy5saWJy''@;'; put 'put ''YXJ5T25DbGlja0VtaXR0ZXI9bmV3IEtyLHRoaXMuaGFzQ29sdW1ucz0hMSx0aGlzLnBhZ2luZz0hMCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNl''@;'; put 'put ''cnZpY2UubGljZW5jZVN0YXRlfW5nT25Jbml0KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNlYXJjaExpYklucHV0TGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX1uZ09uQ2hhbmdlcyhhKXthLmxpYnJhcnlMaXN0Py5jdXJyZW50VmFsdWUmJnRo''@;'; put 'put ''aXMubGlicmFyeUxpc3QmJnRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGli''@;'; put 'put ''cmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksS24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUm''@;'; put 'put ''JnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1saWJyYXJ5T25DbGljayhhLGQsaCl7ZC5pbkZvcmVncm91bmQ9ITA7Y29uc3QgZj0oKT0+c2V0VGltZW91dCgoKT0+aC5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIp''@;'; put 'put ''LmZvY3VzKCkpO2lmKGQudGFibGVzKWQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6YSxsaWJyYXJ5OmQsdGFibGVzTG9hZGVkOiEwfSk7ZWxzZXtkLmxvYWRpbmdUYWJsZXM9ITAsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIu''@;'; put 'put ''ZW1pdCh7bGliaWQ6YSxsaWJyYXJ5OmQsdGFibGVzTG9hZGVkOiExfSk7Y29uc3Qgdj1zZXRJbnRlcnZhbCgoKT0+e2QubG9hZGluZ1RhYmxlc3x8KGYoKSxjbGVhckludGVydmFsKHYpKX0sNTAwKX1kLmV4cGFuZGVkJiZmKCksdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyh0aGlzLmxpYnJhcnlM''@;'; put 'put ''aXN0LGQpfXRhYmxlT25DbGljayhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Zi5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCg1MCwoKT0+e2YuaGFzQ29sdW1ucz8oZC5jb2x1bW5zPyhkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLCEwPT09ZC5leHBhbmRlZCYmKGYu''@;'; put 'put ''dGFibGU9YSxmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJhcnk6aCxjb2x1bW5zTG9hZGVkOiEwfSkpKTooZC5leHBhbmRlZD0hZC5leHBhbmRlZCxkLmxvYWRpbmdDb2x1bW5zPSEwLGYudGFibGU9YSxmLnRhYmxlT25DbGlja0VtaXR0ZXIu''@;'; put 'put ''ZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJhcnk6aCxjb2x1bW5zTG9hZGVkOiExfSkpLGYuY29sbGFwc2VUcmVlSXRlbXMoaC50YWJsZXMsZCkpOmYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6''@;'; put 'put ''ITF9KX0pfSkoKX1jb2x1bW5PbkNsaWNrKGEsZCxoKXt0aGlzLmxpYj1kLkxJQlJBUllJRCx0aGlzLnRhYmxlPWguVEFCTEVVUkksdGhpcy5jb2x1bW49YS5DT0xVUkl9bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISghdGhpcy5saWJ8fCF0aGlzLnRhYmxlKSYmYT09PXRoaXMubGliJiZkPT09''@;'; put 'put ''dGhpcy50YWJsZX1saWJDb2x1bW5BY3RpdmUoYSl7aWYoIXRoaXMuY29sdW1uKXJldHVybiExO2xldCBkPWEuc3BsaXQoIlxcIiksaD10aGlzLmNvbHVtbi5zcGxpdCgiXFwiKTtyZXR1cm4gZFtkLmxlbmd0aC0xXT09aFtoLmxlbmd0aC0xXX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9y''@;'; put 'put ''RWFjaChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFy''@;'; put 'put ''aWVzKHRoaXMubGlicmFyeUxpc3QsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX1oYW5kbGVTY3JvbGwoYSl7bGV0IGQ9YS50YXJnZXQ7ZCYmZC5zY3JvbGxUb3A+PWQuc2Nyb2xsSGVpZ2h0LWQub2Zmc2V0SGVpZ2h0LTEwJiZ0aGlzLmxvYWRNb3JlTGlicmFyaWVzKCl9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoU3UpLEdlKHUxKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkYy10cmVlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoVDZ0LDUpLDImZCl7bGV0''@;'; put 'put ''IGY7Q2koZj1TaSgpKSYmKGguc2VhcmNoTGliSW5wdXRMaXN0PWYpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgic2Nyb2xsIixmdW5jdGlvbih2KXtyZXR1cm4gaC5oYW5kbGVTY3JvbGwodil9KX0saW5wdXRzOntoYXNDb2x1bW5zOiJoYXNDb2x1bW5zIixwYWdpbmc6''@;'; put 'put ''InBhZ2luZyIsbGlicmFyeUxpc3Q6ImxpYnJhcnlMaXN0In0sb3V0cHV0czp7dGFibGVPbkNsaWNrRW1pdHRlcjoidGFibGVPbkNsaWNrRW1pdHRlciIsbGlicmFyeU9uQ2xpY2tFbWl0dGVyOiJsaWJyYXJ5T25DbGlja0VtaXR0ZXIifSxmZWF0dXJlczpbd2xdLGRlY2xzOjQsdmFyczozLGNv''@;'; put 'put ''bnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbImxpYlRyZWVOb2RlIiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5''@;'; put 'put ''dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhw''@;'; put 'put ''YW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0s''@;'; put 'put ''WzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQi''@;'; put 'put ''LCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdT''@;'; put 'put ''d2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbNCwibmdJZiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlv''@;'; put 'put ''biIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0s''@;'; put 'put ''WzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItdHJlZSIpLGd0KDEsRDZ0LDYs''@;'; put 'put ''MywiY2xyLXRyZWUtbm9kZSIsMykoMixZNnQsMiwxLCJuZy1jb250YWluZXIiLDQpLGhlKCksZ3QoMyxHNnQsMywwLCJkaXYiLDUpKSwyJmQmJihmZSgpLE1lKCJuZ0lmIixoLmxpYnJhcnlMaXN0KSxmZSgpLE1lKCJuZ0Zvck9mIixoLmxpYnJhcnlMaXN0KSxmZSgpLE1lKCJuZ0lmIixoLmxp''@;'; put 'put ''YnJhcmllc1BhZ2luZykpfSxkZXBlbmRlbmNpZXM6W25zLGJhLFMyLGNwLEVoLFBkLGZnLEhsLGowLEwyLFoxLHY3LHk3LGI3LHFsLG5sLCRzLFN3LHI0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEs2dD1bInJlc2l6ZUJveCJdLHE2dD1bImRyYWdIYW5kbGVDb3Ju''@;'; put 'put ''ZXIiXSxYNnQ9KGMsbCxhKT0+KHtjb2xIZWFkZXJzSGlkZGVuOmMsY29sSGVhZGVyc1Zpc2libGU6bCxoZWFkZXJQa3M6YX0pLEo2dD0oYyxsKT0+KHt4OmMseTpsfSk7ZnVuY3Rpb24gUTZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMzcpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1S''@;'; put 'put ''ZSgpO2ZlKCksVXUoIlRvIHVubG9jayBtb3JlIHRoZW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD8idmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9s''@;'; put 'put ''bGVyLmlvIil9fWZ1bmN0aW9uIGU4dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMzgpLEd0KDEsImNsci1zcGlubmVyIiwzOSksaGUoKSl9ZnVuY3Rpb24gdDh0KGMsbCl7MSZjJiYoZGUoMCwicCIsNDApLExlKDEsIiBWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCAiKSxoZSgpKX1mdW5jdGlv''@;'; put 'put ''biBuOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkYy10cmVlIiw0MSksRnQoImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkubGlicmFyeU9uQ2xpY2soaCkpfSkoInRhYmxlT25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgp''@;'; put 'put ''e3JldHVybiB3dChhKSxDdChSZSgpLnRhYmxlT25DbGljayhoKSl9KSxoZSgpfTImYyYmTWUoImxpYnJhcnlMaXN0IixSZSgpLmxpYnJhcmllcyl9ZnVuY3Rpb24gcjh0KGMsbCl7MSZjJiYoZGUoMCwicCIsNDIpLExlKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxpc3Qgb24gdGhlIGxlZnQg''@;'; put 'put ''IiksaGUoKSl9ZnVuY3Rpb24gaTh0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsNTApfWZ1bmN0aW9uIGE4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQsdj1SZSgp''@;'; put 'put ''O3JldHVybiB2Lm1pbmltaXplKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDEsImNsci1pY29uIiwyMCksZGUoMiwic3BhbiIsMTkpLExlKDMsIk1pbmltaXplIHZpZXdib3giKSxoZSgpKCl9fWZ1bmN0aW9uIG84dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEi''@;'; put 'put ''LDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiB2LnJlc3RvcmUoZiksQ3Qodi5zdG9wUHJvcGFnYXRpb24oaCkpfSksR3QoMSwiY2xyLWljb24iLDIxKSxkZSgyLCJzcGFuIiwxOSksTGUoMywiUmVzdG9yZSB2aWV3''@;'; put 'put ''Ym94IiksaGUoKSgpfX1mdW5jdGlvbiBzOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuc2VsZWN0Vmlld2JveChoKSl9KSxkZSgxLCJkaXYiLDQ0KSxM''@;'; put 'put ''ZSgyKSxndCgzLGk4dCwxLDAsImNsci1zcGlubmVyIiw0NSksaGUoKSxkZSg0LCJkaXYiKSg1LCJhIiw0NiksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIHYucmVzZXRQb3NTaXplKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgp''@;'; put 'put ''KX0pLEd0KDYsImNsci1pY29uIiw0NyksZGUoNywic3BhbiIsMTkpLExlKDgsIlJlc2V0IHBvc2l0aW9uIGFuZCBzaXplIiksaGUoKSgpLGd0KDksYTh0LDQsMCwiYSIsNDgpKDEwLG84dCw0LDAsImEiLDQ4KSxkZSgxMSwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13''@;'; put 'put ''dChhKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiB2LmNsb3NlKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDEyLCJjbHItaWNvbiIsNDkpLGRlKDEzLCJzcGFuIiwxOSksTGUoMTQsIkNsb3NlIHZpZXdib3giKSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNp''@;'; put 'put ''dCxkPVJlKCk7VHIoInNlbGVjdGVkIiwobnVsbD09ZC5zZWxlY3RlZFZpZXdib3g/bnVsbDpkLnNlbGVjdGVkVmlld2JveC5pZCk9PT1hLmlkKSxmZSgyKSxWZigiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLGZlKCksTWUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZl''@;'; put 'put ''KDIpLFRyKCJkaXNhYmxlZCIsMD09PWEueCYmMD09PWEueSksZmUoNCksTWUoIm5nSWYiLCFhLm1pbmltaXplZCksZmUoKSxNZSgibmdJZiIsYS5taW5pbWl6ZWQpfX1mdW5jdGlvbiBsOHQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4k''@;'; put 'put ''aW1wbGljaXQ7ZmUoKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBjOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJkaXYiLDUzKSgyLCJhcHAtYXV0b2NvbXBsZXRlIiw1NCwwKSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9aGEoMyks''@;'; put 'put ''dj1SZSgpLm5nVmFyO3JldHVybiBDdChSZSgpLm9uQ29sc2VhcmNoQ2hhbmdlKGYsaCx2LmNvbEhlYWRlcnNIaWRkZW4pKX0pLGd0KDQsbDh0LDIsMSwib3B0aW9uIiw1NSksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkubmdWYXI7ZmUoMiksTWUoImlucHV0SWQiLCJ2aWV3Ym94''@;'; put 'put ''LWNvbHVtbi1zZWFyY2giKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLGZlKDIpLE1lKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNIaWRkZW4pfX1mdW5jdGlvbiB1OHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw2MSl9ZnVuY3Rpb24gZDh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUo''@;'; put 'put ''MCwiY2xyLWljb24iLDYyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMykub25Db2xSZW1vdmUoaCkpfSksaGUoKX19ZnVuY3Rpb24gaDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1OCkoMSwic3BhbiIpLExlKDIp''@;'; put 'put ''LGd0KDMsdTh0LDEsMCwiY2xyLWljb24iLDU5KSxoZSgpLGd0KDQsZDh0LDEsMCwiY2xyLWljb24iLDYwKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgyKS5uZ1ZhcixoPVJlKCk7ZHJlKCJjb2wtYm94IGNvbHVtbi0iLGEsIiIpLFRyKCJjdXJzb3ItZGVmYXVsdC1pIixk''@;'; put 'put ''LmhlYWRlclBrcy5pbmNsdWRlcyhhKSkoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLE1lKCJjZGtEcmFnRGF0YSIsYSkoImNka0RyYWdEaXNhYmxlZCIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLGZlKDIpLFV1KCIgIixhLCIgIiwibnVtIj09PShu''@;'; put 'put ''dWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS4kZGF0YWZvcm1hdHMudmFyc1thXS50eXBlKT8iKG51bWVyaWMpIjoiIiwiICIpLGZlKCksTWUoIm5nSWYi''@;'; put 'put ''LGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxmZSgpLE1lKCJuZ0lmIiwhZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpfX1mdW5jdGlvbiBmOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJwIiwxMCksTGUoMiwiQ29sdW1ucyBUbyBEaXNwbGF5IChkcmFnIGFuZCByZS1v''@;'; put 'put ''cmRlcikiKSxoZSgpLGRlKDMsImRpdiIsNTYpLEZ0KCJjZGtEcm9wTGlzdERyb3BwZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgyKS5jb2x1bW5zRHJvcChoKSl9KSxndCg0LGg4dCw1LDEzLCJkaXYiLDU3KSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkubmdWYXI7''@;'; put 'put ''ZmUoMyksTWUoImNka0Ryb3BMaXN0RGF0YSIsYS5jb2xIZWFkZXJzVmlzaWJsZSksZmUoKSxNZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIHA4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTEpLGd0KDEsYzh0LDUsMywibmctY29udGFpbmVyIiw1MikoMixm''@;'; put 'put ''OHQsNSwyLCJuZy1jb250YWluZXIiLDUyKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcjtmZSgpLE1lKCJuZ0lmIixhLmNvbEhlYWRlcnNIaWRkZW4pLGZlKCksTWUoIm5nSWYiLGEuY29sSGVhZGVyc1Zpc2libGUpfX1mdW5jdGlvbiBnOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtk''@;'; put 'put ''ZSgwLCJjbHItaWNvbiIsODYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLmNvbGxhcHNlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIG04dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw4Nyks''@;'; put 'put ''RnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuZXhwYW5kKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIHY4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw4OCksRnQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQsZj1oYSgxNik7cmV0dXJuIEN0KFJlKCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpfX1mdW5jdGlvbiBiOHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw4OSksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24geTh0KGMsbCl7''@;'; put 'put ''MSZjJiYoZGUoMCwic3BhbiIsOTApLExlKDEsIkxvYWRpbmcuLi4iKSxoZSgpKX1mdW5jdGlvbiBfOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsOTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0LGY9aGEoMTYp''@;'; put 'put ''O3JldHVybiBSZSgpLnJlbG9hZFRhYmxlRGF0YShoKSxDdChmLnZhbHVlPSIiKX0pLGhlKCl9fWZ1bmN0aW9uIHc4dChjLGwpezEmYyYmKGRlKDAsImRpdiIsOTUpLEd0KDEsImNsci1zcGlubmVyIiwzOSksaGUoKSl9ZnVuY3Rpb24gQzh0KGMsbCl7aWYoMSZjJiZHdCgwLCJob3QtdGFibGUi''@;'; put 'put ''LDk2KSwyJmMpe2NvbnN0IGE9UmUoKS5uZ1ZhcixkPVJlKCkuJGltcGxpY2l0LGg9UmUoKTtNZSgiaG90SWQiLCJob3RJbnN0YW5jZV92aWV3Ym94XyIrZC5pZCkoInJlYWRPbmx5IiwhMCkoIm1vZGlmeUNvbFdpZHRoIixoLm1heFdpZHRoQ2hla2VyKSgiY29weVBhc3RlIixoLnZpZXdib3hU''@;'; put 'put ''YWJsZXNbYV0uaG90VGFibGUuY29weVBhc3RlKSgiY29udGV4dE1lbnUiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb250ZXh0TWVudSkoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixoLnZpZXdib3hUYWJsZXNb''@;'; put 'put ''YV0uaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3duTWVudSIsaC52aWV3Ym94VGFibGVzW2Fd''@;'; put 'put ''LmhvdFRhYmxlLmRyb3Bkb3duTWVudSkoImhlaWdodCIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmhlaWdodCkoImNlbGxzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY2VsbHMpKCJtYXhSb3dzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUubWF4Um93cykoIm1hbnVh''@;'; put 'put ''bENvbHVtblJlc2l6ZSIsITApKCJsaWNlbnNlS2V5IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUubGljZW5zZUtleSl9fWZ1bmN0aW9uIFM4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTIpLGd0KDEsdzh0LDIsMCwiZGl2Iiw5MykoMixDOHQsMSwxNywiaG90LXRhYmxlIiw5NCks''@;'; put 'put ''aGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXIsZD1SZSgpLiRpbXBsaWNpdDtfZCgiZGlzcGxheSIsZC5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxmZSgpLE1lKCJuZ0lmIixkLmxvYWRpbmdEYXRhJiZhPDApLGZlKCksTWUoIm5nSWYiLGE+LTEpfX1mdW5jdGlvbiBNOHQoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJkaXYiLDYzLDEpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuZm9jdXNWaWV3Ym94KGgpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3Jl''@;'; put 'put ''dHVybiBDdChSZSgpLnZpZXdib3hEcmFnRW5kZWQoaCxmKSl9KSxkZSgyLCJkaXYiLDY0KSgzLCJzcGFuIiw2NSksTGUoNCksaGUoKSxkZSg1LCJkaXYiLDY2KSxndCg2LGc4dCwxLDAsImNsci1pY29uIiw2NykoNyxtOHQsMSwwLCJjbHItaWNvbiIsNjgpLGRlKDgsImNsci1pY29uIiw2OSks''@;'; put 'put ''RnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLm1pbmltaXplKGgpKX0pLGhlKCksZGUoOSwiY2xyLWljb24iLDcwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY2xv''@;'; put 'put ''c2UoaCkpfSksaGUoKSgpKCksZGUoMTAsInNwYW4iLDcxLDIpLEZ0KCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9aGEoMSksTT1oYSgxMSk7cmV0dXJuIEN0KFJlKCkuZHJhZ01vdmUoTSx2LGYsaCkpfSksaGUoKSxkZSgxMiwiZm9ybSIsNzIp''@;'; put 'put ''KDEzLCJkaXYiLDczKSgxNCwiZGl2Iiw3NCkoMTUsImlucHV0Iiw3NSwzKSxGdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1oYSgxNik7cmV0dXJuIEN0KFJlKCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpLGd0KDE3LHY4dCwxLDAsImNsci1p''@;'; put 'put ''Y29uIiw3NikoMTgsYjh0LDIsMCwic3BhbiIsNzcpLGhlKCksZGUoMTksImNsci1jaGVja2JveC1jb250YWluZXIiKSgyMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMSwiaW5wdXQiLDc4KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7''@;'; put 'put ''cmV0dXJuIG1pKGYuc2VhcmNoTnVtZXJpYyxoKXx8KGYuc2VhcmNoTnVtZXJpYz1oKSxDdChoKX0pLGhlKCksZGUoMjIsImxhYmVsIiksTGUoMjMsIk51bWVyaWMiKSxoZSgpKCkoKSgpLGRlKDI0LCJkaXYiLDQ0KSxndCgyNSx5OHQsMiwwLCJzcGFuIiw3OSkoMjYsXzh0LDEsMCwiY2xyLWlj''@;'; put 'put ''b24iLDgwKSxkZSgyNywiYSIsODEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPWhhKDE2KTtyZXR1cm4gUmUoKS5vcGVuRmlsdGVyKGgpLEN0KGYudmFsdWU9IiIpfSksR3QoMjgsImNsci1pY29uIiw4MiksZGUoMjksInNwYW4iLDgzKSxMZSgzMCks''@;'; put 'put ''aGUoKSgpLGRlKDMxLCJjbHItaWNvbiIsODQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5vcGVuVGFibGVFZGl0KGgpKX0pLGhlKCkoKSgpLGd0KDMyLFM4dCwzLDQsImRpdiIsODUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwu''@;'; put 'put ''JGltcGxpY2l0LGQ9UmUoKTtfZCgiZGlzcGxheSIsYS5taW5pbWl6ZWQ/Im5vbmUiOiIiKSgid2lkdGgiLGEud2lkdGgsInB4IikoImhlaWdodCIsYS5oZWlnaHQsInB4IikoInBvaW50ZXItZXZlbnRzIixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpKCJib3gtc2hhZG93IixhLmNvbGxhcHNlZD8i''@;'; put 'put ''bm9uZSI6IiIpLFRyKCJmb2N1c2VkIixhLmZvY3VzZWQpLE1lKCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsbHAoMzQsSjZ0LGEueCxhLnkpKSgiaWQiLCJ2aWV3Ym94XyIrYS5pZCksZmUoNCksVmYoIiAjIixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxmZSgyKSxNZSgi''@;'; put 'put ''bmdJZiIsIWEuY29sbGFwc2VkKSxmZSgpLE1lKCJuZ0lmIixhLmNvbGxhcHNlZCksZmUoMyksTWUoImlkIiwiaGFuZGxlX3ZpZXdib3hfIithLmlkKSxmZSgyKSxfZCgiZGlzcGxheSIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxmZSgzKSxNZSgidHlwZSIsYS5zZWFyY2hOdW1lcmljPyJudW1i''@;'; put 'put ''ZXIiOiJ0ZXh0IiksZmUoMiksTWUoIm5nSWYiLCFhLnNlYXJjaExvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksZmUoMykscGkoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksZmUoNCksTWUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKCksTWUoIm5nSWYiLCFhLmxv''@;'; put 'put ''YWRpbmdEYXRhKSxmZSgyKSxUcigiZmlsdGVyLWFjdGl2ZSIsIjAiIT09YS5maWx0ZXJfcGspLGZlKDIpLHdyKGEuZmlsdGVyVGV4dCksZmUoKSxUcigiZGlzYWJsZWQiLCFkLnRhYmxlRWRpdEV4aXN0cyhhKSksZmUoKSxNZSgibmdWYXIiLGQuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSkpfX1m''@;'; put 'put ''dW5jdGlvbiB4OHQoYyxsKXtpZigxJmMmJkd0KDAsImFwcC1xdWVyeSIsOTcsNCksMiZjKXtjb25zdCBhPVJlKCk7TWUoInZpZXdib3hJZCIsbnVsbD09YS5maWx0ZXJpbmdWaWV3Ym94P251bGw6YS5maWx0ZXJpbmdWaWV3Ym94LmlkKX19bGV0IEk2ZT0oKCk9PntjbGFzcyBje2dldCB2aWV3''@;'; put 'put ''Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5fdmlld2JveE1vZGFsfXNldCB2aWV3Ym94TW9kYWwoYSl7aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94JiZhKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhp''@;'; put 'put ''cy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdCghMSk7dGhpcy5fdmlld2JveE1vZGFsPWEsYSYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSxjZSl7dGhpcy5uZ1pvbmU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2''@;'; put 'put ''aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLnNhc1N0b3JlU2VydmljZT12LHRoaXMubG9nZ2VyU2VydmljZT1NLHRoaXMuaGVscGVyU2VydmljZT1ELHRoaXMucm91dGVyPVosdGhpcy5hY3RpdmF0ZWRSb3V0ZT1yZSx0aGlzLmNkZj1jZSx0aGlzLl92aWV3Ym94TW9kYWw9ITEsdGhp''@;'; put 'put ''cy52aWV3Ym94TW9kYWxDaGFuZ2U9bmV3IEtyLHRoaXMubGliaW5mbz1udWxsLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMCx0aGlzLnZpZXdib3hlcz1bXSx0aGlzLmRlZmF1bHRDb25maWc9e2lkOi0xLGxpYnJhcnk6IiIsdGFibGU6IiIsd2lkdGg6NTAwLGhlaWdodDozMDAseDowLHk6MTUw''@;'; put 'put ''LGNvbHVtbnM6W119LHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuaG90VGFibGVEZWZhdWx0PXtkYXRhOltdLGhlYWRlclBrczpbXSwkZGF0YWZvcm1hdHM6e30sYWxsQ29sSGVhZGVyczpbXSxjb2xIZWFkZXJzSGlkZGVuOltdLGNvbEhlYWRlcnNWaXNpYmxlOltd''@;'; put 'put ''LGNvbEhlYWRlcnM6W10sY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sY29sdW1uczpbXSxjb2xzOltdLGhlaWdo''@;'; put 'put ''dDoiMTAwJSIsc2V0dGluZ3M6e30saGlkZGVuQ29sdW1uczohMCxtYW51YWxDb2x1bW5Nb3ZlOiExLGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxkcm9wZG93bk1lbnU6dm9pZCAwfSx0aGlzLnZpZXdib3hUYWJsZXM9W10sdGhpcy5maWx0ZXI9ITEsdGhpcy5m''@;'; put 'put ''aWx0ZXJMb2FkaW5nPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLm1heFZpZXdib3hlcz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0PT09''@;'; put 'put ''MS8wPzY6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdHx8Nix0aGlzLmhvdFRhYmxlUmVnaXN0ZXJlcj1uZXcgWW19bmdPbkluaXQoKXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e3RoaXMubGlicmFyaWVzPWQuc2FzbGlic30pLmNhdGNoKGQ9''@;'; put 'put ''Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KS5maW5hbGx5KCgpPT57dGhpcy5saWJyYXJpZXNMb2FkaW5nPSExfSksdGhpcy5fcXVlcnk9dGhpcy5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmNsYXVzZXM9ZC5vYmosdGhpcy5maWx0ZXJMaWJkcz1kLmxp''@;'; put 'put ''YmRzfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoZD0+e3RoaXMuaG90VGFibGVEZWZhdWx0LmxpY2Vuc2VLZXk9ZH0pO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWRS''@;'; put 'put ''b3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3Ym94ZXM7YSYmKCExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveD8oc2V0VGltZW91dCgoKT0+dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJMaW5raW5nIFZpZXdib3hlcyIpKSx0aGlzLnJvdXRlci5u''@;'; put 'put ''YXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOnt9fSkpOih0aGlzLnZpZXdib3hlcz10aGlzLmRlY29kZVVybERhdGEoYSksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KSkpLHRoaXMucmVMb2FkVmlld2Jv''@;'; put 'put ''eHRhYmxlcyh0aGlzLnZpZXdib3hlcyl9bmdBZnRlclZpZXdJbml0KCl7fWdldCB2aWV3Ym94TGltaXRSZWFjaGVkKCl7cmV0dXJuIHRoaXMudmlld2JveGVzLmxlbmd0aD49dGhpcy5tYXhWaWV3Ym94ZXN9Y2xyTW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVt''@;'; put 'put ''aXQoYSl9bGlicmFyeU9uQ2xpY2soYSl7YS50YWJsZXNMb2FkZWR8fHRoaXMubG9hZFRhYmxlcyhhLmxpYnJhcnkuTElCUkFSWVJFRixhLmxpYnJhcnkpfXRhYmxlT25DbGljayhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihkLnZpZXdib3hMaW1pdFJlYWNoZWQpcmV0''@;'; put 'put ''dXJuO2NvbnN0IGg9ey4uLmQuZGVmYXVsdENvbmZpZyx0YWJsZTphLmxpYlRhYmxlLGxpYnJhcnk6YS5saWJyYXJ5LkxJQlJBUllOQU1FLGxvYWRpbmdEYXRhOiEwLGZpbHRlcl9wazoiMCIsaWQ6ZC52aWV3Ym94ZXMubGVuZ3RoKzEseDp3aW5kb3cuaW5uZXJXaWR0aC1kLmRlZmF1bHRDb25m''@;'; put 'put ''aWcud2lkdGgseToxNTB9O2Qudmlld2JveGVzLnB1c2goaCksc2V0VGltZW91dCgoKT0+e2Quc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KTtjb25zdCBmPWAke2EubGlicmFyeS5MSUJSQVJZUkVGfS4ke2EubGliVGFibGV9YDt5aWVsZCBkLmxvYWREYXRhKGYsaCksaC5sb2FkaW5nRGF0YT0h''@;'; put 'put ''MSxkLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSxkLnNuYXBUb0dyaWQoKX0pKCl9bG9hZFRhYmxlcyhhLGQpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbihoPT57bGV0IGY9aC5tcHRhYmxlcy5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuTUVN''@;'; put 'put ''TkFNRX0pO3RoaXMubGliaW5mbz1oLmxpYmluZm98fFtdLHRoaXMudGFibGVzPWYsZCYmKGQudGFibGVzPWYsZC5saWJpbmZvPXRoaXMubGliaW5mbyxkLmxvYWRpbmdUYWJsZXM9ITEsZi5sZW5ndGg+MCYmKGQuZXhwYW5kZWQ9ITApKX0pLmNhdGNoKGg9Pnt0aGlzLmxvZ2dlclNlcnZpY2Uu''@;'; put 'put ''ZXJyb3IoaCl9KX1yZWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09aC52aWV3Ym94VGFibGVzLmZpbmQoRD0+RC52aWV3Ym94SWQ9PT1kLmlkKTtoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShh''@;'; put 'put ''LHBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpKS50aGVuKEQ9PntNJiYoTS5ob3RUYWJsZS5kYXRhPUQudmlld2RhdGEpLGYobnVsbCl9KS5jYXRjaCgoKT0+e3YoKX0pfSl9KSgpfWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9t''@;'; put 'put ''aXNlKChmLHYpPT57bGV0IE09ITEsRD1oLnZpZXdib3hUYWJsZXMuZmluZChaPT5aLnZpZXdib3hJZD09PWQuaWQpO0QmJigiMCI9PT1kLmZpbHRlcl9wa3x8IWQuZmlsdGVyX3BrKSYmZigpLGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikp''@;'; put 'put ''LnRoZW4oWj0+e0Q/TT0hMDpEPXt2aWV3Ym94SWQ6ZC5pZCx2aWV3Ym94TGliRGF0YXNldDphLGhvdFRhYmxlOmFMKGguaG90VGFibGVEZWZhdWx0KX0sRC5ob3RUYWJsZS5kYXRhPVoudmlld2RhdGEsRC5ob3RUYWJsZS4kZGF0YWZvcm1hdHM9Wi4kdmlld2RhdGEsRC5ob3RUYWJsZS5jb2xz''@;'; put 'put ''PVouY29scyx6ZWUoRC5ob3RUYWJsZS5jb2xzLFtdLFouJHZpZXdkYXRhKTtsZXQgcmU9W10sY2U9W107Zm9yKGxldCBiZSBpbiBaLnZpZXdkYXRhWzBdKWJlJiZjZS5wdXNoKGJlKTtmb3IobGV0IGJlPTA7YmU8Y2UubGVuZ3RoO2JlKyspcmUucHVzaCh7ZGF0YTpjZVtiZV19KTtELmhvdFRh''@;'; put 'put ''YmxlLmhlYWRlclBrcz1hTChaLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSksRC5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzPWNlLmZpbHRlcihiZT0+IUQuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKGJlKSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuPWFMKEQuaG90''@;'; put 'put ''VGFibGUuYWxsQ29sSGVhZGVycyksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZT1jZS5maWx0ZXIoYmU9PkQuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKGJlKSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzPWNlLEQuaG90VGFibGUuY29sdW1ucz1yZSxkLmNvbHVtbnMmJmQuY29sdW1u''@;'; put 'put ''cy5sZW5ndGg+MD8oRC5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlPWQuY29sdW1ucyxkLmNvbHVtbnM/Lm1hcCgoYmUsRWUpPT57Y29uc3QgQmU9Y2VbYmVdLHFlPUQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5pbmRleE9mKEJlKTtxZT4tMSYmKEQuaG90VGFibGUuY29sSGVhZGVyc0hp''@;'; put 'put ''ZGRlbi5zcGxpY2UocWUsMSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZVtFZV09QmUpfSkpOkQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaCguLi5ELmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKDAsMTApKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxl''@;'; put 'put ''PUQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuZmlsdGVyKGJlPT5iZSksTXx8aC52aWV3Ym94VGFibGVzLnB1c2goRCksZC5xdWVyeT1oLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFoucXVlcnkpLGQuZmlsdGVyVGV4dD1aLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxzZXRUaW1lb3V0''@;'; put 'put ''KCgpPT57aC51cGRhdGVIb3RDb2x1bW5zKEQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbnx8W10sZC5pZCk7Y29uc3QgYmU9aC5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZC5pZCk7YmU/LnVwZGF0ZVNldHRpbmdzKHttYW51YWxDb2x1bW5Nb3ZlOkQuaG90VGFibGUubWFudWFsQ29sdW1uTW92''@;'; put 'put ''ZSxhZnRlckdldENvbEhlYWRlcjooRWUsQmUpPT57Y29uc3QgcWU9YmU/LmNvbFRvUHJvcChFZSk7cWUmJkQuaG90VGFibGUuaGVhZGVyUGtzLmluZGV4T2YocWUpPi0xJiZCZS5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxCZS5jbGFzc0xpc3QuYWRkKEtuLmhhbmRz''@;'; put 'put ''b250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9fSksYmU/LnJlbmRlcigpLGguc2VsZWN0ZWRWaWV3Ym94JiZoLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGQpfSksZigpfSkuY2F0Y2goWj0+e2gubG9nZ2VyU2VydmljZS5lcnJvcihaKSx2KCl9KX0pfSkoKX1yZUxvYWRWaWV3Ym94dGFibGVz''@;'; put 'put ''KGEpe2EubWFwKGQ9Pntjb25zdCBoPWAke2QubGlicmFyeX0uJHtkLnRhYmxlfWA7ZC5sb2FkaW5nRGF0YT0hMCx0aGlzLmxvYWREYXRhKGgsZCkudGhlbigoKT0+e2QubG9hZGluZ0RhdGE9ITF9KX0pfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfWdldFZpZXdib3hU''@;'; put 'put ''YWJsZUluZGV4KGEpe3JldHVybiB0aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGg9Pmgudmlld2JveElkPT09YS5pZCl9cmVzaXplKGEsZCl7Y29uc3QgaD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PWgubGVmdC1mLmxlZnQraC53''@;'; put 'put ''aWR0aCxNPWgudG9wLWYudG9wK2guaGVpZ2h0O3JldHVybiBkLnN0eWxlLndpZHRoPXYrInB4IixkLnN0eWxlLmhlaWdodD1NKyJweCIsdGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKSx0aGlzLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDFlMywoKT0+e3RoaXMudmlld2JveENoYW5n''@;'; put 'put ''ZWQoKSx0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pLHt3aWR0aDp2LGhlaWdodDpNfX1kcmFnTW92ZShhLGQsaCxmKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IHY9dGhpcy5yZXNpemUoYSxkKTtoLndpZHRoPXYud2lkdGgsaC5o''@;'; put 'put ''ZWlnaHQ9di5oZWlnaHR9KX1zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKXt0aGlzLnJlc2l6ZUJveFF1ZXJ5LmZvckVhY2goYT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9YGhhbmRsZV8ke2EubmF0aXZlRWxlbWVudC5pZH1gLGY9dGhpcy5kcmFn''@;'; put 'put ''SGFuZGxlQ29ybmVyUXVlcnkuZmluZCgodixNKT0+di5uYXRpdmVFbGVtZW50LmlkPT09aCk7dGhpcy5zZXRIYW5kbGVUcmFuc2Zvcm0oZj8ubmF0aXZlRWxlbWVudCxkLCJib3RoIil9KX1zZXRIYW5kbGVUcmFuc2Zvcm0oYSxkLGgpe2NvbnN0IGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo''@;'; put 'put ''KTtsZXQgdj1kLndpZHRoLWYud2lkdGgsTT1kLmhlaWdodC1mLmhlaWdodDt2Kz01LE0rPTUsIngiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHt2fXB4LCAwKWApLCJ5Ij09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKDAsICR7TX1weClgKSwiYm90aCI9''@;'; put 'put ''PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Z9cHgsICR7TX1weClgKX1mb2N1c1ZpZXdib3goYSl7dGhpcy52aWV3Ym94ZXMubWFwKGQ9PntkLmZvY3VzZWQ9ITF9KSxhLmZvY3VzZWQ9ITB9dmlld2JveERyYWdFbmRlZChhLGQpe2xldCBmPWEuc291cmNlLmdldFJvb3RF''@;'; put 'put ''bGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC54PWYubGVmdCxkLnk9Zi50b3AsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNuYXBUb0dyaWQoKXtjb25zdCBhPXdpbmRvdy5pbm5lcldpZHRoLGQ9d2luZG93LmlubmVySGVpZ2h0LE09TWF0aC5jZWlsKHRoaXMudmlld2JveGVzLmxl''@;'; put 'put ''bmd0aC8yKSxEPU1hdGguZmxvb3IodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLGNlPShhLTUqKE0rMSkpL00sYmU9KGEtNSooRCsxKSkvRDtsZXQgQmU9MCxydD0oZC0yNTAtNjApLzIscHQ9MCxkdD0wO2ZvcihsZXQgSnQ9MDtKdDx0aGlzLnZpZXdib3hlcy5sZW5ndGg7SnQrKyl7bGV0IHZu''@;'; put 'put ''PXRoaXMudmlld2JveGVzW0p0XSxDbj0hKEp0Pk0tMSk7Y29uc3QgdG49Q24/Y2U6YmU7IUNuJiYwPT09ZHQmJihwdD0wLGR0KyssQmU9MCksdm4ueD01K0JlK3B0Kih0bis1KSx2bi55PTI1MCtkdCoocnQrNSksdm4ud2lkdGg9dG4sdm4uaGVpZ2h0PXJ0LHB0Kyt9dGhpcy52aWV3Ym94Q2hh''@;'; put 'put ''bmdlZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSl9bWluaW1pemVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmltaXplZD0hMH0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9y''@;'; put 'put ''RWFjaChhPT57YS5taW5pbWl6ZWQ9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzZXRQb3NTaXplKGEpe2EueD13aW5kb3cuaW5uZXJXaWR0aC10aGlzLmRlZmF1bHRDb25maWcud2lkdGgsYS55PXRoaXMuZGVmYXVsdENvbmZpZy55LGEud2lkdGg9dGhpcy5kZWZhdWx0Q29uZmlnLndp''@;'; put 'put ''ZHRoLGEuaGVpZ2h0PXRoaXMuZGVmYXVsdENvbmZpZy5oZWlnaHQsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfW1pbmltaXplKGEpe2EubWluaW1pemVkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlKGEpe2EubWluaW1pemVkPSExLHRoaXMudmlld2JveENoYW5nZWQoKX1jb2xsYXBz''@;'; put 'put ''ZShhKXthLmNvbGxhcHNlZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9ZXhwYW5kKGEpe2EuY29sbGFwc2VkPSExLHRoaXMudmlld2JveENoYW5nZWQoKX1jbG9zZShhKXtjb25zdCBkPXRoaXMudmlld2JveGVzLmZpbmRJbmRleChmPT5mLmlkPT09YS5pZCksaD10aGlzLnZpZXdib3hUYWJs''@;'; put 'put ''ZXMuZmluZEluZGV4KGY9PmYudmlld2JveElkPT09YS5pZCk7ZD4tMSYmdGhpcy52aWV3Ym94ZXMuc3BsaWNlKGQsMSksaD4tMSYmdGhpcy52aWV3Ym94VGFibGVzLnNwbGljZShoLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD09PWEuaWQmJnRoaXMudW5zZXRTZWxlY3RlZFZpZXdib3go''@;'; put 'put ''KSxLbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoWiksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNlbGVjdFZpZXdib3goYSl7dm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZSYmdm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/dGhpcy5y''@;'; put 'put ''ZXNldFNlbGVjdGVkVmlld2JveChhKTphLmlkPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkP3RoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKTp0aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpfWNvbHVtbnNEcm9wKGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNv''@;'; put 'put ''bEhlYWRlcnNIaWRkZW4mJihhLnByZXZpb3VzQ29udGFpbmVyPT09YS5jb250YWluZXI/ZDFlKGEuY29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4KTpmdW5jdGlvbiBWRmUoYyxsLGEsZCl7Y29uc3QgaD1BeChhLGMubGVuZ3RoLTEpLGY9QXgoZCxsLmxlbmd0''@;'; put 'put ''aCk7Yy5sZW5ndGgmJmwuc3BsaWNlKGYsMCxjLnNwbGljZShoLDEpWzBdKX0oYS5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGEuY29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4KSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlJiYib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVycykmJnRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYS5pdGVtLmRhdGEsYS5jdXJyZW50SW5kZXgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfW9uQ29sc2VhcmNoQ2hhbmdlKGEs''@;'; put 'put ''ZCxoKXtjb25zdCBmPWguaW5kZXhPZihkKTtoLnNwbGljZShmLDEpLGEudmFsdWU9IiIsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUmJih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnB1c2goZCksdGhpcy51cGRhdGVIb3RD''@;'; put 'put ''b2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoZCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhl''@;'; put 'put ''YWRlcnNWaXNpYmxlLmxlbmd0aC0xLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSl9b25Db2xSZW1vdmUoYSl7aWYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUpe2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFk''@;'; put 'put ''ZXJzVmlzaWJsZS5pbmRleE9mKGEpO3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuc3BsaWNlKGQsMSksdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnB1c2goYSksdGhpcy51cGRhdGVIb3RDb2x1''@;'; put 'put ''bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRl''@;'; put 'put ''cnNWaXNpYmxlLmxlbmd0aCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9fXJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PWEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT10aGlzLnZpZXdib3hUYWJsZXMuZmluZChkPT5kLnZpZXdib3hJ''@;'; put 'put ''ZD09PWEuaWQpfXVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl7dGhpcy5zZWxlY3RlZFZpZXdib3g9dm9pZCAwLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9dm9pZCAwfXN0b3BQcm9wYWdhdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfW9wZW5GaWx0ZXIoYSl7dGhpcy5zZWxlY3RWaWV3Ym94''@;'; put 'put ''KGEpO2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzW3RoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSldO3RoaXMuZmlsdGVyTGliZHM9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YCx0aGlzLmZpbHRlcmluZ1ZpZXdib3g9YSx0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2Vz''@;'; put 'put ''KCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5maWx0ZXJMaWJkcyxkLmhvdFRhYmxlLmNvbHMpfW9wZW5UYWJsZUVkaXQoYSl7Y29uc3QgZD1hLmxpYnJhcnkrIi4iK2EudGFibGU7bGV0IGg9bG9jYXRpb24uaHJlZi5zbGljZSgwLGxvY2F0aW9uLmhyZWYu''@;'; put 'put ''aW5kZXhPZigiIyIpKTtoPWAke2h9Iy9lZGl0b3IvJHtkfWAsd2luZG93Lm9wZW4oaCwiX2JsYW5rIil9cmVzZXRGaWx0ZXIoKXt0aGlzLmZpbHRlcmluZ1ZpZXdib3gmJih0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPSIwIix0aGlzLnJlbG9hZFRhYmxlRGF0YSh0aGlzLmZpbHRl''@;'; put 'put ''cmluZ1ZpZXdib3gpLHRoaXMuZmlsdGVyPSExLHRoaXMudmlld2JveENoYW5nZWQoKSxLbi52aWV3Ym94ZXNbdGhpcy5maWx0ZXJpbmdWaWV3Ym94LmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGhaKSl9c2VuZENsYXVzZSgpe3RoaXMuZmlsdGVyTG9hZGluZz0hMDtsZXQgYT1b''@;'; put 'put ''XSxkPVtdO2lmKHR5cGVvZiB0aGlzLmNsYXVzZXM+InUiKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3tsZXQgaD10aGlzLmNsYXVzZXMucXVlcnlPYmo7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspe2NvbnN0IHY9aFtmXS5lbGVt''@;'; put 'put ''ZW50czthPXYuZmlsdGVyKGZ1bmN0aW9uKE0pe3JldHVybiBudWxsPT09TS52YXJpYWJsZX0pLGEubGVuZ3RoJiZkLnB1c2godil9fWlmKGQubGVuZ3RoKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3RyeXtpZih2b2lkIDAhPT10aGlz''@;'; put 'put ''LmNsYXVzZXMmJnRoaXMuZmlsdGVyTGliZHMpe2NvbnN0IGg9e2dyb3VwTG9naWM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTt0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaCh2PT57Y29uc3QgTT17ZmlsdGVyQ2xhdXNlczpbXX07di5lbGVtZW50cy5mb3JF''@;'; put 'put ''YWNoKEQ9PntNLmZpbHRlckNsYXVzZXMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEQpKX0pLE0uY2xhdXNlTG9naWM9di5jbGF1c2VMb2dpYyxoLmZpbHRlckdyb3Vwcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoTSkpfSk7Y29uc3QgZj10aGlzLnNhc1N0''@;'; put 'put ''b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGgpO3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeSh0aGlzLmZpbHRlckxpYmRzLGYpLnRoZW4odj0+e3RoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9di5yZXN1bHRbMF0uRklMVEVSX1JLLHRoaXMubG9hZERhdGEo''@;'; put 'put ''dGhpcy5maWx0ZXJMaWJkcyx0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLnRoZW4oKCk9Pnt0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9KS5jYXRjaCh2PT57dGhpcy5maWx0ZXJMb2FkaW5nPSExfSl9fWNhdGNoe3RoaXMuZmlsdGVy''@;'; put 'put ''TG9hZGluZz0hMX19c2VhcmNoVGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtkLnNlYXJjaExvYWRpbmc9ITA7bGV0IGY9YS52YWx1ZSx2PWQubGlicmFyeSsiLiIrZC50YWJsZSxNPXBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpO2NvbnN0IEQ9aC52aWV3Ym94''@;'; put 'put ''VGFibGVzLmZpbmQoWj0+Wi52aWV3Ym94SWQ9PT1kLmlkKTtEJiYoeWllbGQgaC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFTZWFyY2goZixkLnNlYXJjaE51bWVyaWMsdixNKS50aGVuKFo9PntaLnNhc3BhcmFtc3x8Wi52aWV3RGF0YT9ELmhvdFRhYmxlLmRhdGE9Wi52aWV3ZGF0YTpkLnNl''@;'; put 'put ''YXJjaExvYWRpbmc9ITB9KS5jYXRjaChaPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKFopfSksZC5zZWFyY2hMb2FkaW5nPSExKX0pKCl9cmVsb2FkVGFibGVEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YDth''@;'; put 'put ''LmxvYWRpbmdEYXRhPSEwLHlpZWxkIGQucmVsb2FkRGF0YShoLGEpLGEubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSgpfXVwZGF0ZUhvdENvbHVtbnMoYSxkKXt0aGlzLnVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKSx0aGlzLnNldENv''@;'; put 'put ''bHVtbk9yZGVyKGQpfXVwZGF0ZUNvbHVtbk9yZGVySG90KGEsZCxoKXtjb25zdCBmPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGgpO2lmKGYpe2NvbnN0IHY9Zi5wcm9wVG9Db2woYSk7Zi5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKS5tb3ZlQ29sdW1uKHYsZCksZi5yZW5kZXIo''@;'; put 'put ''KSx0aGlzLnNldENvbHVtbk9yZGVyKGgpfX10YWJsZUVkaXRFeGlzdHMoYSl7Y29uc3QgZD1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcyxoPWEubGlicmFyeTtyZXR1cm4hIWRbaF0mJmRbaF0uaW5jbHVkZXMoYS50YWJsZSl9c2V0Q29sdW1uT3JkZXIoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hl''@;'; put 'put ''cy5maW5kKGg9PmguaWQ9PT1hKTtpZihkKXtjb25zdCBoPXRoaXMuY3JlYXRlQ29sdW1uT3JkZXIoYSk7ZC5jb2x1bW5zPWgubGVuZ3RoPjA/aDpkLmNvbHVtbnN9dGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNyZWF0ZUNvbHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy5nZXRWaWV3Ym94SG90SW5z''@;'; put 'put ''dGFuY2UoYSk7aWYoIWQpcmV0dXJuW107Y29uc3QgaD1kLmdldENvbEhlYWRlcigpLGY9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVycztpZighZilyZXR1cm5bXTtjb25zdCB2PXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlPy5jb2xIZWFk''@;'; put 'put ''ZXJzVmlzaWJsZS5sZW5ndGh8fDUsTT1bXTtyZXR1cm4gaC5tYXAoKEQsWik9PntpZihaPHYpe2NvbnN0IHJlPWYuaW5kZXhPZihEKTtyZT4tMSYmTS5wdXNoKHJlKX19KSxNfXVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKXtjb25zdCBoPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGQp''@;'; put 'put ''O2lmKGgpe2NvbnN0IGY9YS5tYXAodj0+aC5wcm9wVG9Db2wodikpO2gudXBkYXRlU2V0dGluZ3Moe2hpZGRlbkNvbHVtbnM6e2NvbHVtbnM6Zn19KSxoLnJlbmRlcigpfX1nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSl7cmV0dXJuIGE/dGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXIuZ2V0SW5zdGFu''@;'; put 'put ''Y2UoYGhvdEluc3RhbmNlX3ZpZXdib3hfJHthfWApOnZvaWQgMH12aWV3Ym94Q2hhbmdlZCgpe2xldCBhO2NvbnN0IGQ9dGhpcy5lbmNvZGVVcmxEYXRhKHRoaXMudmlld2JveGVzKTtkLmxlbmd0aD4wJiYoYT17dmlld2JveGVzOmR9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRp''@;'; put 'put ''dmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOmF9KSx0aGlzLnByZXBhcmVGaWx0ZXJDYWNoZSgpfXByZXBhcmVGaWx0ZXJDYWNoZSgpe2ZvcihsZXQgYSBvZiB0aGlzLnZpZXdib3hlcylpZihLbi52aWV3Ym94ZXNbYS5pZF18fChLbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5o''@;'; put 'put ''ZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoWikpLGEucXVlcnkmJmEucXVlcnkubGVuZ3RoPjApe2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzLmZpbmQoZj0+Zi52aWV3Ym94SWQ9PT1hLmlkKSxoPWB2aWV3Ym94ZXMuJHthLmlkfWA7S24udmlld2JveGVzW2EuaWRdLmZpbHRlci5xdWVyeT1h''@;'; put 'put ''LnF1ZXJ5LEtuLnZpZXdib3hlc1thLmlkXS5maWx0ZXIubGliZHM9YS5saWJyYXJ5KyIuIithLnRhYmxlLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoaCxkPy5ob3RUYWJsZS5jb2xzKX19ZW5jb2RlVXJsRGF0YShhKXtsZXQgZD0iIjtyZXR1cm4g''@;'; put 'put ''YS5tYXAoKGgsZik9PntkKz1gJHtoLmlkfS0ke2gubGlicmFyeX0tJHtoLnRhYmxlfS0ke2gud2lkdGh9LSR7aC5oZWlnaHR9LSR7aC54fS0ke2gueX0tJHtoLmNvbGxhcHNlZD8xOjB9LSR7aC5taW5pbWl6ZWQ/MTowfS0ke2guZmlsdGVyX3BrfHwwfSR7aC5jb2x1bW5zJiZoLmNvbHVtbnMu''@;'; put 'put ''bGVuZ3RoPjA/Ii0iK2guY29sdW1ucz8uam9pbigiLCIpOiIifWAsZiE9PWEubGVuZ3RoLTEmJihkKz0iOyIpfSksZH1kZWNvZGVVcmxEYXRhKGEpe2xldCBoPVtdO3JldHVybiBhLnNwbGl0KCI7IikubWFwKHY9Pntjb25zdCBNPXYuc3BsaXQoIi0iKTtoLnB1c2goe2lkOnBhcnNlSW50KE1b''@;'; put 'put ''MF0pLGxpYnJhcnk6TVsxXSx0YWJsZTpNWzJdLHdpZHRoOnBhcnNlSW50KE1bM10pLGhlaWdodDpwYXJzZUludChNWzRdKSx4OnBhcnNlSW50KE1bNV0pLHk6cGFyc2VJbnQoTVs2XSksY29sbGFwc2VkOiEhcGFyc2VJbnQoTVs3XSksbWluaW1pemVkOiEhcGFyc2VJbnQoTVs4XSksY29sdW1u''@;'; put 'put ''czpNWzEwXT8uc3BsaXQoIiwiKS5tYXAoRD0+cGFyc2VJbnQoRCkpfHxbXSxmaWx0ZXJfcGs6TVs5XX0pfSksaH1uZ09uRGVzdHJveSgpe3RoaXMuX3F1ZXJ5Py51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFdhKSxH''@;'; put 'put ''ZSh1MSksR2UoQnMpLEdlKHZjKSxHZShraCksR2UoU2QpLEdlKFN1KSxHZShMcyksR2UoQ3UpLEdlKEVzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlld2JveGVzIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKHFhKEs2''@;'; put 'put ''dCw1KSxxYShxNnQsNSkpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGgucmVzaXplQm94UXVlcnk9ZiksQ2koZj1TaSgpKSYmKGguZHJhZ0hhbmRsZUNvcm5lclF1ZXJ5PWYpfX0saW5wdXRzOnt2aWV3Ym94TW9kYWw6InZpZXdib3hNb2RhbCJ9LG91dHB1dHM6e3ZpZXdib3hNb2RhbENoYW5n''@;'; put 'put ''ZToidmlld2JveE1vZGFsQ2hhbmdlIn0sZGVjbHM6NTYsdmFyczoyMyxjb25zdHM6W1siaW5wdXQiLCIiXSxbInJlc2l6ZUJveCIsIiJdLFsiZHJhZ0hhbmRsZUNvcm5lciIsIiJdLFsic2VhcmNoRWwiLCIiXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsInJvb3Qt''@;'; put 'put ''bW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJsaWNlbmNlLW5vdGljZSIsNCwibmdJZiJdLFsxLCJtb2RhbC1i''@;'; put 'put ''b2R5IiwiZC1mbGV4Il0sWzEsImFkZC1uZXciLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwibXQtMCJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm0tMCB2aWV3Ym94LWxpbWl0LW5vdGljZSIsNCwi''@;'; put 'put ''bmdJZiJdLFszLCJsaWJyYXJ5TGlzdCIsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIiLDQsIm5nSWYiXSxbMSwiY3VycmVudGx5LW9wZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWyJyb2xlIiwidG9vbHRpcCIsImFy''@;'; put 'put ''aWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJtbC0zIiwzLCJjbGljayJdLFsic2hhcGUiLCJncmlkLXZpZXciLCJzaXplIiwiMTkiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWyJzaGFwZSIsIm1pbnVzIiwic2l6ZSIs''@;'; put 'put ''IjE5Il0sWyJzaGFwZSIsIndpbmRvdy1yZXN0b3JlIiwic2l6ZSIsIjE5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIHctMTAwIG0tMCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcGVuLXZpZXdib3ggZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjbHItYWxpZ24taXRlbXMtY2Vu''@;'; put 'put ''dGVyIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsIm10LTEwIl0sWzEsIm0tMCJdLFsiY2xhc3MiLCJjb25maWd1cmF0aW9uLXdyYXBwZXIi''@;'; put 'put ''LCJjZGtEcm9wTGlzdEdyb3VwIiwiIiw0LCJuZ1ZhciJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ2aWV3Ym94ZXMtY29udGFpbmVyIl0sWyJjbGFzcyIsInZpZXdib3giLCJjZGtEcmFn''@;'; put 'put ''Qm91bmRhcnkiLCIudmlld2JveGVzLWNvbnRhaW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIsIjAiLDMsImZvY3VzZWQiLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJwb2ludGVyLWV2ZW50cyIsImJveC1zaGFkb3ciLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImlkIiwibW91''@;'; put 'put ''c2Vkb3duIiwiY2RrRHJhZ0VuZGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4''@;'; put 'put ''dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWzMsInZpZXdib3hJZCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJi''@;'; put 'put ''dG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwibGljZW5jZS1ub3RpY2UiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwibS0wIiwidmlld2JveC1saW1pdC1ub3RpY2UiXSxbMywibGlicmFyeU9uQ2xp''@;'; put 'put ''Y2tFbWl0dGVyIiwidGFibGVPbkNsaWNrRW1pdHRlciIsImxpYnJhcnlMaXN0Il0sWzEsInRleHQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbMSwib3Blbi12aWV3Ym94IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywi''@;'; put 'put ''Y2xpY2siXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyU21hbGwiLCIiLCJjbGFzcyIsIm1sLTMiLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0''@;'; put 'put ''b20tbGVmdCIsMywiY2xpY2siXSxbInNoYXBlIiwiY3Vyc29yLW1vdmUiLCJzaXplIiwiMTMiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLCJjbGFzcyIsInRvb2x0aXAgdG9vbHRpcC1tZCB0b29sdGlwLWJvdHRvbS1sZWZ0IG1sLTMiLDMsImNsaWNrIiw0LCJu''@;'; put 'put ''Z0lmIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6ZSIsIjE5Il0sWyJjbHJTbWFsbCIsIiIsMSwibWwtMyJdLFsiY2RrRHJvcExpc3RHcm91cCIsIiIsMSwiY29uZmlndXJhdGlvbi13cmFwcGVyIl0sWzQsIm5nSWYiXSxbMSwiY29scy1zZWFyY2giXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBs''@;'; put 'put ''ZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggY29sdW1ucyIsInRhYmluZGV4IiwiMCIsMywidmFsdWVDaGFuZ2UiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNka0Ryb3BMaXN0IiwiIiwxLCJjb2xz''@;'; put 'put ''LWxpc3QiLDMsImNka0Ryb3BMaXN0RHJvcHBlZCIsImNka0Ryb3BMaXN0RGF0YSJdLFsiY2RrRHJhZyIsIiIsMywiY2xhc3MiLCJjdXJzb3ItZGVmYXVsdC1pIiwicHJpbWFyeUtleUhlYWRlclN0eWxlIiwiY2RrRHJhZ0RhdGEiLCJjZGtEcmFnRGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JP''@;'; put 'put ''ZiJdLFsiY2RrRHJhZyIsIiIsMywiY2RrRHJhZ0RhdGEiLCJjZGtEcmFnRGlzYWJsZWQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRyYXNoIiwiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwia2V5Il0sWyJzaGFwZSIs''@;'; put 'put ''InRyYXNoIiwxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4IiwiMCIsMSwidmlld2JveCIsMywibW91c2Vkb3duIiwiY2RrRHJhZ0VuZGVkIiwiY2RrRHJhZ0ZyZWVEcmFn''@;'; put 'put ''UG9zaXRpb24iLCJpZCJdLFsiY2RrRHJhZ0hhbmRsZSIsIiIsMSwiZHJhZy1oYW5kbGUiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInRhYmxlLXRpdGxlIl0sWzEsImFjdGlvbnMiXSxbInNoYXBlIiwiYW5nbGUg''@;'; put 'put ''dG9wIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJtaW51cyIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWyJjZGtEcmFnIiwiIiwxLCJkcmFnSGFuZGxlIiwiY29ybmVyIiwzLCJj''@;'; put 'put ''ZGtEcmFnTW92ZWQiLCJpZCJdLFsiY2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWZsZXgtd3JhcCIsInRhYmxlLXNlYXJjaC13cmFwcGVyIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRl''@;'; put 'put ''ciIsImNsci1mbGV4LXdyYXAiXSxbMSwiaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCIsIm5hbWUiLCJzZWFyY2gtaW5wdXQiLDMsImtleXVwLmVudGVyIiwidHlwZSJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJj''@;'; put 'put ''bGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1zbSIsNCwibmdJ''@;'; put 'put ''ZiJdLFsic2hhcGUiLCJyZWZyZXNoIiwiY2xhc3MiLCJjbGljay1pY29uIiwzLCJjbGljayIsNCwibmdJZiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbGciLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtNSIsMywiY2xp''@;'; put 'put ''Y2siXSxbInNoYXBlIiwiZmlsdGVyIiwxLCJjbGljay1pY29uIl0sWzEsInRvb2x0aXAtY29udGVudCIsInRvb2x0aXAtbG9uZyJdLFsic2hhcGUiLCJwZW5jaWwiLDEsImNsaWNrLWljb24iLCJtbC01IiwzLCJjbGljayJdLFsiY2xhc3MiLCJjb250ZW50IiwzLCJkaXNwbGF5Iiw0LCJuZ1Zh''@;'; put 'put ''ciJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWyJzaGFwZSIs''@;'; put 'put ''InJlZnJlc2giLDEsImNsaWNrLWljb24iLDMsImNsaWNrIl0sWzEsImNvbnRlbnQiXSxbImNsYXNzIiwiaG90LXNwaW5uZXIgbXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsInN0cmV0Y2hIIiwiYWxsIiwz''@;'; put 'put ''LCJob3RJZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRyb3Bkb3duTWVu''@;'; put 'put ''dSIsImhlaWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImxpY2Vuc2VLZXkiLDQsIm5nSWYiXSxbMSwiaG90LXNwaW5uZXIiLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImlkIiwiaG90VGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJl''@;'; put 'put ''dGNoSCIsImFsbCIsMywiaG90SWQiLCJyZWFkT25seSIsIm1vZGlmeUNvbFdpZHRoIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImZpbHRlcnMi''@;'; put 'put ''LCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJsaWNlbnNlS2V5Il0sWzMsInZpZXdib3hJZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsNSksRnQoImNsck1vZGFsT3BlbkNoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24odil7cmV0dXJuIGguY2xyTW9kYWxPcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDYpLExlKDIsIiBWaWV3Ym94ZXMgIiksZ3QoMyxRNnQsMiwyLCJzcGFuIiw3KSxoZSgpLGRlKDQsImRpdiIsOCkoNSwiZGl2Iiw5KSg2LCJwIiwxMCksTGUoNywiQWRkIG5ldyIpLGhlKCks''@;'; put 'put ''R3QoOCwiaHIiLDExKSxndCg5LGU4dCwyLDAsImRpdiIsMTIpKDEwLHQ4dCwyLDAsInAiLDEzKSgxMSxuOHQsMSwxLCJkYy10cmVlIiwxNCksaGUoKSxkZSgxMiwiZGl2IiwxNSkoMTMsImRpdiIsMTYpKDE0LCJwIiwxMCksTGUoMTUsIkN1cnJlbnRseSBvcGVuIiksaGUoKSxkZSgxNiwiZGl2''@;'; put 'put ''IikoMTcsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguc25hcFRvR3JpZCgpfSksR3QoMTgsImNsci1pY29uIiwxOCksZGUoMTksInNwYW4iLDE5KSxMZSgyMCwiU25hcCB2aWV3Ym94ZXMgdG8gZ3JpZCIpLGhlKCkoKSxkZSgyMSwiYSIsMTcpLEZ0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gaC5taW5pbWl6ZUFsbCgpfSksR3QoMjIsImNsci1pY29uIiwyMCksZGUoMjMsInNwYW4iLDE5KSxMZSgyNCwiTWluaW1pemUgYWxsIHZpZXdib3hlcyIpLGhlKCkoKSxkZSgyNSwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXN0b3JlQWxs''@;'; put 'put ''KCl9KSxHdCgyNiwiY2xyLWljb24iLDIxKSxkZSgyNywic3BhbiIsMTkpLExlKDI4LCJSZXN0b3JlIGFsbCB2aWV3Ym94ZXMiKSxoZSgpKCkoKSgpLEd0KDI5LCJociIpLGd0KDMwLHI4dCwyLDAsInAiLDIyKSgzMSxzOHQsMTUsMTAsImRpdiIsMjMpLGRlKDMyLCJkaXYiLDI0KSgzMywicCIs''@;'; put 'put ''MjUpLExlKDM0KSxoZSgpKCksR3QoMzUsImhyIiksZ3QoMzYscDh0LDMsMiwiZGl2IiwyNiksaGUoKSgpLGRlKDM3LCJkaXYiLDI3KSgzOCwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnZpZXdib3hNb2RhbD0hMX0pLExlKDM5LCIgT2sgIiksaGUoKSgpKCks''@;'; put 'put ''ZGUoNDAsImRpdiIsMjkpLGd0KDQxLE04dCwzMywzNywiZGl2IiwzMCksaGUoKSxkZSg0MiwiY2xyLW1vZGFsIiwzMSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZmlsdGVyLHYpfHwoaC5maWx0ZXI9diksdn0pLGRlKDQzLCJoMyIsMzIpLExlKDQ0''@;'; put 'put ''LCIgRmlsdGVyIGZvciB2aWV3Ym94IHRhYmxlOiAiKSxkZSg0NSwic3BhbiIpLExlKDQ2KSxoZSgpKCksZGUoNDcsImRpdiIsMzMpLGd0KDQ4LHg4dCwyLDEsImFwcC1xdWVyeSIsMzQpLGhlKCksZGUoNDksImRpdiIsMjcpKDUwLCJidXR0b24iLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGgucmVzZXRGaWx0ZXIoKX0pLExlKDUxLCIgcmVzZXQgZmlsdGVyICIpLGhlKCksZGUoNTIsImJ1dHRvbiIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5maWx0ZXI9ITF9KSxMZSg1MywiIENhbmNlbCAiKSxoZSgpLGRlKDU0LCJidXR0b24iLDM2KSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguc2VuZENsYXVzZSgpfSksTGUoNTUsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYoTWUoImNsck1vZGFsT3BlbiIsaC52aWV3Ym94TW9kYWwpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiksZmUoMyksTWUoIm5nSWYiLGgu''@;'; put 'put ''bGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1oLkluZmluaXR5KSxmZSg2KSxNZSgibmdJZiIsaC5saWJyYXJpZXNMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixoLnZpZXdib3hMaW1pdFJlYWNoZWQpLGZlKCksTWUoIm5nSWYiLGgudmlld2JveE1vZGFsKSxmZSgxOSksTWUoIm5n''@;'; put 'put ''SWYiLGgudmlld2JveGVzLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0Zvck9mIixoLnZpZXdib3hlcyksZmUoMyksRHIoIiBDb25maWd1cmF0aW9uICgiLG51bGwhPWguc2VsZWN0ZWRWaWV3Ym94VGFibGUmJmguc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQ/IiMiKyhudWxs''@;'; put 'put ''PT1oLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKyIgIisobnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQpOiJzZWxlY3Qgdmlld2JveCBmcm9t''@;'; put 'put ''IGFib3ZlIiwiKSAiKSxmZSgyKSxNZSgibmdWYXIiLHBNKDE5LFg2dCxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLG51''@;'; put 'put ''bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0''@;'; put 'put ''ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmhlYWRlclBrcykpLGZlKDUpLE1lKCJuZ0Zvck9mIixoLnZpZXdib3hlcyksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLmZpbHRlciksTWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNs''@;'; put 'put ''ck1vZGFsQ2xvc2FibGUiLCExKSxmZSg0KSxVdSgiICMiLG51bGw9PWguZmlsdGVyaW5nVmlld2JveD9udWxsOmguZmlsdGVyaW5nVmlld2JveC5pZCwiICIsaC5maWx0ZXJMaWJkcywiICIpLGZlKDIpLE1lKCJuZ0lmIixoLmZpbHRlciksZmUoNiksTWUoImNsckxvYWRpbmciLGguZmlsdGVy''@;'; put 'put ''TG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEhsLG91LEt1LGowLFAyLGRzLFExZSxJZCxCeSxTaCxaMSxSZCxsNyxBMixrMixNZCxubCxvNywkcyx5cCxYZWUsRF8seTFlLGIxZSxUWSx2MWUsazZlLCQ2dCxTdyx0RV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxSNmU9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVPdmVyPW5ldyBLcix0aGlzLmZpbGVEcm9wPW5ldyBLcix0aGlzLmVsZW1lbnQ9YX1vbkRyb3AoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlcj8uZmlsZXMsaD1bXTtpZihkKWZvcihs''@;'; put 'put ''ZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWgucHVzaChkW2ZdKTt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGgpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSksdGhpcy5maWxlRHJvcC5lbWl0KGgpfW9uRHJhZ092ZXIoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFu''@;'; put 'put ''c2ZlcjtpZihkKXtpZigtMT09PWQudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47ZC5kcm9wRWZmZWN0PSJjb3B5In10aGlzLmZpbGVPdmVyLmVtaXQoITApfW9uRHJhZ0xlYXZlKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3ByZXZlbnRB''@;'; put 'put ''bmRTdG9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxl''@;'; put 'put ''RHJvcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyb3Aodil9KSgiZHJhZ292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4g''@;'; put 'put ''aC5vbkRyYWdMZWF2ZSh2KX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVPdmVyOiJmaWxlT3ZlciIsZmlsZURyb3A6ImZpbGVEcm9wIn19KX19cmV0dXJuIGN9KSgpLEw2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsZVNlbGVjdGVk''@;'; put 'put ''PW5ldyBLcix0aGlzLmVsZW1lbnQ9YX1pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKXtyZXR1cm4hIXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXMubXVsdGlwbGV9b25DaGFuZ2UoKXtjb25zdCBhPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZpbGVzO3RoaXMudXBsb2Fk''@;'; put 'put ''ZXI/LmFkZFRvUXVldWUoYSksdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChhKSx0aGlzLmlzRW1wdHlBZnRlclNlbGVjdGlvbigpJiYodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl''@;'; put 'put ''KEppKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlU2VsZWN0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNoYW5nZSgpfSl9LGlucHV0czp7dXBs''@;'; put 'put ''b2FkZXI6InVwbG9hZGVyIn0sb3V0cHV0czp7ZmlsZVNlbGVjdGVkOiJmaWxlU2VsZWN0ZWQifX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gRTh0KGMsbCl7MSZjJiYoZGUoMCwicCIsOCksTGUoMSwiIE5vIGRhdGFzZXQgbWV0YSB0byBzaG93LiAiKSxoZSgpKX1mdW5jdGlvbiBUOHQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihzaSgwKSxkZSgxLCJjbHItZGctY29sdW1uIiksTGUoMiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksd3IoYS5jb2xOYW1lfHxhLmNvbEtleSl9fWZ1bmN0aW9uIEE4dChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImNsci1kZy1jZWxsIiks''@;'; put 'put ''TGUoMiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgpLiRpbXBsaWNpdDtmZSgyKSx3cihkW2EuY29sS2V5XSl9fWZ1bmN0aW9uIGs4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1yb3ciLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KGYub25Sb3dDbGljaz9mLm9uUm93Q2xpY2soaCk6IiIpfSksZ3QoMSxBOHQsMywxLCJuZy1jb250YWluZXIiLDUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpLiRpbXBsaWNpdDtmZSgpLE1lKCJu''@;'; put 'put ''Z0Zvck9mIixhLmNvbHNUb0Rpc3BsYXkpfX1mdW5jdGlvbiBEOHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiLDExKSgxLCJjbHItZGF0YWdyaWQiKSxndCgyLFQ4dCwzLDEsIm5nLWNvbnRhaW5lciIsNSkoMyxrOHQsMiwxLCJjbHItZGctcm93IiwxMiksaGUoKSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoMiksTWUoIm5nRm9yT2YiLGEuY29sc1RvRGlzcGxheSksZmUoKSxNZSgibmdGb3JPZiIsYS5tZXRhKX19ZnVuY3Rpb24gSTh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYiIpKDEsImJ1dHRvbiIsOSksTGUoMiksaGUoKSxndCgzLEQ4''@;'; put 'put ''dCw0LDIsImNsci10YWItY29udGVudCIsMTApLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXg7ZmUoMiksd3IoYS5uYW1lKSxmZSgpLE1lKCJjbHJJZkFjdGl2ZSIsMD09PWQpfX1sZXQgTzZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm9wZW49ITEs''@;'; put 'put ''dGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLm9wZW5DaGFuZ2U9bmV3IEtyLHRoaXMucm93Q2xpY2tlZD1uZXcgS3IsdGhpcy5kc21ldGFUYWJzPVtdLHRoaXMudmVyc2lvbnNUYWJzPVtdLHRoaXMudGFicz1bXX1uZ09uSW5pdCgpe31uZ09uQ2hhbmdlcyhhKXthLmRzbWV0''@;'; put 'put ''YT8uY3VycmVudFZhbHVlPy5sZW5ndGg+MCYmKHRoaXMucGFyc2VEU01ldGEoKSx0aGlzLnBhcnNlVmVyc2lvbnMoKSx0aGlzLnRhYnM9Wy4uLnRoaXMuZHNtZXRhVGFicywuLi50aGlzLnZlcnNpb25zVGFic10pfXBhcnNlRFNNZXRhKCl7dGhpcy5kc21ldGFUYWJzPVtdO2ZvcihsZXQgYSBv''@;'; put 'put ''ZiB0aGlzLmRzbWV0YSl7bGV0IGQ9dGhpcy5kc21ldGFUYWJzLmZpbmRJbmRleChoPT5oLm5hbWU9PT1hLk9EU19UQUJMRSk7ZDwwJiYoZD10aGlzLmRzbWV0YVRhYnMucHVzaCh7bmFtZTphLk9EU19UQUJMRSx0aXRsZToiRGF0YXNldCBNZXRhIixjb2xzVG9EaXNwbGF5Olt7Y29sS2V5OiJO''@;'; put 'put ''QU1FIn0se2NvbEtleToiVkFMVUUifV0sbWV0YTpbXSxvblJvd0NsaWNrOmg9Pnt0aGlzLnJvd0NsaWNrZWQuZW1pdChoKX19KS0xKSx0aGlzLmRzbWV0YVRhYnNbZF0ubWV0YS5wdXNoKGEpfX1wYXJzZVZlcnNpb25zKCl7dGhpcy52ZXJzaW9uc1RhYnM9W3tuYW1lOiJWRVJTSU9OUyIsdGl0''@;'; put 'put ''bGU6IkRhdGFzZXQgTWV0YSIsY29sc1RvRGlzcGxheTpbe2NvbEtleToiTE9BRF9SRUYifSx7Y29sS2V5OiJVU0VSX05NIn0se2NvbEtleToiVkVSU0lPTl9EVFRNIn0se2NvbEtleToiTkVXX1JFQ09SRFMiLGNvbE5hbWU6IkFERCJ9LHtjb2xLZXk6IkNIQU5HRURfUkVDT1JEUyIsY29sTmFt''@;'; put 'put ''ZToiTU9EIn0se2NvbEtleToiREVMRVRFRF9SRUNPUkRTIixjb2xOYW1lOiJERUwifSx7Y29sS2V5OiJWRVJTSU9OX0RFU0MifV0sbWV0YTp0aGlzLnZlcnNpb25zLG9uUm93Q2xpY2s6YT0+e3RoaXMucm93Q2xpY2tlZC5lbWl0KGEpfX1dfW9uT3BlbkNoYW5nZShhKXt0aGlzLm9wZW49YSx0''@;'; put 'put ''aGlzLm9wZW5DaGFuZ2UuZW1pdChhKX1vbkNsb3NlQ2xpY2soKXt0aGlzLm9uT3BlbkNoYW5nZSghMSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGF0''@;'; put 'put ''YXNldC1pbmZvIl1dLGlucHV0czp7b3Blbjoib3BlbiIsZHNtZXRhOiJkc21ldGEiLHZlcnNpb25zOiJ2ZXJzaW9ucyJ9LG91dHB1dHM6e29wZW5DaGFuZ2U6Im9wZW5DaGFuZ2UiLHJvd0NsaWNrZWQ6InJvd0NsaWNrZWQifSxmZWF0dXJlczpbd2xdLGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6''@;'; put 'put ''W1szLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsInRl''@;'; put 'put ''eHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJMYXlvdXQiLCJ2ZXJ0aWNhbCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ0ZXh0LWNlbnRl''@;'; put 'put ''ciJdLFsiY2xyVGFiTGluayIsIiIsImlkIiwibGluazEiXSxbImlkIiwiY29udGVudDEiLCJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCIsNCwiY2xySWZBY3RpdmUiXSxbImlkIiwiY29udGVudDEiLDEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQtY2VudGVyIiwidy0xMDAiXSxbImNsYXNzIiwiY2xpY2thYmxlLXJvdyIsMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbGlja2FibGUtcm93IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksRnQoImNsck1v''@;'; put 'put ''ZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25PcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLExlKDIsIkRhdGFzZXQgTWV0YSIpLGhlKCksZGUoMywiZGl2IiwyKSxndCg0LEU4dCwyLDAsInAiLDMpLGRlKDUsImNsci10YWJzIiw0KSxndCg2LEk4dCw0LDIsImNsci10''@;'; put 'put ''YWIiLDUpLGhlKCkoKSxkZSg3LCJkaXYiLDYpKDgsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm9uQ2xvc2VDbGljaygpfSksTGUoOSwiIENsb3NlICIpLGhlKCkoKSgpKSwyJmQmJihNZSgiY2xyTW9kYWxPcGVuIixoLm9wZW4pKCJjbHJNb2RhbFNpemUiLCJ4''@;'; put 'put ''bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCksZmUoNCksTWUoIm5nSWYiLGguZHNtZXRhVGFicy5sZW5ndGg8MSksZmUoMiksTWUoIm5nRm9yT2YiLGgudGFicykpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEFtLFFmLFI3LEVtLFNwLEw3LHRfLFRtLGs3LHhtLEQ3LG91LEt1LEh5LF9tLENtLHg3''@;'; put 'put ''LHdtLHltLFM3XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFI4dD0oKT0+WyJudW1lcmljIix2b2lkIDBdLFA2ZT0oKT0+WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUuY3VzdG9tIl0sSmVlPShjLGwpPT4oe2NvbDpjLGNvbEluZGV4Omx9KSxMOHQ9KCk9Plt2''@;'; put 'put ''b2lkIDBdLE84dD0oKT0+WyJTT0ZUU0VMRUNUIiwiU09GVFNFTEVDVF9IT09LIl07ZnVuY3Rpb24gUDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTUpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLHdyKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKX19ZnVuY3Rpb24gRjh0''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmwoKSl9KSxMZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtNZSgiZGlzYWJsZWQiLGEu''@;'; put 'put ''Z2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZyksZmUoKSxEcigiICIsYS5nZW5lcmF0ZWRSZWNvcmRVcmw/ImNvcHkgdG8gY2xpcGJvYXJkIjphLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc/IkdlbmVyYXRpbmcgdXJsLi4uIjoiTGluayB0byB0aGlzIHJlY29yZCIsIiAiKX19ZnVu''@;'; put 'put ''Y3Rpb24gSDh0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxQOHQsMiwxLCJzcGFuIiwxMykoMixGOHQsMiwyLCJidXR0b24iLDE0KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09w''@;'; put 'put ''dGlvbikpLGZlKCksTWUoIm5nSWYiLCEobnVsbCE9YS5jdXJyZW50UmVjb3JkJiZhLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uKSl9fWZ1bmN0aW9uIE44dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTcpKDEsInNwYW4iLDE4KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0''@;'; put 'put ''aW9uIFY4dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBCOHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwzMiksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gajh0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIHo4dChjLGwp''@;'; put 'put ''e2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pbnB1dC1jb250YWluZXIiLDM1KSgxLCJpbnB1dCIsMzYpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpLmluZGV4O3JldHVybiBDdChSZSgyKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgicGFz''@;'; put 'put ''dGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKS4kaW1wbGljaXQsdj1SZSgyKTtyZXR1cm4gdi5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSxDdCh2LmN1cnJl''@;'; put 'put ''bnRSZWNvcmQubm9MaW5rT3B0aW9uPSEwKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpLiRpbXBsaWNpdCx2PVJlKDIpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdCho''@;'; put 'put ''KX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMykuJGltcGxpY2l0LGQ9UmUoMik7VHIoImludmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSxmZSgpLHBpKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24g''@;'; put 'put ''VTh0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBaOHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLFU4dCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtSZSgyKTtjb25zdCBmPWhhKDE2KTtmZSgp''@;'; put 'put ''LE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxwKDIsSmVlLGQsaCkpfX1mdW5jdGlvbiBXOHQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLHo4dCwyLDMsImNsci1pbnB1dC1jb250YWluZXIiLDM0KSgyLFo4dCwyLDUsImRpdiIsNSksbGkoKSks''@;'; put 'put ''MiZjKXtsZXQgYSxkO2NvbnN0IGg9UmUoMikuJGltcGxpY2l0LGY9UmUoMik7ZmUoKSxNZSgibmdJZiIsR3MoMixSOHQpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxs''@;'; put 'put ''OmEuZWRpdG9yKSksZmUoKSxNZSgibmdJZiIsR3MoMyxQNmUpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmQuZWRpdG9yKSl9fWZ1bmN0aW9uIFk4dChjLGwpe2lm''@;'; put 'put ''KDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiKSgxLCJ0ZXh0YXJlYSIsMzgsMSksRnQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMykuaW5kZXg7cmV0dXJuIEN0KFJlKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJw''@;'; put 'put ''YXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDUpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDMpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSksZ2koIm5n''@;'; put 'put ''TW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMykuJGltcGxpY2l0LHY9UmUoMik7cmV0dXJuIG1pKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksTGUoMywiICAgICAgICAgICAgICAgICAgIiksaGUo''@;'; put 'put ''KSxkZSg0LCJjbHItY29udHJvbC1oZWxwZXIiKSxMZSg1KSxoZSgpKCl9aWYoMiZjKXtsZXQgYSxkLGg7Y29uc3QgZj1oYSgyKSx2PVJlKDMpLiRpbXBsaWNpdCxNPVJlKDIpO2ZlKCksVHIoImludmFsaWQtZGF0YSIsTS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXModi5rZXkp''@;'; put 'put ''KSgibm90LWNoYXIiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmEudHlwZSksTWUoInJvd3MiLHYudmFsdWUubGVuZ3RoPjgwPzY6MSkscGkoIm5nTW9kZWwiLE0uY3VycmVudFJl''@;'; put 'put ''Y29yZFt2LmtleV0pLE1lKCJtYXhMZW5ndGgiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmQubGVuZ3RoKSxmZSg0KSxVdSgiIixmLnZhbHVlLmxlbmd0aCwiIC8gIixudWxsPT1N''@;'; put 'put ''LmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShoPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKHYua2V5KSk/bnVsbDpoLmxlbmd0aCwiIil9fWZ1bmN0aW9uIEc4dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gJDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3Qo''@;'; put 'put ''MSxHOHQsMSwwLCJuZy1jb250YWluZXIiLDM3KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7UmUoMik7Y29uc3QgZj1oYSgxNik7ZmUoKSxNZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixscCgyLEplZSxk''@;'; put 'put ''LGgpKX19ZnVuY3Rpb24gSzh0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxZOHQsNiw5LCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiw1KSgyLCQ4dCwyLDUsImRpdiIsNSksbGkoKSksMiZjKXtsZXQgYSxkO2NvbnN0IGg9UmUoMikuJGltcGxpY2l0LGY9UmUoMik7ZmUoKSxNZSgibmdJZiIs''@;'; put 'put ''R3MoMixMOHQpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmEuZWRpdG9yKSksZmUoKSxNZSgibmdJZiIsR3MoMyxQNmUpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVu''@;'; put 'put ''dFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmQuZWRpdG9yKSl9fWZ1bmN0aW9uIHE4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDM5KSgxLCJ0ZXh0''@;'; put 'put ''YXJlYSIsNDApLEZ0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxm''@;'; put 'put ''LmtleSkpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMikuJGltcGxpY2l0LHY9UmUoMik7cmV0dXJuIG1pKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksaGUoKSxkZSgyLCJjbHIt''@;'; put 'put ''Y29udHJvbC1oZWxwZXIiKSxMZSgzLCJISDptbTpzcyIpLGhlKCkoKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9UmUoMikuJGltcGxpY2l0LGg9UmUoMik7ZmUoKSxUcigiaW52YWxpZC1kYXRhIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhkLmtleSkpKCJub3QtY2hhciIs''@;'; put 'put ''bnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6YS50eXBlKSxNZSgicm93cyIsZC52YWx1ZS5sZW5ndGg+ODA/NjoxKSxwaSgibmdNb2RlbCIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSl9''@;'; put 'put ''fWZ1bmN0aW9uIFg4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzkpKDEsInRleHRhcmVhIiw0MSksRnQoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGY9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1wbGljaXQsdj1SZSgyKTtyZXR1cm4gbWkodi5jdXJyZW50UmVjb3Jk''@;'; put 'put ''W2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxoZSgpLGRlKDIsImNsci1kYXRlLWNvbnRhaW5lciIsNDIpKDMsImlucHV0Iiw0MyksRnQoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMikuJGltcGxpY2l0O3JldHVybiBD''@;'; put 'put ''dChSZSgyKS5yZWNvcmREYXRlQ2hhbmdlKGgsZi5rZXkpKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKS4kaW1wbGljaXQsZD1SZSgyKTtmZSgpLFRyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSkscGkoIm5nTW9kZWwi''@;'; put 'put ''LGQuY3VycmVudFJlY29yZFthLmtleV0pfX1mdW5jdGlvbiBKOHQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIFE4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsSjh0LDEsMCwibmctY29udGFpbmVyIiwzNyksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpLGQ9YS4kaW1wbGljaXQs''@;'; put 'put ''aD1hLmluZGV4O1JlKDIpO2NvbnN0IGY9aGEoMTYpO2ZlKCksTWUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbHAoMixKZWUsZCxoKSl9fWZ1bmN0aW9uIGU3dChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMs''@;'; put 'put ''InAiLDIyKSxMZSg0KSxndCg1LFY4dCwxLDAsImNsci1pY29uIiwyMyksaGUoKSxkZSg2LCJwIiwyNCksTGUoNyksaGUoKSgpLGRlKDgsImRpdiIsMjUpLGd0KDksQjh0LDIsMCwic3BhbiIsMjYpKDEwLGo4dCwxLDAsImNsci1pY29uIiwyNykoMTEsVzh0LDMsNCwibmctY29udGFpbmVyIiwy''@;'; put 'put ''OCkoMTIsSzh0LDMsNCwibmctY29udGFpbmVyIiwyOCkoMTMscTh0LDQsNiwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMjkpKDE0LFg4dCw0LDMsImRpdiIsMjkpKDE1LFE4dCwyLDUsImRpdiIsMjgpLGhlKCkoKSxHdCgxNiwiaHIiLDMwKSxsaSgpKSwyJmMpe2xldCBhLGQ7Y29uc3QgaD1S''@;'; put 'put ''ZSgpLGY9aC4kaW1wbGljaXQsdj1oLmluZGV4LE09UmUoMik7ZmUoNCksRHIoIiAiLGYua2V5LCIgIiksZmUoKSxNZSgibmdJZiIsTS5pc0NvbFBrKGYua2V5KSksZmUoMiksRHIoIiAiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9TS5jdXJyZW50UmVjb3JkVmFs''@;'; put 'put ''aWRhdG9yLmdldFJ1bGUoZi5rZXkpKT9udWxsOmEuZGVzYywiICIpLGZlKCksTWUoIm5nU3dpdGNoIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGYua2V5KSk/bnVsbDpkLnR5cGUpLGZlKCksTWUoIm5n''@;'; put 'put ''SWYiLE0uY3VycmVudFJlY29yZExvYWRpbmdzLmluY2x1ZGVzKHYpKSxmZSgpLE1lKCJuZ0lmIixNLmN1cnJlbnRSZWNvcmRFcnJvcnMuaW5jbHVkZXModikpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsIm51bWVyaWMiKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLHZvaWQgMCksZmUoKSxNZSgi''@;'; put 'put ''bmdTd2l0Y2hDYXNlIiwidGltZSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSxmZSgpLE1lKCJuZ1N3aXRjaENhc2UiLCJhdXRvY29tcGxldGUiKX19ZnVuY3Rpb24gdDd0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxlN3QsMTcsMTEsIm5nLWNvbnRhaW5lciIsNSksbGkoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCJBY3Rpb24iIT09YS5rZXkmJiJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5rZXkmJiJub0xpbmtPcHRpb24iIT09YS5rZXkpfX1mdW5jdGlvbiBuN3QoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLHQ3''@;'; put 'put ''dCwyLDEsIm5nLWNvbnRhaW5lciIsMTkpLGVsKDIsImtleXZhbHVlIiksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdGb3JPZiIsejgoMiwyLGEuY3VycmVudFJlY29yZCxhLm9yaWdpbmFsT3JkZXIpKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbil9fWZ1bmN0aW9uIHI3''@;'; put 'put ''dChjLGwpezEmYyYmKGRlKDAsImNsci1hbGVydCIsNDQpKDEsImNsci1hbGVydC1pdGVtIikoMiwic3BhbiIsNDUpLExlKDMsIiBEYXRhIFZhbGlkYXRpb24gRXJyb3JzIC0gUGxlYXNlIFJldmlldyAiKSxoZSgpKCkoKSksMiZjJiYoX2QoInZpc2liaWxpdHkiLFJlKCkuY3VycmVudFJlY29y''@;'; put 'put ''ZEludmFsaWRDb2xzLmxlbmd0aD4wPyJ2aXNpYmxlIjoiaGlkZGVuIiksTWUoImNsckFsZXJ0Q2xvc2FibGUiLCExKSgiY2xyQWxlcnRUeXBlIiwiZGFuZ2VyIikpfWZ1bmN0aW9uIGk3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNDYpKDEsImJ1dHRvbiIsNDcpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vblByZXZpb3VzUmVjb3JkQ2xpY2soKSl9KSxHdCgyLCJjbHItaWNvbiIsNDgpLGhlKCksZGUoMywicCIpLExlKDQsIiBDdXJyZW50IHJvdzogIiksZGUoNSwic3Ryb25nIiksTGUoNiksaGUoKSgpLGRlKDcsImJ1dHRv''@;'; put 'put ''biIsNDcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbk5leHRSZWNvcmRDbGljaygpKX0pLEd0KDgsImNsci1pY29uIiw0OSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29s''@;'; put 'put ''cy5sZW5ndGg+MCksZmUoNSksRHIoIiAiLGEuY3VycmVudFJlY29yZEluZGV4KzEsIiAiKSxmZSgpLE1lKCJkaXNhYmxlZCIsYS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApfX1mdW5jdGlvbiBhN3QoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDUzKSxMZSgxKSxoZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7TWUoIm5nVmFsdWUiLGEpLGZlKCksRHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gbzd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IikoMSwiYXBwLXNvZnQtc2VsZWN0Iiw1MSksRnQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0''@;'; put 'put ''KGEpO2NvbnN0IGY9UmUoKS5jb2xJbmRleDtyZXR1cm4gQ3QoUmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSxnaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS5jb2wsdj1SZSgpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwo''@;'; put 'put ''di5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLEZ0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLGY9aC5jb2wsdj1oLmNvbEluZGV4O3JldHVybiBDdChSZSgpLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoZi5rZXksdikpfSksZ3QoMixhN3QsMiwy''@;'; put 'put ''LCJvcHRpb24iLDUyKSxoZSgpKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPVJlKCkuY29sLGg9UmUoKTtmZSgpLHBpKCJ2YWx1ZSIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSksTWUoImlucHV0SWQiLGQua2V5KSxmZSgpLE1lKCJuZ0Zvck9mIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0''@;'; put 'put ''b3J8fG51bGw9PShhPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDphLnNvdXJjZSl9fWZ1bmN0aW9uIHM3dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNTYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgidmFsdWUiLGEp''@;'; put 'put ''LGZlKCksRHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gbDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwic2VsZWN0Iiw1NCksRnQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS5jb2xJbmRleDtyZXR1cm4gQ3QoUmUoKS5vblJlY29yZElucHV0Rm9jdXMo''@;'; put 'put ''aCxmKSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLmNvbCx2PVJlKCk7cmV0dXJuIG1pKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksZ3QoMSxzN3QsMiwyLCJvcHRpb24iLDU1''@;'; put 'put ''KSxoZSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1SZSgpLmNvbCxoPVJlKCk7cGkoIm5nTW9kZWwiLGguY3VycmVudFJlY29yZFtkLmtleV0pLGZlKCksTWUoIm5nRm9yT2YiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9y''@;'; put 'put ''LmdldFJ1bGUoZC5rZXkpKT9udWxsOmEuc291cmNlKX19ZnVuY3Rpb24gYzd0KGMsbCl7aWYoMSZjJiZndCgwLG83dCwzLDMsImRpdiIsNTApKDEsbDd0LDIsMiwibmctdGVtcGxhdGUiLG51bGwsMixJYyksMiZjKXtjb25zdCBhPWwuY29sLGQ9aGEoMiksaD1SZSgpO01lKCJuZ0lmIixudWxs''@;'; put 'put ''PT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/bnVsbDpoLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuaGFzRHFSdWxlcyhhLmtleSxHcygyLE84dCkpKSgibmdJZkVsc2UiLGQpfX1sZXQgdTd0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRo''@;'; put 'put ''aXMuaGVscGVyU2VydmljZT1kLHRoaXMucmVjb3JkQWN0aW9uPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5jdXJyZW50UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50UmVjb3Jk''@;'; put 'put ''TG9hZGluZ3M9W10sdGhpcy5jdXJyZW50UmVjb3JkRXJyb3JzPVtdLHRoaXMub25SZWNvcmRDaGFuZ2U9bmV3IEtyLHRoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQ9bmV3IEtyLHRoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQ9bmV3IEtyLHRoaXMub25SZWNvcmRFZGl0Q2xvc2U9bmV3IEty''@;'; put 'put ''LHRoaXMub25SZWNvcmRFZGl0Q29uZmlybT1uZXcgS3IsdGhpcy5vbk5leHRSZWNvcmQ9bmV3IEtyLHRoaXMub25QcmV2aW91c1JlY29yZD1uZXcgS3IsdGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHM9W10sdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2Vu''@;'; put 'put ''ZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5vcmlnaW5hbE9yZGVyPShoLGYpPT4wfW5nT25Jbml0KCl7fXZhbGlkYXRlUmVjb3JkQ29sKGEsZCl7dmFy''@;'; put 'put ''IGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5leGVjdXRlSG90VmFsaWRhdG9yKGEsZCxNPT57ZihNKX0pfSl9KSgpfXJlY29yZERhdGVDaGFuZ2UoYSxkKXtsZXQgaD10aGlzLmN1cnJlbnRS''@;'; put 'put ''ZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUoZCksZj1oP2guZGF0ZUZvcm1hdDoiIjt0aGlzLmN1cnJlbnRSZWNvcmQmJih0aGlzLmN1cnJlbnRSZWNvcmRbZF09SW9lKCkoYSkuZm9ybWF0KGYpKX1jb25maXJtUmVjb3JkRWRpdCgpe3RoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0''@;'; put 'put ''aDwxJiZ0aGlzLm9uUmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UmVjb3JkKX1jbG9zZVJlY29yZEVkaXQoKXt0aGlzLm9uUmVjb3JkRWRpdENsb3NlLmVtaXQoKX1vblJlY29yZERyb3Bkb3duQ2hhbmdlKGEsZCl7dGhpcy5vblJlY29yZERyb3Bkb3duQ2hhbmdlZC5lbWl0KHtjb2xO''@;'; put 'put ''YW1lOmEsY29sOmR9KX1vblJlY29yZElucHV0Rm9jdXMoYSxkKXt0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkLmVtaXQoe2V2ZW50OmEsY29sTmFtZTpkfSl9cmVjb3JkSW5wdXRQYXN0ZShhKXtzZXRUaW1lb3V0KCgpPT57YS50YXJnZXQudmFsdWU9YS50YXJnZXQudmFsdWUucmVwbGFjZSgv''@;'; put 'put ''XHMrJC8sIiIpfSwwKX1yZWNvcmRJbnB1dENoYW5nZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLHY9YS50YXJnZXQudmFsdWU7aC5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgzMDAs''@;'; put 'put ''KCk9PntoLnZhbGlkYXRlUmVjb3JkQ29sKGYsdikudGhlbihNPT57Y29uc3QgRD1oLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmRleE9mKGQpO00/RD4tMSYmaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuc3BsaWNlKEQsMSk6RDwwJiZoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5w''@;'; put 'put ''dXNoKGQpfSl9KX0pKCl9b25OZXh0UmVjb3JkQ2xpY2soKXt0aGlzLm9uTmV4dFJlY29yZC5lbWl0KCl9b25QcmV2aW91c1JlY29yZENsaWNrKCl7dGhpcy5vblByZXZpb3VzUmVjb3JkLmVtaXQoKX1jb3B5VG9DbGlwKGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3JlY29y''@;'; put 'put ''ZE1vZGFsUmVmIC5tb2RhbC10aXRsZSIpO2lmKGQpe2NvbnN0IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtoLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsaC5zdHlsZS5sZWZ0PSIwIixoLnN0eWxlLnRvcD0iMCIsaC5zdHlsZS5vcGFjaXR5PSIwIixoLnN0eWxlLnpJbmRl''@;'; put 'put ''eD0iNTAwMCIsaC52YWx1ZT1hLGQuYXBwZW5kQ2hpbGQoaCksaC5mb2N1cygpLGguc2VsZWN0KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxkLnJlbW92ZUNoaWxkKGgpLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPWF9fWdlbmVyYXRlRWRpdFJlY29yZFVybCgpe3ZhciBhPXRoaXM7''@;'; put 'put ''cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKWEuY29weVRvQ2xpcChhLmdlbmVyYXRlZFJlY29yZFVybCk7ZWxzZXthLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITA7Y29uc3QgZD1bXTthLmhlYWRlclBrcy5mb3JFYWNoKGg9PntsZXQgZj0iQyIs''@;'; put 'put ''dj0iIjtmb3IobGV0IE09MDtNPGEuY2VsbFZhbGlkYXRpb24ubGVuZ3RoO00rKyl7Y29uc3QgRD1hLmNlbGxWYWxpZGF0aW9uW01dO2lmKEQuZGF0YT09PWgpeygibnVtZXJpYyI9PT1ELnR5cGV8fCJkYXRlIj09PUQudHlwZXx8InRpbWUiPT09RC50eXBlKSYmKGY9Ik4iKTticmVha319dj0i''@;'; put 'put ''QyI9PT1mP2AnJHthLmN1cnJlbnRSZWNvcmRbaF19J2A6YS5jdXJyZW50UmVjb3JkW2hdLnRvU3RyaW5nKCksZC5wdXNoKHtHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9JRDowLFZBUklBQkxFX05NOmgsT1BFUkFUT1JfTk06Ij0iLFJBV19WQUxVRTp2''@;'; put 'put ''fSl9KSxkLmxlbmd0aD4wJiZhLmxpYmRzJiYoeWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsZCkudGhlbihoPT57YS5xdWVyeUZpbHRlcj17aWQ6aC5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOmgucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX07Y29uc3QgTT1sb2Nh''@;'; put 'put ''dGlvbi5ocmVmLnNwbGl0KCIjIilbMF0rIiMvZWRpdG9yL2VkaXQtcmVjb3JkLyIrYS5xdWVyeUZpbHRlci50YWJsZSsiLyIrYS5xdWVyeUZpbHRlci5pZDthLmNvcHlUb0NsaXAoTSksYS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLGEuZmlsdGVyPSExfSkuY2F0Y2goaD0+e2Eu''@;'; put 'put ''c3VibWl0TG9hZGluZz0hMX0pKX19KSgpfWlzQ29sUGsoYSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2YoYSk+LTF9dHJhY2tCeUZuKGEsZCl7cmV0dXJuIGF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uoa2gpLEdlKFN1KSl9fXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdC1yZWNvcmQiXV0saW5wdXRzOntjdXJyZW50UmVjb3JkOiJjdXJyZW50UmVjb3JkIixyZWNvcmRBY3Rpb246InJlY29yZEFjdGlvbiIsbGliZHM6ImxpYmRzIixxdWVyeUZpbHRlcjoicXVlcnlGaWx0''@;'; put 'put ''ZXIiLGZpbHRlcjoiZmlsdGVyIixzdWJtaXRMb2FkaW5nOiJzdWJtaXRMb2FkaW5nIixoZWFkZXJQa3M6ImhlYWRlclBrcyIsY2VsbFZhbGlkYXRpb246ImNlbGxWYWxpZGF0aW9uIixjdXJyZW50UmVjb3JkSW5kZXg6ImN1cnJlbnRSZWNvcmRJbmRleCIsY3VycmVudFJlY29yZExvYWRpbmdz''@;'; put 'put ''OiJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLGN1cnJlbnRSZWNvcmRFcnJvcnM6ImN1cnJlbnRSZWNvcmRFcnJvcnMiLGN1cnJlbnRSZWNvcmRWYWxpZGF0b3I6ImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IifSxvdXRwdXRzOntvblJlY29yZENoYW5nZToib25SZWNvcmRDaGFuZ2UiLG9uUmVjb3Jk''@;'; put 'put ''SW5wdXRGb2N1c2VkOiJvblJlY29yZElucHV0Rm9jdXNlZCIsb25SZWNvcmREcm9wZG93bkNoYW5nZWQ6Im9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkIixvblJlY29yZEVkaXRDbG9zZToib25SZWNvcmRFZGl0Q2xvc2UiLG9uUmVjb3JkRWRpdENvbmZpcm06Im9uUmVjb3JkRWRpdENvbmZpcm0i''@;'; put 'put ''LG9uTmV4dFJlY29yZDoib25OZXh0UmVjb3JkIixvblByZXZpb3VzUmVjb3JkOiJvblByZXZpb3VzUmVjb3JkIn0sZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1siYXV0b2NvbXBsZXRlIiwiIl0sWyJjaGFyVGV4dGFyZWEiLCIiXSxbIm90aGVyX3RoYW5fc29mdF9zZWxlY3QiLCIiXSxbImlk''@;'; put 'put ''IiwicmVjb3JkTW9kYWxSZWYiLDEsInJlY29yZC1lZGl0LW1vZGFsIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsImQtZmxleCBqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMCBweS0xMCIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiLCJwLTAiLCJjbHItZ2FwLTUiLCJjbHItZ2FwLW1kLTAiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbImNsYXNzIiwidmFsaWRh''@;'; put 'put ''dGlvbi1pbmZvLWFsZXJ0IiwzLCJ2aXNpYmlsaXR5IiwiY2xyQWxlcnRDbG9zYWJsZSIsImNsckFsZXJ0VHlwZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmV2LW5leHQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwibXItNWki''@;'; put 'put ''LDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImZvY3VzYWJsZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJwb3NpdGlvbi1hYnNvbHV0ZSBnZW5lcmF0ZS1yZWNvcmQtdXJsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ0biBidG4tbGlu''@;'; put 'put ''ayBnZW5lcmF0ZS1yZWNvcmQtdXJsLWJ1dHRvbiBwb3NpdGlvbi1hYnNvbHV0ZSIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImdlbmVyYXRlLXJlY29yZC11cmwiXSxbMSwiYnRuIiwiYnRuLWxpbmsiLCJnZW5lcmF0ZS1yZWNvcmQtdXJs''@;'; put 'put ''LWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRlIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJ3LTEwMCIsInB5LTEwIl0sWzEsInNwaW5uZXIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdG''@;'; put 'put ''b3JUcmFja0J5Il0sWzEsImNvbHVtbi1lbnRyeSIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsxLCJuYW1lLWlucHV0LXJvdyJdLFsxLCJmb250LXdlaWdodC1ib2xkIl0sWyJzaGFwZSIsImtleSIsNCwibmdJZiJdLFsxLCJjZWxsLWRlc2MiXSxbMSwiaW5wdXRzLXdy''@;'; put 'put ''YXBwZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSBmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZsZXgtdW5zZXQgcG9zaXRp''@;'; put 'put ''b24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLCJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsNCwibmdJZiJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiZGF0ZS1maWVsZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm10LTEwIl0sWyJz''@;'; put 'put ''aGFwZSIsImtleSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJmbGV4LXVuc2V0IiwicG9zaXRpb24tYWJzb2x1dGUiLCJlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCJdLFsic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLDEsImZsZXgtdW5zZXQiLCJw''@;'; put 'put ''b3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJjbGFzcyIsIm51bWVyaWMtaW5wdXQiLDMsImludmFsaWQtZGF0YSIsNCwibmdJZiJdLFsxLCJudW1lcmljLWlucHV0Il0sWyJjbHJJbnB1dCIsIiIsInR5cGUiLCJ0ZXh0IiwxLCJub3QtY2hhciIsMywiZm9j''@;'; put 'put ''dXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbImNsclRleHRhcmVhIiwiIiwzLCJmb2N1c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJyb3dz''@;'; put 'put ''IiwibmdNb2RlbCIsIm1heExlbmd0aCJdLFsxLCJkYXRlLWZpZWxkIl0sWyJjbHJUZXh0YXJlYSIsIiIsMywicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJyb3dzIiwibmdNb2RlbCJdLFsiY2xyVGV4dGFyZWEiLCIiLCJyb3dzIiwiMSIsImNvbHMiLCJhdXRvIiwxLCJub3QtY2hh''@;'; put 'put ''ciIsMywicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImRhdGUtcGlja2VyIl0sWyJ0eXBlIiwiZGF0ZSIsIm5hbWUiLCJkYXRlIiwiY2xyRGF0ZSIsIiIsMSwiZC1ub25lIiwzLCJjbHJEYXRlQ2hhbmdlIl0sWzEsInZhbGlkYXRpb24taW5mby1hbGVydCIs''@;'; put 'put ''MywiY2xyQWxlcnRDbG9zYWJsZSIsImNsckFsZXJ0VHlwZSJdLFsxLCJhbGVydC10ZXh0Il0sWzEsInByZXYtbmV4dCJdLFsidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBl''@;'; put 'put ''IiwiYW5nbGUgbGVmdCIsInNpemUiLCIyMyJdLFsic2hhcGUiLCJhbmdsZSByaWdodCIsInNpemUiLCIyMyJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMywiZm9jdXNpbiIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwidmFsdWUiLCJpbnB1dElkIl0sWzMsIm5nVmFsdWUiLDQsIm5n''@;'; put 'put ''Rm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl0sWyJjbHJTZWxlY3QiLCIiLDMsImZvY3VzaW4iLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25z''@;'; put 'put ''dCBmPUxuKCk7ZGUoMCwiY2xyLW1vZGFsIiwzKSgxLCJoMyIsNCksTGUoMiksZ3QoMyxIOHQsMywyLCJuZy1jb250YWluZXIiLDUpLGhlKCksZGUoNCwiZGl2Iiw2KSxndCg1LE44dCwzLDAsImRpdiIsNykoNixuN3QsMyw1LCJuZy1jb250YWluZXIiLDUpLGhlKCksZGUoNywiZGl2Iiw4KSxn''@;'; put 'put ''dCg4LHI3dCw0LDQsImNsci1hbGVydCIsOSkoOSxpN3QsOSwzLCJkaXYiLDEwKSxkZSgxMCwiZGl2IikoMTEsImJ1dHRvbiIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbj0hMSxDdChoLmNsb3NlUmVjb3JkRWRpdCgp''@;'; put 'put ''KX0pLExlKDEyLCIgQ2FuY2VsICIpLGhlKCksZGUoMTMsImJ1dHRvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb25maXJtUmVjb3JkRWRpdCgpKX0pLExlKDE0LCIgQ29uZmlybSAiKSxoZSgpKCkoKSxndCgxNSxjN3QsMywzLCJuZy10ZW1wbGF0ZSIs''@;'; put 'put ''bnVsbCwwLEljKSxoZSgpfTImZCYmKE1lKCJjbHJNb2RhbE9wZW4iLCEwKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDIpLFZmKCIgIiwiQUREIj09PWgucmVjb3JkQWN0aW9uPyJBZGQiOiJFZGl0IiwiIHJlY29yZCBpbiAiLG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNwbGl0KCIu''@;'; put 'put ''IilbMF0sIi4iLG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNwbGl0KCIuIilbMV0sIiAiKSxmZSgpLE1lKCJuZ0lmIiwiRURJVCI9PT1oLnJlY29yZEFjdGlvbiksZmUoMiksTWUoIm5nSWYiLGguYWRkUmVjb3JkTG9hZGluZyksZmUoKSxNZSgibmdJZiIsIWguYWRkUmVjb3JkTG9hZGlu''@;'; put 'put ''ZyksZmUoMiksTWUoIm5nSWYiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0lmIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg8MSksZmUoNCksTWUoImRpc2FibGVkIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCkp''@;'; put 'put ''fSxkZXBlbmRlbmNpZXM6W25zLGJhLE4xLFMyLGNwLEEyLGsyLHFsLFQyLG5sLCRzLEp4LFlkZSxReCxIbCxvdSxLdSxqTCxZeCxKTCxzRyxaMSxHTCxFNyxRTCx3ZGUsRDZlLHdSXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGQ3dChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsInAiLDMpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLERyKCIgIixhLCIgIil9fWxldCBoN3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhdGVzTGlzdD1bXSx0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXSx0aGlzLnN0YXRlckluUHJvZ3Jl''@;'; put 'put ''c3M9ITEsdGhpcy5taW5EZWxheT0xZTN9bmdPbkluaXQoKXt9YXBwZW5kU3RhdGUoYSl7aWYoIntmaW5pc2h9Ij09PWEpcmV0dXJuIHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx2b2lkIGNsZWFySW50ZXJ2YWwodGhpcy5zdGF0ZUludGVydmFsKTt0aGlzLnN0YXRlc0xpc3QucHVzaChhKSx0''@;'; put 'put ''aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKGEpfXJlcGxhY2VMYXN0U3RhdGUoYSl7dGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wPyh0aGlzLnN0YXRlc0xpc3QucG9wKCksdGhpcy5zdGF0ZXNMaXN0LnB1c2goYSkpOnRoaXMucHJvY2Vzc2VkU3RhdGVzW3RoaXMucHJvY2Vzc2VkU3RhdGVzLmxl''@;'; put 'put ''bmd0aC0xXT1hfWNsZWFyU3RhdGVzKCl7dGhpcy5wcm9jZXNzZWRTdGF0ZXM9W119c3RhcnRTdGF0ZXIoKXt0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITAsdGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wJiZ0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwi''@;'; put 'put ''IiksdGhpcy5zdGF0ZUludGVydmFsPXNldEludGVydmFsKCgpPT57dGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wJiZ0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwiIil9LHRoaXMubWluRGVsYXkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVwbG9hZC1zdGF0ZXIiXV0sZGVjbHM6NSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwibS0wIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwidGV4dC1jZW50ZXIi''@;'; put 'put ''XSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJ2ZXJ0aWNhbC1hbGlnbi1taWRkbGUiXSxbMSwibS0wIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiksZ3QoMSxkN3QsMiwxLCJwIiwwKSxoZSgpLGRlKDIsImRpdiIsMSkoMywic3BhbiIsMiksTGUoNCwiTG9h''@;'; put 'put ''ZGluZy4uLiIpLGhlKCkoKSksMiZkJiYoZmUoKSxNZSgibmdGb3JPZiIsaC5wcm9jZXNzZWRTdGF0ZXMpKX0sZGVwZW5kZW5jaWVzOltuc10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxmN3Q9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIGEucmVwbGFjZSgvXHwv''@;'; put 'put ''ZywiIHwgIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6InBrU3BhY2VTZXBhcmF0ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpLEY2ZT0oKCk9PntjbGFzcyBje3RyYW5z''@;'; put 'put ''Zm9ybShhLGQpe3JldHVybiB0aGlzLmFkZFNlcGFyYXRvcnMoYS50b1N0cmluZygpLGQpfWFkZFNlcGFyYXRvcnMoYSxkPSIgIil7Y29uc3QgaD0oYSs9IiIpLnNwbGl0KCIuIik7bGV0IGY9aFswXTtjb25zdCB2PWgubGVuZ3RoPjE/Ii4iK2hbMV06IiIsTT0vKFxkKykoXGR7M30pLztmb3Io''@;'; put 'put ''O00udGVzdChmKTspZj1mLnJlcGxhY2UoTSwiJDEiK2QrIiQyIik7cmV0dXJuIGYrdn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToidGhvdXNhbmRTZXBhcmF0b3IiLHR5cGU6YyxwdXJl''@;'; put 'put ''OiEwfSl9fXJldHVybiBjfSkoKTtjb25zdCBwN3Q9WyJodCJdLGc3dD1bInVwbG9hZFN0YXRlciJdLG03dD1bInF1ZXJ5RmlsdGVyIl0sdjd0PVsiaG90SW5zdGFuY2UiXSxiN3Q9WyJmaWxlVXBsb2FkSW5wdXQiXSx5N3Q9KGMsbCk9Pih7bGliTmFtZTpjLHRhYmxlTmFtZTpsfSksSDZlPSgp''@;'; put 'put ''PT5bIiIsIiAiXSxfN3Q9Yz0+KHtoZWFkZXJCYXJGaWx0ZXI6Y30pLHc3dD0oKT0+WyIvaG9tZSJdO2Z1bmN0aW9uIEM3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNjQpKDEsInNwYW4iLDY1KSgyLCJsYWJlbCIsNjYpLExlKDMsIiBCcm93c2UgIiksaGUoKSgpLGRl''@;'; put 'put ''KDQsImlucHV0Iiw2NywzKSxGdCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5hdHRhY2hGaWxlKGgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSg0KSxNZSgidXBsb2FkZXIiLGEudXBsb2FkZXIpfX1mdW5jdGlvbiBTN3QoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY4KSgxLCJidXR0b24iLDY5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudXBsb2FkUGFyc2VkRmlsZXMoKSl9KSxMZSgyLCIgVXBsb2FkICIpLGhlKCkoKX0yJmMmJihmZSgpLE1lKCJkaXNhYmxlZCIsITApKX1m''@;'; put 'put ''dW5jdGlvbiBNN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDcwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLExlKDEsIiBDbG9zZSAiKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO01l''@;'; put 'put ''KCJkaXNhYmxlZCIsYS5leGNlbEZpbGVQYXJzaW5nfHxhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiB4N3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDcxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkuc2hvd1VwbG9hZE1vZGFs''@;'; put 'put ''PSExKX0pLExlKDEsIiBTa2lwICIpLGhlKCl9fWZ1bmN0aW9uIEU3dChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzIpLEd0KDEsImFwcC11cGxvYWQtc3RhdGVyIixudWxsLDQpLGhlKCkpfWZ1bmN0aW9uIFQ3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImFwcC1lZGl0LXJlY29y''@;'; put 'put ''ZCIsNzMpLEZ0KCJvblJlY29yZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jb25maXJtUmVjb3JkRWRpdCgpKX0pKCJvblJlY29yZElucHV0Rm9jdXNlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25SZWNvcmRJbnB1dEZvY3VzKGgpKX0pKCJv''@;'; put 'put ''blJlY29yZEVkaXRDbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jbG9zZVJlY29yZEVkaXQoKSl9KSgib25OZXh0UmVjb3JkIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm9uTmV4dFJlY29yZCgpKX0pKCJvblByZXZpb3VzUmVjb3JkIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB3dChhKSxDdChSZSgpLm9uUHJldmlvdXNSZWNvcmQoKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO01lKCJjdXJyZW50UmVjb3JkIixhLmN1cnJlbnRFZGl0UmVjb3JkKSgicmVjb3JkQWN0aW9uIixhLnJlY29yZEFjdGlvbikoImxpYmRzIixhLmxpYmRzKSgicXVlcnlG''@;'; put 'put ''aWx0ZXIiLGEucXVlcnlGaWx0ZXIpKCJmaWx0ZXIiLGEuZmlsdGVyKSgic3VibWl0TG9hZGluZyIsYS5zdWJtaXRMb2FkaW5nKSgiaGVhZGVyUGtzIixhLmhlYWRlclBrcykoImNlbGxWYWxpZGF0aW9uIixhLmNlbGxWYWxpZGF0aW9uKSgiY3VycmVudFJlY29yZEluZGV4IixhLmN1cnJlbnRF''@;'; put 'put ''ZGl0UmVjb3JkSW5kZXgpKCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLGEuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncykoImN1cnJlbnRSZWNvcmRFcnJvcnMiLGEuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMpKCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIixhLmN1cnJlbnRFZGl0UmVjb3JkVmFs''@;'; put 'put ''aWRhdG9yKX19ZnVuY3Rpb24gQTd0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3NCksR3QoMSwicHJvZ3Jlc3MiKSxoZSgpKX1mdW5jdGlvbiBrN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDc1KSgxLCJzcGFuIiw3NiksR3QoMiwiY2xyLWljb24iLDc3KSxkZSgzLCJz''@;'; put 'put ''cGFuIiw3OCksTGUoNCwiQmFjayB0byB0YWJsZSBzZWxlY3Rpb24iKSxoZSgpKCksZGUoNSwic3BhbiIsNzkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS52aWV3Ym94TWFuYWdlcigpKX0pLEd0KDYsImNsci1pY29uIiw4MCksZGUoNywic3BhbiIsNzgpLExl''@;'; put 'put ''KDgsIlZpZXdib3hlcyIpLGhlKCkoKSgpfTImYyYmKGZlKCksTWUoInJvdXRlckxpbmsiLEdzKDEsdzd0KSkpfWZ1bmN0aW9uIEQ3dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDg2KX1mdW5jdGlvbiBJN3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4OCks''@;'; put 'put ''TGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksRHIoIiAiLGEuZHNOb3RlLCIgIil9fWZ1bmN0aW9uIFI3dChjLGwpezEmYyYmKHNpKDApLGd0KDEsSTd0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsODcpLGxpKCkpfWZ1bmN0aW9uIEw3dChjLGwpe2lmKDEmYyYmKHNpKDAp''@;'; put 'put ''LExlKDEpLGVsKDIsInRob3VzYW5kU2VwYXJhdG9yIiksbGkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksS0koIiAoIix6OCgyLDQsYS5kYXRhU291cmNlLmxlbmd0aCwiLCIpLCIgIiwxPT09YS5kYXRhU291cmNlLmxlbmd0aD8icm93Ijoicm93cyIsIiwgIixhLmNvbHMubGVuZ3RoLCIi''@;'; put 'put ''LDE9PT1hLmNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBPN3QoYyxsKXsxJmMmJihzaSgwKSxMZSgxLCIgKDAgcm93cykgIiksbGkoKSl9ZnVuY3Rpb24gUDd0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxMN3QsMyw3LCJuZy1jb250YWluZXIiLDM5KSgyLE83''@;'; put 'put ''dCwyLDAsIm5nLWNvbnRhaW5lciIsMzkpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS56ZXJvRmlsdGVyUm93cyksZmUoKSxNZSgibmdJZiIsYS56ZXJvRmlsdGVyUm93cyl9fWZ1bmN0aW9uIEY3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImg0''@;'; put 'put ''Iiw4MSkoMSwiY2xyLXRvb2x0aXAiKSgyLCJjbHItaWNvbiIsODIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5kYXRhc2V0SW5mbz0hMCl9KSxoZSgpLGd0KDMsRDd0LDEsMCwiY2xyLWljb24iLDgzKSxkZSg0LCJzcGFuIiw4NCksTGUoNSksZGUoNiwiYSIs''@;'; put 'put ''ODUpLExlKDcpLGhlKCkoKSxndCg4LFI3dCwyLDAsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCksZ3QoOSxQN3QsMywyLCJuZy1jb250YWluZXIiLDM5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9UmUoKTtmZSgzKSxNZSgibmdJZiIsYS50YWJsZU5hbWUuaW5jbHVkZXMoIi1GQyIp''@;'; put 'put ''KSxmZSgyKSxEcigiICIsYS5saWJOYW1lLCIuIiksZmUoKSxNZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIitkLmxpYmRzKSxmZSgpLHdyKGEudGFibGVOYW1lLnJlcGxhY2UoIi1GQyIsIiIpKSxmZSgpLE1lKCJuZ0lmIixkLmRzTm90ZSYmZC5kc05vdGUubGVuZ3RoPjApLGZlKCksTWUo''@;'; put 'put ''Im5nSWYiLGQuZGF0YVNvdXJjZSl9fWZ1bmN0aW9uIEg3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsOTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykub25TaG93VXBsb2FkTW9kYWwoKSl9KSxHdCgxLCJjbHItaWNvbiIsOTYp''@;'; put 'put ''LGRlKDIsInNwYW4iLDc4KSxMZSgzLCJVcGxvYWQiKSxoZSgpKCl9fWZ1bmN0aW9uIE43dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImJ1dHRvbiIsOTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub3BlblFiKCkpfSksR3QoMiwi''@;'; put 'put ''Y2xyLWljb24iLDkxKSxkZSgzLCJzcGFuIiw3OCksTGUoNCwiRmlsdGVyIiksaGUoKSgpLGRlKDUsImJ1dHRvbiIsOTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuZWRpdFRhYmxlKCkpfSksR3QoNiwiY2xyLWljb24iLDkzKSxkZSg3LCJzcGFuIiw3OCks''@;'; put 'put ''TGUoOCwiRWRpdCIpLGhlKCkoKSxndCg5LEg3dCw0LDAsImJ1dHRvbiIsOTQpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDkpLE1lKCJuZ0lmIiwhYS5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZyl9fWZ1bmN0aW9uIFY3dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxo''@;'; put 'put ''ZSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoKSxVdSgiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250''@;'; put 'put ''YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gQjd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsODgpLGd0KDEsVjd0LDIsMiwic3BhbiIsMzkpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIixhLnJlc3RyaWN0''@;'; put 'put ''aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIGo3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImJ1dHRvbiIsOTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuY2FuY2VsRWRpdCgpKX0pLEd0KDIsImNsci1pY29uIiw5OCks''@;'; put 'put ''ZGUoMywic3BhbiIpLExlKDQsIkNhbmNlbCIpLGhlKCkoKSxkZSg1LCJjbHItdG9vbHRpcCIpKDYsImJ1dHRvbiIsOTkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBDdChoLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJvdygp''@;'; put 'put ''KX0pLEd0KDcsImNsci1pY29uIiwxMDApLExlKDgsIkFkZCBSb3cgIiksaGUoKSxndCg5LEI3dCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg3KSxoZSgpLGRlKDEwLCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLmNoZWNrU2F2ZSgp''@;'; put 'put ''KX0pLEd0KDExLCJjbHItaWNvbiIsMTAxKSxMZSgxMiwiU3VibWl0ICIpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNiksVHIoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyksTWUoImNsckxvYWRpbmciLGEuYWRkaW5nTmV3Um93''@;'; put 'put ''KX19ZnVuY3Rpb24gejd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxMDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykubWFudWFsRmlsZUVkaXRNb2RhbD0hMCl9KSxHdCgxLCJjbHItaWNvbiIsOTMpLGRlKDIsInNwYW4iKSxM''@;'; put 'put ''ZSgzLCJFZGl0IiksaGUoKSgpfX1mdW5jdGlvbiBVN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJidXR0b24iLDEwMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5kaXNjYXJkU291cmNlRmlsZT0hMCl9KSxHdCgyLCJjbHItaWNv''@;'; put 'put ''biIsOTgpLGRlKDMsInNwYW4iKSxMZSg0LCJEaXNjYXJkIGZpbGUiKSxoZSgpKCksZ3QoNSx6N3QsNCwwLCJidXR0b24iLDEwMyksZGUoNiwiYnV0dG9uIiwxMDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuc3VibWl0RXhjZWwoKSl9KSxHdCg3LCJjbHIt''@;'; put 'put ''aWNvbiIsMTAxKSxMZSg4LCIgU3VibWl0ICIpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNSksTWUoIm5nSWYiLGEuaG90VGFibGUucmVhZE9ubHkpLGZlKCksTWUoImNsckxvYWRpbmciLGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIFo3dChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsImRpdiIsODkpLGd0KDEsTjd0LDEwLDEsIm5nLWNvbnRhaW5lciIsMzkpKDIsajd0LDEzLDMsIm5nLWNvbnRhaW5lciIsMzkpKDMsVTd0LDksMiwibmctY29udGFpbmVyIiwzOSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsYS5ob3RUYWJsZS5yZWFkT25seSYm''@;'; put 'put ''IWEudXBsb2FkUHJldmlldyksZmUoKSxNZSgibmdJZiIsIWEuaG90VGFibGUucmVhZE9ubHkmJiFhLnVwbG9hZFByZXZpZXcpLGZlKCksTWUoIm5nSWYiLGEudXBsb2FkUHJldmlldyl9fWZ1bmN0aW9uIFc3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTA2KSgxLCJzcGFuIiksTGUoMiwi''@;'; put 'put ''RklMVEVSIDogIiksZGUoMywiYiIpLExlKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSg0KSx3cihhLnF1ZXJ5VGV4dCl9fWZ1bmN0aW9uIFk3dChjLGwpezEmYyYmKHNpKDApLGRlKDEsInNwYW4iLDEwOSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxkZSgzLCJkaXYiLDEx''@;'; put 'put ''MCkoNCwicCIsMTExKSxMZSg1LCJMb2FkaW5nIHRhYmxlIiksaGUoKSgpLGxpKCkpfWZ1bmN0aW9uIEc3dChjLGwpezEmYyYmKHNpKDApLGRlKDEsInNwYW4iKSxHdCgyLCJjbHItaWNvbiIsMTEyKSxoZSgpLGRlKDMsImRpdiIsMTEwKSg0LCJwIiwxMTEpLExlKDUsIkxvYWRpbmcgdGFibGUg''@;'; put 'put ''ZXJyb3IiKSxoZSgpKCksbGkoKSl9ZnVuY3Rpb24gJDd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDcpKDEsImRpdiIsMTA4KSxndCgyLFk3dCw2LDAsIm5nLWNvbnRhaW5lciIsMzkpKDMsRzd0LDYsMCwibmctY29udGFpbmVyIiwzOSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtm''@;'; put 'put ''ZSgyKSxNZSgibmdJZiIsIWEuZ2V0ZGF0YUVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLmdldGRhdGFFcnJvcil9fWZ1bmN0aW9uIEs3dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxVdSgiVG8gdW5sb2NrIG1vcmUgdGhhbiAi''@;'; put 'put ''LGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gcTd0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE1KSxndCgxLEs3dCwyLDIsInNwYW4iLDM5KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBYN3QoYyxsKXtpZigxJmMpe2NvbnN0''@;'; put 'put ''IGE9TG4oKTtkZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMTEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJlY29yZEJ1dHRvbkNsaWNrKCkpfSksR3QoMiwiY2xy''@;'; put 'put ''LWljb24iLDEwMCksTGUoMywiIEFkZCBSZWNvcmQgIiksaGUoKSxndCg0LHE3dCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDExNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLFRyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1m''@;'; put 'put ''dW5jdGlvbiBKN3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxMTYpLExlKDEpLEd0KDIsImNvbnRhY3QtbGluayIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksRHIoIiBUbyBkaXNwbGF5IG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQs''@;'; put 'put ''IiByb3dzLCBjb250YWN0ICIpfX1mdW5jdGlvbiBRN3QoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxMjgpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLFV1KCJPbmx5ICIsYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiAiLDE9PT1hLmxpY2Vu''@;'; put 'put ''Y2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD8icm93Ijoicm93cyIsIiB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIGU5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1M''@;'; put 'put ''bigpO2RlKDAsImRpdiIsMTI5KSgxLCJkaXYiLDEzMCkoMiwibGFiZWwiLDEzMSksTGUoMywiTWVzc2FnZSIpLGhlKCksZGUoNCwidGV4dGFyZWEiLDEzMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMik7cmV0dXJuIG1pKGYubWVzc2FnZSxoKXx8''@;'; put 'put ''KGYubWVzc2FnZT1oKSxDdChoKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg0KSxwaSgibmdNb2RlbCIsYS5tZXNzYWdlKSxNZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKSgidmFsdWUiLGEudmFsaWRhdGlvbkRvbmU/IiI6IlBsZWFzZSB3YWl0IHdoaWxlIHdl''@;'; put 'put ''IHZhbGlkYXRlICIrYS5jb2xzLmxlbmd0aCphLm1vZGlmZWRSb3dzSW5kZXhlcy5sZW5ndGgrIiBjZWxscy4iKX19ZnVuY3Rpb24gdDl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMTcpKDEsImRpdiIsMTE4KSgyLCJkaXYiLDExOSkoMywiZGl2IiwxMjApKDQsImJ1''@;'; put 'put ''dHRvbiIsMTIxKSxHdCg1LCJjbHItaWNvbiIsMTIyKSxoZSgpLGRlKDYsImgzIiw4KSxMZSg3KSxoZSgpKCksZGUoOCwiZGl2Iiw5KSxndCg5LFE3dCwyLDIsInNwYW4iLDEyMykoMTAsZTl0LDUsMywiZGl2IiwxMjQpLGhlKCksZGUoMTEsImRpdiIsMTI1KSgxMiwiYnV0dG9uIiwxMjYpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCk7cmV0dXJuIEN0KGguc2F2ZVRhYmxlKGguaG90VGFibGUuZGF0YSkpfSksTGUoMTMsIiBTdWJtaXQgIiksaGUoKSxkZSgxNCwiYnV0dG9uIiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCk7''@;'; put 'put ''cmV0dXJuIGguY2FuY2VsU3VibWl0KCksaC5zdWJtaXQ9ITEsQ3QoaC52YWxpZGF0aW9uRG9uZT0wKX0pLExlKDE1LCIgQ2FuY2VsICIpLGhlKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSg3KSxWZigiIFN1Ym1pdCBmb3IgQXBwcm92YWwgKCIsYS5yb3dzQ2hhbmdlZC5yb3dz''@;'; put 'put ''QWRkZWQsIiBhZGRlZCwgIixhLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkLCIgdXBkYXRlZCwgIixhLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkLCIgZGVsZXRlZCkgIiksZmUoMiksTWUoIm5nSWYiLGEudG90YWxSb3dzQ2hhbmdlZD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19s''@;'; put 'put ''aW1pdCYmYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT1hLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlVHJ1ZSksZmUoMiksTWUoImRpc2FibGVkIiwhYS52YWxpZGF0aW9uRG9uZSl9fWZ1bmN0aW9uIG45dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4i''@;'; put 'put ''LDEzMyksTGUoMSksZWwoMiwicGtTcGFjZVNlcGFyYXRlIiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoKTtmZSgpLFV1KCIgT24gcm93ICIsYSsxLCI6ICIsRGMoMiwyLGQucGtGaWVsZHNbYV0ucmVwbGFjZSgifCIsIiIpKSwiICIpfX1mdW5jdGlvbiByOXQoYyxsKXtp''@;'; put 'put ''ZigxJmMmJihkZSgwLCJwIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksVmYoIiAiLGEuY29sLCIoIixhLmxlbiwiKSwgIixhLnZhbCwiICIpfX1mdW5jdGlvbiBpOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDEzNCkoMSwiZGl2Iiwx''@;'; put 'put ''MzUpKDIsImRpdiIsMTE5KSgzLCJkaXYiLDEyMCkoNCwiYnV0dG9uIiwxMjEpLEd0KDUsImNsci1pY29uIiwxMjIpLGhlKCksZGUoNiwiaDMiLDgpLExlKDcsIkVycm9yIiksaGUoKSgpLGRlKDgsImRpdiIsOSkoOSwicCIpLExlKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2Vz''@;'; put 'put ''IiksaGUoKSgpLGRlKDExLCJkaXYiLDIzKSgxMiwiYnV0dG9uIiw0NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksTGUoMTMsIiBPayAiKSxoZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIGE5dChjLGwpezEmYyYmR3QoMCwiYXBw''@;'; put 'put ''LXF1ZXJ5IixudWxsLDUpfWZ1bmN0aW9uIG85dChjLGwpezEmYyYmKGRlKDAsInAiLDEzNiksTGUoMSwiIFNvcnJ5IHRoYXQgZGlkbid0IHdvcmssIHRyeSBhZ2Fpbi4gIiksaGUoKSl9bGV0IGlOPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuY250PTB9c3RhdGlje3RoaXMubm9uUGtDbnQ9''@;'; put 'put ''MH1zdGF0aWN7dGhpcy5sYXN0Q2VsbD0wfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSxjZSxiZSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0aGlzLmhlbHBlclNlcnZp''@;'; put 'put ''Y2U9dix0aGlzLnJvdXRlcj1NLHRoaXMucm91dGU9RCx0aGlzLnNhc1NlcnZpY2U9Wix0aGlzLmNkZj1yZSx0aGlzLmhvdFJlZ2lzdGVyZXI9Y2UsdGhpcy5zcHJlYWRzaGVldFNlcnZpY2U9YmUsdGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdD1uZXcgZmQsdGhpcy5xdWVyeUZpbHRlckNvbXBM''@;'; put 'put ''aXN0PW5ldyBmZCx0aGlzLmhvdEluc3RhbmNlQ29tcExpc3Q9bmV3IGZkLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9bmV3IGZkLHRoaXMubWVzc2FnZT0iIix0aGlzLiRkYXRhRm9ybWF0cz1udWxsLHRoaXMuY29scz1bXSx0aGlzLnJlc3RyaWN0aW9ucz17fSx0aGlzLmRhdGFzZXRJ''@;'; put 'put ''bmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lvbnM9W10sdGhpcy5kc05vdGU9IiIsdGhpcy52aWV3Ym94ZXM9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGhpZGRlbjohMCxjb2x1bW5zOltdLGhlaWdodDoiMTAwJSIsbWlu''@;'; put 'put ''U3BhcmVSb3dzOjEsbGljZW5zZUtleTp2b2lkIDAscmVhZE9ubHk6ITAsY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LHNldHRpbmdzOntjb250ZXh0TWVudTp7aXRlbXM6e2VkaXRfcm93OntuYW1lOiJFZGl0IHJvdyIsaGlkZGVuKCl7''@;'; put 'put ''Y29uc3QgcWU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoIXFlKXJldHVybiExO2NvbnN0IHJ0PXFlWzBdO3JldHVybiBydC5mcm9tLnJvdyE9PXJ0LnRvLnJvd30sY2FsbGJhY2s6KEJlLHFlLHJ0KT0+e2NvbnN0IHB0PXFlWzBdO3B0LnN0YXJ0LnJvdz09PXB0LmVuZC5yb3cmJnRoaXMu''@;'; put 'put ''ZWRpdFJlY29yZChudWxsLHB0LnN0YXJ0LnJvdyl9fSxyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cgYWJvdmUifSxyb3dfYmVsb3c6e25hbWU6Ikluc2VydCBSb3cgYmVsb3cifSxyZW1vdmVfcm93OntuYW1lOiJJZ25vcmUgcm93In0sY29weTp7bmFtZToiQ29weSB3aXRob3V0IGhlYWRl''@;'; put 'put ''cnMifSxjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnM6e25hbWU6IkNvcHkgd2l0aCBoZWFkZXJzIn0sY29weV9jb2x1bW5faGVhZGVyc19vbmx5OntuYW1lOiJDb3B5IGhlYWRlcnMgb25seSJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0sdW5kbzp7bmFtZToiVW5kbyJ9LHJlZG86e25hbWU6IlJl''@;'; put 'put ''ZG8ifX19fX0sdGhpcy5ob3RDZWxsc1Byb3BSb3c9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVkOjAscm93c0RlbGV0ZWQ6MCxyb3dzQWRkZWQ6MH0sdGhpcy5tb2RpZmVk''@;'; put 'put ''Um93c0luZGV4ZXM9W10sdGhpcy5xdWVyeUVycj0hMSx0aGlzLnN1Y2Nlc3NFbmFibGU9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMucGtGaWVsZHM9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMuYmFkRWRpdD0hMSx0aGlzLnNhdmVMb2Fk''@;'; put 'put ''aW5nPSExLHRoaXMuYXBwcm92ZXJzPVtdLHRoaXMuZXJyVmFsaWRhdGlvbj0hMSx0aGlzLnBrTnVsbD0hMSx0aGlzLm5vUGtOdWxsPSExLHRoaXMudGFibGVEYXRhPVtdLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIsdGhpcy5zaG93QXBwcm92ZXJzPSExLHRoaXMu''@;'; put 'put ''cGtEdXBzPSExLHRoaXMudmFsaWRhdGlvbkRvbmU9MCx0aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bXSx0aGlzLmNvbHVtbkhlYWRlcj1bXSx0aGlzLnNwZWNJbmZvPVtdLHRoaXMudG9vTG9uZz0hMSx0aGlzLmV4Y2VlZENlbGxzPVtdLHRoaXMudXBsb2FkZXI9bmV3IFBlZSx0aGlzLnVwbG9h''@;'; put 'put ''ZFVybD0iIix0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkUHJldmlldz0hMSx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5leGNlbFVwbG9hZFN0YXRlPW51bGwsdGhpcy5kYXRhPVtdLHRoaXMuaGVhZGVyQXJyYXk9W10sdGhpcy5ob3REYXRhU2NoZW1hPXt9LHRoaXMu''@;'; put 'put ''aGVhZGVyU2hvdz1bXSx0aGlzLmhlYWRlclZpc2libGU9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuaGFzQW5vdGhlckRyb3Bab25lT3Zlcj0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSExLHRoaXMuZGF0ZVRpbWVIZWFkZXJz''@;'; put 'put ''PVtdLHRoaXMudGltZUhlYWRlcnM9W10sdGhpcy5kYXRlSGVhZGVycz1bXSx0aGlzLnhsUnVsZXM9W10sdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMuaGVhZGVyQ29sdW1ucz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuZmlsZVBhc3N3b3JkU3ViamVjdD1uZXcgV24sdGhpcy5m''@;'; put 'put ''aWxlVW5sb2NrRXJyb3I9ITEsdGhpcy5maWxlUGFzc3dvcmRNb2RhbD0hMSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmRpc2NhcmRTb3VyY2VGaWxlPSExLHRoaXMubWFudWFsRmlsZUVkaXRNb2RhbD0hMSx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuY3VycmVudEVkaXRSZWNv''@;'; put 'put ''cmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSx0aGlzLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVybD1udWxs''@;'; put 'put ''LHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0hMSx0aGlzLnNpbmdsZVJvd1NlbGVjdGVkPSExLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMuZ2V0ZGF0YUVycm9yPSExLHRoaXMuemVyb0ZpbHRlclJvd3M9ITEsdGhpcy50YWJsZUZpbGVEcmFn''@;'; put 'put ''T3Zlcj0hMSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdLHRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQ9MjAsdGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRVhUUkFfQ09MX05BTUU6MSxESVNQTEFZX1ZBTFVFOjIsRElTUExBWV9UWVBFOjMs''@;'; put 'put ''UkFXX1ZBTFVFX05VTTo0LFJBV19WQUxVRV9DSEFSOjUsRk9SQ0VfRkxBRzo2fSx0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRElTUExBWV9WQUxVRToxLFJBV19WQUxVRToyfSx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXA9W10s''@;'; put 'put ''dGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy50aW1lc0NsaWNrZWQ9MCxaZWVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0mJiRtLnJlZ2lzdGVyTGFuZ3VhZ2UoWmVlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKSx0aGlzLmhvdFJl''@;'; put 'put ''Z2lzdGVyZXI9bmV3IFltLHRoaXMucGFyc2VSZXN0cmljdGlvbnMoKSx0aGlzLnNldFJlc3RyaWN0aW9ucygpfXBhcnNlUmVzdHJpY3Rpb25zKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5hZGRSZWNvcmQsdGhpcy5y''@;'; put 'put ''ZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdFJlY29yZCx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEZpbGVVcGxvYWQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5maWxlVXBsb2FkfXNldFJlc3RyaWN0aW9ucyhh''@;'; put 'put ''KXthJiYodGhpcy5yZXN0cmljdGlvbnM9ey4uLnRoaXMucmVzdHJpY3Rpb25zLC4uLmF9KSx0aGlzLnJlc3RyaWN0aW9ucy5yZW1vdmVFZGl0UmVjb3JkQnV0dG9uJiZkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5lZGl0X3Jvdyx0aGlzLnJlc3Ry''@;'; put 'put ''aWN0aW9ucy5yZXN0cmljdEFkZFJvdyYmKGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJvd19hYm92ZSxkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYmVsb3csZGVsZXRlKHRoaXMuaG90VGFi''@;'; put 'put ''bGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucmVtb3ZlX3Jvdyl9Y2hlY2tSb3dMaW1pdCgpe3RoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWd8fHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT0xLzAmJih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0''@;'; put 'put ''cmljdEFkZFJvdz10aGlzLmRhdGFTb3VyY2U/Lmxlbmd0aD49dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9cmVzZXRGaWx0ZXIoKXt0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QmJnRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdC5yZXNldEZp''@;'; put 'put ''bHRlcigpfW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiRmlsZSBVcGxvYWQiKTp0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnP3RoaXMuZXZlbnRTZXJ2aWNlLnNo''@;'; put 'put ''b3dJbmZvTW9kYWwoIkluZm9ybWF0aW9uIiwiVXBsb2FkIGZlYXR1cmUgaXMgZGlzYWJsZWQgd2hpbGUgQ29sdW1uIExldmVsIFNlY3VyaXR5IHJ1bGVzIGFyZSBhY3RpdmUiKTp0aGlzLnVwbG9hZFByZXZpZXd8fCh0aGlzLnNob3dVcGxvYWRNb2RhbD0hMCl9ZmlsZU92ZXJCYXNlKGEpe3Ro''@;'; put 'put ''aXMuaGFzQmFzZURyb3Bab25lT3Zlcj1hfWF0dGFjaEZpbGUoYSxkPSExKXt2YXIgaD10aGlzO2NvbnN0IGY9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdO3RoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iTG9hZGluZyIsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSEwLHRoaXMuZXhjZWxGaWxlUmVhZHk9''@;'; put 'put ''ITEsdGhpcy5maWxlbmFtZT1mLm5hbWUsdGhpcy5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VFeGNlbEZpbGUoe2ZpbGU6Zix1cGxvYWRlcjp0aGlzLnVwbG9hZGVyLGRjVmFsaWRhdG9yOnRoaXMuZGNWYWxpZGF0b3IsaGVhZGVyUGtzOnRoaXMuaGVhZGVyUGtzLGhlYWRlckFycmF5OnRoaXMu''@;'; put 'put ''aGVhZGVyQXJyYXksaGVhZGVyU2hvdzp0aGlzLmhlYWRlclNob3csdGltZUhlYWRlcnM6dGhpcy50aW1lSGVhZGVycyxkYXRlSGVhZGVyczp0aGlzLmRhdGVIZWFkZXJzLGRhdGVUaW1lSGVhZGVyczp0aGlzLmRhdGVUaW1lSGVhZGVycyx4bFJ1bGVzOnRoaXMueGxSdWxlcyxlbmNvZGluZzp0''@;'; put 'put ''aGlzLmVuY29kaW5nfSx2PT57dGhpcy5hcHBlbmRVcGxvYWRTdGF0ZSh2KX0sdj0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlRhYmxlIEZvdW5kIix2KX0pLnRoZW4oZnVuY3Rpb24oKXt2YXIgdj1lZShmdW5jdGlvbiooTSl7TSYmKGguZXhjZWxGaWxlUmVhZHk9ITAsaC51''@;'; put 'put ''cGxvYWRlcj1NLnVwbG9hZGVyLE0uZGF0YSYmTS5oZWFkZXJTaG93PyhoLmRhdGE9TS5kYXRhLGguaGVhZGVyU2hvdz1NLmhlYWRlclNob3csaC5nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCkpOnlpZWxkIGgudXBsb2FkUGFyc2VkRmlsZXMoKSl9KTtyZXR1cm4gZnVuY3Rpb24oTSl7cmV0dXJu''@;'; put 'put ''IHYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2godj0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsdixudWxsKSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsc2V0VGltZW91dCgoKT0+e3RoaXMuZmlsZW5hbWU9IiJ9''@;'; put 'put ''KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITF9KX1zdWJtaXRFeGNlbCgpe3RoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PT09MS8wP3RoaXMudXBsb2FkUGFyc2VkRmlsZXMoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfXVwbG9hZFBh''@;'; put 'put ''cnNlZEZpbGVzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYS5jaGVja0ludmFsaWQoKSlyZXR1cm4gdm9pZCBhLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJJbnZhbGlkIHZhbHVlcyBhcmUgcHJlc2VudC4iKTtpZihhLnZhbGlkYXRlUHJpbWFyeUtl''@;'; put 'put ''eXMoKSwwIT09YS5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoKXJldHVybiBhLnBrRHVwcz0hMCx2b2lkKGEuc3VibWl0PSExKTthLnBrRHVwcz0hMSxhLnVwbG9hZExvYWRpbmc9ITA7Y29uc3QgZD1bXTtmb3IoY29uc3QgaCBvZiBhLnVwbG9hZGVyLnF1ZXVlKWQucHVzaCh7ZmlsZTpoLGZp''@;'; put 'put ''bGVOYW1lOmgubmFtZX0pO3lpZWxkIGEuc2FzU2VydmljZS51cGxvYWRGaWxlKGEudXBsb2FkVXJsLGQse3RhYmxlOmEubGliZHN9KS50aGVuKGg9PntpZih0eXBlb2YgaC5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydD4idSIpe2lmKHR5cGVvZiBoLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJh''@;'; put 'put ''bXM+InUiKXJldHVybjt7YS51cGxvYWRMb2FkaW5nPSExO2NvbnN0IGY9aC5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zWzBdO2Euc3VjY2Vzc0VuYWJsZT0hMCxhLnRhYmxlSWQ9Zi5EU0lELGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EudGFibGVJZCl9fWVsc2V7Y29uc3Qg''@;'; put 'put ''Zj1oLmFkYXB0ZXJSZXNwb25zZSx2PWYuc2FzanNBYm9ydFswXS5NU0csTT1mLnNhc2pzQWJvcnRbMF0uTUFDO2EudXBsb2FkTG9hZGluZz0hMSxhLmZpbGVuYW1lPSIiLGEuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJihhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQudmFsdWU9IiIpLGEudXBsb2FkZXIucXVldWU9W10sYS5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIiIsdix7U1lTV0FSTklOR1RFWFQ6Zi5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6Zi5TWVNFUlJPUlRFWFQsTUFDOk19KX19LGg9PnthLnVwbG9hZExvYWRp''@;'; put 'put ''bmc9ITEsYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKGEuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksYS51cGxvYWRlci5xdWV1ZT1bXSxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImZpbGUgdXBsb2FkIixo''@;'; put 'put ''LmFkYXB0ZXJSZXNwb25zZSl9KX0pKCl9Z2V0UGVuZGluZ0V4Y2VsUHJldmlldygpe3RoaXMucXVlcnlUZXh0U2F2ZWQ9dGhpcy5xdWVyeVRleHQsdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy5leGNlbFVwbG9hZFN0YXRlPSJQYXJzaW5nIix0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1l''@;'; put 'put ''bnUiLCExKTtjb25zdCBhPVtdO3RoaXMuZGF0YS5tYXAoaD0+e2NvbnN0IGY9e307dGhpcy5oZWFkZXJTaG93Lm1hcCgodixNKT0+e2Zbdl09aFtNXX0pLGYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19ffHwoZi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189Ik5vIiksYS5w''@;'; put 'put ''dXNoKGYpfSksdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKSx0aGlzLmRhdGFTb3VyY2U9YSx0aGlzLmhvdFRhYmxlLmRhdGE9YTtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5leGNlbFVwbG9hZFN0YXRl''@;'; put 'put ''PSJWYWxpZGF0aW5nLUhPVCIsZC51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsbWF4Um93czoxLzB9LCExKSxkLnJlbmRlcigpLHRoaXMuYXBwZW5kVXBsb2FkU3RhdGUoIlZhbGlkYXRpbmcgcm93cyIpLGQudmFsaWRhdGVDZWxscygoKT0+e3RoaXMuc2hvd1VwbG9hZE1v''@;'; put 'put ''ZGFsPSExLHRoaXMudXBsb2FkUHJldmlldz0hMCx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5leGNlbFVwbG9hZFN0YXRlPW51bGx9KX1kaXNjYXJkUGVuZGluZ0V4Y2VsKGEpe3RoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe21heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUu''@;'; put 'put ''dmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZH0pLGEmJnRoaXMuY2FuY2VsRWRpdCgpLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkUHJldmlldz0h''@;'; put 'put ''MSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkZXIucXVldWU9W10saXNOYU4ocGFyc2VJbnQodGhpcy5yb3V0ZXIudXJsLnNwbGl0KCIvIikucG9wKCl8fCIiKSl8fHRoaXMucXVlcnlUZXh0U2F2ZWQubGVuZ3RoPjAmJih0aGlzLnF1ZXJ5VGV4dD10aGlzLnF1ZXJ5VGV4dFNh''@;'; put 'put ''dmVkLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIpfXByZXZpZXdUYWJsZUVkaXRDb25maXJtKCl7dGhpcy5kaXNjYXJkUGVuZGluZ0V4Y2VsKCksdGhpcy5jb252ZXJ0VG9Db3JyZWN0VHlwZXModGhpcy5kYXRhU291cmNlKSx0aGlzLmVkaXRUYWJsZSghMCl9YXBwZW5kVXBsb2FkU3RhdGUoYSxk''@;'; put 'put ''PSExKXt0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdCYmKGQ/dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5yZXBsYWNlTGFzdFN0YXRlKGEpOnRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QuYXBwZW5kU3RhdGUoYSkp''@;'; put 'put ''fWlzQ29sUGsoYSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2YoYSk+LTF9aXNSZWFkb25seUNvbChhKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShhKT8ucmVhZE9ubHl9aXNDb2xIZWFkZXIoYSl7cmV0dXJuIHRoaXMuaGVhZGVyQXJyYXkuaW5kZXhPZihhLnRvVXBw''@;'; put 'put ''ZXJDYXNlKCkpPi0xfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9c2VuZENsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZD1bXTtjb25zdCBoPVtdO2lmKHR5cGVvZiBhLmNsYXVz''@;'; put 'put ''ZXM+InUiKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tjb25zdCBmPWEuY2xhdXNlcy5xdWVyeU9iajtpZihmWzBdLmVsZW1lbnRzLmxlbmd0aDwxKXJldHVybigiaG9tZSI9PT1Lbi5yb290UGFyYW18fCJlZGl0b3IiPT09S24ucm9vdFBhcmFt''@;'; put 'put ''KSYmKEtuLmVkaXRvci5maWx0ZXIuY2xhdXNlcz1bXSxLbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PVtdLEtuLmVkaXRvci5maWx0ZXIuZ3JvdXBMb2dpYz0iIiksdm9pZCBhLnJvdXRlci5uYXZpZ2F0ZShbIi9lZGl0b3IvIithLmxpYmRzXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUi''@;'; put 'put ''fSk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aDt2Kyspe2NvbnN0IE09Zlt2XS5lbGVtZW50cztkPU0uZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiBudWxsPT09RC52YXJpYWJsZX0pLGQubGVuZ3RoJiZoLnB1c2goTSl9fWlmKGgubGVuZ3RoKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9p''@;'; put 'put ''ZChhLnN1Ym1pdExvYWRpbmc9ITEpO3RyeXtpZih2b2lkIDAhPT1hLmNsYXVzZXMmJmEubGliZHMpe2NvbnN0IGY9e2dyb3VwTG9naWM6YS5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTthLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChNPT57Y29uc3QgRD17ZmlsdGVyQ2xh''@;'; put 'put ''dXNlczpbXX07TS5lbGVtZW50cy5mb3JFYWNoKFo9PntELmZpbHRlckNsYXVzZXMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFopKX0pLEQuY2xhdXNlTG9naWM9TS5jbGF1c2VMb2dpYyxmLmZpbHRlckdyb3Vwcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoRCkpfSk7''@;'; put 'put ''Y29uc3Qgdj1hLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGYpO3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLHYpLnRoZW4oTT0+e2EucXVlcnlGaWx0ZXI9e2lkOk0ucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTpNLnJlc3VsdFswXS5G''@;'; put 'put ''SUxURVJfVEFCTEV9LGEucm91dGVyLm5hdmlnYXRlKFsiLyJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhlbigoKT0+YS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5xdWVyeUZpbHRlci50YWJsZSsiLyIrYS5xdWVyeUZp''@;'; put 'put ''bHRlci5pZF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pKSxhLmZpbHRlcj0hMX0pLmNhdGNoKE09PnthLnN1Ym1pdExvYWRpbmc9ITF9KX19Y2F0Y2goZil7YS5xdWVyeUVycj0hMCxhLnN1Ym1pdExvYWRpbmc9ITEsYS5xdWVyeUVyck1lc3NhZ2U9Zn19KSgpfW9wZW5RYigp''@;'; put 'put ''e3RoaXMubGliZHMmJih0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMubGliZHMsdGhpcy5jb2xzKSl9ZWRpdFRhYmxlKGEsZCl7dGhpcy50b2dnbGVI''@;'; put 'put ''b3RQbHVnaW4oImNvbnRleHRNZW51IiwhMCk7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlLGY9aC5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLHY9Zi5nZXRTb3J0Q29uZmlnKCksTT1BcnJheS5pc0FycmF5KHYpP3Y6W3ZdO3NldFRpbWVvdXQoKCk9PnthfHwodGhpcy5kYXRhU291''@;'; put 'put ''cmNlVW5jaGFuZ2VkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKSxkJiZ0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQucG9wKCkpLHRoaXMuaG90VGFibGUucmVhZE9ubHk9ITEsdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSxoLnVwZGF0ZVNl''@;'; put 'put ''dHRpbmdzKHtyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5fSwhMSksaC5yZW5kZXIoKTtmb3IoY29uc3QgRCBvZiBNKWYuc29ydChEKTt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0sMCl9Y29udmVydFRvQ29ycmVjdFR5cGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpZm9y''@;'; put 'put ''KGNvbnN0IGggaW4gZCl7Y29uc3QgZj10aGlzLmNvbHMuZmluZCh2PT52Lk5BTUU9PT1oKTtmJiYiIiE9PWRbaF0mJiJudW0iPT09Zi5UWVBFJiYhZi5ERFRZUEUuaW5jbHVkZXMoIlRJTUUiKSYmIWYuRERUWVBFLmluY2x1ZGVzKCJEQVRFIikmJihkW2hdPXBhcnNlSW50KGRbaF0pKX19Y2Fu''@;'; put 'put ''Y2VsRWRpdCgpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W107Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLGQ9YS5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLGg9ZC5nZXRTb3J0Q29uZmlnKCksZj1BcnJh''@;'; put 'put ''eS5pc0FycmF5KGgpP2g6W2hdO3RoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCYmKHRoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCkpLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsdGhpcy5ob3RUYWJs''@;'; put 'put ''ZS5yZWFkT25seT0hMCxhLnVwZGF0ZVNldHRpbmdzKHtyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGRhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMpO2Zvcihjb25zdCB2IG9mIGYpZC5zb3J0KHYpO3RoaXMuY2hl''@;'; put 'put ''Y2tSb3dMaW1pdCgpfWhvdENsaWNrZWQoKXsxPT09dGhpcy50aW1lc0NsaWNrZWQmJnRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCksMD09PXRoaXMudGltZXNDbGlja2VkJiYodGhpcy50aW1lc0NsaWNrZWQrKyxzZXRUaW1lb3V0KCgpPT57dGhpcy50aW1lc0NsaWNr''@;'; put 'put ''ZWQ9MH0sMjAwKSl9Y2xlYW5FeGNlZWQoKXt0aGlzLmV4Y2VlZENlbGxzPVtdfWFwcHJvdmVyc1RvZ2dsZSgpe3RoaXMuc2hvd0FwcHJvdmVycz0hdGhpcy5zaG93QXBwcm92ZXJzfWFkZFJvdygpe3RoaXMuYWRkaW5nTmV3Um93PSEwLHNldFRpbWVvdXQoKCk9Pntjb25zdCBhPXRoaXMuaG90''@;'; put 'put ''SW5zdGFuY2UsZD10aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2EuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGQsMSksYS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnNlbGVjdENlbGwodGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLDApLGEucmVuZGVyKCksdGhp''@;'; put 'put ''cy5kYXRhU291cmNlW2RdJiYodGhpcy5kYXRhU291cmNlW2RdLm5vTGlua09wdGlvbj0hMCksdGhpcy5hZGRpbmdOZXdSb3c9ITEsdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9KX1jYW5jZWxTdWJtaXQoKXt0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBD''@;'; put 'put ''bG9uZSh0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQpLHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdD1bXSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxj''@;'; put 'put ''b2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oZCxoKXtyZXR1cm4gMD09PWg/NjA6ZD41MDA/NTAwOmR9fSwhMSksYS5zZWxlY3RDZWxsKDAsMCksYS5yZW5kZXIoKSxhLnZhbGlkYXRlUm93cyh0''@;'; put 'put ''aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9Z2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpe3RoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmRlYnVnJiYodGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2UpLHRo''@;'; put 'put ''aXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSk7bGV0IGE9MCxkPTAsaD0wO3RoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMuZGF0YU1vZGlmaWVkPVtdO2ZvcihsZXQgZj0wO2Y8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmKyspe2NvbnN0IHY9dGhp''@;'; put 'put ''cy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZl0pO2lmKCJZZXMiPT09di5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18pdGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSxkKys7ZWxzZXtjb25zdCBNPXRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5maW5kKEQ9''@;'; put 'put ''Pntmb3IoY29uc3QgWiBvZiB0aGlzLmhlYWRlclBrcylpZihEW1pdIT09dltaXSlyZXR1cm4hMTtyZXR1cm4hMH0pO00/SlNPTi5zdHJpbmdpZnkodikhPT1KU09OLnN0cmluZ2lmeShNKSYmKHRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChm''@;'; put 'put ''KSxhKyspOih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKHYpLHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLnB1c2goZiksaCsrKX19dGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6YSxyb3dzRGVsZXRlZDpkLHJvd3NBZGRlZDpofX12YWxpZGF0ZVByaW1hcnlLZXlzKCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LmhvdEluc3RhbmNlLGQ9YS5nZXREYXRhKCk7dGhpcy5wa0ZpZWxkcz1bXTtmb3IobGV0IE09MDtNPGQubGVuZ3RoO00rKyl7bGV0IEQ9IiI7Zm9yKGxldCBaPTE7Wjx0aGlzLnJlYWRPbmx5RmllbGRzKzE7WisrKUQ9RCsifCIrZFtNXVtaXTt0aGlzLnBrRmllbGRzLnB1c2goRCl9Y29uc3Qg''@;'; put 'put ''aD1bXSxmPXRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7Zm9yKGxldCBNPTA7TTx0aGlzLnBrRmllbGRzLmxlbmd0aDtNKyspZm9yKGxldCBEPTA7RDx0aGlzLnBrRmllbGRzLmxlbmd0aDtEKyspdGhpcy5wa0ZpZWxkc1tNXT09PXRoaXMucGtGaWVsZHNbRF0mJkQhPT1NJiZoLnB1c2goRCk7aWYo''@;'; put 'put ''dGhpcy5wa0ZpZWxkcy5sZW5ndGg+Zilmb3IobGV0IE09ZjtNPHRoaXMucGtGaWVsZHMubGVuZ3RoO00rKylmb3IobGV0IEQ9ZjtEPHRoaXMucGtGaWVsZHMubGVuZ3RoO0QrKylNPEQmJnRoaXMucGtGaWVsZHNbTV09PT10aGlzLnBrRmllbGRzW0RdJiZoLnB1c2goRCk7bGV0IHY7Zm9yKGxl''@;'; put 'put ''dCBNPTA7TTxoLmxlbmd0aDtNKyspZm9yKGxldCBEPTE7RDx0aGlzLnJlYWRPbmx5RmllbGRzKzE7RCsrKXY9YS5nZXRDZWxsTWV0YShoW01dLEQpLHYudmFsaWQ9ITEsdi5kdXBLZXk9ITAsYS5yZW5kZXIoKTt0aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bLi4ubmV3IFNldChoLnNvcnQoKSld''@;'; put 'put ''fXJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoYT0hMSxkKXtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7Zm9yKGNvbnN0IGYgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3Qgdj1mLnZhbHVlcy5tYXAoTT0+TVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0p''@;'; put 'put ''O2guYmF0Y2goKCk9Pntjb25zdCBNPWguZ2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wpLEQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShNLmRhdGF8fCIiKTtsZXQgWjtEJiYoWj10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKEQpKSxafHwoWj1bXSk7Y29uc3QgcmU9Wy4u''@;'; put 'put ''Lm5ldyBTZXQoWy4uLlosLi4udl0pXTt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGYuY29sLHtzb3VyY2U6cmV9KSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJzb3VyY2UiLHJlKSxmLnZhbHVlcy5sZW5ndGg+MCYmKGguc2V0Q2VsbE1ldGEoZi5yb3cs''@;'; put 'put ''Zi5jb2wsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInN0cmljdCIsZi5zdHJpY3QpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsImZp''@;'; put 'put ''bHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZi5jb2wse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmYuc3RyaWN0LGZpbHRlcjohMX0pKSx0aGlzLnJlU2V0RXh0ZW5kZWRDZWxs''@;'; put 'put ''VmFsaWRhdGlvblZhbHVlcyhmLHZvaWQgMCxhLGQpLGgucmVuZGVyKCl9KX19cmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKGEsZCxoPSExLGYpe2lmKGEpe2R8fChkPWEucm93KTtjb25zdCBNPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShhKTt0aGlzLnNldEV4''@;'; put 'put ''dGVuZGVkVmFsdWVzVG9DZWxscyhhLGQsTSxoLGYpfWVsc2UgZm9yKGNvbnN0IE0gb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgRD10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoTSk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoTSxNLnJvdyxELGgs''@;'; put 'put ''Zil9fXNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhhLGQsaCxmPSExLHYpe2NvbnN0IE09dGhpcy5ob3RJbnN0YW5jZSxEPVtdO2Zvcihjb25zdCBaIG9mIGgpRC5pbmRleE9mKFouRVhUUkFfQ09MX05BTUUpPDAmJkQucHVzaChaLkVYVFJBX0NPTF9OQU1FKTtmb3IoY29uc3QgWiBvZiBEKXtj''@;'; put 'put ''b25zdCByZT1oLmZpbHRlcihkdD0+ZHQuRVhUUkFfQ09MX05BTUU9PT1aKTtsZXQgY2U9cmUubWFwKGR0PT4iQyI9PT1kdC5ESVNQTEFZX1RZUEU/ZHQuUkFXX1ZBTFVFX0NIQVI6ZHQuUkFXX1ZBTFVFX05VTSk7Y29uc3QgYmU9TS5wcm9wVG9Db2woWik7dGhpcy5kaXNhYmxlZEJhc2ljRHlu''@;'; put 'put ''YW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoZHQ9PmR0LnJvdz09PWQmJmR0LmNvbD09PWJlKXx8dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLnB1c2goe3JvdzpkLGNvbDpiZSxhY3RpdmU6ITF9KSxNLnNldENlbGxNZXRhKGQsYmUsInJlbmRlcmVyIiwiYXV0''@;'; put 'put ''b2NvbXBsZXRlIiksTS5zZXRDZWxsTWV0YShkLGJlLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksTS5zZXRDZWxsTWV0YShkLGJlLCJzdHJpY3QiLGEuc3RyaWN0KSxNLnNldENlbGxNZXRhKGQsYmUsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/''@;'; put 'put ''LnVwZGF0ZVJ1bGUoYmUse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmEuc3RyaWN0LGZpbHRlcjohMX0pO2NvbnN0IEJlPU0uZ2V0Q2VsbE1ldGEoZCxiZSkscWU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShCZS5kYXRhfHwi''@;'; put 'put ''Iik7bGV0IHJ0O3FlJiYocnQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShxZSkpLHJ0fHwocnQ9W10pLCJudW1lcmljIj09PXFlPy50eXBlPyhydD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHJ0LCJudW1iZXIiKSxjZT10aGlzLmhlbHBlclNl''@;'; put 'put ''cnZpY2UuY29udmVydEFycmF5VmFsdWVzKGNlLCJudW1iZXIiKSk6KHJ0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMocnQsInN0cmluZyIpLGNlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoY2UsInN0cmluZyIpKTtjb25zdCBwdD1bLi4ubmV3''@;'; put 'put ''IFNldChbLi4ucnQsLi4uY2VdKV07aWYoTS5zZXRDZWxsTWV0YShkLGJlLCJzb3VyY2UiLHB0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGJlLHtzb3VyY2U6cHR9KSxmKXtpZih2JiZ2IT09ZClyZXR1cm47Y29uc3QgZHQ9cmUuZmluZChKdD0+MT09PUp0''@;'; put 'put ''LkZPUkNFX0ZMQUcpO2R0JiZzZXRUaW1lb3V0KCgpPT57TS5zZXREYXRhQXRDZWxsKGQsYmUsIkMiPT09ZHQuRElTUExBWV9UWVBFP2R0LlJBV19WQUxVRV9DSEFSOmR0LlJBV19WQUxVRV9OVU0sImZvcmNlX2NlbGxfdmFsaWRhdGlvbl92YWx1ZSIpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJ''@;'; put 'put ''bmRleD09PWQmJih0aGlzLmRhdGFTb3VyY2VbdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4XVtaXT0iQyI9PT1kdC5ESVNQTEFZX1RZUEU/ZHQuUkFXX1ZBTFVFX0NIQVI6ZHQuUkFXX1ZBTFVFX05VTSl9KX19fWdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSxkKXtjb25zdCBmPXRo''@;'; put 'put ''aXMuaG90SW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbChkfHxhLnJvdyxhLmNvbCksdj0oYS52YWx1ZXMuZmluZChyZT0+cmVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdPT09Zil8fFtdKVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLkRJU1BMQVlfSU5ERVhdLE09YS5leHRl''@;'; put 'put ''bmRlZF92YWx1ZXM/LmZpbHRlcihyZT0+cmVbMF09PT12KSxEPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzKSxaPVtdO2Zvcihjb25zdCByZSBvZiBNfHxbXSl7Y29uc3QgY2U9e307Zm9yKGNvbnN0IGJlIG9mIE9iamVjdC5r''@;'; put 'put ''ZXlzKEQpKWNlW2JlXT1yZVtEW2JlXV07Wi5wdXNoKGNlKX1yZXR1cm4gWn1jaGVja1NhdmUoKXtpZih0aGlzLmdldFJvd3NTdWJtaXR0aW5nQ291bnQoKSwwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkJiYwPT09dGhpcy5y''@;'; put 'put ''b3dzQ2hhbmdlZC5yb3dzRGVsZXRlZClyZXR1cm4gdGhpcy5iYWRFZGl0VGl0bGU9Ik5vIGNoYW5nZXMgdG8gc3VibWl0Iix0aGlzLmJhZEVkaXRDYXVzZT0iUGxlYXNlIG1vZGlmeSBzb21lIHZhbHVlcyBhbmQgdHJ5IGFnYWluLiIsdm9pZCh0aGlzLmJhZEVkaXQ9ITApO2NvbnN0IGE9dGhp''@;'; put 'put ''cy5ob3RJbnN0YW5jZTt0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpO2ZvcihsZXQgaD0wO2g8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtoKyspZGVsZXRlIHRoaXMuZGF0YVNvdXJjZVtoXS5ub0xpbmtPcHRp''@;'; put 'put ''b247YS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGgsZil7cmV0dXJuIGg+NTAwPzUwMDpofX0sITEpLHRoaXMucmVTZXRD''@;'; put 'put ''ZWxsVmFsaWRhdGlvblZhbHVlcygpLGMuY250PTAsYy5ub25Qa0NudD0wO2NvbnN0IGQ9YS5nZXREYXRhKCk7aWYoZC5sZW5ndGg+MSYmYS5pc0VtcHR5Um93KGQubGVuZ3RoLTEpJiZhLmFsdGVyKCJyZW1vdmVfcm93IixkLmxlbmd0aC0xKSx0aGlzLnZhbGlkYXRlUHJpbWFyeUtleXMoKSww''@;'; put 'put ''IT09dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoKXJldHVybiB0aGlzLnBrRHVwcz0hMCx0aGlzLnN1Ym1pdD0hMSx2b2lkIHRoaXMuY2FuY2VsU3VibWl0KCk7dGhpcy5wa0R1cHM9ITEsYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMsKCk9Pnt0aGlzLmNoZWNr''@;'; put 'put ''SW52YWxpZCgpP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlZhbGlkYXRpb24gZXJyb3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpOih0aGlzLnN1Ym1pdD0hMCx0aGlzLnZhbGlkYXRpb25Eb25lPTEsc2V0VGltZW91dCgoKT0+e2NvbnN0IGg9ZG9jdW1lbnQuZ2V0''@;'; put 'put ''RWxlbWVudEJ5SWQoImZvcm1GaWVsZHNfOCIpO2gmJmguZm9jdXMoKX0sMjAwKSl9KX1zYXZlVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoZC5ob3RJbnN0YW5jZS5nZXREYXRhKCksYT0oYT1hLmZpbHRlcih2PT4hIWQuZGF0YU1vZGlmaWVkLmZpbmQoRD0+''@;'; put 'put ''e2Zvcihjb25zdCBaIG9mIGQuaGVhZGVyUGtzKWlmKERbWl0hPT12W1pdKXJldHVybiExO3JldHVybiEwfSkpKS5tYXAodj0+e2NvbnN0IE09di5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSB2Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyx2Ll9f''@;'; put 'put ''X19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz1NLE9iamVjdC5rZXlzKHYpLm1hcChEPT57Im51bWVyaWMiPT09ZC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShEKT8udHlwZSYmIi4iPT09dltEXSYmKHZbRF09bnVsbCl9KSx2fSksZC5sb2dnZXJTZXJ2aWNlLmxvZygiRGF0YSBzdWJtaXR0ZWQi''@;'; put 'put ''LGEpLGQuY2hlY2tJbnZhbGlkKCkpcmV0dXJuIGQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlZhbGlkYXRpb24gZXJyb3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpLGQuY2FuY2VsU3VibWl0KCksdm9pZChkLnN1Ym1pdD0hMSk7aWYoZC52YWxpZGF0aW9uRG9uZT0wLGQu''@;'; put 'put ''c2F2ZUxvYWRpbmc9ITAsYy5jbnQ8MSYmMD09PWQuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aCYmYy5ub25Qa0NudDwxKXtkLnNhdmVMb2FkaW5nPSEwLGQuZGlzYWJsZVN1Ym1pdD0hMSxkLnN1Ym1pdD0hMDtjb25zdCB2PXtBQ1RJT046IkxPQUQifTtpZihkLm1lc3NhZ2U9ZC5tZXNzYWdl''@;'; put 'put ''LnJlcGxhY2UoL1xuL2csIi4gIiksdi5NRVNTQUdFPWQubWVzc2FnZSx2LkxJQkRTPWQubGliZHMsZC5jb2xzKXtjb25zdCBNPWEuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7aWYoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UudXBkYXRlVGFibGUodixN''@;'; put 'put ''LCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL3N0YWdlZGF0YSIsZC4kZGF0YUZvcm1hdHMpLnRoZW4oWj0+e2lmKHR5cGVvZiBaLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXM8InUiKXJldHVybiBkLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitaLmFkYXB0ZXJSZXNwb25zZS5z''@;'; put 'put ''YXNwYXJhbXNbMF0uRFNJRCksITA7bGV0IHJlPSJTdWJtaXQgcmVxdWVzdCBmYWlsZWQiO1omJihyZSs9YFxuJHsic3RyaW5nIj09dHlwZW9mIFo/WjpKU09OLnN0cmluZ2lmeShaKX1gKSxkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLHJlLG51bGws''@;'; put 'put ''IlN1Ym1pdCBlcnJvciIpfSkuY2F0Y2goWj0+e2NvbnNvbGUubG9nKCJlcnIiLFopLGMuY250PTAsYy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMCxkLnN1Ym1pdD0hMTtjb25zdCByZT0ic3RyaW5nIj09dHlwZW9mIFouYWRhcHRlclJlc3Buc2U/Wi5hZGFwdGVyUmVzcG5zZTpKU09O''@;'; put 'put ''LnN0cmluZ2lmeShaLmFkYXB0ZXJSZXNwbnNlKTtyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImVkaXRvcnMvc3RhZ2VkYXRhIixgU3VibWl0IHJlcXVlc3QgZmFpbGVkXG4ke3JlfWAsbnVsbCwiU3VibWl0IGVycm9yIiksITF9KSlyZXR1cm59fWMuY250Pj0xPyhkLnBr''@;'; put 'put ''TnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsYy5ub25Qa0NudD49MT8oZC5ub1BrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsZC5jYW5jZWxTdWJtaXQoKSxjLmNudD0wLGMubm9uUGtDbnQ9MCxkLmRpc2FibGVTdWJtaXQ9ITB9KSgpfXZhbGlkYXRvclJ1bGVTb3Vy''@;'; put 'put ''Y2UoYSl7cmV0dXJuIHRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoYSl9Y2hlY2tJbnZhbGlkKCl7cmV0dXJuIHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdC5maXJzdC5jb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuaHRJbnZhbGlkIikubGVuZ3RoPjB9Z29Ub0Vk''@;'; put 'put ''aXRvcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKX1jbG9zZVJlY29yZEVkaXQoYSl7dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dm9pZCAwLCJBREQiPT09''@;'; put 'put ''dGhpcy5yZWNvcmRBY3Rpb24mJiFhJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5wcmV2RGF0YVNvdXJjZSksdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSl9Y29uZmlybVJlY29yZEVk''@;'; put 'put ''aXQoYT0hMCl7Y29uc3QgZD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg7YSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSksdGhpcy5jb2x1bW5IZWFkZXIubWFwKGY9Pntjb25zdCB2PXRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl0sTT0ibnVtIj09PXRoaXMuJGRhdGFGb3Jt''@;'; put 'put ''YXRzPy52YXJzW2ZdPy50eXBlLEQ9KDAsZ2cuaXNTcGVjaWFsTWlzc2luZykodik7TSYmIWlzTmFOKHYpJiYhRCYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl09MSp2KX0pLHRoaXMuZGF0YVNvdXJjZVtkXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90VGFibGUuZGF0YVtkXT10''@;'; put 'put ''aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwKX1vbk5leHRSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1''@;'; put 'put ''cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4Pj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE/MDp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgrMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfW9uUHJldmlv''@;'; put 'put ''dXNSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PD0wP3RoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMTp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgtMSx0aGlzLmVkaXRSZWNv''@;'; put 'put ''cmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfWFkZFJlY29yZEJ1dHRvbkNsaWNrKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJBZGQgUmVjb3JkIik6dGhpcy5hZGRFZGl0TmV3UmVj''@;'; put 'put ''b3JkKCl9YWRkRWRpdE5ld1JlY29yZCgpe3RoaXMuYWRkUmVjb3JkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCl9LDFlMyl9YWRkUmVjb3JkKCl7dGhpcy5hZGRSb3coKX1lZGl0UmVjb3JkKGEsZCxoKXtpZih0aGlz''@;'; put 'put ''LnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJFZGl0IFJlY29yZCIpO2Vsc2UgaWYoISh2b2lkIDA9PT1kfHxkPDB8fHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCkpe2lmKHRoaXMucmVjb3Jk''@;'; put 'put ''QWN0aW9uPWg/IkFERCI6IkVESVQiLHRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCExLGgpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRjVmFsaWRhdG9yKSxoKXRoaXMucHJldkRhdGFTb3Vy''@;'; put 'put ''Y2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMucHJldkRhdGFTb3VyY2UucG9wKCk7ZWxzZXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YUF0Um93KGQpKTtmb3IoY29uc3Qg''@;'; put 'put ''diBvZiBmKWlmKHYpe2NvbnN0IE09di5wcm9wPy50b1N0cmluZygpO2RlbGV0ZSB2LnByb3AsZGVsZXRlIHYuZGF0YSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKHYuY29sLHsuLi52LGRhdGE6TX0pfX10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9ZCx0''@;'; put 'put ''aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2RdKX19dG9nZ2xlSG90UGx1Z2luKGEsZCl7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2guYmF0Y2goKCk9Pntjb25zdCBmPWguZ2V0UGx1Z2luKGEpO2Y/KHNldFRpbWVv''@;'; put 'put ''dXQoKCk9PntkP2YuZW5hYmxlUGx1Z2luKCk6Zi5kaXNhYmxlUGx1Z2luKCl9LDEwMCksaC5yZW5kZXIoKSk6Y29uc29sZS53YXJuKCJUb2dnbGUgSG90IFBsdWdpbiBmYWlsZWQgLSBQbHVnaW4gbmFtZWQ6ICIrYSsiIC0gY291bGQgbm90IGJlIGZvdW5kLiIpfSl9ZHluYW1pY0NlbGxWYWxp''@;'; put 'put ''ZGF0aW9uRGlzYWJsZWQoYSxkKXtyZXR1cm4hIXRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKGY9PmYucm93PT09YSYmZi5jb2w9PT1kJiYhZi5hY3RpdmUpfWR5bmFtaWNDZWxsVmFsaWRhdGlvbihhLGQpe2lmKHRoaXMuZHluYW1pY0NlbGxWYWxpZGF0''@;'; put 'put ''aW9uRGlzYWJsZWQoYSxkKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2lmKGguZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSlyZXR1cm47Y29uc3Qgdj1oLmdldERhdGFBdENlbGwoYSxkKSxNPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2Fd''@;'; put 'put ''KSxEPU9iamVjdC5rZXlzKE0pW2RdLFo9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKE0sW0QsIm5vTGlua09wdGlvbiJdLCExKSxyZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChjZT0+Y2UuaGFzaD09PVopO2lmKHJlPi0xKXtsZXQgY2U9dGhpcy5j''@;'; put 'put ''ZWxsVmFsaWRhdGlvblNvdXJjZVtyZV0udmFsdWVzLm1hcChCZT0+QmVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKTtjb25zdCBiZT0oaC5nZXRDZWxsTWV0YShhLGQpLnNvdXJjZXx8W10pLmxlbmd0aDwxLEVlPSIgIiE9PXY7aC5iYXRjaCgoKT0+e2NvbnN0IEJlPWgu''@;'; put 'put ''Z2V0Q2VsbE1ldGEoYSxkKSxxZT10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEJlLmRhdGF8fCIiKTtsZXQgcnQ7cWUmJihydD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKHFlKSkscnR8fChydD1bXSksIm51bWVyaWMiPT09cWU/LnR5cGU/KHJ0PXRoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMocnQsIm51bWJlciIpLGNlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoY2UsIm51bWJlciIpKToocnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhydCwic3RyaW5nIiksY2U9dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhjZSwic3RyaW5nIikpO2NvbnN0IHB0PVsuLi5uZXcgU2V0KFsuLi5ydCwuLi5jZV0pXTtpZihoLnNldENlbGxNZXRhKGEsZCwic291cmNlIixwdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShkLHtzb3VyY2U6''@;'; put 'put ''cHR9KSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3JlXS52YWx1ZXMubGVuZ3RoPjApe2NvbnN0IGR0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcmVdLnN0cmljdDtoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGEsZCwiZWRp''@;'; put 'put ''dG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLGguc2V0Q2VsbE1ldGEoYSxkLCJzdHJpY3QiLGR0KSxoLnNldENlbGxNZXRhKGEsZCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShkLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0''@;'; put 'put ''b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDpkdCxmaWx0ZXI6ITF9KX10aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyh0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3JlXSxhLGJlJiZFZSksaC5yZW5kZXIoKX0pfWlmKHJlPDApe2NvbnN0IGNlPXtTQVNDb250''@;'; put 'put ''cm9sVGFibGU6W3tsaWJkczp0aGlzLmxpYmRzLHZhcmlhYmxlX25tOkR9XSxzb3VyY2Vfcm93OltNXX0sYmU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEZXRhaWxzKEQpLmZpbmQoRWU9PiJTT0ZUU0VMRUNUX0hPT0siPT09RWUuUlVMRV9UWVBFfHwiSEFSRFNFTEVDVF9IT09LIj09PUVlLlJV''@;'; put 'put ''TEVfVFlQRSk7YmUmJih0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnB1c2goe3JvdzphLGNvbDpkLHN0cmljdDoiSEFSRFNFTEVDVF9IT09LIj09PWJlLlJVTEVfVFlQRSx2YWx1ZXM6W10saGFzaDpaLGNvdW50OnRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoKzF9KSxoLnNldENl''@;'; put 'put ''bGxNZXRhKGEsZCwicmVuZGVyZXIiLFNtdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnB1c2goZCksaC5yZW5kZXIoKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRkeW5hbWljY29sdmFscyIsY2Usdm9pZCAwLHtzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFs''@;'; put 'put ''OiEwLHN1cHByZXNzRXJyb3JBYm9ydE1vZGFsOiEwfSkudGhlbihFZT0+e2lmKEVlLmFkYXB0ZXJSZXNwb25zZS5keW5hbWljX3ZhbHVlcy5tYXAocWU9PnFlW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSkubGVuZ3RoPjApe2NvbnN0IHFlPXRoaXMuY2VsbFZhbGlkYXRp''@;'; put 'put ''b25Tb3VyY2UuZmluZEluZGV4KHJ0PT5ydC5oYXNoPT09Wik7cWU+LTEmJih0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3FlXT17Li4udGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtxZV0scm93OmEsY29sOmQsdmFsdWVzOkVlLmFkYXB0ZXJSZXNwb25zZS5keW5hbWljX3ZhbHVlcyxleHRl''@;'; put 'put ''bmRlZF92YWx1ZXM6RWUuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfZXh0ZW5kZWRfdmFsdWVzfSksaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixZZWUpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4''@;'; put 'put ''T2YoZCksMSksaC5kZXNlbGVjdENlbGwoKSxoLnJlbmRlcigpLGguYmF0Y2goKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCEwLGEpLGgucmVuZGVyKCksaC52YWxpZGF0ZVJvd3MoW2FdKX0sMTAwKX0pfWlmKGguc2V0Q2VsbE1ldGEoYSxkLCJy''@;'; put 'put ''ZW5kZXJlciIsWWVlKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aD50aGlzLnZh''@;'; put 'put ''bGlkYXRpb25UYWJsZUxpbWl0KXtjb25zdCBxZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnJlZHVjZSgocHQsZHQpPT5wdC5jb3VudDxkdC5jb3VudD9wdDpkdCkscnQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5pbmRleE9mKHFlKTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNw''@;'; put 'put ''bGljZShydCwxKX19KS5jYXRjaChFZT0+e2NvbnN0IEJlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KHFlPT5xZS5oYXNoPT09Wik7dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5zcGxpY2UoQmUsMSksaC5iYXRjaCgoKT0+e2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJl''@;'; put 'put ''ciIsQ210KSxoLnJlbmRlcigpfSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnB1c2goZCksc2V0VGltZW91dCgoKT0+e2guc2V0Q2Vs''@;'; put 'put ''bE1ldGEoYSxkLCJyZW5kZXJlciIsWWVlKSxoLnJlbmRlcigpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuaW5kZXhPZihkKSwxKX0sM2UzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSx0aGlzLmxvZ2dl''@;'; put 'put ''clNlcnZpY2UubG9nKCJnZXRkeW5hbWljY29sdmFscyBlcnJvcjoiLEVlKX0pKX19Y2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKXt0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHR5cGVvZiB0aGlzLmZpbHRlcl9wazwidSImJjE9PT10aGlzLmhvdFRhYmxlLmRhdGEubGVuZ3RoJiZbbnVsbCwiIl0u''@;'; put 'put ''aW5jbHVkZXModGhpcy5ob3RUYWJsZS5kYXRhWzBdW3RoaXMuaGVhZGVyUGtzWzBdXSkmJih0aGlzLnplcm9GaWx0ZXJSb3dzPSEwKX1vblJlY29yZElucHV0Rm9jdXMoYSl7dGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24odGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4LGEuY29sTmFtZSl9''@;'; put 'put ''ZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShhLGQsaCl7Y29uc3QgZj10aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2godGhpcy5kYXRhU291cmNlW2hdLFthLCJub0xpbmtPcHRpb24iXSksdj10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmQo''@;'; put 'put ''TT0+TS5oYXNoPT09ZiYmZD09PU0uY29sKTtpZih2JiZ2LmV4dGVuZGVkX3ZhbHVlcyYmdi5leHRlbmRlZF92YWx1ZXMubGVuZ3RoPjApe2NvbnN0IE09dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKHYsaCk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHModixoLE0sITAp''@;'; put 'put ''fX1kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChhKXt2b2lkIDAhPT1hLkxPQURfUkVGJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9zdGFnZS8ke2EuTE9BRF9SRUZ9YF0pfXZpZXdib3hNYW5hZ2VyKCl7dGhpcy52aWV3Ym94ZXM9ITB9Z2V0IHRvdGFsUm93c0NoYW5nZWQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkK3RoaXMucm93c0NoYW5nZWQucm93c0FkZGVkfXNldENlbGxGaWx0ZXIoYSl7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCksaD1kJiZkWzBdO2lmKGgpe2NvbnN0IGY9''@;'; put 'put ''aFswXSxNPWhbMV07aWYoZj09PWhbMl0mJk09PT1oWzNdKXtjb25zdCBaPXRoaXMuaG90SW5zdGFuY2UuZ2V0Q2VsbE1ldGEoZixNKTtaJiZaLmZpbHRlcj09PSFhJiZ0aGlzLmhvdEluc3RhbmNlLnNldENlbGxNZXRhKGYsTSwiZmlsdGVyIixhKX19fW5nT25Jbml0KCl7dmFyIGE9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGg9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9aH0pLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShoPT57aC5saWJkcz09PWEubGliZHMmJihhLndo''@;'; put 'put ''ZXJlU3RyaW5nPWguc3RyaW5nLGEuY2xhdXNlcz1oLm9iail9KTtjb25zdCBkPXt9O3R5cGVvZiBhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiJiYoYS5saWJkcz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sYS5maWx0ZXJfcGs9YS5yb3V0ZS5zbmFwc2hvdC5wYXJh''@;'; put 'put ''bXMuZmlsdGVySWQsImVkaXQtcmVjb3JkIj09PWEucm91dGUuc25hcHNob3QudXJsWzBdLnBhdGgmJihhLnJlY29yZEFjdGlvbj10eXBlb2YgYS5maWx0ZXJfcGs8InUiPyJFRElUIjoiQUREIiksZC5MSUJEUz1hLmxpYmRzLHR5cGVvZiBhLmZpbHRlcl9wazwidSImJihkLkZJTFRFUl9SSz1w''@;'; put 'put ''YXJzZUludChhLmZpbHRlcl9waykpLGQuT1VUREVTVD0iV0VCIixhLmxpYmRzJiYoS24uZWRpdG9yLmxpYnJhcnk9YS5saWJkcy5zcGxpdCgiLiIpWzBdLEtuLmVkaXRvci50YWJsZT1hLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxhLmxpYmRzJiYoYS5nZXRkYXRhRXJyb3I9ITEseWllbGQgYS5z''@;'; put 'put ''YXNTdG9yZVNlcnZpY2UuY2FsbFNlcnZpY2UoZCwiU0FTQ29udHJvbFRhYmxlIiwiZWRpdG9ycy9nZXRkYXRhIixhLmxpYmRzKS50aGVuKGg9PnthLmluaXRTZXR1cChoKX0pLmNhdGNoKGg9PnthLmdldGRhdGFFcnJvcj0hMCxhLnRhYmxlVHJ1ZT0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0''@;'; put 'put ''KCl7fWluaXRTZXR1cChhKXtpZih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90UmVnaXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2UiKSx0aGlzLmdldGRhdGFFcnJvcnx8IWF8fCFhLmRhdGEpcmV0dXJuO3RoaXMuY29scz1hLmRhdGEuY29scyx0aGlzLmRzbWV0YT1hLmRhdGEuZHNt''@;'; put 'put ''ZXRhLHRoaXMudmVyc2lvbnM9YS5kYXRhLnZlcnNpb25zfHxbXTtjb25zdCBkPXRoaXMuZHNtZXRhLmZpbmQoWj0+Ik5PVEVTIj09PVouTkFNRSksaD10aGlzLmRzbWV0YS5maW5kKFo9PiJERF9MT05HREVTQyI9PT1aLk5BTUUpLGY9dGhpcy5kc21ldGEuZmluZChaPT4iRERfU0hPUlRERVND''@;'; put 'put ''Ij09PVouTkFNRSk7dGhpcy5kc05vdGU9ZCYmZC5WQUxVRT9kLlZBTFVFOmgmJmguVkFMVUU/aC5WQUxVRTpmJiZmLlZBTFVFP2YuVkFMVUU6IiI7Y29uc3Qgdj10aGlzLmhvdEluc3RhbmNlLE09YS5kYXRhLmFwcHJvdmVyczt0aGlzLmNvbHMmJih0aGlzLmhlYWRlckFycmF5PShjPT57Y29u''@;'; put 'put ''c3QgbD1bXTtmb3IobGV0IGEgb2YgYykiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWEuTkFNRSYmbC5wdXNoKGEuTkFNRSk7cmV0dXJuIGx9KSh0aGlzLmNvbHMpKSxNLmZvckVhY2goWj0+e3RoaXMuYXBwcm92ZXJzLnB1c2goWi5QRVJTT05OQU1FKX0pLHRoaXMudGFibGVU''@;'; put 'put ''cnVlPSEwLHRoaXMubGliZHM9YS5saWJkcyx0aGlzLmhvdFRhYmxlLmRhdGE9YS5kYXRhLnNhc2RhdGEsdGhpcy5oZWFkZXJDb2x1bW5zPWEuZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuaGVhZGVyUGtzPWEuZGF0YS5zYXNwYXJhbXNbMF0uUEsuc3BsaXQo''@;'; put 'put ''IiAiKSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSEhYS5kYXRhLnNhc3BhcmFtc1swXS5DTFNfRkxBRyx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnJiZ0aGlzLnNldFJlc3RyaWN0aW9ucyh7cmVzdHJpY3RBZGRSb3c6ITAscmVtb3ZlRWRpdFJlY29yZEJ1dHRvbjohMCxyZW1v''@;'; put 'put ''dmVBZGRSZWNvcmRCdXR0b246ITB9KSx0aGlzLmNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCksLTEhPT10aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJih0aGlzLmhlYWRlckNvbHVtbnNbdGhpcy5oZWFkZXJDb2x1bW5zLmluZGV4''@;'; put 'put ''T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpXT0iRGVsZXRlPyIpLHRoaXMuaGVhZGVyQXJyYXk9dGhpcy5oZWFkZXJDb2x1bW5zLnNsaWNlKDEpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJih0aGlzLmRhdGVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0u''@;'; put 'put ''RFRWQVJTLnNwbGl0KCIgIikpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMmJih0aGlzLnRpbWVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNwbGl0KCIgIikpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYmKHRoaXMuZGF0ZVRpbWVIZWFkZXJz''@;'; put 'put ''PWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMuc3BsaXQoIiAiKSksYS5kYXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYodGhpcy54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnhsX3J1bGVzKSksdGhpcy5kY1ZhbGlkYXRvcj1uZXcgQzZlKGEuZGF0YS5zYXNw''@;'; put 'put ''YXJhbXNbMF0sYS5kYXRhLiRzYXNkYXRhLHRoaXMuY29scyxhLmRhdGEuZHFydWxlcyxhLmRhdGEuZHFkYXRhKSx0aGlzLmNlbGxWYWxpZGF0aW9uPXRoaXMuZGNWYWxpZGF0b3IuZ2V0UnVsZXMoKSx0aGlzLmRhdGFTb3VyY2U9YS5kYXRhLnNhc2RhdGEsdGhpcy4kZGF0YUZvcm1hdHM9YS5k''@;'; put 'put ''YXRhLiRzYXNkYXRhO2ZvcihsZXQgWj0wO1o8dGhpcy5oZWFkZXJDb2x1bW5zLmxlbmd0aDtaKyspdGhpcy5ob3REYXRhU2NoZW1hW3RoaXMuY2VsbFZhbGlkYXRpb25bWl0uZGF0YV09X210KHRoaXMuY2VsbFZhbGlkYXRpb25bWl0udHlwZSx0aGlzLmNlbGxWYWxpZGF0aW9uW1pdKTt0aGlz''@;'; put 'put ''LmNoZWNrUm93TGltaXQoKSx2LnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24saGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LGZvcm11bGFzOnRoaXMuaG90VGFibGUu''@;'; put 'put ''Zm9ybXVsYXMsc3RyZXRjaEg6ImFsbCIscmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seSxoaWRkZW5Db2x1bW5zOntpbmRpY2F0b3JzOiEwLGNvbHVtbnM6dGhpcy5kY1ZhbGlkYXRvci5nZXRIaWRkZW5Db2x1bW5zKCl9LG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKFoscmUpe3JldHVy''@;'; put 'put ''biAwPT09cmU/NjA6Wj41MDA/NTAwOlp9LGNvcHlQYXN0ZTp0aGlzLmhvdFRhYmxlLmNvcHlQYXN0ZSxtYW51YWxDb2x1bW5GcmVlemU6ITEsbXVsdGlDb2x1bW5Tb3J0aW5nOiEwLG1hbnVhbENvbHVtblJlc2l6ZTohMCxmaWx0ZXJzOiExLG1hbnVhbFJvd1Jlc2l6ZTohMCx2aWV3cG9ydFJv''@;'; put 'put ''d1JlbmRlcmluZ09mZnNldDo1MCxyb3dIZWFkZXJzOlo9PiIgIixyb3dIZWFkZXJXaWR0aDoxNSxyb3dIZWlnaHRzOjI0LG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZHx8MS8wLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGRyb3Bk''@;'; put 'put ''b3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToiYWxpZ25tZW50In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVyOihaLHJlLGNlLGJlLEVlLEJlKT0+e2NvbnN0''@;'; put 'put ''IHFlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgcnQscHQ9Ik5vIGluZm8gZm91bmQiO2lmKHRoaXMuaG90SW5zdGFuY2Upe2NvbnN0IGR0PXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKXx8W10sSnQ9ZHQ/ZHRbMF1bMV06LTEsdm49dGhpcy5ob3RJbnN0YW5jZT8u''@;'; put 'put ''Y29sVG9Qcm9wKEp0KTtydD10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1t2bl0scnQmJihwdD1gTEFCRUw6ICR7cnQ/LmxhYmVsfTxicj5UWVBFOiAke3J0Py50eXBlfTxicj5MRU5HVEg6ICR7cnQ/Lmxlbmd0aH08YnI+Rk9STUFUOiAke3J0Py5mb3JtYXR9YCl9cmV0dXJuIHFlLmlubmVySFRN''@;'; put 'put ''TD1wdCxxZX19fX0sZGF0YVNjaGVtYTp0aGlzLmhvdERhdGFTY2hlbWEsY29udGV4dE1lbnU6dGhpcy5ob3RUYWJsZS5zZXR0aW5ncy5jb250ZXh0TWVudSxjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJjdXN0b21IIixhZnRlckdldENvbEhlYWRlcjooWixyZSk9Pntjb25zdCBjZT10aGlzLmNv''@;'; put 'put ''bHVtbkhlYWRlcltaXSxiZT1jZSYmdGhpcy5pc0NvbFBrKGNlKSxFZT1jZSYmdGhpcy5pc1JlYWRvbmx5Q29sKGNlKTtiZSYmcmUuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksRWUmJiFiZSYmcmUuY2xhc3NMaXN0LmFkZCgicmVhZG9ubHlDZWxsIiksMD09PVomJnJl''@;'; put 'put ''LmNsYXNzTGlzdC5hZGQoImZpcnN0Q29sdW1uSGVhZGVyU3R5bGUiKSxyZS5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LGFmdGVyR2V0Q2VsbE1ldGE6KFoscmUsY2UpPT57cmUmJnRoaXMuaXNSZWFkb25seUNvbChyZSkmJihjZS5jbGFzc05h''@;'; put 'put ''bWU9InJlYWRvbmx5Q2VsbCIpfX0sITEpLHRoaXMuaG90VGFibGUuaGlkZGVuPSExLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpLHRoaXMucXVlcnlUZXh0PWEuZGF0YS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsdGhpcy5jb2x1bW5IZWFkZXI9YS5kYXRhLnNhc3Bh''@;'; put 'put ''cmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksdGhpcy5jb2x1bW5IZWFkZXJbMF09IkRlbGV0ZT8iLHRoaXMucmVhZE9ubHlGaWVsZHM9YS5kYXRhLnNhc3BhcmFtc1swXS5QS0NOVDtjb25zdCBEPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIpO0QmJkQuYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lcigibW91c2Vkb3duIixaPT57dGhpcy51cGxvYWRQcmV2aWV3fHx0aGlzLmhvdENsaWNrZWQoKSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgcmU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRlYnVnLXN3aXRjaC1pdGVtIil8fHZvaWQgMDtyZSYmcmUuY2xpY2soKX0sMTAwKX0p''@;'; put 'put ''LHYuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLChaLHJlLGNlLGJlLEVlLEJlKT0+e1o9PT1jZSYmcmU9PT1iZSYmITE9PT10aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbihaLHJlKX0pLHYuYWRkSG9vaygiYWZ0ZXJCZWdpbkVkaXRpbmciLCgpPT57''@;'; put 'put ''dGhpcy5zZXRDZWxsRmlsdGVyKCExKX0pLHYuYWRkSG9vaygiYmVmb3JlS2V5RG93biIsKCk9Pnt0aGlzLnNldENlbGxGaWx0ZXIoITApfSksdi5hZGRIb29rKCJhZnRlckNoYW5nZSIsKFoscmUpPT57aWYoImVkaXQiPT09cmUpe2NvbnN0IGNlPXRoaXMuaG90SW5zdGFuY2UsYmU9WlswXVsw''@;'; put 'put ''XSxFZT1aWzBdWzFdLEJlPWNlLnByb3BUb0NvbChFZSkscWU9Y2UuZ2V0Q2VsbE1ldGEoYmUsQmUpO3FlJiYhMT09PXFlLmZpbHRlciYmY2Uuc2V0Q2VsbE1ldGEoYmUsQmUsImZpbHRlciIsITApLHRoaXMuZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShFZSxCZSxi''@;'; put 'put ''ZSl9fSksdi5hZGRIb29rKCJhZnRlclJlbmRlciIsWj0+e3RoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSksdi5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKFoscmUpPT57aWYoWj50aGlzLmRhdGFTb3VyY2UubGVuZ3RoKXtjb25zdCBjZT1kb2N1bWVudC5xdWVy''@;'; put 'put ''eVNlbGVjdG9yKCIud3RIb2xkZXIiKTtzZXRUaW1lb3V0KCgpPT57Y2UmJihjZS5zY3JvbGxUb3A9Y2Uuc2Nyb2xsSGVpZ2h0KX0pfX0pLHYuYWRkSG9vaygiYmVmb3JlUGFzdGUiLChaLHJlKT0+e2NvbnN0IGNlPXJlWzBdLnN0YXJ0Q29sO1pbMF09WlswXS5tYXAoKGJlLEVlKT0+e2NvbnN0''@;'; put 'put ''IEJlPXRoaXMuY29sdW1uSGVhZGVyW2NlK0VlXSxxZT0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW0JlXT8udHlwZSxydD0oMCxnZy5pc1NwZWNpYWxNaXNzaW5nKShiZSk7cmV0dXJuIHFlJiYhaXNOYU4oYmUpJiYhcnQmJihiZSo9MSksYmV9KX0pLHYuYWRkSG9vaygiYWZ0ZXJS''@;'; put 'put ''ZW1vdmVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSx2LmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksdGhpcy51cGxvYWRVcmw9InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLG51bGwhPT10aGlzLnJlY29yZEFjdGlvbiYmKCJB''@;'; put 'put ''REQiPT09dGhpcy5yZWNvcmRBY3Rpb24/KHRoaXMuYWRkUmVjb3JkKCksdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKSk6MT09PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgmJnRoaXMuZWRpdFJlY29yZChudWxsLDApKSxhLmRhdGEucXVlcnkubGVuZ3Ro''@;'; put 'put ''PjAmJigiaG9tZSI9PT1Lbi5yb290UGFyYW18fCJlZGl0b3IiPT09S24ucm9vdFBhcmFtKSYmMD09PUtuLmVkaXRvci5maWx0ZXIuY2xhdXNlcy5sZW5ndGgmJihLbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnF1ZXJ5KSxLbi5lZGl0''@;'; put 'put ''b3IuZmlsdGVyLmxpYmRzPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJlZGl0b3IiLHRoaXMuY29scykpLHYucmVuZGVyKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8YykoR2UodTEpLEdlKHZjKSxHZShTZCksR2Uoa2gpLEdlKFN1KSxHZShMcyksR2UoQ3UpLEdlKEJzKSxHZShFcyksR2UoWW0pLEdlKEE2ZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWVkaXRvciJdXSx2aWV3UXVl''@;'; put 'put ''cnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJihxYShwN3QsNykscWEoZzd0LDUpLHFhKG03dCw1KSxxYSh2N3QsNSkscWEoYjd0LDUpKSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLmh0PWYuZmlyc3QpLENpKGY9U2koKSkmJihoLnVwbG9hZFN0YXRlckNvbXBMaXN0PWYpLENpKGY9U2koKSkm''@;'; put 'put ''JihoLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9ZiksQ2koZj1TaSgpKSYmKGguaG90SW5zdGFuY2VDb21wTGlzdD1mKSxDaShmPVNpKCkpJiYoaC5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1mKX19LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxNzcsdmFyczo3NCxjb25z''@;'; put 'put ''dHM6W1siaHQiLCIiXSxbImhvdEluc3RhbmNlIiwiIl0sWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJ1cGxvYWRTdGF0ZXIiLCIiXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWzEsImNvbnRlbnQtYXJlYSIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJd''@;'; put 'put ''LFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIiwidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiJdLFsx''@;'; put 'put ''LCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLWF1dG8iXSxbMSwi''@;'; put 'put ''ZW5jb2RpbmctYmxvY2siXSxbImNscklubGluZSIsIiIsMSwibXQtMCJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIlVURi04IiwibmFtZSIsImVuY29kaW5nIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJ0eXBlIiwicmFkaW8iLCJj''@;'; put 'put ''bHJSYWRpbyIsIiIsInZhbHVlIiwiV0xBVElOMSIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZmlsdGVyQnRuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMyBlZGl0QnRuIiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXItMCIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIs''@;'; put 'put ''ImV4Y2VsLXBhcnNpbmcgY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbMywiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRp''@;'; put 'put ''b24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciIsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3VzZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJl''@;'; put 'put ''Y29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLDQsIm5nSWYiXSxbMSwiY2xyLWZsZXgtMSJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImJvcmRlci0wIiwiYm94LXNoYWRvdy1ub25lLWkiLCJwb3Np''@;'; put 'put ''dGlvbi1yZWxhdGl2ZSIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywiZmlsZURyYWdnZWRPdmVyIl0sWzEsImNhcmQtaGVhZGVyIiwiY2xyLXJvdyIsImJ1dHRvbkJhciIsImhlYWRlckJhciIsImNsci1mbGV4LW1kLXJvdyIs''@;'; put 'put ''ImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1lbmQiXSxbImNsYXNzIiwiY2xyLWNvbC0xMiBjbHItY29sLW1kLTMgY2xyLWNvbC1sZy00IGJhY2tCdG4iLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbWQtNSIsImNsci1jb2wt''@;'; put 'put ''bGctNCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImVkaXRvci10aXRsZSB0ZXh0LWNlbnRlciBtdC0wIiw0LCJuZ1ZhciJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wtbWQtNCBjbHItY29sLWxnLTQgYnRuQ3RybCIsNCwibmdJ''@;'; put 'put ''ZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsImNsci1mbGV4LTEiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsxLCJjYXJkLXRleHQi''@;'; put 'put ''LCJob3RFZGl0b3IiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiXSxbMSwiaG90LXdyYXBwZXIiLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIs''@;'; put 'put ''MSwiZWRpdC1ob3QiLDMsImxpY2Vuc2VLZXkiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtdC0yLWkgdy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm0tMCJdLFsi''@;'; put 'put ''dHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiZHVwbGljYXRlLWtleXMtbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFs''@;'; put 'put ''T3BlbiJdLFsiY2xhc3MiLCJkLWJsb2NrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vZGFsIHotaW5kZXgtaGlnaGVzdCIsNCwibmdJZiJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3Bl''@;'; put 'put ''biIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJi''@;'; put 'put ''dXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGlu''@;'; put 'put ''ZSIsMywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siXSxbMSwibW9kYWwt''@;'; put 'put ''Ym9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJkYXRhLWxwaWdub3JlIiwidHJ1ZSIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImlkIiwiZmlsZVBhc3N3b3JkSW5wdXQiLCJ0eXBlIiwidGV4dCIsMSwiY2xyLWlucHV0IiwiZGlzYWJsZS1wYXNzd29yZC1tYW5h''@;'; put 'put ''Z2VyIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMywib3BlbkNoYW5nZSIsInJvd0NsaWNrZWQiLCJvcGVuIiwiZHNtZXRhIiwi''@;'; put 'put ''dmVyc2lvbnMiXSxbMywidmlld2JveE1vZGFsQ2hhbmdlIiwidmlld2JveE1vZGFsIl0sWzEsImNsci1jb2wtbWQtMyIsImZpbHRlckJ0biJdLFsxLCJmaWx0ZXJCdG4iLCJ3LTEwMCJdLFsiZm9yIiwiZmlsZS11cGxvYWQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwicHJvZmls''@;'; put 'put ''ZS1idXR0b25zIiwidy0xMDAiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmlsZSIsImFwcEZpbGVTZWxlY3QiLCIiLDMsImNoYW5nZSIsInVwbG9hZGVyIl0sWzEsImNsci1jb2wtbWQtMyIsImVkaXRCdG4iXSxbMSwiYnRuVmlldyIsImJ0biIsImJ0bi1zbSIs''@;'; put 'put ''ImJ0bi1zdWNjZXNzIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXItMCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1h''@;'; put 'put ''cnkiLCJtci0wIiwzLCJjbGljayJdLFsxLCJleGNlbC1wYXJzaW5nIiwiY2xyLWNvbC1tZC0xMiJdLFszLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5leHRSZWNvcmQiLCJvblByZXZpb3VzUmVjb3JkIiwiY3VycmVudFJl''@;'; put 'put ''Y29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwi''@;'; put 'put ''Y3VycmVudFJlY29yZFZhbGlkYXRvciJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29sLW1kLTMiLCJjbHItY29sLWxnLTQiLCJiYWNrQnRuIl0sWzEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIs''@;'; put 'put ''ImJ0bi1kaW1tZWQiLDMsInJvdXRlckxpbmsiXSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsInRleHQiXSxbMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWRpbW1lZCIsInZpZXdib3gtb3BlbiIsMywiY2xpY2si''@;'; put 'put ''XSxbInNoYXBlIiwidmlldy1jYXJkcyIsInNpemUiLCIyMCJdLFsxLCJlZGl0b3ItdGl0bGUiLCJ0ZXh0LWNlbnRlciIsIm10LTAiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwic2hhcGUiLCJpbmZvLWNpcmNsZSIsImFyaWEtbGFiZWwiLCJWaWV3IGRhdGFzZXQgbWV0YSBpbmZvIiwic2l6''@;'; put 'put ''ZSIsIjI0IiwxLCJpcy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3IteWVsbG93Iiw0LCJuZ0lmIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiJdLFsxLCJtci0xMCIsInZpZXctdGFibGUiLDMsInJvdXRlckxpbmsi''@;'; put 'put ''XSxbInNoYXBlIiwiYm9sdCIsMSwiY29sb3IteWVsbG93Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wt''@;'; put 'put ''bWQtNCIsImNsci1jb2wtbGctNCIsImJ0bkN0cmwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0blZpZXciLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tYmxvY2siLCJidG4tZGltbWVkIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiXSxbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLDEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4tcHJpbWFyeSIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbInNoYXBlIiwibm90ZSJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGljb24tY29sbGFwc2UgYnRuLXNtIGJ0bi1zdWNjZXNzIGJ0bi1i''@;'; put 'put ''bG9jayBtci0wIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJi''@;'; put 'put ''dG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1vdXRsaW5lLWRhbmdlciIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9hZGlu''@;'; put 'put ''ZyJdLFsic2hhcGUiLCJwbHVzIiwic2l6ZSIsIjE2Il0sWyJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjIwIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1vdXRsaW5lLWRhbmdlciIsImJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siXSxbInR5''@;'; put 'put ''cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLXByaW1hcnkgYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcmV2aWV3LXN1Ym1pdCIsMywiY2xpY2siLCJjbHJM''@;'; put 'put ''b2FkaW5nIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsImJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnkt''@;'; put 'put ''Y29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJzcGlubmVyIl0sWzEsIm10LTEwIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLDEsImVycm9yLWljb24iXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwi''@;'; put 'put ''IiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJtdC01LWkiLDMsImNsaWNrIl0sWyJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIsImNsclNpemUiLCJs''@;'; put 'put ''ZyJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsIm1vZGFsIl0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciLCJtb2RhbC1sZyJdLFsxLCJtb2RhbC1jb250ZW50Il0sWzEsIm1vZGFsLWhlYWRlciJdLFsiYXJpYS1s''@;'; put 'put ''YWJlbCIsIkNsb3NlIiwidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiY2xvc2UiXSxbImNsYXNzIiwiZC1ibG9jayB3LTEwMCB0ZXh0LWNlbnRlciBjb2xvci1yZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLW9mZnNldC1tZC0yIGNs''@;'; put 'put ''ci1jb2wtbWQtOCIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyLWkiXSxbImlkIiwic3VibWl0QnRuIiwidHlwZSIsInN1Ym1pdCIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsIm0tMCIsMywi''@;'; put 'put ''Y2xpY2siLCJkaXNhYmxlZCJdLFsiaWQiLCJjYW5jZWxTdWJtaXRCdG4iLCJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiZC1ibG9jayIsInctMTAwIiwidGV4dC1jZW50ZXIiLCJjb2xvci1yZWQiXSxb''@;'; put 'put ''MSwiY2xyLW9mZnNldC1tZC0yIiwiY2xyLWNvbC1tZC04Il0sWzEsInRleHQtYXJlYS1mdWxsLXdpZHRoIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiLDEsIm1iLTUiLCJkLWJsb2NrIl0sWyJjbHJUZXh0YXJlYSIsIiIsInRhYmluZGV4IiwiMCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmll''@;'; put 'put ''bGRzXzgiLDEsInN1Ym1pdC1yZWFzb24iLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJ2YWx1ZSJdLFsxLCJkLWJsb2NrIl0sWzEsIm1vZGFsIiwiei1pbmRleC1oaWdoZXN0Il0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1k''@;'; put 'put ''aWFsb2ciXSxbMSwibS0wIiwiY29sb3ItcmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiZGl2Iiw2KSgxLCJjbHItbW9kYWwiLDcpLEZ0KCJmaWxlT3ZlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZmlsZU92ZXJCYXNlKE0p''@;'; put 'put ''KX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguYXR0YWNoRmlsZShNLCEwKSl9KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zaG93VXBsb2FkTW9kYWwsTSl8fChoLnNob3dVcGxvYWRNb2RhbD1NKSxDdChN''@;'; put 'put ''KX0pLGRlKDIsImgzIiw4KSxMZSgzLCJVcGxvYWQgRmlsZSIpLGhlKCksZGUoNCwiZGl2Iiw5KSg1LCJkaXYiLDEwKSg2LCJzcGFuIiksTGUoNywiRHJvcCBmaWxlIGFueXdoZXJlIHRvIHVwbG9hZCEiKSxoZSgpKCksZGUoOCwiZGl2IiwxMSkoOSwiZGl2IiwxMikoMTAsImRpdiIsMTMpKDEx''@;'; put 'put ''LCJkaXYiLDE0KSgxMiwiY2xyLXJhZGlvLWNvbnRhaW5lciIsMTUpKDEzLCJjbHItcmFkaW8td3JhcHBlciIpKDE0LCJpbnB1dCIsMTYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5lbmNvZGluZyxNKXx8KGguZW5jb2Rpbmc9TSksQ3QoTSl9KSxo''@;'; put 'put ''ZSgpLGRlKDE1LCJsYWJlbCIpLExlKDE2LCJVVEYtOCIpLGhlKCkoKSxkZSgxNywiY2xyLXJhZGlvLXdyYXBwZXIiKSgxOCwiaW5wdXQiLDE3KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZW5jb2RpbmcsTSl8fChoLmVuY29kaW5nPU0pLEN0KE0p''@;'; put 'put ''fSksaGUoKSxkZSgxOSwibGFiZWwiKSxMZSgyMCwiV0xBVElOMSIpLGhlKCkoKSgpKCkoKSxndCgyMSxDN3QsNiwxLCJkaXYiLDE4KSgyMixTN3QsMywxLCJkaXYiLDE5KSxkZSgyMywiZGl2IiwxMyksZ3QoMjQsTTd0LDIsMSwiYnV0dG9uIiwyMCkoMjUseDd0LDIsMCwiYnV0dG9uIiwyMSks''@;'; put 'put ''aGUoKSxndCgyNixFN3QsMywwLCJkaXYiLDIyKSxoZSgpKCkoKSxHdCgyNywiZGl2IiwyMyksaGUoKSxndCgyOCxUN3QsMSwxMiwiYXBwLWVkaXQtcmVjb3JkIiwyNCksZGUoMjksImRpdiIsMjUsMCksZ3QoMzEsQTd0LDIsMCwiZGl2IiwyNiksZGUoMzIsImRpdiIsMjcpLEZ0KCJmaWxlRHJh''@;'; put 'put ''Z2dlZE92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgub25TaG93VXBsb2FkTW9kYWwoKSl9KSxkZSgzMywiZGl2IiwyOCksZ3QoMzQsazd0LDksMiwiZGl2IiwyOSksZGUoMzUsImRpdiIsMzApLGd0KDM2LEY3dCwxMCw2LCJoNCIsMzEpLGhlKCksZ3QoMzcsWjd0LDQsMywiZGl2''@;'; put 'put ''IiwzMikoMzgsVzd0LDUsMSwiZGl2IiwzMyksaGUoKSxkZSgzOSwiZGl2IiwzNCksZ3QoNDAsJDd0LDQsMiwiZGl2IiwzNSksZGUoNDEsImRpdiIsMzYpKDQyLCJkaXYiLDM3KSxHdCg0MywiaG90LXRhYmxlIiwzOCwxKSxoZSgpLGRlKDQ1LCJkaXYiKSxndCg0NixYN3QsNSwyLCJjbHItdG9v''@;'; put 'put ''bHRpcCIsMzkpKDQ3LEo3dCwzLDEsInAiLDQwKSxoZSgpLGd0KDQ4LHQ5dCwxNiw2LCJkaXYiLDQxKSxkZSg0OSwiY2xyLW1vZGFsIiw0MiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguc3VibWl0TGltaXROb3RpY2UsTSl8fChoLnN1Ym1p''@;'; put 'put ''dExpbWl0Tm90aWNlPU0pLEN0KE0pfSksZGUoNTAsImgzIiw4KSxMZSg1MSwiTm90aWNlIiksaGUoKSxkZSg1MiwiZGl2Iiw5KSg1MywicCIsNDMpLExlKDU0KSxoZSgpKCksZGUoNTUsImRpdiIsMjMpKDU2LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYp''@;'; put 'put ''LEN0KGguc3VibWl0TGltaXROb3RpY2U9ITEpfSksTGUoNTcsIiBDYW5jZWwgIiksaGUoKSxkZSg1OCwiYnV0dG9uIiw0NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLnVwbG9hZFBhcnNlZEZpbGVzKCksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxMZSg1OSwi''@;'; put 'put ''IFN1Ym1pdCAiKSxoZSgpKCkoKSxkZSg2MCwiY2xyLW1vZGFsIiw0MiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguYmFkRWRpdCxNKXx8KGguYmFkRWRpdD1NKSxDdChNKX0pLGRlKDYxLCJoMyIsOCksTGUoNjIpLGhlKCksZGUoNjMsImRp''@;'; put 'put ''diIsOSkoNjQsInAiKSxMZSg2NSksaGUoKSgpLGRlKDY2LCJkaXYiLDIzKSg2NywiYnV0dG9uIiw0NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmJhZEVkaXQ9ITEpfSksTGUoNjgsIiBPayAiKSxoZSgpKCkoKSxkZSg2OSwiY2xyLW1vZGFsIiw0MiksZ2koImNs''@;'; put 'put ''ck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgucGtOdWxsLE0pfHwoaC5wa051bGw9TSksQ3QoTSl9KSxkZSg3MCwiaDMiLDgpLExlKDcxLCJFcnJvciIpLGhlKCksZGUoNzIsImRpdiIsOSkoNzMsInAiKSxMZSg3NCwiIE51bGwgdmFsdWVzIG9yIGluY29y''@;'; put 'put ''cmVjdCBkYXRhIHR5cGVzIGNhbm5vdCBiZSBzdWJtaXR0ZWQgZm9yIFByaW1hcnkgS2V5IGNvbHVtbnMgIiksaGUoKSgpLGRlKDc1LCJkaXYiLDIzKSg3NiwiYnV0dG9uIiw0NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLnBrTnVsbD0hMSxDdChoLmJhZEVkaXQ9ITEp''@;'; put 'put ''fSksTGUoNzcsIiBPayAiKSxoZSgpKCkoKSxkZSg3OCwiY2xyLW1vZGFsIiw0MiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgubm9Qa051bGwsTSl8fChoLm5vUGtOdWxsPU0pLEN0KE0pfSksZGUoNzksImgzIiw4KSxMZSg4MCwiRXJyb3Ii''@;'; put 'put ''KSxoZSgpLGRlKDgxLCJkaXYiLDkpKDgyLCJwIiksTGUoODMsIkluY29ycmVjdCBkYXRhIHR5cGVzIGluIG5vbi1QcmltYXJ5IEtleSBjb2x1bW5zIiksaGUoKSgpLGRlKDg0LCJkaXYiLDIzKSg4NSwiYnV0dG9uIiw0NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLm5v''@;'; put 'put ''UGtOdWxsPSExLEN0KGguYmFkRWRpdD0hMSl9KSxMZSg4NiwiIE9rICIpLGhlKCkoKSgpLGRlKDg3LCJjbHItbW9kYWwiLDQ2KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5wa0R1cHMsTSl8fChoLnBrRHVwcz1NKSxDdChNKX0pLGRlKDg4''@;'; put 'put ''LCJoMyIsOCksTGUoODksIkVycm9yIiksaGUoKSxkZSg5MCwiZGl2Iiw5KSg5MSwicCIpLExlKDkyLCIgRHVwbGljYXRlIHZhbHVlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmltYXJ5IEtleSBjb2x1bW5zICIpLGhlKCksZGUoOTMsInAiKSxMZSg5NCwiRHVwbGljYXRlcyBmb3VuZDoi''@;'; put 'put ''KSxoZSgpLGd0KDk1LG45dCwzLDQsInNwYW4iLDQ3KSxoZSgpLGRlKDk2LCJkaXYiLDIzKSg5NywiYnV0dG9uIiw0NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnBrRHVwcz0hMSl9KSxMZSg5OCwiIE9rICIpLGhlKCkoKSgpLGRlKDk5LCJjbHItbW9kYWwiLDQy''@;'; put 'put ''KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC50b29Mb25nLE0pfHwoaC50b29Mb25nPU0pLEN0KE0pfSksZGUoMTAwLCJoMyIsOCksTGUoMTAxLCJFcnJvciIpLGhlKCksZGUoMTAyLCJkaXYiLDkpKDEwMywicCIpLExlKDEwNCwiIFRoZSBm''@;'; put 'put ''b2xsb3dpbmcgY29sdW1ucyBoYXZlIHZhbHVlcyB0aGF0IGV4Y2VlZCBsZW5ndGggbGltaXRzOiAiKSxoZSgpLGd0KDEwNSxyOXQsMiwzLCJwIiw0OCksaGUoKSxkZSgxMDYsImRpdiIsMjMpKDEwNywiYnV0dG9uIiw0NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLnRv''@;'; put 'put ''b0xvbmc9ITEsQ3QoaC5jbGVhbkV4Y2VlZCgpKX0pLExlKDEwOCwiIE9rICIpLGhlKCkoKSgpKCkoKSgpKCkoKSxndCgxMDksaTl0LDE0LDAsImRpdiIsNDkpLGRlKDExMCwiY2xyLW1vZGFsIiw1MCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1p''@;'; put 'put ''KGguZmlsdGVyLE0pfHwoaC5maWx0ZXI9TSksQ3QoTSl9KSxkZSgxMTEsImgzIiw1MSksTGUoMTEyLCIgRmlsdGVyIGZvciB0YWJsZTogIiksZGUoMTEzLCJzcGFuIiksTGUoMTE0KSxoZSgpKCksZGUoMTE1LCJkaXYiLDkpLGd0KDExNixhOXQsMiwwLCJhcHAtcXVlcnkiLDM5KSxoZSgpLGRl''@;'; put 'put ''KDExNywiZGl2IiwyMykoMTE4LCJidXR0b24iLDUyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucmVzZXRGaWx0ZXIoKSl9KSxMZSgxMTksIiByZXNldCBmaWx0ZXIgIiksaGUoKSxkZSgxMjAsImJ1dHRvbiIsNTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoZiksQ3QoaC5maWx0ZXI9ITEpfSksTGUoMTIxLCIgQ2FuY2VsICIpLGhlKCksZGUoMTIyLCJidXR0b24iLDU0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2VuZENsYXVzZSgpKX0pLExlKDEyMywiIE9rICIpLGhlKCkoKSgpLGRlKDEyNCwiY2xyLW1v''@;'; put 'put ''ZGFsIiw0MiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgucXVlcnlFcnIsTSl8fChoLnF1ZXJ5RXJyPU0pLEN0KE0pfSksZGUoMTI1LCJoMyIsOCksTGUoMTI2LCJFcnJvciIpLGhlKCksZGUoMTI3LCJkaXYiLDkpKDEyOCwicCIpLExlKDEy''@;'; put 'put ''OSksaGUoKSgpLGRlKDEzMCwiZGl2IiwyMykoMTMxLCJidXR0b24iLDU1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucXVlcnlFcnI9ITEpfSksTGUoMTMyLCIgQ2FuY2VsICIpLGhlKCksZGUoMTMzLCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGYpLEN0KGgucXVlcnlFcnI9ITEpfSksTGUoMTM0LCIgT2sgIiksaGUoKSgpKCksZGUoMTM1LCJjbHItbW9kYWwiLDU2KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5kaXNjYXJkU291cmNlRmlsZSxNKXx8KGguZGlzY2Fy''@;'; put 'put ''ZFNvdXJjZUZpbGU9TSksQ3QoTSl9KSxkZSgxMzYsImgzIiw1MSksTGUoMTM3LCJXYXJuaW5nIiksaGUoKSxkZSgxMzgsImRpdiIsOSksTGUoMTM5LCIgVGhpcyBhY3Rpb24gd2lsbCBkaXNjYXJkIHRoZSBzb3VyY2UgZmlsZSBhbmQgaXQncyBsb2FkZWQgZGF0YSAiKSxkZSgxNDAsImIiKSxM''@;'; put 'put ''ZSgxNDEpLGhlKCksTGUoMTQyLCIgRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIiksaGUoKSxkZSgxNDMsImRpdiIsMjMpKDE0NCwiYnV0dG9uIiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmRpc2NhcmRTb3VyY2VGaWxlPSExKX0pLExlKDE0NSwiIENhbmNl''@;'; put 'put ''bCAiKSxoZSgpLGRlKDE0NiwiYnV0dG9uIiw1NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLmRpc2NhcmRTb3VyY2VGaWxlPSExLEN0KGguZGlzY2FyZFBlbmRpbmdFeGNlbCghMCkpfSksTGUoMTQ3LCIgT2sgIiksaGUoKSgpKCksZGUoMTQ4LCJjbHItbW9kYWwiLDU2''@;'; put 'put ''KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5maWxlUGFzc3dvcmRNb2RhbCxNKXx8KGguZmlsZVBhc3N3b3JkTW9kYWw9TSksQ3QoTSl9KSxkZSgxNDksImgzIiw1MSksTGUoMTUwLCIgUGFzc3dvcmQgUHJvdGVjdGVkIEZpbGUgIiksaGUo''@;'; put 'put ''KSxkZSgxNTEsImRpdiIsNTgpKDE1MiwicCIsNDMpLExlKDE1MywiUGxlYXNlIGVudGVyIHBhc3N3b3JkOiIpLGhlKCksR3QoMTU0LCJpbnB1dCIsNTksMiksaGUoKSxkZSgxNTYsImRpdiIsMjMpLGd0KDE1NyxvOXQsMiwwLCJwIiw2MCksZGUoMTU4LCJidXR0b24iLDUzKSxGdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguZmlsZVBhc3N3b3JkTW9kYWw9ITEsQ3QoaC5maWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQodm9pZCAwKSl9KSxMZSgxNTksIiBDYW5jZWwgdXBsb2FkICIpLGhlKCksZGUoMTYwLCJidXR0b24iLDYxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3Qo''@;'; put 'put ''Zik7Y29uc3QgTT1oYSgxNTUpO3JldHVybiBoLmZpbGVQYXNzd29yZE1vZGFsPSExLEN0KGguZmlsZVBhc3N3b3JkU3ViamVjdC5uZXh0KE0udmFsdWUpKX0pLExlKDE2MSwiIFVubG9jayAiKSxoZSgpKCkoKSxkZSgxNjIsImNsci1tb2RhbCIsNTYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLm1hbnVhbEZpbGVFZGl0TW9kYWwsTSl8fChoLm1hbnVhbEZpbGVFZGl0TW9kYWw9TSksQ3QoTSl9KSxkZSgxNjMsImgzIiw1MSksTGUoMTY0LCJXYXJuaW5nIiksaGUoKSxkZSgxNjUsImRpdiIsOSksTGUoMTY2LCIgTWFudWFsbHkgZWRp''@;'; put 'put ''dGluZyB0aGlzIGRhdGEgd2lsbCBtZWFuIHRoZSBzb3VyY2UgZmlsZSAiKSxkZSgxNjcsImIiKSxMZSgxNjgpLGhlKCksTGUoMTY5LCIgd2lsbCBiZSBkaXNjYXJkZWQuIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLGhlKCksZGUoMTcwLCJkaXYiLDIzKSgxNzEsImJ1dHRvbiIsNTMpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5tYW51YWxGaWxlRWRpdE1vZGFsPSExKX0pLExlKDE3MiwiIENhbmNlbCAiKSxoZSgpLGRlKDE3MywiYnV0dG9uIiw1NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLm1hbnVhbEZpbGVFZGl0TW9kYWw9''@;'; put 'put ''ITEsQ3QoaC5wcmV2aWV3VGFibGVFZGl0Q29uZmlybSgpKX0pLExlKDE3NCwiIE9rICIpLGhlKCkoKSgpLGRlKDE3NSwiYXBwLWRhdGFzZXQtaW5mbyIsNjIpLGdpKCJvcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5kYXRhc2V0SW5mbyxNKXx8KGguZGF0YXNldElu''@;'; put 'put ''Zm89TSksQ3QoTSl9KSxGdCgicm93Q2xpY2tlZCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoTSkpfSksaGUoKSxkZSgxNzYsImFwcC12aWV3Ym94ZXMiLDYzKSxnaSgidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1''@;'; put 'put ''cm4gd3QoZiksbWkoaC52aWV3Ym94ZXMsTSl8fChoLnZpZXdib3hlcz1NKSxDdChNKX0pLGhlKCl9aWYoMiZkKXtjb25zdCBmPWhhKDE1NSk7ZmUoKSxNZSgidXBsb2FkZXIiLGgudXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwhMSkoImNs''@;'; put 'put ''ck1vZGFsQ2xvc2FibGUiLCJWYWxpZGF0aW5nLURRIj09PWguZXhjZWxVcGxvYWRTdGF0ZSkscGkoImNsck1vZGFsT3BlbiIsaC5zaG93VXBsb2FkTW9kYWwpLGZlKDEzKSxwaSgibmdNb2RlbCIsaC5lbmNvZGluZyksTWUoImRpc2FibGVkIiwiIiE9aC5maWxlbmFtZSksZmUoNCkscGkoIm5n''@;'; put 'put ''TW9kZWwiLGguZW5jb2RpbmcpLE1lKCJkaXNhYmxlZCIsIiIhPWguZmlsZW5hbWUpLGZlKDMpLE1lKCJuZ0lmIiwhaC5leGNlbEZpbGVQYXJzaW5nJiYhaC51cGxvYWRMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhaC5leGNlbEZpbGVQYXJzaW5nJiYhaC51cGxvYWRMb2FkaW5nKSxmZSgyKSxN''@;'; put 'put ''ZSgibmdJZiIsIlZhbGlkYXRpbmciIT09aC5leGNlbFVwbG9hZFN0YXRlKSxmZSgpLE1lKCJuZ0lmIiwiVmFsaWRhdGluZy1EUSI9PT1oLmV4Y2VsVXBsb2FkU3RhdGUpLGZlKCksTWUoIm5nSWYiLGguZXhjZWxGaWxlUGFyc2luZyksZmUoMiksTWUoIm5nSWYiLGguY3VycmVudEVkaXRSZWNv''@;'; put 'put ''cmRJbmRleD4tMSksZmUoMyksTWUoIm5nSWYiLCFoLnZhbGlkYXRpb25Eb25lJiZoLnN1Ym1pdCksZmUoMyksTWUoIm5nSWYiLGgudGFibGVUcnVlKSxmZSgpLFRyKCJjbHItY29sLWxnLTEyIiwhaC50YWJsZVRydWUpLGZlKCksTWUoIm5nVmFyIixscCg2Nyx5N3QsbnVsbD09aC5saWJkcz9u''@;'; put 'put ''dWxsOmgubGliZHMuc3BsaXQoIi4iKVswXSxudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzFdKSksZmUoKSxNZSgibmdJZiIsaC50YWJsZVRydWUpLGZlKCksTWUoIm5nSWYiLCFHcyg3MCxINmUpLmluY2x1ZGVzKGgucXVlcnlUZXh0KSksZmUoKSxNZSgibmdDbGFzcyIs''@;'; put 'put ''c3AoNzIsXzd0LCFHcyg3MSxINmUpLmluY2x1ZGVzKGgucXVlcnlUZXh0KSkpLGZlKCksTWUoIm5nSWYiLCFoLnRhYmxlVHJ1ZSksZmUoMyksVHIoImhpZGRlbiIsaC5ob3RUYWJsZS5oaWRkZW4pLE1lKCJsaWNlbnNlS2V5IixoLmhvdFRhYmxlLmxpY2Vuc2VLZXkpLGZlKDMpLE1lKCJuZ0lm''@;'; put 'put ''IixoLnRhYmxlVHJ1ZSYmIWgucmVzdHJpY3Rpb25zLnJlbW92ZUFkZFJlY29yZEJ1dHRvbiksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkmJmguZGF0YVNvdXJjZSYmaC5kYXRhU291cmNlLmxlbmd0aD5oLmxpY2Vu''@;'; put 'put ''Y2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKSxmZSgpLE1lKCJuZ0lmIixoLnN1Ym1pdCksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLnN1Ym1pdExpbWl0Tm90aWNlKSxmZSg1KSxEcigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixoLmxpY2VuY2VTdGF0ZS52YWx1''@;'; put 'put ''ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksZmUoNikscGkoImNsck1vZGFsT3BlbiIsaC5iYWRFZGl0KSxmZSgyKSx3ciho''@;'; put 'put ''LmJhZEVkaXRUaXRsZXx8IkVycm9yIiksZmUoMyksd3IoaC5iYWRFZGl0Q2F1c2UpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgucGtOdWxsKSxmZSg5KSxwaSgiY2xyTW9kYWxPcGVuIixoLm5vUGtOdWxsKSxmZSg5KSxwaSgiY2xyTW9kYWxPcGVuIixoLnBrRHVwcyksZmUoOCksTWUoIm5n''@;'; put 'put ''Rm9yT2YiLGguZHVwbGljYXRlUGtJbmRleGVzKSxmZSg0KSxwaSgiY2xyTW9kYWxPcGVuIixoLnRvb0xvbmcpLGZlKDYpLE1lKCJuZ0Zvck9mIixoLmV4Y2VlZENlbGxzKSxmZSg0KSxNZSgibmdJZiIsaC5udWxsVmFyaWFibGVzKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSxN''@;'; put 'put ''ZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLERyKCIgIixoLmxpYmRzLCIgIiksZmUoMiksTWUoIm5nSWYiLGguZmlsdGVyKSxmZSg2KSxNZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLnF1''@;'; put 'put ''ZXJ5RXJyKSxmZSg1KSx3cihoLnF1ZXJ5RXJyTWVzc2FnZSksZmUoNikscGkoImNsck1vZGFsT3BlbiIsaC5kaXNjYXJkU291cmNlRmlsZSksTWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSx3cihoLmZpbGVuYW1lKSxmZSg3KSxwaSgiY2xyTW9k''@;'; put 'put ''YWxPcGVuIixoLmZpbGVQYXNzd29yZE1vZGFsKSxNZSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDkpLE1lKCJuZ0lmIixoLmZpbGVVbmxvY2tFcnJvciksZmUoMyksTWUoImRpc2FibGVkIixmLnZhbHVlLmxlbmd0aDwxKSxmZSgyKSxwaSgiY2xyTW9k''@;'; put 'put ''YWxPcGVuIixoLm1hbnVhbEZpbGVFZGl0TW9kYWwpLE1lKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNiksd3IoaC5maWxlbmFtZSksZmUoNykscGkoIm9wZW4iLGguZGF0YXNldEluZm8pLE1lKCJkc21ldGEiLGguZHNtZXRhKSgidmVyc2lvbnMiLGgu''@;'; put 'put ''dmVyc2lvbnMpLGZlKCkscGkoInZpZXdib3hNb2RhbCIsaC52aWV3Ym94ZXMpfX0sZGVwZW5kZW5jaWVzOltJNmUsd3UsbnMsYmEscWwsYkwsbmwsJHMsYzEsSGwsb3UsS3UsajAsTDIsUDIsZHMsY0csRVplLGxHLFFMLHY3LHk3LGI3LERfLFN3LHRFLFI2ZSxMNmUsTzZlLHBPLFhlZSx1N3Qs''@;'; put 'put ''aDd0LGY3dCxGNmVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgczl0PVt7cGF0aDoiOmxpYk1lbSIsY29tcG9uZW50OmlOfSx7cGF0aDoiOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDppTn0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0iLGNvbXBvbmVudDpp''@;'; put 'put ''Tn0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6aU59XTtsZXQgbDl0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6Yy5mb3JDaGlsZChzOXQpLHpjXX0pfX1yZXR1cm4gY30pKCkseEE9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9k''@;'; put 'put ''PWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHowLFJhLFJjLG5mXX0pfX1yZXR1cm4gY30pKCksUWVlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6MCxSYSxSYyxHOSxNQSxuZl19KX19cmV0dXJuIGN9KSgpLE42ZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsejAsUmEsUmMsUWVlLG85LF8xZSxfNmUseEEsbmZdfSl9fXJldHVybiBjfSkoKTtuTigpO2xldCBjOXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W042ZSxSYSxSYyxsOXQsejAsbzkuZm9yUm9vdCgpLEc5LG5mLEN3LE1BLHhBLF8xZSxRZWVdfSl9fXJldHVy''@;'; put 'put ''biBjfSkoKSx1OXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltb''@;'; put 'put ''ImFwcC1ob21lLXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpO2NvbnN0IGQ5dD1bInNpZGViYXJOYXYiXSxoOXQ9WyIqIl0sZjl0PSgpPT5bIi92aWV3L3VzZXJuYXYvdXNlcnMiXSxwOXQ9KCk9PlsiL3ZpZXcvdXNlcm5hdi9ncm91cHMiXSxnOXQ9KCk9PlsiL3ZpZXcvdXNlcm5hdi9yb2xlcyJdO2Z1bmN0aW9uIG05dChjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1MbigpO2RlKDAsImEiLDE4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLm5hdmlnYXRlVG9WaWV3ZXIoKSl9KSxMZSgxLCJEYXRhIiksaGUoKX19ZnVuY3Rpb24gdjl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMTkpLExlKDEsIkFQSSBFeHBsb3JlciIp''@;'; put 'put ''LGhlKCkpfWZ1bmN0aW9uIGI5dChjLGwpezEmYyYmKGRlKDAsImEiLDIwKSxMZSgxLCJMaW5lYWdlIiksaGUoKSl9ZnVuY3Rpb24geTl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjEpLExlKDEsIk1ldGFkYXRhIiksaGUoKSl9ZnVuY3Rpb24gXzl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjIpLExl''@;'; put 'put ''KDEsIiBVc2VycyIpLGhlKCkpfWZ1bmN0aW9uIHc5dChjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxMZSgxLCJTdWJtaXR0ZWQiKSxoZSgpKX1mdW5jdGlvbiBDOXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyNCksTGUoMSwiVG8gQXBwcm92ZSIpLGhlKCkpfWZ1bmN0aW9uIFM5dChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsImNsci1kcm9wZG93bi1tZW51IiksZ3QoMSxtOXQsMiwwLCJhIiwxMSkoMix2OXQsMiwwLCJhIiwxMikoMyxiOXQsMiwwLCJhIiwxMykoNCx5OXQsMiwwLCJhIiwxNCkoNSxfOXQsMiwwLCJhIiwxNSkoNix3OXQsMiwwLCJhIiwxNikoNyxDOXQsMiwwLCJhIiwxNyksaGUoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSksZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTVklZQSI9PT1hLnNlcnZlclR5cGUpLGZlKCksTWUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzki''@;'; put 'put ''PT09YS5zZXJ2ZXJUeXBlKSxmZSgpLE1lKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksZmUoKSxNZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxmZSgpLE1lKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJhcHByb3ZlIikpLGZlKCksTWUo''@;'; put 'put ''Im5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSl9fWZ1bmN0aW9uIE05dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxMZSgzKSxHdCg0LCJjbHItaWNvbiIsOSksaGUoKSxndCg1LFM5dCw4LDcsImNsci1kcm9wZG93bi1t''@;'; put 'put ''ZW51IiwxMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSxEcigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19ZnVuY3Rpb24geDl0KGMsbCl7MSZjJiZHdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBFOXQoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1''@;'; put 'put ''bmN0aW9uIFQ5dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWIiKSgxLCJidXR0b24iLDI2KSgyLCJwIiwyNyksR3QoMywiY2xyLWljb24iLDMyKSxMZSg0LCIgUm9sZXMgIiksaGUoKSgpLGd0KDUsRTl0LDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMCksaGUoKSksMiZjKXtjb25zdCBhPVJl''@;'; put 'put ''KDIpO2ZlKCksTWUoInJvdXRlckxpbmsiLEdzKDIsZzl0KSksZmUoNCksTWUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L3JvbGVzIikpfX1mdW5jdGlvbiBBOXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFicyIsMjUpKDEsImNsci10YWIiKSgyLCJidXR0''@;'; put 'put ''b24iLDI2KSgzLCJwIiwyNyksR3QoNCwiY2xyLWljb24iLDI4KSxMZSg1LCIgVXNlcnMiKSxoZSgpKCksR3QoNiwiY2xyLXRhYi1jb250ZW50IiksaGUoKSxkZSg3LCJjbHItdGFiIikoOCwiYnV0dG9uIiwyNikoOSwicCIsMjcpLEd0KDEwLCJjbHItaWNvbiIsMjkpLExlKDExLCIgR3JvdXBz''@;'; put 'put ''IiksaGUoKSgpLGd0KDEyLHg5dCwxLDAsImNsci10YWItY29udGVudCIsMzApLGhlKCksZ3QoMTMsVDl0LDYsMywiY2xyLXRhYiIsMzEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDIpLE1lKCJyb3V0ZXJMaW5rIixHcyg0LGY5dCkpLGZlKDYpLE1lKCJyb3V0ZXJMaW5rIixHcyg1LHA5''@;'; put 'put ''dCkpLGZlKDQpLE1lKCJjbHJJZkFjdGl2ZSIsYS5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9ncm91cHMiKSksZmUoKSxNZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKX19ZnVuY3Rpb24gazl0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSgxLCJhIiwzMyks''@;'; put 'put ''TGUoMiwiVGFibGVzIiksaGUoKSxkZSgzLCJhIiwzNCksTGUoNCwiRXhjZWwgTWFwcyIpLGhlKCksZGUoNSwiYSIsMzUpLExlKDYsIk11bHRpIExvYWQiKSxoZSgpKCkpfWZ1bmN0aW9uIEQ5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9u''@;'; put 'put ''Iiw4KSxMZSgzKSxHdCg0LCJjbHItaWNvbiIsOSksaGUoKSxndCg1LGs5dCw3LDAsImNsci1kcm9wZG93bi1tZW51IiwxMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSxEcigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19bGV0IGk0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSxkLGgpe3RoaXMuX3JvdXRlcj1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5fc2FzU2VydmljZT1oLHRoaXMuc2Nyb2xsZWRUb0JvdHRvbT1uZXcgS3IsdGhpcy5zaWRlYmFyT3Blbj0hMCx0aGlzLnNpZGViYXJXaWR0aD1udWxsLHRoaXMuc2lkZWJhck1heFdpZHRoPW51bGwsdGhpcy5y''@;'; put 'put ''ZXNpemluZz0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5fc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCl9bmdPbkluaXQoKXt0aGlzLmV2''@;'; put 'put ''ZW50U2VydmljZS5vblNpZGViYXJUb2dnbGUuc3Vic2NyaWJlKGE9Pnt0aGlzLnNpZGViYXJPcGVuPWE/YS5vcGVuOiF0aGlzLnNpZGViYXJPcGVuLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSl9b25UcmVlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0O2Quc2Ny''@;'; put 'put ''b2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5zY3JvbGxlZFRvQm90dG9tLmVtaXQoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcyhhKX1nZXRTdWJQYWdlKCl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuc3BsaXQo''@;'; put 'put ''Ii8iKVsyXX1uYXZpZ2F0ZVRvVmlld2VyKCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249IiIsdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1yZXNpemVTdGFydCgpe3RoaXMucmVzaXppbmc9ITAsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHki''@;'; put 'put ''KVswXS5zdHlsZS5jc3NUZXh0PSJ1c2VyLXNlbGVjdDogbm9uZSJ9cmVzaXplRW5kKCl7dGhpcy5yZXNpemluZz0hMSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9IiJ9b25Nb3VzZU1vdmUoYSl7aWYodGhpcy5yZXNpemluZyl7dGhpcy5z''@;'; put 'put ''aWRlYmFyV2lkdGg9YS5jbGllbnRYO2xldCBkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm5hdi10cmVlIilbMF07dGhpcy5zaWRlYmFyV2lkdGgmJnRoaXMuaXNPdmVyZmxvd24oZCkmJih0aGlzLnNpZGViYXJNYXhXaWR0aD10aGlzLnNpZGViYXJXaWR0aD49Mzc1P3RoaXMu''@;'; put 'put ''c2lkZWJhcldpZHRoKzEwOnRoaXMuc2lkZWJhck1heFdpZHRoKX19b25Nb3VzZVVwKGEpe3RoaXMucmVzaXppbmcmJnRoaXMucmVzaXplRW5kKCl9aXNPdmVyZmxvd24oYSl7cmV0dXJuIGEuc2Nyb2xsV2lkdGg+YS5jbGllbnRXaWR0aH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''ZCl7cmV0dXJuIG5ldyhkfHxjKShHZShMcyksR2UodmMpLEdlKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2lkZWJhciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKGQ5dCw1KSwyJmQpe2xldCBmO0NpKGY9U2ko''@;'; put 'put ''KSkmJihoLnNpZGViYXJOYXY9Zi5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uTW91c2VNb3ZlKHYpfSwwLCQzKSgibW91c2V1cCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25Nb3VzZVVwKHYpfSwh''@;'; put 'put ''MSwkMyl9LG91dHB1dHM6e3Njcm9sbGVkVG9Cb3R0b206InNjcm9sbGVkVG9Cb3R0b20ifSxuZ0NvbnRlbnRTZWxlY3RvcnM6aDl0LGRlY2xzOjksdmFyczoxMyxjb25zdHM6W1sic2lkZWJhck5hdiIsIiJdLFsiaWQiLCJzaWRlYmFyTmF2Il0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQtY2VudGVyIHN1Yi1kcm9wZG93biIsNCwibmdJZiJdLFsiY2xhc3MiLCJwLTEwIiw0LCJuZ0lmIl0sWzEsIm5hdi1kaXZpZGVyIl0sWzEsIm5hdi10cmVlIiwzLCJzY3JvbGwiXSxbMSwicmVzaXplLWhhbmRsZSIsMywibW91c2Vkb3duIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29u''@;'; put 'put ''dGVudC1jZW50ZXIiLCJzdWItZHJvcGRvd24iXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiZHJvcGRvd24tdG9nZ2xlIiwiYnRuIiwiYnRuLXByaW1hcnkiXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFs0LCJjbHJJZk9wZW4iXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRl''@;'; put 'put ''ckxpbmtBY3RpdmUiLCJhY3RpdmUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsi''@;'; put 'put ''LCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxb''@;'; put 'put ''ImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJM''@;'; put 'put ''aW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRl''@;'; put 'put ''ckxpbmtBY3RpdmUiLCJhY3RpdmUiLDMsImNsaWNrIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwi''@;'; put 'put ''L3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsi''@;'; put 'put ''LCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIi''@;'; put 'put ''LCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbMSwicC0xMCJdLFsiY2xyVGFiTGluayIsIiIsMSwidXNlci1uYXYtYnRuIiwzLCJyb3V0ZXJMaW5rIl0sWzEsInplcm8tbWFyZ2luIl0sWyJzaGFwZSIsInVzZXIi''@;'; put 'put ''XSxbInNoYXBlIiwidXNlcnMiXSxbNCwiY2xySWZBY3RpdmUiXSxbNCwibmdJZiJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS90YWJsZXMiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0''@;'; put 'put ''aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL2hvbWUvZXhjZWwtbWFwcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9tdWx0aS1sb2FkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdXSx0''@;'; put 'put ''ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO3NhKCksZGUoMCwiY2xyLXZlcnRpY2FsLW5hdiIsMSwwKSxndCgyLE05dCw2LDEsImRpdiIsMikoMyxBOXQsMTQsNiwiY2xyLXRhYnMiLDMpKDQsRDl0LDYsMSwiZGl2IiwyKSxHdCg1LCJkaXYiLDQpLGRlKDYsImRp''@;'; put 'put ''diIsNSksRnQoInNjcm9sbCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25UcmVlU2Nyb2xsKE0pKX0pLFlyKDcpLGhlKCksZGUoOCwic3BhbiIsNiksRnQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNpemVTdGFydCgpKX0pLGhlKCkoKX0yJmQm''@;'; put 'put ''JihfZCgid2lkdGgiLGguc2lkZWJhcldpZHRoLCJweCIpKCJtYXgtd2lkdGgiLGguc2lkZWJhck1heFdpZHRoLCJweCIpLFRyKCJjbG9zZWQiLCFoLnNpZGViYXJPcGVuKSgicmVzaXppbmciLGgucmVzaXppbmcpLGZlKDIpLE1lKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJ2aWV3IikpLGZlKCks''@;'; put 'put ''TWUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXcvdXNlcm5hdiIpKSxmZSgpLE1lKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJob21lIikpLGZlKDQpLFRyKCJyZXNpemluZyIsaC5yZXNpemluZykpfSxkZXBlbmRlbmNpZXM6W2JhLEhsLEh5LEwyLF9tLENtLHg3LHdtLHltLFM3LFFZLHRHLHNn''@;'; put 'put ''LGc3LG03LGMxLHB5XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEk5dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEzKX1mdW5jdGlvbiBSOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIEw5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDgpKDEsImRpdiIsOSkoMiwiaW5w''@;'; put 'put ''dXQiLDEwLDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYubGlicmFyaWVzU2VhcmNoLGgpfHwoZi5saWJyYXJpZXNTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCku''@;'; put 'put ''bGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKSxndCg0LEk5dCwxLDAsImNsci1pY29uIiwxMSkoNSxSOXQsMSwwLCJjbHItaWNvbiIsMTIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksZmUoMiksTWUoIm5n''@;'; put 'put ''SWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBPOXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMyl9ZnVuY3Rpb24gUDl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDE0KSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7d3QoYSksUmUoKTtjb25zdCBoPWhhKDMpLGY9UmUoMikuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMiKSl9KSxoZSgpfX1mdW5jdGlvbiBGOXQoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw4KSgxLCJkaXYiLDkpKDIsImlucHV0IiwxOSwxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hT''@;'; put 'put ''dHJpbmc9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLGhlKCksZ3QoNCxPOXQsMSwwLCJjbHItaWNvbiIsMTEpKDUsUDl0LDEsMCwiY2xyLWljb24i''@;'; put 'put ''LDEyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoMikuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBI''@;'; put 'put ''OXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNil9ZnVuY3Rpb24gTjl0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIFY5dChjLGwpezEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI5KSgxLCJzcGFuIiksTGUoMiwiIFRvIHVubG9jayBhbGwgdGFi''@;'; put 'put ''bGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksaGUoKSgpKX1mdW5jdGlvbiBCOXQoYyxsKXsxJmMmJihzaSgwKSxndCgxLFY5dCwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxsaSgpKX1mdW5jdGlvbiBqOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtk''@;'; put 'put ''ZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLm5nVmFyLGY9UmUoKS4kaW1wbGljaXQsdj1SZSgyKS4kaW1wbGljaXQsTT1SZSgpO3JldHVybiBDdChoPyIiOk0ub25UYWJsZUNsaWNrKGYsdikpfSksc2koMiwyMiks''@;'; put 'put ''Z3QoMyxIOXQsMSwwLCJjbHItaWNvbiIsMjMpKDQsTjl0LDEsMCwiY2xyLWljb24iLDI0KSxsaSgpLExlKDUpLGhlKCksZ3QoNixCOXQsMiwwLCJuZy1jb250YWluZXIiLDI1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9UmUoKS4kaW1wbGljaXQsaD1SZSgyKS4kaW1wbGljaXQs''@;'; put 'put ''Zj1SZSgpO2ZlKCksVHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgiYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLGZlKCksTWUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwhMCksZmUoKSxNZSgibmdTd2l0Y2hDYXNl''@;'; put 'put ''IiwhMSksZmUoKSxEcigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpLGZlKCksTWUoIm5nSWYiLGEpfX1mdW5jdGlvbiB6OXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiksZ3QoMSxqOXQsNyw5LCJjbHItdG9vbHRpcCIsMjApLGhlKCkpLDImYyl7Y29uc3QgYT1sLmlu''@;'; put 'put ''ZGV4LGQ9UmUoMyk7ZmUoKSxNZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIFU5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiB2LnRyZWVOb2RlQ2xpY2tlZChoLGYpLEN0KHYubGliPWYuTElCUkFSWVJFRil9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIG1p''@;'; put 'put ''KGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0LGY9UmUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZUkVGLEN0KGYubGlicmFyeU9uQ2xpY2soaC5MSUJSQVJZ''@;'; put 'put ''UkVGLGgpKX0pLEd0KDIsImNsci1pY29uIiwxOCksTGUoMyksaGUoKSxndCg0LEY5dCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDUsejl0LDIsMSwiY2xyLXRyZWUtbm9kZSIsMyksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRl''@;'; put 'put ''ZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLERyKCIgIixhLkxJQlJBUllSRUYsIiAiKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlcyksZmUoKSxNZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5j''@;'; put 'put ''dGlvbiBaOXQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFU5dCw2LDcsImNsci10cmVlLW5vZGUiLDE1KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gVzl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzMCkoMSwiZGl2''@;'; put 'put ''IiwzMSkoMiwic3BhbiIsMzIpLExlKDMsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSgpKX1mdW5jdGlvbiBZOXQoYyxsKXsxJmMmJihkZSgwLCJwIiwzNiksTGUoMSwiIFBsZWFzZSBzZWxlY3QgYSB0YWJsZSAiKSxoZSgpKX1mdW5jdGlvbiBHOXQoYyxsKXsxJmMmJihkZSgwLCJwIiwzNiksTGUo''@;'; put 'put ''MSwiIE5vIEVkaXRhYmxlIFRhYmxlcyBDb25maWd1cmVkICIpLGhlKCkpfWZ1bmN0aW9uICQ5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzMpLEd0KDEsImltZyIsMzQpLGd0KDIsWTl0LDIsMCwicCIsMzUpKDMsRzl0LDIsMCwicCIsMzUpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2Zl''@;'; put 'put ''KDIpLE1lKCJuZ0lmIiwobnVsbD09YS50cmVlTm9kZUxpYnJhcmllcz9udWxsOmEudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKT4wKSxmZSgpLE1lKCJuZ0lmIiwobnVsbD09YS50cmVlTm9kZUxpYnJhcmllcz9udWxsOmEudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKTwxKX19bGV0IEs5dD0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLnJvdXRlPWEsdGhpcy5yb3V0ZXI9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5oZWxwZXJTZXJ2aWNlPWYsdGhpcy5ldmVudFNlcnZpY2U9dix0aGlzLnNhc1NlcnZpY2U9TSx0aGlzLnRyZWVOb2RlTGlicmFy''@;'; put 'put ''aWVzPW51bGwsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfWNvbGxhcHNlTGlicmFyeUl0''@;'; put 'put ''ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntoLkxJQlJBUllJRCE9PWQuTElCUkFSWUlEJiYoaC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxkKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGli''@;'; put 'put ''cmFyeU9uQ2xpY2soYSxkKXtkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQuZXhwYW5kZWQmJiF0aGlzLnRhYmxlJiZ0aGlzLnNlbGVjdExpYnJhcnkoYSwhMSxkKSx0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfXNlbGVjdExpYnJhcnkoYSxkLGgpe2gubG9hZGlu''@;'; put 'put ''Z1RhYmxlcz0hMDtsZXQgZix2PVtdO2lmKHRoaXMubGlic0FuZFRhYmxlcyYmKGY9dGhpcy5saWJzQW5kVGFibGVzW2FdLHRoaXMudGFibGU9dm9pZCAwLCJQbGVhc2Ugc2VsZWN0IGxpYnJhcnkiIT09YSkpe2xldCBNPWYuZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybi0xPT09di5pbmRleE9m''@;'; put 'put ''KEQpJiYodi5wdXNoKEQpLCEwKX0pO3RoaXMudGFibGVzPU0sS24uZWRpdG9yLmxpYnJhcmllcz10aGlzLmxpYnJhcmllc31Lbi5lZGl0b3IubGlicmFyeT1hLGR8fHRoaXMuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9ITB9c2VsZWN0VGFibGUo''@;'; put 'put ''YSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLmxpYlRhYj1oLmxpYisiLiIraC50YWJsZSxoLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxLbi5lZGl0b3IudGFibGU9YSxkfHxoLmNsZWFyR2xvYmFsc0ZpbHRlcigpfSkoKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtL''@;'; put 'put ''bi5lZGl0b3IuZmlsdGVyLmxpYmRzPSIiLEtuLmVkaXRvci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsS24uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiLEtuLmVkaXRvci5maWx0ZXIuY2xhdXNlcz1bXSxLbi5lZGl0b3IuZmlsdGVyLnZhbHM9W10sS24uZWRpdG9yLmZpbHRlci5jb2xzPVtd''@;'; put 'put ''fWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkmJmE9PT10aGlzLmxpYiYmZD09PXRoaXMudGFibGV9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy50cmVlTm9kZUxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWVJFRiIpLEtuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofW9uVGFibGVDbGljayhhLGQpe3RoaXMudGFibGU9YSx0aGlz''@;'; put 'put ''LmxpYj1kLkxJQlJBUllSRUYsdGhpcy5zZWxlY3RUYWJsZShhKSx0aGlzLmVkaXRUYWJsZSgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliKyIuIit0aGlzLnRhYmxlKX1nZXRMaWJyYXJ5VGFibGVTdGF0ZSgpe2lmKG51bGwhPT1Lbi5l''@;'; put 'put ''ZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMmJih0aGlzLnRyZWVOb2RlTGlicmFyaWVzPUtuLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcyksIiIhPT1Lbi5lZGl0b3IubGlicmFyeSl7dGhpcy5saWI9S24uZWRpdG9yLmxpYnJhcnk7bGV0IGE9bnVsbDt0aGlzLnRyZWVOb2RlTGlicmFyaWVzJiYo''@;'; put 'put ''YT10aGlzLnRyZWVOb2RlTGlicmFyaWVzLmZpbmQoZD0+ZC5MSUJSQVJZUkVGPT09dGhpcy5saWIpKSx0aGlzLnNlbGVjdExpYnJhcnkoS24uZWRpdG9yLmxpYnJhcnksITAsYSl9fWdldEZyb21HbG9iYWxzKCl7dGhpcy5saWJzQW5kVGFibGVzPUtuLmVkaXRvci5saWJzQW5kVGFibGVzLHRo''@;'; put 'put ''aXMubGlicmFyaWVzPUtuLmVkaXRvci5saWJyYXJpZXMsdGhpcy5nZXRMaWJyYXJ5VGFibGVTdGF0ZSgpLHRoaXMubG9hZGluZz0hMX1uZ0FmdGVyQ29udGVudEluaXQoKXtLbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFy''@;'; put 'put ''dHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShMcyksR2UoQ3UpLEdlKHUxKSxHZShTdSksR2UodmMpLEdlKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJob21lLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OCx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWyJjbGFzcyIsInNl''@;'; put 'put ''YXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZC1ibG9jayJdLFsiY2xhc3MiLCJzcGlubmVyLXdyYXBwZXItZnVsbHBhZ2UiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxb''@;'; put 'put ''MSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJhcHBTdGVhbEZvY3VzIiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIs''@;'; put 'put ''Im5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRl''@;'; put 'put ''ZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImFw''@;'; put 'put ''cFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwi''@;'; put 'put ''Y2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFwZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nSWYiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xy''@;'; put 'put ''UG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbMSwic3Bpbm5lci13cmFwcGVyLWZ1bGxwYWdlIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIi''@;'; put 'put ''XSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvc2VsZWN0LXRhYmxlLXBuZyIsImFsdCIsInNlbGVjdCB0YWJsZSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJd''@;'; put 'put ''LFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5IG10LTEwIiwiY2RzLXRleHQiLCJzZWN0aW9uIiw0LCJuZ0lmIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUo''@;'; put 'put ''MCwiYXBwLXNpZGViYXIiKSgxLCJjbHItdHJlZSIpLGd0KDIsTDl0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxaOXQsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpKDUsImRpdiIsNSksZ3QoNixXOXQsNCwwLCJkaXYiLDYpKDcsJDl0LDQsMiwiZGl2Iiw3KSxo''@;'; put 'put ''ZSgpKCkpLDImZCYmKGZlKDIpLE1lKCJuZ0lmIiwobnVsbD09aC50cmVlTm9kZUxpYnJhcmllcz9udWxsOmgudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKT4wKSxmZSgpLE1lKCJuZ0Zvck9mIixoLnRyZWVOb2RlTGlicmFyaWVzKSxmZSgzKSxNZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLE1l''@;'; put 'put ''KCJuZ0lmIiwhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbcWwsbmwsJHMsRWgsUGQsZmcsSGwsajAsTDIsWjEsdjcseTcsYjcsaTQsbnMsYmEsUzIsY3AsU3cscjRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgcTl0PWM9Pntmb3IoY29uc3QgbCBpbiBjKWlmKCJf''@;'; put 'put ''X3Jvd051bV9fIiE9PWwpcmV0dXJuITE7cmV0dXJuITB9LGV0ZT1jPT57Y29uc3QgYT1jLm1hdGNoKC9SXFsoXGQrKVxdQ1xbKFxkKylcXS8pO3JldHVybiBhP3tyb3c6cGFyc2VJbnQoYVsxXSwxMCksY29sdW1uOnBhcnNlSW50KGFbMl0sMTApfTpudWxsfSxWNmU9KGMsbCk9PntpZihjLnN0''@;'; put 'put ''YXJ0c1dpdGgoIkFCU09MVVRFICIpJiYoYz1jLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxjLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBhPWV0ZShjKTtpZihhKXtjb25zdHtyb3c6ZCxjb2x1bW46aH09YTtjPUR1LnV0aWxzLmVuY29kZV9jZWxsKHtyOmQtMSxjOmgtMX0pfX1p''@;'; put 'put ''ZihjLnN0YXJ0c1dpdGgoIk1BVENIICIpKXtsZXQgYT0iIjtjb25zdCBkPWMubWF0Y2goL0NcW1xkK1xdOiguKykvKTtkJiYoYT1kWzFdKTtjb25zdCBmPWMuc3BsaXQoIiAiKVsxXTtsZXQgdj0iIixNPS0xLEQ9IiI7aWYoaXNOYU4oTnVtYmVyKGYpKT92PWY6TT1wYXJzZUludChmKSwtMSE9''@;'; put 'put ''PU0pe2NvbnN0IGNlPWxbTS0xXTtmb3IoY29uc3QgYmUgaW4gY2UpaWYoIl9fcm93TnVtX18iIT09YmUmJmNlW2JlXT09PWEpe0Q9YmUrTTticmVha319ZWxzZSBmb3IobGV0IGNlPTA7Y2U8bC5sZW5ndGg7Y2UrKylpZihsW2NlXVt2XT09PWEpe0Q9disoY2UrMSk7YnJlYWt9Y29uc3QgWj1E''@;'; put 'put ''dS51dGlscy5kZWNvZGVfY2VsbChEKSxyZT1ldGUoYyk7aWYocmUpe2NvbnN0e3JvdzpjZSxjb2x1bW46YmV9PXJlO2M9RHUudXRpbHMuZW5jb2RlX2NlbGwoe3I6Wi5yK2NlLGM6Wi5jK2JlfSl9fXJldHVybiBjfSxKOXQ9WyJmaWxlVXBsb2FkSW5wdXQiXTtmdW5jdGlvbiBROXQoYyxsKXsx''@;'; put 'put ''JmMmJihkZSgwLCJkaXYiLDI4KSxHdCgxLCJjbHItc3Bpbm5lciIsMjkpLGhlKCkpfWZ1bmN0aW9uIGV2dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMwKX1mdW5jdGlvbiB0dnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzEpLEZ0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCk7cmV0dXJuIGguc2VhcmNoU3RyaW5nPSIiLEN0KGgueGxtYXBMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBudnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJjbHItdHJlZS1ub2RlIikoMiwiYnV0dG9uIiwz''@;'; put 'put ''MiksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnhsbWFwT25DbGljayhoKSl9KSxHdCgzLCJjbHItaWNvbiIsMzMpLExlKDQpLGhlKCkoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7ZmUoMiksVHIo''@;'; put 'put ''ImFjdGl2ZSIsZC5pc0FjdGl2ZVhMTWFwKGEuaWQpKSxmZSgyKSxEcigiICIsYS5pZCwiICIpfX1mdW5jdGlvbiBydnQoYyxsKXsxJmMmJihkZSgwLCJwIiwzNyksTGUoMSwiIFBsZWFzZSBzZWxlY3QgYSBtYXAgIiksaGUoKSl9ZnVuY3Rpb24gaXZ0KGMsbCl7MSZjJiYoZGUoMCwicCIsMzcp''@;'; put 'put ''LExlKDEsIiBObyBleGNlbCBtYXAgaXMgZm91bmQgIiksaGUoKSl9ZnVuY3Rpb24gYXZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNCksR3QoMSwiaW1nIiwzNSksZ3QoMixydnQsMiwwLCJwIiwzNikoMyxpdnQsMiwwLCJwIiwzNiksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiks''@;'; put 'put ''TWUoIm5nSWYiLGEueGxtYXBzLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0lmIixhLnhsbWFwcy5sZW5ndGg8MSl9fWZ1bmN0aW9uIG92dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzgpKDEsInNwYW4iLDM5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsImRpdiIpKDQsImg0Iiks''@;'; put 'put ''TGUoNSksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDUpLHdyKGEuaXNMb2FkaW5nRGVzYyl9fWZ1bmN0aW9uIHN2dChjLGwpezEmYyYmR3QoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gbHZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBj''@;'; put 'put ''dnQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIHV2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNDApLEZ0KCJmaWxlRHJhZ2dlZE92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25TaG93VXBsb2FkTW9kYWwoKSl9KSxkZSgxLCJjbHItdGFicyIp''@;'; put 'put ''KDIsImNsci10YWIiKSgzLCJidXR0b24iLDQxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLnNlbGVjdGVkVGFiPWguVGFic0VudW0uUnVsZXMpfSksTGUoNCwiUnVsZXMiKSxoZSgpLGd0KDUsc3Z0LDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0''@;'; put 'put ''MiksaGUoKSxkZSg2LCJjbHItdGFiIikoNywiYnV0dG9uIiw0MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKTtyZXR1cm4gQ3QoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVtLkRhdGEpfSksTGUoOCwiRGF0YSIpLGhlKCksZ3QoOSxsdnQsMSwwLCJjbHItdGFiLWNv''@;'; put 'put ''bnRlbnQiLDQyKSxoZSgpKCksZ3QoMTAsY3Z0LDEsMCwibmctY29udGFpbmVyIiw0MyksZGUoMTEsImRpdiIsNDQpKDEyLCJoMyIsNDUpLExlKDEzKSxoZSgpLGRlKDE0LCJpIiw0NSksTGUoMTUpLGhlKCksZGUoMTYsInAiLDQ1KSxMZSgxNywiIFJ1bGVzIFNvdXJjZTogIiksZGUoMTgsImEi''@;'; put 'put ''LDQ2KSxMZSgxOSksaGUoKSgpLGRlKDIwLCJwIiw0NSksTGUoMjEsIiBUYXJnZXQgZGF0YXNldDogIiksZGUoMjIsImEiLDQ2KSxMZSgyMyksaGUoKSgpKCksZGUoMjQsImRpdiIsNDcpLEd0KDI1LCJob3QtdGFibGUiLDQ4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCksZD1oYSg0MSk7''@;'; put 'put ''ZmUoNSksTWUoImNscklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcyksZmUoNCksTWUoImNscklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5EYXRhKSxmZSgpLE1lKCJuZ1RlbXBsYXRlT3V0bGV0IixkKSxmZSgzKSxEcigiICIsYS5zZWxlY3Rl''@;'; put 'put ''ZFhMTWFwLmlkLCIgIiksZmUoMiksd3IoYS5zZWxlY3RlZFhMTWFwLmRlc2NyaXB0aW9uKSxmZSgzKSxNZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnJ1bGVzU291cmNlKSxmZSgpLERyKCIgIixhLnJ1bGVzU291cmNlLCIgIiksZmUoMyksTWUoInJvdXRlckxpbmsiLCIvdmlldy9k''@;'; put 'put ''YXRhLyIrYS5zZWxlY3RlZFhMTWFwLnRhcmdldERTKSxmZSgpLERyKCIgIixhLnNlbGVjdGVkWExNYXAudGFyZ2V0RFMsIiAiKSxmZSgyKSxNZSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGEuc2VsZWN0ZWRUYWI9PT1h''@;'; put 'put ''LlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlczphLnhsRGF0YSkoImNvbEhlYWRlcnMiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlc0hlYWRlcnM6YS54bFVwbG9hZEhlYWRlcikoImNvbHVtbnMiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVz''@;'; put 'put ''P2EueGxtYXBSdWxlc0NvbHVtbnM6YS54bFVwbG9hZENvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImhlaWdodCIsIjEwMCUiKSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJtb2RpZnlDb2xXaWR0aCIsYS5tYXhXaWR0aENoZWNrZXIpKCJjZWxscyIsYS5nZXRDZWxs''@;'; put 'put ''Q29uZmlndXJhdGlvbikoIm1heFJvd3MiLGEuaG90VGFibGVNYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoInJvd0hlYWRlcnMiLGEucm93SGVhZGVycykoInJvd0hlYWRlcldpZHRoIiwxNSkoInJvd0hlaWdodHMiLDIwKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vuc2VL''@;'; put 'put ''ZXkpfX1mdW5jdGlvbiBkdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksR3QoMiwiY2xyLWljb24iLDUzKSxkZSgz''@;'; put 'put ''LCJzcGFuIiksTGUoNCwiVXBsb2FkIiksaGUoKSgpKCl9fWZ1bmN0aW9uIGh2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuc3VibWl0RXhjZWwoKSl9KSxH''@;'; put 'put ''dCgyLCJjbHItaWNvbiIsNTMpLGRlKDMsInNwYW4iKSxMZSg0LCJTdWJtaXQiKSxoZSgpKCkoKX19ZnVuY3Rpb24gZnZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChS''@;'; put 'put ''ZSgyKS5kaXNjYXJkRXh0cmFjdGVkRGF0YSgpKX0pLEd0KDIsImNsci1pY29uIiw1NSksZGUoMywic3BhbiIpLExlKDQsIkRpc2NhcmQiKSxoZSgpKCkoKX19ZnVuY3Rpb24gcHZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0OSksZ3QoMSxkdnQsNSwwLCJkaXYiLDUwKSgyLGh2dCw1LDAs''@;'; put 'put ''ImRpdiIsNTApKDMsZnZ0LDUsMCwiZGl2Iiw1MCksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1VwbG9hZCksZmUoKSxNZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCksZmUo''@;'; put 'put ''KSxNZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCl9fXZhciByZj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vTWFwU2VsZWN0ZWQ9MF09Ik5vTWFwU2VsZWN0ZWQiLGNbYy5GZXRjaGluZ1J1bGVzPTFdPSJGZXRjaGluZ1J1bGVzIixjW2MuUmVhZHlUb1Vw''@;'; put 'put ''bG9hZD0yXT0iUmVhZHlUb1VwbG9hZCIsY1tjLkV4dHJhY3RpbmdEYXRhPTNdPSJFeHRyYWN0aW5nRGF0YSIsY1tjLlJlYWR5VG9TdWJtaXQ9NF09IlJlYWR5VG9TdWJtaXQiLGNbYy5TdWJtaXR0aW5nRXh0cmFjdGVkRGF0YT01XT0iU3VibWl0dGluZ0V4dHJhY3RlZERhdGEiLGNbYy5TdWJt''@;'; put 'put ''aXR0aW5nPTZdPSJTdWJtaXR0aW5nIixjfShyZnx8e30pLE13PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUnVsZXM9MF09IlJ1bGVzIixjW2MuRGF0YT0xXT0iRGF0YSIsY30oTXd8fHt9KTtsZXQgQjZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5ldmVu''@;'; put 'put ''dFNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yb3V0ZT1mLHRoaXMucm91dGVyPXYsdGhpcy5zYXNTdG9yZVNlcnZpY2U9TSx0aGlzLnNhc1NlcnZpY2U9RCx0aGlzLmNvbnRlbnRDb250YWluZXJDbGFzcz0hMCx0aGlzLmZpbGVVcGxv''@;'; put 'put ''YWRJbnB1dENvbXBMaXN0PW5ldyBmZCx0aGlzLlN0YXR1c0VudW09cmYsdGhpcy5UYWJzRW51bT1Ndyx0aGlzLnNlbGVjdGVkVGFiPU13LlJ1bGVzLHRoaXMucnVsZXNTb3VyY2U9S24uZGNMaWIrIi5NUEVfWExNQVBfUlVMRVMiLHRoaXMueGxtYXBzPVtdLHRoaXMuc2VsZWN0ZWRYTE1hcD12''@;'; put 'put ''b2lkIDAsdGhpcy5zZWFyY2hTdHJpbmc9IiIsdGhpcy54bG1hcHNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz1yZi5Ob01hcFNlbGVjdGVkLHRoaXMueGxtYXBSdWxlc0hlYWRlcnM9WyJYTE1BUF9TSEVFVCIsIlhMTUFQX1JB''@;'; put 'put ''TkdFX0lEIiwiWExNQVBfU1RBUlQiLCJYTE1BUF9GSU5JU0giXSx0aGlzLnhsbWFwUnVsZXNDb2x1bW5zPVt7ZGF0YToiWExNQVBfU0hFRVQifSx7ZGF0YToiWExNQVBfUkFOR0VfSUQifSx7ZGF0YToiWExNQVBfU1RBUlQifSx7ZGF0YToiWExNQVBfRklOSVNIIn1dLHRoaXMueGxtYXBSdWxl''@;'; put 'put ''cz1bXSx0aGlzLnhsVXBsb2FkSGVhZGVyPVsiWExNQVBfUkFOR0VfSUQiLCJST1dfTk8iLCJDT0xfTk8iLCJWQUxVRV9UWFQiXSx0aGlzLnhsVXBsb2FkQ29sdW1ucz1be2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlJPV19OTyJ9LHtkYXRhOiJDT0xfTk8ifSx7ZGF0YToiVkFMVUVf''@;'; put 'put ''VFhUIn1dLHRoaXMueGxEYXRhPVtdLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj0hMSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy51cGxvYWRlcj1uZXcgUGVlLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGlj''@;'; put 'put ''ZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGVMaWNlbnNlS2V5PXZvaWQgMCx0aGlzLmhvdFRhYmxlTWF4Um93cz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzB9YWZ0ZXJHZXRDb2xIZWFkZXIoYSxkKXtkLmNsYXNzTGlzdC5hZGQo''@;'; put 'put ''S24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX14bG1hcE9uQ2xpY2soYSl7YS5pZCE9PXRoaXMuc2VsZWN0ZWRYTE1hcD8uaWQmJih0aGlzLnNlbGVjdGVkWExNYXA9YSx0aGlzLnhsRGF0YT1bXSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhp''@;'; put 'put ''cy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy5zZWxlY3RlZFRhYj1Ndy5SdWxlcyx0aGlzLnZpZXdYTE1hcFJ1bGVzKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVy''@;'; put 'put ''bCgiL2hvbWUvZXhjZWwtbWFwcy8iK2EuaWQpKX14bG1hcExpc3RPbkZpbHRlcigpe3RoaXMueGxtYXBzPXRoaXMuc2VhcmNoU3RyaW5nLmxlbmd0aD4wP0tuLnhsbWFwcy5maWx0ZXIoZD0+ZC5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkpKTpLbi54bG1hcHN9aXNBY3RpdmVYTE1hcChhKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFhMTWFwPy5pZD09PWF9bWF4V2lkdGhDaGVja2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfWdldENlbGxDb25maWd1cmF0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX1yb3dIZWFkZXJzKCl7cmV0''@;'; put 'put ''dXJuIiAifW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITB9ZmlsZU92ZXJCYXNlKGEpe3RoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj1hfWdldEZpbGVEZXNjKGEsZD0hMSl7dmFyIGg9dGhpcztjb25zdCBmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTtpZighZily''@;'; put 'put ''ZXR1cm47Y29uc3Qgdj1mLm5hbWU7aWYodGhpcy5maWxlbmFtZT12LCJ4bHMiPT09di5zbGljZSh2Lmxhc3RJbmRleE9mKCIuIikrMSx2Lmxhc3RJbmRleE9mKCIuIikrNCkudG9Mb3dlckNhc2UoKSl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5pc0xv''@;'; put 'put ''YWRpbmdEZXNjPSJFeHRyYWN0aW5nIERhdGEiLHRoaXMuc3RhdHVzPXJmLkV4dHJhY3RpbmdEYXRhO2NvbnN0IEQ9bmV3IEZpbGVSZWFkZXI7RC5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgWj1lZShmdW5jdGlvbioocmUpe2NvbnN0IGNlPShjPT57Y29uc3QgbD1uZXcgVWludDhBcnJheShjKTts''@;'; put 'put ''ZXQgYT0iIjtjb25zdCBkPWwuYnl0ZUxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKWErPVN0cmluZy5mcm9tQ2hhckNvZGUobFtoXSk7cmV0dXJuIGF9KShyZS50YXJnZXQucmVzdWx0KTtsZXQgYmU7Y29uc3QgRWU9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEw''@;'; put 'put ''LGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7YmU9RHUucmVhZChjZSx7Li4uRWV9KX1jYXRjaChCZSl7aC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxCZSx2b2lkIDAsIkVycm9yIHJlYWRpbmcgZmlsZSIpfWlmKCFiZSlyZXR1cm4gaC5pc0xvYWRp''@;'; put 'put ''bmc9ITEsaC5pc0xvYWRpbmdEZXNjPSIiLGguc3RhdHVzPXJmLlJlYWR5VG9VcGxvYWQsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpO2guZXh0cmFjdERhdGEoYmUpfSk7cmV0dXJuIGZ1bmN0aW9uKHJlKXtyZXR1cm4gWi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLEQucmVhZEFzQXJy''@;'; put 'put ''YXlCdWZmZXIoZil9ZWxzZSB0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9cmYuUmVhZHlUb1VwbG9hZCx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMCx0aGlzLnVwbG9hZGVyLnF1ZXVlLnBvcCgpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1v''@;'; put 'put ''ZGFsKG51bGwsJ0ludmFsaWQgZmlsZSB0eXBlICI8Yj4nK3RoaXMuZmlsZW5hbWUrJzwvYj4iLiBQbGVhc2UgdXBsb2FkIGV4Y2VsIGZpbGUuJyl9ZGlzY2FyZEV4dHJhY3RlZERhdGEoKXt0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9cmYuUmVh''@;'; put 'put ''ZHlUb1VwbG9hZCx0aGlzLnhsRGF0YT1bXSx0aGlzLnNlbGVjdGVkVGFiPU13LlJ1bGVzLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5u''@;'; put 'put ''YXRpdmVFbGVtZW50LnZhbHVlPSIiKX1zdWJtaXRFeGNlbCgpe3RoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PT09MS8wP3RoaXMuc3VibWl0KCk6dGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMH1zdWJtaXQoKXtpZighdGhpcy5zZWxlY3RlZFhMTWFwfHwhdGhpcy54''@;'; put 'put ''bERhdGEubGVuZ3RoKXJldHVybjt0aGlzLnN0YXR1cz1yZi5TdWJtaXR0aW5nLHRoaXMuaXNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nRGVzYz0iU3VibWl0dGluZyBleHRyYWN0ZWQgZGF0YSI7Y29uc3QgYT1bXTtmb3IoY29uc3QgTSBvZiB0aGlzLnVwbG9hZGVyLnF1ZXVlKWEucHVzaCh7''@;'; put 'put ''ZmlsZTpNLGZpbGVOYW1lOk0ubmFtZX0pO2NvbnN0IGQ9T2JqZWN0LmtleXModGhpcy54bERhdGFbMF0pLmpvaW4oIiwiKSsiXG4iK3RoaXMueGxEYXRhLnNsaWNlKDAsdGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpLm1hcChNPT5PYmplY3QudmFsdWVzKE0pLmpv''@;'; put 'put ''aW4oIiwiKSkuam9pbigiXG4iKSxoPW5ldyBCbG9iKFtkXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pLGY9cWVlKGgsdGhpcy5maWxlbmFtZSsiLmNzdiIpO2EucHVzaCh7ZmlsZTpmLGZpbGVOYW1lOmYubmFtZX0pLHRoaXMuc2FzU2VydmljZS51cGxvYWRGaWxlKCJzZXJ2aWNlcy9lZGl0''@;'; put 'put ''b3JzL2xvYWRmaWxlIixhLHt0YWJsZTp0aGlzLnNlbGVjdGVkWExNYXAudGFyZ2V0RFN9KS50aGVuKE09PntpZihNLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0KXtjb25zdCBEPU0uYWRhcHRlclJlc3BvbnNlO3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLEQuc2FzanNB''@;'; put 'put ''Ym9ydFswXS5NU0cse1NZU1dBUk5JTkdURVhUOkQuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOkQuU1lTRVJST1JURVhULE1BQzpELnNhc2pzQWJvcnRbMF0uTUFDfSl9ZWxzZSBNLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXMmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFn''@;'; put 'put ''ZS8iK00uYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtc1swXS5EU0lEKX0pLmNhdGNoKE09Pnt0aGlzLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImZpbGUgdXBsb2FkIixNLnJlc3BvbnNlKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnN0YXR1cz1yZi5SZWFkeVRvU3VibWl0LHRoaXMu''@;'; put 'put ''aXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIn0pfWV4dHJhY3REYXRhKGEpe2NvbnN0IGQ9W107dGhpcy54bG1hcFJ1bGVzLmZvckVhY2goaD0+e2xldCBmPWguWExNQVBfU0hFRVQ7aWYoZi5zdGFydHNXaXRoKCIvIikpe2NvbnN0IEVlPWYuc3BsaXQoIi8iKVsxXSxCZT1wYXJz''@;'; put 'put ''ZUludChFZSktMTtmPWEuU2hlZXROYW1lc1tCZV19Y29uc3Qgdj1hLlNoZWV0c1tmXSxNPUR1LnV0aWxzLnNoZWV0X3RvX2pzb24odix7cmF3OiEwLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSksRD1WNmUoaC5YTE1BUF9TVEFSVCxNKSxaPSgoYyxsLGEpPT57aWYoIiI9PT1sKXJldHVybiBj''@;'; put 'put ''O2lmKGwuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihsPWwucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLGwuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGQ9ZXRlKGwpO2lmKGQpe2NvbnN0e3JvdzpoLGNvbHVtbjpmfT1kLHtyOnYsYzpNfT1EdS51dGlscy5kZWNvZGVfY2VsbChj''@;'; put 'put ''KTtsPUR1LnV0aWxzLmVuY29kZV9jZWxsKHtyOnYraCxjOk0rZn0pfX1pZihsLnN0YXJ0c1dpdGgoIk1BVENIICIpJiYobD1WNmUobCxhKSksIkxBU1RET1dOIj09PWwpe2NvbnN0e3I6ZCxjOmh9PUR1LnV0aWxzLmRlY29kZV9jZWxsKGMpLGY9RHUudXRpbHMuZW5jb2RlX2NvbChoKTtsZXQg''@;'; put 'put ''dj1kO2ZvcihsZXQgTT1kKzE7TTxhLmxlbmd0aCYmYVtNXVtmXTtNKyspdj1NO2w9ZisodisxKX1pZigiQkxBTktST1ciPT09bCl7Y29uc3R7cjpkfT1EdS51dGlscy5kZWNvZGVfY2VsbChjKTtsZXQgaD1kO2ZvcihsZXQgRD1kKzE7RDxhLmxlbmd0aCYmIXE5dChhW0RdKTtEKyspaD1EO2w9''@;'; put 'put ''T2JqZWN0LmtleXMoYVtoXSkuZmlsdGVyKEQ9PiJfX3Jvd051bV9fIiE9PUQpLnJlZHVjZSgoRCxaKT0+Wj5EP1o6RCwiIikrKGgrMSl9cmV0dXJuIGx9KShELGguWExNQVBfRklOSVNILE0pLHJlPWAke0R9OiR7Wn1gLGNlPUR1LnV0aWxzLmRlY29kZV9yYW5nZShyZSksYmU9RHUudXRpbHMu''@;'; put 'put ''c2hlZXRfdG9fanNvbih2LHtyYXc6ITAscmFuZ2U6cmUsaGVhZGVyOiJBIixibGFua3Jvd3M6ITB9KTtmb3IobGV0IEVlPTA7RWU8YmUubGVuZ3RoO0VlKyspe2NvbnN0IEJlPWJlW0VlXTtmb3IobGV0IHFlPWNlLnMuYyxydD0wO3FlPD1jZS5lLmM7cWUrKyxydCsrKXtjb25zdCBwdD1EdS51''@;'; put 'put ''dGlscy5lbmNvZGVfY29sKHFlKTtwdCBpbiBCZSYmZC5wdXNoKHtMT0FEX1JFRjoiMCIsWExNQVBfSUQ6aC5YTE1BUF9JRCxYTE1BUF9SQU5HRV9JRDpoLlhMTUFQX1JBTkdFX0lELFJPV19OTzpFZSsxLENPTF9OTzpydCsxLFZBTFVFX1RYVDpCZVtwdF19KX19fSksdGhpcy5zdGF0dXM9cmYu''@;'; put 'put ''UmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy54bERhdGE9ZCx0aGlzLnNlbGVjdGVkVGFiPU13LkRhdGF9dmlld1hMTWFwUnVsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnNlbGVjdGVkWExNYXAmJihhLmlz''@;'; put 'put ''TG9hZGluZz0hMCxhLmlzTG9hZGluZ0Rlc2M9IkxvYWRpbmcgZXhjZWwgcnVsZXMiLGEuc3RhdHVzPXJmLkZldGNoaW5nUnVsZXMseWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0WExNYXBSdWxlcyhhLnNlbGVjdGVkWExNYXAuaWQpLnRoZW4oZD0+e2EueGxtYXBSdWxlcz1kLnhsbWFwcnVs''@;'; put 'put ''ZXMsYS5zdGF0dXM9cmYuUmVhZHlUb1VwbG9hZH0pLmNhdGNoKGQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KSxhLmlzTG9hZGluZz0hMSxhLmlzTG9hZGluZ0Rlc2M9IiIpfSkoKX1sb2FkKCl7dGhpcy54bG1hcHM9S24ueGxtYXBzLHRoaXMueGxtYXBzTG9hZGluZz0hMTtjb25zdCBh''@;'; put 'put ''PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmlkO2lmKGEpe2NvbnN0IGQ9dGhpcy54bG1hcHMuZmluZChoPT5oLmlkPT09YSk7ZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1kLHRoaXMudmlld1hMTWFwUnVsZXMoKSl9fW5nT25Jbml0KCl7dGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5z''@;'; put 'put ''ZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlTGljZW5zZUtleT1hfSl9bmdBZnRlclZpZXdJbml0KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe0tuLmVkaXRvci5zdGFydHVwU2V0P3RoaXMubG9hZCgpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2Ny''@;'; put 'put ''aWJlKCgpPT57dGhpcy5sb2FkKCl9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh2YyksR2UodTEpLEdlKFNkKSxHZShDdSksR2UoTHMpLEdlKGtoKSxHZShCcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siYXBwLXhsbWFwIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoSjl0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9Zil9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIoImNv''@;'; put 'put ''bnRlbnQtY29udGFpbmVyIixoLmNvbnRlbnRDb250YWluZXJDbGFzcyl9LGRlY2xzOjQyLHZhcnM6MTYsY29uc3RzOltbInNlYXJjaFhMTWFwVHJlZUlucHV0IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbImFjdGlvbkJ1dHRvbnMiLCIiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0''@;'; put 'put ''ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBJZCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIs''@;'; put 'put ''MywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibm8tdGFibGUtc2Vs''@;'; put 'put ''ZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiLDQsIm5nSWYiXSxbImFwcEZpbGVEcm9wIiwiIiwx''@;'; put 'put ''LCJyZWxhdGl2ZSIsMywiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5nZSIsInVwbG9hZGVyIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwi''@;'; put 'put ''bW9kYWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIs''@;'; put 'put ''InctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hhbmdlIiwi''@;'; put 'put ''dXBsb2FkZXIiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm0tMCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1j''@;'; put 'put ''ZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWxlIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTU3RvcmVk''@;'; put 'put ''UHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVjdC10YWJsZS1wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSBtdC0xMCIsImNk''@;'; put 'put ''cy10ZXh0Iiwic2VjdGlvbiIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJoLTEwMCIsImQtZmxl''@;'; put 'put ''eCIsImNsci1mbGV4LWNvbHVtbiIsMywiZmlsZURyYWdnZWRPdmVyIl0sWyJjbHJUYWJMaW5rIiwiIiwzLCJjbGljayJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsImNsci1yb3ciLCJtLTAiLCJtYi0xMC1pIiwidmlld2VyVGl0bGUiXSxbMSwiZC1mbGV4''@;'; put 'put ''IiwiY2xyLWNvbC0xMiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtNS1pIl0sWyJjZHMtdGV4dCIsImxhYmVsTGluayIsMSwibWwtMTAiLDMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90LXRhYmxlIiwiY2xh''@;'; put 'put ''c3NOYW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImhlaWdodCIsImFmdGVyR2V0Q29sSGVhZGVyIiwibW9kaWZ5Q29s''@;'; put 'put ''V2lkdGgiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJyb3dIZWFkZXJzIiwicm93SGVhZGVyV2lkdGgiLCJyb3dIZWlnaHRzIiwibGljZW5zZUtleSJdLFsxLCJjbHItcm93IiwibS0wIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiZC1m''@;'; put 'put ''bGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGNsci1jb2wtMTIgY2xyLWNvbC1sZy00Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRu''@;'; put 'put ''LXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lLWRhbmdlciIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRp''@;'; put 'put ''bWVzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiYXBwLXNpZGViYXIiKSxndCgxLFE5dCwyLDAsImRpdiIsMyksZGUoMiwiY2xyLXRyZWUiKSgzLCJjbHItdHJlZS1ub2RlIiw0KSg0LCJkaXYiLDUpKDUsImlucHV0Iiw2LDApLGdpKCJuZ01v''@;'; put 'put ''ZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zZWFyY2hTdHJpbmcsTSl8fChoLnNlYXJjaFN0cmluZz1NKSxDdChNKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC54bG1hcExpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNyxldnQsMSww''@;'; put 'put ''LCJjbHItaWNvbiIsNykoOCx0dnQsMSwwLCJjbHItaWNvbiIsOCksaGUoKSgpLGd0KDksbnZ0LDUsMywibmctY29udGFpbmVyIiw5KSxoZSgpKCksZGUoMTAsImRpdiIsMTApLGd0KDExLGF2dCw0LDIsImRpdiIsMTEpKDEyLG92dCw2LDEsImRpdiIsMTIpKDEzLHV2dCwyNiwyNSwiZGl2Iiwx''@;'; put 'put ''MyksZGUoMTQsImNsci1tb2RhbCIsMTQpLEZ0KCJmaWxlT3ZlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZmlsZU92ZXJCYXNlKE0pKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZ2V0RmlsZURlc2MoTSwhMCkpfSksZ2koImNsck1vZGFsT3Bl''@;'; put 'put ''bkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguc2hvd1VwbG9hZE1vZGFsLE0pfHwoaC5zaG93VXBsb2FkTW9kYWw9TSksQ3QoTSl9KSxkZSgxNSwiaDMiLDE1KSxMZSgxNiwiVXBsb2FkIEZpbGUiKSxoZSgpLGRlKDE3LCJkaXYiLDE2KSgxOCwiZGl2IiwxNykoMTksInNw''@;'; put 'put ''YW4iKSxMZSgyMCwiRHJvcCBmaWxlIGFueXdoZXJlIHRvIHVwbG9hZCEiKSxoZSgpKCksZGUoMjEsImRpdiIsMTgpKDIyLCJkaXYiLDE5KSgyMywiZGl2IiwyMCkoMjQsInNwYW4iLDIxKSgyNSwibGFiZWwiLDIyKSxMZSgyNiwiIEJyb3dzZSAiKSxoZSgpKCksZGUoMjcsImlucHV0IiwyMywx''@;'; put 'put ''KSxGdCgiY2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5nZXRGaWxlRGVzYyhNKSl9KSxoZSgpKCkoKSgpKCkoKSxkZSgyOSwiY2xyLW1vZGFsIiwyNCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguc3VibWl0TGltaXRO''@;'; put 'put ''b3RpY2UsTSl8fChoLnN1Ym1pdExpbWl0Tm90aWNlPU0pLEN0KE0pfSksZGUoMzAsImgzIiwxNSksTGUoMzEsIk5vdGljZSIpLGhlKCksZGUoMzIsImRpdiIsMTYpKDMzLCJwIiwyNSksTGUoMzQpLGhlKCkoKSxkZSgzNSwiZGl2IiwyNikoMzYsImJ1dHRvbiIsMjcpLEZ0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxMZSgzNywiIENhbmNlbCAiKSxoZSgpLGRlKDM4LCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguc3VibWl0KCksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9''@;'; put 'put ''KSxMZSgzOSwiIFN1Ym1pdCAiKSxoZSgpKCkoKSgpLGd0KDQwLHB2dCw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIsSWMpfWlmKDImZCl7Y29uc3QgZj1oYSg2KTtmZSgpLE1lKCJuZ0lmIixoLnhsbWFwc0xvYWRpbmcpLGZlKDQpLHBpKCJuZ01vZGVsIixoLnNlYXJjaFN0cmluZyksZmUoMiks''@;'; put 'put ''TWUoIm5nSWYiLGYudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGYudmFsdWUubGVuZ3RoPjApLGZlKCksTWUoIm5nRm9yT2YiLGgueGxtYXBzKSxmZSgyKSxNZSgibmdJZiIsIWguc2VsZWN0ZWRYTE1hcCksZmUoKSxNZSgibmdJZiIsaC5pc0xvYWRpbmcpLGZlKCksTWUoIm5nSWYi''@;'; put 'put ''LCFoLmlzTG9hZGluZyYmaC5zZWxlY3RlZFhMTWFwKSxmZSgpLE1lKCJ1cGxvYWRlciIsaC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLHBpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1VwbG9h''@;'; put 'put ''ZE1vZGFsKSxmZSgxMyksTWUoInVwbG9hZGVyIixoLnVwbG9hZGVyKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLnN1Ym1pdExpbWl0Tm90aWNlKSxmZSg1KSxEcigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1p''@;'; put 'put ''dCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIil9fSxkZXBlbmRlbmNpZXM6W0RfLGMxLHFsLG5sLCRzLEVoLFBkLGZnLEhsLG91LEt1LEh5LGRzLFoxLF9tLENt''@;'; put 'put ''LHg3LHdtLHltLFM3LFJkLGk0LG5zLGJhLE4xLHRFLFI2ZSxMNmUscjRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZ3Z0PVt7cGF0aDoiIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14bG1hcC1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxjaGlsZHJlbjpbe3BhdGg6IiIsY29tcG9uZW50OkI2ZX0se3BhdGg6IjppZCIsY29tcG9uZW50OkI2ZX1dfV07bGV0''@;'; put 'put ''IG12dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQoZ3Z0KSx6Y119KX19''@;'; put 'put ''cmV0dXJuIGN9KSgpO25OKCk7bGV0IHZ2dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbbzks''@;'; put 'put ''bXZ0LFJjLHowLEc5LFJhLHhBLG5mXX0pfX1yZXR1cm4gY30pKCksYnZ0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbXVsdGktZGF0YXNldC1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5k''@;'; put 'put ''ZW5jaWVzOltyZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCB5dnQ9KGMsbCxhKT0+e2wuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfSxfdnQ9WyJjb250ZW50QXJlYSJdLHd2dD0oKT0+WyJodERhcmsiLCJodEN1c3Rv''@;'; put 'put ''bUhpZGRlbiJdO2Z1bmN0aW9uIEN2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjQpLEd0KDEsImNsci1zcGlubmVyIiwyMiksaGUoKSl9ZnVuY3Rpb24gU3Z0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNSkoMSwiYnV0dG9uIiwyNiksRnQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB3dChhKSxDdChoYSg0KS5jbGljaygpKX0pLExlKDIsIiBCcm93c2UgZmlsZSAiKSxoZSgpLGRlKDMsImlucHV0IiwyNywxKSxGdCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkZpbGVDaGFuZ2UoaCkpfSksaGUoKSgpfWlmKDImYyl7Y29u''@;'; put 'put ''c3QgYT1SZSgpO2ZlKCksTWUoImRpc2FibGVkIixudWxsIT09YS5zZWxlY3RlZEZpbGV8fGEuc3VibWl0dGluZ0Nzdil9fWZ1bmN0aW9uIE12dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjUpKDEsImJ1dHRvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoUmUoMikub25EaXNjYXJkKCkpfSksTGUoMiwiIERpc2NhcmQgIiksaGUoKSxkZSgzLCJidXR0b24iLDMxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9uU3VibWl0QWxsKCkpfSksTGUoNCwiIFN1Ym1pdCBBbGwgIiksaGUoKSgpfX1m''@;'; put 'put ''dW5jdGlvbiB4dnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNil9ZnVuY3Rpb24gRXZ0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzcpfWZ1bmN0aW9uIFR2dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEseHZ0LDEsMCwiY2RzLWljb24iLDM0KSgyLEV2dCwxLDAsImNkcy1pY29u''@;'; put 'put ''IiwzNSksbGkoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLGEuc3VibWl0UmVzdWx0LmVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLnN1Ym1pdFJlc3VsdC5zdWNjZXNzKX19ZnVuY3Rpb24gQXZ0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzYpfWZ1bmN0''@;'; put 'put ''aW9uIGt2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM5KX1mdW5jdGlvbiBEdnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLEF2dCwxLDAsImNkcy1pY29uIiwzNCkoMixrdnQsMSwwLCJjZHMtaWNvbiIsMzgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKS4kaW1wbGljaXQ7ZmUoKSxN''@;'; put 'put ''ZSgibmdJZiIsIShhLmRhdGFzb3VyY2UubGVuZ3RoJiZhLnBhcnNlUmVzdWx0KSksZmUoKSxNZSgibmdJZiIsYS5kYXRhc291cmNlLmxlbmd0aCYmYS5wYXJzZVJlc3VsdCl9fWZ1bmN0aW9uIEl2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM5KX1mdW5jdGlvbiBSdnQoYyxsKXsxJmMm''@;'; put 'put ''Jkd0KDAsImNsci1zcGlubmVyIiw0MSl9ZnVuY3Rpb24gTHZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxJdnQsMSwwLCJjZHMtaWNvbiIsMzgpKDIsUnZ0LDEsMCwiY2xyLXNwaW5uZXIiLDQwKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoMikuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFh''@;'; put 'put ''LnBhcnNpbmdUYWJsZSksZmUoKSxNZSgibmdJZiIsYS5wYXJzaW5nVGFibGUpfX1mdW5jdGlvbiBPdnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLER2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoMixMdnQsMywyLCJuZy1jb250YWluZXIiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRp''@;'; put 'put ''bXBsaWNpdDtmZSgpLE1lKCJuZ0lmIixhLmRhdGFzb3VyY2UpLGZlKCksTWUoIm5nSWYiLCFhLmRhdGFzb3VyY2UpfX1mdW5jdGlvbiBQdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSgyKS5vblBhcnNlZERhdGFzZXRDbGljayhoKSl9KSxndCgyLFR2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoMyxPdnQsMywyLCJuZy1jb250YWluZXIiLDQpLGRlKDQsInNwYW4iLDMzKSxMZSg1KSxoZSgpKCkoKX1pZigyJmMp''@;'; put 'put ''e2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxUcigiYWN0aXZlIixhLmFjdGl2ZSksZmUoKSxNZSgibmdJZiIsYS5zdWJtaXRSZXN1bHQpLGZlKCksTWUoIm5nSWYiLCFhLnN1Ym1pdFJlc3VsdCksZmUoMiksRHIoIiAiLGEubGliZHMsIiAiKX19ZnVuY3Rpb24gRnZ0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''c2koMCksZ3QoMSxNdnQsNSwwLCJkaXYiLDMpLGRlKDIsInAiLDI4KSxMZSgzLCJGb3VuZCB0YWJsZXM6IiksaGUoKSxkZSg0LCJjbHItdHJlZSIpLGd0KDUsUHZ0LDYsNSwiY2xyLXRyZWUtbm9kZSIsMjkpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsIWEu''@;'; put 'put ''ZXhjZWxzU3VibWl0dGVkKSxmZSg0KSxNZSgibmdGb3JPZiIsYS5wYXJzZWREYXRhc2V0cyl9fWZ1bmN0aW9uIEh2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM2KX1mdW5jdGlvbiBOdnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNyl9ZnVuY3Rpb24gVnZ0KGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsNDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikub25TdWJtaXR0ZWRDc3ZEYXRhc2V0Q2xpY2soaCkpfSksZ3QoMixIdnQsMSwwLCJjZHMt''@;'; put 'put ''aWNvbiIsMzQpKDMsTnZ0LDEsMCwiY2RzLWljb24iLDM1KSxHdCg0LCJjZHMtaWNvbiIsMzkpLExlKDUpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxUcigiYWN0aXZlIixhLmFjdGl2ZSksZmUoKSxNZSgibmdJZiIsYS5lcnJvciksZmUoKSxNZSgibmdJZiIsYS5z''@;'; put 'put ''dWNjZXNzKSxmZSgyKSxEcigiICIsYS5saWJkcywiICIpfX1mdW5jdGlvbiBCdnQoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJwIiw0MiksTGUoMiwiU3VibWl0dGVkIHRhYmxlczoiKSxoZSgpLGRlKDMsImNsci10cmVlIiksZ3QoNCxWdnQsNiw1LCJjbHItdHJlZS1ub2RlIiwyOSksaGUo''@;'; put 'put ''KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSg0KSxNZSgibmdGb3JPZiIsYS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cyl9fWZ1bmN0aW9uIGp2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDQpLEd0KDEsImNsci1pY29uIiw0NSksZGUoMiwicCIsNDYpLExlKDMsIiBQbGVhc2UgdXBsb2FkIGEg''@;'; put 'put ''ZmlsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIHp2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsNDcpKDIsImRpdiIsNDgpKDMsInAiLDQ5KSxMZSg0LCIgU2VsZWN0ZWQgZmlsZTogIiksZGUoNSwic3Ryb25nIiksTGUoNiksaGUoKSxkZSg3LCJjbHItdG9vbHRp''@;'; put 'put ''cCIpKDgsImNkcy1pY29uIiw1MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5vbkRpc2NhcmRGaWxlKCkpfSksaGUoKSxkZSg5LCJjbHItdG9vbHRpcC1jb250ZW50IiksTGUoMTAsIiBEaXNjYXJkIHRoZSBmaWxlICIpLGhlKCkoKSgpLGRlKDExLCJwIiw1''@;'; put 'put ''MSksTGUoMTIsIiBGaWxlIHNpemU6ICIpLGRlKDEzLCJzdHJvbmciKSxMZSgxNCksaGUoKSgpLGRlKDE1LCJwIiw1MiksTGUoMTYsIiBQYXN0ZSBvciB0eXBlIHRoZSBsaXN0IG9mIGRhdGFzZXRzIHRvIHVwbG9hZDogIiksaGUoKSxkZSgxNywiY2xyLWNvbnRyb2wtaGVscGVyIiw1MyksTGUo''@;'; put 'put ''MTgsIkVhY2ggcm93IGlzIG9uZSBkYXRhc2V0LiBXZSB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRhYmxlcyBieSB0aGUgc2hlZXRuYW1lIGFuZCBwb3B1bGF0ZSBpZiBhbnkuIiksaGUoKSxHdCgxOSwiaG90LXRhYmxlIiw1NCksZGUoMjAsImRpdiIsNTUpKDIxLCJidXR0b24iLDU2KSxG''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDIpLm9uU3RhcnRQYXJzaW5nRmlsZSgpKX0pLExlKDIyLCIgQ29udGludWUgIiksaGUoKSgpKCkoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg2KSx3cihhLnNlbGVjdGVkRmlsZS5uYW1lKSxmZSg4KSxEcigi''@;'; put 'put ''IixhLnNlbGVjdGVkRmlsZS5zaXplTUIsIiBNQiIpLGZlKDUpLE1lKCJhZnRlckdldENvbEhlYWRlciIsYS5hZnRlckdldENvbEhlYWRlcikoInNldHRpbmdzIixhLmhvdFVzZXJEYXRhc2V0cykoImxpY2Vuc2VLZXkiLGEuaG90VGFibGVMaWNlbnNlS2V5KSxmZSgyKSxNZSgiZGlzYWJsZWQi''@;'; put 'put ''LCFhLm1hdGNoZWREYXRhc2V0cy5sZW5ndGgpKCJjbHJMb2FkaW5nIixhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBVdnQoYyxsKXtpZigxJmMmJihzaSgwKSxHdCgxLCJjbHItaWNvbiIsNTcpLGRlKDIsInAiLDQ2KSxMZSgzKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgz''@;'; put 'put ''KSxEcigiICIsYS5maWxlTG9hZGluZ1N0YXRlLCIuLi4gIil9fWZ1bmN0aW9uIFp2dChjLGwpezEmYyYmKHNpKDApLEd0KDEsImNsci1pY29uIiw1OCksZGUoMiwicCIsNDYpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIGRhdGEgIiks''@;'; put 'put ''aGUoKSxsaSgpKX1mdW5jdGlvbiBXdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ0KSxndCgxLFV2dCw0LDEsIm5nLWNvbnRhaW5lciIsNCkoMixadnQsNCwwLCJuZy1jb250YWluZXIiLDQpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIixhLmZpbGVMb2FkaW5n''@;'; put 'put ''U3RhdGUhPT1hLkZpbGVMb2FkaW5nU3RhdGUucGFyc2VkKSxmZSgpLE1lKCJuZ0lmIixhLmZpbGVMb2FkaW5nU3RhdGU9PT1hLkZpbGVMb2FkaW5nU3RhdGUucGFyc2VkKX19ZnVuY3Rpb24gWXZ0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzUpKDEsInN0cm9uZyIpLExlKDIsIlNVQ0NFU1Mi''@;'; put 'put ''KSxoZSgpKCkpfWZ1bmN0aW9uIEd2dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSgxLCJzdHJvbmciKSxMZSgyLCJFUlJPUiIpLGhlKCkoKSl9ZnVuY3Rpb24gJHZ0KGMsbCl7MSZjJiYoZGUoMCwicCIsNjMpLExlKDEsIiBFcnJvciBkZXRhaWxzOiAiKSxoZSgpKX1mdW5jdGlvbiBLdnQo''@;'; put 'put ''YyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDc3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSg1KTtyZXR1cm4gQ3QoaC5yZVN1Ym1pdFRhYmxlKGguYWN0aXZlUGFyc2VkRGF0YXNldCkpfSksTGUoMSwiIFJlc3VibWl0ICIpLGhlKCl9MiZj''@;'; put 'put ''JiZNZSgiY2xyTG9hZGluZyIsUmUoNSkuc3VibWl0TG9hZGluZyl9ZnVuY3Rpb24gcXZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2OSkoMSwiZGl2IikoMiwicCIsNjIpLExlKDMsIiBTdWJtaXQgU3RhdHVzOiAiKSxndCg0LFl2dCwzLDAsInNwYW4iLDcwKSg1LEd2''@;'; put 'put ''dCwzLDAsInNwYW4iLDcxKSxoZSgpLGd0KDYsJHZ0LDIsMCwicCIsNzIpLGhlKCksZGUoNywiZGl2IiksZ3QoOCxLdnQsMiwxLCJidXR0b24iLDczKSxkZSg5LCJidXR0b24iLDc0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSg0KTtyZXR1cm4gQ3QoaC5kb3dubG9h''@;'; put 'put ''ZEZpbGUoaC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5sb2d8fGguYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuc3VjY2Vzc3x8aC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcikpfSksTGUoMTAsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgp''@;'; put 'put ''KCl9aWYoMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDQpLE1lKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzKSxmZSgpLE1lKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNl''@;'; put 'put ''ZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoKSxNZSgibmdJZiIsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQu''@;'; put 'put ''ZXJyb3IpLGZlKDIpLE1lKCJuZ0lmIiwhYS5zdWJtaXR0aW5nQ3N2JiYobnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpKX19ZnVuY3Rpb24gWHZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwi''@;'; put 'put ''ZGl2Iiw3OCkoMSwiZGl2Iiw3OSksTGUoMiksZWwoMywianNvbiIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDIpLERyKCIgIixEYygzLDEsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1''@;'; put 'put ''bHQuZXJyb3IpLCIgIil9fWZ1bmN0aW9uIEp2dChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsInN0cm9uZyIpLExlKDIpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKDIpLFV1KCciJyxudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJl''@;'; put 'put ''cz9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzLnNoZWV0TmFtZSwnIiEnLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzP251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJh''@;'; put 'put ''bmdlU2hlZXRSZXMucmFuZ2VBZGRyZXNzLCIiKX19ZnVuY3Rpb24gUXZ0KGMsbCl7MSZjJiYoZGUoMCwic3Ryb25nIiksTGUoMSwiTm8gZGF0YSBmb3VuZCIpLGhlKCkpfWZ1bmN0aW9uIGVidChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDgxKSgxLCJzdHJvbmciKSxMZSgyLCJTZWFyY2hpbmcg''@;'; put 'put ''Zm9yIHRoZSBkYXRhLi4uIiksaGUoKSxHdCgzLCJjbHItc3Bpbm5lciIsODIpLGhlKCkpfWZ1bmN0aW9uIHRidChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsUXZ0LDIsMCwic3Ryb25nIiw0KSgyLGVidCw0LDAsInNwYW4iLDgwKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsIWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzaW5nVGFibGUpLGZlKCksTWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzaW5nVGFibGUpfX1mdW5jdGlvbiBuYnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDgzKSxHdCgxLCJjbHItc3Bpbm5lciIsODQpLGhlKCkpfWZ1''@;'; put 'put ''bmN0aW9uIHJidChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGd0KDEscXZ0LDExLDQsImRpdiIsNTkpKDIsWHZ0LDQsMywiZGl2Iiw2MCksZGUoMywiZGl2Iiw2MSkoNCwiZGl2IikoNSwicCIsNjIpLExlKDYsIiBGb3VuZCBpbiByYW5nZTogIiksZ3QoNyxKdnQsMywyLCJuZy1j''@;'; put 'put ''b250YWluZXIiLDQpKDgsdGJ0LDMsMiwibmctY29udGFpbmVyIiw0KSxoZSgpLGRlKDksInAiLDYzKSxMZSgxMCwiIERhdGFzZXQ6ICIpLGRlKDExLCJzdHJvbmciKSgxMiwiY2xyLXRvb2x0aXAiKSgxMywiYSIsNjQpLExlKDE0KSxoZSgpLGRlKDE1LCJjbHItdG9vbHRpcC1jb250ZW50Iiw2''@;'; put 'put ''NSksTGUoMTYsIiBDbGljayB0byBlZGl0IHRoZSB0YWJsZSAiKSxoZSgpKCkoKSgpKCksZGUoMTcsImRpdiIpKDE4LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgxOSwiaW5wdXQiLDY2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKTtyZXR1cm4gbWko''@;'; put 'put ''Zi5hY3RpdmVQYXJzZWREYXRhc2V0LmluY2x1ZGVJblN1Ym1pc3Npb24saCl8fChmLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbj1oKSxDdChoKX0pLGhlKCksZGUoMjAsImxhYmVsIiksTGUoMjEsIkluY2x1ZGUgaW4gc3VibWlzc2lvbiIpLGhlKCkoKSgpKCksZ3Qo''@;'; put 'put ''MjIsbmJ0LDIsMCwiZGl2Iiw2NyksR3QoMjMsImhvdC10YWJsZSIsNjgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQpLGZlKCksTWUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5z''@;'; put 'put ''dWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSxmZSg1KSxNZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSxmZSgpLE1lKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSxmZSg1''@;'; put 'put ''KSxNZSgicm91dGVyTGluayIsIi9lZGl0b3IvIithLmFjdGl2ZVBhcnNlZERhdGFzZXQubGliZHMpLGZlKCksd3IoYS5hY3RpdmVQYXJzZWREYXRhc2V0LmxpYmRzKSxmZSgpLE1lKCJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIpKCJjbHJTaXplIiwic20iKSxmZSg0KSxwaSgibmdNb2RlbCIs''@;'; put 'put ''YS5hY3RpdmVQYXJzZWREYXRhc2V0LmluY2x1ZGVJblN1Ym1pc3Npb24pLE1lKCJkaXNhYmxlZCIsIShhLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNvdXJjZSYmYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSksZmUoMyksTWUoIm5nSWYiLGEuaXNIb3RIaWRkZW4pLGZlKCks''@;'; put 'put ''TWUoImFmdGVyR2V0Q29sSGVhZGVyIixhLmFmdGVyR2V0Q29sSGVhZGVyKSgiY2xhc3NOYW1lIixHcygxOCx3dnQpKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vuc2VLZXkpKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgibWFu''@;'; put 'put ''dWFsQ29sdW1uUmVzaXplIiwhMCkoImZpbHRlcnMiLCEwKX19ZnVuY3Rpb24gaWJ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxXdnQsMywyLCJkaXYiLDkpKDIscmJ0LDI0LDE5LCJuZy1jb250YWluZXIiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5h''@;'; put 'put ''Y3RpdmVQYXJzZWREYXRhc2V0KSxmZSgpLE1lKCJuZ0lmIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQpfX1mdW5jdGlvbiBhYnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ0KSxHdCgxLCJjbHItaWNvbiIsNTgpLGRlKDIsInAiLDQ2KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGRhdGFzZXQgb24g''@;'; put 'put ''dGhlIGxlZnQgdG8gcmV2aWV3IHRoZSBzdWJtaXQgcmVzdWx0cyAiKSxoZSgpKCkpfWZ1bmN0aW9uIG9idChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsYWJ0LDQsMCwiZGl2Iiw5KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsIWEuYWN0aXZlU3VibWl0dGVkQ3N2''@;'; put 'put ''RGF0YXNldCl9fWZ1bmN0aW9uIHNidChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc1KSgxLCJzdHJvbmciKSxMZSgyLCJTVUNDRVNTIiksaGUoKSgpKX1mdW5jdGlvbiBsYnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NikoMSwic3Ryb25nIiksTGUoMiwiRVJST1IiKSxoZSgpKCkpfWZ1bmN0''@;'; put 'put ''aW9uIGNidChjLGwpezEmYyYmKGRlKDAsInAiLDYzKSxMZSgxLCIgRXJyb3IgZGV0YWlsczogIiksaGUoKSl9ZnVuY3Rpb24gdWJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwiZGl2Iiw3OSksTGUoMiksZWwoMywianNvbiIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2Zl''@;'; put 'put ''KDIpLERyKCIgIixEYygzLDEsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSwiICIpfX1mdW5jdGlvbiBkYnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJkaXYiLDg1KSgyLCJkaXYiKSgzLCJwIiw2MiksTGUoNCwiIE1hdGNoZWQgd2l0aCBkYXRhc2V0''@;'; put 'put ''OiAiKSxkZSg1LCJzdHJvbmciKSg2LCJjbHItdG9vbHRpcCIpKDcsImEiLDY0KSxMZSg4KSxoZSgpLGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiLDY1KSxMZSgxMCwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoMTEsInAiLDYyKSxMZSgxMiwiIFN0YXR1czog''@;'; put 'put ''IiksZ3QoMTMsc2J0LDMsMCwic3BhbiIsNzApKDE0LGxidCwzLDAsInNwYW4iLDcxKSxoZSgpLGd0KDE1LGNidCwyLDAsInAiLDcyKSxoZSgpLGRlKDE2LCJkaXYiKSgxNywiYnV0dG9uIiw3NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMik7cmV0dXJuIEN0KGgu''@;'; put 'put ''ZG93bmxvYWRGaWxlKGguYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5zdWNjZXNzfHxoLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpKX0pLExlKDE4LCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSgpLGd0KDE5LHVidCw0LDMsImRpdiIsNjApLGxpKCl9aWYoMiZjKXtjb25zdCBh''@;'; put 'put ''PVJlKDIpO2ZlKDcpLE1lKCJyb3V0ZXJMaW5rIiwiL2VkaXRvci8iK2EuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5saWJkcyksZmUoKSx3cihhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQubGliZHMpLGZlKCksTWUoImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IikoImNsclNpemUiLCJz''@;'; put 'put ''bSIpLGZlKDQpLE1lKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuc3VjY2VzcyksZmUoKSxNZSgibmdJZiIsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSxmZSgpLE1lKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpLGZlKDQpLE1l''@;'; put 'put ''KCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpfX1mdW5jdGlvbiBoYnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLHp2dCwyMyw3LCJuZy1jb250YWluZXIiLDQpKDIsaWJ0LDMsMiwibmctY29udGFpbmVyIiw0KSgzLG9idCwyLDEsIm5nLWNvbnRhaW5lciIsNCko''@;'; put 'put ''NCxkYnQsMjAsOCwibmctY29udGFpbmVyIiw0KSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwhYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJm51bGwhPT1hLnNlbGVjdGVkRmlsZSksZmUoKSxNZSgibmdJZiIsYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiFhLnN1Ym1p''@;'; put 'put ''dHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSxNZSgibmdJZiIsYS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZlKCksTWUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9uIGZidChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDg2KSxMZSgxKSxoZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLERyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBlYWNoIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24s''@;'; put 'put ''IGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pby4gIil9fXZhciB4dz1mdW5jdGlvbihjKXtyZXR1cm4gYy5yZWFkaW5nPSJSZWFkaW5nIHRoZSBmaWxlIixjLnBhcnNpbmc9IlNlYXJjaGluZyBmb3IgdGhlIGRhdGEgaW4gdGhlIGZpbGUiLGMucGFyc2VkPSJTZWFyY2hpbmcgZm9y''@;'; put 'put ''IHRoZSBkYXRhIGZpbmlzaGVkIixjLm5vdFNlbGVjdGVkPSJGaWxlIG5vdCBzZWxlY3RlZCIsY30oeHd8fHt9KTtjb25zdCBwYnQ9W3twYXRoOiIiLGNvbXBvbmVudDpidnQsY2hpbGRyZW46W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixN''@;'; put 'put ''LEQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWYsdGhpcy5zcHJlYWRzaGVldFNlcnZpY2U9dix0aGlzLnNhc1NlcnZpY2U9TSx0aGlzLmNkcj1ELHRoaXMuY29udGVudENvbnRhaW5l''@;'; put 'put ''ckNsYXNzPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuZmlsZUxvYWRpbmdTdGF0ZT14dy5ub3RTZWxlY3RlZCx0aGlzLkZpbGVMb2FkaW5nU3RhdGU9eHcsdGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9''@;'; put 'put ''dm9pZCAwLHRoaXMuaG90VGFibGVNYXhSb3dzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMCx0aGlzLmNzdkZpbGVzPVtdLHRoaXMuY3N2U3VibWl0dGluZz0hMSx0aGlzLmF1dG9EZXRlY3RpbmdDb2x1bW5zPSExLHRoaXMuc2VsZWN0ZWRGaWxlPW51''@;'; put 'put ''bGwsdGhpcy5wYXJzZWREYXRhc2V0cz1bXSx0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzPVtdLHRoaXMuZGF0YXNldHNMb2FkaW5nPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5tYXRjaGVkRGF0YXNldHM9W10sdGhpcy5zaGVldE5hbWVzPVtd''@;'; put 'put ''LHRoaXMudXNlcklucHV0RGF0YXNldHM9IiIsdGhpcy5saWJzQW5kVGFibGVzPXt9LHRoaXMuc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSExLHRoaXMuc3VibWl0UmVhc29uTWVzc2FnZT0iIix0aGlzLmhvdFVzZXJEYXRhc2V0cz17Y29sSGVhZGVyczpbIkxpYnJhcnkiLCJUYWJsZSJdLGRhdGE6''@;'; put 'put ''W1siIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdXSxjb2x1bW5zOlt7dHlwZToiYXV0b2NvbXBsZXRlIixmaWx0ZXI6ITEsc291cmNlOltdfSx7dHlwZToiYXV0b2NvbXBs''@;'; put 'put ''ZXRlIixmaWx0ZXI6ITEsc291cmNlOltdfV0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMzA1cHgiLGNsYXNzTmFtZTpbImh0RGFyayJdLGNvbnRleHRNZW51OntpdGVtczp7cm93X2Fib3ZlOntuYW1lOiJJbnNlcnQgUm93IGFib3ZlIn0scm93X2JlbG93OntuYW1lOiJJbnNlcnQgUm93IGJlbG93''@;'; put 'put ''In19fSxtYW51YWxSb3dNb3ZlOiEwLGNvbHVtblNvcnRpbmc6ITB9LHRoaXMuYWZ0ZXJHZXRDb2xIZWFkZXI9eXZ0LHRoaXMuaG90UmVnaXN0ZXJlcj1uZXcgWW19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFi''@;'; put 'put ''bGVMaWNlbnNlS2V5PWF9KX1uZ0FmdGVyQ29udGVudEluaXQoKXtLbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX1nZXRGcm9t''@;'; put 'put ''R2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcztjb25zdCBhPU9iamVjdC5rZXlzKHRoaXMubGlic0FuZFRhYmxlcyk7dGhpcy5ob3RVc2VyRGF0YXNldHM/LmNvbHVtbnMmJih0aGlzLmhvdFVzZXJEYXRhc2V0cy5jb2x1bW5zWzBdLnNvdXJjZT1h''@;'; put 'put ''KX1vbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD1hPy50YXJnZXQ/LmZpbGVzfHxbXTtpZihoLmxlbmd0aDwxKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIGZpbGUgZm91bmQuIixudWxsLCJG''@;'; put 'put ''aWxlIFVwbG9hZCIpO2xldCBmPSIiO2ZvcihsZXQgdiBvZiBoKXtjb25zdCBNPXYubmFtZS5zcGxpdCgiLiIpLnBvcCgpO2lmKGZ8fChmPU0pLGYhPT1NKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk1peGVkIGV4dGVuc2lvbnMgZXJyb3IiLCJQbGVhc2Ugc2Vs''@;'; put 'put ''ZWN0IGZpbGVzIHdpdGggc2FtZSBleHRlbnNpb24uIik7Zj1NfWlmKFsieGxzeCIsInhsc20iLCJ4bG0iXS5pbmNsdWRlcyhmKSlkLnNlbGVjdGVkRmlsZT1hLnRhcmdldC5maWxlc1swXSxkLnNlbGVjdGVkRmlsZSYmKGQuZmlsZUxvYWRpbmdTdGF0ZT14dy5yZWFkaW5nLGQuc2VsZWN0ZWRG''@;'; put 'put ''aWxlLnNpemVNQj1kLnNwcmVhZHNoZWV0U2VydmljZS5ieXRlc1RvTUIoZC5zZWxlY3RlZEZpbGUuc2l6ZSksZC5zcHJlYWRzaGVldFNlcnZpY2UueGxzeFJlYWRGaWxlKGQuc2VsZWN0ZWRGaWxlKS50aGVuKHY9PntkLmZpbGVMb2FkaW5nU3RhdGU9eHcucGFyc2luZyxkLnNlbGVjdGVkRmls''@;'; put 'put ''ZS53b3JrYm9vaz12fSkpLGQuaW5pdFVzZXJJbnB1dEhvdCgpLGQub25BdXRvRGV0ZWN0Q29sdW1ucygpO2Vsc2V7aWYoImNzdiIhPT1mKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk9ubHkgZXhjZWwgZXh0ZW5zaW9ucyBhcmUgYWxsb3dlZC4gKHhs''@;'; put 'put ''c3gpIixudWxsLCJFeHRlbnNpb24gRXJyb3IiKTtkLm9uTXVsdGlDc3ZGaWxlcyhhLnRhcmdldC5maWxlcyl9YS50YXJnZXQudmFsdWU9IiJ9KSgpfW9uTXVsdGlDc3ZGaWxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtmb3IobGV0IGggb2YgYSl7Y29uc3QgZj1kLnBh''@;'; put 'put ''cnNlRGF0YXNldEZyb21Dc3ZOYW1lKGgubmFtZSk7ZC5pc1ZhbGlkRGF0YXNldEZvcm1hdChmKSYmZC5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShmKSYmZC5jc3ZGaWxlcy5wdXNoKHtmaWxlOmgsZmlsZU5hbWU6aC5uYW1lfSl9ZC5jc3ZGaWxlcy5sZW5ndGg/KGQuY3N2U3VibWl0dGluZz0h''@;'; put 'put ''MCx5aWVsZCBkLnN1Ym1pdENzdkZpbGVzKCksZC5jc3ZTdWJtaXR0aW5nPSExKTpkLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJDU1YgVXBsb2FkIiwiTm9uZSBvZiB0aGUgYXR0YWNoZWQgQ1NWIGZpbGUgbmFtZXMgbWF0Y2hlZCBhbiBhY3R1YWwgZGF0YXNldC4iKX0pKCl9b25EaXNj''@;'; put 'put ''YXJkRmlsZSgpe3RoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy51c2VySW5wdXREYXRhc2V0cz0iIn1vblN0YXJ0UGFyc2luZ0ZpbGUoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnVwbG9hZExvYWRpbmc9ITA7Y29uc3QgZD1bXTtsZXQgaD1bXTtmb3IobGV0IGYgb2Yg''@;'; put 'put ''YS5tYXRjaGVkRGF0YXNldHMpe2NvbnN0IHY9YS5mZXRjaERhdGFzZXQoZik7ZC5wdXNoKHYpfVByb21pc2UuYWxsU2V0dGxlZChkKS50aGVuKGY9PntmLmZvckVhY2goTT0+eyJmdWxmaWxsZWQiPT09TS5zdGF0dXMmJk0udmFsdWUmJmgucHVzaChNLnZhbHVlKX0pLGEudXBsb2FkTG9hZGlu''@;'; put 'put ''Zz0hMSxhLmJ1aWxkRGF0YXNldHNPYmplY3RzKGgpLmZvckVhY2goTT0+e2EucGFyc2VkRGF0YXNldHMucHVzaCh7bGliZHM6TS5saWJkcyxpbmNsdWRlSW5TdWJtaXNzaW9uOiEwLGRhdGFzZXRJbmZvOk0scGFyc2luZ1RhYmxlOiEwfSl9KSxhLndvcmtib29rTG9hZGVkKCkudGhlbihNPT57''@;'; put 'put ''Zm9yKGxldCBEIG9mIGEucGFyc2VkRGF0YXNldHMpYS5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VFeGNlbEZpbGUoe2ZpbGU6YS5zZWxlY3RlZEZpbGUsd29ya2Jvb2s6TSxwYXNzd29yZDphLnNlbGVjdGVkRmlsZS5wYXNzd29yZHx8dm9pZCAwLGRjVmFsaWRhdG9yOkQuZGF0YXNldEluZm8u''@;'; put 'put ''ZGNWYWxpZGF0b3IsaGVhZGVyUGtzOkQuZGF0YXNldEluZm8uaGVhZGVyUGtzLGhlYWRlckFycmF5OkQuZGF0YXNldEluZm8uaGVhZGVyQXJyYXksaGVhZGVyU2hvdzpbXSx0aW1lSGVhZGVyczpELmRhdGFzZXRJbmZvLnRpbWVIZWFkZXJzLGRhdGVIZWFkZXJzOkQuZGF0YXNldEluZm8uZGF0''@;'; put 'put ''ZUhlYWRlcnMsZGF0ZVRpbWVIZWFkZXJzOkQuZGF0YXNldEluZm8uZGF0ZVRpbWVIZWFkZXJzLHhsUnVsZXM6RC5kYXRhc2V0SW5mby54bFJ1bGVzfSkudGhlbihaPT57aWYoYS5maWxlTG9hZGluZ1N0YXRlPXh3LnBhcnNlZCxaJiZaLmRhdGEpe2xldCByZT1bXTtaLmRhdGEubWFwKGNlPT57''@;'; put 'put ''bGV0IGJlPXt9O1ouaGVhZGVyU2hvdy5tYXAoKEVlLEJlKT0+e2JlW0VlXT1jZVtCZV19KSxiZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChiZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189Ik5vIikscmUucHVzaChiZSl9KSxELmRhdGFzb3VyY2U9cmUsRC5wYXJz''@;'; put 'put ''ZVJlc3VsdD1aLEQucGFyc2luZ1RhYmxlPSExfX0pLmNhdGNoKFo9Pntjb25zb2xlLndhcm4oIlBhcnNpbmcgZXhjZWwgZmlsZSBlcnJvci4iLFopLEQuZGF0YXNvdXJjZT1bXSxELmluY2x1ZGVJblN1Ym1pc3Npb249ITEsRC5wYXJzaW5nVGFibGU9ITF9KX0pfSl9KSgpfW9uU3VibWl0QWxs''@;'; put 'put ''KCl7dGhpcy50YWJsZXNUb1N1Ym1pdC5sZW5ndGg/dGhpcy5zaG93U3VibWl0UmVhc29uTW9kYWw9ITA6dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm8gdGFibGVzIHRvIHN1Ym1pdCIsIlBsZWFzZSBpbmNsdWRlIGF0IGxlYXN0IG9uZSB0YWJsZSB0byBwcm9jZWVkLiIpfW9u''@;'; put 'put ''RGlzY2FyZCgpe3RoaXMucGFyc2VkRGF0YXNldHM9W10sdGhpcy5tYXRjaGVkRGF0YXNldHM9W10sdGhpcy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnVzZXJJbnB1dERhdGFzZXRzPSIiLHRoaXMuc3VibWl0UmVhc29uTWVzc2FnZT0iIn1pbml0SG90KCl7c2V0VGltZW91dCgoKT0+e3RoaXMu''@;'; put 'put ''aG90SW5zdGFuY2U9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpO2NvbnN0IGQ9dGhpcy5jb250ZW50QXJlYVJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodC0xNjArInB4Ijt0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQmJnRoaXMuaG90SW5zdGFuY2Uu''@;'; put 'put ''dXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzb3VyY2V8fFtdLGNvbEhlYWRlcnM6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzZXRJbmZvLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNldElu''@;'; put 'put ''Zm8uZGNWYWxpZGF0b3I/LmdldFJ1bGVzKCkscmVhZE9ubHk6ITAsaGVpZ2h0OmR8fCIzMDBweCIsY2xhc3NOYW1lOiJodERhcmsifSl9KX1pbml0VXNlcklucHV0SG90KCl7dmFyIGE9dGhpcztzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0PXRoaXMuaG90UmVn''@;'; put 'put ''aXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2VVc2VyRGF0YXNldCIpLHRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5hZGRIb29rKCJiZWZvcmVDaGFuZ2UiLChkLGgpPT57aWYoZClmb3IobGV0IGYgb2YgZClmJiZmWzNdJiYoZlszXT1mWzNdLnRvVXBwZXJDYXNlKCkpfSksdGhp''@;'; put 'put ''cy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYpe2lmKGgpeyJlZGl0Ij09PWYmJih5aWVsZCBhLm9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKSk7Zm9yKGxldCB2IG9mIGgpYS5tYXJrVW5tYXRj''@;'; put 'put ''aGVkUm93cyh2WzBdKTthLmR5bmFtaWNDZWxsVmFsaWRhdGlvbnMoKSxhLmhvdEluc3RhbmNlVXNlckRhdGFzZXQucmVuZGVyKCl9fSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFk''@;'; put 'put ''ZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYsdixNKXt5aWVsZCBhLm9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKTtmb3IobGV0IEQgb2YgdilhLm1hcmtVbm1hdGNoZWRSb3dzKEQpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZix2LE0pe3Jl''@;'; put 'put ''dHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9ucygpe3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9ZFswXTtmJiZmLmxlbmd0aCYmdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRh''@;'; put 'put ''c2V0LnNldENlbGxNZXRhKGgsMSwic291cmNlIix0aGlzLmxpYnNBbmRUYWJsZXNbZl0pfSl9bWFya1VubWF0Y2hlZFJvd3MoYSl7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YUF0Um93KGEpLGg9YCR7ZFswXX0uJHtkWzFdfWAsZj10aGlzLmhvdEluc3RhbmNl''@;'; put 'put ''VXNlckRhdGFzZXQuZ2V0Q2VsbE1ldGFBdFJvdyhhKTtkJiZkWzBdJiZkWzFdP3RoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGgpP2YuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSk6Zi5mb3JF''@;'; put 'put ''YWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwiY2xhc3NOYW1lIiwibm90LW1hdGNoZWQiKX0pOmYuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSl9''@;'; put 'put ''b25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpe3JldHVybiBuZXcgUHJvbWlzZSgoYSxkKT0+e3RoaXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMTAwLCgpPT57Y29uc3QgaD10aGlzLmdldERhdGFzZXRzRnJvbUhvdCgpO3RoaXMubWF0Y2hlZERhdGFzZXRzPVtdLGguZm9yRWFjaChm''@;'; put 'put ''PT57Y29uc3Qgdj1mLnRyaW0oKTt0aGlzLmlzVmFsaWREYXRhc2V0Rm9ybWF0KHYpJiZ0aGlzLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKHYpJiYhdGhpcy5tYXRjaGVkRGF0YXNldHMuaW5jbHVkZXModik/dGhpcy5tYXRjaGVkRGF0YXNldHMucHVzaCh2KTpjb25zb2xlLndhcm4oYFNoZWV0''@;'; put 'put ''IG5hbWU6ICR7dn0gaXMgbm90IGFuIGFjdHVhbCBkYXRhc2V0IHJlZmVyZW5jZS5gKX0pLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSxhKHZvaWQgMCl9KX0pfW9uQXV0b0RldGVjdENvbHVtbnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD0hMTtpZih5aWVsZCBh''@;'; put 'put ''LnBhcnNlRXhjZWxTaGVldE5hbWVzKCkudGhlbih2PT57YS5zaGVldE5hbWVzPXZ9KS5jYXRjaCh2PT57di5pbmNsdWRlcygicGFzc3dvcmQiKSYmKGQ9ITApfSksZClyZXR1cm4gYS5vbkRpc2NhcmRGaWxlKCksdm9pZCBhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJMb2NrZWQgZmls''@;'; put 'put ''ZSIsIldlIGZhaWxlZCB0byB1bmxvY2sgdGhlIGZpbGUuIik7YS5zaGVldE5hbWVzJiYoYS5tYXRjaGVkRGF0YXNldHM9W10sYS51c2VySW5wdXREYXRhc2V0cz0iIixhLnNoZWV0TmFtZXMuZm9yRWFjaCgodixNKT0+e2NvbnN0IEQ9di50cmltKCk7YS5pc1ZhbGlkRGF0YXNldEZvcm1hdChE''@;'; put 'put ''KSYmYS5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShEKT9hLm1hdGNoZWREYXRhc2V0cy5wdXNoKEQpOmNvbnNvbGUud2FybihgU2hlZXQgbmFtZTogJHtEfSBpcyBub3QgYW4gYWN0dWFsIGRhdGFzZXQgcmVmZXJlbmNlLmApfSkpLGEudXNlcklucHV0RGF0YXNldHM9YS5tYXRjaGVkRGF0YXNl''@;'; put 'put ''dHMuam9pbigiXG4iKTtjb25zdCBoPWEubWF0Y2hlZERhdGFzZXRzLm1hcCh2PT5bdi5zcGxpdCgiLiIpWzBdLHYuc3BsaXQoIi4iKVsxXV0pLGY9YS5ob3RVc2VyRGF0YXNldHMuZGF0YS5sZW5ndGg7aWYoaC5sZW5ndGg8Zil7Y29uc3Qgdj1mLWgubGVuZ3RoO2ZvcihsZXQgTT0wO008djtN''@;'; put 'put ''KyspaC5wdXNoKFsiIiwiIl0pfWEuaG90SW5zdGFuY2VVc2VyRGF0YXNldC51cGRhdGVEYXRhKGgpLGEuZHluYW1pY0NlbGxWYWxpZGF0aW9ucygpfSkoKX1vblBhcnNlZERhdGFzZXRDbGljayhhKXt0aGlzLmRlc2VsZWN0QWxsUGFyc2VkRGF0YXNldHMoKSxhLmFjdGl2ZT0hMCx0aGlzLmNk''@;'; put 'put ''ci5kZXRlY3RDaGFuZ2VzKCksdGhpcy5pbml0SG90KCl9b25TdWJtaXR0ZWRDc3ZEYXRhc2V0Q2xpY2soYSl7dGhpcy5kZXNlbGVjdEFsbFN1Ym1pdHRlZENzdkRhdGFzZXRzKCksYS5hY3RpdmU9ITB9Z2V0IGFjdGl2ZVBhcnNlZERhdGFzZXQoKXtyZXR1cm4gdGhpcy5wYXJzZWREYXRhc2V0''@;'; put 'put ''cy5maW5kKGE9PmEuYWN0aXZlKX1nZXQgYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCgpe3JldHVybiB0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBub3RGb3VuZERhdGFzZXRzKCl7cmV0dXJuIHRoaXMuZ2V0RGF0YXNldHNGcm9tSG90KCkuZmlsdGVy''@;'; put 'put ''KGQ9PiF0aGlzLm1hdGNoZWREYXRhc2V0cy5pbmNsdWRlcyhkLnRyaW0oKSkpLmZpbHRlcihkPT5kLmxlbmd0aCl9Z2V0IGlzSG90SGlkZGVuKCl7aWYoIXRoaXMuaG90SW5zdGFuY2UpcmV0dXJuITA7dHJ5e2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZXR0aW5ncygpLmNsYXNzTmFt''@;'; put 'put ''ZTtyZXR1cm4hIWEmJmEuaW5jbHVkZXMoImh0Q3VzdG9tSGlkZGVuIil9Y2F0Y2h7cmV0dXJuITB9fWdldCB0YWJsZXNUb1N1Ym1pdCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbHRlcihhPT5hLmRhdGFzb3VyY2UmJmEucGFyc2VSZXN1bHQmJmEuaW5jbHVkZUluU3VibWlzc2lv''@;'; put 'put ''bil9Z2V0IHN1Ym1pdHRpbmdDc3YoKXtyZXR1cm4gdGhpcy5jc3ZGaWxlcy5sZW5ndGg+MH1nZXQgZXhjZWxzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLnBhcnNlZERhdGFzZXRzLmZpbHRlcihhPT5hLnN1Ym1pdFJlc3VsdCkubGVuZ3RofWRvd25sb2FkRmlsZShhKXt0aGlzLmhlbHBlclNl''@;'; put 'put ''cnZpY2UuZG93bmxvYWRUZXh0RmlsZShgc3RhZ2VkYXRhLSR7dGhpcy5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0Py5saWJkc30tbG9nYCxKU09OLnN0cmluZ2lmeShhKSl9c3VibWl0Q3N2RmlsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD1bXTtmb3IobGV0''@;'; put 'put ''IGggb2YgYS5jc3ZGaWxlcyl7Y29uc3QgZj1hLnBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGguZmlsZU5hbWUpO2xldCB2LE07eWllbGQgYS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoInNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLFtoXSx7dGFibGU6Zn0pLnRoZW4oRD0+e3R5cGVvZiBELmFk''@;'; put 'put ''YXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PCJ1Ij92PUQuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQ6TT1ELmFkYXB0ZXJSZXNwb25zZX0sRD0+e2NvbnNvbGUuZXJyb3IoImVyciIsRCksdj1ELmFkYXB0ZXJSZXNwb25zZX0pLGQucHVzaCh7c3VjY2VzczpNLGVycm9yOnYsbGliZHM6Zn0p''@;'; put 'put ''fWEuc3VibWl0dGVkQ3N2RGF0YXNldHM9ZH0pKCl9ZmV0Y2hEYXRhc2V0KGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEpcmV0dXJuIGQuc2FzU3RvcmVTZXJ2aWNlLmNhbGxTZXJ2aWNlKHtMSUJEUzphLE9VVERFU1Q6IldFQiJ9LCJTQVNDb250cm9sVGFibGUiLCJl''@;'; put 'put ''ZGl0b3JzL2dldGRhdGEiLGEpLnRoZW4oZj0+ZikuY2F0Y2goZj0+e2NvbnNvbGUud2FybihgRXJyb3IgZmV0Y2hpbmcgJHthfWAsZil9KX0pKCl9c3VibWl0VGFibGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnNvbGUuaW5mbygiU3VibWl0dGluZyBtdWx0aXBs''@;'; put 'put ''ZSB0YWJsZXMiLGQucGFyc2VkRGF0YXNldHMpLGQuc3VibWl0TG9hZGluZz0hMDtmb3IobGV0IGggb2YgZC5wYXJzZWREYXRhc2V0cyl7aWYoIWgucGFyc2VSZXN1bHR8fCFoLmRhdGFzb3VyY2V8fCFoLmluY2x1ZGVJblN1Ym1pc3Npb258fGEmJiFhLmluY2x1ZGVzKGgubGliZHMpKWNvbnRp''@;'; put 'put ''bnVlO2xldCBmPXt9O2Quc3VibWl0UmVhc29uTWVzc2FnZT1kLnN1Ym1pdFJlYXNvbk1lc3NhZ2UucmVwbGFjZSgvXG4vZywiLiAiKSxmLkFDVElPTj0iTE9BRCIsZi5NRVNTQUdFPWQuc3VibWl0UmVhc29uTWVzc2FnZSxmLkxJQkRTPWgubGliZHM7bGV0IHY9aC5kYXRhc291cmNlO2lmKHYp''@;'; put 'put ''e3Y9di5tYXAoYmU9PntsZXQgRWU9YmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fO3JldHVybiBkZWxldGUgYmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fLGJlLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz1FZSxPYmplY3Qua2V5cyhiZSkubWFwKEJlPT57''@;'; put 'put ''Im51bWVyaWMiPT09aC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShCZSk/LnR5cGUmJiIuIj09PWJlW0JlXSYmKGJlW0JlXT1udWxsKX0pLGJlfSk7Y29uc3QgTT12LnNsaWNlKDAsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2xldCBELFoscmU7eWll''@;'; put 'put ''bGQgZC5zYXNTdG9yZVNlcnZpY2UudXBkYXRlVGFibGUoZixNLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL3N0YWdlZGF0YSIsaC5kYXRhc2V0SW5mby5kYXRhLiRzYXNkYXRhLCEwLHtkZWJ1ZzohMH0pLnRoZW4oYmU9PntaPWJlLmFkYXB0ZXJSZXNwb25zZSxyZT1iZS5sb2d9KS5jYXRj''@;'; put 'put ''aChiZT0+e2NvbnNvbGUuZXJyb3IoImVyciIsYmUpLEQ9YmUuYWRhcHRlclJlc3BvbnNlLHJlPWJlLmxvZ30pLGguc3VibWl0UmVzdWx0PXtzdWNjZXNzOlosZXJyb3I6RCxsb2c6cmUscGFyc2VSZXN1bHQ6aC5wYXJzZVJlc3VsdCxsaWJkczpoLmxpYmRzfX19ZC5zaG93U3VibWl0UmVhc29u''@;'; put 'put ''TW9kYWw9ITEsZC5zdWJtaXRMb2FkaW5nPSExLGQuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygpfSkoKX1yZVN1Ym1pdFRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3lpZWxkIGQuc3VibWl0VGFibGVzKFthLmxpYmRzXSk7Y29uc3QgaD1kLnBhcnNlZERhdGFz''@;'; put 'put ''ZXRzLmZpbmQoZj0+Zi5saWJkcz09PWEubGliZHMpO2gmJihoLmFjdGl2ZT0hMCl9KSgpfXdvcmtib29rTG9hZGVkKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGQpPT57dGhpcy5zZWxlY3RlZEZpbGV8fGQoIk5vIGZpbGUgc2VsZWN0ZWQiKSx0aGlzLndvcmtib29rSW50ZXJ2YWw9c2V0SW50''@;'; put 'put ''ZXJ2YWwoKCk9Pnt0aGlzLnNlbGVjdGVkRmlsZS53b3JrYm9vayYmKGNsZWFySW50ZXJ2YWwodGhpcy53b3JrYm9va0ludGVydmFsKSxhKHRoaXMuc2VsZWN0ZWRGaWxlLndvcmtib29rKSl9LDUwMCl9KX1wYXJzZURhdGFzZXRGcm9tQ3N2TmFtZShhKXtjb25zdCBkPWEuc3BsaXQoIi4iKTty''@;'; put 'put ''ZXR1cm4gZC5wb3AoKSxkLmpvaW4oIi4iKX1nZXREYXRhc2V0c0Zyb21Ib3QoKXtyZXR1cm4gdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0P3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZmlsdGVyKGQ9PmRbMF0/Lmxlbmd0aCYmZFsxXT8ubGVuZ3RoKS5tYXAoZD0+''@;'; put 'put ''ZD9gJHtkWzBdfS4ke2RbMV19YDoiIik6W119cGFyc2VFeGNlbFNoZWV0TmFtZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntpZighYS5zZWxlY3RlZEZpbGUpcmV0dXJuIGQoW10pO2Euc3ByZWFkc2hlZXRTZXJ2aWNlLnBh''@;'; put 'put ''cnNlRXhjZWxTaGVldE5hbWVzKGEuc2VsZWN0ZWRGaWxlKS50aGVuKGY9PihmLnBhc3N3b3JkJiYoYS5zZWxlY3RlZEZpbGUucGFzc3dvcmQ9Zi5wYXNzd29yZCksZChmLnNoZWV0TmFtZXMpKSkuY2F0Y2goZj0+aChmKSl9KX0pKCl9aXNWYWxpZERhdGFzZXRGb3JtYXQoYSl7cmV0dXJuL15c''@;'; put 'put ''d3sxLDh9XC5cd3sxLDMyfSQvZ2ltLnRlc3QoYSl9aXNWYWxpZERhdGFzZXRSZWZlcmVuY2UoYSl7Y29uc3QgZD1hLnNwbGl0KCIuIilbMF0saD1hLnNwbGl0KCIuIilbMV07cmV0dXJuISF0aGlzLmxpYnNBbmRUYWJsZXNbZF0/LmluY2x1ZGVzKGgpfWJ1aWxkRGF0YXNldHNPYmplY3RzKGEp''@;'; put 'put ''e2lmKCFhKXJldHVybltdO2NvbnN0IGQ9W107Zm9yKGxldCBoIG9mIGEpaWYoaC5kYXRhKXtjb25zdCBmPXsuLi5oLGhvdFRhYmxlOntkYXRhOmguZGF0YS5zYXNkYXRhLHNldHRpbmdzOnt9fSxjb2xzOltdLGhlYWRlckNvbHVtbnM6W10saGVhZGVyUGtzOltdLGhlYWRlckFycmF5OltdLGRh''@;'; put 'put ''dGVIZWFkZXJzOltdLHRpbWVIZWFkZXJzOltdLGRhdGVUaW1lSGVhZGVyczpbXSx4bFJ1bGVzOltdLGNvbHVtbkhlYWRlcjpbXX07Zi5jb2xzPWguZGF0YS5jb2xzLGYuaGVhZGVyQ29sdW1ucz1oLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSxmLmhlYWRlclBrcz1o''@;'; put 'put ''LmRhdGEuc2FzcGFyYW1zWzBdLlBLLnNwbGl0KCIgIiksLTEhPT1mLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJihmLmhlYWRlckNvbHVtbnNbZi5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRf''@;'; put 'put ''X19fXyIpXT0iRGVsZXRlPyIpLGYuaGVhZGVyQXJyYXk9Zi5oZWFkZXJDb2x1bW5zLnNsaWNlKDEpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJihmLmRhdGVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTLnNwbGl0KCIgIikpLCIiIT09aC5kYXRhLnNhc3BhcmFt''@;'; put 'put ''c1swXS5UTVZBUlMmJihmLnRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNwbGl0KCIgIikpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYmKGYuZGF0ZVRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMuc3BsaXQoIiAiKSksaC5k''@;'; put 'put ''YXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYoZi54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaC5kYXRhLnhsX3J1bGVzKSksZi5kY1ZhbGlkYXRvcj1uZXcgQzZlKGguZGF0YS5zYXNwYXJhbXNbMF0saC5kYXRhLiRzYXNkYXRhLGguZGF0YS5jb2xzLGguZGF0YS5kcXJ1bGVz''@;'; put 'put ''LGguZGF0YS5kcWRhdGEpLGYuY29sdW1uSGVhZGVyPWguZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLGQucHVzaChmKX1yZXR1cm4gZH1kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRzKCl7Zm9yKGxldCBhIG9mIHRoaXMucGFyc2VkRGF0YXNldHMpYS5hY3RpdmU9ITF9''@;'; put 'put ''ZGVzZWxlY3RBbGxTdWJtaXR0ZWRDc3ZEYXRhc2V0cygpe2ZvcihsZXQgYSBvZiB0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzKWEuYWN0aXZlPSExfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZSh1MSksR2UoU3UpLEdlKGtoKSxH''@;'; put 'put ''ZShBNmUpLEdlKEJzKSxHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW11bHRpLWRhdGFzZXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShfdnQsNyksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5jb250ZW50''@;'; put 'put ''QXJlYVJlZj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigiY29udGVudC1jb250YWluZXIiLGguY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6MzcsdmFyczoxOCxjb25zdHM6W1siY29udGVudEFyZWEiLCIiXSxbImZpbGVVcGxv''@;'; put 'put ''YWRJbnB1dCIsIiJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIG1iLTEwIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIiwiaC0xMDAiLCJkLWZs''@;'; put 'put ''ZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxl''@;'; put 'put ''Y3RlZCBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsiY2RzLXRleHQiLCJib2R5IiwiY2xhc3MiLCJsaWNlbmNl''@;'; put 'put ''LWxpbWl0LW5vdGljZSBtdC0wIG1iLTE1Iiw0LCJuZ0lmIl0sWzEsInRleHQtYXJlYS1mdWxsLXdpZHRoIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiLDEsIm1iLTUiLCJkLWJsb2NrIl0sWyJjbHJUZXh0YXJlYSIsIiIsInRhYmluZGV4IiwiMCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmll''@;'; put 'put ''bGRzXzgiLDEsInN1Ym1pdC1yZWFzb24iLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjZHMtdGV4dCIsImNhcHRpb25fY2xlYW4iLDEsIm10LTEwIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIiwiZGlz''@;'; put 'put ''YWJsZWQiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsInN1Ym1pdC10YWJsZXMiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsiY2RzLXRleHQiLCJjYXB0aW9uX2NsZWFuIiwxLCJtdC0xMCIs''@;'; put 'put ''InRleHQtY2VudGVyIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsIm1iLTEwIl0sWyJpZCIsImJyb3dzZS1maWxlIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaGlkZGVuIiwiIiwiaWQi''@;'; put 'put ''LCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwibXVsdGlwbGUiLCIiLDMsImNoYW5nZSJdLFsiY2RzLXRleHQiLCJjYXB0aW9uIiwxLCJtbC0xMCIsIm1iLTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJidG4iLCJidG4tZGFuZ2VyIiwiYnRuLXNtIiwibXItMTAiLDMsImNsaWNr''@;'; put 'put ''Il0sWyJpZCIsInN1Ym1pdC1hbGwiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbMSwibWwtNSJdLFsi''@;'; put 'put ''c3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDQsIm5nSWYiXSxbInN0YXR1cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsNCwibmdJZiJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiXSxbInN0YXR1''@;'; put 'put ''cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdJZiJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbImNsclNtYWxsIiwiIl0sWyJjZHMtdGV4dCIsImNhcHRpb24iLDEsIm1sLTEwIiwibWItMTAiLCJt''@;'; put 'put ''dC0xMCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwzLCJjbGljayJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNoYXBlIiwidXBsb2FkLWNsb3VkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1m''@;'; put 'put ''aWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMTUiXSxbMSwiZGF0YXNldC1pbnB1dC13cmFwcGVyIl0sWyJjZHMtdGV4dCIsInNlY29uZGFy''@;'; put 'put ''eSByZWd1bGFyIiwxLCJtYi01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwidHJhc2giLCJzdGF0dXMiLCJkYW5nZXIiLDEsIm1sLTUiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTIwIl0sWyJjZHMt''@;'; put 'put ''dGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xNSJdLFsxLCJtYi01Il0sWyJob3RJZCIsImhvdEluc3RhbmNlVXNlckRhdGFzZXQiLCJpZCIsImhvdFRhYmxlVXNlckRhdGFzZXQiLCJzdHJldGNoSCIsImFsbCIsMSwibXQtMTUiLDMsImFmdGVyR2V0Q29sSGVhZGVyIiwic2V0dGlu''@;'; put 'put ''Z3MiLCJsaWNlbnNlS2V5Il0sWzEsImRhdGFzZXQtc2VsZWN0aW9uLWFjdGlvbnMiLCJ0ZXh0LXJpZ2h0IiwibXQtMTAiXSxbImlkIiwiY29udGludWUtYnRuIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxlZCIsImNsckxvYWRpbmciXSxbInNoYXBl''@;'; put 'put ''IiwicHJvY2Vzcy1vbi12bSIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWJl''@;'; put 'put ''dHdlZW4gcC0xMCBtdC0xNSBzdWJtaXNzaW9uLXJlc3VsdHMiLDQsIm5nSWYiXSxbImNsYXNzIiwiZXJyb3ItZmllbGQgbXQtMTUiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCIsIm10LTE1Il0sWyJjZHMtdGV4dCIsInNlY29uZGFy''@;'; put 'put ''eSByZWd1bGFyIiwxLCJtYi0xMCJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDMsInJvdXRlckxpbmsiXSxbMywiY2xyUG9zaXRpb24iLCJjbHJTaXplIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLCJuYW1lIiwi''@;'; put 'put ''b3B0aW9ucyIsInJlcXVpcmVkIiwiIiwidmFsdWUiLCJvcHRpb24xIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIHctMTAwIiw0LCJuZ0lmIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsInN0cmV0''@;'; put 'put ''Y2hIIiwiYWxsIiwxLCJtdC0xNSIsMywiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJjbGFzc05hbWUiLCJsaWNlbnNlS2V5IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJmaWx0ZXJzIl0sWzEsImQtZmxleCIsImNs''@;'; put 'put ''ci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiLCJtdC0xNSIsInN1Ym1pc3Npb24tcmVzdWx0cyJdLFsiY2xhc3MiLCJjb2xvci1ncmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb2xvci1yZWQiLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDQsIm5n''@;'; put 'put ''SWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG10LTEwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTEwIiwzLCJjbGljayJdLFsxLCJjb2xvci1ncmVlbiJdLFsxLCJjb2xvci1yZWQiXSxbMSwiYnRuIiwi''@;'; put 'put ''YnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImVycm9yLWZpZWxkIiwibXQtMTUiXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0''@;'; put 'put ''ZW1zLWNlbnRlciJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTUiXSxbMSwidGV4dC1jZW50ZXIiLCJ3LTEwMCJdLFsxLCJzcGlubmVyLW1kIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiXSxbImNkcy10ZXh0IiwiYm9keSIsMSwibGljZW5jZS1saW1p''@;'; put 'put ''dC1ub3RpY2UiLCJtdC0wIiwibWItMTUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJhcHAtc2lkZWJhciIpLGd0KDEsQ3Z0LDIsMCwiZGl2IiwyKSgyLFN2dCw1LDEsImRpdiIsMykoMyxGdnQsNiwyLCJuZy1jb250YWluZXIiLDQpKDQsQnZ0''@;'; put 'put ''LDUsMSwibmctY29udGFpbmVyIiw0KSxoZSgpLGRlKDUsImRpdiIsNSwwKSg3LCJkaXYiLDYpKDgsImRpdiIsNykoOSwicCIsOCksTGUoMTAsIk11bHRpIERhdGFzZXQgTG9hZCIpLGhlKCkoKSxndCgxMSxqdnQsNCwwLCJkaXYiLDkpKDEyLGhidCw1LDQsIm5nLWNvbnRhaW5lciIsNCksaGUo''@;'; put 'put ''KSgpLGRlKDEzLCJjbHItbW9kYWwiLDEwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zaG93U3VibWl0UmVhc29uTW9kYWwsTSl8fChoLnNob3dTdWJtaXRSZWFzb25Nb2RhbD1NKSxDdChNKX0pLGRlKDE0LCJoMyIsMTEpLExlKDE1KSxo''@;'; put 'put ''ZSgpLGRlKDE2LCJkaXYiLDEyKSxndCgxNyxmYnQsMiwxLCJwIiwxMyksZGUoMTgsImRpdiIsMTQpKDE5LCJsYWJlbCIsMTUpLExlKDIwLCJNZXNzYWdlIiksaGUoKSxkZSgyMSwidGV4dGFyZWEiLDE2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgu''@;'; put 'put ''c3VibWl0UmVhc29uTWVzc2FnZSxNKXx8KGguc3VibWl0UmVhc29uTWVzc2FnZT1NKSxDdChNKX0pLGhlKCkoKSxkZSgyMiwicCIsMTcpLExlKDIzLCIgVGFibGVzIHdpbGwgYmUgc2VudCBzZXF1ZW50aWFsbHksIGxvZ3Mgd2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgYWxsIHRhYmxlcyBhcmUg''@;'; put 'put ''c3VibWl0dGVkLiAiKSxoZSgpKCksZGUoMjQsImRpdiIsMTgpKDI1LCJidXR0b24iLDE5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSExKX0pLExlKDI2LCIgQ2FuY2VsICIpLGhlKCksZGUoMjcsImJ1dHRvbiIsMjApLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRUYWJsZXMoKSl9KSxMZSgyOCwiIFN1Ym1pdCAiKSxoZSgpKCkoKSxkZSgyOSwiY2xyLW1vZGFsIiwxMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguY3N2U3Vi''@;'; put 'put ''bWl0dGluZyxNKXx8KGguY3N2U3VibWl0dGluZz1NKSxDdChNKX0pLGRlKDMwLCJoMyIsMTEpLExlKDMxKSxoZSgpLGRlKDMyLCJkaXYiLDEyKSgzMywiZGl2IiwyMSksR3QoMzQsImNsci1zcGlubmVyIiwyMiksaGUoKSxkZSgzNSwicCIsMjMpLExlKDM2LCIgVGhpcyB3aWxsIHRha2UgZmV3''@;'; put 'put ''IG1vbWVudHMgIiksaGUoKSgpKCl9MiZkJiYoZmUoKSxNZSgibmdJZiIsaC5kYXRhc2V0c0xvYWRpbmcpLGZlKCksTWUoIm5nSWYiLCFoLnBhcnNlZERhdGFzZXRzLmxlbmd0aCksZmUoKSxNZSgibmdJZiIsaC5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiFoLnN1Ym1pdHRlZENzdkRhdGFzZXRz''@;'; put 'put ''Lmxlbmd0aCksZmUoKSxNZSgibmdJZiIsaC5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZlKDcpLE1lKCJuZ0lmIixudWxsPT09aC5zZWxlY3RlZEZpbGUmJiFoLnN1Ym1pdHRpbmdDc3YpLGZlKCksTWUoIm5nSWYiLG51bGwhPT1oLnNlbGVjdGVkRmlsZXx8aC5zdWJtaXR0aW5nQ3N2''@;'; put 'put ''KSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsKSxNZSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDIpLFV1KCIgU3VibWl0ICIsaC50YWJsZXNUb1N1Ym1pdC5sZW5ndGgsIiAiLDE9PT1oLnRhYmxlc1RvU3VibWl0Lmxlbmd0aD8idGFibGUiOiJ0YWJs''@;'; put 'put ''ZXMiLCIgZm9yIGFwcHJvdmFsICIpLGZlKDIpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWguSW5maW5pdHkpLGZlKDQpLHBpKCJuZ01vZGVsIixoLnN1Ym1pdFJlYXNvbk1lc3NhZ2UpLGZlKDQpLE1lKCJkaXNhYmxlZCIsaC5zdWJtaXRMb2Fk''@;'; put 'put ''aW5nKSxmZSgyKSxNZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLmNzdlN1Ym1pdHRpbmcpLE1lKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksVXUoIiBTdWJtaXR0aW5nICIsaC5jc3ZGaWxlcy5sZW5ndGgsIiBDU1YgIiwxPT09''@;'; put 'put ''aC5jc3ZGaWxlcy5sZW5ndGg/ImZpbGUiOiJmaWxlcyIsIiAiKSl9LGRlcGVuZGVuY2llczpbRF8sYzEscWwsTWQsbmwsb1ksJHMsRWgsUGQsZmcsSGwscnMsb3UsS3UsajAsUDIsZHMsakwsSWQsU2gsUUwsdjcseTcsYjcsUmQsaTQsbnMsYmEsZVpdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1''@;'; put 'put ''cm4gY30pKCl9XX1dO2xldCBnYnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pjLmZvckNo''@;'; put 'put ''aWxkKHBidCksemNdfSl9fXJldHVybiBjfSkoKTtuTigpO2xldCBtYnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9''@;'; put 'put ''QXIoe2ltcG9ydHM6W285LGdidCxSYyx6MCxHOSxSYSx4QSxuZl19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHZidD1be3BhdGg6IiIsY29tcG9uZW50OnU5dCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0YWJsZXMifSx7cGF0aDoidGFibGVzIixjb21w''@;'; put 'put ''b25lbnQ6Szl0fSx7cGF0aDoiZXhjZWwtbWFwcyIsbG9hZENoaWxkcmVuOigpPT52dnR9LHtwYXRoOiJtdWx0aS1sb2FkIixsb2FkQ2hpbGRyZW46KCk9Pm1idH1dfV07bGV0IGJidD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8''@;'; put 'put ''fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQodmJ0KSx6Y119KX19cmV0dXJuIGN9KSgpLHlidD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbYmJ0LFJjLHowLEc5LFJhLHhBLG5mXX0pfX1yZXR1cm4gY30pKCksdHRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlz''@;'; put 'put ''LmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5yb3V0ZXI9ZH1jYW5BY3RpdmF0ZShhLGQpe3JldHVybiEhKHZvaWQgMCE9PWQ/LnJvb3QucXVlcnlQYXJhbXMuZm9yY2V8fGQ/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3VwZGF0ZSIpJiZ0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVk''@;'; put 'put ''fHxudWxsIT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmITE9PT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIiksITEpfWNhbkRlYWN0aXZhdGUoYSxkLGgsZil7cmV0''@;'; put 'put ''dXJuIShoPy51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy9yZWdpc3RlciIpfHx0aGlzLmxpY2VuY2VTZXJ2aWNlLmFwcExvY2tlZC52YWx1ZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodTEpLHhyKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7bGV0IFM2PXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29r''@;'; put 'put ''czpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX07ZnVuY3Rp''@;'; put 'put ''b24gajZlKGMpe1M2PWN9Y29uc3QgejZlPS9bJjw+IiddLyxfYnQ9bmV3IFJlZ0V4cCh6NmUuc291cmNlLCJnIiksVTZlPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyx3YnQ9bmV3IFJlZ0V4cChVNmUuc291cmNlLCJnIiksQ2J0PXsiJiI6IiZh''@;'; put 'put ''bXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxaNmU9Yz0+Q2J0W2NdO2Z1bmN0aW9uIHgxKGMsbCl7aWYobCl7aWYoejZlLnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZShfYnQsWjZlKX1lbHNlIGlmKFU2ZS50ZXN0KGMpKXJldHVybiBjLnJlcGxh''@;'; put 'put ''Y2Uod2J0LFo2ZSk7cmV0dXJuIGN9Y29uc3QgU2J0PS8mKCMoPzpcZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2dpO2Z1bmN0aW9uIFc2ZShjKXtyZXR1cm4gYy5yZXBsYWNlKFNidCwobCxhKT0+ImNvbG9uIj09PShhPWEudG9Mb3dlckNhc2UoKSk/IjoiOiIjIj09PWEuY2hh''@;'; put 'put ''ckF0KDApPyJ4Ij09PWEuY2hhckF0KDEpP1N0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYS5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCthLnN1YnN0cmluZygxKSk6IiIpfWNvbnN0IE1idD0vKF58W15cW10pXF4vZztmdW5jdGlvbiBJbChjLGwpe2M9InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBjP2M6Yy5zb3VyY2UsbD1sfHwiIjtjb25zdCBhPXtyZXBsYWNlOihkLGgpPT4oaD0oaD1oLnNvdXJjZXx8aCkucmVwbGFjZShNYnQsIiQxIiksYz1jLnJlcGxhY2UoZCxoKSxhKSxnZXRSZWdleDooKT0+bmV3IFJlZ0V4cChjLGwpfTtyZXR1cm4gYX1jb25zdCB4YnQ9L1te''@;'; put 'put ''XHc6XS9nLEVidD0vXiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO2Z1bmN0aW9uIFk2ZShjLGwsYSl7aWYoYyl7bGV0IGQ7dHJ5e2Q9ZGVjb2RlVVJJQ29tcG9uZW50KFc2ZShhKSkucmVwbGFjZSh4YnQsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0Y2h7cmV0dXJuIG51bGx9aWYoMD09PWQu''@;'; put 'put ''aW5kZXhPZigiamF2YXNjcmlwdDoiKXx8MD09PWQuaW5kZXhPZigidmJzY3JpcHQ6Iil8fDA9PT1kLmluZGV4T2YoImRhdGE6IikpcmV0dXJuIG51bGx9bCYmIUVidC50ZXN0KGEpJiYoYT1mdW5jdGlvbiBEYnQoYyxsKXthTlsiICIrY118fChhTlsiICIrY109VGJ0LnRlc3QoYyk/YysiLyI6''@;'; put 'put ''c04oYywiLyIsITApKTtjb25zdCBhPS0xPT09KGM9YU5bIiAiK2NdKS5pbmRleE9mKCI6Iik7cmV0dXJuIi8vIj09PWwuc3Vic3RyaW5nKDAsMik/YT9sOmMucmVwbGFjZShBYnQsIiQxIikrbDoiLyI9PT1sLmNoYXJBdCgwKT9hP2w6Yy5yZXBsYWNlKGtidCwiJDEiKStsOmMrbH0obCxhKSk7''@;'; put 'put ''dHJ5e2E9ZW5jb2RlVVJJKGEpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIGF9Y29uc3QgYU49e30sVGJ0PS9eW146XSs6XC8qW14vXSokLyxBYnQ9L14oW146XSs6KVtcc1xTXSokLyxrYnQ9L14oW146XSs6XC8qW14vXSopW1xzXFNdKiQvLG9OPXtleGVj''@;'; put 'put ''OmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gRzZlKGMsbCl7Y29uc3QgZD1jLnJlcGxhY2UoL1x8L2csKGYsdixNKT0+e2xldCBEPSExLFo9djtmb3IoOy0tWj49MCYmIlxcIj09PU1bWl07KUQ9IUQ7cmV0dXJuIEQ/InwiOiIgfCJ9KS5zcGxpdCgvIFx8Lyk7bGV0IGg9MDtpZihkWzBdLnRyaW0o''@;'; put 'put ''KXx8ZC5zaGlmdCgpLGQubGVuZ3RoPjAmJiFkW2QubGVuZ3RoLTFdLnRyaW0oKSYmZC5wb3AoKSxkLmxlbmd0aD5sKWQuc3BsaWNlKGwpO2Vsc2UgZm9yKDtkLmxlbmd0aDxsOylkLnB1c2goIiIpO2Zvcig7aDxkLmxlbmd0aDtoKyspZFtoXT1kW2hdLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2cs''@;'; put 'put ''InwiKTtyZXR1cm4gZH1mdW5jdGlvbiBzTihjLGwsYSl7Y29uc3QgZD1jLmxlbmd0aDtpZigwPT09ZClyZXR1cm4iIjtsZXQgaD0wO2Zvcig7aDxkOyl7Y29uc3QgZj1jLmNoYXJBdChkLWgtMSk7aWYoZiE9PWx8fGEpe2lmKGY9PT1sfHwhYSlicmVhaztoKyt9ZWxzZSBoKyt9cmV0dXJuIGMu''@;'; put 'put ''c2xpY2UoMCxkLWgpfWZ1bmN0aW9uICQ2ZShjLGwsYSxkKXtjb25zdCBoPWwuaHJlZixmPWwudGl0bGU/eDEobC50aXRsZSk6bnVsbCx2PWNbMV0ucmVwbGFjZSgvXFwoW1xbXF1dKS9nLCIkMSIpO2lmKCIhIiE9PWNbMF0uY2hhckF0KDApKXtkLnN0YXRlLmluTGluaz0hMDtjb25zdCBNPXt0''@;'; put 'put ''eXBlOiJsaW5rIixyYXc6YSxocmVmOmgsdGl0bGU6Zix0ZXh0OnYsdG9rZW5zOmQuaW5saW5lVG9rZW5zKHYpfTtyZXR1cm4gZC5zdGF0ZS5pbkxpbms9ITEsTX1yZXR1cm57dHlwZToiaW1hZ2UiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6eDEodil9fWNsYXNzIGxOe2NvbnN0cnVjdG9y''@;'; put 'put ''KGwpe3RoaXMub3B0aW9ucz1sfHxTNn1zcGFjZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2submV3bGluZS5leGVjKGwpO2lmKGEmJmFbMF0ubGVuZ3RoPjApcmV0dXJue3R5cGU6InNwYWNlIixyYXc6YVswXX19Y29kZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVj''@;'; put 'put ''KGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OmFbMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9kOnNOKGQsIlxuIil9fX1mZW5jZXMobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXSxoPWZ1bmN0aW9uIExidChjLGwpe2NvbnN0IGE9Yy5tYXRjaCgvXihccyspKD86YGBgKS8pO2lmKG51bGw9PT1hKXJldHVybiBsO2NvbnN0IGQ9YVsxXTtyZXR1cm4gbC5zcGxpdCgiXG4iKS5tYXAoaD0+e2Nv''@;'; put 'put ''bnN0IGY9aC5tYXRjaCgvXlxzKy8pO2lmKG51bGw9PT1mKXJldHVybiBoO2NvbnN0W3ZdPWY7cmV0dXJuIHYubGVuZ3RoPj1kLmxlbmd0aD9oLnNsaWNlKGQubGVuZ3RoKTpofSkuam9pbigiXG4iKX0oZCxhWzNdfHwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpkLGxhbmc6YVsyXT9hWzJd''@;'; put 'put ''LnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbMl0sdGV4dDpofX19aGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0udHJpbSgpO2lmKC8jJC8udGVzdChkKSl7Y29uc3QgaD1z''@;'; put 'put ''TihkLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IWh8fC8gJC8udGVzdChoKSkmJihkPWgudHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0sZGVwdGg6YVsxXS5sZW5ndGgsdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fWhyKGwpe2NvbnN0IGE9''@;'; put 'put ''dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhyIixyYXc6YVswXX19YmxvY2txdW90ZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eICo+WyBcdF0/L2dtLCIiKSxo''@;'; put 'put ''PXRoaXMubGV4ZXIuc3RhdGUudG9wO3RoaXMubGV4ZXIuc3RhdGUudG9wPSEwO2NvbnN0IGY9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhkKTtyZXR1cm4gdGhpcy5sZXhlci5zdGF0ZS50b3A9aCx7dHlwZToiYmxvY2txdW90ZSIscmF3OmFbMF0sdG9rZW5zOmYsdGV4dDpkfX19bGlzdChsKXts''@;'; put 'put ''ZXQgYT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyhsKTtpZihhKXtsZXQgZCxoLGYsdixNLEQsWixyZSxjZSxiZSxFZSxCZSxxZT1hWzFdLnRyaW0oKTtjb25zdCBydD1xZS5sZW5ndGg+MSxwdD17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6cnQsc3RhcnQ6cnQ/K3FlLnNsaWNlKDAs''@;'; put 'put ''LTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfTtxZT1ydD9gXFxkezEsOX1cXCR7cWUuc2xpY2UoLTEpfWA6YFxcJHtxZX1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHFlPXJ0P3FlOiJbKistXSIpO2NvbnN0IGR0PW5ldyBSZWdFeHAoYF4oIHswLDN9JHtxZX0pKCg/OltcdCBdW15cXG5dKik/''@;'; put 'put ''KD86XFxufCQpKWApO2Zvcig7bCYmKEJlPSExLChhPWR0LmV4ZWMobCkpJiYhdGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KGwpKTspe2lmKGQ9YVswXSxsPWwuc3Vic3RyaW5nKGQubGVuZ3RoKSxyZT1hWzJdLnNwbGl0KCJcbiIsMSlbMF0ucmVwbGFjZSgvXlx0Ky8sdm49PiIgIi5yZXBlYXQo''@;'; put 'put ''Myp2bi5sZW5ndGgpKSxjZT1sLnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyh2PTIsRWU9cmUudHJpbUxlZnQoKSk6KHY9YVsyXS5zZWFyY2goL1teIF0vKSx2PXY+ND8xOnYsRWU9cmUuc2xpY2Uodiksdis9YVsxXS5sZW5ndGgpLEQ9ITEsIXJlJiYvXiAqJC8udGVz''@;'; put 'put ''dChjZSkmJihkKz1jZSsiXG4iLGw9bC5zdWJzdHJpbmcoY2UubGVuZ3RoKzEpLEJlPSEwKSwhQmUpe2NvbnN0IHZuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyBcdF1bXlxcbl0qKT8oPzpcXG58JCkpYCksQ249bmV3IFJl''@;'; put 'put ''Z0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKWApLHRuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSg/OlxgXGBcYHx+fn4pYCksTW49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgu''@;'; put 'put ''bWluKDMsdi0xKX19I2ApO2Zvcig7bCYmKGJlPWwuc3BsaXQoIlxuIiwxKVswXSxjZT1iZSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihjZT1jZS5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikpLCEodG4udGVzdChjZSl8fE1uLnRlc3QoY2UpfHx2bi50ZXN0KGNlKXx8''@;'; put 'put ''Q24udGVzdChsKSkpOyl7aWYoY2Uuc2VhcmNoKC9bXiBdLyk+PXZ8fCFjZS50cmltKCkpRWUrPSJcbiIrY2Uuc2xpY2Uodik7ZWxzZXtpZihEfHxyZS5zZWFyY2goL1teIF0vKT49NHx8dG4udGVzdChyZSl8fE1uLnRlc3QocmUpfHxDbi50ZXN0KHJlKSlicmVhaztFZSs9IlxuIitjZX0hRCYm''@;'; put 'put ''IWNlLnRyaW0oKSYmKEQ9ITApLGQrPWJlKyJcbiIsbD1sLnN1YnN0cmluZyhiZS5sZW5ndGgrMSkscmU9Y2Uuc2xpY2Uodil9fXB0Lmxvb3NlfHwoWj9wdC5sb29zZT0hMDovXG4gKlxuICokLy50ZXN0KGQpJiYoWj0hMCkpLHRoaXMub3B0aW9ucy5nZm0mJihoPS9eXFtbIHhYXVxdIC8uZXhl''@;'; put 'put ''YyhFZSksaCYmKGY9IlsgXSAiIT09aFswXSxFZT1FZS5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSkpLHB0Lml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OmQsdGFzazohIWgsY2hlY2tlZDpmLGxvb3NlOiExLHRleHQ6RWV9KSxwdC5yYXcrPWR9cHQuaXRlbXNbcHQuaXRlbXMu''@;'; put 'put ''bGVuZ3RoLTFdLnJhdz1kLnRyaW1SaWdodCgpLHB0Lml0ZW1zW3B0Lml0ZW1zLmxlbmd0aC0xXS50ZXh0PUVlLnRyaW1SaWdodCgpLHB0LnJhdz1wdC5yYXcudHJpbVJpZ2h0KCk7Y29uc3QgSnQ9cHQuaXRlbXMubGVuZ3RoO2ZvcihNPTA7TTxKdDtNKyspaWYodGhpcy5sZXhlci5zdGF0ZS50''@;'; put 'put ''b3A9ITEscHQuaXRlbXNbTV0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMocHQuaXRlbXNbTV0udGV4dCxbXSksIXB0Lmxvb3NlKXtjb25zdCB2bj1wdC5pdGVtc1tNXS50b2tlbnMuZmlsdGVyKHRuPT4ic3BhY2UiPT09dG4udHlwZSksQ249dm4ubGVuZ3RoPjAmJnZuLnNvbWUodG49''@;'; put 'put ''Pi9cbi4qXG4vLnRlc3QodG4ucmF3KSk7cHQubG9vc2U9Q259aWYocHQubG9vc2UpZm9yKE09MDtNPEp0O00rKylwdC5pdGVtc1tNXS5sb29zZT0hMDtyZXR1cm4gcHR9fWh0bWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJo''@;'; put 'put ''dG1sIixibG9jazohMCxyYXc6YVswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWFbMV18fCJzY3JpcHQiPT09YVsxXXx8InN0eWxlIj09PWFbMV0pLHRleHQ6YVswXX07aWYodGhpcy5vcHRpb25zLnNhbml0aXplKXtjb25zdCBoPXRoaXMub3B0aW9ucy5zYW5pdGl6''@;'; put 'put ''ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihhWzBdKTp4MShhWzBdKTtkLnR5cGU9InBhcmFncmFwaCIsZC50ZXh0PWgsZC50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoaCl9cmV0dXJuIGR9fWRlZihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMobCk7aWYoYSl7Y29uc3Qg''@;'; put 'put ''ZD1hWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxoPWFbMl0/YVsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixmPWFbM10/YVszXS5zdWJzdHJpbmcoMSxhWzNdLmxlbmd0aC0xKS5yZXBs''@;'; put 'put ''YWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbM107cmV0dXJue3R5cGU6ImRlZiIsdGFnOmQscmF3OmFbMF0saHJlZjpoLHRpdGxlOmZ9fX10YWJsZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJ0YWJs''@;'; put 'put ''ZSIsaGVhZGVyOkc2ZShhWzFdKS5tYXAoaD0+KHt0ZXh0Omh9KSksYWxpZ246YVsyXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLHJvd3M6YVszXSYmYVszXS50cmltKCk/YVszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKS5zcGxpdCgiXG4iKTpbXX07aWYoZC5o''@;'; put 'put ''ZWFkZXIubGVuZ3RoPT09ZC5hbGlnbi5sZW5ndGgpe2QucmF3PWFbMF07bGV0IGYsdixNLEQsaD1kLmFsaWduLmxlbmd0aDtmb3IoZj0wO2Y8aDtmKyspZC5hbGlnbltmXT0vXiAqLSs6ICokLy50ZXN0KGQuYWxpZ25bZl0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3QoZC5hbGlnbltmXSk/''@;'; put 'put ''ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChkLmFsaWduW2ZdKT8ibGVmdCI6bnVsbDtmb3IoaD1kLnJvd3MubGVuZ3RoLGY9MDtmPGg7ZisrKWQucm93c1tmXT1HNmUoZC5yb3dzW2ZdLGQuaGVhZGVyLmxlbmd0aCkubWFwKFo9Pih7dGV4dDpafSkpO2ZvcihoPWQuaGVhZGVyLmxlbmd0aCx2''@;'; put 'put ''PTA7djxoO3YrKylkLmhlYWRlclt2XS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZC5oZWFkZXJbdl0udGV4dCk7Zm9yKGg9ZC5yb3dzLmxlbmd0aCx2PTA7djxoO3YrKylmb3IoRD1kLnJvd3Nbdl0sTT0wO008RC5sZW5ndGg7TSsrKURbTV0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKERb''@;'; put 'put ''TV0udGV4dCk7cmV0dXJuIGR9fX1saGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDoiPSI9PT1hWzJdLmNoYXJBdCgwKT8xOjIsdGV4dDphWzFdLHRva2Vuczp0aGlzLmxl''@;'; put 'put ''eGVyLmlubGluZShhWzFdKX19cGFyYWdyYXBoKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhsKTtpZihhKXtjb25zdCBkPSJcbiI9PT1hWzFdLmNoYXJBdChhWzFdLmxlbmd0aC0xKT9hWzFdLnNsaWNlKDAsLTEpOmFbMV07cmV0dXJue3R5cGU6InBhcmFncmFw''@;'; put 'put ''aCIscmF3OmFbMF0sdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fXRleHQobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6YVswXSx0ZXh0OmFbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFb''@;'; put 'put ''MF0pfX1lc2NhcGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzphWzBdLHRleHQ6eDEoYVsxXSl9fXRhZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKGwpO2lmKGEpcmV0dXJuIXRo''@;'; put 'put ''aXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmlu''@;'; put 'put ''UmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pJiYodGhp''@;'; put 'put ''cy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRleHQiOiJodG1sIixyYXc6YVswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0''@;'; put 'put ''aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGFbMF0pOngxKGFbMF0pOmFbMF19fWxpbmsobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzJdLnRyaW0oKTtpZigh''@;'; put 'put ''dGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3QoZCkpe2lmKCEvPiQvLnRlc3QoZCkpcmV0dXJuO2NvbnN0IHY9c04oZC5zbGljZSgwLC0xKSwiXFwiKTtpZigoZC5sZW5ndGgtdi5sZW5ndGgpJTI9PTApcmV0dXJufWVsc2V7Y29uc3Qgdj1mdW5jdGlvbiBJYnQoYyxsKXtpZigtMT09''@;'; put 'put ''PWMuaW5kZXhPZihsWzFdKSlyZXR1cm4tMTtjb25zdCBhPWMubGVuZ3RoO2xldCBkPTAsaD0wO2Zvcig7aDxhO2grKylpZigiXFwiPT09Y1toXSloKys7ZWxzZSBpZihjW2hdPT09bFswXSlkKys7ZWxzZSBpZihjW2hdPT09bFsxXSYmKGQtLSxkPDApKXJldHVybiBoO3JldHVybi0xfShhWzJd''@;'; put 'put ''LCIoKSIpO2lmKHY+LTEpe2NvbnN0IEQ9KDA9PT1hWzBdLmluZGV4T2YoIiEiKT81OjQpK2FbMV0ubGVuZ3RoK3Y7YVsyXT1hWzJdLnN1YnN0cmluZygwLHYpLGFbMF09YVswXS5zdWJzdHJpbmcoMCxEKS50cmltKCksYVszXT0iIn19bGV0IGg9YVsyXSxmPSIiO2lmKHRoaXMub3B0aW9ucy5w''@;'; put 'put ''ZWRhbnRpYyl7Y29uc3Qgdj0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMoaCk7diYmKGg9dlsxXSxmPXZbM10pfWVsc2UgZj1hWzNdP2FbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIGg9aC50cmltKCksL148Ly50ZXN0KGgpJiYoaD10aGlzLm9wdGlvbnMucGVkYW50aWMm''@;'; put 'put ''JiEvPiQvLnRlc3QoZCk/aC5zbGljZSgxKTpoLnNsaWNlKDEsLTEpKSwkNmUoYSx7aHJlZjpoJiZoLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIiksdGl0bGU6ZiYmZi5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpfSxhWzBdLHRoaXMubGV4''@;'; put 'put ''ZXIpfX1yZWZsaW5rKGwsYSl7bGV0IGQ7aWYoKGQ9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGwpKXx8KGQ9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMobCkpKXtsZXQgaD0oZFsyXXx8ZFsxXSkucmVwbGFjZSgvXHMrL2csIiAiKTtpZihoPWFbaC50b0xvd2VyQ2FzZSgp''@;'; put 'put ''XSwhaCl7Y29uc3QgZj1kWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3OmYsdGV4dDpmfX1yZXR1cm4gJDZlKGQsaCxkWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9uZyhsLGEsZD0iIil7bGV0IGg9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWMobCk7aWYo''@;'; put 'put ''ISghaHx8aFszXSYmZC5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKSYmKCFoWzFdJiYhaFsyXXx8IWR8fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMoZCkpKXtjb25zdCB2PWhbMF0ubGVuZ3RoLTE7bGV0IE0sRCxaPXYscmU9MDtjb25zdCBjZT0iKiI9PT1oWzBdWzBdP3RoaXMu''@;'; put 'put ''cnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbUFzdDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1VbmQ7Zm9yKGNlLmxhc3RJbmRleD0wLGE9YS5zbGljZSgtMSpsLmxlbmd0aCt2KTtudWxsIT0oaD1jZS5leGVjKGEpKTspe2lmKE09aFsxXXx8aFsyXXx8aFszXXx8aFs0XXx8''@;'; put 'put ''aFs1XXx8aFs2XSwhTSljb250aW51ZTtpZihEPU0ubGVuZ3RoLGhbM118fGhbNF0pe1orPUQ7Y29udGludWV9aWYoKGhbNV18fGhbNl0pJiZ2JTMmJiEoKHYrRCklMykpe3JlKz1EO2NvbnRpbnVlfWlmKFotPUQsWj4wKWNvbnRpbnVlO0Q9TWF0aC5taW4oRCxEK1orcmUpO2NvbnN0IGJlPWwu''@;'; put 'put ''c2xpY2UoMCx2K2guaW5kZXgrRCsxKTtpZihNYXRoLm1pbih2LEQpJTIpe2NvbnN0IEJlPWJlLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OmJlLHRleHQ6QmUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKEJlKX19Y29uc3QgRWU9YmUuc2xpY2UoMiwtMik7cmV0dXJu''@;'; put 'put ''e3R5cGU6InN0cm9uZyIscmF3OmJlLHRleHQ6RWUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKEVlKX19fX1jb2Rlc3BhbihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhsKTtpZihhKXtsZXQgZD1hWzJdLnJlcGxhY2UoL1xuL2csIiAiKTtjb25zdCBoPS9b''@;'; put 'put ''XiBdLy50ZXN0KGQpLGY9L14gLy50ZXN0KGQpJiYvICQvLnRlc3QoZCk7cmV0dXJuIGgmJmYmJihkPWQuc3Vic3RyaW5nKDEsZC5sZW5ndGgtMSkpLGQ9eDEoZCwhMCkse3R5cGU6ImNvZGVzcGFuIixyYXc6YVswXSx0ZXh0OmR9fX1icihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmJy''@;'; put 'put ''LmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiYnIiLHJhdzphWzBdfX1kZWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJkZWwiLHJhdzphWzBdLHRleHQ6YVsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoYVsyXSl9''@;'; put 'put ''fWF1dG9saW5rKGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKGwpO2lmKGQpe2xldCBoLGY7cmV0dXJuIkAiPT09ZFsyXT8oaD14MSh0aGlzLm9wdGlvbnMubWFuZ2xlP2EoZFsxXSk6ZFsxXSksZj0ibWFpbHRvOiIraCk6KGg9eDEoZFsxXSksZj1oKSx7dHlw''@;'; put 'put ''ZToibGluayIscmF3OmRbMF0sdGV4dDpoLGhyZWY6Zix0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6aCx0ZXh0Omh9XX19fXVybChsLGEpe2xldCBkO2lmKGQ9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWMobCkpe2xldCBoLGY7aWYoIkAiPT09ZFsyXSloPXgxKHRoaXMub3B0aW9ucy5tYW5n''@;'; put 'put ''bGU/YShkWzBdKTpkWzBdKSxmPSJtYWlsdG86IitoO2Vsc2V7bGV0IHY7ZG97dj1kWzBdLGRbMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGRbMF0pWzBdfXdoaWxlKHYhPT1kWzBdKTtoPXgxKGRbMF0pLGY9Ind3dy4iPT09ZFsxXT8iaHR0cDovLyIrZFswXTpkWzBdfXJl''@;'; put 'put ''dHVybnt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpoLHRleHQ6aH1dfX19aW5saW5lVGV4dChsLGEpe2NvbnN0IGQ9dGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKGwpO2lmKGQpe2xldCBoO3JldHVybiBoPXRoaXMubGV4ZXIu''@;'; put 'put ''c3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGRbMF0pOngxKGRbMF0pOmRbMF06eDEodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2EoZFswXSk6ZFswXSkse3R5cGU6InRleHQiLHJhdzpk''@;'; put 'put ''WzBdLHRleHQ6aH19fX1jb25zdCBtbz17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtc''@;'; put 'put ''c1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkv''@;'; put 'put ''LGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xc''@;'; put 'put ''MT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxz''@;'; put 'put ''XFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4''@;'; put 'put ''dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8g''@;'; put 'put ''Kig/OlxuK3wkKS8sdGFibGU6b04sbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4oPyFcbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8''@;'; put 'put ''aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwoW14oKV0qXCkpL307bW8uZGVmPUlsKG1vLmRl''@;'; put 'put ''ZikucmVwbGFjZSgibGFiZWwiLG1vLl9sYWJlbCkucmVwbGFjZSgidGl0bGUiLG1vLl90aXRsZSkuZ2V0UmVnZXgoKSxtby5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sbW8ubGlzdEl0ZW1TdGFydD1JbCgvXiggKikoYnVsbCkgKi8pLnJlcGxhY2UoImJ1bGwiLG1vLmJ1bGxldCku''@;'; put 'put ''Z2V0UmVnZXgoKSxtby5saXN0PUlsKG1vLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxtby5idWxsZXQpLnJlcGxhY2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkpIikucmVwbGFjZSgiZGVmIiwiXFxuKyg/PSIrbW8u''@;'; put 'put ''ZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksbW8uX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRp''@;'; put 'put ''b258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8''@;'; put 'put ''c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIsbW8uX2NvbW1lbnQ9LzwhLS0oPyEtPz4pW1xzXFNdKj8oPzotLT58JCkvLG1vLmh0bWw9SWwobW8uaHRtbCwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLG1vLl9jb21tZW50KS5yZXBsYWNlKCJ0''@;'; put 'put ''YWciLG1vLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksbW8ubGhlYWRpbmc9SWwobW8ubGhlYWRpbmcpLnJlcGxhY2UoL2J1bGwvZyxt''@;'; put 'put ''by5idWxsZXQpLmdldFJlZ2V4KCksbW8ucGFyYWdyYXBoPUlsKG1vLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixtby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9j''@;'; put 'put ''a3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/''@;'; put 'put ''Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsbW8uX3RhZykuZ2V0UmVnZXgoKSxtby5ibG9ja3F1b3RlPUlsKG1vLmJsb2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIsbW8ucGFyYWdyYXBoKS5nZXRSZWdleCgpLG1vLm5vcm1hbD17Li4u''@;'; put 'put ''bW99LG1vLmdmbT17Li4ubW8ubm9ybWFsLHRhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHswLDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpcXHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0''@;'; put 'put ''fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn0sbW8uZ2ZtLnRhYmxlPUlsKG1vLmdmbS50YWJsZSkucmVwbGFjZSgiaHIiLG1vLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7''@;'; put 'put ''NH1bXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpz''@;'; put 'put ''Y3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLG1vLl90YWcpLmdldFJlZ2V4KCksbW8uZ2ZtLnBhcmFncmFwaD1JbChtby5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsbW8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgi''@;'; put 'put ''fGxoZWFkaW5nIiwiIikucmVwbGFjZSgidGFibGUiLG1vLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwz''@;'; put 'put ''fSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLG1vLl90YWcpLmdldFJlZ2V4KCksbW8ucGVkYW50aWM9ey4uLm1vLm5vcm1hbCxodG1sOkls''@;'; put 'put ''KCJeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzpcIlteXCJdKlwifCdbXiddKid8XFxzW14nXCIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSkiKS5yZXBsYWNlKCJjb21tZW50Iixtby5f''@;'; put 'put ''Y29tbWVudCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcr''@;'; put 'put ''KD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6b04sbGhlYWRpbmc6L14oLis/''@;'; put 'put ''KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6SWwobW8ubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixtby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiAqI3sxLDZ9ICpbXlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIixtby5saGVhZGluZykucmVwbGFjZSgiYmxv''@;'; put 'put ''Y2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJ8ZmVuY2VzIiwiIikucmVwbGFjZSgifGxpc3QiLCIiKS5yZXBsYWNlKCJ8aHRtbCIsIiIpLmdldFJlZ2V4KCl9O2NvbnN0IEFhPXtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5r''@;'; put 'put ''Oi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOm9OLHRhZzoiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNc''@;'; put 'put ''XFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iLGxpbms6L14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8scmVmbGluazovXiE/XFsobGFiZWwpXF1cWyhyZWYpXF0vLG5vbGluazovXiE/XFsocmVmKVxdKD86XFtcXSk/LyxyZWZsaW5r''@;'; put 'put ''U2VhcmNoOiJyZWZsaW5rfG5vbGluayg/IVxcKCkiLGVtU3Ryb25nOntsRGVsaW06L14oPzpcKisoPzooKD8hXCopW3B1bmN0XSl8W15ccypdKSl8Xl8rKD86KCg/IV8pW3B1bmN0XSl8KFteXHNfXSkpLyxyRGVsaW1Bc3Q6L15bXl8qXSo/X19bXl8qXSo/XCpbXl8qXSo/KD89X18pfFteKl0r''@;'; put 'put ''KD89W14qXSl8KD8hXCopW3B1bmN0XShcKispKD89W1xzXXwkKXxbXnB1bmN0XHNdKFwqKykoPyFcKikoPz1bcHVuY3Rcc118JCl8KD8hXCopW3B1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKXxbXHNdKFwqKykoPyFcKikoPz1bcHVuY3RdKXwoPyFcKilbcHVuY3RdKFwqKykoPyFcKikoPz1b''@;'; put 'put ''cHVuY3RdKXxbXnB1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKS8sckRlbGltVW5kOi9eW15fKl0qP1wqXCpbXl8qXSo/X1teXypdKj8oPz1cKlwqKXxbXl9dKyg/PVteX10pfCg/IV8pW3B1bmN0XShfKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXyspKD8hXykoPz1bcHVuY3Rcc118JCl8KD8h''@;'; put 'put ''XylbcHVuY3Rcc10oXyspKD89W15wdW5jdFxzXSl8W1xzXShfKykoPyFfKSg/PVtwdW5jdF0pfCg/IV8pW3B1bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pL30sY29kZTovXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLGJyOi9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLGRlbDpv''@;'; put 'put ''Tix0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99O2Z1bmN0aW9uIE9idChjKXtyZXR1cm4gYy5yZXBsYWNlKC8tLS0v''@;'; put 'put ''ZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUyMDEzIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgv''@;'; put 'put ''Ii9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9nLCJcdTIwMjYiKX1mdW5jdGlvbiBLNmUoYyl7bGV0IGEsZCxsPSIiO2NvbnN0IGg9Yy5sZW5ndGg7Zm9yKGE9MDthPGg7YSsrKWQ9Yy5jaGFyQ29kZUF0KGEpLE1hdGgucmFuZG9tKCk+LjUmJihkPSJ4IitkLnRvU3RyaW5nKDE2KSksbCs9''@;'; put 'put ''IiYjIitkKyI7IjtyZXR1cm4gbH1BYS5fcHVuY3R1YXRpb249IlxccHtQfSQrPD0+YF58fiIsQWEucHVuY3R1YXRpb249SWwoQWEucHVuY3R1YXRpb24sInUiKS5yZXBsYWNlKC9wdW5jdHVhdGlvbi9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5ibG9ja1NraXA9L1xbW15bXF1d''@;'; put 'put ''Kj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2csQWEuYW55UHVuY3R1YXRpb249L1xcW3B1bmN0XS9nLEFhLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLEFhLl9jb21tZW50PUlsKG1vLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdl''@;'; put 'put ''eCgpLEFhLmVtU3Ryb25nLmxEZWxpbT1JbChBYS5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBsYWNlKC9wdW5jdC9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5lbVN0cm9uZy5yRGVsaW1Bc3Q9SWwoQWEuZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2cs''@;'; put 'put ''QWEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEFhLmVtU3Ryb25nLnJEZWxpbVVuZD1JbChBYS5lbVN0cm9uZy5yRGVsaW1VbmQsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuYW55UHVuY3R1YXRpb249SWwoQWEuYW55UHVuY3R1YXRpb24s''@;'; put 'put ''Imd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuX2VzY2FwZXM9SWwoQWEuX2VzY2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsx''@;'; put 'put ''LDMxfS8sQWEuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8sQWEuYXV0''@;'; put 'put ''b2xpbms9SWwoQWEuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsQWEuX3NjaGVtZSkucmVwbGFjZSgiZW1haWwiLEFhLl9lbWFpbCkuZ2V0UmVnZXgoKSxBYS5fYXR0cmlidXRlPS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMq''@;'; put 'put ''W15ccyInPTw+YF0rKT8vLEFhLnRhZz1JbChBYS50YWcpLnJlcGxhY2UoImNvbW1lbnQiLEFhLl9jb21tZW50KS5yZXBsYWNlKCJhdHRyaWJ1dGUiLEFhLl9hdHRyaWJ1dGUpLmdldFJlZ2V4KCksQWEuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtc''@;'; put 'put ''XVxcYF0pKj8vLEFhLl9ocmVmPS88KD86XFwufFteXG48PlxcXSkrPnxbXlxzXHgwMC1ceDFmXSovLEFhLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLEFhLmxpbms9SWwoQWEubGluaykucmVwbGFjZSgibGFiZWwi''@;'; put 'put ''LEFhLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsQWEuX2hyZWYpLnJlcGxhY2UoInRpdGxlIixBYS5fdGl0bGUpLmdldFJlZ2V4KCksQWEucmVmbGluaz1JbChBYS5yZWZsaW5rKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5yZXBsYWNlKCJyZWYiLG1vLl9sYWJlbCkuZ2V0UmVnZXgoKSxB''@;'; put 'put ''YS5ub2xpbms9SWwoQWEubm9saW5rKS5yZXBsYWNlKCJyZWYiLG1vLl9sYWJlbCkuZ2V0UmVnZXgoKSxBYS5yZWZsaW5rU2VhcmNoPUlsKEFhLnJlZmxpbmtTZWFyY2gsImciKS5yZXBsYWNlKCJyZWZsaW5rIixBYS5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLEFhLm5vbGluaykuZ2V0UmVn''@;'; put 'put ''ZXgoKSxBYS5ub3JtYWw9ey4uLkFhfSxBYS5wZWRhbnRpYz17Li4uQWEubm9ybWFsLHN0cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikv''@;'; put 'put ''ZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxlbmRBc3Q6L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazpJbCgvXiE/XFsobGFiZWwp''@;'; put 'put ''XF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5nZXRSZWdleCgpLHJlZmxpbms6SWwoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLEFhLl9sYWJlbCkuZ2V0UmVnZXgoKX0sQWEuZ2ZtPXsuLi5BYS5ub3JtYWwsZXNjYXBlOkls''@;'; put 'put ''KEFhLmVzY2FwZSkucmVwbGFjZSgiXSkiLCJ+fF0pIikuZ2V0UmVnZXgoKSxfZXh0ZW5kZWRfZW1haWw6L1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlwuW2EtekEtWjAtOS1fXSpbYS16QS1aMC05XSkrKD8hWy1fXSkvLHVybDovXigoPzpmdHB8aHR0cHM/KTpcL1wvfHd3''@;'; put 'put ''d1wuKSg/OlthLXpBLVowLTlcLV0rXC4/KStbXlxzPF0qfF5lbWFpbC8sX2JhY2twZWRhbDovKD86W14/IS4sOjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsqXycifildKyg/ISQpKSsvLGRlbDovXih+fj8pKD89W15cc35dKShbXHNcU10qP1teXHN+''@;'; put 'put ''XSlcMSg/PVtefl18JCkvLHRleHQ6L14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cbil8KD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCl8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCp+X118XGJffGh0dHBzPzpcL1wvfGZ0cDpcL1wvfHd3d1wufCQpfFteIF0oPz0gezIsfVxu''@;'; put 'put ''KXxbXmEtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0oPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKSkpL30sQWEuZ2ZtLnVybD1JbChBYS5nZm0udXJsLCJpIikucmVwbGFjZSgiZW1haWwiLEFhLmdmbS5fZXh0ZW5kZWRfZW1haWwpLmdldFJlZ2V4KCksQWEuYnJl''@;'; put 'put ''YWtzPXsuLi5BYS5nZm0sYnI6SWwoQWEuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0OklsKEFhLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2UoL1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX07Y2xhc3MgYTR7Y29uc3RydWN0''@;'; put 'put ''b3IobCl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9bHx8UzYsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgbE4sdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2Vu''@;'; put 'put ''aXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtjb25zdCBhPXtibG9jazptby5ub3JtYWwsaW5saW5lOkFh''@;'; put 'put ''Lm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhhLmJsb2NrPW1vLnBlZGFudGljLGEuaW5saW5lPUFhLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoYS5ibG9jaz1tby5nZm0sYS5pbmxpbmU9dGhpcy5vcHRpb25zLmJyZWFrcz9BYS5icmVha3M6QWEuZ2ZtKSx0aGlzLnRva2Vu''@;'; put 'put ''aXplci5ydWxlcz1hfXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6bW8saW5saW5lOkFhfX1zdGF0aWMgbGV4KGwsYSl7cmV0dXJuIG5ldyBhNChhKS5sZXgobCl9c3RhdGljIGxleElubGluZShsLGEpe3JldHVybiBuZXcgYTQoYSkuaW5saW5lVG9rZW5zKGwpfWxleChsKXtsZXQg''@;'; put 'put ''YTtmb3IobD1sLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5zKGwsdGhpcy50b2tlbnMpO2E9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRva2VucyhhLnNyYyxhLnRva2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKGwsYT1b''@;'; put 'put ''XSl7bGV0IGQsaCxmLHY7Zm9yKGw9dGhpcy5vcHRpb25zLnBlZGFudGljP2wucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL14gKyQvZ20sIiIpOmwucmVwbGFjZSgvXiggKikoXHQrKS9nbSwoTSxELFopPT5EKyIgICAgIi5yZXBlYXQoWi5sZW5ndGgpKTtsOylpZighKHRoaXMub3B0''@;'; put 'put ''aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShNPT4hIShkPU0uY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtp''@;'; put 'put ''ZihkPXRoaXMudG9rZW5pemVyLnNwYWNlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksMT09PWQucmF3Lmxlbmd0aCYmYS5sZW5ndGg+MD9hW2EubGVuZ3RoLTFdLnJhdys9IlxuIjphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2RlKGwpKXtsPWwuc3Vi''@;'; put 'put ''c3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP2EucHVzaChkKTooaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVu''@;'; put 'put ''Z3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZmVuY2VzKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgp''@;'; put 'put ''LGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmhyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChk''@;'; put 'put ''KTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpc3QobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5odG1sKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlm''@;'; put 'put ''KGQ9dGhpcy50b2tlbml6ZXIuZGVmKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP3RoaXMudG9rZW5zLmxpbmtzW2QudGFnXXx8KHRoaXMudG9rZW5zLmxpbmtzW2QudGFnXT17''@;'; put 'put ''aHJlZjpkLmhyZWYsdGl0bGU6ZC50aXRsZX0pOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC5yYXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhYmxlKGwpKXtsPWwu''@;'; put 'put ''c3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGhlYWRpbmcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlv''@;'; put 'put ''bnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrKXtsZXQgTT0xLzA7Y29uc3QgRD1sLnNsaWNlKDEpO2xldCBaO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmdW5jdGlvbihyZSl7Wj1yZS5jYWxsKHtsZXhlcjp0aGlzfSxEKSwibnVtYmVyIj09dHlwZW9mIFomJlo+''@;'; put 'put ''PTAmJihNPU1hdGgubWluKE0sWikpfSksTTwxLzAmJk0+PTAmJihmPWwuc3Vic3RyaW5nKDAsTSsxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihkPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChmKSkpe2g9YVthLmxlbmd0aC0xXSx2JiYicGFyYWdyYXBoIj09PWgudHlwZT8oaC5yYXcrPSJcbiIr''@;'; put 'put ''ZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpLHY9Zi5sZW5ndGghPT1sLmxlbmd0aCxsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCk7''@;'; put 'put ''Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50ZXh0KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRo''@;'; put 'put ''aXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IE09IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJv''@;'; put 'put ''cihNKTticmVha310aHJvdyBuZXcgRXJyb3IoTSl9fXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxhfWlubGluZShsLGE9W10pe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzpsLHRva2VuczphfSksYX1pbmxpbmVUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsTSxELFosdj1sO2lm''@;'; put 'put ''KHRoaXMudG9rZW5zLmxpbmtzKXtjb25zdCByZT1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYocmUubGVuZ3RoPjApZm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKHYpKTspcmUuaW5jbHVkZXMoTVswXS5zbGljZShN''@;'; put 'put ''WzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYodj12LnNsaWNlKDAsTS5pbmRleCkrIlsiKyJhIi5yZXBlYXQoTVswXS5sZW5ndGgtMikrIl0iK3Yuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oTT10aGlz''@;'; put 'put ''LnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWModikpOyl2PXYuc2xpY2UoMCxNLmluZGV4KSsiWyIrImEiLnJlcGVhdChNWzBdLmxlbmd0aC0yKSsiXSIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxs''@;'; put 'put ''IT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyh2KSk7KXY9di5zbGljZSgwLE0uaW5kZXgpKyIrKyIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2w7KWlmKER8fChaPSIi''@;'; put 'put ''KSxEPSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUocmU9PiEhKGQ9cmUuY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0''@;'; put 'put ''aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLmVzY2FwZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0''@;'; put 'put ''aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saW5rKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVl''@;'; put 'put ''fWlmKGQ9dGhpcy50b2tlbml6ZXIucmVmbGluayhsLHRoaXMudG9rZW5zLmxpbmtzKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1''@;'; put 'put ''c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5lbVN0cm9uZyhsLHYsWikpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2Rlc3BhbihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVz''@;'; put 'put ''aChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVsKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlm''@;'; put 'put ''KGQ9dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsobCxLNmUpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKGQ9dGhpcy50b2tlbml6ZXIudXJsKGwsSzZlKSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxh''@;'; put 'put ''LnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSl7bGV0IHJlPTEvMDtjb25zdCBjZT1sLnNsaWNlKDEpO2xldCBiZTt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKEVlKXtiZT1FZS5jYWxsKHtsZXhlcjp0aGlzfSxjZSksIm51bWJlciI9PXR5cGVvZiBiZSYmYmU+PTAmJihyZT1NYXRoLm1pbihyZSxiZSkpfSkscmU8MS8wJiZyZT49MCYmKGY9bC5zdWJzdHJpbmcoMCxyZSsxKSl9aWYoZD10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0''@;'; put 'put ''KGYsT2J0KSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLCJfIiE9PWQucmF3LnNsaWNlKC0xKSYmKFo9ZC5yYXcuc2xpY2UoLTEpKSxEPSEwLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRp''@;'; put 'put ''bnVlfWlmKGwpe2NvbnN0IHJlPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrbC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IocmUpO2JyZWFrfXRocm93IG5ldyBFcnJvcihyZSl9fXJldHVybiBhfX1jbGFzcyBjTntjb25zdHJ1Y3RvcihsKXt0''@;'; put 'put ''aGlzLm9wdGlvbnM9bHx8UzZ9Y29kZShsLGEsZCl7Y29uc3QgaD0oYXx8IiIpLm1hdGNoKC9cUyovKVswXTtpZih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KXtjb25zdCBmPXRoaXMub3B0aW9ucy5oaWdobGlnaHQobCxoKTtudWxsIT1mJiZmIT09bCYmKGQ9ITAsbD1mKX1yZXR1cm4gbD1sLnJl''@;'; put 'put ''cGxhY2UoL1xuJC8sIiIpKyJcbiIsaD8nPHByZT48Y29kZSBjbGFzcz0iJyt0aGlzLm9wdGlvbnMubGFuZ1ByZWZpeCt4MShoKSsnIj4nKyhkP2w6eDEobCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKGQ/bDp4MShsLCEwKSkrIjwvY29kZT48L3ByZT5cbiJ9YmxvY2tx''@;'; put 'put ''dW90ZShsKXtyZXR1cm5gPGJsb2NrcXVvdGU+XG4ke2x9PC9ibG9ja3F1b3RlPlxuYH1odG1sKGwsYSl7cmV0dXJuIGx9aGVhZGluZyhsLGEsZCxoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhlYWRlcklkcz9gPGgke2F9IGlkPSIke3RoaXMub3B0aW9ucy5oZWFkZXJQcmVmaXgraC5zbHVnKGQp''@;'; put 'put ''fSI+JHtsfTwvaCR7YX0+XG5gOmA8aCR7YX0+JHtsfTwvaCR7YX0+XG5gfWhyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9bGlzdChsLGEsZCl7Y29uc3QgaD1hPyJvbCI6InVsIjtyZXR1cm4iPCIraCsoYSYmMSE9PWQ/JyBzdGFydD0iJytkKyciJzoi''@;'; put 'put ''IikrIj5cbiIrbCsiPC8iK2grIj5cbiJ9bGlzdGl0ZW0obCl7cmV0dXJuYDxsaT4ke2x9PC9saT5cbmB9Y2hlY2tib3gobCl7cmV0dXJuIjxpbnB1dCAiKyhsPydjaGVja2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCInKyh0aGlzLm9wdGlvbnMueGh0bWw/IiAvIjoi''@;'; put 'put ''IikrIj4gIn1wYXJhZ3JhcGgobCl7cmV0dXJuYDxwPiR7bH08L3A+XG5gfXRhYmxlKGwsYSl7cmV0dXJuIGEmJihhPWA8dGJvZHk+JHthfTwvdGJvZHk+YCksIjx0YWJsZT5cbjx0aGVhZD5cbiIrbCsiPC90aGVhZD5cbiIrYSsiPC90YWJsZT5cbiJ9dGFibGVyb3cobCl7cmV0dXJuYDx0cj5c''@;'; put 'put ''biR7bH08L3RyPlxuYH10YWJsZWNlbGwobCxhKXtjb25zdCBkPWEuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4oYS5hbGlnbj9gPCR7ZH0gYWxpZ249IiR7YS5hbGlnbn0iPmA6YDwke2R9PmApK2wrYDwvJHtkfT5cbmB9c3Ryb25nKGwpe3JldHVybmA8c3Ryb25nPiR7bH08L3N0cm9uZz5gfWVt''@;'; put 'put ''KGwpe3JldHVybmA8ZW0+JHtsfTwvZW0+YH1jb2Rlc3BhbihsKXtyZXR1cm5gPGNvZGU+JHtsfTwvY29kZT5gfWJyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGJyLz4iOiI8YnI+In1kZWwobCl7cmV0dXJuYDxkZWw+JHtsfTwvZGVsPmB9bGluayhsLGEsZCl7aWYobnVsbD09PShs''@;'; put 'put ''PVk2ZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBkO2xldCBoPSc8YSBocmVmPSInK2wrJyInO3JldHVybiBhJiYoaCs9JyB0aXRsZT0iJythKyciJyksaCs9Ij4iK2QrIjwvYT4iLGh9aW1hZ2UobCxhLGQpe2lmKG51bGw9PT0obD1ZNmUo''@;'; put 'put ''dGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGwpKSlyZXR1cm4gZDtsZXQgaD1gPGltZyBzcmM9IiR7bH0iIGFsdD0iJHtkfSJgO3JldHVybiBhJiYoaCs9YCB0aXRsZT0iJHthfSJgKSxoKz10aGlzLm9wdGlvbnMueGh0bWw/Ii8+IjoiPiIsaH10ZXh0KGwpe3Jl''@;'; put 'put ''dHVybiBsfX1jbGFzcyBydGV7c3Ryb25nKGwpe3JldHVybiBsfWVtKGwpe3JldHVybiBsfWNvZGVzcGFuKGwpe3JldHVybiBsfWRlbChsKXtyZXR1cm4gbH1odG1sKGwpe3JldHVybiBsfXRleHQobCl7cmV0dXJuIGx9bGluayhsLGEsZCl7cmV0dXJuIiIrZH1pbWFnZShsLGEsZCl7cmV0dXJu''@;'; put 'put ''IiIrZH1icigpe3JldHVybiIifX1jbGFzcyBpdGV7Y29uc3RydWN0b3IoKXt0aGlzLnNlZW49e319c2VyaWFsaXplKGwpe3JldHVybiBsLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3''@;'; put 'put ''RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5yZXBsYWNlKC9ccy9nLCItIil9Z2V0TmV4dFNhZmVTbHVnKGwsYSl7bGV0IGQ9bCxoPTA7aWYodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKXtoPXRoaXMuc2VlbltsXTtkb3toKyssZD1sKyItIitofXdoaWxlKHRo''@;'; put 'put ''aXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShkKSl9cmV0dXJuIGF8fCh0aGlzLnNlZW5bbF09aCx0aGlzLnNlZW5bZF09MCksZH1zbHVnKGwsYT17fSl7Y29uc3QgZD10aGlzLnNlcmlhbGl6ZShsKTtyZXR1cm4gdGhpcy5nZXROZXh0U2FmZVNsdWcoZCxhLmRyeXJ1bil9fWNsYXNzIG80e2NvbnN0''@;'; put 'put ''cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxTNix0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgY04sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRleHRSZW5k''@;'; put 'put ''ZXJlcj1uZXcgcnRlLHRoaXMuc2x1Z2dlcj1uZXcgaXRlfXN0YXRpYyBwYXJzZShsLGEpe3JldHVybiBuZXcgbzQoYSkucGFyc2UobCl9c3RhdGljIHBhcnNlSW5saW5lKGwsYSl7cmV0dXJuIG5ldyBvNChhKS5wYXJzZUlubGluZShsKX1wYXJzZShsLGE9ITApe2xldCBoLGYsdixNLEQsWixy''@;'; put 'put ''ZSxjZSxiZSxFZSxCZSxxZSxydCxwdCxkdCxKdCx2bixDbix0bixkPSIiO2NvbnN0IE1uPWwubGVuZ3RoO2ZvcihoPTA7aDxNbjtoKyspaWYoRWU9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0''@;'; put 'put ''ZW5zaW9ucy5yZW5kZXJlcnNbRWUudHlwZV0mJih0bj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbRWUudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LEVlKSwhMSE9PXRufHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0''@;'; put 'put ''IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhFZS50eXBlKSkpZCs9dG58fCIiO2Vsc2Ugc3dpdGNoKEVlLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOmQrPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNlImhlYWRpbmciOmQrPXRoaXMucmVu''@;'; put 'put ''ZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKEVlLnRva2VucyksRWUuZGVwdGgsVzZlKHRoaXMucGFyc2VJbmxpbmUoRWUudG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOmQrPXRoaXMucmVuZGVyZXIuY29kZShFZS50ZXh0''@;'; put 'put ''LEVlLmxhbmcsRWUuZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKGNlPSIiLHJlPSIiLE09RWUuaGVhZGVyLmxlbmd0aCxmPTA7ZjxNO2YrKylyZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShFZS5oZWFkZXJbZl0udG9rZW5zKSx7aGVhZGVyOiEw''@;'; put 'put ''LGFsaWduOkVlLmFsaWduW2ZdfSk7Zm9yKGNlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KHJlKSxiZT0iIixNPUVlLnJvd3MubGVuZ3RoLGY9MDtmPE07ZisrKXtmb3IoWj1FZS5yb3dzW2ZdLHJlPSIiLEQ9Wi5sZW5ndGgsdj0wO3Y8RDt2KyspcmUrPXRoaXMucmVuZGVyZXIudGFibGVjZWxs''@;'; put 'put ''KHRoaXMucGFyc2VJbmxpbmUoWlt2XS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246RWUuYWxpZ25bdl19KTtiZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhyZSl9ZCs9dGhpcy5yZW5kZXJlci50YWJsZShjZSxiZSk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjpiZT10aGlzLnBhcnNlKEVl''@;'; put 'put ''LnRva2VucyksZCs9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGJlKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcihCZT1FZS5vcmRlcmVkLHFlPUVlLnN0YXJ0LHJ0PUVlLmxvb3NlLE09RWUuaXRlbXMubGVuZ3RoLGJlPSIiLGY9MDtmPE07ZisrKWR0PUVlLml0ZW1zW2ZdLEp0PWR0LmNoZWNr''@;'; put 'put ''ZWQsdm49ZHQudGFzayxwdD0iIixkdC50YXNrJiYoQ249dGhpcy5yZW5kZXJlci5jaGVja2JveChKdCkscnQ/ZHQudG9rZW5zLmxlbmd0aD4wJiYicGFyYWdyYXBoIj09PWR0LnRva2Vuc1swXS50eXBlPyhkdC50b2tlbnNbMF0udGV4dD1DbisiICIrZHQudG9rZW5zWzBdLnRleHQsZHQudG9r''@;'; put 'put ''ZW5zWzBdLnRva2VucyYmZHQudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmInRleHQiPT09ZHQudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYoZHQudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PUNuKyIgIitkdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpkdC50b2tlbnMudW5zaGlm''@;'; put 'put ''dCh7dHlwZToidGV4dCIsdGV4dDpDbn0pOnB0Kz1DbikscHQrPXRoaXMucGFyc2UoZHQudG9rZW5zLHJ0KSxiZSs9dGhpcy5yZW5kZXJlci5saXN0aXRlbShwdCx2bixKdCk7ZCs9dGhpcy5yZW5kZXJlci5saXN0KGJlLEJlLHFlKTtjb250aW51ZTtjYXNlImh0bWwiOmQrPXRoaXMucmVuZGVy''@;'; put 'put ''ZXIuaHRtbChFZS50ZXh0LEVlLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6ZCs9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcihiZT1FZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShFZS50''@;'; put 'put ''b2tlbnMpOkVlLnRleHQ7aCsxPE1uJiYidGV4dCI9PT1sW2grMV0udHlwZTspRWU9bFsrK2hdLGJlKz0iXG4iKyhFZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpOkVlLnRleHQpO2QrPWE/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoYmUpOmJlO2NvbnRpbnVlO2RlZmF1bHQ6''@;'; put 'put ''e2NvbnN0IENyPSdUb2tlbiB3aXRoICInK0VlLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKENyKTt0aHJvdyBuZXcgRXJyb3IoQ3IpfX1yZXR1cm4gZH1wYXJzZUlubGluZShsLGEpe2E9YXx8dGhp''@;'; put 'put ''cy5yZW5kZXJlcjtsZXQgaCxmLHYsZD0iIjtjb25zdCBNPWwubGVuZ3RoO2ZvcihoPTA7aDxNO2grKylpZihmPWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2Yu''@;'; put 'put ''dHlwZV0mJih2PXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxmKSwhMSE9PXZ8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVk''@;'; put 'put ''ZXMoZi50eXBlKSkpZCs9dnx8IiI7ZWxzZSBzd2l0Y2goZi50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0IjpkKz1hLnRleHQoZi50ZXh0KTticmVhaztjYXNlImh0bWwiOmQrPWEuaHRtbChmLnRleHQpO2JyZWFrO2Nhc2UibGluayI6ZCs9YS5saW5rKGYuaHJlZixmLnRpdGxlLHRoaXMu''@;'; put 'put ''cGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOmQrPWEuaW1hZ2UoZi5ocmVmLGYudGl0bGUsZi50ZXh0KTticmVhaztjYXNlInN0cm9uZyI6ZCs9YS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJlbSI6ZCs9YS5lbSh0aGlz''@;'; put 'put ''LnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImNvZGVzcGFuIjpkKz1hLmNvZGVzcGFuKGYudGV4dCk7YnJlYWs7Y2FzZSJiciI6ZCs9YS5icigpO2JyZWFrO2Nhc2UiZGVsIjpkKz1hLmRlbCh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztkZWZhdWx0Ontj''@;'; put 'put ''b25zdCBEPSdUb2tlbiB3aXRoICInK2YudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoRCk7dGhyb3cgbmV3IEVycm9yKEQpfX1yZXR1cm4gZH19Y2xhc3MgdU57Y29uc3RydWN0b3IobCl7dGhpcy5v''@;'; put 'put ''cHRpb25zPWx8fFM2fXN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiXSk7cHJlcHJvY2VzcyhsKXtyZXR1cm4gbH1wb3N0cHJvY2VzcyhsKXtyZXR1cm4gbH19Y29uc3QgSzk9bmV3IGNsYXNzIFBidHtkZWZhdWx0cz17YXN5bmM6ITEs''@;'; put 'put ''YmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0''@;'; put 'put ''aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMuI2UoYTQubGV4LG80LnBhcnNlKTtwYXJzZUlubGluZT10aGlzLiNlKGE0''@;'; put 'put ''LmxleElubGluZSxvNC5wYXJzZUlubGluZSk7UGFyc2VyPW80O3BhcnNlcj1vNC5wYXJzZTtSZW5kZXJlcj1jTjtUZXh0UmVuZGVyZXI9cnRlO0xleGVyPWE0O2xleGVyPWE0LmxleDtUb2tlbml6ZXI9bE47U2x1Z2dlcj1pdGU7SG9va3M9dU47Y29uc3RydWN0b3IoLi4ubCl7dGhpcy51c2Uo''@;'; put 'put ''Li4ubCl9d2Fsa1Rva2VucyhsLGEpe2xldCBkPVtdO2Zvcihjb25zdCBoIG9mIGwpc3dpdGNoKGQ9ZC5jb25jYXQoYS5jYWxsKHRoaXMsaCkpLGgudHlwZSl7Y2FzZSJ0YWJsZSI6Zm9yKGNvbnN0IGYgb2YgaC5oZWFkZXIpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoZi50b2tlbnMsYSkp''@;'; put 'put ''O2Zvcihjb25zdCBmIG9mIGgucm93cylmb3IoY29uc3QgdiBvZiBmKWQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKHYudG9rZW5zLGEpKTticmVhaztjYXNlImxpc3QiOmQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGguaXRlbXMsYSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kZWZhdWx0cy5l''@;'; put 'put ''eHRlbnNpb25zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdLmZvckVhY2goZj0+e2Q9ZC5jb25jYXQodGhp''@;'; put 'put ''cy53YWxrVG9rZW5zKGhbZl0sYSkpfSk6aC50b2tlbnMmJihkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoLnRva2VucyxhKSkpfXJldHVybiBkfXVzZSguLi5sKXtjb25zdCBhPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJu''@;'; put 'put ''IGwuZm9yRWFjaChkPT57Y29uc3QgaD17Li4uZH07aWYoaC5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxoLmFzeW5jfHwhMSxkLmV4dGVuc2lvbnMmJihkLmV4dGVuc2lvbnMuZm9yRWFjaChmPT57aWYoIWYubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVk''@;'; put 'put ''Iik7aWYoZi5yZW5kZXJlcil7Y29uc3Qgdj1hLnJlbmRlcmVyc1tmLm5hbWVdO2EucmVuZGVyZXJzW2YubmFtZV09dj9mdW5jdGlvbiguLi5NKXtsZXQgRD1mLnJlbmRlcmVyLmFwcGx5KHRoaXMsTSk7cmV0dXJuITE9PT1EJiYoRD12LmFwcGx5KHRoaXMsTSkpLER9OmYucmVuZGVyZXJ9aWYo''@;'; put 'put ''Zi50b2tlbml6ZXIpe2lmKCFmLmxldmVsfHwiYmxvY2siIT09Zi5sZXZlbCYmImlubGluZSIhPT1mLmxldmVsKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2FbZi5sZXZlbF0/YVtmLmxldmVsXS51bnNoaWZ0KGYudG9rZW5p''@;'; put 'put ''emVyKTphW2YubGV2ZWxdPVtmLnRva2VuaXplcl0sZi5zdGFydCYmKCJibG9jayI9PT1mLmxldmVsP2Euc3RhcnRCbG9jaz9hLnN0YXJ0QmxvY2sucHVzaChmLnN0YXJ0KTphLnN0YXJ0QmxvY2s9W2Yuc3RhcnRdOiJpbmxpbmUiPT09Zi5sZXZlbCYmKGEuc3RhcnRJbmxpbmU/YS5zdGFydElu''@;'; put 'put ''bGluZS5wdXNoKGYuc3RhcnQpOmEuc3RhcnRJbmxpbmU9W2Yuc3RhcnRdKSl9Zi5jaGlsZFRva2VucyYmKGEuY2hpbGRUb2tlbnNbZi5uYW1lXT1mLmNoaWxkVG9rZW5zKX0pLGguZXh0ZW5zaW9ucz1hKSxkLnJlbmRlcmVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBj''@;'; put 'put ''Tih0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgdiBpbiBkLnJlbmRlcmVyKXtjb25zdCBNPWZbdl07Zlt2XT0oLi4uRCk9PntsZXQgWj1kLnJlbmRlcmVyW3ZdLmFwcGx5KGYsRCk7cmV0dXJuITE9PT1aJiYoWj1NLmFwcGx5KGYsRCkpLFp9fWgucmVuZGVyZXI9Zn1pZihkLnRva2VuaXplcil7''@;'; put 'put ''Y29uc3QgZj10aGlzLmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IGxOKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCB2IGluIGQudG9rZW5pemVyKXtjb25zdCBNPWZbdl07Zlt2XT0oLi4uRCk9PntsZXQgWj1kLnRva2VuaXplclt2XS5hcHBseShmLEQpO3JldHVybiExPT09WiYmKFo9TS5hcHBs''@;'; put 'put ''eShmLEQpKSxafX1oLnRva2VuaXplcj1mfWlmKGQuaG9va3Mpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IHVOO2Zvcihjb25zdCB2IGluIGQuaG9va3Mpe2NvbnN0IE09Zlt2XTtmW3ZdPXVOLnBhc3NUaHJvdWdoSG9va3MuaGFzKHYpP0Q9PntpZih0aGlzLmRlZmF1bHRzLmFz''@;'; put 'put ''eW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZC5ob29rc1t2XS5jYWxsKGYsRCkpLnRoZW4ocmU9Pk0uY2FsbChmLHJlKSk7Y29uc3QgWj1kLmhvb2tzW3ZdLmNhbGwoZixEKTtyZXR1cm4gTS5jYWxsKGYsWil9OiguLi5EKT0+e2xldCBaPWQuaG9va3Nbdl0uYXBwbHkoZixEKTtyZXR1cm4h''@;'; put 'put ''MT09PVomJihaPU0uYXBwbHkoZixEKSksWn19aC5ob29rcz1mfWlmKGQud2Fsa1Rva2Vucyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7aC53YWxrVG9rZW5zPWZ1bmN0aW9uKHYpe2xldCBNPVtdO3JldHVybiBNLnB1c2goZC53YWxrVG9rZW5zLmNhbGwodGhpcyx2KSksZiYm''@;'; put 'put ''KE09TS5jb25jYXQoZi5jYWxsKHRoaXMsdikpKSxNfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmh9fSksdGhpc31zZXRPcHRpb25zKGwpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmx9LHRoaXN9I2UobCxhKXtyZXR1cm4oZCxoLGYpPT57''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGgmJihmPWgsaD1udWxsKTtjb25zdCB2PXsuLi5ofTtoPXsuLi50aGlzLmRlZmF1bHRzLC4uLnZ9O2NvbnN0IE09dGhpcy4jdChoLnNpbGVudCxoLmFzeW5jLGYpO2lmKHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQpcmV0dXJuIE0obmV3IEVycm9yKCJtYXJrZWQo''@;'; put 'put ''KTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKCJzdHJpbmciIT10eXBlb2YgZClyZXR1cm4gTShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkKSsiLCBzdHJp''@;'; put 'put ''bmcgZXhwZWN0ZWQiKSk7aWYoZnVuY3Rpb24gUmJ0KGMsbCl7IWN8fGMuc2lsZW50fHwobCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0''@;'; put 'put ''aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChjLnNhbml0aXplfHxjLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRl''@;'; put 'put ''ZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLChjLmhpZ2hsaWdodHx8Imxhbmd1''@;'; put 'put ''YWdlLSIhPT1jLmxhbmdQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUg''@;'; put 'put ''ZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLGMubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2lu''@;'; put 'put ''Y2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxz''@;'; put 'put ''ZX1gLiIpLGMuYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRw''@;'; put 'put ''czovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksYy5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3''@;'; put 'put ''aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLGMueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZl''@;'; put 'put ''cnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSwoYy5oZWFkZXJJZHN8fGMuaGVhZGVyUHJlZml4KSYmY29uc29sZS53''@;'; put 'put ''YXJuKCJtYXJrZWQoKTogaGVhZGVySWRzIGFuZCBoZWFkZXJQcmVmaXggcGFyYW1ldGVycyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2Fy''@;'; put 'put ''bmluZywgaW5zdGFsbCAgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWdmbS1oZWFkaW5nLWlkLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHtoZWFkZXJJZHM6IGZhbHNlfWAuIikpfShoLGYpLGguaG9va3MmJihoLmhvb2tzLm9wdGlvbnM9aCksZil7Y29uc3QgRD1oLmhp''@;'; put 'put ''Z2hsaWdodDtsZXQgWjt0cnl7aC5ob29rcyYmKGQ9aC5ob29rcy5wcmVwcm9jZXNzKGQpKSxaPWwoZCxoKX1jYXRjaChiZSl7cmV0dXJuIE0oYmUpfWNvbnN0IHJlPWJlPT57bGV0IEVlO2lmKCFiZSl0cnl7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoWixoLndhbGtUb2tlbnMpLEVl''@;'; put 'put ''PWEoWixoKSxoLmhvb2tzJiYoRWU9aC5ob29rcy5wb3N0cHJvY2VzcyhFZSkpfWNhdGNoKEJlKXtiZT1CZX1yZXR1cm4gaC5oaWdobGlnaHQ9RCxiZT9NKGJlKTpmKG51bGwsRWUpfTtpZighRHx8RC5sZW5ndGg8M3x8KGRlbGV0ZSBoLmhpZ2hsaWdodCwhWi5sZW5ndGgpKXJldHVybiByZSgp''@;'; put 'put ''O2xldCBjZT0wO3JldHVybiB0aGlzLndhbGtUb2tlbnMoWixiZT0+eyJjb2RlIj09PWJlLnR5cGUmJihjZSsrLHNldFRpbWVvdXQoKCk9PntEKGJlLnRleHQsYmUubGFuZywoRWUsQmUpPT57aWYoRWUpcmV0dXJuIHJlKEVlKTtudWxsIT1CZSYmQmUhPT1iZS50ZXh0JiYoYmUudGV4dD1CZSxi''@;'; put 'put ''ZS5lc2NhcGVkPSEwKSxjZS0tLDA9PT1jZSYmcmUoKX0pfSwwKSl9KSx2b2lkKDA9PT1jZSYmcmUoKSl9aWYoaC5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGguaG9va3M/aC5ob29rcy5wcmVwcm9jZXNzKGQpOmQpLnRoZW4oRD0+bChELGgpKS50aGVuKEQ9Pmgud2Fsa1Rva2Vucz9Q''@;'; put 'put ''cm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoRCxoLndhbGtUb2tlbnMpKS50aGVuKCgpPT5EKTpEKS50aGVuKEQ9PmEoRCxoKSkudGhlbihEPT5oLmhvb2tzP2guaG9va3MucG9zdHByb2Nlc3MoRCk6RCkuY2F0Y2goTSk7dHJ5e2guaG9va3MmJihkPWguaG9va3MucHJlcHJvY2VzcyhkKSk7''@;'; put 'put ''Y29uc3QgRD1sKGQsaCk7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoRCxoLndhbGtUb2tlbnMpO2xldCBaPWEoRCxoKTtyZXR1cm4gaC5ob29rcyYmKFo9aC5ob29rcy5wb3N0cHJvY2VzcyhaKSksWn1jYXRjaChEKXtyZXR1cm4gTShEKX19fSN0KGwsYSxkKXtyZXR1cm4gaD0+e2lm''@;'; put 'put ''KGgubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuIixsKXtjb25zdCBmPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK3gxKGgubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIGE/UHJvbWlzZS5y''@;'; put 'put ''ZXNvbHZlKGYpOmQ/dm9pZCBkKG51bGwsZik6Zn1pZihhKXJldHVybiBQcm9taXNlLnJlamVjdChoKTtpZighZCl0aHJvdyBoO2QoaCl9fX0oUzYpO2Z1bmN0aW9uIFJsKGMsbCxhKXtyZXR1cm4gSzkucGFyc2UoYyxsLGEpfVJsLm9wdGlvbnM9Umwuc2V0T3B0aW9ucz1mdW5jdGlvbihjKXty''@;'; put 'put ''ZXR1cm4gSzkuc2V0T3B0aW9ucyhjKSxqNmUoUmwuZGVmYXVsdHM9SzkuZGVmYXVsdHMpLFJsfSxSbC5nZXREZWZhdWx0cz1mdW5jdGlvbiBudGUoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFk''@;'; put 'put ''ZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3''@;'; put 'put ''YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxSbC5kZWZhdWx0cz1TNixSbC51c2U9ZnVuY3Rpb24oLi4uYyl7cmV0dXJuIEs5LnVzZSguLi5jKSxqNmUoUmwuZGVmYXVsdHM9SzkuZGVmYXVsdHMpLFJsfSxSbC53YWxrVG9rZW5zPWZ1bmN0aW9uKGMsbCl7cmV0dXJuIEs5LndhbGtUb2tlbnMo''@;'; put 'put ''YyxsKX0sUmwucGFyc2VJbmxpbmU9SzkucGFyc2VJbmxpbmUsUmwuUGFyc2VyPW80LFJsLnBhcnNlcj1vNC5wYXJzZSxSbC5SZW5kZXJlcj1jTixSbC5UZXh0UmVuZGVyZXI9cnRlLFJsLkxleGVyPWE0LFJsLmxleGVyPWE0LmxleCxSbC5Ub2tlbml6ZXI9bE4sUmwuU2x1Z2dlcj1pdGUsUmwu''@;'; put 'put ''SG9va3M9dU4sUmwucGFyc2U9Umw7Y29uc3QgSGJ0PVsibWFya2Rvd25DYXJkIl07ZnVuY3Rpb24gTmJ0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsOCl9bGV0IFZidD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuYWdyZWVDaGVja2Vk''@;'; put 'put ''PSExLHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5ldWxhX21hcmtkb3duPSdcbkxpY2VuY2UgQWdyZWVtZW50IGZvciBEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YWVcbj09PT09PT09PT09PT09PT09PT09XG5cbkNvcHlyaWdodCAoYykgQm93ZSBJ''@;'; put 'put ''TyBMdGRcblxuRGF0YSBDb250cm9sbGVyIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGJ5IDRHTCBBcHBzLCBhIGJyYW5kIG93bmVkIGJ5IEJvd2UgSU8gTHRkLCBhIFVLIExpbWl0ZWQgQ29tcGFueSBoZWFkcXVhcnRlZCBpbiAyOSBPbGRmaWVsZCBSZCwgQ3VtYnJpYSwgcmVnaXN0ZXJlZCBh''@;'; put 'put ''dCBDb21wYW5pZXMgSG91c2Ugd2l0aCBjb21wYW55IG51bWJlciAwODc3NzE3MSwgVkFUIG51bWJlcjogMjAzOTE0MjQwXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBh''@;'; put 'put ''bmQgZHVhbC1saWNlbnNlZCBcdTIwMTMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9yIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9y''@;'; put 'put ''IG5vdC5cblxuSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBldmFsdWF0aW9uIHB1cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlz''@;'; put 'put ''IHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJsaWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kIiBmaWxlIGF2YWlsYWJsZSBoZXJlOiAgaHR0''@;'; put 'put ''cHM6Ly9naXQuZGF0YWNvbnRyb2xsZXIuaW8vZGMvZGMvc3JjL2JyYW5jaC9tYWluL2xpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWRcblxuWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJt''@;'; put 'put ''cyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50LlxuXG5JbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUgY29uc2lkZXJlZCBjb21wZXRp''@;'; put 'put ''dGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuXG5cblVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgNEdMIEFQUFMgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5E''@;'; put 'put ''IElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFNIQUxMIDRHTCBBUFBTIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9G''@;'; put 'put ''IEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuXG5cblxuJ31uZ09uSW5pdCgpe2NvbnN0IGE9Umwuc2V0T3B0aW9ucyh7fSk7dGhpcy5ldWxhX21hcmtkb3duPWEucGFyc2UodGhpcy5ldWxhX21hcmtkb3duKX1uZ0FmdGVy''@;'; put 'put ''Vmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5tYXJrZG93bkNhcmQmJnRoaXMubWFya2Rvd25DYXJkLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNjcm9sbCIpKX0pfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmFncmVlQ2hlY2tlZCYmKHRoaXMu''@;'; put 'put ''YWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWdpc3RlcnVzZXIiLHtTQVNDb250cm9sVGFibGU6W3tBQ0NFUFRFRDoieWVzIn1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlbG9hZCgpfSkuY2F0Y2goZD0+ZCkuZmluYWxseSgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmFncmVlQm94TG9ja2VkPSExLHRoaXMuYWdyZWVDbGlj''@;'; put 'put ''a2VkPSExLHRoaXMuYWdyZWVDaGVja2VkPSExfSwxZTMpfSkpfW9uQ2FyZEJsb2NrU2Nyb2xsKGEpe2lmKCF0aGlzLmFncmVlQ2xpY2tlZCl7bGV0IGQ9YS50YXJnZXQ7ZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9IShkLnNjcm9sbFRvcCtkLm9mZnNldEhlaWdodD49ZC5zY3JvbGxIZWlnaHQt''@;'; put 'put ''MjApKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC10ZXJtcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKEhidCw1''@;'; put 'put ''KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLm1hcmtkb3duQ2FyZD1mLmZpcnN0KX19LGRlY2xzOjEzLHZhcnM6Nixjb25zdHM6W1sibWFya2Rvd25DYXJkIiwiIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywic2Nyb2xsIiwiaW5uZXJIVE1MIl0s''@;'; put 'put ''WzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiYWNjZXB0LWNoZWNrYm94Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xySW5saW5lIiwic21hbGwi''@;'; put 'put ''LDQsIm5nSWYiXSxbImNscklubGluZSIsInNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLExlKDIsIiBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudCAiKSxkZSgzLCJwIiksTGUoNCwiIFdlbGNvbWUg''@;'; put 'put ''dG8gRGF0YSBDb250cm9sbGVyIGZvciBTQVMhIFBsZWFzZSByZXZpZXcgYW5kIGFjY2VwdCBhZ3JlZW1lbnQgYmVsb3cgaW4gb3JkZXIgdG8gcHJvY2VlZC4gIiksaGUoKSgpLGRlKDUsImRpdiIsMywwKSxGdCgic2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkNhcmRC''@;'; put 'put ''bG9ja1Njcm9sbChNKSl9KSxoZSgpLGRlKDcsImRpdiIsNCkoOCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDUpKDksImlucHV0Iiw2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguYWdyZWVDaGVja2VkLE0pfHwoaC5hZ3JlZUNoZWNrZWQ9TSksQ3Qo''@;'; put 'put ''TSl9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnRlcm1zQWdyZWVDaGFuZ2UoKSl9KSxoZSgpLGRlKDEwLCJsYWJlbCIpLExlKDExLCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIGFib3ZlLiIpLGhlKCkoKSxndCgxMixOYnQsMSwwLCJj''@;'; put 'put ''bHItc3Bpbm5lciIsNyksaGUoKSgpfTImZCYmKGZlKDUpLE1lKCJpbm5lckhUTUwiLGguZXVsYV9tYXJrZG93bixWNCksZmUoMyksVHIoImRpc2FibGVkIixoLmFncmVlQm94TG9ja2VkKSxmZSgpLHBpKCJuZ01vZGVsIixoLmFncmVlQ2hlY2tlZCksTWUoImRpc2FibGVkIixoLmFncmVlQm94''@;'; put 'put ''TG9ja2VkKSxmZSgzKSxNZSgibmdJZiIsaC5hZ3JlZUJveExvY2tlZCYmaC5hZ3JlZUNsaWNrZWQpKX0sZGVwZW5kZW5jaWVzOltiYSxNZCxubCwkcyxkcyxJZCxTaCxSZF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBCYnQoYyxsKXsxJmMmJihkZSgwLCJwIiwy''@;'; put 'put ''OSksTGUoMSwiIExpY2VuY2Uga2V5IGlzIGludmFsaWQuIFdlIGNhbid0IHByb3ZpZGUgeW91IG1vcmUgZGV0YWlscyBhdCB0aGUgbW9tZW50ICIpLGhlKCkpfWZ1bmN0aW9uIGpidChjLGwpe2lmKDEmYyYmR3QoMCwicCIsMzApLDImYyl7Y29uc3QgYT1SZSgzKTtNZSgiaW5uZXJIVE1MIixh''@;'; put 'put ''LmxpY2Vuc2VFcnJvcnNbYS5rZXlFcnJvcl0sVjQpfX1mdW5jdGlvbiB6YnQoYyxsKXtpZigxJmMmJihkZSgwLCJwIikoMSwic3Ryb25nIiksTGUoMiwiRGV0YWlsczoiKSxoZSgpLExlKDMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgzKSxEcigiICIsYS5lcnJvckRldGFpbHMsIiIp''@;'; put 'put ''fX1mdW5jdGlvbiBVYnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLEJidCwyLDAsInAiLDI3KSgyLGpidCwxLDEsInAiLDI4KSgzLHpidCw0LDEsInAiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5rZXlFcnJvciksZmUoKSxNZSgibmdJZiIsYS5rZXlF''@;'; put 'put ''cnJvciksZmUoKSxNZSgibmdJZiIsYS5lcnJvckRldGFpbHMpfX1mdW5jdGlvbiBaYnQoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJwIiwyOSksTGUoMiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyByZWFjaGVkIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5jZS4g''@;'; put 'put ''UGxlYXNlIGNvbnRhY3QgIiksR3QoMywiY29udGFjdC1saW5rIiwzMSksTGUoNCwiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2VzIGZvciB0aGlzIHByb2R1Y3QuICIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gV2J0KGMsbCl7MSZjJiYoc2koMCksZGUoMSwi''@;'; put 'put ''cCIsMjkpLExlKDIsIiBVcGRhdGUgdGhlIGxpY2Vuc2Uga2V5IGJ5IHVwbG9hZGluZyB0aGUgbGljZW5jZSBmaWxlIG9yIGJ5IHBhc3RpbmcgYSBsaWNlbnNlIGtleSBhbmQgYWN0aXZhdGlvbiBrZXkgaW4gdGhlIGlucHV0cyBiZWxvdy4gIiksaGUoKSxsaSgpKX1mdW5jdGlvbiBZYnQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVJlKDIpO1RyKCJtaXNza2V5IixoLm1pc3NtYXRjaGVkS2V5JiZoLm1pc3NtYXRjaGVkS2V5PT09YSksZmUoKSxVdSgiICIsYSwiIixkPT09KG51bGw9PWguc3lz''@;'; put 'put ''c2l0ZS52YWx1ZT9udWxsOmguc3lzc2l0ZS52YWx1ZS5sZW5ndGgpLTE/IiI6IiwiLCIgIil9fWZ1bmN0aW9uIEdidChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDMyKSgxLCJzdHJvbmciKSxMZSgyLCJBbGxvd2VkIHVzZXJzOiIpLGhlKCksTGUoMyksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIp''@;'; put 'put ''O2ZlKDMpLERyKCIgIixhLmxpY2Vuc2VLZXlEYXRhLnVzZXJzX2FsbG93ZWQsIiAiKX19ZnVuY3Rpb24gJGJ0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzMpfWZ1bmN0aW9uIEtidChjLGwpezEmYyYmKGRlKDAsImRpdiIpLExlKDEsIiBEcm9wIC8gQnJvd3NlIGxpY2VuY2UgZmls''@;'; put 'put ''ZSAiKSxoZSgpKX1mdW5jdGlvbiBxYnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxMZSgxLCIgU2VsZWN0ZWQgZmlsZTogIiksZGUoMiwic3Ryb25nIiksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMyksd3IoYS5saWNlbmNlZmlsZS5maWxlbmFtZSl9fWZ1bmN0aW9u''@;'; put 'put ''IFhidChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsInN0cm9uZyIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDIpLHdyKGEubGljZW5jZUZpbGVFcnJvcil9fWZ1bmN0aW9uIEpidChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsS2J0LDIsMCwiZGl2Iiw0KSgyLHFi''@;'; put 'put ''dCw0LDEsImRpdiIsNCkoMyxYYnQsMywxLCJkaXYiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwiIj09PWEubGljZW5jZWZpbGUuZmlsZW5hbWUpLGZlKCksTWUoIm5nSWYiLCIiIT09YS5saWNlbmNlZmlsZS5maWxlbmFtZSksZmUoKSxNZSgibmdJZiIsYS5s''@;'; put 'put ''aWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gUWJ0KGMsbCl7MSZjJiYoZGUoMCwiYnV0dG9uIiwzNCksTGUoMSwiIENvbnRpbnVlIHdpdGggZnJlZSB0aWVyICIpLGhlKCkpfWZ1bmN0aW9uIGV5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNSkoMSwiZGl2Iiw2KSxM''@;'; put 'put ''ZSgyLCJMaWNlbmNpbmciKSxoZSgpLGRlKDMsImRpdiIsNykoNCwiZGl2Iiw4KSxndCg1LFVidCw0LDMsIm5nLWNvbnRhaW5lciIsOSkoNixaYnQsNSwwLCJuZy1jb250YWluZXIiLDkpKDcsV2J0LDMsMCwibmctY29udGFpbmVyIiw5KSxkZSg4LCJwIikoOSwic3Ryb25nIiksTGUoMTAsIlNZ''@;'; put 'put ''U1NJVEU6IiksaGUoKSxndCgxMSxZYnQsMiw0LCJzcGFuIiwxMCksZGUoMTIsImEiLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSgxNCksZj1oYSgxNiksdj1SZSgpO3JldHVybiBDdCh2LmNvcHlTeXNzaXRlKGgsZix2LnN5c3NpdGUudmFsdWV8fFtdKSl9KSxH''@;'; put 'put ''dCgxMywiY2xyLWljb24iLDEyLDApLGRlKDE1LCJzcGFuIiwxMywxKSxMZSgxNywiQ29weSB0byBjbGlwYm9hcmQiKSxoZSgpKCkoKSxndCgxOCxHYnQsNCwxLCJwIiwxNCksZGUoMTksImNsci10YWJzIikoMjAsImNsci10YWIiKSgyMSwiYnV0dG9uIiwxNSksTGUoMjIsIlVwbG9hZCBsaWNl''@;'; put 'put ''bmNlIiksaGUoKSxkZSgyMywiY2xyLXRhYi1jb250ZW50IikoMjQsImlucHV0IiwxNiwyKSxGdCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkZpbGVDYXB0dXJlKGgpKX0pLGhlKCksZGUoMjYsImRpdiIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoaGEoMjUpLmNsaWNrKCkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5vbkZpbGVDYXB0dXJlKGgsITApKX0pLGd0KDI3LCRidCwxLDAsImNsci1zcGlubmVyIiwxOCkoMjgsSmJ0LDQsMywibmctY29udGFpbmVyIiw0KSxoZSgpKCko''@;'; put 'put ''KSxkZSgyOSwiY2xyLXRhYiIpKDMwLCJidXR0b24iLDE1KSxMZSgzMSwiUGFzdGUgbGljZW5jZSIpLGhlKCksZGUoMzIsImNsci10YWItY29udGVudCIpKDMzLCJmb3JtIiwxOSkoMzQsInAiKSxMZSgzNSwiTGljZW5jZSBrZXk6IiksaGUoKSxkZSgzNiwiZGl2IiwyMCkoMzcsInRleHRhcmVh''@;'; put 'put ''IiwyMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5saWNlbmNlS2V5VmFsdWUsaCl8fChmLmxpY2VuY2VLZXlWYWx1ZT1oKSxDdChoKX0pLEZ0KCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgp''@;'; put 'put ''LnRyaW1LZXlzKCkpfSksaGUoKSgpKCksZGUoMzgsImZvcm0iLDIyKSgzOSwicCIpLExlKDQwLCJBY3RpdmF0aW9uIGtleToiKSxoZSgpLGRlKDQxLCJkaXYiLDIwKSg0MiwidGV4dGFyZWEiLDIzKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3Jl''@;'; put 'put ''dHVybiBtaShmLmFjdGl2YXRpb25LZXlWYWx1ZSxoKXx8KGYuYWN0aXZhdGlvbktleVZhbHVlPWgpLEN0KGgpfSksRnQoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkudHJpbUtleXMoKSl9KSxoZSgpKCkoKSgpKCkoKSgpLGRlKDQzLCJkaXYiLDI0KSg0NCwi''@;'; put 'put ''YnV0dG9uIiwyNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmFwcGx5S2V5cygpKX0pLExlKDQ1LCIgQXBwbHkgbGljZW5jZSBrZXlzICIpLGhlKCksZ3QoNDYsUWJ0LDIsMCwiYnV0dG9uIiwyNiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUo''@;'; put 'put ''MyksTWUoIm5nU3dpdGNoIixhLmFjdGlvbiksZmUoMiksTWUoIm5nU3dpdGNoQ2FzZSIsImtleSIpLGZlKCksTWUoIm5nU3dpdGNoQ2FzZSIsImxpbWl0IiksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwidXBkYXRlIiksZmUoNCksTWUoIm5nRm9yT2YiLGEuc3lzc2l0ZS52YWx1ZSksZmUoNyks''@;'; put 'put ''TWUoIm5nSWYiLGEubGljZW5zZUtleURhdGEmJmEudXNlckNvdW50TGltaXRhdGlvbiksZmUoOSksTWUoIm5nSWYiLGEubGljZW5jZUZpbGVMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5saWNlbmNlRmlsZUxvYWRpbmcpLGZlKDkpLHBpKCJuZ01vZGVsIixhLmxpY2VuY2VLZXlWYWx1ZSks''@;'; put 'put ''ZmUoNSkscGkoIm5nTW9kZWwiLGEuYWN0aXZhdGlvbktleVZhbHVlKSxmZSgyKSxNZSgiY2xyTG9hZGluZyIsYS5hcHBseWluZ0tleXMpKCJkaXNhYmxlZCIsYS5kaXNhYmxlQXBwbHlCdXR0b24pLGZlKDIpLE1lKCJuZ0lmIixhLmlzQXBwRnJlZVRpZXIudmFsdWUpfX1mdW5jdGlvbiB0eXQo''@;'; put 'put ''YyxsKXsxJmMmJkd0KDAsImFwcC10ZXJtcyIpfXZhciBxNmU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMua2V5PSJrZXkiLGMucmVnaXN0ZXI9InJlZ2lzdGVyIixjLmxpbWl0PSJsaW1pdCIsYy51cGRhdGU9InVwZGF0ZSIsY30ocTZlfHx7fSk7Y29uc3Qgbnl0PVt7cGF0aDoiOmFjdGlvbiIsY29t''@;'; put 'put ''cG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5yb3V0ZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmFwcFNlcnZpY2U9Zix0aGlzLmFjdGlvbj1udWxsLHRoaXMubGljZW5zZUVycm9ycz17bWlzc2luZzonTGljZW5j''@;'; put 'put ''ZSBrZXkgaXMgbWlzc2luZyAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGV4cGlyZWQ6''@;'; put 'put ''J0xpY2VuY2Uga2V5IGlzIGV4cGlyZWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxp''@;'; put 'put ''bnZhbGlkOidMaWNlbmNlIGtleSBpcyBpbnZhbGlkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJl''@;'; put 'put ''bG93LicsbWlzc21hdGNoOidZb3VyIFNZU1NJVEUgKGJlbG93KSBpcyBub3QgZm91bmQgaW4gdGhlIGxpY2VuY2Uga2V5IC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNv''@;'; put 'put ''bnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93Lid9LHRoaXMubGljZW5jZUtleVZhbHVlPSIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmN1cnJl''@;'; put 'put ''bnRMaWNlbmNlS2V5PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZUtleSx0aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5PXRoaXMubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbktleSx0aGlzLmlzQXBwRnJlZVRpZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLHRoaXMudXNl''@;'; put 'put ''ckNvdW50TGltaXRhdGlvbj10aGlzLmxpY2VuY2VTZXJ2aWNlLnVzZXJDb3VudExpbWl0YXRpb24sdGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuaW5wdXRUeXBlPSJmaWxlIix0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VmaWxlPXtmaWxlbmFtZToiIn19bmdP''@;'; put 'put ''bkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5fHwiIix0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShhPT57dGhpcy5rZXlFcnJvcj1hLmVy''@;'; put 'put ''cm9yLHRoaXMubWlzc21hdGNoZWRLZXk9YS5taXNzbWF0Y2hJZCxhLmRldGFpbHMmJih0aGlzLmVycm9yRGV0YWlscz1hdG9iKGEuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGE9PntsZXQgZD1hLmFjdGlvbjtkJiZPYmplY3QudmFsdWVzKHE2ZSkuaW5jbHVkZXMo''@;'; put 'put ''ZCkmJih0aGlzLmFjdGlvbj1kKX0pLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpfXRyaW1LZXlzKCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5saWNlbmNlS2V5VmFsdWUudHJpbSgpLHRoaXMuYWN0aXZhdGlvbktleVZhbHVl''@;'; put 'put ''PXRoaXMuYWN0aXZhdGlvbktleVZhbHVlLnRyaW0oKX1jb3B5U3lzc2l0ZShhLGQsaCl7Y29uc3QgZj1oLmpvaW4oIlxuIik7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZikudGhlbigoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNoZWNrIiksYS5zZXRBdHRyaWJ1dGUoImNs''@;'; put 'put ''YXNzIiwiaXMtc3VjY2VzcyIpLGQuaW5uZXJUZXh0PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY29weSIpLGEucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLGQuaW5uZXJUZXh0PSJDb3B5IHRvIGNsaXBib2FyZCJ9LDFlMyl9KX1hcHBseUtleXMo''@;'; put 'put ''KXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVnaXN0ZXJrZXkiLHtrZXl1cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tFWTp0aGlzLmxpY2VuY2VLZXlWYWx1ZX1dfSkudGhlbihkPT57''@;'; put 'put ''ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlcGxhY2UobG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKX0pLmZpbmFsbHkoKCk9Pnt0aGlz''@;'; put 'put ''LmFwcGx5aW5nS2V5cz0hMX0pfW9uRmlsZUNhcHR1cmUoYSxkPSExKXtsZXQgaD1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07aWYodGhpcy5saWNlbmNlZmlsZS5maWxlbmFtZT1oLm5hbWUsIWgpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSEwO2NvbnN0IGY9bmV3IEZpbGVSZWFk''@;'; put 'put ''ZXI7Zi5vbmxvYWQ9dj0+e2lmKHRoaXMubGljZW5jZUZpbGVFcnJvcj0iRXJyb3IgcmVhZGluZyBmaWxlLiIsIXZ8fCF2LnRhcmdldHx8MiE9di50YXJnZXQucmVhZHlTdGF0ZXx8di50YXJnZXQuZXJyb3J8fCF2LnRhcmdldC5yZXN1bHQpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5n''@;'; put 'put ''PSExLHRoaXMubGljZW5jZUZpbGVFcnJvcj12b2lkIDA7Y29uc3QgTT12LnRhcmdldC5yZXN1bHQudG9TdHJpbmcoKS5zcGxpdCgiXG4iKTt0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT1NWzFdLHRoaXMubGljZW5jZUtleVZhbHVlPU1bMF19LGYucmVhZEFzVGV4dChoKX1zd2l0Y2hUeXBlKGEp''@;'; put 'put ''e3RoaXMuaW5wdXRUeXBlPWF9Z2V0IGRpc2FibGVBcHBseUJ1dHRvbigpe3JldHVybiB0aGlzLmxpY2VuY2VLZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMubGljZW5jZUtleVZhbHVlPT09dGhpcy5jdXJyZW50TGljZW5jZUtleSYmdGhp''@;'; put 'put ''cy5hY3RpdmF0aW9uS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEN1KSxHZSh1MSksR2UoQnMpLEdlKG9MKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNl''@;'; put 'put ''bGVjdG9yczpbWyJhcHAtbGljZW5zaW5nIl1dLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJjb3B5SWNvbiIsIiJdLFsiY29weVRvb2x0aXAiLCIiXSxbImxpY2VuY2VGaWxlIiwiIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVh''@;'; put 'put ''ZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsIm5nU3dpdGNoIl0sWzEsImNhcmQtdGV4dCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMywibWlzc2tleSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC10b3AtcmlnaHQiLDMsImNsaWNrIl0sWyJz''@;'; put 'put ''aGFwZSIsImNvcHkiLCJzaXplIiwiMTUiLDEsImN1cnNvci1wb2ludGVyIl0sWzEsInRvb2x0aXAtY29udGVudCJdLFsiY2xhc3MiLCJtLTAiLDQsIm5nSWYiXSxbImNsclRhYkxpbmsiLCIiXSxbInR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJjaGFuZ2UiXSxbImFwcEZpbGVEcm9wIiwi''@;'; put 'put ''IiwxLCJkcm9wLWFyZWEiLDMsImNsaWNrIiwiZmlsZURyb3AiXSxbImNsYXNzIiwic3Bpbm5lci1zbSIsNCwibmdJZiJdLFsxLCJjbHItZm9ybSIsImxpY2Vuc2Uta2V5LWZvcm0iXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWyJuYW1lIiwibGljZW5zZS1rZXktYXJlYSIsInBsYWNl''@;'; put 'put ''aG9sZGVyIiwiUGFzdGUgbGljZW5jZSBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJuZ01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSIsIm5nTW9kZWwiXSxbMSwiY2xyLWZvcm0iLCJhY3RpdmF0aW9uLWtleS1mb3JtIl0sWyJuYW1lIiwiYWN0aXZhdGlvbi1rZXktYXJlYSIsInBsYWNl''@;'; put 'put ''aG9sZGVyIiwiUGFzdGUgYWN0aXZhdGlvbiBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJuZ01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSIsIm5nTW9kZWwiXSxbMSwiY2FyZC1mb290ZXIiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImJ0biIsImJ0bi1wcmlt''@;'; put 'put ''YXJ5IiwiYXBwbHkta2V5cyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbInJvdXRlckxpbmsiLCIvIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1saW5rIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImtleS1lcnJvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZXJyb3IiLDMs''@;'; put 'put ''ImlubmVySFRNTCIsNCwibmdJZiJdLFsxLCJrZXktZXJyb3IiXSxbMSwia2V5LWVycm9yIiwzLCJpbm5lckhUTUwiXSxbImNsYXNzZXMiLCJjb2xvci1ncmVlbiJdLFsxLCJtLTAiXSxbMSwic3Bpbm5lci1zbSJdLFsicm91dGVyTGluayIsIi8iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5r''@;'; put 'put ''Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZndCgwLGV5dCw0NywxMywiZGl2IiwzKSgxLHR5dCwxLDAsImFwcC10ZXJtcyIsNCksMiZkJiYoTWUoIm5nSWYiLCJyZWdpc3RlciIhPT1oLmFjdGlvbiksZmUoKSxNZSgibmdJZiIsInJlZ2lzdGVyIj09PWguYWN0aW9uKSl9LGRlcGVu''@;'; put 'put ''ZGVuY2llczpbbnMsYmEsUzIsY3AsbDcscWwsbmwsbzcsJHMseXAsSGwsajAsUDIsX20sQ20seDcsd20seW0sUzcsUmQsYzEsVmJ0LHBPXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGNhbkFjdGl2YXRlOlt0dGVdLGNhbkRlYWN0aXZhdGU6W3R0ZV19XTtsZXQgcnl0PSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZChueXQpLHpjXX0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCksaXl0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyx6MCxyeXQsQ3ddfSl9fXJl''@;'; put 'put ''dHVybiBjfSkoKTtjb25zdCBheXQ9KCk9Pih7c3RhbmRhbG9uZTohMH0pLFg2ZT0oYyxsLGEpPT4oe2FkZGVkUm93OmMsZGVsZXRlZFJvdzpsLHVwZGF0ZWRSb3c6YX0pLEo2ZT1jPT4oeyJjaCB0b29sdGlwIHRvb2x0aXAtbWQgdG9vbHRpcC10b3AtcmlnaHQiOmN9KTtmdW5jdGlvbiBveXQo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsMTkpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdCxkPVJlKCk7TWUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIitkLmpzUGFyYW1zW2FdKSxmZSgpLERyKCIgIixkLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9uIHN5dChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsInRkIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQsZD1SZSgpO2ZlKCksRHIoIiAiLGQuanNQYXJhbXNbYV0sIiAiKX19ZnVuY3Rpb24gbHl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsNCksTGUoMiksaGUoKSxndCgz''@;'; put 'put ''LG95dCwyLDIsInRkIiwxNykoNCxzeXQsMiwxLCJ0ZCIsMTgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhKSxmZSgpLE1lKCJuZ0lmIixhLmluY2x1ZGVzKCJUQUJMRV9JRCIpKSxmZSgpLE1lKCJuZ0lmIiwhYS5pbmNsdWRlcygiVEFCTEVfSUQiKSl9fWZ1bmN0''@;'; put 'put ''aW9uIGN5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDQpLExlKDIpLGhlKCksZGUoMywidGQiLDQpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMyk7ZmUoMiksd3IoYSksZmUoMiksd3IoZC5zdWJtaXREZXRhaWxzW2FdKX19ZnVuY3Rpb24g''@;'; put 'put ''dXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyMikoMiwidGFibGUiLDMpKDMsInRoZWFkIikoNCwidHIiKSg1LCJ0aCIsNCksTGUoNiwiTmFtZSIpLGhlKCksZGUoNywidGgiLDQpLExlKDgsIlZhbHVlIiksaGUoKSgpKCksZGUoOSwidGJvZHkiKSxn''@;'; put 'put ''dCgxMCxjeXQsNSwyLCJ0ciIsNSksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDEwKSxNZSgibmdGb3JPZiIsYS5zdWJtaXRBcnIpfX1mdW5jdGlvbiBkeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiw0KSxMZSgyKSxoZSgpLGRlKDMsInRkIiw0KSxMZSg0KSxo''@;'; put 'put ''ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKDIpO2ZlKDIpLHdyKGEpLGZlKDIpLHdyKGQuanNQYXJhbXNbYV0pfX1mdW5jdGlvbiBoeXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFicyIpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDIwKSxMZSgzLCJTdWJtaXR0ZWQg''@;'; put 'put ''VGFibGUgRGV0YWlscyIpLGhlKCksZ3QoNCx1eXQsMTEsMSwiY2xyLXRhYi1jb250ZW50IiwyMSksaGUoKSxkZSg1LCJjbHItdGFiIikoNiwiYnV0dG9uIiwyMCksTGUoNywiQmFzZSBUYWJsZSBEZXRhaWxzIiksaGUoKSxkZSg4LCJjbHItdGFiLWNvbnRlbnQiKSg5LCJkaXYiLDIyKSgxMCwi''@;'; put 'put ''dGFibGUiLDMpKDExLCJ0aGVhZCIpKDEyLCJ0ciIpKDEzLCJ0aCIsNCksTGUoMTQsIk5hbWUiKSxoZSgpLGRlKDE1LCJ0aCIsNCksTGUoMTYsIlZhbHVlIiksaGUoKSgpKCksZGUoMTcsInRib2R5IiksZ3QoMTgsZHl0LDUsMiwidHIiLDUpLGhlKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''UmUoKTtmZSg0KSxNZSgiY2xySWZBY3RpdmUiLCEwKSxmZSgxNCksTWUoIm5nRm9yT2YiLGEua2V5c0FycmF5KX19ZnVuY3Rpb24gZnl0KGMsbCl7MSZjJiYoZGUoMCwicCIsNzIpLExlKDEsIiBUaGVyZSBhcmUgbm8gZGV0YWlscyB0byBzaG93ICIpLGhlKCkpfWZ1bmN0aW9uIHB5dChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKHNpKDApLGRlKDEsImRpdiIsNzMpKDIsInNwYW4iKSxMZSgzLCJUYWJsZSBJZDoiKSxoZSgpLGRlKDQsInN0cm9uZyIsNzQpLExlKDUpLGhlKCkoKSxkZSg2LCJkaXYiKSg3LCJzcGFuIiksTGUoOCwiU3VibWl0dGVyOiIpLGhlKCksZGUoOSwic3BhbiIsNzUpLExlKDEwKSxo''@;'; put 'put ''ZSgpKCksZGUoMTEsImRpdiIpKDEyLCJzcGFuIiksTGUoMTMsIlN1Ym1pdHRlZCBvbjoiKSxoZSgpLGRlKDE0LCJzcGFuIiw3NSksTGUoMTUpLGhlKCkoKSxkZSgxNiwiZGl2IikoMTcsInNwYW4iKSxMZSgxOCwiU3VibWl0dGVkIFJlYXNvbjoiKSxoZSgpLGRlKDE5LCJzcGFuIiw3NSksTGUo''@;'; put 'put ''MjApLGhlKCkoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksTWUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIisobnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCkpLGZlKCksRHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJs''@;'; put 'put ''ZURldGFpbHMuVEFCTEVfSUQsIiAiKSxmZSg1KSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfQllfTk0sIiAiKSxmZSg1KSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05f''@;'; put 'put ''RFRUTSwiICIpLGZlKDUpLERyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9SRUFTT05fVFhULCIgIil9fWZ1bmN0aW9uIGd5dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSxHdCgxLCJjbHItaWNvbiIsNzcpLExlKDIsIiBPbmx5IHRo''@;'; put 'put ''ZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIiksaGUoKSl9ZnVuY3Rpb24gbXl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2Iiw1MSksZ3QoMyxmeXQsMiwwLCJwIiw0NSkoNCxw''@;'; put 'put ''eXQsMjEsNSwibmctY29udGFpbmVyIiw4KSxoZSgpLGRlKDUsImRpdiIsNTIpKDYsImRpdiIsNTMpKDcsImRpdiIsNTQpKDgsImRpdiIsNTUpKDksImJ1dHRvbiIsNTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDQpO3JldHVybiBDdChoLmdvVG9CYXNlKG51bGw9''@;'; put 'put ''PWguanNQYXJhbXM/bnVsbDpoLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxMZSgxMCwiIFZpZXcgYmFzZSB0YWJsZSAiKSxoZSgpLGRlKDExLCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSg0KTtyZXR1cm4gQ3QoaC5nZXRUYWJsZShoLnRhYmxlSWQp''@;'; put 'put ''KX0pLExlKDEyLCIgVmlldyBzdGFnZWQgZGF0YSAiKSxoZSgpLGRlKDEzLCJidXR0b24iLDU4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSg0KTtyZXR1cm4gQ3QoaC5nb0JhY2sobnVsbD09aC5qc1BhcmFtcz9udWxsOmguanNQYXJhbXMuVEFCTEVfTk0pKX0pLExl''@;'; put 'put ''KDE0LCIgRWRpdCBiYXNlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoMTUsImRpdiIsNTkpKDE2LCJidXR0b24iLDYwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDQpLmFwcHJvdmVUYWJsZSgpKX0pLExlKDE3LCIgQUNDRVBUICIpLGhlKCksZGUoMTgsImJ1dHRv''@;'; put 'put ''biIsNjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkucmVqZWN0T3Blbj0hMCl9KSxMZSgxOSwiIFJFSkVDVCAiKSxoZSgpLGRlKDIwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsNjIpKDIxLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgyMiwiaW5wdXQiLDYzKSxn''@;'; put 'put ''aSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSg0KTtyZXR1cm4gbWkoZi5mb3JtYXR0ZWRWYWx1ZXMsaCl8fChmLmZvcm1hdHRlZFZhbHVlcz1oKSxDdChoKX0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDQpLmZvcm1hdHRp''@;'; put 'put ''bmdDaGFuZ2VkKCkpfSksaGUoKSxkZSgyMywibGFiZWwiLDY0KSxMZSgyNCksaGUoKSgpKCkoKSxkZSgyNSwiZGl2Iiw2NSksZ3QoMjYsZ3l0LDMsMCwic3BhbiIsNjYpLGRlKDI3LCJkaXYiLDMxKSgyOCwiZGl2Iiw2NykoMjksInNwYW4iLDY4KSxMZSgzMCwiIENoYW5nZWQgUm93cyAiKSxk''@;'; put 'put ''ZSgzMSwic3BhbiIsNjkpLExlKDMyKSxoZSgpKCksZGUoMzMsInNwYW4iLDcwKSxMZSgzNCwiIEFkZGVkIFJvd3MgIiksZGUoMzUsInNwYW4iLDY5KSxMZSgzNiksaGUoKSgpLGRlKDM3LCJzcGFuIiw3MSksTGUoMzgsIiBEZWxldGVkIFJvd3MgIiksZGUoMzksInNwYW4iLDY5KSxMZSg0MCks''@;'; put 'put ''aGUoKSgpKCkoKSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSg0KTtmZSgzKSxNZSgibmdJZiIsIWEudGFibGVEZXRhaWxzKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlRGV0YWlscyksZmUoMTIpLE1lKCJjbHJMb2FkaW5nIixhLmFjY2VwdExvYWRpbmcpKCJkaXNhYmxlZCIsIWEubG9hZGlu''@;'; put 'put ''Z1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8fGEubm9DaGFuZ2VzKSxmZSgyKSxNZSgiZGlzYWJsZWQiLCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09PShudWxsPT1hLnBhcmFtcz9udWxsOmEucGFyYW1zLklTQVBQUk9WRVIpfHxhLm5vQ2hh''@;'; put 'put ''bmdlcyksZmUoNCkscGkoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxmZSgyKSx3cihhLmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxmZSgyKSxNZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxmZSg2KSx3cihhLmxlbnMudXBkYXRlZCksZmUoNCksd3IoYS5s''@;'; put 'put ''ZW5zLm5ldyksZmUoNCksd3IoYS5sZW5zLmRlbGV0ZWQpfX1mdW5jdGlvbiB2eXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDc1KSgxLCJwIiw4MSksTGUoMiwiTG9hZGluZyB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gYnl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwic3BhbiIs''@;'; put 'put ''NzkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZ3QoMyx2eXQsMywwLCJkaXYiLDgwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoMyksTWUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIHl5dChjLGwpezEmYyYmKGRlKDAsInAiLDcyKSxMZSgxLCIgVGhlcmUgYXJl''@;'; put 'put ''IG5vIGNoYW5nZXMgdG8gc2hvdyAiKSxoZSgpKX1mdW5jdGlvbiBfeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0aCIsNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksd3IoYSl9fWZ1bmN0aW9uIHd5dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDg2KSxMZSgx''@;'; put 'put ''KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5pbmRleCxkPVJlKDIpLmluZGV4LGg9UmUoNCk7ZmUoKSxEcigiT3JpZ2luYWwgdmFsdWUgaXM6ICIsaC5hcnJPZkNoYW5nZXNbZF1bYV0sIiIpfX1mdW5jdGlvbiBDeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsODQpLExlKDEpLGd0KDIsd3l0''@;'; put 'put ''LDIsMSwic3BhbiIsODUpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1SZSgyKS5pbmRleCxmPVJlKDQpO01lKCJuZ0NsYXNzIixzcCgzLEo2ZSwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSkpLGZlKCksRHIoIiAiLGYuZGlm''@;'; put 'put ''ZlRhYmxlLmRhdGFbaF1bYV0sIiAiKSxmZSgpLE1lKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIFN5dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsQ3l0LDMsNSwidGQiLDgzKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKS5p''@;'; put 'put ''bmRleCxkPVJlKDQpO2ZlKCksTWUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIE15dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgyKS5pbmRleCxoPVJlKDQpO2ZlKCksRHIoIiAiLGguZGlmZlRh''@;'; put 'put ''YmxlLmRhdGFbZF1bYV0sIiAiKX19ZnVuY3Rpb24geHl0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxNeXQsMiwxLCJ0ZCIsNDcpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpLmluZGV4LGQ9UmUoNCk7ZmUoKSxNZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gRXl0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwidHIiLDgyKSxndCgxLFN5dCwyLDEsIm5nLWNvbnRhaW5lciIsOCkoMix4eXQsMiwxLCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9UmUoNCk7TWUoIm5nQ2xhc3MiLHBNKDMsWDZlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0''@;'; put 'put ''ZWQiPT1kLmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLGZlKCksTWUoIm5nSWYiLCJ1cGRhdGVkIj09PWQuY2hBcnJbYV0pLGZlKCksTWUoIm5nSWYiLCJ1cGRhdGVkIiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBUeXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJk''@;'; put 'put ''aXYiLDI5KSgxLCJkaXYiLDMwKSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiwzMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5nb1RvQXBwcm92YWxzTGlzdCgpKX0pLEd0KDUsImNsci1pY29uIiwzNCksTGUoNiwiQmFjayB0byBhcHByb3Zh''@;'; put 'put ''bHMgbGlzdCAiKSxoZSgpKCksZGUoNywiZGl2IiwzNSkoOCwiaDMiLDM2KSxMZSg5KSxoZSgpKCksZGUoMTAsImRpdiIsMzcpKDExLCJhIiwzOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5nZXREZXRhaWxzKCkpfSksR3QoMTIsImNsci1pY29uIiwzOSks''@;'; put 'put ''aGUoKSgpKCksZGUoMTMsInAiLDQwKSxMZSgxNCksaGUoKSgpLGRlKDE1LCJkaXYiLDQxKSxndCgxNixteXQsNDEsMTEsImRpdiIsNDIpLGhlKCksZ3QoMTcsYnl0LDQsMSwiZGl2Iiw0MyksZGUoMTgsImRpdiIsNDQpLGd0KDE5LHl5dCwyLDAsInAiLDQ1KSxkZSgyMCwidGFibGUiLDMpKDIx''@;'; put 'put ''LCJ0aGVhZCIpKDIyLCJ0ciIsNDYpLGd0KDIzLF95dCwyLDEsInRoIiw0NyksaGUoKSgpLGRlKDI0LCJ0Ym9keSIpLGd0KDI1LEV5dCwzLDcsInRyIiw0OCksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoOSksRHIoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFy''@;'; put 'put ''YW1zLlRBQkxFX05NLCIgIiksZmUoNSksRHIoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFyYW1zLlRBQkxFX0RFU0MsIiAiKSxmZSgyKSxNZSgibmdJZiIsYS5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSksZmUoMiksTWUoIm5nSWYiLGEubG9hZGluZ1Rh''@;'; put 'put ''YmxlJiZhLm5vQ2hhbmdlcyksZmUoNCksTWUoIm5nRm9yT2YiLGEucm93SGVhZGVyKSxmZSgyKSxNZSgibmdGb3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24gQXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyNyksZ3QoMSxUeXQsMjYsNywiZGl2IiwyOCksaGUoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PVJlKDIpO2ZlKCksTWUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24ga3l0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzkpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIER5dChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiwiTG9hZGluZyBwcmV2aWV3''@;'; put 'put ''IiksaGUoKSgpKX1mdW5jdGlvbiBJeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDg3KSxndCgxLGt5dCwyLDAsInNwYW4iLDg4KSgyLER5dCwzLDAsImRpdiIsOCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEu''@;'; put 'put ''bG9hZGVkKX19ZnVuY3Rpb24gUnl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMyksZ3QoMSxBeXQsMiwxLCJkaXYiLDI0KSxkZSgyLCJkaXYiLDI1KSxndCgzLEl5dCwzLDIsImRpdiIsMjYpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQpLGZl''@;'; put 'put ''KDIpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBMeXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NiksR3QoMSwiY2xyLWljb24iLDc3KSxMZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLGhlKCkpfWZ1''@;'; put 'put ''bmN0aW9uIE95dChjLGwpezEmYyYmR3QoMCwiZGl2Iiw0OSl9ZnVuY3Rpb24gUHl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3NSkoMSwicCIsODEpLExlKDIsIkxvYWRpbmcgdGFibGUiKSxoZSgpKCkpfWZ1bmN0aW9uIEZ5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTA0KSgxLCJzcGFu''@;'; put 'put ''Iiw3OSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxndCgzLFB5dCwzLDAsImRpdiIsODApLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtmZSgzKSxNZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKX19ZnVuY3Rpb24gSHl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGgiLDQpLExlKDEpLGhlKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHdyKGEpfX1mdW5jdGlvbiBOeXQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiw4NiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCkuaW5kZXgsZD1SZSgyKS5pbmRleCxoPVJlKDQpO2ZlKCksRHIoIk9yaWdpbmFsIHZhbHVlIGlz''@;'; put 'put ''OiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19ZnVuY3Rpb24gVnl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDg0KSxMZSgxKSxndCgyLE55dCwyLDEsInNwYW4iLDg1KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9UmUoMikuaW5kZXgsZj1SZSg0KTtN''@;'; put 'put ''ZSgibmdDbGFzcyIsc3AoMyxKNmUsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSxmZSgpLERyKCIgIixmLmRpZmZUYWJsZS5kYXRhW2hdW2FdLCIgIiksZmUoKSxNZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJb''@;'; put 'put ''aF0pfX1mdW5jdGlvbiBCeXQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFZ5dCwzLDUsInRkIiw4MyksbGkoKSksMiZjKXtjb25zdCBhPVJlKCkuaW5kZXgsZD1SZSg0KTtmZSgpLE1lKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBqeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0''@;'; put 'put ''ZCIsNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoMikuaW5kZXgsaD1SZSg0KTtmZSgpLERyKCIgIixoLmRpZmZUYWJsZS5kYXRhW2RdW2FdLCIgIil9fWZ1bmN0aW9uIHp5dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsanl0LDIsMSwidGQiLDQ3KSxsaSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9UmUoKS5pbmRleCxkPVJlKDQpO2ZlKCksTWUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIFV5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiw4MiksZ3QoMSxCeXQsMiwxLCJuZy1jb250YWluZXIiLDgpKDIsenl0LDIsMSwibmctY29udGFpbmVyIiw4''@;'; put 'put ''KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPVJlKDQpO01lKCJuZ0NsYXNzIixwTSgzLFg2ZSwiYWRkZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVkIj09ZC5jaEFyclthXSwidXBkYXRlZCI9PWQuY2hBcnJbYV0pKSxmZSgpLE1lKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxm''@;'; put 'put ''ZSgpLE1lKCJuZ0lmIiwidXBkYXRlZCIhPT1kLmNoQXJyW2FdKX19ZnVuY3Rpb24gWnl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5MykoMSwiZGl2Iiw5NCkoMiwiZGl2IiwzMSkoMywiZGl2IiwzMikoNCwic3BhbiIsOTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gd3QoYSksQ3QoUmUoMykuZ29Ub1N1Ym1pdExpc3QoKSl9KSxHdCg1LCJjZHMtaWNvbiIsOTYpLExlKDYsIkJhY2sgdG8gc3VibWl0dGVkIGxpc3QgIiksaGUoKSgpLGRlKDcsImRpdiIsOTcpKDgsImgzIiw5OCksTGUoOSksaGUoKSgpLGRlKDEwLCJkaXYiLDM3KSgxMSwiYSIsMzgp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykudGFibGVGbGFnPSEwKX0pLEd0KDEyLCJjbHItaWNvbiIsMzkpLGhlKCkoKSgpLGRlKDEzLCJwIiw5OSksTGUoMTQpLGhlKCkoKSxkZSgxNSwiZGl2Iiw1MCkoMTYsImRpdiIsNTEpKDE3LCJkaXYiLDczKSgxOCwi''@;'; put 'put ''c3BhbiIpLExlKDE5LCJUYWJsZSBJZDoiKSxoZSgpLGRlKDIwLCJzdHJvbmciLDc0KSgyMSwic3BhbiIpLExlKDIyKSxoZSgpKCkoKSxkZSgyMywiZGl2IikoMjQsInNwYW4iKSxMZSgyNSwiU3VibWl0dGVkIG9uOiIpLGhlKCksZGUoMjYsInNwYW4iLDc1KSxMZSgyNyksaGUoKSgpLGRlKDI4''@;'; put 'put ''LCJkaXYiKSgyOSwic3BhbiIpLExlKDMwLCJTdWJtaXQgTWVzc2FnZToiKSxoZSgpLGRlKDMxLCJzcGFuIiksTGUoMzIpLGhlKCkoKSgpLGRlKDMzLCJkaXYiLDUyKSgzNCwiZGl2Iiw1MykoMzUsImRpdiIsNTQpKDM2LCJkaXYiLDU1KSgzNywiYnV0dG9uIiw1NiksRnQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMyk7cmV0dXJuIEN0KGguZ29Ub0Jhc2UoaC5zdWJPYmouYmFzZSkpfSksTGUoMzgsIiBWaWV3IGJhc2UgdGFibGUgIiksaGUoKSxkZSgzOSwiYnV0dG9uIiw1NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoMyk7cmV0dXJu''@;'; put 'put ''IEN0KGguZ2V0VGFibGUoaC5zdWJPYmoudGFibGVJZCkpfSksTGUoNDAsIiBWaWV3IHN0YWdlZCBkYXRhICIpLGhlKCksZGUoNDEsImJ1dHRvbiIsNTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDMpO3JldHVybiBDdChoLmdvQmFjayhoLnN1Yk9iai5iYXNlKSl9''@;'; put 'put ''KSxMZSg0MiwiIEVkaXQgYmFzZSB0YWJsZSAiKSxoZSgpKCkoKSgpLGRlKDQzLCJkaXYiLDY1KSxndCg0NCxMeXQsMywwLCJzcGFuIiw2NiksZGUoNDUsImRpdiIsMzEpKDQ2LCJkaXYiLDY3KSg0Nywic3BhbiIsNjgpLExlKDQ4LCIgQ2hhbmdlZCBSb3dzICIpLGRlKDQ5LCJzcGFuIiw2OSks''@;'; put 'put ''TGUoNTApLGhlKCkoKSxkZSg1MSwic3BhbiIsNzApLExlKDUyLCIgQWRkZWQgUm93cyAiKSxkZSg1Mywic3BhbiIsNjkpLExlKDU0KSxoZSgpKCksZGUoNTUsInNwYW4iLDcxKSxMZSg1NiwiIERlbGV0ZWQgUm93cyAiKSxkZSg1Nywic3BhbiIsNjkpLExlKDU4KSxoZSgpKCkoKSgpKCksZGUo''@;'; put 'put ''NTksImRpdiIsNTMpKDYwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMTAwKSg2MSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoNjIsImlucHV0Iiw2MyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMyk7cmV0dXJuIG1pKGYuZm9ybWF0dGVkVmFsdWVzLGgp''@;'; put 'put ''fHwoZi5mb3JtYXR0ZWRWYWx1ZXM9aCksQ3QoaCl9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0pLGhlKCksZGUoNjMsImxhYmVsIiksTGUoNjQpLGhlKCkoKSgpKCkoKSgpLGRlKDY1LCJkaXYiLDEwMSksZ3QoNjYs''@;'; put 'put ''T3l0LDEsMCwiZGl2Iiw0MiksaGUoKSxndCg2NyxGeXQsNCwxLCJkaXYiLDEwMiksZGUoNjgsImRpdiIsMTAzKSg2OSwidGFibGUiLDMpKDcwLCJ0aGVhZCIpKDcxLCJ0ciIsNDYpLGd0KDcyLEh5dCwyLDEsInRoIiw0NyksaGUoKSgpLGRlKDczLCJ0Ym9keSIpLGd0KDc0LFV5dCwzLDcsInRy''@;'; put 'put ''Iiw0OCksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoOSksRHIoIiAiLGEuc3ViT2JqLmJhc2UsIiAiKSxmZSg1KSxEcigiICIsYS50YWJsZURlc2NyaXB0aW9uLCIgIiksZmUoNiksTWUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIithLnN1Yk9iai50YWJsZUlkKSxmZSgyKSxE''@;'; put 'put ''cigiICIsYS5zdWJPYmoudGFibGVJZCwiIiksZmUoNSksRHIoIiAiLGEuc3ViT2JqLnN1Ym1pdHRlZCwiICIpLGZlKDUpLERyKCIgIixhLnN1Yk9iai5zdWJtaXRSZWFzb24sIiAiKSxmZSgxMiksTWUoIm5nSWYiLGEuZGlmZnNMaW1pdCksZmUoNiksd3IoYS5sZW5zLnVwZGF0ZWQpLGZlKDQp''@;'; put 'put ''LHdyKGEubGVucy5uZXcpLGZlKDQpLHdyKGEubGVucy5kZWxldGVkKSxmZSg0KSxwaSgibmdNb2RlbCIsYS5mb3JtYXR0ZWRWYWx1ZXMpLGZlKDIpLHdyKGEuZm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRlZCIpLGZlKDIpLE1lKCJuZ0lmIixhLmxvYWRlZCksZmUoKSxN''@;'; put 'put ''ZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKSxmZSg1KSxNZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIpLGZlKDIpLE1lKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlvbiBXeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkxKSxndCgxLFp5dCw3NSwxNiwiZGl2Iiw5MiksaGUoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24gWXl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gR3l0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiwx''@;'; put 'put ''MDUpKDEsImRpdiIsMTA2KSgyLCJzcGFuIiw3OSksTGUoMywiIExvYWRpbmcuLi4gIiksaGUoKSxndCg0LFl5dCwzLDAsImRpdiIsOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNCksTWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uICR5dChjLGwpe2lmKDEmYyYmKGRlKDAs''@;'; put 'put ''ImRpdiIpLGd0KDEsV3l0LDIsMSwiZGl2Iiw4OSkoMixHeXQsNSwxLCJkaXYiLDkwKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKX19bGV0IFE2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo''@;'; put 'put ''LGYsdil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5yb3V0ZT12LHRoaXMuZGV0YWlsc09wZW49ITEsdGhpcy5yZWplY3RPcGVuPSExLHRoaXMubGVucz17bmV3OjAsdXBkYXRlZDowLGRlbGV0''@;'; put 'put ''ZWQ6MH0sdGhpcy5sb2FkZWQ9ITEsdGhpcy5sb2FkaW5nVGFibGU9ITEsdGhpcy5zdWJtaXRSZWFzb249IiIsdGhpcy5pbnN0YW5jZT0iaG90SW5zdGFuY2UiLHRoaXMuYWNjZXB0TG9hZGluZz0hMSx0aGlzLnJlamVjdExvYWRpbmc9ITEsdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy50YWJsZUZs''@;'; put 'put ''YWc9ITEsdGhpcy5yb3dLZXlzPVtdLHRoaXMuY2hBcnI9W10sdGhpcy5zZWNvbmRPcGVuPSExLHRoaXMuZm9ybWF0dGVkVmFsdWVzPSEwLHRoaXMuY2hhbmdlc0Fycj1bXSx0aGlzLmRpZmZUYWJsZT17ZGF0YTpbXX0sdGhpcy5kaWZmc0xpbWl0PSExLHRoaXMucmVjb3Jkc0xpbWl0PTEwMCx0''@;'; put 'put ''aGlzLnJlZnJlc2hTdGFydHVwc2VydmljZUFmdGVyQXBwcm92ZT0hMX1nZXQgbm9DaGFuZ2VzKCl7cmV0dXJuIDA9PT10aGlzLmxlbnMubmV3JiYwPT09dGhpcy5sZW5zLnVwZGF0ZWQmJjA9PT10aGlzLmxlbnMuZGVsZXRlZH1nb1RvQmFzZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwo''@;'; put 'put ''Ii92aWV3L2RhdGEvIithKX1nb1RvQXBwcm92YWxzTGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9hcHByb3ZlIil9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb0JhY2soYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJs''@;'; put 'put ''KCIvZWRpdG9yLyIrYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dEZXRhaWxzU2VsZWN0KGEpe2EucHJldmVudERlZmF1bHQoKSx0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Z2V0RGV0YWlscygpe3RoaXMuZGV0YWlsc09w''@;'; put 'put ''ZW49ITB9b25Ib3RTZWxlY3Rpb24oYSl7dGhpcy5ob3RTZWxlY3Rpb249YS5zbGljZSgwLDQpfW9uSG90RGVzZWxlY3QoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RTZWxlY3Rpb249bnVsbH0sMTAwKX1yZWplY3RpbmcoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnJl''@;'; put 'put ''amVjdExvYWRpbmc9ITAsYS5zdWJtaXRSZWFzb249YS5zdWJtaXRSZWFzb24ucmVwbGFjZSgvXG4vZywiLiAiKTtsZXQgZD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsU1RQX1JFQVNPTjphLnN1Ym1pdFJlYXNvbn07eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uu''@;'; put 'put ''cmVqZWN0aW5nKGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvcmVqZWN0aW9uIikudGhlbihoPT57YS5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITEsYS5yZWplY3RMb2FkaW5nPSExfSl9KSgpfWFwcHJvdmVU''@;'; put 'put ''YWJsZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuYWNjZXB0TG9hZGluZz0hMDtsZXQgZD17QUNUSU9OOiJBUFBST1ZFX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6YS5wYXJhbXM/LkRJRkZUSU1FLExJQkRTOmEucGFyYW1zPy5MSUJEU307eWllbGQgYS5z''@;'; put 'put ''YXNTdG9yZVNlcnZpY2UuYXBwcm92ZVRhYmxlKGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihoPT57YS5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRlckFwcHJvdmUmJmEuc2FzU2VydmljZS5yZWxvYWRTdGFydHVwRGF0YSgpLGEucm91dGUubmF2aWdhdGVC''@;'; put 'put ''eVVybCgiL3Jldmlldy9oaXN0b3J5Iil9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExfSl9KSgpfWdvVG9TdWJtaXRMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZCIpfWNhbGxDaGFuZ2VzSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShm''@;'; put 'put ''dW5jdGlvbiooKXt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKGEpLnRoZW4oaD0+e2QudGFibGVEZXRhaWxzPWguanNwYXJhbXNbMF0sZC5qc1BhcmFtcz1oLmpzcGFyYW1zWzBdO2xldCBmPVtdO2Zvcihjb25zdCB2IGluIGQuanNQYXJhbXMpZC5qc1BhcmFtcy5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eSh2KSYmZi5wdXNoKHYpO2Qua2V5c0FycmF5PWYsIk1QRV9UQUJMRVMiPT09aC5qc3BhcmFtc1swXS5CQVNFX0RTJiYoZC5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRlckFwcHJvdmU9ITApfSkuY2F0Y2goaD0+e2QuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9Pntk''@;'; put 'put ''LmxvYWRlZD0hMH0pfSkoKX1mb3JtYXR0aW5nQ2hhbmdlZCgpe3RoaXMuY2FsY0RpZmYoKX1jYWxjRGlmZigpe2lmKCF0aGlzLnJlc3BvbnNlKXJldHVybjtsZXQgYT10aGlzLnJlc3BvbnNlLm5ldyxkPXRoaXMucmVzcG9uc2UudXBkYXRlcyxoPXRoaXMucmVzcG9uc2UuZGVsZXRlZCxmPXRo''@;'; put 'put ''aXMucmVzcG9uc2Uub3JpZ2luYWxzO3RoaXMuZm9ybWF0dGVkVmFsdWVzJiYoYT10aGlzLnJlc3BvbnNlLmZtdF9uZXcsZD10aGlzLnJlc3BvbnNlLmZtdF91cGRhdGVzLGg9dGhpcy5yZXNwb25zZS5mbXRfZGVsZXRlZCxmPXRoaXMucmVzcG9uc2UuZm10X29yaWdpbmFscyksdGhpcy5vcmln''@;'; put 'put ''aW5hbHM9Zix0aGlzLnJvd0tleXM9W107Zm9yKGxldCBkdD0wO2R0PGQubGVuZ3RoO2R0Kyspe2xldCBKdD1PYmplY3Qua2V5cyhkW2R0XSk7Zm9yKGxldCB2bj0wO3ZuPEp0Lmxlbmd0aDt2bisrKWRbZHRdW0p0W3ZuXV0hPT1mW2R0XVtKdFt2bl1dJiZ0aGlzLmNoYW5nZXNBcnIucHVzaCh7''@;'; put 'put ''aW5kOmR0LGZpZWxkOkp0W3ZuXSxwcm9wOmRbZHRdW0p0W3ZuXV0sb3JpZ2luYWw6ZltkdF1bSnRbdm5dXX0pfXRoaXMubGVucz17bmV3OnRoaXMucGFyYW1zPy5OVU1fQURERUR8fDAsdXBkYXRlZDp0aGlzLnBhcmFtcz8uTlVNX1VQREFURUR8fDAsZGVsZXRlZDp0aGlzLnBhcmFtcz8uTlVN''@;'; put 'put ''X0RFTEVURUR8fDB9O2xldCBaPVtdLHJlPWQuY29uY2F0KGEsaCk7Zm9yKGxldCBkdD0wO2R0PHRoaXMucmVzcG9uc2UuY29scy5sZW5ndGg7ZHQrKylaLnB1c2godGhpcy5yZXNwb25zZS5jb2xzW2R0XS5OQU1FKTtsZXQgY2U9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdD90aGlz''@;'; put 'put ''LnJlY29yZHNMaW1pdDp0aGlzLmxlbnMubmV3LGJlPXRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy51cGRhdGVkO3RoaXMuZGlmZnNMaW1pdD10aGlzLmxlbnMubmV3PnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlzLmxlbnMudXBk''@;'; put 'put ''YXRlZD50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLmRlbGV0ZWQ+dGhpcy5yZWNvcmRzTGltaXQsdGhpcy5hZGRDb3VudD1jZTtsZXQgQmU9W10scWU9W107Zm9yKGxldCBkdD0wO2R0PFoubGVuZ3RoO2R0KyspcWUucHVzaCh7ZGF0YTpaW2R0XSxyZWFkT25seTohMH0pO3RoaXMuZGlm''@;'; put 'put ''ZlRhYmxlLmRhdGE9cmU7Zm9yKGxldCBkdD0wO2R0PHJlLmxlbmd0aDtkdCsrKXtsZXQgdm49T2JqZWN0LmtleXMocmVbZHRdKTt0aGlzLnJvd0tleXMucHVzaCh2bil9bGV0IHJ0PVtdLHB0PVtdO2ZvcihsZXQgZHQ9MDtkdDx0aGlzLmRpZmZUYWJsZS5kYXRhLmxlbmd0aDtkdCsrKXtpZihk''@;'; put 'put ''dDxiZSYmMCE9PWJlKXtydC5wdXNoKFtdKSxwdC5wdXNoKFtdKSxCZS5wdXNoKCJ1cGRhdGVkIik7bGV0IEp0PU9iamVjdC5rZXlzKHRoaXMuZGlmZlRhYmxlLmRhdGFbZHRdKTtmb3IobGV0IHZuPTA7dm48SnQubGVuZ3RoO3ZuKyspe2xldCBDbj1KdFt2bl07ZltkdF1bQ25dIT09ZFtkdF1b''@;'; put 'put ''Q25dPyhydFtkdF0ucHVzaCghMCkscHRbZHRdLnB1c2goZltkdF1bQ25dKSk6KHJ0W2R0XS5wdXNoKCExKSxwdFtkdF0ucHVzaChudWxsKSl9dGhpcy5hcnJDaGFuZ2VkPXJ0LHRoaXMuYXJyT2ZDaGFuZ2VzPXB0fWR0Pj1iZSYmZHQ8YmUrY2UmJkJlLnB1c2goImFkZGVkIiksZHQ+Y2UrYmUt''@;'; put 'put ''MSYmQmUucHVzaCgiZGVsZXRlZCIpfXRoaXMuY2hBcnI9QmUsdGhpcy5yb3dIZWFkZXI9dGhpcy5yb3dLZXlzWzBdLHRoaXMuZGlmZlRhYmxlLmRhdGE9cmV9bmdBZnRlclZpZXdJbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYS5fZGV0YWlsc1N1Yj1hLnNhc1N0''@;'; put 'put ''b3JlU2VydmljZS5zdWJtaXR0RGV0YWlsLnN1YnNjcmliZShmdW5jdGlvbigpe3ZhciBoPWVlKGZ1bmN0aW9uKihmKXthLnN1Yk9iaj1mLnZpZXdEYXRhLGEudGFibGVJZD1mLnZpZXdEYXRhLnRhYmxlSWQsYS5zdWJtaXR0ZWQ9Zi52aWV3RGF0YS5zdWIsYS5zdWJtaXREZXRhaWxzPWYuZGF0''@;'; put 'put ''YSxhLnN1Ym1pdEFycj1bXTtmb3IobGV0IE0gaW4gYS5zdWJtaXREZXRhaWxzKSJzdWIiIT09TSYmYS5zdWJtaXRBcnIucHVzaChNKTtsZXQgdj17QUNUSU9OOiJTSE9XX0RJRkZTIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6KG5ldyBEYXRlKS50b1VUQ1N0cmluZygpfTthLnNhc1N0b3Jl''@;'; put 'put ''U2VydmljZS5zaG93RGlmZnModiwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKE09PnthLnBhcmFtcz1NLnBhcmFtc1swXSxhLnJlc3BvbnNlPU0sYS5jYWxjRGlmZigpLGEuY2FsbENoYW5nZXNJbmZvKGEudGFibGVJZCl9KS5jYXRjaChNPT5NKS5maW5hbGx5''@;'; put 'put ''KCgpPT57YS5sb2FkaW5nVGFibGU9ITB9KX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0eXBlb2YgYS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ+InUiKXJldHVybjthLnRhYmxlSWQ9YS5yb3V0ZXIuc25hcHNob3QucGFy''@;'; put 'put ''YW1zLnRhYmxlSWQ7bGV0IGQ9e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbiho''@;'; put 'put ''PT57YS5wYXJhbXM9aC5wYXJhbXNbMF0sYS5yZXNwb25zZT1oLGEuY2FsY0RpZmYoKSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PnthLmxvYWRpbmdUYWJsZT0hMCxhLnNldEZvY3VzKCl9KX0pKCl9bmdP''@;'; put 'put ''bkRlc3Ryb3koKXt0aGlzLl9kZXRhaWxzU3ViJiZ0aGlzLl9kZXRhaWxzU3ViLnVuc3Vic2NyaWJlKCl9c2V0Rm9jdXMoKXtzZXRUaW1lb3V0KCgpPT57bGV0IGE9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2NlcHRCdG4iKTthJiZhLmZvY3VzKCl9LDIwMCl9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uoa2gpLEdlKEJzKSxHZSh2YyksR2UoQ3UpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZS1kZXRhaWxzIl1dLGhvc3RBdHRyczpbMSwiY29u''@;'; put 'put ''dGVudC1jb250YWluZXIiXSxkZWNsczo0Mix2YXJzOjEyLGNvbnN0czpbWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEs''@;'; put 'put ''Im1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbMSwiZm9ybS1ibG9jayJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiXSxbImlkIiwiZm9ybUZpZWxkc184Iiwi''@;'; put 'put ''cm93cyIsIjUiLDEsInctMTAwIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zdWNjZXNz''@;'; put 'put ''LW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0IGxpbmstaXQiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCIsNCwibmdJZiJdLFsxLCJsZWZ0Iiwi''@;'; put 'put ''bGluay1pdCIsMywicm91dGVyTGluayJdLFsiY2xyVGFiTGluayIsIiJdLFs0LCJjbHJJZkFjdGl2ZSJdLFsxLCJvdmVyZmxvdy1hdXRvIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYi''@;'; put 'put ''XSxbMSwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3Rp''@;'; put 'put ''ZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwibXQtMCIsNCwibmdJZiJdLFsxLCJtdC0wIl0sWzEsImNhcmQtaGVhZGVyIiwicC0wIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxCYWNrIl0sWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwibS0wIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsic2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIl0sWzEsImNsci1jb2wtbWQtNCIsImFwcHJvdmFsSW5mbyJdLFsx''@;'; put 'put ''LCJ0b29sdGlwIiwidG9vbHRpcC1zbSIsInRvb2x0aXAtdG9wLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiMjgiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwi''@;'; put 'put ''bmdJZiJdLFsiY2xhc3MiLCJoLTI0dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCIsIm10LTAiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC1zaXplLTE4Iiw0LCJuZ0lmIl0s''@;'; put 'put ''WzEsImQtZmxleCJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiZC1mbGV4IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImNsci1yb3ciLCJmb250LXNpemUtMTUiXSxbMSwiY2xyLWNvbC1tZC01Il0s''@;'; put 'put ''WzEsImNsci1jb2wtbWQtNyJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMCJdLFsxLCJjbHItcm93IiwiY2xyLWdhcC01IiwiY2xyLWdhcC1zbS0wIl0sWzEsImJ0biIs''@;'; put 'put ''ImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwibXItNWkiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRu''@;'; put 'put ''LWluZm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiLCJjbHIt''@;'; put 'put ''YWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsImFjY2VwdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXItNWkiLDMsImNsaWNrIiwiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWyJpZCIsInJlamVjdEJ0biIsMSwiYnRuIiwiYnRuLXNtIiwi''@;'; put 'put ''YnRuIiwiYnRuLWRhbmdlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsIm1sLTIwaSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwiY2hlY2tlZCIsIiIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMSwiZm9ybWF0dGVk''@;'; put 'put ''LXZhbHVlcy10b2dnbGUiXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwicm93cy1ub3RpY2UiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWdhcC01IiwiY2xy''@;'; put 'put ''LWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0wIl0sWzEsImxhYmVsIiwibGFiZWwtd2FybmluZyJdLFsxLCJiYWRnZSJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwibGFiZWwiLCJsYWJlbC1kYW5nZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXNpemUtMTgiXSxbMSwibXQt''@;'; put 'put ''MTUiXSxbMSwibGluay1pdCIsMywicm91dGVyTGluayJdLFsxLCJtdC0xMCJdLFsxLCJyb3dzLW5vdGljZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNvbG9yLW9yYW5nZSJdLFsxLCJoLTI0dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnkt''@;'; put 'put ''Y29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWzEsImQtZmxleCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJsZWZ0IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIs''@;'; put 'put ''Im5nRm9yT2YiXSxbMSwibGVmdCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b29sdGlwLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1z''@;'; put 'put ''LWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImNhcmQgbS0wIiw0LCJuZ0lmIl0sWzEsImNhcmQiLCJtLTAiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCIsInNpemUiLCIy''@;'; put 'put ''MCJdLFsxLCJjbHItY29sLW1kLTQiXSxbMSwibXQtMCIsImZvbnQtd2VpZ2h0LTMwMCIsInRleHQtY2VudGVyIl0sWzEsIm0tMCIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibS0wIiwibWwtMjAtaSJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIiwib3ZlcmZsb3ctYXV0''@;'; put 'put ''byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtMjV2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250Il0sWzEsImgtMjV2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250''@;'; put 'put ''ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImxvYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGV0''@;'; put 'put ''YWlsc09wZW4sdil8fChoLmRldGFpbHNPcGVuPXYpLHZ9KSxkZSgxLCJoMyIsMSksTGUoMiwiQXBwcm92YWwgRGV0YWlscyIpLGhlKCksZGUoMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwidGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxMZSg4LCJOYW1lIiksaGUoKSxkZSg5LCJ0aCIsNCks''@;'; put 'put ''TGUoMTAsIlZhbHVlIiksaGUoKSgpKCksZGUoMTEsInRib2R5IiksZ3QoMTIsbHl0LDUsMywidHIiLDUpLGhlKCkoKSgpLGRlKDEzLCJkaXYiLDYpKDE0LCJidXR0b24iLDcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5kZXRhaWxzT3Blbj0hMX0pLExlKDE1LCIgT2sgIiksaGUo''@;'; put 'put ''KSgpKCksZGUoMTYsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgudGFibGVGbGFnLHYpfHwoaC50YWJsZUZsYWc9diksdn0pLGRlKDE3LCJoMyIsMSksTGUoMTgsIkFsbCBEZXRhaWxzIiksaGUoKSxkZSgxOSwiZGl2IiwyKSxn''@;'; put 'put ''dCgyMCxoeXQsMTksMiwiY2xyLXRhYnMiLDgpLGhlKCksZGUoMjEsImRpdiIsNikoMjIsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnRhYmxlRmxhZz0hMX0pLExlKDIzLCIgT2sgIiksaGUoKSgpKCksZGUoMjQsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFs''@;'; put 'put ''T3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmVqZWN0T3Blbix2KXx8KGgucmVqZWN0T3Blbj12KSx2fSksZGUoMjUsImgzIiwxKSxMZSgyNiwiUmVhc29uIE1lc3NhZ2UiKSxoZSgpLGRlKDI3LCJkaXYiLDIpKDI4LCJmb3JtIikoMjksInNlY3Rpb24iLDkpKDMwLCJkaXYi''@;'; put 'put ''LDEwKSgzMSwibGFiZWwiLDExKSxMZSgzMiwiUmVhc29uIGZvciByZWplY3Rpbmc/IiksaGUoKSxkZSgzMywidGV4dGFyZWEiLDEyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguc3VibWl0UmVhc29uLHYpfHwoaC5zdWJtaXRSZWFzb249diksdn0pLGhlKCko''@;'; put 'put ''KSgpKCkoKSxkZSgzNCwiZGl2Iiw2KSgzNSwiYnV0dG9uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlamVjdE9wZW49ITF9KSxMZSgzNiwiIENhbmNlbCAiKSxoZSgpLGRlKDM3LCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVqZWN0''@;'; put 'put ''aW5nKCl9KSxMZSgzOCwiIE9LICIpLGhlKCkoKSgpLGRlKDM5LCJkaXYiLDE1KSxndCg0MCxSeXQsNCwyLCJkaXYiLDE2KSg0MSwkeXQsMywyLCJkaXYiLDgpLGhlKCkpLDImZCYmKHBpKCJjbHJNb2RhbE9wZW4iLGguZGV0YWlsc09wZW4pLGZlKDEyKSxNZSgibmdGb3JPZiIsaC5rZXlzQXJy''@;'; put 'put ''YXkpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgudGFibGVGbGFnKSxmZSg0KSxNZSgibmdJZiIsaC50YWJsZUZsYWcpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgucmVqZWN0T3BlbiksZmUoOSkscGkoIm5nTW9kZWwiLGguc3VibWl0UmVhc29uKSxNZSgibmdNb2RlbE9wdGlvbnMiLEdz''@;'; put 'put ''KDExLGF5dCkpKCJpbm5lckhUTUwiLGguc3VibWl0UmVhc29uLFY0KSxmZSg0KSxNZSgiY2xyTG9hZGluZyIsaC5yZWplY3RMb2FkaW5nKSxmZSgzKSxNZSgibmdJZiIsIWguc3VibWl0dGVkKSxmZSgpLE1lKCJuZ0lmIixoLnN1Ym1pdHRlZCkpfSxkZXBlbmRlbmNpZXM6W3d1LG5zLGJhLGw3''@;'; put 'put ''LHFsLE1kLG5sLG83LCRzLHlwLGMxLEhsLHJzLG91LEt1LGowLEh5LFAyLGRzLElkLEJ5LFNoLF9tLENtLHg3LHdtLHltLFM3XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEt5dD1jPT4oe25vQm9yZGVyOmN9KSxxeXQ9KCk9PlszLDUsMTAsMTVdO2Z1bmN0aW9uIFh5''@;'; put 'put ''dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTApKDEsImRpdiIsMTEpLEd0KDIsImNsci1pY29uIiwxMiksZGUoMywiaDMiLDEzKSxMZSg0LCJUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFpbmluZyIpLGhlKCkoKSgpKX1mdW5jdGlvbiBKeXQoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTQpLExl''@;'; put 'put ''KDEsIiBSRVZJRVcgIiksaGUoKSl9ZnVuY3Rpb24gUXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTUpLExlKDEsIiBZb3UgaGF2ZSAiKSxkZSgyLCJzcGFuIiksTGUoMyksaGUoKSxMZSg0LCJhcHByb3ZhbHMgcmVtYWluaW5nICIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLERy''@;'; put 'put ''KCIiLGEucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gZV90KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTgpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIHRfdChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiwiTG9hZGluZyBhcHByb3ZhbHMgbGlzdCIpLGhl''@;'; put 'put ''KCkoKSl9ZnVuY3Rpb24gbl90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxlX3QsMiwwLCJzcGFuIiwxNykoMix0X3QsMywwLCJkaXYiLDkpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGVk''@;'; put 'put ''KX19ZnVuY3Rpb24gcl90KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzYpfWZ1bmN0aW9uIGlfdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDM3KSwyJmMmJk1lKCJjbHJTbWFsbCIsITApfWZ1bmN0aW9uIGFfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1k''@;'; put 'put ''Zy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLExlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxMZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksTGUoNiksaGUoKSxkZSg3LCJjbHItZGctY2VsbCIpLExlKDgpLGhlKCksZGUoOSwiY2xyLWRnLWNlbGwiKSgxMCwiZGl2IiwyNCkoMTEs''@;'; put 'put ''ImEiLDI1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoUmUoMikuZ2V0Q2xpY2tlZChoKSl9KSxHdCgxMiwiY2xyLWljb24iLDI2KSxkZSgxMywic3BhbiIsMjcpLExlKDE0LCJHbyB0byByZXZpZXcgcGFnZSBzY3JlZW4iKSxoZSgpKCksZGUo''@;'; put 'put ''MTUsImEiLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPVJlKDIpO3JldHVybiBDdChmLnJlamVjdExvYWRpbmc/IiI6TS5yZWplY3RpbmcodikpfSksZ3QoMTYscl90LDEsMCwiY2xyLWljb24iLDI5KSgxNyxpX3QsMSwx''@;'; put 'put ''LCJjbHItc3Bpbm5lciIsMzApLGRlKDE4LCJzcGFuIiwyNyksTGUoMTksIlJlamVjdCIpLGhlKCkoKSxkZSgyMCwiYSIsMzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMikuZ2V0VGFibGUoaC50YWJsZUlkKSl9KSxHdCgyMSwi''@;'; put 'put ''Y2xyLWljb24iLDMyKSxkZSgyMiwic3BhbiIsMjcpLExlKDIzLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxoZSgpKCkoKSgpLGRlKDI0LCJjbHItZGctY2VsbCIsMzMpKDI1LCJidXR0b24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3Jl''@;'; put 'put ''dHVybiBSZSgyKS5kb3dubG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksR3QoMjYsImNsci1pY29uIiwzNSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEuc3VibWl0dGVyKSxmZSgyKSx3cihhLmJhc2VUYWJsZSksZmUoMiks''@;'; put 'put ''d3IoYS5zdWJtaXR0ZWQpLGZlKDIpLHdyKGEuc3VibWl0UmVhc29uKSxmZSg4KSxNZSgibmdJZiIsIWEucmVqZWN0TG9hZGluZyksZmUoKSxNZSgibmdJZiIsYS5yZWplY3RMb2FkaW5nKSxmZSg4KSxNZSgiaWQiLGEudGFibGVJZCl9fWZ1bmN0aW9uIG9fdChjLGwpe2lmKDEmYyYmKGRlKDAs''@;'; put 'put ''ImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMTkpKDIsImNsci1kZy1jb2x1bW4iLDIwKSxMZSgzLCJTVUJNSVRURVIiKSxoZSgpLGRlKDQsImNsci1kZy1jb2x1bW4iLDIwKSxMZSg1LCJCQVNFIFRBQkxFIiksaGUoKSxkZSg2LCJjbHItZGctY29sdW1uIiwyMCksTGUoNywiU1VCTUlUVEVEIiks''@;'; put 'put ''aGUoKSxkZSg4LCJjbHItZGctY29sdW1uIiwyMCksTGUoOSwiU1VCTUlUIFJFQVNPTiIpLGhlKCksZGUoMTAsImNsci1kZy1jb2x1bW4iKSxMZSgxMSwiQUNUSU9OIiksaGUoKSxkZSgxMiwiY2xyLWRnLWNvbHVtbiIpLExlKDEzLCJET1dOTE9BRCIpLGhlKCksZ3QoMTQsYV90LDI3LDcsImNs''@;'; put 'put ''ci1kZy1yb3ciLDIxKSxkZSgxNSwiY2xyLWRnLWZvb3RlciIpKDE2LCJjbHItZGctcGFnaW5hdGlvbiIsMjIsMCkoMTgsImNsci1kZy1wYWdlLXNpemUiLDIzKSxMZSgxOSwiSXRlbXMgcGVyIHBhZ2UiKSxoZSgpLExlKDIwKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9aGEoMTcpLGQ9UmUo''@;'; put 'put ''KTtmZSgyKSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLGZlKDIpLE1lKCJjbHJEZ0ZpZWxkIiwiYmFzZVRhYmxlIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNvbiIpLGZlKDYpLE1lKCJjbHJEZ0l0ZW1z''@;'; put 'put ''T2YiLGQuYXBwcm92ZUxpc3QpLGZlKDIpLE1lKCJjbHJEZ1BhZ2VTaXplIiwxMCksZmUoMiksTWUoImNsclBhZ2VTaXplT3B0aW9ucyIsR3MoMTAscXl0KSksZmUoMiksVmYoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBhcHByb3Zh''@;'; put 'put ''bHMgIil9fWxldCBzX3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5jZHI9dix0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVt''@;'; put 'put ''PTEwfWdldFRhYmxlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0Q2xpY2tlZChhKXt2b2lkIDAhPT10aGlzLmFwcHJvdmVMaXN0JiYodGhpcy50YWJsZUlkPXRoaXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCx0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoInJl''@;'; put 'put ''dmlldy9hcHByb3ZlRGV0LyIrdGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkKSl9cmVqZWN0aW5nKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3ZvaWQgMCE9PWQuYXBwcm92ZUxpc3QmJihkLnRhYmxlSWQ9ZC5hcHByb3ZlTGlzdFthXS50YWJsZUlkKTtsZXQgaD17U1RQ''@;'; put 'put ''X0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTpkLnRhYmxlSWQsU1RQX1JFQVNPTjoicXVpY2sgcmVqZWN0aW9uIn07dHJ5eyhkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMCwoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGgsIkJyb3dzZXJQYXJhbXMi''@;'; put 'put ''LCJhcHByb3ZlcnMvcmVqZWN0aW9uIikpLmZyb21zYXNbMF0uUkVTUE9OU0UuaW5jbHVkZXMoIlNVQ0NFU1MiKSYmKChkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMSxkLmFwcHJvdmVMaXN0Py5zcGxpY2UoYSwxKSxkLnJlbWFpbmVkLS0sZC5jZHIuZGV0ZWN0Q2hhbmdl''@;'; put 'put ''cygpKX1jYXRjaChmKXtkLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9yZWplY3Rpb24iLGYpfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmZldGNoQXBwcm92YWxzKCl9KSgpfWZldGNoQXBwcm92YWxzKCl7dmFy''@;'; put 'put ''IGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5pdGVtc051bT0xMDtsZXQgZD17U1RQX0FDVElPTjoiT1BFTl9BUFBST1ZBTFMifTt0cnl7bGV0IGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0QXBwcm92YWxzKGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0YXBwcm92''@;'; put 'put ''YWxzIik7YS5yZW1haW5lZD1oLmZyb21zYXMubGVuZ3RoO2xldCBmPWguZnJvbXNhcy5tYXAoZnVuY3Rpb24odil7cmV0dXJue3RhYmxlSWQ6di5UQUJMRV9JRCxzdWJtaXR0ZXI6di5TVUJNSVRURURfQllfTk0sc3VibWl0dGVkOnYuU1VCTUlUVEVEX09OX0RUVE0sYmFzZVRhYmxlOnYuQkFT''@;'; put 'put ''RV9UQUJMRSxzdWJtaXRSZWFzb246di5TVUJNSVRURURfUkVBU09OX1RYVH19KTthLmFwcHJvdmVMaXN0PWYsYS5sb2FkZWQ9ITB9Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIixoKX19KSgpfWRvd25sb2FkKGEpe2xl''@;'; put 'put ''dCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0''@;'; put 'put ''YWJsZT0iK2EpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGtoKSxHZSh2YyksR2UoTHMpLEdlKEJzKSxHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUiXV0saG9zdEF0''@;'; put 'put ''dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjksdmFyczo4LGNvbnN0czpbWyJwYWdpbmF0aW9uIiwiIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVy''@;'; put 'put ''IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiYXBwcm92YWxzLWxpc3Qtd3JhcHBl''@;'; put 'put ''ciIsNCwibmdJZiJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1jb2wtbWQtMTIiXSxbNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImNhcmQtYmxvY2siLCJub2FwcHJvdmFscy1pbmZvLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFu''@;'; put 'put ''ZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFy''@;'; put 'put ''ay1ncmF5Il0sWzEsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbNCwiY2xyRGdJdGVtcyIsImNs''@;'; put 'put ''ckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdLFsicm9sZSIsInRvb2x0aXAiLDEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1hcm91bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0''@;'; put 'put ''b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItZ3JlZW4iLDMsImNsaWNrIl0sWyJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjI0Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxl''@;'; put 'put ''ZnQiLCJjb2xvci1yZWQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiIsNCwibmdJZiJdLFszLCJjbHJTbWFsbCIsNCwibmdJZiJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xv''@;'; put 'put ''ci1ibHVlIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siLCJpZCJd''@;'; put 'put ''LFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiXSxbMywiY2xyU21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksZ3QoMixYeXQsNSwwLCJkaXYiLDMpLGRlKDMsImRpdiIsNCksZ3QoNCxKeXQs''@;'; put 'put ''MiwwLCJoMyIsNSkoNSxReXQsNSwxLCJwIiw2KSxoZSgpLGd0KDYsbl90LDMsMiwiZGl2Iiw3KSxkZSg3LCJkaXYiLDgpLGd0KDgsb190LDIxLDExLCJkaXYiLDkpLGhlKCkoKSgpKSwyJmQmJihmZSgyKSxNZSgibmdJZiIsMD09PWgucmVtYWluZWQpLGZlKCksTWUoIm5nQ2xhc3MiLHNwKDYs''@;'; put 'put ''S3l0LCFoLmxvYWRlZCkpLGZlKCksTWUoIm5nSWYiLGgubG9hZGVkJiYwIT09aC5yZW1haW5lZCksZmUoKSxNZSgibmdJZiIsaC5sb2FkZWQmJjAhPT1oLnJlbWFpbmVkKSxmZSgpLE1lKCJuZ0lmIiwhaC5sb2FkZWQpLGZlKDIpLE1lKCJuZ0lmIixoLmFwcHJvdmVMaXN0JiYwIT09aC5yZW1h''@;'; put 'put ''aW5lZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLEFtLFFmLFI3LGNPLEp5LFh4LHVPLEVtLFNwLEw3LHRfLFRtLGs3LHhtLEQ3LEhsLFJkXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGxfdD1jPT4oe25vQm9yZGVyOmN9KSxjX3Q9KCk9PlszLDUsMTAsMTVdO2Z1bmN0''@;'; put 'put ''aW9uIHVfdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTMpKDEsImRpdiIsMTQpLEd0KDIsImNsci1pY29uIiwxNSksZGUoMywiaDMiLDE2KSxMZSg0LCIgWW91IGhhdmUgbm90IHN1Ym1pdHRlZCBhbnkgdGFibGVzICIpLGhlKCkoKSgpKX1mdW5jdGlvbiBkX3QoYyxsKXsxJmMmJihkZSgwLCJo''@;'; put 'put ''MyIsMTcpLExlKDEsIiBTVUJNSVQgUVVFVUUgIiksaGUoKSl9ZnVuY3Rpb24gaF90KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTgpLExlKDEsIiBZb3UgaGF2ZSAiKSxkZSgyLCJzcGFuIiksTGUoMyksaGUoKSxMZSg0LCJzdWJtaXNzaW9ucyB3YWl0aW5nIHRvIGJlIGFwcHJvdmVkICIpLGhl''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgzKSxEcigiIixhLnJlbWFpbmVkLCIgIil9fWZ1bmN0aW9uIGZfdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDIxKSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBwX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExl''@;'; put 'put ''KDIsIkxvYWRpbmcgc3VibWl0dGVkIGxpc3QiKSxoZSgpKCkpfWZ1bmN0aW9uIGdfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTkpLGd0KDEsZl90LDIsMCwic3BhbiIsMjApKDIscF90LDMsMCwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxNZSgibmdJZiIsIWEu''@;'; put 'put ''bG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBtX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctcm93IiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChSZSg1KS5nb1RvRGV0''@;'; put 'put ''YWlscyhoLnRhYmxlSWQpKX0pLGRlKDEsImNsci1kZy1jZWxsIiksTGUoMiksaGUoKSxkZSgzLCJjbHItZGctY2VsbCIpLExlKDQpLGhlKCksZGUoNSwiY2xyLWRnLWNlbGwiKSxMZSg2KSxoZSgpLGRlKDcsImNsci1kZy1jZWxsIikoOCwiZGl2IiwyOSkoOSwiYSIsMzApLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoNSkuZ29Ub1N0YWdlKGgudGFibGVJZCkpfSksR3QoMTAsImNsci1pY29uIiwzMSksZGUoMTEsInNwYW4iLDMyKSxMZSgxMiwiR28gdG8gc3RhZ2VkIGRhdGEgc2NyZWVuIiksaGUoKSgpKCkoKSxkZSgxMywi''@;'; put 'put ''Y2xyLWRnLWNlbGwiLDMzKSgxNCwiYnV0dG9uIiwzNCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gUmUoNSkuZG93bmxvYWQoZi50YWJsZUlkKSxDdChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLEd0KDE1LCJjbHItaWNvbiIsMzUpLGhlKCko''@;'; put 'put ''KSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLmJhc2UpLGZlKDIpLHdyKGEuc3VibWl0dGVkKSxmZSgyKSx3cihhLnN1Ym1pdFJlYXNvbil9fWZ1bmN0aW9uIHZfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMjMpKDIsImNsci1k''@;'; put 'put ''Zy1jb2x1bW4iKSxMZSgzLCJCQVNFIFRBQkxFIiksaGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiwyNCksTGUoNSwiU1VCTUlUVEVEIiksaGUoKSxkZSg2LCJjbHItZGctY29sdW1uIiwyNCksTGUoNywiU1VCTUlUIFJFQVNPTiIpLGhlKCksZGUoOCwiY2xyLWRnLWNvbHVtbiIsMTMpLExlKDks''@;'; put 'put ''IkFDVElPTiIpLGhlKCksZGUoMTAsImNsci1kZy1jb2x1bW4iLDEzKSxMZSgxMSwiRE9XTkxPQUQiKSxoZSgpLGd0KDEyLG1fdCwxNiwzLCJjbHItZGctcm93IiwyNSksZGUoMTMsImNsci1kZy1mb290ZXIiKSgxNCwiY2xyLWRnLXBhZ2luYXRpb24iLDI2LDApKDE2LCJjbHItZGctcGFnZS1z''@;'; put 'put ''aXplIiwyNyksTGUoMTcsIkl0ZW1zIHBlciBwYWdlIiksaGUoKSxMZSgxOCksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPWhhKDE1KSxkPVJlKDQpO2ZlKDQpLE1lKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJzdWJtaXRSZWFzb24iKSxmZSg2KSxN''@;'; put 'put ''ZSgiY2xyRGdJdGVtc09mIixkLnN1Ym1pdHRlckxpc3QpLGZlKDIpLE1lKCJjbHJEZ1BhZ2VTaXplIiwxMCksZmUoMiksTWUoImNsclBhZ2VTaXplT3B0aW9ucyIsR3MoOCxjX3QpKSxmZSgyKSxWZigiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJ''@;'; put 'put ''dGVtcywiIHN1Ym1pc3Npb25zICIpfX1mdW5jdGlvbiBiX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIyKSxndCgxLHZfdCwxOSw5LCJkaXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIixhLnN1Ym1pdHRlckxpc3QmJjAhPT1hLnJlbWFpbmVkKX19ZnVu''@;'; put 'put ''Y3Rpb24geV90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw2KSxndCgxLHVfdCw1LDAsImRpdiIsNyksZGUoMiwiZGl2Iiw4KSxndCgzLGRfdCwyLDAsImgzIiw5KSg0LGhfdCw1LDEsInAiLDEwKSxoZSgpLGd0KDUsZ190LDMsMiwiZGl2IiwxMSkoNixiX3QsMiwxLCJkaXYiLDEyKSxoZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxNZSgibmdJZiIsMD09PWEucmVtYWluZWQmJmEubG9hZGVkKSxmZSgpLE1lKCJuZ0NsYXNzIixzcCg2LGxfdCwhYS5sb2FkZWQpKSxmZSgpLE1lKCJuZ0lmIiwwIT09YS5yZW1haW5lZCksZmUoKSxNZSgibmdJZiIsYS5sb2FkZWQmJjAhPT1hLnJl''@;'; put 'put ''bWFpbmVkKSxmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24gX190KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0KSxndCgxLHlfdCw3LDgsImRpdiIsNSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsIWEu''@;'; put 'put ''c3ViUmVhZHkpfX1mdW5jdGlvbiB3X3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSxHdCgxLCJhcHAtYXBwcm92ZS1kZXRhaWxzIiksaGUoKSl9bGV0IGU4ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMuc2FzU2VydmljZT12LHRoaXMucmVtYWluZWQ9MCx0aGlzLmxvYWRlZD0hMSx0aGlzLnN1YlJlYWR5PSExLHRoaXMuZGV0YWlsc09wZW49ITF9Z29Ub1N0YWdlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8i''@;'; put 'put ''K2EpfWdvVG9EZXRhaWxzKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvc3VibWl0dGVkLyIrYSl9Z2V0RGV0YWlscyhhLGQpe3RoaXMuc3ViUmVhZHk9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNlbmREZXRhaWxzKGEsZCx0aGlzLnN1Ym1p''@;'; put 'put ''dERhdGEpfSwwKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGQ9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDthLml0ZW1zTnVtPTEwO3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRTdWJtaXR0cygpO2lmKGEucmVt''@;'; put 'put ''YWluZWQ9aC5mcm9tc2FzLmxlbmd0aCxhLnJlbWFpbmVkPjApe2Euc3VibWl0dGVyPWguZnJvbXNhc1swXS5TVUJNSVRURURfQllfTk07bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELGJhc2U6di5CQVNFX1RBQkxFLHN1Ym1pdHRlZDp2''@;'; put 'put ''LlNVQk1JVFRFRF9PTl9EVFRNLHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9OTSxzdWJtaXRSZWFzb246di5TVUJNSVRURURfUkVBU09OX1RYVH19KTtpZihhLnN1Ym1pdHRlckxpc3Q9ZixhLnN1Ym1pdERhdGE9aC5mcm9tc2FzLHR5cGVvZiBkPCJ1Iil7Y29uc3Qgdj1hLnN1Ym1pdHRlckxp''@;'; put 'put ''c3QuZmluZEluZGV4KE09Pk0udGFibGVJZD09PWQpO3Y+LTEmJmEuZ2V0RGV0YWlscyhhLnN1Ym1pdHRlckxpc3Rbdl0sdil9fWEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZWRpdG9ycy9nZXRzdWJtaXRzIixoKX19KSgpfW5nQWZ0ZXJW''@;'; put 'put ''aWV3SW5pdCgpe3RoaXMuX3JlYWR5U3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9YX0pLHRoaXMuX2JhY2tUb1N1Yj10aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXRMaXN0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFk''@;'; put 'put ''eT0hdGhpcy5zdWJSZWFkeSx0aGlzLmRldGFpbHNPcGVuPSExfSl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3Blbiho''@;'; put 'put ''K3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uoa2gpLEdlKHZjKSxHZShMcyksR2UoQ3UpLEdlKEJzKSl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3VibWl0dGVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sicGFnaW5hdGlvbiIsIiJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJjb250ZW50LWFyZWEiLDQsIm5n''@;'; put 'put ''SWYiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNl''@;'; put 'put ''bnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1u''@;'; put 'put ''IGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwibm8tc3VibWl0dGVkLXRhYmxlcyIsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQt''@;'; put 'put ''Y2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWyJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwiY2xyRGdJdGVtcyIsImNsckRn''@;'; put 'put ''SXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdLFsxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1sYWJlbCIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIsMSwicm93IiwianVzdGlmeS1jb250''@;'; put 'put ''ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ibHVlIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJw''@;'; put 'put ''LTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSBmb3IgdGFibGUgcmVjb3JkIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24o''@;'; put 'put ''ZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEpLGd0KDEsX190LDIsMSwiZGl2IiwyKSgyLHdfdCwyLDAsImRpdiIsMyksaGUoKSksMiZkJiYoZmUoKSxNZSgibmdJZiIsIWguc3ViUmVhZHkpLGZlKCksTWUoIm5nSWYiLGguc3ViUmVhZHkpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxBbSxRZixSNyxj''@;'; put 'put ''TyxKeSxYeCx1TyxFbSxTcCxMNyx0XyxUbSxrNyx4bSxENyxIbCxRNmVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQ190PShjLGwpPT4oe3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH0pO2Z1bmN0aW9uIFNfdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTIpLEd0KDEsImNs''@;'; put 'put ''ci1pY29uIiwxMyksZGUoMiwiaDMiLDE0KSxMZSgzLCJUaGVyZSBpcyBubyBoaXN0b3J5IHRvIHNob3ciKSxoZSgpKCkpfWZ1bmN0aW9uIE1fdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRp''@;'; put 'put ''bXBsaWNpdCxmPVJlKCk7cmV0dXJuIEN0KGYuZ2V0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQsZD1SZSgpO2ZlKCksd3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIHhfdChjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1MbigpO2RlKDAsImRpdiIpKDEsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIEN0KGYuZ2V0QmFzZVRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLExlKDIsIlZJRVciKSxoZSgpLGRlKDMsInNwYW4iKSxM''@;'; put 'put ''ZSg0LCIgLyAiKSxoZSgpLGRlKDUsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIEN0KGYuZ2V0RWRpdFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLExlKDYsIkVESVQiKSxoZSgpKCl9fWZ1bmN0aW9uIEVf''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQsZD1SZSgpO2ZlKCksd3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIFRfdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDYpLExlKDIpLGhlKCksZGUo''@;'; put 'put ''MywidGQiLDYpLGd0KDQsTV90LDIsMSwiYSIsMTUpKDUseF90LDcsMCwiZGl2IiwxNikoNixFX3QsMiwxLCJzcGFuIiwxNiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O2ZlKDIpLHdyKGEpLGZlKDIpLE1lKCJuZ0lmIixkPDEpLGZlKCksTWUoIm5nSWYiLGQ8''@;'; put 'put ''MiYmZD49MSksZmUoKSxNZSgibmdJZiIsZD49Mil9fWZ1bmN0aW9uIEFfdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDIwKSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBrX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxvYWRpbmcgaGlzdG9yeSIp''@;'; put 'put ''LGhlKCkoKSl9ZnVuY3Rpb24gRF90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOCksZ3QoMSxBX3QsMiwwLCJzcGFuIiwxOSkoMixrX3QsMywwLCJkaXYiLDE2KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLCFhLmxv''@;'; put 'put ''YWRlZCl9fWZ1bmN0aW9uIElfdChjLGwpezEmYyYmKGRlKDAsImgzIiwyOCksTGUoMSwiSElTVE9SWSIpLGhlKCkpfWZ1bmN0aW9uIFJfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDI5KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxEcigiIFRvIHVubG9jayBtb3JlIHRo''@;'; put 'put ''YW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCwiIHJlY29yZHMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKX19ZnVuY3Rpb24gTF90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMzMpLEZ0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoMykuZ2V0QXBwckluZGV4KGgpKX0pLGRlKDEsImNsci1kZy1jZWxsIiwzNCkoMiwiYSIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUo''@;'; put 'put ''MykuZ2V0QmFzZVRhYmxlKGguYmFzZXRhYmxlKSl9KSxMZSgzKSxoZSgpKCksZGUoNCwiY2xyLWRnLWNlbGwiLDM2KSxMZSg1KSxoZSgpLGRlKDYsImNsci1kZy1jZWxsIiwzNCksTGUoNyksaGUoKSxkZSg4LCJjbHItZGctY2VsbCIsMzQpLExlKDkpLGhlKCksZGUoMTAsImNsci1kZy1jZWxs''@;'; put 'put ''IiwzNCksTGUoMTEpLGhlKCksZGUoMTIsImNsci1kZy1jZWxsIiwzNCksTGUoMTMpLGhlKCksZGUoMTQsImNsci1kZy1jZWxsIiwzNykoMTUsImJ1dHRvbiIsMzgpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIFJlKDMpLmRvd25sb2FkKGYu''@;'; put 'put ''dGFibGVJZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgxNiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMyksd3IoYS5iYXNldGFibGUpLGZlKCksTWUoIm5nQ2xhc3MiLGxwKDcsQ190LCJSRUpFQ1RFRCI9PT1hLnN0YXR1cywi''@;'; put 'put ''QVBQUk9WRUQiPT09YS5zdGF0dXMpKSxmZSgpLHdyKGEuc3RhdHVzKSxmZSgyKSx3cihhLnN1Ym1pdHRlciksZmUoMiksd3IoYS5zdWJtaXR0ZWRSZWFzb24pLGZlKDIpLHdyKGEuc3VibWl0dGVkKSxmZSgyKSx3cihhLnJldmlld2VkKX19ZnVuY3Rpb24gT190KGMsbCl7aWYoMSZjJiYoZGUo''@;'; put 'put ''MCwiY2xyLWRhdGFncmlkIiwzMCkoMSwiY2xyLWRnLWNvbHVtbiIsMzEpLExlKDIsIkJBU0VfVEFCTEUiKSxoZSgpLGRlKDMsImNsci1kZy1jb2x1bW4iLDMxKSxMZSg0LCJTVEFUVVMiKSxoZSgpLGRlKDUsImNsci1kZy1jb2x1bW4iLDMxKSxMZSg2LCJTVUJNSVRURVIiKSxoZSgpLGRlKDcs''@;'; put 'put ''ImNsci1kZy1jb2x1bW4iLDMxKSxMZSg4LCJTVUJNSVQgUkVBU09OIiksaGUoKSxkZSg5LCJjbHItZGctY29sdW1uIiwzMSksTGUoMTAsIlNVQk1JVFRFRCIpLGhlKCksZGUoMTEsImNsci1kZy1jb2x1bW4iLDMxKSxMZSgxMiwiQVBQUk9WRUQgLyBSRUpFQ1RFRCIpLGhlKCksZGUoMTMsImNs''@;'; put 'put ''ci1kZy1jb2x1bW4iKSxMZSgxNCwiRE9XTkxPQUQiKSxoZSgpLGd0KDE1LExfdCwxNywxMCwiY2xyLWRnLXJvdyIsMzIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJjbHJEZ0ZpZWxkIiwiYmFzZXRhYmxlIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJzdGF0dXMiKSxmZSgy''@;'; put 'put ''KSxNZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLGZlKDIpLE1lKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkUmVhc29uIiksZmUoMiksTWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSxNZSgiY2xyRGdGaWVsZCIsInJldmlld2VkIiksZmUoNCksTWUoImNsckRnSXRlbXNPZiIs''@;'; put 'put ''YS5oaXN0b3J5KX19ZnVuY3Rpb24gUF90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5sb2FkRGF0YSgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO01lKCJj''@;'; put 'put ''bHJMb2FkaW5nIixhLmxvYWRpbmdNb3JlKSxmZSgpLERyKCIgTG9hZCAiLGEucm93c0xlZnRUb0xvYWQsIiBtb3JlICIpfX1mdW5jdGlvbiBGX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSxndCgyLElfdCwyLDAsImgzIiwyMykoMyxSX3QsMiwxLCJwIiwyNCks''@;'; put 'put ''aGUoKSxndCg0LE9fdCwxNiw3LCJjbHItZGF0YWdyaWQiLDI1KSxkZSg1LCJkaXYiLDI2KSxndCg2LFBfdCwyLDIsImJ1dHRvbiIsMjcpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1''@;'; put 'put ''ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGEubG9hZGVkKSxmZSgyKSxNZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQ9PT1hLkluZmluaXR5JiZhLnJvd3NMZWZ0VG9Mb2FkPjApfX1jb25zdCBIX3Q9''@;'; put 'put ''W3twYXRoOiJhcHByb3ZlIixjb21wb25lbnQ6c190fSx7cGF0aDoiYXBwcm92ZURldC86dGFibGVJZCIsY29tcG9uZW50OlE2ZX0se3BhdGg6InN1Ym1pdHRlZCIsY29tcG9uZW50OmU4ZX0se3BhdGg6InN1Ym1pdHRlZC86dGFibGVJZCIsY29tcG9uZW50OmU4ZX0se3BhdGg6Imhpc3Rvcnki''@;'; put 'put ''LGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc2FzU2VydmljZT12LHRoaXMuaGlzdG9yeT1bXSx0aGlz''@;'; put 'put ''LnRhYmxlVGl0bGVzPVtdLHRoaXMuaGlzdG9yeUFycj1bXSx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwLHRoaXMub3Blbk1vZGFsPSExLHRoaXMubm9EYXRhPSExLHRoaXMuYXBwcm92ZURhdGE9e30sdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5oaXN0''@;'; put 'put ''UGFyYW1zPXtISVNUOjAsU1RBUlRST1c6MSxOT0JTOi0xfSx0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pz''@;'; put 'put ''Q29uZmlnKCl9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0QmFzZVRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nZXRFZGl0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2Vk''@;'; put 'put ''aXRvci8iK2EpfWdldEFwcHJJbmRleChhKXtjb25zdCBkPXRoaXMuaGlzdG9yeUFyci5maW5kSW5kZXgoaD0+aC5UQUJMRV9JRD09PWEudGFibGVJZCk7ZD4tMSYmKHRoaXMuYXBwcm92ZURhdGE9dGhpcy5oaXN0b3J5QXJyW2RdLHRoaXMub3Blbk1vZGFsPSEwKX1nZXQgcm93c0xlZnRUb0xv''@;'; put 'put ''YWQoKXtjb25zdCBhPXRoaXMuaGlzdFBhcmFtcy5OT0JTLXRoaXMuaGlzdG9yeS5sZW5ndGgsZD10aGlzLmhpc3RQYXJhbXMuSElTVDtyZXR1cm4gYTw9MD8wOmE+ZD9kOmF9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxm''@;'; put 'put ''PWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSsiJl9jb250ZXh0bmFtZT0iK3RoaXMuc2FzanNDb25maWcuY29udGV4dE5h''@;'; put 'put ''bWUpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGQ9e1NUQVJUUk9XOmEuaGlzdFBhcmFtcy5ISVNUK2EuaGlzdFBhcmFtcy5TVEFSVFJPV307YS5sb2FkaW5nTW9yZT0hMDt0cnl7bGV0IGYsaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRIaXN0''@;'; put 'put ''b3J5KGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIpO2EubG9hZGluZ01vcmU9ITEsYS5oaXN0UGFyYW1zPWguaGlzdHBhcmFtc1swXTtjb25zdCB2PWguZnJvbXNhcy5zbGljZSgwLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKTtpZih2''@;'; put 'put ''Lmxlbmd0aD4wKXtjb25zdCBNPXY7YS5oaXN0b3J5QXJyPXYsZj1PYmplY3Qua2V5cyhNWzBdKSxhLnRhYmxlVGl0bGVzPWY7bGV0IEQ9di5tYXAoZnVuY3Rpb24oWil7cmV0dXJue3RhYmxlSWQ6Wi5UQUJMRV9JRCxzdWJtaXR0ZXI6Wi5TVUJNSVRURVIsc3VibWl0dGVkUmVhc29uOlouU1VC''@;'; put 'put ''TUlUVEVEX1JFQVNPTl9UWFQsc3VibWl0dGVkOlouU1VCTUlUVEVELHN0YXR1czpaLlNUQVRVUyxyZXZpZXdSZWFzb246Wi5SRVZJRVdfUkVBU09OX1RYVCxyZXZpZXdlcjpaLlJFVklFV0VSLHJldmlld2VkOlouUkVWSUVXRUQsbnVtT2ZBcHByb3ZhbHM6Wi5OVU1fT0ZfQVBQUk9WQUxTX1JF''@;'; put 'put ''UVVJUkVELGJhc2V0YWJsZTpaLkJBU0VfVEFCTEV9fSk7YS5oaXN0b3J5LnB1c2goLi4uRCksYS5sb2FkZWQ9ITB9ZWxzZSBhLmxvYWRlZD0hMCwwPT09YS5oaXN0b3J5Lmxlbmd0aCYmKGEubm9EYXRhPSEwKX1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFw''@;'; put 'put ''cHJvdmVycy9nZXRoaXN0b3J5IixoKSxhLmxvYWRpbmdNb3JlPSExfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmxvYWREYXRhKCl9KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUxKSxH''@;'; put 'put ''ZShraCksR2UodmMpLEdlKExzKSxHZShCcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhpc3RvcnkiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjIwLHZhcnM6Nixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEi''@;'; put 'put ''XSxbImlkIiwibm9EYXRhQ29udGFpbmVyIiwiY2xhc3MiLCJjYXJkLWJsb2NrIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2Rh''@;'; put 'put ''bFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJ0YWJsZSJdLFsxLCJsZWZ0Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWxhYmVsIiwiQ2xvc2UgbW9kYWwiLDEsImJ0biIsImJ0bi1v''@;'; put 'put ''dXRsaW5lIiwzLCJjbGljayJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbImlkIiwibm9EYXRhQ29udGFpbmVyIiwxLCJjYXJk''@;'; put 'put ''LWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWyJj''@;'; put 'put ''bGFzcyIsImN1cnNvci1wb2ludGVyIHRhYmxlLWxpbmsiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLCJ0YWJsZS1saW5rIiwzLCJjbGljayJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1''@;'; put 'put ''bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4''@;'; put 'put ''dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1oaXN0b3J5IGRhdGFncmlkLWN1c3RvbS1mb290ZXIiLDQsIm5nSWYiXSxbMSwibG9hZC1tb3JlIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIi''@;'; put 'put ''LCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImJ0biBidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIs''@;'; put 'put ''ImNvbG9yLWRhcmstZ3JheSJdLFsxLCJkYXRhZ3JpZC1oaXN0b3J5IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWzMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsaWNrIl0sWzEsInZlckNlbnRlciJdLFsxLCJidG4iLCJi''@;'; put 'put ''dG4tc20iLCJidG4tbGluayIsIm0tMCIsMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIiwzLCJuZ0NsYXNzIl0sWzEsInZlckNlbnRlciIsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJi''@;'; put 'put ''dG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksZ3QoMSxTX3QsNCwwLCJkaXYiLDEpLGRlKDIsImNs''@;'; put 'put ''ci1tb2RhbCIsMiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgub3Blbk1vZGFsLHYpfHwoaC5vcGVuTW9kYWw9diksdn0pLGRlKDMsImg0IiwzKSxMZSg0LCJBcHByb3ZhbCBkZXRhaWxzIiksaGUoKSxkZSg1LCJkaXYiLDQpKDYsInRhYmxlIiw1KSg3''@;'; put 'put ''LCJ0aGVhZCIpKDgsInRyIikoOSwidGgiLDYpLExlKDEwLCJOYW1lIiksaGUoKSxkZSgxMSwidGgiLDYpLExlKDEyLCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDEzLCJ0Ym9keSIpLGd0KDE0LFRfdCw3LDQsInRyIiw3KSxoZSgpKCkoKSxkZSgxNSwiZGl2Iiw4KSgxNiwiYnV0dG9uIiw5KSxGdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgub3Blbk1vZGFsPSExfSksTGUoMTcsIiBPSyAiKSxoZSgpKCkoKSxndCgxOCxEX3QsMywyLCJkaXYiLDEwKSgxOSxGX3QsNyw0LCJkaXYiLDExKSxoZSgpKSwyJmQmJihmZSgpLE1lKCJuZ0lmIixoLm5vRGF0YSksZmUoKSxwaSgiY2xyTW9kYWxP''@;'; put 'put ''cGVuIixoLm9wZW5Nb2RhbCksTWUoImNsck1vZGFsU2l6ZSIsInhsIiksZmUoMTIpLE1lKCJuZ0Zvck9mIixoLnRhYmxlVGl0bGVzKSxmZSg0KSxNZSgibmdJZiIsIWgubG9hZGVkKSxmZSgpLE1lKCJuZ0lmIiwhaC5ub0RhdGEmJmgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbd3UsbnMsYmEs''@;'; put 'put ''QW0sUWYsUjcsSnksRW0sU3AsTDcsdF8sVG0sazcseG0sRDcsSGwsb3UsS3UsajAsUDJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgTl90PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6Yy5mb3JDaGlsZChIX3QpLHpjXX0pfX1yZXR1cm4gY30pKCksVl90PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxOX3QsejAsbzkuZm9yUm9vdCgpLG5mLEN3XX0pfX1yZXR1cm4gY30pKCksQl90PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdP''@;'; put 'put ''bkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcmV2aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNs''@;'; put 'put ''czoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGpfdD0oYyxsKT0+KHtyZWplY3RlZDpjLGFjY2VwdGVkOmx9KTtmdW5jdGlvbiB6''@;'; put 'put ''X3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw2KSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBVX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxvYWRpbmcgc3VibWl0dGVkIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiBaX3QoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiLDQpLGd0KDEsel90LDIsMCwic3BhbiIsNSkoMixVX3QsMywwLCJkaXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxNZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gV190KGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5hcHByb3ZlVGFibGVTY3JlZW4oKSl9KSxMZSgxLCIgQXBwcm92ZSAiKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtNZSgiZGlzYWJsZWQiLCJBUFBST1ZFRCI9''@;'; put 'put ''PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKXx8IlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5nQ2hhbmdl''@;'; put 'put ''cyl9fWZ1bmN0aW9uIFlfdChjLGwpezEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDMxKSgxLCJzcGFuIiksTGUoMiwiIFJldmVydCB0aGlzIGFuZCBhbGwgc3Vic2VxdWVudCBjaGFuZ2VzICIpLGhlKCkoKSl9ZnVuY3Rpb24gR190KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7''@;'; put 'put ''ZGUoMCwiYnV0dG9uIiwyOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5yZXZlcnRDaGFuZ2VzKCkpfSksTGUoMSwiIFJFVkVSVCAiKSxndCgyLFlfdCwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDMwKSxoZSgpfTImYyYmTWUoImNsckxvYWRpbmciLFJl''@;'; put 'put ''KDIpLnJldmVydGluZ0NoYW5nZXMpfWZ1bmN0aW9uICRfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIpKDEsImRpdiIsNykoMiwiZGl2Iiw4KSgzLCJoNCIsOSksTGUoNCwiU3RhZ2VkIERhdGEiKSxoZSgpKCkoKSxkZSg1LCJkaXYiLDEwKSg2LCJkaXYiLDExKSg3LCJk''@;'; put 'put ''aXYiLDEyKSg4LCJkaXYiLDgpLExlKDksIkJhc2ljIFN1Ym1pdHRlZCBEZXRhaWxzIiksaGUoKSgpLGRlKDEwLCJkaXYiKSgxMSwic3BhbiIpLExlKDEyLCJUYWJsZSBJZDoiKSxoZSgpLGRlKDEzLCJzdHJvbmciKSgxNCwic3BhbiIpLExlKDE1KSxoZSgpKCkoKSxkZSgxNiwiZGl2IikoMTcs''@;'; put 'put ''InNwYW4iKSxMZSgxOCwiQmFzZSBUYWJsZToiKSxoZSgpLGRlKDE5LCJhIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnZpZXdlclRhYmxlU2NyZWVuKCkpfSksTGUoMjApLGhlKCkoKSxkZSgyMSwiZGl2IikoMjIsInNwYW4iKSxMZSgyMywiU3VibWl0''@;'; put 'put ''IERhdGU6IiksaGUoKSxkZSgyNCwic3BhbiIsMTQpLExlKDI1KSxoZSgpKCksZGUoMjYsImRpdiIpKDI3LCJzcGFuIiksTGUoMjgsIlJldmlldyBTdGF0dXM6IiksaGUoKSxkZSgyOSwic3BhbiIsMTUpLExlKDMwKSxoZSgpKCkoKSxkZSgzMSwiZGl2IiwxNikoMzIsImRpdiIsMTIpKDMzLCJk''@;'; put 'put ''aXYiLDgpLExlKDM0LCJBY3Rpb25zIiksaGUoKSgpLGRlKDM1LCJkaXYiLDE3KSgzNiwiZGl2IiwxOCkoMzcsImJ1dHRvbiIsMTkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLExlKDM4LCIgVmlldyBiYXNlIHRhYmxl''@;'; put 'put ''ICIpLGhlKCksZ3QoMzksV190LDIsMiwiYnV0dG9uIiwyMCksZGUoNDAsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5nb0JhY2soKSl9KSxMZSg0MSwiIEVkaXQgYmFzZSB0YWJsZSAiKSxoZSgpLGRlKDQyLCJidXR0b24iLDIyKSxGdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBDdChoLmRvd25sb2FkKG51bGw9PWgudGFibGVEZXRhaWxzP251bGw6aC50YWJsZURldGFpbHMuVEFCTEVfSUQpKX0pLEd0KDQzLCJjbHItaWNvbiIsMjMpLGhlKCksZGUoNDQsImNsci10b29sdGlwIiksZ3QoNDUs''@;'; put 'put ''R190LDMsMSwiYnV0dG9uIiwyNCksaGUoKSgpKCkoKSgpLGRlKDQ2LCJkaXYiLDI1KSxHdCg0NywiaG90LXRhYmxlIiwyNiksaGUoKSxHdCg0OCwiZGl2IiwyNyksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKTtmZSgxNSksRHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJs''@;'; put 'put ''ZURldGFpbHMuVEFCTEVfSUQsIiIpLGZlKDUpLERyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUsIiAiKSxmZSg1KSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05fRFRUTSwi''@;'; put 'put ''ICIpLGZlKDQpLE1lKCJuZ0NsYXNzIixscCgxNyxqX3QsIlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpLCJBUFBST1ZFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJ''@;'; put 'put ''RVdfU1RBVFVTX0lEKSkpLGZlKCksRHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCwiICIpLGZlKDcpLE1lKCJkaXNhYmxlZCIsYS5yZXZlcnRpbmdDaGFuZ2VzKSxmZSgyKSxNZSgibmdJZiIsIllFUyIhPT0obnVsbD09YS50''@;'; put 'put ''YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5BTExPV19SRVNUT1JFKSksZmUoKSxNZSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5nQ2hhbmdlcyksZmUoNSksTWUoIm5nSWYiLCJZRVMiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQUxMT1dfUkVTVE9S''@;'; put 'put ''RSkpLGZlKDIpLE1lKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixhLmhvdFRhYmxlLmNvbHVtbnMpKCJtYXhSb3dzIixhLmhvdFRhYmxlLm1heFJvd3MpKCJoZWlnaHQiLGEuaG90VGFibGUuaGVpZ2h0KSgibGlj''@;'; put 'put ''ZW5zZUtleSIsYS5ob3RUYWJsZS5saWNlbnNlS2V5KSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuaG90VGFibGUuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscyl9fWNvbnN0IEtfdD1be3BhdGg6Ijp0YWJsZUlkIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnNhc1NlcnZpY2U9TSx0aGlzLmxvYWRlZD0hMSx0aGlzLnJldmVydGluZ0NoYW5n''@;'; put 'put ''ZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGNvbHVtbnM6W10saGVpZ2h0OjUwMCxzZXR0aW5nczp7fSxsaWNlbnNlS2V5OnZvaWQgMCxtYXhSb3dzOnRoaXMubGljZW5j''@;'; put 'put ''ZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZHx8MS8wLGFmdGVyR2V0Q29sSGVhZGVyOihELFoscmUpPT57Wi5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9fX1zdWJtaXR0ZWRUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVC''@;'; put 'put ''eVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZV9pZCl9YXBwcm92ZVRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLnRhYmxlX2lkKX12aWV3ZXJUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcv''@;'; put 'put ''ZGF0YS8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWdvQmFjaygpe0tuLnhsbWFwcy5maW5kKGQ9PmQudGFyZ2V0RFM9PT10aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKT90aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9ob21lL2V4Y2VsLW1hcHMvIit0aGlzLmhvdFRhYmxl''@;'; put 'put ''LmRhdGFbMF0uWExNQVBfSUQpOnRoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRo''@;'; put 'put ''aXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYS5saWNlbmNl''@;'; put 'put ''U2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9ZH0pLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwidSIpe2EudGFibGVfaWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7dHJ5e2xldCBkPXlp''@;'; put 'put ''ZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8fCFkLmpzcGFyYW1zKXRocm93IG5ldyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2EudGFibGVEZXRhaWxzPWQuanNwYXJhbXNbMF19Y2F0Y2go''@;'; put 'put ''ZCl7bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uub3BlblRhYmxlKGEudGFibGVfaWQpO2lmKCFkfHwhZC5z''@;'; put 'put ''dGFnZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sdj1bXTtmb3IobGV0IEQgaW4gaCloJiZmLnB1c2goRCk7Zm9yKGxldCBEPTA7RDxmLmxlbmd0aDtEKyspdi5w''@;'; put 'put ''dXNoKHtkYXRhOmZbRF19KTtsZXQgTT1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19O2EuaG90VGFibGUuZGF0YT1kLnN0YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJzPWYsYS5ob3RUYWJsZS5jb2x1bW5zPXYsYS5ob3RUYWJsZS5jZWxscz1NLGEubG9hZGVkPSEwLGEuc2V0''@;'; put 'put ''Rm9jdXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSxhLmxvYWRlZD0hMX19fSkoKX1yZXZlcnRDaGFuZ2VzKCl7dGhpcy5yZXZlcnRpbmdDaGFu''@;'; put 'put ''Z2VzPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL3Jlc3RvcmUiLHtyZXN0b3JlX2luOlt7bG9hZF9yZWY6dGhpcy50YWJsZV9pZH1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmVzdG9yZV9vdXQmJnRoaXMucm91dGUubmF2aWdhdGUoWyIvc3RhZ2UiXSkudGhl''@;'; put 'put ''bigoKT0+e3RoaXMucm91dGUubmF2aWdhdGUoW2Avc3RhZ2UvJHtkLmFkYXB0ZXJSZXNwb25zZS5yZXN0b3JlX291dFswXS5MT0FEUkVGfWBdKX0pfSkuZmluYWxseSgoKT0+e3RoaXMucmV2ZXJ0aW5nQ2hhbmdlcz0hMX0pfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRv''@;'; put 'put ''dy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwcm92YWwtYnRuIik7YSYmYS5mb2N1cygpfSwyMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUxKSxHZShraCksR2UodmMpLEdlKExzKSxHZShDdSksR2UoQnMpKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zdGFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiLCJjYXJkIl0sWyJjbGFzcyIsImgt''@;'; put 'put ''ODB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJoLTgwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50''@;'; put 'put ''ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC10aXRsZSIsInRleHQtY2VudGVyIl0sWzEsIm10LTAiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItcm93Il0sWzEsImNhcmQt''@;'; put 'put ''YmxvY2siLCJjbHItY29sLW1kLTYiLCJuby1ib3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwicHktNSJdLFsxLCJiYXNlVGFibGVMaW5rIiwzLCJjbGljayJdLFsxLCJtdC0xMCJdLFsxLCJtdC0xMCIsMywibmdDbGFzcyJdLFsxLCJjbHItY29sLW1kLTYiLCJjYXJkLWJsb2NrIiwibm8tYm9y''@;'; put 'put ''ZGVycyJdLFsxLCJtdC0yMCJdLFsxLCJyb3ciXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJpZCIsImFwcHJvdmFsLWJ0biIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2Vzcy1vdXRsaW5l''@;'; put 'put ''IHRleHQtY2VudGVyIG1yLTVpIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwi''@;'; put 'put ''dGV4dC1jZW50ZXIiLCJtci01aSIsIm1pbi13LTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyIHRleHQtY2VudGVyIG10LTIwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5n''@;'; put 'put ''SWYiXSxbMSwiY2FyZC1ibG9jayJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwibWF4Um93cyIsImhlaWdodCIsImxpY2Vuc2VLZXkiLCJh''@;'; put 'put ''ZnRlckdldENvbEhlYWRlciIsImNlbGxzIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiaWQiLCJhcHByb3ZhbC1idG4iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJj''@;'; put 'put ''bGljayIsImRpc2FibGVkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWRhbmdlciIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwi''@;'; put 'put ''Y2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLGd0KDIsWl90LDMsMiwiZGl2IiwyKSgzLCRfdCw0OSwyMCwiZGl2IiwzKSxoZSgpKCkpLDIm''@;'; put 'put ''ZCYmKGZlKDIpLE1lKCJuZ0lmIiwhaC5sb2FkZWQpLGZlKCksTWUoIm5nSWYiLGgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEsSGwsajAsTDIsUDIsdjcseTcsYjcsRF9dLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgcV90PSgoKT0+e2NsYXNzIGN7c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6MCx6Yy5mb3JDaGlsZChLX3QpLG85LmZvclJvb3QoKV19KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpO2Z1bmN0aW9uIFhfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgVmlld2VyIHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxs''@;'; put 'put ''b3dlZCl9fWZ1bmN0aW9uIEpfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgRWRpdG9yIHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3Nf''@;'; put 'put ''YWxsb3dlZCl9fWZ1bmN0aW9uIFFfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgU3RhZ2Ugcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dz''@;'; put 'put ''X2FsbG93ZWQpfX1mdW5jdGlvbiBld3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksTGUoMSwiIEhpc3Rvcnkgcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5''@;'; put 'put ''X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIHR3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgU3VibWl0IHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUuc3Vi''@;'; put 'put ''bWl0X3Jvd3NfbGltaXQpfX1mdW5jdGlvbiBud3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksTGUoMSwiIFRhYmxlcyBpbiBsaWJyYXJ5IGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxMZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLHdyKGEubGljZW5jZVN0YXRlLnZh''@;'; put 'put ''bHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gcnd0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLExlKDEsIiBWaWV3Ym94ZXMgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3Rh''@;'; put 'put ''dGUudmFsdWUudmlld2JveF9saW1pdCl9fWZ1bmN0aW9uIGl3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgTGluZWFnZSBkYWlseSBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0''@;'; put 'put ''ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0KX19ZnVuY3Rpb24gYXd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxOSksTGUoMSwiIFJlZnJlc2ggRGF0YSBMaW5lYWdlICIpLGRlKDIsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3Qo''@;'; put 'put ''YSksQ3QoUmUoMikucmVmcmVzaERhdGFMaW5lYWdlKCkpfSksTGUoMywiIFJFRlJFU0ggIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUxpbmVhZ2UpfX1mdW5jdGlvbiBvd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''TG4oKTtzaSgwKSxndCgxLGF3dCw0LDEsImRpdiIsMTgpLGRlKDIsImRpdiIsMTkpLExlKDMsIiBSZWZyZXNoIERhdGEgQ2F0YWxvZyAiKSxkZSg0LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkucmVmcmVzaERhdGFDYXRhbG9nKCkpfSks''@;'; put 'put ''TGUoNSwiIFJFRlJFU0ggIiksaGUoKSgpLGRlKDYsImRpdiIsMTkpLExlKDcsIiBEb3dubG9hZCBDb25maWd1cmF0aW9uICIpLGRlKDgsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5kb3dubG9hZENvbmZpZ3VyYXRpb24oKSl9KSxMZSg5''@;'; put 'put ''LCIgRE9XTkxPQUQgIiksaGUoKSgpLGRlKDEwLCJkaXYiLDE5KSxMZSgxMSwiIFVwZGF0ZSBMaWNlbmNlIEtleSAiKSxkZSgxMiwiYnV0dG9uIiwyMiksTGUoMTMsIiBVUERBVEUgIiksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCk7ZmUoKSxNZSgibmdJZiIsIlNBUzkiPT09YS5z''@;'; put 'put ''ZXJ2ZXJUeXBlKSxmZSgzKSxNZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUNhdGFsb2cpfX1jb25zdCBzd3Q9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMu''@;'; put 'put ''bGljZW5jZVNlcnZpY2U9aCx0aGlzLmFwcFNldHRpbmdzU2VydmljZT1mLHRoaXMuYXBwSW5mbz17YWRhcHRlclZlcnNpb246IjQuMTIuMSIsYXBwVmVyc2lvbjoidjcuMC4wIi5yZXBsYWNlKCJ2IiwiIiksYnVpbGRUaW1lc3RhbXA6SW9lKCkocGFyc2VJbnQoIjE3NDk2NDk1NzgwODkiKSku''@;'; put 'put ''Zm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpfSx0aGlzLmh0dHA9Imh0dHA6Ij09PWxvY2F0aW9uLnByb3RvY29sLHRoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExLHRoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExLHRoaXMucmVzcG9uc2U9Ik5vIHJlc3BvbnNlIix0aGlzLnJlc3Bv''@;'; put 'put ''bnNlTW9kYWw9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5saWNlbmNlSW5mbz10aGlzLmxpY2VuY2VTZXJ2aWNl''@;'; put 'put ''LmdldExpY2Vuc2VLZXlEYXRhKCksdGhpcy5lbnZpcm9ubWVudEluZm89dGhpcy5hcHBTZXJ2aWNlLmdldEVudmlyb25tZW50SW5mbygpLHRoaXMuc2V0dGluZ3M9dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudmFsdWUsdGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMmJih0''@;'; put 'put ''aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQz1kZWNvZGVVUklDb21wb25lbnQodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMpKSx0aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zdWJzY3JpYmUodj0+e3RoaXMuc2V0dGluZ3M9dn0pfW5nT25Jbml0KCl7fXNldHRpbmdD''@;'; put 'put ''aGFuZ2UoYSl7dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0QXBwU2V0dGluZ3ModGhpcy5zZXR0aW5ncyl9ZG93bmxvYWRDb25maWd1cmF0aW9uKCl7bGV0IGE9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksZD1hLnNlcnZlclVybCxoPWEuYXBwTG9jLGY9dGhpcy5zYXNTZXJ2''@;'; put 'put ''aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihkK2YrIi8/X3Byb2dyYW09IitoKyIvc2VydmljZXMvYWRtaW4vZXhwb3J0Y29uZmlnIil9cmVmcmVzaERhdGFDYXRhbG9nKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFk''@;'; put 'put ''bWluL3JlZnJlc2hjYXRhbG9nIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuY2F0Y2goYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRhcHRlclJl''@;'; put 'put ''c3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITF9KX1yZWZyZXNoRGF0YUxpbmVhZ2UoKXt0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVmcmVz''@;'; put 'put ''aHRhYmxlbGluZWFnZSIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25z''@;'; put 'put ''ZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExfSl9cGFyc2VSZXNwb25zZShhKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/SlNPTi5zdHJpbmdpZnkoYSk6YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''ZCl7cmV0dXJuIG5ldyhkfHxjKShHZShvTCksR2UoQnMpLEdlKHUxKSxHZSgkUikpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN5c3RlbSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTM4LHZhcnM6MzYsY29u''@;'; put 'put ''c3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWzEsInctMTAwIiwibGlnaHQi''@;'; put 'put ''XSxbMSwiY29udGVudC1ib3giLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwic3lzLWluZm8iLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LWxnLXJvdyJdLFsiY2RzLXRleHQiLCJzdWJzZWN0aW9uIiwxLCJt''@;'; put 'put ''Yi0xMCJdLFsxLCJkYXJrIl0sWyJjZHMtdGV4dCIsImxhYmVsIiwxLCJtLTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVu''@;'; put 'put ''Il0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwibS0wIl0sWyJjbGFzcyIsImFkbWluLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJh''@;'; put 'put ''ZG1pbi1hY3Rpb24iXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xpY2siXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwiYnRuIiwiYnRuLWluZm8iLCJidG4t''@;'; put 'put ''c20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDQiLDIpLExlKDMsIlN5c3RlbSBpbmZvcm1hdGlvbiIpLGhlKCksR3QoNCwiaHIiLDMpLGRlKDUsImRpdiIsNCkoNiwiZGl2Iiw1KSg3LCJkaXYiKSg4LCJoNiIsNiksTGUoOSwi''@;'; put 'put ''IEVudmlyb25tZW50IERldGFpbHMgIiksR3QoMTAsInNwYW4iLDcpLGhlKCksZGUoMTEsInAiLDgpLExlKDEyLCIgU1lTU0lURTogIiksZGUoMTMsInNwYW4iLDcpLExlKDE0KSxoZSgpKCksZGUoMTUsInAiLDgpLExlKDE2LCIgU1lTU0NQTDogIiksZGUoMTcsInNwYW4iLDcpLExlKDE4KSxo''@;'; put 'put ''ZSgpKCksZGUoMTksInAiLDgpLExlKDIwLCIgU1lTVENQSVBIT1NUTkFNRTogIiksZGUoMjEsInNwYW4iLDcpLExlKDIyKSxoZSgpKCksZGUoMjMsInAiLDgpLExlKDI0LCIgU1lTVkxPTkc6ICIpLGRlKDI1LCJzcGFuIiw3KSxMZSgyNiksaGUoKSgpLGRlKDI3LCJwIiw4KSxMZSgyOCwiIE1F''@;'; put 'put ''TVNJWkU6ICIpLGRlKDI5LCJzcGFuIiw3KSxMZSgzMCksaGUoKSgpLGRlKDMxLCJwIiw4KSxMZSgzMiwiIFNZU1BST0NFU1NNT0RFOiAiKSxkZSgzMywic3BhbiIsNyksTGUoMzQpLGhlKCkoKSxkZSgzNSwicCIsOCksTGUoMzYsIiBTWVNIT1NUTkFNRTogIiksZGUoMzcsInNwYW4iLDcpLExl''@;'; put 'put ''KDM4KSxoZSgpKCksZGUoMzksInAiLDgpLExlKDQwLCIgU1lTVVNFUklEOiAiKSxkZSg0MSwic3BhbiIsNyksTGUoNDIpLGhlKCkoKSxkZSg0MywicCIsOCksTGUoNDQsIiBTWVNIT1NUSU5GT0xPTkc6ICIpLGRlKDQ1LCJzcGFuIiw3KSxMZSg0NiksaGUoKSgpLGRlKDQ3LCJwIiw4KSxMZSg0''@;'; put 'put ''OCwiIFNZU0VOQ09ESU5HOiAiKSxkZSg0OSwic3BhbiIsNyksTGUoNTApLGhlKCkoKSxkZSg1MSwicCIsOCksTGUoNTIsIiBBVVRPRVhFQzogIiksZGUoNTMsInNwYW4iLDcpLExlKDU0KSxoZSgpKCkoKSxkZSg1NSwiZGl2Iiw5KSg1NiwiZGl2IikoNTcsImg2Iiw2KSxMZSg1OCwiIERhdGEg''@;'; put 'put ''Q29udHJvbGxlciBEZXRhaWxzICIpLEd0KDU5LCJzcGFuIiw3KSxoZSgpLGRlKDYwLCJwIiw4KSxMZSg2MSwiIEFwcGxpY2F0aW9uIHZlcnNpb246ICIpLGRlKDYyLCJzcGFuIiw3KSxMZSg2MyksaGUoKSgpLGRlKDY0LCJwIiw4KSxMZSg2NSwiIEJ1aWxkIHRpbWVzdGFtcDogIiksZGUoNjYs''@;'; put 'put ''InNwYW4iLDcpLExlKDY3KSxoZSgpKCksZGUoNjgsInAiLDgpLExlKDY5LCIgQWRhcHRlciB2ZXJzaW9uOiAiKSxkZSg3MCwic3BhbiIsNyksTGUoNzEpLGhlKCkoKSxkZSg3MiwicCIsOCksTGUoNzMsIiBIVFRQOiAiKSxkZSg3NCwic3BhbiIsNyksTGUoNzUpLGhlKCkoKSxkZSg3NiwicCIs''@;'; put 'put ''OCksTGUoNzcsIiBEQyBBZG1pbiBHcm91cDogIiksZGUoNzgsInNwYW4iLDcpLExlKDc5KSxoZSgpKCksZGUoODAsInAiLDgpLExlKDgxLCIgQXBwIExvY2F0aW9uOiAiKSxkZSg4Miwic3BhbiIsNyksTGUoODMpLGhlKCkoKSgpKCksZGUoODQsImRpdiIpKDg1LCJoNiIsNiksTGUoODYsIiBM''@;'; put 'put ''aWNlbmNlIGRldGFpbHMgIiksR3QoODcsInNwYW4iLDcpLGhlKCksZGUoODgsInAiLDgpLExlKDg5LCIgVmFsaWQgdW50aWw6ICIpLGRlKDkwLCJzcGFuIiw3KSxMZSg5MSksaGUoKSgpLGRlKDkyLCJwIiw4KSxMZSg5MywiIFVzZXJzIGFsbG93ZWQ6ICIpLGRlKDk0LCJzcGFuIiw3KSxMZSg5''@;'; put 'put ''NSksaGUoKSgpLGRlKDk2LCJwIiw4KSxMZSg5NywiIFNpdGUgSURzOiAiKSxkZSg5OCwic3BhbiIsNyksTGUoOTkpLGhlKCkoKSxkZSgxMDAsInAiLDgpLExlKDEwMSwiIEZyZWUgVGllcjogIiksZGUoMTAyLCJzcGFuIiw3KSxMZSgxMDMpLGhlKCkoKSxndCgxMDQsWF90LDQsMSwicCIsMTAp''@;'; put 'put ''KDEwNSxKX3QsNCwxLCJwIiwxMCkoMTA2LFFfdCw0LDEsInAiLDEwKSgxMDcsZXd0LDQsMSwicCIsMTApKDEwOCx0d3QsNCwxLCJwIiwxMCkoMTA5LG53dCw0LDEsInAiLDEwKSgxMTAscnd0LDQsMSwicCIsMTApKDExMSxpd3QsNCwxLCJwIiwxMCksZGUoMTEyLCJwIiw4KSxMZSgxMTMsIiBW''@;'; put 'put ''aWV3Ym94ZXM6ICIpLGRlKDExNCwic3BhbiIsNyksTGUoMTE1KSxoZSgpKCksZGUoMTE2LCJwIiw4KSxMZSgxMTcsIiBGaWxlIFVwbG9hZDogIiksZGUoMTE4LCJzcGFuIiw3KSxMZSgxMTkpLGhlKCkoKSxkZSgxMjAsInAiLDgpLExlKDEyMSwiIEVkaXQgcmVjb3JkOiAiKSxkZSgxMjIsInNw''@;'; put 'put ''YW4iLDcpLExlKDEyMyksaGUoKSgpLGRlKDEyNCwicCIsOCksTGUoMTI1LCIgQWRkIHJlY29yZDogIiksZGUoMTI2LCJzcGFuIiw3KSxMZSgxMjcpLGhlKCkoKSgpKCksR3QoMTI4LCJociIsMyksZ3QoMTI5LG93dCwxNCwyLCJuZy1jb250YWluZXIiLDExKSxoZSgpKCkoKSxkZSgxMzAsImNs''@;'; put 'put ''ci1tb2RhbCIsMTIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJlc3BvbnNlTW9kYWwsdil8fChoLnJlc3BvbnNlTW9kYWw9diksdn0pLGRlKDEzMSwiaDMiLDEzKSxMZSgxMzIsIlJlc3BvbnNlIiksaGUoKSxkZSgxMzMsImRpdiIsMTQpLExlKDEz''@;'; put 'put ''NCksaGUoKSxkZSgxMzUsImRpdiIsMTUpKDEzNiwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3BvbnNlTW9kYWw9ITF9KSxMZSgxMzcsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYoZmUoMTQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5l''@;'; put 'put ''bnZpcm9ubWVudEluZm8uU1lTU0lURSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNTQ1BMKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1RDUElQSE9TVE5BTUUpLGZl''@;'; put 'put ''KDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTVkxPTkcpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uTUVNU0laRSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVs''@;'; put 'put ''bDpoLmVudmlyb25tZW50SW5mby5TWVNQUk9DRVNTTU9ERSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNIT1NUTkFNRSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNV''@;'; put 'put ''U0VSSUQpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVElORk9MT05HKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU0VOQ09ESU5HKSxmZSg0KSx3cihudWxsPT1o''@;'; put 'put ''LmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSxmZSg5KSx3cihoLmFwcEluZm8uYXBwVmVyc2lvbiksZmUoNCksd3IoaC5hcHBJbmZvLmJ1aWxkVGltZXN0YW1wKSxmZSg0KSx3cihoLmFwcEluZm8uYWRhcHRlclZlcnNpb24pLGZlKDQpLHdyKGguaHR0''@;'; put 'put ''cD8iWUVTIjoiTk8iKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkRDX0FETUlOX0dST1VQKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkFQUF9MT0MpLGZlKDgpLHdyKG51bGw9''@;'; put 'put ''PWgubGljZW5jZUluZm8/bnVsbDpoLmxpY2VuY2VJbmZvLnZhbGlkX3VudGlsKSxmZSg0KSx3cihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby51c2Vyc19hbGxvd2VkKSxmZSg0KSx3cihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby5zaXRlX2lk''@;'; put 'put ''X211bHRpcGxlKSxmZSg0KSx3cihudWxsIT1oLmxpY2VuY2VJbmZvJiZoLmxpY2VuY2VJbmZvLmRlbW8/IllFUyI6Ik5PIiksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGgubGljZW5j''@;'; put 'put ''ZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3Nf''@;'; put 'put ''YWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCksTWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQhPT1oLkluZmluaXR5KSxm''@;'; put 'put ''ZSgpLE1lKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSxNZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9PWguSW5maW5pdHkpLGZlKDQpLHdyKGgubGljZW5jZVN0YXRlLnZhbHVlLnZp''@;'; put 'put ''ZXdib3g/IllFUyI6Ik5PIiksZmUoNCksd3IoaC5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZD8iWUVTIjoiTk8iKSxmZSg0KSx3cihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJOTyIpLGZlKDQpLHdyKGgubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZD8i''@;'; put 'put ''WUVTIjoiTk8iKSxmZSgyKSxNZSgibmdJZiIsMT09PShudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLklTQURNSU4pKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGgucmVzcG9uc2VNb2RhbCksZmUoNCksRHIoIiAiLGgucmVzcG9uc2UsIiAiKSl9LGRlcGVu''@;'; put 'put ''ZGVuY2llczpbYmEsYzEsb3UsS3UsajAsUDJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgbHd0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlw''@;'; put 'put ''ZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZChzd3QpLHpjXX0pfX1yZXR1cm4gY30pKCksY3d0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxsd3QsejAsUmNdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB1d3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gZHd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7''@;'; put 'put ''ZGUoMCwiY2xyLWljb24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5ncm91cFNlYXJjaD0iIixDdChoLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gaHd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmdyb3VwU2VhcmNoLGgpfHwoZi5ncm91cFNlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5ncm91cExpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCx1d3QsMSwwLCJjbHItaWNvbiIsMTApKDUsZHd0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5n''@;'; put 'put ''cm91cFNlYXJjaCksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBmd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuZ3JvdXBPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxHdCgyLCJjbHItaWNvbiIsMTcpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQsZD1SZSgpO1RyKCJhY3RpdmUiLGEuR1JP''@;'; put 'put ''VVBVUkk9PT1kLmdyb3VwVXJpKSxmZSgzKSxEcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gcHd0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxmd3QsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFh''@;'; put 'put ''LmhpZGRlbil9fWZ1bmN0aW9uIGd3dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIG13dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNCkoMywidGJv''@;'; put 'put ''ZHkiKSg0LCJ0ciIpKDUsInRkIiwyNSkoNiwicCIsMjYpKDcsImIiKSxMZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNSkoMTEsImkiKSxMZSgxMiksaGUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDgpLHdyKGEuZ3JvdXBOYW1lKSxmZSg0KSx3cihh''@;'; put 'put ''Lmdyb3VwRGVzY3x8Im5vIGRlc2NyaXB0aW9uIil9fWZ1bmN0aW9uIHZ3dChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gYnd0KGMsbCl7MSZjJiYoc2koMCksZGUoMSwidGQiLDMxKSgyLCJiIiksTGUoMywiTkFNRSIpLGhl''@;'; put 'put ''KCkoKSxkZSg0LCJ0ZCIsMzEpKDUsImIiKSxMZSg2LCJFTUFJTCIpLGhlKCkoKSxkZSg3LCJ0ZCIsMzEpKDgsImIiKSxMZSg5LCJDUkVBVEVEIiksaGUoKSgpLGRlKDEwLCJ0ZCIsMzIpKDExLCJiIiksTGUoMTIsIlVQREFURUQiKSxoZSgpKCksbGkoKSl9ZnVuY3Rpb24geXd0KGMsbCl7MSZj''@;'; put 'put ''JiYoc2koMCksZGUoMSwidGQiLDMxKSgyLCJiIiksTGUoMywiSUQiKSxoZSgpKCksZGUoNCwidGQiLDMxKSg1LCJiIiksTGUoNiwiRElTUExBWSBOQU1FIiksaGUoKSgpLGRlKDcsInRkIiwzMSkoOCwiYiIpLExlKDksIlVTRVIgTkFNRSIpLGhlKCkoKSxsaSgpKX1mdW5jdGlvbiBfd3QoYyxs''@;'; put 'put ''KXtpZigxJmMmJihzaSgwKSxkZSgxLCJ0ZCIsMzIpLExlKDIpLGhlKCksZGUoMywidGQiLDMyKSxMZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksTGUoNiksaGUoKSxkZSg3LCJ0ZCIsMzIpLExlKDgpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKDIpLHdyKGEuTUVN''@;'; put 'put ''QkVSTkFNRSksZmUoMiksd3IoYS5FTUFJTCksZmUoMiksd3IoYS5NRU1CRVJDUkVBVEVEKSxmZSgyKSx3cihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiB3d3QoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJ0ZCIsMzIpLExlKDIpLGhlKCksZGUoMywidGQiLDMyKSxMZSg0KSxoZSgpLGRl''@;'; put 'put ''KDUsInRkIiwzMiksTGUoNiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoMiksd3IoYS5JRCksZmUoMiksd3IoYS5ESVNQTEFZTkFNRSksZmUoMiksd3IoYS5VU0VSTkFNRSl9fWZ1bmN0aW9uIEN3dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMyksZ3QoMSxf''@;'; put 'put ''d3QsOSw0LCJuZy1jb250YWluZXIiLDYpKDIsd3d0LDcsMywibmctY29udGFpbmVyIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSg0KTtNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIisoYS5VUklNRU18fGEuSUQpKSxmZSgpLE1lKCJuZ0lmIixk''@;'; put 'put ''LnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzOSksZmUoKSxNZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBlLlNhc2pzKX19ZnVuY3Rpb24gU3d0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIiksZ3QoMyxid3QsMTMsMCwibmct''@;'; put 'put ''Y29udGFpbmVyIiw2KSg0LHl3dCwxMCwwLCJuZy1jb250YWluZXIiLDYpLGhlKCkoKSxkZSg1LCJ0Ym9keSIpLGd0KDYsQ3d0LDMsMywidHIiLDMwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgzKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZl''@;'; put 'put ''KCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksZmUoMiksTWUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gTXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyKSxoZSgpLGd0KDMsdnd0LDIsMCwiaDUiLDYpLGRl''@;'; put 'put ''KDQsImRpdiIsMjcpLGd0KDUsU3d0LDcsMywidGFibGUiLDI4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxEcigiTUVNQkVSUyAoIixhLmdyb3VwTWVtYmVyQ291bnQsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLmdyb3VwTWVtYmVyQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiww''@;'; put 'put ''IT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlvbiB4d3QoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIEV3dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMykoMSwidGQiLDMyKSxMZSgyKSxoZSgpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1sLiRpbXBsaWNpdDtNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLk1FTUJFUklEKSxmZSgyKSx3cihhLk1FTUJFUk5BTUUpfX1mdW5jdGlvbiBUd3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIpKDQs''@;'; put 'put ''ImIiKSxMZSg1KSxoZSgpKCkoKSgpLGRlKDYsInRib2R5IiksZ3QoNyxFd3QsMywyLCJ0ciIsMzApLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDUpLERyKCJNRU1CRVJTICgiLGEuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLGZlKDIpLE1lKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9''@;'; put 'put ''fWZ1bmN0aW9uIEF3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiksaGUoKSxndCgzLHh3dCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI3KSxndCg1LFR3dCw4LDIsInRhYmxlIiwyOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksd3IoYS5ncm91cE5h''@;'; put 'put ''bWUpLGZlKCksTWUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksZmUoMiksTWUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIGt3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsbXd0LDEzLDIsImRpdiIsMjApLGRlKDIsImRpdiIsMjEpKDMsImRp''@;'; put 'put ''diIsMjIpKDQsImRpdiIsMjMpLGd0KDUsTXd0LDYsMywiZGl2Iiw2KSg2LEF3dCw2LDMsImRpdiIsNiksR3QoNywiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoNCksTWUoIm5n''@;'; put 'put ''SWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWxldCB0OGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVs''@;'; put 'put ''cGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLmdyb3VwU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5ncm91cFVyaT0iIix0aGlzLmdyb3VwTmFtZT0iIix0aGlzLmdyb3VwRGVzYz0i''@;'; put 'put ''Iix0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5TZXJ2ZXJUeXBlPUIwLlksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNT''@;'; put 'put ''ZXJ2aWNlLmdldFNlcnZlclR5cGUoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L2dyb3VwcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFw''@;'; put 'put ''c2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEtuLnVzZXJuYXYuZ3JvdXBMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMuZ3JvdXBzPUtuLnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMu''@;'; put 'put ''Z3JvdXBTZWFyY2g9S24udXNlcm5hdi5ncm91cFNlYXJjaCk6KHZvaWQgMD09PUtuLnVzZXJuYXYuZ3JvdXBMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9saW1pdD0yMDAwIix7aGVh''@;'; put 'put ''ZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0ZW1zLm1hcChmPT4oe0dST1VQVVJJOmYuaWQsR1JPVVBOQU1FOmYubmFtZSxHUk9VUERFU0M6Zi5kZXNjcmlwdGlvbn0pKTt0aGlzLmxvYWRp''@;'; put 'put ''bmc9ITEsdGhpcy5ncm91cHM9aCxLbi51c2VybmF2Lmdyb3VwTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRncm91cHMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsS24udXNlcm5h''@;'; put 'put ''di5ncm91cExpc3Q9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Lbi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPUtuLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50JiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2Zl''@;'; put 'put ''dGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBhcmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1KU09O''@;'; put 'put ''LnBhcnNlKGEpO3RoaXMubG9hZGluZz0hMTtsZXQgaD1kLml0ZW1zLm1hcChmPT4oe01FTUJFUk5BTUU6Zi5uYW1lLE1FTUJFUklEOmYuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9aCx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9aC5sZW5ndGgsdGhpcy5ncm91cFVyaT10aGlzLnBhcmFtVVJJLHRo''@;'; put 'put ''aXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihkPT57dGhpcy5ncm91cE1lbWJlcnM9ZC5hZGFwdGVyUmVzcG9uc2Uuc2Fz''@;'; put 'put ''bWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdm9pZCAwIT09ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXSYmKHRoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJl''@;'; put 'put ''cnNbMF0uVVJJTUVNfHx0aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBERVNDLHRoaXMuZ3JvdXBOYW1lfHwodGhpcy5n''@;'; put 'put ''cm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwiR1JPVVBOQU1FIiksS24udXNlcm5hdi5ncm91cFNlYXJjaD10aGlzLmdyb3VwU2VhcmNo''@;'; put 'put ''fWdyb3VwT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSk6ZCsiLyIrZW5j''@;'; put 'put ''b2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbiho''@;'; put 'put ''PT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDO2xldCB2PWYuaXRlbXMubWFwKE09Pih7TUVNQkVS''@;'; put 'put ''TkFNRTpNLm5hbWUsTUVNQkVSSUQ6TS5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz12LHRoaXMuZ3JvdXBNZW1iZXJDb3VudD12Lmxlbmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDphLkdST1VQVVJJfV19''@;'; put 'put ''KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDLHRoaXMuZ3JvdXBNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5ncm91cE1l''@;'; put 'put ''bWJlckNvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RofSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQnMpLEdlKFN1KSxHZShMcyksR2UoZmgpLEdlKEN1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyJhcHAtZ3JvdXAiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYi''@;'; put 'put ''XSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIs''@;'; put 'put ''IiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IEdyb3VwcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwidXNlcnMiXSxbMSwibG9h''@;'; put 'put ''ZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJncm91cC1kYXRhIl0sWzEsInRhYmxlIiwiZ3JvdXAtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsImdyb3VwLWluZm8tdGV4''@;'; put 'put ''dCJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGlu''@;'; put 'put ''ayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHItdHJlZSIpLGd0KDIsaHd0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxwd3QsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLGd0KDUsZ3d0LDMsMCwi''@;'; put 'put ''ZGl2Iiw1KSg2LGt3dCw4LDMsImRpdiIsNiksaGUoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLGguZ3JvdXBzKSxmZSgpLE1lKCJuZ0Zvck9mIixoLmdyb3VwcyksZmUoMiksTWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxNZSgibmdJZiIsaC5ncm91cE1lbWJlcnMmJiFoLmxvYWRpbmcpKX0s''@;'; put 'put ''ZGVwZW5kZW5jaWVzOltucyxiYSxjMSxxbCxubCwkcyxFaCxQZCxIbCxaMSxpNCxyNF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBEd3QoKXt9ZnVuY3Rpb24gYXRlKGMpe3JldHVybiBudWxsPT1jP0R3dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2Vs''@;'; put 'put ''ZWN0b3IoYyl9fWZ1bmN0aW9uIG44ZShjKXtyZXR1cm4gbnVsbD09Yz9bXTpBcnJheS5pc0FycmF5KGMpP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiBSd3QoKXtyZXR1cm5bXX1mdW5jdGlvbiByOGUoYyl7cmV0dXJuIG51bGw9PWM/Und0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlT''@;'; put 'put ''ZWxlY3RvckFsbChjKX19ZnVuY3Rpb24gaThlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoYyl9fWZ1bmN0aW9uIGE4ZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwubWF0Y2hlcyhjKX19dmFyIFB3dD1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlv''@;'; put 'put ''biBId3QoKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH12YXIgVnd0PUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gQnd0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gbzhlKGMpe3JldHVybiBuZXcgQXJyYXkoYy5sZW5ndGgpfWZ1bmN0''@;'; put 'put ''aW9uIGROKGMsbCl7dGhpcy5vd25lckRvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1jLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWMsdGhpcy5fX2RhdGFfXz1sfWZ1bmN0aW9uIFl3dChjLGwsYSxkLGgsZil7Zm9yKHZhciBNLHY9''@;'; put 'put ''MCxEPWwubGVuZ3RoLFo9Zi5sZW5ndGg7djxaOysrdikoTT1sW3ZdKT8oTS5fX2RhdGFfXz1mW3ZdLGRbdl09TSk6YVt2XT1uZXcgZE4oYyxmW3ZdKTtmb3IoO3Y8RDsrK3YpKE09bFt2XSkmJihoW3ZdPU0pfWZ1bmN0aW9uIEd3dChjLGwsYSxkLGgsZix2KXt2YXIgTSxELEVlLFo9bmV3IE1h''@;'; put 'put ''cCxyZT1sLmxlbmd0aCxjZT1mLmxlbmd0aCxiZT1uZXcgQXJyYXkocmUpO2ZvcihNPTA7TTxyZTsrK00pKEQ9bFtNXSkmJihiZVtNXT1FZT12LmNhbGwoRCxELl9fZGF0YV9fLE0sbCkrIiIsWi5oYXMoRWUpP2hbTV09RDpaLnNldChFZSxEKSk7Zm9yKE09MDtNPGNlOysrTSlFZT12LmNhbGwo''@;'; put 'put ''YyxmW01dLE0sZikrIiIsKEQ9Wi5nZXQoRWUpKT8oZFtNXT1ELEQuX19kYXRhX189ZltNXSxaLmRlbGV0ZShFZSkpOmFbTV09bmV3IGROKGMsZltNXSk7Zm9yKE09MDtNPHJlOysrTSkoRD1sW01dKSYmWi5nZXQoYmVbTV0pPT09RCYmKGhbTV09RCl9ZnVuY3Rpb24gJHd0KGMpe3JldHVybiBj''@;'; put 'put ''Ll9fZGF0YV9ffWZ1bmN0aW9uIHF3dChjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJiJsZW5ndGgiaW4gYz9jOkFycmF5LmZyb20oYyl9ZnVuY3Rpb24gbkN0KGMsbCl7cmV0dXJuIGM8bD8tMTpjPmw/MTpjPj1sPzA6TmFOfWROLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZE4sYXBwZW5k''@;'; put 'put ''Q2hpbGQ6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoYyx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoYyxsKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihjKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoYyl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGMpfX07dmFyIG90ZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3QgczhlPXtzdmc6Imh0dHA6Ly93''@;'; put 'put ''d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvdGUseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBoTihjKXt2''@;'; put 'put ''YXIgbD1jKz0iIixhPWwuaW5kZXhPZigiOiIpO3JldHVybiBhPj0wJiYieG1sbnMiIT09KGw9Yy5zbGljZSgwLGEpKSYmKGM9Yy5zbGljZShhKzEpKSxzOGUuaGFzT3duUHJvcGVydHkobCk/e3NwYWNlOnM4ZVtsXSxsb2NhbDpjfTpjfWZ1bmN0aW9uIGNDdChjKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''KXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShjKX19ZnVuY3Rpb24gdUN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gZEN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxsKX19ZnVu''@;'; put 'put ''Y3Rpb24gaEN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbCl9fWZ1bmN0aW9uIGZDdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWE/dGhpcy5yZW1vdmVBdHRyaWJ1''@;'; put 'put ''dGUoYyk6dGhpcy5zZXRBdHRyaWJ1dGUoYyxhKX19ZnVuY3Rpb24gcEN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhj''@;'; put 'put ''LnNwYWNlLGMubG9jYWwsYSl9fWZ1bmN0aW9uIGw4ZShjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50JiZjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGMuZG9jdW1lbnQmJmN8fGMuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gbUN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVt''@;'; put 'put ''b3ZlUHJvcGVydHkoYyl9fWZ1bmN0aW9uIHZDdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGwsYSl9fWZ1bmN0aW9uIGJDdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZD90aGlz''@;'; put 'put ''LnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxkLGEpfX1mdW5jdGlvbiBFdyhjLGwpe3JldHVybiBjLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobCl8fGw4ZShjKS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShsKX1mdW5j''@;'; put 'put ''dGlvbiBfQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbY119fWZ1bmN0aW9uIHdDdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbY109bH19ZnVuY3Rpb24gQ0N0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09''@;'; put 'put ''YT9kZWxldGUgdGhpc1tjXTp0aGlzW2NdPWF9fWZ1bmN0aW9uIGM4ZShjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gc3RlKGMpe3JldHVybiBjLmNsYXNzTGlzdHx8bmV3IHU4ZShjKX1mdW5jdGlvbiB1OGUoYyl7dGhpcy5fbm9kZT1jLHRoaXMuX25hbWVzPWM4''@;'; put 'put ''ZShjLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIGQ4ZShjLGwpe2Zvcih2YXIgYT1zdGUoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLmFkZChsW2RdKX1mdW5jdGlvbiBoOGUoYyxsKXtmb3IodmFyIGE9c3RlKGMpLGQ9LTEsaD1sLmxlbmd0aDsrK2Q8aDspYS5yZW1v''@;'; put 'put ''dmUobFtkXSl9ZnVuY3Rpb24gTUN0KGMpe3JldHVybiBmdW5jdGlvbigpe2Q4ZSh0aGlzLGMpfX1mdW5jdGlvbiB4Q3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7aDhlKHRoaXMsYyl9fWZ1bmN0aW9uIEVDdChjLGwpe3JldHVybiBmdW5jdGlvbigpeyhsLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9k''@;'; put 'put ''OGU6aDhlKSh0aGlzLGMpfX1mdW5jdGlvbiBBQ3QoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIGtDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fWZ1bmN0aW9uIERDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jLmFwcGx5KHRoaXMsYXJndW1l''@;'; put 'put ''bnRzKTt0aGlzLnRleHRDb250ZW50PWw/PyIifX1mdW5jdGlvbiBSQ3QoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBMQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9Y319ZnVuY3Rpb24gT0N0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPWw/PyIifX1mdW5jdGlvbiBGQ3QoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gTkN0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZv''@;'; put 'put ''cmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gQkN0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMub3duZXJEb2N1bWVudCxhPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBhPT09b3RlJiZsLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1v''@;'; put 'put ''dGU/bC5jcmVhdGVFbGVtZW50KGMpOmwuY3JlYXRlRWxlbWVudE5TKGEsYyl9fWZ1bmN0aW9uIGpDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBmOGUoYyl7dmFyIGw9aE4o''@;'; put 'put ''Yyk7cmV0dXJuKGwubG9jYWw/akN0OkJDdCkobCl9ZnVuY3Rpb24gVUN0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gV0N0KCl7dmFyIGM9dGhpcy5wYXJlbnROb2RlO2MmJmMucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gR0N0KCl7dmFyIGM9dGhpcy5jbG9uZU5vZGUoITEpLGw9dGhpcy5w''@;'; put 'put ''YXJlbnROb2RlO3JldHVybiBsP2wuaW5zZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2libGluZyk6Y31mdW5jdGlvbiAkQ3QoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMCksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0''@;'; put 'put ''aW9uIFFDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLl9fb247aWYobCl7Zm9yKHZhciBmLGE9MCxkPS0xLGg9bC5sZW5ndGg7YTxoOysrYSlmPWxbYV0sYy50eXBlJiZmLnR5cGUhPT1jLnR5cGV8fGYubmFtZSE9PWMubmFtZT9sWysrZF09Zjp0aGlzLnJlbW92ZUV2ZW50TGlz''@;'; put 'put ''dGVuZXIoZi50eXBlLGYubGlzdGVuZXIsZi5vcHRpb25zKTsrK2Q/bC5sZW5ndGg9ZDpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gZVN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaCxkPXRoaXMuX19vbixmPWZ1bmN0aW9uIFhDdChjKXtyZXR1cm4gZnVuY3Rpb24obCl7Yy5j''@;'; put 'put ''YWxsKHRoaXMsbCx0aGlzLl9fZGF0YV9fKX19KGwpO2lmKGQpZm9yKHZhciB2PTAsTT1kLmxlbmd0aDt2PE07Kyt2KWlmKChoPWRbdl0pLnR5cGU9PT1jLnR5cGUmJmgubmFtZT09PWMubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyLGgub3B0''@;'; put 'put ''aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyPWYsaC5vcHRpb25zPWEpLHZvaWQoaC52YWx1ZT1sKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYy50eXBlLGYsYSksaD17dHlwZTpjLnR5cGUsbmFtZTpjLm5hbWUsdmFsdWU6bCxsaXN0ZW5lcjpmLG9wdGlvbnM6''@;'; put 'put ''YX0sZD9kLnB1c2goaCk6dGhpcy5fX29uPVtoXX19ZnVuY3Rpb24gcDhlKGMsbCxhKXt2YXIgZD1sOGUoYyksaD1kLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBoP2g9bmV3IGgobCxhKTooaD1kLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGE/KGguaW5pdEV2ZW50KGws''@;'; put 'put ''YS5idWJibGVzLGEuY2FuY2VsYWJsZSksaC5kZXRhaWw9YS5kZXRhaWwpOmguaW5pdEV2ZW50KGwsITEsITEpKSxjLmRpc3BhdGNoRXZlbnQoaCl9ZnVuY3Rpb24gblN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHA4ZSh0aGlzLGMsbCl9fWZ1bmN0aW9uIHJTdChjLGwpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbigpe3JldHVybiBwOGUodGhpcyxjLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dThlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGMpe3RoaXMuX25hbWVzLmluZGV4T2YoYyk8MCYmKHRoaXMuX25hbWVzLnB1c2goYyksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNz''@;'; put 'put ''Iix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGMpe3ZhciBsPXRoaXMuX25hbWVzLmluZGV4T2YoYyk7bD49MCYmKHRoaXMuX25hbWVzLnNwbGljZShsLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNv''@;'; put 'put ''bnRhaW5zOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGMpPj0wfX07dmFyIGx0ZT1bbnVsbF07ZnVuY3Rpb24gaWQoYyxsKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWx9ZnVuY3Rpb24gZzhlKCl7cmV0dXJuIG5ldyBpZChbW2RvY3VtZW50LmRvY3VtZW50''@;'; put 'put ''RWxlbWVudF1dLGx0ZSl9aWQucHJvdG90eXBlPWc4ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlkLHNlbGVjdDpmdW5jdGlvbiBJd3QoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWF0ZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9''@;'; put 'put ''MDtoPGE7KytoKWZvcih2YXIgRCxaLGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1uZXcgQXJyYXkodikscmU9MDtyZTx2OysrcmUpKEQ9ZltyZV0pJiYoWj1jLmNhbGwoRCxELl9fZGF0YV9fLHJlLGYpKSYmKCJfX2RhdGFfXyJpbiBEJiYoWi5fX2RhdGFfXz1ELl9fZGF0YV9fKSxNW3JlXT1a''@;'; put 'put ''KTtyZXR1cm4gbmV3IGlkKGQsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiBPd3QoYyl7Yz0iZnVuY3Rpb24iPT10eXBlb2YgYz9mdW5jdGlvbiBMd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG44ZShjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fShjKTpyOGUoYyk7''@;'; put 'put ''Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9W10saD1bXSxmPTA7ZjxhOysrZilmb3IodmFyIEQsdj1sW2ZdLE09di5sZW5ndGgsWj0wO1o8TTsrK1opKEQ9dltaXSkmJihkLnB1c2goYy5jYWxsKEQsRC5fX2RhdGFfXyxaLHYpKSxoLnB1c2goRCkpO3JldHVybiBuZXcgaWQo''@;'; put 'put ''ZCxoKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24gTnd0KGMpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT1jP0h3dDpmdW5jdGlvbiBGd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFB3dC5jYWxsKHRoaXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rpb24iPT10eXBlb2YgYz9jOmE4ZShjKSkp''@;'; put 'put ''fSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlvbiB6d3QoYyl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PWM/Qnd0OmZ1bmN0aW9uIGp3dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVnd0LmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6YThlKGMp''@;'; put 'put ''KSl9LGZpbHRlcjpmdW5jdGlvbiBVd3QoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWk4ZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgRCxmPWxbaF0sdj1mLmxlbmd0aCxNPWRbaF09W10sWj0wO1o8''@;'; put 'put ''djsrK1opKEQ9ZltaXSkmJmMuY2FsbChELEQuX19kYXRhX18sWixmKSYmTS5wdXNoKEQpO3JldHVybiBuZXcgaWQoZCx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBLd3QoYyxsKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLCR3dCk7dmFyIGE9bD9H''@;'; put 'put ''d3Q6WXd0LGQ9dGhpcy5fcGFyZW50cyxoPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9ZnVuY3Rpb24gV3d0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0oYykpO2Zvcih2YXIgZj1oLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPW5ldyBBcnJheShmKSxEPW5l''@;'; put 'put ''dyBBcnJheShmKSxaPTA7WjxmOysrWil7dmFyIHJlPWRbWl0sY2U9aFtaXSxiZT1jZS5sZW5ndGgsRWU9cXd0KGMuY2FsbChyZSxyZSYmcmUuX19kYXRhX18sWixkKSksQmU9RWUubGVuZ3RoLHFlPU1bWl09bmV3IEFycmF5KEJlKSxydD12W1pdPW5ldyBBcnJheShCZSk7YShyZSxjZSxxZSxy''@;'; put 'put ''dCxEW1pdPW5ldyBBcnJheShiZSksRWUsbCk7Zm9yKHZhciB2bixDbixkdD0wLEp0PTA7ZHQ8QmU7KytkdClpZih2bj1xZVtkdF0pe2ZvcihkdD49SnQmJihKdD1kdCsxKTshKENuPXJ0W0p0XSkmJisrSnQ8QmU7KTt2bi5fbmV4dD1Dbnx8bnVsbH19cmV0dXJuKHY9bmV3IGlkKHYsZCkpLl9l''@;'; put 'put ''bnRlcj1NLHYuX2V4aXQ9RCx2fSxlbnRlcjpmdW5jdGlvbiBad3QoKXtyZXR1cm4gbmV3IGlkKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKG84ZSksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24gWHd0KCl7cmV0dXJuIG5ldyBpZCh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMu''@;'; put 'put ''bWFwKG84ZSksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24gSnd0KGMsbCxhKXt2YXIgZD10aGlzLmVudGVyKCksaD10aGlzLGY9dGhpcy5leGl0KCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGM/KGQ9YyhkKSkmJihkPWQuc2VsZWN0aW9uKCkpOmQ9ZC5hcHBlbmQoYysiIiksbnVs''@;'; put 'put ''bCE9bCYmKGg9bChoKSkmJihoPWguc2VsZWN0aW9uKCkpLG51bGw9PWE/Zi5yZW1vdmUoKTphKGYpLGQmJmg/ZC5tZXJnZShoKS5vcmRlcigpOmh9LG1lcmdlOmZ1bmN0aW9uIFF3dChjKXtmb3IodmFyIGw9Yy5zZWxlY3Rpb24/Yy5zZWxlY3Rpb24oKTpjLGE9dGhpcy5fZ3JvdXBzLGQ9bC5f''@;'; put 'put ''Z3JvdXBzLGg9YS5sZW5ndGgsdj1NYXRoLm1pbihoLGQubGVuZ3RoKSxNPW5ldyBBcnJheShoKSxEPTA7RDx2OysrRClmb3IodmFyIEVlLFo9YVtEXSxyZT1kW0RdLGNlPVoubGVuZ3RoLGJlPU1bRF09bmV3IEFycmF5KGNlKSxCZT0wO0JlPGNlOysrQmUpKEVlPVpbQmVdfHxyZVtCZV0pJiYo''@;'; put 'put ''YmVbQmVdPUVlKTtmb3IoO0Q8aDsrK0QpTVtEXT1hW0RdO3JldHVybiBuZXcgaWQoTSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIG9TdCgpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbiBlQ3QoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9LTEsYT1jLmxlbmd0aDsr''@;'; put 'put ''K2w8YTspZm9yKHZhciB2LGQ9Y1tsXSxoPWQubGVuZ3RoLTEsZj1kW2hdOy0taD49MDspKHY9ZFtoXSkmJihmJiY0XnYuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZikmJmYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodixmKSxmPXYpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIHRDdChj''@;'; put 'put ''KXtmdW5jdGlvbiBsKGNlLGJlKXtyZXR1cm4gY2UmJmJlP2MoY2UuX19kYXRhX18sYmUuX19kYXRhX18pOiFjZS0hYmV9Y3x8KGM9bkN0KTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGQ9YS5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDsrK2Ype2Zvcih2YXIgWix2PWFbZl0sTT12Lmxl''@;'; put 'put ''bmd0aCxEPWhbZl09bmV3IEFycmF5KE0pLHJlPTA7cmU8TTsrK3JlKShaPXZbcmVdKSYmKERbcmVdPVopO0Quc29ydChsKX1yZXR1cm4gbmV3IGlkKGgsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiByQ3QoKXt2YXIgYz1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50''@;'; put 'put ''c1swXT10aGlzLGMuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIGlDdCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uIGFDdCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIGQ9Y1ts''@;'; put 'put ''XSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKXt2YXIgdj1kW2hdO2lmKHYpcmV0dXJuIHZ9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gb0N0KCl7bGV0IGM9MDtmb3IoY29uc3QgbCBvZiB0aGlzKSsrYztyZXR1cm4gY30sZW1wdHk6ZnVuY3Rpb24gc0N0KCl7cmV0dXJuIXRoaXMubm9kZSgp''@;'; put 'put ''fSxlYWNoOmZ1bmN0aW9uIGxDdChjKXtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9MCxkPWwubGVuZ3RoO2E8ZDsrK2EpZm9yKHZhciBNLGg9bFthXSxmPTAsdj1oLmxlbmd0aDtmPHY7KytmKShNPWhbZl0pJiZjLmNhbGwoTSxNLl9fZGF0YV9fLGYsaCk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVu''@;'; put 'put ''Y3Rpb24gZ0N0KGMsbCl7dmFyIGE9aE4oYyk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgZD10aGlzLm5vZGUoKTtyZXR1cm4gYS5sb2NhbD9kLmdldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk6ZC5nZXRBdHRyaWJ1dGUoYSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bD9hLmxv''@;'; put 'put ''Y2FsP3VDdDpjQ3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/YS5sb2NhbD9wQ3Q6ZkN0OmEubG9jYWw/aEN0OmRDdCkoYSxsKSl9LHN0eWxlOmZ1bmN0aW9uIHlDdChjLGwsYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWw/bUN0OiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBsP2JDdDp2Q3QpKGMsbCxhPz8iIikpOkV3KHRoaXMubm9kZSgpLGMpfSxwcm9wZXJ0eTpmdW5jdGlvbiBTQ3QoYyxsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9fQ3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/Q0N0OndDdCkoYyxsKSk6dGhpcy5ub2Rl''@;'; put 'put ''KClbY119LGNsYXNzZWQ6ZnVuY3Rpb24gVEN0KGMsbCl7dmFyIGE9YzhlKGMrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBkPXN0ZSh0aGlzLm5vZGUoKSksaD0tMSxmPWEubGVuZ3RoOysraDxmOylpZighZC5jb250YWlucyhhW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1''@;'; put 'put ''cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgbD9FQ3Q6bD9NQ3Q6eEN0KShhLGwpKX0sdGV4dDpmdW5jdGlvbiBJQ3QoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/QUN0OigiZnVuY3Rpb24iPT10eXBlb2YgYz9EQ3Q6a0N0KShjKSk6dGhpcy5u''@;'; put 'put ''b2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24gUEN0KGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1jP1JDdDooImZ1bmN0aW9uIj09dHlwZW9mIGM/T0N0OkxDdCkoYykpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24gSEN0KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZWFjaChGQ3QpfSxsb3dlcjpmdW5jdGlvbiBWQ3QoKXtyZXR1cm4gdGhpcy5lYWNoKE5DdCl9LGFwcGVuZDpmdW5jdGlvbiB6Q3QoYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpmOGUoYyk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuYXBwZW5kQ2hpbGQobC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbiBaQ3QoYyxsKXt2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgYz9jOmY4ZShjKSxkPW51bGw9PWw/VUN0OiJmdW5jdGlvbiI9PXR5cGVvZiBsP2w6YXRlKGwpO3JldHVybiB0aGlzLnNlbGVj''@;'; put 'put ''dChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uIFlDdCgpe3JldHVybiB0aGlzLmVhY2goV0N0KX0sY2xvbmU6ZnVuY3Rpb24gS0N0KGMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnNlbGVjdChjPyRDdDpHQ3QpfSxkYXR1bTpmdW5jdGlvbiBxQ3QoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGMpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiB0U3QoYyxsLGEpe3ZhciBoLHYsZD1mdW5jdGlv''@;'; put 'put ''biBKQ3QoYyl7cmV0dXJuIGMudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihsKXt2YXIgYT0iIixkPWwuaW5kZXhPZigiLiIpO3JldHVybiBkPj0wJiYoYT1sLnNsaWNlKGQrMSksbD1sLnNsaWNlKDAsZCkpLHt0eXBlOmwsbmFtZTphfX0pfShjKyIiKSxmPWQubGVuZ3RoO2lm''@;'; put 'put ''KCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKE09bD9lU3Q6UUN0LGg9MDtoPGY7KytoKXRoaXMuZWFjaChNKGRbaF0sbCxhKSk7cmV0dXJuIHRoaXN9dmFyIE09dGhpcy5ub2RlKCkuX19vbjtpZihNKWZvcih2YXIgcmUsRD0wLFo9TS5sZW5ndGg7RDxaOysrRClmb3IoaD0wLHJlPU1bRF07''@;'; put 'put ''aDxmOysraClpZigodj1kW2hdKS50eXBlPT09cmUudHlwZSYmdi5uYW1lPT09cmUubmFtZSlyZXR1cm4gcmUudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIGlTdChjLGwpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP3JTdDpuU3QpKGMsbCkpfSxbU3ltYm9sLml0ZXJh''@;'; put 'put ''dG9yXTpmdW5jdGlvbiphU3QoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9MCxhPWMubGVuZ3RoO2w8YTsrK2wpZm9yKHZhciB2LGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKSh2PWRbaF0pJiYoeWllbGQgdil9fTtjb25zdCBxOT1nOGU7ZnVuY3Rpb24gY3RlKGMpe3JldHVybiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgYz9uZXcgaWQoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgaWQoW244ZShjKV0sbHRlKX1mdW5jdGlvbiB3cyhjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IGlkKFtbZG9jdW1lbnQucXVl''@;'; put 'put ''cnlTZWxlY3RvcihjKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgaWQoW1tjXV0sbHRlKX12YXIgc1N0PXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uIG04ZSgpe2Zvcih2YXIgZCxjPTAsbD1hcmd1bWVudHMubGVuZ3RoLGE9e307YzxsOysrYyl7aWYoIShkPWFyZ3VtZW50c1tj''@;'; put 'put ''XSsiIil8fGQgaW4gYXx8L1tccy5dLy50ZXN0KGQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2QpO2FbZF09W119cmV0dXJuIG5ldyBmTihhKX1mdW5jdGlvbiBmTihjKXt0aGlzLl89Y31mdW5jdGlvbiBjU3QoYyxsKXtmb3IodmFyIGgsYT0wLGQ9Yy5sZW5ndGg7YTxkOysr''@;'; put 'put ''YSlpZigoaD1jW2FdKS5uYW1lPT09bClyZXR1cm4gaC52YWx1ZX1mdW5jdGlvbiB2OGUoYyxsLGEpe2Zvcih2YXIgZD0wLGg9Yy5sZW5ndGg7ZDxoOysrZClpZihjW2RdLm5hbWU9PT1sKXtjW2RdPXNTdCxjPWMuc2xpY2UoMCxkKS5jb25jYXQoYy5zbGljZShkKzEpKTticmVha31yZXR1cm4g''@;'; put 'put ''bnVsbCE9YSYmYy5wdXNoKHtuYW1lOmwsdmFsdWU6YX0pLGN9Zk4ucHJvdG90eXBlPW04ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmZOLG9uOmZ1bmN0aW9uKGMsbCl7dmFyIGgsYT10aGlzLl8sZD1mdW5jdGlvbiBsU3QoYyxsKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLykubWFw''@;'; put 'put ''KGZ1bmN0aW9uKGEpe3ZhciBkPSIiLGg9YS5pbmRleE9mKCIuIik7aWYoaD49MCYmKGQ9YS5zbGljZShoKzEpLGE9YS5zbGljZSgwLGgpKSxhJiYhbC5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIithKTtyZXR1cm57dHlwZTphLG5hbWU6ZH19KX0o''@;'; put 'put ''YysiIixhKSxmPS0xLHY9ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbCk7Zm9yKDsrK2Y8djspaWYoaD0oYz1kW2ZdKS50eXBlKWFbaF09djhlKGFb''@;'; put 'put ''aF0sYy5uYW1lLGwpO2Vsc2UgaWYobnVsbD09bClmb3IoaCBpbiBhKWFbaF09djhlKGFbaF0sYy5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytmPHY7KWlmKChoPShjPWRbZl0pLnR5cGUpJiYoaD1jU3QoYVtoXSxjLm5hbWUpKSlyZXR1cm4gaH0sY29weTpmdW5jdGlvbigpe3ZhciBj''@;'; put 'put ''PXt9LGw9dGhpcy5fO2Zvcih2YXIgYSBpbiBsKWNbYV09bFthXS5zbGljZSgpO3JldHVybiBuZXcgZk4oYyl9LGNhbGw6ZnVuY3Rpb24oYyxsKXtpZigoaD1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBoLGYsYT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpYVtkXT1hcmd1bWVudHNb''@;'; put 'put ''ZCsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGMpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2MpO2ZvcihkPTAsaD0oZj10aGlzLl9bY10pLmxlbmd0aDtkPGg7KytkKWZbZF0udmFsdWUuYXBwbHkobCxhKX0sYXBwbHk6ZnVuY3Rpb24oYyxsLGEpe2lmKCF0aGlzLl8u''@;'; put 'put ''aGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKHZhciBkPXRoaXMuX1tjXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKWRbaF0udmFsdWUuYXBwbHkobCxhKX19O2NvbnN0IHV0ZT1tOGU7dmFyIHBOLEFBLFR3PTAsRUE9MCxUQT0wLGI4ZT0x''@;'; put 'put ''ZTMsZ049MCxYOT0wLG1OPTAsa0E9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUseThlPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9u''@;'; put 'put ''RnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGMpe3NldFRpbWVvdXQoYywxNyl9O2Z1bmN0aW9uIGR0ZSgpe3JldHVybiBYOXx8KHk4ZSh1U3QpLFg5PWtBLm5vdygpK21OKX1mdW5jdGlvbiB1U3QoKXtYOT0wfWZ1bmN0aW9uIHZOKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25l''@;'; put 'put ''eHQ9bnVsbH1mdW5jdGlvbiBfOGUoYyxsLGEpe3ZhciBkPW5ldyB2TjtyZXR1cm4gZC5yZXN0YXJ0KGMsbCxhKSxkfWZ1bmN0aW9uIHc4ZSgpe1g5PShnTj1rQS5ub3coKSkrbU4sVHc9RUE9MDt0cnl7IWZ1bmN0aW9uIGRTdCgpe2R0ZSgpLCsrVHc7Zm9yKHZhciBsLGM9cE47YzspKGw9WDkt''@;'; put 'put ''Yy5fdGltZSk+PTAmJmMuX2NhbGwuY2FsbCh2b2lkIDAsbCksYz1jLl9uZXh0Oy0tVHd9KCl9ZmluYWxseXtUdz0wLGZ1bmN0aW9uIGZTdCgpe2Zvcih2YXIgYyxhLGw9cE4sZD0xLzA7bDspbC5fY2FsbD8oZD5sLl90aW1lJiYoZD1sLl90aW1lKSxjPWwsbD1sLl9uZXh0KTooYT1sLl9uZXh0''@;'; put 'put ''LGwuX25leHQ9bnVsbCxsPWM/Yy5fbmV4dD1hOnBOPWEpO0FBPWMsaHRlKGQpfSgpLFg5PTB9fWZ1bmN0aW9uIGhTdCgpe3ZhciBjPWtBLm5vdygpLGw9Yy1nTjtsPmI4ZSYmKG1OLT1sLGdOPWMpfWZ1bmN0aW9uIGh0ZShjKXtUd3x8KEVBJiYoRUE9Y2xlYXJUaW1lb3V0KEVBKSksYy1YOT4y''@;'; put 'put ''ND8oYzwxLzAmJihFQT1zZXRUaW1lb3V0KHc4ZSxjLWtBLm5vdygpLW1OKSksVEEmJihUQT1jbGVhckludGVydmFsKFRBKSkpOihUQXx8KGdOPWtBLm5vdygpLFRBPXNldEludGVydmFsKGhTdCxiOGUpKSxUdz0xLHk4ZSh3OGUpKSl9ZnVuY3Rpb24gYk4oYyxsLGEpe3ZhciBkPW5ldyB2Tjty''@;'; put 'put ''ZXR1cm4gZC5yZXN0YXJ0KGg9PntkLnN0b3AoKSxjKGgrbCl9LGw9bnVsbD09bD8wOitsLGEpLGR9dk4ucHJvdG90eXBlPV84ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnZOLHJlc3RhcnQ6ZnVuY3Rpb24oYyxsLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7YT0obnVsbD09YT9kdGUoKTorYSkrKG51bGw9PWw/MDorbCksIXRoaXMuX25leHQmJkFBIT09dGhpcyYmKEFBP0FBLl9uZXh0PXRoaXM6cE49dGhpcyxBQT10aGlzKSx0aGlzLl9jYWxsPWMsdGhpcy5fdGltZT1hLGh0ZSgpfSxzdG9w''@;'; put 'put ''OmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxodGUoKSl9fTt2YXIgcFN0PXV0ZSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxnU3Q9W10sQzhlPTAscHRlPTIseU49MyxndGU9NSxfTj02O2Z1bmN0aW9uIHdOKGMsbCxh''@;'; put 'put ''LGQsaCxmKXt2YXIgdj1jLl9fdHJhbnNpdGlvbjtpZih2KXtpZihhIGluIHYpcmV0dXJufWVsc2UgYy5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uIG1TdChjLGwsYSl7dmFyIGgsZD1jLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiB2KFope3ZhciByZSxjZSxiZSxFZTtpZigxIT09YS5zdGF0ZSly''@;'; put 'put ''ZXR1cm4gRCgpO2ZvcihyZSBpbiBkKWlmKChFZT1kW3JlXSkubmFtZT09PWEubmFtZSl7aWYoRWUuc3RhdGU9PT15TilyZXR1cm4gYk4odik7ND09PUVlLnN0YXRlPyhFZS5zdGF0ZT1fTixFZS50aW1lci5zdG9wKCksRWUub24uY2FsbCgiaW50ZXJydXB0IixjLGMuX19kYXRhX18sRWUuaW5k''@;'; put 'put ''ZXgsRWUuZ3JvdXApLGRlbGV0ZSBkW3JlXSk6K3JlPGwmJihFZS5zdGF0ZT1fTixFZS50aW1lci5zdG9wKCksRWUub24uY2FsbCgiY2FuY2VsIixjLGMuX19kYXRhX18sRWUuaW5kZXgsRWUuZ3JvdXApLGRlbGV0ZSBkW3JlXSl9aWYoYk4oZnVuY3Rpb24oKXthLnN0YXRlPT09eU4mJihhLnN0''@;'; put 'put ''YXRlPTQsYS50aW1lci5yZXN0YXJ0KE0sYS5kZWxheSxhLnRpbWUpLE0oWikpfSksYS5zdGF0ZT1wdGUsYS5vbi5jYWxsKCJzdGFydCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksYS5zdGF0ZT09PXB0ZSl7Zm9yKGEuc3RhdGU9eU4saD1uZXcgQXJyYXkoYmU9YS50d2Vlbi5sZW5n''@;'; put 'put ''dGgpLHJlPTAsY2U9LTE7cmU8YmU7KytyZSkoRWU9YS50d2VlbltyZV0udmFsdWUuY2FsbChjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSkmJihoWysrY2VdPUVlKTtoLmxlbmd0aD1jZSsxfX1mdW5jdGlvbiBNKFope2Zvcih2YXIgcmU9WjxhLmR1cmF0aW9uP2EuZWFzZS5jYWxsKG51''@;'; put 'put ''bGwsWi9hLmR1cmF0aW9uKTooYS50aW1lci5yZXN0YXJ0KEQpLGEuc3RhdGU9Z3RlLDEpLGNlPS0xLGJlPWgubGVuZ3RoOysrY2U8YmU7KWhbY2VdLmNhbGwoYyxyZSk7YS5zdGF0ZT09PWd0ZSYmKGEub24uY2FsbCgiZW5kIixjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSxEKCkpfWZ1''@;'; put 'put ''bmN0aW9uIEQoKXtmb3IodmFyIFogaW4gYS5zdGF0ZT1fTixhLnRpbWVyLnN0b3AoKSxkZWxldGUgZFtsXSxkKXJldHVybjtkZWxldGUgYy5fX3RyYW5zaXRpb259ZFtsXT1hLGEudGltZXI9XzhlKGZ1bmN0aW9uIGYoWil7YS5zdGF0ZT0xLGEudGltZXIucmVzdGFydCh2LGEuZGVsYXksYS50''@;'; put 'put ''aW1lKSxhLmRlbGF5PD1aJiZ2KFotYS5kZWxheSl9LDAsYS50aW1lKX0oYyxhLHtuYW1lOmwsaW5kZXg6ZCxncm91cDpoLG9uOnBTdCx0d2VlbjpnU3QsdGltZTpmLnRpbWUsZGVsYXk6Zi5kZWxheSxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlLHRpbWVyOm51bGwsc3RhdGU6Qzhl''@;'; put 'put ''fSl9ZnVuY3Rpb24gbXRlKGMsbCl7dmFyIGE9QzMoYyxsKTtpZihhLnN0YXRlPkM4ZSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBhfWZ1bmN0aW9uIHM0KGMsbCl7dmFyIGE9QzMoYyxsKTtpZihhLnN0YXRlPnlOKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBhfWZ1bmN0aW9uIEMzKGMsbCl7dmFyIGE9Yy5fX3RyYW5zaXRpb247aWYoIWF8fCEoYT1hW2xdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGF9ZnVuY3Rpb24gQ04oYyxsKXt2YXIg''@;'; put 'put ''ZCxoLHYsYT1jLl9fdHJhbnNpdGlvbixmPSEwO2lmKGEpe2Zvcih2IGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSkoZD1hW3ZdKS5uYW1lPT09bD8oaD1kLnN0YXRlPnB0ZSYmZC5zdGF0ZTxndGUsZC5zdGF0ZT1fTixkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoaD8iaW50ZXJydXB0IjoiY2Fu''@;'; put 'put ''Y2VsIixjLGMuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgYVt2XSk6Zj0hMTtmJiZkZWxldGUgYy5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIGw0KGMsbCl7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihhKXtyZXR1cm4gYyooMS1hKStsKmF9fXZhciBTTixNOGU9MTgwL01hdGgu''@;'; put 'put ''UEksdnRlPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIHg4ZShjLGwsYSxkLGgsZil7dmFyIHYsTSxEO3JldHVybih2PU1hdGguc3FydChjKmMrbCpsKSkmJihjLz12LGwvPXYpLChEPWMqYStsKmQpJiYoYS09''@;'; put 'put ''YypELGQtPWwqRCksKE09TWF0aC5zcXJ0KGEqYStkKmQpKSYmKGEvPU0sZC89TSxELz1NKSxjKmQ8bCphJiYoYz0tYyxsPS1sLEQ9LUQsdj0tdikse3RyYW5zbGF0ZVg6aCx0cmFuc2xhdGVZOmYscm90YXRlOk1hdGguYXRhbjIobCxjKSpNOGUsc2tld1g6TWF0aC5hdGFuKEQpKk04ZSxzY2Fs''@;'; put 'put ''ZVg6dixzY2FsZVk6TX19ZnVuY3Rpb24gRThlKGMsbCxhLGQpe2Z1bmN0aW9uIGgoWil7cmV0dXJuIFoubGVuZ3RoP1oucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihaLHJlKXt2YXIgY2U9W10sYmU9W107cmV0dXJuIFo9YyhaKSxyZT1jKHJlKSxmdW5jdGlvbiBmKFoscmUsY2UsYmUs''@;'; put 'put ''RWUsQmUpe2lmKFohPT1jZXx8cmUhPT1iZSl7dmFyIHFlPUVlLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsbCxudWxsLGEpO0JlLnB1c2goe2k6cWUtNCx4Omw0KFosY2UpfSx7aTpxZS0yLHg6bDQocmUsYmUpfSl9ZWxzZShjZXx8YmUpJiZFZS5wdXNoKCJ0cmFuc2xhdGUoIitjZStsK2JlK2Ep''@;'; put 'put ''fShaLnRyYW5zbGF0ZVgsWi50cmFuc2xhdGVZLHJlLnRyYW5zbGF0ZVgscmUudHJhbnNsYXRlWSxjZSxiZSksZnVuY3Rpb24gdihaLHJlLGNlLGJlKXtaIT09cmU/KFotcmU+MTgwP3JlKz0zNjA6cmUtWj4xODAmJihaKz0zNjApLGJlLnB1c2goe2k6Y2UucHVzaChoKGNlKSsicm90YXRlKCIs''@;'; put 'put ''bnVsbCxkKS0yLHg6bDQoWixyZSl9KSk6cmUmJmNlLnB1c2goaChjZSkrInJvdGF0ZSgiK3JlK2QpfShaLnJvdGF0ZSxyZS5yb3RhdGUsY2UsYmUpLGZ1bmN0aW9uIE0oWixyZSxjZSxiZSl7WiE9PXJlP2JlLnB1c2goe2k6Y2UucHVzaChoKGNlKSsic2tld1goIixudWxsLGQpLTIseDpsNCha''@;'; put 'put ''LHJlKX0pOnJlJiZjZS5wdXNoKGgoY2UpKyJza2V3WCgiK3JlK2QpfShaLnNrZXdYLHJlLnNrZXdYLGNlLGJlKSxmdW5jdGlvbiBEKFoscmUsY2UsYmUsRWUsQmUpe2lmKFohPT1jZXx8cmUhPT1iZSl7dmFyIHFlPUVlLnB1c2goaChFZSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO0Jl''@;'; put 'put ''LnB1c2goe2k6cWUtNCx4Omw0KFosY2UpfSx7aTpxZS0yLHg6bDQocmUsYmUpfSl9ZWxzZSgxIT09Y2V8fDEhPT1iZSkmJkVlLnB1c2goaChFZSkrInNjYWxlKCIrY2UrIiwiK2JlKyIpIil9KFouc2NhbGVYLFouc2NhbGVZLHJlLnNjYWxlWCxyZS5zY2FsZVksY2UsYmUpLFo9cmU9bnVsbCxm''@;'; put 'put ''dW5jdGlvbihFZSl7Zm9yKHZhciBydCxCZT0tMSxxZT1iZS5sZW5ndGg7KytCZTxxZTspY2VbKHJ0PWJlW0JlXSkuaV09cnQueChFZSk7cmV0dXJuIGNlLmpvaW4oIiIpfX19dmFyIF9TdD1FOGUoZnVuY3Rpb24gYlN0KGMpe2NvbnN0IGw9bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiBET01NYXRy''@;'; put 'put ''aXg/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkoYysiIik7cmV0dXJuIGwuaXNJZGVudGl0eT92dGU6eDhlKGwuYSxsLmIsbC5jLGwuZCxsLmUsbC5mKX0sInB4LCAiLCJweCkiLCJkZWcpIiksVDhlPUU4ZShmdW5jdGlvbiB5U3QoYyl7cmV0dXJuIG51bGwhPWMmJihTTnx8KFNOPWRvY3Vt''@;'; put 'put ''ZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLFNOLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixjKSxjPVNOLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP3g4ZSgoYz1jLm1hdHJpeCkuYSxjLmIsYy5jLGMuZCxjLmUsYy5mKTp2''@;'; put 'put ''dGV9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gd1N0KGMsbCl7dmFyIGEsZDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD1zNCh0aGlzLGMpLGY9aC50d2VlbjtpZihmIT09YSlmb3IodmFyIHY9MCxNPShkPWE9ZikubGVuZ3RoO3Y8TTsrK3YpaWYoZFt2XS5uYW1lPT09bCl7KGQ9ZC5zbGljZSgp''@;'; put 'put ''KS5zcGxpY2UodiwxKTticmVha31oLnR3ZWVuPWR9fWZ1bmN0aW9uIENTdChjLGwsYSl7dmFyIGQsaDtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9czQodGhpcyxjKSx2PWYudHdlZW47aWYodiE9PWQpe2g9KGQ9dikuc2xp''@;'; put 'put ''Y2UoKTtmb3IodmFyIE09e25hbWU6bCx2YWx1ZTphfSxEPTAsWj1oLmxlbmd0aDtEPFo7KytEKWlmKGhbRF0ubmFtZT09PWwpe2hbRF09TTticmVha31EPT09WiYmaC5wdXNoKE0pfWYudHdlZW49aH19ZnVuY3Rpb24gYnRlKGMsbCxhKXt2YXIgZD1jLl9pZDtyZXR1cm4gYy5lYWNoKGZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIGg9czQodGhpcyxkKTsoaC52YWx1ZXx8KGgudmFsdWU9e30pKVtsXT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGgpe3JldHVybiBDMyhoLGQpLnZhbHVlW2xdfX1mdW5jdGlvbiB5dGUoYyxsLGEpe2MucHJvdG90eXBlPWwucHJvdG90eXBlPWEsYS5jb25z''@;'; put 'put ''dHJ1Y3Rvcj1jfWZ1bmN0aW9uIEE4ZShjLGwpe3ZhciBhPU9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpO2Zvcih2YXIgZCBpbiBsKWFbZF09bFtkXTtyZXR1cm4gYX1mdW5jdGlvbiBEQSgpe312YXIgTU49MS8uNyxBdz0iXFxzKihbKy1dP1xcZCspXFxzKiIsUkE9IlxccyooWystXT8oPzpc''@;'; put 'put ''XGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGM0PSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsTVN0PS9eIyhbMC05YS1mXXszLDh9KSQvLHhTdD1uZXcgUmVnRXhwKGBecmdiXFwoJHtBd30sJHtBd30sJHtBd31cXCkkYCks''@;'; put 'put ''RVN0PW5ldyBSZWdFeHAoYF5yZ2JcXCgke2M0fSwke2M0fSwke2M0fVxcKSRgKSxUU3Q9bmV3IFJlZ0V4cChgXnJnYmFcXCgke0F3fSwke0F3fSwke0F3fSwke1JBfVxcKSRgKSxBU3Q9bmV3IFJlZ0V4cChgXnJnYmFcXCgke2M0fSwke2M0fSwke2M0fSwke1JBfVxcKSRgKSxrU3Q9bmV3IFJl''@;'; put 'put ''Z0V4cChgXmhzbFxcKCR7UkF9LCR7YzR9LCR7YzR9XFwpJGApLERTdD1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7UkF9LCR7YzR9LCR7YzR9LCR7UkF9XFwpJGApLGs4ZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2''@;'; put 'put ''NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0''@;'; put 'put ''cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5''@;'; put 'put ''MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6''@;'; put 'put ''OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2''@;'; put 'put ''NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0''@;'; put 'put ''NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDox''@;'; put 'put ''MzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDox''@;'; put 'put ''NTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3Jl''@;'; put 'put ''ZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3''@;'; put 'put ''MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxt''@;'; put 'put ''ZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2''@;'; put 'put ''ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1''@;'; put 'put ''b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBs''@;'; put 'put ''ZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5''@;'; put 'put ''NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhp''@;'; put 'put ''c3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBEOGUo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBJOGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBKOShjKXt2YXIgbCxhO3JldHVybiBjPShjKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwobD1NU3QuZXhlYyhjKSk/KGE9bFsxXS5sZW5n''@;'; put 'put ''dGgsbD1wYXJzZUludChsWzFdLDE2KSw2PT09YT9SOGUobCk6Mz09PWE/bmV3IFFkKGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwyNDAmbCwoMTUmbCk8PDR8MTUmbCwxKTo4PT09YT94TihsPj4yNCYyNTUsbD4+MTYmMjU1LGw+PjgmMjU1LCgyNTUmbCkvMjU1KTo0PT09YT94TihsPj4xMiYx''@;'; put 'put ''NXxsPj44JjI0MCxsPj44JjE1fGw+PjQmMjQwLGw+PjQmMTV8MjQwJmwsKCgxNSZsKTw8NHwxNSZsKS8yNTUpOm51bGwpOihsPXhTdC5leGVjKGMpKT9uZXcgUWQobFsxXSxsWzJdLGxbM10sMSk6KGw9RVN0LmV4ZWMoYykpP25ldyBRZCgyNTUqbFsxXS8xMDAsMjU1KmxbMl0vMTAwLDI1NSps''@;'; put 'put ''WzNdLzEwMCwxKToobD1UU3QuZXhlYyhjKSk/eE4obFsxXSxsWzJdLGxbM10sbFs0XSk6KGw9QVN0LmV4ZWMoYykpP3hOKDI1NSpsWzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAwLGxbNF0pOihsPWtTdC5leGVjKGMpKT9QOGUobFsxXSxsWzJdLzEwMCxsWzNdLzEwMCwxKToobD1E''@;'; put 'put ''U3QuZXhlYyhjKSk/UDhlKGxbMV0sbFsyXS8xMDAsbFszXS8xMDAsbFs0XSk6azhlLmhhc093blByb3BlcnR5KGMpP1I4ZShrOGVbY10pOiJ0cmFuc3BhcmVudCI9PT1jP25ldyBRZChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFI4ZShjKXtyZXR1cm4gbmV3IFFkKGM+PjE2JjI1NSxj''@;'; put 'put ''Pj44JjI1NSwyNTUmYywxKX1mdW5jdGlvbiB4TihjLGwsYSxkKXtyZXR1cm4gZDw9MCYmKGM9bD1hPU5hTiksbmV3IFFkKGMsbCxhLGQpfWZ1bmN0aW9uIEVOKGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbiBMU3QoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBE''@;'; put 'put ''QXx8KGM9SjkoYykpLGM/bmV3IFFkKChjPWMucmdiKCkpLnIsYy5nLGMuYixjLm9wYWNpdHkpOm5ldyBRZH0oYyk6bmV3IFFkKGMsbCxhLGQ/PzEpfWZ1bmN0aW9uIFFkKGMsbCxhLGQpe3RoaXMucj0rYyx0aGlzLmc9K2wsdGhpcy5iPSthLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiBMOGUo''@;'; put 'put ''KXtyZXR1cm5gIyR7ZXYodGhpcy5yKX0ke2V2KHRoaXMuZyl9JHtldih0aGlzLmIpfWB9ZnVuY3Rpb24gTzhlKCl7Y29uc3QgYz1UTih0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJyZ2IoIjoicmdiYSgifSR7UTkodGhpcy5yKX0sICR7UTkodGhpcy5nKX0sICR7UTkodGhpcy5iKX0k''@;'; put 'put ''ezE9PT1jPyIpIjpgLCAke2N9KWB9YH1mdW5jdGlvbiBUTihjKXtyZXR1cm4gaXNOYU4oYyk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsYykpfWZ1bmN0aW9uIFE5KGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGMpfHwwKSl9ZnVuY3Rpb24gZXYoYyl7cmV0''@;'; put 'put ''dXJuKChjPVE5KGMpKTwxNj8iMCI6IiIpK2MudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFA4ZShjLGwsYSxkKXtyZXR1cm4gZDw9MD9jPWw9YT1OYU46YTw9MHx8YT49MT9jPWw9TmFOOmw8PTAmJihjPU5hTiksbmV3IFMzKGMsbCxhLGQpfWZ1bmN0aW9uIEY4ZShjKXtpZihjIGluc3RhbmNlb2Yg''@;'; put 'put ''UzMpcmV0dXJuIG5ldyBTMyhjLmgsYy5zLGMubCxjLm9wYWNpdHkpO2lmKGMgaW5zdGFuY2VvZiBEQXx8KGM9SjkoYykpLCFjKXJldHVybiBuZXcgUzM7aWYoYyBpbnN0YW5jZW9mIFMzKXJldHVybiBjO3ZhciBsPShjPWMucmdiKCkpLnIvMjU1LGE9Yy5nLzI1NSxkPWMuYi8yNTUsaD1NYXRo''@;'; put 'put ''Lm1pbihsLGEsZCksZj1NYXRoLm1heChsLGEsZCksdj1OYU4sTT1mLWgsRD0oZitoKS8yO3JldHVybiBNPyh2PWw9PT1mPyhhLWQpL00rNiooYTxkKTphPT09Zj8oZC1sKS9NKzI6KGwtYSkvTSs0LE0vPUQ8LjU/ZitoOjItZi1oLHYqPTYwKTpNPUQ+MCYmRDwxPzA6dixuZXcgUzModixNLEQs''@;'; put 'put ''Yy5vcGFjaXR5KX1mdW5jdGlvbiBTMyhjLGwsYSxkKXt0aGlzLmg9K2MsdGhpcy5zPStsLHRoaXMubD0rYSx0aGlzLm9wYWNpdHk9K2R9ZnVuY3Rpb24gSDhlKGMpe3JldHVybihjPShjfHwwKSUzNjApPDA/YyszNjA6Y31mdW5jdGlvbiBBTihjKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1p''@;'; put 'put ''bigxLGN8fDApKX1mdW5jdGlvbiBfdGUoYyxsLGEpe3JldHVybiAyNTUqKGM8NjA/bCsoYS1sKSpjLzYwOmM8MTgwP2E6YzwyNDA/bCsoYS1sKSooMjQwLWMpLzYwOmwpfWZ1bmN0aW9uIE44ZShjLGwsYSxkLGgpe3ZhciBmPWMqYyx2PWYqYztyZXR1cm4oKDEtMypjKzMqZi12KSpsKyg0LTYq''@;'; put 'put ''ZiszKnYpKmErKDErMypjKzMqZi0zKnYpKmQrdipoKS82fXl0ZShEQSxKOSx7Y29weShjKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGMpfSxkaXNwbGF5YWJsZSgpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpEOGUsZm9ybWF0''@;'; put 'put ''SGV4OkQ4ZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIElTdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKX0sZm9ybWF0SHNsOmZ1bmN0aW9uIFJTdCgpe3JldHVybiBGOGUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpJOGUsdG9TdHJpbmc6SThlfSkseXRlKFFkLEVOLEE4ZShE''@;'; put 'put ''QSx7YnJpZ2h0ZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz9NTjpNYXRoLnBvdyhNTixjKSxuZXcgUWQodGhpcy5yKmMsdGhpcy5nKmMsdGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IFFkKHRoaXMucipjLHRoaXMu''@;'; put 'put ''ZypjLHRoaXMuYipjLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcgUWQoUTkodGhpcy5yKSxROSh0aGlzLmcpLFE5KHRoaXMuYiksVE4odGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUu''@;'; put 'put ''NSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpMOGUsZm9ybWF0SGV4Okw4ZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIE9TdCgpe3JldHVybmAjJHtldih0aGlzLnIpfSR7ZXYo''@;'; put 'put ''dGhpcy5nKX0ke2V2KHRoaXMuYil9JHtldigyNTUqKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKX1gfSxmb3JtYXRSZ2I6TzhlLHRvU3RyaW5nOk84ZX0pKSx5dGUoUzMsZnVuY3Rpb24gUFN0KGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9GOGUoYyk6''@;'; put 'put ''bmV3IFMzKGMsbCxhLGQ/PzEpfSxBOGUoREEse2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/TU46TWF0aC5wb3coTU4sYyksbmV3IFMzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyks''@;'; put 'put ''bmV3IFMzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGM9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxsPWlzTmFOKGMpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGE9dGhpcy5sLGQ9YSsoYTwuNT9hOjEtYSkqbCxoPTIqYS1kO3JldHVybiBuZXcg''@;'; put 'put ''UWQoX3RlKGM+PTI0MD9jLTI0MDpjKzEyMCxoLGQpLF90ZShjLGgsZCksX3RlKGM8MTIwP2MrMjQwOmMtMTIwLGgsZCksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IFMzKEg4ZSh0aGlzLmgpLEFOKHRoaXMucyksQU4odGhpcy5sKSxUTih0aGlzLm9wYWNpdHkpKX0sZGlzcGxh''@;'; put 'put ''eWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IGM9VE4odGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8iaHNs''@;'; put 'put ''KCI6ImhzbGEoIn0ke0g4ZSh0aGlzLmgpfSwgJHsxMDAqQU4odGhpcy5zKX0lLCAkezEwMCpBTih0aGlzLmwpfSUkezE9PT1jPyIpIjpgLCAke2N9KWB9YH19KSk7Y29uc3Qgd3RlPWM9PigpPT5jO2Z1bmN0aW9uIEI4ZShjLGwpe3ZhciBhPWwtYztyZXR1cm4gYT9mdW5jdGlvbiBWOGUoYyxs''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGMrYSpsfX0oYyxhKTp3dGUoaXNOYU4oYyk/bDpjKX1jb25zdCBrTj1mdW5jdGlvbiBjKGwpe3ZhciBhPWZ1bmN0aW9uIFZTdChjKXtyZXR1cm4gMT09KGM9K2MpP0I4ZTpmdW5jdGlvbihsLGEpe3JldHVybiBhLWw/ZnVuY3Rpb24gTlN0KGMs''@;'; put 'put ''bCxhKXtyZXR1cm4gYz1NYXRoLnBvdyhjLGEpLGw9TWF0aC5wb3cobCxhKS1jLGE9MS9hLGZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLnBvdyhjK2QqbCxhKX19KGwsYSxjKTp3dGUoaXNOYU4obCk/YTpsKX19KGwpO2Z1bmN0aW9uIGQoaCxmKXt2YXIgdj1hKChoPUVOKGgpKS5yLChmPUVOKGYp''@;'; put 'put ''KS5yKSxNPWEoaC5nLGYuZyksRD1hKGguYixmLmIpLFo9QjhlKGgub3BhY2l0eSxmLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihyZSl7cmV0dXJuIGgucj12KHJlKSxoLmc9TShyZSksaC5iPUQocmUpLGgub3BhY2l0eT1aKHJlKSxoKyIifX1yZXR1cm4gZC5nYW1tYT1jLGR9KDEpO2Z1bmN0''@;'; put 'put ''aW9uIGo4ZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIHYsTSxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEpO2Zvcih2PTA7djxhOysrdilNPUVOKGxbdl0pLGRbdl09TS5yfHwwLGhbdl09TS5nfHwwLGZbdl09TS5ifHwwO3JldHVybiBk''@;'; put 'put ''PWMoZCksaD1jKGgpLGY9YyhmKSxNLm9wYWNpdHk9MSxmdW5jdGlvbihEKXtyZXR1cm4gTS5yPWQoRCksTS5nPWgoRCksTS5iPWYoRCksTSsiIn19fWo4ZShmdW5jdGlvbiBGU3QoYyl7dmFyIGw9Yy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9YTw9MD9hPTA6YT49MT8oYT0x''@;'; put 'put ''LGwtMSk6TWF0aC5mbG9vcihhKmwpLGg9Y1tkXSxmPWNbZCsxXTtyZXR1cm4gTjhlKChhLWQvbCkqbCxkPjA/Y1tkLTFdOjIqaC1mLGgsZixkPGwtMT9jW2QrMl06MipmLWgpfX0pLGo4ZShmdW5jdGlvbiBIU3QoYyl7dmFyIGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBkPU1h''@;'; put 'put ''dGguZmxvb3IoKChhJT0xKTwwPysrYTphKSpsKTtyZXR1cm4gTjhlKChhLWQvbCkqbCxjWyhkK2wtMSklbF0sY1tkJWxdLGNbKGQrMSklbF0sY1soZCsyKSVsXSl9fSk7dmFyIEN0ZT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csU3RlPW5ldyBSZWdFeHAo''@;'; put 'put ''Q3RlLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHo4ZShjLGwpe3ZhciBkLGgsZixhPUN0ZS5sYXN0SW5kZXg9U3RlLmxhc3RJbmRleD0wLHY9LTEsTT1bXSxEPVtdO2ZvcihjKz0iIixsKz0iIjsoZD1DdGUuZXhlYyhjKSkmJihoPVN0ZS5leGVjKGwpKTspKGY9aC5pbmRleCk+YSYmKGY9bC5zbGlj''@;'; put 'put ''ZShhLGYpLE1bdl0/TVt2XSs9ZjpNWysrdl09ZiksKGQ9ZFswXSk9PT0oaD1oWzBdKT9NW3ZdP01bdl0rPWg6TVsrK3ZdPWg6KE1bKyt2XT1udWxsLEQucHVzaCh7aTp2LHg6bDQoZCxoKX0pKSxhPVN0ZS5sYXN0SW5kZXg7cmV0dXJuIGE8bC5sZW5ndGgmJihmPWwuc2xpY2UoYSksTVt2XT9N''@;'; put 'put ''W3ZdKz1mOk1bKyt2XT1mKSxNLmxlbmd0aDwyP0RbMF0/ZnVuY3Rpb24galN0KGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKSsiIn19KERbMF0ueCk6ZnVuY3Rpb24gQlN0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0obCk6KGw9RC5sZW5ndGgsZnVuY3Rpb24oWil7''@;'; put 'put ''Zm9yKHZhciBjZSxyZT0wO3JlPGw7KytyZSlNWyhjZT1EW3JlXSkuaV09Y2UueChaKTtyZXR1cm4gTS5qb2luKCIiKX0pfWZ1bmN0aW9uIFU4ZShjLGwpe3ZhciBhO3JldHVybigibnVtYmVyIj09dHlwZW9mIGw/bDQ6bCBpbnN0YW5jZW9mIEo5P2tOOihhPUo5KGwpKT8obD1hLGtOKTp6OGUp''@;'; put 'put ''KGMsbCl9ZnVuY3Rpb24gelN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiBVU3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBaU3QoYyxsLGEpe3ZhciBk''@;'; put 'put ''LGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlKGMpO3JldHVybiB2PT09aD9udWxsOnY9PT1kP2Y6Zj1sKGQ9dixhKX19ZnVuY3Rpb24gV1N0KGMsbCxhKXt2YXIgZCxmLGg9YSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj10aGlzLmdldEF0dHJp''@;'; put 'put ''YnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX1mdW5jdGlvbiBZU3QoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdixELE09YSh0aGlzKTtyZXR1cm4gbnVsbD09TT92b2lkIHRoaXMucmVtb3ZlQXR0cmli''@;'; put 'put ''dXRlKGMpOih2PXRoaXMuZ2V0QXR0cmlidXRlKGMpKT09PShEPU0rIiIpP251bGw6dj09PWQmJkQ9PT1oP2Y6KGg9RCxmPWwoZD12LE0pKX19ZnVuY3Rpb24gR1N0KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHYsRCxNPWEodGhpcyk7cmV0dXJuIG51bGw9PU0/dm9p''@;'; put 'put ''ZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6KHY9dGhpcy5nZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpKT09PShEPU0rIiIpP251bGw6dj09PWQmJkQ9PT1oP2Y6KGg9RCxmPWwoZD12LE0pKX19ZnVuY3Rpb24gWFN0KGMsbCl7dmFyIGEsZDtmdW5jdGlv''@;'; put 'put ''biBoKCl7dmFyIGY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGYhPT1kJiYoYT0oZD1mKSYmZnVuY3Rpb24gcVN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsLGwuY2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJu''@;'; put 'put ''IGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBKU3QoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBLU3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxs''@;'; put 'put ''LmNhbGwodGhpcyxhKSl9fShjLGYpKSxhfXJldHVybiBoLl92YWx1ZT1sLGh9ZnVuY3Rpb24gZU10KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7bXRlKHRoaXMsYykuZGVsYXk9K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiB0TXQoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigp''@;'; put 'put ''e210ZSh0aGlzLGMpLmRlbGF5PWx9fWZ1bmN0aW9uIHJNdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3M0KHRoaXMsYykuZHVyYXRpb249K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBpTXQoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe3M0KHRoaXMsYykuZHVyYXRpb249''@;'; put 'put ''bH19dmFyIHlNdD1xOS5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gWjhlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fXZhciBITXQ9MDtmdW5jdGlvbiB1NChjLGwsYSxkKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWwsdGhp''@;'; put 'put ''cy5fbmFtZT1hLHRoaXMuX2lkPWR9ZnVuY3Rpb24gTXRlKGMpe3JldHVybiBxOSgpLnRyYW5zaXRpb24oYyl9ZnVuY3Rpb24gVzhlKCl7cmV0dXJuKytITXR9dmFyIFhnPXE5LnByb3RvdHlwZTt1NC5wcm90b3R5cGU9TXRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dTQsc2VsZWN0OmZ1bmN0''@;'; put 'put ''aW9uIHZNdChjKXt2YXIgbD10aGlzLl9uYW1lLGE9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWF0ZShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7Kyt2KWZvcih2YXIgcmUsY2UsTT1kW3ZdLEQ9TS5sZW5ndGgs''@;'; put 'put ''Wj1mW3ZdPW5ldyBBcnJheShEKSxiZT0wO2JlPEQ7KytiZSkocmU9TVtiZV0pJiYoY2U9Yy5jYWxsKHJlLHJlLl9fZGF0YV9fLGJlLE0pKSYmKCJfX2RhdGFfXyJpbiByZSYmKGNlLl9fZGF0YV9fPXJlLl9fZGF0YV9fKSxaW2JlXT1jZSx3TihaW2JlXSxsLGEsYmUsWixDMyhyZSxhKSkpO3Jl''@;'; put 'put ''dHVybiBuZXcgdTQoZix0aGlzLl9wYXJlbnRzLGwsYSl9LHNlbGVjdEFsbDpmdW5jdGlvbiBiTXQoYyl7dmFyIGw9dGhpcy5fbmFtZSxhPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1yOGUoYykpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPVtdLHY9W10s''@;'; put 'put ''TT0wO008aDsrK00pZm9yKHZhciByZSxEPWRbTV0sWj1ELmxlbmd0aCxjZT0wO2NlPFo7KytjZSlpZihyZT1EW2NlXSl7Zm9yKHZhciBFZSxiZT1jLmNhbGwocmUscmUuX19kYXRhX18sY2UsRCksQmU9QzMocmUsYSkscWU9MCxydD1iZS5sZW5ndGg7cWU8cnQ7KytxZSkoRWU9YmVbcWVdKSYm''@;'; put 'put ''d04oRWUsbCxhLHFlLGJlLEJlKTtmLnB1c2goYmUpLHYucHVzaChyZSl9cmV0dXJuIG5ldyB1NChmLHYsbCxhKX0sc2VsZWN0Q2hpbGQ6WGcuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46WGcuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uIHVNdChjKXsiZnVuY3Rpb24iIT10eXBl''@;'; put 'put ''b2YgYyYmKGM9aThlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBELGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1bXSxaPTA7Wjx2OysrWikoRD1mW1pdKSYmYy5jYWxsKEQsRC5fX2RhdGFfXyxaLGYpJiZN''@;'; put 'put ''LnB1c2goRCk7cmV0dXJuIG5ldyB1NChkLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uIGRNdChjKXtpZihjLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9Yy5fZ3JvdXBzLGQ9bC5sZW5ndGgs''@;'; put 'put ''Zj1NYXRoLm1pbihkLGEubGVuZ3RoKSx2PW5ldyBBcnJheShkKSxNPTA7TTxmOysrTSlmb3IodmFyIGJlLEQ9bFtNXSxaPWFbTV0scmU9RC5sZW5ndGgsY2U9dltNXT1uZXcgQXJyYXkocmUpLEVlPTA7RWU8cmU7KytFZSkoYmU9RFtFZV18fFpbRWVdKSYmKGNlW0VlXT1iZSk7Zm9yKDtNPGQ7''@;'; put 'put ''KytNKXZbTV09bFtNXTtyZXR1cm4gbmV3IHU0KHYsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIF9NdCgpe3JldHVybiBuZXcgeU10KHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbiBQTXQoKXtmb3Io''@;'; put 'put ''dmFyIGM9dGhpcy5fbmFtZSxsPXRoaXMuX2lkLGE9VzhlKCksZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPTA7ZjxoOysrZilmb3IodmFyIEQsdj1kW2ZdLE09di5sZW5ndGgsWj0wO1o8TTsrK1opaWYoRD12W1pdKXt2YXIgcmU9QzMoRCxsKTt3TihELGMsYSxaLHYse3RpbWU6cmUudGlt''@;'; put 'put ''ZStyZS5kZWxheStyZS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnJlLmR1cmF0aW9uLGVhc2U6cmUuZWFzZX0pfXJldHVybiBuZXcgdTQoZCx0aGlzLl9wYXJlbnRzLGMsYSl9LGNhbGw6WGcuY2FsbCxub2RlczpYZy5ub2Rlcyxub2RlOlhnLm5vZGUsc2l6ZTpYZy5zaXplLGVtcHR5Olhn''@;'; put 'put ''LmVtcHR5LGVhY2g6WGcuZWFjaCxvbjpmdW5jdGlvbiBwTXQoYyxsKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP0MzKHRoaXMubm9kZSgpLGEpLm9uLm9uKGMpOnRoaXMuZWFjaChmdW5jdGlvbiBmTXQoYyxsLGEpe3ZhciBkLGgsZj1mdW5jdGlvbiBoTXQoYyl7''@;'; put 'put ''cmV0dXJuKGMrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihsKXt2YXIgYT1sLmluZGV4T2YoIi4iKTtyZXR1cm4gYT49MCYmKGw9bC5zbGljZSgwLGEpKSwhbHx8InN0YXJ0Ij09PWx9KX0obCk/bXRlOnM0O3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWYodGhpcyxj''@;'; put 'put ''KSxNPXYub247TSE9PWQmJihoPShkPU0pLmNvcHkoKSkub24obCxhKSx2Lm9uPWh9fShhLGMsbCkpfSxhdHRyOmZ1bmN0aW9uICRTdChjLGwpe3ZhciBhPWhOKGMpLGQ9InRyYW5zZm9ybSI9PT1hP1Q4ZTpVOGU7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGMsImZ1bmN0aW9uIj09dHlwZW9mIGw/''@;'; put 'put ''KGEubG9jYWw/R1N0OllTdCkoYSxkLGJ0ZSh0aGlzLCJhdHRyLiIrYyxsKSk6bnVsbD09bD8oYS5sb2NhbD9VU3Q6elN0KShhKTooYS5sb2NhbD9XU3Q6WlN0KShhLGQsbCkpfSxhdHRyVHdlZW46ZnVuY3Rpb24gUVN0KGMsbCl7dmFyIGE9ImF0dHIuIitjO2lmKGFyZ3VtZW50cy5sZW5ndGg8''@;'; put 'put ''MilyZXR1cm4oYT10aGlzLnR3ZWVuKGEpKSYmYS5fdmFsdWU7aWYobnVsbD09bClyZXR1cm4gdGhpcy50d2VlbihhLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjt2YXIgZD1oTihjKTtyZXR1cm4gdGhpcy50d2VlbihhLChkLmxvY2FsP1hTdDpKU3QpKGQs''@;'; put 'put ''bCkpfSxzdHlsZTpmdW5jdGlvbiB4TXQoYyxsLGEpe3ZhciBkPSJ0cmFuc2Zvcm0iPT0oYys9IiIpP19TdDpVOGU7cmV0dXJuIG51bGw9PWw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gd010KGMsbCl7dmFyIGEsZCxoO3JldHVybiBmdW5jdGlvbigpe3ZhciBmPUV3KHRoaXMsYyksdj0o''@;'; put 'put ''dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKSxFdyh0aGlzLGMpKTtyZXR1cm4gZj09PXY/bnVsbDpmPT09YSYmdj09PWQ/aDpoPWwoYT1mLGQ9dil9fShjLGQpKS5vbigiZW5kLnN0eWxlLiIrYyxaOGUoYykpOiJmdW5jdGlvbiI9PXR5cGVvZiBsP3RoaXMuc3R5bGVUd2VlbihjLGZ1bmN0''@;'; put 'put ''aW9uIFNNdChjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PUV3KHRoaXMsYyksTT1hKHRoaXMpLEQ9TSsiIjtyZXR1cm4gbnVsbD09TSYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyksRD1NPUV3KHRoaXMsYykpLHY9PT1EP251bGw6dj09PWQmJkQ9PT1oP2Y6''@;'; put 'put ''KGg9RCxmPWwoZD12LE0pKX19KGMsZCxidGUodGhpcywic3R5bGUuIitjLGwpKSkuZWFjaChmdW5jdGlvbiBNTXQoYyxsKXt2YXIgYSxkLGgsTSxmPSJzdHlsZS4iK2wsdj0iZW5kLiIrZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgRD1zNCh0aGlzLGMpLFo9RC5vbixyZT1udWxsPT1ELnZhbHVl''@;'; put 'put ''W2ZdP018fChNPVo4ZShsKSk6dm9pZCAwOyhaIT09YXx8aCE9PXJlKSYmKGQ9KGE9WikuY29weSgpKS5vbih2LGg9cmUpLEQub249ZH19KHRoaXMuX2lkLGMpKTp0aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBDTXQoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3Zh''@;'; put 'put ''ciB2PUV3KHRoaXMsYyk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX0oYyxkLGwpLGEpLm9uKCJlbmQuc3R5bGUuIitjLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIEFNdChjLGwsYSl7dmFyIGQ9InN0eWxlLiIrKGMrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIp''@;'; put 'put ''cmV0dXJuKGQ9dGhpcy50d2VlbihkKSkmJmQuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oZCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZCxmdW5jdGlvbiBUTXQoYyxsLGEpe3ZhciBkLGg7ZnVuY3Rp''@;'; put 'put ''b24gZigpe3ZhciB2PWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2IT09aCYmKGQ9KGg9dikmJmZ1bmN0aW9uIEVNdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxsLmNhbGwodGhpcyxkKSxhKX19KGMsdixhKSksZH1yZXR1cm4gZi5f''@;'; put 'put ''dmFsdWU9bCxmfShjLGwsYT8/IiIpKX0sdGV4dDpmdW5jdGlvbiBJTXQoYyl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIERNdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fShi''@;'; put 'put ''dGUodGhpcywidGV4dCIsYykpOmZ1bmN0aW9uIGtNdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fShudWxsPT1jPyIiOmMrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIE9NdChjKXt2YXIgbD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihsPXRo''@;'; put 'put ''aXMudHdlZW4obCkpJiZsLl92YWx1ZTtpZihudWxsPT1jKXJldHVybiB0aGlzLnR3ZWVuKGwsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGwsZnVuY3Rpb24gTE10KGMpe3ZhciBsLGE7ZnVuY3Rpb24gZCgpe3ZhciBoPWMu''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBoIT09YSYmKGw9KGE9aCkmJmZ1bmN0aW9uIFJNdChjKXtyZXR1cm4gZnVuY3Rpb24obCl7dGhpcy50ZXh0Q29udGVudD1jLmNhbGwodGhpcyxsKX19KGgpKSxsfXJldHVybiBkLl92YWx1ZT1jLGR9KGMpKX0scmVtb3ZlOmZ1bmN0aW9uIG1N''@;'; put 'put ''dCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbiBnTXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgYSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrYSE9PWMpcmV0dXJuO2wmJmwucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlz''@;'; put 'put ''Ll9pZCkpfSx0d2VlbjpmdW5jdGlvbiBTU3QoYyxsKXt2YXIgYT10aGlzLl9pZDtpZihjKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgdixkPUMzKHRoaXMubm9kZSgpLGEpLnR3ZWVuLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpaWYoKHY9ZFtoXSkubmFtZT09PWMpcmV0dXJuIHYu''@;'; put 'put ''dmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bD93U3Q6Q1N0KShhLGMsbCkpfSxkZWxheTpmdW5jdGlvbiBuTXQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz9lTXQ6dE10KShs''@;'; put 'put ''LGMpKTpDMyh0aGlzLm5vZGUoKSxsKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gYU10KGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGM/ck10OmlNdCkobCxjKSk6QzModGhpcy5ub2RlKCksbCkuZHVyYXRp''@;'; put 'put ''b259LGVhc2U6ZnVuY3Rpb24gc010KGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbiBvTXQoYyxsKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7czQodGhpcyxjKS5lYXNl''@;'; put 'put ''PWx9fShsLGMpKTpDMyh0aGlzLm5vZGUoKSxsKS5lYXNlfSxlYXNlVmFyeWluZzpmdW5jdGlvbiBjTXQoYyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gbE10KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yO3M0KHRoaXMsYykuZWFzZT1hfX0odGhpcy5faWQsYykpfSxlbmQ6ZnVuY3Rpb24gRk10KCl7dmFyIGMsbCxhPXRoaXMsZD1hLl9pZCxoPWEuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlz''@;'; put 'put ''ZShmdW5jdGlvbihmLHYpe3ZhciBNPXt2YWx1ZTp2fSxEPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taCYmZigpfX07YS5lYWNoKGZ1bmN0aW9uKCl7dmFyIFo9czQodGhpcyxkKSxyZT1aLm9uO3JlIT09YyYmKChsPShjPXJlKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2goTSksbC5fLmludGVycnVw''@;'; put 'put ''dC5wdXNoKE0pLGwuXy5lbmQucHVzaChEKSksWi5vbj1sfSksMD09PWgmJmYoKX0pfSxbU3ltYm9sLml0ZXJhdG9yXTpYZ1tTeW1ib2wuaXRlcmF0b3JdfTt2YXIgVk10PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbiBOTXQoYyl7cmV0dXJuKChjKj0yKTw9''@;'; put 'put ''MT9jKmMqYzooYy09MikqYypjKzIpLzJ9fTtmdW5jdGlvbiBCTXQoYyxsKXtmb3IodmFyIGE7IShhPWMuX190cmFuc2l0aW9uKXx8IShhPWFbbF0pOylpZighKGM9Yy5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtsfSBub3QgZm91bmRgKTtyZXR1cm4gYX1xOS5w''@;'; put 'put ''cm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uIHZTdChjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Q04odGhpcyxjKX0pfSxxOS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiBqTXQoYyl7dmFyIGwsYTtjIGluc3RhbmNlb2YgdTQ/KGw9Yy5faWQsYz1jLl9uYW1lKToobD1X''@;'; put 'put ''OGUoKSwoYT1WTXQpLnRpbWU9ZHRlKCksYz1udWxsPT1jP251bGw6YysiIik7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgRCx2PWRbZl0sTT12Lmxlbmd0aCxaPTA7WjxNOysrWikoRD12W1pdKSYmd04oRCxjLGwsWix2LGF8fEJNdChELGwp''@;'; put 'put ''KTtyZXR1cm4gbmV3IHU0KGQsdGhpcy5fcGFyZW50cyxjLGwpfTt2YXIgek10PVtudWxsXTtjb25zdCB4dGU9e2NhcHR1cmU6ITAscGFzc2l2ZTohMX07ZnVuY3Rpb24gRXRlKGMpe2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIFk4ZShj''@;'; put 'put ''KXtyZXR1cm4oKGM9TWF0aC5leHAoYykpKzEvYykvMn1jb25zdCBLTXQ9ZnVuY3Rpb24gYyhsLGEsZCl7ZnVuY3Rpb24gaChmLHYpe3ZhciBydCxwdCxNPWZbMF0sRD1mWzFdLFo9ZlsyXSxiZT12WzJdLEVlPXZbMF0tTSxCZT12WzFdLUQscWU9RWUqRWUrQmUqQmU7aWYocWU8MWUtMTIpcHQ9''@;'; put 'put ''TWF0aC5sb2coYmUvWikvbCxydD1mdW5jdGlvbihNbil7cmV0dXJuW00rTW4qRWUsRCtNbipCZSxaKk1hdGguZXhwKGwqTW4qcHQpXX07ZWxzZXt2YXIgZHQ9TWF0aC5zcXJ0KHFlKSxKdD0oYmUqYmUtWipaK2QqcWUpLygyKloqYSpkdCksdm49KGJlKmJlLVoqWi1kKnFlKS8oMipiZSphKmR0''@;'; put 'put ''KSxDbj1NYXRoLmxvZyhNYXRoLnNxcnQoSnQqSnQrMSktSnQpLHRuPU1hdGgubG9nKE1hdGguc3FydCh2bip2bisxKS12bik7cHQ9KHRuLUNuKS9sLHJ0PWZ1bmN0aW9uKE1uKXt2YXIgQ3I9TW4qcHQsR3I9WThlKENuKSxtcj1aLyhhKmR0KSooR3IqZnVuY3Rpb24gJE10KGMpe3JldHVybigo''@;'; put 'put ''Yz1NYXRoLmV4cCgyKmMpKS0xKS8oYysxKX0obCpDcitDbiktZnVuY3Rpb24gR010KGMpe3JldHVybigoYz1NYXRoLmV4cChjKSktMS9jKS8yfShDbikpO3JldHVybltNK21yKkVlLEQrbXIqQmUsWipHci9ZOGUobCpDcitDbildfX1yZXR1cm4gcnQuZHVyYXRpb249MWUzKnB0KmwvTWF0aC5T''@;'; put 'put ''UVJUMixydH1yZXR1cm4gaC5yaG89ZnVuY3Rpb24oZil7dmFyIHY9TWF0aC5tYXgoLjAwMSwrZiksTT12KnY7cmV0dXJuIGModixNLE0qTSl9LGh9KE1hdGguU1FSVDIsMiw0KTtmdW5jdGlvbiB0dihjLGwpe2lmKGM9ZnVuY3Rpb24gcU10KGMpe2xldCBsO2Zvcig7bD1jLnNvdXJjZUV2ZW50''@;'; put 'put ''OyljPWw7cmV0dXJuIGN9KGMpLHZvaWQgMD09PWwmJihsPWMuY3VycmVudFRhcmdldCksbCl7dmFyIGE9bC5vd25lclNWR0VsZW1lbnR8fGw7aWYoYS5jcmVhdGVTVkdQb2ludCl7dmFyIGQ9YS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBkLng9Yy5jbGllbnRYLGQueT1jLmNsaWVudFksWyhk''@;'; put 'put ''PWQubWF0cml4VHJhbnNmb3JtKGwuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxkLnldfWlmKGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgaD1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltjLmNsaWVudFgtaC5sZWZ0LWwuY2xpZW50TGVmdCxjLmNsaWVudFktaC50''@;'; put 'put ''b3AtbC5jbGllbnRUb3BdfX1yZXR1cm5bYy5wYWdlWCxjLnBhZ2VZXX1jb25zdCBETj1jPT4oKT0+YztmdW5jdGlvbiBYTXQoYyx7c291cmNlRXZlbnQ6bCx0YXJnZXQ6YSx0cmFuc2Zvcm06ZCxkaXNwYXRjaDpofSl7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dHlwZTp7dmFsdWU6''@;'; put 'put ''YyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc291cmNlRXZlbnQ6e3ZhbHVlOmwsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRhcmdldDp7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdHJhbnNmb3JtOnt2YWx1ZTpkLGVudW1lcmFibGU6ITAs''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwfSxfOnt2YWx1ZTpofX0pfWZ1bmN0aW9uIEpnKGMsbCxhKXt0aGlzLms9Yyx0aGlzLng9bCx0aGlzLnk9YX1KZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkpnLHNjYWxlOmZ1bmN0aW9uKGMpe3JldHVybiAxPT09Yz90aGlzOm5ldyBKZyh0aGlzLmsqYyx0aGlzLngs''@;'; put 'put ''dGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIDA9PT1jJjA9PT1sP3RoaXM6bmV3IEpnKHRoaXMuayx0aGlzLngrdGhpcy5rKmMsdGhpcy55K3RoaXMuaypsKX0sYXBwbHk6ZnVuY3Rpb24oYyl7cmV0dXJuW2NbMF0qdGhpcy5rK3RoaXMueCxjWzFdKnRoaXMuayt0aGlz''@;'; put 'put ''LnldfSxhcHBseVg6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGMpe3JldHVybiBjKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihjKXtyZXR1cm5bKGNbMF0tdGhpcy54KS90aGlzLmssKGNbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZl''@;'; put 'put ''cnRYOmZ1bmN0aW9uKGMpe3JldHVybihjLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGMpe3JldHVybihjLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihjKXtyZXR1cm4gYy5jb3B5KCkuZG9tYWluKGMucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1h''@;'; put 'put ''cChjLmludmVydCxjKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlz''@;'; put 'put ''LnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIElOPW5ldyBKZygxLDAsMCk7ZnVuY3Rpb24gUk4oYyl7Zm9yKDshYy5fX3pvb207KWlmKCEoYz1jLnBhcmVudE5vZGUpKXJldHVybiBJTjtyZXR1cm4gYy5fX3pvb219ZnVuY3Rpb24gVHRlKGMpe2Muc3RvcEltbWVkaWF0ZVByb3BhZ2F0''@;'; put 'put ''aW9uKCl9ZnVuY3Rpb24gTEEoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gSk10KGMpe3JldHVybiEoYy5jdHJsS2V5JiYid2hlZWwiIT09Yy50eXBlfHxjLmJ1dHRvbil9ZnVuY3Rpb24gUU10KCl7dmFyIGM9dGhpcztyZXR1cm4g''@;'; put 'put ''YyBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KGM9Yy5vd25lclNWR0VsZW1lbnR8fGMpLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKGM9Yy52aWV3Qm94LmJhc2VWYWwpLngsYy55XSxbYy54K2Mud2lkdGgsYy55K2MuaGVpZ2h0XV06W1swLDBdLFtjLndpZHRoLmJhc2VWYWwudmFsdWUsYy5o''@;'; put 'put ''ZWlnaHQuYmFzZVZhbC52YWx1ZV1dOltbMCwwXSxbYy5jbGllbnRXaWR0aCxjLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIEc4ZSgpe3JldHVybiB0aGlzLl9fem9vbXx8SU59ZnVuY3Rpb24gZXh0KGMpe3JldHVybi1jLmRlbHRhWSooMT09PWMuZGVsdGFNb2RlPy4wNTpjLmRlbHRhTW9kZT8x''@;'; put 'put ''Oi4wMDIpKihjLmN0cmxLZXk/MTA6MSl9ZnVuY3Rpb24gdHh0KCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIG54dChjLGwsYSl7dmFyIGQ9Yy5pbnZlcnRYKGxbMF1bMF0pLWFbMF1bMF0saD1jLmludmVydFgobFsxXVsw''@;'; put 'put ''XSktYVsxXVswXSxmPWMuaW52ZXJ0WShsWzBdWzFdKS1hWzBdWzFdLHY9Yy5pbnZlcnRZKGxbMV1bMV0pLWFbMV1bMV07cmV0dXJuIGMudHJhbnNsYXRlKGg+ZD8oZCtoKS8yOk1hdGgubWluKDAsZCl8fE1hdGgubWF4KDAsaCksdj5mPyhmK3YpLzI6TWF0aC5taW4oMCxmKXx8TWF0aC5tYXgo''@;'; put 'put ''MCx2KSl9ZnVuY3Rpb24gJDhlKGMpe3ZhciBsPXt9LGE9Yy5ub2RlKCkubm9kZU5hbWU7bC50YWc9YSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsLmF0dHJpYnV0ZXM9e307dmFyIGQ9Yy5ub2RlKCkuYXR0cmlidXRlcztp''@;'; put 'put ''ZihkKWZvcih2YXIgaD0wO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZj1kW2hdO2wuYXR0cmlidXRlc1tmLm5hbWVdPWYudmFsdWV9dmFyIHJlLEQ9Yy5ub2RlKCkudHJhbnNmb3JtO2lmKEQmJjAhPUQuYmFzZVZhbC5udW1iZXJPZkl0ZW1zKXt2YXIgWj1ELmJhc2VWYWwuY29uc29saWRhdGUoKS5t''@;'; put 'put ''YXRyaXg7bC50cmFuc2xhdGlvbj17eDpaLmUseTpaLmZ9LGwuc2NhbGU9Wi5hfWlmKCJlbGxpcHNlIj09YSYmKGwuY2VudGVyPXt4OmwuYXR0cmlidXRlcy5jeCx5OmwuYXR0cmlidXRlcy5jeX0pLCJwb2x5Z29uIj09YSl7dmFyIGNlPShyZT1jLmF0dHIoInBvaW50cyIpLnNwbGl0KCIgIikp''@;'; put 'put ''Lm1hcChmdW5jdGlvbihKdCl7cmV0dXJuIEp0LnNwbGl0KCIsIilbMF19KSxiZT1yZS5tYXAoZnVuY3Rpb24oSnQpe3JldHVybiBKdC5zcGxpdCgiLCIpWzFdfSksRWU9TWF0aC5taW4uYXBwbHkobnVsbCxjZSksQmU9TWF0aC5tYXguYXBwbHkobnVsbCxjZSkscWU9TWF0aC5taW4uYXBwbHko''@;'; put 'put ''bnVsbCxiZSkscnQ9TWF0aC5tYXguYXBwbHkobnVsbCxiZSk7bC5iYm94PXt4OkVlLHk6cWUsd2lkdGg6QmUtRWUsaGVpZ2h0OnJ0LXFlfSxsLmNlbnRlcj17eDooRWUrQmUpLzIseToocWUrcnQpLzJ9fSJwYXRoIj09YSYmKChyZT1jLmF0dHIoImQiKS5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0''@;'; put 'put ''KCksY2U9cmUubWFwKGZ1bmN0aW9uKEduKXtyZXR1cm4rR24uc3BsaXQoIiwiKVswXX0pLGJlPXJlLm1hcChmdW5jdGlvbihHbil7cmV0dXJuK0duLnNwbGl0KCIsIilbMV19KSxFZT1NYXRoLm1pbi5hcHBseShudWxsLGNlKSxCZT1NYXRoLm1heC5hcHBseShudWxsLGNlKSxxZT1NYXRoLm1p''@;'; put 'put ''bi5hcHBseShudWxsLGJlKSxydD1NYXRoLm1heC5hcHBseShudWxsLGJlKSxsLmJib3g9e3g6RWUseTpxZSx3aWR0aDpCZS1FZSxoZWlnaHQ6cnQtcWV9LGwuY2VudGVyPXt4OihFZStCZSkvMix5OihxZStydCkvMn0sbC50b3RhbExlbmd0aD1jLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpKTty''@;'; put 'put ''ZXR1cm4idGV4dCI9PWEmJihsLmNlbnRlcj17eDpjLmF0dHIoIngiKSx5OmMuYXR0cigieSIpfSksIiN0ZXh0Ij09YT9sLnRleHQ9Yy50ZXh0KCk6IiNjb21tZW50Ij09YSYmKGwuY29tbWVudD1jLnRleHQoKSksbH1mdW5jdGlvbiBudihjKXt2YXIgbD0kOGUoYyk7cmV0dXJuIGwuY2hpbGRy''@;'; put 'put ''ZW49W10sY3RlKGMubm9kZSgpLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1udih3cyh0aGlzKSk7ZC5wYXJlbnQ9bCxsLmNoaWxkcmVuLnB1c2goZCl9KSxsfWZ1bmN0aW9uIEF0ZShjKXtyZXR1cm4iI3RleHQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik6''@;'; put 'put ''IiNjb21tZW50Ij09Yy50YWc/ZG9jdW1lbnQuY3JlYXRlQ29tbWVudChjLmNvbW1lbnQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGMudGFnKX1mdW5jdGlvbiBrdGUoYyl7dmFyIGw9QXRlKGMpLGE9d3MobCksZD1jLmF0dHJpYnV0ZXM7''@;'; put 'put ''Zm9yKHZhciBoIG9mIE9iamVjdC5rZXlzKGQpKWEuYXR0cihoLGRbaF0pO3JldHVybiBsfWZ1bmN0aW9uIEs4ZShjLGwpe3ZhciBhPXdzKGMubm9kZSgpLnBhcmVudE5vZGUpLGQ9a3RlKGwpLGg9YS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gZH0sZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2Rl''@;'; put 'put ''KCl9KTtyZXR1cm4gYy5yZW1vdmUoKSxofWZ1bmN0aW9uIER0ZShjLGwpeyFmdW5jdGlvbiBpeHQoYyxsKXtjLmRhdHVtKGwpLGMuZGF0YShbbF0sZnVuY3Rpb24oYSl7cmV0dXJuIGEua2V5fSl9KGMsbCksY3RlKGMubm9kZSgpLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24oZCxoKXtEdGUo''@;'; put 'put ''d3ModGhpcyksbC5jaGlsZHJlbltoXSl9KX1mdW5jdGlvbiBPQShjLGw9MCl7dmFyIGE9d3ModGhpcyksaD1jLmF0dHJpYnV0ZXMsZj1hLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGYpZm9yKHZhciB2PTA7djxmLmxlbmd0aDt2Kyspe3ZhciBNPWZbdl0sRD1NLm5hbWU7aWYoInhtbG5zIiE9RC5z''@;'; put 'put ''cGxpdCgiOiIpWzBdJiZNLm5hbWVzcGFjZVVSSSl7dmFyIFo9TS5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtEPVpbWi5sZW5ndGgtMV0rIjoiK0R9RCBpbiBofHwoaFtEXT1udWxsKX1mb3IodmFyIGNlIG9mIE9iamVjdC5rZXlzKGgpKWEuYXR0cihjZSxoW2NlXSk7Yy50ZXh0JiZhLnRleHQo''@;'; put 'put ''Yy50ZXh0KSxmdW5jdGlvbiBheHQoYyxsKXt2YXIgYT1jLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKS5jaGlsZE5vZGVzfSksZD0oYT1hLmRhdGEoZnVuY3Rpb24odil7cmV0dXJuIHYuY2hpbGRyZW59LGZ1bmN0aW9uKHYpe3JldHVybiB2LnRhZysiLSIrbH0pKS5lbnRl''@;'; put 'put ''cigpLmFwcGVuZChmdW5jdGlvbih2KXtyZXR1cm4gQXRlKHYpfSksaD1hLmV4aXQoKTtoPWgucmVtb3ZlKCksYT1kLm1lcmdlKGEpO3ZhciBmPXt9O2EuZWFjaChmdW5jdGlvbih2KXt2YXIgTT12LnRhZztudWxsPT1mW01dJiYoZltNXT0wKTt2YXIgRD1mW01dKys7T0EuY2FsbCh0aGlzLHYs''@;'; put 'put ''RCl9KX0oYSxsKX1mdW5jdGlvbiBxOGUoYyxsKXt2YXIgdixhPWw/bC5sZW5ndGg6MCxkPWM/TWF0aC5taW4oYSxjLmxlbmd0aCk6MCxoPW5ldyBBcnJheShkKSxmPW5ldyBBcnJheShhKTtmb3Iodj0wO3Y8ZDsrK3YpaFt2XT1MTihjW3ZdLGxbdl0pO2Zvcig7djxhOysrdilmW3ZdPWxbdl07''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKE0pe2Zvcih2PTA7djxkOysrdilmW3ZdPWhbdl0oTSk7cmV0dXJuIGZ9fWZ1bmN0aW9uIG94dChjLGwpe3ZhciBhPW5ldyBEYXRlO3JldHVybiBjPStjLGw9K2wsZnVuY3Rpb24oZCl7cmV0dXJuIGEuc2V0VGltZShjKigxLWQpK2wqZCksYX19ZnVuY3Rpb24gc3h0''@;'; put 'put ''KGMsbCl7dmFyIGgsYT17fSxkPXt9O2ZvcihoIGluKG51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMpJiYoYz17fSksKG51bGw9PT1sfHwib2JqZWN0IiE9dHlwZW9mIGwpJiYobD17fSksbCloIGluIGM/YVtoXT1MTihjW2hdLGxbaF0pOmRbaF09bFtoXTtyZXR1cm4gZnVuY3Rpb24oZil7''@;'; put 'put ''Zm9yKGggaW4gYSlkW2hdPWFbaF0oZik7cmV0dXJuIGR9fWZ1bmN0aW9uIGx4dChjLGwpe2x8fChsPVtdKTt2YXIgaCxhPWM/TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpOjAsZD1sLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKGYpe2ZvcihoPTA7aDxhOysraClkW2hdPWNbaF0qKDEtZikr''@;'; put 'put ''bFtoXSpmO3JldHVybiBkfX1mdW5jdGlvbiBMTihjLGwpe3ZhciBkLGE9dHlwZW9mIGw7cmV0dXJuIG51bGw9PWx8fCJib29sZWFuIj09PWE/d3RlKGwpOigibnVtYmVyIj09PWE/bDQ6InN0cmluZyI9PT1hPyhkPUo5KGwpKT8obD1kLGtOKTp6OGU6bCBpbnN0YW5jZW9mIEo5P2tOOmwgaW5z''@;'; put 'put ''dGFuY2VvZiBEYXRlP294dDpmdW5jdGlvbiBjeHQoYyl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhjKSYmIShjIGluc3RhbmNlb2YgRGF0YVZpZXcpfShsKT9seHQ6QXJyYXkuaXNBcnJheShsKT9xOGU6ImZ1bmN0aW9uIiE9dHlwZW9mIGwudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9m''@;'; put 'put ''IGwudG9TdHJpbmd8fGlzTmFOKGwpP3N4dDpsNCkoYyxsKX1mdW5jdGlvbiBYOGUoKXt2YXIgYz10aGlzLGQ9d3ModGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJzdmciKSk7aWYoMD09ZC5zaXplKCkpcmV0dXJuIHRoaXM7dGhpcy5fem9vbVNlbGVjdGlvbj1kO3ZhciBo''@;'; put 'put ''PWZ1bmN0aW9uIHJ4dCgpe3ZhciByZSxjZSxiZSxjPUpNdCxsPVFNdCxhPW54dCxkPWV4dCxoPXR4dCxmPVswLDEvMF0sdj1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxNPTI1MCxEPUtNdCxaPXV0ZSgic3RhcnQiLCJ6b29tIiwiZW5kIiksRWU9NTAwLEJlPTE1MCxxZT0wLHJ0PTEwO2Z1bmN0''@;'; put 'put ''aW9uIHB0KE9uKXtPbi5wcm9wZXJ0eSgiX196b29tIixHOGUpLm9uKCJ3aGVlbC56b29tIixDcix7cGFzc2l2ZTohMX0pLm9uKCJtb3VzZWRvd24uem9vbSIsR3IpLm9uKCJkYmxjbGljay56b29tIixtcikuZmlsdGVyKGgpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEduKS5vbigidG91Y2htb3Zl''@;'; put 'put ''Lnpvb20iLGFpKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixfaSkuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBkdChPbix6cil7cmV0dXJuKHpyPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSx6cikp''@;'; put 'put ''KT09PU9uLms/T246bmV3IEpnKHpyLE9uLngsT24ueSl9ZnVuY3Rpb24gSnQoT24senIsSm4pe3ZhciBJcj16clswXS1KblswXSpPbi5rLCRyPXpyWzFdLUpuWzFdKk9uLms7cmV0dXJuIElyPT09T24ueCYmJHI9PT1Pbi55P09uOm5ldyBKZyhPbi5rLElyLCRyKX1mdW5jdGlvbiB2bihPbil7''@;'; put 'put ''cmV0dXJuWygrT25bMF1bMF0rICtPblsxXVswXSkvMiwoK09uWzBdWzFdKyArT25bMV1bMV0pLzJdfWZ1bmN0aW9uIENuKE9uLHpyLEpuLElyKXtPbi5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXt0bih0aGlzLGFyZ3VtZW50cykuZXZlbnQoSXIpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0''@;'; put 'put ''Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7dG4odGhpcyxhcmd1bWVudHMpLmV2ZW50KElyKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciAkcj10aGlzLHdpPWFyZ3VtZW50cyxlYT10bigkcix3aSkuZXZlbnQoSXIpLGZhPWwuYXBwbHkoJHIsd2kpLHZ0PW51bGw9PUpu''@;'; put 'put ''P3ZuKGZhKToiZnVuY3Rpb24iPT10eXBlb2YgSm4/Sm4uYXBwbHkoJHIsd2kpOkpuLE50PU1hdGgubWF4KGZhWzFdWzBdLWZhWzBdWzBdLGZhWzFdWzFdLWZhWzBdWzFdKSxIdD0kci5fX3pvb20sSG49ImZ1bmN0aW9uIj09dHlwZW9mIHpyP3pyLmFwcGx5KCRyLHdpKTp6cix0cj1EKEh0Lmlu''@;'; put 'put ''dmVydCh2dCkuY29uY2F0KE50L0h0LmspLEhuLmludmVydCh2dCkuY29uY2F0KE50L0huLmspKTtyZXR1cm4gZnVuY3Rpb24oYXIpe2lmKDE9PT1hcilhcj1IbjtlbHNle3ZhciBIcj10cihhcikscXI9TnQvSHJbMl07YXI9bmV3IEpnKHFyLHZ0WzBdLUhyWzBdKnFyLHZ0WzFdLUhyWzFdKnFy''@;'; put 'put ''KX1lYS56b29tKG51bGwsYXIpfX0pfWZ1bmN0aW9uIHRuKE9uLHpyLEpuKXtyZXR1cm4hSm4mJk9uLl9fem9vbWluZ3x8bmV3IE1uKE9uLHpyKX1mdW5jdGlvbiBNbihPbix6cil7dGhpcy50aGF0PU9uLHRoaXMuYXJncz16cix0aGlzLmFjdGl2ZT0wLHRoaXMuc291cmNlRXZlbnQ9bnVsbCx0''@;'; put 'put ''aGlzLmV4dGVudD1sLmFwcGx5KE9uLHpyKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiBDcihPbiwuLi56cil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBKbj10bih0aGlzLHpyKS5ldmVudChPbiksSXI9dGhpcy5fX3pvb20sJHI9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLEly''@;'; put 'put ''LmsqTWF0aC5wb3coMixkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSx3aT10dihPbik7aWYoSm4ud2hlZWwpKEpuLm1vdXNlWzBdWzBdIT09d2lbMF18fEpuLm1vdXNlWzBdWzFdIT09d2lbMV0pJiYoSm4ubW91c2VbMV09SXIuaW52ZXJ0KEpuLm1vdXNlWzBdPXdpKSksY2xlYXJUaW1lb3V0''@;'; put 'put ''KEpuLndoZWVsKTtlbHNle2lmKElyLms9PT0kcilyZXR1cm47Sm4ubW91c2U9W3dpLElyLmludmVydCh3aSldLENOKHRoaXMpLEpuLnN0YXJ0KCl9TEEoT24pLEpuLndoZWVsPXNldFRpbWVvdXQoZnVuY3Rpb24gZWEoKXtKbi53aGVlbD1udWxsLEpuLmVuZCgpfSxCZSksSm4uem9vbSgibW91''@;'; put 'put ''c2UiLGEoSnQoZHQoSXIsJHIpLEpuLm1vdXNlWzBdLEpuLm1vdXNlWzFdKSxKbi5leHRlbnQsdikpfX1mdW5jdGlvbiBHcihPbiwuLi56cil7aWYoIWJlJiZjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIEpuPU9uLmN1cnJlbnRUYXJnZXQsSXI9dG4odGhpcyx6ciwhMCkuZXZlbnQoT24p''@;'; put 'put ''LCRyPXdzKE9uLnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsZnVuY3Rpb24gdnQoSHQpe2lmKExBKEh0KSwhSXIubW92ZWQpe3ZhciBIbj1IdC5jbGllbnRYLWVhLHRyPUh0LmNsaWVudFktZmE7SXIubW92ZWQ9SG4qSG4rdHIqdHI+cWV9SXIuZXZlbnQoSHQpLnpvb20oIm1vdXNlIixhKEp0''@;'; put 'put ''KElyLnRoYXQuX196b29tLElyLm1vdXNlWzBdPXR2KEh0LEpuKSxJci5tb3VzZVsxXSksSXIuZXh0ZW50LHYpKX0sITApLm9uKCJtb3VzZXVwLnpvb20iLGZ1bmN0aW9uIE50KEh0KXskci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxmdW5jdGlvbiBXTXQoYyxsKXt2''@;'; put 'put ''YXIgYT1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxkPXdzKGMpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7bCYmKGQub24oImNsaWNrLmRyYWciLEV0ZSx4dGUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0Imlu''@;'; put 'put ''IGE/ZC5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGEuc3R5bGUuTW96VXNlclNlbGVjdD1hLl9fbm9zZWxlY3QsZGVsZXRlIGEuX19ub3NlbGVjdCl9KEh0LnZpZXcsSXIubW92ZWQpLExBKEh0KSxJci5ldmVudChIdCkuZW5kKCl9LCEwKSx3aT10dihPbixKbiksZWE9T24uY2xpZW50''@;'; put 'put ''WCxmYT1Pbi5jbGllbnRZOyhmdW5jdGlvbiBaTXQoYyl7dmFyIGw9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT13cyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLEV0ZSx4dGUpOyJvbnNlbGVjdHN0YXJ0ImluIGw/YS5vbigic2VsZWN0c3RhcnQuZHJhZyIsRXRlLHh0ZSk6KGwuX19ub3Nl''@;'; put 'put ''bGVjdD1sLnN0eWxlLk1velVzZXJTZWxlY3QsbC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9KShPbi52aWV3KSxUdGUoT24pLElyLm1vdXNlPVt3aSx0aGlzLl9fem9vbS5pbnZlcnQod2kpXSxDTih0aGlzKSxJci5zdGFydCgpfX1mdW5jdGlvbiBtcihPbiwuLi56cil7aWYoYy5hcHBs''@;'; put 'put ''eSh0aGlzLGFyZ3VtZW50cykpe3ZhciBKbj10aGlzLl9fem9vbSxJcj10dihPbi5jaGFuZ2VkVG91Y2hlcz9Pbi5jaGFuZ2VkVG91Y2hlc1swXTpPbix0aGlzKSwkcj1Kbi5pbnZlcnQoSXIpLGVhPWEoSnQoZHQoSm4sSm4uayooT24uc2hpZnRLZXk/LjU6MikpLElyLCRyKSxsLmFwcGx5KHRo''@;'; put 'put ''aXMsenIpLHYpO0xBKE9uKSxNPjA/d3ModGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0pLmNhbGwoQ24sZWEsSXIsT24pOndzKHRoaXMpLmNhbGwocHQudHJhbnNmb3JtLGVhLElyLE9uKX19ZnVuY3Rpb24gR24oT24sLi4uenIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIg''@;'; put 'put ''d2ksZWEsZmEsdnQsSm49T24udG91Y2hlcyxJcj1Kbi5sZW5ndGgsJHI9dG4odGhpcyx6cixPbi5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1JcikuZXZlbnQoT24pO2ZvcihUdGUoT24pLGVhPTA7ZWE8SXI7KytlYSl2dD1bdnQ9dHYoZmE9Sm5bZWFdLHRoaXMpLHRoaXMuX196b29tLmludmVy''@;'; put 'put ''dCh2dCksZmEuaWRlbnRpZmllcl0sJHIudG91Y2gwPyEkci50b3VjaDEmJiRyLnRvdWNoMFsyXSE9PXZ0WzJdJiYoJHIudG91Y2gxPXZ0LCRyLnRhcHM9MCk6KCRyLnRvdWNoMD12dCx3aT0hMCwkci50YXBzPTErISFyZSk7cmUmJihyZT1jbGVhclRpbWVvdXQocmUpKSx3aSYmKCRyLnRhcHM8''@;'; put 'put ''MiYmKGNlPXZ0WzBdLHJlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZT1udWxsfSxFZSkpLENOKHRoaXMpLCRyLnN0YXJ0KCkpfX1mdW5jdGlvbiBhaShPbiwuLi56cil7aWYodGhpcy5fX3pvb21pbmcpe3ZhciB3aSxlYSxmYSx2dCxKbj10bih0aGlzLHpyKS5ldmVudChPbiksSXI9T24uY2hh''@;'; put 'put ''bmdlZFRvdWNoZXMsJHI9SXIubGVuZ3RoO2ZvcihMQShPbiksd2k9MDt3aTwkcjsrK3dpKWZhPXR2KGVhPUlyW3dpXSx0aGlzKSxKbi50b3VjaDAmJkpuLnRvdWNoMFsyXT09PWVhLmlkZW50aWZpZXI/Sm4udG91Y2gwWzBdPWZhOkpuLnRvdWNoMSYmSm4udG91Y2gxWzJdPT09ZWEuaWRlbnRp''@;'; put 'put ''ZmllciYmKEpuLnRvdWNoMVswXT1mYSk7aWYoZWE9Sm4udGhhdC5fX3pvb20sSm4udG91Y2gxKXt2YXIgTnQ9Sm4udG91Y2gwWzBdLEh0PUpuLnRvdWNoMFsxXSxIbj1Kbi50b3VjaDFbMF0sdHI9Sm4udG91Y2gxWzFdLGFyPShhcj1IblswXS1OdFswXSkqYXIrKGFyPUhuWzFdLU50WzFdKSph''@;'; put 'put ''cixIcj0oSHI9dHJbMF0tSHRbMF0pKkhyKyhIcj10clsxXS1IdFsxXSkqSHI7ZWE9ZHQoZWEsTWF0aC5zcXJ0KGFyL0hyKSksZmE9WyhOdFswXStIblswXSkvMiwoTnRbMV0rSG5bMV0pLzJdLHZ0PVsoSHRbMF0rdHJbMF0pLzIsKEh0WzFdK3RyWzFdKS8yXX1lbHNle2lmKCFKbi50b3VjaDAp''@;'; put 'put ''cmV0dXJuO2ZhPUpuLnRvdWNoMFswXSx2dD1Kbi50b3VjaDBbMV19Sm4uem9vbSgidG91Y2giLGEoSnQoZWEsZmEsdnQpLEpuLmV4dGVudCx2KSl9fWZ1bmN0aW9uIF9pKE9uLC4uLnpyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHdpLGVhLEpuPXRuKHRoaXMsenIpLmV2ZW50KE9uKSxJcj1P''@;'; put 'put ''bi5jaGFuZ2VkVG91Y2hlcywkcj1Jci5sZW5ndGg7Zm9yKFR0ZShPbiksYmUmJmNsZWFyVGltZW91dChiZSksYmU9c2V0VGltZW91dChmdW5jdGlvbigpe2JlPW51bGx9LEVlKSx3aT0wO3dpPCRyOysrd2kpZWE9SXJbd2ldLEpuLnRvdWNoMCYmSm4udG91Y2gwWzJdPT09ZWEuaWRlbnRpZmll''@;'; put 'put ''cj9kZWxldGUgSm4udG91Y2gwOkpuLnRvdWNoMSYmSm4udG91Y2gxWzJdPT09ZWEuaWRlbnRpZmllciYmZGVsZXRlIEpuLnRvdWNoMTtpZihKbi50b3VjaDEmJiFKbi50b3VjaDAmJihKbi50b3VjaDA9Sm4udG91Y2gxLGRlbGV0ZSBKbi50b3VjaDEpLEpuLnRvdWNoMClKbi50b3VjaDBbMV09''@;'; put 'put ''dGhpcy5fX3pvb20uaW52ZXJ0KEpuLnRvdWNoMFswXSk7ZWxzZSBpZihKbi5lbmQoKSwyPT09Sm4udGFwcyYmKGVhPXR2KGVhLHRoaXMpLE1hdGguaHlwb3QoY2VbMF0tZWFbMF0sY2VbMV0tZWFbMV0pPHJ0KSl7dmFyIGZhPXdzKHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7ZmEmJmZhLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBwdC50cmFuc2Zvcm09ZnVuY3Rpb24oT24senIsSm4sSXIpe3ZhciAkcj1Pbi5zZWxlY3Rpb24/T24uc2VsZWN0aW9uKCk6T247JHIucHJvcGVydHkoIl9fem9vbSIsRzhlKSxPbiE9PSRyP0NuKE9uLHpyLEpuLElyKTokci5pbnRlcnJ1cHQo''@;'; put 'put ''KS5lYWNoKGZ1bmN0aW9uKCl7dG4odGhpcyxhcmd1bWVudHMpLmV2ZW50KElyKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgenI/enIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnpyKS5lbmQoKX0pfSxwdC5zY2FsZUJ5PWZ1bmN0aW9uKE9uLHpyLEpuLElyKXtwdC5zY2Fs''@;'; put 'put ''ZVRvKE9uLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6enIpfSxKbixJcil9LHB0LnNjYWxlVG89ZnVuY3Rpb24oT24senIsSm4sSXIpe3B0LnRyYW5zZm9ybShPbixmdW5jdGlvbigpe3ZhciAk''@;'; put 'put ''cj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3aT10aGlzLl9fem9vbSxlYT1udWxsPT1Kbj92bigkcik6ImZ1bmN0aW9uIj09dHlwZW9mIEpuP0puLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpKbixmYT13aS5pbnZlcnQoZWEpLHZ0PSJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyk6enI7cmV0dXJuIGEoSnQoZHQod2ksdnQpLGVhLGZhKSwkcix2KX0sSm4sSXIpfSxwdC50cmFuc2xhdGVCeT1mdW5jdGlvbihPbix6cixKbixJcil7cHQudHJhbnNmb3JtKE9uLGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiB6cj96ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6enIsImZ1bmN0aW9uIj09dHlwZW9mIEpuP0puLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpKbiksbC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdil9LG51bGwsSXIpfSxwdC50cmFuc2xhdGVUbz1mdW5jdGlvbihPbix6cixKbixJciwk''@;'; put 'put ''cil7cHQudHJhbnNmb3JtKE9uLGZ1bmN0aW9uKCl7dmFyIHdpPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLGVhPXRoaXMuX196b29tLGZhPW51bGw9PUlyP3ZuKHdpKToiZnVuY3Rpb24iPT10eXBlb2YgSXI/SXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOklyO3JldHVybiBhKElOLnRyYW5zbGF0''@;'; put 'put ''ZShmYVswXSxmYVsxXSkuc2NhbGUoZWEuaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiB6cj8tenIuYXBwbHkodGhpcyxhcmd1bWVudHMpOi16ciwiZnVuY3Rpb24iPT10eXBlb2YgSm4/LUpuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotSm4pLHdpLHYpfSxJciwkcil9LE1uLnByb3Rv''@;'; put 'put ''dHlwZT17ZXZlbnQ6ZnVuY3Rpb24oT24pe3JldHVybiBPbiYmKHRoaXMuc291cmNlRXZlbnQ9T24pLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnRoYXQuX196b29taW5nPXRoaXMsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1''@;'; put 'put ''bmN0aW9uKE9uLHpyKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PU9uJiYodGhpcy5tb3VzZVsxXT16ci5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09T24mJih0aGlzLnRvdWNoMFsxXT16ci5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRv''@;'; put 'put ''dWNoMSYmInRvdWNoIiE9PU9uJiYodGhpcy50b3VjaDFbMV09enIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT16cix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnRoYXQu''@;'; put 'put ''X196b29taW5nLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oT24pe3ZhciB6cj13cyh0aGlzLnRoYXQpLmRhdHVtKCk7Wi5jYWxsKE9uLHRoaXMudGhhdCxuZXcgWE10KE9uLHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50LHRhcmdldDpwdCx0eXBlOk9uLHRyYW5z''@;'; put 'put ''Zm9ybTp0aGlzLnRoYXQuX196b29tLGRpc3BhdGNoOlp9KSx6cil9fSxwdC53aGVlbERlbHRhPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246RE4oK09uKSxwdCk6ZH0scHQuZmlsdGVyPWZ1bmN0aW9uKE9uKXtyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246RE4oISFPbikscHQpOmN9LHB0LnRvdWNoYWJsZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uOkROKCEhT24pLHB0KTpofSxwdC5leHRlbnQ9''@;'; put 'put ''ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBPbj9PbjpETihbWytPblswXVswXSwrT25bMF1bMV1dLFsrT25bMV1bMF0sK09uWzFdWzFdXV0pLHB0KTpsfSxwdC5zY2FsZUV4dGVudD1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg/KGZbMF09K09uWzBdLGZbMV09K09uWzFdLHB0KTpbZlswXSxmWzFdXX0scHQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odlswXVswXT0rT25bMF1bMF0sdlsxXVswXT0rT25bMV1bMF0sdlswXVsxXT0rT25bMF1bMV0sdlsx''@;'; put 'put ''XVsxXT0rT25bMV1bMV0scHQpOltbdlswXVswXSx2WzBdWzFdXSxbdlsxXVswXSx2WzFdWzFdXV19LHB0LmNvbnN0cmFpbj1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9T24scHQpOmF9LHB0LmR1cmF0aW9uPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD8oTT0rT24scHQpOk19LHB0LmludGVycG9sYXRlPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRD1PbixwdCk6RH0scHQub249ZnVuY3Rpb24oKXt2YXIgT249Wi5vbi5hcHBseShaLGFyZ3VtZW50cyk7cmV0dXJuIE9uPT09Wj9wdDpPbn0scHQuY2xpY2tEaXN0''@;'; put 'put ''YW5jZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHFlPShPbj0rT24pKk9uLHB0KTpNYXRoLnNxcnQocWUpfSxwdC50YXBEaXN0YW5jZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHJ0PStPbixwdCk6cnR9LHB0fSgpLnNjYWxlRXh0ZW50KHRo''@;'; put 'put ''aXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50KS5pbnRlcnBvbGF0ZShMTikub24oInpvb20iLGZ1bmN0aW9uIGwodil7d3MoZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zv''@;'; put 'put ''cm0iLHYudHJhbnNmb3JtKSxjLl9kaXNwYXRjaC5jYWxsKCJ6b29tIixjKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1oO3ZhciBmPXdzKGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSk7cmV0dXJuIGQuY2FsbChoKSx0aGlzLl9hY3RpdmV8fFJ0ZS5jYWxsKHRoaXMsZiksdGhpcy5fb3JpZ2lu''@;'; put 'put ''YWxUcmFuc2Zvcm09Uk4oZC5ub2RlKCkpLHRoaXN9ZnVuY3Rpb24gSXRlKGMpe3ZhciBsPXRoaXMuX3RyYW5zbGF0aW9uLGE9dGhpcy5fc2NhbGUsZD1jLmRhdHVtKCkudHJhbnNsYXRpb24saD1jLmRhdHVtKCkuc2NhbGUsZj1STih0aGlzLl96b29tU2VsZWN0aW9uLm5vZGUoKSk7cmV0dXJu''@;'; put 'put ''IGwmJihmPShmPWYuc2NhbGUoMS9hKSkudHJhbnNsYXRlKC1sLngsLWwueSkpLChmPWYudHJhbnNsYXRlKGQueCxkLnkpKS5zY2FsZShoKX1mdW5jdGlvbiBSdGUoYyl7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9uLEl0ZS5jYWxsKHRoaXMsYykpLHRo''@;'; put 'put ''aXMuX3RyYW5zbGF0aW9uPWMuZGF0dW0oKS50cmFuc2xhdGlvbix0aGlzLl9zY2FsZT1jLmRhdHVtKCkuc2NhbGUsdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09SU4udHJhbnNsYXRlKGMuZGF0dW0oKS50cmFuc2xhdGlvbi54LGMuZGF0dW0oKS50cmFuc2xhdGlvbi55KS5zY2FsZShjLmRhdHVt''@;'; put 'put ''KCkuc2NhbGUpfWZ1bmN0aW9uIG14dChjLGwpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IGE9Yy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIExOKFtkWzBdWzBdLGRbMF1bMV1dLFtkWzFdWzBdLGRbMV1bMV1dKX0pO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gZDwxPyJNIithLm1hcChmdW5j''@;'; put 'put ''dGlvbihoKXtyZXR1cm4gaChkKX0pLmpvaW4oIkwiKTpsfX19ZnVuY3Rpb24gSjhlKGMpe3JldHVybiJlZGdlIj09Yy5hdHRyaWJ1dGVzLmNsYXNzfHwiYSI9PWMudGFnJiYiZyI9PWMucGFyZW50LnRhZyYmImVkZ2UiPT1jLnBhcmVudC5wYXJlbnQuYXR0cmlidXRlcy5jbGFzc31mdW5jdGlv''@;'; put 'put ''biBROGUoYyl7cmV0dXJuIGMucGFyZW50JiZKOGUoYy5wYXJlbnQpfWZ1bmN0aW9uIGU3ZShjKXt2YXIgbD10aGlzLl90cmFuc2l0aW9uLGE9dGhpcy5fb3B0aW9ucy5mYWRlJiZudWxsIT1sLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcyxm''@;'; put 'put ''PXRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucyx2PXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMmJm51bGwhPWwsTT10aGlzLl9hdHRyaWJ1dGVyLEQ9dGhpczt2YXIgY2U9dGhpcy5fc2VsZWN0aW9uO2lmKG51bGwhPWwpe3ZhciBiZT10aGlzLl9qb2JzO2lm''@;'; put 'put ''KEQuX2FjdGl2ZSlyZXR1cm4gYmUucHVzaChudWxsKSx0aGlzO2NlLnRyYW5zaXRpb24obCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLm9uKCJlbmQiLGZ1bmN0aW9uKCl7RC5fYWN0aXZlPSExLDAhPWJlLmxlbmd0aCYmKGJlLnNoaWZ0KCksRC5yZW5kZXIoKSl9KSx0aGlzLl9hY3RpdmU9''@;'; put 'put ''ITB9bnVsbCE9bCYmY2UudHJhbnNpdGlvbihsKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvblN0YXJ0IixEKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvbkVuZCIsRCl9KS50cmFuc2l0aW9uKCkuZHVy''@;'; put 'put ''YXRpb24oMCkub24oInN0YXJ0IixmdW5jdGlvbigpe0QuX2Rpc3BhdGNoLmNhbGwoInJlc3RvcmVFbmQiLEQpLEQuX2Rpc3BhdGNoLmNhbGwoImVuZCIsRCksYyYmYy5jYWxsKEQpfSk7dmFyIEVlPXRoaXMuX2RhdGEsQmU9Y2Uuc2VsZWN0QWxsKCJzdmciKS5kYXRhKFtFZV0sZnVuY3Rpb24o''@;'; put 'put ''cWUpe3JldHVybiBxZS5rZXl9KTtyZXR1cm4gQmU9QmUuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLm1lcmdlKEJlKSxmdW5jdGlvbiByZShxZSl7dmFyIHJ0PXdzKHRoaXMpO2lmKCJzdmciPT1xZS50YWcpe3ZhciBwdD1ELl9vcHRpb25zO2lmKG51bGwhPXB0LndpZHRofHxudWxsIT1wdC5oZWln''@;'; put 'put ''aHQpe3ZhciBkdD1wdC53aWR0aCxKdD1wdC5oZWlnaHQ7bnVsbD09ZHQ/ZHQ9NCpxZS5hdHRyaWJ1dGVzLndpZHRoLnJlcGxhY2UoInB0IiwiIikvMzoocnQuYXR0cigid2lkdGgiLGR0KSxxZS5hdHRyaWJ1dGVzLndpZHRoPWR0KSxudWxsPT1KdD9KdD00KnFlLmF0dHJpYnV0ZXMuaGVpZ2h0''@;'; put 'put ''LnJlcGxhY2UoInB0IiwiIikvMzoocnQuYXR0cigiaGVpZ2h0IixKdCkscWUuYXR0cmlidXRlcy5oZWlnaHQ9SnQpLHB0LmZpdHx8KHJ0LmF0dHIoInZpZXdCb3giLGAwIDAgJHszKmR0LzQvcHQuc2NhbGV9ICR7MypKdC80L3B0LnNjYWxlfWApLHFlLmF0dHJpYnV0ZXMudmlld0JveD1gMCAw''@;'; put 'put ''ICR7MypkdC80L3B0LnNjYWxlfSAkezMqSnQvNC9wdC5zY2FsZX1gKX0xIT1wdC5zY2FsZSYmKHB0LmZpdHx8bnVsbD09cHQud2lkdGgmJm51bGw9PXB0LmhlaWdodCkmJihkdD1xZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVsyXSxKdD1xZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3Bs''@;'; put 'put ''aXQoIiAiKVszXSxydC5hdHRyKCJ2aWV3Qm94IixgMCAwICR7ZHQvcHQuc2NhbGV9ICR7SnQvcHQuc2NhbGV9YCkscWUuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHtkdC9wdC5zY2FsZX0gJHtKdC9wdC5zY2FsZX1gKX1NJiZydC5lYWNoKE0pO3ZhciB2bj1xZS50YWcsQ249cWUuYXR0cmli''@;'; put 'put ''dXRlcyx0bj1ydC5ub2RlKCkuYXR0cmlidXRlcztpZih0bilmb3IodmFyIE1uPTA7TW48dG4ubGVuZ3RoO01uKyspe3ZhciBDcj10bltNbl0sR3I9Q3IubmFtZTtpZigieG1sbnMiIT1Hci5zcGxpdCgiOiIpWzBdJiZDci5uYW1lc3BhY2VVUkkpe3ZhciBtcj1Dci5uYW1lc3BhY2VVUkkuc3Bs''@;'; put 'put ''aXQoIi8iKTtHcj1tclttci5sZW5ndGgtMV0rIjoiK0dyfUdyIGluIENufHwoQ25bR3JdPW51bGwpfXZhciBhaT0hMSxfaT0hMTtpZihoJiZsKXtpZigoInBvbHlnb24iPT10aGlzLm5vZGVOYW1lfHwiZWxsaXBzZSI9PXRoaXMubm9kZU5hbWUpJiZxZS5hbHRlcm5hdGl2ZU9sZCYmKF9pPSEw''@;'; put 'put ''KSwoInBvbHlnb24iPT12bnx8ImVsbGlwc2UiPT12bikmJnFlLmFsdGVybmF0aXZlTmV3JiYoYWk9ITApLCJwb2x5Z29uIj09dGhpcy5ub2RlTmFtZSYmInBvbHlnb24iPT12biYmcWUuYWx0ZXJuYXRpdmVPbGQpe3ZhciBPbj0kOGUocnQpO2lmKCFmKXt2YXIgSm49T24uYXR0cmlidXRlcy5w''@;'; put 'put ''b2ludHMuc3BsaXQoIiAiKS5sZW5ndGg7KElyPXFlLmF0dHJpYnV0ZXMucG9pbnRzKS5zcGxpdCgiICIpLmxlbmd0aD09Sm4mJihhaT0hMSxfaT0hMSl9fWlmKF9pKXt2YXIgZWE9SzhlKHJ0LHFlLmFsdGVybmF0aXZlT2xkKTtlYS5kYXRhKFtxZV0sZnVuY3Rpb24oKXtyZXR1cm4gcWUua2V5''@;'; put 'put ''fSkscnQ9ZWF9YWkmJih2bj0icGF0aCIsQ249cWUuYWx0ZXJuYXRpdmVOZXcuYXR0cmlidXRlcyl9dmFyIHZ0PXJ0O2lmKGwmJih2dD12dC50cmFuc2l0aW9uKGwpLGEmJnZ0LmZpbHRlcihmdW5jdGlvbihabil7cmV0dXJuIiMiPT1abi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNp''@;'; put 'put ''dHkiLDEpLHZ0LmZpbHRlcihmdW5jdGlvbihabil7cmV0dXJuIiMiPT1abi50YWdbMF0/bnVsbDp0aGlzfSkub24oImVuZCIsZnVuY3Rpb24oWm4pe3dzKHRoaXMpLmF0dHIoInN0eWxlIixabiYmWm4uYXR0cmlidXRlcyYmWm4uYXR0cmlidXRlcy5zdHlsZXx8bnVsbCl9KSksdiYmInBhdGgi''@;'; put 'put ''PT12biYmcWUub2Zmc2V0KXt2YXIgSHQ9cWUudG90YWxMZW5ndGg7cnQuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsSHQrIiAiK0h0KS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsSHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3FlLm9mZnNldC54KyIsIitxZS5vZmZzZXQueSsi''@;'; put 'put ''KSIpLENuWyJzdHJva2UtZGFzaG9mZnNldCJdPTAsQ24udHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIsdnQuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLENuWyJzdHJva2UtZGFzaG9mZnNldCJdKS5hdHRyKCJ0cmFuc2Zvcm0iLENuLnRyYW5zZm9ybSkub24oInN0YXJ0IixmdW5jdGlvbigp''@;'; put 'put ''e3dzKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7d3ModGhpcykuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLG51bGwpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLG51bGwpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX1pZih2JiYicG9seWdvbiI9''@;'; put 'put ''PXZuJiZROGUocWUpJiZxZS5vZmZzZXQmJiJwYXRoIj09cWUucGFyZW50LmNoaWxkcmVuWzNdLnRhZyl7dmFyIHRyPXdzKHJ0Lm5vZGUoKS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoInBhdGgiKSksYXI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoMCksSHI9dHIubm9kZSgpLmdldFBv''@;'; put 'put ''aW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgpLHFyPXRyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHFlLnRvdGFsTGVuZ3RoLTEpLG9uPTE4MCpNYXRoLmF0YW4yKEhyLnktcXIueSxIci54LXFyLngpL01hdGguUEkseW49YXIueC1Ici54K3FlLm9mZnNldC54LHBuPWFyLnktSHIueStxZS5v''@;'; put 'put ''ZmZzZXQueTtydC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit5bisiLCIrcG4rIikiKSx2dC5hdHRyVHdlZW4oInRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oWm4pe3ZhciBzcj10ci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChxZS50b3RhbExlbmd0aCpabiks''@;'; put 'put ''TnI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgqWm4rMSksTXI9MTgwKk1hdGguYXRhbjIoTnIueS1zci55LE5yLngtc3IueCkvTWF0aC5QSS1vbjtyZXR1cm4idHJhbnNsYXRlKCIrKHluPXNyLngtSHIueCtxZS5vZmZzZXQueCooMS1abikpKyIsIisocG49c3Iu''@;'; put 'put ''eS1Ici55K3FlLm9mZnNldC55KigxLVpuKSkrIikgcm90YXRlKCIrTXIrIiAiK0hyLngrIiAiK0hyLnkrIikifX0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXt3cyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigpe3dzKHRoaXMpLmF0dHIoInRyYW5zZm9y''@;'; put 'put ''bSIsbnVsbCl9KX12YXIgcHI9ZCYmbCYmInBhdGgiPT12biYmbnVsbCE9cnQuYXR0cigiZCIpO2Zvcih2YXIgJG4gb2YgT2JqZWN0LmtleXMoQ24pKXt2YXIgZHI9Q25bJG5dO2lmKHByJiYiZCI9PSRuKXt2YXIgSXI7KElyPShxZS5hbHRlcm5hdGl2ZU9sZHx8cWUpLnBvaW50cykmJnZ0LmF0''@;'; put 'put ''dHJUd2VlbigiZCIsbXh0KElyLGRyKSl9ZWxzZXtpZigidHJhbnNmb3JtIj09JG4mJnFlLnRyYW5zbGF0aW9uKWlmKGwpe3ZhciBVcj12dC5vbigiZW5kIik7dnQub24oInN0YXJ0IixmdW5jdGlvbigpe0QuX3pvb21CZWhhdmlvciYmdnQudHdlZW4oImF0dHIudHJhbnNmb3JtIixmdW5jdGlv''@;'; put 'put ''bigpe3ZhciBabj10aGlzO3JldHVybiBmdW5jdGlvbihzcil7Wm4uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLFQ4ZShSTihELl96b29tU2VsZWN0aW9uLm5vZGUoKSkudG9TdHJpbmcoKSxJdGUuY2FsbChELHJ0KS50b1N0cmluZygpKShzcikpfX0pfSkub24oImVuZCIsZnVuY3Rpb24oKXtV''@;'; put 'put ''ci5jYWxsKHRoaXMpLEQuX3pvb21CZWhhdmlvciYmUnRlLmNhbGwoRCxydCl9KX1lbHNlIEQuX3pvb21CZWhhdmlvciYmKFJ0ZS5jYWxsKEQscnQpLGRyPUl0ZS5jYWxsKEQscnQpLnRvU3RyaW5nKCkpO3Z0LmF0dHIoJG4sZHIpfX1haSYmdnQub24oImVuZCIsZnVuY3Rpb24oWm4sc3IsTnIp''@;'; put 'put ''e0s4ZShlYT13cyh0aGlzKSxabikuZGF0YShbWm5dLGZ1bmN0aW9uKCl7cmV0dXJuIFpuLmtleX0pfSkscWUudGV4dCYmdnQudGV4dChxZS50ZXh0KSxmdW5jdGlvbiBaKHFlKXt2YXIgcnQ9cWUuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHFlLm5vZGUoKS5jaGlsZE5vZGVzfSkscHQ9''@;'; put 'put ''KHJ0PXJ0LmRhdGEoZnVuY3Rpb24odm4pe3JldHVybiB2bi5jaGlsZHJlbn0sZnVuY3Rpb24odm4pe3JldHVybiB2bi5rZXl9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24odm4pe3ZhciBDbj1BdGUodm4pO3JldHVybiIjdGV4dCI9PXZuLnRhZyYmYSYmKENuLm5vZGVWYWx1ZT12bi50ZXh0''@;'; put 'put ''KSxDbn0pOyhhfHx2JiZKOGUocWUuZGF0dW0oKSkpJiZwdC5maWx0ZXIoZnVuY3Rpb24odm4pe3JldHVybiIjIj09dm4udGFnWzBdP251bGw6dGhpc30pLmVhY2goZnVuY3Rpb24odm4pe3ZhciBDbj13cyh0aGlzKTtmb3IodmFyIHRuIG9mIE9iamVjdC5rZXlzKHZuLmF0dHJpYnV0ZXMpKUNu''@;'; put 'put ''LmF0dHIodG4sdm4uYXR0cmlidXRlc1t0bl0pfSkuZmlsdGVyKGZ1bmN0aW9uKHZuKXtyZXR1cm4ic3ZnIj09dm4udGFnfHwiZyI9PXZuLnRhZz9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCk7dmFyIEp0PXJ0LmV4aXQoKTtNJiZKdC5lYWNoKE0pLGwmJihKdD1KdC50cmFuc2l0aW9u''@;'; put 'put ''KGwpLGEmJkp0LmZpbHRlcihmdW5jdGlvbih2bil7cmV0dXJuIiMiPT12bi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDApKSxKdD1KdC5yZW1vdmUoKSwocnQ9cHQubWVyZ2UocnQpLm9yZGVyKCkpLmVhY2gocmUpfShydCl9LmNhbGwoQmUubm9kZSgpLEVlKSx0aGlzLl9v''@;'; put 'put ''cHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3ImJlg4ZS5jYWxsKHRoaXMpLEQuX2Rpc3BhdGNoLmNhbGwoInJlbmRlckVuZCIsRCksbnVsbD09bCYmKHRoaXMuX2Rpc3BhdGNoLmNhbGwoImVuZCIsdGhpcyksYyYmYy5jYWxsKHRoaXMpKSx0aGlzfVJOLnByb3RvdHlwZT1KZy5wcm90''@;'; put 'put ''b3R5cGU7dmFyIE5BLEZ0ZSxTeHQ9QXJyYXlCdWZmZXIsSXU9VWludDhBcnJheSxPTj1VaW50MTZBcnJheSxNeHQ9SW50MTZBcnJheSxQTj1JbnQzMkFycmF5LEx0ZT1mdW5jdGlvbihjLGwsYSl7aWYoSXUucHJvdG90eXBlLnNsaWNlKXJldHVybiBJdS5wcm90b3R5cGUuc2xpY2UuY2FsbChj''@;'; put 'put ''LGwsYSk7KG51bGw9PWx8fGw8MCkmJihsPTApLChudWxsPT1hfHxhPmMubGVuZ3RoKSYmKGE9Yy5sZW5ndGgpO3ZhciBkPW5ldyBJdShhLWwpO3JldHVybiBkLnNldChjLnN1YmFycmF5KGwsYSkpLGR9LFBBPWZ1bmN0aW9uKGMsbCxhLGQpe2lmKEl1LnByb3RvdHlwZS5maWxsKXJldHVybiBJ''@;'; put 'put ''dS5wcm90b3R5cGUuZmlsbC5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOysrYSljW2FdPWw7cmV0dXJuIGN9LHh4dD1mdW5jdGlvbihjLGwsYSxkKXtpZihJdS5wcm90b3R5cGUuY29weVdpdGhp''@;'; put 'put ''bilyZXR1cm4gSXUucHJvdG90eXBlLmNvcHlXaXRoaW4uY2FsbChjLGwsYSxkKTtmb3IoKG51bGw9PWF8fGE8MCkmJihhPTApLChudWxsPT1kfHxkPmMubGVuZ3RoKSYmKGQ9Yy5sZW5ndGgpO2E8ZDspY1tsKytdPWNbYSsrXX0sRXh0PVsiaW52YWxpZCB6c3RkIGRhdGEiLCJ3aW5kb3cgc2l6''@;'; put 'put ''ZSB0b28gbGFyZ2UgKD4yMDQ2TUIpIiwiaW52YWxpZCBibG9jayB0eXBlIiwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoIiwibWF0Y2ggZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwidW5leHBlY3RlZCBFT0YiXSxlMD1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9bmV3IEVycm9yKGx8fEV4dFtjXSk7aWYo''@;'; put 'put ''ZC5jb2RlPWMsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGQsZTApLCFhKXRocm93IGQ7cmV0dXJuIGR9LHQ3ZT1mdW5jdGlvbihjLGwsYSl7Zm9yKHZhciBkPTAsaD0wO2Q8YTsrK2QpaHw9Y1tsKytdPDwoZDw8Myk7cmV0dXJuIGh9LEF4dD1mdW5j''@;'; put 'put ''dGlvbihjLGwpe3ZhciBhPWNbMF18Y1sxXTw8OHxjWzJdPDwxNjtpZigzMTI2NTY4PT1hJiYyNTM9PWNbM10pe3ZhciBkPWNbNF0saD1kPj41JjEsZj1kPj4yJjEsdj0zJmQsTT1kPj42OzgmZCYmZTAoMCk7dmFyIEQ9Ni1oLFo9Mz09dj80OnYscmU9dDdlKGMsRCxaKSxjZT1NPzE8PE06aCxi''@;'; put 'put ''ZT10N2UoYyxEKz1aLGNlKSsoMT09TSYmMjU2KSxFZT1iZTtpZighaCl7dmFyIEJlPTE8PDEwKyhjWzVdPj4zKTtFZT1CZSsoQmU+PjMpKig3JmNbNV0pfUVlPjIxNDUzODY0OTYmJmUwKDEpO3ZhciBxZT1uZXcgSXUoKDE9PWw/YmV8fEVlOmw/MDpFZSkrMTIpO3JldHVybiBxZVswXT0xLHFl''@;'; put 'put ''WzRdPTQscWVbOF09OCx7YjpEK2NlLHk6MCxsOjAsZDpyZSx3OmwmJjEhPWw/bDpxZS5zdWJhcnJheSgxMiksZTpFZSxvOm5ldyBQTihxZS5idWZmZXIsMCwzKSx1OmJlLGM6ZixtOk1hdGgubWluKDEzMTA3MixFZSl9fWlmKDI1NDgxODkzPT0oYT4+NHxjWzNdPDwyMCkpcmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKGMsbCl7cmV0dXJuKGNbNF18Y1s1XTw8OHxjWzZdPDwxNnxjWzddPDwyNCk+Pj4wfShjKSs4O2UwKDApfSxydj1mdW5jdGlvbihjKXtmb3IodmFyIGw9MDsxPDxsPD1jOysrbCk7cmV0dXJuIGwtMX0sRkE9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPTQrKGw8PDMpLGg9NSsoMTUmY1tsXSk7''@;'; put 'put ''aD5hJiZlMCgzKTtmb3IodmFyIGY9MTw8aCx2PWYsTT0tMSxEPS0xLFo9LTEscmU9ZixjZT1uZXcgU3h0KDUxMisoZjw8MikpLGJlPW5ldyBNeHQoY2UsMCwyNTYpLEVlPW5ldyBPTihjZSwwLDI1NiksQmU9bmV3IE9OKGNlLDUxMixmKSxxZT01MTIrKGY8PDEpLHJ0PW5ldyBJdShjZSxxZSxm''@;'; put 'put ''KSxwdD1uZXcgSXUoY2UscWUrZik7TTwyNTUmJnY+MDspe3ZhciBkdD1ydih2KzEpLEp0PWQ+PjMsdm49KDE8PGR0KzEpLTEsQ249KGNbSnRdfGNbSnQrMV08PDh8Y1tKdCsyXTw8MTYpPj4oNyZkKSZ2bix0bj0oMTw8ZHQpLTEsTW49dm4tdi0xLENyPUNuJnRuO2lmKENyPE1uPyhkKz1kdCxD''@;'; put 'put ''bj1Dcik6KGQrPWR0KzEsQ24+dG4mJihDbi09TW4pKSxiZVsrK01dPS0tQ24sLTE9PUNuPyh2Kz1DbixydFstLXJlXT1NKTp2LT1DbiwhQ24pZG97dmFyIEdyPWQ+PjM7RD0oY1tHcl18Y1tHcisxXTw8OCk+Pig3JmQpJjMsZCs9MixNKz1EfXdoaWxlKDM9PUQpfShNPjI1NXx8dikmJmUwKDAp''@;'; put 'put ''O2Zvcih2YXIgbXI9MCxHbj0oZj4+MSkrKGY+PjMpKzMsYWk9Zi0xLF9pPTA7X2k8PU07KytfaSl7dmFyIE9uPWJlW19pXTtpZihPbjwxKUVlW19pXT0tT247ZWxzZSBmb3IoWj0wO1o8T247KytaKXtydFttcl09X2k7ZG97bXI9bXIrR24mYWl9d2hpbGUobXI+PXJlKX19Zm9yKG1yJiZlMCgw''@;'; put 'put ''KSxaPTA7WjxmOysrWil7dmFyIHpyPUVlW3J0W1pdXSsrLEpuPXB0W1pdPWgtcnYoenIpO0JlW1pdPSh6cjw8Sm4pLWZ9cmV0dXJuW2QrNz4+Myx7YjpoLHM6cnQsbjpwdCx0OkJlfV19LER4dD1GQShuZXcgSXUoWzgxLDE2LDk5LDE0MCw0OSwxOTgsMjQsOTksMTIsMzMsMTk2LDI0LDk5LDEw''@;'; put 'put ''MiwxMDIsMTM0LDcwLDE0Niw0XSksMCw2KVsxXSxJeHQ9RkEobmV3IEl1KFszMywyMCwxOTYsMjQsOTksMTQwLDMzLDEzMiwxNiw2Niw4LDMzLDEzMiwxNiw2Niw4LDMzLDY4LDY4LDY4LDY4LDY4LDY4LDY4LDY4LDM2LDldKSwwLDYpWzFdLFJ4dD1GQShuZXcgSXUoWzMyLDEzMiwxNiw2Niwx''@;'; put 'put ''MDIsNzAsNjgsNjgsNjgsNjgsMzYsNzMsMl0pLDAsNSlbMV0sbjdlPWZ1bmN0aW9uKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoLGQ9bmV3IFBOKGEpLGg9MDtoPGE7KytoKWRbaF09bCxsKz0xPDxjW2hdO3JldHVybiBkfSxPdGU9bmV3IEl1KG5ldyBQTihbMCwwLDAsMCwxNjg0MzAwOSw1MDUy''@;'; put 'put ''ODc3MCwxMzQ2NzgwMjAsMjAyMDUwMDU3LDI2OTQyMjA5M10pLmJ1ZmZlciwwLDM2KSxMeHQ9bjdlKE90ZSwwKSxQdGU9bmV3IEl1KG5ldyBQTihbMCwwLDAsMCwwLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDExNzc2OTIyMCwxODUyMDcwNDgsMjUyNTc5MDg0LDE2XSkuYnVmZmVyLDAsNTMp''@;'; put 'put ''LE94dD1uN2UoUHRlLDMpLEhBPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD1jLmxlbmd0aCxoPWwubGVuZ3RoLGY9Y1tkLTFdLHY9KDE8PGEuYiktMSxNPS1hLmI7Znx8ZTAoMCk7Zm9yKHZhciBEPTAsWj1hLmIscmU9KGQ8PDMpLTgrcnYoZiktWixjZT0tMTtyZT5NJiZjZTxoOyl7dmFyIGJlPXJl''@;'; put 'put ''Pj4zO2xbKytjZV09YS5zW0Q9KEQ8PFp8KGNbYmVdfGNbYmUrMV08PDh8Y1tiZSsyXTw8MTYpPj4oNyZyZSkpJnZdLHJlLT1aPWEubltEXX0ocmUhPU18fGNlKzEhPWgpJiZlMCgwKX0sUHh0PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD02LGY9bC5sZW5ndGgrMz4+Mix2PWY8PDEsTT1mK3Y7SEEo''@;'; put 'put ''Yy5zdWJhcnJheShkLGQrPWNbMF18Y1sxXTw8OCksbC5zdWJhcnJheSgwLGYpLGEpLEhBKGMuc3ViYXJyYXkoZCxkKz1jWzJdfGNbM108PDgpLGwuc3ViYXJyYXkoZix2KSxhKSxIQShjLnN1YmFycmF5KGQsZCs9Y1s0XXxjWzVdPDw4KSxsLnN1YmFycmF5KHYsTSksYSksSEEoYy5zdWJhcnJh''@;'; put 'put ''eShkKSxsLnN1YmFycmF5KE0pLGEpfSxGeHQ9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkLGg9bC5iLGY9Y1toXSx2PWY+PjEmMztsLmw9MSZmO3ZhciBNPWY+PjN8Y1toKzFdPDw1fGNbaCsyXTw8MTMsRD0oaCs9MykrTTtpZigxPT12KXJldHVybiBoPj1jLmxlbmd0aD92b2lkIDA6KGwuYj1oKzEs''@;'; put 'put ''YT8oUEEoYSxjW2hdLGwueSxsLnkrPU0pLGEpOlBBKG5ldyBJdShNKSxjW2hdKSk7aWYoIShEPmMubGVuZ3RoKSl7aWYoMD09dilyZXR1cm4gbC5iPUQsYT8oYS5zZXQoYy5zdWJhcnJheShoLEQpLGwueSksbC55Kz1NLGEpOkx0ZShjLGgsRCk7aWYoMj09dil7dmFyIFo9Y1toXSxyZT0zJlos''@;'; put 'put ''Y2U9Wj4+MiYzLGJlPVo+PjQsRWU9MCxCZT0wO3JlPDI/MSZjZT9iZXw9Y1srK2hdPDw0fCgyJmNlJiZjWysraF08PDEyKTpiZT1aPj4zOihCZT1jZSxjZTwyPyhiZXw9KDYzJmNbKytoXSk8PDQsRWU9Y1toXT4+NnxjWysraF08PDIpOjI9PWNlPyhiZXw9Y1srK2hdPDw0fCgzJmNbKytoXSk8''@;'; put 'put ''PDEyLEVlPWNbaF0+PjJ8Y1srK2hdPDw2KTooYmV8PWNbKytoXTw8NHwoNjMmY1srK2hdKTw8MTIsRWU9Y1toXT4+NnxjWysraF08PDJ8Y1srK2hdPDwxMCkpLCsraDt2YXIgcWU9YT9hLnN1YmFycmF5KGwueSxsLnkrbC5tKTpuZXcgSXUobC5tKSxydD1xZS5sZW5ndGgtYmU7aWYoMD09cmUp''@;'; put 'put ''cWUuc2V0KGMuc3ViYXJyYXkoaCxoKz1iZSkscnQpO2Vsc2UgaWYoMT09cmUpUEEocWUsY1toKytdLHJ0KTtlbHNle3ZhciBwdD1sLmg7aWYoMj09cmUpe3ZhciBkdD1mdW5jdGlvbihjLGwpe3ZhciBhPTAsZD0tMSxoPW5ldyBJdSgyOTIpLGY9Y1tsXSx2PWguc3ViYXJyYXkoMCwyNTYpLE09''@;'; put 'put ''aC5zdWJhcnJheSgyNTYsMjY4KSxEPW5ldyBPTihoLmJ1ZmZlciwyNjgpO2lmKGY8MTI4KXt2YXIgWj1GQShjLGwrMSw2KSxjZT1aWzFdLGJlPVpbMF08PDMsRWU9Y1tsKz1mXTtFZXx8ZTAoMCk7Zm9yKHZhciBCZT0wLHFlPTAscnQ9Y2UuYixwdD1ydCxkdD0oKytsPDwzKS04K3J2KEVlKTsh''@;'; put 'put ''KChkdC09cnQpPGJlKTspe3ZhciBKdD1kdD4+MztpZih2WysrZF09Y2Uuc1tCZSs9KGNbSnRdfGNbSnQrMV08PDgpPj4oNyZkdCkmKDE8PHJ0KS0xXSwoZHQtPXB0KTxiZSlicmVhazt2WysrZF09Y2Uuc1txZSs9KGNbSnQ9ZHQ+PjNdfGNbSnQrMV08PDgpPj4oNyZkdCkmKDE8PHB0KS0xXSxy''@;'; put 'put ''dD1jZS5uW0JlXSxCZT1jZS50W0JlXSxwdD1jZS5uW3FlXSxxZT1jZS50W3FlXX0rK2Q+MjU1JiZlMCgwKX1lbHNle2ZvcihkPWYtMTI3O2E8ZDthKz0yKXt2YXIgdm49Y1srK2xdO3ZbYV09dm4+PjQsdlthKzFdPTE1JnZufSsrbH12YXIgQ249MDtmb3IoYT0wO2E8ZDsrK2EpKHRuPXZbYV0p''@;'; put 'put ''PjExJiZlMCgwKSxDbis9dG4mJjE8PHRuLTE7dmFyIE1uPXJ2KENuKSsxLENyPTE8PE1uLEdyPUNyLUNuO2ZvcihHciZHci0xJiZlMCgwKSx2W2QrK109cnYoR3IpKzEsYT0wO2E8ZDsrK2Epe3ZhciB0bjsrK01bdlthXT0odG49dlthXSkmJk1uKzEtdG5dfXZhciBtcj1uZXcgSXUoQ3I8PDEp''@;'; put 'put ''LEduPW1yLnN1YmFycmF5KDAsQ3IpLGFpPW1yLnN1YmFycmF5KENyKTtmb3IoRFtNbl09MCxhPU1uO2E+MDstLWEpe3ZhciBfaT1EW2FdO1BBKGFpLGEsX2ksRFthLTFdPV9pK01bYV0qKDE8PE1uLWEpKX1mb3IoRFswXSE9Q3ImJmUwKDApLGE9MDthPGQ7KythKXt2YXIgT249dlthXTtpZihP''@;'; put 'put ''bil7dmFyIHpyPURbT25dO1BBKEduLGEsenIsRFtPbl09enIrKDE8PE1uLU9uKSl9fXJldHVybltsLHtuOmFpLGI6TW4sczpHbn1dfShjLGgpO0VlKz1oLShoPWR0WzBdKSxsLmg9cHQ9ZHRbMV19ZWxzZSBwdHx8ZTAoMCk7KEJlP1B4dDpIQSkoYy5zdWJhcnJheShoLGgrPUVlKSxxZS5zdWJh''@;'; put 'put ''cnJheShydCkscHQpfXZhciBKdD1jW2grK107aWYoSnQpezI1NT09SnQ/SnQ9MzI1MTIrKGNbaCsrXXxjW2grK108PDgpOkp0PjEyNyYmKEp0PUp0LTEyODw8OHxjW2grK10pO3ZhciB2bj1jW2grK107MyZ2biYmZTAoMCk7Zm9yKHZhciBDbj1bSXh0LFJ4dCxEeHRdLHRuPTI7dG4+LTE7LS10''@;'; put 'put ''bil7dmFyIE1uPXZuPj4yKyh0bjw8MSkmMztpZigxPT1Nbil7dmFyIENyPW5ldyBJdShbMCwwLGNbaCsrXV0pO0NuW3RuXT17czpDci5zdWJhcnJheSgyLDMpLG46Q3Iuc3ViYXJyYXkoMCwxKSx0Om5ldyBPTihDci5idWZmZXIsMCwxKSxiOjB9fWVsc2UgMj09TW4/KGg9KGQ9RkEoYyxoLDkt''@;'; put 'put ''KDEmdG4pKSlbMF0sQ25bdG5dPWRbMV0pOjM9PU1uJiYobC50fHxlMCgwKSxDblt0bl09bC50W3RuXSl9dmFyIEdyPWwudD1Dbixtcj1HclswXSxHbj1HclsxXSxhaT1HclsyXSxfaT1jW0QtMV07X2l8fGUwKDApO3ZhciBPbj0oRDw8MyktOCtydihfaSktYWkuYix6cj1Pbj4+MyxKbj0wLEly''@;'; put 'put ''PShjW3pyXXxjW3pyKzFdPDw4KT4+KDcmT24pJigxPDxhaS5iKS0xLCRyPShjW3pyPShPbi09R24uYik+PjNdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PEduLmIpLTEsd2k9KGNbenI9KE9uLT1tci5iKT4+M118Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8bXIuYiktMTtmb3IoKytKdDstLUp0''@;'; put 'put ''Oyl7dmFyIGVhPWFpLnNbSXJdLGZhPWFpLm5bSXJdLHZ0PW1yLnNbd2ldLE50PW1yLm5bd2ldLEh0PUduLnNbJHJdLEhuPUduLm5bJHJdLHRyPTE8PEh0LGFyPXRyKygoY1t6cj0oT24tPUh0KT4+M118Y1t6cisxXTw8OHxjW3pyKzJdPDwxNnxjW3pyKzNdPDwyNCk+Pj4oNyZPbikmdHItMSk7''@;'; put 'put ''enI9KE9uLT1QdGVbdnRdKT4+Mzt2YXIgSHI9T3h0W3Z0XSsoKGNbenJdfGNbenIrMV08PDh8Y1t6cisyXTw8MTYpPj4oNyZPbikmKDE8PFB0ZVt2dF0pLTEpO3pyPShPbi09T3RlW2VhXSk+PjM7dmFyIHFyPUx4dFtlYV0rKChjW3pyXXxjW3pyKzFdPDw4fGNbenIrMl08PDE2KT4+KDcmT24p''@;'; put 'put ''JigxPDxPdGVbZWFdKS0xKTtpZih6cj0oT24tPWZhKT4+MyxJcj1haS50W0lyXSsoKGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PGZhKS0xKSx6cj0oT24tPU50KT4+Myx3aT1tci50W3dpXSsoKGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PE50KS0xKSx6cj0oT24tPUhuKT4+''@;'; put 'put ''Mywkcj1Hbi50WyRyXSsoKGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PEhuKS0xKSxhcj4zKWwub1syXT1sLm9bMV0sbC5vWzFdPWwub1swXSxsLm9bMF09YXItPTM7ZWxzZXt2YXIgb249YXItKDAhPXFyKTtvbj8oYXI9Mz09b24/bC5vWzBdLTE6bC5vW29uXSxvbj4xJiYobC5vWzJd''@;'; put 'put ''PWwub1sxXSksbC5vWzFdPWwub1swXSxsLm9bMF09YXIpOmFyPWwub1swXX1mb3IodG49MDt0bjxxcjsrK3RuKXFlW0puK3RuXT1xZVtydCt0bl07cnQrPXFyO3ZhciB5bj0oSm4rPXFyKS1hcjtpZih5bjwwKXt2YXIgcG49LXluLHByPWwuZSt5bjtmb3IocG4+SHImJihwbj1IciksdG49MDt0''@;'; put 'put ''bjxwbjsrK3RuKXFlW0puK3RuXT1sLndbcHIrdG5dO0puKz1wbixIci09cG4seW49MH1mb3IodG49MDt0bjxIcjsrK3RuKXFlW0puK3RuXT1xZVt5bit0bl07Sm4rPUhyfWlmKEpuIT1ydClmb3IoO3J0PHFlLmxlbmd0aDspcWVbSm4rK109cWVbcnQrK107ZWxzZSBKbj1xZS5sZW5ndGg7YT9s''@;'; put 'put ''LnkrPUpuOnFlPUx0ZShxZSwwLEpuKX1lbHNlIGlmKGEpe2lmKGwueSs9YmUscnQpZm9yKHRuPTA7dG48YmU7Kyt0bilxZVt0bl09cWVbcnQrdG5dfWVsc2UgcnQmJihxZT1MdGUocWUscnQpKTtyZXR1cm4gbC5iPUQscWV9ZTAoMil9fSxCeHQ9KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3Vt''@;'; put 'put ''ZW50LGZ1bmN0aW9uKGw9e30pe3ZhciBoLGYsQmUsZD1sLHY9bmV3IFByb21pc2UoKFplLGx0KT0+e2g9WmUsZj1sdH0pLEQ9T2JqZWN0LmFzc2lnbih7fSxkKSxxZT1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHJ0PWNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWdu''@;'; put 'put ''KGQsRCksRD1udWxsO3ZhciBkdCx0bixNbixDcixtcixHbixfaSxwdD1kLndhc21CaW5hcnksSnQ9ITE7ZnVuY3Rpb24gQ24oWmUsbHQpe1plfHxxcihsdCl9ZnVuY3Rpb24gT24oKXt2YXIgWmU9ZHQuYnVmZmVyO2QuSEVBUDg9dG49bmV3IEludDhBcnJheShaZSksZC5IRUFQMTY9Q3I9bmV3''@;'; put 'put ''IEludDE2QXJyYXkoWmUpLGQuSEVBUFU4PU1uPW5ldyBVaW50OEFycmF5KFplKSxkLkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KFplKSxkLkhFQVAzMj1tcj1uZXcgSW50MzJBcnJheShaZSksZC5IRUFQVTMyPUduPW5ldyBVaW50MzJBcnJheShaZSksZC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJy''@;'; put 'put ''YXkoWmUpLGQuSEVBUEY2ND1faT1uZXcgRmxvYXQ2NEFycmF5KFplKX12YXIgenI9W10sSm49W10sSXI9W10sTnQ9MCxIdD1udWxsLEhuPW51bGw7ZnVuY3Rpb24gYXIoWmUpe050Kyt9ZnVuY3Rpb24gSHIoWmUpe2lmKDA9PS0tTnQmJihudWxsIT09SHQmJihjbGVhckludGVydmFsKEh0KSxI''@;'; put 'put ''dD1udWxsKSxIbikpe3ZhciBsdD1IbjtIbj1udWxsLGx0KCl9fWZ1bmN0aW9uIHFyKFplKXtydChaZT0iQWJvcnRlZCgiK1plKyIpIiksSnQ9ITAsWmUrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgbHQ9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJv''@;'; put 'put ''cihaZSk7dGhyb3cgZihsdCksbHR9dmFyICRuLHluPVplPT5aZS5zdGFydHNXaXRoKCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIik7ZnVuY3Rpb24gZHIoWmUpe2lmKFplPT0kbiYmcHQpcmV0dXJuIG5ldyBVaW50OEFycmF5KHB0KTtpZihCZSlyZXR1cm4gQmUoWmUp''@;'; put 'put ''O3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1mdW5jdGlvbiBabihaZSxsdCxMdCl7cmV0dXJuIGZ1bmN0aW9uIFVyKFplKXtyZXR1cm4gcHQ/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ZHIoWmUpKToodm9pZCAwKShaZSkudGhlbihs''@;'; put 'put ''dD0+bmV3IFVpbnQ4QXJyYXkobHQpLCgpPT5kcihaZSkpfShaZSkudGhlbigkdD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoJHQsbHQpKS50aGVuKEx0LCR0PT57cnQoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7JHR9YCkscXIoJHQpfSl9dmFyIFpyLGFhLEJh''@;'; put 'put ''PXsxNzMwNjQ6KFplLGx0KT0+e3ZhciBMdD12MChaZSksJHQ9djAobHQpO1l0LmNyZWF0ZVBhdGgoIi8iLFFvLmRpcm5hbWUoTHQpKSxZdC53cml0ZUZpbGUoUW8uam9pbigiLyIsTHQpLCR0KX19O2NsYXNzIElve25hbWU9IkV4aXRTdGF0dXMiO2NvbnN0cnVjdG9yKGx0KXt0aGlzLm1lc3Nh''@;'; put 'put ''Z2U9YFByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJHtsdH0pYCx0aGlzLnN0YXR1cz1sdH19dmFyIFpvPVplPT57Zm9yKDtaZS5sZW5ndGg+MDspWmUuc2hpZnQoKShkKX07Y2xhc3MgcHN7Y29uc3RydWN0b3IobHQpe3RoaXMuZXhjUHRyPWx0LHRoaXMucHRyPWx0LTI0fXNldF90eXBl''@;'; put 'put ''KGx0KXtHblt0aGlzLnB0cis0Pj4yXT1sdH1nZXRfdHlwZSgpe3JldHVybiBHblt0aGlzLnB0cis0Pj4yXX1zZXRfZGVzdHJ1Y3RvcihsdCl7R25bdGhpcy5wdHIrOD4+Ml09bHR9Z2V0X2Rlc3RydWN0b3IoKXtyZXR1cm4gR25bdGhpcy5wdHIrOD4+Ml19c2V0X2NhdWdodChsdCl7dG5bdGhp''@;'; put 'put ''cy5wdHIrMTJdPWx0PWx0PzE6MH1nZXRfY2F1Z2h0KCl7cmV0dXJuIDAhPXRuW3RoaXMucHRyKzEyXX1zZXRfcmV0aHJvd24obHQpe3RuW3RoaXMucHRyKzEzXT1sdD1sdD8xOjB9Z2V0X3JldGhyb3duKCl7cmV0dXJuIDAhPXRuW3RoaXMucHRyKzEzXX1pbml0KGx0LEx0KXt0aGlzLnNldF9h''@;'; put 'put ''ZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZShsdCksdGhpcy5zZXRfZGVzdHJ1Y3RvcihMdCl9c2V0X2FkanVzdGVkX3B0cihsdCl7R25bdGhpcy5wdHIrMTY+PjJdPWx0fWdldF9hZGp1c3RlZF9wdHIoKXtyZXR1cm4gR25bdGhpcy5wdHIrMTY+PjJdfX12YXIgUW89e2lzQWJzOlplPT4i''@;'; put 'put ''LyI9PT1aZS5jaGFyQXQoMCksc3BsaXRQYXRoOlplPT4vXihcLz98KShbXHNcU10qPykoKD86XC57MSwyfXxbXlwvXSs/fCkoXC5bXi5cL10qfCkpKD86W1wvXSopJC8uZXhlYyhaZSkuc2xpY2UoMSksbm9ybWFsaXplQXJyYXk6KFplLGx0KT0+e2Zvcih2YXIgTHQ9MCwkdD1aZS5sZW5ndGgt''@;'; put 'put ''MTskdD49MDskdC0tKXt2YXIgRG49WmVbJHRdOyIuIj09PURuP1plLnNwbGljZSgkdCwxKToiLi4iPT09RG4/KFplLnNwbGljZSgkdCwxKSxMdCsrKTpMdCYmKFplLnNwbGljZSgkdCwxKSxMdC0tKX1pZihsdClmb3IoO0x0O0x0LS0pWmUudW5zaGlmdCgiLi4iKTtyZXR1cm4gWmV9LG5vcm1h''@;'; put 'put ''bGl6ZTpaZT0+e3ZhciBsdD1Rby5pc0FicyhaZSksTHQ9Ii8iPT09WmUuc3Vic3RyKC0xKTtyZXR1cm4hKFplPVFvLm5vcm1hbGl6ZUFycmF5KFplLnNwbGl0KCIvIikuZmlsdGVyKCR0PT4hISR0KSwhbHQpLmpvaW4oIi8iKSkmJiFsdCYmKFplPSIuIiksWmUmJkx0JiYoWmUrPSIvIiksKGx0''@;'; put 'put ''PyIvIjoiIikrWmV9LGRpcm5hbWU6WmU9Pnt2YXIgbHQ9UW8uc3BsaXRQYXRoKFplKSxMdD1sdFswXSwkdD1sdFsxXTtyZXR1cm4gTHR8fCR0PygkdCYmKCR0PSR0LnN1YnN0cigwLCR0Lmxlbmd0aC0xKSksTHQrJHQpOiIuIn0sYmFzZW5hbWU6WmU9PntpZigiLyI9PT1aZSlyZXR1cm4iLyI7''@;'; put 'put ''dmFyIGx0PShaZT0oWmU9UW8ubm9ybWFsaXplKFplKSkucmVwbGFjZSgvXC8kLywiIikpLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1sdD9aZTpaZS5zdWJzdHIobHQrMSl9LGpvaW46KC4uLlplKT0+UW8ubm9ybWFsaXplKFplLmpvaW4oIi8iKSksam9pbjI6KFplLGx0KT0+UW8ubm9y''@;'; put 'put ''bWFsaXplKFplKyIvIitsdCl9LGFkPVplPT4oYWQ9KCgpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXJldHVybiBaZT0+Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhaZSk7cXIoImluaXRSYW5kb21EZXZpY2Ui''@;'; put 'put ''KX0pKCkpKFplKSxVcz17cmVzb2x2ZTooLi4uWmUpPT57Zm9yKHZhciBsdD0iIixMdD0hMSwkdD1aZS5sZW5ndGgtMTskdD49LTEmJiFMdDskdC0tKXt2YXIgRG49JHQ+PTA/WmVbJHRdOll0LmN3ZCgpO2lmKCJzdHJpbmciIT10eXBlb2YgRG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1l''@;'; put 'put ''bnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZighRG4pcmV0dXJuIiI7bHQ9RG4rIi8iK2x0LEx0PVFvLmlzQWJzKERuKX1yZXR1cm4oTHQ/Ii8iOiIiKSsobHQ9UW8ubm9ybWFsaXplQXJyYXkobHQuc3BsaXQoIi8iKS5maWx0ZXIoY3I9PiEhY3IpLCFMdCkuam9pbigi''@;'; put 'put ''LyIpKXx8Ii4ifSxyZWxhdGl2ZTooWmUsbHQpPT57ZnVuY3Rpb24gTHQoR28pe2Zvcih2YXIgSHM9MDtIczxHby5sZW5ndGgmJiIiPT09R29bSHNdO0hzKyspO2Zvcih2YXIgYWw9R28ubGVuZ3RoLTE7YWw+PTAmJiIiPT09R29bYWxdO2FsLS0pO3JldHVybiBIcz5hbD9bXTpHby5zbGljZShI''@;'; put 'put ''cyxhbC1IcysxKX1aZT1Vcy5yZXNvbHZlKFplKS5zdWJzdHIoMSksbHQ9VXMucmVzb2x2ZShsdCkuc3Vic3RyKDEpO2Zvcih2YXIgJHQ9THQoWmUuc3BsaXQoIi8iKSksRG49THQobHQuc3BsaXQoIi8iKSksY3I9TWF0aC5taW4oJHQubGVuZ3RoLERuLmxlbmd0aCksUnI9Y3IsWHI9MDtYcjxj''@;'; put 'put ''cjtYcisrKWlmKCR0W1hyXSE9PURuW1hyXSl7UnI9WHI7YnJlYWt9dmFyIGthPVtdO2ZvcihYcj1ScjtYcjwkdC5sZW5ndGg7WHIrKylrYS5wdXNoKCIuLiIpO3JldHVybihrYT1rYS5jb25jYXQoRG4uc2xpY2UoUnIpKSkuam9pbigiLyIpfX0sSmM9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9u''@;'; put 'put ''ZXcgVGV4dERlY29kZXI6dm9pZCAwLHFzPShaZSxsdD0wLEx0PU5hTik9Pntmb3IodmFyICR0PWx0K0x0LERuPWx0O1plW0RuXSYmIShEbj49JHQpOykrK0RuO2lmKERuLWx0PjE2JiZaZS5idWZmZXImJkpjKXJldHVybiBKYy5kZWNvZGUoWmUuc3ViYXJyYXkobHQsRG4pKTtmb3IodmFyIGNy''@;'; put 'put ''PSIiO2x0PERuOyl7dmFyIFJyPVplW2x0KytdO2lmKDEyOCZScil7dmFyIFhyPTYzJlplW2x0KytdO2lmKDE5MiE9KDIyNCZScikpe3ZhciBrYT02MyZaZVtsdCsrXTtpZigoUnI9MjI0PT0oMjQwJlJyKT8oMTUmUnIpPDwxMnxYcjw8NnxrYTooNyZScik8PDE4fFhyPDwxMnxrYTw8Nnw2MyZa''@;'; put 'put ''ZVtsdCsrXSk8NjU1MzYpY3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoUnIpO2Vsc2V7dmFyIEdvPVJyLTY1NTM2O2NyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fEdvPj4xMCw1NjMyMHwxMDIzJkdvKX19ZWxzZSBjcis9U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmUnIpPDw2fFhyKX1lbHNl''@;'; put 'put ''IGNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFJyKX1yZXR1cm4gY3J9LEJsPVtdLGVzPVplPT57Zm9yKHZhciBsdD0wLEx0PTA7THQ8WmUubGVuZ3RoOysrTHQpe3ZhciAkdD1aZS5jaGFyQ29kZUF0KEx0KTskdDw9MTI3P2x0Kys6JHQ8PTIwNDc/bHQrPTI6JHQ+PTU1Mjk2JiYkdDw9NTczNDM/''@;'; put 'put ''KGx0Kz00LCsrTHQpOmx0Kz0zfXJldHVybiBsdH0sRTE9KFplLGx0LEx0LCR0KT0+e2lmKCEoJHQ+MCkpcmV0dXJuIDA7Zm9yKHZhciBEbj1MdCxjcj1MdCskdC0xLFJyPTA7UnI8WmUubGVuZ3RoOysrUnIpe3ZhciBYcj1aZS5jaGFyQ29kZUF0KFJyKTtpZihYcj49NTUyOTYmJlhyPD01NzM0''@;'; put 'put ''MyYmKFhyPTY1NTM2KygoMTAyMyZYcik8PDEwKXwxMDIzJlplLmNoYXJDb2RlQXQoKytScikpLFhyPD0xMjcpe2lmKEx0Pj1jcilicmVhaztsdFtMdCsrXT1Ycn1lbHNlIGlmKFhyPD0yMDQ3KXtpZihMdCsxPj1jcilicmVhaztsdFtMdCsrXT0xOTJ8WHI+PjYsbHRbTHQrK109MTI4fDYzJlhy''@;'; put 'put ''fWVsc2UgaWYoWHI8PTY1NTM1KXtpZihMdCsyPj1jcilicmVhaztsdFtMdCsrXT0yMjR8WHI+PjEyLGx0W0x0KytdPTEyOHxYcj4+NiY2MyxsdFtMdCsrXT0xMjh8NjMmWHJ9ZWxzZXtpZihMdCszPj1jcilicmVhaztsdFtMdCsrXT0yNDB8WHI+PjE4LGx0W0x0KytdPTEyOHxYcj4+MTImNjMs''@;'; put 'put ''bHRbTHQrK109MTI4fFhyPj42JjYzLGx0W0x0KytdPTEyOHw2MyZYcn19cmV0dXJuIGx0W0x0XT0wLEx0LURufSxkND17dHR5czpbXSxpbml0KCl7fSxzaHV0ZG93bigpe30scmVnaXN0ZXIoWmUsbHQpe2Q0LnR0eXNbWmVdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOmx0fSxZdC5yZWdpc3Rl''@;'; put 'put ''ckRldmljZShaZSxkNC5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbihaZSl7dmFyIGx0PWQ0LnR0eXNbWmUubm9kZS5yZGV2XTtpZighbHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO1plLnR0eT1sdCxaZS5zZWVrYWJsZT0hMX0sY2xvc2UoWmUpe1plLnR0eS5vcHMuZnN5bmMo''@;'; put 'put ''WmUudHR5KX0sZnN5bmMoWmUpe1plLnR0eS5vcHMuZnN5bmMoWmUudHR5KX0scmVhZChaZSxsdCxMdCwkdCxEbil7aWYoIVplLnR0eXx8IVplLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjApO2Zvcih2YXIgY3I9MCxScj0wO1JyPCR0O1JyKyspe3ZhciBYcjt0''@;'; put 'put ''cnl7WHI9WmUudHR5Lm9wcy5nZXRfY2hhcihaZS50dHkpfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT1YciYmMD09PWNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYpO2lmKG51bGw9PVhyKWJyZWFrO2NyKyssbHRbTHQrUnJdPVhyfXJldHVybiBjciYm''@;'; put 'put ''KFplLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGNyfSx3cml0ZShaZSxsdCxMdCwkdCxEbil7aWYoIVplLnR0eXx8IVplLnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjApO3RyeXtmb3IodmFyIGNyPTA7Y3I8JHQ7Y3IrKylaZS50dHkub3BzLnB1dF9jaGFy''@;'; put 'put ''KFplLnR0eSxsdFtMdCtjcl0pfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gJHQmJihaZS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxjcn19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6WmU9PkJsLmxlbmd0aD9CbC5zaGlmdCgpOm51bGwscHV0X2NoYXIo''@;'; put 'put ''WmUsbHQpe251bGw9PT1sdHx8MTA9PT1sdD8ocWUocXMoWmUub3V0cHV0KSksWmUub3V0cHV0PVtdKTowIT1sdCYmWmUub3V0cHV0LnB1c2gobHQpfSxmc3luYyhaZSl7WmUub3V0cHV0JiZaZS5vdXRwdXQubGVuZ3RoPjAmJihxZShxcyhaZS5vdXRwdXQpKSxaZS5vdXRwdXQ9W10pfSxpb2N0''@;'; put 'put ''bF90Y2dldHM6WmU9Pih7Y19pZmxhZzoyNTg1NixjX29mbGFnOjUsY19jZmxhZzoxOTEsY19sZmxhZzozNTM4NyxjX2NjOlszLDI4LDEyNywyMSw0LDAsMSwwLDE3LDE5LDI2LDAsMTgsMTUsMjMsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF19KSxpb2N0bF90Y3NldHM6KFpl''@;'; put 'put ''LGx0LEx0KT0+MCxpb2N0bF90aW9jZ3dpbnN6OlplPT5bMjQsODBdfSxkZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hhcihaZSxsdCl7bnVsbD09PWx0fHwxMD09PWx0PyhydChxcyhaZS5vdXRwdXQpKSxaZS5vdXRwdXQ9W10pOjAhPWx0JiZaZS5vdXRwdXQucHVzaChsdCl9LGZzeW5jKFplKXta''@;'; put 'put ''ZS5vdXRwdXQmJlplLm91dHB1dC5sZW5ndGg+MCYmKHJ0KHFzKFplLm91dHB1dCkpLFplLm91dHB1dD1bXSl9fX0sVkE9KFplLGx0KT0+TWF0aC5jZWlsKFplL2x0KSpsdCxVTj1aZT0+e1plPVZBKFplLDY1NTM2KTt2YXIgbHQ9VzdlKDY1NTM2LFplKTtyZXR1cm4gbHQmJigoWmUsbHQpPT57''@;'; put 'put ''TW4uZmlsbCgwLFplLFplK2x0KX0pKGx0LFplKSxsdH0sJGE9e29wc190YWJsZTpudWxsLG1vdW50OlplPT4kYS5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApLGNyZWF0ZU5vZGUoWmUsbHQsTHQsJHQpe2lmKFl0LmlzQmxrZGV2KEx0KXx8WXQuaXNGSUZPKEx0KSl0aHJvdyBuZXcgWXQu''@;'; put 'put ''RXJybm9FcnJvcig2Myk7JGEub3BzX3RhYmxlfHw9e2Rpcjp7bm9kZTp7Z2V0YXR0cjokYS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6JGEubm9kZV9vcHMuc2V0YXR0cixsb29rdXA6JGEubm9kZV9vcHMubG9va3VwLG1rbm9kOiRhLm5vZGVfb3BzLm1rbm9kLHJlbmFtZTokYS5ub2RlX29w''@;'; put 'put ''cy5yZW5hbWUsdW5saW5rOiRhLm5vZGVfb3BzLnVubGluayxybWRpcjokYS5ub2RlX29wcy5ybWRpcixyZWFkZGlyOiRhLm5vZGVfb3BzLnJlYWRkaXIsc3ltbGluazokYS5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazokYS5zdHJlYW1fb3BzLmxsc2Vla319LGZpbGU6e25vZGU6''@;'; put 'put ''e2dldGF0dHI6JGEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOiRhLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOiRhLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6JGEuc3RyZWFtX29wcy5yZWFkLHdyaXRlOiRhLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6JGEuc3RyZWFtX29w''@;'; put 'put ''cy5hbGxvY2F0ZSxtbWFwOiRhLnN0cmVhbV9vcHMubW1hcCxtc3luYzokYS5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjokYS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6JGEubm9kZV9vcHMuc2V0YXR0cixyZWFkbGluazokYS5ub2RlX29wcy5yZWFkbGlua30sc3Ry''@;'; put 'put ''ZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6JGEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOiRhLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTpZdC5jaHJkZXZfc3RyZWFtX29wc319O3ZhciBEbj1ZdC5jcmVhdGVOb2RlKFplLGx0LEx0LCR0KTtyZXR1cm4gWXQuaXNEaXIoRG4ubW9k''@;'; put 'put ''ZSk/KERuLm5vZGVfb3BzPSRhLm9wc190YWJsZS5kaXIubm9kZSxEbi5zdHJlYW1fb3BzPSRhLm9wc190YWJsZS5kaXIuc3RyZWFtLERuLmNvbnRlbnRzPXt9KTpZdC5pc0ZpbGUoRG4ubW9kZSk/KERuLm5vZGVfb3BzPSRhLm9wc190YWJsZS5maWxlLm5vZGUsRG4uc3RyZWFtX29wcz0kYS5v''@;'; put 'put ''cHNfdGFibGUuZmlsZS5zdHJlYW0sRG4udXNlZEJ5dGVzPTAsRG4uY29udGVudHM9bnVsbCk6WXQuaXNMaW5rKERuLm1vZGUpPyhEbi5ub2RlX29wcz0kYS5vcHNfdGFibGUubGluay5ub2RlLERuLnN0cmVhbV9vcHM9JGEub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpZdC5pc0NocmRldihEbi5t''@;'; put 'put ''b2RlKSYmKERuLm5vZGVfb3BzPSRhLm9wc190YWJsZS5jaHJkZXYubm9kZSxEbi5zdHJlYW1fb3BzPSRhLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtKSxEbi50aW1lc3RhbXA9RGF0ZS5ub3coKSxaZSYmKFplLmNvbnRlbnRzW2x0XT1EbixaZS50aW1lc3RhbXA9RG4udGltZXN0YW1wKSxEbn0s''@;'; put 'put ''Z2V0RmlsZURhdGFBc1R5cGVkQXJyYXk6WmU9PlplLmNvbnRlbnRzP1plLmNvbnRlbnRzLnN1YmFycmF5P1plLmNvbnRlbnRzLnN1YmFycmF5KDAsWmUudXNlZEJ5dGVzKTpuZXcgVWludDhBcnJheShaZS5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCksZXhwYW5kRmlsZVN0b3JhZ2UoWmUs''@;'; put 'put ''bHQpe3ZhciBMdD1aZS5jb250ZW50cz9aZS5jb250ZW50cy5sZW5ndGg6MDtpZighKEx0Pj1sdCkpe2x0PU1hdGgubWF4KGx0LEx0KihMdDwxMDQ4NTc2PzI6MS4xMjUpPj4+MCksMCE9THQmJihsdD1NYXRoLm1heChsdCwyNTYpKTt2YXIgRG49WmUuY29udGVudHM7WmUuY29udGVudHM9bmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkobHQpLFplLnVzZWRCeXRlcz4wJiZaZS5jb250ZW50cy5zZXQoRG4uc3ViYXJyYXkoMCxaZS51c2VkQnl0ZXMpLDApfX0scmVzaXplRmlsZVN0b3JhZ2UoWmUsbHQpe2lmKFplLnVzZWRCeXRlcyE9bHQpaWYoMD09bHQpWmUuY29udGVudHM9bnVsbCxaZS51c2VkQnl0ZXM9''@;'; put 'put ''MDtlbHNle3ZhciBMdD1aZS5jb250ZW50cztaZS5jb250ZW50cz1uZXcgVWludDhBcnJheShsdCksTHQmJlplLmNvbnRlbnRzLnNldChMdC5zdWJhcnJheSgwLE1hdGgubWluKGx0LFplLnVzZWRCeXRlcykpKSxaZS51c2VkQnl0ZXM9bHR9fSxub2RlX29wczp7Z2V0YXR0cihaZSl7dmFyIGx0''@;'; put 'put ''PXt9O3JldHVybiBsdC5kZXY9WXQuaXNDaHJkZXYoWmUubW9kZSk/WmUuaWQ6MSxsdC5pbm89WmUuaWQsbHQubW9kZT1aZS5tb2RlLGx0Lm5saW5rPTEsbHQudWlkPTAsbHQuZ2lkPTAsbHQucmRldj1aZS5yZGV2LGx0LnNpemU9WXQuaXNEaXIoWmUubW9kZSk/NDA5NjpZdC5pc0ZpbGUoWmUu''@;'; put 'put ''bW9kZSk/WmUudXNlZEJ5dGVzOll0LmlzTGluayhaZS5tb2RlKT9aZS5saW5rLmxlbmd0aDowLGx0LmF0aW1lPW5ldyBEYXRlKFplLnRpbWVzdGFtcCksbHQubXRpbWU9bmV3IERhdGUoWmUudGltZXN0YW1wKSxsdC5jdGltZT1uZXcgRGF0ZShaZS50aW1lc3RhbXApLGx0LmJsa3NpemU9NDA5''@;'; put 'put ''NixsdC5ibG9ja3M9TWF0aC5jZWlsKGx0LnNpemUvbHQuYmxrc2l6ZSksbHR9LHNldGF0dHIoWmUsbHQpe3ZvaWQgMCE9PWx0Lm1vZGUmJihaZS5tb2RlPWx0Lm1vZGUpLHZvaWQgMCE9PWx0LnRpbWVzdGFtcCYmKFplLnRpbWVzdGFtcD1sdC50aW1lc3RhbXApLHZvaWQgMCE9PWx0LnNpemUm''@;'; put 'put ''JiRhLnJlc2l6ZUZpbGVTdG9yYWdlKFplLGx0LnNpemUpfSxsb29rdXAoWmUsbHQpe3Rocm93ICRhLmRvZXNOb3RFeGlzdEVycm9yfSxta25vZDooWmUsbHQsTHQsJHQpPT4kYS5jcmVhdGVOb2RlKFplLGx0LEx0LCR0KSxyZW5hbWUoWmUsbHQsTHQpe2lmKFl0LmlzRGlyKFplLm1vZGUpKXt2''@;'; put 'put ''YXIgJHQ7dHJ5eyR0PVl0Lmxvb2t1cE5vZGUobHQsTHQpfWNhdGNoe31pZigkdClmb3IodmFyIERuIGluICR0LmNvbnRlbnRzKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU1KX1kZWxldGUgWmUucGFyZW50LmNvbnRlbnRzW1plLm5hbWVdLFplLnBhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3co''@;'; put 'put ''KSxaZS5uYW1lPUx0LGx0LmNvbnRlbnRzW0x0XT1aZSxsdC50aW1lc3RhbXA9WmUucGFyZW50LnRpbWVzdGFtcH0sdW5saW5rKFplLGx0KXtkZWxldGUgWmUuY29udGVudHNbbHRdLFplLnRpbWVzdGFtcD1EYXRlLm5vdygpfSxybWRpcihaZSxsdCl7dmFyIEx0PVl0Lmxvb2t1cE5vZGUoWmUs''@;'; put 'put ''bHQpO2Zvcih2YXIgJHQgaW4gTHQuY29udGVudHMpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTUpO2RlbGV0ZSBaZS5jb250ZW50c1tsdF0sWmUudGltZXN0YW1wPURhdGUubm93KCl9LHJlYWRkaXIoWmUpe3ZhciBsdD1bIi4iLCIuLiJdO2Zvcih2YXIgTHQgb2YgT2JqZWN0LmtleXMoWmUu''@;'; put 'put ''Y29udGVudHMpKWx0LnB1c2goTHQpO3JldHVybiBsdH0sc3ltbGluayhaZSxsdCxMdCl7dmFyICR0PSRhLmNyZWF0ZU5vZGUoWmUsbHQsNDE0NzEsMCk7cmV0dXJuICR0Lmxpbms9THQsJHR9LHJlYWRsaW5rKFplKXtpZighWXQuaXNMaW5rKFplLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vy''@;'; put 'put ''cm9yKDI4KTtyZXR1cm4gWmUubGlua319LHN0cmVhbV9vcHM6e3JlYWQoWmUsbHQsTHQsJHQsRG4pe3ZhciBjcj1aZS5ub2RlLmNvbnRlbnRzO2lmKERuPj1aZS5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgUnI9TWF0aC5taW4oWmUubm9kZS51c2VkQnl0ZXMtRG4sJHQpO2lmKFJyPjgm''@;'; put 'put ''JmNyLnN1YmFycmF5KWx0LnNldChjci5zdWJhcnJheShEbixEbitSciksTHQpO2Vsc2UgZm9yKHZhciBYcj0wO1hyPFJyO1hyKyspbHRbTHQrWHJdPWNyW0RuK1hyXTtyZXR1cm4gUnJ9LHdyaXRlKFplLGx0LEx0LCR0LERuLGNyKXtpZihsdC5idWZmZXI9PT10bi5idWZmZXImJihjcj0hMSks''@;'; put 'put ''ISR0KXJldHVybiAwO3ZhciBScj1aZS5ub2RlO2lmKFJyLnRpbWVzdGFtcD1EYXRlLm5vdygpLGx0LnN1YmFycmF5JiYoIVJyLmNvbnRlbnRzfHxSci5jb250ZW50cy5zdWJhcnJheSkpe2lmKGNyKXJldHVybiBSci5jb250ZW50cz1sdC5zdWJhcnJheShMdCxMdCskdCksUnIudXNlZEJ5dGVz''@;'; put 'put ''PSR0LCR0O2lmKDA9PT1Sci51c2VkQnl0ZXMmJjA9PT1EbilyZXR1cm4gUnIuY29udGVudHM9bHQuc2xpY2UoTHQsTHQrJHQpLFJyLnVzZWRCeXRlcz0kdCwkdDtpZihEbiskdDw9UnIudXNlZEJ5dGVzKXJldHVybiBSci5jb250ZW50cy5zZXQobHQuc3ViYXJyYXkoTHQsTHQrJHQpLERuKSwk''@;'; put 'put ''dH1pZigkYS5leHBhbmRGaWxlU3RvcmFnZShScixEbiskdCksUnIuY29udGVudHMuc3ViYXJyYXkmJmx0LnN1YmFycmF5KVJyLmNvbnRlbnRzLnNldChsdC5zdWJhcnJheShMdCxMdCskdCksRG4pO2Vsc2UgZm9yKHZhciBYcj0wO1hyPCR0O1hyKyspUnIuY29udGVudHNbRG4rWHJdPWx0W0x0''@;'; put 'put ''K1hyXTtyZXR1cm4gUnIudXNlZEJ5dGVzPU1hdGgubWF4KFJyLnVzZWRCeXRlcyxEbiskdCksJHR9LGxsc2VlayhaZSxsdCxMdCl7dmFyICR0PWx0O2lmKDE9PT1MdD8kdCs9WmUucG9zaXRpb246Mj09PUx0JiZZdC5pc0ZpbGUoWmUubm9kZS5tb2RlKSYmKCR0Kz1aZS5ub2RlLnVzZWRCeXRl''@;'; put 'put ''cyksJHQ8MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuICR0fSxhbGxvY2F0ZShaZSxsdCxMdCl7JGEuZXhwYW5kRmlsZVN0b3JhZ2UoWmUubm9kZSxsdCtMdCksWmUubm9kZS51c2VkQnl0ZXM9TWF0aC5tYXgoWmUubm9kZS51c2VkQnl0ZXMsbHQrTHQpfSxtbWFwKFplLGx0''@;'; put 'put ''LEx0LCR0LERuKXtpZighWXQuaXNGaWxlKFplLm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO3ZhciBjcixScixYcj1aZS5ub2RlLmNvbnRlbnRzO2lmKDImRG58fCFYcnx8WHIuYnVmZmVyIT09dG4uYnVmZmVyKXtpZihScj0hMCwhKGNyPVVOKGx0KSkpdGhyb3cgbmV3''@;'; put 'put ''IFl0LkVycm5vRXJyb3IoNDgpO1hyJiYoKEx0PjB8fEx0K2x0PFhyLmxlbmd0aCkmJihYcj1Yci5zdWJhcnJheT9Yci5zdWJhcnJheShMdCxMdCtsdCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoWHIsTHQsTHQrbHQpKSx0bi5zZXQoWHIsY3IpKX1lbHNlIFJyPSExLGNyPVhyLmJ5dGVP''@;'; put 'put ''ZmZzZXQ7cmV0dXJue3B0cjpjcixhbGxvY2F0ZWQ6UnJ9fSxtc3luYzooWmUsbHQsTHQsJHQsRG4pPT4oJGEuc3RyZWFtX29wcy53cml0ZShaZSxsdCwwLCR0LEx0LCExKSwwKX19LFpOPVtdLGpBPShaZSxsdCk9Pnt2YXIgTHQ9MDtyZXR1cm4gWmUmJihMdHw9MzY1KSxsdCYmKEx0fD0xNDYp''@;'; put 'put ''LEx0fSxZdD17cm9vdDpudWxsLG1vdW50czpbXSxkZXZpY2VzOnt9LHN0cmVhbXM6W10sbmV4dElub2RlOjEsbmFtZVRhYmxlOm51bGwsY3VycmVudFBhdGg6Ii8iLGluaXRpYWxpemVkOiExLGlnbm9yZVBlcm1pc3Npb25zOiEwLEVycm5vRXJyb3I6Y2xhc3N7bmFtZT0iRXJybm9FcnJvciI7''@;'; put 'put ''Y29uc3RydWN0b3IoWmUpe3RoaXMuZXJybm89WmV9fSxmaWxlc3lzdGVtczpudWxsLHN5bmNGU1JlcXVlc3RzOjAsRlNTdHJlYW06Y2xhc3N7c2hhcmVkPXt9O2dldCBvYmplY3QoKXtyZXR1cm4gdGhpcy5ub2RlfXNldCBvYmplY3QoWmUpe3RoaXMubm9kZT1aZX1nZXQgaXNSZWFkKCl7cmV0''@;'; put 'put ''dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc1dyaXRlKCl7cmV0dXJuISEoMjA5NzE1NSZ0aGlzLmZsYWdzKX1nZXQgaXNBcHBlbmQoKXtyZXR1cm4gMTAyNCZ0aGlzLmZsYWdzfWdldCBmbGFncygpe3JldHVybiB0aGlzLnNoYXJlZC5mbGFnc31zZXQgZmxhZ3MoWmUpe3RoaXMu''@;'; put 'put ''c2hhcmVkLmZsYWdzPVplfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn1zZXQgcG9zaXRpb24oWmUpe3RoaXMuc2hhcmVkLnBvc2l0aW9uPVplfX0sRlNOb2RlOmNsYXNze25vZGVfb3BzPXt9O3N0cmVhbV9vcHM9e307cmVhZE1vZGU9MzY1O3dyaXRlTW9kZT0x''@;'; put 'put ''NDY7bW91bnRlZD1udWxsO2NvbnN0cnVjdG9yKFplLGx0LEx0LCR0KXtaZXx8KFplPXRoaXMpLHRoaXMucGFyZW50PVplLHRoaXMubW91bnQ9WmUubW91bnQsdGhpcy5pZD1ZdC5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9bHQsdGhpcy5tb2RlPUx0LHRoaXMucmRldj0kdH1nZXQgcmVhZCgpe3Jl''@;'; put 'put ''dHVybih0aGlzLm1vZGUmdGhpcy5yZWFkTW9kZSk9PT10aGlzLnJlYWRNb2RlfXNldCByZWFkKFplKXtaZT90aGlzLm1vZGV8PXRoaXMucmVhZE1vZGU6dGhpcy5tb2RlJj1+dGhpcy5yZWFkTW9kZX1nZXQgd3JpdGUoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMud3JpdGVNb2RlKT09PXRoaXMu''@;'; put 'put ''d3JpdGVNb2RlfXNldCB3cml0ZShaZSl7WmU/dGhpcy5tb2RlfD10aGlzLndyaXRlTW9kZTp0aGlzLm1vZGUmPX50aGlzLndyaXRlTW9kZX1nZXQgaXNGb2xkZXIoKXtyZXR1cm4gWXQuaXNEaXIodGhpcy5tb2RlKX1nZXQgaXNEZXZpY2UoKXtyZXR1cm4gWXQuaXNDaHJkZXYodGhpcy5tb2Rl''@;'; put 'put ''KX19LGxvb2t1cFBhdGgoWmUsbHQ9e30pe2lmKCEoWmU9VXMucmVzb2x2ZShaZSkpKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07aWYoKGx0PU9iamVjdC5hc3NpZ24oe2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9LGx0KSkucmVjdXJzZV9jb3VudD44KXRocm93IG5ldyBZdC5F''@;'; put 'put ''cnJub0Vycm9yKDMyKTtmb3IodmFyICR0PVplLnNwbGl0KCIvIikuZmlsdGVyKGFsPT4hIWFsKSxEbj1ZdC5yb290LGNyPSIvIixScj0wO1JyPCR0Lmxlbmd0aDtScisrKXt2YXIgWHI9UnI9PT0kdC5sZW5ndGgtMTtpZihYciYmbHQucGFyZW50KWJyZWFrO2lmKERuPVl0Lmxvb2t1cE5vZGUo''@;'; put 'put ''RG4sJHRbUnJdKSxjcj1Rby5qb2luMihjciwkdFtScl0pLFl0LmlzTW91bnRwb2ludChEbikmJighWHJ8fFhyJiZsdC5mb2xsb3dfbW91bnQpJiYoRG49RG4ubW91bnRlZC5yb290KSwhWHJ8fGx0LmZvbGxvdylmb3IodmFyIGthPTA7WXQuaXNMaW5rKERuLm1vZGUpOyl7dmFyIEdvPVl0LnJl''@;'; put 'put ''YWRsaW5rKGNyKTtpZihjcj1Vcy5yZXNvbHZlKFFvLmRpcm5hbWUoY3IpLEdvKSxEbj1ZdC5sb29rdXBQYXRoKGNyLHtyZWN1cnNlX2NvdW50Omx0LnJlY3Vyc2VfY291bnQrMX0pLm5vZGUsa2ErKz40MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOmNyLG5vZGU6''@;'; put 'put ''RG59fSxnZXRQYXRoKFplKXtmb3IodmFyIGx0Ozspe2lmKFl0LmlzUm9vdChaZSkpe3ZhciBMdD1aZS5tb3VudC5tb3VudHBvaW50O3JldHVybiBsdD8iLyIhPT1MdFtMdC5sZW5ndGgtMV0/YCR7THR9LyR7bHR9YDpMdCtsdDpMdH1sdD1sdD9gJHtaZS5uYW1lfS8ke2x0fWA6WmUubmFtZSxa''@;'; put 'put ''ZT1aZS5wYXJlbnR9fSxoYXNoTmFtZShaZSxsdCl7Zm9yKHZhciBMdD0wLCR0PTA7JHQ8bHQubGVuZ3RoOyR0KyspTHQ9KEx0PDw1KS1MdCtsdC5jaGFyQ29kZUF0KCR0KXwwO3JldHVybihaZStMdD4+PjApJVl0Lm5hbWVUYWJsZS5sZW5ndGh9LGhhc2hBZGROb2RlKFplKXt2YXIgbHQ9WXQu''@;'; put 'put ''aGFzaE5hbWUoWmUucGFyZW50LmlkLFplLm5hbWUpO1plLm5hbWVfbmV4dD1ZdC5uYW1lVGFibGVbbHRdLFl0Lm5hbWVUYWJsZVtsdF09WmV9LGhhc2hSZW1vdmVOb2RlKFplKXt2YXIgbHQ9WXQuaGFzaE5hbWUoWmUucGFyZW50LmlkLFplLm5hbWUpO2lmKFl0Lm5hbWVUYWJsZVtsdF09PT1a''@;'; put 'put ''ZSlZdC5uYW1lVGFibGVbbHRdPVplLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgTHQ9WXQubmFtZVRhYmxlW2x0XTtMdDspe2lmKEx0Lm5hbWVfbmV4dD09PVplKXtMdC5uYW1lX25leHQ9WmUubmFtZV9uZXh0O2JyZWFrfUx0PUx0Lm5hbWVfbmV4dH19LGxvb2t1cE5vZGUoWmUsbHQpe3ZhciBM''@;'; put 'put ''dD1ZdC5tYXlMb29rdXAoWmUpO2lmKEx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKEx0KTtmb3IodmFyICR0PVl0Lmhhc2hOYW1lKFplLmlkLGx0KSxEbj1ZdC5uYW1lVGFibGVbJHRdO0RuO0RuPURuLm5hbWVfbmV4dClpZihEbi5wYXJlbnQuaWQ9PT1aZS5pZCYmRG4ubmFtZT09PWx0KXJl''@;'; put 'put ''dHVybiBEbjtyZXR1cm4gWXQubG9va3VwKFplLGx0KX0sY3JlYXRlTm9kZShaZSxsdCxMdCwkdCl7dmFyIERuPW5ldyBZdC5GU05vZGUoWmUsbHQsTHQsJHQpO3JldHVybiBZdC5oYXNoQWRkTm9kZShEbiksRG59LGRlc3Ryb3lOb2RlKFplKXtZdC5oYXNoUmVtb3ZlTm9kZShaZSl9LGlzUm9v''@;'; put 'put ''dDpaZT0+WmU9PT1aZS5wYXJlbnQsaXNNb3VudHBvaW50OlplPT4hIVplLm1vdW50ZWQsaXNGaWxlOlplPT4zMjc2OD09KDYxNDQwJlplKSxpc0RpcjpaZT0+MTYzODQ9PSg2MTQ0MCZaZSksaXNMaW5rOlplPT40MDk2MD09KDYxNDQwJlplKSxpc0NocmRldjpaZT0+ODE5Mj09KDYxNDQwJlpl''@;'; put 'put ''KSxpc0Jsa2RldjpaZT0+MjQ1NzY9PSg2MTQ0MCZaZSksaXNGSUZPOlplPT40MDk2PT0oNjE0NDAmWmUpLGlzU29ja2V0OlplPT4hKDQ5MTUyJn5aZSksZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoWmUpe3ZhciBsdD1bInIiLCJ3IiwicnciXVszJlplXTtyZXR1cm4gNTEyJlplJiYobHQrPSJ3''@;'; put 'put ''IiksbHR9LG5vZGVQZXJtaXNzaW9uczooWmUsbHQpPT5ZdC5pZ25vcmVQZXJtaXNzaW9ucz8wOmx0LmluY2x1ZGVzKCJyIikmJiEoMjkyJlplLm1vZGUpfHxsdC5pbmNsdWRlcygidyIpJiYhKDE0NiZaZS5tb2RlKXx8bHQuaW5jbHVkZXMoIngiKSYmISg3MyZaZS5tb2RlKT8yOjAsbWF5TG9v''@;'; put 'put ''a3VwOlplPT5ZdC5pc0RpcihaZS5tb2RlKT9ZdC5ub2RlUGVybWlzc2lvbnMoWmUsIngiKXx8KFplLm5vZGVfb3BzLmxvb2t1cD8wOjIpOjU0LG1heUNyZWF0ZShaZSxsdCl7dHJ5e3JldHVybiBZdC5sb29rdXBOb2RlKFplLGx0KSwyMH1jYXRjaHt9cmV0dXJuIFl0Lm5vZGVQZXJtaXNzaW9u''@;'; put 'put ''cyhaZSwid3giKX0sbWF5RGVsZXRlKFplLGx0LEx0KXt2YXIgJHQ7dHJ5eyR0PVl0Lmxvb2t1cE5vZGUoWmUsbHQpfWNhdGNoKGNyKXtyZXR1cm4gY3IuZXJybm99dmFyIERuPVl0Lm5vZGVQZXJtaXNzaW9ucyhaZSwid3giKTtpZihEbilyZXR1cm4gRG47aWYoTHQpe2lmKCFZdC5pc0Rpcigk''@;'; put 'put ''dC5tb2RlKSlyZXR1cm4gNTQ7aWYoWXQuaXNSb290KCR0KXx8WXQuZ2V0UGF0aCgkdCk9PT1ZdC5jd2QoKSlyZXR1cm4gMTB9ZWxzZSBpZihZdC5pc0RpcigkdC5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW46KFplLGx0KT0+WmU/WXQuaXNMaW5rKFplLm1vZGUpPzMyOll0Lmlz''@;'; put 'put ''RGlyKFplLm1vZGUpJiYoInIiIT09WXQuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcobHQpfHw1MTImbHQpPzMxOll0Lm5vZGVQZXJtaXNzaW9ucyhaZSxZdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhsdCkpOjQ0LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZCgpe2Zvcih2YXIgWmU9MDtaZTw9''@;'; put 'put ''WXQuTUFYX09QRU5fRkRTO1plKyspaWYoIVl0LnN0cmVhbXNbWmVdKXJldHVybiBaZTt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMyl9LGdldFN0cmVhbUNoZWNrZWQoWmUpe3ZhciBsdD1ZdC5nZXRTdHJlYW0oWmUpO2lmKCFsdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtyZXR1cm4g''@;'; put 'put ''bHR9LGdldFN0cmVhbTpaZT0+WXQuc3RyZWFtc1taZV0sY3JlYXRlU3RyZWFtOihaZSxsdD0tMSk9PihaZT1PYmplY3QuYXNzaWduKG5ldyBZdC5GU1N0cmVhbSxaZSksLTE9PWx0JiYobHQ9WXQubmV4dGZkKCkpLFplLmZkPWx0LFl0LnN0cmVhbXNbbHRdPVplLFplKSxjbG9zZVN0cmVhbSha''@;'; put 'put ''ZSl7WXQuc3RyZWFtc1taZV09bnVsbH0sZHVwU3RyZWFtKFplLGx0PS0xKXt2YXIgTHQ9WXQuY3JlYXRlU3RyZWFtKFplLGx0KTtyZXR1cm4gTHQuc3RyZWFtX29wcz8uZHVwPy4oTHQpLEx0fSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbihaZSl7dmFyIGx0PVl0LmdldERldmljZShaZS5ub2Rl''@;'; put 'put ''LnJkZXYpO1plLnN0cmVhbV9vcHM9bHQuc3RyZWFtX29wcyxaZS5zdHJlYW1fb3BzLm9wZW4/LihaZSl9LGxsc2Vlaygpe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDcwKX19LG1ham9yOlplPT5aZT4+OCxtaW5vcjpaZT0+MjU1JlplLG1ha2VkZXY6KFplLGx0KT0+WmU8PDh8bHQscmVnaXN0''@;'; put 'put ''ZXJEZXZpY2UoWmUsbHQpe1l0LmRldmljZXNbWmVdPXtzdHJlYW1fb3BzOmx0fX0sZ2V0RGV2aWNlOlplPT5ZdC5kZXZpY2VzW1plXSxnZXRNb3VudHMoWmUpe2Zvcih2YXIgbHQ9W10sTHQ9W1plXTtMdC5sZW5ndGg7KXt2YXIgJHQ9THQucG9wKCk7bHQucHVzaCgkdCksTHQucHVzaCguLi4k''@;'; put 'put ''dC5tb3VudHMpfXJldHVybiBsdH0sc3luY2ZzKFplLGx0KXsiZnVuY3Rpb24iPT10eXBlb2YgWmUmJihsdD1aZSxaZT0hMSksWXQuc3luY0ZTUmVxdWVzdHMrKyxZdC5zeW5jRlNSZXF1ZXN0cz4xJiZydChgd2FybmluZzogJHtZdC5zeW5jRlNSZXF1ZXN0c30gRlMuc3luY2ZzIG9wZXJhdGlv''@;'; put 'put ''bnMgaW4gZmxpZ2h0IGF0IG9uY2UsIHByb2JhYmx5IGp1c3QgZG9pbmcgZXh0cmEgd29ya2ApO3ZhciBMdD1ZdC5nZXRNb3VudHMoWXQucm9vdC5tb3VudCksJHQ9MDtmdW5jdGlvbiBEbihScil7cmV0dXJuIFl0LnN5bmNGU1JlcXVlc3RzLS0sbHQoUnIpfWZ1bmN0aW9uIGNyKFJyKXtpZihS''@;'; put 'put ''cilyZXR1cm4gY3IuZXJyb3JlZD92b2lkIDA6KGNyLmVycm9yZWQ9ITAsRG4oUnIpKTsrKyR0Pj1MdC5sZW5ndGgmJkRuKG51bGwpfUx0LmZvckVhY2goUnI9PntpZighUnIudHlwZS5zeW5jZnMpcmV0dXJuIGNyKG51bGwpO1JyLnR5cGUuc3luY2ZzKFJyLFplLGNyKX0pfSxtb3VudChaZSxs''@;'; put 'put ''dCxMdCl7dmFyIGNyLCR0PSIvIj09PUx0LERuPSFMdDtpZigkdCYmWXQucm9vdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMCk7aWYoISR0JiYhRG4pe3ZhciBScj1ZdC5sb29rdXBQYXRoKEx0LHtmb2xsb3dfbW91bnQ6ITF9KTtpZihMdD1Sci5wYXRoLFl0LmlzTW91bnRwb2ludChjcj1S''@;'; put 'put ''ci5ub2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMCk7aWYoIVl0LmlzRGlyKGNyLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU0KX12YXIgWHI9e3R5cGU6WmUsb3B0czpsdCxtb3VudHBvaW50Okx0LG1vdW50czpbXX0sa2E9WmUubW91bnQoWHIpO3JldHVybiBrYS5tb3Vu''@;'; put 'put ''dD1YcixYci5yb290PWthLCR0P1l0LnJvb3Q9a2E6Y3ImJihjci5tb3VudGVkPVhyLGNyLm1vdW50JiZjci5tb3VudC5tb3VudHMucHVzaChYcikpLGthfSx1bm1vdW50KFplKXt2YXIgbHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93X21vdW50OiExfSk7aWYoIVl0LmlzTW91bnRwb2ludChs''@;'; put 'put ''dC5ub2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIEx0PWx0Lm5vZGUsJHQ9THQubW91bnRlZCxEbj1ZdC5nZXRNb3VudHMoJHQpO09iamVjdC5rZXlzKFl0Lm5hbWVUYWJsZSkuZm9yRWFjaChScj0+e2Zvcih2YXIgWHI9WXQubmFtZVRhYmxlW1JyXTtYcjspe3ZhciBrYT1Y''@;'; put 'put ''ci5uYW1lX25leHQ7RG4uaW5jbHVkZXMoWHIubW91bnQpJiZZdC5kZXN0cm95Tm9kZShYciksWHI9a2F9fSksTHQubW91bnRlZD1udWxsO3ZhciBjcj1MdC5tb3VudC5tb3VudHMuaW5kZXhPZigkdCk7THQubW91bnQubW91bnRzLnNwbGljZShjciwxKX0sbG9va3VwOihaZSxsdCk9PlplLm5v''@;'; put 'put ''ZGVfb3BzLmxvb2t1cChaZSxsdCksbWtub2QoWmUsbHQsTHQpe3ZhciBEbj1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlLGNyPVFvLmJhc2VuYW1lKFplKTtpZighY3J8fCIuIj09PWNyfHwiLi4iPT09Y3IpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBScj1ZdC5t''@;'; put 'put ''YXlDcmVhdGUoRG4sY3IpO2lmKFJyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKFJyKTtpZighRG4ubm9kZV9vcHMubWtub2QpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO3JldHVybiBEbi5ub2RlX29wcy5ta25vZChEbixjcixsdCxMdCl9LHN0YXRmcyhaZSl7dmFyIGx0PXtic2l6ZTo0''@;'; put 'put ''MDk2LGZyc2l6ZTo0MDk2LGJsb2NrczoxZTYsYmZyZWU6NWU1LGJhdmFpbDo1ZTUsZmlsZXM6WXQubmV4dElub2RlLGZmcmVlOll0Lm5leHRJbm9kZS0xLGZzaWQ6NDIsZmxhZ3M6MixuYW1lbGVuOjI1NX0sTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSkubm9kZTtyZXR1cm4gTHQ/''@;'; put 'put ''Lm5vZGVfb3BzLnN0YXRmcyYmT2JqZWN0LmFzc2lnbihsdCxMdC5ub2RlX29wcy5zdGF0ZnMoTHQubW91bnQub3B0cy5yb290KSksbHR9LGNyZWF0ZTooWmUsbHQ9NDM4KT0+KGx0Jj00MDk1LFl0Lm1rbm9kKFplLGx0fD0zMjc2OCwwKSksbWtkaXI6KFplLGx0PTUxMSk9PihsdCY9MTAyMyxZ''@;'; put 'put ''dC5ta25vZChaZSxsdHw9MTYzODQsMCkpLG1rZGlyVHJlZShaZSxsdCl7Zm9yKHZhciBMdD1aZS5zcGxpdCgiLyIpLCR0PSIiLERuPTA7RG48THQubGVuZ3RoOysrRG4paWYoTHRbRG5dKXskdCs9Ii8iK0x0W0RuXTt0cnl7WXQubWtkaXIoJHQsbHQpfWNhdGNoKGNyKXtpZigyMCE9Y3IuZXJy''@;'; put 'put ''bm8pdGhyb3cgY3J9fX0sbWtkZXY6KFplLGx0LEx0KT0+KHR5cGVvZiBMdD4idSImJihMdD1sdCxsdD00MzgpLFl0Lm1rbm9kKFplLGx0fD04MTkyLEx0KSksc3ltbGluayhaZSxsdCl7aWYoIVVzLnJlc29sdmUoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTt2YXIgJHQ9WXQubG9v''@;'; put 'put ''a3VwUGF0aChsdCx7cGFyZW50OiEwfSkubm9kZTtpZighJHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciBEbj1Rby5iYXNlbmFtZShsdCksY3I9WXQubWF5Q3JlYXRlKCR0LERuKTtpZihjcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihjcik7aWYoISR0Lm5vZGVfb3BzLnN5bWxp''@;'; put 'put ''bmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO3JldHVybiAkdC5ub2RlX29wcy5zeW1saW5rKCR0LERuLFplKX0scmVuYW1lKFplLGx0KXt2YXIgWHIsa2EsTHQ9UW8uZGlybmFtZShaZSksJHQ9UW8uZGlybmFtZShsdCksRG49UW8uYmFzZW5hbWUoWmUpLGNyPVFvLmJhc2VuYW1lKGx0''@;'; put 'put ''KTtpZihYcj1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlLGthPVl0Lmxvb2t1cFBhdGgobHQse3BhcmVudDohMH0pLm5vZGUsIVhyfHwha2EpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKFhyLm1vdW50IT09a2EubW91bnQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3Io''@;'; put 'put ''NzUpO3ZhciBhbCxHbz1ZdC5sb29rdXBOb2RlKFhyLERuKSxIcz1Vcy5yZWxhdGl2ZShaZSwkdCk7aWYoIi4iIT09SHMuY2hhckF0KDApKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZigiLiIhPT0oSHM9VXMucmVsYXRpdmUobHQsTHQpKS5jaGFyQXQoMCkpdGhyb3cgbmV3IFl0LkVy''@;'; put 'put ''cm5vRXJyb3IoNTUpO3RyeXthbD1ZdC5sb29rdXBOb2RlKGthLGNyKX1jYXRjaHt9aWYoR28hPT1hbCl7dmFyIGdzPVl0LmlzRGlyKEdvLm1vZGUpLHhvPVl0Lm1heURlbGV0ZShYcixEbixncyk7aWYoeG8pdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoeG8pO2lmKHhvPWFsP1l0Lm1heURlbGV0''@;'; put 'put ''ZShrYSxjcixncyk6WXQubWF5Q3JlYXRlKGthLGNyKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcih4byk7aWYoIVhyLm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7aWYoWXQuaXNNb3VudHBvaW50KEdvKXx8YWwmJll0LmlzTW91bnRwb2ludChhbCkpdGhyb3cg''@;'; put 'put ''bmV3IFl0LkVycm5vRXJyb3IoMTApO2lmKGthIT09WHImJih4bz1ZdC5ub2RlUGVybWlzc2lvbnMoWHIsInciKSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoeG8pO1l0Lmhhc2hSZW1vdmVOb2RlKEdvKTt0cnl7WHIubm9kZV9vcHMucmVuYW1lKEdvLGthLGNyKSxHby5wYXJlbnQ9a2F9Y2F0''@;'; put 'put ''Y2goWHMpe3Rocm93IFhzfWZpbmFsbHl7WXQuaGFzaEFkZE5vZGUoR28pfX19LHJtZGlyKFplKXt2YXIgTHQ9WXQubG9va3VwUGF0aChaZSx7cGFyZW50OiEwfSkubm9kZSwkdD1Rby5iYXNlbmFtZShaZSksRG49WXQubG9va3VwTm9kZShMdCwkdCksY3I9WXQubWF5RGVsZXRlKEx0LCR0LCEw''@;'; put 'put ''KTtpZihjcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihjcik7aWYoIUx0Lm5vZGVfb3BzLnJtZGlyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtpZihZdC5pc01vdW50cG9pbnQoRG4pKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtMdC5ub2RlX29wcy5ybWRpcihMdCwkdCksWXQu''@;'; put 'put ''ZGVzdHJveU5vZGUoRG4pfSxyZWFkZGlyKFplKXt2YXIgTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSkubm9kZTtpZighTHQubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NCk7cmV0dXJuIEx0Lm5vZGVfb3BzLnJlYWRkaXIoTHQpfSx1bmxpbmsoWmUp''@;'; put 'put ''e3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCFMdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7dmFyICR0PVFvLmJhc2VuYW1lKFplKSxEbj1ZdC5sb29rdXBOb2RlKEx0LCR0KSxjcj1ZdC5tYXlEZWxldGUoTHQsJHQsITEpO2lmKGNyKXRocm93IG5l''@;'; put 'put ''dyBZdC5FcnJub0Vycm9yKGNyKTtpZighTHQubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtpZihZdC5pc01vdW50cG9pbnQoRG4pKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtMdC5ub2RlX29wcy51bmxpbmsoTHQsJHQpLFl0LmRlc3Ryb3lOb2RlKERu''@;'; put 'put ''KX0scmVhZGxpbmsoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplKS5ub2RlO2lmKCFMdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoIUx0Lm5vZGVfb3BzLnJlYWRsaW5rKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gTHQubm9kZV9vcHMucmVhZGxpbmsoTHQp''@;'; put 'put ''fSxzdGF0KFplLGx0KXt2YXIgJHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFsdH0pLm5vZGU7aWYoISR0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtpZighJHQubm9kZV9vcHMuZ2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7cmV0dXJuICR0Lm5vZGVfb3BzLmdl''@;'; put 'put ''dGF0dHIoJHQpfSxsc3RhdDpaZT0+WXQuc3RhdChaZSwhMCksY2htb2QoWmUsbHQsTHQpe3ZhciAkdDtpZighKCR0PSJzdHJpbmciPT10eXBlb2YgWmU/WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFMdH0pLm5vZGU6WmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IFl0LkVycm5vRXJy''@;'; put 'put ''b3IoNjMpOyR0Lm5vZGVfb3BzLnNldGF0dHIoJHQse21vZGU6NDA5NSZsdHwtNDA5NiYkdC5tb2RlLHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG1vZChaZSxsdCl7WXQuY2htb2QoWmUsbHQsITApfSxmY2htb2QoWmUsbHQpe3ZhciBMdD1ZdC5nZXRTdHJlYW1DaGVja2VkKFplKTtZdC5j''@;'; put 'put ''aG1vZChMdC5ub2RlLGx0KX0sY2hvd24oWmUsbHQsTHQsJHQpe3ZhciBEbjtpZighKERuPSJzdHJpbmciPT10eXBlb2YgWmU/WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEkdH0pLm5vZGU6WmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO0RuLm5vZGVf''@;'; put 'put ''b3BzLnNldGF0dHIoRG4se3RpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG93bihaZSxsdCxMdCl7WXQuY2hvd24oWmUsbHQsTHQsITApfSxmY2hvd24oWmUsbHQsTHQpe3ZhciAkdD1ZdC5nZXRTdHJlYW1DaGVja2VkKFplKTtZdC5jaG93bigkdC5ub2RlLGx0LEx0KX0sdHJ1bmNhdGUoWmUs''@;'; put 'put ''bHQpe2lmKGx0PDApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBMdDtpZighKEx0PSJzdHJpbmciPT10eXBlb2YgWmU/WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSkubm9kZTpaZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7aWYoWXQu''@;'; put 'put ''aXNEaXIoTHQubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzEpO2lmKCFZdC5pc0ZpbGUoTHQubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBEbj1ZdC5ub2RlUGVybWlzc2lvbnMoTHQsInciKTtpZihEbil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihEbik7THQu''@;'; put 'put ''bm9kZV9vcHMuc2V0YXR0cihMdCx7c2l6ZTpsdCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxmdHJ1bmNhdGUoWmUsbHQpe3ZhciBMdD1ZdC5nZXRTdHJlYW1DaGVja2VkKFplKTtpZighKDIwOTcxNTUmTHQuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtZdC50cnVuY2F0ZShM''@;'; put 'put ''dC5ub2RlLGx0KX0sdXRpbWUoWmUsbHQsTHQpe3ZhciBEbj1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5ub2RlO0RuLm5vZGVfb3BzLnNldGF0dHIoRG4se3RpbWVzdGFtcDpNYXRoLm1heChsdCxMdCl9KX0sb3BlbihaZSxsdCxMdD00Mzgpe2lmKCIiPT09WmUpdGhyb3cgbmV3IFl0''@;'; put 'put ''LkVycm5vRXJyb3IoNDQpO3ZhciAkdDtpZihsdD0ic3RyaW5nIj09dHlwZW9mIGx0PyhaZT0+e3ZhciBMdD17cjowLCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfVtaZV07aWYodHlwZW9mIEx0PiJ1Iil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZSBvcGVuIG1v''@;'; put 'put ''ZGU6ICR7WmV9YCk7cmV0dXJuIEx0fSkobHQpOmx0LEx0PTY0Jmx0PzQwOTUmTHR8MzI3Njg6MCwib2JqZWN0Ij09dHlwZW9mIFplKSR0PVplO2Vsc2V7WmU9UW8ubm9ybWFsaXplKFplKTt0cnl7JHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEoMTMxMDcyJmx0KX0pLm5vZGV9Y2F0Y2h7''@;'; put 'put ''fX12YXIgY3I9ITE7aWYoNjQmbHQpaWYoJHQpe2lmKDEyOCZsdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyMCl9ZWxzZSAkdD1ZdC5ta25vZChaZSxMdCwwKSxjcj0hMDtpZighJHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKFl0LmlzQ2hyZGV2KCR0Lm1vZGUpJiYobHQmPS01''@;'; put 'put ''MTMpLDY1NTM2Jmx0JiYhWXQuaXNEaXIoJHQubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpO2lmKCFjcil7dmFyIFJyPVl0Lm1heU9wZW4oJHQsbHQpO2lmKFJyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKFJyKX01MTImbHQmJiFjciYmWXQudHJ1bmNhdGUoJHQsMCksbHQmPS0x''@;'; put 'put ''MzE3MTM7dmFyIFhyPVl0LmNyZWF0ZVN0cmVhbSh7bm9kZTokdCxwYXRoOll0LmdldFBhdGgoJHQpLGZsYWdzOmx0LHNlZWthYmxlOiEwLHBvc2l0aW9uOjAsc3RyZWFtX29wczokdC5zdHJlYW1fb3BzLHVuZ290dGVuOltdLGVycm9yOiExfSk7cmV0dXJuIFhyLnN0cmVhbV9vcHMub3BlbiYm''@;'; put 'put ''WHIuc3RyZWFtX29wcy5vcGVuKFhyKSxYcn0sY2xvc2UoWmUpe2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtaZS5nZXRkZW50cyYmKFplLmdldGRlbnRzPW51bGwpO3RyeXtaZS5zdHJlYW1fb3BzLmNsb3NlJiZaZS5zdHJlYW1fb3BzLmNsb3NlKFplKX1j''@;'; put 'put ''YXRjaChsdCl7dGhyb3cgbHR9ZmluYWxseXtZdC5jbG9zZVN0cmVhbShaZS5mZCl9WmUuZmQ9bnVsbH0saXNDbG9zZWQ6WmU9Pm51bGw9PT1aZS5mZCxsbHNlZWsoWmUsbHQsTHQpe2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZighWmUuc2Vla2FibGV8''@;'; put 'put ''fCFaZS5zdHJlYW1fb3BzLmxsc2Vlayl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3MCk7aWYoMCE9THQmJjEhPUx0JiYyIT1MdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFplLnBvc2l0aW9uPVplLnN0cmVhbV9vcHMubGxzZWVrKFplLGx0LEx0KSxaZS51bmdvdHRlbj1b''@;'; put 'put ''XSxaZS5wb3NpdGlvbn0scmVhZChaZSxsdCxMdCwkdCxEbil7aWYoJHQ8MHx8RG48MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7aWYoWXQuaXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKDE9PSgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJy''@;'; put 'put ''bm9FcnJvcig4KTtpZihZdC5pc0RpcihaZS5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMxKTtpZighWmUuc3RyZWFtX29wcy5yZWFkKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTt2YXIgY3I9dHlwZW9mIERuPCJ1IjtpZihjcil7aWYoIVplLnNlZWthYmxlKXRocm93''@;'; put 'put ''IG5ldyBZdC5FcnJub0Vycm9yKDcwKX1lbHNlIERuPVplLnBvc2l0aW9uO3ZhciBScj1aZS5zdHJlYW1fb3BzLnJlYWQoWmUsbHQsTHQsJHQsRG4pO3JldHVybiBjcnx8KFplLnBvc2l0aW9uKz1SciksUnJ9LHdyaXRlKFplLGx0LEx0LCR0LERuLGNyKXtpZigkdDwwfHxEbjwwKXRocm93IG5l''@;'; put 'put ''dyBZdC5FcnJub0Vycm9yKDI4KTtpZihZdC5pc0Nsb3NlZChaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoISgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZihZdC5pc0RpcihaZS5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9y''@;'; put 'put ''KDMxKTtpZighWmUuc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7WmUuc2Vla2FibGUmJjEwMjQmWmUuZmxhZ3MmJll0Lmxsc2VlayhaZSwwLDIpO3ZhciBScj10eXBlb2YgRG48InUiO2lmKFJyKXtpZighWmUuc2Vla2FibGUpdGhyb3cgbmV3IFl0LkVycm5v''@;'; put 'put ''RXJyb3IoNzApfWVsc2UgRG49WmUucG9zaXRpb247dmFyIFhyPVplLnN0cmVhbV9vcHMud3JpdGUoWmUsbHQsTHQsJHQsRG4sY3IpO3JldHVybiBScnx8KFplLnBvc2l0aW9uKz1YciksWHJ9LGFsbG9jYXRlKFplLGx0LEx0KXtpZihZdC5pc0Nsb3NlZChaZSkpdGhyb3cgbmV3IFl0LkVycm5v''@;'; put 'put ''RXJyb3IoOCk7aWYobHQ8MHx8THQ8PTApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO2lmKCEoMjA5NzE1NSZaZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoIVl0LmlzRmlsZShaZS5ub2RlLm1vZGUpJiYhWXQuaXNEaXIoWmUubm9kZS5tb2RlKSl0aHJvdyBuZXcg''@;'; put 'put ''WXQuRXJybm9FcnJvcig0Myk7aWYoIVplLnN0cmVhbV9vcHMuYWxsb2NhdGUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTM4KTtaZS5zdHJlYW1fb3BzLmFsbG9jYXRlKFplLGx0LEx0KX0sbW1hcChaZSxsdCxMdCwkdCxEbil7aWYoMiYkdCYmISgyJkRuKSYmMiE9KDIwOTcxNTUmWmUuZmxh''@;'; put 'put ''Z3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIpO2lmKDE9PSgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyKTtpZighWmUuc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTtpZighbHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3Io''@;'; put 'put ''MjgpO3JldHVybiBaZS5zdHJlYW1fb3BzLm1tYXAoWmUsbHQsTHQsJHQsRG4pfSxtc3luYzooWmUsbHQsTHQsJHQsRG4pPT5aZS5zdHJlYW1fb3BzLm1zeW5jP1plLnN0cmVhbV9vcHMubXN5bmMoWmUsbHQsTHQsJHQsRG4pOjAsaW9jdGwoWmUsbHQsTHQpe2lmKCFaZS5zdHJlYW1fb3BzLmlv''@;'; put 'put ''Y3RsKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU5KTtyZXR1cm4gWmUuc3RyZWFtX29wcy5pb2N0bChaZSxsdCxMdCl9LHJlYWRGaWxlKFplLGx0PXt9KXtpZihsdC5mbGFncz1sdC5mbGFnc3x8MCxsdC5lbmNvZGluZz1sdC5lbmNvZGluZ3x8ImJpbmFyeSIsInV0ZjgiIT09bHQuZW5jb2Rp''@;'; put 'put ''bmcmJiJiaW5hcnkiIT09bHQuZW5jb2RpbmcpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVuY29kaW5nIHR5cGUgIiR7bHQuZW5jb2Rpbmd9ImApO3ZhciBMdCwkdD1ZdC5vcGVuKFplLGx0LmZsYWdzKSxjcj1ZdC5zdGF0KFplKS5zaXplLFJyPW5ldyBVaW50OEFycmF5KGNyKTtyZXR1cm4g''@;'; put 'put ''WXQucmVhZCgkdCxSciwwLGNyLDApLCJ1dGY4Ij09PWx0LmVuY29kaW5nP0x0PXFzKFJyKToiYmluYXJ5Ij09PWx0LmVuY29kaW5nJiYoTHQ9UnIpLFl0LmNsb3NlKCR0KSxMdH0sd3JpdGVGaWxlKFplLGx0LEx0PXt9KXtMdC5mbGFncz1MdC5mbGFnc3x8NTc3O3ZhciAkdD1ZdC5vcGVuKFpl''@;'; put 'put ''LEx0LmZsYWdzLEx0Lm1vZGUpO2lmKCJzdHJpbmciPT10eXBlb2YgbHQpe3ZhciBEbj1uZXcgVWludDhBcnJheShlcyhsdCkrMSksY3I9RTEobHQsRG4sMCxEbi5sZW5ndGgpO1l0LndyaXRlKCR0LERuLDAsY3Isdm9pZCAwLEx0LmNhbk93bil9ZWxzZXtpZighQXJyYXlCdWZmZXIuaXNWaWV3''@;'; put 'put ''KGx0KSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO1l0LndyaXRlKCR0LGx0LDAsbHQuYnl0ZUxlbmd0aCx2b2lkIDAsTHQuY2FuT3duKX1ZdC5jbG9zZSgkdCl9LGN3ZDooKT0+WXQuY3VycmVudFBhdGgsY2hkaXIoWmUpe3ZhciBsdD1ZdC5sb29rdXBQYXRoKFpl''@;'; put 'put ''LHtmb2xsb3c6ITB9KTtpZihudWxsPT09bHQubm9kZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoIVl0LmlzRGlyKGx0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpO3ZhciBMdD1ZdC5ub2RlUGVybWlzc2lvbnMobHQubm9kZSwieCIpO2lmKEx0KXRocm93''@;'; put 'put ''IG5ldyBZdC5FcnJub0Vycm9yKEx0KTtZdC5jdXJyZW50UGF0aD1sdC5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKXtZdC5ta2RpcigiL3RtcCIpLFl0Lm1rZGlyKCIvaG9tZSIpLFl0Lm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlcygpe1l0Lm1r''@;'; put 'put ''ZGlyKCIvZGV2IiksWXQucmVnaXN0ZXJEZXZpY2UoWXQubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOigkdCxEbixjcixScixYcik9PlJyLGxsc2VlazooKT0+MH0pLFl0Lm1rZGV2KCIvZGV2L251bGwiLFl0Lm1ha2VkZXYoMSwzKSksZDQucmVnaXN0ZXIoWXQubWFrZWRldig1LDAp''@;'; put 'put ''LGQ0LmRlZmF1bHRfdHR5X29wcyksZDQucmVnaXN0ZXIoWXQubWFrZWRldig2LDApLGQ0LmRlZmF1bHRfdHR5MV9vcHMpLFl0Lm1rZGV2KCIvZGV2L3R0eSIsWXQubWFrZWRldig1LDApKSxZdC5ta2RldigiL2Rldi90dHkxIixZdC5tYWtlZGV2KDYsMCkpO3ZhciBaZT1uZXcgVWludDhBcnJh''@;'; put 'put ''eSgxMDI0KSxsdD0wLEx0PSgpPT4oMD09PWx0JiYobHQ9YWQoWmUpLmJ5dGVMZW5ndGgpLFplWy0tbHRdKTtZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLEx0KSxZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixMdCksWXQubWtkaXIoIi9kZXYvc2htIiksWXQubWtkaXIo''@;'; put 'put ''Ii9kZXYvc2htL3RtcCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKXtZdC5ta2RpcigiL3Byb2MiKTt2YXIgWmU9WXQubWtkaXIoIi9wcm9jL3NlbGYiKTtZdC5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLFl0Lm1vdW50KHttb3VudCgpe3ZhciBsdD1ZdC5jcmVhdGVOb2RlKFplLCJmZCIs''@;'; put 'put ''MTY4OTUsNzMpO3JldHVybiBsdC5ub2RlX29wcz17bG9va3VwKEx0LCR0KXt2YXIgY3I9WXQuZ2V0U3RyZWFtQ2hlY2tlZCgrJHQpLFJyPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDoiZmFrZSJ9LG5vZGVfb3BzOntyZWFkbGluazooKT0+Y3IucGF0aH19O3JldHVybiBSci5wYXJl''@;'; put 'put ''bnQ9UnIsUnJ9fSxsdH19LHt9LCIvcHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtcyhaZSxsdCxMdCl7WmU/WXQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkaW4iLFplKTpZdC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxsdD9ZdC5jcmVhdGVEZXZpY2UoIi9k''@;'; put 'put ''ZXYiLCJzdGRvdXQiLG51bGwsbHQpOll0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxMdD9ZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsTHQpOll0LnN5bWxpbmsoIi9kZXYvdHR5MSIsIi9kZXYvc3RkZXJyIiksWXQub3BlbigiL2Rldi9zdGRpbiIsMCks''@;'; put 'put ''WXQub3BlbigiL2Rldi9zdGRvdXQiLDEpLFl0Lm9wZW4oIi9kZXYvc3RkZXJyIiwxKX0sc3RhdGljSW5pdCgpe1l0Lm5hbWVUYWJsZT1uZXcgQXJyYXkoNDA5NiksWXQubW91bnQoJGEse30sIi8iKSxZdC5jcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKSxZdC5jcmVhdGVEZWZhdWx0RGV2aWNl''@;'; put 'put ''cygpLFl0LmNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllcygpLFl0LmZpbGVzeXN0ZW1zPXtNRU1GUzokYX19LGluaXQoWmUsbHQsTHQpe1l0LmluaXRpYWxpemVkPSEwLFl0LmNyZWF0ZVN0YW5kYXJkU3RyZWFtcyhaZSxsdCxMdCl9LHF1aXQoKXtZdC5pbml0aWFsaXplZD0hMTtmb3IodmFyIFpl''@;'; put 'put ''PTA7WmU8WXQuc3RyZWFtcy5sZW5ndGg7WmUrKyl7dmFyIGx0PVl0LnN0cmVhbXNbWmVdO2x0JiZZdC5jbG9zZShsdCl9fSxmaW5kT2JqZWN0KFplLGx0KXt2YXIgTHQ9WXQuYW5hbHl6ZVBhdGgoWmUsbHQpO3JldHVybiBMdC5leGlzdHM/THQub2JqZWN0Om51bGx9LGFuYWx5emVQYXRoKFpl''@;'; put 'put ''LGx0KXt0cnl7WmU9KEx0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohbHR9KSkucGF0aH1jYXRjaHt9dmFyICR0PXtpc1Jvb3Q6ITEsZXhpc3RzOiExLGVycm9yOjAsbmFtZTpudWxsLHBhdGg6bnVsbCxvYmplY3Q6bnVsbCxwYXJlbnRFeGlzdHM6ITEscGFyZW50UGF0aDpudWxsLHBhcmVu''@;'; put 'put ''dE9iamVjdDpudWxsfTt0cnl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pOyR0LnBhcmVudEV4aXN0cz0hMCwkdC5wYXJlbnRQYXRoPUx0LnBhdGgsJHQucGFyZW50T2JqZWN0PUx0Lm5vZGUsJHQubmFtZT1Rby5iYXNlbmFtZShaZSksTHQ9WXQubG9va3VwUGF0aChaZSx7''@;'; put 'put ''Zm9sbG93OiFsdH0pLCR0LmV4aXN0cz0hMCwkdC5wYXRoPUx0LnBhdGgsJHQub2JqZWN0PUx0Lm5vZGUsJHQubmFtZT1MdC5ub2RlLm5hbWUsJHQuaXNSb290PSIvIj09PUx0LnBhdGh9Y2F0Y2goRG4peyR0LmVycm9yPURuLmVycm5vfXJldHVybiAkdH0sY3JlYXRlUGF0aChaZSxsdCxMdCwk''@;'; put 'put ''dCl7WmU9InN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKTtmb3IodmFyIERuPWx0LnNwbGl0KCIvIikucmV2ZXJzZSgpO0RuLmxlbmd0aDspe3ZhciBjcj1Ebi5wb3AoKTtpZihjcil7dmFyIFJyPVFvLmpvaW4yKFplLGNyKTt0cnl7WXQubWtkaXIoUnIpfWNhdGNoe31aZT1S''@;'; put 'put ''cn19cmV0dXJuIFJyfSxjcmVhdGVGaWxlKFplLGx0LEx0LCR0LERuKXt2YXIgY3I9UW8uam9pbjIoInN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKSxsdCksUnI9akEoJHQsRG4pO3JldHVybiBZdC5jcmVhdGUoY3IsUnIpfSxjcmVhdGVEYXRhRmlsZShaZSxsdCxMdCwkdCxE''@;'; put 'put ''bixjcil7dmFyIFJyPWx0O1plJiYoWmU9InN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKSxScj1sdD9Rby5qb2luMihaZSxsdCk6WmUpO3ZhciBYcj1qQSgkdCxEbiksa2E9WXQuY3JlYXRlKFJyLFhyKTtpZihMdCl7aWYoInN0cmluZyI9PXR5cGVvZiBMdCl7Zm9yKHZhciBH''@;'; put 'put ''bz1uZXcgQXJyYXkoTHQubGVuZ3RoKSxIcz0wLGFsPUx0Lmxlbmd0aDtIczxhbDsrK0hzKUdvW0hzXT1MdC5jaGFyQ29kZUF0KEhzKTtMdD1Hb31ZdC5jaG1vZChrYSwxNDZ8WHIpO3ZhciBncz1ZdC5vcGVuKGthLDU3Nyk7WXQud3JpdGUoZ3MsTHQsMCxMdC5sZW5ndGgsMCxjciksWXQuY2xv''@;'; put 'put ''c2UoZ3MpLFl0LmNobW9kKGthLFhyKX19LGNyZWF0ZURldmljZShaZSxsdCxMdCwkdCl7dmFyIERuPVFvLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgWmU/WmU6WXQuZ2V0UGF0aChaZSksbHQpLGNyPWpBKCEhTHQsISEkdCk7WXQuY3JlYXRlRGV2aWNlLm1ham9yPz89NjQ7dmFyIFJyPVl0Lm1h''@;'; put 'put ''a2VkZXYoWXQuY3JlYXRlRGV2aWNlLm1ham9yKyssMCk7cmV0dXJuIFl0LnJlZ2lzdGVyRGV2aWNlKFJyLHtvcGVuKFhyKXtYci5zZWVrYWJsZT0hMX0sY2xvc2UoWHIpeyR0Py5idWZmZXI/Lmxlbmd0aCYmJHQoMTApfSxyZWFkKFhyLGthLEdvLEhzLGFsKXtmb3IodmFyIGdzPTAseG89MDt4''@;'; put 'put ''bzxIczt4bysrKXt2YXIgWHM7dHJ5e1hzPUx0KCl9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PVhzJiYwPT09Z3MpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNik7aWYobnVsbD09WHMpYnJlYWs7Z3MrKyxrYVtHbyt4b109WHN9cmV0dXJuIGdzJiYoWHIu''@;'; put 'put ''bm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksZ3N9LHdyaXRlKFhyLGthLEdvLEhzLGFsKXtmb3IodmFyIGdzPTA7Z3M8SHM7Z3MrKyl0cnl7JHQoa2FbR28rZ3NdKX1jYXRjaHt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOSl9cmV0dXJuIEhzJiYoWHIubm9kZS50aW1lc3RhbXA9RGF0ZS5u''@;'; put 'put ''b3coKSksZ3N9fSksWXQubWtkZXYoRG4sY3IsUnIpfSxmb3JjZUxvYWRGaWxlKFplKXtpZihaZS5pc0RldmljZXx8WmUuaXNGb2xkZXJ8fFplLmxpbmt8fFplLmNvbnRlbnRzKXJldHVybiEwO2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhyb3cgbmV3IEVycm9yKCJMYXp5IGxvYWRp''@;'; put 'put ''bmcgc2hvdWxkIGhhdmUgYmVlbiBwZXJmb3JtZWQgKGNvbnRlbnRzIHNldCkgaW4gY3JlYXRlTGF6eUZpbGUsIGJ1dCBpdCB3YXMgbm90LiBMYXp5IGxvYWRpbmcgb25seSB3b3JrcyBpbiB3ZWIgd29ya2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIG9u''@;'; put 'put ''IHRoZSBtYWluIHRocmVhZC4iKTt0cnl7WmUuY29udGVudHM9QmUoWmUudXJsKSxaZS51c2VkQnl0ZXM9WmUuY29udGVudHMubGVuZ3RofWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX19LGNyZWF0ZUxhenlGaWxlKFplLGx0LEx0LCR0LERuKXtpZih0eXBlb2YgWE1MSHR0cFJl''@;'; put 'put ''cXVlc3Q8InUiKXRocm93IkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiO3ZhciBYcixrYT1ZdC5jcmVhdGVGaWxlKFplLGx0LFhy''@;'; put 'put ''PXtpc0RldmljZTohMSx1cmw6THR9LCR0LERuKTtYci5jb250ZW50cz9rYS5jb250ZW50cz1Yci5jb250ZW50czpYci51cmwmJihrYS5jb250ZW50cz1udWxsLGthLnVybD1Yci51cmwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGthLHt1c2VkQnl0ZXM6e2dldDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmNvbnRlbnRzLmxlbmd0aH19fSk7dmFyIEdvPXt9O2Z1bmN0aW9uIGFsKGdzLHhvLFhzLEExLFQzKXt2YXIgV2g9Z3Mubm9kZS5jb250ZW50cztpZihUMz49V2gubGVuZ3RoKXJldHVybiAwO3ZhciBBMz1NYXRoLm1pbihXaC5sZW5ndGgtVDMsQTEpO2lmKFdoLnNsaWNlKWZvcih2''@;'; put 'put ''YXIgazM9MDtrMzxBMztrMysrKXhvW1hzK2szXT1XaFtUMytrM107ZWxzZSBmb3IoazM9MDtrMzxBMztrMysrKXhvW1hzK2szXT1XaC5nZXQoVDMrazMpO3JldHVybiBBM31yZXR1cm4gT2JqZWN0LmtleXMoa2Euc3RyZWFtX29wcykuZm9yRWFjaChncz0+e3ZhciB4bz1rYS5zdHJlYW1fb3Bz''@;'; put 'put ''W2dzXTtHb1tnc109KC4uLlhzKT0+KFl0LmZvcmNlTG9hZEZpbGUoa2EpLHhvKC4uLlhzKSl9KSxHby5yZWFkPShncyx4byxYcyxBMSxUMyk9PihZdC5mb3JjZUxvYWRGaWxlKGthKSxhbChncyx4byxYcyxBMSxUMykpLEdvLm1tYXA9KGdzLHhvLFhzLEExLFQzKT0+e1l0LmZvcmNlTG9hZEZp''@;'; put 'put ''bGUoa2EpO3ZhciBXaD1VTih4byk7aWYoIVdoKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gYWwoZ3MsdG4sV2gseG8sWHMpLHtwdHI6V2gsYWxsb2NhdGVkOiEwfX0sa2Euc3RyZWFtX29wcz1HbyxrYX19LHYwPShaZSxsdCk9PlplP3FzKE1uLFplLGx0KToiIixacz17REVG''@;'; put 'put ''QVVMVF9QT0xMTUFTSzo1LGNhbGN1bGF0ZUF0KFplLGx0LEx0KXtpZihRby5pc0FicyhsdCkpcmV0dXJuIGx0O3ZhciAkdDtpZigkdD0tMTAwPT09WmU/WXQuY3dkKCk6WnMuZ2V0U3RyZWFtRnJvbUZEKFplKS5wYXRoLDA9PWx0Lmxlbmd0aCl7aWYoIUx0KXRocm93IG5ldyBZdC5FcnJub0Vy''@;'; put 'put ''cm9yKDQ0KTtyZXR1cm4gJHR9cmV0dXJuIFFvLmpvaW4yKCR0LGx0KX0sZG9TdGF0KFplLGx0LEx0KXt2YXIgJHQ9WmUobHQpO21yW0x0Pj4yXT0kdC5kZXYsbXJbTHQrND4+Ml09JHQubW9kZSxHbltMdCs4Pj4yXT0kdC5ubGluayxtcltMdCsxMj4+Ml09JHQudWlkLG1yW0x0KzE2Pj4yXT0k''@;'; put 'put ''dC5naWQsbXJbTHQrMjA+PjJdPSR0LnJkZXYsYWE9WyR0LnNpemU+Pj4wLChacj0kdC5zaXplLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCsy''@;'; put 'put ''ND4+Ml09YWFbMF0sbXJbTHQrMjg+PjJdPWFhWzFdLG1yW0x0KzMyPj4yXT00MDk2LG1yW0x0KzM2Pj4yXT0kdC5ibG9ja3M7dmFyIERuPSR0LmF0aW1lLmdldFRpbWUoKSxjcj0kdC5tdGltZS5nZXRUaW1lKCksUnI9JHQuY3RpbWUuZ2V0VGltZSgpO3JldHVybiBhYT1bTWF0aC5mbG9vcihE''@;'; put 'put ''bi8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcihEbi8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCs0MD4+Ml09YWFbMF0sbXJbTHQrNDQ+''@;'; put 'put ''PjJdPWFhWzFdLEduW0x0KzQ4Pj4yXT1EbiUxZTMqMWUzKjFlMyxhYT1bTWF0aC5mbG9vcihjci8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcihjci8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+''@;'; put 'put ''Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCs1Nj4+Ml09YWFbMF0sbXJbTHQrNjA+PjJdPWFhWzFdLEduW0x0KzY0Pj4yXT1jciUxZTMqMWUzKjFlMyxhYT1bTWF0aC5mbG9vcihSci8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcihSci8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8r''@;'; put 'put ''TWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCs3Mj4+Ml09YWFbMF0sbXJbTHQrNzY+PjJdPWFhWzFdLEduW0x0KzgwPj4yXT1SciUxZTMqMWUzKjFlMyxhYT1bJHQuaW5vPj4+MCwoWnI9''@;'; put 'put ''JHQuaW5vLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCs4OD4+Ml09YWFbMF0sbXJbTHQrOTI+PjJdPWFhWzFdLDB9LGRvTXN5bmMoWmUsbHQs''@;'; put 'put ''THQsJHQsRG4pe2lmKCFZdC5pc0ZpbGUobHQubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7aWYoMiYkdClyZXR1cm4gMDt2YXIgY3I9TW4uc2xpY2UoWmUsWmUrTHQpO1l0Lm1zeW5jKGx0LGNyLERuLEx0LCR0KX0sZ2V0U3RyZWFtRnJvbUZEOlplPT5ZdC5nZXRTdHJl''@;'; put 'put ''YW1DaGVja2VkKFplKSx2YXJhcmdzOnZvaWQgMCxnZXRTdHI6WmU9PnYwKFplKX0sRTY9KCk9Pnt2YXIgWmU9bXJbK1pzLnZhcmFyZ3M+PjJdO3JldHVybiBacy52YXJhcmdzKz00LFplfSxlNT1FNixvdj0oWmUsbHQsTHQpPT5FMShaZSxNbixsdCxMdCksWmg9KFplLGx0KT0+bHQrMjA5NzE1''@;'; put 'put ''Mj4+PjA8NDE5NDMwNS0hIVplPyhaZT4+PjApKzQyOTQ5NjcyOTYqbHQ6TmFOLGt3PVtdLEdEdD1aZT0+e3ZhciBMdD0oWmUtZHQuYnVmZmVyLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2fDA7dHJ5e3JldHVybiBkdC5ncm93KEx0KSxPbigpLDF9Y2F0Y2h7fX0sWXRlPXt9LFVBPSgpPT57aWYo''@;'; put 'put ''IVVBLnN0cmluZ3Mpe3ZhciBsdD17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1''@;'; put 'put ''YWdlc1swXXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLF86Ii4vdGhpcy5wcm9ncmFtIn07Zm9yKHZhciBMdCBpbiBZdGUpdm9pZCAwPT09WXRlW0x0XT9kZWxldGUgbHRbTHRdOmx0W0x0XT1ZdGVbTHRdO3ZhciAkdD1bXTtmb3IodmFyIEx0IGluIGx0KSR0LnB1c2goYCR7THR9''@;'; put 'put ''PSR7bHRbTHRdfWApO1VBLnN0cmluZ3M9JHR9cmV0dXJuIFVBLnN0cmluZ3N9O1l0LmNyZWF0ZVByZWxvYWRlZEZpbGU9KFplLGx0LEx0LCR0LERuLGNyLFJyLFhyLGthLEdvKT0+e3ZhciBIcz1sdD9Vcy5yZXNvbHZlKFFvLmpvaW4yKFplLGx0KSk6WmU7ZnVuY3Rpb24gZ3MoeG8pe2Z1bmN0''@;'; put 'put ''aW9uIFhzKEExKXtHbz8uKCksWHJ8fCgoWmUsbHQsTHQsJHQsRG4sY3IpPT57WXQuY3JlYXRlRGF0YUZpbGUoWmUsbHQsTHQsJHQsRG4sY3IpfSkoWmUsbHQsQTEsJHQsRG4sa2EpLGNyPy4oKSxIcigpfSgoWmUsbHQsTHQsJHQpPT57dHlwZW9mIEJyb3dzZXI8InUiJiZCcm93c2VyLmluaXQo''@;'; put 'put ''KTt2YXIgRG49ITE7cmV0dXJuIFpOLmZvckVhY2goY3I9PntEbnx8Y3IuY2FuSGFuZGxlKGx0KSYmKGNyLmhhbmRsZShaZSxsdCxMdCwkdCksRG49ITApfSksRG59KSh4byxIcyxYcywoKT0+e1JyPy4oKSxIcigpfSl8fFhzKHhvKX1hcigpLCJzdHJpbmciPT10eXBlb2YgTHQ/KChaZSxsdCxM''@;'; put 'put ''dCwkdCk9Pnt2YXIgRG49YGFsICR7WmV9YDsodm9pZCAwKShaZSkudGhlbihjcj0+e2x0KG5ldyBVaW50OEFycmF5KGNyKSksRG4mJkhyKCl9LGNyPT57aWYoIUx0KXRocm93YExvYWRpbmcgZGF0YSBmaWxlICIke1plfSIgZmFpbGVkLmA7THQoKX0pLERuJiZhcigpfSkoTHQsZ3MsUnIpOmdz''@;'; put 'put ''KEx0KX0sWXQuc3RhdGljSW5pdCgpLCRhLmRvZXNOb3RFeGlzdEVycm9yPW5ldyBZdC5FcnJub0Vycm9yKDQ0KSwkYS5kb2VzTm90RXhpc3RFcnJvci5zdGFjaz0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiI7dmFyIFFOLGNJdD17YTooWmUsbHQsTHQpPT57dGhyb3cgbmV3IHBzKFplKS5p''@;'; put 'put ''bml0KGx0LEx0KSxaZX0saTpmdW5jdGlvbiBHTihaZSxsdCxMdCwkdCl7dHJ5e2lmKGx0PVpzLmdldFN0cihsdCksbHQ9WnMuY2FsY3VsYXRlQXQoWmUsbHQpLC04Jkx0KXJldHVybi0yODt2YXIgY3I9WXQubG9va3VwUGF0aChsdCx7Zm9sbG93OiEwfSkubm9kZTtpZighY3IpcmV0dXJuLTQ0''@;'; put 'put ''O3ZhciBScj0iIjtyZXR1cm4gNCZMdCYmKFJyKz0iciIpLDImTHQmJihScis9InciKSwxJkx0JiYoUnIrPSJ4IiksUnImJll0Lm5vZGVQZXJtaXNzaW9ucyhjcixScik/LTI6MH1jYXRjaChYcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09WHIubmFtZSl0aHJvdyBYcjtyZXR1''@;'; put 'put ''cm4tWHIuZXJybm99fSxmOmZ1bmN0aW9uIEUzKFplLGx0LEx0KXtacy52YXJhcmdzPUx0O3RyeXt2YXIgJHQ9WnMuZ2V0U3RyZWFtRnJvbUZEKFplKTtzd2l0Y2gobHQpe2Nhc2UgMDppZigoRG49RTYoKSk8MClyZXR1cm4tMjg7Zm9yKDtZdC5zdHJlYW1zW0RuXTspRG4rKztyZXR1cm4gWXQu''@;'; put 'put ''ZHVwU3RyZWFtKCR0LERuKS5mZDtjYXNlIDE6Y2FzZSAyOmNhc2UgMTM6Y2FzZSAxNDpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuICR0LmZsYWdzO2Nhc2UgNDp2YXIgRG49RTYoKTtyZXR1cm4gJHQuZmxhZ3N8PURuLDA7Y2FzZSAxMjpyZXR1cm4gRG49ZTUoKSxDcltEbiswPj4xXT0yLDB9cmV0''@;'; put 'put ''dXJuLTI4fWNhdGNoKFhyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Yci5uYW1lKXRocm93IFhyO3JldHVybi1Yci5lcnJub319LHg6ZnVuY3Rpb24gJE4oWmUsbHQpe3RyeXt2YXIgTHQ9WnMuZ2V0U3RyZWFtRnJvbUZEKFplKTtyZXR1cm4gWnMuZG9TdGF0KFl0LnN0YXQs''@;'; put 'put ''THQucGF0aCxsdCl9Y2F0Y2goJHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PSR0Lm5hbWUpdGhyb3cgJHQ7cmV0dXJuLSR0LmVycm5vfX0sazpmdW5jdGlvbiBLTihaZSxsdCxMdCl7WnMudmFyYXJncz1MdDt0cnl7dmFyICR0PVpzLmdldFN0cmVhbUZyb21GRChaZSk7c3dp''@;'; put 'put ''dGNoKGx0KXtjYXNlIDIxNTA5OmNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOmNhc2UgMjE1MjQ6Y2FzZSAyMTUxNTpyZXR1cm4gJHQudHR5PzA6LTU5O2Nhc2UgMjE1MDU6aWYoISR0LnR0eSlyZXR1cm4tNTk7aWYoJHQudHR5Lm9wcy5pb2N0bF90Y2dldHMpe3ZhciBEbj0kdC50''@;'; put 'put ''dHkub3BzLmlvY3RsX3RjZ2V0cygkdCksY3I9ZTUoKTttcltjcj4+Ml09RG4uY19pZmxhZ3x8MCxtcltjcis0Pj4yXT1Ebi5jX29mbGFnfHwwLG1yW2NyKzg+PjJdPURuLmNfY2ZsYWd8fDAsbXJbY3IrMTI+PjJdPURuLmNfbGZsYWd8fDA7Zm9yKHZhciBScj0wO1JyPDMyO1JyKyspdG5bY3Ir''@;'; put 'put ''UnIrMTddPURuLmNfY2NbUnJdfHwwO3JldHVybiAwfXJldHVybiAwO2Nhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OmlmKCEkdC50dHkpcmV0dXJuLTU5O2lmKCR0LnR0eS5vcHMuaW9jdGxfdGNzZXRzKXtjcj1lNSgpO3ZhciBYcj1tcltjcj4+Ml0sa2E9bXJbY3IrND4+Ml0sR289''@;'; put 'put ''bXJbY3IrOD4+Ml0sSHM9bXJbY3IrMTI+PjJdLGFsPVtdO2ZvcihScj0wO1JyPDMyO1JyKyspYWwucHVzaCh0bltjcitScisxN10pO3JldHVybiAkdC50dHkub3BzLmlvY3RsX3Rjc2V0cygkdC50dHksbHQse2NfaWZsYWc6WHIsY19vZmxhZzprYSxjX2NmbGFnOkdvLGNfbGZsYWc6SHMsY19j''@;'; put 'put ''YzphbH0pfXJldHVybiAwO2Nhc2UgMjE1MTk6cmV0dXJuICR0LnR0eT8oY3I9ZTUoKSxtcltjcj4+Ml09MCwwKTotNTk7Y2FzZSAyMTUyMDpyZXR1cm4gJHQudHR5Py0yODotNTk7Y2FzZSAyMTUzMTpyZXR1cm4gY3I9ZTUoKSxZdC5pb2N0bCgkdCxsdCxjcik7Y2FzZSAyMTUyMzppZighJHQu''@;'; put 'put ''dHR5KXJldHVybi01OTtpZigkdC50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3ope3ZhciBncz0kdC50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3ooJHQudHR5KTtjcj1lNSgpLENyW2NyPj4xXT1nc1swXSxDcltjcisyPj4xXT1nc1sxXX1yZXR1cm4gMDtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2go''@;'; put 'put ''eG8pe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PXhvLm5hbWUpdGhyb3cgeG87cmV0dXJuLXhvLmVycm5vfX0sdjpmdW5jdGlvbiBxTihaZSxsdCxMdCwkdCl7dHJ5e2x0PVpzLmdldFN0cihsdCk7dmFyIERuPTI1NiYkdCxjcj00MDk2JiR0O3JldHVybiAkdCY9LTY0MDEsbHQ9''@;'; put 'put ''WnMuY2FsY3VsYXRlQXQoWmUsbHQsY3IpLFpzLmRvU3RhdChEbj9ZdC5sc3RhdDpZdC5zdGF0LGx0LEx0KX1jYXRjaChScil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09UnIubmFtZSl0aHJvdyBScjtyZXR1cm4tUnIuZXJybm99fSxoOmZ1bmN0aW9uIFhOKFplLGx0LEx0LCR0''@;'; put 'put ''KXtacy52YXJhcmdzPSR0O3RyeXtsdD1acy5nZXRTdHIobHQpLGx0PVpzLmNhbGN1bGF0ZUF0KFplLGx0KTt2YXIgRG49JHQ/RTYoKTowO3JldHVybiBZdC5vcGVuKGx0LEx0LERuKS5mZH1jYXRjaChjcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09Y3IubmFtZSl0aHJvdyBj''@;'; put 'put ''cjtyZXR1cm4tY3IuZXJybm99fSxxOmZ1bmN0aW9uIGNvKFplLGx0LEx0LCR0KXt0cnl7aWYobHQ9WnMuZ2V0U3RyKGx0KSxsdD1acy5jYWxjdWxhdGVBdChaZSxsdCksJHQ8PTApcmV0dXJuLTI4O3ZhciBEbj1ZdC5yZWFkbGluayhsdCksY3I9TWF0aC5taW4oJHQsZXMoRG4pKSxScj10bltM''@;'; put 'put ''dCtjcl07cmV0dXJuIG92KERuLEx0LCR0KzEpLHRuW0x0K2NyXT1Scixjcn1jYXRjaChYcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09WHIubmFtZSl0aHJvdyBYcjtyZXR1cm4tWHIuZXJybm99fSxyOmZ1bmN0aW9uIGdyKFplKXt0cnl7cmV0dXJuIFplPVpzLmdldFN0ciha''@;'; put 'put ''ZSksWXQucm1kaXIoWmUpLDB9Y2F0Y2gobHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PWx0Lm5hbWUpdGhyb3cgbHQ7cmV0dXJuLWx0LmVycm5vfX0sdzpmdW5jdGlvbiBRaShaZSxsdCl7dHJ5e3JldHVybiBaZT1acy5nZXRTdHIoWmUpLFpzLmRvU3RhdChZdC5zdGF0LFpl''@;'; put 'put ''LGx0KX1jYXRjaChMdCl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09THQubmFtZSl0aHJvdyBMdDtyZXR1cm4tTHQuZXJybm99fSxzOmZ1bmN0aW9uIFhhKFplLGx0LEx0KXt0cnl7cmV0dXJuIGx0PVpzLmdldFN0cihsdCksbHQ9WnMuY2FsY3VsYXRlQXQoWmUsbHQpLDA9PT1M''@;'; put 'put ''dD9ZdC51bmxpbmsobHQpOjUxMj09PUx0P1l0LnJtZGlyKGx0KTpxcigiSW52YWxpZCBmbGFncyBwYXNzZWQgdG8gdW5saW5rYXQiKSwwfWNhdGNoKCR0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT0kdC5uYW1lKXRocm93ICR0O3JldHVybi0kdC5lcnJub319LGo6KCk9PnFy''@;'; put 'put ''KCIiKSx5OigpPT4xLHo6KFplLGx0LEx0KT0+TW4uY29weVdpdGhpbihaZSxsdCxsdCtMdCksbDpmdW5jdGlvbiBzdihaZSxsdCxMdCwkdCxEbixjcixScixYcil7dmFyIGthPVpoKERuLGNyKTt0cnl7aWYoaXNOYU4oa2EpKXJldHVybiA2MTt2YXIgR289WnMuZ2V0U3RyZWFtRnJvbUZEKCR0''@;'; put 'put ''KSxIcz1ZdC5tbWFwKEdvLFplLGthLGx0LEx0KSxhbD1Icy5wdHI7cmV0dXJuIG1yW1JyPj4yXT1Icy5hbGxvY2F0ZWQsR25bWHI+PjJdPWFsLDB9Y2F0Y2goZ3Mpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PWdzLm5hbWUpdGhyb3cgZ3M7cmV0dXJuLWdzLmVycm5vfX0sbTpm''@;'; put 'put ''dW5jdGlvbiB6QShaZSxsdCxMdCwkdCxEbixjcixScil7dmFyIFhyPVpoKGNyLFJyKTt0cnl7dmFyIGthPVpzLmdldFN0cmVhbUZyb21GRChEbik7MiZMdCYmWnMuZG9Nc3luYyhaZSxrYSxsdCwkdCxYcil9Y2F0Y2goR28pe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PUdvLm5h''@;'; put 'put ''bWUpdGhyb3cgR287cmV0dXJuLUdvLmVycm5vfX0sbzooWmUsbHQsTHQsJHQpPT57dmFyIERuPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxjcj1uZXcgRGF0ZShEbiwwLDEpLFJyPW5ldyBEYXRlKERuLDYsMSksWHI9Y3IuZ2V0VGltZXpvbmVPZmZzZXQoKSxrYT1Sci5nZXRUaW1lem9uZU9m''@;'; put 'put ''ZnNldCgpLEdvPU1hdGgubWF4KFhyLGthKTtHbltaZT4+Ml09NjAqR28sbXJbbHQ+PjJdPSsoWHIhPWthKTt2YXIgSHM9eG89Pnt2YXIgWHM9eG8+PTA/Ii0iOiIrIixBMT1NYXRoLmFicyh4byk7cmV0dXJuYFVUQyR7WHN9JHtTdHJpbmcoTWF0aC5mbG9vcihBMS82MCkpLnBhZFN0YXJ0KDIs''@;'; put 'put ''IjAiKX0ke1N0cmluZyhBMSU2MCkucGFkU3RhcnQoMiwiMCIpfWB9LGFsPUhzKFhyKSxncz1IcyhrYSk7a2E8WHI/KG92KGFsLEx0LDE3KSxvdihncywkdCwxNykpOihvdihhbCwkdCwxNyksb3YoZ3MsTHQsMTcpKX0sQTooWmUsbHQsTHQpPT4oKFplLGx0LEx0KT0+e3ZhciAkdD0oKFplLGx0''@;'; put 'put ''KT0+e2t3Lmxlbmd0aD0wO2Zvcih2YXIgTHQ7THQ9TW5bWmUrK107KXt2YXIgJHQ9MTA1IT1MdDtsdCs9KCR0Jj0xMTIhPUx0KSYmbHQlOD80OjAsa3cucHVzaCgxMTI9PUx0P0duW2x0Pj4yXToxMDU9PUx0P21yW2x0Pj4yXTpfaVtsdD4+M10pLGx0Kz0kdD84OjR9cmV0dXJuIGt3fSkobHQs''@;'; put 'put ''THQpO3JldHVybiBCYVtaZV0oLi4uJHQpfSkoWmUsbHQsTHQpLGM6KCk9PkRhdGUubm93KCkscDpaZT0+e3ZhciBsdD1Nbi5sZW5ndGgsTHQ9MjE0NzQ4MzY0ODtpZigoWmU+Pj49MCk+THQpcmV0dXJuITE7Zm9yKHZhciAkdD0xOyR0PD00OyR0Kj0yKXt2YXIgRG49bHQqKDErLjIvJHQpO0Ru''@;'; put 'put ''PU1hdGgubWluKERuLFplKzEwMDY2MzI5Nik7dmFyIGNyPU1hdGgubWluKEx0LFZBKE1hdGgubWF4KFplLERuKSw2NTUzNikpO2lmKEdEdChjcikpcmV0dXJuITB9cmV0dXJuITF9LHQ6KFplLGx0KT0+e3ZhciBMdD0wO3JldHVybiBVQSgpLmZvckVhY2goKCR0LERuKT0+e3ZhciBjcj1sdCtM''@;'; put 'put ''dDtHbltaZSs0KkRuPj4yXT1jciwoKFplLGx0KT0+e2Zvcih2YXIgTHQ9MDtMdDxaZS5sZW5ndGg7KytMdCl0bltsdCsrXT1aZS5jaGFyQ29kZUF0KEx0KTt0bltsdF09MH0pKCR0LGNyKSxMdCs9JHQubGVuZ3RoKzF9KSwwfSx1OihaZSxsdCk9Pnt2YXIgTHQ9VUEoKTtHbltaZT4+Ml09THQu''@;'; put 'put ''bGVuZ3RoO3ZhciAkdD0wO3JldHVybiBMdC5mb3JFYWNoKERuPT4kdCs9RG4ubGVuZ3RoKzEpLEduW2x0Pj4yXT0kdCwwfSxnOihaZSxsdCk9PnsoWmU9PnsoKFplLGx0KT0+e3Rocm93IGx0fSkoMCxuZXcgSW8oWmUpKX0pKFplKX0sYjpmdW5jdGlvbiBySXQoWmUpe3RyeXt2YXIgbHQ9WnMu''@;'; put 'put ''Z2V0U3RyZWFtRnJvbUZEKFplKTtyZXR1cm4gWXQuY2xvc2UobHQpLDB9Y2F0Y2goTHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PUx0Lm5hbWUpdGhyb3cgTHQ7cmV0dXJuIEx0LmVycm5vfX0sZTpmdW5jdGlvbiBhSXQoWmUsbHQsTHQsJHQpe3RyeXt2YXIgY3I9KChaZSxs''@;'; put 'put ''dCxMdCwkdCk9Pntmb3IodmFyIERuPTAsY3I9MDtjcjxMdDtjcisrKXt2YXIgUnI9R25bbHQ+PjJdLFhyPUduW2x0KzQ+PjJdO2x0Kz04O3ZhciBrYT1ZdC5yZWFkKFplLHRuLFJyLFhyLCR0KTtpZihrYTwwKXJldHVybi0xO2lmKERuKz1rYSxrYTxYcilicmVhazt0eXBlb2YgJHQ8InUiJiYo''@;'; put 'put ''JHQrPWthKX1yZXR1cm4gRG59KShacy5nZXRTdHJlYW1Gcm9tRkQoWmUpLGx0LEx0KTtyZXR1cm4gR25bJHQ+PjJdPWNyLDB9Y2F0Y2goUnIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVJyLm5hbWUpdGhyb3cgUnI7cmV0dXJuIFJyLmVycm5vfX0sbjpmdW5jdGlvbiBvSXQo''@;'; put 'put ''WmUsbHQsTHQsJHQsRG4pe3ZhciBjcj1aaChsdCxMdCk7dHJ5e2lmKGlzTmFOKGNyKSlyZXR1cm4gNjE7dmFyIFJyPVpzLmdldFN0cmVhbUZyb21GRChaZSk7cmV0dXJuIFl0Lmxsc2VlayhScixjciwkdCksYWE9W1JyLnBvc2l0aW9uPj4+MCwoWnI9UnIucG9zaXRpb24sK01hdGguYWJzKFpy''@;'; put 'put ''KT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG1yW0RuPj4yXT1hYVswXSxtcltEbis0Pj4yXT1hYVsxXSxSci5nZXRkZW50cyYmMD09PWNyJiYwPT09JHQmJihSci5nZXRkZW50''@;'; put 'put ''cz1udWxsKSwwfWNhdGNoKFhyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Yci5uYW1lKXRocm93IFhyO3JldHVybiBYci5lcnJub319LGQ6ZnVuY3Rpb24gbEl0KFplLGx0LEx0LCR0KXt0cnl7dmFyIGNyPSgoWmUsbHQsTHQsJHQpPT57Zm9yKHZhciBEbj0wLGNyPTA7Y3I8''@;'; put 'put ''THQ7Y3IrKyl7dmFyIFJyPUduW2x0Pj4yXSxYcj1HbltsdCs0Pj4yXTtsdCs9ODt2YXIga2E9WXQud3JpdGUoWmUsdG4sUnIsWHIsJHQpO2lmKGthPDApcmV0dXJuLTE7aWYoRG4rPWthLGthPFhyKWJyZWFrO3R5cGVvZiAkdDwidSImJigkdCs9a2EpfXJldHVybiBEbn0pKFpzLmdldFN0cmVh''@;'; put 'put ''bUZyb21GRChaZSksbHQsTHQpO3JldHVybiBHblskdD4+Ml09Y3IsMH1jYXRjaChScil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09UnIubmFtZSl0aHJvdyBScjtyZXR1cm4gUnIuZXJybm99fX0sTGw9ZnVuY3Rpb24gTXIoKXthcigpO3ZhciBMdD1mdW5jdGlvbiBOcigpe3Jl''@;'; put 'put ''dHVybnthOmNJdH19KCk7cmV0dXJuICRuPz89ZnVuY3Rpb24gcHIoKXt2YXIgWmU9ImdyYXBodml6bGliLndhc20iO3JldHVybiB5bihaZSk/WmU6ZnVuY3Rpb24gYmUoWmUpe3JldHVybiIiK1plfShaZSl9KCksZnVuY3Rpb24gc3IoWmUsbHQsTHQsJHQpe3JldHVybiBaZXx8ImZ1bmN0aW9u''@;'; put 'put ''IiE9dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nfHx5bihsdCl8fChaZT0+WmUuc3RhcnRzV2l0aCgiZmlsZTovLyIpKShsdCl8fCJmdW5jdGlvbiIhPXR5cGVvZiBmZXRjaD9abihsdCxMdCwkdCk6ZmV0Y2gobHQse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50''@;'; put 'put ''aGVuKERuPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhEbixMdCkudGhlbigkdCxmdW5jdGlvbihScil7cmV0dXJuIHJ0KGB3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogJHtScn1gKSxydCgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24i''@;'; put 'put ''KSxabihsdCxMdCwkdCl9KSl9KHB0LCRuLEx0LGZ1bmN0aW9uIGx0KCR0KXshZnVuY3Rpb24gWmUoJHQsRG4pe3JldHVybiBkdD0oTGw9JHQuZXhwb3J0cykuQixPbigpLGZ1bmN0aW9uIHZ0KFplKXtKbi51bnNoaWZ0KFplKX0oTGwuQyksSHIoKSxMbH0oJHQuaW5zdGFuY2UpfSkuY2F0Y2go''@;'; put 'put ''Zikse319KCkseDdlPShkLl93ZWJpZGxfZnJlZT1aZT0+KGQuX3dlYmlkbF9mcmVlPUxsLkQpKFplKSxkLl9mcmVlPVplPT4oZC5fZnJlZT1MbC5FKShaZSksZC5fd2ViaWRsX21hbGxvYz1aZT0+KGQuX3dlYmlkbF9tYWxsb2M9TGwuRikoWmUpLGQuX21hbGxvYz1aZT0+KGQuX21hbGxvYz1M''@;'; put 'put ''bC5HKShaZSksZC5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1aZT0+KHg3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPUxsLkgpKFplKSksRTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9HcmFwaHZpel8yPShaZSxsdCk9PihF''@;'; put 'put ''N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9TGwuSSkoWmUsbHQpLFQ3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdmVyc2lvbl8wPSgpPT4oVDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9TGwuSikoKSxBN2U9ZC5fZW1zY3Jp''@;'; put 'put ''cHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPSgpPT4oQTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXN0RXJyb3JfMD1MbC5LKSgpLGs3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPShaZSxsdCxMdCk9PihrN2U9ZC5fZW1zY3JpcHRlbl9i''@;'; put 'put ''aW5kX0dyYXBodml6X2NyZWF0ZUZpbGVfMj1MbC5MKShaZSxsdCxMdCksRDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz0oWmUsbHQsTHQsJHQpPT4oRDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz1MbC5NKShaZSxsdCxMdCwkdCksSTdlPWQu''@;'; put 'put ''X2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9hY3ljbGljXzM9KFplLGx0LEx0LCR0KT0+KEk3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfYWN5Y2xpY18zPUxsLk4pKFplLGx0LEx0LCR0KSxSN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3RyZWRfMz0oWmUsbHQsTHQsJHQp''@;'; put 'put ''PT4oUjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel90cmVkXzM9TGwuTykoWmUsbHQsTHQsJHQpLEw3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVuXzQ9KFplLGx0LEx0LCR0LERuKT0+KEw3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVu''@;'; put 'put ''XzQ9TGwuUCkoWmUsbHQsTHQsJHQsRG4pLE83ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2xheW91dF9yZXN1bHRfMD1aZT0+KE83ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2xheW91dF9yZXN1bHRfMD1MbC5RKShaZSksUDdlPWQuX2Vtc2NyaXB0ZW5fYmlu''@;'; put 'put ''ZF9HcmFwaHZpel9zZXRfbGF5b3V0X3Jlc3VsdF8xPShaZSxsdCk9PihQN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9sYXlvdXRfcmVzdWx0XzE9TGwuUikoWmUsbHQpLEY3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2FjeWNsaWNfb3V0RmlsZV8wPVplPT4o''@;'; put 'put ''RjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19vdXRGaWxlXzA9TGwuUykoWmUpLEg3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfb3V0RmlsZV8xPShaZSxsdCk9PihIN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9h''@;'; put 'put ''Y3ljbGljX291dEZpbGVfMT1MbC5UKShaZSxsdCksTjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19udW1fcmV2XzA9WmU9PihON2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX251bV9yZXZfMD1MbC5VKShaZSksVjdlPWQuX2Vtc2Ny''@;'; put 'put ''aXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfYWN5Y2xpY19udW1fcmV2XzE9KFplLGx0KT0+KFY3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfbnVtX3Jldl8xPUxsLlYpKFplLGx0KSxCN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF90cmVkX291dF8w''@;'; put 'put ''PVplPT4oQjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9vdXRfMD1MbC5XKShaZSksajdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9vdXRfMT0oWmUsbHQpPT4oajdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9vdXRf''@;'; put 'put ''MT1MbC5YKShaZSxsdCksejdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9lcnJfMD1aZT0+KHo3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfZXJyXzA9TGwuWSkoWmUpLFU3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRf''@;'; put 'put ''ZXJyXzE9KFplLGx0KT0+KFU3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9TGwuWikoWmUsbHQpLFo3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1aZT0+KFo3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0''@;'; put 'put ''cm95X19fMD1MbC5fKShaZSksVzdlPShaZSxsdCk9PihXN2U9TGwuYWEpKFplLGx0KTtmdW5jdGlvbiBZN2UoKXtOdD4wfHwoZnVuY3Rpb24gd2koKXtabyh6cil9KCksTnQ+MCl8fGZ1bmN0aW9uIFplKCl7UU58fChRTj0hMCxkLmNhbGxlZFJ1bj0hMCwhSnQmJihmdW5jdGlvbiBlYSgpeyFk''@;'; put 'put ''Lm5vRlNJbml0JiYhWXQuaW5pdGlhbGl6ZWQmJll0LmluaXQoKSxZdC5pZ25vcmVQZXJtaXNzaW9ucz0hMSxkNC5pbml0KCksWm8oSm4pfSgpLGgoZCksZnVuY3Rpb24gZmEoKXtabyhJcil9KCkpKX0oKX1mdW5jdGlvbiBzZigpe31mdW5jdGlvbiBlVihaZSl7cmV0dXJuKFplfHxzZikuX19j''@;'; put 'put ''YWNoZV9ffWZ1bmN0aW9uIEd0ZShaZSxsdCl7dmFyIEx0PWVWKGx0KSwkdD1MdFtaZV07cmV0dXJuICR0fHwoKCR0PU9iamVjdC5jcmVhdGUoKGx0fHxzZikucHJvdG90eXBlKSkucHRyPVplLEx0W1plXT0kdCl9ZC5VVEY4VG9TdHJpbmc9djAsSG49ZnVuY3Rpb24gWmUoKXtRTnx8WTdlKCks''@;'; put 'put ''UU58fChIbj1aZSl9LFk3ZSgpLChzZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzZi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1zZixzZi5wcm90b3R5cGUuX19jbGFzc19fPXNmLHNmLl9fY2FjaGVfXz17fSxkLldyYXBwZXJPYmplY3Q9c2YsZC5nZXRDYWNoZT1lVixkLndyYXBQb2ludGVy''@;'; put 'put ''PUd0ZSxkLmNhc3RPYmplY3Q9ZnVuY3Rpb24gZ0l0KFplLGx0KXtyZXR1cm4gR3RlKFplLnB0cixsdCl9LGQuTlVMTD1HdGUoMCksZC5kZXN0cm95PWZ1bmN0aW9uIG1JdChaZSl7aWYoIVplLl9fZGVzdHJveV9fKXRocm93IkVycm9yOiBDYW5ub3QgZGVzdHJveSBvYmplY3QuIChEaWQgeW91''@;'; put 'put ''IGNyZWF0ZSBpdCB5b3Vyc2VsZj8pIjtaZS5fX2Rlc3Ryb3lfXygpLGRlbGV0ZSBlVihaZS5fX2NsYXNzX18pW1plLnB0cl19LGQuY29tcGFyZT1mdW5jdGlvbiB2SXQoWmUsbHQpe3JldHVybiBaZS5wdHI9PT1sdC5wdHJ9LGQuZ2V0UG9pbnRlcj1mdW5jdGlvbiBiSXQoWmUpe3JldHVybiBa''@;'; put 'put ''ZS5wdHJ9LGQuZ2V0Q2xhc3M9ZnVuY3Rpb24geUl0KFplKXtyZXR1cm4gWmUuX19jbGFzc19ffTt2YXIgV3M9e2J1ZmZlcjowLHNpemU6MCxwb3M6MCx0ZW1wczpbXSxuZWVkZWQ6MCxwcmVwYXJlKCl7aWYoV3MubmVlZGVkKXtmb3IodmFyIFplPTA7WmU8V3MudGVtcHMubGVuZ3RoO1plKysp''@;'; put 'put ''ZC5fd2ViaWRsX2ZyZWUoV3MudGVtcHNbWmVdKTtXcy50ZW1wcy5sZW5ndGg9MCxkLl93ZWJpZGxfZnJlZShXcy5idWZmZXIpLFdzLmJ1ZmZlcj0wLFdzLnNpemUrPVdzLm5lZWRlZCxXcy5uZWVkZWQ9MH1Xcy5idWZmZXJ8fChXcy5zaXplKz0xMjgsV3MuYnVmZmVyPWQuX3dlYmlkbF9tYWxs''@;'; put 'put ''b2MoV3Muc2l6ZSksQ24oV3MuYnVmZmVyKSksV3MucG9zPTB9LGFsbG9jKFplLGx0KXtDbihXcy5idWZmZXIpO3ZhciBEbiwkdD1aZS5sZW5ndGgqbHQuQllURVNfUEVSX0VMRU1FTlQ7cmV0dXJuICR0PVZBKCR0LDgpLFdzLnBvcyskdD49V3Muc2l6ZT8oQ24oJHQ+MCksV3MubmVlZGVkKz0k''@;'; put 'put ''dCxEbj1kLl93ZWJpZGxfbWFsbG9jKCR0KSxXcy50ZW1wcy5wdXNoKERuKSk6KERuPVdzLmJ1ZmZlcitXcy5wb3MsV3MucG9zKz0kdCksRG59LGNvcHkoWmUsbHQsTHQpe0x0Lz1sdC5CWVRFU19QRVJfRUxFTUVOVDtmb3IodmFyICR0PTA7JHQ8WmUubGVuZ3RoOyR0KyspbHRbTHQrJHRdPVpl''@;'; put 'put ''WyR0XX19O2Z1bmN0aW9uIGxmKFplKXtpZigic3RyaW5nIj09dHlwZW9mIFplKXt2YXIgbHQ9ZnVuY3Rpb24geDMoWmUsbHQsTHQpe3ZhciAkdD1MdD4wP0x0OmVzKFplKSsxLERuPW5ldyBBcnJheSgkdCksY3I9RTEoWmUsRG4sMCxEbi5sZW5ndGgpO3JldHVybiBsdCYmKERuLmxlbmd0aD1j''@;'; put 'put ''ciksRG59KFplKSxMdD1Xcy5hbGxvYyhsdCx0bik7cmV0dXJuIFdzLmNvcHkobHQsdG4sTHQpLEx0fXJldHVybiBaZX1mdW5jdGlvbiB0NSgpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBWb2lkUHRyLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1bmN0aW9uIHJvKFplLGx0KXtaZSYmIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBaZSYmKFplPVplLnB0ciksbHQmJiJvYmplY3QiPT10eXBlb2YgbHQmJihsdD1sdC5wdHIpLHRoaXMucHRyPUU3ZShaZSxsdCksZVYocm8pW3RoaXMucHRyXT10aGlzfXJldHVybih0NS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzZi5wcm90b3R5cGUpKS5jb25zdHJ1''@;'; put 'put ''Y3Rvcj10NSx0NS5wcm90b3R5cGUuX19jbGFzc19fPXQ1LHQ1Ll9fY2FjaGVfXz17fSxkLlZvaWRQdHI9dDUsdDUucHJvdG90eXBlLl9fZGVzdHJveV9fPXQ1LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3g3ZSh0aGlzLnB0cil9LChyby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0''@;'; put 'put ''ZShzZi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1ybyxyby5wcm90b3R5cGUuX19jbGFzc19fPXJvLHJvLl9fY2FjaGVfXz17fSxkLkdyYXBodml6PXJvLHJvLnByb3RvdHlwZS52ZXJzaW9uPXJvLnByb3RvdHlwZS52ZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHYwKFQ3ZSgpKX0scm8ucHJv''@;'; put 'put ''dG90eXBlLmxhc3RFcnJvcj1yby5wcm90b3R5cGUubGFzdEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHYwKEE3ZSgpKX0scm8ucHJvdG90eXBlLmNyZWF0ZUZpbGU9cm8ucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oWmUsbHQpe3ZhciBMdD10aGlzLnB0cjtXcy5wcmVwYXJlKCksWmU9''@;'; put 'put ''WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxsdD1sdCYmIm9iamVjdCI9PXR5cGVvZiBsdD9sdC5wdHI6bGYobHQpLGs3ZShMdCxaZSxsdCl9LHJvLnByb3RvdHlwZS5sYXlvdXQ9cm8ucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbihaZSxsdCxMdCl7dmFyICR0PXRoaXMu''@;'; put 'put ''cHRyO3JldHVybiBXcy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxsdD1sdCYmIm9iamVjdCI9PXR5cGVvZiBsdD9sdC5wdHI6bGYobHQpLEx0PUx0JiYib2JqZWN0Ij09dHlwZW9mIEx0P0x0LnB0cjpsZihMdCksdjAoRDdlKCR0LFplLGx0LEx0''@;'; put 'put ''KSl9LHJvLnByb3RvdHlwZS5hY3ljbGljPXJvLnByb3RvdHlwZS5hY3ljbGljPWZ1bmN0aW9uKFplLGx0LEx0KXt2YXIgJHQ9dGhpcy5wdHI7cmV0dXJuIFdzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0''@;'; put 'put ''JiYobHQ9bHQucHRyKSxMdCYmIm9iamVjdCI9PXR5cGVvZiBMdCYmKEx0PUx0LnB0ciksISFJN2UoJHQsWmUsbHQsTHQpfSxyby5wcm90b3R5cGUudHJlZD1yby5wcm90b3R5cGUudHJlZD1mdW5jdGlvbihaZSxsdCxMdCl7dmFyICR0PXRoaXMucHRyO1dzLnByZXBhcmUoKSxaZT1aZSYmIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxMdCYmIm9iamVjdCI9PXR5cGVvZiBMdCYmKEx0PUx0LnB0ciksUjdlKCR0LFplLGx0LEx0KX0scm8ucHJvdG90eXBlLnVuZmxhdHRlbj1yby5wcm90b3R5cGUudW5mbGF0''@;'; put 'put ''dGVuPWZ1bmN0aW9uKFplLGx0LEx0LCR0KXt2YXIgRG49dGhpcy5wdHI7cmV0dXJuIFdzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxMdCYmIm9iamVjdCI9PXR5cGVvZiBMdCYm''@;'; put 'put ''KEx0PUx0LnB0ciksJHQmJiJvYmplY3QiPT10eXBlb2YgJHQmJigkdD0kdC5wdHIpLHYwKEw3ZShEbixaZSxsdCxMdCwkdCkpfSxyby5wcm90b3R5cGUuZ2V0X2xheW91dF9yZXN1bHQ9cm8ucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHYwKE83ZSh0aGlz''@;'; put 'put ''LnB0cikpfSxyby5wcm90b3R5cGUuc2V0X2xheW91dF9yZXN1bHQ9cm8ucHJvdG90eXBlLnNldF9sYXlvdXRfcmVzdWx0PWZ1bmN0aW9uKFplKXt2YXIgbHQ9dGhpcy5wdHI7V3MucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksUDdlKGx0LFplKX0s''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KHJvLnByb3RvdHlwZSwibGF5b3V0X3Jlc3VsdCIse2dldDpyby5wcm90b3R5cGUuZ2V0X2xheW91dF9yZXN1bHQsc2V0OnJvLnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3VsdH0pLHJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19vdXRGaWxlPXJvLnByb3Rv''@;'; put 'put ''dHlwZS5nZXRfYWN5Y2xpY19vdXRGaWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHYwKEY3ZSh0aGlzLnB0cikpfSxyby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZT1yby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZT1mdW5jdGlvbihaZSl7dmFyIGx0PXRoaXMucHRyO1dzLnByZXBh''@;'; put 'put ''cmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLEg3ZShsdCxaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyby5wcm90b3R5cGUsImFjeWNsaWNfb3V0RmlsZSIse2dldDpyby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0RmlsZSxzZXQ6cm8ucHJvdG90eXBl''@;'; put 'put ''LnNldF9hY3ljbGljX291dEZpbGV9KSxyby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3Jldj1yby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3Jldj1mdW5jdGlvbigpe3JldHVybiBON2UodGhpcy5wdHIpfSxyby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfbnVtX3Jldj1yby5wcm90b3R5''@;'; put 'put ''cGUuc2V0X2FjeWNsaWNfbnVtX3Jldj1mdW5jdGlvbihaZSl7WmUmJiJvYmplY3QiPT10eXBlb2YgWmUmJihaZT1aZS5wdHIpLFY3ZSh0aGlzLnB0cixaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyby5wcm90b3R5cGUsImFjeWNsaWNfbnVtX3JldiIse2dldDpyby5wcm90b3R5cGUuZ2V0''@;'; put 'put ''X2FjeWNsaWNfbnVtX3JldixzZXQ6cm8ucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXZ9KSxyby5wcm90b3R5cGUuZ2V0X3RyZWRfb3V0PXJvLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdjAoQjdlKHRoaXMucHRyKSl9LHJvLnByb3RvdHlwZS5zZXRfdHJl''@;'; put 'put ''ZF9vdXQ9cm8ucHJvdG90eXBlLnNldF90cmVkX291dD1mdW5jdGlvbihaZSl7dmFyIGx0PXRoaXMucHRyO1dzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGo3ZShsdCxaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyby5wcm90b3R5cGUsInRy''@;'; put 'put ''ZWRfb3V0Iix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQsc2V0OnJvLnByb3RvdHlwZS5zZXRfdHJlZF9vdXR9KSxyby5wcm90b3R5cGUuZ2V0X3RyZWRfZXJyPXJvLnByb3RvdHlwZS5nZXRfdHJlZF9lcnI9ZnVuY3Rpb24oKXtyZXR1cm4gdjAoejdlKHRoaXMucHRyKSl9LHJvLnBy''@;'; put 'put ''b3RvdHlwZS5zZXRfdHJlZF9lcnI9cm8ucHJvdG90eXBlLnNldF90cmVkX2Vycj1mdW5jdGlvbihaZSl7dmFyIGx0PXRoaXMucHRyO1dzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLFU3ZShsdCxaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShy''@;'; put 'put ''by5wcm90b3R5cGUsInRyZWRfZXJyIix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfdHJlZF9lcnIsc2V0OnJvLnByb3RvdHlwZS5zZXRfdHJlZF9lcnJ9KSxyby5wcm90b3R5cGUuX19kZXN0cm95X189cm8ucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7WjdlKHRoaXMucHRyKX0sdn0p''@;'; put 'put ''O2Z1bmN0aW9uIFp4dCgpe3JldHVybiBGdGV8fChGdGU9ZnVuY3Rpb24gTnh0KGMsbCl7Zm9yKHZhciBhPVtdLGQ9KyFsLGg9MCxmPTA7Yy5sZW5ndGg7KXt2YXIgdj1BeHQoYyxkfHxsKTtpZigib2JqZWN0Ij09dHlwZW9mIHYpe2ZvcihkPyhsPW51bGwsdi53Lmxlbmd0aD09di51JiYoYS5w''@;'; put 'put ''dXNoKGw9di53KSxmKz12LnUpKTooYS5wdXNoKGwpLHYuZT0wKTshdi5sOyl7dmFyIE09Rnh0KGMsdixsKTtNfHxlMCg1KSxsP3YuZT12Lnk6KGEucHVzaChNKSxmKz1NLmxlbmd0aCx4eHQodi53LDAsTS5sZW5ndGgpLHYudy5zZXQoTSx2LncubGVuZ3RoLU0ubGVuZ3RoKSl9aD12LmIrNCp2''@;'; put 'put ''LmN9ZWxzZSBoPXY7Yz1jLnN1YmFycmF5KGgpfXJldHVybiBmdW5jdGlvbihjLGwpe2lmKDE9PWMubGVuZ3RoKXJldHVybiBjWzBdO2Zvcih2YXIgYT1uZXcgSXUobCksZD0wLGg9MDtkPGMubGVuZ3RoOysrZCl7dmFyIGY9Y1tkXTthLnNldChmLGgpLGgrPWYubGVuZ3RofXJldHVybiBhfShh''@;'; put 'put ''LGYpfShmdW5jdGlvbiB6eHQoYyl7bGV0IGw9Yy5sZW5ndGgsYT1bXSxkPTAsaD0wLGY9LTE7Zm9yKGxldCB2PTA7djxsO3YrKyl7bGV0IE09J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjs8PT4/QFtd''@;'; put 'put ''Xl9ge3x9fiInLmluZGV4T2YoY1t2XSk7aWYoLTEhPT1NKWlmKGY8MClmPU07ZWxzZXtmKz05MSpNLGR8PWY8PGgsaCs9KDgxOTEmZik+ODg/MTM6MTQ7ZG97YS5wdXNoKDI1NSZkKSxkPj49OCxoLT04fXdoaWxlKGg+Nyk7Zj0tMX19cmV0dXJuIGY+LTEmJmEucHVzaCgyNTUmKGR8Zjw8aCkp''@;'; put 'put ''LG5ldyBVaW50OEFycmF5KGEpfSgndjcjYVNYVW5gREBRPCx6M15YJmtVMmh0ejh7L3BZRG1uP3skSmp6MnJfP0psXis2bkZvPXhJPCZCOUZCVit3YjtYYXxxb1J6Z2JlS3NCU15+XXh6dj49fC5xPyhNPDhHRDVHTCNLe3NbUzQhXkM0THlyTmFMS29Sa0VKa0xMbHtmMFY5MDw7XlFwdWd5NUEl''@;'; put 'put ''KSYpWjpzZzpoLn1gOHV1VFtXQkEoeSl1eXxCVUglOCFFKmBmMXdCX3hbJkA1cUc1JWImfmplJjdEYkokTGx6VUM+V14vO2Zoezx8R0J5Iil+bCVzXzFhOG0+ZDBYUEFzVDlMYlcoaWpCZU5XV1tAXm0kKDp2fW97UWsudGh+PTsoMWE4XjFtfU1+ezw1P1NQKF4pWzJMc2BNYHU5KXlafWIvSkR+''@;'; put 'put ''NkZMdFpzbV5GbHxrSFgsNEZVenEqT2F6PUJfNnM3KVNkNExdTGN8bHh6dmhoPzZ0RDglTl1AJj84aU88VVBzWzVKcSNaUmdafWszRHFIPSUyUUR7RHRmfW93RUo2SWRyWUc+VnVFJE1Wd10sJn5PLHFMaUImNW0/IVlHZ2kqaVcrIlFQeSQ/VVprY2E+MGdEbyE3R3x+ZzVkS3xbMy97NX5vJDB2''@;'; put 'put ''JUpsMTgyQXF+PXplOH5FekhlX1tRRGNZMX0oZSxLSHUxVTspWFhXQH0xJmd0LH5gMnAvOn1YZFluIU5IZl1pNzZeWCNRcXlvZ3A/JTckWHN5LFomel8jMmc7JSwlbjleeXJOX3Z5KCsxU3FgZGh9XSZsYWtoTH1yJngzNSpic3pbW3ddd343fFE1bHIrcnZreWk1VHw9WiFLOX1IPD1yNlNfRjhq''@;'; put 'put ''TlMpfT1SX1NfL09nfjovajxmOEQ/Ql9tfSI0M3RoKmchVSZKVzMkUWRAPXVbKm1YTmNwezt1YyZKXU9QUSEwJGZXOCljSlE2ZTprNUAiIyQ0czY8UDZOYjAwQXEkb2NbTSZDakhDX2I3c2FgW2hGLyR3NVd2RzN0SCguYihLZUhSd1h3Lyp1Pj1dciNwTFc8N19sUVRuKDE+aG9BZXpieXU+fHo/''@;'; put 'put ''djJKcj1FJWMiZkA4Ll1NKllVIk9HfjFjYjBAODMqWzAxOXclO11tb3RpPnVEcz9wPUUmY0hRd08yP3kmcVkjZCNjfnFuRFJ3T0BhO155U3VCL19qNUlIWnhhJGlFcygwam08WXNFSG0wXWlXe2MyckEuKHkpc0BOX2M6Z05qXUprMyZaKSNfWyNOXkVaYk8jImBCfDd4S2Y+XjZUeEx3N0QvXnlq''@;'; put 'put ''cllVN2JpZzJzVEBMQEFbbWFFcztNLGI/bTZ2VTFSd3hvei5afEFhK2B+cVRdQC87bl55KmQyI3BDSzkxZ1hOR1BtIm5ZQVYhantKeTVhfHxwdm9fRGo3UXA0MHwrTmZRVlo3RHh+P3dsUXAhQ1VOa2xwRTthWjpvY0BNISQ7Lz9hUyhoMm9uQEU0Y0hRSkQ4c1FRK0NxNSxOODpJZnJ7T24+Nl4l''@;'; put 'put ''Sm47VTM8Ly48bTQmWE9XPTdPU1ssSlU1N1IoLyZiMDddWzJBRlp4YUhwMzVheDtJZXNUQEYyc1NpW2hHJjp+e0lwc0xZRS56NlR8RTV4YT9Ge09XUSo4XkQlJTJkXWhYQjZFJm1VNX1pa01fK3ZmanoudjB3Vzd+YHBXX20kSVMifD1UIz4vWlZ+QjhGTDw2QE5QfS5nVzErTDw2KmNYZ1Nic2NF''@;'; put 'put ''SlY3eG9sU0U2JGMjeChwPyRITE4pQnxuNmFoOVBfaisqJSokb10zWCF2RUxdXSRYX3c2ZDZJbCFkQFM2M0gmey9kRjMzZT85KmR4SVc3aGRVRDheXnpddCYzSj9jMDYiYj9tQyhDKDVzWVVuInZ9UTo6bnxhIXRsVjwzQE5Te10jQjR5Pnk1Xlt+Ll55SGo5KmB7QzhKTCsjcm4rdkt9L2Y/Uz5A''@;'; put 'put ''Jjw0QDFPQldIV25nLnR9Tzd3cDBUOUw1PFAxOHdbMm06PThdXyE7LytsL3RFWmloOCFWVDMqQEMzSFBQfkhpWi9xXXtwNGU7S28/QHVaPTN5I2V6cz1wWk1TQzVbQn4oYDdeJGpAblRnZWozOTNoPkN5YyVWL1F5JW5ESlFhQjN7KTB2QzM7I0traS5BNm44Rz9XIyhsJHwiPGF+WH5KWG1PNjl5''@;'; put 'put ''TDt0X1l0P1d3WVp4YTk9S3c4OSJgNHlBezs9YyZnLm1AVGVzR1NubSJnZDpZNXg5fEI1Qk1hWVg1NUxgSEFELmZTMmBrY3YlbHMjX2tddE1Re3NzWSUifndTOnR8WzhTTn5ITjhYNTc5fHF+OGVsbCJWPVd7OytoLEQuNGJWZ0B7aVVyLlg5Q2g7SW57Ons7SV4uYVpHTFNaOXBUZ1N8KlVTfkVL''@;'; put 'put ''UTkpX19MXnkrW0EvaDpSVVE1TkxFeXFeMWNtZFJTOn1WL0M4RmoxIXQ+Vkt7eXxeTl5dX05HKXdJdklDT287O2w5WClbJmR+bnBERmY9T3kuQ2Y5YikiPTxnO21uOV9rQ25PfVo5YVlJcjY5dWg0dV9TVDpoN2Q3bj5ObTU2QGYuQmQhPllaPH1rS0AxPF9hPDVIOGJrN2Qjb0ozYnAqOUxlL1Nd''@;'; put 'put ''I24kKFZuZzMmTFtNcWNYVlRzN0RRR3BTUDhJJCUyUkw9UFNaUiRIemUldz8sYEV8e3xsIzpPJX17Q3NNekFwX3ojbmp7KnNia0hNZEt+a204QUw4N0s5I2hNXnBaIitgeVVhSXs7L2hHRShVO2VbdWFEVm46fnF7K2Q4RVckZVhVUTVvMjVYcEchfEgyUHAzOCMsTGQudGpwWE08OnxjKTAsL3BH''@;'; put 'put ''X2Q2TUNTOn0oSzh7ZFlje3spOVRIVDtkVis4X2pMNn5hSUQoZDtXZWhyZDtXZXEkKkFdOiRIIm88Ymw7c31qZ0gvZDhdZXhpU1VjZHoje0BWZWlfYmRvRGY+eVpsWjFsY34zVj44YX5oKXsmJlZmUW5dW3YpS0d8NEkkRylgendBJEhnIW8vTyNWS1g2cmZ0TEUwOF1Fd21UNlZyXTIjNXQ7R1lN''@;'; put 'put ''PWFYPS8kSGA3JTJSIXM5WX5mMilNVmdeXz8mJUNnKjxuUlplSjIhL11IVVp2SVt5b25Rci5VQz58TEBDVFVAfGBMKjdAYnU/XipjfmczUlVXalRRcldGNygzJXNePnglY0ZnPiZDZzc5aDZlbCVjaVRCZWFGcSpbMEJ+VitEWzNyaCxfdnllNX58P25aW0dfeCQ+TSVuR1dUQjB7OEMvLDpzSVJL''@;'; put 'put ''NilSWXwhSUFdVEZnPy9tWlg0SW1aOnVTVi5vVzMwPEZMPSRkQkxfTGVwV21COjp4ZXg1VE5lRjk5NnVEIys4VTQ1fEx3W0lySVo+VHklVTtdYHUlKEorZTxkWyNreTVgRD5USFN7cHZMcnhySHB8SVY3O1RBbltMS2ZyRWE5XmV5UGRdTTk+ajpxMyxIbDRtNzI5SXFhQjBXLmQ4X216IVtLMT5k''@;'; put 'put ''ISg9c2V2OmAqdnlHfSttNz16bGE4eDclMDVUPWtdJkpLNjIzIkpzL1JnMi9bdndxWW4yamZ+PnllbHlKZi8pRDhbM1tlXWViPlNtK0ZxVUk8ZCJiO0c4RDh4fll3VHZRWkRZbzUrSVZxS3NRVn5IUn06amxTaF9MW2JMNkhNOXdseU5GJVJzLHMmLDQrRihBRkcldH1qWk9wI3ZRWl9YazZkUGIl''@;'; put 'put ''cm0iemgzM2pBeCNZSn1wLGw4Kkt5ZnFrVj1yOTlMVzchI2ElfVBQPSVjbm0zN1RUL2R+OGwpd28yXWVdUntsNV9KbTwqUD5XbSlhKiY3VH1ZdyVsfm9uUXk7amhfMjJET2I+RyU1Ikk4NVMweT1la3BVLz02V10mRkZ5aT45eHIqeTZ2L1NbXU1dY3BLel9dSEx0WSZoZiQrR3gpZ34qZzkmNHJT''@;'; put 'put ''bXVaSFB8PDQ1ZndRQHEpfWB1TTlxWWR8Qz54VXsiZzM9bDBbUCN+Mk1KdU9mSnUySCpURmd5cj5dS18rdlp1MDorbEJXSzV1WGJYM1N8YX17bF1DUSZvIU13flIzWmE6KlsqemZfYTg1QTlacyFDVUAyTn54eS41YGR6aTdVWzpPPWk7Q3ByRlNaREJSeiNdODYsRkxdJEUrRFcxKz50ejtGWTc5''@;'; put 'put ''LmwkRXBkKzUlPChwa0RNZExzRFFkJFJmbl9dbVR+eSZKb3d6UmZwVDJXSzEvIyx9KG5Taj5YJDJVRH1OUDE2VmApNCtnNiU8eS40dXNkN29XIWEpJUo4JThSTlklXjRqTUtgYmRAQC9Rb0hdUURLcSFhQHRIWjxaa11ZdmM0czZxaV0/OmMlOm14fEN7cClKZEZXPVVLSW98PHJPaWF0fT9iSiQ6''@;'; put 'put ''Y1NiZjdYS3NnN3sofnM/SkRzY2YwOztAcWxyJXMuWn0kLyhoV0NALlRaWWlrO1V+KCsqOHNEUV1seXpsNyYoSltTZW0oZ3RvXjErRDF3dHFGeGxEOHMoezhWYXhyNU9iN3hqUmNhbEFLO3t3b0hQaH0uI0s4dEttOWY5dDM/WVAqVVRwZ11ben5JJmEpZSh0S0deRl9gKmo3Mj4/T102Kl4veWdb''@;'; put 'put ''ZTxRIXxwV2oheEYlVnVwJTFzIyw/NW03ZSt5cXtpYFNEOXV8YGY+M1tQVTpLfk1qRHRSX295M29WdkBwfVB2NVZYRT4xfWBrKEt7Klc9eXJCfV5ZQmQ2NU5sbH1gay5mTT1LeFlaSnl5d1ckcm1RZCU6LFA0OVglPCk/R0t7TSMoInY9UFgmK2F+fSReeSYmeTNBJXsuJEpnYEdKYzJFcWRyYCtJ''@;'; put 'put ''SmJaODJ7WltUQT45X1orYjoqLkMyPHZ9WjxdJndaKyJhMn5FK19eWnZSWmpNMVNyQig1N1RTXy5kfiFDMTdePjZwRDN9O0J9eEYsRD9reE1qaWNaTmZkKG5wdVFHY31nX3ZtP1Rwej09c2Nxb0oqMm1rWGsxVDFMKj5sWmh9aSM6Q3h5JjNvSDR2eHw8SmUpYi9kITptVjNdckB9Tl43QngoYkZv''@;'; put 'put ''OFZtPGdPS1E0OXgzXTNqKVN+OU9HdCZ7SUpjJj8qVj1nPilgY1gvQTkjUTklWlM5MX0xJWVqQ2VfYmhWZltub3RpTjVCOjllW1BTWk9kbi49akxrIj9WTDVjRF82VjlPazBgTmYsSUZaYWZHJHA8Y0E4UEUyJV9bUUR6VlhdOj19Tlg3cDRgUGpgWHl0WTA+d2x5PSM+VWY/UzZNPj9QZypOMT4p''@;'; put 'put ''TnBhWFk6JChWRldMZG9bNSxdaFIuY0giJTBCUkU0TDxvJmk9JjRMN3JzVn5bci5sfURiVSw4PXRlNlFoaVprKnQrWT1AeTg3YjR6Ki92YWdda1QkWWQkLF46IigwLC9FRksjbSImLDYpKSxGZ1B2fnd3JjkrOG4weWZ3PmF1WUpjX1tSdypsXV46Y0gkZjc0PTRJSTNrKHNWMnFWPTZSL3hBT2cs''@;'; put 'put ''aVcuMlZrSmo9bU1eS3wlRiVoYkBrZ0pxfWxab0M2ckY5bSN7ND0wMFQxVndULmQ4RX1uSjU1RCQ2L0hkVDA9I24uR3tbOF1+bSQvOjJAaDJHTCgmfiRmZUImO1RdT3AybT9mMX17KUtDKG1pQGZnc2FmOTpaOkh+LEddOCZWc2lESSw2IXlUOXJGI1MhOi9tWngmLmlAbmVWLmF+KEt9Pj9kMXI3''@;'; put 'put ''bDxedCYsbk1KeTVsN2hdIT0hPk8jaDwocD1FI2NqTy5eals7VFRdbn5wLDNlYlo8VEhRMS5iN3glJng6ZUpxWzVYcG4uTCNtN0k1VTx1Xz9HTCptTFg5MEpwUm1TV2UuaCJBREk2NnUyW1FkIlt3amUiaEJCP0ViP3tlOShGQmpJcXFzODIoS0N9S0ZCXVF5dGl4XVBPR3xlU3RJRCQuTHZ8OTF0''@;'; put 'put ''Y0Q6OmdZL2h9QVdIaUNCUDApJndhcSJBe0h1bXBJWXRKRWkmIl02KEtDV2lldV05MnR3RGY3Vng3KG9DO1JHdSI7RGlFRDo6XTZgUTQiQ0YvSDNQOyNxMWN0W0V6I1ZsVkU5KHVDMG91Ml85ISJtRitwNTdjPCl5KndpZT5pMyErK0ZOIkQ4JmM8eitHdWhScE5Tanl6WEM9a2tFYWp0KWpGJkBi''@;'; put 'put ''ZjErV3V3VSUqb3giUSIockIiV2hOVGpiTWNGaUt8ZS4oV0MmTWlhXVFuImtEJTF+bE50I3QkUHM8WTs6eSNDLig7SDdSMkwwRjAiXWFiamZNPEZ0ZklUVGpYWFNNflI0ITZMXklCLlZCM1JeKDtDNHpxQ1RqO3Q4RmwzckNUamVYd1NdZyYqVGpnWCxOVmRmPD15d0R3O3BOVWpfdHNMP2ovST95''@;'; put 'put ''K3hDZXxqVWpxWHhQbiwzUilMRElgbmNmW3lORWA8MntVajBYYlJzb2Y8XXlsRT8hYnJlZl55dEVFP1R2Vmo4WGBUNTdkPF95KkVwQGY7VmolWDFUS3U1IT9MRkthLlBtRSFzdVpwSSQ+MXx5V0Y5XzdQUXR2WHZWSW9kPGcidlgvMzhwOmM6ViIoNGREUDtWJD9PUG9pOlZiYH1ER286VkQpOWVo''@;'; put 'put ''QjZySEIoSnl8XjM4fFNDSC5dS0Y/dVBCLF9LRz8+UCo3OlZ2KXV4MCV0W1p8cUN2QF1LST9sS0Apc0Y8cjZAelFbfF9LSj8qS2hCXzJgVHxfeUZjR3szYz8qKmBXVlpifGIsNlhvWThydXUjd3F5MV9YRylPK0g1X35JMkxfM1A/RU4pbz9WXj9VTkEwP1ZoKWdsdGQ4cl11JjNwRjRfTUhqJXJG''@;'; put 'put ''M19tSjhaXzNVPy9PQCk/VnIpQ2ZTKUo3Qj8hUDU1OHJCdn4mcEY4XzVJWV0zUk16Q3hjVVM6djhpIXB2OlI9UnVQaWl4RWovTFBEIXR2I1MmaXVQamkvRTM9Nl1EIXQqP0psKiowR2lHRl5vR2VDZippU0ZgXj9ERiE4Q0NyOyNDZmkleyJBSnRlRnhxZ1pve0JfNTFsUlFDP1RRdTpXUUNpb2dS''@;'; put 'put ''KUtSaTxSZHluLEMvITo6KmFLKUVRKHh3XjdGe2c8aWp9MztIIUlQTEl+JHN1VzF+JHd1aGV7Z2MpQk07RFQ5T2lvcH1xfGBZPElXeyEzO2YvUylvSnhqPVpHPDE7P1QpekshXS9XIUM8WSFqI0IkSVFIJUFJVnVgSjxFIiguRH1QYGZtIXlTcG4oKF4iLkJpUH1nQmdORkVHLy5gdksydXVTUCtp''@;'; put 'put ''TEkyZ2kpP1NbbjQ7Nm5oRSZkTzh7cWt8dmkuRjYqUVBPOlQ5Uz9kSCRxM2U3bm5hMEkiViR9fjRJd2ZNQEMhP3Y7Ulg0MD9MaUdYIV52Z01KRE9aaVNEZ2lHJXppcUNNS3dlWFpKLGV3MkFRI3h+TlhYV1JgdmBpI0pMJXRjYHZuWHhKSGVBSWB1elBNZjY6dD9MUkdGSVt1K31YK0w7eE5SQngx''@;'; put 'put ''WCVKQWp2O1JYPEl9IT4mQzlpQk8/eDEoKkpSdEUvSDNQaGhmRHkxNHUwYmM5Til+d3tIZklmWCVHVzxjeyheOzdSZEt3UU1JYXZIbmU2IXNjMGkpRkR1TmcqQ2Q+LGptZzdYfTAsVHxmbDZOP11JQyljUD0kQSsjUytpa05gbi9FND01KjU7IW5zLF9UN3pVOXVSJnheb09lbmc6KXVTPz1KSSVu''@;'; put 'put ''ZUZGey9sNDE4dWpQTWk9WnRnaCkjU0JYSzEzbiRERDg6XToke3VMZ1A7bGd9P3FJVCVHeDExUTZFWkp5UUtoVUsuK2V+WDtMNkV0bGtrflhYR292M1Q7N0F6fXYjKUBKWm97MkgwcHFPQk1MYjt6Oi5GWU5URkRxOmk2KkFHInY8WCtLMTtAJFFWNCI+QnVlVng/aF10KUQvSF5PWHJbUVoiNER+''@;'; put 'put ''SFhyXjlxIjhEKTgiXTUofEJxbSFHXlE0dF9EQVN6WF85MiJ+RSpsKEg8aH4iTEMmaSZhMSh8Qm1RS118O1B0N0NtSENlJnFzUFtoI0E7SXA5b29dUTgiT0ZZJColXlFRKXRIMVZnN31AUmpJWHpKPz9lPCx5M0NGOF5EM1JSejJ4NGNUdj1JXXl4RTAjaDU8VmFgSkkqdXFGMF8vSURVXkthP0lS''@;'; put 'put ''TUB5OEopTUt0Xkk4TDFgJEV1Y2RicDAscmdTKThMTmRUOXxuZyxmU2pSM2Uzbl9EIy5FRT4kWE5JQ25AZHhzP3ZuUENtanosXnZBQDZJfSE2OlkhRSp6TDRDYVZ0QiI0L0YoWXlHOzEqW30pJEwvRHNmSF50P0BGTXZicW9ncmksVyJCbGtkeFohbDRzWV5ifkpyL2osQiFlQ1JQLiszOzRuTUJp''@;'; put 'put ''RWVqRTgzUnd0e0JKLl52aWxNb11SJFNzKVIjSzVdYFl1JFFJaXpBUjprYWxfbks9TjomU3UoRyFhQ2ZLdEA9dEprbldLP0ZsaCtpOEJjNU9zVHxDSU1OZ0ltOyw+R2ZgMSU5aSE6dExzdm1UfHtFelolOW08XShmbzpTNXJmQ1ZDJFFtIWYpO2tHZTEzNk5taEgpUkRpI2o/TmdzSXtFRkN3JCgp''@;'; put 'put ''VCl2InZCWSxfT1EqMzYrLnlVejF9KEBiR3tubn5oNzlUZDptRXlRMyVlIitqS005fXBKK35Ld3xDOn4uclVBLjl3PXs8TGF1LnlBZUI4Imc9Y0FuIUV2MiRlQW4pRmU4WC96XSllako+Y0FQeUNOOEEhPTp1JF5sM0Q0aT1icT8jQWNSJnxgSUUyTGlZJW03cDYzTEI8bGxaZyhxZVJ0TiJhKDdl''@;'; put 'put ''SDlpOlU8YWExY0gxd2NIflNCJmJnZjJ3JiVrMWM0TCFtfmE7ZUg3YV9FTH5TLkhsJUl7czosM3xkJjdmaDE2JDt3TTE2YjoyU34pXmFqUSg7UF1ucGssMWo2TjpoYzZnZzlpPjpXbDFjbXFDVj08Ui5RaGM6YzImSVBsLjIkNmQoITtnZHR7XWIxNjUjVCRBZT5OPzA5SWcqS3xyZDRoaDJtPnly''@;'; put 'put ''LDQ5TmNbSTg1UThUYjI8OntLaXV6XyksSkZBMjpuJTJ5RmZ+KVVSd0FEOyp4dzlBTlh4cnJAcl8uJSV0TSUuY0E4KV9nZ2VsOTA7QTNXLGNRPSZFWH1FXiU9Knx6OGBddSRodTcvYFVKMShdTXdJQHVAUGpVYyQ/JDVHR04vSjtfN1AhP0VOVSM7dCQ7LlFySjhJUGNbQT4mW004eWhjN2Btc2Eu''@;'; put 'put ''O3BqV0JIOEdqMHBbTjJELyxpWypKOl1EbTRDUzoxYVE1TUUpQjhvczRLOz1OS2liPnYwPGwzd3xwaEtBX3dWMXRgKHc9eyVBW11VfCRpSkMkclksJi5eUUdBR3l7OyZGKzhOQ1c1akZCMntwXiIsZ0VWWjUrND5JfEQleXxMU0t8MDQuQkUlIih1XyZWPWJQfGk+TEA2OXomKHlsPDElazxCQkc4''@;'; put 'put ''PUB3bVdeZ3gkaTNIWjxvRFh1fC5fdkRnJDlobGMkaGx1fSUlUktRXTEpUWk2Nj47eW5uPkJtc1tqaCIjLD54RjZBJHcpJT1XSVAjVV0jK082eVp1Onl8VzBzMi4zbXtqeXxVWFdPUy53Z3BZRT9KRSt3ZEV6VzNDWClxQU91TkFicltLfiUqU0Y0Xm1YJENlJigyNmI9SXlORTI7WGk1bSppKCVZ''@;'; put 'put ''SmBAVy8uTGlER0B5KGM7TW0lNX5YVXFYdkJLbF9ILCZAaU9ZXkdgKj9lWWQ4ZEVLVkVKNzV5Jkt8S0dfZjYhXztHM2hzWlp6PlZTejNUQCJRIUBOZkRGelJlUHteOW8rS3FdRiM2dXY9VEhNQSY6cHVlYU1IKkIsYlUwQ14zYFhFcEtTT0BpPERhb1JIWSwyWzxhLm8wUm5HJDlrbltuU2gpTU1V''@;'; put 'put ''K156TXpMeHtYa3h4XiFbbnwucnt5ckJ0aHt8ZmtLbEYvemsqUXxlXyVqPWcwbDBwTnBub2c5enVoc0szSEVkKjteREY6ND06c1MvLzVQWj4zNH5kX3RaKipoRFhWfjRhbGBGMSQ9en1FfCssfS4mVmtwKmwudCFPQkBJOVUhQm5SIl5NPH18KGx6LkNxVXEsVXlAKmkqdDl4fCl8RndGQVMzWntE''@;'; put 'put ''JSZvVF8jNlJLKztLYE5yeSwjOW5wMSlIMVYjdlJzeyFDWHw0NyxHInYiUXcmSVMvcF47ekw1al4kRzQhKHdYYHtSM3JvaCtdRXU1MUx9PSNVekM/UjBSLlYleTtvWSZ7Iy5nbHc6SFkrWUJHYEpyWVZ9OGdCX0tGJWU9S3xlJCxwPUNHK2FEZ3RQKHd5ZzFHQG55bmAsMSE9NDVuXihvbkxpVm9U''@;'; put 'put ''XlMxIWx5X3p6SGl1bl0vYyFLdUd6Ukg0LiU1S1NfYTF4cVt0OmppcVNMUz9fTjNeLzNoPVh8IWwpYXZHM0RUdCRCR3wlWSVOcHdqPSkkOndoPVdxbHZoPShUQnVoPXNJdVhmR21ENmtUc3lLZlQkXjNDZmJDcTZ0T3QkQj88eyg+dFFqJkJtRGVnT3QkQiVtfj5gKFghPFswN1dLaDBDXTo2R3Fs''@;'; put 'put ''QHtNTE9xbEo7OzpROFZLaDAyNGA3ei80YjFDY3FUbz8iTnZEZGArO0JNYiRPemF8VzlFUmNzMlpwXnQzJWBjTHZJT2czVWFNYl0id0czbiM4e29ZMiNCOiRPQ0daQ2YlV0x5UWFoMlslTGFONVRRRGFLTlU8b1VOZHRVIlsvQmZIL0IhTjVHJldEXV1aZEVSOEpPa14yTmspXlc3XV1TWnd5NUVk''@;'; put 'put ''Njk8SGk0dkRQZks1YTs0Yl9aVCYoISwvLCtsdz4kV0tdW3tTel1kcGZiWD1FZ015VjdzT3phe2QoIS5uTDZRYiw5eUc7emR3Mj9pPFVhIU41RyoyTipwMFNvPUFqNnp0QiYqRnhCM2l1P2RERXZfbmVuLF40KjZGeWd+cS90LlUlfnFeMkxtKlZ0OWJ0Z3VoZUpuNVI2dzk+UyYvPjNmUC54Ji9z''@;'; put 'put ''cUQhejZMVDZxbyMkfShNQTZDTEIwdF4peHQ7eCU/XXlqKC9aVDw6OSRvTCtGWUZ5fDV8dV95cnM7Y188am93V3B7THNMKWJxO2gxfEwkNTxdNVhbanZgTGNVPSU6Vit3MUZEOyVLMHMkRiZZYH4oKEgvJlYsS1IuU2Y3aHxtZyxxUTgzd2I5eWpNcn1oMz81I3ViKHcuUmVMJjA9eWhdOjgqJnlZ''@;'; put 'put ''YDw7VH4wSVBsMj5PKHVxS1RsfFZnQElsezxTdDxyX0pXWSI3KyNSUTF+UlJXTShXQTIrKTM7alBMcjRJVT9Jb3VeU1clXjBLWCwuMENGUFlgaTpvayNCUFR2MUA0NGxaRmlWN0RJWz5OZj44Plp1LDFSVlJdbWIie3cxUVJaM3V2PihUa2IxdTU2dl9LQFp4ZEhUaVlYXVVpbiJWQVZwRUQ8eHUq''@;'; put 'put ''Ri9YV2QxI1Jge15aZip0SUVXPV13ZzRWWjxhMDclOi9SbHk6Um1mVV5fSFhOImFSMUR2S0JuTXV8LFc8QWdAUH1KfEN4Sl9TUm1uSl1jREI2ez5PKGJMWENRUzRDOlJsRS9hfVhOciFTTzVpT05IMXd8V05IMSRoSn1LJHtRNyRxQitmU1ImWCl2LjdJQkxJUkpJTmVadjU9dyltY2lWTUVgP3JA''@;'; put 'put ''MSs3IiFkSzo0NSIvZz5aIX1WeX07Zjw4Oi8vRzZ5X24pK2BeWUN1eTxXTVlvMkVBPWYiRFJ3aHtLfE5ieXQheHwuNz1DUyRmRzNCdDJTSTk2bFZvRSJYJEwlakJbcjciJiNwajtXVzc2TnhDQlhJMyMzNjRzMmVLUUUsOnE+I1RiM0tVPGhRcHwpNkJrYVoiVHtwdz9NJk40O3lSPm5ARzhldlo9''@;'; put 'put ''d0ojVU9KRE1VSlhoUEdieVZlNXpNbHBRZDhsX2J5X3tbWnxUcFQ5JnBPb0VqVEBGOU1tZ0BMOUdzWVpATEZzd2hwTDAzdEchTkQ0NEovJW0uSm8jOC5uM1M5MF8xUD11YUdzb2xoKElyR2I5PiFdJWV5b2h9M05HfkpzRUhnLGd2VnU9Ll92NyRxTCU+NF1bXk10SSQ/L2Z4KHt0Jk5qY1EvdStt''@;'; put 'put ''PSMzdVg5Rll+diU7eld5NXFqK2xKb293MXFAR1t4VERIaFt0WyhYcVQ2U2M4TSMuNSVuaVY3b0xVXTNOU1ooSlQ9Tl5sSk9wbig8RWFOQWpTUzJ1d2BFVVEuVDFQPSREOW1PNWNWTHlNS0ZmNl4iMnJEazJQY1R7cTdkVT48SUo1cTU3d0M1ZF0uWXpBPl97KE1QfWh8ckUrXnNLc2Jqa2VLY3hs''@;'; put 'put ''NnZ8NzlPaTA3az8wN3B5TmtjKUtkLClMZERfX2lFMjF3N3IjU2AyVHtDaGxdOnpxVF16O2g4OTBVRSEpNDpJVzghfDZ9amg6dnNaXjxuXjROWzQ8PDtVOXFUWDolIys5dGRjMXl8SXBMNlNvPTgxfC9oRDtlKyk0KTtUalIqX2BrI3VuPEBlVnd9OjR2dWFfeip7dk41ZFJddkUmRjBVOzJ2XWpz''@;'; put 'put ''Ll08VlRESn0vPVAuQTNqZVA8MC5EN1ApOlZjK3FUWSVXfms9Z2tvYiwoUFFJe253YVkqYz89ZjladysmY1t2O31CVGlnJHAlJCpWLz8qXmtYPkJle3R0NFp1NC5ucEY4OHNzWXZ6QzhtPiU+eXJxI3dHTEY7VnRbLDFTQC5HRio+ajV0fCwwSUw9JTpXNGNZSUQxdmZZTzVQOWFPPSxhTykyT0s5''@;'; put 'put ''SSlOei90fCt4SFN+WylsSHlzV3pWX3BjW0woOS5tJUt8PzNDekxbNHM/IzpOcDsrUUA2ZztrZj9NIjhBNG8pflFHX2Q/TjUrUER0JVllWiFMKktuLmhqfTJCYkhaPFpfUzFpVmUoYjxiczZBRSl1cWxTcEtQKmB2MHc3OGJZWFUwMF1sTWQ0VGRLK1cwMF1WYnFkMSg/RFlAOTshYjAyYFFJNlQ1''@;'; put 'put ''WWB5bzs1V0VbSWhUO2t0bk1vOlNgImNGaDd8QnhObkIiQl4oWF1gOCJNPkswN2s/RkYreyp0My9Kbzs7YzRna083LG5xI3Flbj9hRlc3a2tVcEtQdWRwfVVlVCN8OS94MUxdNzd2Om5xZWAwWH5YdGszYzZVOH0uWFllQlY4TyshOmxmP0kwVjgwKFZwZTFzY1prKno2LE8sQlZmOTM8NE1iIWIv''@;'; put 'put ''SEYhI1NkIzFDNitSZl9bZ0RTMGkhQEpiS2l1KTQuSFNKW2VLO3pMJnZpUWVwTiUzUXVpbHskSHxtTVhScng1Umo/d0srXVZ4PTU+XSRlciIyTHY/LE9nP01VO0FlLGZTK1dAQm5yK0VYbHJRZjUyQ3N8KUI4IzlCJSl5aD4pUT8/RHMhWmU9JmdZKmgrc1U3Qyk6fnEhUnByNi9fVGtCXThFdmZH''@;'; put 'put ''fTozeTYkdEgubTUyK1NsfigheTRrK3U7dlZaM282WFdseFBtTmdAIyJIMkYve0J+anZgZE44Z0NoWm1XVytIOzlaPj16Oy5HLCpkfTFSblJ9TlhAeThhc1p7a2dJMTR3VGk5Un5NJk19RjxtWWhPX252SmslU1VsUW9yTCFMZkdmUDY5YSU8TFI0KlowPjBKS0p+WTtxZ0BPekE0OUMrcFNAeThX''@;'; put 'put ''c1plYF9gTlJgS1gjakk4QGh4MyExLztqdDc9KWBKfCJXVio3PlNffTZ4ejdIaEooSSVsZVNjWHFiQTJ7Y0ZXNG11JSxWeWZnbk9vb2wzNFV6VDw0enk2XTRBaDwvfCY8SVBwUlNOS1Z3R0pVT317eT1bMmpJRlVSRSwkMSUoVSNfeCYsJShMJENLZD1lMDBYfiZ6bHA5SDB2I01pZSNNI0V4bHNI''@;'; put 'put ''QXhvdUNOUnZUKEZ3c05EYnIjMXZWdjZlMEcoN2N9ek5tJChuU2pQa3omYn5SO3EySEpsYUIvNFVgdGg6PH5EVls3XVNQU3YxMzdofER+KH0+aCgpK3o5aCNjM1Yyd3Q0aC4lMV9POk1zIXhiPj4obyh1ejNrNXdvKSJDM3ZHXXApIixJMGk9R2RZJnV6M3RiTmh5RFcwPnEleS5bMV5jM3FzN1Q8''@;'; put 'put ''Ol9iZFlYMkgqOWJMMGVAV2h5KFhddXhOUDNUYStVUDNUVW5QOX1ZVjBJJXY+dV9UPjFAK21fS1Y8dXklbiF1Sl5oY3l4QURRczA0a3gvX1l1Qm5kM2UhUigvfX5LbGFTK118SXcub2xgZU5rPnMofT1YczJEQjxLcCFZb198JUxqYkREJV5vKkJ6fUhKQkcxNTd0Ul5NamJEQH0qVVNPPnkjVik3''@;'; put 'put ''OTZgNipycV0ud3xZTzdtNEM+XiFtNXp6ND5HK0MsQEtnYzkvNnEzPGguTF97WF5HW2M7Sj5taHNvUjh1UFhURU9GNF9hNTNEa25AcDE0e0E+RUEmcV1ELCt9bVYkNG4sN35UZlNRPDU3dEFXdlFxZTdUc2M7V1NkcUFnKDBkbXNscTREZnlOLCgpZ2RxQXBrRiFhNHd4JnV5SzxkWmIxekdzbThw''@;'; put 'put ''VFVYYk99aDBwXy9zMHwyIVdSP3BCdzp9ay9qSl9melFjVllNdiwqfHpXcGhiZC9ILGZmI2BIUUxSWyRoJW53a3FTMF9iZzk7XmU5NF5AYnJ4LDEwd0oyR2FBP1l+KDJhOWZPdCtVfE88TXtlYXpqZU12aj1PRTAvOGswKF5AYnRZZlVhMmwmWlMxQGArZ31MayExIz9PPnlmcFQyV0k3QTxKOjph''@;'; put 'put ''RDlVSWxsMWtgSjgwRzxaQTxde1EwWEx2fCwrUE9GcENLJHp1cVYpd3RBLCQ1Vmh4LDg9eThkd0lkST5GPE9KUm9acFpkKG1YcTRFYkEvfG46TDFrWjpge2RfSGVUdDhxRXgoeSNpPCtHOTZrMiVdLDt1L3Q3ZituaVslJV0/KG9DeCh5Zl8iSj9GaWo/VSR5cDJFZysvcTFoLF5DZT9qW3EpcTMs''@;'; put 'put ''Snh9cmFEU2plaFhDWURaM3VVWy9zaUBmYXNFbGdfXV5KPU1VWlExb0RVPmpAMiUvOndFOSpmalFvN006UVByJlE8P0EuXjtKPCRxJmx2Uz9IeisxfThFa3Y4QFRqfElpQDNBUTsiYV1wNmpDbmRQdjwkeVdQcFohJGBddWs+LihKPUBFbyZMQTFSM0NLfjxpei5sK0MkO1BuYzAlRkl6VyQ4YlJg''@;'; put 'put ''aF1LSyFaPEZOJHFSVm85L0FZQXdvT3A7R3slRiJGbi9wWiIyQ0twOzJZTG1tc1FqPEw1cGQvJWp8Q2VMOjlBWT4/OE0zWUF3di8ue2spe2RALDtUP3skJHdIMXw6VGRCWyZfOFV6KUwydH1EJDt0bHtbMlpUZm57RyQuZ0w5b3tHJDl4WTVWclplfHB6dTg5dCF7QCxyNyJVcCFeLEpBQjwlWSV8''@;'; put 'put ''Kmg3ZyVmbyQjZT8zN2MpQ1cuTCE6JGAiR0s3SHp+KzoqYlUzWDxzNyJyMGpZUzdfbHVnXzMwb3V5YThtTUo9cVFNKTNVYj1GLilUMllHbEB7X0Z6eVlzOVJ2Rml6dVY7aGghPyp+bFc9enN3Ul95e28mJVhnI3hxOWV8bVBWZ3h5NSsrcD8hfl96NzdCPUV9KSNuWUhjcE9nPCpeOWNNMztTdDFI''@;'; put 'put ''L3JnZSxePFJyJVNpMUg3NkxCNVduemR4W216fEpzQVZPRCNKWiw9e3NJcUxIIj8zbUVqNzt5XkEsXlNbe0hde2hVTkVdVihGP0tAbCheLl84aFtMZUFXJjNXK3laZF1hIXJXfFVjV3A6JD9bY0VsfG1GekRsMkBtd3k/fCg1fTtIWmo+RiVTQXNdY0VnMnMrM240IUlWMzEvL1Q/VGo7Y0ZhbkAr''@;'; put 'put ''OH4pW1ZVd3RhPnF+MEtLcj1jPGhWdH1tVDlSZDdwSjRVLlFfSHxpNGMpSjVDVmBfa0BUOTozeX13Wzd2VTNxa11GKDp5OX4+L2p8V2ZPNzE+eTM9KUVJVHZman1GeSgyWCYpPDZVKFtDMkxpdWxxYHY5YjovPUg6fT1lLlNQezRUUT9+WkFeUmR9WCglaHxPSTlAVUBnSClUUmt9SHklJGhYYk1G''@;'; put 'put ''U2J+MVAzZjhMP2Mqdmk+YUVGUH5DeXdqaissPVVtRChKb1lkJlpBSyFEazUzaF85MWdFU2RDJmRqTDk+S2l9Rj1pQF1WfC5kKyMjVkRqeip3d1ptKjw7bUFaeykhJWkkR3dLeSQ+eTs8UGJkQFNGN2I6SHxMUjxeRnYjaGg4TVVjW3hGfHguMkQrbC4zVzdKenxWWG5bPzN3cEIvMzVZWjxHQ3BK''@;'; put 'put ''eXpoYip5bm9nVG9fM3t5PE5CfjJUUW8idnt7PzprfnxVOXtwV3hySyNmaG9ediRaVW1zXjIjOX1uXkVPQDdwaFFYZmBbRFYpYGdEX2FHPSJjayRnYWdwYTYzYD1GTFVKbzF5MVBlc3B1U0dJRSxmLnBiRzZBLkMyXzJDSGllXmM8W2cqRkYlOyE8Jk52LmF2QHt0Ty95OWh3Yjl+MzlXNFU6MnFE''@;'; put 'put ''eyVzVndXalRbT2dgP3lhKztJd2V+WzU+WWtJbDk4YVhhcV1DUSg+RjwmcSxkI20+UXghL3xCX0Z+PzArP11ELnwycnYhREBCY3wjYWh4X0gxd1NZOXdbUzd1biNUYjQ2ciwyTWJmNEVQV3F5PTZMfDd+MjVvVmk7NnssVDJeRj87e3YxKFZbaXEkaz4vMm5sWXtCNG8kUl1bV1dwNiR5VSxVODdV''@;'; put 'put ''QGJZSzV3Jkt8KCUoVTV7SU49R104KUwkSlE4YWJFP1I6SmJ2WU81R3NAdVU7QmVTdlRlWW5EZVM1WjA9NU5iMzZOSExHV01JbGs7eHVlMCtWcSlWW3EpUV84bispT0ZsTUJbQnRXaXpIQEJffCtBUVlPJHlXVTBjZWt+I2gySWwycnMxWT96OioiUUoyY15kLEtbL08odWR+KTpXTWEoKy4iaTFV''@;'; put 'put ''PVdXc1p3V1NQVUclTCVTZWp7Oyw/PXBaQnRBPn1UMW01JSVBKmdKO2A0filKKEtqRCEzOnY2WHx9OlElU1lrSGteM3ZJbUdyXUElNmheTCRFK3FUMSZCPW1UImZvWmtXPilEJmIoR0p5MSgxNkw0Vm1oJnt8ZzkmWShJU0RicDUkOmc6OipsSmlhbT1IOyxfQnY9Wz1CTkUwdTIlVj1DenByNXBP''@;'; put 'put ''ZD45P3o4PUJrLjA9bEZxRH5FM0VOO11RXTY2YGMsLj9tY2YhO2JwPTJONSpIUVhkYzFtO3NybEtRUT5+JFtvUlNIJjJ+aTsuWylsPzM0Wlspem8uZiEpZVtEJXopJTp9b0I2UGsxPHk3bCFyPS9EN2g5LFhlWUZjWiUmTnwxbVJfbmVUX1FwRj4/NjsvTD1QUjUxVWVeOyIpUHk9eHJNXXspbEs3''@;'; put 'put ''c3V5VzxyUlhDb0pLUUVdXTBNc1UrSXtbK3FVOyIycTp7eUBMaUdDYnRWMFEyNFZlT158Rk5iUV1+MW5odmliRXpaJTZpRiwzbGBAYi9Mc15SQGR2fX1HfE1YRU1OMlUxX3p1W0FQQDE5VztzQFZPX2MwKFJQRk1Lbz9Ad0ViOCoxdCsiKiIrV3ZMbEU0cj1MdSNLa2V+VUxjVUA4OlZZeG94dTF+''@;'; put 'put ''K3MpOVRMaX5xMHwvQElwRXp0dyRqME5QRTpOL0F2OjV1WDgpTmtabGBHWmo5bFFsb2BzcU9iJUJ3Uk92KyU6fHJTK35seGtJJGl0SjhWaU57MWBqMkg0QCh6dml1K1JBZ35rOT1LZXVIYXdXOnBaRyNNWWtXNG41M104dClkXlV9cTBRb0g2aX5jXlVqRmpke0grQiMzbUU7VVtDTXM7V1tVMjp3''@;'; put 'put ''dlpHI0QjJUlCOXJjfjgvd0I4PypeXyopdlUjX2o/PD9SQitYNV4+aFFIMj43VjFMNC51cU5qTSIiRy53OkoqfmQ9JigzWmQpKlpQK2dxdH5Acn1lUldhZ0NRQVdteWQwWyJbTTN2MjtfYkxQI0ZuXWhGZUwlTHwzV2U7WHZuRjthS0tKdE1YXUBiJjV3aiE7Uz9ZbUc0bmUmeHxAK31BIytefiF2''@;'; put 'put ''X2lpOyU3LFd5WitsRndxZCJYY35venRURSVVLFc+RU5IL2drTyVOWUl0dltuc3VCTkM1OFtzaklzTzdISGBTNzlifXkmbk1AIkRfMz99W3B8ODhmfWE8YGxdJXY8NCFSMSsyX0t6eFdFKF9EZVB5XmNVPzc5QC8qK11kN2NrSj1XaVBicnd8K21oS0BNJDczLDYqUk9TQFtKISFSPHElP3o6STln''@;'; put 'put ''Pl4mMlthUF5HTGIuM0IuM248JGJ+VVVeJlB4PWhFSGdLST9vaU55Q19eOFI9WFQ5c2huRDtYeTVbNHM6KzM/ZCxMVShPSmBdelR0JS8pO20yazNMNGtwdSRjOHJaeFQuKmVLYmY4MUV0Zzl3TzpmQ3RiPj56PDJYKToxJl1vYz0sR0VqZ1ZvJDkvZjpMcW5XVnt4Z3pyWlpGQDIqVTUkJU99OD1v''@;'; put 'put ''e2IyQV1JUV9vUnskO1t3ODIvP0l4eFtadUBxOG5NVXUwcz1GRldjKWI1ZWtOWiVQUj9HfCVnTzlVNEwhZCpnOXd1S1g5UGAuUzkvMWxiSmtKbFkxbF4/VUBpNTtxX14iVm87PmdeWU9yXUkmZ09MK0pVPV9yeS5fIz1dYGIzJStaSmNXbF5GNmdkRVFAW1cjVXBPNiEiZ3NMMjNUO3E4fHAkaVBo''@;'; put 'put ''LE1YOGt5IVolYGt3Mm9PfExQQDEufjQ8RnM4L1JfaXVOXj9UTl4qMTJvfTxFVz9tJVVBbi5dfXtSM3NVPGRSSWJ6MFswcyUwYWI1X2YzVDc4ZGtlKFIvW1RadkA1VUZTVGM/JTdoQUZ5NkRJQDFyV1duQyM5M2RWLDh4VHNiZHJuI3MqVEMleT12JDhQcV1NK1d6andYUSpjW1k1XVoxLzc9QllY''@;'; put 'put ''SzN6Z3Z5R2okWk18PG9hRGRbKSFNSC5pdz9XJH1zXklgS0ZbXjE+dy9NSy9bNGh8UkwqNU0qQ3Y1YDJEdU86PFRDeWkuRHA3UiRNbHAuVkExQmJ2PzsvVkVuUiRILF5ZTih+I3IxRkcld2ZnN3dFfDJyfWFLUi5KcF1eeXJfY2hfSzw4PTIrNHpNfSJyOG4yYy5UVDoxI1ckIj41NWsxYzwmeFtG''@;'; put 'put ''aUBucls/ZnZRWTlUSSQ9bVVeSlZiPzVAVzpoeV56KnNzamJuKGxZUWxsSWBmU2ZmIyswaXhmOUZbL0tdRTVFelF6N2paLCNrVCNQaENTMzUpMFovc11VXVsqfHp9OXxlITQzQk43WEU+SFlISCVoWToqPDI/Kz55VDREQXFbSkhZSEglUlliQ2V2W1skV25fXj98eUdFVkxOSVRPelVPZG9wL0Z4''@;'; put 'put ''JmNiK1JrOkx7ajNSU2N9NlZJdFRHI1grbTsyOTw5eDRQKGZGOWZBbk1DKD17JE85W3w8YD1UUWhATTpoR2FafjhFclpDJmxzbGZRVHRUMVEiRi5SLzQrWnxgcFYvWUM8MnlyRUsuTH44UEE6WVNwVlosVE8/SnwjYTFhT2kmTTtEIVRuez96W3BCTGVOfllAN0FxaGxrMlVuLFYpeSRCXm1jTFlG''@;'; put 'put ''OTUyJVZnZ2xATGZwJi4hOTE2dDJULlNrMk0waENINWEkWSMqV01xaFdNU1BQJU1LanksZEhSPjlULm9DS29NXlNYWDVqSkNlbDloOysjKnFONXt0NURUZ0klUVNtO0RbWzxpVjRnamQqJF5VeVRWb1Q+JnY/P3p8UTZPOF40Mzo3cSkwcmx8dkd2ZD1qOCtOK210USlnMHIiRChYUmswPEYuVW0x''@;'; put 'put ''VVlXOldtTVhCYUtbOSE0d25jXVVlPEM9RTUhLmdbU0xGUm9SZnZnMEpETFo8N1giTDVjV0Q5LmpDdEZZS3owTWJYKlF0YX4qN2FpZj4oM2khcCosdmMkcyltYXF7SkRSdF14R0JgfV5pTlI6bS9NPENIVzksckNAXTpPd0h2cTo9fG9KQHdQVVclWmA6JXd9d3tnVnBObUk8MmEuKWIvO3Ipb01Y''@;'; put 'put ''UDxOKnh8TmJlXllkb2VsMCY0MXx3L0FtWWFuZDAsdkh4NyNaTDZMXk9+S0xgMHl4OWk7VTM8IXhMXjIoOy9bR3dmV2cpJDRZdT9geHFhcXhwYDJVblJHU3BXdjxQMkhXYj10cDA1e29HIXh9Q3NLc0QoV2tWSz0hXzIoITJ0dC59Sz9uTGxyLnVJK0ZATFBaVzY8VH4kRWBofEEhM25UXlk4TTk8''@;'; put 'put ''TTlvZ0NQO0R6eGVdNzckcFovT1ZnemdiWXRxdFA5aSZbZWEhUzBmM0w3VFtIeS59ZVNSVmMpNVM4Ll4heGh4I0I9WVp2bD0jTVtkeV0vW2lrYFtYOXckaU1+NmQ/fXd+bnUqTDo3PTYvZltoaTo1LEpFc2dwaTtNUG1zd3AqXkhNbXBYa1dwSl1Wdzc/LjdBVW8yPlhVSC8kJVM7L0hKcCNfe2cy''@;'; put 'put ''dUUjKyY6b2N+XVQuOUA+blpVQHsoS1Y3LiF9RWwyXXhIISxaNzcsMzNYTjV0S09zQClyYEAvV0Y3KFQ5WTs8PFQ1NyorTWc3YW1WUmllSnpaSWxuYE8zblhdNUAkLzdOK118P318STNEISxRYm04JjNJMTJ2cUlgWytTelE8NFR9eG18bWVnNzx2X0FtViUrZ1YwMllEQ1VfeSklbFZfT1Mzak0h''@;'; put 'put ''Vzl7V213QzBFNC5HSGNqcjB8JDQ8fDR4WHViT2BxOTwqeSYxcDE0L1JNbyo1QmhiL1BzZT9zd0RMSHEsZiZsey5NdVNDVjA0KV9qPlNkdXkmMVppK3xSc2szXkIvNlJUdk9SWGtzWSkhRDA4JTtybHpmYldwNixYY3NbVGk1L3VjQVZFeGQ3cHpDUEJaPWx3K0AsdF0xNzU6YVpoUlg1TG1QaXNZ''@;'; put 'put ''OltuTm9oc1kvW0ZUTVZMRyo9c2s/Zn53JVZSYE58O1suMlg2VXVdUzEpMjdHSkFGckZsXUhzTkVpd0tZVktNTmJROVtXUm5GYHF1e0R+SCZLOjczZjw9L2gxOXYmMzw0PGI1WkxScDA/cSVCL1BhUzBnOTlOeVtkQklJOzo3b3B9eWdZMWRWMlBjYE9deX5MUWxrUytRLzRkcFN5M1kjM3lMNzBS''@;'; put 'put ''dXFBaSRtVEJ2OkAraCJ6fmVDNC9sbFpWJS5nUXdweW1UMH1MVzdyaGlCMjg9cVdoXWQkOGcvKS96VjkvWylkbjpzSXU0fSVaa2RVSFFATXZTK2RnJX5GSGA1Yy5ONFt3O0E+M2x7b3EkXzBWfkRXanlDNkhaWThjKm5KcGVkWGNXOSw0O0Z6VyR1NlN0Y2dFVl5hdm9ScyU6YyV6JGcyLG5WWUI2''@;'; put 'put ''WHB9aEA8S0cmYTFgZ1JOLjhAcXUhXiV5bEY2Ny5wQG9xTWtwVT1ZcFtuPVNSUzMjPD1lMDplJGhQPzlYdi5VbDk4ZnNLJCI6NmB2I2AvVyVkJGcyaz9fXWt5LGQ0WCp2fWAmYSEoWUVPRFplaHJaYDEqWWNORXdIOHE7cXR4aUlAbiNTInd5N3Qma1MkTWttfGYjOlRsXltaVj98bSMrR0VtU1lj''@;'; put 'put ''LFFmfklxWCVFTkhsRCppLDw2fnl+eX55fnl+eX55fmI+RGIldzY1Xk1PSUBCKzZJXXw/OHJfcyM3QFYuMSVxW2FDVV1hZyI8QEZgUCtSUjRGY1ZxPyQ/OVlucVJSd0ZjVi40ZG9OVig3Lk9Ib0QlWiZSNzZDd0gvZWwweHwsfT1vInp+S1I7cDZteXkxMGo+OEp9ISM3ZlFwKF9FdDteSFZkXXNW''@;'; put 'put ''Yl4vOWZAU1VlJWQ4fTBqPyNOUmpDREBtfTJiam0+KnQ5RldMQHB+WDBySkt2RSVVQSZ1OlNPQzc7QElTQi9CXzl2NVhiN0NEPVEpWyw0OWBvaT5vMVVeS24xK3ZLdk17R3x+SSZZKHUsfV57ZygoMyxgMVJ7fDBVWUwmLFJALDRKNmRQTTFCOlZQTEk+RUpeMHcxVWtDMEtGOXVWPFVofG9JcFRh''@;'; put 'put ''UjdiJXIrQ2hrYHNmXjh2NHFfKWZ1YjlFfWVgaChCZCM+ZSNkLHN9TltwJV9nfVtlcn4yXT5gKVY9QHo0cnBdKTh5WS5FQStobTtQPDtQc2htN1BlVkBpbUw1X0hqQktbdmxGci9PeHB9LDF9TG9gInlIYHh8Q3IuXVBbWkkuMTxObEtIJShSYV5GYDFKL3hUbHdDa11HZHZnbTcsKTw7IWA5ai54''@;'; put 'put ''Wzh2e05GeiE5PCZTTG9gaWBFYWZWPy5wckh7dUN2KTN8PmYlLG5zKGEpJFB4PUw7OVRdMDU4b0hSM1c5cV9BVXpGOjhXOXBIRXgkeHFlXjhnJWwmWVUmez1bQzhhfTg9QjtnbDVydF44fVV6YXBOW2BeMC5iN2l9MD0pIWZiSCs8UE5USWxxYlE+dVgmYDl2bDdaKVpGQE9GYDQuZHl1KWtdMjwm''@;'; put 'put ''Q3AwND1RViJ3eTdma3JJOTNrL0VdaWRxRnh5WishI31JciFvTnpFfCV9QXNWZ3kmQ0N1dW5SUXdZZE9ZIXdeLndsPE1IOzMyVUBQRkhFTHh2UmBfQEhvJm4sMSJMZUJpKGxWRkxHWDJxS0BIb3hxQ1MpTSxZKFJ3flBKeHI/SHs1QHpIey4xIjFOM3U2fktvYXA/ajVeQF1qXVZRMm8/c2YsSkNZ''@;'; put 'put ''WWt2Om53cCloejAsNGtkdCtuYHhfeXxIVzV+KWRKYlY+OHptQVE8TEkoUyFnOUU0LEZ+XU5eM3dRe15rWyRedEd4PXE8UTN9XTh4ek5UYWgxPGYzYTJVdXcyU3A2JEQoTFQlUC46Pj1WZlVpQXgyQV03TzNNdX1tci5MaC81JDw/eilIMTJdMHhFQz4yUyQjcFlGci5FWTYpJlVOekslIkxBXjoz''@;'; put 'put ''Q2o1T3lLKWljSFFIeDJBa2w+aVJ6Q3FIKWk3REkrVmhSe0xKc3gsJHVob01Ma0ZmZXNaczJrZUMkR3RNXk84KUwyXmg3OWJoN3wyU2guXTxXLmt9N1NyUngsTjldeFImYGgoQzp7K0RQbDNlcHdxaVZNU0BHOX12YjRfYlkveEYlMUcvbko1Zl0pXWopfXRGNkcjeDxXZkUzUEt+ISl9W19POSg7''@;'; put 'put ''aEt1aSFJWlVIe3Nqdlt1MG5FXyVDeWRwZD85VCJ8YSFqIytHOnAwO2dsaTkkJSl1WlcmV1NXTTs5Rjh8cFk7bWBvfDp+Jk5UeSlneDVCXjw6SGNma0VjdHRZKzt0JGkpUmpAd0BXXm87eWorKUVRaSZSb1k7eXs5TUdxWW5FYTlKISgjLFZTWnVfSzVdXVI7KE0qI2Veb3klSkAqbDI/a1c4cyUk''@;'; put 'put ''RSZ5UURwO0dzTTBaZHkkd10mPzU1JDk/MXMyYGZUWXo8cjd7UCYpXiVEJUJLQiMmWSVxQWtxeDhHQS8vOGJIbFNONGRlJmlbWFFlMlJ2RDtkLn4vLyR6TkdDOE1lQ2VWKXxXSHI1MUkzJWQzc3FlSmx3SC5eNy4veUd3ezZ0WTk2cHs2YTIxLzp7XUZlMUQsUkgqTWhJK2U2P2R2aClRJXE9OFJ6''@;'; put 'put ''NklqKytmdV1yKFZgNGd2fTo6cmppPnNgKFJSbnJFcUhdNTMxeElAMSVLKnFAMWc5aGtAcUtEKTpMKXdzTkRqeihaSUFaPzhbLzdjTHNTfUhkWVA0fkYmTms0PUUsWCxMbzdFWjg/NltpelNiVDldcyttJDNjcXlQfXVFfkZBd2dGW1Zec0RCPjZPPWh2ZzssXztaJTkuQHZiUWtpbkZTUTphNjZJ''@;'; put 'put ''VEdkL0VLLCZpQU9FXVVZU2dkYTl9WEVrdTYwREpOVHkhaG9UKiprLEdGYH1AOTwlKVRDZHpgXz9yRCY8VGwmcC9vRDAoNFg5KjRMRnY0YykkTUV8aUB6bkdLOVI2ZXNZdiIob2U+UHg7cTUwSy96ZlVPQ05rJU0qWjdVZnR8L3N2MWQ0SWdHLHQ4S1IjbTNVUz87Nn1ZTFErMlg3VmE8PGBlRjN7''@;'; put 'put ''aXkqbWVJNG05US9GWWViT0FlKURXKXRIcXVUX1R7cUglS2wrcDJ2Z2RWZShZXURJWCtAWHUrb2RDV2N6d3tuVz4hMmJAWGwpUGR8d1YwcjAwRGw2Q1M2JFQvaF1FSn1Hd34zRkZqPDNIK08qRCs/TjcoIWFLL2tsQDBJLHJJbCNUZCZXOFtUe0AuPGhNRjR5ezhLVXJdK0slSURKQEc8cyt4WXJt''@;'; put 'put ''XzZkZlk2alNsLCVfW2x3d3lKUyVCJS5OOWZpUmtHMlU4U2FJRFp3ITNxeDRJbU9gT2hNRk54IXpRNkwwV0J5WjxidTd5OHAubm5XYEdQaV9DUWRKKz1ja0sxe0gjWXtLfXMxbCNCVFkzKHJ7eWgzKHJlNnZGOXxiMTtLWnkzbVdWZ0tKZXs/eyV7Jj8qTTFPZns/cnlWckJkZXVleVppQWU0PFFs''@;'; put 'put ''LnVJKElkUitMX20lOmwhKD5tO0RXbnUxeGI+SW07fkB9MzlUVGFAMWdWIl5EeFZ4YGF3eVszfW9AK20uPE0pPSt1XTxCK3wqcGBXX3FodT5GUHVMOEE7NlooM3YpYVR7VWMoNzN3cGg3KGtnVXBaKGFibmRNWyNYNTwkVVMqM2U9KmE5S1toZi9vTVUhYn06UDJFKE5URmQyfGA8U2FmMUhPT1d2''@;'; put 'put ''PCV4Ikc4VVU7Vi5zekE+UG9oP3VbVDMhMDA8W05RcEZbfStRfUAwTnN4ZnYxT3czJkNdJDAlI24wVn5mR25GTjguSVZqS0BSPj12bzgocz5PSjowRXB9U2o/LHQrWCZsSyIwPF8/UDtsQSttYXNZejBOb2RXI2U8dVEsNilYe0YpMU5UP30mU0wjeVtJXXk0PkQsN25EanBGV3xGfDl8cGZrcXQm''@;'; put 'put ''fnNdNi8vaiwrdHNnW0hRR0w7KDVDNXxWVD5FbDw0MCZBZTlpe2t6NjRoP1B5fXt3W1Z3ejRdLil0WWokak5KYHUlMyViWUcsZF0+WGVYaDA6PlhaOnRKJj8wOk9vR2ZQKHl3K3BtR019dz5TOG1MKDosRVJeOUVqMSUuSntfJmQ/eUAiOlJDTEF4TjtlMyxJQDJuT3ZlOXBwPUlOYjxNPzp7Oz1Y''@;'; put 'put ''eVZVflFldjVCTCpATVA5SWh3OSNrezwhYGpJVnc1XSplekI8eTpzMiwlfC47aF12Tms6XVt5OE19aXkoLHtDT2gwL089M1opOEViUnBMdTRzbjhrUXE4WFJSfipiaCxPTWpZPVVmVTRpOyM9OzlYZzZaVWNSTCxMWzEvSW91VGpUY0g4WTspZzxNS3E4NzF7WHQ5QiFXJHcvWkVIOE5vL0wqbkZ0''@;'; put 'put ''Km8yQlc5Miw6VGtHeD0xT3EzSWxLfmBrMlZkRlFEaENvO3s8R0UqRjpTVDlBSDYxW0l5Oj49UGQwRmwsZDcsODs2VnVyYjs0Wjk3dnI4Rl9BY0s+V3ZpK3xvN3txX2VufW8+aUtKfW1mOHg9bXN2fWhQaFMoXnZQZ01nfWJIMiE4fmgzOHd+TT0vUTdWZjlhV3t7NkhnNDJgdlQoQytQTUlhMEo+''@;'; put 'put ''cnBNLyZha0EvX35ycmo6alE7NFM/fFs0KUpSKFJ7XWEmLE5sNnE0L1ROaz8jeTUlUns8cHIoTEhvZWpSQXovRmdyViVWWHopTSRzSGB1V3BWfi4+Q0BzQHFINCJrPF4zZ2xgfHlZRj1ie21tVmtwVShVNDQqPS5kXlhfbVc8NCM0JH5VNDNnPlF6eldAVUA4VihnP0lUMTdrP2B4cDA0NUNheG5F''@;'; put 'put ''YnVVODBDdjJ8ZGJjMH02Y2hsZSt7fWJ6OFZ+Ln40NDx+SUBHJHFBJkpKcDBnVjtAcSt0Xy5AU2RpLCxZRSpVdkZAcTk7LnY3MkN4MCUrQ1FgTklKLkRXLF12ZUA0KTkoWnZGQCJJfUdTVXlDL0B2UkxvK1VnS1lGQE9JKDY7MCxtL34+MCw5Qz0uWjJ7K30uXTJmfHQvXUlZRD9JW3lWIkwvfDQi''@;'; put 'put ''K1U4TERdVDlfZHVaLEthY29gbnB4JGZVZEt5LmpaLChLcjQmekttbzVbQFUpdi9QMD4vQ1U0QDgzfUd5T25HPEhpO0VzTTt0KmdaVitiOVBWI0ptXTF5PiEhOEBUImRIWWxTeVJde11iI2J5NUpTWHxrbFp4UmlxSFRobU1oeCNOaEx8JTxPSWRkOFJqdT4vd1RpXSVbTXsmTTlmPi40bWUsLlZY''@;'; put 'put ''NE9oLzl8Mi5uQ0lJb01VN3glMz52cnpfeVJpTzJfaFJYNWZkKXU1dCM2Yl1Ue09TLEZ0dVJ4XVFhPjc2UnF9UHhyJmdVdk17cFszcHdCSnAsVFVYIiQzYFZSdmw2MTY9JDkxJm0oNzV8VTxgWDVbOG5KJStOOnohVEdfdUgkLHRCflRHQFVXfEhQQFVRWjEmJTp2OzZLZT1zaVQrLkdeQFA5eGFw''@;'; put 'put ''OmIyRGhNS0hGZn1XSDx8VDtQc1k1YVdPSU9ISStYZyRZcWl0T1lfIzc8VllaJDp6O2YiME98M00xRWhZVXl+TiUseTl7WD5OeUUzYSVsUT9NeT5PVTA/c3F5Ni9bRzhlMENXQU5GYkFOPzlNU2NSd1dgP3lCWDdWMH4/d087I1g5LjZhUC9OTzVrPzgrJmY2Yl1TWFFhSCxuZT05X0ZAc1ZiXmo/''@;'; put 'put ''Ui4xbzY7MnZkJjs0d0tkJlklMzFWa2skWSV2N0hXXnI5Kys5fVIoTSImTjQ6ajZ3a1NoeUwqc0wwXUs0LG1TampVIyNTZGk4Oms8cDl8LmxXOmdhOiU+TTs8fkx1VExKcitYQTVMVlswNDtvSVNxNlNHMHZufkJuPEUzKSpGYEhZQmtjIWhOWFE3ZClEVnJRd1dXP1JXPTJqOnBwYENOeGwvdXhk''@;'; put 'put ''cDBiOWlJMncrI1VUK09TS3tWfUdWXlNrcGE5O059XnJiampoISUrZUV0elU5bCI9Ni5gVXowb2dSSTxJJVt6eXY7bTtETlg/KGgyWGBTLkVndmBFcSIsImo9PmhHLFNRO2gpVmExSEBKXitQeXh2WDgvK2d9e3JkenZrLiE0Y3c5SllNJXFNRDtWK2FOeF1FTno2d0s7MEJjVGdpP0xyMW5dWEJi''@;'; put 'put ''c3J6O1JdNztsOn5sMHJ0ejorcV1SM0V6bTBnTVpfZil5ZFJUVDd8K2FdJT4kMFJuQnEqJjpwL1Z4L0E+bGM1U257d3ZlMyYrZUVQeUd9OEVgazBiLl5NWzpycS5GcHZ+c1NEU1JzZCVMRzdmVVA2LEVVfTByPztnRFQ8Y1FoZEordnxNW1Z+W1kiQCNCR1JTMjhibiFZdzZscFtCO21RQ0ZzWXlh''@;'; put 'put ''Y2sqPnc8RnlQVFQzQyQ+d3hQRzZPSkFRe1NjYzZYMW8+dUxBaDV1ekpnYGB6XSZQbEs8a11bR1F6ZXJ3cTAzQHxGZGR9JXNLUH5QeD0zeXxEaHEkbz03XiMmYWR1Wzh1TWhvI2ZlQVJWOiFyMD1udXR3MERHMHRQIWxLdDQ1XnFWWF1XcEV1NFdJYlhyd349JUFvaHpySTN5OXpCVl52UnpBcSwi''@;'; put 'put ''TTdESWlbSW1uL1Q4WmwpRXpFcX09d2tuYXlULmgsYkZ4ejtDczNdai89Yktpe0BAdDRFPD1QZThtVk9DYSswWEN3NDZ4P1E2K0hVaTZueD80QEMkMSVYbil5LlBwaEx7blQxPFQraG85bGdDK11RcFZ1UV9dTyxSZltNfG1JVEF7S3IrJnleWylsZmEzNTIycVpZPjlzRFcoZiJWVmI/SmlQd3p0''@;'; put 'put ''O08iIXxLPGt3QHB3NilnMjVoQ3RGfV5AdkNOZWg2RkglITtGdl1GVWlwYV4rKz4jOntkRXQoY0QiNztnMj5SWUA5QklvbHo5SG1+SVliP2FDRjhIWjZfeUxpM2ZtPSpVemFta3hgWk8kcjBSSypidT1aQUAkP0gsXjhJXiRvPTokZDhsTHVbY2hVWDpMPjchXSxCe3BVZW8ocSQleS9XU34qfT9p''@;'; put 'put ''aEAvQzp9djAlS0lEIXNEb1dqXTNgVTh9WGgyXy9ZMkNJXksjT2lNKUVkQjYmTGB5b3ZZLmA9eEUzUTdUN3VEak9ARVouNT5PKUYrYy4zRGc8PG5aYHVpV0tsQUtOLldLKyJRd3M0I3g7bUY0YUpAZn0hOUY6P2IxSitaZ1poN0UpcmxgcDJCLEhzcm1BRjVUd3F9bExXbFZOXjNOLmYmcl5acTs0''@;'; put 'put ''JiJ3eDVrfiJkQCMxVldNZ1ZuOHpaSFZLOE5vNSQ1cXM7X3xBeDUvdTs7L1h1d0twQF98PiRbdEk2T2clWmtwQXYxOihQV3VjSz1bQXB5WyN0bHIpcmVqYkU7e19dc2YjSD9nbTdNalErOU57P3MqP18hMEtoLjtucUtoJj9aOmFaa05nMjt+VltWYzA1JmRsaFdGaV86UlU7bjo9en1keWM9blUw''@;'; put 'put ''cj1GNjRlQ2RvciZsIS90dz93S0dJU1YsJThOIX5vUiZOIUUzYytOY3QwMHZ5SG0oPTZRYj9kdTVuWEFIb0hsI3RIS2EzOiFiOTtsT2hjPl0mR3NwbyFlS0tqeTxOPCJ3SyR6WktYTk08cmIoQihsVDBjIyNreEp2RHgidCVTYERAOnlnT1NQU1dHbFd0eFRsImdzTENUbF0uRU5mWDhgXX5oaCE0''@;'; put 'put ''ZUVOZykwd2VlXTBiOyl2W2NDcmMpY3hTYiIlM1plOVAxSTtbd2NvXU00VTN7ZDd4MzdqIS9ZISwoOGY5Km0lY01oPVhxQnR4QikpWkY2eXwvRlswdzZ3JDo3aXp1IXw8QWp6Klk3ZTEjWjksVlFWJm15QlU7aGsjISxQWTlxdyhGS1hrez4kfW9WR1pSW3l3M3lJNU90aWJOdzN9eypieTVKJVB3''@;'; put 'put ''bjxGc1RfVEhRJTEjbnFoeWd6T3xATzFlLy9jP01XfjY5SUU9IjpwY0EuLG56aVtIc1JnZ1VOfV59b185KTdTTFliRm46WCViNnk2VFRHcX1udzchVlk+aCJ4WExPTFRhW1J3TFMjOHkuM05vWmVRKFRlQ0N5e1txXy5FOGdlbkZjbCwlKmR2W2FGVzdKYFQsPmM0U3IrSV5Pd141LE8rPFR5e05l''@;'; put 'put ''ZXh9UkBmW3B3dy8iWTNjUEtgMHdPWjhfLk5sL0JETWk1b05SNSYuaEY7XzM2NjhBLmBvIVlXZyhVZDwpK1FUZyFATmhxVCNqQCkwZnh3Qz9QY08/Wz86SnpHVWVZTW0yJXlIOEsmXywjZGA2altPRWRRKDdxeVNAYSNYLjpASFleciskazptVEcreEowbVtqI2JEWE5PaUYrRlVURkJZUCxRLn5P''@;'; put 'put ''XzQoTkEvOjk/cHJ0JD8uWSgwYi5tLn5Pbj9gMEZQTWRvZGpZa11VZVNTcDBKPFBwaypuZVMqMUtEbDkzRT5qPig3MTMmZmcjOEsiSnR9JGA3dnxKZnlPfFMwZGVfaUc/MjVlYF9PQzdyXVEsdFM2QGFgPSpjcE02eGQ4dz5kPy59K1k4aUMjY31bJihOM19idEksUiRKODlmcDU3aHZ6NyQ6SmJ7''@;'; put 'put ''eEJGUSlRdH0zQC9IWDlZVV14bDtCWFY4dCZYLGx6WmpBfDZbRCwiZjxpUXNrJGNVWE9jcmR8S1QuMWBbb1FNNDtteVhVT3s8WV5QWjk4TChmZFd+YCJ9dy9oRFBuP25XTmhaUF9NeGJab0Z1ZTJ4aWFqcilAfTtXZkYufTtda01IcWVUbkdzQllHeC9EXnhIcXdDNitFe2FHaiFrWVN9cCxuRzdp''@;'; put 'put ''TTdsdHJkR25jNHs2e2N+Nzk0b3Vab3t5MWwzeE85alN5eUZLWEA7SnwzVmNKcEwlT25jVWB7Kyp+V2h4MjVXfEpFXiQuUzdpaHM8VlB8MWdgbzBAaGljSzZaY25+NTdUVEhHPCVVYmBBJTFDcj0rdjhDLixdV1hIdGwpLi4wenFJUXNyMHBUOllvSXVBT04mS3x4WDsiUnE3ZFJ8IlAjNVs2STwr''@;'; put 'put ''Q3l2cjNQQiRMcGR0ZXo7U3g0cHp5VyRVMXt7QF9melFONWNBZDxTRUtnS0NZbSNnZEtLX0hqIWNvXVtzdmlWaFV9JFQqTEQ3YT9hV3BfaWtdO3kxXUZacm1aXVIpVCk6MWRUcmdaR1ghOHlBcUMiXXZPcGgrbEluZFkqbVtSN2xbWWNpRnF1bF9bRHtPYX0yJXg5Qk92Umd6ZHFbQHVhZV9rOUcz''@;'; put 'put ''Ll85XkRvdTxCPTwwQU95MGpGa1crVVlzZDQ5OFNWY3dYUnMxQUd2cVQ0MG4lQlljODUlQnBaWXpuYy5rYVdHW2c4bnx7eCh5c2REWH5NMkQoNTdUYU9GPy50PCkqR2VYR3QzQ0ReN2J1JF0pZDZHJV4hKWoqR2wyKEdaK3FTWikwLkwqKzlRXW5xRzVEeCQ+UWswP0xWO29QYixUXXtgXm9dbC4x''@;'; put 'put ''LHlmK3I3dU0jPHYmI0c8blU+JHV2SzNwNEorJDhBUGtKKTgkeC94Szwzdi9NXjdQI0hPP2BKaHdLcUhvKGxWPnNTZGImOUtYPEVGcUB+b21VR0BUbEdKa0NkRi9qQFRqJkt2MEM2eHssQWhBNHNVfnB5PHVKRCU+bC5TZVdCcCpFSFQuTHsoQHA7cUVARW8zLzZgcGBHK0hAK3gvQEhiMy9WX1Za''@;'; put 'put ''MmJLK1RXXmxMVlgxPTZ5OX1SLkVHK20lQUsjZkNadUNGaUJtKUUmY0lIaks3dk83JFthYzNaUjs+Wk9WSGAxKztvKzEjPyNzV1oyYjxAJGcuPXJvTk9ZVnMhLDFfNDBxd3EuKUpqJnd3PXI+PysxcXh8TV90X31nOy8vR1RVUjE6TDFyJFVGTDpMMkB0cGxWV196YUhaVkA+fE5YMioiOmIvZXQz''@;'; put 'put ''UThbUk08WmkqYVtFfEZwbykpenVvfHdhUysjfj5teUd8PGYsZz5VTDp0XT8jZzsrWV1QMnMkPnxbPyMoS01AUXB9cXdbRXFpUytta1ZJNHVuS2lLRz9JPmUoUl02QHpudWo/emJvQXN0Y115Szc0T3R4dyxiK050XWBBMExATzxOKHdAbXI1ak0wY0MmXlMrbTFZZThtXTt3QWUlMG5FKndCLHJA''@;'; put 'put ''dz4mZ0dXbmcjTWBtaTNhS0BteEhdZ0s6PipFdGQ4TUhoWENzPHExRDBKcnRAeiRyQFQ5Xy49bW4+NCtxLmVBckV4R3NUbENZeTFnd1I/LzB7OGlzfDw2KTUkUzdBNWlzPSoiNCI4ayE9KlpTMWM4NHkmKnYvPSs0NEtadmxoYH1GU2haWkF5LHgjQF1KL287bjdPS3NeIXM6ZWhrQ1VPSEoyeXkx''@;'; put 'put ''TGdIfVAxOzFkU2psRGNsKGxEZXhmPzosI3ZTNCwmN3lMRGpDcGlwfkJWX3slWHNgJm1fbVk/IzBqLCZfcH1nTWVvRG5HfmtsfWZqJk1dUk1JSEZfXl5JXTZBYSZqaWJPIWBRPTFlTFAyNURtfn5xRS5JNzBjQyhVOyI5cV5qNSw3SyN+W0NQMVgwPjF7KHoodjRlWk1OODRPalM9fVdGSFc0bV89''@;'; put 'put ''KE07OiNudT1VLmZaLD18eXhnRHlQZW02WE85IWJlQz5iKCVCNHdrLkgxV2ZiXUBHbU9uLnRESmQ7V04wPzplIVIoRkVUMVIia1RrWV4hK2g+eDNjUyVrM1FPQDA5Zjw2PU8zVEQ3b1JrImA6JUl4P3ApblorWHt0dHNfJDQlXyRsJm5reFp7JXY+K01mVEkzXWF7YnxUOjFmTjAzMW1gTyY+YFdy''@;'; put 'put ''My8yRVpIYTM8dnszVDt1NGAySXhjOnVoOjZIUG9GcX4odCFtLiF1N2QuL1NWT2piRE9uZDNyJDlUSVhPMHc4Yn4sJmJHdDV9KDFaVXxWX2NIJmlZT1JNe309bjA7VVt8KiMibC4ySHRUL0trNTdeKiowYyhOVzpQbzNSM1NoWFozfHduRFMqOHRVdzxxcjBOV201VV0hWTBVUnAzVDRIdFQ1dnVz''@;'; put 'put ''I2NGTiUkbXBXP31pbVZ6QDF3QE1mVHUkJV5Gei5UOjF0VCN1e00yJU82Lz0+Q081Zykoc1tMcmNsN19ONG47NDF2P003LF5sbXc9eXAkdlYlTjlGI05dQyxSJGpfOzFtLjpIK25sXi98N3BpPDQlO1Q3MkU3InIkTkQlJSpRV1tNcWBhYipzS25xbylgfXc2eXt5Yz09LGlZT1JNJjJFSiM1cUd7''@;'; put 'put ''ZCl3Pl83Ql1UKT53K0tvQ2EzPHVCKzxUeU88IlRMJWZOKzwkYkEhWF04SG5aI3VXO0U6TGdwWEVjc1l1fE01P1MmbFsoNCs/VlQrRUEiTkJeVDcwL2dPe2g2WDE0akY+U09fO0JRQEYoXUJ0PCVsK0tsVzJ7N3AhNlAsY0ZuNFFmR3A3ZVNpKjA+MEVGMypZTFBzS0BQXUVla0UyNztZTyFsPFJK''@;'; put 'put ''NUpFZyxIU1BybVhKSjJ7cE0pKyg+Sjw1OHdXSGlQSTZjYmNed2tUZ1NGRSpBaCZOLm4zcGh6TlE8WCVQTDxMMTRePlNHbGhrPyM2ZCQueCU2UkkkQ2k/OHhVPW08IS4wSW9dYk1uKTNIW3pddGM8Nm0oXWkmbC8hIksrZ0EzKjF3el1TcFdJUml6LnNsRVNwUyt+bEwiMkpsM0BQVzp4JkZyLE1t''@;'; put 'put ''NjBVUVgpaXEhc1lgKiVeTigrckJgTFBNO0ZGfjZYRktkWFlpXVNSe2RMSiJbPS46Y2FyeXpBNndoTC9aISNPV016NkFCZU5CYlg1aThUW0AuLFQqY1s8TnZwczFCYTlOIWQheD9rZylCUXY2bHA7QmI/I09RbjsjaD44ODdSY01MUFl1IzxfLEtSWV5vVTtBcHs7MlZhc0UlNmNRaVFyOCROTDg1''@;'; put 'put ''Uyhnc1VRbztIfnBqPjhdLyE0KVdKeDdwfTpAWF5KamMieTI3fGY3ezYrPitURyI4Zno3L2pLRCkmb3NZfi9QUj0zIWYvPSlpcEIjQ21+TFZ+VWQ/JUp4IWZAWFJLKy89OmtmOmdCXkBeUTBTfUY7SSN1TmpjRVlMJHRYTEJ0b3d1K0A4UWIiQ2VNK0FAUSxRMlk9RjU9O2t6Nl9iUWU8bzQ8bGBw''@;'; put 'put ''ZGlRe2NvMUFbdSM7Lj9dWUlKRUJHbUFuZlksckM6WzprU3AuMlU2PlNjUjU7b2dIVT4zVlBXUCY/fD9IRlYxdVV9VGNQKFJnTW1FPm44NylZNCNLaGMzbyRdUzw2Y0JVRW5GYlZsN3BvMzwyeElxUl1NTyw1Mnd3Pm0+TjpiKjAlUDAkLnRpTSJSW2R5SU5XNVJwWXNmWE5Nez1uM0EqT2EwY28w''@;'; put 'put ''IV1FKCw6MER6dTJ1YVlXODMkeXVfRG9PYUNjNVQ1P1dJUW1WPyM3OjBEVz0mbHpnPGtmOjA/aS5tW1s+PDgvPFcuYSUsdGFXOWI3LnBRREYhTUcmOj0/RldFJXVjekZgVkpRXyZ5RmBASXxGfTh7ZG9FT2JfWEM4O0RWV0MzXUZ2V2ojdVdJQW5MJnRIRl55PnZVUjNYQVNhTGRHZngzSXFJLjFC''@;'; put 'put ''Ln5gYXlXXkpGMFp+VlAhNyxpWWIydEU6MnV4MGB8YG83N0BRei5pbmd0MCE7ZkAyZyF4dE9TRVR7WSVVOz5eXWpsWih2aShSWG4jUV1YWXVVYixIPyhTPVAxOiw9X2tBX09tem5eSHcvZDU0PlRHPT92ZXVwOHFaP29gMitFWG1ZanskVz5AN2M+WUNCZyhUO0VGbE5zI0xmfUZzeXZfRChERHBy''@;'; put 'put ''UEZQdkFPL01GdGdPbkhsKCZ5KHZqR0Q8NyY6QGVmbCwzYV52YkcyUV06SSFhcklsWmNIRklieHUwOys1RlM/UGI7QilqMXQ7cXkyKHYvLlNmRkBZV2Q+ZTp0VVZwTiElZ3p0Wjd4bCE9VHtbUFNNYE5pJWBkNDkzMV9TNnA2OVIkWmxRZmw+aWBkRzV5OmgmPlN3O3UiZHBEPllhc1o2S0UqUWlv''@;'; put 'put ''MkRtemRgKSwqW0x0O2N9IUtYRGRJQUZWbk43QVBnRktSYD51cHI0aGojaW03fik/XU1xRlk2Oik7bE0zdXZnTVc+Z2tlJUVuM257PWY/dFc4R3cxRGdqK0FsLjxNNWRXQC9adEJBOzIjTTl1V3ZuQXFtZz1nT29pcilbOFMvajlSME4/XU4xc3ZObX4/bkduKUkyLiVzWkI1Py9zelpyVzlOW1lw''@;'; put 'put ''Njd3Myo4VTBSU0RXYmRIWD95VXovI1QjWFo8WkFZLFMoe3BxLjdHITA5WVoxcGQ7cGF5NTgrcjJxakZJOVlLcDg5SlhROjoiTDFKU3FPP0NsUTMsdGkxOmwzQU9wSjJCNjpGL35bXm1mbWI+cFpJQ2VHM0VtQmNwZjhHYDZFOE1GTitWNlQrRDpobUZtY185cSlkVjQ7eHwvREVkR0pfOXx0WWNM''@;'; put 'put ''QHQmXVc1OzJWUnx5PlV6c2tCZFRrciVjLHJGU1tRNkZyW2FySmVWbSQiMFVdN2kqWmJAanY8Zis2M2RbU2RgIXpBd1VKclExT3A7a3tVRCg3MWxsRTp9KypXTSVmS09yT1t2Qz1iSzZoPGtoQGBzVjV8cTQiO1UmN3B5emM8bWNqbSN0LHE5TGA7PUFlciIkI012SV8qaE95ZG5eY2YqN20oNmF4''@;'; put 'put ''KCxyQ1pxcmdIMztTb089KUIlLFJwKkFRKUV+X3ElOVlveDQjI3JvaTc1PDdXV2VTWy8rX2lpWE82LzpbSEdPVnhOPXROMEpaalJlaitteypMWCVzc2BkYHtmNyM5KkVBZCUqVXl7L0hxSl0qITVzWSxjY241IzU5Xj1NIXw5JXhHMk1QZm9eSmovYEglKXhgR2l5VzNwJWpjamZgfjwyMkJRUlVY''@;'; put 'put ''NXx5V1IyWUxrVSN7OUVfPWwzVFkjMGd0TVg1JTtaalFNZVl+aEpiOEczWGtNfCE4ISs5Ni4zX3AxPWwxVFdTKV1QYiNmRjklYlFueGw7QFdkbkpdXkhFcDMzcEY6OFN5eFFfY282NWRgP2lESjY4XW0wN1lGNkwlbllFT3BtK31wPyFXLHdNJC4rOisiOipLIng+e0xyMl14RElrZTw2MCU3SUxH''@;'; put 'put ''IUR+JGpJTXp8RTZZRSpuOjw9PjxmNXolMkhCU1khXW1TIjhHQj9FKUplUUJtVmQ0M1VSK2t2SmpxMD8jPjc2KipmOVZdRCFlN2w8SWMyWWEwR25NO0RlVXFiYkpHcV8yWzh6PW03X1t+OVN6VWJBRjxDMmEwSmR1MzF+JChXX3suL2dddWdwNihbS3l1MChbK3UmbERgJnh2UkAjWUtOWHdKTnlL''@;'; put 'put ''TkY7YEtZS0plXzJLflclUnk2SmteSjE7PyYiKUZZVC59QFR6VltOWVlmTH01fl9ZMDkkd0QyQFU/cT0saSZ4K05TX3EjQXlAXmUlRVpaOHc+XzN3eCJPfThJcjJifDU1RG15YVkzdUsuYSopN3BGeVVDbCVTRVpZITArcmlMR31sVzprcDM0fXtlMiNaKktZKzQrQzg6NElwIWNZSHRdKFRGc2dr''@;'; put 'put ''ME0rc3V4MGs5VywlNTpjWF1tUV0xNmBRNWwpcnRjMC8+OnRnJXdFOE8lRDhlP3V7TmwlclU8UTtoOE4wI3BSI0BNK1NKTHY8JUFdKiQuZFUpcHRtVTtZflk8SjRJQk9aUT94fl5eKDVqQUdvRXlbdT13SWx6eUUlXUU7bGBiVywyOlQhKXlHJmQyeWMlUFkvQDJubFpEcHcsQn0oLG03JVshRV5Z''@;'; put 'put ''WGtGXllAUTpLPGUyaEQyfio0I1hKIUowUWMyTk50JWMlK3kmKFNrKHUydSQ/eCouV1Q3O1M8MG1NVTY7Lzp5KCNMfSl1W3Uye3FeKXdPcG9CQENjTnE+PzA2JH5FZTVHfUQvX1RsW3xKOFlYJnR2N2NVZGUrKTtRTHwveHpbfG5bQXB5WyM8QWMhMFJ+WV8oJT51fW9MMjdYU1tHfm9zfE9mbHBl''@;'; put 'put ''QS9uIyt3TTJvO2s+MytHLkMmYHwrWVJ1eUh2Q0pvbklFXjptJVo7SVFqKys2S0wjUkl+fWtiYW15WXB+dk5hbTIpcy4hNGhPM2UiOmFtJEckPlVsYW0iNHwuc2c+W2F4P3JCNzkiRWtkRmZYYF0sWG9ScCFFeW4sLjFbMGs5KWB8WDdAa3NAMXw6QUxlSExLOCUyNiUycTZaUVVbcS4qMUFiSzVF''@;'; put 'put ''c1l3a3NEaGohc2lkSjQzc1lCdHhbaShfTlhMXXw6MiMraEp5cCped3ghOiUqcl49TlRWMk9fdDQzWkZ+JkRIWikoOCxEOG46OWcsYzc6bE9zR3trQitIbzxyMWhvfCEsZWxqPkpOVChpZF5JYGR5YCp6ZjlQW0ZZJV8xL35zZjhqWmI4W0klW0lYX2haQWk0QHV2eDRjRVgvbylpWHtCYjQkWyls''@;'; put 'put ''e3I4RTlaJlo6SG4rM2RjKzVwSUxDM15mXmYkbyErV0UhVnpZQClRMklgXTBXSzE6Y1dvaSIxSWBFazAuISVQNysxVk1eSSJzR3k7UnF3PHw+XXNvI3Q0Z0AxRWtBa01fWFIxdXMpeUFWN1RfQmxrfGpsQWtId3BJY0tnNypJNFVRT0Fpbl5LSGlEPiMhWzdUTSNIMjA8KXdmfEliKThmfCZPb0ox''@;'; put 'put ''d0IuZmtnLzJgNzRWPGcjaSE/PHpTWz16UEFDaGY+Nj5nL01TPGZKKEkvNW94VUlOMyIyRnJPeTNoV1pRQ3JJMS5QVj9SKExnbD5pZ3d4fU4zZnEiNGRvZmZPQHE/fn0lfUM2NklbNyRELn1OVDhBRCZeKTwuaVMxUlRTdDN1NmouI24pO19FJC53VV4sI3k+JUY6ZUZ9ajF6NDo1SCMvaF5menZx''@;'; put 'put ''TUw7c3N0IiRvZWc1L3ZrMjYuOUx4STEyRDN4RilbJHRbakA/fEZwMChfL0MiJWFrZy9UQVdCNnRdOjtSNENGLEtMdjc/XlZMKWQhS3gyV097NzVaKihxVzk7WjQveUViO0BJM19URWx+b2dfZGpkJT5uVTUjcytyJGkzcGdfNFBXTXdIIWt+VXpWNXYhIXQzOSgzZDc5X2VkKXBKLmZPeV5DWUMl''@;'; put 'put ''LjB3ajcjWjpZTTtgIUFJLDpeY1drS0w0XWcpUzJkQk41MXdUVS4uJE58fjosLzg/L1Arb0FqXXxmNiU0IzFVOGE9UFl7dkl3RVlIUUhNelkmUzRzWUVgQzQ9UFV5YWI1OV0wV2s4MTdVI3diLlomPHE6VDxkNXk1JFg5cEJtVD83THAiPTZ7ckVLSENjYC4sT3IhUXtySTtla3khWjNiZUZZRzBW''@;'; put 'put ''aytKREcoWlUxMihfaiQiS2MxVURHKHMhKnEuVythdElZQWJ2QHpYdXNIOV0qS1AuY1IvdXUmfVV3Z2BHOm5sfF1gcGcyYTpDPS4uMSoiNXRPYVB0THQqQjlmTXZLQWlpcmp1MmI0WkxsTGpFIjIzaV4/Zks7LGg7fkJgNSVjQiJ9Uk9dSWBVUlIyVkxyLyRrUHA2NHxAcVZQMU5UM0BhVkxqYlQ7''@;'; put 'put ''ZDNKYXk5dDZ5SWhSdnUkZys5RldvL1lvOy89QEdRdHhEck5VTER0cCt1YEByI1Rrbi8+MFJgcTxYOksvcjxfJWd0Kz1YalFWOUNCKHY/WDJTdkEoaz9gYHxYWD1bQ0QjWlhZQXdBY1JoQWNFSUFIcj8ocSRrK0deR3E/SmAuYHM/S2BXTy84dU1xWCYzJks2QSk4dU1pYFlbPCwlR09Db0EmdFk0''@;'; put 'put ''Ly5jQXU/QUoxM3hiKW1udXhCK098TFJKO0UoXTRDNzZ6RnJZcmp4VnAxSFVsY0BGVmFyakVzZT95NiVjJFhYNTRDQUhgWVZhU1JOVD98LE99cnNqVkZ3Tko1U1ZXT2B8Z0QpTlt7ImEkT3NqaT42Z04yPVQvSTRsJVhQfj9yJiMsSVJvK3JSLjhuQ2VdXnU5My9VOEk9ZiVvZk90UVAlZjprdWxj''@;'; put 'put ''emc2MnR4fClIS0wmUWsxOFJlSXdxU1pLS0FxJFZ9XTovPFZDYVVSTmVLUlBmaXJWcyoqZ3kkOTpLUiY/VXtSMyNlVnBQZG8iKWUrViteeUwqdEtvWkJ9TGtjRXF5KSVFUi9WQElFRUczQTlafXdmP1NteU9mIykpK2h2P203P29IVFIwMUs5cF5FfHdANW9eSjI0NENLOVIhajFTcjhsUiQ+QHlM''@;'; put 'put ''T3o1X29OO0h1OTFpMHhQU3gvZXAzZVgrd2xpOW5zQT47LHtoekJQeUx5RVVrdDtlZ0YyNCxuZnl0MihSbV9rOC4lY1YzZW1Tbmc7dUs7W0NWRjpvKCswO35xOnE3YWFqSUhzJlRxe0chdlZMSmx9NyhfNFs4KDIzJm5FVWp8OHZQZH0vODUuTltiV0JxQU9KSX46Ok9CPFAqQFIycGk3KnI2LjFR''@;'; put 'put ''TDVjR3I1LD5qWHomV3BoL1E7WXFdQGI5e0M6Tnkodj9Od095XzYhN1JYajlFTXlvQnchOmtBRi9qT0hxKix2dUhLdSZXaExiMSpkI0ZHLyxkZ0s2aFg1ZXVeeHwuanYhY2s2WDYjKj4/O1QpZUhabUxoTGdXUCVNMkp9YDtkO1ZKUEZ5Z3B1ejt2T0guaVAoUnB5QHIjKX5Acld+MzhuKXE0RnNG''@;'; put 'put ''fjJDIV4jJk4xOVdRfjJhJiIkQW9WQGJoUntqYTByKEVefWBKLlN0bV93VC4sMDN0VzlLXys8fXc2JHlGM31vSk5UbiFfdkpqJGZhaGNwVn1jZ0Q3ZnNdU1llQjhCO0I4eVlCWSZZLGxTJTkjQXZTIzRkcTNpMDU0aGJteFJbcGREX05CLjREYGwlcDxTPUt9UnwrdXthIVo/Kl9iVkpVYUpiS3BT''@;'; put 'put ''XXYmK2wvQmMzezx+R0oibH4hJGxnR0ZsJWhYSUA5WGYjQEdpdyltNTJROFZUYDBlXyRLXVN3PkprSC43SCFMU248VHpxS2YmdSRFIXE2KUtbYXhpUC5TbGVXaUtgTnxnaGY3VF87VDRuQWVNOTBHJHleWjUyNFEyYC95VXo5bzN0YHNhK2Apcy9tTF0sbnU4Q2BKfUBeKXRPc357fmk6MDwyUzEj''@;'; put 'put ''OkVhJmV6Yi5Bcy4sTDd+TypOUUBIb3p8WVZCSkBHcj9US1JWUytfQDNAN3l9Vih+e1JgTkEiSTQ4QyR9NEYjQFJCS08rZFl6eU9RV2NjXjFAM0tlXWNCVF44Uno3MSI4PFdpTWovS317OG4lNDxeKSZHUTJfVGNXPT9rS2F6XiJobDVVKy40dXcoQjxWSlhwO3ZxZUVqd1tHKDtvWitXRWpkS1tn''@;'; put 'put ''a0xQOzFMJVp+Wi8oRypGJVl8WFNZRUcsR2A+ayN6fl1NMGwvVUpSOTUvZissQTdkcllrcDV5WXVdUTJtM0I0O3VJdCUjSEI5MFJAd0NwKzIlbk09ay9mTSo5ZiJxVzU4MXxoW1IlTiZtOnlPbzkpS1t5fSYvUXBRNmxUJGs5U04jcEE0ZGRVK3VUKExbMUI5Y2lUTiY4PUdlOylsPE4zYi5kTCV1''@;'; put 'put ''PWJxX0FuWyRwTGskSiNtQyx1amo9Nk01IllvSG16dDVsRiZKSzIzKCRMJlFbb3FlNnZmbSZ7aE1DJXNNLDNOcj90OV1qOilufWczRDN1IlhVSzRIKi52V052fGU7PUtlV0AzakhdYl1rKyk9N1JCRz85WHM9T3V9UzU0WVJ4SlljfSpJJSpIJkNlMjZ4MTQ2T0MlZEhoKFB0aFhYJGVTIWddaEY8''@;'; put 'put ''JVo/IT8mSSFMMyY2b1h7QWVJOkBXbHQwNVtjLmJxSkEzRCFLckBUVSpMfV5QZkI/OlMqT1tCMlo8PH1CUzI0SV5CMiZWdzJyJjlLTEAlWzFVUV5+LldZIlV6cXk+emJkNShkfStaSjYqJip2OkZWIktAX3NWLF8xOyU9cFl+VnZNQDFOX0laXmtBSzBJeEJ8P0RGTVYkJEFGRWRoXUFlPlNNKF0w''@;'; put 'put ''YVtaNVdPOS5kVSFjaF1BVmgmQEclVGxvfDFDdVVRSFlfd3cwZkRaTyJZSGtSRGdrXUtATjFkblMhTGI3QC9xU31HU0B6fXlNYlNRQFlfUTNJeCQrbSgrVzQxI34lfENVb2Rpa0k4YndjU0REQ3VsNFpZUUkibkpLOVVXVXFZSCY+YzA9MnRmXTVmT1VuZmR4ZXxOYjpqVihqc10sQWhGanVRODdG''@;'; put 'put ''bmo4OjNgO3MmTigiLHEoMzJPbkU8LG9XVTF8QFNfbXwmQHk/OURdM1gwYk8jWFo8alNSM25XL1hhIjQhUHQ4ZmZzckR6KlYsd2ljTmVtZCNiY2pkZCNiZjpiVU4xZEEjclA/cDZKQDdyfkhbVDU/dzZjKVRMK21BI0B5YStJQUR5NzF0XTdJVjZ2WCpLWFhAYWRNP05KWC4mV344X2hMUFc2cHlM''@;'; put 'put ''NFRnRzViUXVOVkBORGN2JDMhPXxzTlEyZUduUTklVEkycVlkM3xUPixHblAsXn1DfEVmPntbNikjK11MO1RbcCk1X3ZMU2hUfjlRbDtsUjlRalJvTElmRVZDOn07WiIua1FPbygvcEc1SDc7bThzOXpVfkhpUjhCImRsazYyMyFfU0JlRDgwNnh2KWApdXM2SFNdJks5eEVRN21yVkFVJHdMSTlf''@;'; put 'put ''N1c4KClWUFM/U0RCY0t4JE0yO0pCZ3p3TlteekwwenRaOm9+a3tmVVJgPX4kKjM0NS4lQl8oVmArUFhTe2ZOV01CTCFaZ0V+Q1teRFcrKn44Kno/YkxHNi9ReXs8cEduTTtzeDUpe3M6SzFRb1JNcTA/I1JdMzZBTDNhSGtPPGomWyZJbyl3NWVqaE09MEM3WzBYK21oOFQ5SzZrJFJuXih7Ty9y''@;'; put 'put ''a1pvZFtDOWApWCgrIjNYRlR2RioiM1ldQH5oKWh1c1kjP05XeTJ2QzA/bypXcmNZQlV5czJ8UEI/NHNTR3M3RXMjRTxraHxYJjY5eURXdktXYkF6L1toRipNb3ZBSEVtNll3JU8yQ05pOSxjTT1OKkprL3V8angkUDlMU2B2KGpXNVNwTFRwR3E3dTMhNVR9L2s9RmBjfFk1eH0wI2pmSj44UWJ7''@;'; put 'put ''PTZqO21LW0FoQVRITilnQWZHaD4vYkcsckpTLm4vY0woZy4xNmI6bGo2aHtGZk1oaXBLdVouOTlTOE1rSVYsRyViUlI4bmhTX0VDenFCWU48MXxCM3RRREdqRVpMTldEMnh9YExkc0Z0QE01Rl9eU199dn1aQF04Vz5DdnVNI2FGKzk9ZCVvZkhheG94UCNme3AwL25gbk57RE8mSTYhKVNQVXVa''@;'; put 'put ''e2RoNy85dDdmRD9JVVdKenB5MXFsekYoOG5lWTFZKGlna3o7a3YzeCJMeiZPbyU3bXA1N2xFdHc2S0VQbXpQJls4NDM2SUoyPTY0cURWKFJuUXNqPz19amQxbmVjentefSZfODcrfU8mTyR4NDZaPmQyaCUkK10ydD02LyozVGh4IVdSPWomLD5jKWxvO1ZTQSZ3c3JDc3ZbM1B7PzQkUyVjej9r''@;'; put 'put ''T1IoKlVCY0ohSG1nNk9sZmQ1dTlmNTIsbFJyMSRWYSRILGFSdTBbUzBvbCJBa2JFL3NPXkJZdlM0XnlVbGF3RCg+am83QCNbbyMlfnBxJFZoVWlWP3clYkh1NEliaDY4Pm9Qez1nYHdIczNfSH5nYS59d2EwIWo8VCYwO1t4RV8xQ3lHdyI5PGs0ZXZNTjpJZG1wWE0xbTxJOSpnQEZLayRBdk1p''@;'; put 'put ''YlRHMDw2NylPcHQld0REY0Y5QU1AOSVzdlRNSURlK3lVOHNdZHImbHlMcm0jcz8jJmhvMjNfOG5DS1ZxbU0pUnpMSTljLDxTY0s1PkR8ZSFjUyJucUgiaUlZSCY3ZWRgbExWR2swMkVjRFNGVUU1cTNDS0NQfENzQV04Un42bVR8dHA9WV9UcFdnIW9bezlPSl9EfikzVSImb2tOUzBMdCZvcE9N''@;'; put 'put ''b1ZxQ10wciVEKXkyRTZxTVR1P2hGOm5WaVJeeVpaIWp0VChuWXw3V3NMNyEwWH45RCs5L0VBRE1PLkxOZSFWJTBTYmAkSzhYcGhlRmpPbGRzT2Z+TyJBND1Qcns6JGokSFB5JGYkZkoxVSpTckVqZDdLTXdIQVgpMkhqbHtuIzdkNFVCKVZ1cl1RJEpWZmRuZV9ITz41JTw3IWYpXiU1VXh5byI0''@;'; put 'put ''dF1lWSZ1W35MKHRTfjguVnVOe01OKHVTcm1VTj5wYlo+ekw6MzYxUGlPdGl0SjN0UlJZeGZtZy5JfCplfk8hbyJDeilYIixPP0RfdCNuPV0qWElEfClZSWdZS1IuLGdUUlUsKnVMcyVFVV5EQmApbUI3fndfazNZMWxfbUR9am5kdT84TVg6ZDw6WWl1dT9JUFBFVWVmZVpnMTVqLnJ1RlhreU59''@;'; put 'put ''WTgxJVReQnB3RXFTWTtGTHFEOXdFRkdxZz19X1p4ckhmJHlGU3ZiSGdKbz1QLl49ZTs9NGxMVC9HPUU8ZGxdMDJBRCg1QXdvLCVqL3cjK3Y+YVE1Tn5EJk50fmw4dCU1PDQvd25YWio7d1t0UWFPXUN6QFtxMyxbQjxaKyEvfnkyfUciVSE6M2tSXyk/cz8pbUBGdGlnNE1xSC8kbG9fYVBJIltC''@;'; put 'put ''QEFGeEpnPUp8SD4kakgiRF4oYEhudnI5JlJHeTJzZCpWJDpvYj5sOTUvaEIranc7OGs7MiE1JkRfS2JmISpMJTtCQDooSzJfXl5Ud3xiIiEoZnk7WF5ASl17VlU+OHh3PVttQ2VbW3ZkczlFLixNXW16MUI/YCZmSDBXc1NPW1ciLnhYUTc3diZGLjkzRUp3YDR4fiJ5dzdYbzwwbyteQDFMZkI1''@;'; put 'put ''Y21DMHt1VkAxXylRd0MqbjdBTDxsIUtrJHUqImFmdWVhZE1uYnVrVT8raCFeXUlMcSxRZHg0bWk5fXt1bllJdF0/YkFbJHd6MS5PZ2tYNk83aWtqP1A3altuKjN2aT9lRiVYIiVIWnhhS0dhU1JzPjd3Yj40dERXUiRNJGhaUGBtSFk3WkZzajlsIm9kOT5JP21mQU8mJStTWDU5b1VfSTtDU2Mz''@;'; put 'put ''Qm99LFN1JTRpXllBM1t5TE5LYE9NQGBMK3A8bVBVTHEoQjM6c0BzNihYMkYqM09+bVlSMnA3TCYoZCNpQWVCOEFlQjgpaWJgaiNKbGFbOU47PC56ekB+UDVfND9iZGVCNmM3RE5ITl0sVkdWPkkyKEIkXkhqIU9WV01FNSMxP2NfRy9yKWkmZiM6dWNgPyF3PDxeMVRhVipyNmFWdTQwRG5ScnUk''@;'; put 'put ''UzJFQ0EwV0JBM25FTUxDXUReSjprcGAuQk5KZTh6N0NXZDJ1QzRPPmljRVZFQUFBQUFBQUFDImVHPCF5Ry4qXj9GZ1FlWlU2aXI3I25BVTxvbkdZdU0jISUsXmI5Nk96YF5rRClIOFh1djYzSGA5SG55KnFPUj9pIWZJe2xDdzY5d2pVSm52d1dsV3VPTk40cmJwM35mNGx2Wk5GVmI8SC58QE1b''@;'; put 'put ''T34scW9zWFYkXWx0bTZ8Rll8K0F1Tm82cVJJQEZ+ZUh5UmJ8SjdvOmxDM1pYZzcrc2BxbjQ8Vj1KYUZ1VCkyc1hKbWo2W1tKIjE0UyQrRD9lVlAqWnIsam9NTzVrU19rWld5MiM4VUc7N3M5cGRiX2diQlpnSFl4T1lhRTpFaVlCMlg4eXNAaTsqZlYsI1lWO1pKVnJMVU05bnNIcGhoM2BvWTxP''@;'; put 'put ''bWd7Q1lOVyMmLmBFTjBPamBBQygjeWd1I3kvSiIjIX5dWCRmd1U7W0BMN0RdUXc5Sy9JTixPQjwsaEpRUz5Yb0VbQ1BKaT0mRkkqSWB+LytFM0dJW1VCLGNtSFhGPyFRekNHLGxJYz4qOnhGUyh+Q0s0eXtSTltEIW14OSxfTndbSVtRSD4zKW9sLHhTc19hbWh1ZjRzYEZiWjNlM2ElJlpTPlA7''@;'; put 'put ''eX4kNFpXT09JTnpEdUI/UGw4RmZGIWB4fGlHdXcjISR5bW9PNTBYPDEseGtOJTxSOVZtUWYwPSM0UFVVaWVGM1NRNFsrNnFnLi9iWXAlX09Td2pFW0liKTgwSSY0WSVOR24+TkZ5aGVWUnwwPCIqKkk8azskbjVtJGx+b2pPWm9bTzF6VVZFQDVYb3pacVAua1VbRmp4djFBSGltK059WzVEd1Ui''@;'; put 'put ''RUo0VnU9KHBCb0xTQX50Z0Z1UTVOPy8zeGYle3gpanV6SjA9bFJrK2FGYUVwJFg9OzN+fD5gWmlSdlZza1EwVWA4OnhZcCVfUDpJbiJRZmNyRTAvS3gsWXImSi83TTRVXnkmP3hdZGkudG5aaHsqe09zal1KSXwlWHMwXyFNeXhyVkdXYTs4Rlp9I19GTTZoZXg1OEdLWElITTpiJFl3aTZrWWQq''@;'; put 'put ''KDVaTlMvRltNeSwlOX1JeCJNQFtQRzk1em4/Kjx7Ojlke3lKWyRQKFtCRjFGRVRFeEdMMWomOUgib1AhcnchRUpdW2N3VTVdKyU3YEdENlhITDB6VCNddW00JWFdKUVIdkIrPldUYHhJIyROPSlAOnM1cUxrUmhUUnY2U0k1UFgoPCxNM0A1MF1zUyV+XnhaaFhCTHlfImtYRWFVMGNGVnlhcUAj''@;'; put 'put ''PyVEV1RbT1RqTFJCRWhHZEpPTW1OUG5dR3tzP2NMfXJ9Pj5gODF8XW8qZW9ue0NycXk8cnp6bS5rXz0jUHZiVH5mIVZkOnhrQy47d2JpMTZRanNVJTlrZ0BWdU95OElbKyp+Kz5LLjtmdW4qTCVASndgMHFfanl0SDRYYTlNWktXcFRdeGBoY1V0elF7L0VnOF4ldzJFN3NAYnwvN1c6MiNuZmEq''@;'; put 'put ''YUw4YkJ+PnddJk9URUx5X19WXl0qSl5leFpFeVZYZ1UiSDlXVGpIS0lNSF5dOS99aSNbYWxDJjAoJU48TTxJezNMM092fFFNJkgrXTMjO21JW3t2SVZ2Y29uSWpmP2BNQnNidTByZ0VnYCo3aks1YiR3Uy5PejpgNGckNDApfGJzYjB0VihPWGt6MTgsJU5vfixCMGk7IToqcTI7OXlFITp9bS52''@;'; put 'put ''eXU0OjJNS25RQzBTRUF0K2hKdnU+OT1DJlRibnUjfVckPnh+akF3NS50bH5wb1B0QHZnSm5fRXBgR0JANiROTT9ELykpcnQ1eHNLWyklOk0qbntoTm5SdndlUEJscmZ3M1pySiFgeW5xIj5ybHsyNDUvcHdvIkdBPCJzUzF8K3lmYDUpdSNHbmljM009amZxOS8sdTt3RyxQNy9lPlt9R1s9V3td''@;'; put 'put ''KVBvfDE+WkEvVVVAdyVPfS5GJWJ6WGEzTCVtd3BvPEVSI2pFMUR8IUVeRW9rJndIalVgX1J0S29JeXBTMUt8PSpFeFRVWUpzUmg/ZmlndFlOOVI9a00iVn1fck1LVntte0NuLmZGSGx2ez1vdnRDIXtxIXl1TXAzTlA/ZXZvK1NXQjNUcnx5L3FTeEZgbWNUW1tNeHo2UTk6ckN5VCg9XjhNa21A''@;'; put 'put ''flR9SS9QYzp3fmFyaV1vVl45YSJjIkxSTi9UZH1BIlVZNXA9Pzt4VFNKXX5QbDYiWCIoIj5ZZzxfKUhKOHQqLE9sPndIRCY6QHF7RnY+S2RfaiQmVFlBO0RXVz9jP0RhUGI7M0VWb3hGXk9WT0NKM0woP0RmY2VEfG1TZkJxKSV0TjBDcFgoXkBFUUdQPVloPXBIMUFYeVEsM3pLPThdP3ZRPnks''@;'; put 'put ''ZSxkby8jMlpHZGNWTkIsTWB5aWIjKT9NTExXciNVdSxKOngoXUBKSlB0Y0Qpaj4jK25WVXg8Pkk3ITNpYXtdMHsrZGwzL2F3a1glaiVUIjsvKzd8bGIvSmB4bmtmYC98ezRXNnM/QWAlezlSNSpdUiZ+TzE0Oiw7YndHSkdzSlpnWTxhIzxNTj0oN10iNWltcU5JXmxrfiVPT2t2TV8ueUxPLlZ5''@;'; put 'put ''KEV3QEE4Z0dhIz1LaHM0NSx3I0FwRnROZyhPdWU3KGZ2eVJjbUN5eS9iempYMkZQOVBqKFhQaFQ/NyVYTjFVanZgbk49aDA0WT9PKypMbGMiUm5GckhHakIoREVYRDI9MWRvOnRfTypQQGYpWjdZYW49RHtWIWFPL2F3ZDUkZTwwV0godF4+dHVWYThvTTZHYjIxImBzaiI0ZX5yMCYyIUtQdnBh''@;'; put 'put ''VDpqYC8ucUUvR1FHPkxdSWRqKjgoVC89UkdmSE00QjhwKlRPM1EsfWl5OlorVGcvOkAieHBzelNge31PSVtZfVcpTEJOe1B+TiMyNDc7cVNJPGhRY3p6VihBajVlLE9lUSNTdX45U2NybD9WU3dMdiNbJWFDY1J4aWBVLFNLbyQmJSRrOmA7YC9kPTw1PDEuQFhjLGo3KzNCSyFsOjs/Wkd5KypI''@;'; put 'put ''JkpNXy9mcnJ7QHJfOypLJWo5Ti9yYHhtNHw2T3FQISVNKHNfejJHMiNHZXtDNzhDbHImZ1ElZ11qVUZVWGdCO2IiVyUlZzg8LEAkKnh3d1NyOGguLCY0Oyk6VS5dOlBqKU5jM28iZ2ZfRiN3JTQrJX5BMG41ajFrUGxHYlcqa1FneEoyPnZFZjJDSk41WTN5M3hVa0kzOCNHUFE8b2VLc2lEYTZb''@;'; put 'put ''IWFfZTo5cz0zSHJESDNjTmpwSDZ3cipsdG9fZ0RmVHlsdSxWJiJBQCptYjVbaDhILGs5dmliJWd5Q1ZpT3E4NipYeitBT1s/S2tiMGJLJFV4WmNsbENlIXl8eTJRfVY0NmtwUHJXNDh4RTtKY2J2Yk8+bzFVVCNZd0c5QkwrLnBfbD1+U3E+Wjk1UF9AW3UrOTQjNzZCPGJSQVlYKHU0ZUt5QF10''@;'; put 'put ''Q0tGJVduRktgR0Z6ajMuWEdlNX56KTBCR3xVJVdWQSw5REBIdClQQz55Xi9DSGM+Yy5lSHwwT3R5MVR8WDhRVGNIWVhRLHd3VDN3MVNaVWI3R0NlYm5XXmxwak1kIT0jU0xNe3Yuckhid2xDREwpfFUjT09UOjovWkJVRncpVGA4USQ0Pmxqdik7TmddT1VjfXJmLzVtY1tMQXJ8b2E9XjZuemZE''@;'; put 'put ''Jm85ZXgxa0lecFY5N0ddRHYjQSo1Vyg0O2JOV1ptR3dCIXdxT2dMfSpkdjJRYH1DZHEpWio6bVpJTnxBQ3c8dUMzKGFmQi5GRHVmaG1YQGE3RitzTi9MVGNTcGQrNmFwQVJDcGlXQT85cU5aVTpjRzJ7e3hKNE06YyhALilefGtoQit4eDN9OmB4OF0qT1JDO0tOKFtXMXs0UUVJMEdDLzguQE4i''@;'; put 'put ''RStHQTU4dyhra1dFWVI2ZGRPVjoxSSJbZmN6ZDdaNEpsRXROUy8kUyRhem1PeXx9R3UrSlBzfnllPlc7fTtza28lbChgcG4uMUwsN09lP2FyZVlVNCxxTDUlIXIsSGtiZ2s8VyNOcHtgPmdgPHZfRCFKeGckbFhGM3MmW2gjQFFDYmhXPjZANUtWcXlVW2twN2lyO35HI1htJjJkb1ViU1tMM11P''@;'; put 'put ''V0kuVjB1XTldZEEmeSsqUCNYRyEoaDhiLGdsSD4yY0RCfTlKXVlENyNsYERRMld3WTxWNWdxS0RbayU1SmNwR01hem42TiRJaiF7QGdTYikzMGwhIyNGXzZHN251KFdQN2RHbFg/XSlvMTZsY2RCOT14OnZHVyx9aVImcS51c1U8TDBed1chLD02dSR3fSojYy4rallBNks0djRZOCUqWjE4UmBv''@;'; put 'put ''IyxIajRuJip0QVJVc1l5OkY3U1s3bWx7b1l4SC93N2w3bl1vans2cXl+bkhdaytGbFczRypbTHdDZXJTVEhjT3B2Z344U2xoZ0lLI21tVFh3Y2olRlttYW9xOmZfSTNSRUlGfVRQanEqTiN3IXdbVG1LfjgpXkh2aDtSYTlsZEFDRD8vSW96TlckSFI/blFRZDpeeVl9UHFJTyhiNV1mN21wdyEz''@;'; put 'put ''Jj1DPVsvJXxmeTVqYVhNJXxifUVMaHBbNyJNNTlRI0FgYjdtPkdfRGZ1N2hhJlhMVGM2UTxXPFIvIWc6X1s4bVVqOixVSG5ZQFcqYnlubWJbTVE5ZFBHMU46fT5GbWdBQ2ZPeS9SM0l6OXBEZGlMaWBRQGZwWDM4TVYhWjRUSXJzYD9jRHEsUFJwVD4pOyFFeTExMz8vXjRdJkh7cFNhbncxQj9G''@;'; put 'put ''RiteP0dXSFtqTHkyVjxYY0FkcUhzSyEwRDtJdTN8cW1ddzFDVC5TXTplWHVpdjQvdHNyb2leM3ZAcWtROSFlYjkmcTV2SVtHNE5iejFDT1RfKVdYZH1NIkBDYFNUKU1SV1NkJV85NndeRyRVRWh5P1VLZD1mKXRBS21JXkZddV5yJEk+Nk4rQEQ8ZXMvIyh2bCpTZX5KP1ZEaHJ1KUtncT8sZHIl''@;'; put 'put ''bWs7WHd9ZzczMFJNeEozNG4mR0xRfUVxJm1OKGtFSVciVStQdCp8VmFlQys5biVhZzp2bT17WSh8OjNRZGQhdEdFLnk+T041VzhTSy5tMkt1cFBAZEkwTm4jViFsVmRpcV45MlopYTg6O3BeRih9UmB+RyYhbVdXWHo6SFQyfDVCYGd2SlFmfChIM0VTM2ozeylRdShkfUE8cWdXQHFBTCpsTGxp''@;'; put 'put ''RWslbGU/Nk5IRGsmcXhOUD15MUJvfXFmVV91QmNlRzRCT0l1dnxYKDt9bEJ1ZWlPWD9FNWohUDtlSlElajJQQCljfj9oQlBffTtxRjV9WHZvVT0udyFrXz05OzBLek8ybChIRDJORn1LaGp9aEFnMml2OzgjPjNUe0VgQ0ltYTBsQDddO2VxZVd4a30qczxBKj5XYSNRbzAvLmtAIWZldyYvYDg5''@;'; put 'put ''WWpyYn44e2o8O05gdn11NX15YVs/MSZ4VDN7Q1FPclJuPFY6fX1CaWk7W0tFJjFbb0ZSOFFrcUh3N34rYTksd2dsOFVHOy5CZ0dWL1puezhGTEdecjI3MWVDXzhDdGMqfWNtMVZld0UhI2RqeWA8STduZS5TTSsxUT4wN0BrO2VfeF17akxFOWtmdiRBXnwwLk5HM1RjKjNoKWd+IkB4LiQmcmpu''@;'; put 'put ''eypdJDl5bjo4Ll5DS2NIdFZpMVtURUBneW9ZWEcoWiNuKFRKVn4kQ3ZOXkl5VntfUSQlM3Q9TjlIfGppKyxHXXc+K0RMfD9mRXxVJiouSHxoL003NUBocDZuLF1KaDQqdiw9XSwvR2lEen5nIXtJUCkyUnsyY0lxZ0t0fVlOMSpsPDBiNkxHViFQYCQ0Z3JqTDNmdlc1TmxeQENnWzZ5ZnN7TDF7''@;'; put 'put ''WkRoT1svZmhCbnEvUCJSWHBLOD9Hb3svRnQ7OWokSkl0YkYoPz8kcGZNYlRheGF4bWQrY0RhZjVNYi9PPEROcixjQWlhRllRX2NqbjhYJF4+Rl41QlV1QD8/Nytke09IT3I6dCgpOXA+Ij90YWZeZE1jNEIycE1fTSp4e35Icyo+JGQwcXNVU35sZTsyMyhGJWxUd2xMaHRGe1ReJHh9NCU+Jjt9''@;'; put 'put ''P01TO00kS1pScyREbTh1WHRtM0Y/aX5EV0UjNFleeGQ6aSZ3V25sdV4jWG5UOGwhPzczNlpiIUpGd2cra0B0c2xESTs0d2c6bCE0RDxPZ3gsMkdoSjdJTXJmPjxZZ2I4OH0sQTFSZGtofGgxIkkwYFphdVgmLHB7eyZsPW5ZUm5Ja2hAZy5eeG5UPyNmbmJjdWQkfDJYKHBjPCN7YS5tKHFkKF0h''@;'; put 'put ''LkIocDpXXVQxXUltfH1ubiFbdCkrQUtgcEJfNEF8Yn0rXk0iKGFIJFQ4fDcmMmg2bCtjNDEkLDFtWCwkbmNPc1d5KkoyY20+bjYuYXVlJis7XkxQPlh4VH01MVpWY0VnSXRqfXUvYWwwOEIzQzxlaDNnKX4sMHJgSVhTKCZ2SyRLW2wwR0ZlfmBeWlgyPCxzajBzQyZUTSxRcW9eXk98a3UkS2VA''@;'; put 'put ''fX4kdytWeyQ4Nl9oa3EmNDhwUDtPe2BQX3ZwallIdV1heyQjZFFnQSwkWSxLaU16dyNxXUZEc3UkYXl5SVpaPH0vTFUxaSwwQC4jWlY6QE4/RGBFdWQ0dU1mUU82diQ/UnMje0xfay9ARzZ9YyEmTCt5eyg8UUsjajcxRyIicyMwaUNZVG48aEtOZ01xSU1FJEZOIyYycHFvUXU6YGBTcXUvcDxq''@;'; put 'put ''R3ZTQyZ9ViIvXnhWcm9qJCplS207diliN3UpemY/YzR2fj9FIjcvdGxHbTR0W2s/On5XZVhtWW81KUsxYGdkKjNFWjF+TkR3Wzx5alUzWltYWDlaNCpSIzNafSxWKmtIaiIjNC9iRVA+PTA3IXFgZmA6TStJfSVuTVRiPlpbNX5aT29QNnk5VVZoIWIwVk5PbH1GdTN9MWFJKiVbLGpRMkZVbXhu''@;'; put 'put ''M2xvNEZVcWBCVH5XPDt8IyhILlMzWkYxN1MrJmhzVHVmUCt7WkU0RyVNN3VmJjR8QGh2ejI1TVR8TEx3RkJPL24uRjFkQ3NdKSVMWVc6c2Fdb3ZnOS40eExgYV9+JVNJNG4sJSEkZCtuR3BYODtUS2Y5Yk1qe0BbOUI7Ny88ZGFSVm0hVTw6VUMyJFs0QDJMUSJ8MjMqV0N4am8qYHhkOURHUi9V''@;'; put 'put ''Szc1Z143VEA4XnN9VEdYMjZDYUR+QS5JdHhCNVVjUmh9TzdCNHBAOzRhKHokSFskRzBdIz5IfT9iUSVCMCg5K1pZT0RCUWVMZ1VnSkgye2lsMys1dktPTl8oTi42R3Jidjh2MXB2Ky9mcSkxfWhXUF1MdFs3JmNtMT9fUy9SOCN+Uj9FU0Z9Ky4kOngyMHBrKHVfLHVBa1BlYXxrNlF3ZHgpaSZC''@;'; put 'put ''VV1AY0NQVXhxPkxAJlFWa0M5RUw1KD9IWVdAUEB4QDghcXA8TWVTb3tZQnhFNldaQ2BrR0t7IztbXVkvYn4oL2VvaT0wKipja3tqVnQyZmtPTlJeKGtuSVlVZ1k0Ymh6YXY7ZlIvVFFzNyVQN3ldNVhtelhYRy55aSpfTzhIe2ZpMSlZS2Y6ZjtiJlYmMC9ZS0VZZnokY2YhVWREX2RwV3F4dCV1''@;'; put 'put ''fjN2SmdeNUd1dVBoNmlzSih3Lj9ha0cyaG0rLn5RZC81dzJHQG8ocl52PjAjVHg4NnRFbjNqaFdVcnNeTiU7Wl1genFSWj1ucHhjIT0hVEppZTJNcGl2ISZrKTcyXiZCUiU+fktMQDtRZVkxekB4W3JKOmxfOG1lb3ZmRkRaLlI6PVV9LDR+ISZSQyg3c0FOUVB+KCY2QFRpflJhK0s9Xmo9WmU+''@;'; put 'put ''RT44cDt6ITRtInxHZkVLdWJHXk99UWcuQkZbJkJBZGF4TE10JlA7eT5ieDZVaCpYTUIxQXNkO3ZSfHRwO1k0P0x2XUswOlN9YihjNXQzJmx+JHZuOTo+OTAkSlhCJGA3aUwzLCp1Q0kwJUY3NlVaWlNYfnhhKSp8Z3MhLFtlYH1wPE0ramU5WzcmVn56Z0xhIV8pO0ZHW11FSUV8T3EwT2oze0dX''@;'; put 'put ''dkNpd3tUPl17MTN1NUt2SDUmczp+QkBIT0pGIT9fMUQxUHM6Zno2ZVkqNVloY34qVClbWkpkI0hoZDo0IUE6bTY4VU09U15KclEuPDJ5ay50WSs9bEtFZXhhbnV2aj1nfEB1JjViKTkvK2RjalFWcENORTBNWCkxVzs0fC83dFI2dSJmKiEwO2RlTElgcjt7L2hBaUM3ZU5WeWdDKVM3eUxOPS9P''@;'; put 'put ''JH5TU3dvQ0taUXw0OHQkVm1PXzVmVzUxXzVLTFZbXkB3SzZoJE1YXyZ+XWdTT0BDIW99WjxHeVchMXZdZFhEbWZGbyhVKUsjOTQsJW55MCJ1TjpWJmIrKUYxJTtqRlZPW2JhcT85YjpKVkw4fi9dXVQ2MCIjNGU+Mi4wa05aY3FYPEtpQmdlKUJZL2IhOD4rWHNxOyhTez4lM25CLmtnOTQiTGNy''@;'; put 'put ''cTFjJk0qLlFuYUh0UWVmZ1F6OFYzbHNVVCkldiUzKzBHZCVJYm1sPGlxMiE4KHZXdXZXbUJSRzd2L3RxRVpyLjpha1RwL2U3eWJ+P19zTWdFVC9OVUZQWWEzM0wyVlZLMlVSelswYktIPD4qTz1vcChHbiVZX056Py95OTVUbypIdGFeMVZYRjR4cD4yaUswWFJxOSNNfHl7JntIYGlxdDxGZGg+''@;'; put 'put ''Mm4yVHoifWBqTDBVOVo2UGZjZmhxIjl0ZCR0MTFFdlg3WFskWEw0Nj55KFdDUyxpZVVlMDlMUEZZR25fd1EmWT84VTZYJkgwUXZ8fGo/JCtINGdNSF1CSV8uPXtUX2NOVyV2JX1jVElzcip8KXx8Rn1Xa10idFZycDtGZDl0TTU1VngiPGg8VzRAbW9hMSl3PklpNCZBKnBQUXV6Q3dBe3Mycy5q''@;'; put 'put ''RDRrKX46c3Y/RTdNODVCV01KfkV6QGhERnpQL204YmJ4OzhEWUp0fD5lJTJCPHBwJE9rbigqejtKUUVDUik7RXFpQVRsTlRgbG91I0N6RDYkKFFjbWNidlUlTEtWTnJCT1okcC40THUxTGsmWGM9UmYzVnVUQ3RoM0skfVssNUlDQmlnTEc3ZWp2L15SaDM2UGVlZ2BaLGhBKDVReTEzNj84Y3xJ''@;'; put 'put ''Lz5ALlciaHBWUT97VGR7ME99WCMvVTY8Y0ohcHk6Ml9JSldWczpecmU+UHRgNnRRKlMuaC5ZXk9MIXFsZENnQSF9QitUNlRibltUIVpWbi5JWFg7bn5rOyROLl0ueCNEZVchK15GJkJGOCxARFROcnEyV185LypaPypdY2leTGRwXihVWXpnJHo0UjAhLnEzOns6cW9+OWRqenZzTSFuLlFpNmtR''@;'; put 'put ''eiM6RTc+cHBHcyl6ZXgmfS4xZ3ZTaSR2SFIjZCtUM0IwVixbQCg2SVs0I2ZDNFlLSVUqY19CITdxI2FlQFAjeWdHTFU/T1IpYV0kLH12XitnJHo+djF4flE5KjQ6dFh0eDJNIX1HQFtbRktodUY4Imw8RylBWlUuTmN7SjFmU3F8I3lbQmVaW1VOX25dVSJwd0RDfk9gRy8iJiZbIn5uJS40JChi''@;'; put 'put ''TSMwSShpPDEsNTYhPSJrUkpDN29raHcyT35WKC5XSncyNmR4LldEbWZXQk52R35gKSM0YmhlaXpJM0tNJUYoKnRvNlc9SmY3ViIoVjM1ZEs3KkkzViJOPlB7PDFAbC9qI0ZQUyt+TyojPTo6NV8oM1smJFlyYiZwXnB8Z1RvOlM8PUxhW2NARFQybkFpPGF1NEFSNjpJIStUbylgVXMxZmkwfjV9''@;'; put 'put ''TXxgNCxWakVZezd3NFhDUV9sIVZgTz1FMDcwXjllIWwiWD1AYD5bLmxYTHU1VG5ZakJPdSJ2eTpWWlU4dSoiSiRrbX43fT9BOGNSRWdReXZld0gqYnIoR197IjtxQjBJUSo8aXleN1QoekxrX1M8fGMxN3FUcV8/aCpDcGFpVFhlPX5HWXpPRldZbyUxRUpZbV5eL1JMYDUvP2oudnpBUnByIVRW''@;'; put 'put ''NHQkcGJFPDkkeH4pPm8majxUVlIwck1JVFUiOyRsQUpySUFWWys+SGB4cC9TcS96O1oqUjImJVNrKWIkV14ofURvJW8kNVYsSSJEY1YzbVAhNy57R1shVyFHeEB0XTh4cURARHJjcGYwTjh4eXYmQGY4XTJ1SUNqOXh2MiJ1QEdHVHw4MkFLQmlRcFY5KGltWCU+TC9Gbz1jbnc3fiV3RXR1NlZM''@;'; put 'put ''SFB+eFZ+T31KaSJJOz5rPSlOQ0MxYGZlL3cvV1VJKCluTHhwK0dOK1MkdnVZYEFoWSNQcisjIkBrQWJ8S1k8WixOaFlpalRPSVgoTmY/ZSx+KzBYTntpSHgiMFVISTA8RztaeXQoflIvOl5QdTJYWX1mXT9VWFpiSG5bS3xkYnlDUmEjeTc+ciVjfkhpbTJdMU9fTEo9JUEjazprYmZVe3A3NGZ0''@;'; put 'put ''WUFhNyM7XUBsZ2dvbURZOSheWj9rRUI9UU03NGRrYXQyUzY5T0UuKk0jQlhTMGxpZlgmfixocFtfWUhBUDhHR29xPyFWaXVYPUwiJlk+RGw0NnQ6QkF3V1JgLld0TWxwXXNFL1gjdjp2Inxyblo2Rk9ESTV6M2J2XVlSKVFaPExtcFl2UjRzXy8sTFlEQHluND9WZ28xeGRfK3EodmZjNHpGUFZJ''@;'; put 'put ''dzFIaWpxWHtaMFtCS1AqZjoqJXZKbj03ekJ1MFRheDJOSVlHezhvWWA5YFE8U3BOSmF4KEkwen5aNF5wYm9QYkRSYEdtPCJ2NX0ubnRbTzxnV0whWipaRSxyWDVjfERtOmB4UDNCR0dSZDgjcCpLUzlmakArWl4hWSs0PXs9VXIlZyRqQTdxfWo6fDdVL1BOaH07RS5TVUlhdT96ZDJJRmNYOCM0''@;'; put 'put ''UVhaUnV9e2l0UmdJQF9YVGc1MXJAeF0hXXRvIz5EclBbK11KW1V6cjNUKn0pWjguWTZNRS5+bFBDcFZMO0o0QSJubGN9SE9jOFJwPDxsY1RJeEpIYDgmJmY9RzRqOyY3L0k0UiN8NHRUPWt6dFk2OHMkMXJ0a2xXTDgsck5bXX50Y2goSkgvVypKOWMxO209cV50N1FnQVJGfmkxVHVDQ2ZfdVpj''@;'; put 'put ''YlJKdHZIVEA0N09mYSEia1FRM2dZJnxxUjFyKFtfIjE4azpbVlJRW3xGdFp9el1edEM8Y0s9WiM+JkZMM0Qxe2IxYm5PTDBWZCNVbExtRCJ6Om4+WTpWSVo1OUo+fVVVPj1oQ2hzcDp7RDxUQyY+Ryw9byV7bD5NO3E3WGJMWnw6IXx8QztDUDVkLzh8VlBxKHlyfXVuJEsvKVluJChGRH5yWVIz''@;'; put 'put ''OCM3cyp1LExrUmIyOl9dVSk4WU52MGE7fS5lajdtViQlSXpKWHF1cm4mLm5wKldQISs8Lkxqe3xvUWMsYit8SV9sKkByTjx8I35eVWtVb1F4MDdIPV40bH59fEdiY1FAZ29Gb0xELEhoSzx+cmxmN0VaNFJ1ZU8rfFcmPmdWZCRmMmF3b1RmQlhxeClrUkFqanhBKyZbJH5eam48e2dNJGFheD4/''@;'; put 'put ''e3Ypak5QIj5QJUdUfS9gQDBEVjhKbk9CW0JxSDAmezc4cnsjLFV+V1NCSXk9TmE0bU4vJG94JjZdbjAlM3V1NzNHRnFwWClIZDNFcnN9RSt0QV8xT1AwSy5fXVlXZ0xoekRAeVN8Ri9fI35ENCVSeyxvb20uTiJ0JmdXcEEiaE17WlFeOllOe3wjbSw8eSVWUyFIQDQqUz5NS3R7e11yX1p8Ilgm''@;'; put 'put ''cjt5bExNfjJjKXw1WW5jaXdDYFImOSlCKnV5N2ReRWBpK0dUTyg7Z3ZAUD1NYU1AeD9iUUVONnohXiQmb3hnYUJoQk9XTm9nJXZwMy5JbXM2OWIqLzc6L2FkPVVmdSMsJWxaYiZ8L3xpZHw3bE44KXRMUXJzW0dQOEB0emAwSU9XPldjPUpgMW0+ZmI2b0V4IzhHNC5aLjgufmg2cDx1RlghakE6''@;'; put 'put ''Tmc9amdhO2c2IzV4YCR0XlZYTjZ1Z3d5bldzZk97Nm4pajV7eGY6NyQ6bkgkYysvKUlZZlpQejgyXSZSKm0xVkcpKWk5VjVGMW5+djRDcSpGMTpuZmU/Qktqc3kyK1U2Rzo2Qz5APkNRZilEVnZdWDFdKyt2fVFXQV9CYVBkOmdUNj8waS8lKzwiajhGKDAyJUQuezxQbVIhR04wIUlGQDtxOzlB''@;'; put 'put ''SSRkbW5TSyZvNEpBfVA8XnNzRGtvRlU8UiFsR2lwSWRgNF5wb3g5UD0yVTM3fkZKayh5VXd0JVNkTTUjN3RCcCZtK280JXRbZzNbMCt4WDQ+aDQ3OXxCUTU2fWVhajxoOGw6NnxSVFlWZURvUGQuVmIlXih1bUQlJClgVHxWY3RgKDREfCFhTXVbMkZnNEhyLGMjX2RdeElzOnVDTm9sVUlhUChY''@;'; put 'put ''KyZVRXs/VzxmYH4jdmtmJkRwJXQyLjMhLm9+PHNLNV1IKG03dyhBTWdjbEA9T3NvJjpSPztmRWZ6VEhdb3JXV1V4eFJ1OWx1TG12L0pHekhSYil4K0Z7KXJ3c0pLfHFldzhKeWVeT2J2PF51VyNrRmt0OXlIKipGL35AZHk8c29VRWQ5a28vKVgrZEx2R0giNEdfaG0wNjwkaW8we09MSEo0WXci''@;'; put 'put ''JDFYfTw9dWNiOiRnP3ZhSU9+LElVfT1tPTdNbChLTXVPU1lbQiYuamN4JUx8b210ImdHIV9bPVEqMyRwWENXKX1wOChaYTREXXx5dEYrTjNMOlF2QjArZW0/a3tJd0gpeTFGSklUPlEyKyxARDFoZiQpUXp6RXI1RzpmRHR8UkZgenJJKEgkR19Tam9AT2BlPSU7WVN3QEgzOHVfK2FzPyUjOkNk''@;'; put 'put ''Q2kvOzZvcXpkWEAofDM9K0UqYCZOPzQzWDc/P1lSPWpEbnAzdyJxRF11UD5WR2VYPGwxcjZBZE9CQ2tmV0E0NGFwdXkkSyNlJCN1ZEV7TXhrTmxlc2k8fmRySD00YEE+dV8qMXN1XUBCfnxabCgveHEsRGZ2UztfOFdxZUBoP1cjI2QjREMwPENCc09kZGc/Syo5X2FhXm02dHk+RG5jT09WfHxO''@;'; put 'put ''IVpaI2YkdURCcURBSl9LeigifkVRQE91VE9HRUQvdkdFPGVecGt6O2hOZSN7eHxDbSJ4XywzaW0/dj9ERThlX0x1QXRxVWBqXkJXXXhzSXsjemNsLDpOV3ZpciZhWnIib2xzeD10NUU3KDFZKFo8cn46I3BWYUtldnxNMXh7NkVyZSJgUHQjUT83QE9AYDowQy5+KyNsOEFgR0s+WHN4LHo1RjVS''@;'; put 'put ''SCFfKkhPZTshSiM+R040QEpIcGEyIUteKDAlTylYWjouLzJsQHVsQlRJMXI1IzV0Oz1qTDNEcTBFRUUhaD1jaWs+Rl54QSxkLGheVzYhe1pUOE41d3J4RnVfN0A7UjJhKkpzI0lJRVp0VXZYdyRDcSJgbmB7WnY/ZWQvTFldMzZYPXpEMzF4Xy81dWIib0YlZT5pUlBVfT5CXi8/UDMsInoqP3ZB''@;'; put 'put ''WHhKPH0qOzQ+bCxsXjptNipmcFpuYEBxLGRxTHJHNVRXKSFCZWRlUzRCdD5mX1Z7LFdXUiRCYixjeCl3IStMKXBDdGp7RmN2PTpkb2VdT1IyUU81NSVITDhHb2ZSWnUsWWR7TDAxeiV9KjtkMiU3PmY4fn5QcntFQ09OQ3JXMXE6SFZMaSlIcmtoeS8hJG9MbS51aVBTNV8mI312Zl95TWxNe2kq''@;'; put 'put ''X115bTxaUDYhOl1oK1gwWkNNPGxUbVU6S2Q/ZV5INCokbjR0d3d1PEQ0JW9xKSJbOXxZXW5PdX0xaysvZWgkaCwwMGw4Pix0SSt+ekl+fCJwPDk7ekhVZGt9T24wOlNLIUNeV1ZjRGFgOmApU0UsXVtbNGRMSllFTzZvdlRnS09NJFNoeCVCVTlweE5HNHteJSw1Tzs8SzRwUTkzWk10dEs5TSMj''@;'; put 'put ''KmgpLHBuL30mQkJjL0hmamA2QzpbVjEhVXc4ZixPblNKO1FnYDtLIWdLVU9TX3w2aDdnVGlUTUA+eHpDQSM5YllpXlpGP1k0MXBPJSY1YF5mXWVhZSxTZnl2Zihid1RgQCNqZkUmeyJTV1c5ey5fO0NnY1U3U2lUdG8kcjZsMyF0aUwsY2BCXURUQzxKKXc6XWd1PzZ8PTNWfXh2TW9bSzlgYUYw''@;'; put 'put ''TGBKOk14R3MkKF5bVzRqKFs2ViFrISZIOS4sayk5NEMsM1ZGWCFHKDJuPjY/YiplOTpZSHBpQDhXOEE7VWJeJipDOl1nVjE9Z2w1WUd2U0h4amNWfCk7cyNgXV5vPU9OL0wue0QoS3lJSTNXOXVUNEBrYTZAeThnWEoxKjQ6Q0AxPT1NOG9tPU1UIkM3bypueUBJWVZFZj1uUzFNNSUxX3ZaLjZN''@;'; put 'put ''SzBsYE5oYXhBUTltYnFucV4mOlZRcGBDXjRuPyo6WW81WF8/TV18a00wPCxdPVNoTlR7U3ZSdVViMWNyTG5OJEdwQW91Vm9NdUUwWU9EM0s8OUJweF1MT1hHb1hrMmhjRThNVW44Sng0cTtbcFhBKCZJI092Ny5XRHwzUz53ODluVExxSjYlQUA6YGhORjVMdnlTZ3M9cnJOSCZwLFEoSFFGKHhE''@;'; put 'put ''UmBue1cvY3UiLE8hQ0c3KTNCdzI8PSYub054cT08ZWc5W2cwMi96Sm0wWk4oW09AP0QwLytkTVo5eDQ4K0VuMG84PFZbXlQ2OTpEbHU7dVg1Iz9odnZfMF9iUlUuKkE4KVtKNFNpfGhVOGZUIk5DSnBGSWcrKXk5NzZ1L28ybmUiKVUoZktSbjoxODk/VnN1ODVaU3NpQW4hS24rUERbKTJkYSsp''@;'; put 'put ''Jn40TH0pXlt0Qyh0ZUl3O3FJalE3QCtjWThQN19DUDdRLDlYK29NOU1FZD9oUl52SjdqTGIjJmQ9TDp1UDp9JnRvRzRNWFpSIS9EMEUoPlpARzlGQmtEUiwjL2lqO1txTCpEVnxIVyE+SStVc1tyZ1svSVljO251PSU1cU87ZWw3dX1wJHYyNHEkZ1gxb1hSbn4pWk47Y0dRbEU+bUh1YUBnQ3hU''@;'; put 'put ''L1NvU3ZALipuI31qQTJMPTBKVXFhMEJwJVByNHBwQkp7bHE2R2BoN2VoSXVvMzYxO3d7QFZCcilVIT1fV2VEK204Li8wTlU3QnsldTN0NHVMYEVxPlI9JHh8NG1xZXZJIkc+TUlhLnE0KFtnN0pIU31FMGoxJCQkJVs0Xl10SmlefDVlI1IlW0FQa1RgdHJvLGpAel9XKEB8Il1QXSltJncoVllV''@;'; put 'put ''PU5ZQEQ+VF18Ql5Kdz8zdEhJISU4S1ltdFkjR1lYUypAOnM4SF5fa11eRE09OTdVSFZmNmcpWTpaV1EwYkhQbnI7e0lWIVhxXlNlYHxzUHdRIiZ1ZnkrK0VwcjtFNXEzajA/WSV1TzxEa11dZnRVOHZYRER+TDMhRClsL2c0aSpsdHIqZzRqaDx8dTlwXUhQfmQ3TnNYL2NQWC4kXmdmQnY6Kzhd''@;'; put 'put ''akdLKj8qcllWTF1fU05eSDZxQWkxe3t4Vm9CYUBITHUrY092aSpkOlBYRz51SmQ1THlyNSkuNzlubzt3Mk1MUWhOUnNFYEwsbkdYV09INWRiMjsmd29dfEI8QiErV317N09TNTYoUGs1JC8qPD05U3lBYExHV2s9d0owfC5NdlBPblosIVA6cUFgInphLjZzUHBFVjczXnYxJDhoMjJOSjZmVWZp''@;'; put 'put ''K21bR3RzfFA9JT54R2hsb2VdWVM8OmpnbHl7S1kzWGRoLmlvTGtfMEssWEpLRXF3PmthezdIbHJ8fkd7dVhVfk5HaEs3YEpWcyJsbCM5JmhqQEwkdXVpcTYpQjVNaSssYSQ0OC56STRCRDBNUHRrbT90fXIwOWZPKmUqWyY9a0oqcy8uRjh6S1BfWShwOTgsR01CQStQWFYvKUhed0Jhd30uL2Ix''@;'; put 'put ''ZX5aPn19OiwjW2JEOWxSY2I7XnMuY1RAWzNnK3csJDd5VDh7WWhSSio6QDNuMlprSyF7Klp8ZXhPaTN4bWUrW2p6ZW9bRTo6VWdBOWpULn1dJGxKVi5DVXZ7TkBkXmkhUVlbclojJCp0U01eRSJIO1FSNFtQVih0OWcub1VkI0d0TS9vOTpBQHxDVGBXfTM+UTxtSGdYe0BFKExkeWFZa10+K09j''@;'; put 'put ''NEh8O0I3TVZWKUo2XWwrXileUyFzMkRzR2RHTSt6P0RXJltgRkZOMlpxc0F3SmJUd2pOcyl1eXFkeURMKWRrbCNuYn41OXZpZjNldixORnM3U3A3fElwN0ZVPklvS2dnQWY9X1F1KEErX0FTfjlDb1NBYlB7LFJYQytiW01CR09XWGkxb2FHMHFqeEpwWWxaVG5DZT44O3g7WiosQCY6JTVJYjok''@;'; put 'put ''PzwmbXRJMnwjRns7eCMuPD5xLyJYNjZnUGo2c0QhPVY+VTxKUEB2Kl5sUVVDO2suPHBfbSQka0guVl9bZEY4MHNhfnAmT147Ii44V1A0ciFTLyZYXzdfcGlmJC4ofStnPk1Pc0hbJFkjLno1LkUwPVlhViRWTEJzREJbXUc5PD0/MGYrWFltVjNMbSt0X2cwP19uJC9rNnlON2UoRGdeeVhPV0Na''@;'; put 'put ''N05hOykjMVhrKS4yRUhQX1IhcmhkQX1HWSNYMUFWI3MqSjImPTQ3PkNOPVhmU2lraisoTXtHYj1eVDZTMVk6e1UsVlA3ZG42MkZscTAiREt6KEFuOHpsMjNAQEZYe11UajBGejZ4U1QmW2tMRThNd3Yia0xVNGZVYTg/XzZiU100L3VuL05DRWxqVHhJcTo6YVNEZjZBfHxKLkwlKnR6L0YiYnk+''@;'; put 'put ''MVh7LiRORnEyZFA9IWEsdHRzKjVEaDp1IjhPaSFUd3M8cWVNPzF3fUo/LzF2ekROdWpVcCNsPDQjY3JwWiYheT58Yi5kNzElOD1iRHkwS0J1cEwqTmdmaX4vMGsiKihXT3trb3FSQiw/dlUsWDVSZTw8fGw0JjZLb148dHtNYCg6U1s8TE9BLzsyQippeGd6IWMwKHR5UDsyTDJpUmJhQit4RWs8''@;'; put 'put ''MXRJQmdyeXAybnFfcSlkRUYsU1NdcTMmMjBUYnhKT0A9Pks0bT8xP29IUStTfFt4ZC4uNVdBR2Yobz00Okx0YHJjUGx4VVFhO24+UV0obCJQZXsmKSJhfUZeZHVUNSNCYHwoT1RbeUNnfVFLV249NERBZSxUIjdbaCRYdyY2IT0rcGRFRlNifHRoSmtian02T3wwXkJSJHtzKmBON31TY196d0lx''@;'; put 'put ''SFk8PHYmIm1bSl1OWHRAa19QMWEqWCElM0FZZTpxK2s9YSF4SkAkTEE/THIpOjhSOihCLl19a2c+WFRxTFc2KipwT2hPO089Zj9BPXo8YlJkPSojdj9QLkBDcEk6XWQqJUp4V0kyTG47TTYwLjw9P11IcXYyLGAuVytYWFZqUFo5fFl3WkBPZVZ4eXksTjooOzY0Qm5KPVhTeTwwanhHOS41R3d1''@;'; put 'put ''ckdtSW0vSE4pJilFSHdQOTJNTldNZi56MU5jNERzQy5XbDNoI2ArViMhNHUxOVYscC4yfU52fW5lP0EvN2YxRzhxKXNsfS94TWV4TGEwMXRhJHokX3soJTx8fj1FWz1XRCpyNXRQSWJfQHglRCNQIlZFWWorQT5odE1sXXQ+dz1tQnlkdDh4MkkySzFoPFNeOCZALkpid1BLOTQhTit8fS5+Wn5U''@;'; put 'put ''SX5ZTCk0e1E9ayo3ZVlYVDAofmp8XTRRc3lgJk14QSt2KXRFMCxUYT5sZ341R00jeyRhVzsjR0hhI3siOVJyczpjdlE8REBkcmFpNmJkL3NNfSt+ZkYjfXFfcT5mM0YwQHhGKmUqdS4+Pl1xdDYvPTVubCtnLGJmYzFDM0hZSkBEIXA+Lk9lXWsvVWFSVUBGVD5+a3NyZG1vZkJ0eVNgZyV8Ki9V''@;'; put 'put ''T1h4VjRQPkhjSE5XSWk5TURjYzA/PD11IWkqaTU8OiRvUXJKNn5RV2Q0SStefkxrTVEmdmtlPEJFOHFJdVNwXXglXmUkISUiM1VLMjs+eF4kNTxQNVBgYkRUVHJ1Kl4qIS50IVU5NVVOQWhUYHJ8JHJ5TCJxM18yX0cuS0Z6VFUyRz9EYiUhS2xNamdYJFRzXVg/Ln0zTFNEX0wkSVdORUxRYzZh''@;'; put 'put ''JSFfSTEiZ2A4SUpGQH44QmBGOk1MKl03QiRDal84ZGMiUTY1Qk4yZWBJakNbLit9Y30jPj90eytLIi86blo4cCY7STRFNURJKGZBTkYiVlp5ZntILHprKlUlUjJZMjFJTn5QPzVFPkg9NiI7XiplI1FXOzNPMVklXkwyMWJKRUYwenVwbFUiRGJFUy9nK0xfejN2TGdnUWIwQk1oOXFOYmgsRyJU''@;'; put 'put ''clVkKl8rU1BUTypBNTdnYHlRWH5dZDpaJihqPSV+U01zNSFHImpfSHxfcUczSSZJPCZySHN8O0tnKi91LHNiQ0FeWlNrZFlbeW8mJXRIRFpGe0QkKWlGZn1fNm9oMDNQLF1+ayQyME96dEF4alNra3gzMmdeNFhUXX1AY3deK2k4RT1DeiF5KzhtREMudGR8VnReV1M2eHR7P3guQ2hEV1VCTjgu''@;'; put 'put ''O3JfV2teeyhWWW0yVksoTm9URjNeX2dbMmVmTl9qSzJUOkAyODhHXj92alE1MXsjLDMscChsUV43aTlOZkRAeTM7OHljNlMjZkEmISMxJnd6Q088SGBabX1tYmA/NEl8WEFpYl5gWk1uSio4TS85fDVYck1rNjMzZz09OGdANEBtZUJ1RiVpUnlVT1V0L1tAJElmYkxQWmwyTD1SMXpZXSR+W2NI''@;'; put 'put ''RkFhU2hBfjdPd2hNS1teZHdvLiNtXUI9Wko2c11FTVorJSl5aTN+UyR1NkFQKzpVUXBZJitWOHpdQ2JZdmV3SG4uZ0R0bkkwXlc5U3B8PkZreC9zZWUoLGJUPCNVSW0mYTdIb0A2X3cpRSVOZypAYj44cjN1LFJtRUQ8a0YmZTU1fnUmdiorYVc3XkYudHdUR0AwJGBHSCJaYUUmeilZbSwjRTl1''@;'; put 'put ''aTxpPys6SEpLMklsfWZnVyU3QDxZQCZpcDFoYEgwTUdDXXtCPl00Sls7UXd6NC9OKWAzdUs+ck8lVTBjRyM6Y2Q3Yz1xMDxKKTU2PWxbM3BqXWU7QlReZXMuOjdVP3gzWSVwWChRWmJpNk4+M3t0IkpUMj9EflVOSGZ8dnw9I1ZgI2peLlUoZDM2UkFuMkdpMTdgdGRnKDZWZU0rQHFzN3h4JXFL''@;'; put 'put ''fTlHaFYzLHIwUWpkeF5jWig0flV7Y2k5PkxTcS8ua3ElX3htNXNqTk9ESVUzb2BsanddUVRAO299OCpWbFleKEpfZjw+LiR9STA8YGRxbi94QHhKQ0lXP1pKYi5XdCEjdWBuQkV0P35xZC9hdEZ5Nn5+Ql5XME5SY31GX3BBU0ZnPzFiVHp7QDQkdiRNNTs5LCNEN1FkYy8ke2MkYX1DU29KNE4/''@;'; put 'put ''QDhAfmQ2Sz8kSDl1ZT0iLzxQc3VBL0xfTj4lYCxyMWx1U2oiaWtMQCpCaz5RPGhiKyVAa0VoOTBtRGJiMj0+WCxfM0ZwcmNVUERjdiFWYFR6cnV4VHV1TCFfaUxBYXR9Jm5UbEkpMjRvTXprN210OCVXWkglMGJFS2xIc3toJmEvLksib1Y4MEdsbDtaY3lAbU19dih1MiwmKD1OS3YmWFtTdWEj''@;'; put 'put ''RC56Ll5na11jSVNLfjZLK31Lb2g1RWVBYVg8NEx9aEYoSz4+L1prQHFzRDtlTWZSeVNiZmVUSW4hVmwscE9ITTdoKzNoIlcwQmtsMyVqUlJYW2VHT29FcGYoQl5HeShoeng9MVtPMmxEfWE9bE42ZkM1cyRYb0hKMDxzOER5K3RYTHNFKktlYDZMKEd0Y2NWeVtTQnA+bElJemBwOVpbUnp0ZX5J''@;'; put 'put ''c1dHRHIob0ZrRGovQkM2eih4UWp2Y3EvJDhpISxGVWc/QmosLEZ1K2loP1NIQUJZbkMibXVhUUJTX31ZIXk5YSVNYVsyWkdFUzlAYT1WQ3hYV0loMT9lLn56JVFMJnAuLCQxPUtZOj9UQGs0W25oaTBXVztgSV9WJGwhbHVbeFQ6LHYwcGcpTls0VFUkVy86NShCT0N0X0UuemouLit4SDoyXXdx''@;'; put 'put ''amd7VVk0fFs1cH0hYEYofD1OOF9GYENVbkZtR2h4c3k0Rm1kdjw/dlBWc0pJSzFlPWtaJHZfeX5kcF12TkNmem5KcDUhKlhvTVd9MnFBKDlbfTgqUHZGPG9nIzE8OzV0JXFCMFM6N01RX3t9RlB6c0NMIW8lKGN0TGlxKHZkIytMSitIelZBXyRVbDcpPzo0RVE5eEsxdXtVUkdbVWo5fUlkYlEq''@;'; put 'put ''WjxTYnoxYl4qJClsJXx3Wn17X0VsYncidUVoekI7JFFWbiJDdyJISjBpZkxCUnJYYnpkLyxNS2AwPVF0YE5QM3hRS3VpOkhlZjZMeDxpKXI5UiFLWj00biMsb3RjR0t5O3x0MF15aEt3d3VJT1FENmopMj1jYWs4Y0NCOy9CNTl4Zykxc31rdnV3SSxbfFp9X0RPK1ouZlEvITI7WDs2TlUodVhp''@;'; put 'put ''RzJBZG5tSmd6Xi5CN1V5UWdBJE43aXM9Ok55RUVXSnZZcSRFSUVFKFJGWF1gIVYkPyJ9OS4hQ29lQURPN1A7Iz9JQ3xOd25GJkp1KVA0dzN4PTh6IWNJZEYwZyNwam0/WnB+bUtIJkc+Lms6VzVFZVE/MUgoaHREeDgiN25YRCgrL0R3ZG57blVxUlIuJlhlNFh5V2Bkc2dfX1pfLmtxSylsTVs+''@;'; put 'put ''bGo0SHs4XXx9Pjc/cyVPbjRDN3c7MUg6YVFVVWlaUzxjJkw2T2VdY1hRfWVzW3lXL0pMSk9nO1lgWk5majZjPT80Iyw5dmpuSkhNbVhUXW8/VmsuS1k4cTA3Rjk1MiZ7YFtxUVZ0KXJGOXE+TXpKUURxLHFlW2V6UUR7T1t4cntFZnpMOmRaJjteY2lJQz1DT0RMUW9YVDJ8dnchWG04THkkXyt1''@;'; put 'put ''NGRCKCRMKiFOZXRLS040dkNJQD9KdjlxUkBlWl8jMkw3a31tLHtHfTM7PDZzNnR8OWpZQDcrcEJ5QSxKeDBQYFF7eW44NT97aTgkWjhjVkcmTUZoNVprUDlsTG4wPyhFREYzdzYmMHxkO2tORi9jTSomUzdUcFFQYDBGeH4+WUZ3ezJLWS8kTzxmMyE0alJHbitkOCY9JU50WWg2bCl8KnFoXi5C''@;'; put 'put ''WEc+ckBlVzIjKD9nTmhMKTw/KkIpXmUybj82dEZyR01SdGg8aDB8RjVgTHcpM2VZSl5YJTREbT5XKihVemojPTB6djBBM1Q5TSRwYTRsV1BdSGUsU2pqOEpzQkI6WjolM0Q9QFVNYHU4czIxciwiPEs+QHdMIT1bNEVNRnNNUUlULzsxQXIxRGc2Vm9YZ2R0NUZObmNqLno4KkNAbD9PQW0vYThC''@;'; put 'put ''IS48W252RCgrN3F+YGR0Rl9WNk5dT2s+c29hOl5mPkshU0sjX2RbMnx4e1lZb0puMSp0cWUwdWhkTjp1UzNJPnFDNkpPUH1WXkdnaFBsTkllOzNPW0lRPFpXcjAvIW41NWlAPmAwPklncSYlJSxMez4xMnUyeDImU2YrIWkmO05nenJrcyEhLjZ1ey5ENzE5VVUvWCRXJC5FL3F2UTojQVk/cTN2''@;'; put 'put ''MixlTnFZdUJsMURdajV4WWFbIjpSJENRJTw1fVgqQlkwaTFpMFVBSlBYYkBBSShIW2w4Z3ZYQkxsSntqWGxIOmMjZmR8eV9KSV85V2RrM1EjNCxAY0wzIyk0M2c8OVVFKEw1TyQ6KUEvaylqLyRMcThJfXh0I2VkbX01cSZqQCNLT1kuSGhNRFAvYD59XytaO3RdeiYkTzw+V0NRInh9YUhPSyUs''@;'; put 'put ''ZThCcXVlLlVYND4pUD5me2smT1NXUVQyR3E5Vnx4Ylk7IVBqRDoyZlErZnU7WlF1KDoqJW5ndVNjdFp6dE4pRkhfKlg2UEpNZmVGOi4uL25qNy9BUWcmaTUzME9CfXh8bVBtfXFHfTNySjp8OGgkW0dGI3VNLCEiSzpRZmFkaSslVlk/e1FxNlB2Snp+Qm0/bkVhNFk1RGJPKV1yPXZ4ZSNiKT5a''@;'; put 'put ''QmRSQmlVQntALGlwd2UsMmRITGY7RTdZeDw/Q3d5dXR4NF4vU2I3OjM2RH5gZj9RNHNYUyJaQ014JnEhO1IjbH04KF0wO3htZ2Q2cWhwTCNpOiZGJiRzeTM3VEp+bCguZTdlO09DNy88OiM8em98JG1pdiVnNm5RYEpdIUBKWF9+fHFZbSM/Q3E7djx2bGdePldiPVAsVW11dC9kMHxpZnRrW29j''@;'; put 'put ''KlJFQzJ7NklyVUt3JGcoKEhhX1lJcV4xO3IpdFRUPSlEYCtvcVlheFY3Lmtfe15rWyozYXdyPGlOWXBiVm5DQ21rQF9LeFY1STc+Y1JBbS5fQ3oibDolTkUiPzk6UkI8e3oxdHgqTmN3RVQ+XWZzMk0vXlEzPm5ZWTkvX0NbPFJPN1Q+fnQpLGJvQCMqeDcoYkkwNzElWCRnekN0QCFpVkk0MiRH''@;'; put 'put ''WTJiVXNPUTU6KFl4MU9jZGY+a1ZedyhSOm50KlpRLFM3XmtTRlEpYyN+fWEqYnx5XSxkcEZWdEp5OTNCNSVQPSNicUVyQkgwcnAhUDRkRVVLPSM3dGd2OCUhcUAob2k/ZTpOcE0we3tiQi8ob09YWiFSPzgjbkZkMlVQK3pPe1I7bEZdd25+fWJsLkVXSDBsemc4LHY5WV9bS1c8Q3RoSTxMSHUz''@;'; put 'put ''RDROR2FBbyZrQC9XcTpbfnNgYzkpPXFFZTpOXV08ImhYR21FKyRFNE9jZXAzPnVnaFQ8RXIiey5iRFZRKDlqZ2A7PUNGIXAxV1ZDJWtKR1hFQSIxYiJocGhuIWppcmRZYE03OXoqO1FHQT5tSmZQWSNZPihAcG40KFg1UyFMIndeMTpeQWpXLzt6L1lJSUpkPztSIzV+V3ltfV5uOGlYKFpdLGxF''@;'; put 'put ''bTF5fTlWVlJ9R21uek9IJTxmK3pqQy9EYU9IWThYRCZjMzU5JC5gOGFMaE9sNF9CYis1M1JxdkNCVXZEU0diaWo+PU1rQXJGOmQ/WENOOWVoVjxGez4lTDIlZ3BmV3d9fUpvNCkzcDI8VkxsP3lQZmtqJlE7QHw+aWlpJGJhdGxpQjM1c1ErY0FKRj1vLlNlbzowfWU8ISM7PGcwbFMpeCViZ3Y4''@;'; put 'put ''dEUiWUlwS0EpNSplVWxiNWdvWX1qUDRRWzlHe1VmMHlSPmpFVWMkPkIoI249blRwWUwlUlIiOytUe1JJVEtqfWpJYFNEMT8/YnguLzpDfkE3WVhYc1J3dFAxVlF0KT81KyMzInYpJEcqcTYldyttKjdKX01feFV0IzoyRDtBNmguWlNbWWlQL0sqcCQpaihSKGxWXy8yZUx4Pys8UzU7PixXY3pT''@;'; put 'put ''fFJxQk4qdj9JWnJQJn0pRGRFIzldbT98eSV2VU4kbU9UezlCdihtTktPbDpKaEMxfVFOdWlgR1J6XWh3S0ZdUy9bdmVPQTVELztKaXw6TT12U0NSbV8rUEBbJD4pMGxjbX48O1laJiR0Jn1bVDYiPVpIMjpkOF87I2o2TElrRWdHaWxrNmNbN11VWX5jfiQjUk5wLGEufHRGdFpWSytsfCkwI1Na''@;'; put 'put ''a1U0Y1RTPHlSJkVBcnRGdHJXIzY4QVp3PDZDS0V4RigqJSRGQE41KzxMZ2NDamYkYDJrIy9ja0FwRFNleU9zXip1I2V1ZF9ydF1vWiVrPyRpXmpNNF1wVHNjKCMzLnJUSjpsRyNdKCxHYnR4JEk9VywifUxVe3swP2tlPl5WcU0iQHE9JXcpQCMlV1dtWjMubExWPW41WHw4XzFHZWdCRWBqPkNj''@;'; put 'put ''UE5YcTFHbnBFIixyO2FjUkFoOShidGtnbW9MP1QmcCttSUo3MEhRXi9gWVYlZmVVIXlMPiZwKVIvdGUraz9PdSEjXT1+KGZ5SGVxc0YxWTI3Q1ApYVsxOVEod0RgM2BEIklyWU0sYTBXay84TXtPRiVQKFE9Syl9QnZ1VyRMUikjZ2Q1eHhSWDNUKixlXmRRVTt4S0x4a0IuWHU+VEUvUX58Klc3''@;'; put 'put ''VSVfJT5CYkx8fCRCRWo4IWA7cV8rWSh6Pmt6TV0jIypiZ11JVDR3Yi8qSSw9Tkk8QGdJZVUzTjsvYFJiVC8ranpBKiQvdl9hNWpPclFWVDhDO31nfXtvXzJNVTtgfThdTmxYYyIrfTw9aTtjV0V2cixFQ2c4OCplcHZMbkMwa3tWOiVqLzV8SWkuRHlWRyRgZ2krQUhfclcrRXM3YD9dNzVXR35r''@;'; put 'put ''IWswK15DNU10eDZ4NzVRcHUmQyEoWzUqdC93PWo1XyYvMkRjZUBoXSZWL1VHLiJ6Yj81aTBRRCJgKGF2YGI5W3J1Z3dvSn5jSXI9T2Y/ZWBsVTV7dzhtLHpbPDswTnB+fTlQO29DfVUidnxqaFVpe2A3a3RwcWd0djJndl8hdmpiPjdxZXpGfk11anwuRyU3e2JCRT1uKmx8dSUlZ3dycW9LLloj''@;'; put 'put ''antgVW52UTE4IjhbLGl1UE9vOVt8PlhHRiEuLlV0IzE8YnA5ZEQqYkRYamZte1dSdHdpYm4iKkBTNlQkQyRfc2orQitfZEMmMG9nPG97TTBxTkJ9MzlwODE0Z3Q6aWM7fTheZHVtQUcwWk1SVTckezxVOHJfTz5bcUx3endgNi41JjYzWCU3LytLMm9Zbz5+MjFRXXAwS0I9K3pNbkU6dU42eS9s''@;'; put 'put ''IWx5KH1dTnVjRyZ+cldgJVBnRF5GJDVZTkY/MlVFZFI/XTRIUT1WJldAYDdfTEglRjM3dSNkWWs7QEBVKDElN0RZKXc1Kmk9SkA0MTFCdE17biJIOT0hIyZRNDU0PHErZi9iIXRubVpvKUAsUU5xMCZLUX1AMktxJnZpSlducHoleEoyKzpRfWQ/XWR9fSFlMywwJipQOH57LDk/alFRdz1YVkd0''@;'; put 'put ''LFhwIi5yWkBBR3JmNl9qUUYxVkllfEIhL2FmZV42RTg/am5oXV96fikvMUFmJiQuI2AmfWEpQE5yYVFOI0U7U15jcHVSaERXekQyR18lX0w1UGxVd2RXczZadFVXeHR4UWtqcV9GI3BTR1dJRV48Z2BGektzWGt8LCt1N3ssQyptWTp9UTorbHx8TWFwOlgpdmBZbzJtW04sKF5CaCZxK3Z7d1p7''@;'; put 'put ''SiVJckRbR25ydVkuSGY5Z2RDJXVnSVR3Wl5xXV1wakRxLz59IS5TJVgpXy5wZigjLjJxXUdpNS8jaDJ8MiQ4YXVUNlV8NXdKQ1NlX3dNcDNqT3d2Wi80WEVOP2leZDxENT8rbDl0UjBaVUxgfXVqWSlgRm0kUWMxQWl+JlE+W0tSamgxUDguNDh9a08uZ2QpdGx9ckV6amhpMU1hQWZfS1FJMCs4''@;'; put 'put ''MCpuNl0rbGZLN1huPDBoZl9WOkNeaXR1ME5xKX5bUCh1eTxqPyVPaXBmQEVpPHVRYW9+K0BiM25bODlFbSI9a25tLjV8NEt+Kmc9ZD5aMGFYMSlrc2EoOSROQFozJW06SUZwRkJbI25PelpFLlUoLi5eKSJyY3ZLcEIlYU1ufFt7JDV8VyQue0Y6dl4/c0t+PjAzIVR6Y1Z8bEx5IU57RSReNFsh''@;'; put 'put ''bHo0bF5bUW5bLDFBSHt1eiZLXUM7bThdYj1QPGExU3Z6Qno6JVNvNy43U08qQXJQdTpxYWwwSTJbJldWaTFXPDRoTV1oSH1NUmh1ZSN9WUJzbzN+TmdecmwhVXk+cTtnZVomdDZ5U0Y4UlZLISQpYXxUUl4vRT0zI0ArM1BXXlllK35CRHhWNTZnZlRDbHU6IUlBTEB9em5pbno9N1g1ZlIiS08s''@;'; put 'put ''ZU04czc/YiUiSyZPUmhQaFltTEEuSjokfUEiZyhSI2BWTykwW2FqUyQkVSI8NFRhaHdoUmVWSnlpTFRhcGhxREIkdG5IS2VmeSpUNl9DcGwxY217e2t8THQkKXtIX2Q7TiNIQk42WzIuemJEeWRIVU9ESXNQeShFMXUqYHwoeW94eCoudnBZS11UZEJdImtgUjNBIXJ7TXZ8ezJfQXdfVUUoaVld''@;'; put 'put ''JXpnJGNqZ3FqPyJ4bVpENjw+RjBASCg/WjR3NHZOXilWRHUzRWVWZzFDP2pkMTBKTDdLdjhySDx+aGxad3U0M1AhY2FJd0FtYUwiTTxvR09DNU1ib298aHIxY28rTHEsRENnRXlHREdBMVgpdmN0JVtiVllYWkVDPWMuVDB7MCYsRyM2VDtVXSFdJWIoOmRQVUZTcDBSNzBLJGdjZ3Fyai5rInlC''@;'; put 'put ''KixTRyMsKklsQE1WTklJSX11SmdTRFd6e3wrUWlgNElBZnFYTFc3TSlsVW51fWt+MHxPXlFwN0ltbzJUNGdha1E4aT13ZCM8TUlmM3RWM25sMzJuSi9UeGpmVFYsaXpzdUJXYClfZTQhLip6WGFkc2hrbXk5V1hBXXN0cjhVaWJab2s7eDdlaF5uYytCPjs/PzFMI0tnQlAmbm5hYHk6Tm80LiYh''@;'; put 'put ''QHQkJmdeZlRjPiouRU5qRGReOV9JamFGRFhzV2F6fStoIzMqODVAL3cvZ3V4QihrfEl2aVlhOFlCKEx5RUlMYikuMCxZR0kycz4yU3V7cHIweWZ9cD1oekgsVFthUyF1bkZIeD1+bFpJNCR3Z2ciazVbKTleaipKI09HRyQ/VW83enFseyNhbyRRN2I9KW9KaT5yKGdUQVFNNF91LmQ6W3U7fCtb''@;'; put 'put ''KVR7RFsqbzxWUjFhfSlZQkxmc2RtQi59cWlkb183Yz5XRyRtdiJCIk4wLFU9fFJqV2V9SGRTdVZRUDRhL3lkb21PYlNXc309L3E7fl9IfE4wQmBPMmRKIWVhZjdIbGhCdVlVS3kjRC98c1tlT2VMcG5gXXg2OUB0NjB4OUxgWX5Ea0EqOl9rWVJ9bj5je2RgUktzelZSfilFZ1k8PkpoY253bHc8''@;'; put 'put ''UURXTC55Tip2RzVoVkIsUD9YXkZXcCpPMVBkcWtYNChzZS4kdDl3OzlFYU5RUzh2TkhxW2g1VGFZdlJPal8/TTRhUiRjTFtHR2NuZUFVVFlhIn1+N3l9ODUsZlNxeDNQWnMoJHZbRXU2T0cxMSpzeGxwQUtVY102cnldaShRMkZrXy9VISN+fm0vUnZzZls8SDdwLHxGYWZzTzBKWCxWe1BnL0RO''@;'; put 'put ''Sy8lfGtpIiYsSSIiLyxDQyJiNHpLQXR8fkxeNjoieDJoZn1iTiVANnpzYE5FbUlvM3t3I18lSSFRKDd2NlttSns0K3UrRHhiVyxCW31xVGF1Pyg3WXpCWXNhKi50NkNAP0tHO0BSVE1tO3xFJlpOOT9kIzpgQnJHUH02XS52RSZuTnN+M1IwdzR5eERPd3RlSXM3cWxRei8+VXhqWFEwQUJVTDxE''@;'; put 'put ''Pi9zSi5QWmRVSFAqND8mMzZSeXBWelk6RUVfLHIjJj9Da0cxLGgpV1NlKXJ6NUY5X0tUOW9yWGtwPS5uMyZoSnQ6RiQvI0U+aHFbUGZCckheM09GWFN1eDVCbXhAZ0UifE1bZzooYEMvVjpQanRURDYoJFEpMH5QNGtAIlNMfTEsK1FUdnNSTlYuJH1lI2RPcHs2NStCT08rPU50OzN9KXQqOVB+''@;'; put 'put ''WUx8QUV6M1thXWVkKkFVYS4yIS9gTXFCNEw3N0Ile2tdMSk3L29AIzpRKD5XZEwlVi5IIzYjP1FAK1NTVj1mWmZCfX59JFU2UikiPHhrQH1xejkvditzQC5LKlJVPUw5SkcxUz9RSnpSSkQ3NW5rekZtdU4kJCVlXWVdcXkpQStXb24ue11UfGheZD5MR2tPSyRLMC9EUUE/RmZ9T0FkcjEwQD88''@;'; put 'put ''eG1rcUk/TE8xa31RZUMqI2BOcWR4cj0pfF5YRmtFcTpXVmJXPSohLC48UjA8amJ1SXhacVJ+RitXZVEqU28zZz9Cfjp6SXNTVGlQSmNGdFNAeU81LjQhQFlOPjVhO0VLbG5Gd1Z8cFB2ejE9Sj5bK0pzZHxqVXh1fEpwQCt1Z09VWnZfWjRBSjE8PCxgWnJoUlNoJnElYSJlWmAycCY4NTAxLGxm''@;'; put 'put ''XmlDeXVqPnpidSNIfGxZNTMkMjdMPmlyT0tOW1RoTl9JckpEY19jVUhFUSZbSXw1PiNUP09gXSxmUXQoYXJTUEZCaGZNODJ5NVJnLy9SPSw6TmVTc0NVRSJFWT1aUnglSF9JTExvIyFqV2N0O0pgIlk7c0wrTSNXL0lSQUsrSTpralN6Y0RMdnFNa0YsJitpIXgkZT5EbENtZHsxYlRae11dQCtC''@;'; put 'put ''NkklcXJOelcpOih1XVV2OGE4THEzaHduLiFBbDhYZTpZLG48YFBUdit3XnohK1c8XUNdSDc2Szd6KjhYbmAiNXJsJXdsVX1na0ZDbF0ueGYjSCZGelpLdCZzLGl1ej1tITs3cyZgKGIjUShrKFFiZkM7OSMmKUJdIWVvNGZ6THI9PGNwYVoiUCQvR0V6eGl1dy5hX1Ivc1hxUXNZJFhDOmAzXlpb''@;'; put 'put ''PjlvLGcqM3o8VDRNe1ZpNl9PJjF2IVNFOjR2enRqaWBLQFpZREU5TClGTzohKnx9QmZSKUVwe1BhKXtodFBVc2d8NmU/NT8/UFkvZUYuLlJdJDp1V0E/VE1zM2M6MFYuV3tHT2lQKnkydm4xdFlmUFdoT05LTSUxXWBvOzpWVENKbndSVnc8S1JYK3VwL0ZnRH4zP09oNnhSM291MHksekhVck18''@;'; put 'put ''Mmciay9HJktEY0xGaXVsQSRCM3thbWBVYktdRyE0ZUpqRCpPN0MzJDEmdyYyL3FrKWdJKG5HT1QrdU1sd05Ra1RCbix8aDZ6Y2doQCpoKmVzKDZBe1RfXzF5Zmk1T15uOzI3Z3xqKks2WVcsPDwxVjMzelRUaGZNRUwrMUN9fnAhYHd7emNWbF1USCE9X09bJTZMUVRoaEw0UXJEbylSckhHM3U8''@;'; put 'put ''IylXKl58alZjR0VwfDxRInZOQ0oydkkhNGtOM3xlRTciZGd6eEdpJnlGMzhVM0gmLyMkXVdZSU0ib1ZZQmgkflFqRmlPXyE/M1RTRFt6SmlYNSVPTzBsbHFtOFMqSzFYd2olLEVgOCJAaW5NP2wwVF0sKTFRRnRPbDlVPUAhYz9ybmx3WCI+bk86bnQqIyxZYC9FbHY5fHhVcXUoZks3Uj1gcDtW''@;'; put 'put ''eXZNTjh7NHFeOUQzcl5NK2coYmpKZ3giNWxnPUBdWEdQbW01IllCI3hQZWg5c3VJSUpfMFt5TWAja04oQDd5Onl6IUdsdl59QjRHcEQpOEQoX1AiTGRUTzgzcyY2VEIyJUFlRjdbZFlSQztqbmxyUEExeVAuK2Jab0UiQGNuNklLamshRndBWHhaZ3ZlWSpFKCgmdF5zVS82T18kIXFMM0xvJGZP''@;'; put 'put ''LmhpcipxJDxVZkQoYzVES0BvZTJRWTQ9YFdaSShsYltSaWsrKXFGUzp0VixYTUArYXJ2TmB8ZkZZZF84Y3BUdkRTMmp6YWJvL0NRQkdbcWVLPGdmaWojP1t4KTNOejZJKlBoaHdHUXV2NFJGKD12fV17bzclZVdjQz9CJWtdTXkzcE5ibXVQNWJtM3dbPjluVktpKn04IXlCNDM8PkhRQCh+bX5h''@;'; put 'put ''elNsXkJ9dmN5JTJLVSR7QlQ6YHkudzZqbUBzPEg9ck5pcHVGYCFJczBbakQmLjZIZlE+c35MP2woPWZBUGNPMX03UktBSTk+RVQ3ZnZsU2FVZ3BWaWRJa0xMZFdoKyVaT0t8UmdhO2s9Pnl7bVFHJjRKeUdIW2xTeDhkUyFLKWYqN15+dnhmc2FGMkhjYHZ5OjEwR0pgUnhydlc3NnwwfUZEYm13''@;'; put 'put ''Yz1KbzM5XjFlODh7XzpXW3MrNjEkN2BrJTgwY2hWZTtSPHQqNmdCTVA9Sn4wOkUhMW5IZ2k6ZTk9U3xLd30sNnwxXzc0OlQyLkFYYXIlUXFwOGVXW3g9bE19MkhzP3J1SiRhLDA2YyNCYWZ0Olg3QzZ4RShNKTRHU3xRWHtHUjFqfXt6NGFyfXc2SENocVBDQjxYNmNPTV8hWE03SVFlLkkjRyFD''@;'; put 'put ''WGtwcUYuNjtgJnw1WU5PX1ZFPmNuaDkoOmlAay98UFJLLGJ6VnssSSZNYWcsWTRoW2BNRS48TmVNJUxGSCVrZnsrZVB6bGc4JnJrMX5JYVhicjFGS3BNNm83OjhXZilnMjArRHZgVjE5WGtOXjRtfHQ7Q2EjQXUycG1CV058NCQ0YyJyZXVmViVKe0lGeSx7WVZeQjxNdmNmbGVaSlR2R00ud0RQ''@;'; put 'put ''Nzo+QjE3eTUmS05STj5eNz93JH1KWDlCOGdHNTk8WVVsTVBmUVB0byJJJT08PTs0U2pMb3d+Y1tpPGg2Z2ElUUZfOkF3XW5HQl57ZyZiQFswV3t3MkkoaVYrOG9GX1BbaD1vI1VuKFRKRyxsZSJObD5qTHFHYFcsa3UwZW9HLGlWY1slSm08MUhkWGdGeGlBdFsjVDNdK3lJZGFeYm9LQ0piTGIq''@;'; put 'put ''VUpeOXsvYVF9OFVfLzdQbWNVYytTNG9PIVJ0U25XVXxXNk9ZayxLY2lmNHNfa1pSXXpJZyxiOTlaczJuVFMoenpwe2ZOTSFCQzsifGAxOXdFUHBZS01GfUVjbj86YGZCWkBqbT1GYipnKXkzfSl7PXdXNU1yZlBETGQrY2BHeGl5O29PImtqYHM2ZWg+Tlkxb0lCU3Q2KVcrUiFfU31udHRoVDRG''@;'; put 'put ''fXxzaC8uZHZ6NmNzMldtNVRudTwzOU11Xnp1YHw3fFBOWz9+fFRYTWMxKSljJTRGaklzKz9bMzJqcEZFRTFxPENzNkZ0RGU5a0NgTXxCfnAlbmlmODB2Xkk8M25zZzZfUkBjTlcvWSRTN3JLVntzKC8yQj1PfkAkQkszL01uZ3x6Umk2PV5pVn08b2E/bD0jJXhSaUxfL3F5aDBqVnRNM2BEIyQm''@;'; put 'put ''UiZjJFoydFFoYU9FV19qWXV0WHxLak4meWdNbSF3PiFIQz4pRSxGSWU8Nihie19YaXZ3Wj0/a3lXO3o4TjRPOm00e2FwW0k3aF9YdTcuT1M0QDhpZThTLl4sPzYrMkhdRDlHInVnUEgzU2pUNylxbTxoPmdTPjB0KElKWDQ0SUU2Ylk0JUdeYDF+RDA4Oz8uLFFBJnlxZkUxM1tobiZoYnBpfEdw''@;'; put 'put ''OksrRkgrJW5WZGJsWE9qaWE8ckc2JnI4JU55QVoxajhSPilJfSRgfjlubzQhM01gb1s1Q31XNGwkbF16NjVrP2o/ezkkbCN3e2R1TChNQjhwIlYycGVabSl0RSNGQjJrN2VKdzF7P3t0T3hvWHJLWD5bcSlxNio9alZiIlhAeiYvY0l3Kzp3PStnXyVHKl1kcywwSmMveUYlKTozZjVxP31MVm9u''@;'; put 'put ''N1BXdGtoQ1NpSGBVT3pUP3JQdkFpeEdJc2I8WGpkcThqJVN4OnwxdytQdz18d0xPJCxyRyEhJGRrRGZtKyFUZXlbLiReSD10dmEhV3RlOTR2JF0+Vmc5byhGXyoiP0dORntgSC4zX1RyUnFycU5rcWVUWVtoPTFzS1lwdzA/OU19VGRFUE9ifTtrJiFYTnpJKVt2KT18KV5uMGByZSYxJkI8NkNS''@;'; put 'put ''NDJCWmlBdjdgZHtyTSZ9cHZyJC5XaGZLVmlkTDl8cVBZalh2UlNsVG4rVk89bGlKKilsNURmdSxSPWxYfHI5LF9eTkBGd01DY1Y8Xi9jcl9XUisiSHhvSGMmTW8qVTkqdzlQXVEoWGhFI3s9PH5taHorTmQkc1F9QCpCWlU9VnROW3F5ZzBmSCF2RT1TKVlDKnladVhqUkVedUdRLmhuMW5lUG4y''@;'; put 'put ''OyZDMlA9WFNgaXl7Oj9EfCorfkEoTjBFNXFnY1tfZjtEM3tPL2g9eTdadkVEIjV2PT80O0hoZWwqV1FpTnQpYW1WWElGVmdPcy5ITmchOFpXM010THM3fCExKkFTOjxJLHxMKjF+U0tnSGZNWXN1JnF0UCl2RV55ZGg+PCQoTWprbUN2ZSY0bWB9LHQxN1J4fHZfNXdJPlVtX0tpRyY9djAzWSxt''@;'; put 'put ''VjtnYjhQcVNbYUkmSn5wL186YG5PbUkqbjdBKDpPYCpuMG8sWlVgKVQrWSVCZiNeYmNVe0E2RCwvU1hOI2c8M1EsVnp7QSUhSURuNmgyezJpQj5kRjRYPFlHfERVd0xPYU9YQVQsYkhDdHFWYGlKbXR7PUFpaSRPcU8zWnhdZlpwRW87WSRIMU5DISwkeVUwb1FLXiRfRUNeNSZHajkrc1U1I2Ex''@;'; put 'put ''XT9FRFZDbkp6aS9KK0k9QDdEVEw1YEswNmV2STZuSz1iSWJScUtfZG93fWFkJV9pNjxNQ2xXanVvdXdVJFdxXVosST08Sn44YntrX3A9aGtaNU54NTlGVXlqInM9bl9TQXhAVCVhd1Uva0N1Y010c21USFsxRlF6TX0qe0BZXVY9Si9QMU0mJj16ZCFURnBVZ2shVHVpKzspbDNCQVNkcDMleWsw''@;'; put 'put ''M1JjTDlaXTUraE5EPGx8U0l6Wj09RCI4NSsoVVBjWEl1d3duQzFvWShhQlp8N2BeWFgwbjJyMGFDSnRac1M4cC5efk9ReCh9OnM8VyIxd2RaPXxoa0x0cS55JW5PXUZCQE5iX2tUViYkejVgQnYlZ25lRDQyR2Fsb0k/JiFkc11+Mlhzbm5MVnJZI3E/ai5UQ05nITw6dDhfPyNwXkNsNmxNQmd9''@;'; put 'put ''M0RzZ1J3KEAjfDRnQ3wxa2A9djgyLktfV2liXztWeV9ZUypqZWY6M1AyTCtVck9sWW1+TTl4dFkwXkJDZWJUYXJUMzBRYTovbjA/cGZDc1l2b3ZUQ1JbZC82OVVuKVUrLl5bLGFfP08yOjEzUkFKW0A5Mk1zMCx7JF9fLktIcCFHNEtffWhHe1NnbCNGbUNqOkRaZj44TU5mXzlwUm5BUT9pTn1e''@;'; put 'put ''dFowNkt6OTV+TGVDKGpFOC4qYnVubilOKjhxSTp8eU5YU3VAZkpmbHMzPmNqSjQ+Vm9CWlF7e29lMGZBUDZzODIuTzFEdlM3TCNMT1Y7LncwQEo4THI8LC5eKzxlMV4hUE9xYTxBNWBqSnBxM2diW1pSR3hKSC83Q3tuOk12dzVObilzKGxFWENZfDZnelM/TixNWmV5bmFmcmhUayw/VjpgWkAu''@;'; put 'put ''MEBbb3U8dC5NMSthS3V+Nz42aGFONjYlWmU6TmZONnxnPn05dUBOZDFFNUlbUVdHd1R4YmtqOmBIbXdNOzg/enJHLH4sdihmbFo7KD1dbEpkLFA/YUxCezRVLzt3LzsvXXJwInJWYEBCeDQ2M2M3UCo7WylRUE9PIVtRRk9jSzxXSXsrNyV3UFA3dm8vT2p3KFosdlZsUUVdKDxSJCZycig7PGBG''@;'; put 'put ''Kl9maXZDOEtJPlQhczF2SHZfciRsb0VSQV1Vcm9HKToxKHFIMnoyTnE9XmFbLHA0VmhyXTEjJUQ2Qj82RiJxX3lNNzB7PFBALnhwLzleT19DP1tib0hsS3Rme2ZMSmQpZnZ+bkBHKHtzaUNHTEVWREEicDZuN0QrMjdpO0R8Yyg/bTE5PX5AJG8mZX42YDk1XUVOI080Yj5yWXYiYFFWWnQhUWB2''@;'; put 'put ''emVlTU1PTSFwZkBxNigoSnFLRkU0Kyxhdm54dGFdJkxAdkEqTHMmOTNXKEQueW16d2EzO3t4b0ZIQldIYmAqNWlfTVtGeF5VfGtMREg8KyopQn1+dkcyVnY4SiM7RCZKaUgjTjxULmYvNmZoP2A6VGQqOi40MyY1ZXkzNDhFeHVFcWhdZjFSUUhNNDdFem4xOlFyVWwzMmB6JEFHJlhqTGMlI3ps''@;'; put 'put ''Zm1AKEw8TWA0cE1gM2BEMWU8YG9fZlsjPWE9QkhEJElWYFMvL2RlLkJeOy8qQDY3cm5AL0FXSEtfUThUQ2JFa3ZtbWwzRjJRJlRxb1YpUypRdiQpZTA4MFMjPjtkRXkiZ3hEbWdiYXx4bTc3Py9aUytGXXwhN0Qkc2BbfVB3c29hYU90IUFFRUpHXTdzOFJsWHA4OzVebXlPMy5UPnc8JH02IUZZ''@;'; put 'put ''MUMkTCQzL3c9UHZrMDhiayxvd1osR2xacHR8N3cyTzwqdVksPn1GX3ImJGZLVDApakxbYW8wVkVbVjFHNEx9YE1NdmxXfDN0RGROSEE1fGtxSyhNM1NpQn5GLkw8ejQ7TzpiUTl2eU8vYm0pJWxEIS96MW5wSHMjYGRMP3YpWXFbfkVWWDpSKzI1di5gTV0weTJ5OElrPDVuUyx8bmRoeEo9Vmws''@;'; put 'put ''d0Y5c2o6Xz1sKz1DeE9SX2xQRlFTcWhtO3lYMXhgWVh6XWpHI3kxVyxJNXViKCNjQlAoUGpMWTxFJmVffi5YV2Q2TiRmQ3ghY2Yre18rUVAqT2JsVmchdGM9I2EvWCE5eE9hYU5lYUhOVlYleTd0Q0w4ZEJwcStsRnElPDMyOXhgPjdFOjVGOW1PcDZiZkp9Y2RiIXBseCpNYXg2WklxfTpddkZ4''@;'; put 'put ''VUYkdzdAfU1WU0ZjSCEwZDZzQCpjNnkpMVtwMS5BPktweCIoSTJFPX05Xyp8bnM1UWpMKX4xPn4qdVpKQCRee0FuKUwpWV9kPityVTNyU3l7djUvJFdQKWB+SDhlbE91R2JlPmslOSZbUyVXWlplKFkqIVU+eDhzYFd4SWcpTHJmZXg0WihfNkFVa0QzQndwa1BPVVsuMXNMa3IrX1h6cDpqWHI4''@;'; put 'put ''T19TNk1Zam5pUElUJFhkWURKNDRbSFlEMXFMeUlpfTxdL1M3Y1FQRTQ4ajtgMTM6ISgiYXpTKncmSlVDLjV4Yig8ZX43fG1mUVs9Wy8+Y3k9P2Z1V1pFRD1jdlMrLkhXYHddYyUhN1ZXeXlHLk5KIkdGOmM+OFFpIkk2TG5bLHY+Y21xeCpFTXpsNFNCcERqRUhSO2JxUTA+MHVGZUUzMkZAIUtX''@;'; put 'put ''eDNbSnZQZ3NXeiYkNnM3VlNYLDooWVVhPXdOI0QifSxAYTJaOzxQNU96Xl8/bEcoJHhiQi8lQ11pTnAmRXcvfkVfbCJRU35QR18oK3Y2QT84dmFBeFI/bkw6ditVTWhVZzRnUyh+fFFldzVkIlVnQmVhN3tCd3tBcXFpRzhIbF5DInA8RTZhTW1rJUR0STdYKXRKdCNCOkt+eF5GZWtvZFYyJjpG''@;'; put 'put ''S1p7KDd8MjMlcnNmZVpEImVSIlVKfjg6RkBWL29MPHE0MnQkKzNJUz1oPTZeJEVAOlVdQ2xEdXYmPENCUzA3clByNl5gcUpgOCxmR1Q/JSlfV3hmeyJJPVdMXmp+OG9pQGJxfXpeRnNIN24/Wk15Jjh1UyQkVTZ0Y2BIXzBxTEd6Y0xodzE8PFMzcl5ieHh4YVlnUm96U21mfWc3NTtpc0UucGt4''@;'; put 'put ''ODBOdF9HeiFoZylNXyNCbnNucllkSG0udWRqNHBOaDR2SEY5UzdmLEo+RDJaP19KTDpEND8zXj9FXlBDTWs5e0JYIihtI185MipdXkUkV3A1N09SM2VAMzMhJCMwK35aVT9XJk8xTGs3PVUyKztXSSxNY29HPV1JRlBxJFlCU2xdNT1pfFRCMyVNVzciRkpofjpaMSxvImtjazBMMVtpbHo4dm4x''@;'; put 'put ''ZnMxcXpIWFo1VlkwW0s1JlppMj88e3tTaTZybSJPZHFFdUM5IUcud0plcTEwQUI8NSpIOWQjQi88I1EhWDZXbiF2KTs8KF94OXgjX1dbSzt1SWI7MlhsT0NIOTVNZ3NTNGN2JVBZKWN0Vmo5Ny95ViZ0Siw6b24iTG08JXVCNDZTMEVQZEcsazRQMmswWjU0KyoxYlZrNVZDRXovJTU9X3pxOjR1''@;'; put 'put ''TDw0NEdxM3RmU2xbSU1mVGkuPmosPnNUWmE3SDdqcnBUUHR9Olo6b2h4QEQ7TTYyTjs0PyhfKklpJFB5alRCdz45P1glbVJUMWAwbiJMTHdyZik/Z3dITU0zMmxrTWwyKjcjfl15ZzlRXkpgYH5wMTNyZW9wNlJGemBXeyNeWG9+Xk13Z1lDdiZeaVl4PkgoeHZTW2lvfiVFI3w/P2xxaTpbaz1o''@;'; put 'put ''JFNmKlh6NlY/bT1Wen4yY0lLKXUlJXZMNTk+OnVTRSMuQV04QTAhPCtxLjdFdjMkUDY4QDlEWDVwem9eI3V+ST54YS9yNktPN1EiYn1ycDMvdV9wVWQwU1c7WHdXQVdYXklSdVduMFs2eTYxcGRMd11+QnJ9dzpfSU9AIk8sQ1BVS10jIXBVYXRCSTlEcT1lOHY0RkJ6ZzFAdVE5YC9XakUyK1VA''@;'; put 'put ''d0k1V1FFdERuNj9OPWhoeW5PQkwqW2o6MSVKUUJsbHc2SGhhJSRTZkBELiYxSDZGfEFkMTs9JDVOUFA1RTBmbk5iX35JajV1XitUWjRuR19XPElkUHdTWjY0ayJ2RWxFe3k2Z28haz1Zck50MEwkdHJFa34/QndTP2xQTlRKZHFOdmJpQjleR3l4I0Zed31+bnwsYVREa3woJDN0eit3MjJ7JX5C''@;'; put 'put ''SHZGem8wP11NeSZEQFNja1NJd0tfe2VpIzhUZWJ5VjF4JlpQVCo1cCpCanBHUCF8NyREentdazZEU2ldQGQ9cjhgNT5wRHluWFk+WFg5UmlKP2BUJE1sV34xd0htQSskOHxGYSppdE5Cez5hMWRGRWFYazowQyZfV3d1JE04QkgjZGBUVzBCTVdRZnZPP1B1X2VIZTk7cXZeUCN8fTM6YjtYOEk6''@;'; put 'put ''TnNEcnB4dDZlTjtvc3R4Wl9oTigsME17OD5qY3ZmQ2M1QGZ7JFFBMEZpZ1VlM1pkYE5VPV5Be0NWNV0yYHg3endaPVswTTJdZzFWTVZseGA3fE45YXZwRmJ+aVMvQkJoPDk9UWhgPTd+Xm5+JTZXekw5ckMiXzk8fV52YVtvTVpRXkNfZldpUV98XSQoZl1DaFZfKEs4R3hnYlh8fCM4S0UlL2Z9''@;'; put 'put ''K1RTZDsoP0RBRVQ5eXEmVCMjRi8yXzdVK2F9M24uaDA9PSIhUSJFKkIpMk5xbWwlUWlDSXVIRFBWMkltal54eTh9PWUqV2dxMTlXLj4/KksjT0AwLzApQ14zS24/YHJ3aX5qSFFQQEVJaXtzezMlPm42fHlCKEpPUmF+alBLaTN2YV9BUiRMaVUsW117el5baytIYHhLV1VMPzFwWzxJS3Q3fkIx''@;'; put 'put ''WzU3MCZWelREKX53KHU3UCZPe2hQUUxvNn1JJWElQGZseCRtM3pRQyFMT3hEQnR3Z0R+MztsL09ALjQyPWtLZ1ZZOXZLfEJUXzQ7TmRvcmY6cSk6Kz02eix7P2NHTVoqekt1MS4uMkQjc3Y5dlMqWilxamtbcCZHdn5AcyFGdn5lTUZIP3E3Zjx8UFlzWio0Rjp+fWQhJnJfRDl+aFJ8NGhuVUAs''@;'; put 'put ''VDYibz4kM0pyfkZ3VS9PIWkpMDArMnNTZ1hwYXk/a1ZdKjVdc00/RChEeDVnXl5NKmdwYDh3TCpGN3pRVSZYNHx8QDBga3Q4bypKRUBjKS81NFd6MUFRcCgrWWJFRWNlT2NrJnZKPHF8TjUrKG1QK3Y4KlUqaCY+XUglU2xKSld5Wjgjdi9aX0ZZbHhuOWgmciV8fXUmPHJGc0JzKj1LUi5yeFVV''@;'; put 'put ''NHdWMF10UHJhQFUjeTJ0bEdLQjJ4ciowYG9pLzFsbkBUQ1N7e2gldyVaRnsvSElEbGFaMzd6NEl3JEguc3RgYGw8OTBFYkliMnIkM0RnSXRYZEFGQnVkbz0jNXtFP0ZJP3BncDYpb1NCajV7U2NOJW4vYDIocjRCNFtZYUZwK0d+ZTpBMl1sOD4vSmBiZkd6akZ4OGkpJXlmVVRoJTtzfDJ5ZSVx''@;'; put 'put ''cD0oZGswfSNKMXh2PDN4N0cla0pZJSVXc3BJNU5CVHFETUFgOzI/M3NXaSNzVGsvbix2O1k+Zyx6aUNaOilUQ0VEOmRIPU5XZUswcHdePXV9cjE3c1cxKDFCeFhFaS48dyJiNjZLQ35MRSosYTJEc2NlMUwzQSR5LyJvVy5lJFtWYUVnbmE0IztLZCJjd21XcEpFaVUySzJGcEwmeHBTTkEzVjVl''@;'; put 'put ''ZUJ+PkZLXlMiLjJmNSlWbmlbK30qKU4vaW9tQGl4TX54Tjg6QklmQEV+OTl3MlQzOW1oX0VJUkt6LzM9dHh2eXBSQCxmNHlKUC8mIW9LQXh0W2x9fXF1YmZEQ0hRQEMhb2l7YHpKPHpdZjRUXSo1a2BCQ0B0U347fH0sdjZSLiVodFUvNVBOTFU5Y1Z9LmluLmt+NypCXnc+ZUs6dkZdd2prbkYs''@;'; put 'put ''P0s+ODpdTlVlbXwyQUs9PmYzY04vMiJvZGxBaHxRW211ZzpZdmtrMGRoLkl7W0liQDBrQFFWemd1dVd8Im1fKS9bcCZDMEZ5PlEvUz43S2NoXnxMaCoyOUYjZExfRG13P1pCVy5AVSpVfjFmXVduVXlDWWp6TVh2WjpTWVtmRSwwclNRd2x2akNAeVUocCNycDEwSD9wdEprWm96aGpEKCo3b3sz''@;'; put 'put ''WGk5ZVNJRyltdSMzNEd9aHd+UTNsMD11MWdeS2hBVzIqMC9Gd1RwTTxAbTRkfF1kViI+STxxelU8azV8dm1UVnsuJWB7eHNXWz18SEghPyk+UGk+JV9tYD56M31Me2JJM2crUSFgbXVpKzBzLDdYQ2B6V15hI0FZQ0YodywsJmBiQFQrbC4vbSZUOl1kXiJ7Tnl2RSFkczJIU286JncmZyUzLmpm''@;'; put 'put ''fEorWVtyQixVbTBDd3RNcSgvT25RPldJaz5HX2MsNmRqNDBDODZsJjpnYyZVSHVAQWUwai9BYnlYRWFgUkouZTx8WSF4dkJ0e0ddYTdhLyIzakMvenxIbSYqSXg9cSVnc0dMOj9Xa3ZSWnJmL1ZDRToyaCgsb2tmZXBDe19UX2ZKP05nIXZHTGclKitSYThDJWVHRzpAeUNGLGtEMGhWXWpoajl4''@;'; put 'put ''SUV+UVJwVnphK2ZMcUoyP0NSNStXRlROQiwrZXAwTXYscS9ZVm0oVFtUcXlOeyUweF4wezRXKGBVOVQ3bSplaUE2cjNULns/TixzQ0Z1aTJlLHZdKEZaLlhCRitWenZhMmtwYTh8amA7U0ROL21RfiQmYGwrd3MuUH57X3EybiMzOnI7MDZDTE9VUjAyKGM3fX1aXmNQSSYjJDBzJn47JHkyKVd1''@;'; put 'put ''cUk8RSxJdE1wT2p9P2tOMFc5V2xKK1JuWXV7W2VnKUVhbHoyWFZQU0dUQD8ub0xELDckQmRuPyxOKiJlNWBFdyNANnheT0Q+aUN0YmlUKUlKN0BgMmYuXm47c1lPX282LEE8PW86WTc/ZHEuNnRDUXMiKmpmYzplYC84OTlJZH4yVU5DbHJiLkxQKHVxLmsxUkFCcHRGNyE0QklYQUhVT20kOisx''@;'; put 'put ''YnE0R2Ioc0JjWk0ofG8yPCZxNSEiPywwYWw9VUdrR0hwPiVqd01fWXAoO3FFaU9zcCUiTWNKYzF6PjtFMUt9JSZ9SHMkd2J5RUJJIls6MUUuPU4ra1Z3L0c6P3xpbWcmWmFaUUUiNUxBPU4+WUR9fFkoVFNFNWtNeEk5RytlbmFqMSV9ckhzQkJdR0I7KE5JM0YkaD5JKGsmfDs5Y2FLVCN8QWs3''@;'; put 'put ''bFYydXNVayRsSktCUDFkfkpkdCxsZXUpMngoOHxJYVtKZ1UyYyE4cnFzWyNKMUxXUip7RU1oR3l6SF52X3ZyOD4uRS5BcyJFLiZaIWVKTXhxYHlRRSlWJjE5alFSbl9uIyVLKHV9STBYMmxFPl9gKnZVV1l7YUJxMCM7XW5IKysuMWtdX3pCWSwqO2FyK0A/b2RYNnJOTWd+VW52aytgM0hnOzM5''@;'; put 'put ''XSNEYmtVTURFMkNiem94YDh3IlIpVlFxUHlsLnBPZHU1aUBpKEFqUygmR2trPXJTZiFVfSVJNyZHXV8iZ2dHfS9+U0F7dkt5U19CaDYuWXIqcUA1IzQyeU1kfGFEMHl6ZCpodHIrMGdoNjwqKy5qRUF8WCRAX2tGdFBzWzc5SUkiMWtsaSs7UCUqRnFEImxuKS5KKEJEe0NuQyxeL2AjdjYmI1dP''@;'; put 'put ''VCV+OCl1WWFGJHJnRFFRUXR3YCk/XldVOE9KNGhSOSoiKkEjbFdCfUNwUGpuRDZkX1U4QWZHZFArKzhHSSVaWUdGO15vIkd2TjZZWEVMdUg2U3ZsdXVPYFZvXiFzbnVHKnUmOVA1ZmskdWJjaCpdMFl+Y3g8flZrM2NnOlIpWzo3MSU+bDpbbjc7b0kuWVleenB2ekxISmp8ejlbLE9lLnxBe3Bj''@;'; put 'put ''biZjcXFEWTAlam94Vkt+ZltrTC9xNEB9NTksLEI0SEp+ZEY4V0xkaGRJWl9SaVIuYUt+Tj4sOSsxIXpOSDN1IWteekQiNDA2VSluR25yS2R0ZWdrNlNtLiUvRWM/KW0xPFQxcSpze0RAQGJKR11DMUEjK2lNKyY9dlcmOnM4cUtMOGJoOzdWWlhhY0VxbE9AeXgjdHp3Vm94d2A5YDBLVTY6QjFu''@;'; put 'put ''L2dNe28qfXE+IUQ/QlV5W3l5S1BIbCFvPHo5MHNaW15UIn55c0dkVUdwfj02cixAJTdmRi85JHlVeXFhNlYhfEMsWHxobD15bntvVFghN2A+PktzRVZ1b3orKlAyL0AhdyFPUmg6XUtlfG5ETDdqNyFiU3YuYkwuXnp4Ujs2ZnVMMzNtK0pbIVN1QFBvJUF5cj54dm9zTC89Y246IyY9RVlvOHMk''@;'; put 'put ''YCxGKHNMMiRHNCEiL0w8TVFNLmJlMi9YSjdNfGRjQFd0eH1mUUE8fSMuVnsoPFJYdzhTIjN8YUtxMVJ1UnFofSEpc0lMbkpMaFRtZlEveTlkaUBHUy5ycnIiXmZ5PHBmaUh5cik7IX11Jiw5UHkvS30vUFV7UG4lQyIuSihXOHAlJmt9NFg6W1E+ZX5femAuImVVMmErNUBzLEVGMGRaLCo+eG91''@;'; put 'put ''XykvK2tweyZwPDgwQjc/dHFLR01TUnhqeC5scTF9eVA+dTkvJD46IXYoU15uLjR5ei5CPkZBUURyJG4kXkAqcmdaflM4JTBLbjt7JnJpWm8uQVI1eWpWP3xMSTZIKWFfW2BsJClzU1hpL0YyNCkwWlJLTEsxRSh3Vj14JTRaVDhmKV8sfG9Jd0xVV1c0L3NAYmYpMFkuKkZLe31rcVMiMGkweX1P''@;'; put 'put ''ZSZyZCl1QzJWT0NoX2huaSZ0PkpdJiE5ZncsMF1XPitrPXk+RVglYjR6U0pTNjJfb31+Mks+KGk9a0tGYkM3NzRUVEgjYjl4N0Q4fXJ4eWYvJUUhbT98LDp1MSs4fXpCcC5Md1VOMWJxYW1dPjxTVWk0W1RiKWtzdTA2OD8oSlkzKj53fm9aNDomVzk7QjYud2Q4dm95bS47UVYxJWVUaXRDOnZw''@;'; put 'put ''LzRBJFlxVkZUdiV5SDEmIkNObykiLiYubVl5V11FJVZZcnpfZTdqbjpIRyldZzF7aWVvSXlZfG1nTEdoZ29fam52Nlt+Tk5UVUtdXzgje2Z2NT88LlkhNGx+KmVtU3dtNVRfe2ZGQjYrYTFiTS4jWjh0emB8andycFd8MTE8ZD9WUEs3UUpzSyRQNVZWQ3M0Zn12T2h8bGR+Vnk9TjNtQnx9KXRY''@;'; put 'put ''SEtyYHthTnIwXSoqakldekpIKWt1YDZMNUhxN3JMUG1wdzc8SG5WSXlha1oza35rJiJUYnRyPDBMdUVYYHh4a0J0b2ssMihxUCN9SD9Wa1RCJC54O0J4MysrMUhvUysrfHA+JlpKOURISUpyQXRFNUskcUtBPF5lYy4yL0QyIng2Ozl9LGNNalFsRjNzMW14VUg8eWs5bWxCVXA/VjRsJngmQjVB''@;'; put 'put ''Ji5tfE16SDZXaj8ufCo5aVsqUSM3N1BYaUIzMmouXXFxNnM4W3VhdCg3W0VmYS8lPiU7Mkw9QVVCbix8Kjd+SDk0eVdMblc4QzxQIkwkXW8zSUhfWS9nMUJXT1E4QEZhU351NmZFZWx3IzBONztgZVAjZUtYfWw8cE9YZyx1bWkmKHRCbDByIVRed0xFQ1E7MTx8SGkrQiV2b31fUX5lOUNqN0dd''@;'; put 'put ''QU5QdkJnJVs7Qj5Xc09VTS9KR3Z6ZX1Deypxdm5ifjhDbz9RdnE3QnhvPVtZbDtvSGZebHNoLDQ/fnpjYV81JiFQMXkoaGEpKFcqRTBOPH5fKX0xTVJlSiwxIitreF9mdX5nLC5GQ2FIV0toIntDUSx0MUwwbF5PX1dGRkJ5O2t0eWhVa2M9WD0vPkZFcnVoLjw7RSE6aiVBeih+K1QwZnx+JX5R''@;'; put 'put ''Y1RYLz5pVDwyeyw8KFdILjRpVyFHcD5xVCN9QWJEJXszWl1pSF87K3JOMzY+YEB0VnZzMHY5T3AvY0VoeWBZOUNNcHUvfEVoRXNhLHhyeGpxbWRXUEpMI1kiT288O09KPGF7fnEkcTUyQl9baTt1cHExZCpMYGNtIXAyR25DdncvbSZOUjZMKDFJcXxvbn5pZkp8cW5NIUZvOzMiTy4iUj1EZnUi''@;'; put 'put ''W0oifTdVPWAjZjpoQClTRXNdTnE7by9wXjY4YiU6Q0UqXUVCeWpuIz58KnpEWSU+Zi5nWUFUWGoyK30wY2ooMVZ9ejQ3dUJePiFnT11MaX1OK20sPDMyL3o1KkJmI30yVz9fM1phOSU7LjsmY3hAYiFKd1g2WikyMzNpdHoqeDwkTCMiTj1lL0MuLHcwaU82dG1Fa1lAOWhuUylDWTxXeCFROUpQ''@;'; put 'put ''RXBMM09pcUc9V0txZlR0UXg9JSl6SG9jKy41S04hcHNOWktBeHlydjFVR0pVWTRBcHUoNEM+WWg2WlB2LFNgd0Uoc00yMTxNKyFUJnNCUVdmTUxmST9BbCZXfCVsWyM4dTpHVlgye0gxRVZNWk9XQl5rfFE+P1t0Jl1vZFlnZVAjZWFMQy53SmxMYjJPJElUI19vLyEjfGFRLmgidGYyYG5NP1Ez''@;'; put 'put ''KFB5YCZoQXMkcUhjXVY+Z2NVWklfSmw3fU8/KWZ2NSlMSnV3STw3KT8zVUslPHQmWEg3aDRaRH44WzZSbTFEM0FMdj5wVkZBTFJDckJnTz5UdmkzSiVENUxrQzUrUDZ3JEU9TkI0PHUoa09rQ1pNbzRLJUYieTdDUzh7Y2w2Oio/TUc9YWlualowblFqOzZRaHkwOzRWcCE7WTNOKVYzK3Z4LExD''@;'; put 'put ''TVRsfnJ5Z3o9YmBGdmhNIntzaHsmTCw5OSY7cyVMaiZmJnBwR2crJiVVRC5yIzF7emYyO2MmfEFSbGU0K1M3PXZjPENjZmlKWUNmM1ZdQjk1UTxFVVBaLCpVYW9MQygvJVQhcE9xLEpabDIvWnIuWi4pIX02JE1eQEY4RzFAaTEydVMoTChnQWMoTHJWdFM3U3NCZDNxJXBRZXpfQD18P3hgTW4y''@;'; put 'put ''YDFIMz0uY3dWQCguSjhMLDlVWDB7YHo+ZHphcWM5e2oxcUchPUhEMC5eQ19HZGI1fS9tVCwlKFUuJXRPLy9XMjp1QTQ3Nk4qPCwrOUE2bDw4NWslczxKLDsjUnpmaSowLkQ7W1ElQTZ0X1hAWUsxdm5mRWEpZHpqVSNqLENhKWR4ZnBQR140dXdJWTI2ZTYmcUB6SFNSZUk4ejlsKykmQG0hUSV6''@;'; put 'put ''dnEsNEguPyttW0xiQHdwRk08RkVsPjBhZTZjZywsSCYlfU1tSj5yNllJZjs/WSFZTUBtIWxBfTZtWzRUYl9WRlN3ISs4dlheZldaUS53Y0pqXUN3OGkhUlJrb3hnTUdzZ04xKEBpIVlNfSQ/YllESzNkWSRPaXRHIXhHKD0pVE5DfnRTemxmOXFvWnx3Rk5ZaVtofEsrTlpFKUBzVkdOQX15Lnxb''@;'; put 'put ''I3E3KFNVYSJOVk1DfHRCdSo0eFVXcjpwYCIsMUo3KlVUWSVsIVo+UnJsb1VRJmJGJExYMl8iJDptXXleW01tSnVaezVoNDAxcG9dY1R0R3htTSN4SUh7MG8qJEt6WXRlJHVrN11GPGpSbVBtayohfTF9VylkKXxLUEtAeV1NcElWWDFmS2NoU1dyPGVeMX5lZEIpMDhHTXQyUlREP01iMmJFRGIw''@;'; put 'put ''U0J1PWc0QC4jd3B+TGpOe0J3cDNSQyQiKEBnYi48TSFWQ14zQjlXKUhxaz1ZISY+JDthanQiMWhgI3J4emdSIyg8Y2NpWSpOb1pFd1ltZzRYZ093bWY0M0ZMWDsrWnI5QCxqIkppMUIqSFFeVVYxaS48UTxRdX1wM0JZZ2x9ImsiRlJlWl9YTyFCQCJyRC92ST02OkxpZWBnME5VUUwsUWo5QFZO''@;'; put 'put ''cmAudks8eFh8VDtAJlZWXWU/XmpKZnNyfVIzSzIwU09yWUhmK2p9RiVmJUYkYF5pSVg3dUJpc31WM3FaITh9RGZDQU0mKiI7JUtsPz1pJCpAYEF5OiJwSXkiQURXM3A4bmVKR0cwVGJSTzQrMSMrR3kyaWZLO1IxPkRVL2RZZ1ZFU31wQCxlYU0oOCZMbihpSmRSJjdWTG4pPzpmcVZ+blVZenB6''@;'; put 'put ''MXQ8dnw+a3MvXmsoME9MPj9mJHlWeiFCZVM+STpzeUhKQVk3XyU9azJAUGlQPm4zPSU4QC5uJCx8RGt5W0JQMls/TVUpQTY9X1syK0hAc2Z6T2RMYExDM0xNYWlVNTlGS1IxfnE1QjdMfX0/TTE1SmFxTW5dV0ReW2I2eEltdWVPM1pUaXZzKXdbWVpoTFs/czxAW2xnQmV8Wz49dkQ1RD5eemBU''@;'; put 'put ''OkNSL35XLFdYLlNVIzkmZFVhcDk+SDRqaXheJGdwM0goWT98ZVt0ZmpeWDFnOywjWl45VnhiJWIjTiVtKzJwOW5gPUZUaCwlKTIlYjsseGksUUZLalpyT2ptSkRQc11nV2ZLJXEuMVs+TSRJXXEyQ00lIj9xSyMqKmhuVXJUNnhNcFNXNyswc3V9dGs8UyFVNkRSIzExYn5qV09kQ0tFNChWdjI2''@;'; put 'put ''c0ViWGtEPE1XNF42KVMxXkZ2cm55Vl1SOkNVM1NEL1VwSm5jeEo2R1JXLDNtdCZWUGV9UnZqfHJALGpOaz9sVXNIU056W3tWc2dyW1suLEQ5RDpQX1NzeDM7eC9IOjFLWCR9Vn0sZytbLmBNcEJNJUg5XTlgOikpJW5LKDt5cCYlJGIxXj43P3JfOzwyQExmM0l5RCVCJiMjK15xUmkkP0RKeUB4''@;'; put 'put ''Q3UuLDBzTjQkSnNFLkZ3XSZ8YWxtU00hNHx1T0FaZHE4MCYufEBqMktLSVlNLCF8fVJhbj52SGVNI2lIZGo/YHExOmo+dS80V2NwWkwpW2p2TFpGZGxoZTVCWUc3cnBGdjB2fG1MdUxfNXJQKTN5L294OEQpdHsyU0M6TlMye0cqY1MvfXlbT11RI3Z2fDwpJktkPytsPU9DZUZYMHp6TV9EJSpy''@;'; put 'put ''SXs1P04hRFpgdVcwRVVFT2MxQkBYSWtkRSxydUttT3coVlJnKz1DVnQ1O2lGfXwsO2ZDZlB6IihBa0NLQ1V8PU5EVmpLTEM8MU4rOEJ9THJKXz9hZU18cHdjTi8wSkdtdylXZEB+NF1oeWpKMUdjYTNxak5+JWpGSnU0TU5TclEjQHJQM2IxNSw9RSoqfn0pb3xYY1hzcz9kQipFcG5VNVFCckNk''@;'; put 'put ''YXdoSzM2Ml4wZCZeImtGIWkqV296REZsRV5+WEoiQExUMFgzRldzKVlpbStqKFE2TiFXX101TiFdJDJ6eSlPQG8hZzFBVWUsXT9LaThjcDR+RDNLS3dYMTxiSXtdJUcmYSwuSkBXaks2KTdqPSRYJHk+KiNqOGZRYmVwJjZePEQ4b10vTT9hMDAlMFoiQmheJVVxI111UnlHV34oT3pLQjJYZyhm''@;'; put 'put ''cThrQ0A8YnxraGIuVCE9cUFuTkYmcyp2S1M4Qkc2aClqVlFnWHZwVTo0d3tQOnlhKjVGWyhdRCxJREdyaF8oM0lAJUFXIXBhVj41cStiYjczdHo0OWpRXjI1PS9oQlt9MXV7S2JgckcsOnlmcl82VDY/O0tqR144V3dBVEA6MCpXVmgoLlhRImBXLyVrTGAuY2czei9Xem0jRE11ZHJESCpGfVta''@;'; put 'put ''cCVWZjEwOltrLGJAX3NVQjErTWZdUEEvbVl9QCQuIlhFUD1SSkJXeGI6VzJ2WzZjTk1hQVYqV3lYUmUre3w5MUEqTkdCc2Z4JHsvJVhSKTl8Til6VjkwTSpHcjpVQGEyInk4TEMjKnRbVjQrLFowdXdFeD0zM09vZ1N9TmpNYn0vTkJ7I04zQSk7TUNxO0I2KV8+RklJOV9FTVZDQnVUaj5lQUFj''@;'; put 'put ''QiNsSXVSMGVxXVtnSktfPXhbeGZMeFRXazB1W3h2THhUT1lAeT05dXh8QnpNPWJPOlYqL1A1e2tFTjJNI3x8WVUvKWBhUXhGOjkkcysvKnZ7YzEjc1lEZzduKmk9RTNdP3BaWzoyXkJpbHlZSl9DTGl2Qz1wTz5BJnI8fWYhWCNbZ1NJYiFjIko7KDIrMWlKbTtRajMlVnZUIjJsO1d4aSJAKDc1''@;'; put 'put ''RHk2b0VTbnhuNWI/fDIuSHE9bzt8Tlh6P3wlUjxTcUp0JDojN3dfMm9QU0pMeFglVHopK2FDM0IsbkxodSszK2N3b2dpSTtNcnNje3pDYkZqSlFgVzJVVyEwdUdRUEgydU9XaGt3RGJeYl1HSDI+T31iWWtqVk1mdy4veCUqKlIhSElNIXw7RDxHWy9Uak4kP1kmNyZTa3szI1JlSE16TGBnUiZX''@;'; put 'put ''OEhCYDhlTyo4L0R5OUAhazhgVGROQW9WWipsRTtsdnJNYjI+cjAxUy9uU3trcUApMzAxT3xQWmhxM3hKQmRmcTt7PGNbZSZXZ0M3UDU+REZZTkZuW1lIYjFoUH10UUVReDJpfFR0ZiE7fHFUOmR6c0teMSV3X0M0THF1KklHcj1LSmgoPT0kJDxVMVVARnZjLCZrJn1mITdrVSZRJjR7cUd8LzN8''@;'; put 'put ''OWh4U3pOcjolSWIhciMjSTQ3KngqUkZnaDV5WXReNnt8SD5GcmhBMExeVX16Xj15TUBYVyNrU3pHNk9LfWVQKj10O3JhWjRLJl9BMC5qLy9bKllkK0JMT0YlWEdtUiMqYEpGenFoTDBlP0gxZT9BQDVJRTNpKj5aY3l3LkRUYiZzUHF3W3hpWEhXOzNMXk08e1h2TlBOVUJDYnohZURIMnBOMSRZ''@;'; put 'put ''amFwdmdYMkg7M0hSWSR1dktaUHRTOiVDdTwxOzBXQl8md3FNb3tRKWZ5Lkt1PFN1dFVlZmVOWjYsVzB6SFJLdzhQUE93aWQuKFEmbSJHezl4LENLOyVjMzdjUG1KaExAdXxpI3s3I18lfTwlezxJOll1WjAvSjI+PGdjKVopUHp7PjYiLDleRjlVXjQsLiUmMEZqLzohYyNoXyRINjMwU3ohYmJp''@;'; put 'put ''QmxpLl5CSXo/VUJfKzRLMDx2JXYrVnhCRH1zfFRJI0Y8NCo3VWNMWXJOKjxhKHdCdHE4fClHUTtDe0A3QixrV35BRmldRTJ4aU8qUy9WZmxieUBwfng2eVldOEZnQTEzYl9CJSVae0VyblF6RF5nUE1QNTRsPXVPPypMP2h2Mj53QChjSnclPC54QjpjbXAjW0NIZVVfKDVFfGhHYylnNFV1aHJ+''@;'; put 'put ''LkRLOVFrdWdyUCtPdyo2fmA9W1IpKUtlM15hdmM2XXQpSClhanBnSmV9TGRoekF4PDhfdn1EYW1+M1hCVyx1TCppOmlZPilJPGYhVElXTlt3PCZxNlkwJF0rZmdZfnJCNyEuRDs6KTJNQU87fntTcHVQTD47QiZiREgqUTYqIX5nSnF1XkFLOkUpbGVQejxyIjI4QjJeLkM9e3U1PW9wTTlBOXRR''@;'; put 'put ''Lj1DWlo5X1ZZajcxRV5EUS5OZExnPENsZFgzTEg8M1FjTmxVPXVWWnJHcVFVTlJ3a2ovUD42KXAjYiI5SGwkbnNBMX0pV2ROSzAoWn4+IW9kWCFSajtaRU1icXlnKldpRzJqRCRpeC9NV2RHUl9zMUpmQT1+NFgjRX1XYyVtOWhTPndxTTlzYiUuPCwhPl4saTt+MktLdG9DRyshW085ZSJjfmI/''@;'; put 'put ''JiMwb29DIU5vVjFqTkpTJExyOz1bJihqfltEL0x8VnVSYGZzKVVKZEUyITwoKTpQZi45T0hNKmFpaktlZlVmVEZuMF06UGpaYXBscWloeHBRI2VzKUh3WEgsT3dFYF0+MD9nN0IvIkI0QiNYKT51ayZFJX4mbjV7TXcmYCFEcjQrQyZUYkImUHdaXXxqSC85LFM3MnxlZlkmTHhYRStZIUU9MmA8''@;'; put 'put ''Sl9PMSIvfVZOeUd5cENQV2Q2MWpPLFkuN3Y+JmQ2ciovfk41fVdtUV1aITg2bGA7WT9hPzVuPC56T3YqLltXOW8zYVZfYkJlZkojTyhddjF7cl9gXyQvI0olZHhdOnw5Ujh6N1MvclZET0s4RV5OUnw4YShSbEwwaGZhZGZhI1JGI2wkMUlWJHNZR2cmRTVfeHRhejwxR0JJQnlYLitQZFohOHZh''@;'; put 'put ''T3t1X0J3Yl5xXVFqSHdwOW1gMnVlTHBrXldOUm9BKz4oMT9QJDxGMXN8eWFqayEkIWtyUGFwbXd5elJEWE9YfmtYVCxwITBkUF9mJklofC5wNywqbktKdkZZUUNRVkZMfEBYMHUiMTx4VXYxdT8rd2J6YEUyWFQpQyNgTzdQc3JsYWtqMypbLG1ROjBwJCpNK1sqdDMrLl9bRGJTRXEmQXdxYyla''@;'; put 'put ''QkBqL3gwLmUyPV0wfFN9Yz8pMj5kVDwsdWk4ez4kNFtmblM4KSZMPEJ3UFsxP2M4QXdyL25NIUxQfnw5a2JjRXYiaEZHVkZ9ODklZ0cvITs0eTs3cSUlOHlaek5pa2xZc1M2TmE7SEJfRyM1JENlc0xANkBVN31PL2NXS0FPQ3dlfCxjQDNuLjwsISUuJX5hXmo1VXw8Z3F5XiNYYjMlL3pLK3t1''@;'; put 'put ''aDppPisqQyY+VSE6VFFWQSlOTHR1Y3F6Zmp9IS9ZdV9yej45VVhUaFAjYjFGe3dYZkQ8T0BVKDIwJENqXj8mdEs/aSNIZWBlYGUrQUpqMzhjaChleHw6WHJQamNfQThdSz9HQjIiSyQmY0VuOkkqJm45eiN1O143KXlPZkNWeWxST1orKkVNJnskeDZlSX0yPk1DJStQS3MpMVpURFl4KCNuRUJP''@;'; put 'put ''QT9SU0RZWlZsRWl8U3dwYzVCYUc3cmhOP1hgcmdMcUxpdXA/dl1aZW9ETiNSTyZYYTw8amtqRFAiK293R2QmJD5DaCJrTkZCKkdhRCEvN2Q5TEV+W1s0WWZWYzJheXVDYlIqSmxFMEJpIjApaykyKE9CR3VESEdvbWBaYG5OKF58KHxObWdyVigoNjwmTyhvSzFkUmZqejheTmNpNV9oNXh2WUA7''@;'; put 'put ''S1U2emIhdlFWPUV0QklPSDUsLn4+UD58R0xNYW5NSH5DRVBHZHFoRFVeKEZZNEsmXz5DZXFHImxCMEN4P3BMI3Z2SHcwR3piIS55YnlXIVs3PkNDeiZGdE1heXg3azo+fXx4XTYxel9xZSU1UVJGN11tbmdsRnNjVTQpTnpEKzl1eCsyMyFxPk9PUlNvNyhOVHxidU0vSkVxIV85bzpZdUA9MEA9''@;'; put 'put ''U2RQVlYxRktYPG4sY2ApIzxicnhQWEx7Ql5hMywqQEQ6NzBfOWA1QkBXUFZqVF1CMXlXdjJMa0BXbUY6bkVTZDRYNyFsbGxPbH5lVjRpZDs5PnZ5WDwyQG91Zy5lRmc3bixyLiwrWmAmNDhtRjohUGVwSEopNjR3dHhdI09vQFsmSy4kM0VafXdUKEo5MiozTUE+NmBwVSt4Rnk8SS9gTCJPXSVE''@;'; put 'put ''L3kjQz1eakU4PWo7Kz5JdS5xV30kS0Z5eiJ6bk0sJEtGMHowdnVAc1VgTjZ2U29zNT0mSFRMOlAkRG59QC5yVilXbSxYbEBORWg+cVVPYV54bFJ7X1E/UTBQUy4xfCFdUV9OWixveCxSNypbLDtfYjFTOClAcD1XX2o8LEI0SixBPltzTC5ZeUhdYDxOblhmeTE3YFglWUJjSEwrVkI3OlltYkBk''@;'; put 'put ''LDBbL35xZE42KkBvWWcsMFsvNTI5Q2FXcEBoUTRCbitNXXNsYixWWmZ0UXwvL0V6PkNkX3NsSCg1NXIpcTl2ZiNGSTxkeURhdTR6YUB1O1R7M1h1JSwrODBRZSpwWlZFKnUhbGpTb0x6Tj1OM2hqdExPRDBteERiXixBLjx5NHR2Nj5oKnQ3Sy8yODhLKltfVEg9TmRmQUpJUX15e2t3PlcyJkks''@;'; put 'put ''Tnt3JChUeGdVPGUzJTFOTyRLWHN1S2xTTFt0cFpocktTKTx3cEp3NltPWj0/aDxZZyRoKnhTNXs5eGdzLjt4UnVsWilCeVQkJF5RJUc1TDlRQCZbdXNRI3tZLlhjbUlSKDQuPy8oJTpMMEEmcXBGaChXKyQuVHssVVIjS0dPd2lFMUI/VldDISRsLlBDPCRgaEt1eD5MZ3s4OWNldkxDVXp+RDNG''@;'; put 'put ''UVVtYWAuKzEwXzZ5NVdmKy4+aUtkRmN6bD1NRSVHdjE0S0hDZUgiU3xge2JMSVRrIkpbKWtvTj9+eVs0a2hqP3k/K09rQVVJOTs3SFNAbm93JSVnbTk6Xmo4NipnLF1bQStZamtQfCpPMU1UfGBaYTh5NX4yKUF5IlQjUjxOSTtxcnFwcjJsb0FTb1B8PyZDe0UyOEBKN3EmRmZMTHFEODU9Nn5m''@;'; put 'put ''fm9VTTBqaFoiRFRWTG9LaWxxVzApQXlNVCJZIihobSFuJVs+MzVzVCF2c24mP0t0X18/WGJMSSJTdWdten5UXWhbKk8vaEsvaUtwUnY4MVs8flBpel5GO2k/TE9eQSYjUXF1ZkRfOGlLWFFpO3RSKWpMU0lbKiRGbTsoZD9QRXkoP0RLYD1lbywhYlRfSkV4WDp3TzFNVGIvRkMqeDxgdllqLFV5''@;'; put 'put ''T2R6ckNCWypBXm0oTG59RSNGOyR9Vk9eclhkNmlpUCF1Zlc0fUN2XjBZOyooRn5lMk1+SExGdXovLlYkfHkqLC86SWxDdDdfLDwyIyszcUI/Y2tFaG07ZjtpWD0odnxQS29sUnNkRzV+JW4seDV3WHYlYCYjNjR2a04jPXJ1WndBWVtrfWBjZmZVJDBuZkdzd2UuTjF6SXdlL2BpTFBAcm5NV2hC''@;'; put 'put ''OipfUH0mbFlTKW00RTxndXc7aV9YdExtQnlMT3Q3ZktAdjFtOyJ3ZDEpZWdwK0BRVWc0RCZ6bDlqbCRhUDRLcklMaEdCLk5RaHx1Ly90eXQlQzp5MnsuQjNJcDhwVSpPdjlWOmpFPG1vMiRCb1N9dEZGNzwxKTV1dlJVUzEhLChkXzIiWWxAY0NENnRfTiFmL1lOPyQ5c0FRNWIrY3tIekhpJXJT''@;'; put 'put ''I2opM35xPSNpb3VbNFZ6UlE6NyF8OU16VG49L1coWkRGQzJ6KWV6am4yfiU6dyheV255LF1wW0B+ZjVvJkBGIWRqW0gwNiE9ZT0ofV9wNjJvSnBULFNCVDFJWUxubSUxTCFyZipqVyw8Rz4kOyV9VGIsXklXMXQsZ3A0V2Q5UnltTUJ2ZGoiJHQkaz1qYHpvODt5Ly5rN2Vldmc6UUZhMmwvJSQ1''@;'; put 'put ''azBtTVI9ZUIwWXZtOyUpV20pVSxVfCxHbTAjNkpmL0RqaVQyQih9R1oocCV7fD0pUi5HUnZUO3VnXjxDWmVWSHkyJFhTYTtDRkY4L3I8aldDZlpaLEo1K3pkSTNXdk9fMS5obGxPKkZ8NjtlJCFPbFJ8YkE2TDY7PEpYYDF6Mm1gUGJxanRSXyUoT2I8TTQhJj8kInAyRT0vNFM0JkM0JXR4cWk5''@;'; put 'put ''WFlNYWxjOil9NnBPaXokVj0zUj4rKTBPTHI5VjQkT2JTd10oUndKWn4lZnQ/K1B6SipGb1NAUV49OzgiYzYoMTsscn57IWY7S2M4UkRwZGZ6Vy9MZ3phMW9+VEBgM1cmVkp5ZHp9P3pKTVMqP09pUDxaKiQmRD9PPTFhZXttOCpSKmF9ZFtaejhtOHBMc2oqS1BbaHErOF1eajshaUFjVChxUmU1''@;'; put 'put ''KUUpRTVXbF9CTndYbHsjVkllNDw5NzU7UTkhaCUxeWM5JWA8M000NSorIWA6RjpgV0dXMHI3cDF+VDoyal4wcTMjK0huV3pDfTI2S31BNzZEc25JZUFjNWJnbzJkNiFbT1Q0emU0ZzQ1L1lQdzB1M0l9eEIrKzBAVXc1dTtPanpPPF9VOT90Xj1GO2k4SWU5VjtRTCRLOnRVIzdSLzE3Pz1wbyN9''@;'; put 'put ''I11lMkJNOmI1My48bkNecF5+YWE1fHo7Jl84JSNQLGQhPE1WcCRXO2RZU1FeQyJha2lBXTglfjVbfF1oLkNDIzBbbDwpZUJjfWQ0YUJdM1U8UW9+KVUycDV8JF9xOW5Ifi8oJVY+XVpOe196UzV1MyE5ZDZqQD5nOlg/T1M0Rl09VmtLUnZsZztCIyY8JSRQTiFSKVQjQiZxdD1EW3s2YmB7ZnJz''@;'; put 'put ''VjhGUW4uKUR2TEtFRnNgeyVVXkdlJCJLZD9oRkY+cGUiYl5JZWYsJUx8OzdOSWVyYiN7YSkmcUV+bFk8SzVwKTgmOzpBUnYoWSNLIVklSH54cUU+WTlWbDQxN0pEJU1OVTopbFJJZUZ0Z0RrN3N8L2hmWD4veFgpW3NsVyNGe3dKcCxbcTNDNzQucClncHpxTWdFWHcifFdnVDBbW2Zoajdnb2km''@;'; put 'put ''NiooR0YuVCE2RG9FdXZKPjNGRW1CbWs7eFh7Z3RIVHdgeWdYMl4lRCR7Lzcpbn5tVUFZNkImX1s0TWZoaXl6YTshNkRBJDhJLC99ZCpSZSwwLCIhMy9QXyNSTkVUMSojOGNKanJvNihDS2hXNFE5bC9DRU56byJseU1DTVlkWlI7LEZCX0deaixiQ3pXencsdyRRaHwyVklORHFLT1JZRVhTaF4o''@;'; put 'put ''XV95cD10ckJZI2M2Nzg5K24iXmQ5OXEkKypIUD1XMW1wIl93QGg4U1c8bz0vJWRSeSQ8JXtHZi4pJkxpIllNan1xVztXfnIsWzwya1A7L15RQ3M7V2hePi9nQHNgWktgPFM/TW1gPC88MixMZzJtRDVWakFCOllyJClSSTxoOCtOY0B+fHdzP0UvQGQuc2pvMzB7XUt0XmVvKFovOWhfP00hblRq''@;'; put 'put ''On5edUpvJVc5QiJDXS9wTFs/VXpYRXRCJm42NCNyc2smQyIrMXEsXz9XLiozUzBxLF86YVhHRyxiIWU+IklIbjQ9WlByI21eLztqI21edltiISprOmZpfndvYUV8dUg9KWw9Lylab01wJWBuQmEpKzxzV35ROFR2Sl1rdXZ6YHF0PS95YkBXPnwlejtKU0JDajhmclhiNlJjZ2QoKnpmfEhHNV44''@;'; put 'put ''L0o/eUJYSDAvVWw5ODJKPDZJaXFoe1J1Rkc0NXpxcD5PajJ8ckQkNzIhK0g8KishP2YzQmshXkFUeEloO15MOVNOQHY4PnBGbVI2cnBickNWQlcsalZdRTZscThgV05QRUNjZGhAPXJeR2hPIXYwRTpGe1Iybj1gKV1PN1E+SyJ9MlgseypFYE91W1ZGJiw5bmpQW2Z0UVBXalB2WjA2azFCen4r''@;'; put 'put ''TGQ2WyZEN0BjS09dcUxFR3Y6WGA9Rnw5eXFqK3dIW3B5K15lYFtUJEtXcyRjLDhSTkVPc3F5I1BAekNaTnttTjZGQUgqKkczeCtjbDZmWWdHSkp6PDFdTnhpfkQmaiZNQm07P0QzKEBsYkNgIS9yIXs/VGZIU25LJmNTY0xgT3ZHPGkvcFg/cjFpc2Z1WytxfHpmWVdJZl4mVFRPQUBTMko3JjlL''@;'; put 'put ''TDlmLGRyK2ZWO1NYYjhbOVNeQXY+YExpcXkoNyteYVBGKSJQPGBYc2BBRW1fcXlEUE5pWTNIXktwRmJXVWskS2c9cmpMIlNKYWhROWxQIV5vM3BGKj8oP1ZHRWBDfVI8NWklUTg9Py5ILkpbaENaNDxyMDNWOURNeio2YUtxfUVRUDhYZXJ3K3g0OlBiJCFaOWZeU0NeRGI8cEFaPHErfmUwK1Zd''@;'; put 'put ''aUNYLDhxLjUheSZGI3Q+X2FWSlgyby9WQlp3RTJLfE5OQ15LPiYxIk9hIWNvTWxsemVUWW4xI2l3aXJvWWpfRSlJZD8zZUtZa145aU5+RCw0flF2b1psUiYuJnQ9cEBFKEpRIW5+Y2tHZUNzaFtedlo9MyxnYiRSWnNbKmhYflZGLCRkaG89RlB6PG58UUxDMXlSPl9nbT8pYk8mMltfM3tFYF01''@;'; put 'put ''Xz8qQyt8VlVAMjZ2MzJKJkNnclRGPnwiS1tqciRbUSxMNytyeW50c2JnanNIPWgqc0pFWkhIdzhUPmpKIW0rVFQ4QFZpaHUqQSswU1dVTkY7PCxfTVosd2htUlI3TGZSSHZ7Wm1VbTwvfDl7dDg7XyFqMzA8SnV6SWIoNT1JdTp+aTtqZDAwR2R7ZDF2NHNiY2BpW1A3Nip3S01qa0d3JTN9dHRK''@;'; put 'put ''eTM9W19xczdXQ3hZe10sIXEwM0siWlZrZHoiajtpISYicUxAeV4xRkU5dkhiWGp+c3V7YXNJSEYxMXxOKVtnLGQhXTN1VjJafShpc24xQEFpd2pGOzE6OypMeiNxejppVCM/bGlwWHo3Xj1oS0hfWGVEIl9AUkx6bWUpJlRhKTp+WWU4LnFKW3thYlY0VmBDPGhGVX4jQDVpWD1mTU5WRD9nc1Y0''@;'; put 'put ''MF9geitfXUYjNTVfYFlQZD5xLFBxMS45MEpZclZWPWpWQUciR3VAQmIhOHlsdGwhbCpEe2tkSCwmJiVOKkkyaEU/MEQrYWtFeENfN31kfSpRdXY6JXhwZjp5YXtMTyM7VVd3WzxSPkg0Uj5JJjcvNHRlV0YuIiZIJn1dZCRyczgqIjhdN2dwWVgiOzV2Sk5DI357Z1ssTSt2ZXdwaUw1bCFPLFsw''@;'; put 'put ''QFsuU2FndCVLaHtgPXJVKC4hInJVKGEiXVsjfHdQV1tqb08qfkBaby99THg4MS5ORTJ4KUAwUk8uZjReZHoqN1YyciZJL2xbfSU8NSN3SHtpYCFyUThQdGxAbWZIfFRQKldMYnZNNE1MYlhfOV1zXUtXQVdAak5IUHI7UlF1dXFMSyE5O0AlTnAsPXUvZSwyPV0kIlUjQ2hvQ1NgbHpaRnsoY2Ez''@;'; put 'put ''VU51eVQhO3lKSG15P3UvWTJlVVZ6Wk1WPl4vcStdVFl4MngkeyQ0WkZZYHxocD5Ual5PZVNWWCx1UWcmUylVWk1WWE1BTWUxP3syRTRBSEphMzIpS3A7KTE9VmRoRmlmMHVAPGthIWVObVIqXn1jQEwjUjs9QGMrSDUofHkmWHExInJ7TWJTQiQjV34+VUJtbCxXTH01TXhOTltiU3pLNWtfaXVI''@;'; put 'put ''WyokKjVLSTc2WE03UHN7bVE+WG5qM0JESCI7V1khX0Z4d2pBVkZleEpZaHVdTGheVjhXXzMrUXxeMkRQOmRUeDtXJXk7LHN3WlY9OWRlczNeYWM0PyxTej4laCJkP1F+ayYsbjhYa31ZbmE2PT1hWmFFfFghNnFwRyIuTCtVU00xaXgxc2BEP2JEN0JOOCZHIlZzP0lBR2pVOjFHIzI9O1JBTSsw''@;'; put 'put ''fjVxSERpdSZpZCNKIkYxL248OjghK1Ewc3dnRj1Udi8oflZtUy9FRVg9N3s3dUo3c3x5NyFvMGBiIX1YTy9fIVJvTUV8SyNPRlc1OSgwcWRLb1lYVithQXhoYyYiXXFlTnxrcWdjUyVFZURNIVMjeVg1KW5WLnpIUFZdZiF0Nm9CPDBXR0FgT3UsdVVyNGF8MD0wWyVAWlttMHVMMHFrTiEoKStz''@;'; put 'put ''Xzs1RSwwOlZuJjZjYSZUSCtKc1FZYyhmNTtjP29xflohenx4eHsiZUokQl1BMFhjSGwsVzxbMXdGNlcyaGI2aTlMcHcrKHVjcDckVXhnUWBSLiM4a2luOSZ6YEhZVj5wMExNRXAlIzVodGtVU3RpS1IvJGtPdVg6d2ExTyIkIThbRW1xIldGMDFDM1NzNDUycUVveEAjdDt9bTdoKTNLOGVhKXtO''@;'; put 'put ''WEopQCxibHoycUVBeDYzb29lYXNlXi9ickEjc3hxRTAqIU09KTRRPV17bWI4NSlTaWVyWlZ2eGBOaCFXVGBJTj1uWTpmPV1KfDNYSztXPUAla01zenNlPDpNfmJQWVR1WktyZjVMYnxdPnRpJDtYbXN2TWIsMUxZKV5tPTM9dGFpfiR2fWV9KDtOKFl5KywsI259LkhuPWJGb0EzezwkM0tbdC5Y''@;'; put 'put ''WiUjKzVHTiEsZl5MNUU8Ym8hPlMyJTUpKy5iP3ZTRUk5V2tIY1BZVCR4NCM5O3xrL0htTlgyempbWzghUzhvcTNEOjVIR3laPlo1N1VITWlrclhdNSZqeXFsRWwoUE0rUWdeTFFQaVtRZyEiMSxXMk5sazgxMU1yV0lEeCk1TzZkZ3FFSztiRnwoTVdYZ3YkcV5ebFAremd3VjlyPTxUd25HL01f''@;'; put 'put ''NjBQfUw+L1hVc0NbLk13LF83ZzJELCxbRFZTWkpQSHMqIn13UHlEfXt4d0tNNlg7SVd3e1B5Tm91WGpiMlpGSypJVWthMks3eUVVZTwmWyUmY0pRbiNoKntxOEhmeFNJVDNsXWpafTo1U2BOUjo1UklnYV1qKEt3UFcse0VMQnZpJlddK1VZe019MUZ6KStkYWlqSygqRyFCWUAzPyZZcTo2cU1T''@;'; put 'put ''Ul1+P1hmRElLTWpmYHFIIVI3a301K0VpUnp6L2g+IzhhKlZpKDg2bD9dOjNBY2JpPmsyVG9mSE8oUHJkeEleRWc0W3VLLnRjYyhiamplPVtOLltFeThMN1NPXnlQbntScUdFSkYlMltuNzBVNCFSUDprTGJ9fV4vUi8xUDJaJVdKYSNCdnhAdmttbyVgNGpmfWlUbVkmYnw+Izl7VjBEZXhmQlNf''@;'; put 'put ''fkJJIzJ3SlQ5KkxMQ2gwTURtYHxPeHZxTUlDKlo9Y11hR3ZaL35xZzt6UkQhdHlablAzS0tMOTRIOXNzZiN2ZChQVVJKNj03Zk9NRjdlUF9gKEtvJVdsbUs7bC5rZEMwMXEqO0w8MDZdSyJqRG1KX21BWWdDVDIieVV6WEc8UyFxMDZmTDxTX3gkRSxNI0hXbDRQZzQyK1dSUlE9S2x3YEs6dWo8''@;'; put 'put ''WlRLJGhXb2pKRkduSkJUbEhuRGEiXWQ9UTpaZldtN3N0Kl5uRzl0InBMOExofjlMZSpfW0AkJCk5PzZhKkQkcDIufFZsUHY7Y2UlJEd9WGwwSkVrRyEhdjUpeitkbTh1LkxhRHtSTnVWZl0/SDMmZE4sdjcqUCRHWXAwO1lEVnZWdFdWSkouTVFbN0hZYjs1Mio8MTh4YC8mVW9DbEc0QkRNLnJA''@;'; put 'put ''RTppJCFkOHQvIyl4Kzo/aEA2TS9GXzVAdCJufEsjV2g9O0N9KX4wfipSTVMiTF06dlIwcEdwQElSPENPWih6dy47UDszZ3RZQGVufSFbUDFMKE5VXzdMZ2lOYTdQO0N6V0FPSFQyQ1d+NkwhWE9UL1o7Rm9YYFkzTl92YFcqNCMhKihTaj5lWlFEZm9RUXU8UXkwNXVMfD4+TlY1WCIpRyFEbzle''@;'; put 'put ''ZHN0SVMyWjU5I3s8YHVpRWc3XSpFbFo5Uik2Ykxxc1siIzoyaWY6LmpmS2hROj0vTGZxaWFWQGNiRmApK19zYnJ2alIyZDxYOjp+V3Mrcyl6K3lnPTBMQEcjSyksQkVOeytyWSorW35MLGBOMCN2SVZFTyY6c0EwQD1Veyk5KD1OWTxbR15hIjxoSW5XZWJLaVlvQ0UuYDxMUGYlYCZNMlFJdElj''@;'; put 'put ''SyFVSXZfNFE4KlFxSSR6Z3hKaVBTWSU8eDlWeGJmbGZlZyUyUFQ9QX18fGlrbTMvWiI7KVI6ZD8lY0BJTWgvflZ1d0BFS3c6aDJnL3c5UGQ2YyFJZmVlMCtQYnpXRFo4MzdqbEV0KUdVeXcleDBjaVlaYWVvNS5lOFBQM1RiLD8hTSYid1prWmcmZ1MrR3pDSkBEWj1QbzRaciV8L3N5JjBNTkIp''@;'; put 'put ''S1h4dX5CRztjYUpWczpNRiVfWGtmZnxGQHM3ejQpanJmXSI0OC91QG8lRFV0ak94Y1dMWlU2X2NnPjllMFE9Mz05JEtOfjZlaWA0T0lJaG9EVzpaQGR8eEM/S28zRTlYJjhNUE8oXigiYWo5Yl9QMEF7ITEiR0hjcU8kJX41OVYufExaek05aSxTXk59MnB7cTE5ZSFAMk9aQWAqdzVXSEk9NGF3''@;'; put 'put ''QkM1Kyt5JFM9ZkAwcWdJejxibHFldjp1PlcpQ3Bfe3hCfS4pJT1uJmB4KEVebmNvLG18QFtVXT5LM1J+ITVWZHZ0I3tUWCU+NWZZWSpWbjE+dHpBZU4iRldHM1pBKiNVQWRCUjlAI084MWBtXmYlY2gzTTZYWllwdjV4MHFNYE97Tz4scnJrcSY0eDYuYXMpIzlLbjVbXlllJTx+MiJhOWFCN2p9''@;'; put 'put ''MV57PXFaJCtPaz1rODxDJkFoaz90bSMhUnAuOURxdFc0NUlVSz9hPFNwXz9YYG11dnVeKnNKX3ArJSJPYDtuezF9NXNFJVh9Ryt5WDtzVF5TMndQJlNkY3E0RCxyT150e05RaGdDfS9CV1ZBRTF6aj9lV1Y0PGVAaV1WUFZicGp0cl5OPVdFSD01NHdjXlleSkliRkhZUG9oNXJlKDRzenoye3Vn''@;'; put 'put ''eFNmOHxfeXZfJDFQOik/ITg3bVcjVDM2XnJKTm8+SUowWjd3LlE4P3EvQGhvNCpAMGZvKVU2PXBpaywiM2NoKm5BR146ZVkqe3pVKnEiPHElSTJVI0MjR3NJMkBSZ2lQU1RnX2soVW9HLnwvUVcqSi9sNXJ9fjp4OCNbI3w4Ynl2SzxwQT59bSx0aXYhJmpYLFQ5Yz9OZmdvL35PIkljaTRbNmZt''@;'; put 'put ''ZTZMQEVweWU0ezh4Xypub1JnTnRHYGBQfXk1TDBfNV1EeVJ9O3NwSntEdFciSj9RLyZjUCNqXSpEQFg/XkA/U3BmQ2A+SHZuImtJTzEsMCwjeCFqaiQqKV0hPzlxeUE9a292WCxHenZoLkxiKXhjNUtVQSUzVHRTLyl9fV57cHtbXnh5RWE+fUowWWtXciouXihXfTAvZ2pHSkwwKnEqXiN0Ymc2''@;'; put 'put ''YzFuaCZGWlA7SyhQQip8OlF2SFlRMl45aVR+LGc9SFd2ck8pKnd6dVNZaTRjYlBASXksRE9GUFI+bz1NNSkrSzRwfWpTVDE6Z0pJbT9uUE9kMmghJn1QVDFtRUtHSXp2JWlSaSpSb0Q3YXUqM2FJI3ZpO3d+YW0qSkMrVXh6UGZoKX00ZVV4YitIXlJCeFlqOzlEMDVrPTxTT0Uqe0JpdD5HRjUq''@;'; put 'put ''NzdUSDZ1N0oseyozREh+VE8kYSpdeXA+Ly9odnZ8XzRTLF4zT0N8eTsuTlkpYTgveSk2KEZVRGgvKm9RQjcuZkFFQ2BsWEZDLkxAVkN9bDk5P05vPTlKIW4hWnxHVVEycG9uXmA4cUkyfFlRQU9SaVkqcThBLFQ9aXJ7KVphZ2Yrb2BDRjB8R2JUUWNxWUVJQUguSEFIUXY+M0tDd156aV1HbjJC''@;'; put 'put ''IkZyLGNAPH01YDpXTHJdVmZFXjBpMHdOQllrbWs2VF4uP1Z+STIiLzEyIzZtYiRPPTBtYiRPPTBtYiRPPTBtYiRUT0hbZWFqTENGalcrNXJ7O2kiY15hQXYka017SVlnPm1pflZncn10QixlTGQ/KSNoPWNQNTlWeFJYdWo4aWNQQU9CYkpdOltSQl86bG4mZnJnRX4+N1c5Ri5FJUNfUiFqKHlY''@;'; put 'put ''a0ltWU1wJTwicnZ+STIidzFyQWVdfW46Pm5IdTRPOmsqIX1bdDRAdDY5ZnI9ZiNeWipWIXNsVW5ybHBJfk8+UlM8PC90T0JULiVZcjQ7UzZpWHBZVTtwOEJdJEVaLEoye1p2NmRSI0hsMlA8RFRZYjVBPUl5KXAmM2Z2OEJqTGtBbUAlTlMsKn1UKk9yekJAeSs/T3UuYGtSYWlDfnBCbFllY1NW''@;'; put 'put ''OyJ+WTA2XVtTY2FyWElbdm0sdk8uWi8sfHk0QHpIYkFKdGdBJX1uVl9VODlwNVgjKiZhVj97PzxbQyguUUlDSGxMMXJoVCp+TCMqJElPPyJ4UikzaF5iRkx9Nkh9WSFhM2VsI1k5UCY1PUZqd35wP0NrenR1XkhEUElCP0ZDJDFtLDU0KUBOR3dyVGkvZHVbeX5XJHZJXnZwYUV2ellSIUtCRzJJ''@;'; put 'put ''dU1sUkp3aGxjUntAT3trVnF1L0Z9JjhZWGljRn07OV1mcm5MImE/Z2xkRzA6JV9jLk9vUCUwKlViPFpReWdebCVpQChlSVhVTnhQYDU5dFFTdytycVlQPEdRbXZ6MmFEKzkoLGhwQnBpKkdHJV1WKjE4X3FqdTdeN1BGY3Y4PVVZJFR1MzdRWjh1JkAqLkJjcSY1bUI2ZWtLcCliQzRvR2F+UmN5''@;'; put 'put ''PXopL3lvcCVhKUJIX1J8IXhqWi5eMzFCLEpfIzkpUnJDIj1DQjVlcnI7aW9LWlVpKih6dERMTDlDLmJoZlROUW5EVyRqMXdUOlNoMm1RTSo4OyM2Rlc1bXJCeVs/X2srR11vIUFkZlJaPShaPFd9fllJbEY7TjsxNzBNbktZOWtsdCVsTEZMMFV5fEhudG1RNyV1Lmg2OisqWGUoPExJQStxSVtD''@;'; put 'put ''ZmdUQytgfGt9cDA+YSYvJStde0Evb1B4e1JaYHh4JSFqXl1gZnFOaF1nViUkQzNbJkBjSXFfPkxGXWQoa2pJS1pVaWB3ckVwZiF3WUFjXkwvK0Zxb1RiTFBSLCxiZjtiWTxqXnZ1ZF1yJVIuSUY3YXB2Knd2IT0sSkd2bmR3fi9EcyVhPkw1dHRAPFRAK3pjT3Mue2lRL0VFW3VwQFtUa21JbWpO''@;'; put 'put ''aG5bRnVWVSlINSNIWkxAR3UlL30sOWd6KSw6b0hiWTtaKyRFcGNQVkpmeGhUcVldLGhVMnpSU2c1YjNSUXhIbk1HLlNqbyl0NV81MElTUj8sPTtGP0xuWXZoUXREayFdNypnZDNqXnVkdHNkMWt1Y3kzMW1gcnFheE8zdHhgS3ZOKXcrLz1obV0zSTxwUmFfJW8jYyojfCJVVXhuMEVGNjcpW2Ep''@;'; put 'put ''U11HZXQ8KVQydy4oZGMuRSZjaTZrbD9wJiU/W1JkamdRTk1JTnpxbk5PUkhqNlAzKVsrQDB8QX5oeDNSU287KU5UKXFOaEJqNG5UTiYlYDpqb1twcUtDNW5yLmRQSE9kY1AlMTYrbTMhcmpPeUBrWl1fQG1MSlVlKyQvTiZVNCNgbT1oW0lPZHN4QVduQyorfXxsTn0hTUkhY3dZNVNlcHBwNHQm''@;'; put 'put ''YD9zb1RvVXRuI3s0UU4xLmJXM1J5PGlgdHp7bFNYPWJKWkp+Ri56UTtofEpfOWpDOjZ6U2h5JG1qVFFtcnl2eSR8ZkBKd1VZaWpnYG80I0Ake3tCWi86UDNpeixzSUl1ZHJrZCQxLmRVI3diZ3tvbm1oVVtpdW9tNmFUYzYrYz0/bjZdN1p5QVdxWywsNXhidHlGT2RoR05ve1EzKE9ybVJUQiZe''@;'; put 'put ''PzdpOE8+ZDA2bjVLLm9ubThOfWFOL0dOVTlpQnhub1BBTzxrNGUhZmheOyZQWXlyZ3J9MTdveD9geEg/STpXfTcqNj5yKWtROUl3NjE3KU07L2B3WkQiJmZaYCo3Snk4YlBCcWRHY2FxNjBPd1o1VV91OFchT3JmR2Uub1IuN2lYQkg3IS9vTE8pbjY3d1VlRHNxd0xBT2QjdmNEQk18eyEmd3Ij''@;'; put 'put ''eTlWM1QiVjpONy4va0xzJTwvR1NmTSEvOE4zZU91V18yY2pYPlhTakQkQWosUz9FIWcwNzVCLm1TUjJeWzF4cGBfMnxwaEouMGBbPXlgcCQ1VGUyTSJWU3hQU1BVaF5FKFk+XnlkMz50PWBhNGMqRnF2XiQwalk9e11RZkZsQm5iLD06NkJwPzhhKmt0PEhTUjMkUUltRk1hTCRQYilKYT1jQiJ3''@;'; put 'put ''WTwoQyNIOCY4d1lyNig2WjpgLyRiNCszOT8mWCxqNVB8fWpsYzY6RW5PbXJ5JSJGZnV1dEQ8M1JCITRpPHtIcHNpVUZ8YCltQmRta28ma3JSfTdiZmtUUSszSl9JOlRbJFM1KkZoLm1NeGVJbFI3dkYiT24iMTE3WDlKLmBWIj9CM3pSR08mOHZKUm5sa1g+eVgpeSRoLGJdMFRqdldYTCQkWjRb''@;'; put 'put ''T1EiMTc2SyhMOURET1BaYkgzUnorcGxSRjo0WXRaRyRsQk40XkM1XTl9fGtRSmxvTGhwV25EXTBORy5CbXgoL1llcXpGJGJaIXZ9fE9HL2JVIW5LXXJsTn0mXy9Lb3YjRHghXlQ0MmZ8cTcrVE9FcURGWiMyMVB6YmxzcElXfDEmQzRiZG1SOUlVZD9HOENEPEoueFd6P1V0T1g2eixVRkouR05N''@;'; put 'put ''Vnh5VkVTekJsUmJ3SkpHaEo6VXA7PHVQNE96VHREJTEvVDUqX3d7aC55PHw8Ok8vaEFKIyUzbGo/cyVPWixIJGVhMCVlPSpVeXxDajEyPzYlYFRHNll4fWdeZTp8Oi8uXyUqOitUfl5rdTk/XURIK3k1Rm9LYDo+SCpVfUJMW1tBM1h6Ijk+Kz1TTFBTdltKPXA+QzhaQSROYURdbk50WHR5PUVn''@;'; put 'put ''ZkB3dC9qZ1AvfCZyWVs6TU1wJVUkdCFBNDBtVz11Rm1mcSVbNTA9RngmQnRKNEZYakJ8aFFsQXR0QTRicDlWQlhmaHFnI0hVS3QudkJmMEo8KTBOWHAxWEJ4aVJkKEFFQXRFYVMmKUd8d3B7dVFQLytFUz5rKl5TanhObWcqWnsxN2EjZWopUlZIdTAoKkFzLzRnUyUhUEJ5dS5fMyssQm9iRTd4''@;'; put 'put ''Q0RZWEIrMXQwNzZHcV5xUlRqW2tCS1RiO1s8L0Y4KFBOdnFYdl5Ee0txO3M5YT43QCUhfChlInwycSM5KW46ZU11fSs9KCF1YzZ9Imh3R3EqeiI8NG9PeUcxTzRuND5xSW52NFljSjptaTB7THE4VTxLMyR+NVteV1RtRSgwbmNNajRzZGM3OykqS15dUER6OF1zM31rQTxlMnJJImg8S2UhemQu''@;'; put 'put ''K3BIZGxmPDc2eEo9KSUmUmwibF1IPnxseFVVOy9HV2BSPiZeYFYlPnxeP0MrPGhIKnRHazAhb3VGeDJzM1djSVQ5dnI2Ym18bjdVLjFXXlN1IzJfcmtzYX1te1IzelI9VTdnaCZnaz1ddWQ3Z2JtUzoxTC48R3ZmZyhId0BCWF9NbU9XJjppPUZfYlZ3ZG41JiovTlRjMTFJdS88ezxdZ3ZpPi8/''@;'; put 'put ''TGkqeiF7YXs+Mzx5KTtnIXxhdkplLnpKJUc3cTddPS43UHwlczl+NTNnM050RGt7dVpkP1ZJaGNrYXVxUllHeWN4ak93NyxIRm59bUp3QkBGI3QmK3U3SDxCRD0xVH5dOFNTUDg7azd9eXtwSHtLTkteN31gQEhZfnJ1N1VpIlVqaUt2e25QNF1lWFg4OCJ9UWY+RWN4PDFqMm18K2NMWXkyQVdr''@;'; put 'put ''ajgxN1N2azhoVSsxY2hiOjZ+Q3VIPXUpaV1fNEh3Oi5zRzEyb2E1U1lIUiN3IntjW0pFaSxpRUpVVllKUFd2QSQ3THxSPTlyTHlYS2AjMyQ5TV1eMl89cEs6UGc+MGd1WjpoWkokcE5eaXUpaiNNdkY/Rk8wXXs0TEhLLl5xd0w+c2o6W25LaVlEVXp7XU1LT30jTjpvIzFLQStDbF5fUFs+bGVi''@;'; put 'put ''X1lrIUElUiElIm19dU58PStqI2JQZCM1MWErTzc7cjVxVixebExBSDU5akV6KHRyRkZdcCFfTW9oW185YWo7YXQxMStxJjtAIkNVSXdMPWRaLz4oXmAyL0E2cnplUnxxZmU5Jn5ScjZiSCRIaDNrOElxfnd9L21eRj0yJFZRQjRaP1pOOVE7UUwzLy5wK2xJREJBNDU8cXtIYXg9Ym0hJnJAdU5S''@;'; put 'put ''NTs8ODNKYSZVJEg5SDlIX0NxcjFsVXwvcFgwfFh1I19aVCl8fSQhL304czxLd2xIWSg/PXoxVFoiLiRoWWBdS1U9QEVlOW5JODU8fW0ke31nLHEpOEJAOyNbKHFzKE89MzdFWns5d3ROQXlpZVV2Wmo1JSkhdHBPd1RtNkluRC9rUU4xUFY5flNON3pkNzt3NFNgVz0iLyglKk0jPTBtL2Vtb2Yr''@;'; put 'put ''YWkxI2RkUUNvejZqQkNKPS5dbjo0dT57UDsvcD1UX3UmI25NZzdRTFtUIVJSYnBvIUw4dT0wOHczNlR2azg8ZXhefWtdSH45RVhVKmBqS0tCNmA0VVc9K2xqOSZeRF5sRTcmamQud0deYCo8XnEmcCEjLG9ZUi93VUxXOSs9MmlYMCtVQTYmdCJwYT05MF9DMz1uT0AxIyZkX3Jib1RCPHo+XSU4''@;'; put 'put ''STckPWEhZ1FhRTJ9WUpuS1czT2tUVnMpT1cual5+QDxUWTpAKFtqQH1FdmA8MV5WRms/fmM/JWMkTz10XiQyfWFuM2dFY2x6PHElUy5uUHBXc1I0cHZOXXxlZnQ6WGJaSntGPTNOJGdGeWIxTjJqc08oSV8yWk8manxyJGlGUDhAMmoqelRaQWglOyh6OigzK3FSUHpVfUpRaG9SNlZ7Il0jSUBD''@;'; put 'put ''RlVeWix3bUpRUyZ9eGRjaTEyJStTS3hzKHVJTyg/PGxVOlkufSU4TzNAd2tCfHhIJG4rRC97aTI/S0o2TTVvITdVdnw9MUJEQ2MoQ0QkSTloO3gofFZ9eipmV3J5cHQ4ajVONXJwTCRTe1ROWHpqOGs4WDlhJG53UEs4aDRzMSkoeiUpZW85TkZeI2JZKHY8UzU3bSw/fWhPZFMhSTw/ci8pSV5m''@;'; put 'put ''Py9OWntBe1JJWF06dVFuUGRJY2EzY2J0PGRZO11Ydj9nYEZdZGcwPm5iOT5PPEs4aCp0Tz1jKjs7dCp0OX5yVDFTJEolLCpSZCRzTFhRRFFDQ11BcDQpPypSZDlsT2RQPGBTKlRFSyI1UUNueiZqV0dFKmAoMV5tbEJgKjx3WyZ5JVooeH40WjlndGBZV2RtYWE5OEJUQG1PdWQ3RUxNRyh6WWow''@;'; put 'put ''cns5UUI3OC9YXSE/bzVMWTRjSSV+TjM3RFA4M3lXKHkwdCo/OldoPHpJJjhDQCVqU1RCe2krNj5yeEc9ekRQOiJ2aFZ+cXhren1hKSJhX0BubSxgeH0uM2t1NSEhX2F8Z3I1bTdueCF4N31PSDo7JihZZz9WSSh0RWVCMjUxZmMyM2ArdGh8a1Rack5xbzxlRC5JaDE2V1tSNUNzMmlUaWooSiNS''@;'; put 'put ''U0NlUHY7Ry5OQnl0Q19TSjxwOjhfRjJpMzlqdEl+bj42Xld7VDRpaV5bbn0hUFY4NShRSTxaS0dpMGZsejZwOzNiS1o/OWQsJX1PI313ano0VSJ8fnVbK1htfixQPStwckokYz5te2gscH13Pm16XnBbe0pQV357QHo0bStQYls+RDV1SW5WT0U8bCZ4QHtRLmwmfjVJZCgxNlp0SkBWZCgyfTtU''@;'; put 'put ''RkQxPzhUYTx+QWpoRD45MGImTzNQZVR0bD1JdkJoRTxgSVNucT8lfCltNEs9KTJ5cyIwPk9PX2I4T3Y9aF5PaCE+X0lwXjUhTmUifCx8TUVqbnhpSCp8WSU2bF45eXB4cHhwfDc7LEsmNCojODV7KjdxJktkWUVBUVVFUzNXa00iOi84Mz1ZMn50Tz1mazBoO1RPUXRlI0JDJCZkaUs9SXZNR3dJ''@;'; put 'put ''c0pXIkgjW31LZm49bGg+IlE0XjQ+NE9jPFQ0RVlNaWY6Iy5JKDNWYjVhSndSS29tRn1DfG0lUiI8RTclMExwRjVFd0J0a3JLWThzZWlIKiZkYWlYdUhCMil2MzE7OU1WeGRwOWo/bVIoZnJkSX5ZbCFCXjZSK2F6UDNdZlpdKHxaTiooVWxEUkI5OEFecHcrP1V8OFFhbj1LSEdIbXYsWS53MmYs''@;'; put 'put ''VWleS05DKnhXfjN8dG9JJCMic0lFdEthIkNCNEBLWmJwam1RVEN9fD5dJCpSOH4kYDEmazt7LFBNYVlDQldeJncpYj91OHIoRy9sdS56S1dNJFM2U3xmOkNDMCspcntlcEAicDslK2kxKmk4aEZ4enJnY2hqVHtdfV1ZaDxLN2IvMlBiWFI1b3JgfilJfHA6a2gwQExzP0kyck1JOVFtP2U5dVtC''@;'; put 'put ''RnVeRDokVSJwXU88JFRFfl1HUykxcVVyaH0pLmFocjFoZ3J9PEd2cVgqdWxJeFladis5OlswVDEkbiwmJXllZihqJjNoO0VlcGYlZ2B8e3Jddj0ieDtefXhdLn18SUVmQU46OnlWXUhaZ2ZwQCw7U2trcE5seDUhdDs/Zj94NUh9fTxiOjpuKXA/KFVLcj9zRmtaMWZzKXJGdFU2IkNdVkYrL0tD''@;'; put 'put ''TmJnQi9vRyEiVWg+dkkxbTojcF0hVjs1SC90YWJoKUJvVyNnVmJLam11ajJ4NEVOKCJAZ2FXYyhNbHloekZKS2F1V0kzOHZwS0RbREZeMGIyUHE7Q30iMyVgRFp0OngzQUxQPzsoIjxAcCFRZCRddSgoe2tJZmEzIiMkVXNmY0xIQnt2eklWL1JpV3Jac0VoM1RaX3JwT2RZci5WZig7fnAzN1I7''@;'; put 'put ''WFJQNykwZDtYOn08P15LKEhBYUlhclI5UEJ5PlhvY255VzRAJUYwMHZ1fTJhfT9tS05DTlA5PlE+PStVdUFjXmYvSTQqRjZ2WSlVdV5NKFU7PSw3LEVWZ254L21wRGMscHttRCYyUU4uLzk1XUliKW1jWCRRQitzeFpDIyF1ST9NPyJrIXZTOmBJRiFsaEJoRlVMT3xic1FfK15ObCNROkxFTmoi''@;'; put 'put ''YDxdO2E4OWVrcDA1LCNIc1pLbnlaZm1NX0l7Z0g1cTlAb05hdSZzTnJHZntxfUR8XlYlTl05QkBLRD02RnUrP25Pe25CbEJEeDpkMERxIzt3eHxNQE07TVEpfVtTRCNyO2pjJDE1MmFCdUFQXkNiM2kmayw5VkpqTGlJKmB8STYzWGdPUW15UDhUOXNCMFAhTGVXPjRKIUlFdF87WjwkP0dlJS5M''@;'; put 'put ''ez4hVUlCeU92JiUjandsIldPNH5WVDN7NCQlZCw6RGE1LG8laVpne3JWPSFIKFkkPU9RMXliPzJsKiQ1MEVEMTRCQ3lZclZAc3ReIWwuMC4kVkoyLjdePTsrb35dWDJ5PEFjQUxmOHkmJEVeNVs5Y2hoYTxuclpDSS88RWpkT0JFZzNHbGguSG56cl4maGxYSSs2WjwmalBmL0VbdWNyYkUyM10h''@;'; put 'put ''fGMkcDR3Zz9gVnt1fmdiRDppIksxWUpLN2doJnVPZSo3IjM3UExtPG9TIXh9dixSQjBWMW54TVpmT1hrJHd1UGtOVWEvLGlxJXFnclVdS1d2PmFXT292ey8/Yzd6c3sqKUlZTk0/SE93UU9CYV5VaTl1Mlp+KzF0UXxiXndleFR5QWtrPEFRUWdYJWdnZitbXzhsKkh4QzhXMy4rXlZJRz9IQVJX''@;'; put 'put ''UFUzLitLYWEpTClRSTFZPHV5dSVpcC5IYkcoV0VJYnY0KGt8Ok9QI2kvSXJ1YGlfZi4jKGxee0VuL0BgbkFpKHZ9JFEwUWdedXIvSVp0ZWU6RkI6UCYsM11wUGt4SztjeVk/MlteS1kiKGJ5MEdpTnt9al8uKDh9RDB2MnRLMVgpODk4OCsrWjBvcEdqd3AyVzNQKDkmSW5LMllkNl9xeDFYOmBx''@;'; put 'put ''STVeb29RdF9FOENKekVpZWlGNjVdIy87WWdUVVM+fFt8XyRpK0lAMHNnTyZ6bH1IUWheUTMxUVpEa2ckNEcwSyZYOltga0o5OVgxdVssI0ZhOG9AUzxBRH0kSDZJMEBvWWE0bEluYXBHbmxZR25bWS9dMklhMDcxTSM/P2ghTjk0bk45JktqTnQ8QWsyMTUwNTkmOXhsKkB9ckxlXj5pY0RpXzRs''@;'; put 'put ''eyRNS0YrLHQsaDxHTWllMlApW1BVTjZZTmNGTVB1eF9gRCFGQ0M2JTQpUi56IkJtVXVTKT9ebDV+T2BvfXFHcTElJjM8QltfZkA9aDlbdSgqU3FgTkdOWV1LYSFwbztQazk7ITliMGkrcTgqOW52YS9UIyptYjBgOWJNNj8xUDl7cE48U0JgbXlLTXs/NTxocURKKFAzK1hlRjwrYXx4QSUqNEQ5''@;'; put 'put ''NTVGJn04SzpKTEd1VlE8eGk7VlApW0t6R0ldSXU9cmUqND0jKXVJRURdUzVrOV9xMDgoNEVOYWp3Il0we2pIYWo4VmZiaEE6InR4JG84VmY+WSYsaG9qaW5QbSt8JV5MQz8oQCk9X15mb3J8a2AzZ2EwazAhKlspdFUjUldRPUhsPnhlYHBgczVHXVJGTE9nIn0yOSg9RyEpOj4hfHRkKUM6LEhS''@;'; put 'put ''Pk0mJDJ3WGRFTFBzLHlsOUBzJiYvdFUzdnZXSk4kfGBQJExYWmFQUCNYRCwoR1hBUnw4M2JiTntwTGVONkZ7QWlSUkE6byUrI01RfDgpaTdhYjh3dkd4JjA5dW1GVnF8S3U5dmxiQyNsfUh0PVImJi9INFAycDMqJHpHI2xzOy4kTTtMbmwwUSh0SUo5UWZHSV1Je3daazBmW1hhOn5IcnpObDdy''@;'; put 'put ''NTRHfnlyXXJMV3ZYLHpsZmZOYHEpfV9DTzssWyVnfiVeO2FRUyglLDEjfHQwbHJ1dVhfRFpNaWV4MX5xWWkmPTt6Mld+JG9RMl19eikrZ09GMFFpcXZfI1BoL3Y4MVppbjIxXylTJjhqWHBhdXl0Xig9ZCxHMGo7MCtJSnlRNkRCUUJOQFZteD5kK0pwSVZeTlJ3XyYrLFcsVDRmdCM8OT1TbTcq''@;'; put 'put ''e20uPCx7VFNfbEJqNW14STM0OztdS1NXSSpqVGVCa0FVVHEyZmJafSpYUDcpTHssbkVKOGQvTGNkZ1dkazh7cDlBWS4rUGI6aC9iXUYpUG1bUyNPbCsjOjw1Ki5UTT99KXtwQmAiVjZtVls1QlVYfF4rOEJvdyR8SVdCSSs2KkIvLy50OlAzXXp0Q3pNU29JZCU5WEA9cFd1LzQxPV5iKjxBSHQu''@;'; put 'put ''QiNIV1RgODo7QjVmSF0kT0hsdjgzejVWNGEsPDVQSG18I0M9WjVuUTxhVks6V2lQTWRiPCw8aUVGe3YhenNyLj0zSyFlMXppP0coUVAzZCg5VEldQm15Xnd8WnB3WzVNfiN7I2RrM0o9VFImfE4qaUZnImBxa3t6T2xlY2VyQnIuUip4UiMyamRjTHN4U2lxMzZIaWZ5JGVLWypzc3NYcDk8Mz9y''@;'; put 'put ''VHVkRFsqd3xHJTZBLHtbQFZbdmZyJFc5eFJUKiN9YHZdNmE4VzIpUG99NzVyT2FYcT9ld0k2IUkkTSYvaS4seCRBZURfLjtxXzplKUNsTD8sXjhuIXwwc3Vxe2BKKmEpb1BMcCZlKnk/W0hYXypuSVBCVn0xMUtAO2slQW51bDw5dXN3czsoSmYhSWREO0pkRGJGJVFvYS9EdiR5P1c8MHAweigp''@;'; put 'put ''MEZdTFg5XXc5X1cpY1dnSzU7fGw4fWk4UlR1aTA+UT1pP0loan4kcGVfXmp8bUIqc2oqSl5pcihWVkdKeTBkXyNwYEcmajhwSVU/MElVXUwlUkNlTWUoNWNQW0dpMyFxeHYoeWQ/UllxRXk5P2MiKUZSd2ArL3FOLDZkVmlle045YkozK3xMfFgmW3hsUm92aHc2YCsvIVpHVGIpLCg2P2J4UG1b''@;'; put 'put ''Kll6Qnk+S3x6X3peey5uWnhgKVZVfSsvTD5hKFVOa1p4V3hJXklgVl1pJCo0dGo6YmFyezJUMDw1LH06YmFbdnU7MUszLnY7UFlaMS58a2hLSGVMbCVJMTpJczR1REswcz4hT0N6TUYsLyhZcX07JltGaG9BIXxCSCJfT1NlR01dQyFFeSF0ZVZMZjcsZk90cGNHSDxXK30oeD9USl8pMSw3T3RQ''@;'; put 'put ''aEw7ND9oVDghODE1VDhHekVgSWhbdHNFKEt+OFt0QW8uYVFEKkJWNSZmbWZiU3BKeHooRm10XWtQK3s+UWMlRkMiaUw7YFpGU2l1bn1MSVRSQj9XcSMlPzNPakQhKCNZS0AyW287Z2Vjdz4+QUQ8dGBRXXE/I2N5eHEkNVpCa1hQel1rT1pmQTo0KkswQzJWXmRULEc4M0tuaz8mNCxBP3tmLkRU''@;'; put 'put ''P35xPlNQZ2U4bnFzd2pYY2YuK15xPyMxSFdHZm8sR3R0KjQmZkp0ckxdanRCb3VfTDVbMEhJUj8yMWt2RGEyQW1peVBGS1NNRXdSMWtCUXhadCtPO0lHJUlOdVI7MjhzZX44OUIrKE1IMDMyL1R8cFZgZmoicVRpQ2VYRURUOWl5IjBoTmR1LyhzSUouO1t6cXE9WigyO1RWV3U9PlRxeUs2Q0F3''@;'; put 'put ''XWs4amNMeE5wWloyS0NkQjovJkE6WGYse2RqLCJgQTQzS28/KEslSUR1NXpsZzpaNklFSCQzOXRzNnBbZHFoUUZOOiRmckZYYGg2LENaNmo7SzZpdiVTJmIxZnIuWWgqbFMlUGpefEM8QHxoNHZ1ZW5UakQqSWNwaUBZUXE6cE9tRihvR0Yke0hKWjphan1URXJtODNYUjYpMEMqIjJJeSQuYDki''@;'; put 'put ''MjczTXcsY09DfDt7WyZQeXpCal5aQlEvcmZQfkY5K09gJFE8S1RaOjIxVDtVU1ZeKFRsaFJaPls8K0hzZDlWaFIyKU49Q0RNYW1RVzE5U2xvRElmVmZOVVY1UiNxPTBDXmFGclNqcThZPk0hKGFpdnFROCN8QGEiSVJZLkM+NGZzaXcmW3FWdDFzJSY9dXM5YG8kJS9rYCNPWTNwJihwJiVMcTJs''@;'; put 'put ''a0toO3d3Q18oNE40LG9NYXNmWDVfO3loWiU3L3JwZW42R1p4XkNifSQ0S141dCM6PzJzbyNudipoLENnNFZ8R1ZgYzZ7RnBAMCs/MH1ZaW9dMUd5QHBCWj81cik5QlptXk5pYCFOQTpETzRQY0NTNz1DcnYpcnYyUGYyRjk5Onp5MSZpcUhHVl1UdGZ8UUQ1PXI4fWBAdHM6blpXMn17NVZ+MTA9''@;'; put 'put ''Knczan5RSj0yOFVBNSY5MGRbey92Q3Y8Sm1yREVuPSJCRG5gdyFbQWBqfnQzJHg3MFgyXj9BWGFkcD4iNiUzOUBNP0A9PG5QVSt9QT9eNSgsbiEoZHU6dXFeaGBeez9CKVJSKTg1U2FNQFo7P1c8OyghcTA8SHVSfVdSMkQhcyFVaT9AMXgmJm5DV24yen5zZHF0T2pLJVhleSEpXW1JMkhLJk0+''@;'; put 'put ''O1ZgamBAfG5+aGpuZ3A4VSt8LGNdZ0ZfKFJSeU48bnUqd0A7bTUpbTZmYUhbeXBwO3pKXyRPYC5ifkFUfEZwQCkzIj8qalJjPDxBaDFQX2dLJGZ5JHxsUX1ITHojOyQmKVJmSXJLMUV0ZWwwJn5wLkc+RkJFMyIqdk1RIV03Zn1Tem9wNSU+YkU9NT05Rkt0QCxnY3VZM3s3fXlzP3I5fUhkSnxV''@;'; put 'put ''VS5HfFFWaXtDNT5eb1t9U2tyRTVWZDlAKmBfak9oUHFxUyxqaCNIT0BEZVBTV2xCJjIqaD1hOWpPaTgoX3lzMGgudjcwVTZvcjxbPmpyUCJKQHhyS3lwfjA5Pl5ASX5oPUZ8YzVWQ3tAbDphNnJTK2AlNkBfcG98SUB3Vl9YMkBxLE57XywmXzooMTB+LDsiej00LjtWQ0xadHtUejJ0Xl0sc0R2''@;'; put 'put ''Uzk8PV5AfG5TfHJ1RCZbT0phQEBHNXFmVWJDTnE/US5pT0YwcXpabG5aUk9AfVpONVdEeS8hfCRRUDNCWVd7U2JKRWg4dkhpQGBFXjBaYDpTRzo7KF9tbjtEP25afntqIX5sNzNGQEY+WSJKbmQ4U0FAP2hfP3h0XWx9QS8oWD9gOlclSTpMcjRnZlZEYjtkZyhEa1dKOkU+OTk+Sm03SUU5JEUq''@;'; put 'put ''fShRZ1c+anF+Pl5nOzV+MiwjXigsUzM4IUUrP19pS1t8SXZkRD1vQSV6YjA5Im5xWHsqKlVtdDVlWX0iZnAxLixGfGBWXj9bZlFFIWoiODZPcSUyMHI5Jjs/XVVdVX0zZik7P11ucCYlPmdvOV9sbzlnflQsTlcjLjI9XUgjTT8wJVl7WVZeUGA4IV8uS1l7WXRMcEBAMDAwOkxoekRiRHdGYFlr''@;'; put 'put ''M3hwTk9YdUAlUjMrVWY0K155XXFwPncuQlZkZn0qXXZ3RTZHTVNKd3cuWFR+LjteVXZQYD9WOXtlWzkzRThuXihORFp8XnMlJj8pUnU7aWFNIilyL0gjM2ROJDh5RjosS24hbEt1cikiLCpNK289LjN9ZiwiKFJiRDteVngmZiUuZUs8cEEvfmVvbXk6bDlvZyxuandteV1mLD5+KHZjRSpLPipb''@;'; put 'put ''UyVQbC9ZZ1l6R25tTkpuaj50MWh7bl97OHVsTjlDImBfYFB1cWtfZyZJcHVxWDg1bmk+VH15JW9UfCFWQmFEdVV8fiF+P3s6LHJ7fWlUQiEyTTFoSnhTM1ZhZCNzIkw1PnR8ZjY6MUduZDlPSkVKYH0iMW0/LmAmIU0+fVJKdn09NFdXTjVRJkBeeXYmVHZfcnt1QSxKbyNnYFphQX5lVnNqU0Mr''@;'; put 'put ''KjVDUV17PS4sckolcWsyLj0pST9TaSYyMFFde11pc2NvdUYpWz14WCUxdUh6Tl5zJVVjYnlwLHNgWVEpLzNKXm4zZjdMPislVzNDUkhQRzA2L01gYj8zUjAvdkwmSSQ8IjQ2LzN4JHpsI1c5MGM8S1EzVjViaS49bXtTNTYvbG0jeyp0JHtSSi8+KnI+IV1pMnUpWkxuYn5BSERhPXJsUztoUjRV''@;'; put 'put ''YzlqWGF2Om0jJTwsaypGKENwWG8mNFBHQ3YhNkRDI0F2cjRNN14sRDxaO2x4VCplW2xEPHU+cW5jZVlmbDcqJXRbUTczRk9TSVU1Xl87Q1o+Pjo5dG1zT1M/JkxkJkBzcDlyTmFQRVRtb3l3RWRkK1tzU3lTPGchdl0oLCUiSlR8KishUExjN1pmVmt4Mzs1IzVxTW9TYyhaUjFaJSY8TShfLjdp''@;'; put 'put ''ODArPCFQLHshO1A2QzpBNnlnK0srSk5NbEhVP1pJXi92TSpkSWE5UCpPUXs2OlA8P0tQMWhbWVh0UFp6M2Mwc1F7bixbNiNRLn5YeWdFRWYuPEs8ZEE9TVJ0Qlh9WE9HZGk0KHFWTXV5enk+dkBRIk1EeDdxWGNKJHpgNVVkaUdlR0FBeDJBQU1Pe3kmaWJDWXg1SylXUTREdF9DSDlZaEdiUjBC''@;'; put 'put ''Ky9GblJBTWdBQUFBQUFBbkIkQUNmYVJ+XUdoV2subDghM0dASX5vPEJqZU9PSFQ6VUs7eHhrPnBrKkBRa2A/enw7ZVZ8c1s+LnREP2Exdit9KWxHNW8heGQmeUpbc1IlKnh3Ojt8ZllUUVM1JTpFeG1+P2YpP2w4PWIzfkNMNFZJUn45M3ZJNncuVzgxVXZZYHY1V2Z0djJacyUhKD0/OkgoPmlN''@;'; put 'put ''JWozdG8mL0FCU3RzdS9UWSFDVSV9N3tQaDg9eiV+RlJtVS42JjA3U2x6NXNERD5kKU1nLDQ0aChzaSJOcmRSfGxucyFec3wyfGZwNDxAWyxRXixRV3YyNCRlR3VpJVpbaltPeUZWWClSLnZQY2ApPWkhbDA+NiNzKV86WzYiSlJ0YzVQdFNdLjtCTy9kV29KKj1VRiZjTDFzPFU4W3JMW3NPPk5n''@;'; put 'put ''R1ZrVzpOODZlWkc6UU1md0xdY0tKNWsiKF0hWnJ7XyJDamRBQl9sOiEsbCswQUdUI1IxcE4hXzJOaDVwe3FiWl5+KmolNF96REJJaHg5PUVFT1JkNnVtLjZ+TCp8bHxwRCNdalRXS05xSkIqW2p+QW47RklNSWQ6Lmc2UUlOY2VTbX1oej1acWAsTXR5enZDUk0uNEMyeiVKQVZBKSFdK18vZmpQ''@;'; put 'put ''aXk1cEQsJiNraTooXlFZVF9FRkNUV1dhZVBnOHA5L01DZ1N2Ujd9PHRBSXs4Jjg0MWs+dSxbTDh+PlQlLmZZLH5xZFI2O192cj9OeyVgQ0Q4QEM2S31yVGZiSWt1SyU0SjxbeCo9MXo1UG5neWJIZGY3YGpuc25DTTpmYjNmSWoodipOaUZAMTtsLGtGWig5SEQ+M1Z6PyEkTlMuaDRQR18xQUVU''@;'; put 'put ''OFFTeXNWVV93X0lBOjEzVzZ6eXZIZXpURm9LJGltY1BVOkBMMVF1Lz9EMFRuU1svR1ZwIz9IWmlgdVRFdTcoaVY9ej1+QFljQllOPVZvdENaKTNhM28mLkA4WUpZIT0mPklJWVUyPDlLZUpOZThbXmcxIzx9K2wkW2Y7PlBpYURAfkdae1phTnl3dF9UQ0VhYFVWUHMlO3dkWFZwPHFnbSlVfWlo''@;'; put 'put ''MmMqOmhpMVg0UStPRDtsJjxhJTokVyU0WXc7dUA9OX55YTBZJjtOLGIpfHhxK3pALGpIIX19I1U5NyE4XXdydzUjU2d8WitQVnJ1REVYV15yUXMheiY3JGhOdWIjTS81MnEoZis4fjRmZWlta2FsMGxbYDEpVzFmSEM+UnxHbEdgU3l4MnwjPXdKWlladHRCS3ZYR1BKISNnT2k6LDIjKm5YR3Iy''@;'; put 'put ''PkptLG0kIkhsK3Fsby80Z0Jmdn5iO3pYMj5PPGJLRSFae2NpUzk9Znp+PEdieXQ1VTFpP1tiYVRJIik6SEJYYk13aDN0VSxZJnA1ZSNiLixYN2dyJmszQnVycTUoY1tzKylbTUw/cUdOImZoSjUxMG5Bd0MuWFtveDVCVW1uN0piQmg0X3oyWmk/Q1MlRVk1NU1LW3Y5WS46dXUheTJNV3MxQl4v''@;'; put 'put ''dHpKd1IyeGw2fUd1X0VGRlFRPz58RDR2VGt6elh+RzlaSl1OaXErK1QzNnFab0ZkdTx5LHxzeWhfQyR4JV1xKiNfJHp3M1ohezhvZXNwJUBxZXZmcSIwU1lbXldTTTtLXU9zemVaNCNUW3pYOklgcDJQQmJkY1d6KDNuRF1xTFdLNmEwa2AwNSN9SnNAT35bWmJwL25FJVhleWBAbkk7aHBlLlda''@;'; put 'put ''aSpuR1dKInYiKWI6aWl9RTAwZnx6OngqJFhtdS5bd3JpUFckO0o+QkRPTTs7NixIXmJoezlYQj1MOyFNcWZJYUgjYVNhW0BLYkwwTCxtfDYsOmdvS0w1PVV1VylCW1l3RHd1K0R3YGRgU0luN0tNZFc5Q24lIWxoRn03SzRWQFMlSkJoUS9MfV4sOGZAMVYma3k7dj5EYUdXYm89VFl8ejtRdmNQ''@;'; put 'put ''O3QwRn4/V2M0XTYkM1JRJmh1QWEkQkg+fGFCR0ZANExjJXB9SWs2dmU/W0duNHdgLiwmaVBhVFFpVFs2I3UjfS4rT21XOUgmPG12S1RkPz1CPjcrYWYse1MuKmZ7eHZiW288elAmdU9kWzBZMEFlI097M1NhYXFuQUNfLDRXKFs2dX1WQURISiMyZkdNYVM7TUZWKWkocDYmQzx3THdNQnIvVHdF''@;'; put 'put ''SCUuOkNCbml3QDxkNEdRKSQ4UigpTWtSMlpIbGIldHZ6c3QxdWtyPzcxTGBHIjtxXnxUbzZKazM+UF0qdS9tcEMsWlpyWiU9RChkck5mVzFFOUkvSTA9VHtpWE1JOW1fVHZsU3dtNmUuYCxpMyJAUT9ddjdQUC9VUFlrPUNQIU9AUnsiRnRmKXxeKiZkIXpqX3BbZCNgPSN3fmRvJlI6bDF+PTVW''@;'; put 'put ''Xmw/ZylyfmU6OmJaLzlqXUhvVyFRKV5ENn1EVCRxMz8yfmsicE11cGVHajs4ZHx8bWNhYF5vI0Qsemh4PXpzfDhCfWpqTXc7IigxfjZ5UEJbcCEreXk8OjJxcjh+QyJlTFRLZDxBIVNWQDhVMmw7PV08KjUvJUZCWihLbEVfTyNnZGJgQ1Q0cj9eOEtAVUYhTG8ueSUvYz94U0o+Vmp7aVl4P1cl''@;'; put 'put ''KykuMEM8WD5BYGtPa3Y2RDN8Pmo0WTJEJWc3ejN0WzppPTd7TmtwM2kmK2wpW3JkV2JEbDRzdnJgYmdRXkpmVkRUZ0dydyprc1JEWjguOyNnTHo+ayFFcV4vPHFFU3BXKEpVSFQicWRSZm90P35HRzR7aGtuO0kjdUVdZF9kfWd5LjRAdnh2cWNhOV90UCkkLHE9I3Z5X3QwUmRzODRsNV1QUFtN''@;'; put 'put ''JGFxIl47Xjc5Kk1Ze1FoP09DNllDX0VvI0cheTUqJnF2PFRBMz9nLkM9eGFZcVZTelB+YzdGa0pSLmQpPSMrRz0rMFozN2M7cmZFYlsoKzZ+Ml1jWjs4eSQ4a0YySzxsdzY6b0VUS0Y3fShJdVB1WGo0IlBifiFNYjdDTnR+KkgkWlV2cHQzdF5KLl1IQipETj1sIWIhMVRXNnl+ZGV5eHRNYTFe''@;'; put 'put ''bz5qRz4kKkJee3l0Z0FDIXdVdkJJek1vdGIpfSMyNjh7blRaVkZqL0hHJDZ6SCF+KTs/SzcwKzVPdFFBWFZUVSw1aVVULy8vJnR0IkR7ej4uU3pES0w/Ol9tfnp8SV94LjJ3RkNsYTx9d1FFTylGI20kcypqZnB7KkIqNyVvTy8mWzVQeEFteGJCa2gjcTJzSD5+RUd7WVdhRkk1OyloezRdQHxK''@;'; put 'put ''clAoXlJxSyFqQHxjdW96bGQ5Kjw7N1VkUUUheE1wbFVrc0NdeXh7Y29nSTx5c0haMCw9PHQ3WXE1TT8iMW9ZLnhhdUtfdXB5UDxlMiJ6Pk90bXw4anZ9dW1KUTN0bl05eyo0d0JYNShqcm5CeEM+aDNNJGsweUM/OWkiL2NlM2hVWFtaQ04qcG4jK2I/U3teUEYreiJKZEVCRG50I2lCZCg7dkMm''@;'; put 'put ''XlQ2TTFOYyVbaSRBbTRqfixaUkM4bzpURi8xS1VNJTQzVipraFJ4PUBjfEY7L3BTdEY0PXhpVVRwfTpxZV0iakBqfkdPaUVeW1Y4Xl45YW8oPXIqaEV8cy85fHpXdy9gaGYqSjdPb1hXNTVgdi93UThwXy5zczxdMmEuQHdRMDpMJXllTTRNaSVvbHhONWpGR35uNFNuZUpHfFQxc2RITz9dR1pk''@;'; put 'put ''U2tWOWdxLDJPdiI3RU8zPk9CKyoyelkzXUNXZlFZS0BCN2EufVNuW2wyZCM/O1A3N0BweFZnOSQlLFZhdT1uaHxsOXhlRm88RmRgQmZuOENoTmBxUVo6ezk7UWV8a0V9dD8iQXohUEBDUz0qciFiNDhibkhGajVvdV10emRVZUxFez12ZVsoelZtVnN7bTBQbDRJeVB7IlR7JU52OV8rOypZYGRq''@;'; put 'put ''OGEyNyswSFh4b0xDO3FIfisyOTM2QWcsQmRGckwuU3E1YHdaS2FDISpdS2syOzRMPytYdHokRktJaW1vQCpZJEZTcjJZa1hrYi9oLm9WN21vSWI2WWZeMlZeeFR+d1UyOjh7Y0siMDQkZ203ZH4hRiwlPTdCRyFNSX1WZ200LFZ4eCssOXJ8Mk8pWjtgazsmJkMqalFLPyssK2dGcXAuXzQwVFdg''@;'; put 'put ''YlhAKypzUkkrMixVPzR8Sj0rQFZrcF0wJFNbYS8+dGB6I145dCFvbl1wUkVQekRPZzowejxlIS5nLDhMbHNgZm87T2p+Jm1iUEFic0xzb0ZhTGdFRHU7JDdRbX5LUFV1QUxWT0RbR1E3VE5CSUhpaThMImdCL0tWIlpJbz13O3I/Ujhhaj5fRzxeQGErTHs2Mlo0KCoueFNeJkdWT3kmREM6eCh5''@;'; put 'put ''KVQmQlJHcD1uRHBEPUR+PkZpekNSKiU4WEMmZ1NQKm85R1N1endjJj1HaTJiI2YySFNxKmgwdT9WdzF1SitBKGA/biRdY28wK2RtNHo9fDgrU1kwUiQ4Lm19cSw8cDN0WWZreUxAbktva0pEaVlaSyIyR10oNSVOY0JjeyhmVSphQ107d3AyRiN+dX48LlpedjspTFA/V1UqPHR8TFI5JFVYalpW''@;'; put 'put ''byl3bWZIL1JzeiRfPnk8WEZTUzE9b1peN0JBJHlfKDRqdkdeWltqTGR+Ty81OD42KFFHQyExKkx+WFZHN217MjE8YlFQczRtM2hWP095TVNgfDhSOjEvKj81QGtiVlAhWyJBZyI/Wj9hZWNxW0QqL28/O0t8VD5hN0UxaTdMNGVbJlU1LEZUJnAiNj5oTCJdblJ6OiF1P2ltUns2cihAIl5WRUtE''@;'; put 'put ''JG8scEdsSFtTWFVSckd+M0lGQmhIfUkpZ0Q8TXBGVmcpYzYkcS4vOWQ4JT9wKjZKXihgdj9VaFRmJFdaRn5sbVRiP1dlSXhzJGpZQWZKOj5QdWNSIllFWkR+KVheelt4ZiV6QUlpaVp9I1tTdSNSXntSNVZpYj8xd3Axe3ZbbXZmIz1AYl1dcztzYntaJTNGQ1tGIShGL2J4bVtRUDxJR0opTFtR''@;'; put 'put ''bHA5bWdnIXVkfF1tQG1oeyxNY2kiVHdpYUR7K0xoUEgoaHFdYUpycXclYT94Rm1XSkdSdXRPYlsoRmkmOzRDZiwqMmEjMlFTPDFXYl5EbiNXZmRtJnk4Nk1FL1lgNSxqXlh9eDlCRDFPTTJbQGQ4KlZNVk1rK3dsXigjQ0l1cSxINTFRQGRtL1FpNH01I1Y6PDdRMXQvS0s/JDJFJlBWS0VGPFlA''@;'; put 'put ''MWEvSGMySll9S3V1NmBkLElaY2F4QV1IVWYqPEZiJHZ4SDxaRlJ2XnB7emxqPXZkUSNvbEk9Unk9MmsmOnI4XkJzUyZkQmlSZ0JpZH1hJVhaO1NnS1Moa3dYUS9eak1rPjB0Qi5jX2lZWGl1Zm0wOWkrfks6JnV8UWMkbVMoOUclPyh7MzpIWT15I0N9eXwxJCE+X0NJKiE1IVd6WHQ/ZUhseihq''@;'; put 'put ''L0lMZzt4P2BRT3BUW3lWVzwlZ2E4RCNsX2lmOGhgdGEreDouV0VhX1ZBS303RU4kV3hbbmFsX1tBQDwmVlpXUzgkX2x0enw1cUduflNqfThaR2QmQlpdX2ZlaDJOMChVcEplKU1zI0VAZGlzcm1dPEB5cGBOaUVYZ3VAXnN8L284QWllL2NsVj4zdU98b1Q5NSRib2Ipenp9R0M2e2R0bzx8cDte''@;'; put 'put ''MURjJHMya3Ykd2ltfjVgVUApN01nMl5lVURSLk5JOnxXL1M8c2YqSmhLdjAwaE5oa0NYU0BdSnwjZjFSUHROZkc8OGZ6azAiKj0sWE9xeHEqTko1NEkvYj0xOClwa1BZLGh9cmVdKURwYk94KGxkI1BtSUR+PE1lQnZIQjNCfTQrbToueGRIQlNRQkpjXnsvdEZObGA/eCY0clQxV2MrZGIid2xl''@;'; put 'put ''QFZKTz1nKV8kZnN1N1JSZ2xfY35+KWomIWUoUXhnPWFdbElQUTt5JH1uKTYhVyI4KFViWHZsSU0+RmpoKnNkQzFlcCV2dkpoUDBDe0V6JDtyRytzcXE9L2R4XWxlRVYzJkM4YjtFbiIrd2o2TDBCTnc+RSJKNTpRRUFMMCVAbHtMLn43SztXTmopPzFdd11rWWNvKysjNWRjVzYrYncvdXtAQDBX''@;'; put 'put ''ZnchL2VwOU1rKDBudXxiI09uemM5ITFTQDg/NSxhSj1aZVclcU19KXJRMntmOjxsa3RwbGZvQyk+YnJyMG9kNVdEVG1ldGhWYnlPZHU7OHhzdixYZ2NSeTBuZmlHQnhpbUJDJiJCcF9sWmVSXk8xV3xtV0JiRVVadlN6U0lLXWhTS2IxQDpJdExmJH1lSTM0JVRTP1Y2elNRLF9gVC8jT30/Mldb''@;'; put 'put ''LFE3OCIxOF4wJmMlJWpTLC49bFgxPDlnNjExa3hKb1RiQ2lEZWZDUCVTTj89SCFbMHxUYnkpbWBDPktVPWJLcndOQ245PVpYeT9mJiRfeUAlJDthUz48VG5XNXVjRVZNe2c7SGNhLDVMNVVqZHtoYSJFLnlHci9GR2NHZlZIXW0ydCZBO1lnQHp6JmVNKlZsIi8hNTpbQkQkUUtwN0hxNjExNkUj''@;'; put 'put ''aDFKJXMzQEFnb25GIVFtV3BwT0o8aXg9d3RAPERdR29OJSxnOjNxcThnZDw5bVs6LkReRi5tdElqLi5SJVs2fFpMKX50IihIelh+WnlAMSQ8XVh8WGBVVEVWMSwhPF9Kaz1JY3c2ZG1nc0csa280RipUImcmKT5lNiVNaHBuISZ3TFNBfWspTWpXYGo1X25fUVlsRyEqdVRDRjVtPjhFaShaO3ss''@;'; put 'put ''NnI5ajlqd2paTUkpcS9+IypSL2ZmZE8+UFdsQFhKfG45JH1sRjA6NmE3SHlJcztqZncsdGRweXRMRE17Mz1KPysmbFg3W1d6Y3B1c05JeShrez19On5kMylqcmJPe0huaD8kZFQkakwjcHFYZCEhTmwvKm5BY1t9XyphV15qfGUvQmBPbD1JY1c/Mmp+bEQ1X3Zncyg/TGJvMTBZV2t4Y0p0Xzxb''@;'; put 'put ''QHpJWUhlIUsqZ09JLlIhYV5uWV5JQlVwMTxCSCRJPE1rbGBIRzdjYjNAPjlPN3VQKEg2a2Y3MXZJfHJnVEVlQjJ7amxkM3ErP28oLG0yVEsuXX5dQ21PT2M8OT4mLzA/aF47JDhndCI5azBRMF5OP3lhP0JDTU4oL01dOm19KD59ZmVlUVV0YDJYQCNzaz9KOk1iZHU7IXBmKyY6KSVTel01Mjdx''@;'; put 'put ''ZE9vc1gycC4yO1dJOVBkfDhrWixORCtIVlYsc2U+OFo1akYueyZbcis/KkB8PVQ5dHpkNSpaVGNOWWxvVjZtb05hNGZkO0JHPiMscSJzVj1QIkhTOXBUP0ExJGZ8RCRsfH1+VS40KGdbP1VjZUFYW1JkYnZXKy9gX05uQ0BUVS97ZTJ3XV5LdXtAcy5BV191ZnpdcEQuX1JBOm4mSnEiOFEpbDdg''@;'; put 'put ''ZVRmMUMsUyJFby9hMHNMUi8xNiwyRU53cl0pMGpNNE50IkBHKyR8IThqW2BPZ2k/d1tCO202JkFpXToyfXAlbmpOWV52ejp0T29LKFdzN1JOTFpwWmg5PHYvb059Ry4+WFFLbWlxbj1Uens1TVQpZH5rSWVtZG1LcGA8d3E3IzlRJkVEbiRgPVoqWV8kKktFPFN2YlZoIyh1RjZpdipnSVFQN35Y''@;'; put 'put ''N0EvUmA1Y3wuMWtMJF8qL3dkOTBEeiJ6WDB9S1VrOSFfbjwqTWg1PHdSZFUje1MlSGxBPiF+d0RDTXI3a09yeWYyV3RybjQ3XWJ0PVJpWklpW1h5KmpTP3ptI1dGSyx6I0o7MH5+Wm1JUWhiSjFPYGJVOig2RyVtdCQqNiwrVnd5YEEjW3doVVJLMl9gOV4rSHQ+aVV5Nk8qeGNqTGc6KSpeZFR1''@;'; put 'put ''MURyKHl7clh8OH01JFVtQS5ifmtmdjZgYjtXcTZDaHY+Z1hzLixUWSFzPUBKcXBZWiVfJDN2UH5ORj5SS3l4UFtYQXlnZEdpQmZFPTp+ekBMfHNfODIkJmNOYDlKOmh8bkNnR0Z+PD8rSSxWZVJTfGApMmJERm8qWXc2SCIiZXlyTmxWUUlZTyhFenAvYjFdSU1NVE1NQyR6c1B1bHN9YDpvPj4/''@;'; put 'put ''JGoiOWAleGQjdSVRNSpQTCN8aW5NYktraWk5S2EyW14qSV8xKF1Zejg4Vm1zIUM+RUY8Yk4pWl5bb2tRcSx9dTJqTXJjVCVtc0YiZ3Q3NFB9fTJpR21hL21CKWNFM1BAKWYhOF8hZlZvTnV1cHI6WW02WFlMPjh4Wnp2PFQyUDQ/ZHV8fmM2QkZwKmYpUl9YUmBiRkcic0R1aDxmczIzfEQsbzoq''@;'; put 'put ''T2xORnMwV2YuUl1mQDxpUiQ4ejVlWGVrYylAa1g6bUBXalF5T1kkSyNBMip0MjJMdVBaUXg9ejxjMXclKjJsJHoudiUsUylrKHxmRUshTGIrS2U2TGZ7VXErVDw1PSNKezBvOz1APCphQHAuNE1PSUlJOFIzOUxkNUhsOlo9TUMlRj0yMyFROys2IkVPUD9wdVVsRUhhSVZQT25LZXdvMGdvRCo8''@;'; put 'put ''VVppKHNuV1cxMHNTfSxMLitTVGlQSnVCLHkrVmZAYXJLJk1HT0JrIS5JO0JCMnt3ZmRjbHhWPDBMT1tgKnE1Q0N1Lyo5cCRJMlt1UiFGWS47PTY1YkRBMi47NzYqWFUuYVQiVF9fc1REfitneTZzY0RkSEEqe1FmdEFIRClsMmFOO3M4cmZSJUlhV3V4YF4yPUxFP2oueFdpQCJ5XkVddk04Ryos''@;'; put 'put ''TiRuNGVLckU/T0ZLRmtTR0FVSXZ+K1VGeCsyVDM8QmpIJWIyVT9BVGxaYVJEZnxaIXYxdmhvTmJHYlVUKU5LV1lNRGswazU/amttLE8oa2F0QXh2MkJYa2chSD1IeHlOI20vPXBFQn0/SWM0e0ZATVhDcVkwYHtvQy8zRXxwJW4lYUBjUyxJJHMyTXpxU0d9WThFKkhjVnk6NUsvVHhGL3Q2KXpe''@;'; put 'put ''JF03YEdifXNKWjAoaCtbVUpSQ0klVl4qI19BRCgiXUJ9WjZ0QDoyTW0iUlZMRUwuXXNlbDBBZDJQfF9uXUFMVyp6QDRFQih+fHpgKjsyRHQuRHl2KnNPWmE5VGhFNVF9R1dwVD43fVtIa0M/amQ0en5nP2p2TSo/Z3ZHWjxSfHkuMy5CLE5hMXI/NTtWL1FyUXQjKUFfRGR8PnxuYFl3VVYmX1NM''@;'; put 'put ''JGR4TTkzdUQ7OSNCb19RW3MjPyU3VSNFU30wbk5dQlhFVDJrPHY4Y3RGNkIwKX03RGpMXzN+MitDc2B1ISkjUyx4fVtxPy5oYGlCR3U3c2JJdGM9U2pFYHo/VjghI1lUe1QsPEMuTCMyNTc4YF1WK1tvKy9AfGNtekllKl5MOUtiSy9UMHIzfDpLcXUrSVhZP0cwTGZKYGB7K2tUWW47QVQwb3hH''@;'; put 'put ''MihDKjokNylJeXp5RDc1UTdDUitAOlEmaTtpRSRgNkIyelgsW1J1QSlsWi9QcGtVVSYjKk0zfiR8enxvZSpdQkRKWDxmUyIhP2Asa0NGI3orOGd2WUx8SjgqYVVVdmt6eiNvPEtSQ1ZBSFk6XT87MyJLW1ZyQzdFNmJhfnYqZC8mIVN8OmdGW1FlZDYvS35jRVBCU2MqeHsoeGxnaiZSN0BXNzhp''@;'; put 'put ''IUZ4S2YvNjFxTnlYS05CKj9WNGFVZjF6WXYoM041UGB3ZCEsWnNhYyNRVCh+QzopJiIrOVNnNkBZJHhqR3RWbllTRVB7e3BLL0tjMUg9Ljcmb1IvbDhqNVdlSzROMXwvfnY0STN9bUc0Tjp8P1NuVE9PaTBUZ1duL30qKktzdTo9M0QjPlJdbkYmTkwxM2JwTU8hWkU3aXBDZGFmInowb1s1X2F6''@;'; put 'put ''PUZ5ZFI2Uzl+LGgkbEJWISx4JXczRDt1JDY4dnsjdWIiIWI4Znw3cCNldjNmVTQlbEdmWHZXU2d3diFZeGA8UEllcCQiclBfL1g6Yjl+LHw4RSYoJmhbW2VHUj4hfDt+aT9AMipMXmE2SyRpfCNyTXhHVHxbPm5IXSltb0pWQiFZTkl5Zn1fRkxNP1VPdSR0K2smc0JuQWZ7ZnttYmU4Ul1uKj4p''@;'; put 'put ''KWFHKF59c1VYdlR6IWsra1Vkej5kW3R+b1Z3V1ZdTFFxOGUpdnVXPno1Znt9WXhlRDk/IzwwMnduQzplTTBIPXoiX0cza0dORTpXWGYpNVRGOXh1OnRZN2YlN3lhKyxWb0t9R2hfdGZPcGBEXXRHIVhuSmhqeTQyY3I9OHAlMUlYdX5yTFBWOz9zbTBeZnh6SXlvRXRiR2d6a2kvfHxRWDg2Wmg1''@;'; put 'put ''YTVDa0xUUVBXVD56O2laKi5UQlgpUkl2I29lW2p8fltSKEdgT0pSYWdfOkskN0xjQWQwXjozMypjPkJTeTM6bzA3c0A4RC8qLlcvLi4kL006VSM5JnhLRUA4VCFFMzVYVkklPGFEO0pAJixVbnBtTDtGIlNlYS5xYFIwLkFJWSZgSkJPKSZ1Y0N9ITV4JXBDO0t4aiglXXYzVnAlPCo7ZHFHc2w8''@;'; put 'put ''dXJ2Ikh0UUZUcSlgZDZLSitfKW89PXs0OjZLSlIvXnU5a3ExU31nJEE7bmV4IkE4dSRvXlo1RiZOfnYqblU8aCpYaVQ1YUowaEFWUjFXSHZWdzlHfkUjfTpfdWVbSCoiYyNSUlFEViFAS3pHTTBgaV0qcXJDXi9lXUFaTGAuRCttQVI7PEhddFhHcE5eTjlocE1acWIkTHNoNT9UO3I6SEVWWEU7''@;'; put 'put ''eGxnOm4+RzdzIT0vS2IpZWk1cm48YmxvKS4wXytyPmlrK29Mci9yL2swUiwpVmZaX2BGeFAhJlNmVWh+I0NeZks3Sj1faX5FSiI9YTRpcHY9R09nN1FKQyUoRj1xbkVTelJtLFc1O0trYS5oQEkuezQmI3REPjAjN11QYil9XWleP1VeQT1JVHM1Y0Ukd0kpdmJrWE9scmdyPFhwLn5NWF4rYHxb''@;'; put 'put ''UEt0Q0krS0Q7Pns7Kis/PUI3VHtHPkk0ZlpFJlNfaHltfiIybXZ1MiYiYFRkP08uR2c6O0NtQGo2cmh0JEZ+QWx8VF9ZeWsuZ1lgI35KXlR7RCp7emYwZiw1M1U8YHd7YG5mXk5YPGdIMX5AX21BTFR2fSFSKGA9OF91QkNBeU9fQylsUF9jZUojWDNqX0UlTERJb190ayRyb09NTk41UTtJQDpY''@;'; put 'put ''MHRnRjd1VHZ4fktPJG84WVpWZFByYCheZlhtc3k9PFpjTWNVWUNDWz5bOEY+dixlSDNeTTtaQSp1NClNRjdOcS4pV30yWWZKIUpUbywoM3orUHZpVCs3aH5DVFVXeyEqRGleMTZYPT5AdCg+YGwyJFpsc3BfI1s5RUg8PUpWaztwVD9NJHNkfEB4dVVTT2BPLm5+Oix3TXN8N1F3LyQvMW9fOCpW''@;'; put 'put ''SCFFMFFhOyhSayxfSDl9PWtKSV4jZFNiZ2FIZk5HOWcvYkUwPzNMYFdJL2tCX3VZJG9gdjl3PHtpS3VTdSQkOFM6bSlFM084fn12JmRAcGl+SjNPKX40WyJJTTlpdEVgdDh8IVsyNUsrITU8IU1aXXp9PyY+OyJ0MDRdI3dLIWouSTIwfH1gWGt2Rz84MTlqcGNnU184OkQmPktKU3AhYDo6XTkv''@;'; put 'put ''Kkt9TntDdjd3dFZdLkIybzM4bHJ2WkEjM00hTGNaMFpRUXJUP3R9YTpHeHR4SX1HKHtkfkxMOSkhOTt2UygsU1dacz56M2wpYkg1MiJBcGU6NjQkI1ZNPV9KSG1fNz9saHgkKDk+dWBtT3VAKDQ7ITBzaUB1d29FZ1YxWkxeQU0kSV98QlRkcWxnY0FPOH5eUTloLjEyfkUiNV9LQ3R3YFJpT1I+''@;'; put 'put ''YjhedkUqUXZleWoraVdDSm9oUWJrPFlDWXF+VmNqdj1NJCImWVFgTHl1PiNZKVBPLD9udGNObVpmW0RYYlBocD5xUlE/ODlOd0prS2lBZjB+QThJd2NFPV5gfS5rN29Ae2Y7Qj9zIyZ7VCZfX1tZZEVmTVozVD05dkgobDZMV3tUYGo4L1o7fFc5RD9hWStaLzIrI05HeWd0ekxUImZXbGVfY11d''@;'; put 'put ''UFRYdlVZb1g4KUxMem1jZmA1QmU9ayU0RjxuQnNbKl5TOFlUXyl8YU8hdXcmU2gjMGl+VDtKJCZDeVtlMCIueTI0Im5JPVZ5NGJLbXdJQEc8eXxeYyxHRXVKUUxzaTUxT2QlWGRkaG81cG8oW2cwRzF9KkZCcT9MKzA1emNjcXtSenRbeDVQK2puNmp1KWtzRm89a1B8Iy9sfnQ4O09nRGxAPHg7''@;'; put 'put ''S11tPWVYZzcxW09QSiNQOyR+ckIwaTNgbyV+Rm1Cfi9HQ0M8a1pRWzt9W2oxejR7VSZbWHF5MVVeS1VDXkxaMDNTN09AR2BUKFchOkVNZ3MmWWx+OSxCMl4sN3ZKbyN1aTUkQj9WckxBSlhMMHR1KCZXYSEkeyI3KWB0TTE4djcxcUlPPUtNWnVnXXM8OCF1eCNBVyFSdm5fSShBb299UVZAR0VM''@;'; put 'put ''XlRRXSV3UXBgWjpXJDpQSnJBRk1hdVhGdCQsR2YmIjN6OXg1RSJRMipyRkFpMnRJVzpdNnhaKkZ+OCJlRGcxZ1VeWS9bN0EjZChEeCxENWhjSjZmOXQ0MnVtMSVad3UoLzhoSUI5Q2hubHN2PWIkTCpFQTBXTXt6dTpJQ2VWMmAsNkgvOyZLMn1DalU0X0hKZEZ0TXV1NiU0YGk3Q29fRUo/X1Ij''@;'; put 'put ''RFlsSmt3WWl1ZV5aJHNOXTA8bUFCLkpvQmhRW2pER0JaZ3lkeE19SkN8U2lHMlFTMSFhW2lgbGYjNmBdfV4hPC4rRWQxdkRqNk5gK2MyUTtHIl0vdl9gejhHYylgInw5UWpOSXEmK25TcjBJIXEjTnJkNnB4b31dY1U1NXFEMTtrWE9daXVEKUJifFpiOE5ZI0ouOTdpPzwsbVkuZTcqKS9MYkxZ''@;'; put 'put ''XWJYczAqM2tBWjRPay54ZSJXeytuQiwodjZhPXRJY1NTMjRyfShZN1Rjd0grQFFlcnluXiwmcWlEJHRrdyRGNz5ZSTorV0lmeyEjODcyTDVoMFA9eX16SHtaemUsTnhLc09AY0N2OkJRK0VmeXVDfStkKTBTY01fNGphZjlQcl9fXylqbHlEWVteMTtha0F8LF4maThuc2s9bzI/TSxbK1svSmFQ''@;'; put 'put ''bUVQYEVXZCZ1PENycjd9VGdiMzpjcXF1OUdEVVt4YDx0Yzd0XlUpQypWcE5wIjNVfCo2XkVjWWApMUQ1Yi8+cV9LTU5CUjZnWlV5WkZ5XXE7ZCQ6KX1QYjFDM25gaiRfT093bD9SO3VeQk5iJXkrITtGQENjeXx2d3l1emBTWTVpL3EmIUFYSyhhJk9yJjVWZzsrVUYxcUUwN3tiNHc8diVnRG9n''@;'; put 'put ''V3NESkFFa3V4Q19XQn1FI1dHIS50Qy9IR3pBUUgvST9VN0gyJXd2Nl9wQ1NpSl01bktYcH1gXXteYHVrIUdtKEpOS2BaYVdKMSMuXV9yNGY0UGsjUmM3cD5aVVRDKGY/JSVMT0ljSmFCU3xHLD5GLnkuNWJDcU46OCM7KGlPbztrdENeSGR2SV84dUx4Tkt6YXlsemtHbnVTO0txXShoRVc8KUo3''@;'; put 'put ''cmZJWmYybTcuIzFmcGJAXW1ZbyN7RX15Yy8jP14kMSlVNCteQmJEeExASygyb3BiNi9wQWRdXUF+XnIjcitANmNsfG8pbGtlITJgVl8/Zi9EdGdePjwuemEsTURhLCVzWDplKEldVWdQZjMyPVYwNVt2OT5ae2p9WGpfb0omRWIwWDVEJlBOLE88bUtEayQvUEBbMl8mblZvRjlKPEdkWVBXIWwj''@;'; put 'put ''VyFwViVPaUlCeDRaVE9OTlJ5XVFiU1RTJm9WcU4uLjFzXm5GX09KK2EmMjE7aCRpcj4mIXNxaD5CLFVtM2MpdkJHbjpfVzF8UyZiVHNPc2JaaF9hQ3JUMmgpM0g7eUN4MCojWSk0RmQ3WnZfW01QRHNjV1Ffck98JClETihtRkIiLnFjZjE9O3soY0M0d3ZfVF1+MHsjVmE2RiMjUkZ+JlhBQEhu''@;'; put 'put ''czwyJXBMO0dGKyRfc0xqTmc5d1B1aV9YUiZIZn1bNXBUJj1LRTljKG5AVXFyNlJlbFg9KWtLYV0jLlBELGooQjNpTWtbJmxEXS5qfW1OW1sjPUA8MWtdOjNhYkBwW1lQMm5ReFVpS0ZyOjRQan5WZ1JVPXUzcSsrKjshRUgsbXdHZSNkdzJgeyN3Qm93M3JHVlIjcklbUjxoX0wyKXZUUSpSW1F9''@;'; put 'put ''RmFsRXMwZVo6MEpPYSt0fWQ5U2hUK0Z0P1dfbCQwb1g+TGV9ZTBNJTxPMEdhaTFKRSo+OlA3SltMcXVfTSU0MiosVVlJdm5yPnVWZklSa19JOVIwUDAjX1p3WEBhRExNflI1ckNvRmU+Jjk+bTtKNSVoXUZnT0R0PnMjM3RjbmQ2cChZYnV2S1sqO0JdPzBtRDUrUkUpd2N8UWxSQl44Rig/Im9d''@;'; put 'put ''PVQlV3l4fSk7fHksVlZ7I0Z8PER7IWM1MmZGV1BndXlRRmRHPl4vXj9ecHlENVs5dTFbRSN3bDw7c3kvMDUyMHx0eGg9dDdTdGxWfSkvKHdNX18/YiUmVlU9JCY3Z3V7fWJnZ0gyXTpeKDtLQCI3VGt5YGs9P35URyQ5TjI/K0J+KWQ+RjR2V1toVD1CTEM4RDhEZFklKy44S3xXMnRKPEM2bzxI''@;'; put 'put ''W1t1bWtnNT4/bm9DaipwRF5xbXx9YVcmaXprYltjfkg2RlZ3WVcpOjJUYzQmZkA8I1g6Ymp3akUpfEo4Y2xrbiFQezhAdVNKej1Je2VRVmJaWUsyUn4lLElbLG9sRDpoaCh3UjY7UGI/PWdFPE17VHU9Jl1fXnxeb2hIckQ+bDM1IWByRE9kd2RrInBRKnlMaU9kNWkvLCs4Ujdjdks1ZCFFSH12''@;'; put 'put ''QiVjUDh9SXdVSXlAQDxbLn1LWlsjTnJ7IU8hT1F0dztFMS99Om5wVEgrbWJ5alREK0dtWyg0K2dFKjF4d0M6U0NaZiI3dF4rVj5jQj1HeE1ydXNKXXd5d1shajU+Pz1XdVkyIkRMdG07KFtMQFozYzVYWixKVUVzMzorcERCUHRjam1OPEcka1RAaFdyTzNXK1h0JkVVTlUwMn1hYHIwMGRgW3hS''@;'; put 'put ''Kz0iTFB8Ind7aztKRXJdImlGNCg/TEBab05RSnpPSkNhT2kvXms+MTAmOSkwcVdULlYqNGhlOiU0S2dJdyhQOHldQ3BKJEdVVyR5dzA+eVBoQiF1eVR2YUVlRFZZK3U/WFc1NXFvLj10L1MzZVE3ZDY2MnprdWlWaV02anhxbm1gK2ZYSVMkQGNWYHQsNzV1aFlmfT1kbi4haSpuKlFMaSo/N0J7''@;'; put 'put ''NEYlPERNOXNtZlBLckVAUk0wVXEwaTYhLkJCPkExOzsienJUNShpZ2lxOl9XKDAjL3kqfixyU2UqdmJMUnZIU34pUT9kcHk4RjRydmBzX0VDPXM+NzNnTUsocS40IUhKW1huNWJzTjxvTzJJN0MkOUU3PWIhc1A1Y0RMQjxrRV9aUWA/eHRZcHY7KG4mJVpnZ3IwNj97PnhKRmIwdnhsKXBVVCZr''@;'; put 'put ''Kj1WVUAqWXo+c3dnPj9gflN0RVkrSCxlSytfTXJHLzByNGYiTF1ZWm84UTRdP1ZCX3FKIVYwT0FeP1VnZSZlOnZ0OVhEZWBdZCNCdjBCLHx+OlYiT11sV2hVNHhTZkoiVWxzUGA7O1ZPfHZ4W014JklScH5kMmQrRy4hbyZ3ZnJJQn0xKlFQN01iMnk0OE8jVlJnRF5laSR5VFE4P1NEbjhOK3xy''@;'; put 'put ''cDx3XkZEcUlNRUxfZ0RbKU9UY3BZd2ZoVHVgLi9RXn5vb1pzODs7aVAkL19kRUlnQUtYOz13LltYMyhTNFVbZlpiKGskaEZQaGpLNiVOW2c/QmtbXi8yRkt+bU12QyxqYT9NXTVAMV9jdDssR08oZDxXej9XdXk6LnhyQVg9VzY0aSo4aX5jelBoWG82ZjJCaUVWczJNSFozJUk8YnJfKTpXXWRw''@;'; put 'put ''JFo4fE52Q0YrdW98dTBhbFEmfmFnSWlvdVhbVy5LQEdZajRlbzQsOkk6fSk9VDZje0VsaD8rZ1ZEWns1IXNgKzpKe3BdUWUsOUtPfHxleUImaG5oT0IrUik1cSVZcW9UemNZIW41ZUdoNHs6TlVVbW5veFhDa2UsQz4qazlNc0p4fH4ifkoxRUEqbGg2XiVAUV01N1A7KTR6anFwfF9qLE0qYCl7''@;'; put 'put ''R205LDFUeTwiSmJxOz19fCVPSGRmIThXLmE4K3x7U1d+PlJxZlg6d15gM2Q6TG9OeT9gLjksdW5WSWoyPEhgVHtrN0ZQU0cpMGI6PzwoR3JUZFJRYjFXVnsrPGJlfCRebH5IdyQ1QjBKUUoiSzA+NldAYV9VZkdHU31tIkgxWntQP3hRJUlkXS9MSVdjRnd6bWBIR1Y7TmRKZkZ0dWleLE9xRkBj''@;'; put 'put ''YGxNLCgmez8lWSkyRz00RiYjdEpIX1BULnUhTEs6M2IyNlJzOTY9Kns5L2pxTk92SWxVamNyOC9YQ08kOUNFSEsrJkwiTF5RK0VAXXlpOXowLG9dTjpUQ24jdnVDUWpsRTRPR0BVVj98JXQuO3Z4LHMvSkxfIi9AQ2k3cSQyMSp2dXtiL3BuMFpzJHIqSilDMVJUP2Z6JDVzOT4lOCtnTyN2eG1D''@;'; put 'put ''ZDFDeS5tYXspRnJHRCxtO0pBdkh7Xm5RL0o+ZGdDanZ0Mz5XV2NhSCplVEBpVHQ2PFBzWi9OIU87ZURRdTB7ZXssP1taKX16JVcrKXk5P2RSflVCI1VAIkQjfmt0b1E8SUZDdGpmR2gxaUUoSmRPTzI3RkMxPzNiUFNEXjppRDB+RmssVCYrdVc/Um0mR1FqXVYydXdOZnMqKX5QUSJkQiR7KG1t''@;'; put 'put ''R01AaWxeLjBNaWNKKXxBZXsrLzh8ZUhqe3ooI0B0XUlBa0BIWStSZ1hdYiZ1NWo1IyNfYzBHJHlGWDZnWCxeMGNdP2F+K3RGM0BkJC47TEpuZTRTWXRDe3RFVjlpZUlCZ1kuZ3ExaDpEei9jNVd1e2FhQ24iXn5YWVUoPy5jMzpANE4zVkAvJXpVPSxdfUJYRjgxdXoucWRvLl5+d0NmfkVEO0Mx''@;'; put 'put ''O0JWJWZ4aDNFLktDWiNdUUY8NnErKUxQISFmdX47fU58UXN1PGJDWDQjemBmfUhffGcjK09ARH16QCs1amlncXAjPCtUXzpCIWspOHk3W3o0JSlYY3dvemYlUWVTfVtXKTJsYUc6LmBCdHs+NGBHbl4zYDMoIXgvPHIwSik6KE5TJGUlazthITJOWiQ2a1k7fSRqK291JFBsWD8iOnJ9V2o2YHhj''@;'; put 'put ''fXpBQyh0ZlIhZyx4MWdyMyhiPGQ8ZFckbSJfcU5jT3MkVi42NHFubyEhTD5ESn5fcjUwZ1ZpSkd4NFhNO19TI2ZKL0gqYXVUM0RsMz5DPTVkS0hhcGtfNHB9K2JeLGJWV2JxZT5WJlBbSy58QlRoPURSO2JUdjFJeSlVY30hKHg2O0hHL0lETiFKbjopbno1W3JtZEZAMVs3WnQ/bFBHKmM+bWEq''@;'; put 'put ''SkBmQ3l+dXdvPTE0P25fSGd+Nyh5VW9wa1M2O2xDVn1LOHdkcX4yMnFdSDBLYU1hQmRfcUJPbl4va0krdk5MOWZFMUR7UmZTKzsrIjEhMTkyQSFOKnguVl1ZNyRxPyF1fStSJnp7MyxienBUQnJpV09ga1ReQ1tLJGBzWTRaWGchZDNVckJlPG9rTDQlXk0kLmJ4d2lgOEUyV2BwSlBzaENScWA9''@;'; put 'put ''PUdaeFt0eX1hSlAvRkNARVB5Z1hxSUNEQ3MyWlpDM1cvS2FZaSQ4b1QzNT9gNyt4a1VIUC5NXWVwVXZlQ0tqKjs+SlltSEg1anBeKWpKYi88aGM0UlZQe0lqbGlpclFOWj5rTjRvKigwW1NYVlJSNSUrUXg0OW42MyxdXlFKPX12YCgvKCFDTlJLJWV6Qzs0Q3xAKDciV0U0JHQiQUthUmZVN19K''@;'; put 'put ''T3hXZTtVbmtIPWtiOl9sRzQmZkJ5PUpmc3s5QDlocDp+PjNVfndpYVhsWXFHcG07RHlnQH1haXRAKy9uVmYuRG9WfktWcVB7RTd7JDU+V0AyYGsuRyxoVVlpfWV7UWcxPE4zPXddblZNTm9IfGg4ayFxd1o7NlA6PTI3KDVtWGV3XklvV2o0USZtUn1UaGdGVz44SkR1PW5FdSljbDFNQ2wlMGhN''@;'; put 'put ''QVg5SEdGR0NeRiloVHp7aV9rIUJ9PzBJUH5raX5EZS8oM0J4bCx4QkoiS2N4P0ZkZi90d2E1ekMoRGVJa2ZzMz8xNjdSZWVxYV0jfSEidk9VIWt7fEgvcXcoR2JGJVlrRDdtMHpgODJ4fDx8MTR+TS5YYD1XX1JbSGQ8dDNSNE9ZOyV3Ol9RZ3coUDVZL3tXajl4YF5BO2ZNPEZFVyYjOktMcl5S''@;'; put 'put ''PE0/IzJ9SURHKFpMRkdsQUkuNDQwXSQsTWprPD9FUHZoXVg6d1FgY2hvLEJ4OD8lRyYvKGokITF9YzBOOTI4PT9XcGo6UnNEYSJ2RTtvY1JPPkRqUHFsIWw0TnswKWIoPFhuc1o1Lm0hP2RiRW9tUmI5LnAjIlV3S3NHM3pDXS8yd2wsPX0xNCxsPk5feWIhUHBdSzgzL3c5RkMjZzl3eD1Yc2Iz''@;'; put 'put ''JEpec0c9TDJUSVVVRmJXWVNjZW1RQ35MOERnRVFIM35bOz1GYVdMRCh8SXZlfS5yOj0vTGY4e01SI2FVWlpfOHNQL0Y7Ono9emZbSW9KY0l+eGcwSz1vW0JBPSthayxWcVVtIylCP3d6T2oxaE5BMnhlZXBNb0YhY21IPFM1QXpUY3p8cl1LVXJ5NUNTL2pQQ1oyVjRPfl9NZD4/bSQoRHdJXyVt''@;'; put 'put ''LjEwOGA4WXRySDxYZTcpa3h7LFU6S15ZVEomZ1hTcT1aKyU4NV5LV3RvPjRWaV9UZDc6bEd4ZHltaEVsU1ZsSSo+YGNFejUxUitaR18oNCVXYSMsZXRmfj89UFZKWzl+dnc6XTgxaVFhdSQwKzBYPFY1QzgxSD5PfTZYUEQzPD9VQUYwQlZbJFB0ZEMpbm9ENlh3XUBzOVohRyVgVVN4bD5eMDw3''@;'; put 'put ''ZXkoPzRVcmFxV2xhS244SUdHYEU6a0lXXzR2MlZIIzdmdElEdFZpQTxgelFBIXMyPE5xMXRMemk1SV0+VyFDI24jQkBVM1RvaXR0bj51SWdhQkNnfHpJTWZ2dCg/NmskQyklPXJGYlB8QnU3LEo+RiJhVltVK3pUbTNkOXQ4bHtDd2JSaWlDOiYxZTRkTT1KeCJ1YG9fXVFofiRjNUJaIVVEP1o+''@;'; put 'put ''WSwpLEVVWkx8azo6JktJTFModmovN1FZJnM6Q29WTWQrRnBlIioxbSNCdHBmZVYzTyVVWU04MkVlRitAMzNyKTUwWGslRygxfD82VzFMS11kPHdzUXFYKy4iPURMRiltZnxCSjhFWkxpc0FQOkJfPXpFQSpFYiNNPTc+SWU9VFF5Xi5OL2tKRFJEdFRqeGY7Nns6OEJPKilnTDFwNEZSSURyKnsh''@;'; put 'put ''dWZ7KCxkNEl2V0FpLGFbOkteeW1BVlRtRWlHNSxSRXVhXn1GWTYoZW0oO0t6KUBsektdY25TVldXKTs/KnlDUiNde09TI3hpc0BaJDpbYCFhT2krMzs9Q0xwdDduRWpdVmlecF4+dVF2W29UfkRFan5qd3lOO3pLUmlURCY7W0w5MjFGdDcxV2VbPnElJkt5YTc8VHpwQFBdUHE3JmYvfXBxPkMw''@;'; put 'put ''W10lYGNvekJ6PnZdLEVtVl9TKTQrO0BWYXdpR04/RDw2eV83WnFqKnE2dT8yL3tuRj9QLmx9NkY9cityamB6QXZ7PGhPZEVMPyZaMDRoVFhnOChfcF1wImtVKUdqdC8rOU43P1VjOGRIYVMpbmVpQD1lRjZvMldaJGN7ZCoiJWtoIStmIVtqVU1eVyNPaGdLKkQqK1RkVDNVaGJfO2h3UkNuODts''@;'; put 'put ''MyJnYG5rNTI8VkNTTUB7LDdrZC9fIzd1Ujc7WWUjSGZeJk9ufnh6WEdgbVFSZT5RMnZORzU/IlBWUXNrZ3liKX5BdkJKYzsvfCptK1l9emZhXVRPdzg1VWxdKzwucygyYGlmcEQqU0l7P0VMPEBVY0RuZFdhaFpUYiU6a1hiITVQQSFZKVs7ezA1Nl0jQiFIcURDO18mMTdXW3RQRiw/ekN+Wl9Z''@;'; put 'put ''ZT1fPlBVND5APmBoaXgzXXlPOm5DT3QyYSNsfVV8WD4zKX1UWSRbYENYIylBRXMpT1gqTV9iV3Q5SjVOblI0W0leYlt1MEljPyNMYkpkTiRPbUl3YTUyeD0yUzk3SXFTUnRjK2Y2V2ApZ2ZyN05FcSJeNDJbN3c4RmFCfkRLcTk5OGxCMzhGWSIiVXhXeH1pRmh0XzhGMHooZlBnKGVZV0kkIzkv''@;'; put 'put ''WyEwTWZQLF02ZlJrcWxRUS8mYkZASFlmbHQ+Uz9MOyhRZE5DamdybUImKT1vVWlfaihLMjs2IndLZF82djYwTGp1OCEkfnxmL2A3QCUxcyNNRmEsPSJwMEM4cilWWEZLelBeOVpyNUR9RTc9O3Esa0MjSkJvVkliI0pbWSJSU1p6NyJUQn0oYXlUKVA0JDddZy43QzwzQkJBZ2R2JTR+ajA2cHch''@;'; put 'put ''T0Z8LE96N2pIZEsoTlRhaGk4OGpEZjYlNnJaUlBYI2UwK2t9YHBXT05OcGclUTkmakhDcnxzNWEhdCo3bnxlPXh0L1E+NCF0YyU7X3xgdVVoYnBDKSxJPH0pM1VSfXtIYHpNPkl8TTgkUVE5bm57enM9Iz1adkNWIztIN3VqKCg0aVF0dVZreT9YVkw2by9sZDxzXlF0QX5SUl5ZeSRHYkx0PlVF''@;'; put 'put ''fSh2QE0vemU6fmhdbl4+fkF2I2c1M1UrQHpfMl9zTTwweDw0Lk81WEAxRloiNFdCI25rUjR7PWUhOjo1TSZHQylIUWZMTSk0clRdQz5Ed3B0WCFPXyR5QGQ6bGxTdnFWU25qfExZfTslWERlU1g5YDVAdyhWX2pafCtOZmhFLiZUcS89QH04WDAvRFRgdXQ9KWdCaFV3ej9rJmM5Nnp+P0wqaiIv''@;'; put 'put ''TW1iPzEkNGB0YDVPImluUFhQeDxlbClTaFE9N1Jkej9vd3MjMkcmS3RTdiVlWEdlRD08NmhhI3xtbHIpRz9AR0lvXjlScXpZWHluUXRGVm46aUArbSFrdnZuYGMuIjZeZXozbmt6Y2oyK2UpIU9xXkpPNmFQVW44aFBgIjA/RztRUCQ0VVhuV2Noaz1aPmoodEssUUluR3prdGhCIWRxUnl+Pj1H''@;'; put 'put ''NX4uWnRwbFplWFJYeC82UE9wYl1aXlg/ajdQX3I4fTcsbGI2PkdhNnJreGpkMD90bmshZlo+Sms3LFY9Pks6XkMvT298Y3VdcyFULmQ4bHI+WUZDXj8wN3ZWOXJbfk8/aVJSTUVydSNKQWhWWEc0UGsxT3AvOCM6Tj4sNFR9fEcieypfVUtNZzdsSEJ3NCgkem1PM0hJbj11LHo0flRATU1sdXVZ''@;'; put 'put ''IT1xbDYlempxey8mRShpTHtubE5bPz9GdXZlQk59Zmx+ViNwdlsle1JgTVp+e3YiZkU9dGo0Slp0dz1Yd3k7V0gqIWFJJlpyUiZyUF1RLzxjeCo0LFpTYzAuQzRZMCVZMnVsU2tZRXtkKEkuM0Y+L3YuJCMzQSsiKjRTckh6TitfX2MlWjVyal1YI3F3Z01RYEJjU1drNjYkSXB6TXt5LG48PH0r''@;'; put 'put ''bGFBcVNveS5BIUF3PXN+SXc+VyhCdzdnT3s9QCglJFozKjlmcik8JUVHSmh6Z05PcHczfDFfI2lLUHh9NEg5Rn45b25xTVhINGNdNTlJajY5Q110ezF8VUZqXTFRTSg0cFJ4UDg8S2ExUyF0MDosYDhnb3h8T0RDd1J+SyZySCNFbmlhYHh6SHNFTkFhdCZSQXhPJkh0IWhvU0soRzIjSip7bG1C''@;'; put 'put ''c0gwZ3dfQjY3IkFlPngyOk8rfmYjcTd0bUhMcD1mcjFpODZ2P3w2M3VuX0E3dDQ2fFB2UylKMUMqVipUKnFfJFs1fn1bcmVxRUdwQXZ3TVtTQWJdRmc6e3lTayI4OkpiblJ+b20yUDI2KCh8PlNMaCQzfDA+JkZEO0JJelsxU2NvL2taa0A+VnVILEpmSTNgcmhSKCtOU3BSUntLS2dDOCtIJFEm''@;'; put 'put ''dGlhWnZJbm18NXEzbT5GSTB6fEdFW0J7IU1YcFFKSHs2SyF6RFFVXWBDW21tdmJ2bzV0PTdUfGprTVs9e1BjK0pyYllpPEA8OD1xcGhlZl0mX359OnZvZi5OSik5SDM2eURAK1l+cz94KXswMj5ndmQyPjF8RmtaW0lJNTpbJXRSKlo9IkAqNShHPjZZJFQ/WWIxKXRmOVopJDQ5cEw6WVdoQnRn''@;'; put 'put ''LitLdWVMYTtuM19FVFROXyZUIXRnTVg7VnpFLnYqe05ERHpLdXlaeVJyTEB5PHN8QlZgcUdwXytUWixdU21GU05DdylqbDRoS19TVik7InwhOHBEfl1WSTRnWyopVlppWUoxZTFtTSl7RnZvSn0sPzNaI2AmM1RBSyJBel5pVnQycFN9eyQ5NDE1O0hVZmhSZiNaKHhaTyxGIzlmUyN7IUgmekQv''@;'; put 'put ''LnsmcHI9bXp5aGp8RmwsK3NwNXk/c1kvOyt5VzE5bCU+amd2ayVDPzVnXiVTbygvV1U4dF9ffmUzUkVAfHcuKTlwPGtURHNUdlJCPUAmZXl8Pm50OXF0ZENwcEhuSEpiZy8/NzFUYiFMPCRdTzJDd3pvTDdkQW8kYUdBTTMjWUpyfnhFWkthSDs/bEhlLzhCayFAZkhjbmBdPFspYUFWbnRWIUcv''@;'; put 'put ''TyJWMGYsank+SlZGZUhkezw1X2p4XUlfXjF9KjgydD9re0hGbkR6KHQvMClIYGpFImtML1VJMF9LKUxMRmIuTGZ+MX1Gay4xclVbRG9RVT53cHFlPShkMXQuMFlhUmEsQHEyalJ9cFJIL0koZ0xZPC5Cck8qfCM0XnlyLkJDTDEsSS46UW5nKWZPTGBOPi9ZSilCJCFwMz1HTlR2a3YsYk42bkRq''@;'; put 'put ''LiQ4MTZWbzJyNFViRTlJN3cjeDR3O1o9b0JRfnZFQ0ldfWxwJGZlU0hhK09LajpLeTg9OT8uRCpVKTEpWmYoXzhra2VucEtKOVUmdmkwY3RuaTw2fHlkNzpjdkNhJEVXdjsyNSxmP05RNGZUNEpqVC9gTnsuc0crKVNCYzJXbnxebl5YaVpCZ3gsL29HVUpZYWdHVUA3PE59dihrZGV6ZmBbQWgq''@;'; put 'put ''Xm4zeDF0aXVCaShOckd4TSpvXiF1Qz86QjlBJSpDYyo1L3ZrKVhnXlpaNSgyMEJuKjYpSU02KjpeQ1NjJlglL3goTmlvK0BkJkh0KH0mRXQ9V2pPeyxbUT89fl9rNkArWklUVi8mXWxjbWhuMiY4WXcueyp9O2pVTmBdPXFlZWguI101dlB1JWIlOF11PG9AXi5bbzQ5NkwrfF4pXlh+ZVQkK1kk''@;'; put 'put ''ZU5tT3x8Yyx2MSovTyYoaCwvTUk0KXFZVywmak49Z1tnRVFTQmV1L2s+fHFdNjI8O3tPUlRbejxzfDYwTWFJPmVsaXB+QW83WnR4dz9JfEx5JVh0cEMkZ2hIK2RLKFdGWktQZTRWSXc9VldjR2Q3cHdrUzhMNWtPa3w9UytlI3hXcVhuKjpxLmIlfiwhYlAwPERPQ0RaZUJQOEskIldVeHciTDNU''@;'; put 'put ''PTw/Vj55LCl4PUkxJj5eUztSIndnViJDJlFhXUpNPnZEN2hHfnZIczQ7eGQiUCt6WSlbbSM9dUM1UH0lU3JIOGZoKltfPEMoYmkrX1h7SV8lfkU7d31fUihDWyldV0NeWlEyLz5hRWAoI2shKUI+ZWE8bTNTSX07O14sVGgsVyRzJVR0Un03WUBDdUl3L0tkPzBDKVQvN1tpb2h5bVY3OS56Tm9B''@;'; put 'put ''c3tMI3c6P2w+cGU9QkRMQDo7MiVMdjc1VDdnNS5fJXAlKUteZytQQFR0PDZXaGFMeFhNOFsvKnJKNWR4Lll+L3ZCST4yWzFiJFRqUVNaKkcsbFgoJmt2QF1kdzIsVDsxXWE6cEdDUVlPe2B2ITlwLFNQMXl8V1BoLy9oSyojRHBNUilqdjxXL0d4VTIqaHRFSFRJOHNqNE8+OmRYJVJxJnNjbCE5''@;'; put 'put ''WypAXT07TTN5KkJrIT07bCZNbWZ8PDRtZFNiSUxPRGY5ImhYX0hSMkF3fHhyNCxtPl8uUi8wY1hfaXAjZylAVE1VX0didmdfSkN0ZDErL3BmZFQ+fWpCdVNkX0EoJD8vPSZrKEdXNDpLdSpzKCtNS04pYFt3ISYoZyl5U3shd1lQSCR4QklvcixPKzU3WjciN01qQVMwb0ZEaD9ZVjU+djlyNnw3''@;'; put 'put ''cmwsKVs6VXg8ZiMrKVRaXSU2dWo4QkUuKlQ5bTApcXZDR29pY19IayspSnRMPk1tV0w8OFMvLnYzYmImcHRGSVRvOGR6aS5eOUQibCUuYFNUVlZORVRZclVYcSh5YFRDVnFUJkRqRlp3PF9CN01VR1AvOF9AQkVkK1J8KEJNTGp8YntrQF8zKno8anB3Sj9ML1hpZyk0U0YxMDB0QGNOPVlncD53''@;'; put 'put ''a3RvNGZ6LDhEcyVmfDxsYEQ7Ki5iQ2pWUDUhKGlYODh5XkdzNCZETDxxcSJfcTZoPTx3WClmMyosUnwiR09sXkFhb0VjVSRqLHJdRyhdW2NbcSxgSzI6czt4Tl0/ezJfWnRYLDNrXk1tYWpxYWZEeWc2YjlncGpXU2duaSIiQSsvNm9nXTE5YWpwKkMjcyUsVjU/SyRqTng8XyhidGVgfGZSS1Jd''@;'; put 'put ''SyI+cFZOUU5QM3MxeVo6ZXpoc3cuZnAkMDBbYllhcjt3eGQyYjFPLmhPalltayx2aGJeYDgyUl90ZDRSOVhCaW1NRnwocGhhUCNxMzheKltJeFk2fmE/KmQhYFB7JCQzKywkZDN5Xl8sKyV1WlVZUjA7Z0VEWWskaStIeHx6b3MzYz0mP21haXdJViFSS1UlUWgic0ZoVEk9LzMySiY0fFtFK1Bq''@;'; put 'put ''XmA4OCxsdjR+Y2dGLEBgJXt7JV9sZDpiPUlAKjsiIW9xWmpePTshWF18PUNHI0ZXX007bG55YyxgJH49Z01pJCY1OHVxckwrX3FUXSNnKXRtYkZJZ2JGITF+Tz9eKkkoODBMJFQyOVlMJT15Ln55dXsoWXBbPkNPSXY3ZD0vN2lyTERWaSJnKCpVWjsjSUZIVi88QXJ2QXohfEh5KllJR09wZHwq''@;'; put 'put ''eWVuOihpakdObF1+aWN8cl95KFRENDErXTZEdzs2QlJvTUhlVnI/eUtVVUh3JXo3OzRMRF9eRkhETVYuRUhzKmRqKVRbekRCVmlUYmo4JkpUP0Y/YUMsRTQxZHZQdG0uVSxHKGlmSjZPVGx4PDZNMWFqTj92SGhwKXlrKyFXNG5IVlh4W04xMntibjYxZ1hSYzY1RVRKK2NoK19KaFQ8Z3I9QDEw''@;'; put 'put ''Ykx5SD50UDp0fDlHRUQ5KlE4K3svQV1lW2olWzk6XVYxU2pKQlBAJHJIRGkmZ1QuVG5yJitaOXJnen1UQEY4Ykh5NmVMSGJkXixrZyUrekBjLzZCa1RuZVJLTXFSS15AS180bHY3cDgmd1dXT1NnOzErKXJrVFgmX2A5Nn5kUiNbRkJebyJ4R0dgWTZwayYuM1ZFfkU0LE5RRVtZeGV7NHBfbSpn''@;'; put 'put ''eDJ7UVU0d1BIYzt+bl9haGxDPXBJeHE7KyxqfWMubGl7PSJOJDpxeDU9RklAclk3UmlkdVdxTSwrLjtWXXxNMnUyI0hIMWdnTXdeVVY5IURHdmJxQldXKntEUntuJnxTOmllaSNdRVRoRl03R0JEdEdZUWllK156eT49fV4uIkMzdj52bmphXSRUTX5MWnpRQGQkSnBUaTVeRHNDRUV9WkdwaFEh''@;'; put 'put ''U2VRP1d+cDJ9NXpha0JbTHVqLkExK1g/X10iczJzL2FgT2AlT0hALHpbODY2WFNbVWtkR3hfMD9aeDxCI3pxMFYoNiJbUFc+dzU4IVFbOHZ0XkQrUy4hWCRhKkVIe3pUMHQhJjU+ZUtKSmZlVXA6QlAyZj1YeVo4O0lGWylTKnkqOkNOV3xzJDZ8SUpGeSh+YFBjZyFmNXpwMUd2ZTgjK0hORUhl''@;'; put 'put ''JXp2MXFNJEA9QDwzNFAoR2k7RVd2NUwiPGMvTFFkNF40PjpYL3A5WX5IZnNyQ1tWbDlyc0RJMnx9MWJjYz03WTRZbjpsPTxlcE8+Zmo0RSpHbDJYNXBHbWRKOENaQntTd2w+eXl7bisxYS5wcy8iZTZnVmpqditzNCVjcXdHazEqYm43PCRSdHdxWzVpXX5sMUxCaDB0NnB1XX5tY0cwUnhpd1ll''@;'; put 'put ''KE9PWndSUUVWYkBsJHJ9NCQoKD5oW0VLM3lLe3tCaXdHJDRWfDooRz0/XS48NHFWLGJ2NX5pPCZpY04yVURQUW5PJntDenFbYiU7PWlTRTB3ST9hPy8hU0NPX1RYNEF3U01NOWEleiIqR11CbFpgRT4wNT41cCRYa25laXh4TF58UUQ/MVU6blU7fltPentBbV5qR2BIbHYyLzt0JTpteVJpUHM5''@;'; put 'put ''ZnN4X2FxTCFsJEh7ZHpdUzQwZHEkLkNiSllMVVRbKkI8WSgqfDEoRkhGTWhsVmN+REA4ens1bHRbRHwoXShWOmU8UUZ0bUZwe1BgcV8kSV9lKy9gSEh1X2pBQ3FmTi5rIVh3R1ZpNipURipUdWtKR2YvSDMsYW9CT0JeUEE6N3ArPnFFZG9WTSY/YiJYN0IhQCs8eShIZG5HPTVrUSE6b0c2JC92''@;'; put 'put ''W0AxOkd5cT5QOUxuI08yUlU5MSZ7fStFcX18Z3pSP2t2MUc3LFZQZC9CP3R0Izgiczd2MTgjMmFbX01kTGh4PHs6X2hXXUlLM1oweSsmYT8yPG5ELFc5QGhJWz1QRm9ZNFltIi9VOFdhS1RuYm9+K2t2cVk2ODJPLlcpdk1zTFdCVE5DSWkvPVg8LnVLbGZ5PyU3Jm86cj1kc35ZYXIkOStMYXp6''@;'; put 'put ''VE5fcnAjTW9pY2lEVXlWI0A7JHdUdTBYdFl7WVU0YVpVeWxbfS5IWDxOc2kuVmdHTHpuR0RALmNTekVYRkdOXiFUdlM/NVBuaXQ7TDpnInJJMFBpfkJqLGI9OW5dSkw2bz0jL215YTFpZlY6ZloweTY/ZU83fFpDcmoqOE8jTk1eeTxrS14zVWJkRGk6V0JJdy5AeXNsJEJFXllvYVtFOjwyQj9Q''@;'; put 'put ''emB3NixRTkkxYmlzND5kc3l9SW47WC8sa3tQO3cpfSQ1an4yY2VhWH5obFdnfCFTRCxRQGl5VTd0PHZ+Pl9gOC9xNl1aODwhRGM8ZT51dk8kOTtPRk9MSjVzYypsZUUlb2F6PDFpKnBde09GNk1AJTZQZjhXc0w+RUlONXhnd3IzP1tZcVpxVDdKLnU1fChbcTtRLGhbTDJpZmlycEBldm1dVHJZ''@;'; put 'put ''cnl3eVpOMjc6S0JFUWU0PnBmOFFCUUtTSGhCXl1PQzNSOjpvWj5ZQTolb0NRPjBhenluL10ibTV8d1pOUD5iaUhlSGBWSmJvPyw0fVpUdHp6dT9RMnBYeVFTKHF8d35gfjFMP0RicUUiJXcoIT96cnl8ST53USZVOTY5Lj98QlF4L1hwK0NZWSEzMCs0WlI4fjdFMCxEP2lbKVtlZkFbbnFmNV1R''@;'; put 'put ''JCllKFNNT1V+Jkw+MyI5S2RULyFrUVlPcFdSeDZkNF5UWCxfWmVIWHBPXSl+Pk1vO1BLJDBRS3gvZDRobFBxdEdxWktqYjwvNjhELCtNJDtHUD90RlVzY1d1dlIyMGpSZXZYJkpSWDhTaS53UzFob2lnW1ovXUFyby88c0ZfWk44Tis9O0VGaHNUL0NPOH5BdyUoYSEoOWpXOSpZcj9tdU5TKmBh''@;'; put 'put ''JitHeGZaa2BEclosWlEhNXcoe0N7NEdOSTVfSDt8UUlaIXZVWnFfWmdET1UlOU50IUo+e2VmVCV9YTFwZjBffDVEWWlLV347KE5gPVNlYm0pfWNQOipScmlFVmJMVkZERjduWHgyJmJAKVp8VS9hb2Esfn44aDdbImJXd0tOY0BCbz5GPCp3QFAuPlM1WzhFMTsuPD5OKDB6YUkoXTR4PU16THh2''@;'; put 'put ''MWM1TSJjVH08d09NZnhFR3EuYXl5W24qbHU4KVNfd0drQyhxYVZBRTJ8SigqRnI6Ozh4XTF6QEQ6YTxsWUpicmpfS2I4PnxIQm9tZGlhc2c2ZFdvOiQyZmE0ckhNKStOfEJ0clo2RyNzOTcmcChPX191IjIvZj52Q3xnUypZdmx1cXF0RVhdIXRxdClsWlc9MUtLYlg2M1FhKC9nLz8oJXMwcVR9''@;'; put 'put ''QVY7TG93fD5HRStzLlkmSElpZ2Q/bVpMX111VTpaaT5mRjUoOXp2TTk7W1o3NTlKfS9EK3d+ZUohQWc3IT8uNElRUGdWa3REemVVVWBiTTdnV3IiNj9xWjF4PkVlRT09YWZlZCJzPmFhbFg1dzB8TmxzIis4YVZhN3A3Yy5+KiRwW3VORV5fXTUuNS9tOl1pNn5PcnFTdSs+TX0lIkMzKEteVDx+''@;'; put 'put ''fCtoSixkS0RuKCtjcUFab3B7JkU1NDtlSD9+SnRFMHtHJCRjUTNePj5Cdy4uK0ZjfVZhZjJ3MElUL2ZOdFNYczRdUTlNQm04IkhGJnNqdXszXVchYS5xIlJVZEtWc11UZy40U3A1TS9KakVTXTZ6NmZDYyUqJjMvZTVvWjlCfjwpLzhHZCJvYj9AOXBzUjIwNTo/d1FASUF8IyNzLj1+Ijd4YiFe''@;'; put 'put ''VUMjfV9Odz1JPDd+IlV3QGZMb3xHeVtyZTNUbWZmfDpEMUVZfTppSztfW04iUTM+MTFqaVY9dHZjKlQhdGltL0V3N2YhRCUjTiVKZ0ZIZHQ0bGNgWWo6ST8kUlh+MXpyezcoSzkpQHRiS0MsJWM7XWdqMCEmWz8jaDJ4ZX5jVlBNZDZvM3tSYldgTndqfD5HQHhEZ3tVWVFVWzFPXzp8LGhFZW5G''@;'; put 'put ''NHg1RSRpW0V3UUUjNDRHUldQcEEsZVcwPTZRVmg5aG1oSX1fMTJAJXxlK2w3X0B3Kl1Ley4hUX0yT3lQI3JLYyNkZFAyMlhTcFpuMXVxY0VTLmNRSFB0Q1lPRiNENmRhMnJ4KDA2UGFJUVRfZ35Oe1g7dU12ZVUmKVRwPjwvdnlGX0xLRWZ6KjRGJUJHQWs6JUVHNUx0X3ssM3crMiZuTF9mKi4u''@;'; put 'put ''fX1PSUBzIWh2NUFqUX16aWBgMVhyTS5VP3wyNWBjfkh5TkpqU2xIOnFlZUxpPEldTWl1SGh2cG8xKkdiN1BSTDN2d0U4N1lhdXRhaHxYSFhBWTo7aGhTeDxObHh8Q0s6RDRJNEYsQEN5Zj4xTjNkVzZbSEgudUJGR20yKDReeyM7XiQ5W2hTX3xxXTEjR241NEZCRi5aN1c7QmtNUTo7X0ZBPCsl''@;'; put 'put ''ITozcWxPaUhiPEdQLmcjKW5WWyVZSmFJfCY7QVExJSNAKG5mZTtDSnhyUCZ1PDpCfkZRbDc+WHxqO2lEKEF3RlZJVHQrc1dpQzBQYnA3U0BIXno1PDsvdjtaNH5Ia199TSIrKEk0bWBeJD0hQm81My59SyVKalhOPEx7ciQ9a1U8VXAjKjBJYGZjKGs3OSF2d3VbOjdlMVZUaHNKJEYpOzVWfFE9''@;'; put 'put ''JnlqM1pWO3NoXzs/N318d2NpV3s4bCNILkUuek5zSSo6b05Mbi9hIjElYUJrbmFBJS9Sej0sWT0/OHQ1PXRXUj09KERbcldtXToqWDN3NSo/blhVfTMpfGBhIUY9Mik3VzY/SnREUGZzMTdheERoUCUoKDhkWD1TUFhPS3hTTUppWi96Y3JHXigzNz4yelJvIjxANy5fY0VveSJab0AmXUpvJWJX''@;'; put 'put ''TzVgWE5NSEZgW153TGRRaDRIcGNtMzwodVY5PGp7LHtpdjRUWFY/YUJgez1GS1BmWVAvLFcxfGtmNms+cCFyJntpUXA/RHVwPWg9RSFVMiJpPD43NXc0OjskWEosdF1pbSxwZVg2RXhNfitRPllqX0RlalFrWkxUTixNS197clAwemo9P3pte3hndjVfX0M6OnRYbHtrR0FPNUgrNUlqeFBkbnJe''@;'; put 'put ''Sjowez5nLjovVl1kRUBQKTNSc2VOWFdWNXU4JDJPVW19dTRMSEkhLkZNLzRoRyEsd1dGVi9sVzx9eExjRkRbIXVgOChRMn1KUkImb3lMajYkOj4iV2hTbypRQnBmMHFHUT9OQDxPdVBZWTU6Nz0lQGxoOT0laDNuWH47XmszOVoqRzNzXTlPMltjJnJbb0gxLGFVUFpsZS9JIkR5VlclQGNMMj9M''@;'; put 'put ''OS9AdDo+U3x2M0N+YCFpLzgzI0hJPEFbWV83KkJmLmp7bmpKcGBtPkNxVE0hPzVmZCJjXjNuTltXY2pWVn1GcCE4PS5HSCp4Mj5TbjlgPWU3elovak1aVXl+QGJKXXA1JmJ2Y3BIJHU1W1E+XVdPPmJtU3koMD4zalowOEJFOl41YjMsZG8pTD8he3xMUTJyNCUkSDsrdUdgSCFNJVs2fWJ3UDlC''@;'; put 'put ''d2hySDxOIyNURkZBbUByTDMrLisrRHJlUTc/anRJb2Q4Pkc1ZGVPKHcyV3RJfFA8MDNfP1Y+U1JefjdPZVFnfj1XWDdLZStfQH5JcjhpYislSTA9V1kkJFouSypAKjslQDBtW1E1eXNASmdlOzlpVHVJdGliXSEsaDpULm8yO1BwcT8oM3lIZCgkfnV5N2M0bio4X1tveEVuciFzfCVoXUZHTXd1''@;'; put 'put ''dndEa1E8PS9hIjVqJGo7MmNqZng8OGZIYlY0OihRfVR2WWRKQztUSz5DIW9bIUZ8PHBSTDVNZWpOKEBkMmVaZj15O15aYS49JTs3KDUpQm5zfmpFeGUpS35HUWYudnc0Skw/W2Y1b1JObUwvTmBGQkNpb3ZyVXZwVFNwei9nMXh1XWNdSTQxenQwQE0mfS8weEZLJFJmNH5Re25MQEpuKW9SSnAu''@;'; put 'put ''JkF0fCo4SUVacGZLSUhne14sSUQrM1k4eHkhXmB2Wn1qPl9RISFZSVkqTy92VWtOPGcxXWkhTkZucy41MTNta01FUy9rPC9DR2Q3I1N4azZlNTtFazs+PzJ+I0xEPnE3JF0xTGNRM097YEFaenhGKWMjaTdTdiVXSihHQzghQHNGU0MwIlgpWSVVJkh2YWlqUFo4JWM8LGlreyQofV4sPFA0OUBi''@;'; put 'put ''KiVicnxfPld0TU55USp2YyNJUFJiOUlMJSIqW2ZPbUJucHxINk9JejFHWXk5RmFkV0NKWk9iRmZTbnRYLyZNI294OTxIVjAyTD5nODtlQHlCaTtDZFNEY2hBN14oNyYoZVkwTzZDMT0iSmpfRyZyKlhZKl5uNCooSnZrJERGMGk7Uj58IVpEJmJlNXVAUVIwMHVYV1pZOFVaTzEyXUhJJnpzcWp8''@;'; put 'put ''b0orK0NsOT5tODdFSz56ZnNoeUJsUlgjYXhQdzJ9OURgSEd6YjVDYmNWPSoyZTopR1d+fjdJU0lNVmJwRXghVFhNSTYzNFp+K1clQGpVa0JtMjskVkZXOm9qJGB9IUhMOzB4T11fWC4we1EwRDd9RVE5YWlhfGRTQWZ7Z3RneHt+dV9IcFNVM0lIL3hjViVmZUFXQ2BgcH04IktJU3NWanptMFln''@;'; put 'put ''TntVQ2QkPGcuZlc3fjRlVUpbZDZkfFAibHFwaGc3cD85IWZfWEF2cGNweVNRVmUral1vKDt0WXohUTBje0ZLOmBSdSRCc3l0RG1ueVlEOy4uRnhMbjhkV2NfTWBvdnQ0WSxqX1luSVAyPExSPmhpQzdaOT1JUWFEJDpkWyxXYG1POF1iPUg8aEk0TCpjYkZ3LCgqaiE4T200QG1+KUhoTj8yXlhv''@;'; put 'put ''VmNDOm82Xyg3Vy5ScnpTOWQuP217YHtGTFIvQy8kPUx4TWhodipEaUBYX2JfJGFVMyZVeygvWFNYdTwocDBlZXtQdDZUOUNTIlo2bWN0ZV47L3dRS01OaHUmIyl8RWFKWk96aWZENGpYVGc/KX59SkhodSVeYnZGQVI/XXhNLHxfN0Y9ZH5COV99ZFVBQzZrTUdmTUZnLkN2YF5vLlRzNzQ3WDVz''@;'; put 'put ''UFMlMEp2clhvRUEoNCw2MV5zblVGd2wjM1hFWGdWcEspUkhmQDs2UWRVI2UzZ2xjJissSiFbNmdVSiRFQGRVNCRDaTc8UDgvPUlpeD17MVdtL2hQe1FYL01JWCteSHFraFYzd3w1XnFgMjBRbSFvS1RCOVV3VSt4I3lqbnV4MEc7QXNiVXRvQEd4UXBhRz16dGR6a1sofFFqOyMwXS92JmhmQz9N''@;'; put 'put ''WDdlXXEzb08ifS9CVDhie1JlTmQpfWJoakF0QSIjVXBzflJIXWBrRipIYlJ7OVolOkRlJihrQH0/YjEvWUR8TFd9JU4jTF1HQHJmbmhJcnpASXlmOXB6T0VpW088cXJ5dmpjZ3k6TkpOPHFwSEh9NTMwUTIha3FnNEdjfWJxcTB5cHNbfl5HZz0qK3ZObVgmWVJ+I0BRc3Z0cyg4O2suSVY1NFBZ''@;'; put 'put ''SzI5OCw9a2AhP1Z8VnpXP1hhOzM0fUAsWzNDZlN6TDFxYWsvNng9JUB8UCN6TjcuclVGVFE+O01rK3tLY2A/LCxPM3Z+ZmNoPW10b0ZDPnI1XztWOUpWaH1TWXYkTDlfdVQmX1tKPip7WnpPbXpJdCslPFQ2aF4kS05mImskIk1kdFZzZEMuIjY0anU+KCN5XTlxRlZIOyJ2I3hhPGRbM2QpQDRM''@;'; put 'put ''WmU7S0NDOn1hNGc+cywveT5pWEtaSy9DbHgsQ0BvJT86WTBwXnJuSyprImdDNTFVKzhzIVRAJHFPcFd3UTEoaFEuNDc4Uno8YGM8cUVpMnsoVHFOTHk5O3x+JlZLeXFXMkQlMkVadz5aMyFgLFo4Yk9OIXY0QXYrdUY6UkAxQTZMVDowdjEub2MkZCNXQGskWGZGUH1LOXVgZkZeN2NoblVAKzda''@;'; put 'put ''ZTZndUVvKS9OYjk3ZDFCOCEwMGYoW0kzQlYxRWRsKDtGPGk7VztDVzZePGNuc0lHaSRfS2AmXktIWWpNNmBzbWVTaF1tJDBLYTRIPWh5flBxRHp5NGBnYmRTIlhJWGZKIjI9Plt0YWAsPUlIeklvUk4+RjRvPzNEQjxdaElMUXcubUk/Sk5ZQjV2PXhaZ1c7Ijs0OUZfPl9XWmh5a1Z4fVY6bz5p''@;'; put 'put ''Q3lqQ3dPczVLK2AwPkNaJC5EWmRARDt4eWI9QmIxWXBqK1VZP0ZgUjB9TSUhM1NbUSx2VktSYW9ien0xKCU0JD1WZzBORC9LJmUocy54PEokXUFgW2FBP0giIUchbXsqdXE1RlNARmRKSzZMLFBkOklMNEdXai91UCVEKDlGTjRXWE4sUmY2NFE2MHo9Q1pGNnRnflREdGRqckB3PEh4OjRyfTZi''@;'; put 'put ''WlhzY1NHbDVeJFVUL1FRfGprY1NHQEdHXmo7WGEoSTBnUXt+UCsyNERCNUFaUCp+fkMuZnpHUm0jUylmNT4+Vz4ufHtaR3I3KUpMYXYjZkl9UzcxQD9DSkJTWkxKajkxNCR+I0R2KDZPOms7RjM4dUdvUnRnSVkrSGVfS091RiguJlZza3l+MElfemRFMD5kVUA7PVlsLk5aKXpSYzpMVXJdV19X''@;'; put 'put ''U1RWQ2NUITROVT8wOHBHM2FERFR6aihhYWw4ZDpVWjZEa2NAKDIoNFRUPzc8OCw9aTNmP3Q9R2xMcmkzY0lXTW5HQmNBdWl+R0AhKCk/XWJsTVBlbn1GXXsuQV9NMSoxIjwwTFpiUj9eOl81PFZBdHpXOUsue0xkPSYzdGwkUHFkby5CWlV2Q1kxUFpfe3B6LkVTemNZOG1yVEQ2JnJZPXp0fmpR''@;'; put 'put ''ZT9FJmR9b0B0cWM3Zi9hZDNvL1dlWDlWQSx9a1opaVlZbEdvUF8hOjhbcXV3TT9obyZ7YChGIWlwV31dSkg7ajE9WmguMWAiIUgmRlleWikkPl8pVXlkVlA/VGZtVE1tajFzNyJkd3kkMlBNPiJ9VFNOJWMlPlJEUHdQWV1PeF9mMEU+NEJTVVQ8SmolIn5kTnVqN2Q1YkFJSW4zQCF5O2JsZCl9''@;'; put 'put ''QykxfmNVX1h5REBUTXdfX3J4YDxzKHhQS3AzYDlAOHVXP0dyQTh2P0phPUIkN3NCbWdyZSlbKXUqNDE+PXAzMEsmMTUlNHlLQHQpSC40Yjx5azlMdn0mVSliZFhHU19uSHlTfkJFPWlMSCI+cDd8NyJ5LFhtWmk+ITx6LC5ycStlRTp5VFZsRjtvdW19PiRddUR7cSZAXWhFcFFrWDV3NVJKREZ8''@;'; put 'put ''ZUY9RzVDeE5tISVSYSIsYkNoYUZnKmImeV9WTnhESG9gbiJqdy41Onk7TjlqQnp2QnFfdmE0bF1HKChRfVZ9NHdLKjY6RXtIME94YkNPPkhEO2cxO3p8eWE9MCohWGZQSSlLPjtnRWYwRVFzaEd2UVJuIyZtI1pde19GVj9eTF9VYiNHIVlDSjRoaU1uUjRaR3VjclUwI1Y7QGhIQ0BMVDt7MSQv''@;'; put 'put ''PHNFdW9pcl52ZzkrJGskQ1oqVUxgdk97c2FNZld2UHpjOH1lc0ZKd3xEPVEjNUV+Sl55bFRUdkJESEBBb09bdVp4d1lYdkpqX3xackdOTyRPOXh3fUpTYkZdMmBXJFhuTGwjXmZ6Znp3R3RCV0QhOT9UU1RWR1V+NGldRCVvRSl7LlNuel0seyREKEZ+JWc5OXFjYWMpe1soMDU+MTdGSUJme2hA''@;'; put 'put ''NCpxbU9WI3FtTnJ6K0N8RHcieCh6JDV6bDVhSyY1ZmZ2UiQ8Okg9TX5vZTIxdHBgYTB6JnFYYz5QdzZjM2xxPCJ2dVpqdSh9bzFCej1mcTUqbERfV05WMGMuTXZIXz9hSVVkfmU5JXsxRUIjRDdYYkExY2psbjBeRCZLYjM5WHgvYTRHfS5PSD58MlpZXU5YO153JiE9RV8hKmIqQiMiKDIxXUJL''@;'; put 'put ''KltBdW9xZTEyJiVhUEJAV05WTjIoaixAemFZQFZWbklnWlRydF0mS1tZZ0JkPFlfWjk4Q3YrIVgsKFE8UmBNPz4ybHs+a0NAbWwpTFBHbEtkMkspPmB2eXk1TztgfDdCOUJ5T2RSanMsb2BKRXdwZTRwaygrRTl5RlhiXm4rLD8lK29uK1txa1ZSbVN6JS5vO3ltcE0qWSRvNl5wTGRFYjdBNWNw''@;'; put 'put ''VElVXnl3YTVJRExqMXdEdi47ejpMVj92bHhFWkg4UStPRFFYYiReUmI+TVBJTmxXJjp+I0ZXQW1eP2U/cy9IR3p2SnhAKigqTnR5bk15M0xEZGxyWE8+UT4hZ1F3K1ZAZiF4S0h1a1lgUW1Uem9aJWVqKmh+YmtWcXJ9MHA4aXB9ZDg7NSR0JUhkbW1EPCVGTHl6dE8rYXl+Ri95eWBPekhKL1Bt''@;'; put 'put ''Zjs3UE1iajIjWCloRDxjTCEybHMpTEZdXVk/SD5Fd1BOVX5Pbn05c0BpWDZjN318SWV7Omw2XWs+RlMiWDBzRTdJPEBMVE86W1hYRUJUUG9ZdkVzeEl0VncjcDI2KU0lW11vfmEzWV1oMGd4O010LiVmP0Becyh4STwsb14zPVVfamkscmZ6OGJ7SjFMckI+QmlIdSl5IjVjdjVKZlVkI1ZdKW1L''@;'; put 'put ''UUFvZHxRS2s7N1pqSENiMCwsVHB6fngqS2AqIW8kd2hZUlsvcTxPTDdBISElbFppdjE+b3d8L3crd0FlW2FSZCVyIVg0SkkzVk5zTXAybSZNKFI+KEU2eSZsNk86Uj1BaXdWcmZQdChkWUpgL31HPiN+cUcybDVhW3swKXFwckVaRC5sSWxbKzcvTVZ9NypjeDkpNEc7TzxhOTswOHQ7MU1STWBW''@;'; put 'put ''MDs9aW06bDVLaERBJUJwdURGSFUyJUpwZ0hVRSVWcndYK30yYUNkfGo3cnU6dXE/MllIREUwZU4+SUVTZDdAPGNrRytjb1cxOURMIysrQ3tFS01acSU4IW4hREtddjppNVVUNXpreWtDV3JQeWhoRn49JV1yK3dgJXhKZGtpI2NSe3Bgfn1nKVJfdU1ecDA5WyhJRC5MSDV4JDJ4RkNkZEIuVVou''@;'; put 'put ''XzNNcVUofCp9Lk4mTWR8enJCcHxhZEVMYl1kQjl1QkwuKDltfH09W3J2bWBrV3d4XmBWUmwjOmNWLnBgNFNFOnJsdTRTei9RKmk/ImxDOF5KQVUjV1EzIWtbWWgvPmFJQGAmQyRUQ0VZNkRvV0VdKm8xcC4/SmY5QnA5Q204JmhVcUhFUjZfXkhvenRpR0FKQFdgIUlbYjo5Jk5XbjwoVD1ab144''@;'; put 'put ''YEFkaDR2Vm8/RXxKTltuaHJMW2ghbCFmNWVscjN6a2dAcnRjIiIzQU1gUnMiNzckankhZUN3TkQlOn1IW3R0cnRRYFB7bnpwMndgOGF3OV1pMWNqRDJUVGw0MUMlOyk+UGtyRkspZVpbM3NxNS8yJERAL2Z9Jn5+Qk9AbDVSbGJbZEIvUy9iTDJIJkhidkJLUEhaIUsua3BkJHo7MGtAQmM7ImVf''@;'; put 'put ''L15ke25RNGVFJn5Ybk1QKyRvNkk0JW4wMS9xdz9edk11aHZ3QGddQHBtPVh8QEJtJiJVfDs0Vz9lRj5sNXVCK2x4TF5pdUo6VnRYbU4oXUtuOSYpeE5zc1BVYTx2fUVWO2xeYzE1dDROWTlFPkhlVW1vXVZTfWByJS9nTV8sPT17bndwYzZYQUc+fXtUQ2dpJF9ddWUjTUkrfHlIUXlMSGhbc11S''@;'; put 'put ''PkphTFg7Wn0sTE5YTGQuW2VVJUhmM0I5KUd7YFZ5R1BxfVBRcGV5SiZVaFpjPEtoPW0qPEwsdGhQU2dgNzkiN3dWVXV8dm9mWCtWcG5aXXdQSVUkWXs5R11paitMcHpRTHpPUEshe3dLXW0yLCksXz5EL0RvVis8WzcoY0VIT2xAcDl4YF9JcHJsRlYxfHVMdShBLk18NEVidUNMW3BTWHg9UEtj''@;'; put 'put ''JWZ4diNTblQ2K2EkSFkvIkF1YnFQa11GUlpVVWxIREVxJkZIOFVPcmN9WX5XP0pqOSR2Qi9ZZDooWDM+PiZ1ZTdHJD9aNSlNdW59VkVNYjYiKz9jV3IxMlFxbD44WiM5WWJFK1BvSmMzTTwvRSh+bXB6JURHRjY0On40PyE2R206M0wxZTp5WH0sQEBOcX5tb1BXIzQoQ3JIa3E8SVFTUGNpWV9U''@;'; put 'put ''SEtjK0Y2VT1NLlY8eSVUe1t6LyNed1IlOURqUm5xQlJlM3BMRWsxcVNuWWhAXUlia1tTa188RWlUTndFWlImTT5CIyk1cFJqZTA2PFFFc18ubUhYJF9gYDFlUlh0JD90ekBPSiZSOjRqb1J0RVcpP3NQOmNweiVIdn5YYWdUT0laTWo/MGZyfGZKe3lqQDtsfF43JEpPNkt2cVZLOmwlN10rVSFb''@;'; put 'put ''ZX0zNGdiMkc5Tzl+JSRhdmF3TjcoZ3cjSXdMLyhkKTAxaHgmTH5AUU82JSI0Z1A/bklJez4/aUxVW1g2eU97Q2ZQLko6d2YuayRYKzd9XjpbKT1lKFhkNUksU2QvPHRZLlJXXSovRVguZypuR2A3Q3dgV3ZDOnhwRnNVMkJMTCtKUC95N1hZYyxneFBtUSsvdFVPSWRrbiUwPih2Lzs2QjtbUkc2''@;'; put 'put ''NE0oMiV4V1siZzZtLHpeZyptXmhHRj8hdnx2cGQ9ZE5WOEEzW0NhTk9UdjtgQ2dFXXFbbC5bNUw7dkJaVCRLTDQ7aUhqe1c6KGsxbHlmKmNZQ14mNU8iWkdpSDg2WkA5a0VtZWd6X3dLLkAjanQwbHxudio3WkdKe3tLN1MsbWEsSSV8R3U3WDw+YSphTzgkOGwkOCU8NjkmaUNHa1khVDlfKUJm''@;'; put 'put ''PWJtL1t8VH1Tcylkci5LI3huW3taRWdNfk5+YmRgJi4pQWVaViE7UEA8U2l0fCh3ZTVoI2RkPUQ9c1FsRVt9WDtYZSxxdHdsZF4mbzo3TC8hKCYzRVhqemw6SGM2Ri9IfkZZaUNtOXFQKkAvbltfTygkS1ImVGUzMkJJXT5SeFs4TV0lXm9LV2csWDQzYCt7UVolOCpnSkFLaClPVTY6YSUhW3pf''@;'; put 'put ''dClne0paSjBKMCR2Sylqem9FcVZUUn4jcm5CYXliQixESD91SC9afFt0O2NVdzY3JEJsSjF5IiRMXz5NVmc+VHRHazckclJEekIxTiI+d2NsVmpCIUQ+WVhSMCFVYUszcyteNEp8RDVMdEV5fiZqSCVUQ0hkal0yXUQiTH1SVUkpKEl2fGQiKDIpaW4qb2EwSW54JUFvJXo/PnJ5UiFfWjdPd3tf''@;'; put 'put ''PVE/OTdFL01hSkRrKnpmUVtXOTgsInF2JlQ7TzAoTnA8Rj8xa3V+Wn1hYXxKLzVJWlI3LmxIOGA5fEZPT3JSI0xMfCYyRFVLNzRJZmw5ZVB6NkJlTjkqRXo6dUd3XTZxZ0BYYiYqL3xDTC4rN0VqIy9RYEgsMl5ucENxQyFWRFIyXl9WJGA1eE0+dFYve1J3Ukc/fjw6aThgX0ZafTkwK29nISZd''@;'; put 'put ''aDdsfCJsXyhEentwLjFZc1tpMU9qQHFsUXdwfDh8Im44eXxLYW5fMz95dnk0JTtgXy43TGNMW1IoRH5VVmJlV0J+JV4kflVCWU4xO2RZdiQ5XmpyZFY0dEQ2VEpBdDlZMnxwS1BdQyYmSy5xQm1GbUcpcEhjTjAjRV4kTFV8Zzg0LCxldUxjJlU0JXBIYWZ2U0N8JHsoOmRRcDdKTmA8RmMyfHdy''@;'; put 'put ''UUg/T1BUKzI0aVZnK3EwKyZxOXRGdnkrfStCRzY8V25rJGY0eWYhSHtiX3A7VUVTKUtIWURmbUt1dngyVUhhNHNZNzY8S1Q8RVFlOWhBOnNlNTUyPHxASX5xRkxXUjYpPk5iXSxpNUs8cHEyPzdRZlJtKSF+SEgzai5gNkM/Jk40KD91LFZmTys5S3toNUU3RUxBZnhTPFYjbT8+M1lGYVJeK1lG''@;'; put 'put ''RDFlV3FTSyZafGJKaHA0PSwuUFNkOGhFLmU7R29aU2ose3E+RjlfbE97XXxLOUlrIUszLmZXbmFAamU9I3BudVAvQ2szKi9PZnI5X0IucldxWC8uOzw4em9tKkxqIyxOQW5yUjdbNGhFfEtXZlNmZTdXQmRFR1E+S2VPUlo7TytLdzV8bzpBJTwzOnpXeEVgY04xYHk5aGpncDRYOXpeVCtEQFZH''@;'; put 'put ''Ul0mRjhdRkVsLlROUmFxd3AkSl1jJnRRMUB+Pmg/IVZSPH5JbXdAR3dSMzEoJFkoYCtGJjNgXyUkInUhL28uRFlrQ2FNSmFCZz4iQD5yPHR7VDZ6IW5aZjQkc3xZSF5CSGJQJE5nQEMrd2RkbTgjZGteJTFaLFd5XW5+a2ZnJEB9P3pma3pAYSRbal5zYWROXXU4SGxyfHtGOndldDY4YzhSVjs2''@;'; put 'put ''W0d8bEl1T10vNzYiSmVMS0RaJT0+TTNEeX1LMm5rdDBsTzNAYDxAK1VYTjM8eSN7W3I9U3kyZTE7TnJne1E4bCt0QH1WaEk/TSpucVEoRCgieT1bPUQhXUVoPUFTQitKUCFqVSx1bjQ8RXYoIikzSkRKTEhzZG87QyIrR2ZQY0N7U1kuZU09QDRPfW0mclV3XlN6VUtSKjpPKihyJl99TDpGbH5o''@;'; put 'put ''dzZvfGZ0VFtOXndgWGc1dDVdNzx1e0N0eW5OJGksT30pa3gsPXRzaGBMMHR4TUBHRl9zNHc6PSlwN1hyTC54YCtENVJiczF2e0AlWz18akUrRlVjK3RfeU54TTBgSHIqbig5YHcyMko2UHd4dik4QiR0TyZtaTxRIlR9Sy9+fWchP0dRUEtdLkIrdVhjUHM/aDV1OXRCXTFQbygkWldAQ31DaD8p''@;'; put 'put ''XTtKbDBhKVU/flUyeSZxWC85cyZkNjkrN059JG9PXk0jLDYjUTU+fCJsNisqaF5UeT8rPjsmfiRkIU5ZS1N5WEtvcV99aXBvMEdXIlJEaihLdGFpJEFHYlEkZCNwU19pNFBuTWEhb0tickhIa0ojRVVnP2guZmd6d1l+b0wzO1FjTzpLPClbWl5xPkZESnV+ZH1nTjBMNHZpdklaKkpuRX5lMjcx''@;'; put 'put ''aUVPLDduXXBJLCosLz5jSlpibzhBdUdAPTkpWkt4I1t7RDojY3hUb28lfFRLMG50Lz0ra3xacFpSSFVjbDlHSHZVZUtHPzpuJDAwSE9BPEFeS2MuPnh1RG1ndFcpNSk0KV00bCQkKiM/Xjl3Q2t4cGY8P0xTQW1mKGlIOD1UYnNOQGJLITpXKlQ8UStuWWpobkU9OXZKIz9xaEs4RU9QcnRyaTNT''@;'; put 'put ''MVcqSjZHSHNjMmAwbXFiLHpUWC89blAvZkJtNjZjUkZtTmV0dSlzJmNdWz9NWHlUWlA5VDUhKWpXZ21EVzEkdGQvKTx+LEBLNHhoWT9TLDU4XV1UViU2PTBhOz0oK0EiKFslP3UuW3VlNn1qakVJOytVYXFEVitHajhBWmxIOCsjIl5DXnc9Z2Z3WEhpTGRgWE5YUkxuJkNaXn54Im13dl1mS1s5''@;'; put 'put ''OmpjMX1AViNUfDE6bFJFb0c5JTUzVGF6MEhUeEEkZHkkOyhUODFHeiVGfEV1NVszKktpNUZDVHtrOzlbU3cmTUUqdT5yZ1c/dWIsRmZGbDF3dE5GaVghfXp2ZmhDOWQ+azZlLy85eFFrK0ZeNTZRbVk8KUczeS5fNEl5RlJSLnUwRzF8NUM2bTE9Vjh0MloobHE2YWUqJmorKmBbXmElbDx5bWtU''@;'; put 'put ''K0pSd1Z5VT1ZX0t6WFlgPXkmP09rPHF0cSgrIVEmUSY3eXBaMGh5M1lwYEohK2tbJHteXWpJWntqNHlINDh9bTFDYS9tI2wydXskXzQ+eCp7ITNiYWw9ezd1dzd3OG91czZZVXthb2Z1bkMjWlg9d35VIyJHcWZYZSo+WClke3FQejIvQ3ZiJnZgfUgoQmYyTD1wLj0xfVlDNE9JfmloYHoyMmZi''@;'; put 'put ''ZltnLFF2K09bXyUxTEQqJUlOTCpsRytiUHZNPFp+P2lEMUBOMTo9UTlhNXlvIz9gKWFeQyFJVVA9V2xuQjclK1kma0F3Wk5DL0ZySThJJEVmN0I0d2JUayZROHM5JTMheUU7Y1hhYHguUDQ7MVJ5Knx0VF9xcHh0MHQuJkllcWUhM15YfEg/OkUjLjBoeSRMKVApRm9tLFR+LlFybmN8TVpRRzVv''@;'; put 'put ''Py4wO3BQaSZYJn0oRH5TN1E4dVc5X25DQWMkc1l7TXd+T21uMjgkeDlKYCVoXzQrLll5OWsoY0ZtO3dmK1ReWUxWZz9AYG0rJSU9MnIxNW9Tdzp0JVUxeFhqQWt6QnwuSitKOjg3bSRKOzJERzhtLE1JcipbUVpgI2x2UyY0VD94PmtyX1JOd0o6REtIezNUVC9jSD5OYnkudl90VFd9fHhoSVgj''@;'; put 'put ''OE9jcnIuWmM0KCF2RWxFI2oxMXA5QTY/X2JnPz0hQkViTD8jTTc+R09ZfDF4ajtIN2VHbyklbz5wNmZTXkpRPSpLcT9GU1NZREs7ey40dFh5UVNLTSR5c3wiWyR7SG5yJG5tXkBkLmAsZndId3J6MG45TyJyTzpeejY/NXlJci5DJXVkbyF4UGxOfCFHbzFseUkxLz1EVUxlQEQ1Zm5VXjozOUE4''@;'; put 'put ''YnFERzFnS1FeQGtTdS55YUBBZjFkT0J7cVshKGdJMU9RT0JYRFRKJkRvLGR4eSpSPXZ+T2w2I0dmMXBbc3gyQFBNV2I9d2ZnYkdIbEYvc111ZHlHWUlZMS55ZDRzTFgjNlk8aD1oai5QV0l+WztqKVhQc2pzJCFdVk94IyFmSXZiWWJFMVkhK0ZsSFo9e0Y3bzwiLzFTVnEhOXw1Mlc7PjUuJWFE''@;'; put 'put ''SClNMU1MPSgiXn00fXV6dEldNGdLZz82U2ZWVzE/YGU4VkJIPChZflMrTCZfWn5gNUZMLFJNNCVefWA9T3FVUWoldnA0JCpDVl5gUjx8anBuIUxQeyJZbWRjdT42LjA2bH4zLz14dkAvMHE3RGYubHxlPTpIPU82bVl1RGVJeTVefWZpW1VRW2Q6SWFwIjFAPFJCWC9nQnkhd3tRKyVNcis7KGFo''@;'; put 'put ''NiVYZXNvbyhvYXh7dk59Vn1QN0s9eT96LzM8Wix7ITs3fiFvaEpYeSJRckpqLF9OOTwiYUl2MWhCNDxyIkdFNXUiRCp4Q3smK2gre114Zl9MT2dNKGpJQDRLJX1qdH0rODhAVU9aeEN9YyElaTVmXi9rXTVNfD0mYVhLK1smNlg8JjxaWE9HTXt9Xj1rYVBsb11wSmNqcFd5UntaeCNvO1B6dEl6''@;'; put 'put ''MElkM0Q0QTw7bTV7ZjpqOiE9R3xvYHZGaVorLCFqKSJDLjhWfU5CKWVvLHdzXl1gRFFPXVkpPCU8Sj47Ul1SVXRvJDNXN3Y1IihqWTJIIXg3TjhrUEVtT0twYFY+XmY6QXIqPUt4fi5NVjpLZ2JAZy53V1FodEleIVVlaUF4Ok9MLnQkUXhGUlckL3dsJEBCaFtMUnlyPnlgQSYjSChRW3UmMSRY''@;'; put 'put ''W01qOVZvVlQ1MVpXY2BOYltXWWQ2czdiWUBFTFVzSVNhQz57L34pKyt5bUY8cGlbT15CZyVtISE9KkRwIk45RFAxJCM4T0MsKjV0bHcvMCNYKWtjciguZiVsaV9fS2Z+Jl1WL09KdGJSVUY4fF0xSyZbYjNLPXd4Y01NMi96JDcsSE9ESTdrPF92dFJpRHxkKHhrRi5RRExOdztiW1opfCI/fntG''@;'; put 'put ''I09uVHFzfF82ZiNZfUxEKiNSdDBOTG1rZztmc0NXO14la11qV1gleiRVUElEU2gkKjFkP2dWPTdwL24idk1UaXZMezx9YHdmUVBfVi5bS0hda19tbkAlMDkyMDRlezklcldhMHhQZjxTKk42NTtVNDZEbEdlaix6fjlfbjA6dVM/ZSx4ai89SWReP3BYYT4sL3Q+NStnT31OO1JDT3loJlM2dFBJ''@;'; put 'put ''RCMvR08sfnU7WUA/JSxTYWRtITlpM2IlJEVAMWBKMktfLGlFYzlFVG1uPDE7U3VjNkVlS2RMOkImLGVYM0IuSUFFS2VrUktqbis1OUx6UiQvbkxRPSMjaV8hYm5SZz12UWcrfGpROCM5TFo1b01GMTouXjdyS0J3Lik1U3tLSW0yRkd3JE1yKmhUNkp3PTFkWUVbRSUzfT4mT2ZKKG5od11vUGky''@;'; put 'put ''UDpEK2VsKFN0IX4uPkJFZjN7QU5sVyYpVnhyTThSYGYrPyk0b2B8O2J9VjBDa31RXytTWzZ1X1ZjKitVIVd6cjE+bUk2dF80WU5WWiVvODRwXzdhMCp9P3deSV8ubER4NSpiTklvcShyJj8oMilLMCV7QUx1bV9MdkpaKyZrUFFkKU10Tl8+VltKVlBdcixNaiFYeTtDUkNIfTc/IWt1I1l2TW86''@;'; put 'put ''KTNTaVFlX0hDaT5dK2pnUmZFMlJacFRdUCVDdG5EX0BeRy9HLihyMkkjbmw1MyRkIjouODg6Q3p6VG1WRkJgTVNoPj5QPURdInRgOi5TPCVePE0vbyZiOXlqeysvRVJIJTJxWGJ9U3YwXWp0YCw/PV44QkJzZTBaTyVXfVtnMFNCLk8jJmt7UW1UR01uOXBNOFRjcjB+IiI1PDUwYUYoI0MkTCgr''@;'; put 'put ''dzs6V2NMWH0xYVNpOlpVKFA3bUowQHhJQ3l0NWpDbixAYnckRFNMeiEocGVUVnJHTSwhWjdbSGJffn1zYWY4V1M3YSIwLCZPMHp5Mi8kUmh7aVgjaitmN3Y8UH5aLnQqeX5daCxBenlVN3g5TGwkKzQ4akZOc2EhQ05MIV9XbCk8cyojXk5hXStBN1JXI25sPDJ8ZmYiTys4MElKZHR4ZmRlVkVG''@;'; put 'put ''QzBZa3k+Jj1KREVyRmt3NCFwTSRBMl1kMH1KSUh1PFVSV2lMVSZkVk43PEVNZUBneyszVExdZilmNiJYKiQyV3g2ViNxZyRIQ0glJjBkZm9MZXFjQUBSeUAmbXVGRSF8QXcuWEd7JHxwT0F7RzxZNHJZKUhkIjxALjI0Qk4xK0V6NyVBQ1tWXl9WIWZ3dnk6cihkaW82Tzw4ZCojTz9mXVM8K3g/''@;'; put 'put ''PFZESDdlXU9CKkBvXXh6Vys0ZmNQR1Y4RCVMS1FaUjl+QkpeY3tiZTxpKVskb1AwJHpYSHd6cChGS1lmWmM1VHQ3Q2M+OEM9WjxNUlRhS0F5X2Bab0FbUXxSY15CaFpuejJBckpnSV57QWtGW1JPdCtIOmc4UUJAOiNrMkcweGFkfU9+WlJfRUNNQjlVVjcpUk5eLyJgaiFJQTtrckc1a1pqelcv''@;'; put 'put ''dnJPKDIyMHkwWldSP2lWajBYfGdZdyE5O3U0YShHUm5yWkc6Qm05c1ckUnJlN3t4XXFVL2BpP11nK2IhdjJzIkNyenhjdEJKdkYuTF5+K3QqYEJKNUlzaTY7KFEsNHNSQk86R2V+KVVXI2hnbVVxLCtncGd4U3J4djZablV3elEyXzZmb2t1aXhdcXBifklzSEg5SV9QSmZSJFs7cnFOYlVgWHVC''@;'; put 'put ''eXhXRXlEI1h0byx3ZGg/I09JSSgpMWFicGdwL3czWShGfU12OmAxQVQwPUF2aHQzPXVJLEQiRH50ZiFzWjJNbShycHoifiVVRndhPUxVNyRSMUlVLkBEQlJMeV82VGwoRCQyUnR8ZyErYSRBKSRbYF00YH5Wc1d3NVowVDMoemhuN3g+YiIuODhuTl9OYTh3UlduJVdJb0xqK3JYNjgmSll4RSx1''@;'; put 'put ''aVQ/Zzh0eSFUVnh+WWovU3ltKEMmJGckNihCbzQ3dStWOT9IXzlNWCRxcytFd343fkZ7b3F1aTpYck93L0Z8Y0paK3JsNUQzXlR+TGh3TmU8ZSlpK2FhTXN8QlBxYU1EJWlRZWp3ckhJIkFqMiV4N0dbfSRMdTFmNEgxIm56dlcmdlVsSTNTP2RPdFNbOXRmXSsmQUpiTTYzYzBXWEhgPCVJT0pf''@;'; put 'put ''Y3w6IVpmcC9nfk1xaHJiVWE8MHJ5WmgvJCxkPz5QNWE7KT5lN1hINU0+LGFQblRqSUI9Y1hFSywhWkhUNywraFBGQVA4X0h7dzpdfn1ZPldlSH5bXVl8QT1KZjlVRlgram5MYn1ea04oP1cvSVZNdXZSXktMaCF5fWlIaGp3alB1TnRhemp1Tz0uWGE4fnRidHZNWEVRIVlfUFUleEhNPSsheSxQ''@;'; put 'put ''eEVOdTxmbjtBNDc5LlVBck4vQnc4Q1tfWjJWLnNLeFMpQ31ndkVURDZ0WmclTiFZQ2djMX5hdVo4NVZCQ3hdI3M0dUN6ailVezFqbjE3W15XXkZ5TEEpLlhtKXxrenkjYCl9ZjdrdlF7X1EyWWQudXNffnI6aXNYUHtefjVoP0hReER5QVl6SHBRX0o6VDM9RkljNm9aIURzaH4mVy47YkghSSMq''@;'; put 'put ''cy5bXUp4ST4pPzRbPU1DLFc9TEdXZm8/S3peRVhfOVc9U2dlMTNhL1YsMkx8RC4hPTpgPGc9VFZCND1oQkM9NnRHfXRAP0hsdWpBbmFvJEslZCZ7XkUrKnhlQVE1PFp1SDtCJVtPZmVJXnRPVUY1WklAdHhodWNmPyNzQzE+NzF3OS9tNktKbWVINHZLMzVNUWQrUVshXipYYFpAek1Db3I/JCww''@;'; put 'put ''cD0mJVEoVnlGdSs3Kzk4eTt8b1EzKF52ejk7VXUzVSRtUyMzNlhwSnAvSzJ9QEBsRXFCaVhGSjh8UUB3RE4qR0kxUzpoMUs9WHk5YDEzLnp3MyM9eEUqbGxrUFhnPzwvdllKbHZaQDZIUHspUCh1fVkmOCJ9VEFnY2w8RmI1blgsYUJdMkdZWm82UEtkcFV6ZzUoJE9rWWRDNHc3cElUXXUjfGVk''@;'; put 'put ''Pj96UWB4WHV5fm9mandla3VuXz5CbjNrcUdhQT8sSTVafncxcnNkelM6aHBfKzd2cT5HST5eKT40eVBGWj89dXNJeCkzOXBVcHFEdTdJT35oMEA5eUJ2WV83QnJ0T0VJU2k9bkBzUUNxKkE1JlNfK3lMbTZdYzpoejc+cjVlWV0lTCFyPV1TSShURlAoTiUiVmVWUSxQQFE3WTxfV1VxJnhmKS89''@;'; put 'put ''eGc0Tk5HTiwlRyFFPy5lPC94PXpmZyZaemNUU3pnIjkxdzhhTmcqMUdtRnNMdW88OkllZnIhP1lUMjlAe10yX2FjN1EueSptYV8uPD12Zi9ZeTtZZ1lsa2VMSWQ1bWcoSkw3PmJAfEU+akIqZjtRTWVmU2ZMLEJ3fjx9VUQ2aHFILj1pT1VfNz1+RWJ1IWVJc199KWxmKElodlklMD4yfkIqW2xF''@;'; put 'put ''QS89Q1hCSXhTKEpHWyMsX2Y6aiI4Jk8/U3olNUkmRjVUO312JWxXJENJYF0jeUBGNih4ZDJfeVJ9IkpOTmdaIkhbaSQ0dEV3K3VSKSk2Sk9iKEUvWGU3KW9nb314VVFRcitdeCpfUHlpSXFIZGk9cE1+NFl2SiF3K0ZiRVJ7eEo7O21wTFBSYHcyeFVpcWByXjgsZE0rPVN4UlQrNFk6YDY0JiEk''@;'; put 'put ''XiNrT0x7U3dQYWooemIxUDAzN1RpXUh+aW5+QisqYUAvKSNzOWt+Y3JnNVJmclpZaFg7cnkmKCFEYkcoKW05IUA3Z3FifHNdajI6XSMrNmdRZGJSeX1qUVtlYGl5UXdnZWFhfV5aSURFXTMvPUoibU0iSnpVSkxRb0NdSVR1LihRJkthWGY3enZhRi5Afnskc3dqO3QwanxTRT1DIWExZn1xQWFK''@;'; put 'put ''X3pxP3VOeWgrODpkV2lKJDA9P2VDXkZ6WUddKmVAdFhtdCNxQ0lELiUkZXkyO248cnpTXnNZMlssRTwsU2xBJW0yO3Q1IS5QfUh6aHNpVS5kMSY5WDhMNmsxUHI2MjF3bUYxUTB0SDUzQU9gRiNSfEBkJk5pMj87cnxIVj5IfC50WDprYSU2eUpdcylAVyN3ZlZLaGxneiJgOipITWdubCNYNUFH''@;'; put 'put ''WDY6Uj4iMTw+STlsZUFAa2xwTThod2AlZlprJSlha15kfFBbWjhbblFTdkd+ZHNzKXxvMjVEdj1RKlFMcVEwS1syZi4pJFY5cWw3fmVRdFNRO3JCY2ZePjpNbFBWN1FCaW09PGE1cCw3NF4rNFlZRHsrczMjPjBWLHhYOUkre0QzXWVOQUc+ck5qLnpPX2ZodHl1Jkc+fVo6JWUzODpbSnBNSGUs''@;'; put 'put ''fF9Obnx8NFEoSnI2IVoka2RaQGRJPnRrWltDNTddMG9oT0I0OU0pbVVgeDdXJDNAQEwoQWorJHsmaFppJSZLbldVRkUqcm8wMlVRcE1ycnRkUTo4N05Sdjx5eEI9eEVkTUZobE46cE4rSVVmI2lpS1RzOXJHZlBlP0ltTWNUT20wMz97fVZESCRnJEY/NjZzYF84Wy4yZyJrW1slJlFMZTs8PFZN''@;'; put 'put ''cDMmQUlLNzI2UFE7Vi9pciUmMl9ldTRTNXwieUIsWXU3LmROIlJpWkwubnZmdHUhemF+VjBXZWk1YmtDa2dTaTk0dF5bO2NnKzxpZll6ZHR+MylbJjwuVDJLdTNOUnZ0Nm5RVXBZMzQkSyJZMT1oPG5fa2U8SzVwbD5fb1hGY1h1JGpMNkI3Kl0mYUxyMFErZjQ/THZgMnUvUXxjTG4rSXlGT11v''@;'; put 'put ''Qm1scVhIT2AuO1BbInB+O25FQH5ac35fV1goRnIqXzw7RnUpfktdcTIrNyVLUkhpIiIsTn59X0lqRFlgMCYmdSx8dl8mSzh6OHVjOFs2UVNARnVAKipJWlMue2I2VDVYdFkvPVhZWG5zXzA5X2FNaUBVMW0wNFgrNnRiVzRBelcsblk7RmtgMmJUWyl1eDZYRU1APTJZMVo/cXsoZixYLD1mQ0A6''@;'; put 'put ''Rk0wY05RfD5rcERHN1ZGcVd1WWgybkkmclFlSkZ5ZkdIRTczN30jVEZJbkcyfnxrPzw1K1dCWThBR0REfChDe0w7KHdFbj1DdEpeWkMxeGlEbzxEQnMualllO3pKc3pOYC4/SDo/by5tWTo+aGlbeSs2MF4hNF8mXU5XQ1pJTktGSVpnXzwqRl1gZzEldGdDaSh2Z25LSXt1JXdddj9WeHkoYEJj''@;'; put 'put ''KnBrI2FpRDw4ZUtAMXJoWyp2VzNsUno5KWJGWTNjO0JDKStXNj9ITldDSlJ4NHwmRU9ZdXVqfnIzIlloQD1sdWtUSHJyYT5ReEQ3L0xxNjdeT11wbi5JYm4yJnJwLmIlemM2Xy8wfm83QHtGN2g/KFtYW2pnK219bCZ7JkxFZkAxaVljUG0hQ3VDMzRhTD9zOyNuZDFRV3ZiJWI5VnA6IytzVlM7''@;'; put 'put ''e1RgSktHKkdWUWZoTT9CKzxNRnU4ZEA0L1lJZHElY2A2eT1RNUtsfTJCfDVkfkJVUHVBWUk6NDhJNlcxT25Ha2hbb0BNKUN0d11FMig1YX5GdyJLM2o3JX1NTTxxZDw1LCFWMWI2VyxgYEsoPDk0WyhONGh6dXEodEt1SGVge0YpeS8oUUI7Qi9bfCVnUz41aXlBMUlpcyxWJiglSXQsOD9dKU1l''@;'; put 'put ''RW48bG53RjsvLl8jOXorSyJ2KUojKCN2aHQvbkIvJDg5TUdVSHMscDVFXzU0fCg5a05dPk11KnF2Nm9DKFBbZX0jUUp6WzldVCZXMHE1UzAocz5dZ3RYX15TQDchR3NjW3lgLC9KaFtsRGZnT3gpTHpiaXFKQSEvRkgyJWQweUdHZ1AiNi8ydF9ERG07U1RZNSoxN01aMT5GRF9kZ0JuLGNCQ1Nl''@;'; put 'put ''RUI/eDpJR0w4PUQye3d6NiM9e01yc3BkbGAzY1YqOVk+bWBAajYqTjFAX0N6N1Y9VmR4RmJLSD98PGxXUkV9dkhHM2RJTlNNJjw7TV59RVE6MmNUa3hfYlk9Jnc0PyZdRD5ZMjJVNWkmc3tRKHJ4SEk7LyxLNCV4OENeRzlxfTdpTSJHInIvUHciPXxbaERlRzVAQEY0MUVselI0LE54InI8Im1z''@;'; put 'put ''WlgwIyJtJmF6elJ6IXJfU3YzZFV7M1shMTVVTTIwWUJHbzNZY35VY3hQcF5GPUIzeFlsQEJNbXFifF5VTVV7eExWSWQ3YU9Dc3t9dT0oa1JRInRtcktsZW5bd05VIldbZEJURzBdMEB9PHY+d1ciQ043V0tuWl96OTgkRXU7MCFZMHBQQ2FrKn5jLENHSmNNeHplay5UWTl5YiV1NlleU09Takko''@;'; put 'put ''Nmsje0FqVTdWL25WcilGODlbSVtFNGhUW2R3NkJ1MGNHQlBQL0QicXEvVCY5ej5TLEomJUZCcHR4JSNsd0I2NyRnJnF7RG0oPTVWUSpxXX03YW10UTohb00wSXd9Kz50Uz1HKFZ5OWhKclNIUF4ha21aR2Q/IyF7K01FanhYa3BFbTFVbHU+LFlbZilfYWs3JWU1eGIlZU8oaUNkPEd0TCY4S1BN''@;'; put 'put ''ZEJlNGlkfGp1LkpLe2ZeRCNXYkthUUEoSV0+KF46SXlpaEx0OSpaMkQoUyVEey9PJkQjJVozX2dtYjA8LyM2JERMb1h3Mm5qTXt5WF9OIWJIaDM9NHAjKk14QiwjckltNkZXbWs8ZDF8ZVRsaEp9eHI3fSJ8Mn4ifF5rW1NWWEpENExici9tNj0sX01EalpqckFEN2ZuencibGdaWUlJZUcydio1''@;'; put 'put ''QFheTiprZEtiVjglYi41fWp8NF19RExRbVhkSzRlNzJXfHxPT1R9OUVNOHAzJWdqITs9eUREI2BkQGYlLCpgUEUrISFyZEtbRUQ3JVZVWmYjeEk4SmUqWnkhU01PZypxeH1oc0IoOS9XN0BiQ31wfl8yZngsclZVbCwwTTdCY2B8PGw2TSElfDxhb19vbHNoVyV4MWcoUHgkdT9BSUhnNWxeclFL''@;'; put 'put ''dDNtMn5Adz5leXs3ZlVQJXZQWXppPyRFZmUhfTlwPSombDFZKD1UYiFNaGZbKE4ldlh7dColfXUqU1YvOjxdP2peRCFZN2gwUzcyNXxKIS8qcjdZMGEucykme0RFfnw6QDlvX00rdyxtdURlfD1jWnI0NFFROEg2VlhiIk14dns5Pz5oakY1ZGdhQm0kKyV1VTV1eUZ6aWRySz0wbWIkWVBqMkBe''@;'; put 'put ''SER7dDkuOW9HVHlHWk42VlYlYyRTQnBic1RrY1VNMENERHREb104Nj1VRVsxXn5rKmc/WWtCb3h5RmQ3P2dlJHJaRlpbNXRkWFVqKjF1QFUhWTUuaThpXiIuO1pPUDJeaGtbdC81eU9QRFdNLixzaXdNZlNQMkt5M2FacGB0dGFUcitEOCNLS3l4UXtpfUJjWTZVdHZKP2ldaUM5YGMpNENZbHRV''@;'; put 'put ''YjdSKEVqWDtVKERFOCJKblNnTyMqK25gKT18YH1UVjIwQV0+W19qWHdvU2Z4dDxvcDljSixlOzMrU0okemRtXXd6TjExXVBHWVdCdSNxcTlpKTIjaiZLNUhPYVheNzF8LHIqfWN3aUdkTG48JSohImowN1JGK0JJWklgX2FSTFJMVi5WZSk/Ql06eGx0PnR8KStrcE8oLilMcXV5ZXAhX2YwVGIy''@;'; put 'put ''NDk0MiQpL3B6PjpLLy98PUIqeUVDcEpyPzdBcyt2eXtvczF5SF4qOCJMekZtPDhHVndeTixObUkzQkNWMCElRHxtI3x6bnI9PlRpTjdUU00uclgjUkxCfFZLKi5yc0lzYStlazckNCxQfjB5IStYUmVVMjRuP1UkSFlsXSlfbGYzeWMoWkkkPkZySS81aj17UiFuNThKVWR3byRCQWtTZF0iWi8u''@;'; put 'put ''cCZLQF5DaVEyWXgvRmFJVHcuLHNGVkYjd2pSMlFBQGgzejhaVH1yNXdWdCRqVykkSWNOU2FFP1VpcmU/PlkhRGk3dU9FREFMc1BEInszdkNMKjEoSD1Lakd4LzJpaUJoNFgjUzBnaCNlamBbe0hTKWJVV1l5cGMwXVFfU2lTNHJbLGIzWi5vQXZtZTtVXTwzP3QsbjhmekdeWCZXVUBzfEI9OCJ0''@;'; put 'put ''ZzVKZSE0WDZuPyp2eSEweTckNnZkaH1eKUNVYE9+eWA8TSlNcywrdjlteEl2KGFFcj9ZbGhhYnBROTtyV1NvaWs1Q1hMaTxKKnZNbCJ7aU5tQkZdKjFHUzRHYXFZPjdrP3Y4RDZuODB4OVdSXUB6PG85Knlxb2o2K0Bfd0NDeVchT21POF02O0UqZlteRkw/bDlHREZjZDYhbzNzWjBVZHEoSjxn''@;'; put 'put ''VFBie29pW1NXY3wobj1bdzYvWEk8JWNXJGI4P248cHBNN0pbZjBdL1ZTJmAwX10jIkleM2JzRSwvM0MuIXZsfG58cWVTbVlyfU44dUZDZUosJnteQClDPEk5KWdFfDJfYSh9SmhMSys4d1c9KCNnPChuRUM4SVpnU0dsZWVDU1FDKyNGRzkzYGg8azwvV1dYW3hCN3hWek9GPU56XTJLcHJabiRQ''@;'; put 'put ''eT5paUU4VDspejBTbm1oQSYjP0ErbisoOHYvQF5UQUs1aSohUEA4OkZyRmoqIXYkMn13cl44JnA5L3NlIjNYQm9sUkhDTGExXkdZajVLLyRvaC90e05icn58JFthL3omVX1QNiFTamF4Tkh8NCNvSXZ2YGhSUmhpNkMsU3h4WlJPdis0aUJrI0wvMENbWFJ2ay9TZlZESD9EQ21oOkYiMDBFS04i''@;'; put 'put ''djdrVkpPUm4rMkVhRi8uYFZBSl9DUlhAVmp+UWVheiI8K1heQzFDQW1KaT1CL0l0O0BoXXhUITdVZEtXSjh3YS9lYU5SalB2biUpPzNpVkdxUFdQSnZHcU8uX3wvZDlnODIxMCE+aXFmXStUUWhpZXNlUzJZMXVENSRfX2BUYFtvNXhNeUNLJGZDTHJIVHFwX1hKOExCVXUxVzlYXnJHOWQ6ZWxG''@;'; put 'put ''MHdLWntFcD19TF5NRU1sL2RwQFJeLnEsVTcwKHAxWTBEZDxpNklZcUZbRSk8YEpqJUk9aVEwJCk0dXpLLHxySHlGLCtON0xQMTQiLyIkVi4iMkMlZHpBSklCMjRsZXBrSypMUCUwfFh5alolSjhLaSVwbioyeEg1fE98Q3N0a2NAQnFvPFJORCFkSz1WYCNSe1BfZHM6WGRvJmRFZl0zaTBjZkVz''@;'; put 'put ''ImEuNHM9Y313LE86ZW5SeDFSLnlKLnVbM3lEJWs8TG4vNzlHVF52Ny9tZWcqK2FoKkJyU3NiWWlaNGRQbTFlU3QvJFM+PEwqfXMwN2dXPF5XPnt1cCtdRWY/JkAyOyomUU47W2VCSGA3KDlGQlJsKi5YLilDKS9uV2s7SCQ6OV93VzYpOCkhI3h+MHVHSHNQOVsxRzlAZmJmVVVJMVtNYFEyTHVA''@;'; put 'put ''RjVKUHdRR0NQIWtPSExVQl1gbCt3UXB0ViRZYVE1WG5lWyFJI2AkOzkhL092R1chNXRbVDFreldeRFoqWSZMREhIWzh4Y2dHWERSdH15Nks7QlpNPyNKflBtayFMJHdHcHpqUENFZ0hPaUxYXnc5aUJ2S1lhZ2RbciZqIlRYXy85aUUhJWVAM1RATXNeXn05eHFBNXVhNmRlSDljVGZuek97Q2FE''@;'; put 'put ''bU0ubTtiakheSDVmT0l4Yjo8QmJRXl9FSU5Dd1g3bE92OWlVaE5ebz03YH0kbmp+Z31dLlouRj1pTlJjRU92dmlBSUtET3ZnO1F3MF4hPFlaI2Y8XjtOME9II1c+TSQqYGs3Onl4WFUsUGRnSFkzNFVpWkI2M2pCXXYmSUglOFReezpCRzdvKTZEOXlgKj1wMFdXSzYxUVI8dSVuTn53JW8rQU9s''@;'; put 'put ''Q019NjFRNyM1UWlrXnVYRnF+UV4/ISVzIzsjJjFRU31PNSFkKGdhSn42em0lKT14SHo7LFYwQFtVT2NOJi95c2E6Tmx2KF45MCFHRkU6XVh3cFg6NGE0WEUyMlF7TzJFfDBLPXFJXiMlWHNWVEkmanJ6N3gqPF0/SWdobUAwbyphQSZhR2xGKlN0S0o/KSVVOFBraHNWYEB7dSJSJXZuZG15WCtD''@;'; put 'put ''VSNTQjpSU2o8OmF8Rm1icnRtLDReSXcjaTY/S005bGEhdTJYQF8kWXgmNVBATHlkK055P302MyxOe3BafllJcn1MKzw8eExhLi9dU3YhUyg9enY9eDkvZyYxLzRpbDtyZ3VxNEdoTVZ5ZGdyZUQoenZBQzEoIi9bZ1sjNTx3dDszVDUhcXpCfT4vTmJHVlVBMFNpRj8lWkVaeDdHOiEvZm1kOUFw''@;'; put 'put ''Tj43aDxwIUtnQzN2dWwsT0thWUZ9I2E0WU42VWxGb31sRUtiP2lPelFHUikmdzE8KklJYmJJIzxxSXRKNUlURXl7ZnJsMUhefndeWWBHXXoqVCleb21hWkAlRE1FK2hla2BhWXJqKzU2Llc2TDNdbGQpXVs/VEdMMHpxYXJ3V2xiK2tlRDgjMW18eEZJXmFGWCpkXkdla0tqb0hKbDo+PHM4dzY3''@;'; put 'put ''VTRqPl81Zks/dTJkIW89Sip1cXN4XjlEYDhtRSF4ZXFCRXxCe103OU9INFZVWWhtVmBAIzNSSiVaQjsjNzlVJDc2Lnx1Z01aclpaJEAuX1taPnw+U29abjpwbT1FQiF4LyVgPT4+OEwsZWUzKmVlOCF9T2IsPFtuQ2dEM01LenhDJWZNYWRhaS82ZmNxXm17bXxraXk4QD1hUUQwfDY8ZGlvMFM1''@;'; put 'put ''Ji9Wcz0sKDsxTD4zLzgqKTs6IjhNTz12LDIjNDkhJlFzOmFlfXpmWV9LVFJ9bkp6L2F3Yj4vVTFWPSxlZWF2WzRwSlB5akk8M24wMC8uOVd0QGU7T1dMbk8xLzQ2cyllbEdaLHFQfiwpWlo8Qm1YPmtCSiEhMVd8IihmIWY3dTl6fWpsN05NN3lUYVlkV0gyPXRLL0NzZT0+YGVGO155M2BmL2tB''@;'; put 'put ''KHwxRGtxfktvYnZdInssNDlHWXkoRltKOVdeUWcwfGV0PXhBR2w8WS4kMzdlQDZEOyojJjtfaitnNFFibGlKdUgoY0lhOVQvXktrIy5ab2tUYVFiKWJ8dmpzPENSbFdTPTIqKiZBLkFrfiNLXmtHK0VBVSo4X3chNCxGckpjQ0FLTUY0OzBFTDxBail3blMhdT0kZkN2TTk0X2A9WDVMOTVSfUou''@;'; put 'put ''UTFvb2E+S18wQ2ZPX3FsTyFZXXZNPy5XSHUlV0NmN1g0cUdrN2EkUDtZNWghbGhaK2FCbj8zIU85eDphbmBKSUtvZVZpZHpITGBROGpiIXdaWVNbVmR6L0EvIjlaNX1oVHk6YVN5VkdDd0leW3J3ISxrfVM+byRHPHV7TVRkUlRvb3AyQWl+MF9xIjRPeHVGLmZ0bHRHXVdnKS42fURaYyFPNWNi''@;'; put 'put ''SWRLQ1JrMV9qNSJAXn1dc1FdQ28qJTFDaFosQHtlSyZQYGpnKHBJTylpWS85fE5DOiYuZ1Jtd1c9ZCpqOzx6cW9DYmNTXjhiJFc9Z11+bmNUcjlyd2VgNT9fJDhucWdfdHhYSERGdUY8dUtIZGNZSyFAOG9QRk0rKTVbaS87LGNJdTh+a1VGYSV8d3VMNiMhTCRHQ3dQPjFKViV7MUZvbSRhKSN6''@;'; put 'put ''eHVVR2lXRS5MeVsrTjR8TiJiezxoJUVwLjRCUVRpZVA7ISolLHw2LmRnYyo+STM/PkcrY3h4LywmPyZSNGdrP2pTajwiL0Q+RltXOktwTjN4JUdsIVp0IzorLFI8TXc9L15OLDYjK3BubzdKUjo+c04oYHtAeUVvQj5mYUV2YCxCSl01KXBCJkExeV5KLCJ7XW15MWExVj1CW3MhLiwlMUIuOUlz''@;'; put 'put ''T1l4UXpFbykzRiErK2NpOmhgP05IRXdGPFVuNDs5eD99fVtGfC5RKUx9ekRkKylebmh4Qi4qUik9ekoxUmJUXmw1UCgkPjJMWDMrIntYKTxuJSlYY2QxdF1wNykrLCtzNHBLNjFqSStCI3F0ejshM09qWV9WPUxMKX1ZTG5lVmlkcEpgckA0Zy5WPW8kKy9WPWM6QndjfCRORmZjdmMpNDBgO3k1''@;'; put 'put ''MGNHancjNnxUQnZeNy5DTEpXfjwjOG1MeHdBOWdsIkZGIy5LfHlzbTFmTzUwR1dtP3xucmYuPSwpeiMxaERHd1k+aDs8N05FX0szJFdRYnhfR2h6ez8rXnpfSExdPE5AYng6M1RKQy98R0NHPWI+Ol9pRU1sbE5NblNyVXQpKkhNYUdOK2Z2WEs1JlFndyQ3VmplMjFFcDB3bCNYZVI4YVBoUnp2''@;'; put 'put ''T1V9UXcobT1yM2MoQDVWa2FRSCxTUk9GU2BZSlJiN2oiV3hROFdZMXU5a3Z1PWAlNVZOYkxZWVM8KiI9NUc6Q1gxJnZXL11OPmxqWDJ7dH4zN2dVR1olU2lzdUMuUyE0SXdNUHE0eGtuPFp+MnlLKGdgeFlZWXVqLyRVc2t0dV1pWj8+R1olRCsiMWZNS25ybjVzLjU1WkMlYXhQR1BgSnpleUkk''@;'; put 'put ''ZE1zUWJqTmZbV0Y8JmAvZyoxeF1BRmVHfHslQGBtRSZnNVhmQ2ZndlE8KHo3L1cqYFAlQzlGeV1WWF1DN0BIZkI8NEl1Rmwxb3AkMT98IntQRW0sfCt6VF9PbVNpWXA1OGtiWUZ+JUBnNXVSUkk3ODE0Py59OUErYCpOSD1hRFQ/Xzk2RjNzU3VaYSxaXj44SDBjSS5ma3tsRVR9dHBKczd6Q0xu''@;'; put 'put ''UipeR2Y8U3M9fFBdYGlmKEB6N1YhVUJzP2xwcl4+ZkBielBjcjMhNClBLzlvWlZMRGVud1hnIlRIYmgvRjw5LiREUG5MKF8zOGYkVUJhbFkxdGlhKHpJWkt2SEdTUkklME5GOUQ8OiZgfStPIkY8IywueXkkdmYkdSFIVjZ3UEY/X218PjRSWDpnMkl4WlFgcmhQJlZfJFlVaGZJT2sxPGpYQlcp''@;'; put 'put ''anU7MzJkbWllUyZgdmVEYk0yX1I/Sm0qZ3dIKzpuQyJqWHYxYFEobFY9dnl4TFNwP09+Kj8rQz9gNWB2ZEtGeiZRTUspZEouPys8W0ViTltvQF5vZ0AjKDRZJno7Knt7TTl7dHdVQGE4dS5uNWFOU1czKEgkTyI3V09jXmhpJnBMblReVWpAYCltdWFrWiNPNFFDO3tlR1tvQGsjb1pSZGtaJERT''@;'; put 'put ''UThmUC5UYGFJMS9HaTppY1MkMVR0JjcoVDJCSHlrI3dvJi89Y1ZEbFBfUDZnIzp7RzBiN1JVMFZZfSUhSiovc3ZETVl6cTdeJUQ6ZixrMEp2TjgyTGF4dD9NNkhbblooWWdkfXlsWjJgNTJHTDE7ZFdoZCJ0K090YyRPJW5tPHhHMUhXWE85fChKJnhyZ3kxOEI3cXdOfVtYQyNpNjk5eExlUyY/''@;'; put 'put ''fVkyKHNARlpaS093OjZCK21hXWMiNFJaZFh1U0VKQlAkWT17VjUyeikvPi9Pe1gmLGhCNjReSkY9ZndeIm1CWmVAQ3lYPEs2ZWIla011bUVyWjh2ImBednFIUylnRD1hKXUuNWcpNmUxdDJlJFtWQDBYWWBscTdlalZLZWZ2dVhlO0VpKzUyR3FLOG0kP3kxLncqejQvLytWQG4+PklPYWVQUFRD''@;'; put 'put ''aUJyN1U9S1koWV5YWjhkOmV5PUtzYDFMO0g6Zlh8cXtCQXBHW3xbM05QPEpRdFMuemAwSHl5MWQxbislbGA2ekZ6UEB8Xm4+Ij5TSVI5KT1JPCNXSj9aQ2pETnwvOyh3b31je2RNSyFQeG8mIT9QNjU6b099bSowRGU/aVpULzA3UztVbiJERTZKXz9DIjBtVHx7dmNsalV4SkBITVNRIjNXSCp8''@;'; put 'put ''bC9NdzAsW1NvTj9nN2hOIXJnW3xYaHg3XSlLNlJzUkpXLC9ETWFYWTJCa1dfYlNZSXhbak00VHY9TT8+MVRAZExZRys6I0hrbEYrcno1dngxdFcvZlclcldHJUI8VHU4cSZaJXdRYEE6Wy85eyFSM3FvWlIjQjBFWWZ5QiYjakVoaj9GYmZxRW5sW3lrLGpIK3c6MWYyJWQhT1lRWzJYeG4pL1VJ''@;'; put 'put ''ZCFvR1tFaj1bYkwjdWFCeU1yJTpHRFIlRiNWd0lsSU14PS9HbVB3KStCUDJkcDAhQ2l9QWRXSnBXJTRHJEUwPldxaSl3Omhgd1ZHfktLZ0NIQTxLfG1wS056Tz0qY2l4PE1QXkxmL09TY3F1QlhiT0M5WWBEMm12NlUuOzVEXiwlR3YkZmd0QSxfUEU/RmRaVmsrLkl4Umdvdm5aanJmYWk3RHFI''@;'; put 'put ''QmZLUlY/SyEmfTUhM1Z0W31SLnhpN3d4SjxjVWdLbVBZIS9HaV5sJlsoXy9EPixxTTJnO2NdP0pzIUdhPHhgcXpPWWY+LiZmLjl5UWlYNSojLDMvbGwrMUs6fT89b0M3InB2Iz02LnpDUUBGT2F9PW4lLFVkM1MrPyl8KUg/amRvJjxXfDxWMykrIXgxOztbRlUjOVRjezg4W1h0SUYuR11gajxY''@;'; put 'put ''PV1yW09xSik5TUwoO3BDUTNCLmEvXV0pPV1TMz0uUX4sMUJGXXJbdT1yX1ltPEAhNkVAd08/QlkuPStYMjB5MVN+Lz1CWS55JTttWFpDen43ckg4PFUlNTVYODIvPm1FRk5TR15CfSI7QW99YEZHJmZqZip4b2hIWVVrQkgxViJqPG0kU2A/QGspJiJFIVN+XzJHSUV9bk5UST97Py9xa0p9bnAj''@;'; put 'put ''eyxBa1dWeXdzN3phWWE/bDhnS1V6LCwve1M4N2I3SVo9VW41YlltOHtwM20wY3hdciNVOHU/XmV7RlRPcmwraDRoZi5JbDJIaDQoTUYxOkAwZ3JgUk13bjk9UXlwMDJqXTwzVEhZKiUyZlNpVT13IT5tbXY3SjJNNCFQV3t8UDxCYGFPI2RFd3RwbV1qZEEye0VGamppU1U+MUc4dyg9U3FmdUo/''@;'; put 'put ''d1lkVClHLnNYVClvYTBKTzN3UEAwV3Z3cnZQKnwyYzxOPGw/QENOXV5NKDpKP2ZVWlc3KldoRiVjTi42dSplJEQ1O0EqfGBlMXdLZ3xRIU9KOH1EU0wucjI5X1ooMDYwKzZMaGd3XTh+JD8xRjdHTWMidDh6KS94TXYmKXdJRy4vN3ZaeU0/USZyc2N9TXEzakh0b15AZ2htZFNHOEZjZjBfe2RS''@;'; put 'put ''L0J+OFFhbXkjOHRCd2hJfjtHfUdmSCNvW0NWKGdYPF4/NFROXWFtWD54PE88Xl5hN0gkY0leaUZge2NebXs4PEtJfFciPndyQEs9aiZfWyUuSy9qcGNIfigwRHo6WWdPSHxyWTB5IUs5VFh5Ojo1PkxZbi40QjxKWkRgQENyU3ZFIWpPNGRVM1klazdZeEx5Qm43OTNOWnhLXj9gIUVSP3Nbb10q''@;'; put 'put ''SUJYIW8lOHZhKUFdTX50YXU3cmE0X0U4N3NgJH5vcHMzPigxSzM+ajhqbElwR3VwNjU8YyxNaUoqOEtbQnNFcUhgOXwxKz0/YT46VXVfYUFvZHFuRylZVDd5VzwrV0Joa1khSTsuP0poLlRsd3gpUipJMENQenosNl4/MlRgTUE1TVAxTzFAO1RnZmAjLClxby5oXUBCR1cqKEVCTFBMWCk3Oj5o''@;'; put 'put ''dzoyWHZHXVFoY01zX3peOSphSkZQRGlBUXJMSlJeNHgmaVUmQkhaOEh0RmNRMVlYKG5Bd0dSQEMka0FSU0ZENlI+ZlowWDBsaU5AcGIqeFIlcWVJJG96SUE+TyRudzpgUm1aV0VHInRxSlBjRExMJkRNaGB8T1V9ZUdteVQpVDFDKixETTQkRUNiQ08jKSplfktEdz1COTxlP2tAb2RpUH4wKy5A''@;'; put 'put ''UHFeKnVrfWlmP1VEdy88ZmhiX1BiYE5SLF4yaEVjJHlmQC9pWGpQNEx4cCVZOEo3VTZJYUV4ZTRdbH55TCYvMUhgcm83RkV4ZmxbWEohVmBrRSNvXT5ueE1ic3t5S2Y3MD55TH1xbiZrKWU0MFVlNWVTUD0wTUxtUEpieDUhTEYxRkd4XSptTV97c1k6SU0qakYkdkwuYTIpMXxpR0dmdCtmW2pn''@;'; put 'put ''PChnW2ZwVz5SdCpYWClxaG85eFpBKSEvbWpfRHt9KUYlRykhRzpZK3F8OWhfX2xrdU9gay5UM18raVFIV0ldfTM2ekhLQnB4Zi81a0srNWtQRE1kOykpZXg4SXdzMVk1JVBwe0lqZDhBKThgM0xBeSY7JVlgVjJTb20lRyRKOU5xVGRETCssajdqJTheLntnRDg3aixmSGFUUnpwcGpAeW42aTln''@;'; put 'put ''PzM8eFFZNzh5Rmx+T21aTC5gWUxEbSJtdksmVmRWZFNvfC9UOHBqPzJaJXlEK1psRkh5JG5icVhuPUw6e28uUFckVkVRKSExSz9ve1Q8MyZgejp3b0RmRTVVM0dVUkhnSEFvRSEhSF9qfHszRiEhRG9YLzEyV0MwakBDNExxdVJZZ3csQ2d8Wk84OSRZfjshdm01W1MlLEdeVixyNnxqIW9TLmJj''@;'; put 'put ''JEZ5b2FLe0h3NV1WeG9iRW1uREZTdlt4fkZoT0NXKmRHeU82SWJ4RXJqSm5dZCtCfjlzYCtCYmlvb2ZkQzt3QDNxbywpUzYlTDl5MVNGN29RLkozU2prOTpNM1VFK1VqajloJkoqTEQ+QiVEdzArTjdMczdlTVs7TjhZd2UwQHdvTV4qeG8xSmdpQ1RTdU1lbDptdipqQH5iJWYyaTdwYiVVbC5D''@;'; put 'put ''bHVIMGlfPCJbTEV+Ym1qaV9VKHR6emJaaX1WLG5jJClEKyMqb3EzVk4xaXBPMUAxb28vLDEvfGdyLjxZWVIyZVRFUWI9ZW1PW1NabClaUEtOflhISWtTLFhYbktbWW5HW3NSZzI8Sz1TZWJmJiN3RltFc1c5NFRGPFhIMGk6YzN2cE0pamd4RGQ6TWtSW30ibF1ecnsvcV1zaU9pT3dHM01ZYTty''@;'; put 'put ''VVphd1hdaHd3IWRlSV5qeUxhQU5VYSlVXmBEMD5Pe3h5VCw2enBRYVtkVH1PNUBbKlNLdkU2bkcucW1sX1YwP3RiKTkiM09pOjtuUF1FPEs4Vmtte2k6OyF7YDVnXmh3Z21TcDksfWokOkxZYXdqPmgjajIwW2pgYVkqcVpXRCp1cChSbDpuUEtOV2c0ZD1dRE1iWyNoJCV9ejhjLFhBOywxcDwv''@;'; put 'put ''OXE7aWM5Vld3NlVYTDJuVDFaY1l3WzR+S0NFUldOOEU2fkteXW97P0o4fGw6ZXp9XSlUP0BXWjtnREVvd092PV1wRCNbR1B9cWolZlt1WS9QWyEkSl00LDFDYHVVK0tgNktLL3dIXzBjMnkkYTAqOnJvRH5rdk8kI2tjblNMLlZ2WV5CYGR0dXB1ZW15cjolV0FUOlFaekVGTEkiLGpYRXwwNG9j''@;'; put 'put ''SC5YdVUreC9iY0ouNXVOKU9nUD5qaSx9NypGW3c2WWVDVmd5QVNsNnRiPyZZX35nbzlUbzhvSTFSODoifF1qbSFVRzQlYypzaWFCJXZHMGxdeFcqbm1DMiYxPn4kcyk2YDM9WVY/SyFgQ1ZeaWRFOE96WEp4ITw6Sng8W3JkRS47TjslZSZkXl14XzpnRVEyRjl5e05bOktJSD5YT15UYVpyTmp2''@;'; put 'put ''Z088WDAmWz8sOThaT3hib043OTdFUHlYMkQuTTN9U3pUPVNmLk4pY3s8NHprQ10hWDJgUD8rPHNgOVZzT255Mko8SzY3TDMuc3piTzRxb09ze0AhIWtJa0kvITw6WitCekZIUDwuaCFtMHsoN2dYQDRFWT06enh4amc8ZVJqTSl3WHIwLkcrVHheZHI3aUV1KnJ4TXtZcFR4XVZ5bzw5QmlXZ1ZZ''@;'; put 'put ''JTFWanlnNXAlJEZrfnx1YHReLnBna0NYdCUoL1A3eD5CfGBgXURoOGshfnE9Yzs5WTFjckN4TWdnfS5Icl9sQCpEQTxxbXBDTWU5KF5KQ1s5RT1LWiw0e31PZHVzSzF3SFRRLl4iKVUpPW5Dc2ZJKFFqSEtYYlh9WSwjcH43R0Q3bD1GVyRCZCwlRXUubXIlQEFBRl4rUmE5U1NweVQ+IlpGT1hs''@;'; put 'put ''WGU6dlRnJXNuaSopVE9iJi5GNkQ0dGBdcCl6cD5QbTF7ezVvaSE3PXZ2b3svVW92emlUb3BBPCNTUUR0dyw8UVAuVXE5OTAiZ1FrQDFBYnNnRjJoQE5zOnIqKENTZnkoMk44JWpVWDpqY3poUVguImIrd1VkcVQjOE5ENSx3YFZCSlUpa2RmWHJAeWhhUzhYVWohP01ZOXlUNiFoTD59L2c1LHEs''@;'; put 'put ''cnQhXXM3RjxZOVRzJlojZkwrUWclKEFqMVY2WklHP2FiblI+YXpNfTpnXmR+WFhLLytuVDJwQEloITpLTFtuLE95cSxJaz86ZCF+fGB3PTM3KyF4Y15FRCl3SkYxWCRGNHhrNyJ5JEh+OWpLW2VGWGwqSkY5KmIvQ1BwbkYjSjt1bH5deUxHZURlciU/Mk9LMWoxTmdWOEFkZjhsP1s5Wk9PXUpI''@;'; put 'put ''dk91VUhRS2RsL3o5S0lpYiJUWHNxMU41NTkxZTJ0YmE1WklHRSUjbD9DfSMhISh4WVozJSU+Q0lWcSF0RjZObCRlRXk7TSw4MkUkP11fK343UlMqfWchQkd7bTBRbUQhLGgpNT1zQHR4MVkkbUIlRCFHTl4kaTgvPzpNNHBldUQ8Z3E1THl1Vz4+WmB0dXtERjJLUGg3WmVWRW9POGdvNVFqIyRk''@;'; put 'put ''fXAhJkBbWDBqYVsjP1VLMjBpcnlHZWl9WzxEcT1aTXlIaUF7a2pEM0x9OilUUS5jOyhEUyMvW2llQFZwP2h3RyMwZyxHZ0soPipmaTRLMik5amVWZVYzTHYzUWcsaGUza2t+Pmx0NVZXdSUwQiVMO0BEL0pNdTA6ZWEjRTs7KEFpTClBQWlSbzYzcTEzcjl0OUJoJUh4KHRoPml1ZWxpW0Y9JFEz''@;'; put 'put ''OWp9VFpaXlR5WFh0Sit3eDRwUTsufjFKa2UpaWVhW2xKQndZRy45KkpVY15VdUQ7fWRJOW0uMVhlW2NFUENlT31YUiYoIyFuWjlCdl80YG1CT0QoXjcyVlJgRjdKM01CISl1NC9NZHU9ZVAobUpgYkQlcXo/U0RWQ2xyXUU3aEx0aD5LYSIoWlEwSChpd2tgZlpMM10udyIoKSMhTzBQIU9OVW5O''@;'; put 'put ''RURuaHspMVBPc2hVPjJLInxMKUMjIXRDKi55NVc+eChiR2hNUWVwInxMZj1JKF1LMF4hLDpaKGZDYW5MPldYcG1fTHQ7SHteVVRAXntlVyFoVDVnPyhSRXAlan0yTUYsakZ0Y0F+VnF0SWlyWkVlSnJpWnhzKnMwenc7Yyk5VCsqfnRwMUU3VU4jZ2pAQ3NMVGx5PmFjRnU6RylZYU5gKXIvaWJo''@;'; put 'put ''V3AhdkhxMll3JHhsN3kxSWVQOGIhPC4uQVo7bGt3RFtzeDl6SGhANHA4V1lLbTtna3xhRFQvSFJKYmxXIU08OU1FQDkwQkgyKncjdXk4cGBOc3c4ZTx5aWg+WU4wLEcmSz5faG1YZXg1JCg4M1h6PENoREhwNDwpRmB+ZEIzPlM4VEp5Ln1JQ0A8KXEjbGdpOXFpVUs4bj9nbzkyUD1pbix4cWtf''@;'; put 'put ''TTlLPz8qcTojKn0kKUloJm1SVyl8SVpiR2JZZjdlOFBOMjdOfkB0USptJWcwJHIqL0NFW1U9JSROTlFZVnxROzZVZnw7PFhXIyhAak0pc3d5ej1kSUsjMyM3V3RBL2pkV2hAfTF0cWBiZHV4TSk2byJRKWxHa1FKJXplIXc6alZnJFpKQXZJQUJgJDFaMXZIW2h7PnspamRuZXldb0FwR11CI0xM''@;'; put 'put ''dH1lPDB4LEN8YGhUaFQlYHd7I0hZSG9fWztuaS8/PnJYR01QS1BIIVA/fS8wa1pSdkxdJG5KUVZHaWgvYUIxWjwpRjV+ciU1LEEkb28vYyFRSlllNV9NWjxHNVAyclFiSWw9aSZRd2MpLlpaUnRjVEY0WmcpZG47WXZ9SUddVVtDYEBabjVVJEpoI1Uyc29JfjslJjt1OTdpKClWVkJhMVRCVXVP''@;'; put 'put ''bW4wOzxoUGZndC5NNFlwSTpoYjdeZHAqKihuK2wvc05JNEcrUEUrVlEyWEVgcTd1RStwYz05bC9jTjw0IUxrS3FCamk2Q1pzVUssc0VjLHwkdSpQPkM9dWg+fUA6LCohQ2A0TEFGeU15NXxiXnBhQilGQSlQRlU9e0ElI3RBPzxTOys7Uiw2e2R4OyVDPCthaHgrYVA7QzlaP3ssTHtqZiw5Pkxn''@;'; put 'put ''N099flJsIzw1X14mPzlJJH17aG1VU2RyTlosMil4cEZMbClIaUBHU2pNSXFPIW1SNmZJVm1vM2tURjFXNUIwJTBDdThzRWlEUjkwMVRLWGtaKyxLfiFTfVFLVTAxOVM2eys7Rm03JEt3JG5zNlpacSxeP2NpVD19XWBLaHI9NVJ0cGFGU0p9NERXJSMkSmtmbzdlLllTbnxuNSg+WntWalNKRjFq''@;'; put 'put ''fSk7RFclYUh+IWFme1p3ZXs+PzRdKU1eV3lTfChHMzk7c01VPDh7WD95aCMiJl5CIy94bD4rR0I3a2FFJSM4ZXFRP0k6cVM9PitmNUVzfHltKkxUV1oqSGVjWDdMbm15I0w6Q2BMO09mO1kvLlk8VjdaOnV3IVllVER9eHN5XyN1TUVINzlyaWI3XTE5WTxme1lhb0dSUVlWfUlnM3p+I19kQ1hU''@;'; put 'put ''dFIzaUs6T2JOU1NkOCNzZVM6fXFXU3BPcUBja00lbG8xdCRqSFJaQnVYLz5rciVSSl5GU1lCUFUpZyVddk1QdUxRRF5DdHImQXJqfUhDZVUjflFoJWYyVlJiPXF1THl7Nk9SeHJnWkhRSXo+XUsjU2xrMCh+PTEzZHlgPHooNSY9L2gxbi5ZYTErKEB6ZXhAajlTRj15ZU83RnBqTnd2PUMwRW1l''@;'; put 'put ''LmpoKWpUJHokQl12S0JNdi5eITlWImtFPkJ1YkVtbU5hfDJQV0g4KUQxNF44S2BGYEJ+O2J2TkxPMD1ye1BzdHcyRWxBWUIpbEdqe3RpZEIiNHlzUERzPzJROFVjUFRYcjtObV5Le1dnTG1rdVc2OnpGPih4R1ViUkFHQV52U31ES3BCdD8uYVNTRXQqWzswXkRoIjdTQGh0Y1FoakRsWG5aeU42''@;'; put 'put ''KVhBdGNRaEp4OlBwbylFQH06QzxmREJhcTxTIUNPMnFJNUY5IzBZQj86b09BdUwvYVlMTmBgWCJBQG9GVjBLUUAwMEo9bF1icjdjRSROUDlmUzllYW9+MS9mMXxaWDh3LE9IYyhHKTFnVCZeTmYseVoyW0Z3XVNsWmJYJHxPe1NvQipATD0kZFA7Kzd1IkE8ZVV1PGozYyRNPSpPVXppeXVfOVtU''@;'; put 'put ''aFsvfDFacGgycVBVP1tvT2V4I0I3Omg0PFVTMTY8cyhhITg5Zj0jTkJiSFFJJT5uYkAwTEVCMS9saWkvYFIjdTRBO3RdIXJgPzdlOnRIclBoZTNLelsqdkUzImc3R09ab107fmVAYT4jVk17dmIiTF5SOWB2YmplSVZqZDVLJDdRfjZJN3RsL2xValkzS1FDTThaVCgvRTVRW11pQEJRMzxIYHFI''@;'; put 'put ''TDw0Om9bb31dWCtpXXRaZnc0fEtGPSlUaXh5TzwqQUtMZDI2KiZ7dVc3QEZpdD9NY2pgeS9tYEp6JDx4JHNPOWdjSVY2R0wyKjlsTTtaciVgbDFbN2xZbE0wQHclJXl2L2JjO3FQZiQlODBXVzRAQiolbllQMEcsQzVfMj9iSmY4WTBmcHU3QjZfPyQqLipYKm1ZZmBlcGs6SUs/WTBAaVA7NWcq''@;'; put 'put ''UDNTOzhDSiQ2OlI4OnZXK2JkTzMqbmBIcyM/VVIkN2tDWDF6NkVUOStDVjk6K1I6MEA/XVBFVyltPU5IYUUwaXZ6KTIxX2s6IlFqcn48Mj14aFhvUT9zKjkuNypQeWUmNlUqUmJwd0BXSWRYPmF0WzopOCRQTWRTbm5pR0FROWs+UWNNelQiKVJ5Pzx3SHI0JWlWJDY0KENCXklNOktMTWExTCFp''@;'; put 'put ''NHN8a09ocEdlejQ+dXk1MWdsZX1uRzxRKCY2IV0zSHddQU9nKm9ePisrclU5Lnd3JmdEaDZzUmtKa0k+OmI7OTg0UEErR3hgbmQhOy9+QCp2I1hLLjNDfCFOPFU/IWlQcU5FPF13UkNZOilpenBJZmxxaHQxI2JfMCNxfShxWVF0aDJPISg7RkIkL2tGKkRyMExPKywsQkFLe3ZNcl1RIkAyJFdl''@;'; put 'put ''Rlk/VDxXZTNgW3x0W2ldd3VGJilvUislL0ZxSF81PTAoXmt3I1B1Sm5PNmglIXUxS1J+akFSUnNiR2RzcGJOb3hBRSosYk1LInp2P1gybWYyTGBUWGtLdTZzdEIjYFpAPXxtZWhkYDpsc3BiWjhHM2dlLHd6I3RoZ2NsUHhJaE1bVlY6T3ldPT5Wbnw4Y15GQnJqZGgqJGc8NCZXRSlnUmtJbjo7''@;'; put 'put ''YSsycHRCKyIjKlghT0g/N2hHPClpPyRCPzttWjNJNHlaUV13OFY6Y3xnKmZIVUQyM3FvMFFROTNSVShHdXhbKUN+cGEhfCo9WiIqaD52LzhJaj45MGp1d2J7UUwuXnE6dDxtOThxTzxjO3lTVSx7IkY+JVphVF4zXVhIMV1Bd1A7RTtKO3JdUUMvfT1JTFlZL1F2TnVAcCUySz86eTJ4JSVtS3l9''@;'; put 'put ''UEczdld6MnYsO0VYejoodldoeGc4Y3dRUmJxY1VTMlVZeDpVQDAqSS54fGozWX5NW1hqJixJbXhHa2RXbHoyWjRxd181KF8mVHQ5ZTY5YnxkcEslIlo1PXBVQU0rX1JXcm9+W1d3Z1tBTyQsU3o0Lys3WjpCT25lTyppa0I3NHlETiYqXjxgeHZ1UD5paEQlKjtzZV4ob141aVUuR0swNypEdkBy''@;'; put 'put ''X3wvdGhiKSs5Z0lHUmU3fFs9XjNdVkZ+VTRkO3lTX2BkY3AqNUVWfn55MFdXPnVHLGhsTD1vT2poRlZUZjJCVXBZLE13aDRLLjlnRklnbl04fXxAdSVpLEV4Lj5ASUJsbEZRKTthd3JqXjRETGRtK0JKMlsjTEcsQyU4XzRUTXEmP1dqNmk+RCgiIXdffGMsSm1TZmdyajpAI3FGalQldXp5Jl03''@;'; put 'put ''IzFKZUJUeSxCMGRsVkwyTCJGKS53RlZIZDVmfSlrIjNkQyYweUdoQ2A9MXBLKlR2aVNOMUFbKXRJakw1dHFSYyJYPDQ+cns/QW8yRWY2clpecGdiLFhSSnQseVg8NDM9PS59OzhidmAyLyJ3N1hGR3xDVVddUnpjKn0mWlcrfWowZURZendiXVJKTV16Y2BSRzlbZkgsMVU5MU1wLzpTWyFLWGFb''@;'; put 'put ''Si5YfWQ3MkAvVWR6bUpmfDFBPmcwTDVoNzRSU1J4YUNCbkdgWXtGXjdlLnpTdWxPM3QjLmBQZCoyaXokeSZoNkh8VT1IIUYrejskLHp6LiZpeFA/MEUobVNHXjcqRzh3bCsuYXIjJSVocXNOYmouI094NG4jI3ZqTlBjR1pXN30zVXZreEt7JGlgTGkmTT5NXVUlUj4pOjAhcTAmbUtnVSUjOn1h''@;'; put 'put ''dGVMZ3xkezw4YVYkNnRHOT5rM21LZyV8V3BiVTtTRzk6OmguVCZsXVckTGR9cFlCQU5mRFN3PUBCPTBtOD0kOnhwSzxIOUl+fnRSVWJRRktJNC82blNmJT49azw9YVYlNWFWUi9hKEdQentAWTNacz12RnMqMC8pXy9uV2JlXl0kVCNpY1ttOV5zVk1seDhrdHsyVzpVQXk3WjorOHs4bm41OnJF''@;'; put 'put ''XzZ+PzooZ3BqaSg6PFh3VXJ4UnQjOGR0NlspPV49SG5nOTBGXS48YWQhSF1uN2UuWTA0eEBvI2BJInQmUlhvOU5sblZoTDMmVyh+ejxuKEtLQHh8bmAsS0xmcj8xTS41cioqS0xkPXIqYDZSaEZPans2aFQ9Pkk/aUBURz9HMipSd2pMTUdnUW0qTTxPZjdMUExJU01rWXA5bjltUSIoUy5ecHtJ''@;'; put 'put ''ZUxRYnFFWWE9emt6U0pLcGQoQW9+NWwyMiwuaipTZWE7fFRbYiRNLlpvUS42KyY5c29qNytKSltaZmJqRGZEbE11ejhpTy5qZ0VQSyZuaWtQaTRuPV5kTjFsSjFLK3s0YnRWeSJmbmxgMkUkKGo4W2NnK2k5VVk4KSVtO1trOmsySUZfMCM+TWZwQERxfWhCbC44NWpmNzpVL1tmcD9iVUNNQ1Uh''@;'; put 'put ''cEZWZDNlQy5jeFl5YE9iISZ8b2cmO0BaYS95OylQWTNZcHxTXk5LbFBYO3UxKVtWX1VzWVlPTUZvO186VlVZLlVXb1AqfGBqODVvS1tBRks3NC5lJVI8bEs5R2tKc2guOzxGYVYyQyRuL35pSyNCLjttYVFGbi5TQmJ1bWxtOk1zPl0kUW5rV0s9eiJ8N3VxYiVHJl8pL3taUVg0XlNLR0VXVmZR''@;'; put 'put ''fG4yeCoyOD16dixkLmxbJk0xT1gxXW4+NW8hdFpQTlFDKXRWTVlOc0dLR2w0cjRyfGZ5W3ByREwpUU1FTUBWYFRRRTBZV2svQnBWRFFRJCRxV1FZczFFcCxbbEc1YUdvQV07cUR0JGQ+WEY6Rk1LLjhbQiFDdDglM1NgIWxMRXY1Yis+TksjWXY4NENmeUN2ODJPdjh2NUNPNkkhN1E3dW97NGBp''@;'; put 'put ''bzdJZHxdVkMwXnA6TUgvXno9Xk5PIURreGBKImMudS91W3U/dUo2Vk5yRyopQzlGeEdvTzVLWVpZWXd0R25AbCM1ellPWWA5WXhvLm5qM1VvajsqSyZma3UjKmF3aj9DVXw5IU83bik2I2YwUCw1MTNVeGVsQGEmOF85WUo7e2MvIUZ3Y0AuKl56NjxtI1pubkNHczRRJWl3dUpEQyJyck9XeERs''@;'; put 'put ''Wk9mQykscTNiWyFTVm9ZVUpZNGEyajdhfC5JO1FOJUwofGFFSX51b3kjW1JQI2Y9NWhCfXk2MXIwakNbNj58M2B5V1owVHciKX42JkpbZ1JPMCwqZD1EYFJNKFs3aE91b31PYjVoRkxPdUw1OitHQWVWSWdBZUMpU1drdXRXM3JUT30+YlRfaXB0VCh3O0JAKCxaY20vNVNpOTNtUXVFT1dKblY/''@;'; put 'put ''Xk8yLCkxN0lqTEg6dTZvJTQhM2c5bzJQOENGbFcwc146eFFbWz0uclVUUEpAVFU5aHhueG4qcm5xTllDSFtlQjNJW3RrYy5KR182Wj4mYENGKVIsJFUxRVJ7JFN+PCpSX0V3JC9qTTxtPWpUUno2R3ckL1ZHak0rOzM+aT5HfSRfd0dLQl9zRyZFNnMzMEZQeGI5YXdkJVJ2P2xsI0cqbmVFaGJv''@;'; put 'put ''YyxTNThkeEhaVVJMUGZPSCFIQFRLV15keHpTYUJzK25bN0diSl1VUjdTM0d9YypucUtQMGBKO347I2ZmJXkzRjZ6UUN5SmdCInpgSkA2az9KUlBAeSh0WXAvL0opWEx9K2Q5TTQ1RVtVUj4xO2MreCV3UGF9RXdGOX49c1Y1WiVtM2NRMUNBV2RkR0FDQnQ8PiZTRkwxbGN3fFAkQT1JdE0/I2ww''@;'; put 'put ''RkVDUC99WCVgS0YxNEMyaShze2Z0KlNWK3JJbFt7TF9nRSJvUF5DfnA4QnkmUGVjMU09Lml4bGFrT2JYMGVLX19uZjxoejxVZWgyTT8lLG5sZFIjXi86a3RBRkRtWGBsTzdWYGFVTnNsdUwsJUdhLyUzeVJgWCN4Jm06P2RIWVszelUwK2xyQjFNblVBZWZMZ2tgMnBua2AoaC88M3J2aDwubFpd''@;'; put 'put ''WVVPbFtQKlZCXUV8eDlVNjwjOi4iY1lse0BgYCNpWywrW144fnFuNGJ7bnJrT1paQDw7RTc6YUlFYGk5X14rdXsoSFAzcDFTaVIlXXRWNTVnPTNkWTc/WDFfS3FGVjJjXi89Jkhfbj58T1hxV2FeS002KTg5PzkxRTl9TCFvY2c1UWcsfSxsVWQkWnVPZzhbWm5vJEVwIlRWeV19ZjJvY2NWN3ZR''@;'; put 'put ''Tj0pZjJSeTZnQlV5b19KODc7b0pGZ2xzQzg3WjAhZmdPS0guWlpldyFwOmFpMy59LzZvLjxfNXFbRktKUlBLbHdmJWovRiFrYHtOeHBLUW4kSDBZOV9IXSp4eGdDQmxBbFArZSo5cGxWS2clSH51dG8ienE2aG5TRHtqRS9mSys9Iz19X29vZDZFcEQoPjohYEJkaXw1OlBfXl1PcE8kemwkdiJW''@;'; put 'put ''UlQ0NXA6aFlqZCRkaWJuWmtgN1MzMVlwTTN3eF1vUlZGO3QhQFZVJEApNmRZW3JdTlZlUW9AK1RlOXRQMnZ1VFdJfVtfSCJMX0BgUlBEdiJOWiVFPilueyw3eWAheCtGUCs9KUtfcGA1UDtjbjQqJmtIdFFKRU4uZUxZVEJVb1IlVW5QdkZKaXJ0RD0+XW84K0dWe0t9VyopNGdoLGVCUVY9OXRz''@;'; put 'put ''YVsyQHsxNGg3NT1wLjo5fn0ibGE9PDhwUmlXSDZ0NTQzYmNdXzU1QjJoJjxAMVElcXBvRWAsPG0jaEwlLFFobmBRMmgmc3M8NEppZENBU1klPyxBaz1eQzJCLmJ2JnN+fUVNfjxjenJ0fWdNOmJ2TjdCLkwsamNCYkgycSE5az15aHw5THBjI2dSMmZXdzFdcGpSWjNQO1pGOG5RLnQ1TmNIeUEk''@;'; put 'put ''WlRHaVQuIT1yb2pbJlNNVDFIUVBPOERIPnpUYTxPYyw9eHZPbSUyT1h6SGFjT0koQkZgazxuIm5qW21dMG12IyN9P1tGTWF+P2tTZ19MIlhIXT83d3c4RDNyOzc9cyolJjIpc0h0SV0yU1tyV2xZYHJhTC5UIXclU00hd2NsUm5eZjZoVEp0WWIkbjozWClaPHB5YlY9bCIsJU1JXk1RXmxgRmt3''@;'; put 'put ''Oio8QmErcWJ7cnJYVWI2bU5+Pm9jZiU0YjY+QUxfLls1elElcWRVbiY8QC9wNyxsKDdUQ2UmZUMsQnxtLy5bPy5GcSkmTFlkM3dUXVRGOk9kJHsqfCpYIlBfNlkyNF5LYUpdKmdmMkJPJnB9cSh8PVVMLl87Tk58UTw8cG95VWBSRlleOVZxVng7KTdUOHRnanxhMjFZQipoSCpYbjtVMyNscnR5''@;'; put 'put ''SjYxKVM9RjlNVHYkK3BDWFlzfVtoISkrUi51JG9UezghL2YyJi4qNGxdKm1KS318dHNOKH5NXmxrPjpkc3BXPSZSeHN4aTF2fFsmJSFYY1Q2I3RrRGxOYnZpUEM+VzRXMUVJI0wyeVMkTTg0VD4me3ZjJE0qTmR2MnVmIyZgJT8xVS4rJTQsMUAqfjl4VTs9WDZ3OktRM3d3Omg3NVNSc3xHfUhR''@;'; put 'put ''dHElO0cmKzIocC8ve3pLfjlzJTQ6ZjJjN3tKZ2x8Kms/NCQmUDR6NHF8e0BteDFSOyJUfjxkLkBRZCtYNTEpW19GdzV0amk0OjEsL0p2TSwpOT1POGlvTDMzMTUmTj95JCpgaWl7OD93UDpsUSZkQTN7LFssL1M5XiRQeDAhMUJ7WmhwPiM7X0ZCfj4sM1UoU0pyQTNTO3JhUzVzVTt6bW9yRkJx''@;'; put 'put ''cltrOSY7P11ucFRwayleMVVpflAkQ317eWQ+LGJdOTp5WE01RjN5d09TM24iUTN3PSMmNnBgUk0wUE5rJlZHY2VZJFYhRU5mcHBoZVQ2JmIzVUUhMiwlaWJWb0cqTT1mNG1EfkxoU19BYEF8Lzp1fEp6bTpMMldXVi5Ha3phYHc7RzlGckpsJDZWKWMqbjApd0dXQlduJmJhJHU1fW9MM0g2TnY1''@;'; put 'put ''W2BBJl8vWXxbKC42Z3lIYXlOK3ImZTx9N2BATnBsNylpbDtKR2IlWm5KOG5OQj1iW1NdYjc8VS9aVy93UFoucG9YVnJEdmxnaT1eZWtRSmZ2R0o6JDpIMyg6IX4qTkErTzohVWRJNjIoNkMhS2EqJShsNnBvT2dPYn1wRGVqZGd0cDNMZEhvK2p2LkhfbnAuZ1BWd0t8fTl6ZWA1Zkp9cCNrd1ld''@;'; put 'put ''WlZuVC42VUN5NTFgS1RNWz9DSyFKVDosfmdHZTk3ZUsudXI9bGZONSJeLGIzaVQyQ0RiUno0eUovUDZIZTkpZmU5MTh2RC8wYntpZmNsOF4/UlYxYmpsdGpZfGhAZCJ0fWZEU2dmQUA8PlNkKT9EXTp4bS9kMiExe0k6QHdzbFlEO3lFR2xHZTc3YiROeiUmUkQqbDwvXSVCSDZ6I3BwamNrfCZe''@;'; put 'put ''TzVtRHpUSk9gRC8qZUFMfT9mVl1gZCFgKyRQdVtdQFdacGJreUJ2YVhoRkt8JEw7L2ZyU0tLSTl0cTFsWyg3VClzcjU0N0deM2JfakZ+JSNQQzE+OnNMfj02b3Q5WnErdExROis/KikjVlszZ2dLb3VFVlFrcCN4I2ZWSC5iMzJ2WTJhZDlTdG9sOXt8ZVsyc1pvczlJcl9wWk9abyM8dFN9Tncw''@;'; put 'put ''LlRETlNvNWBXczM3STZMRSxDMGxoJnlqfDp8eTJ7bmR6Pkwvcj5FQDR+TmdCUGI+Qm5NanVzYFNaLHI+TzpsKUFkU3lgcll3QyssOXhuV316OSh9YEA4O3NMdzI/XU5sOCxXO1gjaX1MaitzYX1sQzA6MzBtfWJRblljc1R3TTRIKGlNLEA0bEgxTDM7L1c7L0omJW56P2V9ODk7OHt0ZCUraipw''@;'; put 'put ''LyJiVyZoNjV2OTIuaXEqO3xTTzNTJV9YSk4+ezpGIXRVSUUmcCRkLmhnWGlYPnF0e25xfntBKCIqLHcmJSllT0Y+cjIob11oe0NeIVs7bEE7TnA5b18jLEArfHx7eFhrOXMrTz4lTXFTNjdjKVRVUk1IbSE5ZUpTNGFvdjN7RU1LMTZAKis6RnhjOVRRbT94Pyg1IWRaKn1bVGQ5TTNpRShpN3hp''@;'; put 'put ''VV13TXpBJiU+eChbJC5ncTZDaHFqQlp7NytQQUdCJlF+WGB2VnhiTH5KbVJnQSxXemQvNXNnW2RIKjNQTk1UM2FGYWFRbV5GTzgkIjdWXU5NWTZkakg6K0hSJHoia1dfZkw/eSF4WDgwLG5QXTFuL09DS2l8SkxhXmNRMztXOzZzSD1EdjZkbEVTRT1dKmYyQjJhbGJOPm9dO103UWJPYj5vbX1G''@;'; put 'put ''anpgP01PZEpnXk9rJFMoOXpqem06YDhaPGBYZD5FNzU2K2dTMSN7IiFdcDdhQ3xNMyhsV1dwOVIuUWRUKSUsX1ZVeUMoIT1hY3svc298QE9YSllbI3lyTGc2K2pkR2IpcDE+akt+JSZ8Ji9kOSFOT0UzQjc8ejZrdWIyU3ZrdSsxTDNlUT9gU148a3FtKVFxSEEvR09GakE6amQrfHJIZSFkOiZi''@;'; put 'put ''aGFHdzJtKlB9ZGdKKFZsKTw6RiEwYGwva1Iqey5bRDxwIiwlRC59Pz80K3hIcEEyZDBKWDZZN0p+biQ6ciVtdlckNW9VVDA8KnhhWFNOZ2lZW2hwMjd1aj9AMC8qIUdyJGtsbSI8NXciOVM0K1MidzYmK3kyP2ZlQUBBPXsqaWglNkNOcX5QPTdQYD1RUUJiSSRqYm01M2dFRTc9UGB4eCg4Z3pw''@;'; put 'put ''Y0MwfmEqciQwIjNgQDIrRzJIKEdfZzpZSSFfUDUiTnheWUgvMTxwRkIvSGhPZkVEdEBubGY1KmtCfkw8UTxENUg+WEpqMCVMcG1kKmo1YWB0UWciXmpoYk5ieE5DTSphOFJ2ZVg/a2NMZzB7U0dNLFhqaDB5OkkuOzA5d2FPU0RaUmVMQFIudSNiV1UrNDJaVl9QS0d5bFEwZztYSkw4K184Nlo9''@;'; put 'put ''Vl4oYlAuQF45dzclfG9bcnMlaUBhd1NNfVhKJVhYLGc/XXROI0pmVDgxdE52SGxmM3k5TDdTNSxtJGFldjJ1aS9aKixHbF5HTHVEQzt9fkpPQzRMUHZ6S3ZsOUp5XX4xMGpqajx9RExzVDw6Ozc0a2ZOVFd6QENSM0J1OztfQCk5cj5eKCZNSmk1TVhYRGtUYT9sU0IyQ1ovdFh0THVdQjYzeSpr''@;'; put 'put ''QCRHKT5SLCFgXSQydUAmQncpN3R8bT8vT0leTXZDQlV5YTYjaVc9Izx1JGY9Tl9IVWJ8JW9xRkVLekd7YHFsRFluMCx+d2o5ZT5mSV4/ck9lKm45ZSJYRF4jPHNHIXBTIzE8Vk8qJnM6VFpsZDBvPTs4cWFVQ3UxfGxIQmB1UlRtVjUpR2R3c2k1dTY2R2tVS3FyRjYhQiskdHVvPSU0fUh0Rjpy''@;'; put 'put ''blcqQFhgL3JiREZ2cGR2K1syWjspYTNUTjBSXn5BPnxpZHFZWCMuQClxQ0U5S01KQmZLeDpoR2VkaE02R2V5bEE7XUpiIXVieWlad0ZvPmNXZDwseFFJXio4UyUhNktMfE0ldiQjfjBeQFpaOCNDfTQ8SjAmMmpmQWF5WCJncWFiRW5hK2ZQJU1hR0svbUlHNy5+Yj9yXlIyKDF2SCxaa2Y9JjRr''@;'; put 'put ''U3xoImgkMSFXcUNTb3NjQksrK21CXmVGWDN0YEpzc1F2RHVodURkNUQ8bkhyXlAlVndPdTQhV0FAeTAsKnkwZXdSaT1ZaE9nZk1hLlRwN185RSN6Wk1fMENVSWFgdGAuI01RMmhHZW5Yc2I2VXxMOTExO29+fjs7T0NCR3hUPUE2RjJhaWdibWVwRkxDQTFELn4iaGQwSWNLOGBVVVM3QGE3LnVN''@;'; put 'put ''InJXOncqY2trPyJoPVlaM242RiFjakFZNT5lPDBYcDd9K21pMXZYNTcxQ15fNGJobjFaZW1bbDZYZV1QcSEhMWd+I2sjSGgqO0BSVVJPZyFlOGhkJk9RVV5AVjF+azJ4ZFh2Y1JtSjAsTXRgN31xLnRoS0h9R0g1XjlCTGRhUWhPQDkjZFZnRUh2cnBqUF11dCNtQEVmdnlkQ2hSc1hYb3FvWDx0''@;'; put 'put ''dXl6RDpuWyk0dFVAPnF8LnVqYDZJRzx8a0BpcXA6OiFhby9xeTI/KyldIXAwXlBiRWsqaCkvZ1ExRHJjUUtkVk1RPHMxY0s2YmlvW15VUSYsQnMqYCI7d2leR25vYUhyYVI+T00xN0pOSzE7QCZ8b1ouWHFvbmgkZSo0IkxmNjJEent4RnN0Zk0ldjRVWy94byRhLF1meWMjYjFGZjkxPSZzSGNh''@;'; put 'put ''MC4hYHNYN2FxbzNWSzA4WHNYZGNwKn1oazNMcmRCQFRrWGNjNjQ9VklebzcuPkpbRnd6IWtEZHglRXVbXy9eQ1E3V0o8X0FRZGx3IUxoTjxQYzBpaCE8aCpkSTsuans5S2FzVSlkdSplIkB3ZkZnKnEpaGQqbmgzaSpmWzs9YDBUWEsxYFVEPFhmVC8/RXVISnlSJT1eSGVNRW9pZHo5VGspcXsy''@;'; put 'put ''e05QO0VqUVlYKEU/cyJZdGhWWHxVWXBYdUMlJmlpSmJ4YzopQCJTXW9MeVtCX2BGOHxZaiMpJUZGVigzUyNvQT9GXkdlOj80dClfby5xZUlqRlcvWGNsJjlMM0ZGXjNrRTJNIihzJk84cjMhT0Y3Y2o8Ym9ZWnVJVzFINy8xfmNqQWZEajNIKTRWfXRTSnpeb2A4ZlMjP1A6PW8rU2lkLzZlPms7''@;'; put 'put ''N3cvX0lNLkp7STJGaDBZVU9PXihwcE9oMCFwQG9iYmkjOGxMdVNZXnBrK3xZT0c4ZztXOEAoWyh9SXBNRFBKP044LHhKLiE7Xy52YGZTRytwNn11NS5WNSVJeWdub1lXR2VyXmlZd211TSx4cFQraHVsQDFSTW9iPiVqTFJSZi4vTzdaVU9PUjkxY10kdjUzTV9VJl5AR0BWImBxIls7SUJmJWN2''@;'; put 'put ''X00uSkt2OFJEdXc6TkJQKjYjXWBgfFFyKVI/fTBhKiRNdEgyOj9xOlI5MX1iUlpeP2pTMl5ZekpLbSVidnxxWWUkensreipVaThyNT1WMENRRjhwPCtqfUZ3MCp1d0pxYHchQS82PGkkYiw2PzsuOWVtbDkjZlNde0QrJmk2ajddOTxAI3NsNmhvcWdLZ10vWTxnan4xbV8qYH1fLk1tRTEqSVh9''@;'; put 'put ''RmplUGBoZjhOUnI1SyRbQEM4NU9dcnxxIi5DOU04dU08NERaTjh3Yy5KUmg3OEVJJiNEOCtXci4+bT8rb0l3TXAvMWhBJTBFIlB+QiooNGUlOV5IRDs/YVNpUzVPQ1cjSyFMPW1FRClgYEllclJ8Z1V2ZFRaWiFYdlNST1UrTGFacm0mYSFeY0BUSTpBZm98S0tmWEohUjcpNE4hLDVHQkpsZXt9''@;'; put 'put ''OyEzTDNyM0wzMVpQY21SIyp7YWQweSJLTT5oZyEwISNpaUJNYW15PHlmTnpHYXByUDt5LlE7WnJFd104ZHswSzN0UEFnQ2VgJERYZipfX35fPDdHeFNHaEg8YHNvVj5iPGdKPjtgSCwoRyZqaSZsfVB0ZVNkdlt3YEorT3liSzE2SVsvPUk2eDtSaEEveDt0MkVbaEt8WyN8QjRmbSZkc1h8WjBU''@;'; put 'put ''eVR5VDE2Q0k2UTNTRzl9TzxmdU9vcil8UW0xdnQlUWhBWlIkPzd8fCxPZV1NMy5YVCVlLjJwNWJwN352JXNkRSJbTS5dSFRddiZRTX1uW21ebGE6Tmw4NHZCfjMvYV9WSTF+Jkc6S2Q0bGFZSUQwLispUzZeZG02LEBpUj1AKjpGZGN4PVVgNzJmLmdJZyJLbDpTUjc3TDN0emNgcVVPfUVUVStO''@;'; put 'put ''NStNfjN7cmNRendKeilkK1I7MTtAMHd4N0Y3cnN9U0pkIjdOJUlrLzRVJSRrIWR7YHUxRDhnem4xbXojfjMlcj1JXm83LCpWKlFkUSxwNjNPTDFmRDxCKixdbilmfXlQdURWOm1OYTNPS0ooLHxEMUlkYUwxTnAyQmtFVCNxSmw9XWtXPVlhTEwjWFBBaVZERzlEW2gmcGswM3Z3VilXVX1sO3k/''@;'; put 'put ''WmlOWWBMcDkweURzTlZ4RTBWMTNzeyY7em5wVGgpQGg7b1lhYSE/PngqdnMmdFdnUGVvRXBbbHFsUUEvT3NMbHUkNT0hJGc1W3t9QDAoPV9+a3goeiFRLl0oUyIhPzJNZ0FnKjlHPjo7RVsyNVkxdE1GSj9aZlchQjJrZDk6NnUwX2JgOl9AWlJVbzNITEcmd2IjRyR1VkcoVWYySGxQUUp1PlMm''@;'; put 'put ''W0B2ZzJFWzFLdjhYRGV+R0MqMH1MTkMiM3VGOS9CTzs7IVsudkdlcEpydW1+TWVCT35CdzRyIVRgIjJeaUVSdkgsPiRJPWlqalplW0w/ITokaXR0WG5gdzFsUmQhdV9ecVBOMzp5XUAsdUh4RElOTEM6SFZQb29ddzsxVFhnRzFIXUJ9Y0VpT3R1OHpIU01rTT40KWZxMXJSU3ZrL0w2KFtPdkhL''@;'; put 'put ''dGBsend5W3Q4SHF3Zj5SNmZWTmEyST1MPjp8MnF3eXorcDRJfUA3PiNEWzBHOjc0LE9SVUFAPT9XOC54bj9LIW88TFtoN1p7ZWtgIWxQLFRZSyR7YXBNOy8ueyxZKiEjMF1teSR7ZzI8WVY4JCNNW21xIzd8RSk3ZWhQd2toOl93MT4zeCZILCx1SnpKK2p4RGpKXTBPOWY6VSF6fFREYWZhYU8k''@;'; put 'put ''YSJmfEdpSTF3S3p5KzQsK3Z+XWZwSV9OW0U1fHwsTyJtRUVTeFk2TzleLktNOCxdNFFuYFVGKGpCKWBzPzZVQE5sSStOdEcxd3FmPEJ4eTw2YSYzd2AzRl0yMFdXRVliR1ZVUVVgR28sY0hfXTR1QSN9eWhaRSNTJDBtbytrNUgoMzIpNmBvOUQ4LHM1fSVUNj1tSmY7Wjs8UyE3Yn1HfWRmJStr''@;'; put 'put ''fTJvdT9aQmAlTVI9M1AwNGxlPT5sVz8jWVpmVTV2P206MGBxRjVTaDheWDUhVzgvVDtUJlJvRjhjcno/JFpdQFgrVDhySXNETjBVOUpoTEtXPDkwMDopM3UrMixafns2bnVUITozQCQoMSFMW2dJSTMhU01hTzosMnhmOlVpMXtNQEtMZlhbVzNrLik/RjhWNWpqNj04ZkM1SWJnQmMscmlLKTVA''@;'; put 'put ''TVRlZ1FDXSkkdnlGITkhKE5aWFplRSZTKUYrKTNEM3JTRFYxSDAvNzRNUGJHflQ5eSlHSnxsP0AkZ3EqMVB6eng4ezlJUDVuQlYhLEJRZGhhNHh1OHlsbHhsKmpTZ1NPNkZnbmI1dl5dXk5kSjVUOUxdeCwrIkxILlJfbDdWWTEoeWVCdUEpb2N3eSYwO0YkZWsjaGJART5tQU5qNVhEWllbLjAy''@;'; put 'put ''W1l5al4waVtkYVZDQCNyUno4aEpsYm11SGc5fTEzJkoocG1jNXY1ZTwvVnBmYF9AP2piJDtkRkZqO0FHfCNbN2BASW9IUms5MihfUEk7M3UxZU1uPWtCM0hbcSYzXTppdzAkYHFvOCI0fjYyNUxpUnJfJFFiVE9pLEp4XldWcW90e3J0MU1kcld1WEBQalE2aGZ2P0IuPHdlZiopVzBQQ24vMVJ9''@;'; put 'put ''PyZbLEcxYUhhOjkzelpXaUNaTD46WyZVb1J4UXpzWGNyOXRoZD9UY2AiVCpaRnlQan4qSkN0YF5JUTVIZmNDXXdCZzdYdS5UKDY7bXYiVFVAdXZIUGJ1OnVhZVJ9VnFaRVdCMHx9UlgpaDE9WCFPMTVOUFMiaGRgJTAhbTNqZik/Njg2IyQqN2RKKlVJWHhGQ1A4ejU6LlZlbUJRZndCXiwhak9h''@;'; put 'put ''fG9nSWZ7Ynk5a3d9anJVSWN4R3RjdkdNeXN3L3hkLlddPXApJGl3NmV1aj1UW0ptKzlfSSYxRz95K1BKJG04eSxhQERidnN7dVAmIyhdT0pCRHgsfVEud1lhW0d3dTNka05nL2tYSlhjbHsoJkZRaldORClzUy8uImNWVX5iPEF6X1FjWnJFTWxFM3M+K2dGUWFIVlBNZ1M+cTBpWiY5MXwvOCk2''@;'; put 'put ''N3l7QlYqWVZpVlBKenU3K2x4SDE0SWJxU195cnUoRmZLSkNgcTV1ayFbdkopWStFc0g2YSVxZ2J2bik0RT5UMmQ4WTFLJnc9a2B0dHA9PT00Qml0aGVjT2F4e11ddEVfOTVxSU92R1tjbzBCRmZxfDEydTVCZEQ2RzVOQVFgdDFwUHwkW2pHbnBdVW1FUzJlTUgqRTNmW3hmazRrSDlENDRieVVR''@;'; put 'put ''TTxIRWUzbXZRNSNrNmFhTkNvdiUrWWJpN2tfY1koOEcoK29wS05QNS5PcTg9YGFFUVJvTXA8M2E3UlgpKWI4aSlifCFJYl06SjNDSVRDRGw4MFM1XW9EWzNhQV1fcTB4e3YuaUN7KVl5TEksYkhqWD0sZm1pRDxCWS9IZXsjJTdJT2Y/YSpmRERrdXBIdiJdfHp4UUdtfEdHQzZKQTM7TkEjaGI4''@;'; put 'put ''W1Alc0tsa0lDKGNud3EwRWQ3IWhNZU9bV05gck99dDkqSXc2UmAqSipSO2NQP2BYalpXPSksRnBmOyNYME5ZcyF4cSY4bXlJJGA8ekYqajhWfnl8T2pLI1lfSX1MQnJ0REAvdVhMUjZCYiYxOTQvaUdUSVlhbiw1Q2QpLlpnJCE3OkpIfG9wel0zdjQlV0o3bSN5UjJ6UUNtcGIsbSIoby9LV1VV''@;'; put 'put ''Q2J0byM3UyhvbFFWOVNQRWg1PSFJOVVrSHx9OGFZZSg1ck8mU0E2VWdXZGZvc3hPd3wudnl7YXlAVFkhU3ZRdzpLeD84eWpYeFhvRnFCNkIsWkZnO2lNXzhCTU56JDtQcD1UekR6dm5wen51MzR4eT5NLzkvZG52bWcwcWxnNGM7W2hVOWM+YDlqIT1haSFbeVtvbDlrcHVyJi5OImJEYlFJY0VZ''@;'; put 'put ''ZjtvUTM4WDtzPzglc3g5QzJXbVI0VWg3bU03dzI+eHRJOGYhLl5VQkJIYEkiPFA3Y0FjP2tgSjlCQ2g0RFQjPjJdUXp5ZnB4cURhJUlnNVRefGNoO3RTVmYlQyZUMytWMWNyWGRCeCEqQ1h9cUImcXFTXX5GOiRCYlVyTk55b3Z9PyY6Nit8RThhcm5oVStYKFl5MDxecG88N3A0ZkAsaU5yOFhr''@;'; put 'put ''YXBuIUwsR00+OntgRztoPUlhPDV8WHhvdyVeYkY1fD0wOzRITncqYXovcyZEO0hETC4wREVsNCVQOH58NGVSWjo/bVNJYzs0RzI/KVYwW04zNVppdiY0dEhQTChMfUorZVI0RXl1KU5Ge2VkREAuJDtmaGU0N2lkY2MuPkRwTHU/UmdRdHgpNThTIztObGUyOyxAfCNIOm1TQm0kSW47XiZDYyRC''@;'; put 'put ''IzZrUE4zdmB0NVU8XUZBKCR2KkF7ek19ZlZTOFU8WiF4fUM/NEchLC97RjM4eVV+TjlMRmt4UiYpSCk1amdWKE1acmpgOk1UO3V0a24hZlhHVlVaN1VgRU0kQz9ddVE+XnlAcVUwJHQ4ZjlQdzszdiJ8dDEpbkZHZS90NCVla09Wcm90R1NaLjF2OD1IdEpOSUQod0FtKFYxL3lpRz46Sko9ZDFu''@;'; put 'put ''UFQlUCYkU1J+ZztCY1hyfWYhUWBobWB7Vypda0YrTDI8WTtMISRddmgkZTwxN2h9bk5RXlkkLiVHUWQzU08mX1JKNn0iS2JWU1ghSzFZPTcuOyR6LD9vUTNEZiE9Ilp4eGxIVmpWRUVNd0VkSkozeHU3bHEjYHkqc1VjeChkejJSaHE/dSVmRnl7Y01wa3BtYFVBTE88eV5CflY5LFtPN341ZllM''@;'; put 'put ''TG5YfFp2UTlNciVlL0E6JiNINTM0W3o9N0FzZCFDZlomeipGWnV5MGY4TGhxT3pWOVplXl94V34uNk12UEssISFOPk5ocChPRDAsTDpHYFNwODdKMyZ+dGR7cyU1KXdbcmlGPyVSNUxkenVMQEtkL00hZyhPYWszNGx6eWx7On1RTHRocSQ0WGN1IXJCMn1DQVElTCtLIXE1aG96SEdGaXc8KyFO''@;'; put 'put ''TkdkfWg5VTE3aClwd1IvWkB7YCMsayFlMWdxY0Q1YGsxe3dqSC5paWcodyZ7a0lER2xLdkp6P21lX1tNNlVHO0xpKDJPRlY4VXldNnhZLFlDKSQrKiNgUGRFPGMlW3chSXh6eH13az9xbChZUHosI2g4Tzg/W2IyYndyZ3ZiZCleKDRBa3tLNjxEdWwyYSV6aUVGa2dNQUEqaHtHQnRWRShNZWMi''@;'; put 'put ''eXMpPHYsLEd8KkJJSVRQW096dEtVKEZQdnB4bVJ+WEFBQUFBQUJ0JkYqaERscWkyK3ojbHZUSEpGQT0hOENLVzszZ1MqcHJ4QzhJSShkNThXdlB7eW40VHhiOVJGN3NqNUUrYE0pJCI/YnorXzhPYTVbJE0pR10yQnJvM3x8MXxmIl96YlVWWkNKIVg3PD9MPzd9OyVQTERybUpPNmsoaUVsNXA7''@;'; put 'put ''IzAvNiNAVXM/eHh9QzVjQGs3Yj5FeWJmamVobXhOVlRsSTljbldxWkw5eFFVMGxOSSMmKCRodjgvbSZhLHMxKWUoSE90UnJtNFNheGJxPiZgP3YhNkh4dyZqc3ZUTmxnbylQcFQxWnVPO2hfNC8zfmg1fWxbcWIhUUApY09ncGxlNHgxKipYV3BiPGRZezBbQGpRQDw7QGMhMXh7TFl9YV5YQ0Nr''@;'; put 'put ''I3A0ViRwPEpSWHtVWXVWND5zeWUySWF8eGV5SD1KMF5YaHc8LjJRKiFpdlVMZzImfSZLcTY5KFkoamAzJWx5XSYyO3Izcm4lS0omdUJKKU4mMF5+P1BYazAlP0E7WyNFL3xiMmJ9MixXN10hImpSIk1Hd0xiLHdfRTgkPCN5Z3M5cDY0fn1sSUVqL0d2ZnZhRUhjMiN3P0VSSU4kSUdRdz9DTyZn''@;'; put 'put ''fmteTjQoPkNwJDpgZXtoWWUsKGchYmo+NHwhc1ltTzp+KTp+Q2s9I0BzJHVIYmpOZmFJWXdLN1FVeDp9U0kzKGh9XS5YMy9oKyQpRVtiQDZPZlIzP0F0TWc3NkAjOmZ6Kk9MQXNKSjAiUV5iJXBgd2lRQHNuVCt1a2FrLGdyLFFdcVp5dmwmRTRROkI7cl8wey5KcGRnT3ooN1QzIWRKbDdXYmpj''@;'; put 'put ''cnw+dCgxWTpHIVc2Un59blJNQWAlMkdCcnpkM1p8W3tBVD87VXI5LzVLbUYsSk9tdVIzIiYoTWs9MHhBbjc4YHYyTiV6PUhAKlspMGlQW189Q192dTNJWVJpPXw9OXk5WGJSPjR6MSl5IlY2R2xCemVlWzVHflpAVXgmRSojNlpGWU06I1hxKlg7OVk9X3xle0xiLEN5OH1VcUw3Zzsla2hEYXcq''@;'; put 'put ''QEk3cSR6TnNub2E3ey8oQj5GNl1IO3A9eGxOdjhfJlZTMnk5e3M8JUpedF93alNUVX1QWjwsLGx+JFJtLm5MbkkwKXNOdX4mZm5hYy85ZElCODFbPXxNK0VRMHVzVlU/PmtCYW87NypIbX1lYS51a1l5Mk5HSyM8W09HWiEzUDRQNUtuTVIxY2kxWko9dSJqWDpKS2ZQaHsoJDddZzRlMmJvJTpx''@;'; put 'put ''SFNiPF1aPGdjbDIzKGk4Pk9mNEI3Y2ptODpqSCYySyQ0dFQoanNjSnBRUDs/QSpaU25pUUxndysvenUkYjg2YThCaU5hSHRlLks+KlhIIy9bbnE/W0RrX0xyPSI+WVJWVikhOzpsRypTM189fHxDRENPSCRNInBfRXlfbkBqPj99dSRyMT1wRWNdYSYyOn57SmJkd3QlMDUjU20oVGlRayQ1K2JL''@;'; put 'put ''TDQ8XSxnOFtFM0dBTlFxbj1dWG9dVS4qVHZgJW1KcXt3QFRzKnRMZW4mRDtWTmlmKDteL3Z9Wyp8X29maEskOUd4ajg4dm1ybCguL1NZO1tPLyFwTl9aP2w+L29UPjU6JjYsSztzYltJfTgraG0kUEh7RXouc0t3TlssMG8yMFZpdmJ2c1cuTGk0KVY8NztiU2NYN2l3fnFULlZIdWlMXTV+O3g0''@;'; put 'put ''IkYpdTxMVXBSNEM+W0BKIXRWITFMKDdzcWtMfng1dnA4N1pKeHlSantkMCpeWDpTTil+UTd7LkcrOXRpYz4lWyg7Vno/ezFNfU08clA8TVpSWkI+K01bJSZmSV8+QHNEVilFIWYrOVV1QGkyYUQydkBXPiR4NkBgaGQsdHFCLFZAYDNRalcwL3lVPy99Q0ApMkN7aHFeSmRRQmUiR1RNNUMyUi44''@;'; put 'put ''Ujs1RUo5fTZta0p3X1dYXSVgfXQrMyttOUNUYCF4MihgMyF2WX17XnZrcHAsLDFpQlVAPS8vQihjanl1UlFeJCNIO2VTKSJjTm81QklAekQsclNwWVYzWGkjaFpSY2hjQCVQMCppNyhKNGZMT1o/Pm4hWWc5Mix8eHVaIX15WmI6aTtOSXh0UnlHUmUyKlt3fnV+QVZZcmZ5N3hMZEwlVHZSaTx2''@;'; put 'put ''ZFhpJTFJdi5DNUBaYywsMUoxQD9XOHREYjI1S3dseFg2fk5sbCU7O2FDWkFFSyEodmp6VnFgb00kWXo9LFhAKytUKl8qcFRZLjBTNnoxbDJneGMzOzx4QDdxTHtqQTYwO31Xe3lvLFQ9MWMsVTJJalFQLmYlbTJjOXEhI1taY1ljQ2Y5fSx+S2lHdHJ4OnBsIyN6KkFiN2k4cih5KXt7fl8hXjBl''@;'; put 'put ''eGdKb1hfWHdiNSldW1FAYXNkYFBpPj5nOVAxZlRle0w4XSRDOnRWb2B0IzhWfkpFOkBsck8/X2pNZjFnIyYrTEY8LlUiOntlSlgrP2IvLEguXmFWXVFaOywhNGB4KiJQcjZWfT8+ciVGIztUd1JtR21yeUFZIjdofW98UlAkRSIuejF2RS9DLj1yXyxXbj1ETlssPlBoO0owQW5xS1I1I01uTzpj''@;'; put 'put ''LDR6MTFYXjcsTHl3QlRhUWwzMTUwKG13ajpifCw/SjxMfW1xVkRZXW9FaU05a2pSeiZXVX1pVXlBOFUzMT4rTlM6NUJaYzJ2L0Z4RCNhLDY8eT8/TCRnXTx6PC4hUEgzJGJ9IXk3OkYme1ZddlNNWng1Kyo9cyZHOFJQXT1td0p1NyIxVWx8LClFey4leFspJUBFRnJlclg4YzQ7WGpSdk5EJE5S''@;'; put 'put ''Yzp2c2MxdUdnanVUTnReL31HTSVsQH5QQjpdR155YHhranFiKEFnPGdFenw+e1NCQ0FDQCZXa2pRWVIlU1IhQ0tyPFI9PC5kcyRyaWxGYm5HMHYrWVEmMSh8XlNRcjhJfURQfV5wTipjY1tHTz9dSXZPWy8+UChYaEEkbmhkbXNTaVRHRl43KlpWPyxQaT98Ty5eW0d4NzYuXj9YRDpMdHJrUWQi''@;'; put 'put ''L0VbKnxzSzErTWM4TjZ1LCtARWAiekI/Y0JsUmZAYkcqUmNxX2xjR0ghNS5idDBVcSVvRjI6MmgySDZRRFZ7U2B3ZkhbLExbJHdKdmdaInAxMStIP0BPS3k3fXhtcU57c2RXIntqQH43Sk9kYS87SiVnZ3FbKDhYZXIyOTx2cTg5Rz0rU29ObXBBOXEuLFo+PEBbUXh1OWoqOGpRQ3F6cHpXMkJ3''@;'; put 'put ''MD1oUSFbfXtRSEdDJi8ycylhI2xVZFlRVU9DUSM6ejxMPzc7LEQwImJBRF01dzQ7X2BqPHp9blMwTHJMcXhpMnNdVUEibz54aFhbWTIhKFNLdjFXRyhGempjOyI7UDleQ2Rua110bCM1Q29PNTt+U2NwaylFc0piMWApSFkzT2VJSyI+WSh8bmBSSiJpfVhfYjRnanFITTA8az0vZSlUT3E9dH0i''@;'; put 'put ''Z298K1d2XUBmWDRNQi51eVJDTTcjVypDL05kYVZXQTRoVUpvMGFvVDZkQ0d3OUFoRlJzJTRnVVIzMWg4XXksdkhRZ0RdQitIcHRmT0lZP0VDO3xVZFYiVElwez0lK1d0SWJGWz5DZ0suZS97dUBjK0smKTVvYV8xcyNIUiY9JF9gbWtyKmBeQElIIyNLS0ciYX1tbSRLMHYwQUI+QHxVdGxeJnlp''@;'; put 'put ''cVQsJG5iPWRuQSFifFVscDM/OXQkIVFEQnh1XiMzRHVKbzYhKlMsPik5M211dCwyRjlVUVRLKG1jWFoqUnRVLzZkcEkoMy9LQllJTkZXJT9NZjpoI0hdMnhGVEQqVH1KWmJ8NiZ1d0M5WHNAXytDelZVdTZoUkJpUi9mQWAqPDRhXTlZb1hvK0RRTV99bX02dVIkKDtGT1BxMFNSLylraztMeW1b''@;'; put 'put ''VHtlZncqUjQxQGdtVUsmelI7XW01XS9yVVtLMyp1JSlraHN0NmVPVFFsQVcwKXJ9aUIoL3NYTFdEQ20zS0dlXWhmL1RgVG1AQiV4RXdUfF5eZTNSciI4Yjh7SE01UGtnQCQ2S0BENkVGKXNsZS9qfU5zJXFRUEZVfktnR1UyWzRuIVFKWnVPJXhfNXk2bFc0aiVKfC9oLHQjRS5uOUNiQW02ZDUk''@;'; put 'put ''QHMrL30rUCpzK2svWlp2NllzX19YKSR4KVd6Zy5QTFtPYWlXQX0wNWU6XVRuQCVJNlE8ZjtTdEUyUFgrfX13LG9RbyR6WkcrKEk9RzBjZG0/R1ozKEkyIX01fXQ0ajg8PnN5W2ZWcDQoVyFZTHlZP01uKV4/TX5hOz9VMDpXUC44VDpKWWZjJUVQQU1tIT12IzpaP1IlPiF9MnxRKnhOd2NLalRd''@;'; put 'put ''Ul0sb15ZcDc6Y2pOSUZlcyN4emNQKiJsSFZqV1I6Uz5jTU9EYCFPPHIoe2NHWTU3TCFMKyZ0PmJ2KTE9NXQoUXw7aV41TGk3aW5MV1BpPlN4MT9gb0s6XTpRXytLUGZoLFJVTEkhSWYlXUM4VEtycD9qMm5eRmlkZ2BvNXk8Q09acUNCYl9zfXUxZTM0KVlfdz1vR2hpaT1NYSJJVG1oK040YWxf''@;'; put 'put ''Jl1rKCFQQlZlJXcwU2RQZiteQTwwKT4qI0x6am9nPjAxe0R5fEovN0ghKUp2WTh9QTxzLlVSaUR3Rjs/YXAmaTJSVWZYTEdzPUsjP3htK0YxKy59JCFWOTdOOkJoeTNPLiN9W1VkXX13e198RnhXYkdaQnVjTVN6aX5bakVKJSlAS3V5TkxhenxITzJmaVZRVjV7IXBaNFk7VWBCaWpzMDg4fTV7''@;'; put 'put ''fHhoZixBWExaeCpqdDtwZjM0bitCXls/Vj5tcU5DdTFfVCxTY1lHbGxLcEU7RUd3JjpdWFQhM01OVjJ2L3tLZyV9e3dlN1E1b0Y1eTFwT19yZHU5Mks4LyxuODg0RHckSjQrVShFYm0wTFo2MVtAPWB5VCU2UVUuNyNEZSxDa0pDezNyYCFOfjdpNm8zYFBwa0ZXKm5ZM3FreDlPQVhMMEcqZik+''@;'; put 'put ''bVlAcH5fSWFSUVpyPSI8Jn0/R0NYKXQ+TSFKcj1gJnU/IzxTakl0KHFsIy53R0Q6QUIucXJUdXVBRHtoM3tzX2defV5JUyE4fFhnOGkxIz5JdSxvaj8mZDY1XyoxIjcsfXE5X0BJZTA5azxlKEhmV0ZSVW9DOWBqXXtoQzJPWk04PzV9O0BRNVc9K1VPYyRyZldlelczTWUkOzxmS01yWjlBaDxw''@;'; put 'put ''YTJVRDt9eE8yZyZyI0skUnpvMGE0Sy5kZmxwMkNPdilzODdXRVtaQjc4KS4pZXhFPGI7bU5CLG1Zdj01WTxgYkB4Ij9CMG88ZW9yal8+UV51az0icjt4dVdkTihiJXNyWCp9Wk5JLn5DanY8US59VlldfUkrXWhLLGlhVCV7WjBFcUglRmsvcCZZSklyIj9WPzxHd3x4em9+Ijs2SitdNHJQYjp2''@;'; put 'put ''T3JsUDlZe2wvbTJTL1BeVlJRPHh9Vm5rcXw5RmZ9PXdVYmMzXU9aU3NbNkFdb2xMY3FkZ20/UUlEV2Q3fEZya2pdMncuRSUpdHdJISRDUWBtLDVjN3heIXhqUmBuVEgyZX5mKE9AYjxYaTQvKE5yVlUue0ZUP0IrQD96eyxOblBQYShUYF9ETUcibHJrXz5QVVJKYHcva1EiUiNONmwmLEtERjZ4''@;'; put 'put ''bmshX1RMNm9dZUd5Zj9GVWddbiEyLHdPVlkkfls7R20jM3d1YSpUJilTZWN3bm1GSW5QOWdDcV9zTz5JJlNrNXQhQCJTO3R4d15WLyNfOmwrdHEyVFZNJCF1NGNWcG8mSGtbPm9IPU58altGQjh1MCJpaXdWV2BmR2laUyp3LjtkXmFCbStIdSgyWFc9bWAyZD1fazpQV1NudktBJFcpL3BpZDRW''@;'; put 'put ''d1EwV2ZsJCZGITBldjhHfjx6PGJzU0VdSDhjMWtfT1lRPXtMWUB6IlY+cTZIcHEyOmMzRkE/YUNpOjV0MXRybG54QTgmTm8qNiYvbXM4WipSQ2Qqb2NdPVA6TDlib2ZSNjhafTRANC5mfH1ScjplVT8qaU8uYXt3c3FsUHxiP2xVVVh4UllkKF40fnMmVENFUGUvSFk7dX57cVhnYVVNTkVkImFR''@;'; put 'put ''bTxeaklBPHBMOS4scmgzaFBuZnh3JltEfitrQmNvI1E5Mkc7ZCMpMHV2fnhqYyxXX0U8aFI+SFVzQTZAZmd0Q1krJW47K2h0LjUpW0FvYUUkcXY5a24vNUdYfF9xLmJFdyFfZXtXQD06Y15dVyM3cDBoJih0WHo7MSIsb3tlaElmaHReZmc5Kj9RIyI2LGY3SmQiMlk3eEssaixHRkZFLHRHNDdu''@;'; put 'put ''IyIiJkJKLnRENXNidG5XPT9bPWtnT10+OyxQSE46dz9ybmA7OTBxTlFyNTR4Wig1d2lTKVY6JmFtQE5ZZlljIjdWLHZ+UzZwOUtyLjM/Y3p7bkdEV1pjfDhEMmZnWmg1WlE5WyR4QTlPJkJEc2ohYGpJd11OeSR5MHFLLmNXWVlVMXYvVGE+OSM1KGhOYDc/NFhiS3YuVj58R09DLjxJTDpeWktW''@;'; put 'put ''QyJYeyVaP2Q+UUZdZSpLSCRuQ1JmKFo0TXI/VHheN190eDo/O3I/djJ4S0YmcD9pMiRnJVQ4eGc9alVhP3tePC4pYSRJJjBee1JVUkl+fXVVX2VEPkNfPHgyVngpIkF7KXQ8KXxpJCI5RHA+eWA+bXt6WCw9YXx4WyUsK0pDUCFqUkZGNGxfY0JkQjMiXUVXPXs8LihYTTJROm9yfil6a0ksIkZ1''@;'; put 'put ''e0spJHI2TEt8cyI2R0xDKDlTOUlvOFV2LHk5XlZ1KX5jb1UzMTlJcCMiQVNrfnV8PypjOFZVWWleOzc1cTVETHxQdnlYbyNlTmx+Nntsdi9gLiVEfXwjTUY+bClrXjczTkJkO1Fje25bXUhERlVgVEldWXJpVWlSamxxTnZJOCRUVEhjM35gLGcyIjR0LzxTTDc/Unk0TyNCZWsiYHVkc1gsdmdB''@;'; put 'put ''UTVCN1Q5Ri9yWjxdN0g8ZmtELFN0Q2U3TUk5ZHBYfUZPRHVpYylVX2dgT2BebUVfa3MwIl53MUc9IWEpd0dQPXl7XUxlXzordFREWmBXJSxAWER7QW8oW0gze10pK3QmO0d1fmIsPHhQVmN8OT43XiY9Qz9RPmpVI2k3NFtEV20reXIlOnY1TkRZfThnZFQrWl8vV3ZjLlhCJEpGPERpZiRoXVBR''@;'; put 'put ''YzRCXio1eERzeS8mRDBlT1FdZWhrTUFCLF5tYSo4XUd8Z2B5YFhJYGZaekwieS9ESipXNn4kZkx2QEJafE9bXnRRWCxibVRbK29ePSx3RHV8e2Z+XUAjTTA2I2BeWyM/Pn0iM0soNVc5T2RkV2d9M1ZIRX18RXV1UTM+QltXIj89NTVpQ3hnU3RbV2c5TmxCalA1PWw3UnZURDpBNip8dFomajE7''@;'; put 'put ''bFNdY0pJblEsQ0ZnQ0M+KUw9Qz8zdHZIYmxCIkAxb058eFtdd0NIUV0jdXBFanh6Z3ZkMERwODEqJnEhRTdGSH4mbGU4Q05zPjRPTm9nP2xuU3JPUl5LYyFRfislYE9YWGVJXUU9e1tjWSp9Pj1HOW1fKXV2dEx0IWFsVTIoYkw0X0ljPlo5PGsvL1Q1em90ZjhbRkM5STdUYUZNbT9uRkx7eCFW''@;'; put 'put ''JjxnJngjZSVNYX1vRl0oU2dHNmI+NlpNUjxJOllwUSpdaWdzRyg6Q2cxRGVKJVtLbCZKPEFPe2w0T2w1R19DQ1F9WWVvR1tQeDBDR0hfI0cqJTZZMSoxflNrL1BacWVNZy8/Sl01ekdgNW9sKHpUSkkiMyZTfEheQkg4TzRlezVlKjdZeFUiI2tHNk5veURAd0UzMTZaRCwwRUZVVD5sYnpOJFYh''@;'; put 'put ''WDdgS0B0cm04IjdaUTN5cHUxRj5LMC82PmQ0LmEmMkM3Yy5ifGIzZm4wVTgpVCxvXl57L0U5ND9rI1JWQksyOW1Tflt4QGFWMFREKH5LZlNfdlhfMXRpI1Z7NzZ7aDBVdVo+QEwlWzUhfSR7QiIrRmQmcTd6Ri9Xe1FoTXVHPVhuInBbe2FZeCRSQE83Oltue1FLUGt0S15kc1N+RV81O182Y35H''@;'; put 'put ''TEAjTGkidmRPWl53e3Y9M0gjUHUsOSluLHIjMnNyV0R0RSY6bnA6JClSZ0hbYCJyejJNVDRIem8mJnNDYX11Z2FOYylGVF4lKythRVFhd0khXjo8elpXU3VCYUZOTG1+aHptT2hyTDtZMitOe1RtLyViKngqSFlXQT4jPShsQzUlRk1oZ3hMTTxmalR8a1J5IiRfSS91WmA0XnNTaFVDPjpwVElU''@;'; put 'put ''YHpzZytAPS4oXUYjcTlGRSEyaEsrSkZPMjFkN1NGTVd8TS9WUzEvfFZNe35YU0RYKWkxaClUbTAkUXB1PnVSKWJOdkZ8PGl2VElZYWBANExhc3IsME5hXkBXPD1MNHRaMUJoVzBmOmxURUVNY2pGbV8wdHJVLz9BcG8heT46NjxNTlJqMU0mT1t5ZWcrR09AP2c1UmpgPTBvekJFbWNueHlNIW0u''@;'; put 'put ''cFVbLkhUTD9DaSFNKkc0Z0QmPjB8cWNwI3ZPLHV8MTUsZzVUPWdwdTpAeVFlYiF1QTldM2dVRmEhRDBaVU5mXXZuJlgmWCJFU2NNRklwdFo/TUh9YHJJQn1Id1c8ZjtzL1c7NHdUTjVAY317eUhPWERncl83eUciYDooSG9SeSgrQT1PP1B0OywrXlF3dlAjfGN0UUxaIilDa0o5SlgjbHJ7QFEp''@;'; put 'put ''Wnt6Xio2RzkvSTMqe212OXxzRyxpQ1MxYE9GWyQjaWJ3c2U7V2pCL0J5VXx1Kz55W1pTS3F4YFt6PTdUYjIuSEA8bVpQQF07UEIhdVAwSmhSS0hzKEFwRGw5TF0yMzZHXlRhOG9HPjlucHEmJTMwYHhkPW1Wfkh2S0B7V0grRjYzYU1oLi5YfTJhViFGQVZldWhkYSZdK3tFQE5GXUU8PmBSdjtC''@;'; put 'put ''JVNnS1o5MnlBT0g6NUw8Tjc8aS5MUUYoVkVvSUI6UVFFNWNTbTZpJDJVZUpnZy5TYEtubSNZPW9vVD8+biM4blouZ2Q4VTNPQ0ZScmlYWWNVUzojXn5sdTluSjo+Qy9RPWAkY19Md2ZuOS51Xk9kPkRZVmY3L18vbEtsQUhqSytzaG81ezVHTSphImpdbVpYP18vUjtdezJoX2ghbzk+VlApRml3''@;'; put 'put ''JGZVUiw9JHdNImJUNUtfI3g1PytyNXl1a0NsckssWWUoKXQyLzc6MH0mTURqeH41OllkTyVRQkNbdDl0THdNVEwrYm0uWGApRCYlLmN3ek4lQF1IOC90U1B7RyRDYXhuJChJSkxHWCpDc0trOWIrU0s9TkhDJGxBRmM3Nl93UlFVNkBZQD1mIWI8PiY5NGNzS2w8K0EocTg8cSlVZCRoc2JWVXVs''@;'; put 'put ''dTF0V2x0elNgalZ5SF9TRik+STw0NGgxbzpLLlBQaE1veXNtTVpDVm5bX3x8QyhKSGBHeX5QcTBfXW9YQWdPUFNlPkdBemZsOVg6WEovWSZEYXpJNz5mcnpYZTVVQWhffF54ZTluYHxIW0JVSGcyWHF9WTRrIXRYT3YmNy9RQUJOUTUuJiZMWjVJQCZwYCFKXSh0c2VjIk8iTXArd0N9bCU4RHdq''@;'; put 'put ''O1hKW3VOSEd1Z2N2OSVAdCk9P0ZwK15wUC9iI00mflF7bVB0ZypDPDZrMGB5XXF+cWBBck8jI3w0LHtoLE4yVCVLVTFePi9ad2FRbHVlaUhHUEJ4ekVEZDVib19qdnssVz8wbS45fmIzbUU+UHR2K0l4JEpKalRxUV9JXltCUikvPU1yK0socHs4YnshMTpoI3dpS0ZyWHFuNFllQzlLSmE6QCxp''@;'; put 'put ''OCZMQCtBOWs1R1hOYy9jdXptOE1VdUouRSZzYCtXQF5yd3FsPGV0fSl3cnQ7I0tJIVl9TFk4b01NXlo6JWxPXTRuKGhhWFlleTByel4uRlYha11+fFNKPm1yMWIkdV5qNjFNVjxBV0ZbPG9wUj4wVWhLM1dXVTlzSDg1WnJTeWYoe2d+MDV5MElmdVt7e28kKHx1PzVgTWo/XUNnY0hZP0h0JCMv''@;'; put 'put ''Vkt0NUNSfFVpbjI8YEpnai5CZGRaQi9ib2loXUE5TDVvaGt7aTFDfHdUMWB7c1REKyZGPm9XYkQsdTd7fntCblM6eHI4KT1ERSlFUSMlaGk5eEJMK1NbNnlLdkl4bykuTER1MT9tZ0F5M29BO2g6MzQ1IT1GaUZLR31rTkxYMk0hV3YhY1hKdiE+emw3dmRTeCMuYD9VI0JealBxeVQ4RmVvLiM7''@;'; put 'put ''V01SNVhZdnpQLHRqVmd7WmYuaXh3IXVFLjEra21veW8zLCkpelZxITUuZEo0cXJLaD93d1dqNTRhMzB7VW9FSDVPOSl8aEtTZkM9UkVGfHlHO2lPMUhfUE5Len1ZKSl6SUteJj9McGxBJixCNHt3a3RffDVyeU49VkhAeURZcTVbSH5zWlM1OSw+YCovQ3slfnZ9WiI5cnhTLjhEcUwsPVorQDFS''@;'; put 'put ''VEheaG5wNkRvIUUsXlBtV3A5XkpfUCpPQENiaComVDVuV040LHd4d1pzI3p0UHowWERnZmF1bCw1eCs3X0M1TU1Ucl4jI2pdS01ofElwW0JycFgjSyFMfjg2b3tCPEowYjh3SE9lXkt4JkMlZUdVSnJNWyQrSWBifkAwJWFYQk9bSE0/YG5pL35CYXgpREdgNlUrbWdWOTpqOTsjSls2eDRMSGVt''@;'; put 'put ''JTo9PVp5ayEoJHRbOlNHeFtIOmA+IUN3aU45d1pZRk07UX5wezJ8IlFVTmxRLkoqJkdkRXBvZEUibHltRFhURWFsIm94a1sqSGAxayxWa284KlMveWtzNztaezZMRmlHOUZFIUUqXzRhPHNSUUdHaEFBdzh9bWRteXxDdm4oL302T1pIal5kUDw0a1dBcnRSPVRNY2E2YEV6dTxjPjk8Ly5fa18z''@;'; put 'put ''ZEF4c05wI0Boc1hZNjsjZH0uUUV5Wzl4X1g5QkciZzlKd1ZaUkJKekpZVE1uNldwOCpMaDklXjYyLEYvZD9ZVmR+bEF6NU8jIV9vOjlkOE1wblt7NEJAcFRxKmlAcnB9PGZlZWRFQl5zWm9eQXpBNE5oISVMYWMxUUA3ejR9M0ZCX2JxQ1glY3ZyNW4+S0R9IXcmKkp9NWlbTXB8JkM/NEQhIUE1''@;'; put 'put ''VXd1d3AzRXxzVkdCYEtBU1d2NldbVzBKOUc2d1ZOLzAhPiYzRnBtMmBCTHlUU0JiJWxLeihlUGszJEBvelIxckxnfiM1Z3lXKT9PUHxddyNiS18hKlRHUD54OWAkYTJ+c1B2Yjo2UkhdRzA3Okt0dXh3KDFAWkdSRC5yaSpMSk9vJHpULCxAX3ohJDpXNGZicGMqVCpGLEslaEQ0T3k9SnM0WER5''@;'; put 'put ''VEI2UCVbQzx1azRbSF88RzNOYUdodEosXSMvMjlVKGJTcElwOVN5NUJAZUlySkY5U1R9azFSMy46PW5XOmB7cH1gYylvOWJYX00kO2FAPkZOOCVSSDFmWnUid1tXUT53bHNJWUc3Rj4jJHpocTZpfSpOMj8uMF5WJGtTXlVpeV84JDdWV0cxZzdZQTl7SXNRbjphOiRMWCVKb2xJNip6XVNyaXd+''@;'; put 'put ''RyREfmtMYnMjNXBMYGNVRi9AUzMrdk86MHBqMk5RKDNNeF9wTiVlUGZlWVtKQTo3QysjTV82XV8+O3ZHOCk/XU9WMG9bZnFJVmxgMyV0XW4qMGNMMSRxJVR4bm1uNEdPLHB4O2hgMkosaH5jdjJDNzM8bTl7KS46JmBpdkQxV1o5Y2VVVXtPNGNSSmAvaWghS3I3PnVYTHkpRGsocHxXfkV9T2FJ''@;'; put 'put ''cm9YTDI1NSE1NHpOKH1ALzcqPHwkNStiMnVEWX1RZmFQYSR0JTZxXWwxbURrTzlSY2tfMExySTtgWFVDa2dgUm91U3YzLnBKQjElZn0kZyEvKmQyQF8pZjRdV2YwZEpgZkNIe18+TGFDfFNWdkhWSEZxOilvJX05fUtbfT5wdTkpYFdecllrd3dfWmpoI3A5RjV5VmM6c2BLME84YX01MTlPK34o''@;'; put 'put ''dGI6IVdAWU8lPD5tQ18wfW86NmZTQXp4M2hAQm4oc3AiaTBqOyQvWlp4bSNESlRDISpqZD56WzAla3UuXkVgeSQwakxWLGcza25palBbUilmYVlrY19AIS4hI2V4KyYzKmNES0VVXm8vezFMJHBLM1Y2QTZwOjp8amQxNCg2JjFaJl5qSEBEdlJzX2lDRDhiVnd3VVN6emxER3J4MThjNUw1biF7''@;'; put 'put ''WmdQKSY2O0E6N1UpNDQxY0VebExgfDJLVDk/cW1OQ1E6aGIzK3Q4UWw/Yj9Nb2BvT3F8N3g0Z3ImIlAiOk0+anYsL344dVRPTiwsZl4jKixpTnpsNHJWL2M4KCYyR2RCbn5TOEsiNGtnfno3THE8a3leLDhKOCMoK0ZXZUhSMDA4O0ZRYXsrKFg2Wk1wcnBDPDl2QzdqWDw3eihYRypAMjVIbGZm''@;'; put 'put ''O1BZVGJleChecjZFY1FzP0gwKiJ8TyJLQW1gSzNqXVh9MklpOl5vX1FWMjg+cz5sc2xKRGk4bW1rSyFAOXA7U15Ecnp6TyxdbCRdVytHYzo/KFtxSTszXVZHXjhKNEd1fFhLUXc+L2w3LF00fHUrIyROSCFRaTJCMF1wN2J7X20mJkNZOntyajElaEplQ0h6In1eZ0NSe0opYy4pLFoxUClVYSZi''@;'; put 'put ''MmxERkBeXXxxNnx7bm0jZU43SSJeUyh2ZGhQYm5gSi8udlVkTlcrezpINT4vSjVJRWR6XjZEP2MjNF1UU20zaHNyI35RLD9FImQxaWRxWisxZVNwWXx8V2htcThYUkd0SHQ3dmVEdUYzZHF1M3JXLmdwTCVgSGs4b3l1ZyMlQFI1TDNFdzBvUy9AWG5fOjgyNGxxfH1DfDVQdHU7RzdnMmJCNWw/''@;'; put 'put ''QjVKfl9LM1JVOlF0UG9oJSM0O2ZveG5PW2g9dnNrY19ldHhiTUNqZTJ4enRAfkxnOm47Yyg/SlcsZ1J4KVJbQT9CXW4oS2pPbn5BeD9eUzM3bFV2WTgvbmVpYU50TSEoVHxxRVc7Pjs8Yz5dW1AsPGUsRnp5L2U1dUdaYDNvY2t+e0dveSNXcCVZW3tmM1QsVnZPPFZjYVl8VGthPzArVXBALFto''@;'; put 'put ''K2ksNEpWNn1lMmxiXmZTfV9RTXBsfjw9VnhRaHN6K05uX3pdb2tEUkVhIUJjbFF+YDVYKVVtejJFJmM2JjE2TCN3cG0wfW5wRjVqdVEjLyReOVRvUGlWdHk6MUM7TkR0fjY2fUVyU0NTPyElSiZGIWhJbnh8Ml99bTw4elY3c2dFR1haOVdjWUdhRzJIYG9CeyY4Plt6VX5gXTx9Ll5FWn5vMlBL''@;'; put 'put ''ZkwxIVY3U2hGRDM+fTRLNjhvMlZOIX4uJTguWSN+Ky4jSzglPl1HL11ZdnpBZ1FAIS5NSj5+XW0mVy8lVUBFPlc3NEBOP0l4OlVQK1ZIKVhDSHpdWSFQNEZJITVIWX5dRVgqfUhXNUNMYD1KOiR7Z3xKX0d4QU9PUXFNc25gO3ZoTUtJOzU5fV87NVApXSVTZj1CZjIpanUhLHZRJW1eZ2Uxcy9m''@;'; put 'put ''OmZ9Mzw/QCQsYCl1T0c4dSZqNiZVNndfWHIkQnlhI3Q5XnwvMk56Ik9HX3lHajkhejg4ZWEuLG4rVT4vKWFOU2FSLExwd1hnXSgsSlZgeHN1PCsrcjtGJTQ+LG9JKVdhXz0mc0I0eUNvPytzZE9iVzlpaChrdUtxTSYiK3ZhOnlIbzs1QXNrby9jfV58RTIuZU8oRV9QY3VnaURCUEtbaUdoIjgx''@;'; put 'put ''RyE9RVIzXSVrMWNyTnN0TldfclpBLEMqMX1JeSU/Tj9ETTlEcilXUCojPCZVVmpPWU9LbHV0LGYpWmRAL0NFYCFXZyF+VShqS008YyFSVUROdDlONzpIeWQjJDBXTCpoUiQyYHgsc2Q4akwqLlpdNk05dV8ley9IfSlFMyxqcTErRShgX3BwJE9gQGEwTGlSTUllLDQvQDVyP2cwMUxgYiwmYVJq''@;'; put 'put ''UkR9fVc8K3tTOz50Zj14WnA/Vnl7PVZbRmxMaWFMYndlTWRDPyM5QSl3MX1zJHcodFRYak05JkM2Vlh+NF4zOXFqWEh9PiU/Rm43WStpQ15zdFRZclsmeUdzYnU0TkpndG9LOklzW3c9ZXB+dj1scTFvUC9FNjQ4ZEwxcG00YHhydCI4WV5oT0dDMnpnMy8jRzdwOER0SUZ1MFpDaWwwWUNbOCkj''@;'; put 'put ''I0I7JSRJO09PaUEzdSJaamEyNG0sWDVtKT1eWWwobyw/QXVCS1FvRG9WM1UsczdEXSRuS3pCNUtvOGd2eHFQfHcrK1ZCIUtnNDlfY2NIVVI2WHQsPF1EKXheN1tLZCU1OGJ7JCk3R3dKakpXKzA2X0ZzNzo8RU1dUS49S0MqTVMlXkw+alRPJFFCZmV4L0cqaUlfZlNOOWpCL1k0MGBzKXIzdVoz''@;'; put 'put ''ZHxtbVApYzpuNSp1dnhdSnRgRHM+WlFpInBlOnc4ZDl8NWd0eWkhazhkYTZVZnY3STAhZSNqbXt+S1JpPUleImV0TkFfNEpJLyZKVy8qa0Q6fVtUaF9Zamd2T190fnRhcXBebX00XTh+RXpBJjU8XVQjb2w0LHc7K05Fa3RqZik0TGZ5VzQudV1yIyRwJnwmaj5bNTtAKCNGS0NWbVlXbj89N15U''@;'; put 'put ''I0Y4ezRNITVeMT1hPT8pPDpgQ1MmKmw5Q0tCQnA2TF4iZT1EK1s2W3ZCO01YOFBNMjVGYnNIKlAuOzl3OXYqbiNpKzV1bXx7dzIvWy5gRmswX3p7N0tuaDRjKkB+WmtkVnU9OTtve3RCKDh1Xyl6VTpaMVY2V2xHZ1JPPjY4TiVNI0BsVlFhZE9uQEMlKDVdIVpGKD9JQExSTGxBXTg1LkpxVE9D''@;'; put 'put ''Z241PGFKOV1PQEAsMis3e3I/UkAkY30vezRPJHx7PFI/XnNnUyNjTWgkT28rQlBRITJfUm9VeFlLVSF5ZHJ2Y05FWUgjXkNBUUt+L1lvQWt5dy40KCNiY2M9cVQoPkZ4YExPZU5TfltdMFRAZiJrMDhpTU97aXpIUTx3I11KLlN+Lmt9TFssOFliblM4bSRFbnk+K1FXaF5dan5eYEZMZTR1M0Aj''@;'; put 'put ''VWMifUpZJmJKPnEuPzpXcDpveEtrWWNZeXNtamtzQy42MVFCRUlhazxbdWsiRSYqKUpDc0Y7TnFvQH53OXksPHVGZHVbPDxPcXo0PWJoQHJEMEIuWUc7RklRS0dTYFBqVlAhJE1ITFgsQUQpUUJCZW9VTTpnSW1VK1N8QDlpQnImWSN5IkZzNzAwQ2FeYFZhPVY7K1AhViVzPlM7RFFAfilyJSFh''@;'; put 'put ''KCxbJj0reWRFMSoiUlE5SXJGSVAoNVskOVdLbV9xLjxIVSJGMCk1ZzBiUDl1emhqWkU0Ny4zVG1md2hpVktDX2YlITAyPj53Mk5yMGYsZEw/ezIvc0NOWip3fVdHbWZ7QFloaDxNSD80JWYhcWNNMFRHdDZtfWApfil5VjdqVnxQb2tZbmImUmljL307O2gjfHMuOUMwdGkwWzNGOmUzOTVnQEJW''@;'; put 'put ''OFc+LEgpOjsmRX5RIWB4U0U4cmZnOnIiaFNPVVE9QWBReFs1UzdZU3Q6b2xHU0ZEVmUpdilhK1lBQ1F6bityTjAsRE8zKFE2KV0yJGsrLyIqb1lOfiheZz06WmB+WngpcWg4dCU6IkZ+eWJbJVtyWkA/ZlQsQyZDSGcpcjdySTpAej54dk1Sdl0sW1tPKkRVaSVAWSVgbEk8bkcvKFE9ODJBVDMs''@;'; put 'put ''RzZydG1Say85JU9TZV9EQGg7K11TRkt7RHhUSlRqfnQ/SGZ2JEFNNnUmPktrVShpRUImP3ZidERDXThJWWUma3s2IT1QdnZSfU5nKXtRW0tbaCZ+JG5pIWVbLFAxJXEiVy9HZy5UOmhaQVAiXkVaTWtkaTRkJXNQTTxYOUs3Rko4MVpyVGpHZCVrSC5keWE2enZ1b0l6OiFbbltjNjRgJm9Ba29t''@;'; put 'put ''PzhsUUFhdD8sRF5QUklLekBYfSpacSJXbnI0WU99TFtLe0RyRERzQ3l9Mm4qSzhGQHpQKH1nKiwvXXpuPGEyTDRDTj1jLmZtdERWJCtldW5MYUd6eGZMK1tnTGA/Ny8rPSloTFRUTyhmclY/YCtaWH4ubXp5OTpBYGs7V25eayQ4aC4pVUN+R1FJI1JFYCZvQipxM2E/ZV9feT1keylHTFdtQ2tG''@;'; put 'put ''QGxvIV4hbTlwUHhrOSVnPDdwZzR3PngyWUh2T3V7U3RqPm0lfWNpKGwwVncwIkU1QWhSR1cpXz83V1JmUzkrV3NHMnNlOCVeOjY+Wks6MVtDW3x6al5qKEw0RUdWbHMycU9USk8zPSglYkZ0ZF5EbEtMKzBxXyxxaGdkXzdkKCQ9YCE8NnJKKm1BLDFYSWROaHdnI0hVUDRjZ2E3QiIzcS5PcUxU''@;'; put 'put ''ZDNBXjhCQC5EN1IvL1JISXY7NitTcGB1MTtzYndMJFRvZyRTRVpOWjUoKG5aIXIjS3NVcFhRZWY6cSNsL1pGa35aUzFfcyNqM29IcVEhYTxaSWN3Y2k7bChfOEM3VGBiWTVDVilJRiZJQkt8QUpwb01qaFRUZH1ORi9wN35tUnxvTVNEcS9WSD40aEE0ZzpxZUVpMSJQa2lrX1QpI2lGWiI/SX5p''@;'; put 'put ''Sj1+IzZjIysoeF9dJElkKTJJeldZMkJyODM3Jl1BRSFkV1ZtMlRpT30lVURkYDBWXUU0LChRNSZSLlhkMCJPP0I0I2tlditueSQxayVmalMudFJrITpGfWN0cUVAVj52UnBYbFFUPjBDJWxvP11kKCtsJiRTZUFUbUUicWNEfVkkY0ZfPj1WbzlgRV1mPnA/I3lZV104MGwmYjw4PkNOTno0NSY2''@;'; put 'put ''OkozTzRdOz5KUGdedWNJeT04VjAwZkw3TiFuR2EyLG1bciR1TVssLlIiP1hRKHNZI14qeURmXjJQRFtGJDxhZGtXenFQSGdIWyQzellJe1gibyp+ai81KVZvZitKXXQ6LH1HfigmaSs8eUZAdE5oa1chbEksV1JicSpDQTF4cSg2dklrelYrQXdAY3Y/cm8rdjlkfnBUL1csVDpJeiwpREZYbHli''@;'; put 'put ''MDp5PURybnE7O2QxXT5gZFohd21WWXF2XyRueEtaRklTMkUpKCR3VX57WXw5VmVPQmBRdV1rZWxAXU94ezRUb0lzSWk/I1Q5T247W0h5fGY4KVUpIzUzSmVbdyZleEBZJlU3WStaUn4qY0ZuIUBmQ296Oy5wQ11HVTpDNUcuU1pGImR2PSZ4Xml0RUw+WytBWHleSiNpN2hoNTpKXVJNLjR4V1hU''@;'; put 'put ''Ml02NihTQFk4WihXO3ZrZndqZz9AS35hQTAqd2lUbjhmbzdESilOUCxONVIoO1Q0QWkuaVAhKDtNTz1zaixMd3BqamReK3gsPV5PYSN5WzJbZ1hmaTA7TnF9ZSk5bkg0XTIjfXdtQXVeNlQmVldVaFB3dmEzc2w4TnQpXktTeVFSb3U1b1t4TUI5L2MzNCs8eTZ3T0ssPmxeWlg0ZGU4KX5lZE1y''@;'; put 'put ''R3lXcilgLkl8fT09ZVgwcC4jY3FPSncsdUBQMSRRdjZONlBSQWNgMTAyZSN7b1ZYZSo1RSFqZ1FiJHR2N2dWdC87aHhuT0E2eHI7e1cqJEBidGRqPyZbSFU6Qmc9dE1Xd0dbJEBrZFZVXiZocTcyLjQhbVllRUtBNHBgXWZ4MUg1TnQ1PC41SXxGbEhZN2BJcDJgeUsoWXFrM0NiQDM6RyY2UWFm''@;'; put 'put ''L0ghWH4/b35uUjtRaCgoY2IqaCxPfjlOLl1gMElhJkU4cD9oYVJdMWJATSVhc2xjWHpRfipTeFl4T1o4LDZBPkZ8Y2EoPmQ7PTB5bF8kOHpMI2ZKOGVfczk/aE1wIUo0L0taYGI2SV5ASzV7ImNtXXAha0owcFErTFIrWlo4di4uNEdPM3plISQ3aGliR1N9Nns3ak5zZyhZbWc2Pzt6eC55KUFA''@;'; put 'put ''MlZnXU5ddENvL0xwMzFmMEZMZDEjWDkpandxdE8vZCk7O0trJV5pNSRBR0VDVCR5IzEjV1M/diNGMHFqOlN3THxOInIoayN6OT0qOUMqeX5XazwrW1tHOlFiXXkhWkBsX3c2ckw0aH5paFlBITJyVXA0Rj83Tlp3RmBDPUJdW01bMz0sRio2e2VGNj8lRVVLSTJvJVtUPW1ZQ2liYTl8R2huMEY/''@;'; put 'put ''eCxgXkhMQjovQ0ZzSVY3bnVSWk5aXSxvPUFteSRyU2EhNmN5empMOVdAd0JTLn0ydHgkQmIyK0wrUyNGMFcmdFJ3IiJTNnh3MGt6RXd6bSo/LCU7dFYiPyg6OWBeTTU7RHl6I3c0Pi5+eWxJWWVZUmBrL1QxTS5lfGYweTBVT3VaZ35RLjAkTUJpSHJsYkVYQUh5LHBMWCpMfGAlekZKUz5oRk5W''@;'; put 'put ''VWdIKm5GbkJ5Sl54Ul9IXlhQPHgvaC9SUGBwYWB1dzwyKlhlTWNFVWtwOWZtSlBmcUJGQiRJYmRXfkYxL2V8W35qdFlncnZ8YipUXkVdVlk+LHRUWHxGLGU1YXVYZnhWfjl2dDN3XkFScDBpYyokXShkM09tN3c8OkBNVkBpcmk9bXs5fTN9P0U0dDM9K3FDL3VfU2AkcEgwPy8rITk4YyoiJiZ9''@;'; put 'put ''RV4iKG12LHsyfDg5PntmVWwweiVYfCp5U2FPS2lTPitwN2gvPCg1P1l+OiFqTF5ZdCh5VUt4W0A1XiQwU2ZUVTwkUEp5OEVOazw0QS9bZXU1aEZVe2pYMmNdUTRELF9eTGFpN3s6XUowRDB0UyxSPWJba1cleTpjWFg8YCV2aClLNF1AbDY+elUkTV05O0FaOHxPZDA0V3k8byRiMDVMLltVeEI7''@;'; put 'put ''fExTKF09bTV9dEI4VWsjWU1LVndLaCRjcnN6N1Q7b05NNVpfZWwvJXR1WD5LN0RsXXFqdnAuYDx+bXVWRE8kdzREcW1qcClAVT9MQW8/TndrJUllYHNlMykmYnw+eT1oTm95VDtfQiY5IW0paz9HRHooMT5dM000VDFDcXJZMjwhOiNwXWY0NnxXUXltTj1zWClwNFBiPngpPVlGNjNvd25sbCtV''@;'; put 'put ''RnckRlAzNzUzT2lJfnwzTCVeTTdsOiwqZj8uVVVVUV9KYUhxPS9ecFRkZEpEeTpgRExHMCJobl5GPTdXY1NbN2IxZmE2fDIvYjApNXROJDhkc1ZLITlnJD9pUnRCPD9GKyUrITY4aUh0QyFtJiYkJWc3PGouUW5qVnJzOUQzVklYcDREejVuWCt0NmdqJH4/UF9DWGlMNzpwT0tXNn5efit6bnZi''@;'; put 'put ''MFZ+bU49RzMuPlJ3QlMoU1FnaF9GYGxWeXI9Jj9ZKztrbzQlQis1L3JoPWFxODxhUCl1fVVJa2hsbFRyIXJrVy90OFFoJFJEYmQ5TiMjdWxLQm5SIntCNDVzdz1ZQEdAIng9XXRHdDIicVM3U3E0VTdyaUxLREdiTEMvTEtMdXZhOEhxYXNobkhlazwsZlBOdXguJjhdQzg1Z2ZTM0pwQEZ5ek9O''@;'; put 'put ''cjR2S0s4X29pMiRNKld8K3dmMHszKmYoOnRaOjxmKFMrJD8sMjAxeyxiXmsvKyhJWVJuMSZIMl1BKzdlTkQ8PX1NWzwxTnJraSw7QCVyJV90fiNHOFtyWGY/TmBEV3VkMlZ6VzE7X1FeOTB6ZGlHJV5yeFJEcVY+LCxZSXJJNjVqMllXOlJnaixxIk4rd2BeL2UzWltuVGR3WTtMUllLUGhbbltN''@;'; put 'put ''JWA3Mm86VUAmMWk8aFJ4IS5vJFMmRkNlUFM4ejs4XyFETH57PXosNHVSNlJGU0h3aXpsRnpUcENrajJtMnU+InBDZCt0OWRuP3cuIWV1YHgrK0R0K2VDQlR3NzQpK0B0XlNJKktAYU0hKjQkKHlqUkpmZVJyKCslZWhCUl0zaDZvVEBkLHdqV01pQyo/QXV6X0MkbWR7TilwU1Z0Sl80L21WQH1e''@;'; put 'put ''MXlgWHp+QjJJRXkpUzVzeD0yMm1KPG48S0p0SVRscmAqQXVydV4oK0A+OEt7LyYhNUVpaV1gWHhTQFladms5VGJRPWEocXsydz8rSWRqZkNvYj9PRHNDKWg6KmByKXc0S01ma3c7SSl6KGQ7fEZHcmN5QGsydWJbaStqRnlnIlo3KWJ0P1YwYzkkPy4peW0ydColdSs0WFhWJnJbJUZBIWpNRS5m''@;'; put 'put ''OnJfPCE9ViRBenE9aERHOH52V35NS0JnV0pDJGRPTVEpcnZ9MHlXIjVLUD1nbXIrQyw5dDZNWk1SJjIpNVJBO18lKixbbH5QVTpRJThHfjd1L25aLyw5dHtERypLI3xdTFl2ayZSL3VePjpCblIwNUZfYHhvQiNkfkNdVVlmcDRea2RgYyVyLzlycnNtZ1F4eUJEJilQMHpqaFRTYnN8Zz58bHoy''@;'; put 'put ''V3FwRig4SiIpfURYPCVEYCt0byYvSVUodS5kOTZbaDBXYFArQz5uTX1MTENJdDs8L3NWfjlQZD48Y1ZNUl9zZkBXVjJ3QFg+L0lVYTJKensxRk9TZXxTXmAvRDV7N1skQiQpSTRxMVF1XmVmRXNTZzVtUXU/I2k5OUtkfjl1bFReWDdmWFp4bF5JYVgmWS5UQC99NzluWkpwa0tRN3w3Xyg8T015''@;'; put 'put ''ezRwKUhNSV09XkZKdUldNzRZcERAOVhMPj9xIighT0t4ViVRaU86a2AxREwuLEsxOENPQ0c2N0pwPW4mdlkpJl9lcSV4Pk94RGQxdDh1YSV1bX5oNjpRaSYwXT5uPCFJQSg7UV5tYGNIQXp6fWU8IWNBLHwvbygrcyYhWjQqZmF3M0paVmpDdFA/SzxFenAzVm5wUTVGSDc2UCpnaEpLenE9MV1v''@;'; put 'put ''XWx9NmgpdyN9WWMyR1syZ0ZhdkE2dyljWk0wW1QjTSM/fE5VdFZaOFJQJEAodE4pVzlRbHdXU1F4cCFzdjlCKDI0OGZbYnUlMlE9SmI5R1JsIy9ObmZiSyljLjtoWF9BM2QldUM3XyQzdChLYU9FJUMsWkAyMmYoUWBVLmJhSCk5P0k4a3ciXTtqKGdWMyZjVkRld2gzcVNKb31KLnh9TzpNdy5n''@;'; put 'put ''XXcyIUUifnNTUlFwTCIjSntjZFVOSmlhS0VmR01MQnpydTIxTnA3e3gmJHhlVCpCeUpAWiU1JDUoTGYvYy86KSY6aFUpWlJhRixfZmV6clJfeUdpMUpZNU5SbTcuMT9LOTVMVUckP2Vic3x6SWs7bC9xW0xSS3RIR0tsJjpefSsqPmV9UyJJVmJxZXxERzI5Tl93NT1oNHxtNWBUNXd2LlJoKEs4''@;'; put 'put ''RDRVLzxAQ2EpWSsre0xrejsmRHheS1BVOkk2QCxTNy8wZXs0cEJPP2Z8VVFlLzNedDgufnJuXlppRWBTYH14VlRmeVlpLDRqe0VLJTpnY1llVzVmW14iQzVfcisrNV0+bypualNFPU9OKmBrPXltaTNPKlJqUmN0WipnbXJNciFDflhBZls6bTpmPGlGdW5hOnRANG8oa0ViNksiPXRecWBATV17''@;'; put 'put ''dmxMJSQ+V0VJZGJxNCYmTFIxRWpwfUAjNSN3YjUyJk0pOXxQYEd0KGRPdz1XP3QjP2AyWTVDPGJaNzdoPXgwL2t9alp8cTZrMTJyMURNfSF9XW9DMmlSYSh6d1k2K2skbSwhQ2RvUz9bKFhuKnZCQj1ZUUhdJl05UyUoSTpuLnEqbyRjO0hKeml6PFBYZUlEZ0ZeIjg+ZnRkPnEjNVpkd05ZfWcm''@;'; put 'put ''WDMwX0JwYVlGRFZYcVddRT1FPS4kaitpRmhDKmFlQzRZPTd0MHhUQUdobVNuVT0obTQyPm19O1A2RnI+TSpYfWhNdGFRe0A0S3klelFaaUosXyo5RTpuYXR2JDNKTHArK3F+InptekE6TX5oPFFwWSg2ZVJIZDt+Ri4wSWlKQj5MNikrP3JCU15rM257Sn5HTWkmY1Z5YURHI2JMeWR6RmklSE5y''@;'; put 'put ''TXF2SSE7RTpmIWgjPX1JYUJYeH5mPUQuUnxOayxhQDVEYU9SZ2dRMCM0SlpjcVgrLDtZeDwjUFVxI2lhZjBtSE4iS0g7JD9hOXZIeEZ1c1A/eHl9NFFZKDVYMmM2Wk5RZHtjZGlXQmIiMUUiMytgNWU2WlFoYH0iYjxFLF0vNCRYX3VKXXpzQ3VTOE5aXVt+VjU/WmsxJjUmVXR4NlI4bDxEW3Zo''@;'; put 'put ''MzpuPyJBM1s8NFZGaU4qOTk3JiUsJW4/V0szVyZnQSNuUn59PGgqRzVvTS4sL1dXbm5NVEhATi9OJm10dFVwMzg2TF1aKWQvLjVwZzhIZlNKa111QndIYjoyPUMhLmF+QkxGWSNSMTxDe2MzQ0l8dj9oImQiTEo4PEd9SFlyMml3dTVfJVg9YTx0VSNQWUBvUnZHK1toMj46dFlNRHI1QmMrOj47''@;'; put 'put ''IndKazh3NWkvI1F5OVY4UV5CZC53VT9+X3l7e207VW1NfiE7XjN9XTReXkFjdkJYNiJ2JCZfYi5SQ3hLPXBNVSs9NXwyS1ZQQ2k6Ql1PYkJbQmNxNCl5MClvU1hIJWs+VGAhI0ArJE5eUS5NMyxGKk9wNk5zUWkhfSszN0I0XnMlWEBrNkp8PmFwXiRIKCIqUDVRbUdLekpEajRhKDZreThhRiMx''@;'; put 'put ''Tlc4eVpqVXxdd3pxZyx3N2kzekNbIWRMYl13PE5OIW4sTmA7RWtUIkQqSlU3P1t1bG1tRzxkPSlaZDdQbkNMMzA/YmJ8Lz5JZWJiP0o5X2ZUPzBdcyt9KGdET0lPeyRLS1l9KWsuRzNeXWZ9JkYzYVAybzBpYH58SGcsJSxFZlkkLlMuKzJqIjxhNXEkcU0sYzw7KEV8PVVpRU1jUEVzKzE5cDE4''@;'; put 'put ''MWQzQWFCWTpidWB4UCYpP1d9ZnhKUXozN1NaZXozb0M/JF9Pc3NUUjhxQFpgUTg9UEdCXV9ySjIoLyhQeUZyS3BeO3R0WExKI0w3SSZSLyxxKFFITXlfall0eENHKENeWE9fcWtXP0NLKUNmdD0+cEpBPXtTN1AvQlR6V2UwcnhrIiE7V2JxKGF8Nz1fIV1sXnx0dHFrWEpveUcxVyxiIVo1O3Jx''@;'; put 'put ''TjZAfjB8QEJtO25Mey4hPn1waFkpLEl9PTExU0lwIThJNllhN1dNZW8/K0o9TzRQUHE5UWZGaHdDcll6fXJnez56REEhVnFBa0M9KkRQXXJUTnpkdyhpaVAlQVoxe1l6ZHBbb2cvRFZzcXYuVH1VeEkyfTF7Wm9QcCZURmtkfn42UjxUeTIraUVEI1RtO1h7X1VYM1owMWBWajNWXS88ZTEvPG1Z''@;'; put 'put ''TyE7JENiYWl+YnU9KlFUa3R+VEtAU3YkKyg2MSgkYkUiW1ZIYjgzWTk5e3huLCYkeFU7NlBZQyR4Q3FtT2osKjJZUmBpN2o2XThPREgqPEc7TTQrLH5afHImai9XPUFbSCZBQWUmOChJQ3ZebCRDIzc0U3tvPVAzLk16RlE0QUlfOXlnRE56SEYrcGUrVH1EeEouJjlZbX19V3RXO3dncix8XndR''@;'; put 'put ''N2dNfGF3QHc7WTxyWiV8Z3cld3hvP1I3cS5aa3orfGM0ZmFTPGJzOVVCRXQ/M1ptZDRjP3RDb2lkWUxJdSVCSloiTFZrO2M7RzZWUG4qMUhdUTpWUk9ALzAscXFtdCt8TlQkdUlaLHBEamgrbS9wIkd3cjA+dkQ4WXdMVD5jSVQ/dSJVaC8lfiY8ZnFVeTpVIiQ7VldzeWt4Lm1MPCQ8SVRuY1R2''@;'; put 'put ''RlgpL1QjaCU1QnZ9Nz9tRDlBOldlKmYmb0JNdDE4Ky8wbmlkblB8WWlpJHRfbWg5ITdXUGlMZ1pOImw5L0gpdHxnPU8qXSVhN1JFOWA8blhPT0VeITo5a3toZHQsW0VvbCNEPjw5JDVLVypVPnNfd1F5diJLOFo9Kkp8Kkome04sSTAmYiRzNyxfaHBsdjErc0BgeHY+cGVGP04iY3spLjRIPz1f''@;'; put 'put ''MVEoKXJHeDduW1pfdGtvXn19QD1JaHp5RCtDeEs2JTl+WHBSdEg5dS5aVyhIUlM3Z3wkeHgzQlV3RXV7eWtfeElVRWglI2YwPnJDaTooN2UzcjJzN2BpenheUWwqPnJWMSIiM29SPjNfIU0yQSNlXSFNV2Y/V2Y5UExeYFtCckksTSokbCpdN25LZ3p9bUc4diM8KGMjZjA2JC91VGk8YntkTGgx''@;'; put 'put ''YkVAfk0hXyw3YTshY2wlYFd4JmVMI15wUndsdFZ2P0ZFLlBHWXRQaCZkWkhBMnBUN0pweUZ5QShvLEVqR2cpSUFNTFRFdUx+bTNWOGZUVmtvZVsldSMqTDtqK3EwbnkjPEhJUm1fZDM2ND4kWkduREAiZ0g/a28iZS59anIsW0ljI3peOEd1Y0xNVkczUSRDKzFZK3gpMUhiYkBNSzAhVkJiTjUl''@;'; put 'put ''LGAuWj5NSytrZ29CJlhxLDM/ekYpa3JvL1IvLnFmeXshN3o2SiE6PGFseE9sJS5meD41X2MwaEovbjJ1TyguSXg4PGQmeG16JVhDIUpKL1g4S2diKmxoWUVpNWoibEY2fSplTHlqWVY9eihxRUw2RCEqUCVQc2VwcCk5RGtXI1B1XV9UWWYpaXFlRHpUSl1xYkZ5O3w7enw4cSlxfS88eEZ3KUw4''@;'; put 'put ''YyxDQSFHZDhrWCp0Qk9DeUMhd1NKUWFJVWVXK09uaSNQVGwzaSZDe2FCN19we3xHSFJeaXk7fFIwT2d0eGhHQGp5d3x+IXVCWEtqQTptZ3l7TzRaYG4jcVMiRDlIJXg5KjJuc0dVfURRVThvMiZLKEopaCUzJGNfOS5SQXBpSXYqQFdQNyZaTGtSTGNvOkMqdUJCVyZ2P2l6dj8/Jlp6UCQ9cjk8''@;'; put 'put ''bkJUfUMpQ2pWTyY/Vz8mRkolNklWJDhsbCwzOnpEV2lZKF9aLiE0YSkmXzd1dzdtJV83enczSVtMJjtJd1Y4RXQmQUc2eUhhMUFGfjM3JEhEZ1Q1LklLPHI8XmhxdlckQU0uLC9GcH0yVjpmVSEiP2F1MDRdL281eX5VMjoyVyNPTjh4V0ZYUXsyPzI5fUc4UWN6KjMpdjxWaDh1I0xRLCFrOWo/''@;'; put 'put ''OHlgRkNXdWskUXloSSF5VC8ueV9DZURgYSk2IihTPyVPUU5XbDs6VmBATi5IL0VLbGwhcXRiMTNfXjkhe3FxLE5FVVQ7ZnNjOl5eTDFNbHZPVExiQD1ObVN2VFtwdjwuVWI2Qm5Je1tNcSkxdCV2ZGMqezhedmtJX0A0IyVddXJGR3ghWmRVcF8kTHoqT1Aqa2FYOT5bciQ9Ni56TFVva04hb1km''@;'; put 'put ''UzdsUig5PGl2KG1eKzNAV0VwWzN1Tzd4ZWAjO2s6M01GJCVwQSQ3QywqMk88cUk2WnRRYHtCO3Zsd1trJEB2NVNIcW5pd195ZlpxYE12O0FTdUM5Rm1veihxVlZoYWJxeiZCYXdJIXVAaFhEb2duVXlNTWh9O0N0YVlrS0k4Zkk/PVdAbk9zXT50ciQoZCV3VURHbyhjP087ZT4kQXg+YCNjfjBJ''@;'; put 'put ''MzdeVnZqKGVoX0BTUmNJYE5COT5fbSR4YVF7QGQyQlEmayp0TSxiOkkqMzpfK1hvXjJ1RDR2akJIYCh5RDJZYjN4ajw4NX49d19+cjhlVlVPJEklN3k1QTczOEprOHhPJlBIelBUYFNXRDhIMjhAWE5jVj1bMW4lPTczYGB+NGp9RCs1fj5ffVtjPj0+Rix1ZGpkSDNVUnA0IUc5Z1Jtcn1WOjxi''@;'; put 'put ''eUVQSkx2SDJBfUJkP154aT9OeCM+VXpFQDs5ejEkLigqa2guMj94JXAhd2BgdElKMF18ZHY+XyZmUkZGNWtjVXdpTnlmdFV3Tkk/WGApPjVbR3soN3JnRjsqTXhRVmZ4eiJKKE58bUJ6YixsVCFYWVhWZnR8bmlScjU/Xi5seXlgRCs5Rz1rUFdzLHo9V35dMzxIKWY9MkZCUG5UamtKak9TTjsw''@;'; put 'put ''bWopdz4mclU6TD9RbzJ0Q0I/cmRkeC49KnB5MG5+KiteO3tMelhIcmdqQDMiKV1FLCRldD9NMlpAMXB0UitsNE8qZENoPXc6SSZLOWdJfFQ7d3lrMmllIyZ9fGdlZF9+KGIlN25+aDtHVG5rcVI7VWs9UmEwKWNLNDUwVV1QWCIpUllYO1tkV09BQE8vc1JMeWc/eWovYnRJRClHOS5TRmNqc3he''@;'; put 'put ''Ii5LU1ZgWCUlQm8mRE1yQ187O1EmR0ElNX0/bzhKK1V7YllucixvTSk2SEpbdkt9byY+YiFyJSwmamNZQjUuZFZMX2o/XnVhIWpVQ2c8c1dZPGJxcWl1ekJiZz9eYSFbMWRjeWxPWVE/ZTB7ci53aixTOmohZi9iemApMTJpYC8lblAhQH00WFNEaGxCY1pGZ0wkTEB4UXpMIk9iYTpzXXViR3l3''@;'; put 'put ''SDZYK3BLa3cpTHVhPGkzPkJWenp+e01kQTU9JU4iMFIlMVo2ZiQuNiQjIWVNJiJxS0hKcUIvYiooVT89TE4+fH07Kjd+V2V0Kip9T0xibFAlY0xSPD9AN3tVY1giJEZ9QGB9OXdXKUFtdnBLXzdiKjs9K3gjLmw9dW1McGxjP0tGN1FtRURLMlciWmk7K1NPMlt+Xl0vJktrJDQ4PFZieSN1SDhs''@;'; put 'put ''PnUyKF9sWCFldCxlP0wqMTFHaTZDTnJgJmtSPGhTQU49Xnohfj4rbUI8fTJIdFJVQXcmM21DQlQhYzRNcTNTSW1ja2hvUFJCaDhSbTR7Iy5+Un5IOWFSMlgwcSE4UyJZMGpLbi9SelQ0PUg/SS4qcUxDOTVxVzYieXxrMTZBdl1SSV0/JDo8cU1kOVk+K056cGJ6NTF9WH17KnJoc09OTyp8US8p''@;'; put 'put ''NjJVZ3VuYCtjWXZzRnNKK2JpdkZMd1pKYSsyXihEQUYpRFBlW1sqXl1kJURtaVJdX0RrVGp+JWhBKzU8REhbUHdbNEE1fmJ0XmlAanV8QCFxOmF7SEQmMlgyRGY2LCsjQGVxSGU1IXFwWGQyPkwkdDpVMnR8VzozSE5AcEBXTlAxTV58UioqbUxkZzJgXXNQZTJUdHhGZWFpayRYaWY1cU9dMjtj''@;'; put 'put ''WSt0dEE8T0dBQmxDImclQHJmRmU2ZSF4Nyp0fkdEez5HTSVnOXJsWHArWGVGbHROY29ZSjNOT1VRVilTZE1lRWBYMkdwWWB5N2JHPU1aQmM+KFk/amxNQjY8NGk0XV0vNT1GT3x0dEI6TlpGLyFPN246ekhNJllNNTdMSmY1a2t+cUowKUhJME1+I0BSZD5YVGZ0WCUhUT5kdis7Sk17WURhMkd6''@;'; put 'put ''SE1taXQzMy59ek1JajUpdkUybzcwdEskOEY4ZnBPcTBwQFJlUUx0NmwwdE9vJDdUZSJ8WjdGOSZYU3wvdXc1LEJoWzxjVDxNcE1iaVUoWylLNE84eT9pLDQ4T3hrQ3ldNzcpIXJxVnRRPCoudkEiM3cpSCwse2doITNpQDZCX25aKTNGNlMoMiE8TDlCYkw6YjRWcHdAKj1yOEtVYipvTFUoa1VL''@;'; put 'put ''dWZ4O10mTmR3eU5ib21DLndNcFpbYD5aU2ROWCprY1VnNHsoVSwraH1GMDg+dTklJiV5e0h0IWYpfVBbJWAmdkd4bXEhdCEhblZXQGA1dnM9WCQ2OThNazo7Jjc3JHBwciF6bX5ReCx1MlZ9R35sSGc8ViRTRl9uMSZkI2U8NHpVSF15UFIyKkJgflEjXyxfKyliTTs0NWw4WG1wYjRXQ01KVmdm''@;'; put 'put ''YSRsPVEmIkN5UDRdOGM2eSE+eHw0N1tvbiZVflc4Yyp4ME41Pn5HfDNYdlsoNjRORGN+bGNuRUwoL3pFLEBtW3VLQ1psQV5CXSR4SExHOkwiOEl0cUAlbmJKLCUpPEppRkFDRXFdKnpYdC8/Kj9VdkpNNWtxbkFFUGZUMUJJKmhreFk0UUxERFpEclU/IlJZMXU7eyR2TCI+OGUpekBoZkU9eHZU''@;'; put 'put ''aGIsckhPckBBXi8pOlhkLltXfTtNfU59TywrYllbVU8lI28sRSU4eWhdIiNkV0FjKT4uYyRefUlGaTFBbywuMCtJbFBeK1FdbXNffCRxIzxUKiFUNVpDP0QpXWE4Zk50NykrZi8wSH5NLGBqOClZbXoyP1R4Z2cxTCYia2VQWC86Q1ded1A9flVCWnlMTT9lJkZ1M01Kd2xNPGY1NGdLOFF6Oyht''@;'; put 'put ''dW5dVk1eND5KI1huSWlSQTFRPHIkWmo2dzMvO3NmKCg0ZWRLQVcramglVn4seVtbcUVrOC8iQF8vNWpSVThFQEJPaEs5RytNNCV1Y0QhUVRSb1tnZ0s/NUJ9LlZTW1Q6MXclJGxobihYTDRBLCxnWTw+MXdtYFhia1dMIXtAV2dnM1paekB+KCtXKTVqS3B8cHxUamdnYH49Inw7PC5+SSVzRShg''@;'; put 'put ''IkxvSjJmYWlaJDtlSndCZ044WnMqflVVZFVoWHtGaWdEKyo/YE0/TXhJe3JsQWppfF1uJTwkblVedlB+cjcpZm0qIWZffDhOMT1fYyVWW1tAaTVQcSVGfFEzYlhgVjlLRGdaRHh6Tlg3fWkpPWAsfFZyUkg0WUYpSng/TSEkPjhuODIxWS95Yzl9Pls3L2xgc21QI11sKjgkdyNWaSk2bXxoaCQj''@;'; put 'put ''fX0kSFJDKVB8ZUdsQ1ZfM2dXdiY8aFBAPGJwSlRmRC4+I2x+UUcyS2I7fHRRbjh6S0crOzl1JnYrMSVvSktgTyRKbHxfVV4hNDN0XnlAQjFxen1SO1s3fTJ7PnpfakxOaE8qOz04YlY0X0xdeCFQVWMifS9hXUpWRVcqXX1rfEphMXV4fnRLUFNYTFM+NysyZGpCTz5jfHxeaitmais3eFlDVCJN''@;'; put 'put ''YXdmaVpdNUd9R3pWK3l0bzUlLG5dO09eL3hGfUtTO2ladVl1NU08XyNVbkY1Y2htaj44Sno7cnFoc3hnTEo1aUdzYExhbWo0ZkI4ZFpOSlVoTiJraT9RSF1DPGFUVF1LfWA9LnJ4JT50Jm4uOEdIRktlZE1fL0o6fm4rSiU4c3heL3UmIjYxQ0QwOVZAMiN6IVRIbCttTXJyKmg6LDM2Llgqdiw4''@;'; put 'put ''K044YmdoanhXKGErcylBfig4TTNgZyUvdV4+VCMmenJYfilNYUtMYUJ2dGNyPXdNX0owOF5YOUl6KVohbX5jbjFLVDhwTk4zYn51MFk3Zig+Oj5uYlNFNSNCO25zbWlqb18vSDZ3ayZwUT9mUiRjaXYvZjtLVmxMfHY6dmZTOUhdeyR4VjppW2U+MEo9S0NjQFJSIm9YPkNQUzpdflE3UlNBPkcr''@;'; put 'put ''Q2hndm4hezo/a1h+LCVILGdTM24sMTdiZjw+N2I1M0dfJXRXVFdHbTQ6YUgpLnlDMnFGbFE7WFs/MlttUWBVZ2JHNDhHWjVlLFNzRGdTUWNiQ3YjYn1mTXBJbyY/UkZ8I1NKXkFVLE9xIWtwfEI1VDFkMFloP0RWXU9VdlNiSlosUl84YVFVTSo/e29ILkl4KHNpcSMvNSt+e2V0dXQuUUx8Q3s7''@;'; put 'put ''eVB4dmlIMDFuK3FtNjY5fSx9YWY/PHBSM1NmRzokXS9mS2RDN2E7aGZdO1ZDYSQyeWEudzQvLzhsTlRLMXFHJjdWPGMjK1FsZ0dXQG5UWmttXmJTIXN6ZFsiZih+eU9fPVk2MSZpJjxWWzl1R0ZrXT9ZWjpMVGRbVm9SS1p2V0twVX4yLiF1QD11UGR8O2NbcDNpckYkYGt3VDVZMFdSa3lLZ05L''@;'; put 'put ''Z0w3dX1GO1t8QF1QU0ckfkcuUl5LUj9IWG1sTjY+cDp2PCZKeDdQXVcjPFpeZUx0OitFKE9zOXtHJjJ9WmBVNDFwWVkkbGQxaCRLdCV4WTMlL1o2KU9tJFBbVk1DL0VqXVFqaSxsIyxrNSYyRzYsZGVMZ016UmQhPC5EbncmWj0zXUM2di9hdXo3RTFbX3E1R3smRi5VST0pSHlkPStdYXdtczgl''@;'; put 'put ''NjtCSUpTIyo5ZHI7LCMlL0dCeEM5ayhAYiFnL0NWfWVwNElCckUyOlo0OVMqb3IyVjFvRHd9QHd4XixuKj9udiYofDFiY0JxMj5bQzlJaU5kK0dZW21qIjBoYl5FUVtSJU1FQSNub0YkdXVPXTxHR1BUTSpyRSxvZDZQNGMze0Z2aFo/LkBUPE9yITc6YXZdI14hMVU+JW5rUVR8OkBrdX4uMD9o''@;'; put 'put ''RHh+X2p+VSN4eUhAVFpzJSN1U1g7azZ6VFZJPnJ9Y2dXOlZ4fFozKlRHcDJVV0g1Mz9+NEsqMFBnakJWYjBCLndOMChsW3drS2c7blJfWD89NTAkIms+cTVNUSNDVztCN21iN2AyOzp5QSolV2dmXno3Ylo3enw1S21qQFd8eTUjZFRPdUlJcDVHbGVOQ0QxMCZwL2p9P0VCYSpWSSw2RF0rPlA4''@;'; put 'put ''X1BJKGNnOU99T0drbSgjfShVXigzSUhaJHNwJVQmSlpAPmBYXyZrYl8iJE0rZ3hmVCZ7JC4rL1tbUThKbG9FQFVII3NzaT93RSUreXNNS2tCUX5pV0o+aVh4KWgxSStqITBhSDpJKnFZbytQMi5FZDo2aG8wN2s/IylsTmxaVyw1M35pJS52c1tlMnJGJV1mbEVbWTgoXj49VDdpTkBxNDVnRUo9''@;'; put 'put ''TVswdy5DeVtxeEFpJTxtYF56RnxXNFVYQygkbVQjXkpiUFowMiVqRTB2cl9ubWc9VXsqKTxDSFQ0aFNeUlBeRnZreSp6KVg0VjJ2Z20wcElDOUMjZ1ooUiN7dlg8RFFqT3BFSWRmM2wwLGJxdU4oOkc4bSNiU3xhSDQsdm1KL2dgczxsTEBkeipQbHcqXnVAJThscXJdJC4vZGlAfHUhXj1KQCZ2''@;'; put 'put ''UWciQjtJXmlwfXk/ezdObEU7dF5SNXdFanFobDZJPjROJERBdCNCPjZgfClBbSpsL0AxdytoYGgkK1J9NV5gbEkyMDpaYU1lczlvJW1ibiJbeXouRlkxRS9Ya2kkPH0yK3lNezArQTNHenlzOnlzUGk6bkRVVnJQZDRjPX1hcWJILlc1TH1gYGlAUiM6O2d2PDJ4dGRPZi5bYCxaaiJSRUVnWm0y''@;'; put 'put ''NU1wYzs0Myh+MDZ6YEx5XU44ZzcoST50ISx2c1N7JlsmZztfTTRBYUZVVCxxQnxLUCpLe25UUW5MdUZMSyM8fDJFVXk3O3FJQ30zUVcrYUwqazVjaUJwdjtpPHtEaThLPUhvNHNJRjBkJXwzSHdobHc3TCZqVlsofG49ZDJAdy92W04weHJdR0FhPHFlTW8oc003Qnh5OypvR3EuPzA6UjlJVU0u''@;'; put 'put ''TGQ3Zzl5ZlRQWylXJSVmYmsxTlsyYkNWME0mMHpgQlImLjwvND05d3ZeUHxaMz87SmJjWEZxIi4zRT14KHQ+UmEpQG82aHcwPm1vPmtWZW5aXmBPJSp+PTA3Qk1SbUQ6UTt2d31dOGtVTSU0ZXohUHh9LClQX10vIlV0QypwSDhQaVQiXzUsfSIuNCNrOnlJOWtEej9wZnZUU0dmZUBnMmhXdD5g''@;'; put 'put ''OWtdIkkhImtMXTo1V0V3ODl6QSRxaHNSRjJZKDhEM3hPS2hCWWhMZ1VBRldpNXBxN2ZJNH16XihUdHhYS3BqejRBRnYzWCpyYmhdfHl0Tm5ZMl9+OTVzV0JRRVdmLG4jQVo1TDxjWSROQjY8X3hIMjcoPWdlYDFQdGc6WDV5RExrblN+QGJtcHtObmw1d117cW1ILyM9UihqNVBueSRLY01LIiFM''@;'; put 'put ''WlddJipgI0dRM09WYkZWMjp+bikycCZVRSwoT3dpdm9OWWpIKGZdfF4wa15PJnRNbU9pMns9S2wlPjpdMWFyRSVAU15qVkNTOiokL0ZNQDgqV0Rmdms5bSF1aGdSbm1WNlg/O3J7OmFEb1pSR0hjK2wxRVd4MW5EXTVIKm1CQ1UjdFJmNHZ7TEdWWiMydGhfbTNVZFdVMmlHKitYcz8objFmIyFx''@;'; put 'put ''I0k5WnBVdVBsWlVDOkoqSy98NWElVnU2QXxMOSFMJnV5VkQxNz07Zl56cFY/WngldzJ7ZDNIPXNbJj0oNlU4dEtMW2NXVmdBZVtYUyp4Kn46S11zZW4yPGJbaSY4PWckUnNufSkyTmojRl1WY3lzZmxUbmsjZ0NAU09mRVgmQVo2R3oqOT88YnU1XTxIelteJCNHJFRmMWduZztHUjlEeX0paCt0''@;'; put 'put ''fkwsJiQsZX49P04wU1ZGUk1uRTZJei9jN25HYCQweGM5YWA9OXA0QlYiI2ooUk5pRjVjV0hMRz5ncUxBUDI4WXAybGRKRTdBZypXRXNYIyx+VFlTOGg1VnEiejkyKkwhMTNzTXlIKnxdVXV5RTcuWzVzQVtBPmQ/aVB3aFI8OUUrKStLcn52RHNackQjUWIsXSM5ZyZ9NWx8YkxtMixsYDZXd0xN''@;'; put 'put ''K3YrWSheOXA+eX5XUnY2QWt0Q2JETmw5als/fGlpajRAWj4/MVc/MndIWl4pPDlJa1YjIW5QM2FYNDNFdkpGSFVzKGI/a2dbdUpSMEhoNkMrUk5hT2VKSilWK2hiVDd0ZmkhLn1LTStrJT93dUQ8d2FdLFNRcXBeKnpsZSQyX1YyJUI1bFZdU3MhWHF9NDdXUHVzcTtsOUtLMUViZ1hdOVF2JVVC''@;'; put 'put ''QUpET3FBIzQwTH0hbzxIOFplW2IiQyR6NX56fDt9MUxAb21aVkdAej9Ofj11OjlOLFczKng/XXhGVl07fl53KVNwVCxUNyt3LzMhViZMY3s+ZkxDb3I3OTl5PlJGbD9re0coczE5S3AqKj1LanYyajRZOW4uPWg9OGteZTg+NjglcWBqd1ZrZUlCeGFLfU0kXV1hdVpRRHtOJTV6bm5SWEkhdVZN''@;'; put 'put ''JnBJUThRcE4oXygzZkkmbjZMS21NY3oyY1BMKnxtR2oqen4oSk9eN1o2UiFdUEIlLCpJV2hZNjclL2I3eTk2S0diRENueSJrUy41alRyU2J1ZDNsNkkmXUxdZikqUGs+R1daak1fTjJEVlpDb29NMWo8UEVHeSRTXig2Tl1DMDNfTkJfYjIqLihQPiM4InpTUSw+Xyk1bEJidG5gfFsydyROVUR6''@;'; put 'put ''V113fDxkYzI9ZVAsfjorTXBDN1piKVphMHkyT3A5JmB5XTxaRWloVE8wUzw3e2x3RnV8THg/T0pfcHo8eTlCVzkrcUEpUShoJnRpVFpXKURXYCEhaU1JYntiMWBxSEQ+cVo2OTgueGVgPWsmYjU5LzA6Lz9pcEcvXjp0YjF7RFNTYmsvPENsSEBYMiE7SWo6U3M2U2hhOWYqR153QCg5KDtRTS8/''@;'; put 'put ''SDlLJiosNExMUmNtISxKNVtyezp2MDtqcU1ROm1aVyRVaHcmTCMhT0JuNj1yKEpEYng7eFJNPSs2bDJFPyooP0IudUZhVnVQJU55RCI3UH1odS90Wk1WXWNvVSklczRMLFVra0NDW01uT3R3b3UoNXlEQ0wieys1QDlvaXtDMEpLcFtoaX5eREFVUUAqZihkXmQlLiU0Q0t7YTl3K25KMEo3V1k0''@;'; put 'put ''L0BIWHAqWCkoOk5wQ0NbMFkqYGFKfTJoeH1lY0p8KyYjfWBBJjV0OVR1Umd6QFlVZiszXysjX1ErKkAlcTtrRyFePlp0I3x8YD1IRV4zSWpYMTY9alprQzZ1RX0ocmAuL3lPXiw+JTsqV0d0cXJXczBvZ3p7dihHLkxYTWhgKldFXlFtP3pRcVdjLHAuJDhqWTEjIX5FUmIocjd9WH1fNkJyMyoo''@;'; put 'put ''REV0WHZaW2VsVj8oWW0veWhKTyYiaWBaNXoveTolNH5QUG01I1B+TkRhdToxW1FxXXsjPitRaWZyL0dpLFUmRDgpOjt8aV1STiIuZWp+e2V4Ijk5eyZePDY1OVhrL3hIP1tjL2dPTCxVL1guIXBsKn18L2xaY1l1RFp+b3EzK1s+WUApU2lJNHA3eit5fCl7T1BHRSVFTlFfWDI7YlFde0dIWy5D''@;'; put 'put ''cC4yJSpVSXlyOjFreX5IezQ9XUlqQnRWc1FMOiF0amQoMV57WU9deSZWS204ZV51Vj0vczF6WlhzIzZCazU7K0M/d1AhUSFGa1VdM29rPno0LG1obE9NWDIrRiJDWEspIS96SU1hUW1jSU50M1A7XlF2UF8zPVhlPCkrd2NYbyQkWC92VTBjO3Nod1oxKHplbGJ5fntUWjhvQCtZOyNNPTFXe3Ap''@;'; put 'put ''PlsuQFgrci9AOyJGKGJAKzVeOnFnOWk8fmxSTyxfRndgc25lQU5GYEg5RmxwdT1TQi5MNCZHTEU6TkIwJHE2YCtoJjRAVnA9Wz1kWygudVQ4eEkuej09bHJYSipkbjVlPWlSOntDVzUwVj1COF8qfT0xZj9CdlJSWWdSeiZ7cVkzcjVndyNQWTg1OEAqZiFtL3dUaXFnMEZyXj0xRkpPdDk8S0Q/''@;'; put 'put ''PCVbK1A2RlBSWyE8P3tCaCRwQ2RgPnciSTJPdT09al4iXSEiKyovVDdwLD9wOE5GS3B2cHh2XXlnPGx3QGhSUzYyRCkwQVA/Ql5YTCRKWk41SmVSPUs7amU/LDkpSnNiUVh6MzJKNV1wIXtSXz5vQnZGOC9AT18+OX5Uam9oUi54aDgkMDlhL0tNNT9kLjs3WWtMP1BGVURtUn16Ykp3VjN+UTl0''@;'; put 'put ''dj84ckFuTUMpOnd0SSJpWnBxOixlM3oqOVBZbixTWExaSkc4SncldjJoSVdTTkFvMzllL1cufVV4Py5CKF1hJV8waGVJQD1nW2QkNFg1Jl1RTVpRJmRqZExLVXJPcHxeVz9BJWtZeSpWeWdTZlEoMEJoMXlsIWxbMkVmVlQveSxuJngyQ2MxZmJ5ITxsL0IhREg9Ly4vOiRRKWdwLlltUGhmWnZS''@;'; put 'put ''S199PF5KUkAjQUV5O0clNW4wYClML0ljV0w2LjJoTSl1alQuSk05RjRtVCQvZWdDdSV2VHNrIUFXVn5hNj1RXUt+bjFvMWIwWmNuLzt5dHsud2k6ZUNhJjtLK1V8PzJAVWttfjNnLzRAKE0hTTl3elhKfCxAdjo7SytNZHJUeGtlLk1LdWEkY3sqYW9bW0dVZGxTbjZGTn5GL2FRI04lak4xT0FA''@;'; put 'put ''TS4/XmhvUEVmYGl5IXQuJXt1W3JoOil1a3hvPE0pUC4vYkZYOmFFPDZKe3dbUSZAYiVLWFtHQFJKajE3NEJjUikqWyQ3RC5SR1hYYiNRL1R8cDosMls3KEhhKDUqeEs5JEZUSF81UEc5QEguaktAPk54Ok1tI3AyZ0MhdyZtZ0NwImpZMjo+SE8jPG9oM0s2bVliWS4xSUtaaEBiSzRkcndPRzFr''@;'; put 'put ''TkA6WmY+XXwsTjY7Kl8iZiFfMjp9Ti5FbyUuaFBLQyk3ZnUkVzhMK3RUUFQjbzNoXVtmI3VOZCQ4VkJAJXVQP2gjRzdZNHdpSDZqMWUsc19ZSy4xeV9BaHVzZjpELixodnB9PWIuZUFGOUdfbWp6cSpDST5tXTA4XnR1Pm9+ZTVTQVI0ZzsjaExDdklAUWksaVJGQik5VVhsTzM6RTg2dUk/RC42''@;'; put 'put ''QCR+Sz5DeERdUylGfUpaMU9RRFpjJmdURjx0X3B4P0JzRTYuM2pbOzJVVUppLkx6PVE/RFdQU2Y2XSReSiVTQEQ/a0g+I25gandGN1ZVR1p2IVZjNSh0XWlqcTViWDVSb01JN0BfMDxLKkBseDlZWSxfSD9YLDg0UjFEb3p8UzNHeGxLLlJGUHRFfTR4fjkvKlRJLlBWeF0pOithZDllTl5iJVRg''@;'; put 'put ''bVRmUmkrRylCTVVTMmVUV3w1NTtOcDdaWFpCTyU4PHtEaTtWX1NiYS8xPSZKTEBbREEhPFZQaTpbfEVGS09iN05eJklhODcjanIsKiQrOWhnP1IjQmB7SWY1WSx1L0Y4SkxDbEgqemErYDtPaWtAXlF6XUhGY35NMTdtTTo/SFIvNngrKXNMbzR3TSp5NmlATHxJSE1oUlg1QX5BMTUsKCE1cSVg''@;'; put 'put ''TGVvIV9Faipve2BuZSxze35+dFRxM2xkNjNeIU1lajRITyR9eyJhP197QlJ8KDpSJFpzV3BoO1IkeVFeQWZgVVNfQSl+dFokbEtOLH1EOH0obnopU2I+eVdIQzN2QTFVVzkiMjRlIUdRKzk+Q2V3cEpQMDMkVyU7ND9Tb25KPH5Mc1ZVajVBJkFeeUhFUkI1NShmLjF6Rl1rR2YmLHRzOi5OZyQ0''@;'; put 'put ''UEYlPEQrdkJFS1pTUytPdVtVYXBWQTwvblUhQUh6YTpEUjp8b3RKe2ovd0FnLHZxSXNEKE5tL21JYypmTz10eUxeJms2cCJRX0EiVnJCM3ZzYkghLjQqMSJWaj5dKFg9WmY3RztKWEVKOUI2dXVMa0ptQyFydHVTbTNjZ3luXm1SRiosSCxYSG5lNF1BL3A4TDBXXy8uXWI3PHBDa1F3QUpLdWRJ''@;'; put 'put ''U2o1K2k3NiVhaUpAcjFtUCVocj9RTCF2eVlSODpIIW4haSxAI2A+X0xWfk5bdjtVak90dkIxXWRnLlQ8SDR3ckdoQkldOSFxY2kjOWQkYjhkOF9gJVFDbz46UUhqaWJ2bSpWZ31rbVk7NDNOUTA9TCh4bVZASCxVNVRjcE44bmgidkNXOU53YStgPlhBR0FnREJ2cGU4ImRSVkFtZ2o/UlFrcGFG''@;'; put 'put ''PXRabnZsRFVZTyZfTW1uPVVlWSo2Sn5QNiIuVFJEIVNJY1U9dXp2SVZnKWVkbkp+OX5aVk4rZU1uNV4jQ3dge043Qnt4TXtFUiswNWQ5aylrQylDclsyOH5RNmZDKXk7V01DYEQ8QDE3JmBSayh5cDVfbXVkbGBbNk8qTjx1dDxvMDh4S2RtJD8zanw3ayEhJVg/M3RIeGJxeXk6Iy5wODE8I1VW''@;'; put 'put ''e0xTciZPZ05SSGdsaW8/KVFjWypmbS9WaUwhZ3tUdm1gWmZAQTNdaVBqJWY3ODJjXWFPPXEuWXIrYSx4S340PEM1KShMI0k3aGYuRDJHQyEkP2NfKShDVklXKUE8Y05TLDtAOmVKTmdweVckbWdbR1ldaiVrdTciRyEzI05IaVNSImdAbGhfUGMjRndRNHkzPWp5UWIjZHhzM1UjLmdNJlp0bT0i''@;'; put 'put ''dVEuTUF1Xn4/fWMmVWg5OEhCNnlmZ1l5T0ovLHhLYnhtUj5FT049QGcyUiw2aThRMmN0YnM9M2JDfD9jfjF2LE5RQkohXUsvW0ZSS1NgVmZUUzJ+XXRpJkR6bF9uZD02PHVhQzc4Zy85IzguW1FUPjFRJik6V2xzbzpnUi96ZUoqbHBLOzA0SmZhWTh0eDNRVXQmMytpb1dFTlp1MnwhUWowV3R3''@;'; put 'put ''LzRNbi4wMEsjJElmQzJecmFaVngrIUZXXVJSJV13QFU/akUoNCQyVnYmY3dzJEViPDFMN2E1Imc+Kz10N1VDLy8+JlJkNUhhYElEIi4yTFNVVGh9NGRnZEs3Z0ppVTRYUkBQeXU9IVdYeVQ1M1NGYi86K1lqUGMseD9YRFU0JGM1O1dmY3Z+eFQsL3xTIU0kIUAhaHl5aD0/cFNzTipjJU5Re150''@;'; put 'put ''RE8sT29wVEVSL1Y6Snp3Kl1lUkQsO34/ND9vNkR2Uit1WCgmKGdefk9oS3IsTiNvMXZsM0lJaGlQdCZIRkxXWltgeDhITW1ffE5RIThEQ2xORjNAK2d0UjBVJl0rWzU+WlEsUTRzVn1CNnFaZTguN2RDO1ZMYn08eFRjSnE3QlJ1NnEiOUhsbWZ+U18oI3UuRiVlPSEqNUNQWVheOnR+TCYxaSFn''@;'; put 'put ''ZCVAO1ZJejRbZm9eVDlJXjtYeXU+cyJeIV5iW0JUfFlQMlkmSlAweFg/VU5kaGo0UVNBPXd8MiFJSFM1VXdsO013VClJJEBpK2BKXTo8YENGSVg9MUN5c2haJnQ+eXBAMmQwXXxjOnhlZ1Rke0MvPj58fjFXTi93K29eVG5ML3wxIT9AeWJ6P2UxJHxuL3M5fEtSSiJCdVshI1BfTHA0SWg7QEw1''@;'; put 'put ''MCRfZTZIQkllNFFWdVhTKmZFbixFWjZVIVkmWzU0Y1huSVJvTVhNMzhSUitKTnVvXStxQnkxXVhyNmZZKHsrNzEiRU5mSDw0eyFybDAiYEAzVHk0TFVDe0MufCRUQGhYMG9BcSVQKnVYYF1VckJJbi46I0V0clIkNVM8WGp+VmYpODMjbGdFSWtMczcle3k/bnRQdGN5Ln47fktDNz5SKCQxRHJY''@;'; put 'put ''U2NNQDk1RCMvJC5leWMlL0tYbWwjcCJvPWtlPFIpdzVqUUUhL0xfS145KnQpbnt4JUxLVXFYLDRwQlsjfGdYZzhFbCMkLyJVYn5afmNOaW49djM3e2hWTzxZfDA7RF9zOEw5dzApNGU4Sl9pQjN9QjopJmJhYj41bEJlaXxFJFMrRDwpOSNoMnRbeWdRR1hwdzY3JHosOEdqKCohT11lY0lFeWFi''@;'; put 'put ''UllaSkB3WEA0Pk14X0pdbkpqVTEsRUByPkVKVCojUj1iblJtI05UUmdLUWpRKD8pa1VJd2V8RGE2LyZtPVRPWmA7UlRYWDNnNGtxMWlxfElUYz1PKnpKPSs/IkRUb11gfCR0cHgre3p2M0l0ekI+ITIiYkNBaXFmfXRDMjhpKCFGJSZVdXNvbXs5JVl5ZTdTTmhbWTJMZERYeGhXJkckRGFuS2Zn''@;'; put 'put ''aCxESGRwSTZjTF14REJTOjIwOHtsYmJUKG1GcyU5OFNWJUA7eXdJUXdHdSsrZURaaUBLailWaGhwfXxvOX4jWSxuTHZzOFBSZTRGTklEPFBhJDZpe3dAd0FwNEw+RlFUVl19cCoxTGJqTjVGIm13NipLeXkkcjtENU8jZm5DLj1FfHU9LmZ3YUNYIVI6e1ZyQW1ZPmBlPnZ2RjNENjZFRUJsNm8r''@;'; put 'put ''NFFaYFNFSyNyWnd0XW49XW1ffVRCTEVwemo3JD1Man5GaUFPZyhdWHtNTF9DSF9CSWhmaWl5M3QjKkUmKCF0NF4+PlI+TlJvYnhUTzFXRytbOHgqM1R8YntWS3lZNmQlZkQ5XmdUdmRbYkFyYDtdYU1aKkEyInF3PEtAdzBbK3lsfS90e29XT3QsOUp9NFRkajwvKUxlaE5re1VrWSMpfTshaV9E''@;'; put 'put ''UEFqPG1KTF9nOFlOVHBrdWU6WkREOTs4V0lQL2p5X2NiVW1wYD5tKVdOJG1gX2ZGQCw8U0JDZl44a354WSFtRyg7ZGkrdlJjYGZrLkt8Om0lYm9lYVIpY3BLKzx1TCxBczI7YmNqd1FGPTUwUytmLiY0aXI+eko+cFIlbzYoNVNkfEB1TDRBSW5DUShIPDBmJUouPyVKL0lORWJkO3pGSWVOZDlv''@;'; put 'put ''KW85UXxHZkwlbCssd3tJMj5WK2hhUmwycjFgTTRxJGJxc2M+X2hDMDBFeyQyTnckVWt2V11uNElxWiRVQ1Bte2xGaTptNikqPyheZWdkSkJ2d3VzZG43Y0NKIilwY2huOHVMI3VSLns+MV9VTW9TX0d0K315TXxffHczUkhUdCg7QUQ+eWU/SWBpUFR0UGFlNXdRcGJLWGBYdFZobGA2PHdXWDVY''@;'; put 'put ''PU0mJUQ9LFpwKV90bzRLcCJ9KCFke2ljWV5seyhGQyE4MkVZYTddRCQ5Z0kvQExkNH00JmdnYSw1VmRMMFB4RngkLzdvfFdnZTBqVUpzWiR6Lmk5SGsvdT1SdHU+bltrZ2QkKFYwU3FVd28pMHUqO31zaXlKeShXJGM9LEslUDZNLDdtSiV8X1tYd1pbZ3tzPTBXRTNRWUVUNCR4eTFfRXB1NDVY''@;'; put 'put ''XnwqK2JQPSFNcTshazF8I0NsRDo0T050NnNZLl0mWUJ3WzYxI3U+U29LQTtSJXRDRVZ2UyNGPS46VDh1bGMlfXN9fFN3RU9EX1oqLGh1V34/TTs4NzUsWkQrPFgzQDF9Vll8YkxrTiUsRzExfWx+TV41d204WyJySCVgcn5KbU5rQXUsKihUTV5JKXFlQ253K0NbSChjRSZWcnJYKnlYXVY2SVF6''@;'; put 'put ''PkwkK2BGKjN5TDssPiYhPng+R0plNHxLczg/WSkxc1RqKjVXPFljdnQoenw1IlhYRTZVdVZsNUZQb11zKC5IWX5MbWk8X0plPylrKDhGU2pRaGc6Um1re2J9YT5GbzlwOTRsZiQxbDx2STlHayJnVjw6blE9dXgsRDgsIXFBVmo2I28vNixLVTYyKm9BQ1RBNSxGYXxDJGZIcmNlbHJnMGZZR3ol''@;'; put 'put ''OkZnb2NhK30mXWs0WyM5R1dkbGVfI1gzYG83X3JQdGlbSzhlYFo8SStfPEhxWjs7MT5VfF8+Z0QzST9SS0FPQWV+Lzx7bUs1RVFyWHkwODZQWzd3WT8udWs1JTEyO0Q0UmUoej01OHI/enV4XWB1dXIobGZiWU40fFFFIVNGfDZeTmtHO1VoVk9rMi48L09bfj1UVXV9bCpdLD0pNGNHejh5Ok1b''@;'; put 'put ''NDEiMTJzTH5BbDp8OUVmNFc9eG1VWGhkd1t8aWhjRkp8SHBYMzd8MDxRWG48RHVxR35NSTI/S2dCWjY2WD0wIVJWLzI7Smo8QSlfanYzWlMlLGowaUdnMTV6RyprNk08YSowLCMhSE5eKVBPfjk8VmM2PVgjdUpVVV18Wld7ciJ1PVUsYTRDeEZ9WmNLeS9kQDspR256Q1pwa0dNfW5MKiY1RyYs''@;'; put 'put ''als3SnNQYkBGbFhvbGhtW3Q7YXZJWyxOJlpmI0NIUml0RUhIRDk9TEVZK0dAUSUjQ2k6NTkkTHh0NCM2cTF4QkU7YS5daG8kXj8ldURhYHFpekQod3ohMENXPkpEXT5YVDpXXSptWG1WUi9xQ05QWEw6XVpWRilIKihLcDkrUkIxWjpbeDw8e2lfeE5bMl1bR1MkYFVuY2pUOk11YXJLJWE0ZCYw''@;'; put 'put ''e25hWVRdVXQ4R3F9LCJfa3JJZGhdZj1TfVoiWCI4dlh8MnJDX1EiMjZTRCldKHVDIllZKlZ3OS9gJCo7JXo2fXRsfTNFbEkhQE1CJHpzfiQwfHJyTSxXSnhibWpZVm1qQldqYWpmJml3dz5JTGlQSz86REshZkJqSEFRN1ojZyFqZ1pGLDh4YTM9ZCZ2STY7UE9MVVBheE1afmc2PXVSZHJtOEhz''@;'; put 'put ''S2BwZC5raWNYLmZWMnMvOSFReW5Cb19PcjFgJmdUdDt5PT95JVV4ZT1EPFZZem1UWnB8TXJZeVg6UmhBc1MzJn1wN1oyNSo6eUNjWDhNVyRXRHUjY2JDIilhVVtuZjYzLFgpXyNeUn1aLDgmWmdHcCxJZGc7KyQkQCJSKGpZOlA6d2RxOFpuUnBpdjljKmIyN0FVSS5nWm46RTBLTjg9PzRWRkAo''@;'; put 'put ''NHIyO0ZCeXBJT3FoP3tXMGtMVzl4e3R8Tz1NYCxMVTJsaUBUTm5bTmp5QGU0NStgRiRodyNNPkQyKE9QRTMiOlc6eTdfXlY9aSI2Vis9SkV5dy9DIiRFMyUpa2AhVE0mQ2w8fGRoOnMkaz8+dH5ScXEjXUo/SnAhRjJ7SEYjUFg2Nk9bYmhtNytlSSRnPyZxP3BJNGZDcDNYL3FDVmlKSVl7b2kk''@;'; put 'put ''R0BgNCZ9bjhEVGw1fi5uMnl7JXg4LntnPlt1ImozcWt+UTxGV3tudD1nMShtW3RFN0pIOTxkND5RKUk1eDJlTW5QfkZ3KkoiLF1HW3ZpUi83WlBdKkRjdU88Rj5IK0I0V3khe0wiMkMmNmEsJHpQY2J3e3Z8QEciNy5aJXcmcWI1Q1klJi89Tn12LktvIW17Xzh3YlRRU3dIfHQwOGM2NmcrZGtv''@;'; put 'put ''XWZgIzE4aFpGXU0kPWV3akp5Mis/Z3YsXzVFRS9vVk1bbnlRUn15OmgxSGw6YD58MT5NWzcscVJ8Yl1FaDBydCNDW1Fucyg/UH1ONUV8bWNPKnhKY1lUdihwXXl+LmdBLy4yaWYpYitBZ0heY0wkVGpzIiR0dVBGcW59e31Jc1dTSjxWM3MkIyhDTHtlVl1lc1cmRXV+YFA7I1NfI0x0TSJsOVF5''@;'; put 'put ''SWZLfEpdelBIVzR3YENdMUBKY1p5VGBmYXlJeVhFNk5EZytkXipPe25CbEBqcX1aYU5yekFqZlN1UC9dZzZXdW8oYlF3bjlATzYka1dzTEl1R3JMRTIlRUw+aEV4NTxeZHcmbFg0NyhMXlk1SlZaPiFJVlRZSShGUSRAJkllUTRCamNTUCMmUko6bGsyYHwqJVpJaT0/RkpRPmdsKGhFTDJhNXRB''@;'; put 'put ''dVNvcmZ2LG42KXBfK1RqNEYzNiwuTjxsXVB6V2UoOys2VlclWCpFKClHNERhTVo3WDZ0RGR9QD9eYUR1QD13I2k8LyxtY0A3MUNDSHVLaFkqdzs1aSgrKzlST2xNPUZzSSNbYjtkZUczKExdZz5kRyIrb0BIKU1KfDxCbjA3PFtWcz9PU2ZZakNXdGBpdD5lYTEvSk9zaXUxLz4qST42RjU0JGNd''@;'; put 'put ''LGIzeCImLnpSaFlXMU4+ZkNhZGtQRWgwZj5ucytNOzElJHxJT0M6VEg4Y1RRO09yTDUxOjBqKDs8JWlNKEBfZEAwUno6dkBHUnxgLDw/cmdiem9CQiVMWWciT3NgRHJ1ZD4yZmo+R0dCQ1VuVmciayFgdz9BUU8yK0x5OzFyL19uOUJYNCpJKkJiZiFfIkVVPF8xbHZ1KzwmRmhJNUVbSkY2Nmdi''@;'; put 'put ''eEZYbF8mTTgqOEwhfjsmLylsQTF1Kz5NODZARiMjfkZ7eEd3PigsaUhsL2llMkIqOj1jbE4vST5aak9vUDY4KiQ2dH48biIzLElHUiRQZlVZalF3XytBeTF+NiJSQDduXk53QyUjTTlRL3x3JFttTU8vT2I2MHNHai9TKGFUXzozdEZxKVZnR301dnJUXUtMazx8Sy55PT5oSX1wTWNCMiM1JWAq''@;'; put 'put ''O1dNfHJSPnd7YGJMTzpUcURmcC9hQzZYaVJpTDw7O1dkeV8+UEYzfkdXUjhXKX0vRn5tWShPUCkwTTM+ezA3fnhIXWNaTSpaeFVudVFkZWBHOnZSfHs2I1FOYV5CKlpyMW9yOjtGKDI4KlR6LiZoOXMiOnRxb0daYzdkanJ0bFt0R205K1RyNXVKQyREUzlNPiYxMER5c0FnM3lpfmdUU0sxXXlw''@;'; put 'put ''ZS5oOyRVZ3QmaWBMOk1NbXNAJX1FP21pU1kxOFoqPTA0b2poYVNSaWQ8PnpZQzdlRFhKNik4XWtsMEFpYUQ8UnJoe099P3IlbUJYKUtTQz1iQ31+JTRnUXVZX18+NGBoOkNDaTs/dX1pIiZMNyoycGNNbVk3JnpgXWVXbylLR1NsbWUrOTIoXUx5R1VOeTQqNWNFN0x+fUpZYSY5eDFrTFBEQCNR''@;'; put 'put ''PWs4XS9DfkB5SSQrQFZ8Xm0scTt0XypyNi5jez1pIW1lWSwyYFN2KVAoZSxwPFR5KkUlKENnLkZaMWV7cHVAdUZJOFttZG5hek1PZis/PWJKKXJkRzF2N09jVWYmSWYjPkJXVy8rVXxnISUyZEU/REB2SGFpNiV3MmN4RGpOMnNralMqJSkoeShFRldPYGg/P20jT3YpW3RSQ0N+Ll9SN1cmfFZ0''@;'; put 'put ''VFdOeGROUDI5KjVmYzluQztSbCs9SlpnRjRIUEx7KDdGOi5RNkYvfSRHcVJRKTJHRUVxR0Bxdm4+MUJzUCkyJiZEXmNMKkZURjtUQnFfekRFOjt9V11XIjYifjAhNEtpNGp5QDd9fHpbeClZXSF7OkxpV0VyX0E8JlNVYllAPkphRXtBKU43UER2RTpLV0x5Myo+UHZ8JmF2LG9NWlg/RiszJDA/''@;'; put 'put ''Rld6STxSUFAvWnBQQ2A8LGJfW2UvUjhPdWdKXVdrfU1PdnAuK0RvQlk5NkhuOkN8LCRJQXxPYG0pR3s4UjcvIUBBR2FJdThWSk1CQE1DaGc5PGhXOiVNRC5+OHxZW2VCIWQ5TntwVXQpfU5UZDcyPVFzQEpaUldySyZadHopRWpRYl9RSHt3ZiE2MDY7d0UvPnAhUipjejleaEU+bGh8d2g+Pl55''@;'; put 'put ''MGR6NGBrMHpqKkFOb2Y6Ojk/SnhKWExNLiRINXFTSCJiJGBsa1EsJnImZTlAcnBgTEQ8NjIoa3x0LGI3fl04U3hnYGtmWTMzcj5sNlBhJUhaVUFZX151K2NJe3w5eVB4InwvZzNfQUQ5XnVqMiprOTVlWzhebX5pO0FNN0hYT2FLbFIxfGFWcy86Kzh4bWEjISpES0ZVR0B6NnI0WjhhfTFGRWtu''@;'; put 'put ''STFrQVMyYjddbSlEJUpNX2lePVVGcTh1VjsvbWR8eXBwXlV3RihtJDUhMWEpLE5ebnJ1T0dnOCtYQ0YseGxmRUtJcmU0S0dZaUM+eEIsNDd2N2JScmMrU01GdV44ZU9UXWZyYCpZYE4lQWZLdnNmKVdvRFEobi41eTlIWmtOMG1JZ0NAPXBeU2N4eEEkfVI8alomQnd3O15yXVZxKmx7UmE5KG9+''@;'; put 'put ''PklVJXdtaDUsYHFzS0w1bDw7NWB2W1R4djhYTH1Db3cuc1pQOk5vUDU9T0YvWTNWSXUlem53XV4xJkhbbVpRR3duODdyNjkrMk5UO3pqdmxFOiY7P3o8WVtDN3lYNXlwMlhFeCQ6dFJ5aVtNTHRQRF81PzU4N19RNXc9M0RYeXtVMSgwJHtYWDJoLlBVfip+PyMsR0ZqPTVLIWpMcjouPi59UCt+''@;'; put 'put ''VjpoOHpqPF56QDJDaSNtfURROkJ0Oi5FTWAmKyVgOGUyRHdqfT5FRWFsR14jcVJpVzFZZjBlVTleWEh5dXtSXio0TXdVNWojLHtfJnxUQE1iZjJ+blF7LkBvQTdeRUwmSjlzNjZ0LFpPMCFRTzAmOGg5RHUvPjtAR19MLn52OTc7YkswdVd2O0tmIyI9elkhL2M2e3BfLGZdTX1+Vz4zQmJAOj9q''@;'; put 'put ''e3M8eVlQe34wSXEmWkF8T11hXXtVcUJjKTJIV1RnP1ZMKXlJWD5DTSRzSlppLmBsUzhvY1c0OF5tK2VUI0JWSC9+N05FVSZNSFp0MXUmNEZ7aWNgZTJyO2IlKEtNMy9wSFtHKVhwZXlmOzgpZltCOWVJbkhiTiNeeHxsZSpgOzRDVGZtU2A5LD1LWGxaZzZReV09NllAMVpuRkR2MlVZTm0mOXA+''@;'; put 'put ''NCosPXFaOipgeihoLDIhIk08Uzo7KU0kczszUyNfZChiSGFkc0I/Ky8xVkRYOkNfWW4sMXlBdVV3aig9P01Kc0JxPVp6akQ5aXFoRiNdVkhCQ1pyViZUXzNzdDlNdCExWTFbbSNHWEF4dlRIXSlaQHIiSSNtO0RVUU5xQ28rMF8hMz1jY287Vi5bVTlTVmdZdm1NaGxGZE1keXYpRElWSG5iITg8''@;'; put 'put ''fnJvYyZ1NFFuPEMkMDVsQDxaNy4iVlM2Qy43MixZXit5RHV0dWE9dE9heD59VERgR1pCMFROI1A1fGU/cCoxJHI0UXJlWH4pI0pvNlAxOiU2KUUmaVFAPkVUO0tmJCJJeXQ+Ymh0WFJgMjBeKFhxY1spRHddJjV1OHovJG0+NDtSKWAlXmx2WFRQJT5fXj4rdlo9Jl9gTyhPQXBZXnM/PnAjTytK''@;'; put 'put ''ZEpGOSE7NlkyW3hNPCF+b1MuOWl5YUV+fT5baFNKbkVDNWFlaU9JRG9SSD1reTZGRkp8fGhAVXpAP2NMV1V6UzUmZlU1UGVuWDFbKFZJJTRtcGImWjAhT1kzW04oRUg+fUBvYiJwUHt4fDZCU1ZGPVI/NzJlcjFXXzghOi89dDRvVXlZaWV3PjIlV2FbbGZpRU5hPzNRITdWfUo3eyw7SSE2Wm1j''@;'; put 'put ''d0BiaH1HcD44OSYvK2UwWE8mJD83TT9HPG5fZTlFWTdZKysjPU8ubEt+UyZjYEZLbVYycFM5JVkhZzN7Q3FlQnE2LkA6IyhvPk5DTypzcGI7Oy5jYSYicEspU3t0Pyp+aktwI1treG58fD0oXjgoV2duKV9pcFY/Q1FbczZreGFFOUxAVHh0XyNsSjo9K0JUWX5yIWxgZyp9eHFKWT10W3MyTEJ+''@;'; put 'put ''IVE3e0N0JVpvTG05IUgwbEshS3FMYitvYzJTP0hQeVBEelI3T0lSUUE1Tj5qdkhwUmkuN24yaEUuUERzYk5AXX1MWVNNc3xCMjE9OH1hRnx4R3x5N212eldtTndtYywoXXU+QUkzUH5gcUpUfGxjbW5fTFFQJWl3dzl2KWsiZWpLYUtNNipJW2NIRnU0eEQ7aCZwIW1eZGNEZmhGbC9DNTdYfEN0''@;'; put 'put ''UHZWTC8zPEJxI09HNz9McHk2dnEkVSF4IV0+e2Y2bDRMXyRIIUhINUAhTkFTZ0VebDtYWShhbSVQYVpyNWBXTX1vbSlHM25qfHd+eVs8X1EwW207W01raykpWWRmcCRaK1VveDxIbyx5bXUjfClfQihMeFVDNSJkentAUnl2SlBjcW4kfVVhKTVxLldqfVJob2RGUEE5M11DPy80OzR2K1ZIQ0Bz''@;'; put 'put ''X2A9ZnxXWUBHPGx1dDk6XmM/c3NUcTJATCpTRT9dZ2EwR2g+d30lYzZOP3JCRnIhVkg3by5zJjI7RigjOW8kJm5rLEZkckhnM3kuPVVkczFocEBYYyU0NC53Q2Y6ZF9NY3JWW2k3ey8lO0duTX5YXSFKVFpeOS5EeyNyK0VCeT1mYUVVWVBAezRzdGxQRUlncCg0TG8qfUx1KSIzbXVjezR8UFJT''@;'; put 'put ''dmtSX1RwO19vU3Zbckk4ZGc6Y0tpZE9MfHA6UXhZNWRYRTA7N09pKCYsW09rOG10dSFKSGopaUhCXnJmPE8+RVd4LCM0QztnQHkoZVFiLyVKQmU/SFpOQSRObDpaZDopTWtRMC94UXNmKGM4UEclZX4sZWRGRkk5MU0vbVFBTV9FOEF3a18zR3BwMmJWTSF6dExeOl5KQW59fXZpUUVocEc3KnB5''@;'; put 'put ''SzttVGxdJVQ8KTI3dHUsZloxP30scSNzIV1NWG5eUEJtKGNdWmQheCNmMyFrODtkOzRqKXFYN01RWVBlPzt0b14lancpNnVnU2NEbH00X1tIRnciMUJocXlMeVV3Uil0ITRecVYmSU8lKi9LQkt9Zl5fL1NWPjhMYGpmb01bcXtUKjRlWmdCRngmeXxPOlFtXV4hTUBxNj4hPX0jZSFzIighdk8r''@;'; put 'put ''dkBPZXMpLGpHTHl9RnhBIiFve0JId2VaQzdHfFJSLiVddG0yV25beXlIYX1Rd2shSlJwP0xfOk9QRClvPD5qeG90YXomW0JFeTlnSW90SXF2TlFlSVlyN1hhZStRQzAxOVJUaz4+Ljc0XXF7WTYpdCpuVSQjPCJvPklld3ZiaCxbIXJORT09KjloOXJ2NTVZOj5mKiRDYzFRd3hiOUs3aXFUcDly''@;'; put 'put ''VF1NOXA3R2ZlNSJza2JaQThwOCt5cy9yRSQpIVdbN3teOkplKSNpWEdhNl04dU4oN2EyYyJvanJWL0lkJDFNYXteSj1mek56V1tEREJXOiFMK2wmaU0kTk4xR0xBeUR4cC51dmNdRHxEZ1E8dnV7cWI3cHhHY0lkLzg0MmpIajw/eTVxRXpvPSFwSzticH1SMS9AXjAiU1dCYS9lYnEobFt3cVY9''@;'; put 'put ''Ok1mPkZCMGVjYFIkVFQhMXphPm86fWR+M2ojUFkrQFs/UiFqaTZIME90ZTZvZVZ4eU9ob3BsP1hLdFUyIk4pVyksNDhaSWsoUWdaQy9jMHE3WlZQcEovfCZKV05OO2FXfGs1KH57VE9oN1NmRkZSTjlbMUFsdGM8QmhbMkR8IjQsJmpCVmJyPT1oNmRsQH40X1pOOSg4JioqVDZkQ3NWRWM0bDco''@;'; put 'put ''XkZVbSYlOTp4QElGW1Rybz9zSGU+VFUkZGtWXkNaI1loTG1+ZDdAJGMmSSE+TSUvVFFLd252SXF0cTM5X28yTjBgRG5dPXlTajV9dlRBemB3NXZhO0FfL0NvfSVLcERrbEgheXI1NipMMjd5LkluYjxIXlN6X2MkLlIucH5IaF12VnZUNlhgT2x2RldzO0MsTz92KSVjNXdlR3cyaWRTJEZ+TzRW''@;'; put 'put ''ImtJRUU/VllkWTJbVllbOzJsQDdLUHZJKjxCam9qfl16WThJImpVWnBPRnZxJTYyKj1qVDByKE9rQiRdPSRLRjc9ekBCMHtPO3NWbDx9XT18PGFGO1drV0haSX1bR3daeU44RWooYmRDbmBMPHd9Pk5yQHEhXTw4Kzk8bmlveWV9P3QhZ2QubDlUXWdXRiF4IWNEYTBMa2I0PykpSH53bCssRjpF''@;'; put 'put ''Jkx0d0I5N3BsWzZmMHUsZClLWXNHezVeRzxQbz5NK3NnbXouYGdnUk9QUmZHPUxWIyl4UHxYTV8+Ij82ekQrWF0zdGp8czp3dkxCKys8JS4kTmtZIz9dSCVdOWt1VSoiVitoTVglfnNUQzxJdUFpaDw7WDFuMWNfYENHQ0UoeTldKW1xMipxSVpbVVpuV1JoXVcwM35wSVM1OkguSn4jT00pNH4h''@;'; put 'put ''JEt8ZmxEeXY9I0MyOTtQVGJTP05EZW9OYVhDNiJ2Rms0bGxMOn5feFQ1OjJTfTReTypAOS9PeWY+Z1BESHxGYWMqJX5DW1NWSDMqXil1fjNveChYRE19YSp2YDlTMDc2T3kwc0R9MURWcG99TCkqQXl7WzpZMUlsRUFAbC9WSlRWWVtlSitpaFptKHNdOzR+LEdidnx1Il5qL21GV2wjQzlGdDdw''@;'; put 'put ''eGs3UT5oa05QWUhRQys5V1JyLlVFNTx8OGxzQUNNNkAkXmY2K3Zwe2J5dX4sR0JbX1lpKi9HRTIhd289eXpYNkhiUV9zY0VjR2BvKHV9QTMxXnFzIm54fSUmdEBkaThXOVRgVlJjV2NxQVJ2RFV6PH5VMU1qc1tjWmlFfnZQbGsrcGBVMzVqSkZARjcxWit1ajVMdixqNSkqOFF6R1k1JCYhTkVA''@;'; put 'put ''QH1xPT5zQGVZbyFlLmRfU0BtV1tse3IscXNseyUlRi5dYFomQV1edXxdWk98K2tnUXBDYFNdKkhLMmYuZEouSCtkUVFFYmw7NStyOzljJTtGRyFjRWcyWVVuJTJvcmozPS58OzsxSDJ3REpoJFQmZGNjQ0dtdj5YWXZwOzMmfkdrOy46Zi58aFUsfSxqK19FNmM/PS9dLzU6SEZgdDRFJlE5Pz5d''@;'; put 'put ''PzpXcUJpJEF5WiZKOSVZXWd3bVtbRnNsfl89JSE8czQuV1NTM3hDcV9oUyo2OXVxV01oUiwiI0pFb0kpdT1VR2EwVEM4Z0g2dXI2Il1gJFRhKVtRcj1FXl59UTs1InRaMGBuYnImfT83RTlQSF5DZ1cpWi86eClPUT8pa0coNSZGPGR2Pn5Fby5CcjhXOXskMkxzWXo7WXBuKCl3InUwKmZ2XXA9''@;'; put 'put ''cXI0TlVxfHBjaDo5PjM2JENJczh9LHdWW2RGI3UsTUo6YFJjPFpCPFsxKF0qKVAoOE5HUVpmO09ZM0VPb19fKDkoOm1ja1diYWhKNHxDbExtTEJEKmMkOHw9L2NnTGgiTmNmJDYsKGtrPzAmYztEZzhhKzh1OnN6d2shZ3JAZEYmaCV9ck0/dDlRcXc3ZXF7L2JAYkZsXjcvdFFofkE9YitVS0A5''@;'; put 'put ''eTsreyYqYkF1KCQ/WTc0TnM2PX1PVVVMZ3t3JSh4WF8qaClhPzluNSxZX25JTWFVSjNeWC5hKkRCZ05ZTG40cV9kVXNqaEImQUdwcj9eVEJHOyhdQHBLPjR+aSVMbmdKbXNnczZ2Q2NuI3dGeVlEM3YmQWxvLi4mOj8ofndFJD14NlRIND9scTk5UVp9XXs4P2w3Ti5tWF0wO0lJVzBxLnU0XTIj''@;'; put 'put ''NlQlMkY3XzNMOXR2XkR8KHh+bGo8UWw7fGlTUFdOVjx+RkpiOlApKW9rIllHUi88aEMzW1hfOm1zd08kLDJAMW1NYTldSlI7cXtRajVxZFEvKywvX1kzM3xWLCZlSXFVNTB5T1ZpKDZpVnZEMS8jZGBSRzdnemdyODBiandiMCozVClja1QoSkJwfHYrVmx5JD1oPmVUTWtwIWs6ajVFYnQwJjA7''@;'; put 'put ''dCR8UFtMUiVnUGQsTVJZOj5KTnQ9YCphOHQxM3ptSHl9Y3Z4V2xHLj5edSRUSCFtLixiay8jQyspfm9iVElBNktIZTF+TFJVISxDN1RTTUxQRlZ6eTV+Y34yaGErTTZ8Zzt3dyU2aX5uOE57UFV3JS4+aHkoJEB0L2RCRVJuSCl9WVZgLnJES2t5QC9RZXUzKFh9VCpxflhlST9pZithREopcm1p''@;'; put 'put ''SHw+Q3BhOWR3b3dlTHRSeHsrWUZbbj5RQSlqbjNjSkpeTFFuQSt1Y35pImhORUFdKV90OGh+Y0tLNjVnUnQrcz9fOGVnIV48K2BGVSVqIixybzJQQSNHSmB3PVt0KSYjRHYxJkRXVipsOzEuS1E/cVU5W1owZlckWD1Ca2E0PjYpdkEpRCEvPV1QZGMoYjV4UzVDKUJIQGdifntffjwjPHReVSVe''@;'; put 'put ''Yi83eiV4ZWcwbyIiKnZjLnlCKHpUR1N1ISY2VHlSbzt+eFVhZj0kL2Y5aHx1Qn4rTmgzN35zXTk2VW8va3RHUkNVVlR5RyQ2RTImIz9neyg0MSFvMnZGdDIpW3FSPUc/RmpPPW5lRkw2PGs7OzZZLCY1ckohaixZPjRWcW90a3IoKV00Mk1uVS8kPzArY2Y9OUVAfEBfRjhCWXthZ1B3Mih4b2g/''@;'; put 'put ''KjpMUzZ2bDw0Z1NtN31YLEcob3RaUX1jV25PYExWbShCIz1iNDJqIm9fVjd7IiNtaHh4ZnJKc2U0MHU3bFV6WHVnaCFnYWo4Ok17Yj8vQlZDKXg/JjVIRllEdGY7TCJKUUN3QyRJSmJTQVtzNzdeLyk3dVhHYmpGUU5faiJWVzx3MnVBXVthWzxCXyl+IzMyOTF7eTFrLnQ/VDEpPmtDYUYmIkQi''@;'; put 'put ''U1dqTHxXSClkPSJ5UTtTVCE4ayxyMVp+VXhxWWtAeT9KKU5vX0loUHVjam50XmhtTklvZTp3X0hOZXkyNz0xW0hBdWRofmYscGQ2QFZFZn1DI2ApcjpZX2tMUUcpR3JGKjUpa3MsL2ohR2hkaWxLbUFbU2lEKV5+Nzw+d0EjNio3KiRVMl9TYkx4Q0UxOz1jNEB0KywoUEs5Q2wmRSY6eztYJXxw''@;'; put 'put ''aHRHK2B+QGw0fXg+NmU6emQkMUAmWCk5JC46bCVmZHI6Jkgid0JUT11+SSNYZkBmM2VBSkdNOWE6R3BVOntvUDV9ZDxVfD5PW3pPO3BfTlZFfFNSIUZLWk5sPmd3dUV+fk9KJSpJWkxUZ2ZlJVNyP0dQTE86aWRKSGNGLn1ZOG1WYl1Ga0cxRn17cCskJCRRMngiT1JuT2E+Y0FyMC9VZHNXfiFQ''@;'; put 'put ''IWNxS2gqa15+In5gWWhiUGIkTS5VZyRXN1dCZEtEOWw4YzFnP24mdWFTOHteLjt5cDciTlVwdTBfLEZDa1Fway9kVVImYzFJO3JvJVAvbTU/WmdjW1dZP05KK0NFPW02RXZHX1d1SzYsKiZBPm04RWFEXWg1VyZRMFQwRGRkWHxEblV7VGFyPVN6bmpQLyEidTFSWVs5RkFxYElJWlYpOFVDaE5Y''@;'; put 'put ''bkQrSm8sNngmQFFxX0o4NyV+K01qeGJeO1RSej9pUTwoaFo2TyNDMT12TGhaMFVSdk8idjxSNmhQI25mJGcqSjJPNykuWnFXP2RhS35XfjhsUVcpa1pNP2xpMHJHTEAhLmc0MGgmd3EiKlJGbTBAXUxtaSJHVEg0MGNbKjVLUE9kdWhWOSVCJnAvM0gze3liaWJKWnxUVyNbaTgqR0pgUyF2Tjxu''@;'; put 'put ''d104ODhAU0RvOWYsdVVrQ209PWl6bTFqSjNUbng3Ly9NeHBoRWNkRyEheFBwVl1nSkpUdSZbfGhCPCZRMER8Zm1qOil3TyFga0JhTjl3OUs+K3ghfXlFRyheTkQoWUM8fERtfUZIXihNbTJkPzcwQmpLK0xCZ09KRzJrIWk3Xj40WllgLnxzYDUrXj9xSiZWPlNSP01JYnVNRDd3Vmd6Mig6TChE''@;'; put 'put ''d0VSNSR9b2tjQEk3IzRPY25gK19xTC9YOldWRSt4dTRISHdUXi9NTS9CbSJeSlJRRXcpQnZHSnZBSjgpSjx5d3d9cnNSKllxLEl7KFVqRDw0QVhIN3ZqPyF+Z0FZUlZxYEppWUkmZkd4Y1Q9bVsoK1pXXTRRZVB9UipXK3EjTF5YV10yZGdzMnVjOFlBNHNJXzA8LCl5WFchWDFUSHgxRDI0WDxj''@;'; put 'put ''TFp4JCk9amNuKT1IYHRtTCxxdH4sUy82OS4wdFptOm9CezFtWDY+fXJBezlfPTElMz5RbCMyaVlZRH4kRUR1aDF6dlBZT3t3KUtMUDoxRHMqaFFRSFhkaTg0L011fSN7UiUoJHZrbV04bC5iMWAwL293bSxxPX15MjE4fCVlOkdyPXcpPChlaEoqb1l5Mzc6XT9nUF4xLnM2O0BJNThOPHE/QmJr''@;'; put 'put ''VTpNcExXTCk6b0ZSX0loaikwL1lkVW01SThiRG54SiwiNTdRfm9Ca3xicG55UkRBOnlvYHFrVWp3ZztnNF0/Si5COUY7ZT8mQHEiM10+fFhLaHBzVSomM2xkdF0lLlQrMjYxIz1QRFFIYSFWQn0pUD9SfS5xZ29qa0tmPT5IelNjTntlcHdeZ3BZWz1fIWgqNzdAYXRdJmApNz91QSNyMVUyNGcz''@;'; put 'put ''QE1nRjpsLmIsYjR3JmVARlUsNlNVXXghPyFPRm9udmJRJE0+eDAqa1R1UTFDRz5hXWVZPjNXdFIldzxQMzlsfj0oNS8lKz1EISMhfVopSl9JcTlQLldIVFAyZEZ6MXEvNl1lQDV6KjZ1SkBac2Uxc0pUfFVxSTM6Yl9PNHspOi4kLCZmZi9Ea0NjR3EzbHliPjJsdlgxYmQxeUg6bFFkIjlCLEE8''@;'; put 'put ''PFgiR3ohZHtUTnV3YDN6OWI/W00pMjRWbW1Me3RRZlNsc3NOU0VNTXVySCg3O3l2YFl8TWl2QnRPcVMoR09tazJPc3VlQUcxa0VRQHpweCQyelU1S0FDYE5dPkwhQ1pnZ0VaZ2tJIk1id288fndATF40dUo+fVNFWWN6PUpMfThRRVljbnhxeCorcFZiNEY8Intya1pDb314IU1CcjM8UCp4THpn''@;'; put 'put ''Ui4mcXwlQj4yKmJ1JihTW2J6VCRldXJ6cGxWbkNwdWs7d1IjJWwhMko+MSFwK3pwWStTXjpMOWsxRl8lPnlyVmh0cGRNMF1wSD59VHJyLH0oSEp3I2Z8Rl1ILz8hZG5NVHdkZU1JJGdxa3ZaTX46RkcsWiFEW0tNZDNaakQ8Nn1oTF91JE5nfXZwTEF3W1NRdiQsVG5DIWhYYSFMNipfczokM3Nx''@;'; put 'put ''UjQ2b3RqQTE0YkUhKVZ3M00lMjU/aT9xYUV0cX0keTg9cShqJHEkY3R6VjowYyZlTTFhamFFai5vRDMrJDd7SVIwc1klMENORChoW3xYJCw9I0pISHVHYWtAUzVZT2xzZ3xKMFQoZENtd2lAfjVATS8mKiZAeENOZFUuYzp9cU1aNWE2TnA2VzQ7MFRJN2liWFsmLnFSbXE2NEh6Q3Z9NH1iV08y''@;'; put 'put ''OiI5XjU+KlAuQnYsd2cqT2JvTUNxUnVpKyxsKlpGektIZEZ1Und1fWdHR0VuUWNNNG9fT1hDPihPeVFSZGhsJE4rflNWe1tVbC90LFpiVkl0bD9GR05IcEs4QGh2JFdYT3N1QCQpQmtYXTRJWFNAI3J4VzAvMX0qdHNVP215Uzs9RllwSmlNajhwdVYpPyolY2gqSFBPcG1pfWtKWzI5Mj0iSSJ3''@;'; put 'put ''KillNmY7KGpMYXRrMVVmdz0xVDs4UCZIYiZBXz5jPkNOaDNrUjUrayM/UDpZLi9FQ2B7bFchTllBWzxqUndpdCVpb2pxbWpiPUw8Z09QZjNvZVRlbm9iI0owN1EkOTp7L2Jwe2x2OF0pcSp4Wi8pfnReYmg/aXhNdCt7bXMvOSYjRkIqPVt3VGx8a1hlSWh6R1dfd24wJiJ9fVYvJj1lT084ME5A''@;'; put 'put ''PzkxMys+b0AoTkg1XnN6SVl2RkRPfndIQ2FxSXwpdixuUEhdRkEzR2cyR1dKb3xfXWVZTks0K09aKGRYVlF5NV94eiVJWSRAeDQrQmZyazh0biskPUFeTkx9XmR3OClEeFtZTz5wSkxlMz1AJjtIXzpET11MLmlEXlAxInslO21tJXEmU0RGX2hMYGVJRVR6dUx0ZSExJlZGbmJ4Z1h4VnM5K2NK''@;'; put 'put ''Jj50QV1GSyMpLDFpSm5CVWpUfFF6JGomNEcqcTMwWCFaUXpXZkZ6cjF0PEZoWDRFdSlvWj8wcDBPS0d6QFBbSUM8KjRiXlVGKmdGXkV0fXtlTThALFVwKyxRbll4K0x3SCZLPiVqZDQiZ25WaDx0MzdvfXQiJSVtSil1VX1qbTVWOEVuSillVVpmPUAqK2lrLlVPSyQoQ2BDeUFFanc3cGs4WFpE''@;'; put 'put ''KXgseyFwe3NbVX15fVsjenFYTW5ZeEsjYEN8S05JP0VpQl5hOWAjPlNpSmp3aUMqVmc/IS5LYzZhWCxHKE49MkgiPTBXRDFJVF5VUWQoWVE+KmovTlNrMDZBSlMxPnFgIU5mPmZ1SXRZNSFCYy9SJWtdITZRaWBSO0peMF1AaThfOWsyT3FNbnM5O1AzdTtxZnAmYEw/WWNbPGleenVXSVdeVWNb''@;'; put 'put ''SGFdOCNxPTBVeDEzXm1adl8zbXtfVXJbOjd7ZEIzbHk1Y1VWPTBOYDlQTjJtJipaW0BPYjd4W1s+KSxKXk41SlQ9citnOXo4VXpVLDJnamRvO0hxJEQ4YnMkP31nQzN0c1V9OVRzLiVlO0EsdXspNzc1c1BAKXQ4diMrd3R1XjV+NWFvSXx1W1pSPnFbNlQ3bUFdNWhMNm9ReHFFVl5UW2s2bUlP''@;'; put 'put ''UmZxYyghbyNLezEpZEw8XXt0O3ttbCN7NXYrX0dlQEM3cHpwVy93LEAmVD1xdnkucTkqJHZQMEImQTBNQFpvdWgsJXUyQj1pS3BRfmp9ZiJeSCYuWSNISDZpV3ttNGhdViwlUmhSKEA/XSF1RkhlPWdMTm57RSMrd1FsSXBaQVg9XWU6O0ojb3tGL0ZVN2lILnptfnZ8UUVOck5ZXTNkU2BDTz5n''@;'; put 'put ''e1ZPUS94XmRRbUVuVC5aMkBnZ094U3tjdjkvYlZ9O0taSj9ScjwyRXQvbDU5ejdnKGpKI0NeJUZtOkFial9ARzs9UEN9cCk9WX1zJF9JczYpJmQsdVBqR3clMDpCPl11TnVmeX5gXTNnI3k9dzx0KTEzSnMycFc3YWI2T2d2QnIsR205PTxIO11JIUxqaCs0VyxaayZudD9OSW5iUlY0YztnXWdn''@;'; put 'put ''T19wZWsmXT9WKjBXL3N3MyY6QCJLQk8wZC99cko4MSZuTjZEOWhDKDJqYERCP0VGWSxtKCtPM2pAS2kiQkBEKEY9TFBEWjs9WGRPZDoqa2BVWWBQNkFjfSUvbSVvbns6WnkraF9FJkRPIVcpKi5UUkMoal4zJSIpcjNITlhjdXNIN1gwbUh7MEU6LkUpTDlRXlUhfER4XipSOzddTkB0c3wxM21P''@;'; put 'put ''ayR+VD84USZVOGhRSjVLbyNFWWkqVCxtJi9pVGtFSzl5OFU4U050KXE9cVNCTjdXfklvNW5uX0s1dlFHMihRanNFQ0IzX2VTMEhmdm9MVkBqSm4pWVgrbX5fJGZxWm5ldmNMO0RILFNbNV5ZKXhqSnhYQDZRVDRFb2siK3Zfezl4eCg7YG5lc2BSP0IqK211dUBWSigqe3k4eXtSNEVudGR8UDIo''@;'; put 'put ''RFFNK3lBMFI6T0dKdjhXL31kdnF8UC9RSWs1IyFaOTpmPUJpKk0zbVIsRD4xZTwpajp1UlJvbnxPYipMPDF8NUU8Xy87MUp5T01gb0o1PzM6VkpNQiQhK1dXamhTa0sqRmBickg9dDZBezlvSV91LFd9UU4pIVJzSWFfMk5mTC94PkVIdlJ6Sml6bn5MTDBXWyZ1dUdjT2dbNms/V10mL09RPF5Y''@;'; put 'put ''fUBEdFBeWDFOOjJkMHxTUmA2PyttaDc7Tz98WHpHaWN+dGQ/VHIoRFFNN0BGdkQ3JiRdZGtzYyleQ1BpWHlQflRxa3NFeHhKX21EUk1gQHhuRD5wOmFoPEBncDBhdkd6a2hNKkAzRGlXRmJnXkhRbUVFP1RdWStrUllpT0p4PU4mNWJmbyMuPHZ6djNadjBYNCtTXzExd2hCM1FebHZhdHZZNSwm''@;'; put 'put ''fH5FaFhKcGJJeGN5JFBeVD1uXnM3QlQ6RF9nKDNkdiZEXk58bjUpIm9aViZGKCJPOFYpfmglazBTXihUJCM6RkNTdWN3PXlaST1kUU4iIX0lJiNseT42OipxeHhbSmozUXg2VXJPMi99YGZvNXslTGBCbV1DWllPeyRJRmN7I1BFTWtjZiIrdGMrNldrbGhXTzppeXZ2QDVDPz97WlY+a2NwVV1E''@;'; put 'put ''bylCUjw3ZEp2RHs+UmpJPW9YeSs+JHVAckJ6TH5DNXQ3b0dRT007QD5McUNfIy8zWD9xR1g/O3Vdbk9vfVV3Oz59KVVGT1QhRiFRKzp1T3ohTipiN1VIUyI5LFcxTltnbnNbPU93NzNwU0NLPikuXWpiSEI3XV5bIkkuV3MranFTSkJGXUY6NyowWUBVSkJGVHkqVExvSUd8djsxbF5sakokLiFw''@;'; put 'put ''dXV0OkZNYV1DNEx5dXxiWXhpOXRueGdkNCs2X0s4b3RURENEZmgxMWxpWXFDZllFd0J6e0VrZTVAdS53T1VNUXUmVEJdLHlFWF1DV1tZYlNlQ2NvPH41S1g+YUpQbWRpKVlJLlViP3IrdzZMP3F1bytMb2Q+bFYsNH47Nl83O2V8R3hYUWdPU214b1o5Z2QoaiJtNDM7a1VmNy9AK04odHBCdGlw''@;'; put 'put ''dU9XdSg7IjspPndKYF5WbEJdaFFPeUhPIXcrVURQeXcmKHR1MkNJTEk3YlZ6S3hjPk1tMFhEeFc+dDJdLkU3U2FsV1cyLlFEIUwzSXQ/cDRxa1A3VmMrQnNEY3UkP2QieXJAKWBXOUxHVmk5VTMwdUNqU3FNWSNrNXJvdVIqV0ZGTyJCWERnWHd6VzN+bFpOP3kpIltCNlB7dVNMOl5EbkNrK31k''@;'; put 'put ''ZmhIRT4xfSFdQ1hSKiluQm8qZkhJckMoKzh0Nl8sR1l+NUE7QW1nISNKT1VCQjwoQ0YwPHEzJkQpXj9jRTE5Sm4zcD00aSopTGpibGlDPjMjUyo5XTNzKEZXKShdJVhLXSlVVEx0ImNKQSEzPXZ5YF1rL0ArWFdXI1l3WU9zVlB5WU93ejNTKjNla2sqSWR4Y0ROaG9JYU1ZfkA8LFE6c2xpMDFo''@;'; put 'put ''SUJLYGZmVzkyaT1JU0VRSDxGR2BVO05eKTFGPDk+OF82KHJAcDpgTVlNfFY7P0Y3IyFFY3FTOFhZO0E+cjoyT0BeQmE+Y150LG9yUDAzZSR2czlQTGlNc34la2FvJkNoe1ZoZn4lW3I2eWUzREokPzU0OD5EJU59bjJVIUhgNFNVUUp1c3RSUVJ4X0k3ZXRGJV9nOk1tZXZGRVlNb2xFVTdyXkZt''@;'; put 'put ''RDpMPndRQ2diWTAyVlR4PjZaIWxubEwpLnNCQHtQX357ZCZ6KDRvfSh3Uit1cEczKm4sMDkma1EmY0w1ZlZzTmRnOmtCQU17R1Y1bz0oWkdHOHF9MipzdlZRZnpBZzpjYCxJJmFWNUNBJCROVk1NY29KIUJLM0YwbnBMeyJpY21PeUBQeT57KW1ETkdeMzAzQCQ5Sm8uOSw/enhITzJjWEdKIWxl''@;'; put 'put ''PHN1dTkzaj1LTEE/L1BQV1J0PVclRzssSSJnK3tHWilWWVRkYVM3QlZ6UWMrdURHaTQkQFhGRk18NnNINkI0UD5wSSQsdHM0YUFIQ0tYUWZZT0YqJU0uYixmfk9hdzRfZSNCUVZGWlg1SGtaV1JsM3x6KVozXTVxek5wcXRCQUR9T0dYQjZaWj96NDQya3tCR1lHT3tFcmtJPD97clpvTzllUkol''@;'; put 'put ''TnZQIihjL0xoOHVdTC5ORjVHYVBWKix0SjVBWkckZ1ZdUGtMSGQ/MlgmNXZDe3V6QExKcHY9ZGlHVEs9bF9aLnV8RCZORUhoXkdse0Y/cFR0c2kzdWhGYG9sWENNZXNPY256ckRxKmt0Y3VANnRBaVFINl02YDB5TW1veGBmfD5bSk5BTVIvMS99eTFodWE0dEp8K3lrQWouUkVlMlN0UzY3bzhj''@;'; put 'put ''Ny4uTSh4eyNCTyU1eUxZb1ooVUIzYl4iSCY0eHd7dTkrNS5JMlhifGNIRHU+RnR2ZiQhV31feEdIVHZ2PWRhR2FHUC9lM2F1MVtZX0IxQl9EQj0vME1yNzBNZWlxTCJDb0RGcyxXajxsTV42ZylkRDJtYTN1cD5qYENVQGFSKkZQUjIoPkMkTSl7PmskZlF5MD8+azFAUDZnZnVeKSs8Rj0kRWYu''@;'; put 'put ''PGtEPXZJTkVxXWBJOXg5aWIuNC9HOUY6QURPPzBkNlVYSTxPbFVYd0lEMEpoVFhbQ3JrY01nODZPZHB4P2h0YHA5Pmw6RWc7b2BfcVEuZzpacEdCdjlCe1h6bmdYcF94Ry9OX2d4e2heUyF+RyFMcWQuYkVYLiNYUiMqd09ia3gwb2pycz9uXn5mckU8JipVZmV1ayFidjF1YXheNWxxSzJAZzNk''@;'; put 'put ''PTYhZDMkaFYxMnt1ImFzKTRwSDE5WS8oJWlOZW1SKCtAL3ZQVUw4cnZmPzEjXXJrZHo1eExWSlpmTyp1U3pCPmR3RzlAOk9DdDtyPndqc3hXViJHc1l5RSNDbjw2L255aUY7ezQ8bUYoRkR+NllNZSJmRixtIz40W0dOaUdPeXElSUgobnZVWHFlQ0dPUUZlYHYrJSMjVWZvZXIpQU8hQ1RTZTBD''@;'; put 'put ''PT1LKExdMjN0RGNzZHxbamhKVjQpZnd9YUYhb3lSVXJQJWg5RCtRcmI7bylMSjUrTndxQylhajguY0VsOkJ8QiZzNms/MmBWXXQ5WEh2WjQ5TVdDXiEqXnpCa241LCVgU2hleGUuOT9TUXJ4KX1dPEZ6OWlLOGlvQGcwN181bHQpJGRIKHBKO1lgQHp8dUZPRChOVGpVb3B4IlY6cyRjYDBOKnM/''@;'; put 'put ''Mk1UUiJ2dkpGSyYzOT0/PXw1QjhMOkhYKCE0THxYKWpJc0RLaHV1cSpLS0xNZDp4SENTNTxSeElWSHMxXSNbaUNhXXlhaXlpX0VzW3RPUD9GbnJzSDFLdSQpWE56Z31tKVJFZDJRfF15cClsTzEqMmFRe3xkclc+O2RSJSVbU01oQCFOejAkJXhlLl0lPThiaXxXUTtvVm1XYn4wMGwsc0N2JEFo''@;'; put 'put ''R29rUl98ZXROdU07byZLZCxBLGFnLE4uYTFRfiVjMT49ZFVZcWxQfntyUHROdU15M1hxQTpkVXRPeXBiaT1bbUZydTdhe1pXakQkdnc6bEpzLD0leFFPb2tkT3gxKDMjSm1yc1FMJWlVTlg8W21kPzN+W1p3clUjO3thNV4rXXI1VksyYUBaQ2JATCwvZ1BheDZEZTUoK2drQ1hlKlBhakl3YUA7''@;'; put 'put ''MC5iYXFoO19Tb157LigoPFpXV3wvYFBuQiFMUmVxO2hmL2h1TFdwVj1xamBUQktNWkNxR3tFLF9SKSkpfGJJR2peOyU8Oz5DQjIiWjRxKVUseGBmOlpdQzxQQEljZmhmIiIhLntrdntKTldKWXxHS1Q5Ly9SWl5DNTQ/Q18/cGh1MmU4XjtgaXtpTHpUZmtZUCpma2QwOjslcHtmfnVjXU0sPWds''@;'; put 'put ''JHZUd2c7Wl4vRThPQkY1UkpucXNIaTRsKUsibiZ8Tm01ZjVTMWJuayN+R09dP1puWjhAP1puWkpOMzpzaVpYPUAqeSVjY082S28pRTE/V3lhXnlVQD9ZcjZnTE1gJT46LEFCbCtweXMsNSV5Yi5yajBHYXgsK2gmbll2UXVkQFI1dyw4bzhVTlg3KE9MUnYoO2lzOSUvaDBYcSZuXzgyXXpbMHVa''@;'; put 'put ''IXw/UC5VK0ZldTBxTltJQ3kjSU05YkM+ZlU5O0RbWCU1Mn5nNE45MH1TcXgrOkNkTWFCKSRXUFUvTGAmIXEjZ1lWflQuTC9tblIraihwOCFWQEFeIU81JVNmWWBnZnV4XylXSU5YdUsicWB7eXVKPiksMT8kPnQ+MGQlXm1xLDB2UWhbSmhfODBfbTg+RihmeiEoTEk8cns6WSE1VSwqKFdnNyMw''@;'; put 'put ''MGBVfjc2KzYudmlEcGpCdk1PZkdeVWlkLmNNXmIhVzhYWGl4Y1ZHbXNpcilhfi5TdmN9WG97OVNVSiwqbkRkPVJCSU9HU053WWpxaktgbzFAcyVsIWwhYExmNjw1VkhxLzh3QGJrNmNjKDUsSlZ9MSokSTBERW5QS0w5d0piPkpEPmZUZiM7Q1o/bVU+MSYjQXchU0xOTil7UF89a0pDKSZqYS82''@;'; put 'put ''REowX0lmSEo6WjJxWmx6b2R4blc8LlplUCM+SzZ+Mnx9M15helJxLCVqPyE5OUZVP2ZLX2dZaFJGVHZQfjxzJTw7bXJtWitvVWEhcj5gMFBwKDpTYXFeOEZhN3Nlfml+bz9LcF41aVFvW2AwOldVeDtEWFA8e0Q5O2soSjssVlR5Njh4Ny9DWChMYCNNZF9kSDYpRVpNPnEuWD1fa1NGPihGeVtQ''@;'; put 'put ''eTdwbmBHeXo7LGUrcXFuYTNWV3ZNbChAX200LGFgWCFqVGhhMHYmej9TeSVoVHhgdzYuJUcrVk1KND88KCtdPFNFQ2E7cSU6aXo/WCkvL04lfixSSlg/PHB7IVU0V2x3ei9qK0ZaY0xfNVYvdWVHPzgrIWk7cDNJd0U7bEZOMSohalIxbyZnZnUzSDAsPWZbJEFxdixIZ3VmfkllKl5IRl5Ye3wp''@;'; put 'put ''XzwzJjM+MDs7bHcqM3ZtYGxqbjVKbn1mKnhJVnBwa2w1JUJRXU1ZVlNzW0UvRUdjdTRGM2QvTHlCc2l5XVRZX3Y7LGZ2a285My4pJT1OcnBtcFd7aWxTR20xdTpNdUc5N2dfNU45alhtUWFbfCN2KXVNREx7YCgxJTA5WC83S1ssW2FgYCQmXzE/OTlXJXVKVyltenNxa2ErXTJzLmJIU1N5YkNm''@;'; put 'put ''aHwkT1NDVlNbeHhjYEdxTzM8NlZmfkp7YF1QK1U8WW0lIztpbWU0R1kwZjZfcmc/JC9ZLDR3dF56InF8Q31aWG5uQns4YyNOPzk9MiY7VTF5WT5hcHpCVV0rakBSckRfXS8sJU5HQ0NYNjZdKF5DMHQ0XXQ5QnVyMk42X1ZtOSxxcjU1Ryg2bGAvV1JGJCVDQ3Y4NWJNYXVPRk1KY1NeenBpOV9Q''@;'; put 'put ''cWYqeFF9fW1ib15PcjIwUXd0YkBVJjksL3gmbyM6YFNKWi9iQGJTRG4lamFUZytpLGlQOC5XTVk+TV9CemtRcmlxeXI4SVZePFN9akxSUk1mXl5xRyoqIy8mPGhBZ2JFYDxDS1EmVmc3UChlcCxleEBjZFp2KiJRVVV2MzhHLFJAIXckZXJyJDV2Sy9+ZiJuUWZWUEwxKjYiMlVuPFQwN3VOYn5Q''@;'; put 'put ''eGhROyU+MWg3YnchLjdCQ2w0ekN8M2FSOyYmLDQqJDd7WCF8Y3BZIik4Znhrbil5YUJjKUNfXnM7cGI8KTNmRSNxQjsqTUo6YkgxX3BDZjkrXndPQEhpJT4rX1RfOE5yR01Kc05YXTNZPks4LC4qP1peYCJCUmZqKHs5ZHg7KTZfVCZtPUw0fH16ajsucU88S3x9eWlBXXd+PiZWVzFjQV1PWGhW''@;'; put 'put ''X0M9ViJ+a3dgaT4oRXhrR2B7bUs1b29pdyt0VnJ5dHVVKW9fVjVTfG4veVVoaUUkRlJGUkZSVTVZYkZSRk14IVQ3KjkwJFpAdy52RyFMKHlNcD5paWl8fU0pdEQ6dEQ3O0ljRndbQUZ2ayMlY05EL2U2JSh9XTdvL2YlUHpJdEQ6dEQ3O0ltSHNbQ2ZjfStyd0A5cy5fRzRZelBMJHIkN3xEKVEi''@;'; put 'put ''RzNCRmM4UmdTRTR1akdXSCYqQ2F9L1Y+ajZLanZSNTpAIzgkMDJPblUrM3lwcVYoRChOQSRWfWV+dFFnUVd+Q2NDW0llJUNYRV5LIVF3aVRMUjB6X2w1MVZ8UVo2KFJlVWVwcW9XJllKbmFxVClHYH0vdmZvTHNhcTVPQGBqMUVtQ2xLOkosM1tgK01JWXQ+dzovXVVjWzk9InguIUg2WTBFOjYq''@;'; put 'put ''Y3V+PEg6JkplVWZ8PF02eEVDNTR2LFgqbmNoSXAzQ3U7e19hQyxCPHY2RX11QHlyKDl2QGdwP15zXXNbZjMhWUtLOldsWl5xRiF1NXlyV2J4MEo9bXA5PjIueSpQWVtrTDhbQ3FsW0NEXyYpZkYpUEdnRDY2bz4kUlpfN3ttNUpOfFEzYkAzPih6cmc9P2ZdVCwrOkVhdk85cShOdEQuTj06ZVVb''@;'; put 'put ''Z2FvZFhOfGs+MSZmJkx+eEppcnk5NnNzO042ZllqKkV7W2JMSXk5e3VnVnpfRXNtNWdLdDNYOXtbWHkvQixWZDJYVGgvZ2JYd2FnV1F5LFM+I2h7cVI+NFAsW1F8K3R6U1VZSF40TzJoZVd1ZHJkdXUrYDdkUTZOZCx3YyV5U3JkezE7OjU3MXQvRlZYXUNNZC4mTXxqaC8mOzVJZFIoTHFeJnc5''@;'; put 'put ''UF9uaSp2MHpaTk18aFtVMXdRbVJrNE00T1NYRSlAQ3NEWmhgPH13TX5QUl1mOXlQRFAqcEc9S1QlY2dmUF86UVJVTFhXMEVwaF9OIT06NTdOZWhiZiVbOUFkeTBFWzVkaTBFWyxoP2V3QWAmSkxMXVkzbU44d0ZlckpiKWV4P3gsdEk2eFpjYERkQE9afTU5aHckajovNTY1c3haYmBEZDpRTllB''@;'; put 'put ''aml5IWRJZzJKTiRRcXRqMUkqNzUsZHFaKmY8TDl6OHxbLHVzR208fFp+QyNdJWdeayQ4QXBzJUpmZFhPKWRIXSxzSzhgUG1lJWZVY1s4Z3twUE5XY3c5XVJdWWR9fUt3O1spRFZXI3A1I1cpcHlmWnlqO2FpTlIxYGFJOUZmTCVkRGRVNmh9QllsJTZFMHdLSiwwQmpPVUZeLForWnghLCEvWjRx''@;'; put 'put ''YmxGdClmPFNUMWNnMTVJciowRyFAZGc1aDdoMWVpUDpoKmhqb3tvPzliZmwxLjNvaDp7Wk1pR3JHOXo2VX05OWZQP01bJHNbaT4yckV+dTNrIWBJNkQ8Q092RE9jdFUpcmZQUnQsbGo+I3ZILHdxOTBbXXEpPEdsPmIyNkRPJXU/L0hYVGN0N1BXZGlDSDtiTGpCOnZ1WFNsTUZ5SDFnT01OayZv''@;'; put 'put ''OVNfbntbKXMhQ19uUV9mKWUvWUxxMTZIIUdZTlZEMEUkZntHWVY9RE1BRCguX3gmSVNzRXA3NyV3IzFFPGFvZiYreHx4aygsWTNGVl1IRG9aUzJZekk9a3AwM05tIiwuWyUzZnxOTkM/ZFEwaW9gQ0Z2MHJ7cV48QFtoXlEyOUM0LEMxcCwyWHtgSUBoQytkPlVJPVk2Ujoxd2w/MyE1dVBydXY+''@;'; put 'put ''I2huVldLZUssLGYxdnxJJUEjT1o7fnJVK1FEKW0rZT1fYW1pUW5yKlpITVo6YzQ8QWZFRy9lZ2hDQHopJl55L0QrPTY3NzQ+T3M4UkBSdz9FKFYjfjVZMFpyVl4/VlV2UllNJFd1XVNAajNSL1MkVjN3d3F1fGhRcnUzdSZxT3Fzbyg+djwyJks0SHpwME1rUiY+czNvQiFKY3MkPmdNWz9dX1Ni''@;'; put 'put ''azFsVGVdfGlMKGUjTHVxQ0JWOCp0NyYkaWpQMm42JjdVK118VysjMUBrU31aJUlEXkNQNHo1byFZJUkvOEQmXWZmTGRmNGd+LDBiW10rY0NiJDA3cUN3Qk8xckU7QUBBUzFRSDYwZ2QwZ1RCaHppKFAlIVtmTXljQFhnWWdpZT8rZShkcEpSMkIxPGBEYURib2xxP2Uham1zZC9kVT8wWkVZQjFq''@;'; put 'put ''PDB8djJ6Xm12OU8pXUMjNl9EInIoOkJ1cCEiUi5OMVZSfXwjMmZnb25WcFk3REEkU3ErdV5wMzE5a3JKfjo4NUkyWUVuIiFyIVc0XlIuODU8JjtWLEZGVCpHT0dRY24lZTlwdWV4dSR9LkJsdD1KLjhxVDdZInxQeyxAdkx+Xyw9LGFvZzFHPDRpcUpdcEJpcUg4LHI8dCl6WHVye0NzZFM2Jk9V''@;'; put 'put ''OEEzOT97PD1fdCllKVh5PENgXiRxSnomYyRxaypRO2xgJXhSITtMcnhzbSRxPyokLDdPKGk9Pz1SMF0iWm86ZjJnW2tvI1J9OmU2c3A7LlloXWxrMnNSaiFtJCxwOzs0TUIleylrRCtgYSVoVU53JGU/eyI2JVNSYWImUDFgbSM1USgoL1l3YD8zeyZ4SWFIM1BXJi9Zd0A6bEpXNW1ycE05OmdP''@;'; put 'put ''TiFveStndUBYaG4kQDo/KzYpXTRWczBWdyVWZ00xNzQpRTlAM2d4JSIrOXE7PSE3YEp7N3klZGN8Xl1dVSgzaCRxdjpeUmNxS2w3dHJQW0ZFcz49dDw/U1kxfjp8V0IlcHdaJFpvczMrOV1OQT5EWXlVXnBaaC85JSVhaSRjWDMuPU96UEU4VU5PVzp6entbRWt+RmYzaihlPzBheUI/RWJ4fi8y''@;'; put 'put ''eF1hYCNJPFQyWlZAKiJ6ckw2P2g/NUV7MTsoaFM/UjY3Ql17YjI0PWRlXjIvVHhjOnRKWmVne2FvPk1ifUh+QnJpODgxY2A4cVlKMkJgNjZFZTtPYTNUcDVGVk92Lik+V08wLnV9Y11oUixsb0EhLmhsb2FIVWo/fUh6KiVjMWFwVl5LUnk8TjhXR11nW3U2ai5ZMyswVDUwd3c8T1cjLzpXVUw2''@;'; put 'put ''fHF8JUk8R1U1bT1oVF8+SCFkIlVHWFQ3ZF5LZDt7RCxuU3U/VH1UJVBTeDVoQDwsJX1lJnw6bnksfmBzQUNxfjBOSyl3Lzp7LypSc0lpY3xTaH0lL15SMTFmMCZna3s5NFNbN04zdWFsOmhTZi58dXB1Yyxsb0VpLG9IPmRgOCVNJl1gIj5oeDxbb2l+TnlgOjYqc1o9LkV5cEpZNjY8KlU6IWUo''@;'; put 'put ''JiJVczxIPlIoW25nP0x6RG1gOkh+OytHck9AbUhlOS57Myo2RENlTnV0alM1VTptZnReNEhTOGR3YnUvMGZ3TGk3OyIsc2pwaDFYMytOTX46fFY2JlB2UHpqMF9FJDdDRXkrQmNUKyM6dVsjNE1FITsoXzZRQ2ckMD05aSNNWEtpXzowTE0kX0pBPmhjRW44dGkxfiVUMSsyPiwyaGhTO0AxVGtv''@;'; put 'put ''L090TixGW1A6SHskXXA6RGFWNm08N3FePSNDYlQ1ZD43ZT13dlRZbTFPX11qR0VuTjsiZ3wkRG4kcWRnRjtidUpsSD5DdS5uXmgkJlhze192Jks4ckp7YixSOkBMcGRuRDczPUdgOz02YiI2QWk4NFBlN0UlSDtlL0BFK1lqbjhrIW0mUjYwJH06SEtVcEdSISxOUl1edTYqZmt1JnBnJkswbU5Q''@;'; put 'put ''MVNWRmNydztPM1RGbHVATkVSazdxKHJBa2hTYCkvMTk5Y15VcjNVaGZacGsqPEZ8OE5+QXFEPntgbWBGY3F+YEtPMzR3VkYzc2c2RyhFSm1gWzo4QExvaCZdfVNQO1ghdyUmQExsV11JaGdyZEU7Ti5fdFolT05GUmElVmBtSEdJclJAeyJYZGBbKFVUYW4/KXFET1t9NkdUNXk8Ni99V2E1P344''@;'; put 'put ''SVVkNkpNXTd6UEYvcj08XmEsO3tndVFuUUk/bGxhUWFUcmdMe3tJVSU+MStLZDd0elNwTk8seUJnK2ljOzZtbmtNenN9OkNZOThzXWR2OGU6Lzk1TDo6e3s2d1Z8blE8PkNYRUV4MiJZQFRXckxzOyJZezdVM0BbMkBQMXorSCU6d0x6P2dDO3ApU01aamcxJVJXZ19aQV0zYnVHU0M5RnZadVRz''@;'; put 'put ''LHozT1NgQlJIbDVuaGJrLktrJlBAa05IfmhTN0UxO09nVnBQRW97M3hucFU3NFNZeXEkfCF+X15oYjlXcHQ6YDpdWGw6cVdiJUxtJEExRXd5cHVlWldOUjBYczx0Y0Jib116ckkzcXk6NVhKND95b1JrNTcwTih3IiI9cFFMOFh+cWRCXlY/OClJNGhjXVJ6eXxFSnJ5Kl83P2t3STA0Pm09OGc4''@;'; put 'put ''enpjZ3oqbmRiI3QjdkZuODRWP3ApJXdoblE8QStTblM7I1J8RFZ1Q25XXkh7NV5AZ2drJHUjRHIlbGRoSjhIYWxNTTBITnVWOmd3UFklUSQ8KCFXSHBNdUJnez1+NylaRGI3aHdHT3Z5NTVecl1oWW4vUThCaioucEFxOUx0X0FMdFAvNDFFZld0PnVwQDBEeDFuITA/RUdhP3ovMi55Kn16WDZq''@;'; put 'put ''PF4qRmk5XTtqXm5JI15daC52aHclWz17R1dyTl96LkVdKFNBLERkPyhIeGlRVEc8Z2lraCY9NCh6QylLfH1NUGJDUW1dXndDRnN6ODlNTnAvQ3lRSGVAdltqaC50OCssal10MXx+TSNIO3pgTWRWdiE1Q2lpY1JqVXpTbFZqNjloaGgkJikrZXs3PnkrXWN8VX42aDdHKH5eX3VSInFpaXwmbiVi''@;'; put 'put ''clIyYUxpQ2UwMUhxaGUjdmZATT9FJUl5OmI2OFI+NVV8Y3dJTj1MNXUxYCFhLnJ3VT0mbUlteTkyPGhfK1ZtJmJmVnF7PyE9NV4kKHUpZTxtKUw/eUBnU1A2LltxVmgvWClaS3c3X3c9KWdDRH5NMXlQNlFtYDpTaU5lcF9fJWdtRmR7PkspalF+XSpydzAjVCY4MT93YHE2SDttTjM0Pzk5VlRJ''@;'; put 'put ''aD1AeU9aYTA5UFJBZkI8JWpxNUJJaCxyfi5EZ0k1MzpbeH0wOl5gNFk2JEUyLk0qL01+NEdkMXo5PF9tPCpzPk5ha31fMzV6WS9zLHZJMFc/Zy9dL3J0RyF3cFN6YmBGUjdgNW5reXNoQTZ8Nm5pLF1xdVlIWnp4Z3dqWD8wOXVHOE0sWGk3YEFge1JyYlVgbllHK3ZxY1N+SUw6ZVZaXnpbMytX''@;'; put 'put ''R3s9aTx2aUtHQEVIPFdeOnBKP0NAcHdJNyhXKUY5S14rPXQrK25tNlQ+LkA5PkYyb09fP3hwVnVoL1s1Y1k9dnkvUW50ayN2WlA4SWZMZjxTckg1NkQjR1Q5dUReTm8wOy9tRiU0X2xXO0FuRGRFTW98RnZrRnx6RzRXdHh0Sl1CdjZdTThmKWBKLllicGdNKiZjITE1QiRxQyxLSS4reVJsR1hr''@;'; put 'put ''cVcrU0x8fTklTjRNez5DenJNc3pMOm1Sd2J6Nkt5KT1LYH4pUTYjRGlPVytXQCw9NVZXOFQ7fnEhcnNtPnk/W1t1RnJ1OEhMc1tQbkxbdDBMJVsod1FvU2R3SV5sTSohKWkwQE8rZF5sdy43JSFvUHFpay9xMTgrWEtXYDxvYFhsSypqcT1mQ2JZVEhidl9eKCJubX1+QlY9Qyh7JDE8VD0rM017''@;'; put 'put ''KUA3PHAlZWxFOV9gPVcwOFVkWE4jWjw5Z1twSkksZ1czPW8+ciNhXlsjbVhXYkZdIkI8ITEsU159TVZDaE1yKVJ2MSkzbDUpMjxVMl5nLHx1anksO199YWN9fDB7UFNmInVwZ24lbyRDUClLfl1IcEQmLGliRUFla1BfTzpZTklBNFpbWyR5aUlVTlFaXVMlajRLPmJTS2hsck0lXV5DRlR3N29o''@;'; put 'put ''fDllTFhRWSkvJW84N2VrXThaM3J7ezZJY3ZFej14M0gxOnEkZm1JbVBsYFQ8c3QjczcmaFR3OippSHgieH1vTG4lNUh7azl7I15hMVR8UTQ5VUN0eih3TyVpakExRnNwRSZZX08iMFFeP1JPP25GN2oxUjxdPTBiamcxb2V8NTU0bD87IzppPT16ODNiQFMuKkZadFE6LHoyMHBBKDFgQnBweyJw''@;'; put 'put ''Ji89aXhiL2pNYV1OJiVfcXc8OnU4YF1WKEMmfCp6NCk8JWU+NSYpSj4/aFk3fjcjWWhTP3F1Ql9IVk9oXVd2OjYkWz9DSWl4dmc9cS8wI2ZoIyRLZXg8S0dsQjJSPE1QTG4+eWd9SkVEazs8WF0vdHd3Iyk8QW5fYmNTYlcoMHhfSXR4JChNOkdVVig+OyhdQGZ8MHl1JjhMejZqYFJlOHZuUGBx''@;'; put 'put ''cmdPTiFOK0ZsSClXfShLfmpfUi43Qy9wMnEzS1h3QF85N3Y7InIrflA5Q2J9VWpvO3UiJHBvXzpKXUkzKn5OdWohVyZGeCgzKiJTXmJ6eyVSX2ZZMlkjMywqaVcwRntZUi89RWdsYSRWXTB4c2w8ZC4vRTdueCZIMn1eaHtRZSxaO3BEfjtIMyZrRFE4dTlOTTN1UWxCVntsRDVOPkR+VWM9bHMx''@;'; put 'put ''fXQ2dENganFTL0cxbCRIMzFPZHAhV1BkKVVNNTgsQ2B4Rm9uIyJkX1AjTTdAI3pSQDh0aisjVTE2IzdVOkB7PipLaFE8JnRLTkR7a20+WCRBSm1KZGhZYSkzd2NCUy5LYTNhO0QmYkdZamVGUlVyUCUhREkxdnoxVVg4YVVWMlg1ZkIzVHYmPW0mO1QzJkdHKUdjP0RWIyp1Jj8oPD0iO0Bsemxi''@;'; put 'put ''Vil1YFtuYyRuTWtsam5UUytkTzRMTlFBc2FLS1EoW15eMVljM31URyhaXyhUfmRJRWE3YTxER1h7RkV6NV9gSDxiOSRHNUgiaE4hJWVTMSEuSXpvLFROe01DPVAjJHkmSj8iSCY0NWIwVDVFKj9aRlgoMGQhdlljcHZ4SDdrQkRmWn0oLyouNXUsUUdgPGRDcStjYTB3dTtxWl9HPCU/Sjg+IyxL''@;'; put 'put ''ZzR1P2ohaCxvekBuTC5VNjRxazNFR2RiIkRHYCtWfjg+YCl7JWoubFlfKWZiJE5nM1lseSFANzouVUZ9OF0qOSwhSzAraT9SYjFUY2NPc1p2I2omYWZTZkRkUGhCJklTYmdjJktsIj55ey9ZcC4lSX1mQVNLVHZ1eiFXZjg1Jnx2cndsIjU/ISEkLiVuKiluczVBKUFxUyMqOFZRLjo4UjlRRENS''@;'; put 'put ''YzxZVkNbR2NSZjxxfEBXOXApYVNOdC91Z1BwZTE9U2NLYn1NMjddK2lDbjp3PEAwU1p2TDJ5IV9JVl5PITt3PipFPkdfJXxeUXw5Rm5mV28ucEZNQ2dpQW1HaD9EJTVTSFNtfW8hY0lmY1JtKEhhM2d7IzltVSo2YF5TS2dwNVBscGVYbl5ZZiRoc2Ike1ZJdWNHRFs7RkFDdTlyYElIbHhqQk0s''@;'; put 'put ''LHdzOjhGNVtMNCRnRm4mPWdyazdYMlB2YHw9SCk1RW5uQENMQ3x1QDA/P2k+Jj5nWyQyKiJwbzs9MStdTnpZKCMmcTY2LD5nTmhwOShjLzNQIUJ+dyE9bUtmMiZfUEFaRF5lWy5qP1pubG1HUWNjRUd6aktrd2ssVHlJdEh5dnw7NzczNXkrV3ZPSDYoajVPc2JIdjJ6e3pyeWwxJGh5OjV0PTd8''@;'; put 'put ''RTAxb0cwX2VXJlFbMUl2YDBRejFERGQoO0VeMytwe3tNJFUrZk9bRihfLGkmSndJTS5HS0Q9QFhTOllbQEBAbSJOSlhxeiIxRDx7PyE3dmw1dkg8UCMjODhzUzp3M059YXNlfkQ3KS94LDVEc1A1LCE6P1pBVEloezk9alc9X2ZCYndpaCoyTyVhdH4sS1Q8QyhqLmlbKTZ1YGZYM0VeXi5kWU1m''@;'; put 'put ''T1MvZlR6RGRNRWxpbi89RkR+KUYiPDxPSHhlZyJZTyhNRUUwbnYoPmg4aVMlO1AzaWZTNCwjNE4kZnJ5X3dHcSlLTl9xcEU7PytEWmJuS2libXNmXmh2I1NON2N7OlRfK1ZpSUFJL1lVcm1sJVpKLC5KZmpvWHZaeGFKfjBEKCgkdmB5YCFobVE/REImYV5oS29wNURse2heIVI+JEdLTCt0U1sh''@;'; put 'put ''dXtdNH4sRmBtPVZoNy5kWj1gdE4ufEl7IztVUUlNSCFNYGNEXUNUeUF4MWNuOHRaMXpwdjlIZi9yUGB4WylMO3AlRHt3TG5HWlR3dlQ0djpTZ1MkfnYvOjQlbypmTFMrSHt8akpEOV16cVV5UEltRlBbSHg8a2xTelMkfFJbRD1TaV46eUtZKFNfUFYmNSJpRyh5fHxhWVZDNnIvWCprfVRkIXN6''@;'; put 'put ''cGNEX2FNYVs+bDV6R1I0SzAsNGI6QHMlcCF5dHh0Kis8WXM/XUNMaXclR2YmQzI8Km81WEltVTZ+XmVpYEM2WFAlLnBiYFtCdU9AIlYpXkNjTz1ENl4md1svfm5+TH5LPkclLlQreFsvMjJmNy88PWB9IiVaYlRoPEdnUihPQm8/fTZ0OWdCS3hhfkk8blZIKit8XiEyKCxBcUg+LkQyLiMsfShS''@;'; put 'put ''NVRPfj9IL281PzBkOmFwIy5eQzlnRHM7NWw1aylQOWJZMHtudHt6K3xqZCxMN3VFWVlGb1ZQOn44I3ddVHMsJk9bP2pPa1lgMFVIezFjeHJldmVabH4wPHlKfGs+SHNDezFZO0NEUU00QTgycn0jaDo7IzI4b0RpZHxWZl5LTWNoO1U5bkNrVzlkVkBUYlV5WTI9TDlvdSpAKF1NVHYueytgNik9''@;'; put 'put ''LzJiI2gua1JNPmRVK3B7b21VY1tpPiJyczU1bzgwb3siakEjSn5nTV58YntTcTxdIT0qPGEseGZ2d3E4ZnVYMVBfKWY5cmIqUkdlQ21WUHE7OEdPWUAwSnN3PWRddWVwVmgvWnNtenNuTFA3OXlRXkV1eTliYGc8SCtKJE00XmJtUVtuMCxHR2EpIW88bSRjOz1TcCQlaWEqZ008TSg9SXtgfGVy''@;'; put 'put ''RXtCQj8yTUshWjErPSJnckpYMlh3OmV7LzZ6YU4vWEA3MnpyLEsyOmVfSTB2bnRPIWVmdFVyRDx1ZWpgZHZaYE0sTXZaVzMhcXF7eTJSVyEldWouUlp6OXRdcSprbkxVYypYO2tUV3c7OncxKXg5NFQhST9LUkNuPjsjeS4zajI5cWVlPj5lYTp9YnxeSUBKIXA/OlJ1NEE1YlM7ZjZ8Xn13JERu''@;'; put 'put ''VSUsNlBlfSMrPXhQVlA7PHRndyZCVCpeUkY/fTopJmMibn16fjx7dTosNTlkcCM6L15nT0BeNnJwZDxEQ3ZdeElCMlIzWF15K3Z3TF55WCREKHlPXURIQzlMfEBzQi9MOFsoIyxmYi9UU2skNlhuQlY3SzdRUT1CR3RIR01gbU1LPiIuOVo+XzhrRjtHKmosUyVMXiMxWWMhSz1DOzc7b144WHBq''@;'; put 'put ''dSJyVzBTP0E0IiFuZnZQbEhebW9sRjspbHVBaXlUZmRmWSV1Y11ofj9nfEJgZmghTShCa0FZPDdBQStKKlJJPj5WJiIqXT0rbUc3JW45OVhnTzlpO1ohKFRkR1gmIio2VHByOGEhKnlzaipvclNCYCVPUXI0JTszOXYoOz1+fSZ8OzZbIWA7RygwSV5KTFh8WHAqPEVlZzxpbVY1X2Bfb0t7Slc3''@;'; put 'put ''elVHeUBwISxpaXEuOCxMUn1UTHRRVnZHc2JXe1JXQms8InVMdWJde0k0aVVLJnddaDU4UFtdMzRLSS5sP0hWUmQhY2dIQlUzUEh8S3dGQEV4ODgxR0w3YzJEXyV4KGVEeE5VRSw7TXEzLmRVY1tpcWYmZEJRQVdUJnE+Pjhib0Y5T0JTLiVrbllCUmpLK2JVfUk4dFlBWkthPDNdaihHIlFNc0FB''@;'; put 'put ''RlM0PmcsRmhEZ0hdXWsrK0AiQT9PbiVhMlU8OntAdyMyXkByNW8oQCQxJlRMZUFBcTpRbz9icHwpcXhPQTg4SnovI2MuZVMkWDg+L1l7KmlCXjV0OGAmeyUzZlJWOTAubjtgcSF4bDw9R2VMckYvSUd3a05lLCNDWWkzYyVqVyJDZzhYMkZCektTMl5xXUJLQmhZW0djUmI0NXFlY1NjMzRKQ1o0''@;'; put 'put ''XWYhV3lIdWwpOXUxRTJobjxzanxSNTFKY2teV2hxQj9nM2hvSXgpOkRLcmllOUBWeitEOVJaTUZYfUxHI0A/PDlkOUhhREhLNWo7TzAoKn13MEkxZzt+aHAyX21JSEskKWo1P3FLLCxYV0VuRHMpVF5uQVV3JD88SG13PHs2e2tnbywydSQ8KDREVT94XWI+ZC5+XV9MZ19JZjkzeWY2I1VmLHVF''@;'; put 'put ''YVlYVHdTRysxbnE5XWxUe1R9X0AhMm8lMjRVNEgyJG5qSmorJj9PaHYmVXk/VH0uS3RNJVhVQi5mdiFnOTsjclNSPjt8JF1kJTF3SH1tYFZeeVRRZkE8X1I6KTUrWkVXdW5AVVd1OXdvOl51X0FWRlJfPVAodDh4OW5gVGhze3MkOVRjR2xkIko+Ok5eZXR3QSRGbG1iYU0hVlsjN3A7d21ZL3Jj''@;'; put 'put ''TFAuVTcmdVhXO21AcHBGUSt6eG9fJmNbSXx4eGJdaGY/ZTBgTFtMW3tsYjImaSEwQjJoS01hVGx+ITdwTlNQV3QpW15PZ3x3dF85SG97PShtUWRKTHJhaDw7WXxmc2tiTSFmSCw+MitrfHBzNnJ2QjFCJSgvIlVyY3gqJVhGR2lkPnYrPF1ta0BJcDBLO0tOTWpqSWt7SzA+NiI7dT0zNEBta2Z+''@;'; put 'put ''XXUjV3Q+Qm9BOz5jJnVRckwuTTNgWk4wTkFFe1c0NE1IIVc0VTB2XkFudSxOVGVQU0tpc1VkUUA1SiolV115VGw6XT4vbTV5fUVXPDE6ZUt8RUsrQmpAKntGVXREM0w/NCk6ZS40QH5OQFkrenxSW2IsXipMRmFBW1lEXyprPDUrS2BidDxjKk5xL2wjZXF+NV1qYDAhW0FzXnphbzViXTQ7azs6''@;'; put 'put ''QXAuUUd1XzBEeTlfOiZOOFdbc2psS3FPS1BUWTY4e109QSk5SUJWWTB4MGVubVg5MGUoMiVLPmR9eDp6dX41JUI+Qm93Kk9LYUg+bShGcng1SENhUX4vVS9LajxSW2pKUUhNbkJseFo9R1VVRnlIc14hemU0VHNzKzExUERmQiZkez5sVyNaLj0oX15pa25RVyxZPCE8TGxbKzxQfEAmcCoycDdG''@;'; put 'put ''WXtrWTAiViQvP11XVjhZWT0pcyF0VTtUT2BJfXpoYkBANVRNbiYvMCJdZ2twJDhxd0R3aUd9I05vb09MYTxRakdVOyxbV1FQeGJIXWBsUE5dcyZ0aiohantFZ2EuP2J4JnRqYm9QflBXQklPVyk/XV1nUEF1KTtCJmwqNnZJeXErX0JCe2dVTmBaYj9nL31QaEJqcVVtRG8sRG5xZixOcWlyeDsq''@;'; put 'put ''NEFRQEpuVyFMKksjSy5FcTQ3eTI6Kll5LkMzTHAoL0BmYVtgSmtxWm8/YUQhMkNEe0NaPF1RRnQ2eXE9QCE8eU45UEddNnBESjlyPD1oMSkyUyU4SEA2YExHMmpuIltPVWk3QnllMUxsfG0ueWYwTXEvdDg7LiI4Qnk9Mi9ddDhWcWhPMTtMSTpHMj5BVVVzRDwsSl5oSUhaTE9yc3w3RTkwX2RN''@;'; put 'put ''d3RDOEp9TEJLPmI/XTxeZFF4bil3TFVDY3hsYGI4X1VIXWxzMkdEey5kUUh0Nl1kR09QNElVKS9UMlQiNjg9TmhgITdnX30zMjJCY0AvcT1uRUdQellbOjxJTSEyRFVHQDM7PzNKfl5EJFpyc3ZkdVBjZXtPRVlPIn5WR3IraVYlOShLVykuejs1ODg9SnolVSUzRU1VbmV0QVR9JT1Ad3EseXFI''@;'; put 'put ''WWRubm1GdDtBKm02VUpRMTdkIzJZW0x+Z1owKXhkKEQsbk9LPmh2cXRGUnllRFtUfSY4WTwyREV6OS9xazdCeVlyT1JFKSw4Uj4mTzA4I1lBfnljI1k+ciZNJndBMzFdYD1zKWcoYSksWHxRMDF3UHFJInR+VW1vXlB4KkhNN3JbOSpdcDhwPm86MjBZeXBgVjFFfkAuMklBcnFkMHlYMWRpSmlw''@;'; put 'put ''OjFNL1QzQng1XntnVFtETEBjPyZfIztqZmpkbmhUUlRINCZuMHI9fTx7VmBYazd9cVpTIz5AKVdkXTRnNWNob3BFa0h8a19GInI+R0UsYn1MJCRrRzl7I0Q4Pj1kITZCPCZ4bGc1b2xWSmxkYDskNCs1bzRNNUl+V2AkOlZxWk45QiUmSiQ3UHpQd3RDb2gkYFEpNjtxaFtjVW5eQ0dJO11qb3lC''@;'; put 'put ''VXNvRDNENilaNmddYE5wfXkoN0BgRCMyQjJhRmRGfCUsQ0pQd0NKNHsiRjd6UTxzOCw4L3VxWD0mXjc3JklpVzNsXitjMmokKnZyRVNxVCtSbVNbX0BwRnkjMVVRWFFrIzpZKFgkMVVUITg7PDJjbiR8bTp3dSV2cUhffGRRdDR5P1JFN3M0VEFgeEhUZz5NK0Y4ZlFJVCJAPldlI0xSOXpNaHJj''@;'; put 'put ''KFpraF46UkZKJDcrMm5GYE9vdXxZS3AsPnksODcxVSR2VTFnXU00YU1ZQmAqMncrPXk4MmYqO0Z+PGIkdkk4S3M9JVdnY1J0O0hIX0NrfmE8KlY6ZzUwbzJlWF9NbVJ4XTFBcnI5KlJeUGI3cns3QiNuKTdnZyFURHx6JH19Pn5afipYRm55SkFldmJpakFCPVs8d1Q5R0hVJShZeiJTO2xfMzFQ''@;'; put 'put ''I0pyaiYmcE9RLDU7XzhJODUyXTc8aWVBd11SLDYvIm0rU0Rkcys+WDo7e0MhSW53d1Q2X3lncGQzTnViTz5ve34uekk6YigocHN2Qip2NDdJQ0VuPT05JT1FMyZLQTU1XkBhYXNPZ3Jte2Z0fGc4VTZuejthP0BIWyx6anJ4OypTJkUsJWVAXSZZPyk9UTE7bW50OTg1Sl5oRm9GKkp+RShXKzxv''@;'; put 'put ''TyxpLiskXUUlaC53PWBGKCleS2ZyWTl1fm9jXyMpLCQia0pkQTA0NWcrcllCU0B1a148MGJgLEdDRGs9LnslZUIiKz84ciVOQH0jcj9UJWpuVnM1YyhBcy91bmA2b08vRlN0fF4/UyNePnNwZHk2VTFDKnZdcj5PZWdWYiU9P1VXP3BPT3F9fj14YD5UQCRBQX5VdWlUQlM6K30lP2VlS3Jodyt+''@;'; put 'put ''Uk4lV2VxVXYkI2JqSD1NOjVYMlghcl0rPGJJLCpdTGhMcDM6KnojSlomIUp7NyEjY0hUfEVtfUVTT1lyNGlQKjJmc2VncVlCRTllVk1XPXJlWS5bXml4QWMlU1g9O2RoZmlXV1Mha14leDc5aiZVMlVaPDthQ2d4ZT4hLzBMNldbQ1VCKkkhSTQmZzUxXyR5K05EOShfbSZfKlQ7ajJLOGtCbjpm''@;'; put 'put ''dFVmcVJJcTVoNlRwOTA1SW5PPnNrSWFHbl02PiZ1L21xYjljOT5SSllHO0dheFlOa2cjUG5WZVNUZVA8YlhlTlBoYTs9QlF8a3FiQmVmLDMvKHpYNnI7fEJHI2tdeGlbJW0kZGVWOW1wPEc7VDgwXngiamZPaXh2SzFoJDJwezkoXnh1fCModWkrQyRiJEpgbSsvOns+K3ZZMGIvZW9naF5NezxZ''@;'; put 'put ''Z35MQ2RZSWhzM1QuOTN0LGJfVmcibiw2OXFSYnFyTjZsViJ1dlliPnJlWjAscTZRZlBZYDJ0dTlWczcmLzc0Kj1EXX16e0c8PFE8ZUpbYiVaJTFUbDttQ0VIOlRNMmVWQj5rVWFEWGcoOzhTO1smPStHOSVjTmtnKSNkcDVhRGZVK0E+Rmc5JWNOcWtHQG8zR3BeIS9tImA3JjJdSmV1azR4QzBn''@;'; put 'put ''M2kjYClIMll6Kl9lbFc0anBfZzhHJW80ITB9ZHxmRFNoTy97aVRdR2RWfUZbMCZoU1oia3NwWXYzPEc+eH1uVSUxT19oYCErdkFfI3xaWiFWUmlfRU52RSsvN1t1ISp2WklMIyM+YHwqRnx4b142cURBaDZFR0lZVUdyTiZ5ISxNfFZ8NE4pbHhvaiMxQmt4YTdqPGYxUEhTPG5jJWoud0g7fDxe''@;'; put 'put ''b1dXdUh1XyhCbzxzVUUxNjVRRUl+cShGZSkjOEs+NGUuWT03KHg8T3VYfUh9UFolO2NhWllAJj8yKWZWKjNIMUohQGFYRzo3YkpkbzRAVlhWSk1RTHIpRFk4bUNaeF1OQX1DXnlidiNRTip3czcjSko2aTJ9c0ZsXk4kZTYlcnoiSyV8MUtEZzwkWXl1cXYsMkYrUW9WQ01GV01gPF1mc1QsVTd5''@;'; put 'put ''VTg3WCxCQCo0LDVeMTpnYHtuJHFORH01RHYkNHljZFtsOSkvN2Y3MSN+ZG43Sy8pcm9DUXlbSUdfby5+QmxDYltNKXlDcC9OaHxtOHRCb0lkT3AkOUYsdytxIiVQNXtXY2V9OFE9UDgxbyw5PXxheW81JkZYbFFrNVVhcDA5ZFFYOG8zWFFFNV9pYzFZYThEIUV5dFgrVzpHWUUhOkMyfFB7ZGgw''@;'; put 'put ''ZClgJU8wQHU5WSM4W2JhbDN0RVBXVGE3ZGd8WWM4Zy5oWVFmZU1WR1RMVlssfWBEdT8vYDJvR0I/KFtYSS45Zy9Ddm5zRi43KCk3WjYhRypDKj4+LEkhSlZFbWduMClONn0iTEZHQlJ2SkhLOXxkUUZSb2ZBUWFSRXNkdVFVWVo1MkJ1eXNFfTwjQExqcDM1b0hFXTxrU2BZb1BGKmtBQUFBd0FG''@;'; put 'put ''QT5XTEM5RipNUmZeTFdwOiVuNHYoZ1pQYUYkfU9TSFV3dk8+aWdFQ3RsQkFBQUFBQUFBdihaSnYuYzBzfEBwRUZiOjs5REpSQ0J5TWMyU11DIWt8JFtydk1OMXE8eXl1fj4mJGx3ejtWPiJmMnVCamAzdV5VKyEyaHFCUy9jPiU5IVJCdGlwa3VGJUAoYlZOLys3UiQ0QUJUbWdyTUwlOHlMUFso''@;'; put 'put ''V1o0ZlhQbD9kbDUmXVlbQzthIlt7XUkoWXdbM2o2KHBISjU8MVovbkhHei4xNFB6eiF9PXczVSZpYV41RTA2T11JK3M4L2l1Ok5oISo7eGpDfF84KlEuJFdUaSVLYFBMazRvSlMjX0guJiZsPzIlbk5YUj1iTyRnSSQqSkglVlJeMSNlJC9ZTX5SNnVzTlIwYDBGQkw5QldPT0dPTkoyZltiPlUz''@;'; put 'put ''KUxrQCNMMGwudytXOXs+MnM8TjR8ekchdG52Plg0VSRsSFQ5SCFrelpESnIsOWx0aioscX4vaW0oLyVaNXxFZkJpcFZveSYrIS5+ai9wM1dUY1BfMFpybj9HJG5WRTxIQ3RCWTRWTUFJRTx6dWgsZHxHei9jM1pkOn4rXWQoPnBOXSo7Vip9fXpmSjRmNFZvK3VxPmx9cXY8fDZuUFJ2S2kzMSVL''@;'; put 'put ''OVl6L353Q3leeyEzP1FjW1pvek8iLDAwPVRFYiVAKjhfeyp6dmtpQUVUYV8oQkNnN3N0ckBIOVNNdVN1TnFzb1F0UTdxLihxQjBkW2VrazR7O1klS2dfXj05bU0hWTJTX2F3MncueTpFdVszVF9HcWpAOmd3ZUs4QUM6Qm9uaCJUfEtudyhedC8pe1ZnNDcqe3UwV01DNzN+JmAlUXo0NGlQLiFP''@;'; put 'put ''M08+LEtkZn4+UFZlTUpXdnlqSDlAKDMlamk3Z3R+bGhwMV5RUU86Oy5XYG5ecDB1aDg8OFEqdmNzKEdwTi42L1hxbS5mKldRVUl+ZSp+aElad2Y/Nmw0NDdwMk0rITc0YEJ5V09UP1RtJC46e1Urc3N4WGBMPlFHd1tiLEJeX15RPV17L0ZLK1ZLdilQNCZsYyk+KjpiUyR3bV9jRlVsK3VMdTFD''@;'; put 'put ''e2wsLkVIVUV2W1tsKlBQXnxbfkRYfWAhZDUpMmtbRWdvNmUwWVVDcixSWXgjVl5wbCtjYkdrVWhxJV5UamBZSEReLiguejpILD82R1pSeFRqQ1lGLFREK0p2QzV2VWYuU1RkbDomOnZCTjk3UF9MdlJDU15oVWtfOiRqaHNdJXRCTFdveFFiUDROWjAwdHg8ODg/LEBTR01zaT51JWlQdmwhRHRV''@;'; put 'put ''IVRgdjR1Yj5DMmskVHg6bWVwXjZVM2BeWDhhTlJGY35ac1ZfVyV+P2hCQTFNSzBMKm9vajQxVG1ORW5xNTZTYXhOUWxPM3srUTxZXShNfFI8PlkwcmJYSVdHU0E+NEZXWEorc2xdVlcpRHJme0csOixsWXdVMXFAW0RHSmVnQ0creXVfSnFkZXQsP08mQHN0UkNGUyx2KHduenpEYzRhQ3dkR0pM''@;'; put 'put ''QiIrVjhdPVd2R2JZeWkrMHpBZ1FpWV9ITnpBNytJR3FbNk9UUHxIK05oPig4OTo0fkF2N0xNdSRuV31GSUx8LlghfnpxYltqa0t5RUFXN1thU2omQUlFK1FSNDEsSF80Oyk8ZTMsQEBiOWhfey8uTlh0ZTxkSWV1Qz4qPCNsfkN7aDNtKG9FckBnalkqWlRkUjV3VzcuWUdNPiNEUXhhXj45aGY0''@;'; put 'put ''QnF9XXYvYW5CcVAuNVlxcEdHTS5Oey5lM19dcElJWz94bTsuJmo0UT8/KXtpWyJkIVJNXXJ4cmdZeGo7K2xzZi82djtQNUxtZWs5PTl9Ul1qYmhQSVczY1Z6U18peCZiUlAxOUUwUVV7N21vRH59NU8sJipQfWpoOC9xIlA0I2ljRUdpOCwjTFtHOVl4b35AaCNdUjY0YmxKRGY2USElcCgsfCUj''@;'; put 'put ''OVR9QmdCby57XjtTYUZ1amcka2liaDJrWm5JMX0selZpOllpImZyPlBqTjleLGoqLzhJZ0N2PyFgbG0qb0I8bVlPeCJFWTU/TnZpRW9US2pSfi5JTyt4JjtKLHo7enFgK007Jnh2a1V5RHRvdTE4bXg9ZDtpc3Q4YSNYXTlwL3o6PkJaaHYwLzJHZztWV0t5bWt2ZnksRSw5OmdNfTV7cVpGXX4o''@;'; put 'put ''MUYuMkBqVEtiWGBCN30oP3U+UCFGYmBwO34/fmlEeCVjJjlmdFh+MG5ENXorXmhBS3ZRQnZ6KVBgOEp4I04yc2ZeMVhLYC5PKS9mXUB1MGQ3dT4mWzFDUWcyYDFeb2xpWTJWS0R2N0dGKk9LL0lfIlo/OkVIRD8/ajBSU05ufSUveUtNcWUjWzZ8KyRjIXI4PmxrfXFxa0JqJldZdkVnPDt8dn1X''@;'; put 'put ''Ljg1VkRYQzpaRVhUZ2NYdiFNKTtbMl5ZPX1fWzk3LkBXT1tBQDBwK1F6MC9WbCRyOUFkRiY+NGdlOG9mUWIpakgiUT8kM0hoSzhCK1hsfSgvOyFBOm5kVVViZylaTSxkW2s3RzgjaEQqVltaUn4yOyojP2wjdCVfUnNzI3JLRk5bIW5HMCsycj9dInJTNGdmVl8pJjhHNz0yZnMueHlFY24waTIr''@;'; put 'put ''VElFaSRCdTN9dHV9WSZUNm1IdVE0fW05TiUqb2Mib2tQdyhRV2U1TnNNK210I3BIN2E5M2RyVDpNTXVqckI5XkpoZHc5SlhALF4oOUJwMSwpXWp+eFRiKihlYms+LkR6Sml2Y19uQkxTTyl5Pig2eHhvc1FZWG9RfUtPK0MkfSpIKWdGbCpuOlR+WDxmcmQ+PSpaSzcwYGxUKmJfNl5kOVhTUGJg''@;'; put 'put ''KT9yLDs2ODgsMH0zeGlfTGpHP2JZcVhUNERHL2h5aHl8LCMzdToqaS88KHtFYyVzdWxrIWJmRDYvLGlafjQwWmtBN3E7WC5zLC9yWmlUS3N2elRjKHJedjxGWyE2JUgocnduPGZBfX1yKlJCdTgmZEJYcF9DSEJRU31Bfm9GVF9ebXVAVWl+QVdIenNTZXxROVtoWGdSQSxCbyw7bWxiZj1LdCgu''@;'; put 'put ''YDokbE4hVEErXTRqNCRqXTZNVVAhczZNXVZSLlNOPDxffihNRitnY28xLkF6eXI5PWVoYmh8YTNfPUZwP0pLfnciZCUpPCpraX1nUGxgXkVGUkVMJnkwXjw4dl5AZmlvRVNjUm1yM1MhN0MvQFB1anprTms7fV44M2N3PS93d3RQQ2FxclYsSTVfRUIlKTRbcGw7ak9PV24obHhaOVtsR1IyPHNG''@;'; put 'put ''ZipVXlpKbio7RUheWnAzTyJnNDxWeXwmLi93LE5dbiV5QEp8cCM7KzE3WmxGb2A5ZTlgajk4PDxkZCQvLDFCbkVsXVdgVEp4UkYmSCY3bz83Xk1sPUpSO2AlK1Q1fTEoKCRBO2t+bj8oVm5TMDB0Jl8oOChMZEJBIUFUQ10lZ0J8KExKfW9jL2YhNnEocVpwRS5NYS5sSE4kfGcqb1JvK2t0QElx''@;'; put 'put ''PEhPfSVER2c7NUFAQmBkP1pCIyJhaXsieTc8SzdiV3QxYk8iVUBublJQQjc0aGpMZldSIk9xZmhFcSkrd0khd0Q5KV1EIX42K05yeChjLk8hWUQ2MV1RS2wjLzE/ZjQ8Sm5GUWdCUFFiJUljN0QjJC42RHJVLyREKHgqRC4oV2AmMHhoTGZkVj1XR30oXnM3KVlZVGsuNnU2LH5vIWFAYzMlaClf''@;'; put 'put ''NUBIJUowb2REelIuW2pHVEsmZCtwfjNEXkxsaiQvXTwxRixhOTFNWjBSbHoofVkrZzN9MWhhY1ZoLFVhKjsven4wR29BaC5+aHIqcnt7VS5yVVJSZ2dBTWpVYF0kWFVka2M1PSs5UEVmaW5CZXtJXkpVX2lmZiZhT2NIPDUvJCpOcWtGOEcjSndjRkxpIytVfl4oMWRdTlsyI0VtNFNrUT0wS115''@;'; put 'put ''KDs2Iz1Ian0lV2sxUWZdfSJYcltJViMueG5gZXNiZ2svQipLVkx3Mzd5Q1gvOmRhTDg/QGltTyVTVUpfcjxWYjJNYHQzVVFTQlEzcFR1SytGLiFqX0slNGM0ckg4fl5fUCYmRTNJdSFGM3MqfT1LaEBlLFFnTjhTTjpXLD5dVixNSGpgI3toc0BtWTlrTjF0Q3RgWFlhcit1Und2X2g2MGFuREZd''@;'; put 'put ''dWhNKGYxcmNLUjB2On4jd2ZIZmRie2gyTT9TOilsfXh2UEZtZEsmRyQ6K0hsWW1RZUJQNk9LYks6Pm5gRz1bKGZeX0hLP2YpbHlxUW5bTjBsZkwsI2I0dTo9d0MoN0xLYlhSNTVUZ2FDdWtTdH16X155MEpWPEUibExKfHpyJkMpWFh+aHg1RV5tWEM8W2tBZyx3ZTxbS1R0N24jaFU2YjQuMDhP''@;'; put 'put ''aCJNXVFdYHcwYjBSbT9aK1d8YkZ7Ul49aGUhTj9fbUk5QE0vQ3ZQTlYlRElMSiomXl99SEZecjQxVX0wVj1obnVwVDRoWiF4ck9IK3FOLiYpNGxZK2dpanUzV0JsKXFRTD4/UFFuflZ7QjQ6SS4qempOSGArZHhsLHgxKFRHdlk+PyUmaCxpWUZLPlAjZy9TS24oJGQkKzcpcjIyOHwrS2UvRWZT''@;'; put 'put ''MlkjflIvJWt7W25xZmMkTl1nT2NsPVdOLixePTY+SlU7Y11+RGUkN2UxQXdnIjNnRXAvKSoxZlFyQGFlTlJffiooeCR5bDd4c2B4KV13N0QmZS5MZXphLkw8WFtHNX5CJWNWQDB3XT4hfUcwbS8+XXNSaHw+NG1zKSZjJX5OYTtpUiY2WCZXdFNnMG03fiYyMEl3YC9wSkQoUUxCOjJORmtueCtU''@;'; put 'put ''V05Fd2JMXUNNbFM7SVYvOjt6TG4oSyQ6fSlFbD1XUU1ybjVqVFVbWFl5MHZdZilpSCY8PyY7WUE2RXQsWyQ5XVgqQnUqemR2R09pdSZAfWFATkgqdk59emVDNG5yOyhwdFk6eUFBMV1mNFFGbkVibGRGfnA7QUlEeng9aXBuWUU4e3N4bXxpUkRpTWZwTmpZU2QsVik8T3xoViVHK2JAO1EhME8r''@;'; put 'put ''UU5RYjxLYk55Oip8RTpZQGo5L0pAd1RFVWh9ZXtxZWRBdSUjfEVCPWBJKDRuPEJyPk9OQ2FiWEdsXSpAWzJtLEVkP3QxQ3xVcmJQb3F0MWR7RntBLHNDZkAzaT4pLzMhUGdqd2ZwZXssIX4yVF89QX5CQVclblU+fTVoaHUjPVY+KTp5LjFjdnFGVDxKRlR7MnJ9UGcucUFiQzVLZUxGNGc8biU0''@;'; put 'put ''Q31scWEzd0MjPHttejlEeyRRR1tvV0RaR1BGa2dbfHJCXXF7PUBfak1ldU00XyU8KkZVIn1tS08kdE9nJjQ7cWJhTXdvRFFyYl89bXBkRzAuWUA3b2wyNnthUlZgfn5UODhWcmgpM044X0pqMnJtQmIwbV4xYC5ESH5KS3ZEcGhJQEtoV316IiVUbSJJaUMrNUwrbHlzdEpoJEpMUDYpcHw7UiF0''@;'; put 'put ''KG96ODk7Mk80QGR9W3wxSmtpeWNaM1U6JElIYkRtMTcrVGFjJVVLJnxRdkRzaTtkbFM5SWg8IXhIeTxVeDFuWXVYa0JEITNOWl4sWyxAVFd5I3hTPCs2fWhwQWJhI3VUZUM4TC40ITYmckY7KXlPcT1CXkIpV1cjb0BoU3RKaSk8VksyZkV2dEp8eV8sMGJRYXBrZUA9PGI/ODQqeVhhZWtJWkRF''@;'; put 'put ''JV16SzVAbGZoVldKPjU9e197KXAoXlV4d2ZEeyxCV0A2KlN9Kl40Sj5CKisvPjZPRSkhcCVuanJSaEJsRD9wV0REX28+eDJTLHc8Y3IveDN4Uz4uJF1GRSY4XyQ2ZStDfkBLLG1WNTB6Ij1ENlszWz96I3FGc2xXfTVzdFcoPDFvKjh0JXVXb1lVfD4uejVYXiJkPit6bUhWZ15FMHtsL10ibUMz''@;'; put 'put ''WnJhKD1JKChKSylaajttXX5sQUdkVW82bCNhKXc1PmtVJEJyb0hFIzgjU2AidCxWPiI+RCFqJVJ5b2c0OiI+KWtAa2Y7R3NkZE05O35jQTt2Wi82TEVQMk5YOUVKWE5rN1dYLEo8azoxVEY9XVg2JDdscEJXS0BbPm9FI1VafHFOdCk9N3YqcHd2aUFPIiw8QlFQajJwTTA7PHhran5JTzB4VWQm''@;'; put 'put ''Q3ZGfS5BUE1nQXgxPFVse00xWFBRVSlMUk8/RTZjeHNuel5yRTklP09KPFJiInBDZjxKWSQjUlNhTVhgLmNUMCYhRTt2WGF0MSU0fClMP35eM3ZvVm1EdUJsZ1V4dkQyQSs4TTlee0RlS3c6cXI3ekM7JGxoOWN+cjNhPXFLKCIyamNqMHlyfTNHZm5TfmR9aWRabXskKk1qMHRKIzlaLHdyTFIm''@;'; put 'put ''T18ieCtYN2o4d01LeHM1R0ldclt8TzZhfiovSHxNVXZYa0BrM2tJJTpjMiE+Qz9AcjRBJS41UF8/N3VxMURBdHZxenhVZXhuaDVPO0ovKyRPKTd+Si9xJl08JjUwXkFnMC9xZi43T19oNE5vI34jPEhLLmt2YmFMJkgpIXRrPSRhTjFPKXdFQFgpT09qcGIyU0BUP2hUK25dbVZnPTB6c35+Ynt3''@;'; put 'put ''aCp1Q0o5PWpQQ189NH1dTmdmem5RVjJRaWJ2RSQyS045TEUka1lJdXciNkV3enF5NWZIfV9JKmJbdio9KSVWNkhaa2t+QiZXbjkqS3ZtSHgjIX1NZm8pbUV1UWlLTmNeK3NeaSx5TE06ckNBVnFTaGljUTshcUk4WHErXnhFRHdYMUllbTp9UHVOLG8lX3c5TCZhVFNmfWBOOGdVKUApazxLJDtH''@;'; put 'put ''OEBGWzEuXUgwUUNJKjB0ckBXJTNqK0p8ZDY7WkcoSTZdcHpbaH1xNFQxYS5UWSlSaDoqN1JoRkNkWS8paEVjK30mb2Z4MUkjfVAiQX0rKjR9YlorOWglSH0pLEdBc0dLZHFpYGVZb0tBVTIhYSoqJFQiSXNAUUhxQ0NxJWpeMyU4PEFxWStRVD42fnM0d006YVVkUnV+M2U0d1VFR2tCLHo/OmQ+''@;'; put 'put ''WlYwLy4lUkRIJiV0b1UvOmx5d1ZAM29DZ2g4bjBTdWBtcmFCeE1VQnJKaEFnIj1zNmR3anVaI2tXW3NrRTxuankhWntlRWByRyJRNH4xWypGZzRLNnJkVWN1MTR2eDJmSDdyNnUkU2xWe0QreSNvfmsxRn5RJmJyTSVnMk8hZEk5L30+L1RtbmA/TXRVNC5LXz9FOlEkMFtoIjpKZ1N6PU9TKSNF''@;'; put 'put ''PndXL29OIU1+flE/USNXNGZgND1XXytnWjA9SSptR1AxK3Y7b0U6c1UxN1tDXUc4Zz43am5jcDg+Im4+ZFJPZSp3fkUqWmRTdGJLZX1dITFYNF85UHteXypRaWdUY19rInt+fWMrfENeZjF2TDx8SXdZI0xsTC8/VipLaWx1I0tZSnY6dnAqQz02OVFiWiZNJFVYWD4sU101KXFafkc1els0blg7''@;'; put 'put ''ZGd9Lzs2JWx5ME0sb0owZ1lOe1VtVz9RezU0fTQsW1s+ZnckR01AMWtXTFhYYSs5ZityIWczTE88VDNFbWxjR09RbEZMI2JDL2FORTMhS3hsaT5iO1ZZNGJNLmkoPUklOUlBUS52RnIwVX5IN1U8TyJufSUlP35NSFd9YWspUCk3ZCJLX0FMS1RwKzF8YiU8MHZlbDxNL2Z5MCxlZjNAaE14TTUj''@;'; put 'put ''IktEazNoPE5yPVNgcks/T1JSXXNfalFVUEJNLC4xOCRxTH5gOFUqXj5lSGRRZWRFZC9HS0Y5JD0waHh0NCZvc2xGXyk+TzZaRTlybkhbV09yRn45cClRcWlRIX11O09MQ3VmKGN6bEhWeF9ZSjxGX25aLEZ0X2ZPWSIlSVFjM3A8T2goI25eUEhFSGF9Xk46QHJEQjBETn1bKip+Xi92UVI3SXos''@;'; put 'put ''Wj8xKS40e2clZ3VOdk9JcWtPWGMyREJiQi9COXE4eT8qMSVbdC5+Z30iJHohSmglek5bfTQ6P3JbeXg3d1Y9O3xybGM/RFJWbUcpI3QjMX03RCZsZjxOTHUxNkZMUXB2OERkfC5lInZLQnBTQ1cwKkg8WTNLZnk9bF8/ZjYiJDQoWklyaiNZWzM5Nm18Wno+NS9fV0g9SzkyfixNc1R0PVZufSQ3''@;'; put 'put ''K3N0Mn5pX3c+RFteOT5nZGxsWyVSPnk0SypzbUEwZ2JlOC90Om9aJXR1RlhbT1BCVG81MXtQUC5NSW0wWWE9KXVwdXFyPCUweklOKnRoVGsiZX4vfXplcil+UD1Qcj1JNjw8Wzp8ekNGIyF8SjEyMUdmTjs3XjEoKnZrSUAsc0J9dUY8e2x7bjJ1aUdoJXhzYHtYNEFJPXhpU1ssckxmaF4wR004''@;'; put 'put ''SjQvJi9MXi9jRiROI3ghcW5NITshRS9HRXZYOGA2L2pWJVFnMX46Vm1NQ2lLSko1eVMmWV1DWylLSXM0RiNpciV9W2EyR2s2ak1rW2xmYjBoQHJiWDh3P30/Uz9OL2c0XjdUeGR2UitAKHB2ZyJrVzdbPCxOd0AmZklfMW9+ezs5MTN1d0ElLjVZPGpWQEgsOGtXJFZOI3hXayt0a111QjlTRFY5''@;'; put 'put ''UyNBTF16KH5WVWtiPnI7bE9JRCFRYEF6PTY2MDg+eUZXRTsiYkM+aVF0TT9MNGptYyhyKTZdQk5AUnh7IztPIi47b1daKSVUPDJNMDtGRkRWMzVoMTZSZTtCUl8zOzcjWHVpPl9EUkN1IS9GTEh7a1gsYEVEdyVjJWMzUzM8ZVlVa0wqblZPK3JrVFAvU0hIfSZyd3RtQzcwTE9bcmVpVHlxSTBa''@;'; put 'put ''WzlHXnk7RGZlJFMiZnBDUntNV0dCfDo9M3p4N1ZrQ2NeayJCSV1aUiNSYEpCZGdZKlgqT0wickUlbDpoVztKKi53eHtDbyMmZjZXb2xVe10lZmpFfDc6RU4zbyNWNm5vY3RkKiNzUG5kVHo0KnsrKGxnTVJxfFp5WElvNT8jaVRMIUtCc0NfZWRiLj9OYVtFYnoyckdFNnA0aWdmUmZkMXlpTygp''@;'; put 'put ''MTNMP0Q3QXNHI0d1bkJpQk1VYSRpMjI/eVtmQmFbRlcuK2A+O086VClRbUtWWnJJRlZjZD8mWnNoPT4jI0tGISRQZXt4dmc9fjklN199XTEwdTBieWtbKH5oN3EudlhCPGhMSzZwWVR6TW1CfVliXVZJWm18ZFdAPyZxTkQ5NT5hMHg3Lmp3ZF1gNjlraENpOXVER1t2NGh0RUZHUFdqKnshWllR''@;'; put 'put ''ZCZpQUxdL190QkI7MDdsXXcoNyhrVWYocihsNmZoc2Y1OnlrRmVjSEZnO0dWMX5fNUxlUUA8fThzQVovNGBSNjB5bF1nRXJAbWNudEcqIWd4fFhVXy5TMVtMZFJIRzAvQHliKkk8XUpfK0l8JmpoV2pgeDs+OkxsZy5VZEV9VTZtXWhoTGA/d25kdEw8T2RXM1pVYW4xZH00TXtPVlNlOz1raTgi''@;'; put 'put ''bSNeYyVYXjIzNiR0Z0tDeixwdyxhVTAmW0V3NHl2I0MkMCNlJV1wPVAjOkBkeSFvbnp9Pz8lNDxmS2ozNFR2al1lL0BoUmczXUY2PXIjX11MNjxAWGJbRyw/VzMlc0tnZVF3cCVbOkhyKChteDBlJVVgNHoyZVtYWWI7L1lPY3tsZ0lxQ18ubGxTPkpgIk5eUkEvXWJ6ZzthMHEzb3AxSTIjfGs8''@;'; put 'put ''TUc+PSlpJCR5PS9RcW5JJm9fISUmTEh4T0NPUFsrWT1sKG1FRnpeeGclM28iJXA9eHl2JHlJJElNX2ZJTW15V083enxRP1RkJVNqQFNqe2U9fEhnc0dZXm55UDd7eHo6SGkvLH1mU0I+XlFvam8sNlgoYFROcVlBRW86VXhhSzpxUS82WCpfUVA/T0k/OU5KJWRzcW11TiVxVkRfMk1AKUtsI2xa''@;'; put 'put ''eFFnfU45X3s8RkYpYToiYTlYTzE2SWlZWkZnJXBHMyszO1AvIVcufFZhdXxfMkg6PEhRUFlndDVaQ3hTZFgoRGJ8XXZYWlErXXlBfUVpIzJITT5AMkhjSVswSV9AL3xFVWRAJXpDfHpKfncuUCkmXXFxd1QzZHNPYXNwM0JAYiZ2ZCpfWH1HTCVmIjA6eSk3bStFbm9eNHFxbzlqSER7b147enss''@;'; put 'put ''TV5lMShBKSNbdkAuI08rWEhtMmVOR2tMUSxlISZfblE6MGFPdD11dUV+TTVHS3dnN15KNF84U0pSTWlTb1JXPT8ueFkmYnxrU28lSVFiMUpYXipvOUc+QkFUajBHJmEpTFdxcUkwSDM6Iz1zVDFqRG89QGd2JWNwQWtSXV1fXzZXdWRZJXJtalg7cEZ6eyFqLio4bGx1ez1eQGtvUkc/I1pBOj8m''@;'; put 'put ''R1dVfEVnWVtRdzV6YFFtfGlXbmtAWjxCcCM8c1ghODZ0LyNlKU0hSVVpVDBIc3dyVWVzU3BTP307Uy5scF1pdUFocnpCVmlCdlhmcDFSZFs4JVZwSzthXXI3QC4xQCtkK3hSPUwpNjtqbXtwUiZpKWAhYTB9I2teQVdhYlYrSTJTUkN2OWIwVnlPTzI1bHQ1KGA7ZW9ITE1fMyQlaVtBY10xRjJC''@;'; put 'put ''eks7PkQ/UFt4c283c25qXnlRbz9JL1duRSolc11lbGRQbThEWlEhRUtfY3RQNFB0dGsjaDEqWlBvMmBDeGtCfjA9Wl5DSGVCeG1kPEAjNW9INF9KXmxCQUR9XmFHZl13L3lVJmg4biJNfF1eMiRGYE4pa28hTExHcylOY1EpPn16QSh3V0lhOld3MyU0WlQ2RShvMltBYlJ0UXlBdzp1UmRTUC8v''@;'; put 'put ''RkxmQntMPmpDdkxydDdNWVpjbkNBSXN8bilwZ18jKWc3O1lSalR7T29QY25DLHNSdi9Gc35oKXxaVilkZyQufSozUGk6NEFtOUVSUVUmNFAyYyVhYD8/V0hkNVlaMXNabm9gZXgkWGNDWU9NXzwkc3NSdTduMiEyc3N8SX40fmJDRCZ4UF8wP2lkW0oidE06a090cExhNDYsdlU/bTA/TSNJWnxo''@;'; put 'put ''UzVgMlppUyxTSHVERlBhMDZDTjA+KyZzUSxbaiYrKW9pTSNMTGE2XlFBZTpLRng1IkVkMVQ1XVNtJExiP09sQXQ0azxRJitSckd7R1Vva0ZaOnlnMTYoMFpybCNKZ0xzei9KcWpAW0dONkxHdDQ3IktpVk44dSNSezBqIyo+NTt3L1lueUQqQDtZOiMvQ0xAe1gyIkR+WGFIXVB6KUxXay9XJXZJ''@;'; put 'put ''N0BOPk9JM1ErX29yZ1ViZV1IQyt6JjIwcHdocXtBNEVxJDRzZzFaUzMrR2Zod05NWk9IMl5+ZjExcXxLbzxFZSJHfSFIRCxOWXRrUEF5YnlnX3x+QCxiazJYMnlxR01YYDZuUW5Veko5MEBvaTUiIUpJcGFwPkR2MlovaT5IRVJ3UntCczhOfDhlKm5hM10udj5GTC81PEg6KXN8KzlkRTNUPHJR''@;'; put 'put ''LG5faTBFRjVjaERVP0BwT2lBUDVTMjA4SF4iUyZ3T31bI0pLNktPJFF5UVpVSkJyNTx5NHJlR1ZvOEIhXSwvJn5RZCQzNk9rUU4vYGJlRU52NXA6TEF8eyZOUiRAWWw7N10+fHkjWGFrS3xhP1ZNeGVkMm42QnQjYG1YYlA9S2V4cF9vWjkyXks2Uj5GUWxiSV9pW28zcClDKWswQT1CL1R5Y2Rd''@;'; put 'put ''OENRPH01Pl98MSo2NUYhOnhTWkJYSytEWyIoc1s6SGFHSFEkTkEmTn5iUjIkWUJtQkE9YDVxRTsmJVVBXmFRS3lnaUJAYWJxUTEvVXZRWiFCUUc3ZjBjT1QrP3FQfkpmWUNUaUV+VUljPnw7UTA+fjgqb0V9SElsKTdeXT5kNENPYiMhfG5rSGwjRWcoMlokJjxKU100ej01YllSNXUwfGNTeTBk''@;'; put 'put ''RkQvdH45YjpvRittJioiJHMvfXQ9Xyk4OEo7dlU1XStQekchXitfXXJbVmVFc3omVEImNk58Jml6bk9vZjJZcS4mL1ZzRE9JLiZYVTQ0RXlDVltPQjoueiVjdy5iXiZ2eUVeRWZBWCNxKnI3c0NeYDVEUE1jUCUrMDtEWWx6VHFVaU5rPTx9bzdyS0EhY0h7TTFgRl9KW3lOaTRyNVhALGkqYTgu''@;'; put 'put ''Zzo4KDQjbWRdbjVMWkBiQEp0eVtxS2pkY0xOTFJvYzpRYTBgWT9zdnoyO05ySEJNVX1qd2l7Yj89aFtFWkBPRStCYVtMWkNubUIlLnlESD8oU3c6RWg0Kk07QUdKVTdTeCN4YVl4dmJKSEVkWUVeRyJ3Rk0+dGo3M3RZI2V2MlEqfEkzZiUrVWgvXXVqYk8uSyklV2RucWV5cE4pQldBODkhckwz''@;'; put 'put ''U1M9Milsdj4+L1dNSjlISSg8cEEjTkgsbzQkbU5AKXVZTFYuMEZzQyw5eFB9ZnFeSTB7NHNGOHBFMFFpMFA7PjtxWnxaQG83WSMkeWJrSj4vYW0sblczeyYwRU55cEY0TF56Xy5CbD5sMDVbXlVgbDciQmZ7ISt6XixQL2cle0Z6SzJVWm9qP3R7Rnx1QChrUyZxMGtSSUIpOnRlVUp7bEZ4P1gy''@;'; put 'put ''VXlqQF1LOUhqJUpLQmZtMy8wKTI6SFlIJmtkMD9nfUkvaFBgWEpnKGQyMWpsXnRyVUxyalJ3O2h9QSUwRSNIXk8idHA3fGkzfERjQ3BDaUwoQTdnOy5IPkpHJlAoRUFPRVB5M2YpNnxkWnxdXi4+R1BRJS4rdys7QHpoQ2NEU1lpbjsmZS8yJE1Zb2JRJXUrNDoxV1cvRl1Rfko5KWNvS2YmIWBA''@;'; put 'put ''dyJVZSslaE8wViQsemYmIWEpXSgmNi8hZmZ3WXxeTWo6KEIvUD5UNUQ9TDspTnY4aEFuL0JqJHJrOWwvTm5NZ0lwdTlNZktOKEM1KiE7YjJPe2JheVpbVjJrM1hWRzA/M11zZE17XTBAZU1kTSRtOm4ueVk6Tn1IIW94YjUyJjpVVyI0WSkvd3VzMl9gTThASkBCXllrdVdMSl5oK20+b2h5cjxj''@;'; put 'put ''e2NVc09EQyooYUYvKzhHUWp2MitieSlRMXhfTjA+JW5vcFovKEBtIU93bzFjQyFydFIuM2ZsP3UvU3lYZGxuP0M4NGlgIkUkLHVCV1RlZUUhNSs9TEkwJUc6ezI7dClLQDpFdzxOaEFmQ156Ki5sfnpELm1dTC5IeVRiWCUqPj0qX0lpJDAjPXh7ZStsJDNpP18+WGF3c2UmWFdIeyp+PlFUT1Ms''@;'; put 'put ''TEdtOGxhYDVROytpbT8mYnRafGc2NFUvNEhgQGpzRjFtWUtXImhENXA5UzxFWHpKOEk1N2ZSUnNMZj1OPnBaOW4pY29HWWU5WVU2YngwWihHdHcpWSRVdF5pLFZ1X0E1LytmWGh3KU1hYjhuXWM7JEp4a1gufVhFc0J7dEEsKz1SJkIhRT5YcFtIcllMVFkjN3Bbdl95KU9QdmZHIV9hUkssW2Nj''@;'; put 'put ''P2ZSYE99aD1TNzo2PTVXWE57REJyZUI2S2B5eEtHbD5AQHVvaFc/Q3xGNTokcXNiS1ddODhwbVUjX25lO2ZXSEAjTjRPQl4oPU1yTipfc1UkSlEwOG1JMzwlRUByYG5te21QZGkiJkZFcyNobS5eMiZga2F5Wk9QTW5Ten47ViFyYnQzay9mMTY6SHIiQWFPcztFLk1aWi9SYCImRj1CP2sjS05T''@;'; put 'put ''VlhNU0pme19yWmNqZHYmSU53Ri5FL2BRUkdlUTVNczw1TmltMSl5aDlLN0tgY0wsWE5GZUtgMExLP00mZ3N8NE5jQmpfRD1tJV0hNT9dVG0rXV0qQnxTNURLcyR7XVlXaUZFQGxAalJ1LkxESk9HQnxGQSYiXX4lIyVgYEhGZnJEOiZPMj91RU51c3tMRHt0OWkoeFplZShXJnhfPSw3IzZeNEx6''@;'; put 'put ''Nk04V0BWSCQ3JCFAPntlNkArPkRSTj97clUqNUNKKjxiOHtDamxsKn1AM0B3InokeGtmR3phLyZ7OHN9N1ZjZlshMmNSOzs3bEJ9O1NUfklDN1dKUm5ucTA0SHc7LCQkUjp2aH16PFdYQHVGRiIkOEUvTnJSc015WH4/PjRIam0mdEJ5MnE7Rmdsdm83Q08pYnRBVUx+ZTA8IzlXPCp+TXVNclFp''@;'; put 'put ''JGthZmRRaCZkKGpUVihTfFc2Zn1CPjQqQnAoM0RPSzdWR11RUGpYKXVVfEQwVVZ2dHVXN0dfKDRiQHs1WThnM111Qzs9Q1pkSFRtVDxRLyJZbXpkV1l+bDZbKFR9TjtIfFUzKU9DTyhNMVdEeCxASEV5YHM0QjFFamIwJldGcHkzLmw6XiFdQE9OO1tZbGZGZH5ZYlIlMl9LYiFAXXIsYlNXZlko''@;'; put 'put ''RWNPSCNpWXhsfWNIUjYwQG9ZOnoyezE4LlZJMilTdW9wI2hrMk5+Q1NkOXBFVzZaIzJkMWQ5eUIxRHtCN0lTZGdXO3JyWlc0bW50d3hZa3F9U0FwPGdARmxQVGl9d0gwWk9gfl0+NDFuQHMuLz1FYFt+PkU3TzQva2h9P11uLmBYRndPYmVuOjRSO0ZfeUVXcDo5ZSt7TCtLT0I5MmgqUnIrS0Mq''@;'; put 'put ''IkxZXks8JEojSCk9PD0pcXh1UXZ1WypBYTVZYlhPXX5FMzpAfnBLZzU/Vjk0XjtBcSg8On1HeSxSaSRwYksyPDJmIX4wKV8oKENaI0tmWk00fERbVzVyMDh4ZFJZMDtERHV5I3BMcE13KTpTTSJVZiJwI204LkJXQkMrcldnQCwidVlYeyh+TCVEPHouJnlqXXt+aUI3fkZCZUhTRlslWV90R1Zq''@;'; put 'put ''K0pqRzZ1InFPI1VLQTQjdy89SmNTcm8+SjMoXSkkWj15cm9ZR0hyTEFhbSI9Mm9aQEI4Wiw6R2dxS04yeiVPbnNBLiQyfTJoJShzZiw1Q2prdSp4QjtjTFc4W1FRViwkaXwoMmQkVEdUNzhZeiplKlJKNjBuQChzVkMxUDlFfU5AIkgxNUZ8PHZSQU1ISGkyLzFuS3ZEUCldb1ZnOE5TOSVhQkp2''@;'; put 'put ''VDtbdnFJUEJic308aHh4TmBeNmRObzg6PVBiPWhDNEchbXlwPHFNW1FlIys3IyVRI2FHKV5gfDtHNHgwOTU0S3t6PDFbOnFZQD49XkM2VEN7RS5NV21pUGM4KURrNCl5PmQ3ZGRsSFNHfnx5bE9yXW0qaGN3VFkhbkdFazR8NGR7OHs6dTNPa0w5Uz0jTjxpNFgwUFExUzJIQjoweT1me3BMXWZ1''@;'; put 'put ''fCRmLFMoaU5vZEhgeypeV2piTSlZOD1sMkJrLHkrW2NZRHJ2JixYRDcqTkRyS0NKP007MX54WCp7YyZFaiVXNUNVRG1FejojeShKSCsoaHNKW3tzTzlARDpwZ3wzWVZzZWVXdUNqUWE7SD8sWkM7SEoqNkN4fXw5PjpzajdTIjBaUV1ScWVINitdaHVRI2FQIlEuPXFDcmgyQ1d7dzp9IldzWTck''@;'; put 'put ''bTd5aXVHIURkTlM8e14oN280Yk1PMkdeTFRSdF1FUC4zSVUyajRPRzw4SWtgJiNEenRvKXozO0EzWn5ofTY+NTlYbzRSZztaY1BrfCFyR0ReJV1PTTR0ZFZWUSpLeHlHeEQpe3ssMEBbODF6PWJ1UU5LM31MbFglXl1GUCZRdT5fOFpRPlY6ZV9wPi5oa2dwTEMuYVdsVUtNKlE/ZUVCKGhMZHNJ''@;'; put 'put ''cTpRVEVxakQsTlg4PTh+RzpnJnp1SkA3N21HTDd4cWRvKUBpQ3xHcTIsO1ZWQX5kX0VVWERNeSxjNXxYcmheK0Z9JWxwSmB+PmYic2BfZGVDOiVfQGcoflZbS0guOVB1ZjdyN0JEIlFpajdMOzRbWDBFSWNzWEg6aFtQUG5MJEA/QjpQL3Zjdjt3aUc2XkkqJixXKlNoWkxVMSwzKm1CV2BiWX1i''@;'; put 'put ''cD1xPUdYQEMpdDd5WnM/WEJ6KkRuaHxJbkE+JGtBX1E4fGh4KkQxO0tJfjIuMWNMajA/ODR+dEloWzhDW0cjJX4sYT0hRHdRKn1oUWM8SnxdMHo1PDtLZmFCJGpVUTFbUTE/VGBsSXh6IUZuQlBkMGAvekV0TFVZITlhN2lJMnlOQzRmXkghU1RNVkM7QjJxPyppeShlQjptLERxdkRTWXMuWWZX''@;'; put 'put ''VjtWfj5Da2dNeDVIK0JKeDlpQ1Y3WiRWdEVgLiQmJHZxWytHIjd9SFZxZDpoVmIpfVRiSX0oLjVnS2pLOmJEZCZhKz19dGRuaWFkJVhaYXxqeixMZ3B4UHxsPSp5Qix5WnplaU8rV3RIdDNpfjpQOlhzd0BOJDlxZkNAQWguMEg4RiQpb0labV8rI0hjUzArNlJGfC5FKEVzIyJpMyZbI0dOVWo9''@;'; put 'put ''SGBdR2pMTzksXmFHPG00SD9oSnFkIkZ0ZzkkeH1UYWomam5SezdhekpeX25baG5DbCVMZFVgVkpabTdpUzouTFVfZTI2NnRhREswYmYjdlozPUlybndgI0VGaSNgWm9neV9uVXlZPyU1L25IdV5RO2IjUC4kJTNrK30/fC5kc1t7YX4xZy4+ZFtWSE5wdihiL0NLSSpGdnFqNlV3UEokSzlveD0x''@;'; put 'put ''QzE0SHtPTmEpLHY4YyliaU97b1JXaiRHald2bkZbJnV2VDpxUTI8N3hLP2J6IURrcEcqOjI2WHlIRlhFaV9EZV45W0tpYkRfblNCYCREMlksKXtPTiouKjooJl5BJC8rQyZVfVpMd2wpdUJMflpKIWFASi9KZCpIYk97Qmo2PUJkRkksY21UeHRkZT42Y2NtO3p5PXp1YEddU3phNHllIT5iYnts''@;'; put 'put ''QTpoY3VsRjtfXy9GUHZxeH46aFNKTXRbWyUyZVhrJWIpb1ljW3dZfFN8JlY2bTJ1X0UjRiVgXip+OG5CLlQiOFBhVTQvdk09RU93RCY2fj1fIU1PRi5rS0BQWmA9dGlUZT4rLEB0QnxYYXx2byQ7X0AqUWxRUHg2e1hIe1BeY1NyPV5YaWpTKkZ+UUkkaVguaTFnM2ttZm5CUCthREleeGkoQkFo''@;'; put 'put ''KENTWzFPclRLUilVMWhKUUU8JishMzUlczJxfFE2ciVxI2k0KlJrRlt7TzE0YldwMWNAP2FQJXZPWnRmeUY2eGQkMTg8YT1KUExeSkNUQywlJT5jS3Q0XyxrKV02SmQkcTppZUkoTFYuPlAmMmc3RnFRXyl0U25iS2pWbSQmfF5jS3c+UGtsQmQ0Jk8rYW8kJVUqbGkmQzwuYUdxMjEvMHZCezxr''@;'; put 'put ''TEkzeyYyK1FVNEZoaE9DUE40OFElKHp+JGB0JER6fmtsTEBxaCEiN2cjcWBXQ1hxcEdePjt+SFZQX1AkOEsxcU5MajMvPilkN0dfYENsbCMvO31QaTkrMCpRQnpibVBNP3VRPDQ6SE4hPkp8cG4yZWN4TEIkel85QDxsI2l2Tkk5TCFCKSNTbkV4NkVgXUQ/az5YMzgydkVeRTAkYnc/YVRrWHkl''@;'; put 'put ''ezB5YXBhKmNALCEvbzFjM0dGczp1dFZXNjZ4KXNSIyRpTmw5JFlTSCg7bihDMWk+WiRMNHgvemdDY25RVz5gW2dMaiQuK3lTLDlRUW1VQmdhdz1uRSliOH0rQHdVfjFiUz9xWkZyKShlO2J1a0xVYT8/cXk/JiQrVHF8cFt5LF1+Zz57PWQ2YUhVdSolVkQ6WVdhZ25DZ11SY0NYSG5nS2xZZ2JW''@;'; put 'put ''aHZlPnptWj1aOkVTNXo+eWx7azxjfSUiLnw1eURqeDZtPWVoJjNBd3xwZDVMdFtqOkAxKHdOYEZZXXNjTztvOiouQWpbVDE/S01vNkt3WVp6WiUrTD9KJG9PNjdOVS9nI01GQVUpWEhkKHx5MXFDQjAqOiMyODNAU2ZVX3NFYTJnK2UpJFErcSthKVM1My53Nn5ofF46MVRMTFB5QGBFLH5EKSE7''@;'; put 'put ''TGhLW0x8ZWsuN1h1d185Y0NLdyNkTilQOSU2R0toUjdFVCU7R351Ql9RWHdhJGh4XldETklJJlhDODx7eFFdcF40PlMjeiQ6NDNDSykiSSRfcyVXTDd7V2RGZGhQXnRuUF1NWH5re25RQXZjPEJ3Sm8ucFokNW0yTVkwQCIjVCQ5QkQxdThmKjJSSXEjM3orJSMrMmpFfVN3ZFYpR11+e0ZeRWli''@;'; put 'put ''OzYrSD5mLlhNPDhaO3BZYW9uWn1QcSE0YSNJbG1edjtKND9eY08kdHYlKlpAbWRkYE0yPjdfaURfRF4jRTkpe3l0NHlxPio5ejxjcFosRWVkUklAbihydFAlZ09XfHNJPkFPMG98dX10Ml09S306al1jYih9X0x5PzxVJGF3SWE/NVszeyNJal5FRm58P0p4UWMhJS8jP3ZAelF3JXguIShWJj1z''@;'; put 'put ''enxkTkU/PGBqPSF1MW1WfkFbdTF+V11vaV07VXxzNGVZX25iaHB3Un58NUU9JExXaDZgQjB+PkspZlE/alhzTktub3hafip5QTldPD8jKzNpLkU1UkdfKGZ4Znt8YCE5Z3htVmcsKyVnYmFlXjBoblk3djBPL2Z7b2dRVCZXKU1JdDtuYypOOClUaU40UlVRLDF4bE8qLk4ybmRZTmBBKnt6RlNC''@;'; put 'put ''NEYjUyZWKHNzQ1o4dEVLe3c5NVB4S3V5O1pfbVtJdVZkPS9RT0JdKzF4WGc6cHUsZG9LWiEoKWxXQ2Z9VSJKQ31RIWIpWmc4Ozdtd2ZAaS97JntXOSRxcHYiT0c+QUBNYnwoTXJAXXNKL2k2Uk0uVXA7S2s7YENBPzY/QlIlWkdSY1krdXBWUl96X0U0dloyQEVUKkdbZl88WGwhdH5ISTspNTB0''@;'; put 'put ''dTRaS0p2LDR4NFY+YmU/UlA1STRobUEybTpnNDg/RllNN1dfNGZOcypRVE9TNyw1aFUjRjhaYzBlYipNMDArVnRbVmN8QCpZbHt1Z0FmQm4odEdYODMlMms7MCRObX5WV2F2JFB7am1LSFI6cTwhOHs4VDtWImsrKmgoYCw0XVBOcipLKTdJMnR9UzskYSNgO0hTMF05MyRwTWBDQj13NC5NQE1A''@;'; put 'put ''JC5TMixHNk8iWT4/JkV2MixgWSMwMWFxVlBORzR0MDxlanY0Z0FvbkchPXNrT3hHOTJvXkt6fTIkQzEmOSU0b1t2eThjMF9vXTdFRChzbj9vSTJHeHNzO3c1IT1WdSRBa0hMT1c/dUhOcUUvODRuKlk3W2dOKUhBSGJzSDZJaEw1Lj46c1E9QjdyfEhneWthYTAqN18+NEVuX05UKHNhVjJhNEku''@;'; put 'put ''V0w2TyQ6PlA1OT9PdGF2eF5PYzwsXUtPXmkzbVU0dmY+VHIlbjVSMFVFZVZbfU1kdm1rOnErTCR5JWEjeEVpKStHQkN2dXBANyxuTzY4OmVKN2Z6M1l6RDQ3amN0a3dfaUtTd2BjO2guRnJVdSFoTWdOOFtbT3Z8ZCRkYz9SXTE7Yzd9XXJuW108Onljb2dFKE5DTzVSQFNqdjxhK35sWjswbE0p''@;'; put 'put ''KWVLYmxOKy9wWChAJnQkIUZOJltTfjRka2VtPFBtfUshVSQqcGZwcjROdClgQ3o+RTJHOTtNQEd2ZUVbbTJVflJMKWA/ekd2P1Y9QDx+Mig7WTcjMzM6YV5aJEgqOWppNGdwYFtpNWZtfmhrY25iQE0jQjszdGo8K2s9ZGMrREwkU0Z7T2s9c3JtaVU9YWRqNFpGVH07SkF9MkIiNGpXbGI7QnhC''@;'; put 'put ''ZVsyRW1BI0VKRWElYSQ+RVpgQ1pTUmQ/X1gsbTNOISoyOHBTP1Y3KkgjKmwrY1cqeEBfVW4yN3xDX1dVOUAyaGM0d3xOdEJuYElxOWo+T2FBdjJze2AmSUxma3x6O1VYIjVeSXsxQipjTGl6NSU3KldKTlVDJD8zfilTYCNsbTw1W2VZKF5NXj4yVWMvMC9jYDVHWExmcl1ER0hgeyxaLnxmdyVB''@;'; put 'put ''ZlllMit+R2cpNHtzfUw/MjB9WndRRWhBREsiV2tbLG9lVn00MDtgXU84SkBOSm07RzBKU0ZbPGJsO3JfcjVeI1c+PlAzSmp7OXBGbV0qO3NKKGl3XVdIL3I5eE1VKFNPaSo0TkguWDxjNDhiK0spPU9zTHp0ej9pJDVMcTluM3ZrazZXNC42cGx+KnJaPnlSWTBmaERANVV5Iy9QLjUzVUdoWHpx''@;'; put 'put ''ezVhYyo9OkA9d2k6Ul0+fFIjW28pPEBhYSVIPiMvJG5CMTR6Xmo3dixfQ1t1Z2sual1uRE4zZDx2OX54O3NwXSFedDJCNSwjcDZxeT18YG1qbXV1KGlKPko9UVR6dHBeOH1Ven1aKzNqUCtWOSZQXU1yUTlqUzNQX2l1Yy5AcCMsZlpNLjptNHpBdy9Fa00oITdgYTI7ZV5gNU1gbFdETzB7Kmt1''@;'; put 'put ''UD9ySFc0TEtZW1cvZkQ8YWBPfFdDSGZnNFRBSzBtaHZSczlCZDpOc1lScEVLL3EveXIvVzxoZWsqUHliVGU7anpAT1t6MzReWD8rbChadWh+XlspQVhWNnpWQzsmb01gMWIwZGd8TVBNO3V8MCNsMW9nSUBOMEwhe1NjeEVmMVJbOF92d1VmLHksZi5IalAhb2JlV1Uicj5rPndhPlI7Z2EzJUxW''@;'; put 'put ''KFpoYz9XMElUc0QzJWReeUkyX0FMc0x2fHY6c3AsMXQ/VGJifUY6XkdkOGMqU1VdIWUvRVpLaVtVRDohaCUvYXwqNm1EJnEsLjVzTUBwWSV3dUA7UF9zdi9YcEkzNUNQSUhQVixaIypxJl40WXtJIzN9KWxJVkE5a2RUVVNUSH47WXZYViwvVWFJcSVOX1lsfUBoNGdUVVJqNW41YG5iJkV+MGdq''@;'; put 'put ''VT0zekpGXXI8MFsidDhRQHxAXjFIVFlFbFY8Om1pN2ttfSk4bE5+VGBgV3h1bT4lIiQ3PFh8Jm4+aTxESTt9UGw9XytEMmhVcVUlOzw7TDsoS2MpPG1fbmRUOUkyZVpbL2M4JV1UQEVCS3lALDR2K1E9dEcrOVg+Vm06dl0rQyttbSRebXNtV0RFXTFzYGhQeTJSVCFVKVFrLjd2Tl9rdDZbKX0i''@;'; put 'put ''ZXdiaVFLWlNaOX5XcH16XnV5dDBsezEiezxSdig3ZCo3cVovL3BMYl1LRHQ/UnN1TXJZbCgsfDxpeEdGNFRLalhZMyV0YkhXIS5KW0xjR29IfXF9Vkt8dTtJaUxkdCheQiRfcS5lRmladV44QShSWVpQMzsjPWIvcWRSSlJrSHpqfjtvdWhQUTslJXcuOG4vZi4+SF1CRlFBQXMpa1MyP24/X1hf''@;'; put 'put ''PVddMjhqU1EvNU4pZjw5Q2xVeWNFY2kifTJmWFJ5KSRaNng7RCRzS0M2OmA1UnZtSzd9VktucEc9V0tSPGM8XWtnXTAsMnxDUy5DbyNnW353MlNWeHdOK2BCYXRKVThqJiQ6fHFvWVNjKTVSMmFvT1E6K1kyV2JkJVNkV0I2WXY/PjN+cUxCXnhLdyVKP0BUbkFpIT1SOWBhcEkkejVMUFslWDJQ''@;'; put 'put ''bH0oVFsmR3pqKlUwRl1wRVAmXkhVJFo4ZTBrNThdbX1ndmh3aVh5fD9dUU57NEAuXmlWVyYiZTpuMDJzPk03aV1QNyVaKjwoREJGViVSK2dtd1U0RXFVWEJ2KSFSaVJEdkpAalNrOUZtWSpCN3ByNSVhKkEpUCpQQHprQTQjOGJ+Y1RJLnN7XT4zaXZ1MUljfmMleS9aQnl3fEglLFVXPilYRX1y''@;'; put 'put ''dDsxWCYwNmxjL3tZPGJZRnFrRHVaVjR4NU4qMldocjZ2KFIpPiZocnFkfHkkZH14V0w8UGEwYGJVL09RUT5IQFE/NEFUI3x2Rz94VCxrMWNUVi8hQmt6VSZoYztFd3AwUCVRYzMwQlh8SnhPfklBTlhhLzk0MXpFVEpMPTJwI1VUZVsxUkNJd1Mwc1JIbE15Kko5IyEqSkJ5InF8R3xaI3k4V291''@;'; put 'put ''SXA4NTYxQWhqUURWVHplc2t5dUlGJilRTndjLzpEKCN+XWV8KFczUV4hKEZve3JyOmBNMHh6WFdha1hHdV00Qy9oeVolRVtCcCYoJEZRM1Evc1k5LChWZkBSO3IuSWNTfVpKd1ZURGtnbEU3Z3FmNWwmVWA2cz9HSD9AVyliZzQ5WSJOKkZiXihSTnhLekVmdUpNe0JhY3tRcjt4LEs9YUdZOElu''@;'; put 'put ''Q2BxeT5YNyJGWj43YlBCIXVHVERDZDEyQlN2OTV4azxtYFRUflc6WDFMVzhSPmU4Lk95fEV2aCJsNj9aWVdDfDA9VlV0OXs5OXU6cGl1SEtyUWYucElmRW9iTkkmNnthN3RYUXxEZ2VIWmtjXnw2Ymd4ejRJUl8xLEpmdDw4UGVYKzE8Ul5oWDVNKENUZW0wbTd1cnZqSiF6OCwiaXYmclkmL31e''@;'; put 'put ''QyhudU4xYz8zPU8rY0xieV5XeVgpWShvR0dUVnZEPE1leFYmbix8Q31JWXpJWER+WyouQm5dSSkvO3E9dURhVDBCQWs8LlFGeXQ8YiJdfXhiMSxreFEpQzQzOE8sflp9MDpLaTNUM3g2U2NCXmYzYm5QQFlfWilWIzo7KGdnekxKYDhgN3E6RS5fXjg2OyRSQjpSVjI7ZDVaWVJ7UmRvc1huYGRL''@;'; put 'put ''MiRHZFcjdTEzfVMheG9PVDI4I1V7fDhpOHFaWnVXW2FoMT9gXVB3MkJnVklAaEBiTj1say9ubmAjRmNFeGwxVntRczM2bHI6dHppJUwjb0QvTyg0UElkbl1Obm81aH1oPzp+KGReLiM+Ynd+IWx+bT1CQ3Nsak57M19kMWExSVs3TldAOGl6RWFCSGVlQT54Ymkuc3JjfmVWbz4jcFg1PDRFRXZq''@;'; put 'put ''fkBNXVpkODBPen1gbTJsMXoheixGOi5SKVQ/aGt1YkY5OSN6M2YjRF5yPXo/Iz0rS2BiYyo8M0VFPEZaKWNrXUsxfEZkeWdxJGBBLmJfNy48NF5gJkokIW5ETG5deEFpOjcuT2ImTWo/cyQ9YHxFeT4obChZbkc1Xlk9Nj86T117bGNRMFdOYihBWGNVdngifXxKLlZxKFMuZURwS2tBfTpMK31p''@;'; put 'put ''UiNXbDxrYV4oZW4mPGo8am8vdDgkKSFtS2dETjk7flJUKlNhQmswOjc7PzlFe3FCPyYxSnVmbzorQ2tyPldPQCF2QFooVFQwaXFhWCorRz4mZlpzQntRY0xZUXFndURVcTVRZU9eKCo2MWcvRE15VyMufV4vVkBlOE57cHFeIn1Fbm82QGV6K2ZvSFpsViNBb2VdL3RFQ3dHWyg8N0NFfCZEM2ls''@;'; put 'put ''dyhiVWRsYDhufGRQN1RBQSpbc3ZLWnlEYUhmJHN8M0k3LF1FWGU0emdyK1p7KHh8clkpWEIwSkN1XUYiP2FOZksvV0Q/R0xCN2MuRTx2cj9NUFplJSRwSVhqdERtTCM1cTFzdzlARmRVR3xSW09sWmovWl1dOy5zP0hpaUQiPGJLSTUufik6c31QeF1jRmg9Zmg9cls9ZHE3OlJNQTUoUDlhYiZ0''@;'; put 'put ''algjMjtQMGFNRT0pSiosQmB8LltSM1pLdWlJWDFUXVRsbWxgaCssbCp+ODp6aClYcVFTVkMjV15iLChRJD8od0V+MHZuYl5wZntLPzM3eDxvJCFaP19vTDhBU1Y6YmNXNk5ZaTdmMGxxJEJ0MWFsNWpgM15UMH1pZ0M/cmpbaUM3L1JrclhYdmF2bSR0U0NCLyQ8NkdyXyNiJkp+fTZoYmY/JEtn''@;'; put 'put ''Nzk9TF0oVGFhb2ZldWo8UkY5bWJAdDlaJVVzMGJPYEFnTzxPZV1lSUU7aDhOJnxRbUN1OywwWHw+N2MzKzdGInA/SShFfF5TVmoiMjVuP2IsPU83I3YuK0IsWmp6SVk+dlFkXz02S1NYZktrTHdsZztKSE9ZOixHOENkPTVpUjpSLEkoTE0zXVpdaEVFPDQoQzBqaypIal05ZG1na0ErTkE1ODF5''@;'; put 'put ''aEM/R3M9SXt2SjJxMWV8Jng8NlIvK0UiTXpVd3ZsRjdhNnZ+clgzNWQ5WXdaQWtrcGBbenlLIVdfcHZRTW9MNG9WaSNDekQ1XVZbcXBUPlZxN1d7OFp0K04kNWgjT1RScktOKmozeUZ6OmlVXltkOyYzX1R8alo+TWx5WVVYVCYqN281YndRc3JYZEtLOmt6IV9JNl5DdzlxVlNycHRNN0JKamRv''@;'; put 'put ''QENLSCJzXnN5fHRDOVJ6U1V6VWlHLG9wPyU9aS5xRkJKI1VrfGhyeFQyPzFYMWMyOnVVaXRuOHl3VVRMKixeOnJjR05IPSwpXlkiUXN4MHQoTjNrIX17KT0wYzIzKHphRGM0X29YaU9SKSt7OiRGeHwmKX03N3VLcFU2Z1pvKjo4Q1JTfSY4JjUoeDxGSX09VCNWYyhrb29XSXNBN2F1aHtvZE1O''@;'; put 'put ''VkNOa0N4aTVwPixlYHooNCxdUTdrZkghYkZ7On0uO1FKPFFQblR1SCFnKkV0ZFVpPlVJTmZDOkd6ITMhTXhEW1QqQT88eGlFYnFaOmRBU0hYQGRCJD4qem8reX5fWGZjOCs2WklWKCwvL1BQaShHYEZ6KUgpZUdeUVFrTCQydEYhTGVNdl5tOEFmQDVNeyM7PCJ2MTJXIkRgTHJeXWY2LjRIeyVF''@;'; put 'put ''JX4vdW9FRiZPYnEvRE8+NU1BOiliMztMLyJ7T01efnQ2NmguZ2dJJXhTLEw6eWgiZXZIenRZJT1YK2FRXlFNUVNOeWQzVGtKJWhTRDNSKU41K2NJXiRdXztsZ2JHdC5gIUs8SjZOaiQvYUJiKyU9S2ZTe24xQElhX2d3fF5RWkdrdyhXemlTQkpLNmpWJnJKbiI2PHhUUXAwKmJncXVyMXw9NzlA''@;'; put 'put ''Ij9LUz15RW91TTcrLkA2SXthQGl5eUMrdF9KbmE6YH4qTTUkdWVxYENlO1pFUnBFVXEmMjVLcC5NMm5UNiZxUGxvNn1IMHlrc2Z6cVlgPmNnVTZlNVA7Y2lEaiVSNnQlTXIrPE9TJWM0T3lJRGlvVUV1X1Q/TCV+PjJFVCpLemtJXnQhR2Vpe0U7aX1DV0dLITV+LmdEKUBzQG9lb1gqI2gidnde''@;'; put 'put ''YSYrNlNtIUpKPEZXRWhsQjxfW0wufTBgM30oa1lAL2VAJktgMnFwU2YkP19jdG8kNUcmK1d3cG56M04vQHlwUUdaOExWbzFFK0M3eilpPDBIMTQ/VT0hWlFESHE+T11kNVFxLykkUnt4LCEzSU43bUNiLzZSIUZFRHYwPVksX2lQTmRzZFhJSUFpdTszXzUmdU0iQV5BUkczdCYpJEkkeWhCekci''@;'; put 'put ''LmBNLC4xPkdadlJJNnpVbWRdJmtXLnxVdHl4OGRrNE58U0BmWlt0ajgsIVd7KVVZekNXNEIjZHZZcV94V2x5OTtfMlIjZ2Y4akMpaFlafipHVklpO21lfX1sPV40PitGfSMzZlI2MGd5Mmc8Yi9FPjVEYilpQVEhUXk4PjpIWXYiO3w5Sk1QN2JYTVVYOXxqelchW0dbaSwhaG9KZyEuTyxpY31q''@;'; put 'put ''NnlHPGNiI0ZvREo6UDZQNyFGPCosVHgzYmhGLHVHYXZ1eFpjTj81JXFKWzpwWShNYTYmOHxAe2xaW2B3VG1ZRFovbCleISsxbncuWksyMzk0WkZtQXMzOzpwNG4yUSUrMT0oNWY9QyQ3KlBRXSExR1FMc29FKW5+REA2WSVAb2tyLDxRJCVTYXRxJktiOkxlYEZ+OV0yR2YlbmZLR1V6YjddMnFw''@;'; put 'put ''LlteP01ON0pmXitLJSs0MCZKaWFbMUsiamgoPWluXX4uMHN1cG9PZy9lMiooNCwxX0Q9I1JRWEN+YFNaNztJb3hQU0I7MGtJOHBFXyx8RUBhO3h0Kyk7Yjtsay5EcEFtViNFREoxPmwsPDIkKXVgTm8oMzE6fX1zeUJ9Ny5qITJ5W3kpNE5IREJeM0pkKkxwejpvUyVAO1Q6UnFqeDB1VT4lbysk''@;'; put 'put ''bEBPYXh5biQ6dHcobi4qR140Old7UjArRTxBUntVYEdoZDxwKl9HWiFsWFN2XykpKDgpKVBJeWVQJGM/ZnIjWDxhdk5hSTpbNXE9Sk9de3cra2BgIUc2aTwxOjYxKVZDNT1+R3xEPjQ/P2ZSSypXVjdnXT9heTRNYFJyczZGdUZ2MktNRktXaGJARDRGRVtDVCEuKV5ePyRCMVgzQE9uRSNPPUhB''@;'; put 'put ''NkFsJUpMRVV+V3I9UjF1YiRPZGhqQ2dsKyhzaFo7OlBPfjNXVXUkQ1Q2Zy9gUFsoWFNoTlImcXViKXJiLEB1Z0xrZCxDOiNBYEtjZiw/I19jOTcyKmdYKHR8PiReRkosOCJVVHsuLFBnLGE0Y3RGLzQ0WCQ5VVEoMEV7L0t4L0xnWWpxOnFdcS5gW0wjNVIyPUhafC92eFQ/UDBvZShtL0wlIksp''@;'; put 'put ''UVhASGhYW3h9blZtZ2x9N0RhSWtCQCYrQl1JQkgwWjdNfFdQbUptNF9ART99NiojaG4+LDo5SyppMywoZlhuZD9iZCIqYzJXZlRqRHREPE59RVo3JkpsOUBGcmhdfCg4ZDwudjNodGk7WE0xSWk/MG04NmVtZVJ4KF1TaCI2WH5xMTN+TFQlcTo3STF8UWx1RlkmWi9CPUpkJXt1eTVKLyQhVltU''@;'; put 'put ''PTdXYUBYOWxCRCUpXXIrV01EfiM2PFk6Tmp1dkkrfFJfUjJ7W25+ZENuRyUud3wocyM3L1ZIZyFFfXYzal1rUkA8fGtDcWpfS1Yyd1U2JEcuK0p3UX5DMmwrS2R6RWteemp1Y3F3MUpKPz83WXhueGtQM0pGX2FRe3liM2khJUd2QFcwVyYvLHU9SDB+PEZXPD5XVVl+S3R6bywweUtTJDUhdD85''@;'; put 'put ''WUlfMiM1MiIvVi9nUiRrZFddY3o5Q3IkKkskfik5NzhFdFVuOnBzKEFvL0QlNnJQJXN8KVRCVzthc3VIKTwja0t1TSlLXzYqOGlPekBsYnl5WzUxOWpea35JT3RPIVFFUTdZPmE/JDxJZiw9Jk0lJX1OTzUjMjhCcWRCdjxQRXRBRntdY3VdTUNYb3A2OjplKy43VH56QjtAVVVqSl5fVE84bHhu''@;'; put 'put ''Ok8iRj55NUJXPndqQHoyVz1NLl5MajhnK0QlZHRiOzZqISp1TG5ZcW07XjlZZGhwfVJsYlZDLkRldT4ken07Q3VZWmtbbipjSzx9fkdNOms+L2x2ZEBgOVdqQDB8IjJaODZkZTFqWmpFJkFZWU5dME1HUXEhPC5qdFNiNjZ6QkNTMzFfKHE+VChXXjhtckU2JU41U1FQaWcpd3dTSCo0VFFhcjY3''@;'; put 'put ''WlFYbU11aSEmLm8kPGJ1IU4xWlVxYmQuMV5LWDJlYF1Te1RiUV1eVygsfFNvSH1Vcjg9LEFNczpaTlZwVjpUJXRZcndiW2dzZDw6bV9hezx5WFdUJVJvYE5MJSFmSnQ1a20xekVjT3grdTRdK3V6Q3NXflNLYVQsSl5lNDVhZWM0TCVwPGJxPmROcHE6e1B1Y2Qic2N7fn5ONWJmQzZDa0JWfG8p''@;'; put 'put ''JDI2Mmk3eE0qKXRBfW82KkdMeFhITSpTfS9CfVN0KS8uZHJxe3EoJUlsVFJ5VTZDX1FCTl48ej5FXWdlOXxjT0UpIWAoLnlESV5rJV9IN19jVVdufHFpaWdwViJSLDZ5KkIoI2lWenxUcj16VjhMWmcwfU9yb2hxImVPL3Q7NnMidWBncGR9IU1JLlFPcGJLTHBXKWFRQ1p5flAhMUFRW2xsaUJk''@;'; put 'put ''X1ZwOGM5X3YkJUhHYFh3Rzt5d3EuZUtBRUlMYW1aUXdkX1tSNGd1cSE1NkAzdSU+RmdyLnBIRVV6eEBGQ2g0IXhuSVBpaFlkP08iXzVCP01ZJCRmbjtpbkUwQWpvKCtxOlpiQUVhTmxtTV5ScH1NYFciPE9UQ15Dai9iemVddEJvKTBUWH16c1FtVXh9ISIuMz5lNnZtWkE/bmVpNUkhRFAsezUu''@;'; put 'put ''LiIrNTdlUCFDPmU8YW5PIUp7OjBRPSYvMFFyOGlWeD98eE9dcmg5Xn0zYG54Pl4rMHg0SjwzIU5JTHZVXjd1XjhEP1BoPjR6UVF5QzMlOXhbQmhoUzhRQjpTRzVDIjJ4QlZEcDlpQy43Sl1vLHMhXXU+OyM6XzRNUztsN18sS0J2VTY3aWclLno5aExAPU56UHdENmh2OU9HM0lMcWNKZF1KYDN7''@;'; put 'put ''M1ZKa2FRfGRFVVFnPk4wTnpvelJOUiFdQjA+dSx7XmJza258dzFIIyp3c1FBQTxtbyJ9YyFnIjNHKHw/IVVlW3p6Y099anBuY2FgZHk9MlBCVGxiITxCUWJwUGEvV1BzRVFCMl97WmUvZDpNIilee1dVczZaQEoxQFU/LkUwZjBBRFVUUlovJFpmbE8jSmdBWHVWK3YjU0tXcmddY0AsS2Q4OHEu''@;'; put 'put ''KnlgVSxzaUt3b2kzNCJoOz5XQDM8b35ldl41V14qdEFPYnhvPEQ3S2RNcV46RnM6T0pIZldvdCJScnMiOTc6XXE4QH4xWjorR2w3LFtIT31sSlVzLyQ4RkBPYkE/Nkp5fWVGdmxVcWxCRX1tfDw9Tzc5YUZ9RXhyS2FpTnVnXUo6MXczcDx7bTQ5dFB2JFJJOEJ9bWBUbCgoZGw6V1l0PFJQIzw8''@;'; put 'put ''SzthcS8kdjckaTwhcDRJdlBuRVVpb1ZeKGJUJFliNj13USJDRUtOZGMxRDR8P1tBZTMjKkthY1NVJVhoX2JObXhnd052X2FYRXthNjFIITZPeF5HdW1PJnVqS3VNKmV3SWFhOE43RD4+QD9uKVBGXmkhP2wmdE0yQ1QmSHV1Mjk/dXJJLF8rTC8xeE5hJk1GJHt7M3k2My9zYUxBT2I0c0taajFk''@;'; put 'put ''RlU8RG1DUVRwUHc8ZVBSa0NON2ZMdCtsU1tKSnMsfFB4RE1kNHMmKG4xYntWPHhnJks4OHtAZHR0WXNbeXxEMVlFUnlKNkJ4b0RDc09IXVl9M1V4dEdSITkkPzZGUm8jXkNfVClbT2t8X1dtYWQhOE19eXsyb2pYT041MUI1Rl0kaDE5eUM5UHZvc3RqKzVnLHN6SXRLSUQhXjd6bjdnQTlzMTUv''@;'; put 'put ''NEc6IylFTU9ROXs3aUdnVDQ6KERCQntdeiZyIztYL1d9cldHYzAwVjp4b3J6NT1VQEZ7WDo3USV8dkAvInRadUNaO2VXJFBtXjpBcURFQDgpZ0pJSlAqKC9lQm5lWSNSK0B7JV5qI25ZMEtCM2ArO3RxOUM1T0JiXmxtNykmYHFrVCo6Ti9UdEs5RkVRcWdHUCl2Rm9CJW1vX0FdcyFXQHF0NC95''@;'; put 'put ''SyZCRm0pOTZNdlNsZXpNSGxRSHxnMiYjR255MDBUVT9OWHUlU20sPnlbQ2RKNntvWVpfMm0reC9PWV0xdl1mQ29LM2Y1eFRlPX5XMXU3eF4jUEBua1c6fjAsfH43OzpGQkFiUDx4WD1LamhgJWkzUU5JeH00OyZjMFJqKWNlbUp1d34zTGJUKFAsL0MyIVFheXtHPlFed0JKYiFePj1MIUprcio5''@;'; put 'put ''L1dWeCJAIjptXVdQcnhQSnBCYlQsLDNSbU1FenpwfFg7a29eQEk2PylweVkvVUxkIz5+Z3ZRfUJwQDsuTGY7JXJzdS5PL3FofUx6WyoreHRkXkxOQTYrXiJRZldCbSQzJVFDPU4wW1VpVU01JnFGazgoZ1koVDpKfUI2VEh2KmZTUGRoSTFLfEZSWW1KWStxZSJPO3B1SlokeVVmVS93TU5LOCs3''@;'; put 'put ''eiJjSXYxVlpwSUcmeTBSP3QyTmZaYyQ0Vk5bL0MhbHVCdz48IU0/InJwRGkvX0xvT3tOaTpENE92R2p6biMxODdDO0lXM2BpQ2lZKWYibF9TNHImRnBZVW0meS57VUw5LDFDdH5DPih9Z2ckKX1HfHFjens8ITpAVDg7eSQrWmpFaCNBYF5iPl1BXTUibFBlP1txeCEwKG1+Y0U2Lm85MDFLZGti''@;'; put 'put ''I04zTTE1VzByZkRwayRQJEg7V3lvelNBPiQpXl9GUlJlPjxRM1hAfU10bTZDbVNiVnQuSCRqIzskbCpvPV85aj1XWGtTM0xocDssP1N9ZCVRZXRsb2lfX2xRN0VNW0FlMz07eT9mNCxBOl1RdUcsZC5bYGcmdX5rYz1EKmFRZzUzY00yIWN3bFghXlI4Z256YFFDUXZJY31qWSFGSCx2V1Q4Jldg''@;'; put 'put ''NTBFUUp3QztIcjUyRyohc2MyXn5uNHs4OnpTZGZ5UTZtS0cxJU96YGYsc2xdW0wmI0BXMm1aeV4kbWh4S2twOEt+VSRmfEk5aS5oWXFxLlVpPGdbLD5LfnA3VDBUSUcrRnZiYGhAMUY8KT5nXlFpOGY8bkd7Yi47T2I7YnEyfVUsRUpDbkxpPjJhSntDMi4zbVkmZF1pZEdoTn56NkwxZXZ2VktH''@;'; put 'put ''SiF6Uk83UiMiNG9ecXpDQ0N6JjZISVddSTk4cDVTLzdEZyFdUF5uOyg+UHoqNGh0eTovXWAwYywrbnkmMWsxcH4xZ0w7a3wvKmQjNVc1e3M1ekxDbGp2KjV2WlZfU0VbYkRDcyxAPkk+elE+O21RMUp+W1k1PnxJUjlKR3JyWHxOVWNUVmViXz5qcE1qaT8lcl9GRDNCU1UkOUdERjErVUxeKC5B''@;'; put 'put ''T3NCQGdMZSMmLiU3WjY1ZTVqMy9UcF03Y0NENCM+M3YsbmsvWFRkRUVhdDwwR2RAOHtUanw4LHp5TU9PL3A7X0s5QjkzaHMrKGFjaUR2UTJoNksydj9+IVo5Zk8pdF5KeGpaL0luRyFTWmM1WT0qfG1aK3N1JHB7MmRoZlg0dTJ8NTVITiF1OShnOyYxRTpXVk84TUZXSkk1Nk4zL2R5NjVeTSh4''@;'; put 'put ''NjpLQmdMampSWS9wPFU1cjc2VylJYEU/RGVRSnxOSXRPMXFEbUc9aDx3NjUzTlE9aSsvaEJCcGkrflRVaUFWbD03TH40NXQ5VDxCJWRASF9+TiFHUG9Lcz4waFllNFdsRGVYUzslPDxgQzBhOTpLLlFia0szOVl4V2hMLk1me2QzT0YrP3VTZHZqWTcrYjxdYVs/JnQqQVB7Kzx5XTRGcF9jSjNv''@;'; put 'put ''RW40PSMoSXt2Z35JNERESmApJjN5cW1HJEdSe2tKRm0lMHhneXJCQDNjSjYiWmxSTTEraSNhSmZiVD5BQm4od0o6KCh8dG91aXl7P24wYVJfPlZLRStNQi9kPWFBdDZyMFFKRHk1TnxOVC5yfUM+SkNNVm0qLEN9aCxsXyNzPz57X3hZVXFAWzpKPV5aIWhoPEJTYyxud0ovVnluSE8jY2tmQkFr''@;'; put 'put ''W1ErM30lZio+T09lK3c2VVZGTzAhOz8jMlNDbn4lPT1ja0x+SV1ZOld7fD4mMSZaS0JNd2l7V2B2Ij1AYGthZ04iJi9PRF5HOUk5cHVneiNlSyg7WWxpbklTRnRPMns5XmczazZpIiN0ZWhFVDBTODQ0LnskRyR1eF1BVEl+cXwlaDB8TjhJY0ZlUnZ5MGsjUzB3NS44LGluIzZALFF8fWtdJEEj''@;'; put 'put ''NjZuKldaYyVCWjxlZnEiNHRMTEk7elMpQTdhfTNtdkooMClSLDJ+MEU/RE9zOiU9aCk7eUlUZTo6fWM2UVtZJUUpPEB8R3VuM1RvbChDZ1laS3EmaUwhMls2Ykw5ai5oPmM4KW5LQiN6YCE+Tyw5TiVqQk9+LDYqP1E5P3dmLFchckNze1tMKlgqamNRamBifi40ZFBpJjVRcFJLOGUuYCJCeEYh''@;'; put 'put ''MCs0aiVOcWt9cmdaIjAvUnYhMlN7bUAvdjUzOl1GI0I9X101eHI6UEorUXJwb2liVlJEJjJxPT9RVnMmR3BdKHRYXXFTUnhmXj5UcGZtMl59NX5iPzZ5SmcuZEBGZE0la2t0QUhARz84all1fFtRNyt3JkJMcWE7Sj5FP2l5fDcsPT9wKCM/a28oY04/JkVEMTRIaFRrXztyNmdgZGVFOHJ7PHRw''@;'; put 'put ''JnglaHdbUy86ZnF1PztYcjdBZENdNTYlT1BPfnxBOWx0bGZxW1owLiR9L0o8VkovXmg2cz1WPTJCdyZIP2NCPmhrbiZ1LE13TipwP3p3VXRpYSlQVFpZaSxfZC4sMndfMXFhQ00ocjBUNzdjKztIPmo5aS5jPElGQXQ0KHg8LDxUZSYlMTJGN2I9RDd+RGBZTiYwVEZLNiRkcTd5NHNXI2BdLyZI''@;'; put 'put ''elMwJjM3Y35hcUtnZXg6UmtTUSU+NnFQbWttQFJfQS83VjNkQklRWXhxbjksN1ZeKzdfKiRlODthWSU2N0p8ZyhIWk06dj55bTVRIlVTMWwhWyMoM35OdUN0cClXfTd+aCFsflFaY0MvWW9FS0xFIUNCN3ozVW85U3o2K0IyQUV8NyIsUUBrTCsleVdWL1svRGtQLERZJGp2OiQiZnV1QSYzZmZU''@;'; put 'put ''ISYhdTJFTUt6YCo5bnt7dkB4QCM3bl9CfGFQe29kSmglQT9IKVAqV3hhdiNbQl9zV2wkOnYlSE1jVntuMXxpLk1EfTVgPTh5REw7RG9pM3ozRDErMEZtT1tXVTlAW1hwNypOKHlmSV98TnNkPy90Vk1OVGpyPGRvLktUeSQ2TWJfWEc8dSloIXYsQzApYlh5PWd7MUlHYzF5fnVyM1NHYHB6L2VG''@;'; put 'put ''M3d1bGc0TzN+b2xKL21TMFF5d15RdVs+Wl45fU4rM3lOKmw0XVBEPWwsc3dBWFguQ0dFK3NmVFpfYTpDIy91YUQ2QVtvIk9EY31mczpET240OVokYHhlcjZreWdfRiF8NFBgL3hjdDQvb3pfPlJ7LlVCIWM4T2h2ZzdRLz5MSnpnLmhEdSZie3h6WnBpLjNkcFNJN1l6LHBBKjV4P3JESkx1UWNQ''@;'; put 'put ''R1tMPjxyOmljKT5oQj1UN0ZJLztKQWl1aTV0Wz16KDkkZTJKel1GL3UqSXp0LDt4ZGJ3SWBFelB7WUl7LFdpQDhxYnY6dCg5akdmUFZTazhOYk5POFYrPHhUUV1UOHc9bGU3MltTVGpvKkFOVn1CWU0kX2R4MXlKVX1mPDtVTV44cl1HPWl8IVJCYm4qJDVLTGtLeDA0KGh8emM6Y1dpcWVZb2R7''@;'; put 'put ''fGVacDpWJUVfVCJkMDpKLjE3e2sobEBmMzVqSDlbeDgmJTFoVE94LE8wUVgrIXV5TktLPyRdR202Oj1YMCVqWCt5YEBRbl5gdUQ4ITkuNEhVbnt4QiNbazhpMntIS1hoNXtKZVtbYyk0cTtOfVtFTnlCdHFaT1hZdX41QkFAYE8reyx2TjpGVGtkQEUsUChxJilgNTJVYjlXVXh9Q14iQ2RQRnlJ''@;'; put 'put ''ZkpCKmlnQkNXJSlSWlVgME9RNllleFRocTcjNjE7QmlrcGlqfkVkTjU9WU5dampvM1FNZUBscFtfbU1COm4sV2FCfnR2blNSKGY6NmtXQ1E9SGREeXwjPzp3KUEiSmwsNSVpSTU3cD82X3RGdWxFNGgyZlR+M1M2L2t0My9uZCskUEBBN2o4Y1RiVXomZDd5RXY4eGNqR0xuO20lRVNDcjxOWDVg''@;'; put 'put ''KWVUM353UUo5c1FneyNRd3VpW29WdCUhbjpaL0pGUDZybFlqRyhVXTpES3dfQX1sQDQkan5SUnZIQXE3Kz8+S19MbUdYeChUYztQdGFlMEQ6Ti5bKFp7VTJKYnd2djo2WSklO1kwMTFpZ2ZEen1LamN+OSxTMVA+Z3xHUyZ8WkJEcy80WjxkR2xsbk42cn5MK0lNemhzLmsqZkd0dCY0S2sjfEtn''@;'; put 'put ''KHxdLFcocG8oSlFdbSZbVEUyZG4kOz5yeTdwY0J4Mnlmd1V2Ynd1bVtjW2BrTEYhWlN5akQlJm5sSF5uPDJMcklgPHZ0ZVhTIX5DQ0tocS5XeFVgcCR1S01gL0pjdFIpW29rVjpuJVssIndZQyNyRiNmaChpPCQ9IkxNP3N3NDBEW1QhKCMoPDRJTV4pYkM/b0tedE02ezQ4Xko1UXtEKVMpd28q''@;'; put 'put ''OSpxUjRqbml4bk5Bb1YzaHBua0hpfXFdRUpyVjI0WHYmOzB8azVbUjlAfCUpbFN1OTR2LnptO2k8LGIuMmt8Mn52OHJQNjBQJFMzXWBaLHd4VDxWYmJmMjhJdWAoOyJBY0kyT1MsS1c0a1JFby9NPGJnImx7eFFRcyZrR1BHRjcvL0hxJSEjOW5QdWckXT0jTCNWezIxeGt2bVdzYEZNSXFnL3lY''@;'; put 'put ''S2xucjkxPjQ1YzpKXlcuczMkJW1AUCNrX0hzfHt9W3NtNEBlTkVfRjJ9clJgVV4pKC4hMjpQJnpmRnZBY0J8NDM8W19YTzgwWG5aMl9meV9MVXRyQV0pUVYmaylWQjozSX1mZC93JEkvITdlSE1Jd1YjSVtzdiV1QFYqMnJLZCNJZCt2MkdZcmNfbk02K0k9PDcvVlVgRlA4ZWlfQCFSIj5gZEM2''@;'; put 'put ''PGZ3Y356a2FeW3lnLC8qUW9VNUxnTXojZnQkN3JYQnhhaV9GNyhMb3drR3E0eCNqcFZgWGwhSH4jaWwuVE5oY0BsW2NrNWhxXXJ2fiE3P2doJmIldGVeKitldz0rXSQ5cCJ4Tm82WDxFNmRTRHwlVl4kWVptKix9Rl9SOyp6RmJlMXVGc3pycWlLW2R+SHFZY2VLPSh9OVpNfHNRYFRDVD0vWDdS''@;'; put 'put ''P2Z+P1tNfElNLk1DNDFEXk5WXz0xJG9xejVDdHtfdSZCOG9mdU9ffj9uezd6L2pja0lKOkhwd3JQb01CY14jN2E9Skx2JHJiNn43N3E8JEJuX18ocnc1Jnw0WFdDNjEmLFJ3QSxBO0tkTiNrMEt5alZKLE4pLnEiYHhZWGowLCIiPn1nRV1FcV9eQ1AvUFVNb1EuWVM8NXNiZS9eJih5ISowUURY''@;'; put 'put ''fUo7dVEvcCRnQlllOGZoNE9+M3R7YVckakh+VkxUbWlfUFttRygxXURoTHs+QGxqOiEuW15NZ3RbcltUNWFZZThLRV5kJmBbKDoyRkA7W356JXZ4UDZqWDtdY3kwKyg/PHZnY3AxZDtxZ19xOXNgZG99SjF6ZTcpUDpxblFoP0B8TixxeWEuTT1MUntdLmsiPzdWe1QlOnlkOzFnQFVWaW0rcTo/''@;'; put 'put ''e3ghWW4vYmJdaUsmOV1iNFhbUSxhRzBEZDBZPypuMlNAcj5IayJBdnhVSyppaHh6RFAsKDZeYTRmekppTUgpIW9wfiZ1Z0lmdVpvSk5YYXBqPi55WDA1WjRvQ2J6b2g0RXVCRH5zZHlsbDB3RHhxQnM4JkR6NTd9bGRjTUh4W1NCRWkrJnlpPVVudGM4TF81MUVWJm92RnR1OVEvITNENS5wJk5D''@;'; put 'put ''K3xMNTEpUiosfi56VWp8P1I0X2BWcFpre2wyVmVdT0JIMHw/R0s+Ym92PEtZKmcqLE07aCtNV24vMU5tYHx+LHtlTi4iKldpYiV2JGtPJFtlWHldQFo+QzYsWH5nfm9sRyFbTFAoOCZ4NTIzNDdrZVAxfXhiIWF4Z3R7LztuMiVUfl1ARjwmcW1wW150cCJeVXBXRnV2SlV6U1I8VnBWeSomXiZW''@;'; put 'put ''UiwqOWN+aHkxImk7d3QqMztMfTF7YF5LOThDSFRKZU5CQEQ6Ql99WENaKXV2R1tWMCxVKnt4aV9gSypqKFhKeVNpYl4qeDpzaUpuSjlxYGBwOlttZUhLdWk9M0NnVzpkYlhRSzBNL15GbHlkIUpKRFkmLkg3WCkiVTtQIWJBMTpoWWBRNTcxZk1zW2RINSxPR2VZODhjI08wZEtbT104IiJscHkm''@;'; put 'put ''YWUib1peUismMkNPb3tSdk17Zll1ITgkKTVjRShCRCY8blY3JCp6WWVvUihZMDFLblMubzJoVGAjXW4mLkQuQ3B+b0pmS1FCT1gjYzJ+dnR3SmlyZTJYVEw7eVRpemx9bVZNVS91cGhhPDxYPEdiKlZUITNJYDJZYG00cShkUixFWUM8dEhYITtlYEN2bDBsdEVBI2wsbmxUOy9MIk4jckI7JXNI''@;'; put 'put ''ezUqMX5FUmo/UXsmRmtbZGFOK3VHaC84YilNZztuMWk4dGlzc0YmKyVYLzlbeD9UTDEsKltJYzpOYlJsbjpMI1pMYV0/PCFsO1pEVUhIZ3tRaE0+MDdKImVweypSOWQ9OXQySWddaWY+flkhMTVzXltJJjY9cDRlTF4qbz18Mn5AKmFQWC5KMClGbG4qKFgxa05sN2U/V09qK3AsKTFpNmZsfUVD''@;'; put 'put ''P3RLUm1bTSZNcSpRdTtrWiRFIm56e2xFZmBxYGl9NSxBVUp1UUlUL0NPfTprT0pQPFUjSGYlKmY7Nltva3EmfGVOL1JyLD8qZ0xdbXtwWTkoMHB9eFNOYFhVRUlwaXw4K1VEfGE6RT85NmhAaVhnX147Qj51OSpaJihkNnJEcU0mIlBfUUpGe2FSP2VGP1NRZyZwZCRmZSoyKXFdbk9SYUoyMHtH''@;'; put 'put ''NklpJWBKJj91PSppY1RpYyswWGhYVEVEUDp1d1sjUVE1aCg/TlV4bUUjTGwxUGByZUk7X2lTPkkzZC93LiUodE1VamBuW1IkM2ZVRzMwJmlxWlhvKEYqI0dxYnYvQTw6c2VhNGIwPWNle0kiVFp8eD4vcT9+aS9oKHd0bHgicEcuX20pb3ZKIVMxMDZqQl85KHN+bz4xT2tJbWxEdjVOb31RL3Zi''@;'; put 'put ''YzcuKlVsbml1RilvYj8hRSM5aXVYTiM5JlJzVG1ObSxNKE4rKnkxOHRdTXFDZ2IlKUNxQ3crJWh4KiVpRTtHeiRCc0w5ckA7c0AvS25KYEpyQWZ+QF5oajUjdSlmSGl0eURxMF4xb3NaZH1gcmE4JUluLj0xZTo2RzVJPH5KNiEofk5nKkg9M3ReXnl0VD8jMmgyUnR4bX5TYUlRKl9WUWpfMCNI''@;'; put 'put ''IXtuLEBgVTZ0MEFOdGREI0xbX0I5JUVMTn1Ycy8wcmJbbkpIY35WcEpFWEg9b3slZ2ZMYys/VXhjQmdUa08+JHhjZlRjdmUmVGIqUSR4SGdAXzlST3F9KGguOD5WQFdAL0JzPGA4JEVQSzIqUi5IcCRvdl0sOzF8dDM9flV2fWJPQV0+UVs/YGNCNyF1NXQqZGZrJnImc1pWKU1fb0NAM3hDcE9j''@;'; put 'put ''VkcuSndPN3lvcyxORnVfbGUvJEk9ZCluZCF5OTQqbWFpNX1DKUxFMWtpc05hfmppM30lbz9mN1lsJTMqRnRkKjNQWHFyYCYwN2Y/KWtEOX5fb0hgOVFjOWU1ImJ0YTQ+eXtUdG5PRUVCZEc9cllwTiF+P0dJZilEPzcsXVdlcG89JkZCYkkiPVs9NTsrT2BSRVJBWWMsV3FDJDtpRkl5Kmdgajtw''@;'; put 'put ''Kih2QSlrUElsSWM4YXM8ezEuSSJISEU3dnNZaztlajF0Kj0rMmFnSDslU08yOzsmOysjJGE5LFo5LFMsOEFNRmUuZD5eOX5lLnMrKTlVUlA+Vm9HfmRFelFsNkBNc31qR3FpRzFpNHxPKWBefX05Nj8mb1FvOy9fd2QyL09JInNkNnFdLEtiJDk4dEMhcW0uYXBaY35LJUImM15uUyFZYXEoRStn''@;'; put 'put ''VWMrRkEuPFVnQT5JIk4iZVZ0Im5dOlNFd24mbmsqO0dNSGJwPWg4OFosJjZlRyEle0p8RTBqe0xlQnZpaHA9WWolbj8hcyZHOl59ITJFQSNpMHQ5LjErMUwkbUBgI285OXNSSFluZVMhIkNjWkx3dWohIjooVVRYRHpBanw4OW5JNX06KE8zdGBGN1g3fEpCXUwsWndkNVtTUHVWOjVCRX5hUzFv''@;'; put 'put ''QmhwbGM5Ml5+bypRWWx7Yk0ubXV5cmF2SD1USX0wJUhHP2BsNE17RWFBbkROS0hQbjEyK24ubTtbMnlTPm9qYTY2UlNmZ0w6PSVzaT9YXWo2eFBXT1U1T1QxeiUvZ0UjTilOInt1e1NNYFRFSEZeOElLPDlkKz4yXisrd2pjKCg3Sy97KyEhU1YhOnlqNDE4elgzZUtFRkN3P1VzW2pNb1U2NFVg''@;'; put 'put ''QkNFbSR+Q2EueDFvWWl7XlklcVFuXWVFSTx8c2VyTEkhS1tVWUF1QCNEU2R7OV5lYUpXfWAmWmR2MUxEMSp7d1Z9UWg3Q28hKCxwV29gcUwseD88aVlZVnpuWmF2WWhOaiteVW46RjtpVUdOQyZOKFJmSF5vWTFPSUd8RmEibmlRVndWRWNdSDZuYWprXmBVd1NabzhtJn5aJjNAZ2B1dys6VlRW''@;'; put 'put ''VzxRNUNKTlB8SFdhM1dELmFqYD1FWDBKIShsMzpWdykvbFVeIylbJkklKCklZERXcylgS3c3IW1aeVdZKk5OTVJAdzNvTGoqPi44VSl0fkBqXzNYNWpFX3FzJHNvQk8+eHZydGVpZXRUJFI8L3JRVjFyNFZnOjx+dShXZlVhJUwuJnxaKk5wPklnIV8lTGdKVWpkZTNGOGFidXdWT08lclFzM3pO''@;'; put 'put ''e1Q9aHpfdCswaCQ3cERoVCFISHpQPCRBMyxBO15QbXxiJC9EckUrRz9ELEY7aX1tYnhgS3F5XWpwMi5qe2xDWlM1eUF+P15kcVsrel1VMGtXL1hISHFnaSk2KlFRdyg6YX1aN0VgcjREalUlMjVeLnVRfE4+aS5JbXtCMktTYFhhQGJeemVYS049I11bVV8jTi8uUFdeSGhvZn0lTTtENXxman13''@;'; put 'put ''NFtzJjlWVHdfezJ1XUlFYGcvKlBqLChzc3ZjTUlwbEo+QGFGRmEsVEt9Uk9+Z2dtdHpHRFNEOyNja2x4MWx6KSMwXnUwcEwvW2VhZ2JiSCohYC52UCFoeF1UTER8bSRwPlRlIjgwQ1pjZXZiPXssNS87XW1aej5HZF0pfFhaRlJ3N3N7T2sjOGlyd3dQZWN2YkloMFR+Onx1KWJAbGV6bTQhSUgv''@;'; put 'put ''KDdkKCl8Ok8mVzZQJWRuP09NVDdbL3RjcnIlM0tbPSE+I0cyK0ZLYypwQnNnV0lEaDdoTipWS0RydGxDQ3g2Oyg7ay97RihhSDNBQlE2NDFrR1Z4IWhXRF1QS2I7LnhYMyNmLExrL1NATCt7LEhxWTw4Kzw7cWRaR0Eoc3RSbz9IJlQyfHlEU2cvWV1zZkhqNjFPZF5nMn5nWUt0e2FzVS82fnku''@;'; put 'put ''QTxVQmM6TDEzYT54JDprcDNhNlFFUlJBNDE5Uy9uTl1hTCpKNThMJFI5Tnl5N3xxWU5kIWFbdDQjbFAlVE9rIjQ5ZDU7cFkxRXIlXSp8N3BIMSxrfnhZQksuS3hQdG52KnNwYkVFSVQ1O1RIMl83SCF2d2g1YjBdZUdpakgxLCMjPzE3VUEoI0x9U101NnUwe2EkQGlxOSJ2NEckLHRgMj1LMSFN''@;'; put 'put ''ZUxKcFNOTj17YDpaW3hoZXB7cytPRE10PyghaUk7YSxZYzFBdFZtWXlIZGtzQnlYNlhPRkdKVmsqdztKRFQzSCVNY05mX1VYcGZyYF55JXA4LiRmPEBrcmpiU19YJHhHSio0dVFgdGQzalY9THFAbU9SZEd0aD9fZ0gqWUo6UjRyIjJmJW4xMVdaZ3h8XzRUKmdRWjBAX0J7U3VObzVqSl5LUmIo''@;'; put 'put ''MXFjI3E3dEZ3Om5YcVBXT35NbUUmb2FqejFYNmtLLjBxLDElJTMze2p5djh5M1FaKXQuR3RqMytuOjQiZ3RBaG5EKDAsaVFjTmwxQWwsWTExPkArZGUhcE9CbnwxWjh0NipvWCJ6ISNiVEk+MSlgQCU9Wn4pSSVWYmlXe2MuakooV2I0MEVhOF9hLE4oMCp7Rllzal8yUzhDPlEmSX1jX15AXk5i''@;'; put 'put ''Rl1uQ08uJUxYPzVTSVEpe3hMNjswLGhZfGxwbENvUzZxPiVzTi45cyk9ey5iPCV2SFJqSmxmQmdTeSt8TnBmaTJpOkdHfGQmRzEoLilJKGs2XiNgLkRJQD5uN1BLazxgZSNAQyg8SUpYVCJnYTNfSClAcDl6a1pRTD9wfD13d2hlNWsjVEI6UUxTaHBZJGNyXyw4LnxaJHc2bmNbbCFLNnI6cGdq''@;'; put 'put ''TzQ/dEc2UmkhYittaSxQdEliU3lLI1hfRXk3ekEwWHM7cFZXbUFXY3t+VT5oYzN+Vi5mUyhEOEQmb04oJjNsZSNoSFd1VGhoZyozV0k1KjgwP3tgVmtwOUgqWHQobVQkQj0xMDY9YVpLfHhIYkNZbnRWbHxKdDZCfHM8OGRCc2JtSnBXRS5XdGd8NDJ+czomeDlnXlFWZ1R0QE1SSF9dIWtOI0xj''@;'; put 'put ''KE0sPDlnd1MkZDsrUnFjKGddQzlGWCxXbW4/bjg2Z34hXlB7P0NoK2tJVVdKJClRPkZKcXRidEhMaElELksqQGE/Y2k4TlheRzVTQ1hvYElQITVCPGJvJm9iejBqMUM6W2JRaGV8TXQsRW5dS0R2cSxyMU5mU3gwZWlSeW5abFJiczRSPW4uM25YYEpNNyI0bHtqaUs+Yn1Md0ApW2kqW15ZSCZR''@;'; put 'put ''KntJOWQ7VlFZfmFLeUg6dWp2Yz9KLil2RU9+Mjx3TGVGTjFxYl1AYj9xckReSzNLJm1yYUU/ZH1ZNyxULDswfiRKOl89QV9OKlt7KzBEPnxDNUxTOUc0Q2UlVFIocERdakYhQmtiPTFmVSYhTWtxMjErZit7eW9mMWh8fV5zaD4mUGd1KUg3eFRgV3RzMUxtN19FY1cvciNJX2FGYHciPmhBfXQ4''@;'; put 'put ''aSx3M1s6cm16fDdkXixxJGkpYn10SUJtOSg6NXt2MnxOREJDXz1TRGwrd3x2Y0hNbWIpXiNscD1BLkRgPFdQaiNSU1VGPTBiYWFbdEomMilfNGA7MnNDak4sdGRxOkt0RXROJDNVb21KRnV5djxGR3JQSVd+NGwmbUc+fTNuVUc/ezd4Kj8mRyIke01+cDFkc3RocGZsJUVzZkx4L2tQeXIoX3Uu''@;'; put 'put ''PjBKIzBReV0mdntkVzhyZkFhbEo9O3lwfj1rUi4+OyUlNnp4bVh7aVMmQmliO0lPYz9mOXJWLFdUVTBvdEV6MzdlKF9uK3J6TGFMVDtbXWxXJDQzMC8rIykkczEzenVGMVdGekNHZSFaKjgjbikiMGpfWlIhTWMwRz03R2IuKFYsJC9pZ2NzPlFARjQ9W0JGXnskK0plOmdJKEo3ZVpvZE9PfSol''@;'; put 'put ''LG9bdHxjUUZUblAvSUBvaE1ONlpWbFcwTiUlMnVgJSQ2MmRlWEZEL1IuQVVaNGlTZmNffmJFJTFBPWwpJTRQa2x3V0oiOU1CcC9LJmJeQipuOWtmbUBwc3crRFNTWTVecU8rcVE2PHZQRStYTipFNURmblU8KDhdLF5GWEc3d3kjdFJHNCEjQkUuczxOTiEmKk5na00mJmFOKHBPNSZIKm8jL1Rj''@;'; put 'put ''bEJGTkJWWDl3e1NqREF1RExsO1hdfDBicm9KL3JyK1Q/Ujd6b1hSJDIsNEkoXWV5O0p7dmp3N1pIKyZeQSshMFR3NUFtYHVXdzdQdl1bTHB9UExMPWJyOjMpbSIlY3NneUNIKyttQy47dVBnJER9eVowdWhLYjgmIWJfY1FkI1RWdFFyJlZ5QThzKl5kdzsqNioqbWY0LjF2L2dgKXRgQ1E0LFhY''@;'; put 'put ''RV9hUU9oU2wvMWZ5VDtdI2UvbEVrRyRDLHkpSSp7NDZ7cUZvKFBBbmsiNns+PCtOa25SXigxPjMva1YxU2VpOlhrRXExZSpDNkxQWXcobERMOD15Yn00STspZnQ6aCJCbUcyT3ZBbVJORCZwOkYpbUlEWTNoZypoJj9kP240aC5odElmfURyQ0k3NllCZCJxYFFHRyJLV3JrZl4kfiFnR0ImU1J4''@;'; put 'put ''ZlFhXW53L0E8VndhUWkhV2l0WTBmT0szSngjOGZDTXZFQjp4N01bSzhZZjNhJHh1Snt7W35FdlZmN3RxQT9AJDBOVmJpdk1UfnJGXXp4Nj4wVns4KEQufXVAcmpucm1ibE90dnM+YWw0NXYyU05DalFtUmRmYXdkZG5ifjwqcSR+IS5tbnMrWWN6XlEvXj9VRnhXLz1WdnVPP3RtaU9CaGNILHdo''@;'; put 'put ''PThJXmJCdi94P3xxPX49T3R1YD5mTmdZPj5hX3czYWB3dGEueDhAZCk/V09yKExSKiNfJUV8ZkF6bT0sV0ReTG5COCk/fTNMeF9MdllVazIib34rV1FCXi9wRjouJDo5TEMxfEVOOUx7UUIjXm5HcHhMc2MhKU1pZzVCYlBnRzU0diwseEVodlRfXmhINmZIUXY2ezRFN3FFcEx1cVo3cFk2WjJI''@;'; put 'put ''XypVZkE1bU1zPTBvfStMU3QzWzpAKVMuKXVFZzwkd2M7KFBfVWxGWnh2Jl9fX0h0O1NIM18zXTZDUSheUnAkKSZ9OjB6dEF8PzpyJCpdfUQhIkg6Qik1UzZeLCJxUFV+eyExSXRJb0c0UyNaUXsoOTBpRX0zb0FGRSg1MDpCe2YlUFYrVnheLiEoLElWIVdkcD9+eWNLKmNnPi5Iam1+dUghLzJE''@;'; put 'put ''X3IlKCRwIzBPJX5bVi54SXJdZ1g3ZS9mOl5aQ35pdmc9WS9QJkZFaHdDQypQOGtVYTtoPTE1e3lNRXAxVkVORFBUVEg/Pz1DflRXY3paUDV8KFhwKEtePzZ4c1Z8UkomVWlQdFtERFcuTVc7XWl9eH1ieiUudFFxV1Z3I2lWSz9HK0s3ZT92S2I3NzhmPVc4SzRgfEA7MWlNKiRNKGtVaWB6fl9F''@;'; put 'put ''WDUuaGFXLns/ISxiRzooTVh4ZVsoTyJdRENCM2ZjIWgvQEBXWk5KN1lVMjxbWjIuQV1DLzZ0QDNkYTt1K3RKaTZ8UGcmdkh0WisoazBKTShQYUMuMXddOW80aEEkd34lMFkjZH1QJVFlcEo1X3FSRk9QcyFwVSt4Wjk2Pk41OyJqemhuM0RmQn19X0heMlVkPF9EcEoiQG93K2t1XUl5M3cjRyMl''@;'; put 'put ''RHo8IWMhLHV6X2Q0ayYvJDFbN0RVfl5san59fCVZSHpXb29bZUNYeWVMdVJ6XWlbfTNrUyFpOmUzMnguRjlwMDtNQjxXLn5BRntOcXhCZUVKcVNmIXc1V1dpeW9HcTImKk9CUFAoJjdwI31OMzQvT0tIRE18OVVdfGohanAmeyE1cHVCXSNue3t1TUF2RVsuaSNFLnBCQzA/UmgrcVtVa209a005''@;'; put 'put ''OGNZMyFWbGdgW2pkWi5QIXxFfXlfVWhIKihYT1Yidj90X0Vnb19CIm9sWTkrTHtDa15vfX17MElnXWEiMjZCNlUrLCQpPyFHPmN5MGVxRGlXTUdZRzQ3OFF7bFVIOykpXTcraV18PCJsPyhHXVQvNDdIV0B1S01lYCt5OHtwckYzJHwqOm86WzQ0WjA4bE1FcGxDLm8+eDZkRDI5VW8vbilgfUc5''@;'; put 'put ''UyMjZmtvc2ZESiJnPkw0JU5CPj1WYlE9ejYxbFM1Ik1iekR1cVRTK3V7VFs5Jl46R2AxQj5odXxKdz5JS0p2ITdXcG1LVmhCWFQmRmAiVHVjSVV0QHZTbWhQPVIrZV5bfHBye08wRzlld0puYjh6UEBwIjE1MnE+bjNHLFZ+MlluaDZROTJhV29aSHQieXdtPDQ9MjUhOjN4MXJEfERNbGhKQnkl''@;'; put 'put ''UVBeNlokOV9aIz9LLkt5fURWPlF0TWZsMihbSHZOcWgjejJxWDw9dTJ5VH5ra315dn08dF1Jek1tOXNmRTJ6XmJgTUsoTHchZCU9LDUxTkZaTlZIUC5BIVcseE4ifllnSiZgZ34zLnVvSnNIfSppPD9oQk8/aylTKEVYRispNjNXRlImfUFTKihsQUB3fiJ3fjJiUTtSR2glInAlYUNudD5PalUj''@;'; put 'put ''Rz98Z1NrV2h8PFFvQ3hLMTJHaDckRlNaQl8odSwoZztObT4iYnp5X1pVKj98JjhqdC80YVBkQCteRnV3IkM4VDEpZCZzaSlbKndTJXdQUy40QCsrTFhKJUYoXmcme1NVO1BqYzxrXlV6JFZUYVBtTzRBIXl8NzN2Nkt4Y3F7PkhAPklNRUZGRzdJbjZGTzlCbCk5IVdYL3E7WFsqUVA1cSlGX1M3''@;'; put 'put ''UFclKDY5eGs4bn1CLGIkM3ZZb1JaKExlWXRBNm89P3VDKEVIWDZFTjpxJWE6d0trIjQ4ZjkhTEReTVEpPXNPRWlIbiVvfDk8dDtrTllkVXZNXn1zRi5hfkcpNG9FPypPS10ldTs0STc4R3JzOTxGJjNOdz42SEdZa2RgSENiSjZ7b012TCFJQnFvZ3pWUFlFWlEiIX5QZDgvQFlWUCY5Wm1nMkp9''@;'; put 'put ''XXpEe2o2clZ7VCxjRnU9SEdNe2VeWU05W3IoKVRaPTE0ciRUcnolbCFYS2lHJEc3IyMueXghPnR0WW01MkYmVzhVXXZ7fillfHt6XkNoPzw8VHExMHIlR0pYXzBuSjNEK1A5e2prPSF4aHVbIklzWnR1Rkpne0V2fX0xcC9XT3pUUndUKClUJV1DTjNgSlRFWjRDQ0YsaXV4RHIyP0hzdzEmWyZZ''@;'; put 'put ''e2lEfiNdXzZsQWtIY14lflo9LH1IXkxCcV9mO3B6UyxNRUxzJSYjK0tfO310LzYjLmVyX2ZeRz5lXTZVR0ImZGZPe314SnI1PCR8QSk2TDtdXSNhRVVxL1hNTy9WRSp5cH5tIV5zXyxIXz1iVEVyUWd0dkttMjU3TXBqY1o3VGgmaklGcHBucFpyYig/USFwP2FyW24oV0JyT0suQGV3eFQ3YjZr''@;'; put 'put ''c1B3bkZaIVE7IyxqJX0iZlNFYkxzLn5PdSNxOSNpUTJBXUAsMyI3PlMvMnVVSmdjTTp9fk9HYVh7LkB4PCZLd1BPSmBgWn0kYCUmcGZ5RTR3SjQuITd2Yi9LeDwqVVZyJkVkZS9IbylHJDsmREZfMiNoVHIvaCNTXVIkOEleOkpvPD5nKXBqJjZRNTxNQGFAZWUydUh7UlRpMyNlJmY7KmRoeGdF''@;'; put 'put ''JTMuXVV3PnEzPiNka19daVQ0YitZRFIyaV8seztZOUxsZGEhYTFNN0hfOyEjP1Y0NTxtXzdZWEt5Tn5MRkxUWz9lV1FEWil4ekglQEdDZSVGMzhGYChMZ306W3BrN0gwKntPVyFlUWlZQkpNU3M0V1p5Sk5xbnp0MUB+fXY+d25AU0ovPWYyfSVgOnx2JV01dytwU0BmTEVLdzI6ZHpWRj99JEcj''@;'; put 'put ''NmZiPENhe2FCfjh6fF09QFthNV5NOWp2dj1LMWFjSmtEREdqZD49Kik8flNRfjdCfWpyVk5FW0JFRVNxKXM7PFpgVC5ZRihALjZyP1hPY0k8KGhoKG52UkouQGVPTz1QSUh8KGh5a1ZyKlM6JmlBR1phO2pzZCNwUTwuaSksU24zZlgsUXc3TSswT0RnUCMzPkd8IzcoflRmTGBZZlppb0ZkSGFC''@;'; put 'put ''TnIjKnQ8I3RWXSU+NGl8aUBiTHkvUnE+MEhZbDlRW0E9ajlpLiRAYmRBfkc1cl50cFIoQmNtNzh2STwwWnlePVgjZlVQUj1pPWYkeml1ZTxabXhTLihaRzA+O2dNRU5ybkowQXlIW14sekhQNyY+cklbJT0ia0Z3WmtSYmVyOlltfSVESn5BcCMvejsjImtPNVNPWnE7OCFHMFQyZDVSeWFGbj1+''@;'; put 'put ''OFJ7LjJbYDV2NC5NQ0R9b1B0MlgzSFtIcW50XTpWO2AwK3h5QWZ2JUdhaEVUY2xAIXBGfFRtZjxMR2wkbiF9XippOWp5TkdiPVRadG9dRnpgcGwuJDZZdWl7cGkkVn1SL1pbcHFiQ2crVlZidDtvKEF6NjciNFFUKT5MJGYoUncyMCQzVHRyKWtpRkBse2NZRFdFOEY2aEBCXlI1fVpOdDxGIjg7''@;'; put 'put ''OFJES1tmO2BqTEx6NUMud0daYGI+XlRHbW03a3FXfnV4d2FEeFcreUN8RyVNJmU8XXBVJkJEQml8fGY/Rnx2KkA2ZENAfkwuJXpuUGwuVDVVWzFsJTNTKmR3ZndROVVwSE43Xi9eQEUqMVJpSj1wIWg+PURJKEx1cjUicyFpbGEiV2RaNmZlK1NJZHUjdmpwRkMxY3prZWl1a150SjdhVSlBbl1O''@;'; put 'put ''ZFMzYlAkP2JkfU5RXXljVWM2c05ENFFYRDw+cjEhe1k6OXckcHglS2FmSj89X25oLitWWyp0VXIoZispTzR7RTxBbjFOW1c5enFSc2BqU041aTROJWNkMSskOn5scDQrIkRSeVk0VihnPnZ9NU02XjcrODowYzkrY0hwK3xydHt7JiZdVTIsYCxBNGglamwiaihdaF9AYkxtdWM6TDxzLyZzdkhg''@;'; put 'put ''UThuJUVENWtjZ30uWGp4S2JKZiY9SUVCZWpERT99NHs/UkJKZXVrNV5NMDplfWpJMlV4Mlk3LFYxbyFtViN+YH4oKWFDXn5Ze1dCK0B8anRFcmYvVjpiODFVflhTc3NrNig9cVE6aW5za1FMd2Q3VkwpKjdmPSN6RyM+dE9nOnJ+c3I2OChuYC46VSJTWSM9STNSaXpnMDROezBqdio+NUZdSzBP''@;'; put 'put ''PkZNeW5tLiFfIXMoekQpd0lUYH4/QnBTT0x8MzJxdF8+MU1jNm43QEE3UHpoKExLVUxKKV43TFZXY3RDcltTWCFIRTBuKW1JQ1t1MVRDRm1dcDd9YyNxeihsYHcsUlljbltTTSJtPVhnU0B6Wk5zVVkwUXJBSSo+SVhRaC58SkNmcE4jTGwiS0JSX25ocEo8OzlqQFEqPV06fEVNX3VhUTwsbUJZ''@;'; put 'put ''TixQLkJ9bWI+OHpJb0h1WDNsITV1KEZTP1J7PEV8Y04uU2BKKVZYZDlgQSQ8TitKU0ElQXhvZHE1L1VvJmdQSzZ9KSZOTUV8ZkJhNmhOMHZnVWtLYiNeTFc5WzBNd1U5UT97YylRPlBTRy89PmpaQEpMcD02InFvLDxhV2ZxYCYwVDUxdiM9JGpFRWJdb0R8bzBTZjRXS293Q1MsTkJrK1MwZDVr''@;'; put 'put ''R1t1dFtLNjl5JiljWX4/cEE4RWJsNTRQVVE8XiwsW2hlR0pLXUpsTHBIeF0+UGd9eWtXalN0aCNbeF1TO0h7UVJSP1BpRzdtLigub0U/P0k8MmcvS15UODxsPD8mT3h0LkNoUC9jbjdJIzd9YU57fiMvMj9MMExeWVFVMHgvQm9QbHhCSjV3YSJZcUlIdjRaaCEuYHJTXU0uXy97cGAsK3h8Lnwr''@;'; put 'put ''I3VRek8kN1lyX21+dD9JdHRJVD0/TS5bQDosbG9AXnFgQ3l4Q34qdzhmOGt+Vjt0JmdFOWwpaiQpY3p6REdhYGd6XSI8KkMhdSkzdkchUSZrbEA4WTxXRXdEe08kXT5STV8kbXUhbThpPn1Sc1Aob212XW5XcFZweGNIU3EjQWxFYXJgfDxNRjhQe217ZFR8NUB1Q0hvY2xNaHE6KlJGcjgpcEVV''@;'; put 'put ''LiRBXzxwZ10xKT9HLGM6VEltQGFbbGthRndEUGpYbXshKTomYCMoVEhpN31IVjA/IXBORSh6S2YiZ1tYL3JobmVCPCFKazF0VUliKHViPWhLNVFQQGA6Z0xGeWZHbmdIVG5WSV5aRmdBXyN2I3ZFIy8wYW8oYiVgd1tEMCtlaXNXM3NxUCEmXWNuIUs4VHk+Lko4JnxfV00wV2M7QnBBL2FWTipl''@;'; put 'put ''S3IwKmt7Uk5oRVZRTiFNVDVreWl6VVAzNjhXYy9CNmtvSSMiI25uczRBKmNhbnVOMip0flRsPkYuRmkmbXlaeTM3b2t1XkBlMTJ+ZXZVQHQ2LHI3fHw0cURZS1Rhb2JiZnlGU3I5JjZWMCZ4fS9tQVg1eGp6fCFxUTpYQ19YdnFrWmVfWEJlKiQiKX55UGpjJlNfLzY3fn0zdjhbTlRNaSUlIUck''@;'; put 'put ''OS98dyRLMnE1YWNmKGNTKXNGSnwob3tgSVMyVnNedkFpPW5wTj1AL1FfPm5lfWhlZHI3TGpQZm9STGFFYjZ0R3lETE4pbVlwNGddZHhva0U2ajlCZkNoQy9QXyhqVUZpLjZfNnUpXTUoN1R7WH5TUzpUbiFoOXdNT2N4UDNSJk01LnZLUEtANSFNZTM5cXVpSEM3OFd1T3sjL09UZSwzQ1h5M1Iw''@;'; put 'put ''Mn1Ce30/RSxiUFVpIWpbNWghM19tNC4rJUBuOCp0VklNMEVsTV84XXYzNGFTN25dclRmMDpLKGshN3QzfUo8S2dqamlTJmdlWTJkIXlZaX48QyVqVkNkRDF9M1hpc0lBJDR1fnk5O1lmS1Z6cGldN0l3JS96b3U6Tz9FdElYJT4sKz93Kit2QndHYEt8d3tnfjxhQmlzV0dAJUI/cHBQRyhtdChH''@;'; put 'put ''QlM0WE54dkhrVGg6KGtxNnRselosM094TlpXb1RGWz1gUi86QXY1azB0JmY0fjYxKnlNaXBNXkZNbjJ2eG46O0tAaS5ZYF1UNTxgalpyIztpLFdgNH1PZncvbCNub1lQdTNvM0N7dlNGPiFeVnRkeVI4fSpza3xINTZbRTM8VFBIemYzPltOMSNseXFIc2tOQSwmQSsienRGKjRgQVpyQGhdeXpi''@;'; put 'put ''byNtS2klcVRmRipXMk9kRHJEWUBudVBMLEVmYypKWyg7WGM7SW4sNV0qeXYxQXxnbVA8fW90QVdNSW0jOSs2IT1tSmNWP0JJdzl2LmBuUnFqITw9YWlBRCw8JDJbb1RtenBHTUt9fUVKLj16NyU6Lzp+ekRrUm5lJC9PPixxaD1WM3Q/cztGI1s8YEJ6OkU1KzcsPWFdV0tiPHIySX5iL3MyTHYp''@;'; put 'put ''ND9HYjBfZCw3MzRvZjAzRDBeSGd7XV5qMkFjIml6U0U6NFlRNyJHcXFYOEpVRUNrJVBwVl9vKT9Zfj57UiMzbDpKaTdCMDFGNkthLH0ldzxnK29ba0Q7PTBUXT8xOCRtO000Tk5RRXNAVT1tJUhjNitvOCJdRkdxTUFqUEJBSTJReiEmP0pBaDphYHglRFs7KixxcCk4R2dTVVJnUSpGdHh0NG9E''@;'; put 'put ''aT5EKztyZFU+SExWSF0jXTF3MmRve2NESHdyYSx+NDBgTHpjcSpqdEIuMHsiIio2NyhjJSkiMVlaVE9OQHZ8UUo2ZigsTit1NXVhSHZKJkR7YSpBajdwW1tlRkQuRStTTmI0NFtXb1Y0P1JKZkBjLGdCZV5hdS4mM0RMXixIOHYqUGNxTGIqNjRkNl5xalV9SUtkPzRiMnloczduPU9ELlsvVWNU''@;'; put 'put ''NlM1Z2F1MU4iajxNKWgvOGNdSHg2RzApeSpfTjRzUGMrQDIxSlVdJm1VT3MyMVV+NE9MMVJMQjkhe3Q9VWpgcTkoRks0T2E4QE8qfElpISluT2pTN2xkOn11MjckKU1DJWhiTDRIWWg5Mz0sInBscD5qdGU8ank+TnxRREIxSi55XTFCLz19UDd5On1xbHAkSU9ReHEvIWd0aEVCIjZDWGlsRjJ0''@;'; put 'put ''PjtRIltTX0hkOXtoRSxvYDYvYDBXM2JAU2YsYzRJJi9ibXN+PkBjIU5ZeTdGJFNfNkgiJFJ+eXVWYCZiNjdgU1lSQm5eIkdtSktnISl5SE51WUlLYT1MRDNHczpaY1Y9SG4ofEBmdWZ+UHcmJTFoSkhvYTJRRnYyN2MvJUgkLEw7ZmhKTUw3eU4oOGNXTyxsR1FFZkRFcklDQVtWI3pXMWQhRy9q''@;'; put 'put ''KD55b3tBQTI2LigjZig3L19UVl8xeVgjQTZtLm5xZEwqPSZROlBGYl1ZXUA7cnZFPSklLEpHbCorfWF2NSNobHIiP0BgS1NkTHlrJmVSbSlVTVt1dHhfczpPMWdAenNIXn5qWSE0aUYwP2FBXWI8PHdCe2Ftd1k+TE5UMU8rWWpadTsuU2FdOmdQTXpqRSN8fHxvTHl7RCJvZiJaU2ohX046bEU0''@;'; put 'put ''aXN2IXdKVUcwZmJDZj0xWSpwW2cuZjEiZUo6c3o0UlQ4JWVvJU9PL1I6WSZubC9PaHd7YzssNnYwLF9LOlZKUz9iTjMiQUZ5S28pdCFgVkIqYzNgV0d0MXpzdXspPHJQSFlkS3A8TVsmPHlUKlZtV0Ekb0wydl9nfU57e3s4LkhYY31PV3l2OntMfC8oWT9HXU5kIzRjRjBkWF5qLjBsSHQmYSMu''@;'; put 'put ''ZEZ3WlRKeT5oQEk8fkM9RX1AKnZXfC9feGh+PXkvWHxDajhUVyVyOH5fTWRfUVssWD5ZMm1QYnBtQVJPVHRnYTZPTWVxeEpDNjxqeTFkcChOeFd1PW82cl5FUUZ4aj87K0xWMSVpJmAscFJUIjZZUl06T1JhT3ZKT2pWdEQ9ZV0xUFNZOE5hU0BKdCI8Smxea2NISGt7OnVBQ2JFNTx7ViZzdE1V''@;'; put 'put ''Y2okU0k5JjpjV3lPQD52ViNRQTd8IlBVQ01XY1skNktNWnB+WGQ1N0dENmswLiRJV0BQSU0ubmtiKW43O19tcEhJSXI2YllYeDNtRixfUkBzVjRpdC99UU4/RG5MQGtEK1AhJmE+c343MWlwPGlqYS9EUihIUlI6T0VkY0Q5MyhjNlgmTE5nKGZiWD12JDRaOyhpYC8hWltuYHFTMiplK3UiO3lf''@;'; put 'put ''I1pUV1tSY2BTbXVXdTo5Q3ozVjkhW1RMPWhXW09WMlUqRXJgS0MibVV0T3AzWnFRYzhmP1l8fV83PUFGOlhUbjFCQFFXYmAvcFBNPWpgP3RZOENbc3dHYnVzWmlkQk1lM1pCOWdKSCR2Nn48NTFobz8hMGFvVGQ1OEhjaWU2UCEmZTVfbnEsQkRNVUQ0elBzY0IkNH4pR2RvUmtnRT1tMU8/a1g7''@;'; put 'put ''bFd7KnZhKVlVSTdMJjlOaj5LOW9MWm1BJncjd3dbcmM5cGB9dEhibUVqXUpRLysqKGdHUlFyLndPKnh0ZjIpcDszRkxyZnd2ZUoqUyE6eG0wTG53eUlfQUZgeXV4YERNfnByI0I/fHlGKVs1SV8vbkpdQl9UKHR0fkslMHV6ImJoXix5I3ZpPzRsfjIkfGUkI2o+eV5pXmEvTW00QWtyKXI2dUhj''@;'; put 'put ''cXUxZW1IMSZNIXVWV1VNTz02cT5aKV1od3BBMztYZDBMZzBXZSttSk8vRUcwcV4hanxuZD5bVDdVKC9ZRDpaa0xEQnI3ZWtKVChwKD9lJSg1YXl2ZHdfITxCOiQ1fnMkOHYzYUNta1tuKjFSKnw2XTl2OnAwQ2VDQiRCYSwzXnFedjpWMzZydiMuMn5vR302OSJHXkZ8bn0yN35IMGc+JDkxbzU6''@;'; put 'put ''QyNJJmJucU9RTENTZ3JNJi46WXJwMVlyLyxHVFE/dnQ7aTdgcllYMU10Sj0wcnxZOVUkaCx8ciZMQ2wkSiQsVyZXKGpCfChLfjJ0fURWKiliQWBxNHUhOzF4OywsQktbIlVGOjBCNnBfVU1LbGc1UGZgK3Y6dGYsX1dsMT5hUSZlN2pmPSRwbEtFTE5JJmZybG9oZXp+WSQ5VUh+LndyXTt8P2hS''@;'; put 'put ''Wl9QfCYrMmkuUkJQOTJwPTYoQT5LNDpxbjxrUnM4d3ZTUkxuZl9jPEg9OzJPb2YmP0hHcSp6bik2a3dsPG9MNnMpMUQsIVMpYE9aRXx0YnNYJWc+dVcuI0Fgd1RUJDIqTSMwUlFhYDxvfmQ+WWpqZm5mdWVoSVc1UUNkWFgjTSp1cC52WWJXOjE1XTkkPE1EK1JbfW0yfntaaXNlTXQva0tBYzx0''@;'; put 'put ''K2cyJGcjcTVEa3tVM0ZHemtfeDkiVVkoZXhEJjdKRCxPfSlUaV90XSsmdDkjOiRLNXo6ZTxhOUliRE1ScndEekZkOjhHeCJwR2hwaUFfaVhmSSNOUGB0OE5fXkdebyxMfmFnOy9qMV4zL3BJe2VeWXwqUm1qOUNmZn5CMDNFUDZDWWQ4X154WzFLaT1eKHtjezVhfWojZ2gka0IvT1o8JDhFUiFY''@;'; put 'put ''RG5dJGlfM30+TjtPRm90N3JDb14jVmcsaF93bk5wQXR2USU4UW08cVhHbXw0bXVEUGA1Nzw9ZzY3IS8iVm1keVRqdGw0ako9PnpfNUhWP2p2QCRYUSRqRSRPNzQlZ2BuNk5PelY5dSt5VVprL1dwbClNVVhELntfJTVIZzZnP0dlMXl0bEJLKGJNa2tlfC5vdShdX0hyP1kpMWw6JXZ0YXVsYnVL''@;'; put 'put ''ZVBpVGlKbmpGLmhWOjE6YE59YX1XMGJEelBAUXRhU2c9QGx1ITN8OlJiW2Jmd0pHWVAkJUwiUVNlI2MyR2BLRlhOWDZGJDBKSDR4XixSbnZiTnFmdjhve2EyQEl5fmBGRHJQVkNzM1VIRj4rQWtLJW0xPnRaV0pseSNnT3xuYWE9XTg2clI6Q01Lam9hJFdWSy9belZ2NXx+W05wJmddczNVZCFZ''@;'; put 'put ''cn5jcTc3L09POmBeYElbdXQiTU59X3Z2d3VSTFFReH13Q2MpW2xVM3g1YFFGRSxUeHx5a206SC9STHkjWH48PHRdZz5SOn19O30/ZDlaM01FXlkwZzBlLyVkR30mUSZKJTI+MkJmNzgvWzwsVXtYLjQyVWgrTlUyLjUmTEVBT0JbamRAWyFnUnZbL2QzMGtjI3g7cFNjJlNFeUNkUEtYYkZAYlok''@;'; put 'put ''X15hMUtTTVI+WFpYdns0bis5fmdMKF9NMlYyYjU4KCpdemtnTzA2KT5KcHMuKUttQTs0S2NtRFNrRjQkMkpvPCUvTEpbNTo6cU1RJSpSZiJ4Y0c2bXc5KWZzbGpAXllLKX0/X2ROTkJWZ2RAUm1WaTdvRy5MS0dXLEAvSGxTUWEqc3JXL34rc0xkbnx2MF8hNW5ySyZPVko9RzIvUiU+enQ1RWwp''@;'; put 'put ''XzojK2pdcUA6VEdmSlpkJWFgdExvalZ+TCh1MDYjODckc2RQTEB1KHJMJTA9X3FhZSFNY3tAdUJeXyIrTV5hampHWGt4TyYvIl43V005ZWZsRCJIQHF+e25OZEJYfWd9eTZpKz9uWDgyLiohZyRYVFcqanpsM1cxKHNJZE53S0ZsSm5NKFp8aDIqRnMpc3EoXWoiPGB2QF1hOk1uO2ZhRmlRQFhX''@;'; put 'put ''a0V4Q2w8Ok5odnBxanVVPWpDOEBPYD8kN1Jvd3pld3crZ1oiZG9RZVJzOm5tXU52dSUuNS9YX09RKkRtJm91MltkJF1oKUxEbEtlRENqNzxZZzNgaSg1eFZZOHdffURAeE9WamxCSE5nMl9rPUZGI3QhZ2xjTXxLO001bWdgSU1rMXs1T189PEFOSGQhKywyKCQ2ZGpNJnB7MnZnWC9XaENoT21p''@;'; put 'put ''KChYKE1yWFFCOVdrNCQkVVAmMldGRWt4SCJoREh2VT0sWE93OEJaKXZvRGs2b0hIYyQjWENARHpSIjUyezFkIzw1NTl0VkxpRzNUR0BhYW03WDhIU0RSME45SS5YVGE3IlJZJFVDfVRQZ09xYmZKRUlGNn1XPXl9bFkiN2BKNDRQQUxSTnAydUNIRTUxRj5oX2RESyZiW2x1aX02dXg/KiRCTV93''@;'; put 'put ''YSppOU5vczAmKVVhc3FWMzd1WHZ3L2VURitvT01BYGkpfUshcTtvdmh1T0A0az9uekczNHFNeHokMClmY21JMH59W1VbMy5Jbi8zVko8KWpLJGIlKzhRbih+QSp8a3Y1MF0vVG0xYHZte2YvMEFuRFQ/Oz08NVNoWG88PDZxUk1xQlQqNzlYanAjSV11RyV4fDQ/ZkVwa0RJPChgKVNtKERHVzsv''@;'; put 'put ''ckVPOyZNRjFyNEVOPSVIIUM2OGNYek8rPUczKjhZM31sNTx7JSEiOkkoPGBXfEkmYjAqaGdCNTRqXmc9NVdwL2pmdTg4c2J3fTQ/Izh1LCRnNX53KUZZenBpaStUTWhmaS5tampzVEU4PikuTHApNnA+UUVEYlQ1MFh6RDJrRDh0VSxoOlBYemUiZ3VLYGVvMnVjVWpQO2gsaHg9Ji4ibj1DYm1h''@;'; put 'put ''JkFCOnErM3tpc0ZATH0xeiE0MTN4UCVMe2gpdUo4KGMsNFpmSSpLKWwrfl0jQCNmI1swOnksJjFAOk1+TC9GfXQ5aHU2PEB6NCVoXVZXVC9AMEVXeCNrUGN0a2ExVGZVVWJyb285UnEzS3wvNVU2aEZ+V2NtUF95Uip3OVM+NiUuKnRZckxjaHxIeWlPMnVqcGVQOjUrWGNtNmVLY3I/MUp1TSl1''@;'; put 'put ''MypveF1OMylkKXp2VHFZKkdSVFcyZjppfix2Wit1SlNPMl9qNUVtTyxkJDJ4MXl6KHpfRnB1cnkiPX12VilmOyRPUkZHNEcmemVUUXZFN18xIjV2Ij1CazNgZUAjVyxXcEZGaWVDSVhiMnlzTFNePyRnVjBgQ0s/NnI+bVFJMW0rKlI4WUpOM0plZERIJl0sWlJlUlU2bGR4N0ZkTDZnb3g3LjBS''@;'; put 'put ''VDlUPWZzVTRCVWRPI0AmTiNwbkQ2L2huekVFMWYqfFZ3Wl1OZnhJNDo3eFc6e1JIZnkxJHNvTF8rOCw5NEdgPmd5a3xaRkdBJGUxcXYqfTFgPERId2Q4KSxAIVRedSteME1zUHFsYE9pWH1BTEAhfFp0VkJuNkdkNy4qX3l9bDk9RCFUb19MMVVKSHhQSFZAVGtjNGdRY0U1TSlFWWZyJEU9JS84''@;'; put 'put ''ZEQqbWw5bGBCJkZIYl9fdUthe3JwSz92Tl0lengvd351fiZOKWIrKWBwRXFhWylzeG8yZlVLS09HLFQhbipkWjwjOXY9UG40Mz1le3ZqU3IvQDJqfjhAWl41RV5FcX0jTmA9In1sIjk8WnVDSVdtZVN9WyptdDJFdEc2aSIoWCZ9Ljh1NFt5O2MmWDFVWHNsKXp3LyxIIXBUQEJrSW55WlN6NkMw''@;'; put 'put ''MDZxS1V3dSpje2RYTyoyRG1HcFIhaDo2WH0uRkoldEdFb0JGYSZyV1FzZytzWGpgSkAzeDNGL1BHbj1vfDJjXlNJMz9sUWk8NnxacF5fM2ZHNmlPb0hfcHV1WUBnPk02RH4sUHBIZjUsK3oxUzZTTmE/WSQ2aGUhUFJjISNbVVlQdCl8VWVbKlpyaSUzP2JkMjZfUVtuP0pCfUssU3l0LFY2JV5G''@;'; put 'put ''d1R8NndxJiNjaTZraUx6LkpeKDpdZTA3MyYiazMhQDBmOm8kLmxrI2trMGY9UVp0OVB6RVd2YUkyYGd4Lm11eSosSClEV1gjfmhRXll8SDxbKC5TNk1bTTBqPSErOiExZl56cWp3UiQ0KDhzQF5ZZ2suOz9yTlQ/WmdrLkFRNkRCUFA2YHBiKzcpOjQ0dzdadWMzYFJjMFBzdjxyR29TcmheZWFa''@;'; put 'put ''OHFoVnMoUDMiKSwlJiQjfjBnOT4kNiQoQDFCaix5O0BQVCNfJEh2S3YxdjBtS2QiZzFQbT1AdGhWOk5wTHVROk4pSzteTDR9TV48P3BGVWh9Rn18UTVjMTY1MFNbRH5aIWx1WmVCdUZQJVB0SVhNfF4iSkJPKWZ9YWd4S29+ajRPaTA7OmEzKU9MYilWY29aZGhNYUY+MjBpe3ohJVBwZWM1N1Q4''@;'; put 'put ''WzU7QCVxZVhhZykwbjE7QFJdRzQ/OkclOCtLfVVAO1h8Lk13MkNIVjl2YUlXdlteLiFgPWI2TT5VR0pHcyRnXSomPTxiRno2fURUPmpMQSYrMUtCUihtKmddRGtLUjVlTE95NFlQMGR2NTF6c1ZxYy9MWVZ0dHRwTzVKQDsmPiFESWM1SXMweWRlIWh+JTYuNmlCbWJGMEBOSF1yS1h4dSNSLGxO''@;'; put 'put ''a2skTnlARzIuOFN7PiEvZmldN1hTRihhREhzaEZIc0dzciokSXlqKGthM1IsKSFSLkQ7VCowX0BDLkVDLHluTWZ1YWxZIj42dXk7Q2ZUfTZ1OWcuNXhheDBObHo0Xi9EZ2lPVCVLYSk0X3JmZ1Z1TzliWV1vTk9lIXNjSVhCaEFxL3FfbyQzRyFAVz5yXjhWL1N4MkIvNztFTVRNZ0ZNWmBea2BR''@;'; put 'put ''eDI/I0NjTyw3LEJYUjRwInBmK1JnNGFae3BPaTxLdTsoPWdqKWo3IT55dTFhNWIpdExxWldNJEo7ViR8dCpZNWouJW1aJjxyIjk+Q0YpJFhmXm4ubW01V0UxWiRvZkZqWUY7JSIlaWVQY3wyRENqUVJ5XUNIOVMwW2pFRlRvTEsxKzgrYCRZIVpAK09rIUVFI0p2XzxiRTxaJlU6OiRNaXBpaTlC''@;'; put 'put ''ZyhoRCVWPzokYV0yQTRMeXVUYWd9L0ZXKUlRdUBdK2JwVD5HJV5bK35SKSpDVlgkSXA+KEBTWUh9I1F2WywmS3wvPz4sa3ssY3t2PnByUjFWQX04QGFWcXU/IW96bUYsMlYkUnNOTkFgQUplQ15TKTMzJF9iVj48RFhzJmViejE+RX5NeDpwdUY/d2ZOYFNfUWU0bEBBajg8NjB9VWk0NzMqajsm''@;'; put 'put ''aztzeX4lTFFtQn5edFR4TmFILixwfGZMM2kmZT5bTm5DTnU5dllkdSJILylna3k5SUJCWFIhc1hvTTt9O2JBPk5IS2N9VTFKPWkiR3RRN1I1SUYqUS5PYktpQXB8UTloNSpMW2xxKz9kZU57aXhqSmpFSkgyMk9MIVVhKW5bTW1PZT5UdiVHSHIsYWBDLlJSOmFXdkpvYXpQenVSJkdieTkhakll''@;'; put 'put ''TyNMPHhKYHskYD1kIz5URCh0Rnw1MGBmYiJnWD1IKXZFaXIya2IudUdeX2s+c05iaUVLSCQhfnlxRUd3cUVvKUdDRFNPWHlOVyk9MERKYXt6MD1SQ2JpIi4qQmtDNGtfW3U+YSJxfXh8S3BnfEJ9bjpnWCk2WHdbLnZkN0dPaUlqd0BGPnkjIyhdezU8Q3tWKitJPixjaVJbKit+fCg9P207JlU6''@;'; put 'put ''djV3QEgpKEhGVXd5WGpgMkw6NXZ0PGh4QF5RWUZ1RC9Sam9Pdj5LNGdFVk0iJkM3b0RZTT0oc05JPkk8dmJ3QFI/YiZJTXR4MEklUE92Ym1eXkFxdn0xMkFUfHB8SWh4cithLkd4LHIlSFU1XUxmR0lVIkQrQWohQj9dWz4jRV84c15vSk15KEJ1Q3YlW0d2JnRzbk5ZMjB+JSpqJW4vQ19aZHVA''@;'; put 'put ''Z258fT5uTURZNj91Y25PI3t2VUIyQHJMTjU3bVloYkJxdXJrektCQm43N3crMC9OO3d7M3pDWiY9OSN9cD9fPHRYQGQrfF1BPmFlWyk3aSo9UVRGYUBsSlc8XiMwTDgjcXE6OktudzYqZjxzfEJ2V2pdXy9yWVlkekZnUW1sU3RlT09+UnxVQSFMUGRrdiJEaEdIYTojO1ZCMlN6fFpVJipKJUUr''@;'; put 'put ''MlJEXkJnQUUqQ0IuVTR3bkBpUippYSouYSEuIVVhbEo9aVh5e3I5KUUwK0xyNExeOFExTEAqYmhhN2shPXhENjBgMEBpYEJbckIvWEAwRkNNeDlqemRSWElFRUdyaDo9MVp6I3ZaVHR2LF1qZylde3xdalZlSTx9d1MzZVNxRmBaP0JlflVvQXdxdW0mckZBNDg6QWsuRz5OT2YkYHR7cDp5OStY''@;'; put 'put ''UCpoR1dkaThqblspXzpZQVJiaW5baCtOT1FTN3hAY3NPSztdXiRCdT5IJkghfDpgNHtvSjxsRCVufUJ4SlQ/TEA2eEI/WTZMSUhgOmNve0ouZVZIfW5ST3QsJTpmLkliXndDYEZINDhfbT1RNFs+SyRqRCVJbkUrZ2svWTYxSnw1T2ovak8/ZGt9dlYpKFBmMERkTixbMWxrTXh8bkhBWjhjQkE/''@;'; put 'put ''NjA9bHlZfj5kOmlWc3Y/cnU0KVtoMyRlIVssc3glIV44QmZNdXleVzlVd0BrJUVfMDFUPXVxbTomJV1CYXh9JGBsNmM3cF0wSUx7L3AqaFJKKENYW0tJYFBFei5iI1pDbDZkc0ZhNTZaUTB9YGA8PyNISlNvZC89QiRlY0ojYVNaZjcoRnUiSWs0JCxURVBFP2YuWXhlbURnMUNFbEIrYkliSTw+''@;'; put 'put ''Oik8SzFUMF40UGdiJCZkRSYoOXV+by4uWzllaVd2dEYySXB1Yjd1WzddbVRmNTBhaWdPInAsUUZqWHkzajtkMGVPX103azBTLitVMnlnQmkye1UyQ3NUcyh4MGNuJDM2ampZeDsrej1seyxpT2ZRZVpNW0NCWnRlK3xvR15VcV80ZTV4QGo0I0xATzhiUERbXkpsKyh2RThPU21fUTgwSDkuTmlL''@;'; put 'put ''cCV3cCU9ZGp1by9xN2t7TUZxLypCW0lpLkZvaTNDJjdwOzQ2eE49XUNWViNKYnwxQ3pgKEoyVDUuXjc7eHNualV9SHZnXjNbKSFaRTVeOTwyRVs2O3VJZ3BNOm4kXlIiSkZRb0A/XzlKMVhxL3c4dEU+Lk4oPDBYP31zUjF2U0V5Zzk7UUlYb2YjNVclaStAO05pLFp4VD9Pd20ifWxGSGxgKlVU''@;'; put 'put ''PzQ+OSlzZ09ANThuUERISzFMQDhEKSl8JFh6bFhraDNKZUBTWWZtR3VgdDN0T28xSiNMS0swXz1oOFdlRUdIeylWRWtlI31OVj12JEppIyopOnpOdjIpKHs5O3swXypCQC80QnkxQ3MoNiRANlFYKG51KUFvZWd3TyNkPXJeUGVeITlRVSNkXWZbSGJ4QG5dRj5SU316ez9MdlNvTVh5VWx5XSQ7''@;'; put 'put ''eFs4RGs7TjU1bTkmQzJ7Ril1WGlkRXVNUVlYJlc2MjlVLGBIMCtzcTx8VH1nUyF8R2Zrb05yWTYhQCVjTFlgJjIwMkhNKjI4bTxVbXRhdl16NyV8XTdRaFIyWXtpTjNkWEtFUVFGQjslaUlqLmc7Sjx4Y0sjUFFGVDFfKmtCIlkvVWQxaEN1ZzN2NSV6LmRHP1RqITQmRTghKV9pLk9USTZENSlx''@;'; put 'put ''LF9JO211PlU5KGNxNTFIOWUoV2xSMmt5VDVrbEJkL2c0W2gpNG1lVlR0JUhrUi88T0tLVExjI3pDfCljXWp4PyImQ1lfWF9MOmkofHI6UGN5R1R3dEVDU21CdW0lN2MhRyM5JEUwSzYuKVg3cyhSbV50TX0lbD47cjAsM3dRK28sP3RCTUlKZFFgKjVwQy9ZaS9ZI21fKy5kRE54KSokPDMwd3dZ''@;'; put 'put ''PFFvIUohMm5adG91SiMjVjh5Rl0zY34vRyQ7ZVpSInhXLEp9KHdJLHYqQklleGdkMWprXUhMXnhpUTBKe3BoZCY7ISEoajZ3NENQZXVFfV8hJXZVWE9AenhMdzZvNGEyRCxSaEBeaWEuUjhQMkdwZjphcSVEfmlUREFfZ0BsOiU9cUpTcGVWeGhlKkZMVD9KbX1vTURKU09QKXBmOy4hMS9FIkB+''@;'; put 'put ''WFt4Z0ZZRkwmQzltc3pPSDZrfSFHfmlnJlFzSlNqUV4xU0BuPWFjSlJAKz48PyJBMlU1U3BRT1EwaCQxXUwlN3ZVYiVnPClMW2hjQXZVamVtYUpFdi5sNndlfE1nUyNsO2A8WTQxIzleaGVWRkFGc1l3PCR+ZUAjRnlQSDRSTUxkXlk1VklnKGVgaHBtSHwrYS9ALCtPQnc8VkExKUZBO3JIV01N''@;'; put 'put ''X0JKU3ZhPDVVbEE1PWs+RlV5ZzYxa1VzLipJKV8kaVhiX3N7RCRvJSJSQFUsXmlLSC9aNCtgellBdVA9QUMpbi5pSnd6PWQ1e1BoNG5ZUFhubVh6aGU5VntVfCIqdEd0cSU5fGJeSSFpdkgxdERbTytkQjd6N3B4cFlNbmF3YCxPTlloQU9KOm46LHFLbHEqbyQqOSJLO0ZrVjhZN0g7ey5MeS4o''@;'; put 'put ''TmJEXzk+LkhmSzFVbChuXnA9TDBYdGQlbD0oWkNTL2VSS2g5Q3J8JFghaU5zQUpEVGA+InZCMjlZQXc1IkgkQX1yd0s2d1dLTWBMeDc1RkdQaCpoL0dTcHR+dkNEO0oqJXxCQip2dW9Idz9wMkBgRyFQTVRKdUprViNmbFl8SHhRbyZmNFIxa2VVWiJbaDQ6ImVFZDxrQmojSWYlQkRaKk1qOUZA''@;'; put 'put ''KT9SLzM5WUJdWWdbaiNUJC8wTSVDfmc8NVNqcUd6WkQxdlNEWC9NeltteW0rX3VEKSxuTEZ4JT0kK3I1O0dGcXJgJTM3ZUl6VSZ7Rz5fKD0iYFBhNTteM31jcHgyZkBaUlFqJCV9cEJXYHlJJSpDLz8kLlQ7JjVSL3NYKm1RSV1vXlZWdDNCUGZdOk0sZGBQe1lITURxfnI+UCJgJkJvYGVbZnhx''@;'; put 'put ''SHhJI358TzF3PE1mKTdvRmxqOVNWS1FhWltfVyp0Z3VvWXE6bkxJT1FKdmBSe0VNdWM/bXdDViFKJGBpUntESz8xSDY1JXFYcVsrTkR1ZmBha0oiUWNMRjZYVWAuMzN9K05DKlZWR1pqZVM0Xmcoa298K3xdWlFzfjEsUUlhUVY+I3MjQy5oLj9VSHNAYXNfYyx6TnE5TE5jW05mdDkiYCswcjZQ''@;'; put 'put ''R1o/enZrLE0kIjNZPl13cCMhLEQ+KWhxclAoeWlUNiJvR2wlRkhzNEd0aGZ3QGtQRm5yTmAqb1sxLDg7UnQ6cTFMYDtmRSh2S0B4UiM1aSt1dUgqP10jcy9AMGFyZ0slXkxvez4vZGNWPSpLazFMPFFGdzh+V0goYSIwbn1VK0tqOEdeJjttTn5xcG9CTV5jdk51Q3hHczRjPGx0KHNbPC9XSWoz''@;'; put 'put ''dTJjJE1mR0IqJmBMaUBCLmtSVTZTbWBzd2w6LGxyL0p6RHd9QltpInY9MzRbWiZ4Q1dNWzNLN2pxSUYyPVMvRFVMRXNZOT1SYytuV0kxSiolLHFeM3A9NWR5U2A+SHdjSyNLYH5yXVIyfTklTVBwI3Jlb2t9dXs+dk9GLkxxJGZGSldjZFtMd0xheDNEU3ROO14ve25NbEBtV09ZMlN3aDxxZ1F1''@;'; put 'put ''bUxMfFtARkdwSVhNU3hAR2JeYDR6W0Q9VV1JTWdrZih5aiMpdjUkIn5uVTZre1J8UDlnZDNLUj5gfCo3bl9YP0smKDJ9LyZCZTZeRS94LmgjJk13QWxFPD42TyN4Jj5PalRhZXMrMCM6OEdlKXBTfTZTPUtzS2pTKCI7VnM7TmI1bWdScm9mW2c5e1NuNC5aNCNqOUF3U20jLCEmSkojXjsuPDJn''@;'; put 'put ''alhWPmpiWyssMjBMQGV4Yld2P0ZvXTBzfXREPEJHTjVecCEiRHoqTTYrT3N9OilQbi99Vks8P3tgfGt5VTtXaUJaX352a31Ea3I+S2RyPjZiXjghQE13KnUrQnJOY21LT218fk9PRHJOWTZie1Z2eGdKSCgvJEhqKXVaZWp9XntkSHgiLyozTHlDNlkwWGhNcTtMWikxKVJuUjBDZEhdM2N6W0E7''@;'; put 'put ''aCM3az5JTElVIm0rL3RxL2JdR3l0QDVFRUwhTW0rM3JAQSQ0MTo1bXpXQ1dGNm9HcEdVLlhpVz9nTUlVYHpGMjZhVz9Ca0ZtUCZTKj4/PilTa29qJVBYaz8hbmZdK3wzPFJQPWU4dlRscVpIWzFxSylNcFVyMnskRzxqQk1xV2BQaGI0SkduT3BZLCNqR0MrYXJBckckK2d9WmtELGozVlR0bXRF''@;'; put 'put ''JFB8XTNYN18zTVI3emY9biRqMXl7V0VCPE89T31eJVtQSkhTd3dZayl0Z2VJTkdHT1BRRUdxM3xATUAzLGIwYVA+V3tLezBhamVoQVF5RFB8MG12P2dta1JHbD89cj9jd0dyJHJ8VCUhQ21UOjxgUEtheHosZ3dIfG9iRSxOWDBnaXRQTm8kM2FjI31qOntVOnMmXlU7XmxnTU9uLlVYaWI+dlVO''@;'; put 'put ''IyVjPWV4MyNXKiJXcikwLHdAZHF6WT99Q3BEPHh5ajlMPFpRZ2piIy5wQXJ+UX4vQ3dBME1eJHpUXz4lQU0vUUZ8RCNLfFUhNkpxMzYseUM+L1FMYnRxfTNeOS8iOiJnREU5KV4yMXQ/TGAzTV9bL0FrJSx2OmozKGZhO0BjOzdLXkBjPWA4SyM4VVhsPmIiLFZDOzByMSxnUFVYeilMdUU+W21d''@;'; put 'put ''VEpJeSlYb19MP0FZL2xuaCRhVGE9Xi9dOHthd2lEM2lGdm5UUVNlcjIhRTVLdCs7VTBJdyhkXkFgME1WeWY9QEM1TTwmL01JRUt1fCRLXXBmeXV7WzcqYmIlJDVKPWBKKSRnUGVRUVNiSjswKW5kQUpSSHJ1RWkxKFh4ZSQ7UCVCTkhYZV15Mm5AO1h2JCt5O3spQk4sO1dDblFmYyssTWMsaitQ''@;'; put 'put ''ZW9Cay9GU0QyblY+UV5DLm80azEvcXtmQUltfXk0W1s+QGNQRTZDPyJlVylXR3l1WCFPV2wqUXVmNWo0MWdUUHU+Zm81JE5nbi5YRkhbZ24pNWx0LiIuTlV9QmQ3KmU9QS53M01lOHoiJkR2L0ZoRDs/PGQkZUhNRVpTUGMpVXNmRzRfLFJXUWghJCpVc15XeEtNYU8hTy90Kyt1Ui9CZlFAX0V9''@;'; put 'put ''fWYhW2lkdU4jPj8lT0VPM05eKV14XjZCTUByIjFSVGdacGZaenx9WUwyYkJuOjJlRyo9WilMSyFxOVVEQFglLDFaYDskW19APzZuRUh5V3Z0NUtgSDZLITUwKjVXdERpL0ohbzRDIXp3MHtnTHIyT31mWnZ9QSgrKENiKUFuWVcpWjgxU1FzZUZ4cUwmUypNcFRATDBkNlhdblVxNUNzcTZzL2Y5''@;'; put 'put ''bygvWCQ/VV15SC43azo1Xml7SEt7KFRLQHtWYXAwU29wfU5MU0kyRmB9eTZxL2V9alYrXikraVdBeFtkYHN6dikhdV58Nz9YNj5HfVR+UCs6YnQ9OWhheXtqSDYxZX01UWVxNHx9X2dVRGJwW00wVSNvaThEemYlVT1Tc15nUndDKGU9KiFtOzUlZ0cvPSs6Z1hGOHZqSSlTNHxoJDYvXlFnLzh3''@;'; put 'put ''PXY+eVVBLCZrZj1fNzE3eTxPRG0wUmJobk9AKTNwPEpCLihHbipUMFRKU1tGdlRDXmZwfXAibU4+LjtmYVh1aFEkeFlYZkcrIVtQfiFzPW0oKDV1fHlVeGByL1N+WTpRKnc+d3gma0cmOWRnVG9DPz1NRVRrNl0vMjhYXnZ6aV82NUtxcVlraFJZPiI7R3I5dGJhT010KkxsUCFBa2FDaj8uTjBu''@;'; put 'put ''aiwvaUl9Y0ZqW3svKld2UTFAZUghdWhIdWM6a2BfZEwme1h4JVoke1BabkZwbF8mPiYqQmZoVlYuW0lTUTpkNDMvQiY/eWFXUSR3b1FKVHhtUjowM15Ad2UqelBHJFhaUiRFTnVNKTZ2RXNGL24lNWpiPkxiaXdHN1k6QENuLE0/V2JWRC97ZztDMWdKUGhQdlolWmZYVG5oL1YwTEpmd2U4Vi9T''@;'; put 'put ''UXsyY0JyPWY5V18pW3l0IlFZNypme3pIOSE4ZC9xMkNVZnkkRn5WLHBMSStVbG52KUgxKjN+O2FgaUE0QGZNfkssZ1lEXT1eQmhaLlp8VmltN3dLWkFMTCtWZDt6cV50eWx5S0RyTkghenchfXIoRV0uPT1XKz9ZUnphSSFFWUwqZm9uIyM8LztGfjg5KUlFRENJJWVSPk84QGU/JUFGW2BzO14h''@;'; put 'put ''QmUqTT82aFBnYH07ciJFPmo0OXhSYHs6RHBRa0RpfiQ+P1dvbTd6WVpJelRMdiR4cnVCcDlPUyNGNlJ1W1UsaUhLMmJsV29pNS96NWZqUWM9clgwcnRIQ3VEYm8iQnM/bUMmWSZfeTdhe1ZKZ0dZRypScUZzQ2trTmFKYUFWUmslY2I5Xn48TV9JdDwzd0JUQUduI2dXXltpMEYyQ10sRlIsZHkh''@;'; put 'put ''T2J7aFFeYlFeQmxEXUUhcUJhUkcwcj9HQ3FCWEZjcWtCWjguNWskRFd0LDNlaHxgejNuNEVePGtdVlBzLzFQJnJGaGZlbkhxYjIpclJadltlPTRHT01jSWNJRUN1RkwoRnc+dn1nbT9ZZk8/Yz5pbm1WSjJUTHZkIksxZHlkKiNTRWZhKW9Ie2FGVihnfFBrMCRQb185KEtpVFhPSltkR3tKb2o0''@;'; put 'put ''VF8mZF9RNzEoK0JnTCh9Xn5XTiZPbTlKb3lqQnx0WHYuSUwmam1BdnB2T3xpY09ENSskWVlvcU8zKUdWbndSbXRlbz5aP3V3YWxVcylwbGk7SEZOOmspNDdtKk4wKTkjd0lzdSFJeUBzezprK0xafD57PVEhLHhvdnp0ektKNSpNej1qayI+cndkaWddJF5vI0sybkopdVdVc3hDV2BFM3gpWFsp''@;'; put 'put ''U1sxKmJjSXNAKVQ1ZUtqQCpfe3EvTTJYT2JfLnQzV0BrMjclZktBWXVPfDoxe09Vc1Q4JEZKNmp9JGRRT2xhOjEzO1spaiZJcTF0Ki9BPitDND8kKio6N2NfWkgpcnptKGcwSUU9dWNpdltoQEBrcTguXzd+LDFjc3dbRC88enFCQSMzITFrISt7Pl53MmU/bGNYJWhTJFVjREx3dU88Q3htaEwo''@;'; put 'put ''c0IsWFpeP1U4SV1YVHk0ZnkhTj4hSTx1TnFSTzUpQi84aHBgLl4wfTJSbGVQbjBYLihENUU3eXpfa1tNO3RpI01OZ14mTD4vakteZ1J3QG11ajxEWWpiWDVtUzh8cCJ7KlI8Ul40RGZLSD13L1g3djQ2KT1HSltbTEp3RCZ4MnhycShoR31HRWd2TT8sVjJZblddUSg8LmFWaGRJWjgxQzFvKktL''@;'; put 'put ''SzF9ZHBDMTQhfllVc15mLmwuQEY+LmhwPyFCa3hebWZFfCgxLlBtdGgjfEdHZGBeNFJURWZITTRRIjBefGosejhRM340KS53TGI5Yi9QXUxvSG9MNHAwTXNWTEIyRyVJRjRtJHhwYm5PamhFQTByMl55VyY1UClbUz11eT1uKEVvR2xQfi42ZC98LCRMKV53Qk5KalVheGF7NiY3Jmt4KC4sRVdl''@;'; put 'put ''PFl6aEgmIXxAZ0Q+dzY1d3ZrMCUhdVB+OnkkTCleZkhJKXM0JF51di84RzRSUDN+eVdPaj40I0QsUU5Hb3xucW1TKG1NY249QWwlSlR1eTBXU1E8VnR3OEwsT1Y0cGE0TGB2Yz5LczMhP0heejFlRllzP3dQLj1lKS48bkw+bmUzN2RrUVBzPHpYJCtnOHp6QW45WyI7eDI1Rkw7SmwsdHlNIyxe''@;'; put 'put ''e1ZMXnxyL2o+azsqUkRZNVlRTWt5Oy5CNDttKmdKT0dOJCltTUpOQ21CMWJga0chMTUpd2NSVU5LY2NNSEtOKmZZaik1WzYmMktnViUuOCIrQF04MmVWMSRsUiJQQG8yVDVbPnRyI3Vob0NxUUgrfVYpX0AyYzg0STtFbCQ3PEQ9Ild3IXFILkUzV0F9X1lmbXQleVdwb3YzNGtSMmwmOltPJkgz''@;'; put 'put ''MmtjZytxd3dXX0lbP1Y9PUUreDRXZnclZGhMM3c9PXhOR1ZNeCQ8fEdHVjhzRGJfMVlKaXxWVTdLcTQ4ViVHcT1MSG8kMF8iKV17SVIqTEo2a1UrM0s7ZzRmblQyQyZQRW45SltSXVZEUGg5QXlJPUUqRCU5WWhUbGB9MzEpRzZ8I2N4R04xXk9wIVZTTEExRUpXMXtNVS41SHYlPENWTzgqdEZT''@;'; put 'put ''ek1FTUQ5VThFOWo8cis6IkdWdXpMOCFgUi5ATmFYVmwla3hMVlNEI25pMXpIUU84TyoqVGVvRj9WUDczIVEhREYuNyVfbElwbFVHfHJBYDBVa0Uub0plPXJIKWt1d0xCbkQwQ0xPTHR7S2orLnV6ODxHfDw4YF5AS0hvVzZ4Jj49KG1JITNHZ0J1Plc3Mk5DTjZ1b2UiSTo0NClaS2EwL3JlQT4r''@;'; put 'put ''c1grLEV8ZyNVc3RROGsuaUllTUZ8clJVLj5FSEJnMHU9MGw/Wm5keyRlI3t3VmdtRyZnKmJeMVtgXkF1P3cxV1NPazVpfndXRVhkcC93dW1NZH1VUHBCXT1gIzFrUlF+dUxEYTxpQW5KUE5DPlJUPVd4Ym9MZUFSWjYySD0pQjVqPCEyaU8jX0ohfGh7LEszN3hMZ1NUelZYTURxcz02c2ska0N+''@;'; put 'put ''Z091JmNBLC8qcSxOXl5eU1dCc0M2NW4jSzpGak16TEtLJngzSEVrVSRPbDM6fks0O3pMU18ueFkkeTxTd0ZXMH0jNGt2Vi4xeEV4N3VlXnVlX2Vbe3Jdan5wWSIldCo1OjpAa3ZwWkEmaGBKISVXR3BddUVYZy90eEdKTyNCUiskUlEzY2UjMHZTNDtqRXM5JUMiJEtsaUZBVj1lckxoRXlGMEhJ''@;'; put 'put ''LytodUZ+Q3FkNDV+cmxHaHVSayl3KjwiMGxuUHNoQWhrbzkuKXgsZHQ0aWUraTshTTVzK2w0JDNSbDJ1WXVSeil4LEBkM2FbUU9PU0tXXVU7dGJlTzFNWlQmLFA5R31uRShFTiEpUXVkPz1ySmEidVcsP2xIZUVQSkk8OUpkQEkhayU0NTFdIVN3X1MlY2pOb3U5TiM6RmN+N0VXSDg0MGdedGlA''@;'; put 'put ''anBSTUE5cHlQSXBKTEN8RkVZb1tnSkg9RCNYYD1AS2ZSUjFqJmxnTzYiIyNiXiVvJDxONTUhVyF+Slh6cC91OkNXSn14YykkMU9AX0d6OD97fk1XdGxEWV9ANXRjLnNVSUlZTTdUV2V9ViYvTT5WNilgYiZAbCFgM2l3bTxAaEA4NGcxUEsqallhMHoheW9JOTE9RCZVaDRJeHlsWCEveTQiJm50''@;'; put 'put ''V19ySVlfZmZffEE6Nlc0WENuakRgdGQ6KmNAd1M3a1MjNlYkMDAoeHtTeEVULz5NRCwqV0Bsa0UwPml4W0klZEtpJllOK0NiTWB8azowa2ElWm0keCs4VmJrbF5RInxWOlV5TWJSKXxYVko/d3xwI2Y9bVJ7VWlLIk1hdGt7VnkqSHFlNjVUVSMqb1Eydm49M1E9WyZRKEpyen1BaGshJXQycjxS''@;'; put 'put ''Qn4xfmc6LEFyLEdYUyszN11dP3tnVDRfKV0qfXRmYW1gQTV+PHk1LnpENnpDLiUkN1dvOzg2T1NecGdrektaajJPZWhyRkg0ZiomdF0jS11iQ3MxbSFyW0MvKVp1Y1ltdnFffFAobj90YFpdWnJzcj9uajlDTE8wYytDeEZgKWEqTF1raypfL2tvLypCP0NZfGxfaGlyeXFLQWF5bT90aCIveTVL''@;'; put 'put ''ejAhZ24mKFNvLEU3TkhsWVU6fTchIUdwUnImQD9kOnB1XVU0TU8yIjsjfEhsWDJvT2xXen5JJTBvVm1+UDd9ZyREXVIzTyY1TDAsPSR2JlFHJnJXNnFnaGxnUyNxZ1M9ZjxmKXNVSD1NeUxaJnolcyxWVC5OXngmMGZqZUxPWXgrZzdiOylFTWpldE1ePGQmYS84PUFWQEJgJDkma3J7dHFndD09''@;'; put 'put ''VFcxTXc5cCU/dUhuJWFibTNGPEM2SFdvelBSb2ZRU2k5RCZhSURkd2BdUXEjQmVVPFE/UDgjfGFXezVdZUtSLl90Nz1FRVFsUUs9bXlTX3t6a3h0NFR9biE2LyF8RUpzfHJoQVhOaHBlNHthVzVpLyk6V1NoKXpDOzY0ZTN0SVkqN3tPZVpFdzFlOy9RRTNmPDY0MFZOdmwhSihKd1E0PiEwSVtp''@;'; put 'put ''RFheMkBBZHo1PUt1LGVKOCZFZGdUVWo4YD90OSU7NEAzIy4hZ1tWKCQ7OEBDfitnfDBmfXkleFAiOk5wajFjMj42JDtScF1POzBJUDIyTjp2PlUiPjhtOkRkNWExXnE5LHBhV0Q+TWc9ZDJzXk81YSRdKXF8YGshM08ua3xpOmBMNnQsXyNOOWhbWDVTUnFKKDtNZ2whPy9eISRAOGp6Ny9KeDw7''@;'; put 'put ''UiZMLGkwMGJkWmV0JSMwZiYwXnVlJCFsa2N4IWRxWjNYU1E5NDhMdTl7U1dgOEsrZ3Y8QDMpIWI/bXRGI0A8SFAvJCQ0W2hWO2ptbChFb20hfVdTKiFqejo9M0h7VjtNZ0tdOzV+IT8vKWJRaEo3KFMuJld3ZD1sd1FEa1N3Z243RVJiOmx3dzRPdGpCbyNyL1V6QkUmMks+by9FUVM9RF07cyVr''@;'; put 'put ''PnwvTzQjel4ubi90Nzw4XiUyVVQ3MjVHYCxBJk1VTWwzUyJeJiVxVUArM3ZLcEZaaENuVDJmezRsaSwvVCFoWHMyRFQpR3smPVYyZjVXOyhXNjheZ35IPklMOkt7MiRQV2hMI29HIl9ebSwwb0FDcVl9cWdxaE9lZjpJYj9OOntoXiZ8WXtlTn1MOjlrZUhAPChDQU1aKTtRamAqay5eI1VdKyN5''@;'; put 'put ''PkMhRyhEaUpvezd7ak9jJkNkY29kQDNFXVYkQGU5b2sjZndzdyN2Qnw8JkYia3t7bzhWJURMJUAvLnxwU2AmKzBIWWVFPUtWWkojTCVIUEpIaylifUhjKzlRSUhzYUdYfTYpQktHXyY8Ll9hdWxlanNJVywxcVF6PmZ8d3dfSHxpQlZpS2BdNVA8enkueF5yIj1sQTRfan4uRm44P1g5a3skOlB4''@;'; put 'put ''MSxKYHRpQlpwPkRLQXdrV2hkSTY1SENyZGtYITZpOk4qQFMlRmAlNFtIK0VfJm5ZcmkzL2x3d0Q1Xi8mVmJMNlU8Ql9BOFtPdTAzWyt9Ljo9V3tYe1RxZmVOSFgzLHFnO2BxcDEwW24vdygrS057eihjSyVsKj5NOzg/UFtVdWBuQ1owKy9HfDopZHlWTFB2ZWw4Tn1oclZYXSkmOV8yezNUYTc9''@;'; put 'put ''VTVpZ1FdZVddJGdnfXVQe3s5RS45PSRqa1d7UzBsN3xjW2VqeDxVVzlLWFU8WC5ALHtLezQyaSojSDBrI2p5bEZ9VyhuIilMeypYUGJ0THFzcj9mSGszYVNjTltPN2F2TCouIV1rXVdfVjAuRmBKPlVZMEV6OzI1fTNiXTY/fWdxYnp7Rl1aMWNtOU55ZFB5NWd1VV0zYiw5KUk1b0twdzYjMGhi''@;'; put 'put ''M3prYz4wTE9XfDoxPV5jP2V0e0w3bW1qdEhIWWR1RVImaiV6ZWU/fEg+VXw1TEIoWF5tPCpNRkRDPiFwNSM3VlRGeUZYRlhGW2woV0JWXjNEV0smbl9BKSJ2QitQdldXKzpJcmVLb0ddMHgxfHlCfHk6dHk8RiJhbFE8W1pNSC9Bd1ImW091RHA2QCVrU0UxfW9KcSI3OTo8K01wQz5aMHhjOzJD''@;'; put 'put ''Vk1qXitXOlZoRH55MmxOSE1NJHQlZ0JbYmN7bz92anl2cUs+bD9UL2d8KVZrLj9AOkdTcU5ea2xXOmc3M306JnY6TFNeUFVhMz1nWjN6eE0xeGJPKFQpWzNyNiJ2UnYsVlI8PFdqJlZPUjhGOH50KXE4eEZfT2UiJXFIdSs2VyNTbGY0ZzVAOl9HZFdweyVwenRbbWVXSWo4YnpnJWJkLEh0VWRL''@;'; put 'put ''cTM6ZyJXSU8uazxEayMoaiY7OjZPWDclPGAmPUIkMX5FMEFeayxqbVVgI3s9VWRyR3xyLCt1d0ZxSlI8XnZGaGd2OSk9bDhjR3BxNCpSSXcrQ3tXeFNbcUY6YyYoSkclRmtFcllWc1VxP2ZeWFFeUUxhImNDQGBaXTFaPD9lIjd8KT8rITxnOkxyWzEyQCxgMkBZezYpO0NeeDx4V3lITmswbko5''@;'; put 'put ''X0BLezksQnhET0M2Rmk0KiYxaX40LnJtNz49NlMhejA7KzEmTF8qYFtWYi9vWCQ/IWJ3UVhBPnJAZU9DX2huUWxeJWVGO2lUKCY3JlN9amolbTRxIylWejRObGtNeyZ6NG1SIVlHJVBlbnU2Y09UZFdrTXFaUFF2fitJdWV1Wi88azEyN0d3InUje2cmWW04d08+YThaVClHP0Vgbz42UW5RbCU3''@;'; put 'put ''PlN+cEImOUAralAhc1I9MWkiaD9dO3g1REAkdkl5d0ZhU2dDPmchMCo7cj9EL1J4WkFSfjBNT00pXktqTDNiSSZILF1tOkNiU3x2ezl4dXp8NmRxazI9K1hQXTYvPysyTCYiay8ucFh0PVYrUGkrNTtyJGpGdFdzWzFhY3w5TzdBPyRtPD1+KUZFdCsqLzIxLixlaHFJX25GNixqfWFXWHZZWEYz''@;'; put 'put ''YlFISFRON0V3ZXpvX3RrSnc5SFAkYHVYfD8raEAhWFN3Y1MjYG9APFVkKXhEdFQjMUsvbFQ0KiRJLiV6Um5FfF9qO3BmIUZkI18zNH0iV0E8bXcuT19zSUluW1AvWnJNQW9qWSMjbUJpMEs8XS9IaEpIJlpJJi5QPmRYcWI/MTsuQ2I5a1lFdE8xRWBuZVhxYkhsQEl6dUZFOiolV0hYKl5gJF00''@;'; put 'put ''Mz5FbklRMUVCXShMYVFSeFNScHBASFR2aD85RG0lXlVBNFEha2c9alpSMkx2Tn5aXjtSPFJEYC5GemVHZFU0ezo6Oj88ISVeaTNfS1VyYjZoKCNWVFJ8Rj5AT0UkNkt2S0BmbShTRVowZ0dWXk8xVGtmO2RuQCwhI2JzQlErIXJeMDJnNTBSPjdgS2RmbzBmZW9TTjBLJGd7JCtpLGlHUCpIYihT''@;'; put 'put ''Zl88fmVySHxCci86ND5XbmcsMG9IbyRvSCFlTn1mdEZYJmQwcHBJKEBneG1SO3QwLFslSmdoc01hdk9dcDxTM20vOUlZSXl3PDw+I2t7bmc0dTZrS1l2QDs3Ty9FbSU/Z2c1NUdgeSpeJjs3djZ6Ij5DNXFTd2FtWF8kbClhN1pgU08oLlFnZm0+JTpmMClhaWwzYy44fjdWeW9hWzphLldHUlc0''@;'; put 'put ''L09oVWIpRF12Jnd6UVo2JVZ+bjpdUEw9cGF1ai56fE5gRUEsfnY9U1NGK2w1Yi5gMkBxd3QkZV5LZTdrSSEuRU85XlgjYGxPZTNaYzksSlhtNWx5SHxlRypNPjZBV2tsM1ZeWyNeazpBPkxqKjI1XTdoTV1ybDtQK2BRYGF9QytkfVQmNzwlfVFPSz0mO1M2TWBsRTVGMD1yLHpVX0slZTNzV3NT''@;'; put 'put ''UyR4OXtte01FL21sKlYkNT5WLE1ue3FTKzI3O3tCPyhJfTpnbkljWCRRWXQlRD9DL05Lfj9pMW57S3EzP2N5PiptZmg6ZmE3ODtsK3VKJmJLJGhMazUjJTAvKn4keV1ZVkZ4T2RLcW5XWFZXREYwRl5dZzFxQHUsWXI3S158VCxfQVN0R09MMTFPQ1dgcUZyP0NGc1I2OyNNfFZbOzNRJWs1WmpP''@;'; put 'put ''MzNxcVlCYi9kZTwyWllYa2k+dnI2NztmVEE7e0dkIjc+dCZ8IjpSIXdxMWgrTXVjViY8I0JNZT56UXU9YFZQfHh2d3h3O3wzc1JKIyQqcjNgMSJrLiovOE01OEllYzdeRmYhcGIjP29+NlQvby99VVZScypwR3lGfUhOSzplbGRbX3gza3NOfFZZWUArVFBIc31jd0poLHBrUjJXO0xyRDJARURP''@;'; put 'put ''dnlsQksvUmR+eD83Zm9IaUdQZ01hKTg+Qk8qQHtLaHtSMDZwe3g0NS9eeHNtMSM7MHNtWkhmbSwvYXBKKGFjYyFWT1EhRT5+JVlTSHBHKEpKQE0/YT0mODFealsrMmkpdzpUIlgwLEBOYnlMN3BeQWVgNHB7N10yT08xWS9zUmpbS05TR157NER0bklOR0VNcVRrVDVDdUUrdG83VFdRTldbOy49''@;'; put 'put ''Rz0xKzVrWyR1MzAwTygxOSxMeT52TzlfO1Mian16Mn5PNmBTL31aWzQ+d1VyOWJYfUowJHZdflBKaCRuNlYhazlDbzU4MH1yN19tTnBLKV5NMVdROjJ0eTlPQGtudW1SSi4kMStuKktrJnRUOHhjS3VnQFQxN2w3akYuezQ8dyNse2VAKEZPUkhPbHE4ezJXUypuR2FEWk9WL21nJm1RK1Npa3gw''@;'; put 'put ''PHdxPFRiUkhPWzJzVEJVME9ScT9UO2c0Uz9UNmMyRj9kSHFaJXZlVXJzdm9+W0RbRSY7UDAlc2kqM2RtSXc+OV50SSY7V1B5fnQsRn1DYz5mYDtfJipvcFBxUFluUjIsOSlJYVtEI2JbV3s4UlpwS1kqaUslJVFWJFszSDd0OkFvMnhxL193e0YuOVJGXzdSRmBVbksxI3k0WkpOT11MXTBGLCUq''@;'; put 'put ''P1liRypSWCNHTylsKUFMaEIjOVhIRV1kVEhOTHEzWGRSX1h7az50YWxaJkxaJW1lOGswPnhtMmw5V15fUENQRihRXThyVTVbZX09bDxfVkYjc3lEQSMvOEw4LyM4Sjg6Zzo4bFlRMkRwazJoJDsqMz9XVElNQEI6QDoyOHhPU2Y8ZyFxL3AlP11sJG11Wl5rcDltOTYwQm4iVX5HWlBZLElKNzBg''@;'; put 'put ''P2gwZGE1X2FfTSRYOiVqTmZ1LklpKm1jIUE4SmRFLGd9OVc9azFlOEJoOyZKQEljUUN9PSZeeTs2KlIrWFFKMSxQIzklbylwMn1JUWNJNlVhYVRJIUQsU1RVcUk3WCNhXkR6cEpMVioycUtYcC88OyFEfkhLKT00bClwSlo3N1tPUVZ1bmhgJmVLeFJyakJBK1tNRmxRNmh8ZVYxeV8pYyw4VmZM''@;'; put 'put ''PVReNCZdVSZuc1VdMXMuVyNuOXsvVzMjcnZncG9qXVIlX04lRChVc21aUywhMCtjaSx5JVs3Yi9TZlZmJmU8Z1lLKDJaZmw+OzZ1VkdZeUFKY0xjLH1aclomUT99IVA1UjFqI0Rna2o2QkpjT2ZXSnVJL1t6WiwuPix6dFQlJkloOzY3TkRASShlUWJTNURsM2FMTyssKXpdOF56MFFLTktEb30h''@;'; put 'put ''cCMheih2RV9HQzZKRDt2WSZEaXgjVWx8b1YvZTR9OFA1MWB9P2g7fWcrLCJ8dWtsVG5WZWpgKkNEY2M1Oz5idD0jZ2ZUPFdoQkZXRW9gSzJ8Unp3UFFPe1d4d3VZLnU9eD9rQFgvajYpe15ueis4ZDc2Kkt8eDt8SCF6KEwzVy5AS1k6WU84YXpCSEdINk9EeDxVRUJLMVQuKnZ+JS9ifnBHcC5V''@;'; put 'put ''Z1FKJDBeWTpNZ3lUVyNoUj8hLjRsaSs7QXc8SXs8ayFVUiY8Rj9ZdkUlQFFyeltCM35wdXBGSCJTPWpjbUh4eWZFYmoqRjZ4aGV9KUd1KGdZP1cpR0cvajxMVl52MVtOXiQ6NShkPWZlTjN2ZFVBJUo0a29CJWFkMmZJfUZmamA3OkVvNSU3VChsYlRBZS9hentCODVIRSZWciFoWGQ3b0tUWl1P''@;'; put 'put ''OGgoQTpLTX5vLjpCKGpke2RDaEEhKUN4WDV6W0V8LD9FfCxMLloyJWtBPktXPEUyMSFuKH5bWCoxUnwsRm89VTVnR1Fhc2hEbyE2OUhMOGNwYnBpfjB2NSQ5SH5TN0o7OD9fb2B0cVdwRiRxP2Q2aHJbT3FrbTlFd1hyYzl0UXVqUi5fZUsrfTc4VHZoN0o/UzMxczpEOHpWNDZ1MGFdNCY/YjR2''@;'; put 'put ''dVVJOnQyKVFuOWU3YH1zPXE9UWR2IU57U150WkxrVXJuezxdVV5CfmNiI0UmOyw8bChEcjRqVXI6JSpzOUBTeT45KUlhW3MwMCR9MF0wTjMicnAwU2NLX3g3OnxZYTYlVzdkNjU8QWkiZEgwLnJXO21qfFhaNC53cD5qfCwlLHddbmQ8TjdLSTR5JkYuTWYpb1ByNkNHOzZ7Snl1WjImRXZIJD88''@;'; put 'put ''XUxAW2tUQ1d3OG5FUDREYCR3PS8yK1pSN0R2ayg6d21XJk9COXhzaDF7WSY9dlNESXoqPG92VUV3Mj5obGB8c0tAQjZgYSRac2BvTjY9bi5Gen15TyRlUFRPRU1xU3I7P09vL1d0Jj14Ij1oJEhIL1tfJnFPbiVPTWJlRmR7e1M9bk85P2BEPy9+QD4sSG5xOUc9eW1hJFZifH1RY3E0a1VleTpj''@;'; put 'put ''NV47Mm45SypjTU1uTllwN2lHTDY1YlJiOj1zP0k0cVokOzQwWmJENDpxa2hsPGUueDFINCJHRmB6LGp1RXU0ISo6YXksJGg0TmI7WVshNHcofGpkbmJ+NHwkSFlLcXQlZSF1JWVZK007Pn5oNkssfTpdX1VIblBgbyEvPV1CP09nbWI6MHUxdj1GcHJRMGNndFFVK3YvODwhMmY7X2J+WnYhJTJy''@;'; put 'put ''PyVbSEtxN25QMXtMciRpMXVKXkchU3VhQyZZTGRvIkcpa2V3cF5KeHpDMn5ZfUVwL0FLMSNQb0ZWUjpnMEZ4T156clE/XkZkay5KME0vdCksIlFmPi9YNmpMKCk2MWRSYSI5SFA2LEpRRDhqKnoqYSwsaTNdb0t2aFEjZUNqeWVrcWQ5R2khXV9IYyElLnssOn1mY0QpKzY5MX5WcG0qJjBmTWsx''@;'; put 'put ''WDhfKHFPb0tzXT0zQlsucFlRMnJBMlNQVVcvYiFDP15HXVY2Yk5LOk4jQmhYa353K2slZU88KHZkYFZeWXdnJnk4OzVfaSVsSFBZKTU7Kn15SnkseS40c1AqQTNyPiJGZTw8LF0wNywjPjNHaiFoaU9kIWhnaWlqRn5DV28wQCo1OiZQKlE1VVpkZFhhW3ZHYzNRTkBlXWxqKDBONnV5LjFHLzhH''@;'; put 'put ''dyE1MGV6JkYwWkAjYDBkVDBTMEsvK2swZlBOKWkqJk1OYHRpdzJmOWZOT14kRU4uITttSjZZJWxPMTBWe18oUyxxY0lhcCpUcEV6OCYkRExlZ21PQktCKEdmbThVYy5kLzg8fiowOTB5THBQVFsiUntULyY8anFLMllAckJqflQmWTlAJnE8U2QpVm9qTDhLY2k8Qjh6Vm9qNWFCc0ArdmQ7ey9q''@;'; put 'put ''ITdocl1SRTFkL05beThndFFdJkZteX1gQ2Y5Rz0zcFpvRm9FL1hEaXhdVXY9bFpsYi9sND50WHJycyx6LEFMU3RGYClkODR2SnJjJmdvImg9OVk8eS5eWmRgT0tUNlJYQi5UNT9eUkdvUyFNPTlORigrM2N6dlZIcURmNHI0YmRTaSUvUCZlIi45SDZgcCFZWTV9W2w1X1ZhSWBLVW1udF0pTkgy''@;'; put 'put ''WVJRO3pVWW1IcVdGeElVcTl2OSZRVSNacGF8L1cuKEs3KGVfU011ezRTa19rKG4zYHlFWW9jY25OVj1vVmZuMlV0ZHE/fFdBKFYrR0xXN258KSNaNDVjPG53WyU9TyU3NkwoQk1+TCU5VD47VCNCUX5xOXIiRT4+PWtEJGcqfVFjMFA0dyJqKm5BZmRtdVRpS31yZz1zPiEvRTBgQ1dzT2pAcjY2''@;'; put 'put ''fHJnTS8kUjZNJXlnWUlDdXlnelI8W2JnYTFDdntuWVQ1RF9nTTdLRV9AZyJeS1FqbEhPeCFIdEk/InAiLDklO3wjInYsdFkwMl9BZDEqeXhQR15AdmlWVkArOihjRXNtdlRDKClbR0lQaSVaOGlZMDZJeTE3eEA4LyVhWn1VKjg8JEpdM2VKKEt6cS9kNDRSd31TVTZrNXlERmdyMlNlTTB4eE9I''@;'; put 'put ''RCJ5MSJDT3hSN1Y9eiZFbi5iKWxlfl9gUntRPHh4bSx8PTJwfk4xRjB1XlFoUGRnPWV7bWhgeWFGVnolQClIcW5xQ3tvJixlazk8eTYzUVV4ZjE2dmRDUFtSayN9WmtgQEMmYnB1NFNoT15WN3dIVCZoaVspajhKV2hdaXxje0Y7QGAlYnwqfm5vaC4jPkUiVD5uaHkmYmVOeDRdPH0/c1JQUGRL''@;'; put 'put ''Ql8qZ3VyM21bKn4lP311ViYrMXhuOSY/MDFuJlkvb3tbajpYYk1JKDxNQ0ksTz1nbltkXkZxaX5FXis9WXwwWmZ3QHZGTnxNRmxqUkNGK2lgMG1JLDx+WipRN0xJdn48Jj9QZHtgMltQVWx6S3VVMm1JJDsmayVVPVFfLlN9JCxYXVUlVFVoIWkxP2Z4cDRAX1ZFJSlCUG0vXkskYnxje1o8cXkk''@;'; put 'put ''P08qLjVvdDpAMSxPMVc7YjFtSXliOSxPMVtPcVBlMW1JO04+OUlqIlUpUSxkMCY1JWRdVEZTeFNKPWclOSopfUJ1dlEhIyFROHFyTiFfJk9yVndQVV0ofVZvST9mYkN5Q3Y5NVpDTmBKUHZfekVYM1FTZn1XP2M5SjpPV2tkW0kzfnBFSCl1cG4rS0lrVTMzI0ZCZnpxY25iZlRFd25CTkIhVzpY''@;'; put 'put ''Zi8jR3RBbXVUS2tFOUs2UjNyI2ojNThjPW9db2tfQkY1QjAvKWcvWkNHPGg6aFU5U0t9YX50NDF9TEhQPVBXdUBRM2RKdHE9a1VCb2VNZUFHaHwiY3EyM25Cbk8/Ym40Rkt4dDlyZ154LnpITkJobH5vPkVVM3t5M2VHK08wVU8qMEhMfERAcSE/Nls9WlMhR3R6WCh0Lkw8aFpJeGQjTTBFaXk7''@;'; put 'put ''V0xVW1c9RnM/LEw7V1dBKEFmRFQvVEBhXUMrRWZOTVNDZFJwQmh4Iih9WGRbQ0QvTj5iUHY1UEZSIilNN29JTlopM3dBcXUzMTRFMmo+WmxjMUhzInFiLz9OL1YpM2JMNWJIajRzdS9CUGl3MXkpKmQmTm9DdEAwd2lPOUVgeV9IN0lRamEifFE/djY0RzMvbjhIbGdJSXIpYD41IXhGeihLTzpv''@;'; put 'put ''Uip3XzVGU2VHdCNHSk4xV2ppMXd1R3svVzNTIXRKYkhxWHlYNnp1NHtYdkxBXlQzLFBVWHc/XjlbPnxlXUwoRih0aUNdWy4pVEZIQmUiRUt7ND1DaEUlX1hbJVQuKXBoakQ8Yyxoe0FXSDBuRGdMSGc1eElrVWppRSxZZ1VIanRvbkk3cUNgYGgrdV12dmU0WWVSRn0+dG5OenBWYnQjVzskL046''@;'; put 'put ''SCFHWGRnSk13PEJFIWM0a0hJRV1XL2FWKkg3cWlWQjcrbFU9Wj51fXliSWpjP2pUM0xEfEM4QTZJP0Q1NFd8IzF9QSQoWTQ9dl56Zk1DQj8sLmJ+RnEiVGh2R0w3V1IyKGU0a044dHtRUFB6RGtSNC5YOCtvSXV9X3w5c2NyREVwX014MV9xLGIwXzppSkZyelM/RkFSUS5BOTE0YnxWOE1idEpC''@;'; put 'put ''UnRtL0wmWDhNMlNDWlhseCZhU2FPLyNHP2h8alFDaCJldVRoIjhILylIaylvc2lDXUxNRkczMGs9QlRKaUMqQm4mdmwsTUNAQlpVQWpxRixCTm10MzFeIzpoelhkYy5JWkIoaz9NYHldZXppJU1VTXRRYmhxJSNaJk1ea3szJDx3Qjt7OSVvJS84UHJjLHkiKFo1LFh3PTt9R1toYU1UPyNdVU8l''@;'; put 'put ''aFJoSXNSM2wqfSVmXmwoWkZyO29vP3JXPXhsNz48PD14XypKVFY7SjxgQkc+S0F3YHRLIUt5OkZwdzFGImNLV0Y+LjF2dnY5VjVte14jek1vLk14UTQxQEJ1NV9mNGdsWFMqcylRe1RpSXM3WCx1Wz52JWM8MSxfWygqT0NSUUFZIzAlOEg3WX5zcUImIkZocTcvYTUpVlBpUXtafjVXREltRDtr''@;'; put 'put ''RElURWwhZ21QbXxHfHB9T09VUmheRnB1QlEiKSt1RitgZjB8SVIwKEtdUUAhSX1VPXQ6VXE+OWRzJXB7ZFpgcT5Yd2w8ZmpKKWwsYTFrNXlPcGE6RiVQQzp+eTUiSTtbNCs+TV5aSSpSIj1sUGJgNnIvPTRaYUM2eHQmRmhoNjw7Ik5MUkBybDgwJXxNQExqMUQ/ZytkUmIjR2lrdCFuZlkyYVVl''@;'; put 'put ''ZGA0T1gxSTZXIlgpNTd0fUd8ZFVqZVIsZlNEPyF6N20sVTY0dV0vQkRBRyx6bzhdai8pSmRASVU8cDJpIzhiW11URn1pUkhaV1ksI0kuYWw2IloiPj5aSlVSRFR1MkNxY35AcVRfZT55SjwmY24mcl0seCFqVFFBVXZuWypYSkU7RVNdVWt2UCNaI2w7Nl9nSmJXT3ZfU3VTU090eHltaWJBbEwk''@;'; put 'put ''cyMxKTBlaCRuRTZEV3ZVWGxaTDEvbzQzYkhmUiMqX3VOIm4qQyhRcl1VM0pRT3hlMFlbRXVYNFVaJCtNPlUiNXkzTWciNHxbQW5fPzFiL1tQbEgwKGx2T3oyQG9VXkd+QURXa1U4XkBlOF5AV1E0MVFlYDRYdiQpcHZ9SDtifDlkQH5ARWIiK2R+fHo0ciRbfkAqSXEzLm4zM09hTGJTVCVSfTV2''@;'; put 'put ''TE83Li96T0dZNl15a10uKF4rOmtOP2khUy9VcV5ZZW15LDJIVyJWKnl1TXIxVkliYjZbay45P1UxWSskbXlQSlh0M2JoR09sPnEheGgwa3p6YUR1QiZCdERweH1FeUdASTpOe2JKP1kyPyokZ3pHKi9VKFc/O1tXSVJjaU5FSS9SRz5Ib1pvSngkREooQTh1QUxpV1NQN3ZpWGMjayNtWXx2fVFK''@;'; put 'put ''czQkZ1k4big8NEt0TFh2XSVeXz5vcFl8ZHZSPzdobi9rZyRpTDZVYXY6S2UyY1JieXJpbkt7QjhyMG1pVjBAQDJ1ZV19W1N5RlJOQzZCODZ7WDRrU1RPTTIyai9GeW50UV0xcUNgJXxUPFkqK2ZndTpvanlqYm1OOFlTNX1XRT8iSz43dT1VRSVbVyZnOCRQSjBnYnpyelZtdENgMTtoXiosM08/''@;'; put 'put ''d3tLPVV0L2NSQHU5V2V+eypKdTZVU0cpOG5CaE08YkRGZSNlRXspbGMlKHxMKGFuTE1tZ19qfk99KmE0LHk4S1RCdE9GdF0/eHImQmojUCx+XkAmY0BgXypzNX1DanNvaDYlN0ovYUpFR15QVWx6cTQucD48NWlhKX1JZ10rOGEiN0loRWxSY2V0d1hiXjNOSjpWdztoMHI/bHBvaEsveUo6LGRt''@;'; put 'put ''UkZUNjUqKTJvUTxIbT91VDN2VloqUjtzOGp6WSpSTisrJWZmMX52Oj8qY0FAPFlgb0tfaU9nY0JNY2tGYVI9WVZMY3UlczUuRHEwbCV+XjpvIWRbYTZQb3sjInIkKWkvRDJqWEJfZmEkNE5xdG8mcTVlK28pRlExc04+T3hKWE5FLjt8bkRdRXwhaUpPdy4sSD5dPmJ5fVU/TyRvREZaRnowNzAh''@;'; put 'put ''SnhEekskO3VDWVZwZGdZWGNwPUUhSTxGKVdeYm1jTGtLVlNaYzEvPT5ZI01DPkJ6SiNxeiUqUGFHZiZWaXlfaU0rNyFTdUcxfkpiQT5vcElnYTV1NGg5RyYuZ1o+dFAweVJndWshNkt9cjU+RmJ6fU98S11GfFBzS2xFNipyVnFmMitdWEBIMSQpI01RZVU1Iz1EX2wpSUY5PTxuaHB9Njx6T1Mz''@;'; put 'put ''eysiYGRgYCQzUkY5QUtqdmFUeHJaPEFufG17bV84JToudEUsRVNRX3tqciEyal51Onl8IW5ma2YwRyY4RmRrI3lHNnAsbT9JP3x4d1F6XWNfLiVqMGpfZjIoalJIZmFFVkNiaT1SSGZhRWU0bEU2VDpGYSRKI2dEU3ksfn5VVkQ8fSp9QXFCJkI+Ql9BcUImdUpfUywsQW44ZWtgKlUiKE97b0x0''@;'; put 'put ''elsqdUIpbmhqXkdSKV1uW3dHNCRYMi85fVZYP1Q6IiM+YnkobltmVVhgKSpFfE1fSSFKNSJgWiswU3Q8IlliKzBTdCp0KXFRVjR1cUlwbGRsc2NCI2hlT09MdUlTKG1eSDhZXUNSIVZPUUBvSTZXIlI5cUZ6OSpQbXR4JCxAfls/Xj4hMENkJlksZiRVOTw/dFppPkxDbT42dCI7QU92fXZudjEp''@;'; put 'put ''Z2lvUWYxNGcxUGZQbmNCX1A9PFZ8TTFGfXYxb3pCaWxnWGNQaUI8WjF1LzgjIUA9VjAwRG51b0B0Pnk3a0N9SGtbX0BYRSU0OVo+Pn5rc25Ua2w+TT1pMVZnJCxoZz80ZDgob0oxZmVMTzFxW21AezcwYGhtLnRCW3YqOmBLeHFUKn4mem97Wm9IKT4iP2xQZC56Tiw6d2psNyNrS15IMGUlJTsy''@;'; put 'put ''UG45dGVVdSZ3P10yZCteKC46XzdvV3EvdXRoWSpVRkc+MUp0S2VMVi5mQz8hbmZRKmIwU31Ybj5iZk5dJEV9eU1HeHloYnAze05JZVt9JmskWzBteyFDajpuOVYzPGd2aS56bVF3U0lqO0ZkWDExRmpaXnEjWj1OTXtXKS9zeUNxI3p2QEJdMklLR2poZ1F4bUBCPH1yYDhBXy9zQEMyISZuJFt5''@;'; put 'put ''T2VHY19aUHN5Kkx7ZmhXLlloSDA2STplPnk6cC4jUCNoVFUxXWM0ZjNaVSkrY3cxMXQucVYyaXZ5NGQvWFtNNn1Wak9hfmshNFp8fGZ2IlRiOiM2K2k5SXFrOUlXd2FsPDwuMS9VVW1iOWRyMEU7aiJ2NHRCSnF8OmtdVUkvW0dEeCMzd3R0cF44Vj5+JGZmOTtHbnNnaVFMNkNJYCFAJjVxLm0h''@;'; put 'put ''KE1pUWNQODdUS2JjQ18hJXYqOzMuY0ZgLytYQ14uPUZpZlZQcml5I0YwaCZdbEV0L3pIQVBdTkJSL2k6d1dve1s9OkUofnJ1Jk03IUVBI0N2L2cxbUlXPT01VFRRd0dFTHQsWndQNVc3fms9WUY0XkwuZF0wMCpHMGhAdntJdGNCdl15d1FgQXNPTzlxc1M1JEQjMiEqLCFBZWhHT1FkQTFrc3Y3''@;'; put 'put ''ZDZ8JUt7V09nYyk0S2UvMF1QK0pIPmt8e1tLPHQjdz5DITU0VjFEI3c/XnwrPFpddXt4fmtfSCpLOzE3Y3tELHpEbmV+b2N4Ol9dYy96aFBdMW05Q1d7VnRaaGF8TSpOYUdEI3tMYlNQcyIvS0xKb2M0bDRUYWIpOno1QnhiUkBfVUEjSk9CI1cle2MiVzlAMi9AQnlQbjkiaFIme2NBUFhQTUV0''@;'; put 'put ''UGQ0MlZOJV1hcSt+PlchOF1DYlhIT2FXIXcqXUEjTXElRUdaRENHfEg7ZmwlMXhLdS4iV007b0xDfUQxWm9PKFlTd1p4RF5pbTFaVnlrLEQjYDE/NnNQZyV+SlA0bDNNZyNSflBOSStJQyFfY2VDYXYydWVtdTJAQG11QCJbIjxPJVFUejBuQ3U/dExJIkc1Tj9UQyludHp0QGZXcGhySkB5Olhi''@;'; put 'put ''VDMvVmJTZCNpRkd5Szo5ZUpSNShOcHF8Wj1meEU1Y0xLTU81XSQobi51dmp6Qjg2QU5aRGJiaE9fQzg2fk1aN0IhWyRyZ3UwPSYzOi8iYFoyWk5ua3R6dGZZKE8iNkw9WGpddlFIVFQya2V2SU9sem5STT4xbF9uTUwzKkc2WngoPSJabkpxQktCJC89TlopdmpUbkxDSTsyc2FhR2pqOzUlPnZS''@;'; put 'put ''L05ycmdhcV1VfEddKCNuMmtldnVNSlMrcm5jd0A4M3ZqZ01ePENGT2RDVmUxYnZbTzU3JUgmPzFIPytHVzl2QXldIVhSVjwkV0w7MGZMQEFuPHImYmVteGA4WTYyV1kwL18pWW44RWhCUnc3JWtvVDFBT29vS0MpdnI/K3UrfFYseVg+OWtNMG03N3NdeERwZ2IzOURTSm46RXlNNlBvdDFJQERx''@;'; put 'put ''V1FJYyV2Y2lIU0VaTU12NTs9fGoiLmE6RDIjQTZbdlp0V3ZEaS4mZVp7Q3IvJj59UzIqO2IxUn5BKVVmKTV8NW05JDEjaltgO317PHZFWGQ5WE9VYzlYcHEqLnxzYypgfG9ZOWhyKnFWfTBdUGh6c2xdW0s/XVUkSDBCSUY5dWZARHxyMlRPXUwmQE9LfX5jO1l+VDtiSFQ7eFNKeG00Y21tXncw''@;'; put 'put ''S2lOLEpPSG5gQnhrKzArMCM7U2xhWyFtekMrbEpwakBHKmdea20lVm5HW1drZDs8M1UhbnArO2E7el1jI303SS9XSEkmTVpHayk1OFQqUlJOXUw5UXEvRnZpekt4V3FYYV01TixkU2FZZSxEdWJ+NEVsP35iLExKW0o4cjVlRkpTIUtfLGd6ckd7LHBLNGNaYHB1Lj1QQGN1P35QakNmKkVKW2Mh''@;'; put 'put ''OENBI2lRP04weloraVtdYFpwei9AT0c7NGxRZklwfUkzQlg+eilZVjZSVXMvcG04cmVKbF19PytbM0JwUVhsYzA2MUYqVjh6KC42OThiL2F7bDolY1ksPUJNUG4oNSwxPVg6WSJZU3dqenRiZ0IjUiM1fUIvPFY7Im5CYkRiMFNjMl04Tk9eT0FVQUtATzEjeCMxVz1TIzVuVkJOW1ckKzxDWk8q''@;'; put 'put ''MHAqJGlUN3RhfFhYc1pOVWFNXis9T3pVNjQkfFo0MVZQMjFNZXJHQnp7ND99emFTUVU8REdnV0hpdTRTPml1dTwpPDk3LmclcWRPdlohN3h6bXVIQDJ+RV9OeEN+WSxNK10iQ3F6RDsmVClaR151PWxYKHt8P2JGczR5InxXVW5UeUpKPmV+KnlUMyNnaTlaZH55VmJlWzBaaXY5YEpIb1poOFZh''@;'; put 'put ''aDhSNncrKmZhMVlTU1YxTEIoMD92NkxlUCJgW1peX2hdN0AlW0JETiFPY2BAUWE0QmokRitBdnhTQ15BbGM7e1c2MjAqe1JtTWh6fkVfcXlXJGlIdHZGfltsO21bZTNheVU3P3hJXXpnPmRddFFVZl00L3Jue0FjRncvSUMuQnRCQUFBOF9FQURYckN9RSpNZWN5IjJpI10pQ0BBRHZiLEVhPU5S''@;'; put 'put ''YlNAMk9xdWh4NkZBQUFBQUFBQUVBOTwhM0ZwSXJuRSYuWS9uO2RkeVgyTXczYj5JOyg1P21tYlhBUl9BYkglX2xGX1pGLG1FY1pfO0lgSENHSUJIVyl8L1M8bFRueVBDbyM2cVc8K1c2Kl9dVkslMXZ+WjFSQkoiZ09Ce29yOEl5VDBpI05iKWZHRy4xMnZDIjpLN30sIUohcnBlLiw4JE8/fXo7''@;'; put 'put ''RlJ7amghYlJTT09wfDklViV9SVh8dz8lWC50cGVoOEtFcGMkSC9gcUA3Jl0uc0ZHdyM/eSlWSFtNUSRbZWRpb21IbisqZ1hZPkozV3sxOWVQYVI9NzM/az9FSEpEPmd3eztXSFpFUiw7R1pwe3VhVCplVnBrfEppQl1PIkVHV3ppayl3NWohZ31LZCxteDhRNl9kWWY3UzN0VGR5ZnJ6O0okejA4''@;'; put 'put ''NkZ3cCsyPGtYO3w3KmhmZ211eiFaNE9PRVdieTZ+cmYlfklMbjNXVjMuMzczNm55fkI5W1kzQDhENX5zckA9MnNGKWBMT0A+NS5CLHFaOFNERkcwXmYjOkJMYzphJEY2XUxaQHl1TlBDb3Q7ZE8sWiVZLFFhPiJoTlMpPEptLjMpeCVxaGNmckImZjo+Q110MEJEJV5eTjYycnNgXm8pZDZJWHFq''@;'; put 'put ''WCoqQUVVRWFTOjFdV1ovTH51dXFvMissOX1efjApMG85TntvRGJiazRXY2xYZ0xXX2p6QGJkPHM6K0tnKDxsbzdyLllpPTN7SHRjKSU4Z19DTn5UWFtNMFlLeDM5fCZRdV0wWFtmc2ZIKkRqRUdDcSljRDskfkdKcEUkUSlnOUZrIV9eWndQLGJoRjx7PUZ2aUsiT3I3VHNSVHwqTkVrKnkzUjBq''@;'; put 'put ''SjtCZyIucXo3dmlIXjpKemA6UFBlNy81ZHomNlN5U102M05tY3xRc28sKmxhPzFre2F8Kl1wOTdQPiE8LD4qJlkiSzZDaEA7RF5CSlZ2PG5BPm9MU1s7TF5NTWZZc1QuanVsKk9tZUJqOnlxRWNfbigrNGJAJnE5bW9GRCx5L3tLdCtdPUBPekpjRWFsYnVjN1dFMExqXikyUHhzQi54W3pjanwu''@;'; put 'put ''MTs5el5EWF55LyhZMjdFQyt7P1t8OnlidyI4UWQ+amg9cmJdJEhbRV9sVVBjPCJqVFVlMVJ6YGNuajt7W3x7P2t+SEBhcm0zeD0jK0d7eENZMyI8XiUkVUVMLklCaF9TaD03TDcpKXhSa2RDaTk6akZ8c35EM0BMP2hhdzAvdkJ6MEd1MVVAJHArLndQLjVPLmozbk8we0k7eEEkVWJNcz0ueXBT''@;'; put 'put ''eC8mOmEyMH5kN3dAKmhYTyVbfi4yYzdWZ2wkdV1YX0BaYyk9W29XNyQ2VERdXXw9NzohWUJ8OjJ6c3VqL2hsbT0mN0VhdGluQ3UsOntTSldkN2guSi5dIS5dIX1BckBaSjxGRGJdRzd3P19oL34zPHk0JEA8YUl0PntCUUJCWzE1MnVveW97X1MrQnRfJkxCVDYoM3treUYzdWI2c1svaUFqaldC''@;'; put 'put ''Wmg+ITchNTo4V2xHYkd5YmQ1aW8xRShYeHo8aEl9N1ddL2Z5RVFodFYyKSF6O3NXOTx6YFYqKC84ZjhfQ2ZmeFMzYDs7cihrQzl0QEspSF8rbWk2ZGhTKHlhMFddYmk9MlIxOStCcDYhSXg3N18rcFFifkwmT2MzYlN0bnFWRD5Fd3JdcDd4fVUyUWRDQmN1MEByJHlYPF9vYmkhfk5lNHQ5bDQu''@;'; put 'put ''KmFFWzlmSUJLSFVTWkwrIShUYGM7NVVyWCk6dlB0OUtLZTt0TyFNSyE0bHU1XUJ6NmdyKF97N2NnIjp7cShVRFo3dXQqKTt6MC43WU00OGojcVdmeEJ1KFc7ellxSXVWSzMqSFkkXWtiV2YxQH03InUpcHgpS3RickZpc1dXU1JFalM3dlBZcGAkdCI/K0JgcHBAJlIyb0N6YUBsMUt0R3wqUys4''@;'; put 'put ''WHkvLGVRfiJYJkwoZmUyOipyS0VzKixoYmwmc0ZxezlNPE9mWHVTfF5uXkNSSUEhbX54YiU3RWQ1VE03VihWZkh0O2VkPi4xOlNqak15KHQqaztBUUBSQk1VY2E7Yi9VIyhUJVBhZXRkKWFQJWpdTjpDUXk6NCM6KzlHciNNWmJ8P0pQaUsjOmJHWnE4Jig9dmV8OGtYXnVSfXh1U1plV2M7YTkq''@;'; put 'put ''Iyk2YFsvY18lVUU+W0hBPlNHM1g5Jjp1RzRsW3YsTHtsMDwoMk9pQ05pOUtdRU9xckk6VG1rZjdkSWwxWm1NZjA5b3JvQXlPKExPVnBIYkdhZW4maXl3LDp9JClKU0czPltzOXJwYDR9cncxfn5HUj0pSFg6Yl9TP3VgbnsvYXA6UUA2dHBLR0FVKTtheEdiMzdEOEtRdSE8a0p7NTIrJkE8ZD1s''@;'; put 'put ''M1l6PT90QmcibEs/SnU1W2h9JnxpYjtpTUMvVH5+aGN6LmdNZmZdVUZqKkdub2N4b3tjfTptTVdMV0g/QnhMU3RiTVN4M1l0cDVlfnQwPDBWUWR0PVFsLjRFOERqSXB1VzJ4NDw+Q2pOaGZ5P2RmM1p8e0MlO0xpMmxFczs7YSNaLlF3JU5wLiEqKEMhczY+eSUwdCh0V1h5UzJIUWNpU2BAP0RQ''@;'; put 'put ''cTRPK3VLIXZNW0QhSkpBPEM9bkUoSUV7TSEob3hxR2RDfkhZYilYYCJMayF3OGIwO2c+eV0heWp8RkdLRG5HSiR3S1lsOnUsdSwzIWB8JUEwTmpePW0wTmlNZW0kOVBeWnkuZWl1VHRuYWxZPyRCQ2cwWDdoVCs/a2hiPyVYLjVaMF9VVjtAbzA5LlUySCtnOkttJVA4NjtnPmdvYlY0aGdoL1lW''@;'; put 'put ''aihOR209JTg+K1U+eDFRWklreTk+RmVMMU59UWx2InJkeiMzOi48ZFZMTCtYR31LIUl5WnJ1NlBoZ2wyKkZ+ZnU8fWgsIytnd0U+JEA6RWQ1cnI+RChQanJBOUc/KkV6MC8yNCNmVlhyT0xDLmNuIWZeTHg+JXMoTzU1ZmlaNXdufXIhK3JbSUshQyQ0T2hLXURkOjx0N3R6ISJfaio5MFk+Ljk9''@;'; put 'put ''Yl1VWDFjfDwrUj00dlNFPnlKY01+dXYvTyJsZil1SmdLSjs1JF9ITXFHcGxVJUtQKkBNWE9gS20xVD1taUZ4OzVYVmN2XV0pTX5xSj8zdm1AYCQ8NExDd0h9MCwlK0ciPH1lQGM/XlhIKXpRKWl9MFBVMSEqejgyZENJNls5fi4jakpkMD5WP2Q1PEQjX0diQzQsOzBtfXxFREZaPilQPzJKVDw3''@;'; put 'put ''WDE1Pz5oI19FbTgyfWlsfVBGVVBgWihgQkJQYnRXM3ltV1VWdzp8UUJOL1UqNmV7Jkd9Myk2U1BBTG1VZ1N2MlVleixuX3hEaF98eCFgcH4mI15BW3RSZkIqOz4qTXE2UVhXSE91LGtbIkVjW2N0N2BOeUNSZ3c5NjA4Yk17LjlhXiEkQVVuQzFPLiskU0o1amMlOTwjMn4oR1gsMHkvK11nRUBv''@;'; put 'put ''OGFfUDN2NH4hMkM+IjZfOUM7KUpWclNJPnR5S3tbO1tHXUtZfiNZJnF2S15dYlp1Z1g2KEYlUDZrZGUxXU0kVVpdYFlvIXFmNGYoUjEmLkozRGZHNmIhdW1dVihmdigue3pNMmo8Q1I5fH4hRV9jazU2V1FMSltNRTkqRWdfYVhYPHJZS1IkVStHM1dCQihwSWVaKiVyb0NvJEV8QHZ+PDVtZT1O''@;'; put 'put ''LHp3aE93QzR8al4yNUJfKiMwelF0MzNVMnosVFtJKildRCFQSUlsTil7diVJLDNKK2Eldj54SjlUeUthfDsxLkNdYVM0d3xVaXUmYTB6eURicm5ualJ3akFaKUlRMG1gJkpielRFJX1ucEJJL0NDezxwL3NRKlVEfCNhN31tSGtTTEB5aWB7XXcvUGpyWE1iUDNHblhZeD4qQnQvfF9FTEJpUn5u''@;'; put 'put ''MXQpKiY5Z0F8Ojk9MnpoT08hXkp7aVtmRz8/elh0SnZ1OkllaVJqPHsiQDpyO1IvVUtxZDptKzFnKSg+fH1SYmk8bHluNmFTaVN9U2ZqfHpZK0dwW05KYSk9WiFofjp7YVU7VztAUC5DT3N5ZjpuIV49OGs1bXpGI0hGPksyKWtPVHRkcnR9ZSRvMmZaeFFVSTx6UEFFQjM5X3tWTD5icEd2KVBY''@;'; put 'put ''Ql4rVWUuanhhOk5KSjBzNG5xTFE2PDlXcC9NVk5Nemg6MVZJREtsdHpSfj9eSUhQPHxsR2doPltnTVJYKX0xWnxIcnt+RH1yYUtvOzJAO0okRldEe2wiIz9kYCU9eTFaPmdZdzFiPWZffXBubSRXSWlmeFZlbVJgbHs7IkJIeG88NTJ7WzEsRHouXXpXISVnb3IzKEdMTE5qVHx6KERWcCxHM3Nk''@;'; put 'put ''S0V3bi9lTyQ0eHwrXjA6IjVZRzF0Qys5XTdHMWdNbStmTTVzeUx5YVNoaSE6WW9qZmhXMmFAbE83NVtIcGg1ei5FXzowb1BhKElwe35qSHElZ2ZPUHQuR1o2YHFsdnBxaTNKb3RKdSNBKChyfHFQJDNFN3F6fS4yRjdwVGolTmU5W0k4I0hrYSMhbUcvfk9mfXc6NilVPz0vUG8rMUNnLnhiPGho''@;'; put 'put ''NSJfTm46UnZZWD97Szk6Q2JbWGFOMk4rOWhmZiNoYihBfCVYP0NMPlcmKFs8MyhRQn5kOFNONTY8UXRWTzNfZjg8PnleNktVZGF6JGF1MzpjZUphKHMhTmpjKDNuY1N+d1FBWUpsX0pyU3tLLFs6M3BLRUUuZ05QUT8odkBlQV1sP2VnWDg2MmJOUl5SdHRjcGN0OShRbWBpU1J5WDBPSmRGZlsy''@;'; put 'put ''d084eCJEdVsyNFBPW1QzfHI7bShtKzN9RGNTW3pebVRqT1NXdVdGXS5QNkwsL3ddQzYhOXlbSHJLY29QTUFNQyRfOmtJJSV8TF9ReTBac0EzbzJ2S095aXMhP29mOGlqJV5yIXBdY1NNZEx7S0A0TiIzNE82VnhPVlV7OSQwRVpqUnlydzdNKG1ydGkyTDJkdEJdKUVianF1LjV6Tz9Ofkw1XXg/''@;'; put 'put ''Nlk+Vk5qciZVY3t6WFhzR29vYV4ibDA3OlFLPjw3dDRpcz1nV1MxLyV5LHk+dSw8Uyh+PVR8PVgjWWs2SjJ5Xm84Jkxmb3BsI0pxSSJhT3V4Xl9bblp8fDViNV5XZF1AM0doPSZyMVRsNXZCekxMVzdLdjZxLyl4Sj9AcFBvbSg6I2BiImJjZHBzMm0ve113V3t4cWRQV1JyQnFFJWRlJGByI350''@;'; put 'put ''SVlWNEVDZDg0SSh1RH1xbUVnbFVWKHZkNi5GWUt5bSkpeyo/c0klQWFeRnlKfW1sMWxSOlYvP28jRSZGKDVEd3lmNlo3fnIrNG9gclMsXXhgZ3gqKUtvR19aZmlUcXAjUnFELGpOdWt2Vy46YFoqXk9KL0FeUFlxJXBCMCFWWTkkQU9xKl9pe19jN1kmRzJuLy46YTNTdlJKPXNiczhUN0JeQGt5''@;'; put 'put ''KDdPPFpjVFs2QjAjRyk0WjFRTnhNUUclIV8rSD1mSVtdLFtqLGBPTTpbLHdIQD11UHshNytEYXQ5X1gsOTkyOUA4XlpwVF5fX24/NmFDdmJDIWllX1I4RCYhPXxkaUo5Mm1pcypDWVVkXzVbVTVaZVc6QGcrUmc7IlBgOmZoblVLZmdkSkVMWlthKiooRyJ6Lj9DL3pLQUpHUzxhaDFuVF10PnU6''@;'; put 'put ''RT48S2FWOjFfIi9iTV55ekY2V3o0P1Y4LHJ+VUxkMGBJUDQzL2ojdktjTlJUTkx6ZH11OXExQlpZbWNpfUc+WnBpMDlhYVVoSHBuejAoKjp3PDBLWHQ/Uy5KOWAsQUNvTkpmfDd+RUsyOGklLzgyMTRYcjdqdHMsJWxdd1FnI1RzNkFNaWE8RHhHWWtWSylKeDkhe2dtdVMoQmBedyx1dWwpXW1B''@;'; put 'put ''clhbbCNdJnYwdWkzc2QyJk9fNW9aaENzMiN1dSJiKVJCYkZac0MyUDp4UzhMclQ7dnElaVshPCF1b1cudGUrYEBQPnVbP3xHNXY1JT8mOE5sI3Y1Y3owKUtEPmJ2fUA4fDRYVGxRdSN4UEA8byJxPEUlYz4rLnVTcXxpYitLVyhkREYqbnFbXkRPLCxxSz9fW2N4WnNERVQufSFBNEk4fFBFVTho''@;'; put 'put ''YnpoXlUvdXRuVnUlYVQ/cDNtWlkmMyN6RUxBVCYzZTx5Kz9LXl0rQ0t4ezpOeixhfl8kbDJ4NHszSWJTcn4zTTFXRnB1RGZyMipzTkpVeGNTRDFwPytmJGI7L1kvPzZvei9pa19DQjpmKl9WOEdgejRbISpdP25eQEFRLzleLzJyX3RCekskMGo/ckNLaX4uaHV6MCw6TXo9WG9NbyQ4PkMiTH46''@;'; put 'put ''UltfN0VJMDtqQjN4fllZL1cuRGguXWE0fF40RmVlSUdNZmMqI1ZbYXpEaWV5UmRKcXxjdz9jKnt6TjExTjlwc0JgXSFAQExaei4qe25CfnR8I2p6Tzo1XkUhajc3Rlh5MltOP20qYUFofEI8QSJ3fVpWbU1BVWt9P0lgSGRjcjcvSClSWlQ2S1thX1A7VGFNc14ufC44IlJ0R09qcmopXTh0ejA5''@;'; put 'put ''RENVW3hbdyNtWnEkXiZ2V11wOHp0c1t2Vi40MmkzWixQUjVsSkNjKDJsXWlXc2lTeShDL3xLTCowO3RuRzFKSklRNy9GQzhnfFIxXi5mW3B+Wnp2U1olKnFAY0FFcltYTHlSMy5RSClhelgyanAlWE1TRkFxTHAjaVZ9MygvIU5OTn0iKnI6Q1NTR3lILjB3PEVpNk9heVtBMCRsWiQuYDxQZ0Fm''@;'; put 'put ''Z3RaTClqaSJoSWBEPXVKcjYlfVIiK1o0XnM4UnJ+JHlGNHtMU3tBZSk0ek9SPnBqJFNHYCs1WyU6Z3w5X2g+QUNKdnE6YDAuLGo+SV1WTXU0al1kfCk+OVJSSVBpeCo8Kn5dPUl4Qz88VTBHNHwxSU9CYS4rJH1abGVVSGBbcG5yI3lAJFh9LmxPSHklZV9YbCp8NjZnaipSaVEqQz0jaFowRGJG''@;'; put 'put ''RWlxcitzdTNAZl8xaFY2YFU9SGw3V3lJIWZFZEkhTVY8My94RixiOFBET1JoblJufVs6bCw5PV0uW3xSdTpSPj1FbjFBeT5GOjVtOGo1MkgoQ2gyZSpGanBuZFpAe2JgRU1xPU9rX0dFUGN4THRAaXA0RCFfYCpDLF1vdys2fCozKUdlKjZTbXRNOUE0WVdNUSpWOjxCSTZ3Mj4veFd0NCN3eG1e''@;'; put 'put ''eWR1WjA4fmFSTUlHKXcqdWx3czE2aCl4OnMyeH4jMDRVYlJNN3dgaV0jc3oxNDRsLlhSXnVlITFXeVcxcFNTaS9de3E+dG4oIklhcjxLcztPNSYvVix7NlhkRi5JSlN5ODxDZm5uJWJ7a31oJi5SYXlsSntXOUU4c0JqMUhEUzopZX1EM2Q1R2grOkJrL0JSNVtaaEtTdnJARE48KD9fOkRrfFY6''@;'; put 'put ''djdfUXQ+W1NlOGpEQWJgOFhBXUd+OERde2okL2M/YjB1fkB4VW4hTWAyPiZpWiRrR3FrVGo2Un0rLltdWV9XWmRPayVWfSVDITR6UmdYcldCUyo2QGl9LilKfV5aInYoM0tWbSE4VFs2REZBd01+SGtiUVl0az50MDtNbD8xTCw/fV4ufkVkS3N3NWFlS3w5OlF2OH0ya351Ijt6T0YxXyJBMU5y''@;'; put 'put ''Sj4uJiJqeC4kNz5uQW52SHFwQHdVbEVuM3BUJD57TktSInR+aHRvJFFQQSxnNTlxcn11Tl4/QUtzSSF7UWJ6cl5RRiI+fC9yWXMiUS81N1FMeDY/KVElaUxwYVN3QiMqUDs6NTFyWikqIWhRc2dhaFozLyxkYE9bQENBJmVOTywjTng0fEssOiZ9S25CY3NWSUl7fmghdV9BcChXfDUqS3osNSZ7''@;'; put 'put ''JjkoSlF4VUFgUW55Tk4qbGl3bnswXlMyQG8oNjc9ZkhjWyQpZH49MmhJZmg5b2c3ZHJ3RWVaTGhuaDV6I2dpYUg+WjFZWjt2THhRV3QwL3FadyZMVllEaWglMVIsNmVia15pbGI+VWRYLzVxeVVYb1krXzQ+OGExTz1ndkVPUnQ7Mm0mTUYqUERMUDtld3E3cm1MPyhaREV3WzxkZT9RV0VKYDxe''@;'; put 'put ''SXIzYyxhQEtIZmtxYW83TXkqJVpaREdMdDBCfmxXRE1AbD9jIWkiTXdieT5RX3lObnR4QGFFYSp5UXguRD90byhMJCl8NjpVWW1MSj1MI01MZyQ8SyJCQkJ5WjtiIWw4YVRCVSpDJCUje2hPaFlPPyE6SDlLXl95WERJSkdldiNpWXhnaS8mdC4jc35gIn0kWUk7Pm5vRS5LSiRDdlEqXmclYzQo''@;'; put 'put ''NkpGb05VKSthKlJaNyF0TXhPczErdX1dU1V7LG5OZytMRllLM3EjeTVBMnlqPVNxJHptM04lbTQ6N3puWDkjVzlMJFBRTU0vbDAmWVMoL1d+fW9qYDd4Q20ubk9rT3wiQzcwfUJaOnxXWHlPazZ0VHhXS0wrenlDNHsrPW5dZDBRTz1wMTpFaiVPWTE2P11XelBfVTlxTktUMiRpaU48OCJROyEm''@;'; put 'put ''K0ZweGB6ekRlMWh5Z1RtWylWIyp4b3JOVj5yVmBdZFZjYGtCW2wvNjBIfFtiUkwmeSx8K3UhcmVbJkFvaHUzNF9OYTY/RE46OVAhXmptSkpHZXJHO2tqLkNYNmk6PkVJKEhRSVoxSChaMSRvfn56R3VhPkF0KkZFZjVScDhDJWBKbSIoK1RZMlo2PkV0JCxyVHxYVHlZYVpjZUYqWXQkdjZPYlM2''@;'; put 'put ''TyRkenB6YnJ7ZUU+R0dKV3lDeXU4WUd+MVNyOVIqVTZXWlhfZ3FdbzJLLHo+b3d9NW0oIkxeU2VpUEd3ekBTa0NnJUtpfS5sTyt3MXp6Sy9BJFl4K0hDKGlzZXhbXktEMzt8fDI4SyhiK2xaUXA5YGFGKHgiOnY5LCZEU1huPyZOXnspXyx7Q11wKDN3OEo8XWBVXVZtK0ZiVlJqOXo6clFEXmc7''@;'; put 'put ''R1N1V2RxP2g8L0NBWm5hW2FdaVZOSio9PWJ0OEgiNH0pQSNYekdaNEp0bipuWCZLJXFDKmg5UF5XbXU1XXM5aHBKZX1UVTdtOzhnMk48L254dk91RiZRcWFTemhlI0dDWU5YQSphU0BELkdFd3lpdFIhP0o2JV8rbEFESzZjXWJBVD8lT1gpQXY8WTdLQV9OXitwdUY8XlF5YkZ7e2pIXjRLIWdL''@;'; put 'put ''dSYpMi9nYlFJc3lOeixJRWRRUzxze3N1dUhGMkhLbFBJIkJlV1U/S0tncyN2W2klWlsuZGBuVWhUeXd+MU91dDVUdlpgZixIX1QuRm11bkV3OzM+d352QDpGfWIjVHw4WjNsXXJ6REV5Wzt9UGFYLko4LmIsNEw0UWxlb35rWitbdDs+VDVmJXsqOVplIkUzREVJSVkvTWVlW2gleSNzbEJ8IS98''@;'; put 'put ''YDswfFBeJGhrOUZCUmNIb2JlTFJaN3FlMWNoPUVOZ18sdVgwSioxeVs5bUUrOEJZOltFMT4vSEBSJntvSDhLQClwOlJNMlQsPk1saT1memdyOWp0LjFoLzwiOFJTOz98fWY/Q3FhIVY3SWdqY0Fka1g4NSlGXjtIYDMoUU0qPyR4a1lXT3QqPUlvUUolMUhpLGxtKGssNnJAOTc/M3hoTnltYS51''@;'; put 'put ''eC89Kl4hb0dXey8+d0pmTkYqPkV4QD5EPz1NT3pfJCxNTip6NUVLQHZMeFRjIVAwNjw/bjhRWEVUTShdaTY/eUJhMGBzKzA2eChGQTw1ZSN5NT4jTX5lOyVsaTVqUVlIfkc8UUxBdFBhNDZCVTxfXV1JdjBIOHkwKSh+dWkxSTR3QDZbPlRvRj1tfENDWDRaZ3puZkp+RzttViFWV2pIKjx8RFpP''@;'; put 'put ''dzFBfEtwajd6NE1wRnRoT3ddOH19JSVXImAjclY8THw7dC9nQjM1TmA0d2xhSkJib25OfiRAcVo7MXs1WXIub3omW19GbG1Zcnk2bDhDQ1pCKWJPe1ozTXp8Sz5kaHI+blB1VXEhbHB0Qj4qLE5dNnw5bWdhd3tJIiguRS5McH1vKC9UZktLZlB6RmgmQUBeNSU2P3s6QVorJlpZOHBBIy5rfHg+''@;'; put 'put ''T3E2VmZNS2RWSGlZN0gwTmxFZzo5fWV1emVeP28vL0ZEcTRXPjElNXV2Xk1SXW1pVVFJc3pJWV9TVXI8JV5oRUEoYFAoUSZhYUFNVyIoMUl1M2MsL0NTd3N1dWZFU1JEbiN9eENDVXNLfjxMSHVROkEodjtTMFJjKll3blspYmRrNEVgR0QmNHxaMGl5XTAjPF5BTmRFaWUuWW5kVHtATHtvfF9M''@;'; put 'put ''KkNWMngrMEw4WT1iOUJTL1RlY3pxUHl0Rz9bcVs4QkgyOTwhcmpxKS5iQEM7InQ6Pml9WUkjaF98bENDUGprVWYlODZyKDFGc0xGWW5eeG9+VXYhOS86eTkyXTVJaCRdQWJ1S3hOVF5SdH1dWVM+JlJUKVV1emcpbmpjIkxadncyKnZta3VdOC50filQdFBgL01UPUt9S3ZDQnUvaTs6Q31mWTpM''@;'; put 'put ''VERKe30iSVViXn17MD1FPH53ZjhfXXFxdEgsRHpbaCkyNXExYXh9IXpvVHIlTDlvLEhXalQlNzZQN3Njcm4hWExgRDY0I09jaVd4RjF6bS9fIkx7fkM0blNransyNX15TCFLIzkvaj5hSWBock04cXJoRCMjX3pxN21MXyhoTWgxPjdwc0phPGtQS2xRUEI6XW4vYWJYaiwxWCowSUg1WV8vak9Q''@;'; put 'put ''OV90VW46Oy54ODF+cSY9KWlpNGBbb283fnBFTTQpKSRnKTE9OUs+c2B6XWd1Xk1iaCYrVEZSTj8iWTs8In5eLlhmbFAiZiUlYFs4SHxPXzxBK1FNZ0VUXi42ciZ2Vj5YKFhkZGxXayRuW3hXPCk1cy8kKipaPG4jSUtsQCN2cjR7aEwzLzFORH5CSHsicUpqNz5ZN0skXUIyW2YyMSl8eHcrW0JH''@;'; put 'put ''fWVaIlBXUUZmSj9malRtYEhrRFR+KUdzeGhiOl59VlJuc0gwPCEjTlBbOSVeYnV5LjtHPSEsL3QyKnBgRzE7MnVnVXcuImRKdmFvZDAoS0l4NHFINCJ2RUB2dHRpN2RYWSpkImBQOnBwIVBJSTB3cSRDSUNIIkc2eWxuWjEma2Z4e0VscltgcmozMGV8LkdjdldTZVhKVywsRTd2KihtUDJyMV9f''@;'; put 'put ''aTRVMExXQFQpTHl5Mnk3bmtVPmFyZU5oVU5maDRRezhUMzNDU2Y4KDVFTy5EdUAxfmQmR3JRJkZScGcjPCg+UH5bPEx0NjpnUCpAfixBUDMleDF4eXApa3xtN242RiFveSssbUlGWUVWVkJNMH1ZRWhIX2hpIVN6XUljP0o0S0pCellDSkRgeDJ4eDIxOWFmMWFQLypCS0YzTiZXWno3VDZyJX4+''@;'; put 'put ''ekthN0RNVEZYTUtza2V3Z3tUUCk+ej1zV3JJfnhMN1RYakBGOzdAaS9TJUclcEA6SFVYUClSVkdCJnBlZDgiVH51bXg6RnxCNk1xYj9uNWo2fHUlTGt8QzB6QWF4enUhbEAva1pPanZ7cHJianN3Z1BmYmVaSiYkXyJVQDA+aFF1OWtZeSs5V31MR1hYQFl6MTBUPHhTQzhdOT89fH5rRHw4Vztw''@;'; put 'put ''ZV5nJEpLVWo4dmZ5akhfd0lFPW9EajkwJE1oXmpkYE40dHlVIVM1WGpzcCg7MS9yNmltTHZXM1B7IzFoTjdafVBNJFRCImdFTG4rciwqdlJ8WFZOJjk9I0pWWGA8LmB2eT82ZHQyPU9iKGgwd0VtUG9seGVIOyg7OGhtMmYvaUI4dUZ2PnV5UUluJiltP3Fba2h4YUsuS0gzcnxlLmJLSmpiZH11''@;'; put 'put ''MDhpd2R8NWg0TjxgKE1pXkhje1E5X0Aralt7SGVXIUVAbz0yKT15fCRSI0RtMDRmfmxjNUg/WFF4VlJfenUsJnAic0g7U2pud1tkJFdefCMlVUpkIUpMMDBuT3teQEBGXnVsSiZTYlBdcHpAQ3VNOFFtaEZoUz5RP19sd1o3dG9WX2wsQy88YUcwVlh1LlRna3UqNTllZV9weWQ2Vm0/Z3tdbzAh''@;'; put 'put ''OTBmVztvKDdFSWt4VzlhZnFlQFU4YUROWFo5cjN+USZNZzxHNnlLbU8qKEZwSUVmLl9WdD9mJSFPe1V9Mk9Ie2I+fFdzLzlKe2VQeiNARGQpZjMpOVBXfHVjIWx3USFlNlJCPVoqZn0lWGJGRCx1PUBacXpZSShSPkZSfWppTn5oYCxQPT5pSjImfjd0b1lqL3A2JUFkfS5WdClJX0kmSlk3L2d9''@;'; put 'put ''MnUoVH5uI2Fnc3x8PU5VIWlvSEd3YHssX3pOTEF2VnJPLE93ay9OLi5xNCRrSV5udHQxb0wjWzpUIVJweWh3VFhyM34icyxoY0tLZzBFYD0sTFFKV0xyQ2dBUT94T0ZDNFR6fXJoZjtpUzRwVHorWXVgRGpaPTdAVzJFfGVvbkBCXU1UI0hPJVVNQ1h7VE53dXc8K19oUmtgXVNjRi4/aHVMTjJO''@;'; put 'put ''eF9pXlAwKG9oaUZaN3hyLjkqdUc7eUJnaCE1L05tamNRVWVsVXlvWk5ONXY9WilBPm5tNW9YSFgoTlYiX2VMaEc2UyhVSGZyV1hIPjdMVH1dVFk5RnBPQ1s+NF5sS21EakguP3lqIW5NSi5EWXQ2ImBsKHJmUCw9SDt3S1k9YWBhV0gwSEVEbVZgSk1JK2UzWS94ZEMmMCRuRHBGJEB0MHw+citL''@;'; put 'put ''fWMsaUlKVWxSfmw+PER0M1t7Nm9KcDMyXmwkfDp+VUBtNXVJIyNHTFljaEQiZDwhazRBI1lOIzdnXTQpM3cpIVJxdE85c2A+Z3dhcDBtVDU8RmZOY1Zab0RLUCVTJDZrRzQ6NUJ6QSZZdmQ0SGlyKVpFWnlWRz5vOStQXTNnPzteRlV7QHpDZTRhdTtTKFBVbyY2bik/U102RSlCJEVFakNQJF96''@;'; put 'put ''RmZna19nZjo6TU53Rk9IKyR0amN8K18kbi49LC9qN0BMYVp4Pz57KHhjbWI0fjguWy94cEFZZnFKPS99T1dwfjdtLCZZWFN0QktgWmpuNTlgbVNnck5EZlRdYG1ZVn1peXowej0uIiZmOyxnPkglKjdoVzdsYE43aWtxXThKVyshR0oiX2Y4JDFQeTxdIz57VSRfUENDKF4oU1RZPHxYYlIyJDVX''@;'; put 'put ''UiI5QmVZaDE8KXY2JiQkNHQiZEJbejZrL3pDPUVaL1tmXVIkOCIpL2lCZnBmMzZqaEN2Qn47MS5YYnptKz94NjV4L1k0dm1MMkI/eiEzR3xfZjtmVmo9SGJIYnApQDM4Vj4hWnMwRWxxUTBrbU9JKjk2THA2W2IjU1lDbTg2ViVEd3BmQGVmLD91eyFDXyUuT0MpMjBfOSxaWio/LlI5WlgsJSQ1''@;'; put 'put ''akMrM0s8TCJ1X1E8R2tWYzFAJk8qfkxEcTM3dTl0a21sQSZhYkw9TVY6SzZ9cEUqK2YzUDh8MWc2WFZLXi9sWHMoYHNSaiJtUTArfUczW049ZG1TY0h7fFlZaTd9OmQ2Ti9KXz18QG9EekFEa1dpMzx1ZWwqPVhmb0gsWzQ8dVMuOmZ+PzR9Km9XU3FKJS9oaXVRQWFvdVBNaFdAPlcsOXc0c3VT''@;'; put 'put ''VXU4Uz9PPT9AP2xFSmVtVntpJXNJRCN9fnhjSiVYZmxNey9sVCIiKXVhSndrX2hOWUNwPFRAWTx3ZDZ4MksubXBjZ0xXZXg4aU1QVGQuQ3YjK1c+Y0ZxTXA6KVFWTWhVJDFzL0dIP1dKIytdfiozXkpXKmBYUkY8S0NSKnZSTE5tOns2PSkxOCJTej9aOU1iMUFXK01zTWAxTmtDfmpHNG4jOCl4''@;'; put 'put ''e3szXSFRMXJHY2pEVjFZU29DfWxlS0RzN0J1SHdgLyg3PyM9ZkgmWWBucSxiW0Z5Tk0sdkplSyo5I3BHTjYlSkpKMkJ1fFNHYTZddFEkTVpRR1tnZFRNaXx7am4yVzxNUlUhaDNWa3F0dFpVVXw6eHYsP3dlR0BhcjVrXT8oYTpZVz1nMSF0Kn5HTG4sTF1TOltNLEMjdlBSXnlNY08ldSNua35g''@;'; put 'put ''JHpRKGh+Q3UoJC91bD9uRGN5L3U3Vnt1cGBRVGh1WXpWfX1VNTVIYmR+Kl5SfCp9PVRkMXtRUUNOQT9CfXFRKzpeZWBsSzNSYWZ6JCEhSFhQS3d+T3EmfVpSdiFrXUdBSCVNUzNYS2x5RjBtcTQ7MmR6L0QoPldPVUB2d3NhQyVSbS80cXVAaW1pXXJVeCRjO2N8Imc8bkNqW18+UW9JSEs5Y3du''@;'; put 'put ''QlskdCs4ZS5sR35xfDRpJFNEJmp8KEB0PiY2dmheLl5aRUU9RDA8Rih0fT1zNVV5XjAvfipMMENFIzx+ZGJ2PHFwVnx6QUl3RmhzdSo0ZVQzajlNcTswS3FnWkFIcWR4WXo/RHJfKmJiLE1COkV4Y3JUXnA/V0F3JTQ/RWM1Zlprd0QoLGJvJXB2KF5SfHo4STlOXTgrQUg2UEYuXUQrLl0ob2J7''@;'; put 'put ''aHFadGZ4M3kuLzghdUBGS2gibG9wfmZkU1M0JDddcTthPVpJfCF1ayw2LH0wNkQrezxvRF89NUwrakt3QVQlcyVhOm1SWEk1YCs/N0RKRlJgdXhveTwqaEhsbXx2QDEpPWJWVj1pXmQmJUlQNF4sNnx4R1FtanBANiUkaWsrRyEsYzx0fSZ4cU99fUZqbzAjRWs1OzQ4ZiE5SVpoQWFiN1VWR0wh''@;'; put 'put ''Ok5XSWwrRG0uOSY3fTNfUmVeTl56amRBN0RrWkNXUytSZUk2TlBLOTxfcDJPP2klc0pmfUc1b2l4KTpydjtMcVRtOjtJI1kpdFtCdTgjQEJ6UGUwLDh2XSY6Ll97Qjl+THJOQihJWik8PUd8RCtEeGAqRjtlKVRTMGV+PGQscWpFendPJWxUVWA/R1dTOEx1fXxELzU3U3g0dUNYSDtESlA9fFR7''@;'; put 'put ''bFprNS5LN3pKVkByM0JhKGBJV3sjbU8hWld1Zj51bEV7PzdCQ2lYIiYpZihAazdIUHdqJiE/Vlo1XXhfXTgyZGUyQCh0ZytGdT5TKH0hXzhvRixtWjRDbWF8ZCZYMEs3cD9DUHhjUShjXkdiVU5ZRVoyRl96NUV3Ul1GTnk/TFltJjYyPj5GVDMrXygrJTVHSGg+ZnBtZFZQZk5dcmh0ezxmSmg+''@;'; put 'put ''amdzPDIhUjFGO0U0eCNeclJ3bkZNYHFHfl5IbXpjdVR7Z2IqSDNSSGQ5SVc6TisoQSwxQ1Q4XVBwIUhaez09OzUvZT13ZldOQ2xabzh2N01ZSFcxQFZ1KWYsTjRzLGc3SnosU1M5QFF8OF0oYndWPzJDZkdhfSQiWnhafWAvK2QvNV5ILj88Vm1vRTckQF4zMjZlTFdQMChaUFowZm57UFA7W3k7''@;'; put 'put ''cmdIJD0oLE1Ja2RVNSkpUlRlL3ttaGA0c355e1sqJWpeIWhFaTR8WCk9My55fSNney5+W29KP0g0IVlCdG5KeD8qaGkmMWwuNixiI1ZGJXg5bEwhY34+TzN2TTFLSEx7QjszUSR1UUZUPmJbQkcsLFUuRjQvbT1zNk8pU18/diVZJGZpO0R7UG0vc3BAZXZDcEtbd0g8PGUxcldjOi8+OHo6Jn5C''@;'; put 'put ''LiF9aURaLFJfPDNXMjs/PGwweFIuOntYPT54aTF+QHckSSluYSxGWVdtbF0sNSU7TGA/KGwrImYwbF0uOncyamtjd349fnZFSFphTmJ8ej9HWzokOD93OjUqMGVFQSF8JDJORGJrMV5XN3x8LCI1e2VxeC9VaXJXQE0ofDVwSCM5Xz5wYV1weDk4cylDND1mRC5lcEhEWjpwbXkzXj1JR1NUUkJs''@;'; put 'put ''Mip8dFYrOERHVG4mIWIpY2I2ZXZtemV6d2J0aVVwTVdSajZHVT0rT0FDez11ZkJrfDJlTyh8WFo4XzY/ZXhFLEZ6eUEzTlJNTkw7YmBuLnMuakohXlRHdlcjbS5VKW9tR2hVQENsbzQ9UUcmJT8jIW4saz98KjU+OWZaQjhQQWNCQkIvK2RTPDFINVJdSno0ZkRVTHhpUTg6eT0kNktgW0A4ZFYh''@;'; put 'put ''cVpYQmZZeDVxSzI+RHxBc3JIIUZPMG9YRT8zPWFdXXZNL2lRRGB+KCZFZ3YjKGtxVURDcnJiO0hxQ1BXIjZlJlk1dHVVXnBRNU9BIVE/PXR6RWVZJjwuM2JGNz4hdGMmfkkmUSY5TTJwTEhCa3MiNUd5W0N0UmBhJXNUSmRCZ1NQYihUNChaazM3Y1NYcmVhUlBBVF91fEk0NUhLYTJERDBOWzds''@;'; put 'put ''O0RSNnNvNj1ZbWlrZX1PZSQ1dlIuP2pCWVtZRWohfVVEN30jZlZkQG18TVZMNCksQGEvNEhuL2FnJlJaWnNKYD5sMHJdTnJmS0BtPjQ0N3tLZzZQSjp6NitTWENDNGw8KiJyUVpdNGZkR2pPLkJneyM7dG8xXSNHbFM9VDViUyRFJW13YEhPNC9NIURDfmQ6dTp6VTNNNXp8ZVhWWll3bXVRIn44''@;'; put 'put ''UUxMZCg7aV1xSDMiK3lnazBSK01sT0B0ZVtqNUdZaGBzZFJXSkBHQyZYQmFSK2VhPWg4SVFPSzVPbU1iYEVlaShUPnNZNEA1T2xIZlNKYDVGNHRkJUteZnN9VCN2cnswSXJFOj06dDReRmlRKks/eCEkQWd6JjEkeHBySTgpMURkMVZQUWRTJSk1QmIqTSNFayVlZ0N8ZGdGeVU/IjxhVHc8Ll9z''@;'; put 'put ''W2IpIUpRTCI2ZDV0XWteOE1KRFVqIztNRD1TWzVCXWohc2kuaTlyMygrKF5zVGlYd1hjWSkofiVoXygmO2ciKkV9OllLeHs+dkAqOkV1bzhranhzaUA/VGIxSVk4Llh+bWV2KlRXamdITXp2aU0iWjpJWko+aHFEOlklcTVlU25Cc0NMNWF8WD9jL3gwdGFYZHBSZU9vQyU8cDA1cSNjZz88a19j''@;'; put 'put ''OVRHXmVqSUwldkdRdjFfbzZfNlhlOnZpdHZEXzlbJGNaQnVSbD8lMUlLUjJARFtIUzJadE1lSk17XkklLER5XlIjbH4+dFN8ODI7MSg4X2s6XT10UCIhMWlfUHQwfTMsVSp3MDMhVyx5Z2FjcU0xeGduWU9GaCVCXzQuW3pnK0haMXJ3Y30xZFhMXVQzUkpYKilBRkI6N19XTnB2V2BQTTNFIUlw''@;'; put 'put ''RndyR1RvRDpKdSlUK3tXUHBUcWlxfkImL0crIVJJPnI5ZEdbcTtvbU56NVlfIldsRlpoUlc6WUpCZiEmMFteQjVmZkE6OipSKDBYWkhiOlV8VCJVJWNwa2JwLmtbMHdLSTU/YW5mWiU1eDBmVGlublFfbGZ6Q1V2TiI+aVIuUH42dkY7KzhPKDxISnpaVTdjKUhvRTMiPzRXKl8yQyI4KUZFQjM/''@;'; put 'put ''VH11dU1EfGAzZ2AvM2c2L25eJns9Kik8LiN3cUtseD09W1I9UFFzIjVfX2h8cjpJNU0hJCJ7WE9Ca0YscDtFMFdodi5OOTFrezs3JW8mKlcqJWQyZGg8bGMyZG08bCQ9SSR4Y1AmTG1CUm0zVV9FUloveSx9LmY2M0ZRRGcuPjxmM0dZRUpPYC5Oeit2YktjKT91ejxzW2NsP1M7Y3c0a2dCTzdD''@;'; put 'put ''Ul5sKEZvXXFxQFQ1OzdpQCN2X1QjczJlZFRPelBxPGUoK2diNXZ8dGhNX04qW3wzfipkIjZ1bjY4b2xAXU08czJVYHpNIUY4RDpzbVEhUzpvKH17c0NHTndUZHFkMSk0IVlZOF5ucChAXjdkbTskVzw0PV81YDJnVWQ6TUtYSyNzcFpLL3g5TWklOFldVTJIZFJpMlZBME06OSg8cmlQNyFtU21Q''@;'; put 'put ''cWkhZSlGPVdWRz1oZyFsKT1ONkMwYUN4YkN8TCU6WkdWe1tRUU5uRDpyZHtNWlVzfUp2JnE8cGBtOnAuRX1zVnM5Zkp2PWo+VjJlJX1AbXZBb019X09pOTI9QCt9SnkwM2hJLjJOWD1JO1N3VWZ+NWtFY25eMyYkKStdMTxYKjtOdGJeIVM9QWouU3V0SmgoWEh3RFkhRTdffil6aDtzYSJEfXJV''@;'; put 'put ''SCo8LCZbeVZdXnslIzd3N2NdR2NxKUk+MHwjU0psb017S0I2UCVYZyVPUSg7L193dFt1SXw5VUA9SlRPK3J5dTFUdT1QaEN0Kl19X3JfNUNGPDpKVjhqX19Dai83RzZWXkx9PV5ra2MrVGk+Ilg1ZHMxI1ljTntDMT5Ze2NSPz5aazdYWWJVKVZkYWRmYH41UVUkc1JSY0MsSiEmV35MIWV5SFpT''@;'; put 'put ''eXoiZH5VWn1MQEtLRGgwLCYvZ1RyUzQ1b0s6I3NZUU1OSlZAfGMmUFFhdmJeQ1okWC4yaiV2eEdzamMvKnJnMWFGRDdwN2FdSnBbW0VVVG5ESTY/RTlvRVpMQU9RTDM0SCR0b2p6MXRAajtjeS92cWd3N3ByTmhxQUJjblJdYkd8a31qTWlDKXYsbztaLlYwPyYmdTBmT255eSl1VDZWLkcpSyk1''@;'; put 'put ''WlpyanhzNmIxJE9pa0Jvam8sdVdAblYpTCk/XlhHel4wN1Y8RiExSDVfX1lJe2NUejlEUlNXUUNfK3JAfmghNmNgOXchL18qTFo+ImRzXShCYUxmOC59TUZPO3ZWenJaeSJIKUNiOWA7KDdmPzZ9WGpbU20rKXxFSDd+dCtzfFhWQDxVUW5mdEhoYSprckNZa3Y8Z2FpLDt0JFI0dGZxOTtGdnxr''@;'; put 'put ''XTE6RVkzRzxDWExmTHVCMVQofEl3VE8rRGozfDhWODR2bVNIWGIsPCMqeih3X1JKcmtNbkZMKlBUYjdVPCtNeklScys/UTVkYjxyRSUlZXFweE5LQDM5UGRXRkVOX2VNWFNvPElZRUQvaTs4bEJmdWdBQ3teZHh8eDUqPjNGJW5LIXhoZER8SyFbNXV5ODh3Py54S0tfQzdnRip6OTJadEc6YT5x''@;'; put 'put ''SThrUj8pUTlMZTp0SzpROiFdJnFATmtGRj1mL1V9U00/IjViWTNwNz9JNztFZntncHhKc35zIzYrSz9MQXx7dWglNGBYUyp5eyg0eGpGISZ3VyVpO35nUTJ+blNbbDIlYz9eZ0MwZ35ob1lbKUN9OEUlOSZnKj9yYzpbfEhyKjJ6QFdJeSFkUF1KcXBWaDB6L0Vsb1ZLS0gocXY4YzA7L09OaXFO''@;'; put 'put ''Ry5DRn4oQiUuIng1JF97RXB4YmUlNEpRTnUzZDZlYCh3JCRNPHFUTC4wQ2wmd2shUyNgMkgjMEpwZHpMQCE5MytrL0AwdShTej8+VStMYk8qUnRIKjFFO2xCN0RZYldSPEc2U0FyQks/RSFlV2BtZ3g5IlIyUDFTcm1Ebm9DK0dtY1NNcHB0Q0NKUGFja3A5aGlNQTlVISFaQnEvcSFiR1dLNHo8''@;'; put 'put ''QXFVR341KGpyRlI8dU8sYzdEQHk0PG1nRUMrQitwKjt3VEw0T2A7KUxOR3U8SFBWZnspNzUsI3FvQUs6fStoTD1MQncubnNMfWhTVEliWFVWUStkL0ozfjcpSy5nPT8mcURQPV9WN1BYailURHM+XmI5WCYmM3J2PEBMOGx4cT8hUHIvJik6cT1wZjBMOCx4REhEbmN4M3BjW1BtOyZNdGFYQnV0''@;'; put 'put ''MFhlaGQ5IT9EZlVLNk1CRXVneG5pT0A+TGE8NX1NREgxPVlTMygoI2R2VVVodFNzPHV5UHphT1ZWNiJxM3EsO2JzJiFzeWYuUCp0elFDfHZRd11BV1hMUjJbb3l5R3c1MlsweD4lKUxxOV9ocmB8Py8hKkNxd0pObHpSMWUjaHxLdWFYRj0sZSRaZWQ0S0s5Vnh2eHlKUUNuUStZSTB3cT4pZk5H''@;'; put 'put ''LFEoP3ZeSj02MXR7UzBoOmgpRmBdU182JFZPI0BmKzkrWiNAOGh8NTpsTSw5RVBHcEZvY0lwWyMpWF8xOX1OPSpLPXx7Z0NRYTg+QSZ1dFokUUhMTiwhZ1g2dSVMQE4pL0xhQyskcTxuPjIlW0lGVldERnJlZ0s7MjhDKlloSVZvQEExVGJmQEl8XTskOlNmQj93Z0dHdWM5U2RJNzJUVVZWeFUw''@;'; put 'put ''SkA9K0gzI0J6Y35dKFUoNk9ocy9va0VsQWhwXkhgdjt6MlNebVV9IXNgLmkyI1RRIkhyIURCbVcxInVtUihCeEYiYX10WjAzUDBEcCRHRXFzdyRhW2NeRWM/d153TnZxWCViSU58XnAvI0NNJipoIiZFWjdJWn5FflgoeCU2Wkc7cXN3QlQie1RfaTVyYDFeL1shPyFTRz5abG48eGpVPzRrImA/''@;'; put 'put ''b3l0JCptXjxuNkVaOWUvaDk/Y2VeKExfKzo/eDduJXdeZEQ1fTh4NFZENyldVylsXTBhIm1hTzdYQHBkdzx9ZDxsX3p2TXpyVmhbNlZLOCtFUjxbViVXTChYRz08b0VZQ2gvKWE4MTVsUEMofTd8fnJsNTs+fCtKNFpARXQibngpIlBQbjwrYzh+O2FJZXwwdDNlXyhwOSNrVjI4Q3RzeTErOkRk''@;'; put 'put ''Y2hiWG1wOChoSig7RmljcVo9RUgyZXNgK005P3xeM3o+RVI2QF5YZCF2bmZZWlVvMXdXJXI6UTtJcmRoQTJGPkljLlA5eSE7dyMxMCYoKklHKSo6Yj1MfUBdV2hdMVN8N2NeP3VyOz5WZVBYI291KFg3eD5DKGlhRkB3STsvdT9TLiYxfVJKRFI1NyomZV45Xz9ZXT8ke3VaWUcjZyxYMmcxN3hr''@;'; put 'put ''eTI7QWJLOzExcFNJdk5MKFdIWH5lOzZ9fHp7WC4udzU+ez47TS5PPkI8V34zQ0xmLHBrKj1TLyUqUUMzc2k3fD5xJmFnS3UiMkB9bzNBP2dNbnt5L0hfYnlaPEl1R0BDM0hDXmZtRjs+cXJaRm9fR01ze18sN1FXVHxMdiRzO2NNMmhOYnV1Y1c3RSxkbmI3Py9pNUxxJD9TMSJIb2xqYiF8JGNG''@;'; put 'put ''PztrOixWc3hAe2FIZSx4dWg5SnBbOGcxbl9LWDQlVXpWOCxpSmw/L3htPjtIKTVgX3V6Mm41MkAxSjE9TF8zVCw6Lks5bGJGRSRueT08bWxAMnooLCtVKW9qOVI7bSRHK1o1LmMsPllEJT1EW2J8RTd9RS85eFVxd0pNazdWZiQ+UG9iZCFEeT9Ee2lUMTN9ei94Y0lAMVIjJWJ9ckhvU2AwdTNx''@;'; put 'put ''PlZIK35nfCNydDtSOShUeEkzcF8lPjNIXkFZM1dBT3tbRXg3S2twTjBwWGdXVE9yZi9bfXJAYU44c21tKipqbWw3NztjUkBVOWBBW3lGU0k4Q2BGS3hydnNvfWNXanN5NlNySktockNlVD9BdGY+JDxZSV5XUU9MISlyWn5mOVg1YG9KOCRMYWJ6MlJIYXYvW1h9TyVCfHxEcjBUV1hZTGEvc2E9''@;'; put 'put ''TSRQZjRaV2kvMmRVYSl5WS9RNDlaYn05Z2QjPmBseCNpYkYxcEBlQkQ5OlM8b015VUhuaW4jMnl9Z151TVlhU1ZteS5KXUc/YStPdVd1WXdpaW17MFhuVSwrSj5WXm1iVClLVm5xVzVQWzoiN0tjJSZgSDoieFBgVSpaOVpdKmRvdylLMDJUI3JrPkBgMXV2ZDlkJGo6ZlVPVm0uQXcrfmopNiZI''@;'; put 'put ''KThqX2x6W2RMNUFYd2VySzQpbFh8dSZ6bGcpbk9TPkp7b0Bze0dFeUxyJHwjQVIidnhweyo3TT1GYmNvY3hyKz04Vz1JMGpTMExRem42ckQlbFdvPklQJFBYIzgxTns7YThMJG1GW1c8TG87OVI9OFUqWUojMEw/KkFwKSpJWGZhU2guPH4zO3xqTng1eE1UaDgmXT0hREw1KDwydyIxe0p+MURw''@;'; put 'put ''VDVsY0gseiFNUzF3SVBHMERGWzBDY3t6Y3ROdERJbTIxfTBrJVpQfk94RFYuQlQ5OiwoLilKSEBJKWUlbnclZjdedXtVbjokT1lzLlR5MkJBRmdBMyR0cHd8VzZHa1VebUFBd1JXT1NuZ0w0eGlbWEo0R1NLVV9VZlhGYFFGJWk+VUJMIWBnLFZ6LHAzTEVxJk9IcjZqIl5VKVJUYyRgMz5TZHN3''@;'; put 'put ''a1Y/OUtqWz54c20ueVoqfnFuMFczMEBLW3wxanphZjZGJEQ/PEhEYF5OYEs5eUdiISI9SUN1Y05PamwlOjFneD9hbn05VSFhMnhwUyRaUmFuTUshZW1BSih8e1pnYjEyWzJ0YztHIj80fXhpT0Nnc3p1LHdZR1g+aVErTT9fKGBKRF44d3A9e2d1PiQlQCVHOVhRIWA6WDVzIXxyRmhFUVlde1tj''@;'; put 'put ''JGdXT1NtaT43ZyZkUmNQODQ+ZWdFMjVsbV4mSi4hZTZdOTA/c1ZQM1NNPV5RNUI2KSRlbF5uOWQzYntjKW9yQ3khNFUpfUFUKHdINDlyN0M1eW5oZ3loSltNam9tfEcwNHBkMVFoRjJgWS52MS5GazBhKnZFV34/XWBiV2J1V3BULjRRWHFEcXE9OFNaRmh8emMpPHdtfGBnY3tXOVh4RnI3S2ha''@;'; put 'put ''TTNwYkhGUnRSZVVlJHt4SkV7W2VrWlVQKzNiInd7SnhzbUhiUCJBOFg1NWs4T0ooUUpacE9gX0ZwJkY0bUtaXSQ1N1lsPyx4eGcjc01XX3NwMSEqdHREcFRWN09ASj0ocz12XlYqemNaV2JhXjRre3IvWlRtfDFMV1ZuJCR5blpqQDU3Sk94P1MlO3tLbXNrWW1gM2IleU9baFUmZ2xCOEsyLmAy''@;'; put 'put ''Kzs8L141c3JyMkdNaGU5WG49UF9qVStRYEdgSVg2dytaNkt3PWNNbjRqbS8wRV9SXSl6OXJvcT1YMThMOkt6NGs0eDJYJDZgPHh9OEB2OGJ2VSJsN1guSkBkKTBGekdtJnJSRypKZnUmPmIleDdXdUxfcEM6aGdJUlM9KGErNj8vYXcldCxJSDRzXiJ7fncxYGxOPVQlTWRROV4kfUUhZlAwTisy''@;'; put 'put ''bGRhaSEuXz5DNEBYLGE8VzxLdStJWzAxKj8ocj8uOyZsLGorZUsqMyZeZ29EQj5gOyhxZEsrdW9fQ0I/Xy9QL0Znb2RTOXp1eFRMfHY2b2wuM1pbJUUsMUo8JCRFJVphIUJlVWJlLlpgJD93eT8uaEsjVypERDlLaUd3XTw9KjxTdi5jY0dsUE8pInlreVBvVSt8Qjlxdj5PfGF1VUZZQnkpMFVR''@;'; put 'put ''aTh6KCRLMC9wKig/I0pDfiNxRjhjbFJTVGZwc3E0XkowLlRMIiZ7Pk9DRjs8WH5PbGdzSDE6c3xtNnt3alFHeCs/TGYqRXM6e3hxPUZJLylJcj1weyVaaENjKWYyalF5ZGg2QW9iM05EVUwhZDU4U0cjVGVbLDRDZU5IRiRIZUM9WGBVd0E4JXU4YT0mMnM7fkRwbHFRViJIRGh4eE4yK09gaiVz''@;'; put 'put ''OFpnLEV0ay41V2FRN0woSGVRU31rNX5eWiRCMTZSd1tmUypeMSo3SEJyfCFwcENoLyNkWlIoMVMxYmJGO1ZtazB3e01iL3V6LE5pflo1Nno5QC5fdm5Hc0hTaXpdJXdVMHNgfDAjXWB5Ilk4eXhEZjFUen5qRXgrMyxrOiMqMiw7bD1HS314ZWh4UT9hTCN+PjtXISQ9VGYien50ekVNY0RNL3pI''@;'; put 'put ''K1I+diNIeFRXYTwhV012Nmo2ZFclRTN3JGJvX0NQMHZEaGxCVXE4OENiXlgrSiV8KF5YeXRuclM4bXJdaj8iQElNZ3lqeGBhU09DIXx3XmxBN2U3ajMsRlB8T2dXWHs2O3heVzN+IWsvVGFQMF5WJjhCeGVvbGFhejE/Tll4RCY3Lm1wPkguWD14T1V2b3w+VkFQRm06ImI2UnZaQX1vPnQwYklB''@;'; put 'put ''WjpRYW4/SWlPeGZ9REE6MS43cz9NYH5ZZC5YcW1fXUE4PENkJjAmcklQaSpAVUNYIzdsZn48LGR6XnVIezQkczU/e19+Qm9RI3RFMWAmdy9VeVRtZU4we1AmVmI+OH53PyNnUT5ASGkzRV1NK31iLER6TTpaVWx9Pm1TWUc5RUZmanp5dEFmISx+byRKJlZDMzJsZ0dhUVVbRll3U01MajxSKTRi''@;'; put 'put ''XWtjJF1VKkdWRFgqVCpsJkY6NVs2XzgwfWEyVzFecS5RNSIpWiFzVWgjbHhFKEwyIU5tTCJnWzd0Xl8/KjBTK3FqbEw5cVNILCZ7SFtXYnhJX3p4VWF2XnptPjB+YUBacWpEajl4IT5vSUBVK25JbV5OODJIdlhoeltePi5wUC8iL2spME4vRVp7ZVRXYERkXXJbfVZHQnNNPVIhO09CeS5AOVFV''@;'; put 'put ''PkZtVGprbyE0XVVucz1fZ3gmUWd1L0BDeVQ3THZKJEh6QnxERV91VVZHNzxVUVt+anIpS0t8UHF1O0w4Z35kfG8jeyVSdGZaUVI+InBFdzRGdSxBd2t1X3NZU3B1QihnQDAmOzElUih9PSsufVNSaz9zUiFlQUdhKFdQbTF2UWVaakIqW0FzaHBYWTBqYi4kNURyaFQ/LjU6JGE0PkFsfXd9VCxl''@;'; put 'put ''KyFkeztNZy9oVl8+PWFPYEVLfF91LilzczEjNVJAYWAxYzZfZk06Zkk0NkRQNiNrU3pbRnVPZVBuYEhLMDJsVTd6RmM6RzYhdF0/SU8sNWRSSk84N3YkNnlJQSJ2LHY3SzhIa2s/JkNfUHZUVCZqZmlyOE9OLEJkcHYpIkxyflRZaix1YTlOeEFySW1iJSlgc2tZcGd0IWRaO3UiIllmKm1jTFQv''@;'; put 'put ''WFZoPVBrLzZMdDYiMjI4bl9aJSRjR3NDO3lxQHlRQjpJb2YmKlZzKipKcUwlZWFGbCt6W3Fib29jNl4/eH5NNSk6ZFJfSXQuXUYrSWNTbjNHYVcqd3hGLGxaWjEsVyh2SUQuOklBRypJV0dhaz9FQGVfPzZ4NDlxbn1GP0tBT0NYITZYNzkvJTYkJXEmJmI3Lmpie3hOZCRpbHp8Kks7MzJXZiRl''@;'; put 'put ''KVNvPzkhez8pfXdjSCUzXmBYMGdaLDc3Y0Rmb0NIM21lTzw4Km07P00+eC9zJX02Ll4xUFs8RzdWUFRycWA9Qk8iZV9LTVc8Wz97K3U9cVpgYzNANFk7fnxwKEhKOW17djQiZTRKQXVnPzdyPitAdU99KUUxZy5wIzN3SDM+RkgrZz17Syg/ZEp3THcjQ21+NlB+O11RcCtZYjM2PjhmPjZCRTNx''@;'; put 'put ''SHNyIWZmKGJRV0x2eTB9KkNTLzo5bGRzfj55JFImZDo3byIuLyFqNEJ2dj09TXdtQCteaEc3WDYxfVJpRSR8IjZtZ3pqMFBJTXN3PD1Sd0BAIyRVUVREZCpYcklfMGI/RFswOiNteXUiKFo2cUdIaWFoaFVVMXQwbGM3TVMqQG93I2dOOUZJPTB4Xj8mIlpiN3k0STFEeiVaUGwmdWc1alI2dFM0''@;'; put 'put ''fVZWYy5mQTk2R2ckb1skZUlzZDlCKCh2bGo+ZWllVFB+SiluS2dJSzIrX0ZfQXZKTD1tMFJrfmRuUHQqPXc1SDBddCk0YWlDN30pPzFHOnhEJHRERld9ZnF8Sy46WlVRd0xtL1hRdmt+Qjh4eHJQZFRVRUpmXW1iP0R4fig4KCQ+KWYlNX58bnFoOFUpMFkkNkl4N25EXnRQV11ZaVBVLGowUShv''@;'; put 'put ''PGAxSVlTUFUhN1VQeFRVKFhXV1skYF1GbTAjUTwhRXxldjtSM1N8eWluQ21IeTsrdENIQCkhU35CRzNKOEhsKjhPeyVSb1pSWUEiISg6OkUlZ1hVJnAmNSZubGV6KF1+K29CbT0leSIyMnove29yWGNqUnx4LyQ5IVVZIyswTDImaWdUaDZuWmk6OihpXXhSL1RfM3B5cGY9OjlYa0lGcklgdDFG''@;'; put 'put ''fit3X2paJFtsdmdLUUlLJE0pXVZ4T1RdfCR4MjZrUWpzLipZLCVRX1hiWShCdjhCbCVKWSFOOTNrZlNUU1lGTCxULFtTUDNlSzBeRU4xWS4sIWwoM2EwS218d3o5TjxmL1Q9a0o1RCZJIjRGOFQqfFV+JU5aTEQ3W0Z4VD5LbD1OaStASEI/TCNvaEUqUjJ3LGVyXz5rRn5uVm4qZ0lSbC9pKlJE''@;'; put 'put ''PntLREdYbiokQEdoNXtlIm5WbWJwZEh5c2NiZ1hVZElKdEtzYDI9Wyp6KEYhfnU0L05qO1lYR0MoVVUsTmFNZkcua3c0MytEQmVDVDNmOSlPSFNDUylkPm1eLGRQV1B4NGBfMCwxeFA4JTNBYFlNZV9ZMj08JThmOWIzeDlkMyt+eFokSH1YTGJJRzkjP3Jifl1RRz43Pz40bjUmQVk2QF16Jlcz''@;'; put 'put ''I0h+Xmk3S1J3TjFEQlBLVCRFYkVGXSQxVCRzZjE9ImY3eltka25Kb0xEW2U7P1ltSCkqczpEVnxYcl5MKyZtSC9zRGlpRzUyXlguOi8pVCUvJXpoYSY6aVsyUUhQOF4kWFN8ZW5IVV5+N05ZZWl4eilgNGsxZHFDZ1JRSTFIUm84N10oQmlubS41QVJZOSJzNiUvQF4+OihYalNzSiJoOWN6fE1Z''@;'; put 'put ''aztFcyxGMVRIMkh4djc1N3JjPHlpNiIuPF8uLEU9NXtJSVRHRTU/U2VNanpUNVQ8bV8wa1E2WUdSWiQ7U25RS0lLYmgzIWh3PlVFWUV2dj5sWmw6aSF5S3NhWGhZK1g3NSJqb00xbzZlNT5tX1FXMFNXQm04R3o5cHJWWWM7S11EfklkY31SSz83X0MvVWhZaVNiM1JXWz9raDFIZXVEXnpGYiIy''@;'; put 'put ''eyw1e2FvSUEpXyNsbWFnP1AqeW9iUzsrZXl0KCw8X2pIaF9eVVFhMChKW0l+aXZARj1oOTg5ZXxta0d9PztvTiVDcGBzSlRTaFNJKF91R3YvMk8hUHR0WW9rXTJCTF9KL0RuWChjZF06NnFIciRnLlFmZmZfdSUhfjoqSiw1eDRJUlF6ZGpQdTkwNGNpUGRPQWVYJER3YE1IZWFdcVh1PT5pTF84''@;'; put 'put ''dEx3MW9vdTRlamBWJipkRnYqSCUxRkV3Z2wlJUNMcGN1MFsuKUJRIUJ2PGg3TW9ROX5JTlhpVGpURlhfc0BAaTI5KSFvRkxDXUhkX3xvOD5KR1hvVzBkfXdWcWlsQ1RjJkNVd0Q3fDZNbXxbdktaPHtxT2FFQkdCcz1qR0prUlFycVZ0ZzYqUkN3RlZfYShaeFE1bkdWe1o/YldoWW1bZ1BFPUls''@;'; put 'put ''QFEsdEswLFheP0JlQ1gmczxvKWUyQnUpcyhgMGdZQll3NVdZQmMmSmpuL2EqZ1dFKkA0XWZXaSRKTjZEL3RSQktYeF5aOWhgMnl+VmE6TzAkRH1YOXpATk5Ye1VpRjRBeDNPbHhkYykscVlhcTolUiVbSUY7Nn1FV3thWDxGTj5IeX1pOXk9VUYya0xCfFt4KU1XTDFUcVldOjxxL0wqU0d0S2Iu''@;'; put 'put ''aEtUPkJNe1VmIyZrZiYvQDxjYTpvMzc7Iyp5Q0RzZVpod0ZSOCo0fVQlL3RIU0piLy5SYnBrNTlOTltndmhpOkRkXXUyPXE9ZW1oWkQzeV11R0hDXUs4LFtYKD91LjA6KzpdYXMpKDdIUkA3SHxRb35xTnEoIkojZHR2NUQyO3YwMDJZUmgmL2h4SHkyT21+S1o9bjpfQFlGSyN+PTQjTDtjSCx9''@;'; put 'put ''LCYmYm1kUyE+SC4lTTk1fDZpQFlicFN2STBRajUxNjFDMFZQVXdUPFowRkZFZyJYOmo6L01BeUMqLCJDZko1XTNMLj8iIVs1RCF1cV9JQip4cm09I0ZiL0BXXU5PMGo4IzowQzNCXko5PT4/P2pjN1IoXXRKUHdGdn1CI2hfU2VqIz8mbk1HbXp+VmBZX3lZeTl2V05RVW5PbD1rPmRfX0M3ITdj''@;'; put 'put ''WSo0dG9BKnhYS2k4OmZzNnl1ZVtsM0hfP0NwezUmaWo/JCpTUi43WFlVW1hyPXBPRFFtNHh8Uzc3RilBJj5oTDR2UGIrKjh+dEdBfilYODNgbWV4TjlRPSs1TjApU24wcVZ2IXIwJH5gSDdGTG5nKnFvJDJtdmA5SjAlYiZAS0JaZkg2UjdoY008ZjxHWUtwSlcsKWQ5PlhMZ18mNG5mS1hCYls6''@;'; put 'put ''SV5pKE9oI0JXNWskc2RrWmFhcjcyTlFMaWxMMURDVHowYzZ5Pi5RTEJ7USh1YjVmLil4dElJUFNzcHh7Om84WVJ6I05geE9+YEIxSyJyMylEWjpSamdqNj10Klh9Li99U3FkLCVKInk9SXd1TSozLnZgZj58PEtZdXJnKGR0MEd5T2pGckNDeG9FXWFyNXtSIkxOTnl0dHBFc2A6Oiw3K3w0Qjhs''@;'; put 'put ''VjRKPSFZZDtiVUhTMXU1ViU7RUs4RWhjQEw9YVlRMDp7cS80TFlvMXNnZHpibG9qOmREI1lrTWkuezJKJHpsOWU8WXE8IypML3Y+JENXLyM0RHh+ODk/Q05NXmlmSTMqYyksIkdwPCZgQn1CS210fjNrOERaIWhSVz1FIU57e2AvNnJZeVtKYVJROStqdTpabE5BYUB+Il11T0BMTz5KXXFfcUFY''@;'; put 'put ''JnFtcGllL3xgTD1fLEo2TUhNb1FpYiVrZnU1bVszcUhReGI/MTtzO2pSfmZdRWRUbiU5fVdUcjNUKHY6cGxTey9ebEhYUHcqdCsyM190WjJPcntxWHZ+SyFnUE93VzhofkVXYm1tamltTShsWWs5RCV4eExmYXk1YyJNY0xFWllaNWh0RDApZWUiSERWMlQydUssT25ye34yWyNwOCxCJSRnPTY2''@;'; put 'put ''KmQhNH04PE1AOHtHLkIqPDhfRTZPImYqZFJKTzN5Oj5nXjlTdVpgTTBIXkJVU1BEJjE8eEZ7Vmt0UT9CT1lbWFVWMG5jP1h4NnF6KGxmaX5hP1t1RmZQSCZbdV14KFRsU2NSSz8oeihbPGM/b3h6d0VHaylqV2FgNXV2S2ZrMDt3Q3QpdThVVWlTaXBMXnozUH1dWmAuL0JOMXF+Jiw+WkcxT0tw''@;'; put 'put ''UUU8SUtWUyFGVGF3ak1OYlg8WGp0WFNVMkkkL0V0Pnx9WWYrI09CP11Qa2E9N2FDRS5jKj9yUUhXeTZ3QHJIS3p2QlE/IUFEMUBtSGdmMDRmOiZ9KkFUPzgqWHduY0BAKFEqVlgoJjJEcXUwOmNneGFsI286aVk4dTpKP081PT8wOzJKMCx8SV55N2h0MTw4JmdZM1RVSlVNYkxnVk9JVDYvMElj''@;'; put 'put ''Xl19O1IkPVRmYDoxXnxmQUROfGJ3cD5zOlRFKWYvJmBNbSFuREVMMio7az9ZJDwhfTVvLlVGW04vRFU+I3g1MUU5a3AmcHp7MDRkflAqYXV3NiZdNWVFME91TDZ1M2woTDdEcERDJkJKV3R5TGY5d2hTXVtMV1JhMG96VT1QODVgUC5aLzo1ck1ueWIiUW4rPlM/ZSRMQnVeeXwhe3VTRFhJLjkm''@;'; put 'put ''PXFGb3BDJVliVHFwJlslVCs1Kl0iclJqK0s/YnRbJEhPNFdFOkowUSlKWlI4Vl1gVTolRWFnN3ErcV0+KlhLR1lSSy8xQ2J8Ni9WZEApaCtHVS5wU1N3PH5wSlZoNGpYfj9xOFFReFdvWUh0OkQqUXBOVyNQdGxgYk1dTTQ9UmdqIn5yLy5YbCZxW2wofihbSmMyMjlHLEI3UjNacnhmKWVuLigy''@;'; put 'put ''KHNJfjlma0w6c1B9X3tfW3FdZ3BZQ20uTyFnYVlRO0drN01IKENROyhmMlF5bEhlI29zXT9AOWNLdlNoMT8uO2IxUmguVyJnWk5BJXRSSUJGOntYa1lWbXpAR0Fpcz9fYXJxVGJIclJgOkBBMSgvZGFBWmwlWElGV3FjaSspcGJLK094PS9tOCZaKzNNQXJGUSM2ezt9e2pAIlZ8XXJZMzpZL3d6''@;'; put 'put ''ZjBgQiFxZWssXihqTFglNnJ0UFVke3xlJH1bVCx3d0RjRVtvQnlDZX1TaHRDNSVBT35+SjtiSGo/Vj44PnxJZGk5Q3ZXNC4ud3Riai51dGJvTEx9ZSQrYG9zLj5PM2d4b0heeHhnU1NJVkxFfHZ0Ym4qcWp9ezg/fTVwVldSNThhNHw+TmJvW3ZuMF5qLChvdixHZ3xNZXUvPlVKJVBJM00+Jm12''@;'; put 'put ''c212Oj0/MiFyLjZKWnQlckRRdGVMSls2Q2RpLDIqQ2QsIVpTblNqI0RhRDQ/dzFiLk5OTDUufFdETWZQTWduYm9pRV46ZElXQW4+X2YsQkBFKjI5PzcoKXJ6aFZRY09DQTY9ZUxGJm15Tk5GPUp8cXIlNyF7Y0h9Sm9qT2MsKlI6PmwhajdCZGxxczBtTylwVG9RNSR5RkJeSG9KQnhVWyhGa3Q5''@;'; put 'put ''U0hUKDkjVkB6OEkhSXlsOTJJbzZGR2BVNVBpVi9QK3EkfUheaDk1QmpHNDZyPjNZLldvTi9gOms4Tnx2U0tWSz4mPnRNNDljJCRJJDNMNWNLPz43els8PCJYRkBvLyE9eE1vfW9Ld2E8RTVUUkFfI3ZGXjB5YTVXZHdBQH5yRn1va0x4dklQRn5MRGdUSj8za1Zmc1NWR0ZaJGMvSSYmSiVFbD9w''@;'; put 'put ''bStVXkppclhSUGR4WV17ektgej1kaWxlc0JjV0ViMXR4Jjs1aCNhMX4yTWtOOTIhKmU2bC4mRmouQSssU2pAP2AsWG16IWROTCYqfFt2NGRJQHt3Y2c+KEF4Mm1QaFI4ZyIjRGVaOFBWQGxSKilGIi4wNmFVdzF+Q0UqU0IwclFKZV13NDlOb3Z4cmxXS2BMaiJHNUE9NX5NQFo+dkckSkhAczVi''@;'; put 'put ''PnBSO3o8JSleRFZvQnNqa3g9SVVHKHhFUVR3e3d0QT1TX11xbSV3U1V1YlVLMHhAdXNaNF8zfHRGXXNSdiR1Z107N3sjWEBtd35jYTJKbiQiJiFFck4pYXJqI0debExlVER5eEMsMXNyPzEmdGlmeHxrKEZTY3NpeEJJVXVlWG45XWpBKXtqR1h2O2dgbCl7VX5hfV9yOUYsQjEuJkJyWlZQLlN+''@;'; put 'put ''Pztfc0crMTN6W1ZFJG5nSGV3YTN+MV5kLm9fZWVQIyUlZldLdnglRiZvek40bVlvPDZwVUd1S3ZjMVs4VEBfL3cvVWlvdEVIQ3UucElqKWp+KGV8aClPfCEoQzlOOiNnR0VFMTRKJEo1I3ojVXVuOTBkTFJWekZoJHhRdC9pKHlZb1FKITtuMnNBLHV5PyIzP24yKlowJGMuWX46cSM0Uy5gQj4q''@;'; put 'put ''MCFoYFI5WXdrXm0hbUcpYl8xezVNdTxTM3xFJWoxOWRTb1c1TSRab1BrRWdoW3E0XnVkc0chP3FhPWdTXWJePXFlM043TSFIcWo4NCFJTFMmaGFsOGQjQHskKCg/NFVLKSVfQmM0bEQ4YTZVaVZAbHtZJEdsJUpXI2VsS3FjKk89MXxHWT18MiNjXktxc2NPRVdnPCRpQGY9Q1FeW0Q5cUl3ITMw''@;'; put 'put ''bEZmJjRxU1MkPCw8PXFOR0pIT2IpfHxBZVZTKE1YNn4+NzE9M29WTD1rRSFfKTJidXxIYiwrS1pMY3Y+dll0a0BtPjVqZl1jfS9lTXV9X3ZzJGtyN3BhISRyO0wyTT85bFR8amh+OU42S1MhK2h+TCRxTTd4X0h8QUFDOXFbWlEvYmlhUi5SI1AmP09VKygyeFVFQ3BvfGA6bkNHU1hKSkkqTXI7''@;'; put 'put ''e1BhazZxPU1PZXdAWmZMNnB6UlheXSxAI014OmYoQSsyLzApWi8jWVUuYz9McGNqaEdrb2RfQUtyL2c1VUNTKCFnJUxuNX1VOjwmVEJyPT0lKFEpezcsRUd1ayxZTWowNCghRmF1VWVbIj9oMTowLHUuT3x7YiFjcXlXTlF7OT9sfTk3JSgxZ3pfYzNebUpYKktba1csMyJXMCl0Sj1oYmR0Tjoq''@;'; put 'put ''IT1OaylmfW56VjgzVE5eMnZDdCFiSjdCezBYe2VbKX5nbC5DbGFHVXFlRE9XKVJnam9wcG46R0VXI2cvUUl6YF49JHYzQ0V1LlkqdF4mXWZyUmNQOzBdJFgzOzg1T2AoNmdTT1ZaKXd9PXh7WUE9WUJvOTYkRSgzc2Z8Vjg9bFYqSEElPTAwMmgxcF4/Ll9mYFFlIl9GUFUvaEo3IVUhT3BJWHIh''@;'; put 'put ''Xip7dXgucCtfLz0xeSo6RiE2MyQ9RiYjZ0BXQkZmXyJNeDloL3o8ZyErQD1dPVY2OnxjcyppeGVkN11NMkZiJWF7ak4zYSZZQyQ7S1R9VntSbF9ENF9hPl47S0NiUmFOR2UiPUN3eGZxP0l0IW1hfipXVXFYXz1veGoxM3x1X2JNO0U0YjVPLEZHYV4mRW52KmJOXixFVEYzNDMjZWxvWW9TIkYq''@;'; put 'put ''OEtsOU14KEcsK2ojb1VyRTM3TCVuTzZJKV9hfnV6IlVkZ00qVkQ3eVBtYkhiX0RxQmEqbnI6VUd0ejclQ0BWYks/I0BnezEqSEJpMUZUPyF3dH5aJkZIbkVGQjIzKEBQTHxOL29INDxDez8kREAocSxMPkQ2Sk0reUdhdEMvI3MyMFdAczkkeC8wVyk/bmhRJD4vIiZPTlcsT09HJHNWUSs1TC5C''@;'; put 'put ''MEpJTTQzTHBjLzlQS3UiNnR4KT5pP0doIj9AUnd2d0kiUC5pQ1J8LzFrOllRKXglcFdGQ31JO21zRl45YlpqNTFCLE53YiQxXiFiPUolfkFzKF12SWpXdiE+SGNMUHgra0cqaT04KG1POkQ4UVFrREwsTkhwfEpLIlI0bVJWY2JeQSx5dCFfS1dkbjs1ZCQ7IyR5WTNITUlZdSNabH49Y2E4YyMj''@;'; put 'put ''eHRMRmI3bipnKTlDSkZxOlF0e1NpYzU9b198O0o5YUZ4QDtHU3dtaW0oUixFRyw0JTkze2c5e2JxWGV8WTI5aVUjSCxVSzsmbHJfIShaVXk1M0NFdXJOelUuc2p4LzR4XlpQJFJ+UX02LGdzfk5uTDJSREpWIiJxUnBoQEImLmklSH1YO0xVPEk9Pj85KGE4eVMreUZseEUibmhFbVpSbCI1Wncp''@;'; put 'put ''UFN6aGlTej9+bTx0MldCL352KHl7cm8uK2NgW0FfKzNTKk0mVytQWFo3Y2VCSHIvRWw5Iz1QQX5lI0o9KCM6IitrKCIhJVU1VjBZZGBvMmxAelYpYCVGKzg2QmQxTiFrW3MzKVVLL3FkUWVzW0twYVtkIUk6ZFd6VnB6VGI0bU5HST09OVA2b1IrVHlOfmJeaFZCSCpDQXpeVVBBfSw4eWlMeUZ+''@;'; put 'put ''dU1vNzFxfXdQMHdRI3ZiajsreTcrT2BqbS95OzBFWS5JbVp6cmI9X1VlXnwuSjZsQDhrI2JZe3I7bEBqdiNGZy9sUkAhP2RUO2lQb018ISg7clZ5aDtadW0hci8vND1qTEJNdHVAI2NTaXVZaytxSipOV300S3pnXVBfSDRYN2ReU2NFeFF6ImFgMXtfaSs6UUZkdnF8RG4rfVguOD5mW3dJaz1Q''@;'; put 'put ''RVNAWWRMTyFZZlZCVX1ZfDBfU29yYHB3UllmYlgoa1RDUnBoIWpnNXV9RSVJW3dMcE83aFlXbjIlTmcsYyxnMTNvKjU0NVtDYDpWVERDKWpjdTckLnFGc2BeUSxuVDxdckB2cCVqJEdCX3xJeFZiTDtMNChQTTshU0BpOyJMXzlCVVp6bUJoZTY7VDlEdCZNWXNpTUhnKk1CWW8/aV15dGs5dFtx''@;'; put 'put ''XmF3Xj91RHBUcm03WW1zQyJ4MHBhbXM/RS9majoxZ3IuMF4kLyQuaktpKFU2e3EoU1RPIyNaLHo5PTJ7WWQ4N2Y/eTJTNnp6c3A7NlVSZVBwMmVZZjgrPUpNXVkuMW46TGl4YDt6YzlBP0NlXl1aTyk7T05heEx+enZGVjFXVFU5XWtGfXwjK35TfnxwYnRDdFlHVFh6MElwey5nL1A5VkdmMltz''@;'; put 'put ''VUROJW8sKFZOVHheNWNnfTxzPSwkcT8vcHkmb2IyY2phVSUvX2w3JC90P2x7SmtHTmN7RUV5M2lza0x3fSlvelBHRFt4OjwyRVhJZDVNaVY8Xk9FTj1YQjkoMCR6X1daKU9QRGVZXilKMGVlOU0ud3JbS2pTeGBaNitsUThZK1FqajIycmVPPS98LEpSLzwsYzd6NCpCeCV+VCg0YV9UJCE0K0By''@;'; put 'put ''VEYmJEVsVVl4eHBsOmAoYSNdMSpmfi85PTM1d04qInRbVmtkSXYoeEc+QClwfm95Z3ZWU3FVcSM6ckozSj9vIj0uaE1aIUo5fi9KVUdBZVAqOkMqWmdMVH44ey9KNU5GbTRrbWlRaSlFblQqWz5mOmMlOFB5TUMleWImLkosZiUvYH1VSkV6K0csekouXXpFKHcybHF9bmJoKlR0NEUuYktVV3Ng''@;'; put 'put ''fT0ldnUuOi4zS01JI29kNSxSRzxWfDxWTi4mJT4hcnslYkElNz5JS3VtPlorP1lSOFJZT2l7VTVnY0xUSWgrZkNrJnV5cVk4VGRwTGF9bGdiYTJKYDApfCVSS282V3YmQT1EKzhTNkRse2IuJGciQERiSlJwezgpNGNLeWg/WHI0X2gvYDpeWjskXjNBa3RLQDI4c0Yldl0jYWNUWShYXllxdTVM''@;'; put 'put ''IytnS3pDeV9LIVtNUiMzbiRCcntTYy40M1smezA/PzhUTWRZNTM1e3hlSEJkbHBbVXM6ZndvNElhcGpbdHQ+YzcwajVgLH5qK1VzejFjOT1KKiI3IkA+MEw3WSYvRUFvbk9jemZpekpFZFIhJDVFSHVibzVEPTAuMWt7PzVIXmpTMTU1RkdFSUwyQFI9elpzTUFieSM0XmI2SFpbLGBBWUs5alVn''@;'; put 'put ''Y0RfJnJDO2JkWGZTNmU2PUdlMD0jVVlEZ0l2d2ptOm1LaS5YVGZQOzFVM2AjODdlUWZDWSFwcExKa1VRY1hDNmt7akd9IUhrXjs4dEpPYnl2dXBHby5Sd3lXTm94SHo7bDU9eHUhQWpUTjgvPiM9amQsa01BcllVUWg5Z2kmcVlQJiNlY19VPXUkIlR5MHRoQikzKk5MOi9xOC52RXRVbk5eOGxi''@;'; put 'put ''dEEiLHJxc01xYmU+S1pwOEQ8cyQ3WW07TDgufU13OSMhbVY1VllDSVNBYkNjR2dmW0RUWVchUC5wT2ZTY0kwfkdDbSJ4fTVeJEdmUUlVMGslZnhRND9jUiQ4OXY3cSIxMH49ISx1YSUjaGlzQyE+RCNfK2NaR3ZubzN1RTJARSg5Rmh1TyxlZ3N9U1kmXWMrISh7YTtaTEAlXVZLT096TFNrSllT''@;'; put 'put ''XSVwIUFddzMmakJAV284WShkNTsiNU90VGslNENkbVRHMzNXQXQiK3hnWz82KThXME5fcXxwVzBmNlB2c1lpbyM8UTYwemQ2L3c9Qi9pW3A9STtsUV9TajZUUTJXQiptRCVdU25oOmx8bUlxSiNJLlJ8L1AmXUovMyFbZyh9W0MlV3UoMHhkNDIlKE1ANWk4XWFBbX5PPVYoeiV6JChMJllqbEkz''@;'; put 'put ''WEo4bitnPExFRkVXaFdjVXZRQSZNKXVSM20wOTpTUTwkfWtrNC9rIlg5W1F3W1dkLkleJFVuPXQsMUdTSEdxfm4oX3hTclVAfmVjdUliJSFQNjRkZWBdcUx3JkYsVEpqTltjL2pSaVc9ajxmKXBocyFoMkFKMEVvYmRKKF5EVH5LVVFWKW5wIn5JcFNWM3xmVE9SfDxCNyxwe1hUZ15PRHd+cilU''@;'; put 'put ''XStNPFo5T3M9aElQe0VTZ0c8ITJfWEpEe3pTOClaOnpiJm18KjF0cVdyWkp6Tz87Wk13TGE0bi81aks0Ujd0Q3ZzITVkRyhWW2ZYUkNXIzUiTz8sdm9waURrdHk5OCIpWHhvcCxfPkhTS3U8cXp+WVYxVCY6LmNVe1swRlU6JH5YdyxaYTEuXnNBajxpKkpIcT83Y31FVnpiQ143eVEzakYlYyE7''@;'; put 'put ''OXhvbGAsciY1ZW45NE1EM3ViRGc1WDNbRl9yPmtDfFo9Vlh9cz1dSHJ2KE9RQT40Yl5hKHwqWzxhfkFPW0FdISYxTDd1UEMsZkkzLE8pUyxnczUudWU3JjY9X1JWYGYrSiJbTmMxZDB7SDhUSGVTR3BIVVVjKFAiOllZRWRDXmlGcCQ1KnlWMFpSXlE6Y3x2eENTWTZJRUhLeSZRUzdPfl1ST1hW''@;'; put 'put ''aVhVPWYxTDF3T3JZTjlPJTB1L01+PyJ5NWJsKVtdTTxqUmlhall0KipZJFg2W3BtTEhDdy9TU29oNmdFbiJBY1V3cWdYdjdiQG5jVnJlRGApZUhWYGp0THJPbyptbGpXQFFXYXg0bGolVWlTeXdoQjl4NEhMS1J5cyloMFtYMlpIZG5bdW0/WkdAbXBuOzJbXixdXyYqJDE9a35BIyoyQFRlRWZu''@;'; put 'put ''Y0Zrdj9FUyt3Y0Yxb0JOL0BLJWQocWN3TkE/ZWRKQ3xFam1WdCRaPDc7XlEoaDZTOjdmUWJJXm5AeDBNazRjfT1bT2V8RSpKW1EhYytxI2tNY3RPSn1uT04je2d6S1U3ZFZZc282JCQoLjUsPEgkQWA4Q1NzL2RxTjE3Q1NoLllpb0RMZypnZTVFMGtzSGRqN3d3WGJFOikvOHcpQV41PEpmQ2Bk''@;'; put 'put ''MUNffnZ8Szx8YSlRZDFKZzk2dFo8PyN2cTRCRFZSfSlZMkJdIyNvXWJ3XnE5LG9jWHBgN15xPnduczlsYVNSbjhXYjw0O3dzbVBmYUE1O3tJciQxQS9HWit0O2BzVWg/WmlmKzlATlRJaClIY3Q9emIxPTgsV3RCS2cyeSgqcik/WGB6RFhnQV1YNkpKZlU9P1tlcW06R1lHV2JkRT1ROHlLMG14''@;'; put 'put ''YkE3NCV8UE5VXXx8W2Qubn0xQj1LNXlFRyExfl1xKmc8RFRIaWNxPmppM1J2fSsuK0JTWjZyUUVePDw6MlI4b0RwPjZDQFptZ0V9fl55bmxZdigqZ0I/bj8hKit4QGxAVE5jeiswKjFKKStNNGRMPV03LHpFa2wsZFssVDBWV0NWNl9CKSNsdEJaJCFWcVdHUEtfYVhaR0hHTHhMfXFsXiQkKzAw''@;'; put 'put ''OylkdChKV3dzRGY1b18kPFJWeXBIRWN1N0I0b3FCa2RDLERid1pLdjZEUmRLYChoKj5bNDBFYWF4MCZpVUMxN21DN3hUOUJpYkpYPksmdUAxayt4OjYpUUc7WGMqdzUoPXVQO1g6KCY9biJgI3BXYkZJJFI/OjxsXVFBSkw4aHw0I2RMSDpYa1RQcysxZk09LGkvJGA9dFM0TiFwaFJoRjBJPStU''@;'; put 'put ''KzBHKHhBeCJabCMzZV96M2VGSSs+Q2FnMXgmLy55ODh8cUZ5U2pgRC4jL0wxaCpmKEFpO3NONEEuIVslaUMhe3cqKVM+Wj9+Q0R1NCljMWAjZUFATVJPZklXJmhSWChsa1M+OUcwVD1LTytxJnxSMHZnTW1RczI4d3ZsOHl8M3V3JWh3YixzXXQhQGJ6T2hsZ1p+N1RfJUpEMm85I3xkeFhlcW5l''@;'; put 'put ''JVpZRHlOOltTPCtIVlFSK1RVTix+S2YhSHxKQnlsYGl2PV4xamk1R1RRR2Q9eCJ4VkhAYVBbV28pSVR1RWZVd2U1UmpLRnRlY0hwWDdzKkN3P1JYQW9TZEorYXhkNHtbUmAkb0N0KDVOPmwpSDRSR0UwcldaTyouWCFdKnJWNTpqdiZgPWhrNjgqOm9xLzBfQmwyX04lVEZyVWhIMCp2eilbWVQ9''@;'; put 'put ''W0JwWCZOblN+UVNadj52Vz15bkJZMVVMX0chc1dyP3pmfkksam5KUmMoaz87IWQheUEuNyVVa0xxcFVZM2IjeS5eMU5EanI2ZWFxV016cT8+UWl4ZGlMLmJJdkJaKWk4ckJrRX0uY0dnT2kmaEFtaERYa0hhLyVNXytwSVFMVFhyRUwudV1genIlI0VDenVjXSYrM2RCTnZUT0UiPH5NczxbdVIj''@;'; put 'put ''QzE+Pn1JWFhre0NaLnRBczBJaERGZU4qfEZAWEhJeSxldlBPWWtKYnJ+KyZsLmRBPXlbO00kRi4waSJhXjpQe1htREtDKVJCZFNmUEJRI3F9VEF1bnglbSEwdm5oTzs7KzAhc2RKcD9ZRXNvU2FkKllzLkZQXzBPLy97WUpNJWdEfiooV05lXiFiMHFvOjtRciNuRiIjXUt3NDYsQ3d2QlcrY1oj''@;'; put 'put ''I11JbVc1RmM4V2pBRnpzeiYod2psQ2NtK0ZHSEtfI2VjeHkxbVguMXY7W0MyQURdaClxTyVQaXIqa3x8L2B+MGhiUzByQSI9T0pLeE88MXp2JFl0VEZhKTJ4ZkxxbE43SmNGWm9yYys1Rkp6QERDRkh+YVQoV1lee3NIc1UiTkljWn4vSVNHfnhFMG8kVCpZTDAwOmtMW3FkbjwsVl53LypCRm9Z''@;'; put 'put ''dUQ0JTRYY1Y1IWFjQC53UXBkPn5yXmcwRWd8RlNVdWA6LHVNZCRURmBJdjN4PFRsUylNRStNMStIS28oaTNLUn47Zl8rKjhUXX1wbGtuaDluS20jeGxSWkU3KGk3eyQpOihaWilER2NIaW0lZmhfNnVJViw0OG1DJWw9RHZ6QmJrLnNFVGN0TzcvImVxbCVlLjAyO0BMRmx0W1lqJFU9aVZYUHY4''@;'; put 'put ''eUJMWXVSOldsL0Q0MClxbEhdO31SMSRiWFJiKSlCQXJELzJDSnB5RixlJCE/e2dBdChmRX50SCFXJkd0RzhINX1NOlVMTHohNSR3KXluWTYvUlZ3ezEoSmV2M0JzMF1ZMTEpa2pLcmVvfWx5Tn1IaDRgUCt7TkVsOUNWOmJDTkh4YjFbdkwrT1JUL1V4fmtgbCVRQmNOYGtyWzV6fm4heyFsSkpM''@;'; put 'put ''TUwldmRUUSx2a05xWSMmZChrNzt4PGNlMjBgYzRtST1uRSFqfWkjSXw4RWFsMiZ2en5fSjtKKGQ1VlhKUUZGInllU3JAVUIwZG04fkl7OnRJdS9BWTFvR0BWR3JESHJIIlFtZixCPDNySnciciQ1X1NFS0xlWFpSKiRLb2ptN3dEO0ZMe2hPN1pjfURnSmRYYXhgPHZkYlJSVjhEKlglclFweykh''@;'; put 'put ''Njd9Rm5mQl5QO3MpXyprNFUwanxuYzZ+VkhTOEU9JDIoWjYuQDckKWJkbXErRTd2JVIyeWpyfjRQS0BDKUNpUkkyMz87OW84fDhIOFk5WTQxa0FzVTY2WGd4LkghTk1kNj1gJDEiYUJ5IXl8d35WVzo8Jj16TnhvTnpJbHNZOyh2NXR8WFMpcmQ9L2tjP0JCIXBjcVIuK0FSYFskW2ZQWXZseT8j''@;'; put 'put ''UGQjdTJrIk5DWzJWOV5RXn4xRSksLmN9IU4qeEFbKXZPPyw6P1hrfiREZEErYmZ2elR3KitGTihKcS8hdm8/aVg9NzFETU4lWV5efDFoJmNkeTNZXjIjeWgzRSxIPUlyQTplVkMlfT14I0ArbVZLdEpefjxBWUhPTyYldztuLjZsSHA3SW1Nbzp2Il9NcHhINGosOkRGSGcyNmRbWS9UdWRaXzRB''@;'; put 'put ''eGhCOTQhMCJsYD81REhUcCwyVW1SVy5qLyVUTUpGRFo1Rm91ZWIlfXoiTU84STN9dG0yYTMuS2lySFluKk9idT9YWyssZzw9ISxXaW5KcVUudEJpLiNbNkcoZWFaan0yZ1V1NDU1PUl2ISppcj1IM09OYEUwKnNCLC9uNEx7VjZLfXtfJCNvVEQ3b18xPz5Wb0tmRmEuRy9eOy9zdzo2YCMpcmxI''@;'; put 'put ''UTo1P01yWk9DTjA5RjhSYkdEeCVuPTZ9Iy46RGF8emt6UkA/Y2RESWh+dWd3Mm82VDdScUIpWlUvS1Iva20lTyFPOHJUdEtaPVoqYitUbWRAZ1d5d2IvPFlIbWw1TjdnYjUsU0osSXNscSpoRGNEQDo1MXVVbi5kUGF5OXJ9azQqV2xQeW02JTxKPnlDUCtOXnRhcSRFT3E9RCIzPXtZSlFFOHNx''@;'; put 'put ''JWExUzRiWllSSUpqaDRIMiZNVk94T0Q2KEgpIiU4MkdZRm09YE8sc1N6O1V7KEJ3VlNzaEkoP0F8c0FGQz4xYiZFP29KMChFRXpdVF1oaDsuKFdjTkY2MVU1eVkhNj8pZnhCPTtJVEh8VlAhOVdeeW9jInkzTHViZ20pTl8kRFVPRz5vbjkmSi9oYWhrI21YNGldIUQrMzR9dE0oWFpJL0RpLltY''@;'; put 'put ''OEc8LnJGUnNrUCROWG4+Tk1uL091ZGJLXytaYlZjUjQiITU/Tmk5bjpzb1ZKLjIjJVJIM0pMUU98JCUqYEV2bDxSUypiKl4iRTJ7VUNwZDsiQVBhbEFPblBXIVRpL3NLXWdhKXM+O1FgSyRNS2RVSGJyX2Y0dSlPcCVZb1Y6czckRG1NZVQrcDM1RGkuO2EpU3N9VElDM1syNW9Jei9KS1c5fig9''@;'; put 'put ''XXx9VShmOVN9NDQwP1s1LzZKM0BRW3xDN18iNzhlOnRIQ20ybytnTz0qYitCZDkhIWI/blF1MF5Da3J4aGxDVjRTNmJpKmxnPnZbcmokViFQZXdTQCpiM2ZDPCJTWDtOT0IhcUxoYlZ8YVs5UWlYNCVla3h6TTteam13Wm1RUVpUTFhvNWR5cj8sMFJ0azxRKSMzZV1TMmVbO2AsSzFgQjx6bihe''@;'; put 'put ''e0szQ2Y5aFoyMEY/YT5lUkV0aWsrQnhHcHB8JHNUa151RG9vRkRBbyFlRGFufmxbb2NMNDhAQnFCRVlRIWxtfkw9d0hhVDR8bGlBPClmM1IjdzRlL0AhbCxmSXwmMG58OV4iL3Z8PSxDO0IuanZdKEZSWDpueiUhOCJoIz1NdlA8Wk5lcHAoNVo3N0JkZDtAYzR8VFMoWm1LPGkxKXQ8VThzMF4w''@;'; put 'put ''dTdOZl9+eDEpP0J9PDVGfElKfSVfXnlRfkk4eD1ySjssJi8rRC4rVDtsai8kRmpScmJYdn5pWy5gdmZmS2hNd29gUnhfWyNDVTltLHlpZmwkI0QxOlM3SHpeaT5uW2pFVC5xTVc7LCxMVUVwWGVEWThefWlwO2VqUUhXTCtyQEJGNX43fVkwLH1vV2d4VV5Na3tXWipNajlveiVwUzw8O0V7YDRF''@;'; put 'put ''fE1VbiNeKW9WZFZHdko+flJOYlE2bFFCT3x5T0BARTw5OCtaXiVaJHpwQnM/Q2oyY1JBUmUjZlVYa2k3YCFLMXlPelJdL2deeVF7VUlPMWtRc1JbfU90LiJbaTcoNTdaLzhBRT13KGpJRDxhWGxGUSxJWkd4TyxTXSMuP0R3WWdjMVppZkwvZjslODowKzZWUjdjJWJufjwrV28mRT52PyxVfUZv''@;'; put 'put ''UzkzeDglRnJJfD5aRTNje25IQkVvMHIyIz9uNDBgNlhHMjVyMWpWbHVfWCVsUm4qdClvM3ZFO3dtcj0mI0tPUmBLMj1GNUxjKmtSNHhnMUJON2MpeVU8eF9rPUZXKDxDaE46RyRXeytDZmlMd29jU0tzMUZxUU9jVSoxN1g5U31ob1RebTo3dCNgcS9ZOGcrN1VAUzEqVWI5WWwuTSY0YEBeRm0q''@;'; put 'put ''UFFnZXpabFMkTVo+fG9GXyV5fmZkZVUxYU4/aHJlNytsb15XU3dVT0Y9b0VzUlNAOUtAK3UpPz50IVRHJmZkYXAqb2E3eDZJVCZkdlAiaD1aNXh5ei5aSzgsfVAwfl9hfGAhNy5yOypRPSppLDF0XW9JNmVSIjxraHpmaU59TVtaKlNgRntuKHVDeUtEYn1sKXJDdi5nREo7TkN2RmtpMiEodiEo''@;'; put 'put ''WUU2ZFhIa3loR2UkPipwU1hqeElKQSlMYHglRkViSjFDX3Q0a2YrS2k8b1J0RiI9dzldTFImX2p0azJGfFd3dEdge2ZzNkNxJF55JkNtYl8sPFVzWVNAQmddYkBXUV12ajNrbWwrQDE9RT1VSSE2WVZwQE9wd1ksciNqREZRe00rNyhNKzBnc2oiTUgpMkhbI2pfdkl2O1Bial9KS3EkeyU+Onlp''@;'; put 'put ''Zko2IVgvSEVyLz94K2F+fUVHJnxOfTk0IjoiJmspUXVfTV9GWilzSCFZOS5MVV4wcTpUWFNCeEw+Vld0bUI4Z0IqQiF4PCEkOGFoYW1rellgSjskaEVqYVEoSi80dnd3ZyNqKUo6Pl1YY10yPV9VcVB+eVYxbFQxbHA/UUJRbUZ4WTx3aStVVUxXeS9kWlk6YlFDeTRLNnhEPGw9On02bkR9fVFT''@;'; put 'put ''PkhzNF8qd08pNH5uI25VWk5uTHtyfkI/JDBzIWhWIXNSTVEuZi5Se0tiI01ab2BVPjg2OSoyVTMoQnQxLzliSTdEdXhAWjhSXU5QOn19YC9XZ1UuTGQjT3szQHBNKkU9L0RXTUBEUyI2IVNUM1o8VHVBWEtVVHlkPCtYW2JxUHwmOm01OU4zLFVnQFIpdisweSReVzk3cHVYVi5bQHgxe3g0OjtI''@;'; put 'put ''YXdWc2xOcltOR0M2KHIwd3I9Izc1YENPK09ZYVEwUm1iNTFod2V5Wn06Nl40XzUhe2AzOnpMcjFjVjZzeX53dXhCKF52LCY3MD9gLmN6SDBXNn5FIWhnTHAvRSxZP3FXI0M7R1pDZlNpdGRsMl5sUSZNOmZFNnZIJFVEei9FWFgiUk8hWkdPd0R8PW9BQXs5fVZHMyx9OW0vaCwlMl0pSjNVRiRm''@;'; put 'put ''c1hVRC9ZNTAxRl9DenhwWWI9dDNTfE06bWhHRFtBYiRuMjNec1FEM2IhfEA0Mmx3dHNDUStTSlZCNyksdWZyUjNjeSJae3pgMEspQTxEVDs1XVZRK3YkRU9yUHBGIk91dDE3Ym1KWD9DbFJTR1YpMSgkNSFdKk5QOSV5PkovMUAoO1JsRytdP30vbndTVyw3NEFRMFJpO3c1VFhLJkFRU1ZQW31K''@;'; put 'put ''Sz9lYXdya2JvTixWLHlvanwjSHE3WmhQMlhOaGF3ME9QMkdCMVh9ZlEqS2R0WHhjPEUvJEMuNCksc1YpQm14b2BzVlNSN1srellqZkxHJm8jeWF1N3haMWlBO1lyM2E0W0Z3XktkRm5Eam4wQngmb1ZvYHxtT1BWSSk5bjM5cXV2dUk6Jltqe2hsQ0h+JnJhTExyQDkrPV9AO1JAIjNFSHBMdnhW''@;'; put 'put ''cXoldm91Mm0paztaVjExM1BHLkUpQ1pKKSZ5SU0qJiNvNElucDI5JXN2XVcoSUVmaFlmMD5xI3l2VWwmbHleaSZQQ0tAfTIqNUkscU0icTJvXWZ5IS8ka3VFRFN0PT0hMVRVTGRCZXc6MHhYTmwlJVB8Rjd+eVZOWjBHfU5UMGYxfGNXMj9IfE18IyU7QT1oT2BERV1Dam9iWUVWRUxpMVFBd0Bx''@;'; put 'put ''UCh5eFtHOlJEOU06cklQJSQoYj4rLFBxcGNBfWNgNy9KUHlUK2d1I19SYHJHKj9WIk45RmBgbXglL1c/RkgoQWlkPDV+MTcjMUBGdnc2OXBbInIzKl1BP3AiNmU5UmE+cGk4WiRvWFYvNzhMM0t9ZUAzUEoqKlM8L1t3X1h7XlF1ZTowWHk+X3V9P1BaJSpdVlJxSlZ4OHhEYV1+PSxBTVAzaCw8''@;'; put 'put ''cG11TyleIyp+SWBCPk4oZndZfWhxMTopcHQrLldQNzttbk5jJClGPXpINztEOF1re34ubGxuSkQ9fHhHa11TNjpkUHliY2I6VUtIYH5lcTg+cDJvKno1PmoicFlKNFpUfHU8YDE8bTQvN1g4ND8uSEghOTRqIj92UEclUStAampGSjVpPF8xbkI4Mn1VdzlScUxlU15MT282X2RgXllXZDskenJ+''@;'; put 'put ''Vzp0Z0I6b01PTnVNPVdNQmZabGhQIU8xYzsoVmp2TGpnIVZKY0J0fj14ND9Yd04lc0dAR2JVWDQjbSNxaUlmeTo/RFU7VyolVFpZfFMmMUpMQyxIT3xISEB+MyIqVCJ4QFQoJjJjNVRVWD96IylPKSVeMGxxQzNVQzAjQzEsVSNZM2hIby96MDIkWVQ5KCtmZ2Ykfk5hW0ViSiljNUQyfDk/Njhw''@;'; put 'put ''TWlzMzk5b0l1aTFHcGRWKml7UFdtMXNSO2JFe1Y1Qzthb3NHRkcoXyM8fCFCdDg4RGhsTDpCemFmS2s5PSVgXTxzV31WTz8mQHU/LEBzNT9TMWFoXmhfeDcvKzNXPlNnNl0mSE9KbjJGM1UzNHVKLG9HWmBsdl4oRCxMRldGVHpPQTY1a3FqeU5yYV9qflsuXzkiM2Z7IzcsWlIlXmNPeHk7QEc9''@;'; put 'put ''JFooIVhaREVgUCooLzZuQz85TVNWdGQ3eyw9ejdTVm1+Rm5ieUR+VzlESz52Q2lxSHIzIk0oODFnXV4pSndDK2VnUWhKUWJodlhaTmpLZEIqR0MyXSl0Y0UyWzNlej9IY1FqPitPO2JVfT9USm52XyxtPTVJTUVqRl5uJVpbSUlYMGVsUFYhcGo5OlBIMDBKWS4se0A8eVBObjE3cD44QFE/OFRA''@;'; put 'put ''fHJ8aXswbGJ1czw4MUQzXVtbRFImbV1JMUA9bT1DU3NFcCl4eE8jNGIhYVdyVD03O3cmaiVXbz5FTUpdd1NoPFBaRStGWih9WnJwcXIzcmA2NWxufnIxSTQzbTRKPkNlOm5RWXViOnxiK1R2V098Ni4/dWNhInN7blRhd3RSfjxGRis2XnFZJmEwQnVBQUN9YzR2dip1XyFdNyluTWtHO3hnLkdM''@;'; put 'put ''M0ZDPT4/VFVWM2sjcF42ZXhlRT9+OVltIT1SXlJxL1klc2wlS2ZXUG9ATkY6I1VKTkBCd2U8JCY9WyJqLmY6QEtTKnVoOVlZT0YyJG4kbyRuODMlfkUkPSNeMEBDemxZTTB1RDQ+IyJJMS9lQ29qbmxBJjxPbi5JZHNbbEZ6PmNIbiEqcEdZOX5hb3VQOHArZTJ4UXhWM2N1WmZIMXUxJS9GakM4''@;'; put 'put ''SERTXWp2RTh8WXdTPSlFZT97S1N9ZXJtUzNESlE5QGg6JXpbQDFsfmBTLHtIRH5ea3wmOyxZaUdLTk99VmlyYVosOCMxLmErX0MrJE42SjckO1JzNy5ZZk9AIzZ8fEU1aDJiYk03ZjwkUzh1NXBxQTxdJUgpK0lXS1FUZlBkcENOUjk3ZGRHbyxmMSFCK2whclclXjkpcWE2YC84OGBFSFhNTS4y''@;'; put 'put ''Qm0zczdxLkB4JnNpfSVyeTwufSo/alZNYlVAcilzIn5NJipSdTxGcjpCYyNra3ZqVUtVUCpIKjU9MV9sInxwfnhDZ0BNLH1uVWlrIW5lWHAkcH41PGx8SyJqNnBeNXQ6PXc1TENXVjY1T2dXYVBCJHRDI1B9S3o9SVBeKTRxLGYiZSohZ0o7YWdablFVRVVLZDRXNjEwTEhLIUg3LnI6U1hmfXxH''@;'; put 'put ''NTFtJCF0NnVNVXRQOCk4WmpSc0t0O0E9XWchYF93N0E8JCFZTyRPQGZJOnZ5azslWWFHLyleRnQ9cDxzZzN3M1FoN2B0YlhkY2F9JSpfNFB+dCtVeT1nIkJRI1pTUzNMOUt3c005QzlndFA0bltfakk4NjQrY2ROe2ApdFlhdjRDY3pKbyZzJXVSWThGa1BlP1ZLUEUwcVZacV5zMiwlTnVIJUNl''@;'; put 'put ''XVBJUHl4flgzSU5HdGpuSmooRlIvRm97OXB6cVBqOFlyMig7fjJ6VTJzbHo5e25eVGByPHVhQUNpLiFGcStGRGNKUFI9aH5OZ0slVnYvUSNmRCFiYn1UZyRgTmE7WCF0UU00KSNNVzhWbGRtUjI1TWRrMFNOYSs8MlQ8eiRqSmZPWjovezh2PGE8JVUuWXlOM2Q7YFcrIWN9dyJLV3xFUyl0JGFG''@;'; put 'put ''ODVna1VsKltEdmtAYDQpOVZIT1EmI0c9M1JNVk9Fc3tKPVU4SCU3U1NaKlZEVyElKSJGdVR5dD4vV0I/STFJJmZ7NU92WTpTbmV8cndJNk1gaSp2ZEZKZiU6ST1RRzdTY0Z+KWJ0T3EuZy5BL2NKKEFnTSx9P1t5US5BcnJtMitsU28zJF1jczlsaixtRGlVZGImJXZ8MDlYJWVzcCteMTg4Q3dS''@;'; put 'put ''bDdwPms/KGswMWtBbFpuPGBNMTVdVGMjblpvJlh2Kz48fGZ1eVVBTEokKVh6K2olVlM+ZCUleGBVRUVaPWk3YHVabiVaWDt1fiVqVCtKIld9YSVoLE1+Wi5XdzxKailbX3ldWFpTOmNhbyslNUF0LntFVlUyYFd2ej8wYXB4MiF8JnJQJX40SEBzS3MsaVljfTd9XV5FKjJyQ3xLV2x7SD4zTGoi''@;'; put 'put ''V1A1RDlgXmg+TT5tVEtOdUZrUHdHI01YOGBLPEIxJExYUVhQRTI2dVV1VmVMTVdQNzxDeS5abFshcGpyUXpjZlEiT1ZDVjwzZWFWM1hKaV8jQHg2SVtGbyQ8VDZib0JkaCVGISN6bG40NHI/SV5dUldkUU9LJSZ8W3hnakJYdUtCOHl8WVk0cT5ERUd3Z0ZYKXw5XTlNPVNrISZ4U0R3Ky9mcW54''@;'; put 'put ''VCZMbUVWNiQsL3gsV0VUfTluYV1lKkJbNEYsMzwoSUQsM21BSFQpVj9TcUAkRTYjfVUoenRRYW08dnVLUmZGQWFEWUcwNXpgOEhvbX1NRXx1NltQZGo9JG8kMUY1KUc3SWhUU3l2SlZiKH1PYkxlLzJ3O092Um9DJDFdSyRVNT9Yaz0kMT5odHl2NmFPJj1APCQxKFJeQ3JnfCVgeWpQQUtoXzNu''@;'; put 'put ''SkhbUWFRcnF3YjFtJWI7QWh7dWc1SldwUHp5UyY9Qj9Ce3JJXkhHc3x5bXViOWphRHxfYkQqTnNxcyo3WFF9MUxqN01pQ1J4azpue0hGdWZaS0UiMGs1Oy4+R30oaHF5cVskKUgyJUdVSHp5cUxhVyx4WzowczdnYmBxKiN2enleTV4yeTBDSXU9PSs0cTNANnAlY2d5fnM7b2FAUm8oTmd4dDNZ''@;'; put 'put ''PSNhYGlwPU1YUSRGVVIwXW5ZNnAmQjU7OD5ffkxHTzYpZFBKN2lnYmQvMjckVV5JRDROSGB2b244Pz5Gbl1XPXFRK3YhTjN7N207emFYOGBZez5xQHBkNWJlcSk6YXo5akdsIytNalliK2lwMmB3Zy5re2t8Wk9xQlRGN10+WStnd0tQIyp+OHMvaEZxPG9ObXkpOUQ4OCtjc0x9W3RxMnRzLitS''@;'; put 'put ''L2h7d006Si97b1JlLEtacVd0YGNdckJkTVVoO2wrO1lXNj9rd250byYsanY0ZzdBc115cjdCL2xPPFkkOld2KXVMUD5MRWNeOk1DQEw9W2pNaSN9Qy9pTW9gajxCLDZ8bmB0QmtUdXVwWTx3YXpAMkYzelsycSRWSEpgImJJeXZiWjRHPWQ5SGcmR0ZOc21LZCYmPix9LllifDxvMTo9STAmL3Fg''@;'; put 'put ''LGMhSy5wcDEzVGtxYTQyNDJCO2d5WjtgVWcrOzsrMGpjT3FDKGdgeClbPiE9S1cidE1BMF5lPDhMNiRQamEzdkVfOC99N1VuPEgsQ21WTkBqM3V8WDAzUGFwNGBEYytaXWwsRDBqWERzMm4lb2d0VkZYSl9zSGZ8aEc4aXhSL3wvempZR1BRdm1aQlomKjJPJWplPUtzI3xMZUV1TncrTmYpRiYi''@;'; put 'put ''bGhfKnwmSVZ6TTIwMWskV080XkhecXNfYHttaC9zZjolVls/WGRuT2hGMlhfbEZWNmBrWVc6akJbaUZgNUd7NTZPU256Pis8eXRxYDd5ezJgck55eF89PyMmfnViN2BBbCQ9NF04bGp+ZyZPIlIyTnB9W3xWbX47YzUpTztlcE1vJVVfeC4vayFJfmBrRG5HcUFiODl+cFdyR3h8Zi5xVzFkdXhq''@;'; put 'put ''bzV2VUpsb0UwWyl3WWg1JDYpM1E1VnRKJnRwZ1BvWzFFN2VNaGhkVCNVL153aWl0RmI1NUw4IytnSCxrP3NhT24kMHVRYWV1IVU9UD4+SkdjYT5tIUVTc1BQKEA8PmVLW30zZjk4dGYmM1svMWtDPEohTEQ3Y1N9ak14QTJTcjoxP11Zelc9N100Kkwjb2hPXzwvNFFHNC9GXVhPdVswQFFpRytd''@;'; put 'put ''cm1oa1ZtJXc9VU9kYWsvWmtQS2ZhOSVedHNjTmQmWD0xdFJ8alpmXTJAWzdXeFFWfkcvOXdFeGRXY0tfWzw6MF5ZTmpeKTZWSz8mIzkpVCJsUGZyYjdnWTcrN1lFQX5MV0VvfDsxYXlGR0kvRF8ve3Z5bVM6dF1ENiQpX0M2d3RBNzIsIUFrOEA/T0NyelJ+R0o1NjJubW9ke1IhKXZlK14+R0x0''@;'; put 'put ''UiZIZCJTNHdYWiI/OyoqeWl6YVFiVGNUUFJTemQpc3RsKGgqZFkjaW96Tnd5NUFxX14yQ2FTMWY8d289KSpUd29NY0QvKFc2P1M8PUw9NiFCYCQiZGM8Kk9HTHkkcExmJmhBajB6O1ZxVl92PiRZWyo0MnRRSSpfQ2sxd0ZpV1BAYilFdikuOSIjViV8MT5nITJmTkspXWZVZFQiLzdhbzFSKXNv''@;'; put 'put ''L21Pakg4PnxiKSs+e3F6SEV5M1BEV3pYckRkcklePSxEKj1heno7MVRAPnFjO24mQWgmNVRbI1cycyMkUi9dMXZGRCtLfj8xQDlsU302RD14O31vdS4uT0NRZSsjNTJ7R3wyRT49YD1HaVBeNmJ+PyN8YzZ3TWlSRmN0TiYrfjpgPTg7YSl3VWI6U0E7bjApc3MmNGlUQ0A3U3BKdVU/PXNpPS9J''@;'; put 'put ''UCt3dj08dlNoP1c0aC5TJlNmVmBKfil4fiJeNCozTFB8cktPVTlhMksoQiJqfSt+YCt5RkR+TltiLCFGa2hhPkUqazpVO1BTOU8zPkR1N0tNTGErSjQ4X1IrTE1iblpgU1BtRVN2ZitOKF9sTmwoVGVCdl5qfDNTLzUkWSMyfm9yNUxqOkdYU1JHNXFLPztJMng0PixPSn1hUllWI24vX0MxRnp8''@;'; put 'put ''WF1rMThoa245Z1VKPlk3KlJ2bHk/fWwrbGUwS0ErIl5HTiNpLkwpLjoiJj9PV1B5e2JuL3gkOS8sYk9NZHlSfV9IWHNZKmxwZDl9NTBaTV9ZSDZIJXJDLkJFa3g0KyNpMD5iTXw7fS5+UVFeIzZ+JjV+UGMpMXk9eD5GL0x+XVdOYUhIRGgwYTtzeHkoQDpJb0hZSj53OnByWG9AOGZhQTI3KWV9''@;'; put 'put ''TU56UTd9PEJYNkdhWlImTUJyVDJPJU48Y1lmN1hKZjpfOCZKUFdfUStzUG5nV2Y5S3p6R3s3Q3VWXWUhUmVoTihaRERaNiozbkJEUSFONj9UUH4+XV04WU8qYyprYzo7VSFgS3skRkpgOCh+Q14lIVU9JmRVUmVfS00lTVY9c15RJlojYk1tOjVuW3huc1tgdTJFLHRAdX1kQkcsPyhrST1ran5t''@;'; put 'put ''OittYFpjS3JPcy8pM1JCPn5UJio+N24vRjBOc1Mlemo7LGF5fTI9dT9zKkNER01IP0hkaCYqXiwhPDM0MH08Mm4sfXNbeG8kR0NGQXV8Ljx9enpYU1dnRjdfUV4mZjcicHNleEZ+JExvLHBKekMyKWowbyFRWGloaEZIZ007NkFBLkM/JnA6Z2N6YkNlbzNNQXY+SihYT3BJcmtbTlcuPC8va1BV''@;'; put 'put ''RFtJVGd3YUovbWYmLyVue3A2cWlLRn5uPDA3TyVSIlVSem5ZT01RISl6Jk54UGl0cXQ/RCpncTYvQ0JJRDVUTFNdaEBUR2EwTVgiOT83RXticUZKVmVBZTM/a3xdczlRWV9KUz1PU2gzR2xiNTF6TnsqLEN7dHZbZSEkL2QvT2A9VilYX2lmbUdteVBdQiMkJVNASnprMHF7c1YuRCFVSn1nWDsr''@;'; put 'put ''JSs5ai5kK2QzKXxVPEhXVXEwVzRvPXU7Rj85WSEjRHFRbStmPzkwUWpeZDwkUntdL1ErWlVtL04iXVFLZlQkIkQzeWo9W1k+PndSbGhmNSVMR3AsKkVHXWxGSylwYDxySkdLXiZZTnIxTD8vey5tNyhZVmRHZSNdNGwvUStDSUI3QktCblp7bz5XR0VvW3YkWEs1YnRLRWB5UTk+QChvRWo5QTRo''@;'; put 'put ''RzJ5SVRXPnU2Zio6bSVWeG5we1cxN1RtcGMpbVg4aH1eeW1NdStsYTJ8MSZaVU1YUVV4Uzd9anZ2ITxmaiFdeT1WRndMV3ZQSytaYTo2YEZWRyREcj1nc1pia1JrbHh2SzVDdjtgR2FjcG5eNGt5REc1djtKMCN+WXkha0F7LHVAcFZ4YSEkNCtCIn56akEhZ2lxXjc0PHs4RG4ra2w4YyI+RVIl''@;'; put 'put ''fTNLPWg3PHhzOXgsdjtVVXwqU3NuSXFuSnI5bFV3L092eWRtRSJ8NWszLih1VV95Izd8KjVKbXNGdX5AZyM1Vl9kXj51WHVxbCgrMXpEM152WHUsL3NbbU45Nyp2Y0RvdUAhenRyPjB+aXd+JmY1d3sjQltCO3pRXW1PZTVZPFhUQjsuKlkyOjBlcnB8bTFnRSpXTngoJmpBXURQLkEqNnkpPXE4''@;'; put 'put ''RCR5Yz8lNE1YTy5CfHM1aUlVfldZWXpkRVpgcSpmP3BLU3MvPmdFRHA2cHxVQ14oRVFUeyRxdlFBMjxvT05Ra3tQPThgV3YsSGoydyZuJH5PWE9nZjRkLEQjY0ZZOmR2OH5mZjcseG07OVJFQSQuNVkkJCFUVUE2W1F+U3VPRDxiMFIuQWFYaVpmeS4xVlNfQ0Zseyw/NitsVzV6XnMrejouVEYs''@;'; put 'put ''N2lqXyRSKF9FfXFXQzgmVDI6U2Z0YllPS1EkVUo3WVUvK1t7VVZIWz95QWZxIXtBfDlmWHhoXj5ScmNbNUNFdTUqS0dUIz9hJHRwVzs6ZyFNTzNdXkBhMlROX000azN6aUkqNVY6e3AlczBqOjJNSipfRjdnNmYrTDczVCRGam5aX2hMaV4oLEtNI348K1kvNzRVflNAI3B8UUd3YCw0KUB1UF1L''@;'; put 'put ''PF94ZnVQJD1MWGc3XiJ6d24rY15DQkYkdWx8S0Q+V1J8KWk+TjdUbG4mKm5EbylDaUdxUUt2NT1oMlZ8Tj48O2RFJmsyX1QoemZVRytWZElpZ21MRlNNMCRNMTEuP1FMVWZnRU9OcjllSi5GUixkJVNgd1QibEdKJi52XjFoeEJlOCtXajdPZz9CUndFRyp9Q2pkeXBNTDchYnQ2fEVkMzU+Uk0i''@;'; put 'put ''RSJufCk/QisheU42c2pQJmBNdnc3PVRbRGw+QkkmYSZqQV4mQ2Y4JUFKfT5SN2cxUSxWQjAiR0Eycm8hUS5PUEcpd0BwVXQ1OmoieVNnO2loa0c0LGBdSD4idCJiNXg7fSFhQnAvTDgxSissYHY3NTpYOm04QiJeUjB2bXtUN2FVLyhEXjYwN1Q/OFY6KHhvT3NeUiU/YzQ2Kjc1dzFAMHFBIXho''@;'; put 'put ''W1tyZyI0XkkqczdvNUJVMUttVCRTJFpvU2J3My5DbSZIIlpBRWVtbDtZR3lJX3MsZztVI2QsZj5ucWk7RT5obnxiN3JaKX0vOj03TH11dERlNGNeRjlQSlBwRy9iM2lAPG0jeW02YWQxZShLdHphc0lhK08zcl1qR0wxTi49aFpqYzBMKVNze3oxIVlxPHMsPll9O2o/SlZjWmpGWDdnVn1EUGpv''@;'; put 'put ''OlEhMTAkUjxbNSgwI1dGKltGcGhXfDQzYj5bKGhLdyxBem9SYC5AJkBxQz9INTQ6UWF2VyphdnEmVlZ4eHM+WTlCclBRfGhsMTxbVXNfY3g3WU1JNnIpV2BdUGA/PkkvQjF1IUE3NDg/LzAqfHhHPn51SHp9KHR3XzNDRlhXLnB1c1VgUVJYPFJ+MShVPj0pZTM/KUMkOnojQ01vdXAkZF12M3Zy''@;'; put 'put ''PnElezl3QzRfcjpPbjRtd30/ND1MQVpBbnNfTS43YDVqPUcsOUhTZllUfChqezQ1PGsheTQsUSRYY0JyNmBBQ0kjNCs5RHhEUSQ4OCZgRW1KTXk6fVd8U09lJW5qJHFkO2B5TmhESnRpXUtUaD0vJnk5PjRZSktUaHkvc1F3T1ApS2BbfSl6JD1MRysvRkZ9Iml1L1tAfE1DMl9LTUEmNVNNelUl''@;'; put 'put ''W3o1RHMhcShXU0k6MT1HbHczb2BnKWlVO2o0TmNCeHxARF4uMjtSMjVTcHVwPm4+W1FpYVRTWDNLWTArYTVtc1F3I3lDXXhlMXF5YkRePUszWk4wUUluJGdtIVV4NUR3Y3xZUyFfIzJpVD5CdkxnNWBLQk92am5vWiRESGI4eX1ySkcmZTIuaFJOOT80P0BOOj5BeitDRzphREthImpGc3Z7clpy''@;'; put 'put ''MUhZQy4mRVhrTj9CcS59Mng1TlU1PSopKjAidDFfaiw1YEBfXkpgbE95UlZGaT44X0lVb2JRKXNVWFYuYCphQSVkMXVAKS9iW2Q6QlleNmgmUDszLkksPkdVZV98cUVeWXI+U2t7eGY0IV5DZDx5cjpeZEEkTm9TKVhwZ3ZHInhyKV1jNkc6RXpZUjhIblcpeWc6SGpiPjdlTG13MjlfTmkiTTNp''@;'; put 'put ''ZEZKW3l0P1c+Zkk6bUpmIXwkO2pTY3hadXpvSUt5KWc/P3BoMm5sSGNHY1N3Ozt5bW1vQG1aIU0+LDUhVFFhVEEzREtCfWBUPXAwdFUlO1tvS0UxN08xeS9vYFZhM2lSLHIyRlFNeG1YSSRdT052fXpxREMxV2YuKTlLKjEzWFpGSntqb2ZILlhwdCRZZipHS1pWRVtEUCVuX0Bzd3I6SGVuP1go''@;'; put 'put ''PCw+Mzx7QVBSVFt3YitiamBKayo0eFhTbzxheF1EW0Q7Nkw7dU9aVDNITDBCRHRUQDxzI25dTU5iRWtsQiRnPiZ2VzNHJW15P2A8OzNhTE4+d1UqV0RzOGI5M0IwYXwlSkFCUHNwMTA0XXAwL058VFYqeyhSTkhpNDkzaHJLIiM8YFBnOHtGaXBTVj0zRSk6cU1aTjcyPCh8JTQlO0JzOS9DYik5''@;'; put 'put ''UjVSXm88azBoO1tMeH0vS2g3XVJUNjRCV1RbQ1k1YlNKSz0uWXxrN2dHV149Q2Z0KUJGM3lCR15UM1pALjU1KCR8RkkmMnc7Nl1LSyppUy9zUFJhR15iY0hHdmJheW1wM0pQNGJrck5ALHpXaDJrWm08W1hoaDQ/PGBSeFAvb0w9SDBiYFF5fXxJWiNDM0s7e2p7MENiW2AlfWhdJWpsWy5Gcm9w''@;'; put 'put ''b1FkaUZKKFs6ZUh8a01RZTJvbEpLL1tvXTBuRT9AeyRJRWhDSkckYSYjZ1R2TFArQFBSV0Jje288Ni5pOGFbPTJVKnc3QmV8e3prbj9gbGQxN11xUU5nbS9lQ21qXzQhdXteeUhtY1pIKGRHfUxhSWtVMjBJKkR1JHdaPFowYVZUKGRiPTs7WThOVTlSLnReT1JgbzFQeS9KPCQsb1F4MEFKN0Jg''@;'; put 'put ''PUhwa1NSLEVEKThoVUw7TlsxeHt5bnYxNSksW0htTllPV3YwLHdvcGhCbzVzektxfWsmQHFlPT5sWTFDVDRdWD19al1VdjU7RyY5JjFvVS58KVVveHl6ITQoUi4le2xRa2FybVZWRjBaflM6UT19bnBxeHNVRyFAL0RNUUhqS1JveFU/XThfYFNaOy9nSSpKbD5dczl7NU9uVTFTVz42UiRNdnc5''@;'; put 'put ''ZWxCKWlKcylPTEhVNUQ6SEcoRzx3L01FWV03InJkUVtNNEdzMDBTZm9tazlmOkk7fT0iaX1ZJVBCNyJnZShXfjVsbUlSdj5wNm5rWm4+UERfTmFXSXJvP211S1h5NEVtNDsoR097Y10vZCQ4PEl7ImcsKHAkJXhPdW1WM0VuVzh3Qll9RmRaeXptQEtzSHAwUkxoYHpHZHBFKENPI0VZfUpQZnh5''@;'; put 'put ''W1A5KDkxN09yKVUkZEgheTxOLlQrM2YrZTg7M1hTVVFVbztpRnRFJXEhelc/VEp2RSYzVmJFKy9oZV1Qb350Ij08NzJXTnhJRyxSTU48WkM9UG95KEhQaS49NkYqXk5MOCpId0NnNjlEOF1SW1VnVlk3STNCN3xoVV1MSXYoKzE+XktYcGd1ZltkX3o3e0Qrd0dneHpHJVB3VnMrVCxtY1dEdEwo''@;'; put 'put ''YHF1TU9MS1Mjdk1qRFo5TjFgLkpDSixET1I5WzMhb0cjNGVxMWR1azhwQWl0Xk9zYTN2cF46PGBTRldMU0ZlUkIhPkk5W2JrL0wvS3BTam87XnIzYSV9Uns1Qjp0YFJgdy55KzBqXVhTWiQ0dj1pM1teMU4+dj9VYmQidENWVl1KUnIzOUQiN19wWlRvIV4kcyE2Uzc7ekpVIWxKU3BoS3J2fWQv''@;'; put 'put ''VSNVaHg1YmBhT3Y4dzg/bHJYYDxibzgwXlc9e2wyKk06Sm99IzxEdDhvOEUhW2ZkYT5MJWBPOGcySDxiXWJST2F8bDdnMHx6bVB2Tno1IV4qKDNxbSRrIWxIQmpqM2lJSW4yTlJKVSleaXhuTFtxLnI3NmhHMXQ2KzoiOExDWDVMVWhWZCRFR0MjIUZeZm1HfE1xWlR7T2FLMXZ4W2VsN2xCcCk7''@;'; put 'put ''SVFrVVF1fGFKXXZaMHZETmFHRlomeXZDUGV4ZWwhNW53ZyU8MlFjUTA7TFlkYWViZCpBZzRtIy9JOjx6TVJhbG1JSz1LRUBCWW9CRV1od2VXc1hUU3diOiR9N3ArTWRlIXwhd0dDZmVDcy9hcmgzeC85RnA7U0cqWj5UT2d0bW1oMDBMSyVVZ2BHNkI1TDdrLiNQTVZhYGZnRDBgJVV6cTFYWixW''@;'; put 'put ''QDBnPC9EWWdNNlhYOH0+KlkhYk9dM1FqVGNQdEhaKztJbyY3MyU4KnpwTjhuYkBwdzxmRz5zNiVLOkRrOXxwJGlsJGVNS3l8YVFZK00kK1ZQaFZ1WkJQZU5JTVVobCoqPTZSNkNzWFElPXlLTjlATkV2K3cubWUzVkAscVthZE16aCFiT0lQYE1heWtZdSYsWjs7W15RYSt6VmIpWVdZUCshM1kq''@;'; put 'put ''YkRDMWYhfDlJbjIhSW5dLys9I0kvWW48e2dASWZEXyMuRXxLQ0oqXWsrXmZTTU8sMVJPPks9IW0qZzc6YER4bXwqTzopemlRXlYqamoxS014ZVBpc09Bbnk3SG5TaTYwayE1bjpxNlhDc0hdcUQlRV8xYytTWjNFJmBUPz9qZVJbKkBOIVM3ajhhJW8hTG0haER4U0U9S0UvTWsrSHFGXUojLFFx''@;'; put 'put ''K2VWWFBtYD5xSTtoWDppR2Q7WXtdaFlvJj8ke1dgcnI9JTpzd1tfUEYpbGkrYzE/e1JXJCk8d0kubXxTMl55eWQja31jZzdVL0FZZy9USjtkMFNVMjREL2BsaXkpazpNYWZmbi9idl5KJWtsNTUpNy8mQ0lEOEovRjBWVmRqTEpqfVBKJFtTYT01MDF8OVlsJjw7NmhoeU5GVT48eWp5eVQzOkk/''@;'; put 'put ''NnN2UUJLQyEhOHwhaTBdYVElMW0mJkJvcUtDaz9adTljaHEzOSlkWmBhYz9LYiZudVF6PUNbZ0JjSlhOVzh5QzBUOldqekZGPnEvfWAlIyhrc2VPRSVGSFpSfUFITUElRipifjJkK3ZNTWBUK20mKWF1YUZKLmlXeDVUMj8uQW1YOjRsU1FLTUIoS2t5TEh3fkF1RUV5KFBMS2ptMXIxdFVdIjFr''@;'; put 'put ''dDtuc0BbWGRaS29QdEpuQHFMUkJHVVhaVl96ODFlRnpAc14rVWAmIjw1eHtPLlY+Vz5iUEBoO0daJE43ej8uYS5RPEMqWkpgK2U+c3dQcmZtdlRsKHslfTc6P0xAPSljWTBEVjJJUjdSbj99eiopbjBGVjxAbnV2Vz0uNUQufTA8b109SVVlJjJJJVpqSSU3ZEkla1NtczA9T3RdS2o1WlFLbXNj''@;'; put 'put ''cHM2SjMrP1ldUHRFb29nMFhfWl4uVEA9PDxNN0lSfjlJND5zNGBeJnh7MzF+ZW5Xdk9KXSJoK3YzYilTWS4za007SEIwZTAkV0V3WUpDZEJjLn5ZUWE/T3x3XTZyZSVkbUVZZ3guIU8yN3dOKHVUTzI6dzRaKio0KVQkeXdFX0c3W1V2Kyk4RkFRdFImNmB4VUgqcFlvPUptbipmM082XUJnO11+''@;'; put 'put ''WiI0UFUubWNWcVgwRGhTTW9nbilEQWBDZU1OX0p0VV9aPVQ6ZjN2cHA5NExQKS88LjIrdWMuT3YmMyhna3BXK1FJPCZQIUxkNzhgTzRzLkJoczg8dGIseDR3MjY+XjY2Ul99dlVEbS5pK1JvUXRtb0V9YWwsKGprUmwhV0BPbGgmMSkhb2cxVDFXIXM5fnB5bixDIzEybldAR201ZDcveiZSU29F''@;'; put 'put ''eT5pYXxJMzxENzw2JGdDPFBfK0B1O2N5R1Q/cGRRbVk5Nm0jKiJuVzF+P0R9filIamRHX3IyYkA0PUdXREw2OC9oYUZqS0I9OlZsc1lWImx1OzpJIndMSCpwY2M0UXhKfD83Z3ltdVlGYVlFQGc8WzkmRCp3e10pd0QrL2Q6JW4yIWM8KlNiMjliQW0/SUt1IldsKF9KN1BCOXguYmZQXmFqW3l8''@;'; put 'put ''MkQoV3JMWEtCeVM4RTZfQkVXXlJbWmJDMiJWJWV1SmxQQF1+cnUrOElKR30wRCQ7RzU8cTMyM08hYF0mZy9OanYqYnRQPjkiTiI6YyUrIkhdRWZAbXFTVE0+ZzxbS3guITxfSGF2T0VJPUxiVHVQe2xybko3bn5UVjhyTlc2YSJOUT9GQzQ6cXM9ZmRKQlh0IlVgNXRvZiI7VE4qa3hMcGljPloh''@;'; put 'put ''KHw/PV9kfENiam1xTVEvSWw3d3FhTXNCN1JGVnA0NCljfjovNEU7UmR7LyM5OXBMSW1qY0NzWFFbbT5UPVh2VmsvfXhyOls+PVFHOFJPdzRPdU1iLywrJXRRamlvJVRvZ281YUpmWDhDaD8yRnI2IkFRYVF7Ij15KyJWMi9EJnU5RjE1P3UwZ0x2RGV4OV90VkFKK3RKOkVmRV91NkpCaWgkQ2lJ''@;'; put 'put ''fmsrIytFRk85Qyl9InBOXzxlTEVDJU9zKUJQPkdvX3NNVXEqL0YkWjEua1M2S0lCNUR0ZF0/KVo0S1ROeDh2QWJRSVpgT0NOcWRScyk3WUM9VXVQJmp6VX08RWA5KD1KVUpadVhiXng+IU4iO3JdRF9Hdm4ySnxJaj93IXtKaVFSNUM3Xi86Z2lbQGtxeT5YOEkwdFAiTz8qeC9BO29bSTZFZVYz''@;'; put 'put ''cF5NWSkvfkJMJj4vQTtkT2FNY2hnOCxuNUIueTlEOWtuLkYhJSs9S0JtNXEzfHNVQHZFSFJvKGF1cHFpMTgyYEs4QTxKZjQmOmBaLiRicCx7OURsKyg/JTZtKyg2QD8lSWUjamh9PzAsOVphR3dKaSE5Z1Q1LlpwQERvYDtPK3NAQD4+ejYwVi4waCFkYjEuWSY3RC8vK0taS1UlK1YwNDpSQ1ds''@;'; put 'put ''K1h1ZTdXPilbQnEoYUFeTDw0LmJ9Qm1Xe292Kyl8Mj90MDtBOz4zW0RIZCRATnNYLmo1aXU7NEYrP01lXlR7ciRHSUVNXWAhWHwuQSR0K3lSKXl6M2RAeTd0SixjNUpwZUFUMV5hQlIlMUMqcF9ufmxsMlV9KTtdOWxvNzt8b2YiUCYra0lwdVo9I0ZXKTxUSll5filqPjArQCN9U20rOyFYMEgl''@;'; put 'put ''UGR5bWxoJXFOMW1HaUk3OSwoUlhGSnZTQyFPW2M7bWQhaEZ1UDZGQjFZdE02XzpoTyE0K1dPPlR6Kk0hdDFEcj5OfjRNcFo3RzhFOFNlO08qPVhnL1lnIVczXS9FTHppX1hEel1rYSlTd2tHc3YiPFtAL1k0eG1ZV1IxeFlWUyEmZztIL2ROSEl1KDR6ekw2KVBScEI8KFdqXTBUXWgsKTwmKnU4''@;'; put 'put ''cjs4d3s3RzpjRmZGSlNhdGNNc1Z6aDBlfXdRb0hrfUtlTXMhL3UyO2Z3alF+Ok5lYVdzOVdbTk1ONmBHMFtLKXJTeUE6MkZreyg9ajhbcH1vIlR8W0YoZUxAKT5AR2N0ajdafk5bUjkmMmN9VTpvMEtofW9HLyQ8L25hcmhCQzxdaCghWyg9W3l+aGd0TV0zUWBValFwS3V3O3toLF8zKiV9I0s/''@;'; put 'put ''fWh+ZzxbTE0vTkQvWG5UeVRuP2BdayEwLDFBT2czQlpBT0goYSFzUUBCMDE1bUVQZFclQHkwTU5rQih+aixJUHwyODBOS3ZlKnI+Uis3eyFGbFVjLkJYaSFqImhUWUMjaDVZfW0ubmR5JXkoejReTkJhXkNjUld5TWZuQllIfTliYHFlOSVnUVoud3tnRCJfLitoU3MpWT03ekJHQSEyIUBYdFIp''@;'; put 'put ''NFljUzFmKHxPckcpNFZkXyhWUGUjZjtVQ056L2khMEJnLyV9NFhlXklzWWQ7KC8xKmlAbyhxcT1NbjI8ay83NElEQiMhYlIhdXhMUEVYTS9HUGNwKj1GUGNFMGx3fUxARVZzUkxVRntIdXpsd11OWCk5SVh4XXtyTE5vXnddTkAiVylpQCxGSE5aNiRRI0pqd3tUIThleC5XZ3hlSk54PCFiUkB1''@;'; put 'put ''MW4yZDNPbjIlMSNaI3okTGdmN0lfInNJNUk5P2FqM2lIRDp5Y0VUdyE4TSwyK15kaHhOel1aK0owdTNxYjQ5bF1BN1liSEtkVHYoK3w1OkNsWD9gOWxiYDNrOFBLaG56VGJiOSZLNHcwZ2VaPFNVP1RkWCU/YjNOc2JXczxnJUdfOFtmUCl4YjNCdVE4V3h5KUh4OUteRiVAelBEQns5WlBVfHpZ''@;'; put 'put ''Un14YV0mYVU2PlNnZnpJX3QzazNPeHpBdltReyk2MFJ4YCo7P2FqWGlOeC5uUl5JLGdRPSNiP0FmPU1laEBJLEJRQ3d6ZW5jUTpNIkQhZklFTXo5InZDK1M6NCU4WkVKPyFSSiFyZnpJVU0uUkIkWEl0Umt9dVpOWCYrLDsyMj9EMD13PUMkT143KiRPPChqTlMjdl5NTmdCPzFpdytsSV1bNkht''@;'; put 'put ''eVApSld2b3pXUkohbCYzek45U0J6JGtzIjFLQmpqSWlkSmdjSmk4blVqOGo3SD9YOX0jOCVxZkVfTTp2KDFbS0RTcUVkJCQxa3ZIdXloUjUqcEBSRlZfSWciTTNzMSVNO2ZHIUtVRE13VVhHL1U1Ln0uUWJSM2NeNGtkXnMvLkxqYHMuRENvRXtMP1Ipb15COHZBa1M9a3xAOFAzIU84ajwkLHV0''@;'; put 'put ''aENANUlydXZqeytPWmRGRzBWazl7ZW5tRXdmKXApcSMpd1c7XylmOVVlJUUwbktZU3xaUSVQRU9jUXlXb3VNJV0uTjpVOjFRenF9WEd1bDtYd294NXZNNUsiMSxxPVgyMWU0ZUVuPk08fUZCYlhrKSRldCZWazFJZi9gb3QoMUV+ZF4jYFYqI20+TjU+TyZXLm9EM1E5LGdbPT5geU5XLk5dMmJp''@;'; put 'put ''ZWlhIi9BMDU+QSxsOihubGJAO1g9YigxTnV7KWs2PUNDV0tVdnc3JjBoRDM0MCwpI2Y5X1JFQ0dNVzNHJntSVmI7Ui5WPl4xWVJuOUp5ZUBfSTY4P0djKllpak9Xfl15PnF5NTpMWVVjUipmPFhlLjJiUlsoWEZVSj9AYjB7ZUVaV2kibkAxNVlbOGJHWUQsKy9teDh6T3ZwU3BRdXkmVzc4bls3''@;'; put 'put ''O3h5OEZebFRmcUh0KzwqI1YmNEo7M31Ic2RYW3RmcHg1Okxqb0E2TDs4Sz5jYHJDa0dPRVo4UnFwTV9NVnQpc185WnJCZzI8MlghQzY7YlYxe1lgfV15ZXF9eTtTN2AwM0x6RlVdKCszcStzdndWZFVHTTdZODMhWG8mcEZTJnpNJXl2MlVGdWVIRlFjV0B3RFMrXUl1UUMzQUQ3RmVHU3wqbm1g''@;'; put 'put ''OnBUPz9qeT1wU3hZd0lGY3xRUVpJYFcpakomKzh6RCRFOUN0KyFEZDYmSCoiQGBrV0dFOCV+LmlgU3xobHVqdVtnKnAmaU4hd20rLDY6SXdXPXs5OlM+bEc8SmZkYmljRSg6RW1GNUp3Q2RyT1chRzQ1VE5yfUldV2lxUF9YO0dGLl9dYT5NITtzd09QMnxkSzg6K0Q3STsjZjl2WztsRGF9bjE9''@;'; put 'put ''WUgpXzY1MFs7Il9sX2NUeShHQCNKKSoxMzdFbzV4M1UrMEtfViowe2Q6OGZoKElCPFBTdTdBZihLKnUsKiZlK1RbIWZuLG5hRXs/L2s9OkYvfk4ibTQmX0phMThCbHRfT1s5YFRrfH45Z29BMEAvVzRiciNIRUp1TnsldnFSPT9VTnJ5aS9zWzRCe3hiODsyP2c6NW15b0ViUTpFcCwpYHZbR1BL''@;'; put 'put ''W0c3KmMpLmxTNkJgIjlqUEFAOlt+aEhvIVp0OXxnN3o7KFtuWXhzOSNZIX1dPmZmWUN0ekZfPXFqVjJffXZGOl4yPC4xaUdQQE04ZnJQQUUmYFkzUTpWelAhU2IpdWpPdjtmKjdKRmYsU3lUdVM/RCZAP3lkS3hGWVR+YnEscjpTP3NMTFBhYVdheWRBKU5nV0t7JVNZKjBtMCVzXmpiKEMqdj9E''@;'; put 'put ''KzYzTSVDdncjc2pkO1FdcT48diIrcSR8ZUFJVm4pNmJIbUR+NDN3JW5YbnhkO05NZURoU0R2RkBseDQrSE8pNjNAdmx1L2hsPmF7dXxDZnF0Wn1XJFlELCNQX1RsKztfNX55XTBGNHZBPm9mImNSe1dnek1gZkVCUEJMKC9haiQsKC9WekhsfWVVbXRQQ2hGJUQuIT9udCZOZkpgQH1dYmh6K2Qk''@;'; put 'put ''UltHZTgmJnx2UElOU090LldFOjU7JWkqJXE/OGIkVC4jQ3BnO2JbN2dHKyh0OD5jXWtQP0VEZVtiPkxuLFUlSzV2Ly8kTkM0e187cSxXPUB5Jk5wZnlILEVNQWJLczA0YGw2dTwkcFUufCh4KzxOUCZQb1gkYjlIe2V1fixqVDNoO1pzRTNnVGY3azZtdishW1R4RDpnX1NCOWk8NzA6UGU2Wi96''@;'; put 'put ''Z2gkbSZ+SkF6ZHV9ZFQocypmflRDQSxYSWI2UUJrRlE4MnFnOGBfVE4lMkJKJDJiMUJmMnN9Zjo1XSw3LyxmL3hINlkwRTozREBSVWEiRlUmci9QX0wqKSgrVS5hQ21aQn1MLi9xJUlKKyUvMDEpWFIrZmJ4dVBMJG8hY0VAVnIuRWVJc1lzOTAqXmBTXVk8MWxySj1sXlZNU0o6KXZQbihhMGJN''@;'; put 'put ''KnE3TFtYenVxLiRSQltaZytWYW4jV0xwUUIqUXtZR3IqYE17fX4kcnl7Xz94fD4mUHdEMClgKCVwOnZUNEgrb1I3PldoRktHamhuRzVMX1d9b28pZ1hANmBbQ3EpeVJyfkM5QntYUWUzSFJoVStiSS4jZCxsKkUlMXZLaTh2MiVTVnYrQyUhWXw4ZW85KjdGYDolVnAqeSEufURULD5iIXRfd0tF''@;'; put 'put ''TSQzMHVlWEcqbG9HdVl1aCpiMD9EJVFfKHxCJmp2aF1PVWBvRi5CKj0ubVZnYGNJciYsWkFmTlcrTDleemEmXXsrbiFMPSsrZWBaOTZwdWkpRHpNJWIldWVRJiVLcjE6MXpEK3hfe1lSaSlXY1NqO0tsL0J9dUZBYWxDclpFWmE/dFU+KmNEQ2JfOCVFY3FFcSp8MCxXT1labyppakZiOGswZE19''@;'; put 'put ''dT13KTBLNCEme0hjQWc5ej1SblNGQiMwSVhhIyomRGclU21zQ2Beby9Udmc2O2hIJFtWQEIxLix0R2xCSF8/Wy5ifVFdVTdhZW1Udy9VRmc+KT9tTnAkZXltdT5VNUtydlpQQig7YVQxNVR1PUh7TFpUNVhrQDBNPU1aVCtxS297XWM7fSgmO3g4UG8iczYienlzViJaOTZCNktyZFZoKjdsKzYw''@;'; put 'put ''bEw+fEpSLltickR2cSpjMjl9OzBjSmVBcGJgbTQ6SVJNKU1YfGBYKHRPeiomVDNPVyw1MFRoKmlUSmQoQzpmP1dZJihPVUM3W3MrcSJhdTN2QGtYQE9PMGpkN2tSLmVPWnB4cTQ9XWo+ampHY3BaNClrRzs+bTwrW2FhV3dXPH1BR29nSDJIOz5UYH1tVXp3LzEwNTVnZ2R9aDI3MTlSSU0iL2Ur''@;'; put 'put ''NjNpXSMmQX1VXU9sNSZQYDk1OVNAS2NQcWJlPHA+UVh2R2dkZj9qTH5qRkQ9L2h8Y3xNaTBLTTBqJnFfRzZXL2Q/O18jNV8zOl1HUmhecnlzM0NCfmdEbz4lVmxBbXh4YnpfNzI6XWEhfG44QGJJLH0pYkxPaDxYb2xmeGosb1B8d25QKW9QIyI7IXh7e2p2RkZIQDZzMHZ9Tk19IXFBRT4qeD9P''@;'; put 'put ''WiFRPSgkIiJNVkRLWTJaSjNPMTY/TE9UUENNITt6XU86dWwzPTszWk4rUiRxOUtZKkc1Y0BvVG9QLD1nNElRREhGQ01ZPlslRmpqT1JNXVNiPSFwYVgqQXJKdmlqbDxiVjsxaUdZajdRQE5ub3J1ckdRb3ArKkxaWTNbb1orK1FtNUYpdWVvSWAlSj4/b1RDaFEwX1tFMFJfRTZuLExvTik1fUd5''@;'; put 'put ''bWIsRSV0PEYxPXsxaG9INmZIN3FSPiVZPTApNUJeYnFkRGReVjA5UFRFSDwxTWohQz5fLjdJOGo1JChiOm5zM1hvQTw8clZEW1Q9MDFYUEZdMW56cWhBciY8VEdwKylva3kmJTRvPkdUVWwwMylqKHR2NEAiKzo7UTd7eTZeY29tWX5acjZmNzExR15iaSYsTlJdYmJqaWtzM11xfDgpLkxHIlJv''@;'; put 'put ''dHM+UTBASTo5KS5dbi4wTkQrbFIsWTBmTzNHIUZKN0BJRHI5T1hLdmFuWjQkcyYxJmQ5WTlzUmlAI2ROSXxLXStURk5TY09pQExIJDh3L3x5XzNnPzZwWDE9STY9Q0xacT08R3hJSG9dWVpNRCszcntTRlJkNEhRJVMxNHdbQl0jTV05TCtbTTdTZHBCXzFDcS51NDhzMkJ0fj1BdzA6Ll98bWFP''@;'; put 'put ''QElZQGR0U2NHJTReOmF+SCM4Wk10JD8wVk09d2BMdz04V0xpbVpDY1ZJbnFoa28sU31ud2RXRTV3QERSSj5AQFtnTWkhRTJpdn52NXY0LmFuZV91eUxIfnBmMm9iZil7KG5nMUgsflp9WkV4U2MmdjIxej1BOmQ0UnhCbD5XTUhIMyJLUihJTSN6QSUvT2BHfkxgPCo0SnhASSFoOHQ5fXVjZVlA''@;'; put 'put ''Pn1vb2FQMEtXQG1felR6S2FPO3o/KmhfMUoxL1ZAenRBakZrelIsS3RUdFhQXiQjKXEpPl15Im5lLD1Yal5TPkg9UHhHc1BpRG1MIkAoZitSbkdoTSJ2YDlzN2N5WzFDR2hNN014ajwufU9bT1hPfUJHey9uUC9nOH07UjVjQDhKK1Jta3VQbj9gaCUmU2JPWW9EWE0jeiE5TkNFZzlANSgubU8w''@;'; put 'put ''VjAmYj41eXosPTZIUkVbeHtweVBud1VhdFQyfn50TkcuNzhHNm9wdHtdbndSXV5kKDB9NSpLRWlAPlVqMyNpOkZ2e0ZpZlBWcy5aSWtXRjguXnxYXUx0YldgVmcwSDVMJklWPGZvY0JdZmdiMyYjUnJVUUZfbmBYcnArTTcyNjN0YldgU0pATmlhW3EwO3syTnQ0NjMsOCZifDlZfSEsMThNenlB''@;'; put 'put ''KmJudjplfDFnc2R7YXZiISkjdjdKUnVlRiM2OkRZKkc1TSQ2eSYodyJaTDd8dWN4QldQRX1tc0RWN0g7VHRJNURpL2xZQi5zR2ZmKjNjPk5ubjptYGYmQjYiNT41QkM/XnhURmlhQjVvazo7LjI+YTFpYk1zMSZyQHRwbDREMVQ9UnlYciVeXV9DNUgsUz5sJEQ2Q05xM2osTFZqemVLUSVgKlQ1''@;'; put 'put ''QlswJU9aeGpmKlR2ZjdkNEleZm80NU1AP2loIU0mME4leHlrWWhDR0c1UzE+PnM2LiU3dDtYYXlWNWRuMU0jeGlgKU1wcU04W1dOWiFxcVk7Zl0wbE1XS1M6I3UpVFdATHlBJHhqM0IpZkNYRSxMViIoVndBMkdeZ3pnRStHSVIucm8zZVZeYFI3LjJDMDIoJTU8LjI9TmUhOWpyaCFMKFJNPEJb''@;'; put 'put ''QmJNQW1eTGFPfDtWUEJWYzhIS3RLOzEiMXlBYzk8eVpyPUNkPHgyaWJpW1VlNi8uNTVxeCU4dF8xaCxlOE8wWG0vQD1NekJdNzcjJilUPVVxRSRaa0s5O2h9dGE1fGVUIUV0W2Z+Zz1UQTxzR3FmYE1ldFdQZmNHb0klIV4xVlk/PWxmJW9XKjtkKjdfMiR6QmVaSUU9XS4sdT1MVzdHaGc+ZHAi''@;'; put 'put ''Z0h4KSFLcks9U1A9b0xwcmdsU2dQeXR6eHFscDJsRilLODgwVlAiYSkpXmFeJUBzVktMe3lhKDByNXZUcDAsYz9gX3UxL1s0Rz42MGQ6LkgoR2FnSV4iPihdX0wvVjJ7Nz9bdVFpRUd0b2wuZVtFR0NmQXlIRm9VU2hZVThnaFhIRlMvYEd7dTJEaFMiK11GOWZ3QDJJWU0iblJWMkMwKzQzN2lA''@;'; put 'put ''UTI6P2VqcXpsbC49cTsxZmdFKEZBTllxWlEyO1B3d35oQ2YzaXA3eWwrSVcpRCZQTXdlV25aN2dEfWAicE14fTRBI3pgbXs+R09SOSFzTVBRRV92dEpwNzVZajssfHgpST4/Xj4pWDA9Ij9wREdXK1owOk58KVBFWSk1XTZUR3wjSWZ7Xi59JTczaCVTImVgfmkiP2hQbyJYRSxBM3ZjKyFfVFBK''@;'; put 'put ''allvTXYzJVN2UGBTSW91PW4lJnxxWzNsSzRZOHBFfmUvMlFxYyhJVURVbEkydyJYJFYwWSN7NEl8SyRQey4oPzFLZGosUV5TeGUyTEQ4QkU8dj1yVGVgJl5CdntQeCJtInEqXmJsclErWTxAZXxYIkdbTHN7I0RpJiw3P3UvTX55WUded155SztmXUZ8OWF2Omp5diZ8KTBgU3EyOURwe2AuJkUm''@;'; put 'put ''SzJzayxKaSYlcWtId2R5SzNtaCN0N3tmfDA7JjskcTtsI2oyQ3IsTnNseTt7UHwqU2dIVW1vcEhZdW5LNUVZMl1kYkd2fG0rXmp8OHkwRCxUUEhGViNrS2BWZ1U5XndZWmRHWj9MWnI5SyYxZzleXmQ2JEkqd3ZNaCl7WGgiPSFJejU7QCw9TzB0LkZFUFpvelc/KC8qeTFvTWdPUjROaHZBUlsk''@;'; put 'put ''Zm5FXi4rOz5edWJGcTVpckl4d2w2b0MpLGMxMl4leGdQXihUUEtLMSQ9RG0mVkgldCxkIlU4NW4pSkJORVpTbSRmZ3EjZkBnL2wybzlUM3FTOyowfGd6WUVEbmZ7I20sMzZUbXRtLDBSXyIqSz11UDdmJCZsSjM/MDo9O2xEfFMsNChRclghfFlRMXBLOU4wNUA1YF11e11DL3s8LDpSPFUxZixA''@;'; put 'put ''PmwjJThzLmgsZ2VwWCVpfVBOJCwlMHFlNWVvMWdIM2NMQEJnWjdlXU50SyM2YXoqeTVjO3FabCQ/ZHRnZyUzX24vcT5qSmg6RXRQISojNjVYfSE2NVN+KW1UY0A7dl1IP2ZCeklWTWBHP0pAO1ElPSh9alU7LE84X31eVWAvXmg4a2E2SHM+VGI/MC9ANSlyVDsvP2osQ2JMNTVUeTQ0bWBwaGJV''@;'; put 'put ''JE8oO0JgNyxOP2VYdl51TTVdISJkLHJRQ3dVZ2AhRjVwWll6eipiXnlAQlJWYVhbV2pYQFFAczlPJGs1ZlprRTh2eUthaz47USMhZzM+OEZmb3ltUG5AXUx4OV9zPDhGZ1ZAOylebFBZRTk5Miw7fG5EfiFWfmpGbnt0P295JSM7Vjw6MnYvcCN2ZXFKRV87N2dYKCl3P1lxLGlbNFJyWzo2cDdY''@;'; put 'put ''Mj48WiYzXzx2bihjfm5UfHVyLHgwS0ckLCEzQ2VGKj1HWEIrOUt0N3hAWyNqezJjRltwZm9rX0VTXylzcUBBdEI4L3RFMTZYOj5pXWp6I0k8cE9hZXhQTE5GaW5vU3gmL0lWVUVaMVZLOiVeS1U3Zmt0QmZ2bUlnL2Z5dUl5WT1vdUBWaGBnY0U2XjcsdEY1PDtJS1UhPS9OSE9JUDF7NzRNJjwx''@;'; put 'put ''SCgqUVU6ail+Y0FXOGFvbXJVbyhWYC9qKD47Zzc9bl0hM2VOPzo+cS8lOXpzJCFBWHJka2hdRlNoSCxtWGZDPDQmV0s4cWw3X0pTeGZfIlssbXNVKFVNRFpFLFlfdW9KSTwqfkIxeTApJSswdXk6PEoibTpCYVA+O0p1a101SE1PVWdjQGo8XW5IRVBXRC4uLDV8WXxROj96XVdzKj9wfT1NY29M''@;'; put 'put ''RjhIUVRZT3VVTW5dV1FlcXk2dSRCPXFOcmR0XSZue1BjfDhEcCZfYGhge31pYl88dihSLEZIVTllX0d1ZkRmekJjT0JHKnN8OEREaHwqPTk7SlZwSUtlMm5lRDEreGIuRzxYbVlgJXw/S3wjWCt5SWIrbShiKjVnVXcwRkZBUmtsL0FYcUhkNipCTS9teC9TUWMpJU9JUGEsPHokYXZZRjkicXJ9''@;'; put 'put ''UV5fK31wJUNNSTYpUiJSUSNmMXJ+IS96IVZjV3Z6QTFlRjE8N1RkeG9jRiVGVG5zTWg+fUticXMjUSNPWFJpYDkiS2QsLE9zQmV4fT0jM1BOV3Vxbyo/Z3JrJX1da0VlYnNjZjY+dXV4UUZZIm0/JVhSYkZYUXVLX2glKiRzQl9kQm1uTihdYTt9dnplN0pxfUlvaWxWLjR8c2IjJkZWPFBGMlJY''@;'; put 'put ''b3Nbb1QhXS8lY2ska2c4RjFJU3RUdEZ6YTt2WnBFRCtRSSpleF5Mc1o8ODpSa2VdQzolWjtgZkAlSTpfRjg5YkBeTzdnZilVb3g4QUxMey9wYnowfCpFYT1USXhUITo7QCFgN2lJeXUrbHxhfSY7fVE2Y2tbWlFtRU8oVHYrO0cxczw7ckRke3c/IWAxWTBvald3NkwuS2VjMF5ZZ0xvbmx8JTso''@;'; put 'put ''dmpORWAwSS8velE/c157IXUmcUZSezl5PjE/RTZWcEs/K1VMPlJeamZDaCxsOiFbVXRXVll5ZnRLTEpMOXJPXTB8R1Z3UkVifUEpLGQzczh6ckkiSXVkZz8mR29iR3JYWEdHV0ddR1VDZkBGNGJwVXVoeFh1TElgQlp8djN8OHY7MWFHZmkrdS9EdEtManJvV3pBZFMpYGpdZHxYKVBRVXo4bSg4''@;'; put 'put ''dzR6e0RyaE0hIm06XkBLR3hKVlBfNkBsV0FpTUdWVEM7e2wqcVFpNEVLaWEwODxJYXltbHRJTmkwOjZlX3VNMDVRYz4/PmxQbEImTk98VTYkNVlZY2VuRFdCQip2fEFbKW8mI0g0fUpoPTVXJiIrXS85dHxDel44IVNSd2k4UU83eVcmX090PVZbRVJWa3F3RFFtemR3V2w/YkEwdkJWPnR+eDMz''@;'; put 'put ''Z2cqUV07Wz8sNVsmRTlZKW1gWjFXMlBEPiRafFVHaTVxYE0wQHImel1rZiVHanRQX2BwYUJNfHpSaik7RjVRLlJiKn48byRfNCsrW0U4OmNSOV9nIlt3Slc5aWhbdEVVSmZZajZTVloqJWRPaj5ER24odyNITUs1SyZzTEZ6Q0dzOFpGTSpBe2E6VEddTV1ORHEjQm4rQWA3cCNCXWBgRz8mT3Nt''@;'; put 'put ''YjJ1TG52MzBXen1RYHZTdjNvT3orJDQyPypJTUg0bDtVIi95OmAmKHlTXWd7UWAlODxldjNwN3B5bX0yblYwVCUwTk90YXFmWXIlWmV0OUh4Ny8jJmRHTnpqMUJyaEZrI2ZNUWBOWVNITDgoeT1bTj9nSEg+SEchLFs2V0ovRipiJmROaTpWVUtpWG8wX1dmNXR1b2QsSDkrSWRpTiYkJi43cEdZ''@;'; put 'put ''ZGUoPUN5RytAT1NIYlBtTH5qbGJjIkBYPno8Pl0mdHYuQjtENk1ZTWx8XSYvRFJIYlBKIWFWcSZyeW84SFJhVl5ueThAXy9mTWlbRlJIYlAiaEVHIlIsY0J6bmdidXNeW1pGIi8rWzYoeT1wVCZoKzEpV1lCLlRRT3giNEtSJChJM35aeEtfLjVuSU9DQnNfNVdGMCVUYFFFeU45cT5EYWJhdkpY''@;'; put 'put ''R1lmVXpSOXxaeGpzPlZnZmd1Wj0rOmdUd2Rneml8W1QpfUwoSE11ZCZpSjUrMkJNOFZadS8rTW9NOVcrO1dsdCQ1UUtUKSUzRk5wXktJYjY7QyJhZ0QoRixeKEtOMXVLKihjYilFTW0oViRuTWdoaiRBfExPMGN6bE1Ea3R5UXtXcj8wbUFVJEVHSFNtInhJazR8QXw3OkJPLFghWCtbUDdOekp1''@;'; put 'put ''SUg4dkxgcyEmTVZEJjBUTEpIKyEidnA6Y2NHXztMWEYvWz0mK0JaLytNPmViYjh+Sz5DKk41dD41c1gzK3grQn5+RHQ6WFk4QCU7Vm0qPSY8YVc4ZyI/WV1LZWx7QXdRU3E1JklpSyxBcn4pKixsJTtKRG0sIzBOTVJ5N29dbVZvWUlnTkRISygoWmZybzo8Pm40MGQqSjJrY3Y/fHlsaCJWIk1K''@;'; put 'put ''bEZ3K0I+aCx3b1Z0X2xRdUtkRWlaIW0zcVUmIXY7XzVQKCgxaGgyfjp5PEQqN0BHNGFFZzwrI3MkXTclcXt3OXAlQ3QhI2JebHg4YkY8aHcxKlVWXVc/SzZvXVQ6b314X0IkTTRKJTdnRWNwI35VeEVId1IqZktgW1I5NyN8bzdmNjU+cikySjhjRSI8ZGJIR2RUP05fPXMiWyE3dyhTbzx3N3ZS''@;'; put 'put ''S1RWdilWdy59IXshSCY1JX1UezlPbU0zRiooNCtWR2lbQFVPSz9Taz9dZV0/dHUxaG8lQCtebzZ2c0twaDpsLkRtKSZhKlNseG9jVU08Jn0lfHRuZkhqX21Oa3t1NXBLZTk7UDAzST4lfGM2QmBMRnlPdiZme2N9KiFNMCY7UWAlYkxzL2I3Y0YhWH0ueDR0TVBTVk99THlqPisrUWA6L1ZMTnc8''@;'; put 'put ''XXZbclV5QGE0fH1MeVhERm90X3FOOnAmcjxfLisiRT52dFJZYXo5Ll9vOUdhbmh5dCRAV30wOEY9Yz8lbnN4JUAkUXV+aSFoRmNUJVArZEVvanp1Pj99bFBPKHd5c1JZYXtLUU5rfDtfTFM9NH42PkN7NWJ3ZS5FRmNUciZjdnVqNi52P2Nqc0ZUIW5xIzwoQU44UStpTEddNDlpaCJoUCFyc0FQ''@;'; put 'put ''SE1KUHxPVnd+P2AuSiQzUXtAaFtvYSx2L2IieXB3JlY6eHhFWFVyQkZpJn53IVMkZDc9WUNGayN5ZXFoQVFOIyIjTV4uSzhAImRyRl9DNCEhRWFSXn0rdTNMMyl8Ymx+eyVfLE5NL1h+OD5UU3ZeI0M8bysiO0YvJGAye2FUJVEiXVI+SzRPIXhXPShfJksqXlZMaFFgUl1uLjphTzNbNk9SKDRx''@;'; put 'put ''bGc+JjdLckJkcDkoSF97dEpbS3k+cSpPT3VDRjhZJj5jaEhaT35rJlcvTDZKbmZWdmA7MlI1Z1teWk5+L3R3TD44RXQ6WyklRHxnJlp9MiRiT0wqZSUscHJIfkx5U2lWc3x0WykoOUYqTGxNcShgUiw0c29UOzAmMm9bNEs/bW1mfCs4aU0hZ1U+WGY5OntOTl8vS3Fqd2w6bWYvZzReayxnYFUj''@;'; put 'put ''VjlfWSJtUGRudGcpZmZTUUs9elhLVTd6bXR9Y0MqXyI3UC9AISIzaF1rOTVOb0RHQ3I3IW9zKntrdTJdYUxAbm5wZ3JxIXJjeThpKGR4QHhhVS82bzo5JjgwWitAUH42Z0lYazcvXkBIdiYwQk84VWkvVl1hVGhpWU1Id1JlaCZbKjAvU2ouX0FUMntLVjwwYDJdUVlqeXA0dFJyYmlPZUNmUGVX''@;'; put 'put ''VSwoen13KyxSYWUiaU5KIis9cSxKdHB1NCJ2NG9wYHZVfjBjVkVdLCF0SnV8NU4kRTlfTlt9cyZzajNzVzF+Q146M3I2YmY0KXVqJjMjZEpySC4mRFkrUGteQzwxaCwwTXB2YkJyWHh4RXlnWHx5MHo8L2c3anQxKXtjb3JMfldzV1dLbDBFc1tqPGtCX3cieiY1ISJffmspRTRHLnNgRy8oNyE7''@;'; put 'put ''K2AzWCRHdEtidT1OJlBbd10qZHJGRjV6Z0gpSX1NcT84UUx7UyRvXk1mQWpCTlhfYiYsWWNVU2Npd0I2W0slfT1WfE5tVmtybWhDUD8lNSMsPDE2MSlXVSlISHNzUSNeI18/KTBtPzQ1V2BMW2g5emIkXSVXeU9Daz5OOSpVcy8lRSY3O2J6RkdWVD1gLnV9QnBhPXleRFEoSXZyclF5M3d5Tl8r''@;'; put 'put ''W1dfV1ssRXVEdX1AYT8pX2dkPl0zRFVbbUlmazEsbFN5Ny8lRXF6IlEkO2ZoKGU7LntpcHRbMChHOVBIc0BdR2YwTEo+M2FvZjNxL2VXUD9Gb2ZDOz16cWh9MHk1MFVCdTIqSX5PTDwpbzxWJjBtQiV7MSFWL1VMKzddaiw+UlF4TihTRWFeTF1hPjJkUD5jd3MvO1AjfV9QcEtAe2JaOFU+ISNM''@;'; put 'put ''dSR9MCZJLGs8PCIuNSNqIyUrRXEhbmBtNF5AYjM4ZGdDZjFeLzwkLHcmb1NVXU9pdCR7LEhwKSE+ZEJ2dVVFZmcqZT0zJmN8bWRBKVttZVEzPTsoVX0rZD4kN2JTPWA7bz9Sd21KVit4NihIPDl2cyM9TUYsK2ReVWxPd2AjSCRPXV9LM3ZbL3F8PCpjdEMsUzdjaCwhUzwpaiFjd2NbNTtMRCFA''@;'; put 'put ''WzdMZmEmUHN2ZEJoVFVeOzBkVUJEViYoSzZ3RDpwOiMmLmAkc1tYeyVBelZOeDd1YyQ0M0d2X1J4UCVVJSVxYnlrOD1kN35YUCVAOHg9Wjx4MnooTVJ4UiVUIU42RSVgcjgsdlVoOD5dIUVCMGlmTStnfV5PYXchSkl+bXlNd14/ZnxRJTE4VHhRODJxUmhfcGRkVj19alhoYjhrLDFnW20rNXQ6''@;'; put 'put ''SmZOPWYhTHZBQ0NsS3JlJTQ+bT18IWYyd3NyKm0+bT8sPHZgSWxUWWV4MERdOzNpcWBZYEIkeyxQRzpeW21IR05hejRkclRMS20vNW88I3dSfDtmZGYkQDZ8LHZCPD1PcSx1ZFYsZ2A7WTF7ZyYpUVQ6RH1lY1UsQXI4OEhQbjBjbyZQYDBNcGhiLj0hQ3MsSH18aHguSSFXZWFpYHRHKzxmZGYr''@;'; put 'put ''dSlgYzFaK000bFJ+eVgxaVFAXW5Ye1EuTUohaCZsKmlHXkoid1tofnklSCpLe3B2e0xdNi9QTyM0KDB3Ol4pcX0pQFpEUVguKUI8VlcpT2IrSU4kMFlaQjxqKEBCd1tAVlBVOk5FND59eVBHV1ElOmZYYiUxeGgsWjNuVH46SlM4Q25HSWRDUilXayx+QC9kKUBxTFNQU1BSMFk4Xz4wJkpqOTVf''@;'; put 'put ''YHpUIUFyW0dqaStfNE9kTEcxZC82YjNUKF9BM1ZfPlVHOVRFYXJtaltAT2csLEs4d2pHO3F2cTtiJXpqYiw8dzUpLm02SiJKcUU1MlU/ck91an46T1JNXlVgTlRhPEg5Y11jMy4rbCw4UDRwU21mNmpsdFZ8XWBnU3ZNQ0B4fDw8cm0hJHFFSEdCdWxqI0QhRjEqZCRoRX1LYFdrZ28zPXd+WlRd''@;'; put 'put ''c3dUR314Yi9kcFtQIzJ5QEI/eE56KnNENX10SjI3dk5gcGg0dD9CMUJKM0EhUChGSksrYCUxX0oqY3dBR2whOCEzblA/RFJCe25NVkY5S1tZfmNDLGF9MzhESyx0Rkh9VUw7KGxaRUtINk82PVJfbktxNHJeMT09JENGPWhoYXorS1kiNnUvOSMvXjI9M0Nvbzk6cDhqSSJ2JGFLJFNtWiEmJTM9''@;'; put 'put ''U0dwbSE0NCojdWAlQXojfE1ufmdRWXdFZGczVj9Ue3xrOUN3OzRxLFhDV2tMbko0bXlfJW85ZV1YQE5LemhRK0R3SmFiOyVWYlAmNy8zI3hSMCM5RSlVNnkucGZkeXhpXWhQJXIpWHI2IVh3PGZ2UHc+OSZUNVIlITNuSjRMPCVvI1Q+by9ISEV5ZUd6aUR4RE4hTVZTUF5SPEp8cmZVVXdzdnlr''@;'; put 'put ''QF5wO0k9WD5yaipNeGpPKTF5UFFlPVhkNn04WmE+WT0wMmdkdzNJNH4ifUskI0B4aVk3KntZKy52VFo/SDtycHk8TFtzOVdCTDwjTCFgQlordEkvMi5EfV0rS2UkfjxScz8pczkhOSsrYXJ2I0pTfmBJYGJdbC42aUUlR1dEPV53UFl3Py9fU2t+dGwuVHJKU04hdmckQGcmM2gxezYpNn1STj1E''@;'; put 'put ''QHlSVW1JP04xYVombzNHJUk/KSl6Z204aUxgMms4UlJ5I0E1N0B3PXhJUVZWTU45fk9KOD1ibTV6TWhfMy9LOD8vP2JDZmx6Yl5vdns2JmF9ZSU8MlE8JTFeem1ETGNPIj05Knp9L2JTPCwwNkp8VmNNUH0zRDVpQ0dtayVaK301WU9AakJvYWZlS3hGPXNabENIeGJePFdRW1JFQixwQDQuNVgw''@;'; put 'put ''enZUeEIwZntdPjt9NTE9alRAT2ArUjAubXtfVSgiVmtpMm86cVRfRCk/P1NuOl9JYGxFUHxpTSU6K2BYeGwuXSZSWTdUVGtFX2RQO2NwWmQqfjVXSGZjOWQ8WGEzPmdhMyh+diViOU5uW2E8XyYpYF8rP2BxIVthM24lbzlsWFphUmlAXlluYWFwJjdfJj4+JmxSV2gqSDlATXpQJWkzI1pfY1lu''@;'; put 'put ''UGVnV3UpMjBPM0tUMVA5Ym9yVkNbIl4vUGwkTCpHb2JEM30/Nk1FKz56USs5WCpqMFFTTiRdNU03JWdbOE1xb1U1SChgNyxjeCFbVXt6MFUsfjAsRHV3e2lGTEVEL0NoYytlWzFRTiV2fFV6b3gpKi5gcjFWQ0NjPyQpfUJTbUlFNHEoMnk2YiFLaSgpSXdbb0ZEOF0/dlt6UjosQmNpfHNKaz8k''@;'; put 'put ''fmBVMHs4LHNgdWJ2STBSIzcxe0lwQzY3QGVgM1t5RkZGQH4qKl0/QHxhRmdGTS9CIjZDRExycT5Ud19Ea11Ld1tVKHVeSFNLc21vSks5OzhSJDo1MjZieVZ8NExWd0AzaFhxU1ZJQXV7eUYhKCN0ZF9YU00xPn4mQyZzenlYU0hffTt3PUtMSkokSXdfUmV4MDdiS2hHX2orX2hGTGE+bl88bkFT''@;'; put 'put ''QzxOT2ZIO3hHMnFkcElETGgmMzspVUpxLDlLRm9ddzlbMlZoQzNLeWU1L1g6Y1JQektETUNrSzhDR0JTekVTNkRGd0RrcTw4RzJUU3RNbkdZZEI2fkJWTkE6X05MU0IybWViLCl1JUJQN0Zhaz8rcmspOGNXa0FTR0xCaS5RV2tKbkRtX2orX3o0djNlI1llfFJqcXRMSnElZ0VHWUZbTihVam1B''@;'; put 'put ''YkdOYERCW01DeF40MW41b3ZeaiE0THtDc1NMY2VMJkZKVl4sZlsrJjJnOnp9cnliUVt7T3huc0g0P310Lnt1WmtoNG1JL0pZZklJRj5sbmRzLlF4WGE1RmpdajA7VEk0fGM1O25vNHw3IV5gZFJIR1pgb01ZOktFYSlUVWNQP3lxSURddnx2V3VpPl1wOjlbaDhVJFFMaTNTOWJvc2ZAJS4vSDRx''@;'; put 'put ''fXoxcWtvMU04OzBiVyZPalpUWmlZa3s3MmAoTDBKM1tDNUY9L0xmfW5tQUo4IiwwTVAsTT5ISlV4IWUuaXZEYmliUSFYdiJ0bmkkOz5DZVY+Unx6VHdLYGFScGhlO2IlSVg+QHpRM2hQay54I0dEV3kpMStNO3pjXWdHIj95Y29JcWh6TkgoZHEwZypoen5qN0txfXhBRkJZaVdAZHhiVmNJTV1P''@;'; put 'put ''KmFNNV06NE17PX1vMH0kISpQYiR4Kkl0S1A4dkt5UmZsemw0RX1PP2kkKnhjIlBJYSVJPWkwcEsrTl48a10le28ie3tgU0lZYWxPTE42NXV5dz5Me1JyUHV7fUFFJEhqZGNuVyE4MUUzNkxlWUl6ZFJNYUpZUCUzS2Y2RSt6UWBDfVdFQF5QOFBjIXJzXj1AYFl3TXNDMFp9YFZYcyJLKEUrdnMy''@;'; put 'put ''NTFofGFROVt9W10kR31eVzhCRC9UazwsOCxbQ0NjLltxbUJYOVZpfWteRyhmIzQqSys8MkV6WmtZajF7fkRHdUFfPV1bcnwzRW5MZkRid0VXNjVMWjw9JkpLIXx7fF12JmtHV0lgYzMuUSwqbmAwIXxOZVtvYV93XXZofENPRF4xcV8uTXNnS34yTF18NEdXW1QsKiwsW3pdRXdbZnhRP0FPQ0I9''@;'; put 'put ''ITIwRldVPHF4JjBAKnBNdzB1P0BtTVpBOSRKayQrSHA6XzN5fGh+bC5AQFMpJXx5fHY/MlRBSnNwSmlVPEQuXT4lWGEhUTF7elM9SXB+JEEpVUlAMGFaUl0oSjsxX2IyTV9KMXkxaFZ7ZThOP3ZfOWIiWlBZR1k7ajRfRGZJbl1VM3QlTDIzfXF8b0pEW112SG88ZiFjJEYxcSkuJVU5KGk6LD0o''@;'; put 'put ''YyYsXi86LyIzMyZyTXN2elApJStQcVZYZnd6aVlBYWEoTHV5Okg4dj9qYEpPT257MzVrPDI1aFJlb3F8fnZydW9pU2k1NCU/XSZKejRxZVRqIWxKOGN4aiFffjI3bENhTjAkOz4yWU92czZIWDomLy50KWdHOlpjeGxXNUYxRGQmKWUuKlNeWUl6cGxzM2hfJG5tfjhvbHEvUk9fQ1E0MU5gWl8p''@;'; put 'put ''JWUuUmk0VlFLeVA0cEowQXp5bWQ1bGQuUE14d2h2XiolLF57el56XXtieXltdW85KzpFN1psJHRZXllpPnc/aUd1Qno8IltleFJvPVRdJGpZPXUuXy9IWX1gJXhIYituU2dPekJFNXY1WnAkY3BTSkQ/a3ltVHoxVF9TRE1sd2dAJXVfZWlAYHpkUXd0TWlwVnhQLDBML2Fqd30wWVlhVFolWXtH''@;'; put 'put ''ekw5aSl3ZXVtRUg2MTEpVnp5V2ovNEtHZH1AI0pdeXc5TUE9QExxNSRTNkopOWpdQl9MWiJxNSlsLFdwUy5FJHssU1RvdUQ0PnNweVRbQlU+VHxROkc+fC5geEoiP1B4Y193VGdLcD9bW0xyXTk4SUtFaktFdig/VTMkZWY3azwuZCIpOjQ8XnRoUUovU3xMQzt8V1ReKltyTGwueGdsJEs8X15b''@;'; put 'put ''SU0/TUlPOCpxMzU8WFo9bVo4JHo4WlFVb2YpN1MsVj9PJjlJaE0hfHZPWzVmYiUxPSpPNSFld1AifilLb1Z2WEkxRSZ1USNfOG5RYWdSQkIxKDlBeG0lKjBQaHdPSW5tPipfQ1QuTmQ3cUw8O2FNOCY9MnhjbiFHMnNFKSVYYT9CTjg6TyZfTWZQaHtVI0tJczF3NG1lM0dkLm1IOC44LFJzTmsx''@;'; put 'put ''MV1zNzQwPDUkY18md2kkMSt5X3JkTmVsTUB+RU9WXXh+PV0xVlRfSlFVTiw3LDMmQW57MSxzL0tzZjNAS3FWR11QMUBQVndkW3hVMU8hSFdEPVkqYTVbS31OSikjPT1eVXVyPDd1TC5XSmNDUiwyJiQxbWZScCxbdGliQV5JbE83IjAuJUlgVTkseE97ZT4pXmtWM2YhMkM3U11FeTxseTEpYmQ3''@;'; put 'put ''MjxVLjFhIk04ZC4xNTM1NCh8Xmw4RE0jRnlWTXc/ISRJfVs8OWFKdm1QK30haFJ0YiNPVHN8KiNvWX1xT0g2WTBEZCs8NnQsOmBMWXUoNWZuMmhqPzNvSG11P0BoX1J8I2dIIzFURXhLRD96eiE/RX1ia3EqUlk4JHNgLD9XeT0kNXtUZGtwTU9WJEtyXzx7UUdmOCx3YThXN0w2MEd7ZTc/RHtM''@;'; put 'put ''WXVxVSR2elEkKlJCSChNenRvaWNiaXkoXiVbQikxVjIwUHBNUFY7eXU3X0pWJW1MSGxDZmJ0dkpLbC5ZV2B4PlhLQ2ZKW2szP2hHV1N5ZjJdWDQ/SWlbc2csOURUaDdxailpSVo7QkZFMnFVWXxIcChGKFV2Xi96fClDZkRiJUp5PnVsP2tabTtMXTNjQWdtezNRekhzIVkqYjwuUHlUdVgmQ04x''@;'; put 'put ''c0ppZj5iaSJUV3xaUnBHKjI2YFtqaHNvaVE9OXBxRF5kSF5Mb0JpdEB8czl2e0RgOz4xZUZqdVl2KTU3b2B6IS95dCRCdTYpOHFkQkYqNVlRRHRSOEh9QXl2KD4pVS5wPS52KF5YUmpxXkEkLiszcVl7JU18P0VeaWZiOWBeamV+UUdWblYzISVTNjQ4ZSNgT1Ikdkc2Smg0MmBMKlc9N25qVDZ7''@;'; put 'put ''VkIocD0hVExyeiN8d0N0TXRpNVRea2pgejY2O3g9RWBITjY/SU5aVDdfZGpOWls9TVNzUT4qSmx6I253RmlrTS5PT19WX0F2NnxvRHZ6MU1KQENaSzxaaFV4ekNENmwjP2FgZlROIy5OZ31jXjE3QDRhP3ZAd31YSUxpT3M7TV15WG83LG45Qn15cF5YW3o6YntMeW9NVV5Sd1cpfj0kVSpTPTR1''@;'; put 'put ''SkNgVDV8QytfIk5SJEpBTE1WPmc6TiVfXS8/KkhecE5SREdYWFFZPD5WRSRiKFk7NWVkfFUvVk9aU14pWHpwcjJDQERpbk18OThCMV1KW3p2UW8jYVpUIjo8WEtVXno0Xj1TUUJ2fVNfM0UoWihFYlE5RVpUXyRGNlsieyUkYn46JSFTPUJRcVhdVWBmKiUwJmp7VkJ2QnBTPDNDPW9LLEspUUVw''@;'; put 'put ''ZyY9MzgmYmVJeFRaRWYxe3N7fCQuWjg7QnIjYXIzQSF1SV1sWktzVzc7VTlBe1J3b2BGbj5DTk5QWSJIKGd9ITksMEkuNjVDKEtfX3NnO2hwZlo/LExuZEozN2VdWk8hO2FAcGZjOzJ6T3xmP2U3WnslKG55WSYjTmQ8RlAhQCRRTVNxQCRUYEtMKW5AKElEPzZqN2tfflBEZCQkUU0kJHB6aFNf''@;'; put 'put ''SWdnNHw6RnJYNWxXUTJMczI0Km5jcExzMl5vQE98KSZwczFuZkAkWF0mRmEzR31PREZFQV42cmV4YnV9M1NpbzQjdjl2MT4lQ01CUCRSUmF3bWomaVZNKFdYMSg3cE1CRFd2cEVHYClubUR4Ll0xTWx+K112aHRDSDJLbm4xdSkwcHg+M1BJYUVSTyJYXk5gakJ1fEk/NDQvKTdJNnRkVntsTHdh''@;'; put 'put ''Pzp3azpzVXM7NktfJl52VV0veG9SOl0xcVVqbmp1P3lEP2YmfTFIb1d6QEQ/Ri85YWUqVW1SXkNDMnJ4ZDdNO006L141MFZdIk96VjR7TE8iRD0pbUYwLkpPTG1uZiIwRTU5OWxQc19wbzMlYVJGTyV8L10+bG9wbmkiNkZKcj1dJXNtTyEpTGhWbD1HPSZjcyJdbH1xaFZEJFUrMzEoKUxSekVO''@;'; put 'put ''PXkveS9ER3Rfc1VOfUM7eT9DXiQ7TUdCNElMQH0lXmtNKjJoM2Z3akJDan1nQF0mZ1RgLipGVXVzYy50eDIxSmNDUzA+b3hJZFRPKGVMZT41MDFsb3FgY3AzRCoyPyhtV1YlbWlrQDRTKCxuT1toVFIiVHhtInJ8SXB2Oko1dlQ6fCt+WD1YcUtjfFB4OkxlPWQpY1RvOERqRGlgWlBHKnBCZDQp''@;'; put 'put ''fGtVTzQrQ05HMG0wVzh4PW8jI3huNTlQQ3szcCYlQ2VxOHUsfVhtP2ZfcTw1YiI9Qk80c0tRcH0ubWxMK14sPTsoaDdeZHlqJGomaX0xInJ3VDVCOTspLEpmPGFiKT87OD8kOjR2VShHQ1d2entvIU46TUg6MypQXkFTRCNMWUkiUi5OVkYyXUksOHcyfCJGNVYpTyJGV1dbcSh3andkY1A3a3Rl''@;'; put 'put ''VnJgM046QiEifHRTWVMqOGhyc3FZVF5dJnRdanZ4WEJzLDJYX14mcHFgdlQyW0t5JVZaX05sT0g2LmUobTBIanE1N1s1RmQ7KkNFOVd1T3spPmVyXUNER108I1slYm9WKlkuXkMzUVR5c01zVVE1T2ZJLD9CdGBKYEFAWiRtbDkvOjY+Z0hmWkh3M1l2Tjt4MHkpKSVhSSxpZWhqZUcsNVh0NSY7''@;'; put 'put ''TTVARigpa2NTPEohViUlREFdWGUiPDE+QDUoZ1VfQGdMSjp1dCZkTV0yWXUkLFVwb0dWWHBkZypeJmxkI25vZCt9KWtsJiR5fFRBTV03OEs+ZFdde0Y+ZG4/aXQvLzJLU3oxWnFjNERZYkhXQylyK1VHVnVTK2l2alo1TyMwJkwlSyomM1IjM3BIMHw0SFQkM3VlY3haNShgVzIoYFdKIlBiQXgx''@;'; put 'put ''bW1QakZkSVVkNUk1SFUqendZOXszJE88YUhnLnVWM000bWJxdUVvRW4/cz82e3VBJFNITWp9JmdpLmM8Nml1PDl6KVVwfEpZXV1gL3g+OkpQWk0ub3Q5RD56bj5SIXEmJTpTMW90LG9hPzpsVmskNmIoaSlRUHc/LEVme0dPPXxjVlBKVHYxPWhzNSx1Z2d0OGlxQmBXXy4xb2Rvd01IcjFQbVo9''@;'; put 'put ''dF1aP3ZKc2lmPHFoYyxwbUs+aXlgUFVHczU7Y3VsJENbMUdZOyY/JFgmJEQzclUrdS4mU00qJncqXmlGNXlOXno/P2pWbTh0KEYrPlVVam5EP2ciOnFpXTI3T0hkalN7LihMMkV8QltzP0BaUV91YCZuJERhNCE/azRtTD9oZTUiQCZEL2VIRCopPWRLQyp7eUNGP3szTXtLV197Ry9oXzBbeEZT''@;'; put 'put ''PjgxfEBZXVd+QCxhQnhfaUZpYyNtQUFIdD5NL2xbYF9AJHRJajVQWHZmQSRKOyJVTDFhQEpIdG1wS2FfaFc0bUdzKXt5bHlgN1tmQk1YRndEODY9VlVVRkYiPXp2Vmc0TEBLRmlxb1QjIlkmMCMoK0FafEphMn1YREd5fmlxYDQjX2gsTD9oZ0JSKyRVMXJaZSh+eWRPQ3dbYDNXa09pYyshTnxR''@;'; put 'put ''QzsuNCQ5UWdQSDQhaVkqNklPQjVSSV86NWhAfXsqVVJUZnh4bF4jfXU1aW5yc2omfFE0Rng2eXI9M2hSbz1+NkBWKHxzZ1Z3fTsqfm99JEo2PUFOdHB1LkloXT99NkJTUC5rNX0zcH1GeDRHfC4hcntRPUh2ciQvRnxCW3tuTXI4ZWJxUkY+TXJ7ND0obk81ZX5MeXB0WGUwSzMxaUxgYkxTZjFk''@;'; put 'put ''OC9vUDlLL0o5OmMpSyVuJl9nPjM1WFhQYjJqNDFUc3BgKF89SlA4OzdCP3YuOzMhcnFfRnJQLiZeTm14eHVkTFNUNWV0MjVwPihML19gakdhX098Kil9L2NMdVZzR3VqdXQuQFVTPkw0KU5wSSFLTFM0fkcyej5nbzUrfmJ0Ljkqcyl+KnldRi9faFszc3wpfXwuX2h2Xk5tWGsqbnl4Q0w/blBg''@;'; put 'put ''e240NX5Eei52c3h4dGQ0fmdvNVUuKk9GSXpIUj9+I3M5TFZTNWo0XmBSL21UOlZxdSEsVWQ5UXxdS29WKlZaNSM1X0ouVilJXyozKyVuOHZLXk9oVkxdREpxMjdDVjUwQCVMXXFlPV49dm5sd3Y0XkJBR0x0fU1OKVJqPVRuQHkjL3VsJm5+dTBnIlRiLlZRWnkzLHRdcWVRcVdWbTkmZCJqd3Zh''@;'; put 'put ''SHF0OWNOKjYxUy5CN05vTiQyKkZCTFJiPzxIRjpXOHUxVH1rPlRZckNZOiNzZ1NUTEtLXkBtQUxAb1Z4fUdgVGVeTio5eD1uU2IyWDlhPGl4eDdBUDRIVG9FM2FAZWBhdyNpOUx3OUpQLlFlb3N5WnwuKyYzIiZCUyQ2YTNxMU5DbUh+UjMxLipIdTZQek1lUm45QF5gMDVveiFDI0I2cmwibzBO''@;'; put 'put ''JG1DJGI1QGAzL0RKSDAyPXp6QU1fIXVQLzVyUyltfW5WVDErIU5gXUZeIyF0IVMmTVpiYTksRSFyPH1VcjY5MSxhLiZ3cHAoVUlbJHFAQCRQd3dEXkZxSzAjajw/QWU8cylmUFFlW1RXd3txRURxRFR9aDk/W1dZQi5nMVRyd3QmWyYlTSVMaGVERS91OzYkd3ZVcTozL1VyeHVIZGdxeDU2Q3dR''@;'; put 'put ''UGUqYWl1Uy88bTVEZl9ZTClCVnY7NjNjbHxRNVVYaDIvJCxAIUk5QXdbdyFPMEVLXn59WyEzXjIpIUErXW8lYy5zeSUjKjcjSC5dIypFKHBlQm9aVC88VFpjdyQ/dGc5WSZwcWded2UzQHtoLGYjOyk0UCU3cWRMKDU7NChMXjduJEhCOiZpMilwKnEzeW11PkF+JT5mMHZHPFZTWz86Y04rXkg6''@;'; put 'put ''X2ZuRX5nWUEmaXFqZEpRQWFeKFE9OkglOEhuTzE+VWwhb2k+P2dBYDI9NFYyKVFxWXI6SDUmS3xOZFZ7aylWcmYmS0hGXlJ7fihqPmhZSTxSRH1bKD1jKWdLZHlvZCZRbXc3OFpdaDByYjVNZXdjRkpqdjtKRSZySiFlPl5HUzxkKV9nWiRMeVswTChkOCs7Im9pUXMlUmpCfVlaVHNjKkBuSisv''@;'; put 'put ''WUR6TFo1VmlYNyhpMGUpfmxGPDs4I2ErUUkoKHpLPU5iYiREU09oJS5EKmAxRCVXRmRrYGErcil9aygsUEZDMmpBIXJ7fDF8NzIjITlIfFtuVH5PaF0kOC5yUXZnZzJtZyF6bExDM3REUmN8ejdRNi9sX3kyX2c3VTU9ezBsJmcxNF03eTBAbXpQdyYyRkxUTW9VQXc4R2p5Q21HN1EobGpSaXlo''@;'; put 'put ''K2MlYjB6P0VGZnk4YFYodSg2bGRkYkJwYWcidGlgRnZgcS5LMHJad1RuZE9yOj5OQmM+UTRONH5qYXxmazM7I11TXzZ2VXV9RWVBMDR6elBHRiVqQ3NmMSxzLCYqR0wxNE49K1RJS0lUeFs8bjhKJiwhbHJ7Ym9nPTNSdClMcXVGbDEmMG1Ec3MkaDBkekFhYU9YNnAwYkp4cn5Mc043Y25TRjZJ''@;'; put 'put ''YmNIY3wzfHFobWFqTE4hSF12Y05hWytgMTBZYCElQzt3UzZGQzZ3V2hJLERwIio3M19KNzR+Jm8qUjxuZW81SzMzS1kmNDxeZ34rNG41Ym8zTTQ4dyZAR1Zpa09aQUpoenFMQGxBbGk3SFArO1lnUGFdRj5GYmA5Z25IQDIvRnlRSUU/R0lmeFMoRj4pRXQ9fT1JOHkxKkc4PCwmWUVvSV44WWl4''@;'; put 'put ''MyEkLDwvKVVARGhLXU9ObHlIMSRyLkxHXkU8SEZPcSo2YTl6b05oS3dwc2JIZigqYFpdM2pufCE0UTdjQmI+QGlSPkhEUzpOanIiNVdpTlJ+Smp4PDx4bXNeTDQvOURofDZfNX09d3gjQC5dW3giLDwsLGVPaG9OLiV7W3pbfHlSdlclfTx7W31OXmdaWE1HN1kqKUx7bWQ4Kl4hSEp3WzlhOSk+''@;'; put 'put ''W2Bdezd9KVpNTGY1MSleejliaSRMYTBGIVY3KDkjUTpjLGBLOEo+TCVtZEVMNU5VXj9kYyh3QyF8QjFHP25zK3gyTD05OCpRIWYxS204RU4ldmFUfSElZV4sfj1SYDF7bG0vOGxtL2N8PVgxSkRJLltMO2I1QClQaEp4YkZRVDBJZD1nYUBeOWJ6Mj5jZCNNajxzXW5IYDVJPTZkUjJzQnBqMys7''@;'; put 'put ''MWNPe20zd0MxOCE2cCI3Lig5ITZDKDtsViN9Ly4sNnR7ZUJIRUd0XSJ8Y2dGd05GJChNVytZbyo7IWFzVHMpJHJ7WU9iPExQVFYwbSk9NkpjZUlMNjksPXtrKkgiRW89P19BeT1oNT07d2BDOykpcTApJlFoe0tRXmY8M2t9XmxFIVRVR0BxKkp2QUQ3KyFfXn1eLz5iWktnZUQxcXJ3LHp7YWsj''@;'; put 'put ''ZmFpTlIwST07UCN7P3NVQDg2NX0lWWZ3USJtQihHKmROMiQwJj5nMT4sWnY+KDBFbnVTRC5tIW9ddltXKjhVfmtsZ2RwbyM6aX49TG5zJHVebWRkSEoxWjZZMUUxLE1tb2NvNHVSPlh4UEJtbzdiTDc/QE5gdjVndyRNeGNLX3RZfDVxTjZRcDciTDJRQzNQbkhQJjc3cE9oYXZNYEwxQEVIYU5o''@;'; put 'put ''bGQsNFFwMWVVJU5geGpoYE4wangye0pAbnJTeGpEcz14Pnc4WV5ZYUFxdHlWVndVKjJpaU94ckYjOXl2byVUOTBgeDR9KTtPO3lVPDl9Q1UiaGFQeFV7NGBLOVdpYHs0InJKQFFEfEdbXTI/alhYNWY6SmRHQzgvUCZXT3kpdl91Y0h2PF9OUFpNZ2UwR2BIPzpxO2A1c0JVJHMsLjVFZlMrI05U''@;'; put 'put ''YkRiYEZHRDxELiIqQFA5OVhYTVVRKHRmL3NMNlh2WFp2X3VUTz0odT4/TENdblhZTWZQbGROUmovRkREYV1oX1tVRHZPb2R4fSl4QDcpcEFMQHsyZ2hKU0RhPnkkaU9JTT1xK1JDXSJDRTRCeTB9XS9MYl5mUD5tPFp3S19FejQxJHFIbSswZE9VUlpzM19RJm1kVUt6WVdaVl5FJiRqc3A0U249''@;'; put 'put ''eHdaKHI2eDNCMHtySiFZK1krdyQxZ1UhMz03MGchVj1xQjx9Oy9WSUNJZF9RJXdYWk15M2wkJFtiQGo4PEA3SnskMG08SU1PcDoiTUt2MEBFKnNxdnpbS0NJO1NZWXdEV2NtZXdYd3pbS1NJO1MyZW9GSE86QHpsNi9FaW1fTjNiO15Qek5oKWpWcCNmfWUsZnlCR3VIbE04ZmkvczpfK1FxLFNR''@;'; put 'put ''JGltYEskYiN3IlsvNElAQldnIWUmWFR8RkRkdSQuS3Zha1liUUE5eixMZWk5X0heO3U8ISl0SXUsanJeOGsrO3NQcV95U1c6WjQ+bksrfkhPSCRsTD8qdFEwUEc2RHJ6KkNRb2FVKzxZakN4R3FCIXwsbmU4KSJ5Ol4vLnElKyVNcWRWPSt7VVJ0OjJMYihXSlp9X29gKkNjWWomYSs6Ql9WYi88''@;'; put 'put ''K2doYilwQ1UoPUJfTj51ISxZYE9admQxN35tNUR9UlYjSCVTNUhUNjkzYVBVIV0vfmlATVhfPUt4aH5KVn1vaywzKTNyYlVdcWtaeEwqelV4alBoZG9YU10uYnxyVWIqcjB9VThhczVNRTBeIld9WHlZajI2Y0lXaGIpeDBLSCxIdykvIi5aPjBhMWVlOmkrYmY4ISlvVShqOkVaQjZtUmUpKkoh''@;'; put 'put ''cX5KV1oucEw9N0dBKT9xYSxvJTFpKiRvQ29EVit1LjMzQTZAJTJSPSxEenZ6Lm1BXVJEMFhbdG5CSTBXVjVibztKW0U2blFbOy4mTHYyVnBxJDV3fkIqejR0T3h1VHJjdz09dSsyUCRANjgiN1glZnssPDlWZzp5bSlpNzxmeT4laDM/RUBdWEp6OXVpWCZqTGdDbk5NX2tuXjhfSC8zSzEvKDsm''@;'; put 'put ''fnYhMSE5ZkYzdmUyMiMpTGE+Im18bjgoKFM0S0Z3IThQR3lycVU/T1AlLnQmMnY/Y0BCZ2xZbVMueDVJdXVeJS5TPiM7U2tPaV5KZGNKQTBiXlo9QUB+b0VTRCR+cjhHMkZEZlRQPzQ2K3BwQF8pPGhmMXZbaillPEh6T11rVig0UkgkJTdxZGwxYVQocWxiRDx+UDZSRGNiRWMreCl3WChQR1Ij''@;'; put 'put ''SFV6Q140LFEmdWN0bjB8RFYiQEt4clUlTXNxMHd6dDFkI1BBMD5ue3VTKUNEZ3RPWVNGaTl4JGxQLjc+Z1kwRGR1RU4mPkopNnl4S0YpSHB+VCs0Xn0yRDgmRHNaYmtbO3Q2MjxBOHRdXkxld2l5LCpncWBRIUswNGBGV3VuJlEwcCF8MFQ6e1s+Tz5aSls7aUUhWCx4RV5pUGkvSGNvMVdkXkNT''@;'; put 'put ''dEZWWk55RFE+WEx4XS8kUSMqXV04YTU5NzR+cCoyQDFsRzg+W053e3BxQTVHUDVETX0rW04/ci99NFYrR0leWT11Qz1WOFpUVHlXbGZoaVROejtBdy84fC5tYkBmZHpAQGt+IylzSDpTYSlpIk9EfDZzV2F5ZHF0SlQrKTRpdC9SLm9+eVlWfTdea1RzKSFMbEgucE9fPWY6NU81UylzKSwoWUQo''@;'; put 'put ''VV5VPmtCbXtvRzwsIU9+W1o3KytUeE87akx0VkAzdmh5KkpBYUNnSFltV1lHPUlTJklMNS4lX2cpM2s2WkBFMV88SFhzeUZjTk1tIzV3LkFAL01UJmUvYUZ+R1Z1bGlxZ0lIdU9iTT5ZOFpOKj9bQWlIdzMiYCI2PEpsKDNtNy5zU3N4eyx7Vz55Xn1ybT8oNkthQEVvL15PRFtaRVVGfFo5cjQ4''@;'; put 'put ''Wn1hIXRibz1ZIV1jUlJkMlVhVjwzbiUzelBXRiVqdFQ1eGB3cEtkQDxFQDVFM1RmUmc9diZtcjdbRTdkVGlQLyJdS0AiSkBURnF9Mm5HSDVEPFZpPDlOdDBydlF7TyVgeVF2YlRXQDA5fHJVV0NbaGBKQFQmXjovKyZKcUl6dl1CRyI/NUA3KUszVnZYJDNVJko9M1BOd09ydiFiOFY3N09Id1ty''@;'; put 'put ''VWhGeDp8b0gsLEVYSjIpQWFRXnFOYTFQZnE6OXhkMzN4dTBXPmBxKFssdVd9MFFMeF1VTltUUkk1KDB7cTY5fG1mQFBzR31qLCk2ST0yfGJmNTVKclRTVEcwK3RVZVk7SUpBQFFpRHYoK3U4RlFPZ2NtITE1R0V0NlF0RHRkfEZRaWohWlIwKjY+eW1SQU1DQUFBQUFBQUFBJEFOSiJ7SnRmckds''@;'; put 'put ''NUh9TmBqQmk4e0phfjQ6YEwoJSRfSWRDSU5WRGRmX2VpVC5hR1oyMnB+d09zWDg3ZkNDbVdjTmtHYThSLzluRVhyZTQ+enQmJWwkNmZbYi5YSzlpLmA3Z3h2YkhLVF8maVR5V1dgaVNbNG1TaVlDbWFtN2FOeX15P0hOMCY/eDQ7Z1dRZX5vXXN8a0pWbG03UWgqWmlaUz5TOStWcE18UFBaS1ds''@;'; put 'put ''JFcxY2oiLGFSJiZPTSoyez9kNGJATHhgOltmSThCbXtEM3xVKzIhXU5KV2pWYWhCNjZgOXFsYyFNVVtrSE9YOSYzWWtAJHoiW2lHOHFRPmU7azlyU1lyK0RZWT8vKTFEWmRVMj49UillIzN4VEM6PCgqZEVCaGlASj5bZj9feWtaMyY4Z1cqZV1yMV8kT2JmSy9AQjJGbUhia3doTWJ4NV9AMiNz''@;'; put 'put ''TStocm1HcGBiI2ZjfjFWMm9hcSt2WHFXRVFmRF51SlNxcXdlUixzV3IyTDZmKEVxdEt7YSo6Knd4IyJ6OWRBWCJ2e3xATW9+ZWoiX30+R1dvUStPd3U0azYlZDBjbCYzQEoob31PVXhve1s4ekd7Pk5mY2wrdltrWTJvVXtAUFdKeFU/cC9HMllCXzRYbU5mXVMicT04UUpHbTAxWUFtaGtpIz8h''@;'; put 'put ''TCkhIk1wTDxAW206OEcze2I0Un1WY1k0OCtzKSNhJFN0QTpnLGleI19bT1FLNVRGezRzfE5baml6b3RBL00hTUJEZ10qZmU6Q283fDxCcFE+PF59dHJGcWA2KkArcFE4fWtDO1E6PEt5LnBvXilLeSVzSmosImFYMTlYMSleQHdqMEt0U10lVylYZiFmUUBheXY5fS87dT5sXyEqR1skUEg1QlZ9''@;'; put 'put ''IU5mckRILDBiLyRGU3hJXyxgNkVLclNhTitmRkp8Rjg1UG5yL2RCWylZLmM0VXdWckRUa3UiQiNuQl9ieGVHRDBQSGVvJnBdc1V+U14re2RGRk0hRzIyangqKWJveEJqWlBEXnxsSyJdTGZBWFhYJF9rS018amxAI2kqK0E1QnB9PjNOPW0lejV1dnJkKTF3VCpuWWhPWSElMmluKVY3XWt8V3JX''@;'; put 'put ''RSwhVkpIbjNJRD86aVh6eiRfMGtIM1Vtd3IqNktEZH4lWy4pcEY1XVkoR1UkdV19LjpPY1lhbDJ8TVYrTlcwPF4yMzh6cFBEWGo6RSRLdSZMMEIlL281NkJhQix9MkEwZ2JxRT1je0BNMktaNEpHbHo8SyN2RD9RQ1BFK1ZrO1hzIT9wfSJ8JSRIaHgjeVliLF5xPi5gSUIiVDYjMGYuanVraU83''@;'; put 'put ''RHZZMEVjbEBobU5yOFtUfndWeCNXc3dDPHsvXl9+eGs1e1BkeUo6M0VvNUtUZUlrbUF7TTRfPH1jTH08bnQpdlhrNlgyd1lbJWhuNGRGWlJ9QyZfVkA0V0AqUlNJZFE+elsyWzBDM3xsSG5KW3Y9RW4/cixsSzFBa29XPEN9czgle3g+ZyR9KTtDaDJfeDFYbkNSaGVzdnNMR2JYdCZLIi9iaS5L''@;'; put 'put ''IXlaL250ZyJrZTZDITFCYWh7RCI9cSMxVHtqe1lWSGI4K2k5UUB2ezs2YGFJXWJQQ250L3ZWRDV8ZythOUV7ODA+bEEqKlZWdkl4XyxZWzt1K0xRW3dWdS8qd01SMEBfYFtCdjBAJkhvfVE/XUNuYHFsa2I3eE44PVcoNGNRXyIvdiNTcWkoU1M6JDkmSj8yUEM1P0BYPT5dSkNjemJ8bzsxS3Nj''@;'; put 'put ''WC9YeX4hJSNodHk0Jj9iK0E/V0dJfSFIOG5GXiwjKGNOZjB1N1JtSlYpQkdOajk7cEkmIyNUMVJ3K2dHa31Zc3VLfURLSFQ1QChZbk4lcSlzcmpnP3BpfU8pW1Eia15LQ3VPa0lmQTdFR15SYT94QVp+cTF5SD4qNFc7dmhtQGN9P2FTQW1OJSZQbUJmNFZwJk0sfm09KFs1bDFpTSpaa3ZSJkgq''@;'; put 'put ''OEQ4NzJzaTFwbTlGSDwvLHVZZk5nI248VjlYcjtZI0p8UGdxRWsyfShzXUNNOUxWSyJsUE9JRm5ZUiUkSDYzLFVJbH1KLmUqJSxdcyJ7ez5kZ1ovaEUsYWB4YUYpLHtCayFdTUVVZmptPHsxeGpdX3RCTFdGRDxQOnBYI3Q1MUtkN1sxX301Y3cwcmVIa2Y0NVleXUNiXnhMXzV9aDVGUzN9ZjNw''@;'; put 'put ''U1ckelR8ciVNPi84STxJdFdmMXxmLlguaGYzeS51aV9SdHp7Lm9sRU8vOF9CQGImSWF4US4vWF4uQUpod0Q3Til0SWVTQ2JdMVp7Uk1AKkpZT1kmO31wP3EkPFs/NH1nbSlsMl9zVElBPE5YcWo0TEN5aSJgIXlhKy9mU25MKFApaHJFfHIuKWdKUyh4SXdOIz1xeDtSYW1ZUC5jLlBfbDk2dzl8''@;'; put 'put ''emhOaG9YPjVGNT94RCMjdFN2ZmF8OGVtWkczN2M4JjJfMz99Wn4/QDUzdHNNc2h9PkZxNTpwLHdYTSoiO1NeZ0d7NkZyMWxBP05gNmppPkF1WlRmNG4/aDosRz9ULzRHaHFxTSNFPkNbWUdkXmEyYTtJc0UlNm8wKGA9d28pOEBOKGM4dnZ1PTFEPD0vWjY/U3R3NCZRQ1hwI0oiUXdXeXRUMmJh''@;'; put 'put ''JTtKenIjQGp3W0tkOV5aI0AlWkJxXnxzcjh8dEVwJVg6QmI2cE9pKj9oRjtBOFp3fmxVT2s8fGVjRDM+PklOdyI6JVFnQG1oUCkrVmN8ZFArYWAkcn1wNnp0Tmlnamx0dih8L0Q0b2EodFNERk0sUnlNQTVtREF9WF5IRjh2bmR4ZkRgK0BPLzhkPDtVQFh8MHRgSWVdOTlbflNgL3tbUG4iQTRl''@;'; put 'put ''VFkyXUclL3NqM2k0Ul9WTGhXcUVHXXcjUFshZlRZR1MjciNiXXpuQUc2IURiekYqOnNWL1ZKckJKSH4sSCJGNzt+L3prOXNUbz8sUT5+QSN2R21DUGZedUVWLi58PHJWazZnV00mRlU/ZiZ3fDspeXhKRGBvd30zRGRQQCNSWEokYSR+LG1aJEI5TitOaX5qSHM/cCIsPVNLTmk0MUx3W2EhMnYq''@;'; put 'put ''UWFPTDhFXlZsaVg7UiZ8N3omMlltREUhMHJ+Y3wwdihObmlvKHA3VnlnOjJkcklucHRaRVFNPj5yRHcqKUZdMG03YmduP0wlNCZVVnIrQVdDVSxLd2xjR3ErYW9BLy8jNHAjQ0xIcH4vRnBvZFRDe1pOPGpyOEZlbVNtKWRsOE1aWTAoUiFPMDVPIkF+OmpDSCtJVDVmP046O1Y1O2xPX35aQFYr''@;'; put 'put ''en5RKU93MVBWdllBVmAjbV8mUW9xckQuXTJxL1smQGB1PTJrdG5GWiYlNlFCRVJ+ZD0obVY3fk1sbD9Ncks6bXlWXU9QP0JuWzBtUj1hTkhtQHo+ITp6M0Mvfl8wJmZ8MnRBX0ByWy8+emN6I3FfPmN+e0pwY1g+SiJNYGg8U05hSEJ2UiQhMlQqMkhkSzxkdDFgTixgWU9DXyxmSklsXlA/ODBI''@;'; put 'put ''I1h5NkZ7ZCVqRV1MUWdQUUxTSGFFYlMqQFlRJEc+VkhTS2YuU1p3TExNKHQrMEIzb0h7azFtc34rOFRUPHYjQSwxRGxjRzgxWy9TUDMqSjBXJjUvYkZTJkh+S2poJV9AWyJ6Ulk5YzU3UkREK0krU1UjUG8vfnwwUUxxc3UiTU5IR1VTJlp4R11qZl8jdTtre2FKbEhVIkRfM3VdVkArLyJHP3NS''@;'; put 'put ''Ui42M258dWI1NmdQWiN0NjJUdG8jZDArb3EvZihaa1hENG84Ry9ZdnNkL2BoUnVZbGIkQ1c9ZHVmKnQ+bE8rJUgmaGh4R15KWnBMeExrc3wmMUEhcD14W2l8YSFkQWpSOT9leEpbX0VkNzR0Zm5uP3lEKXJLajVaLkJRdzpuOEd6bHVxR3Qpbz57Znc+KH0hNGgsfTFCIS58UHZkN0ROPG0uKWpH''@;'; put 'put ''QmV2WHJyTl06aUFxYH52L1UvZ2Y5IXMzXlRYQnRXNkhIdGlQT2BzJiUkLnxhWiN9YE9NKnVoLF9qXWsxYS5fck1seTJ7WFo0O1MuI0YyKEAzK1JHNm5CVyZpPj4zNjksdytDTltMLktLPEcxZFdeX1Q7PXJWO2V5M2FobC8iUj8mRT48Q1BPISp8JE4icUJdVlAleDdFfGNJWEs9Onp5VncubDlJ''@;'; put 'put ''cyVrJUlvWEdocEhMMHl4cnl2O1NGQCpLNEo7czYjQE5OcF97czExIiVlUGtbek5oOkQvZC9lSzE3UFY/QlUmWlA/UHdLaGVTJFt8KyxWYzRDfF9kYFZ2UTgpJWFTZSt+Syl8WD1wQnojd2dEJEB5KnJoQ21aSjhKSiF2XVF9aX5ydX5rZWpjIV0kZzZXY0VBNi99ND19Y0QqfSQrS28+L1YrQmt8''@;'; put 'put ''UH0oTGRCbWk8PihYKjAkT1lzNWZCXlF9I1hoMjwufnJwQGdwYWhdQSRLa0psfUYke199IUdFJV1hKk4qcVVTZV01NHB3QFN7VixeJDI2RHcvZ2lEYE48bWRqKzdSfm1ERnVuYnNJZDFnSmlSIkdtMns+Ym9lP0s3KWlwOmpBeiY2PlRiYEFsaDhVWXI/KDpxZX10KStyWndXJUhHLl5GZUEoP0Ej''@;'; put 'put ''ak9PdSpebWdCR1FSbSshZTgzeVdVeVZPTmorJjNGNSNHVkpqZGFzZjBJVFRXWGpfYUJpM2tCImdwbHh3IW1bYzgkRTdKInpQL0ZSKWc+R1ROLF48WEV2ODZGeUlPWWg6TngoVH1DSWpOOCRKZHt5NW5WXWNaQl1aT0E1Lj5LWVMuOmArZVh6KnlRS3RVW1p4Rlc+UTY0Z09GNV4pUDZjTWwzclF0''@;'; put 'put ''fTJNJXR6V2c2KHosQ2ltIk1UUSI8dW9ILkJrRnl1Wm0yQz9dTUp1bTN4PkNNdzMiSC9pTSQ1Li94ZVUpXjMzaXl4ZiZCR0AwKFUieGUrVzshZnlnc1JaJHYmVTFaSCRgVGE4JXNLaWN4ZHd5O2ZOd2FUcGAvTWxrNWQ9e0hoWCFsd0tiUnFeJCt2K197QDVifVdCSFdDRWFySVFDPX1eX3QjYmhR''@;'; put 'put ''N0k3OlR0QVR1SloxKkciS3YpJHJtInd1KEBXJFZNaWVUOCk6PChpfDpwaDgrZG5RcU5VWmYmdi9vRW5oe1ZXKSxKTG8oTWIjKkckZ0RASSlsP3VyLjosMDQmeHtBZH57KFRzNlU+KFUpVW5EcG1rSCQrI3w/TypjfEhJJW9HYj1lODlhU30sUnpYPmZ2bVN+RHEuUEJbJk9pQ2FXRSs2Tmk+R1Z6''@;'; put 'put ''Xkg5eiY6YjF7PX5MTlo+NlZWe0oqdEFDb2AsdXEqJVg3aT1uOVBKWFIzV0QpcmA6KVFfPVkoI0ZqRWxRXl9BcDxPIl9mRzslbkJ5aElFb1d4TVRqbWQzRGUoJSl7ZiVIOjU3OlVVSmFdbUdNSzVPZXB9MFI5KmhLSGVjQ0Bqaj9yS2FMX0thdVBzMG88cT5aTzMuY3xZfkdMKjdKcj1mMURVMXB2''@;'; put 'put ''fV81a0ROLDhZYHJvYntBdkdfSnBrWm5CaVhvQ0Q/YWxNIzkqT0B6VG5BVDYyLmhLIVtlU058Z04ySnZoUi9MJjI4Vz0wZWVpemg3SiMwSjwxfmpiKmhtOTliSkI2OCpYXUk2NTo3fElPUXFrbGVAUm9RcHE8eHo1SlAoc0ImfWNpTX1rNShYYzxXZkgrR3xTMDc5NGFgczg7XjlgdUZITDdGIVBW''@;'; put 'put ''YmY7dS9sV1cxREdDbUUiVVB8TT1kIXVLbVhvLlg/TlJFXlBwSzhAZDklU2ZEdmExOnYpYX5ydnZ1cHgyfE1gWkFAaG1nOiNSZzsmYkNVdXtqPiwjeTZlY3wsK1EqbV9PKHREa2QpUUpeVyl1KSljL3hOYFkwekFzc0ZzUzJySzRWOH1UNyJeVDdOd2l5JFU/cl5fV0FGd0YuQClybzs+RkpdInJ4''@;'; put 'put ''RmRbanBrazEuLFM8PkUkfSUzWnpLITQkVzxufm90ZTZAanNFQjFjfShBUGtiNkh1PmBkIixyc188a3JCP1Y1aC5oQ3cvP0VjUlokaHhkM0BBNSoiV1ZSOFNlWj1NUF1iW05TRUVOU1NbWjFNXXRscFdZbTQsfTBJPGQ3KlpfQEtEI0RxYE9gU0tqUCF6WVQhL0A2KWBlOXBoejBCZjNpQDY5MVV5''@;'; put 'put ''LkQiYTxmOVhUSGhUQUl+IiI3VCRzVksyeyJAWF1bNTxgRFFPR2EuWVc7fEkyTnszSSFdKnledUd4KSVMbF5jcntNM3YjfnoyLlAwRjhPfkhQaiZvJFVwMmNUJkBNVFVfcFQ5XyJPLmdGUUw6JGI0UTlwTm9UTmlSc3JfPklzel1yXVd9KXFvdz0+IUNAYXZNaDZXJSVaJFg1MGNHW35nR2tVWEVU''@;'; put 'put ''OXc1TWVXLklEJDp1KilxdnM7TW0xT09PSy89UXpvQ285SVJxeUMuKyt7ak9lTGFbK0EvdE5USSspV21AeSNuJVtTOE9vJlNiNGdtUjckIkh9bzclMGBlajtwbm41Qlg5SW82Ki84elNDenpoT2hTSTNwU1I2ZnddfngyLkowX0F+I00oYStNPV1hOWBLUjE0JjZ9KTZwTXVlflMyTkhkIUA1azI3''@;'; put 'put ''Qjs8Xl9RVzxGI0YvW3d9UWZxX35gbTM4MkQiQHwkSTZsdGRFY1pUUSJxND1nRU9tNlgxV1VGa0lYMHQqS3o4RkVMR0pIayl6ck4+I2VoOjlQbG5nI0wjJlM7UyJvdFJCVzJPeUlYOFl2Yih5RF85JG01VDFNa0svaCsrPEk9WEh8T2J0SUdpTzs+JllwJFk7Sm03L0p5QUZyYFtRPnlTdiJHWV5E''@;'; put 'put ''WEYwR2N0eFMqWXI/dCpScmF5aUomSE96P2dYYX42VzwxRV1vMUglYWYmUSlvTy97UDQjT2BLPjA6OD9EdVhsX2c0OG9wODpTQT03YlloczZieFMlJHw6PCtBPnpTWzA4LDp7dzd9PHpYNFJASjREbT9yKU0qfGQoJGgrcVs7fnBDMVlVbyY6azI6YSQhfkE9JDRjRygxeWU3an1lJUhGQSxhKV1n''@;'; put 'put ''cCsrInVvXUFKaVhaQFNnenY0QjY4dn11IWNIU0F4blVBW3lOI1svZS4qPj5gb2hwIkVGL3lLcmhAJn0/NG9kS1ojIShQOnViVCR0NElYMEYqJSI7WmNYPjRsaUBzZyxtPCFuWWB1djZ4XSMrUkglWEIkL3FNY2NTWGdTS293bHRSYCsvTFd5TmJENnUheHdoRTd3Tm4+PVtlPHwuKyUiaWFaKCk+''@;'; put 'put ''T1lHRVhQWStIOUdgdWtTKlVFe3Ihc2ErQ2R5Z0I3PFUjOFN+JnglSkRnOlRrSWp3Vi9sUyx+V3IzNypaNixmUjZBS2A0Nz57d011TWVebnd4b2JOVko+U2pqT2JNOjp+cnJdRktefSsxYz1SOSx4Q3xBbSREQDx6Qz1SOk1AM04lbGBSLmRbSj4oNWpKZns1O3lxPzB6aG5gREY/X3shfSFxbFN7''@;'; put 'put ''REdlRj5vbU9zeip2V0pIekAsaW4pOH1oP1QsSURDUklxc2wyLk9tXzswI3ZmMjt4KEA/cXFoXzBLRmtLLjYvYlBGZjd9PlI3d293fGVzVVJrTH5xWnVKNVtHfjJ9RGsoWDY4MlRsT35fQHl1fFVSR3Ixczc9MHcwI3xldFdkUChIeUM2ZnFQLDBvK2RSY0FXYitdVipxaEA6JHZaeXRdQmlgPUZA''@;'; put 'put ''Uz1+M0p3c0ZhPChtZ30mVH5FbD9FS2xeL2MscnY4dDZTb1Z0M1BYIil7M0k4ezZ0WHY5QG9rbGlqMDNWXyVbSUdFPXd0eD9uU3x5R2YuSnUkP1pbOV9fPG9GdFVPK2t3enlSVDRoUU1xY0syZEVVQW50XW81QGM+eU98ZUxJSy4la1tSLDBwM3kuViw1QGBMVz1TbiFZT256JGYwbiZecmhzWTl6''@;'; put 'put ''dWZ+Kn0/V293P2JvZDVBc3cwO3J2OWhubVBXIWgiRTlydkpbO302eGJ9P2dxKj1tX2Z8JXlYMjE9YjQ6M0AyYlRja099MW8pJVdMdWE9MW5+IX0+ezlnWSsyaXElJUQve1A4OWZHM0B0cGtbUSwrREsqQFhBTSFFTkRJdUh7dk1wU31NNVo3cH0vTWA/Z1dLX2NPUEF6al8/NDBuYElebDVuKlU3''@;'; put 'put ''T3Y5ZytPdlhlOng2e3FWPVVSaS9edkh0Yk1sei9YKjNqJCVgMDBHVilST2h+djlTKzYqNiVZTnVIeX5CJFNXaCo9OX18Vl1nbmU+NHVJeDRPIko1KElKWC87R2l0Mzd4fHtLNU5wPSgqX1kiV2ZgYn1DKjIrPCUvSClofi5KaTZvdTNpYSF7TGApdF1yM2dILCxlRnpqUXByTE1IW2w6OGFPfTQ4''@;'; put 'put ''QWQ9dEhUSl1vQ351WXpVVD02JWA+L09XIyoyUlNGJWE5YSJvKzYsQC54ezB3LE1WKFNIcHdnPDQuIyRfNUpaWVJBS2BAakdRZ2V+NkhxaX5ufWdZfjl5Jj1HL19tSEd3RVt+WyVvY0hzSmpLeUV8QyMjT1IjMHVXNCQ1eGZzO1ouMT4qMmV8I147TkljUypSdjNMQjB9JT5hPiRIKXI9MXVdJnci''@;'; put 'put ''LngoM3pOZE48dFB1czAiX1ZpTSsqaHMhfHdFIWVqNHFud1Z0WlpwJldfUSVwJUh1OXI3c2gsLi5KPCRhXmU8clJaPnBWOmUjMz1jPT88SyhvKi96NXtAVyNkOlsuMTpwT0w6a0hRTTI6eiN0JExeI0pOJGgzX1YmTm5bPnFCJGBHfko9MEw5XW5QdD5QbFBAZF5Wc2tqdjpeIlo5c1FdLHR5YCFC''@;'; put 'put ''OkgpPHZ9TGEqUj8uRnAqLkxyQXQ5fTY2fk1Acz5KYVYsRD5AV212YGFZRi5jV3tDfTxvR0oiPURqbHlmJklaPmF6c30kIl5LVTE8MHooSyp+bCNJbl5UeUo8RUAiSGNCc3cueEh4ZWZdXmduW2xEY0Q3Q1tXKkVWVy9QcGN8e3RBJk1AOj80aldlUWR4cWF5c0czQ25EYDw6XTpDcU5dfnI5OTZ0''@;'; put 'put ''R0Y+X2YwT01vTyFebU1BKTV2bTw7RjwzWHY5RSQrRjwiTCI/eUZyQF0hJS5wZ3IpNmp2b2taUSw1P3xkdWFaWD4kV09DZHVNaUpyKl9LeFI/WnNlVTc2JSkuK3MqPml9WjM9XXM/QTFTQi47XyV9KyYwcDkwZWl2QFJ3UTorVldCOyNfQzpFL31rNk8sK0N2byg8XSw/NUcrfTs3aHRPX0RGdCRE''@;'; put 'put ''OXkxMTxAajhhODNGQThQaCU4Z0BeJSowVFh8M2VSTmJFSCpJOD8+W159RzVwYlUkelQ3fHttQn5WcktjakBgO04/U3xaT3tEO1ldMyliZyJSTj4qMkhOdk10QklxKWRXWTF0NGJqVTQ9TUNGbyNXRkVxIV1tNDErdT9WaktISFhyVjBUe2AvYEt5eGVGdmV0R3Y7WzdjclVFPU5sJTY8Zy9jKmlC''@;'; put 'put ''Y2trdHByI0Z0VXp1a311a0dNSCElcndAcEBDIXklLlVGMH5qZTY9NEcsN2RtdmAuKyMsO3lMMDQiVk4vLF9pQW9DIltodSF+KGVVKzo+bj5gbWxxeF9bM2JMPzlAamVObVV1O1VhKUBed309LF9xUSRka3A0SSJ0KW40endxcS8yRj5LRmVBe2R6NmBQcjFRLk8qdEU1cmZaRFQvJipBP1NkQXFR''@;'; put 'put ''XUA2UjQ1OFBDcS8sWVhKW2VhUl0zR2Y1e15hWmx8aH0od3t1OW0/ZGh+QlRHVVgxSS9UIXkyRUp9ZkZWWX4qNSU9elVmRys5SVcsQHx5eDRNUCRNcD86JV9eOD9DRlI5KmdIUWg3IyxlQDBqNW57KUJhI3l7NE1wdGIqIlhGOyh7SV9gQFheLi5wb1cmUHpwezxRWH43KDAoRV5ldzQlIlRsd152''@;'; put 'put ''UEF3KnUiVDFVNS5QZTU5UVhYQjJAN0N5cFlfeUJYPFNLXjJvNGNlTXRnVncsW2JIdlFheTckMiloImk0RXRQS0lDKnAqaEl5dkUoXjFQUm9nXVdMRz89LnZ0SSVKTEwrLnpFZHhaK1t2cTJjSVsvWGNZTWBFWi4jZzlDcDszbVcxd3JWKCheTCV+TktDUiE8LyYyS0l4cmU1SEY1OjBISDN5eiJB''@;'; put 'put ''Wlg6dkhhYHo2NDFLJTksUkJ2X3RWLD8jWyRdPUwyem5kUk94OHhqUnwsTTMpQlhiM2A1TDllNC5gOlU4QGY/Rm9Pdjh2KWkxLlErPzpEN15rUFtpRl9dQlk1UmNGaD17bW5DWDBtW2xWUFs0KmlvRFlLVXZ2T0loWUJ1YnBvWmNobGJ3LGV0eUYoUG1KenxKMyxMVUEzTVR1PW97NnEoL3M9SHtP''@;'; put 'put ''Jkh7VmAhN29GME83O2pkQyxlckJPJmtoIyNUdUR2X3lVQDoyVnhVOCFjS1JFNDNOJUtIRmBFemZSaGdTdkk6Iz82dXdUWGt3ZjdBby9BbCpYdi4hbGpncV5EMkQlPng6NEpQXTMkXXdlIVg/LlJzM10xaEo4d1gkY1BLYFJ8dlBJOmlPL2s5OjB0K3ZZI0xadF5VIzxqanVYdDU0JS8qI08+bjAm''@;'; put 'put ''RzROL08pKT5mbSZ3ZkpqVyRSbktlZ0FtOkNPb3ImUExCcygoQVQ+eFt1YCU1ISViJGdKeHdKe01TfH0mY0hAL2F+ISs6P094bmNnZXQhdFQ9NE1IOyx4Vy5HdHVMW3FlVk84MUp+VGZnY2ZBfDQqbjdmNFhrYl5UTVd0OiY/Y0xsMkJNOz90JiNPRW5VLFJaej16YGAqRT5IKHdFNGN6fEAkUFBK''@;'; put 'put ''bzNec198Q3skWTQ/SFNpR0VdI2VSWzdULFReciZ0TXV1VFo0S28qYERKMEslOCRYWCpgdlt6Sl94RyFGWWQ5VjtvRnZbWlphcCNUS2NZSHo8UzgxUyF0Kl09TXwjL3JgNDhDITxMREcyQkRwMSt4UnRfNjwuN0VYJmo2W21LLHJgVmFCaTo/MzdXW3JRbChzSktyLDg6LGBNRzoxJGhLYV8hSTg4''@;'; put 'put ''RlE1YVlDfl5MK0QreyVjQ2FiR1E4RzBpX1lvXjlHPH0iVH5QbzllcCl0dW18dS4wW1QobSVKLGZMdW90SFd0T2hSbjx6b0MyIWFIR3N8InFSY3dEcC80WkJbN24xZjlNYXZUekxZeEoiKHU/ZjZgWlMjRWw+OTJoeVZoTyNYImI2UWFJWnlfM1JNNEI8Tk54NF9AKHxwPDxZPndrNCkrRjtxOGp7''@;'; put 'put ''Pm9ZWCw7VFhhRyFDcCFVMko0JkExTFtpRCtGeX5vUXlwWT9deUVyUyw1flFgSllJLyRBVCpsOzdhcyFKO04sUF5uMi5bZHs3b2hsKElWUE96Rlcsfk8jfGdmMT9bbnRuWGldZVhYTGFZamBCUWxYcEZQSXRlXVReYH5MJl48aHheVHw7S302cFc8KWtSSTxFZ2RFN1leWmhPXz4zY0pwODA7ai8j''@;'; put 'put ''QEQ1YHB6VD89Vk0xYWFHT1spUzhKK196O257Jj1FPVBMJlIoKzdiKnF2a1VmKUJ+JHdCMEt5I0NaU0BbK0tHVV1gdFsvLHZrP0AuXypjOHdadSYvdTFnPlJab0BNISxrXkMoOk5RIWIsZE9NYWZebDVRdHY0Kj8/LkoyKSh5cWIiYjEidlAkUSpkcU9xempUOEs1LGRrOy58bnQhZVNKVFVaTjA+''@;'; put 'put ''Yll0b0NAT1pFVyVPOnAjJFo+RGpKSmcufjg3aVJqNVR+R0VGUFdrO01FayV1eV8vU0phPFFdRzx6STBxYCZSX0YhQElTWSEvUzU1XyJUa0AvVlAhRlRpKUR6LmVDaipJZSN6WTUvNXs9S2VTLkZxPjFbUDAidjdAOE0vIkdwfFJ8Q2R3QFRCYXxLL2lLR0svVEZ4Z11FfTZ8bVUvdDFQXkpXfCN5''@;'; put 'put ''Ll1zJEREciMqWTwrd2xUSF5IOWBNLCVndjRAYytBRmdDfX5uMWIjcCJNaCtNc2tZaDgrfC9PS25BOkt8XSlWfHlVfjomN0VyaylENkhNPnF5WEdSZC9NU3VyOU06dVZkOGVxZm47IWhxSjAzfmdfbVBYcnpjfGV9JjhtTj9kXjRkWmkqcXoqL0QoLzEvOTQsP352P2VvJnltPW9aVmRRaXorZ198''@;'; put 'put ''RDZuSFo9fjtLPEkrLix3aSVHTVhzQD95MCtqYEssblg8L0BIYi9kI3gpJXFnNzZKJm9Md3E4dSxgOnRfMykwejJQWiMrOWVYMipkezJFb05GMzBQaHQocm9RfSp8PzArWSxjP1Y9aTFfRmdxWkU9X1NIYHtYUi5GO2hxPEY6JE87XkU/eVsvZFB0S2chWlk5SE9GUzhzVTw5Uzg4WjUsMipgN1Zx''@;'; put 'put ''ajdmTlchc3lKekVnb19PTktDZzYuYkVIWjI+T3t1WHt3eG5JIT5eX3k7bklzMmFLSGtdWCZ2PTgxV3F8WlJANzpgJFZuOXJPQWM7I0FYaHAkIVteO3lBQC8uKGVxbkw1Kk5gcS9ZLygydFsxb30mNkwiPV9TWXRqQTk+LGFNQ0RsSWx3JEoiWXdYVk4vQVFKP2tgVCxPZmo+bTFOZVNZNTo4RzdN''@;'; put 'put ''ZiN+MEJqfVFHVT4jOSksdXgiTX5ZUFpTTm4heWw6ezosQEdsRSVfSUBIbDlIZD48RCEka3EpIz5xXVh7LlYlIzJGSyE0UGE3b3U7an1SZWovdEwhdkdPYmBpXy5MaVNhQjpvMj1VWDd0b3I7W1hkUSYyZD5qMCRFInYkZTx1LkFafWxxYjE1V0xxQTpDP2B3UztDWG9INz8jW3lDWW1NWWtdeXY6''@;'; put 'put ''ZXIpXjYkTDh0LF8sJTk5fSlnKkZLOnpFcyhiTFN7L11Sa2dSLytFQVd+X2x0eHdwfVVjTyl9cm5uLFZYLDYjZXZWMUduP31xbnFoZUdQJT9ASn4rPCM3YmhqRntBQ3Q/X0V6M0s8Jmw/TXA2b0RfZEFPaHBUOClPPlVTXzl8KClsUmRJO0JSPX5KckYqOExyMHUzbEJUOUhtOldNZGxGRl18PH4y''@;'; put 'put ''SiU9Znhpel58W31iQ3BlNV8rUUMvS1pMe1tLSXUxLHB0b1heLzZxQXohTjBsO0NyTjtAezg6cVBCSi5AJE0rOTJMM3A7Qjxka2BSbXhNYzl+cmc7PUdFWD9oYnJrOlRTVWFvZklaUSZLU112Wk1TNjFwW1lnNnZGIW1wRldMaWVVeDBIZTB2a2NQJTpjQUhPK05kUTpGSEJ+cV8+VSZbNFpvXj0k''@;'; put 'put ''TkNYTlEheEYuUEU5LGtDJk9WWCMib0EiJW9wfCYjLG5rJCt8WkErYSV+NXFxJFM3bFpNIjFiaz16NDpsQTFAOWtQfmxDI1U7I2xqJHNSdzVkaDM0Klk5T1ZTOXQ7Vi9VXTN2cD1DdCh6QmtWJUpWYTx7Kl5gdFsvLkNdbGtGRXBiNWV9SiwwMjJrLnV6flYpUDspa0pqSCVyXzNxTl81PltWZ1pm''@;'; put 'put ''T2p6aT9kd2NeI0BnO1J0PHNNV09nfChKalFjcjwmRjB8Ny5eIi5HQkRvZ2NxZW1HLFdUdmBrNzE1KmZYPVRKPCNEMmFaTSx0QjNWc1N+TmN5LmFVUVM3Tkt5aiM+OjFXJi8jO21lTGc1S3dMLz5dWiVbbT1MZGk/RzFGa2g5dGRvKnl5P3JaO2poQzIsR2RqMSRCKk5iNnF1OW52aWIxbVNpL0JN''@;'; put 'put ''JUYuUWg6WDxkW1c0MDcwKmxTOTNHNDxINDFObX5OO31HeDszNzVaeFhkWzUyKWorKF17Tks/N0QoQSp3Ny5CO2VPWDdeeGtZeWF2eGxSKyhWPls9LmlYK2BKQDwkL1cuLmBya0xuPzU6WHE+fT4vdUcxcXEiVkAhZCpbMGw3dVIxSzNbSTQ9KCZWOiQ+RSRAclI6cipAaldCfmJxSjcpUnxaOmh1''@;'; put 'put ''OF8qUyNVQWBEdDxUUXVrPCJ8MFpjc2FYTUgyZHVkTChHcnFJJkYqLENNKTddTGZQRWlYKTxpeVMkQT1JYls1Y1E1SUNCWnBAO2MkSEQjLz5VS0BnYG9gNlJMY1V7U1N0NTd5Xi55U1s2ZjZJZ2F4Wit1XkdQSG42O3lrLENKLnR+TkplcE5WXyo/OGloO1taeCtjfkZvUFl1QWRqKDs0K0tGeGR5''@;'; put 'put ''PWgxISN0SVg5S2lsN2k2PDdxTEw2blFBWU99PUY4YmJ1MEdJcEBfUFA7P2Jhc1R2IkdWXXo1Z289akcsaiVqVTQ6VEQlYjNCTUhSKlBgYExAak8oPi5WXS9dP3w9Nz18VEhAOUhoa305RXZfQkYmZUh5cSZIYDM2K3xUOypsNE5YIzxDTD0jcSlzPTQuRUw4S14kaXgwWSZjYUV0dCR9JUEsUm9J''@;'; put 'put ''a0EkUl5beURdKXVFKTJtXnFoNyxsYVpfJU53TzpVUnhEV1NhPF1TIlolX0F0WEg2bl5hcDttamVyNmFWai9sfDxzb1hdQix5SiRQLFJde1IjRms2W1EoRlRZV2dGVEJ0dGJGa0whbDtpV0JaS35+bi9gODhmM1NhTX1iajlYITc8eDJSeStjQzolantkRGFYPmQqd3RQRyI8K31hYTpxWyRmOXNZ''@;'; put 'put ''N0FsITclKigxJD14PXpBdSZeIiRCLjNWW2B2SiwjKV9GI0IvXyMiZFt5aWJsN0g2YDRXOVQhbj5ga1Y0PF0yRCR0KDZkLGdCUD5BOUg8TWRTaDpnbFtrLEJbcCZEd18mOHd0VTghOloiZTIle1d6MUNNWmxgVHxQblBNYDhHJF0mUzp0LE8qOjB6VE83KE5QcXFXS1FqZE5qQDZtY1UoZElAd0xN''@;'; put 'put ''UT5ELi98Nl5Ocnh5Nnkoc14+PX5vS2V6Y0YxXXpaQ2hRSyVBIn1xPH5sYF1RZyJoUzdSb05ZSHlUWGl3IXx9cHl4cSUoZnZsJTI7JTc+WjhneHV1b0JiImNRN2N4bCFQImYrPyF+dmo8d15zTldrZTZ1V1ZHQFNILENud2oqXVtIeHZ3dT5edF9SOEFOUXdROiIzNXlkX0Q4QGRgKTsxV2FMZitK''@;'; put 'put ''NCwhb0g2NCVwWFFKMylGbzZTPWssY3ZOLCNafm1VYypFM19LVFBQZGttRmYlPysrNnZidFRRLzwkc05BYXIhbS4mZnhMN1tzbzBnakYwQlNseEFyO2pKZnN7ZX0oYXpCKT9McDJGUl9nXj9TJjchNSEsTSMxYGt5OEVQJUtJez00TEpNWSE1O2B5PDEldCgvcC9mO0RKL0Y2fkwoSS8zKDN3e1th''@;'; put 'put ''Y3c3ezdoSFsyKm0+enhsbyRtNEghPEokJXpxZjIjKlhUR0R3XSt6dyEjNz94eyRZXjAqOjh2WnNBZXtZYU92ZSY1dj86fVNKVXdFVlo7d0lDeWgjNnxISCYsWyl0eiwkQzhZJC83ZkhbfnhkemJXR2ZlUjNfJHp6aHNJNykuKGVLR3EvXkRmc2xlWVtmTy9YR3FVSiVpTVEpPnJaKW18TUZlOStI''@;'; put 'put ''b316PjJFInksRDw5WmR8PV0zbDNdfF90PjtJUGNUVUdWYiUrTHtuYkVuZE1DJWt0JmFeUmVvd0djdnpUM18yQk1XMl57R0ptRFBsJkVPKksiRS9USVZyKHdCYEx7bWUwLm5fSEtiUW44YHhDMXUvezVpS0UmbilVTWAmJlB0P0IpRlB1JmYhLFl2NDVAfWpPfFk3Qi9FPVd4YS5hNmtWbXY3Rn5d''@;'; put 'put ''SnZaZUxMVksuZG5VZ316YmdqOl5HQmE0ekpqc2NbeyVgSUBTeTM0c2hfS1o7VXp3UHp7XS9VW2FIT312VElUP2Q8XUFYaVVlLEN7QUI7NGZ4VjllRjJ3S2ZlOEtrP3U4IWo1diNJcHp8LCJlSHtIb2p3YCQ8OmQ/WjlPQFsyYmNLZHdYRWp4Yno/XldWelpPLFg7MHBaLlhwTiJ9TClXKm0wXWVw''@;'; put 'put ''dVJaKHNAND0xZkN0fSxkN2JHSn5vX1IkTmVGYVsoPW5nU0Ikd2VMdnkzS2ZyaGJ6aEw4IXpIJXtGSz9ocHRMJkhSPi88UFdadUl6JjNHKDVwPWxAPkNsVSxOWTBCR1M5ZlV6V0JMQmokI3che2ZbcCZrISQrW1UmOnVIWDZsWFBqUktKW3Z8d0o0PERtS01Nck1jaDE6STcpPyRuVjA4VDFadE9W''@;'; put 'put ''SlVfZ3RpPFpXbzQ3TzBEaGluSTBbOVovaS5JKy90ZzcveTQsXTJfbV8yX3tXI3NtNzdMXzQzU306LGxZdWckZG9yOVYpaUJwYG01OG9OXXBqIjcrV3FALlFYKkxpXyZvYjsmTl1uL0JHPHt3bSt7cyVTZ0tBVE1LXTxWfUd9bEtQWVZ8KHVtX0ZHOWxiRGZqVz9BN3UqPWdWRks+IjszdEkyb29n''@;'; put 'put ''Rj87LiVDYVpSYjBuOGREfTQuRUMyTiNvUG17cyZZQTw4JTImOE02IyIyVWVpUXwyOkt5MC9WM11pWHc2NmN3RzxucSx7Zm51KGtmO2dtRHRBdF9HUD1hV35GVDFual47WFFmQy9ZdVAsXTswaC9YUHBzInJnSThHIk92VHY3KiZHWXBnKTZ8fSkuXTMzYkZ4fTwuaWQjXn1aMFd0Sm4oW0lpbmwh''@;'; put 'put ''PnRpZlhacXQvUCl1a1gsZ2UjRWY2NzFoemNSQ1BJI1Q1VztmfGNoVG9ubmFPVFlddCU2cUg0fVNvKURrL0BCTUtoR3pdMWhaYShvcUE4bUFxVjhVUShvPixuPHV2LzEuPDpmVGspPzVxKEJ3d05OOzE3ay95enZEIWZNdTA6fDpoQUdGfSR1N3UmaEJ6ZVVuaHU7WiQ8aUJEeUo+TVd2I1A2ciY5''@;'; put 'put ''M3dMWVNbTURfM1ZbVUIqM3pTUltkJlU6XVh7cHl7Smt7Ml48VmhsJHJCdjozQUc/L2BQfXB8IXA9Tz49ZHN8aC4+dE1sNTxEdiMyTzFdJEx5e3x4Pl40UE1DQG1eNiI9VWMuNntebzJSR1J8Vypid1E9VVhQR15SMEFIMV05Vm11UDFKc3VoWnw1O0BVSSFpJlAwNlY+VEJORWZrSU0lejZ2fW0l''@;'; put 'put ''PUZYMigyOzNSLyxLV11deyYjLCtLeDVUKz5hTXMlYXF6THpoXnR4QW04QTI1VSRWbGtafGx5YntxSFErOzc2RG9udWczNC9bYz1fXSFDMklaZ3NQPyM4OnUkdVZiIVtpYVFwbCYua2FJfnRneTQlRGsmMnpWV3wmWFtPYjRzM0gqMzhaMHs+TCgsRllgSnJ9JXpiZCVSImFyVk1TYVJ+QC42YCV3''@;'; put 'put ''e1o2KE5oSEY8JDkuNH1PJEFFJG1GZDcpPStbUXFMeCRmejE7MH5gJTlEZEtIJVJSa1ZDXiFnYElUX1RzcFRgMyhAVC9UdEg/ZSN3OUAoVUkjMVpzeE1oR11nNlEqdWFHRW1wfl18JHFoeClVfTNQbjtqSXl6SCJYY2p5b3ptNk9AfURGX2tzQlZCMVFNNzZBeSU8aFBVdFN7LzB5QzRASX5YWDFk''@;'; put 'put ''RjcpdmxpNGwjU1FWbGMsV31eX1pZRV97RGxtdjc+Q0Y3SHFZMC9mMndoXmBjRE1sRHRZNEh8TTNRMitDQnxFMDVtRld9fiZ0UURLXXFgV21fa2A6ND1yL2RgWitdODd1LilAR1kvZD4mUVBIS2VYTyxqMUZMbk12eG1TSG1ZfnEpUGdJSl50dFgzPVJofU4qQj1Kak5pJCt2KGdbPjAvOkldJSZS''@;'; put 'put ''ZDR1UEspZWNyfnY0WSpLZkNPUCNeZn5HZS9OUWRQN09tI3RNRSFEaEU1T29wQUYqeUk+QGo9JEpAUyRmRkYyMHAxdz5rSTpxZ0pHPkJvN2oqeWteJF1tTUJQeGczV3RfPXR+WXF7Qnc6dUh+QW5FKiRKfWxYS21EcnYzUTxGK3IiN2FCOkwoMGJGQmA2ciJJfH5IYT0rOH1jSEpQdmBhVUIyNEZl''@;'; put 'put ''I0xJYThHOEIsbFkzeFpabzplQjhQSXYmSzklaSwkV2NiOipLPEdaLGlgNlFjLytdaHZIWWc7Ly84WHpRMHFPR3p5b05fWyZlPEBeb05rRlAjbVoqTGt7Rnp4OGRlNF87QS89YzwyekpSZCY5SXBFbk8uRFpgcENod3tdbXQlUX5fcyR1NjtIZUAwb3omNUBRTTRZYXF8QmAmO182PksqVXBvQ3Ba''@;'; put 'put ''Ki9kbDNhMjpfd1FmT1M+aDdjT2Iic2JgLyg6XXdeTUMmZTA6bEhgSE9RUSlfdiZiPWNJOyx0cFtCVDA5VHZqeng5cjFlc096KWRmTWNhNkYrbkZQYFArZTd1cXs3NG1RLzxCXiJMW05xT3B4KGtMYk8jQ0lZWU1oQyZELE05W3YoIWVGanRHZzgwKXZQZVslVXY8Rys1cSlhLlkkIVtQX0NyUVZP''@;'; put 'put ''aV9LeCZKTWQqUi9oMlApO2NQclBxbF1OczxbRm9iSEUxVXo/YFklT2gqOzV8WlRifXBtfklvR1Y+Y1FsYX50KD4oKTcuJkI6UnFZYDxBQ05TJi9NfGZ8Ll5qJTwzWk5YN2dxQyNiQiM2WmkzazEpY24zLCM7I1BRJlgkRilVNzNDLm8hP1JjRSkvdGc6N1dwVE4oUCx2R1soTy5SLnU0TUVVcU1W''@;'; put 'put ''JGQsdzpkKDpHMWcjOkMybGJtMmBiYiN2aSpXU3BxM3sxaXdmMWoqbVF8P11IXyIpQXFyXmhMRmlYSWM8V2U6S3dAOT8qYXEqeDNjeU5XbVNsdFBDZHR4O15lX1dZVCYoJWVbMl8mb1tzIWB5SFhxOClGN0NoZ0g2QlMmQ05YZltwYjpDP253XU8sQ2Y8ZlJfeVBvMSZsNVFiU1tFRG8hSEBoVyo2''@;'; put 'put ''dlU3KjZdVDhZXjpEaihsUDBGRSFbbGQrTlZgP05HN0A/d1pmOmlWUlpsd2JjTXY1NGgjaVswKmgrJT1DVnBOUmhnbENNQ1I2OHd2YTEySUw3M1AoSC80WHEybGEhK3ZtOCl2dGokSSNfdDtncmBbeCtfeXs9eyV8fFl5KDlgRkhUdFZEUWwvSDtBS1I3dWJvfnowM1M0I18+ZHRiJTFFOnssfj9d''@;'; put 'put ''Zk9KSSwxMkdQJDAlSnlrJTQ8Sj5bTnwjbWAraHx0TVp6TGEqKCNwUTU/Yys7YDUxO2cjTTBHWGs+NCM7W1R6fCh4KFtRVSF2aGBBbV46aWpkdmhOez10I0BuPExxWn18YUQ9LDJGalZdLzwxeUcrU3xQemFqN0UxV2FHa3hoVkFgMjttTUgxcDp7X1QlfktKX2QrVElhcDJbQ09WfkRkPnhgRSl2''@;'; put 'put ''Q3pNKSxsUk5XUjUhJGVBM3UjezhAVGJ1IkI8XUQqZlRIMXBdKmk9TG42Z1RyYjY1YUJUN1ZoQkZ0QGJlTzZyMHNDTDlBJkdWbi9OYj4jUl8/MiUuN2t8ViQjcHx5M1d4aTtKZFtPc0FacVIoaXBnMDNgcllyQ3QhK3I/dUxDQzlpMU1CPmVCSHE7cGZZaTo4NEg3ZiNmNFt9PixGZE0qZnNgWlA0''@;'; put 'put ''PG98RzlfOj9vbnhqYD86OWJfcz1baHN2JTI1eldvZFl6P0ole1c2Ym4panREXyozdzM8b2xIOWI2O3Umd0BYWXQvN2ZHdyIhdVB2cX1uSTJydj1eenprTCYue2BafTxNVUlXV3t5IzQwSSsmdWVYWWlhK2B5Z2c6Ql1GWzAvO1JYe1QrW2xobnlDbTZ+fEZmLi5LbjBlemorKyUsW1N6eEJyQjg/''@;'; put 'put ''fEdGajR2KSFGTCgkbWpnLi9xTDl4Wn1UKzNUWzBBa1g7djhofTVTRi9LYjBPdz5jfjl0OCtJQ1R5S0xdMGZRfnx2W1dfZF11TH5VWipCemg+SW1FMEFQfn5YPFZiRjBHc0dsSEVuOytpKlVHRGM5cClgVllkd01GVU16IWt2fGlPW0l7aGF7djEwZH1dZFZoKVF2a04odC8vVEZfb0BYfTA3W0V9''@;'; put 'put ''diQiNHFYXllKdyxjX0ElWHYyKlR2L01JQ3tIYFlFQVk9Lmg8cWVqS05MQnojZEJCQElhV08odkxeLy83UlEmK0hKIkVVMCxQNyl1OWh1Snl+NjJzaG0yMUNBN2dCK3hAeyhbPjBTLHRGbFJJRGI2SWVPPH44LDV1aWNnd3siPl4xVltjdHd0eU9fMG9kbT9JZ3FEYkh1Z1NgMzJUd09AYnBoSnBB''@;'; put 'put ''N2JVaVU8djMvMEdneDJkKGlVZFpBX3VlbWBjaUNfa2A3dUhsKzdbRC5McGtCYFtmNlBQViFCLlhAKlNURnhpfHE5K19QQzZBMztXPyxMQ2JrVmdyWTt1TjB+NlQpQiQ2akRQPXpuS0t6WyxUJiFRK1drKiU5YlRJMT1ZTVcpbSJASmVkZzZ8MUw/VHtvTVY2KlZpYUszdl1yUGNUTExrUmBaeyo7''@;'; put 'put ''Vlg4VUs1fkVIZzp1TWIkW3A0SkQyUEsqLD59QXBAMk04PnRULnlGUW9tYjE2WEhANyF1KTQjOFhKMFsjOEVaQlE/cjRAQEhkLGIxS3tqS1Jtam1KeSxqNkdDey4vKVFVYD5kfiopLndobTRtKUM5fDFMNH5mOXJoMzFXanZXUSs1Y1c3TmlpcyVTZUV0SjxwJHdBcFg0Z1RHX3VwVlVwUmxIPFZV''@;'; put 'put ''LEhzbCpgcHo7T3tuWk5JUXQlP2BRTEt1SjBlZnx2WFA4ODQiNFVTSDBDdWd1RnIqMGY+Z3s1bTk7cU9iLjxRem9Vd2pYK0BANCU/KHRLL3M2YSwkeSRke3tYTDZtIkNnIVVOWzkvRDg+W2dYSEh4UThUNDM3Oz5+VXReeUBsXlo2ZiIxLmp0R0ZXJDd9YChTIVJHJCVweHFPcSl4V0xiL1hoSi41''@;'; put 'put ''YSNleVRfdzUmZDpbcCNhUHhZeEk5dmNHKG5lLHwsdT9CUX5yfSp2dH1MOis1ZGJDbEVPZiY4eyZXNHh6V31IRWA5LH45OHQ/VHpCSXlrfHYlVUMlWSx4eTQ0PChePSJMfENsfFZxPiQqRkl1WHpoNXxJQ0czKWp3YFY/O1Q1VClbRk0yWUslR3tKSFE4WTF3OkZ0LG11WW0xPCVyV05RbTtLYG8+''@;'; put 'put ''XzR5KkxMMVQhPVVxP3s4K3RPLmNQaGVPX1ckcDNFTnFMYypxTXAwWEd5LDtkUXl1SDlmQ0hIai4hOz92bmYhaV5fWWUjI3koYzZUIjpkRG56ZXdLaEE4X1RISj1VTSt+PH5HPk9kbVFfekZ7Oz5+RVhydylpUyQlaHBRPmNhUUxtTGRxNUZ2PzIpTTEwe2B0JTRGQG4ifF5sQ2VvU1B2Jk0mc3Ir''@;'; put 'put ''cCVCTnV2WVUkQmRHb2FEcmxCO24ucG5fXkQzZ0lCcSg3RXw5WDpdK1QrKS90MDV8VWAoW1hoXjFUSHtUPFdKYEkkb0MrYD5QZXFwWz4paX1rSDo1VFNrU1FCajYiTmpTQlg2RF1kPF95UCt8b2tjYXgpbCw2LzlnU0lmWEklUyZwWjEmajI8RkFkdXR7OTJjOFFrXzMoTXRCKl5TSldscDF9bVl7''@;'; put 'put ''Rz05Jj5JKnYzeVRiNV42KUkpQFpSMkVhV0tLan1UK1o6PT9gaVp9W2dGSylKdUJsdnN5WzlsPV94fHw4Njp3SC9GY3dIT2JqUV52XTlONk0mdGxKRn47bEVZJSFwX2ozWiplJSVeeE1SKFVpcU0qVjElWkF4WTZnV3VsVE5sfFtDJlVWVE9dMURqYW5zYHohe0dhR005aVlWV201LkNHLHVKfCVh''@;'; put 'put ''dHRSfl84IXhVRDohfSxLNXJiUXY8bzh6Nj8iPEU+PTZDQDNvc2s0XTUwaXg+a0l9Wz1GX3ZESTNrVT9tK0k6YVZoWHpLaUFMfUd9dUBRT3VkbGEsQStOfTlffClBVWd4TzpLKTA2UGdMVitdJEdCRHF2Zi80bHNaZDE+aCJLfnx8aV9JJnE0IVVCLF87dDY1KDMpY3ZgYzw/PDJ8YkdYNH04eiF4''@;'; put 'put ''JWUidD8rbXhUPnZ9MCxjWG9SWXI7cSh0MUBmN31RSE9IOXcuWSpQbm4yZ3J0PVZPRlJIR1peaCpOej1LJTs0NE4hPHc0a3cxa2Z1cUkmfFNGL2c2VkshXz0lbTQ7dTQuJnI9dXc6bGJeK0MkRF86Ul5lRT4zLlJvOXptdFYxcG9ON3opRkBsbTlZfnZrOmskJFs8LkAweSJEaiVRRSVHOmg8Onlh''@;'; put 'put ''UkUmNSZTOEU0JGhsJVpoV2U9QGxuU0o5PGlDa1s6QlFOd2dSIWByK21gTisofDtKaFU5LzldPz9XZWBYYXRFcDlGOFU8U0tWaHZQMUtpMSNmNGRqN0pFQ2tgSUJjYy9Lez9zVmlSflBXIj5QSS87W3dTTSlzWnhPIkx2e0c4a3oqPFZFTSJkMDhsQ05tWHYuZDdlaUE3Mnl+WltRZEVHXmFLQEc8''@;'; put 'put ''WyFHM302aXQ2Qm1qS2FPRzVLXnxjM3x9P09eaHtEWWBMM0JrdFo2Kz86RmBnSls2U1lFckk+fWlnM1l5Rjw3RjxqK2BLb3dOTEA0JCl2TSY2Qlhge3FzOFBsVFgmKDl+NU4jVCo1WWt0XmZmOjtIOitfQVAoMXhKXUJVO0BNekJ+aXhpTVkmZ1l3a19QbzFaQmxGPSFqSUZ1T0o3PUVHOGtJYGZM''@;'; put 'put ''L21dSklFJDxSL2c/WDksSWVlO3tjPEtaKDc3JTlUYVFUNj5JInBOITVgJlQkRk5tLiVCImAzSTNndGs9Oik+djReSnAvUGNZaSF1KCoxWWx2T0w4IldSK28uOTFDWlVoTEwpQntwZUpnODYyT146amZoaFBzN0YjQldIRlZxfGk5fFp1QnAuSkFpVXNVaHw5bjZgV35AVFk2NjF2JiZDWl0qRiN6''@;'; put 'put ''ck1FLiMmcF1wMFAzczN4eillRVhYSnVqS1lkYW5kYmEyL2x4JkF0TElRKVFCWS9CbzRHeWQ/K0pMY3R4TyQ7c1JFODYsVjlwRUZxbjx9OnRHTEllWFM8NnhZbV5nUk1ASiZsWltbaiMxYixJRy47QmBrWkpYamM/Q1RBV3lnUmx0XiY7LmlSQkIiSHBeSjdoWkFmNlJpeUBpPGU4RyIjM15MI3w8''@;'; put 'put ''K300ZG8lLkM8Ok0hMyVydjdmfFMrV09fS2VjNSE2PU5JIXZDMEdZQk45KVNYME9fUSo0KVleb2ZyOktGSlFeLjhJd198PmcuQ0laTVEuMiMmYk0oT1sycz1tWi9YbjtNLFZvV2x5JTFQJS9bP21nVElDM11wIW14WFNyUlc1WDAsNitNO0RsViVAfWAxQkshKk1TfnY8UEduT0tfYVVQclRibj9W''@;'; put 'put ''KiNAMXczZSNXQ0BPbXQjdWdJNkdgeVM2Q1M1SCx0Xjx4b3g2d0szSGZXfTolfT56ay9HRHJVamVfUUtZdFJHVUZFX2R0Vjk5dFF9OTkkP2ZuY3heaEBKRDU/RFVoLn1KVjNpI0UreE5kIWlNZTI+fEZtRCl8dXNfUXA8TjUuQmhZSiRQMHAvTG4sNjh0SlBeL21AV0NEQFE3N0Z2Pz16d3F5djV3''@;'; put 'put ''UioxZ3o3S0tbdVt+dCkrTnIrMHZVfVBdMVouWnYlS08iXUNEbXVeRnk1JGtWbnJQR3g7KUAxMyZGZkY0QjApMmo0RmZvd2VkJTo3MTx3ZE9yfCosXiRwYj1QOFJGW1UwT3suL11mJilHT1AjSnVxRCQhLDZAeihFKk8vLnVaWjI8Y0JAMU4sYGg7NHxEeyVxMnRtMGk/d05yY0BuP0FsdlE0QnEo''@;'; put 'put ''fjYvUy5VPjpNXSZ+ZlRwbypjVWsmJCpQNnBoO0k3fVF3LmtVV0VwQzR+JGlPMyVYRmxHOGsrdyROKT1TaWlPQzA6dEN5O0tadUBSX3BGcVVWP3M1UV02RFlQTzwsS1pBcFlMUXolRV9hUUBGVn1PTDdSLFR4YFNZKTsodllVbS49LGpMMjAlMExoQ3ZoW3VKVFF1ZWFgbiFTdTo/NDhsbSYyIXJ4''@;'; put 'put ''dmZtL05yIVhieSUzdEooWEohZnd+cSF6Lk5lLH11QlNAfSlRVStTQn5oUi5KSXtTeCFzZEF2cnN0fmspS2E1dCQ6VXFALy5SdDMpO1coN0cyeTtvYSZ9OSxuIlV6RHs/LDdWOGs+bHB2Wl05PW1Kei5ZSFBAdmt0fDZbOG1HRkJHejlvdUNvODNSXjZNIUgwJXZrd1FbMWNRXjs0cUpTWlNGKGF0''@;'; put 'put ''I3hrdDtxZWFybXtrT15mNERIaWlzaHRtZzNjMlA9Ozg0OFojRWEhOGtZMFJCcldjOXd6Oll0W1dkZn5fR31ab2deRiJDZl0vbFJiU1hJMn1rIXhrM3NhTWRleCgudWx8ISklKndFJCkwe1A6bFpiRUc/MSVZL2JYOiNiNSJYK2wrLklDIWF2P0J2Q1hEIjY+e0l3a30qXzE9X0NZelJjcj5yMXVw''@;'; put 'put ''MSkjcklmakhUZFJAaE03dlMycEJje2w6KUpNT3pwZzhGVy9dSVFYdSZ7bTUlPG0vM01dR3EvR3dWfUU4ZzssYE9adkU0Vj5VYHRnLGM4TDR0OlJgIUBbKDEyUUtkbmA2fWQ/bztqPyFiYEJIV0B0b1ROMUZjLjk7KitQWDwkPDBfVCl5P2lkPENbL0xuPTBMJH14cE1bR2Q9KEBOXUZgI1JufWsw''@;'; put 'put ''O2VZclUkUUBWMSEsaSImVU1VX2tDYUVkS2wvdV13ZiUvM3hMbm8lcmo4RVswLjZaUz8sWS59O1kiO2tsfFFVZVd6fEZvemwzN007bitOYV9XZkVUOFFkWiVuJixqYiRHTVgwTE8sOjpjN3UobiRYc2dmQzI6Y0xVZCw0Lnk4IjV2TVhCaFBGcitDPnpfMmtzSVY1aFlYYFlwPEBzYzE1MGVNdFM+''@;'; put 'put ''akk4KU9qfjBQSmtzaTVVcVFHWG54UFtnNCRrO2N3YWIhdCR4Xl9sZ0ZtfGRJV1h8YkhQZD4kMV9ddWYqVkBQYndqcjZ0RnEjRFg+bElLLCMxQ2RBOVs0YyVtYEVhSFc+OyNCTnQ8RFhHZz5oODh5dDd+UTd6TmB8RXBNJG9JRGFiXVtgVjE5LGE5TyVVSkNVInpkPTFLPntTd3dNU0tGNTBWKUsj''@;'; put 'put ''V3RPVTlPanNpZk04eTVFNHBVP3hbPHx7YDp3QDFIamdJezhvTDFCRUV0NjJYe15KSjBvY1o6Qm40MEpJREsrNiUzIX5BYV5nVT5xe2ZEYXdyTzlob3khU0c5diZTUF0rPXx1bm1TPU1MPkJDbXdUMUlqQlIwfFIjcmZqT0xtUjxkciZhQkJiKWQsSEAyKUkzMXZYe05OdmxVK0BFMG8yYTx3TH5X''@;'; put 'put ''fE9oWnh6aE1QaSJGOntCMkoqOGVaek5iVlQqe21Gd21XaURNWTZmOl94MFEhKXhvVyNgTll7UnkuNTJfMjkjMXpeSCR8U2R8amsmbyxjdWJ5Q3EpcTU9STVEKix6aGhOa3QrPkslJT1gRmAzKD17SD5DeWxqWGVwYmZsN2cjVXkhYjN+cjBbR0lkVFQ1WEIkPjpKLmFkdF08dTFxdkNwdStOfVlg''@;'; put 'put ''XURzTDhIdCIhSkcwXnxBOnVqT3gzdXdPY2hhT19DO3AjVTxnV0JgIVpTS2RaJVNUdz9oS3tfQnFYSD0jPkI2JSowMGIxU2VhM1hDQzokNisyN1NLT35EK0ddUGImRUFtc2lILnNRIXBFSy5iWkRmXyxsUioyUHk+OUcwTik5dUUjOCZ0UiJDQm1fa3JsdyptKXZ5WThYIXBoYGZrO3RBcD1vWV5S''@;'; put 'put ''N11VRE44dyk1dXl0a2IoMlM/biNUKDAqOnxBOz5MalZAcjJ3V1RtQGQpayRWIWM3IyZMMSUiWj1aUVVVJXc1Ni5aWzZgMV9jPCZhfmg0TT5DW2dsOE1hUVVAXWhAQEJyOl59WmhoTzh+VmJgc0hiLFY7dF9yVFc8W0hDWDZtV0l6PVV1emBsMVdATFpCUiFKcUhrdl1raTJCUDxSNTtSPUFLSVpq''@;'; put 'put ''YE0mXUxNdmpCKmJJU0NReWlDRHwwTVdJaHhUdkZIOV9PejNaWGA8W2h6eiwmQV1BZCRjd2lHQVtqUC9RYD9eZmV3Qz04bGVgYDRjaG56YHVhX2c8dE9YTnZAN085IygrSW1lXzIwSVZ+QGJpV158ME5YTktqMnRGdDEoYXV9S1ksTVZ6dTQ6aFY5I3txcjAsTlp9ZihAP0BGLH5WT01vL0hrbmFx''@;'; put 'put ''X2hDT15EQn57cCguPGBHXXYjeC9EKS82ViwiZiJAOiZYKUo8JF5IJUciLD1aQHxuS0UsdXlFSnp1PjM8a0N3T2UkeF0rVUl7QDdhc01uU1ZwT0FWY3dKODd7diRIWWBPRC8oKyxYI0wjb19uQTMuU2dpJXRPVHpDVzBlLzBpNEFdVjlnbEc8cz5TZjYzPTAqU1FuVUcrez40an58cEZ8OkBoYD05''@;'; put 'put ''NDJZczR1L1gvLDloWUVIayElcmV7XVlkaiU6QXJ6U1NRVz5WP0poazJEMEZsOHxtUVZRdEJmXmAzQFFBPVR9K292PEFZIXxUajBjYk96eVNzbVcyP2l9Z0tGSVlARTkxRSlgaHdbYiFmOSpZWkxUNzQocTF8fTpwWH1yNkpyXzV3Knc2VGdCMDQ+fWJIPUk1Qkxidl4jKEUxV1YiXldFaUFiN0JT''@;'; put 'put ''bDVGMisvdEljfGwvd1hHW1gzdltSLkAybi81WCtZK08jYTRuQH42b1pNWlZEc3trYDFBS1lfNFZELz8qby9EM0V9V3ZlfDlvTTRKeiJuLEJuXWApU0h4WyxYM0ljRXhBKmEjWWhlbW1jQiNnSiY9WDNaZUA7OSRnLFksMiFAfD19bW4zcD9aPl4kKHE+cHF0RGNdOmVLNkx3aVtkWVRVSClUenBD''@;'; put 'put ''bj96XUc3fUc1LC9WNEFeOXJfbkF4PmNlSzFHOVsuLilqMDIwbTpjWTEhYSpyQ1NtNjt2KTNVeHs7ekFOeSYvZnN2dixIMVRHcy9TQj0+fn15Um9AWzdBSXB0YXZ7UT1AJXRVMik+Ly9sLG1pQz9mTzZbViFUUStfSyIpcyR+QiNUanVZX1tHdyxTSj9jfGMlTkBbfi5ELkx2fm5UNjwoaTNiVztY''@;'; put 'put ''VHVoKDtGb0UsISFuPz1waHZzblZZO2RmPS4iN3B4bXRWOzZqVmR9QG81I0VPO2pYYihubjlGS0RkMyZ1SVkoIWp2fDVUb3FWWlVbUERbMis9L2lrZChHeEx9V2ddO2tGYFNtTVAwQGAqW2ApOUsxWjN1QFF1LlhbfmBUS31MdWdOV3E+KnV2WiwzNDs6Wis+d05aKHtkdHEjbXk6RExrYDxdTjh+''@;'; put 'put ''UHFUW10xY09eOjs7cExyNygvNSVyLGlxUl9wTHJPfm1OPGJIclR3Nl4ofEQ3NXFpU3YlfDlYIUArOyt9VCwrQzhRSjMjfTE7UCZHLHR7NT1FUj4qdVhla291YWF+LyY/NnUhN1shW0JQd2xpcmVtUi57Jk1GO2kwT0NJR1J4Iit1VyZ+YnlCYk9IUXVeYiFDWi5sYkMialZeLF1CaT47XXFhI3Mj''@;'; put 'put ''YCZzW0dkRkpWLGk7cE5CRzV9ZEg4Mzs4cWMpblQhQXVub0hJan5YaGlyNmxeTFRCLFo5c3Ivd1huekFTZDU+N1syN203Nng4WEJYKVRKJjpfUiUoLkUqWmZDWmw2MzF7JmwvW1VXaSM/ZzlyQEx1UzcvVzhRWj5jNltvTihCUHhaaiR9WzNlcUJaRC41ek40eEspQmdjUWxbdGxVTl1JR3Y+M3J2''@;'; put 'put ''PmVZWWApX0h9TG8qalB0RGR7ST90O1VJJHRrRHJ0JmdfOX1IVFJhRWFCVyhERFd7LnFCQjd7ITJFQz1BMH4+Ojo6O2o1NzpKRkJ7dlMlZlYoQV9nfHdzUy9yZUB8WlAxU2IwN2IlMEpTR2lVLDJjIXViM3NOfUBlbjEqU1ZMZUxEcEZHd019VS5gVWxmZn5lZ18zPU9DZC44XU01WnYwMCx8Mj04''@;'; put 'put ''KmdncH1OdmJZfiw0M0tXOkFlbVBqZE41TiYmcXlEKylwYjs5M2BMdktrNj88LFgkN2IsfSN5azxfJX1nImhNYiIkLz1sWDJvTWM6RzFUcDVJQHg5blVmTVpbMS5+SSV0Tj5mMkczVyU6ZH1DSypwcnJyTylxUjEsKT5yM3suV3NOMntPTiwqVjJYUERnYEMrU3kwQG5yYHs+KSN4I1ZjWjJxPEIl''@;'; put 'put ''NnR2Vk84RTNFR2ltPTswYi9OJE5nZTl1JUheLlIlMVtPP0A4dy51LDBubHN7c3kjb0h5O0JfQnJaYnduOXkre2J9b3JFSFBbPjN5U2llN2IsKS4udWV3TmVwOV40LHs1OUdIQHd8PiR4YiRyUGdKQiopNnRdaT54ck9GdnhOPzU9Y1pneEhWbXpgMUVIYDxwWlddQEd9biFgViw5NFRLZ3h7ZWA6''@;'; put 'put ''b191P3VmbjpyQjw1bH15VlhFIXozRHs2YyVfckZKO209bXpFWTNbZUQ6Sythei4se1IjUDJ3fXNAJCQ0byU1fjkhdjclTjxiNDtUR3p9RTY6YCxER2E+djR8LiolXy9mOyp6cHZ2SGN2YXBhIUdWeE1eSEx7OF5ZRXVqJmlMOnd5fk5ebFpXZ2BAd2NISCl4dW5rIzxjbDNjMiFtcDVDXnkrSGNZ''@;'; put 'put ''IzdoPD9TRnMwQSZvQDhRbi4xXjBtOjVUTzQuK2VaQFtfUDVLTnVhUVk6eEp7ZX1eMVB+S2NvOXUlTUZpMUdXWUZ5Q2M4TWY+KF0sVD5wblZlc0Y4MGcqWVFtLlFsS0BkWXdiK09tTF4xZEx0Tz9hcSFeb0BvKndlNX00VXpSckZ5TlU7d2N5ZVVFPFE0K28/TVldcnguQXhnVGo9O0x6IVg2UkIm''@;'; put 'put ''aih7VCw+UT1XRDB0UUMkUHJGMH15TEQxZ0EwPGdiQS8lYkAyWzEoKFFLI146OzZbOSQ+a0ZfdC5AaGgoRUpual1LTjcvKiNUY1peUm5oL3Qsc30lajdMO1FOSUhtX3gzJE1fQ0A+VSxddkhwLCt5d25GRnEsfEx3UDhwI3ozS0RPRVs7NHI5cGFhLk12Y0QreHxXNlI5WEooO2dEYHkzZmxHZT5L''@;'; put 'put ''ImxoLnJdeFpWflg8XyIwKGFTUn5LOVE1Om1NTDBlczVtXiZEcihJRVo+NDYrOSRbWCJHPUVgKVcrWEddUz9SYmt7a0NMdyR3X29yak4objB1VUVDN29be3FQblZNdGk7cF5qIVlpXSN8MVRxeTV8JGkya0R8dVdoNzZMK0I9aV8ocVo8PDQ6cF5hND9bVCNWdn5LOVJiOiNsa0VvTzBtP3daJUYz''@;'; put 'put ''Y1UlIXMjd3pvY319Qi9yWkBvIjJMWCJxQURQQHdNZlhRI3NKZ0NwfWZDTWR5Mz1DS1liQmdrU2h+a1NAaWwud1BxeTh2dCF0a3NKVmByUlYrOHZxeU5NYzZRLyJuLGBLW3JnU3wqQjE5IlclYk0xQypxOiE3XlhwN00vdyQhSS9qPEs+Lk13UlQ+YmpNIk1Halsjcm5uP3UjKlYjWj1oR2hbTkw0''@;'; put 'put ''cDpWLEglVTgmJn09JXtYNTM6RXQ9PVgxRndwVjpMTVRxdS9oKkdec1lLNXxSTG54V0l3NVdiaGd3ZTtiLkdyTzBiOz1YXi9Edmd6W01JbW9+JmQzSTJyTkRjWitOZWtrbmNmNVZ8I1l+cjxhZV8pMzdvRzo/Uj5RNkc7RVMldlA3KmI3L2ZJKjdVeyNlSFJTdygxTys2Wk43JG0zfH0hOjsqV3Yp''@;'; put 'put ''NWJRJl9gVGRxIlkxblg1LkZhUlEzcT1LNWUzdVozZVBVc19PcjdrOXxRQEckT1pNeChZeTxlXzE9I1h6fiw8ZiFUImV9QzJKJjJfKSkjfjQ5dmpWV0VvNEJ7Yi84e2tKRDdEfHo6Sn5HYDg2ImFPJVl0bmh5RWlLPUMsVFdre2FFNzBOJEtGUkIqWj1wUl8xWjlyLmY/dm9IP21fVCJsVnBvTTxa''@;'; put 'put ''Plk3a2JbYUgySUBbQDxRZ3QpSEBLXTJ1W14yY2kjcX4hUyoremVOW10mTG4zc1IjViJ8RWkoe2pFa2EsOS42PTNYKjdtM0J0O2M2a2NATyp8Kj5lfkYoTUtafDc7Ykx2UmRwaStHMU9QQjckW3BtbW1qY2BWflBPTWtEMEFucz91VUV2KmYxUmRMdTcoJk9kclFSKlJbZnczM2hveUU+fnJNTSo7''@;'; put 'put ''WlNeR3A1ZmosVVEyXTo5N311WlEuPnhddS5QQys/cC8yamh+LjVzV2JKYyZoa2Z4JGZ1N1pLSkdCO3B3SkExdTJFRixRPEt2diZ4YmYwP2JwflpVfEY0NnNZM1M+Pz8hQTRlRW9UZHVJfWMpZkw1On41dHVTZWpKeWRMZzNbWUxuSlZgSTFtM2YjQG8zTDxbP1RQU0ojZEhtM0EsIWUyOlZTNjdG''@;'; put 'put ''elhWZ1dHZjthT1VfL1AiSzksbVROVkZbJDk/aHxXZGtFb3B0WihVNEw4eCx+ZjpZaW1SK3A+XXRCNTlVU29fRkk0SHhQM1ZdLyg1S35JNnxGeGIiaiRUeCNYdX1MQCgqSiY0MF13dWRHdnZrcEJOckgoR2RnNVYpe3MiUDUxQkRHaHRsLzhjR3xlZ1AkPVo4NiRxVT0mdjdCKCxETjE3PyFhaWt8''@;'; put 'put ''SU1XM2BfSDk4ZD1tNTZCWXJbd31VLmRWO2E4OT1nOlhuSE5iNzZ7TSt2T155SEtXUl4lcjpJOypteHdSK10/NUNbfmw+JGdhTSU8R3EufkBgWVZOU2w+NU4+NWk0dyliOk80UGsmO1N9fX1KQzpxbFVtQGhzOz9JZTwqY0pKR1Zhb2FzSHQmYlA6ZVh4S3d2PENSSVhoTWdLMnhfPFZwN1BrVm45''@;'; put 'put ''XyZLT1gsbE4xPF9YTV5hK30scDhNcGR6TSRWcjRPU1dEWU9VWUZFK1hTU2VbNUpERmsxYnpUTnB1VCMsfG8sZFQ1P3lMbzFgMTc5SHZiWC8hdldrZTN2aENjVSRocXpKXiEkdjU+WyQhYHIrVClFQzBSVkhXIVowYVJ6S1coKHRpNnliTztnY25NaDlkMnpZTUVrK0JoYkZ+PG9DYUVRV2Babktr''@;'; put 'put ''Rl8yPD4rTT8oNnR3OFpRME1NP09QLG5xOXBVNSNzWFhkQnpHJjxWP2RHWFMwQytTTGBUV2BDVHtmY0hiImF2KyN+YCQ9K3t4SDxRLzJaPH16QncxJVtRWj5WcTFrLmMvIVBOPExSdWNlUyhebkxpYj9WPWY0RjIzJVJgPnU6WUpaZUBaUVFAXXBHXl9INXhrfihudns3NFhfPGsyPT5Aa2k4K006''@;'; put 'put ''aWouK2xVWV0zPHhaVzNCSk8uS0ZqOjh3IT0xIXBUa0Zmb3BrTSFCdkRuaFcpbCpJYSghNy9KUjJ4JD02Um5UUWJ4UiRpLilYJmtIQHReIWt0LjE/UyNyJXFJNHJabGMiaEQxL2lMeHtrRyohUSJkTT5ubFtoXSRuOltTfW9QNT4sIlpXcjkjM1VxSnVVOTdkVSZNNEhDLjhqTjxFKzI3RTNmZT1g''@;'; put 'put ''bChiUEJVLHsyOWFJS3coOEdaL2RnK1FBJispdSUjZD4yKmZNI3kiNy88byVqKzVmL3pkanwhMSxUaStDdFg0VytCZXN1MFJEeEVFPklvU1tEZDxKWSgmbWRMPzdVdVVOJiQ8ZWpYOVlDOnx5RyhmYDtJXiw/aCVaKnM1ZC9AaW48UHQpamFSdD5HUHFRRm5VIWtKdTNHU111KnhsXl9nWVJwJHtC''@;'; put 'put ''YnQoMkEpIzJnZ1kobUlEYVohTHFbJHYhIT0zdzJeMSNrYW43RXVXJE8+Y0k5WCM0fWUiOW4qS0p9MVRGPEs3bWF7cXB5LzNdVChIYH4xRHF7PmBCLiUuPEBUO34zL2xpJEdMKG0vPHBPbFZlNEVGZDApQH40Oko2IUVoZDVbfDslK1o8RDJAIyMwN0F1YW9HSG17RDM9QVVVRUR+dFRGLmtSODM8''@;'; put 'put ''RjdvYSowYjtnOz5xODRTMGtmLDBQKiQpeS8+aV5OI148JD5VK3UhSDNfekwqUzVsciRoPClrWU45ImRXcm1uTFZOKntvTVYjbVd0MUBIclo5X1ZHMGcxWzJieVlLSWJsI1RwdkNHOT9tN1VlUSQ2SToselhKfkUjW2Q8dEUka1EqeyVRWml3Mi4/ZHd1Oi9MWEIwYHhnJFEpL0pVbURZV1d4WWNs''@;'; put 'put ''azRxXWR5M2kxJjFbI0RKSml8VkdkO3wmak47dXdLfWU3YG1FO1U8PyMjXzwkOShsIyolXkl0XnlsJC53eTxQal48ZG5efko7WGE4Ni8oSypTdEdYVF9FUHpBT2ZVOytBanEqNE0pdHwzTU1MOnw5fjk+KGMzdjEhdkNfO3R9NUpmODVGUDg/JmpuXmJKVTcjayV8dEUrdnI0SGkzc1ZCWCMxeCI5''@;'; put 'put ''TDN5UT93Nz9IfFoocFpMMm02RjE5LF9ZYz9uY1hfUHYoVEpOdnFTWmBORyNsInxTTSRqcDdXa3NfZlJ7SFU8QiIzOixyVTM6YioocnlMRi59ZlheTEBxNXNYOnA+VD1zZ1pHYldmanZkb3Z2WFgxZ1ZpRFF+WSp5Xmp5NTc6bUxJb35VJEN5R3Z0MkAzWkNJcFdoWUU6MzRAdF14YChwMjtXNH5U''@;'; put 'put ''NFUpWC8qMytiPW44WVNHJX0qeSV0NWkvVDFYYV87Zy8zUFQmZmdKNXdEOWhqMUV9MU1wQiUvbXkyWHA/Q2cvI1Z4bXBkSGIiNFI1amQsMDV3Vm9tI19fdz8pQVs4QVtQTWEjPX1JLk87fURwL3IpYCMsIn5aUngjMCUrbV1leUhDdCEvMz9qfGVhJTdzKUgxWERVcCtWX1ZXPndQRVRRSiQ3eVdO''@;'; put 'put ''UUF1d1lTKEc9TTVmUU82XmdqSTlzU1t5OG14aUlhX0U9VVhBKktuUTk9WChjKV4zQXhHQERqdU9xPnxbfWdzKkAiUW1wNWEoPklxQ3AobTYvfm1sYVdLPC5Yaj1mJiIjUmxMYXV3ZHZTRH0+b3RgeVZSZkM4SWtyQ1V5WlkkcGh4ezM/LmlHTWF6RX1fcHlaODpuS3IobkZvYltrSCR+O2whfG9o''@;'; put 'put ''WVJ1dzR3WiwyTng+NX4wcH0reWdvMzA0aDZYVk5gdndiN2Yxbl9tZ1pxN1B3MmhOa0BVZ2pHJVY/JUxtRHpRW1FSSFQ1cFNyUjMqey52a3U8Jiw8OzZdNT57Z31UK10/TVk5fkNZYk9FbFdANyNXd1dRSjMmaSU5WkkxITV+UkV5dEM0ek41TnY7bHJBNGFKb2U7RUhCSUM8ajMhfmJxaFlyOD98''@;'; put 'put ''aWFSL3AyZXBHQUxmbEkja2IyUUddfVV5RHRYNnI1TDpPckEiTFA+KDpeSWREKVtxNmhvdSE3JGhefEs6cWFobTVxc1FlLyYoZyU+NkgxXzprRTk7a31VNV87Q3l0fF0wM0YjMWxoWUtXTHd3QXhuWn5sU0s0OCN6ZmgsWnROK3RRSDtWKGE8SiM6T0gzeEpUYExuRlUyS1ZBLkFIS3I6NnFZdiZD''@;'; put 'put ''Vno8W1FEKUR3dEd8ajRTfD1oYFMjPVIiJWtTPU5hMWNQaXR1OjhUaDt1Y2csJSExOT4haS5TPEZdR3VtVz9DO348PVNPWV1DaXNpJHtdRTVXLnkqekRYYkkvOiMhcCRVPUptL3N9Rms2JVlRcn1GdGQmNyt5ZmkyZChpZnl5ZV5baV1sISM8X3w/OmFUfmJIenxANk5EM1heWVQ0bn56OGsrMXQz''@;'; put 'put ''I1JSfHo3eGh5TDltUE4qTCM1WVM0bFZXVVIiQzZTMCtHcG9TSENUdmY1Yy87a2xaa2plaSphP3hkKTlPb3UrNnVnXlgwU3xyP0o+RyUmTkMwaEZTQGw4fWp3YHF8PzhyMlhbUWZnW2xgejVhMiIySD9zYjxVdmwjMWBzM3I8PkpaTTNRIiYrIj9VQWpsQGc7cC9JPU80O2tSMzp4TU9LLkwsdClx''@;'; put 'put ''dVJPN30jbCo2ZW8xcFY0VFcyMUR3c1pBRHIlbW4pQGw4UHwrTEVFTlEvUGRwPiw5SDlCT2ddJlV2VTAwQks8T24rdXNmKXN7anRvbz5VciN7dnhXNl5YZE46RXhnbHs/I3NKI20vRE5ESE9gR2EkMilafSVkJnluKTxhO01IVXxSfkQlVz09TzNpVm4lXlhrUXQ0SD16K2J3NTt8YEhNNFZPfSIw''@;'; put 'put ''SVNBWV9fSndUc3U1aS81ZCVHfXt+aiIzZE8yQz53VW5yfCVrREBbcj9KMTojOUtdUUkxRnY7PnQ6WDI4N0ZSX3J9PW9nRCROKkhmMlouM2JjPDRMS0RXSDBAJH5eTWliVVFMM1M0KmJtTUVPSGZmODcjNzwkTS8uLC5pdDBwSmA/PW1eaz9IdFNVU1k2KiZmUHwlX1hoOTtKXkRDQE1vUnlnZEZ4''@;'; put 'put ''a2NGV3FvUlR8XkNudWR+YUcpMjYzSn1NbHpnWkVIUCIvYmdbRERwfFkpe054bXovLD1DQEIrTFpxfTpWSyZ2Vj5SZWtMVnUyd0VEOVZYcnkmYDFxSD4jQl5dPSNvTERiMnRuK0I8KGFWQEhUJG1WYzRKKnFhV0hlNlJjS2MzamlMTClgVlUyZmpePCQ9e1AwM2xNVzMvIS5Bc0w6S3lEaE8zLl5a''@;'; put 'put ''aDI5Q1A3elBSR319T1pxdXhwTlBhUCo2ZXRpVyFoMkFkU3B3RTpzfktdTj1QL29JLlE1WXQ4fkF9PzlXRU9xQGNISSlHTmNrNTIlUyhIZT51aCg5Mn1MTl9uKlo7KGhudmFFM0Yqd08hXms1T1BKdi90fEdKekttSXo0MU1YaiR4b3dbQHBlJS9jdGlRLG9dLEJgTz1SSGM1I0l4eUVnd3JZQUxs''@;'; put 'put ''c3VxI3Eqail0UFBWSjRoZ0poUEkwcjBMT31xIjBIJW0jIXJSfU9EWnlWdlBVdXY3PmoxbT13S1BRJWY9VzNbNmhkKkVmWyhHYWpWRElaWGdJYT9JPHVVWjByZnZDI0d7KFcvZE9MWGRmIzAwRjRpJGNeZDU5diUvV2VZWHBxRGFdUkoqbWZOW3tXdSJmZVhXPyJaSWprfWtQNWVaZHEjRz9ZYTJm''@;'; put 'put ''YnhPZylhV3hKcTZNcFtaP1srRTJySTBuVGx9YjoqLjpZWDh2M2hib1BYMVpdTm8pdC41cDRSd192KWAkaDx8R0o5WlZwUUtjTVgpVHMuZzwmJVVeYGc9d0MzPnh5KmJVPltyY0NWaUBhKit4IUg6MXJtd0clOX0xJlEpKzglTkgpV3AkREhRcGRMYCo2PzE5cCJuSnBQbXQifFRUJVElKFE6dS5T''@;'; put 'put ''LnVBW0NSM35MU0t9NVprQSRlM2E7YFgxZXtAOSUxPjNEakQyS0hYOT0idzhEWTJtdDo1Y0gsaEBOZTQmVnRlMylhdWR7VXxHIyJqbUJ+b3RHfC51LyxhTGxnXXJyalQjJEIhaGRVTFpfS0dZdDJFU1hvJnZ7SC8lK1pydU5eWkQmVjkzOz5qQWlfSX1bWiJAISMlYCF7Pj5NOH5QLDtORDZtdG04''@;'; put 'put ''OU1UU3oxbzMoOUlkZ0x7XzxUaDJgUjcwdGJyQ1N9cDB3cE9aYk1XelIuWkxtOS5oYWk5Mn5xJFs2cTpvUFdTInkqIUByWkJ0cGpYajc7JFlMVG9OKW1LZSl8bXs6Wi9fW0doL0MuV20sU1Zua1AsRS51KkMpYkFIKTouPDB5WDRNUjZYcFlOYz1VKzVhJloudnAjLjImd05WWz09Pz5DYS5BUFQk''@;'; put 'put ''ZjJwK31LZmw5OnA/KVNWfD1QVEh8KWolNVU3Mj9EWGZ+KFsiNGRqZl1hP10uRjN3WnErZ0JuOGFhakg4d0s7SVtvLltyRisiUEk7ZlNfMmohRjtaRWZSaU5yR0E3S3UwK05iWkxrNilNOG0mMipqWD4hSz1IcSNlL05kbkhmS34rWGJEITckLCF1K2c8JVtmYUkqdX1rSUZtJSNyQWdCLkk1WEBv''@;'; put 'put ''aDhTbSRqIWN8NWR7YTR8Uj9uP1lnRVQuOngrYmo5eSpWOGczOD4/LjZsQmd+MV1mUzk3aEEkWVE1VElkKWIvTWd0fFcpNy5EWV8mODYrcypaSDcoYXlkWUNFbjdFOXlIQi9HcUpVZm9yPlBZTnBubCkhRyYuVy5zbHBiS1YvR2gueTlsMyk+Mm1JY1EpKkkwUlgxe31VQW04IzVxelpIaH4+e2JE''@;'; put 'put ''d0YwUE0zLHVGQTFYJE91NkZbMX44eVRWbitKbXUudGlwXk57UnV6NDg2WDosO14hayxzaHZoYCNyWjR5ZEFtVkFKdWFIen43bCt4QFFPdD13en4hO3VwSjxZXnFqdFQjIlpwZkwjIW5sUD1JV3RBR0Eqd3x3ZjpwbFNvcX55PlVQRiYoWS9UZz52NSZSJVJkM21eVzIlaVlVKFFKMFdQdW1DYzt2''@;'; put 'put ''XmpDTX4vazgjTSJZKSk7ZH1tJlkmPyRISUlwPkZ2TnQwL30vL1dRU0IlTEpjbGR7QEFneHBfeXRCPWVXMEYueXJ5NDRjcEx4X0k1PjdsOCpzc3EyWjB5N140Kyk8ZEZlWi9fPUdiaWhNPERoX2pBbndZM3Fpb10oYSVvY0lKOn1UNiV0OXhaWU99fE1uKFEqd3lfbWc2a2tQZFBpTi5eTyhqN2ZQ''@;'; put 'put ''MkJQQ01Jb0BLUzBAU3c+ak1Vc3xZPjdbVUk7PXJyLk9mWzIrWF93M1FOP2FEL0VmZzZHMjJ5Iyo5SWhHOFEmX1g7Ymd2K0ZNNTgzVEltRF9Uai85JE1UKHhXQGJhUG4kS0BvbF8hQWM1eypyWGhLZGVjWjZ0YlFDKldNK1tocXV0QDAvNH1OMG93aj5NIzpqekNHOjBnM3p4PHo6ME5+WHFtMDRU''@;'; put 'put ''ITBVZjU1cixVPms6ciJudzsoZjI6eVh2emQ6Y2QuXUBuaGJjVjMhIiUzYlZDRER7XSpYZGtgbFdWTjBtWUNYb2tBPUFISk4+RHJOQEA+TmFjKnFPbCVsZXh4UXhbTCUjdVZlTVdqemFhWU40dTY0KFVudGdWd3x2RSsoZzRCZ0paeGs0TEpdTVZbNiwoeWk5VnldPEQ9fktacDxxQmk1JDtEQXFD''@;'; put 'put ''WSNIVD8wYz1CTFRYNVJySTlWWFdFeHJqdmVhSHJNRDIwZzxsayhLMjdxLyMzWFl4PiJaSExaQ3QvOyF6QSJ7P1dicXZ4TzpQKERNYWFSQmYmfjQ6TFRVYTcvOCEkR0hoP1hQO1J7P1AhQVRfJi5MPnpfcCpZTml5KzRWJT9gUTlhPnU4b0k+OCQibH5YMk8hbXgrSH40I0JIZjZTRVY3XTh4ZzNN''@;'; put 'put ''JVM6eVNCKV1eLihuQnF1ZWVNSz1MPz43X2cmJTs2JEBSPWJGKTY6WnNwaUtyKzJOR3pOUGZzM342Zm9QckIxWFRkS08qYVg1MXdQUEQpb3xZb0NaZit9PzxzSmZOeXdzTnJxeTVhMWQpOmJ+b15scF1FS1I1Om9CR2RFeihvYHNwUnZUKWB8PGBPVVQyNTguazhgOmtCal1QYXFrWmRQdmFsKC9U''@;'; put 'put ''Uk4rUlQ5MzJ2eXl8YnZ5KFVxWFIjVFRGTkYidG1+RXRpaCQvNFMqUTJKZFY3fi9geWYqaTZhP3JJYURCTTIrMz5+eUkhUEs8R2hYQis9SVAzRVMpW1teK3lTMCIwQklgOzcpUV0lIjJVInw0M0UqWjp0VTtnV2Z3VlhZZ1VKZHtdXUJvX0xVQGZsdmIlZUp4PVRFVTR0TVc5cmIkLnVUJnxjJGFZ''@;'; put 'put ''JFpHbTlnc1U7Wm5dTkcsJHNVJjY7S3VxOzdZZngudno4STZfSjNMe2ErKSFVXzw8ZVhEYUo2fEgxWE9uKlhSPi9oK0hIXkEwTFIiJXs+Z2phSXYkPnRaZDJNRSFPcEtNe0J4OFc5OEZgVylZNy81ZUl9LiYqVW9OdER3UXV2XkNDXVcqPC4qc2dkI2FSKWNsNn04VVJqXjdUVjN7U3dNTyNlMD1j''@;'; put 'put ''OHlATVh6RDxoX29pZWghSz4uLzc+YWtPQGFnMExPZ0BvaXVKNGx9Sy44dGVpKGJ4ejRjJX1GNTtZVCh0REM6Zz44ZlohWGFhcjpPcUckT3pxb3B5W3dNMT8qPT9beVpSQnc1XyErPSZ2bXd8QGEkJkA3W2h8Z1JRTS9KZ0R9RjRCSEEvLCx4L1JLbSVUfj8xdGtJXWtrLDMuI306LCtiUFRzYHhq''@;'; put 'put ''ZD50X1gjfl99ZlokJTxXJlcrNV47VDFUeSs9XmAqJDwqISFQVlZ8amU0dWhtMHwvTnxIaVFEeGRJfWdSTWtYJmxLZ3lMcCUod1JWQnFmQHhGTzVFfHcyMUwuWSFPVEEhL2VFcyZRRjJCW2ZvOG53Wy5YYTVyTmVjU0VFUTtPWXVRbERQP1IkMDFrKVciXl9LOXVybmhiSzImKipRUkkkK3smaGp1''@;'; put 'put ''bmRYIm5dTGFvN289K3hJTXhvRWpmW1kjS0FAb0p9ajNSeHlYZjwydEJObzEwOEs+YllUMGhQKjdeP08sRXtjO1NOUklPJlRlRWpmRSI+Sk1SViwmXkpmbHhJYmd8P0NeaWBXRG1kd2FrLDxlRyJVazxkRzw1SjAmSW1lIU1naj8/K3dpPT9XV1gzMCJXcHpZb25Lc0VPazgvbkJxOiRXV2pXPTF9''@;'; put 'put ''VkRkIXF6OE46PyY4bSxLKS4jVldGLzxVP2QiaUUxfjN4RnU6K1ZfcyZwYjJde0MyeF96fmtJe3hsVC96MHk3U2AvUXFCfTs2czxnQTtuIT5FUllFUTw1U1BtUihCbGpyPEJDaz55JDM6YmJudnI3e2FaIlI6ZzZOJTkoV2VvOWt1MT1pa1EyPkpOdl90fStOXyY3UHRFYWgrcGxFaXliZWF6QzRf''@;'; put 'put ''ZyxGLix4fGJaeHpxOm5XM2IhS0xmd0ZhbHIyRnFKRCUud3VLKUZhMV5PP0lNfCl1PD5OaVs6UDoubnEqJGVqbW8wIyx9JHR1N19QISM7L3xHOWErcXpgVl8mLHFQO0piXjA3dnEzUihbeSJgQilRKWg/Z3Jkc342aClmdVdeLl5PbXdsdE16Pm1dYXJBMkddPD8sLmJnbFFOdEImSFBwc29tVGMh''@;'; put 'put ''Yn13OURIWV0rdjBRVTMvWTJIdy9NOX5uRmglb1sqPnNPX3B3cmE/P1U3M3VkUy4pVHk8R2Y7MTowPCVQOUY0aCxAKEQkWT5HMiloWkppaC5+XmQrUmJbKi5mNCU4fUUzRnliSiRCfWF2WEE/OWQ8T254T2B7fH43cU5BeS96QjssS1o2UDBvWlZFT0JEbyloa19ZVXskUl4wZyVxTG5NJFZ4M2FJ''@;'; put 'put ''WC5HcSUsRlB6fVlrbG88bjBeZkw1bEU2aGxFWEBAK0kwN3VfYTw7MS9qKVh0fn5JbFROPlAuQldqYjFdOFhNeFZdMERlMCVxOlZjdkZQSGQ2WCRxNHtPeiNQQFs5dnA3Kzs7IzI+ZkQ1bnIwRWpmMmQ8WCl2NWRNTVl5cG5tUi9QZGNMJn0wb2YkRWN1XmMqb0pAcVh6MHJKVilpMyFPY0Nvd3Aj''@;'; put 'put ''V2dSLiRTNmh9VmY7IVVkTE9fVEFwQlE7WlNuXWApO3N0Nz0jUmc4cSJ9Il8yfXg8UkdMVmI1MEghSkkpQ3JDK3RGQVY5YlReJFkmTjJ9fW1Qb1d5VlBiIW4lZUYjcy9gP1EuMVpmWUswdV5rfVdfRSV1VX0/LkBUQnorOisvRUwibSRrelApZFJlfTlUREsyMUlEcERVYyZEfCIvQk5NOUVUQnlw''@;'; put 'put ''NX1dYGAlNT0ieX18RGxUPH0rfi5XP0NfZmR1OypuMTBYIns4N3hMN2BSZmUyaGNfSnkmYmdWKlY+dUNDYig5bDQ1QX1hXmtdVCtXaTUoKi8yeTgjIStfQDB3QnRaMmdaR0B5L0UiU1E1UGpSVHU+big5JWs5YkdJR3RbezUybGB5M11AJF5sanY2SWsrKW9AWGByaW03TmRqMGQzM3R0dlRYQllK''@;'; put 'put ''XVZWdmYob3huOjAuJFQpcURSfGlReW1HIzZhcGRZL3g9U15YLl9lInFyWms0XzZ+JXQpUD9Xa19TNk09e1lkUTpkR0lYJUlDUkwzdmpPZkRiYlklajNvWTpwdGtIcz8+aC8/MHJTOnRpTjRCYG1LfDdmRlVLST5NTUUkYkJJYyR8KEZfY14vMVgkTjsxUFg/Z0M+byF0dlVZK3xRYip7cEJeUXxp''@;'; put 'put ''SHJ5SlkkQUU5Y1ljNiYzWXVaRDhgWFZhRztZcyhLMHR8UlNiYCpQImomb3s/N2V5ejA9UHFdeDViLDIuSmV7aThzVVoqWXZydGlzeH1aZ3l8UkVqQClQL2ojSX5tQz9YU0ovIWszdTA0RVE6dkJDLDwiRFd9NHkvN3FeYVEieUJ1cFRxaG0yfVJwVElLLm19RVkrcXkuZlUyR0JAKlFHfHFjMjQj''@;'; put 'put ''MD1CVTJVKFJ2OTtZd1VVdz1VcGtoWzZOMTQ+cEl2IWguRU4uWyhKR30jIlFLQm5VJXNNamw+YDB6XWVWeHpBYjUqK3RPNGdAMzZ2W25fLEhJKjc5ZlsjelBCIzJPdj92WS4rMCJHMGduRGchXiErentPJUtaU29FI2ZdX1FCImNQcSxKdz1ZRGsyNGFveCoxL3FIXUA4QE5HR3gzUTxqK1RuMkxY''@;'; put 'put ''WmtJNGNZclRZS0V3SSpfVDMpRUN4NDtpe3hvazVURll4QHBCOUVgbllJNDVvK2NIJSpHRFZ2WHMjZGhqQzkvRnV6SUtZcGJ+VyxMc19AbWFIbEdqenFRa3FHel86RTB0Y2olU01XfHUhJiYzWGtSVyldNFdrLEo+NiJ6RmQpOmBoYVM/W2ZjZlBdMkxqZDZ0SitEcT07ek9wfHtIKnRDLmIwRFU6''@;'; put 'put ''cygmUltOaHh2MmZnUiVUMXk1XmU7b1k4X3t9YCt1TnlafWVZe2lAZzdYfWklOXQ9NkB8W09LNj50JFlCcyVsOV8zcyVsZEB4LF1nLDo8VFdqXm1XR1grTG15e0FHVThgWHwxUVQ+SEhPMmc8bj1tMHRsaFpudT9wTktJa0hFLzwpc0MpLj9GYEsve1dqdmw1dz05dUZPU3guVGlaXm5WRzpHJiRJ''@;'; put 'put ''RTVAQl9aNnQjUC94JkQpUlpnRGk9UW8xdS43dX03UGopOSsjdnRsajUhMHo2N0hNTjUpdjQpOix5RmdYMWpSbENoTGBVdjBoSTBtTTxrWllLOW4za1o0IiVBWnEqYDAqNSxDMm19fSp+U28uPCR8Z3RVWVZ9WXx8ZVo0Ozcua25JRUguIzY2e3F6eGsldEpyI21WS1osKmolQndLa2tVWXw0cFF8''@;'; put 'put ''NWZjR3BrNnZlMlpKK1FRbmJHVEhpZGMoIlBCN1JKJWJvVTFhdEtFNCt4PXZ2VXpJPzdBIkRCOyI5ZSkjSGRra2NSKmJERUEuXmQzRTB5RWg3ayo7V0JuUl48QFQzNlU1Zj9vUTZJcDAkdF4zLDRbXWdPMDI0YCo9QV1vR2FqVClMJStPQUJsKCUmOG1+XlJXZVc3cCN2ZFRWXXxhYj9QeFhzPmVv''@;'; put 'put ''MTNlIm4xcCVsaHpkakxefWJPI25VSiUuR3o1bDo3cCkmN1FGdHtEcF9zKi4mN3NgX0dOc2hgWWt0M353fmttVCpKSmtOdW98LkBRQXIwQDlna2Ukaz09T0haI01NPncoUDFQTCRmZnhHKkR1LGw/VEs9fDl5LzhzMT57aHF2amJNW1pdNnwvMHtPdGpbMStjQHNga1p3ITs/NjhRWCMmY2RwNSl+''@;'; put 'put ''Sz9lUVNQSGllKEd6aCVAN28ldF9AO0JvNnEyS2l5IlRaTC9uWUkiJWEvWUAwVj0qX3dAT3tLTGVkcCYhIWZ5cmg2WW1HQ0JNIVFXJWhab2BIN0J8Kn1SST1qPyZlUTlkeDRGNW9ndn5UR2dwP1tHMiZfdFc5Jig5WWgyXzt7VXx0P0hLbzdBZylYL3JPeWNbYllMYXJ4dD8qfnN1JTx4P2BMWEBm''@;'; put 'put ''Mn4/WzIwQlV2Ol5rWCRoRilMPj8pemYqQkF1LkwvKG8vIW5gekViKFUiOjRlYnFQXlNsZiQiKWkubDwxcVtOPGhaMHxUTVNsQzNiRXBUT0R7V01eWjB5NFhILm5Ia0ghU0VtQ1l0UVdvN3tgT1g5Kk8/Kjdfa0M7aVdxIl5jfER7dFpXKCU8Ij1xOkkmTEBgdlEpSSRlKj0+ZzpKRiVmIzM1VH5o''@;'; put 'put ''LDM5PCZHU3kpczRZVUVxKTMhZWUmUGpuSzZRM1BkV2dLPENqZTRvUUE/LENmT3B0TS9XWmZPIkgoW2NCWFJDXk06JVM9Jlh2Xj9mPGpOKmRuRihjdko0OjM/UDtpd2tTIS9kOiVIOHIzd2x7TGtlYnhIPWZjQmw8c1JbT0pWMWYsWD16MmBtUns2dWd7PHxfNHcsdCptK2ZMLHgybyNUfTg8XUoh''@;'; put 'put ''WT5DISQ1Zk5HUTNXcW97IXQmczAoOEppTWdgcFNhQUJ3Yzw2TXV6NEp7WG4uOFkzWEBnTUhXWXEiYlZIYHlpNGMxKSFPdWhFd3ZXNTJLY3V1UGEjVC4xMW9RJl0lY3VxeXUpbjdjdWpzXjojP01mVH1fMF17WnspKUYoc0g+U2YpVUB5PU1NU04+V0dzSVg7Q01Tc3pxSSZ4LixaT0xOeVVdU1dF''@;'; put 'put ''NyN6RTxhdDxEZXdyLCw8cnZacyxufXl9SDRVVyNtVVJTdXJuTHlxbVFmZSkoOHFQSzlSLkQiTHYqa3ZiQmolK30uZV0mQF1rZVc/PXh2bG5rQTNFflB+Pm9TNWx2V0h8VTBwPCZRTSFlMkYmQ0JSZCJOK1NXdzAmK2dBZEQuSyJ+T1JyRG9Vem9OfFo2OCZOVjY9YCFxJStfJXBOe2MmTzBHXTJS''@;'; put 'put ''OWNkZkxBQj80MDY3RCZOLG1HZiNicitHanB9bmZLekE4bEp4TTdRdS5Xaix7bUouMEp+dnFQZ3tVWyspJCY/JD5sfmhwPjxwaGU8e2difSosfjdgV3hJYHFCaU1rQlkqSXRRI1VdajpJQlNUbn1sSUJqMzBfOiouWnhpZyg8clIyTVBfd3pLOjkrWj5XaTZKTC5tSXVCS3l0IUBDWTNlVEtaTS5y''@;'; put 'put ''fHFDLyh5KWdFISttclJ8QUQ6NXhEUypnbUh8NFg8YjFrPFZ6ampBOkhkYVQmTCVEeSEyKDoweFBkTj48ZDxlYWBxR1IkSU84Qjk+cHJFZz9tLzNJaldIdGU8SXdsQ309Y2F4Qih3fltyM2o6NnlCPkwqdHxeaSU1bFkzP3I+ajAiNHJdbUcifUJFNXpxT20zeG16TXtRaio7ZUd2bVNIQiIkcXI2''@;'; put 'put ''fVhvQnxZO1k5eSJdUTVGRWw1PzF1d149IUFkU15aN1BDYFhsUG5nfDY3T31WYnxjLigwNSplKzxFTk9zQDdwKSg8UTM7Pip1SX46RD1vRFltWGdZbTxEMVUwYiFhJC4/WHFvfUAmc0ZRXXJCb1p5I3M+e1RrNHlyLjA/bUBMdzg7MlJqKXhkQWojXzYuI2M2Ql83JDhENSJ9YGVmZ0svZCV1P21j''@;'; put 'put ''bkZydlV3VEUxcGx+WEYhX3E2OXI0dT4xakVwKVJVOi5YUm47NFI/OUAzcjcyXnQwQmtfPiltNlIsSCMsOUQ7RjMvYCZlViY+dkQsaW1qWlNUMillXTI7V0dQQk9MdXJSIzIiLiNbfFU2N2A2fVdKVSpKdn1ZKipraExZcUZCITd6LEpPMlhlRUliJU4sfGV0aUQ8dyJMMCFbdXIiMDA1dmVybEco''@;'; put 'put ''QiFGTTF2XjF5MW80fCxoMlg8YCM3cnJvcnVgPTlNd0JHK2IxbTBSJCg1Knh0XzlQP1hlUCR0OV5rYGRFO0VyXj5JaEg7Z1BPblJEVTdyV2JkIWZnLEMpRkU0WT5pMmhfWk9CMll7TTdVLiVAKncyNSs7ViMuPmw2RTRTNWRvZGosTl8zfXdzJChme0k5PUUpXnZJUEIqRVt6NmssQGF7RWV0aiY2''@;'; put 'put ''aWhTYFhyR1UuOUVbZjRwVEBgXkZscUw4KGZIMDxkIkN5Z2k9VUZtYEM0Ukk4NztzPnduaHVBMnZxVypEZ0lJendBd2c/eiV+dHMpN0w3MjZTSFFFKHxPSXxGb0QrO15QX2pNKHNoJG5WQCgoLFhLUjcxTEJXdUBHam1wbkV9bjlmfD5pfXw2N0xuYjRENiNjO25PR1U7OlR5XzpqQ2I8NjYqKzV9''@;'; put 'put ''YklgeDFVaypfSSZMcnl2N15HRXMpOlQ6bDEzajUpKXRUMylRM21nIVc2L2VTUXc1LH1KPCo5ciMjP29IbytYcitASltLZmwyOT9FWFlfMERdMSxyfmg5c29OOHRGeTVVb11oRzpTem4weHZ4VltzKk4kIWYxQ1RgMmMqUSguNFJ7dUd3akQ1cXUjODx1ak9aQHpzJFgsVSkwWzFBLlpmfGJsKnBD''@;'; put 'put ''WV0ubC48Zmc9fExSJnRROShgY1FkJV9OJX04OURYWk13QDMmfihTI3EseWxPc3RoNmc1SzY5QmN5VGQ5KjR9L0BSXzlnIUs4cDh5I2dwM0VkbjdqaSsqfnVoXyQ4YHFPWjg/ajZ3Zy5QIW83ckJoVF4se3hSfiVKbil3QUsvK0pYeytleWVvK0FOYm5UT1hWPVVQV3JDaDV3NDskXSxlcHFNakIi''@;'; put 'put ''Uk9IbUcqQjxNPF4uXW47e2s4cH5mNFgzNUQiW25EX0whRzZDS1txdmUyQWs2Mks0YkAuPl1xcFtuKHQkX1UrcTU0bGVXXn5VRVppP3dmPVZZMCRzX3tzODBLZEg5LHUhNTw4I118PV0rNUlGJjomWTh7UXxCbEMrbTdtOkMvIl9EWFVJSldLZTM9X05GNUY5Ylg2OmZfbllaTl86Jihmd2dkVzJP''@;'; put 'put ''ci8ldDo+flFKL0pfJFRBKVdhLDRqZF40Jj82eW1NZlpKZyNsZGtrajp8Yz1uVVd9QUB6SV84e0lwTHoxVENlNT8hTGN2Mnt9RXddMnJkej9+ekAhUC5paXY8SntsQiRgQDV6ZG5zO0R9eyN7XUMza1lHZkMxcmpTOWoxJVdKLjFjRSJYOTdveEprU1BMT2BAej8lakByI2VGJGhVUT0iLkxUK3RZ''@;'; put 'put ''ZXI/SkgpQzJBMz1wVyF3TDZ4NnR2fnEwTDdfeSF0flVbYzc+QklmTT5wSVtRTCFNfVYraTYqTXBiKy97aVtAO3wufFA+KmdMTlBpRSJLZ0ElKkd0NUJ9cjFFMG1xMWxZMkMxPG11ZzVlKihXRWAwdjhSbXopZk5jQ2BoTUJAXiVjcCUoMD02b1JWYFJPb0lNdVsoLzJxMndVXlAyfDZ4Yyl2SD9o''@;'; put 'put ''OnowLGFZM2p9XyxCcmJwSk8iYS9XeH41ekhUfWRNaVt7eW9xQHhwZ106YXxlVncrRUp+MVZYS0siYTU+dHM1Y1VZVHNRM3YvJTIqZCl7T3YsSCxJZm52LG97WG8kT1VFdV9eejxNSVZAOCJOWFdDcz0vMFUxYkw0Oz8jbyRuaTtBOXl5PDZmeFE8Ok5qSWRoPTxQa0osTyRYU2tYSlsiViZ7YSM7''@;'; put 'put ''UzlMSVRqMjlgfCk1PkdQfj1gR2NBaE1MOjtwOz55cjs3JFUoNSkzO0lJWjdDQmk2Z3J6UmE+PSM7QXlFVkI1T1Y+S0x1emlCcVUrVipXQn4xR1BObzl6PDQybVR9UztDQ2BAMEw+OkB6JXlHNlc7Ll0uPExkTiEpfWl1QlZXNGkkcnBsZ11zOTIxcWA5PzgpY0VmWl5aMiZOKVZBInV7cnUzYzdF''@;'; put 'put ''NnIhLzokWU5UOE48PkVNRSl2RkdJIT1mLjQhNSVMfHhBMkl3NWxwTj9QeTleVms9azlvbm09bExQQGNAR0VGciRXTmNPMHcvSnk6aUNLRlJrXSFhaCopOSEqU1ZbUDp4TFIiMWUjQkpBTHR0NjtuW1NNOylndkozblM1P1koSmJIUC5CLE5XbXtPI1s4ODErWilFNnRMWWRHaEdQLyx6VTE9Rz5H''@;'; put 'put ''dkl1eWA0XW9PKHs4Sks4dEs8NGFLYCEsJD1EQEZSbUJ8NCtYUUF8LDMqPmxgOWF0bjlDPWk4fDNsKFUhTCtqQ29LOFFxXXRUS05jaUBhQD8rLyRoLj54cHhhc3JGcXxjSVIxIVJTPiJQI1s8L21tcEJoTWoqaFd+OTJhakNEY1JPSjE8dFdLIXVgb3g2czIoME1pRzIyZEpIR2NALDklek9MVFYq''@;'; put 'put ''ZjxuKFJzbnNFXUZSNFBkbzE5aXolPXhOPylmcywvZDZbJkg2ZXtfU1QoZ0RBcntodSs6Y0hwd2dPZStfKyt2dWJzVkVjUEx5WX4mR1crRkV9T3dNLjB8aD5nfWBob1l6bXN1KHJaK28hMHVRNE4hTklQWDpbMFtKPUMuRUl7WSltN2hRdFpbQl5ieDFYXk5IVj0/b3Z0dUMlIX4wTSxUKzJ+fmsu''@;'; put 'put ''WX1ZeV84MVVOfENANEdmUXh8TTNiQFk/N35gMjlpdiUqND8/a2hAaixORyZlcVlnYWYlWyk/PDxRYWVFKT9bdnZnS1pyS1FVLGBRMVBwJGtQVD5gSmp0Uj5eZnlaaUdZRUF0LE42eE1bLjhQdVVmZ09UN1VOaUF5aTw+LyZsanVoQHdbYU5MY358JkVjblZ7TF5RcUxARn1FJHgwN3YhQSRRSCZA''@;'; put 'put ''Zl1RJHExen5RMHFZaEteRlMqakVyMjtDMmUvVTIpPGpFIS9kclN6Xk5iSjQsSHBVZHhoLz4rdlRdam5femJBOU13P1dEUGV0blYqdShYVURfeXgrM11yW2RUVzhnZSlpOWdRLjVQOWFNPiNKSTdhcmM0TEBBeyJ0Li96fW45Qko7amxmQmwsNlFIWCVddl5ZS0pUPDtQe2R9Iy82TSNkNl9hXUpr''@;'; put 'put ''WW9PdVJ4aUk3c2YodnM9IkZreTgzXTNMaTxCcH1aSTNjSnh8VlZJNipVL1s1Nkk5eHdOe2VfYy5BWSJWSClXUXxCXSx9PElCeH4wMXB5Il19dyZCc2hYTnk0ZTM3ZVFockNnNkdLJkYuS2U/fDclWisqcG9FPFB0b1lJTjJYPD08QnpKV2AxbC9iTFc0K3VBWD5NZElmOz9uMFpXR1l2Z151I3Zg''@;'; put 'put ''P3dMNGhecyxheChWWjpYXVN3bCZdeT9EfUNxaCxkbHUuYS8vRmJadClpS3cuJEhEXntJXy5QPTM1WG5vZFRoRihLMTNKKWtUP1dISEsya2Fofm1GdGR2Vkk3PSR+SSg1UVt+dF1bR0AlMkNKLio2YFo+ZG9lOSxdYz5deHp9bSxvPj9wMz8rZyZMdFQuL349PVYhdzJ7b3JEalRiSzB5fmJMVSpH''@;'; put 'put ''fWRiakRadjQ1S0xVXmJha0FlMGcickBWOWRQRyMrUEpENWRvYChbbz5EK3FLNHdLbFQpYU1KL2dmNUVzXVdIISNkWXkmJGJ7KUE6OHNZRTo6dE9+K1hZZSg/T0dUKFVQfGplfGNRUXcpNW5deXVPdyFUYX14I0xnQ1FTNSFtbUAkTTIiRnJNcW8sVG0ka3RRO3dkc1NSdTBfamxdIWx1UlJlR3BI''@;'; put 'put ''UmM5cjVhXzMpXjZkPW5vaT1WeFIkdlY4PUZga2Q+PWZyW11iNDtARGUrPD4vK3BkQC55VzNZX29lPDgwfExDfTlkdytbQlR8bUR7QmM/e3tzUkhNUi5CTEhwJm1mSm4mRS4mR3okaXVyUHN0flsmeFp0eXY9WXMuWnhtalhvK3FiTE93c0NmdUlhPCh6antiWmNhTnAuSmc4JlZsIkNBNDs5NkdZ''@;'; put 'put ''NWYkLHh0ZiVaY0AlOiRYOCYkOWN8JTJaT01pUyVpK29ZeDMiNF5WYi8rcjRIenxzZmVRdWVtWFVFa31nM2V3ZGlDK0tCaStXeG1IZlJoZSImVDdTXW98NHBUIUI3V3U7Q3Y+V3ZmdHZAOlB9ZlRjeWgiVFdHRmpgXil5OFV5cW5aSlBfZW8oUXluNyQ2OyQrIT9lcm5OeU1VYCVeOTskYC9TKDdr''@;'; put 'put ''ZTpMfD9DIlJ0KSIzOmBodzxFWDh6Y3NfZT9FaShjcDljJVNbempFWXh5fDBMdSE4cDU+dHAzImNaVVllZjJwYjEqXTQqQilFNXNPUilDX0xJTUhyP3dIZm16eXxTXj5zXkBQX0lhbXpaOzVtI250XzEkdWxYdVp6KHRmK3tJSThxX28zLkpYWyZFV3VlTXpfZ29HPEBFUTVqZUYsX2kjZ1h5KDY1''@;'; put 'put ''MXQjaytCUzVrZCNqO1t2biEwVUMmUzBSVTQ1PDlgZ01sR3VaRHFjMik0OShbUT0zV0ZoK3RpdGZ+d35bcD93UGtTPTdIXV9PQlJXRHchRlhEYX1tWnNUXX1PMTZ2Y2YhVCwsIWV8JTBoYFhJKil4YjdNbGhTRTh1Riw0IzhBOmlNO2JbV2xLPUBwNllyfV1KTVtNYjk4TjJlW3VCREFIVDxWYWhK''@;'; put 'put ''fTcrenRXUHApaGRoLixUbWtETktyVSI6eCRKcWBNXWl1QGBbTzJ1TCx4REQxayZLTGMoPS5CRGRXVUxTLiVuVGZ4O1p7cDt9SnghWW0iNU5wRChZPj9oeE9YbzhMUjE3Tmc1ayNpInEheH5qWW9mJTdfdSJjcHlLPml0PVEqNXU9aXNkb19yO3lIQVI9SXNfdktHLnptIW5zbnlRWzdwNiN2R2BE''@;'; put 'put ''dTNBQUZuZzNSaFBtbVNhR3csRFBsais7bCNjTklRL3QpZ3dBPVBALjB9cWpgJGpvIjNXLmJkejFQIyhCOT1Rem9CKGc5JC5ecDUuW1V1KHx6ZW9AYksufSpPJGZxOSlRYSZkfXhEKyEuIzNPZ1p6VDhpIVZKX0k1KnUldzsyelRyLGxsRiMqb2daYmEuYjRpNUtDKCxfelF+Iy9eTUVfXVZXaDps''@;'; put 'put ''I3I/KzUuQT5fNSIqfFgwME11YDUlfDk+U1lqeE8kV3YxZkp9QywzdFB3bD0vfGM8Q0h8QDwjMHptVit5QVZPPlBzT0g2LEFPajNIUVVCP2siVzNbUWBfL1A9P3kyQEF+YThBcFg4WT1ROkhVTkA8ImIzajR1cW83TC4uUTRES3x+bEVNWTZ3YjRtMTo7NyJFTXtddVZrbUhjTX1ZSTpGJkx+Q15e''@;'; put 'put ''LGErMElteG04Vm1XVng9M3FGM20uKiVBRXBJWzMpYExNSFhIaDFpRT9jR311XV8hVyR9Y29gLnYsMWxFaW9uT09DcTVuMX4+PmAld1A9Z3Q/ZGxebmV+cXBLQkwoQj8lZn4+dlBxPzhZeWlHSHlkR2hCTCkwVCk8RUFFZXh1NHQuNFNjUmNxJCRrIy92NUZCYUpUNlcuRztpaVU5ezQqLyxkISsh''@;'; put 'put ''JDl6KGJDdDh4e2A5UmlGdzNpODQybylaSENRd0k2PToxeGhPb2RndEReYDJCJTAoVHkjaUJQKmxPUix0QiZbRHRZUHJgKVR0LzA+KVk3NDpMaixuM1h7Kk4uSS45Sz5GaDR8ZV1rbWVsRzRjcEw8c086SUdFSC56ZVh1ZFNqMTU+NkksNEl3ODpCVFs7T0lFMUJ5OTVAbmlDQ00mfDZSM3dITW81''@;'; put 'put ''MEtYPmUxQkRZOD4iJkNZcUNCIyNDfUZUNG9AOEwzdCVBSjxUQVV2IW87SC40cVYlamUhbW5Kd2B9RjE4OTkyVClQT1E8YVJlITchP05wWlghNFs+dTBMMnUlQ0kleiVmUkA5KkFOc1dWQXojMGpKMSVDQGYhOjUmKF1ZbWlKMWlOe3tHVlBUTyV9KUQ9XkxAfHB6JWQzKDp2eX1SU1RBJiFac0h+''@;'; put 'put ''JGVnYiF6T3NQIWV0QDlPRmxMQlk+aCx4UVorPE09WnxYMUs0aGZabjt0eTkzSX5PTWA/RD5ZfEpjWUUpWGJSe2JqaURJaG1qKG1vRXtPXVlrZG5CWjFLOnhDTExyUEBFdDc+WHQ2eWpNQWVDdHhdWnciUFBDQltffTh3eWpTd1V+YUJRYzVHI11oU3RtR2JUNkp+UlA1N1FPRl1yJjtpWWBncm8y''@;'; put 'put ''MFppVCN8Y3QiMWZXKUEuSz1wdFo0SHZLTSI8R057KlRzRWpxJShuaWxTTnckMG1kPlhrMz0xTWNeRVhtOFQkXTM+WEAmVU1udTF1NFIpOlQhRyZFd0thRSkiT2ZCNzB2QUBMTEhWU2xsUyRwXkYuaSw8cjA9bmkyXTM+YWx4Kmk1czxaPzIpXShub01dSFlrS2I0OnMjaSpXZFF4MGlram0hLmU/''@;'; put 'put ''RHI+fUVVeC58fnsye01iJWRzUj5HXipnaCU2OTc2L21VJiE1cjhQIVpOWlhvLixuXklVPU9EYzxoT09CVjFeTW0wQHlDLFh7MFkkTSVbMUJTbF1VLnA0TnJ6NSFyRmZufl5QS25KSmA4ODFYNSx7bFA5ITJrM1NeajxGT2RMZGBiZytCYyssdTp4PX1yeilISExJLjcsR194aEo4ZlU0JEppWE5F''@;'; put 'put ''XzZzTmdqSjxyRiRjYiV5MFFkfShWLjFlY1k+NGxqM0VSPjZ8RFsuNFkxYTlLXU1TVERtL1lDUCJ4aXVOck82PiUlfl9OSlZTSUdlVXttKEphXSp6YCE7aT5ZK1RhMTI/P1FeZWVpSDRNIXYuZFU3aXQ7eVEyS3ZeN3VETWxHLlMmVHxMemhYTmUxeDMrayFeUHswMDF3OHs9YW1sJVJxaUxnKkM8''@;'; put 'put ''eVJjPjhUdEYuNWhmQUNqdzEyQzN3ejVjYXA7eT5haHNpTHxwZVIuLzVuVllAQkQ3WzNXbkFFV3AmRUV9NTUrZCxTQEIxLkkmWDQ+UXdbaXpHblJDfkc2NTZJcn1BciUpW05jLn4udmo4MDhiM0M/R2hWMn4hT3ReW0Z2cmBnVmBlNXEzI1lGPTR9KUNkfDoscG5CaTV2bn4oS1A3YGxPeUlgIkt7''@;'; put 'put ''TXhtNHcsPmVJVVdGTE8pOD5gVl1weyZuISVRNCZ5JGB1QEs+TTdHYXxrbiN1Vl9ZLzlWcFtvS1FVTzBGWyE7PTo0WzxESCVNM1svdDQkN1ZUIWNPNV0sfDR8Y1pAfSp2TlhFQVUsRnYvbFZSa2d3WHFMSElTW3RzTWhgMUwxLzRUOStwa1gyNjA6KWVnISVBWUUlJnRzfkkyJmsrKi5QSEJOO0t+''@;'; put 'put ''SjxffD5TNyRPVz9tVzx9UzUlPEp3TC5KbSRyVGdXbSRMO1coOF9xW25uZkRsLF12cmZKaXc1Wisua24pTDpWWUh4RDNba3YrLl8xWEdkRixMaGg1K2V1Q2JZKFljZHhKbUddO29wQHo4MiZNeHo0ND4mez8sJj4mWH41QmBLP097RGZsQHY5P28vVWNPR2tWRCpwSXZwVEBKK10hYUV6aEk0TTRg''@;'; put 'put ''am1UNEwwNlhdRzYibmJlaE5xUFAlajtbdUI0alUoRGFLW25Gd3N0cXBALGtqayZlISFZN0VJR0VxU0Y4W11UbUZ0VzlbWyEqbkA4c2poOjVzVVcydllacEtMcTsiQFp8UkhPVHpHI3RYbV1RPT99QGRWPltxeFhFd3BtLih8cWs7IVdXNTQoUml9K0U9I1l8NmJtSzpKVSRlYk9HVmxHTlhnQnBX''@;'; put 'put ''Jnk5SElLVTF9fGNHTz9yL19vMkI4UiUrMyo/bn1ePmV2R35zcl5xMkksamYxTkdJYU8vL040RXA4WD9tSXcmfDVGaSQxXytsUD4rZElYTGhqeUZJKUJAWXgrfGtYd1hiLiM2RzsjR2J9PVkqNnljTyV5eGh0ajQ2d0hoQy9EeUgyVjJzW3tTd2BrL0UpIXtZW0JJL09dW2RjNVosUzxZSEJNPiFA''@;'; put 'put ''SjJ5JSVSTHo+KjomQFAydkYraFZYaEZ0XSR+RytZTDN3WUNqNWFCLHYkZC9kcnZpMGs7VktSU1UvJipNcDhPKjVWN1MuVitmckZ8fSE2Ond2MytlQiRHSlQ6NyJJIlNPMlk5SDczZGhjOVcwZGV3PWgvcnRfSCs3bjFIYVk6YD9tP0J6RW4oI2xdS3Y2PExlZiQmRTxtXlcwQSR6aXBYd3NYREN1''@;'; put 'put ''bmNZfk1Rc2VPLzpYW1tbckRkfH4jfEx2SjNAfD9QUjthXkJ4OzZxaV8pV1FGZnN9c1ZKRmxWdnJZVnJfKnVKUlk8IzdkbS5eMjUmMkBRcFtEYElnMGVIVlgoUDA5TVUjbkVtMj16LE4+O1t2UDN1OHRHUTRpbTpRPntrWF1Ma2ZIJnBDKGhpKWd7Sy8uZiVyLHJIe2o/QXU9OSkrIjNxZXsre2R4''@;'; put 'put ''K2RfOVp1T1UyKUJAeFB2P2AoeFddPDMpfil7ZGZWckpoeF5TLHMzM2owN0B2dHdaU25yS1Rba2Q8fkZgR11zR1Z6Zz1pLGp8bmZpODp6MmNRenc+RGlXLHA2K2ZPZDpyZyl+MUpiVlRoTzwqWk1Aa2lbRyR9NHR2eH4qbmB1Mm4+Tj1PYzU+VWt+RFBzLjFaXTNFQCN8K0BLKDxVUiVHbFpdbHN4''@;'; put 'put ''PUppRmM7JiJuTjhZIl5IeG9jflBocDVXYjg9cDhCLDo+PkI3bTxodnp9PUQ9VCx3fmhDaU1ubXhvc0luYj9zfm85OXk7bUVyQW11SEdxOnhAOSJOWUYiWlMxKVk+JTghU1pBSzgwUmkqYW5zZS5JKkFyMEJqMT9MSiwsQzR+aTJ2Sy4xRm0qcHJZcj9mUjpeTDE2d3IrcUhnfW8+LEglQT5rMCpW''@;'; put 'put ''KlAkZkx9fm9ET1t6MyVgM2YkKTlMNFdRYzFoY016TmpZfS5NZkdKUzIySCZUPUs+fWN1L2tdNFM2YUV3di9VK0VmXXErXjR+ciNzSGZIRUE9SlVnUUNWKEEidFVtaD9pcks/NV0vK11ddyNndy5GSTdBR0wsJWk0PkdvaSUzRk5bczFCPj8kXSZrW18oJCxvW1ooUHg7dDJudkQxOXVeUnkkKH1i''@;'; put 'put ''ZltKZnt1Ok16NkdIMDE4Nk5TO1U8LnVDb1FsKUU0JWA3UzhfPzNtNV8uKz9DJlE7KTg2OiJyLGRlbzdwMH4sWS5nS2koM1duKy57aVh4bkhpQlhYTnV7ZTQrOmQ9SXtXT3FfWHV7PE5kW3NUaX1rZ0NdXSNCMjhET3VMaSJCKmgkYX1NX1QyRmJIeDgyO3JtQGFUIyxtJUAwLjIkOWRVQUc2aTJP''@;'; put 'put ''QCR9Lm9RSH5BJlFjTUJKZUlbLz5kUF14bVJlO10+OShGeiNvLnQmb29KQi9nRj4jcV5XZWlEX1V7VyUhWD9LbS9PcC9OKT5UR30wNVRhMGBRK0BTJChAUXg7KndCVihzQGYvJHYyTk5sa1FUekYjd3xFRkNvcTs0VFY3Tk18ZXxtR0xVJXtwZnViLykqWnQ5dWNqNWBVbWVxM205b0o/Uk55Nz42''@;'; put 'put ''bzQqWlQzOkoxWjV7clJ7cH54ZGZeUXVyd2EsN2BDNk87Pj18LD5gJUdFPmpkLHNMflpOJDFZVlQ5bEd5aSghOUw9NlJKMXwwRmJ4YD5kNDUxdD4yU1deMWpDeDRld1l2MTg5Wj4vfnQlfVA7YzAuPjJzQVRLa2RfPENPfFk+I2BJSC4xKSk5eXRSaTA7UFhwL0lbNTB0Ik03ZnZtQTd6KjIrYXws''@;'; put 'put ''alM3T2I3KF8mXWQ2Wm09K1ZyR3BYSHd7ZEo8XXVNaXFqT2ZDWFlAfjlTY1tqfksoNTQ5JUhfLFFseSVifDpDZDVPXyYpbzVBQGwxVF12UWZ2P1tuMDtyNzNsWUFzaWMvTUQqKW1Vd3hKbkIpbDsuTD99fjc6bSF5Nzt8Jk89bD9gbHhSJmdHMHArP2JWKSJdcCNDYmY6bjdfXSZsPX54PjR3PUNP''@;'; put 'put ''Y2tvaHBCWlFKfjVyPjhGZ31tPzFQakNEQHlGSF9GVCk5aSZ5YmdpWy8yO3soQ2UpWVorMTJWQiZYZyl6OTNfVVR2eDJGYSMpKDJub1Y8JnhCWkp6RHZDZnUoTCk/bGlCVmI3JjFeMDBKe3k9W012OiQibH4qYWl7NH1Dd1ZlSylGbEJ7JHx4UzQjKXxzYi40a1krIzkleShaR3hXcnUwNHRFVGVw''@;'; put 'put ''Tmd0Q1d2KFN7aXooK083MEcsU189OyFjUDFaRSVrN25mSmdeMHpocGR0aSNEUXxAZ1dCVUh5a0Z6STgjSnRPYmF3RE9NamFGLFh9JDlKM3pONC8qL1BjO1RCVWJiJEs7RU49TlciOiRqR3RzdHsoXTY3ZzNZVUg8PXVBaENJd3ZtYz0+ITU2bzxieF0zVUplL1tLaHtJZldnSndWXnNOYSEjVlpy''@;'; put 'put ''OmY0TVduLGVKdkZFWH52d3d9VzJndntdejE3JSlZdilmcVdaKlIseXRMJTwsODgsVV1yNF8wX1gqXiQ6e3wwXlpvfjEzbWtXU1FCW2o1dyg/dzJOayRneWJnRSx2bilOQEU0KXRZSkVCQT9UPT4kRnMvPzFOW0soO28/KXpfTUYvJFVoUDhtOVgrX2MvZUAxNiRDc1kwb18mSUNqLGg/UnZEZ1E/''@;'; put 'put ''JXtDJTdOdWF6WGdYelM1b2MzNUQhWGY7OH5GMTBNYE8qOjohViU5bS57RiRnViZMR3JbLlJOOzd0VEJgczZVV25GXStWTSx7cF9hSj5TMG88N3thdWVnbDI3Q2VvQj5EWm5ATE1CfT93UGs+RDh2JlYhfSloSkg/dVBBZnZRVGhZXzF2Kzl8bUlzfUdrVy56MzdPbCUvITxkXjo8WDUqcyNANGxk''@;'; put 'put ''JSFzRC5aSW1ZM3tSJFpXU3I2T1JnLGpdIiFWJTVQVylndDVfNUFPOkZbKyFxUFIhPXJTNjoubWg2TiRJfSspODFqR3JXd1hIflsjL0o5QCtBYS9TRn5XV0RNM11URk4oUSEoYkB2SXxWUzsvdm9WX35YeitkRDw1WXZ2TWU+XilGLCVMVz81OTR9Ky4jYEs3WWB5UFt8XjZmMDBoMjVMZk0yW3d1''@;'; put 'put ''ZjFIUWhdZmlkJDtRODU9YDVmZko0WzRIMXFjNHRuPjQxNVVuYGpufSFgeElOSXVLNyRBKyN0VTl2YTQxZUx0dyx7aU5wK2RwSC8zQE8udGJDKjN0YVJsZl1Ee30lKi9BLjojJV0iOVN0YygqKDw4cDt5fEkxQGU4SXNCVU5Ed1FuSGBxN0B4SF4uXWBZbSs5TCV1UV9TJTpYckM6VDklWjQ3MilT''@;'; put 'put ''cFZbZUcvOFU8ODxNd3tOI0lJLGVlUEQwZXlCaXFUfCtiJXtiZ3UvISxfZTVCejI9RlZlSHZPS35uYTpUNUQhfFNWSSpScjFjRzwhODpbQS84OVcifDM6dnlFcX4jens1YC5Bd2Z2MkYqVHpjSWpxfEpbWXV9Qlo8VGlrKywlbmd7bE1qIzpQZkAhO2VRZjQvOCE/YjJWZ0NyWGt1PlJdaj82eCZ9''@;'; put 'put ''MGZVXnBTeFp6LHBWUEM7PnFMPTlDfkN6YiZgamU4S0RiPWg7RS5dZD9SZmoxe1B3SEhrVlNVekZnJmo/IW9XTXN3O3tCY2R9NX0jNmRrKkJtczYhcUB9TGxQbyR2Q3UuLDN+QGwpcDlpXj40OmNmPDA8ejp4QipkVnJPcGR5Yyk1Mkd0N3x9OXdyPz1iPEVzWUhSWGU3RCF0WTRoJlpVO1hQaGA2''@;'; put 'put ''ejtNOHpgOTREJko6MWw+azwhM21vWVMhVjIuPFtLeWAzOUh1dmQleDxCLHJ6OCIuWHtbOlVCKm8pJiQ5ejgjfEpwenJ8QzxQKFIkY2ZNcEw7YUdVO1ViOStmL1kzeEN1SU9MMjNaM2tNWVsuaSsiej8sZHhva1szM1g9ZkI+TFghMUM5WlFBKUEsbHFWQnw4LjBycVJgR2c1aHpRXUNBXndXX1lf''@;'; put 'put ''YDM8Qjt6K2MyfVYwKlliSz18YlVIK0g+JVolVz9WMm5ZaXpyaG5DWmoha0FxXXVmbit1M3ApeyFZR1FVeEtsb2JPTmUsdG40e3lZcmRjMjZ9UGUmRSI3YEJmRSUwVD0wXnNGfGNbSGZIRGNPfTE9eDZ9a2BqWGZuSGZFTDlkMFpPbDgoXTJtNnFOWmY6fEhDOnE5YTpObCNnLGNmaCMmLDZfI1Iu''@;'; put 'put ''KWxfaWgyVzwyNipUdmQsd21ZJUN8UUxAXjZAU1lWYE8sTWkuM3swTUdjT1hAfGUzWFh3WDE1aChUTz19N2IzbUVlRG9sJlNvLnxeMlQqYyRSMDE7Zz5nLkNbT0tmPih6M2BWJCluem5HPHxDITI4PWs7VEJTPS42ez0mOThvOFQ2bm9LNUNxPjRyOFRqOCNJUS9Uc2BKbFREbSJ3OE9YbmBHKzxo''@;'; put 'put ''L109elNiYj9XKW4jaWl3TSUyMm4laXFVZSZ+M0pkZDpZfkJbNUJndnZAOk1JQExJM1BSbG1WcEgxU1s+bn5uOig8bjA8N1d8bjtUc2JmNCppd0xJUkJbK3JUQDolKXB0YlFUfkw/QDM9L1txW1AlalFgWyplOCwmZ35XR2NBVmJVdWd7WzUvcm1fOF9AdT9aOykwdihdNDFFJWtmYFloYT9IMykh''@;'; put 'put ''JXc8VCFuaD8kKWkqW1AsWjZWdFlxRDNIWTh+b3NUaH0/WFl7TzpvbHdEQWZmVmV2Ry4kdmA/Jko0V0REL1FaQ0NENStHfEwocnpgRkNXPmZDYUVbNUVUZ29rJkB+VkV2aVNud2YyfHMxNyhmMFBeXz16L0gyLyJNQGBHX0AxLzh5W0EveVAwW0VzNy9jUnkwWWh6VUtwVV1icEdjWU9fLk10Onxz''@;'; put 'put ''QDBQU1duYDg9IlhfZncmeXhXT0AlTiVmbHwrelQ7cmlAdGNMWzc6IUp3MHwvK21wdjhiZWgsMUNmTEY9dmI1IzdUby4pJGdMeztURG1CK3slZ2IpMkFLKjIhbl9aR0IyRndbVGVIRSgyZWtaUF4wQHxrUm82JXVXLFVzbT17VjtPR1VYeFE9Mm9HZG92Tl07MXFNVnZYNG97SSgkMn5qYT9mVnhj''@;'; put 'put ''IU1tRyVHbnA+NlAxRE0vTUkrbmx+MWxOI3ZbfH47ZTNEPDpUfmtJVUlFUz0zenkwZUhpZWsjNm40SVhHMnF5VylNV11+O15sR3sxY0liRT5oLnhvblBYM2VgQDVXKmd6PF1OW253UTI0Slg8X1k7OyolTyM4ZVdOMEwvPTBtMHAuYyhJOy44JWNuZHB4YCNXT1hoR0U8UTt+YCF4RURyfVFralpu''@;'; put 'put ''fkgxc35LZl8hIzs5Zi99NTk7bUVlXnRJQiU6YyE9YDtVSnhrSSZYcnl5UE9DOjlGfWtZYndFVE8xZWY+M00sLlosK2kwLiFJTjI5Ym1rXzh7YiQ6NV5VTD02aj5oYShndnQrYlRoZHM8dGJUZ0w0SG5Wcn0lSzs0P1hMTEhyMXFWbXUpbmkoN1c3JT5KeGAqUGYySVtoY2ouM11tZ1JbKVpCcEQ3''@;'; put 'put ''Vy51bE1oL2VQeFRkPXxOS3FibTU0MEVNYnhNKy9pQyFLciteTzxIUEZSLixGVCU6TSt6TT1JclI/ZEoqVCN1dmpKey5oZHMvL0l0KTk9SHV4Ry9VRURyMENkdXFtVltAeWUufDw2NCpZQVZCI1R0SS5TNWFvbSlPSUcxMX1RWkNnZ0VBN3ZFa0NpWyhnS3IuUV5SJk0iIT97fjlKZXloe3w3NTUu''@;'; put 'put ''YiJoK1A9OnlFSjZIe0FkQW80Qyk3bmQpOX0pL2lgVkc3bSRaLmVOZ2BYKzhlcDBvI3VsckplS0pNNDx3MnlPMzF5aS55cnxfVnY9NEoyS3hvR3RddkhNVyVKR3M8cXIzMWc1O08+ZT4+RmZfdUc+WjwkVV91OWBRPm5jQEZOIXw5VWY7VTwycHQydCouW29qc2xIfHBoaCREM3Z3bmtiVF49Wi9t''@;'; put 'put ''Y2xmODRHNz1DTTEvfktuLy5jKEkmXmUzQkg5YntWRCo7a3lvL2lSaEMhVmhYVGtSMG9TSVBtQiRwaTo7ajFlZGlHbkNjZD06eChjNy88UUswNVBsJl4+KFtqPzVJJExCaD1rYXVWTFhefE9YJitpT1VhbGk4Vk9qV0AyPXNxKC9aeTUyQ3IzbzQxUTxVc0E3aUtBTmwyOTdtTGV3IStnO01NVCh8''@;'; put 'put ''QEN3JDFySzsxeXo2QHk2QkZYU2A/alpeSj1bfj9fQ013NEtzejdIYWA6QUoqcElGSn5YO1VkMn5tVWM7Yyk5cjVgUT5wd3NlQ2lEcHNxJUkuPWcjNkQhb08qezBndHsqZCpXO1Q+MT5aZiY/N0BWZyolNTlSdHJ9XSs/Oi9tSzVoOks+Xnt7VzkubSpmelt2JjU6NVtdbyg8MHU2ZSIhaytlbmNB''@;'; put 'put ''YzAmQD9DMkdKRTFWdHs8cT9nUXUwN0c6b2w5LDxsTDp0KVdWOT9QK0tyeHtsJHBjUmouUC8uPTddMHg9dmVEXTQ+REB1TzdXUC4penNhRGVGbCoqZzNwbkVTN3YqKms1MyF7cTVaWSImM0JVPjszKm9gS35yfWddemg2R2sjPW4oJnFYSGxvUGdjPDBmWDUmci8jR2Z+TTgvM182bkJmcztHc24h''@;'; put 'put ''JWlHfilOT2AyZWt4T1JVUEUzNnA7cShoRFFEcW0qR2RQYlVdMFN9fnVQTWIxRmVFSXhPRz0jaCUsN3EsM1oyX1JyV2tWbFE4cV42cVVdWyokS3ZBITYyY29jNzU1QDJwb3JASkh1PUl9T101e2xCNlkhNz1CQygoJSo5fG1jSzZhb0Nbem57QFliaWxNLl1QLz45Oj92ZCxvN21hVEgvZnkjKGxG''@;'; put 'put ''Ml9fNHU7NEljY0ZJQUdlaj1ZKmNuT1YsZCRhYUAuSVpFe3lIOGBTUz80fj1VYU8lZ3FqKylWa2NyaGtbekkxa0x9UFN7OXBsajNzdDBiTyhaaWFARWtrQGZJW2M4YFFKcUVMNU9NMEhzWF1DVk1VM3ZyM18sXWAwcGV9XWpLJmBdKnUjSzhVcnR6RyVQO0N7W0BKcD86Izk3K15UOS5KZChxZ2Fj''@;'; put 'put ''fEc2VF42MGxSP1Y7VFJnfDAvMlZRZD8uSllWKitpcVE+Jkx3fjB3OV1beTJWXzR6OC44S2twTDMkNkxvW3lwPD95aX1EVlhNRVRobzkwYFFtODk4SWFFfnVJLzdbT242UWV8MXhwQExCZylkVWVycWtZMFdVOzpWN2MidCU0SzdSQlBtbjZoc1pNOzI4aiVWO0d8dzE0R0pFSlpfc2IwVSVXU2Q5''@;'; put 'put ''X19KaSp8QSVuJDNJO0VeUTJJamsrdEJAb0pvMXw8PyEhOi93bFJqfm5HSWB+ZnVQWGxMXnhobmBiMSJmQm0laG4xazEvNjtVTjozPGcmW2wsLigoe1VSaDRJNzFxYFN1ZyVaPkE2cFJIPTFtKjNpSHs/aERHfWw6QGUmc14hYGB3UTNmdCZdUkV2ajpZKjlxOy5JM30hMSpqeGpLbj5iOW1tYlZK''@;'; put 'put ''Y3csXmx7RDldPFNqbV13PDU2OkZ6PGc3Lzx+VVNUJVZXQn1xNmU8N3g7LyE6Wz9MY0FXVmZkYiN8eHhMMDFISko2NmlIN0dhO1RfUjFqbXMmblomZ3gjZmUubTFAYmhaLGQrLGooclY7YSRyMS97Q306UjMxZ2hpLHpZdylhUGhgelI4eFZJdHVLbmJOUV0ibSNSKFkpfUdeNFJwfjtFdTFJcFNK''@;'; put 'put ''UXZWald5ODZXK0hebDB9eTtHNDN0dEcqUkskaDN6Ykd+Rzd3RjU/XXUjfDRpKG1JZz0wQER9PH1YckJnUHNrSzV7bjxhamBMPiMzWXI7NEE5RGYmIlY5K24pTSsvWXA8SGxqJEh0WypRQiNAblErWTApRnwlUU84PjpeKjhedkIxZCgmREJPU2p8cHcuP31AUl9+aCxOfmc0NkYqKiI2PSJublJX''@;'; put 'put ''ayQqTSN5dXw2PXxSKyNVNlZEPCZPfUtHVzl0R05NL20qZSkkckMoIlBlVjh4TlFKXV1JckNlZHUqaGRiYjlJJncxZ3gjODNsWHBWaC9vSldjIikhVyp8KjBqLzM8LnleYHBaeUh9I1pIe2U1Ln43dC5dX1FHeEVEVj9wKkFHWDhbKzcoNmV1aWMmKyo2IyN6eDxZYWRhMVJEWEdBMl56YThobyxp''@;'; put 'put ''cWQzL2B0bCwweiVEVH5yYlMjJU5KLH1gaWtiJlN5VHVXNSJmR1dFZ00hZixUTzFVX3khPXVHOmA3WypXX1k5cSIxO2pRLD9MIT1KNkpjKiokWCw6MkVaUD9teSFeOiRtWkc9ZVRUJmBaeTdOSUZYdXp4bVQpZXo8NCFXYEl3fVdobX5lKCNsdXAuVVA/Z3dyayFAI3Q7MHl5JnR9UWYwJCM7ZWB5''@;'; put 'put ''UE1xX0cmfFZZdE57bT4lPW5oJmg4NXprOGVFclNXOCl3RDY/M0JkNVZDfH19Sj5laXVFan1IR3dac1N2W31UelUmX0s+WFYxN21ZWzU+OmhXITEvQllbUFcjfD9hPnFINlp3KjklSyIyejg1PCFWNFtQJSkydnVvJSwrIkQrdiQwQU59dCppVndhXSssKjM+cF07T0BUUmM3KCE8cGdsU15+Z3gj''@;'; put 'put ''PEhKYUJnNiE4ViJsYlYwOWJte2N4eiIuJCxPJWJmJU9HbGZofElQRyN4IjwpbnJQO0IhITtsTUJMbExlQzsqNU1sZn15US8/VzkkWEhDa00jV3d4SUF7NVs2PEkrUTBbRklyLD94dHFUVCFZKTY7P19tfUAqI1N7P1Z0b2NIXyx8MXtaelUkRH5ALFYqKHJOe0AjNnkrOzpTLExvOVRld2gyTlN8''@;'; put 'put ''cSEqKnNzMXo/MC8zLHlMUEZRbi4/PSFbJXJRbmx5N3daTkYsSHdreE1vK1tSQUBSelM9Jj9+PTR6IlRrX19ddihTeExdfV1FXVphPD0+ZX4rPXQ6SjAhfUpzZG4jSEFCYSJNNkJCdC9pd1VnMDZ4QitHOVkkXjxFOzRhbXtgLHZdV1FGcTA/QCYkSn1fNyw7LDE+eWIxYnJ4WyQxaE0xPztwXXk0''@;'; put 'put ''cCYsUjIpaFl0RUNUMWRDR1IsfSE8dyN9aHlMUiZxcVdUIW1tM1tiIVd5Z2k9eElFZGk2RzoxZm9GVmNZO2pIS1g6bm9BLF4jOEBwZjxYcVhhKTAoaGVeXXM9QTcpLlohImJrUFN4MT1uZm1mLEpZKlRpKHA5QlFgI3wiSlhFVW1xVl0yJSk0UkBPTXM6TWI7TzpxfXVRVW9qX1IlPiJ+bCMzcjYp''@;'; put 'put ''aXB8cDVBXytSO2h9W2h2KURTfHUmJXM4ZGNfOmlBUD1Afm1NeHRtPmFkVn5aJil+NzViYWdFZWo+TiNJODBpIWhFZSVfUWg9IzxqajlpeDRyR2Z6aFZibVJ0bX11cylROjJxfCNWY3wqWWkuUkhDR1tnbT1Ib3I5ay5SKjh9I3NJQzwqKHJScDohRFc1YmxSJWZVNzpjVFd9X3k3TD0hal5HZUp6''@;'; put 'put ''dFg8K3VzS1k/OjxEYGdTJSojZE4vKGNtIWt5ZzZSUWt3ODwwcTt3aEFffmA2JTwqa2VdbnNxSWM/W2l+fjsjKkwsdzleP31fPUVvSEVQXjh+XitSTDl1XS9QM2hYRk42K0g/VilOPVFbYSJaTmV6OFI+JEgqXjM6V0lDZSN9NTtDPVNSLGxkOmphRSY/QDF2cXh8QFM9ZWM1WSIyOEk2LCx1KX1K''@;'; put 'put ''JTFkMHRScS5RK0l+NmlfP2dWYm1Sen5LSUQqW1IiOEdjT2FlRjpwfVtMVyhlUD9uJnwjYENlRDFnckp5OTRPYGpBaDxpbzgvV094QDk4dis0SkYockxoUyhPekFdN0k0K0lIJXxzPSQqanJ0PS4qYXhVMX0vZCk4VXh0TUJBcER1YCtgSjEhVkJ5TV9ycWQvZjtTQXFwYDVfXl82UW5OZUgiTUc7''@;'; put 'put ''eSRZPHE0TCYkSjVdTT5FN2dxLk48ZjdKaFI1PDRfM3xURDtiZGVUKGFLIXE4YnorN2MmZmNtbytlPGgvRzZ8b29gdGcoWi9RIyw3O3BvYE1BWUFGP0hdQj80YmJ8bUBweTFbYDE9PXo4TzJmI1IhKn0kTz1bUFpwbF06O0A+N2Vzcm09O2YvNyxASnpVT1I7NXVsXVU3OTQmdyo5VEI7TzJfcFRD''@;'; put 'put ''Oj1RI3dZTVEzSV1TJEtXbzZFPklIPHE3bkw+MG08ZFBlPjdXSHw3RU5QZUphRXE9SnB6Yk1HITZAR0RubmF5V2svYGQzSXpeWVM2blEhS0ddMXdGbn4qIzZvb2l1dHRsJG9yNE1WK2laRyUkbXwuKyRBTjReWS5aJWRDJSskPVVaMkJEfWA4XjheODh4ZTNWdCsyPT9KWU5GKUsyWDBLISpNbyla''@;'; put 'put ''WEpzKTdAbzNsJHkkIkBbZ3FUJWNbIyYlJlVqRlRQc01RYVBoJjl9Qyt3UV1gUGBZRDo8YW5oeX08dTdteGQ3P14ybV9XUXZIaXhKSVA4LiQuJSQ5JFpHRDY6a0g4eU0xKWdMaCYpSno4R3Ake3U3MzN8KkpoMEtWSGR+bFNLdGkvYVdpfHlAS0w0MUd0VnBIaDVGbFY5MExTSFVkMVVzVVMxd3RV''@;'; put 'put ''RD02V0tAeSM5PH00MCUrQC9UOXhsWF1Zfj09K1VUKlheU3RqIWhQc3RZNXklKlIrSXhbeiRTWik7Jn0iTj4xPVZaKys2RV5HUk5tfXptZXpGdUh3I3w2Jk9zJi9XajMxeyMqTHkucm5mJVBBS0J5dXZ0KSldRHNjW2slXVQ3ZX4lMjAlOEFAQW90VkV7WVElZl9uT297SFhnKGJQZTszWHlLKWpA''@;'; put 'put ''cXpGSHVoTi5fVHppUWFWQy9jXi5zKSorcWtpS156RkwqTXlPbmROdm1FQDVSWUZiOGJpQDROL1E0WlosXTtQMzJIWDJaOSFKY0tLekMrKC5ETWImIzJdJjYyPz9EXm84MzFrc3ZSeWc2VEdRSTxmaWU+Ml5JcnoxR1UjKnIsQ3k2ZTBMRHlaTTBOMTAuVml4UXp6OWw/c0swTU0oLDBSNiwwdXJw''@;'; put 'put ''JCJna01tUjgxXXB1JSxVYUVgU3Y1QXM5bD1pLFhqR0s4fVpwJmNERztPSjReZyQyMlt8O04/ckpuQj50M1NfJUh6LkU6Zil7OHNVRWZlOythUStKbzFsQiZOVUt3MnhNUUV8Q3FgNSZIfj5qcmg2M2R9MzlIcWtHaiZmOWN+N21ZWTB2JWJQUk5VVHk+ND05YzpZTTooJkRwcClKXXE4VSpmRz4r''@;'; put 'put ''Z3EsaFBEfHZ6KCJVfHtmXXhsekdwLENyUiZsLGxnc1A7RFhQcWVmJDAxQXJwJDxoR0lidThvTlJJVDkoQSZreS9VU1IjOH50b2o5YW89PDx1d1YuM0deYDRVeHRBQlNKOCVmRypyKmlgQUlQXTkofCw1RntHbThOaVE0e2hIPDkiW0FnKDQ4T0p2UDMvLDMmamZCKDRCM3piP0Boam84JUVIT3FC''@;'; put 'put ''XSVqSjYoQCo9aDBHZVgzTyYlNWgren1wVGpYImduQ3VfeVVAMGlrdiFyWk14Oz1ob3laNiwsPENfUyVBc1F4ZzhLZ1QoYUtRP15tWVkmSjV8U2ViT2diQHhZUjliR2Z+RU13aHBjTnplTiFKMTk1XnoiY2VMJHF7cDdheiMxeUVwMz04V2hgNi5iMSw1dyVrUiZNWU9iSkJyKlRFVy8yXSxDO09g''@;'; put 'put ''OzA3ZFFFMVUicUlxPXkiOCQudklkZUk6Xz0wS0NAd0hue2ZdUERrW3gvTE45TjdhUVlkYiFjIlpfdTNaXnN8e3I3VjlNMCorJiNIdmVaXntXbCp7YCxjUHpXPF1iPWBmXi5OaSZ7VGFhQCYuN1plSEduLi8vZipSLCkveXMsQnx4YypSQlp9U3A8JmI+bnlEUDBgLnU1eT9ZaXdTImx1X1JgVCtB''@;'; put 'put ''cUImSGNtS105Zz0/eFQ2UWBaan47Xz41PCtHXy8rZ0U1MSlDemJgUUcjWnlneWFQTjMybUA/Q2tQKCVVaXo9XV1VdlVgfD9pQTgjOjE1ZE9NKSVULzB0dE1LSihQOHR2ckFzKU1BX2k7eCo8eThWaWZDTUIycDBKVDEya1Y6I0tlSS9JOSxJRjo+LykvJTF+JiRIM1plSHl9PmByOipbM2QoZlcy''@;'; put 'put ''S0VbdU5iT3Z5fjpiKm9TKT1TQjl7YzchJEZSb0x4V3VvOHIrWGFpWX5YcjF2dnwvZitzJCs4Yns3ZlUuM3AhWi9YNS9TemIxSDMiSmZoISNSX0Y0SldfeHNVV1A5RCpKR2ViYkhkLllITlR6JTFPUTBNfkglaT99SCE1MUN0VDprWX01ND9fRSoxe09NRVllPyUxZDAzJWs1NlkjIi9RQUN3N3Rb''@;'; put 'put ''Slg3fEVkeEZrMzVYViFZd2hWJlFgfW1YYHIrOm5Sak9PSmxVRTskJTxGPStnWnR6S0xsfWgsa34+WHRUNW1sPzZDfjMsMSM+Z2k+JDJCVzhZcys4YzZdKDMjdVlyPkJDWEVAIzJmX0lATCUjMlVWNStxbyJbNXYvVSFxMyRBXyRAI3F7cHlQRmw0Xld3PysiY0lxVX5aUmk8dyU9UTkqIV1RXnFT''@;'; put 'put ''O0htazs9SVVXI2kyXm8uW0xLRFMpM0pJQ1g8QFBubVhYJHN6diRPPTBtVVZWOSY7SDpFTC90WTV2b1BLOjhzUEk8fntiekleeDhyYVEjdy4iTWZ9S286KTooPz5ePmZmV0MoaWsrJnxEbS9KdEpDbiVLIj9CPlh5IzpfYGckeSsyfkZ2fHlNZEt1biV3LixsRyN2LkhicUNLSk8hNV9IV3pwJmI7''@;'; put 'put ''KD5KbWU7ak5tTWlySDlVN2ROI0JEZUI3NDEzWUMsOT50WikuLFR+WD50T2puOElXfGtQYmlaTzcxUDxaVl84TCE8JXxrT3k4e1RZM3tBWDk2YU5pWU9oKTNIVlZpU3YvaV43S2c3Oz42dTw1QGJpdDRLKk0rZ0khI2p4PEtifWBmZmtRZnFQZXFwYWlLUXtSe08hbU1zOnxbP01kWGVVdjlaRms1''@;'; put 'put ''cVJKWzc7WDkuM3BmN0JKTWF4JkdDVkxUZ2czaDZHIk4zR3pifkBfT20kaHhCJTskb2gwK3Z1SVBHdU0wdlEmWUUsdTJtaFhdezVgWDx9e0lsPiJQVDVIZi4se1crVUsmPCZ3czFdVD4zRSEuPlVHQGElcHBDOFNsVjtIKmkmMTJuLjU0XWwmMG1sT3Uxb1NWdG02Y3dTWC49QXdTazhKR0gwSTdH''@;'; put 'put ''aUlKMXR0Y1ZLNzh3UCkjRGxpWy5reSpyPVNYUy59dURlZzA7MCtUX0RvbHEmR15ZUlk6cmhTWyVjYXB3SipsbDpvOF19UlBdfUZURDJ4ITs3VFlUeXRLdWxzMjJELlBUYXw6VzhSbXwmSy55YFRtVWV6Z2hTZi51ejBpZ2xFZT00a1IvSCE/JnBheXVtaHhDW2w6PyEvWSIwZ11KRjBiMGB3W3cu''@;'; put 'put ''TVtANlYoU2xBcVF1bSpQcXZYcGBvUEMrTCtBUC9haV5ibkVlKnxwc2FAPz1xWEF8VXBLRVBDOkw0KkF6b2tbWG85RVY0LyV7I3pgWF9hQT1CSVBHVWAjWUZTWzc6Qi5BKjNyJjpFYnlPTWYxTjZibFg3RzcoeGZ1QmtiOnN1U2tRWjE2Yjpnb0NsMWEoJSYpJFNoZC9lO3hRSVIoTk1rL2ZMZy90''@;'; put 'put ''aGUmWWkrYTVaQ3NBIVlqSC96bCk5d01VUSx4S1UwNmxZRjlbakB4dTA3cEdAfDhTTSFtVT1uUCFPTkVNTHU/RWB2VXU/OHRBKlN4aHc7XSxwLFNQOXFfZC8jSCFhaXMid34/X195SWkscSUlY3RHP0tdciExUkMzQDgsVno+PEZRUDFvIzI/Ljo8RUEwKCUpYUxiKFY+O0l7SzNnMn5wRUMiXz8h''@;'; put 'put ''JmhwSGI0OCFHQFpOQlQ9I1YiUzticUdUUC55JXNRRSF9b1lhTTxoLytpKT0zOXwwbXkxb3gsbFtTKzpidX1UTmBHanFnaStbeDJweGZSREp8KWlfP206UzYqcXh9JEZsQTc7O1FiM0UuI2c0I1d6L0IycjBWeWkmZ3pbWTQ2dlNjWTxASkswelNjK2EmS213Ry50NkgoNjtfe2tUJnZJYlFeN1hJ''@;'; put 'put ''flFFUjRHLCp3N2QyPG55dyE+RTRfRyU1M3IrUDBJbiZ+VWoiYVZTanxdJWohTTR9VnAmU313KUwvc0JFN006V2lDUl0wdGVLWVMzJmdZVHtgI0kiN1lSOG1CTXN8S0IiI2VSa2srZjlePDtgS04/QklBQjBNUStiSUVqOzszWWs3Nn4pS0EvPG04O3N5fTJbRCRDM3MsJX5FTGgrcyYlU3lBSGda''@;'; put 'put ''d2MuI2wlZUxGbEdgUCMmIkZgJWBgZkBuLEB5Tns9dGFBc3ZibVtuOVQvem9rTDBVLyNEKkZAPyVgMWdwI0tAeGNJdi8qK0shYmJ+KFdtTU96blc4a151bWxzM1h+eT9VbCYvMztsUTMpN2g4MWJOMyk2fHw9XyQ+ZCojPSJFYDZBQHJmQWJiJlQrSDt+U1p8R1dIZ0A6fnhKNHssUzVTbDFoPmFC''@;'; put 'put ''dEtCT3Zyb3N8Iip7TDdSYj8/VSVALzlyR1s5bCpEdG48fTpbbF56OjFqWS5vaXVsJUFqMHMrJVtofnIoaDo5ciwpbCllbnc0N3xlIjtjdGJTYG5yZXN8PStbUnRgQVJKUHMxNjk+eHt4KjBpOSNKbko0dF90NiojNzVQIzdkRUhVZEJ2PXw5YU8pbWM5UjFRUHpNJC5gZilsbH1vYGUuNTtKeWhV''@;'; put 'put ''LF0/a0VlZGtIVzhwIlYqcXBmSllJcTRTbn0uMklHbXxrLC8jYFhybS84dzVeVSpvM1Z0UUB8NSxpYlR7OztifTc9OGw7aUF7V1VffGN1fnR0dXt3dlRrNGRVPzUlQ2BLcVVYaEc6bFghQD1tcytHezhQW0VtTGlkcXR7cmJgJGp1KndDO0dDfnJ9fXE+K297LF4wTVYoYyslalBQfkR8P3ZRZDhb''@;'; put 'put ''OHlzbDdkU1kqd286VG5hcWJlNTFFJWtld0Y6LlM8Xit9cnIkcXs9TlsrcXB6WXFiTzBvPzZDO3VoY0QkM3hLRDh3fClTc35lOTl8YyVlOWRYYlRSNiI9bmAmQT5BRU1lTjA5fSkwYF8kYEN1S2xKdjsqMVBoem9lI3BUbCk3XUI5bHBoK0wmZjF+fHp6RHk5OGg+KHpwI0soQWUhXixkdiRWciE5''@;'; put 'put ''QT0kd2lgXn5ZdT1WOExKYFZyPEAyfW5RVlNJZFhzQnBWSjNofSx4VCR2d2NoXSYjfiY/JTw9d3cjRkVqfXhsSE1aMF5+ZT13dlM0STJ8XWwwWkJCbVJ7X0s3fm18aSo9akJYbl9wWX41Vlk9REBgYmVMcCZWTE1nLkZJJmxeb3FsPTx2ITtveUhhUmp1azV3aWQ4I2hiKnlMWj4hOWxiYjprengw''@;'; put 'put ''SngjaDdMNmdHbVJGfEcreThNeTY1MVsiVEpmTXJJZm9Id0k8dlF6dypwUl97TCgyVmBSKUpdSjRJMnxebE1abVI+PDNkUz4xJW0kfXk2QDtMNUt+P1J3YSFOOGVtez5JfStpMGpMdDNYb2t+WkJeSEVII3xXVSZrVWIqTHp5OWlqN2F0TEp0WXJVZEArazo9MWZMSVl3RShuMWtreFBHcGdFXz52''@;'; put 'put ''OHA5ITAhcXBrKkhHaVYhKkl3WCErM305cDImM3VmcCw8cSUlT1ZqejhbOy41ZXJUNUVCWXZPdiYyKH5lMHBfclUpVF8qYS9pNlExYDozPV9jYGNIbj4xS1pGJlEyPT5tW3AjS1pGOEEveXs9SGlhW3x0QXpzLkFJfnVsMDlEKEMmRzdaTThRfGFUKSUqblIsfS5ES1J6PytAc1R6WnxNOkdjWVB9''@;'; put 'put ''Rz84K0BnckZgYjtqMEhVWmpbeywkXXpeOUJffjV8O0RWSUdNM0tHMEZndXxhbVJsW1FqUTBsIiF3Ym8xSmNqYXAhVS40aCY/JX1JVWUkbVRYcE9qcFZZOTh7Y295M1E1M1FoaUljRiF3QngzYS5EcykvWHJCQy92bTpod2Isc2tSJmdRYEcoTXltPVJ5PHdETWZIdVoyPTsuWytmOCkuVTdGIVdT''@;'; put 'put ''ZnUiVlIoOHlZVnNhUHIySyEqKSk3Qj5WO3hjPzJROWNLP2IhPVEkPUJYdkAuUy9zdm07QztvOEVTdntxVi94L2xaNWRUamIyR1YjMDdwOmoyI2hvXjxtJWg+cX1TZy5dSTc/IlIzPmd5KiksP19YLEcueFBmaTxhOE5CMzUsOkpVbSVXaFAqUDprb1pvWzlWJl4xIyhGK15LZzcmcmVOLnQ4TF9h''@;'; put 'put ''MiI7SUZuayVCdExIWj9YeHlhSy52ZyR3YzZCaFBBXmFJPk0yJkFOdnZtK1dPUV5vUF98MTUmTU5JPk00JitMZFgrSTlEMEdCL0dfJEYlR3l9UEJtUnUvOiQ3UzNRYzdTZTRYQzpYMX46aH05S2NyYTxvUl1zKyJKaE5zNUAkI0x0MCR+eTZaU0A4aWdaeWVyPUl9eGckI2NXbW8jISJyNEBkR3BX''@;'; put 'put ''cHRQVGQvMzR1PSVRUTpdN1NnOSJsfi59UURAYz12TUxuOVR9QER6UE9uMmBWbmwxcTtgNyI7fl55P2tga0xVbjI1akJUQkpMYz4yRHo/O1ExJFB3UGciP2JIYE1gZEwvPWliYGUwMT05UWdyMC47NmI1dnZAOjFLKlhzW3AmZz9zYy99cXt0W1twSG90L0Y4ZXAyJigwNVB4W3dNUXkpb3F9Ijwj''@;'; put 'put ''NmxIekxqVkE2PXAjQTIwZjl2KUkydjtdenBdUy53UFkkV2A/M0AlMiNRaHBeW1h4ckkkKk02MlEvT1o7S2g5bG9nPW11OypAfSRXLnNgXVM5RkpVKCghZjpuSWE2LzZqbzc5TCg6bWA5c2U+Ul9gSSFKKlk8aT53eTl6VEg8SFpALjdsPVtERmc5XmIkL3NPeVUxaiRfNiY2ZVVVKCxsSzppdjp+''@;'; put 'put ''dlslRUteZmlOaUddO2lRUlM8O2kjc3Y9XzcpMytKXSpxcXIzLntNJH0lLFQ8e3hrN2VsWm5iPWhGTCs2Oko6Sl9POmF4NEpDJGM3WjAkNTliaE9nVGI6MWQ/blQyVG9MKk5CRDlGZkxmSEFEaC51bjM4R1pJQVQ/Q204a1FNUn0kQ1JNLDwvVyZvMXkkclVUUDN4JmM+P2dWXUF8JnE6QzByKk4p''@;'; put 'put ''cEpgVH54RlBVYU48RTA4c357dXZPITY1W1ViJn08aSpiWk08RGkzcEdSRiMiXWdCPjc5aWh6PEo6bns5MHAjV3JKYX1DNFdQfjB5WldUTmxFfiYpbSl0N0ZNK1JIem4kPUl9YEV9QGs/e146WlhybVIyYmEsJFhJfUFeUVpiK0MvPUNDY0YlTTJfUWtJc2AzIyIlS3IvOFdXVztWZ1FmQGBuOWp3''@;'; put 'put ''USNrJng4SzttZCE2aGEoPFcoVkshOVU9PWc7IVI2eV5HKFczRjQhYldnMnNRIz9YSj99eXNeWGgmSWNGVmIvTUp9PnteLFkoJCtXPFpjW2lrMXZ0Zy9lPSJzemVJKFRVbks2YTdbY151VT1GMzNQITwlcEU+SEw5KDNtWiNXL14uUG01UyN9JFsjZyh6Yi8zZ0FhYyUrczplaD5nQFNJSyMvMF5i''@;'; put 'put ''MXl7OlRjYjJZPkA2bnwvJi46XmFJQF9ucHgpVGlEYFM6N0NOeXcxWFZGcFEpflQ8YlMrSmFhLD06STo5OmwkNFJEOW1RUyx1LlsqamRWJjNqbSo0Ul8mJCY2XlQmVzh4W11mLl1DUUBkUColZV1PQVlYVFZ0Q0N5WTV1fHVRVzNQXyRjeElIKHZ8dVNRWyY4SS9FSDhnR0t5T0guQUlZLkwwYXtU''@;'; put 'put ''P1tTTV8hZTFDO0FSTmcocng1JTFWbVRVRzlIal9bUnNkVXhvZUNqVWNgVDF+bT49cTwpTTc1N3IoamZ0Z2I/Z2tPfDpCWmVmTmF8OEIzTV58JWJJIjIkST1paHhPNUF4ZzIhZUZeKiRaWUYsMkBaTyg7eU06UXFnL2JrWzl3OVI7cXRveCZUVTRwXTFpQjVnW2lnb2pEanRmc21MIVdodCYiJiJs''@;'; put 'put ''JWJURF09Nl5aPFA6ZHg3L1srdGIxQmN2JVQ7N2UqZitaWjA8TVkqQVFpZUQvJkxzPEw5JUNhJUR2WDVBb0IuQGdBcTlCdVFrUUQ4e3lKUShPdSkpZ0VlWzZ7VFYweFhHJS9MV0M4XWx4RT0+NCw8XTghbUU1bF1tYzJbOUB1aDFRISgoTGd0NUlRenBMJCovNmU1VnBKT0dNVnlwIy45MzBsKEBm''@;'; put 'put ''VHZbZFo0N0JkWE9ZKXI8Il9QQnpjWFYodkUvVmdQfFZnMFRMNXBxSncyQD1EKiU3YShCOUhzQUk4bmZrN3t8SDVpYkBoMnJbZmMjZzdqVzomOGUzTCosKyFxd0goWUF9OiE/QHJ2dDJdYyR1YCo4aHhQRilwNm9PUzwmUXNVUjxVX3tFVXF8RHtAJl1KUT4mPmN+SXovU3pYT0BJQDg/Oj0/LnxO''@;'; put 'put ''NWd7SjtOUDhqJl0iTUMqR3ZkSmRePyhtfSMoM1laPGM4cFQsISthVihPUDlIKilrLi83QiR4R1VAMG98ejtEVyNFYHVwcUdTeSRpNnUpWlAzPkEhSisoUy93V2dJdnYiPmVMMiFOKWFAU0Nva3NvaUcqLmlpMjBLayJtJFg3aUhzIiU6JWoybjxPbjBNcDs0OlNgXiZvcC83QiRiTUM6UmouMT0m''@;'; put 'put ''T212aTM/Yi5YZVN7RE4xezJ0RmJYLz9oW1FrcyVSZG1FITpJQzBNN0xvL2tpamZebmMmTDpbLFleO2xSNGQ4dzh7QTskU25ae1VTN3djYFBCd1tMLmIxX1FTIzp6cU5FfiJlPVtkbWVETmx6PWlub01JXnQ4JF92Nklsc3lMcFNCJGRpek9WMm9vWVFyMVttaFZDV1NmV1BRezQuSzpZOVJRd31m''@;'; put 'put ''bXJWQFg/ekReMTxBVVYxbHUpeDlGRHlkW215UlNgO3MkPmwvTyN+eGQyRUBCSFkzbDthOToxRS9PZXhBTDFLeWQ7T3diRy44YXIsIjwkYH1tbkNVfmp2cWZvR1VkSmg9VnxSMC49PUNvNUIhUm45YUNiIztHOil2YTomT0FFOWBNUCFQT2d6SThoWjo0RUtSRDBHKCtPTjFVR2N+Yix4bDAyIWpU''@;'; put 'put ''L1c3IT5NYTkpRXJZMGI2QEppLiFEQkUkSjg2dSlXcV85PVIpMT17bCIkRng4MCE3X2tYR0p4QEA8WWVPIWBoOD0pTVUvNFkjdWF7OFMsSHdwWzgxOWssNmd7VSZve0dmIzR0dXFoWjpwU2pGZTcmLih6VCRdViMvR15qM1U5eWlOOlF7eSomWU9COiY4Mmd9LntITmozMikvUnU/T0FfTml4TSw7''@;'; put 'put ''VilqPHJkPlFZPmleZlFZdmBGYFgzVF9YZisxMTpQfShqKGMoKnx6eXV1UiJVIyp+XmAxI110LHs8XX48d349fW1FPFBhVGlTTWIyL1VydV1WfikpLC4iczFfUm8/ZiEkbVBiPCg6VV5MInghNzE8M25keFpWRW9vPnkkWS8kZ3Y/P2ovTXE2QFR9Z2xfK2VJTURxRE5nW3ArVF04e0ZremsvW1M9''@;'; put 'put ''UXRefEgsYExnNEpGSGhxQjNbc0YqfiRVSi4sTXZaJUpXczohezlPNExzYXZuYCRjXyRlWip+aXUwRlp9aFhGV0xGZEtlViN2R2EoJiVnL2szflBsdVNoL0JEMEwoTHk+KENJWnV5PGl7V35hTn5mOHcvPC9vWSZncyR7OWA2UEcwKiksRyEoSVIjKEhFTzZkc0plfTJKRWpTUFphNTAhZT9lcFZx''@;'; put 'put ''aCFOLFgvOXlldX4oJk4wUjc6YD9eSzVBX2xCUWN1dXk1V0V6VzhVdk9wO2tHWWo2bF4kez9EVS9YKCtfazNfOWJvTGdzcj1Mc0BxTW5AQl58Ris1fTBIeDE/PntvW3wwKz18YUN2ejN3IjFPTXBMSj4rMD1HZTsjNEdhWCV9QDBxMmY9SkhZTDJLKGJ0KztvdFdqPjN8dTh2TXdkLmtOalVpVVFH''@;'; put 'put ''dTswL09gXjdQczQiLG94Slo+VjojSSgkWUR0fjtDPDUoQyQwcmlWdj5CM08xaSE5OXp2dEIwTytQbXlRIVI4WT5Ne2I5WlNzcz8mfk4/P0ZYUGEvTm9PVihyIllwclRJO000Wn1dLFdJTXJmRVd5Tnl1N1spYW1hKyguJnV3Tno/Z35kTW00JXghQkNTVkgsTiV1d1tMKXA/RlcpQU9bNXREZG94''@;'; put 'put ''Z3YhKkl3WGFaTCJ1WUNFUzJ9ciYkUEdNInJNPVghYj1gQ3kkcGQhKDlpOlEpV0BpMzRSW2xuL2oxbywlakJAbmYsS0B9UzR3MT9pNltdVGJPPCNSY3t6VFgmSFBgKXVzRV9xPEYqVXUvP008YjxYPFJuemUmO2A6Tl1xW1RlL1gpa3R5e35WbSVpKUt0RmBGMWZjUGU1Vk5PXntPbG5IQzUmPUt8''@;'; put 'put ''KXVseHZHUis6TClxTTlzTi56S3xwQmVAVSk+QTJFPWRJS2kqb2RjaDhnZ3tfUzc7U2VUdzc3R0s7MTd1NTZpZHhwPD9jcyI8dDFRXTxMWDBMRDhAcTprT3Qwb3RfcixLfEckLi8ma1pINl80bmE/L2k/V3ZreGkqIix9dT1nNDZXaTpXbjxgKGN3JSlTVlVCK3Y1WTVBQjR7dXVeIlc7UFNvPGUo''@;'; put 'put ''K21Van01KChgPlVQI2NtfE9iPXFWYVQuJHI6byZFOUsvW0hpVUhSQCZ+dUs1YEtNQnxGVlg7TUkwMUk1NCk1KEBPaW4mMWlhTjddZE5pPUFHVlgkLm5+WHA2LDx+KykwQnslPiVuTWpKd1JCO0VxKGI6XjFiNFdmI11GQTZFWjwmc31BcFVsWCRmInVVUyVvfm9KfTEmIldUejJkXS59SiwqPXlf''@;'; put 'put ''WDNsJHwpPGNIaG5DXW8sWDFmbEw6fW5bS35hZz5jVn1YYjo0eis9O3JZeDZ0VXRpWXJ9ZSExa3M4WGlqM3ZZe0V9SFhpakFYe1F7dWIkQU5fPXVHK0xRQip0JV9OdkVMSGgsQU8oP3NSVEMxam4ja1JtPmg/cTZmTkoyW3JiJWo3bls+bl5iMU92KmlsU2d5SXk/O3NNIzhlbDBTSXczayQ5X1Rs''@;'; put 'put ''QjA/cFYyfH1lTyEmaGZZXUNvNyJob2BwVyx1K2UlZ2gvek1DdyFNOTQ/Q3xCPEM6T3ZPdiY6dUx6QFpqYSxecVgoV2JAekliZyF1PCQvaDg1KjBrRTBCR2tHbVBWeFRWQEdqWSpDdGlsOHImJDAodSQ3T2VwclRFSTdOfk41XzgzUSkqNCpPelFoJFBUTUw9IiJwdDJDe3xwMHBCJjw5WGxtdFow''@;'; put 'put ''TV5KXk9UPlNiaUghYDlCX3h5MSk6U3B8YCV0dSJoNmw9RHRAKENhXzBfaSldQkdkKkQiX1Rffjw6STVEb200aWkyTWIqOls/QGh4aW1FdkE4QEs/QGhCNjFScUNtdDd1dDglaExmUm07VVQoaF04IyYwJUQ1SHZeOyhefiJBIl5mZCkzI2V7ZTl1blg/ZGJiYilFYT1kZE5IKi8vaEk4eW5vL0Nf''@;'; put 'put ''Kkw0diF0SlU3UnN0Vld8RDx7SF01YmJ4IW59WU1BJlFSe3c4T3pSSDxKS2c1WmMoNHwsQiMpUHNOSDZZMDJuRFlMP3xlTz9Adj0pO0xAKkdESFUyU2tAejEoNWBrXylnKV5WRWEsWSZfXSJVX1JvU11WbGhabVddQ08/Ni9DISZqMG4lbkZhfTZCPWBuYjUmZEdrcGVVbSMqW0llcmx5cXE9Llgk''@;'; put 'put ''bHF+NFJvQXxhfUtDTnp4UWA2OkpkP0hfY005X0RPfis3dll1bmN5SUJObFdddCZ0On5oLChXczBQSjtCeFlmMGo9fWVLN1RfVF8pM0x8OWxRWmdrUVRIYSlGPWFkUlsqdWx3UHQ/P0NkIVF2IXZQZnMpL21lezx6dHEkVWYjdT52O35ASUhCbTZ1KkFAT11kSm4hPzQwLmZOayVQYV55MT1Pa0JD''@;'; put 'put ''bWBXcWtwbEtKP2ZxMG1qOnNRLiQsKy9mKlMsQyt7KEk+b3VuUVRQZD8uS1A8Ql4xSkNUKW48aCl+aFthJjhPZEt3dWZ8M1FfRVNNdHtuI1o5encscmlqdU1EZCF+b3wmOz9dOHpJPm82YFheRD9FQnpASWRlKkZabyY+b0p0QlQ/SVU/cGtkN2xYSGM6TWlUTDF9fFRMUlU+S35rYk49QlFnNWU2''@;'; put 'put ''ZjpSeDp+Kk1XYjc0Y11HQ307ImV5e0JPW0hAIiM/W1k1NXFfJClVeT16TUFJQXFTSlNZVlJ0ZkxlS1lJdzhffnVXNnkyUSxRK2hfKl5hXjUpcG51T0Zecy5daX1ESzQzY3BjQ2B8YUV3OE8kYG0wW1lTbkN1fFNtZSxOZThXRVtdJWtAcTwjNyxRbWFXTVEzcngrPH5nUy9bPCkhVkhnOHIzZ1o3''@;'; put 'put ''KmoqYDlzPW9bUGVqdTN1bW4wNUAzO29SX0pRcVsqI0wuSzh6NTddSDs0eT4kRDQ8fDRwa1RSSH0vcmpFYjk6dzF1RWNQYDMrPnpvM0ZDUjp9VVcqNDtyfmJYbCFOOGBHPEx8OkcoSUVqWUZzJTxuKDVVb086PjdZc2VdQ0NISFlaaHg8UU9LX0xaQ1BYaGZxMDxgYHcjYnpwUXg7MkFpUnQyOnI6''@;'; put 'put ''WGU1MmBkNz4zTGl1dkxgRE92eXAlXV5ZdztTI2lyMyl6KGBeNCk+IntyWXpmNDF8JFg3bS8vfEc5eyJTQFA3WTNCVVUkaSNIc0s2bC9DZXxhfDhHW0JCPS9GNypVeUxrSytJJmtINHdYUHZoTyFfSH1wSytOXkFhb3hZVEhaZUxZRjdFaUhmTVdbbVRmdCZWOEBzLzxNLzs4citMSj50MXZMIUla''@;'; put 'put ''eE9HWlg7Szp8UlZgeT1aMmVMUHJvZyNOP2xGZUhsNCY1XyFITFVTMi9bWzMrdDYwQkxefWtxTDArVXBYLDdSNHoxMU9CTHp4UWBGX2s9fHV1a3dPVDxobXh0SzhQK0RgSnhrSFc/QkxiXkxRUV9FIT1YbWtzZmpQRG9vciomM2J2RzAuYjBGPTM5bEpdejg0OTw8cF0lXSYleHw1L1VTUUU4T3lS''@;'; put 'put ''SGYzKSZTWko3eDIpPVosRixVcnU5X0tAXT1RfT9fTDleVVgme0tVfkw6cW1nWXhPd197Rj11Z3JMZkQ9ejlhJnJFN1FKPDt5OV84Iz9HNklsUGQkWlkhLzhPVWd0PG4kW181QyR9fXhafUJuaFB1YEg3QTxlVjE7TmUxMGUwamp6U0ZQTzYzZmFJNFtXeTRwJn5yNj5qInQ+NSJtNGYjUkImeSgv''@;'; put 'put ''JWdLT0k7VEV5NXtYaDciN2Vob190KVB9fTlvJXAvL2EuXjkqfDF3LnlmIWZleThPR0hYYHVPIV1rblgwVDNxOn1HOns3TVFsezVaMjQ4cVJnX3BMSyxBL0hORHE4Ml8wU2Nva01tUn4oMG0qLH0oOExSdUE6QFpfI3xWL1BVUzxEazBZaDtPLEExTnBAVm07OlRwOTF4aUR+Wz4qZCZxT1NCRTRD''@;'; put 'put ''UiUuVk5JQiNxNm1vP31OWCE3aHVROmdydUlpUH1meDZ3WyZ8QmJnMShmN2FUXzo7KzZ2cm5vQHhuMUEjL21FL0pIXWZsR30jR2RTSlBHXVdhfWAhZTJsXlFmYzdyMVVHaEYkcCRYK2BUSSVYOiVqITgmVn0kMFRGIVsvL1c1PzwiPkJZZlBhZSpyeHs3LFlNP29MQHI+JWU9QF42ckovVXlkQDs/''@;'; put 'put ''XUI7Q0BpUXVGTCFhcXM/WiRzSDdZNkJCIWB2SmBVPkMufGVrZ1QiR0A2MUkvSEdFdSgseE0oLGdeZkZ2VjF+XjMxPTQ0bmRhcCk9MG1aYHApdE97UkVmRzs1Sj42MSVAcWpsfTtCYnJ1MEltUUk6S1lWKU8la1hGY3BHXlZ0MEVad1kicXAlLzBrK0laZUpocTxmYm9GYXhiMUlDPHBGVyQpIWNo''@;'; put 'put ''KDxjKmV9TVdAWCUrVk9UfXNUXTl2eU1SYW4vTXQ4V3x9ZVtrLlFCbXNFc2lxWlhpLCEiWHBnPmglUHdfdkxDPGNjSHN8b2pTJDd+ZUpiUUAoRE04fDVEQWc7QnVzKTwlIyI4cFoiUGFvSjs1WVFTQStYWVJ1N14jeTtfeltXMjR0Rk1uOz5RUlo+WWYwfDhPKXxoSko2NiEuJXE0bypVTCl8Yjc3''@;'; put 'put ''Xlk+SE5haU06OTYkTV0pLCtpMHl5SV5ReH1AMl0uS0haNWxUQ20vK2hbLj9qYkhzI2BsfCx1ekppTDlzbDJGc08lTGJBOGVIcmtGKyFUKzUvcj9UIlYrNHFkUDZQWSFHbThDLm0vbkFsWk9kN3phTDNLdWhGNUAyQEdrIUpGdj4oOWkmTmY6TjlgQ1E7MHxVTDNULkg3YlVTXjAzWm9dQEQ4OFZa''@;'; put 'put ''IjYpQH5IfE1qfSJTJjQxI2FkVHZPK2BjZzBobXZ4UlRwcyRzcS56NnJWOkw0bzkzQktyVjo7PGBnSmVkRnVNcypRT09rZD06e0xBYXdOfFoiR00lPmksOjxnVzVFcktmPC4jWU0lfU1eWjJ9YGgzMlBCXTVFci5YRVtjO2lOSUl5UllGdVEvUSJONmRgQCxhSGZ+dEwvUl8je01LVy9fN1BgcVch''@;'; put 'put ''NzYreiQhN3w1dGBNYE1AKDQua1o+Wi4zLkFXc2hkLG5UeXdgYHF4fSI2VUpeKSpKNVczNiZEek5oPnl6dnM4V1NPR2Vva3R1eXwxTGI2O3V6UnR6ekZKIWJTUTFIRmwsblg5MXVmeXMubXtmTFpqKjl2M3RkUFooOUlOZEEpeShBYSlvKTp3X0A7XUZ2PWdsLGl2b3NDeUl7IUtCME41bmdBLmlV''@;'; put 'put ''Yi5UU1s5eDE5b3crJU1uejFkaypRaWdjJCVXKiVZVVdTU344WSNYTlhMNGMhVTtyJT1sdmQjdnQyUXVFXXdgKGBCOmtCXjFIZmlzWCMqbV5BTTxtKlopSXJSXm9odlUzKipFWjBpPk81TDkqaG1FN2NtISVxcCNoaXshJWVoMWkzMj44X1Z7I2h8S2dLOyI7cXglU1R6eyhyfmxFLlhNR05SaGU/''@;'; put 'put ''bEdyOSZsRGYmNDhOWXxqZXhINjImfEI4aCRKdEhTdlRlYjhyaGRPTD4zMXxxSkh3UjhLU3k0a292dls/dHYySWtuY0NQZDd9bU1ARkQvTU0+VToxWiRNXmhFRz1CSCglXVJ3Tl88aDhZLzVRYyJdNlRZUV5OTUlhYF5LIldbMDF3JTx0MUcwdHtnJnE8PnRYIXRbYTN6WEFsfWhbSHk/YnlXIkow''@;'; put 'put ''QyR4VXd7VSg0Y1RZOmhxcGJ5ZF5TKTY/TH1sXVBiMCg8Jjg5WGJ4OVBrMHAvTjIxW2csRHt1RHNXTVR9SUpPdWJEUHJaYDpvdixAS2t9RnYkZiN9dSthcyNVRFMlcHtMeHEieW9Zbi98OXUiVVg2NnI7a0RyYng5UHV9Q0AwZXRNWXMsJWo7WFZbWTA/LyNHYmw1STE0VCljWUd2Z0ZXUCwwelky''@;'; put 'put ''ckVtJFk5N3pPdTBhciZnUCEibT97IXttL0lxcyZ4eyQ6fFtYPTxzQE1mfktGZ34qMEFwMW4zdzg1QFBBKVNSOUR9OWh7TXx1JS5QVEwvO3wpJWI7Vjw3Yzh7VFBLVVNpWFFObHw2Y2k7NUdZPmxdZ3s0Y05SanE/Syx7enJYSSJvL00peW5mTyFseWFzbmBtaW85VUlyX0hTNjRAJVN+NTUiYHE0''@;'; put 'put ''X2tvMm18L2pvLDxnQ355Yyg1TyYlNUx3WD44WztgVTEkUGdwcztVMVswJiU3am5RbjxtJndlMGwlZW9FdUhdXX17YyQ7bVFbMG0qek44amRlMmlHKzV8PHtbbnd4XmtaNmFYfm1tNVFieTxpXlBbLjN5RmxGaiE3Zk9jKTJRfkoqTXs8fEhGektLNXc/KFkmaUclTXpafUN8b3wpPmAzMHYjc2dR''@;'; put 'put ''WVN+Rnk3T1MzclldV2BPWG5BVStkPV8hR1lESmJCfEA/JmVPJEJZMjxqYl4hIjB4Y2t7ZiVtNVkqVGkpUnZGQFhNOyM6bnFYPi5XeVdjUExITyhfYk0pa2QoWVAxalZ3cT5xU1pZM1U3PkBBPz4wIl4kZXVIXzJ3ZU5lZyZ7biVQTSF7dVUoaGQkUEdkbGErPGhtWmdPXXhsdyFIcCtTWWZ4VVtm''@;'; put 'put ''XT9uZiYlaDM9d3VGdCpLaV5zWV1oSENjQkx0M2lraz9dTSlVfDwiJTZjSGYoK0U6bTgsJTU5IVElXSFjcjlWUUpdbUl5I18wW24sdDUvP1pNIS8vU19zKTchLyplJitAPEx3PEllIWpdPXx3UW8lZ1hwc2VpcTA4XTtUcFp1MF9IfFI4JTUlb2w+KFYjVUptZ0UkI2hgVisoQEA2dTEwP20/ZzA7''@;'; put 'put ''K0d7OTg6ZyFvbzltPTpwczsyVlEjfjJeSUJQSmluY3Uva0AwWVk3fkFgQDp6WDJ0Mn4vZFU5d100fSNBZSZIW10lYCNLJDB0cnxQQzhwUGh8KVg4PG19QzRnQkB7dyNGVytvZW4kPWxxZEszQ0lQITkoX3EmbCVreyQ2JTF6ODVAIXBpckNwQzh0ZVh9NnVrTz8vci84OTsuXjxEeFMjNEcvOFNz''@;'; put 'put ''c2QrZUlQRHwwZSVjKD9VVCQwbF5QdytlYCQyNFk1cyQob1YiOnBZWGRPXi5RbixoUiltP1Y7KzUvV0IkR19MZSFIcjE5US8qc2U+Jmw7SyNxI1MocnsjXXpkJCFuditjYi8hL2pMQUF2KEtPQyJ3RF9KdFpIekd1ZitQUDg9PEI9SiIrQE88THFgPVo3MWxYJSpdeTx2SUFBQUFBbEJAUVowdip9''@;'; put 'put ''OGJwP11eaSFdNX4pMExXT0BUTT18YjkpbXFQe2RBWUF4UmZNQUVnXzdEUk44Z3h7Rm9VYjJ9NX0lR28jOHlJXjd+SzVIJmhzRjNxLkNpWVFbOG9JY2IlZixPQl8wOypVbEB7Tmc1Y2VWSExXMGssekZIV0x2bUk9dHNuZ09FUjZpP1BQMUplbnBPLjchLiIoWlNLUm8yIWZuLlhRZXpQJGF8OTpx''@;'; put 'put ''UGdSQ0EwKzV7IUxBRDRoK3diaEhDUz9FKG12dCt2MVZXdFQyOih4akwjRH1pUXQ9SVtMeWRnQnMqSSRhbmIyXj9YVj1EbnUmTDZ1UTxObTlJUF41JHpifUUiM2NbSH12N1pbZnh4Z0hySTVVYzJyakNuKX59fTJMSyZKTDBtMTRwUEteeU94PHtSVko4WVpSYmRdfSNUVSYmNXlST0k/P1guNmw7''@;'; put 'put ''RHdvQVVUUmNwezFQPV9XWHZHSmE9T0dXLnVwfl5ALn0hJHF3ZGttIip7MVEpIVs/YEA0ZGNkW0h3I0p2TWkuVmVmSnpKWjFHSD1XU1RXcjlrPCtLSHxfPyFYJWJpJDB3Sz9iKXhjRXgsb0dfbGwoa3cxKEtwQFRkMCx9dSNJS050KzBaRktJT0FnTDdULmtPZzl6UGozUjlLYX1YYTRVNlp4ND1F''@;'; put 'put ''ZX5EPiMsSFZRX1ROemZSL3I+KThKbE81e0JfXVpiSk1bSFMra2QzO1ZnJTJJb3FMRmY8a2osMjs1M19+XV0oQ1NXb0BpMGIkc3AqYGJxP0JDQ1FHcF9aJXAlSE85dHgpIWR9Y1QyT3tafUohPVAqKjBfNGtjeV1TVEokLmhaPW5JKyZBY1AobzZUTEtvSEZIVC5qNDNYWSMoTzQ9JXRrZk9DKS5I''@;'; put 'put ''dTZDeUllI314eUlLNkg3LGNRRnlHRlI9VTdQPHlqR2hnIkdXcVM5QSptXiV4ejpHYmhRVy9MO1FvZ3xvfSU0MWJ+c11gN1ZrQmlwdEJrUWRJeH1IQjY0LmNeKVhaN3krL2ppNmA8P3pHdFspNWRYNiF4OWI+T0dfM0I1P1BtNWd7TlA+elZjY343TlBkKWskXWw6ZEU3bV1pKDhtK3pOOT9de3F3''@;'; put 'put ''PTJGemUlbyRaSDRZczxwfUoqJVJVL10kMXZvQDhaQ35oezczbUZvZF13S0ZrPEZebzBvNz5AdDRdREVDazZzcnVHJS9JYiNIMjQqMHlkcl5JNDU+NllEMzlaW3Y6Zk5qKUYkVXFfTXVdbEt1Tz8hXlFtdztdQzg5Lmh4cykhZHppY15ONE4mbStKYXtWTDY2V0xgSGVUVVdoIVB0cUR0WVszfiVs''@;'; put 'put ''bV9wb3U9TGBiYl5ZTj4qaGRJPztSfW8wWiR5aTFJQzVZRXYjI1hud2FAdyU1XnFdP2VLK1p7SDwvR0lwJC54eTRbPH46ckxuMFpKZWZpP14jVXUkS0BWanlAWF9xbVY6Pjx+c0IzKHc6eFgvKlgkJTpoYjlSc1tFKSFoTmVSZDJHWmlnZypQPlclWEpQJlBdWXxEckZ7dXxKeDNnRFJ1KndjVF5z''@;'; put 'put ''S0pAK0AzKmB3TTR2I0ZSeE9Udm1uKUQyS299R1paU2ElJjw3W0B5PVVFYSVdPTM0LF5UaHk/a3JoSGcvZ34uUHgveC9lWX5NUyMrSH5beVojRWJfXW5JMn5XLjY2bzVDXUNXVVRJbXNIeTBAOlhBLFZ6Kn5UbFtiTGlORCxsP09ld09II0AvV25rIy9iKWl8Zno2Zy8xUzlkMl9EfT5nOjQib0pq''@;'; put 'put ''PFRCV292OjFgJD5uaFFOViJZfWF8cEZFTT1XLyl2fCtDT2N6WDAjMm5nInh4eEVlTE9Pfi5dKl87P2d3TndbemlNVVpXXmtscihrcXpeekFaTXQrT0x4I0lLaCRTRHdEWUAkMEZyRTh1InBLMyl+b1l4eW56P35NZ2JISTJZJTRzZ3t5RkdadClCKSo4SFYzUF1HZ25bb0x5NW9iemUpVWtMRVtT''@;'; put 'put ''cWxYe0dPWEhmeUM3OVVnYFIvP0p3QSl5ZzdZTnV2bzsoO0JLTFo0Y21UVmsvN0F+T3dnZWo2Q094QjZWW3YpbHQ8cl1ecE5ra11acSlYUjhCWyVaM2hbST1CeVlrcCxsWkQyfn15e3pJS3hZOXo1U3RxIXlJZUwrXWpwTHlRdStKM3FhVHc5TywjLEY6aTRwQ3ZJdSJPVkxIYi9DIkg+VnMudnxQ''@;'; put 'put ''Pi9ZXkBAT3QuX0YvVSgoTVFlcls+WSZHPWg5dU0/T1dHWDkjbUFEa05HX0tYTHlZa3R6UVJBeGxGYmo4ZF1+LG4scVZbcSFEO1RVVF5+U3ZJMnMhZG5ERERhN0BsNj4pbTglQi5lOCN4ZkZXIU9wUytQaTVmMToyMUk8MmR3Nkg1dDRXRVh4L0MuRVdHalYpbCN6Ik5aWDYzVGksLERRR0VNMVNI''@;'; put 'put ''JDNDbDBCVWBMaFFqenBdcmpYZFs1amkxJjQzU34oPU8xeCo4YH5Gd0c7XTxlXUhLVVFLemk5ODJKVSlxaSl8RltfVGwxeSk/YjNHeCtqMixhYC5NYitvMm41TGpERjJ6USR1Kl9hLD0vfjdYeWlMUCVHKm9YVXFXfD5CamhCOW55aWdAKD1OVng/ZD5ZKSVxezNgKigwYVNMSSZJKVlPVnZWeylM''@;'; put 'put ''dltCIkllbncmTy4rKTUqKyV8NmYzfi5ZOCJqY1gyR3cuNytTUUR2TVo4d05jUGF9XSIoRUcoUU5RNEosMS5ycEJlJildaSs6Tzt9RjZiUyhkVXBxQ3B8XlYhNlFNKV9SSzBJc0BSWiJANHNAeD9AUzduRkREcyhrYSl5ZTY2QCx3ZmNqZ0E4XTpDNjZsdTwqOWgyK2NrbzAoR2J4OXxCfjlzNCU1''@;'; put 'put ''RSxpbDJPZVJFd31DMylVZE5BZEYvUUpeLiRCTmQ8a0Uoa3k7SWEmJFBRaj0iLzF+NVZBcmBJK1h3XSk/QDQ0SCQ5SzB6NXRyKC4sdWx7ZDtvTiQpJDVBdltrRldAaXY2RUlPSVRZSyV9cltHKzxtO3E2PUMpPldPP1olRlNqV0YzQmltYUJRZ3YzaHFgWGZaRXciLEhXR19+VGZ2K3V2MWQoUkRv''@;'; put 'put ''bERfX3hRMnZzdj9xeix3ezlySUJgbm9FNEEpayVXNDY3Xjp9MjJrVmBaKiV7d3hBNzQySGdmODxYb09KaExtczs5OCNLbnpbcXBLYkBaLCshWDRvUV9kNSphNGoyfiR2amxiaEdESFZ7Jn4pYDl4QVZFPjZGXk5IKVM1UXc7YFRqOXZgYD52TCo7UWBlK2p0Vj91UlVzOjppRTI+MSwoaTFXTEdb''@;'; put 'put ''O2BWZ1U8OUlWSkU3JWJhaTEjeiE4flBbX0AoLE9GRm1GUyZzTG0pUl5jaWk/OlZuXiNnZSsmZFBZUXV7TnVDNm1zVjJeM2B2PCshVXlxJGE1dzN0P15iKE9ocGteMTF6UE0lZllRP2VvNDspJX4iKkJEfjR3QCFuWyMuQGZpJVUoLGpSQy95TGtTU3ZHKy5YKlZRRz0rcE0pcFlNYmJkPkd2ayF8''@;'; put 'put ''WjpkN24vQFR5R3JTdXg8N1BKT0xKMnVKKSg9d3dPPjBmIT9FeDN5OTNTeHl2VXlkLyMoSVF8VSZlakAqLmx6QVNQXVJoK0lzelVZem8qKl1hYGhfQ1s3biU6SyJBOmp3MGBkPVlIITg/OENvOm9deUNhUmd7SnwrX1ZLeEpFRmc0aW0kXk1UWlFbTSNJPXh+akNjOTI/SHNnXktSYTxTdjpCI35A''@;'; put 'put ''YDEoS2xZfSI7QUl4WEFoSlhNdD9HM3N4TyQrTFpMQEJfVExUZ1ZSYlF5ZHN9MiI8M10+TE92OEJ9fGtLczBwdSkhLFNpIjkpSFVjR3leVF9APVpta1RSdCJtJlJvRER3dmo9VT52On1xZHRJe3J6eT0uXzhXRDdacHRJbk4/Z2p4TGsiUDJLNj5dXjwzJWo2P2UsYmk/ZEwoc1FbNURgPm5mOUV0''@;'; put 'put ''d1d5M0UlWnxzPXBpXT5MS21TY2JncSZJZXR6ekB2eWVqRCFlNX5WWHZ4YXc9Xzhlbjtsclg5a0BufHIlSkVXKHptSH1hOFt6RWJqV1Y9WltgKClAWV9PUT0oW1IpSTteNGhGU0RhNlAyRllmTHsyN25+endYa2U7cmJoNzdAbnxFemk1d2U1WUR1MEcmIlM6PDc4YTMvY1t4L1h1P1dXT3k7LyNy''@;'; put 'put ''WWR3IU1NMi88fl56LktCMjR2fXZLNW8+JC5sfTFzJUZpJnpiaFNMd1Q0IVp6ekl4VDFdV1AvM2F0NmwhYHRDR1N0dmREPCspT3lEI1dYJCNbWEJCImJ9WylFXVIlb3xaeiprKUJhOl8iJn5CWXJKYWM8dikxQmc/WW9IMDtReGd7ODRgQW8lSD5lSGg0ayJJdEJlW2Y3aG1XeT9xJkMjWF4rZVNW''@;'; put 'put ''WXlZTkUmO0siZTs+bHhWJFV5biw/YikjMzN2Ty9fPl4kbllURCIiWnBjU15sVV98Vj0xeENsYjVANEtkTztaKHJfKTFGLHpFKVk+diNERlVQMjFoLztuaGEvS0tjIzkqQzFtekEjNGRoLHNWSnlZdHdITTRGYEo4Ty56X3dZbHtkU3lYIXxMKllBSm8oTzl+MmhaLDR6UEY/JipjPzovPFIuRVJm''@;'; put 'put ''WjFwdUMyJCkpMWNYWDgjeyU6QlRZM2UhYDk7SyFAP2AlWS9KQ31Ca1pwPEYuPTghOWs9W099OlY1SnJZPklIMVdXbnBmQHI0IjwwKEJhfEp9U11SU3dmVyZHSiQ1VnNpcWkxZExjPHJfRFJ3XV9Zak1NdzJ+eC54alVsRks3KSlyOy59VHxXcmxxdj0lUlpweUBUd1Z1IX5GTE9gSyRAeEdkKGtm''@;'; put 'put ''PlQmQWFJOFJYbWFMPGRzOXNpWkdHK2ghQkpiNE5lUThHY3hGWHBEMTNzUSs6fEIzXyFjNzZUfixhXlR3bntAT110cnlMeWI3VkVCc2ZaVl8pNH5obVYkZTtCZzFSP2VAOl8sZzRGaVtYUWpvb3h1dHsuXmshMiNSamdZSWhqK3NKTmp0dDFUNVQiYXJtIWw1KnsqV2ZtYCw+dG1iKEtALDR6ZDJU''@;'; put 'put ''JDVFOzBDIkdddGIyRUw8cHJnO28lanFqaVRtVUYub3J8Rz9aMCVIcnx8fXRuI31MblVRcnpfR3k5bTpjWnpsbFEzV2h8cltCM29fe2VIKVpPUFphZzNVZmlXd1hJN1g3QDYiQzJmLjRAVXVISzEhNVVWJlFDVGpOOF8rfVRhanlhbCFbNDZMN1cvR1dSL1N6RyNOYTh7c04zSj8vfFg8W3xCJUVW''@;'; put 'put ''cW1PaS4/QypHTHBsWD9odiUyUTBlb1JlaEJCPkRzZHU4cFk8ayw7Qnw0X1Y0VCo+d1ZPdngpUjEoUz02Nkw7UV1+N0xSZ2VjWGB0Xyw2VHYyZHhQME4vMWV9VSN9QTtVRDViQStySXFaTmMlSlpFcXE9UiEmPFk4fkRMLG95Xmhodkl4a3wmc2MsdUBWPV07Wy5ZVHdgcV5xMml6ditaYnY8VHsv''@;'; put 'put ''Y1VTQUJ0azBMKmBmT2t6ZG1KeHE0Rm9pKkhvQF8kPy4pZExGRFEzSypaeXtXRkFWczF7YnE2PTVzLnxyV3B0XW1uOGxqbHh1dz9wI3N7RkRQfiJ3KV0zVig4NT5NZWI2KTVDel5rPzxjTWBRJFlTQ0deREM0eWJScH1OaT4rKlh2YGFyTmxTNyksMk95UENkRjQ3K2RtRVA/b3ZiQzNDJltQeHtz''@;'; put 'put ''P2IuPStfSS83b3F6OUx0Rj5nTUU4ZD86SkpPKF1uaWU0fk1fYn1FdDQwdSQlWC9+d2YucVY6ZnZKXXFAJDdJcl54SHs4OUgjI2pwVDskUiI4W3MmOiIyWisjPGVwPiovZUgvUjpmalp0IykoRm41Y1JEKWJATGh8OipSRHJkKEZ6Vl9pXUdGKE4xXTt0Mm1gQm42MmxLXUZLcXkpX1tkfFFeakVK''@;'; put 'put ''Mms9MS5RPjM2bmF6QWsqKUZAL3Z7Mm1pdnFgMy95Q1pWKH13VVJzUlYvImU3eCxXJUs9KkRpOXE9QENYZzl3cCgmMzpOP1tSa104dWtaVGosPk4sRFkrSVdRW2tXYU1qZDJRSCt8R2UqdzdVPmRNYVB8SWVFNncvIlArVyZmQGU5P1hkQVRiY3lKOXpIJF1MaE4xRnY9Tio3fS5IVlFZNkVKJlM5''@;'; put 'put ''L01genc2eSo2Kl1iO2krM19SWyVbdjZDNjxneCNMVWtzW3pLNGFobEV+XmUlcztranRQRz4mSXUoPEJHL2FpfnlfTzNiWEU4L1lFUUxEQ3ZsQzhNcDZyY3l3PypNZCxFKXN6YkxPdS9FbDs7T0pbPGN0dzQ1LmR1OWR6Uy5aOVU3bTBzMHsrQ2xnWkFsJihPLksiPGBOT1kyYXhFZTIzV25VXXIq''@;'; put 'put ''cU8iTTE9RzNEfj50RnxVP0BjKCEjOFBocFp4fnl3QndMcWRuby94aVBbKy9oOGJgJHFQUU84XTx8L0JsYiMqdlB3OildN3IsUSp+N0c6WkNtLzxDe3RHUVhuTVFvLmxybCVzWG8mT0lXcUZNZ0tINypWTCxYSHBZMWlIXXl1VWhIUWxxQ0JAZCEqImBadk1qVWk1Il5rJWV4b3ZCWldnInhUcylA''@;'; put 'put ''aWh5RW99TSlVcV0iczI4bEdJMj87Ml12RHFPUWNMKntzIiohbDU/SE40fWtsfiQ0eUtDYy5CQldaXnFTPEgkZSU/VmVDQmZnIn1rMk9mOGw+KHcmUVNFdmI8OzVtQShTakYpSHMzMmYvXmV1REJXJTd0VSpZKHMjeUVKWG48TExtSUtiOkFxK15wMG5sOnV2TF9rMWtBcXUpaCx3WnwjK1A7ZUx6''@;'; put 'put ''TkdHNEVjNUJVVz1abTx6dzZaT3U2ViNUTEprVGQxPDs0V2QpMG94S0FBU2pUV1NiTlswbHxxUTU2ZjQ7Vmk7YCJDb0BNdnQiUmphajh+QWFHI1dgM04qMG5iTU90S3FeKytpJkI9O1Z3OzU3YTxfWjZKLHp2PTo8ZzlefFtvbUdjaWM8bCw6KSs5Zl1MZiZPMUszZ15vSDovdHovOTo4VUljJH0l''@;'; put 'put ''IVkwS08uczRnaFU1LylAViU9I3A0Xj9pfCtnSHg+NldpVkQsRypyZl9aVThnWil0XXtUdD9Qe2pwYWp5Vz5ZUjtyZV9mWW5CNmBLL2pQd2E/SHN2cnNKNzx6b0dYaXRpKjFfSDZSUk13ZF1iJH42Y1NsaHR2PV9DV3lUTkBGZHtIUitBQ2BMRWUxR3kra34uPUtuJjQ0MyVsVjA3anJPQUspUDRd''@;'; put 'put ''PCk9I0E3ZisiYzNRSyomczosXk9MIn4wX2N2ZSZmUF1dQylmVkxlUXdQaU9xTEkpbT9Me2pHU2pdKTY3a10kUVlfNUlxamEpMiE8TXsramh6Q0EwQUhRfEY8OGBZY2ArJiEmVEJqVWIhTWJ7I0RbSDE6ZU8iW2IqKmk2flR0eip7JkxhdnV5ODYuWFZGYldsREYhIV0kVU41NWx0Tyk/cDdTSFc4''@;'; put 'put ''WW0vRnw8PipMQXJnflZHX3N4YSlpZio2Zz1oYDM1Tz1MZlMvY3pLJjhDKjhlU1o1eSpkXXA3WmRHOTp1PTVrI1Rebyw9bStoKHIxJXdTSVMhLHxzMEguQjJ1JmlELCZ9XXMibXE2X0hDakZ6OnR5Um5iX2swQCFCRGZeMi5xXT9fSS49Y0IiTz4+VUBLKUY9Z2UvcmcuejJtZ0dPXkkqM1swV3JQ''@;'; put 'put ''TCQxTyMkcG1Mb3FDaEMkOVdofUNmTkUlZDs+U3slcih4RiU6XmQ1NTRKYH5PUi47LkF9filXI0heNzJUcmR5RGsvPTZZQDZYfT0qdU1naj09R0ssZ1U+cUk8W2ByV2h2XktUMns8WU0sdEx2WVYsdzVuUDh7LDo2cmFRJHtlNC4zJDArdXdKRkZ+Y0hUb1ZEPGJaNl9dZSspT20xXXl1fEFLMTFz''@;'; put 'put ''UH5Dcng6X0JsRzU3KztGP0lYKkRoMFdxTkBQTCR7NzNrJWgpT0crO090UVVKW218VHQ2XU1HcSZTbz4lYVdZLDdhUFJqejAiKXxCXkQ4dzUjLDhrXyVqUEU0JjJ3Xy9fcz9GIndjSEJGWWM4fUw0N0xXaHdoc1B2L0V2bmtPdSNZNmpuOXBIdXlxMVI3RTlRd0FtTHt3Q2F7ZSpQSV1jdUQqd0h7''@;'; put 'put ''azh9PlRFXUFKMCw6KiRhc2YySDA7SVJ6ZTxaYzg1VytVczZ7I3Z8RiVjVH4vPG8+ISpjV08mQEYkdUx3Xi9VT2IoJXZPUDNuK3cxfks1KnJhMnFVYlswNUNTR3V8NDoxYXUiWVZ8dFdgZmtSVE08MFclPHdfUlRjPn1lRSVXKFlzQ09GaEFbT15NNitQSHEqR3FISCpGWklrTUhqK3J+ZGJqNl1H''@;'; put 'put ''MlN7alI9bj9pbHVHJUxQLGgyeUp4aEIiMml6KnYiPyZMOWhQJTUxTkB7bUk8ajdBemVBZHdyaEcoSjZvTT8qbWgyQyFHZEJDXztiK0wiRUR2Y0xpVC9hYEVPTFhMUT1SIXt9YVArXkhqLzRgQ1sxRk9RWmV5VTpUUjp4Y2MpfU97K0Z4d3ZQdG9XZWtFV28mcHlnRnIvOn1QLzJoSFJqdC5GTS56''@;'; put 'put ''WTYwK3UyUm1aYFEuZzdhQG07LkRBM19FPTh5dTZFQWdQe2pMOCRgV05IfDJ8XlY/SkVbblplRFMwR2N3WVpTUUohMkVVblA4TztlaDE1fWAwPzJUWDV6ZFsmJkxyJD5TKlFESSgwNjlRV2A3OGgzVnA/a11qRCJ3MHAxXTtyczM7PVs9T0kzaSgybFh5alEpRDZ0SWJCLy5hXXxXNjk4XzQjP15L''@;'; put 'put ''KTdxRHFfOV0mYWI8Uk07bWM7SSZpPVddOF5fajlnMzI5QnxoaGo7bCxPRy5Ze2I4ezNYVUtKT3Y3en04azIvcG5hOHFzY0ddMWAqJmZLVGp2LDslQmhwX3EqW1FubjFbTyI8U3p8WDgub1l4XmFFV0MybWJ3TlYjSSIsendtbmlLe1pMKCt2PFJKZGJUbUAlemVqX2s6PFJaYVZBVWw1VHtAVyUp''@;'; put 'put ''JT1OIUNfX2x6dn1SQ3VVTSRyTl11PT0qZ3BEWXdEUE9dPyVpUmlAQkZ5Z0NUNSFkUnc5YzksYHJ4XyEsLzx8aS4/YWFqQ3JQIlM0Vm90LDoufFlAR1ZeX3V9fUJnQ05+czk9fXI2Ukp3X3ZuSD1oMTBLSzBAMDMyX31bdzVgQGI+NHFhcztUYCRQaV06RUQxOXRUPypBVDNEQDNIKmd5Snp+STld''@;'; put 'put ''em8yKiJHezVtOklBM15zJDxHa1YuaSplb084c2o1YzNPRm4uLik/e1tUWT56by5DcT9jaWgxIXJNQCl3ODdgTV1KQVluUko6LEtCd3lZOlNWck1qSjkkW3dEI3MufHgmWjxDYWQ+aHwpKi8vIjRCW3NaX0pGQjU5TzwmT2Q/ajdXMCo2dHBgeDlHanYkbzhsQHh1bU5HLCg2OE9taDxvNzhZQlo6''@;'; put 'put ''fSZIO1tATzFaeSNIfEssKC9qamVGNFJiekY7dkpWVSYoQDtBQUZZbVgiYVBidW95YGcuJlthMSp3WCRaQTg4eWloPHF7dyJgQWs4PDxDTTB4OyhtMT58WiZHRmM4dz89JEdERjFdXnNuT3p2bEwmUExqTGpsSzhwY1FxLkZffklrJHxgbH03VnIxZHRJI1FzIko4QnN9ZDl7PCVwQF51NVcrSzRl''@;'; put 'put ''InNUaih9cyhKVEQjaUFKaUwsMS5QfmElfl1DOz9ATG8reVtmKntMYGFJO0s+WjNJUHFdOW97NFljMHpTP2hMUnBOQjtYLCMiU2BiMVRAVFJJS2tqc2g1KGZ6KW8heGszam1ifWNwKE0rZC4qa0wwO08zZzNqNzhSUTROUWpLRkBMOFQ5U0JUeFM3MCEmUH1tUWl1OSp3N3R1cVFOUzRXIlYlNH4w''@;'; put 'put ''YyokfXFXLG0yRE8pOFM0R0JUN3BDRWQ8cj5oYm5aISZWIylESSNTUjw7cTZyMSJBdVluPFRofXxVenc9XWNjVWgmPTZ0cyQyckNqIkU8Rz82TyEpeHxqS1Jsdi4xRU08dlNLSz1MZGY+bipuJCwlfHd2a0clXjomK2FiIm1oRGpOPHRGZ1NaWUB8ZzxHW3txUEFePVs0JS5xdmksUz51NU1vVlht''@;'; put 'put ''JUJhKU02MnFFYHh2czlCR1Y/eWw2LDsiZXg1PlU4dkVbfXpwdG5OdiM0OVQzcHNmdEdCL3A2W1Qie2ZNXiUwdEY0bS4hKE1JcWRZe2dGUSEzezdRLyUwX0U0TXVmJTBJWEVhUHpXd1s+aUhbRFM4V0V3cnR1XkVxSiYvNz8lIWZNSTchP00uRTkuZzVKUXFVNW0qVnFNeGZxeylaKG1eP2M2TlQ8''@;'; put 'put ''JkdyVVJtJU18QDk6c3BzLnZIS01qUHZsIUQ+ai9hWmovcENhfE50RT0pU3NlSkhuJUQ9XWhtKnJwbnF2T0o3Xldea20+PncxeU5QMV1iYiNaeyRCVzlpNy9BKVtjdCl+RSRbcCprXTcqdD0ubWJOMiouTVtJdUJnY1l8fWtjVlVuNzZbWn57R3dxYWFAb0l4NTdXeHJeeHolVUZ4OEQ1OCo9VFBQ''@;'; put 'put ''dGJpVzp7SUBBK1lvZEojSkF4Ul5fL2MkVFFybUgsOGMpP005M30oXXx2VClBMzY+cWNdYGF9dGBqKiJ2d245KmtLdj9MQjY0OEc8VDc5IVJrUXg5cHFUVHxGJTUlYyE5PTYzJXVyKkgjX3xySD05TE04NnJ+bW5ZPzU1anwqR157ZV8kTWwkbyt3ZVoyPWlgRElOQXgsKmdoJndiVWw6djd8VWIx''@;'; put 'put ''dFhzZy9FM11rPiY0ail1ZkRMKS8yUU9mPzBIJHpOLFEvekRzV3E2Ojsmam1tVEcuU2lMQztzJVRjPSFjL3h6bzNIPTJKelJeREwmOWVOektse28hUW99JCR8bXkpWlgleHBSelA+dDR3dSpPQ3p6WW9eaXAoM0lOVlAxTF9qfDdjeGhWb2hWdllhfiQ1PCRdV1p3K1E+aE5UIlhNdUVkSkdZR2p4''@;'; put 'put ''LlcvVkg/YU1dZ30ifDU3QUNXMlhRXypab2Vocy8hWkRqVlBQI24ia1RhekkrbVoiXmBmKl9WelpsO2h4Vnl3UlpIITc9WmltQFJiJEgiQUE1ez5aci5GW2RqVEA/VXd1RTE8Q0pZXWBdJVczKGtRXj9LQDw6ayJKWTE4PlNbfStkZ3M0SD5dKldeUko4YEghN0ZAYlFtVTo2a3ZvOyhiJDR5NkFP''@;'; put 'put ''c10yc3Z2aXZpeUF6Yjk+XWRdLDckezl1JjQ7Vl9QW0g7fFdsPj1hLClnXThne0pIJmRgY151bGVwMCQ0X3E6e3hvLllEbToxR0AhdTlfbWU+cnEzNkZieE99TyUhU21dY1hFfEROVFpjXU5FcHoxLHI3eTVFVVBQQDd8QX1jYmZDaHc0U2o/OFRSfSFsR3NMfVpFYkl5TGszdzYqdD9lKUtLWnJu''@;'; put 'put ''UWoiTUg6XWNSJm1QMitqTWEhV1JGVEYxaiIvTzB7TCVoOlpTWzUwemU+Ynt3WjNNTmBeeUcmeCE0Q3RIX1liLH1mUSgreDtILzZbZC5NYHtkcCJjPEUxPGo8RnUzMXY0XVBQfjdLU1JjW2F5dDV2THA8NDNLNjJub31HLjJMN2pEQmZuXTleW1ttQi9DZ2FXOkd0NzNASHZdbFBAZ310fSFMQ34l''@;'; put 'put ''QFU2JCpkQ2crWWl6ayZ9U0BCKyRFNWJzJmVpY1o2ZkoyUyNSJDN8aTFIQmZhSDBfWmhtSiF4QilMVGImSEd7U1ZRJXRDakZ0VlpPJGpIJnlba1AhYUxedilNbFIsSWRJeDRydFtIYCw1KkM/NkdvKGt5QGFUZz9xPnFqJHB2WmYjM0h8TGJiOkh2YSpvK0JuP3MuMDdEPiFgWG8vbXdJbENTdz9o''@;'; put 'put ''RlRufkJ0LFAldSosQihGbTJmbmhMOiN+Q2h6NSg4WHwyITVHYyRbYlp0fGJHZkFAZFhhXnQ7P0Y3cTg0ezhGIVs/cU9XQ147KmRCaUJYS2FMQGBAPUQ2fFhDIiMzcXdZY2h+YiE7KHpiOnExVDksO19jTElFLjhRZ3M7JEdWfnhHTDooa3goTDgqXT9JZiVeS0MsbiJrcXhJInpXQ3lJUEJxeUNq''@;'; put 'put ''Pn4yQzRVREdJZmpfKjpLJD49KSw/fG92dykhOCNSRz9uLEdqfGhBQz40T0pJVk97R0F5VX1Md1t9e1BJfmB8X0VaVUdsSEleN3JQK3ZmLHx1UntvRn1uZVtzXSkqTDA3ZXpaOGBzIkpPWD1SXkoyOHBZJTV9OUVsfFF2PTowfCReaExoSkVyS2goc2VlMHIlfEt0aCRZUzZYRmgra2UsbyUlSjF7''@;'; put 'put ''L3ZdX1R5ZE0xQWVpYjkhRyxwbSg4YG1NZk4sMDRUL2R9X15idU5oUXFXdGJPNmB1czdxfnliNH1FPjVTR2w5VEhWTWN4MDFWTjlsMDspbihrSGxVPn0vaml0UCpXVzUmVkFDZnc8YUdEMXl8MVcvVyR0NFEvJm9AZ1E/RzBlXnJPa3Y4eWk7SEl0KWdbT187ODZve1BtSm9MKkApOlU2eUw3fShb''@;'; put 'put ''JVFSeT06NnIxK31NRlh1MS9IR31hZD5hKy8qS2Bne0pYJiRNMmx8X2R5TTdSTjV5d3pDayo6alhYeEJkIlkwdlpWKDdEYXA2KCNXaFE/ejNqaVBBNSVVJnQiIVZMa09XLCkpeGl0cl9hNHFqPyxkfjV6Xy9qUDdGQyopbl8jfkRwOGc+UiZiK2FDe0NwWmxHaipPQyMpdHY/OGIzITBgKjFuKGR0''@;'; put 'put ''eHgiPF1wcXRmZXxhWFMmOEZVe2pZdVhPXmZdLjZjO0s6e1dRTGc3LjcjTVpOV3R9SStPdGtHam5ENHNOZTU+N2JQKkdKNj0zSjBNZ30reHNlOGpVP0wufXdlVzYsNDw/KlpgQEBHXlg7R2pzXWBacCw6Z340Ok9lRChuSVNBWT9pMXxvb05JLG9COFdQSEg6dnRSbEl7LC9Ue1V+Vn51STc9WVZr''@;'; put 'put ''YDQ/MkhRMy9tL0xnXWliTmNtcVdQUXd6aV8zVVA1LnIxaXJEJTBqOn5oK1pnXnY3NnUpKXdMIUJZV0NRTFleTGltRWckbGRPTHFgXX4vMVZSZnt1MmhJX30mRjFoIW5HNS96JWdSQjFxQEFLeW5QeXlGVFJHdH0hLCV4K0xgLG9OZVBjM1RMTmMsKDFyNUc5KSooQXAlJVMqTjFLLDx9Jms5IiZS''@;'; put 'put ''PENUdng5bSR6YyozN0JjVTxJZkM4PythZXR3KnhzeTAwUWVKOG0ofGRIIzY4KTo/bSh9Y0pIPC5lKmFqR1N8IT4zKDV4TFZLYT5QZSw6VjxXbk9ZLlZmUzB5cldxeHRkN0dRa2t+TDA/ZkdvRzJ7ZlhnOHdDVF1iT3MvaUoxcWZaUW4yMmU6Y3dGV1I9WllubDtuQ1FmZVBsZCRrUzhYcnlyfUgz''@;'; put 'put ''aClfQFVbYz1aXndhbkB6XV8wOGZxWFtHeW5AMy9+RHxYNl8hdmYzfkw5YiJlKixjeXtQKEJgSURZWSplZzNtP2dmVkI6Om8uLnI9VnkqYy5vWWxrKz4hRSJ2bENxTighdlV1eFtdfDBgamNOTy9IXipXdWtLWkhdKmAxYHsuUFtCdGBwZEV6MClpUXxqTzl9QkFDTClUZGIvem5oOilrSmRdNlZa''@;'; put 'put ''Ni5aSmVTZUNUVEtJVGh2UGFRVHRbbGEwN0whO0IrVTpEOzoheWFVeCZMISpUSCo4eCY7dWxzP2s0O1lJVkExOEMhak51XzU8NGRZb3dkdHNlNzlGbEl+bm87bHRwXUsvTjw8K25dPG9KODhgO0hEZ1tscnFOfl0jcTBMfjN2dTVCbH1qTFQuKHZWeSghWnN9QExzJkdLdnxNMjxZLCZSSFAiS0Z8''@;'; put 'put ''by48OzFGSkZZdXxJeTc2VFoqZV88MjRhV1d6SXlrdTQwQldkTWVXSDxsaCFDZC5jO0ZvQ24yPF0wLkJKfFpvMTpHRD9qSjxKfV1pbHkjSTE6UXhkMCZdfjt3ZWk4JjlqX0NDTXlFblB3NyVxQSk8VTd4YE5QZG5wV35GRl9CazR8Sn1GL0psenoxTyZBdUdHP0pQVjZ5YkBSSFQ/K2p9O0tPVk5S''@;'; put 'put ''P2VDRjtFSWomK29VOzx3VjNIQyNyUT8zUEpgPTolV2M0PGwiY2U1cmYuTVpMdzNXd35CbnN5Z29SOzFQKWJbQiZtLHEuajI5MnJndTcvQFVMNlJNPTM+dlN5fCElT0MhdF1KZGswM3QxTyt6UldFUD51PCJ2VDBjbD9hXm5GO0xhUSV4OV90P2w0MWVFRU58eUk0KjE2aiJAWkhmNWdaWlR4JmFm''@;'; put 'put ''YkgkVVNZKklNIW8ifTF+QX11cUBZOmJBP35FdkkzbXZQTy4wYjpNJG5HN0ZmIWRjYTo2NGR0bkZ1cFR0MWA8UiNqfk4uKT9rPFY1cil0XjxXNT8+MnZRSUVYW0ZbNGZtKT9ycDYkNUQ5OUNBX1ZGTmxScjM6cjNgZnNXR3A4TFt6bXlMdj1Ne0t5eCYjbVVUd1plSnU0UXM3T3srW040fFpAWDJ4''@;'; put 'put ''bkJxPClGRWxjJTJTKFJVfjhxWV55eXVWK1k6NW80JHxyeyIuTGo2Inp3RjhmK2FnUkt3bCg1cD90dGNuYElPcyRHU2ZHXjQ7JSFgTWBHUjV8dUBQW0ppSVFwLFozbUAwK31oZlJIMyE0SmptRDdqTlhda0I9Mj09RndXInF6KHNaYWtzey9FYjRedGdqcj15dnUzVyR6NDhdJl1mQ0A4ZTRDRWVW''@;'; put 'put ''UClhSU4kTCNpVDRXMlVzdXsmW2ROK1RqXyVtY3FGM0l3MikkMnZuPUc8PjJAMD1eelQ8LGpKN0hebW1MIkZuPDlDOHAjLyUwMXV0JE5qNGUqM1ZPIW0jNDs/b3B5P1c9OlElLGBfJFo6bX4kfmghXUxpI2ZjIW9xe2d7PyN5eH5Gb1M2dEMqRnxQdG4oRilrSiEpI1s+JiQ2YDohZThXQm9oUj9e''@;'; put 'put ''KmE6SHplTFBKK01JIjM6NjZ8Q11ERUx8al1SPGQ2RT9iOCMyYkZFPG5SQEgsb3gzIjtCLDgpZHhnUn17KnFFKDFAZDYkUno1Rk06dEV2a3RLdUhdbyMzQUFEaDlDSCtjb00vUX51OThONntPNWt0YTZaTURqJC54MCskITJGL1FUdVtvNk5LVTIyb008UDokUz5KKy9KMDAuSE4hK30oT1dJTUl1''@;'; put 'put ''QGUoT1ojVXlnbWhBUSY3aSZeQm5VX0RIKjJ+JiZUKnc4ZHdiUyxgPGZCOWI3I0dVaD5AaWxLIS5rJlMlZGRdLl1VR2E0ej1aPUxISk9jb1lmbG1nbFdCQHtac2FTUComS1V1QyMxaUJNKHJvZyg1RWpfdj5gJSZDQyJfOTc/VDcwcTpgQnZGcnRkQXxlR0tAeStXQE5nMDVeOnxuKlJ7K001Rkh9''@;'; put 'put ''W2dMUkl2fHhtJUJvUixmJG5vNUphfmQweyhAbUxuWW5hOXkxPWxPUXkvQi5Cd1YxRVRlXTEjNlk9bTdOMG9ZImdoInhtUlJQWmAjTXRlLFNITDpjaHMhMVgwUVtTMWNOa2YwN0VaVjg8b1J0I0ZiUT1BKnxDX2Q3ajkmWzZ4P15PIipsPGY3X106K1RtUWc4eXQ6aS5zaTtBMHhvSFJALERCK0dM''@;'; put 'put ''Q2Rsfmw8YXZUeVtlMnN1U2daazZvUCw1NDR4aDtiInFZakA1Wi4rV14ucC8kUXEjKyk+eyV2S1lfYSNBRyttJlZZfG5FQzsqelBMI0pkdiF8QTF5blFCSn0qdC5RTmQ9KVNSPC5jRkpURGc/byF7bTlYJCVySWQ5ajlvZHlyTDM7fVUoOVV4R3AzWmpwUCpyZVY/QiJQWWUveSE0JFo9ak9qTCNg''@;'; put 'put ''NTxpNzFHUiJyWFhBc310bytLblApTyFeKzQ4Kylbdk5LeiswfTxjOSE6JFJGNVhgL1pbKkZkME1OUFAyfFRyVU5SbTVVM0JKc3AxVGBYJWRmZVJBYTdIUFhrT05eeHteM01rImxOOGM1SGxGW2Nbb0A4KjQ/cCZLeiZjPSg7eVJ3TGRec2hlYyRTQ3U0S1I1azFIdGl4N3s0LnwuJVJWT2YpVCFD''@;'; put 'put ''OU0hQi8oWmY7fVgzWHEiKSlzUSI0azRHSDIqaD57eSZmenNmVSMoYXwkfiQpPnFaU1M5NXNsdlo5eXtbNyhTLmAkSVVLOjFEP2AxV2tdSGB+JjV2dUl+cFNve0lrMG5XPUtgTyZiJiUyNDcqOkp9YEBLXVhvODdxcWE4NDF9RF49JHkrTDRzKk9YQDpodm42a3UhZ3svdzIqOlp3LmMwNUtHZE1n''@;'; put 'put ''PXJiV0M6LkZxZW52ZjMhIzxHL0FgMEJ3S3w/VCF7IWhJKzZJNEZAd1QlSVZSUDo+L0hHdWhiNTR0PDM2QiY6PzRGcGNwOywyIWRzOlJLfTwwTF17TDVvWlUpJWdPKVpGZ0R0L0VsMCUxSGF6cWJoTmxpd0hJP0w8PzwvakJCMGFNNlk5OmtNPkp9L1kpPHYuIz0meCZFNEUpTX1bZC9zPWRJRF96''@;'; put 'put ''TSM3ZVJSX1JKZk1pUjUzZXF9M2o9aC8lQmM/fWJmNUQpczRJdjkuQS5lbytCVjVGdFAxcTxLQiJiL2Qoe1dRMEpAXTUmNTYzalpkT2d7O3NBIjpFKHw7amk9MER4Ljw/SXg0OllgREpgaEN2MmE3WGJxJUQjfVlVOT91Ll5tW307LERnaj9hYzBveEVYM3Z4Kl4xancuMDgoO05SSHVZbTZFJSJh''@;'; put 'put ''KmM0RkxkQkYjcDxXQVEjXyUkbGo5cTN0NjtmdXE2bCsrclN3SXt5ZS9ocXRkaEo6WkRnKWQ1W04yV1J4Ok4sWzI+TER3UW1aPU8qWDFhXXdGMG9PW2NFYUVqN1FrRFY5LGcqPkYkWmU7RllBfCllN19pTyhUXyVCfCtFI0khUCJZQkVKKzlNbyJhbTYrL01RVTp1U04sS3c0c1AkbEduIXVJfTg3''@;'; put 'put ''SktyeytAcjJpK2t4K1UvYSZxOGR1QH1RLitVZztsa2MsK3htOEl+Nz5XUz18ZSRTY0RJcHskXURMVExdaDxxbk5RX0BlfH1jIWJecD96eVZILDQpZUY8I1dIQlYvN01pPnBId2poZW0sWTEoMjZ3YHpRfEpoI3tHJX1ySnRYV2JWS357MF1jXiFocHtfd3dKRGI9RVEmbUxENyF8XiZBTSFwaV5V''@;'; put 'put ''W1ombXhiZ1hXb0hKSn5SYUVORk4vNXIpLEZeOGNzZDAmPX1MWGJJYiw6cV4xUVU2RT48VHNDYXZlNWZSOGFmWzx2aSYvYFM0cjB+YXxzLmFJMVFIS11VLkw1cDFCVWtYXlZebzBII0lwUH5fNytpPDNpRD50cllSO15qU2M2PXBjTHc1I28wfCxdMjE/UC86ZVVIfCNJN0spRFh0YSZyO2M3ekYz''@;'; put 'put ''OSY+byQwK3UybisuT1VGQUpIPzEucE95P3hqK1VaWU0qaChFMCpSOU0sN3w5KSheXktde0UxPC8qL2tabmRhTUl2I3U6W1sxTEVVUkdoImwrT1s2R3pmJU9jLF48fEVpXWVmUCtrUnVgKi5QaU51N3Ilcj1OeGRATkNuTGt6OWdidF0oXShpKCpCLmsvcjxPczpPZnV5d3AvOnNebnlDdDJRdndv''@;'; put 'put ''WzxJNndVP0tDZHwlQzRXTG95Ok8xIzY5VD8oJlRwUzljN0xdLH55QVdhX0taeltLZ0xZSSEuR3dnW0ZyTG5hQiJ1fTlOJTV9LHZ0Vio1e2NkRyo7Z00uNG1CbTR5VFN3Pl5LI2d8T3BCeXBLY2cvblVDQ1p1W3UvaytQVyZqUjJmTTVDJFpKRk1HQiIsRT08P3p8Py54Q0c6dzxaJUV7cVZpbWIh''@;'; put 'put ''MSg2aHt9LDY2eGhVPCV6IXUpZW9WWSF6JlNueCVKa1Y+ciojITEsKHdTKz94JjZzT2pHLGFndXdUNDZ0bkkxcl1qMjQ5QStAd0VRREVxRS9bI3BOUk82RFRXb1RRaERoS3hvay50Wiw7MGBtMWR3P2BxUz13fSpKTTFKS3d9LGcieFAkNk5VQDxNTzlOP2lodWhQLktWfnVSLzBfOW9SL3Ilcn47''@;'; put 'put ''K1IhR2JfPDpVfENtNTUvVGttdS5sQGIvOltmUGI8M2hlaHFudiguV2ZOW1tGYWhsYlJwPkRaS0Q4WW4rSSI/aUtReUg2WWI9N35zVj8jYHRaQG1+OysxRiloWXpjb29jYWJHbGglKV4ibHEyITJzKytpQ3NWV1s6TTNzYUsrMTwrMVNkI28qRVgpeHRia0AyPnhdMm5ZUF1hNjRBRTVzbUk4XVRk''@;'; put 'put ''QUdJfH4+UW9RTyJYPzlMMGdDXjQuY0sqTkZSZXpLcmVIYj1zKUkwNTM4bkAwWiNyISslPUgqazo+RSlPbzUydnJvdVQjSVJzVVM3Om12dlhuO0pyb2txfCVAdkdNYSNvI3pKakhUdDA0IWh3Wz8iSGNvSnwwLkRRJXk4RzIqNjpkSDsvdXFjLElUXmF6eHs5MjJfTGg5YHdoOkNmVj1oeU94KXow''@;'; put 'put ''W1JSdmJrLl03SFVAU3RbaTliZ2x+Wn58Py9pT1ouLyxOdWdxSTopWz8rLkx5ViwhWTB9NmUjM1QsVVpwQ216NjFmZjlSKXZRYVtGPlI0SnJ9VU5PY314UWk3TTFFTj8/Qkd1aipLWCYrVVB5SXI8emdGW3g4TGtsaTBVY2hqLnR7dUJrX19PIjk9a2lgRS8oQml9QHcpKTo/dHl0fExRYXBvcFM4''@;'; put 'put ''OWoubGJWTzA1MkhoSiU2REFQS3skZzlWKTwuLylyd088aisjKj14fjF2SGluRlhOYXFtd2t7Mj5DaEE+LHdpaV1zdSgxRWVJVkh1NjMmMT9iM1B+T3tCe204WjxkbkZHTU8kOzVSbjg7e0V0JVh3TXQ+RjBOMX5EcU5JIiYkcyxsJDhVYENab3UyNX5XUVgrNzhUb3Znd3szQD5hPkxwKHtWOUw6''@;'; put 'put ''a3dmWVhJMig0fn4uJW1MMiMxZ2Zffi81OzxFc0giQ0RkRHk+XUleWjd1UHAsZXc5aHx9W2wsMCFmfVF0XXsoZ1NDdVYxajBZTkYqdndEOnhrQjswblsxQXMsW2BBUyksSm4pQHYpKFVAIlUmMXtZNUhPWWkzc2EzO2xpQjI1XyIjL0hKcyNKbj9bRVBUT05qWEt5e15LWzdjSTkkWEteJkR2PkVO''@;'; put 'put ''TUN5JTN7ailqPzdxSzd9SX5sbF5dXXh+Qlh4JXpEbHVCWUczaUdINmUveithfXc2c0RKY1FvcilVXylVUm1BNngvYXNLY3BSW1k8Ymc8fF5mYEBlVzc7ZF15IWRTbHU4LjcwRihka0FvSSh5fFtVX0lYViQ8MXp7emQuUXZvdHl3MWVbMmxRO3JJNCZEOlFhUW5UVDc2InR6c0oxOXwmajRnZn1b''@;'; put 'put ''YEZtTXl5OmhRakc+bTI6N2lFXTtePEcpdHBCZGYvbSJ1fnxMZDBobkZhRyRtPlpQeiwjSDk8MzQ3L3ovX2tYelM9ckwsbHZkRmFIfkFzcyMkR20xeml1SjFwZmdMc1VJUS4oMGsjLGsydXhSfFhGLj1SOSt3PE5ZSSt3NEVCbyQ8JDR6TElOOFBeNTBtNzZVJng7UTJYXl1eY0BvKlQjZ15CLili''@;'; put 'put ''fGhrQS89b3dQJX1gPSgpWUNHU3FqPn5rSlNIK0d+fS48UiM/WnZlIUtPRUZReHpxcDokOVJhPj8oL3k6OyUjezMlWXozLl91LzM1Z01xVTE3QDUkZXh+Y2oyTmB7NV1JNj50RjNXLyY7czduYTw5QmslT1AlNX4ucVVgZl1aUEE6a0NhZXZkJCRrPl5SPVlkJExIYCFhTUgvL3RBVm4qKXU7Kmss''@;'; put 'put ''Q2lbWVpwOVJ0SCl4S1drJEoiQ3RVfSwyS2tlbW04PUVudyR2eH5zfmRuI20zMGVJWTo3UExgIU89aFt2dzEzPkJxWG9AbTt9Kyg5Zmo2dyYob1tDV29TdEFTSXUuOGFiN2kyfUdUJUZibXYrMVswezc7Tj9IMT56YFZhXjNXQ1ZvN2xrNDlyJkgrVmEqaDFrbHhhNlt6eChuaCJDfV98VCtZNktA''@;'; put 'put ''M0BYbUZfS2I4PkJCQFJYbll4cnAjOnBGU2c1X2JKLkVYSFdsbUE3cDRNd1hSTGg7PFJbKEZNVGs0dTpvXioxY0x2MF9kKXZPPCFsdW9iK1JJRUFjZW00I1ZCKyRXIT53TCxgaC8laEJIRkRWS0g2aU1FYWx4TUNqc191T10lMSVtJWY0Iiw/RzFDe0lyXjllNVFvWH5VdSwuQnNhWzwmJDdzLCRB''@;'; put 'put ''RklVRFlxYEkrXzxAX0ZOeixefWZlZShiL2JAen5nWlU/e1t4UlJaPz5mYV5oaHtdPmpWWWszOEtHNztYaUN5ZH5kYVVYNDhUWncwTW94N3ZpbipDeV0hMVtWQjMoWUIrT2khd0E2VTsqaj57fVdfNUh8bFt7OGhMK2pPOzx5XSxVKHh3aE1yVVNnKFBEM05UNTp+UntOSDw3UVNJc0BNZWlwdEhu''@;'; put 'put ''azE/Vj19VypJQn1CelYuL118aVRJaVpfIiouK0BUOk5Ub1ZxRnEiW24oTHprVjRqWUhnTVEvQ2w1WVp1RFRKXmV1VDwxVlNZRGZMYmhMQWNhd1hWUVo9O1FRKjZaOTpUZTJ5RTJHVXIocUcpJjF6I1hqVC8leC4xWThvNjM+X1lXelZPVVZnZHZzTGdfazZYJVBrKG13fnkvPzF7ciUueXJnc09e''@;'; put 'put ''WG9RPVMvZnk/IWtbW1NXIlBoMz1ldzR4VHQ1KGdQPko6PDF3L0hHVV1pYGNRVHgkRXpVdjRkISlBI1VeN1BdREpWeS9FOikse15HKTJxIUtMLDpKa3FMQEZfTDZqSiQsNC9lX19GUDtXQG9pa2JGI0ozM2QrdDJbRWYqLGQjSmZCWHRVJWBeMUgmfHg1cUJIWzxYM0VoQTRxe0Q8Yyo+TitsTm5w''@;'; put 'put ''ZjFRbVkreygxPSpjKjJMO11uZlhHcWxddlEjQ149NzlxLiswdz4wa3Y/MktTaDsqPVlUKjsmfSl7IVl4R3lEa2tweT0sUmxsV0A6eGlIenVMSFs/L2JOQU1EcFcleGlWbnk5KUU6UlRMWk8wZ3NgfF9jSzpIYjF4T1AlfVVmfDkpTD43PVhyNzVnaVtLN21NOHl4T3RULEQ5VnVQWk0kfF5uQjYj''@;'; put 'put ''KFVubmU2NS80UWtkSzkka08mSDhWWFBmMEIlYy5kKk0hOmw3SUAvOTpzbnJPJU41X01aNnUxZG4zM1dOb3tMW3lddUhdIjpxLHteejMkTUg1LltUOCgveVUme2o7OUtBUXQ+I2ZRdmFManBzKzdEJiV+RVh1VEtNNWY1eXh1aDxJaS5VSVV5KDc8Ln04dGYsNFhVJTRsK0dKdGA0cWFLQV5gW1RB''@;'; put 'put ''aEA1bE9UdE5xOnk5LC5sOUdYNCFEOzhHJmxoZUYjJWxLMDk5a1B+Uk96Mmh3QlV3KGNmPzxhfk9dNz9fNF8/ViIlT1IufG49RXF6NFBkbVVSezd6cVh8NWUsRzBqMC9NMy5jOFUjWUArTFluQnpkVDslPGJDZSlGI2s1Ok5OWjxRd3c9VEloR3B8SUk/eC5QfVl0NU1bR0MxNWFYVCQjR3VZJFRg''@;'; put 'put ''XzJJaG9ed30sbkwvbiYzVDFtP15gKkplXj9AXSZoRXNSZWslMiRiYWo7dFt1IzVganQwRExiMDBReSkiTTk2LC5jSjBQT0tYXiMqSixmWEo/eCVTeyhoR3JhJDszZURvaElvQUcwXVpNPE1uP2Q4REwlITUjaERxKzpHOjd4XiZvI3NmO1NOIX1gRGVLRXMrO0M4Lkx0KlNAK1tpLFFpI2Z2NkhN''@;'; put 'put ''fjAyJkBBY1tBaUMrTWJyUzI7K3B8dmQhJSptTG9xUkMsLkZuQzl0XlowPnRLUTYoZzs6fmVHbiZWZmg9d2BOMSVvUGdtbDJQKDM+JWVDL3pnQGBjdCI8IUx5RWVaPitCRzRpYmpXOWJjU1FbPSpQNFchZmFBVFBGJkI/cyUsJismfE9tSTZSLmVveFh0bXQ9RX1CXXlpOyVLYWw2MT83ci5ZeFhH''@;'; put 'put ''KztdQ3BQT15FYzJzbmNMMzczRUUyITVCYVFzTFRQaHVIMjs6Wz56VTB+RU9sJHBOLiJpYTZ8bHA8c0NAfGMhZXZBKTRxLFVQRCR6elhiL1NabnYrQkBRPHZgLmMqXVs1OkNENHMkSXx7R2A1KjZQZVNjdUZdYi9iPTVEPD0zTXFCWThINmZMLlJBPCtBRjdocjB2Rmh0OUc+SyN+TWczXTdPOCgv''@;'; put 'put ''LEJObGB0eTs4R1NXY1l6ZTYqd08wWFZAIVtsUWhRQUcrT3AkOlQ8ZDJ7OXM7akB0ODZmIyFsP2lOSURtemBMNSoidXhILkREb3I4RW1jJkB6KiplaXxVcj1oR18uQ3JVPmFiIzNVRntZTERCZ3l4a1ZTIktuQz0ucDJ0MiZaYUptZW57MSN6ZlByV3g2ZWosbW9LPmYyWHQ7I3d2NzcsdTU6WEVm''@;'; put 'put ''Ul43dkdzM1tHTDR8R0BsP05CKUtDXzRmTS9gXWh7TjFjenhBc1l8JG5WNUcken4rOkxrbypdPSJ9VFFhbzZtTCVYVXRGOVR8UU8hZm0qIUNgdlt0c0JYYjxFeFtxfDBUP2FNdCMvbjNrbXlAeWt2ZldzPWNsNU9GOkpII11RUF1PVm08OCZlV15FOk1jfkA4d3dQYjElS1E1THU5RWhYM15SYnw5''@;'; put 'put ''XjIid3pqUFd8cFZKYlgxbmA/TUAsWWsqKFt7dWZqTENfYndtY2UuejNtJiFKdGMhMnlVRV9+dEdxJFBObz9LLzF4K0s1N3wjIk4jZUpVXV1tIXhgKmhMWmZ8PEs8JCNyIU81YUk/dVghY2VFLlBvWk4/fF97dnJzRXtDfnZNTWtdb0E8N2x+Iy40M3cuVEFRK0JzdSxfSmszayUjMioyIWRdNz1R''@;'; put 'put ''ZUY5Y3FDa2grNGo0alMvWVpoREJ9PX4qQnVja3xGeHNqbjA9M1khP0ZLRHpgbWhVUURJYUhCSTx9bEB2TDJzS1hmYlt+ay9OemBCOl1ARDpPSElbPGElbUJPUklUM1NKZztuMGheeWZFSTpDbUBFfU9CbChYNzk/KEtpNCZCdGZidD5NZ346L3Z7RDE/RV1ESyEqSXZwX2krVnh4L1g6QWcufXN3''@;'; put 'put ''Uj1AQ34yWmNtQlcwMEAyRnU5OF1hWlNhXzV5fFBmcDw5TXZ2OWduZXVLT01lb1F4LlJ8K2xOfThJdD1rLFhEVm5dc2p8QDxoSyxmfUx2VXNzPXE3RkV0JjhtLG1jJSZ2JiJLJU9keWlAamdpT0laSnRFQ185Xl9tfnsxQFtbPDNtaF1edCtjdE49UHo3Ji9FRjVkLiZNbTNuU2g/fSFhdDImeiRp''@;'; put 'put ''JSZGNlhWWHhuNS5WZDtTXkBOYTx6Nkg6bE1EN2tabnY4RWZ4JHtFfDBAfWx3UF1kI1padlF4Q3c2dE05djdMdzdFVE0+Z312PEkjSXBGRHY3aiNOSy5vYlVCe1d8ZDUwemZqRDIsKXtbPGlEUSlEZGU7d0c9anl4Tn5ne2FQPkZtaCVsZX5TUW1Objltbk1md2l8PEFQN008eT1EcUlmT2dQQz94''@;'; put 'put ''O01hIm1bLDQvNWU9XX14RyEpYkJEIS8iN1s3aWxAVlVKc1lSJEJQMFVjfFVvKVl+bjdINGVCfHxoeX00dzIpPTE6emtXWXhSKW5JfT1LJWdsSUghRlBNViNkVS9UTGBDIzZaUSluLHdrdSYuOD54a0BXMUVKaHpZQF1IbV1kVSs2Qkh1WkdkN3pbVmJ+dnssRkEpdns5YUgkXVN9TS4iZCssYWFa''@;'; put 'put ''ckRQcmhpUz8lJUx8ZDpDaTppXWIuJUBLLzl4RF50ez5xKUUmbFJVRkEval5AMywzIzN7OyRlbDYqYytyWGs9YkQxbkxpW2NLamY+LFkweHI0MGNZfjFtXl9BTVFFUjs4UiY3fHFPISk5fEMvOjBvIVJnUzVfRm9kX3NmT19wbCYxO2ErbiY8TThdMzB9TmpRQXJhSmlfV2NjRWxHblVrL1Z8LCtE''@;'; put 'put ''bkZ8KW9eZW9sRUMmbVhgVlJaTCFBJWk2RV97Q1g8Qn0zSztRUDlVUVB6KkdmeHh5LnJfdEBPUVtyPTtKR1tBfWFhKH4wKnhzV2ghK31GZSkhNDBIPjRxa3whQF1+Y0cpWWZCOF5LWkd6VXF5Il8wVGU/I3pYdS90dTFtXUJEJmE8PEw9TkAxcENkUlE7UUA8eHRPeyFAZVssNyhgUX1PImdqNlcr''@;'; put 'put ''Vl11aDJkPj1LVm5BUjRpfFJ6c2hEaDM+X1JBOT5ZfC9LTTc4ITdlI3soSD46WG8venUuY0QyWlM1ZDBia31LNkdyP2VIRClnN01tZEZqSGFpcnNPTyNXZkZYZW9AeG4qWCtDaHRUVjMpemppPDZMQUFSdkx2UChHcyFiOD56Y24rJH1nKTwjJEBKT3FAPlNwOXxmc0s0cUdRfiw2UTNhLCkhNE5T''@;'; put 'put ''Ln4pOXVraSlpcHZWW1glZCQ8YEs4UG55VypRb3Y+YGEiVXs8fUxSNGgsXzg/WWpnazpEU3t7PUx0NikxXXcoOVBBZ1Z2LjplaTEoSFZ2VSo4PmxYTXQsMmN9V0UsUVJuWE9hXjVsSmZGJl99LmdRSktfVDB8bX4wcmo8N1grOjMubHRMVjxESjwvI18pN3xLS2tRbk9NdnUvPypHNGp7TnFhIUov''@;'; put 'put ''ZTFEZFAkO3VYXlIwblU2LjIjZV9EJDA4ISMwQiUhN04saXRAPFJ7OmxUcissRj5BKyIodCp8em94ZUUlaj1hfTliSSZdVUo/VDZaMkU3bGo7RihAb2xORF4ofislbDpeTGdiLl9WY2NVPy5jcGIheE4oPWEjVkNafDNiMz1jOFJaeW4sR1tqc1Z3ZmU8VWRZeW1iQkdUWEhTKmk0WyNpfWJxciYo''@;'; put 'put ''eT1RamklfCUuRSpnSHE6d1pMQlMzcUxJdzd9YywoTlBXVEJkMzt7bDlyZGcveWQsRlJ+bkltV298fWZ5RDh5MHhKcCwscUd1ITNKJU8+W3hVQl9GZXdRI0xwM09zdFdffXEwNSRhTks5WGQwQTxxbHxuN2NSVSpmaDlKfCwuTmZIQig2WnRZOVJ7Vk9ZfVMySGV2NXYjfTBgJTsld3RlZEQ8W2pd''@;'; put 'put ''MnxkU0d2OzJQX352aC80WEV5dDxtQ3RqInc8d1ZLeVNiY081eVorYWVTc0ckZHpSM2g4Ok41UHZPM0BLREBPR0YxcXQhL3pXLiE6bGRhIXdnPjd0SWtWbTFbbnkqXkcsOEw3NShfW1RMT21YTFJiTGQ/QlgrWFsvfE9oQkpsOkE8Q0tPcz8kbV15cn1PUSpIWUVfcWYoNXJTVENEPWcrZFZ6VFda''@;'; put 'put ''cXYmJntlWVQ2YHF2fG5GWTF9TiEscCshen5MQzV2R0hZRkZdR2xUaXVlRk4hM0xGOCpyITgpU05rPC9uaXozMztuUnpobndvYEpeKDZFZHIxXmcxTDc6d34wVmN2VC92ZD5NeFQ1Yy4oIy9JcjlyfWpzO3NPPWtfPjpOPk5+eiJiYmNmVW5FY0E9Z2NkQklQWmJNL2AsLjgzYCZKIW9raXB7fDVR''@;'; put 'put ''T0crJUZrYSI7ZiYrSkg8UClfalBOWVVIOmJsNCRvWTtkKDZFMktkY15XS3RjKTxHbDlzN3ZFNEZ6RkpiaixyPXZ8UVs0NVM6bSE+O2A6I2d8OHRFVyRDOFVPNHNTIyspOSZbOT1BIW81SGNFMWMlWi5tTmldVG8oIW87fGQvZTVhTDAsPGo/YTQ0VmxTZyMkUi9zSjMpNiwqZlRIOldmcCZNZD4x''@;'; put 'put ''XkhpZS9vb141JVRZRmR+aXFOMyQrfiIlTmtJaVo8VypxTlZlPl1XYVM6bDU7aTNJYkV1RVhWX25FNjtiblUvW15nP21jOFNEflJ4Vl4xU2tndmZvTSYmLFVxUi9VYHo/IVJpeE5MUmAjRV4/UVI5MjsscWw5YDYjM1tkPEtRO3h9U208QXsrRHRCW1ReST4/NWtuJCNOR1UsOz9QSix0I3hfRlRz''@;'; put 'put ''fD58TzphbjF7dXtqUWpRY0MhV0QsXiV9aGIqaTZYOHs4QkVKdyhUJWxAITRtL192NCMoQWRsM01pJmhmZTtPJlFWKFM/ZU5pUVsxVXpGUjNbJDM4cnxvRXJDI081OXZQWXRwNVJTaDZ9TUIqJlBadTQ1aX1xcSxFdWMwVntwNjJwP3xRIU0vejRkZVtJbCwkQkBmJXNFInFTd0heajN2dio4UCt5''@;'; put 'put ''XilWcVlDWn1TNU1ydWlIRTBfcnI5S2lGW3N0S2BxUT56MSM/YCwxK0RwSU1sfHF3PGheMjZnNk5SbTU7cTIod2Avei5gZi8yMitoOyR5ZVksM3RiNUguakkrNmx6cFZdKFRHcWRgYmhBYzdTaXVNNkFjM1hmWHIpPkd+SDVoeDVgOmFbTVVrOiM3XXUqOFU3Pl15RylMV2s7c1hvRngwTkRRYS4r''@;'; put 'put ''aTVLbVY5JGVNS0h9UiRIZkxjanxITkM3dXQpYi8lajg3JD8vMEE5NS9BOSo7eVJCbWkpLl1bRUUjOCxwa2d1PkpXfSE3W1o8KFZ4Qzxzb35GRzR8dXVGYT9Id05vOEZCVEB3TzQ5TXFDXmA1KGJrKT9UekczdiV7XU5nNGhvekZuTEMzZERJVEJ7cl5iXmBnWDIla31pUzV2OlE0Pk8uRGNQOVdb''@;'; put 'put ''TjEhKyN+SFcpSH4jS2hJPVNxbjNPbSxGMl92a2RyZ3g/JjJ8N2hhNVU1cH0uMypqOHBjKUFwV3kxNk56Rns1Y3Yxc290R0RkdEVDLDNZTk9EVXZfb3FrV286d1J6QUdhUyVtaG83bTlnVDI/MWRieTc2PjdmWnVeY0RoZEdXOWpAc1F1Il5QWWFSa2pIemcqdl91dThNc0MhJn49Pnl9byhZe1gm''@;'; put 'put ''a3pObS86bTRhOXJQK2AhOSRNIUZPd0JncSssKSlHYjJKKiVfeUteWmRCRThxbjZRIXRCO2w+S0tpbCV6RGpMS0s0Ui4uSXNTenF6fWNbcC43emFKIVFPK15WKTNGJU8uXW1dImg8Wy84blhkYz5kLjApSlszMlcmRjdqUkslOEN9ZXlqdHtrK0lSal5yRzIrTVJIMkVlJX03fHF3WiYwWFJfWUdN''@;'; put 'put ''WzJIZ18/RUd+cFZCZjFWdDNuVjFCQDZ8WyxgQjUmP3RXbU81SnJFRCptX15TQEJQOmE3PyZfdzZOSk1zX0ciIUpTIipgX18vY1tmNGduYncuLj1CNX42dUdFVG1KYjF6RDFsTVJkcTkuK0khQT1yeTE7RE1WY0RkSmJNOF9kWFg9L1Jge0lKd3FtQzU3T0o8ZSslJUt8O2cue3NIcH5kTn5kcE5q''@;'; put 'put ''SlZ+ZzJNXUl7cHl+UllAcD43I1V4eG5qSSpEZWQ4SlZfWTh4U11mKXF2ZisrPFs+KzdjWzRrN1d1Yn5xQj1JWW0mVm5LOys2Qlc1b318M3VkWUExOlAkcmZgN1UraUhSYzVeVSJdMXNqbjx7UXIsS2lIYlEqWmlja11wMzw4Iz85STUiI1BXVkQqVDI/NltwOH4rV2R0XjVyaztyMjYxQmFGRTtt''@;'; put 'put ''SzQ3XW4ocEM0KDcqIiNQO2YpP0R3bWMzTkNPKlJOIjwiTk01PSNFYHtoKnlkIXNTYTlyJmMzQ0Rhe3QzQnV7RypfVlYwSmpqN3tZJi5vV0gyRz5qLj1dcFhNVn5aTj1YSz9sbygoQk1JOStuNHVXfkZJMWx5NVNwbW1ELmJTUlE+flIsWSR5fkpfciYjZiFYZm59bkxQUF4jNSUzRWNBdTB0THFN''@;'; put 'put ''OyxJQXA9KWNGJjFoQ19SbyEqME9YRDE0M2NlOk1iQ30laFUleXNReDBud2laUk1mK0pBRzw0flE/JmFHLCwpKSwhKDx4KU9NQGo9cmlkcm97bmc5e2JgOWZLI0JddEFlRH1IYmgldV48X0tfPW9vNylEYmZCJHBYNGxrTHQySnBAR3FqL1ovMzhxNjl5bj0hM1pFL001QiFaaS9gRkhiRElebjly''@;'; put 'put ''VHUjLD4pIS5EclF1dUVONz0xa0wvSll5YGVNbH1kMFY/Z3tZMyM+TWxxRFBeNV1BIyVMaCFpUEReblooV0o0O2dneHA7Z293dzAxJUZ8NSk/P1NMU35SKmRfW342fGw4VEIyaWIxTDMrcmM8JH5ESWZUaEIuLE51REkkTCV7OnhObVM6OH5nUGFQaFJvZ1NiPlNkKT5PRUBbTywuLDM8alR5QD5B''@;'; put 'put ''V11MKUtZW0ZNRmUjemRuRjp6JmVkSkJRU1o4IT5HPW5SRE8scmlKQ3tGT31XTCFsRzNCYjc3ZWx3cTwlKCY8Rld+NVgvTCpaISRhZUNBS3khe0lYeHlATEpZaT1FM1cqQUtKM2o7dkpRPE1uVUEpM0AkQCllaS5UPkVZd1tmLjBvKEIzTXosPCU6ekElcEdYcGc+Y3hoQk42czMsek9XMjQhUGNt''@;'; put 'put ''TlpVbyVacGNKRHliKXtKanVebHksdSNaXnNeUGEmR2FKQClSfGJEX2pRO3hnTUIkNV83T0BTZTFWeHpMdjRhR3R3NihNTFltUUJQPDZ5K25rdGx9XjUlJiouejAoL2Y8SGR6Zi51dGozWEkqaDY3TnoxXTNmK0RKRmVpN1V8U2svNEltJWxnLk54SGxDSGIoKXJBfm8lR0d2MF1sPj9bTkNbLmR5''@;'; put 'put ''KXdoWkNRWj8kT25kfFhQKHxXcDlvRHhObG40d1JDJWl6fXYpfllCe2tffnRKPXJHRX5iWnd8Img/YStfSihCQUIwaCMuWi8pciVQT3wyaFFaJUE+c29FW0I+WCZSKjJidF57bFRpUHVZPU9II2FJOWBaRmkhaUVkOlJ3YX1PVFJZKWV1ImQxTnpzamlmVUhZPmd0e3FQcWVpXVEySDVST2tWcDk9''@;'; put 'put ''O2xPZzg3R1MoNTxaOyQ3NmM3UX4mcmo2dSZHYmVYeUh2RW0uIkFgSmRsVGBtZkAwZl1QdUBhSXQidnR7M2RIRVtDZSojQUMoKmxgNGtnRSR0ci97MV9FSkJvOmYlckVYb0kmQWk3T08oOCNbIWk9Ny85RTRBSD00ZWRjVV5yenhZZXdZfWsvJGd6U1cwbn1xKyJFTVsmJGhBRkl9VmlYRXNNIkF4''@;'; put 'put ''akY4SFBQUkBxN0lWJjdrR0svbVk4MzR8O1JoKH4xfGpwUjNIM0BzMTJgI2pla3kkbTJCPnlTNXx5an5denRJdTpmUCEqdG4zcXZDTzt9V3d4fWhCPThfUzBnZmtDLFUoMkIuamNaOCJ7SFE9P0wrX3hodU9XczcxXSI8OG1FcG5ibDN7bUtrMURscGk4I21QdUNCO2kvNVh+eld2c0ZbbS5xKXk3''@;'; put 'put ''VTZ8UipeOF5TSjBRSComJl9vRm0oLn19andQeT9+YnZGRHByNjpHaltHSmpyOjtHcippTWNzZTA2TUhPKDFSNU5eez4lYiFfKl5nN1RrOXZ9UCU2dF5SbDc7MVk/MnM/O2l7KSEwdCRwZ3pfR0IzU0ZSWzR0PWBQUn4mNFpIaSI3MVM9QzVVYlQseVRiOk8pV1E0V1EyPSJuejFhc20+T1owJFJB''@;'; put 'put ''R0NvITJpNFdMdU9GP1pzcj4uXmRPJD1+NTIoT1RTVURqJDlEY0huXWZZLzx0aFh8YktSR0QxdGljX0o7Zk8sNlZKMGdwa1REVChZRCZaQ31iUUNDNik6L2EufWB5OEV9bTx9Xl05LzlVSSR7WGM5RXNoN213aWciMXNjbSpAck5PPmhvZGhfP2d9UikqN1U1XnpKMHlpPTJNam15MHBDKUpwZXFI''@;'; put 'put ''dn5UPVZ9JiV4V1EqLzVDZCl2QkBnIndAUE5TS2VSbnUqQjUyJkdzdUleLjR+ZiVvUSU/LGBLWTBtbjhnXlQyfUoyM0BrNHAwIz14OHVIeCJNUHZvOlJrNkBxQmEuQERZdmZdV1h0dFJBNiY1YlFPZGheQmtYbEM2enw0VkZhMFpJc15aRHB3PDgqaENBVTk/UmdOI0k9OGxQI0AsZClPOTJHWkBy''@;'; put 'put ''SD05MDpvajFuRm5yLkVXNV0mQFB0Pk0pKT0iQWFESF1TJWozYlsyMG9WKTtROTBsN2FsPzV4MTEzJTNKIihjOH1ud1lwMmMmMiZPI0hoekZgSFV7XTNCOmIzXiU6MUt2NTw1SmBkb2FAU3chTSlxSzA0Lj04I089Yls9U1dyaDBIY2ViTCokVTt6Z1p0XnJCd2NocGwvPCREVnkkSSM+JVNWRkB5''@;'; put 'put ''MVNuVzM1dFQvWz1KMjd+e1VWKGJmdVRWc0xOLl5dbG87PFJRKGNNL2QsYCxtY0ZtMDsoNVU0Ym82MVg8IXx7VFd4RjBJbWJyJlltVFdOdTBUZm9DY3lyYWchXjB+bnVwYiUvMXZWIXpJL19HeGcvOSlITlJ9bHh5VDx7UkdhJEE8cylbdC8mIiIxbmxZdWQjTElOMGg2K3NPb1JHc19EVW53biJG''@;'; put 'put ''fiV1VFRYO2xSUnZeNHc/PmZVbWNuPC9Qc0spJWZWSlcxJVppP3NzVyVASHxdUUsoXU4mY2RtTEprVkFTTXtPLyVvK3tgTUM7Kis2NWpTRyosSCFgMm9xQURiYV9OcGs5U05Dakp2ODo9R3lvWSp6e3p+Ljp5YVlUbEhUdEJjSXBZSHtqYFlWL1d6dHVnNmhdRWdLdWJeLDxZTjRwaWAhdS9zUHs9''@;'; put 'put ''ZGNmWWZyW0N+VDR3Zz9fdEpfWnE1IzQzQkd9fC9+b0wvbUI5JSh5ITR5V25SYnxdVipdXTJqK0UsOUNnZVEqJW1FKlNPKEVhL2xwOCYyb3FwT1M+bj1HN3ssa2NxTD8rQDR2Zy99fUN4ek9+I0UhL3EmNzJkQSwuUyQjMmd3bStIMkltK3VNXX07Uk5mOkF7OyFIZlNALj9QRFlQZiFHKmlKZjdL''@;'; put 'put ''WUBdJVRqRUpHeSZ6MmFHaFVAdz9AdE5pU35uaS9GLj5AZzlfU2d2IyVybER3ci4hMmg4X092RjwhPTh7Uy44aHFhZHtpP1VzU2p0RjxaKklNJjY1OVB+UVgpfno4PyVXOWNhU3NaUE44cGZXVXNFb1Y8QGA2UUJsNTVAZmNnVipfZ1NiJVZUQmkuYjU/bHdbcnQqY3ttOzFnNnBMNj47Y2FjYHwy''@;'; put 'put ''LHRNOHVWTjtWIShSSCN5Y01yZT14WWt9KGdvIXxXZztAbjIvUT95enFaayM8XSluPV46NzdJRml4UXtiVUJDLykmKWs5fjZ5S2I8PSx2LkxnWlhqS2UwW3xXIjleNmM6NnlHJn1KdSYqejJ8KHxkK2NhRT9yY2l0XVEhbEhIciVDVWtCX3tGfTNyJkgxVFJpfCRBYCI7bXFhJUZ2NVlmWHxIP08+''@;'; put 'put ''LDYoRClUdU5JPSlrNFBMTi41R1JqdWVsJiFLa1pAfkN2THh0TnteRzJrQyFFLGBSKURaLHI0SDFhaVpXMm9VQ2QyREIxOS41OHtDbkpoRmpPSDtTT0BOPXk8UGFgTG86b0dBcWk1WkNfPjBaKD9SMTlXOU5kOFpJYiE0RzAkQyRQIVRLeGVafChHYUouVTN7W0Q6Z300ek0ke096NXx3Ll1hTDwp''@;'; put 'put ''UV9pLCoqMkk4N3JaZXdnb1B3JFBlSmwsRDpoaisySmN0VXApR3dNZUpmbEAzcF4xOjZ0THBYYE4qWzZUNCF5NT1TQDMseVAsaTkhUkkwQFVPPyQ6ODU4SiNXblN2SCpNVFVKcGBgU0ddcHEqL2c/SVhHfD5tWFA/M3AvYiFNSXopVXt5bzs+cmk7SVQjan5YY3Z8QXArY1FmQ0NzZV9jVFopMDoj''@;'; put 'put ''RSs2L3x1e303el9TMH45KEl4S0M5U0QzLytSJCl4TmxDOi9kPD9kLGUzc3N8cUhhPjI9byk4PjReTS9HQlolK0YlJVhNZFsjUH1JMSxuIT5qInxiXS5geEgsVjV5Y3M7KmdNKVgvazg2WzA2M3NvdE5rMFU3b1ImOFBpbm90aXouPnhhOUldXXFyV2kxcmk+JX54MGxYNTk5WStlTFFFaS82bUBN''@;'; put 'put ''RVB1TXhvOV1vXjZtMXxdRE42SS5zPHYkJHciLmQmc2NNdE1Zfjw6c01DN1IlKUFMYWVdQUNmVWdJdHUqPSRCRVpWSEBQOCVNPExXdU4+dWRzUTMqWDJ8THU9UDdFIz1CbEUhRnFhal82QG8qflNIayJ2WWcjPT4xKFl0bi8yPnUwSDhOcmluLCNqKTdrYTRVOCg7QWp0e24sKVNmQFo3TXtXZnVX''@;'; put 'put ''SnFYdG5jNlpLKiRjKVU7T1BYN25LPlFabm0mekc0WG9kL3hxXmRdTiNQLCI8Qy4sUj5lYih3ekF0PGpfbn1EWShKSGJjb0JrXjVkTF5IRVV3PF08eTBNe3A7TGpaZClHaTRAWkUyPXY1OGlBYTpJbFVTOlgpZWlJSm4uZzBhdCptMC5EYmxYfXU4MWhQI3A/SXkiTz5yNSJALyk9bGtsMDRhL2o7''@;'; put 'put ''cGJkYm9FSEN0YVZEKjwkI0MqLDMqUjk1JDcqL0RAUy5CNV5dZnp3eD1YNnlQISRnYkJONlN6IkQjRWdkQCs4bV80SUtJZFtzbyomUHA+WFoyXmc8THBUP2dzUS4/WyRsWEM7Zn1YdmdMfGojbXY6Pk40RWAlbX01Y2orY2AjMHR+IWFrcWwkL3F4eDg3TW5wV0xuO0tGPGhaXX1+QUBRLkZMdCVj''@;'; put 'put ''fD1vUmB6Xlk4MGRHfW52TTlNOD9JLk01cFg2czF7ZjIzZnpMKihSWk1GITRrWHZ0eDg+Yk1GWHIiOmpwPFN9ISlaTTRRQk5jOGMxTHV1VVtKTTUqei58I3pmMndsPGwzUVFvSyErOCpDNXxaV2xFLjApOG56UE5LP3c6W195LClIPlAoTF5Kam9wO0BqLyV0UHhmJTt2WnBgPStaSEI+YCpkI0M+''@;'; put 'put ''Iz4rVWd+U2hMfUx5P1IuUVhefSYuVGZdSkNRYEBaOmBELFNtXT9tSkAzMHMpRUA6JEI8SGZrSk4/KjFNYV81IjIyeTUoYjhjZm5vfDxIQl18IyxtcTZsJUx7Ryoxcjd+KkFSIyFmPlAxZ1NrU0YqL2ZDdH1lNDc2aTo2bTw8VW5rMzFhfmNwZyJWIXdDTWImNm1Od3pEQiQ9U0pVblJsPHVqIUdq''@;'; put 'put ''MWQ9Kz1lN0BuKStZeVk+MXxiQ3s/JG88bDN6UnV1R2pqaj92SXgxfHd3LGcrUTlZVkd8SllaclolcnlTYWN6ZSxxWT1EfSw8Ty83LmB0TWIpbmM7KSZTImgic0NndjspKVFiU2BDY1JZQWB1LHd5dHBbKDw3dWA4XTpwRUJMNU0mMCkqRXwrSWBaRlJJP3lXbyp6NDNHamBhfiQ7aHJlKFYhSmZV''@;'; put 'put ''dysxUkMwJEVbZzNuejdmdTYuQ0BaTXw9W2ZKX1NnUzklUEVbREQoWFMrYHh6eGFabk5raUJEc3p5enRoYzJaPDosRFpMc3BzLksrelEmb3dNJUV0Oio9eks7R3ApR0N0e1o5VU4qYjNieH48UWlHUnJdUksmWndSTz5BdG47YTRBTCtLUHg9KUVXXiNsZkh6KUYid35DKzIoSWpDN3Z+fVppWT5L''@;'; put 'put ''aWRRMlJ8KVMuSEM5fiJATWJlZ2p7RHF+dnp8ZiVpS15ZZ0ZgaylNTE17NmV7JG9JN0pld05FPnJrYEQ6eipXInNLW3NXRTYuZkUvSk1IS1VibjQqRil1YypeKl8xcnc9TildZFNuWEhtS3djSDBfdHs0KTVWIj45NCl8TjNNTmIzQTJVSzs9eUo4VDIhIlZlTC4rTUpic21MSWo8SUUxM3E/c35U''@;'; put 'put ''RGJDWTNfPTBDbzJGPW5WYX5GKHc6SyheLzE8bDVHVmxMSXY0WHg1I0NUUz1KaG51PURYOX4xPEJxTmh5aENNeHZmY3QvNTRxQCZ2SSJwNmJdTVF7VTAvRiVyTC54bk13PlR8TlYmPHI6R1drZkZ0ZnsrbVVIbX5pMSk7bFtCdSZgYXtoJERnJFl0OjMmTFFyZmEkZ0FbQm9LfmVUO1RqWS9Udi5Y''@;'; put 'put ''ZSFaJUZ2ZCwqSklWSkNQJlVtIjlbZnA6N3soIVE/L1QyODBgLmpUOWxvZDF6I214JXU7Nn1ZamxpKTF8ejl5a0YpajZhMWw1OUlJNG0peCs2YmYialB8MllKJURCM2I/aCNKKi8xRGYrQ3dCITgqXX5AWlp8cWpuUH1TMz1CIiU2UUMrTi5AU01JR1k3N2tScUIyP3BfdzhzMkhsQ2Z8czIpcC4/''@;'; put 'put ''fDJnRk53WGBVb0M+ezA1KDJ5fT1CcTY7LDQ2MVsuZ3NdYW5PQkwoKkFlS3l3dTZxPiw+SF9xczd7JS5ZIlkzY1UpPjwue0s5R3ZnNktpb15pTl54PUZ8dCY5eXdHY1hmJWpTN1FnS2lUUywyTFYrcG9fL19uMHhAdD1jKTc9P1VKVG8qVng5S1ZNMV9LWl1zeXtpNHcmfmRnUmtQUWVqWXk8Mi44''@;'; put 'put ''cFZRL2JXKy4pN1BWUnNtKiIhKWs1e0pKPStVVUw6Tn1STks5NzdwJC4/cU5pIjg/UjckUzcyeFhkUjIiTS9jI3hiSjM/Qy5iITk3UXJaTzhUK0J9XTZRYj5iZS9DY3ZwSzh3QDQ+XlZeIWkzbFFpRz04PzM2RHxrNzdqeHQqd1BSbVFUKkleTEVtSWVvcjZxKndodysvNWQ4MkFKSiIhaW42WVs+''@;'; put 'put ''c3ZTP29RSEQqZyw2cyZAO0QjQipGPChzQUZ1Kl8wVChkWztNX2F3eytZc3dPNlozeWVSQ3gwe0REdDZ1WU1UeTkwTUtWTUQ3XiNQOzpScytvI0w0Y2xpRVg5M2lfa1kjNSMmRylCKEVOMk98ZTc2fkdSV2tvRSJ+KTc+W1sham5sQjw4OUtNMV55NT1ebiNARlhoWGdebSxPZHVDWlBoTlZOdzYq''@;'; put 'put ''e15hW21xZ3RhZVZaNjxUa1lRUU0uUmBBXV9RWCFYR3c9W2Y6WFllZDxBNGxbIzJzPztJeihzOF1XRyVnLmUiNlFHdS45cH4+JFp+bFdFRWd4W007PVB1OlVMeSFARjUzNE1Xcjh9YlBmV3E9UGJZbn1ZKCJfRyRteDFROVpOdWZ3VktKTFE8fCo/Wl4/WEVDamk5ZDkzels+UllyMnAjK1J8P0Yw''@;'; put 'put ''Mih2QT9vWyFZen12NCwrSCFJW10/ezRDQFleVkJFQjR8KXpYLDNgUyFOI111dn1ARjkhOzNKYTJkO0Zna3ZnUHRTOHhPMkxYI1MyblAvamUxV1omKVlzZVpjZlFdUG1kfGgrZ1NpTThJJShkaFokWVt5fkFwTmFnLEtMbFFhKWdFQURlP00sUzBlNTkjeV9bWnB8M3FJPDEkOFZmcDw8WW5iPzcj''@;'; put 'put ''OGVeOHk8Li5sYXFjL2glMihXPyt1RmE3Ty99amxqVW84IWFTcUZseDwwREVydlBnNml1Rk9QUWpPOiIhTk1ibTQvRDB3Q0FkKnIrS0EufFA3eyQ0PEYhND9pRj1mKFIySih5ZSMlc1V8VyxqYSJCSFE5TU1teTpCZVV6PEl9QW1jLFUuVVdULEkxRG1TcnohP1JpaEVfKms4MlR0QXl4d3t4aU98''@;'; put 'put ''MkJDWjhuS0MsPXA5YHl2VDp5KHNmSCx1Z1ciZEJnLip1cWVZTGVPak8/VjNCQzNgPCV7IU9HRi4yfExtQUkhLmhhV29YWmdRJklifWRscXk9RHomKyR9KEF5cl5zOjNfNDNNRj07I0dITi90U25eZj97PXx3KC57YGoxSkxLYFF+ZygkIUdydjkydDFqN0dtUmBDUiFIb3M6byV0LnpzZCwobmo7''@;'; put 'put ''JUBdPz8wSl4pNUM1Zlt7QntddTAqdio3Ry4mUlZsTz4pWUNsOHR5LmBZLHpkY2JJX2J5JUl0YXQ8Vm5OUzN7XlFEV35oL05zJEcrIW07VT44UkdRSGJkUltsfTUuYS5SSksuWmNsJEI+RX5XWVllSlV1JER9WnN3ekV2cmFbY1s9c3Y4KWBhZTxvUlRLIyRMVH0xbFhzZlNQMjhsMmJqYlQ7QHN6''@;'; put 'put ''dV8iIUtQYF5Nb341UCtNaHBONkUiQUw6aWd5bSMpZDR1OCVpOlc7SFZtTnouWi8vT0FHWytkSTB2JCghJU1xVjFuVU4jbyglKTpFMEVKMWtgRiNLa0BUY3UrNFU7b0lLMUUlXiIrXlV1fVNpVWpQejxNTDpKVHZoNnVfOD4kdFVqaV4mZCVRZEZHQHxpMX50IjRyLkkzU1YpLlIpWVR6IXRvPnVA''@;'; put 'put ''S1tffDk9K10yVykxaXJrZDYwO3woX1lAJGlTIVRxWyZMTGp9Kykrc0NlUzExSk5IYSlfNV9zIzY1RkJRTj4uXnVxdEI+Iip0PSlOMTNbR1FKXnRhYDtHTW50YX1kYTkmQF1aY1s4bSVWWSwxPFJkeGBTblhCVDt8Nl1CMD5TPz4oVm5bYkl0NX1jWj05Ikx5cXBgUXtgPChwfUxOLnNWYk14Kmh0''@;'; put 'put ''PjlNNTI5PDN8amw9ejNCQnlqRGAjfGVGdjd1ezpWS2RhTF9waUViUEp0IWwzU3UjeCtaQlAvalVGJlZlWCpKY087diVLY0NoXjZkJV1VMGxaXUZNUSRSbFMweSpVW2UzTWFQKzBMLzlVVFd+TFtYOEYiQWk8SWlIbXZUIzI8XkByciNZXWwsNH04eDJ0OzQ+YGQpSFc5Yld3QmVPSCoqenRHJTpQ''@;'; put 'put ''OHhWdXI+YUskelVvMkskaiZ7Jj0pNUgmS0llZSM5cjRUPytJZEJIYm01OGBHTWF7KCMuXypiRyh2dVMiNkApX1t9ejFsc1R1O1o6bXRoPUpDdSwpUFoqZioxfXQ/ZSYoenF4KlpgTDptW3N1bFU1QFEsYTNReGFpWixSUkJ1YyVabn5wTyExdEVgRylRNUJAWmp4aFA4TzUkJUBALHBPTiZ5UVkw''@;'; put 'put ''eXtOSHxQdGshJnpVRGRHZ2ZMdFg/SEZYM09aPmF6Xk4kcFlPP1Y2R2U3T2xuZXQydnp+L2pMLlEveFJCLkxmKX1HQGM7IyxiSjNBZTtufFczXV5EIn40YmhUWltFem8hczpFSzgpfXh1LileT0BiKXlLQnF9UHhCJSQ+NH5Dd3dXMFhEWDBtaEJdNGZxXzoxcVpyMGJkfEJUTCllV2ZFelJOTix5''@;'; put 'put ''am1UXl8rUnhyUTRpLjpZJmAmS019V2pGPC5qSTxQLFFXeFMsNENvK0VPNFE+OywwLGdiKW5jdUBCIk1DcyJbLn02fDxkK1F5ZGdVfU8wRjw6MWxLTkhGeV56KSZpQy4zYVg8UyV9Z2hLZFVmeFhpSDAsQFguMipzJHdzLk0pTTohaFddWXVrLG4xNk45L3pqTSRdRnFBcGNNa3dnQGYqfFA1JVVN''@;'; put 'put ''fFBDXk00W3klQHV4Y2B9M1hNKj1gZCJyTyZFaWdvdVBpe1BZMUxoako1bD1qPzlGcEpDR1c6NF5vfXtASVhhPXQvIV4zdXFlMF5sVnZweFMwUGkxflV0QGtZUnB8fWR0eH5SL1hvSTs1bTEkQ01CLylZM3d2UkRqSnorcV93VVIvQHgzNFU2VzhtbjYyS2hzIlYzYzRgZzkiXWtdcnp0eSVkcj1q''@;'; put 'put ''NTozVFB8fkdOSy5SeT0oYlooQGNGbW4wJnlYWEBtMyFYcDYycz1SZSx1R0d5XWV0aFNiVntIamdGUEFzYXZeNiwzS1BEVDlXaURuZSZKYmM5NFBUbShYdCtBc3tZKUdKQWoudCt4Jj0jdkhmL1BMRWxqJj0jcilQKDo+UU8kR3hhc0NYMyZ4JStlJSU4OyFhLDZWc1AqaUdOeXhuUWlxfGJdMS5O''@;'; put 'put ''WDp+OzdbdSJhYG0uOm1nLGdHWk5GcU05O3NGe3JJVilxKyJGOWUzTVJKamV8LGo1TVUyO2AuU1c6ODhAN2ZsWmwuNzNiR0I0JGVkUUJmXjRUND4+JEp+dkhVKFFxIVQvNylZbVFAU3pdMixGY2cpTlQ2VXZGXlQrT1tzRnZMNHVwOmNOfnxQI0w5VWFdZTJhOFA6MmguIiY8YWtLdEg3dC5YLFNB''@;'; put 'put ''OmxYbitkNmRQajcvITx2SDNVfEp7MCVCZlVbfXRoTmckQHVCeVEvKDR2IyFWVDt9Xns9eDsqTFleJTgwX1NaRGR+bUUyanpVbl1SXlcxJUEjbFFMbkJiZEtrIyQoazJTUGBEPkQ4MG9vYT9HSTBIdz5FJDxIXztDWDRoSWcsTEtNPkptX1A6TiFYcmZBaDMxKGlTaTBQaT4mUlM/e3RPPE5laT5L''@;'; put 'put ''Xm0xTDhrRXR4d1RmIy9iJGBFMUpBcVhxZjdlJXhdekkhYlorT1Y7V0wmVTFSVkxMXStDSzUveiswNzZFend4Pms7P1JVQm5pIX5Vbm1xajt1cWQjKHEpQD1kd11MJmpsW1kxZCshTnFHdF5zUHJ8dklKbyJyWWpjbnkoNG1ZKDRVLGZ9VXksOUUpSH5JOkhAM203K3tRfWt9JVU8OWRHMzpVaitD''@;'; put 'put ''fXAqZjNaO3xhZ1twdkZTOzQyOltXVk0/aHwpdmZ4N3o9MGkxKzArcS9mRFRkflRQYnMqfU0rYl9oKF98W25Ld2w4e15tVmZXQGRzYldhK2oxUltSakhsV0MyIUUmV2pQOXBJeWx6ayhGNWpDRDYxM3FSclJYR3hsXiZvLkldbE0zSk06RCZtekZOeERlZ2hDcnx5XmwqKFNyaC95dXRFajEvNmFL''@;'; put 'put ''IXtDcSg2eXZdcTBDQzhRSExMNnMlU1dXVmU2Z3N1LFFoPkJ9RDowKTlIJTtYQi9HS0lTd04pYEhiVSY6dSNTMn5iN2JQfW9uRytSRXFsPDpNOnEhIVgrLzppM00uPDZ0enFoI2ZSSEJmTV95dGxvfWM0UFZAI1ZLT15vbkNmcXE3amxUaExVKndYMGxdfT58eE0pYFgwTWJTMj59dmd8TWFRInh7''@;'; put 'put ''KVNyRz9CSlB4YnZjSSUoXk50YSxlR2UuYW5XSXRUQXZwODlnSmpoVjhgK2ojdzVPb0F1T2F8UTpjRVtpayojXyNeUGZVbnRFNk0pRCRpW3V4I0VILi9AMmBsOkBlXVNxXl55QG4lKDIsIkd8b2c+M3EhYUx4Ojwoezd1SSNtYWhmXVgxMEYuKXNTXnxURD9YW1s9JnF3Xj5gNmgoOD5KRXUsLDFv''@;'; put 'put ''TWNxan1aVVU9Kyk5dzlrZ1N4MEwqNTs/Y1FhPWB4RkhiUCJuRiNnaEJAYTdyOG5Ma2RWcjFSZUI2X3xZKEdXTVd9cThEdG5JPF9iW0VbZSUlLCopJDBuXk0rfTRAOj1CJWNTZDh9ZC56UV4kdTZ9RzRFeGlFOmJNXiRTPiM5KEkqezszZW02Ik8uNk5HZWhZbW9DPFpSX29xNitlJWsmdDliJGU5''@;'; put 'put ''cywvZWBSe2h5RTdabXtUMWAoSEYpOHZWXWQ3eGk6VXxCSltOTm4mLjp7SSZieU4oQm5odFJRTVlKOEN5RyYhUWJGL2tZdT14fkdfcHZafj9CVzx1O1ZPdTVUeEdLZDcxQmlVQlRTPVcle25WfERXNEs1JEA9N3xVaz9pQUU+TGs+b3FLaXhwQFJZQ1RAPCY8TldbdGNPPEpQbkJvSVtwTXZWaiNw''@;'; put 'put ''WyZiXTBEbGxSN0l3QmhtOExQTTl+WERvRmpWTjQrL3tfNnw6eXJhbHohPGZCUiFNa2BUdzZXMG5COn11Xl9yTVQoej9Ce3FpfCJBdEQ8YkI5RGNeel1LblFNXktzST9XQTN7bHhneU9qNjt5O25ZfHRTIT5+aGA+VW8iYXNSdENHTWE7PzU0VTRxWkRNalR8RF06NXR2RDJAZktqVXFtUXo3PEIp''@;'; put 'put ''TTt1cTN8OyYzMW5Te3doPVZ7K2UrUEI2VzRfMVJsUjRrdzdaVzZ5Onsufk0+LFFqTXgpUFN1WEopJG5uNiJeXkgxYFYlY2VmQCF9ezVCOV1pZClrImZWPUpRPiVUSzckL2N9RGQ9fSZ5ek9pPFZFOiFMLytkbFU9RyZlW0MldG0jUyxbSl1hdD5bdENRTXlLX1YjdzJjczlDY18hNFEqPCwoRjRg''@;'; put 'put ''WnFRZHVDMnE8NlE/XX5KIWdgUiJsQkQlIlVxck8pbGVKRDI7UXEhXVdmRDBlWjNkWFRjW2kvY2olZyZHdVYjZSFdUzRMbXBVTlRlclBOWXFMTE16VX0kLzZGUl17VX1ZNDBLSGA9YkEkSEFRYyEzbU9NPCtoXSM3NVgvVHY+L0g8QD9iaU9iUGVuPXlHR3VBWjhKeShhcmhFXnErUXtQMmpqRixL''@;'; put 'put ''bExubHM7LHddOXBid3hkeHl7KmtyYzgsejIiYmdkcmUsWmxIcy8xKVVYM35+Y301TUZCWz4xTl8jbGVtM2AwMz8xVWRuVG9NTnc1W1lsXUFhMnlXR3oiQV9CcWA6OndzJEN5Nm1VakNCQ11DfGdtPHRRYDlJXzAsPz88R2BeYD0hfm9fKSlENkwzSXlfM3xJeyM2JTRBeUpTel9oYzBtZ1UzODpX''@;'; put 'put ''InVIRT9uKn4uIVQzVTEiRj9vIWJzSHE6alEydkF3MTVwJVtbbEw2R3tdZ2ojam1zOXkpSmBzblAoXXAvZU1TZFJ0fmlEQERxMko5VEB8cXx1YlUjWUpzWVcxeikyO0xKaTZjSnVldys2NTZwOWc8VW54RzUxR0NDNEk9WkBkXV81RiVLVWNxU0IkJl4pI3J6SCtuUz11OmJGJlc2MT5IbU50V1dQ''@;'; put 'put ''RThQXklXSWR2RThyWV5TI3slZ0hNW01dUSMpTUJlOVhoVS4xKElndEpNM2t0Xm82eVs5bFFgbXxrbys1KEo/PC9YY05PaFU3R1ROYFl2aW4/eSxyfk1YSG1OXXNCcVsrW2Q4aVN9ZXJeZChAKyw0dUBAN3BLS2E9fDI5ZXR0KklMPSpVWzdtNTw2K1lTZ2woJWRMeH5qck9DLmQ4Vjx5THkxNUZA''@;'; put 'put ''In5WRlYuWDBMVipQKnQvLjpVfGRfQDhCZCtMSzgjamlDIStXcHAvTFIpRHlFIlF4Iz1ENjs8fjp6Z2NUeVduQ3RPYmREUypaOCgkKTRndV4vOGN2a1BOUWw1LD46JVRNNktNVjVnYHNKLj9kPHxIQFYuW3gqNFZpXnwoTXNZbmo1eHlLcV5+RXp8NixFQ3FGZCpPLyV3Y0FtWkJTfkQzeHxxKkRW''@;'; put 'put ''b0NTMyh2OEVlMUpvWk5zL2tSMUs3OXBqbiI5PlVPVSVtYUFdKU5nRFRpallJJUd9Rk08XVlENXQ7d3Ymd2JVRmphe3JhYmJkPCJkI0smJDVRQFB0fmxOZDg2Mk5pczo1SzQkPWo5dn1eQ3cvJFR2IldNIjpHZSE6JD14VnFhSTEkVz4iY0pwLzpIP20jNkFITzsxUmI5dEJgWlhseCpBbjg/Z294''@;'; put 'put ''WCN7T3AhNWg/YVQvQz1dbV5jfkx9JSlxcyFidH5hJDpgUlZGWl1seXRwQz1BL2IhNEIqUFZRNCF7QiYia35xQWBlaX4uODBGcnZmJShtZzVDe3YsX1Y6RiteOX5jI2F5M1Z3N2x6N3w0c30rOisuWHFJU1EzXiRTSjY0bXxKeklyMDY6dFMvMUEiVXs3KVk7LFV4Kn5QMG5kS1BnXUQlT0tOU2hs''@;'; put 'put ''Omo2ezMhOnxlKU1LXzFvUDUoP115LyxRcUc3QmlGcU0+N1U7cCxHWkh+PjtLODo8aXUoPUg7QDN4NCVxVzxxPmYxbS5ZRVhUa0xlQWBOYGFQIXM8eEJTV2F0Y25UZ2FUOHNkZkArRSIoMHhOfmZtQExvSDgmOVhKbEcye0dJQSJ4JV9vVkxUKyxaNzReQGp5STEoSXg8ekFnOFNwLFl9cmkyPCto''@;'; put 'put ''UlsqPnYoYkZAZE04LiZeJGNuZlJJJlBlREldUzJGczQkdDpiIk5kcFoqRFFKVn4hfFQ9cXwsLFZEUGE9TlZ6I3FfcDM0QjVyU3dUJDFRYHUhZmcoZGksSV9TQVNwQFpXYil0dWwlbiRDRXxLeihlP3s8ZCpja2VFPXd8RHlRW2hVVX5pVzJ7eGxYZ3Bva2M8Sjx1JCJLQFFBKyRwPT1yejhDdWo/''@;'; put 'put ''L0svbCxXdjU5PntuR2FmbH5wdi9SRFFHWzU5YEkwPDhaKmAvamh2RTcrKjlEb0xnJjhASTBfL21gc29WQUBWZWFjLztqTS5AXm1PXWwkUD5hYWdFenBIMmkiI1szaWAvU0M/MXE1dCpoZEFqQXdlIWRkKH1MMnosZiVLVFkjJkNRIzBXMnpdK2YjTWwzb01dckRncSY4VH10QEovWihBQnt2Ry90''@;'; put 'put ''JjU9V25eejUqaV5XXVVhM3RQZHYkTDUwQDhDajZ9ZSl9bmM8Xl90LjNRbntiQSImbzBQTmlWKXlrUkx8Yl1KLjJ9LFRPMGVDdyVkUDwsMFU9eGF9MWBgKWoqYnZzQlFDNz1QQVRIMXRXQHhda1VoO3lqeCRaVjlJKTpofWVbYV1AVGtNO2hIUn1jMHo+b21xS2cuV2VZLm0uPX1WWmMuTUw4WSE5''@;'; put 'put ''W35ROUVNY0lPN0whQmxZQ0g1Yk9PJXRRK3BhPEVHJTBOa1R1Z0xhaHpoa2YmUmN6IzE2N35zVyJDOlNLSWJvOlFuTHBuTTNSaH0jT199KD1SfWMzWHElfiJROlk0ZysmU1RENmY6WlYxOWtvcnU6YDZePTl0VkYqRVohOH4semN8d35XbXREa1Y3XSN6OEJUR1NMNylRKy91bzVgOSQ0JThnOFI/''@;'; put 'put ''QWdTPjNTdG5bUl5KTUJRKS4pXVZjK0svbHdUZkNaYjdOSk9mJHBoWzlBSG1DdnZEKz5banIkWmxmZ0NbbWptZjhhc0MqdlZ+SExbVUdmckJmfktdTSJNbCteeWM/JXhZOFpvb11wXkJdbl4uVEF8eD9ROF1LeCNkU0ZveTU7SiZOJXR1V2FzcTwjVTs4VnB6R0ElK21sV01AVzNEbGF9QntrNiY8''@;'; put 'put ''ZFRmdy9uPnlqeWQyZUBGPVs3KmkzcHZXPGApTkhjTV8uNURxRyhZPjlMT3ozVighKD5pZl1gakdNZns4MDwxTVYzeUlgaDhKSjYvVls/MzFkUjlBLyE5QlFpOkJbd3BbWmkuNCE7W3tEfC5OMzd3QS4sbjc0ODZHdDpUfTg0eCkyc01hUl5MTTVnY2JwWy5sd14qZFFlPl9eY1FxMDBVWj09LFY0''@;'; put 'put ''ZltdPSp4Lyo3MUkmalBJfEghQTlwKVI2OVlIJiQ3Q3taKFhMT0tNXkopbnZ9SixMTmRKLlk3QVJUbiN2MDBuTGhWdm9bWWpSS2ZbVGdMamBtNl45Z30lIzFyOC5JKCs7PXM6T3Y8ez8zLltmcUJVTX00L0RgcDw1Z3x+b2ozcm1bazBtWkk3WkFpPk1yQlAqQ0leL0E/PVFsVkNETEMqd2BrO0Ap''@;'; put 'put ''MU9CdChwOkRSaz48QSR7ZExEXmAzan5qQ28sbz01OlNPREYqMz9xeVF7fH5XXUJZJDJ4dF4pNT9QWlFIcj9YLzAmcmJSd2JSJVMhZz5MRihGfkNvVlc2YUcuRGt6SWZMZzdnQUZMcTRUYl5Hd19xY3VwTUgoUFN3ZmE0ZyViNVBzYSNrbmlyMVk3YVtlYmwhWUQjOks/O0I0NzU/VHdKfGhJdi5W''@;'; put 'put ''LEovMEpAV1VWL248IXxFI2ZYR2htNiolez9IV3EvUmN6S1hmb0BbYFhgNj9AO19KeG1bMUU3SytAIUN2SmNgcE07ZntARy4kVjszfnE/Jm50c1l8OkZrT25EWWxBWVAsTjdmQXMoQjkiNFp0bjcqd0A3MUMxQiVFZHZGT3BYIjU0elkrS1FiZHZMbnVmI0ZdJjxLOUkzJUVVbSZ7V0VRcHVCKTw+''@;'; put 'put ''cDt0O25kcW1UeipbSjZEei40NWR3JDdAUz5GJUhmfHdkdG99RGZNSVBtWU57VXVaJTx5ZkJUI1ZCRWRMbDFSYEJdNEsuQTdyTnBpO3xLZFJ9USQ2WmtEMHQ5WE1qOmpuYn1adU8oJU10QmlmNnRbQDVzYiQqQzxFayJ8OTMzSjkibWkqaCNRQDkkdD50dm98YDsjUUxNeTEzWGNlPztKWi8qZGR5''@;'; put 'put ''RGl8Py59WUsmZX5MLHZ9S3xBTH0kYG0yIyVGIyhETCVsJHNod2heNEtsWzgyYzdsVSQ4JV10Zk0+SiFjLHVOZSNpfVFgb3tzZUtmSyJVWzksR0tCYWxDJCZwZG5RXWhMMUN0KT8vXnEpK3Nlfj1aKmxkV2VTeEQsIWZpNlFfbl9ASiJ0XjIxZiRKYjE+P01nZURaX3EkSyl3T19YIUEuSyVvOnhT''@;'; put 'put ''Wnc9PXQoSyxiM1YkIU9dfGhLNkVzSzR0KiRTRUVPaVdOc3xyKThsKV5+NmR3R3Bve31vMDV2M0FZd347VUNLPzcrTCYiVzhzWnx1TWl+UiNEeCFWZCRmQ0h8RU9LWUVaOGtIOW8wVGRmX0pFMHw1ZXgvMCFnOkZdP2tZJEc/UlpdO1N0Vl0sYnRMZkNpN1cqODRYQ20/bHJES0c4NyskfSQyJEMl''@;'; put 'put ''Ok9uXWs/cltDPXNxdzQhflhqcnFZOFBua0VPIWdLPT9fTTh+KW5kNW1uKWtuRiR3TiVzVH1gZ255UnlSUHJpUCp5WjVXaEBjSVc8T2teQ3RfJiVOYVk2WncyKT5MfFZUeSs6VDU8MHJgXi53SiFORD9TVCtvc2tiQ25LZCxZR11OeDtwSHUvLmJSa3hEVW0ycylEb0NwfnlrSSt6L1JOQ2QoISFM''@;'; put 'put ''LlUmWlMkamx1Y1BIWlt4R0dHUD5rciw5WGUmWDZMW3xTc0dVOC8xKS5hISo9KDNVYE00Y31pKF40ZnZMN1dJISU9dDRMLmEyOlU8c2hrdThuViorLm1CNWc3IVlqaXh3I0klYClFVUdCY30/WjsmV2ZIKTFBc2spKWojKz1AZyM5czUzWlNqMl53V11ZeFAoQy8hOmgwTFFGZ01iSjEjZyk5Jnhw''@;'; put 'put ''IUhrNm9ETURzKkZ5ZWspZikrW0ZEdVE8WTJsKyZbOFoibD0sYUxNTDEkYC9VdTFOanVGL2ZaYFkpfER8LEg/dSo5W0ghOGZqKnIpPzo3ZVUzUkM2TEYsQFR4KDMja006WixWNVVXMUo2RzFMdSE7UXExdzkyVU9QbkhsYC4uZ1M+QyRJXUoxSnFxdE4sV3l+Ql8kaUB2Slk6REtjT0M1NFFAOlAu''@;'; put 'put ''Nl8pbXdVOXoiPClVeD85MTBVRDFoVj1wUnEqPVl5MyR5LEJjRiVxd1pidXBIfGVvZCJpOiRLRUM2TkJAU3A2MV97QkM2eT0qYFBRalZpdCokMUxbQHdzcnJmVmtZc140SGY2bWZRdFdtcGphQDsocmIuZ0clPER4MXVQfHY+YEByYVNSUC8vRSlbXSoxI24/QDQ2a017YVBEZ1kyXUA4JDwmaixb''@;'; put 'put ''T01IKEZvQXdtYFlVUCN+aF9XNn1+KEhSaDNHV04odnVTR2hffFpVNVN+I2dtZk9RdUlKfSRKcUNCNyNUelBeSWljPnlyIl5xfHd9dzJLKXQvUVB4REclTHQqP2pVSnopVThZb11CN29tT1IhLz0jV35vNW0pL3p4KypbXytITyZTUE5JU25VZGQpTElSMCxzQjcuNWxDWmBVcT9FTTF9UDczV3p2''@;'; put 'put ''UGd2P2NnfmZ+aVRIPmkvNk1hRyNeaj5ZRUhwOm5CMyVNUSVGNl0wSTErbkIhRm8pM1l2Y3ZiLm16KEBsNVJFRWtEUGFjRj9UU2BXK01uK3Moc2NJJEVXVykwUXcvRSsmfH00dT9OcWNrZFQxPWI0OypJVSgzdC5gfWNwL1ZaUypiczpESFJAbkhvMjtpR0Y8Ym5xKEVLXkplLislL0VfZTgkQ2Jh''@;'; put 'put ''dzY+K0dwJStLRGd5OyQ/Rl00S2lLdXMpeVc5QlBhcyFidXYjTm1dTHR4JXA7Lm5Ic3oiPjYybCQseG1VNzVGTWhvITJvIVRXISFYQioufi4sJXoseEVfclhvcjs6IXpITkdNRFZIVWJbVSgsKGVkOjNTQjBVNUFAIVtgI3RsTj1QME0hN2d+SHlQX0NUM0NjWSFmP1ZIJFc3YkVLSG91dXNLS2Eu''@;'; put 'put ''YzpNR2JAKnJRNnhLcjRvUDxzVmQuLEZBUFhSPiwua0lYSkF9VntyWHhmM3VQI3dydH49NkRVbnNpei5LdG1sTVIweyosQkZ+PyNqWEJ4UktDLFIpOnkwOns8bzRdcihzb3lsSyFpLjl4fCQ5anA5dV4+L0ZaKTNgMm4+b0NiYTxKIVQiV01JYkYhazAmW3MsaEpgOjdfYWYoWD5te1AkPmBSV2dN''@;'; put 'put ''M1duSEE+bmApbG94aXQlQ3hGb0Z4UUIjVzJ8aSRGSVAiLn48T2RrRldqMCk3SSVYdVl+M3JiKy9FX0FpLFQ4bj8oVVFiR1VMWzF1UzYrRWpQbiZzSXRWWH5ZKn1USyFXQzRKSXs0PDJhSmtmYk0vYHUiSmgobzxEaEw2RCNiIXZPa2tNaUsqcWp0RHVDKTN3WDF9aFZJIjJaX1U3N1IoVzwiSHQv''@;'; put 'put ''XWN9el9TdDpuaiQuRn07SWxYT1U6az1+PGE5XVZTWmkiV1lBbjV3dHl+JEF1UzQzcFZWLHgkRSE6O1JzKm5CLz9HSmBEY2hCZHA8eih8d35HKWlQJiorcElmYDlPSHk0aD9xIUZXaCo6Xk8vRDJ6eUVbeWllcHRkVz1Ib0kvd3B9a2UpMCEqYiU3ZUApXjdvYk9pQjhlSV9xLE11RXttKn1YVjhu''@;'; put 'put ''aHVJZz8zO3AmUHk0L11qOENGYEFBUjNiUiI0dzBrZ31+ME5wXUohPVlHbHZUZF5PPT4oWztlM11UPiUjVS8iQFtNbTlwQXt1SWNEKWpyNWdEcEV8JHp4UWBBLFJ+VkNdIV8kZD5pZjJfdWJZZ2dWdFtYUyI5T31fS15zMVZVMWU6MD5gd3sibF9aIkxzSXhOUW97NTdqWDBZWTxWNHUpam0oPGgl''@;'; put 'put ''MTh7XVt7WGg+ZEN1M2NPQz1gQWhxRXJWc2IvM3o9fiZ0PFZnVEFhYShbfD9TWSM8IU02LCpjYEFGd0tlakwyfEh7UkRlJnFSKSNGY29kPDszV1Z+ZXh4e1hpfjw8VTV9ZGVObnErViVfflVySWZTd2Z2aCpJJSpTQCswKCgzNCUua1VdTDx8PFdlWipRMTluQHgmVz19L1h9SnEhbUE6UlNMO3I+''@;'; put 'put ''eDt5eHMkJEQ1MC9kYVNeUkUoKitnYCNUZENqazgib25YP3VZW2hlMGpwR21JUjppYkIvazkwTk51OWtrRztGZnNpaiM8OHJqWz9ffi9xa0RfLFdATyhKc2dOckR+PygqWG56VmVLczB8c1prVStAMDQ0Kk15WXpIUEdaU21tJDFHSCxRLHJ3MW9MOn09bTYqNip4TFUsejRdVlFJXlZtL3UiTWMh''@;'; put 'put ''T1FsXSUrRl56TEhOdDtOVSFTNzF2Qz5Bej1haH0pPHA3QTk1W01ZaUprQlUsPFFheXI4Wy5VcCovRikiU2Qpd3FvZWk9aVZiJnNQc1g8emdRIWYwOmlzayJ1Tm88WndkWywpWTYvXy5jK0ZgW1VwLDkxQl9LJW1reyJHOy44aVlnci9SWC51NzlXQktCJW8oT1NvImp2VTNaeWhrWnB6X0lseGA1''@;'; put 'put ''NGl5ZSFxLGNYMzVHSnY0dzptTD4xVWghZU1iRz9TeThkKVRRbk8lWURmJmFBMSU6fkVuQn5xLEZmZTUoYjBudDxhUTxaXWFyQ2kjTUk3K3dKfmVLcVRUeWpJamBFI2xmYSkiIT1ESiYoIlMyWnE+cj9GUnp6QSFpTTFhSXl9eGJLPnN3PV9abFVeQTBbW00sZXFLU0pMNDhVcnExNXArc1siY18+''@;'; put 'put ''Ml8mPDw/NTw7O2N6PUA7QnQxLndycnx2KmVpQUpuUz1dclR4dSRpRmlQbns4dzoqLCJbVHVsbkdSS0NNOys/QlVDcmRPUSEmeVVIcDQlXW5nT099NHs9cGpzczFDYy9kNjlyKj1pNVBCXkhpa1cleDdBMW1pfUpsWzg+KmhlWDprUFY0VHtTVHpuTS4sIypePyQ2QWxWKU4ocilsWjBPT2tHb05u''@;'; put 'put ''WmxNMHM4XSVvSioqU2lPNFVifGleNzVWSnN4XmJ3cmF8SmNgSXRmNXN8UEdySDQ0d0IheXhpfXd9Qn1yLD5kZVM3bF13RlJ5d0RvbDkmWiVhV0U/UDIlYzJ4QzMvUWcuIiZ3cCxVZUFlcUFIaWQkcUEpVShrPjI4WS59KUE1OC4wYHFVLGxeODx1dnc/MEIrWD5UWF9kS2M0XipWdDJ5K2IjOzZR''@;'; put 'put ''Nkk5eX41PGJ2QkRzZWk0ODhoelcmOkFkKTI9e31bZVFmIVlqfE1yNmElcHluQVo1akc6U2NuV3gmTFhIU0RSdFUkRj92anpgTik4ZWxmIWo2JmBmdm9zSUZYPTk7aExwIW9jVlBFMDhJZ1tvYjpfIUB0WE1WJHc4Y2sua21nWm9PMF4kQ2NVdVJzaE9fV1laW2dEO3c/RkMkdUpiZmNBKHI+MENR''@;'; put 'put ''TGIoNiVgLjdWXSVRd1RecmUlcmxLI0tmNDpBOiZSfF9dXkNSbWo9KjdPPCFJa0U3bldfQXtRdDd5SjtwfUk6fEd0YHtiS045W3JYQylCUSExL2IkUz53Mmw8MDZSOSk8TEVpZ0w5VTpEdCJMNzRQSXU+TTkpXmAybD9BLDxGMy9xLkVMcjVJYUxVYTtxZHZsNSxMYiszb1dKbGxkLFc3bT0/bVg6''@;'; put 'put ''O31vfGRGbGE7RGdVT08sb2VGTU5fU2R+JXREdD1fbjNrKjRZS1s0Uy48LmovOnxeVlJzLE15Q30kN2t4K1p7QWQuRjNnUlR+OV5TNChjNzA5P2kmYz1VSzBKTzI5clhMMWA2Nm59WzxmcCUjUCJUSmBXeighVCZGV2EvbCFbXTA5LFYiZStzW05deTlCPzBqUGcvT29vS25nNyhLTFdbK0VHKVtQ''@;'; put 'put ''TWd6Uip9fUQqdXUvY0lVUiU2RElVISVwUzgjfVZtXz5dMnwuSE9EQUlBcTJLMyEvTTIyR2lPX1NJcGZySnBkdXJTcypYdDI8RDBFV04wUzFxWE94dyJoeUpRakR1UWd4VTZLblVzYWN8cjshPnpsTVdaInRTIXFNcGpJQUFvUkBAND9HIUssWj1+QnVNYmRSOj43QjBIS0cjPzA6b084d3A8amI6''@;'; put 'put ''ek5JVVZPbFQ4Ln0kVTBoPnBZSFMpKSVFc0Y3LCtLXSpOQD0lWyg1eXFXPHUjYShIWjNmbndtQH1iNzROY0lPLEpIQ2haMy9TbV1qS3Z0aUQmYH47RW1PRz1MaVdrMGlhOjl7fVk0YF5tazR7KDZ5MkZuJT81dS5vVFYyZl5QT3NSOFY6XVVPe24oel5IaXJfQGZFd0JoSFE6N0dYSCxZaVQ9SERC''@;'; put 'put ''d342WEAqSio5PSpzbE08TTpCdjAkSXx4QT97fWxBPHYsKUEzIi9RbTAjI35yYEcvTDNaY31jZTduckFUKWNhZjA3TCJXbmpzT2hGJCpHPltdJC40P1lZIzNZJjE3V3xFLjNNPzhXOSZdTmY8ND9wXVJ5eTYsSkx7cSRgaGxPRU5RNmM8K1JnZXY2SUVKJSU6JTxxTngkW1VJcUNRMkBsJU8+TVYi''@;'; put 'put ''e3FQSnB0SVtiYCFoLkV+YjRFRjcyKGppLFRSMyZOSjliZ2ozQjkuQUVIQC5OPWp1SGNsXkQsU25KUkZGTnQ2cnY7bXdUIyxKc0BHPVQ7QzNlek9pfH1+QGYvWGAkWj9yfEc8fWJpb1VWeVBNSHR2anI1XXJJS3okKF1WOj9fPllOMVVIST5CIUVsZCMsU0xCaE1dcl9jdmAsQU0iQ0ErcixkJTxO''@;'; put 'put ''U1hDOko0S3RPN0dMXXokYEkhZVh5VUUmPyRmVihTIngjc2A2VnRtNiRubVVXImd9fWs1UlIrencsVG9QXlg6Qjp+OnZsKjdGbVcvIUlDbko5fktyPW8sfHMmSnVGYkJ8OCFdP2NnS3RYQGFxcElIKEVMZXJHfi99XT5qcyJbe0tOIkY1ak1Gd3ElcGErPFV0bz8yXTxfOypnSFpVWDdPSWoqYU1v''@;'; put 'put ''SEEzMXAmZD55ODo0fnJxWn5MckE+a0pVQmEhflpeSVI6VDZtMSV5OEhNOHk7UlZSdHxqKEtYaS56YSRmOHl2RjolPTc/e3Fvbm84RUQqbWxgRjUsfE5QTylic2ZTODpBKlZEcCxMWURibyNNbipUXl9TfDlpcz4xImErW0pydj9vb09tNSpGWS5MLH1xRjx6SSRUeEV5Y2NIVnNqbV9ze1pqZyky''@;'; put 'put ''KjNsbzQ1bCpFc2IjZ2I3JVl+cV4oJiQ4akRHSGR2K1FQfGR6MFAhcilCeEIqQEJsSmpkencxKHh2WHY1Y1V3LmVFPnRtQ25QNmchL142fjpzW1ZtKmVJJFZxYzY4eCxHITd3ZishPGZjeWBpdE1kOi9hfURxaz4mXls2K2RBYV8vI3xEXSFaRkh9UTIqJDZzYldkRDJAbHo6cShsfEk5a2Q2NTgx''@;'; put 'put ''ekdgUHo6MDV4cDBYZVNdYkZ4NEJGSShaYXF+YS8kWllUWktFb1ooN35rTkhQaCl6fi96WHNwcmxbR3VTMD9DbF4kViErZnI3ay8maWhsbEVAQSpFNUFgMlM5TCkzbml4QVtJTGUqUnolQCZKajw2Zm98KV5wVXVwP1NNcTRXKE49PXssXzo3U1BLUUU4e240cE99PjRFL3lrdzdtbVpkT1AieFhE''@;'; put 'put ''eFhYTCprWWNnIyhHTzIpTXljLzQkVkEvbiR4M0hhMj05dGBhPTwmSTgyaFUhPmwrfStEIU8yOWMvNjE4XkNOUWlweU5kWyhPJnBfOHxrP3s/U0BkYCRNR15xfThVIVAhN0RLcV91STpuPD4vUylNWVJBQUVWPWZPfnJxaGE+LE9YQkFjV11iUmpFP2ljQHRCd0JPcSsucilhdjFfUEgqZ1FzJSkq''@;'; put 'put ''eTdyQ3B6eXMxQ0s5YlIqXU48NnpaeGUsdlozY2QoQmVmSD0hbFQ8NEBsVFZhV1FtbiQ4S3cmNGRDfnpFY3NncyRBMHYrTWwvcHtldlRielM9OSooRVdXYks8fkklanxTYjtuZ1ooUTFoVF92c2NFXmtqSjpjIks+QGhOUXplI1BJNm9VblhiP2d7aG12PnlycntyO05QaCNCTyI0ciIvLm9FS1ld''@;'; put 'put ''O0cjOiQsc096cjFLejM0V2VwMUkuWiY2PVZBIVBMU3c0TUAue0tXO24re0xOUDB9PWt9OTBDP2VAYUNXWVd7QCl1IUAham5AaE5QXU5IOkRwPEBWJWc9TjNefVleYWxWMnsrVzdIMWt2dWdwfXZee3Q/Vm80Il55U0I6W241ai5tI0gxYzZ4Xn5YUHNNfUdkX1QqVUJIOz9DX25wdV1HNFMpPGtG''@;'; put 'put ''ZG9uWm9eeHIhL0wxQ1d0M2IoOlZ3XV9zOVddYSZVVVs0dkh0WFQybTxvdDgidilXfnQ2R34xa3VlclFHOllrIVdvWk1CP3R5cTxbKGNUMHdfMjptKStVPVdQLnB3WGIpUHJ5T2luMC9xSG8uMmlxdigjUz88ZmUhQlpQQDQ/S1ZdNCQyPlJ6W2csbzdQckBzJmIjJCZmWDZkPkBbVFpOR1FeWmtU''@;'; put 'put ''XW04MC8+R0tiaEEuT0pJNEI2PypSaWtUaU9JNUtITzB5SS8hOEoybGQjKk8qSSpRTWVmcEd0bTtCXnBUWyxrfC8kU3RqbCRsIkE7SUA8aU9eYTR4JXpVVCgocVNCdHJ4LmU+U2U0TWYkPGwkb0YvWzc9ZG5kOFFmcnRnXW1ldGlSSSwuSEJAelE8JmlXfV9pZSooJTlCQTYqKDZ2X0AlWCZXJDBI''@;'; put 'put ''OlJAVjZCRHolKHovaUY0ej9XN2lVOVFJS2VbU0RCfCxlU1QkK1N5Uz9EVGt8QFlNMlZqXjUvXjBGSzJ5KSgkcGNBPmY1JS4rei9UaSE1O1hZLloye2s+am9OYWQwaGoiJkBDSyk+RVFzc0RLenNLXUQ8b3xAV2lmV34ydEkuYU4sTWtETnpePDMsSCF7QntwQGRPKE5GJjZ1fGUiOjxsZl5FW1Io''@;'; put 'put ''TEkwfjR7NzY/clpIc0EyJjR8O1Iiakh4UypqKWcobmFPMztqWzxNZ1tFWFZBYkZLLnxdcjBVPjBFeS9ySEsufH1XbTd1NVQoQXlDLm5HKVJWbjZOXU4rfFBnN3BvOlFrV29yXkZ9ZUJRPFshKnh8U0ImTDRaJXNjKjhdVUpWKV8uIS9fPEY+VnFwPlI0YjBfSz9+KzgxRSlqZUZ3RyE5QH57Qm4j''@;'; put 'put ''MGA7YF5BTTZtUSpnOWsuRlhENEp2LGVCPmNwLnA7Szl6O01SKGxDe3ImNWxXaXt7WyZaQ2MrMGtjKSZkUkFuQS9HOi80STRQIysyYzJ1TClzNkVZXyhVS3hJMHpCVTR6PVhIQzpiME1TWWJ1PjpKaF5BbGNXZFVmPmxZQlJNOmMpUHoiZzYxNFIpM31XK25zOyozXkVNVmR0OVBxckRNZSE1Zk5D''@;'; put 'put ''KjhvMixOLzYiJn5tOGVYfndqXnw2Z1ZkOSksYnovSC9CWitGcmYzMlNUeG19bD5YPXtbSFVtRVdqdzEzMCJ0LGYyUixne3BZUVFJSkZiM0ArL2hZPVduTVJFREBUe2dLd0NQL3NAYTJ1I1c2fl5nc3ovQ1phTkprPU5UPCQzTChfe0s4enhwMz9dNlA7WWF3JWZgZkxOekclVWdRXXNtdmRwTWwp''@;'; put 'put ''OFZ5SlNDTH09S2xxZl9HIn1OKm88ZTw9YXJ4JW9rND5+fSEoMDpsJTdGMkklel15OX5PI0ovSCNpbjghYXhbOjQjKDosJXhOaEAwbzFDcDFMP35TMmZXVWFjT19vQjIlNylKNylefEhINCg9dUdsMyZ1bCkvOTs6SVY8ZVFKNCpfK317MHdCIXJRTFkzJll+SEomQkVYKXE2ZFFKLDpTYSVnSTNr''@;'; put 'put ''VE0vM3BAVF52YHEqRS4laj8hSmJoUmw9aj5CfGByZF5BcTMue2JBVmsxRi9ye0dRYjJ1TCJXXl1jQ3ZRd2tuUGljTixTYjhWfnppZDt9MEphSEkwKSxMKVAzVE0we0NbX0ZTT1hJfSk0TUpzXUtwdU0hYn10QE5ELiM9a1tVTHNZQXszZnwyYD9JMXJhK1hQeVk7bWlFUn5kaV15fk5gPV5HajlZ''@;'; put 'put ''IW9mZ3Jad1tDfFN6UjAuRHkmOWRHfVM3LzhJZ31JUF5XOXM3M2NAZDYxQE4le0VnKkpHeyw2S1Y9a2phM3BEcl9zK25FTUZhYHx3Q2whUWFqM08yPj9eU19AXzgmPkxCfD5fImFDNEJzKnp0ak56OUlCQzBJZExyTDJXZ0hodWBYc2ZRITE4P2JGLzc6R2kkWmwrLFtILENIQmN1dCtAJlJrdj5v''@;'; put 'put ''fVEhZ1lgeSxkNntkQnklakZJRCVKZGFSbmlYI0xbPjxddzE6cj5MMVlGPjddUDNJMT5RQCk3aU9+a0QmIk8wLCxAZVkxNUFaPCIzPn5ZTjRyVTs1bTY2LCVtSmA6ZDdKVDxuT3MsdCtTY2IxfUZ7JiZ+a0s4Mm5PMCx0K1NjNkl7TFU8S3JEal1vOHdfVng/Q01+NEFaMT9zeU1QOEksNE8hQ3VH''@;'; put 'put ''K1YwKUAvaT5gYUlQeGIrcD0lYCtVQVpiNjVqMTxndT41L25oKCt+OXZJclQ9U2ZHJW5qfVhMWTxsfitPZiImdVRmV3dgN1FkbU4uaWxUbT1JTWAzWFBHXT1EaWAxWTIwVjNDLlZlZ1R5eT4rTEZMMGcyYlIrK3laJTo1SiY6TEpiY3kyMmlgZ0UvQCs/LmVgSHY0YlM1M1lfYmdyJTtfU2UoKSMx''@;'; put 'put ''TDFeVVlMQ29tS1JIZmdDZVJIWHdFKyFvR0VZXzwlXnx2ZCNbfX4+aVZpc2tRJVJgVGFuS3dpKSQhMkczayQxUzMyJF1CMm5zRzRKfilAWjBaX3dxV25jcS9Ue3ZlOGRCfnJgOCImU0YiQHUkN2RvVVdkfnREQ2VJVUpgSGNRKnBNc3VJKElTYTg9O3osc015bXRqXmRfdjN3Q2cqSyEmI3A5I0Ii''@;'; put 'put ''c204UWkuenJnb256P089bn1wdj84cFtZPlZRaThFR1Q5dFBHUWk4JW5XYX02P1UkOmRyL2pjQnRmfjB+bVRmWVV4SU9HZE17VzdKMVpxSXg9MTA8Qi5NSjcoalheWlVCSWhIQU1UPVZOSl5WUD5yS1QqM05pdj59eHJWOyZ8TklPUi4pTn5HKmBgK1QvcVhPZSwzO1BlL2dtTzd5Kk1COmQldXc7''@;'; put 'put ''SW58fk5sPV14I3A5OURGfDh1XTExMz1QMUFrVSVRbGBrfGI5YCZ8OnlwZTFMOEpfKUtHMTxLI2RRPXZ1MiV0LDgqJGxXfi5HQ21iNmI6aW9VWHdJZ1BFRG1lUkE4Z0RrKH5yRylSQmA0KU89O1JOIzZ5Xyp5cDEyZlNNKFRUTjBTUD86ZDZGR21oemI7YmgjdjVHPmdSdG02V05PRVBaT3ZifXg6''@;'; put 'put ''WSk2I0cxc2Q8dkVfXTtsSzMiJj99PU50MyxOdypASDxvM0I1dzpwcUVgRFNpYGkyW3VmO2hVdzJkKyQ+UHxqVmpwTGh4WzB2WnRWKWRebE9LdUMmfnNBI1B3QE87JSVUQmdNXWNCaT04OHRFWVtJUUdSVTNXdlF6a21aXTpHSTNXQDthM0IuKlA6flltbjRDOmd1dD9fVUdOLiprakpxRWdFeml7''@;'; put 'put ''KEpxXl9JckQ0eG47LFBhKD1VcjtlK2ZUWDJfbzArfElfSWMkN202M2lwPDZldG59ZDVGcG03Mk92WHZPVSh3VjxePHZqT0tGISJEbjFVaiR8USR0aCgvMlglIU53aX5tTWlEXnxwTjN6Xno6N3RlTHFLQ10pUG4uQWtjNF5TQDA+NSZCM1hjJSlLez5EZmkubEphRy5LVykod3xyIjZ8Tkwkc0Z7''@;'; put 'put ''bHksLCpWKjROO0Uqa01qI2FbeUlCXzhtTEY5R09YI3grJW1kRy5JZ0hFUStwLy9SLj9SJkN5SCJ1RS5LNCx1YnxTMGk6R0NxMTJeRH4/IXdvQzAyUFR3RU5QUSNgUlNwPHhicyxKM1QyZSNJT15ZI1pTR1VNKVJoKElbSiVRLmV+b2ssV05XVWQxYlZLXTR6e2NeYT5ZQCsqeXxVPX1IcS4ybX1k''@;'; put 'put ''Qj58U0lHRUhbPDNtfGlHPno1T00pUlVsWyxFOnpMVGI8bFBVRSRUUHAySjZ7WltIdmlwJEUuMU1WPiMjJk07JUI+L2VRNnhZcTkockFiU209PlBrU09gLklea3slOnNXUj1aOnw9IW1JWXN9P2V+NShfTypmd1kyb3BSWXx6bntabVI+OTlnbnZGIiZyJHp3b30yJkZZJFFHJkFwTTZSYkJrNzFd''@;'; put 'put ''WnFTQl1YMyFQI1ApNC46dSV3QDokZ0BKXW1LczklZT1tPlkwUUljZiYmVnw4QiMidzd8PV45fmNyTS4lQGk8dnlGb0d4XitRTUZvVDZFe1pZN3JNfilSbjhBK294cCtVKElzZ281PEZmPGd6cjY7LGJ4UDpQTVYvTClSWWkzMmB5P0lsalt9YFAxbylKOTwqOSJgU09fL2MkTz0hem0xP3l8SVpV''@;'; put 'put ''aGVYa1NFWV94MmhOeW9UMltxM2VPOGllL1Aoe207Lj1yc2BrIV4yWEowfFM6ekY2OSRKKDdePGpuLk0+RFRtcXp0IiJEaHR4OSZ9YTBUbH02JVE0Q019MUkxeUpEMmFAQUtYR3FBM20xWCxXYmJSflUqdns/P0BMKzFFSzExPGJ4byhYISJeNUkwYE1NRTE9YWl1Y1QvKXIkZ2hIZTl6OnZ8VypF''@;'; put 'put ''SWFLJHlSXihdcjlfSmhzIk4zcWhHaF82QENEOHszPDVCY3pXOCE5JWw2IXtKdGFkUkZDdTAybm1fcDozPURecX45TXJ3c0AsaFpFcURufkA2UihyVStOPnI2VFk4cDMzVDNiWyU7LllvYzsvaltZfTZdYk4uL1VeIVkpVi89NkwrKlM1fSRwQmg/O1NOUCx5Oz9GcG5sOzhjJSpBUDN3cjgjPnls''@;'; put 'put ''QnksfnpgPyliQFNPND9xZi9XMS5qU0xrW1dZQWFwTkNBYjdKVEt1NT05YX5dNzszWX58PTg8S3JFTXxbTztnLll7ckdlMkB+XTxyYjohSXJfbFguLyNBWjYqKnspZ14vRldlOS9iYyFQWjJIakZ2fkkjSGlhIzFlI3VzTiJDNnsuZiJXIz5YbCRCMUZXJH50LGY0fVBuS2RmUm4yJjNoOFZmaDhd''@;'; put 'put ''a01HKF10PDlJO0glQzFdcE57RFNtYVorVzo4NmRCS3QoZWpQTGt2dVhyeGRyNDJsLy5+eEI5TXB4PzpJMVQoRFE0WnBOaF04JXhYczl8QFldXypQZCQhQmNAUkBzZSxnPXV1MH1DO2dHJCtsRCs3Uns5cFVeejx7W2MwPUc5Zk9OfWs6ZEBZJUt0SyNkYGxZYSljfWJofll7WyRkUSR5LCEmSSEw''@;'; put 'put ''a1cuT2RRTGRTKko3SiY/PjF5KWM9cyNdQl14JWhoQnB+UzB8UDhXYlFebWRjL107IWZrTXkkI3ZxRUYkT0hBRyZsXWtPd1lPQ00lcVllQkhAaFUwTGBCPl1hTWlqezxLKTVkV3MmZCVWOFNPYHkxaG5Lbn11aiMsbisjfmpaUmg6YENWL2RraWF2RkhLWk92UD9TJCsmRFoxPExhflZhREkyfGt8''@;'; put 'put ''YG9oYVtQYWM4fHo+fmZRTXhPIW59dkxeezMpbWQ/c04uYnVLNFgrWExMKEJIaWhLIU81VkR0WWIyIUkwOVlVWitfMF1CeV52PVUoMmBpTT5lX3U5QEJZQVN7fFdYPj1fNXBLaD9Tanxqb2FdQzRMbzBYZCEvJiE+WVdqSlNeP3ZFKGwwVzY+eUheYnpzSC8vPWgjNTo2JGteR1tCVS5tRVZTMC9b''@;'; put 'put ''KDZvPzhPcH09KX0/d3sxdXw6R3FRPEA2KmN8a01tQlE+RGRhVXBDOUVrQE5tXzA7RHNQOlspI3QjdHYkcEZOLjxmQ3pnMUk5WGw9PjxsMV5Wb35oTyMyJlJwSlskQnoyZnIrKn5ZSXhETGd9ZFFpc0ckfCJhfWNufkdOPFV8TDRpRT1lKEMlJEFFa1RCSEM7dm84fiReWiVeeSZJaWopP0dEVHQ4''@;'; put 'put ''fnZ8eyNabW5kK0Fjfit0OH1OVzBKOkYhfn1ObV98PGZTUC81I2E7WSNGRzddbj5BbWpQSHN1dUV4Y3cjZylPakkjezI/X3BQOTsxNl9RfjBWQSN5aTJ9eDxAV2Z+Y1ZvPD1lMlI0X3ZTS3xJeFNSQ1MoJk0yLFd7OS99NmtjYyxzVjNTfGZ0LldBbigpTjtqT3thOVlHRk92TypBayZjdzVIZSIm''@;'; put 'put ''JWV4aWhFSEVLbVkzfmJlMjJIOVtTUVJkbV4scmY9K1lRVUdtb2tGXVs1Rmd4b1IkUlk9PV8uWzV1c0J7PXgjQDAyY2FgZ3ZVXV51OmFXNTw1PktmYHJLfmhwT1pdJFolZSZHNlFQQCFrYypCWVp+Ry9NQDIqSW9WQ2BCLmB6eCFVRnhHclppL2Q0LjRsZ2x5OjFwV3xyfldtZTBVN09TL2VnJVBp''@;'; put 'put ''O0ZTKnE5REVXc2B+MClGdiVFRVl0TVhEQUwrMmlZfExzJTI4PTg2MmVTOWlnd1A+Ti4waFEsdzlqSHR2NTo/cXpAUmc2djhxS1U6KVpdelh8eEJYNCU+M2hYPVRCalFRZEQ7U1d1OWRVPnM0cyhuMGV6b09SKV1hJTg5VFtwKFptLHBwekdxcXFJJnZydHdYamlffUdJPCRueFE8JitsRF5dNSho''@;'; put 'put ''IyVjI001KEgjLn5tSCNMRWYkXVsycmB5V1dvYEx3dn12c259NUgiWn5tVT5wYVpYZSh9W3F1WHMkTmthbn5PUz5mKWdpb0Q0I11NbkhmP2FhandrNEtVfDk7N2I1QW4oOXJ5OlZCNWxwOzNvLi8uOEt2QXJTeH53KWtrZUExcnMqIS9VWkVJfl5wNXJ7UGRRKCU8LHssZ3g/U1drZ2JDIVg7dj0p''@;'; put 'put ''ai4vX3trPnlyKD97d2thTH4uQkZ3emRjJEVEXWklbnNoVzZ1VjQueCNVNDUyNE9DYkJ0cHBUVTRSdm9wc0NoZHt8OFdPUX4rQFI6OnNxfFcsc1QwPkBLWz5pW1JvIyZSPmZvPTpkcGVzUl8yPzk3OWI9OT5SVHF0Ml4uLn5gOzJLXj93WltpYElialZoRDpyVV9TRks+IWtwdWZbYU5oampNUjRj''@;'; put 'put ''ISZGL1V4d05ILmgmRHVQQV9EKV9FTjVDSjAscy96QSg6XUdsKSF2MiZEQVdlcTRAVDh3VHNKdTpjLntqYCZNVSQkaTBRdCpyKGNPQW0xKDprfj42Tih+Z0E5S3JzOU4uLmZifEE4aDd6XTYzOzlKem4mblk9QSxdWzdtNzBlQ1NSSHI4aGMiSnQuRGg7NC9GQCg3bEFzVSUqSnY+bUYjITYhfHxT''@;'; put 'put ''fWgza2ZOMFc1cSVkeF9gTmZ6TGtQaWRsaG58eCVOXUd3R2YucHhbIkk8Y0RHciQ5fU5Ua3IqXypdaDppPnhYSV97bzI4cWw+eT5jOzUsbSwyNS5LbFtuTVdoMkteaFZVZjZjc2BlOU1yUzJkaXZlTE12LzwySDB9T3dPWWR8MC5uaTdpT1crUGRpWW5dfmgjMyVTJDpGZkQkMF54UE1TSGtmeCN8''@;'; put 'put ''JEkzR0xXQH5lOl5eNjY/eyYpSy5TPnhfTCN6RU5qc0siXmh3VSwsIXN7cypZVUFSQSlQKlVCWVo+MGw8WnsubXdKT145YWJUe24kOGE8Qjk+fkZwY0tNblYpc1RdV2xTQXh4dlBHaTRnR0VhS0goQiQpLmYqMnIldWI1e11QL1cvTTE0c0cyRHliYGNEVixwTi5qVi5ObE1pYmw8TyNJZCklcFBt''@;'; put 'put ''QzlPYGZHblBRZlA1VmNFfD9KV1FZIjNhUUEqaj15Ny51NDtLUDx4RyomQ2I+NTp+VGg7cDYsKiwhZFRPVUphW3xIeFRJUEpmZGAiIWV+ZFE3JXpaKHFEWW9yV0JaYiN9T1tQaEooMGZSO3hrZ3RHYXVMZyRiaU94aG4wUSpsKShoQWJpT3hoOXEhMS46TlBSaVROfig0Y3N3V2Z+S09RWGdDTFhn''@;'; put 'put ''TntbMG8sJWo+UkQ0IV5+MzBCX0IlRnA/L308PmYmTSxPbygxU2U7L34vUFRgLEdeLk1lJHVGPiMud15gdFNEbU9PW3dgWzhsen4pc343YTcuJkVtWy9seypLUyhTeltsUXJsTSxlXyYpKig7YGN6WiY6PzsleTx4fn1Uc1IhTFg6WkA5PGYyWGpPfjdqLDY3d28wX1J1RDY5cyY2JisyODh1eTEs''@;'; put 'put ''N3JsWnEhQ1VPKEc3fEV7LGMxWGVAUkp1QkhvdF9OJU5+ISUsI3I5fjVdWDQ/bUh0fnN9ZWBefmh4SjpueD5teHUweEcrUzw0ZWEiNCxUKWNqM1s4RmFyLlEqPF1fS1F4QiN4ZTswPyhjWUVLaiMkRnM2e05zIzpYUCxCPGZJZEB2P2dzSHAlSCRzQTpDQVh1V1YjR0FPQTxpPW5yO2wvKF9Zbj5u''@;'; put 'put ''PDxaPXs7bC91fDJyODdtcElmMHwlOUlMJmVTKVJ2MXZpfChfZmlaZXA9XypKPF9UKEljSzkhJVFUOTl2ekA4SjM2cmM/KWFgd0Z+VXFSalc9OVZnRDdfbUJRQCEyJGtMfFc0TzJSeip4M0lVKi96ezVyM106YEksMHIsZTsmI3p+cDEvL1V4PVtvemByNkY1e0d5Zip7OF5TSXlmMCRpdShMdVt4''@;'; put 'put ''RUo6dytTZXh9WSo7ZVMwUHVDP2FzUDFEMSNhKSZWYzZoWH5Xa0JeQlNecnB1ZDxKK0VuLGpWS3o2antvI3ZhREBiUVV5c2g5eXxmfW5rQHI7PWRSVH5YVn5NU09saDI8VSQ7WUJbTGw0UlFQSCJdaThmRCkvYm17dXI6OmtoZF5WNVl7Xkc0dEw+bSE3SStVeEled2oqZTFEKV0wRDVUL3twKH1O''@;'; put 'put ''KyxvNn5nZmBkb1cuVW4mPk1vejAsJitqVWBodD4kdT8xc1p1Zm8rb30zXTNBOSY7JXNsN0JfOHtiXVZwSCpsTlcoLnZNbjBGVElFRnpyJGZ2JGNpRUs3fFBzJTJGOVNrNWZBc1lrVjV+QHk2SSxJW0YrRi4rKjEjQGszMXllUyxpOj9UO0pxOy8/Lj97dDp8TW5INDp+emhCWk9qcDhHJkprTlFO''@;'; put 'put ''KEJDQXwwJWJnOjxEWzZoQzt+JkQrLzhQM3Z9Zj07XjJ5KXYmaEViSXh4Lkp7MTpabz4sSDlIZmgyQ15vfixSLEplO2t+YW1MU0VfJSFZYTxNZzIqfjlwaFlUdkZvbF5OQEFaNnxYLnlCWl9IeDJOOV9VdGVxU256LyFyaWJIW2BHVTpNRCRxUUNddlVffiZUS3FXUkNhVVNzL1NgbkE1OXVSciVS''@;'; put 'put ''PHt5NGlnZU95OihgUCY2TVY/QTpjI1ZTPGojWGIvUmNVOUg6NCUmW3E7OVVZKmU9KSk7PFJSSXQpOm1Ac3NCS1JtdmA2NTVeWUY3WiJ9cyFrPV5zQl9dSGV6WVRLVU0wbk01TXRkPUJzIkZ9OU9bPWFYSE4jImREeDZAVWZ6IUI9TUthZk96QG94fGJiUjMqMG82WThrfm0/ITZQZ1toV2lWdk9W''@;'; put 'put ''IUJ5PEZaWD8wMHJvITNGcGIjT0JTWV48an0xaldTKnI4LksySG4+UDAsWF1zfExtNFFxPXNNSm5nX2IlckF9Ums2KWppaClHYks8Szw7PFFuWit9bXBucHsrL0d+fGZOMks8ejJSV3o8T3Rhe0pMZi8zOEYzcGBrezxASWRWfFUoOSxFaHRdLGM3VjljXzdEMD5GW2g5KDYrYnlDZFFTfmRVcC57''@;'; put 'put ''JCw3X1N0b11jLldrWis9e1dpcSp+SVAuQHRmVElbQSk8QEZ9UUQ9QD4/cUJsYWpPM15QVlNuZngkSTx5aUZiSWZ4OHh3VDttaT9PcCI+ailENzg3fDkxUXIvZCM1Ql9dQiI1Oz5gcUlhMUwuJUBsaVpdUXtbSkFXRGhaaDpTZC8sYyV7L2dGQnoqOiltSTYsSzRuO2BDOkgqUzxeKEZmY0coVX47''@;'; put 'put ''amliWT5lbE5fbnBrYmBuOSlUJTlobDomQHIxZDdlbFBSQDAuYU5dK3pWOlh8a3hgTGBELElIPWB3PGY6fCVUfj9pdjc1N09kcig7LjJoNUY6SDE+TltKY2ddLG1VVE9NT2w9PVledXhSJihRY11YRFJEWlp1Ki8zIzBJbF5Qc0ovWVUqMUR5e3JJWzQlU2hyLzUsLDE4ckB9Xnx5QDUsXXUwWThI''@;'; put 'put ''YUlPMSN2TSFSIzg8LElXP3ZuIlpdflc6bVp4VUIlQ344QFZdVHphMUJLTl0zbllVSDJCcjIqfEowYnFrbWtHTiVoaG5eLjVEPis+PDA1bWFwXShjI2hwMyNlaiVdJH5UQmtnNj5yPmslISh1SltdSmBqPDA8amQyKltNfW86UTpGN1kwWXomVENVTjNvLHlrJE80cE8ubjYvIVR+YyUkUk4zcnsm''@;'; put 'put ''UCQpbFQ4YHc8Y1tIUVUvRFosKXdyTls8UU9YSXtITSk3YVouanNdNUQudzlsViQ0dmVOQlBNb2dpeF94Nn57WT5VTjc0TXgkUXgrZ3ApJW1oP0NAO3xTZWV8UjUyYGZyM1IoJTw4fDd2KUAjJmt+TEAvcFF1KE9WNHB8Ij0/Z0Nfc1ttSUU7NFRIcnt3aztpY2pRIT9kfkBLcSw0InsmOiVNeVlS''@;'; put 'put ''dGRKYXxFZHw6Zjg4OHU5MER5JHtHb2JYbWVwPyU7c1pSMVNwOiE9Mi8rKHZWZVpbM2orN3RgeUJRU1Vxejw+RXlea0kqeUZVUFdMaihBQ0hUWWpyTCpkbUpPY084dylGNDJWemBKYExxe2VwXyFzRm5Na2guczFreXtPXkYpKWs0USxJOGNeZENyUTRbWDdjcUlNSjkyTDw0LnpIOSxSPlBQOEkv''@;'; put 'put ''WHZSSGF6WD5oJWheUmY3fTpVWnVrbTFvTzFPSUd4KyV3M0lpTyNkcihNQE51fT0uL0JFVD9oNmZefj07c346dU46VWJKZ2EuVCVrYFo8KTkpfW5uL1crUTRjSlNaN1Qhc3RiOkxFSn5MWnc4UmVTeU9JbzluQFQha1FZJSFFeVhvMTlQUV5tUGRbTTlyLDErbTMwaUZLO3Y+WmVoZlZ3SUxNXTw/''@;'; put 'put ''NSlTOCM4TCo7IzdTUn0xKl9DMlEjc2xQJmEqQmtpQk08RXV0TGZMe28/c0JjRkQkW28qXkNwNis1JVBwOiFpLEBzUi5KfnM2RGtVbCVxSTNGQFZKTyhuXlNwc1VmKkIuZzlXMT99eT5XX2hgW1RdX3tMayEwIWFfRF9SaEk6cTs0TD8hTERiV2ElclNHW31nSlpwcFo5Nit8Lm1+Y2QoKlZKVyQu''@;'; put 'put ''TVdKfTV1Oj01amFGalRAcWprV3V6XStWOG9wJkBDS3E9WEI1Jm1ieSs5KWx6QHpKOEF5e01meDh2cnlKeU88Q15yTkg8O3I3XUIyS15uIVlnUkJxY2FOJjw4fEhMby9YUCxzd3lvOUguPmc0NmcwJHtuLC9qRTdlWD1yYng2bzVmNG43NVcjMXNlXnguPnJpMWEpPFIyWVVtP191azUueWZ6XihQ''@;'; put 'put ''ejdDfjE6QTZyODtmWnVYVX1dLjJXRXFudXJbcTBpaHhFJSg2IWpTfiJFRCo4RlZYOXI/K1A1VV9YNXFOaCtTVm84Slg8cClZb1Y5MHVbKF1yUjUzN3xvVU0uWl9KbTNbQVpNQj4kfC5zd3w5ZSwlN0BfO0lnZXhOKS5fWnFVTUw+LFJWaWVdWSNrUzJINV5IIy48ZUx+Ull2ITVeQ2RNSzUrYWcy''@;'; put 'put ''SWg1I1cmTmBDU2MsKUlzNSUhL3Y6eSxSWWgwdnYwWEgqRTFLTiFrMCwydzRlOWpIJk1sd0AqUyImL3spR3hAbHF3PDdTdS9TVmNsdjVxXkZAMGNbWzhtUl1iQ0FmOlc9bF57MXcpPW5mczQkMmwuK3VpTzRAKW0lVX5WInlheG95ODhYUGtZZyp8dGxZN29GSEgmUE5tKSsqQnU8U103dCowUmEp''@;'; put 'put ''ZF83S2JKQyUuT28/JS90TTYwQlVgb2o3PFAkQkVCN24zJk14SFVaWDIrKypBLmFVV1cuaTlxaUt8QU1fNDM5WFJ4cyNaQnJMYlhkJXx9RSxPfGpbYW1XelhvOWZeKHd5QC5wYm5EO1FGajc8JHhCNXR3cm5tWEFTWyFLNmRVVyQzdkp+TlJjRXwpM0xXeVhZSk8wUjxrUWNSfDF9RFMiJllWM1t0''@;'; put 'put ''OkhpSnpNW1B8MmI7OENPRFBeaitbfSgvRjguJlpyaGt+WXJCWDxdTFJaKDZZcWh0XUdac30+KUhqOzh7dy4hY0leX3lRJWpeX3lRLz89SFoyN29Je3Y1JjE2KnBxRDROIWR6ZV40eHlLUV46anFQbkp3YitRdSp2YnNGR1cqR286VUJRdWE9Imk0VHYqa3Nnfjo0R3EhLmMkSERDJHAwaXxmMnJ+''@;'; put 'put ''KF1gQ2Z3eEJGe3t0MTBjcDF2RGp9MlVRdTUuaXR1Y1pyd1F1dHNlaV9LajNvOVUxTzRUVWs6YkhufDE2TnBdZldiWVo0UERpRChQMSg2SWxDVXc6SzN9fWE3P1BOWTw/IzBySlovWU9INjp5QihHZG5HdGIvUjBGXUVkUDMvP2FjSEMie1VRIjhNcjQqQjxjTWE3YXFVVHlkai5kVlB3UWh7d14/''@;'; put 'put ''dHVZVG5wc05qJVpoPl5NbnVjY1BoQnNXXnI+SU5ENHg+UH1jcGpNb3pLUWR7eisiIWlzRUlmNVJsWiNSL2RVIjNfMk1FUHlDLytiVnkuSlQmLDQ2b1IsZk83Rm4hJmA6V3A+S084UWBXejBLUVcjSnNoYEJfMTxGbCFJQz1WYjpaaTs4aDlhdl9pbytbKzAjXWVsVl4icmpCWkB7cXUqUS4kN2BG''@;'; put 'put ''WUplQ3FmaGBtIUpEO2pvKEtaVSlsey5GdVlaV19gdl1KSzk8TiElYkA8WFk4REZIcTV9VDIxOWhzSjpfYzJNeDArQXcxbUxBPHBpUlt6IUlARFlfP2whL2soKmg+XWM0RWJtJWlfZU1hOWc9NEtTbCxYRFkzR3V1K0JSRW5HOH0sXzZDfHw+P11vWVc0NEtmZF55XUdXMkRTfWZuLnBxPz4/a1Mv''@;'; put 'put ''Ni93KCx4ZVVRQWsuTXV4PU12UWNldlE6MFV9TXhpTjU+L18yUyZafjpxW1A0Mn0mUi9WPlE8a1hESWBeSzJZZzZPdEBMZStXaWRgantOX3srIj83ezFBKDdSezdsTDg4T3RVS0I6cV1FeTNBTFNqZEhfVzUuej9vI2R6RVdVbkhaQldvMit1aUZNLyh6VlRqKyh6cjY+V0RLJWxkSDQ2eC9kX2xb''@;'; put 'put ''Z0J0Vig3JjclOV1EPTZYV0pqX1B1IzsrNDI6S2ddPW1afFttYEsoL3p5aSNDJStyOW5WM3pGdHE8UHU9d316SHMmdV1+V0kudkJrNGk2d3gmZ2EjemdqXzguSHp6QGkzSEpOb2smNisoKTh+ZFAwflUpKTJuT087UVMyW29XSm5KMmdAJD5HJHZFKGcuYDpXT34jMEBnWi9dfk5xVFVve0dMM09N''@;'; put 'put ''VUBVLlJvI0hodUhqJTs6Mm1NQEpXSWxpcEtkRF9ZN2JULi9dbCVLbz8iX0lMSGAyczZLU2hkL0dvSUI7e3tvRmo3VT8mUTxkX3pyblYyTHchZTNoXnJ+TWhzVW1Me0xnXml1SHY5YEhgLig3dzcoOWZgciVLK21EVlVdWXleaFV6LE5TWChsOTVMTj9nKTd9OjA1IW9yPVIuWTNpM0U1ZDo5Vj8m''@;'; put 'put ''Si80RmFnVT1HTGdQXV4yL0ErcCh4dkRPOUcpLFlPWSM5R2slZ2ZRdHk4WiV9RDltPDVue1pWSHs5K11wT354ZXw7cjkzSHN6IXc2a2BqQmh7Tjg8NENnKXYxKnhyaUAmUFA5V0JoeDpwVj8oUFkoQjtYRTQoQ0s/NnJwRns0QGAmSz1YISgsZjAjb3tvTmVGOmFAOzJlfVJJWHs/MmpeUlN8aTNa''@;'; put 'put ''O3hZWTJGcU56bHxZTXRJYUVyVWtDYS8wRXk0d1Q5QCtxaiVBPGxDYV9Vb0JeSXReKShCR2Vhcj1RRDQ/MCR9d2lgL1dwYj9VUWddMjYicDMrbE5oMEc9dyNzNnMjRncxXnNfRzFdfm5heSlYMyM1dEVuOjhBKkJjczJVNnBvQGY/cnklOnw0S2l1OkVvVSlDXTBbb09iSlFpfH08PjJiTF1NX2RQ''@;'; put 'put ''MH4+VD85SXg/bU9xY2d0WXRqPjhneDApYTlGPjBpRCNCX0FxZVhrPFs9YStVPEojU0pxWnA2fjVFPXchdmF9WEl4WERWUXU1c1FfUyEsdEw8MmM+WUFaeCFJPVYmN0F7MV1qV1ZZZXlSMWhZcz5OI0lbUH5jMkZddyVdTzZnP091bC96anp8eiN7TlE3fXU+VCM4bDU3InF6NWxhcmNnPn09K0Ml''@;'; put 'put ''P3x6I3tGUCYvOEZoXWpqRTNBU2tYKzZDVmo6UipdVzA/dzwxMGV2OzBSbD4pczU4fkB5RVFfekE6ajUwYmRyaDEvdyIrNUIiW05fdzJEa0BUK3B3TiZfWEA7Q2J+Y3NgMkRaJl89KU9CTFZUTDtDT1VeRW5XS315ZDt9V0Bqd0hKXkUvJGZzaXojfVZqYmNofTp8fHM+ZGBHK300QzM/QjZrbzFt''@;'; put 'put ''fitKJW4xMD9laUdfVSUrYUQoSTMqenwyKD96aGV3PCokYm19d2ZhTjEuY35+YTQzd1VTVkh7Yn1gSilSNU0+ITtFeipNe11fOHFYNzV0c1IhJGB6cCV0KG9eS3VMfkt0Ji5hTzB+Qjt3NkolaV84I2J3YTk+aj8lJWVMfkBYM0NnWkx+eTUhb3pdI2g2On5QcyVjKz08TENoOVlsPlVhSFZ9X2RQ''@;'; put 'put ''KU0wLHNZNGN1dTUufjo6SVMyQHx+ZmxFSnMlbjE9PGJDaDlrJVV5JHlVfXQicVFENVV9OnZxUTJ3STJvQHtzSDdFYmVdXU9ve0diaGtlMC5+YzRRU11bUkxJNyxpSDcuWmI5fWwlcHVlMH41VzR2NltSTHQ3fEorSnA+PjxkMENeUnZMO0tGeXVEZFpYd0l4QFcyJnJlXXBOaktYWX46ciUrOzZS''@;'; put 'put ''fT4lO1B9Kl90QmlyfHIoZ2lJMWttS1lpMiQzQ15AWFdmMHh2UVA8XXtuNChxWHx+R04kXk1yVXkvcyJ+WGgiaE5UTCRIeEBNdGpgM2hAbDNEdkVuQW9GZSxKIyFWMDhJPWl7aCMkc1Q3L0FkaXpAVSNWPEwpW0JqOUoqY0xKKSNpdDA+aVsiWT5tIm5KSSNBJiVFRUB5SjFFUS9kY3NVK09eM3x0''@;'; put 'put ''cHokMiMpQGBHO2lAaDlgXjY6OEdAQ106MlZ4OS8heDA/NnF4PVJQYiolWiNKaSZkM1BDUTdfSjR8dyFFWFMweEtrbSVnMVtCO2NQZWJSbWtfZXc5NnkxS09XdzltbURsNkwoNWNMLEBIJjVCW1JRXmI0PF5dT3FEaj5gSF8kfjxWXXVPQE5Ae355M24mJTMpYD98Jl9SK2N7PFZDZWkzbko9T1Fx''@;'; put 'put ''YSRfN2NIdXM0OWA2UkhwZzdvVXwmNyU3VWxbLF8vSD9GQ1RifmlBU05hQVNCMn1UeVRfMiVGMD4oSjVMZ0R2Wj10flFGayFNbVZXeW5sPUNfNn4ldEtZUmN3fW9fNXRdPzEkVVNETEFQWyQ2TChyUXxaPXRUKm5zdyJIKXQ1Tj08ZXxpUlB2LzcwRVMuOi41d0lEfGlTZ1pReytkNU8rX25XOH1G''@;'; put 'put ''YzdyTkBzO0gvfU4uTENvfDpPYS46SSN2L1p7QXNtamJLRSgqVXFHdmlhc2oxZG1saWtbc3VHIXA8S0tHRiNSQjJQc1tdOCNYZ315VjQ2PmZWZXVjOyN2WVdvM1c3PCtCKCZ2TD0uUzozdGs+Z285eWtMSjhwJiU5am9QRjJfL252Sjk/XT9lRVlsKEIjPHgkeDpTPDVTbHZ4LGpNLy57djx7ZDk4''@;'; put 'put ''KVZiVGdHTjN0O04rcE0zfHFeOVtYajFALnJxTHg2ekBITkdbQjFWMlJXbix6bzszV09gbUNiP1pGPyM0fXNEZG1nV0oqNDdDNGtXPjZFYj1FSTgxNTNFfWouXnx8d2lfNFEvQ2Z+UkdNKVJqQ2tRU31+PyYjXSt8ZldMaUZPTXQjPHFeTV9hVmlbS0M6cFg3WCM+YUBCVml4U0tfYXlhPHZHTG8m''@;'; put 'put ''bWRDaHpVd1p7bXJhNFF9KF1oKTBlUTlse31uRC41XXdHS1s6JVtyUXE+RjY5cTlYKEIvJGVaJFRZLm5fS1A5QC8zT2ZWajdxfClTWWEpbFBhI0hpPzp5aSVkUTFgOH4rcGtHdk0xQ3p7KmNNMmElLjspUiZGKzQuOG9SR0Y0X0UlOE47WEdfZ0c7JkhbXWloeHdpcW59IWEjVE0wak4qUEduUDBi''@;'; put 'put ''fl4/amVefEVvYCkoOXxFeSJTcGc0M1M+fltAbiJtZHUmLCg5Q09CK3BMLHNuOXAiNG8sM1BdIn4xWTsoYm9zUUgyVGJSSGJzSkdWKl5zfD4zXk5Vb3Zwdzl7R0tzV1tXLF81aXJ3OUojRD9hLlM4X1EkInVubEtsM2BxJVdGMUtUMStEKTZ4PiRsTENIIkJCR3pebDp+PT9hMz5vVjtZbXlKLjEy''@;'; put 'put ''clNuTn1oR0B1b0ZhKExoQjxSSiYwWVM+ZCt+IS89fDxydzZMcWFBfS5AOk9CfDtuZiVQQVtAUz8wZH1gKGZHWlEicTZuIzssUHFmaklUKi98VldnLCN9eW52fX0lbUQ9VClAbkBMJHAmeEFCI0gocmNiS0l8ezRBVzx9WjhyNkwwcFdFbUYyL2RpN3RGNHwlYzRsUF1DTmA4NlBkMV50QlRoaCVL''@;'; put 'put ''fl9KKGkjWnl8ZG1TdHEoX2h3byg8Ok1MdU03SjckK3gqe3Y4Sjx7citnay9gJERpUWg2VEJwRVNkN2IzViNjLlZOfmRwRkcwSV8sJjFyVF8sJkt8I0JOPnlyVH4mNHIwYjRqYWJULDlYU0g4O0ZxdT50OVNWQyYyRjgybCM/fX0peEE5TFhjKGFzOXh+fXdGLjEmSWl9PlohcHROXjwobytPaGhE''@;'; put 'put ''azdsJC9oOS5zYlgocDxPe1spYyVFLjlJfnNaTG5ralhLZ2w8Q0lFOW0rbCxrbnlvWE0kUXgzfUtzNDcrPyYjRU9UcDAxTVddbWVKTWRaaEpSaGgrOXtsfCN9bF4wRnwzfilsbjV3NnpgVzFKfHIibT1WJjdGUnR8dDQ0bWA7bkQ2I0R+PyhKanRhQnA4KmFiQjt7R2xQPS5xIlgvR200USJBQ3ly''@;'; put 'put ''WGRXdnBaK3ZtO1UvOTt4Tl55KGtdM3Q9RXt2JmllKTsxLD5CUiFrNSs5TXFOOi9nOW1vPSJCRi4/YXBzU3NQfGo/WSUvSk1pRUd3fXRqXiN4YHZgZmNzfWs+SVosTzE3cWE1cSg+fS9mejtWRz5rej86PnE5T2giW11fbUcoaEtOV0NMZi5HQFExdzk1NmhCQ0NOIlI0XzslViN2YXZMT2Izb3tK''@;'; put 'put ''KFpZfWRGSz5kKHNjR3suQDgmOihIbzdvVUhLPmQvYUFmI2Y2QGZvbGRBY2EjQjdQMWFzai4/OHkqaEJZI285SSN7WmU3Umt+cyFkfHMhYFE7OWEqVjF9W2FVcCN+eVZWVVQrIXJGLl1wJGhuMCQ9Ri59PzkqRjckSCZ5bmBSJjtyQldBU25AP1k6eHpsb2ghI1VlWlYoLzRsUktPRjUzUktIOjdZ''@;'; put 'put ''TVQxYTVqU18qdnZbaCo9Kih6dnlSMXk3aDtvc0dKJXB8eDgkOjNqZCN4VX5KdkNQKzI6OkFWa2RyfkAzcGRCIiUsc1J3ZiJKTD5UTF53W209UCxAJSoiK3smXyoiK3hbXUdbaGA3eyh9c1o9M1RsRW0vZSRQM0s4cnhCKFhuUEo3PDIvMDBlRDpiYXdrKl98djhKPGhWelNwOkJ7MzcocU1dcXVL''@;'; put 'put ''O1NpNm10Un5ZZj12Kj8qcigqdil4TnxpLjgsNTpTKldTWkp4dUpbVTpoYGRoU2JNRElTXlBXLFUsOFNyY29YSWo5fHxTPWJLX1Y6R1ExNmFrNSlNc240fl90RURlY1pDQDgoLyJkck9EY0Zybm5sfThsVW1gJkcmbipQVXMkdG19QkxCMmA8XmsqJCpsfVo6JlRFO08xd1JPbWdvUSReJT5hMkAr''@;'; put 'put ''N2ZLV24/LiR5dEVXNF86aCVtMEc9MlEmUFNTaXN9KkJiN0B7bWQ3P2E5Zyp6dEhfZiJZPSFEOkJxImkkNlJvRXlHXSElW2Q5Uy5WTzpvbTNNVW9BWmBtdjhfVXVrY1BQVXJER0dJKz92YGpWcnZWPS4qektpcU41Ym86XkxYcUVmXVNPXXosfHFCQXw4OmorS1ZTU2YpSTw9Tys0THR5OlMvb10h''@;'; put 'put ''bCJoMH07cGtkdCpXeGRQNGtiX1Eyc28/RmdfLDQqJCg+bDg0ZX1INn09Tml1YiReL0hHbWAidns+Yjg9YyxqPld+NEFbRVolSFNqNyVjcHp9JWpba3M9PG5mX1ZudUlhcyJwaEhyeCRxcD9VWzREeDMmL0RzQjczLm4oUz11RUpIZ3lrRCJBZz58fF11TClUMTxCeld2UW0oKnVefnpdQXFOZUIy''@;'; put 'put ''WmdvO2dDdyl5IXFmUHNTYEJwbn5zSF9EYUg1LyUsdkdON119Pl4+US8sOF58dEEmQj5eZUs+eXVAX2g0MT4ibUhnWThDWDk8KklJfVMjTiVwYkpbWn5WTXp9d187MndvUlplWTZ3eUA6LGlHbGEyPm1RYXR9K1AzVH4hajVGRWVoa2hlbGRCP2xsXWtjdXZWN1RGVmBJIis9fjlZO1Yze0tHM0w3''@;'; put 'put ''PSRoeiI/fitWQ0Z7REd6K1RhVl9AX0JhYG0sZkQ1QHcjcWh+PWNZQzxqb3FRfj1sKjt7eDQmc2UkSSN0MktIYV9COy9PYWJhI2NbIl9beSR2dmFkUmJsRy5naDt1bFc5YTtgPj94RSldVDFJUGxnO1lnOGBnPUo1SElkW350SHxCVzllYSF+RVA8SUd0N2BJQ3xGayFRVnU4ISlyOTRxbCQyKlQ7''@;'; put 'put ''eEY6R0RRfnV1TEtvPHpjKixZXjRPNXJkZmVkdV51dl9KOzJtOkc0RkpuQ3o5XmhhL3YsWEhkIj4yYDQvOVhlWD5Ucj1HKW5FWWh1VGB5ald6fXtQdmo9alRCdGpteyV5SFcye3Jgaz4/KTE7WyE7Zy9dTnNmfVI0aTh9Xno2Pzp5XjtVWDFicy5EcVpwNi40a3p6ZU9idlNIcG8xQi5dZV1+N3ty''@;'; put 'put ''NDR5WnlvcGM6ZGV3fXZCX0ZuK25SK1c4fmZCSk9PNm46KEBiI1BlOitGJms+VjYvRj53SU1fczZpP2VCOSZpTHNLZlhTZEZYak0vfThbViUhKWooNEFzK35Zb3BXRDRwLEl4cHE5PDhneyFmOSN0KUomejJdU1R2SmhmbGMhIWVocntqNWl8cn5hKyYuZ01RczhXLzJZfnQ8ZzVoeD5abFtbU1Bf''@;'; put 'put ''T2h9YjJZXmsmUClqRWw4R09BfDZFLmAmd1RtIyIwYSNiL294TWZaTnZMaWo3KXZgdHkkT0o9ej9MWlUsQiZabFVzW2FOVlJZQiNrK09SZWQxNl5xOG9kaT1gfV1kV0NEQmt+RGwrfl5lJG5mUl9ha29NJmNxckFTaTdtMTRXdXhpWlpSZjJXSD4wRnwlaUw2ajklZXB8UUtULF1IMU9TdHROL11p''@;'; put 'put ''VFMha2poVU0lMjtTcjRnIW5LR2gkSDNQOmAzUUI6WD9venY4MnhwUkIlKiN7V1VNIWZtK09NL2RYJn4/IXZTMz9JS0wkcDxBcVtTSUYzamxedDxJU0lkPCs5UFFqSkw4Q1VAUTNZXUJXdjpaSzZZNUhMJEVLZj1YQi97MldyaEdbdTw9TlhOMEtDMVNyNC9bWTttQkdic3FGMHxTJnFbN3pQaW50''@;'; put 'put ''PCN2Q00yQX5xLzxUVmg7PDh2LF04SEErb3heK3E7KGpNKjNIREA7Un4yOG1YZiw4e3dTKF14cEBtenZAfnpvXT1Yc055Lmd2e1Z5b2tyZ25EMXxvTSwyVWUpOGlMNno9SVBNR2Z0RytWbTB3N3ZAL151PyxxWURbRjVTJSlCWyRvPFllOUhvcE5PSVBrajhmKFA5cXpzRWYrPnY9MipvKSFpb2Zg''@;'; put 'put ''NV1LPGNgQlR8WjFQTTBLRyFxTXd5VG0+YFFEQ0hOPUpPRyY/bWRpOyFBOS9gTDJbYFImL0kkZGxlVkR2PGd2N2p0ZlV0fU05YGdeLDh4fnhxa3lBS3RrQX1MaWc+aW49NGJXPWxyOUpIT344OEx8MnIlWCw7KGtzXzovLlN3c2kjI0U2aC92NTduQmdDSlIwXSoveXJCOG1hTzg9bU5iSiosazph''@;'; put 'put ''aDk0KjNlPzNDUzw0dTFOTTUvbFZjNHo8QipydzdSeG96W256bjRATV1WS05NS3ZIWV9hd3dXeHNBa0FTUG9FZywofVcmVlM/X1k9aiV3Vip0MW93bTpWXVhTWT4sM2JKQT98KTZ1aCR0KmN1O1NWfGdXYlk9dFppaXN6MVcoX1BzflZXRUo3IUAzI2cucCw4XiwvcDI/UEk+czJ3fn46aWouYzBE''@;'; put 'put ''SX5tYnhtV0Y0Rz1YQ1V0K3Q8WjVuXiVAakxBWF0rYl9JPWloeG87K3ZYYTpIWTBEenlpSCUqIkx+R1hUUFBHR0diM0cwO08qSDQ2T2ElUyN1dFVWJFYzTSZBWTdiNmxpIiU3L05MbGxVZitvNFIsWSxObE45ezJBNl1IUyhsc0FsbjpjITZ2K3AlOWUjKVhMTElFaHhVcGRWTzNSaStRVjIqZURI''@;'; put 'put ''d01dODFCalosVFpGWkI1Qy9MQHwmTkBjJVo5dFltVnE/ZF9yJmRwN0hgO2MkYCk3MT8pNWpbITV1fW00bls2dHhMK0wmSiQuUUI1VSNWSDRoTHpFeH5nSTlFXk5LfXh7LHwuKDUrc1ohRnQ6aXsvUVZfK09VL2JJc11LYi94Ik9xbF9lSmBKYEk1YXcuR2tzfkVnVStlYEVaLlY0eSpWNE12cDN0''@;'; put 'put ''angjckclfXZ4Sy4xL1BIbWQqIUVhWndEYVYhPVNhIVBMfTQqS2NeUlopfnNWNGZiKyJ2NDlwT0g2InAsbVQzVDBGL2EmVyF4eWJRNihvfiEoLih1YVY1ZSVoOExoKWk5aShzMkJZX0EmX28yRmV6YzRkPXcjbnBsMyIkTGJeZmxaeGBzfWI0WDg9aS9qbCV3bXszclU8OzI+W2ZdejY+YjpFQCxV''@;'; put 'put ''SWA8Vno1d35qS3p8azMuXXpyXXUlYD18Ml4+NzJ1KHZGcl0pcipLTGhLKDQqX3Bwc1c5VFddeH1za0g1dHlNVH0uWyV4Ly44aHkhd3JVVl0zajAhZSloXXc1N1ZQXjIyI2RhX3Z7a0d4YXNpS0gxOTldLl9HYyZMNmcmZmdkXmw9Y05ZKX47LiI3b1U5Yj9YYVgidVA7Y14wRGcvKUpYV294fWIh''@;'; put 'put ''Izo2STJeJV5QSGpJSG10IUBodV58ayFUXz0qWXdhb2Z5K3A5YyFAY1o4NztsfFZGI3ljfHh3e2RoTV9TaVAhK0Q0Q1ZhUzhsd1lDc31uNSl3djheb0VLWj08SiQrTCYhcFVxaXcjQXRqUVc9OnkwYiNXYjMxQmtXVEt7aXh8UFRNM3JBMUZdYUtiPHp5Plt4eylmfH00MWVgalM2MyVfaFtbKVBO''@;'; put 'put ''JX5uVTdBYUZhJlU+fnFVXVtWOU12WihgdyFtVU9afUhZZnhjcEBiSVVDJlUyTG1MaFAvXz18I19QIyZBe353fUYvKyNEb3RKeUNHSSJvb205InZDaFtmcTQiJCNKeShOSll0RHl8VnleLnEvMkxrcjJxVnQrejFaNklwR3ZjPmlVd3pfcFspVlZsOV8zPmw4PEtSLyRbVWRpT3g6TWM3YkJjODc5''@;'; put 'put ''diY6THt0NVpUSzc9Y11COCNfZXM0en5+RV9fRThAdzM4Z2VTZihXTF1IZXUvMSE9bkt9RThzd01qcClrQXkheDcsQkhqI2lOb3khbGZIQnkhXjE4Uzc4cHpOW0hlRUhyP0hlJkYkS3YwR3pSK0B1Sl5IamBBXkY2UGxMYVl4UjlxQHttZHg/c2Z1L3xdT3llR10saTR5IntqeGNJQHNmOEguOXNs''@;'; put 'put ''PUpPKzhAVHFpZXVAcnAsWiYiZGVERzFCLDFfVHB9JTd3cUNlbUFSY2hnYXkuRGAkaTN8Qi98Y19Zc0s6IUx5fEx7fXN6cl0pUjcpfkhfPFZIVktgSmAlQSwlW2IyeXR8Y19wcDFgRCRUcX00WFpVYlp8Zk45cCNjSnhLVlAiZCo7NX0qUjBrXSEkQkpZQmNBIl4jVHM4JChKbTJ3Tn5PQ082U3kq''@;'; put 'put ''b21xLDEoZTgmfjVxeT8uZ34rdmRneV8kYEhgPHFwZHRGeE8jYFBUJkVLIX5nSzVtcFdUbztzSGxIaXdVcCRmbl1PRWQ0KztHY290aW9rS3hseF5fWzU0biZfT3k1fChabEU3WTdONH10U31GUzcjblZUL3FxSX5dV1MiWyN3UWJUNGJvLCxgdl1RaVB1Z31DPXd7O3xka35hN2Y3Vk1MMzh+YV1x''@;'; put 'put ''PDNEMWJ8M1pic0ZkQ315QyU9K2c7bFkjKEhFbGU1YCYmOGQhUUIqOj5He3QxMXY4M3pJelFjP3Y3QFZjayx8SiFAJkY0RCgoRW5NMCZMe1hJTTBqZnpYd145MDB5IiR5XWR0KkBKW0J7e1ksRTM4MEJjdEkuaHJIaGUrQ1Y/Y2FnUWAkKlciQlZQTFAwTzBVTmM0XnxPcyVUdF4kU3RYIipMe08q''@;'; put 'put ''P1d3Yj8kIk0lT0EsbXkoTjFZOSxqfTRZTUhPVVpMLFRHcCVaKTkzWk40ZTV2YEp0KldGJT09ZGxWRkU7N21sc3pwSlJkUlszekFCLndiQWoqKWpTZ3ZAeDNxMkBvRUJee2JlTVJnISxqQTs6ZzhDbkBKSWxUYil5aCtmQXhiMWROM1FCNDhedlZQaVF1KGxqUkdAIjJab0lheTF4LD4jOjZeZjx3''@;'; put 'put ''fm8mWVAqOEYyP3FOMXIlYnkxQGxOUS9tM1soSXF1IkRsZHc0MVtxb1Q5VX0+enpjVTF6dXhSVyY1em5xfDJaQj18aU5lXVpsWUt1Mz5iMmxwMFsuQH5yXXpRYGRAbykwclU+X1JCb0YrRWUrZjphfk9CcT1QVlRfNnVzfj43TW1xXyI0MltGWk9ib2tLLyIkRXJQZCgkQGpub0pbVEw0Qjw6dXIq''@;'; put 'put ''Y1hIVn1IQE8lT2AyZ3JhY0gmY0VKZWxfSCU3TVo/NisvJnlfKkxfY0owPyZjR19jSlElKXImZT18L1AjRzluaSRiQzd+SFhrJFRDXXVEaik1VWRrTXI9X1dNVzdZODJ4cU0vN0hmLkw8RncyImkvWiZxX1c0M083SnhxTS9YelBrTF97TCJwTUt1NiJOWVMpRShEZVspYDNddVUjViYzITA7aElk''@;'; put 'put ''bl1gNXdKMFFVKCltKks5KCNbanNnRnhwWTN4eXkjYXovTGlULGB3aSQiaXg9MW5PZ3tnbD5UPlUkOjoyZW9hXlhEOWtKMjdCNmJVYl0kKXI1Tkheb216TVAvQlZ3KTZecDw9V2xvSSVPOUZZTiMmJTpAQz4zUzYsWTpRc3k6QnVQJVhQdH40TXo0OzMsZkRoVHVtVUZVX1k5TV48Jk1FSjd4eWZv''@;'; put 'put ''OlcpdzY1VW8sU1kvVlV8WUEzbSU/TXxafklCcT0/VlVFYFJjSj56eT1TODxQP1c8Vzd+TmJTPUpCMGgyMHF2OW1qYjI/eGZYK2QrJT40MFpTbkxaX2gqY181QEd+cWx2NSN8I2I3T2Zsb1l0N29mMkxmbm9LTXh9XlolKTh8USR6fVRZRytGK1s4ZDRVV2RTdXpkWVJnKXRgVjRqQ0J3OCY8VVdo''@;'; put 'put ''MWpMTGxhTyEsUk49bjlQIWEsejxHTToyVGVfXzFtMz5lKmNfaVJtfVk9SSMuIkdSU2dlfXdAOG18KzBtdW1NfG8+TXxgW3J7YDUlSixwezE8XTQxZWIpPksvT18kaHk1Z0pRZChvUFYjfkVMRUpjVX4pSit4eFMlKTYjR05tSU9lZVc3b2tEUXE1TmQyL0lBQUE4TUBAbkFVRVFPN24mImJYL1lN''@;'; put 'put ''SWEyPHJESCpodU9mM2AqMyxFTkpvNUQlSWZNaUFBQUFBQUEkQSQkKW9OdHFQRGRzYTF+VEtpV1kpcnIzeEBxQkEydFReUiRjLFJocWNXR05Lbmd6bEFIN2FKYUVRX1dCcyVJSU9QeFpWfDMlYzlvWntPLkt6OzsrJUlHO2F4aDpTPTtuJkcyNlpoO0U1fjw1M1R6e1EwcS5VPEJrJkVOcTNYPDNQ''@;'; put 'put ''YVs6JWBtLmRgR1ApJmIqQj9rZCU1XzIld308W1JeVjNzWT9PPFQ5cTEvanp+SEQzOnk6IT80OU53c0U2ZEk7Kj86YjYpN3t0N1slOnF5UV1FVG8qXjdLcl0rdWxncl09d0Nqak9acmMpQ1NwcjAudFc8PTZ+ZFp6M0A8fSlgVUtsYSJ9dikmTWR0WEpESiIxQnksZmVFTVh4UTFTUjsvan4zKXVu''@;'; put 'put ''I11yMnhwaH1zRS5Jai5IQ18ybk88dk1teCZUMmJ3RGhvKT1wTCZeJmQpb1diezg2UUtFOysxOUBxdyNCRDtbVj1OXWM2b1RKd0hKRmROOkN4LmV1b2woI1NlbCROeV1FTFpKPiNMeUI9NG0hUnBdY3coOzRCR2Z8Lnp3NSt6fWYkXj9lMCV+X3RZRXRdMUNKSyw7QmI9aThLTU5aSj1gRldZYnoj''@;'; put 'put ''fDQkYDtPKjA9LEd+e15TRjkhdCEiXiUyUX40NkR9JSRQYio6REo+Tzo1SVoiOzchO3hzdVo0Qmk+QCFYeEI/IWh2bCUreSM5SkVbeF8zTDA3aE98V140Lk0vbkQhekN8TikvTH1Ib2FXOS5hKGw7e0xSOCRALkZ9fCEvcUZkeiUlPHlAOFpwUi98dSFAYkU9UG1LPV9DcSNoZnNZPk1iV3tWM21C''@;'; put 'put ''cEc9SE5LO2dLQTFFM2lLXUo7NE55dXcyb244YzZVO3ZbM3ckUUBMelUkVEtqX0kxYE0mLjUiPmsiZX5sMCVvY1swKG8jZmZ+Nk9iYXFvQS8rJkxTOUJyZTM6LihDYmIsMkRCKypLVn09dEdldHFXRzBETG5bR0NBKCo2SyJnKVNbVU9GY1kwMXc4ekVvTjVDbGMpMWZnW2spL2hgMCQ/RHB0I2lM''@;'; put 'put ''ZyEiWjRXY044Sl9gWz1DXSFlO3dybXQrWncvQnFFQDRVM1szJWo9bnRRcWR4ejtpX3w6cCNiJn51R25XKlo5MDB5WF81LFcsRmNHZ2BuQzMhITkoe0RsYjVqe2Ricj5heFksdWYoIn1UTXNLO0dCNlkqazRpYyJmVTFtWV5bXyR9USkzKik6XlMkXygzIyxgYDRAe04lWU9KbyIkKCt0L1I9cyM/''@;'; put 'put ''SU02WT5vUEt7WFEpTUtgMTw5U240MT8oRTN1ZyI4eTwxa1BvRitBWjNLe1YhTTNdNiJocz07WVtiI3EqbGdVckJ2REREb085NDRRS0ZFTUguJWozX3pFMTNAcGdHQThGSGVKRytuIU84KGxnR2FZI04uMHx+ZmV0OldVayV6T0soQS4pQkp3MF1BVz5sK3tfNjRaZSF6R3UxJDVYenM1VEMxLlEo''@;'; put 'put ''VDFGPDJkLnoudDddYi5QV2dPWEAiOVp0I0Jebis4aT84aCklQEN+QTprZzBGb085JSZlKExjayxtWUVfXXBIYm0wdzpFUEYsZFhQNTB4RzJ3ek9senlWb3c0RmRATy5ZKjZ7QW5zYm1pWEA2Yl9dZExVdFYxXn5WOHh2JWxqNmc5aUh+S0NvSSV4LyZSS2ZNc0NuRT9iO3JvYSImanltVDs6MER5''@;'; put 'put ''VTcibTRCSUxHPyg2b2VZMzshSmA4cVFZIlNDOnBJcTtOX19MVEFJQWord11OTkp4ZmVhVm9NWyFwU0shTz5zYUYwL1NPbCVTMj0+JCFjI2V9Vi5bNWNASkNxL2Q0UkNqMkBfQURMQzR8QT1ZS1NESl9YUWFJcGU9cW5hcWBVZyQpN357WWpndjIpLnsrQl9EQGwsRl5LfilaQ3ojLiF0b20wYkgy''@;'; put 'put ''dEsxY0d6SzlifnFYXV88ZDh2OTtXZDk4W3w+Y046RkI1cG14eGRTemdUPFVLYmF2KkNEKVZyREJNMUt3NExDY0dnJC9jVGw/MVk2RiVxQ0Z8UTNYMW5pXyVnPlp+d3FwRno4d1A5UUdBRzdNUUVabT8sL149SHU8dlJJPjZuKTJ9S35XYFs+MEMqYU5wbz5BazFvVDZEVyU/cyI1cF9mfXs/YVE0''@;'; put 'put ''Y3VKejNXYEhAWGtsVkpQOzMlY0omX1E6NFpCKmNeZ0ZrInZod1B+LyU5NXVxVmp9WHI0S0JrfHVoaiVJNjRtQmhjKkZnUzBKKmI2TjFAVUAvZmN2IkUiR1M7bTcmaFdlNV5HPk9nSSkzLFdhUmB7MW5wOChYQGBKUSh9dlZGTlpLeF9Ya2gubGw0KXYoS3F1K19uZi5TU3cjZCs6QCsqUHtlXUZS''@;'; put 'put ''eTBaQCJQU3ArfmtnZ0RyZS90TmFDSXltfj9FIi9KPlVocWV1STBFZFZKVVUpMFtWcnRgcWp2TkExdFtIaV0qJDI2PztFVUVFT3xLS0dzYGxWe0l7bUxSSV48TUl5WyNAWlJvPEE0VEQ7OmN6STNKcnQpYVBVN00oKFsiYktbW0hSXmojU2RjbFVKfjlmcExzI25LfkFxd2hDY016SH1rLDExNSNb''@;'; put 'put ''SV5IO2V0IVN4W19zTzhLSW1tciE2ZGM+czVZO3JNMENyQU1lKF5NQnFbYCY1RF0/JC4lelh+UGZoXTxZcUJhQj0xRE0mQ2x+V303MnI7SEVpTzAvKWUqJj9DJjFdS0l1bW4lUXFte1QueGk9UjdAd040ImcpYUdEUEJie2JXM2FKYTwjKGJ+Ukkwdkt6MDs6T2peSnRFRlVvWTZafWAoSHdYK05z''@;'; put 'put ''ZFoyMmhoQ31zYzYuYHlLVnZaaXlDSiFFMCQldll2cmg/WSUvJlkuc1NPeGR9fEJeX2ApYGVPVjteZXpxRGEmUmoiWk1nNGVCe35HZztCXmddWnJ8TSs7diZMZSZYOzQofVQsQlduTiV3VDYrP09fL1QjV3siRVtVX3NyU2oqKE5wdz5jbFs+ZVtKKjFiO25jRj1EaGMwPExPb2VxY3ZtMFdbVlsh''@;'; put 'put ''O3Q/fUdFQDc1TnRxMEFyVU5bJGcwPTJmNjR5Iyhsa1ZjK1NvTi9COVdwYSRtaDZXUmR1QCFpc1pPNjNfYiVwTnkqO3M5eylhQGR+Z1JpZXs4YmtANiwhJEhKSilhazNHWFpNNztra245UUFbZ2F4aGUxUyRzMGJTbSVVODZyPT07M0RZcz5BWmQiOkU1MmQoMk9NO2hsbyUuVUByMUhMe0haT2hR''@;'; put 'put ''QUJPdFoyfm84TDB9YDl3MTE4VU1kT2tTXUxIb1J3Oz5ORi9TJHcyMXc9VlEoPjMuI0B9L3IpRCV5QE1XYE9oejQqbG54TDZXKD1RJm5xOThrZzh+JndSaWpmRmopRiZDSmg+VjJLbmlOMSN2UnI5aXMqWGQ/JmBTbGwxaSN2OnFUUH4wfExJSzg+NytgM3Rxe31hZE1mSzUyeUYrLHwuRmdGYm9I''@;'; put 'put ''ZWhEVl9pW3tnREU0L3c8bTdUJlo/Ykl9UmNFR2dwTF05I2QsNnJ+XlNoI10jWEg6VzpOVkZQLF1CMTtlZ3R9fW5Ob1RgbWI8I2xeeUJ0OSwpMzw2YXZzWGowPEt4NWxGSCZQVj8hMm8ubDwkfTg7LjFHTFQ9SyI3b1Z9UWJxJktvRF93OGwwbFtxdWZDQlEkaW1gNDYoK1YpV2xFRlFAOW1AIV8h''@;'; put 'put ''MHJJaVRkc2M2flJ9RDczTSpBY3czS1dUREFeWmNKdixYblVDWEdAZ0x1MyUsPHNDem14a0l5Y2I5fm9MeG4ySEBSQk08ZVtYRmA7Mls1UCsrW2VBc2Y8W31CZiVvdWkzOjchd21lNVVVJFVvcjJMKDEjXjNbRm1xL1suRSVjdUF0fCVtXnAsR319InhRKlNjZlo1d0c6SnNkYF03d3Muc0crPnw2''@;'; put 'put ''a1AlJnNOPCRWeSx6SS9hayEjaGJLcVQ5NTM4ST9LSjlmIk8+ISp6U2o/OSo1eGUuQzZebW5JO01EQExmS3NZVH09Uih+ZCVUNkBRVE0uSkY8Jiw3a3ZZeGRSRGwpKGkxb0JFWF4jSnh0aFVPSyROMjJCa2hXZ3g1NGROKVQ6e2M7IitFYW9ZZHBqeVdfMD02RjQ9JT5uSGslZU9lK2RlZHs6Qzg0''@;'; put 'put ''d0IlfWM5X11ofmZQfUgkNTthRTsxXlsyeDEkMSw7eFd5YmZzXTBCV29zXUkvdVlKU0M/VHtpKTB3Y218JjdETCtnblNaJmMhUWo4PXxFYkRRbHVzY34iKkl6dW0+ck5zQiJwVTBfRUdsOWAzZmJPRSt+UFlOSlJXVFs4eGBOa2Y+TDtbMG9JTnd0ZnwqPnY3VDdXOXY+WmphPVQ3Z3ZzN3BVUl5r''@;'; put 'put ''XnZhKXAjSm9aW0prdjRfMFpafGBuPz81WiIxSC58eW1hTCE0SFM4JEZqQUsma05mfXVuQ3FaOzV7LFtyK09AJmM6OyJ8djlpPC95WV47dy9qNDFQdV9LaWVHXnsrNFcuKytgQnYzUGB1RCVAcntJIzBQUCxFYFdrdDZhOixdX1NGK0V2ITxXLlFSIklDWHIscjZHQX1lWncmWlROQD1ha040UThJ''@;'; put 'put ''SlhWcFomfSkrWT1DVltqSUwmT2w3RD1OfXZpTUN3UHRIemRGSWdBUFZuc2FgeCVTa0RUfU5PO3d0JSxnNyU7JWlIVEk/KD1WdDlAO3VHayQ/NEk0WS8lQjBnO0hjJT9pKFp1ZzZ0IXd8TFNrV3coNVhCQSJdLlN4R095dytuNlgwdzo6UE88cDtFX342KT4qMTM1SDNNd34kNFp9XWZAZ2BeV3ZP''@;'; put 'put ''JkF2OHRub2YhbkU4Z11XP0JbbzxObWciRSF0aDdJdmQ5KnNOQH4yaFdDNkVnPz1SWG1FUUBnWTImZ0g9RSw1byZ0Nl1IUjpxNGxZMmd4bS5MbkAmPilaW2pzXVlbRiFST1U1bW1WMzNpY2Y+aXpMS0YzPGVmdiY8WE09bTZyJiJCWlpCXjZabUdHeUA2OXN9c0srNG1iaGprU0tsPzE9alg6eWZu''@;'; put 'put ''QlMpXi9KKiRlST9FKmk+I2o4c3hqZlAwZm5PUWFqNERNMDMkPE8xM0J8RTpMbCQ7Nj1TQCVwU1hwQXM8PHdOJGd1ZVcmam5ZQiM6ZSYmV210fCFCJXxgfF5OMk4uS3lrW1NCTTkvX3xMSXsxPk5xZUR6XTd6RzE2cyMvU2IoK3hKYiN9W1BwKU52cVY3Qig5N1tqMWJbQjNmLks8N3l0PzVsTChP''@;'; put 'put ''PUEzYEhyT08yI1VtV34sfERxT1MqNmZeX1lWbVc1Nz5uTlR3JClrP2F3cUVoY3JdUHU4RUNddEtsWGI8OEFXVCxQYDFQcEJLPENZPzsiLCJqPyUyRV5EOi9OI1RSbFd3Zy44P0hEXz5NIj00MVVqLGFFa2IuPmprU2hZV2x9NEFLI2RVO25DX2VsbjJIU3pTQ1szPWdaTzU5TUh5MCs+UWk3WkZS''@;'; put 'put ''P191TXYuMmhASXghQlt3Z0d0PzB9Ym0kUEx+a3Jnd2clanp2VHo9Ym5iNFhZbVVbXTAjT1I4alYjeHRab1opJF1YbFcwZSZHfH08KERBO1FLKGlpNmMxS11XJEQpITFJWjtELj9kZjRVS1FjYnloPXhtND1+cF1HaXIqckJOc0M8eDh6NHtEIVpTOUQ9VVVuQGNsRnNSK1NLYnZOeHwmZkc0RHYw''@;'; put 'put ''cDBiVys/b3ApWCsuUncmbDxYYEZIJC5bU0JLfiksW3opeHMqKVVWMGJ+Ll8kPURMbiUzJCh3Om5uNEZTcFpYay4qLHVYU09uXzk3IVN9PV8sUk8/VEUwbGxwUH1keCZlSUV0fkN9bF1RJFZ4NlkxW3d2fkM1U3JTRX46KmUyI2AlJGlxUHk8Pi5nKkFFeXVhNXR8bz1pfkhhJU5uczY0OlU5dkY5''@;'; put 'put ''bHltTEFvWlcicHdidGpmKXA6ZFU8RFNWbn4+Uix1JmwzQk5OTj5QRnRrMV08VShdW1JNOmsrO15PS2B9bTwmfDZIenZNQ112QFFbcEc4TEY2NGQ9bWxFaX48eSRdW2JoXTEjMXYqX1Y3SUMuK3J1LyhYYUlrO30wakd6PGo2ezFbLCE8YHZZSGRJNWo7VSFhNCtrbSNscFRCMlJXRmlSQHhqQDRA''@;'; put 'put ''KGVvKU5RVUQkeEgzT1p0bT1pcXBTPlgjdCZAWTx8PlUqdjpNNU5sOWg9WkEydG5ybyJjYEtDSiowcz93JHFjcSwsVGJ8fXkoeVdUMDN7fng1fm5XWnYpeG4rXVFPWW82NyVnKEp8MywiRWp5U18kQGZXSmYvVzpufDpgeFBCWmc/NH0hKldlT1c2el9MZUBiQm8xczJmTnQpNV1xeCVWP2kuUjV4''@;'; put 'put ''Rz9tUnlNNz8jR1Q3SyFLd20mNShiVE1Jd3kvSSRCUSJPdWlwJndtOywoJS5PZm13RiIlW1tJdTJ5UDNgW0toUmtoIkl4eCYycTUlVGNvbHEqdVQjLF1oKE9HbmhAPCRybmV+fkNhQV1lSD5xeWArQyVrUyghYT9bUFRgX0gqYVZyeC9GfVgqXy93THpzbTpGOUlBQXNpVzRiJmJaYzciZ3tUUkBw''@;'; put 'put ''aXdDJkc4RmQ6eiE0Xl5lR1B1MD13dmkwQ3JpfjZHMDpNenJyRDxbeEwzPWF6QzkhRC5iKUxpNm49NGhER25fRWt3MVo2QDN6QyJlby9yUDxrLGJadHJhZmt9cmcxcG9GayJ4ekhYdlN3aGkqbj5hKkZ8M0BfVzppKTojZXE3ZWtTb0dra2I8Z1tUc3lRK2FCdn07MywoPmFXVm1VdjMzaWwoV2hK''@;'; put 'put ''Yis3bDhjVmV8cGQvbTQ3ZkpQMkxFTkJLOCU5cGN5PiRtcCl7SFg8KHtINElpbFVoXllMWEFkdkdkTmRYRE9ecHM2R0hdRmJBd1NmdmovSEYifHM4Om1BOExneShfd2FBITdeWEkjfEVmT1ojMHwmKkNOKXNCbCpeQEtXO0IrLnheWkJmXS9Dd0lzPCY9OSJHRE9leWhvIWprZl5YTU97akNjOjQh''@;'; put 'put ''KVkjWURGcXZfcF9kbG0jLlZHWWxjZnVCPmFzKzY9MmJiIVZBOTBVXm1+UDJaayEmPHlNSFAkSlc/OXxBSVA7Q1FFQHIpWk4jPnUmOSYzYDFwdDdtOmgrP29xa3ImT1VYUGcwa2tRfkZ1VHt9NiUodlQ+YVpnPSpqdGV9WDJsPG5fOUNNcWN4JDJuTDt4OVRWaWVbdiIpMzJwPVNzLHYjNGJfOl9S''@;'; put 'put ''UEQwbjRrQUtZNEpfaGYjaiMjMEd6VmZKVGpDYXomaFJKMH50UkBbUFk5e1l7SkJSSl5BWWtGQ00uSWZ3U2Y8MmUqJihSNmIvNSMlPyEsdyVZc3N7XnomTHtwJTwjTkNIM1VsZ3NgYkRifnd+RykvJWp5RHAuU0Rreit4X0YyYiw/TjVbO1BaOj5ULlYkdndPbVU1I1tFO0pEWHRfKjVBPllhIVsh''@;'; put 'put ''QE9hdVApWS8yUTI5aDVOYjEpPyRNUGooQ1tucktwdWI2TiQ6TDJjVi92ZDRmJGY0ZW5ZbzNzaCoiPnEkZ1hvOHtOeFRVXWhkSTZlQk54NVA6eipwc1hbUCgycSJGb3UzbCosKWh1SHV3dyhhKEBBbT9yRzBLKG9jW1Y4JSMmPWN2RkBtInEySEFFU2s/WVAxKEtWXUNtQHVQelpIQjMobWlCQzV6''@;'; put 'put ''bUU1d343Nz9FQnBFVzR9Q09+bUV0dERPO3t2RXVhPkM2OS9BeV1EdGFOKFJ3KDlecWskJEpqdEl4JmYrRXdJcipDVXliPSsjVmVFVENTQVtIOVIiOjA4VWIjXUIxJlQldksoaVAmfUBCciV4Nk8xb11KTlloWGNVPTQ/M1NiLjVLOGE1M35dcSIkZ3RUZ35OIWtRdVBOSkYlS040JlJNLyZ6P3Z3''@;'; put 'put ''NXBzL1QkSVJvOWxdVEE8PlAjRUFHX0osYnouZnoxX31bR3VLJit5U2FuMU86U0RyJipzJGwyX010aUd1QD5eS00zKDU2QXtNOkVaVC98WW00czlpNUg+djVINFZQLiQ3eGtWV0szbkZhZTlZWjthRSpbSVBDQSFEKzs8RF0lI1o9Z0tBTkd5YlVBLHVWfHFuJTJLckd5e2o/T05EQlM9LEx+ent6''@;'; put 'put ''cX1tYTx4eTEsOG9bOHNnSkJAXXg2eHYwIXpnejVLMjNWQ2c7TlgvaU1gZjQiPD46TipDInc/VWljWUdmUz1dajE0eSFMZWd+N1BDLmdma04vTFtJUTksVUQ/O3tIIiNeY3NjMEFuUXkxfVlOKj9lISJNJWl5PGw3NlRbezg+Nl93UiEqLGZ1SCZSSV5GMjIqQD1jWT44W0ArUGtVcXVJdnRgKytW''@;'; put 'put ''KU9GKjJZXUpfZT8+KG9Rd108NnRtS0lASkg7Xn49WTVTakdZJEFibk1eVW9TclFpSDs+M1Y1MStbS2g+eEFlTS4yY0JCdnZpJUEifFM/cyNpPkpjSjZsb1hpNWA4NypITnZtYCQqaHVWV3RITSY7N05BOWM4LFN5RWhVQlo8O3RLSWgqcTVhWCN0K209eypPY15fTy5kVFBQL2AzMDYsOWw9QmFb''@;'; put 'put ''WlVIUmdRYktxb2s3MylhKTx0enR9WlUmdHxNJFBsb0VoYEBbfWJEUno8aEQ2OFp6MEp6JHdPb19HRDQiMGNJUTYuNDFfe01rPztFY3x+TXhZcGluPWJeZXBYNWIpbGhncHl7K25hdkk/NjBBaGpRczprRFZMQ0QuTGR2JjkvIV47SiJIMCY2L0xGWUZOZEI6WD1JUU9NT28+ZmZLaC48YThZUVln''@;'; put 'put ''MldYPyxsNDEhK2koQDFoPF4wN3xFbStVIW4oY281a0NpYH4uPCklWSoyI20pbUZoY19wM1tSPUIjcCJ6Ql0jL2tCNiZsMT51NjhbLnp6Lj8rJFhkbiVXWTVWX080USghUER3aSpQREZLfFJpPCFzRTs8dkgsVSwlXkxSfkxOK2RfR24rVEokRCw0Zm9JclMiU0ZfSGhMZFJYdlA6Uz1KbHheMiNK''@;'; put 'put ''TUMwZjJfIlBWYzZOMHY5dG0ldHtXNWE2dzZtPG8uMWZyPm5sbER0dmY4W3ReRHVZJUVdS0pqcWNyW1NqLks/P2lQRyt6ViUzdiZAYj5XTXEiY25kJkpvRC9lfFVYal9xamtubD5NKjJeQlFKNShXMWk0SldrMjRHaygoVSV7bU1TeSRuekpsPURxXlY9NltGZWNZejxFW343ZGUqKTczcGh5MWo8''@;'; put 'put ''PCs4YE0wOndVLzQoM2FxXVJjeWtobGQhKC5VIVAwRkFdIUBlcVFZTVpzaVFsX0lzJUUsbT17ZVBSNFtIRUQoSnhkUnYqPHVoYl1uITlsXXs7cHs6M3BKZWtLQFZnMTRFWzNxXX5OPChdTT5GUGtNTHJkPT8wUCNRPkpjak12JCxmdVdoJE1IUHVzUClUO301WmR4Q3pOSHJrLlEjYXp8RiQ0TlBE''@;'; put 'put ''LHRqSnwqaGpEZHo+NExnRXZdaz9je15DfUgiWVgycmN8SHF2L3ooY3Z7bm5UVnhPT3AoenJDVDpyVyRSLl4oX3V+ezAmUjIjbF9RYE1PU09AbSZGbDg0TCk0LFhsMVhIL3RudVhQL35le0xHLCp6Y2l7a2B1Tn0qIVVwJm0mZnlfI3sxWS9tMnp7WlNadksjRmB5a1B3dCFgdEpWaWU0UTRPSz5+''@;'; put 'put ''fmIkK0hVSnx1emZpNlpRZElycCguMGkyWj8oYDwmSDtAflBYSkJlJVlEWCUqaElIMFNKez88WEtsd3V2NzY9Vkp8dy5uMncobH5ZX29zOUFSUlYuTToyV2tpVkVIPSg6c0wlS0F2SWBmV2UoOTkzKy42fWswRF9YIyp1c1NOWk1QSDd3JC93VTRYT3U0ey9GXyZhQnZERFVLS1d6Y3NFeCE4O3dy''@;'; put 'put ''dV1Vcl8vdDR9SWlfYkRJPmhuNkovdV8jWSEoNS9tcnpHTlooKEEuWkhDW1NJQEtPUFpQXjt3c20kSWE0S19lOztMYF9HJXp1PXo1V1tab0RbUyU/PXdPeDVdRkVyWFFBY3BkZ2o8UVRHVVk/PUQ0JToxSX5AYnVDSnE4KzhIW1ghNXFjYnNoYDIjKztAJmBVQ2MlUj54P2lqK2pEQGIrPUlKL1BB''@;'; put 'put ''WUUxP2E8Pz5uIi5LPUhNe0JWKVFxJXAhKnRmLzxfaS8/LCE9fT9Pa2peQ2VOWVFnayZYOiU2aiNSZSFWej1eZDZSZz5zfVJVajRLNFFZRSxvaW16W1JkUWopO2REclBydWR6bSVUSkNiUHtFNVhWRmRHS3h6V3ojbXxPSzhgJHE1KS9+UC98Wz9bJF5aISg3bWpaKWRJbGBYIzk5I0N9MCxTRDZy''@;'; put 'put ''ZC4uaTFjamtVT2wqI2Y1fT5yQ3ZMRSR3K3k6Lkt0NTd4Ky9KajcuLG5YXiYse31QQ1EsakRwezB8NnIhSjU2QEBOTl5DKEhgMyZiWj5Pe2w/K0g8K3dBbVRSZiN2Qyx2YnJ8ajpdVStSPU1oQnJCdil+ZVRkaDZzJVpFeHg7UmAkITx3QEQoZHAzcHtpR29ZMFMxbS5adTtdPHt1NH5mWml9YF5H''@;'; put 'put ''X1ttM35OcyxEcVYpI3l+dmsmZVZKQm1sKCUzQ1ZYfTNZWmNeNE40TmcvNTBARElWa25uSHxoMlokc0hEUj00LGtBYixYeUNoKl9dTEJmV3pUWDdaalEpVGt5Xlt1LzJoYGNMOThYYyt8VnZ2WXs9ZFB5OH5HcSxLQl1NOTQhQ350bGRUZGZVIn0kenswKT9TeVIrQjx6LkhAI3RKSmlmdD1bSCpF''@;'; put 'put ''bCJBekxwYn1ZQz0ienR5YkYzTC9KZjhJQk4xLkc5MzwiSFl2cE1LMS9PbUlWSF8pXyg9dHM1QV1OVlRFZnFIfHkvPVUlJFJQZ2BAc2NZIlQ/W2p2Qn19akBbNmkobGppNmJLbW8sS0J8OSIoRl02R1MueGo7Q19uMEdBYCZ+RENPcXdJSzgrQilMc1UuN2c+JEhFT1UuZUBxKmV7cy4iQTxlIzpr''@;'; put 'put ''fiVoTXMwSlUkLz1IfER+Y2l0bkslWGIjRDFydXVlbCF5NzdGY3ldcH53L0E4Xzg9ZE54czJEKnwwfGV8ZUdCaD4iZ3EzV1c+R2I8Xm56b3YxU3U1KmRfPXx7eW1mQ2d5OEpIZURpOTw+UypAUFZlM1NdbllzcyR5MkVBcHljWUYvYE9gdnFZOnt3Wnp+N0lnKHokKjdfM2c8U0puVWJ7bTBYUnM3''@;'; put 'put ''JD8vTzJfdW08cVtzLEFDImpVUWZLVUJRb2QsS2A1LjpKZUY8VFd4N3x9KkxuS3NdOTl1Nk1adjlsakokRGh+eUdoN113RSl+JnJiVEN8SVJGWGplOV90aUBtaCV7cVN4WGF1SyI+ZkhUfUEsUHx0bl1ndEZJWEI0L2xEV0V0Q21MKX5EQGsvOTtWeVh6a3sueDxUSnh4bT1CVGhVMmo4Qk40SmlE''@;'; put 'put ''SE80NjkmQ1Q+NnQqcV1IOjNVLik/XVFHYFlHbWB3aiFjIyFxWEFhdW9nQUMqdGtTPVNkIXlsSjlyZnFDenNTM15lSTByZ2h1MGR2V3gmVkBAMjJBYGMzW0c/YmpsfTMmfXQ/Yl9oNCYwWkkzPDhzWF87ZDBQSCZjQiFEQ0Z2OWwmPktTXWM/eTdjTWk3VXQ4NDhZKE4sWltOQ1o1O0h8TVQiSkRC''@;'; put 'put ''WGA1fmBTLHguUUAvR31LS0koUSRfU2sramE0ODphdztpNTRzVCpOKnN3ZS8+eGUhO0hIIWBFfWhOYUU2UnMkJTt0R0U3YjNWL015cU9RYD1OI2Z7ZW88ZTdCfHNNOmd8T0g5MnR5N3R0Tj53QlhBOnBDVTdWaW0lZCxtUFFxUm9EUH0+TmloYEA/WWVqSygmcDhZKSxyQXlEM2JgJktIVkp+JnF8''@;'; put 'put ''RCRAYkgrKm9pMSlFM35CZ0lVKG85QlVKOmBhYVJMfEJsKE5oQFl2KS4rI0hUaUJvYzVHXTZXJDYxNXpxNkEiTSpJfVdFYEklN1VKQWR2SiZzfHtSLmRNSissWjRLay95eTo3aSVJdSFALmRSL0lVMzJCUkppYnZsYDEpKzc/T2FAQ0RDVFY/ZEBEZk46O2ooWT4wXWokV3BdPzdmdlpTUEI2fkVi''@;'; put 'put ''KCQiKz1UV1hKXVgpRCl9REFDJmNkJEVTYV1kPytoZ0NiTHRoZFI/WGt3OnNoMzdJfSZ4MCZTZkpYUzYrZjlbZDxSSipkd0JuSDdzZj1KZEZTXi51Q0BGYF9vajdWQDFIWHZ1MEV9KCYmQ0E3VDFFZjUhS2k0eEVQK19dSCJMa01qYTpKJnV3YUdmMSkkbTRCVms7SjV3fFk6OGxfWElrWnd0bkFt''@;'; put 'put ''fEtxTU0sSklHMWJkNmxgPVNYOFp8cnpwRlZGJTovNmczJlJ7RDtsUkx6X0M+RUt4fS9WOk5hTj9MM25tKiJSflB6T1VRR2FQKTUrZm0jNXYlUzJgT0VxdGF1Ilk+cyEuZk95a2VZNWt9fGo6MDVPLiMwbXpaIjRRRSk3LEVtR2chTkJYUEtMZEpJR0htMlt+WWVnPTVwaFMyeDQ0MWRiazdXP1lx''@;'; put 'put ''UnRKZCk3U3VWeztpcF9GT05+MTVFOUopNDdxWDQxYltfRU55fGouezB2WXFYQHpIPUJVPiVSXyg0fjFQNzVPQXN+SldMdCpbe01BLkZnQ0h1NVlFIU4lUmJebGx8RUhmd1dSQzs+W3d3THo9KElFK0M2QD5IQkhubSptUiJQTik/c2lwSFl1dW8xIl5TbEF3cWlwUTFDM1YyMkB0MTB4Q3hfXUxY''@;'; put 'put ''TTZaZFtqRm9PeXQ/TiM3biErNHdPJXhkT09DeT9OZVN5JjgoOEZfPTQ2dnRZWE42a3Y4P1Ndb3IkOjNzc0I8SDE3Qi4hUndNZXtOKTpuUjVER3UiQ0V6PEhAdVBsaD9tX2xdTWIhcz4rV1JwekA8SmR3T1U5OTdpdzc0fDh1aGswOjl3QU9ESSl+PjEkQX1aNXxGQWxBeHJESEwiL0UvJiYuLlBD''@;'; put 'put ''SFQmfDR+c3VGQmJRQCl4PUJDSjlsSDxAODczSEtVS2REUDpfQEVhJi9FczdaLyVPWDZVZjpKWz9nYT1DR0NyZjl1KHNGPVN3PyhrfGlmQ3JQYklMYVcsRltvXlloe0ZUYnNTX0VneUojKX0zMSUxVnpETElJZHwhMlIoIUlvMmVxbnFiJjh5Ky9UNF5XWG1COUosMUVnfkR2VlVtZl1vaXlQcnx6''@;'; put 'put ''JnwpaCR8SU5JWEVdSV5rR2FvaHN6Nk8lLkN9R0hRV218WHMvam0zWDhzP0NUa0h8I21IdXU6K2sjUD9LJDh9QklHWFZiaCtgPFJGMV9vPnErZEdtLF48RGklalp0fnw0U0lROTcxUyEqfk5IT0tZZmpRamFAVH5kIThYaHZ9NWMvY2JaZjdhaDJjS2hGM2xvZllOcSJXc2ovMFpZN2laSkhZYGpC''@;'; put 'put ''R2EzT31OOSVWLFdYTGQ2ODt7LDpfSnZLN1F2aXJZRms6S0lTNCo8O0A2Mj1BITR9Q3toI348MjBPbVplazxiSC5IaEkzPTBqcmVOcztqVnxBMSh+OmdFIyZObzN2W0VdIzBjIyxmXiVILFBgbXBzUDhuc1ZQL1cmZX01KU03YzByeClnTUk1WUNTO0tHPj1FWFQiQFk1YmJCTnNibjhOVFVefCN9''@;'; put 'put ''b14kcyM1Zz13ZVBUe3F3V0kpe3B2Xls2IzJqb2o0YCZXcWxgSWRTeyp2O30/Llg3LHBjL20yPGR2V3FNRHRMJmR5PH17KT19OU54N1toNm1kQV5jYWRBezk9aCN+Vk55SDMoRCFlJXpyPSZxND1PVFAyeDx5cz4vOTpAX2ZJUl5TUmM2UGdtX0NeMiMhUjJiY3FgYFhUOnU2JV5GZ3VKI2UhT0g8''@;'; put 'put ''OUBqK1o2ZWV2WjIjfDB+bmg3NUZ6Nk4uRXFyWmtKI1E3LF0zalQ9VSQrYlE8VltCVCNVVX4kVCx2ci9MLjhAL3VSZypnQlAveUc8LnJMXn1SaC55X150bEtuPjFjZiI2RUhWRyV0T0dFTCMwPV9UP0UoPSo7Nno3LHNzVmBgTlpha3cze3h+ST1yNlsqNDxkdHtAdGt9OkJadyttJDwveEYwXSlr''@;'; put 'put ''UHRGInVJJGN0X0UxV3Q+R3ZgKWwzT0ZFcmMmZmsxOncuKyFrQV0hVkxwTWs0MlN8fngren1meDw3JlQjUDtOUjt9KDpsa09NLnYwNzRdeGl3ejAhaztrcE1mI0FuL093a0w8SVsvXitTJFY3Z3E/PEZwO1BzdyJUTDxKNGUqKXk0YmYjPH1teHF7PlssP2RxbFd6RypJSyJzIi59QmlPMi8icSoj''@;'; put 'put ''RkV6VSNaMmo/Sm99JitoP0VyJjJPM2xyOiN8VzBdQCJ6aE5rT3prbV8+cEprKjUyeyh3OXgrN1pqdnZ4SU1eWlpVPk0lVzBzREpTRn40d0k3S0Q6Mng5Y0hCK35kT2hTMXxfbXdFX2A/Tz5xL0tvP0dYeDtabFhNe2MwSlNwaWZ5PzRneTtRaWlEZXNpc3A9QlojND1jOkloSVAqQCkvXUsjS1li''@;'; put 'put ''aG80JTdJaSxoTStFIVAhYF9MbVFRZFo+JHQyJkU7MmYyWyFBeSEzOEZ9Rlp5JFV8b188PUteP3Y8PCtUWCF4On5dTCVVKzB3YlZdVEkwJVY5bGliYkpUemFrZj5qcFEsZDxbXjgoWlNYPFJTJE9QcTVoKXhGSnwqUUtYVnV3bk5STWNzOiNoe3U+bUdhIiZgczJJUCxjTyJzdmdwUT4uWX4hSD99''@;'; put 'put ''fkk7WVgiISUjN0w2eSR3RmloYjcwVEV9WjBOJCM1aChwMEVuS1c8Niw7Kk5JYDx4OHxbPTJPV3leOVkvQjxdXyZlc3VoRnMmJH53NVlke1g8PU17ej1dcDAxS3ZJcFc0WVhBSHpgZkp8QDRsejJWTFg6XmZrcDsvOkUkI1BJWEIjbnhAcDhyOSRNNWlAOH11SkB4b3l3cmpsaUYrRTl5ekp9NFc4''@;'; put 'put ''Z0dZVntqXiZkZjdrX2dWVExwWnVkaTJuS2hMKTJBPmQ8OXkzeGxwK0wpcC5NPXBWTmw8VCZuJj9kVD1UK109Rlt1SyQ0bGlgM1tvMnBUNTh5THZnT1k+aHphd2A3NjhaTSkrS0RSNCRIUmk7ZG4peyRTVVR4fX5pQFlrPW1JNDZ2RkN3bXQoXkRuYUY9X3l9I0V6MWt0M341PTtuQCZtKylxSm5M''@;'; put 'put ''YngjeS9HQDFSVDRmZ2ZAPGB7Y1oxcSwpOnhpZWxMTVd4MnlmMTpSWmEvU2ZKQ3VxIS9XSn4selJYdn1aW3UicVE/Q21lUnNQVzYke1cyZmxvTUI4JUlzIXJpcHBtejA0MmwhbHs6anFmUEUjJFJ5TSg/bltzXUpbUVRrJH4oUHpvKjdrbT46R3k3Wm8rfj83XT5jPz53LF5kISJwUVl7cm8zd1M+''@;'; put 'put ''QksmcDovIXckb1BFX0NfakBzYFJXQHY7e20zezkzfmUxdEhfXkcwIT0ifCppXjV1JHY9eyw3M21YIWdjamlJI11nVj1nem0saW0xfVhwWXpaIjtpSGxrRCVzNSMjOGhFd3VLWHVwMnh0JUZIZFg2NEpXak55ejQlcTIkXzh+NilwKXpVOmJyTSwwWyklSEZyekRTVzRFPDNLMVlCRStkV0ZVNnBM''@;'; put 'put ''cWZlaDZiXTAjfk47Und8WCUmN015UjxAaylPVGFsOSIxfCE0K146bkRJU2kkMGVwUkU5aiFNXmFEeWdZOnBFelp+XlVvTFJVNCFoXTc7MyxWREF4emQ4MiROWTlNJnYzeCxHWk1iaGQxUlZkYiJJKHt5cShSZHhxbyNRZlJ6a2BvXVoySEp3MEdXPDt+e3MiV0VwXnQ2JVNMaEZII2NSe3g9dVhK''@;'; put 'put ''MU9GLm0hTXI7KSMuWWYyR3wzVDdfT1kmVlBaSV9Fbl9bdlAhd2tJI31eZVJmcFsmbEt+fU9sUShtejhIXmNXO34/Oigpa0x5IVJ0RVFAbWpdS3l+Q0kyTmoudDx1RENFJVY6W18hcTptZmlEN3w6OFs2OHBFej5nRUpNNyhKbUx6U304a00/eiV0VWY5N18hWUlvfkA/SXM9Vm9CP10hPXpISiRw''@;'; put 'put ''TjllYjxgR2cpcyMzTzBCNVlVMnRMQDx1LmVnT3BmNFd8Tn5dZnh4MG1aXUZnZ20qUUVZUThJPzNCfFZrdDVuJi9oYUZ9eldQYi49LmhGaWRyPi84MSQycTkiRnkhdzhnJUZnODNnMjd6Ty5BTC9tYFZZJTM7dEJBTWJgSGc3cjYmbmsuYF1UbkYldWo0bil9PVJZXmY3LCYiJHA/bnEjfkQ0alYx''@;'; put 'put ''eltbS1UyOj5qIlRGSjVGQThhS3suUVtALGBlOXUmbiJTM2ZtTihDNXE3JHBPW1t8QzgsMSJsU2Eyd3xpc0hqI2l5MkJ2NDQmUDtXPHh1cih3dUpwIVskUCMySnssfC86fnZUbnNbbmZ6XzhuP35Xc2ExXmciP3pqZ3YzMlFGOSIvOUxddkYuZTo2YmIyWz94RzNwVSYxKzk5elk1aG0xQHNEQHQm''@;'; put 'put ''LGxbNlNmdndJXWFSZmolNXE3JDMrSH5zQm4yYEd3UFJDR1dBJHdVd3BaZVAqSGUhIk05a1VReT9tIl50emAsIVJEOW1LdUVSSDwqMiVbPGE6ST5sXW1GelQ2cWBdMWwsJDA9PnFFNEpDNDlvQTlPeyxpQntEXypzIypaM1AvVE8pfSxzODdrJTYkOFAlUzojLyxSVk8hPnQyRFB1LHgiKnBGa1gx''@;'; put 'put ''XTk6KlpxWEVJOlNQK151OzB6SyZhPWUxfkEuaXl0YTVUaCxNN01vMy5FdzRuUWQxdHplZVBeTWxBbzA7MF9gYEdMYkJ5KFMwMGI1fUd3QCt3Xi9OQV00SmVDbGFqPWZ6RGl9V0JLUUx8I1pZeWYibDZyMGVzRSRIZEA3WUU+e0FrN1F8KDZQUHo2KWIpbW5HU09NbVFkZmN7Oz8+aEl9OyNKfkNi''@;'; put 'put ''TnAsVUdYbjJJOXN2RkxzdlBganZPZEpwdHtyenFfa1dvUGBIN2lYNDF8OXdrb2RBZWRbTk8kXmlbTFRvTXRSQjBFNmlxX3UxOiFYcmdsWVF9YCEpQyVrUVJqO2luXjc9MCN6RH5qTyYmdncxbF1oWENVfEgzVzs3TS9wRj5yUmJoTyl6Ki4yY3RyW2RKPE5IIUsvUlhFQ20pS0dIZ0tASSpQaUJL''@;'; put 'put ''ZUNhZH1zZUpLXnxqZk49WDg3YyU6NVZUWl5HZSxWZzNkSGYpWndCWSslKk1NaFA0OGBoKjdsRWxGOCQiW2QhXUZpY11UWGQrL190IWddbjx5R01bWlAzPTkzPz0uelp2YlRzU3NvJXNYa1t6JWxea2lZdldVWHJkSlJXLyttUFlLVlt0ZWB0UyRTNGgzaXovUFA9XlVbdXtDTCohPiFEQUVuUyM1''@;'; put 'put ''PFFGPVo3P3AuPzB7RzcxZzBgSG42YUpFdmxqV2NTSi5LMHNAdl1Keik+QVQmMUshWTtndFJrXkl6OihAczNHcT9kZDdtW3ZdLmJdX1VQOSw3KzlZRWE6UCIkYEQmKltvVChWMiZPQVR4dWdPWTYhUVtvZD9hPHw1dlc2c0JnTVRYUDRWRFo6eFRnSjpgcjlRP0ppTEQ8eiN3cyhRRiQvWGB2U1I1''@;'; put 'put ''eUZObWo/dzFkbE59NVheTEAlbE8hI3pMJW4jJDZbXSFJVCwkTXtqZkwvQmJRNT9vNTIuT0xJNyJYTDovPUw9T2hTVkp1QHJyeEp5QD0kbSIhLjdfdkopUmVzS1dqLF50PlRTMCJhJjFaMStPRV5bO2g3JFMsOHZ4aXRdfj5xdSU0fHxdIUB9fmFtQi4sLHM7Lip1eC5CQyFlbTRMdFQoIkBoXypb''@;'; put 'put ''ZDJwfWZLPyp4NDxAJng2W115eWxkdilycTBEOUk1Ok9UXlVbd3smaT44czE2MnxdeFJBR0FgSiVNOy9dTjFASjB8IT1RalMhe2EuK1ErfklLfVQpPERtN18lNW8sWXV+eERkcndRezZ8Pn1dVm9ufD81Y0ZmZVoyezZjXl5tTzNrOC5IbjNSO2R3OlZzNiFCOHhfLHRYQUdUWnltKUdCdEt4dGtR''@;'; put 'put ''NVZ6XT92U0U2NlIkfilWfmBGbCojcyxsezNUOFtHKUdgWGU6ME86Wi80NHxKUmNmRVNYJn4+bj5tKmc1R2N0RTE2WyIuNHM3RmU8WjU+V0ZhK2NzVSNAS2hoNyp0I2tabmUxfk5ye3xraCZoYUE4fC9eSnd7S2pePFB+aip2UTA4eEgwXiQ+ZCwwdTdwRDk1NSslM2FpL1c9djZvZkU3Rjo/cG9L''@;'; put 'put ''cUlOOl8hQkhiU2kmUn5oaGpLPkdUcl8mMCFrKkVjY2kyUnFfVVFvd0t0aThUVDNqfDBWYlFbeVpUTHN3e1AmWWd3KVIsP0o4dzBTLHVQQUMkLjIwZ3xWWmNbSk8xQE4oJUZqLEB+UGNPOUp2IWpTfmU2ZyY2dElsfHxufFdhOS52YnJBOmNyXXJJaXlbeklCdWUqdHE7QWhkc2lpaCxwZHI5d1JC''@;'; put 'put ''SSwlaDQvIyJMZDE0VD4zZzczY1EzQGpRPTMwO2l5T2Y5YVlva2xyTU8zJX5eN141ZzBvcDtPajdYd1ZOdHlscGtASyRoZFIlYnlIMyhbN0I5LFgxL2F2ZkVNajpUVnVlNzdZZTFmaDdfZ21GdUskZzEkTFI4dmE1ZiJpdTY6JHJRaEw0a3lgRnB6dj9tdSpiW280Py4pMkohMV5KSDIrPyVSZT9e''@;'; put 'put ''NTBwO0ppMiM7fX1UQmolZTQqfnpUWGdZfkVoIWQwLFspTGRvKX5sXV5VP2Y4P0A3OiRIRH0pLkc/UUNwX08ibV1qQTV4PHBheyh7W01zMnBfakJmcTElOmVwdDRtdk03aDRUJXJ1OHUxbG58d3FzYiZnQmhITjVUOjlGfCZlUypjNVZHKk9Id2BDZUh6W1ZrZjFbMWxLZ3IlLyllMyheQjs8PzR8''@;'; put 'put ''OkZfIyZDMlRDTjx8ODtHdVZrbjNxbDRoVSpVO3tpcz48aSQseThqYyR5cSQhazJgSklPTjF5fCIxY05TeFA/aU1GX2xQKSxubGBhRFdVbEVlPmY1UysrQHZsKz0kZ3Q/cjBZbDpDYzEqOVI6Z09aYF1+MVBlVHo/Vn1MMT95Yzg5TjIlXkMidj1taDYuaThqWDBFeGtxOl1aVm5dcSlmYDBOL2wu''@;'; put 'put ''QV4rQFkha3JfTCJCL1M9Ri44VilUXlJyVXZde0pmI315OXk+QEA0JmVSSGJEdyh6PXJxWCkxdi52Yl92dXdyNzVJY3QvNk43IX1HNmJhZkQpLHRBKHpzQSFxQFRMUn1YcU03Yi9PcGMhQiUrT1J3Yl1Zc3RDfjZ2aS5YPEQ0RGZNU3tUKV1PM2FWV01kWkslQFQrdElda2p2eUlBQnZBdCVsWXxZ''@;'; put 'put ''MFdKams5TiZxR3NyMCszU3hBdSVfWHo9dDdnQzNBZGZjYFZqTkA/eys7MmlOJiErUntPQ1o8X31JWkIiU3Z5em5TQ1B0e0J9PUdLSVRMLChGJGwzUDgpMDJyfj96RXExZlY3d29wOjxGO3xBQCR9Y1R3ej5ZSjd4V2dEQnN4NippfDFobX5Nfil2LDBgQEoqSVlddHU6RVIpOzB2YG9uQVJWTEE0''@;'; put 'put ''eUVVbUlFLzhkTyVwPXt0dnMqTSE8cURzYXdyI3BGUHtDIzhfTX5wfXB2RGUxZCpiTmgqS1pbejomajt1MDtnem9mZ25kL108SmRxb0UhTF9sKkRGYmVlTXlrR1o4MSkjJER8ViRiM3ErP3R5Sko9eFpwX0YlYkwmPkZ3KVlJdWMqKmRvMUViKlJ9P09WNiNrVD9YZz4lYj9IdC9AfkYxKjwrNjJp''@;'; put 'put ''U1h8IyV7L35gKjo7Z31fM0ApZmspYCJVYSIzZW9hU2NaJVJ0JGlMdWVGPGRXY3NsNW86cXBLZlUrVjkhTV17ZE9bVWNeQFY2MHJTOVZNbT1mYGpMdTJgbWdeaksoemwiajt3Mz8jb0QkaTtYNDNTbUZJI3ZTL0RmOzR3eDlsTlRuTFNIQHclfEZQKHdPT3AuQz5sbnZrbWFpMSgpXi5xOX0zPzRr''@;'; put 'put ''czh4Z3I2RWc4NiRvK2gsfHkhLjBnW1VCNzYrPVdXa1ZBcXMwYnVkeER2PF4ucihWIkpoTXBwIjR5fGB6akcqR052M0BRIlR3Ml5mZHJ9Xnc7ZElNSyU4Lk9yRn0hXS8mPCtLPDJ5fXpiemt3YldTQEMoP3owMVNlKktdN0RyOTdBaE9EM3ZqfE9CUHNEP2EwQH1jdylKcX4yR0ZuNSl9bFMzd2Yo''@;'; put 'put ''Q3dfblo/c0NNKCp8fXNhL2ZiLl5qXlN3cjhSQSp9Piw9MVJRQSxsdWBQV0FwWFs7KWF1TUd2UXxPfTJxNyRUIUx7ZyV2UCluSU5lNiNPZl0vfGNpSV8rVVE4KXRnKW4/MSJRI05sdiUsaUp2RDQrSzpLNjs7PihoUyx0djBndDV0cTlOc3N1MzckOkIxIzVhdDVdY0dvWFAvV3B2TTtWS3xjTitS''@;'; put 'put ''JSRTMmphLz1iMmJQdDBjZ2FLQ2lFQzRmXWIjRTZMZTZYPUh6PjYhbTs9Z3dtLEU1Uy5pYzhGMmFPVlhNYE8wWjlraGR6YVp4TXJvZHxKZXlqNVNlXX07fUE0PElOPkdycTBSKWZlXTFPaGNSVjFCUyM8Ik08dkBiMERwNyxsR00xdT94fkxHZ1cpa3AsanRaeD5obnEqYlliXlJAVHI1fGBDQjdG''@;'; put 'put ''eHReMk1ualZtIUNDeUhbNlc8bTt5eWg1Rj5JTnFZOWc2c1NEVXMiTC4mWXddIkdhcG9NT2s1Nl19ciMiVi48YCJ3I0RbOFhwWnU1SmQ6dHRwV0dCaCMhJUwySjgobGZwMWwrdCZzbiJIclJIVXJJZ04uXnAhYzd8YmNHL1Y4NT1XMyo2bTZ2YXlCSV5sPjVLPi40ZnpvX0t6alR+LyZXeCJLQD9G''@;'; put 'put ''Ty9BVyssSS8rOjpJOWtGPjEoZERZWz56Qzd6UD1FIntzJnIvMC9XOVVTdjFVcXZOMylKZ3h4TW0zOmdmOk4iNkdRNGtKaEQ7SXt6MXw6e3p5bWdaTkNfY2xCe0NuRVBhejFZSGQrUCskK1AsYTVjMnZZbSEkSStTbFt4ZXJCQDs+dCRyaCVKSUloS25VbHtfPkEkWE9XelZ+VnoibEciWCJzT3dX''@;'; put 'put ''VDpeTFFSR3ZOd0NSeX12RyUrVHwwKSxtS2Z2TXg3e34mSXRmakp1flFOVEFjTERDYUdldz5SVChYLmpJXkkoaDN4aH0+V25pYXlpS2YvMURtfSIpbnFYbEo5YGZzPX1vbX4rJEI5OlsmOSlhVClyJT4kJV17QSJga0QyNTNjRU5CaTFmYTlXO0A4KFQ5fD9qenJhSzZrelAwJTNeaFYlVUspSCRE''@;'; put 'put ''OkVoJkp+R3QvVmhxL0BvLnt7O2lAS3l6dls3JVprUjRQVixIJitBOV1xOzZfQ057JTMsJXdqZmljaUtuYEZaTVdSR3VJbF1DWSk8KyQlfUJ3WkJ7R3pOUH0uaUlYdz13V0FKUzwlYXBoZFAxMXEwQmV8eTcoVWFeflhuVzY5WlI8VzxUd0h3dnYkd29iZCh+fS80fnN2cFYlOSp7Rml2d1RhJEpl''@;'; put 'put ''NntvQ1tYRSZXOG8yY1ExK1hMNT0meGBJLk1VYlt2TCN0Lnh+ey5rQSgvWXpnW2ZhRmF3U2xIZUVKPSspYktRIj87LnpSbyNSKnxndSVYVSw8UXx8a1Q2OUJGcU88fkphQmBRKk53ND5naWFlUngwI3p8ampTXShOSVJvQncqcDxtZ1FNfF5rOUooV1U6NTB7KytqfnN8V3IxSSMzcnRCNEIicDgu''@;'; put 'put ''YStRQShoa2RhRDo+RyRbNW5mXihManRGZl4rZ0hZNTRWdndfYFE2PkBVe31dIXBBPz0/Zkl2L1RAKGZjNEA5KTdNWTQ+RGZvS04zRDRMS0ReLlcrTUVUVGNpOzo1TUptUT4qPzU/ZlpPM3d3TzFIdjxzOUp8XT1kTFg6Zypkfmd9fE8xVk4ua19uME1oSkxzRyVjUWs+Zi9ZUEZ6QV5wfVR+clAm''@;'; put 'put ''aCJ8REkvWDV7KyJ6V0VxQSxYNjFYSEpuMyt+TjZwcVp7RlJ2bDA4dlJGI2hfaWUvKUdNaG9XdXpMaHw6dS5MJj4+UXtjTDJgUiYlfV85VCR2VjJILyh+OldwZ3JQQF49SWRrI15MVHt0SDM7b3lWfVdbV15RJSZvK2Q4RlpySWxmbUp1I1leJC5OcilTemJmQ2YxJFczOXN5VDlkWE8/KFhjb1hH''@;'; put 'put ''QUFjdUo7MENgcFJGYldYezRpQ0E5cEFGelV1dWF0X2J1RDNIUzNrRWcyT1ZWOzhLNX1YKVkoZiZxQ11zJHVJXkEyWEhiaDBYUX1lJDRNayRUcnRnMmNjfm9mWmFAQjh3UCo1bURxOT5+NHg3ZHFLKyRTLnoseWFYTmtjTWtQcHpyOXJhJSYkYlkwVkV4aCYjRV5QY319NX0hUm9HZmtTeFRhSHss''@;'; put 'put ''W2IpYV9peXx2ZURKKGErMWk5RFtpYlNrd0VQRWhWMHNDakFVK0AifF92eCNQZStRRWdUNGIhVCRlWDJ8RFVld0pqL3JHTntwOk04PF1wdGckLGRbKF5AOFFMciNQZTxUcD8+K3w1fk1IN1RlWFldT3A2YG87P3sqLDw6eTZwL0M2MUptOzp4JVImVSlUSENLJm4kWWdzOXwlZmJtcTxvQWs7L3hQ''@;'; put 'put ''VC9bYzprbyhGemtrQigjWkg/ZSFEVXkofElzd2QvQk4uPEReWDJPJVQ4QlsifTl3JkkwME5qWj46anNoZSVkTm9NY2lWMDg9ZCV+ZkxUekBdPGtLa3ZrTXhaRUsrYEMxWmJUciY5fTxEN3N4YFdQSHw3TmVvfF5pWWcmVS5KdU8wLCsvRyw+Klg3el87OmFVRCFbWyxyXXBXYTtFSXo+SEQkSisp''@;'; put 'put ''UEg1RltxMT9tOCpnSjgqczNidkRxa1NdRVJLIiUsYis4TyF4Pn0ualpiWVd1SFtJOShgZXpAOTJXSVsmPnxXZiFtVUtjZ3JJU0A8dnZdfTlAc3k1SHJmfnQjKltLaTVkX1subSpdc1FIZSZnekd6ZUVnSkxtcjsrRzwsfXFPW01rdU1VVHZbR0ZiNCwpSHFTR0FzWndaKzl3cz40JW1Hc0RgV31x''@;'; put 'put ''MUp8ZGM2Q2E4dF1LbUc9YztXUEBkYH59SVcvZExWNEh5U3lDUCRBPG5FPihUeV9gWV04W3FJfUU7OVhVI1l3XXhxdH0sfUF+PXN+fjFhcT5gMyZJZHY9VH0mJXo5I2hSYXhQT0c4WGIiTy5wWld7YS9mVnVUVF0rJlRrI05wbzVqKFk9PXxQdXN7VkxMZyVfKCJAa2xRJDl4UD9mUEMuNC4xakJo''@;'; put 'put ''WCNlNjFJWF1hTHgwJVl0TlNfZDNgTWRsMlNFbS5jMz8qXV4iMixyTzVGayRaSUxCVzJ0ZFYiU0J4M1gvel01ejo9aC87YGJsIz1IVnxkeUB0bVtvdjgxMnE0YUQoVXRQXnF5TkteZDtIXSRAaT1oU2xtW181Y2Vwd2YuRHhQSHFuK3FpeywxN1U1bEJOVFZaP0dVUD8wZWZSX0w+eVJVNVV8YlB7''@;'; put 'put ''YHJvOXo5Mzx3VVAvOE1lcXFfKjh8Lnc8aWt4QGs/KFlHUzluVmtdZjRvKkYkYnQrNyNqQ1V8IiZPRSMkQmh+UC46aExlSSU6a3l9KV1bYWQiKjojcTw8b1p4QU5zYT9RPXVRO0ZvNFA1QkYwPT5sOVJeOnxYQGVMbXc+UiNXfXRHe2M4QSpnKCwrWkltVlAsLDQvSSxdPVNXQCRII2Jqe2RUY3Ng''@;'; put 'put ''IlZ1PHRaPTFhJHMyNi9aZDZHdyIpT1k0SDsjJEo0R2JTN01CcDQ7SHpTY11YbGdNPFhOVnJseSJxZT9BNkhhPkxdZGM0ZmVtfSVvVUhVVnM7K2l3TDlPeG9kc2ZUNSo+Kk1Qa2V8fn1JdyhsaWA1W1dfQHZzRENqIzlUeCJ0TjBDPnVwSCt1LykwbSIsT2t0WVVCeEw4VGRkPGJPMSM2cld3dmBD''@;'; put 'put ''NzxCZyhVc1JrVmB0fEJrRkVqS0cxZWkrQlJZLFljV3hFP1FXe21dPiM9QXFeLGV2SmlLTUclR2lSJSolZEBuM1ReQzJQaWEwcDU3LmxNMXR0K1R9KkdUT208M2k0YXo4ZkojKSUsK29XUDpuan56eytGTyFaRVNMW1NbSmRfPD9WT10rTl1aWShiLnchfSpoIWJnakE7fWosUUl7bEs9KnxwLzYy''@;'; put 'put ''QHkzPVM4fnAsYkhxdHs3SilvQTt6ajFKJitrQSomdFdXUHM6Nk9mRGozYGl+JCQ7VF0rbncrJHQvYlVQe1kkc1s8RWJ7N2MzR0h4YF5aImZpOEVJK0J5PipVb1soPD59W2RNeUMrZ1hgSzx9dWBoeXIiL3o5SnxYNnM3TzhBZUtobTlAPlApaSpbKixiKThXRyMqNUlWSTtvZHVYOjluTWEjdlJO''@;'; put 'put ''bjZaMCpHPllQXVdtWDoqJWQwJiRdO0w5TmJjUywoLGRTVkE3PlNAQyh3W19xSjR8YCRwTkB3IUZPTGg6Pjsqc2pCMHEvXXxfPFAzL0QmeGtQR0BhWmVnOS5aO1RITzNbY29mZjJfMUE7LFVaO2k1Ym9CZ3soemFsbVYzayw6S0JTKzgqTFEyWj1bezBaeWNMdXIhczc1ZCZoZ3YjIWNPYHpGOEci''@;'; put 'put ''NkZ3JGF+KmB6UExXUVhxSTJ2UnM7Kz1NRUNkUXkwTVZefG1IKCV1bUBgPCU/K3t+UjI+Y0Rrbl8pX2U/SzdUYSE7QVU4c3lVfTY4PkhIITx+ZGplQ3BIMC9uJSYzYX4mP2FYNXpXPEM0SyhxMTRyQCN4aVspODM2NUN7MiE/PDhNRmwyS25oO0pAJDVPYjhLe0EyLzRtST9xVSpQKUpeeWRmRCJd''@;'; put 'put ''b2pWRHN9dXEvXiF7WCksb35bUDdZODp6Nn5QUDJYMlZsMUJscTVLYEllJXdATSFPN2h+PjlZb31nM2U4fW4mYT9sRDVYJSZHe30kcFdMdGBhNWdEbH4rUlRMWDUhZ0toN3EiN1Yrdl1oO3VScTpaUCYvdn1wLzJ4bVNobGhuZCxBJXd+OWdnLEt0RiVXLyZwKS9BPFFPekAqRkZdej5KJGUka1Z5''@;'; put 'put ''TVUkO0UlfHJHIX5LdFZRUDpTYXlZTyFmZ3dxInYrVnlzLm9MITwjNzJtQHkxfkk6Um16TjAvRGxFS1h4XVdRIm11R1FFMkNTdWpfSmt3bnArUHY7ODd8Mkg6bUYwbkNwbiNjTis9IWA/WF4uRWhpXixnUCs2PW1ASkh2P1BkVCRvUkxnckgzNVJlPX1tcjE0Jn5NczBENW1afUBIcW1FaXwkMFdr''@;'; put 'put ''b0k8TTlKNyMmMlR9NE99YH4zXnwyUS98ZH1HblB9XjtSV3s7PXNxMiNOQ2RXaHFySj5WZnNSZjtLVStXRWgvNGNYeFo1I2AkWkpbc3tCR25NZXliXyFMNjd0LmErQDlYRl5xQ0pdb2c0TCoyMlhWO3QpIkN8InIuJDc7XkNPO2t2WEVKWDE2amt1K21Bem49b01jbSpqPGsrRixzPFEuLmJ8QWtG''@;'; put 'put ''VjA2PGU5WVRXKm5FNVNwenEhe1UwYGMqMlBLZVJ7VT5rJD98VCFdOTpiXmgkJDNydyRqOFY5bEZjKjFoRyEvdzwyInhhQTN4MiFVOSx+QiE4byVgakUrPlRvNz1pZm5+fUI+Zk9XPm9kdy84eV8iWW51IXRTXTBhYXFuSy40eEw6XSorQDhbUzxXXn14NCh7JEkxcyo4bVg3IT9gTDIzbzBQVkJ2''@;'; put 'put ''NDl1cSpeZmteMChhWDgiQURuRjlpeHt4LEptITtqIldDJEp8JTB8MClnc0hyPCxzXmVMbUtRRCtdJntucDZPZS5QdVtUNChzWnY+LDVwNXJxLzVRTGF7R3YlREYiR35aZUhhLGc+fStWNTo/VSZBZDpMX2kmKGRuPVcrZmlqZ0QsXkxdM05JJil5MWgsbmFxVDpiSys2QmVXfD1ZUGNqZ0dUYWlJ''@;'; put 'put ''O3NOQnY9biJkP008Ok1RQTRJcXpqVy5pNzpKJX1OWnZCKGVUWT5dZSReX1hwdkFBTzI7YGZCUGY+OmRPT3QrTmdZc09rMVl+JnFeIToqVDEwaj4mLi8pcX4xN0ZvamNQWjNNS2pQcjxkU0BuS0lnZFB1ZzhIazBhRnw6WXB9OSpOYyojWnhjPDFiVk84fmNRciRUPWI+UiF+Vj0kfE9COkxSQzZO''@;'; put 'put ''ZDRwSEVVZXlqRUhQVm43KGR0eUFzSzR4ZlJvakIxJX04PVcmUi9KPyozIiF2emV9Mzt1SHwqOjA4STRgcllVdjhGb0ZjIms/OjtVSH42QF9LZVdpKj0xYllKQn1FKjlCUSQsNlF7QFtvSCkkeXpxWk9FKGhgdnBye343YyJYRmYuQ0lnVXFmRnhAUHNbJXRpSUwmUkQ1PXolWnpnbjlkSXFoaEx5''@;'; put 'put ''eCJhJkdWRUZLfENLTFo9TGZ6I0h+bUJkcmUsTEI2KWlfO3JHd3llNkBpaE9vTGVzcSNBSXc4bnNYO1YvMkk4akQiJm90d0I3e1o3XmJHKlREPm5DKjZDWGVZVV01QFF4ZWZAdm0sKSR1MFY4S0ckI2oxKWQoLDxJRXg0Rl1iV1B6cTJKdWAhLD1XaCVLb1ViIUJKXn55UVgyU3NvQntAVHxvU3oy''@;'; put 'put ''fUwvXjZ1bERmYFEsMXBGNitpckttfEtNY20jNVZ1SXh3fDY3OFlPeXFJJUI6ci5KWz0oNDwrIntIbyxEb0V8YUx6dC9faj93LDRNaWx9IXJxWDssWjRsLEwkVz58Ql1hRWlrRHNXWD81cypFYlRLMTtyOTM7bz9tejxWbnR2SSFOazQ1LkVAPnclNmM9eTBQWEdlOENhSH4vc3d5fSVAITFTWDtZ''@;'; put 'put ''PlB7IiM6Z348VXFrTzlhdlRzdT1WbldDVV0yWnpTfTcwJmhtXltTfTc4Ql1lR2cleyNXPE46S05RLDU5d2BvU2c5YlVYc3NoaVF8VmB+PzBuQyJeM3d3IXVqOlI8OzQ4JUMyP2lMdCI/cCRuQiheJD1CM2Erd0lIPEl6NDlOR0tld3YmMXJQU1BoYW48NUBAT1cpYHwqTl9RZC8lOVdsYmU6PUMz''@;'; put 'put ''SUVlTT1BXSk1Tm90SD5QUCw2RWRiQHFrMXxDSnkpfipoJngqe0M7bGg0UXVrTnNTOHR6ZD86T1plXWwkRENEc04oemE7QEEvWWFNOyJITTxVRFIvV3RiW10vSW0lZCwqMlAwKntHU0l+Y0ooMm0yXWZTP2k7eXd5UHNMTXghaUBtVDBpWjZQeXcpN2tlTl5wQnRJTD9DV0AlOEYuOEJPOUZubW1q''@;'; put 'put ''LEpCTmJvVCtmQEFSNkxpYCoxaUZsLzpWQDxIbGFmYTMjaEJ6Kmxgd2dFLmFBT2VBP0Jsc1dDPlRecEFFP0ZEOiJlYnwkVkRfWkR1YDZSSGlWOnkvNCN9QC9ta3N+MTxaL20uMzpUfURxejJva3lTRE1rOkRlIzRtNWw5ZEApYyZ2RHMjOG9GPTY5R0RXJjZDd1VqInZQeUJ1LDYuUCMyNndjcUAk''@;'; put 'put ''Oih6NVN7V2tPLCkjTCNwQCV7eWNMc2ZzKngyTktkPEpRRV1GO2YmKHxNLEhXVTUjYzQ7JFM4XUd+cGhKYzN9Q30+R2B3fFRyNyx4dzx6W2labVN2dmcjQ1A6fj8lTj5HMFh+WEZuY1FoQTp0aEZncD94JCVMOTJDOyQiaChaX0BjSl9FTz0wUEJlTT9vU0R1dyZoYDFoMFlaPEgvfWgreUphTT5R''@;'; put 'put ''XjBdImxaQzwoVEhARj9OVlRsMC5bSDVnNHw6b1orW1k+OWJ5SChzLH1uVjV7VHlne01BYzpzRTBjS1thdFtofjsmYCV3XnkoWElJKmhKRXJUZipuLiYuO3BoWmdlUTMyRnl4eWVqT10vSGF5K2VTczN8cms1UCF9ZHMvPlkkfUQ2Mz1XSzdLZEAvNXgrallebVlYNVR1Mix7aFRCQHQ2dz0mJVp0''@;'; put 'put ''d1RsI3x0VUkzK2d4UixKJEB6cm5ifGFKPzhmM3xePT0lUFRMX0l4bWFGTVRrQUVIV31iYkZfWTFIcTFFbEomIXxvRWdWeSI8ViolIUxpY2VyOUJxOCZ2KCRZI1AhOH5qVyZSOGdgV0MyQl8sa0I9IVZUUlFtNkdUYk0rN0htU3g1WSFxL3s7WnUuaEVUcmFkR2giSllBX0FAd3hKTnMrJiF8Rikl''@;'; put 'put ''SyxCLkIzOFA5Vk1+e3plUzZsYXl+JHZPMCRTLitSNTB0ZE8scn4yfC9YZTpAXiw5In1LOD1nIVYiVlJPaXhPYUpxdDh2P1ArTlMjYjtDYGdZbTwlYmFhRkIyLmR6XTEoTm5dUGlfTyxbRVE2PTJJMyssdEhOcTwrM2Mvd2V3ZU90R1RTUksvT19XNWF+LHshaXkjTlBrcTdWakg7VVBCMztkdVs2''@;'; put 'put ''ckYhLkNQQGw1IWB8eFdSJW5NVzxtRjdiW0ByRCtGNS9qTDhqdXImSnBtZHVBeitdeyhpKF8lP1ZIYCliQkQvTFJjX3lAP1tEYlEsWGJwQG1meDYiIkwhV3dKck8jRmFVL0NpSDhrNzlhKzhKLmcrSH5wMkxTeV0zMEJkX09JLiYieWNzMkR2UVhmb2JhXTBCdFhtITpZRjBdUT9vdyZ1V3ozTG4j''@;'; put 'put ''WH5mJE5TXV1NQ0tCKFZaK01OW0RqMzBtQilnYG5gWkgsVjNReyUudDZwQ2Z4XjdbdVM/ZWM2MzFtJF1uRSQsQ3daV2EpWH06dHRXO0ojOyFnMTFCdyI3ZjxUOl8yQU8uXUBFT0Q2QTNwPCh9P2VCbWlGbzYuR08oMH5XanZ2YVt9L1ZNbE4vaFpQfDl0KzxnLl1yM2pOV1A+WEw1b2EjW0UqKGpI''@;'; put 'put ''JDAlalNNViRhfUs0cTUmUjsqS2k7YUVPQUc9dFQ/ZU9CYmBVIUZQbFhrPl03LHg8Pmp2cUQsamhmbmZ0SWQoa2lVZGc4SXhscE1HI2wvVWduSCtPQlMsOnNCa3l3Ql1NPUo3VSIpWjJKeTt0S1hDfF5bREIrV1BxSGR1aUk2dkwxd21iOW5FN2Qufl9OWnlobEBOZFs2UEwsckRrIzJadUN9ey9F''@;'; put 'put ''Kz1lVUNQc0Vqak5mQyk5YGUvdTd9NmRdfWgwUDFHd29NdVkoSVtVVEBfWSsiWG0mQHFMZ3FCWHgjVWA8VGApaTZZIkU1LjJqWjMyOnV3S1V2Yl5QckRZbmdQRlc4RC4jbH1APDVsNVNMQnk8JjJVcTFRcHI+KE5jRzpGT1M0dkIuXiVUV3RhUCE/b3tyc0A6djREI35sVkEhWWlBIXZFWnQ1VGNx''@;'; put 'put ''fiRaJk9ueWcjKH56UyV3NEtWUyMvKjlVUWlQPnBgQS9+d0Z8Sj9BODQhN1pqaWAzPDcqNVJGdXhOTFdMZUouZTdhMWY2TUI2aCEyJj94dXR4JUg5SllTdFNaQWBzIUNmXls+WmolW1g6O0ZmVXs7VUJnPVByYix2SEp+W2JAT3QvQFJgWH5FQkZ6RUkpKjpkWVFwZjQkPV9DZmspPUldM3VFM1hH''@;'; put 'put ''PSRJcDl8cTxjQ2JvbyVMK0FeLDw/MEg8MyM0QSgiImNtcy8zWWtSVlYvKHheMTJjOCpMRChAVlRKdjNuY25eU2ROOFkiWEVFcD8rPGN+WUAuS35GekVveUAjZUw8Z3ZrUyk9ZHFRLHFiJmgvb3gmYkQzd3xQOkdPaGopa2ZxIzUqTHNhcT5FaWN1OX4rKm1NZiIvY2V5JiRCYU5Sel1UTCkzSmpm''@;'; put 'put ''RmM6Skp1IWViVl5PaTBNKUo0PkZVdUNwLyFhdThmVEkmdTlFb09LbD5sQmRzO18rSXt3a2BAP3F5aEtXT11Me1J8I1Z0PCUwdCQ/fW8haSVffU5OeW4wJXZDb0xXRCokY1MoSVltKHc0fV11LDohZD8mJD9EbygzL0RCNHZTdTh1SVkjIyUrfDEudFA1IXJvV1dXR29GP01rbSxsRnJiPEVNJUI4''@;'; put 'put ''eHx8S19rezVObDRqO1Q4QHYkeF1hT1g/Lyt7PWskOVZqMVlhciolZEVFbHN2L1tXJHBbUDEqKEZQPVA/RWB5LF9kZ2JddURMSXM4fmhmWDxBRlVOdEZeOFRJSHtqPk5QOys4dzxiPlhVRj1YQW9IY1BlLio/JSl6S3NDYkw+RVJGZiY2OjgrSUpqcjEhfUlNPD52MHosRitTfH19UjU/O1FoSmNf''@;'; put 'put ''eV1TfVo8NT4pfXd5RmNrKHV1PE9aKyFvQE51SzVkWFRsNExnTDZrJjVyUk57N356VHcxJT5lKGhhfnhzUSVdeGxCKHsvfU9tOiFxPmVgInNaUWJyWCZKZWI0dnVqKkBhPCw9MTpHeVRxOEM1SG8yPkt5KTE6Yy44I2pUTC9YeSpBZ2g/fFtNWUlGLyFJS0BCM01CaEhdVT0vPnNoMFQmPWcicEYm''@;'; put 'put ''ZVV4X2xjMWBCM3kqVF1gJilKWW9fWG5MQlZ0ei9JOG0oNkZAc059Ok5LOCIxUUlFLGxAJUMwKX5HMDJ4XXMyK2JXeG1pYFRsRiZQd1RvYl88MnRwW25NIkwhdz8rWSwoNmQ7Vkh9QUU1V0w+LkwiaFN5bmg2QVJGZjoxbmc+QDY7KmlaWy9db1NOfDdYfHxsZH5eWlE+JSU5WD12TT44eHl3a287''@;'; put 'put ''IyNNdWIjK1dLPSg2VD1WIyRIZ3Z5TF5ecHExVjdZcCl9aVlbcnZrbH0vPH5jWHN9KSlVcnElSDJNR2QyRzUxdUlzKTkmTTExbWddXVJAUjtkKGhYZE9rNF13ZXdrdzQ7bGV8bitiX28sL3EpfH5fUD09ZVNqOWtZQV1uQnV+MC9wM0t4Ok4yNChNKy41PT0wL15pZHl4eFVhRX56UD92X0NkYUVm''@;'; put 'put ''OzVddnVqMjk8NU8+ITkySnBlP05Dc3NPSSZkcD5bL3tMW0ZQZGRaP0ZNOEYrfnw/fTMvPTVQKitSandzXUI4XzMmUWtUN15ueDohe1A3bWdCZ0QjRCw4amNxOHVmKDA/bTRHQl4zWCxFaTxscEk5WUhuPylVKFV3YSpEUzw6YS9ESCplXzxDQjBHPHRYLEZ4LkxOISlhI18+Y3BfT0llWjolWX43''@;'; put 'put ''X11rKn5xYkVVWVp9fnQiMFJHQHo0WGtTVUxTQEIxPGZKaXlFa0k+OnU+dHZIbllxT0hMKy9xbix+KGBbKTVzbno6MGI3JU14L0ZYeE1bMmEuTF8sd24qcV0uTmtTVkVmcFdPZFtPRT00TnpwSjNAMDdpUXdUQHJ0Lm96fiU0ZyxMMW8qdlhUa3ZWTFVBaiF0b2NsSCFCfkZUM3JeMUckZFc0Inc8''@;'; put 'put ''JDlrcSRkTXV0VyVhX2pZZzFuPjFSZHtOWVQ7NVJmS19aIz5wSzhAQ3c0JmM4JjVMbHtGZ3E4bzx6MF97eFdZZHJtKDhecDpuJiRtW3RqKCEhODRkSVdxPU1BIVtHR31PO1s5VVR3OjFlJE1ObVoqfiQ9S1VqdyxObml4L2x2L3JPOWZMfGVWZitRUHYiJkpGdCloQnghSk9ZfW9lV0x+bkhgTiQz''@;'; put 'put ''PGM7aEBKa1dNUmFAKGhvZ3I7Tm5Va3J1S19VRTVydTg8VDhHYkRqfkhaWFhSWGhuMGtxZj8ueCNkQDxTXz5zVzR5QX0lcHE1R35YJH1GVHh1PktqRl4mZX5KN3V9eUxoa282Z29yZ1ZkJiY3bGxSJVJDPWRxailxbDtqNSNmfHdsYV5FXVI2I0xkJnpeZ1AlJHQvY3Y9YlNdal4haVdCKSEpSXkh''@;'; put 'put ''XlljQntMb29FYV1SKGUzPWE+a25COXlHOjQuYXNLSXpdTDRAPlc6MTV6O3g7azMhNVcuZlImPVlQP00xP0hhKFB1THgxN3g5OVJkNXNRPDE2c3l4OWN5VUhvUjlGUnx4OmBGZSYyMT9WamI/ODZPNHFLVWk2UWU0YWAxXSN8SiV3NH15XTx5TU1Hbk9iYTZuU2tDXiR5YzVeXjA/b1N2dz9Za3Br''@;'; put 'put ''en0mYD82NGdEZm5jRTEyNURzNTgyUVR3eVlEbDZ3eU06aUg5SFtWWGZZLzYkZWl0T1sseHpoK08odSYjSzBSIWY+clI9OHxZbF5JaWxfUGslaTdJU3ZSUGx+UnQ1TG9LJVlHOEhkQCtHZyYyVXhJd3dnTy8qZnEzYm5FKmQhWyluYD17R31sVE98eFRgbGlvM1A8Z2dtZVozKyFLOz8/YD5IMV59''@;'; put 'put ''WSxhMFF4dSNSM1I3KWEpTHoqJEo/bn4zaSpjWWIhOiYmX2g8TDgzNTgvXk5zelJoYE40b0hdd25PVnVWbiltbXxxPSJHW2ZMJThTa2FJdVhzfUk6RyhXZkY7dm17elkmVHYuUUpDM1Q2cCJGamMwYztwY3dYViR0YDtmZG5yIXRsIilwOGlCUm4qYnI7d2E5dyIiNGQhdnluPDpUS28sUjV5STtM''@;'; put 'put ''MlBlVVlKRkdCc2gwblRvT10obUcwQCpXbSE6MCpkaTMjPEFgVkJtO11OLi51N1hlbHVoJTQxWytNWVN1eiE+dlhPfiU9QURxZE9DPG5rUHVDRn5ibytVPnhhTWUleT1kZHpfK0JhUTwkKGtFaStBXnpXTkpSZ3R0IyNpNClqKVVfeUpEVHdxbGBpcCF6U1ptaVMmeVRRQzk0Qlcwe1s6TjsyZ2ZI''@;'; put 'put ''NTgpaHpuaXZGTTNbWzQhTG1UXjwqQkZ3V21fZXwkJCFWcW4zWTtuWGJCXkVOSEQobkAwWnslfVhGJWF0VWlLYixUZTF7eH5kOjNnY3xFKUciNVksPWhJMkJVQ0YlXnxbYSshZGM0MigjVjghay5wYVcjZX5aYV4oejJERU1hKnB0ZV1aQilzNWZuZj96JFpkZTpQUGNneTcoc3NxeURCR0QodHhW''@;'; put 'put ''WEF8OiZ0YnY6WUBdZXk/QEpEZXczdH53RzwqLH4+P0RIQz1gclUmNXIjVE4zeiQjPlojOi9FYk1YPG02SzF0VEJUfUtbZDYqVFJ2dzxOVSReJW52aCYkSlM6UGdqNHJ0Z3o3anNpP2BoZEdMQmZobCg3TTNdP00sfl18L2h7diNuL0x+Nz43enhiaVk1JjBBfEU3Slo6VT1ALitwQ2hgOkowTjZm''@;'; put 'put ''X0RldVUvRylUUnB1VlNRUypla3c4MTZhNkJCJnlYYG15MHpeRno5YlcrUF9GVT8xaWE3L1QkOGo3fmUqRlJjTnI2KDF3VSQyTUhuIkY9dDw/Zmh2VTI9YDVCPFs5alQlbz43SV9jSzw2NSFGd10sMmMreU1AYnp1bGBPcCYmSVE8Ll1+XVY+M15KP0pBLzlWbnY5fmdRdmFeIXo8WXdmTXZ0VGhM''@;'; put 'put ''fjsxUCE6cUV5Y3ZWY00xdTZUODV7ZDVSKl1eR3V3Q05XXjxYKn4uZWx8dj4/QEoxfkZIfnc9KT9GR3UrRHMmNXdEfUkuIj5VSTY8bSE0TjQ/YS5DYnU1b2hZQHRXXkE1JF5xfTBaYDphMTdqfSxtXnNkYThTY1QlUHcxP2ExbTJGZkRNJWE4QnVWYXg4OnRuRTglNFAwdjh1RGVtOm1xIWx6TXNJ''@;'; put 'put ''RTNfSkd+ciJBKyg4Wz9teyg5RHIlQGNUOEZDeDJ3RkQ6UmdwTHhFI0E8RHhoSV1GeXxeVC5ZN1tyUDddOVFEfShYaX5vVGRReldGcUlaeDJIQiI4IyQ/UlFUen5lN3poT09hUF4iY2ptWV5wVDpvUUY2cE5iTWY5bnkhYVN1KUoscENRYGpyOi51Uzt2PUVJem9rQi48YndESXZbMDNIPSM0Xjs/''@;'; put 'put ''aH1tZFpaTSN4MFFddFEuUWl5IlorI21SXXJCfVAzeWd7SG8qTXo2OUhuakZgVjd0LG5pd3pkRGs0YW4oU3p3S29ZQEAwT3NhPHR1UjRjXUdgKD10JH57Q2JLfClJeFEzMG1PeUFIUkolSyI6XjlyQU19NFtucXRKeHZKTnBXZnV6Ql8wcEJSPDk0bjU8cT5EKDlDZTd4Inx5N1Q+QjsyM2F2KVJ5''@;'; put 'put ''NDh+PF9+cHxEVnhieCVxenY7LyFrNSQzaHpZX3pkUDJVMUpVQyh4Y0d2YihbL0xTUXBbbzNDJDJva3YhTmpMXzlYY1k9SFRQM00+S3RhT0xIaTFsbXE/Ml40akV+KyQ+L099SD9uXkFiTiQ9NTNNfllaa2gxJS9WeDQ4fVkhRmswWDhhZXJ2QkIsa2VIV3U/WEtSM3NjXTtCQXp7eGNaTU1hJElf''@;'; put 'put ''LmZyZGxNXVNsI2k1YUBWYSR4O1cwK0YkY0B4ZnZrXVVZamR4QyJFYUFDQFVGOjFKK21veDF3WUx5TGteR1BffWNWbmxnN3R9bFpGbT95Zj9LO1UoWEBXIXNXM3hCZmFNc0l4U2J8e3B7KipePTEvLlpQUTk5bll0aVZyUDAwdzNvIWosY3QyY181T301aToyeW9HRzhbKXoieGsjTHQ7fCJzPD1M''@;'; put 'put ''KWFJQD5MZzE/LnYxVHxuQldpVjYkJj8qOGlRWHZbVVp8al40NGBxLk96X1dnWXZ4RUBMNXxKXzk5PUF+ez5sQzRCMT50WXZRMjxeeHdyXixFai5rWjFDcXJdcVdDMElfZmo2cH5PfjdMYC4hQzgyUmR7Rz4kOWQ8X1JLPzhmcykxK1VIPVlBcH1+aCYkeiFhVDlMQkJMQXMxays2Z2IwQCY0M0t5''@;'; put 'put ''Nn5YZ0okWGNDZzpuTi4oTTslI098RChDY1JeTko6XWBNWEZuVjwjfihCTlNJLmhQR2JLXVZvPVcwMmp4cEN3RTZfNDZXbjprPkpbOzNBPGZfaXlgKEJDZmlfbEVWQEsuejYvLjBuaHhkPmpLflpYR3xKRGIoR19BOE5PT0JwbTNHQiNYVF0oQjp8ZF5wNTZHJDRxW1ldLjtvJXZbT1BkfDhKYCJB''@;'; put 'put ''U2BLZFNeUWM6I2ZaVjNOY0hoT1tNNVAiKWIkR0dyQi9oNW58Lks8K3ptVk5mX0Z0aXd8VyUkblQjOj94MHgyZiZiayF3eTRwWGAxLHAuOH5XS20zMWI5PmBBSVdRKHRmUWM/NCNdNCN7IipJVzREe2xQcGBeU3lRSm0pYHRhMERTaipQYz5IWXBQL3J3RUBLQittUkRjMih1M0N6IzNAbHpQbCkl''@;'; put 'put ''bFhVcjlRenBGOjxFX19qXmJ1Unl3VWtIXW1NbyIme0ZTUk4jamtYNy5QUkJTQmYuND5IQkhKLlo8SHdKI0o4flV3IiYvc3ElLnlLNyMsTWFeWkZbfClRZS4+d0hCWSlPJnFCaiNtKkNFaGR7IzB0QG43PGRDKldQTi9PbipafFssXT9QeChrUlF+Z2c4K04hcFhnZj1oeEU9VE97ISttIzt6fVF8''@;'; put 'put ''LCguMUtRL3Y3MiQmUW41ZihXW3JgN1ksNl5eR1tUO2IoMTJQPnxkY2tDODZ3eTcpPSMoRCZkY0BFTGtAPzFRaVttJFc+R3NaeDNWfkZmYmZKKiZXVFJ3Jk1heFAlZ01oRmVEc2J+LFFnY0Y+NU5DcnxvZWx5YTtZVndCX1hTXXJeY0RIUFNuTlklJmg/MkxgbDdxdXB5ciNOa3gwODQmWjh3PSE7''@;'; put 'put ''ISVCRiErSiRiMWglfDpMNEJOMCo/dS9YeVlPbyJiL18rIV1XcVpTQS5kK2Iyfi87KmEmOjs/S2lgTGB0MDM1OHxiayxOZ2hDKnNOOUZVaz9ZKV4jby55c1ZQKnVvPWJVTVd4RT90Sm5Ca3Qyc0Y1d1lPdGgjTjh3MklMYzY0Rm1wd116TmhQZ3tlfSQ2WXJ7dTpBfiEvUH50e159cTNKcUB9dmwx''@;'; put 'put ''ci9GV1Y8XiFBT01SRmJBTTA1Pko9VntIZnVfUUNaPTIlVEtXeGpfdn5VOkE7ekxQbyYiMVshP31mLik8RnxBT0Zxdnd+WG42WWNzTV4sR35KXm4oVjpbbEtCMXBRPXBSQjRlZENgNmBRb2hJPUJOW1FbUDAyLiVRSTZKTTxXb3ZDbz0jL31tYXNhTUA6akw0Si51L2orXT4qOXBNTVhiZy4jfnR4''@;'; put 'put ''dWAkUkFYZHxWL0VXQlZHLFZMRDkleldFfUhMYz1UcS5udyg5WHVfNGEiQzEiIXQyflAvQEAzWyxtL0ljI3dNb3MoIzspLChUZXMzUC9DOXQhLGo+OysqLHYib3ZyR0pwaFhVLkx3WUxfZnxCNDd1ZixYUipsSDxwVGd4WXt9UT1MeGYpfFUjTyglbC9tTUxkW2ckTSEpZ3ZnPGsjLn55X0d+Mi50''@;'; put 'put ''WnVoNWJhTVBxVk8jOnZmRHp9NyZHQzhFJTx1dHgwdUAkNkI+WFovNlB3Vz5vSzRkYH4+aTtKO3tiQUJHdHd0c1VeRllVZ1VhK3tReX1XM3xEdyFgV1J2OX4jTntPSylVLmVTJU45KW4/QHNVRH1lIkdYQkA3Xk5bYkNgRXtvek1NZks5Oio9dW4je2tIRE5QJTF8a20mNEd1KExId30yRnNBYV1U''@;'; put 'put ''RG1YVn5XcWhfQyJRZjp9Iz5iM2JNQ19oNUtXfm1TZXlia10qQ2RafDt8KW8yXUNFLixQPnNTMCl9fSZ+Ql5HYSpfMm1BODZTZVd2KlsrQnFhN2AzVXozaCUrWzFhRCxQSitQdSpHajB8fktMTUpsaVE+Qm15NEs6UjlKckRLdkMvc2pFQzE+M2pNajk+STFrdXA5aWBCfXFPWCJieX01TSxZcGxK''@;'; put 'put ''OntZOHY3ZCx0M0dKUW0uTDQvOU5CaTklZGRqUCNYYXQzJXBacWN9NG1+fl1bRilMZCh9VC9EJnVGcCIzSkpAU2lvYSxfIjF6fTpDJW9xe0Z5fE84QyhTb0N9N2B7bjtPI0xjYkkpd1BoU1tgZFBVaG90ZEghdTpRZzZ2Ny9HTlt6LiUlJkFIPVElZEN3TS55OWx5XjIhR30sc1lKO1BgTyQrIzhD''@;'; put 'put ''dSgkMnY4Rko/eSIrWVAoLi8jJkp4K1pSRXxgbFhLL2ZPdD56Uk93MkZFc3NYODcsXSROLiRsZ11IeDB9ZVt1aGdCIzpYQHouUyx1T0xJdiJpQ3lTPlRVY2hDXTpfKUFGUz8+NyhzfnlOb2cvTGw7fFFXelpadigxZ2p9JDYkYWIzaV96aUZ9SmZrajNdNSImKTROKFRyLkokNGlEKjMkYHRqd1A4''@;'; put 'put ''U34iXTdyOm9aUTdZPHBFPiZJPVNKO2UqaDVwfXJkcDZKYyZLdjsxPjN2SlsmMGQuKEguV3lzbFhNIVFAampHM1p4XkklWkhZentlODxeViZZMDhDU1JQKihfNi45V3tFaixOfTpXXktOVCR6T2dDZXhjbmZvRzZbNkwpeXxjUnVxdEdaWGlSODlyZ2I+T09LMHBKM0BHUkt6Y2UpSWlFUl09WS97''@;'; put 'put ''RVJGeUFHNGBiWTpkKztDamgkenpDUDQ7QWEjSz4qSUVsJixhTDlTQkpkKXNXcFAxSVJscklSRn0vPXcjPW1HLlkybHg3QH4hNTVTO1M4QVFmZTI/YDZGdG5lZyFTVVtncz88M1E0ZCFwT0Z7O1N9clJ3WG9bRUExS2ljITdicTZra1drQClfRFsheTBhJShtSXNbNWx9MDtGcH1LVW5VXkB3aGpt''@;'; put 'put ''QFlYRTJ2KCRuQHhjNj8oMWwqMHNTIjBdciQmUV5ISkleQFFTXTlbUnZOR1V5PzU9TD4zZyRnJDVedEU9V0NzSC92X0UyL1IqJCYwLG4zeDh+QlswQS8vaCpXSX1XKUp2W1trKmNIVH4vMSMsV0poY3Y/bldwWilPRTFAdzZyQig7VV1EZX55SGJAdEFWJUMwL2JIQGFsY1JmIzY6QCNsXmI4Mjos''@;'; put 'put ''Wzs3Rnl3VFFafnhFLHtdQjg1SHgiKWUkY3QkNiEmMCNKXVckNXVxSDcwJnZ3Qj4+Tm9yRD1EXyZjVXIjJiFqUkFGUj18NmhPfXF1VGZpRzIzdS5HTz1HZ3ZwKUBkS0xAVkNraUtrRTdrbFVVb0klfnRbNU8jQXcsZzJ0QzFjZ2BQY1N2KXd8Oj44Ik1oc1ZiWWJWaTw+JnZXbVFmRjlJRWlvXnBz''@;'; put 'put ''dEFOWHoyblNpLFdkek03Ynd+Kz08UFZZQjtQXnBXRXxlRDh6NG17NTRVaiM3TGJEflZDJFk1Xz5VJFtONjprQlt+YFFFM0ImU2lyJllwS208cWJnNjlnPWZyJkB1QXMqJH5xUjIjbXJ2X1RLZn5HN3o2PXRie1gzeztLZWZtdEA1NVlZPnpDQFksSikrPFNMQjd1Wyg9d11wYEZPI3gpVzoyaThz''@;'; put 'put ''PHVfOCg4NStLX2lsUEhnWEljdyFAJnhxbW12NTJgPj1TMkJAPUwmVyZdKTRENDx5YyRad21UeEwmKWVedCR8Xnt+aGJtM1QwYGFbaiptMUxSO0VmdllkKGNscz9CaWpBSWYlQF5nWnRoaDFPLExtVTAlOFswfXFIdmc8SHxEYTgwdCsrIW5eNTNZPyRxN3BtYnguanwjJihkKk5eJlVYYkdsNTR6''@;'; put 'put ''SHpKZUpqZHNRWEU5W1pFLjtbWjpzRUUoflQwckVjS2Y2QGE5dXJaQGo9KTdtPzFRb3IjRlZ+TDdvcC4hQmFdbmJ7cjkje000OjUyO1VfX31rLHw8WSV8ck5qR2UiWVM8Y0c0KCkvdFlpQT1CJHYwQEZBUzY4RTQwM0xha1ApUGg/ZFNTSTNYem5AWW5MJD5TZVVlY1dLJGw3bDdaUXoyJTNnYyky''@;'; put 'put ''TCN0blgpdihHaC5EPlc/S2FUPTZ1Zip6Vl1MZl1MKGF2LE5UbFtZeHVmdyNXWHZRQVpzaCpXYU97LiNzeU9tIWVSdFN3TFRvX3l9akxwJklFKE0yaUorZ1dRSiVgWl04Vj0sOGlQVy9XQXVeVExEXXROJS8mNm9FNDYiMUZpZ3xFJVBvNEpUM3cvK34hP3Z8MFVBVzkrc2cjfU9CNzJnPSh2L0FA''@;'; put 'put ''V1RpQk5zN1o9O2d4TWluIzdmKlIvdSMrentfRX1WMmVTWUtAZl1GeiZ+eFJKcm9IUzZDMD4yTUgrND02WCJHYF8hQihPOHRiO1oqPCZFISkweTZgcEFdakpNVDwkP1BoTyhyJXc0LlkkVkNqdj9+fn5gUzxKJUJUa0g5ejExNmV4ZjZXWzlTOj46Kzl8I0E4emImO1E8eUNDa0dRKGJtVFNKUHo5''@;'; put 'put ''YUtEV2UmUH5wOUhodFZsO0N3ay55SkwkTypeVEJ0QyQrMU5Ld0hARTYqO1BeTF9eIVhfcyVlZFAoc0pURlFmbms6TTs4ajFwfCE4MW83amA/ITpAflt4KyUyTnJNOFQ+NDU9JUY7VD9WQGVGPkw6VXBxYHc8fGI+alF+L0hLZnpQayFWaEg0Z1dmQWEyVT4oZiRSZnNyLlNtRCllQFBqTXdWaDx0''@;'; put 'put ''SF0qbSh0Z1MvYnovfT1rfEJ1ZWomTn0idVNLUkxJR3FaJU5CZWI8VS5sYT08IWx9NF9vdD9McFMjJiNnIytmYTVjLEgqcU92NSJLPHUmQj5JfihdImlqV1RqTVB0RUgucl59fEQyK2AvLnpfVjdLWllhQF0+SlY4OnlMOEIxX14sU28vKE5LP0dzTjovMCF1Q0UyaFZvZExrOip2L35HLmQqbE80''@;'; put 'put ''YmE0NjksMzNaP3EzTENCQjA/Vlo1aSorTFJkMEYrezNFW2Vtfj1iNlMoS2loIiYwbCFvLylEW1IsMEsyfTBHUmJ2R3NNUyJJe2F1dWtUQVleVTBEKmllOSomTi48ZU1SezcpU1suIXI9TV9eXl0qeURLc2NDZSIuW3Ale1M3RWskWFJiOS5CIiokQDpLMFpWMER+c1ZvXSMiVi4jViR7SFtFRURV''@;'; put 'put ''ZXRaYUtlImRXTHUjQ0Ahe09BdHNOY2gwejAjfERhLyoocEppIWRdUHBmaGRJKEU6KVlbS0VXaUNLaEtTMkZTfGxVK1RIY3o0WE1DUkkqdEBvUEopfV11O3FFTzdITS4lMFhFXWZrNCxjXWQhTEx9Q2t5LF1OPz5fdGpDOmpRcDkxdi9yXVRVN05+I0FQfD9FQnIrKyopbW8/Tl57bG0vOnVnKHFS''@;'; put 'put ''aT9PSiYxPlApSDdWSjpGeTwqWD1OcXloc0BURUBqMlI3VikzcH10ckZ+VD1vM3FJVyVTeEUjRyRPNFlUODtxUV9tOzc5eyt5cTMkZUAzbjAldEUkaiVXXz1aU3xLLGZtNSNofnQlVndIY2AuN0s6YXdRSD98Z25ePCNbJTlVYXY5PHQ1dUs6IURaZWR+NFh6RiN5UT47ZERyZysuK3B8dmNtPVJ1''@;'; put 'put ''aU1YJmh4aGxwZ3gmYVZ4W18ja0hIRCkzZVlNNUJLcldGeXJOclEoISl3ZlpJZzRJYz5JKWYjfUpOSTFOITI+Ryozcn5VdH5haFZhMldoJkFRMiRpdV5oan01LiwmKzAzcUlOSyoyaWwuWWJGYiZNe1UsYF5CbWhweEV4WE85WmU+Q3I3e3NfVkFUdDhwckBOPShuPjlSX1okLEtaMU8rIkJDOmA7''@;'; put 'put ''S1tZNUteQkt2MEpOVHhNY3YyYDRyP2N2a0xhUEVYPDc8S2RzR1YjKj5YJT9OOj0xNlc0U3IkTUh9fEJzUERSNEF7XmhTMHpCR01eP1hHc2hONkpzL0llKl5CZDAyd3FTYmdtVmsmYFdNYX03VFhofj55LHk1eldPPXtWQz01ZnJZZ3pRZnxfQkwpOzNoazx2Sm1sXVVbYjovXnxYfS9iWUkkeW06''@;'; put 'put ''W0VbOlpLLHUzfURNeDpMMGRRbGAxJihKN2lJJCtBN31KTTlbPFVtISo3KCFDbD81LF12XntuTUAoJDRES3FPb2dPWGApY3BNcDxnYjZkenp1O188eiEpdXwrVE5kJEVuOC41MTNUZ3dlKE9vaSkzanxec293Mks0L1hRQHdwQDVEI0A1KG9PMCVVNkZKRUhFRWB+Nn42L31RdnhZNlVERDxdNG49''@;'; put 'put ''NU86QERmRkk7N2VaTnNDRD5xVXI2Wi45VDhYfURRcysmS3p5Ok0+KnlpQC5ncGg4SjQvNEBEMVZtPEJ6NTNIWnJ1fks8alJKJC5nUzhhUn5DMGg4aUo6YSJYUl59QXcwJG1XUTw6QE8zL0xoVkplZV9oQX0qSCU/NyV1SFhYUD8wbyN8WGNEYnU0VFZMdUI0NGVaNDEjZTQySTNJUEUpUCtGOHhq''@;'; put 'put ''TzdAO1J1M09vMll2JTJ1ZmVhb2QsI3t1Z1hMbTQ7VmBOUXhOLEdASmApWmRuWzVCUDdYR2ZFOyROZF8oOjluVz5rSEhmSCRxYk97fnkvcltQPiRYSD5OVk11e2xodF1yb1BXImVmY3NtfCVRNUk0T3pqOWg4aTNUUnBiaDE2TyRPLEUvMD9gOERNXnkyeHYobzMqUns1SkY+N2UoOWgqU3giO3h+''@;'; put 'put ''THBgWS8vUFIiTFooJVZRMVtbSy8jPXRJXkVpMzBqPztNXlFgRUhvM0lYcjxabWVzR05XU30vJHUiY0xgRis3PWUmQzp9Ym9gayR0SUR6NTV2eWlZX1k4Y0J7a349SSh2PCZRUzNSZS9kNHBwKDVMVV9POkM4NHlPW3wmfT1FJmc5VDJNTDdjTXU9djMvJEFDR0pTdi5AUEI1XXYyai46JFpxQThT''@;'; put 'put ''SFlQRVgmOlswYXJoMmg+MUhsUHVuSDhAYFpQdmUxRyxQez5YSVZDcjtUIzpCbGp+ZlJZLyNTNzJCdFR5W208O2w1P0s8Ryk+T0FTbHwjezJjcSMlMX1ndUZ+Sn5RfDglUWNUSnNeM3UrLDU7eGhASFNud0YhX1FTUUk6WkBNWT95VD5COjRmPz4zbkArSHRyVXNOZSkjSzl6MDJnLzojQDBnX2Z0''@;'; put 'put ''XXBdTHg/Y3hbWUdve2lYPkdfIjJ1K0BsSG1YNi80bSlpVnd8PmklVFsib1kjJCFTcEhuU0Y5byQ5TCgsfCQyUX1DYCNHWVlBWWZYTklgV2l5KCV0QDlzZ2UhT1o5Myomc3Y6ZE5PeXRPWS46RnpEKThgMzR3KmFJc2pTZ2ZMJEJpUXFnVFN1clZfdG9dNj1dbkxWclpnVn5ZbilbI05tIytQazdK''@;'; put 'put ''bSEjQGp+KGpydz8/e0NIYEV2NmtHQmpMcyNATVsibXF5UkM+fVElfHVPOjUrQVthLyNYYjJyXy4hTWVsJVtpI0JlRlB5cVJgSH4vKkBuPiF3JmJ1L1spYV5KLDNva0tJR0NrNyFiQ1ojQCoyZCtzXWN6Oyw4aWVWWF07RTgqK1p7UylfdXgyW3Y1QyozXzk9aW4wfUgyfWh5N2JmQCRlSmx3XTg8''@;'; put 'put ''Pz4yQEBBZExuaXl8XlckQ0p1XzFNYFJ8bzdQSj0oQFt4NXpwWDJVX2tFLHg4WUhgc3w5R2kmaVt4SXh5UGJKUm9IdlZqUUlOK2hCMXU1Q3VkXlJVZkJdOygqR0NDOSx5QEdZfD1nP3M5KVl9THFdXzd7PV0sbi9EMlBoVCFIOV5xMnd5PTZQJGJ+Wix5QE4pUHFxMk1JLGY/LmxTWn5HXWwmbXZe''@;'; put 'put ''d25WKlQ0JSZ6b00vPzNJWWIwdVo1UzlqNSFXX29wWnR3OXtsJHZtKT0+cVpHM1N3PUZxeXtAYiFXJHhQfCJjO2hjPFI3Z2dKVlk4amQhSHBoNV57N3NZSXd0dWN9dkY3Z2tYbEl4MGxRI2ZkSDVHLn1yeHBPbVlvc1VAOVBLOmJySE4kZ2gpcmshKjoyO2FLW3pnd2tMVShXS30qQWttPk1TPjg2''@;'; put 'put ''IStoYnZAIzUpSjN8N01Ien4sNlNDWmg9JDpaN3pGViVEa2E9ZGRGJWJ8RzRLdy5kVUxveUxebVh5TH5HcHNURF9zKS9HdXtUNV1PU2JVc2NXNSQzVShzdipiUW9VNDBqJDZFeigkUm0uWE1bYF4pQ1YpaHJ4Q05hTlQodEVlcHVNNyJee0Vhcnh7RWYmYiM5OEspZjU/YHUxTWNBL0NINz4jNVV3''@;'; put 'put ''VEcjL3t5WUZYT1BZd1B2diFlW312KnNjal9pfX16Xz4rWlZEOiM1UkBoNyVDNyMlKTBwOyk8PkgzYiZQRTklRSVUTD1iWUN2alphNjFpX3BpMnR7Ulo2bDV3TUpRSU52JHtHQ3ZbQF58L1glcihTb0M7cklIWE4mW3pPLl89eTlRSFIoJl5QNkE/UDE8Ni5SMktuUXx1LkYjJDBtY0BzaUZLbjs3''@;'; put 'put ''Xy46dXMvd1FqN29xZCRjWSJMSWouIUkrI2ZDVX4wPWlQUm1wYSZya2xPQUNUTnJ8IU5xez9tS2olbkdueUx2b2QpUTFpKk9IMGt5cyZwZlUkZXMjOjVHKX5xalBsOEU1Q3h7eG9uRmM5UHhSUXEiTUg1RjJ9cl8jY2w4UmsyKi5iWSsjU31TMy4pezVwbC49PHdZfD42dEVhW09aXTIwXixzMmYz''@;'; put 'put ''MnxmL3d3djRvaT46dn1GIylqKTYjZV0oOl9IN1hRSH4sOjZXV3FWRGFPX3EjfWZ0KmsuQz1SOVVLfj5FWTpxOkxJdUFPemJddTYsX3NGW3J7WGVhYSl1anw1JSwleHxla11qSz1FNTl2e09QViFLfHQ+KVtNSyteTnVFVWY/SUkyJE4rQTxCb09HU3AxZyFuN0xFWF1xRWNjaFhLRlt4WzdCaUgs''@;'; put 'put ''LixjWCNUT2plJk5rW1NsTTwrLzlQbjNKe2lJOjxYcHdjVGhpTU0iRDJKLFFsNW0vQj09dClldj0/QC9dNVpuJDwhMl89XUgpO2ZgNWM9OGd0aDQpcEcwWyw3Y0t1KXQpL01ARjpJJDF9eHIqd0AvRiJVNFdmLy87IjRWZVBDJSFPZUgyRH14NmplRGRwTn4qZkp6cE81eGVTYWxrUSk6bE5SR1lQ''@;'; put 'put ''RixCbXFpVyohLk46en5JbCpabl1bZXFQKExVLGU0Vkc6N3c8REdUNER3MEZUR1M0aV41cFUrUG5PNGlVIWNoKT8wbFpec1pYcV07WSxXL3RKdF09UWtCVz4saGRtSVFaLiIyYEdAZVNNe1ZCKltmLzBYSGpgKH4va1A9O2BvOG9BYW1pRXswak53cW9RTE4lci96NHhyWXE3L059OG82W0tzcSVz''@;'; put 'put ''YClTMXN5SzhgI35KUmFqKVtZWkZaOUJDKHJWZHJDI2AmZyo1SygpUGg7UldPVVZhJHhDVUtQJHc9RiFkJUkuYSEmYEkiOmE+IXA6Xkw/bFo+bVc2KVY7c1I3diYseUNkfV80S2FZTGBFRX5SfTVXe0NgXUNuQnF1Rkc0TW08OFF1eyt4U2d0SkZDQmc6QmBNRG9KP0F2fmw6IVs+LHhlbnxmbWZt''@;'; put 'put ''WWVwdEdGL3VCYkteJk8yIiJqWz5aXnQ3Iit9JkJ3MXtGWzw/I1ElO19hQzUxY1tqW0siangvYWFvSDBZYlN3fGFpQ3V5VHVKM0N1eyg/fD9ZMi4/Zl9ufThDW19QcD9jbF9QQk42cUJ3dTIwJF04eyQoMG1Rcz54TWQxJk1kI0hRW1IvKkkhUSgzZkZJaHpJWkU8aCFFPSFSIkdXS2R9P0BibilP''@;'; put 'put ''eVczUlhUdzY0LyhgUiZqVjA5JFMmZzswNkZdM1MpOEheZEAocXAkdyhWM3dPYXteNWYvMj1pMGl9Zks3ZT1gKDYpdm1KWFBvOlY8bWJ5JUwmUSVJI1VbVnpPNjM8MDJrdEU1OG5IPWw/eixfMylQS2hxREBHanRIWnp4WF5ueXUlJEpmfFspO1g+OiMvanMmZC55dzFGRmxdRjRzNUNrUCtfIipn''@;'; put 'put ''RSRJZmE8QGcyOFZsTDdWZ0pfXjo0bVBQSGlreFRdUHUmUSNNZll5Ky4pcDR2X343SjAvalZGK3pYMk5tUmsyOHd2KERQI1s7KlJoKCNWUlIkR1tqX1s8PGw+QlpbLjIxVVo9bEomUnJyUWdaPntIPV9OYHYqSFJ0NVA3PjJCLjpfcXVuZH5nTFE9VGRnXkIxLFUxeGBxY2lZJGZJdXVVPG0mW3JA''@;'; put 'put ''ZSg5LEpSeXdVeT53QF5XYjkzPzh8SWZMV3hGQXh7ZjV9IntWZ2NrbnJ2Kyo3a3IrOWFHZnx+en4meyMoaThEOGoxbFFjYVh1QnRmUkZSaGpaWFMsc2RZOFtJKV44Tlp7V183TlAzbHleSjFOY05zelNbTzY7JHhRIWxCRXNScmBWb2VIUUNtJE1bXlA0RWU8ZVc3d08uOVtzMnJxfUgpQFlDYUM+''@;'; put 'put ''KUFyaUx4bCNvSCJUQmZSZ1lIOH1OVTVyfWJZKlBscDNVcWtjTHkxSX1DPGlSIzhwSE5tSE5PS2ZSWHMmZmohK2kwIm43JH48eSFucGFneEZ0TE5YOD1yQWRdaXMrcVl3bE1CYjE5SjY9Zm1gJjMsIUQwe0UzX2ckYU9dfEVqckNQVFBVbDtBNipjZH5kcWY0QEB7OVRiN2VbIzdYVEcpY0A8NmxI''@;'; put 'put ''a002Lmk1WVBMV2JhO10oVWJ0XjZwZV4qJFB9dnUjOT4sRmw0XylMSmdtWTxFQG54PV5rd3krdlpIOjZGWHp7fl1TdG9iM0c2Oj9eKHVjaExDfClvJjw9OFpJV2x2LlZSZ2U9YWEkV2ozWTRNW3h2Tlkib1VZc3MkcVRxN01hR0dEaCxuZDpCRT1Be3Q9PThudns5RCpiZmZAWG1SPSQjXUBpR18r''@;'; put 'put ''Sm5SKndwKUJMe1lHSl9ZSVgoS09aSzVqdkhoPERBSm4yVyY9WltIKS5sLjZHWTVtYW0pOns0MXRRLyZEbmVoe0tmTnZKSzhHYjBvYkJgSFY3YD9UOGh+IiIiZXJ4JjNubCQsL0ptc21gaz58PmkpIVNde0Q2aVI+X3pvMF0oV0RNeClYP2ckRkgkb2RVe31gXjZXWypkREo9WS5XOlNgW0cydShD''@;'; put 'put ''KVJIWGNFUTUxRTV7ZmVZLz4wJn5GSntfIXdxZSJbP2hPIUgmT2ZWXSxDKzo7JUEhTTZEaihpQUdZJn1SKHkzJTw4RmhCK3V1R3BhOXNqLHZvTzF8YXQ6WUo6NlZxWiozZUY2X3lIL3MqLzVye3ZGZzx0WEc2XXs1bFRDPk9SWFpUcTEsbWlCezEuZSxpS2F7KS9qMnZbXmFocWddPmpTOW8lWzA0''@;'; put 'put ''Uj0hUyE4RG15PTZIdDhYZDZea340Z1B0fDBPKChGeDgiTD9paUR6VkM6MSg2eURvLnprM0Upc3wicVhmQkhpUTo4JnVOeUh0LzU1MUJfPil1YDBLNnxMSF02Zy4jMiNHN1dSTjwyUUNoYyt2Klp7WktILzEkNF5jTStjbyN4JGZWJUlSamo6OSQyL3NDRFo0WkxgdHZAb01gLFldMCRvKU5weyt0''@;'; put 'put ''O18ufnc8PmVQX3tpJD5tTzpEanB1VXIjcy5sbUlIT3I/RiJII1VOcXgrMy9OIitZPWUvKGJvQFQ8Q0RbamNfInZdQUdMRTV4QFNza15GfkNab2tVLHV9cXRLUHdeUEsmdGMqMHQpciZRL1p2alJERkczb3tOOX0kSTFbbCxKNmhbPTwzM3duSkJIMCRxWyR5RSVZN1dAYTQwS11VKkQyRTU3PmdZ''@;'; put 'put ''Yz1AQXNSa0VMTDlyZXFyP21+PCFXOlJYZTolNVVAWj0uIV5AITYoISsscSxMNCxmXXdLUmtYSlZQI1cpdSFSfX0xY2R5ITBjJl9FNDphWF8wVVpAaFo0PUNvczlgXnVQSndlO0AvZmxBWCVlJnJ4emFvYWdNWStXYEl0ayhAQ0l4dCxlb0hoZkx8R2kmX1g+KnZWPFVCRlpdWkNsemA6eUduRCZm''@;'; put 'put ''RGYhRjZuazY1ZHJtXUhRaUQrOVtndS5IJSx9ZkZMUzM6YDwsbCZvY3FVO0smLFpMUGJvOkYxW21QX2BAOER+TXd5WGVjfSRROjJFIThTOjoyTCZ0QD9bLENhYEs6Xzhwcnl3ZltLUGJzZ0R2VjV3bW1vXTcyNy9meUJbfkU6RndrU2ZEUEdDL1Btc3NObENnTmRmYyRdYDNpTGtzK2s/YztxT2ZC''@;'; put 'put ''NShjejAuJD1+Ol1XU2A+MUouOiJoK0hqeH1yYkU3UUliJjI4clEoTCE3R0VdWnQpbSllWnYqVzVbRCsmbClzNj1vL3VsWjUiJFZoLCtabURQaSpBQGpYL1F3I2tlQ1smZiJZbzc1c1BCUlBsZCpHU2NJMj1+XlFgSDZqRjRVTndrfGpfM2ViT0M5bEYoYD5mdE0xeCI1R2tjOiZZT3R7JH4pfig/''@;'; put 'put ''K004bU5vczRmLDpfRUFkTEZ7anxSIzZuXkg0LiMjOiEpWGgwZEp5REwsPE1POiQ5WSo/TVNxfnBqYEhbY3o7eSZoVm9bIl5EMzRaZj1YbG8waSNMcV59UV5yTlg0OyQ9cVRZWV0sSFJqTl5EbTV+aElHbT9dbXokfi82a1JSQ3JKWk5HPXAqMFooX0B6VVI9TTdraXE6WkdNczNZPzoweGk/YVpw''@;'; put 'put ''dD1PTjk0JG1HVmkiP0p6Km0rXzVQNGR7JiZFfDVgXmFaL0UyUHxwbU9wS1Z0ekUrYEokdXhqVEI8VDY4eWB7JCpTKkl3RiV7amR0VVBdKyt2UzE5b3JDeX06WTN2dTBlKmJsUXt4NFVlSEJJUnE/YWE7b2gjUk9zLHRpR0NOPFkyJkN4OTQhaCxhTlBWSWI1RzEvbyk2PlZQeiVOYz9MOEJFYl50''@;'; put 'put ''Okc7KCZELHpOZmk5LlQzanhsTD5mWU88LGZsJWZTMH41WVF6PWBLUWc3TjlKYHpfTG4hcD9DSk1iSXZtLlVIeXh3e351Wjt0O0BnajA8InxNX3syei9CVlRhbFsxRGZpe21NfSxPLn5LL3IiUkRQPjFxRHZ8QmNRSm1hNz0waH5KRFBmblYzVXNnRi5RTX1SKTxMLjpKUlt0JUFAfiZ5JCt7JHI9''@;'; put 'put ''TUcuIS5FUElUT1ZTS15ffHkwVSU2a0hSSls6YThKY3I+T1VoYmckVEhxeHFAaC4vKjs6RyVFO1taeT9bOSw7V1dQaEtHcXp1PmdKcGtddHhaTlRyV1t+S1lOW3w/Yj1INWBZOl9xQVNDMUdNMEtUNVN4UiY6ZDliOTlnX3VlJV47RC5ILi5BYzp0VyFFYVUqOFRvYyk7NWdRR1JoTjkjaTQuTFss''@;'; put 'put ''X15tLjNfQ2taLipXMl9hdTRYcjdjTyZmNUp6XjE6Sl0qP2B8bWwrLC5YMXppJFI7MVckRjddNkpge3ttZDduenJQczRlSzVke2VDTHl8SCN9SmteQmtbT3NnM1JebmEyIipjajFKaENxPT48bVRfT2BUdntESV1PdnRodE1dbDx9Vz9QSyUsQj1bV3hoKkBlW3dMRGhMVVdecE1qJnpePm9lMXkp''@;'; put 'put ''NVpNO158bTlYQ2FAeDhuN1NoKkZuJmlmZnhmTmo+JjBGNy9waEcwa144ekg7XUAzS25zNz9CRFZbWVZfZDlldyJIRV0vc34kVE4pZShWOnE4bE14I3EmPFB+Ll9pMUY/aSo0JUhIbS5UfTJMI2pNRHpQYEtRP0lnZ1FLMFgzZXJ0R25UdktLcjJMaj5UU2t+QnIwTiR9VEhqQlEhXlIvOS4pRGFQ''@;'; put 'put ''bCNJem9bVW8zPkEyNUZ4azUmK0YjSXsoaGc/ST5MVmM1KCo3PkglS1ElX35aeypVU0lCMGRzQFZFMltlLFhPM1VnUVBCVDhNQXhwOzteKilELyRvW1FsbUhwen56YTVHLCtWTyFdRW0zK1UjTkZuXzxNYVhFb31vQH5mfGNWJnd7O3pCKUkrWTNiRixINk9qMGJeNUBnYlo2K0hBUShTJDBJIU85''@;'; put 'put ''Tl0rRkVEYjw+cEdbX0h0N3p3QnJ+NmNyV3luL2NIakFFI0UzRlZqe11mUys5K21wdD1gezdkKUYxI1l5W01QN3JFVDleay5HJU93aXprYD9jdzBoV0pQQ3J1TTl6Yk58WmVQKDwpY10kMmZZbUtoPTZKSFhtYUUyRm1ORzU5emR6YnFJbiZGfXAub0I/Ln5yVWkpWmQ/MTZ0Z2dOSW5yKmM/clk0''@;'; put 'put ''NntVJVJnYyYlcCMsNlBAfkJHJFNnX3JCIVFOJndVb21wPTU0TTNtQUZRPXtKNUNGe3BVMi8qRXx8d2xmcWhdPUdIZFtxWVZ+dFBfWXdNLGI2MF1EOU9JKnV6Oyp8VSQ0bVMpRCslWGouZyxZfTRvO3Q1PHFOMy9jS3lUYndTMFY0SUVNN1IodSt4cjFyXypWPXBQTz5WWXRNLz01KSxeOTJgM2pp''@;'; put 'put ''Oj55by4kSWNtb0E0IzcyKDlpPiE9Xih2PHFFLzdiVXtdVFhfeF1XOFYvYnxqJl44elUsfF4xaSE9PlhqSEYjJG98P2FtSTtoIyhnQGVJb1d7K3JqQFN4WCxAWTxBWzxDdCZuckt+ZyN1TCRle1c7QCVrJjwlfWpyaXcudSkqaEMqeHc/TH08RHFrTT1eQkAxPVFFdCN0NFVaZnR6PntBbHw4NVcq''@;'; put 'put ''SE8lIWNgLFtzaz1WQVRvWz5qKV8pLz9rYT8/MGMrVFMsW2JvbW0jLmtfPT00JH1mKnpLKnRmRHEvJVZTdjFeS31DNSoqTX1RWndELFhhNClQWlc4U0NoQF58fV9DVVZCUWtiJXZxanpKcDhxdFVfaFBbZmwvR1BjSUxuZHVaeHBzVlVOMWN0NjwwZnYwVXFBUWFORWZ2dVEoMyR0aXdIaHBNSjtj''@;'; put 'put ''PyJ3UkdiRHo/bkQ/e3BFVHd2QzsqYCROc3J8TGR5RzpsMFZ2W0kuc3AhalNEMWhKdzVwWHBneChsc3NicEk0bFRMdFpASXJ2SjEuVEpHUSZDZm13bEZxKHRJSlpRV20uSyIpOT05UFc/ZEZbKmpRaT93NUklJD9IZHN0KyNzfUspVUY7aX09Y00rQmNOblQlNz9RdWxgNX5tIWAxUCReTEBONzch''@;'; put 'put ''TiJhRWw+Z0ZEXz5QMmpMfSQ9cENiZjoyJGlSZ11GRyhFXWlhPl0wdGw0dk15T2ErYGhqY1RCa2FDPXxJfHRjYVhpWXlbUzBzIzI/OkUjW2hmJjwsQmY+cG5kJV4+a1gheTxAOyo4KWdiX2RRSk4vQX1sW3xXbSJUPnBoJkJfPHNhLFJLTnU/YDduVis7Nys6NFg9MVgpTk0iZX5OQ003MmJ3X2wl''@;'; put 'put ''LjdiQyJxVipsdyhjdF9HeVFsZkg1MEhVPH1XZjN3RitQWFciIms3QylCKV81NyYhLmorfkhTIUgwV1M5ZEJKJTcoMWh8fVt2Sj9reUwoeUhFJlJpPj4+PmVlbDglK0QoX2RUWFZNYmZERHFZOHZOKlM7UHAuc3RINXsyQDJwVlBbYj4sJShPfmpXSXZFQi80M2kjaSQiOGAwZ0dPXlhEeVhwKnJt''@;'; put 'put ''akBtV3hqZj5nSWtzYEFrVEN9KnY2V1ViTGlGYnJ7KllTdk8mdDxgZj5rdl4hTiM3eDgmYXdBKmxeZHFDTFZXT3BlN2FDOTB1ZiouaHAzLFt5eHVxcXcvRCpRamEqUm55a2RwIVhjcVRGZlVpZ3p3TWh8U1R7PGYyOz5IWFRIIkEqQGpZR0M4ODp0ODZRVyU3Wmc5WVlbRHlKN2IhWjFgPmdabUEx''@;'; put 'put ''Yk1EYTQqJHtbTXdxbEA1Om96VDldMCgkYDFqV21NSypCOHwwQE9PUHZffX5xR3IuUS5MIyRWTUhPTGR2PHBCMVJ2NyFAWHoiMH1sNXRrSztxUnZ6bVNkVFE1JSVRaz4zK1d6MFJ4dF1qPzYqe1VIcz0sKlhQR21JU05SSSswdjl5LDs/dVBee2NbenRkWUJ3Qj8wbGU9UU41fG53UWl5SS9NO1Ej''@;'; put 'put ''aFo9a2s2O3tQdFhCS2tQKHRLKUhJfDUjRTtvR04jMWNDfFRmdjtDd3Npd2xeJmw5Omc1ZyZXPSpzRDZHWztWTzs8YTEiRWF8ZFhiLGdyNjdGISpzO1A+d0tVbERzYVQ8UGxnX0xaZmVWXWElUE9tdmNbWHQrS35JdiJEPVBOa2w1dltaa1koSCgle1A+azM+O0hkOCwmSWJRZF9hWk5QK2VnPU8k''@;'; put 'put ''KEcrJCtDRCVLb1hmWilvUlErLHkqWkcsRjMvSjV6KEdrQX5gaEc+XlVONWhCLlYmXXZEQXRFamFuWGJ5Q0E9OEtUWWtgZH5gNVVrN0tobTFRdzVvX1VvOmkiOFZqS2hCKl58VmE5XWM+IUJPaUlmM3h8WVoiRmkkT3l2OHZUTyRqMXx3fDohVihWW3IlX2E/NHgrOGJ+aT1xbStWJWReJCRbMCVQ''@;'; put 'put ''U3ZONmsjL000Uyg4TnZvKlY0fShhaWVONXhtRFBSRV8jKyFTUlF2VUNjO3oxQjV5S2owcS9yMGFhSV1LeWdJdDBbMXArVmpXK1hMXnYsMlRDTjgxfnA6Q09wOislKl9JdTphSjk0YSZ7amFRK3woRnojR2g4WEhvbSV4RHxTZnJzQy56a1E7dFQyVkB+XjVdJVFxNDhRcF0iditmM3VMaFp9Nktq''@;'; put 'put ''RTNTeFgxZHlgRGlpL1lOaWwkcGE+dHJZJj5ZNDN0Kk0qalpvNTxacklrezIpUUd9bHB8cEJwdk1RNyR+KHtgI1lSYlNiRTpAflF2cGBWVkpXe1tSRXQ1SWtPYiwsO2JrPkclYkM2cGF+YDkobkFtU1lTYEZ2bTI+TzB6Z1ouPEpbcmJoTHhCbzpZNEEsPF1JYzM7PjBWOU5YVDcqVlBrfl1jKT8h''@;'; put 'put ''dFlZZ2JvLDdSXWxvbThEcllwRjBuUk8vOVNJX1JkcytVM3ZdYzR2KSh6bik1a2ldXz5xNVJaJn53PzY+VUp9aGsqRjA4e3lkJU5IZDd0MF9ta1pQXyg8W28me3dWcmZ5KmcpN0BWfDxbcHUvKS5gJixxYUk8VHgwXSkrVGNVPi4wTXgrW31VWFFscXkvRGQseT1CYV16Rjlqe0tiMllCXUl2XTN6''@;'; put 'put ''TFg7TnpURmNrfF9lUXM5ZEpEMy9qV1FfJXVPOiZaV21JeHAvMFJfV2FRbyFCW2RUai5FVmY2fV4/ITBbTzwqQjdROjd2aTh7Smd2fDAhdkFhRyFzTT98bnBOSHI1KyhiS0x0fGNbU2JLP3BBWCUkVDxyOEFILnM3P04hQChsJElWRVZhKyNaVEV9JiQmUCtibVQ9Izw8IzRLYiROL1Y+Mj1lJF5m''@;'; put 'put ''JFBkemcuZGZPbig3a0cmYiU+fG1nT3hfNFFbdVEybF5KTiIpblNiZHg/ZyZ+OWFGS296Sk9mXVcsPyVKKSE6cS84ZD9rSnZ7S1kzbHVjISJrM3tKQ3xXKXJ3eUtwLFp2aHptPUA9RH1GRnJAbWVEbkJWQyI4aHhEMF58U30+fXVHRWljcW9hOj5vSVIqRipvPEdORHBTZnxIdjF3Q2MuPF01QitD''@;'; put 'put ''akRbMT08LGwyX0F+TUBKa2EvZHN5RztoUDEzZFs/JVMjY2BieG1SM3Z3bmVtTXNbYzV7V0dSIW5mUSRsOz5HZVk7cyF7K09mNTpwLEEjOCZMI3UxLylzJnI8NFVTd3VUekVUfF8oYENSWiR+U1VYci89UkRRYWFGNEFVO0dofC4wL0JbXXU4K2YmZi44Sko2fVNeZGpTKkhTNj44aUZXaVZpWUpF''@;'; put 'put ''QWVZIlJ+Qyo5bSpAOmJlSXpKY0RLRV5rV2tBYXJZYnlFc3BRQ3lIN3AyP3R4ajYvPyYiWkZdeGFxb0FpLFo1YWMyVEhZcU4xW0hjbCpwLCZ7RGkkSCNIMDFjJFJdOyhlZixyLGpzYj81amxqTSZAXz1fKFhMKFh1aHBLdUREWnFHaHFJbW5qPj57OzwxTnxgNHFyP1A+SEV0MyYkIXhVY2NbOi9H''@;'; put 'put ''OSgkIVUpb3xZVE0pfGUlTEF7WWxXODYqblR6MmV2TChPTVAqPlN8S09tR1duaGcrMWF7R3FlT1ImZFpTKShga3t6IV0jYSMpQltnMTM6YHZMQzw9LzFlW1BoZnVxamJ1JC4hKGZAaE5DKFFGTVZ8SWo/Nl4jQyVOfUU6MC93M2BvfC8+XmFmdGN+dUF8YiZjR1MkL1pne3E7bHVYKUJZaHsqVCph''@;'; put 'put ''W2xxPm9lIUIwI2V5MUJjbjkwUjxlJnJHZjZmRDUkU2pheGdtJl19TUlXaHFoPURjLH1YezwqPi84SzA6aTguZVB0dDt4X0M0QiMieSFUY3F5aX1rQDIqcXA2L2hVZmk9SWM7Ny9hbUJZSlhLNiYsPWVYXnI0RS9rXWR5TkEjPGV6UnRQWCVVcmlDJSs5bUAiX3d4WkFSTXdJVjZHTVcmeUEiXShK''@;'; put 'put ''RlFTQip5bn0wUixKWH5tZjAlXXh7MHkicz9NYnI6Xk5RSDZ7YXZPZD0+cEw8bHV1RCsqNEtFN3NxaXU3QyIxVyt1SCZAQnR1SDpATCV1ZztKPCUwbX52dDMiamB5dD02JXptbys6OWdYLytJLktIVHxuYWpafnk7UUxrPyErdSpOMmB4MHFCNzlCV1RAYlh5RCw3eStnJChqcThVTzR3KTxyWEku''@;'; put 'put ''L1ovbXRvJEx6PS9RNTJ0RmR7U1hrS0BLdXFufV1GSiU3b1ooOkVRO1B7I0RYQyNvYSwpIjZ3XXAuXXtVMUVNLERqLGwiW2l6NE9+WyF1XnJ3MnFtWGppdiErOWcpZnZWRHRNWkMvfGx1fkhnI3Z1PGQqMGF6RXJRVmVzWEM2R2RDZTM0W14uRWYyPzh9diouWnZdJXU6eG1LS3w2JSRaY1NvNTI+''@;'; put 'put ''LntndSRsQFNnSmYsS3htYC9TJU4kQ3AodiM1JlM9Y3QxJFhLJTVVZSopdiFNQ2Zbdz9kRF8pXSJGSm9gPUdBeGUrYyQySDk9ejxWRjJBQGpYcD5Sa1NBYzJbTC5ESlVgUDJudmowMi9BdTZWNzUlM1Zlb2B5UGZ6W2p7a35XPiJMRDs1NE91b0VBKXRQfnRLaDZDXShdcTBpZFBrRGY4NTRLU15A''@;'; put 'put ''Q31NKyl2Nmk3XlNOJGBwZFMrcWNUSCEqKT1bdGI3ZXk4MkBIKV0iVl5ER25FJUB1YHJSOGJwYT1xYCRlUzw0OVlQej1hJG54KGtqfk02N154ZCQ+W3Qua19jKnxbdHkrckZ3dmRHRjBKUnhkWEJwJV0hbytBTUtFVDIwYEZ3SU0sJWpYKjY0aml0RFpiZXIpc1F6JGwrM3VnU35PJU1iMEh7N1Vy''@;'; put 'put ''TFpUP0Zja1lIfjdiYyRMYlcqIkpRfUZGOFcvLHd9YnZRNUgyUXhrRGZoYzhnKnZPZUQ2fWY4N1dROTF3TzYhZHI+IzpkTH03NH43czRXaS5YVjUkWXh0YWFhS0tHXnBUL25kS3xoaDZeZThNTFJobzluOzxfUVhLKFplbih+V0QmQWgwSktZbHFUXywmc1tLWWE3Mi88flR6T0FCcyljSS5PS1Mv''@;'; put 'put ''Wy53Pi95eFFlfXAuZSVUL0ZKWCxvQmsyTVF2akZsLixxVmV0MSM3cCQ0a2R1a3hvcWFQSzBTeHBrcHdQOk1pezd1JGVKbzc7SF9TQjMhPlVRRjcmaCF2ekVVUC9Lc0heO3diZW5MSU1rN3VMIkFjOT9QOU9mRzI8IkZJMmRNazFAWHg+W0whb2NER3c6czdCe0JYfip+Ty9bWSZXeGloRXZETlBJ''@;'; put 'put ''IWFNWGIqZlh7YW0wdyl5NzkseHB0akRKfkRdITNGWUZZSzdPKiZWS2lpbzAhY209RDxgbWs6OVssWl81JixzOWgqNWVUSlMibj51T15BcTA1UTA1c0FLVj8sJmZGLlZmUkpXQi5bTGVuUyVBcS4pcmt0OHAjIyhnSFIvUVpVeEZSVT5ZQW5KMjIufFMiJDk3cG8mVGx7VnooXz1lVTZNNUByXm19''@;'; put 'put ''UXNCMG07W3JnOXByODw5Xj5vcixnV3tQcEJmKF5mMF05aDhXXWZaKjkyK0c0P0lydWkyWzNRO2lKYio3QnxDejllcFVTK0lTbk5xQElyOigwK3VdTUM5SjUsbW4/UF4xUl85KFN9TGxxSHB7QUdXZFgrfHQhajpzZzc6MyFuNmtZMF41aT5XI25mV2gvPmEyOXh8UHojUFErfFVxc0dRJm59Mytj''@;'; put 'put ''K0xKRFcjMltZW0Z1PEFoY2ovKTcvInI6d11xVz5+ZjBddUM5SzdvPz1pW0ooUUo3bUp3QjhTWSxxfVNaeH1IK3VBSzorSiRaPiFvUjJyVVZqJG5RZ1tUSytPb3lpXWk+Oi49WCtialdTe0l9RlcmV1E0ZFQ9c1VNJFBlaHxXJkVRZ1M6N2JLIUVOKjZheGVtdnZqU0pjeDU2VjdMaGs6JFg5N0E1''@;'; put 'put ''OXp6MFRRRktPM0VwKEtNKk1nejZJQ257cykpY1VOKXgkKj9pQHVTb3J8JmFKOHZ2ZGM8LEFfQ19hTWxVOmd6UTx8ImE5ZzIlKHJoI1VPWGozI1BOZV18bn4kdkg3PF1fcTJgOTA4P29HWjdtYVM9emw0Zz8oclVnZCs7YiQrbEpxUzx3RSlpeDAveCEuLEMpanFgX3tLYVQ2PGt2eFZRVlN2U29K''@;'; put 'put ''e2xCaC92ZVJCcEV1KUZhLCtUL2BJLmlhYlI3ZXZxTWs2SGs9eShyQCZZW31SL0wzUlguOUxxcShydUBoQj9WPT9BV3whfWpqd20rIzdbbWBSb118LDQxMkoxeG5AXStLMW1bPkdwSS9kRHdWeHhTYi5BTV4/e247ZGZbfF9XbWttVlJvXT5TfTouRTkqN3dIV0lxJHRfLH4zQkA1bGxvIXtgS080''@;'; put 'put ''TENjZVl1TDw7OGMhUmUsezhVXU8kKGM3WV1yRkwrVCtyPkFSdH5+WkFPP19pSSlAaWZvcGF4MUc2V2pKX1dvQHxAVWptaWtXK1dhIm1yL0lNSiJVNnxCVEZ0dzZVIzc4YWo1JHY0Pl5tMnFednQ6NCN6MnIwXl5KKHtneV9GIz1IMEJfIjllc2UzIVdpYmBSREV8X11ZMFAhXjQ+Ql9yfnBFPWpe''@;'; put 'put ''SHRfezBEZD9tMWJ8L01iWE53OHZIXWpZKDBQIVEoQHE7IzBnLkRmKU94QD9dYk5UVSJOSDY4b2EuXklfY3JpNXZYPEdeSDgwJmRIV1NhekM5eCliUC4yTEN0IUVnailTRzZmTXlUMCJzdlFobUFNPl43K2k6SjdCdz8pc1cyVmRNX0NvJXhDTT8wYHB2bkhoaEouNFtbZ0Q/TnIwSkxEPHB2WnBH''@;'; put 'put ''V0h8WXF1ekE2WFt2THUxImZ4KiY9O35mOk4mOClyfC5HYDIqalcuYGl4JVEqXmBddUxZdU08aXlYTVghQj57KkEze2JbYD4lRms7Zlt0MlMjK04/Tix1PWE1aGJHJmwpd0xmb0ImVCVEJTtsbTBhTVtyfjxOLEU7TGpHNkZHcXwkSU09ZHJOUjROQTooXntKITFGX341JmBKL2JvPyJScigvXTND''@;'; put 'put ''fD17K1Y0TnY6WXBAImUyP1RuVEU6XXx8VWchN3R3SzNqSnZ5akUsJWp2ZSpTLEcwSS8sbVJeaEFmK2RbQCt2W1V2VVoyPCUoSWc1K141RnZmc2Nua3Z9bnRHe2JVKm96ZXR+c1RMdC5DM3lePGw7W1oqcz1xPXE9cSxjXj1kVDR4MV9KS1BreDssa0gqZyhqN2NbPVJGM0c1LHNgMWloaXdSel8s''@;'; put 'put ''TVNbXyYzfnd0T05yOGl7TmJlVmBwKWE3MTNySFgqYlZ1IWh+e3gvXyNFNVBSUTMzIkdVYzsvaTlBJj5nfV1CfTtyP10vIn58PkhaZGE1OFNWPlF4alJJQ05Afj9KLDtoXkczY35WL2NARi8pIXtTPDhzUi9oeSxQTDd8R3F0V0YlZTBkPDNiXjdVTWMqc0U6QD9vS34lNHAhMztsNTtROF85KTVe''@;'; put 'put ''dFBCW3hlNHl5OTxOb2JHYi58IThqaiRwM1RyU2VmNEZGcl8jenlIRlUyQyNbWFM9YCVLd1hJO0BMVigkX1hhW3k8Z3RVcWhoTylvPyhJU0pSe1RtUSg0dH5POiZAfmJINWA6fU8zRCFFT21ARmk4KyxRSDY1fiFHNlkwTW84eixsRl0wamN6OS40Q1s6e3d7L1clRlJAYGVPJWVWI25TaUk7XypI''@;'; put 'put ''NjQ2OlRUez1yRjleJjxwOTZkOzliRENnSjYiU0BdeSlfPU9YIyM2TDQ8R2okZm5lNDBBIyVqVDVRTyFpRipmNVFQQCFZITx7JnVXdEdvbyg/QGFJaHhxZm5HeW9gSUZENExARSImTn5OMVVSPyxJZj0jPXJCJmMyX2h7bSVDKyxEbihDX1U1OU16b3FLRU12RyFiW11WOXVSTng6Mk00TGYjWyMo''@;'; put 'put ''KEAmMDZUWmtBVlheQ2ZNaHh1R0NqIjg1NDQxNnYjKlQjblVbYmxqISV6alNgTGFQXyJadk9WcyVRYmNoOSY7P10/QlYsUjJ+eEZ6ZWM2WVBPb2Z7MGdmRFZ8bk5WZkVmW3olRk9iZWc+MUVKP2Y+fUMxRzsuVGhZLEh9UHR8T2ZhOWkifWlXeC9MVi54QF9MUX4/Lk5UODcucXo1M1EzTi5pRG4+''@;'; put 'put ''NnJFUmEpSERsPixFQnZePTMrSl4lPVZNfXM7SjJqc3huIW4sOUhxKiRJJDFEbUVYTUVFdXVMWnh6NCR2aEBOR3lybVJ9Ij83VWcyOFUjKU9JT1goR0h2TUk7bnUwXzFIRzppakhDXmh4UUtYUE9QaVkwPl8vRjlmRXxlPEJOZlhJbDNbWH09YnNGM3N0ci9ZQjomaDAmMTE2YyVZVTR9VltdYzYj''@;'; put 'put ''TVJ5Oz0uaWlrMXhVSXNFX3AuRCxwYHA8MyRDMHJDZ25WYn0majRmLzNPNndbYHJbI3IsTDhUO0wmUng0S3FbcllfOXE8InIzN0FHLDkxK0tBaFM/YEQ0Q3BOaSs9eGEibGwxOFRSLEBka199ViF9OGBqL35VUjYsdDNoMmpnPzFkLHA9TzBAd0ZbZHl3V3F6OFdibDpyTEF1LDlpKH07cS91OF9C''@;'; put 'put ''dUs5SHRfK09XZ1YpRnExfmplSkd+V1QjX35TOEJ3bDE0OXtoKG4+ditKOHhCcVJjUz5SbGw0IU4rQDRaRmRaVH1dJDNYPWk4XkBLfHguZylNJElgfXh7M0dkfWszWTM6YHNaPU8vIjM2Sn5WdEdYbnZNWFZ0YyEzSURPRF5LaXVGISV1Y2U3NHRkQHhnUStgK0kuNzw/bDRGZVs7bFdKKjM0RVJi''@;'; put 'put ''Z3xSTm52UnY8Yz1PKX13S2RAIThfLCZzW1pCfEAsXnxqRU1+VixIZF5rRWs5Mj9oRng6ZCsue25LdkNrUWZYImZrW2dQeUlpX0lkSixUZiF4WjM4V2BtemBFX0kzcyxpUmlvaTtFKDorSXMoYFk8OSsoNjJ+SS5mW348b0E2fkRtRW1aOD1yK1ZTZXc0dVN6STZwSytYVigudTU3b2hbPT9Scnss''@;'; put 'put ''QWtNens5LyEmVT9eRVtLbGU1KSU3eyV5OmlQbnpiZkx0aHZ9JlZzW2hoPGE1W00qaSV4Q1JLXTJAL2o8QWNRXT88fWxoK0JYTDNaSmg5dDJGLDleJVVKbklvdTZpTkJxbD5jPTlvOkowQmNrYXU0TGF1U19pJWJrR1p5dS5sV3xrPik+JnIvRlMpMTJwL144ck1JMGxSYSlifE5uIzdHcmY5YVJ8''@;'; put 'put ''WSJTNThAOmlmMzZ4SFdrc0khIW5ZO0M1NEM3cFZ2Qz5dUm1LO35vTX1pe0UuOnNnOENlXk0iSkszOW9CMyo3IUgrbWhgRm8oLHdkUHA2IkFQRl9hXTIzOEBoZ2pERDNHQSoueiRHeVR5b2lZNU1fYl5aPSkmS3xlX2csRT1eZDFUIXVDeDVxTWdpK089eWAmMk8oIm1eV1NWQjJTZkJIWGM1Ij5F''@;'; put 'put ''M0EuVTIhbTN0RDxDLjJ2RnY6alV5dkIsYXxLKyplR1Q5Ll5TWTkmfXBHXnBgKToyV347Mn4ySns1PmBTWH1Xfjg2Lkcvb3Q6dWxyS0hnR31McnpgeHQ2XW0hNnBoa3lsV1RXPT5sWVdZTXNNIWokMjReflA0ekIuUnhYLyJ+JUIsdG1CdEs5IXZ0QSFIdk8/RkNbVSRIVCowdHxGUyldUG4jdlhw''@;'; put 'put ''cStRJkttK3k6R2RCPTZYWXFRU2JWY1srJl1xNGR0Ml9ZUGNPcThbRD01fFkzckVLP2lUdnNlXyhqZTRQR2BgUVt9YiM0Sl95PFpwfWFZeF5LUWxvP31yUC9oc31pK0AobDk1Z2txPChvfmlMdFNPbyk5JjUiPFcoajg8WUgkZ2JrejQzVzlbUz1hYyJLOVt9cTkuRn1dYFZ6cnxHSX1falgqQCEq''@;'; put 'put ''TH04SVdmYF55LyhXSj9aa2t4bUk9aSNIL3FQQ0k9UiYzTztEPW80XV0mJDRWMVRfdSVyOSRXXjBSe0Y7RTBOT0dfSDZQXXRmRElOSUowYFl4dGRwWE5IPTZeJjw1PVZ9XXpHMEJfZEhhPmMlLnVSWG50ZVVwXiU9WCs0Zj58cFFIbiV9cV5YTGpkQjYzIjopUVUzLDEmPEthXXxwMWxbRnBORltB''@;'; put 'put ''YzA8KU9uOmRlX2tEWE53PnFqcWJzVCJOT2JGO0hqVWdEbFdPQFczIT1Kc0coODdwVnBec0UhdiVzUi8xJC8zVn0kKWkxcHduUlZZdHNZNGNXL1tKOFhXLERFJlREXUk3czkoIkl9OSRtcGFUL110SD1kfUZ9SU5OL3tmbWI7Y14lI105aWJjT14jVj8/RGM1ZnZAUC8hbFJgRFF8fjxzJX5JTk4v''@;'; put 'put ''Zjg6eGspVF5Se29RVDM2PCNvOEdTaW9xVFNTV1c+Tm0xO2VrfUY5ZGxrIURyTzFqX1khdmN0blZpP1N0VGs4dlR9UFk/JFQrY2xNWG5xPmJDTmpjVlhzTiFfUmdaVi9wOE1wb0FxV2ssZzlMSmYvISE2fXZYREN7aCQkODJTdmdON3xxYzJaOlpbVF8qYjBGUFFveV8qdShOODdZU3ExeHNVfCx8''@;'; put 'put ''XkNgMEZiW0V1KkVxcjdgSy9CNDNedG8uNj0pUX5CJHAuOk5fcFdzPCIwIXssUiFJYGZzOCxQOG8sSTtSIS52OFpBc1NNZlRkcDF+aXxFfnNlI31RXUlSIWd1WlM4L0UiOSxKQ0NUZSgpSWZUIWwiM3l8Q3ldajM1PTR6U0hLQztIeEtwSyNfUkJEIkZ0SzwvMnJ+LHFPZW98QiU9aUkwUV1jUnQ+''@;'; put 'put ''JFdDQiNbT30pUTJ1fSoycH40Mj5kJUA/bXN7M3E2QitZWnZNLjZdYExobDc+TDwiZ1laXSp0O2A0aWxzMnBNeEJFeGljL2xLJEpXYG9wQmBKK19ZdX56SnQuMT5jOjM5dXYsb1NZdTtMVGdKPCgxRW1eZSIxLk5BQjRKWGFVRUlPYTVDN3xRUDNtLE9kZ0tycT9ISUNdfCxacFIzWT08VCRqcmZV''@;'; put 'put ''bSEsLE0wLHhYRmNHL0J8blYxe0ZtaV8kRF1DZm1WLEdDIz1sQmUiZVRAdFpbdDJ0T2tzNCZGUjo0NGc5PW52Z0tueDpfcDlnd25sciplIixrTltacEMrakRIXnVURDx0TEVtfllObTpUOzl2NjhYLHxUW1A+Uko3cltGRlpTQnwsLlUvRkQ5JUNxdj59TVRrVWd0LExEP19RLnM/TigxJS5tWDkw''@;'; put 'put ''NkJKRDU0KlMxVWB7QXNqPUI0cDl7Qjx9d0FCNHZCUFtfP1pGIkloKVhvKDM9UWF8IXk+LmFbcTA+N1UjN0x+b3IvbmZoQEB2ZjRUU248QFghdmkyXiZRdlBHSmp4NDR2UD1UPnU0RVJCLHJ6PlYsKzwuOl8sJiVdKmNCTiQzeVAmX1VEKVtkTiQzKE1fND1Pd1Q1TzB9cVZlO1pIMi9GTWNyL3JS''@;'; put 'put ''I0YzeCw+aVk2UEw8MWZGVm9hNmprblZJVSh8JXNENGomfVFWZTlBbHd9USgwVSMpQz1sLDh5ZCtjcFNCY05JOFJBUH5EdDF3cm5SaXtCY0JzXUtBNHxyeVV5P2dAJUI5Z20sPS5ab0IxWjFBKmZ+My8oS0NvQkJSRyN2PkJIN1kvQH5WKDV0Qi5kOjQpfjFVOk8uPGwpcTFtI1pIOk1sbihdJT8m''@;'; put 'put ''cEtQKHU/VGFuYktabyxdakA2TTdLX0g3cHh7d35qeVJ1JDVrcz5fLylXSFMyZHx4Vz9iVUljaW97VVlbYXteSlh2QlMzMExKQWx3TVRSRjdmTUN5UGErKX10fiRESSpaflY4XktAS0BKfCVaZD1wOksyNHxiLzE0NnxjJGRTRSsxdjdVZ3BVQj9LSyYicDg5b0dBY2RXMz84YmNwa2NQKmA6USlj''@;'; put 'put ''dTVedmpRRkMlWkxPcS5Zfl1IRztzfmcwO2VCWmBsNGx5ckcqWk57TCp7Wj57dGVkMXIwPEtWNFg0YDYrcXUiV2tiJXV0IjwmYy9yWzpCJjxOLCEwZFM0WyxacEhiSVVZbEZBWzU+N19gckF4NVUjXytwL0MjMSFxP3AvYSVMSTc3JF9CPnxhbl02Pkt8LmliZERgeD5zQSFwMlExNmQ8O1VvVGkr''@;'; put 'put ''YWt2On1ENHtQdDp3IS9xZGw1akBPZ2ZiJWdCWDs4QVJ8LkR1WHVWRSIyKEA4ZUczOFZQfENWKmhUdXdERzFpWDZ5MCFfLjg3aVYuNl0oRnM9LEBLaXV6XyNTI1N+Y1IsT2swOkpRNCpjIVdiJFU5RiU9ZipuQDghRSZLe2VSfTNjW35uLnQwPmxAUSZJJEpBKlB7P2VuVnNEVVNMJEs+QjRYZCU2''@;'; put 'put ''dCUzeERtZmg0QWRhe3s6XW1za2hVLCxCSEgqczUoWzVUTyRPVChrJGEvKVJ7cXU2ayVBOCloSyVrYm5+OUwySVJMPCtxIysrLkI4QnJdX05RanM8WFhOZHM9KSZlIlZSc2pwQltmLiZ6VGhrKzgkcjpeUS9tOHhgZH5RVmVtWkc8L0tCWmRpVU80d3FRIlIrWC9uPlcrTWl7RVV1MG8+KzF5RD8v''@;'; put 'put ''NX5RKj5+RkVNJlF9TWkrVixMPVtuJiRNZCpbLlpaTUJDfnkjTERbbkVjeiptfEY/Iy5aJnwiMzN9ZmBgXW5qT11FbW1pYS5nLzBfYyVuXUt6YDxzNmhoXTkwezU/QSRELzAmUStQQ3x5I24sMUM0TCJHJkM4dUpeczwwVzlmRFBpU1VoS3ltV1JTKGA2I1QpfS8hP1J5TixEVl5uKyQvVEZfWXMj''@;'; put 'put ''JXo0PmcxO0lbWml+WWF2Y3RML0MqLkM4W28oRE04RDxGYWNabilGW2Mkd2R3T2N+WnY0PzJzd087ZllwSUEpLDQ4JFlxSHMjSktNejF9SSRrIWs+Y2hadjE8aWt3fmhqTlBCamY+Y19NW3ZUTkQpX1tTRnY4RDNra0xFZFRaYEREMjMqYyRAJSFqVnVOP1FnKTMjalZ+TSUsW1tecmxXKD18K2Vk''@;'; put 'put ''WlBEe0dZVEw6Zi5QOSZldXU8aHw/TWdbTkd5c1laNVJsV3A+ZnZKRE5IVXo5Rk9+UlFdIWlPbGB1UHFsPFtqPUNCWz5HT0xuPiZiKFd1PnU+eWBAOG0paUNDR0I2X2xmNEFba3p4bVJdWV1pcVJrdVE1a3dLL1A1dHtmcEBvaXkxXXdtPk9GPGgoU3c4N3dTd3tbQG4xOmN4Y0o7ISVnYzVoKF9Y''@;'; put 'put ''KHV2JSk4YXR+K15gJiFDKm9pUHs/QHgyS1lfcVpPdV54YWVAJGw+ZU0mQncoKyN0KXgrQU0ibk5ZPV59Z2ZYLC5rOzg3IlUjNHpPJEUhWjcmU2NhPD1XRnxRWCE9aXg+X3ddP0o/eXRxOHU9KiRWZnhITFAxcUFDYHFkUXdoeTJGfltoeTkuX0NmfENjJkM0PTxNQT90ezdXTWRsSjl7K0lyfTtS''@;'; put 'put ''Ril2OGp2V044cHdPd3UraE5IP0NjMV1uUDVeTmFIfDRwe106Q2NHNHI5ImM8ZHd5IkxKOEY0aGhKZ1VzQShYakolSl0wL0h3OEVMYEk9Z3RwaT5qT1J0UXY6Sn1gPUh5aXBOcC9Kc3BHeUsiWCFlNDouXTA2KikwN3N0Q0ZtYTsrQjp0K0daQjtXN2t7ZStUIXp1SlVzaTE1QzV3bk9wb2luPV4z''@;'; put 'put ''VVYhWFtseSFmN34mWiZPaSg7dmIvIj91R2pKPCZKY1FvaFZIYlprMVdMfGVtYEdOaWwxfXZoUVpgcHBTKGtPOnR0MVorcWRSI2MxTnhqQHVtJHsxcyMiQ2EjdGY0b2x2L1VwKltnSmFxcEZVKXt8Q1c+TmAybzomI18+KVkifEpbeGNrYWFhQWMyMX1USF17SHEwQn4sLzpuVkkwNStuR1JBWUJz''@;'; put 'put ''IyVXP0k2flk2I0JYXTwyOEFjV1BBVXxRTl1HM3hTOXt8WTYjcyt6cyh8dFJHR19Heyk3bV1QayFiNF4scSNvbEszSXMpemA8K3x6YGc7NC5CfTZXfH1XfE8yfkt+RkI1PFh5VzVGXnZZXWZ9N31RLGMrUz55MHdEKVBXYDV9fSpwZkFuMn17UkFKKHBRKCJtYFdVVkFoW2l8MW8vXlM6PnssSzkk''@;'; put 'put ''JUVqIW9NVWEhVClSPm97Tj4+Z2heZWtYfS4waTBPI3hlMF1zPEM0JC5zO158RyZVOzxHal43OHEzYHUze3QuW09ITlFkIypdQ24+KG9mOXUzQHt7dXp2PCVZQndmbHk9XTZdYT1ZMFBHPCZge2pibzNPektjXTBwei5kMCRweFBHIVlMfDZVR1lHb0N6SnF8LmFwUUskPCtKWW8xaEZZI34jfSpn''@;'; put 'put ''bjhBWiV+VUdGY3N4b2p9c01rRyYuZXYuKnVLIjllNCtUNT9eOEh+JWBKOiRmeFI9N09GW31ZMGZGNCNIPlVQPVFPKClJM2R7UyFeQlQhfUNmQ019U2EsOXQ5cHskQFkpeHopcFMpe3lIaVR4QyE+VCxAVyQ+W1E9Q1kuQEd3eiw9PFl1VDFBPTF2XXVQOlFqYmxuOmxLfktxXkk0ZD53JDNtS28s''@;'; put 'put ''OClqWUR+cCNfUih2Umx7NklUXl5VRCJrS31RZlRzbDI3Un5BXih1W1pqXnEjKiZ6N1IhfUtfLmUzT0ZNOVR3bDkjQXdEcntpT3x0IiYsclpIXSJ4REdiQjwkb0o6fkhyfTJdSzJ4NmhWYjRub3VVfiohLFt1QzQ7OUxCX2kjZD1TZmZIXyY+VzxSaWlzTFtLRWdwJFB0ZTVSeiNIMkY3bitFfU9d''@;'; put 'put ''cXNPZkY6SjQ8eyYxdzomI3YzW3FrJXghLCwjMHtfY3tWb00sQU85czFEeChsZXJdKzN9LF55d29WY29zO3FWYyFaOkZ2bGIuMFcuaUVeKEtEZ09oP3dkLkZmT2cyJTI0djo1RytaOUYie3wsc2I+VUVtYUQ/cXNnZ3h3X3ouZSswMHRnS2ZbcntXODo2fFFbdG1RXUtySkt9WD88a1kjczM9e1pJ''@;'; put 'put ''XThkem5nUH5LWHhuQCs6IWwkZWx3K3hFMnFARlt3PCpYdHVUTjQlM3guKmNkSjpXU3k8YjNzSXFjVEhyK3JTcU9YRF92c0lydVJwe1Z8ZTY9PjQ3dSU1JDdgQy9LNmBUTj5Qdl8oJkhzLj9AbHF2PTUkKzRCJCtsJEx+KHxFOGIkOzpOYyore0ImS3pKVU80MllQV2VRMXw8L2AoKGZbazpDK0sw''@;'; put 'put ''bHlfVk0xQklrZ0hZQWxJWzplcmV9cCt5e2x+QChObktGe0ZVTDBuWyNFYmVHJUZVLEA+LGs3N1BOTkgqPWljeXRrNTY1fl8jOSghaG9IIigwTVVidVpdVmlyTyxsWWJlM1ZFcyZdZkJZOkZNfmdFeFVzXTF4dkJCS3BFcEYrRnJqeEIuLlpzXX5zInEpRzpFPDNzNSQhdTAvZT82TTtGV1M1U3M+''@;'; put 'put ''MF8jVTdUOFMsYXszVyxjZTwoWEwzM3YwVnMvVzhFVWYvSTJZZmo3WSMoeixYYmFfY05yOHtYITRoREdXYV1AWVA4JWF9bWUhZmorbExnTWJIN3JHaUxDO1AwRXtofDIxQkB1YndiWUFYTl5PImE/N1J9fXFpTzZKQkxEMVdNVnBaNkZWcTFCOnRbY0ZSKkQ5UEZCckl+VF1BM0lGUDhrfEx8KktZ''@;'; put 'put ''eXRWcWwvfVcodG80THgzKFcqT3YqRHxCNkNkP249cUNoViRrc0xvUilhcSl7UjxFPCl2elFROUJoWHNMW0p1Rzd2KHMjPFNxYzhgcS5YQWhuK2ZmcXRXRiFXMHVONVBybzQ3Qz92IlRsYSQ6eCgrTWVLbW0iZSo8KmNrM0NQeWciTTA/PE1bO0sqdi5lO2clZ0JwayVdLE90US4kZlpPQFF+TF9G''@;'; put 'put ''Y0UjWjZxMipbYDx+LH5GUXF+MjAwWT1tPnFJOV5ZYjZATFVKbTRPVC5xLHUuLHouMz5TOzg3X1U7dUo4cGhbRU0pI14/I3F0UyZgL0c0cSFmSDFqKVZEViNmRlQscXZOYy59XTE2UnhRUTp2MSovNW0wPmUzTEpVaFcqU2UrUE45JnZNSGBgUD05Q14/WzZ4Tj17cE5eYFpsSFFEaEViMFhuW096''@;'; put 'put ''WWojPjsjWD8jQDEyIksjdT19VWdge09LYFMqTSh7VyZ2XWckcE42QDBIRV9OY09uSkVeSWh1bXBwP1VLYGpCUyhbQEwiRUFuZUhJezptV35YfCl1PVpMaWh6UUs3cFssQHRkL0UvUyVSO34lOyE5JUhwflRNOSMzL09xZXc8eHZgPyUzNkoseGxpOTZONS9tZjhgViVKP0BrOlppVy5kTVRVc2dm''@;'; put 'put ''NG9ANXwrPEBQQ3llU3ZmZFkvakt5IlRtXVt0eSsveHFCLjJ3T0o7TzcreStQUDV4U0E1QCpsJGEqIUt5UjpRWiZAdXlRb04xQDpAMmdRWjs4eURPTXo9XkZ1Vno0ZUFiUEs9O3oqLCR8L3s6TCtxb2ssODtkfShHcztmXlsrUnwvdzwpMmtEMzosPFVVSz1VZ3FqXjtRXVpUUmg6QHNtTWwvLEl9''@;'; put 'put ''Sk94QS9WM1VROHl3PmF1V0pjbV0pazU4RUdFSDlJeUQ5UHtjPCp3QGN8Xl94PnlgNjIxaH55cFRRY3ouZGV2c3gwSlFmQTRnKUNneShLXTJfaGg4LzZmcGFbMF04Onk1UTZjbkh0UDohJUhbTmJaY1FLLDVgJkJMbDluWkI3c2B1WzQxNW1JZUpOOHgpZDFHQ0E3SlthMG04TGQmIkVNMVBrPTBz''@;'; put 'put ''RiMreGBKQWR5Kkw9PztTMzEvNnJ5Mj1kL3JiPlRQVHg+Onx3WXoxeWY8QU03RnFHO3N3XWwzZSNPe3tMQC9qLylhYGxqZCwiIXV3QkR8UTpgVU4rXzJvQiokOitQaSpraHhEYE5nLy5Oc3Nve0YrJW1HNG1uRWN0RX4/KnVtO2FoRy5LNylQT2BWY3hITVl4aHQ0JkgmPS84V29CNzJTQWRTemlY''@;'; put 'put ''MHohY3k2VVVTSGdeMiRMUXo6QyNaa0NzT19acF9tT1BEQH0xKGs7ZngzfmI7bjlwNSx7V0VqVVc+dDx1ZSNwezthTS8xMl1mKlthZiFXMCQ5IldGSjhOVi9PbGZBSCxjfTd1dU5bbiZ9OWMrKH5iI11qYzJHVGt6dEMoXmB6LEd2OjBLLjR2OmpvZz9sXll1UD5pJTIrYVBpekVTdjE6Zn1vY1Mw''@;'; put 'put ''Xilkb2p6YDheXmVYajdpSS5YVGJzb3YxdFB2ajZdYF9EfG4kbSx8ZjtmQixhND9Hb2h7UX4sPSVtZD9pVD9PcSYpUDovSWpBbiNkcn5KSj01VHFEQCV7MXM1Vn1FMThkcH4pTF9xMXtTMS54Ljt0eE02YE1pRnFqVzg8aExWUi5CPmlJd2g7V1cqYmo0MXI3fUNCWjN2Pis/WEkiU2IzJUcoeFhf''@;'; put 'put ''KTtYbzJmdEExcm1CQndyQ303N2Y9ayhaI1A7Ukg1Xl8xZE4wO1RNNls3LndeXykkakhjZjZ1dysiNEZsfFJaZFlNJUgqKnh2YEpGTkFZRk5CKjF3WmRuUHR4OitwTF5KaCldSiQ8O1QvQnZTLzo+RD8rQDZifVdYKD00REgzTXloSD5dYlg2W0NFVFF1SSZJWjxaMVppVHw7cDs5YGh7RkhDKkw+''@;'; put 'put ''RUddZjU8K0I3WT80V15JdU5UNmVlMndVanB4Skc6JTx3VmlrUStSfHFAdiRZZk8rMGpSWnp8YU0pXnRqJXxgPV9bYEdKaTtxVXIocDI4YnJxTHUseFA1Ojl9ZDRoNXRBZkdDWFY3e2RlY3w8O3UhM2ZiU0VUVDFBfnJ4V3J9eGYxVyF+R1tgZ1tvUGVfL2l6NEhNfXcwVUBGdTBqfSldR1ghPyFx''@;'; put 'put ''dC9WYis5ekgkM0A8N0NFamdGZWtVKFQ1PSkhVj9eZyVpck9EeUlheDd2N2lxW2V0V2dhNCFORDErcD9rbyYyW2NUIV89SzQ0M1tnQ1BgLCV1Xi9YaSYpYytCfXF2dldyeG5paTBwaGBeVHFJK1BvNVh9fTlVSjBDJUVSSDM5KWMpYyljKWNqUCVIPncvdTgleF5zPitQUl1obm5FbD4kc3V0TnBu''@;'; put 'put ''OzppcG9MUkxSTFI1bkxSQmlhP1dpWD9jdzh7TEYmLiYjeCxENmpIaGNZNUJpPTsvMnhuVFo3W2JObXF1VW1jWmQuS2YlPWZRaj43a0JGSW97PldYV0UyNCpyKD82U24wc3Z1QzFHSCQ0d347b2BzX2U+Zi5MOURkKVNEcT9NKyhbYFtXdTJrdzg4fCw0PUldLzJgSkYoVVgvRldoRSIobmA9VEsr''@;'; put 'put ''LnlKN09jN0tBTz1bS2wuWStEJHZAOkh4YDJwUDQ2XlhLOGRYOV1oLFA4aFlYfXQ0R3IzSzp3NTdGemVjP18mSzo+NVBrUGpWQlAyYVA/NzgpIyhLYj1CRkdeUkZzczZlXStXNUBCZDFAQnxIVy9nKj1XdVY2RV1JKTc6Sl9bPWE0NntnOy9kIVZnWUcoZG03ZDY6Zj0rI2x8L3xnQjdYKDtOTEVR''@;'; put 'put ''LEZPWEk7ZDYsInwucUpONTFRKFdUOTQ8bkJkfVBfWzA0Z3lyQCQ0TyVAMU8vc1YsVGBGZlNvM0MzOXNMcWpWN24lYHJINFdEPnRCInBBTDY1T0h1Pi5rMEtjfCFsL15dVjV2OkRuekkxY1F9JmUyYHRlYGA4KVprJTtCYVprKT1XVTNjQiNbJnRFMmc0QlBMRSV8QTQ4LD14Vi9XaUxWOVgwNCEv''@;'; put 'put ''OHlEeWRTKkF4KjNkVH5fbCZVYm8uJkdbWU5BSU9VMGREI3UvW0o7TDU3UV5ialhtZTx8QmBqJFF5WT55YjR5TkspLnlAcXV0R3U0UEpdRVJaaiN1Tk1WJjJhZU85amJqQTU4M0QsT0o7MTQrPFkkUzU3XmElZkxCb3RddktvM0w6Q0spRSFMdi4oIVs9UFhCbHRBIXVwZEo/IWZGQUY7ZEdRfiRo''@;'; put 'put ''NV9hdjF9SiNgK1deUyMqOjZpNjErN0R1bXxGZ2daZS9fQkZ3QDJFUDVFVHRYXywoUCpSMUc1Z0UuS3tdQyxwKUdUXlFsdXQzW2duazJvNGcsfl96Okp5ZWtpWEdAWGtQRj1RYER1ZkJSQjJSVFBtNytrbG80YnRhOSFGR1NzWExoJE9JMEsuXnJTK2FhM2skS0YsNlFYUz8wNHs/fCJ7M3t7OFMj''@;'; put 'put ''OWV0T35WdGM3Q15PY0ZMOSpDUDgqIXFtQCFRUnI0aUxucEMwTHBSMW8kc101OXJDOGxVZSlJMFY8WVNjbkIsYUM2aDQiKyhyX2BAbT5bWTNeWys9e1FhQEhUMGZfLD1+d3JiSlJ+dFNob2pWeFJeSHdqTlduaj1TVzUpVzx6ZWw4I2dVSl1sPFZsKUdzMTw6ajtVOGZlKnEzNmNlPSQkU2Y5Wmdo''@;'; put 'put ''Mnt5UWJtbHFhezoyNiRTeGxiZDtJUUIwYCEpQ0xyN3hmNTUvQ3dPXXA9I3A0XlVaSH4lQm8uUCNdPzxBYG1GW0RiQlQyaUNoVkIzNylZclAyPFMuUkNdfH4hbDRTbjRLPDBVc3RAcTJqWSMrXVBnKUlaZHpeWjVVLmNsVDJQMkJjMz1IeCIiP2xoO1kxZTZEfSJZdW97UDY4dTA7d3YxflZqYXRF''@;'; put 'put ''R092OVR8MFRDVkpTaEMhTlBfKnowR0ttX3ojJSldKmVBJEV1SVJJO0AyM0Q8Ok9FRVhbdEV1Rlh0XS5uak5jYWZERGxKO3UjK2tBXSkrQCtINUFiTipNfjBXSzYlR15QeF1hQDtke0Q6JTxiYSV2QWBvSm5QWCs9d2UxZEYoR1goZ2lVcz5KYDREJVBGNyh6azBOKFZ4ajNyNDJmSjdVd1J+dnsk''@;'; put 'put ''e0ssSGJhMV47UlVQMU5OaColej1iLzJlInNiT19uekAuWChdMSRnUmNiLyMsX0EhYD9HZksvSFE9fTo9R000SGlsW0I7WkRee3A0PG5seHtPSFAmT0YpaTN2dT0uYGImTzQ/YypIYiRIZSpWNTlLcmd0cVpxQGNGLCo5ITNYPkRLS1J7VG5YUz5yZkQsWmZQY2VbOmcuUElndjdXTSJPYSxkUzs5''@;'; put 'put ''KUNZcSshL21ZWHVSazREeDo7InRITmNeeiZpdFR+N21SR1ljUiNJTklQQUxeSDJ4YmkwVWtCZFM8cWNGP1tQYDdeMCZqOHY8JjQ9cV9WKSU3I2J6YUJeLiZPe3tXM3NCO2Rxa3tXVktFKGFGJklQQ1EsWSw/Z3xkI2gyaGZ3WkQlOFIuXjtjYE0/e15tWVIrWTJEczI6NSpaTH0wcENzVWBKUCZf''@;'; put 'put ''UXYyfXh8eHx4fHhIaDQ3QjlaMT9qVnx5SVlKLjVdaWtIOjA6MDowWD9YUnN8OW9lSnZVe3Y5elVVfmlCY3lMT2UvZDtKOFQ9L15xSjcyX0QhMGZdP3UyRU5INUdhfXUlI1d1fCk7dCp1VUIiRXBkL2QlQlB5RnJqSHBIeTBtSVd0aUBzIkl1MTpIcFd0dW84Z0I0LjpYeXtZTXAxQHR7M25NMmlN''@;'; put 'put ''VlNySmMva1BeNTlDS3BFO2ZhcDM5Zzo5bGVLdEc4VSJybCsvI18zaDpQO0dVS0VdJXtVY3AkTE41XzhXI3FvNDxtMzZIPy85VWh5O0Z3MVh6ZGlAMjBHdkJycHptc0cxfEUhSnA0eFZlZiNxOTR9dCJxV2BzTnR7NE4jS2FuemRhajFoI3FTMVFNayoiRSJYbyRxKU0sOlswfjRbT3RFa3RzXWpJ''@;'; put 'put ''N2c4eTo3YGpjb3RoYjAsSFJBT3p0T1pkYylzbnNIT3E0XTR7L1V4MnspfTVVc2wyNDp9TyVVP09KSDpsMTlDQ3A3MmVIMjRoZEI3IWArdWxMOTQoPldyLEhlMGYwKSVvMFdyNDBXckJQTy9HSzErSFJ9XU5Ve19ENCUyem5oY21WYlt3RG9CYEkqZXNJbnZTbjJzWXQiTjB7WFt4ZGlTaHNifGNf''@;'; put 'put ''XnFnZSNXZXRgfDxxVElLIVU1JFtST1Q/YjFVVSlaRWgkJEgoXypoW3h4MC4uWGVeOnZEPnRLU15HJkVMOyxbL2lVU0ZSdX5yZF83ODxWJjNqe2JEUWw6WiRBXXwodGBGUlklNURNMDQ/Zy9oU1kmemwlLiZIKjtGV2AxMTJ2TktxRXFAOmBfKXlASGpOMiUzVyNnKzRxXik7TCIlamlga15FPV1l''@;'; put 'put ''UyFsUXQoNFVnRzdCL0BiXi45ZkU+Z3QlLD47SStab2VKTWZsWC9gNyVPb3pwQ0VBak09RzZRNFoucSZUZCQ/W2FZMnZvXzdvLyw3QndFK1VVVz5kNHRlMjs2U3YrW08/KV58MXJUZD50UnxpZVdzNjIoRktZJCt7VGltRCQ0W3J7TDZ0SFAmQiR7SyhzZyVQejhSPURlWFVLWixNX2dha0pfQkI4''@;'; put 'put ''Rkk9aUdYe1RrZldgPDNqQFkkeWI4Nl1AbzBLZW98TTtKUm07bj9NXmRlKi5SKnlpMlZCV24kbnM3Mk1tW09BeXtaQ2JDKEc7ezZLYSZaemtkTlgkKFNzbH5iXmA+P1tyL2pYVHEmR1E/VitqdWRneUJJUkMzcER3cixlNlcxUntndThZLHx8UCJ9MnEwbnZfSVV4YipTXnE4Wz50Unxrb0A8NVtt''@;'; put 'put ''ZTt9S0FyXkozWGhvXX1KT0VUL34pd3JbODEuSXJ5aDsoSmg7Ok18TkxeRXFvViFHKDd0SW95ZmxZQDwqNyxWfn1xaUNpX0NQUX15N2FhZ2VRWT1WMHcyd0RjJUdYM2k7MDAobGtEOFh5UDBfZnFaa3UlcypMd3dSaHxSTkR8SH1FbTtLQDs+STpPVDhKJG1zRl9AIyh6MV1pIVc9Z3U8cypIYnRz''@;'; put 'put ''cVV+XWkocGlzPUh6L0cvamVmay4rdSQ/V1ZXUXY/IjRIJFdkNEAxdUkrcXEpWUA/MXVhODtQLDEsITJ5NC5XQ10sb2cyeVlvQGgzS1N6YzcoS3hSdmN8R1B2e2o0MDVfdHhzQDF1TCpPVmlNNXw3NGUqYXlGRXZ8NzREelArLkApc0kwZVMrSTtrUUxDTkBEa3hwK1BMPFAiQmt4QiEyeXZ6fio+''@;'; put 'put ''P35MO0kzK1pkNEBoJiokdSskWXFVIy8oS0UxZyFKYnMwOzBLMCtHTnJGbEw3OWtRKy8qP2sodCtJUFJTSX5xJGtweDZjUysuWURwOFBqRXduaFE0QC80TVBhNTdLUUpjbypnK0lWZjxEcHEka3srK2RQK2FDemckentqKFQhdSRxKVlKYTpiOyopZDBIPmpoUitjc3EzaCsxflY+WC8pZCs+I05E''@;'; put 'put ''e1JZRUJ0by9iU2EyaFQidFNPQ1RuKVM7LmNnZDUqPXFaKyohRiZvb2RCYSUjdTBQNTg7Kmt5Q3gxZ2ZXRixxR01WbVElPzF1KCpVVm1RY2BhWGFKMUtVMU4lZFBaZnhTaElaZiZQUUwlZ2M/ZXk5RUQpdFB4UiYvZWwvWzF1USI2cWxsWnhkRzhLNj80N2NQN01vRWt6SGpgPyZ9ZS8xSXxxbGxY''@;'; put 'put ''LE9EJUU+PzQ3fE9iWiVsSUlbYVdWUUw9OGJTSGo5WCV9ZS9GPzNLZ0pffDc0WzQyS1lKIj8xdTVYY3k1RUF+ZS9jeiZLWUpAPzF1LjoyS1lKaWBhWEdqIkM2UHduZlduJX4iOEtZSmZgYVgyak8rY0M9fWUvV0p5IXEhU0lQcEF6MWczPnFjVmZKRTIlbWFtaklqdVhVUUp2ZVZGVClAPWFJalN1''@;'; put 'put ''KHJdTmt4XWhoSVZgVTwieTdfUStqdjVfNllreD9hWkk/P24hWE9wNWE5eFJzIWFlYTwhXzRPTm1gb1pJWWB2OzEvdHEqbFp4IXEqbGVhZVZAU15CTFJJam81diV5ISVjaitIans/LyRIaiFYRWZQKz5ZTjV5ISRxezNOYy9OOis5XWY1ITRpeTNhPWs9dlpmbWp1SnhpQVp2P1IoSVA4ekRtW1s3''@;'; put 'put ''VWMhVUdzNEgkN2UjamFxcW1Zd2RHPjBDZ3khVUdgTlhvQWY7YDpEO2J8bFQqXipvbWF7WSRuLGN4X19fPGswWkNUP3wkUSteKm9tYWFSIUs0am0qdXZhZlY2USl9IUFxbWF7ZSx1InUweiFnaVUodlJ5SGB3ckw5fXwqV0suJkgiPkQ4UDNYUDBIanVYaCNseC9pL2VVLEZKam9pczNvYzdLbSEv''@;'; put 'put ''ZyZ8T05tZ3grQCp9TSshSUN4JlAwWDVJYTxvcTR6W19qTjRpcHVQK0R2fDJPcUl0bj8xXl9mQzMlTi8kWHRAMzFeaiR2cTJtOSEjei9pN0lnVnNIKzs8bzAqNV99JH5aVkFhKi5AbHNXYnNnPHUsSVNmVW5HWEVuMk9reHQ2LmN2Z2wqQnFTPnJmd3cwLDx9cW9TeDVCN1Q7LDNtWyY7RVAoNVcq''@;'; put 'put ''T20+Xn1QWV5wbG9SPS9gNChYb2xLMV5kJDp+L3xibmBRWjpMVS86RVZRRlssUjJ5VDxsNVlBRih8UUt4RCFgbzomZUJiKWEpc1cpNjdraTVZInwrOj9FfElPRlNMNjxabVlVUHw+ZiYwI29CMnh4RjJGKjU8ZF9IImR+M1NMPFQvQ0p9P08zRGdZVVsmM1RGKzRfRylhSlZ8KUk5cDhAMm9CJjph''@;'; put 'put ''Y19INC5xcUE2fnlNekIqazZMO0g3aE1FaXViNDAqTFZ7OT92KU9rWk9jOFtHYnRDR3R7V3dEZUVjdThgYl4/JCRgUyFUKTZ2UGMmIT8/Y24/IT44ciwlajtDZUtTeT1FQylBJUc8M2RfLmhbd1kyPGFDNmJNYS80S09dXit1YzJfXy9HWzA+MEFzLjI0aW56WV0mZCE/KislamlgdDg7RC5CLyl2''@;'; put 'put ''Km4hdzhGZEhtKF0hKHFZKE5CNHRqV0RsdjJJOmgrQyNMZ2tSb0FeT15qVXgvalQqVi4kezVnYlc+L1B2IyZBMnNfcUk0U2t8Lkh8dUlxJU1kMHtDM153UGlUPlk2MTdhMylsO217LjhvJShgVz88QWB+JnB0bHkoc1lfXSVSTitvRk8lPTYsIU0sVjxVK3kxRXpOKX04Z1VtYE90MzRscnErZHND''@;'; put 'put ''O3E+RGZbWTxIdUhGbiVyeHAwSUk7QE9LMSpgbENKQmlXb0YybCZNOm9YIWI4bmU0MT8zQzF7QUhkIWhlbiNsKmZSVERWZmt0L2A1dno6fFI/eUtPZ2BxU3F1VV5yYnspdyJmKlhgVyloPlckLD9xcls9Z3xVIWo+PzA/KHZedXU1W3pnQjJ6eXc7eHBRcjUmMzNzTGhieChSaT5WRWZMOEdTQjJ1''@;'; put 'put ''eC9VPlZoRXBOOlo/XyhdLnJyZl97Wl5XOnNDIlpCRnU4SmB9JnQ1ZHFfa2NtKnVHeDNxeXZScjpRNnJEaSVQem9XJF8hX0k9d3w9QXFfQlBbXjF3NkouTmtWO0NbJjtoOEI+U1syb0FWXnwqMS4xdEU/Z3suSDJ7fXlsVkpLK1NHQnExPEkvJT82c1VSbDsyLntaQl1PSy8mfG8pITdVaWRfYDR6''@;'; put 'put ''XjlsP0taLiFONjExfjMoaHxuQ0pJajFvPWpoW2NLUCNpe2lLaFAyb19CR1MkWCQ+bzBAT1tNcXpNZEtOSWRMNlVhRD5VYWJvVHlrJDpaIVN7P0cxSz13bVJFZ21wXSsvUG5idyMuM2FwME56U0s0IUAjUlJxT0VLWl03LldMQUs2Zm9mbHZyciVddlJ1O09yfHJ3MjdvMilhaTUxPUxQcUFQMS4u''@;'; put 'put ''TkUyY3J3eEVje1ZfO108MWJ7MFB2Y1l2Wl1Xbnp4TzJYXUMlXXJSVUJZI2ZGQCo0SjthU3dAYyo6PE12WnpaRHpFTWNYYC9EQCZ8dCN7a01haH1SVGFlVk5BMVI4b2YqXTsmL14qdU5SIVg5SDB7WWxDTU0qUypvWE1lRi86IVN2XiFddWExbVJVVnpyY1FhZzt2NGNdRSxNSmtzVzxRc35pYSIw''@;'; put 'put ''fHJsMl51JV8xPGYsNiQzPTZoMSZBcmVSezVpTTtzQTclUloyMCUmJV5fbHZgZCE6KU1VZStxJl1YcGUzZy5hcH0hbmZaLCNkUjo/WFZJMCwmWk0zaU1NfkBLQWg0bi8pYzhtLCVqQCNVUDA9IXM1eiVQaTsjXSVqPyFILyJ0UVRyN01pVmdjXikoRj0uWEZZbmgvREN8az1rbD8vJVBWJnNtPyFU''@;'; put 'put ''Ymx8ITlseVprdUkkWC5pLkVAenlOUm1rVkZSMEhXKT1CNmZSXl0xaFI6UkU/UDEoXV1gM21uL2J2N1JSemxFbyNgayQ7MFloVWJXfiVESStENnBOUzoxcEhafWlrKThRXyFgbk96T3kweUZBNCJXRj9qNC8/RzZrJEIyai4vcDNjN0tPYXd0aDNZMHApKS5ELEx+Ky4sOmRYT3d2JUUsMzAyOCM1''@;'; put 'put ''PWhaUSNELm8hVFhgWX5RSFUpP3NedUVeL2olWTExQShgfSF5RmNaXl1nJT09e0VkZF9XaGxba2hOejlAYnE6OUpRSyU5Z2VIKyQrSSQkWTJAVndbRV0kcHpiR3pLfDg9fiZyXml7LHYqTkFhUjNAOX45cjg+NmRVenNHS21yJUtCZV5fdD5fRmpNd0B5VGYuKyV4Q1ooOnJWdCFyeiZFWlswZUla''@;'; put 'put ''bTpWPHhgMF1aX3lqc1RfV2w/cVhiRX0uc3s8ZkFJO3ZlLHd+eTYzN093US9EXl9aODd2UT1NOTs1SnxZQCsqTj5RSWZfWk0vNFUrSHYvRkEmQk8/NVZldnNgfmZNKS4vZCNDLDklQ1k0bHZ+Z1tGOSRkMnQ/Oi49ekJZUDskUC9LXWVHa0NVMyQ5Y0YsTSVDZHByJk1AZiJ3fVQoc11NcUJIY3hI''@;'; put 'put ''TVksc2hZU25LPHo6cyQ1cixAOTJ2LkViezQ6OVNEcCZ1THVrPihpIWlodykyK05YVixhfmFyenpoXTJaTXhAO1U+P1hadDA3K3dsOFBzWzpDY3omfVckckF7IVgqMyhfSHdDY2VET0V7WTQpTmVQXllVY1tlX0xabmpER0FjI3BML2FvRyY9dlNGdnJBW0Q7MihqZSxRfm19Vjx0VjdtWiloTF5a''@;'; put 'put ''MFtya0F4RnhSbj87TlN9UzFXbHQ/YGU3U2BWPHhFKDRsSGBYZ0x7RWdZZmRvTDkyTmkqZG1Pak5XWmx4U15rTlJdJVk/IVlyezFbU15Cc05XKnZLflNnVFpAfHEhZFVkITwsMS4uVC5OYT8vMnA7eDxGemNvKzhOP2M/emVjUiMqVThEQmlAT08wLl4+cktqcXcjXTBPQFF+blYobiF2LEd6ZUQ2''@;'; put 'put ''MnB3L3U5bUFvZ2xCL2QuLzVZZWcjLD99OWImcF0+K2VpW0QmNXR7OlU+U2wiNExvOTdza3opV1QmekRDTUt2dHh2OWVJclFdRWRkV2k1YV1JOERjT30sSCk6NjthdFAyeX0vNk96dWYwPGI8OFosM2ImJGBJMjdrMmheaD5QZX04XnUkcTU7LltFdCx7VCQ5Sz9ocUJuT2oiV29mYEMlZ3sjUmVt''@;'; put 'put ''c21eXSwjZVpzZ2U1XWh9PWlrMHNYPnR1PnFdPmZaOWM5KCZTLEFlRn4zYW9nS3AxPX4rViQqV2IyOXpGYVY4P11UOjAkRSNHd0RAcEk3OHREO0BpP3AuTXI1QzZPenx6NSE2OHBhXS4hV1k3aiM4eX12Zkw4RGMwSDcze1B1VDJRWUhDUDcmeW1nVmBJSjBbN2w5LCRhQn5eQXFCJmF6fSNRMzdv''@;'; put 'put ''Mi5kVTwoKEohPWZeNHt7WzshQntkQjRXZEI0V0QvRGQ2VXF6a1FaRTdvVEdvTGwpN05PZG5gJWd9NWwlcyRIOSg9WXVqWX55dEZmZT5nWzokODJ6ZUwqcF50cG4rJSY7Qy9gbi8pZFRFQ0BlM0NlVz4pW1NZeVlONXVbJVIlOCQuZUdeW2V5S10mRzlxO1cuP1dAbFYlInQ3X3w8NWlvKj58fGxh''@;'; put 'put ''VUozNGZ8WWREQ31ZQ0VicjBONHxyPEp1STFOYV9gJnBnRWpGQGNnYiokW040VHU1cUJTQElLbW4+PDJ8V2JxQlNrPFt2eVE+Qkx1RSwlNmh6M1R3NC98T0k7X0IvQjN1SXgqNFZgRGo/U1c1eCM8fiFIYkgrTntIY28ofHdEJHtXOGZ7QiJfVWZuV3RSPS4pKVRWNTZSQnAhfjNzW2FtKGA2a10u''@;'; put 'put ''M0ovbyo7cl54fFIzcXtBPjE3T2hvOUI7NGhANlRlLjhSe1lAUy5wd0IuQWtBU3F1L0ZWWERmQDNoOWIuam9OT3t7e14yIjBzeU53Omo0alhwckYwQU14Nyk8JE06ZVpzbTgzXVRiR050e3d6LHdCVTooaUQzNTFHQ2QiZGJYbjx9Z35rOEYubV1iXyIkcVs4Mj9Aak1tdjZ4bkNCbl1QcThUXjhQ''@;'; put 'put ''cyxWNXVvb098MX4lPTBkZX5qJU1lPytjX3JvVyw0c3dic0Zxc11gVH1GS1AuITtNOSkhUGd6RClDRUg9dGV8bDJBc1hfQjssNjtlNDklO0QoWF5KXWJrV3p4NTg5TDV6ayIzNiFBfmo8Z0swVDE5Qio0Ri5bNH5hTG03SW1seixuYk1SKFA6NGAhXThwfD1ea3RFe045bDJCVTFlIS5lST1qV3g/''@;'; put 'put ''WzxpNE9AJEc0NjB5Y1lRfS5YbmMhYmp+R148N3xGIWVZOyxJKUhaXig0N0RBczpvSjkqb0VkWilOM31GZmtEckd9InMyLyRgZWJncWRgMn48PS5iVDptS2BUMi9KczJkQX5gRVIqY0JEb0tDa0tPSVlkPDtBbD8vSl1mOUlGOk8vbTpASDQ/cTpSbWAmaHRZclh6OTBVMnM1LEt+QEVEW0BMc3Al''@;'; put 'put ''MVRfQSxXRCtgMVlOYTorfiU3Rj1EVzY6NUBIQntXL3ptWiR3MW8kXjVAdGEwdnJ8LiNxNkdQaTM2eHxJZyMzfkAySFpoNC4pckVRIng0PmI+LkdeTUNhaSZudEAhaCpBX01zaDJdbkpyZWBCV1JVP097cEB9KVNlJSYyIilQZXdIVGJ6NmVfKXc3T0Jla3o4KlclPGwwUzJPWjZrV0lBVmVnVz1y''@;'; put 'put ''ZzQvWHxYYmtJTEI8ejpHZXs8T0B4e24mVld6fnI2QnIvTkI4Z2lgeTVoOkA5TC9XYmFIVFVPcyR1NSl1bGBRO0gjfENuS0ssTmtjbD1PPy5xOHorRyYjZz1HRyJ1emtWQi9sYDdoOjtVcHE1MXg8LHFIUitGVkpDN2wmbX1RRmVSd35KQVphbHVgcE09LyZqODJCWVglPS51bVg+VFElKzUlLDF3''@;'; put 'put ''NTZTPHZseXVSdHt5Wi5NVGdGTCZjWngvci8jPVciWS43XW96ZlNXcCVHSSQ0OEpdOUk4aFlFTWs/Jk1GV318QyhvW3dsODo5Zzl3YlIzMXdxbiYmfW1SQjhpdFEoZyEyJHZEWVt5ZFRoJiQuR0VBJTE9WFZPMWtsMWk7Uks8WEY3WCN9OHcxWzdFTUIrTmQlLD5yJUksMU09L2A2NzBWb29fcDM2''@;'; put 'put ''VSE6Z0BkfCwyX2pVOXZ1JFlQWGVrRj8+fVdyUD5ZVSIjYU93XmVdYl0xL1N8R11lYGE5byxfXXFkOUY3Tzc4c3dyLkBJOywsenk2dGZOTi9YfWZ7dmchcyRATmtRa0J6YHApZTQ6PkdvYC9mKmt+MGkzcmgkWE1zeUpmfXgjd0Q1bUpYWi4ock07L2RGTiNvNXVQO01pKEZaaT0oX3lJd20kS1c2''@;'; put 'put ''LkRJeTppfTt5YHAoT0I4JiJTKyl3PS8qcU8uRSY5fEVlIUZUcj8ueW0/dTM7VDhvXjZCdzMyal95eGsmRSl3QEZVYG9eU2U6M3s6K3J3eUV2UiUpb09lNXwvfnpsQ01+VyJdKz0sU1soWEYkaC9XeixbelZqbl1XUillc3pSZ101dVN8b1J0an55ekFoYU1aJSsjZE5OL1h3d0NzOlhQUTIjMDdT''@;'; put 'put ''VVlQa1J6XTdgJn5dWm91PFRqLEArWCkkKU85X0tLZElCZVU+Wk96ZXJBRT9xXnExVC5MSC5Jfj8hNzt0K2E4bWJMYWcuSUVvZHUySmA+TzpnTUFBU3FHS3diUSsiL3RtQHJNX1AmcUNsKmUleFRlV09jcXpiZG8iMHNzPiQ5KjdgfURqQ2I1IVg0Nm10aDQzSVtmZWBBXUsqbylsNCFzKUVaakcs''@;'; put 'put ''dyVTUjloIWY4S0daZHtaZjI9WClvMlRPQmdrYCtIMlUmMz5XaWNxemczeVVBUSgxKXUxJjkvZWlXfig+cm8oVnt1fWhLVCsiXXBxVy9UeCVbUHtYbXoveUlxVjptN3ZWMEV+MUVyTkNUbHRWaU5yP3g0WGpHSzhdZUBRcGJ4SWRSTlRCOjM6ZThoZ2x1NXIkIS5hVy53cnk2MHFfZSp3YDt7KEU4''@;'; put 'put ''ITh5SCZ5cWRlfTFrP2QodzpxUF1zM1t1MzozNnpGLn1IT0Y6YFY9Mix2fFZzaCF2VC9lfUZWT2xfTnAwbDp2SGJFdjhPN0J+WTBTTVVpVGk7ISk2YXNfeCo3MipmfX40d1sjbmUmbFZpdVJxciU+Z3Z+cjVHSCNoKWR6S3liV1thMj5iMjhOKDRrRyJUVj1sLDgyXip3UW5RPmt5Q305MSk3QTYx''@;'; put 'put ''JEpzIyYyPHhYbyg+XkdFYmd5MTtkJEtjNj0ubDgheDw/IXhoU3B0YkI3RCUjU1haW1lzVVVwMEtKejY/ZG47aV46cjNyY1hlNDtFQS81cU8sfDp+Wmt2fnVMSjVAazA3Zi8pWjNfeks2eVhfN35PJXpRYUJrUERBQSxoSEhCdDtDXkpjYzg0R3VyQyFdfXVSIkNBUSY3ZFhqKmdUUm56bDZrRW5S''@;'; put 'put ''UHZ1VylBdihKdHlOdih+OXNjemR9WE1sMWRNVDE0Mmh2KWhNaGwlY0RjekgpUkRFcnU+a0xSLiFpPktpSEwkS31xU1VuL2wufVRJaT5PJXlFRGl0JHw3W0hdUzN3UHl1MFJERHYqU29jd0Z3PEMzKHx5Yl5XY3VXZiMvdFtXeClRPmRoYDMqSiwuVGVBeUpXIn4vUjlEVFZuX0J9VDdWNn1ybDU/''@;'; put 'put ''ez92O3Y9TEAzXkQjRlRjU3RKOnUycX50WlFYKilXI0VpRTZxYTx7c2VXdGNvVW5QSHlMfW5deG5PUUl4Wk1wOVVtciwybCVSYmgkK0FlXlZMajFTKCs3Yiw/MUlPcDY2SFUzYCZyS2N3OHE1S14zVnJ4KFpZOClHOkk2OyY+XkRUeT92XUB6XTlFS0xvJUxxX3xSWENGcGF9dzJ9RHhPNDxJLjJg''@;'; put 'put ''ZHhlUmBIc3IvYHRXZyQrPUA3ayNkSSYkUUdLWFdXOm8jNGtRaSZyXnRiSFV+KUhWfHVnVCwzQHEzXTRZeDh6LkBdMVBCJkNKQz5+QTZQb1RXcXhvTjdQI0ZNPT5aS0BjdEdbZD1Db04sV1hqJSs0RmRQeCNyPUlLLH4xTzoqTFR+KV0xRmp7aV1xX2NSQHUvPX5+SklVN2JqdHI/KV1+cXYsO2lq''@;'; put 'put ''eldveiM2Rm1lQyVyP3xocWN8W1FgdH18KjFGbFJkU2NwM31CKHVsYnN7ejtydElGJEdjbzV7JTtoMmIlOmNnfjF+QFY6UWw0Z1gzbkMkTEpoMUokKzoreC91WSpLOmZ3fmNFZm05VVg7fXQ9SHM0MXxXZCRgSk0idFhqUnkqNDxCU1JqYjgsQiM1RDxOMExuUks3aHphdm5kPz9FTWFKWk5gOzlG''@;'; put 'put ''UzkoTy5gWVBeZls9TV5OR2JFTD1bKGtFaC5hJHswNGhNfC9gOF9GNVhuUTRZOFdDYHp7Tj9eIkYsMk1NXmVqTX1UUi9gWTx3VUV7Iz5+eHV4c2RFNl17X3dwOU5vb3t4XUosMSxyc2ZnaE4yQ1ZyLiI1UT5UX341fWN3NVM5dz1QMWZaeDUvWzxUKClrYkxGZ20sKE09QWNzOGJrSVc8UHNbQWdS''@;'; put 'put ''VTZEPldWYVlLQnVzWDR3I1ZhdXlZXjFuJGtBJDplUm9bPDI3azM2UTo9ViRxL25FdDY8UjMlellOJCR6TkA+cHdkVzs/PG5KYTJhMFNpa0EiLi4weWY/JmQ7WjlUQ1pmQjQxO19sLDcjckNhLGRsRloyLks+TXo8KjBLT09Tfmd6QzpGL2hUI3l2dC8+U0dvJHxfeHlZQHVDdU5PfEAmdytGWjYv''@;'; put 'put ''TWlWbjRFIShnWlY2W2xkWzYyKjwlXl4rRmwya0ckdHh0cFR9TC9lKUZ0RkVpb1d1dzBML0lKUkw1VGtBSEwyI2t4MEElbi9rXVU9bGozZ19jY3JjLkZjREJRMTI2cGBjZnFmVklQT1UmJDpgbVJHQCFRb2dGa3VLVFM/ZV86OEwkJF47fmksXVBLVl56L3lOQ0o8WWh0a09ASVtgUTdTLEFYPjI8''@;'; put 'put ''ZU9VWHVbfFNlIjZmcnBVIndfQDgmYTExdyteRyIqRWxoPmI4Nk1rJTxIYWBUTzp3Z051JkR+MT4pVFksdlpPOCh+QnEmdC83WTx3LHx2M28mSn1ZTDpTZTo5OnczfFk3bk9LeTV2UzI5OCZuOkhLeylpViNrWW12bSQ9LEVTRlRCXWdMKX0rRFkobDBTeWlYUnZMYiloQCs3Y0hqNjlyNl5OUDEo''@;'; put 'put ''Pkx4Y0UuWHZ3YmV3LERlKnltb2R+SCo0XmVrJmZpSmZNUEVQT1I3Rm8zUisxcXpQP29QL19UVWJyajBISi4rU2NpZ1hQMjVzYXBUKVY0YnBMZU1lbjJMV3ZuJkBpTG9DRlFWXT14b1o8NGxpT3lQNShNXiljKSRXYShsUmQmL0duPU1gOF1bUVFyNyY3Rj1VTiRVZHksdVR3K25CUy8hTCl5eDQ1''@;'; put 'put ''P3RXcmJddkk0fmxHQDowXU1oUkRkTGJlWXcxVnpDVkdoSkxOXj57RHs7PTp7VXJFUSUpMnA2VUtWTVhuckIzYmlvanFeV0ZyLHc1OlI/V0VFXXgmVVYmKF97Xkl6OVBrSi54OSFzM2BkO2JeWGV1W1N3YjhEK29WfChnPHNwe10pWHh4LD1HRyJ3O1VOZHwoLGIjRWx5I0g0dXo2dGpSXUBOeywo''@;'; put 'put ''cDwkVWxuaCQ4aXhZdmRkKSpseio7NE58Sy42TnkxKUx3MDg4MyZWVFYiZnY2KUxFTiZMeVVUXnN8W1NFYVs1XzhMaVs4TT9iYGw8dyxIcyl8cz8seipmJENBKSNsKkxLWk1wJmNjMXlAcnpFVT5BKm0oV2omNC5ZWGs6bSsrZkRKR2hrMnNnTCkhRkZ5STx6eVgqeX1YU3puX0VycltacHx5fUZJ''@;'; put 'put ''PzRSTyhjJjRCeUAlaEFmMFVQe3tiTER9Lj9udjwjJEEkRFNCUCxmQjl4bSIpJHEhNSssUWl9VEBqak4zYGxwTEc2U3JxQ3VUWCZxMWFFPHFdVFNYM0BBbmJILztXVSN0NWt2WjszNG5SO0IleGF4RTMwfVtWT0J6IXAodXF2bjRLWGZfVUZ2NixeaSF7YjEuXk5rbEVzOGo2QkJ4dDs0fDJLQSE3''@;'; put 'put ''Tzo5ZGkpRzI8M0dYWVFoZS9HejhxUjQ1fHA5UChafWYkVShJcml5OV01Q31IIWRCKC9vcXZ+SmltW2R1Iio9Zl1AODIlPXBhcS5RZ2Bnaj1hJS9WKHY9Qz91KCFnWl5+fEYlX21KXyt7eW8pR2U5ZHpscEx2diRiRmxkdD1db25wfX4zT01fNHJWcHZieiNnTWcvZ21SLD8rNnosUC9EcldQPE1r''@;'; put 'put ''QyxPN0ErK3Z7Yz82MyM1bHxpIkQ5R3tqNHtIei5UPVVtenF2IWhKTCwiXSp1LFVSZXgzbkI6RWVdOHhiaUolcHJjRkhYazpKPDd2Szc6OWt4ajBvMXw0SHMoZ11ZdmhbXkNmN08vMkpsbWFDbWkmZH53Q25MYU9de2pkRnNPKj9ybE98VX1ONmhFb1ZHR2N6Y15rb0ZWaC81YnE4a2h9JU1tYip0''@;'; put 'put ''ZTpAVjA1KWwsaDdnbS4weGs0JEwmaHhPW0xGPHNmclZKTlMqbClPWks3PCpwW3BhX1RMS1BpYTxONihXeiFKKTNWPWNzPHB3KXRKZmEyNkRzQ0dwRFZlQjNQciMjJVUzWHtecXNuenBZd2kma0c8OCJseSJxKmV2Pz1JQnMud3h+SHBDKTFdZHFneFlGVj1JNUtySGwqTCpLPkFdSVJdOVRtUFli''@;'; put 'put ''d2Y3RyR7QHVMOzZWb2dxUzdNMyhTQHNEVXlLRFpbRmdVPTVvOVlte15zSXxXekBzO3ZiXm1TIipGNEJRZzxMOFAyXSN+aylyUSV5Ozl+VGZJbEYmMU9uTnwoNiJ4PTs1cHVLUnRRN192e0crX3R1RXRtaGtNSkxgb19FbW9nfHEuKnUlJWk6ZTZdOmYqJF9JRkQkaW8hI35UaUxPImdMQHs7P0RM''@;'; put 'put ''KiFmKytTMEZ3aUFEInQwT2Y9RlQlcXZiWjxeWndHcS9maj9IQU1LaE59dltbVWBldncpOEg6eFREPXIlOWM9PnN6XnUlPTBfIzpZantIdndxSjRgZUxFdlMuOWJWJG05RTRgNjwuTGYmRF5HMzQyeml5VnNQQ2s2KFlDWnpIbUFNVztIbmVYc1NkUi4xX3JAZEBsSVMoN0Y9dHYxRX1zI3t5MCk6''@;'; put 'put ''YXhVNXx1Tno1UUdpN1J5JHtdP2FvZ0lnMSxfK1JFQzJSOU1aPEZUMytYYzgjMD90fDoucX1PIzpYVk5tVz0pRSw+fGN7azVxcnc5OFRJcTBBaDFRPlc9IzBrZU0jUHx5Mzs7fEM3MHlfPyI2M2x8MWRYRTI5eWtRYzlQSmlLVG9ub2c8ImBxdiFCW0dqbnZnLlF5OFRgPDh3ZmswOFc7KV9FdDEy''@;'; put 'put ''MmxxalN8JS5gPlI9NG42SV9jeHFuL0l5RiJtZ3dUdGU6QzpUbGtDPjFybWted3RHXk09KFhsWVN0WDlYR21Db11DcjhgQiFhNTVvTGUvfjxaOGBgO29UU3ZycF1yX3ohdlRFYEtfKyVQYiZ7OFQxNGZCaS9RaERxcz1HYHs0IThmaHJhZzpbejZ0Okg+R0pMdG1ge0RLR2JZJlBEb0dGKXFRQGgj''@;'; put 'put ''bXArdjlrWzhTRFhtU206aFdidz0uMlJhJiEme1N2VSlmfEBMSkMuT2kyOC5kd3FgV0R1KkZ1ejEzSlRVPkNVKkw/U3VjaUhVbGJwLFZ5Z3NxWzFIVlhbeF8oV3M1PmYwLk0pQXpXb2lZO204SypTfFcvKWlwMk8iY1E2RmlQMGJ5MHBDYjhWRStHcHdyWSh3NldIcHBSPjd5VGkuXVlXIkdjYzk+''@;'; put 'put ''X3JRMTlpPWo5S2QjSFshczxpI2VAKGphWENZYUEyalImZ01WRlRwOFUvZz44U3l3MURiYG9yUE54UU42fXBMUTxWO10+Xkd2MCVScjxWfWBeMkBUZSgmLGJtMUl6ZSRoUy8oczZOZG4kOU9QX307ZyJ9a1g4WCZNbDkxRWxLQ2kyVVtdNFIhQzNOMF1UbCFVaHJ4UjhrbF99LEhyLkNlPU5ZSGsk''@;'; put 'put ''dSFyRnNuVzJZN3dVMC9OeTNVdCVqYyMiYFNOL2FidUlkZyl9KEt3QyJobWciK05mZFF4JkVoZURpSW1lOHlINEVII0Y2PTw5MHNYbXsrbUsxP1FuVzJvL0BrKjA3Unw7I0dmSyh4aGZpSGtKN08+PWVdW0Q7L0psMTJXWyZGXTIhLn07JE9YN1U3dCNPMlo9T0xqc1dyS2V7PEM4aUQhITJLMiRE''@;'; put 'put ''cDtCdGt+ZW19TWVUPltgU0N8cUMmQCg1TDYvUXghJDohKzF1cU5+bDxDcGMkdStPVjpjWjlrXTZuWTduUlRONFtWXUYoWyw3dylVXVBuKlVnNmpzVmIsS0A0Ym5BRklmL00jTVEpc3hWJTFnIUY2ZyR6aFA3OCJ7dWhoSlRXIllURH5JanQvYVdQRm1HZCYicXReQlUjJl9OfGNTS0coXitmcyVz''@;'; put 'put ''RGoze1Fjaj02W2c8fVQoSTxjcSlEZml0Q142SlZaVShjK1FYMF1UdTcjRyw+d3NXY2MvUXlVTD5xP0JoJnYrIzlgRk9lSUU8SWVwTlRmS2JIOiouU21mRSR+ITU4I15qOzUpcGJsRitiZ2hDMEVqcyttZkh4WHdffTIidWVMJDsicixfbXc7IlZXTn1yUkJtdCMpPUBUdygmfkRsP3R4e1V6O0VP''@;'; put 'put ''a3ZPUGdpemlWIlZ1XUR3eipRTnM1ejg1Y1Voek9xVjZTTDVDPztKYTVqa2tvTigsM3B5eCUmTUR5PlleemAzRHxhLGxtV3VzKXw6cn1sZDplaX02WUowWnQ5YTsze0kvKiRWS0dvZDMyZjZOYiZNeTFJVzc4JEA+KE9+QltwKHEldlY/fm8xLlBSalhZOWZQa2tDaHthPT5jSTQmYzomWUAyMFVq''@;'; put 'put ''QkxbK202OjNLWE87OHFqQUYrRCU7PG1pSzs2b3dkckJONyFDK0xVYTk3NE5WbktOUlYhRSNHTzh0WGZhS2dnTTluaiZAZ243dW8yOklGdD1NdFBsYmJVSChKJXQ4LHZPaysrWnU2VFFNUUIudUptOEV6Iy5wPygmbFRgTGVZUlRQS1NsREZNWz9LJmc3JWNnbG5ObEM7W2UxST1uS0gmbn4qQ3Ei''@;'; put 'put ''fiRrUzNMXUM2InpqTk1DeyR6SS48WnZqZlUyPX1oeVRqRDZzPUoifjN6aEVqZ2ZBKXFNTDNbQEkoWTFeWjRHXWE7NmE9U1JOMENVek84MSJgTFk1aXBlKTl4PCg+ZWNySi5hM15LOjdSYngpWn06a0VRZzBsVSJMdio/JUA+P2R5T0lwaltkLnA5ZnlSOUheQXV5UDhoen1YJXdLW2AjI1MpeEwp''@;'; put 'put ''aj9pbXo1KDxEKDJORSM0JkMyJCtJejxqUGMiS0goez1ZdHQxL31JdnJfOTpTZjBUSCgvTHR7eCg8KkppK2FDVjk7I3t9VUNIIXAhbFZgWXZBMW8hRTBedkRfRl4/Y318QXRVamR2VE9jYnIzSSNxTG4qIj9VR0thLjlmUlAieWk4O0J1bGVYQmY5VWchfENYTFIrXWx5NGtEWChhTUhqKj14ZDIx''@;'; put 'put ''dXJRR2AmMi9abHAvWkZeY0tlNl5mRz9aOUZGeGtYU04/PXdKVFFfcF5IYXV6IixNT19WSTZnal9YMVQ/anApNjpvWC54bzx+RDh2d25pLCEkOixEKWxvZzp1V2dGWC5fYmI/bmZfW1oyN0Q9enNMaGJXXTIhW0x3UjpyPiN+PDokfGNUZis6SFBNPE49R0J1VnRicmhbVE1OT31bImskbm0pcyFv''@;'; put 'put ''SFlRcj4xWFNxMTVpe0VKSikqWmhTdnZKLHQ1dEdOSXckRWJIejI5WlpIWU1DaDJuRF5aU2kjfU15QS5dREkkT1RiQkwjKXtRfW8vVkdoL09tXjVWakZVK0V+T2J+T0JjdTp7fDQiIWJ0RVZUIS9KfTYiLm9edCIlSkhHJn1vPkssanluXmVJUmt0JXs2I11WWGFmNGFTOjpeQlFdKSJRQ1ErWF5I''@;'; put 'put ''RWslKTFnc0cwOSspNXJJQCkpJCIvT2JFOjdhOHBpa2FpMkIpZnhhRWJudF1ocHFPRXE6YEVkXktfUFFqVSsifmVAZV0/eyFSQ3pRO2czZDUsTHxjP3RqJklUQyxMTiZDYENtODEpInBSOl5KOjh2czhYQihHIzRYLj1PYDw6XitFUkgvXXQvUH5OY3VjVjcpJiw+ZVdSR21+PlFKSGdneE9mMzJ0''@;'; put 'put ''e2VBZGZibF80dXQmW0ZMW2pLYF1LfDJlN302QWpDcWIvQ1hAcGJtVmZoP2lRYGxadmYsT1UwKU9Kbi5rRWZXZmtYamdLMV9WTHlqQUlzS3tWTm9JZisqKm9EfmluW0NPM3tyY05xX11ELklnN2h4KGduW1d8NVAyUmpKIjoqOGpxbkJFUSxpKSVLU0EiNiR2Rm1AUWVidGlHM0AuTldyUVBtXmNw''@;'; put 'put ''Y31GNGU0PFYseDJiMEBPayJwZ1MoJS5FKSZTa31oSTRebTxZMEJ5dlJCZnsyVTVbZFRXd0E/JSFqZUJ3dl9HPjVQK3pOW0VHWEVzVCFEfHRTMGVVZVZJNlRPRWVta1U8PTtdaCIkTkk5cCk8Ui5PQFlMYjc6KVskUXFQVy99ZWlWbE1XNVUwXUAqQEd1IWBYK3tMZjh6JWZQQ3NKenouZjcocStd''@;'; put 'put ''SGcldUJaM25FR1NJKkNRIjJ6WUhWREhgPy92I11HOzVQNDBdentfY3BucWtUUStrZS9JRzcvODIpc3AjdF52XjlsKGRUS0hVLnB0YkVeVERLZmo5bCNYTVVfKXJqKCRdYWRoZWZbTldieE0ifnpyUnh8WDN4USE4Omp4VXE4JmM6NW1oRT1DLGw9SyRIUER0P3pBZDREcSFSPk9afipYd285X0Nh''@;'; put 'put ''amNeaWBOa3hQen0mOX4lSl86STExNStNVTVPSFBaSnFbZV59akteaCJRWWB7UXBKdWx3Z0k6bWJrPEdWW0VEdEk9dkpwJnAsdDglV306NyExajppbF1NMH5sa1kwIU5IaWh3XjU/VT5gSDZYWHU/V3xfK19wODVJJCVWeD0yMmFhcEpkbDB6YjIudltqJSQ0OG1walkrSnlzUnkoQlp0XSFQWEl9''@;'; put 'put ''ME18Vmo+Tl0zLGNncm0yVk14WzIxVzNpeVFkJS4vajVjNU1VKGRHa24vXUBrdTsjcig/Mi9ULGs4YCFKWmxdIWdBbD5mM01ZfFFQQyhzTSs+I1hhUntZOjorKENmMS5CZkRrdUcieHhKODxHZj5XKGQwU2VOO3tHUl4wd2FWd1F1RWk4dWA9YGh2NWFTKldKe1NxbSEydEw1aCx+PVt8aVhBL29M''@;'; put 'put ''SXg4KXZtczpnVkdpLnc+dm1GcnB3XkxgfSNUKCF4e2RyJndYbFdpRXowMGFHR2RwQSJDMGZSXSxaRzV+e0V0ayVOM3VYU2h+eEwuUF0hWH4xR2BhMVosQkRwRVhXYHYkfm17czQpM35aYmhFQG95d0x+VHdmdTlmJHNNODlCY3J6SHBtfXFvPCxDIkhVPjx0dU9lTDFTalpefjZGcF1qX0tOeUgo''@;'; put 'put ''NkVAfX1MPn1URGt0JjBCJHxeR2NleUhXel5qT24xd2FPOCsuPW08Wjx0QX5ZUk01YXpIZVM4UUN4JEcoW09jOFBFTHFqb21ObXNQZDtVe35UcSFJI2JQVVg9I3hRIW17Ilc7eGw8U0FeMTtqSUpNVTtUOV1beHAiUUJ1MCZOQ2hENTM3ITt+QX58Rm1BQVRxeH1qJmF7XnE/PGllOUsjVGRAWyR7''@;'; put 'put ''fnoiU3Mmc04oJkE4RzVoZmppaSxOKmMhdDo9RHV5KG0vfE5ManpibnksJC9kUyVMXmc6YzZMTj5tbCssfFtycE81JU46KTdbYS4zNCY2fXYsfERwVHpoOnhwMV5lTyl9cUQsWmUxdWZjfVd1fTo4bW5CdXQsbjM1IWgsOUZiYXhValFVfEVBcWNHMz1TOW9SbzpvZn13Q3g1Ty88XiRhQ1VyZiVm''@;'; put 'put ''UiFBXzdfME1wO30kfnosbH1KSnxjUm1CcjBjTDgmOUpObldqSSR2Yy5kbD0iMXs4M0tWJU1sZlJWI2VRJURuMWVWfX5gTk0zVWBfKyF2Qlo/dWt1IWQ3enBWRiFXSy40U0JxNUgqQiFKZDU5ME1DPjZHNU9lMSNCfXd5IVJ4UDM/fFh2ayZUN3JaTzw7RyR5UDIucDttWC5rbklOP2ByQ0ReOXJg''@;'; put 'put ''Ty83NEFeQzhoO2RmaUB8cUFeOmlvdCpRZXo4PGdaIlBTIUIxREA7dCVkZF0mdSZ3UV1XSF5ORDB2N3tGPjA2WFVicS4vK3lxbCtid0I3ZT1VVDZeSE8pfnpqcDJoUGdeZjg5TmY0OzNCfVBzZi5ZUipMbWhASXhpb1pHdzBOVXAxRkVhNFd5a2VCMj5jNHooPT5QREVqdVs+QXREKlNDZlpeYUZw''@;'; put 'put ''RTRkNDViN3BteTdYY24lcU9aaGkjO3Q2KCRCb1ExLCMpJCtnPExFZjxtNUpdQ11CNkljdVQiXWQ2bjIrPkl6eVY5YyNlOHkvP3Q+bXUwLHpuYmhTfTUsLkBBU3p5WT4hUDFdaGNxZEgwQ2ZbPiN6LlFmIiVeRn0+WTtlUiwmWGF7dH5wVSVKNS55K3RmNXA/X10iQDozL0kvMzk4Olpeb2dnMkJ5''@;'; put 'put ''TFN0ZmJETHtiX2lZOkFxUS8rPzVEdiQmOkVIUUwpPkdneilwamdNMHJ8bmBRV3FVcjRUdEF1S3RWc0BYOiNpc3puPTkubUF7TDs5Nj00WVFBIiZ7S1RZQjBaVGw7SUF4UV4sKUJmfC95dDt5O0M8fUAheUJSTDRsdHgoSWh5XTA7L24lWjNlN2dNLFMjRTtXSlUyWzR+S0tqWUYrUjJYZlY5WT83''@;'; put 'put ''Xjw8b1FqKS5dZnAjXXtoJiRiJTZRRElZMWZZaUhhNXdYJS46fFBUOEhZYltHekp8ZWR4SSk9YSlbUF8oLkp5Q2d2P3gqTDghOmdpPDYiImtGZmx8MlErYG5gVlgpfnZnSXdSKnF2Mz9hXlFXY0BFR0J7MGhTVFBjR205KVo6a34pcz5CUjUoc0Budl8uIUtna0hua3lYfTZZaW9JL3NNXyxneyxg''@;'; put 'put ''ekM3fSVZYV48S0shOVMzW0gxd1AoUVtsSG44bGN9ZlhCcih0eCpnZ3ZdNTxxXjp5RyE0dmhiejNwdUNfQDpzYUZISUI9dD9NY3pzMkE8eyUyZn41MV4oM1VESlRVRCNscD9TP1s2Nm96WmxDJHhrXyRLWSxOTnVqazNiKnNvOVVAIXhWd29IeCt3Q0dpcV1OfHdMfFh2YWhCKntvc31CZT1OOyVS''@;'; put 'put ''TFEse30henVTezopOnZdOyJZMSFTU2cpa3tLUl5sWXtMdH5YY3JaKEUmTXlDY3hdYzpdTnRbV2NjUXghTExAMEgqNFZJKUowdVcsWDlTX0NEREtXeCpVOiNCMEtEaHQmckd4UmhrO14uVjJUZn43RDEkbGBYPkZfL1FsW3t3biIpUDcmXkVdbTwuMFMvM35WaDVWNDhCPk0yal40enI/SGt5TixY''@;'; put 'put ''NCEuSiIjTE9MUixbPm03RWBKKCQ1KSYjIWhla1tFOT9QIz9qUFNsXlU6T25UOGxSYjh+QDNFQ11eanxGaS42XW5KYUlJOTNiTk50PDNeVUZVZF9ifnVSMXhSPiV4RW1oYV9KVVVxM3NWRV1hcmB7eUw5TmAuJU5pJW1iMWU5WElFKWk+MW9bUHBqKm9+dXF+JEBNdyFJLFVMUHR5LlE+MktSaHRk''@;'; put 'put ''Z09zfjFEX1R0M1MvdjAjJTkvLyxoWWFNaVhjdVl5IiQ4I2lqbmdtWDcyb0xpbGtRWTIyJk1aXzBJSWlheSxlaCJ6Lm5GXVJGKnROP194bk0uWVgiOVp9OWtPLGhSbC5DME9OT3ViJShDanhzZHVzNl99UW9uezdPPGlwQ3BoM1grd290QjVgPmE3TWxDIUUmV3w3fnpncC8vXld8PCUmWChKQD5b''@;'; put 'put ''V2pDJDp4eTUzeCY1PXEwXltQSlFuO0M+UisySClJM0AkOkFdQlFTM3Y8XjJUR1IxST1QSUhAWkAmVGIpcG1hdlglUWU1NUdiY0svIW1GKEVjZFZTR3lfeHdSUEQ3bypzSDxGaDQmaXxeWEUrUDZ3SlA9I3BaazAveVE6djp0bFBeSXNuYz4zUkVucDk3MXw/Tm99NEhnNVlJd3ZWOjUrSmhJOCth''@;'; put 'put ''fmN1XTRBWltxYk1NVSl0PXNfaX1yMnxLfGpVP2MudUJFJD0qUUYkUkxsWTM4KExtW11yOC5pP3lxQjduZCkoeGxTdVkmN01OZ2ghTXJ0fGlrQjUkV1VpMWN6ZntdbjhMbTBjXXlOUyx0ZWo+cDhQS1pfemE+I21JYTw9JTZEcHNOSD1vKCtWWnx1TVFJd1IpYUlvLmBQaWRFQ0Y2I3JYIS9eKF8q''@;'; put 'put ''a35eflZGeGJ+Y1o5c0dsdyI+YGFeQmNpYiwqLDx1OX0vPC9CXmIsNkhUNCNGaFBeemVwW2xgSzF+KTJFfklCaVVhezI4ciVyQF44PVs7OGN2NTBUJSR6TiFRVCRsZHZXZXtQJWEuS3dJKyslUmxeRlpedmcwK3g9SXlsd0FuYyV+W2dQeXtDJTE6flc1e2t6X2krNi5GUGo8blVfLk9TZVF0cn0l''@;'; put 'put ''eWVmfnI9MXB7NW51ND0/eSIvaVldbDB5cyRMbV9aWG0hSHt3cDUjVEwxbkRzeDw/Lmk9P3pgcH1vKmF0RUw/KnExdkRgWFgvK0UpVzc5e0dVWFdTX15yay81Wj9fNSZJfCYvUmVBKHdscnhxMy9VQ1UmOlpbMVJ1NzFOImJoJGR4fFJzTSw+eCVyeWx4eHE7Jmd6SiJVdmFRM1l8O28/I2dlPE94''@;'; put 'put ''Ni9AM3RPWntTNyo8XTEvMVZPNGhkLmE9eDFzc1QkPXlfL0UzVSlXbEc9TlNMbEpXN3dgTyt9ZyQyeV1qfXhqZ0VrdThvOmAwNFRnP24pVSohYjBoPiQzKTxYKHZgdHxuVHs8RXJFeUZjQjlwM2w0ejNSaldkN1tsa1deTCNCa1UzamVAR1FUO1ZxRmJ3O3g5K0JxcVhoW3ZmYi9uWzw0JlJBVF92''@;'; put 'put ''KCsrL2M4MVkqUExuRkRCbElIa2ZeSSh1SW9tPyR7ISVtJj5mMGhhTUgrNVFNTVB2aGx3QWI6RjpwcyE1dChFIldgQ0c1YmhfUFt+fTU/QiNFPTx0L3czNEc2REA/az1HZm1jS01gNDlYJk5rbT5GcWxCO1QsPXJHYSRYciNQV0lCXSEuZkhtWX4he31QUlNeR1RPUmg3X3leLnIlP2AjdlR7MFhv''@;'; put 'put ''M09nejMxcz5FMF9VOXh4d3IvYSpPUVJMNnpNekskTX5SKVJlen1AOHBVMD9Tc25WYjM2LF1+UTFwfjdFVnFQOFIiRzt2ZzdlfSk7cVA7USomOkxJJlIpYzBPbntYeTtsUlclRmFRdzV2WGhpVUBoLklqZm8/UEs6ZlJkcUA0RW1wcFprVEhPV2E9YklnPE08fTo5e0pzLlhuKSYjYFZRYldPOCp0''@;'; put 'put ''X0UubE9MLEt5ayNyV21dbGIrXk90YzM2TStsbWNiUTA9eCZqQH1bYiFNIWBATyYpaCEkajlrWD9dKHheOnlCRWdqbEYrVV9DfVMoJFA2SVIwT0hqYnBJS3NJRWksYFNtLmhgXlE2NmRMUFZSW0ZXW1k0WTp2a0JNNX5YJCl7O3xkfGZtNXc7dmw4QXU0fERwOTR2OjxQRjM6VSlAZ0xGKS5xXzkm''@;'; put 'put ''KldwKH5xUXc1aCpKQEoyblAhIys6Qm1PKWc3V2Z0ZnMsZWY0P3NhaG91ViQ2a3xNeFErWVZpSkJLJltpVn1beHhueTRbOU81flhBJVcxNSZULE1RYi9VNmNfJlB+I3dgQlhbcD5gXjBfVDZEMSx0S1l3YkVba3RDc29gVVR4Q01BSjtGdVVaSTA1ZWQ9bGQ1fWQkW0Y/OF82JTV+RUB3S0klRkE4''@;'; put 'put ''Rj1Hc2h0Zi5meWdIfig0cTNRXT4kMmxNNU4xRFl6eEllMSw4ODwjbyVRLk5qYzJhb2pWcGVQY0guejRJRWxCV2VYQG5MNVtNWmJxJUkuYHoxPHgjQEUwI3JhZXlfNm1kfjJId1NycH1KJkZAa1YraGtxTD9aZlNMPSV7NVQxR21nb0poYURHPWg/O1IjeipWWjQ3WnRhT2I8Q0sjVkksUXk3MV1E''@;'; put 'put ''JkcxPVJKU0BuUj19bGhoTTIwIV8jJHdURmdGWmMlJi4kfUdKezhlUkRPJXpYQC5AXnZLMDY2ZG8/ZCxGTn01YEYkZk8zaTV3LmEkPXRgY0okYHxtXjxZSSJYNEA5P3l1WSVqeXx0RnhReHQreXtNO2w3PyhZWVFoaW1eNm86R1hodytOaypPY1NJPyhralgydVJQIlVXOmNwPzdQMDl2OkI2UGMu''@;'; put 'put ''S0lHSFpfPVNSeXpTRywmM3RAOWJlImN1b1QqXSlTZDVQMlc4YF1zSippLF00bE5FOVUlWyVxZWNKLmoiPF1pXVJiIVtCcSxOZDxFIkh6PCwmPTBXaztOKipIMTo6fEUoWFRvNCp8W2tiNGlvUTpaS0tKZEl1KHdyOihhdUI8RkxWVUc+e3U6VEt7cjEqWF45RikrIXhGR09ve1E7TV1DYl0uK1U/''@;'; put 'put ''SVFNRFJpeiNqbj9oZSsxUyU2LyxVbDZYZDc9fCJbTzpyOSZHIUU0Qj1zIjRBMHdQRWY6JHdGZjxLJlF4SGNRTms6SSpPV2xhcUhyZ1RPRix7KXY/VlZGOkRwOys3NjJZKzdBT2wqSkcyfGdfcTsuYWQhdFlbX2FEd1dCMnReSzhoQHhVb1t3RHQ+OFpzUihtXkohOnJzPnB3dXZ9ZSFKP2R+JF9K''@;'; put 'put ''RiVvRnR8JE1RYDQyVjBFaFRIPSZWVSZVK1pWR3hQWVNxcDRLVkBLcnNtcUNkLz1fJCNoKWxZWVlWdUxHcztacEBAZnspSkgqSEJqRWpIRkwmOjV4P31lSTZlezhOakVjdGJ1XUJvNUN1ITJRSSYxNShXXX4/Jm02SiFCIj5TSjVZeV1+VUUqRlt4N31tIy8sdU11ZGZkSWhTRkMjbGpDQUJxS2c+''@;'; put 'put ''M34+MXBTXnRHQ1lDa3JNRFR5cV50ImpnaE5HQzJFZVEwIyZ6RGdFPHd1dDpCTFZeUF0lTjkqU1huKHBVdTVGP0w2M202e3BSTS9ybmZtcE92RE9FLmtIO355MD1dPVZaMS9tVEBTQHR4SGFfXyRPPStwNCFONWl0STYxd3hpJXZbciJBPEs5c3V6InM+RVJpUSJnWylAck9EPnpiI0A3fS8ybWVq''@;'; put 'put ''b3g2eDZ2KyYsOHNXTmVuaTRALDteJCM/IUl7VjxEYSpjTmhwN300TEl0UHs/JWdsYEU2Ml18aWlmS3NCaiQiSSFsR1pde25VfCI+dj0sZGApYlV2dG0rQz55Tk9AVWFIOl0lbDkkbyxDNj9nLG5LP0RAP2MuXjx7TCJROU47NCt6XkdMUHJhWElVdSJnUylvYyp8ZjpWXVtfTy9BVCUzLy5DYXs3''@;'; put 'put ''OSwpbVNYVU9uJkl7MXpoV3F1aGI6OFVsfFZTTTRpMHpjMTtVbyE4KElUTi5wSVQ5eU10eVdVMClGdzMrO1tXPEVudWRJVld1Vi9yNUdgVXI6PjRLT0U3ZEY0fUUjUHB4JUxdUDoqQElTdSJMZmA4PGVSJlZ4VWpwOVAqSEg1XjgyK0JrZiN5QiQwbjtZQTU+czc5I09edzkzNGBSOXB2YigzP0Zd''@;'; put 'put ''OVg9OGsyKHxKVTAianNYeHFuZElNQXBDNk1jSWpLJjVmLEhIO0ZxN3dPaFdaNzwlPTZfVnVkKzs7aWdbfnYjeV5KRjpzI0g5OmAkQ3VybkZsQ3ExUCtWTVsjTVVDP1UkNVMyWmtNNCF1RSlKNC8sTEdMUi9SUEJNWjl2dUkhREg1c1gyNVcvOyRFbCNHRTtfczFDfW1VTXhMfHlmaWBKNz5IbVdm''@;'; put 'put ''LFZWayZ7O2pATWNWPUJvPWBSKWY7K3hZKGtiOWtsNTNdWGQrOjk9TlAjSz95fVhAT1tLYmxHXyx7TF1waFt9Kl1NXVpyS3A+JWlsNFM1LE15cjBgI0NePnI6O1dfYyZWMnc4fm4zdykuP2tAMlgwT1VdLjNqPUMoPk1uTzA5VDFBY3MrQzshQk5HYVBkbHgqeTZtdUhXQSN9dH58aFQ/I0wlRlYh''@;'; put 'put ''QHUwKXdgV1Vuck98VDMvOGNtUjF3SUBSbG1NIWs6YiIyX1RzWnd2QDlKUVhhUkJoWDIwKG1BaVUwVlBJd2o6JV9pcFpSKCRzN2BSMlhdKiNjTSR2RjsufWgpMk5zR3p0Qm1lWzRLaWBbdVkzW156aU03MUM5W2NTLFF7UUd0cSElNDl8WDJWInN2Zl0zWyQ4ZU9+JTxAQVJZeFFzaWpAZjVkMCxR''@;'; put 'put ''fkdXXUloKEA7VlpRIzEhZlcvIkNaUSxGa1QzLF9JRWZGVCQ/S2RiMWohb3xVa29ucX58UEh1NkNeK3l0NmpDP1lMR3Y/SUd0KyopUS9IcS9gND5eeWpfOjhgSiJjZnVQOkM9V0ZMX0plZ35KU3NYQmshbElpaEBuNVZ2LDtTcldCcTYsdXBdYDxrZ2ooL2hHd3lGc3N3aVdlQHtNMC5jYSRLJCY9''@;'; put 'put ''L2E7YV4rdnh0bXB0ai93YiRCaX55LDFROzJgRHEpTDpHVy97VHdpRlUweGsmZEEzem5mX0A5PmcsQCFFWU4rdiZRTVovS2ZAYjUicWZFZm5JL14rQ2ViaXhOOHBUQHNDWi5rbStNUDR3T0N7P0V0SFhNOmMhaSxnJFpRSThrZEhzTisxMD1ofGs6MXlpL09bNmUhRUh0L1lkTlRTVnMwZDd9UUJJ''@;'; put 'put ''UjlrYUclYFhuYmdEeWdEJVJieHdAbig3PldOUDkxfVR5c1Qwfip+TmxaUTM2citKYHA5dWpkLmllWlNlMkgzaiVKP1J+UFd0Q3ltI2M3JEUldXkvI0BZK3NvR15UVShVW044bmkhIVtlZTNJVSQiMzlNeEJPZVZTNEk7ZXg7IzQifXw1PGxLOkxFZlE4K3JWNT5DOEBDVmYzLFM+Y2F8IXY3JTV2''@;'; put 'put ''T3EzIXdjInVZc01YPkkzbHVNYSExP0hpUFk/KH1IbyVfKGE9TE1IZGQvK2ljeyldTiY/RzohQjpWKHgySj81TXNBZiUoS11+MnVHOkc+fCZyKmtQY0toRSs+eCxDPHRnN2xmc1F3OUVldm1YS0JGVjxaXjxnRUYrKnZ7Y1NkIVg4MT9xYUFXKVpbKGlzW2VnJjQ3YGpuInc1ajhmaGVpciY2M1FK''@;'; put 'put ''QmpYKDhVJkArW2UmemRlL3I+VnZPX3pqK3xERl9vOy5hcyMqYkdGI3xzS1o1PFttQHtJckFSQz1OQ1dKNnRjKTJyQW1OZHloWiROTUY0KnBOYkBQcURTd09fYjI3IzQsO15wUWZ2eWEuSVNEOm5PbisoW30jekl9Oi5IaC4pcihLLCoqJGN3UXpqTipSImE5SEA2RSNTSGs3ZyJSVUZDTXdxSWA8''@;'; put 'put ''MkRgOXkkSGd7fS5eS3pBQio+emNTK30iNmUhd3g8PWBsX3A3clkpUjZXXSMwSi5Fd3NxfGpSX3YuYEh3Pip0NCouWnVTLFE0LntdIiNjL3A/dUdVNXRndkZfYiNMX0RdYTMjY0RCRnJAPDo4IWZQRURENn1wNyJKIWY8OUI5PVl4fVt+YiUkZSw2IVZbSyo+TWZUQHR0NER5KnkwaUBdMXdXbDQj''@;'; put 'put ''ai9bLl1mdH4+WU9paCxBfWolKDgpPjZGfXdTNFovI0xTOk9tKC9mI08mXzB4YUF9XXI/JFBJdlY3JUdLdzA9O196YXc7TFh+KDEvODdoUSNuci9CQ155MH1xc3lzKCImbCpYQSssailwTEBOenx2P0I3Uls2QSksOyIrKm9ye1ZATj57I0lkNGdxY2YiKFRsbi9PJWVdcEh5fUtYeEhqYz4kWTIl''@;'; put 'put ''NEhqc3Fdckw+V2kwXlllVmA8anh9fS46WHA0NSl4c2JTN2U7QGFqY3pYczFoRUcie2B5fX0hKj9lSUp0bmJqTi8oXW1NJkF9PVhRQDJRUjlDfnxXWGNJTTxPOyNLdEJDbTdmWWl+SFdPTFBMWncyeEQ1V1NYYyEsdnYseExDNW9pZE45ZFdPblQ5USQ1WzFdRWo0bzhQekB3XUxTYHdMZytrMDdo''@;'; put 'put ''VV0mI145UXp+NS9nQDNqWlBDfilRSG4qPi9sMHpCTU1oSTQ4OnE6M19RUy4uPmVMO1ZWOExLbFtXfCxdfnJ7emlMQSFMMDdCVk1kTGheblUxQVhxVEw6NmlESlciLlhhaERFeU5xWk58UXM1Ij5vVSZESzV4cjRAWVdTWFV3OTsmPH5NYzhofXBaO3l0M1N7XWY/IyErfFlMfCkwZ2wiKSRkTmsm''@;'; put 'put ''NTE2LCNNRCs5cUR9WFJpM2t4fk82azY7ZzVicHFZQz1AKnQoPlV6PV5XeCVzYTRkSkszPFFmQC8pM09XSTN3Y1EmNkwrQjx5L3Z6U2c6cWBjPDlwXz1DYFFgN1dUVE95eHlyIW1aaHlmPGBZT3x1bW0lXSVmMUVxUGhuTXRITGtZZnclKyFNNCRlfDpaM3pzPzB3SiplXkIqWm10dTltcjt0dyRF''@;'; put 'put ''MCRFTmxQYjNFOFc3b2Nfe3pjYzdvRX5VLHE3UzlERmFic19FKWY7KHklYUZ1UGQpZT4lWClnUktlU1RjVTg5ZCp9M2UvO05nVytzKEc6Ji5EXzBxPnsqVWJ6MDglJUNyIyRmKzA+InozP01bIm9OY3ZWL0ZCMTdQcXZTPm1sfHxKWHFWK1BzT1lfKSUwVjNNVSlLVFt5WUdyQ1FpbWxjKDA3UDFk''@;'; put 'put ''byMsIjhLYG9vRkxMRDxMWn13V3xsOTQ1eDxjXWovTSRJe2BIfVR2NmMkbHdgYWtlW2xHaExuX1UoZ1dnJDJLSjtSNX5XNn5jYyIhT1NaaFV0T1F2Z2g2bH1RKzI4JD9BKllPZT0oSVVaUWAqWzF+OEU2UnN3b1gvZDdMfDcjOmZHcHM/U1RkZnZQNlNAdDRgXzExW3RETUlHVGVSdGclYFEwVlUx''@;'; put 'put ''fHtGdlRVcnx2eTxOTkFePiNIPXIjVTguXylLbnspbT9AdzYjM2VuSl5nSmB1UFtzYFd5SzFAUklBWT5TXiMmViZ6fWlJPmdgP1pgZVh6SV80czEpZ3RNSjwrZGBiazRZUms+LGF9bW5VfF16W09mYSNRUXxvfi46WXV0aD55cHsiW2YkPkp0UHlsd2NGK1p8eDEmKX16YWRXKVFjXSlJIm0zKytF''@;'; put 'put ''S3drYkZmPGNvUSZ4XXNHfWtWT2R2JFRLODZUVSZxam1TSVNOZ0IiJFIyNCtjN1tfWSo5X0YoXV80XXo/SSN4WTcscDBjP0U+eFYyWVNLU3t4TWBCaXJAYil7K287Qn5hejI/a0hkSCJdVikrXz00NXdWclQmU2A+eFdTXzY4cUpgNHI+dkc0MnBCN2F3bEw2K1BpUXF7eCkqeXFkNixjUm13bVNQ''@;'; put 'put ''bTokPG0vfT53LztOZzhpaVo+bi9ZTyQqekRMVHR5YU1JdlosZW10X2pCUS9uV2dEbTEraGdQN3I2azBYX3FbNTFfMC9jSDEhNl4mUDxuIWhrRC5tQmJ3dC9pfTlNfiFLbVNpLzd8MytEI3E2Qj4qe2Uic3VwQ2EoTV10K3kzbyZCUkw8eUozdmtSe2J1YmE3YmFIbFtqW3glMW15Wn5xdkBDNHp1''@;'; put 'put ''I0ZeUWtwcUFxMCVWMHU0QzpCLGd3dFJadDB6fF9hck1paUMzWEBbfTs1azFCVDdHfHpALys9M2tYcnlxZDghMyRRSSk8eT8uaDcsIWN5TFZmNjUuQDdwNXNfZS8jczheMVRWZHojcDIibTVMX1FIdypeYFAwJlRdUjoxZikvYCNwcS9beVMhNT8ud2h0Y1VBPHNsVFJiVG1pSkhtIzBzcGcuLzdF''@;'; put 'put ''bE4pLyExfWdwJGUuTUI+bTRXNlozOHw+XylwK0ZfMSFociE3cj81P1V6JCp2cThPJjg+Tmk8Xn5mbXFtTE9vbXsjaylJZl99P3JzRzNpcVtmJlo+ZkR6KnBqYnZVSFtEe0JdPVdXIU9aLllYcCg3QlZ4cU5HQ0A+fmsoXVZ9JGd8KW13aD9fc155Iz87MXptSH1FVWRgbmhaL3JdTkhYKCw/RDVC''@;'; put 'put ''VS8lSjdPRlpZNFJobyw+JjRPcj9+WkxnQmgzJlMzTFRMLlJlSUQ/ZSMyJih6IV0+ZEE6dzNmfE1oPHUvfnl3TkZVZ31PO0dJMlFKYC5IcSQzbU9Qdm91XyNKRFEke0x+JiVZfTFZY3t6KW5NYzdqamRqK3gyYT9QU3dRdHVfOipqaCUwenw9dVYlfHxgSlJBey4pNGFEYFIhdyFSIXgybEtdUHw+''@;'; put 'put ''JXs3N1JfUCtWQ0FuZGAjSy5LMlohUUBKfF9EPFh9PjZCMy55e0Y4NjxbNnVaQn5ub0BAUz5MNnkjMm5MKUU0SXldVDtUJSRXR2JlSiZkY1g3X29Bfn5Xbjpac1U2dTQ5cXRgUyJJXiEoYTlXYzgrVSwwZGZEXSs+OlhERG5Oaj88V0wwTUlsWi9Vd2NJV3QzQ1tffFk6e2t6K2YwSChnUndxRTZ+''@;'; put 'put ''ay5JckhzZ3NDSndJfExhPmd1e2gyfERbKzpHfnwqZD5BVSNXbz4lPl5TQGNDUzY4cncoOmJ7K1N8flVGSE9JI0ciXzY+RkB2SywjMj1hRG5Ua1UvSGZwTFhzblNnUlJVPkZJT2lbfmhaPy4uM0w8TGsjaV49LnxSdl0paWFXd0IiUUd8SGVdfDhbNV5IXnpdeU5SMWdKeCQkUDo+bmwmYHcrY0Q+''@;'; put 'put ''JlArMUBCM3ZmWk4pXlFseGwqUnc1Z11fJHNlMW9kTyNPQ1hqX3ooS1Z2MkBsPHxBY31yV1NmaiMmSltUNWE5VFs8Qng+Tm8rb21UU2ArWkJZMkEja2MzLktPY14kYmU6VXw7fS5MR3d4W0owJTleXSIqekNKbE5mOGhXZCh8NywkZm5ubkJuWT9tdDE2X1Q6K3VgLy9XckVLeVNBWXQmdClrbHEy''@;'; put 'put ''JWBENnVlZWZxVGNYVndCUF4rSyx1YVNJfClXU24mIkRQUEF5PWxOL2gzPmRTSTc1V05wQmZOPUIuZm9Kb0ZrN1oyWS9yISROTF4pP1hvU2QpUF1eZDEwdyNjJGx0OkJiakB5biUoc1k4SSN0RzRoSW0lQHljOy9kc2I1JCoqKUxdWiZMRyNUbyIvLDZrQD4hMXlGelF6Jnl2IWJtQCY6U1hfMCE+''@;'; put 'put ''K0lKazo8bWplNitKKCoueUAuRlQ3NWEzTix8aH1GRjRzTmQuc013VkJFXzdbMHNHMnAwT151MEdAUjJQUDxuczssIXl2MCNNQXFNPDRxLnlyVTdYQEZhVGV1Ri9sIWtyQnlZK2N0VWIjQ1ImPltrImduOVs/KmkkPkFXdEJedTY4SD91W2woPGZxRDI9XU5TamJzLF1XZUYuY3xFMG9wYXNZOXpX''@;'; put 'put ''ZT9NYFUiVGRManU5Y0dCRWFObG5qdHVzMFVNPFBLVzdIXjM3Lmg3UV17MGRwIThWeSpmbiVJPWFqcXJPNnohfVMoNkBVU1d7c2xtfjFtNEZ4IzQkVmtmIVBvYVI3d2ckUWw7NHA8JFkldC5tVU5ANCFQemBoMl94RmZTYSU2MjMhbm1zKX4wIl1bSTpPZFRUL3JDbyErLHgsNUx0Nz8jRzNBeHd3''@;'; put 'put ''ZFRrP1hIfkleamR9VD98RXhbMEkyOjN1WFVsQzBmJVFyNDklfHo8NSNxRHt6ajFoRyJlRWxxOmRddD9pRmA2O1ZEInFmU0BmSzN2UXR0NzdtYFtDbmooLlc3KGc6JkdHbTZuIkQ5JFYsRU5QWjIoWVhhOSRXTz1bRDt2IiFzbGl6YVkjSTRPKXtpKlQ7IlQ0QDYwfTxBTXFgIyxhZV85dWxnKylM''@;'; put 'put ''PFtoaTB4cTxDKDNWYTF6X35EeHdHLE9ifVc/dFRYJCFIUyFddUVtIiNNRSluWSo7KVMvNDg/X0IyVl1dLHtydGxvLmpgOzM/WU5aT1VGbVMjdGVpIUNVS3lbWWcsPU9ucmhyRiV4VTxiZFFSaDtdd3IldkhfaVdRJTtUKW9ic3RLX2JTd0NPYTpvc3FwMDxWMW5ucShlVGA4MFpGRF9+LDRDWGov''@;'; put 'put ''NHwzOyJzOytBXlY7JFs/Xmt0OEE2bUZyISRwfXo9Kz8pOTZiX2B+WyZXYXFKaH5heVc7fkIoYG5rIXwiL1c7P1tITSxqSX07aTpHSFJvMzpZdDJNRGR1WklMISUxdFYyQ0pNSVJRNXshfXtrNHFqJV5bVz1FIjtvJn18Lmo8bHBsbm8yUmVKYHxxbF81R1VOcTs2bDhEe1Q5USFrW2ViV2srZ0By''@;'; put 'put ''U0gqVSU1MDxwPn01bjltZGhuaX5JLDxZXytWYzY4VlNxRmlHPW9MbC4hOHdPOTt4UEB0JnBTUUVgV0tOYShIRjllVGYrUzJfY0wvTVU7ImB5Z1lFOklHUGNMeUVxNkNwdExmVjYiaSR9dCZLT2t9ZXA1V1JOeSh8bTh+eG1wIT1CfUV7ZDhiR3o7IjdtfHpzTjlNNkFQX0g1UUhFKF5ifS9mZCov''@;'; put 'put ''OS9bVilnRk13RGQxK3pdVExrI3g0eHkzJiNvbyYiZntGUVhCRnNpc249R05nKF05VjlnZlZaQnxkekFzdEJDTHcvN3R+ZEBGXXBFP0ldPD9scjhiZ3d5aitvVy9dNTNEKSxsblJKfDQlfkpCIXIqejxvNixbOGlFSChONiorbGdqQmhIdDlnOWdlKlRGfD1qUjt1WW4vfHw6anpAdH1ZMWJANDIm''@;'; put 'put ''Y1dpWTAvK290MFhmbENsQG0vczlNbi9bd3RweyowdSQ3Qn1BX3hbNG9rUyQmMTIwMiN4bDtVKjIoeUwzLnVTYDZmdUJCLHpPNy96MG88aFE6PnRlSzUxNywqSDJbJWRdIjs4ZDw8cGUhfGgpSTBHcVpjM2NYb2xqJHBsTzM7cTNUKnFjOXZQS04yfHp8K1k6UnE7OCFRRFNJdHowfCh+a25KfEBJ''@;'; put 'put ''Om5xMjpFNkFwI1lEJlJmRm5IR11WTSpMUCl5dz9YYW46QEdbdGgiZkUoX2MsJXJMVl1Oc2FEK312c1VQOCN0X3xoMyZDJmZLXWM9X3dsRCE2VSwvQldvMCxqfnFCbXciazY0ZEYsfHd7QXJ5flE3K1kscVtWMW5STkErZjxjXXpubFRmUVZFMGQ6YW97ank+LHFsJSphQ3JDbjQkcVYjYW4pZ3Ij''@;'; put 'put ''O2xNUCx9JW8kaW5BV29Vcn1iQHFeeXN2STJZdV9bRUFbL1QuVkpLWT1aR1lLOFt6elR9IVRWIk5COG9Ab29ZW2RuXnBgfDVtRipbdW5vbyRLI111dU9GN3QoU0ZoO2JqJkVjW1tNQ1t+JmdEJXxFay5XXnlfbTBAOmB6PSM8Zkh8Jiw3O29RYiNuPlghU01bIlV9Um4oNkJVa1JxL1t3VWBbT0NT''@;'; put 'put ''ZXQ5Ki91YSRGZm0sanxGYmlOXipfUnB2Sj16YmdhSmxDZ1F1TD9VZ2l8UWc3fUZ9TjZwISJFQW00LjFkaz9zajxGPD9jWUc2ZlVoVUREZSpWVkRVJnJ5fT5XK2t8PnAvIXwsdSx0cTFQOGFMOl04e01qe29SX3RePlBzPGBZdF5mdSxpc3tzQF5bbVVrTXN8SkpWcSZaPXV9QEc3NEIvTjAjXUZh''@;'; put 'put ''Jj4+cF07bmdTST1uZyE/UUtRLHpQYCZZWyNYZkNyaTkuczNAOE5yfjdpIS92eXQhLGIxT3JiKj1RW00lWCQ1QlFHP3VhRylpQH1eazwzISkrODFweFtDU0xlfmB3Q1F1RX5EXVRbeylWKH0jVGVCTVVvajpSW0MxRCZaRCJPRixFaF86bUVJYVJvWV9edjl4WFpVcSlyanw6TWcsI3kkOUciPnpb''@;'; put 'put ''di48MUFPRVRmdDxgb1ZvZWVkKzBmQjZXN2d8T1dzMTE/M3NPTkBCemlVNDZXOWlxQnB0IjpOaGVaPVIoWEMwZXJ8YVU8LGg5fTx+VW5YYz5sfFcoIVheQEVNVFo4R2dlPWxOQjsiUHR0SGVmNDVlYG9geDs2IlszUj5kYU1HckhMTn1hNlM8cl9lRmxqWyZvYVE8d2VOJi9zTD9scWFpTzRrJFhW''@;'; put 'put ''UX4sfWwpYyo4R0MjV1BrVkpwdCFCdE5ANHx8VHpVPyFqdUl0OHFDfFovJC5ZWmNndDo/aGkoal1BZD9XL1NbaUUwUyQzT0UxcjdpN0BwOl9HcTp1K1YjWlRONDYoI1JTfjNlL2F4a2pye2JIVFh4TjE4fWFZam5sc2c1UXwmMUV8JSFQNVg6fEg/cypFWHpXRyhLekR2Y21MaT92ViUwQGAwRGgx''@;'; put 'put ''OlIuS2w0MWRQNSEodTthMldKQSladFc4I3ZUazlGU2dKTWtRQjdMZyFbVHQ2SSNOPEo1JnFzLH1zO19LSEJIcCtreURHV0J2fCphdUQmel8zL2laUyU9dEtaRkM4a0g9eEJKKXl1VW5JLigkX0tzVzAiQGltTkp8OGFULjN9PWRIJkcxZEN2JWx8d00+I2gzTWxwcHNgSz9BUEs3ZHZjaDd5TiVj''@;'; put 'put ''SzFlfnU1MShuPE9BV3Nsa241ZHhWVEUuMDNJWltIIl8wOjJiLzIySlQpQVRQSFBpdCFoNFg+PCElTUhFKD9rQGtxaFdGKSRMWDVYLighQn47Zkx+ZUtteUYsJkV6bzEkZ0BgQjMudCRPNyJpTk5odlQ7MWZZbTIsIkBZUi5aTD1paG5KcUBKNllAWXZEPyI9fixHZWM8Tkt6RT5xN3YsW2gjUktf''@;'; put 'put ''fkxjRnZ4Wj1ZR11vYChYQmAqZm0zKzNaKVlYeU0kOD8/WGBGWHR5OnlAViZob1JvTnokekh4OCM9UVhIIiZbK14xPlBsOSV9Y0ZweFdCWzUlXXJbJlJ2SExdekI9IzkiOGdSbCtiOk91KWx4S1RddW88MFhdS3FkIl1hIzFXUGJWKz4/QGF9JlEzIVMxUjVFOGh+Y09VSUppUmwqXiZWOVt3Nl13''@;'; put 'put ''cUIrK3VuRlV4RFtLcGtLNEg+JTR9REE6K08lKDNENVByamhzVGVET3FAViN8bWdjWWtjVXxCaXhmYmFLKy9pYlo4WXFHaFpRXT9ENnwuM21CW0xgRTphaV1iOkU6di9APWBsSTAhPVQmOX5COE9aVkw+Nlcjdy92PlFJTjNfZTtPJTg6UmJuJDlXJXk6YHg1KEMyYGBPI1NbQkVgeHkmIU1vP0tW''@;'; put 'put ''NXlbV11vPWswJCs/OXQkeHBKNDRlZmpFRjo9STIkUDBsP3Fxd2ZlRDkqMnlYaz0vKFFkPVE/cnxfRiwkZ3w9fTNQY31yLlRFPW55NiUoVXNeUTcsMGFSTm53RCZKSThafGtXWzl+XlJ3M34/Yj9lJFFDSl9Lci4rZF1kdXV8OUgjdDorSXVId141Ll11RGZBWT88K3IlQlpQe15APWUzUF9tZ19k''@;'; put 'put ''bG1eKWtla1lSUmZJQV9uRzdNSjV6K089NjpyW0hMakVzXj59OmRbViMvV2J9NHo0SyY0QWlYMT1Ia1Q9al5DVCwyPGokaz5DMk0wWVc9I1UrY1MmW3w3WWh7QVdYVXlCQlVbZSoxeWtFMmhMT0UzTnY1O0JdIkFmbjQpOnw9KkBYTlQuTUByWzpYIkJDc0o6YU54cEp6c35lNikuWzY1JiQ5bikl''@;'; put 'put ''UHVZOWozSjJGbVhDY050TUVBe1F8RDhaKnhSPHlickVyITdWR0c5JGJWUzAwKmhhcEgyYjR8SEltc35qcEgiK3BPNXoxSXJMX09zclhdMCVMbTVHO2cvUnZ7VTNueTpjbzN9QH5AWyVnOlU8Jm9mcVEyV2hhR1orZX03U1lzYH59RiZhIz1CSSNMVCFjVFhfPmovPnJxTClKRFBTfUlLV1k6fX1h''@;'; put 'put ''RS5Odmo3KGYlOVpZYVpsRXE9biNrISkjWnFMNE1lQ057a0NjVSYsRHJqbkp6dUI7Y2YkLGhxZjxXP0MwS3pfRGtsfm8/bjpDPCFfI1BqQ0dlKlNMcU59cyFEKEU8OlliNWFvYTojeTYmbXs5U3c7MUVoVCk9dU1Ed2dufDQlSjQvOylBdXUhSkB7QzN5OFleZ0QxfHRUeEdUZVB0ZHg/NUNVOUh6''@;'; put 'put ''YikjW1JoPXBGflsxZV4yTjZ6OnM8N0NjYjtiKGhGZnxedkB8bWs/RlpKVjZFe0BvX3RuNiZ3W3g8ZysrWWg9aE1TOEtvR243ciUzXnslPEd4bD0hYn1UbDJJdUBRX11lMkguTWtwanMoT3oiTlJOLkljSzBZPkV1QipDMD14d3BvP1Y7ZCtoIz80WXVeOz41LHBJN0hAeU4qN3c6YEZEe29aMWco''@;'; put 'put ''ZD1xKXp8ZkJnM0JBUG15TnYicjgsPn5mbD5EcThOai97LF9HPz8uMFtGWmlaTnl3azI2P05qWVQ3fip3dDxDcHBvbjV4X0A4Zk5jPXY3KjVZRU5DU3EvJEo1KU5ZLChoRzkxVyJ4OnFWIV8hYzZYOE9HMGdkJEdWNENZVWhZd2ppYikwW1dkaClZRUgkQyglWF5nW1koMUJIZ0ZmS1dsSWwqYXxO''@;'; put 'put ''IXV3YCRIM3pufVMuY3VnIjlvTVFwOnFtbVRyRml1ayZ2UyUmY15CTTgjbSZxb1ZHUFFzdCRScihrR3c/NWojIzJsY3F5SHRSN316fV85NlJNfjhCaSs2WTshflFnMFV7LnpGQDlQdl9IRTsmTGhFMTN2XVN4NHllbiMmeWFeM0BUP3BUXUhrNlJgW2sjOHxwSmVYY1IqeTZxN0dKQnVaQiR+R21b''@;'; put 'put ''bFl8YHdEMmY+MGQ4PXJQcEJjcFk2V3IxWHV7WChvNlQ9YkRWbVNFVGVlYTt6InhmZFdNfm46JnUjNDpgeW5jdzxNY3ElRkNTKkQzeyQkb2NqIyMkRkBPQyE1ODdGQmNwNilmLF4oQDR7b182MiVTKGJRe3pNPU8zbzU8X2QuRTs2Xys7aUxkR2dQVypGe11QbEFlbElMKHg2M08lNVIsQHJ9YnR5''@;'; put 'put ''UE88UGc6IkkjcyZEYTxXVjg+bFMxK2s8WTc/Lz1zJThyIntvVHFgeEB9c3tpdDlKY2l6TzNTKWNJYGtaXj5BWjRLJGlnbCpnLGooJF8kNFo8U1s/X1I2ZG5ESFQ7QypaaEpsKHNTLiNXWTM5cUN2Pz1XKCxhKjs0LnJodk8lVXg1UFFEQHd1NW09UD9gQVoqK0MzUWljRj5UdFlIdHhFRTpYV05+''@;'; put 'put ''I19dXntoUVNAVSUsXj8veGVkbkUvfFJLe21eeHJmaSIrWTUvV157UikhOGMsJFtaOXI3LmlkQTFxXXxublt2NilHc3IrNjFKSjlyLiFzfSpiR2dwTnhCd3tRMTtgPSUmIzE3IkU1Mm53TTNMXixZSX1bayY7Tml9b1F3JiFwRUk/fFhIKmdfdzh0TzoyczQjJDw6VHswUlZ6MDFdKUlvSHFfNl9+''@;'; put 'put ''bmBjS29vLztFUFZMKmBdbXNQLHdWMk9pND1tYX5aRSNAezN3ZFgxOT4sL1hUZHlmZzhbTHFWYGs3JUtMeCpONG5eamgjLFFoOmFOZEshQFErQ047Li5CInhpOiJ6QztpMXF8YUpqdDE6UGJqaiNYIVhjJUdrUzY+QDo0ZklObiloV3UlXW8mbVtqZy8oPyJsX3cwcmw+Y2pXdDkseGExQD9ENl9Z''@;'; put 'put ''V3ZRX19iOnMyRittS3h2ZDpiez5CJm42X2N0cXpYKDZlWjFWMSt+N2BmeG96fnBYeEJ7TEplejpJN3deWU11YiNMaD1SZDViK1AqZ1UqMDM9NDg7O04mNnp1LjkuL2BGLndJeU84WmlPcFckLCwqe25aYyRDMkVdTyxFVUApTWxaNClwPk8/cG5gVjlUZER8OG9CUWlRW3BwbjQyMlFlWlM7PnFe''@;'; put 'put ''eG9hMmQ7cGhiL2EoT055ck91W0olZiUzLHYyRSRkQkVZcSk4dUkvYT9daW1hb0pmInhacGBIWHxtcDx3Wlp6XkpUTl5HfjY2Z2dRZFJ1LDNuSjM0Mno1bzZiSCpLRHldYk9Zaz5FIjJYMmIxXkBvPW9ASy5eenxfR0FGVzN4ZWFWR0RnXVtkQDZ7RXhiWWp+VixGSUZKfENrNWB5TUl5fm86TmM5''@;'; put 'put ''cSxBZSUpdElWMlliXUs7c2RSQyQhNCQzKlI0Mk58YUVYWSlaN3lXTTVIRiJWP2NMMl1yTS48IU03SXk5UVRFY0BpfGdbamM8bndAO0lPJD09VV1deUpIKnJ1bVJ4PHsvRGFbJE12YUp5VV5NUXF4Xmd1Jj8lQSl6NWdTXngiSFdjRHpmXSgrdG0+cFBSeSNpSzcyUzRmOlI0a3V8WXNmWnNLYEQh''@;'; put 'put ''aXptX0VtYXdLJEdoUiM3RDspMCJZZGdwXnAqQlY9Ojh+cGo9ZzFiUEEwUl44TUNhYC4qSiQkN3dkUjdYOnA6T2A0QFNbOVdqKH1yUG9hI0BQKkprZyYpW1hOaX08SXF1UkVgM3NxU0BZPEtyQlohPDkhXzdPQVlHcV1Oak8lP1hwKkVnX3koeW55b3t3QVg6RVt9YjdyPWVlOjQ4bi8hPiRgJm9G''@;'; put 'put ''RkQoXTc0N0B6OSN4KVdNIzt3KT42d2p7RTRaN2VPbGh1Iiguc2VWQiJDY3pOZWIqZDFJfGdUR0BELnxeeXxnLkpWS1k5MyR9bEZ5T2BOcmNgZk5kLGhROmRhUVM4Q29mQV8wXTNfWjZ7eW5GKixAWmJrPV1pVzZtdkl5RDtZXXBpYUFvUl82WXMoVSRqSWJFQFYhJGBoTnM9PmJVNXEsI1BJflJf''@;'; put 'put ''YmNrfk5oU29fSChCd2lCWDYxelNjdVRkZDMzPGF8YjdrN3l3XUk2V3Vvdls0OkI1bjsxZCIvX3lkJlk2TiU+Rk1LNDJgaytFVlFnJn5AT3pMUnYxbSQ8Oy4hKzFiVG1YdyhTKW5PR3dOPFNMPmwlIyEjZzg/SCZnX25VVTlSXy9PRUQ5Y0t7biUxSDNrRChZO0xxJWkhQ3pLITB9S35XXVhUTk0x''@;'; put 'put ''RkBdflk8RTU7V0osSioqUm5ZNUE2eltefmdWOkYuTnt8dn01UHl6WF8jTEVWZytScT5FfnpBcWkoeXl2NTF5RDx1c1lmQH5pdWEoIWFJeD5FRXFseGtjfGIyL084O21nb3A+PmwwbjV6N1paeUEqbjE1ViFPezpoJjh1cnxQKUdRQjw8WVJdUmJaVFskKW5jNFk1TlNyT3dTaWpJMlAyfUBEeUEk''@;'; put 'put ''ayhJPWBQR2ZebGBldTkoP2hEQFI4ODM4QWVIc0s3dmd5UXBjM0B9fDNpLzE9KW1UZU9ZY0B9e0J8Lz9rKjFLKlUvXzBlfiRaQW10d2VhbW1nYTFjUSVRTWg/NG1UIX0xaSElRX40PndkeSI2bWMmRkdaZ1pRRyZhUHBBLGwjLHJOKUpVby4uWDtwbDRdZyJaOiRNV0VPaFZrZnBmKkR9bSYlczAj''@;'; put 'put ''SHsuYH0xZl9zWGNBXlMhYl9ZKyROS1N+UUtzaSFbcEY3K1dFcUM/KyMzK0doT2BEI3RvM1BESkBNQlB0cFpiYlpoKWE8ZVc9cD4zODxLKCs2NFB+WlA9MnRNVjBwYyw6N3MkUTdEZHosQWJbITpvVTQxe3khTmF2VVVRcjQ+VERwQmc3bEQ/fXxdaGEwUWluWG1tfltkP19FMmJXV2FfcSE6bCI2''@;'; put 'put ''PiJPWWs1Vz8ie1Q9MHBdb21OSlp4X0MoYkdJOFEiWmZqTVR3UGRbfkFVUFdWVTovc2BTSXtAUk8sODU4W3pXfiM7Uzw2MSNsK1Q4KXdaRT48V0ltOShEJVA2N2w1eDZQfVhJaDZDQWZiQDNoQDlrTCFqdCV3JDVUIm5ySm9uM2ReMGE7RkNrZj0obFZWL0pESTpnPC5mO3ozTnB+UEwiLiZrNF4w''@;'; put 'put ''THNSdSo3d0AqQi56fn51S04jKGMmOmRZbGBifFdSKlEqR1Nhcz95SCpDPitWXkAkY2l6YkI+WGNKRm9NQCgzbGBdXUpIIlQ9diF8cSlxUWl4ZEIzVDI7eCpbNjdmPURDZ0d8T19IZlNbKz50XjZ1dVAmbHBZN05QSzpkaX5PdHQiVVFDW3dyeElSM3hnI0BgQyE4Z3Q4ZSQufH0yPjNaOXMkJEBr''@;'; put 'put ''YyMzODxrRXBadmhmSjpnSCM2PH5pWXVUbzM8bz5ybGF5bytAeC9gKyxSZ1hHaWNINWs0U1IxVnZudkdCbGNXYjl5JWJ4Pzo0TXY9N247XlEyJXx+ZXlIXVFRNGF7Il4jZkNkdDk7ey9vKUBbOUZEPSF3Ozg8K2s5e2hCYXtFS0Rne08kQ0YvU3FKY2tDOUFlYXA3MSZreVg2PV9eOiJGTX1hJDU6''@;'; put 'put ''L0Zrd0RNLHNUflQzUl9FPiZ4OG9MXlh3ZU1rZUcmLm9ZS290Q3suOCwzJUt5UnluL0d8NWssN0FXezNsSTg0bkBGcj9IeTdvaDxJezRGe2d2R1s4LlZSWHxsNyRxWT5PLjJVP29tNC56QTpgNiFGRTs/XnsmZGlFd1R+WlI+ayE+VXdEZ1NNZjBgYzBWMVdycT1QJCMiJVQ5e0NOOTJfUWsuRzVK''@;'; put 'put ''R2dPS2F3fDBOOD1KQWRna1l3NzpxfkR4c1FMUlJMRTdlODlqcSYyXXUhIUtLJixpZThhO3goWGclOGQmTDhiV28rKXhURjJaUEI0Tkk6ezomTWIkW1Z8InNvOU9pKCprYkpGfi55SURtOXVpcT52azwiKkcmMVE/flslX3B4VEc0QW9bbWE1TG5NRyFMdXk/enlEK2QyPG9jXyh7MEEidFJzMFpz''@;'; put 'put ''UixmQWpsVU8oa0JhaXttLk1CV2lTL09GWmtuXUphcTd+JWx4JE06KnxMVjZPOUA6e04rQlJCMjdoTTcxajFHNk9fYzdMKkx+RTB1RUlNPFhPTmg+enleeSFxJGEwK2tOQ3t0ZWxSZ3dCV2xjfiJKck5Zd28sbnErKlVCKnYvcnlXVlRHYXl1Yz5KIUMiRio2QDxmVjtzM0c3b3Y4fElYfnUoVlpr''@;'; put 'put ''Y1MqclNuMikyQyQkeVNrOzEoZ0E7RmduNjhmWl90UmdAcFdheCh6RjV6LzRUV3Q7Ry98Nz9qL2lqPyRpOyNDeCF9d0kkb1lufW5AbD91MiR6KiozeV5HW1oxfS42WjNmR19iTz0kWlopRWd2W25GaGZPXTZHMGdKdFYlX3VARF5icX5GP0pAQEB+c3xCdkheKCtmeitkU3d2bXhlMHdJMilRdmNJ''@;'; put 'put ''PC8zd34rNlBTUyU5Ync2PTJXdENtZ1JTNiwiJV9ibFVqZWZCOyg7K09zQEBJR1Zkc1IzLkoqc0oxQClPfSFwJTlHQFE9Wywxci8mOmdjeWZkX0taSmkvVllkeGJ+fEB2NngkL117YSxrMVdEWkBrOHQvI2hNRTU9SzxqeFYoZjAzYUIrdFFJZ1taQHx6LDxDPyo3cl9FTjRLRTdOJUp8Qkt0eHA6''@;'; put 'put ''Wnt8NS9nTTN2IzN7M3lOL0Q4RFBsOlc7V14mOkRAUEw1UkBRIkY3TVhxVVIiNjtkdTclQzp+UFZkWDVHTzU3UmhPO1J4eWBRfGZCL1dmc3hILHljUj4yLkshIlR5YTVOQ3ZbPitve3kxPjBpdHA5bl5yMntoTjhQOSZqMzRvMzNWXTBfQF86Z2MzQ21kKWFNOz1HKn5QKF13UjR+ZWNMMSEmN1db''@;'; put 'put ''ZDdtJWplVTIjRzZiYTZCS3skbnAkP11xIVh8fnchUzYpbyZQfnsvTDo1XyoxNlpiajE+dElVVGBaRk84bmJfIj1balpIX2J4YiU9OC5aQHZiRl9lTGJRXmsibj5bIStbM3wpQzl7bmQkODxLW2wqIU1FO2RlKj5McUEzdikzaEJkKFRzWG56PEM9I3IiI08pMVI2KG5LIWZRViZMQiNHRjJIX3kq''@;'; put 'put ''K0A5a2Z6I3h+OVFXUXhkY1JCaUJeQjImWChFfjtocVFaTElgPk0lYyNxO1opV2BDKnNYTGluL3RdNCQrNjRua04kRDtnfGVoTl8+VU9CblpFZmRsOVtjTV8pfXVoSFhGR2JbSGw2I0FMYCJCfTsmJTI1Nzg4ZDVHNWU1Lllqe3g+SmMqYkQ5JXhHb0YqMD1eV3hkP3d6emAvVWcpTzIuaHpFOD8+''@;'; put 'put ''ck5tKnZKemplaiVlRX0+KlRlfDBDXSl3O0FCTyM2KkdNZCI4LmNwSCMpfmV2VCgjTHQ7VHFvdCJzYjEoVys9N0RlY01UP207MmR1RWFQTnpkPlhQe19QPTdOUnZhKCtVLG5xcXo8WDVdbEI4I3g4SE5UQ20zQCJBWkFTbm11eD19e0cufl5Waj1AbTUzfUZOVXxOYFNya1clRVBuRFduRl8sYC5R''@;'; put 'put ''bCY1TShEQzlObXAlLCx0MWlJTmFiaTMuOX1aIndHXV9nP1tJIjg8a2goSlFyL0x5Lm5ASn1uMWkrakUjOHYxRHkjX2xUN2ZsI2kkUywvaXZ4YnIvSVY/M1R4ZF0xeElYKzVTeGpLVk5GVGlmZTRvLFtfeCpBKERLWVpHQzxxNmw7NF4kMVNZNFdjX1hkZCgsM2NbfHMwe1hKJCU8KGMpT3J1WG9i''@;'; put 'put ''YlZ6YUhPbnhgZXs1ZXxlTVpBU0goXUBIZD81VFUkZ3p8WCx7Kn0ueFQ0OEh4cCtRXllGX3UhcDV6VHM3MjthWX1oPkxVJDRad25pKDphXTZhLFg9V1lHOFVjLlBHa1FsVVJ1YH1XOm9efmRoPTZ3RTwzKnNubU0qZzVYPiY5Jkh2JUkpVSVeKD4xXlZ5YyYuSnJ1ImV1XkMxUyZrIltWTGUkQS9Z''@;'; put 'put ''UlV6WWVaUFc5bThWWzgiTGdDN1oxPD91WEd1fWMySzhjMF4uO15Lbml+M281cWFtYFNJYUw8YlNmaC47KCJ1N2NmbDtiKllZdGp0UGFEJFhJP1taKFojPFYlIz8wSFYqWHwsLFU6c11ZInRzZnVfYXR5LCxVN3BHcjBucyUwU3JWZGd6WFpwN04ycG9AamQlamkqfWVSbnxkfTgmOExINCU1ZG9O''@;'; put 'put ''fTNGSilJNWVTUE92bVpIR2tCVnZtdDlHaUl4QEJ3UCh9KXNWIVhtM2kxfCh7PGEqbCs/dWhlfjlxKkVpVShKZXxZL01XP10/Qy88RWNJcEtuZDBTd3VTcVRmUDEkSkRHZSg8QFIrUUByb0AmU3ImTG5QXXxVcTkpVTk2SmcrMzpodHw6Nk5YeiU9bUtqXnpVSl42cyUkdnNsX1gyfkVOTU99UE12''@;'; put 'put ''WVhlKnR7czAoNnhhMD9VZUtyZll5JS4/QyUrck16KDlwRkp1RStzZU9scUZ5TyMzOUk4THtGRUwhQ3glenAzdnJdX3hwLD8xcUcyeCRFZUk4TlV6WENEPnZDZlcvcCkwXjFjSktQa1llPW8lOGIuSktqSVN1IykqPWMoZTdnUGJxMCs6ajREMHlwRDh8ZkNkPUxXbyE/KGY/fS5eKkJ6QG0+PE1A''@;'; put 'put ''ejpWeiNYTHxieGFGaEV1PUsqYysheXl0cEQ9JGU3cnZmO0Nde2g1QDJ2M1htIkRDU3krPkB8NjQ5fnE2M0FgQ1tbeGxiMlFsKEY+I1ExNU00QjZ2fWJAJT5NLzQ3fGV0YFppIig2c1pFfGp0ViE1QntxTzM+KUcsZlIqSz5XKl1SRkF9dH59WGF3W2E9Lk1YRUwre14xakU5Om10RyRvNkhmNSNd''@;'; put 'put ''YVFZcShrYilCPSFCQnUsWk1dSnc3OCJpVm5gdjJ2PF1dd2xTbTs/Qj9BaG1dTSllTmt8UVlebj5VbWI4UEFBVVI8dGl+Oy8sWyxQVD97SCY8a2RAL1srSFYsYTdGYnxdJldqJnNjeTw7KUMxX0cjQFg8VHdSI2ZGdiFCNzU7YnJ7QkpRXkZLRk5AfTJNa1NMaHU7Yk90SD9uRGleaWk8W112d2tH''@;'; put 'put ''XzsmRmFyWikvXm1VcGEwYmtAc113P2liZU91RV1geT1vcDdZWDdFek17XzlKKCl7NF1wbyZgISljOGdkejglNSw9Mzo0byVrRkVndndhOzdTUjt5UkAhNXJjTmNlfT8mNklXRXI0Uld5TFFeS0w0SnN3ZTp1R1VqaS4xfCpiYUM7SShgUGF3KGpfcm8+a0ZNNFVCQT9eTigzNFFJXThdKGYyOChN''@;'; put 'put ''SnJNS2dWWl4oNmdOO14zMkVuNmBSRTMpMHUuL1pbaUU1QjR8fTQ1NXxlV3lvJHJDcTA5IyZoZj06TVFTRGlXcy8xWylmSil0XiZ+WGxLe0phPXQyRXxdb1pkdVkpKkU8NX00RTY2K0ZlNGgrUG9Ob0pHcTUqJnU0Nzs/LCl9b3k+fGQwaWllPXEvdjN9LFYlKGZjU1lROmozdyRedEklfnpUWFhO''@;'; put 'put ''NHsufWpoKzVYY2VoPWR1JDZMOH1UPXRTIVVQaWNfaC5hfXNFNDQ2JVtvaWtUYlB7YjUqJFBHWzRRaXdqSC9BeUV4SyNrT1clNVNAZEVRUVkoRHcmWk1XRiQ6NiQ0NTw8SnRQdW0mNzN8QzdoOmk1WmlVOytNO1AzQjcoOHpAK1NebC5EfSVXPltKM3lPTkUpcV4uZWZqSCFFMTp2SUBReldjKmAq''@;'; put 'put ''YlhISXRpem16YWl7Tl40IjxSdCkqWX0ucGdSSis/ciVLKV4zSjpXKFBGUVlJaT5bcC87YDdMNHtqYXBfdE5tTktCdk1Ia3hybiJ8eSoseHBBfjppa2BYOHJdfD56UDAhVERqUSV+QllLMyJpX2dre2ZufjokMUEyfCZlfn5XZEhhP2c1NU9HRSxNdW13eygwTnVZO1VUMDpsJkI7N1AmTW1Wb3V4''@;'; put 'put ''TFFzQXUrNntkTz9gemBEP2s6a2VhfCtufSxhTHFtYyZfLHFKdmV4b2NLbHciQ10mS2Bsdj8yZDEyUmBUbTZvTnYvUHxvUHA7N081X2pIOzk+YXA6NHxie2F9c3pYUShZVUJ+Mn1sYkBdYCx1PExtJFI/KlJlRj94blFhME43LmlAelgrMCwrRWpbUzRRO1V4VHVVPU1QLmJHSCRbb3tuMlhCOUBU''@;'; put 'put ''QX1salkuI2oxfXJWe1h3L2l0Xk55Il9ScVI4K0Yqfl1bU3dCZG0qTDpqJGl9M0owXmNnIWhOU25aUDhPPWVCPCM4dzRZKXovK2NkNXk6Tzc9KGNVWWFGYFNnSSVpdSwqM1VlPTgvPE9pKnVIMlN5OUxVLikudVhLeztwbXZHPnV7UVp0KDFZPV1aVmg6dyxIK15WWV9aV2N7RWlvNERLTzkpYmNE''@;'; put 'put ''ZF9aNlFVLlNIbTlXSyhFVz9VQyJELls6Uz5CS0AuYzB2UzpDSm57NXFCMWVScz86QyU5RlRpIjtLfCQufVgvSml0dXNfKlU+SjpOJUA4Nkl3JnYuNllLVXZbfXVPQUdVOE4xM2xtWncudFNRWXBbYjFQdDM5YlZtKlpxOzpoaGElOX1PMkAsaHYqQjw7JHY7T1BEOil6UEl+UihEY31qUkI9PSQy''@;'; put 'put ''WE0xaVckU0Mlfi53YnB5aHBHJl5jcnZ+emQ5N3drOiFRRjhERHFFPT5DTDMwbzZDSFQxXnleQUxfPEd5VkZwbG53S2QySn1MOnl2RHhjL2d+Y3pTKy9PMz51VTpqQS48SikobHw3dFI9ZiYucCN3OFQkSmJgb0BFPTxaQTN7dHdbQ198LGBlNShDK15lY3FpQXxZQm8vfTpjTzclNUVtYTtGRUs0''@;'; put 'put ''QyQ+V31ZJFAsXy9JVlZPZCxUXzBPaUIwZlhCd2pVdllNODs5NmElJE5MVXg8WXJeLno5Uyxpc00hMzx9ej9hVTwqcGpPLmgkVUBaYUdSS2JPfjNVKFspJVRWTEMqSHV1LGFSe3EsNEVALDF7aH57Ll9sJUVZZ01kej1sYF9oZ2AuTHg/KU9dX3dCV3R8ZChvMVZFYXZNcHwwRGNacHFZfjNiRnxz''@;'; put 'put ''WkJeaWpiMVt1Il1wTytmYihlK3tpaTpDL2dQK3YsN35DRnNjV3BJN2wrWlZwWFV2YTNgPk5gIWwhOCFOPjd9akJxKH5+bSNRZStWPjEzKjNpd3U2TTtxU3hacEldRHw+Vzc3S0h4NWAjK04zZ15FQmZWOzZVXVIlMitvTExdW1ZILzJrbEdCSSMkIyRYdUdPWzQiNTp4aTA/bz5PMTosK2JYSD4y''@;'; put 'put ''bSE5PHhpYSZ8QVFUTlBgMmYlYnV7X3lfb3EjZjRPa2pXbWFULHFZOGdCSWkiPHA/eTpoIWxxQ3xxO1dOL1I+cjZVRj1Ae0o/diwwIVp9eGBFbldaa18iOVQkKGFoXnBkWmRTPUB0Q2pufWxfJXphR2s1VGIxTWFnNylZQ0R0c2NGTk11cDZxN2JpbUJtdTled31BKGpWR2A2RCU+UTZMLnQ8REkp''@;'; put 'put ''MCxvIUVTU2JeXzF2fXl0cUs+XUxxeW9yPHRCbyk4JnA7KlQ1eXtqbklLdV1mRzAmNHd9bnEsU05xJCVGY0NTd1k/I35DVWh3Qm5ENiU/TDtqSjF9bCgiZ10uPzViS1BndjRnYkBwb0NvQiR1PGdmO3U1PV5UNVByWSEiaVUkJWE7cytyczRbQjFCRnJLWipHUiNRVyt5YjsoKU8rd11eRE14TGYj''@;'; put 'put ''Xm5lVThTcnJhOFMmVEt1Um9FSFgxeChBLCk1fVhGZSNUI2x0NGd9XW5qJkBgeStrdmJGfSZyRzhZLExMRyZ9IlRkWDArQ2tgOTc6bz5VRylrbGFyJmJqXnphbEVFdT51Myo6P1pWPFdFK2EvL1l6Kk9efTFtWzJSXzh5elh0TFJ4ZXVdOkhTazk8bDc9TWJKMitfVCUucHcwbEc9RWk0cEE0Kz9K''@;'; put 'put ''MU9ebjxuZjBONHMqUSp1NFNGZTAxbjViQSlneTA6UFNbSUp5e1kmbXssNlA7ekpXPyxxbndtVCsmfWBIQVVHTFVWVW9KQ1smXWh5KSJ2dzcrOHsxVUplMkpXOTV5UiI5e11XMSM7Wn06KmlVUXIiTiJyai5SR2Q2ZnhEIS9gTFNpdExKekUqd3BqXStRMGR8WzZDS3RHSnUsckN1VjtsJlc/aDU+''@;'; put 'put ''OlY5c3dUWDIqTHI3XiE1WGNBMUt0Kl8yQ2YxTXskSWI2MT5IPUAmbCkuJVVtaDY+PnR8KkZwdkc+cS98I3JFXilOcWdLSDhzREQmP1Q2Mz05UVo6TV17ImU5UjVdbnxDXV9zbk9jPiVsLnUpSEpiQzQkaU1IVEJjWlB8VVgmWThSUHI0YV5HND5vSnl5L3A3XmVQY2l7KmlvQUp9ZUtXUzNwX3Zy''@;'; put 'put ''Q1pTOUJdMHFmXSQucTtkeWY7XSIuTS5YYzhlLEtzbEcwKjVsaC9IfmBiI1FGUj0rYF4+Sk97QDkjYi50SzBvOFk5U0xCTC4qVHVwQSgoPmJmcTx6dSNGMHVpfi9HND55U2dLVihIKn5BKjssWCh0U3sre15WMjxfUSYyS3tTXkxgWHx0VUpZbn08a3hLOkQ7VCtacj56REBeWy5ZO1k2JnZyRUQv''@;'; put 'put ''QnA9eH1NPF5eQT59QX13RUkmKnslR2U3c3BqNis8bz5OPGo9UXNqazwjNXthPjlwOXJJZSpBVGprUjQ2UEhKKVkwUSIsPUxpQ0lgYmQ0LF8zbCo8cUZJcDBhdXU/TGYoSzE9bmEiRUlZa09nZWFpQWFUbUN1Q0dMQypDd00lMipbWDhbIWd8S0ZRdWF1Ul1aSEZpazVCR0Y6IUBAVWlQalpEb3Qq''@;'; put 'put ''MXh0NEBWVHsrZ34zMSswMzVAY2pXa3hjQWJGVF80cCpVbUhfWFMyPzV1OWdZdTp7Nyg3TyptRUhlWHprcT9lZk4saDt0PUhhZDtHa1JtbzI+aDBpZzkzSGM6eyRgbiModzNDLntUaDshaUdwQFcjbnwyP08hVk0pbHo0KVl0U0Yva1F7Y2whTyZZOGBCdnxtOSRoM1JFNTkwTWFsOXx+V2pzXVB5''@;'; put 'put ''MzwuYzRnRmltSXNDfl5DPzJhPVYsbjBTZiUmWmw4aEA/VUxZUF12SWpgKUo7ajA0VXxbQmVZXkshI008bzpIPWg4JEk5LiwjXiMvPGIqVDM5TF42c2tMPmBIbyJRMFU5PlkzQUM9e1g1YEchVV02fjh2RklgWVM7Yk8pazN9cE9TckV9JlFeamdFR05ZcjhaUjRWekYzUE1sKDoscTthcllyWDl3''@;'; put 'put ''Ois3W1M0MHM0UHNAPilodkN1TXghQlY7ang0e3VydyVrKlZ6RVNDWURGbFFVJlBiRis6KiFxMiQxfDldc1clLD9Tdi5+XytfOyxHWn4wZ2JJME1ZRnUxQTpWL1pxK3MsIztXX0RFaz5xeH1HIjJUKTtjMGR7fTlUfDNpaUJ5e2tLVHp0WCQmez9fInoldFRZK0R7byYjYmU4VVhSMGh+WlVaNlYp''@;'; put 'put ''dXx5c2MzS2wwcXQ/K0lSZzhoYG5bKi8/O1UwfFhqOH10Rm17OSIkfDZNXiRZWDUkKyg1NythZlY5QWNaYy9xIWFJOVlASjUvJV1WVmx7PCFlVXdVZjwvOGxgRi8wJi96JEk4PiN3bnd+K1sjVHA2IldfST5mT2dFR3RSMTokNFtCSWJhOm17W3Z3KVMofWguNUM9dGU0WGRiWl0+TE5bWC5ebFtZ''@;'; put 'put ''JVZLKjM6dkMhNXtZNilJNyZ2RTVzbSpAKH5IODRCWEkhKlF+X21ZRH47SSpYZGc0ZGJGIis8YFovSTQlLyxnbnJ9SGgqb31TPGM9Rn0+OUFiTnhudWtPSHd1Ly9WTkVMXiJuaT10MENheU5kWSV5KHcjKG41b19jdENhYjkyQnwwMi9qUDJ9XlRuQGprdWFVJG1eUGlbPTVlOCF7ME9tUSElK1Z5''@;'; put 'put ''NG8heEFxP3ZDaUxzISFRcDhSZktZR1Rhem5gO2NCbV5sU25aeHhpcktrLiQ8TGlSZ0xRbTp0RGo0aiVkdW0+Qjg2KjQvKD1xeE9MM2AoKUp1W114aG5PdDFNcXpgQ2JkRmo+QG47e0w4PUByIlJSVCJHVDdGPzJZMlBEJUwmeWxKQixZc2skZlhPUXleSX1xOmZDSF0rM0ohM2pEPXU+ZnNeWWgm''@;'; put 'put ''W2xAVVtEOjQmNUc2aGpJLEZVUm84Vms9bztCVXZ9MnpeNFFmbnt1byI5UXU+Izh9Z2NWPmJ2KSwpSTFwcSlBOmFTJk19TX52Y2t4L3oqe2tyZlUwe1o+VEpAflpZKXJTOkdoVHN8VyNqKixqc0ArSjRablR5YGV7OjNBZ010filQaVBIRUYpWCJlPHo6S3ZafVE5WSIhTEVmUVpVaC4pUD8/eztw''@;'; put 'put ''Y20+Zj9tbixBXVQoVllIeDI5YFhHbVlhRmRbITRSNS5UZzdodXNqVE5TbGE+Sy5qZi5vIWJ9KWUxXXEvSERZXzVmIX45T3tdVHl1PipnO1RHYkBOUltZRiZPJkcxIXtPQWdTRyMqWWRrLH1iNWpEdW4xcXY4TUhYaCxHNlUjfSRxRzV9bDdlJERqUDMmWjYmT0pBKi9aTihKUi5gJj4kM3d2UWlt''@;'; put 'put ''Z3olfSlLPTZFfTgxIm1SYH4ibU9eZz4kNzkjWCZ3fSozWXcwU1VqUXt0Zjo8RU9PO2JYUEVdM2g6a1BQeU00KkIhIyFiI1VENEJ0JTJ+PW8pZ1NhVl9uUDV2WUVPOmRFOHxwKUIoQ14hbWojUElvP2xlOFArZGw+dlh9eTpUbD5ZN0xobDJwNF9se09xQ1VQR11BMX1JY1Y+P01GJD1ULER0MmEl''@;'; put 'put ''bChvZTZsRilnPlUpVSpkey9WREYmI1hvK3szVkxQbzoranUzXXRAXnpIXmBVNj5eOyF8bWprKTxOcm1LInFCUFpeIWZMRSxGVDlDYzVZZXx7QnpbSldpKlYoUixrdjNNUU1tXyRxYmF2RnJ4azMxQGtELEkqR341RWBpTStkcEZUUzxbZjxaSDVPUE5qZ3BsaGpBMi9iNGJjKjc8JXh0ZUxXLGJt''@;'; put 'put ''KFA/OlA0c0dFO1dESDo1RSZxSEpzI1lFdDxfcCZHRzVkViwjLDNdTF1MZVlaKH48dHV3VzJfYX53UXBFYlZiO0NOMmFrNUpYTVRYWyQ9I1BFd3gwTyxaQkVwMSx2JVBoODBxQEtbMER3W2pvfVZ+USgzd2kqND9OLzJIU3E9YzZhNEk9ZVghbk0sMHk4cSM8Vjo8I31eLms2U1k3c1RybmJvXTMz''@;'; put 'put ''KG9ASk1HbyVzelFVVDpZKClCY0EzKE1PWy9gcVNvZU84bD9UcXRUPF4ia3NGaGp3O3gpQDc1fVQ4M3taL2tZbUwpclIoWylqUEFBYllTR046XTgkeU9rKW9hLGMwKVcpS146aDdwdEs7ViNmblNuIUJEOjlAZ1NMbjdGKGomKFFNPFkwSzQkd0o0MCkyLF5TcDFGSkQjRX5LZ11GR2NrWlBRWix3''@;'; put 'put ''KEM5V1NjYC40RWc2OXU2QSFLaEZiaTF0eG4rY1krQEY2UThIZHwhazNDeUcoME8/dntVKjg9bHomfFN3U29+JS5gMV46IiRmOEdpdGRmNEVpN1doLjRUPFY1cCskWzhPd0g/YH5JOjdqXVo4JlY9VF97dE9wYnpLSVhPOU90dVk2YTIlSUN+WHRxTDFAXVkqXjBYel5hQStXUzNHI012I0hfP1d5''@;'; put 'put ''dVEvc3ltRWIha0M4OUtLW35hYHN1PW85c0JwODxqL0JzdTRwLjp3NE9fa1lUXzApaSlEQDEwSk0uZ21HSUttOlRJXilbJnpSLERFQH05bjB8SD1vKU5JOGM9NmVaPlJVKkI+fTs6UltART1jRzRFJl9gdz53Pi5RSExANmVGMz5MMWtobEpYS3AjU3k2bngvJCo1L1hGI0BYO3tyfHRfKGN6ZVMu''@;'; put 'put ''c35uQGxuO3ZhSzghLG0lRT1eOlYhNFlDTmlMRF9pLC5BXXQ6YlBBPE54enhKTmN+K1Bde2NGTzBZeyFtPSVyUDVjdTp1fnkjWkcuTy5gYDx2QiVuKztmXVs2Vl1jW2JsSGk1PDBVTTVTa1c1bDwlbnNYXSNUTlg5QS5BUm1YPW0sMDBTR3cobix0SWBaN2RyaT57Xj5kL3olT2U+VSxPWjIqPnVX''@;'; put 'put ''fWF6Kn5QcGRqMlNncHBDfSNXKmtXdj1nem9XVmBxcTlJMlhabFsqVl8/ZSVgZi9Wfip+PWNjWGtneSpLNHtlUkpvXmUscnQ5c3tJczBrZXxQNSpDZS83ZVRxXndHeCE2K1RJTXc7YVEoOSNXVDNjKnhFIXI0YkVMK0NSdGdQPjducjl5MFkuaFlec09gby5uOlJZIjxveVlgKk9BMSMwOXFMaDVJ''@;'; put 'put ''Wi4rQVY3I0lpPVp8YkxZU3IwQl0vdFphImJbIUZrSGY8NW8/bDJ9YXxaZnhvMXt7UGVROjo3VyhdTT5za1JuN29kRDpzUENDeylVMzBzZXJJKWx4Vm4jWmhPUCF7fEpWPSNde0NLOG1bY3pnbzFqfitvIkkwRDpuW150OG93NFdpfV54JHRWSHVMb3BeSCUoUHBPYCx1dVVQZWBaSk9NMUM5QFAo''@;'; put 'put ''fH5GTCxpUTs0VTY8LFZwZ3xlI0soVUVmQF5hNz51c3VnIU1LTy5lVHRyTltHS2Mjd1AyWnUoLyUzUCZ2Z1FaOHN3TW0ub30qIy5leGsiLG9YcCprJUt2bihIbSRLcTcuNyR+VUUxW3gpT0I+ZX4kKndeQGV3Yy9vJmNsZ2RuYjhQZC9RIi9aey9DRjJabCE5Rz8yYjpkVXQlbyt2RVVrVD1Te1Fp''@;'; put 'put ''VEcyL2FrfE97QDw6aCx6USp3eGE4Q1ZhbUcrWjNSTHFKYH5zQGwrY25fLnVnJCR1SlRUdGhXeS5BO05+RjFOdiM2ZVpMPn1xbiJIP0doIXZ7bUVhfk4uaywkV3BtPGxsM3FVL0MjK1hYZGkkbGNXJlNvVkZ5e19kMXtNSCFAbXJaYCh5RURkQl9PSE9XZS5uaUw6ZCNzRGBQeG06LmFpUlRac19j''@;'; put 'put ''VWdhaV93Xz1gUCFyP2M+anVuZGp0LzM1RGheSHAra1RSYTpUI04scC5yTStVSkp5SztaVXhYMnBMdXVUZ0pzTHhYeG8jSGxKRW9tST4wQ2hvXkljbWhpRmg4VCYwInB7aSRMfHc4QH5XKlBvL3tmPyQwVFA0fStCXTxRN3g6X191Ok9qYUk1bkMsLm0oOjR7QWclcUcoeCtiREQscHVybHhFIT9m''@;'; put 'put ''SjN9Y1FwOzVoV2VVWCl6dW91cWZWbDBYKF9CdHBGdiUjZkpycnFKUUZrKjxmZlFMRWE0a3cwYGI0fT1xWWloXVQrbEt8N28xL2teOE5jfTZNQisyVSJ5QXZlZD0vMHEucFNXPCMvOSo/InlEY1giQXFXL1l9RyYwS0dpJXM0NXFMTHIqbnQlTFpNPDFESGcqXnJYWUZ8TWk1S2tlY089bl0kNnJM''@;'; put 'put ''Ol02Xk4oWkJId2IkL1RZVzs5QmshI1dJbyEycXJEWiYhYH1JIWZQSkZXKDc4d0c2eFkrMWJFXXBpL2tDJmN3LDcocy8kc3MlZHV5PHM3RT5tU0Rkc0tKeW1BdDBBcS4yJTE5InZtWERRZ09pPWdYJjRKPlNxcmxyMy4oeDpCWHsuaH4jLDxUKDhKIUo3elJ4KjBmY2VlaTJ0by5oRU1XJlAlSSk8''@;'; put 'put ''WTcyVm52QHIoKGRRQ11PKXVUNEtqZGNGO0x3NWVjU1NoUk1PUVQiV2xEN2NnZU15TFI4ZWZQWjo6KWR+b1Vtfk07dDYuP2RHMll7V1s8PkMoNWFOSyEhZVN7bzd5Nm84Z3NhaiFlLFhJXjNjTGQiemBJa3BnNCpOdnUscD5dWnFKRipjeDBRKFs3OldYaiVyPEB8NkojUl9jaSFTLHdUZ105OiU3''@;'; put 'put ''XihJaGxdWFM4VHVSISl+cCY3IUVHZ2RiTCJxNVMiMyIjNmBRTVBVYi4+TnhAJTw0a0VxSl90PllMTWxxdiZEdmRhTyR0QCxRUzokaXpGRnhVcyxWLDRxX1V4eiF8K0cjK3RFbExNPEhgUVVwfkVWMTRlTjZoZjVbaFhfeChdKkU0K1lFWjgqbGw3JmlNWV01YE1pQmFsb1F3blM1Qyx4X0Z2b1sx''@;'; put 'put ''OG1sSnB7LChgcXU5fDVVS2RvPjZIeUVFekpAdXxLIWk/ZmJgR1lPPjZMV3o5cWhXPTQiLmZxZkhFT2R+enQvL1hnO1BAKmd8U0ZGL2tKIkh2KV5JfWc2NDZyfmdLTCtYWEYpV0l3TlFpfUhVTzpDT01lZWxBa15KV3V7aWdDe3pdX3teeiNtYjlwQEYuQEljKChPWjQ6WztvQEk8al05eS4pQ10p''@;'; put 'put ''IWRIX2JoLE97ZGQ+XllXd3JdVF8vRW5RfEdPWzk6UjMyL3huU3VjTnp7dCsqZUJkK14qaXlaeDJON0syKl40Mzt9L29xJSJbQ0J9SF57e3BQTlhHJkZEe2M/aERuWFhzXyZVeHglI2FudXlCYVluNSFNQVN+Z1ZqISZENkNqWCp+aj1iOHVGUEVQSnooZGldfVI4cXYqbD9RVCIlR2pYP1JuUTxH''@;'; put 'put ''QyRQaVdIbDJoRix+UmI6TGhtN0cyZUZoUy9aRD51d2Y8dGtNOjQuJnBGbkRvJWojJEx5K1VGP31ZQ3xTNTgoOXZWMU18RV94cEsmeU5XbnZdfVdLZFhgTX1nckRufFlSTWIiVTNDaWd9TEYoQXNuRWg4Kno3YDMmc2VKdyttcFt2Uk4kM0R1RlheWyNzaW42Tnk9MSM3MTVzaTwhakpCQ1tWenFX''@;'; put 'put ''UDhgbGkqRWkyQFY5KiNKe103SyVldUs1OWI5KSRkdCx3Jnd9fnwpZz92ZWV3RVIlLztHblE9NyIrbT1+e1RIVW0qWV1zIythNGJlJXlJUFAscSFyfHUmP2woYTpWMWo4ISZXO0MrX19tbF1pQF9jdWFXJU07M1lLOz4xaHxQVWRoMVp8T0VXaFlWMyFXM2VrTlpefW9kW0Z2VjJ0OWVbOX5TUEZV''@;'; put 'put ''SjMxUn1rQTw0PXZtRyx6OSMvVlImVSJhIiZxaT5LVCJ1MSZ0RVV4JnluMFIwaVt3czg8SDZCMD90VH1yZWZ+d1VmYS8/Q28jaHhMdlVpQHFOYld8aD09RjxdK0MzLlFnQnU9UH1TM1JIPFgsSHQlRTQjbSsieUhpezFXP31DTEoqP2ovbHYoTit0UlJ6TkpWSyVBTmVSKnhXcGl3bmRROT1pTUVs''@;'; put 'put ''YzF2dkhiMmtOY3V4S0F8LFpSPV4/TSJeaz1CUltyXypJUkQpV0c7bnJZR1U3dUBpNWtfS3U/V0IxKEdHZjpRXXhvNHJ8SjdwRW1nfD4iNGxMfFQ0L1kpYHVFZis3cXQ+a304fmtgKHt3ajs0fll6PyQiJFI1PFpqe2lFNVpdRzJgdnQ6Ml5uUkx8PFlZc2IqQlpKcWwrMGgqc3dYOnxoSjY7OiUq''@;'; put 'put ''PXNoSSN9WHpKMWppTlk8VndFP2RpVDJPJGB9X0VdXT9ifURHVGhlPUhfKEt9a3VyPXA8QVQrQnk7RigzX1c9IiRSfSQhV3Q5VHx6M2ZAc3lhcz9xflhaRVlMJXQkTy5Fe0wwLn1ZWTAkJXN9JHUkSWp0KFNjWj1WK1o7NUg7Lkt9O2xnY2soK1J8RzQhMjVCWj9UWjhpXlI1MUt6NjYqKClSW30x''@;'; put 'put ''YX1Pc25ZS1ZqeUN8b3o4SD8lYHV5Rz5PJjRtSFVHPH01Mj18Y0x0RF9XWlFLPDNjekhgUE1mNkVacjQhXUpEVmopVVNtZ1MmW1I+RSgxazFKRGddXyNudWFHMjw+UTpeKEV5eWg0OE1xI2kjN1NgJjFXYCNPMSkzWllxOmRURUBdQzhKWD1iRS9QIktDJCZVbms0SzZ3OGhxe31uIUNlOmJiTVl6''@;'; put 'put ''bUpSe109ZF1iYy5tPm17MytfO0FOKHxfPjJPdEFZOFJjfDJaXzBXZmw9SUc5XVkmOkteSWZHdEV0SlFuQUV3UXs1Pk1pRGtQYHJQYGhMTHdQOFBCM3JucXxmbkRlWSk0eGdEZWsxKERHOyoraD10NEdNKm8uUnc/fChTOzdaNnVGd3kuLGxDfDdnV15rKkFHO0piPXElR10oe25oIUdFMzYlV2xj''@;'; put 'put ''RTRLc2JEQEw4QWZxRSQ1M2IuV3ZoT0lvWz1EQz5KOlZLK1h1S1B3altkV15kPDRRK3xwK0d3aF4wWGdwZy5oYWZDUVVdMkNkeV0xMVsyak4kZzw/VUY1STM8W1NWUkMpNmxkImo+L2ZdUyFSRj8sem5CV006Nj5AaERoMkkvcDdyZndvXXx6MUJsbz99Qy5+eSI0c00jKitWcys8X34iK1I9fiRB''@;'; put 'put ''MSt0P3NgcDZUUT45QFFIRm82Y0VtZXxEazc+MyxzJnF+QVRGckZKdVsqLm9QezpTTmY6U35KYU9MNXp5cEE4a18jfn1aZmghdkhHXWd8Q30wfTZoU1pmNGMrbV9oaj0kWF1fdXtYVFQ5c1Y+d1JPQG1UXkQmUnlwJGlVLyV1cWYpfSQuN2MvVHQpeElxWjtlUWNRJHtRKVU0KFI7ejZvVDRoSiVG''@;'; put 'put ''VFloJG1XZlIoZU4pRi5mdHIuQ0dAQm47LlBLPDNkTUA9P1t3Y31LXmlwdyZkKTdHOF1nXjZgVGJYTDE5IXFXX0YmWV14VngkfH1PTWY2cSkrKHd9OkVxUDMvYi9sK0BPJXZJL3V2MUJ2VkA0LG9IN3h9VjhCODtMPnF9NiY+Om8yYE82ITx5I29qX2RQaCxEaF1gVFdkRCxyemE1fnpUOWI6fD9u''@;'; put 'put ''PGFDd2FbJGlBNVt8O09XMCg4aENaWXwzXVlBYzorTnN7QF1HKTA9REQienRYNTAufDg1KXZYKGhqNTIoYXIiQTpwbWB8Xm4hZCpZOlR2P3g7a3tDbmlKLiRzOj1SWlp6KTRCKipTLFMrL1Bicl4wWSlFMTYzb0o+bjBQInI4VHZTOzVSUXkhTDk3WTQqZ3dDWDRJaUJmc19EbFYwR3FdPjFNUSUz''@;'; put 'put ''X18oemkiUT4hWTtYRXAsQE4xKX5sPywuJVE4fj9WSlcrbm53KmEsLmJeQH5QQmImITxOZHc3IiJPb14qSnx4aEhUY0ZMW0dhYUM6NCZ5MVZ0dn5WSCVCV0J+JSxiVFpYfkw0QEBeeXx2Jnl6eSIsQVsjQTE2QjRUVDlncjUhczV8cVJERjFRNStpYWg0U19kYzJfMWohK0BWaVRXLDJ8Ukt1R25K''@;'; put 'put ''W3teTzg7KyZpV2MrN01OJSJiM3xmLC4jQi5VQkRUZWM1TmVYQFRDQltOc3BfOVs8TWFmeDZjKCo+eng6UHdBZEQqQDlJYyJuWWgjIzI5LzxeWys4UH4wdy8yOXB5eD1hOl5VfHI+VElQK19SPHUoNkBXZHgmdWxAVT9kWG5uIit4W0oyeUk1JGwlOUxnbTJHV0IrSG03dUhjQ0RwNkxUMmhZbiks''@;'; put 'put ''Mzw6IVYvfUFyKEo8MCEpPEJZWE1bTU1HMWV+Q1U3Tj5oRWR4LFksOnZfUU0wazdkPF1BcGRxank3dE40VVEpSmdHcGhWdzhJJU9YeV8mOFRlJT06PCxmVXtPPX55dVJ+WDBvSiR1fDxea3s2IXEqLmtmTWFyOXlYdFZOIkV7dmxKI1speXt0ZVV9IVZ7S2RiaGsrdTZVeG91YUFJOF9FPTl8Kkpv''@;'; put 'put ''MzZHIzBQWVAxMTNIXmVZWDBFRTdTSyRtWzVoaU9mS1FXND8kaU4iOTpacDo0R1YyLFVDWD5kMXUhMmxOPDBhWUA9cEc+cFQsdUNqLHtOT012RjcrUjU0UG4qVlMwRnB9YylIW1dJdzZ2PG8uVSVEM0BqRzhLOHFTIiw+PDUwSDY8Vj1PJUlyPWRHVWVMfStFJCttSElMbj5pOSNSait4aDR6ZH1F''@;'; put 'put ''d3twQG97fkBVYjVaV2FGdH1CQlpuYkUmKSZPUGJOTy5lS3tTSiM3OSF9OjREakBuNHt0RFJUeGE/ejZPeHpEWlV0eXpdPVBYfGlCTW4qZ24kbiZvPm52L11BTChbOWNLYjBXU21yQXY+VCRhXnlUISRBPltpN3prLEwrQEhybT9GbiRdNilVe1JKLjZHMEdASF9kSyM7eF88MER0WSg+PDt5NCh9''@;'; put 'put ''L3pWNixqPEg7SF9UfmV9fUhZeDkhdm0jNUY6RWNwPCRNYVg1JCFkfThSIUo5U1ZufVNET3dJWG1tU3BmWGclRyl9P0xXWVNwTmh6PEUzfndIc3d7eS8pJUYhQypSYyhpTj1gTjY3W3JVdVFtN2o9bn1QM11AM3FGSWYjSFB1QUwhbTQoRFsjbzheSCNmMTBQPURyfDc/JThFdTkhdmlzbU0kciUi''@;'; put 'put ''elAyRVtiOWY7Oyl6bi4+VEkpZEViSUE4QGUkbUg8a0ZHXlRsbFRHMT1hTV11ZTgubEBkWD9RNzI3b2FsI0IyPCJQXV4yRiIsSmclaT1ne20vaW8rUFk0bENVSWNEKT8pPVlNTlQjaG9kWX5eRGYpVkhbO1NkZ317SU0+NlZFWkJ2UV19V157ZkIsTjN0LyN3eC83ZVUsZF0oYE9kdTskYTZ9LytC''@;'; put 'put ''ODF5LDcpb11xWW15XTwoTUtIPylIXmtMQn0yd0M4QWpUOzVvVVsjXmBiImtkKyplOEZWUHtZQj93K1Z6b2BuPFBfcH42O3VYVmdOXkp7Z3RSSSxELlhTOmthQ1ZfMSJ1TWc2MylzZE5sczs5VTU9fVRVKVN0OEhNKlssPD56UUlqbz52TnREJERZI1hJZ3Y7Ly4kWjV5OSpRe2JjektaWGhBcisw''@;'; put 'put ''cEMuMUtuQGN5OzRxZGFFJVs0SXV6Onxre0RaM11+UWJ7NktoUnJXSS8qUnJLV1ZYWnFDIywsdERueFMhX2c3fkcjSms0Yip8OWZscW9Ud09Acy9EYF5mPEY7O0sxUXsheUFPPCMxWGVYKztpZmAxS2dLOTIvcmUrLypYQUp4In1xbC4keis1dFVIdXNiPmt7dVVtOyJjW1p7MXJsVChQTV90Yl4m''@;'; put 'put ''XXUkTm1AT3hLOlR2aHtwNGk9Rm9FMHA0OWZ0aUhnfnAqenpNfm1SZWJIQXVPblgzaCN2cnFjN313YmFDKFFLeWs4O24wMnsqeD1rNkcmR0dML0k9bTYoKDFNY31jRloqQ2hDNyIlS3NrUURGYX5LbSx4Sl1IUGg2N1pNYz1lT3NhUHFoJkJIQng7OXg6an4idCU/L3Q3QT13QnM+QV0yI0w2XT1v''@;'; put 'put ''akxEc1tiMFZRd013ailMdTxJeXE7MEUqYVt8MyRrKVIhXjM9d0NPRCV4OzJDbXosYUZ9RX1ddDpsMHlDNnY2IkF3RVk/KjglOWAkNldUPyYkUTdITEghbkJsL2M6QVQ1cTUmMCx1cnp7ZUg1QSFvR0I6ViV+c254Vko5VCVONV03LFIubnMmaFJ2WkVNRUhLRzldWSpia1h0NyJqVHlLVW5IeCtj''@;'; put 'put ''Xys6aGkhNkdGR1phTmdKbT56LCZLfGEwP1o7QjN0ZmJJMCpfNGNdNH5WdFlBSmU7P1hOV0M1N0RscyIwfV1EPCQzLlY5WUg6fnIsUihtfmE5bn5McDg8VTdASTJJUEBhQy9eOzM0MzBlWWAhLlY3cXNPOGRzSGgyKl02enR2RTRtWUpzQGZwOFdNZiZDUDB7Y3psaGRbbVkpNkBtIjZtcnY+XzJl''@;'; put 'put ''dy43dT92aHt0XiM6Y28wY30sTSE1SXghYWwzQCs1Wih3eHViOVVlKmtlRjJ+JlMxK2JaL1RLWigzNGZgU2ZMcn4/YkwxfV10Z1N8YU9lcypga0lmK2Z8c3c7OjVSWjVKQkZEXkJzRC9oY3smMFZkRzchcnFyKUpZbV9Yd0csNz9DI15dZU9HNyFDM0RQKS5YWTNlbGNvW341QjNlIXJZXT1CJmJn''@;'; put 'put ''Uk97cXp9U0hzJX1tLntmaGBPfjQ7fF9HUyZrfmohIlJKeWJpcWg3dWFdQldfUWh2Jn04P1ZaQWpxaGppe2s6Jn1vN3NvRjFzSm1IUiNiakwoazRPO2t9Ky5YfXklTztrKU95cl15TWApa3lOUzwzMWRMU0VRfHo4OHZeeCtPMH1TX0pCcmJUUjxuT101UEF6XkIwflUiSSZOdUBJP05rR0tNOih0''@;'; put 'put ''RlJxa0dpX04qTHh7a1lzZXI/TkJUOzo7TXtSIzM+eVs1cEpMfCEkbkAwcXxHSTciVmBjIjhSVndMUDkhM2JLJDV3NjB1I3syOzolKkkyOktNclBde0h3NXF+bihWQy9OYlQ6ZHttP0NpOH50PyhSRmRVN1QvbFd5VyVRWEZYbCJMdj1vRGs9JSx7MkQpYC5ebiU+WCo7OXhhVUM1eX4xSSZodUkm''@;'; put 'put ''QWpiaWJifHcoQitRdnNZWyFlSllXWFVdV3A/TUJEZld8SjJIKERQPWBwLiZbKWRlYHJ1RUYlVyV2KEJ7dSZHWEN1YVk2Z0l7O3cpLnsxMHE7e1ghblRnOXJlXl4lZjQvcyRnTW1bKT5XPFZTenJnRlA9bDI3SmYqJktoRiFDKGB+M3U2TXN1dzJ2QkhjKEJPPVgqb2NdT3xBLFZ5ezRoKVtlJXVy''@;'; put 'put ''KUd1K3BfOzdyOE8iJWp7dHByJk0zdSpGe1UvVD9je2xFP2lHbEBJfiR0PVh+LCRCPlY0eF9EV1JPYnBFK2cuLG9ld0xfPzhlcFthNUpvVWlZTXdsMXNwUEtbZEA4byYpZmA2TF4pKjIpPCZnST1jPXwrJUZSVCNicysmd255eGNKZkpoU3ZZbzhCN0EyczRiamdNQUooXkBsdCs8WV9jbS4vb3lo''@;'; put 'put ''RER7QWxmaFtvRWRZdUIsY1VdNHIvfT9+KzgldERFUDkpVC4mInYqdlRfak94VGpFey5KQWk/IXlWXyhtfHc4fmVAaFtOJX5CcF9pNSg5cV1aI3RvKCp6NWcoXjA7WXNnRU06MV5JMys9bGw4aH51YT8kbGUyRiZXJE93KWNzVyo0aXpjO2FDTnRmTEpqcSlDMkxwdkxyai44JT9lPzdlJXVmW3hi''@;'; put 'put ''ekZlXUx9bix+Ui5Ediw2WV0mMWV3SXZvK246e1pCfFNAOlFlTX5ybz5vITlPblVdXnRwKVVqMz8ub1shcDAiUnpteFNPSDZuViVLflUjPSNec31BY35JMC4vMX0zN295fWkkMjthQGVfWGlTQG1jLzZ1R3MzdTM4NGtWfjIxLyRVLHx+dWkkNFhmfTs8SyU4SShwMF0+NGk2LzVRXz8xcUZ2PmlH''@;'; put 'put ''Z3xYTGJMRGF7fWJLW3AqNkoiKXNAXk5vVEc9dGVaNz8xTlJpZUdqanZSZEx0d1BPQEFHSEVWdWJ+RlQvYSspSSZgIzQ7Yn0+RiRtK2RkUlBUNG1rQitmVTFCPjEhb0lNMGJCRzMya3NRKEd4PzFuW3tocSpNVjlYJWs+OnB5eDdCI25zRXVTbklbQ3lBeV5leSQ6PTBkJFUlUnVqV3dMLkxiPjFl''@;'; put 'put ''WDIjKilJTi8mYFo9WC5lIVtdJENrLlt2PTAvNytrSDAvd3wuWjpvWnF7K2cvTURqTnNLdj9EOmgxVVdLMi92PWpeKUZ4Q1NUdFZFYThgcF11QmcvVXJUfiZ6a0Ria0t4TUpsOVgpTnxAOFlnMmtgaXghUyx9NEtZT2woQ0Y3Pi98VmFGeylHWXFISWJGQkNBYEl9K2xvTUxSY30qbiprT3dkc3dK''@;'; put 'put ''elUwdk00d1kkfDg6bngxM2IpRDhvOXMxaURlZCNrOVJEVH5gLipyY2RPWWFqRyVZYmp5Yyt5MFBWO0ovcFskcDJZVjMmY0JxT1RRM2A9WF0vZmczU0V2UlhQbTF8cXQzW0REcDhwa3BCW2B7SE47Knw2YjZzM3Jjazh3TDdpZGdjIkhKWHs1Oko2Y2QsJGh7fF1TPHZheWBASkJoTXRPUD8iXz53''@;'; put 'put ''Rlh8InQ1bE4kQDY8OHBlZl9vW31uSj1xciIvb1ssQ0g0e15qeTM1ITkpVmMoXipNM2pNWjZdPEp8c3I2fTdmbWU1W0w6e31xWVB9TjtqeFAkZmssK2RfPUNvZTQ+e14+IzNsKjZAXUBVPjtbPD5nbzlXI0U5dDsjYE57UUx6THAkNWh7XktOYEJ3JTwldzUjcFssTD1AM007fm47JWo6QDN4fmBx''@;'; put 'put ''anhtUnJMN29mfCU7NDo0KilbMS9WNTFEaFVvQikuPTliQGRfPnJ+PS5DWE8qOEJMfDVgYj0zYFk7bEVPUW8xTmdsfHxVRkY4cytfJl19KjsqLmZfMS5BcS8lLHM/Lk98Xjo6L2t0MH1UPH48QmBzS0kmOmxYa0Q9QXloQ2RzPChfPj9MTkxCb2FPcThSKDZ2OXYqdkN3eERKME0wNHd4RGB3eEQz''@;'; put 'put ''OnxROzd1OFZSUXZeK0lTS0glXj45alheZSpjRktDSnFJU2hAfTNGcVJDWXlFfns6NzNJYVZDVEdLRyh1RSIueVhSJnAoJHdxWHhUZXJ7e3h5fVFNWTxbVj57JXMjO3ZoVTwlKVZjW01nO2RPe3Y+SjdHVypoL1Z0TXc4L0ZHOmw4OWI9cXM7Z3JbZm1ePDNvXWhVYGU4eD0peF1BcU1adzZOZTJt''@;'; put 'put ''NXxiRFsvd2t8cWBxd34vJlpET35JR0M8WzdrPUtuVyFNbEhsUD11NzxuTDkmNyRwdiNiaG07X05MeHxNVHBtZSFhaE9BVi4jSzh+cVBAOnc+U2E2Y1Y+ZTZ+SWFaVio3ZFE8ekg8cUdgbyteW11+Iz1we3coX0hzL1ZnZk9+YldhMkVHU1crJkVifSEzOkY/V3NOfVFVbUdjKTY5dDtIL3Q9PV5y''@;'; put 'put ''PGYkQWI4dDhMZkpGdkl8RTk1XWU9OkZTYXJUaHZTcnBtd0hiKkBeR2hBXnd7Ij1iL0U+QUs4P3t7IT1tWm1ePWhyX3lYWlM6PWBPRHE1b0NdYllKdjY9YUlsdS95REBZR3lgTmlrV19QQCs5TGBlWmRGYjZQMHk8NTIrUmBgYnlwb3FzRiZPcllIQHN5U2tZPiFPYSxRZntMUn1DZXpGPCwsZk5h''@;'; put 'put ''RD4iPz8uWXkpe3VeS3hZIS85aWlqK0Nle3IyP1F7Wk9nVz1qXSNWVFtbPmZhO0Bna1dFSyhTOnBRWTNaMFhVMlA+OnA+SzJKK3pqKG58bGIpST8lW1hYPj83OEMqP2ZqdWdDVyteeEZiTUhHKzlyS2FmZElkUGJWU0A6Y2ZmelRBLyJ9PjZuen5IRmtEfSFaTHMuMi93WEAhSFlOUjsrYi5XQ0g3''@;'; put 'put ''IXg+RFVuVn4pZyVtaCZtLEp8YnE/P3ZafTVmWCFFdTpDfTQrb2F3bjEkYTUvX19kITp9eGksUGdlOGtKfGQ3MWduJHRFNEV5KEJRYz8jcmZAOWNVTSpEcjhmPl4pUjxDWXN6WGF6VlY+QEZsd1UqRDBoVFB7dXFVWSpJYlVRdlBLN09KcHAzJTcjKDBxWlhAd1NfW2x2YUIhKiMqP2dqdj1DVypt''@;'; put 'put ''X1YrXnlbbHB6eVNITEssUVJLTVJSS3NSUkt4U2w3SU56b0x9Nz09cjxeXzslJWdfYCZPSXJoJEopOWI2MEhwWk5EVD0zUmZZW0xKeSRaNz1PKDc4dEAwTUpLPDZOU3QqYDYwK2Nmd3JZRXt9RDIic1Y6M082LFk/dHJoTDh1L3BLcGwhdEtRKjJFOlp4UXBZbl9OZmY/WT4wLmV4XkYhYmcsRkBX''@;'; put 'put ''VjIwQWAlKkt8fCo8MURnPTJgcUx9fSpPP15xPmYhNWZGMyskbTZEQiFbRDMkaiteJF18UGhnSXZpclhPS3M7bSxBKkZAOXMlSGR4QWVHRWNkeT02dG1lYTlpLE5vRiR4eXhEbUR2aGpzbSpDYCM3WFtJQD9mMGBiOUtMNTtSLiY/bjwhSn5sd29iRWlOdFJYRyhlaXx9KS9zRD8yISttJDt8dnF4''@;'; put 'put ''fjdFTn4ydFY4WC8lbGVDOEohMnF8YD1zZlQ7XnsiNmZBYW0wOSYsKjFAXn44RlV+N2g8PWVbYCZDO3owMUt9VX5fQS8oPSt4fH00NHJ3Ry9DaStpNFNNdVlIYzEjbXIxc3hdaCtpVFJdfDN3cC5QK3VoKCQ5a1ZbVjVieSg5LjZDITNfOHh8fS9ReFQqSGtMb3QmSWUqbWlQQkYrKU4qZ115Uy5f''@;'; put 'put ''ZitgQHZ6SV1JSXwhY15nMzp9Kmc8NSQhUn45TXVRVWhMP01+d2t9QEtzfXhwfShOe2tffGhRQFlDfUxickZlQltvQmcoP3FvJk1uLEpOQEQ1UXgkIyw0YT5MKWB9S059VXh0R354SXFxSkVvRFJYI1FuJmgmO2phd0orVlFDLD4mQT5WXz9qfFE6cT19bEBKL3JjKWJBMG13fntbfVRySVY9b299''@;'; put 'put ''bCUqNkI+LG9sOzdpVWJHTkk6ZVUufnI+a3RWWztqQjN7M30zRy8seWc0QWolPmcxQE99JjQuaTFkVkI8MX1PSEY+TGZ9Lz0xLEtOTURtYltrK3VSR09QcWlSNTtmWFhmYm56S2VjcD1LZFVuRWhfSnlNd2hfVXgzM0JoWF54b1QpfkhOeEZZVF81O21yaylEOnBDLEh+cmJDfTtMVGJFVGxwYihv''@;'; put 'put ''Z21UKntQdT1KM3o2cTdjSCxmb2Ezfn14Mz1NS0lmVHg8YlNKZkA6XmYpZEh1Xi46PUxXLk4rRnF3dmldXkMraUlLJXMkYEp8MS5nSlUzTnFZUyFDK25idWVwZ1skRHp1NWFJOmxTUVlqR1JuLFUxNE9zM0xRRD86W0JrXV5LQ2BDeldrQFE2MUh0K0EzYTdjMHc/WCoiWFAzcGxuaE10Wkc0Xjgi''@;'; put 'put ''QXVrZn1FVm1FKl9iaElfTGpZP2xJfTopanpSTzY4TTwmVmN9LlB6OUt5OX0oLE5DPD5GSkYjZ0ZQbzV1UHt1Qkc/UDN+PihUXVk5WH1he3JvaS9hJGFBeWt9TEd9bkgscV5NYVtVZEg/NkJseDdhT01iIk4kW3l7SnhyZytpfjgzQyFQVXkpT317c3RqQFpeIkhSd2wuaSQzdiJtb0V6dGZGVHlz''@;'; put 'put ''Jl8lNGl8JSQ6dERoa10lTzNPIzIjVyRONihMPTQzYFc1KSVMb288Syx3d3FgZWFtWz8jMUxuVlY+dE5lWUh4QG4yeFosR0FXNnEwSnJGOitKOUUpLC83fklzUWZRY3NHImtLVzdwTVk0O1crZnp0UEx3XS5dQTN4alchJUwsb1hDLE5efkFjdE9uSGVlTHwwRFgwWzUxRmB1PHdlM31VbWRKJTBC''@;'; put 'put ''PF0+VyxSJjZjZylEOEg7a3p4PlV7dyR8PEFsZiRFW2cjOl1DIyU9KlFoREJiSS9kIj9wNURsdT1eNVY7VkJuN3pxJGFMWjV2NS9KfWEpXkgzfHI7L0QrSCo1UWxNcWU3eV9UQ0FZaSVmYjFZVl9FZUxlRjhjbz4qQ28wQSY/ZURgYUFsI20+YjV8I3QjZy4menI/ckhdWWlGQmJCd0IoaDomNihv''@;'; put 'put ''U3xKKz9aO2opTVB2Yj5wOk9tS3VxVmhrUmNKUClIV246UXdmWSNuWSgldk96SXAlU3RgQHNNckU/blJzSlZaelRqPyl7OUolfl1vY1I6Zi5afmVmRjxJQ09NTDd9JSRGJT81KHlYKiQsW01dYUlpPm91MixqWStfYWYyYmE9WF9PRV5ZLEpzTX5KKm0qYGFQMXsyVClNPVtmKH06LkFDLG8pS1s0''@;'; put 'put ''XX1DaEJGJCw4fkVLLk9eKTFhLy81d2o9TUtrfTdaUEA7fllyOWxwRUppXiR2fDZRMH08TVFVd0wxRD9ObjE0eClUIWJIcTc7cSpuVjh0fDJKKyFINV08VjxdeCpgPjRpc0htTnRjVVEjXiovZlM4TFtgPTNhYXB6XXxuckQuMHclWXxPODNmdDtuNTtYOU5dJVFhQ1pZJll1TXVbd1dYVUJfNWZd''@;'; put 'put ''ejFLTl43O0NILyQoIUJqVDQ3SihWc08vXmskZW5yQHZwfWB3cHgzcVlGenNjVzkuQTlHRj1eKUZoejZjZ2plQm8lX0B3cHYsVmNDNC57Rk5hJE9OM1VYYEc9YFozK3RPbSx1dGM4cm9zNUlmR2QzR2YrN2srQ2MpPTAzRFg4cnB+K1t5X1REV3ciWS9GIXRuTFl8L2RRREBXdipnOzwsOm1POltX''@;'; put 'put ''bDw0XT1aYmpUNGhYY0J6W31WJj0wM14xL3lFLkAsfjp3V1VneE1QU2owOFgrbUJPWkJ+Z01sIl1jd1NKK3N0NzJXS1kvNWlkXVIzXnFOelRCY1EqRDhvMSg3fnhSQEBvWnFyQitfT2lFRUppYkw7Vnc+KXRaMlgrTW9ySWFhUlAyYktpTERVWG9kWzNuT2d0KklqOHJRVyksXk9ifnBLeHdHV353''@;'; put 'put ''PHQ2KUIuWVhRV1ZkfVcjR0RxeiZodUNYVUVfZW0wPHptK2xnM0pNZ0spWCRVMnhzOC9maVQsXlIqJnh5TEhrbkpMKV5jeGAmbEFANT11SkFVfjNzQ2UvdnE9biJVc2loQ3JeN2tgRF9eTy9xPUxLcUVsYH1vYW89UikpR1VfSWIpbStrLG1HKjhCTF0hO31uUEcpNyEhV1RAQkhRQ2M3dFAuITtM''@;'; put 'put ''OXQ3TF5zKWZ5MjNPWjVoK2hfQnp0OEE0aE5icixPbXUyL2gwaHh5PUc0OmlgXil8e2FwZUpObFdYOVFKYFtZaXpvWFZGcm1fUSpOfCluSjU6YHZ1dChSP3Z9R10qWDhnZ0lPamJKa1pZVH1Ldj1ze2h6UjNZQyZgRVRPUkglIVQmc2NGQ0RVcW59dHczcm59ayw/ekRMUE5CVzoxWVMmOnpqUkNK''@;'; put 'put ''aTc4N2NeO1RWTkYvaGI5TDxOIUJSODs2UCx2RFFoTlBCUCxvfF5afEp3SjczdHpuLnsvYzl0Jnt7a0ssRGlOOC4sbkRhVlFLT18zUj9YajBIaE07di81dDk9OGV0eV81UkJrTUJSWE1sUyNAcCteNTpIKkRzbCJ4S1phXktQJkxJRXdkdWAyfGw5VDUlP01pfFl7aXpxJmFOX15BWDt3VHRDUD8l''@;'; put 'put ''Zls3K2EqdD9XJVN1R0QmW3BPcDYzJlk8THMrXUZMSF5zcWpXPSlVQTYuYi5UczZnOS90UnlRK218aGllajpzSX1oV2EmQjR4fk9rZUdaQCFAX3NJXmZgWmc6T2FfOVF7TjQkJGkpKEU1OzFFIWVwK0M3PWNLXzN1NCxXfWpTMCMpQHFoY1pIUWR3KGF4enRgI0orNDJ4KTFGZH0kLihbKjlQMEho''@;'; put 'put ''ITRPLlJiZTdqczZiLEpSMEhoITRPLlJiZTdqczZiLHkrcjszREYrKU5AMUtNYzFdMUwxSnlkZWh0QDE0T2NgQ2AsRCF5ZTAyNkBAREAwSElBYEt2cHRgNHRvYDhBP0BQdW1gfG4qR3FyPWleUUpsQDsiLHJndW9temV9UyJ4VUpfLypDdn5YXn1teENGU3pIUHtVQlh1TWJab096VTxEZUBKVUJ1''@;'; put 'put ''aC9fUiQ8TzAlYGchcU84aF01Rk5PQlJYbGkqX15MO1JlPWRKJk0vNm4jLzErbzlgYjldXkhANT9SKmZvRnw/XlUmdjBnOmBmZG1OYX44OjpmM2w3XkBAL1dIXTduemFFUXpBdkQhYXhJJFd+KGI/JklHQk1rQld+eH5QNTdwOXdKRGZXLF42SGBHZXwveiVyWlU2WHQvL0Q0RllwNnlKT0l1NX5F''@;'; put 'put ''R2VNX35uTkw3XXxrPz18V3U/cFMwakRgIj5ITHZ3Q1pWZTtkNHw4e2cmZjEmKVhzOnhqOzYlXV5nL2MiRFV7cld9Wjp0el02cng9cXR6X05lPVg7filEfnQ1fmcxaU5de3l2ZXhGJS91R3pJLy96MitET0wxKHQsXlZHI0lRTVA0XU1EeiZaeWk9MGJEWU1xRGx0XVRTZH41YXczKFpSTVljV1JI''@;'; put 'put ''bCk7YTxFcX01IiZ5cFdqMDVSMGE0R25pc24mYEpjIUcxYit1Uj8rYSw/PGguR1VteU5daC9UfCZ5RGBXKjNyUClmYUk/dm10a2FxfS56JT0jbShCVE1DTFFhaSk7OHI8K0gsJml5fUVfSlNVMChafEtWY1khUDNPUilQe01XPEIuQTpMbWc3KmBvfnpsUCRyOTR6LCIqT1BfV1hvQmA+Qz5jS0xY''@;'; put 'put ''YlBEYE5fSitySExeQjNPSHooM3VxYXVfXzlQV0EmW1suX34rKV92IWMien14NGRFd1RjZE1XRy5bRHk7VStHWGJoXVd4QC5fflZMZVEsdmQlR0w4RzY4dGJfUGpfZnNBUipMSXkjWWJINnRAJilWdU92dV5Oci9MJjZQcElLSnN6YjR0Sn13ZC9ySVhSNlkoVlRpcCJRTHppNE8vLCpUQUlWTWVj''@;'; put 'put ''RnxHeFhZaUV+Rlh3bDYkWUB7cFVuWi5ARjgxdHlFSE4oK25nMDBZc0woY1ZVQ09zcEJ1a2x4U2Y8Zn17WERRczV+bV12O2Fvaz4+WHFkOj55eHtuV1FCSFRSYUs6Z1JrPioiWCYqTVJtTTR1NHM7TmdjMlljVyhHV0Y6YXszY0o9b2pNN3gkfnRoUV5JZCtiIT5JaF13QzxgR2lXZDAzb2U1VVgq''@;'; put 'put ''eTMyfjMvRCFiTyxxbk5vS3wwdl5lYzBob2RhIjV4V1JwIz9Gd2gpMytnbk4qYChIJTxwRVl5PUomYjtsRSlyZV88bm09IjFvWTFUfFAiUltgeWQjamNAPzlgcEROd354TyNDSVRdeCJLSk5XN1JYcy8xPXY4X3dMWWR4Z1U0aTRWcjNDM1V9WGlXYztGYFp1SWNTY3JTWEdnMTF+JmMvNnheLDZ2''@;'; put 'put ''KiJ6K1RSdj1CTGUwLzZvZ2FjQT5dbDIrJUl9TF9+SX4yOE19W2tlYXE2cjhJX0Y0VWVGT05TXXRBZFAjNVVFfV1HLCUvSHZzUW96clZkK3IlTyVLVys4O0dgdGlrb2BZKm9NKDlPRHxZeHBLP2ZBdW9yQnd1LEYrMUtmdmZnMEhfMTRPOWliZTFqMjhQLGdlbCpzNlAsUGYxMF0xTlB5ekczNSVK''@;'; put 'put ''eXViaj5WUX49OylgN082bmJvVEpVWmZtQmYqTHdwVCs9O3JYVn0iam5DYDh3Ri9QK2hMeTZ1TFZ7I0krJkQ/TkMuYEV1ZUo3TTFEYHV3P0NAYUZmdE93RFBUUkRhWEQ5NEkwP0R9R3h2fCplfSFXWFgyeSQ2JFMlTX42S1lzQjFjc0JCenxzcldbKUlBS29zQnxXXXNCRS5pbCtZaDB3P3xpaTNE''@;'; put 'put ''M21HIjczYSlXL01NPFJkRVt6I2FaZE9BJS5YfC5vZXFSZDhbMXBfV1lAR3prYn5GPD9gdj8yRj5RKnIxTC4kXk5meWkkP2tvRW98cEJXWD5iYjhNcX1ZQjtgUDMlVVVoPy4rI1NrLmAyU3Q3MHw/PkFNZ1lSXjgvK1RAP1R9UGZJdyE2YUc3byE1aUNwKV81VzZ4NGR4PGMrdU9wKTN8Ry5FZ3lR''@;'; put 'put ''WXk1ViRabWkzJGBfLkhtUUZqOyJkdHg1fj1ERTZ8bkZ+SjZmWGo2dk9FZD8xITRTOlkwcjYhVUg2UzV+Kz97UikjblIoK3ZHTF89bkhqVFY8S2BEVDU7Nj0wM18xOHdEPTN6ZFdLSG9OZipkUF1aLkBZWUNGUlQ/RyI9WEY3OjMmNT1VfD58b2lZIixefWRfYXdkfkBQM0FpbWU7XU9TdzR7dCli''@;'; put 'put ''JjBYRX46eUg1XSVycFVkIVl4QXl3PTx8I2NgcHI/I25eI1EpaDpJYzAvW2tjISQkPHxvVV0zNmVuJUZLZDI7VjF9QkZNdXN3cG8zQHRALndCd0ZFNW9YSjo/UnslblFhT1d9c3B5WFslaUpjTV1UNDRAa1hIQGtiUU0oZDY1RjJeI3s6NXdNeldwO3Z1XSQ2KjU9ImkrMWFUTVA0eU0mYm0reSU4''@;'; put 'put ''TWVgUipBRH5FPGE8bHl8TGFgcFFzbkQkTjQ7XlVtTz59eD01P2h+MksqZ0tuYjkjTnFIe3ppLDQ5aFdFKGpFUUY6R1RvR1ZqL0MlMGZZRHN6V0RpdFhbIyMlP3tmUF9vcFdAXyN0O2Bmbkh5eitSQzY0NSUyNnlkVV09bHNANHIzUTQvW0FkNnp+TXVkSl5NTSkrSS9xTzNHYyFgVDNJRStVRDVx''@;'; put 'put ''MW5pdzFjU1k+VllpWVVUSFRNfV19VjNpTjxxT2ovdXxLNk5Se3pVfT9OJEt1S0swPF1UNDElaUBNcTk0UCliWXQ1T1grYXc+OXVzZTJNJUI9ZVUoWUV5PUFkej1LUGQwVHg4TGhpUCh4RH5YWkZxejRvbU9xfW01XjQhflUqWD4kTTp6TG5TNjdAJCR6diNHVmRqMCJeSVNmVFNQfEp+VWhIaF1W''@;'; put 'put ''NztuIz9yUSVPX2BdZDU3V0c4SEE7XTFAIjtoPEZOQntSWCZMSF5hfHUlRjQhVHYrNT1BYUBLY3hRcX1dL016QV5OcGIqejZuWClYPElhWG4ra2Q7LCpXOXU4V0w2KVZha21JfGFVdjx5WTU/JEEyJFg5M1c1KVtlPFdGR1BJW0crezIhaCIxRiwwK0hTKHQ0c2hkaltec1toOXMjSUlNVHNJXShN''@;'; put 'put ''OmIpUChFRTRpajs4PF1DVjFxVToobmF+XzVLMitYcHUwK2Q+enJVIXVEY0IsemdVdzNddiRMITd2bjEyI15dem1DK09QIT8+SWVddFJqS1F5QTtHIng3eHl3bjBLT3Y4cnxRT0MuNWEjMURTPXNTU3RhP1hmKiFNQVlsQHVUblBNWSZuNHwxcW9QfW1vKytCRXRwOVskYzRhXUt9QVE9MDB9bTZz''@;'; put 'put ''d195QkhqanpGdXNUZG5kcEFuaElmZiEvOX5WWD47RClHUVg6c1skWnZCKkJmd095aVIme3JHJUdZITZPekhjQHgoQkZYZzppQ3orRE9BenNoYjtkZiYyMz9dNDI8NlldezBucS8kNG8pd2w5IzwmKD0jR2JLS35VfEFXTklfV3I1aXlrMD8zQFdFY015XmQrRT0/KDQoeH5GaD9eNnZ0TWZHMDV+''@;'; put 'put ''Jkg9SVVAKnptJnxMMHJgVF57Kit2OnV8QyFrPSlgNHdDYHsrNzJSPSY1N1BXfj0yR2ZQdDsjak0zc0FYSTIzey9HIi5efnszbSpxamdnIiE2KW8rQW9qQF8rV3wsJXZZeF5FOFt8RDY5ZlF2dH5FZXAzOnxhdz4jQU88RHlZZzpxTllYajBgdnlNUnl6ZnZLcmE5dilSJj1EOnIwYCxQP31XKG54''@;'; put 'put ''YCtNeT08K0tld3dRcUZlKWh3dk5PUVB0JUJZLDVwM0VZaiNFTkI4NyN2OXdvKyk5U152U2V8Z3BhNnojZXJQSWNiaUMyO0JNWCM5QTh7YyhdKHowXXxdLjlAdHhKPWAwe2V6THptaVY4cEwrdz5fOC9MUi9CVU1ffi4zcSlMb0VsUD4leW84Ynp8Z3dsQHRnUkxgKHoveSU+SXxZe1ZlV29ldXNM''@;'; put 'put ''WFhgR0VXXm9wZ0NVVn1SYm1CdysvPFk3U35LTjJhZk4zZV17T1B6Tzk+Nn1Ubi5gQlkrTzRUOXs3Vnt5KkYuMj5nIUx5QUMzbD99K2VdfWFWbGF8XkJVY1RlK3VST1hhQ3NiZGZkYWkza1Q2ITZpRkNWNE88azdgdH4zIV53MUwyZjReOiJmNDJpey85NFJdUU50MFc+TTQ/NUc1Ul0uR3VPX359''@;'; put 'put ''fjhJXXsuTmYrTDRHT31iOEh1ci5GWShbRkcia0B2TipdKHhjVWVUSE1DVGppU0NXXXh8P3xSb2YhVz5KeDJPTWBuPHVjflZYPk9daS9Ke0dEeSkzPGNSM1BoQ0ciTFJpJHVaZiRLQmZkYjQ7P2orbT9EWz8kdkxmUXNEV35FUVZ+bzglLk9mTmwyKzBLQmQrZEs2XWc1V1Zrc1B8ZnRBJVQrWFBE''@;'; put 'put ''V35eZCx7NW8yaTAyW0IoJmt6S1N0czlNQzpUdHVzZkdde05kel91QlMsfShmTFBqXUhMQmVsYGUiKzh5WShTb1dMN3hifXBQd1k6cyNhdXYzLH0/bGhwOVoiWyhsQH53NlpjRSQyJDY6WXFrOU1bcGNqOkhCWFdJUDIlfX5ScX1HKi5YXV5BeGB4TFtfX1JANmNlOSt8azF+cEtJfmdLJW5OVyNM''@;'; put 'put ''SFd+K3QzeyhMVEBkX1N6aCFkfFo7I3dtVSlyWWZwQiUhfDN7aFVAS2NoaCQhQnBgPkV9K18meDx5cFciNXVzYjJ4PU4odnBmPDJ8XlM9NHB3azFjekYyWzw6PncrPk4xaltUWTlkMl5rIUwlaWxHJFlxa3hnN2g4UHJLSk8kMj18U1A6T2hZSlN9QmxjZUVUPT9PK21+Oi9gJmhIRFkyM3lEXml7''@;'; put 'put ''Y2EvInN9fi5UISJuN3ReME55ezR1dnFle2YpNUFLP0VvXihsYXB5eD9jOH5sfVIoKXk+b0xnfDhIek5IMXdRTXtOTkh4d2FZOkQyfXx8Qnhba2ZKVjMle3JZPT8iNmA9V2w3dyxbaGJ9ZGI8R2BHbEw2MSE0NWR1OVU5O295eEhue3s5ZSghTW84dnc4cjhiNGtKcDdNJUJaJHAkdXQmOlpWUH16''@;'; put 'put ''X1tTQldEQ1d+Um9yQEZ5RX1SbyslR2RwOiUoNHMmSSxYWUA1fV5lcUBLcXBQJnk2Uksve0plIUUkIlYwQGRVd1IxVTh5In5Odlt6cEBdSC5IYkx4ISJuWjMkRmBTS3EpTzdfSW8xYGJ8SH5XVDdpPGxyfT9lcFBrdTRzNXEzMmhsfWI0UE5YTXtmSnxwRTM8Kiopa3cxRnEzYGJhZGEoR3o+WGF7''@;'; put 'put ''PkNRaDdlXXtEdzJ2Ujd0WXNbcGJHR2UlLlteT3c0WTBEZHVVZmtINlkwRTpgZnZPSDZ2I0YoRzQ8VXRIWmlsfTYwV3MjfUg6KFJfODZoKWwuI2JtXWYpbH44JiVILnF2PDM9YHg9fjw8aDgzIWg4PS5pbCtsSWlCbGpbZ1RRWntzZCFYOkZfUFhoc3JeWzVVP0lGc3pxKHtrI29XI3h3e344KGVn''@;'; put 'put ''JWZUbjgvQntaP056aHhjK20xZlt1cDk/eyFYeXw2ejV+dDZnVXRQODNFOGF0M3BRMCNAQ1hHd1luQDFuKCg3YXgsXmxHdjo0L1ZOMXo+ejlFcXkleVJbSlE4WUFxRnJkfSUmUH5bfWUxVGU4QH5VLEh+V0VzJkYxfFc9TE13Pzp0dStBb2EoeWs0MSRSe1hsanddJkddUEtsfXRiJFghUnUzQkVz''@;'; put 'put ''S31CLyl1dD9rKShFTXlDbTFiVH1pXzN1YyhVTipdTF9iW1REbF1YNEZlLHx3aTB8NUhQfnhPa148d11uNmNIV3t1Pi9YXUcwRzt7MHgjV11ASStzTXk8N18jWHUoOTBTUjJjSE8lMFh8OF48TUw6Z303OGBjbHRGJCN9Kl5kPFdmc0JFKi9mWVQyMn45XVY1YV5HTF9gQGZTfVBhZXp0SlFFeDU5''@;'; put 'put ''VyRVOT9oZldMVUR9XX05bkIlMFRkSnpSSHVoMk9FZjZRdnAiI3xbRUtkfC5QSk9TfkB5e0h9SmR8TlNVXihfNVp4SzxudlZVQ0hmdmhpMlReNmZYLFFqYGUiT0Y8V14xfT4mUHE4PilyZl9nQFRkWH1WMFUzUENRRGxdVyhAZUUpfHFrTDchM3d2Y0AjQG53fkBrWDAvN1hfc2hJKHdJMHJMSDZF''@;'; put 'put ''KXNNLEJKemJfTzE9WV5zKH0uamQqMW5ZLlY4RDdZM01kLzloMTFzaGdjQTsoLGl2IlEzbmtTW2NWakZrIXAiXWkoazdoZFRlNzhbSiQzJnNpVF5uSSlDYGIsNnk5Q1MiRHBALitbI2Q+ZSIyL1Q2M1ElPi9tK1dmKjZifixtX35ifipuYTZzaW8rQT06WkBhY3IuN3w/Tn1VJUByeUgvUXFfKD56''@;'; put 'put ''OShjJVFEZCp3eD17MyFRRGhiNW9aYFs/SGxyO3R0Sk4xQmpiQzBhIj1JQDgpTTw+PT5vci9VSEMjbHxiNzRPdn13NkMpSXxrN0EhVlRaNCslQ3VeLjQ1YXVsRixZcWA0ZiYzPy5ua101fXg7Q250eFppTmZEPiJsdipdSk1HVU5jLE85cCYlPmdyVTEhUVJfcSR+NUw2LmZAWXB3OVhDZyhAeTZ0''@;'; put 'put ''YWA2JSI/OHBWX2pJJC9kZXN8YEM1aWAmY1pFeywuQ34sfj9XdlE0RmYyPSYzWzUkaVY5MnxHUH0/aDMkLmcuMnpbXjVLJH57Nlp6VTElekVRVEIqP0ZGT08kX2xzclg/QldoVkpjQDZbbEw4QHlGeztofnY7IVU/Q3JifXszaUpEZEk8XmVyXWRCSDYrOnhPeXBVcC57TE5gQXQxW2R1XTxjOnU3''@;'; put 'put ''d3lfZHdUaSswYzAhSypLTEhiPkFNV1UvKmEqek1Ea14kNk91a3xiRE02cmd7S0lJSzVBfkBWWmhZRXhlL0NgdkRFdEcrSHF0ZG4lJUdVVlFicDoqPVh3Ok4iYmBwV1M1KF5VPEcwLzlnRXxBbj8lV1hRfG1pQSk3cmB4Q3ouT1hdYkJYW2RCJGZURDNTMlI9WkxeQ3Y8X05mQkFfWjJ2PnpkRCN7''@;'; put 'put ''cmclcCpOZWUmdCZ5TFExcy9PY019Km5Qdm5mVVY6dH46R0Z6QUxNZUFDdHUufjJJXTU1fnhhcX0jaXo9al8lJEVJTEguSE8qQzFEVy5uN2gjaGc7JHJJaUNuQlBxdk9pZjc6X3l8Qm9adl01QD4lQ2xzM15id100bDoxTE5IMjsqaTwvak9Rcl41ZHxZXXpNdT8pJnVkb0ZZXW89YW5IcmdAej44''@;'; put 'put ''fWZAR3MxOjNNYXpZe1pjdVZhPjJzY3hLI11JM0tGb31rREBbdSkvekM9NmIpViJ0NiQ1XyMuP05qUjl9bHI1bzYsSDQ7flN4eyU0YHBmSjpQIzdXam9jWTEwWihOaV9mWTpNP0c6Pz0kNVAiOGtheit5aHd2YGthQFokSl9NKzsjY2BfYnArI0kxR29oUSNoJE92T1pCfDZsI3JeNGF1IUtFOH1n''@;'; put 'put ''fjhAI25kUyRUPG1nTDhsaSZJdldERF0hb3cpPXMscCImbH44Rzl6TmdLU3JgVSFUPnFrPkE+XnEmXys5RlAuMkg0MXxPTDFEIXpBSnV5K3RjVT0wWlhoOiROWVhoOkdMdC9tKFF0VCo1bylyaWAjIXE9MV5ePCI4Ql9BcX49NCVId1tMJGdNdXRben1eJFFgcCljJFZaZiVCY3p1QXphOyZIPFZS''@;'; put 'put ''YCk5QlhwcXZ3JjVnUXdLVEQlOWc+UUoreldjb0YoZ3A2VkZSVndSTSRJZD89NyIwMHF9T0B4TzdfbClYSmZXTk5IIUI3OW80fFVlfiZ7e05tL3ZCI0AsRjdLfHEqRShWLH5TIXJAZjljVWVUYTpbJls3fX0+ODU/NEZ7NDoyanhGSVRNfGNHQX1hQDZOTlc8STp9cnBxc0RAZ0VeTjY4bllNR3wm''@;'; put 'put ''P2VPTGJhNkAhTkdtc0tffTt1YWkwZDNPJll8Q0tvKDd+Zy9ibC9wbzdbMFB1W1ssP00rTXtRRUg9PiJBJDddcUZWTVguXlNjI1pRU0tPOkMwS3RzWFY6P2Z4e096KGBYIUdfTCozMD5pbj9gdkhOVlZYUEEsVURqOWtdcSY+eFpTK194YypNWE4wNCtVIn14OFBoZ3J2JVdkeDBIUytqVTd8PCZG''@;'; put 'put ''SzE9JksrYlhWdVhLQSZTI0IjWEJLZnd7akAwKWFvbEZKKTdXfmwxYigoUHUxblYlPUIrXTcybUFsW0ZtUCUlVlAlJWxpOjFoQld+RXBKYSghY3l0XV1eXXU8WDdea09YeFRbWjtiSmU8b2dNaDI9QjdiNmMldGlbd2o7KkZse3ZvLjldMyJWIz5wfmFpKnFkfG44aSQ6Y2FhKlg0Y2AsO291YlQ3''@;'; put 'put ''SS9Ffmc5R254dk0rZEV8Ji5bKGJRNDleUngodSN6YG1VSGIhUGxqPT1FJkNZVDwzPSpmV1c5dX4lOmpMY1ZhQ3JLZTkiO0NHMn52TlNGXn1kPFYhYU4yfjJJejtvMTE9NiV+Nkc3ZFVgOGZDdUBGYUx1UztDeElMcEImaC5GeG9rWCs1NF5VfDtMeXNzc29HWTJrP2ZyLEo+MSUiQ2YmdHNGcy48''@;'; put 'put ''UWopJWJnYihtMylbM20oT1U2Rm0wWmRCL2ooVzY1NEFjM3tYczxHLlpQPjdNQyo5W21sREQkRFFmcz9RTXkiSjJHI3MlK252fHFjKm4kfmE3S3dIODhDS04kUWJaL0xLTlNhd3l2W1ZuP1RaNj5ydz44Q0NuNW9DcjREYCszJGZiQkxKS18kQ3FLczB3VVE2M3B0RnluZ1ciYHJEbzYqO3UkdEJ6''@;'; put 'put ''dyZhd1ZKUH0qKXZDZFlMfGlUNW91R2BRanFtO1h5TX5Ka2I4cC9aPE58LmNJIWFeNHJWX0R1VF96PmV8Wl8oaXYmLHc9JjkkXTprV1F7b29dN0h6SlEkPyE9fH4hMjB9cj1Te20qPls9cFJ3dXxDYGJEXk1fPkYrVU4pTVp1S30jKyNuWVIhd31FaH5lVyxKVV1laXZyPCM1U3dOeEF1RXliSnxy''@;'; put 'put ''NF8kWz1mQGtKTVo1ZE06ZHZCZD1lW3JJL2soenVtKzNMcUI2d2VfIyRWM00yPXZ3PVcrUn0wPWU8VTBvcE9fSCZUaTJdKyNHSHQ3Q0duJDI6KH1SYVohU3hmYjomKG0yX3E/TVo/eDw1Il5gayhWdDE7fG9OTjRlKWlbdUVReFhYSEApP0gvaSpmRz0/bj8wQF1VQ2AhT2F4Rnl1YiJkZ19vP3Vx''@;'; put 'put ''ZzBvez46eDZKcnx0P14pdyQhSWBjejhaaDxTfH4qK15QOCtAYnVLamAjTjFRfVBgcnZJfjA0UUVPe3Zycmc4RC8rTEAuJlh5ZHhFZFJiWXM+ZXIqMTxGZFRpSkc0PUIoVHMxaFUqNlROc29GZDdfXjcleyVCdV9gQExXSlNmZ1ZGc20pbnBFKEZMK1tNQ3N9Km9DdylzNGJfU0Y3RTk6Zklae2o0''@;'; put 'put ''O1s6Wyk9djNdaj09XzE9ViUkYGJrN3BFZT5TUjpHSlg5NE5oXW1xQmJWOndMenNLfmNhNkxBSi5tJD0qMCJhQ0RDRyxPXjk8OmxOcjBZTF9wKD1SWUpWa2Z9VUBeRls/b3diW35XSm1YTCYqTih+cU58Rj9LMzBzbil6dGJmZ05QK1sxTCReSi90VXFwa2UwY2EqJm18VjE4Nj88b1YydHZWYVo+''@;'; put 'put ''RHJbNj9ad3VsUUVIMzRXZTZCX3AoPTB2bkBgN2ZYPW8rVGBHKWJYVkh1XyQwZzdHPF9oJDBnekdVe2FvWGFvQFlwZ0siVTQ7RjZ1cVVZLHVHO3c5fi86L1olWzpfTjRuY15fVU5dRWRTfUY0b3xfKy9vJTpYI0BvYVYpaV1fVUBmOVRTd0g6JFVPOWpNNlQ5Ny5GbiJuI3piNHNycWVJeEIjVzp+''@;'; put 'put ''VDc/LiRfW1dWTCF6aTx6V00oVmFNJn1gcCYyYHB2I2N9aV9lN1ZOW1Q/UTFzLk4uMkZ6X096VGFYTEdBM10pZDNbcEtoOmdeTm1XJV9+NyhkIzRSXWx7S05yO0k/KmJAXz98eGYwT30mN1YmJGhJVDhPOlNmP3EzbHAwQF0qNU81Ll5sPTNgQj5YMz4jVT5wd0l6Vn5JYnkyaE5wZDt+K09UKWFA''@;'; put 'put ''QF1xdUVhcVlWIis9YUJ0P21deG4iMyIpcU59KjY/a05AYXZKUH5kXjx8XlFibWZkaGFpWl9qRUQxRS9jZDNOajI4JlM4OmxtIVNGPVlUZmFvSFJNZVNPcnthRX5WWmJzQ3tPfENkOzl6KXpUM2lmMlRpNE90NH1PN2lpWmc5VzMvWGBUJXc8SENsLGtQNl86XVlDOWo+d3g7MGJlZyF4NTc4Rloj''@;'; put 'put ''YGJeQSZCOjQ8W0cuRXJoQFVKck0mTCYzKkRgcDY/LjIzdXYlSkNUYFdEaVJyJkJ3am91aERaIVhFZlheSHtRW24wLHJnUGRdeHh0ZGteJlQoN3ZkX3tbdDB9Sl5BWCpNbzNZZEdeWEhRZTAiemFHQHVaOUMrKjY+JGVfSDFGRkEhUl55cmJeeXJBWFNAMXJwJmM0UClPPHVxI3cyZl5MbCp7byh3''@;'; put 'put ''LllaR1h5d3lba15re01QcDRpcEk+dGBoPCYrbT1HbEJQKi9gUTdwYj5HW1hEeDpGXXtUdzssTm8zWVtXMFdPcFMqMStoXyxPOUBJUHxnc2d+VHU/JTdVWHt9PGFhTHQleT9IWzkhcDk7XTBzdjp8ZktmdCpkJTdAU1V+MjRAdnZPNV0xNVVvJW16XXY9Nl5AbWg5d1o1fHlrKl4kKFFxa2hsOnk/''@;'; put 'put ''XyY6Ik1xbCluaXMoXnhbNH4xJWJYUD5zJWxHVCFOSCJ8bCk/NH5oOVBMNTlYez8rI0c7OWppIXMqQy5XK15rP2YiUSVZRXF+YD5lZkFISUclRWgkOSx+N0ArNjo7QU0qQS9icX1HKiU8d3poam5AJnprZWN1QV9WO1ZEciklR19ERSQwfl1LcX1OcVl7MDtXIXlkZm50MUN9Sj83c1I2YD5rSmVs''@;'; put 'put ''UUh2IyhwJDlzZUFfNlVocWxZVjMxPT00RHVMeGpWQiJqKX4+Im5WOiorc3c4ZGg8OSY0WzIhelVwa3wuRy5bM0B8YX00dn1JWClqTH1IJCxlbHAvU3x0RjJsaUFkbm5AUm93Q2JNSnl+TD1iVVNlMFt3Liw5fj5IQk1waTdQQWtvbWJ4NUphb1NYekY2NzpCelc8YnZ+TFZjZkt7fTZWanlecjAq''@;'; put 'put ''Kz5SSVlpa0B6OSFmU29dSVoqNk9RPTBER1lpWnpDTH5IPF1NVlQ5Ul1XPWRfaEg3dHU7VXtYQmNDdHZzOCNtdn1CdDAwQV9xJSpPd2JNLFolUSwpYTk/UWMiaWthRipMWTc9TTZOS3pPfCgpKE1EKjEhR3whTXdDeiokcmZRWUI/UVlCP1J6ZWtXR1lUPCxxM2BhT3toPUxxdEgzQEJ8T3U6Rl03''@;'; put 'put ''KXdIa3pQMCldMTViYj9weGhKQ153fmtqfS8yOCZSU0A3cGJ0eGdnZmNZeU5TPX18X1NscEpxUTN5KXo3OVAwejdlVTZhakM4KiFXYV1zRVhyeHpLW3QzYzlQJCIvdyg5KFZobzJxW2VRNEZlX3RQaUAycjRDNltvMy5fZUp1cmNbdjtIOitrLHZ6IzR7ZTh1b3orbXNLUSlmL1JWLnovaz1IVk0/''@;'; put 'put ''SFZpVDJbajxIUSxKYmRgdCkiUXdEKFpWMHJmKkJ+aHoxW2NfTSxhQ2RwT01NbSNyKVgyPkdwdEhSWjIrR3NHYEReVEVINXEjSkM6LjAsdmFSNlksLEpMXSk0dShpLjBJd1BpNkksXzUhN3YvWj1IcEw/SH15Jlp8ITFCNHojUE0sRE41alFENE9mRik/bW52aSVJaGBPUytZelA9aVZWfilNU2kw''@;'; put 'put ''N292b3pQUyw/N0gpeml9anM7TDg+MVhhKHc3TS4wU3pIK0kkU1dydzRHJm9BJS5WOjNgOW0+Y1pxRCM+cE8zc2k5VlouRFc/MiovUzNNaEBIell7dyl3WTErTExwLGJvcl01T1VbLjRLJU98I0w7KyVfXmNOTnB7dFp3bmV0LHtFKiskang3SHNlNlRnZ01oU3M3Wl58b1s/XSxlLnosZl9KcEs3''@;'; put 'put ''L2Y2Ul1ecV1hSjssJmtbcmU0SV57SSRbcExtJlBdb144LGZSWSZwIShKSiIwUCwySzQpWChBaDMpIUtPc2hMR2xvY0olUm08SDdtNDU0flZ9T3A1bWZfUl97WTZHZngpMkorX0Y8PUs7cUxXWDMzIWJ6V3M3U1Y4N3NdYiM/b2JAMHlgOGF7aStpcSkldEc8XUxrSEtoM11rb2NiVn5UREReP35W''@;'; put 'put ''RiRaKV1+cyspUVUreFk4MVEpYUI5O0BkbV8sc054cCtPXy9NXWZeLiMlfEw+ZX1lM1lAM0R9ZVFMTiVpSnpyXUR5LD44ImY+Pkw3JXhTdWd+VEEzJW5JTEY9XVckITQ9NiV8bn5UOUk3eCZEWit2UCREUD1wdUhpL2kiSE1hMXJxUy44d3RwKCtIdTkzYnIwN1skaTopSzxmaU8heklhRWZzP1Nt''@;'; put 'put ''Syk1JTxbI0dAfW88ZXdgKFRPNFBWS0k0OkREVFk1LlE2JDRdIlp3XjBgMihVWFcoS1Jib0tjQmYye1lrVltLNl9eQiwjZGBFXltCQUljelklWFN0NyVYe1k8flBdIUhyY2tudkh8L314dXc8eXo9JWdvOWleaVlbJGB5bF5fUypVVyNQUEx7Qmk9NmB9Xzh0WzY1KzosOENuJlN0IWBwKWRpWW58''@;'; put 'put ''Szl5Q150czQuSjF2djJraCZlIylrWHBeIktVaTZqPUZ9bUFjcHgwUlhlJjMjLnw4YHI/bGV7OW9ldCFvdHomcF9HUTJLWjVxI3Nvc05XZG0ycyJ2PyV5VSI/IUtGVTZlOTBuNzxYNT53MilaR1JnOTxpUzp+MX5JLytdfSMvT2JUTSNjaGxQTkRTKVlyY3xPcVJfQ0AsL049WSFfLy9LNnVTWCNR''@;'; put 'put ''Ql9QdXZ+Smp1ISosZVtSblplOS9SN0BpNWQvcngwIT1QYzJGe1k+RUl2VD51T1tdKTpAY2FdeHY8U117V2F0OlFCTG4ybilwN3N0Zk9uSHZ5TS5gSUBYQFBQOF5qPUY4Ol8vWF8iSz5uOSlgUXZ0PTh3IkkxX2gmXUw7UDwpX1djTSZVZk4/IW9JWyZ3ODZCcGl3cG5qPkg0TDYkXn42dU50Nz1z''@;'; put 'put ''PihBVmRSNUY7VE05anpKd2lVUktuTFlnMkolRkhmI1pMJGh0MCkkX0JDQ2hvSUo3MyxEL0ZFQT1OJEJpNkFhQiRrPyk/OTtFS0s9ajtmT11sWnd4JjwmIVohIVtJOkQvRDZGU0dwN3JLKERKVz4+NE5rX3EldTUwPyMyb31qdmYmUmMqWnIyWzk7OlRZMCRITTl6Xkt0SUYqZUgjMXFPaylATyt7''@;'; put 'put ''UntbTUUwOzJFTDAmQHF5ens4eWVALDtGRX09e3dKd1goRWRJJDJnRGA0ISpATDl6XjhgWCJWfCRfNCZ3Mjc2Tz9lejxAT0V5WzRAR3ZQLllRfm1KOWJiUG9BdSNrYVpVZlpXT0FZaiI0TmlnNGo5aHlCeTB1PHxffTFlLnt1Zm8jcHlnV0NKQmsuWlgpJTkxcVtoKTJoIUBydVMzL2ghPDEkVG4q''@;'; put 'put ''dmBKNCVpPj1VQCFsKmtUSnQ1cklhcVJtZTQ1YWZgaGZfZipZI0FDcC5IWDhESiZLSk9DeDZCX114QUhTSVc8aFpGRzpDL21oNHtiR0pMRGA9Tzh6cntaP1p1Pm1nenF4V2xPb2FOUEVpU0klb2lofEU/OkNLOSQ4dDtNVE1EdlF9cypUVFg0U0F+UDZuX2xESj5FWSEsNURgMFhYRGBJdDZGS3d3''@;'; put 'put ''eUF2IyN4VGVoNzBffC8+WEwvVlZXQEozTDEpX31nW1hMeUttX0x5KFhAI0xIeHZMRTgmLGx8QypZNzBRXXdJNHtXYzFNaXR2JSEkcCZVfXNAUyIhXjQ5Iz0kXUx5RFhzKlM4Qnc5OWswb2l4MjZjTGtvJXNlJVtgZi50IyN9W2BmP2laXShLam1mSz1FZS40XWBmfklNN304KWxGa2VQMEcuZ2F6''@;'; put 'put ''dF5dUCJ9VF4+eEk6SE9naj5JYCNQWlhqZzw5K3MkSC5NPDZXNTBgLz0saDxoIUlVTmY4QDAlSTpbPHJUdy9JUys4LGdeSXM0Mmd9ZmkxNElLeU1USGN0ZTpZYV42WGJwOUBiV0U7NEdIL2U7bThmYD07PGZlXWQscWolczhdZCxQa1MyPVl8OFdQV1A9TWYxLiMzZ0x1WDU+bFUlJk1YOG45WTdE''@;'; put 'put ''SnxQclYzMX1Id01xKkRCIThAOD56WENQZjFNbSpgI05reiJ6YEs5Wi9xWkRkREpKfV84cWp6aSY7QiNKa000dHg7elU7ZC4sbDN7dWM5QD1nYV5PNHZaX1Npb3RlNHA+bClqT3AuI1hmdGVjOT5sKWpRcC4jMmd9Zn1QT3AuI3ZsWl16bGBJPmxFSj5sVTIsQ2okTVRbSz9pJSYhKTFtL3xPay5x''@;'; put 'put ''Wm1DVVhCSXQ7enhXeGZFO3k8QTBEVEtiSSQyZyFPaFNxXkg9aiRNVCxEbnpkaGRsO0NtVE5rXnxlLktVWlRHP01rVCRbWUZtKC9SJDc2bmdiJWdUeW1RXXYyfCZJIzZGTy9VcU5bM1FxJmY1WTdPMTk5SUZjKmwsRkUvfDNzaDs0XU18X0VZbSpEUl4oMilZUX5DTzJyejtoXjNqUGt4MkxteFdC''@;'; put 'put ''IUs9SHRBaVIraz9fSDt6L2AmeTk5MGw+PT8lNyJ1bWpBMkFfalQkNEhELmk8YVdPPTVJentUJG57VCR4WVUkUGVabU80SDlKL3IkY2F9a2RhXWYhJitdZCwhbiM8ZmBAZiRMZmg1MGhwUjQ6ayplKk01MDYwUnMlND1LRCMxT2FePCUkLDJ8SDl3YyUhcWoxIjlYeGUsW1c9cW0uWj9mK0pOJEg5''@;'; put 'put ''VF5RZkwqajV6bWZ5OlU/SilHRDlZUEA1O0dMOSU8VGs5cXBtOUx7Zn5JRE9+SFEvJCY/JUl2NiFePHQ7YzkxXiYjYXRhJG5qPyNNTUh3UnIvQGUrfC81WD8hZTRQWj53Tmt3TXtxZztfK0AhSUQpZjAwLyMmUjpJRVRIYzhOYV5XPUwkPWthZjg5Z2g4JlJYOCZeJUNwODxFMjk5fDxESjhqO2Z7''@;'; put 'put ''cXptSzs1RCU4JlpLeVE+WlRScn4qYiZDZ3ptaXtnQSgvWlRSclNtP2s/K2w1N3tOMi5IWDhVLkdnaCE2I04kdmxfL3k8aDtII2plMXk4UTkjOk0hIU9yXlgpbDJrfm0qTylsfm0yMHpERGxrMTgmYX1JVStjTCo1ekBIXTI1ZzxPcTVCMGo3XSVmZXZadTRWbVsjMCF2WigqYSRGWHkwIyYxbGUs''@;'; put 'put ''PGtkbHc7fD0obFlITD1QSGhtVyQyWmVJPTxeSlM4WW5LKUQyN2p3Z0x1cX0oSkxCUl4yPV0jZHRQOUdkLFRudihpWmwhcHwzV15rKFVUNHhpTUsoJVNwW2FFZEVPYDYwIyY5ZDohK1FGU0w5ekdNX2xmdDtVflh2OV5dUDJzRzg6cDhZOShrTHFJYSRkLH1rYztVfls1dzt3PnZkc2V5XjxMLzRO''@;'; put 'put ''aD07Wld+a1NzZmpVJWV9OTh5PnZkeDtVflNleE9FZ1Vmej0wb0xlUjcreTZqeDRgZjcwYHwhL1YwTTtDOmUhPDFJdmskbyFgZmpVZU1UfUk6aTxIc0VsfDg5NE57N1d3dm1DanR9clkvez5mO3YvRWsrfDBFNHQ9aGNjSXNmY1ZoLm57eyE5dmxPO2lNSkxRezlRcyZ9IWc7JSZgYD88WldkZ0lz''@;'; put 'put ''dmN9OHdsYnsoIWdXP2kmfkJTRyhmYGU0eXM5Ul0oWGpzNGBmKztoIUB5Mnt3PlBQejIvWXc8SH1oZl9mbFNxakU7Ll1xajojPyU2TmFeTF85fDh5ITl7Zl8rZnRsYj07biM4bXlNLkEkSEZkLkthLjlsYislZkgyciRuMGQlQ1tqRlREdz51b257dWNlVDIsK0FOdEI/JG1ZJSNkY0NRL35Xfms+''@;'; put 'put ''K2w1KUgkTXk8VFA3JDVnaF1TPWQ5UntIU1J9eTwrU1N7SFNtSFluQCMlbF1mO3VoO1JYcVVWbkNoMjBTc0pnNmpuI3YuaCZpcHleV1BaOHRZRiZRPnZkI3BGZGo1ZGg+PTYkT2tgPSpsSTdLI0F2XWpme04kOll8cT9DKWY/NDBHOiwsejFZRCgsezxdIzE8ZitPM11abWhLQ3B1Tng+WThIQ0Vn''@;'; put 'put ''d0xhLG0uajUuSV57TVRdKDVUd3hhfXtwPHBkYGBeIW5ZLjwhKTJjRHU+I2QjTm44OUlybXhKI25OayZKSCM9RU87ajVvdiZjJGslK1BUVzhoIzxmXSMzdTlYaE8jMXBzZTpDTTNKZzs9N101eypRSVkuRCFPW1ZXL01hbENOPGZhLjlsMnFvO1JgIWNVLGtHZWgvTVsrLlkiSTJWZmolZiUrLiNY''@;'; put 'put ''bSJKfiMjdTZNIkR0PkA0ZlBMYU5rLk9Xans/QmRbZj9lKllRfiVbXjhdKDt5KlltS3F4STcqKWhSXTpHTVleV1BtQmg1Mnx3eCx6cns1MEArU313XjZgZC5XOD19XmZdI1FAKzhoZiNlSCMhKz4wIkJiZShaTSRfRmc8YlFhLDZMOHF0aUt+U2U2XjJqOEB8Q1JeaUpOJCJFWyskKXwhMnNKQi9m''@;'; put 'put ''W3F6ZSNaN2pKKn5UaWV8OEBmbE8oc0gzTkt2Q2ZZN2BreiUyJCtvYmxPZlk3YHUob2I5K0I8QyJjRytoREFYWnlXTW1CdDpjRFk8K21TWkd1eFhaeCJoO2ZydXhKI0p3RXNDMnEjbW9xeGxVWForfF9FcWhgL1YyNlpfW0ZaNjVKJX5Zb3pEVGw/LHgsRjc2QDUzOldNdWMrI2BbeXlBS2tQWUs9''@;'; put 'put ''IygqdzpXRUk0ajBQKS5CRUVDKXYoRkV1dDBrbUJFRURgaDJ4VS4pPCFyXjhlOFFWS0x5MEUjeyNNNiFBdm1uU3VXW1ZXakRIK3BsZT9TSzUwQCs5ZE55S1lpREdaKVpnUlNlMXkoaS9Ocyw+MXFsciUqQGUrSFBrdDpZPTRANU8xLFNTRGd2dHpbZi4jemxNO1c4QGZ+OHR6OStRPmpyNk5hXjkh''@;'; put 'put ''enNXV3MqOVROazMiZmpDTUM/fHg7NX1FOjcqQDhxV1BIPXBsTEc9QGxmWS9nWF5xX2pSR0dTOVVLdCglZzdlYHNVdnUrXTxJRDkxekFZOCFfenhwfFhqbVsjfFpddylqUjVsM1pSdCYzYmRmSVo3bF96UFRIY2A8YVdfPUZQUjg3K2ghbmMhU3ErPSQ9a11NbSomKUhTYG1QXnNMYyo3WHBMX2Ys''@;'; put 'put ''NEA1IjBxbF5jYlopWkhTbTA1Uis4QDVESmMmKmwhTiJEYjNrJG1qeCJiclBlNHtPY1MxKVlPMmduQCNKI2duS35IU2VoeTxyJF9tPU9ufU9re0wvNHlpOytWUF5Vd08uWmIuSSQ5bT8xfThFJWg7OndFNz5dV1BhUDc6ezglPDV7czptUz9mRFlvYDtSVEpGa2V6PGokLyYheWxgfDhQSG1hcHo9''@;'; put 'put ''KCVmZUMwcjtSXnhNNzx5aGJaPCEwRzNqZzNqVEt3R01RXjhiIU07K3dNbFplOjRidjVvIXlzK11JVUJibyRPa2l7cF9nR3UvRzhNN3d0KGlSRXlldSxnWVBLOVROa1UpNSR+dmVWb2U3andnU3BdaURuYi55dmYuN3hEIms6QW1eeE8ve2kueEtUaz9CRSldXzJ+aSJTckBXPiY9PUNJYlBYekVP''@;'; put 'put ''VTlTc18pX3xjKjtnQVhDbkxOVENrKXpjYEQzXXZdK3ohWHU6c3dLQitdflY5b1JoM3pbeDdzUU5NKkZxSSU1c2UyaE90PUQ6V3skX0hIWzBSXUhYRmA2eH1wK05zQCE7VjExKnYqXyN9Lj1McXErNz0sKDg4RXZsRW4yXkl6KzZnLEtVSmNKO1gwKSpWPzZZK1RIXTMxfVJWP2NCPDlaJlRjdEcv''@;'; put 'put ''bzE6YlRBVytDT0JlQipZKlhiPHhUSWk3YWw8VndKRXNrTj1iLCYzZjdKfWtgbGEmWkkyWE9JV24jXiFLVmpqUjZhKHFgXkMhfGhZUyxJK0VEdlhlVHF6QlphfV8ocSs9PClFb1JHXk5wYG93KGE6bkU2Zys7OklAenI0RWopQCY6aENXVGtdM2F2T0tTOVFtVmwkMGA/Ij89K3YvfFtaVjh2I2wy''@;'; put 'put ''Ij9zOFM0UyJ1Q0gzdGBpTz5nK2BXJlR8MzxFaVZwWmRvfV95VDdUMFNMbHdnM3hyRVcuNUVaSjxKTjF0YHxUfmJVZWM1VzV8eThqRSJ7Ji9HXXJvOVF4fnJWajxeb3N0QixiIThhTl1YTltJcG5BdFsiQHFgamlbMkVGWXFuJDRLfUtrPWdnRGlSW3JuSHUwLD4qQit5dmJBJD12aDA5XVFfTylv''@;'; put 'put ''KHEsPlFCNWV7M1FCc21HQ2YoZyhxZCNnOigwPD87ayQ4fUUiUkJ9aWlVTz5DS2UrOWduVn12NV91P2BBcmgzRUR2SkAvMWR5dnNOb11Wc1JjVUNVXmVaPVF3Rnl1YkopQ2BvdyhTNmE1aTo/ekRWamArPXpzb0VvfUcuMnZoRDo9cSVHMWUmTW9TNFNKUFtUaiZSaHElPDFCNko0RylQOzcsYUNJ''@;'; put 'put ''eXViNzwzdTgsbHhVI2VranxsaGdFeEldJHR8c3F9NzRKPVNTOC5WL1M0PHtPS19QQ0Irb3tHdUFqVXJyWTh0QXteTHV8LlNkVDRvRW99ezMvPzp7ey5MYTNTeVldVihhXjgyKGlNQTk1cjRkRU5TKHdbNFApYEBHeFhlYCxaezt0WCtMajR3YSUrLypKRDYxQExyRFdWMlAub1taUWsmXS5IaFVZ''@;'; put 'put ''S1s7KnA2JCpoM1R4QGp5OUBKKDVAbUxqYU0seXg3NFN+IyY1RzJdL2JmfFVWWWxnZVAvZVQmfURvWUZ6bWMxb3BXelZDO1ZXMy9uY3NxPn1zTyk1XU5tTHEoQyxEMylSIjVAJmREQzxfcEBiRExyaC8mZ0ooP11HMyspbzZiTG53PnpQQ2xANzosVkNGK0pPcnZFIjJ1eGQoSzo6YSxpbDQsL0om''@;'; put 'put ''PUxdLlV+Mzc/US5yeTczYH40RUVMNWlQJnJzMTVqZ2ErdVpVWkl4NE1pLCE1eFlDc3xbMjQ3eW5AIz47MVdvc2NdezE2dUk0PHV3N3Y7X0ZPcSl0IUY9NmdTP11IfiNecEM8X3ZOUyNlPC5KJWdxImFjVyJRWC4+fG0kW3ZFejMyMWk0bTouYlImeENhRFs0eF5geFBUSHNgclI0MTdFNj0iOXQx''@;'; put 'put ''UC5SXXtWP3c0eW5QNVUmTTY4cC9KKmZ7MklbVGpWe3ZSdz4sTkN0QyF2VkVAaFdFVy4icHthJFdZaTFhajV5Kyg1VjF2ZzZ+S0tdQk5iO1A2cWBNOmAseTtAKEc+TXNEKndzLnslP1twVCx5Vj8xbGZkJT8jI3xeU0lmNHpIQlRYQzVRMEErQzVpUm9Pdm45JWBSWjVVM214LlArVmM0QHxWeVsi''@;'; put 'put ''R3pvYX5+cT5mVT15cHp7MSszIWlwbXJjPUZJOUNYeWN4KUhdOUUuaUFKbzlSeVlDRVIpYkAmO31yQVJZPGZZeDwpbHdfP3x2cyVZMStYYHk8ISFaUDhyJH5PfHMoMT4paDBiZTZINHpRSDkqT3csQnVINGpJLlouOz82d0huKSZxYDclfTxWNzhlcyhbK31DVFMqdSE4MjZpWGY/NFU1ZEF7KCE2''@;'; put 'put ''SjI4MVJyZi5hR3dwR3h4WG4kR3VkMk5SSXIqK3BZWmV5U2JwTVtfNntlXnE7Zi5EcmddciFfW0pGK1cqMVFycylzOCwxS3ciV0FGRSV6YHElQnIiZGZwOFRVTXBWcClSP1QsX3FeS05STWRnaSJ6KTh8fns7KysuIUlEL1ZBKjk3O3lQTSVjRjB+UEtlU3xuO3pnc3VmMElQcFU5K3x2TVJ0dzxt''@;'; put 'put ''KGFud14jdD94WjBHdlhlV0VIRng4SUVZZWhTWSs8ZS9eYytJRmd5RSZMUDg7R2BwbVRFczF2JEIhW151cj8scmdJdVowZF1vYGUlU3tEKVhKYmk2b1hleERoaWhhSUxkQ0heSGshVGpgcT9yOjsqeSxlREJjN211blNVelRzKGRHPVN5ayo1NG8mcU4qR0pncE1wUjYxJmwxbmBOYGtnJGF5W3Rz''@;'; put 'put ''T31QTTBEKn1YZmVpKGhgL31nSSQhRzYqSURsLmtJciZhKlMoJU0sfmh6WTolTVlXMypZekZkRSpAeSx8c3x9MVBNbyNTOkNPcz5zeTUkLmN9ayxgUFomaGtPYT5mUzcveXksaU9AUkMsfXhaIiRuYEd+dW5kfHQmKjhdfmJZVWRsZT95QWlDN3RFdFJFaGRgUj5jWiI/OGgifDZ1ZDxyN0FOJEJW''@;'; put 'put ''altiPSsrS1dAa2IjT3YmcVY9SX5KQnkocUozOTtUMmZfK3Q0QXNVUyNgdEpPZWZGTnxxblYmM0ZHSmFtSU1YUzxFM2gqd3UpJjo0SFVwQFhDRjIweDBKOEp6MFU3ZFR4YHZTfSRycVh9SnpaWCI/Xl1bckd1TnUuMUZlRjhhJVlzKFZyI1FoYU8yKSVsQF5PSE92UShpfkEre3VTaXMpRHBmTm0j''@;'; put 'put ''NFJza28oNzN0OyZEXkBsflRmOjNvYDkkakQlOVp0Il51cGdncHlvR2Q7JFdTNTlvaVNpQUNBQUFmREtBbEJ8RWVMZWNlIX1BNmQrJU9LKkJJSUYsck5hVV1Sd2YzMVZYJSphIklBQUFBQUNBJUFDIlg2KEEkJW0lLyozYVJySm8ydUhNeVgmJFZYVy5ma3xQdHREd0lKRUJBRHJGU2pIZ05hRTNC''@;'; put 'put ''eXZZJG5iPHN2fk5qPFN9bXpxKEx1LFtWWClzJjpWTlQ9P0dzfk5JbWA+M151K3x5MFJpKjc+PSEveDM5U3xOT05MNDN7MiNbMkU5YlBWJmYzZUBSV0UscmdnNCZnKXZmLCxFIV5lTWNoPz9KcV9jTWV3KkFyMHpuV0R1YlAuOm0yMCMsRX1BaGhRRldyYjdhNEszLylWQTViQjdrYXRpS2ZWMkJQ''@;'; put 'put ''VTpgPkgjKzdCM3lCIjZSXUBXJHhTbHhMNE9RaX1bOiN6ems6bWQ7X29kdWhOfXx9bHtSfn0odVtrOTo5a00iSDpVQl5MPiFKfFFaVnd0Kz42Z1B3YjVBI3FOe3N+L1F+YSNsQSpgP206fjYsUyhsRUkxTl9zVUUhdCFEZVQsZ25KVm4mWWVLIW9CcnIrSTg/RUZ8X18wSEluOTlTLilfP0grcTJI''@;'; put 'put ''N1A3VCkvc2JMditiRH1TR0lrRE1VJHhsNDhhRDVuY1VhTUEhIi9QJiFzeE81InM6fnIsMGo9TnlMMldYY10zM2JnPGtzS1Z5TkN6YjxrTXpXPlNxNG90Ozs2WjV6TVolPlNETiY8S1lZdXkqdyJAOV81OjUxd2hbazlwMjtqY2BrNkwhZEBQYVA1UWd1djxfKVM9bSEiI0woPHVEYlJGWEAyS0ZB''@;'; put 'put ''cEo9JUwiX3c5TGUlYUh3WnZgNU0paGwyNUZyUT1QdV8zVFNfcWhWd2c5fCJpMnEwSVVzUEZYM0VqOzRGIi4hU0w2Ykk6e2JoJUcqOG9IZjJ+c3dbQyxnRipOMkxfViYpW2RaKGome0wuRztTUkEsWzchemNmK21MV1R+PDhgN3NGTnEqVVZ1fTUhdW44ZGlHcnk4bHVzSWcoai8xMGxgbVBROmRa''@;'; put 'put ''RjpUVVVFRHJ1ODpPSnBzJnswJG0yP3tPbjFPOXdYRUcvXigmRFtpYUwmWjBTO3pGdkwrOnE8dTBRcDddLnlHaUY2LnRxN0o2aTIjLH5nQHFzIiQxLykifTx4b0I8Im9AdCFBRVA+Nis1YSQxJHQ4fWk5aEs3RDBUPmchREJbR31mKV85UTA3MVsvQ1BIQ2JfOXo0JDssQHN+LkZqQkNpUj4lbDYr''@;'; put 'put ''dEwkTz56OVZ6IVNbTnZnNzpGPzV2bThuIl17c1N8b2B9THYkdms3XTEpSW9FRWFuWn5WJGd8SVJ3Ojx0fTlKREp3Q2pAQmpOPGwobj1EPCJTPGVHXiwwWjRgcitTYmRlUDUjR1JEOGldT0o4LnsvSU5ZLDsybWwpN1QmJiwwYitfUW58cUp3THF+XzlUX114WUFmV0l2Vk8xUjEhdj5ZYkBTdTxh''@;'; put 'put ''L1ApSDV0MGNIP3w7VWVSclt1elU4PjZoVXg6KjtGTlE7USldUX58VVpXbk5HM3FnXSFNcEk1XyQlYiNaPjJSfkYvSEpuKGZrX2VNPEV6JTIhO1BETz9ZVEhrOUkwdV1+akxsJlV5Mzs8YGIuITQ2QC4iPkNlUSV4KSUqV0wjVGkpb2UkWFcuSCVBV05RMG08cikwTzw6NzVfZnhSeiUuN1QqTjhk''@;'; put 'put ''Wz5gNDtyTWtHO313fDJiel9bNENtWXdaWH5DP2A3Uld8YSJSIn0zTyRGMFMsb0dgU1E/KnQ3VG9JQzhlSy5WRmR1OipvZF52ajUzaHFVOHZXenpHZjc3T3tOMiMuZnArRkdMVi9sZzAjZVJXSWFnbmJxYE9SaS5pczYpSEBPbndqcDJiUk4vOUI6QSVdLEBEMk5xaEVVYkQ/SStCJmVyTmUoXTxq''@;'; put 'put ''PHRQQlU/Tz1GaEZidEIyKEJia1Y8JjBFanluIjk1SExxWzBlX305L3ZtK055ISZDO3k0MU8pPT5zenY9TUc7OUwhJHRxe2F5cUh0QUAkdDdNYGFaaXsqdiNhPW9BdilYTkVMIy5qJndDM2lkckFMXiZuPWlORUV3Mk0xKm5AeTdbbl08M0ttMnpUNHlMVnN1Smd2YEY2dyRUeE16U2J7QEVLRHVJ''@;'; put 'put ''b312YGZQPnJpKThJWWxfSUVgcng3YExWVzArJV5AQWh3Tnc1Y1Q+P3poPCw/bjB0NFFmOixCbjVUNCR8ekcwLls2U3QuV19yKi5qQlhqVkk0O04jWiR9WEMoYF40eEcjM09xWW9VQ2B7SXYuU1t4JDhdfXguPVRZfUZ9JHVKMVNLW0J3X2FdKm1tLF5SSi5BIlBXbUtsekRYQ1sxIlY0U09wa2lx''@;'; put 'put ''YXNNWiEmZlAuUkhdWC50dWcsNzshVXQvdXB8dlUlIU5iZFlPK3VOemcmcHtmPmt4bzZyalsjIndAcXNReDxzOVAle15xJE4kYm0/ektqOiZ6cWZpVUxgTGN0TipkQ3ByXj54MHIqWHQ5WzdAbmRXVm9JWlFVJCUzLl5Ua3l7YEAxMUssX1JwTHYsSz91IVROYFh2MjdIO0xqJS87NlBXQ1pNInZF''@;'; put 'put ''ZW51ITo/TyxYcTpiL3NpNyk4X2IrM2hdekQwelskbyZYanMuMD40YGV4SHN8XSkjYn5NcykxX3dyXUtDKHArb2NfOyFsLDp6Y3B8a3l7dzdJVDcsP35xZCwqOGxtSi46c1NBSz88QF9oWXNTaS92TUUvaDN5UyRxR1RDbWVANCVQUWIifD8kXW1qVlFOez17QjxBNWg5ZHRVR3FbbXssIzMpN11X''@;'; put 'put ''RGp8WEg2WC9wRHd6W3VlV3dydjY9TV5eeHBmWWNLSmA+SiRrPV9CTCN5KnpNL1NxRntzSSNIWkU0I3s+a3RKci9GPz1qSkBCdFhkIW9+RSJtWkkwRH5pUSZAMiFHcV8/JGsoTkRGKXIocFB6eGU+aipyUUQ2eGIwJFIxJUl8UVBSRU19RyRJR0E4Ll5CIjpzKj1oMXUwQ05oUVshIWgzOjlSUygz''@;'; put 'put ''ISUibDksTmlTdShALmVFeyNMLCFsbn1+QzgrZzpINWppTUYhIUhiaz1gKzBIXnc/Xm4lT1FrflM1VEByI181XzttdGErRzVqVHxPfDVxTWxsTzB9NilYVmxHbFtrOSpDLkxfYiN+YDIkZ1BAJUt6SWhQRjV+OEFWTjYjODRRe0koTTg8USg/Xz9yckk2K3U/fkQzbVhQLnkoe2E1IiFbNEYzY31X''@;'; put 'put ''eC9UbkZuO0g1ZDFXIUNIWEghOng6ZzVGKUlIMSEwayE+fUwmc3kuTDZOLGZ6JVNDZ05CQj09QjFSKUp4JVI1YDNqLlpTaCNubFduTEQ4TkFEJjlFeDJYYzNvXWlea2xmV2dmSDk0aXp2byRHZjtyblpdOlRbW09WZCZzVVY/R2h5c1hKbyN3cGxUOkAmV2N8ZkdXLHxOOVVQTVUuUWlpZHpAMlA3''@;'; put 'put ''R0RQdUQzPyp7YWkvMywlT0JHbTN0STJiTCE6V0l6I1p+WVM+TXg9JDdUVFF6Qk5MWk1oUWZtO0VgSiRrMEl0cCFzME5RZ0FYaTE9eVdTcVIufXRJS28+TG99PGM7dGN5eko9KD1EcDdPSz07UUFANUJrMG1DbWEoRnI1d2opQjs5NGZ+XXUmK3EwbyFGYiVpcF1fJEhfWWNyKkI+V15OPVVfQmkr''@;'; put 'put ''X0A8K1p+dWdrMWVsLmZUUkZKYkF5MSkzNjtNSkBMTXYoTVN2ZFRHRlUxOWs8Y0VLPSJtVjUjKnVxb0dENiEweXJPNixvd2pRZzZIbFBPfHpZKypXezpYX3U9dHxUOiYzUyxyJmEvODhjYVdrdjE1fG5Rb34qaTp+I10jIXs7dGJCeStYRHdbajkoZEc2MmQ4KFEwSHc0N0czfXJxPHY1KzN8fjw3''@;'; put 'put ''RiNZa1spTjRDZSthWHtPM2gjIVBtdk4mTW4+Oi5aPmZMS3g5SEQwfDB4fDZST2RVYWwyX3RII3h2Q2R0PmwkfnpwfXNBYFFVSS4wSUtIOTt1OG0vOVF0VjRZPUEwP3lmUzc7UmwjNHBMeCJNQzJtLCMzT1lsfEk0T2EqWXpgQjM6Oy8wWEtFezNjXjFxemhFV0J6M2RWQWBTOWlYbjR3MTdFZ203''@;'; put 'put ''a1NEN2xTKnBDU0BFI0IqamxhTSsvKT0iSXN0Yn1lVDIvfHdQMiEjTyhIRVE9UnAmeXJ+Pn0+fGxnXlYwYzJzTHJhc0NoPTJxRkI8Vk0iWltiRnxLMjFgS3wjU0t1TlkxP21JSXk+ODhWOjhtWExNeWQyZUUqcSleRytIdyF6SnhtVSlLY0IsaFooaCZxQEslcXhLSHUuJVVCKlgrJltmOT1NM04i''@;'; put 'put ''RVJbTndpMD1GR2BoV2dMOzE+azc+T25LMVpGVnkhfCtMLGtObjxxZXZqals3dC48diV4XiZLIUFtfFIldHlAaXFiKDlaKT4xRnZiZXAoWWRgRl1udVk6MX1MeFohdH0+O0BvbHErKUdQS0tYK0V4Vz94bSgkY30oQHBlcSxyTFhmNTcpM1c5JlYiND4oNUw/N20wUSx7ZDQuYnFQNklNIWpZeEI7''@;'; put 'put ''VUppNk5ZenRGfFI/aFF9LHteRDZtTVR1cGhlfCpAb09ual5JQG9vUVEqKEtkJGxea2tfPGN2akVpVGtoJT5peipHUn1ObktVRF1ba3YzJENfZj1udi9OamAmXU0qYX4ibV5wTU5tIV10PWhWMVZzQno4VWcsRTN5UiokRXk+VnlEbllyKXI5b1tJUSNXIiZ0NShHc0guS3thdzskLFBZY1g7KHck''@;'; put 'put ''ayVBMENQK2RIPU5mI0YpaFRgQjgiVDMrZzpQVm45MntXInNId1hqPFEjJjhCdGJiOm9Iays2NlAuemwlemA+OzNaZUBDNjl8WS52O20xPVFoQkFHaU1DSmxdSnhOMzVWQk9iYTpOITxGaSVEcWB5ODliOGBpdFF2d2NXK3lKV0xicWohSFpWZzV7OkwqVWlTJn02ZXJkSWRCRHMwJlpJT2FCSil5''@;'; put 'put ''QCshanhNQFJsPFJwaVpbZWAhcVMxLkd9MEdfQ2pwPXM6YEo9PzhMZFpwaiprLyNNe0khdj58PnNCbTFWbWo/VEhMQlp6YFRDZ1puaX5EYTlWeTkjMjFaVihJNzN5VDAwQzlCfm1gMTg4QFVuNT9aVC9PUT9VYU12VlpyOig5JXtvKThqcD1KZSkxJkFDcEk1JFo0a0xTRyhuSldyOHZieC9sZk5Q''@;'; put 'put ''QEJtdk9EUW8mTXgoP1dJdVNHe3A0WmNNSTtJdzRwUCkuenpOK25lcnByaFRUSmF+K2UpaztDWjo8YkoqVTteaDBTS05BbmZCRFJ2ci8sQ11BOFBsdVksOSxqNEVGZCNtMVhxRD5kLz5dQEdWPE86X0dCPTguXk8oOTJPLmI2bSkpLztoX1NNb0lPcjNdQVE9S2pZKEAzKDUzdVlhKlJ7aGI5K25t''@;'; put 'put ''N3pKUWFRYCM5PjdCImNheUl1WSErWCUyIlhWUS8iUGhUPTtBVjAxUTlBYSNla35NTk9WUDBnK2VFOVQjOW9ZcHlVOGwyMnMzNSZxTDBsZGE1V050NUw1O1V6JWlxTzk6ZiZAeSltJTNYZ0omST8qYC8uaix0ZGM5UC5pQH5xPXRyWVJTLFFWVUtaTnx0ezdmLkNldygrJi9OZkUsQztpYzwuMWYs''@;'; put 'put ''SkRFMldQMHp4a2Mhblh1di41R2RSRHxxXXhKb302LFA9MCwzclFRengpRHpUOlZPSEZYP1ZvbHJ4O31AeEtbbUBjcH0vUm1qeEpGLmokcXhQX1EiZDNWVCVmayh1VCpKMXhKc0xPRE1xL3JldnYxIU9AN1ViME8oYUdwYFBJTTkkK20qWzJOJmgzZmZCTDcvaixOWzE2ZW9mP3JaJTVte1o2Ji81''@;'; put 'put ''UU4jNGowXTkxUW9pSHRXUlMzQE5wSmVqbE5qNzd9RVgkK1J4KiEoMzt1dWVULzxeeFEpNXlpdTVRKERnc0hDfFRnUShRfCtQcmxjbER2cEcyLiI+KHRxNjVLd2JdRllKLyZ2dmxdfmR8RVJmdVN6bTAsKnQqXiRMbUwvRDN2NVE1aDIpbyFrdFk7dilyeFBebnQzYV92bk16b2QlPmRdT1czOVFq''@;'; put 'put ''cmdgckVWI353eHBSMyE2PCgpbXpZQ2ZeXW9nOkM2dzoxRVhLXlFrXjUhM2hbWyUkWlJGbj9yNkRufDZlUENiX3FHfWV3aWcwUlBQLz5YKiIrYVQlam8iUz5FfFdvV0l4N2BAOyk1KyFVciQ9RiZdYlh2Zmk3U3huVjJiKlkzbTJFdz9oTSFJfSFFK3gjOnlhWiUscn5aUmJZb0lOMz9sNFhlfSw5''@;'; put 'put ''NzhHZl58UGYmazY5TG9PKi58Vj5ZTGUwSWFKeHolNVEyWUJZSU8lKn1meHMpR087UnkyfXBVKTYkIUxHU31OeWRnZF9SOT9ebWM/b3BoPmJfS2FmP25CPj5lSUEzOmNJeChJazxAYmR7VllAMnZFeyExKGlSbzJrWWt1QExCMF47dGteT21vJlZLM2t2bS9nfXBiKCloJiZfNnFCbjwieUNUMWRY''@;'; put 'put ''P2osbG88Q2pAeXk0Y0kzJntmVFldbFNoSjNyS1Y/WWJ9bEg3YmhfMHRDWnZAPiliaDpeMThZam5NbyE5UzZFSzlOPkIpRFAoW15WPTBLcDk6fnEyWEhmYmlMUVZCaEg3NiUhbmNIY2NdVGN0U2Bqejg5dSxqakdOKWZGS0EwXyIpR0Q/YlJhbnc2X0s4OkA0Z19leXsyLGcrODheUG93bCNYfEFO''@;'; put 'put ''S0szPj4xYCFaSlNfMDB1IkhAQkI4amxAR08lW1kvVyRPfGhzQ3FOLD87IjcucFo2ZGxPQUVPIlJmaCpONW9FJU90cyo6W1k+OFhfUExITVZwZXxMSzdLPFdmYT83T0RSeEhLaVJrR09DPGYyRWdla318Syo3TWYyWUF0W0c7LjomRSZHPSVGQCV7WWkrWj8ic1tJczFQJnwiUjAhfl9yMDlvQF88''@;'; put 'put ''WG9uWUtLOyZ+dFcuTDU1JDdobiw2XUk3RF8wcSJfUjc6fUReQlVgQ2V4ayhVVllbJFElNE4+Uk9kek57NG9vKCIoIWk/RWRKSkxRVH5OJGxfZ2Q3OEt2dE8yUCQ2Z0oidmQ9NUxybGZ0cHFuMkw0R09ERlJNcUBOdyw5cigsel07NmJ4d3g1O3FhMmVKYil+VkJkYit1RmNhVT8zMz9rQHFvRHlX''@;'; put 'put ''NHIjdCElakUxTTJzamB8RiR5JHEoanNPOW8qXVJWaGMvQW1SdzUsU1MjPU8lNSR2MzUqWiledWc9KCFYfC88SXJKKlhCeltvWioyQXI2RVIoZnd6RmZRblt1LFNaKD4lYHV6LjhHa1csMEVlUEpYbVd4Tz5tOEJ5OH59O04jUGYjVSViTVhfNCFsVjFbek1ATHlMJEp4eE45bXwxIS87SHZMYHtV''@;'; put 'put ''Uy5Gc2lPXyVrcm8/SXlqVzF2RCsyZUB0VktfcDs4WSxdYGwsPj57QC4/XXV+dz8pM3osa0xHR2R9aiRJXUdBYkl6SEE4VzB1TUs3ajl7LlJlX2hWblViaWczI0ozUExmXWZnVyRYVDtZcCt5YElWZURWTHA7V0B2N3xlfn1AYT1BMXNueUpJO1piZVlmZERfWEA7Rl0pelFpazJqOFFLY253KE9j''@;'; put 'put ''NnBSJXBBKzZ9R2h4aEtOYl9VKU9GR0o9UEIxUz08Uk9KTmQvY0hWYikkWkU+USFGak42KDFwRSEyOjMiKD5VSEQ9W2Y3QCpjK11EbV9sUmdzKWFCbFEuVyZhTCNZeFpXb3k5WWEleyh3U3hTPzU9STNwWTN2MksiU2RjLytAOEN4KXBLRWRNWTdGKGJ3R3VsOSZRQiRFcyJDfnlAJHZCfmh2QypT''@;'; put 'put ''SkRPI2NdOXF5PyYkIy8+fU5Ic2hpVWVaS1MmeEsjMHd1KnRZXUB0VmZlOl9MOXddW0NQS3QyJGlsK3xeVXc3Qi5uLlsueU5yenpmYWpHY0o0fCQ7dz92a0g/OyprZykvNE9aYTBgQH0hQl1zY0NycGRUJWQsW3hbalFoeUFjO1F8N3BXZyxQT2RIV1R+NUIlWH4xRiJWLFk9L2o0ImMwRk1GSH5m''@;'; put 'put ''IWkwWTowQSpIPCp2PD9+aVhWQ0RTUmRaPTY6XylDZzl+aFh9ZktwT0okKEREaXM7K0lPI1BLfmVdSGNMWGJeMC4sJD0xfGBNNkVCLkpDKWE7JDIxaD5EKnJxKTdtUXgqJT1sfGZ9THVTXSJGVUJ1bHM1YDI5bVV1P0JuMkU8bjAjZ314KHNyTSlZRHc4PEJdMGV1NGJhXlRJP2o+JHNkWzo4ITs3''@;'; put 'put ''KkwkM2tFK21MPyE6Xzk4KDI7dGp7eVNKWHIwc0R4bTJRWVZSUTNLTT1GVEllMzkmSilDYVFnfGwyTytZVGMqQ2B5M2NeP2dxM25BNWhqclpMUDU9VSZDfj16WT09dVkufGlRJVIsODAjY3MhNyNuRWphW34vMm98aHgoXiMlJnRaUzpIcm0wUFkvemowdTFbTUciNm5SSHpzP2FQL35EMF5xIWRT''@;'; put 'put ''fGxJYy40X18qO0Q7I0hdW0VQbTE2V20zMjlVcWkxbEBxdllUI1pkKyEsQ1o8WUlOZXVqXS5TdGdbQGtsQGoqR1pGTDl5QjR4KkIiM0tNTU9RLmlgbUxsL3F0PkFKTW0pdikyQzZvV0ooMD1vIVAlPFc+dFJGTy5rbT5DOXh1QCIkP0EkczpvVTtAVVBMaFFKYks1Zl5tNkhMTkNKUV0vbG5tVVVK''@;'; put 'put ''VUlZRHBDMT5Kfn5rO3F2PF10Iz8iLHpfVUomXjY7byRMZWEmRzhNbWQ5ZHYoYjZGOFtsTWxuQ0MyYSo0ZTBvZWx9YnxPV15gdFRUPEJFOldCVV1uejRWVnxUXjRpfWxwTC88fmQ9NypUZThkZ2c9TVZ3JGBrQ2lSUEo9fW96UlpEfnFjPF1iS217P2FMSFRkSWMsfHhieUdyMENmU3goSCRhOFNj''@;'; put 'put ''QmxIZmwsSV92U0I5MF0zKEY5XVIqP1RIMTlUMSVmckF7X0g1a1Y7fio8SEQoKCtWQTRRWnJfTTddWjREZXdqaWd9LzI/My5BQnNTR0ZLVSs1bUBKPzBQJFVPN0hdckhYQztjQXNFSE9tfFpXWG00WDxGdjpLTXtoI3dSbm8pR3NYNixFYEV4Ky9NNCFKcm4yKmgjR24rTnkyXltJOGchWUdPP0xm''@;'; put 'put ''di5qPGM9Qz5hUDElbF54RnwqTj87aisxVUMxezFpdHJRVn1bKVlvWmpAVzoufU40cnxmM3Eve2IheGBEcTkwWV4oWkRzSTQ6YG04bVlMJVdHcHs2aXFOO2xpUT9kaEVFSztSQCUoMzUsRmFpJDJ0dEJTPDozVyZFV1pyVXZAdyM9Qy5vWWJ+PDhtRn40TUpUYGAwSTYwKzV1MWwzfGd+UG84aDlw''@;'; put 'put ''SypuKFBucWhFbmhbZ2h2U2V4Nj1ZbjRCXVFHMiF6MVJteVlCckFVYGsybkguJEdVZzpwQ1B8Szx2fmRbT0wpX1RweXkubjowQihALlVfUm19elchT24xJiMuPXQjMiZ1eTRpfXVffT5GfiYmaiVhQ2oseFVNYDdgI3dOZV1QOmNRTDRaUj1vV21CaVpWNmJ3PDd1XnY7JjIhQkN2IVttLEA0d3VU''@;'; put 'put ''bV08dFk4MmFmVlgwRm4vZCJ3Tj1ZNm9tOGoqOmBIR0x4M1UvKS4sRjJSMFc6VnNbO3NnfkVDITRHTldneExGK19sLFFFL1d9WmlVN0leZy9WfGBkcUk+bTFPTUE2JVRmTSZqOVFpKV1ZTy4sdF0obFpGNmVxNHRAVD5AOCpvTFA0JCo+YWwmUnUlNC9Ua09pOyNxJW5Qdi5WNkYvMVhuSmNBUiJZ''@;'; put 'put ''Ij9ONVQ6NiQzaVVjOFNZUl15JXV+aH5zQEU6TDwoeWgsR1B9ZnI1LEt8JWQ/VndCSkV7OFdPTy5FVDFQdFRuIUlDMUdJWDNQNGlidDtgLztBP05FcyF6Tj94N0E4NzA+cjZkbE5lMnIxN0RKUWtVfCNZOSFeVUREWTxMX15eTV9fcEVOb3k6M1UuY1phWVdaaXR3MnB6dHsmdi4/NllVWlFkTyhP''@;'; put 'put ''MndZSWQsX2dOfGU0LlFNZVUwLmk/X303QFQlaHhHbUc1al5mNjFAWFUjfTpzW1AkMChBKnVtRDZVckshPkNOfUJDT0ghdGpjfnlWLCN+ZTFQaFowJD9sPWdwYH4rfU1rWCVDTGJjLk4+dD56PFt8WFQ0ej5aK29WaEN0S3JDXyooJDpLW2pwJiQ4JHRrdTF3QC9rMDtLRlJKfFc6O0spN3s6RCNW''@;'; put 'put ''KG5DOlR+PDRxWTB+dklTMH4oWX1KSU0mI11QVix0L1ZDISY1QmgrSEoiZEQ+SmUhW19JZUw1OSlUciMxUUZwJl5aV1g1amNeQXpvVlslQ3libkBZPSguKkxlfF5MXXIsT2JyVzhLeSNuImBVI0tAMSRwJDE0ay5McmJKa3tQNzcpTkUiPFRyZmExX2w8dThLKEJ1fitzXWVeX0AsbXEvYzBeLE9Q''@;'; put 'put ''ZT1qJn5iZzpjcCtRcWs4KyI4YXYmU2kuQV10Qyw4RCVLaXdAUSRiam4jYkw4RFtWNFU/aH18fl9zLFAlMnQoYlFbRCVPS3dZQD1daHF2O1QzM1BFVV9oP19rVlszX2JJR1l0Qj1nVWBSdVhtcSx+cFsvYH1URjxEI0Z4SzZkfUNqailrandkamdSaiNkK1lHPSppNWp9OjxocyFxSSFSSXU4Z3V7''@;'; put 'put ''YFlmaD9MfTpsZTZTcn1IdjJ1LkU0W21CenpudURdZG5dcWo+dG96fDNRSEo4e0BJZzZ0QCZhOzwwV14rUENhYEcyIiZJUjhtNixkMXxyJWVwMkZAMVcqTHdyRDwwXjM8el1LTyg3YlFyNj81ZGIyV21gRyFNNWI/ck8lNWU8P09bUHFLTTpMKk5zczNWIys8fDFFLGFXUy9iKkN5Y3BaSGdyY3tp''@;'; put 'put ''WHFkMCQhanYjT05BUjErRSE9YCV6KnJLViZMKjwjTFVedF09JnU3P2pufncjXVJNeGJoOnN8MnxnPzxxZXpVKlNfMGxtQlBQPnY0RSR1YWRMPmsyN2tGa1lVXXdaWHFnPnRkUzJRPDRYWE8uLlZ+KnJsKn1pKjUydzpzVUY3OmI/bzR2Yy9qPno6UVMhU2NvWSZpQiVuQWx0QiYhfWtqfCpoLzBB''@;'; put 'put ''RSUwXylXRiNFdFNNMDAob31DTjk8cjckO2tgSD5oT3ZRY2pbWmtFYGJUREpKR2RYN0xFWHQ+QnJeWypyIy8kUmp3eWE1dTgkX3cpNzA3WDxMZDFCL2JIN2RiZF0kbGpySGJpViw0Yj1hb2VIPkVqUk4jLzUqfHA3PVBLdXV2Yj1rUWp0TixjZFhjWTdLW3VTdll6IlpuY0E/S1FfeFVbOzA4ZF9U''@;'; put 'put ''ZSpjaGU7JVQ4RUdPInBzOlZWL0dmTCFySDx9ZE9tQjV3KjdPeSVHRz42dDZLeFQ1TzBJe0M2QCxeXyYjK2NXQC4jSWNRcV4kL1tVXkwhWlgweX5NakpHeCp8Qmd4fHgvR3d+Sl1ycHU9Qit8e3YpeExVLihiNVs8d3YoUWFjTWMydzZNX29MRnxJJTRibFI9I2tMcjhwUWhhKTtuOVo8VyVSNTE3''@;'; put 'put ''LkZQX3pwbG4/VmhzQiFNUGxWZz01Wzt6eU1WY3lZT09JPF0/THozIj5CQlp1eDpOfj52Oz12R3lIc3EjaWVFak9uTU8wXWc5eDFjUFhEKjt+TGN3QnZNLm1sQ1I2W1ZPTC8mWlY9VHQqVmNwY2RGJG5RJDk2Ljg/eGQkUmVyS0JlbnZjQGUpOF44ZHljImYlKmYkTjRSZX1Kck9wRFJqOSY9JUJ4''@;'; put 'put ''W1B+TClJOjspVFAsNm99anl1YH0xKkN3bGlkZU82ZSNQVFBSXVdYczp0dFZqdnNQe3Qsckkxe3g8OipoT21dOjhUNE50IX5BfWZ8KiFzZyE0N0NdNXBTQH0mN15qO192N25AYXkxYFBbenFGeHIicnJ8fT98cW46dUp6OilmNU9mWmwxKGVMe2lwPWE8ZG0hYltCYWYzeE9ZMWxSVzxdZnZXeEMl''@;'; put 'put ''RnJAJm0jK3VwOWY0dzYvamhSViVdOzc1MTN1b0BbKDlkLFBSekRKbWgoWjosNTtfND8uTEVKW2Y4UW8rNEMuKEVGfmZLME1COiFrKzpIeChDYH5vJVdlajh1e250JGdaVHw3Jlc7P15mQHtGfkJZYW0kTlFYb1M6Z155TnluNT1nMm16bW0oIyUzQmllXlhub3V5Zk1YRURdP2NUWnpdYlRUWT5I''@;'; put 'put ''N0dRVFFKPzNneTQ1bDpxTTBBRVEsXldeKjAhRFJNVjdsI3VuMHwwXTxZe25DLlh+M2BBTShpcXRQR2xBKkBmMERlRl4iajFrJi8zLjFabmh8cFNnPmZ6QUNNNnZlPCYxbDRzbWs8YSkqP0NZPnw/WHpTczYjOkE/S3M1MXgiZGN9KXQ8eDBGOXBbd0MxPz46KVtqUWtWdXNYUio2Y0REQk4keEBk''@;'; put 'put ''PDQ1TlZfZ3QhKG5dfVR6T3pFZ3wqZysmOVhAamN+QkBKcCRaV09PUXdjRlIhNSM4Qk9lYCRhaFJ9TH1jPlR6clt0ejUwWUhHWUV7Rl5kKy54VEkmYjx3LE1OcTJoMVUsR1lbRGFTUmdOSGQmPmtQTlhyI1A/eiw5SSE1NFUzfFlyLkl0aDBnXXUjcSlPQysvUFRra1Q2RCx2N1laISFPe1tiYXRv''@;'; put 'put ''UGlUMmxCcE5YUS9uOj4/W2FgIVFBfGNuXkFJYX5qNSIpPH1qSmkvOWxiW2wrQ2F4JUthe2xvc144emFyTS5pOlR0NTxvfCM1Qkk1NjFPU35XXkw1Nll4dXR3ayh2bmI9XjxEOD9XVmZQXmdDeltDPChHfDVFSHhYemsmVG49Xi80I0N7Pjk8JENYaWtgey5DTlFsblVNb2oxdzw9fn1tKFNocCZd''@;'; put 'put ''SC4yRDRyOy4seTMvIWZgSClJOW15czB1NEhXQylrYWVhdW8yMno+O0Y0TVNpW3tHMHB8VmEsM2dlOEwhKSlEYCpEbXE3eHFWVzAxRFRSezdOR3ooUUpxWVkzZ0VLJWJde0xBOnhySWArKmw+YUdUUzRgZ0JZXyVVTU04RHV1MGRVWFlrI1pjWzp5dHhvV3UzVVZEK3AxVjZkXjJmJUgjc3VZRClC''@;'; put 'put ''eiZWOzBZQjo9bTBkZklPZkBBMDpfYTUwfWk+JG07c3VlRHtoVV46cllTKHl+cj10VUVqIXpPOi5YNjdYRUpWUTt0WmxTLEI3Lno3RmF1UFk1QFN0Pj9fbD9pVCg0MGYwZmpMeVdHeD5EK11ieDgySSNmMS5WelooV1E/UCx6Ty4vVVM9cz8xMTpDRlFtUUAvOXVAdXFVSH5mUGpzKzpyRT90PFsp''@;'; put 'put ''TXNHWCYjT3pmKkpdfSN6KUMkPk5gWjBESklDWCZvNzNMe0hCUFIrVylqTFVoIV8+OUI+LG0/KzIyWltfImd3JXE5Njk7WDg0RClxOFN9ZiZ9Kko+cCh0YF44QDAjfHU8N3dUSys8VUM6TzY3TGAwcT0lL0Z9Uy98WXg6cTRDNFM6UWZUM2xzQVhuUk9qQmBKR0dpM3xhVlk3Km47aj51NHh+e0hS''@;'; put 'put ''ZylaKzo+JCohYzw2IW4zPypUfFIhNjdoIitRYy99V0o6YTw0UGtDR2BlWmFdKXo0P003LG9XYDkwTzJ2dFN2bTFScjkkaVorO10kNSM5KnZzeWxRVkNgLzE+JixiNHFjS0ZTRHJGaSpQfi9TKiNfUnVgNkdzcUNDXyJqaS4pPDsjOmxDfGQrKF41ZTdjRXA8QmFFfUBARnFBaTdDblR8X2RCanIq''@;'; put 'put ''czdCcmJ7ZGtdVzcjcm13aHM8R15pcVMrSm0hQVd8S2tZQ0AkTmklPS9CfCg4Qi8jYUFPeWYxcVhDMnY0ZXFbIlRuSVpFY21TQi91Mkw9XytuQVlhRmRLfkFPWWxaIVd6NV9dVG8/QSRAZkZkZ1l0Z24rK3U4WG9PQkY8cFZvP1QhWnxqVGk7LFU7a2R3ekJFMW09KUBZbX08eHxldSI5M2EsUDkv''@;'; put 'put ''XWNvd2p+MlRVcUN2KyxLTF8xUHpYV31eYjxJXkNXWklvTWZmJTUxeEtoYCIjUnJNXns9Pz0zeFddSmt+PDs7aih1aSQmb1d8S1AucEptSHM6YEdufFVEZTZkV2BmNlticmd6R1A+d1VNcnV2TERSPG8kbWFoQGkobGJ7fWFgaHJEay48cTF1QjhSLlErMlI8WD53dn1wS3krTlZZOkh4RFlaImQ4''@;'; put 'put ''PXlFXVNmL1pNX0Z6Pmt1Pnp8b2dyO3hydV5xOXdbLEIkdDA3KGFkOkNRXkRCTWtRNCF2SC94O0E8N3hgY2VvLyF9OHhVQHpQN2s6PHZmJnFqbCkqSE1NKU9Jfjd+bmFUcVZCLGNqbSJ0PXg6WC4xPjB2N3cjR1FyaHJmU1NAJkNIdm1xZmBZWCplXjl0ZClYPmQ0QH5gNTt9RCFzdzFZbVNhIi8j''@;'; put 'put ''eFo7YXlKajN2Kjord192WFleUnM9cnpmWzAzW0QqM0pePyJRQW0oNE9aVGtwRT5VPmcjKUxfbC5XKFc1eWBHcyVHdGgxVnVHZyJFJlY2cHxZR3RkUyNoVikrTUBRPGhhLyl7aTxPYElLUiRrW3M4XkZicF10MjxrT3JROXBPR3ZhLz5vNj5Sa3BiNls5YjB2S1R3M2pCWn4hYWxPVTQyUEtKKFpi''@;'; put 'put ''eGtGSHRvJl1ncjoyS1dFPS9GcGtQPGk4TDRpUEdHekczRVIufDg3WDUhe3VKVFciaTdbYHUuIm0+OCJeO19ZWStpMShYSzswZywjLDBlJWNGRHhCNERZIUAwblJ8cGkhYDFuPWI8bnEwN3B7US54UmVxLyteQHdGOClnWSlFOXBpZE9GJlVFLyZseUYqTzltaHdDJER8JG88N2JCMXBrQUJde3N8''@;'; put 'put ''dy9wVlJAaj9mPXwhUnwwblVQL05daGReSHJzIXtePGU8WGdlJDtvWSkqSFZ9Sz5lR2tkM29wVGRBbDp0RF8mfmQsWDMkKStoVTVmYEhpXl10dGE3IS9xbDYySHB0eH1yZVpEKW9WcjQzKmwxO11aRzs6Z0U/PWoufkB7dzA+QnRuYj9fd0hjOD9UUGxQTkhDMVAiTl5tX14mWjc3bVs+bXpiZVp7''@;'; put 'put ''d2szZCQ8STMiITtyYyFCejZFInpgM05WY013OHxHRHAla1E1cCV8VEJTIU5oKy80bEZXQG1JfER4e1U8NmJZZno/RDJLJFZpIW8rL3VKXlI2dlBCMllFQ0k5WlVlelNNbEZnfmpyeC90RXdtUUZfeGlJSyZzVnpXInhXIV8mZT0wSmUydjZQVj83OFoiVE9TdDpaNWpONzRONHd1SSV2YzRATiVP''@;'; put 'put ''T11tWV1jPVI3T1J9bV93Ik8sX31LZmJGY0l5T0JVc2UqJllKXTp5W1g1dFZwREtPNT1ybWVed1FwansyKG1+am5Ze2oxTD9zVXIqSnkuYDB6JXpBQDF3Rlo/ZktKNk9xbzp8MyZgZkBkXUMrJj5OSVZkOF91WyEyZ2Q6PjtfMD85fnZJfHR5InlYeDk8M2RJWl9tX0N0MyEqalAsIUJVfHhyN2Nd''@;'; put 'put ''W2pqQHpQWH5gVXAuSFMucFpxZkolLntgdnNHdSljQ2VWbTl2NF5wVy9gIXdRIkEvOFpwaD58Z1teYGVeM2dsU0omXndXUGxiSkMuOnM1RUx8P3tRSF1CMyRgYTJge2g2Rl1zV2dYbHczOE1uInUxbDYvb3ZCKnVaeERNZDoifUFrOjBFNC4pcXA1N3pXczZmeF1Jb1Y6KiFSIm5mM3w7bUA8MUhU''@;'; put 'put ''WHl6LnF0QGEpWXpKSkp3UyJPOV97P3cyZGh9OiRtOjpqKiRGRzVAKDYyK2c9bWB5TktWS3BTXnNdLE9UKFl1R2xucytJQ30hKiRFQWZtQ084cl80ezQoMFhSb1F1ODd4fnUzfVYqdS5SflhDK201JWN9czsyKUR1QmU/PT90UkheMSklO2NiamB1LFIuK31fYTVLRDpwc3UwSXEqW1RfZFZvaWFh''@;'; put 'put ''RWhwPFQub3hGU09kOkYsKEYmZGkldDJuWiowTyVWOVtvOyNPSnd6IVAzRFNnJW5YT2FaRWlbR0B3L1UiT2pXQU89WS9WVEJae0pFUDxTb35gVHFhaTl8WjVEaHYqezA9amIlLDJbMyJVWFFZU1R9YDU6PzJDdVFEOFNWP3hdNiZYM3w4Lzk0eWMyUFkyQUAxRTAuTCQkTlB5YTlkUWRCL089SiZH''@;'; put 'put ''bTY3WTE7bGtsPDJDNWRwSDNedyVQa3M0P2FPUCFYK3AxK0hRdixYKUIxMT8qeXhQOVhhYUQvZ1RlNmU5aFVLRkVBUSghcHVOdTVURTNmOzxJI2NyTSw+KCErd0RIWGBhYjp2clF6KWgoekJWXyUzPDh0VUdWYHtuUVE7dHhbL0xEI15kfTsjNiNnUVlIQnxbV0IxQF5xVnZ8e0h0X1RnTmxQRENe''@;'; put 'put ''fSpyKWheQioja09TKm1COF55O3RJa3E4RHxLSHcwdlVCZT9qTEVIamVeM0k/Ljw9cSYqd1ckYzJgM1IrY0YseHZMWm1aLGAhRTRjJUQqbCJVMWxBTTRIJmAvZyJCXjMpLGNhZDczampKMU5OYTxgYXciRnxuXW1oTU1FMChee3RSL1A0bV42MjkkQGFqUDRBald2JUwiO2plOyNjSVBwfD9RaXdu''@;'; put 'put ''U1YvKlo+PHZsJDh3MHVMXkNTQ0VfXUVyZnd0UkxtJmFZcT1ETTI3TDYlUXRXSCQ7KmErTzhdbUgofmBtI3lDb1MyUH5AcT1XeyplZCpDTV48V2g2UVdaN3xLUm41cXZKIj84OFhaaGhLe1o2Yik0TldTVVZITkg4bkQlMldwXikrYGk6NjQ8RmclSldtd2BMaElKKkpENXtIQGFDbF9VPDJXXi85''@;'; put 'put ''NV48WSRxZ0skd0dGJjReLk9nMkU7TjYjTDY4JmYkailuVmQxSE08KmVwUWVUL0hAIkBoLEJrblJHXjpbI0pNT01zdFsqOlYuRmc3UVBpQ1QyX19Iek9fbVo4eSE4fSlERlVxNUpbWnBCfkArQmQ8byQyTX47dVduSCM4MWFWTWAsYzZDfWckXy9VOkxBSkopbHNkO3J7MzReQj5yTCFtQ1lWcGU2''@;'; put 'put ''Pz46M0suIj99VVEyS1toQiEjYCoxOCMreEt5MUUqSzB9RzdSOD90SEQhMlFXRjJPbH1nODB7X2NqUTxhX0BLfSIhYzF6OlFVOGg5dSU/cW4uYSJOYGg6OyFoLEtHbXczKClxOElhfWlSZkwlRyk+OVchbEdVXmQ6Jld7U0xUOzlsTSxjImV5IiwmcXxsOnw0RXszdn1WNElAdn1jYzkjTkMwO2wo''@;'; put 'put ''L3c/aGQhPDB7Q1ttOXJ9JXtHRD0vQU8/aHp5TklxPkswNG08RiRFNTtNWD47e1A6X204RmAsQGQjaE8kd0dVZUQlcjBsSnNkfUx+XmZtZjRHb2xGbSV4dHI0P2MhS34kL2phJHZPaiw8KDdfWylubCRGT3JmbW9UYipSQmg1U3Y9fFFHKV18JDQ4MXkiVylXemUxc1VuZSNTaUwpRVZ2LEw2UV82''@;'; put 'put ''TFNxZCwjNzx5JVpWJHFWfGpuWF9xc1skKEk5UWNhNChJelF9OD5vbkNAfk5BM0JkWHI4NHU8YERtSClVTV5BcGI2LixMZEJvdDQoNkIub2R9TildYi9JS1Rhdno3XyttOFg9SGBtNEcpWiQrPmJUZmdYVTVTNTQ6PkZQUlRSViVRLzRbYlI+YS9udVp9amF4TU9DUDVUXnhsKik8UDBdUmIqZCl1''@;'; put 'put ''bHptMEdmNEdnXmVWLEheWDViLmZMWlkiQmFnc0c0bUkjLCxDWWU4MXAvVzBVW3pKXV8hc3JNVkBoMjQuVWU+ZSwzMEBhSjsjJjQpJT1qaDZfelRIW15aMyNjW3RvV2QrSkxAXn17a1VbRnhTcG02ZH02bSVNWjB8PUwsIXBkSjpHX0QoVU1RRyNoKm1MRUkqWCwvJSxGeVNia3FZLl4jfkVeajMr''@;'; put 'put ''dnA7VWFHO15+O3BRZmZzR0JjfUMreEZkSGk0bGU4YE5iZiJbbFtlISJaWUxLJTxoLjYwXihZX3FlbVM2fCVJJE5QenE/UywuOVR2fkIrX0B4NWgyNV1iYnc5LltadHZqOChmdkFaZl89e1dGbGMpVm5+MiEwYyZnQ1JOYDAqTXh8dE4oIytEWDJxZUpzblpjZSVBRm1AfGYqeT9wUEdAellSRkZp''@;'; put 'put ''aE0peTV3UyZqSjlkemQ3XiF5eCU4d3plRDVxVCQ/IWFfS3loaWFhfE4zNmgwQWVaNmleZEh9eCN8NDAqXld9OUxwa2Y7OjI6X0lXeFRhI2kqKT9OOTVHfi5CZDlvJCkpSklNVGpgdjcvSXcwX3VxKTNYY2h6TyhjWjt6PUJ5fXhDNThBVCFUMjxXVnM9PSMqfSsobXJ0cDM/SkpdRU5+eW53bVt3''@;'; put 'put ''b0Q9clA2W2hVKUBiJi58IzswM1NkP05SfDpEdSZ3QCxpYVA/Kn1YVFdfbjxkYzhdXSJfcGVaT01yV2VPYVJHWFlyeyheVl85OzYmM0ZoaUVsd20jYFMsWng1XjUqPzlnPkdeZS9zXksjOGVYZ0M2azNndnxPMWx4fWxHWVQuXjlUam1ee0pecHtjeV13ayhBS0FqUFhnWz9hRXZ3bER0RkJJPFpo''@;'; put 'put ''TlRRYWBWUkgzOlZMW1FfdC5keSlfZE1pPXNpU0R8b2ckKFp5PlMvUnUsNn5iTFpsen04UW1RY2YqXVFTJix6W3JwUD9pXU00T3BOKFdxOz59dDxleHZ7KnZjVnhwZlA1YCJfTmg0YDw8T3p7MTZvKVF0NCM4TVtMZCoicDZ6W09bXzFLYXw/NXQ9SjNAJjNxPnRmfTJUeitodSlUKTUuLm5yeDNp''@;'; put 'put ''aT5rQmolSFIhSGVYQz9TI2RSSEJLOURsW3w7PXwxRlh+JVtTL0lqfHFmfS4wLzRgfWxyaWE6blF6fCY1U0NGYXtfejcpZSQ4dTs0VS9qVVFUPmdCWktxZixhQ2RdZGBbdSxAWFdnKm5dSFZ5W0dlKiFTe3ddM2k5ZG9Vb2gxWnhHezhyTW9zPmladjQ3azk1em0mdit7eHpXYnduM3AwaV4jQTV3''@;'; put 'put ''MFVZMyh5Oz1JTWZeZixQMDhPS2FaRWBXa2RHaSloWF9gNSs+I2s4UzNNI3VkXXlqM1J1dipgTiJ6WGliXm45XVJER195NDAzYm5rQy9ZL3ExdUlpRWMvI0d6aTgoQnx+ejZTb29DZS9rfGhBdm9FRn1afHYyMDhhLz90V2E2cD4sJTs8WWhRNFZ1Q2MkOEd7IzB5ejQhNWx4djVCVyNnVnxFPX08''@;'; put 'put ''ZHhpLyJFMFAxZE5sMWpuaExNMmo3Knp+QHciYn5Vd3cpNFFHdV1wcEFUTDlxdW1lKHt8WUddOysvRSR6JDFPZHBUR1RRb3M8LDdUYUc6UnNQRW9zfXVVeWFrRVcmTDheMUJxKXtJKCxwUXA5eSNvP1hQYkNxLys0ciw+cEhpY3lbYjNwKShaYCNDPUt2NTBsKFkucXt6WmlIVEBRYVkkUldtRTk+''@;'; put 'put ''WmZ1Oi51Rks6cyQpMD18SnQrcC85fTlER2Zmey9TWXxgMGg7RUB4QGY1JEopRk9MWmx8aCN6JVU4Il04QSpkIkUhT3J8Oy9pPXFmKCNNN1IoTUZfZnJTJC5PTDR5XXN6KTIxRW1FRyhzRXNXW2Y8RTFBTDNbe3ZTNmAsWT1XVWFzbnl0Xj9tSmV+XWlIISRUTXxNWU95NlJNaXFlTjFzNDU3M0l8''@;'; put 'put ''RV8iJDtDaDRdfnUsYTxJX2YhTGtELD1hLzsoLmNzc2UrWixofXh2ZztiPiUqaCFPWGE1K0lGbypRUV5KNUc9M1A0VUUhbi44IyRmXnF3KU1OXSQ0Ul87MGp8cC50PEpWWzZ8LDwvPG0saDx3c2MmITorJng2e3lldj9HTm0xUkZlJXBvMS90V05qTmhEcDBDX0UkdHNtJmRsbWhNX1dVZn1rXnI4''@;'; put 'put ''R0IiZUY7RzdbIkJ3R35sN2xpczN1Q0lZflZiIm9Id153TlZ2ZiQuQTh+MF9kLj45PklQdXg1KTUsMlpLYDMiOFBJbUhqemdGaWVqWHU7OXklSW9WfjRFV1FzTW4rPEs8cFpbaChYbHlSJGAhTW5qRXZtTWAoKCRQOz1+aDdiQXtBQGlgaTJnR3RoOkJqKiYuTE53b0x9eFdKMERwNTJ0NSFBSykp''@;'; put 'put ''fG9JeXYxRHRXVm5yNlpXUDdvcVBrRmcrSkZydkNrR2VMRDlMY3ksajJraDkzbjRCUiVrSGlVb1F+XVUjWXdQaFllezQzNmx6dW8hWypkUUgyYXxnZ3pPYGNbaFpSPEt1citPOW9BOl87Wj0uI0pidnlHIVoyPWVPMEFJS0t+Y24jQFtPMEw7OUNSNzAlWixQO3kvcEx4I0wrdUhSa3B5KldJVWU0''@;'; put 'put ''UkRAY3EqYyx6NlpDeylrNH4melp6KzIpL3ZnU0FnN148QWFTdDFRVH5sKDU/TEgpeVBvfmBAOiFBYSR8O2JTX1F6Iyo1TmNoemxxO1QoajgmRWpyZ35XeWwycm9hIjt+UTtiKj5QbF8uaWAkZHlnUn1BdkAqNCosXmBeMHBiYFkueGtwaTtmRC4kSlJ9VyxeVS5gTGVLXSh9OzEsNmY3Vz1kRTJt''@;'; put 'put ''cVE6ZCJJIzJgWmlBTjpqakRHN1U0d3NZPVtaUnlSWypSJT1jW1VHcTRoKkpsai9ldE9bTE1TblFBdDcpZVtSTkZHJE0kMVlCWFEwVFtJWzZiXiF7TFgpWUNBelJlWGddNHB7SyxBe0dsMjdFdShNSU03Mn1UYDtxWnh+UDAzUSlSJjIocT4ydW0+NVc6SStMTnh8fWk/a0ZuJEA4a05hY3JhaSxM''@;'; put 'put ''UGkpYDR4aDV+Pjg3IUlbY0NtIXgmTyE4XyVWSjgvTHBTUWMmcEJfWDVBZihXVDIvXUVSR0JFNGBAL3J1IXk3TX15JnNxWmkuVlhlMmM2RlM5dmhbSSw/VCZrayE1Z1tkP3QkP3dDUTIhcyxVSG9mTll5R2pUZy8xP3AzeW1KK1RMO2pOK0N9YmAzaEIzYU1XdlNpcklmfVpNNGRXQmhYIURNaD94''@;'; put 'put ''UGAsRzBpMSxHMDJaX2M5RmhBbiZVQyZ0OkY5ckg0UUtET3ZTcmRuOzE6WmY6e31panEhXy5qOGEzeDBZcUhMO153Xjk8PyheRCxoSkM0Tj57dTNvXSM8W3x6Om0mfi92TEN7VGQ0Yyp9KWNpV0I5Ok1PTXglVnl8YEtEWiJwVGRpMjlZMDFGIz5FfE05SzJbezNQOC5FdkhYNjU/UDpTPHduT1E/''@;'; put 'put ''YywkVXk9eXhWd0lXb3BpOTJjQUpGNlApZ1ouSykuSHhHM0JRVjEzTjYmZHR8UFJpZG10bFBuVEIoYUQ2dlZ6SjE5e3lYXT9mMyFfTC51PmU+JndteGVMWWR8ZyVhMS5fM3NETylJWk1+a08mSEM0fWFwZjJIQjpfanNrTlpSNjdeZ1l1IV9DZT89Jj9lcCU+VX04bF1fUFU8dThTeiIxJTEjYmgy''@;'; put 'put ''QVMjK1tvMlhecCZ0ZVZkODNYZmBINm5fKHxEMX43XU9MO1B5NmooSTdlKV1XVUJibn4iNyJTYXlsLyRTMzVhQSRqKkIkX1MpQy5tKlhyYkxveT0rTkp7aTI2UGIiSEgzQlVPRWJlJXJjS1VCTE5aOjI8O01TNi5nQjdzNWNZOl1iWHowXzZXPW1YZmVyLHMiWXs2JDNobjpVRmRKTEBPV3RGIWd8''@;'; put 'put ''cEIxbmZDNGJ6ME1IdmosLlAiQF1jL1hyaUxSP01uTl5UQ0R0PH4xMkkyeTw+QCpxXyg1KTh5dXF7aTd2QGwyd3BaYSkoSnNQR19DOl5QKEEocT5KejUxW1BIXiQ7RT4jKUlLWmlBRT8rcWFPNWVNQT5kRiRRfitFMnE7YkkoPVZhdjQudnl9WHRdLEczRlpZMC4wVXRZSThKNWRAUkc1R0h0O2Mp''@;'; put 'put ''ImBVdG1pZ2t2KVRCOjpTfkBgYD5NZyk1TFAkcXJMentFbmB2M1FDe1pBVz0/KUpGWStga1R1XmVAKDFMXWhicndrbnEzeFYiYGhqPT1UQGFDM3VHXnY9RXU4dzxsRlswTFUmQWVJU2FaSGVHP3I8Zno6cF5aJVp+aVFRUDZSInx8NHFhZSo5ciEydmRzcytDODhFblBULmBkNmxiNURncWwlYmck''@;'; put 'put ''V0cqfn5IZXA4Y2J7X24mSy4mRTE/ckxveC9TOmNKYG8yfkVYQmpGQm5GdFtELClrLyw+JCl0UlQ+PWhPV2g8OFtDaylKVVRYKk1pWX16aFQwc3JzbCQ1UzpxST5kSThkQil3XmZxZHRjeiQ7V3o2c205VntEUlBZRipUMEl6LkNCPmlgMHtCcUB8KXJPTmYuaSYxeEB5LmZITyNRZmRlInpUKXlg''@;'; put 'put ''LEhXMzxFXV9ba0ZCY1N6QC9ISzlgbC5tKyY/SGl4dSo3UkdzOURTTl9UI29GaiFVTXtxY2t4Xm99RUAkdHpsbUdtQiVsSWplY2RKUCp4Y3BVfH1hQiZxfWRKYG87eE5EcTs+WWlxPyVAT1AwPGRpIXFtPXU6aC58QCEwKGxzbSY9b0dbJE9OZzQiTnIiX3whUlNQckVkb0VNdWJMQ09Hdm1FMHEm''@;'; put 'put ''UjBAN2NaN2tyeGU3cU5wQHVIN3BqfmBNZUw3SWI9WmMpcGwpdGUwSDRgKHUkPFQ4OlVGXXFjIS5jX1BPSnIwYiVDPyt1X3pfRDBXX3hDMFszWWNsfDIyTVBEfnZTMXhmTTF3b29BN09NfHNWXktOO1d8TFo6IlVvUHRlRHBQN0dOcTZMd0B9O1lZRzdXemBNRz84Sld5IUhtRHpZX0dQfWVxYj43''@;'; put 'put ''SWElZWBEZl0jWzpEL3w8WiRlPChkPFtHbGp5eGs0RUsxVU5tTUJ7PUE9bHw2SllmMiRwRjhDLm4rdzd8YCVYcHhpTTI+QG5uTDE7W15sRV00OFB8b2p+WX1TOzRBX1VPfip8IXshO3g8KVJKQ15dOVdjT0dIJWRtazZdaDIkbns9dl1WW3wlcig/UWYqcWE7JHFLKjJidC9yWixdZ3RtQnVLfGQ7''@;'; put 'put ''TyEyTkdTJjFAPmpfanU7Q3t1dkpCMzJtKltmaXxsSF15akwqP0VmfSlRR113Sz81QCtXQFEqJkg2aEVsJT4qTmBlYSJiWHhmcy9WbCs6NUVeQEB8Ykh8eEdTVCZHLHV3ZmJ8QXJYNlZ1QCldWCZPTTlSJmIjUD40YjlFMWVHK1lpXiRMRndrd2RvajBhaSw+UzdMclFsW1t9Rl1CZmk7d1hkckNd''@;'; put 'put ''OyleVX5bSllKSlFhd35hVV1GeGNIT1U+VVYhOCspKH5pZyFGdyx7azlIVzZhY3dJZ2l4N0xubytBdWNbbl0sUSE+ZE81TGdkPzB8ZC5sZD0lWjZ8TjY7XSQkIy5LajJoaD9kaD4/KXwiPjlXTiRHay9PUSQ6ak5XYiEkWlJbZTxPPXkhRWJ3ekY3M3hVdkskNXtgQDZDI2Ftal0ubTc2NGxLdFMu''@;'; put 'put ''Jk0qJE93Z1lhL0Y6LnhteztDO2lrdExuRnpxTCxlW2s0OzV6UFhOUnlyM3YiJXM6O0dlSzpNKl5OJlt6ZVVKZk5YQmVKNTQzOHw7N3ZyWyxuUHs6W05genpESUY+Yl86c3leTSF+PDVnSnN+Ii9UVlZ8MG5UUTdCdzk1fWZRPlREIkF3PUFoflQzTjQlTTZDI2BxYHFOPiZdVHRwcThVKTQoI3ck''@;'; put 'put ''Yyk6bnFDbytjUjFwSkE+aCVxKTM1bFdSa146dCFFX1RXOlVPZz9eaGRhUmoid2EqJm5NNytULG5GI0NybClAKSE3WSg1RGdjZmJJYEZSXkAjPV9SS1E3P0pYbF1RWDx3UiYrZ2V2cGMqbDN+aXs/KDgpV1pxR1N7fHQ/P2w+JTxkXSMzNV0kbVQmMHQwP2lvfnohdENdX0Z5OX48bFh2YHdgdVsj''@;'; put 'put ''SyJWRFNXRGoqW11iWi9lTEtkIys9WllLKV5LfHhYfGhuVzhCP2U9cE5nSEMyTTpJSTsrfGh1UEZLRGtzOW1oVH5ZOXxldTM0cjo1UC5FW1lhLz52N11XfFtOeDlLaWd0PiMyZz5KIXVabVZMalV8eDA2K056Yk51UlRxXyMhbmVacD0jbCJ7K2loNlgxdkptTWlLd1pGKT4ySSxfWTNwe1c/SEIj''@;'; put 'put ''OzcuO09jKmAoKTEyeWFDaSh5c1FrUTFVUUg2YGhUK2NTWyx5L2pGMiZ9PWk0UU88QEVBe0Bvfm1MekQ9THpxfmFRJX1jNU5yWmVjRl0hJXNbNGc+UXZUVUFXUzJeRiNvJUtnY1ExUVVjen1XXTtDeyxRfUM8VHZgNEx0eTtrPEUxJCw2ZGhscTdtUXgmOFUvTCw5IztKXixERGhOb2M6XWBEXk9A''@;'; put 'put ''M1gwSG1yWmtFME00R3c1RHxoNWF3I0FrW1lGSFtbJXJxb0h8RVFAMFp3flAmViwyKlFVTEpBajd4anZuPl91W2xwV2xsU2lmYi9vVkhMZSU+NiFEOXNLLEVTKCFIJHxHNGowMUY9dFVONF9ka0d+UCViNm9ENVpjR3hbI1RqYGNCP2o2SWNYKFt8SGFRe3BGTShLM2JFUm8lc2w6ZU0sWm5zLD97''@;'; put 'put ''R19acCVhMSpTfkxvSjwyIVlreSt4NkVhaHBYaSkvW3tnZWxgSzZAV2cjSko3ZU92ckgyYWI1KyMuLGBhWUlXSi5TY1JWbVpybl9wTD5FZWAqKmxIVCo1SSFCZWJGLEYuW2BjPF9FSC9uKWhETzxncSRnWiN2MS5QcnRUPUxRKDhESn1nL1J9YXZmOSMiL2ladmdWVi5bbEBZIl5MKTJ2XkwlLmFw''@;'; put 'put ''NE5zb08xLyJlRFFKYUQ0aFh0ajMiSU1STXRDc2MjSkYrTWhYViswdmR2UlVYQFgvaHhzSGVwfiw3MyJOOCFrUkhjZD8kYCF7M2w1dVdhW3YhS3d+ZyUjaC9ISiovJVdmcnxrRElEY3wuJmoqLk08UHpUNnRJTkx2WjtDQkVVd3dGOHwxdypie0VneVBbSEJqI0M2Iy5bOTN1ZnNzTVI+UWxrQ3RB''@;'; put 'put ''Nkx6V10qRGpqeXlaUlZwVlJBKEBXOz0vJURMbCJTYX58TXx1IWlYOGZXS1MhM1szVjxpMH5oYlopelUsaVJSOChzWStFRVJ+I3IzRllBRVFfaFdzXm1lREFnalJAcmxWUUswbnxLRVU6PixzTjdCYFRjM3ZoZ2FWMFQ1JVY8ailSMlcsRV9VbSoiZzJVc0d4X1BaSWd1cnEmJXkxKkNicHxyNTxS''@;'; put 'put ''MyR2UnZCP2IoIUpCP3YkNU9aWXZDam1vLnh6cDNwZlZ8eloyLk13PnxVbipPKHAxYFdGbD56MGZqKSxuZGhzZ0g8OTs3MkZ7K1klUzpiSjIzaTt6eHJHWiRlUjE2MSk9QTF5IypzO1MzOEk4bHh0WT92KGBnLFE+dF4yanFtWyRxdTV5YDZ+ZktzKj8rdXBKYmk5WHNxQHp8Ml4ibEoxe19gUTBh''@;'; put 'put ''ejRtbjN8QmVad10lUiRlcSNfQlErb1BmeDFNJS5ZezBlLERjPnBdR19lfVBuelJ2bWNBOTwheys7MUhyVlRRbD9QYiROTGcuV0EuPElZVUVveU5IR3dfWkElbyosZmZeOUZMbXRgNEp2NyFsIyhOb1tQV01jZG9dX2lfYmw8TmNvODV0NiNZVzY9Vjs6O0FiQDszbi4vTHkzS08ySkJTSyoqWEpx''@;'; put 'put ''Mzs8QyMrdi9uNVlxNlEyKj5HI0RGS2Y7JTpkKFtLJVUiYXthRTY/Zn1JYkZaVnYjfX4sMjgkWkRmUCZCbTNkRURNPUJJdTJnd3pvWkRaWUxpRG9YelQ7IWRXcUp9X2MrJU9AXXpRXyFRKTVCRHFoTWorZyIxTWBIVTQzKWw8aTRIaFtfb0NpbHJ7e1grWFlQZ19qI1sueU9xO15leEx3cS5fYzIs''@;'; put 'put ''NX12VytvVVlEYXlLfDgqYC9HMyhnQG9FezJOZWZlWWN5Tn14YnQ3Qls0Smx8WWNYSClCLzAoayR9aEQ2bGxRYExZbCE6RUBRKWQ1dzAqVU52WCVZQ1Y+Nks3NXV8Q0lZL2t+RSEvPH1ASUM9LHBkQ1QoMXpRQjJTTkJjKXkhYmgmUzd2LzozOyNDQWhIU0xnWTllMHA1T0N+NS8ib2FDMykqY20p''@;'; put 'put ''LyIlfEZQUDtjS3IjL0Z4bFVsLnYqMDB5aCojRSJ1fmVaXTRnIzdlTng1PHpFW3NKPEBaKHloNzAiZUtCRjc9Uj89fTVyWDouSlp1NyFrbHVodXpNY1csQEJiMl1XaFFwVVU6ejN0UikwQUIsS1FdTDZDfjlNZDZ2IWpbISF3TDZvMiM5ayp6KSU8TiZAdEoxdDpjKEg/NnpsUl9WYU5QYk0iQmZv''@;'; put 'put ''dFk5fW1EcUUuM1BIT258WHZwYihELlZObil4bWBNbHdpZyRSZWFVY1B3U0JaKTdZNS9rQ3x6Lzt9eUdCIkVDYndWdTlRWn07MndebyNlPVQ7YmhrdFM5XzRLfGBSNV0pMEdjLCF8NjBITWxjV24uYT5edVlAWlQ8ZVNzKk1zdmRlKloxKFtkQD1RUFh2YX50I0VMQEZeMWlsQ1h5USpqWiY6M2Vg''@;'; put 'put ''WFFjX1tDciYxIjpCd2kjSEc3YTtUN25VQEgiUDBofXg2OiZXcE83LklaalI0NTJxRHBeYCQ4I0peY3ombCZJcnRPdFI1VD0hdDlJcjozKDpuSn1EVGsrU3Y4M0lsWEB1aCJtLDIhbUJnY0BoWUYoUXxQXyZEQHsjOlplbzFTIURZcWIkOCF9LzFHYi5IPlZLJF45MnAiaDlhLiZsaG9fQy4xN097''@;'; put 'put ''eHhxLyVaUHc4emd5Y2owRXpBQmQ1WHNwKjQqfXEkV0BuSWdIRH43dkd+RD1mWTh8MWo/dm5BeHxZSVJzWyptSkFkRFh4WjIjczdwNFgib3U8dCVvZEpQSlAuX11beEtHaENFazNbbiYvNGt2VkUjYnBgJm9nL0hrQHBaTnwrRWchaUkjbTVseTx5U1VfZmduaFdgV0VHbmc3e1JGOiI1Nil3Z1Ip''@;'; put 'put ''JkVFVTpDb2gsTX0oQyYjbXl+JkIoaHZwRnBNST5eTnBxTE5qMlMhNE1KbUooajU6YH5lWzpdLExfanJoJU9SSTFJRzIxZGs1eUhYeCYyVURtM2JiOzZ7WUB6WVp8L0J9PTRVZiZFSypFI3loYiF5ejpgJm1wLC5aTHEwJjVzQFZePj44ISpGczU9fV91Y3I6NyNXM1pKcHNed1k/eF8+LmA+Z3hy''@;'; put 'put ''M2NOVV5XNUVRZj52VFJVNk5gJSYmMW9qPmc2X1prUGl4U2dJIWZoOSM1SV9DMytgb19lbGdpIzQwJjkhJmQ5Nng2VXV4VWxlJXtDTVdUMkR+Q0JPdTlqKSkyQ0s/ME45ViV1bmh0Vi4vJTE5L2JlJGI4dTBMRl4wPnpsKlVVRWRHPTN8WWtAUiswRWAodD9WZ1c+JDMwdF4mQHs6WF5oVlAmKElT''@;'; put 'put ''Jk5NRzZ5QzR9L09vWzFFJHM0T09SIzRnekFrSCpmUT1dMH1eVVNhSFNpLjFWbnJ1P1N6OUx7S3cxalthbkBqYFsxaT4xNnY5eCs/YTw0dkssKDFDVS8lIjRnTCJkPlRCcD5jSEdMPGY9Zj4scmRmQ3FDIUpsUUxEYlplQT5PalJ1Zj1WSUh2VDZqdmUpdnQ7Rn0sIWtxLHJ0VDljRy9hUmNZTz1G''@;'; put 'put ''YVlOdkxvJW90akEvSCFHdkVoNTJiP1BBRy9YP1QxayNifjxTZ3NeNXZoKi9HX3YyUDd8P0xUQEVfMVA2X003P1tUZUJ8cmZdY2NNOT1Dcz9hZl19SkJsZm1tL21rNGBIZ3M9U3U0IWd5QCRVSDEmY08mW31tNmd5WEgpP0RPWXE8KDM8WyRtRFFgUkp+UF5zbSRdS0FCa1MqLmQ7YjN6SDk2d2Yy''@;'; put 'put ''SXJGRmpHNj5fNVJUJCpae2I5LiZzMGpTUypqJT5UJEJ4YVpaKk00a29HI3IoaClQYEdjfFE9QDZHXnZmY2U7a2l7I3xwV3V+MGpdcnI7KWhiZiUoaWRlekZ7dVQmS097X0NWKFRjKWZ4TGNYVXFSY2ssUiImTjF7dWtTVDlzMkpNK2hbPko1Ki84P3hYTFhxeilrbkJeaT54VE4sV1VQbVpeMGB5''@;'; put 'put ''XSlMUGsoJEFifHRzVF5KNk5INFt0NCF7fjV1dzc1In5sZzlgamZ0bUlGQi47KCFBRCohVSJscVc3cWckRWRdVE9wQTxOfUo2T0s4fFBhVzlfcjM+JCNtUCVbeUgmUkI+QGM/d2A5a3BIKjtRdjskQUdDcU5MNGFBd1gkfl1DL1U4VltqdGlAS15jc3l8fCFTS3Q9Xzk2MXNhKls/PCxuVys2aTdd''@;'; put 'put ''Kl1fUzJWe2xzZj02Mk0ieDNaTDFWSHFXbU1QKVV6aXhGaklYd0x1e1txY29uWEwkVUR0ZTlua1FSSiNwQz46OGhsSjRXfkF1XyhDKWtHVn4rTFE8PHAuaUM+ZzptYEpydkw6YDxaIiFtbTtnIlZxeVEwUixCRz4lTyhkPnY6bGR1TEMsKyhBNG1EOGNUPi9nNGpubU9BcXJLLDo1UG1+QGtTZXtO''@;'; put 'put ''c3VkLlhwd0JVMFh5Y3dyPVgmL0xWUXt2IThVOnIxXURYbH1fTys6KTxySzdReWUxcF9RPiVWPXgofUgpVjhvRnYodlA8MmFZIywmQ198Z3Q2UThQPiRrZmxJO1RTTDlifXg0LDRBLiNbWX5mLHZPJCZ0RDpVbkcoYVc/X2U0SFkuRTx0X1UwfmR2XU4rN01PNXl4fFEhOHdzfnUlPjpMblNFZzBC''@;'; put 'put ''WlkwOSozIzA9bW0uM3ZAaVg5KWd2UlJ+am9OU2UkSyVCSEJUY1ZYVm4uYnN8UzNpR1k2LDI/L2RhL1IrZFRVelY1ZHhhKDZVJFNkSGZEVGZZeCUzQCJoY08oeUxgO3lQPWVDVmFjaCQjaj1kYzpNNmVjPXJpZVM5MThOWTxRdix2Z11ddkM6KkhCTU1oX2lIWG9bKld9R352fmh4dko2XTdXREV9''@;'; put 'put ''SV8hUGg6eStsZixOfXdoVU5fK0NTYklvXWAjITljX1doKztxdSN1eG9lQys4bWhNfVAiKUheW14/Yl5sSDVqNz1kcXF6QHVXOjp6alhwWzBORXYiSyhyJCNUMVk0cyt7IUR+ekpfJUZbN3wzTHJAZGg+RCpLOEchUVFOVm8vLkxrNDIjRUtgKHQqWG8jKiVMKyZZZjNGPCs3JkpfT05MfDwwNEd5''@;'; put 'put ''UTxbcUgqSWBWOF9sP1d6XjBTME11cGU5fnkiOWVBJX5WbHhGRXYyOT9UMng0PD9kP0dvJTBaQD1MS0dqPEYsTloxbXxUUCksOWY2dE1AJCRgeCpyOC4ofUNfQ0M0a1U/JnZlOjs1KUk0PXE0cEJGIXI7T3Q1WEVyRSl6MUp7R0h6Jjc/U0FsTWZZYTVQNSlWb1dXTSQmViF3IlgxXnE5WVVySjo1''@;'; put 'put ''JD86RVhJKEJYLnFmeWZzMztOMj40fF5ENUNsYWFSPFpQVlIyY28wYjJOUyh8ZEF3QnU7W2c0W0xhMlZgKChsSUFNNHdQMU1JfnVIaEpFeTh4QjNpe1pCYFp5THxPKzlhR1loK21Aakg9MFcqI3BKR0ErQUMkUnQ4bTpHdWclQ2omTGc2RmJiSHN2MkUjSEZMM0VUTzdoXnNgIioubm59WUM7Vzkr''@;'; put 'put ''bmg7JkR9diluc1lQK111KGZgLzldUWhbOypLOlBqMWdwJDNqQnkoMkxxTFNTSjNyK116UWZ0dHZDaTJpSkwjfnRuaSxEJFZmfEdhfF9nKV9PLFVUfFldNkl7d3R9LitpIzZCRVRCVE46KCxhZkpjSXIseC5yeWtfeX5feTg7Yy86O1BMWil3QUZmW0VfNys3YUVyWVlCSCNpcl4+O3wzRTY6Nk5F''@;'; put 'put ''KyxqUXdhTyROWmEsKysyYEZiKi88TSJuUkA/Z1Z1P2tbOGtAPn5RJkAkNj1YZHYlPDg3dCErOzA/Yz56Tm4xeVI6YltEJTlORis/eUAwO09yemYhK2Fid0owNHJnZ2lnJW9wVWl1UmZIaEc9Zl43SyM/Snx0XlNpfTx4N3FkMCR9Ny9TO1Y7LkpkWG5uOD1Dfl57MHZAd1h9KUtiRlR6ayQkfVgo''@;'; put 'put ''IztncThtIVk7YU1KKzt1fjxUaDFQIiM+eih2ezo/fD9ISFNtTH0qLm4iemhrP1hKVThXbHw/QysxXzFaVUQxamx7IWlgNkVBejVZXmJpV2NsQkM6bmclKnR2JSZlRiM9KlFNezBPXXt7JjJDOExjRzkhbzNnYnJiSEN7W0IxQFBZWy5JYz1zS2dMOkI8dVohRl5+V0A5c3JgXWczYj52dSk0VTpe''@;'; put 'put ''KypoW0ddKSg1ZV1pIjUmKFdZaiNiYClxOH5wWWM2eXhmZlk6YkdfL15kKlt4Yjs3MnAyTDxyfGFuJUAjdX1kWVImbmchN1I5SFs4RGpVL0grcll4cFpjamQ1UFdFZVY3Xz1qZ29YV1tHRGd3T1NXYkVPZ25hfjN0d2s3KU1AbTdMMjdhfklNMzZ9b0pbRl4iSFp7KXNMXjE7cT9NLnpkeClfKFtJ''@;'; put 'put ''WVczRE1aMV4jIz9aPVVSSlVbIX5BUDE0eCMzamI8fWIjZzc3U31WP1B5MV5JPSksZG5qe3VXbSkoRyk8LjA2JCRNPjAuTnkoMyJtPVdpUCxITTR3diYwe2RPblI4JkFaMW1HdTlZOWtxOiFAXko5TlZPYDhyPDo5I24wcjFdRTM2ZG88bzRwcmAqcmJDZHtHYUpPLjtMe0ZxZWQyLmNFZCZ+O1tj''@;'; put 'put ''ekx2RUEyW2hnKnkwOix8SG0+XXxheyU2MXZbaCpFNkp9P2lIaXFHT3ZBWD5jdmM3Z3ZbPkcmaC5vS0tdMmZdJTVFdXkkWj14VVZFcE9lZUU6IjdiOTBKZGpfcz9oSXgqVn1eKG52VyllYER3IkN5QlFZIzV3WSUxJjwxOjR9QTVOT3F8VENyWEpUYlBxIk95NVAqIztEOyRFbiIzc35gZHpEbyUp''@;'; put 'put ''JT45YlAsM21kRGx0VmRgUXFPcjNOMzAuaSVeWCs2NWUjWHEzdS9eY1B6YTxmVChhUzwxdjFDcSx1PGphKzlkWkQ9ZF9tRVpIfGBIRmBvbzlCc2Z0bDsjYkMiOkIzcUlrdyR6TF1POEslWmZ6WndeI1dKT35ZTTUxJm9MdHNXI3c6UV9aKl8qK0MlTVtwOFNERnBfQU9FcEk5QipBQnw+YTNWJlsv''@;'; put 'put ''JHRYO3xMKkxCeDZhUyUsdF52R10/eDJDdypPVyt9RTU+RmA5InZDK18qKn0ydzteWl91WzpmY3tiUSVSaH5QRmQxYE1HO0M3OjQrM3NVNmVtWyg+THxSdlJYfU81SmZbSCRTbWpfX25ve2spN3x3Z1BsWjhTXm1DUy9JUHxhd2xiKyhzTGdiUT5JLDZ+MjJtKTZQOS95U1FZayNYfHJATU5PYCw/''@;'; put 'put ''RWRFK0hPPHJHaVEmO2x2cGY4K30rQyp5MCF0aEZFKTQlUU1mREcrQD4sLGppZngrV2pMZ29sTFJ0ZEFAWGg0MUNjR0xYQGF9eEtQOTljYDptPTVuWyZrTzJXNS4wXXkkVVpqeFRkayNdKF1wUz9LMXxxUktIKD1LI2dPN0VUOXMrWFdubkdkMTlsdzw8aSZUcGImJHJSSyowalNxdTpFRFt9PCtv''@;'; put 'put ''X002MTRJSyFPS0VNaUs+LyZaWGJ3bGN3LixtZmJHe2sxb0x4ImF7KFg2XzNZTTViPj0vQStPeTkwcFZSbXcvKEhjX1sqWjkoYXx2RHc8eT91T2B2IitvKiRPJUYoVkpbZyhvLmBqeHc1OHl3alE0Om1CdyJuJHBJZVomVn5Be0daSHxqWWxBKmFpTU92NWFIP3Vfb1ZrMT5MXT83QFp4LkdFP3Jl''@;'; put 'put ''b25FZCFWfG1nZGpzeVQwNX1dZ3xjNHd2MSRvLFs3ZUljRyJeVkhZWlNlSHo2TjM6dndzTnw0RTN0WiNgbl1DNTBXdUdxUHRuKGVlUVlpNWBGNExbNC50YH59enlANEl6LzU0P1dxeW87PW5lWG5oWyFTJCo6bGpmbUAwbHNPMldXcGFMTl4vUE0rZU0sUyl6TFRPMEpkSytGMVlgLEdmMyJSTlc3''@;'; put 'put ''WGt8JTNjLlMkRDNtTSk2X1RDZWNKTEBWVEN0eCRsSEBXdTJYQCV4SCxbc19dPm9sIlVgKHdZZjRiLigkKSIqejB1QEt1YHJ0RE1qb20oRE1EfSp0TU0xZnVaNDE8YiEoWzg8VzwoaSlsa2BXL21vdHJAZyJUPj1DUylTXktlIXJPZTwufmYpdnUleWROMUk4bWZWNW5FP0dZTDtSanYmeDgzJEdU''@;'; put 'put ''bjBCTn5IUj9pfjVXb1NrOj90TFNne1RKPTZxZCU2Iy8qbzpNVGF3ZlQrNig9dUhsN3hudy4+MlRWaXJpfWx5aFQ3RzNYZlhaVG5wVntVSCxYamAqKXQ+OiV4XXY6elVKRzphbnZqIngsW1VTVyUqJXtGWExmelcvJDtzQncuU2ZPd3k4T3l4L1JONGFOWTRBPClzYnl4TVR2emojL3tERVpnMXR6''@;'; put 'put ''RD1qWF4pUUl8JllrXlpUYSV9NiJXdlRyWUt4IzZjNDk2Tjd0bllGZUpNZnBUJUEpNTQ/d0Ivdlg/dGpeM3wsdXwqeWNYc0hJUkBsOFlFaC5iY1JiM1R8e0ZjalI9dDlUOyZQNDkwej1PTipTfl9FdjQwOy9Ob2syaClTPUBMUj58fD4pR1IoVlhdczhzX0IuZE5gdWVSd2hmQGR4cX5XfDolJWhO''@;'; put 'put ''YzxhdXImUXl+Mi96XT8+fVtrfm1eaE5kfmwuSW15VWwxenc0SjQ/cCZRNyopR18lelB2P0VXJEFpS0Q9ZCFVflVQTjdsJndxVF0rLHJbPiljXlBYWm8zYFkmWiQ9Vnh9WF8kSDVRQlE2WC5mNCQuaGZiayY3bE9LMHBMJihXZC9aITYmKG9bIzNuRWBqYVlPbnY6QnJmanV1YW1mRHtCW150c2sh''@;'; put 'put ''NCZjYUxWaVAlKj8zIy5hNTliYUdsJVMsd1ckQj5gSWRlb31aPjtfPnZZQHg0X28hN1AlNnxmczBmNCFValZDU1Vofj9UKXwqYXQiIWg5SF8qU1FdbSxOVXtQcD9KI30xZHJPLiFmR0FUcip9fk4uL3NrYjErb31QSmZDODZDRC8oREgpT1Y0Wls4ZiUkR15eaTZLek8rJmtQO0NWMGF8eWhjW0Q2''@;'; put 'put ''PU1veHJdWl5+PzIraHEqbmV1N1E5cnBkdVhkOWN0Q1FtOT97KmFxajViJFlXWl5oWj10ZitRSShhZztOaXlsYltaL1d9bncqeUJ3eD95N25MT0BlZGtuRW97YyZAVkVFbjhMK0cjWj15VWxhRFV1KUJ8NlVmY10sXUNZb1Z0WitQKF82JGhidTMsTW9ULz9KTixEXz1CdF1oKG0qSiFfcGlpY0Vr''@;'; put 'put ''a3lSeVVjKkpUSylwcXQ4UzBaMWtaKXVKRi98QFR0bExSbSFEZztxZUg6Mi9CW1V5aFU8JlUkMmY/PV1xWk0qYFJge25Ma3Q6b3w/elRfSSRALDdFQDU1OWh4a2NeUn5qOyxJO1pfXiV0KEVXL3RtWG9INFJRSGY+Y35IdDtwPXp9JkJQfSYpWXlEXkcpJWhgUHdsbVo0b2tfMXMrTjdLJEZhaURn''@;'; put 'put ''K3FyXSY2JilbKlVndUxYL1F3di8vZWhGRGVkSXJUTFhLcSopJDVuZCJvZFQrV3xsejkiOUN5ZmJ6dHBPMHQzV1c2P1BiK3xNVVk7Wls+by4xQ3NjRipvNzxESzYsYCZ3aCVvMSpyKGRpVV1HKT4xeVVtS01aZT52XjVgUEZSaUY1KT5MekVbTF5uJjpaZHhbWHtde0pbeVBRX1Q+eFhKP15KLn1T''@;'; put 'put ''I1ZLSUhnIUtrTihObD14ajliSVhxVy5EbnJoWiQkQGtJZHFOQFVmVm5pcXBORUMwL1cqdVhQU15Ldl5VLDBtMlt5VWArdUcrRyg8PEBPaTROL1g9MU9vYSJMO2V1dWV+fn1rSkUybjNuNzRYYT9wMntbWj5Ja2pLImNtUlNtMGAuWFNzbVElVSNqNTMmIXRAdCs/Kn0rdm1CU2BBRi8iQVkxcmRf''@;'; put 'put ''bWZ5fWg3cD95Xn5TLDJaJU1lLykraGNJUWw1b21AYlt1NXJKNWl4Y2ZBejFZV2pHYiNnOz5jUT1RPC8mRnUvVW1ESkEwNWsqa0AjZ20waH5IT0pjajJPZUlrYXAsKkpTPyk/eSlSYy4qOyRsSXhkUXp9LlsscSNHISxHfEV9TjZsNiszQlNpXzBaSGNDU2k/WGNsJSE6dzZhbGNpIiR4WlhCLiYp''@;'; put 'put ''L2FAWS5WPV9GOD00RWlTRnZUNEREPSQ0YFouKExXQTxKR2xEQC4vd2xCPnguWVI0Uj1QI2NVYixwJlQoS0c0ck9deTRVQVghIj88JWR+Ljl5RmUpbXE9RUN4aHo7eSV8bz9hMnhDMihnXlc8eG86cXcwUH1tPnBOIkBFbzRtImtzfl9lJiNLcjFJWU0pNEc0aGMzNCVvZ3QvaH1XdmdfNSpzOkAl''@;'; put 'put ''d3kmMlc5O2dBYSxHeEIqU2lrWGo8a0RgSWV4Lk9KMSM5IVNsIW9kanJDXWYoSWh6fnM0b3ZaR3gxKndYbnM9KCtnUmR6X1c9dmUoKG9kRTUuJjA6JnRLTS5la1FNJm1qNFd9M2s5OEtjdXp+PU07QmFEJTBXPjN1Wzp9ZFJXZXRkJXZ3R09Me01VV3FjKVh+e3ZjdlQhJkp2QjhnWnEvQGtDZUx4''@;'; put 'put ''OjFRPjlvdHFzOiJmU0wjeVZhMzl2dyZ0Oyt7fGBxITtUaUJpcCV5cGFSMX5lTVpHWF50TF9nQ201NEcqXldGbT9ePkksVH4vSngybHBqU3kwQnM0UCwzRl1KMDB7R2dtYUMlWFVDSmpCITl5USFIdE5EWjkoY0oyOktxdUJhbk4haiFNK2Qva25YQnlSb2BKfD59VHJaeTVpYGJJU2gxPzlFI1U6''@;'; put 'put ''bVdXXUppdTl6WUllUzMkdzRNNip5RihdVDB5QyMiJFU/c1g8S2xMeHxeO3FdczRWIWN9T2R0X0glKks/Lj11Jk9YUVowdU4sUHdFVnQsaXorLm42YEt6TDtrWklYe2pkYWg3NiFpSGAjX1o5XSF4Z3ZWOkRlaTFhKWR3Sz5FPSZFYUtENTNgb2pNI31BQF1UL2ZJTllOYG5dRU0ubT5VanRXUThO''@;'; put 'put ''R35KMkYjNGsmZkdFfT5weX1obV12S0ZWWyRiM3lvZHd5NDMkPGhpY24wIzRQd0VEe0FjKVcuMERjMXVdSkZrVDpuWT8ua0hIRkFrei53S2wxLnlLWFBvenUzK3Ywd0NiUyFfQVJKTGtEeiN4Q2lXNXZQPUciOGtCQF1jYn1SOkJ0P3lmUmdaSXRMMnxTWCxYWkQuLD5eJT9wbXF9ZUhwIVpSLzI5''@;'; put 'put ''Y15qX2U0fGR0M1Noc3drQkUrPGove1tZKEZwVEJqa3RHZGkoJjRBPyZpfj5vNk1MNU1mOC5sN1I9O2Q5JE4lJFc1WjJTPWdLMW8vbC9NPHN9ZUdFbG9oJCpgUC4kSjFqUnszOkx2PmBmdFcjKGJRbT0+Jmo4dDYjbD4ydz5dKihhRHBbSzRvU2tjYkEsdkAyKyYyVypKViM6JTYwNyMuT2Y6Qk9v''@;'; put 'put ''diJLMn5YTDAuSiVlW0U+ZTZKLkk+bCtgMGt2LmpjU0IwbDY3UmFgQU1jKkJSXzVJdiFbMEtraXRGRG0veC9pd0FqKEZzNERXUlUlJG4+b2N8RixlU0Y7dyoxQ0pBIiZrNjlddWBlOmEmMEVCXyo9YFFQU24kZnlmfEp6XVhSVHZtVV1KaCUhLm9UP0x4LmQ1IWRrRF5aX2FFQWQxMVdJQj40JVt0''@;'; put 'put ''azFjKHtfcSJKJVN1clUmW01jSlksPkxsTWBfazldKVtLfD4lOXp+Pj9KVyxucmtXbmY3fT9EeCUkOk8jUUxRVHZSSSE1ViF9cUpMZjpbNF1gdnA/bi4kWiJKI2dROiM7OSU+YH0xL05zVSVQY15Ab0I0fFBHKkZLeyg6VFFTb3ZdWEAudHFMY1FWa0s1bnlXcUhYVjpxUEpyWXl9YTF+I2ldSF4p''@;'; put 'put ''aEw2SVh4K0c3bipCSy4lay9eY09Qa0orM0BwWX5NfiJ3JWZpZzErMyw+bytITCNvIz5KblhaXXhzd1J9PDNNTWQsNzdmQiVAaEoibUReNTEibDROSE8sKllRVmpiXlpNTT4mNEIrOTM1PShXXV48PXo6eW8+IztPQXNfOkQpcDFUX0hRTVJXIjR8LmJQLGZmYy5SfVkydnRlKGtOPG1VM2syRV8y''@;'; put 'put ''YjNoQmVodmtTbjdNKlVZcj46UlVmJHM9bUJKM252KEUpeHshMGBAS21iUiFLVixEZ3tTL29IbzJqVEdvZCNbWGswck9mZzgkKCtzRzR0WVR1K3B2MjdWPjNNRHJyQlk5dE1GOVEmJGBJfTE7OjdYNmQ0OG90PFJ9MmV7LCJuJUA4Sl9YeSVqOHM6TGwrVUR7IyxVWlsreEl6Slo6Wnc0cDwpeU56''@;'; put 'put ''eyNMU1BaSCZjfEVdQip6ZW1jVTsoOj5hKVQkV3xsLnF7ISI3dU0qKHdweztNOyFweCtMZjheXnE7RWdRTClkJGgpcyZHKWAyVU9+I1dLYG1qR28mclRONkN5cHAmOyhieUNyXT43czc6dj1Ab2xSMC4sZn51ITh+Rm4uPF9bZXhUc3siWjQrL2BYJXo0UE8mVnVTZU1nJXNjL3wiIUdmZVhJU0d5''@;'; put 'put ''e1ZEdFVUUkEhU3Z+YTNkMWtfL1Q9cjF5ZlU8KVRCdF1WfCh6On5wbFNgI3A0d0pWeC5wSzJKNFZNZj44ajkjZEh8OSk7Xlg+WFE2clJ8Q3p9Q0o4dHksdCw9MExyNGYrYTdCUEVSRTwiU3BKb0pJeFo6WzZMMkBuRDViaExZU3VdO2M8R11wW2I2PHR0ZX19dWhWYiZuYCkwO2pYZm4+QDpAUWVo''@;'; put 'put ''TSxxZUJxKlV1JGNgNEgxRDh8ITpXLjNmRjl1K1Msdz0wPihuT0c1Ulp9dWleNHhnVk9hSk1DJSx3RFNIVEIqMG4jYDxBMSMpeGE8cVtedzxIKGI0Um1JelZvbzN9SGAjPHJZdkFHI1V7Um9sZFU5Xil8aXgqRSNUL0xgSTZ6MmdWd2ZgN18yZWJ7YCsiU2FGTz1oTT1YbWQoS1NzVSpaNTBENmhY''@;'; put 'put ''fj9hbnVOS3c8dFhveWlEJiVdUSNeQmZwd0YwYFQ0aGpgSWtSJj8kVTgreU9ue3cyO3A6MykuUV9WP0lfczJBTGM3VX4pSyg8RyVAWFAuRD80e0tVWSZpdTdkYjYyTW1abHRpVFZpdj0pWHFqX2xSR0ppNihFOVo6cjosdyk8NjNwbD1ucUQ/NzRFRDJbdWR1ajtgb2VQR2QxTyo+bCp1KD1iT3Fe''@;'; put 'put ''eTt+LEU2eEUuPyRPWW9TWFtadEZkJWElRG1UTT9uX3hgOWIjLm9VIWx2TXQrUSVKVGJXNjp2P3x8VyNNTC9xP3V0eWd8YlFLYEpdNSFCKjVqKXpjWnxTMVVbKF9bS0R3cyhQd1lHRH0/dWQpYDR0Xkt2dTwzRFAkZk9hRWJ7N3JjSE0oJWE5azpjLGhsWXsrYmR5bl5KfUdlKzQlXVdVSFdAMyxR''@;'; put 'put ''RUhYI0YzPyRNbGRPfSNXM3FhNlckd0ZOTUZXMDRTMlZCIlM4QGgxO01MMSg/ISwqKFJBLDtHOnlNfiZeYWh2PCZoLnU8T0tGYVpZQUVpOV9pUUkyUnxGYjw2PkpuPE92Z1VVYUhddlI2YHlgdWpPdlslQFA0YEthe1J6eXQ/LzooaDI6emU3UVp2KWd3N0dXc25lKDd1Ki9jajZvUWguQnFVSTU0''@;'; put 'put ''KSgmRSliRmpXOHkwKF0+SC48UE40QWYoMyp7dktkOGN7e1UzfDJwWnBXS1kvYHxQdVg1aCJmfCkqQ2BJdSVMSSZbYyhYLEg7QjsyeGw5c3ojbklEaik4N35GbCEmTUpDNUxNY0dBSGo2dEglOEokeVZ6a35mNExHPko2JHAsL05DaGhufUs+RTJNZ1k4bjFSXz1ILmBOaVlmKUtHbXhITi9dTV5O''@;'; put 'put ''bXxUcXR0Uk5wamJ1PzxWdDczTWB2RXl2ekB0T206SDcrQUUjS3ljWG5iIzNUKCZDQj5bP2cwQWJkXz1dfl0lRU9bcTdBTzd+d3FweGxacmZEbXRXW110TCs+RWIjbypoZlVkWnI9TClYb3JLRXlURW1TKktRdlg5fXZBJjpJfWdCM0ApcEZaZzJdcVFxW1AjbmIhfE4/WXtVe2poMypLPTM1YEgz''@;'; put 'put ''MHVUUWpiPiQ+fXRAMmhQPTl8c0UxeilkQF5bY0ZuIyhJUmN2Zk1ge3trPCEoay5ESHZyeTwjX1RXNjs3VEMkcDRDT198TSM8NGtCSD5DODFvaG1kIzQmWkVPZyNLaj9hUnwxb3QlamRvSXhpXnlkUiV0JGdsSzAkVDZTUV5YMjJxOSk5Lj1MU3ppRkFrKVpuNVckVHxDXk5OJXV+IVljNkV2QEI2''@;'; put 'put ''SitIbXcpUkwmLlA0V1V0Jj4uJDI7Wmdkb2o1dEJKRjZFXTM0TW5JVX0pOzNOTH0qLjpXRXF7dH43RmJ7MSp6cSkhWkkxL2RZc3BSfm85Znl9LFAiJiJtNn02UzFfQmJfIVRHUEBlQW4jKHkmSUNNJWRJZiRNa1A3e3xXMlMuTSwkQnJOOnQ+JGdyJVl+VUBQNCJRMyxvLldbKzZqZlEobk9tWEFU''@;'; put 'put ''IlAzY0taOClVbn1KeEJrZVkpTEUhdzZMYncyMVklWXRzTiRbQWY4WzZhcFNELjFpaSo6SFdwdXIjKWt4WF5mISluY1p7O1VQJGFGPTI/PX1wQGk2VUs2fTkvITMlcGAlInc3UTtXLjx6MV9paUZBPmlCbmlheHhYPzhBWUJpWzlVSltzOSxTcVA/fEJVcSFUdWd0KSswV3Z1aWY2c3c4aXxieCVD''@;'; put 'put ''fWFCOT9hOyEzJVF6OXlXcXZufV06a2MwMUE5Rj1LSkV9LHRueTdhLDpPbDAhfSNiX2dFTzxUZU9UKWVRPUEjSlNRVEEuPTBzfCZ0VTBLWUlZfFJJLGtjSmpAbDNwTToodVpSR0NUc0FEOnVmV3R9bjM+YWxWYFB5Qyh7TUdYK2VDfl1xSUYrc1J0RWFJRCNFYzxwQjxDPFtQKE55VlI2Q2s0PTwz''@;'; put 'put ''Nm9JZX1yLjosKzxmZSV2ZFlVZ3NgcCZkP2hzP25Rcip+NV4sVUdeKTZlRUIuc3VRYmZXdEtSZSQ2LHwvJjVyZSlQK2guPXk3OUNpL2klPjt8WERlOzpiWWRFRFhrI04+MTpzZ05hd3M/ZGppJUVwRlJ4bEohc3JoP3tAU0thJSxANTRxeT98JldfRXp1a0gkT3t8fWxJeGsieDlhfDcyKSYxY1lN''@;'; put 'put ''MDdrbGQ7ITskZmFCZ1tMIV5+ZGRfWlpWcjYrPy8kPSMqPkhfa1VRIzVQYzshSzo/Rl9kJiopMlJZKCQhZTAsY21bcj81JTR2T0JIaltyQFpYNm9oZFViRH4+cGJMJHR3SzRPUUw4Ty5lYz9UaThSUitPYW5OInltN31Xbi5sJWl+PGcycXJmMlkrOCI5c1FuRjlxfTdUZEljNER2N2dlY3d2OjFm''@;'; put 'put ''YXFZMWg9eyxJQVhNWyJzdipCVVhSL19jNG5DLlk9WElLW0cyOE4vS14qTiNqbDxha0Bvc3FGIk9WcHl2R1Q/KztdWXU1alsuUD93cjkzNmBMMGNdXzUjLHE/QUlnPCI5WWVqRTUoRUVCWCJXY1pYLkdWelJMWFBEQDslLDAhM0RbUmZDdWhmPl1gYSFkY2ZBPl9CdWhTVDc5QGBZNXtvdU02QiYo''@;'; put 'put ''LnhMdz1nc3omfikweHhgOWtPYTU4cFhTO01qM25mKmt5ITxQZzBZKSVdRW44Lz1iKV5FNCI0YVQ/JigzYTZLJCpoPHFWNGQ8XlJBcV9eYDF7JWp5RjI+eHJnIiZyVHIiL0Q0STcvPU5bTndhdjQzbEt2QEZkTjxuLGozeCg1Q2V3OzhnTUhWemtHW0MzPHQrM3h7emZLcCk0QWlpcWAoOHNGdEor''@;'; put 'put ''IWNoZz5KJS5VXml4U2ZVej5tdC9gVVgwdC9ETFg0QCZqfDpgYjlZRm9xWSJnMHdfbSUxLnN+fkkqM1ZfTDJSW0V6Q30jekVnKzZsb29vdFt2ZSxPJDdkMyhHI2M4K2c+W1JmSSViVEU9JGhgUixGRDh+KnZTX2pJUSVHKFVsWGUkN2V1Ql4yXXhEQzsueXdePG94RlhROiolLyt9QCZBOldPdU8j''@;'; put 'put ''dEJiUFZgZj53ZXExLzpVWTUpYnc8L1JXN1pdMzJIaWVgNDV9XmBpbEtyTHNWXyFEeTEpcGJsKFZZYSVSe3J3ciFGN3dTZV50fl53aCROcVomSmYiZS9HWXh1XzNJaS5pXnJYVDFOelUhWX5td096LkQ/NjB2NXUyVCV9KW1LYUw0aCt5dDJNemdqInVrb045YHYifHJSN1RKdUBUXkx6QCxvViFR''@;'; put 'put ''eCU7PFRlOG9MO0RDWFRrIUpUIjlVK0MhRzUpP1MlKHVnQCZ9V2RKKk8uSndfdUxZZEB3aFY3eGJOKWUiaiwsXjlEPywyKjwqTDhaKSZwJDdHY2pGK1B5ezhITHJLPytIR1VuVVZ4XXA7Syk+X3w6JiV2R0BVVGdxJkVZXXFZcjkiSkV8M1szMXBGeFBCW1ZLI31WJil8VHw8dV9MWUtNJSNeUnQ6''@;'; put 'put ''TTB9NSl6KX0/eiNsJVdxc1RrIXF6L3xuKFpGMkhde1d+eVV+eCZofGJ2K0YiP0kmRyRGKkZqQkBRZjV8KTpBRTB3RjlRQTk/altyK2N+RzksIih6NUtKRUoySFJIa0V5LGM3RSR6N2xbVng6Z0Jdcmg2Vk9ae0AxR00mZVt+dHRwP3hWTGc9Tnk1X09YKFFoV3RKR3J2MHx2RSgsJiU6czZ1fmA3''@;'; put 'put ''Z3hgSTg7Z2N3Un5PVnYoSltIdChfNGlSc0heZlhPVmEqTDZJM3E8OzxyUmUvSFg+eComTUNXJnpWRHg4dm0zeT1MOiZxPjxdYHI8e0UoSl93eXEvPDVfUjAhYj98aWpbcGByczMxPlo9STlwKGU5fT1eTmo3PkAxanF6SX0/Y0FqXjMlbm9QdS4lWT88Ujx0NHUyJWVyc3hiPyRLVGVIUVZoZTlq''@;'; put 'put ''ZlRAPWRGWXlxInZ7bUh1JmVzPnkrK2sxbUliI007MFIsQUoocmZ0Q01LWi82TV1tNTJbb1MpMmx4YlA0fmo8Xyt4N20lMkJhQ3s4bjU9QENhYndjUj1ncURHLyhUblQhODZYJG5de0EvPHs1O3JDUFA5OHgzYFI9bVRNfW58KHomODA6WWdGTSpjb3Y2SCpXfVcobz8xcFR0RE5IMjRAWjQyMD5i''@;'; put 'put ''R0hDL3U3XkZ7ImRUdk5MbFJLMGpEMGhjUlJESFZyKlJtWDpsTltZenV2SDZLZjt2XTNiMSg4Jihte25lVTA5MVBIVXldfjpoKkRTRWR6Ijp4RTlnSF9nTlQ3ZlRTTywhY080Wn5pKCxyUndTKTlFJT94UncoX21+eWhacTtISDUoMSFUT3NZQ1h7WD58aVk6Pnh0QVdkT3dnezlkUHtjVyMmbENG''@;'; put 'put ''VlREI0tXWDhaZXklT1p7akdyYiFsL0htUnc8QVV6WXNObkxpbUB3OXNPby9YQXFPQngrKjU0aTYwR3UhRi9OeD9kQ2g0bCNmMFpwezRkc1A0ZlVxOSZyITMsezQ8bU9+VnhzOUE2X3MqaH1CZGJzc09IejR1XlRERkwvaWwkfWNvaEsyOSxiWVNjKjpGRnVTTzUsPFB7Qz44d1M9RWNFUFo6aGVS''@;'; put 'put ''cHUyMyRLY0ZSQUM+KSQvV2wkTW9eIWd+PkZ7WU5melpfYURILjsqK0BubzxLOXlXJDZFMHhxRC5yKjI4TCxsZDxyNUlKKElTYDJ8Y295Nz4hR01sKU1rJUFCJE4wcF1UZlBCTlY+THhLMGltSCVCbFVOcUFbM2xDKHchKVsuQkxlKSIjNDI7NDMhYUcjU194WCF9WklbZi59Tm4oXztqUWRiKkw8''@;'; put 'put ''dEI5XnZ1Ll5kT0xpMk5VTFBudmhXYFhLNVd2VCR5Oy9vIlVtQztaK1JRWGtYdntQSl1bd3BjRmhhaCNmRUxOc3xjW1F3b3hBdUlNI2lqSDxJPyU9WUUlc2oleFRocDZ9RzIkWll0P3cvXVNROmV1aTc8RjRQLHdkNX59YSRYVj8lQHclS2pJOip0Q1lHYHt4dltpPFhxIXUpInpwOSxsdyRqakVk''@;'; put 'put ''MmddUFByL1YrfVlafTJQLGVkTXFoL0VlWSYxYzRzb3pwRX5xQURlcE9DOG06cipLTVkuLEArWVlSeV5ueU9pc15SJlN7bzljQ2w6cmpYRD94e3RsV2B9MFhHOkNgaktHWUYhOG1ONHF9QkovQFg3X01WaUBjcE9ONE89KSo2aTcqIy5NdzxEW1khckMvMC5fU3poWStKVG4xcloiPk9ZbmZ+ZnFt''@;'; put 'put ''WUhBNF9KU1Avfmk2PDkjJHI5clg/UmJ9ellnUklGO3RkJU17cWRLXXU7Q2diQ04sOld0eDtuZHd9REtReTh5dWt8bHZCYig4fVJMTmMpXi99V2tGPHpXOEJ6c1ZbNjpCdH1DIUYzM1ZjY1lFU2gjRTx1IzI6I04rIVZEIn42fXkoZTtaaVBWSmYuWnxGR2xDeldxfThWWkcwW1ozWmBTdCgjWCRq''@;'; put 'put ''VE9rM3UhNnMhQFB+cit+JDl0U1svY3tveUlpS3JCRVkzIjtVU01uTV8mI1ExLlZ+Q25FJndJXTt6OiRLYFYwRkAyWUcmOHRGRGV8TE5NZmVHR1okPjtQNEJQYio5KCMqYTc+YiJYKCRiKUdSeUJQYXpTX0ksdENwezFMQj09NndVMmFAbzs6Nj9mKT1PYHNoZCNlKWV9XSN1VWVhaEZkTSlPeUdL''@;'; put 'put ''Okw4ay9mOTBlPnVdMT1NI0BEazJZcCFBZjpGO1hzQkJkQFBbQn5QZiN9USZEK0B0QkYlV3F3bGRLX3N9YmZVNi5bPH54TXl1KXlubkFNSHc5I3dQaTlvYGV6WFIzaUBKZ2I6Q0RfIldnOk5AeGNKQzpgJSxSL1hYbmxoOUwkeG9LaU5dZzQsbmtJOkBEN0NIbUlVO09nUGIoX3pSRzJUeFBSQFRt''@;'; put 'put ''JkQyWGRqKiR+Sj82Pkt6XnNhbjJBSkU3YzwrYkI7dyRObUFBaXosOXQ/Yy5uOjU7cSV9Xn0ucVIsfk1+Zlt3SitAcEpaaGQ7bGJNU0wvKCZHaW08NFB4L0twbndDbUB3UUd0MlQlLDVyMlJ4KTNObWVwZzh5JWFtQGdZamZuRTU4JDM6Il5LPzcxYVRLSX5JRTVVZDJ4YDMhUHJ3ens2N0JHen0u''@;'; put 'put ''TD45Olg/WmA1amRsLEcmUTk1blZeWWQvWkdbNndMKFV4NGlvIWpqbz82T1JqVjBbZVRBXXpPWTdtaFFqZW4xI09iZWpeZDQpOlNtTjhbOXY4IzRWJkRfSE1MYUMjRWVZKzo2XVV0PEtFeDUxKlQhUUR4MFZ5Kyw1RSpeVVJaRkxyfTBOemdAWW8rWXFJSHh3ej1pRHUkTFU6LkVCdSw1MlhUcGFe''@;'; put 'put ''e3pMdUBseWIzUGV0KUtnc2x4fGNSdDNGQF4kMTp7emV4PyosaSQ1K2RmTEc5RHo+Mnl1eSslSSUmfTw3KS80KkpfJWh5X3xPWyglaE1pN3BdWWw6Z3d2X1ExKFhfJGd5fiJpVVdRKWRCaHkkfVEyYSp6K0UsXlNtXWF0cT09I3U6OiRQXkR+Vn1ETG9mO15FOUhjZit2SWdzTUo0cVR9SVJoPkQz''@;'; put 'put ''U0hVInxzQmVfKW5bP3RKZUIqPk4oXmROW3lISFdqSllsejd4VlRMZHg+fHFPSEklXkRnKzZTZkt7KWUya2lrVzBSR08jflZrN2l5XTF9YD9JdndyUj8wdUIoYnZXY29zQ0VHLyR8dSxAW1c2O0IpRFF+d3YxYzUsUX4oU0VPdH5EfiR6MDF7Rm4zbTJkIWh+V1d6RT8laTBTanFHRGxwWF8lKDxA''@;'; put 'put ''ZytWSkt0a2tUY0UqN058fURGX1NzMTIoO1hjXSgjXWhEJTBKXW5MJWw7Lml0X10xWFordVJPTiZWJTJUZ25yNDV9SnxObyxOX0ZQVjk8e01jWCMvVENPJklSYnoyLnlEMFk9QEwhKmdDS2kxW1hTJFJRP3hLRUgwbFVDXipjIXosPTdCQCZ2ZGxyLztTelREKDN6REZZUUF6OTNydVRbRX4sY0sy''@;'; put 'put ''RVhmNzJ+Uy5OUzBrSDcwU3ZwKi5bQHZXOW0+WT9pZXpGZDlHdGEkQ1FDRyZhOUhWfCN0NXMhUDFZKV9FNV5KX3QvJl5QTChLYTtoYSF0RGEmfWBUbkV4YzxdenR3b2RsdjMqcVl7TURtQW5jOT18cTVqNXRJNVMuNFdBNXVWYzlKZFFwaGBicnc5T25aITQvVjxaanpkPDYwemNTK2RsZEM7Km81''@;'; put 'put ''RUksRy4+YyQ9YjZidTlqSTEkJGZpal9tTCpBUVYjJGd1bUBRcipoXXVNI0xfVzNhYXtdPi5fYyUqP0dNYzBAYU1yOn4wSE0hM3l0cl9KLHVIP2dNczU2V15XblBXV1hrb1l0a051L0xxNX0iVWRfMzJWK3JdJSN5bipfVy9wRjVAQklMXkxIfFYzNnIje1k6fWdDM2FASlIlbitrSmB6KHRFW35z''@;'; put 'put ''ZGsrdE9UcjtIPHB0YCopRlVXVSU9X3ZGXlN1UT1AS1guaX1qbUY7QXUsMmExc19bd2ZVd1FuTHNbRHwmLnFDXVcvUm5nfTo/ZiVoTkhFNm9UO0hsPyo3WW8lMitaeTZxQElSLFolNSxBIUdvaDF+PSpwZl4ufDBDckA3PisiI3deX3EvVXpJfEV2NzgwQDRTX112d2siKSxJKEw9diI7bFhRPD8r''@;'; put 'put ''dXxMcCk/TXNiITJeJWIjJmMxNm9MNCw6cVdhIVgiRiVDfnN2KyVJVVdWIn4hamd+JD8xN2dpRkdHQmF5aTc/JFA1cURfNWNienJ7VztkZDEqekA+JVlfZn4haiQmXX5Mfk9KPjZzZ186dHopZ1cqdU9WND12dGtZI18+UCo3b1l3QCV2YjRkRzVzMzFQbUMsTEw/Y2gwYHxfMSREMjdlTFRdTmhp''@;'; put 'put ''eXpTVzBCRTs2PjlDdXNHYH1QeH4lI0kmIzdWYypwKSZ4eDNZMnliRTw/OXZZMTE2Zl5nR1hCNjdjJURiWFlLRVk5VixoU3FvUi5lXnw2V3x0am9jaXs0ZD9YfVNmQnhwT2M+L3Vnclgod3xAVVRZXTwiX2MyWSV+KG9FIVRSUSprNi9yaCE9Mj9vODB9ZzYpRWEzcmg2VG9YMWpebyFPTT9+NSgz''@;'; put 'put ''b2hQMiFdeEFhTlNQaz91elRMZ252NHdNSWpyKWJ1dVtIT3o5e3Y9cEYxdnkmQkkxRTZQIlliKClGcF4jQU5NQmtbaklyUzRRW2EqYXExXnZ1VT9JaTRub1N9bmVRfD8oVEBDbH1UVlFtREpadU1nOTlremM5PFI3WXg9Q0l7IVZrXXZrNnJoJEUoaGIxOCI1fEtaLzBUWltyVGRJYi5tM0FFRmU6''@;'; put 'put ''T0pyVH5JNHNFalFLKSlrKFJPP0sxaDIlUnxxLlJVSHZ7RHxPXiowLkVvRV49bWhffkhUV1FRaltkZ2EmcUBNaWNWNTdRWWJKeihZIXhXZFdFe2R7JD9jaHJ8OiVhbkV0ez1iUHtnZ089THI0VHlnNTU5fTtvNHsxcm1CfHNFej4uKmtOWHI3W2V9S3EmJEljXlc8TV04Kjx4WSFrbmhCRHZNKk4v''@;'; put 'put ''NHlHcTJXJnJgRmFQMTZQN3Q9S28ofEFjZHpYUUsoKzU3IkhPZFBwPDo6MlIpI11ZS0k0N148UUAxOnJhXyg4IT00P25AUH5sXVJBU31+fCY/KlNyYTNPJDI/Yj9GSXRrIUxEX314LFZFPDpOaFlqT3NIQjw0T05OLmBPcjFALFlFWmJQY2pjPGpUbj1oTUp4OnVvOEB6QHElIWNyKSpLVzF4OSxr''@;'; put 'put ''KWRvVyEpfV8wOH05VylKbXpmUWJGOVgrVCt1OVAlQkNYe095dXZPPCJ8XlQ1Xz9Ca0w/aT1yPFtnbHRCYGgmPihFYkhda1crLz5tb11WVTgkNUBxJlBBKW07QyElXXpGMnpjSDNFTk1FZXYxVD0qRHFofWBgOzNoUmB3NCtfdzAsMTpLTnlNKnU8djJWM0EufnJAImtTc2FWNSM7RU9EaCRFQG1w''@;'; put 'put ''ZSkvWS93KGd8Mk0hcHxmS1prcSEpNn5UZHsjMkN2fk5FaFZpZjNCeF4pZ0A7cWM1cFYlNVYzSklvQ3pxbk4xNEwhPC5WJCpCRkNufXh6O1Q8SDh8bjFTRix3VyR6JEgsLDhabD5OemBZWGk/c3BSbGEoKFs8VEssbypsLDhyVUYwO3chUGxRY1JtTGRDZmRxWkxBZXJgOzFARSxsV21lQnZzMCg+''@;'; put 'put ''Olh0UkU9UjF9IjxWPjZZezpxaDtMcmNvNypnLlkmczlsKHpJYkMsbiN3ITcsfnJIKGs7Nit4bj40ZHFgSzs5V1YjVVgqLGQkQGZGTG5ocFR5UzA5NltGa1omSmpCcSoieyRwTkskWFdAZUVUeSNnP1c4Zyg1LjhhXy8hVlRPPDxHfmVveTdoa3twQ1p8ayYrOV4pXTdFaipKLHNKWzkycjwuMUVz''@;'; put 'put ''PHwvUkJteXxsRmw0VltbMnsqSytYckJoOVgsSlE9diFQbyRDfStUNDpdRUdffGxlW0ZXeTI0aWo8YHlwJkkleEpPO30mfGN1USZSajslIXopZiJRbTNGcUdvUEB6PHBwQ2RZMiEjfGMmcmtqPVdhfWc4W2Rse2hrZGAjeGRYUTtte0g+TDRbOVQpezhpOk1DVmV0e1oyOT0qYmxjIT13LmlheTRi''@;'; put 'put ''SDg+VFBoNVsjUGpVfWFEJiV1Mix4RXghbk15ajRgLGxYUkdKIkFwTkx0dHtMeE9mMF0hY15bLGFMRDMyS2d6PHkrbi5vWFQ/ZDgmTUsoamNDWWdYbEgoQ2ZSPn08T3h2O1RjclVOKjcjOFQoKiE5QDwzZXFNSFh4eDw6WTNsNUpdYzxLKlFzMSEiVVFHYHdDRipePHR2UTt3YTI8VjImRGp+eVJj''@;'; put 'put ''PFNQYVQxfC9xR3pdSGVtJCo9M1Z9dGhkYWg7VFpEMHFuP247QiFHYWgpalVgbCUlREJfZCFrKDQ4Y0AlIzU0O3lLPFQkRUlmPUR0dm9KYlFxPGdrKVJoITd7OChuLzVfOHNSXiR3cSMvX1ZxKF5NdCIhPXhmIzdCKVglIUZiIzBDelNbP015OzM/M0MySS9UVzMrVmxsLEd6cCR1Q3dNPVZvVXVT''@;'; put 'put ''ZjJ7dzwoenBtN24kQ208WTtKSlQ3YWlJZUMmeC8jTWt0V0YxIlRhZHMmWkUiZVVdNiMvOCk4SFlWejNDXXhuNGA2OV1gK1FISVtmUmM0bkVLLjhWUHQoIVMmW3R7QTNPWipqNVNVT1lPK1d5dXtRaHt4Wix1MXFHbjdVZl8yYiVkd0pQJjhQIUNXUzwwTkdEVyQ7YVZqcko5PHx9R3wye3MyLCtj''@;'; put 'put ''MDIrX3IqWEU1fERLWkI8Y0xmI2RyUU5TQl0qNHNtRkwmcV13a1k8R2NXKTY5dTpkJVIja24qJjJFeEtQc2NUfXVZVnhjfWpRMF88QG1Pfk95REtrRGo6cnhSb0g2MkdELygudnl7SWxTKy92TW0zd0FzTUxAYTNJXmZDVDJ9NHY1cmUhbV0sOzhzNGooSWgxd2tJU2ZFUURNUlg0WURdcHtyT3tB''@;'; put 'put ''eG0qXy8ldEJbXjgmQ1JScFAhYExQXjpSY3dlOEltbmVhbEZzSXtGYlRTd0h4VjkkP2F7MEpUZWpFPHQzd1RjdjxjI2F2M3pGa2Yjb1Z+ci5uIXU0KFQiSG01dSJEQlc0fTJCRExOeUJ5LGFIR2RzeTFWdTZ4Ml1FcSF3a108Rjt5az1ZVFp3Y3w6Tl5bVVVUdUx9V21iJitIRFNmVzU5PWFWJHh7''@;'; put 'put ''dztdaWBlQjpqZ35gUDYzfFsiVkIpZmJrKGlIIyh0N2cvdT5nKy98P3F0a2k1Uj0pTUJANmQyQnUzYUs8dmJISigkJmEzfHJFZCVMfV9XST1AOkdfdjJhI0slPmA2P0wudkBHZU0rb0VhZ0IxIW9PKDRFU2VNOD52TEBFb151JXN+akx4XkVAeT4jNlpnbWFGVSVKWkglTW5yXzh1ckMxfF0rNzks''@;'; put 'put ''Zi5FdEtkYDokUGZkcVFgW1RsbzUvN3lpN3kiYWVlTUUxKWh1VyVUPnJzPEBNUTxkZ0pWcEcxcnMpJGpmZSRRSUQhVUZwZEpWYzpbeH1fQiN2WHJvQlY1REs+MEIxXyQmcGxPNU45R2szOiR2PnthfDBzQ1VQeVVWRkhwW3o5eWRdMDJ+QTcvdUEwNypkZnVsZEYmXTFjXXRRXUAhXUxyeHYvVC5n''@;'; put 'put ''KkNeUT1WL1AkWTRLRGFRSSJ8bDo4e259SjRwWC5+I35pO1AlVihRTlVYNHs8Y1tbb2BTWmFgdT5nR291R10uQExwK3o+aF4hNDdwXSM5LlBlSk8+djgxZWNUZzBAOCJ3PyVTeEdaZXUxMyJIWVNlYHQkTGU5c0NnITJPLllBIjBheSJDMzJSTTlhNVI3bE5Jbl1+VVJDYXJqNjZRJE14REJjfiZh''@;'; put 'put ''Y0RWTUtYTCgkMno4b3ArMyoxZT1kMXR8a2I3VnpAV0x2IiRzcWFaOXIvUnMyUEAialpueWtqYF5nbjk6fjN9XnNKODVMR31oR140KSg8SmlHIkZwMn5DIy8kTX59JkFbIyZSMGE8YFlIdWwwWTZtey9edEx2Nk8wQDk0V3hoJGprNWEzQH5bcmhxUiwjRHhJUXNdTnEoeFReX1Nhc3UsQTg2W2Jg''@;'; put 'put ''Zj5dI3glLjdAdXBwZjkpRElyYzxCcGpDV0tkPSQ4RGgkbX4ydVVePyE1NnJaOnpmKmR+VG0hdzBdLmxqJXlDUkZCPTdMTkBWVV9uZlViVl1tJHZdRGg/eGIkYmVVPThtYF1rNjMpZiksXVZiV3BYYXhzcCRQPSRgRDl2JXRnRSkwWi5hTXJfa3tee3Q0MiVqSmQubDNAeWw7VEE7a3JyejBDTEYl''@;'; put 'put ''fGxESnNgWzcjUTpiZDVAfVMlVEhkUGAvODYldG8yZ3RDIndhYzNDTEZMRkxGdVk5Onw3fjc2W0FnUERnOV9SUzU7V0tYaS8/aXxtcV0rP1IjYFAsOTdgQVtvWnhZYHlSLF96SWVlX2JvMV04T1ksTGU/aTcsRz17Onc3Nj5FeitsWFp5bDo1KTlAbVp0bjNPb3Q0aUliSldSUUkleWY9VmppIWda''@;'; put 'put ''S3ZuJEwrVzpjMDgoUmRuQ3s/PS9lazNARzZ5Q1koa1t6bEhmQ3hOZHM7JCVXPV1HSzAvXThfL28zWnBsOCRAbnc+d1ElUzghYD1fVShZe2cvfGtlSjZNNlMoSSQyb0g4Mz4ibjc+YDo1XkArZ1pIc3UsRjtOUjtrKFdpbypJWWE1NjBkWDA2JTBoQ1AyYTJecl0qZCVsI2JRPzwxdXRAelQ4Ykpf''@;'; put 'put ''SCVrZnFjfC4kJHk1UGV2NDlCQkBtTDlxWjJtMCxrYTIzYzVFYiQse2FgbTJZZTxHczF1Kmp7OGIkcmViOmM/RHB7T3IjT1UvIy9bNyM5NW5NKSVqTz1XfjpyIj1sI0MoeGpxV3tsZ2FUaXBFKkNYTk9wVVFJKUBha3YhaExxXVdfd15SRkA8bUI4dEZAa3BfSVdwSjNsYE9gWDtiaWdiQWBMJGtw''@;'; put 'put ''LjVsMUR4X1F7NWglXTxkdi43YFssYkNme2RpOFYsdT0wNn0qKV1Ge1ErNl9FSW9dYHlSPXEkRV09IV5JNT5IPX06P11yWVVpYDgmTjY7N3A4O0p6ITJCO35qPlB9TzlAeWUxZ19UL2trNVVhWnExeExEMjdhUWZFZXYoOGgwQjhSciwueDwlJW1GV2FPN1J2fCJFXVtkMDd0P0JSNjozKzRnKGx4''@;'; put 'put ''bC4hQCE0W1ljQjg8Vyt6PmNBZlprbDR4WXtTdzR9NTd0ZVEuZDg7RV1zPjEjdWt0NnVVczByZ2ZbXlo6UkU7fF00bUNMOjZbJFV1QHpkJHE1Nk5CeVVLUTB6ej5sdTJ6PiJUdl5AbVB8OHx+ZDU4WzdhcFFbYHlRPSVkMykmSylES04uY2xvLlQjZFIlJGc6MFI6YDdTZHhlOyR1MHF9XTBSOmA3''@;'; put 'put ''UmdgZFA/cTBNNkU4NV1bUXFSOntXZEhLTUZ7OEQrKiNZbSx7cGJ2YF9yNWwzQDhhJC5fZGt0ckNjZ2twRXAmWXFJWmVWOC83TmRkJEw0c3kkRnk0bFAxZ3J0amRTQk1VXm1PbTYyUjprZTtXR0pFKCUqaVtabmIuQzg2JFokJWtUY2RqVDFZP2NuRzFoNEZQVG1VaUVzQWVyJGpyIVAyN25aOTRw''@;'; put 'put ''Knc3Pjx9TyYjYH11PDBxInlASS9tem8/eWRYaGJaMz43amRjTj55JDR3T3QhciozYz1ncztMJFQ5eUc1akVkWGA3ZC83LjQ1akUoZ1hHI3ZPdTd4Ykdkc0dEUCJ5fDs5NGpYXWQrdVtjSGUwWFcxb1lxT0ZmfGZFZ21hOTR3Tyx1P2ZWJjJjdCV2UFVhfmRkWCxkLzd9T25aUT8uOm4wSmUsdXlH''@;'; put 'put ''alpEUVJtQWV1KjRjLyQ5YDA8X2ZUbU5gfE9ebmIxTyxlZEQ4c11lYyw6QWVlKS4jS1RudV54RWVPRmp6Wmt9ZGI2VGUqakpeNSQjRkY8TCh3VWI6RGUkN3c8Xlg5I2VYW3c+NkZOZ2NANDZ1KkhgbXQwVyxkTFo3NkBvKSNLKU1KelEubTBxXSw8b2pJIVlwcDBwbHd8OHIiIUFQfWRaUGxMWjdV''@;'; put 'put ''YU43YDdmUjFOSDBVPXUwWDgoKi40PV0+djxvfGJTfT1ZZjZ9SGFeNyE7RzJgLDxmTzcvZz94bG41bUNaJFQ7eDlubGtdOGJQYUYkT206clhtQVpKOFQ1RTZNYXJlPnlpW2g1W3BAZn03e3JJWko4TFs2biRqMTlvbSU3aF4qI3lDRmVdNyxkMlZWODkyRCt4c29oTzEiJDJgWzhPUV4lNWVgU1R7''@;'; put 'put ''RGwxbHQpQ2tpOD0leEwobHE+azdmSjZleyNNZ3lidTNfNkNXRk17dC96eTcuU0BMe3RsMmtvU2l8N1dfQjgqOUs4bThMJD96SjZSRDE0ITZaaFU7ZTN6KVBgbDdRYVRlTykzWnZdOzNEOEs4R1hqezVVL01ySEU/RFcuRFsyc11UemBbeDlfcXVdbHZ0SDA+TzFNekwkbDtkaSM3ams/LnhIKEAl''@;'; put 'put ''bzo6NWE4NH1fZ1lkOF8hTn15JipSfmR4NG97V1o6bD5gPEgkZTshQzEySkFCTHhYYCIlU1pjUCRlbHs7bmNQcUVJeDc1RHZNfTtuaFVxN2ddOD8wOmlKUGlfJD9kTztjNyt1VDJQeS96bnlLSVAjaDdnbG55Q284fG5UMn1JXUZ2QWJ1SVZRdl1uMG1hImhfJHJKKGFHdjN7VFF0bFkwNVk7XShT''@;'; put 'put ''WXtrMShTLmFOTGJpN1ZjKj1JPz01dlouOTdJcjk3QlJxZ0lyQTgyMCU4QGZDZHx4eTBqWGQ8d09xLGhKQXk9bkd4QmV3Iys4ciQxd15vZE4iYnZ5XX1RXVdLVzl8WjJtNWg1XnJddlFkJFsmZVhtdkp+ZjlHWmN2cDRpSVV1dFhybH5AIjcxPWF5SkZNNjI7Jks2JSpEUnZTNyRkZEBmVVl7YyRZ''@;'; put 'put ''S1c5PU9xZ1NIMmFoLjtubm0sLnQkJUg4P1RgIT1dOHcqWjF7N1o4PjNedTJQO1VmQXpfQF8/RmBIaEdeKDprbFVBSWZbWm5heys0dVFHazwhellfJEwzK05YSWE/N1tGbmQkZlZIc3slTUVwcTUhVWJ4bWB6K31QOUsoU3pDKU99NFR6SnRsSGZqR0IjaEV0fWBYcHE1IUZvLmpxaiJoXzhXRTJj''@;'; put 'put ''JEQ9N2AqQD1dI2dranE3YVVmVz1sN204cSUiQVk6ISo8MChKS2dZLDhfP307JDMhamVAPytMXTUlZG0lTnhPMSwqXV82blB7X19Jd2Q2d3NiZGchQmNmQyQuTFZzO1csR1ZOZUdaSGFIS3w4bVZNNnhlfXgiN2dFXkVaJHUlNzJ1VTFKfWRBJUAhP3xrM2ZbQWBONm5ScEpRS0pxLlRzSGYlLlBg''@;'; put 'put ''K2NnJHhlVHs/QTgjJVkrKyNLRShTPjo0NSg7IU9uM2hZWUlRTzNuSXZUOT88WCFdMUlicl4lTFJlJDRqWCx1aWszZSx1eERJSFFPM25JUHxmYmVPZU9lbHBWUVV9fTxsZz0hKTRgdXlEbmchcDlbRTE5W2IkOVt5O1gvPWUiJnNpX3Y0SEBGR2Z+dGFzdF5bam5hXj88bDdfXi5gZ1ZKZzl3WDVW''@;'; put 'put ''KXAxKSFnR3Z+X308LGFHdkAlJTklOVVfcWdgNT1aJHo+bix1IiYzMFcsSUdHZkdTUjJIKG9dJjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/''@;'; put 'put ''XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285JjtMZV9mbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9d''@;'; put 'put ''bnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbzkmOz5sYm89OXhVKnMmJT5nRlcqez9dPjB8OlYjbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYl''@;'; put 'put ''UD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUCMwZywlaj8h''@;'; put 'put ''bmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hNjJDQCZqPyFvPCE7XTAvVSNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RW5nPSElMjEwMz5XM3klIXZOVFBLLzcjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25q''@;'; put 'put ''Pykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1U''@;'; put 'put ''I25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0pLc3ReVTltZjopc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI242NkJ7X0o9VCRfXyM+VHt5Pzd7TnZaRHpFTUpZU3dpRypNdlpEekVNSllTd1Y5bjxo''@;'; put 'put ''LmIsY181Liw9UlkxMnNHXWRQTnZaRHpFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6ODBFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1KWTRlU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUdwZypNdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZU3dpRypN''@;'; put 'put ''dlpEekVNSllTd2lHKk12WkR6RU1LKj9dPGw6bmcsfXUyWXAzUm10dThtdnU4bXh1OG1dQjByNlsyUCJXTlcpcH0hOyx7X18jbXxxWyViNXghO0tNOzM/VWJpZzlXKnNxdF4zM3tHTm08JTtfMzNgcGtmfEdMTV1OWCptfHFzeGVZKmxxL2JzdztfMzN7RzY/U1ZdTlgqbHEvYnN3R3plW2EuN0lJ''@;'; put 'put ''OTVpRUlhQFNWXU5BV11OWCpscS9iIjIqMXV3ZzlWWUo9Yyx3WlJ4Qjt7VHlKYX1QeH5PUmZpISZpcSpddy5IMlBSZmkhJmlxKl13JWUhb3Ahe180NWFiI281LlozWVgkUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5I''@;'; put 'put ''MlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpIVY1fS5AIyg0UGdqLzJeZC9IUWUvMW1lL0k5dDQkOXxyfHU2W3dbZmhpZXNmU0ojZ1F4V3J0Xl0vJG85UUJeXyMjSXJbZmgleCE7YjUyXyVRaiVlSW0jMjAl''@;'; put 'put ''ODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZ5bGcsPG1jZWlzfG9RXU8kTiM7NnQ0KmZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwh''@;'; put 'put ''MjAlOCwjaiUocD5gdyxgfG9LYHxYTmB8R1FgfFsjO2AkSClRTSF8ciNnTTklaiRQXkkjZ005c3t9PGxZOy57PT9oZzl6ZVlydF5DOG1bfW1xW31tUVB7OFc7bTlicGg4O2czXSRlOCVSO205YnBoODtnM10kZSVlIW9wIXtfNDVhYiRgSTN4VV9CZWAkZTglUjttOWJwaDg7ZzNdJGU4JVI7bTli''@;'; put 'put ''cGg4O2czXSRlOCVSO205YnBoODtnM10kZTglUjttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSldPGwoZXU+JVBYbl1MWG5ITVhuWE1YbldQdT5+Vy9pQEROfF8jS1AlZSEle19fIzVdXi5TfmtTIWc8OXV7fTx5SHJbMnNpSmc5XmVnOV5lbDIjeDc3JXdBeTdPV2lAREdmcykqSE0he3V3UFdp''@;'; put 'put ''QERHZnMpKkhNIW45eT5tJHE8OlFuaW0xL1BlRH5VMzxFbzpjUE9SW1FrTk4mW2clK31Td2pyUCN7cDowYWJkIVtkW0RHZnMpKkhNIXt1d1BXaUBER2ZzKSpITSF7dXdQV2lAREdmcylTfXxmIUg2JF9EZT19Q2U9QkRlPUZEZT0vRE58WC9TZn50YXN0XmIsWWVNIShydF5RfSZvTCszeCE7NVA1''@;'; put 'put ''VilwXXVpJUZqZ3ZXbVhmfl99PGZ7OF1jOyFIZGVOZnppSyVBKyQhI2BQcnRecyk7YC84Z2MkNDpdNmBUYVQ/QGlhWz8hYWJoeWVYbzl7TyouYTtJbGk4TnFRJmNnW203Z3o4UjpqazJtazlRK1daOTQhMkwkYzExJW9bQGlZM3JVTzNDMzFRVTM6JWtbIy5meTw0amtmeWVYKi4xMGVYfG9RXTdw''@;'; put 'put ''UV15IV0uQWV1NHYlZjg6OEMvQCMoNFBnai8yXmQvSFFlLzFtZS9JOXQ0JDl8ciFqUk0pWGk4fS4qSE0hfHIjZ1cjJWopb2AuWzs8bF1IV1Yqe3R0aSVxa0VeXyNUODUzaXJ1NGhrfTM2WzJmXWxbSU92TWRbUCRVVzlnWWQ4JGFAMSQ4OE81NmtwNi8wLi5sNCsiZlEsT2x+JHtDZyMjJXRQe0ld''@;'; put 'put ''al1Ccmcyd1Y5QHcoWWh2IihMMWdUN0hzeD8xb2ZbUlZQKT8hYz0rTDE8ZlIjRGZbUnlFaiV0UFA5PGxnWztgZGdaVkNoSXI1NnVRUzZaOEtnTWQsLlt6cHk7PXkja2QlQEU4ai91UXlMT2ZWJHY5UXprXkckdjl3fHg7IzA7Uks7djt7IzpoMH4vI15tUCRtOTJtQXBKODMmdGFCYGM+cFVKOWBd''@;'; put 'put ''e241ZTdqaSUoSilydF5pc2klKEpfP18jS0RyW31tSTw8bHQhY2U3anN8fTx0e3FbM35TSmc5JmhYcnRePkQobzp+I3ghOz5RPTQmaGghJWopbz82JjkhO2JKfV99PE9CXy5vM2EpIWdVbD0qPGxYfX08TXZxW1RGJjghO0RSezM/VUgoIWdQKV4/XyNYRV8ubktXaUxQaDIrcEdpKyViU10oRSFT''@;'; put 'put ''Nk4uW2hDZjszP1V4bGglY3VIbUFrZ31YZU0hR3VDZjxLa3tfI2JFbWZpc3xdXyNjeDUzaXIsKGllRyQ0VltoZzluaVlydF5OOG1bPEtyUnw4IjdyUyFWe2lfUmxedUprMXMpUUN7UVF6SG1fL1UhdDxbMUtsX0Q3SXR4bGljRl8xYyxUUi94VWZjRlIyXSpeP1NkVnk5VjZXUHY5NzQwPCxna0w8''@;'; put 'put ''SihqJT07UDs8bChFMVYqezQrJm8hOTw/PGwpeDRWKnt5NG1bZmguaGc5fFN3e308bzUiKUdAJWM7LiMmSix5e1BSR2ZFKUAqPGw7RWl3Y1R+ailJMUlhdntRfUlEa3lqRD1MU2A9Siw6KUosLjA7UkQyYkMxSURrb0tpfXlJVTw2TTNpVVB6SU46VlZ0eVs9ZDs/alMoclM7Lm9lQiMzWkFKMHN8''@;'; put 'put ''ayFHbHl8WXUpO0pAJVIqTkIrKiU0b15CYHZ8L2RQP047d21qYj1yTmQzPSZNPDpbYUI4VStWN01qMncpLHFLLjFnamxpPCFPXkNMKTFQbXBSd3k4UHNUMCFwY1g8VjdMbTU6RyRjbERnfitWVkkoKFJWNk4ueGhqPGVoQGldKilZelF8XyRrbmlvS30xV21EXiIobGhvSzslcyMoODosNSosOVZt''@;'; put 'put ''c1RJL0AwTzQ5RWJXZ0pLKFlTT0RvcEZWc3tNRCI7MzF7bHtpZTVWX0U8Uip0PXMjR3VaeVM2JFBtU3dLQWB7RiI7ek16PnpLPC85KnlqK1U0KzI2L1kkLnk2Z1NhVTNnayt9Nj1ZWyore0whdHF9bWp2KnB2Xl1iXzF5bFZsQ1NodnhfX191LnQ9dUorR3JJLnB3ODosLCo7Ump3Ti5mTEQ9e1JS''@;'; put 'put ''Um54JWt8RFZ5PDRXbGNHeCNsbShlPXEqVkZMMVh2PDJ+aVRpRW9tTVZaVjczZTBkOklyWDc6d1VLKzlzXlZYPDdGJUAkP2czK08lVT1BQ0V2Pk9bVllrNEpWUU4hViNSd0Y9T1tNT2tUSFRPKUdRRyNibTpsPCV4PEtNXyVtOXZZW2o4bWFyfnt8ajtASyhUZzkmZWBXZCJfTz02Z1NzR2YwZnxs''@;'; put 'put ''R25UOiRYSTJsYFhUZWdxMDkvN0p5LCIhZWB9P2BebDFOPkF5eik4bzZtYi5ablE9UEZjPUw5ZyVPLnpKOCE3bVF8T25hKEpga3tLamc+eXN5QlBuN1EpJTJoRmdzPm0kLGwoaVBnV3YyO1ZNTz1nLkhvYldwM2QkbVtiPDQ2Myk1Szg1IXxbJn5fWVtjWkJdVlpIdDtJfTxsRWB2ZnZoWnRaMCYh''@;'; put 'put ''QDcsRT04YSRdJCZXPX0zTyxjKT9PfllROVhkcTgzUCRwRyN0bz5nSTkyRSt8QlB+LFZkVl5wYkY4UyNiamM3YzpiOGkkS1R4ZTFtMHFiejZLaElkOXZ8SDpHVmpZZzYyTktkTTcpXXBOXmE7MTx3U0Q1bTcpeyYhR2Y8czQ0aD8/MG0kY2ViYnF3XzN1PTpnRzNgOVI8NWJUaDdPKClYKywhYTha''@;'; put 'put ''M21gLzU+XSNETTFRaEU4MTs6SigkQEhVN1k8cVlrWFpAbSVeZjt6PmIlYj9qajk6bkN1bDw3anh4Slk1dFR+ZF1iIWgoKls9I2IhaExDWEVCbnBsSTx3bj0sJjY2TUMmPWNdeDFRLnJqfVdRUD1NLkEmMyFLRkNffGJYKyIsRXtFcUsoMW9LKFhfMG12OW5NKC5DQDA+QyU3JHxASnFLUE0oeyU3''@;'; put 'put ''JHIrYV81NWlJNWhDaU9CVyxkVkJdJCs+ISQ+ZT1USmlFNXFiXzFucWpIZnR9V1V5Ym5sL0BBJVhzTShDQFhzbSwvbHttX0kkN08xVV84bTEzZDp2fXc2LiVrW2Q2OXN4c3xpLmouNTFmUFYhN0ldcnpEflN3XnpdPENfPnwxb3FUUD0qQENRQnsqZEtYVmd2fV0wT1BOOEVkekN6QzkuOTJuWz8x''@;'; put 'put ''WnJWbU8zUjoyaHQhY0BNKE5sQS56al5tUHw8ekVmenh2LExyYW40ZjAhRD4uOTckbF5OPXJbRiZhPy4uQD0qJk1OSCZHZVA/Znl9JmZeZ213Lldfe0lXS0M+Vncpd3tobFJNJjtASFJZRSUsT2RuMWQ2TUAuIVteYmB+S3VUXiVOYH4/ZS50Pk0hJSFvcGYkL0l8Z2w3RXklU19UImQqcnQhLyFW''@;'; put 'put ''bkkkOSE3bS5dRXk7bzE8SkBnLCUyQVY8eCtQNXFTI2NASjIuc1tLIjVuSVlUbyhJJHclQmpCLnI8eHx3IzNZKW1kOls9Nm5LXXNSbzhfJmJRIX5dSkRyZGtYX0cmaVt7c3gpV3VxSiJqVlQoaDVhXiNyKDlqR2d8d184cCRANztsem1mO0FAVThhbzBkPG0uZDpCYyF3fDB5RmlHZipwNXhdaD03''@;'; put 'put ''SCtPKF1+SnZCPmZgPnNUbXMscjg4fWw3dD1dMDMpVGcibkFbTyh9answUnF3O0gmYUdpPHZRRTNkTShreWVoRVN2ZDpAPUVoXUk1bVNQUnEuVG1wdjokLHhKejQ0aF4jRU1bSywuWyZvclZtN3B4ZlU5UnFuMm49NlVdVWhlTSgzekE3KH1BIyp9fmE3LF5nSGA2MksoYmlPKS5seCwrXUx6clIu''@;'; put 'put ''PFtJbyglQEZnIm5wMjZFaW5RVSk+I2IpSSU+R2d9ayJuO0BlVGIkdX45NkJ7ZVQ9OEQrTytEKFRnfHd4TiU+PlJzXWE+el1PUFQ6SVZVbGltYiRzPkc9UWklLjsxLzhWbTV1ZDA2WGQ6eiUlYS9dSWx0Pm57RjFuZDdKK2lfc3IkTyxMLCRYRXloTSklZmdxM0orT3okaiV+VStmayQoRkA1LFIj''@;'; put 'put ''O2ouIXtmXiNTPTRlfDA5NiFhVHN1LCUyJGovOTRNP3wubEd7bDFicTNgLmxDYCQlakdfITs2cShvM2IpPV1MOSZJdmwxMUEuJntpXkdmI2AubEd6KjR+XS48KFU/fWdHXyE2SjJfcihlUXVYPS5gJi5sdyE3VChKTSVMNm48JlIvUDJ8NG14Z19teEdOXltqKl51PTB9V3N0JmFHOiRyUkJbQVI5''@;'; put 'put ''Jj0wZ05AOXJZOClyVSE7UnY8LGxseWhoYHopbzNDcD5RSD80K25kVEV6PCpNciguIjNAYXNwYjpFZSUjYX5TcjF8bGEhP3x+TjBkYjZVZVZtMyk7IlRDYyo1azFJWiQ3cXQsUT97Oi5nZjZWSH1Pfk4uRHNIVjF4N3Z2WCx0bklaYVtMVWBkcGwyMXRVfk5fSnZfRHltWkE/emciensxZSlNNFY9''@;'; put 'put ''QTBpa3xtNyQhOVteckBnJTsrUD9GY0FdSCNyK1puQFphYWJiTHlOOmQpNGh6bEJkWG9aJF9iJXx1c25SQ09EK11WdSVNfFVDQVBOJjhha2ZgZCtlLl1LJExlYW5geVZnImtBLmJ3JDAjOXtdaV9uUDxyUU59TX1NfU19TX41YTB5JSVJQiM8ZUhoJjBRTmU2ZS8xRy9QaSxAPyNvMV1eSTFtXn1w''@;'; put 'put ''YjNgXUpzQHF4clEhai9wOCE8elA9fkpMVWVnaFtxeGgkfjAiUj4lXTd+P3ddL2VSdlZtJmRSdjsua3JmLDdueyxBaUckPFIhfVkzNj5jLDduQVJFKG0zZik8ejBKSFI7e2pQbSxOaFVmUGQkUHRlYll2SXtkfF1dIV4yajE1JHFaWW1MJD9nS3EmSUloUnY3NltKOSRwJE9pcWhRP1RQflkhfFAj''@;'; put 'put ''ZT1EMzZ6N211VT0uWjhWe1J2XzU2cmYwJUBCb19pOjk2aj8pfDE4SjA7TG0yJD9tXzVVKHtgOmpWbmlebGBLcTRqRUkhZ1lwMyksbTdtVz1OOzcyb2AzPnM+T316Mi97NCR+MFlWWCN4eyopbkY8eCJFMl4zdm12bj9AUzI7MV5DUihRQ2lyaCZ2c2BpaXYhM2ZuPWdUP0tmZHVnWyk8bCRfNE07''@;'; put 'put ''allKL2FlXktdZkZbcXcqTFN8JXQubH5WakxAMH5WajtAdm0/c2hHYHJGVnFib08lcS9Kb35FMUtdVCMuTSs/fCpqcnM9SXkuSjswfSp8JkA9ZG5jPyE0YykiL2ZnZXE3Sk4kdypLXW1iPn04N3teejtnXUlReHg9MiN8bihbMDY7VmpkJG8oeHN8ODEkI2gjVlBoOXxGZzBAVShrfXJ+eF5vSlg9''@;'; put 'put ''cn5DUU8jdXFyeF0hXjI8USx9dytzaEU4L3tPPSxrY01gXX5qR3NYbTVRZ05jJDd4ZURYc0pZJXxRPzErIWhbanFzXn0yXyE2Pn4xLDFtVj1GezBhaHlkKWFRTTNoJFc6Xz9takhKK1FHcEpeJFIzU2sxd1Uoez4xcn5oMXdVM3NyNlhfbWpwRCVhWjNoKFc6ZVttanBEbTFgVn0jKlF8SyN1aF59''@;'; put 'put ''L2lbVChKflkzQW9IPVJTZnAxMStwSGRuYGxvK3BQPUsyaWt0a3Zwd05FfWNRIjNsPHU9N3AqRCM5SDg1TzU2VllHLjgsQFoyMz06aDtHcEJUeSQrcCZFI0lNMmVRcWp8WkdiJV1KOXJZdk5CcFR9TmdYU0Q2OnJWbURVI0wkRDxTIjp4X059TSlOMURhSyVZY15gMDlGb31KXlVxPCZNeTRtM0ZA''@;'; put 'put ''eFNAe31hbHJ9NihtZDBGK114RSVYJnB4TUBlLjJtVn0xb357Uz1DbyI/aWNpbVFzNVFhVCN1PnJyQzFPOW0uXUF5QCV0VlE5LFUve2JuRn0uUCorXUd1fSp8YCs3PnFoUWl4eX0qMj4ofi5RUysmXmJpYVt9YV8rJmolVi8sTGpnLlN2cCRFTTUpZj9TdnUsSUxAWmclMWAkajdWSjNxRzdKbyFC''@;'; put 'put ''WztANGJwUWJgOmozXyRVZj09PSFhMSE3andbYiQ7MDd1ME9jJXxxU0VdZnV9KX0xM1UoZlZJOXMsfCZLZVY6eEIzRV5tPU5vIUBadWw3LnJofDM6IylANDZxLE9sfF5tLC9sUTFNXSNvOjpNV2cmK2FSXTNQWSV1YT9ne3JuZiM9KXEvSmkjOzBuJGAvZHJuZl5QdCEvMERTLy53LlQ9WVdfRzVL''@;'; put 'put ''cndVK19PW0tIOk89Ik8zKU96JUBhLDJtYHlCQEt1d15RVXVRJiU5MiQlNC5hP2AqSF1Bb25bNzQpQDxYSHVAJS5NIyxbemJpJCZ2JXI8T1k3WmV5TmAyMFs9N24ucGtvUVtfUjNfeWU1UDVPLFlbam5gI3xzVW49T1U+fG1vRzFPJTJnfXguUDtAJi41LEpRQHxBfWE2PXE4LFtIcVZuLltkfkJ0''@;'; put 'put ''WXU0UCo1cnNsQFVGeXo8MXxHZ3oyVzE0aHsrOTJ7MSMyeSVZRHMlKXpKIyhHSVNHZyJqRFE+Zk9UQFIuclIrIm5oOnN6PDI4L1RbXTt2XVp8XTB1eEg6clVZKDUkaTEzYCs9OH0wMkpdMFM8QGtJYSReI1EkTiRoKUhNeFFWbVQ5YjA4OypsPCtMWyIuYCtrfT8xWyZxTkJwNlREK2dkIz06Mjxd''@;'; put 'put ''MnE4YGV8dT1PM2VUJE5NajdURFNPKHRVbj1PfXhVLnI2YlUjVm58WkVoPERLSV9pP0xFKHY7MmdaaDVqYSxSd0Bldzs0ai9wRVBgWzBaN24/Zz9dL2RuMyF4Ujg+ekdsRlFSO31IOz1KOUNJfDwidyViTGU0aCViJDdSYHFzRElDUFZbNixRPzBTQlJ9bmIkMF04JC4jdzB7fXlzbVQ9dVFTZV9g''@;'; put 'put ''LDNtPGRRITYkSlFAWmViWl89TmJ7ZGciajpsc0Alb0dQSVhbZDRldTJsOzgvYCpAREBDJUovYT4+VXQoQHAiNTBlMUB6Vm1RXUkwdFVFZmpHJDd+aSQ3JUBzIkdyUC9ZUHI8dERRfUdkZ1A2N2lzM2cpQmJeNiFrXURRSmVlOFI6YD81YSt1aixDWTRjaSptMD4wfVdNe2M0IkMpRClEVEBAYlg7''@;'; put 'put ''NWhkby4jRH44bS5dZDNOI05oemx8YktgL2hiJktlUGU+eFI6P0FFM0g4OWZVN1I3X3VrZVMzKUJjZ3xnQHVHc3REfk5eM2xbS1FBL1BlNC5Nck9jbmwxXWRiJCYmMloxYCZaOGFUUjpiMT5POHJ9R1lvOFRRJi44ZHxgTjQ0USw/N0U0KEJrbzdxWixMTlldNCg/WVM6fDcpeGk2KnVkM30qJmp8''@;'; put 'put ''M1F1NWkxM11yXlZDOGhjbT00YnpsYm8iYkdybV9kKXpWcEl1OiszWlteeDd1Vm1AQldhaXZZLGc/Pz8mLkY7aHQvVn07V0BYX1V0MGFZZWhANChTI3EySFYhfGBObGhVLn5jQlh8RVdwVmJbdUUoRnhhJXBkNyx1cmJ5aFVbUTU3bkVdUVlGaSFEL1FEPD5uTDBiI25XNnpRUlE5X3dqV10iaUB7''@;'; put 'put ''I2luT2AyUEFwQ20wP2JRRHl1Q3Y5aW9sdFAlYCoqOXJlWlo0NHRabC5Gem9uP3g/WTl8ZWV7WTxbb15RLEB+QzRrXiMpKTlyQVtRQEFTXSMkKihXW1I1dF1KVkhBd1ZhKHd6Ukw6JlFgbik3ckReSl4kLyoyKkVsdk5hQGFbZU1mSW9CUD45d3V1dypDfjhEail5KjxuY0IvenlrVjYwT0xIXXA5''@;'; put 'put ''Q2hgUXNEM0J5fX0haCNeTVNeSDpuMnFQPHZpeldXfm5iTlZnaikuXjBvKyQqX1BTRTp9KSk0QiNzLGJIcjMjWz0kd1ReSXlqK2Y+WX08VF9AVitVOy9pNToiTTk/XXtuKyIyPWdeYD1MZ1taTG9OWyk3Yz1HPUo+XU5KcVZVanMzLEVTZmRfIjRgVnxZWCNmR0Jydih5cUBLezo6SHUhcH01ZE5u''@;'; put 'put ''fnVBVVhJYj86XzNfRjhEXVM5ZWBEczElY0ZNMDBmbzc+c2RRJlE9WSM+eTF0cTtoUEI2SFg8OVQ7Rl57MUhTPmV5USlJdjVXYTZWQjNuUiJzcUxEMltjTm47PEJ1JllmT2tNMj8lK2UxMF1MXkh0cXdMLDd5YnYiVXR+dks0RlIvPSUzV3t4SGVCUTFmJHNRX0E0LiV5aFtlUEF6QWFtYE5afFdi''@;'; put 'put ''SVVRPF9Ubzl+bWcmYS9DWnIwLDFFe3wmRmZXbF1QXnBgQ0RNVzwvUElnSiVfX2giYEB6U0tKUClMSVE5SnwkPkY+dEZtSjdnLDIoUih5ejhxYFt3RG16djZuVixXI3Qkd1V8QntkVkskPTNnTFcyKVp6OzxHNjZZKF5RPW99biw+fFdyJFV4MW9bWHZCM1EwQF8ycG5gKmdYMlddTlRLO3FMZns1''@;'; put 'put ''RnEqYU5qfFFwdzxXI0NlNWpxTzNuRDc8T3dkQlFEc1ZSSnQpJGJlV0AxaHFXdVtOW25Id3xCIkhzZilRbUV4cUJmPUY+TGVEUjQsIzdedls/TnJWfG9yInV7QD4jOlZPdUIybUpkbSZtRlYlbmMzfH0jMC5IT1F3REFSTlFFZComSE9CUSs4RFlxPDhLIlA4KjxNd3h0IjJBKnJbMUJ+TEBLRGo2''@;'; put 'put ''ZX5ZLHJmK0kuOCp9JGdOWHo1TT1MJDNuJUcpd3RyOSFRMW9WV1tEaltIbyh2UUwpfCl3JS9RQjgzdlhTRVd6fWNzQjVNfktoRypgXXxsQmJKeUFQK1BhPmUlcmRza0EvcCkodU11RHVPXzNoTiYrNTBiKiJ2UU81PltFdC5uZz9uelovKDEreGgsRnJYbnJLdFEoTHt8c31mW0dqRl0kOklbOU14''@;'; put 'put ''Ijl4fWB4NXZpTklgTkEuYn5La143SkBYbz4vT15VanFGJSRwU0QsRnhSOyY5NzpOKT1vPmhTMyQqWUkzRUxCW0QpeytPRHtlVCNtS0s0KzJ9cXc0TThiYz86UTlkWl5sN3opLjxWbWhZWFg/QFVtT01HU2tCNGtLaW8yakQ6PHRCJThXTz9rPUJJXT46R1NkPWVoal5CaWVHbiNXMCU2Qnc0QjIq''@;'; put 'put ''LE1GSnRFaF9Ucig4L25yZWgzLDNENV8zZlJRI05wNVcjXSJKVj1hIXs3akxDMTJAUWxieyR5VF5DOj50bCpoIXooTjdtRUMkbXNDMSpOXThZbkR+d3wyR01XXSE6YSFVeD9IOEE3bDVzRlBZSW9ZXj57NWgrZEMhSSNBeyFaX0c1UldCWXxxX2A0NHwpcmdLQHp0W2t9Im1+YCskVnxfWVVTIkg3''@;'; put 'put ''fUY9dzM+QUpfTFp6PElAdVMvRTlaM2IqKU1SY2NtMlouTTZkYWhgPjRITFpHLElPNEQ9Pz5GZTY7bjx9em0/aisiZV9eLHJ8MDJfUj9xcEZ5cCRLb3VvW3pwcDBHfEZEJTNESSpFRWY3cW1wbTFvW2VZW3FHPzNRNS5jPVQvT1cidixgKFsrJm4relZTbld6aUpYJl9aUjgmPHdybXZ3XyF2c1BD''@;'; put 'put ''dW9WIzwmNG9Wdl9RWmRbTzlXRSNKUj9bKkBTUU9GL189JjMqQlp6dFdhMkxtNCFoJWpdaCU+dG9WdF9iSUQiITYicyxgeFs0OXJzeHwldHw9MVJ2LiRLd1VRKTpvIz03dnZJNWlqMytUMi42cjRLR1NnRjY8d213fEEjflVsPUlfNX03XkcvKzNvVnJfYzFjW3VwYSN9amJ5dEoldWVLbVZgKygh''@;'; put 'put ''QlFeLjo7IlVKXVUrMDJsVnQhd15vbStuIjwjcCM9dk5iVFltSCMjJXtFMCErYCpNWDxrZzRwaz5JXXwjR3RvWyY4WSwkT3ApJW9vSjg9I29hVFltb01tPFImWH57U0k0UkMoaGY7OHtKQk97LkJkaiIrcjU7KlkzWythTUxDPFIzKz5qeXN2U0ErYS4kWkZqQCxPJDB4KyRfMnhvaHViSmA8PGtM''@;'; put 'put ''U35CLGBsWz5iOU1fVTFLO3FwRjoqNCFPb3xDeFsqLiYzPzpKbz5uW1ZbbmlkL285KCVLKklzTUlLTkBUIz5QMC4mM1YqO0N1NV4keCpnYkhNOz5nRlU+bjNHUnMhcm0qNERHRW9MNFdUMWBRUDpGbjJvVi58N2FMNGhTW3F3YG5rVVchaixgfUBLbntDInlKdyxNKXxORUw0fFFbcW9gb1tUVz9n''@;'; put 'put ''LGAxKCVLP302bWAwVG1pYCF2VFcqZSxgOEA0OW1zbDd4W0BeS25tc0E2ekRdclkuVykqSFI/QWpUOVslW1dHLyJ6b1Y2fF1sSzRvTltxVWBgNlNXM29bcUZNTHZVUVtuKEFpejJ8fXo9cWhHI14wbzBEKDo8RnFSM1tWPm9bbVpNKm4rRypWUWhYQGleTyheZ0ZjVzMucCZvV31gVj5VNFRNS253''@;'; put 'put ''SCx8X04wW2l+SWp6WyR8R3xPNG1UbVd0bUtud0hyKHheUiVPLiZNWDw1TiFdWVs6ViQ4IyZnKXIhWWczPEt3SUMqTSVzOXpbcTtzIz1vViRzWXlbcWAuKnk2PGJnOX1hR0cvRT1WPi59ckRHL3w8VWgufSEiYSsmM0MzdUwrYDV5KUZQd3JnQ3UqKi9fRi8/PFVoMnNyLyxgR0A+YmpzKy5XQ3hK''@;'; put 'put ''MDw5RnFBLEdiZjNwbER9azIhd2pbcWN9K0pJL0Z5b1Z2fHxHSS9AeG9WaTchWkIiVn5lMngqKV5PN2ErenV5W0FeaHlieFtxfF9vW040bzlvVkx+Nm15W1V2eXN4Kk01fkN2SlshdltbcWNHQyNMVHpmNmhoPEZwe0BfS3EsSC9hO1Y+eHM6OCxgJn0xTXpbPSR6W2N8L2U7T31Gb10+YllXa1Jz''@;'; put 'put ''V1ZobSZ4fGAlRi9BeG9WRkR6W0d0UitKT31zTChsViUmN1JSI3I2b1JAeWovfGtpZCtIKDVlPjVeMGEzK1p7Ri9UZ2BhV218P1ArKlQ9bUd4OGBjJHYxKDwlPzNRWVdgTyxgeH5lNkYvendwJklSeks1IltBNH0kMEYvVHdwJmt8fEdKNEBGW3EpX012JUIzRSUjO3FGLzJ2b1ZofGE9STQ3RVtx''@;'; put 'put ''OV8hdkwmWGNDekc3ajZLRUl9ZUJ6W1hdPy5lc1IzLGBJe0d8elEvTXZsRiM3K3hKeTt5WmQqISkwfCEwYiZrIjlWJmB5W0l8UitJL31+RX1bYWIwfUslYSRWWmJ6I312UDw4Tj5Tcip2ZlpGdyxqXzFFQWZ8fkN9JkgoaDl9SjZMYyF+Ql07Y2B+M18kTn1zY3w8WlJTaihUeDYyQF81MGZwZ0Zg''@;'; put 'put ''Lm9bO1tEMDVgUSRBRT10MHlNVF9fOz1EZ1U4byRrW0F9ZEcoaDh9fkM0RlpMIn5XMy9LZGBsdVJxW357YFtLfXM8aFt+SD9xe1Y1YGVbfkc/Q0hzKFp8SFlBdEBJcVcqVFlWSzZsR097WUo4UlldRjMwcHguWEVOKChga15tMSp2VmN2d2RNI3Nlfm8vbkl7c3ZfKnV0KDZ9MzRHN3RwP1FkWyND''@;'; put 'put ''cUZbfn4+Z046cS5jR2hGfjZZbnhqPG5TL1liUiIsZ3RMOSl5SU5JfVZFO0lgISZpfS5OM2VFeHE1fHlZYTxfdXpGPyxNUTk6cXFCbnR4YmNWZSlIJH46XmZ9SyM/UXxzUH5iPDBbX3N2fGwhdSg+fiJfflNzV21TQSIufil9Vn1nOSo+e3NzfGh7NV1ROSR9cT9hI3UodCg9flp7QGR0V11+S30s''@;'; put 'put ''STRGJH46P0VofXMofXx3NEYic1R8JkhXTF1+Pl81XUc3X3NufENIaW4jfncoMD9jWn0pP29idk0vPX44X25JNH1ZP3kzdCgrfi5gXUJGfiZ1Z3hMX0dmJTU/bmtFRXYrQ0hYV0BCIk9EUmJYYyNhUiN7LGdJaEkrU0drdVUqfVtUbFRXVlA5UCtAbnozbzVEeGFrTjomVUlbI2Z8SStPdU52Uj9k''@;'; put 'put ''bj89PD0pQkQlMy9MR3lFSjUyOmJwQlBMezFySzBVO14zWDFGV1RDLFsoQV9dd2xUTTc5MVt0cUZaZXJFaXR1KEB+TiNdXUdzIz1UaDNnbSZNRztxcUo9cVZ9PX4jYHNwVGhePEp8ekJ5ci50dFc5fmVbcHA2bEozRVQ0MHorNWVTM21UPSldeDVyS25VMVc0WTlNVT1taXI2Ljwxej40ZXNtbVYo''@;'; put 'put ''dnNXV2lARD9jX289JDlneG1QPVdAITAlazRYZnhxRXx3eUptdiYvM3AoJTVbRW90KSVvfX5jdFl6XVQpaCs+fn5PM1hRNDx9MnokKlFqXyh+UVtFb2ElS3xrXlpzK35PW3s7bFYuUylocX5QLjg1e341T0B+dGBPalc0NH0kMTRGP3Ngc1RVdmdofkNIeCljYEV2WitQSUBLI2c6cV4+ZXNbfDJ0''@;'; put 'put ''c35TT0xMV3xyKC9WfDR0WyV5c347X2NuNHJIVn4uJE5bfFBAaFd9M05XW3xMQEw0O1V1KChzSl56eVpyVzQ7MyROcltKIkB8MWlyc088P3N5e2tJNlZdWF8uLkYpYF4pe31VIShzR15HL1lyaG47M3NKclthdkB8Ymlzfkg8S0xocmpCc1t4Ont9TSFXKCV7Zm49M3UoQHxdXmRfPjMvJmArLzY5''@;'; put 'put ''VipiZU1BTXlXaXU/b3tHSDRMN2FPbnp4JEg3YU9+eElMSlZLNiQ0ZXgpeHh0OipzeCJ2e0x0Pyt+LkZ2IkJyKkhfX0AoMGR9R0MrX3Ngfl5LTXtuSTZGU2FoKSJfPigwZC5HP3Q9c1VDSzZtQVd4ZndZTz5+L187KVlGPCghfklGcSJqbDNbKHJGbVMoIX5FbWJ2W34xQU9jcmEzTFMoS1ZLNl8o''@;'; put 'put ''a3hLdm5JWj83S0EiZUFJN1ZOTnhnKHlLRzokV10/ZT9hdlpdWlNXXWF+N25wTGZHYSJVQ1d0QE92dSl9RzUwdnpGMzZFfmwiczpEJlV0ZHpQRFNBS1Z7Six+RzdTfEZPZkcsbmIzWnhTYX5rLCoqQykxfT8/MWg4cGpuOW97cixlJHpESnxlZz5+eT9fWkk/bzF8MWBTYGx1Ln5HK3wqaWZzPVdb''@;'; put 'put ''OXElMiRGXndvRFJta0RycmouR1lHRV1UIXFxN0VAekwzJkBISC5mSWI1NG5HdlQpcz88Oj9Qd11ldmNTYVJ7NSolUypLRzp1T19fN3EjI3MjNU5LNjg/YF9UZXtkRkVTYUF+PT88WGx5Pi5iMigoV3ZrSismZGU5SHE4a11PJlhTWSN5VCZLb2drfitxL0oyM1RyJmwoMWNKTXc7Sm4+YnFtWmR9''@;'; put 'put ''Vl47KyI1TiEhNDU5N30sW0ImRUIwVHZiU2EjKyFMOF40XSZvJXUsS0xydylPdlozTVhNLkc+cV99LC45Y3Qia08rc1U0cmQpIUg0XSNCcj5CTHxyM0BvPmpTZ0REKW03LHZTcUF7YFtWLkF0Mn0+SVNfInt4RTp8UUU7MnV2YXNWeVhzcVRAcnIkUzlFcFJeRm9aM1s9WyM+NlY3LmxCLkFWPWpv''@;'; put 'put ''SlBhJW8+I3htS2VfeXQ2X3E/Zmg2V3ZgekhpTX5dRV0xWUtaZWhNODtuW0gpZjZISTFLVl0xKyRiYCNjYHNOfGZxPFhtQnUzXWtJc0dnS3NwYEB4M1Q6P2dGZ0l7Imp1PUgmUnh0PXxbZDN9KkB6SDpSLGI/Ky5mfTpUUXNfRys1QVUyXn57cVpIeyppNmE1YTJtPzcxLHUkXztxLDVoRDhdITVh''@;'; put 'put ''YFpeP31hOyEzIzFqN2F5WkBZcT43KX1hPlAsOU5lcSxTOE88ZVRnVD4qMT48Llh9LDxCfWNeX1NHb3NAMSMvSnZ9I3BoZiVPOjNPKF83JkttLEpsR2lqMC97WHlQUVEmNFVUMmZWPCo9e2c2JWdbalA5OFg9VT8uL10maUwwI2BXe2RyV193bTA7cDg5PVErVjhZMS9scC9ob2B5QTo2QF49ZGdg''@;'; put 'put ''bVpeemhCYCVlNFByczhwJl16bCsjMmdVK0VgN250NkMhOzBOODEsWzNWVntiTHhmSW0sdjF5ZGlZJChWY3NITHlPWjAxMUljdkxSUH5SRlY6WWVBU311Ti51ISIxYkM/azNQYmprYTNFd153STs6KCpUSmJ9T1QmSSxFSzZjdG14aHl4N2Jjb1Q6SyR+PlRnZHQjS3xnIm1LZDdNaElsWiZUIls3''@;'; put 'put ''aT1CKm83WzQuK05wKm5sX0N1b1IoVE1pbUJ+QXlXQ3l1aTRJLHljNCtPdXU0ND5XTkhRcF5uI2B3KTUuQXg/Ll53TXRKNzF0YlokTTpDVHRnUUBWVDdTR1N1alVpV1F0O34zQGg2fXM8fUwwQXQ/flhgbWJXNG1+PStxUHt+V351em5JOX5oQDV5ZUNGZGV6PVZLKlBJcnw3fjpeX3hxV1t+fH1F''@;'; put 'put ''JTp2fHMpfjB+SH0wWz9RP35xfj99SWBaU0F0S05GZH45aEYwLm1XX2JFPChRNTNnNDJVUVFqfjdxS101Yz81SmIlM1lHZ0Z3P2xWcTRqJDp2dShRLExjQSJ9fjt+JStkeXJVSzZzcj8/dEAqTkxVODdSSStPU0I3aVBYeHR8aD5xNXkqPmFFd09+ZVNxWDVPN21xIiJ7KGtfYyp5MUMiMl9KWTFX''@;'; put 'put ''ZSp9UmlzV3FedFs3bEJycXw+M0NHOjlGfl9oQShLRzpRY1d4OnY+WCk1U2FVdF5RUUtKWDRSMCl6V1V8Nj5jaDFXTWI/alcmeTFYRENEI0dMaWlBSU0rYSFTcUZXUmpOMEFwRXFwXUN9PnVHKmhDNW5YOER3Xyx1YnFEdlAiYXlwNFk+aEkkfkxMJUZTWHYmRU41M1A0Vkk/fmp9Mkw0RiV+UEBi''@;'; put 'put ''c31zLH1oeWBlfX5Sfig8al9fc053aD5kMDh3fDF7flBkWFBsMCYuOElraDRxaGspS14+KVVxTH1JZiRRPUptbyFpalVsXUREbHEvYF9dcmlVJkVgM0tKWSl+RXRbWSl+RX5Oe3M+XkRAWkx1d0Bzc0ZjXmc7STMqJXJfV3ZSMypbOWl8LlpWWGNvK0BePUtvVTIsXjF5dyk+ZSNsKWp9fFhlPX08''@;'; put 'put ''TnFLKEdWUl8iWCI7RTFRUyxtWiY6Mmw6RnoiTXhkUEJ2dC47a1VNPmlMazBhQSFJaUhjQG4zPCZFfWpVWHR1VXFIcXE7X2swMi4rSTEhUTxtT0BTWWNJbSJTRSFLfHB2eV4xUSVxUW49e2h2d3FMUnhvfT4yVVh0Z2YuKkoyZEwuYno5LCZya0s2azokKjckSnFsXl9XcDAoUT9WMmRIZjFiKFpB''@;'; put 'put ''IW5zaEtpelFfdzMqTWswQXk8STE+cmtLcS9hLkpdVGNNOUFKRDcoeldgYGB1emUxQi48RTFPIj9tI34ufXh5O2F5cnpXZTVOcV9bcihyc0psJDkqUmBgTygifmghX354K3YwY317MkArd2I6PC8yO1VTYUxBangjUTN7Ky58M2hDUl9yR0A/dENHcEo8YzBdTXppZ3JOdU9SLk9dSjdSTVc0bjx7''@;'; put 'put ''TihocFRfKllRITNPeXomdSwmSnFSXiJ+OjxKMnZqamtDfXlERHteT19fL34rUiR+fGtqTUg8RiF2XjUxSHBDbUFGTFIreHl4MmlvNklEPCFGbTosfmp0aTNJOjohWXlqWnJkLDZZTSF8dVdsK0dXZk06VlZ0KWR2TkxnfWEjOX5BY3g6SH40akljdntWezM+TFY4JFZCc1c9LkZPQX1gKVM0KGFR''@;'; put 'put ''cVY1MkwxP1tDbXxEQTh9LE96Rj9jYyt6dlFkXz5qMF19eXpMNGdlcjg4fTJ6eGsyWzFlK31oYWdXY3hKL0xDNHkhLzBSel8jOFlXdzt1akpgUm1iVyk/QzBffHssbXNgbkZjbVFDLD5AaWZAfWB3ZyhMVG4xdX5BWyVofE4mLHlAcjxgfXoyUCg4bjdUWDxLI1B+JF0zPlVvbi5VKWEjR34relAo''@;'; put 'put ''R1lfO2MjKFV5QFFGb18ydlZ8RWo1fURvJn5QdG8odGlpX2w1XmslYFFaVnwkNVE0KU1nbld2bWIvfGhAaX4xY1BXQH05Mjx8JE52fktYUFcpSXpGak0sdi5bPlRRP2AyM19CeXx9WEI2aF5obDFxN25vV3tGeWxbNSlbfUkiZn5QYyh+dnFgc3VJTS96W1J5bnxGQGIoPVQ6OVFwRjcpXnB5N3xw''@;'; put 'put ''dTh9Pj1mbmo0TntzVzhbYVBpfTQoJT41ODdUQ0RNL1l7b0IlfVlHY3NwYzBGJl56RVVgUVp8fVVYUldnaiQ+KUc9MitgVHcqfUlFSUxZY2ZuXUQ8Mj91emtmYDs4N31sP1IofUM6OVVkNzVLLyVLXmBddip9a3JnPTZ9Tl9RNDp1X2V6Ii9pcFs5Mnt8bTt8c0dRTS9eW1J5R35Dbz05NWU3NVMv''@;'; put 'put ''JUt+YGwrMX45Ymc9Oz8uPSNzRUsjaF1wVHhCNDltL1tOMnd+UHM6OU4mKFUxfl00PTlqZzc1e3RvVnxbLkZ3fGdoIT5DOE57M353Y2ooPUguUWtHZm5jRlc0eClaUy58eTVZKHVnXzslQGhLcGBpXjZ9LmNmfkw/Zyh3djltaH5WPUJhUSlLUF8+I0l1XztFQn5dPz1+UG59XXk6aEtUfXk1a3Mw''@;'; put 'put ''TEtMYUp4W1VILkMoeTltJH13LEdjNnxXREJ+cClXKGJIJD5Gelc0filaU3BfSishfWtpPTltbnNwTS5wU3lfIXZDflVYJHNMQWc9b3t2c1Q0RHpfZXVCNCpwL2VUUT9NSlR8bGU4aDFXXjtlSnNwLF5RRjp8RmtmfjgrZVc5W1BReX5RXUVjTXRCYV5+LFo1aClZY19BXVpTXX47Sy85RU59XUN5''@;'; put 'put ''KFVfezJ2X31ofWhfa0hsdSIrMjtuKDxeelVvfm1wOWh5Ly9pTV0pSmt8IzplXzBEKGgufSwpKH1wIVFXTFJKY0Rdc1Irc0M/N1RkLH5pXX1WfW9XQm1ML1k0KzdffTZfNz5aO1ojMF9aQzd+InVbWFRdZGUpfW8hZH5pY2MrcVNLdkRgIyRSKGoyRjcuPi9DKnxfdC9ROXlBIkdAc3glfCtMbXNh''@;'; put 'put ''REA5Ll9eKTl9NmM6dkBaIyRvKW9GQmBvMSV+XyN0YHt+e3R5SUs2S3UhKitEbWZfZipTN1JEVWQsKzBdamxNbjxfSGMhPzhhKWJCMml3MTF+b3xNRihETzpXcGk4N3BsUWxRemVgOE4jOVhqV019c18pMDVGQm1UXn1jbTQ2UXBqQWV4Nyw3VUNINlljPmAiOmI2LCNeb1FncnRrWFJ2aFlzcDln''@;'; put 'put ''OklJaFdCLEs+ZVVmbmAvYy9teWV1Z2d8MWcvbTh0b29ESixQaWY0cCp1NXU5LnY1eUM2TkExeTshOj55K2h+RURedXN5OTV0fTdJcHFUSVB+WS9dLDdRR1ljeF9BJGx4QHlfSGF1dXRMXjhnPig2bldCOj9iZWU3OiV3PnkjeDdAU15lTDZ1I1VWSTdnQyQuRzowPjErc2hLUThnVnAkNTBkaE0i''@;'; put 'put ''OnlKdzBLVCgjYXApOUJlLm18dCldI2J6U3RsMVlHWHY0eilnPzZuUyhWZ2pjNHJKSS96LjdOZG5Fb10qJCUlRGV9UH0qUz09TG40ejQwZyx1Q1g4Wy5PdytoK3k1cSR6QGpjbkNxWFpRWl9DUSZRaUJiTWs/WS5Ge1lKNlUlT1c5TzFMYFNRYFhYYW5zbFVRSUVdYFsyZTpXXStIZTYvNmhlRlJ4''@;'; put 'put ''THUrNGolWUVIdSFEJnBtbFgvMkBtcFMhJkkhZl95NVkiZFJ2bSxFXVpbVFpAIy5SdGxJIXg3eSYlQCljMzAxVUJkfTdGNlZQUmJ0KXApb1h2eDd0XUExQGRESTlzSihhaF00WTwoUS5bPXEiYXUxPiovO3prOi90NkBsTGFoOXAuO11KOnxeMjdUcT4oLzZ5L14iVDgsPjEoUlBXQFJuRSZ3N2Rr''@;'; put 'put ''OylAfGRMOUJyN2tdTzJnfGQlSSN0UjVfOl9JbzovdGkyVWFZOV1SQTsjZXR9JHF1YXdwPioxPio2Rzp8JlY9dCxbJnZhOHRSNWQ6ODxycUo5PUlVNyV5Pl85NmhMM2JwY0w2Yjk+KmNpJWJDUCVkZ1E9VTUpNGhGUDMsRGchX3Q2bVMrZEo4aDBGK0k0c3l3PnYhRDFRPU9fU2ExJENFPW05M1pt''@;'; put 'put ''I1YlZHdEJjV8JVtSfmQqU2xML2syLygqR2UuZE9deWpZPCRUZUZuSCZbMlMrZFMubEwva1pEOTAkOGNMYzckZ0lPWCwjU2E4KkhoUEBMOyF8NW40JWRDZV9TQVVvN18yIUVuMyxhIXRhKGQzMVFYOjElQjtzJnhIVWFPZVQ/VEY5dFM2TihbMCo2eXNUe3lRRzpuJTBVXSFdSkJlZyFmfHR9aEQ6''@;'; put 'put ''M0pebFZRZlssb10yIWhKKiNYIVZmV0JfSlVhckhuSllLUTledyJkUnZAI2RWUnloTXo6RjNnRUBCKV1abGZdRCxOeF93KERATyElPj11NCVMaUI1KTdkVTk1dHtfL08lT2dQJmQvNzh6NExUYyR5ITImajZoOUErUFNibXNuJF4xUT1JK1I9OTQkalBEITd1XVVlaXNNZCFbM2ZEfjxJYXVEdXNP''@;'; put 'put ''fWMhZEUpejliKlpVdzRwKnEiPXdQeCI7Yk9dI103aDgxbmc4KTB8OXs4P2Y2ak1WbWVTSkVmYFE1ak44QjtbN0I4eF9PMkEhMXRCOGtTRl59N1JiSGE1RSt4I2Foa3UwdDVndmNeXy84KVtoZyFhQmBTb0hnSX05Y2RFZF9oRDhETkBwRCs4P05IVTUlNW5KVlEqJSNIVDI4IXFnMVVAZ1s8Yj0w''@;'; put 'put ''alYkIl1XOFtKUmsialYkSzh2Iko4eDtBXk9FamNNKDs3d1g8V1UlQD1hbl8ke2kyY0VdSD1lLnwuRmQ1ODZVMk52bExibl1vSktAMT1bZGpLa01peG5tbERfeEM4NiVgUWdrX0FWQFg7cDFFKmNkPE4+QlJKUmsyMVtZUypTJF1qX1J6Vn5WRTBJTCtzSXNQLzU6Ym4wbHUqYURLTjUlLkg1L1tN''@;'; put 'put ''aEJtQkBJfDQvdnxwOHxASXw0MGEyRkJjJiJFczVRTDhjR2M3ckk7N3ZsRGlUYzVkJVovbWpaQCQuN2gyN3R+THBKJm1wbFp7dkQmRnFSbyk6eGtIUixJUTd1PEVrKzk6JkAkbltRbmNkNmB2RmlYN0NYOFtBbUxQIjc5SUg9MSxKT0BjKiNtNHpuaittQlRsQGMxdGF1VXVqRkx6RmY+Yz1nWSw3''@;'; put 'put ''PmdiWl9FSS8kNGpjUDd1QUBdWWtwSDouN0w7JlQxbTk6VkV1SWpyWDlySWZzWE4/RV5tcGxiY0R5S1A+M1RlRFchfV41cEpGPDshIXQuXXQ+e217T2k+Z2JdWkVQSGlFOWIkNSRbUChZQWVuNH5wQkkoSkE4I3h4UXl4LmQiQkgkUlM+M3sxOz1bZHM+ZnluW3xkTmlGS3leJUVKeVsyV19hby4j''@;'; put 'put ''dj1uOT9VfmleYHRxbX17ZCF0elU+bXtPYntuMjFydV1ON3dtX0dBO1pjczsvb0gwVUt1XUdzP0tuVERQS1hebXdndXBtbGUlUGBsJUpvP093THN4aTZgS1ZwfkV7XSZZOkV3OyQsbD1ld1BIMUkoRElhSUhzfCZKOW1ycDJOUjh+Vy5WT0hqT0hweE9AKDA2UnZ+U05MOFhYRUB1PHZsLyhIfUtP''@;'; put 'put ''OCtSX0YpMWFWJlklIyIxYkNScldtOixtNFtlWjlnWW9ed3c+eGhNUjpRNUQra15sJUpdRiU+MmUwfk8xNDE9IixzIV9VMjY/bHtpRV0wbTZoemw4JShEXWxfUWZoRz1KZTo9Q0lpQm0sP2dCb0NRQmt1fDdHJkVBQ3MsdyUzPk8hZ1dVX1ErNGFJUX08JC5kX147WCYvUmJ4YkIkWCtTVDVOfVJ2''@;'; put 'put ''PnJtLHZ0fj8lQz0oUyNvUjxUW2RodC9dYm5GST9nVS5YYVNKNmNfaUd7NHJ4KUw7N25pTEJtTWYzQ3xbc31rZXopUzlqYUhDVklgVXFTPSRra3w6XWZbaSMuLis9JSFLbmp7T1FGcWVFKUt1KV1iJShAMUBHOEZpSD9OUjFdSlFPI3BqfDcqU3g0LDVwanFdcWxGWDBeKGFON0FlbUxsMngwfFF3''@;'; put 'put ''TCY/Qjt4M0g4VWF0YitkRlgxZ0w9UyN3T0MuW1NEO2xNYGM8KDlsVnhxMEUqY2QvWVNwQGFoTUpsXiNeeikiMnRUcEBhJGYzYFpsJSQ6Z3VsPChdZGRvKE86PTBmTH52dl9BbUxVN3lvJl0/ZUI4PFc6UX08NWE5N2pGcnojTHt0KiM5UH1Pckhoa0xyV3RpWCY1W0QiRyNbaFc7cmJ9eXl4cXl3''@;'; put 'put ''UUVkZW5sYyRQPTE9MH0iMEVQcj5yWEI4KiNTOHhiZWBvJDUoKHMsNyp2QWUpRE59IkdCTDVVfFo7RXVbWns+N2kwWVZULHA3KERUSyt5ZHlUYytwezVzcWtdYVRuPSp8a2VIOChAfWtsakQ7PyFRZTByQlIvQHclb1QkN3srbms9aSYjeUcmcFdwMGRiNnVzSjgmajQmZDxQbFVkMi5mW25ReU9S''@;'; put 'put ''MWE/MztZSm9YMzpKUVpgL1ltZEVkODshQGtLJElnU1A9VmpmcUw2IWtBJXQhTSRLUWwsRWU4eFJsXVc2YXs6VnElPTBqOlIxZG1wOml5XSUlN2pjZVV8IUksMUA+NGJLZTo9RDFIZUFlK3VySFt2Ozl4NzMvW2o4Kkplc0hwTEM0aChlMFo6czB4THxRbWxUOF45O2c/JXlZVX5PPFY3WGEwOyxk''@;'; put 'put ''d2NQaEg5TjpEM3hMcW5CSTxtYyQ2W0FnPzc2W0FndjNYYVBlSFtfXX5qbHYmSU99eEQ3ejUsR0tIcyZOZElzfFtFK2RBajJaUSF2MHk4UmJZcUoxYCY/N3xRbmROSV1hQWxCOF9hMysza19RQmVuWmZiOTRdN2VpQGVQJTIpYylfNzZoRzg2dWNvIipebSk9WCMpemxdbUJiOSxLNjZxMiN0MC5T''@;'; put 'put ''Z0NwWntvLlppZWYkbS82PCgvUTt7ZEI1QFljITE8a0kuYDUzZnR6M2QmXT8xfj9rcFBxMkNxc3JDOHBzO2gpU3pVOHMsWWQ5KVo4b1gkZFtLcUhGeU9baXNJSHRIOmcvS0kzYShLZTRjYnFdOmdaTzdKN3JlPmBXe2BAYSxJe2clOkpjOXdYQTM8QDQ1KmZ1ZzkkYns6VFgrOmtrNTFQWXBqJGdR''@;'; put 'put ''JXU3UXNqdTBebF9RUyVCUEE4IndRbnplOzYqaTJadl06JC43Nmh6bEdYb1gyU3xoWDdFOmNLVmUpbVg4SnJKSSojVFRVKEVFN183ajtmYXUhQGpQV0V1SUp4b3FfSGszemFReS8uaCksKzZrWDwrcEA7eDw2alcjR3VMQyg2ck83X1V9LDc5P343cVtwMlNFWjY8JE5SOENjQz5FWHBUQGI9ZiNu''@;'; put 'put ''ZHM7IXF7fXUwKD0jUD1XTykxI3xmfjBuUjgkM15yVDwyKj0sUHw4cXY6eFl6eF8pOjNXT2hlYW9JblUlIm8rNUwrKilyfjVWTiYpRnwpMWV3SFJQXWxzNE9uPncoK14sVVI0PWchbkNqUDN6dD9RVE0zVm5qUmpJTCQvPU1HUnBAPkIlQkAmbE8zQltjIz9obnRfRkY0JDkxdm82fCptZ00rX1Zk''@;'; put 'put ''eCp7LykpOylvJDpvXz45aFtuMWU9QzR1Li4xfFpZN3JnQmJjNUtEUG1+bF87JjpaI3lpYV1GVShkSDRUby8zREBIWmBhSHZ8N0JzQnh2KSkjPmYpLiZqTmp1NV9OYz85NEw8TDY1ckpVS1BDYkJjYnZ6PWVYaklNLENxSXdHK21nJD0kSzEpRUozXTFmITMrTTloPGkkTWJ8NU9WNjc+TStoXS5f''@;'; put 'put ''TmBaU2c9M1FEamRIRD0zMUZnVnFTY31NR1M/b0RfVyYsJGJLIVFJb3xld1VtNU5FdC85T293S19wUUB0eixeYjA7X0RON3NpW0pGeHclfVN1S1Z7Il5EMV9MfExifDVCfXFQajBIXVo5aU9wQmV1QWAiU00/PlhpQDNxR1osYGgxMGhhMXMmVS4vfUtgWV88aGJVeCFAfENEWXwuQ2lBRU1gQmoo''@;'; put 'put ''eHptLmVMOnUmVzB3bWIkPjoiPUpXdT1iWlopNntiWndeW21CLF8jd1p8U2NPN1NhVXdgfk5JY2dKOS5sK149MiV8S2N6I2A9QyplVGMoJE4idTx4JFF4OmI3RTUhWFpHL2hEO3ouV0I0LzppOn18T00/IU0/JGJdSDN4Y3tCM3JQZ0U2QkVsYGBhXXIxYShQeWF0Xz5zVWMhMjomY1pgJnpbRCF9''@;'; put 'put ''c0E1aWkjei5qRTN9VD1JKiwxVlhtNllPKEk1ayVmRSV8V041Ljd8PUFraW1CNnVsX1JDSzdAM1dDMStOSl58LiJ1Y21Cfig+fSQyNVR2MXlUK3k2ZVtYIjEmWFVDZUI2ZGdgUiI/ckg0YCVbRXVgU2Imcj8uIThxZCZQdEs8QUdwQ0tmYE14QnNGOkRmR2FhISZ+LldMcUArKHpCInMvM0xVemVv''@;'; put 'put ''MEZUODorbyp3K0Qsdlk/dl5bZE1ofEEqeD0kcUFCc00oYSlNPHRvRUFzKVp1en5bJFdgfjtCKFp+WjNONDU1RXh4KXI3Lk5md01NaGMralhhWzZkdUFhUzJgQ1J5cldEUyhSUkQsbUN4PXt6L3REelRYJnskeEModWpFUlNkS1cyeTZZZVRZVTkoeTYvKHZRXWB+TXBMKk0vRlN+bzU7OylibEJf''@;'; put 'put ''bmRZZSlqLzFyNFlBR3FPKCUkNWY0VGokQFEkKE42UjwweXA+PyIlWSlJVXooNHJiMzFneiIlK2tNfT4iJU0iKnlpaXAhN08wPk5OKk5JciouNWkyXWhFNyxrMk9DN18sMiQoX11pRUJ0SWdfa0JRVz8zVU8/KCN4OUlKOUovIXhqUTd2MDx8YkZUNWtHQD0heHZXOVNWNWJdX3UyVWVhd2o9TUA9''@;'; put 'put ''YXhKZmE0bVJCSW18Kk0qSVklUyY1djJkSVk0OUshNVUhNUI1Yk9WQCIldTdxRkFwMlE7TmBRWHRJPEtDPz4iJSxfOjRWKkI5d2F2dC9UKWJJZF1dcCN9Mkc+e0Z2ZSxrYVokX0gxSWhkdTkrUFlmM3YsTHRiXkxWO1BCQH5Ve2s9RlR0XiZdbSMhbHhISkQ6eDk+fEl3XWhpbHZqWXB+VHVKU1U6''@;'; put 'put ''eHteV0MuSERYPGFhS0FpS0tRVXxZUmhTIzNPI25XMHE3IUhYR3o5ZmE4JmpbTE9rRF8zWzc4PXB4IUdVWChIXV0pZXBUcUsqKE1kbGJzYSlMUVRAPSp3WlE+dHBCQnZuM3cobGZQT3FwIkhtdHpWT09IJCR1aTlkL3Zzfnh7XnxIQSQ8RGJqaGVLd31mRGlLSUA9M3VlT1t6MExBZ0VAWEdidEIh''@;'; put 'put ''MDlvcGxCZ3pOYyg3cGZRK31PcyxRKi47dFEqQm1AZEJBaVp7WUMyIUl6biZCfFZLLy5qRGhdVE5qRlRbVWReYF1vci4iZV5GaTc0SjBXfGVOI31YbllyKUhQSz9pIzF2ZWx6dEptbSllcXxxUC9heSxXSmQ/OiZDanFTdWppRmgvWUx7XmQkV2ZwVU1pUExYXnYuKzNjY2M7aDk1Z0BCeE1hcmI9''@;'; put 'put ''InN1ejkxSmtiIUQmQnE3NUdeaDNRO1JecCNIYTUhN3h3QXJOO25uTSoxdFN5VTVBWTRLZiNgS3YpQFdhREBvIkI+d0RCNV1mUCNMNCxjQ1A3cV1hQU8mPjhxaVJEcDZuPVYzU1ZsTUYhREJuWUxPTlUwfERuMTRFY2g3ZzV+YGtTWkxHNW5lbCojMXU0UkY5NWN0VTVCMG5hOllJIVk4Y0VhNjIr''@;'; put 'put ''eER1KTQvKE9KLj8+T0NmWyZHYDFnejF6SWhHWzR6dGY6IUs7fURhL0xIRmZrbiNIS0I/REREL1hkXTJnMEh6Qj5IeEZuWSkoOlskLn1WYjNhJnpLS1E4P1AmcyZxTFQsUH5VcGtgWEhUdWlnMz86W3ExXlF+RlQ4Oys6QjV8P0dpQzM5OEV0SjxDVnhrXSNOfEx6KG1Ma3JTSn5LUUUvLHgvQzhw''@;'; put 'put ''dHpWOVpOP1kmLnV4V2lTJlpzPCpIKmNqWi5hKCZQcHtYSEJbUDg0dWclWzN2X3tIXi9rZjA5eFZBRjNpLnFaLGtLKjFEblk/WTUoaHhVcS89KihoNGkrN0hXaH03fndocE5ZNTpJLHN8dDB4RWoxVTV3b3U4TjdLKzMmNzRHSFVFLGQvZW9rOiJTPy5odypFejJPUSw/cS9lb2sjdE5EUFhjM1k8''@;'; put 'put ''RCFlK0xbTyY4UyI7Qnh9KUxnclgmIldAVXZvKzQvIklLVmc2NUJzcmdHNGNuXno2alA/UnBvOGxbNT89TFlBailbMnVZJj1QKU5edkUkbnB4NmJQQnQ9bGEmPVAjTX5XLCRbWlNbNCJFbFBIcFUjSHsxMjxhZ15kLlg4cVFWeyY3OjNjTl0lTnVTKDNmJWJ1OlcpbnNQLGVJa3BOYE1jaTglaiF8''@;'; put 'put ''VUtKWU83X15gIToka1BuTG5UKzEoTTNYTDQ7M2NJKTRHdFlBZkhRJlcpM24/PFYjSGIyeEwoRm03PmxkI0o2OFl4MTA5IjpJQVtrUi5qXTNqV1dgbjhSQWBdb3hVfUEybV02K2N0TUBrTEM5aiNINkp3TEJaKG1CeEg8M3c+cCN3PnddRT1henltY0FnKUF8KzJaMnlzX2wjI1QyLzo1MipNIWM8''@;'; put 'put ''S1ZndzlWa1BPVUhpTmg6Q1QkXXswRHRsRCp4W2M3XTlNUFIvUEoqbDd3X3hpNltoS2goSzZTJVdqIzdYQDMsWEZZej1MZCtlR3FJdSQqV21qXSFnaVcyNXxlMWBrUzFrYVNIMF1lMTRMemVtQVFsTTM5UUlhSz14JmQ9OjxEQEZiTV5pS2hvO09GQ2lPTUk8RDF4K1JHOyo7bj53a3krJFdlOS9D''@;'; put 'put ''ZykpeERidDVJa1U+d3JGcFpVQ2cjSWdbIW0qWUpOWDU5Kn4wRVVxQWciaGghTnAwRSwqTzdVNSYobUc1P3ohbFFdViVZMD09cUhhc1B0WnhPPzwyRSVafkYlRl9KI0g5NGNYT1NBYDMlQ3o2SWUqTUNTcTF3Q3R9VzZkOGN+SzFva1RYWDt0alAhRSswdS5EYl1tdlVBd1skSlZLaGhRdzJlcFZS''@;'; put 'put ''S2ciY2xUa0MjKkd7bCN6Nlcraz1pdTd0UURJIXlEQUFPJi51TVlncypSKmRUTXBCbiV4Kj1IalAzWiwpZ192emFCKU5WQWtVMWpLaGAwUFRKOi4yLDd7SHpMJnRDQHFtPnc7QnBpfDA0T09wdXp1b2NpXldKcnxxPEhJK312TzkzYyNQbk9uSCkpfXB7U0lsM3ZfbUEscHExTG9dKHF1OV0xZ2dW''@;'; put 'put ''QUUkIXV6YiMvciI6PiIlQVJEblFlM0s7d1NYLjVbdGwlejlvcD5Hfm57S1UkYHBXTihRU3FNaClKPU0oV2FMKzBDbz91YzA4OHIwcHBLSH1Sdk9kN0JtY0RTcEBAJkR5XSIldihsVV9NbzBsOXZfdy5qWVdpUyZXSU5pNFZXRyU8TjNHKmgxVnQmR3BwNzByMU9GdHFCRVZ2eXVRN1VCVCY1dmhN''@;'; put 'put ''azN4aVo4MzhSZEklIUpdX3QzUSp8QklUUjFWLjMrfG9pT2pHQD1ndkVZWXoiUXY7eSssdCpFQGQuOzcrW0gzYUBvUHB+IlZOOmAiZT4/IiVIWGA8QUNVa1ZpU3czJUtlQk0oJSlGZmwib1l2JTtAdklBQUsuIlAmNXYreW9MJXlUZ156Lk9uYGFTR2B0M3hlKEgrZEFEIiVWSD81dVlSJXBwRUpQ''@;'; put 'put ''JElZWEBwVEhBM0xaO3YsZnEqLl0mKnRyIVVLcDIoNDFENmxFU0ZoWGdIUjhgWGQ5ZCZQfGguSENDI0xPJnRUM3Fxa1BlcV1OVEFWd09DRHpgQT42X31Xc0JMeT5FeUs5In03Iit4OXJ3ey9QaiVMTWNtVFB3XnRhUmUmWDFGekFJNUx3PFQxLz5GI3ZCOnl7XiJZMWlNJERhWyFuQmRYQVJCX2Mm''@;'; put 'put ''NXYzclIlIzU4KWcmWUVLRCNHdVJxcHhDX1NlfiVCaTwrMHxuckwrSHFJQD1OY0BZIU9FR0J4T08lODY1Vi9fXXhIN15JSDt1PDdWS3UxO3ciaHAwcHAiWGxkZkx+NUdJUWZpSztPX3RacXU5I1dtdWBafjVKZiIpSFRDYTR1cHAwWlQ6YCRfI2dQfkw8V19FU0IqXyJnQD4sSllKeyRhUmNpMEdP''@;'; put 'put ''NWQhXk1sa1tJLDdJejArdnJfUF5RNzFMbGx3JDE3Yl05NlN2Tk5oNmBgREU/T2MkQTdjcFZVI181P0FdXVk3JjB0MGZwLjlnNFtKTFgoUyhXTyY+WW1sI01YUlROTmcvP1hyU25QLGNWKldUaUhaN1JXNnFuTX1zNkN9T0JENENORTwqSmxhaXclSzR3Yj55fFg1YVhFI0drZSo2dzM2VGZFI1B4''@;'; put 'put ''bmhObD1yWXpSUGplOyojeS4rU25ZKDJ9Mz5DIUUwJSF0Vlg+dnxMNXhDKjMicW9PZFpNNUNsdz99QkBiaDFFe1svM19USCh6WStqa201Zj1IL003SDUlVjY8MSRAVjl8bnRYbyRhOlYoeURaO3NjZ0VWdVNfLzVaPTBEWnwwTlpeJlovR0hUMEhbJFFIcnd6JE9HRjdzTS5uPiFbWURAJmRyOz8o''@;'; put 'put ''NGtRUyRTbF4vcV8/MDFPZ0k9YzR8IVo7OUs/eillMF4mVWR8W1liN2NFaHl5N3JCQCQ1MzRAbXVWVkhFM3ZQPGVIIzZIOi83bVMiKEJEbnRzeWBGQ30vN0lvQ0xxeiY6X2F0czJMfDwme18pXlFWXnhMYVBuKnIzLyRCWndad2Yhd0dyQDl2NHI5KUNEbWlVMHRoTntEKnBhWnd3S3hHSCZxJkw7''@;'; put 'put ''dXc1OUNjK3JUMEJ2ZmNYMzNoO3JmQEczQ1dIVjd4ZG5hVzxrVUN0RGpdcyZFXU1iSl1MRUIscUYlNVYwdFAjeW9rPjo7Vjo+ZDZOL04iQkoiR1g+NFZrJno+NHwxN3tqW2FXfXhbMUZCOndfOHpvKlgqdlRwTiw3IXg2ZzJoPTUwKFsudXlDMHR5Xy95Wnh7I185ITlWd18od3tZaXk4fTx9Znt3''@;'; put 'put ''WGZbZWppKmVnSiZ4JGkhYjp2UzZ4R3RleCJYaWx9a1diN3olUDIxZyI1NUdWX2s+NSp6NVAzS3dWSHF8a05yKF1jYlExUHQrLkx8QWxyfHZOQTNQdEZhUCk2dntdbGhhfHEpRGtZPjFHQjQ3MShaRFY/IiVkbXMzYHxPZHcpUUJIYlpTKGp8cHdNNytWMWg/YEQ3Nlh+U055JVFGcG5zbmFdP3ZJ''@;'; put 'put ''aH1CfkRrWVNwPnB8YytIUX5TL1FmMmByKDkqTTtkY3N0flZUem0hME9EYTp2U3IiP0NJVnpOK1pYKyZQX086emhXVH5ENzxuZWdIYm4vfUVgNzd3Si9vc3ZgQjIiTXtOWShIfiY2PnNYYTRbR1Q2fnVbS0RkR20+TnsqKntETDJHLyhyWkBESWYkOztKYmkzTXtMfUIyTEwqYHBrUSh8cnc/WHN3''@;'; put 'put ''P3VIQU46QlJ8XSY/eS5hK3Ipb3VrcTc+NTV6L1BLQnolJks7NThdT1p9VjMlal1yJl9fNWM6UXs0P08vOj8vbkk8UXU+ZT1wPnBlcVN1czEoTUhENzNOcFppWCtNX3h5RiY1ST9LSDEjcGJ4YSZbU1BPQnBGVDJzQDwlMXR3OjpRdnM/X294cXYhT0Qvc3NlfjZ9Qjw3ZzNvJTRTe0J7YUh7Y1A2''@;'; put 'put ''dHpLUXY6TGteRmQ9KzNfYDU3UElKQ2lCcT5HVkRFd2tPMkhOM0NKQyQsKEsjX0piekQocmJjRDE+L2t7enRvbFMkaV0zNlU2RHpEQkNufk40cml6I3Q7cjYuQXI/MlA7Q3pCcGJHanlgLyp5XTg1YWMzQUx8YkNkQWE9V208aGkrOGE8M1R0Vl5adE0pekV3PjpvT3t9Qk47ZWI5R0tsMT1jLnxM''@;'; put 'put ''dW8iPkFkQ21Ya3lFcmtgMDFTM1N7TixSV1o2Mkw4RH5Ta0QucjVvdCY0WkUxZS4+TGJhbEMxRmMydStEciovYmhDNixdI3lGZW84b2h+fWZbZTNqanl9X0tDKDFacU4+MXhaeHphZFR7QSlrWjRmQC4+Yz9aYF1ad3dORk5vaGA1KHp8Wm08IkgjZSN2c1Zwe3NNO2U4NkVRU1lDXWcoL3wwT2Iy''@;'; put 'put ''WiwrcmxYenlyc1c6NFVJQ2tdUG58cU59KXwlMlF0JncuUUhdfjVwTE16bUF1WzQ2czJTJHBrY2hLcmQpLjV5bTo9RSZYPnhffXt7ZjpyaW07UTlydi8ydkBfdFlaVCJmJkNDbF01WTp8WFY4UHx8S0QoVGBKLjhKZj1USDl9PkBNWSRIWDJfcV0vS3pPKDJVcnlAY3FfbXZgTmY9fmAjNVpAfXg1''@;'; put 'put ''aHohJjkxVl5aeU52NnhxIzdkKHYyKkxUMnltRj5hOi59PDo7TH5jKE5jNlhgMmZObUpqMTZufFJjcFQyPU96Nk1JTC99ViphZGNHTm5+cVd6e3chakQ+TG5DcmF6b2FgIzhHNFE6YFI1e3BmUlswL2kmQ3hWW1tbKXB8KEw3Ml1IKW9uNyY1NTIyMGYxc3U9RFdaW1ZTNlUwPmNPRWR2JjZ8WzdP''@;'; put 'put ''VCE1NnMyZHZ+YGRoZlo9TSVNcEM7dVkwUWFAJjtaMjVoUyJaakYiLy9aTzFueD88YmA6OUJkWGQhNzlrbng2dXtNS2JCPyQ4RVFkdlc+XmA/P2taJkhbN29PKD5ZfHgpRmU5bWk6QzR2SCk3dCV1VmpdaFlQZzZhe1teNS5dcVomWCVgNGg2a1QxVWdUeG1oNyY6W0BYRlU7P2h1fkxseXdBOXlw''@;'; put 'put ''VlBsLzh0WlQpP3UxeUE6XXxvfDhGUmkyPmVXRWBVYnpWVWVlX25zb2BWImVeclhUcnR9fXZxZlU7eGtXKF5fU35jXixRSEdjX25zSGBXM3l8XVpSTEJhZF9kU1MqRzNwakpiU2BJfjEiQ3MzeWRDeXlTMmVNTXosWHBqT2JSYCtuY1NGWSM4ZzA9L2BTb3pLZm9pNS5XYiZvcGg3WypjP01hWkJd''@;'; put 'put ''PDU8LyUydlZsbllXVGw/NSVwQCk3OSNkMn1dS119YExFenwvWH5LKSJIXml0W0V7RTpOYS5bO0Uhd3BWUGxVcm40MXs7RTVRO2U+L0FhMU9peGQxRGQxaGc0eGczWnN+WU97YHNbS2Y6V1N9clVSOjNUTGJ9UzYxKixjSiNCUyglfDcre2JkcSVMSzVfS3R8RltARns0NVFYfHk2QEZTWVUoMF8y''@;'; put 'put ''eChrSmoyaHs5JEFLditHb3xBKzpIVGUhV0NqenI3P2FyTnklS0c2VjBgY0tsSFJkZzw2UmFSeHA+XjVxTCZCNjlMYnpOUF1mYWNLJjBMbn4vJVooKSlKOj1zXSY5JTV+ejgicl9+QW9WaV1YKChzcVVlfileSktDLFR7ZSoxTjBaNihlakkmeU41Wmp7by8vYVdsYisxRm5sPGNAfDhYblo9XzRF''@;'; put 'put ''SWJiPz06THI8czFgbEMqN1JzMGAwLCVTejczVTE2NWZYS2xdWG52PWlXe00zeD9YWTBtRiVbTHxeN3ZTR11wMiswTlBLQkFhNFRPfHdTQTpfWkNOQ0IzaWE+TTphcltdOjE2QWA1OnpHWVpUQ2xJODpYRGhwMDZEPmNAPk5GI2Vibkh7JDVCeigvXW5wO0cvb3NHYDZEUzFLTkg2KTN5c3N+QjFY''@;'; put 'put ''dEtlU0VgW2tadVtBRj50XzM/NUVANkREYHB3ZHMxYGRTWTNCcEUmXWJKcnJmKUJ0az8vNnN8KFZHLiEiTnxLPnJGekkySTJEWkskdDdNbkhdS3JbXWBZSyRObD56JURqXSlRJjV3NjJLW2JEZFdkL1pxVGRjPlV1RGs5cUZDZDp8RlFtPT5eUEFDMFdIP2NgX3t0NSNmPXpGeVVdT1pIJTVwTEow''@;'; put 'put ''bXEjQnNWTGEse3I3KVoiWjouaXM7enFRejJ4XihhdXpndSl2aHhvRigqSXFwanBqXzk9P2h1Ikk+amMzYU1eZXU3Xn1je1BFTSVFaF5lWyZFYVgrKkdOak9XcV9xejVdIiJ+cV8+cEtoVSgzV3w5LmpFfk5PTGhXJHk3dCxJLlFvVDFZIi5wc3V9UmM5aXJYN1NybXB6UzNJYGI6bFN9XmZZKCFj''@;'; put 'put ''ZEJVO3U4Wk5sZGhUe3g3V3BlMFUoVn41OyFTSG94TitremwuYj4qPzQoKWAhY0ldVnxybT9fOXtwb2V1Wz9WUl0/bUxOb1omLDA2fVozKUdUIlp5Nj58QlljcEJIfm96I0hscjJSMWBeUUZQOVZKPFZ2fFspR0x1czFoK1RSY3FmMi9kMWFoeXMlXyt2TkQ2eDY+KTVtfmBMJjVFYGRZY3AhYUo0''@;'; put 'put ''Tzp+fHguJEwrQz1RRDp+fFspKmUwU3gjZTIwe2Q2X1drXUovMSZqe3Q7diM5KWVpJSx5NnF8NCxzWmt1dSlLclBdRnJuOmUzWFk6ZXdWb3toN3MlLD1BclFkaDFzJnYyLkBKUnZ3YTp3fEUrJWl8b196JiolQ0FmXSgzJEgkLFFtOltWX1t3RGBPYmNxOnEmJVtJLCYjNFNSWk4mQ2AmImRPJC84''@;'; put 'put ''MVthbyYsSjAzMT50dzEkTT43Vi9bKEM2dihgWD58SjgsR187M35gejtCMmlXfnpwVmMvfiF8JFRbVytxVj5fKVhPeilvS2pnQko+YiYyX187ZzVhPEA6bTgsM0p7OjYkRiFhSyY8YzNlY2YrRFQ7UGVALlpxXSlxem5AaVgzSUtxdXtIUF02T0pJcX1WME1JPmxxWSl6NFZybml8YjFWV3I5cVgp''@;'; put 'put ''MUNkTlcjKTN7YHs6LDB9ViRvektjcVdLPWBIO3xFOCt5fSgzeF9ONzBKcXBaRnBfalh9Vnx6eksrPiVZZWpmNjBUck9RcmY0OlgjIns2UG5EcilWZnIpVlFgU1oxT2xQMEtxcXF7cFgzSWNJXXEoLzQ1Ky57NnZWTmBPRihFV3lMWis+SColMixjfVZldUpWXV9scGZdaiIoayhgKTN6X3lASCps''@;'; put 'put ''eWQ+c2d0RWRxSjdgKFFEQCZOT2s2L1hyWUAmTk8qKHI+KzVnZEhkVGxXMyk8QmxXMzRReE80I0lyP3omY3VVTl5SVCM1aCJRRStLS3sxSHgmU11AWF1uQVdeb34+NkNDXWVCMktxJitUQ2xbSztIPlQpRCx9ME0wclJ9N3kmNUthOHhZaE5yYyw2UT5uRlZIT0lgaTorNWxkKSZaL2hlcWYwWFd4''@;'; put 'put ''VF9kRVJfOmV+ekpWWV06dHs2Yjo2OTd2NmJhKzR4ZXVWMjlOU2JBQHJ3WXJ7fD9gKHVGZW84SkxpfGoqYEc8aj9lZ2Z2P3J3XyFGVi9ZPnR1I3RzeTpXV1psQDJDe1lWbzgpSzJTbjUveDMjRXtnTiVhbjE8UU9oMmtnZX4+NCRlSX4jYXkrckFYJUNbJnI0QlcrPStLS3syMDA2cDhXMEd9U21Y''@;'; put 'put ''P0RdaCJlMHcjZjJyKktiYmExPmpTUjhrZjJKYitSV158TmM+NUdyIltdNUo6WzJKP2VhcWY+dF1EXS9bMlszTy5yRU1Fb2hxX1ksUXRGVihLMlNSOCg4QSlBckw4IUNCXTBycFZTXVI4K1QySlhhRjZAc0ZgYjRDe1F0akIrNndaQFsxV3gzaEZxcy9gYjRCcF1ZI0FiK1JXeHw3eWV2PmVyT0J7''@;'; put 'put ''SjtoZXFmLCYrVCtWKXpZX29ieW5qUDA2K1NgRVByaTp2a3R4KVR5ZHUjNiJWXyJaUDNkT1Y/MFllNWJJREdtJiQ0OGB5QHouUDBzM2RPW1U3Yzh7ZzFrKHlQa1JkSGkyKUBBclB9VyM+MDl4cDpraD1zSFlgdUBRVDojX3B5PDt4SS4mW3NpWDxabUUmU19EKElOeyQ5K3MkZC5pS08mU2B3RHtV''@;'; put 'put ''e31OWUhQeGcodkk5ektPJlNrLDpJJUtiY2gpJUQocih9d3BsLz9jLmcodmlje0dMaXEqWkViNitIRzZvSENFKVdGZnhYUF15SXN8c3wvSzcwP2NPQUROemRyTGkyX3VqeDpIWGM3XXRXUFMjJCZ7UnFObjRgakIoS0h0LkdVXmBfMD5ldkpJOCpIN3ljIUpSe2AvcjRTWSpnVyZPRUc3VlssdyF+''@;'; put 'put ''UTxQfG10alU0T043InNwc3VMaCFxc1JLbVdLQnE4SXdxUDJNUnZicyxgQ3Z2czpQOWhER1F6b2N2aGVgalk+fXtGeXdbPitEYHxSKThoQzUlLE9HeV9mKDtFJSxwYFpTRnNwKENnYnM9YDgqPn1wP25Xcz5sTyN+MGYyfXZbfFFVUW4zO2NaYFA4KE1+Ym85KWhPVyUxM3klenFQV3szd2Zza2No''@;'; put 'put ''V1tiaG47XSU6On02dFNXKUZHL1NkYlosXWJFMV8qQ2RzRig3Jmx3InhRamJaRy9XNzIoKm5xOC9fN2tRKG9Ha0IiQ1ZlS35Aai85ISkzSX1gT3xkfiolJWhJN1tLNGdKe1t1JX1nMjRodHcjQW0pJkhIfWc1cnNpL2goJl50KDV9UDJuKF1RU0VkQCRkJX1JKVcoRmYyPnVQLDdiKE5HVTRkMztj''@;'; put 'put ''O19fQj5zdVMmPjx5S1BTTCNFdixmIzF+Wyk5fnhHUSxkKDtzdmRlKm03LnwlaWpzcCkwUm5bJGRkV04qc1c1fVY6ZUVKfmFgSzRuVVR2ZjclW01KeEZrTn04aVdhUTFyIiI7Yy8+WkMjfHY6TDQ/Q2NfNEJkK05bXjxNTHVuXko6JDomWTYlVmJzJmBXfG94UX5xbGdXQnkyeXM6WEk+dDB5O2NJ''@;'; put 'put ''fWcqKXNFd2ErMTNMOCN9ZGBMUDJ7SywrfjN6UHxfXlUvZn5WcFE0U2QoaDV9SX1xTC59WVdENzxDPihRSTkoY3BoflhMWSgrOFNYanxKa3hGR0gxRj90Kk8yfll3eEZ7Q2BlVHw+WHJXL15BOSN8ajJQTFFRJmhARE9qPXRLUCRANUM9RiE6JkheXzAxVCgoRVRMYCJLUH4ob0Y4X1orZH4ocSJ+''@;'; put 'put ''Nn5EP1JMX0RFaHcpfl15RiFDYnNbPkp5dF89T2p+WGNTTElIRWhmfEBCI306d1Y3ck9VKEBAKkFeZSk/P3dbfCk/VjQlZ3E4SjF4S3EpeUg/YD5YPGhFXyU6JGhNTlB8JS4wUlR+fihjK0MiUnFPV1tFdCg6c0x7LmA4JFpMRVgkbDN+N3xqQlVba0ooczpTPT8ufiJbcjAufSlPPHNOTmJaU35N''@;'; put 'put ''cGRzfUYhPlBKcThhfn5XUyh3PiZIQWBoXWxXKm9eP2EseFpRanR+Vk1gc3IuMn1qW0lGM19pSnE4QjF4S01dRDhBIm0hS1AjWyVDMG5USzg1Oz8+REp+cnRkfn52dChDfW1IbChjcVojSmB5djp8en1AfkhzMn0xW346cWdlMmQraFciRTlZWXxSeyFzQFE1aCM6LElFQjpJMn1mWy4xIX0yYzFG''@;'; put 'put ''ZUlDVGg1a34vPW4obCxwXjtjK3NDPTJ5IncjZ2I5eD0xPlV8OkhWKE5IXiklPXZUKzQjPSx+bzJ5UWNfVTFPaihfR3xUTD1pKG0yPjhSKzdbKkt5TygufHVYUHZlfXMidkpRfCQsMSFFfio3eUZjd2BuZF9aMk9qWil2cDJ9RFtFUm9zJD1VNDwiNV1lVy5LY19CMkBkaX4wIUZjfUhqRXh8VEUl''@;'; put 'put ''LFtGTE5lX18xOlBKW2JfcX5xKl55WyY4V05NOVtXKH5pakJrWE0+TldtX0s3Uig1aTR5NnRPKCh8OkghSUtgKkMmc2lFKnZMYDpCMVBRKFBnNHldeH1MYnNuYGpFaXNwQyE+b09zVzZ9byVpLGJJe3R3OzJ9LkBJRjVfQmU+flEvMn1QW31kKX1mNDBSRylIND59Zk0+fitgJCp9fipgKSo/fnlb''@;'; put 'put ''N185PiZQZCtBazQkOnY5fnF8fn5XfHM9QiJXKHh0Zj8jUWd+VFJRXzheVXUoV3hrb3oocn1oISRuMlNYLktuRjErYm49ImErKFtGSn0yWzEvJFhEUnpDeVskX0g7aU9KVlJbV15CPDhBPylFRj98c1BjJFZ4QzhzPTM3byUuQThPfGtfYTwvZVpyWzZXdU1zZ3I4eyRfN0JaKDBpPz9CazwhUnpR''@;'; put 'put ''XiMqcU0qbX4qfXZrdko8RGZPdFZFbVNeP0ZTYGAuZTglXiM9SUc4XzpbNW5IXlFGQkxoWUVaKE4sPT9eXS47MDl0PkJXdjpdO0hfe1MrVndxcntJQHVbN1FZY1E5NkNWVj0hPz8/aD47TUpPOzdZejtUNiZKMXMiQip3Rzs6Mz03Wj8jfU43YnY+eU52RHdGRUJ0Z1pdT3tYS0MmV0dDJktzKUJp''@;'; put 'put ''djR2ZG5PcXFkcTdjWn5ZaS5icjhZe0FlWSxZKDF1Tkh5YzVMezQ9JmlBSzhva14yZnh2NDA6YE8yIiVRdytGZjg3cXE9cztUInNQO043L0Ijc3Zzc2EiO0p7RH1nI1t+Zz5NNFN5fXFQXXkjJjw3LzMhYSVYaih2ITYuMTxHeGpMbCpQTWlkOjdjSXJ6QHZjXiJJLDNjVUdHOUlrIyh9ZUQyZ1BB''@;'; put 'put ''QXpYQUFBQT9iKUQ9KDVEIjx2SERHKl96SzZBdXtrPj1La2lTbkFEYEVLP1RLMiRKQV1DTTx1bUNBWj8yM0p8aG4waGU+Sj1tQXpYMzRjQ1RBRUUwISp2VnRyLFhMRlJ9MGZEQUFwSGZHK25SUUF1VlF2RHNiOUJHT088YWVMITNKSTZXUmo/NlJ3KSEoXyRvST1IQU17cWl1P28/el1IXTBYW2Ir''@;'; put 'put ''RG1GeEFpe2gxW1BddldeZUVhX18ob31pMy53cFY8REB5UX5mTyFjWz5uPiRIXmRVS15kVV9eOVZoeT4zSXheM2IuZz9vYD8kKS4qVndrcXZ+XTdfYXlBenlFKG9HUWAuNTQvQyFWZXJIRnJEYC5KUTZDYTRDMFlVR258ZVtuN18sUmhVXyFifF0yYH5IOGAwZGw7fiRqXVdQU3NXcXpDIn5AKGg1''@;'; put 'put ''MyM1e1gic1tPPSoiLH5zd2xYYiJ+fSN6ZEs6RipJfVh5ZXgjZ0dSfStrdWo4LHVDciJtb2I9dmx1c1kpck1eNH5ZcW1AXWNnZit6LCxNSmVpYjFuZXAmVDhpcWpZbG83KCowR0NbQm5uMEw7U0AxNnkzSUp1IW1DTmgqUndAVnlldDcxLnciOXIieEp0SSVNLkB0MU9TOzAiUHFjKV1eRkh6Xi8+''@;'; put 'put ''bT19TVpOZDlhSy9WJncqPy9XNTpvY216VldBZ217MVpHfDM1dEkpT3tjeVl2RD9uZzREVzNnfnJfVUJMYyVTbT9xV2lYTzVDYDRhMSY6c1FzUnxUdiMhbnZ0a117XzpPNk08VFI0eXkpclB0eC9sK3BTNHM8V3FWPE8wLDNAI30iR091U1ZvXzF+SGZPPH12YFZQTFV6SDNIbSFdWyJrSEN2bVcu''@;'; put 'put ''UztoXWVHYX5KfmM8PC9NMklQO3VPUyNtL0QzWXhyNn1sS09BOXNLMWxzITsmRSwqKiNpIiZBVU9ZdSQ+UD1uSkcvRGcxcFlhPUdheWdzXVp+Kn1PVzRSKzJndEAoMWxEWFhRJHlgKHEqa2E9VD5Xej5BZztya0A2XSt3VzBJRkxMbDFUKjA5YE5lfUE2Xyw0KiVGS0omdXhxcVppKkRrWUU3SFMq''@;'; put 'put ''d3NiWS9bby8uWFdMei8uO1NaLCRyfGZyYUdRREkmOCMraWtZfEddRnElUEQ7Q3EjSCp7N0gqQWQkZ2VVZ0E6JHBubnpzJUloRkdLaXslREF4cSpQRHFRRGFLN308M1VCSilDQztPPzZdUWNyMD05PHQrOzd0VFMhWkI8WjdLNkZDdCphezlkVEJlOEJbYyh1cyYlPikudiZkRXJ1bF1TVkcyY2ls''@;'; put 'put ''JEhITylXQnoxQlh8Pz5Hb0klVXdFYT1ZdGVFe1lVQVAxMEsyVTZWJHN7Y2w/d0xPdXpCUlsyLiVtKFtmYFRRIjNaTk1RUWs9UTdhe3JbUWwlZ0JhWUw5RUF0c01SRCV5KCthYDJWMDxYR0NrWz81VHxheHZ6NkRfUXRkVjd1dyErWnEqaE97LzRYVmxwO0R3RS5BJVRmNDo/SlNNMHRUaHwyLDxe''@;'; put 'put ''WStFJGBddy5naHArL318ZUIxNEZ6LyZWUWddZVRDT3w3WTZffSFsfihUWjcpQk8iI3YmYV1uQ10lezVdaXc0QiNqRHZ7T3J+JmYhc2JgfnRiLikjQCo2OjQkdCojXk9KYC9FN3w+YHlJKl9yMFl8JjZBIn13Zyl8SCVQbzpiOkMwQlYiR2g1UTNwd0RnNS9tZFMyKlY8MixaZE4zRVtsX0MhSEhe''@;'; put 'put ''RVBdalA7MzxxcC9sMG4uVCYsKSUhdEcrW3xHVU10X3pjUU0+YnQ0UEFMW2pCcXtWa2tGWlU/a0ZzP3kxKUhBY2NuKGRaWXE+ZDo6ITVdLHRUeHRpVFRnJmJ9cSooTl04fUw1eStzRFh8OiloTnhfTm9NY0pQenB+Z0VzUTQjN2pnQVcmKyh7eyRQN3Jdem9+dWFEQmJsW0J3bV8leXlpPURjQTdL''@;'; put 'put ''VkopKSIjJV46V283T0UyeFBLajt5JlY8WV5oMnxPUzNYSUQlRkl6TT5leEhYSGhUWkJZKT1ZfGVKOTszPHw4LiV9VTdzQDpNPnlEUSV2RGN4ST1EQkJufCw6N3A7cCgsSndOPmshZS5gK0NJSVF6dkduNSFyPVBIZitbayM+R1t5byxmXS5dTjJ1PEJQYVlJbENjSl5BPVhWQjlzO0ldK3tYbTtw''@;'; put 'put ''YTVBXSwkMGJBZzx4WTZLUH4lWTUqNGQkJjQlLD9uY0tdfkZ+K08zJjtKXWIyZk5PSysxZHRkVnhHTSxMXTBkQjcoKCpUX29edkgudCtLSnFDUm4pTnduW1FKS3kzeiZxOjdabT5jUztxJEkxaCIoK3FmWnNJIURVKU1TZTdNJixsVnJRWVA1WmE5P2lPO149bVpYQ11GPzUzRW8rKShzKmg0QH5P''@;'; put 'put ''ckNDTzJNdEZ4THIzOU1XWzRXPGBWc3J2QH1PP0J8VyE1NVoue3JGRDdxdVVyS1pQbCpBfCt5UnV2NH1TIShqPVNoOSY6PmAvJChlRS9TOSgxSzwmNHtqPHpdfEFwVi5TOilONHNNe3FRNUVdfkZDXWAicHo2bl5CT0tCeCh9KFRWWysodG57IzBtVHIxNVhRMH00ZU9XMl8mK2hofmVGdkguX31+''@;'; put 'put ''V1d1WXRCMjRoeS9CczhbLnssY2k9R0RuR1E9YUg5Z1c2aD1Obl5bQSY0MlguS08ob3cucCZxI34vcHVJRjBMWmhyMz9OMUMzMHFkdXhxcSl5ezZAWmR+cXxyMXhhKkUsLzcrWXxYV2RneChSI1pHd18qKztyc0JUd31xc0k9OWlAaVA/K01XV0VUeD8yKHJTWCwvTHlWX2ksN3BuR3Q+MHhsNXpH''@;'; put 'put ''dmlKdj4mbUx4NSw4dD5gRzM8KCsocnBpM3grd192JmRYfFJISGk1Xlk7OzwsWigoXSM5Iy5bSWk+OUNRRF9nPlF+WzlUeFdKeShWWGkhc2NVMltLSU9dW15wOzI3cGdrbkEuYFhTR0hgb2taRDdjU1NkOWV0P2pvYlhzJW18VjRefStBOmg8JTNfbEkrT2Q9aWcpaypkU09+SjxEdU9lSkY2TGk8''@;'; put 'put ''Mk5UcXVMWigoNmZ9Jik7c08vWCxCRU9eOjA1XzBNSE1IOWgwKFRfck90Sk1ILlFITjx7eSVeSSVnOUJvV0Y6Ml5HQE5eaE50fjJxSFZKVHl3KWF9fTB6YV9+TWhtZkQ1aHNndloxa05XI0JdW2crdX5fe3QhSHZjXmkrdHNsdFdfVUdUSmtMInxSSXE+L1hpPlJAV1coUG1iWFhdNH1CQnxyWXUv''@;'; put 'put ''aXMiXlIjcEdzX11bNHgqREp3TEtlL1VPdT5aWHJVX1N9KGJfJC43cEY1cD5ISG5TdVUiaHcpdj5eej1hJWk/fVFaZD19QzF4PXduYE4iQHJnbGJdPVA5LGBPUWBEPmlOb1E5LFVSRzpWTjlydVRxakIrUl1CWjxvOiVoKG1HZT1kRCl3Ri44QFhBVCg+UCFTZjJnLGBPV308ey5vZS4hQDNJandm''@;'; put 'put ''K20oZ3V7b3c/WV9uMCQuMWJaP216IXxuVn00UVR6OnpVXihKW20+cjxGWlMjNV8wWjtyUEFSPH1eWFBrSXRKT1E3azN4MXZkfGVbdT5AaDh7UXk1XyssPjE+ZXFKMipWKzZ1e28xIkU+WkJSI3QmIXN6PUx8UW17Tyw+SXBzI1tdb3xRdmNfeGMua0N7Jn0jVTwye29aWFRNSGBbVUI+aktIUk1x''@;'; put 'put ''JGN5d1teOShVY15RVm52UjJKUmtMLGJNVT8ucH5HenBzMjNoOkNVX01VYjNja1AsYE9KYFpzd1ZWUzJAM0lud0xxRWRGWl0jaX4xfFVfVXp0cFdnKT9sR21fMlY0TGdPRz8wJWAoKlpFd2J+K2FGWnJFdn1hajRySS9fOV5nalo6UVZ4OH5WeDN4ISk1c3MieDFvXm96WTFzRF1bayQ5aFJwbGI1''@;'; put 'put ''eWNeayQuUWIjOV5leTN4eTxRV2tqTHxdNTYmWm1mV0hmSipGMkt5e295JU18XzltM11SNSo7TWBfKlkvWVczVWFTOjxgeDYsJjNJIVRdYVtydGFeb0VAP35MO2I4Ui43cC8+RDBFLld6JFl6QD9+e3RxPjJvaD5sYC9paVk0cm03cFVDb0FEVXgmK3QhQXdjXkJOdXMsPllffm5sU0ZQTz8sZ35y''@;'; put 'put ''K2IrJnJZOH1vb2NTOjIhWyF1Vy58fGpCdHJ0cHg0TkxVdjoyTzVQSCs9KChQZj1KPjlYSlswKVVIYVZFdnpRVlhAaU5bSXsvM19sQlkvZkNzUSpuNXIsPlZQdEJ1IyM3KHlBRlRiUX1VVHJVYzM3U2QqS20sO11Gd281e3FxVGQiUlBqWCksQVp2cjFRdjQ4KkVUTnRjeiJrRzlQWi5RKWEpVik7''@;'; put 'put ''YmJxLnglbm9vTTUzVSxfdjpLcEM1cD59PTR2P3ZifiJLWTNkdEo0WXRYX3clMmE5dVVHRGh0MHg3SnJSbFokJTxXdXY9X1pQRGx0JE0kRFtLZE15dWRjUXZdRXdXOkM+V35KMX02cnBGIUFDKFlYfFh0Qi57RyZlSiVjNzRXZCRyOC89UFg1M3xMNUdhTVl6bD15fmlVRXdBUS9jYCRYVmpUdndD''@;'; put 'put ''WW5+TFhYMWQjeSxWT3U2a0oqdnpabUx8IXIodmA+ckNPUTlNMUJwTHVOXUVKdDpDSHJtXVhzQjdIfT92PXIoQUZ0NUZWTjckXlsoS1dsOnorSW58NEtRKU1WR2R2PksiNUYkQTppRyZuVSxYc0I0O1JdSkZxL1d4eSxES1l6O0l2USpCVnQsaHM+fj8pbTlOXSZrdko8KnhUfGMyW1p0Uzs+dmtE''@;'; put 'put ''WzAuaV1xalR2cStzKW1EZ0F3VzRZZmJGKElYZFNOQlk3cVNJc0hFNm5LMXxGTnFsaj0wYkRXVU8oZFBmb0BQZm4mNC5PblhyPi5SV2Q8dURCU31fRzpuKE4qX2VOJSFtYSg/fVo+TW96WypzUkZCO2hJZyNyU0RwTGd6dHxVR1lSZU06L3A+fVZ7cmpaTShLcFVdNUpNUkNueTw6RyImQitCQHV8''@;'; put 'put ''Zj1oPkdJOkN0LyM6XUU5Rj1oTUY/UHo+Tz0wbVomW0svTDRSXVdgKD47VyRbIzliYn5SV09AKDxSWylWMzV+cSImbT5yYStmUFtldTkkQi5BaytRVChCKXRQfUFleH0qPko1dEIrUT0pRVIhX3xsaUBESDx9cn5dd2hBPTNCbS5WUVtudnV5LGtFXnk/e1dmcylaOyhyZSxnZTZVT3wpKXN2VEJR''@;'; put 'put ''fGUoX1toP3VYLHVCVG1iO08yYywrR2o4WUYqJnkifFR4cHFaSWAuOjJBZmBCbSNDL2NCSyI1RjBrNV93SCY0Lk8mc2ZZLDU0d09zJXV5MWZEXVFIbmMrbDRkPSIzX2hENXJHPkdKKCNBTnliSloqalVBKGlYTF4+Nk5jSWM9I01aKWIkY090IXMiaEdWJkMyJDBXMmg6bXMuYl9XS1NbMl8kLGsz''@;'; put 'put ''OHpwfmZOaVNGUChHOkxyellrRWQoLEcmR2FLeVV1dCgpPDoyQWYkLlV1KGh4ZGRne2MvWThbKzdMfCo0bnJjLzp2QkE0fCtnWVQ+bUp2UT0sSypVdyhyPiJWaHd2N0JKdW9vOiNHbGJYJGs5Ylg0JHgpL3BhNF0mPzhRWj91V2kkTV0mWkNXS1pNPi9iTWtgPSREIW0zQUFUbkRdKWtCcExFKjZ3''@;'; put 'put ''ND5VYW4sLzNDfjxpQD1HNHIoLmFjeyMoKztNUX1vU0ZQfE9qQGEzQygzJFdeWE55RlRKYHQ5VHdVRnBPZCRoKFRPUXpwPGluUVN+eWk7JkBORFYhcG9eWktdciR0LENBJiZ7WXhQYyNaLmB5JSgjP21zfkQ3M31vS1FSWD1oV0QwIiswNUc4Llt7fSFoRCtUX0ldMXM4c1R4TEtwPjNJXVtKWFU0''@;'; put 'put ''OihQNG4zY1QkfSMhWl9UUT9bW3ZWZVpYc2cuLmMlUUldXmwjbUlBOzR0UkZNXm1ZWldZT1VfdVlUSSRIS354NU5xcXJCXjQvekYia18iMyhqIk5+QkVKXS9OUE9ML0U/aklIdGNeVERpfi5fVl8reSxreno3P3lIUihmaUFeOlo8X2ZFOzM8QSt3bSsyXn5wXUwoQ1p5fnxDXVdBe0NwYzU+LFlU''@;'; put 'put ''S2E1JT9Peil8JCI9aDwlZ1lsST8oUT1udWw1SkdONFpQWUUsJHV0KmVLeHtvZzpqKDczWUYpRjM8a2IlezY9M3hsYnZzSEo1VF0sen1BM2t1KzVdMVBAQk90I20zPD4xaC5vVG5XdGxTU1kkX1ZhYHJJdGc8cndqPzNJQWhOfFJJciV9XmFuXzUmQio1ZFc6JHY3KnRVVXRGJTZ+RyUvKCslflM+''@;'; put 'put ''Ml5hK0heamozaGRaTHFMTGFhW1o1fDVAUXxBNnI8I1JRTHRiO3xqSnhVW0x3P3x9dT46IixVXUx3P3RHVShzKk01Tk13P3lIdHwjMSE8czkkfUl1Z0MuJk5QRlp4Q3Qoc0gsVnAvN3AoYDhaX3tgSVFHIWRzfmpRej5vUmFyXi5sdStKbTlVZixofiZBfkY2JkEjR2dsfkptPiZYbVVUbEMqYk0+''@;'; put 'put ''YCZSNSg3cC9EMmhsQjUkJiR0L3Y3SFBLbU13fXJOeUBhblRTLDJeInsiXS9MbX5+W1VfbDVQSHAwOCkmR1V8VmJNUmkueitdfHF6SipffnpEZE98YTcxSmldfEMwIVtRSVRHMFt2fFozeiFeZzVGMmhESDYkKG4pazBBdj9xSG5fVllZPTdBdj8zSWhVRkI6Mj5WYyU7R3E4VF06YlZUfHhYQn4i''@;'; put 'put ''NjdMKmcseFJIe0V0flhvK3U+NEFOIV8odVBHQFlucHwkVFhydXMmY2w8aGlUXmlRXnl3fmB3Jm1iMnl1b3F+MT9aSEY1dX19fCs1PihYe2FjSExPaG59cmV9K1BuVlUjbiklcVV6RGN+djZENUVyQENPQSEuJl9XZDA5azU/WTFRKGZrU25HKS85fXFQOVZ2JVpQNTdzOHxXX0k7cjZeN1JHLyZ2''@;'; put 'put ''LGYuMnVsLmQ3ZG05P2liaU5YMFlFVztNKUU1Z0NDWkYpaTtqNTJLUE44KiwsbUwlTVpMZypWb2JeaWFkdl9qKHpZUTx3VV8oa11jOnVKRm8xW0ZqTTA9PEguaDdSTCppTkEve25yRiwuOllkMDwsbnx2WXIuOyxvZFsoVng1KGVXcDMxX0E2T0k9a0ddKiZnRHE0fS8xaHReOGgmYTFqRUMqX3p3''@;'; put 'put ''fXI6RHhqczZOYlRMR3U4bWZyKClWeDRsU0BJSmp2XnYoPTFoYHZlVEQ0UCxKQjM/ZzFHc1J5JHtfZT1+MFNUbkRVQEQkIjVSeDp1NkFGXmZqIzU6b2FoOHh2Y2VgalJoJkNURCVJIkljJD18LislZyU0ck1nPitQOz8/SVNzbndrUWpERHpuVyxuYCpsPiFQZCF5dnt7UFFbPix2Ijklaj1SKGBe''@;'; put 'put ''dG5hU1M1Tm9gR1ZoQSNMVFBiKFVtNXczb1dSWVEzNSZzZUswVT9HTCErTkhiL3JqLklZZ2JOcGNue0tHJnRHbSFgPl0rVk9IYEdWRj9tU2dJP351V3RDfSo/TW0pPUMkQFNIP3xUQjRhLCUhLkVoaFsqQz1CcTR7KXp+ez9aX0dEPylHQDRscGA4I3FSQUAkKFdkW3kpOjdIQit8XnMlXnYxQCFK''@;'; put 'put ''XShbKSRXKjA0fC5DeXI0Qil9KXoibEtgWCpNUzRlaUR6ajdDKUdYd15qNFMqTiJfM1M0dW56RUAsfj1yeEUjeXJNPVYySkJYdFNNfTd4aGZ5TlAiPFFYUXF2TC8/c0k4M3kpNlZ1MU1zX2hsVn1kNiVTU01JLFBnTk0qY3JMWX09QGNfb25OMGV3bzY/OV1gLDh4KXttRiFJJiN6KClgfmtRQG4x''@;'; put 'put ''MFd8cDNUMltaRkI4c2J4R1ZiTi9ZMkpsUGQ1RGk1Ql17NGxeJlNCKCZeNipzSipHTCozblVdRz9ge0R6PiUyd1tgemwxZzJnZHJLQGg+L3g/VXhBfXgzczdgVWY1JXNvTHgzY31jPTp+VVZIJn1PUl84fnVYfDlWbmAxL0ddNzhtZUxKI3l6cHl2RHZqdlB8e2E3UHxkXjwzaSVtPj88e1JqNUBR''@;'; put 'put ''VExGeU1aQWxTbnJ2MFJGWylWRlpwVSljInNNUCROOFNxIlcpPClKaTY+b1t4NzA2Qn50KUIoX0xfb1Y9PUpaI0R2QnF8O1JGIVdbfVBDVV9RJTMlQ29+c0NLMH0weDB8Iz1tVDFtKXN0TEx8WVJWM216eU52d0BgbFlqNTR3ISlzczduWF84PDkmMVkrfl8kOV4rTlIjVzNpfHVqdj41V0NecUoo''@;'; put 'put ''X0xzbT5DP2xyM1klfSg0dT5OOko1b1V3RzFyT35vU1BCRTY9TUA5JHNVeEJzU053bCloOl0hblRYJS9GaT1zcmdeeFAyLldoK0h1RWhPfV0pSnw0Ok1KKF8+OWY+YkF8bH4uPWViLCw4bEZ6fmR0WF89bTJvUVIzRiQ/MXlWRElSdUJUfDZIcD5yfW4kV1tIfVpuMGYhJmJ1Z3NTYjRUbG4hJmJl''@;'; put 'put ''Uih1bktxcW4hJk5NfnN6eyMwfE5iVzRea3hPKHxNZkdxfj8yWSo1fF9HUUFaTFBvNj48Tk9RdXVVdTw8IStxUHV8MzFCcmptbygwMVVfSj1NSSRIPXwofVZfWSFEUT1xekBuSWx9TDVtJHgvWE9lVy8rWElmSkpPKVE7YFtdPSZBfH5tci41aWN8XkpjTihlYV8sb1U9TS9GSEMrYXw2TUA3V2Fm''@;'; put 'put ''QTM+YzttLlV5ez1sN35zLjc7czJycV46SHxyJC9rPnIiPn56JiNRQkwxZkI1P31PYHw1N1RRWXtKQ2kwLEBOZXxQTk0iVWFUaEZjQTxpP095IVVxdSV+UzdlPTssUV9MJUk0ZlNMfGdaWHI9YTl9eEdTOX5pTUhJNUY7SSZdIlhJJjQuT3NZZiRrMHg3eWc1Kkc3a18sJj1rZlk6fU96OiZtVCla''@;'; put 'put ''VkhffmFvMn1LRnguMXFNLDVpPnJzOSR7aCwhc3h1VV9SOnhnPTMzPlpFMHI+TVFuLHlNNCFFRyYpSy9jQnM+MldMY0A8ZDdaPk0+eGhzR3M0JGpeTzlbUUEiK3M9K0NqSVRYfCNNWF9HOSUuI2QpPllwYXNyX0NfO0ZLY1V8Olo2ekBTbl5DSDFTeC5qOCtAJmUuSVg0bj9UNHdbTjt0KG0yfC47''@;'; put 'put ''bTJvZH03JVRKTkJYWD1zcG1ifkMhS3wmfTZHbT5HUD51Pk47fDhqcT5GaUJtKUVBIltANCR+fXJvV18xLzF3bHIme0ZDXXJ8Y2teJUU6X2RheyZtSDVVLlhlfnBdXSZ0IVoqNENsYDdJNipdRU92JHpVXzJWbD5jYHgrcD5rYFlyMEIwXyN3PyYkW05kMUpzc2VxVW4iNCVOOVZffihsc3o3JEIu''@;'; put 'put ''NWoxajp9KFJVbkNvbkN1OVp0NCohPklkaVBGQD48bklRYHBNN0dWWERIUTQ5WUx8elU1XlN8ZkJISSxIeEJgLnx9LGlWX1csaz4rX3UsfSZaeyUjeWZvO25JL195JU55UD10flJSWV85T1pWfEd3Kns3N3MwfVNfYThQcS9ZN3N5VDRgcTBdRXtOZXVfcDxfeGFeJkdacDpHL1JddzpnfC51LiZ1''@;'; put 'put ''RkZpeFc1RDZmN14uSj51dktvSEc3NnM1dSw+NHVjREw0QlZOV3F6N21ZNCRhfCsoY0EkKEhOQmh8bFl2PitiOCZye2hhPSZZdkk8KVllJVkqLnxKSDNmc1k0d24oNkJdRV5RS2siSl9zYFRVbi5GVWQhIkJeenljZmAyNCoqfHw9RTxtUCV9fTxOfEshRyZCS1FuZHdtV3Q9MlRgNVgyeUdfXyls''@;'; put 'put ''IiYzJGltcVo/flBoOG08VTN7PHdhK3F9LCYvJmpASnlAfFlDNzR9T20qJH0rd1hfd0h9ayMpPn12aWVKQHJxK3R8W1smbTN0OG5nRVp8K1JpejF8Km1NP2A5aDlFWVkuJCxrYS5MI0dNLFFHdE48K1JpbS4od10wWGt6dENPTz9WM2xuWW4xKFpSK1cjZy9Rc1IsISVnd0ByPmtvdyhCQk1dLlFO''@;'; put 'put ''LihjYkZMQUYwdCVBWXI1aj93STx2IW19InxDR1ZNNVkuZEMhQGh5NyI2dWI4TzVhNCRZUX5qejomPmopS3JHOTgoMEtIW3B7PlBrJiVJSShiQ34henQ+XWk9TEQjdUN9c3ZNOH5jeXErIUdjfF5Zc2dManp1U3FyTEtxZjl2elQlOVBzb1FXXWtRb3gqdlRNP3NRVEMmaUUscFpUcTVna2FVfV0r''@;'; put 'put ''dyM6U3RDdCNVZHE0dyhUJkJ4dTR4d0FKLnojNFVROUx5QkQzYllqeXE8N1MsTTBEN2IvOjpXUjxqWG0rYFJzclQ2eSxPaX5pdF83MEFvfj9TY1tCaW0sZC9EX0puMkFsT2NlUk1rMy5sV1s9KmdBZWJ8I00/JnhRbDN8cT44WFlbW1orUCkrYWJMaH5AU0gmSkY0Z0claGA5T3I+b1s6Kyxbdn5R''@;'; put 'put ''b28+YnQkVDBFY1M5fnhaNiRjXitWdUl1KHl1a1s1Z21gSlp+fUpTdD54ZH5kUU9gLjltQHtbVUZqMHB0VH1rJVhNUXVuY1FkTS9aL1JtczFhe3JwRm11Z3N8PU5FWU5SKnE5fWp9dzExWjQqZXUvdjlzY0QwWnQ4SFQzQEd2PFhSYTpvPj1VRFQoTSVmP0BVUn1PWW9rIXVTWmB7VmAiaFp0VTpR''@;'; put 'put ''bEcudXQlP3YuV01xLzF0MHxMbCJRZHJbWitQJTJhSEI3PllKTHwuVzxNV3Fyfl0qIypXK0xEOHZ6UXM4QDJEZCxSMUdWaig/U3I2dVlPd0RlcyErLExgPW8+aEIjZGxqbGFwMH16XyVaRmdpOUNmP0hnciYuaFNWR3gxTmU6Wkx2YHU+Jl5OUX1RRU90T05ERytVWVAkd0E8Oi59VHo1dFZIYjRb''@;'; put 'put ''L1kucDpUXn0vXSt9fVBvdGM/NWd4VGJDKCopNnlhdEFYO1FdSi9KMEI3SEA6YDBraEkpZWI2dUhVMENIe2FiND43bnAwbVBJYy97KkV6b3dxdElobDNjMTMxZygxN3xUS2h6NnkwJWV4WnVtQEdmbXs6WnUjW1M0KSlSfT4oSURSeyFIXUhnLiRAYHpPfiRBaHBffnNWNk9lZ0RwaiVJKnE9TSMx''@;'; put 'put ''S2AjSEJdMX1aSmE2K2ZHdiJmS10vNS9KZVNVLi5XazZIb0V0Q19EeVlNNGtXKURjRVkqQmVNRX1aa1puI25VTiUhKjZyYz8oUyMwLipnNEcsfmUrV258fC8xNE9jRVc7SF4rUCUjfXdgdjhoSDUsVnUsKmcoPXZzVFVVbjYoWzE/WnlJPzkrSilqKEM2OGF0Xnd5YU1ETVlYOSxENn1UM3RaNCF2''@;'; put 'put ''PXVBYGJUbyJlNGU/VnAzOF4jal9ufjFTdTorP2pdYUNrUHRJTj96cm04SFkqaWowUUsiViZsKjx4T2QmZ0EpZyh+NUQseGNmSjV8RnpFLEZYYWA2aGg7ZTZVSm9eVHQ9WkNtcUB3X245S0dhQzlOOn0wfXhoMT82RDh8UVpnbnRgPTFUY1J+SmA7Jm92R20pa3UlQkg/Mmg6V0ZAXmJUPTlzNGg6''@;'; put 'put ''OWMxalYzIXNIa1IwX0VMfFs8ZSQ5JGluKzYpYml8bUpuIzJCIVhhSjFhV2U5KDduKXZVRCJGaDVFSSxOV2F8W2hMbEVfTExAPCt5O19FNjEzUEpte2FyJmZ0Iz51ZnJHJmZQW1h2Mmh8KCIrb24/R1ltTHE4eSlkVXFiZjtKLkQrIWNBVSg+dDVSU0MwTHd+WVVuPis1aWZDd1k5MnlAV0NCJWx5''@;'; put 'put ''NmBEbXVbdnMpeUVyfDd1Y2ZqeDM0bUIpdyJUIlNyYEdWWnYqLnFxRy8mVGxiUW8uR0p6IXwhNTRyc0I6TzNMLyo8fTVSYW40bnFJP3VCdzNoalN9KjZZZDBlUiZ9WENGPkhGUWkoMWl8ZWo0cmRDWk8qQjhBTGNsMHYkRlJTaiNEeX1KQ18mSXRzO05jODx9cz4/eWZgbEtrQjplVCZfdCQ+LDZK''@;'; put 'put ''dH52Zmp5dGYsPEtjdVhFc3FvJmk9b2ZNO1Z2dClrdnEsbVU/UzI6fTkwcl9BSEJsMGhUdnVqSFRPaXQ5ZT17diw1I3JeW2ZnJShTRkohO0hiT0hVL11tQCxiKGteTmw+UldFcEpnYn5YNVlrYj9Eb0pKUXp3JThzOFFCbDVxRVFmIi8sREVHPkUuaU5+fDo1IiZ4NlIwQmxJNXw0PSpmSXFLJSEl''@;'; put 'put ''SkZ7UiIzPklpVGpyTiYoZVdNXixWRkFhK09UbDU7Y05bS0R7YXtkbkpkfDtAeyZGd0dSJHp3Pn5TVmFhemw3cEwhNHczKmpHT0Qiels2cn0pInhbKDFJVyZJQiRZUnYwd31KfmlHLjdrNTE2bngjInpdZkRKN3c8QixdUHYqalt0enJgaioqMEllQmpYQ2VXfHVJeSJxMVQ/ZFB1V0xHZFpTPD9a''@;'; put 'put ''STM4ZWR+MyhdJGszI3w+STMrSGpAJitCaTRELFV8TEJOdFtRPX5GR1VzUkdZUmY1dkFGQjdCXiYyP35pfDZPXWp5QSEkaU5heGNWbW5GYWF7KmAqcFNuK2B5Ym9KMmFiNnVqOTlCUUd6WGcreDApLz8yWVJqeW88K1JfYDNCbFRyRDNONFdsXURiJj8hNG1NaWc4IlZqbGJmWU4xRWFtQ0B9Ynt9''@;'; put 'put ''aEFtNV9PYmVZVEMsaTsmQzN8JW9wRXZ9bH5YQ3hfKUVZUylUYFpMJkQ6Q3dJbUREVDJgQlVAN2BKNShUV3pfM1RkbTFFWGxlUCR0Ti9mSXp5JVBreTl8dnVfJiJbOEY+TXJlcFBjW2N0QkRJUmJhZ345OyNRbUpWdHQ/Yj9kR118Pkl7aFVFSFtec18mRlYhWTdiYm16SCJzQzF2JGZ+RDFnUSo+''@;'; put 'put ''JDh+Yy9KLl4lTVNyRjc9Y1c3OlNGVTtCPTk5bkhFWGVAa2EyZXo4TEt1Q0dzUmlkc1BWRWJEO0ohUDdHVXtwW0Axbl9ET2d0OmJzKzV9aXouXmByekFgLHhBKj99c281b3cjeiwrKE42KSFafGFzcVg5QllMfFYvTkp5dVB0NGhfVkcyMXwmMHpaIzBSY2xXYkpDU3tHSD9IUjtMWV8lL2gkQzI9''@;'; put 'put ''Im5vUH16QjBYRUdxYXFzcHRXbm1MKCI5dG4rbldYOzoyPk0hQlNvPCI0bHlzZ3RiVVF0dlVoNlR8W0VfNjdKNVtWKD99LFYqTSJtOVApLn5TaWBnSElkM21lc0ZRaUJnO1EpcWxGQm9tTGFuaEtWKnpdKVZFLkRTVysyMCgrbGRFKEg7fD1EcHRvZXl5c35vITYkOjNnZnlNeGsmemhpTCQieGFT''@;'; put 'put ''YkN0QXY2cXojKXhCVWhARyM+RWlwSWNDKEwqfnskO3VoOm4oIyw7NWAheklgPG5FTDE0KHA+Ly9FSEBBLiQ7UTglaDo4LCRUVDNBfkNkWl9XWC5JcC9PSCQ+YFExTjRydi5ISDIvU3cxaGI5L0pAJDoiYzRWRTFyZDAxPmFCdCVXdlh+OkdibEI/I00zTmB4MHRyXkhhSyY0Pm5qeUZ+RnJWPk8j''@;'; put 'put ''Mn5UKGtSb2lhLHl7QnVhaCR1UDlpPlpmK0JUNikia1c6K2B+MlpsWjIrWTI/I3RAdSJubkc/YTNUV218Q0l3fkE/QGhCPCIxKHtyOjs7L05pdHY0bEdAXXJbQmZ8dzhxc1p3KUhdM3JTOTRlU35GeztPeS5XNnkyTEZIOkwiYiEoJnlzOCFKNyh3Q0ZWKmY/UChGNzNvVllARG9ALnNiWl4rQ1ZY''@;'; put 'put ''ZiQqQk95TTc4IlhZOkAzTU91UUpeS0xbMUd+JlYiK1JYOml4IT5weHJNN0NJUmV4JH04UnU+ViFaeEhEcXVtVzVrRT57S0ZqdE9AKT9Rc2BQS0BkTW1bfFVbWyZBWGx6JVptSyEkT3hQZ2ZDL1M6KyFodU5MaihsaW9aSkIlRUNYRHFnUndzZktMfHVoL2puMUtqTWNEUiFlKyJySC49LmVOVn41''@;'; put 'put ''SnQzKUBCKml4XWBeRF5RZ0pANyl8V1NCM2QqYTBGSi98NHkzcVFocj15fGx4dyk/TUpJJFoxNntid3okNks6On1TZ09Vd29nYHlEVS9tPkJwYUgrK01DXmVqQEwpQHdLdD5CVWA3d2gmJl02elBYJVpWdnNfWC57cipDTnIwIVQ5SWNjMSVuPVMka083dU5Ja1ZVbSFTUWc1WStSRDFFJHMyb1db''@;'; put 'put ''ZTBaL3xhVG5JNSEmKUw4fTQpcD5kUCJiX09mLHtMXz9ifkBLaSE8SzpoJn5ZNVI5QGF1MGBRck5MJlojPkNkMix6IXw2TS83YXlhKXBzezFNUypfSVBmeipEKmdRTHBDUlpzQE9nKUFePmxiUC5fW0M6PX04ITsmOFtuXWFscCxWT2V9NENwTHpVRUUpfEhBWyZtWFZOL0JHZjhzRWlXTzw+cnc5''@;'; put 'put ''dnJHMCxvfnZ0V25WInhabUFlVns7YWFnWFVSKHhIeXE1fDhKYWRoOzooUEhMSE0heSxyaVQmdGsxLyo3MV1PWi5NPl1QZFkrYVFPUk99STlaW2pWLHFycmpJUTRVTkMiWVFHVmd4KnwvTiouOXlALCE7fWtUTk9SaV5Ybi54OEIlPXhYfD4qXSYsNilaIUMxcGwxZCNPcyJiOUkvViYvKX4+azZT''@;'; put 'put ''VEEhTVskX0UrcGR3Uk0ubyE2XzlPQk8ofUdKVkU3Sy8lbUNueEN9QHcuanM5WlhuQFpEVHVCUiNYWUJbR3ZURD1NYSowczhMM1R9UWhaZ0EqSGZuRl5odWdDV0VeRnR+W1dZX1AvdDFQL0V0S2N8MkpTVkV0UkRLdV8lYWwmcH1QSzB4WTwiPjkyXjpfKU4+c2V7eCJBa3RbTCsrcjlTK3lTMHlG''@;'; put 'put ''SntFO0hTZ0x0WXg9SXVQUWRtQXVlSV95YU93ZUhgKCNQfihhMkolLixvX0RES01FZywqaEBGUj9KdXpuZ1tOOChtLipuO0goc34/SktVWXB3e0lVbkkyPUIiaCZUOzlmbDlecUV2TkpPLjsxT3o/PS54YXFTNExaeD4vT1Q3cXBCIVdBejNPbSxfKCRyMXhQanZUKiheSmNnZyNdYSh9Il1nRiF8''@;'; put 'put ''cyE7WkkrTGgkdC5zQmEyKE1Ga0BHY0FzRGhpTjovYSFseGksInx3S05pazZDRDlzM19bUzoiZWNuJVMpN01He2hVUmdzWVZCIX4qZFRua0FPV1ojeksifiRXJE5oJGxnX0x9fj5vbD4wM1FmajYifDk2anM+dSJGaFRMPklDLCRVRHxlajdhMkhJZEZkWDlrZkc3PG5bc3p5L31FZFM2MVh0QWJZ''@;'; put 'put ''fFFLSiFrcGwqQU5ddmh1ZCxQPkJ4eTQxXzVHfi9LYmRIeXNXWn1bSU9jSl9rRWk1JEtiREhqWDtUOlFhSCxCV0l3bH5beUxDdSYiVEhyYDd3WHxBS2xpak5JPzI+RH1kPSRLU3lOTyV8Yi5JKD50flFpTn5+Pio/VlZ0NTFBb3k9JG9kNyZtUE5yK3VdYXowQUlSbFlifF9YUHZNd3M5XSM5SiZh''@;'; put 'put ''KEwmcnRvcj4lbyJLaEJdMUYvOkU5emlgYCl+Y3UjfURHa0J8QVh5cn51ZldBYkhlLDcsTntoZXwxeEkoakMrUil6a3guUWJ3b0xHT2pSV2U1eFV8ejU3ZkJaKmg2fSxBWE9EOixhPlkkNWxCSWxZX2UlbGEsZHM+T1RVNlZaKThFTGZBeU1FWlhEdTlyREdweXlSSiJJbHJERSVeOzAlRldBcEVD''@;'; put 'put ''LipWSV0sbmo0KzVXNi4sI2I7Rih8WjRQPzFkQUNYLztYdHhefER6Q0NFOl8wQTVASVRJbmNtWGo6NVhNOy5EM3RZNEhQJUxMTzcsTSguP0FGNEE8LzI+KmZjJTVJTik1Ri5MVE54S3ExcDBGdGM0dTIzX2hFZWssaG9JLmA5Q1tyfCkyTCZfb2ZFUlQ6RndFY3Z2OG1ETmg3MVVxNmksQ312MW0h''@;'; put 'put ''bWFsfj1HXiYwajVYSClsS2V6KSl+Nld1bD88OD5+XlROfG1WIT85RGssP1FIP2xpLkBMUjs/ZH5iVVhfRDV+bEpEaWUhJGE9X34lWlB+NGw4YDhQdGF+WTl0eCs5RSQhNmUydSMzXSlXRThIZFBrLjo+TyQ3cnAqNHJsR2teV0YsX3JFKnIvQ15RfX5PW0pfK3J9KkYmUztqOj9ASyo0YiM4XkhK''@;'; put 'put ''UiZUWlFAQEh0VXVJUjRUJUlqTjJpTHdmZ0VBT3Q4fkwrOHsmLEBSSFt0U0wxSGFqJFs2RlJTajBFMH03ZTsmODVhUTh6RWlQTGZTLFYrdGZELltrfGQ2eD4pTV0xNE8yR1c7PXRvRnU1ZUpHL2UoWzVMcXRTJmE5QiR2a2h9QFpHbXVQLFBQbHxqQ0AmVCRueiVaSklGNyZCOFpoQyxJbW56XT4x''@;'; put 'put ''fE1LenBSUWBOaSkiVEBAbSY/fDNiISswNz5OaSR7LkNqfHFOfiY2YiREaGNGdmRtY3NGcVU5fHJnQjZHO3RFPD1+InBSZ2lOOHpnZkJbano4aVpecU5zejwmejYsaGs2aSIvOUdOd0UvcnZrRVRkZHhJYytHQXE1Uz9SUTd0MndtLixFWFgrYThfRnlAJk5ldTFmRGxueEZVRGQ9e0poTkRyXSkj''@;'; put 'put ''QT0+UXhiWDFqc11RKDluOkoxOl5bPU01KTFPKl85JE4pK2ErP1EoNm4zVFhxe2FgTT92fWx7QH53cFYpaz1nK2VeXlclPmhocyFZanM2dTxNPi9uVCMucWZJT0ZsfStyLHpuPnt7JmI6T11sez8yP2h5JC9acnhtWlErTyJEc1tafHJCRzVMfkwkfE5TRWBIaUUpOz9udDouTSpJSSlXM1VsPmpL''@;'; put 'put ''eCEkflUla3xYMUldSU9zfXRMZkddV1lgUGFNWU4wQSJjOm4+RU1KWUEieWo3cj5idUA4M0F0Z1Y2JCVaPzVEMkhrXnElL31tTEROVjYlUTNjZng0Z0RKTHZXKjUvMSVtazNEI2JMI2o9JkJdWU84elttQ08oQVRrUkAyIT99KE0pJDs+dVhMdHtCa0UvfXM1KG55UkxTWjJ0bytaZFJYe3khWlFM''@;'; put 'put ''fCl1dVc/V1pqIiNgdHVmMkgjTHx6SCVedlRwSn1tZ1s6djo0S3w0TnRRPXRNPD5lZWR9SEFgJil0aEwsT091MHNxUlZfVzZuMlRwK315akIoUEM1LnQvQTNoXyNaVGtbWkppJFd+Kn5TUWBPTmRpRGEqOyVzL0RpeUw5aFleWSEyKGwwYjY4Zy5bRlspPkNpRiVaMm16LnEwJS8kUDYkKWdFNncl''@;'; put 'put ''Qjl1ajp7JlJvaVFqZyk+fUE1Z2dYKHArUixvKy81fXNqQU9laE5UeipnIlJHaCNmUTpuKShaV25NSiZ0YSkqeV87M1JNQnA+ajpgRDVvNCEyeWhDLzA7X3ZhITRkMF5VK09jPzR9WCxyTUF7TFchTWBXI0BbWEtgb3BIKj1KfTdrfltRcT5LaWlaL0RHaVU0Q016cmE0MnhMIi9PODV9LlZHTU0o''@;'; put 'put ''Y1VRVH4uPzomLltfUXBEWlJdc3duZFpbTFs9cXFeSUYxOitPaT41V1VXX1V0d0pzIUFBWiM6dEVwei58MjdrOFNSVUIyeF9paFRxUlpiMCFzdU1zLjFbSzNodCo0ZFNUfTFEXlpaYjZbOlFHVGNTQEF4QWB5ckJ6clBoZUdDR19DNXljSXQuSGxTLkJzJmI2YmxpRzNRZEMpdXIjWHxYLzpRKC5k''@;'; put 'put ''VV9YekJBNE8sfDEyUnNGKyVZU3NlfllVanlkRGthMmAveHJdNDFHSG1mblJFPyl0VGpHYCkkcnVdVEBNZzlaRkgofSp9SlI6WXwoTXJnUXNndChjNUFRRn1zQEpIPz4rWWpKdyFjOjtdMEQ/PmhxTE18bUgqM35xRH5jR1pjRE5mImV+dWUxJXB3Z21ATHxuLlYjKkBJekF+Pld6dF9yV3dYJXNW''@;'; put 'put ''QnBzVD9NcWY8JGJtSCpAZkFhe0xxI19NMFZ6RDQ7Y3tAb0pPeW1TOEUlfDtAYCZrWFpSeERndCZ+I0JUbkFBUCk4PjRsWT9+ZXMleGR+TDU/XUAkeiRjZ0VmT3hpbHhmdmhKRUEuPCxoYEIzRS5hS1lpYG02MkF2RFFReWF0WllTSFJaSHZ2bHguTHN1dEJBQUFBQUFCdCxMTWZuTEJuQSpjP3J4''@;'; put 'put ''Z3FUfGZDJkIiYFJLNnNjckQiTT4iWnpAUGRxcVRFYC5SUklSWy5NLFM0bS4jdDd2XnBkeiRkQGw1eFUrMXQ/XmVPU3FXeCgzXlFEcXVaMCNKKUloXmIsYDxBPiReKU92VXgjSSNzTTQzNjJ+RS5qPzgzZiZrMUF4Wkk3SX5xZl1sKGp3KH0lZUV8Qz0vMDoxWH04I1tJWXBbbUAzKmUiLHd8PCsx''@;'; put 'put ''eyIwWUcjX2BbLEpyUntXI0pqPXQkS08iPHMqIXNTJUVjXSV7QG5yMnw/bUhYJjh1flFyb21veGVqMFlOZXJOP3JfOlUwRz98WnVZR01xe24qOnkrWyljbjVoTjxAVy4wTzMrV2dOOGtVPl1hKnVBKGtVZUlYMktoeylrdk8+aCN0c1lMVDlea21tT3BxXWwmR3A8eWRdMipJSVM8Szl5NSQ1eHV8''@;'; put 'put ''XTYrfjYvbVErSzg9Tjs0eG5AO3AlSm4od0wybCwuK24vM1Jffj1ZJndbdS9QQWBDfC5JXnlQensmdjd8SyFVISY6VUdaOX0oKFd2YVZlcDIkZURMVXssUX1zc3FqTygsZ3dfUGZ4OyZPK0lCTjtQfD06MjNvZiUuRzxiP0YzPnNXZGdKZXQ6Q2pnIXRdbTpyfi5FVGxSYnAxLkF+Lih0JiMuXSpN''@;'; put 'put ''eU9AZDVFY10sYnxaUlRzTip6MmRQV0JraX5JNlVzKHFuQUBLUjZ1dFlJcGtxWFRtVSNES3pdcUJsSj9YRVdYYy9gUUVNWG5KXVgqdFRlXWVyLnVAKyY+cHwrRzJWSX5YQHx7SG13QnlJJDE8JDIsX3xtQGlFTXA2SD5WaXZZLDMwMUc4L0xvckY4O1ppPnNaVDkyZCo2Qm81XlRIIUZiIkZ3RlYl''@;'; put 'put ''TEBrOEpvRTFNMWVKI01SdXtEMDteNmQ1SDludy99T09oNUE8bl82aWRdVVhpMylZJWhTakBQfiE0VSFGRGAjO11fLEZYVTs9fEA0M354O3ZxKjs+ZSE7fHgpTm4qdTpybD1CcXhPanJHL25yQClrViZLPzBvOGMqLG5+fT1gNXFVaF55UEFGcixFVXhjPT1We3hzamJNbUYwN1lXemYmeG1yLiRK''@;'; put 'put ''N1ApXj9WL2JTeyZrUlhLNG86ZDZeS1d+L10zdj0hOmUlTExrZWtQQUY5WyR4PmRTTUdZITYibldIMWU/akQ8b3NqcDo+MVs7YW17V18hYTJePXYwUlF+d2pBKXNmL24jL2hDQU9QWVc4P21vTUBQUmdGWV9VaWI/ZGZVZDlzI0w/MCFJL1Q+WitMaj8rQlFSYVNLYzlmUX0mQjE0aEhiPCprfTMo''@;'; put 'put ''M3k7ZTc9UyNCeWxCbGteLkJhS1VGZm1AVFoldGlben4zfG4uM2UySSs5WyM/fClVSlI4fnlGeER7SmVuNjQvZT4pJkJAW2J5Ul5kW0xUZVcjUlp5JEcmUCwvWGhXUzl3VjRRPUl+XSNAfUkrRXVYWnBUQH5uRDpacUdlLnxpbF9qSWR5bzcjNj93dVFkQkUlIShke3N6bj1PUXxxQFJ3SFRQfnc1''@;'; put 'put ''bmYpTjlhI1pbUXw6bUNtJHVMLmokcXpROTVzSkBXMyFAdn1CQVlpKDYyfEtlVm5RciJ7cHVDYHl9a0s9XmN+X100YzVdfjdPTDwyOWJQYCtvUkBnIitYUW1bPW19PUs4ZmQoN3owOnR9VV52a0w9MXNwcEAsaFRAcFpVSCwlZ3xbVSxkRUUqTFFhez1HdyNLLFlgcWBPeXsyWGw9PysjYGFac1J5''@;'; put 'put ''bTpSTGJRNGAqOl5iUGRmTVBkInJIP3N+WiYmPXBpbl9iNnFkRFhhTFFbbjsuYW58YFBjOHhUMGh2QkRORCUrYmE5VFVLO0ExdFtgOH5iVSVkU2w0XWQ/c0t3c1ZZJC5ZTCZvSXRPWSl+MHh0Nzd8JlZ+fWhPJDpOfnVnJFJvfls1NjIlclsodVY3fj80SEs5NH1ySzQ4Zlk7OXZnSGcmb04hMXlD''@;'; put 'put ''YGF8VDY2Kntmc2wzYlpofV1YRkMpWyM8XldGN05lK3EyVHJwUk9AfUQiZ3pdY3I/dDRpZjZkVlQ9MCY7JWUuUT5PfCh+KD5wV0xYV0Rja21bTnU9XjZGOillU0AzWS9ua0RML3J4R3l4Q3ZoViQ5RTI/JlImcyt4LkhgQD0xVilCQ2s4MkdmXmJienwjWlE8e3o5aWw0QEJ1RFp3ajBEQzlCfXpV''@;'; put 'put ''JDN9JHVqMylVJnwyTyR5Wz4kQU4lSzgmJXAkRzBKMUV4MVpZeXx+fUcjbkpyW1NKYjVzRClHPE5kOylNOEB6bFZXTEpXfCVaJmlxeEJ1JntbNGZRMXNbSU1eIjBuMlJLN34uaXJCL08+WXc/LF40WDpHV0E1YGpCJkgoN3Y9eiQ/fW0jXT5aMlpwMlUucnQ9P1VETVNQVFdgI2pGJVZCM1FbNFY9''@;'; put 'put ''SlpReUo/TUxDdHJ+VDZvY0NXXzw/RihHW31OU097ekRUXkx2RDxPWkM4dkolbVtAM2dELHY0MEZPK2p8Vm1dSi4+O0l0fE92PXR5UVRQbl1UKUprekJHZy4kYSYoUVt+bl9YMipobTkyLD8qUU5UJVlOPHspak8+ZWNjbTJrfTs7amJ3fk5gQV9CIXpdRnJfcmFVc0tlczhDLlFhdFtHbnJld1hr''@;'; put 'put ''W11QKXQ7blNBVmZ9JlRxaEAmTGFmOzdSPzxCQEk8c3RsQHlfaVYmRlBnKj1HbGBncC8jWWtXcHhuVXAscmJKfD5sazxybH5LIyFZO3BOKmRNTmJweyhCLHB9d043dzd7SkV1XkxuezRnOnkqM1ptX29qUXsjfm5AaFVsVmJ8MVE+Xm85W3hdJT1JX0cxPXwrSl0yOFgrZGRTaGh7XTcjZ3BIOWcx''@;'; put 'put ''P2FWRTtFMmlydmtqM0soX35wW2oxaFQ1QFhmYD0zbWklIzZLNHx6fSVQT09Ue0V0JE11YWlILnNwR3d9OldKPjxgamF9N2V9JDsqY15eaWZnVmxsVEJRIlRTKkpdPlU4ayZEOXw1a3dzfWZ4NnpAUWx4cWsiIWE0YH5AKURLZS9UXVV9cnpXKD11cDAlYS5ZRjEsOmZDJk8/W1gxfT4oanZDZT8x''@;'; put 'put ''KSopb0VESixsUG49djxsLHNmczVifnNJOnx0Z2lUVntaOTxed2ghYWg9N1FpNVRXbE9WOSk0YFNHflold3JyfUJ7amhNVSlkSXklPCE9Yz5xVE9+bE4oJj40UyE7VDwkeEUqbi9hQiI2ZmE8b3B9RWVmKVYmQGlSLFVDdD1dKDs2MD9Lai41YEskcjxfR3JKK1BWQGImQlA7OiMmWVNXLn59X3Nw''@;'; put 'put ''TVN6MmZwa1FDU190YGJFXVVTZClsbmhKTURMYD04e3xyaSNAUj1zP0JpezJwb0xwWGBYe1BBRjdkOD15dk4xT1VhP3kwQlppMiJzI2RJRDB7aCNycUc0TDEzYHt4XSRQOlU/KCNXfigjZGZaI1tdQXlfLk1NJXMlQV5+THhfMnpzbFROemIyK2NsQCxZfmZ0TSJkRyMrL0xScyg0RUFWQzQsdlhh''@;'; put 'put ''ZnVFfSV1MmdhM0t9KlYlbjFCeHEuckNPdSxsaSErVGxLdnh8OX5HZnRxfTwlPlomQ0lQfS9UbnF0MHtOQT80bTtUPzUyPWJwVyhwa2AkVnlSIXdQTFpZfj9UVzRHbzJjTzlkJU8oTF44TFZqaVpKNl1OXiRdQiE0UClSfDxZRHJEcWg2JnBxKixJMn4qUihbKFA9UztLOHtZemxnNX5bb1NvcXR4''@;'; put 'put ''Y0lpaTJEMj05fEpXPm1aLE94PilvQy9HcjlUTTBFRT1XWT9UW0BsVEA9PiVibnFvJXlleVIrcU06eS5SQjAwMilFXTY/elJ3Tn0lKDpOIT16QzoweUk1REB4SCRlSW90S0NPTTVVeWdmIiNHcTErYitbflNxYl8kZEVtLHxvMnxweyN2QSE3YSkzOm47XyoyUVpneFlfVVdienh8R2IhOCNebjN3''@;'; put 'put ''MEZJfE1KY0ZjYV9mfSUzTihPITxeTUlfI1pmfU1qS2h+RCJnPDZwJj9ocXJbblBMRnk6fWNdcmgoZC9AeHJ0Z196U1B6PGw4cX1VaFJLRCE/eXgkWz1kanhGSTNtIypeUztuemYhITMyRzswRS9RRjBSb24oU3I/RFRpc0h5L3c0dl1MS2N4Ml1wez4pXVhETDpbJUwsNlAxc0tLZEdQYHAyJkUh''@;'; put 'put ''c3YwUSF5ZDpZXyR8ezpHUTQzbTgvUlZQWlA9N2g+OnJnV3dvekNDI0t4OF9USCU0cTYjPXF5b0JhK3IzODpuMzxXKU9qSnNeVmQ2WWpPdFVsM0krVSgyKlUlfipYKnA1KXgxbFZmNyE8UzgwZU0rPmBJRCRURWlFMVc9bXZMSmN9dGsoemVmIS5dbT4jPlBYP2NEb3lrOEhaUipBMDxbU0lvaVUo''@;'; put 'put ''QEE9UE5LXyI+RGFYPTlVWk9nXWZIW0RjeDZWWlkua1o5M0JYe0t+YFlyWWwhbT9JMldlUFF0fTZ5KmZaWUYxcCVwKigueHlyIVFRSFhDOEFwdkFEdUtNL2U4N2JufVJ7JkJxbSpCSUVeVGN0eFJwL2I3Pmh+cTJEYjtVJUl8dn5AbHA4LEMjfDs/UClBdDh+OX5tTEJGbChBTDpdQSJ6Si9TKTBb''@;'; put 'put ''IVR+MCJCe3NxUFI7MU08fElnNHs0JS5icHljUkw3dFN7bnBraTZSK1JuTF87Z098cX1ScUpLak1MdUsxfmFTdFthTEZCLlJXPjVaSUJuOCh8M3R7bj1mZEU9LlFlTHx6JGspTkVJciY0aW5JZ1JII3VkQndEYl4vbltdV31WLD4xcXFmUmw0TTt5b3xyS0ZMZm1UYGJYbDFBRy8jaHpLbW8zNl5Y''@;'; put 'put ''MlpgPltRaGt6UkNxK2RrXSt7L2RCV29ZX01ZWk9UPChBJXgmdU9eOyR0dT1RJSlzcnlefU0vMUR6S0A7RHJ5dCw+PWp8Lz1nSFY5NXYrQyp3OjwpNyZkTGBKQ3RvSFJZcnExW25DN1Foe1NNMm9uX0dgWVdgRUE4T35ac2VfRXlHaGJxaDdFQldFLn0uVmN+I15oM3xrTDpwNFk5SzA7aCQkaSU+''@;'; put 'put ''OXtUdV8xZ3UmTkJFLD0kN0FBcUhCPGRiSzlUUTlLT1VUOH5WcWwzaih5R3dXa19QV3piaCpMJiVWZ0Q8VCs+JVcydWdZT103T3Jnck9BfSFse3JiP213cE1GUl1MOURbKEFEQnRUIT1Ab2F4MXk7c0smeVNVOj06emNDJSNTYlI2L2YvV1tWWzkhTEsrVFhieXBZP3lwKl1pay5wNUNZZSI7bTEk''@;'; put 'put ''OHpNOyRrby5eQ0Y8c1NGM3NsUmEpUk8rfXlJSU4+aXkwV0xUdkYqK1IoRzV1JFlvUUA8OylLOHREb014OnwoYyhhSXhdJFFjNU1dI1JeM2VCTkJZa2RTMj8jIVdkNyZCI159az9IQyRZc2tKOEVrdD1XIVNINFFATHdhcTlJUylKbWdsZzhxanhrR1Y7VVNgUCp1M3kzTmhSXW9wWixXQnc/WjRO''@;'; put 'put ''TUBpdnV3JFYwbHAjOHVxVEsoVFM/cmFbU3JePERJTyZyMntxZVEqSSI+NFk5VXJoKF9dbX47OTZ8fSh1QF5FInoxZV5idzo2VmMkQiRMbWg8XVlydmtdJTpOdGdndipddztILE1eZGhSRnswRFZmV0tvIVtWNypTd00uXyZOcUYwS1EjKTJxQnMxS15dWi5pdnR7NiQse0lHQ0BJcl11QnteYChq''@;'; put 'put ''TmR9W2orPiRKR2RSaDEkaXBQKz5hLDo4UU47L3RxcE1vOEBRenore1c4I3suK105Mnp+Jis7RDtkcTg/UVtdJHM5X2JKKDVjOzw3cE0sbjhDaGE1fUBpWTtNTno+IShVX2toWyooMjFhN11wJEpxVHFYU1ttOntWTU9JI3tiY3lie29WKm5ULjc0QzMkRmtFYyVaQ29baihkUXFzN2dVKVFbTEpa''@;'; put 'put ''M2pAeGZQI2hFciQ/OHltI3pRJGVCam1IRXU8LjZ3bSVIZS5ISVhUY1JwbWFNR19pJiozcyFXWF1ZQls6NWImdX4qSkhhM1IlKFImck4ubk1aKzR9JFsyPStDcE9eL3orJVt6e2EhMH1HOSRgMVZgeXk4TVlGITk8dzo2ZU15fUp6YWReTTdxcSt1eGQiVSQ0bkpZXV9aVncxfkZMR1tMW2NOQnk6''@;'; put 'put ''blMqPntuOiEhKUFLeCt8MTRxfCsjKFg+NDhIKDR1YlNyXzkuL24wNTVkcHZuXTNnNnYmWm1DRWxJTVF4cWolTi5CSEZzZTA7LHRIPyFvITtnO1lNLykrVl59b0hsPiVgeEJvfCw0K18hMD5YJWJ0WEgsbC9EflV2SHlxPkApKEtnbCxsUzVoXXV5ODR8M3tNRC5Gam9qdmdbJSRZNDgvVUEybn49''@;'; put 'put ''MF8yLER9X3Y6PmdzYEQ4UmU/WzMzI0pPU2ZNZHtHc0xUOGhMTU4rNmEjNnBaZzdJa1JfKVJscHNfI1R9PnI6Z3NsNGlfLEpIYUlUZUI3I2s4Y3NfRU4qeTZ0emhJS00zdCw9S1dJSDFKNm9jQjZlK1FqRXY1QTxUPlQxbXJuMXBfeHJPakVWL2UjOE8jdFErQG4iNV1dLyU+ciZuR0VTVWhnVVRV''@;'; put 'put ''fU9nIyNbN3ZjeDYhI215KGdyMjFpSHcudFV7WW5IZXZpMDMiN1JwYUJwOTEmOj8qUlNvcno5SCxULGQ1K1khYGo7X1A7UjNdUGpaYFt6YHQ1L1g+eEdgZGVXXjkwQCJCfVt8My47OUloU21JdiovfFNVNUg2Q2JANW4rMio0fks9IUJtOWslOVorSGp5cTREdzsoZmNUVmNtbzhXVmooczQqL2BZ''@;'; put 'put ''P2hvSz5NRkUrfCV0VjgpRit5RXJPYCRGIn1iWXQibigoQTNTcnE9dys/eU09UUtlSS9wUG06bywkW0U1bkc9cjRqfT5TTE1lVD19bHFaeE9gMHxYTiR4WW1AZG9RVldjLy9vK1VoSCxobigjVzUjIzxrRz1eMn5zVWhlO18xd0tbPzQhSTBpUWZmbDclYzVQNmAjYEpDJkF5JlRecFVMa3RTWSxE''@;'; put 'put ''WFUxbj92akt0UHcrIT5pW0V7TEhiKnQoKGFpPTBNYWgzUTAmez5rUVhpLj5vOyNtNSUlJHE1LjBBeW9+djYvNX1ycFJPND4zMXNBJD1dQXVjYWtUM20xMihFUjZvVC5lUHJeO2pETU4vRWhZbl5IKzlDZkRBSXNaI3w1JT5fKzFRUytzTVJZTD0zd1o9Mm9mTGdFUSs0W0tnK0x2Wi5EXndxOlhE''@;'; put 'put ''KHdmNDJ0UWc4MDVYaVhCN09pLCpafXAzflkrZDolY2cuOnU6KkBVIj1GYzBBSWpiSTpMdHJ7UkIkPSZtNF5vYVVRY2dLPmt+P1goemNvPXpyYkZgSDFZODJ8JWtGcSRNY3E7XWd8TSU/eDRxNU9ULzNzLntNdT1fR3RoQGAlKUoyUiNMPmNqbnd3R3kkRyxUJmIzbENaYSlqU1M+SSNRJXJGSm5E''@;'; put 'put ''cFglZjJzQSJZMjUsLl9VR292RH1jMGFfOzhOWF15UnM+Nll8SE18an5XbHAsamxzNzp5UjswfkhiMV0jW2s+VHY+aFp8Wz46R3VQPWI+Wzd4dy4pNSV2IW05fCooIVRFMEZjXTdeSz9PbDNUZURSJElqcyFoOGxyZVA+UVBWY009Mi8vIys+MGVybUBZeVo7Tm9mKUtgbCVob1l2OGlwaHhPJCg3''@;'; put 'put ''dH4lXSpqbjNedGdMS1ghfExjUldVTDx7NVpRQTg7XjNbWHlTZmUkI2phK3BLLEMuV3JTPmM5N3oyei8xazozZmFKfSkvYCYlPkRnKF9XWVhiVVdSKntJNy8lJllOT3AiRXJ+KmhjMyhXO3pwZz52MWJtZkBATTd3M1Uje301Li5xdXB+aVpvcSwwRD9lc1NBX3hZci57JWBUZyliczgmVT9pKiFb''@;'; put 'put ''SUw+e0VyfGB0Ji8wTVdffFt7ezdmZ0VIQHd1VT9edWZCa2lSaz5PbHxSKz1zWShRP1h8RDEqZ2JbWHdSciEsOXQiTytPbS9TX0VDcGkjUyhePld7RTtXWzdfKD58amgvciFjdm5gRF1AdiVyW15KMWMsNDRSXTE9TWFwfU1DXSghbT9wSl8uaX4leigpLDMmPlZtZC4oXTIqa3ZMb1BpRjEwK2Fj''@;'; put 'put ''NjA7dmhnYz4sOkhGOEIib3crT192JV1mfDZ2M3QmZGRjO2R2aDRkJF9raDZLUzpqKnBTM0hEVm1XdWNIbz8qIj4pW1N0VmcoNFdETnNlWnFqWDVqazllSiFwJUN5eS8yL09ZUVYxR0hpd2hdR2svenZTcTptKFt5Lig0ZlVyUyM2Mkt5JUhbaTYzczNlcnJJM2BwclFHcDl3KFpePFpSR3BPPVc6''@;'; put 'put ''eVIsK0lFZzM7MW4qOVEsWGVzSnlLJmdNfiVDTTk4OjZ8JnRzfDQ4bSpkVmdeOE4mW1l6USpaX3dZTmQ9VFtbLFJKRjtJfEhkd3dfYD42RyFeMERrYSVJPUpEInZqP0Z7b1RkbihUOy5wRmx1LkNFfGMwfF5gKXVbYEgkfShiVkM3bFRkekRSPWk9LllnPnZnTC9BUy8xRTVKS212S2JqcDAkSTlm''@;'; put 'put ''Vmtec2VlS2QzR1IwRjB7Rl4iR0tHJmtaQW16ZHdxb1RqXUZqeSwwXnBCKFVJPT4/a0NbWjBhMihgfVs2NGpnQTNycDBjQzR+fHlTcyEkLmchdjVgISYzaVFAVFt4dFp+cCRaVUhUT3dMbFJjZFVOOTpJQD9KX3V6SDVxUGkzUEFWSyxDXyR7MSwqMnNVTGRjajN4bihReSRTXWdMeGlLZ0s8ZmY6''@;'; put 'put ''Nl85TEVlV3E5XztVLFt7X2wuWmY5PFpsR1pRflh8UTp6dSVkL248KCZLezNhWXlKSG9iK0lOOT80Rn1xTUNHP015P2BJQWtEJEtse1QkUCFVLEFpPXBxdCZeMkhoRTVXWlVeNClEbmZsL3RgPjgjNV0mUyZrUHU8Y11yOT5YRUlBSHRHd1QyWnV+dSk1SHlCblQyXkNIdll2b3w2KzosbSMsOz1T''@;'; put 'put ''PiMoWylgbVJGOFlGfk41JS9bPDtfRSVUdUN8JTFiVWVoMmRzenpDdSlCNm1hWU5CdmA1dyUkKHdIczEwTWAkKSkxPGoxXTQ8P2dxVD1NWHY+WENoeVhAKDteeTxuS3c/TmshW0V8TFdCIXpDJn4vS044UktSYH0vaXJPWk9sUTx5PE1sSzwuUFh9TDRHOUAiKC5yVTFiRVFCejNZYU4rJCtZTVM8''@;'; put 'put ''JGskP0hES2VRfipWcElLWCpGMDtEdU91dkdRUTMsUmRdVDIzWWM8Q187KD0ye2JFaT53IXQwJk9FZnpdTkJ+LzAveygoOjM5OklHaCV5VTouSiklZzQ9KTpday42aUN8MnN1ZF17VThBbS9mfTVOZzs3Rn0kcXdoTHgwNGRycyszcmt7O2BySFVNeHR5YnpgcS97dGdnfXZAdzpvKSw8aSZxcEky''@;'; put 'put ''M0Y8IWlvOT88T0UzTU10QzVgYk1fQzEvU3JML005WnEvZ3NSaiY0RSpQdCx+Yj0lcTxhXXY1NzR9diMiWWNxcihxR1AkLHNxTGI+ImZPdTtjSSNIWHI4d2d7cVd1dkZuSDB+cV5ZIyVEZFtmaCx3fil2b2ZZNkdLITptVHhCMlN5IXdjL29OUURGKS83dnssblgufjNvJV9YfFN2c1RkZU54JlJ+''@;'; put 'put ''aFc8R1tFcl1ea2xXNXZvSkVPIVFyTXVqKGAyfW16aU08bkxUPH1mOEcoSHNNeS4keHtFekt1W2AuVUNsfHpTa3t8cyQqSUd4RjltZFtHNk1dayVbbSp4ZzA9JnY3Pk04NXVOcUdvfWlSfnYzYVBCKV1aVUx5MXJTanV7Yl1Ofl9RWDZnfmpXIyU+Imx9RUhyd3I1cXZyNTA6Ym5dOjBIKCI2YGwr''@;'; put 'put ''d0csbDp7enBQfTwzOTwyUkdie2hWL24hez00OSUkLmQ9JFVgVGhJe3wrN1VIYS4lQTVeZGQlYm57OU83OFZmdU56VEZjUk4hNFZAUjQ0eEcyZF1VMD9JYzxnKDYpdC58bk5LXjZDLE5uZjJYZS8/PFJWMn1yQzpNKVJNPkV3RWFCX1dgZWNrbk08b0JNUiZQdmRsYGQpM1hMOGZteTYhciJVWSk1''@;'; put 'put ''OHxCXylRcGAmJCFlZix7RltDbzBwdSRab3ZKNkkrKlZ9c2wsKnhtQzkzQnUrOV43ZiMxJCteXiliN2pXTnwmSVNaTlRgfEtMZ0tjOXksY1NiRldUJDorN2RaeGojNWUzZjIqQyhzYyhRdCxOMU0jay8kUDBjcSQjc2QyNn5qP0dmKExDRFJwPVRgI1dAPkVdcipETEQ7N1tHV2tNV2xLTG85U2lR''@;'; put 'put ''W2llTnIue1crajw0b0UlYDIuIVI9M2hlR0kiTE9OZ346IihhcmlwVW81ZSI1Q2NRR1djaixWKjRpPUcmUnZ6RzVAKj5kYCpZM0pRRD1VZCtFRHU8RCp7TjxySF8kQWQzWX1XZ00yXj5CY0RBbUtsY28sLElbMShNSGV3OklmSjpYTSVrejd7V2RWRTpzQFdwYn5RIS9ZJip0e2tBM0k8QCxRMWNg''@;'; put 'put ''fUQmQz1mYENWZ0ZrdWBKZi8oVClbWlNGKTUrInsien5QeGxxRCtjR0xwa04vOmVzN3xZWGpuSmtMNHtJK2orP2hJPSZzb0ZHIVldVCM3OWNbIyx1ZlFMZW5zJDZwdUlfQFJiR3E4JDRZVERveHh8IWIyU0BTNFsifTMwezg6Y01acn00eHRjdEhHYDJRN2dCfGNzSHdgRUs/azIxXUVmbWp9a2JX''@;'; put 'put ''N3ksJWxrNHY1Ii5tVFRYNUtXPzN8RFAhOE0pW0UqXXt1PnN9KGw5I3g9PXNOUGZlbU9JZiw7YWQ8d0NwaSI3Tk1JK3Moey4vI3lPQnxBZm5pVmxTWmt5NjxHTmBedEROSCxSIUhiXWhyd05HWExoIWREZzY2VUEoLkwvKEs4JEF1TFF+clg1YCF7N2pUKiN2KXA4dDE8PFJfLlhic2RpL1RlaHFl''@;'; put 'put ''cVtOJmdOJWJ1elVGfTk6eipCPTJRTVthO0VkOUJZe2l7ZXZJOCFuWlNQfXlfaFJ2ISl2UWdbK1thJHRORCtKITp1P2hJV2s9VSlsQmtxPi9FZnN3YStGQEB6ZHVML0UkbTlDO0k6M0p7SEckM3d0ZTxwckBrOFNtbXxLbzg5a2MibTFmXjZdUXMlJkdnayN7ZC41JVI6aGB7KGA5NTJRJERRPy9i''@;'; put 'put ''ZjcxUD1gRyUvX0JeTEZhZjdbLHtQfCpJRy5GJTxtcHMiJiJ5M19yIV02TUJoIXBBX11DfVBfWCksRXpafm1RPyNsLmU0aVkmKnk2aGhDJDhhRT1JdFAuPzsxNDdbaEFFTC41aHBLP0BTckQ3IXBIK2NlbDo9KCxoIV9ReXp4dl4sI317QnpAdG07bXNIMXRrPmpzTDN6KGNiIlNHPnBuZyZ+cW04''@;'; put 'put ''SFZdSyVfYnVIa0xdKkRHLFNYNlVNVjtjRGBARnJsfWkxcC5EXUk+Q2ZvZDNuS0ZmQmVNMGVLdFVjKnt7QF8scF5QcHxpZ0pSV2AsdHtaJFtDKTBGMVpbeDVdNE14WyYvQzl5eU13Z1ppIlUrbDtPU2YxRGl4PFl5OyNkW1piRyEvTHVXelJ4MiJ8anJncywvcGouWmg8ZWlnLjAyYz9CO3RCWU5n''@;'; put 'put ''XzRBNTlHcSNMcG88S0lFU2NXTztRdyE1S1FYYjBod3E8KHZ3QFYwPTNtKF05VHldMk0rZTw9aHU9QHJfMjVGNioiKkRWbkJjbCJDciVaP1lDakgzfWpDMTZ+TyguYEBPZkhZUWdFJkY8NipHMGZoaXt3bFcuZXhYdnVkLjx5SEtVLD03UzZjeWVkRFZHeGhLa2pVZiVPV3I4KFpzeDJaNiEvbCIk''@;'; put 'put ''UjNPfHRTKy9dRiZUOkc7QUdZI3p6YXB5Km1wK25adlBrPDJnVj15aXpVN155KSxVO35JZk56QzVbe3htZSNzI0ZMaXU+cDN7QmtTQ2lVbjNFLklpbjMpeV0xOVtJbiF+JnpDVXRXLHNYMVR2fD4oO3EmU1l5VzQ9KVUmJTlPYkV4ZSNyalpYdjB3M0xmXzkyPWBCN0NKX0FuVCRyeXpbRy9zQlpQ''@;'; put 'put ''fWApZXg9a0I+aHdfKTBHNnswZmAmQiJ2SGFfNDBvX2ZFeE1iQFdrMyNBYnU/LnFgYi91bTBvdHU8dS9kVn4jPTldbDxMUGBJTnAqcy53Oj1afSs0QCJDTVlKUiN5QSt3JD90RFM+N1FgbkowbTxwT3pJQVtENFttRkQvNTt2dClGUmFhRkg/QmRuaWo5JU1UOSYyUyMrT01fREQzcXUpTT5DdC8h''@;'; put 'put ''dTAjfj1ORz95aWdrLzNOWiJQUzo2UEZ1JU5sZFAvMEI2ZnNQdj5ARk9hJFBqdX5Ud3JbWE0pflp5bC9pIio2czchZ2hiYT0wOUs2cD89enZwbkpnXWlEKXtwK1EiXmsrVjBZIUFrWiF2aCgzUD89Tit9el5hMEFHKFFUUVhmd0NGdyZiejNqKjo/XSF0I2lRc3dFMXJeaSlRbj92ZE9JclYieiF+''@;'; put 'put ''aHR8ZlQrMV4yNlFJMHlrUX50VzYwTUgxb3NhOkZCWS5VeSlKayFEe1Mqa2ZDRz1eNllyVmc5fHpCRl1mRipFVj1QKU1fbTs0fnlDbjI2NVhWYmA/SDt0NmpxUTR2MjQ8Sih3WDx6fl99Lz1wbkc7VmR2Q1pMaX1XMTlFTTx5IUwkVTwkaG4hVDJqUlZ6SzZTITYzcC5lQEVEaFMyYmQqUV15Kzh+''@;'; put 'put ''XXpYUzQxJCQvfjUrYC5oWURvVnJyM1kzci9RW3RTN2EmS09PQ3JhVypsPEJeUiVLL0JhNDw7dzJEMlAqeHZwOVFLY0QzRlI/dGsqOkJkPVtgLE5fPnF8VFlnJktrYmArPlh4O0Bodnp7O3EkSjkpN2RYdCpEak5vSUsjYVJYSm91WlhlTGJaLjspOyI8cm9tYTBuI0didVl5dFNraFF3cFBRRy88''@;'; put 'put ''dSxsKmVhWUdHXT5tXWYqIzVJOHt4U3tvYSFkeE8vaUojZWV3clFUX2dAalJbb2MiMVlXOGZoSV9PcDFscnluUSpuZmBMWnZAUTtlSW0iekNLcW1pNnpMX0QsZkZtbkZHe24sP3F5cGJ0bytEcVssWVFNN0dudHV6YTsxRShTdG47JCpqamt4WzVdZDhNLFdaRmpzQiFjTGxZRix1Rk1+L2soZzZ9''@;'; put 'put ''fU04eWw/eEp5WG9tUiN0TVZzLlZmUCpxUyhdIXpgdV51I0BaTDUkNGl2NmBDRj8iaCxVWkV8UXtEVHJORVJrRTMzYGY8LCxFUz01SSFAUDghITFtMTpUNiRlXUoqYEROKF5QJVY/fVArIlZ2dExYRkJLImVWNmUjNU5SZHMpKFBQazp4entLek5vPywvISRrUzBgODJmbEJRYCo3cW1KdGpRIlo9''@;'; put 'put ''Okl5NH1yYj4pWHxlT3BnWmI/REUqckl1MyF3Jn0kTS5nblkyWF8/czwzfUA0QHtEd00jUSRlOElUUjRxOSpCK3BNc08lXzM2TWsmMS87YVUlPDxJI3dhM2ReJmM8TlRVOV5nNkxHbmtaXS9wO0BVIURBO0R0ITE8ZV4zbSpmcTdWL0prVkJqa2NjTE4wXmt0a28oJmtWRXJ6VXZHS1k8MyNoMWEl''@;'; put 'put ''Z3Apa19hXmkiXnRwRXxOcmYuYV08RyRpQkY7PXZXXy5zLit6QEtFTFFqKF43Zm4sNGRMYH5uMGJvI05tMit7ZDA7V1NOXSNXYncvTG9XZ3ovcn4sUkxKPTBhNzs1MDVQdV4sLzl4JX5IdUdabzljKk1jKzNXX1pvTVl2eDslSzdZb3RrRC5zeFU9ITRxWUtSRDFQWi85KE9xfm8wYywlMCl8alpL''@;'; put 'put ''ZG1NJXQjbHc3fFBOWnpRejUkbnJPc2QqRFY7ajNqcmFHNiR3QUA7O3U/LnwkLkY0LmhXZH09R3pzbjB9LnBRfWVeXTYrUygzekhLNittJCpdS3B3Z0sxemErQDZuWEU8bzhCYlpHQnsqaHJCeiN6IitldC9yWV59TFVbZyE+MFc+YCp1NGR8cmtoTTRvITg2cU8lcytNcmc4KH1wVnQrJWQyPkhs''@;'; put 'put ''TV9zPEBmZm9Ka20sUlVMM2BKMjBZY3NpMHNFVVN8ey9tVXtLS2VEI2B3bT5BO3RQY0RnK1lhImhyRlhXRHd4VHZzPitmP3xzVndQW0ZTc0hgQ3l1QkRvOlZ4UjhUZEYkSShtTyNbN1EmMzoxUmw3USJPe1k4L0padzxmK2RdKV4qd1pXeVZGV11UU0tKNzFSIjBjPUdHUH0rUjA2RVdTR2tDTnw8''@;'; put 'put ''UUY4YzZxSnwkYHpadyxlTEs9T0l7PS9vSEkpaUkjJm8jY2xoOHQ4KGlHaHdlRlkjN0VBUiV7c0AhYmlJaSEmeGgqYjE3cFMhcW8+XWtZfnJ4VChzfUJHeCZqIyMoeD9fIzlqd1JBcF1acnVAWHVPRj5sMnN3RXh6QTZDfkxjXT9dUyVgbjY3JlRdYyp6X2VCLCUwRF99UXM4RXVMXmY4KTRbWXhD''@;'; put 'put ''WzR8eCplQyU8PD0lejJEVVNoZHs3NnB6VFJESmxyKWZufGBFYEp9eFF5OlIxd1lJRG5Ka0IqREh3fHg1SUs8Om9gSi8ueGdzY09va0RPJE8qJEw0fTtmZkREQHlwZndFWDp6SHBQbCxmLHtmYTVgal1lUnM+dDFMTDRfd31xT2R+I0MpKWEzb3NGYyUreUVDM3g+PGhnO0hINmhZbzZNRkoxNnYq''@;'; put 'put ''QCl3bnU3WiNTJHNbWW59V1g2eypNfkZQPyt7cVJQW2ZzdDs+ektmaGNlRTZNQEhQXUZdJD1JdlNxJTwsZGdVcmAxYls2WXhXKztDZy48KyYwRllyZWpsJT0oJHdDYUNgcHhpJUw1akBlJVpaKklEP3JzU214flhtamxVaCk0USt1Qk40V3I+SS42IzgzNFgwNl4lYEdFRnU2ZSovRHVxYXckKUtA''@;'; put 'put ''b0dNfT07ZHdVZVNAaj8xeDQjcXJxQkk3ckR6KmhCLzd7bDNbXXpoXSs4MS51VGFfYy9CWjBYIkA7Tk1dLmhMaWQxSEB8NCROKVtsQFYjJiE+S2h9UiNKfGFKPEA/LlF5Ljh6YGUvQVBZNCQkfH43cSk3TGFlSVdnVnh+K0FfeEspdy5ETXg2Zjc7OzlTJCp5YDFiIlpCMmtwYVg0Tzh5KFFrI2gx''@;'; put 'put ''Y1ZfTVtCO18jM3kwL1pNNXdicD9dI0svYj51cjZSNlJJL340OVghfXhhO202eXZGaF1SPiV4QWtjbUU3ISR5L1ZAeDJbVWg/TzVIRXoxV1N7VWNjKzFTM0xgeEx8XiljP0FAKzQ4NF5mZThBam06T1prNyM8JTo4dUJEUj4+XXZ8bzoxPH1mMkxLIzZXe18saFh7QWVVdzhHS31BaGNnMU9HP0RZ''@;'; put 'put ''emo5V1Y5fmw7OCMvZXh8WXpEI3RobVA8WUgyOzNnO3Jsfl92PVE1XyFaYj51JjJISDtAZHtoPGZ9MDpEclhhRCp8ZXEjWzh3Mj4yW1FVdXQmKVgjYHE4LmlgO1QqPSEpWlc+ZDZIO2R7VyNwTCV0UXdUYWozKWsxWShRJF1gTjloeHs/QVJ6YGtgbT5OU3Qhe0tWP1txaXZ0VltNP1Z8PE46Jl45''@;'; put 'put ''OlcwdXhHXmkzQVEuRyltPHFvYT9BV2E0RFVkeWpZSnJaOExTRDxDOClyKnVkKzwka0BoRn5QZkQ7TDpPQ2xTaCR4cCo6Y3RJW1RIVWd2dkJSKn4rdENTVEJDZGVzaWxnekhTaisoPWJ5Z3YkfG1fX01sZHMwIi9WWCRpU1ljN15yOzQiR1ksa3s5MTF9MUExW1EuQH0rUHZwcVZ5SX5qVWJhVXMw''@;'; put 'put ''VUoiIVBKNUVrQz02fno1fT1NJFRqZ0Y7NzhuMEMiK3ZjfFlKIStVTCVXN3tqP24pUTRmVik/eHg1fV8vZy4/U0cpMTshdVtIODdMYVJTOjdNbntnNkA/fmxiQ2d9N0MyaHZ7fDR7Snk/JCUkWktxJHxjQHJAW3olJUJRSCkpPWQ4aUh9V3UuaVs0IzFbXntgJEBJIVY2IyRMOEdTUSQ/RSlsNlFr''@;'; put 'put ''KS9PSl47UnJEWmkraCMxJEB8QihdY1pyWCIraTpONTVkdmNBRTpAYytpTDk8MFpqflAhIyhtYCs9XnIsYlFUd2ovLlFlTU9WJn5ARzZJdXBiQEwwTFhjZD5gUEpQejB8TCYkUnNzIzh2VDAhYWpvdU54JGBJclNAQmN8aFlzR0xjRVR2YjRuWXZxLzlydm8lJH1oUHNJTVgmUGtXfU1pOWlDIXhq''@;'; put 'put ''Q1hqTGFJa11ldFsiQ00+MnhubCtuNn0hdkA5O3RiUjdJXmdgOiY1My8ofSFmNX5GKC9nLF0qS3lYViRLI2pTWHR4UXtPPilBVDJdMXw0c2tRQmJJbkw7WCJxN0hidG9YdnkxUlckWnNMWWEkdnoiKk8uey98TDtkInksfjh0JFclfD0oOyVFVih6Omg9NjdXbHludkJgajRpb0M8PH4zKzYwI1Ba''@;'; put 'put ''NGB3S3Y1fS9XSVpqMnovKFBTSSJeRnZOX1ZrPjhWblQiR3xpKyxTVj9mbTpOa2tPYy40dCxgbyZpJjxnaCl+YjFXQkcvKVRRajJmaywpMiJgZ19HdEIxRTxtKis2ZmxJeVl9NnQhV24yVWM/PGFpTXRhYk4zb29fNGY3WntvSiErOXt2bW5GWHU/SmUoUjQqcUIxQCY9aGclcnlDRDNMbVhwdXpZ''@;'; put 'put ''NCkjK3dKe34qXkd3N0xJTVtRQmlyYz4xLmchNn13Nyt7KEsyQmleP3dHTyg/IyxLKkpTNj5dcTdPZjhZcz5dNl5LbjBbJCtYQkVCVyl5RFlfPWtmTF9zVTN2fk4kem53djVrNDNzcXlAdkJuaTYsJihAL3VIVzIiK0U+WGJuMyVdIzFmKWZHJXs3Mm5pRVI7L1tje1R3S1Y+ZUx5MEh6MkV+cUpR''@;'; put 'put ''JG1yJE1WKkBRVGw2W3U6Tl90eH0haEdqUiE9JktPIXlDLHo4KnlNY1B2bW9TY2g6LGZ2ZlJdUC9EOzEyV2xMfEZac2Y/YUpDNHNAY1FoRVJtbihyQzAuYUJhR1AmeSpRLihRVSYrYF5iS1U/SWtrJSQlZnpqZl5xbis8WyI1NU5CTTUmSmw5c01qO1p6KmYoK0NHSDZYcDRyUkpKdTBXQSw6TzxA''@;'; put 'put ''VldkYjhaY3EsTkdiU204KkNyVnV4QFJka05pRGJ4PV96PE0+RS4paFchK09DQ1skeTQmbipwS1lzZHxKYTBIR2BXITp9b2R4UFZaVX01NiIxNyMqMiwzX01vU1FCK1lOMnFlO18lcUNUdGg8fiZ1SSFAI3t4V048eHw9KUB+QHlnXSJ8UytzUWFJZDlENytaSks4Lm55fn5MbGVfI0kjOiF2TVAu''@;'; put 'put ''ez9PXU1McldSJnFFT2p4ckx2Q0RUUGtNLnxwM3svS259RWc/Z145USQjOUB6b3V9Y1VddER9fTt5eywwNXRKY3k9b2g3WSkwO3BBZSE7Jl4jMG5SNzR9SjtnanMsVU5eNF10fEN1cGNRbWBZU0ozJSkxdzQuPk99ZHwhV08rYGh9eTFDRFJ2fHoiKWBadC4vM2hSYHA8MENqLFdRfkIyQXlAKjtp''@;'; put 'put ''UXU/KixsaytnKVpLPEk+Xys0Z08xJXJHc3VRQEMhK0tQakRpVVNBbkdqP1QiaFU7YnxaREhQaTJdOTooYWd6ZFQsVVohfDZpOGxAMEhkRUJxWCtYQHd1SlZ1TmZeank7Nj06aVhpWWMvLywzKUlLTz57Rkt0dEdxSDMoRGRlK3pVdEw8c2pPMkIjN2c7USgoNyxsRFtdI31kUFNOZGE7ejwoVW0k''@;'; put 'put ''NCxgMTUqeFdOfUs1NSpeLkM9Nig2UHV9LHYvRlNTYndzaW5fUT5lNTo3Ik5qLDNCQ0BMQDphW11AfkBQUC9EW3Vlcn1Xd2hgSWsyMn5WMHEiNTRaXyI3JVJdcjNERGgwTS47JnZzQHU8XVNCeSE4c3lbUnlKdUU7aDdaSUlHaT9oLDlfZ1FQPGo1dG00ZTJacGoqMlUqSC9wRmFUfmthKGFLISFK''@;'; put 'put ''QyQuVkJGcT0jbFtxP3t7clMubV5pZDx7anl1JSZ+Nn5NUnpVMnVAIT5neCJqYUZ2PnVPUHxaWmNOeERPSEAqfiZTITVCcS97azBlJXlANWhAYGd4ISl6MiZvJC9eTWApNShqLCNMJFUhaj4oXlB4R0NZNGw8dSlyNlZNQE43OXhdP2UweEw3Vi5qNnE6JXQ8SEt9V0M7VzZvQDV9W3RJWVFZIyFm''@;'; put 'put ''KSovJCk7L0ZpK1NqM2JLQHZsMFYhal0wQn5bTTJgPEt3Z1BqeEBBX0BrVHVfKVp1VFFZIWJ1d2ZCZC46U2FqbH5QRkU2T3U9JH0hcEpkL1k7UlpLdjtyczJkSDVSKUN7S1EwYH03anQmP3wvd1s5KV8rcHxSeVhzS2koST0zOE9jOTdiXjNMWllUdFovZl9bc2xXM29Be1pAT1hUM0dbe15mI3JF''@;'; put 'put ''bD0zbyFXb29gcztfTF8uKn5IOnhydTl6R2xJbVo3XyNTY2c0UTBfM3EjTDxbdUVzWXBnUF4pPj5+RHlSP1A6aV89RXJ5aXlVPT9uVUNWXXEiaGtQXmtUdiJ6NXU+bjZZanBhTiJQemBxaCVIQldRQ3JfeDZgPE15RUFwOGkwKjBRfjtoWWYrQCNgTClnamdjNixnbiQ0PlYoO1k4MUQ6KiNQTjY4''@;'; put 'put ''WXFvLHkld1lROTB3ZShUR19DIk5eOVJIQnJMYzwzSVR4XXU4XjpGTHVLOSokTyEoNXpRZGlpPmxzdHFkLG1qan1qXSlwUDN5VFZzODM5LGt8WjAiVygvcDdOeyk/XVRjMjQmbFhbPUI2K1llIXdrNGk0fF80Q2lDdS5JZFJzVHVQL11VRF1xPipbImlXVX09e3k8ST9rN0FvUmJuNHYjbSs1ZUt2''@;'; put 'put ''cyo/fD1SeTVqPnl3ZDYhTF44bkN4QTxXYG1oUHVpTFRYPGt3TGYxKC5aaVVxfTB+cFRpZStgeiNsUlNTXm9RW1FYWkl2K0Z2QFEicGgsZkYsVWZZIUd9R3coUS41UGtSZnNyIVQuWysvSCVsLz89aCspW0sweCpZKEY3cTIzc3ooKzFNKHg4Ki54cUxFajczRH46Wi4hPjllZEFQIWssPHkqez1H''@;'; put 'put ''cihPamhhTDtzXTt4bnExIzA2LDR3SFVybGlkdXArU09zb3coK3JMIU4sZXFWb05mXXUwfVVvZTtELEpqTE46NTVibyVzbipxfElBM28uY2hNRFB1VV5rMng4YkEwSWhgaV1nR1pbOlV7c19yNjJDd2Y/NlB5fD1dVFVndUxIOmFNbj1sR1M9JWBiJH1RQ3VmRjVSJCh1cSxbNlkiUF5PbjNWJHN4''@;'; put 'put ''N1VFYmlIdEFFZnt4YTMyZUhIM2dIQGthYzNKKiwoNnl7fGJAIT5OUylrcSk/RSVMeUQyWmY/KUcjRlEuJkpjXUJMK3BTMn5sc2ppWjRfUFh9QH46Ukk/cntwZ3IvSlRUNEd5JElWSjxSMTlvQSk/QmI4WHEzc2c1SHFUT2FlVGBEdFFATzpfUVcjRFA/JXpNRjFzKWBjdzRPaCgsfUR0YHFSQVU9''@;'; put 'put ''YnZWfjNVVTQ8R2kuQF42UTgiZHZYUyVQN1dlVF1fMW5LUiJYVnArciFbXn0rUiU2bEdrJFdTP0kyfG1NOl1PckhaPUwrWld5ZCN4PmgqdEVrc0lPLz48VmA+Q29gV1lXbF1UTSZKJnF7Y0VTQD9WMGh0UnQrRlVxYE4jfTY1ejp2MlsyUWVnbCJRMD4lUXxWaT1AOHFYYTFDOnZJSX09VX59d1lk''@;'; put 'put ''VlVmR2FsOzMuRzRgTDxTeVY1XiQqT3FTX3Q8OHhAJSl+QDpFVkglUnUxZVZJayt4e1RHQzdFNl5aSFVhWT1DWGx3STd8OzFZfDsiV14lbCJCRUZ+YiNweCM4eDs9cFA8V0RsQU40WSssLmZLPVh+MD5aU0lbJC9MWk5oeHtAO2tfTTBoXWUsdFtYYGkjP25aTktqd004Izp1TjRMW1AuRzcpOE9Y''@;'; put 'put ''ISl3LEh3Ijl7O2FTXkEqOmBCXWdlUnIvT0VeTS5OfFJEfCklSjRlWHtDPSoyaHgzNFFGUWBFVV9WJk14aWgpUzdPek4+Yk1zV09qcVllPFpCTHRiMmFdU2I1ckdKdnd5Wk9HUF03JlE4fllUJGw9K3t+K2IuVyZaZUkmPXsvITR8V082M08zcjY2aSlyaTZMWjRxN2QmfVlZVHo7dF8iMF8mQEpU''@;'; put 'put ''NkxoclU1QktaQU5JbVpmST9WaVM1azYlUi92STElM2paRDg3VmBrQ045P19SZlk5YTIlfWgsI087V2c1UmVCakxhcUM0UXs/fFZYTCVfZHg1b19WR018R0d1Iy81SmJRSi9uTSl2IW50MzxCLm0heCx8IUJlRFp2KjREMzx1Zil5eS9xMkUmbm95KHJaVXFhSlpUSVVacE5jfGghLF8hYig0M15E''@;'; put 'put ''bDtYMnlQV15nanJvTzZLLCskZ2crZFZmJSNFc2xYX2g/O3NEXW1ecixpQ05TNFIlJmwhTUUmJX57OWRBd252UWIuKk5EM2hiWDc8VktjbGRTZUM7ZFIsIl9CVWY7fGMkNXBOVWJAR0hganpbZTwybjBdLihIeFZBTDt5MltbXkgvX0FhWk8/SXNfdFc1Q3drc0JnMj0sKEEhT146TDtCLnlIPDBA''@;'; put 'put ''OmloKmNfLkN0JSFTV3huYHVjXUwoU0NXUVo+YTkhQyQ/dCtXb21pTlI+PV9oZkl0OyVROjdka3dEKjY/T0Q9WU9haj57IihIX1htMkhZR3U2T3gyQT0oZG9rYmJRSVlufmxWcTdlMTdHdW1QWyx3dGh5VWEiaWZUZSVVXSl9a1hGfllwR0NOUWxgdVJAV2NDTnY/I2lDTk40ImdxVEZYPHpqQ0R0''@;'; put 'put ''cSguQVRqQiFNendPI1h4eWhQYyIuZTVQQ1B9czJ6MXVPZWZTQm5ZRkQmLysqUkk1WWFxUksiQWNDOnBpeVcxKUdZNi49LEdYOVJqaURAdF1WV1UsWlF4IU0vRXFULDFJIV4vfHgpWSpRZX02dl8mNDhxZmJJeiQuY2JuNVhiaVNDSF5QXlZdRFI+Z2ZMSlV1NDIwZDNhKVRFPkc8MnheQyJvWH0/''@;'; put 'put ''UXEqZDVzO0RJUTRDWz84I11hPSJPYEslfCYsYTt8MWR9bytkVEBLWCk9aDokMXEyN0Jtd1tMWEY7UCU5Ky4+SDF4JVFeRSshNVJ6S3F7RzZ5TDFVYmhQWmZ4YDl4OEtNP2E5PU5qMjg/UDY0PmViSk9OamdZci9yUT82KDgjMko6Il05d35AX3NPbnQsZ09ke2QiVz4sM3tNREBCWTgrLnEiR2Eo''@;'; put 'put ''cnFCallISzt9bjV6Ji80OmhUPFlkQkJhTWMlRSxkUmJCKW8vMEdLL1Z6OXY5dk5sJSszPnUzT3pjYmlobmEzc2IybnxmRXs5JlA5cjVhUCw4Xzd5WUopYmczWVtXcHVoQ2hbbm8+Z3RWPk8oO2MuQmA/aUY+WiQheTg/WTEmYT8kd2A1LiE6elMhYT5INnBjfk1KOl03ZVFhPE9iTVp+KV5IXjE4''@;'; put 'put ''ciQiJUpVJnpgRzBRcjJKNVl2ZmgzJWpEPl5dYVNsIyN8QztQYjJvJnY+RnRSaSNIV2R2QiI8Izhmb2lQdFB6YD81OE9lT31wUmxlLEEpc0tLckx6ciglVy4uKnQrOlEua0lpOVpuQ0IhbDBodnAlXSp8YGc0PCExKj9xTWBeaDZYMHs4fHFVVDtpbHtES3dTeX1Ccjh0d11TKj12USpSR1FHT2Qr''@;'; put 'put ''VjhIMVp9XVdIO0hndkQjSDxhQC9IJXhMak9ENDcmNm8pOUxjKiI9SkMxSmFOdElSOl5kYE5PZTpLbmtXcW5VRVRMNWpuLm9McVo7WDpPLzk5I0kuRH5jImBtfGY1VHpDbGcxLkErUnR5eXRxUyYqM2hMUUN7JGs0W0N9VXRTQnVAR3NpQWIpRCkwOWxYWUdbTjQjVWwjSGZUdWRbTVEkbkh9WHo1''@;'; put 'put ''bDlZMCshOztVJHM7TWJCR2UkVTZ+RlN1az9KMjkhI1sseDtoImBSPy9mUk1uK1JIeWkocWYrN3Z4NFFqVk96aj1MTX5CUzpdZTlmWEphMllafis9KmtNZmJAVkl7eURndy5Mdi9aNEVUSmZ7eER7VzR2QFhyREZha11AfEtUVnsoWjxJOk0+MVhLXipbYWEhJSkrRSFQdnJ2TDFBJCRdVyNTVG0w''@;'; put 'put ''Z1FtIlcibDlqXzpVU3x9Xj9gISlaVjMyYUlxPmJmd3pdXzVVZ2chZyMvcj1geyZOMVh3b2t6XSp2LnFOSzEhKFRBa0lDWl5nMTFxODwlZyJwbD19O1AuXVBLKVtJSTldM3ghQUNVXW1mPyRlSioqU0tWR1Moe09PJlU9Yl1AfVpUPGY9WXhFQHgvOC83YE18MU8kVVo6JHEmQGJpRkxefWoqS2d8''@;'; put 'put ''U3tkVkF6OGZHTn1NNUJSZW1qQ2hYIzckQkNaa3w5US5PZ2AkQSpALiFsSjdldXMrVjNhdjwoL0BDZSMkS0JdJUJxSyMyJnlaI1pmR0F3M2J7JTJEa3l9UEhOeHUmcCpKTWc3JEFlKE9zR1UxOFRLRmhwXihrVTp3bGNZVGcjQDNLfXN9ITF8YCx8dlFsKCYqaS56X1MyZ3ZVIjNbJWhJLDk9Y2BX''@;'; put 'put ''Y31xQypQX05zVTtQQHdxYVVtbExzdl4mJT1eMEwqJk9paEkkV3lYPGAjQ1tkRn4yazc+VWVDbjFNKVY9IS4vWjBzLDdRRkE2enopQDpbbT5UR15BZEdtK0VlcGRbKHhsQis3L3dRS2o6XU59JmQsfkVabHN8cWMvVllBM0xqRFBQN21nSXcuUmRFS3VxPXJPOk94WmIyaUJJXSU5OTd3dDowLjRm''@;'; put 'put ''WmBFdi9rUF9sTHYwYDwwXzFLYT0vb2NsZCpeTHJPcTMsazJ7Iz1bXWVMRTNwO3FJOjI/XjQ4PXcpaz04el99UmM+W3dvS0p9VilrQ1QvNEk7PDhSSVJtNkhzdTRnPVlqaURxWWdJRCNTWDI6ZkpaTGNhQ29lc3tDQWlHbC9dUm0mU2twIkx8W0FsMjY2UWhiITxda296Rz8uSDdCdm8sOnIkMm5T''@;'; put 'put ''W0pONV1mRTpEIWpDPGN1ZHhCRmpjTlFyfFohYHMhTnxAYTd6OSkvNHpnN3U/U3NFWV1pMyJNeStoNjApPilKXyF6ZXhWbmQ/WXhRU3lxJFN1Kz1eXVhSUGUkayxPdml5cz09WS9VOl9Wb2pQLk4uK15dVTpHIWIhJTFzaXxwQVR2UiN9OSYpNH5dRTE5UitoV1M+ZmdJJCw5NTt1flVIeXhCTzFo''@;'; put 'put ''KFo1OzNNNlcmX2spdUZpOGtFT1pKbksyc1AzZS9fY3IkYVAkWXgyelczaTVuI2pqYHJReyQydGpBfmBJNzVKcTwzbjdXb3I2WXZWZSxiY2FSfDpUXTZJejx4JUU0fE0ya3NjN35yUVRIOSFfT0UyPC5kSCZXUng7PndfMH5MKlU+K086KX1hVy5RSTl3Pzp3bGVnPFhRTWRCU3BYaFBZQ2syc0x7''@;'; put 'put ''a28wNG8ob3FfLi5bUG1aTGElPDQ/bCM0QDBMbF1kKVR8cWdEXmUpK0RDPU9IdGxja35RVzxyTWM6aXd4UlNiPnxyZz02OUJoWUA8XWF6bWBCPngwZ0krWlpXR2FQSyRMbDNXRiY/Y2xBL1QkdSxTMXQqc0Q9Wz83RS9XLl1+QlZbWzJSUUcldDZCenxDTjExWz9aZF5Hel5iJEN3cCVHT3h6NDt0''@;'; put 'put ''eWUkc21ZQ35Qb0ppI0dSbiJrWFBWVGpUenA9U2lTKVErRUpzI00iMSlbVGRSdSRnJDJWK2RxQHJvZTUjXyZpejElM1BKelM5eH5zckdsIz89OihaWE80dENjQUUrZjJCbDVIbG5kLjxxI2w5cXkrUCtjOVg9a3cxdDYpfGxRQlpvQmZfMiY3dGsrSyZbO2BqSTJJWk5wV0dFMllibXBqWEpOMF5e''@;'; put 'put ''W01Vd1pIQzFPUkV1SDddZnglJTcse0hLYUtNSDBuRyZXKlMwSnpPdXg+Klg0QE8lSl0rQ30kUndrcD5sMzRFdVNIUHJISFR2X29tZFF4cT85Z1NkWDN+SzUubyNYOXJjKEZTZm5oTk8oSlA9b2BIRTh5Um9qXiRzP3Rye3VTd2s/UElRbik2MD1PO1MoQlFBJHtbUG48Z0txOW1KKS88SSwxY14y''@;'; put 'put ''N0JsZl4lZFM6Pm9DNGZuckl8Y35NWlRkYGEsZy5Je3JXNnM1SHNTYkFvdDs2PHA3cSpUJDZjak8+TTwibDhOU0gqVnNUYFVdazdfbXFjV1EsTzt9LCY3UGNSSitmMEA5Pk1jdHRsUWclancoPCR5QSZbNnZ3UkQpI3FuNDV4bnM8UmhbVVZLPExza3FydWo2aFMqOFFgcy89WWU7ImVMcUN1K0NU''@;'; put 'put ''ITRmJW9McigmLytsO0hiX3ZZXnptYmtFMTooXklAXmojUHIhTyk/aitWN0BAP2A8ezdLdmUjeyhOWW5vLD5vKSxEUChMSlpgIWN6fV1JblUqXkxPflJtfVVCNWRhWV5AbkB+IWxbRGNyRFRlWyVtbHRhPmhRJHZnMyFlSzpnfWZyPll8bVtoTUZvfVRFaE1pdC4laEJSVD1MNSlqYno8K3VKIX5R''@;'; put 'put ''PXYqZ3BRd2tKXXhtKEJJVyp0KCErb3NgcjReJDMjYX5dY0Y9VSllTCxeb2xwXXVEQ3o+ZFBmb1R5YkBAKVhRLlFRY0wsL0phT20iJiQoU3dFb2srJXh9WjhINjUkYFE6IiV+SlR6bjVsZ3FmSz9IcDQ5XXc7OzcpJmNrOFptPXBxYDAxKnlIWjsoJmg6WWZrQm52MWpxXS59T0pkYyxrLm9lOlta''@;'; put 'put ''I29kVDJ2K2tGfi4sSjFeO08qTz0/Tm4yUW17Vylfc29fdyZ3PmtCWjQmSlFNbHQsOzZEQiJ2QjFZOTosb29yKUBNWkZZOGFlJWNseixFcDAxYmRBPnNjMHNLWy91d1N0a1ZBSkkpXSgpdUVRWDlLWTh7UUZNITc3em8qQW58JXg2ZTJLeSZ3SWAyZiRxYWFhXWxCVjFVLiE9fDFKZzJ3RTk5c1lV''@;'; put 'put ''d00sPnNKVCg+I3dfOyFBZDlQdkIucTYuPzUsR2VQbzBwXzpXNzlMMmQyNkVRJmglOyU6R1dhQC46Ry4lZ3tAU1s+PjVfd3RRcDdEfG0uZS5hXS5+TWQzLD9HfHoxTyRJP0A2VVhEQDo7M0FPWTpQNzFbejkha2VnQ1ZAISl6VXA9S3xeRzx+QnNqQGEwMmtyej94R3tpcj17eWZNcEhVM1pQci9m''@;'; put 'put ''JDUjNkMueiVHfllCKStdVHBjK2pDZG5WakMuVV4iITh8Y2RpLyNdXkhoPH5LNGJ0VFFeLkBHWSk0JmhOWkc1eVhVQjJ6cGhjSnlJLjB0K3wrPV5ofFtQN2dNNExaWW82SXI3JGZfJXZsdzt1YSolXl5+RVJENklzJlNYM2l9UWgwcl8pOUhURE5rYGtDKXdse1BUWHUlNCV+fTJxZGpFP1gla1Ux''@;'; put 'put ''WGZgYmV6YFpmUnNIKHczNmlFMWJxRisuQWZ5Xk9HKzJUJks8azM5WUJiV0FsPnhfb1J3P0p6P31MVHV4NyNqMkZtaElWU31MV1B5LiZgMTNId0dxSXV4QlIqMHU4a1ZkYG1la2s1JkskcEVJcnB0O0s6Yzo+a1YrXStrbD1DU2JGYl14b087ZSJMMmdDOHErKCh9TzpEanwyTkEmKGRXS11OZHJ+''@;'; put 'put ''V2ksZlgiSlhidVFVLnkxPC8vLFlpRzVUUC53KmNhS3FOXVV+UGcqSmw3Zz9Td2N8YkFMZlg6XkZVKWBKak1vRSozK3BsYDRhV3RsL1JMXkB0ekdZPWE3b3QrOSN5OFE8RmBOKHA/SikrJVF1LlA6KEk4cVVrd1V+T1V0aHJeYVJhYzE5bGMyPGYjP3hnfT4zQDxxLnw1OlZbcGBqSCwyezlkKX0j''@;'; put 'put ''RyFGUT5yNEhWVX0xMEtoWTxAe3ZPQDEqOU5+fEtyJkVvNTp8Q2xPVyNDWHJgdix1c1ddTF5CTkokfS5SczY1N1RWdUNSOzEwZFlXQCNSY0w/KSFQUUg2N3YvNj1qQy5GJHE4bzl4RU1mO3J0Ult9RnhtKkxERnFASFs3JXBTOCIvOkt2MCJeT1hfZUhdRjAubSJvUCpIPXBXI0pBYkJXR2tMR3Bu''@;'; put 'put ''JVo1eGk0Ll1sS3d1VCEiaklNNzBLM21AbSQpLG00KS5JW2FDV1tHJnJbc2FdeV9Bb2p6R09INlY+YUU5cyJMJmlBWH5ddnJBIkNfMXs7MDkkSDJUbXBSQm1rWyFJeTJiQkExL0JvPUliTV03b05FIVdffWA3MXVkdH0ke0JeWSZEX293TlNaK3opNyFZe11sKjt2MEpRMjAvLnVCUj5qUDIiTz90''@;'; put 'put ''SEtdbSo5Wj93T3lQRHUra3JzLHxrZyJoRV57UFpCPCo/N1hLeCtoUm16Rl03ezp0ayxxTEt1akQrRWc8WnhVOyFnbnNSSVFeTzZQW1RHTnhKY2A4az5GeiwqWSI+QipweCpOJiQyT2FFP2FaJD9uTnouNDZZfGouSElUak07VUAjeF8sdE1DPTFuLzw5RjxWcElxMGVnPiZRP186bWg4VnA2eGg9''@;'; put 'put ''bmlNKTQ8azFlUzFxc1I5Ym0iUHBpckp9bGM/Nn57SHh6M19sYUdqeH5QfUJ3ZSpfZ1l6NSZXPz1dOyt4enZKKm1oeUFvUSpgYSorcU8/U2BSPzIkV1VCPDBAUWhbTVZaODdMLl08RFEySXU2OnYhJUdUdCI3elY1fVNoXX0oTyw6aGdnQVNeKC8udXRYKzVeamU+MENgeDBKKWojQ143S20kbjdt''@;'; put 'put ''Zjd3W2RPTnshU0FZayZodXFSNFliYF90TXguXT1DRVVyYlY3QEA6Jj9WRSlublk2Jipzaylja3lvc3hjIXxaWltSOjc7ZV1hfHZjVSUuUC8/fWpDaXJWQ2c1OkwjbmdHK19aU31NPmFnVSZ3ajVfQ111VzMwJDdYbyFfVFU5NjdIKVg4O3tDZFlgODQwem1+MXxGSiNdcGc6MUwweTcxPkYyYnRq''@;'; put 'put ''dnZSUS87bTRKeVApZCppVldocjAmZSNEfU56YX5Paj1gQGd4YzNMSmVpTnhiWzBNP3s7WntxKUp4bTN9YEFmfFJmLiV6OFhZUEZeNl48TSF5RkhWVip3MypNPmRaJWNYeHp7RENlJVJLUnZna2E0bCpRR1NYZStxaVphKCguQy9sXnBKOnB0ek5sOjxpRGNgW2IyTkJiYzhYaU8jeUY3PHdjWGsu''@;'; put 'put ''bU1tIXpJfUk0Z28rMzA0eGU3WWwjR0crRTxIIjJGO0xgZjNaXXpgMyRRSzBSYjBnbjEiRUZNQ19XRHAlTGluQ3VAW3JRM3kpVEN0Z31WejMpNj4xVUZhMWhEN3k5ZkFwOWxyTXlsYCNuRW4sPFpmSyRjREhSVi97S2IpR09qc1hvQllPXlE4ayhrI15IZUk1ei47SVRjYXUraH17Ui59Vz1sSlp3''@;'; put 'put ''XUFvJVh2Q0p0YVd3I002YVhEZWllWz5TWTE/WjUxc1NYIyxxT0N6TUgiYXZ6SCoxRDJwUkp7TlRgRG5iNixtTS8iU0Z1e18mKyhoUHZJR3M5TCsidDRhPDdLdEJLeHBNTXUwfXVvNzpqWUVPLE9LSisxRF9SZTslTHpMNlVsazZtYj9RWjMzJXcyeXJlPD4wI2s6K3dZTlpvKjlBSzRkU2IodS5h''@;'; put 'put ''U0pCZEtMKVRvcyhJYFh5R21gRG4uXnpdPTY/Pjp+eWRiRkBxfkdbYFMsYiJ7c0piSXkmJnJzWmBFd2cmVWlhTmY9ej80ZFdKQkBMXW1HYGVXQnkibTokQUVuZVY3Jj14REJFImhxRCoxbk5BbXRyR1JWW2luNzpRfDo4ckgsX25ZYkdfY0dlWChgJEp6ZF1JNzw2LztERWI3WDJ3azQsV3hkYzdb''@;'; put 'put ''WHJEMHhAMD08TiFhPE8pX242SlRFMWtLRzBMeylRUGltXldEYjNAYzgwbD8uVltBZ2s6MEU/Rn5deUlsPH5gazJ+dCwzYFhMOkpzRTZjXWA1aFB5WUtNaGp6OnlhKnx7Kk9FeENWbTZXbHAjSHFvbG9aeGczQC9vUUdAbjdpYlVyXVJZYmwiaWV+bSxAPVUiPDt9e0ImaUhJMV41WFBfJj4pTEAw''@;'; put 'put ''U34xJDhLNCFGNkpoZSxfUiMqWVQ2dlspK19fKXlGR15AfStyJUJXaixdfSM5TnQ0OCMkQDF6aiQ0OUVMQlFaY1o6QlIufTV7PUREaWQoaH01ZFI7aSJXKW89ZksyV2ldcFJAaGM3UWpXe0RhW0g8WUhoNVEsZEdJZFQ+MkQxX0QuKU9BP1BDNUdyalMmZVVkd218YXNbQD5GLildQ0V0eCVaOiQz''@;'; put 'put ''QXZ2MFVhXVFiKVpLbFFiYH5YNng1cSEqOUY5ezZNNihTXnx+bU87PDpYPXQkNXVgQFg9dCR+OWQkMiFbaDVtVDVKdHI2WUJ8PVglMzo2Xlg9ezFbPHl3QjhZUEEsL3A1bWptSXB6bExRRFcyTnN0QGRTUX4+cjAxSnlQMzo5WztGQEMxdT1aSGp9WV8+Mm1IdmZFUUFXOzlbPEJ5SWA6MU9yfHgi''@;'; put 'put ''UihKT1BMRndKaWF9M0VKNDRQXSk4XjEyPH1rcnEobFRQUTdedzEzfmJuNzxHQG89I301bFNMX0taIyksZiRpfClwVyg4ckYvJSMmbiRfdnc+c3JuRi99NjltJF8lImcob25GL0hOODVsfSkqKH5iVE9xcS54S25jd0o/OVZfUiJnfEFbUEw3SjwyfF1RPSF9IVg2PkJUZ18vVjg1I19yRXNzdSFz''@;'; put 'put ''KDN+eypdc3xpZWdCPU9UaXxQayF+USEyeXUpYCE5cWJIOnYkfSg4cChbXy9DPn0pTEYoOH1he19fX2RseWR0M09GLzBDUldVQ3xveWQwOCRRQlJDI1B2QHt8fSRMVjNwPXYobGVLRCRCJEc0XjxhSyVjWjZLdnVQS3hETjI1eDNILkoxPDVZUTMxfn1CPj9lU1VYUFdqQHJdLih+Vz8hbHEoPHJ0''@;'; put 'put ''bUVkfGBNTHk+bCYzekF7S3J3Tyl7VGtpVGNGLz0xZiUrR19rfjAzcFJEd0U3fWRNNF9LclJnPkhheFcycEhqKk80bkRZTGhNR0h2ZCJ2ZygwWnFKNG4uVW9RTTwse3dKfF9HbjtCOX0rSzw/I1FXY0FESEwjeVcuTzRZcHgrNj8rdVs6NGhnX3ZpZllTQTZtdDBYc3B2XUxsI3hETjJ2WXloSVVU''@;'; put 'put ''VG0vQXlYc191Z1Q5I1NjRi8wWSJIR1EyQjFFMmQueEBJJFFbdGU0STRPeFJefGtiImNUZ21nWSl1OU1UP3dgJEk8QklyPFA+S0BZMWQuXnoqT09DTyJvI3NTeis4MENpXVsqQFg8VnNFSHdHSEJIJkYjcyNjOnlJNmFDTmA3fXZGYUJAbmciR0hCSF5DI3NSR2BTaCtnWj5xfkx3bSFBPShAUUdY''@;'; put 'put ''VD9HemNfMTV7ZWM/SWEoI1YrOGkwK2FDY3M4K2g1OyoiZCY/NGVRbXB5QVlTaHY/fmhIKU5EUnVJIVVOfTwhR151ZXNORDw/dF5Lb3xAb3c8YHc7RktMWW89fFdQV0kqQHQhKE12Y1JeZEUjb1t0Wi5ZJj0hPkcqPCJHTGpOQShoW21CMlJVSHR1ZXNKRD0/dVQpXW5LanJhRE03K3gvYW9Pckcq''@;'; put 'put ''NEk0WlhyfFZ5cDp1JiVOY1UxezE0dkQ+VmFBRDc4UCV9TCtjM1ZUbmgmSSIpW1UmWGd5MkpUfFZNb3g5Ij5heC5ObS48eTVAVkkldlRAY3J5ejZ7V2dtbD9DOEJMdU0uMFR8aEp0N05bUV1SKlImZj5zNEk0dz9xfFZ5aW9xeG14UXVpXV8uUkk+UDIwI1laSWdNfDF1b212ZWdJaGpDLHVZKnRp''@;'; put 'put ''Z191Ykg2cCFZaV9FXjRIUWNSQmxMZnBYUFdPWnJ8MXlUVDRqUUBdPVVmVHl7WHBxWUcmNEk0JWAofWFaTXZHeHlnTkpJLmg/UnhRL3oiUk94WyYlZyhtN2xAOns5dDBOaT8sN1twUDp2L050UWtKX2wkKVloNj95aWNGL1pHR317ZXhMO1l3NDVzM1U5KS5KSUgsYHFzQkBVQ1sveHdfX1BzI0sq''@;'; put 'put ''MXFYQSFtZUhkST8qazkvKEoraCFyJEdOT0Q3MExbZ0lCeDc7ZjdTZC8wMm8hLnc4MXhEWWw1YW83PlYsNHcrRTx5b1txTndJSHc6cXNnKEhVJngoWn4iN2Y/a0t3MEtXWWNjRWM/JWcoO0k7VSk0O3VgTFEkY0g1eilGQXZlcyZ3cnxhekghRE5bZFtjbEQqdTdGOkxhY0VjWkQjc15jdikwY3t0''@;'; put 'put ''Il5bdFBeX25wQjYye3Vlc3NdcXxjPXxETXRuTklYYSYzI2tOaHE5bHdvQWAzJHhHJnlLVXpETUd9XmgoVSVAPkYqIT5NZEl0IXI0X1hoMmY+aXFHRVRbOTdvUypsPmwsbkhCUD5FQ0dCdSxlTG5pZFNpYms0KkkxR0M4Tk9jIis1Sis8Lyh9cEdBMmYuemcoSlVLQm42LHpyVkM0K2xWTn4qMWRT''@;'; put 'put ''aVNQV1IhJHI3RWpFdCM/Vng9OlRpKXZvQ3RwSGRTKkkxRSRGPGJhNEc9MiNFMmZHWk1XJU1ZWW5jZVNaTW1wQXVdKlgse3FhTlRNcDs/VEs0ezFIJUw8e0lHNkN0IjVdKyE+KGJ5WF5feUJ3WkQxXStqKVFDS3s0ZFNpdE9XUjlqRn5tMCFYe3tZTTZ0e3paNz1FIl1HNjk0aFBYNmpKVG9IOjEr''@;'; put 'put ''SmRpWjY2O0ZpWnMpOGNVQ2FiZCw7UkZ7PjJiWShIRzx7Wl0pdHI9cEZ0VCI3OzJSVGYsTDBMXykhPjFsY3wlTj9CPUdOKilSaiY0KVVhOn1xOExpSUxbKV82ZyklMUFRaWNAeFhSM1BsWkxNLkRnamp3aCtkRXFhUmwzfDs2RUVraSNHIy9adCRwUTVrKWhYcFRRcSJuWG8iVUA/VVhrOlI9KVpl''@;'; put 'put ''T352eUd6bF0mbWlOTjdYckpOKXVXbkxPTz1OM3wiOTFTPmg4d2whSSVbMG52YUF8REVeNE05KkRfYX1+THx6NCh1KjFTXiZyKltgOkJpYyQuRE0pfXU5d3lsal1oYERySWcxbXNqUVM/V3VDdEtwXSshPmQma3gjRHlPfTVfSXVzY2MoZjhZLyQyJF8yZXkzT3dPd0pAb0xvVFBLIU55N1QoZSE6''@;'; put 'put ''OitsSGBUbEVnbHV7W2kpWHNnaCRWWk43MkkkT3ViNXU5NTo+PHlEbCNveT8lZzc0aGZ7b0JkP2ZwWCpVSF17KCo7fHI/Slt5VVU0amBxV3U3eTRkdWlzVkE4OGIyLzVxPiRmN3tld0w8P3tiS2dYV0RlQmcmNkgxNHFDa0ArR3h7PTZuIndFQU8sSHpxK1pCX2MsTShYOFlFZmY7e0ZCQT96MUNg''@;'; put 'put ''YHs2InV2cEU6YHU8XW5aKjN4XjdibFJyVnJUXmhgSlZOYFpzQUxxKSJUZDl8flhaREg8WHIuNHNFQUBASTNJcTJ3d0BDRV5+NSlCam1zRmwhPiNWdlZWZSZzRiFpMColKGJFVlh1bEFPPmJPS2p5fTlYUjlUJCNEXihGKS89aDYxZztDKD43Wk9vdXZwQF0uOXxXdXw9RXIveSIuOFFPKUVoaUB4''@;'; put 'put ''P0Z2Ujx4OzNJTntiSzNWQnNncmJldGtsMkBtK3VhQEtuKmV5PT93SVtTWzFvSVlBZFk7MUw8IV1CZjdERV43OyU6IzkoYm0yeDdpdX0rYDJLKSwuYEZddCohQlFJUHd4L3J6UE1kMkswR0NnWjlqUmROZmNUdkVZfGR8a0xUdkQlT1koIT4sOn5QZkczYn1eRnZeSUxTX0E7aGM2Qk8vMUVsP24u''@;'; put 'put ''MGdNVEYoKDlFe1duI1ZCNmlRaEBXV1ddez9lflpXU2IpcCRdKTEzTjZfMyNtVnMjdlllTDBgbUIlfFhNdGA/JXRde2U1OSNHNUdHbm0+R315Y1VrUVFeVUpTT2k0U2F8KHRZbVpFWnI/XW5QfnVhJXk5eE90dnBeL0tmc0h1dFJ6ZHUyTjpuWWpQbylnP3g5bW9eKzg0azVKXTRbYHZiSnhgPzpX''@;'; put 'put ''YEZ6KT1JOEU1fD9COUA+Jn53bUFMS2U1V1RKejw3RylzfDJ8IURjRWJWOE1TaSFMOFRMdTZ5JXNIW3NUJX55Rmh0SEIwNGozT15qfno1N0hmdGBUaVpZWlUsbHVyWDhuaFgqVVB3cnxWeXMwT1NrYDFmVmNLQkc8IU5dKm00ajM7TSl9S1pTQFhGNkBEMTFxd20kTHlKLjQyaHNYbmJKKkZtOVEj''@;'; put 'put ''Y3JqKTs4WSxHfWNCU1R2Xn5yYE80ZnxUeHd6QDk8dHdoTk87KXdoNyZycCw7K0RXfSldKzlaaEtQW117PyF1fjtHWns/WnxWNlgpIX5zcDtANUNZfUc3VnEpYitmekZxYGRPekZGXzU0PX4zYTEvWkNKYEguIShuMXE0aW5pSV58b05bcEZiZFJfQmB6aHduaEh5aDZwXy5WPn52eWBlbDhCXmdN''@;'; put 'put ''Il9mMEUvOiNHOF99KmBiLm9hRk5bfH5tSTkyQXBGWSRSdiIvNE98fUpuVFsmUk1jfFZWQ0o4OyEuKFRVfnw9Tjx6N3tXRUNPUEpvVix0fD1FdTV9LjMqbytQJTNGKWNzIW06Q3wjbDBWN30uWCFdOmchLH1lQkQ0UElkPGkhLH1nW3wzfjYxXlM8a35kPX4uImNxYDtULH0xQEc0JngmX3h0NSht''@;'; put 'put ''Yl5LaiUyTWNwfD14S3R9Yl5sVjM8OnNRM0BxKFk8cHw9LyZtX1UjVFdQJFNMSjBSYF1HSC5rRHJlNzZZKHpMalU7bU5rKzVAVkJ1SW1JOVRCLGJqXmY4PmN3SGZHal88MDMuSmJ4ZmhaJWhoQ3AmRjR0JGNhSi98QD8ualNtOzE/MU9gdGMxOHBESHJlWnE2aE1odStSV0hRSyRVRjRdRmV5a1Fs''@;'; put 'put ''aVZ6X1lXRkJ0fVBlJTF8N0pSbyg9Q2lVcFcrajJqbHNUbHVbJSloKm5kbUBdM0xXVWhiSWA2OitsT3BQfS5rY3A4dyFeM2hNdmtaQF9WZCs4PllhMVdYd3VrWF1AZjJgP0BoW1hfKGJ5PEN+RkdofGAqKW1JOVdBRUVRPGxOI2c/eU5jJGY7fUJqQS83Nj5oUGwzfUJZSC9UfXYyNi9xQHlIelsv''@;'; put 'put ''d2NrJWY7fWIjdTw5ZXw6fDdramlfazxia001OCExekZjbVRwJnhFXjk1MHB+K1Z1W2RVdlRkYSZzM25Zemc5REZ4ZGApZShHWStvV2cwVyFven45YH4uKmlwJFEzXX48VypgKlY5UjMub1dxZ01BfXJQMTNkNmpLN29WdigvNi9ZeTwydCNoZ1ZkbT9XfD0mRXdzR290az0ka1YoRXdzMWN6JH4m''@;'; put 'put ''YXpXOCI3OzkmVDVmUjNII3Y/QTQidlIkTWR2XXlIUiJEKnBVcD82Nz8hX0RBU0JIWjRzfi97RCRgUiNzNmhpVTVgOyxgUlJXOz9mRFRXXjg6NzVVJmBSeURzTkQuamdwbltMTTN9Y0FZPS5dPC5WZXR8cEovMjtVJmA8aH1vOWdNfTJdX2dCOD8+eEtXfWFtUzd6Mm50Wl1afFpnR2l4ZT8iU3xK''@;'; put 'put ''fCZgTm0pOG50ODVQLEZXP1khZDdlRy9PTWg8WFBxV2xFdVtYVXleNUh0KDYkYXYmVG9bZHw5V1NmdGxlVjNMWm1nLFslfTN2WnQwcXw3KEArKz4xK3g6THxRO1pMfE9KaWpffjEzLkh4ISFpdSZoQyNWPi8sUGdTKXpbPTo/Lih6QTJmQFFkIn06bWB0cEpkPzYjdlJCL1ksKCNLJGh+Tlh7M2dw''@;'; put 'put ''UW1lSWx8Q0RQNHBLeV5lSWx8d2xGL189IzMrTGZXakhgQDlDTnhXOEkjPTk6YmolJn1hLkUiJXNiTnRbfl94XjBtPn1ONnhbTVgqcTgyJn5wdFk/cldSQyVkaypjOChVaFslMl1heGYpJlkjb0ArcGZFT30zJGJPRTpPNVVoMUVyZSk1VDRPNzVmcFNhLnZaXnNHMSlvR3VbJUV6OnNwP3NrViVr''@;'; put 'put ''VndabShoL2NeZjhZLHMwYXBScW0rYmtncFJeMzo+OTBgeiRWeSx7Y11pX3UvPy5fPXsmMSU7Y2c8ezNFNVlHcClRdyhVa1dzWi9YfXVmR3Z3N2JHZGlVIkBbMUp1Z3NPMlJ3dy4qXl8mbXVmXyZZeU4vSExiYyZVSlNJflRjX1s3P11xLkREbysiek5JVlQ3ISplRCp6fClmPll9QDNFdihmNDd9''@;'; put 'put ''IUBNXnhBS1ZyUEEvTEkwKTBuRWhpVmttYiE7LHtLOVgvdU54LnwhQCw6RHk6RUtZb2kua2ZlSWJIJn11V3RQS1M8LnIyK2d+bkdfJnhPR20pb05oVyxkeGpNRzw9L2lQbDw3RTpVJldRR3JAXkpSQkFzTWR+RFI3N0R1WndpJUdwOGk7UGdBbUJ2UWl6M0tXS1JlckkwYW5rbE5Cdz8yVUZ6d1ta''@;'; put 'put ''Qy5ZbF5IUTo/M3s1LyF9LF47WWt6V0NaKDpaZHc1alhERHp4a2BQfERZfHZhPW4/KyxPVVUxc3JqZlFBYzA+VW08bEE2ZXtmanZ3N2prQ01bRTFjUzNra0lsVHB3TyF9a19dVm52VVh4bzRtSDBMR3o6JF0hUj45XiFlQGkwZG1xSlVMeXZOR1REfno1MjBoMThtbGNWTHQhTllXbjxwPUZUQnxI''@;'; put 'put ''JUU6fSxnbFswOHlzYXp6QiNsc1B4dDZXKnZleltzYXo1U1NtXmJwTVEvKXkwMGYlXlVNaUc/ZFV7WGF0M05TL3tTYW5hWEYxYDk8S3YrUWpgQX0iIXtWeT5JLzY4NHA0Old2ISJKRn4xeStTbkE2bD4iOldyZHVMY2pRfDwxY1AoPHlEcHg5TDhAPnZdeXplLiUpVjsxUUpfLEh0ZWp5TEAsW2Vq''@;'; put 'put ''T3lRd0FieSFxUjMuSH5ILFU6PEJ2Tkl+dlZge3lQRDcxVkVdITVDUnR+bDFYdXoiTjl7aCI3M2hHUylQYl9HVXNJdEIjbFEpZCp8IzNWV0l1dH1zWjFCS3RiZiJRLFdfPmo8WGJpdSUuYGUzeXw1K2JKfj1gZURpfkcsYDh+ZCQ+fHJnMjI+NyJsXWR+SDZgfmEzZ0x3I15FTk5adSVhQ1gxRFc7''@;'; put 'put ''QnxXclQuRzd9dTF8Kk85RWQ8PzlITm1MKn5ASnNXeyxYRCJJcl9zbGNPTTJgNTZ9aEp8P0pdQiJJfigjZngleEwhZHd4YHBPQi4iYzJxJldXPDRMYj16dF9OfD49PDx3PC5ZWEA0SzNHUSppZk43MUNGJTQsYiR3ZStPT09nYCgxVm5wMyVJeSFFUkRGd3VeamxnTj5oekBNcj81WWV8Z3ZrSWQx''@;'; put 'put ''aGF3YV1BcmNbdXhPQ2ckJmUqXmpYX0ZFYWVbPElAcTpTdV4mWSl4KU1WNm1YMnFtWTNxRz0rOiRhZ2MpR1N7JF5HVUVjWSJkZHVfXXcmSWklWWFVTltMYEN3PVNtIjFPSD4qTGEqPWQ/NmlkeDY2PXR6eXkrdzNGZCZNenV+akhNX2J2L3JeQ1BqXk9VI0tPKV86MTxXSHIoWTZBRHUlWmE/RGdX''@;'; put 'put ''Sz5fYipeO0RyTEVoRnE9KTMxP1pOPW94UGRPKiVULyNCbmBIZS9fQ0FxIVZ9O3x1LHlSLF9ST3RhW3U5LGJLUj15IWV4N3VIb2tQMEFfdiopWUo/Y1J0ZSgrY2o8PC9uQSZ+UWhHMCMlQHhzaVBWOiNuOiNRO0lDKWleLjJOL1tYN1lTbHM3Z2V+VEdqUntbdVprOi8qa3dPbU9nY1EqQjVGcVpI''@;'; put 'put ''NlMwUEcvSXMkPngkYS9pfUlPTSs1ZytSV18oQlFCWUB+aV1bYF91MSIkR14hVkNZTiZUe247czNwPmROPm05L3c2emBVOjNiP30jOHBlI3NWQjVQZyMvMy48dkAuUnMlcGtEeXNjb2I4LEMjanlFbXBuWUR8T0MkNGc+dV89d3l7I2VPKSQidDokWmc+Kl5FR0lnaFp6VkkraTBNQUF8KC8/VWND''@;'; put 'put ''RWhqdWA4ZitAVzs8KDp6UlE2ZCJ4WkhYImEkZVFpOFJLUyRQV3sjZWNmYjFDeyxHL15JJD9yR05QdGE5RUVrZCVmeC9hXnBOS0tdVjt2PDVPeDohNHdjU2MjUnd4YE5wJG9XOUVBSH1ZeHx5dEpedFBBXSRyejJ2IU9AZ3VXUHQ9TFt7bDwvLzFafGlMUXYvLFRTIy9JdWRKQmlBVHsuOyNEcFhB''@;'; put 'put ''ITF5Zz5iZEZ2LzVGYE91I35gLk9MJlRjL29KJHZRTThDOkElNzI8Tmo+LDQ1RkI3P0xOaGp5aV9TOU8xeX5RTEU/Uy95VDkzcClJY1JwJEJHTVRaUnhVVnJUTWR1WUtacEo9eXR8X2BCUksicXxYO2opeD9pRT1CUX1LTTo5TitEW04yX1BebC9bVWAoOlcsJTxJdDBdbXFTOFE8YHFNSy5hajlD''@;'; put 'put ''V01ISzxJXkYibzxeMURoSF1ZXWpVfX1SfGF1ODBIQHhpUmx5dkIrX2hMaGpQbFI1W15uTik4OVI4SVZiVE5fJmJLQChZLm5eU1R+ZWBuMHpWd1QjVWJUJSVJO3wje3w/Ii90cVgsXzFRMEE8aHhTTG1HKCtfI0BvNmtzLHl4SFNgKDYrNU9CV2hDVlsqbisvSjdlaCZ7MG4zeFhNUTMueFZqRUZO''@;'; put 'put ''ajdjJTlmeG58PV11Z1krT1JGaCsmfSQ5XUI1SE5zenliUzs/cGw9PWFyZjYoJkhfa1RbJDBaRlI/fW1qXjoqTU9dTXZLd3xleXI7eTxRSHpmYkpVbzs1alI3d0lCME1yPFFILFEjdVokPzdZTkpsRnZlaX1tL1trKjM5UW1lbCZqV2A2Pn4yYSo/NylxXyVKRkxVLHQyczdjP0ghXUZmVCMhWygh''@;'; put 'put ''KSlJRi8mYWFPLk9TIkJodUZ2bkdNSGFuSWFBTl4+TltQZ1UwOHc6RmZ7d3hiKWl5fD9uVGJCR1p1ajcrOFRBfmd3ZXlMNT9FZkwleDleMj5peCJjfl5oMzV+OUM0YGhKOT5SMFk1REZaNCpiZGQ5cktLWigoSV12NzJUYX0hQzdYN05mKjxeVVB0I2dCJl5tUHYjR0NST35HQENSdV5uQiM8YkVG''@;'; put 'put ''fEFrSX1MK1l6NjtkPlMkfjZOaHU8aV5PTFczPUpOUHg+LktfOFQiOy8yfUpZMSh1dk9WTnFrQHw3XlJRfDNFNnRKezNVKDs/R2N0MGM2Png9ZSkyV2VCRD1lV2k2PFg2fVZqYTA3aTtyMSpeSnp7WmcuP3dLIk53PGFGY2ozc2xLL01XNlkoU0R9a3JUTC5MVHFqdF9HZVooJStKdElRfGZobSt8''@;'; put 'put ''QkQ/UkxdMyQhNDEoYFc2KlNSPFdnckdkLyYsSzxCMCt1XUg5ZHQiTVZINz5jJjRJT0AvPWU8XmNGTWJ8XXNwR3clYylUUT1MZ1o+eT92aWRzbGBSbGRjPD9BbXthJT0yJFJUKTZkYTlxNk1DXVI+YiFUdUx0anA0NldWQChMSGJtQyV+UDFVSi4ub2N6MzxRdiFyYix8YyV+Y2wwVGpeVmZ1a01d''@;'; put 'put ''QTYoPDIqU3lCL05hS2c8NntmLFVVOFRDdixCKlhqe3diTUYsNWBraG5aUGNQREdZLz4xND9GWnUwd3M2LGpucW9bVztyPkZ3WnVaMHNCJjxQSFhASCJ4IXFINVZabzdEXyJZSiFDSF9jOG54KGg0Wk44PjZ+QlkoOkIpRCsrNSU8b2UyPiYlQkFNKWxNUm1tV0tUVCpGPlM1OVFzKjFYTV1weDZE''@;'; put 'put ''PVpmX2QpbGMrT2tFcUA2QVk+eH4ielJQPCNdKDY0RlZMbzppZzoxcjlQQj9pfjl0aEBuP0YjVTlYfEEsQEVFbVJgamIuSzEhYklvNTFybWtQKmRlZj5QPmZNTW9rekB7Ilo2SixiPltmTCl2fVFER3paWm5kWFQiVng+eVpgQ05Kdzg2MnNFZEN4aWt1KlJ6QFRhcSE/SHtmMD00O2IiQTN4S1d8''@;'; put 'put ''aUJNZ0lhbjpBUEE9LzZHZStbWDZ4dm9eKGdkKmJhN3xHOU52YkpocFpBdlAoTlU7YSVMbzRNemQrdUk8d3thSCZyRj8/K0greG0rXlh7RWJ2czh3OXNnMUw7MSs3RlU2aTFZYUljKG48fWtZZG0kOGp9TCF2Yl1leyMwVCNJYUpYQkZlRl50XTQ5NVVzNnpwJHQlNElpel5DYGk8X0d1ZiQuPF9O''@;'; put 'put ''elgzQkV2Li50Qk9sOW1iS1YwYUEma2ZlNkdoNzBPYm5XdiNHUU9SPTQrfTJ8QFdwSn4rQFRkXkRfW1lMby92Q1d0PmshXmNFcjdRNypCaUA6N1lVViJFfnlNWXR5dXxFY009IyYhaEU2TGU9OTh8UFpqO2FkZlhNcVAyeWZzLGNyVm54Oy9PUEBHNTxEPTJDY35JZ18hVil4dC94RDIocWEqO1JD''@;'; put 'put ''K1g+Km54SXw1bXYrdFdHcEpBQW1wOyNgdVJRLiFQK2hzcixGeHFMe2JtViZbInxJd2VIT0h8RVZqOnxSYGhUKEJhQ3VCL00/K3Nke2o8QFpOe14hQWIiW1NsaVRAVSljQ115WDxqXjo3YDZfOkV7UGBZITtMXkp3UStsYWpETj5aaCxPTGphdGl8fF4wZjNTV1VfOnZKfjJMJX5pNyIraTgwPFg/''@;'; put 'put ''PW5TNyNEM25fVE03UDske1ZxJWJgej9dPl9qUi5Bb3Vba3Z3R15ucjBzV1tPR0t2RSohPztubG46dj8pND8ubltUN3JVUUdfVkJqfGtycD06flRuJVZgbCtEbnFfSnxFUjlyQ2M9MCE9JGVocWsiNjh+P0o9JmxoYFNhR0ldOXsvJGw9RSw/OVBFVUlodT1deF89Z340dTtqe0t+KnM+RVhmZTtB''@;'; put 'put ''QjpIUWpZZkBgbW48Z2hfLFMzYWhfUXBGfjB2bklGU0Q3WjAlfTAyVCpeemgybmpxbzwsJFNgYUcpIUQoSnZRYko+X3c0Skk6THpRRHRFKiJCQVJ5SFZgNX1dPkwqUDRlcmYlPTlvRFUlKyw7QGZgTVV+PmB+LygmOS53I1lqNCljXkw8R1E9VkBFeHMqfUZLdigpcD5IaHVwdXJVM0poMFFuWCw0''@;'; put 'put ''NlZTUTRhJiZXNHhrbXp1Xiw0Jiw4cF1nSGh3eSxpLElCI0k0Y29jIVgvc0VeeTVJeSJaSTB+cz0pXipuLmA6bClIZ1ImSjZhJWhYd0deLFVnPlNFOnZjKjNlIU0mRWF2SSp1Pylfa19Vfn14UFc3QTZtRnVqKW0/IW49JE5WRyxJXVU/OF9ifHxtY3VBSERSYnFQRiQsSXssVGs5KDJpQiI4Kyhb''@;'; put 'put ''Pm5ueVZVMV00LzpTcExfbzhgN3hdbW47PXtwdDM+ekMoelQvOm9fVXRwR0BkVztUe0hzWig4OnZzLlheZSFyOkJvdCVdcF9WcTcudzg5XUZyUittODY4NDl7TjE1Vz5jc1VrajFqWzkuYUdYZnZfVlczOzN9WXxuOTJlSEx4Rk9taWU8ITZJYGE/MS5Gd0N7IWoxOCU3alFQPm5KKSY4eiMlel9Q''@;'; put 'put ''XTg3alFQJkw2IkVIekhRamFsUVBtZk5BJWVDOHJgO2EiYXM+YTM0aXU8bTZhUmlwTWxPVyRCYF8jTUVtUzI9SlZOckI8aC5JQSk3ak1QJiIiV0FaPzsqaEo4aGV7dHs1aWFOVFpBNzxhZSFzdSw+Tn09WzdLPXQkOzxeJWtqaW1LYkNhfm1CIjtVJXUoeVBEfGhBU3JZQEkheT9hMmkuRkxSYXxi''@;'; put 'put ''MWgmUjtHOUBuMyJwSXR0SU9pUyNCaDRAUHlXVkI8aEtDTHQyITIwTE9ua3BURGtMfThhd2BCYiZScWpGYk4yTFRqe29qQzRxTm5rRy4wMllkXWIydUgudyhoTCxKPClKdHspU0FoZ3RuKUxZSX4sPWpbcyNdN2Q4aXZCJVNNYmFqZ1FUZkQ4XmhVRXRsV2NrSmQsRWlmRV5ydThjKn5+MTJFIWZH''@;'; put 'put ''NjYxRStZS0UmRFc8XkJYNiJsWjtHNjpDQkJlbX4+NyE5Y1BheSxFMzBAUGJ9Y052ZjRlMHFjbl18OiwzOGlXT3hWQilLMnJQfmx+RCpESmVJOEJlSVB7KWtZRURNTVg8JmFxbD9oOmYpRFtiUWE3T3hiJDNJalZBW2JddHJkYCJjJW00OHN8ZHMzc3A2OGt2WzolYldTZHNLZztifHxjJiloP35S''@;'; put 'put ''eDZ9QU0hKk9MM19EdzBJR2JnKUxNbzI2YUk0NGRKUXJ9UU57dG9WLlU/b1RKejhqKSVLfT5ldjhJdDJjfDhYfUdXcnVufn43fnNGIX08NGp3TldSPzdFUGFXU0xdbkxAWztoRWNuVWx8b256XlpKfnFYYks+ZSkoO1dHUlMhWHR+MlFmbnheaDpmfls/ez9oPSFUX35SUGZudF5+VF4/TEd9TEhC''@;'; put 'put ''T29pdXdMdCppI313fnZCKWZLPDRCTVUpaSNgWW4jU3l9eSV7NVRRPEN7Pnpmfn06OVQle253QF0iVEQ3KkIpczRCVUxuMHpHfnMyP29GQH40MXUofilCIlk9Xn1FeDM+QG4xcjwwW0svWyVDPHxISSN+QiJ0e3xvOVhjajRQTmdTby8/XkZxJig0UkY7ei5XPSZHUWhxNGtrdDg5V3hfclRXKyVS''@;'; put 'put ''VTNUWzYrMFcycyV2ITtJKWZIUTJWL3h8ZHM3eStRSH5VOGN6bUxLVU4qaU8mSTh4JiphJiEkV0UxODJjZlFvJG5eR3dyJXZ9TGglOlp2RlJkR0RxU3dhLzQ0UiVqQyQsNkpQTm99NEFjPDZEPEFZOyhQTmcxaSRGSDxEelAlW041e2VzOW4/VTMlOyVnIVQkeFNPWyhAZyFSQUpbRSZQP09YOi5O''@;'; put 'put ''ZkNvSyMwOzI+MW1ub3E7R2JER052TnhpPFJ7aldRKXZIZGwuciExaiN2LCVAbWJJckBSaDR3e2ppXk1NfjkoZVJecGxXe30vYXRQI3RMY018PEkzdyFqdF1PO3UzJWB5Vik0SSE2a0BLKzAzPTA1QlU4UGF4SENtVGBYbT5SR2o+Y3E3LEVXfjdmZ21ERiRhNDo6SEx+OTY4QzUpY0w4TzZUXy9l''@;'; put 'put ''eCt4Kzo8eDU0YlpPVDFAYDdBci9CUlQ6PUZJTHJyKVEsVX5KZ2o1Vjk8MiVpJHhFaWVkTW1RNkpsMiVxXmdLSWp4UW08WTBqVnVCR0c1Z2NqW3ZXejQzOFYuXnk5NUlNJUpuWUs3PV5UJlZdVktMeE9LTyUlMjojMCZSOmB1QDhzakdaaT9dJmtiekkrRSFBbD45UVl+YyhdKytwc15eWlF8TkNq''@;'; put 'put ''K0BhSCt5aVc0Z1gzUipGakI6MmBvOG1IVjB+QDpxazRdISJaOCZsTSpsWEo/N2d8XVIuSF5ib117Nzdaelp7NShSNG41dyteUE45ZShaIXNpeDR3QFFpPXd4dFFILn5gQVBtTTpoRHU8PH5SXyVQKXdsIi89eWVfVmQ6dUk/XT16Pk9hcUpSUTh8e0k1dzUoZm1CJnwlWEhJWXhaekB8TEQ4PHh9''@;'; put 'put ''XjleSX1aTyNNb0g0ejs/QEdKJXRLK1BleFAlPmM5NGMhK21fRSolJjclbTFhTSVnKzcxdUNIVFs9ZWFdMFhYaCZZMEdNVkh4SlZ8MjI/KUIyaHM5cDc+Pz15UzU7aVRkdXdgdnU9PyxKUkdsLkByKChtJDNvTGJmRkY2QVZVIThkMHFiJXBydWY/JEJ7WkAjUiEzaDZOWzRtZk5eV15xQjBSO0NL''@;'; put 'put ''QE9pXl5wR1NmeVFBdDljWGNSW1VaMVBUSWRlUGZNPVRuKmo2b1J3dktPWE5KVWV6ZW8+V2NLWD0rKSl1TT9tQDlzdVdkN2I5TilsdEBJdFBHISZadW9ea04iImMzTHspPCJMekQkY30sTitNOCpoQyRnZUIqUn5LNnp1Unl6RXApRS56SytkRTRVTj0ib1ptQ1ZRflgyeHB7UjdLUU1CUSMhQXh3''@;'; put 'put ''ejguXm00QmBrQXtWOl41SWtwRy9WcDheYVppJU1TRyh7Mz0mN2U5USZsYj9jZWFoKlJebUZFQkI4MkhlWyQ2cGlPSDd7bGppTWBINFF8ZjFkMCF+bDosTzl8NnUwbGNsMnNNMUxrQE8zZT5FKyoqT2ksT3twO15HKSR0PHZPOVFbKWZhIkc2S29NKUlCaSllPk1tKzRHITJYdTtFbj9bMTpBNE85''@;'; put 'put ''SltBKSovQjZCYHs0PEYzNXBLLCt1eEMpc2F5YCk4LFJpRHZpUWA9fmFBcVpBcGNwfVEyREN1XVVoamBEK0VYJmlycFo4fjE3Lk95TTMmSU9DX2M5eTU4eTIoKDpFXkwsLGlDWTZZcilmXTBvMmVAYmF6ODIqSUBjSzBqRjY4PEw3VWYjJFovWGpdOkZpXXtYXjtEbWpYMHArNiQicHR1Q31PLDJr''@;'; put 'put ''dz5oSlAkWFNvR0A1RV1YTE5ycllCRkBxS2B5V1NvL19SUCx2UzE3X1ExSFg2citHaE9Ke1d4WmVCV2JSeFZOQW4ye3BzL2g4fihmPG9zKUVEKUw+TENqZUB+OTI1QXhlOjdIZkpMakAvSSN5QCU8OUg8T296ZWpdRz1FdiF+ZyFSW0FvZXJDan48WTVGanYrOlVZeGAiTC8jcz0iR0YpZyFsT0dK''@;'; put 'put ''WGhzdyM7W1FULlpIajdZfS5yX3sxOHFJS3NXJU09dFViPzZNQi5ZI2RWPXpyWm4iYFo2Kys1YittLjN1SkJxMCkrZ0VRVmkkRzxUMDckTE5vNnBKdGAua0xEIiIxeTgyTzcqPDxfeExsbCNDZ1p7aEhvMG9Cc3pLPXlhWVNeO1BHaHk8VDA2Z2RSazA+Y08vKERdWXtGVW1KYVU+eylIWzQmW3Vi''@;'; put 'put ''ZUVQUlNWeVdTVS88aypfbkozZyJvQm53Xk0pKyx3SGo/TE5mcEsqenlvbSZma0J6Yz9GKntpfjtTKCIlNEtacktzUEYkPi9TZTBLUjIpRndtWyZ1ZEB0PlcqPS5KPVpzQ1d6MF4hIX4rIkpvejlWSm5YTExETypHQDdiWkVCbV9TM3tFcDFRTD5gWUZMInA0V3QlVisuVFA1UHEyfEd5Tj0mKzdI''@;'; put 'put ''cjY3TndES1V+bT0xa3ZZWXZIbVkvN1V8NVkwWnRUWm5QTiZNejpkb3Z9KE52WDUyeyoqMXNaRlBKaFlaK15JLnZXWyU/bSRKLF1HS3A7Sn0+SllZZCtxTXxtcEVXKV1jVGUyPm1MSTJecCo2flBpbDFVOT8kYkJGS3RwL0RKSlV5emowdl5rJklaLyxRak9rfDN1eHRqOVpQTnVNUTJJS0JuIkVT''@;'; put 'put ''RT5nIjRae0FLPSFmVmMhVjw6fGAwMyE9bGRvWWNVYSNyR1MvXjxmJks2WntOTCQ1STFuUmtkPTxkNEtib3N6amxaSiFjfW1TejN2P1pRfXs6O2dndGQ1VU9Qaz46eFNBZmVPfEtiaEtYRXpgajdjNm9JJUA+WTlGZDspJEwsS2RofDNZek5xcThbW319KUtJdzcmOVJlUFNKOHgjIy5KIzdsLFE/''@;'; put 'put ''OVFabl1NMjwzdWZrdnpkanhpQnI4US9eZzIzT2JoKVgwRnMlNntlaFY9RVl6NVNBfHttWUhQanpzXiJ4djZCSjU4KGR8am0vbGsydWRoPjpRcDtieSZNeWM2T2MhQ1khNFo3YDwxajcjNVo9MVdqbWZYez16dkExNSh1NTp6X0VMbU1NV1IpSnhfRnJWVWNodHU+ZyRudWM0PSM6YyU7RmlsLzVC''@;'; put 'put ''WER5clIyRWtpV3pBX3RGQExdY3M3TTFqQWBIeDx7YC9YPVE1b2JgMnBudm5ZQz5Yamg6ci5rd0JwZkJGLz5jdCU/a2VrS1FMbT1OYSlBQz5hZl8vMHozJkFKO1QkfH1TPUR6ZDxmSXwpLnpQVFMqTkxMPz5FfGowckNkPWo1M0hYYW1DLFV5ZiEpXlF4fmkwV0V3d2l1fSlFPDN4XVdfO09RdWsv''@;'; put 'put ''bCwpcFMzfXddcU9KVGs6R2FieDdqJEFERSNOckZ+aU1fPCRJbUh5aUJHaTRNdUFUOjI/bTNJandYW3g/YkxbSV9KPDI2Vm97WkVUM1FzUVlpN3VNcX1pTVchPWBPbzkjVzc4bGIqdnZUa2Umb3QoYGQ8Y3hjIkxObTJKUyZjT09MSzVkL3xKKk9mXzhDbkkwXyppTVJKUl87SzxsVlpmX1UyS0Yk''@;'; put 'put ''UFRCLHA1biFrcUUwcyhjJTw2Ml1KTGpseSRaUTR9dk5xNHhHbX5icWtNZ34mNVhnOTBzIm5aSjM3fUM+PX16WkxgdD0pdVRTY2ckblpQQnRxI3g5dE5+Vnk3RDp3cU5bJE4rdU43WEl7VnlHQjJIO1Q9bCZiUyhhKVk3PHBrd0tOdkByXW9LV2lvZmg9XlV2OVIkPigwLGgzJEw9Y3k4PHA8SUZ0''@;'; put 'put ''QCRgZzc2akF8bWB3ZW46SGY1XmFwemxyMzFNLnt2NHNJYENGTHRQaipoUiF1TmlDWjQyfWxrUVJAcC5lRzF7WHVNcDxEKCxJendEWjFIQyQsNixXQFJLbjdzOkcyVk1Ea19VeVRRNitiRkkoXms2YWxPKk5MI35ZWXgibVRDY35xYTZtRyUmJmszc1ByX0p7YHl2WC5SbURpPj59KHRBS3I9Pkw/''@;'; put 'put ''e3IpV3ROOipMLDhNaSEvJlhaLCZKdm98KikyUTshSmgqOkpWbn4/OiQ/dlNrXlFrfVZCcH1XQCxuYHR6dTolZ3Zzcy90VHx6TSFIK1E/bjVkbzpPXSF5OUI4PiZkR1JuUj9PcWsweHNFKnddc1BvcU5hRjJofSVFWT4hdVd9fDZabWlRR0AkRjBRWGd0NllbdFF8fWFGNEd4d0cqaWJOOE0+dGVf''@;'; put 'put ''RTssdmZJKWskJj1CJDZgWFF8I1ZAPlI3flpLJF1NNXc0Uk9+O3BUNzIsV1hzPDtSe1c+WFtzUT08VUZ9eWxSZzwiNG92JmZnK0U1Wkw5bmpGMmxGIUkiRTc+L3I0Nzk8TmM1Sk1IbGFfPFBRVVAkRlhRWTwsVShNa2ZiO2ZnPjxXcVVRP09FVXdhWkN3O24uOW9RYlRNOkclb3VsIkUlfjttVyQ6''@;'; put 'put ''QDZLeUxHRGVaLncmfGMlPndOOFF3d1FGfD5XRjUiYDNvL1k/bzdIelFiMVtsJHs+QFVbSDlvZlB2RVB+KyJBXUssY24udHcuIzFSbSlCWlJ3JVhwQjc+O0RhUyJ6flY4eTZqfTl1clN7N2dRRFk8WnFzelhQWVBAUTpTOFR1cnpYOUxHdzlSZDduenYqT3s3Z3dPS09kI1kyfFBPKXxSO3Zkbjwr''@;'; put 'put ''Z0V8b28iWzFVYDJlN3g4VFNme0lhWUJkMiFTZlg+S2Uwc1U9UElhTSxmJld2MSZMMStsfjxeOFNdQiIiM01mRSpfQkFdYW4uKkBIZEppXWooej41WUxefCY+JVVyR2tIfkkzK1p4VUNYRHQvQnFNdFJoSVk9QzEsUkoheSxOMD5vdjYlVWRKWSEhZDAseVtDPyhCcTA1VE5gfGF1V1N6NHR2a1lm''@;'; put 'put ''X0JYKnhgZ1hpOVJRITY6a0xQe0FoRD81dVB0VFhrOlJaI0khe0JxOU1XSlJgMFNKO3F5RFNxYEJxaWpqWDpZX3UvO3VhdjFTRmIoTTldQG4paExjakspeS5zJkZ+WDEoWDJNPyRnTzx4SXVvVXskQnF5dkk3PXQlWC8lKzVzfD5XNn0pZTdQQTVrUjlYKkxnYyVMMDZEXzQhd21VIV05N1R2b30r''@;'; put 'put ''bTp7YiJJK3R7NHFPJWpaTyQwSzddM2FlP1QpM1dHPml7ZE1nVUQxcnxod1VaMWI6JSpgYkViLmM2PiM4NlNub3ViKXkmTjdweEw9dF0zRER+KEQ0X0Q1KUNOL1coRmRzdXovLDNET2M3UEFGbng6U3Q2XTNDRyFSI0ckaWtmaUVOLyY8aV8hUlR5fWcxRW9qR0pyej9faV9BcjVBVHF5QTIrLyxG''@;'; put 'put ''UipbP3NZYEpNS3g2ZylhPjQudSlRcyssVm5XL1NUcX40Z1VQWFNXdVlhX11Wa3UxUyE1PVI8KEZSYmxYfFBhbF4uOD8vdzB6Q0k1TCwpP2xiKVApX01QcGx6Z18vVXpJIkwoTlVwSFZTPy5tQDZBdz41Z1FeZjBdRlFjXkxpZCtwd01LUVp0OFQ3ZV5iVSo9dCQrJGAlSnIhUWolNnV5OTFQTTo+''@;'; put 'put ''UUBWXVpMMXRoPWdkVm4zIUtWfTA3Q2w2Tzhne2YwQCF2Q1JYJWw/P081Li9SVyN9MWo8P2ozP0oleVIrYWM2PG5dZjBaUy90X1UkYy8zWChkWGdkJTZjJGFQSjVLfSFdKjBiNmMhSSY1YnpNKERbTWs0KENrbHk4ekNgeWhuKk9tZjRoeFhVfGczZ3clNjZ9KlkhVH4+bWxETzB0R3QyOzdTKUds''@;'; put 'put ''MWxMUyhmT2d8WEt9P21ENUVoNk0qYm5ZXXs7d2s6PGRkQT9FcDQ2cU58KEpdfVFaIzZnJD4xYGdkaW5pd2tfZlVUSHdkOzRQKHc1KXIzUX1sdVVVekxMXztTMFp8UTNadz9nIWhjYDozUUV5M2Nse106czttfj5pdmAqe3pjfGc/YipBMWZ2c0pXY3tdcE19bGx+MHkiIyNzeyp0MjxmMWhdaiV9''@;'; put 'put ''aVJRKHN1bHxAZXkmJUhoS2JoMEFdZV9PJH5vSW9oKS88P3FUZHZpLGM/UFUvRyhVdV9QVVh4WC5WSnBQKHNbenF8MTQsSzdjXlFaNW5nNFkja3A9LEJiLDl9OUdURn48ZSlWTF9DYm4mdWV4QlA0fnFEV0c+aU5Kal8uRTlYW35iMnhQfX5WYFBCW3xoNiJLNC4hVD1TfnMpN2FQeDNHJXU0a2RA''@;'; put 'put ''Lz5gL0d4TF98YUJfOy9gLn46OW18an06OXdbP1k9OWl8MGA6OXNbN3Q1fjNvV1c1fWthKXJCKSJub2hxbiw7QV5fNj9aZHN5SmVrfWxpJW00XX56SWB0aSxYeGhLL04vOSpse11ydEpSTzZQKEsjPF9oOFYvaDg9QjFMNH1tLlAqUjp+aGJudUo/JkY3JHVISWFje10/fH5fXjskYE09OjkydjlE''@;'; put 'put ''Y3NkcTpfcVs4Xzl9Nl9eXypAcy5lfFRlYF88a3dBMXJbMDxrJDVjXXk1VS5xcXdBfV17d1FrNj9YVSg+WDZeLFIwPVZ3RXQoZ2BlQ184KSxeRSR7Y3A+ZHYzNntrUkQmJGE/O0RzIzJtL2l0fSY5ezs4KTVRQDFSYjA6R058bTNSa3hyIUZxQ2t+Nmp4OlkoZVMpYkl9azshb3UvcWpFbnMiJiw7''@;'; put 'put ''bXNPPjt9fVhwN0RWbi58fWh5a0ozdWljXVhGIVImdFdMfF4/ImcuOT91R3xzT0lgIU98KDBJSXlya1JROkklYzQifnE0JHRwMUNhejxLMyJET1NfX3I8Ln1kZEhGN285ayVUflNsKD59YSg6OWRxfF1ZT1EoXmkpcnNUc3BefVltfV0ufE07XjtEU2tfbFNgKj9ZNGhILnRtVih8MXQyZihKP1di''@;'; put 'put ''VigrSShxN30zeEwqRzc9KXZkMFkmI0BRY19aQStWLFUrejpfKDJLOn1HUHx4Qm9oM3dkYEgsRT9MazZJKFVVJiZFNFF3RDRoKyxNflUoZjEpJW5zZFFNZFp8Q0pgPylsOjkoQEAqM2hpLHRte2QyPiMvZDs1fWg4XjsvUltjfV03fDMiQ3VJMVMxPztdIm5bNVpkc3Q2ej8hWDY9bzNtXXVCMWg/''@;'; put 'put ''LyRyPWJSOVcqZSlUd1RrfVhFfiUwZE9qfDlPVmxiYEtYSDYkXnhVMWh4RDFGPDJPdDFlPG9NdH5+bU58NCI+O0YxT2ZzZ3dvKFg/eEc/O09AbzF+fSRdPn4pLDwyYF9xekVWWi81Uyl8MUBMNC8pJDkifGBtTmR3fHJ7MDVDKn4wMGpoNjhgakQuaW5uRzs6OSJ9dHthWzEsNVMlPztMcDolPXZR''@;'; put 'put ''Z3I7a0MmSio7QGhzM1psOmI/Xz8xaEo+RiRXKGFAWlNNfko6OlE5NH1sQF4vQjs8NX50bj1+YURlUUhTL3x6KyhoRV47MGkoSSh6cmJ9Tz9yfng8LlFoTXw0Vj9Ddnx8bmVLYmMpbypsSnNKbXNETyIjO31oYn1dLyYrPmhpJElXcmxzYyhBPSNoLFF1X1FSX0ciZmxzfCZXcmUoY3shYjxdWn4z''@;'; put 'put ''WjZNZXZdQ0cpKClMRGwvJHIhTlJqSzFedEZ1IWh7XWhmPV1ZbF0qWEhQfD5IPyZWeikla3NYJlh9ZCh8PUxBY348UyY5fntkOmtEfV0jeW5oeCs0VmZmMWh2QWRINXZHSF47XTdofmxkIV9yUUtIbm88Zy5HZj13dngkIz9Ybys+PTJ0fVUxOUBKY09nSGBHYmh0bm9BVHN7bD5XLmZmNGBHYiIo''@;'; put 'put ''VSVsSiJmaVNPcW0jJjk0KGhLTGIyPmBJKHJlTnp6RXoiPl1mXUlXcjA/dF5AbCZaZHN1Kl9fVXAvN2ZjMSk6IzphSWM1UUdwJTciKEsjNUp3ZHx+Um1Oe2hzeG5yKDVbYy9eRFAoInQpcmklc0prc1VMIiMsfShWfGx4fEhxVUE8MiVzJjlGQEExPDlEQEAqWE8uUSxkQCZdRWd8LzA5Ki9LUCg7''@;'; put 'put ''eGAobCFOUn4jSDc2fWthUCpYJCVea2VqPzAsbGUqTHJDY185SXtANz0hVHB1YzlUNSYlS2YzVnJDLzlbTV54SEskTHpLP1ZVWWc/fXQ6RyklaXNhSiFUOChiOCRjY1EqPk9TTS8zSG9HND8hVCtadHlAek0vTFRGZjYxXyJRZD0wPztYIzxsSnZnLG5RZD5KMm5SNH1SLGheJX04WEh2K2JAeklk''@;'; put 'put ''a08lPCh2LlsxKVI2WX02d1EqQTEyaCQqKEVTKFR4QFFrX3hPakdBPTNLZkk7SmF4Jjl1WGZzekA4Y3ZOfVMofWxQI0JKQ3tTfiNlJDZZKX44KHYhUX56MDV+YlVkUyJzfFdNNnx+aGJXND5bKzFkP0RjOEkrNyt+S3A4fWB+LFk/YS5+PzpdfkVyYnR6azQ+XVh5QiV9U0hCPTcsdFd9LF4pfTlR''@;'; put 'put ''UEIiUzhzfisoOGdNLD1+M1cvYHIrems3K11YM0BKViJzNUZzNz5+O1N7fk9yZTx9fU87QjM0fiZEO35KNnFbKjEhfWFISiFjc21qX18lY147O18jKV87Ol9VMS85MD8vSzJoRSohYEB7OzhqbmRzOXV0fFJyS3UrKVd3aUwqOCk1PVAqQlMqYk5EUHtKbT5iOzUqY25GUFtBdCtBPFE/VlB8PiYo''@;'; put 'put ''QTleKmhDaCRYfWZzbUZBdSJmNE5ycCN9TUt8bGtfciRfOyNfIV5aNHR8KWxQTFtNJjlzcCF9YWA6Oyl4UFdKS1YvTHMhfipEQ2BMa31+eStDfkNJW1hUXVJ5QXRwRk8pbn11SVlsLEcsPH5lZHN2aylyd3RKL3lwbzFyPzk8LilfYThYdzFANHo/OnZhfH5ANUMzTDZDcH1gMDlzIjshPmxCOCRB''@;'; put 'put ''e1Z1Vn56VWBzUSNWZTN+fHomNHhLeXtvbFpXSVteRUR8b2wvfiJPfXNiMXBpWWA7KV99QWBdN1Q0c2FUKX19aEFUVzxveUZyW0VSWnw0am1OPygmfFtqUDJQKDoybHxQNTJoIlFVQTV8KUp3c3VZTENGPlk1KHZGUiFfKVZ4d2lOTFJ7aXFBT3FaaU5QLnojS0w7UCg6UiZ3ZH5maU5FUTliUk0y''@;'; put 'put ''MShjWiRCUTlQUmJCNWs2fTZVZEI+dDFlP0MkU2haZlpUNm0iNFBXNlp8c3pYVVt7dDJsJjI+Q0ciMjJOYm5OZmBLUmg1bHtIXWVreEYpYSJbVTRXeF8xJmN3bkNdcyJwVnZdUGJua09pfl1JRy4oWzVIdkVtPjkoNGA5eH5DP2ldfmBHNjgiQEU4UXRiTVMxPExPRTNZaChwZD50Yk1JenFLVlo/''@;'; put 'put ''QjUpckFQfExIeDJTdGw5R09qbDI+a3RsfHUsXTt7QDl9N1pLKi5kZX4rN3Rfbk1xeDojdWp+R0Q/P1koeGJtNn0zWlIqeDpWIWh3P2FkZDAxQXQ8W2R+PGh8ZlIzM3AhbHdyfk9jc2FqMT9TWFV8ZCRdKixYWzFkPyU4ZlIuUUdJPlZJMHt+I1Nkc2ExcnxARDY+bH00MW5oLlFVISY5PVlhbCo+''@;'; put 'put ''fEhrSWJjIXNLPUliLD5KcWx4ezthKFgxd2YyPlpHQm5eX2QwZXZsPiRiYF97NXYvWWlgM31UZ3xvM2hjJXIsTntOaiU1YDJVL18pamVzWHtTalRMei9+X1NObSZxfFNqZXNPJDlpUUVoRDZmX3ZZSDpfQHJldjs4UFBYSEguPiV9R0diRykvQE4qQlMhRVtxWFclKnZvWEpDMHdHcUoxZT5jZmh0''@;'; put 'put ''ZCN1QjYuVSEqSksoTixhYStnRGpVZmVVdzk/fHdjfCtaYHRqMENtPFFgd3VfeXoleDMsL3QvNTB3aDZ0JWtHTypZZGpeXk8wZDhfPXk6SSVhZngrN1ljJXUqdW5YM0QwTn4+fktDZFUuWHxXWjM1T0QxPzxaYEMlLiI+Ij5aS3hjY2d4b187eF8ramRzWnp7VEp6UTRdYz0/U141UFVONzVnKTpm''@;'; put 'put ''XVFuMTl8N2o+Pz0rX18vOCVoRlY1YzdUeEVgdz4mMFlpKTJiblJNMj8xcnxGQylVKVBWXzh9cmpKUCNzdUVUVFBXWX5rOSsldUduLjF3cjxTLCZ1dkBURnJrYDMxTSxVUVo8QFh8YTk7Pyt8OH1bNTRFNHxxfCw8NmNgbGliWC5tbkA5SERmc0R4THtzQjtFZ3V+Pm4kWHhYLkloaDZKaS82Yk9q''@;'; put 'put ''K3glMDx1b3ZsbnZeZzdTU2IkaTQwd2ZiVjFIaT04Ol1sITxRd1syJC5sPURIPiRQSklSMmsrd2tVVDgxWjg4UjsyZD9SVDgubTtmKEZnOyVJfiQyJElYWWgrLiNCfTkiSXo5YmIjNXJeZzhvNG5ecHUvKm1KcTtVY0FZYFNbYXMoTEYwfDlpUlJpTUdoQmNBSypqcEQqV2k2dlpxVGRTY2xyRTxw''@;'; put 'put ''cWtJWVB3QVJDMndwa0xGalZoZ3JVVFNQIiRPSSVTMTE7STRrQX1BTjdlXk9qTkdeVzUocFZFSipVcmkjeTNDPUl1UmMxaCJ8PE4vOWp7bk0vOWA+V1QxaHBdblE+R1Y1KFVhKD9gL0sxaDldRyhIL3NBfjpjc1J6Il9RKjh9aDVsd2J7K0Robl5xdHtJfjlgMXVvfiViaDZnfSgyZWdSY05dbzFU''@;'; put 'put ''e3Z+P2dsUGZzS345YWZzQ1tsITtxSFNte3ZvVzR7JEguQ313alNXYzF4Om4/K3p1c3RIRy9+NTtjUGA1T1hXO0ROMiJgfXQofWZYekYqME4yfWArNzR9d1VTNF9XTjI+fWt0Z1czMEc3V3tAWiM+cnROMjt9VXZSV189dWosPit6fX4jUllTNHxoYTR9Om1mZ1UsRGskc0lsLHpePipHIUpHYj8o''@;'; put 'put ''TlNfWHJ+KF9qd2BOfiMuOFglOkh3azN4JX14MT8uOzRPV3grdHxSck0val4iQlg0JTRhQ2IzUCJ0ejdua08wRGMqRVVWQGwvO2FyT31fNFF2RHpQR1UuTUxIOFk6N1RGbUFxaUFKWy4mTnhMZGxYWCRXSEhjN2ZIOnUmazglPkZAdEVSV2I7d2suOHRZSTlKKCgwOmZyNEBXdC8ldyE+ezR0czZk''@;'; put 'put ''Rlo4V0djXjdbZXRVWmZffiFEUH02MUV7cURDW3ZRRyJANWI8dWRmNEVHWEdwayE0KjlaJHQyQnJPZzVbd046VUllSSRLW1UiOERNZDAuRGA9WiE1dC9rdV9eX1tBOSpmQF1EcGE5NCxxKGQwRH4rPz8jVm9mLEhRTj8vMzYya3VRWnFfKEsvUW95c1BlKTdidCI5dUVaMn5LMihWeFVBUT4lYW16''@;'; put 'put ''L14lJFt6dDswNHViUWdUP1t4fG1IIiZLKitYK3pedFlxMntbJWVkKmB4aXQuNkJGMzx8eFo5fVJ8NmJYQXJ3ZGZoNXoiNiJCUFFAfiIzY1pbdGtiTl9ZL1syRUhPaD5HMEdmPn1DcGgzPiRoPEFtVE9LLnhBeDpYcFQwfGo8XWFEaGlsJiIkMmRQaDBqLD5QS2Rvb1VVYn5NJCU5KEM6fmE3Xnpf''@;'; put 'put ''b3JzRlFmMEY/cz04KFpLMXMxSCZ5I2p8TyNxVEg2Z0lvO2Bnci4meTRHdC9baFF1JVJZWFdxZnF3eXFHODs2Szgvc1p3dWVeTSE5OVFseF0kJTZgXiNmNSRiZDome2x4dypuYjF7ZH5PdFd5P1ttJSpOXWMkUCl5NjApc282dSxoYXskO1VkJG8rZ01mI19Fezh1XkFGe2YjTX0kaFB2XjdQUXBj''@;'; put 'put ''JEYhJEE8Km1RW2J6Uz5OYFAuaUouQnFebTREOnsjfGRYLm5UY1EzSi4vYCw5Rn5Xby9KaWJQfiUhK2k6WXs0bXpdUTN0eUxFeiQpWlYkPzRJX1EsRD41Zlg5RUJ1WFN6OygqXXZjMVpCM0Y5X0g1NDY+R1dZdiw2X2l0ZmU7aDg/NHd7VXEzMEVrNHZWbnk7Km5NSnFvNU9qJnkuS19ebD47OXE8''@;'; put 'put ''Jm1CZnklSj1XKmZPWXxaOmR6aG54ZE9LcmtGaDNwM19QRFlVXzBJaVNdezYzb2c1cnlBM1h8VjcoXXpMS0tMUHNzeixfTF95S2lfKG12PVM7PGtLKUw+YXQkVC5gImdCVXlIeVt6fXxTP3B+a118QmpBPFdpNzxJZzd1bnMyPHJdKE0uXjo+TXJKOF88dng3XzZRaUVFIzVxIilqWCF1U0dNMkYw''@;'; put 'put ''eEc1X2FNI04zSkMxIUMhKFN4Vi5BWHNRcD9uK3hRc285YW5fLDhZeV9neXs5Q01LQlVJe3U1PSJJP31DTUJ0KSsscnt+Xzg8IlN5Q2xuRVBWSXxkdnQqbWY6Sko3Kn5gUHlDJUVhfEJTL1ZQKHllWSV2fEU0dllqYTlsLHVxVXBKUy5rSXhhOnNIOUMqdFVRdG9URk4zR1grdi8yZ0wuKzZuW28s''@;'; put 'put ''b1hUeiRfP15tZmxgQy49bXgyaEg8byVRfjFvTipjZSVdKi9NcDFaOVR1V1c2KXtwOEtVdzx3TWRbO3IrKkw1SSQzKkZ4PVc9TipWLD1dZiI6PFljNC9pOEVEWEhaOm5ETXQlPH09Rl0pN15ENFZHPzJsYDRZQGBgP0tNelpHMDU6TkRDWiVEOTkpVUpbXU4hfTdGLi9aPzAqZmtvenI0Q1JJK3p1''@;'; put 'put ''VCFmTz40YiswM0tUQEwhQFpIX2YhT3pQYjFNTV5BY0YmOlFLbH4jNXxXPGhMbSxbTXl3IXA3MjRwbm5RJlV4RzdDaFk4ZjJtdiNkcHRCRTFOWlNCQy5MeUpSNFVrQDVMOD90NSU7fShse3AwXStUdHB7PExBWCFjNVs0TFNjQkpAL355RUQpdE9rUDZnL3pgPjVMQnFCe0VzT1kwPEBGM3xIMHZ7''@;'; put 'put ''ZHBSJXBaPUgqX1NaLE50RFZZOnoid10yKWxsJF8rNFFtdHVsSjdUIypQPG1uSXU/VnFyWWxoKjdmdkwvYTZGbyh7KyZ7Ly8zYT5iMkZuSGA9MUBXY2JgX3c8dXJGVWZMLEF6dGVRPjhOX0Q8cCI3YE40LGVBTWVlO3xgMnJbRlhscyViYEx0VnJmWHN5cDZGbz1CcjMiKnBediY/Y09FN0VpYlRN''@;'; put 'put ''RF99JWpwaS5eey9nKzdwd2hePVAwMEcsTmpzKUZmMiFrSltQJSQ5TXt2Py9IZnl5PGEhTW51fFhmKz0xKVt1ajJaOiFqaClaJmd7cyZRTERFdGB2TE9OT34vZCllaHQjc2hOMy9hRjZ7dlcpfVFHS31tUnJFMDtoLyRHb3loNDNMO21iW1IxY2AxfmIzVF16TDo1Wkt1WSV+YmxWcCp6Wj9NRGJJ''@;'; put 'put ''PExXMDxtMEYsR3pXMj9zcEgldlI+KHEyPHUvWnZ7VHdSYVMwNSRVTSZBeiIwbXUuY0ByNUB9UHMzUl9CRSZucF1taVs3YyQrcnlac1gyd2lpO3xHU1RzckZ8Mjk9QGpSW1pjVTY8MX5GL0FCMzNiPmMkNE9Rdy90T3E9YHZ7Iy4yOT5QYXhXZVdXeDFmOjE3NFI6R3hWdFN6WHsjdDUoMChjQjg1''@;'; put 'put ''MEMieThFPyVyJWl0KXliIlRDSWNuNCVwSX56elJxQSE/fXMsXykpem9lKH1PTD4sJHteald3THU+WWp1PFhVeVo0fCMzW11PJnxveWJCPjgkYTk3NCVeWmBEdjxycDJmSVdOImlTX2s2VmNjNTYwYTRLaEhqMDc/K0YlU1kieEw4Mz4jaSg4RWpkaVEuazFyJU1uP2tXa0tKZE4qJi9HLDFXYDpX''@;'; put 'put ''NjN8ZTFLe181WHZWLmlXbTc6TGBLNjVUQSgpI2F4Z1pOT35LM0UlR21BI1p7OGZLfW1LQDpEd19nLDpDR2llaWZZTGRVMilRYWI+XTEuZWchK3pqMVk0YTNCZjNneDY8Z0Y5PUNkQCpjb2shIXRrajYmVT0mOD5FYj1rLixsKDA8cClLYUBnYzU0VVAoQiZxd1h6dXFpQml4TVdGOEhhTSUxJH5O''@;'; put 'put ''W2l2ZywvIVg0XkB7ZSloN0xoKXlBZG1jTmhobCM8OCshZVQha140WiVkSE1GPTRQamtZXThlND9KU0Y5T21zPmg3IUNLKmEsQ1k9UDJaI3Y/YjckN2JgK0IqZDBgaDZbbkZuLzgxeWl8LzgyZkRMUXl0aFlZVCRNZEVEKn4sXT5iZmRCZyNoOTR8PmpMVEJZTzg1MVV9Nmp6YXF1WD1aMjQwX11V''@;'; put 'put ''Q0FIXVtDITQwSUZicGVRYVhydy9JI0xNcjI5WyJ7Nz1tUmhjeSxkIjNBSSU5PSRIMyYoTHVXOSxtc2RkPkNafXJ8SWwuZlhCalAjIz00Sm42QX5YKUc1aCVBS01QT2l4QlhzM1hOQzVRdFR0LyxDZHNkTGtxfCQ5QUxrYStrR3d5T2MqLy9sN1prJS8wP0pdWkR5fkVjbVs1bkl+MDE6U31TZFh5''@;'; put 'put ''L1Q+I19KanZ+PSw5NCg7aXh4JCQlQlpIMzdAVTE3c09sSjZ2KSIyXyVXbEhke2FmSF9qVWYyPyNSKEZtNklhZ3gwckBYPUBxKDd4OGljS2c3MzxKbzN1UnEpL3VsQzYxfXVFcV5STTkkdXZFOTVwJTs7YGQwYjY4UH0oUy9EWHdVcml8aCRlVSZbWT81RjNMKVsvSz8wYzh6QGRUb1ZzQXtPNWht''@;'; put 'put ''az44Ny4wSn5sIn5ra3NBaWcqSWM7R2pPQ2NdVUhyRCVCeFZdfFprOTQ6blRjQDgodiMoWSZBVWo5UmlgRCREcmJsbyNKZjRsejVbIjpWcVJYfHUsKGp1REUxWC9LVHcvVmdpY1dxSDE0fmBFYzFYT0hFSGI7Q3o9OjEraFpjLmtZZ1hNI29fdSUscXheIUkkbW5JVHI2QEpkTDV2UEJ0RnI6KTx5''@;'; put 'put ''NktuSSlAMUp1MzZAa1pCdDFNeWduUz1lcH4jdjE+SVF7T0R7NW9TZ3ViIzQ9Ukl5OlgrU0VxUWdJfnY4PiM+MzlLImojfHo0UVYkKzRYdVtjMUxkVU51MWZSYnE4Z0ddXyQiVE5fTTdyS3JHX35yPUwxUEUyP31pPSp0MyNjXWtqaElSa3xgNiptT2EvST4oQEA+cHhkQSVrIV5wdSlnUXd7dnIp''@;'; put 'put ''X05xO3V6W0MvVSxySUcvUE02Y3xkcy5mZTQwJm1yNjhLUl5fN11FZlBCenozUXhaeT15R19hWiQmWjl3QUlgOyNQfmcyZTFqZzMjI2tGP1szViNZay91YyomWSMvSChUdnokJVA5WlBzYTVddjl3dTU7U0JASj01SWlmV1FYSTBVQScpKSksTkF8fChOQT1CeHQoe3dhc21CaW5hcnk6RnRlLGxv''@;'; put 'put ''Y2F0ZUZpbGU6dm9pZCAwfSkpLE5BfWZ1bmN0aW9uIFl4dChjKXtyZXR1cm57cGF0aDpjLnBhdGgsZGF0YTpgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+XG48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4i''@;'; put 'put ''ICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPlxuPHN2ZyB3aWR0aD0iJHtjLndpZHRofSIgaGVpZ2h0PSIke2MuaGVpZ2h0fSI+PC9zdmc+YH19ZnVuY3Rpb24gR3h0KGMpe3JldHVybiBjLm1hcChZeHQpfXZhciByN2U9Y2xhc3MgSXd7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7dGhpcy5fbW9kdWxlPWx9c3RhdGljIGxvYWQoKXtyZXR1cm4gWnh0KCkudGhlbihsPT5uZXcgSXcobCkpfXN0YXRpYyB1bmxvYWQoKXshZnVuY3Rpb24gV3h0KCl7TkEmJihOQT12b2lkIDApfSgpfXZlcnNpb24oKXtyZXR1cm4gdGhpcy5fbW9kdWxlLkdyYXBodml6LnByb3Rv''@;'; put 'put ''dHlwZS52ZXJzaW9uKCl9bGF5b3V0KGwsYT0ic3ZnIixkPSJkb3QiLGgpe2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXooaD8ueUludmVydD8xOjAsaD8ubm9wP2g/Lm5vcDowKSx2PSIiLE09IiI7dHJ5eyFmdW5jdGlvbiAkeHQoYyxsKXtsZXQgYT17aW1h''@;'; put 'put ''Z2VzOltdLGZpbGVzOltdLC4uLmx9O1suLi5hLmZpbGVzLC4uLkd4dChhLmltYWdlcyldLmZvckVhY2goZD0+Yy5jcmVhdGVGaWxlKGQucGF0aCxkLmRhdGEpKX0oZixoKTt0cnl7dj1mLmxheW91dChsLGEsZCl9Y2F0Y2goRCl7TT1ELm1lc3NhZ2V9TT1mLmxhc3RFcnJvcigpfHxNfWZpbmFs''@;'; put 'put ''bHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koZil9aWYoIXYmJk0pdGhyb3cgSXcudW5sb2FkKCksbmV3IEVycm9yKE0pO3JldHVybiB2fWFjeWNsaWMobCxhPSExLGQ9ITEpe2lmKCFsKXJldHVybnthY3ljbGljOiExLG51bV9yZXY6MCxvdXRGaWxlOiIifTtsZXQgaD1uZXcgdGhpcy5fbW9kdWxl''@;'; put 'put ''LkdyYXBodml6LGY9ITEsdj0wLE09IiIsRD0iIjt0cnl7dHJ5e2Y9aC5hY3ljbGljKGwsYSxkKSx2PWguYWN5Y2xpY19udW1fcmV2LE09aC5hY3ljbGljX291dEZpbGV9Y2F0Y2goWil7RD1aLm1lc3NhZ2V9RD1oLmxhc3RFcnJvcigpfHxEfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3ko''@;'; put 'put ''aCl9aWYoRCl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJyb3IoRCk7cmV0dXJue2FjeWNsaWM6ZixudW1fcmV2OnYsb3V0RmlsZTpNfX10cmVkKGwsYT0hMSxkPSExKXtpZighbClyZXR1cm57b3V0OiIiLGVycjoiIn07bGV0IGg9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeixmPSIiLHY9IiIs''@;'; put 'put ''TT0iIjt0cnl7dHJ5e2gudHJlZChsLGEsZCksZj1oLnRyZWRfb3V0LHY9aC50cmVkX2Vycn1jYXRjaChEKXtNPUQubWVzc2FnZX1NPWgubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShoKX1pZighZiYmTSl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7''@;'; put 'put ''cmV0dXJue291dDpmLGVycjp2fX11bmZsYXR0ZW4obCxhPTAsZD0hMSxoPTApe2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXosdj0iIixNPSIiO3RyeXt0cnl7dj1mLnVuZmxhdHRlbihsLGEsZCxoKX1jYXRjaChEKXtNPUQubWVzc2FnZX1NPWYubGFzdEVy''@;'; put 'put ''cm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShmKX1pZighdiYmTSl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJuIHZ9Y2lyY28obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImNpcmNvIixkKX1kb3QobCxhPSJzdmciLGQpe3JldHVy''@;'; put 'put ''biB0aGlzLmxheW91dChsLGEsImRvdCIsZCl9ZmRwKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJmZHAiLGQpfXNmZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInNmZHAiLGQpfW5lYXRvKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQo''@;'; put 'put ''bCxhLCJuZWF0byIsZCl9b3NhZ2UobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm9zYWdlIixkKX1wYXRjaHdvcmsobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInBhdGNod29yayIsZCl9dHdvcGkobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91''@;'; put 'put ''dChsLGEsInR3b3BpIixkKX1ub3AobCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsImRvdCIsIm5vcCIpfW5vcDIobCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsImRvdCIsIm5vcDIiKX19O2Z1bmN0aW9uIEZOKGMpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LGMpfWZ1bmN0aW9uIE02KGMpe3JldHVy''@;'; put 'put ''biBNYXRoLnJvdW5kKDEwMCpjKS8xMDB9ZnVuY3Rpb24gaTdlKGMsbCl7aWYoInBvbHlnb24iPT1jLnRhZyl7KGE9Rk4oYykpLnRhZz0icGF0aCI7dmFyIGg9Rk4oZD1jLmF0dHJpYnV0ZXMpLGY9ZC5wb2ludHM7aWYoInBvbHlnb24iPT1sLnRhZyl7KHY9Yy5iYm94KS5jeD12Lngrdi53aWR0''@;'; put 'put ''aC8yLHYuY3k9di55K3YuaGVpZ2h0LzI7Zm9yKHZhciBEPWQucG9pbnRzLnNwbGl0KCIgIiksWj1ELm1hcChmdW5jdGlvbihPbil7dmFyIHpyPU9uLnNwbGl0KCIsIik7cmV0dXJuW3pyWzBdLXYuY3gsenJbMV0tdi5jeV19KSxyZT1aW1oubGVuZ3RoLTFdWzBdLGNlPVpbWi5sZW5ndGgtMV1b''@;'; put 'put ''MV0sYmU9MDtiZTxaLmxlbmd0aDtiZSsrLHJlPUVlLGNlPUJlKXt2YXIgcWU9KEVlPVpbYmVdWzBdKS1yZTtpZigwIT0ocnQ9KEJlPVpbYmVdWzFdKS1jZSkmJjA8PShwdD1yZS1jZSpxZS9ydCkmJnB0PDEvMCYmKHJlPD1wdCYmcHQ8PUVlfHxFZTw9cHQmJnB0PD1yZSkpYnJlYWt9dmFyIGR0''@;'; put 'put ''PVtbdi5jeCtwdCx2LmN5KzBdLmpvaW4oIiwiKV07Zj0oZHQ9KGR0PWR0LmNvbmNhdChELnNsaWNlKGJlKSkpLmNvbmNhdChELnNsaWNlKDAsYmUpKSkuam9pbigiICIpfWguZD0iTSIrZisieiIsZGVsZXRlIGgucG9pbnRzLGEuYXR0cmlidXRlcz1ofWVsc2V7dmFyIGE7KGE9Rk4oYykpLnRh''@;'; put 'put ''Zz0icGF0aCIsaD1GTihkPWMuYXR0cmlidXRlcyk7dmFyIGQsRWUsQmUscHQsSnQ9ZC5jeCx2bj1kLmN5LENuPWQucngsdG49ZC5yeTtpZigicG9seWdvbiI9PWwudGFnKXt2YXIgdjsodj1sLmJib3gpLmN4PXYueCt2LndpZHRoLzIsdi5jeT12Lnkrdi5oZWlnaHQvMjt2YXIgTW49bC5hdHRy''@;'; put 'put ''aWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpWzBdLnNwbGl0KCIsIikscnQ9KHFlPU1uWzBdLXYuY3gsTW5bMV0tdi5jeSksbXI9TWF0aC5zcXJ0KE1hdGgucG93KHFlLDIpK01hdGgucG93KHJ0LDIpKSxHbj1xZS9tcixhaT0tcnQvbXJ9ZWxzZSBHbj0xLGFpPTA7aC5kPSJNICIrSnQrIiAiK3Zu''@;'; put 'put ''KyIgbSAiKyhFZT1DbipHbikrIiwiKyhCZT0tdG4qYWkpKyIgYSAiK0NuKyIsIit0bisiIDAgMSwwICIrKHFlPShwdD1DbiotR24pLUVlKSsiLCIrKHJ0PS10biotYWktQmUpKyIgYSAiK0NuKyIsIit0bisiIDAgMSwwICIrLXFlKyIsIistcnQrInoiLGRlbGV0ZSBoLmN4LGRlbGV0ZSBoLmN5''@;'; put 'put ''LGRlbGV0ZSBoLnJ4LGRlbGV0ZSBoLnJ5LGEuYXR0cmlidXRlcz1ofXJldHVybiBhfWZ1bmN0aW9uIFh4dCgpe3RyeXtyN2UubG9hZCgpLnRoZW4oYT0+e2EubGF5b3V0KCIiLCJzdmciLCJkb3QiKSx0aGlzLmxheW91dFN5bmM9YS5sYXlvdXQuYmluZChhKSxudWxsPT10aGlzLl93b3JrZXIm''@;'; put 'put ''JnRoaXMuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpLHRoaXMuX2FmdGVySW5pdCYmdGhpcy5fYWZ0ZXJJbml0KCl9KX1jYXRjaHt9aWYobnVsbCE9dGhpcy5fd29ya2VyKXt2YXIgYz10aGlzLl92aXpVUkwsbD10aGlzO3RoaXMuX3dvcmtlclBvcnQub25tZXNzYWdlPWZ1bmN0aW9u''@;'; put 'put ''KGEpe2wuX3dvcmtlckNhbGxiYWNrcy5zaGlmdCgpLmNhbGwobCxhKX0sYy5tYXRjaCgvXmh0dHBzPzpcL1wvfF5cL1wvL2kpfHwoYz1uZXcgd2luZG93LlVSTChjLGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmhyZWYpLEh0ZS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OiIiLGVuZ2lu''@;'; put 'put ''ZToiZG90Iix2aXpVUkw6Y30sZnVuY3Rpb24oYSl7fSksSHRlLmNhbGwodGhpcyx7dHlwZToidmVyc2lvbiJ9LGZ1bmN0aW9uKGEpeyJ2ZXJzaW9uIj09PWEuZGF0YS50eXBlJiYobC5fZ3JhcGh2aXpWZXJzaW9uPWEuZGF0YS52ZXJzaW9uLGwuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRo''@;'; put 'put ''aXMpKX0pfX1mdW5jdGlvbiBIdGUoYyxsKXt0aGlzLl93b3JrZXJDYWxsYmFja3MucHVzaChsKSx0aGlzLl93b3JrZXJQb3J0LnBvc3RNZXNzYWdlKGMpfWZ1bmN0aW9uIGVFdChjLGwpe3ZhciBhPXRoaXMuX29wdGlvbnMua2V5TW9kZSxkPXRoaXMuX29wdGlvbnMudHdlZW5QYXRocyxoPXRo''@;'; put 'put ''aXMuX29wdGlvbnMudHdlZW5TaGFwZXM7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uJiZ0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIikpdmFyIGY9K3RoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uc3BsaXQoIiUiKVsw''@;'; put 'put ''XS8xMDAsdj10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIik7ZWxzZSBmPXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24sdj0hMTt2YXIgTT10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzLEQ9e30sWj10aGlzLl9kaWN0aW9uYXJ5fHx7fSxyZT17fSxj''@;'; put 'put ''ZT10aGlzLl9ub2RlRGljdGlvbmFyeXx8e307ZnVuY3Rpb24gcHQoR24sYWk9MCxfaSl7KGZ1bmN0aW9uIGJlKEduLGFpKXt2YXIgX2k9R24udGFnO2lmKCJpbmRleCI9PWEpR24ua2V5PWFpO2Vsc2UgaWYoIiMiIT1faVswXSlpZigiaWQiPT1hKUduLmtleT1Hbi5hdHRyaWJ1dGVzLmlkO2Vs''@;'; put 'put ''c2UgaWYoInRpdGxlIj09YSl7dmFyIE9uPUduLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oenIpe3JldHVybiJ0aXRsZSI9PXpyLnRhZ30pO09uJiYoR24ua2V5PU9uLmNoaWxkcmVuLmxlbmd0aD4wP09uLmNoaWxkcmVuWzBdLnRleHQ6IiIpfW51bGw9PUduLmtleSYmKGgmJigiZWxsaXBzZSI9''@;'; put 'put ''PV9pfHwicG9seWdvbiI9PV9pKSYmKF9pPSJwYXRoIiksR24ua2V5PV9pKyItIithaSl9KShHbixhaSksZnVuY3Rpb24gRWUoR24sYWkpe0duLmlkPShhaT9haS5pZCsiLiI6IiIpK0duLmtleX0oR24sX2kpO3ZhciB6cj1aW0duLmlkXTsoZnVuY3Rpb24gQmUoR24pe0RbR24uaWRdPUdufSko''@;'; put 'put ''R24pLGZ1bmN0aW9uIHFlKEduLGFpKXtoJiZHbi5pZCBpbiBaJiYoInBvbHlnb24iPT1haS50YWd8fCJlbGxpcHNlIj09YWkudGFnfHwicGF0aCI9PWFpLnRhZykmJihhaS50YWchPUduLnRhZ3x8InBvbHlnb24iPT1Hbi50YWcpJiYoInBhdGgiIT1haS50YWcmJihHbi5hbHRlcm5hdGl2ZU9s''@;'; put 'put ''ZD1pN2UoYWksR24pKSwicGF0aCIhPUduLnRhZyYmKEduLmFsdGVybmF0aXZlTmV3PWk3ZShHbixhaSkpKX0oR24senIpLGZ1bmN0aW9uIHJ0KEduLGFpKXtpZihkJiZhaSYmKCJwYXRoIj09YWkudGFnfHxHbi5hbHRlcm5hdGl2ZU9sZCYmInBhdGgiPT1Hbi5hbHRlcm5hdGl2ZU9sZC50YWcp''@;'; put 'put ''KXt2YXIgX2k9KEduLmFsdGVybmF0aXZlTmV3fHxHbikuYXR0cmlidXRlcy5kO2lmKEduLmFsdGVybmF0aXZlT2xkKXZhciBPbj1rdGUoR24uYWx0ZXJuYXRpdmVPbGQpO2Vsc2UgT249a3RlKGFpKTsoR24uYWx0ZXJuYXRpdmVPbGR8fChHbi5hbHRlcm5hdGl2ZU9sZD17fSkpLnBvaW50cz1m''@;'; put 'put ''dW5jdGlvbiB2eHQoYyxsLGEsZCl7Y29uc3QgaD1jLGY9aC5jbG9uZU5vZGUoKSx2PWguZ2V0VG90YWxMZW5ndGgoKSxNPShmLnNldEF0dHJpYnV0ZSgiZCIsbCksZikuZ2V0VG90YWxMZW5ndGgoKSxEPVswXTtsZXQgWj0wO2NvbnN0IHJlPWQ/YTphL01hdGgubWF4KHYsTSk7Zm9yKDsoWis9''@;'; put 'put ''cmUpPDE7KUQucHVzaChaKTtyZXR1cm4gRC5wdXNoKDEpLEQubWFwKGZ1bmN0aW9uKGJlKXtjb25zdCBFZT1oLmdldFBvaW50QXRMZW5ndGgoYmUqdiksQmU9Zi5nZXRQb2ludEF0TGVuZ3RoKGJlKk0pO3JldHVybltbRWUueCxFZS55XSxbQmUueCxCZS55XV19KX0oT24sX2ksZix2KX19KEdu''@;'; put 'put ''LHpyKTt2YXIgSm49e307R24uY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihJcil7dmFyICRyPUlyLnRhZzsoImVsbGlwc2UiPT0kcnx8InBvbHlnb24iPT0kcikmJigkcj0icGF0aCIpLG51bGw9PUpuWyRyXSYmKEpuWyRyXT0wKSxwdChJcixKblskcl0rKyxHbil9KX1mdW5jdGlvbiB2bihH''@;'; put 'put ''bil7KGZ1bmN0aW9uIGR0KEduKXtpZihNJiZHbi5wYXJlbnQmJiJub2RlIj09R24ucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3MmJiJ0aXRsZSI9PUduLnRhZyl7aWYoR24uY2hpbGRyZW4ubGVuZ3RoPjApdmFyIE9uPUduLmNoaWxkcmVuWzBdLnRleHQ7ZWxzZSBPbj0iIjtyZVtPbl09R24ucGFy''@;'; put 'put ''ZW50fX0pKEduKSxmdW5jdGlvbiBKdChHbil7dmFyIF9pPUduLnRhZztpZihNJiYhWltHbi5pZF0mJkduLnBhcmVudCYmUThlKEduKSYmKCJwYXRoIj09X2l8fCJwb2x5Z29uIj09X2kpKXtpZigicG9seWdvbiI9PV9pKXt2YXIgenI9R24ucGFyZW50LmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24o''@;'; put 'put ''SHIpe3JldHVybiJwYXRoIj09SHIudGFnfSk7enImJihHbi50b3RhbExlbmd0aD16ci50b3RhbExlbmd0aCl9dmFyIEpuPWZ1bmN0aW9uIF94dChjKXtyZXR1cm4gZnVuY3Rpb24geXh0KGMpe3JldHVybiJlZGdlIj09Yy5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcz9jLnBhcmVudDpjLnBhcmVu''@;'; put 'put ''dC5wYXJlbnQucGFyZW50fShjKS5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKGwpe3JldHVybiJ0aXRsZSI9PWwudGFnfSl9KEduKSxJcj1Kbi5jaGlsZHJlblswXSwkcj1Jci50ZXh0LnNwbGl0KCItPiIpOzIhPSRyLmxlbmd0aCYmKCRyPUlyLnRleHQuc3BsaXQoIi0tIikpO3ZhciB3aT0kclsw''@;'; put 'put ''XSxlYT1yZVt3aV07aWYoT2JqZWN0Lmhhc093bihjZSx3aSkpe3ZhciBmYT1jZVt3aV07aWYoKE50PWVhLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihIcixxcil7cmV0dXJuImciPT1Ici50YWd9KSk+PTApe3ZhciB2dD1lYS5jaGlsZHJlbltOdF0uY2hpbGRyZW4uZmluZEluZGV4KGZ1''@;'; put 'put ''bmN0aW9uKEhyLHFyKXtyZXR1cm4iYSI9PUhyLnRhZ30pO2VhPWVhLmNoaWxkcmVuW050XS5jaGlsZHJlblt2dF19KE50PWZhLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihIcixxcil7cmV0dXJuImciPT1Ici50YWd9KSk+PTAmJih2dD1mYS5jaGlsZHJlbltOdF0uY2hpbGRyZW4uZmlu''@;'; put 'put ''ZEluZGV4KGZ1bmN0aW9uKHFyLG9uKXtyZXR1cm4iYSI9PXFyLnRhZ30pLGZhPWZhLmNoaWxkcmVuW050XS5jaGlsZHJlblt2dF0pO2Zvcih2YXIgSHQ9ZWEuY2hpbGRyZW4sTnQ9MDtOdDxIdC5sZW5ndGg7TnQrKylpZigicG9seWdvbiI9PUh0W050XS50YWd8fCJlbGxpcHNlIj09SHRbTnRd''@;'; put 'put ''LnRhZ3x8InBhdGgiPT1IdFtOdF0udGFnfHwidGV4dCI9PUh0W050XS50YWcpe3ZhciBIbj1IdFtOdF07YnJlYWt9dmFyIHRyPWZhLmNoaWxkcmVuO2ZvcihOdD0wO050PHRyLmxlbmd0aDtOdCsrKWlmKCJwb2x5Z29uIj09dHJbTnRdLnRhZ3x8ImVsbGlwc2UiPT10cltOdF0udGFnfHwicGF0''@;'; put 'put ''aCI9PXRyW050XS50YWd8fCJ0ZXh0Ij09dHJbTnRdLnRhZyl7dmFyIGFyPXRyW050XTticmVha31Hbi5vZmZzZXQ9YXImJkhuP3t4OmFyLmNlbnRlci54LUhuLmNlbnRlci54LHk6YXIuY2VudGVyLnktSG4uY2VudGVyLnl9Ont4OjAseTowfX19fShHbiksR24uY2hpbGRyZW4uZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihhaSl7dm4oYWkpfSl9dGhpcy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0RW5kIix0aGlzKTt2YXIgQ249d3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoImRpdiIpLE1uPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGMsImlt''@;'; put 'put ''YWdlL3N2Zyt4bWwiKTtDbi5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gTW4uZG9jdW1lbnRFbGVtZW50fSk7dmFyIEdyPW52KENuLnNlbGVjdCgic3ZnIikpO3RoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFFeHRyYWN0RW5kIix0aGlzKSxwdChHciksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0''@;'; put 'put ''YVByb2Nlc3NQYXNzMUVuZCIsdGhpcyksdm4oR3IpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczJFbmQiLHRoaXMpLHRoaXMuX2RhdGE9R3IsdGhpcy5fZGljdGlvbmFyeT1ELHRoaXMuX25vZGVEaWN0aW9uYXJ5PXJlLHRoaXMuX2V4dHJhY3REYXRhPWZ1bmN0aW9uKEdu''@;'; put 'put ''LGFpLF9pKXt2YXIgT249bnYoR24pO3JldHVybiBwdChPbixhaSxfaSksdm4oT24pLE9ufSx0aGlzLl9idXN5PSExLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzRW5kIix0aGlzKSxsJiZsLmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVuZ3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0''@;'; put 'put ''KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBITihjLGwpe2lmKChhPShjPWw/Yy50b0V4cG9uZW50aWFsKGwtMSk6Yy50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgYSxkPWMuc2xpY2UoMCxhKTtyZXR1cm5bZC5sZW5ndGg+MT9kWzBdK2Quc2xpY2UoMik6''@;'; put 'put ''ZCwrYy5zbGljZShhKzEpXX12YXIgYTdlLHhFdD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBOdGUoYyl7aWYoIShsPXhFdC5leGVjKGMpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQg''@;'; put 'put ''Zm9ybWF0OiAiK2MpO3ZhciBsO3JldHVybiBuZXcgVnRlKHtmaWxsOmxbMV0sYWxpZ246bFsyXSxzaWduOmxbM10sc3ltYm9sOmxbNF0semVybzpsWzVdLHdpZHRoOmxbNl0sY29tbWE6bFs3XSxwcmVjaXNpb246bFs4XSYmbFs4XS5zbGljZSgxKSx0cmltOmxbOV0sdHlwZTpsWzEwXX0pfWZ1''@;'; put 'put ''bmN0aW9uIFZ0ZShjKXt0aGlzLmZpbGw9dm9pZCAwPT09Yy5maWxsPyIgIjpjLmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT1jLmFsaWduPyI+IjpjLmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT1jLnNpZ24/Ii0iOmMuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT1jLnN5bWJv''@;'; put 'put ''bD8iIjpjLnN5bWJvbCsiIix0aGlzLnplcm89ISFjLnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT1jLndpZHRoP3ZvaWQgMDorYy53aWR0aCx0aGlzLmNvbW1hPSEhYy5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1jLnByZWNpc2lvbj92b2lkIDA6K2MucHJlY2lzaW9uLHRoaXMudHJp''@;'; put 'put ''bT0hIWMudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09Yy50eXBlPyIiOmMudHlwZSsiIn1mdW5jdGlvbiBvN2UoYyxsKXt2YXIgYT1ITihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdO3JldHVybiBoPDA/IjAuIituZXcgQXJyYXkoLWgpLmpvaW4oIjAiKStkOmQubGVu''@;'; put 'put ''Z3RoPmgrMT9kLnNsaWNlKDAsaCsxKSsiLiIrZC5zbGljZShoKzEpOmQrbmV3IEFycmF5KGgtZC5sZW5ndGgrMikuam9pbigiMCIpfU50ZS5wcm90b3R5cGU9VnRlLnByb3RvdHlwZSxWdGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWdu''@;'; put 'put ''K3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJl''@;'; put 'put ''Y2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29uc3QgczdlPXsiJSI6KGMsbCk9PigxMDAqYykudG9GaXhlZChsKSxiOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMiksYzpjPT5jKyIiLGQ6ZnVuY3Rpb24gd0V0KGMpe3JldHVybiBNYXRoLmFicyhjPU1hdGgucm91''@;'; put 'put ''bmQoYykpPj0xZTIxP2MudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpjLnRvU3RyaW5nKDEwKX0sZTooYyxsKT0+Yy50b0V4cG9uZW50aWFsKGwpLGY6KGMsbCk9PmMudG9GaXhlZChsKSxnOihjLGwpPT5jLnRvUHJlY2lzaW9uKGwpLG86Yz0+TWF0aC5yb3VuZChjKS50''@;'; put 'put ''b1N0cmluZyg4KSxwOihjLGwpPT5vN2UoMTAwKmMsbCkscjpvN2UsczpmdW5jdGlvbiBURXQoYyxsKXt2YXIgYT1ITihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdLGY9aC0oYTdlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGgvMykpKSkrMSx2''@;'; put 'put ''PWQubGVuZ3RoO3JldHVybiBmPT09dj9kOmY+dj9kK25ldyBBcnJheShmLXYrMSkuam9pbigiMCIpOmY+MD9kLnNsaWNlKDAsZikrIi4iK2Quc2xpY2UoZik6IjAuIituZXcgQXJyYXkoMS1mKS5qb2luKCIwIikrSE4oYyxNYXRoLm1heCgwLGwrZi0xKSlbMF19LFg6Yz0+TWF0aC5yb3VuZChj''@;'; put 'put ''KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBsN2UoYyl7cmV0dXJuIGN9dmFyIE5OLGFmLGM3ZT1BcnJheS5wcm90b3R5cGUubWFwLHU3ZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwi''@;'; put 'put ''ayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTshZnVuY3Rpb24gREV0KGMpe05OPWZ1bmN0aW9uIEFFdChjKXt2YXIgbD12b2lkIDA9PT1jLmdyb3VwaW5nfHx2b2lkIDA9PT1jLnRob3VzYW5kcz9sN2U6ZnVuY3Rpb24gU0V0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Zm9yKHZh''@;'; put 'put ''ciBoPWEubGVuZ3RoLGY9W10sdj0wLE09Y1swXSxEPTA7aD4wJiZNPjAmJihEK00rMT5kJiYoTT1NYXRoLm1heCgxLGQtRCkpLGYucHVzaChhLnN1YnN0cmluZyhoLT1NLGgrTSkpLCEoKEQrPU0rMSk+ZCkpOylNPWNbdj0odisxKSVjLmxlbmd0aF07cmV0dXJuIGYucmV2ZXJzZSgpLmpvaW4o''@;'; put 'put ''bCl9fShjN2UuY2FsbChjLmdyb3VwaW5nLE51bWJlciksYy50aG91c2FuZHMrIiIpLGE9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzBdKyIiLGQ9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzFdKyIiLGg9dm9pZCAwPT09Yy5kZWNpbWFsPyIuIjpjLmRlY2lt''@;'; put 'put ''YWwrIiIsZj12b2lkIDA9PT1jLm51bWVyYWxzP2w3ZTpmdW5jdGlvbiBNRXQoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBsLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbK2FdfSl9fShjN2UuY2FsbChjLm51bWVyYWxzLFN0cmluZykpLHY9dm9pZCAwPT09Yy5w''@;'; put 'put ''ZXJjZW50PyIlIjpjLnBlcmNlbnQrIiIsTT12b2lkIDA9PT1jLm1pbnVzPyJcdTIyMTIiOmMubWludXMrIiIsRD12b2lkIDA9PT1jLm5hbj8iTmFOIjpjLm5hbisiIjtmdW5jdGlvbiBaKGNlKXt2YXIgYmU9KGNlPU50ZShjZSkpLmZpbGwsRWU9Y2UuYWxpZ24sQmU9Y2Uuc2lnbixxZT1jZS5z''@;'; put 'put ''eW1ib2wscnQ9Y2UuemVybyxwdD1jZS53aWR0aCxkdD1jZS5jb21tYSxKdD1jZS5wcmVjaXNpb24sdm49Y2UudHJpbSxDbj1jZS50eXBlOyJuIj09PUNuPyhkdD0hMCxDbj0iZyIpOnM3ZVtDbl18fCh2b2lkIDA9PT1KdCYmKEp0PTEyKSx2bj0hMCxDbj0iZyIpLChydHx8IjAiPT09YmUmJiI9''@;'; put 'put ''Ij09PUVlKSYmKHJ0PSEwLGJlPSIwIixFZT0iPSIpO3ZhciB0bj0iJCI9PT1xZT9hOiIjIj09PXFlJiYvW2JveFhdLy50ZXN0KENuKT8iMCIrQ24udG9Mb3dlckNhc2UoKToiIixNbj0iJCI9PT1xZT9kOi9bJXBdLy50ZXN0KENuKT92OiIiLENyPXM3ZVtDbl0sR3I9L1tkZWZncHJzJV0vLnRl''@;'; put 'put ''c3QoQ24pO2Z1bmN0aW9uIG1yKEduKXt2YXIgT24senIsSm4sYWk9dG4sX2k9TW47aWYoImMiPT09Q24pX2k9Q3IoR24pK19pLEduPSIiO2Vsc2V7dmFyIElyPShHbj0rR24pPDB8fDEvR248MDtpZihHbj1pc05hTihHbik/RDpDcihNYXRoLmFicyhHbiksSnQpLHZuJiYoR249ZnVuY3Rpb24g''@;'; put 'put ''RUV0KGMpe2U6Zm9yKHZhciBoLGw9Yy5sZW5ndGgsYT0xLGQ9LTE7YTxsOysrYSlzd2l0Y2goY1thXSl7Y2FzZSIuIjpkPWg9YTticmVhaztjYXNlIjAiOjA9PT1kJiYoZD1hKSxoPWE7YnJlYWs7ZGVmYXVsdDppZighK2NbYV0pYnJlYWsgZTtkPjAmJihkPTApfXJldHVybiBkPjA/Yy5zbGlj''@;'; put 'put ''ZSgwLGQpK2Muc2xpY2UoaCsxKTpjfShHbikpLElyJiYwPT0rR24mJiIrIiE9PUJlJiYoSXI9ITEpLGFpPShJcj8iKCI9PT1CZT9CZTpNOiItIj09PUJlfHwiKCI9PT1CZT8iIjpCZSkrYWksX2k9KCJzIj09PUNuP3U3ZVs4K2E3ZS8zXToiIikrX2krKElyJiYiKCI9PT1CZT8iKSI6IiIpLEdy''@;'; put 'put ''KWZvcihPbj0tMSx6cj1Hbi5sZW5ndGg7KytPbjx6cjspaWYoNDg+KEpuPUduLmNoYXJDb2RlQXQoT24pKXx8Sm4+NTcpe19pPSg0Nj09PUpuP2grR24uc2xpY2UoT24rMSk6R24uc2xpY2UoT24pKStfaSxHbj1Hbi5zbGljZSgwLE9uKTticmVha319ZHQmJiFydCYmKEduPWwoR24sMS8wKSk7''@;'; put 'put ''dmFyICRyPWFpLmxlbmd0aCtHbi5sZW5ndGgrX2kubGVuZ3RoLHdpPSRyPHB0P25ldyBBcnJheShwdC0kcisxKS5qb2luKGJlKToiIjtzd2l0Y2goZHQmJnJ0JiYoR249bCh3aStHbix3aS5sZW5ndGg/cHQtX2kubGVuZ3RoOjEvMCksd2k9IiIpLEVlKXtjYXNlIjwiOkduPWFpK0duK19pK3dp''@;'; put 'put ''O2JyZWFrO2Nhc2UiPSI6R249YWkrd2krR24rX2k7YnJlYWs7Y2FzZSJeIjpHbj13aS5zbGljZSgwLCRyPXdpLmxlbmd0aD4+MSkrYWkrR24rX2krd2kuc2xpY2UoJHIpO2JyZWFrO2RlZmF1bHQ6R249d2krYWkrR24rX2l9cmV0dXJuIGYoR24pfXJldHVybiBKdD12b2lkIDA9PT1KdD82Oi9b''@;'; put 'put ''Z3Byc10vLnRlc3QoQ24pP01hdGgubWF4KDEsTWF0aC5taW4oMjEsSnQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLEp0KSksbXIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY2UrIiJ9LG1yfXJldHVybntmb3JtYXQ6Wixmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gcmUoY2UsYmUpe3ZhciBF''@;'; put 'put ''ZT1aKCgoY2U9TnRlKGNlKSkudHlwZT0iZiIsY2UpKSxCZT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihmdW5jdGlvbiBDRXQoYyl7cmV0dXJuKGM9SE4oTWF0aC5hYnMoYykpKT9jWzFdOk5hTn0oYmUpLzMpKSkscWU9TWF0aC5wb3coMTAsLUJlKSxydD11N2VbOCtCZS8z''@;'; put 'put ''XTtyZXR1cm4gZnVuY3Rpb24ocHQpe3JldHVybiBFZShxZSpwdCkrcnR9fX19KGMpLGFmPU5OLmZvcm1hdH0oe3Rob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7Y29uc3QgQnRlPU1hdGguUEksanRlPTIqQnRlLGl2PTFlLTYsTEV0PWp0ZS1pdjtmdW5jdGlv''@;'; put 'put ''biBkN2UoYyl7dGhpcy5fKz1jWzBdO2ZvcihsZXQgbD0xLGE9Yy5sZW5ndGg7bDxhOysrbCl0aGlzLl8rPWFyZ3VtZW50c1tsXStjW2xdfWNsYXNzIHp0ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBl''@;'; put 'put ''bmQ9bnVsbD09bD9kN2U6ZnVuY3Rpb24gT0V0KGMpe2xldCBsPU1hdGguZmxvb3IoYyk7aWYoIShsPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2N9YCk7aWYobD4xNSlyZXR1cm4gZDdlO2NvbnN0IGE9MTAqKmw7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFsw''@;'; put 'put ''XTtmb3IobGV0IGg9MSxmPWQubGVuZ3RoO2g8ZjsrK2gpdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1toXSphKS9hK2RbaF19fShsKX1tb3ZlVG8obCxhKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9YH1jbG9zZVBhdGgo''@;'; put 'put ''KXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rbH0sJHt0aGlzLl95MT0rYX1gfXF1YWRyYXRpY0N1cnZlVG8obCxhLGQsaCl7dGhpcy5fYXBw''@;'; put 'put ''ZW5kYFEkeytsfSwkeythfSwke3RoaXMuX3gxPStkfSwke3RoaXMuX3kxPStofWB9YmV6aWVyQ3VydmVUbyhsLGEsZCxoLGYsdil7dGhpcy5fYXBwZW5kYEMkeytsfSwkeythfSwkeytkfSwkeytofSwke3RoaXMuX3gxPStmfSwke3RoaXMuX3kxPSt2fWB9YXJjVG8obCxhLGQsaCxmKXtpZihs''@;'; put 'put ''PStsLGE9K2EsZD0rZCxoPStoLChmPStmKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2Z9YCk7bGV0IHY9dGhpcy5feDEsTT10aGlzLl95MSxEPWQtbCxaPWgtYSxyZT12LWwsY2U9TS1hLGJlPXJlKnJlK2NlKmNlO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl9hcHBl''@;'; put 'put ''bmRgTSR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWA7ZWxzZSBpZihiZT5pdilpZihNYXRoLmFicyhjZSpELVoqcmUpPml2JiZmKXtsZXQgRWU9ZC12LEJlPWgtTSxxZT1EKkQrWipaLHJ0PUVlKkVlK0JlKkJlLHB0PU1hdGguc3FydChxZSksZHQ9TWF0aC5zcXJ0KGJlKSxKdD1mKk1hdGgu''@;'; put 'put ''dGFuKChCdGUtTWF0aC5hY29zKChxZStiZS1ydCkvKDIqcHQqZHQpKSkvMiksdm49SnQvZHQsQ249SnQvcHQ7TWF0aC5hYnModm4tMSk+aXYmJnRoaXMuX2FwcGVuZGBMJHtsK3ZuKnJlfSwke2Erdm4qY2V9YCx0aGlzLl9hcHBlbmRgQSR7Zn0sJHtmfSwwLDAsJHsrKGNlKkVlPnJlKkJlKX0s''@;'; put 'put ''JHt0aGlzLl94MT1sK0NuKkR9LCR7dGhpcy5feTE9YStDbipafWB9ZWxzZSB0aGlzLl9hcHBlbmRgTCR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWB9YXJjKGwsYSxkLGgsZix2KXtpZihsPStsLGE9K2Esdj0hIXYsKGQ9K2QpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6''@;'; put 'put ''ICR7ZH1gKTtsZXQgTT1kKk1hdGguY29zKGgpLEQ9ZCpNYXRoLnNpbihoKSxaPWwrTSxyZT1hK0QsY2U9MV52LGJlPXY/aC1mOmYtaDtudWxsPT09dGhpcy5feDE/dGhpcy5fYXBwZW5kYE0ke1p9LCR7cmV9YDooTWF0aC5hYnModGhpcy5feDEtWik+aXZ8fE1hdGguYWJzKHRoaXMuX3kxLXJl''@;'; put 'put ''KT5pdikmJnRoaXMuX2FwcGVuZGBMJHtafSwke3JlfWAsZCYmKGJlPDAmJihiZT1iZSVqdGUranRlKSxiZT5MRXQ/dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwxLCR7Y2V9LCR7bC1NfSwke2EtRH1BJHtkfSwke2R9LDAsMSwke2NlfSwke3RoaXMuX3gxPVp9LCR7dGhpcy5feTE9cmV9YDpi''@;'; put 'put ''ZT5pdiYmdGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwkeysoYmU+PUJ0ZSl9LCR7Y2V9LCR7dGhpcy5feDE9bCtkKk1hdGguY29zKGYpfSwke3RoaXMuX3kxPWErZCpNYXRoLnNpbihmKX1gKX1yZWN0KGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0''@;'; put 'put ''aGlzLl95MD10aGlzLl95MT0rYX1oJHtkPStkfXYkeytofWgkey1kfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319ZnVuY3Rpb24gaDdlKCl7cmV0dXJuIG5ldyB6dGV9ZnVuY3Rpb24gUEV0KGMsbCxhLGQpe3JldHVybiBsPS1sLGQ9LWQsW2MsbF09W2MqYS1sKmQsYypkK2wqYV0sW2Ms''@;'; put 'put ''bD0tbF19ZnVuY3Rpb24gZjdlKGMsbCxhLGQsaCxmLHYpe3ZhciBEPW52KHY3ZS5jYWxsKHRoaXMsZikpO2MuZGF0YShbRF0pLE9BLmNhbGwoYy5ub2RlKCksRCkscDdlKGMsbCxhLGQsaCxmLHYpfWZ1bmN0aW9uIHA3ZShjLGwsYSxkLGgsZix2KXt2YXIgTT12LnNob3J0ZW5pbmd8fDAsY2U9''@;'; put 'put ''W1swLC0zLjVdLFsxMCwwXSxbMCwzLjVdLFswLC0zLjVdXSxiZT1kLWwsRWU9aC1hLEJlPU1hdGguc3FydChiZSpiZStFZSpFZSk7aWYoMD09QmUpdmFyIHFlPTEscnQ9MDtlbHNlIHFlPWJlL0JlLHJ0PUVlL0JlO2lmKGQ9bCsoQmUtTS0xMC0uMSkqcWUsaD1hKyhCZS1NLTEwLS4xKSpydCxm''@;'; put 'put ''LlVSTHx8Zi50b29sdGlwKXZhciBwdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIiksZHQ9cHQuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLEp0PXB0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFn''@;'; put 'put ''YXRpb24oInBvbHlnb24iKTtlbHNlIGR0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLEp0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO3ZhciB2bj1oN2UoKTt2bi5tb3ZlVG8obCxhKSx2bi5saW5lVG8oZCxoKSxkdC5hdHRyKCJkIix2''@;'; put 'put ''biksZD1sKyhCZS1NLTEwKSpxZSxoPWErKEJlLU0tMTApKnJ0O2Zvcih2YXIgQ249MDtDbjxjZS5sZW5ndGg7Q24rKyljZVtDbl09UEV0KCh0bj1jZVtDbl0pWzBdLHRuWzFdLHFlLHJ0KTtmb3IoQ249MDtDbjxjZS5sZW5ndGg7Q24rKyljZVtDbl09W2QrKHRuPWNlW0NuXSlbMF0saCt0blsx''@;'; put 'put ''XV07dmFyIE1uPVtdO2ZvcihDbj0wO0NuPGNlLmxlbmd0aDtDbisrKXt2YXIgdG47TW4ucHVzaCgodG49Y2VbQ25dKS5qb2luKCIsIikpfXZhciBDcj1Nbi5qb2luKCIgIik7cmV0dXJuIEp0LmF0dHIoInBvaW50cyIsQ3IpLHRoaXN9ZnVuY3Rpb24gZzdlKCl7cmV0dXJuIHRoaXMuX2RyYXdu''@;'; put 'put ''RWRnZT8odGhpcy5fZHJhd25FZGdlLmcucmVtb3ZlKCksdGhpcy5fZHJhd25FZGdlPW51bGwsdGhpcyk6dGhpc31mdW5jdGlvbiBtN2UoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlP3RoaXMuX2RyYXduRWRnZS5nOndzKG51bGwpfWZ1bmN0aW9uIHY3ZShjKXt2YXIgbD0iIjtmb3IodmFyIGEg''@;'; put 'put ''b2YgT2JqZWN0LmtleXMoYykpbnVsbCE9Y1thXSYmKGwrPScgIicrYSsnIj0iJytjW2FdKyciJyk7dmFyIGg9dGhpcy5sYXlvdXRTeW5jKCJkaWdyYXBoIHthIC0+IGIgWyIrbCsiXX0iLCJzdmciLCJkb3QiKSx2PShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGgsImlt''@;'; put 'put ''YWdlL3N2Zyt4bWwiKTtyZXR1cm4gd3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gdi5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5lZGdlIil9ZnVuY3Rpb24gYjdlKGMsbCxhLGQsaCxmKXt2YXIgTT1udihDN2UuY2FsbCh0''@;'; put 'put ''aGlzLGQsaCkpO3JldHVybiBjLmRhdGEoW01dKSxPQS5jYWxsKGMubm9kZSgpLE0pLHk3ZShjLGwsYSxoKSx0aGlzfWZ1bmN0aW9uIHk3ZShjLGwsYSxkLGgpe2lmKGQuVVJMfHxkLnRvb2x0aXApdmFyIGY9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91''@;'; put 'put ''dERhdGFQcm9wYWdhdGlvbigiYSIpO2Vsc2UgZj1jO3ZhciB2PWYuc2VsZWN0QWxsKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLE09Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7aWYoMCE9di5zaXplKCkpe3ZhciBEPXYubm9kZSgpLmdldEJCb3goKTtE''@;'; put 'put ''LmN4PUQueCtELndpZHRoLzIsRC5jeT1ELnkrRC5oZWlnaHQvMn1lbHNlIDAhPU0uc2l6ZSgpJiYoRD17eDorTS5hdHRyKCJ4IikseTorTS5hdHRyKCJ5Iiksd2lkdGg6MCxoZWlnaHQ6MCxjeDorTS5hdHRyKCJ4IiksY3k6K00uYXR0cigieSIpfSk7cmV0dXJuIHYuZWFjaChmdW5jdGlvbiha''@;'; put 'put ''LHJlKXt2YXIgY2U9d3ModGhpcyk7aWYoY2UuYXR0cigiY3giKSljZS5hdHRyKCJjeCIsTTYobCkpLmF0dHIoImN5IixNNihhKSk7ZWxzZSBpZihjZS5hdHRyKCJwb2ludHMiKSl7dmFyIGJlPWNlLmF0dHIoInBvaW50cyIpLnRyaW0oKTtjZS5hdHRyKCJwb2ludHMiLGZ1bmN0aW9uIEt4dChm''@;'; put 'put ''LGwsYSl7dmFyIGgsZD0oaD1mLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5zcGxpdCgiLCIpfSk7cmV0dXJuIGQ9aC5tYXAoZnVuY3Rpb24odil7cmV0dXJuW002KCtsKyArdi5zcGxpdCgiLCIpWzBdKSxNNigrYSsgK3Yuc3BsaXQoIiwiKVsxXSldfSksKGg9ZC5tYXAo''@;'; put 'put ''ZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpLmpvaW4oIiAiKX0oYmUsbC1ELmN4LGEtRC5jeSkpfWVsc2V7dmFyIEVlPWNlLmF0dHIoImQiKTtjZS5hdHRyKCJkIixmdW5jdGlvbiBxeHQoYyxsLGEpeyhmPWMuc3BsaXQoL1tBLVogXS8pKS5zaGlmdCgpO3ZhciBkPWMuc3BsaXQo''@;'; put 'put ''L1teW0EtWiBdKy8pLGY9KGYubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LnNwbGl0KCIsIil9KSxmLm1hcChmdW5jdGlvbih2KXtyZXR1cm5bTTYoK2wrICt2LnNwbGl0KCIsIilbMF0pLE02KCthKyArdi5zcGxpdCgiLCIpWzFdKV19KS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigi''@;'; put 'put ''LCIpfSkpO3JldHVybiBkLnJlZHVjZShmdW5jdGlvbih2LE0sRCl7cmV0dXJuIHYuY29uY2F0KE0sZltEXSl9LFtdKS5qb2luKCIiKX0oRWUsbC1ELmN4LGEtRC5jeSkpfX0pLDAhPU0uc2l6ZSgpJiZNLmF0dHIoIngiLE02KCtNLmF0dHIoIngiKStsLUQuY3gpKS5hdHRyKCJ5IixNNigrTS5h''@;'; put 'put ''dHRyKCJ5IikrYS1ELmN5KSksdGhpc31mdW5jdGlvbiBfN2UoKXtpZighdGhpcy5fZHJhd25Ob2RlKXJldHVybiB0aGlzO3ZhciBjPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBjLmVtcHR5KCl8fGMucmVtb3ZlKCksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc31mdW5jdGlvbiB3N2UoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fZHJhd25Ob2RlP3RoaXMuX2RyYXduTm9kZS5nOndzKG51bGwpfWZ1bmN0aW9uIEM3ZShjLGwpe3ZhciBhPSIiO2Zvcih2YXIgZCBvZiBPYmplY3Qua2V5cyhsKSludWxsIT1sW2RdJiYoYSs9JyAiJytkKyciPSInK2xbZF0rJyInKTt2YXIgZj10aGlzLmxheW91dFN5bmMo''@;'; put 'put ''J2dyYXBoIHsiJytjKyciIFsnK2ErIl19Iiwic3ZnIiwiZG90IiksTT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhmLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIHdzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIE0uZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIubm9kZSIpfWZ1bmN0aW9uIFZOKGMpe3NlbGYuZG9jdW1lbnQ9e30sYy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihsKXtsZXQgYT1zZWxmWyJAaHBjYy1qcy93YXNtIl07bnVsbD09YSYmbC5kYXRhLnZpelVSTCYm''@;'; put 'put ''KGltcG9ydFNjcmlwdHMobC5kYXRhLnZpelVSTCksYT1zZWxmWyJAaHBjYy1qcy93YXNtIl0pLCJ2ZXJzaW9uIiE9bC5kYXRhLnR5cGU/YS5HcmFwaHZpei5sb2FkKCkudGhlbihkPT57Y29uc3QgaD1kLmxheW91dChsLmRhdGEuZG90LCJzdmciLGwuZGF0YS5lbmdpbmUsbC5kYXRhLm9wdGlv''@;'; put 'put ''bnMpO2MucG9zdE1lc3NhZ2UoaD97dHlwZToiZG9uZSIsc3ZnOmh9OmwuZGF0YS52aXpVUkw/e3R5cGU6ImluaXQifTp7dHlwZToic2tpcCJ9KX0pLmNhdGNoKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJlcnJvciIsZXJyb3I6ZC5tZXNzYWdlfSl9KTphLkdyYXBodml6LmxvYWQoKS50aGVu''@;'; put 'put ''KGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJ2ZXJzaW9uIix2ZXJzaW9uOmQudmVyc2lvbigpfSl9KX0pfWZ1bmN0aW9uIFpFdCgpe1ZOKHNlbGYpfWZ1bmN0aW9uIFdFdCgpe3NlbGYub25jb25uZWN0PWZ1bmN0aW9uKGMpe2NvbnN0IGw9Yy5wb3J0c1swXTtWTihsKSxsLnN0YXJ0KCl9fWZ1''@;'; put 'put ''bmN0aW9uIFV0ZShjLGwpe2lmKHRoaXMuX29wdGlvbnM9e3VzZVdvcmtlcjohMCx1c2VTaGFyZWRXb3JrZXI6ITEsZW5naW5lOiJkb3QiLGtleU1vZGU6InRpdGxlIixmYWRlOiEwLHR3ZWVuUGF0aHM6ITAsdHdlZW5TaGFwZXM6ITAsY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczohMCx0d2Vl''@;'; put 'put ''blByZWNpc2lvbjoxLGdyb3dFbnRlcmluZ0VkZ2VzOiEwLHpvb206ITAsem9vbVNjYWxlRXh0ZW50OlsuMSwxMF0sem9vbVRyYW5zbGF0ZUV4dGVudDpbWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx3aWR0aDpudWxsLGhlaWdodDpudWxsLHNjYWxlOjEsZml0OiExfSxsIGluc3RhbmNlb2YgT2Jq''@;'; put 'put ''ZWN0KWZvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhsKSl0aGlzLl9vcHRpb25zW2FdPWxbYV07ZWxzZSJib29sZWFuIj09dHlwZW9mIGwmJih0aGlzLl9vcHRpb25zLnVzZVdvcmtlcj1sKTt2YXIgZD10aGlzLl9vcHRpb25zLnVzZVdvcmtlcixoPXRoaXMuX29wdGlvbnMudXNlU2hhcmVkV29y''@;'; put 'put ''a2VyO2lmKHR5cGVvZiBXb3JrZXI+InUiJiYoZD0hMSksdHlwZW9mIFNoYXJlZFdvcmtlcj4idSImJihoPSExKSxkfHxoKXt2YXIgdj1jdGUoInNjcmlwdCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0L3dvcmtlciI9PXdzKHRoaXMpLmF0dHIoInR5cGUiKXx8d3ModGhp''@;'; put 'put ''cykuYXR0cigic3JjIikmJndzKHRoaXMpLmF0dHIoInNyYyIpLm1hdGNoKC8uKlwvQGhwY2MtanNcL3dhc20vKX0pOzA9PXYuc2l6ZSgpPyhjb25zb2xlLndhcm4oJ05vIHNjcmlwdCB0YWcgb2YgdHlwZSAiamF2YXNjcmlwdC93b3JrZXIiIHdhcyBmb3VuZCBhbmQgInVzZVdvcmtlciIgaXMg''@;'; put 'put ''dHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0hMSxoPSExKToodGhpcy5fdml6VVJMPXYuYXR0cigic3JjIiksdGhpcy5fdml6VVJMfHwoY29uc29sZS53YXJuKCdObyAic3JjIiBhdHRyaWJ1dGUgb2Ygd2FzIGZvdW5kIG9uIHRoZSAiamF2YXNjcmlwdC93b3JrZXIiIHNjcmlwdCB0''@;'; put 'put ''YWcgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicpLGQ9ITEsaD0hMSkpfWlmKGgpe2NvbnN0IFo9ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsIitidG9hKFZOLnRvU3RyaW5nKCkrIigiK1dFdC50b1N0cmluZygpKyIpKCkiKTt0aGlz''@;'; put 'put ''Ll93b3JrZXI9dGhpcy5fd29ya2VyPW5ldyBTaGFyZWRXb3JrZXIoWiksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIucG9ydCx0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnBvcnQuY2xvc2UuYmluZCh0aGlzLl93b3JrZXJQb3J0KSx0aGlzLl93b3JrZXIucG9ydC5z''@;'; put 'put ''dGFydCgpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIGlmKGQpe3ZhciBNPW5ldyBCbG9iKFtWTi50b1N0cmluZygpKyIoIitaRXQudG9TdHJpbmcoKSsiKSgpIl0pLEQ9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoTSk7dGhpcy5fd29ya2VyPW5ldyBXb3JrZXIoRCksdGhpcy5f''@;'; put 'put ''d29ya2VyUG9ydD10aGlzLl93b3JrZXIsdGhpcy5fd29ya2VyUG9ydENsb3NlPXRoaXMuX3dvcmtlci50ZXJtaW5hdGUuYmluZCh0aGlzLl93b3JrZXIpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIHI3ZS5sb2FkKCkudGhlbigoWj0+e3RoaXMuX2dyYXBodml6VmVyc2lvbj1aLnZl''@;'; put 'put ''cnNpb24oKX0pLmJpbmQodGhpcykpO3RoaXMuX3NlbGVjdGlvbj1jLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9idXN5PSExLHRoaXMuX2pvYnM9W10sdGhpcy5fcXVldWU9W10sdGhpcy5fa2V5TW9kZXM9bmV3IFNldChbInRpdGxlIiwiaWQiLCJ0YWctaW5kZXgiLCJpbmRleCJdKSx0aGlzLl9p''@;'; put 'put ''bWFnZXM9W10sdGhpcy5fdHJhbnNsYXRpb249dm9pZCAwLHRoaXMuX3NjYWxlPXZvaWQgMCx0aGlzLl9ldmVudFR5cGVzPVsiaW5pdEVuZCIsInN0YXJ0IiwibGF5b3V0U3RhcnQiLCJsYXlvdXRFbmQiLCJkYXRhRXh0cmFjdEVuZCIsImRhdGFQcm9jZXNzUGFzczFFbmQiLCJkYXRhUHJvY2Vz''@;'; put 'put ''c1Bhc3MyRW5kIiwiZGF0YVByb2Nlc3NFbmQiLCJyZW5kZXJTdGFydCIsInJlbmRlckVuZCIsInRyYW5zaXRpb25TdGFydCIsInRyYW5zaXRpb25FbmQiLCJyZXN0b3JlRW5kIiwiZW5kIiwiem9vbSJdLHRoaXMuX2Rpc3BhdGNoPXV0ZSguLi50aGlzLl9ldmVudFR5cGVzKSxYeHQuY2FsbCh0''@;'; put 'put ''aGlzKSxjLm5vZGUoKS5fX2dyYXBodml6X189dGhpc31mdW5jdGlvbiBCTihjLGwpe3JldHVybiB3cyhjKS5ncmFwaHZpeihsKX1oN2UucHJvdG90eXBlPXp0ZS5wcm90b3R5cGUsVXRlLnByb3RvdHlwZT1CTi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlV0ZSxlbmdpbmU6ZnVuY3Rpb24gdUV0''@;'; put 'put ''KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmVuZ2luZT1jLHRoaXN9LGFkZEltYWdlOmZ1bmN0aW9uIGRFdChjLGwsYSl7cmV0dXJuIHRoaXMuX2ltYWdlcy5wdXNoKHtwYXRoOmMsd2lkdGg6bCxoZWlnaHQ6YX0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rpb24gaEV0KGMpe2lmKCF0aGlzLl9rZXlN''@;'; put 'put ''b2Rlcy5oYXMoYykpdGhyb3cgRXJyb3IoIklsbGVnYWwga2V5TW9kZTogIitjKTtpZihjIT10aGlzLl9vcHRpb25zLmtleU1vZGUmJm51bGwhPXRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJuIHRoaXMuX29wdGlvbnMua2V5TW9kZT1j''@;'; put 'put ''LHRoaXN9LGZhZGU6ZnVuY3Rpb24gZkV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZhZGU9Yyx0aGlzfSx0d2VlblBhdGhzOmZ1bmN0aW9uIHBFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPWMsdGhpc30sdHdlZW5TaGFwZXM6ZnVuY3Rpb24gZ0V0KGMpe3JldHVybiB0''@;'; put 'put ''aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzPWMsYyYmKHRoaXMuX29wdGlvbnMudHdlZW5QYXRocz0hMCksdGhpc30sY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczpmdW5jdGlvbiBtRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucz1jLHRoaXN9LHR3''@;'; put 'put ''ZWVuUHJlY2lzaW9uOmZ1bmN0aW9uIHZFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbj1jLHRoaXN9LGdyb3dFbnRlcmluZ0VkZ2VzOmZ1bmN0aW9uIGJFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcz1jLHRoaXN9LHpvb206ZnVuY3Rp''@;'; put 'put ''b24gdXh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb209Yyx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3I/WDhlLmNhbGwodGhpcyk6IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5fem9vbVNlbGVjdGlvbi5vbigiLnpvb20i''@;'; put 'put ''LG51bGwpLHRoaXMuX3pvb21CZWhhdmlvcj1udWxsKSx0aGlzfSxyZXNldFpvb206ZnVuY3Rpb24gZHh0KGMpe3ZhciBsPXRoaXMuX3pvb21TZWxlY3Rpb247cmV0dXJuIGMmJihsPWwudHJhbnNpdGlvbihjKSksbC5jYWxsKHRoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0sdGhpcy5fb3Jp''@;'; put 'put ''Z2luYWxUcmFuc2Zvcm0pLHRoaXN9LHpvb21CZWhhdmlvcjpmdW5jdGlvbiBweHQoKXtyZXR1cm4gdGhpcy5fem9vbUJlaGF2aW9yfHxudWxsfSx6b29tU2VsZWN0aW9uOmZ1bmN0aW9uIGd4dCgpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxudWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVu''@;'; put 'put ''Y3Rpb24gaHh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21TY2FsZUV4dGVudD1jLHRoaXN9LHpvb21UcmFuc2xhdGVFeHRlbnQ6ZnVuY3Rpb24gZnh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9Yyx0aGlzfSxyZW5kZXI6ZnVuY3Rpb24gd3h0KGMp''@;'; put 'put ''e3JldHVybiB0aGlzLl9idXN5Pyh0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVuZGVyLmJpbmQodGhpcyxjKSksdGhpcyk6KHRoaXMuX2Rpc3BhdGNoLmNhbGwoInJlbmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT9iTihmdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb249''@;'; put 'put ''TXRlKHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5KCkpLGU3ZS5jYWxsKHRoaXMsYyl9LmJpbmQodGhpcyksMCk6ZTdlLmNhbGwodGhpcyxjKSx0aGlzKX0sbGF5b3V0OmZ1bmN0aW9uIEp4dChjLGwsYSxkKXtpZih0aGlzLl93b3JrZXIpSHRlLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6''@;'; put 'put ''YyxlbmdpbmU6bCxvcHRpb25zOmF9LGZ1bmN0aW9uKGYpe2QuY2FsbCh0aGlzLGYuZGF0YSl9KTtlbHNlIHRyeXt2YXIgaD10aGlzLmxheW91dFN5bmMoYywic3ZnIixsLGEpO2QuY2FsbCh0aGlzLHt0eXBlOiJkb25lIixzdmc6aH0pfWNhdGNoKGYpe2QuY2FsbCh0aGlzLHt0eXBlOiJlcnJv''@;'; put 'put ''ciIsZXJyb3I6Zi5tZXNzYWdlfSl9fSxkb3Q6ZnVuY3Rpb24gUXh0KGMsbCl7dmFyIGE9dGhpcyxoPXRoaXMuX29wdGlvbnMuZW5naW5lLGY9dGhpcy5faW1hZ2VzO3JldHVybiB0aGlzLl9kaXNwYXRjaC5jYWxsKCJzdGFydCIsdGhpcyksdGhpcy5fYnVzeT0hMCx0aGlzLl9kaXNwYXRjaC5j''@;'; put 'put ''YWxsKCJsYXlvdXRTdGFydCIsdGhpcyksdGhpcy5fd29ya2VyfHxudWxsIT10aGlzLmxheW91dFN5bmM/KHRoaXMubGF5b3V0KGMsaCx7aW1hZ2VzOmZ9LGZ1bmN0aW9uKE0pe3N3aXRjaChNLnR5cGUpe2Nhc2UiZXJyb3IiOmlmKCFhLl9vbmVycm9yKXRocm93IE0uZXJyb3IubWVzc2FnZTth''@;'; put 'put ''Ll9vbmVycm9yKE0uZXJyb3IpO2JyZWFrO2Nhc2UiZG9uZSI6ZUV0LmNhbGwodGhpcyxNLnN2ZyxsKX19KSx0aGlzKToodGhpcy5fYWZ0ZXJJbml0PXRoaXMuZG90LmJpbmQodGhpcyxjLGwpLHRoaXMpfSxkYXRhOmZ1bmN0aW9uIGJ4dCgpe3JldHVybiB0aGlzLl9kYXRhfHxudWxsfSxyZW5k''@;'; put 'put ''ZXJEb3Q6ZnVuY3Rpb24gdEV0KGMsbCl7dmFyIGE9dGhpcztyZXR1cm4gdGhpcy5kb3QoYyxmdW5jdGlvbiBkKCl7YS5yZW5kZXIobCl9KSx0aGlzfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIG5FdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3RyYW5zaXRpb25GYWN0b3J5''@;'; put 'put ''PWM6dGhpcy5fdHJhbnNpdGlvbj1NdGUoYyksdGhpc30sYWN0aXZlOmZ1bmN0aW9uIHJFdChjKXt2YXIgYT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPWEuc2l6ZSgpP2Z1bmN0aW9uIFVNdChjLGwpe3ZhciBkLGgsYT1jLl9f''@;'; put 'put ''dHJhbnNpdGlvbjtpZihhKWZvcihoIGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSlpZigoZD1hW2hdKS5zdGF0ZT4xJiZkLm5hbWU9PT1sKXJldHVybiBuZXcgdTQoW1tjXV0sek10LGwsK2gpO3JldHVybiBudWxsfShhLm5vZGUoKSxjKTpudWxsfSxvcHRpb25zOmZ1bmN0aW9uIGlFdChjKXtp''@;'; put 'put ''Zih0eXBlb2YgYz4idSIpcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdGhpcy5fb3B0aW9ucyk7Zm9yKHZhciBsIG9mIE9iamVjdC5rZXlzKGMpKXRoaXMuX29wdGlvbnNbbF09Y1tsXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gYUV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLndpZHRo''@;'; put 'put ''PWMsdGhpc30saGVpZ2h0OmZ1bmN0aW9uIG9FdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5oZWlnaHQ9Yyx0aGlzfSxzY2FsZTpmdW5jdGlvbiBzRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuc2NhbGU9Yyx0aGlzfSxmaXQ6ZnVuY3Rpb24gbEV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25z''@;'; put 'put ''LmZpdD1jLHRoaXN9LGF0dHJpYnV0ZXI6ZnVuY3Rpb24gY0V0KGMpe3JldHVybiB0aGlzLl9hdHRyaWJ1dGVyPWMsdGhpc30sb246ZnVuY3Rpb24geUV0KGMsbCl7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKGMsbCksdGhpc30sb25lcnJvcjpmdW5jdGlvbiBfRXQoYyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X29uZXJyb3I9Yyx0aGlzfSxsb2dFdmVudHM6ZnVuY3Rpb24gSUV0KGMpe3ZhciBsPURhdGUubm93KCksYT17fSxkPXRoaXMuX2V2ZW50VHlwZXMsaD1NYXRoLm1heCguLi5kLm1hcChEPT5ELmxlbmd0aCkpO2ZvcihsZXQgRD0wO0Q8ZC5sZW5ndGg7RCsrKXtsZXQgWj1kW0RdO2FbWl09W107''@;'; put 'put ''dmFyIHYsTSxmPXRoaXM7dGhpcy5vbihaKyIubG9nIixjP2Z1bmN0aW9uKCl7dmFyIHJlPURhdGUubm93KCksY2U9YVtaXS5sZW5ndGg7YVtaXS5wdXNoKHJlKTt2YXIgYmU9IiI7aWYoYmUrPSJFdmVudCAiLGJlKz1hZigiID4yIikoRCkrIiAiLGJlKz1aKyIgIi5yZXBlYXQoaC1aLmxlbmd0''@;'; put 'put ''aCksYmUrPWFmKCIgPjUiKShyZS1sKSsiICIsImluaXRFbmQiIT1aJiYoYmUrPWFmKCIgPjUiKShyZS1hLnN0YXJ0W2NlXSkpLCJkYXRhUHJvY2Vzc0VuZCI9PVomJihiZSs9IiBwcmVwYXJlICAgICAgICAgICAgICAgICAiK2FmKCIgPjUiKShyZS1hLmxheW91dEVuZFtjZV0pKSwicmVuZGVy''@;'; put 'put ''RW5kIj09WiYmZi5fdHJhbnNpdGlvbiYmKGJlKz0iIHRyYW5zaXRpb24gc3RhcnQgbWFyZ2luICIrYWYoIiA+NSIpKGYuX3RyYW5zaXRpb24uZGVsYXkoKS0ocmUtYS5yZW5kZXJTdGFydFtjZV0pKSx2PWYuX3RyYW5zaXRpb24uZGVsYXkoKSxNPWYuX3RyYW5zaXRpb24uZHVyYXRpb24oKSks''@;'; put 'put ''InRyYW5zaXRpb25TdGFydCI9PVope3ZhciBFZT1yZS1hLnJlbmRlclN0YXJ0W2NlXTtiZSs9IiB0cmFuc2l0aW9uIGRlbGF5ICAgICAgICAiK2FmKCIgPjUiKShyZS1hLnJlbmRlclN0YXJ0W2NlXSksYmUrPSIgZXhwZWN0ZWQgIithZigiID41IikodiksYmUrPSIgZGlmZiAiK2FmKCIgPjUi''@;'; put 'put ''KShFZS12KX1pZigidHJhbnNpdGlvbkVuZCI9PVope3ZhciBCZT1yZS1hLnRyYW5zaXRpb25TdGFydFtjZV07YmUrPSIgdHJhbnNpdGlvbiBkdXJhdGlvbiAgICAgIithZigiID41IikoQmUpLGJlKz0iIGV4cGVjdGVkICIrYWYoIiA+NSIpKE0pLGJlKz0iIGRpZmYgIithZigiID41IikoQmUt''@;'; put 'put ''TSl9Y29uc29sZS5sb2coYmUpLGw9cmV9Om51bGwpfXJldHVybiB0aGlzfSxkZXN0cm95OmZ1bmN0aW9uIFJFdCgpe3JldHVybiBkZWxldGUgdGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3''@;'; put 'put ''RWRnZTpmdW5jdGlvbiBGRXQoYyxsLGEsZCxoLGY9e30pe2lmKChoPU9iamVjdC5hc3NpZ24oe30saCkpLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciB2PXdzKG51bGwpO2Vsc2V7dmFyIFo9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24o''@;'; put 'put ''InN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxjZT1udih2N2UuY2FsbCh0aGlzLGgpKTt2PVouYXBwZW5kKCJnIikuZGF0YShbY2VdKSxPQS5jYWxsKHYubm9kZSgpLGNlKSxmN2UuY2FsbCh0aGlzLHYsYyxsLGEsZCxoLGYpfXJldHVybiB0aGlzLl9kcmF3bkVkZ2U9''@;'; put 'put ''e2c6dix4MTpjLHkxOmwseDI6YSx5MjpkLGF0dHJpYnV0ZXM6aH0sdGhpc30sdXBkYXRlRHJhd25FZGdlOmZ1bmN0aW9uIEhFdChjLGwsYSxkLGg9e30sZj17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciB2PXRoaXMuX2Ry''@;'; put 'put ''YXduRWRnZS5nO3JldHVybiBoPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXMsaCksdGhpcy5fZHJhd25FZGdlLngxPWMsdGhpcy5fZHJhd25FZGdlLnkxPWwsdGhpcy5fZHJhd25FZGdlLngyPWEsdGhpcy5fZHJhd25FZGdlLnkyPWQsIXYuZW1wdHkoKXx8aC5zdHls''@;'; put 'put ''ZSYmaC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3bkVkZ2UuZz12KSx2LmVtcHR5KCl8fGY3''@;'; put 'put ''ZS5jYWxsKHRoaXMsdixjLGwsYSxkLGgsZiksdGhpc30sbW92ZURyYXduRWRnZUVuZFBvaW50OmZ1bmN0aW9uIE5FdChjLGwsYT17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBkPXRoaXMuX2RyYXduRWRnZS5nLGg9dGhp''@;'; put 'put ''cy5fZHJhd25FZGdlLngxLGY9dGhpcy5fZHJhd25FZGdlLnkxLHY9dGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduRWRnZS54Mj1jLHRoaXMuX2RyYXduRWRnZS55Mj1sLHA3ZShkLGgsZixjLGwsdixhKSx0aGlzfSxpbnNlcnREcmF3bkVkZ2U6ZnVuY3Rpb24g''@;'; put 'put ''VkV0KGMpe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgbD10aGlzLl9kcmF3bkVkZ2UuZztpZihsLmVtcHR5KCkpcmV0dXJuIHRoaXM7bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQoYyk7dmFy''@;'; put 'put ''IHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxNPXYuZGF0dW0oKSxEPXRoaXMuX2V4dHJhY3REYXRhKGwsTS5jaGlsZHJlbi5sZW5ndGgsdi5kYXR1bSgpKTtyZXR1cm4gTS5jaGls''@;'; put 'put ''ZHJlbi5wdXNoKEQpLER0ZShsLEQpLHRoaXMuX2RyYXduRWRnZT1udWxsLHRoaXN9LHJlbW92ZURyYXduRWRnZTpnN2UscmVtb3ZlRHJhd25FZGdlOmc3ZSxkcmF3bkVkZ2VTZWxlY3Rpb246bTdlLGRyYXduRWRnZVNlbGVjdGlvbjptN2UsZHJhd05vZGU6ZnVuY3Rpb24gQkV0KGMsbCxhLGQ9''@;'; put 'put ''e30saD17fSl7aWYoKGQ9T2JqZWN0LmFzc2lnbih7fSxkKSkuc3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIGY9d3MobnVsbCk7ZWxzZXt2YXIgRD10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQ''@;'; put 'put ''cm9wYWdhdGlvbigiZyIpLHJlPW52KEM3ZS5jYWxsKHRoaXMsYSxkKSk7Zj1ELmFwcGVuZCgiZyIpLmRhdGEoW3JlXSksT0EuY2FsbChmLm5vZGUoKSxyZSksYjdlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCl9cmV0dXJuIHRoaXMuX2RyYXduTm9kZT17ZzpmLG5vZGVJZDphLHg6Yyx5OmwsYXR0''@;'; put 'put ''cmlidXRlczpkfSx0aGlzfSx1cGRhdGVEcmF3bk5vZGU6ZnVuY3Rpb24gakV0KGMsbCxhLGQ9e30saD17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBudWxsPT1hJiYoYT10''@;'; put 'put ''aGlzLl9kcmF3bk5vZGUubm9kZUlkKSxkPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXMsZCksdGhpcy5fZHJhd25Ob2RlLm5vZGVJZD1hLHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCwhZi5lbXB0eSgpfHxkLnN0eWxlJiZkLnN0eWxlLmlu''@;'; put 'put ''Y2x1ZGVzKCJpbnZpcyIpfHwoZj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduTm9kZS5nPWYpLGYuZW1wdHkoKXx8YjdlLmNhbGwodGhpcyxm''@;'; put 'put ''LGMsbCxhLGQsaCksdGhpc30sbW92ZURyYXduTm9kZTpmdW5jdGlvbiB6RXQoYyxsLGE9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bk5vZGUuZyxoPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVz''@;'; put 'put ''O3JldHVybiB0aGlzLl9kcmF3bk5vZGUueD1jLHRoaXMuX2RyYXduTm9kZS55PWwsZC5lbXB0eSgpfHx5N2UoZCxjLGwsaCksdGhpc30saW5zZXJ0RHJhd25Ob2RlOmZ1bmN0aW9uIFVFdChjKXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXdu''@;'; put 'put ''Iik7bnVsbD09YyYmKGM9dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCk7dmFyIGw9dGhpcy5fZHJhd25Ob2RlLmc7aWYobC5lbXB0eSgpKXJldHVybiB0aGlzO3ZhciBhPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO2lmKGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50''@;'; put 'put ''ZXh0KGMpLGEuVVJMfHxhLnRvb2x0aXApdmFyIGY9bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLE09KGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUi''@;'; put 'put ''KSxmLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKSk7ZWxzZSBsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksTT1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtNLnRleHQoYS5sYWJl''@;'; put 'put ''bHx8Yyk7dmFyIHJlPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksY2U9cmUuZGF0dW0oKSxiZT10aGlzLl9leHRyYWN0RGF0YShsLGNlLmNoaWxkcmVuLmxlbmd0aCxyZS5kYXR1bSgp''@;'; put 'put ''KTtyZXR1cm4gY2UuY2hpbGRyZW4ucHVzaChiZSksRHRlKGwsYmUpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9LHJlbW92ZURyYXduTm9kZTpfN2UscmVtb3ZlRHJhd25Ob2RlOl83ZSxkcmF3bk5vZGVTZWxlY3Rpb246dzdlLGRyYXduTm9kZVNlbGVjdGlvbjp3N2UsZ3JhcGh2aXpWZXJz''@;'; put 'put ''aW9uOmZ1bmN0aW9uIEN4dCgpe3JldHVybiB0aGlzLl9ncmFwaHZpelZlcnNpb259fSxxOS5wcm90b3R5cGUuZ3JhcGh2aXo9ZnVuY3Rpb24gWUV0KGMpe3ZhciBsPXRoaXMubm9kZSgpLl9fZ3JhcGh2aXpfXztyZXR1cm4gbD8obC5vcHRpb25zKGMpLGJOKGZ1bmN0aW9uKCl7bC5fZGlzcGF0''@;'; put 'put ''Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyl9LmJpbmQodGhpcyksMCkpOmw9bmV3IFV0ZSh0aGlzLGMpLGx9LHE5LnByb3RvdHlwZS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uPWZ1bmN0aW9uIEdFdChjKXtyZXR1cm4gd3ModGhpcy5zaXplKCk+MD90aGlzLm5vZGUoKS5xdWVyeVNlbGVj''@;'; put 'put ''dG9yKGMpOm51bGwpfTt2YXIgJEV0PXkoOTgwODMpO2Z1bmN0aW9uIEtFdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBxRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25z''@;'; put 'put ''dCBoPVJlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIFhFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMjYsMiksZ2ko''@;'; put 'put ''Im5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5saWJyYXJ5T25GaWx0''@;'; put 'put ''ZXIoKSl9KSxoZSgpLGd0KDQsS0V0LDEsMCwiY2xyLWljb24iLDI3KSg1LHFFdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5s''@;'; put 'put ''ZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEpFdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBRRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXt3dChhKSxSZSgpO2NvbnN0IGg9aGEoMyksZj1SZSgyKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBlVHQoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM2LDMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0''@;'; put 'put ''cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCksZ3QoNCxKRXQsMSwwLCJjbHItaWNvbiIsMjcpKDUsUUV0LDEsMCwi''@;'; put 'put ''Y2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoMikuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1m''@;'; put 'put ''dW5jdGlvbiB0VHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gblR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksUmUoKTtjb25zdCBoPWhhKDMpLGY9UmUoKS4kaW1wbGljaXQs''@;'; put 'put ''dj1SZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiByVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2Iiwy''@;'; put 'put ''NSkoMiwiaW5wdXQiLDM5LDMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0O3JldHVybiBtaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2Nv''@;'; put 'put ''bnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpLGd0KDQsdFR0LDEsMCwiY2xyLWljb24iLDI3KSg1LG5UdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJl''@;'; put 'put ''KCkuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBpVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHIt''@;'; put 'put ''dHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9UmUoKS4kaW1wbGljaXQsdj1SZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkuY29sdW1uT25DbGljayhoLHYsZikpfSksR3QoMiwiY2xyLWljb24iLDQx''@;'; put 'put ''KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9UmUoNCk7ZmUoKSxUcigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxmZSgyKSxEcigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIGFUdChjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9UmUoMikuJGltcGxpY2l0O3JldHVybiBDdChSZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYsdi50YWJsZXMpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPVJlKDIpLiRpbXBsaWNpdDty''@;'; put 'put ''ZXR1cm4gQ3QoUmUoKS50YWJsZU9uQ2xpY2soaC5UQUJMRVVSSSxoLGYpKX0pLEd0KDIsImNsci1pY29uIiwzOCksTGUoMyksaGUoKSxndCg0LHJUdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDUsaVR0LDQsMywiY2xyLXRyZWUtbm9kZSIsNiksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksZmUoKSxNZSgiaWQiLGEuVEFCTEVVUkkpLGZlKDIpLERyKCIgIixhLlRBQkxFTkFNRSwiICIp''@;'; put 'put ''LGZlKCksTWUoIm5nSWYiLGEuY29sdW1ucyksZmUoKSxNZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24gb1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRp''@;'; put 'put ''bXBsaWNpdCx2PVJlKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmxpYnJhcnlMaXN0KSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVk''@;'; put 'put ''PWgpLEN0KGgpfSksZGUoMSwicCIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0LGY9UmUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZSUQsQ3QoZi5saWJyYXJ5T25DbGljayhmLmxpYnx8IiIsaCkpfSksR3QoMiwiY2xyLWljb24iLDM0KSxM''@;'; put 'put ''ZSgzKSxoZSgpLGd0KDQsZVR0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSkoNSxhVHQsNiw4LCJjbHItdHJlZS1ub2RlIiwzNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVk''@;'; put 'put ''KSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLERyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksZmUoKSxNZSgibmdJZiIsYS50YWJsZXMpLGZlKCksTWUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gc1R0KGMsbCl7aWYoMSZjJiYoc2koMCks''@;'; put 'put ''Z3QoMSxvVHQsNiw3LCJjbHItdHJlZS1ub2RlIiwzMSksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTWUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBsVHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQyKSgxLCJzcGFuIiw0MyksTGUoMiwi''@;'; put 'put ''IExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBjVHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ0KSxHdCgxLCJjbHItaWNvbiIsNDUpLGRlKDIsInAiLDQ2KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGNvbHVtbiBvciB0YWJsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIHVUdChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsImgzIiw1NSksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksRHIoIiAiLGEuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uP2EuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUrIi4iK2EuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOmEuY3VycmVudExpbmVh''@;'; put 'put ''Z2VQYXRoTGliVGFibGUsIiAiKX19ZnVuY3Rpb24gZFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1MyksZ3QoMSx1VHQsMiwxLCJoMyIsNTQpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLE1lKCJuZ0lmIiwhYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4mJiFhLmN1cnJlbnRM''@;'; put 'put ''aW5lYWdlUGF0aExpYlRhYmxlKX19ZnVuY3Rpb24gaFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEpLGRlKDIsImEiLDU2KSxMZSgzKSxoZSgpLExlKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgpLERyKCIgIixhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVsw''@;'; put 'put ''XSwiLiIpLGZlKCksTWUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5saW5lYWdlVGFibGVOYW1lKSxmZSgpLHdyKGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzFdKSxmZSgpLERyKCIiLGEubGluZWFnZUNvbHVtbk5hbWUubGVuZ3RoPjA/Ii4iK2EubGluZWFnZUNvbHVtbk5h''@;'; put 'put ''bWU6IiIsIiAiKX19ZnVuY3Rpb24gZlR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS5kb3dubG9hZFBORygpKX0pLExlKDEsIiBQTkcgIiksaGUoKX19ZnVuY3Rpb24gcFR0KGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS5kb3dubG9hZENTVigpKX0pLExlKDEsIiBDU1YgIiksaGUoKX19ZnVuY3Rpb24gZ1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xy''@;'; put 'put ''LWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLmRvd25sb2FkU1ZHKCkpfSksTGUoMiwiU1ZHIiksaGUoKSxndCgzLGZUdCwyLDAsImRpdiIsNjcpLGRlKDQsImRpdiIsNjYpLEZ0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMykuZG93bmxvYWREb3QoKSl9KSxMZSg1LCJEb3QiKSxoZSgpLGd0KDYscFR0LDIsMCwiZGl2Iiw2NyksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMyksTWUoIm5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpLGZlKDMpLE1l''@;'; put 'put ''KCJuZ0lmIixhLmZsYXRkYXRhKX19ZnVuY3Rpb24gbVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY4KSgxLCJpbnB1dCIsNjkpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDMpLmdlbmVyYXRlR3JhcGgo''@;'; put 'put ''KSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgzKTtyZXR1cm4gbWkoZi5yZWZyZXNoQ2FjaGUsaCl8fChmLnJlZnJlc2hDYWNoZT1oKSxDdChoKX0pLGhlKCksZGUoMiwibGFiZWwiKSxMZSgzLCJSZWZyZXNoIENhY2hlIiksaGUoKSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1SZSgzKTtmZSgpLHBpKCJuZ01vZGVsIixhLnJlZnJlc2hDYWNoZSl9fWZ1bmN0aW9uIHZUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTcpKDEsImJ1dHRvbiIsNTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMiku''@;'; put 'put ''bGltaXREb3REZXB0aD0hMCl9KSxMZSgyLCIgTGltaXQgZGVwdGggIiksaGUoKSxkZSgzLCJkaXYiLDU5KSg0LCJkaXYiLDYwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMSxDdChoLnJvdXRlci51cmwuaW5jbHVk''@;'; put 'put ''ZXMoImNvbHVtbiIpP2gub25HZW5lcmF0ZUNsaWNrKCk6aC5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpfSksR3QoNSwiaW5wdXQiLDYxKSxkZSg2LCJsYWJlbCIpLExlKDcsIkJhY2t3YXJkIiksaGUoKSgpLGRlKDgsImRpdiIsNjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtj''@;'; put 'put ''b25zdCBoPVJlKDIpO3JldHVybiBoLmZvcndhcmRMaW5lYWdlPSEwLEN0KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxHdCg5LCJpbnB1dCIsNjEpLGRlKDEwLCJsYWJlbCIpLExlKDEx''@;'; put 'put ''LCJGb3J3YXJkIiksaGUoKSgpKCksZGUoMTIsImNsci1kcm9wZG93biIsNjIpKDEzLCJidXR0b24iLDYzKSxMZSgxNCwiIERvd25sb2FkICIpLEd0KDE1LCJjbHItaWNvbiIsMjIpLGhlKCksZ3QoMTYsZ1R0LDcsMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSxoZSgpLGd0KDE3LG1UdCw0LDEs''@;'; put 'put ''ImNsci1jaGVja2JveC13cmFwcGVyIiw2NCksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoMik7ZmUoNSksTWUoImNoZWNrZWQiLCFhLmZvcndhcmRMaW5lYWdlKSxmZSg0KSxNZSgiY2hlY2tlZCIsYS5mb3J3YXJkTGluZWFnZSksZmUoNCksTWUoImRpc2FibGVkIiwhYS5jb2x1bW4mJiFhLnRh''@;'; put 'put ''YmxlKSxmZSg0KSxNZSgibmdJZiIsYS5jb2x1bW4pfX1mdW5jdGlvbiBiVHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3MyksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24geVR0KGMsbCl7MSZjJiZHdCgwLCJzcGFuIiw0Myl9ZnVuY3Rpb24gX1R0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2Iiw3NCkoMSwiZGl2Iiw3NSksZ3QoMix5VHQsMSwwLCJzcGFuIiw3NiksaGUoKSxHdCgzLCJkaXYiLDc3KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMiksTWUoIm5nSWYiLGEuZ3JhcGhSZW5kZXJpbmcpfX1mdW5jdGlvbiB3VHQoYyxsKXtpZigxJmMmJihkZSgwLCJk''@;'; put 'put ''aXYiKSgxLCJkaXYiLDcwKSxndCgyLGJUdCwyLDAsInNwYW4iLDcxKSgzLF9UdCw0LDEsImRpdiIsNzIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO1RyKCJtdC0yIixhLnRhYmxlRmxhZyksZmUoMiksTWUoIm5nSWYiLGEuZ3JhcGhMb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIiwhYS5ncmFw''@;'; put 'put ''aExvYWRpbmcpfX1mdW5jdGlvbiBDVHQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLGRUdCwyLDEsImRpdiIsNDcpLGRlKDIsImRpdiIsNDgpKDMsInNlY3Rpb24iLDQ5KSg0LCJkaXYiLDUwKSxndCg1LGhUdCw1LDQsInNwYW4iLDExKSxoZSgpLGd0KDYsdlR0LDE4LDQsImRpdiIsNTEpLGhl''@;'; put 'put ''KCksZ3QoNyx3VHQsNCw0LCJkaXYiLDUyKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgpO2ZlKCksTWUoIm5nSWYiLCFhLmdyYXBoQ29udGFpbmVyKSxmZSg0KSxNZSgibmdJZiIsYS5saW5lYWdlVGFibGVOYW1lLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVy''@;'; put 'put ''KSxmZSgpLE1lKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKX19ZnVuY3Rpb24gU1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5yZW5kZXJUb0Rvd25sb2FkKCJQTkciKSl9KSxMZSgx''@;'; put 'put ''LCIgUE5HICIpLGhlKCl9fWZ1bmN0aW9uIE1UdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51Iiw2NSkoMSwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnJlbmRlclRvRG93bmxvYWQoIlNWRyIpKX0p''@;'; put 'put ''LExlKDIsIlNWRyIpLGhlKCksZ3QoMyxTVHQsMiwwLCJkaXYiLDY3KSxkZSg0LCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpO3JldHVybiBoLmRvd25sb2FkRG90KCksQ3QoaC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLExlKDUsIiBEb3QgIiks''@;'; put 'put ''aGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDMpLE1lKCJuZ0lmIiwhYS5oZWxwZXJTZXJ2aWNlLmlzTWljcm9zb2Z0KX19Y29uc3QgeFR0PXkoOTc1ODYpO2xldCBqTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWil7dGhpcy5saWNlbmNlU2VydmljZT1h''@;'; put 'put ''LHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLnJvdXRlcj1mLHRoaXMubG9jYXRpb249dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMubG9nZ2VyU2VydmljZT1ELHRoaXMuaGVscGVyU2VydmljZT1aLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlz''@;'; put 'put ''LmZvcndhcmRMaW5lYWdlPSExLHRoaXMuZmxhdGRhdGE9W10sdGhpcy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmdyYXBoQ29udGFpbmVyPSExLHRoaXMudml6SW5wdXQ9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJ5VGFibGVzUmVm''@;'; put 'put ''PSIiLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMudGFibGVDb2x1bW5zUmVmPSIiLHRoaXMubGluZWFnZVRhYmxlTmFtZT0iIix0aGlzLmxpbmVhZ2VDb2x1bW5OYW1lPSIiLHRoaXMubGliPW51bGwsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5yZWZyZXNoQ2FjaGU9ITEsdGhpcy5j''@;'; put 'put ''dXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT0iIix0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj0iIix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5sYXJnZURvdEZpbGVMaW1pdD0xZTMsdGhpcy5saW1pdERvdERlcHRoPSExLHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2Fk''@;'; put 'put ''PW51bGwsdGhpcy5kZWJvdW5jZVRpbWU9MjAwfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ310YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKih2LE0sRCxaPSExKXtNLmNvbHVtbnM/KE0uZXhwYW5kZWQ9IU0u''@;'; put 'put ''ZXhwYW5kZWQsITA9PT1NLmV4cGFuZGVkJiYoZi50YWJsZT12LFp8fGYub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSk6KE0uZXhwYW5kZWQ9IU0uZXhwYW5kZWQsTS5sb2FkaW5nQ29sdW1ucz0hMCxmLnRhYmxlPXYsZi5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT1NLkxJQk5BTUUr''@;'; put 'put ''Ii4iK00uVEFCTEVOQU1FLHlpZWxkIGYuc2VsZWN0VGFibGUodixNKSxafHxmLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSksZi5jb2xsYXBzZVRyZWVJdGVtcyhELnRhYmxlcyxNKX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1zZWxlY3RUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJu''@;'; put 'put ''IGVlKGZ1bmN0aW9uKigpe2guY29sdW1uc0xpc3Q9W107bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxldXJpOmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YWNvbHMiLGYpLnRoZW4odj0+e2guY29sdW1uc0xpc3Q9di5hZGFwdGVyUmVzcG9uc2Uu''@;'; put 'put ''bWV0YWNvbHMsaC5jb2x1bW5zTGlzdCYmaC5jb2x1bW5zTGlzdC5sZW5ndGg+MCYmKGQuY29sdW1ucz1oLmNvbHVtbnNMaXN0LGQuZXhwYW5kZWQ9ITAsZC5sb2FkaW5nQ29sdW1ucz0hMSl9KS5jYXRjaCh2PT52KSxoLnNldEdsb2JhbERhdGEoKX0pKCl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0''@;'; put 'put ''aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57''@;'; put 'put ''SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1saWJyYXJ5T25DbGljayhhLGQpe3ZhciBoPXRo''@;'; put 'put ''aXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2QuaW5Gb3JlZ3JvdW5kPSEwLGQudGFibGVzP2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQ6KGQubG9hZGluZ1RhYmxlcz0hMCx5aWVsZCBoLnNlbGVjdExpYnJhcnkoYSxkKSksaC5jb2xsYXBzZVRyZWVJdGVtcyhoLmxpYnJhcnlMaXN0LGQpfSkoKX1z''@;'; put 'put ''ZWxlY3RMaWJyYXJ5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC50YWJsZXNMaXN0PVtdLGguY29sdW1uc0xpc3Q9W107bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe2xpYnVyaTphfV19O3lpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2dldG1ldGF0''@;'; put 'put ''YWJsZXMiLGYpLnRoZW4odj0+e2gudGFibGVzTGlzdD12LmFkYXB0ZXJSZXNwb25zZS5tZXRhdGFibGVzLGgudGFibGVzTGlzdCYmaC50YWJsZXNMaXN0Lmxlbmd0aD4wJiYoZC50YWJsZXM9aC50YWJsZXNMaXN0LGQuZXhwYW5kZWQ9ITApLGguc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2godj0+''@;'; put 'put ''diksZC5sb2FkaW5nVGFibGVzPSExfSkoKX1jb2x1bW5PbkNsaWNrKGEsZCxoKXt0aGlzLmxpYj1kLkxJQlJBUllJRCx0aGlzLnRhYmxlPWguVEFCTEVVUkksdGhpcy5jb2x1bW49YS5DT0xVUkksdGhpcy5zZXRHbG9iYWxEYXRhKCksdGhpcy5vbkdlbmVyYXRlQ2xpY2soKX10cmVlT25GaWx0''@;'; put 'put ''ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEtuLmxpbmVhZ2UubGli''@;'; put 'put ''cmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3RoLTFdPT1oW2gubGVuZ3RoLTFdfXNldEds''@;'; put 'put ''b2JhbERhdGEoKXtLbi5saW5lYWdlLmxpYnJhcnlMaXN0PXRoaXMubGlicmFyeUxpc3QsS24ubGluZWFnZS50YWJsZXNMaXN0PXRoaXMudGFibGVzTGlzdCxLbi5saW5lYWdlLmNvbHVtbnNMaXN0PXRoaXMuY29sdW1uc0xpc3QsS24ubGluZWFnZS5saWI9dGhpcy5saWIsS24ubGluZWFnZS50''@;'; put 'put ''YWJsZT10aGlzLnRhYmxlLEtuLmxpbmVhZ2UuY29sdW1uPXRoaXMuY29sdW1ufWxvYWRHbG9iYWxEYXRhKCl7dGhpcy5saWJyYXJ5TGlzdD1Lbi5saW5lYWdlLmxpYnJhcnlMaXN0LHRoaXMudGFibGVzTGlzdD1Lbi5saW5lYWdlLnRhYmxlc0xpc3QsdGhpcy5jb2x1bW5zTGlzdD1Lbi5saW5l''@;'; put 'put ''YWdlLmNvbHVtbnNMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoPUtuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNofXJlc3VibWl0V2l0aE1heERlcHRoKGEpe2xldCBkO3RoaXMuY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSxhJiYoZD17bWF4X2RlcHRoOmF9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShb''@;'; put 'put ''XSx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOmR9KX1uZ09uSW5pdCgpe0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L2xpbmVhZ2UiO2xldCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnJlbG9hZDtpZih2b2lkIDAhPT1hKXtsZXQgZD10aGlzLnJvdXRl''@;'; put 'put ''ci51cmw7InJlbG9hZCI9PT1hP2xvY2FsU3RvcmFnZS5nZXRJdGVtKCJmaXJzdExvYWQiKT8obG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImZpcnN0TG9hZCIpLHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGQuc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKSk6KGxvY2FsU3RvcmFnZS5m''@;'; put 'put ''aXJzdExvYWQ9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0sMmUzKSk6dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpfXRoaXMuaW5pdERhdGEoKX1pbml0RGF0YSgpe3ZhciBhPXRoaXM7cmV0''@;'; put 'put ''dXJuIGVlKGZ1bmN0aW9uKigpe0tuLmxpbmVhZ2UubGlicmFyeUxpc3QmJihLbi5saW5lYWdlLmxpYnJhcnlMaXN0Lmxlbmd0aD4wP2EubG9hZEdsb2JhbERhdGEoKTp5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixudWxsKS50aGVuKHY9PnthLmxpYnJhcnlM''@;'; put 'put ''aXN0PXYuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnMsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJ5TGlzdCksYS5saWJyYXJ5TGlzdCYmYS5saWJyYXJ5TGlzdC5sZW5ndGg+MCYmKGEubGliPWEubGlicmFyeUxpc3RbMF0uTElCUkFSWUlEKSxhLnNldEdsb2JhbERh''@;'; put 'put ''dGEoKX0pLmNhdGNoKHY9PnYpLGEucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHY9PnthLm9uUm91dGVDaGFuZ2UoKX0pLGEucm91dGUucGFyYW1zLnN1YnNjcmliZSh2PT57YS5vblJvdXRlQ2hhbmdlKCl9KSl9KSgpfW9uUm91dGVDaGFuZ2UoKXtjbGVhclRpbWVvdXQodGhpcy5kZWJv''@;'; put 'put ''dW5jZVRpbWVvdXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pntjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmNvbHVyaSxkPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmRpcmVjdGlvbixoPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnRhYmxl''@;'; put 'put ''aWQsZj10aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLm1heF9kZXB0aDthJiZkJiYodGhpcy5mb3J3YXJkTGluZWFnZT0iRk9SV0FSRCI9PT1kLHRoaXMuY29sdW1uPWEsdGhpcy5nZW5lcmF0ZUdyYXBoKGEsZCxmKSksIXRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIikm''@;'; put 'put ''JmgmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQsdGhpcy50YWJsZT1oLHRoaXMuZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoaCxkLGYpKX0sdGhpcy5kZWJvdW5jZVRpbWUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe31kaXJlY3Rpb25UZXh0KCl7cmV0dXJuIHRoaXMuZm9y''@;'; put 'put ''d2FyZExpbmVhZ2U/IkZPUldBUkQiOiJSRVZFUlNFIn1vbkdlbmVyYXRlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxkPXRoaXMuY29sdW1uP3RoaXMuY29sdW1uLnN1YnN0cmluZyh0aGlzLmNvbHVtbi5pbmRleE9mKCJcXCIpKzEpOm51bGw7dGhpcy5yb3V0ZXIubmF2aWdh''@;'; put 'put ''dGVCeVVybCgiL3ZpZXcvbGluZWFnZS9jb2x1bW4vIitkKyIvIithKX1vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCl7bGV0IGE9dGhpcy5kaXJlY3Rpb25UZXh0KCksZD10aGlzLnRhYmxlLmluY2x1ZGVzKCJcXCIpP3RoaXMudGFibGUuc3BsaXQoIlxcIilbMV06dGhpcy50YWJsZTt0aGlz''@;'; put 'put ''LnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlLyIrZCsiLyIrYSl9Z2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXtTQVNDb250cm9sVGFibGU6W3t0YWJsZV9pZDphLGRpcmVjdGlvbjpkfHxmLmRp''@;'; put 'put ''cmVjdGlvblRleHQoKX1dfTtyZXR1cm4idW5kZWZpbmVkIj09PXYuU0FTQ29udHJvbFRhYmxlWzBdLnRhYmxlX2lkJiZmLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoKSIsInRhYmxlX2lkIGlzIHVuZGVmaW5lZC4iLHZvaWQgMCwiRnJvbnRl''@;'; put 'put ''bmQgZXJyb3IiKSxoJiYodi5TQVNDb250cm9sVGFibGVbMF0ubWF4X2RlcHRoPWgpLGYudGFibGVGbGFnPSExLGYuc3dpdGNoRmxhZz0hMCxmLmdyYXBoQ29udGFpbmVyPSEwLGYuZ3JhcGhMb2FkaW5nPSEwLGYudml6SW5wdXQ9IiIsbmV3IFByb21pc2UoKE0sRCk9PntmLnNhc1NlcnZpY2Uu''@;'; put 'put ''cmVxdWVzdCgibGluZWFnZS9mZXRjaHRhYmxlbGluZWFnZSIsdikudGhlbihmdW5jdGlvbigpe3ZhciBaPWVlKGZ1bmN0aW9uKihyZSl7aWYocmUuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLmxlbmd0aD4wJiZmLmxpY2VuY2VTZXJ2aWNlLmNoZWNrTGluZWFnZUxpbWl0KCkpcmV0dXJuIGYu''@;'; put 'put ''ZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIp''@;'; put 'put ''LHZvaWQgZi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgcmUpcmV0dXJuIGYudml6SW5wdXQ9ImRpZ3JhcGggRyB7U0FTIEVycm9yfSIsdm9pZCBmLmJ1aWxkR3JhcGgoKTtmLmxpbmVhZ2VUYWJsZU5hbWU9cmUuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlLmluZm9bMF0uTElCUkVGKyIuIityZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5UQUJMRU5BTUU7bGV0IGNlPXJlLmFkYXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLGJlPSIiO2ZvcihsZXQgRWU9MDtFZTxjZS5sZW5ndGg7RWUrKyliZSs9dW5lc2NhcGUoY2VbRWVdLkxJTkUpKyJcbiI7''@;'; put 'put ''aWYoZi5mbGF0ZGF0YT1yZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IEVlPWYubGlicmFyeUxpc3QuZmluZChCZT0+cmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uTElCVVJJLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoQmUuTElCUkFSWUlELnRvVXBwZXJD''@;'; put 'put ''YXNlKCkpKTtpZihFZSl7bGV0IEJlO2lmKHlpZWxkIGYubGlicmFyeU9uQ2xpY2soRWUuTElCUkFSWUlELEVlKSxFZS50YWJsZXMmJihCZT1FZS50YWJsZXMuZmluZChxZT0+cWUuVEFCTEVVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhyZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5UQUJM''@;'; put 'put ''RUlELnRvVXBwZXJDYXNlKCkpKSxCZSkpe2lmKGYudGFibGU9QmUuVEFCTEVVUkksZi50YWJsZSl7Y29uc3QgcWU9Zi50YWJsZS5yZXBsYWNlKCJcXCIsIlxcXFwiKTtzZXRUaW1lb3V0KCgpPT57bGV0IHJ0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0nJHtxZX0nXWApO3J0JiZydC5z''@;'; put 'put ''Y3JvbGxJbnRvVmlldygpfSwxZTMpfWYudGFibGVPbkNsaWNrKEJlLlRBQkxFVVJJLEJlLEVlLHZvaWQgMCE9PWQpfUVlJiYoRWUuZXhwYW5kZWQ9ITApLEJlJiYoQmUuZXhwYW5kZWQ9ITApfX1mLnZpeklucHV0PWJlfHwiZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLGYudml6''@;'; put 'put ''SW5wdXQ9Zi52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxmLmlkbG9va3VwPXJlLmFkYXB0ZXJSZXNwb25zZS5pZGxvb2t1cCxyZS5hZGFwdGVyUmVzcG9uc2UuZmluYWxmaW5hbC5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxh''@;'; put 'put ''cmdlRG90RmlsZUxpbmVzPXJlLmFkYXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxNKCl9KTtyZXR1cm4gZnVuY3Rpb24ocmUpe3JldHVybiBaLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKFo9PntmLmdyYXBoTG9hZGluZz0hMSxmLmdyYXBo''@;'; put 'put ''Q29udGFpbmVyPSExfSl9KX0pKCl9Y2FuY2VsUmVuZGVyaW5nR3JhcGgoKXt0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgpfWNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKXt0''@;'; put 'put ''aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5idWlsZEdyYXBoKCgpPT57aWYobnVsbCE9PXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkKXtzd2l0Y2godGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe2Nhc2UiUE5HIjp0aGlzLmRvd25sb2FkUE5HKCk7YnJlYWs7Y2FzZSJTVkci''@;'; put 'put ''OnRoaXMuZG93bmxvYWRTVkcoKX10aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD1udWxsLHRoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9Iix0aGlzLmJ1aWxkR3JhcGgoKX19KX1yZW5kZXJUb0Rvd25sb2FkKGEpe3N3aXRjaChhKXtjYXNlIlBORyI6dGhp''@;'; put 'put ''cy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlBORyIsdGhpcy5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCk7YnJlYWs7Y2FzZSJTVkciOnRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPSJTVkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpfX1tYWtlR3JhcGhMaW5rYWJsZShhKXtsZXQg''@;'; put 'put ''ZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjZ3JhcGggLm5vZGUiKTtmb3IobGV0IGggb2YgZCl7bGV0IE0sZj1oLnF1ZXJ5U2VsZWN0b3IoInRpdGxlIikuaW5uZXJIVE1MLHY9YS5maW5kKEQ9PkQuTUVUQUlEPT09Zik7diYmKE09IlRBQkxFIj09PXYuTUVUQVRZUEU/Ii92aWV3L2Rh''@;'; put 'put ''dGEvIit2Lk1FVEFOQU1FOiIvdmlldy9tZXRhZGF0YS9vYmplY3QvIit2Lk1FVEFJRCxoLmNsYXNzTGlzdC5hZGQoImN1cnNvci1wb2ludGVyIiksaC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsRD0+e3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoTSl9KSl9fWdlbmVyYXRlR3JhcGgoYSxk''@;'; put 'put ''LGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXtTQVNDb250cm9sVGFibGU6W3tjb2x1cmk6YXx8Zi5jb2x1bW4sZGlyZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpLHJlZnJlc2g6Zi5yZWZyZXNoQ2FjaGU/MTowfV19O3JldHVybiJ1bmRlZmluZWQiPT09di5T''@;'; put 'put ''QVNDb250cm9sVGFibGVbMF0uY29sdXJpJiZmLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZ2VuZXJhdGVHcmFwaCgpIiwiY29sdXJpIGlzIHVuZGVmaW5lZC4iLHZvaWQgMCwiRnJvbnRlbmQgZXJyb3IiKSxoJiYodi5TQVNDb250cm9sVGFibGVbMF0ubWF4X2RlcHRoPWgpLGYudGFi''@;'; put 'put ''bGVGbGFnPSExLGYuc3dpdGNoRmxhZz0hMCxmLmdyYXBoQ29udGFpbmVyPSEwLGYuZ3JhcGhMb2FkaW5nPSEwLGYudml6SW5wdXQ9IiIsbmV3IFByb21pc2UoKE0sRCk9PntmLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9mZXRjaGNvbGxpbmVhZ2UiLHYpLnRoZW4oZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgWj1lZShmdW5jdGlvbioocmUpe2lmKHJlLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YS5sZW5ndGg+MCYmZi5saWNlbmNlU2VydmljZS5jaGVja0xpbmVhZ2VMaW1pdCgpKXJldHVybiBmLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRh''@;'; put 'put ''aWx5IG1heGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJlbmRlcmluZ3MuIFRvIHVubG9jayBhZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGYucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHJlLmFkYXB0ZXJSZXNwb25zZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK3JlLmFkYXB0ZXJSZXNwb25z''@;'; put 'put ''ZS5pbmZvWzBdLlRBQk5BTUUsZi5saW5lYWdlQ29sdW1uTmFtZT1yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5DT0xOQU1FLGYuaWRsb29rdXA9cmUuYWRhcHRlclJlc3BvbnNlLmlkbG9va3VwO2xldCBjZT1yZS5hZGFwdGVyUmVzcG9uc2UuZnJvbXNhcyxiZT0iIjtmb3IobGV0IEVlPTA7''@;'; put 'put ''RWU8Y2UubGVuZ3RoO0VlKyspYmUrPXVuZXNjYXBlKGNlW0VlXS5TVFJJTkcpKyJcbiI7aWYoZi52aXpJbnB1dD1iZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9IixmLnZpeklucHV0PWYudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoiKS5yZXBsYWNlKC9cc1xu''@;'; put 'put ''L2csIlxuIiksZi5mbGF0ZGF0YT1yZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IEJlLEVlPWYubGlicmFyeUxpc3QuZmluZChxZT0+cmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0/LkxJQlVSST8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMocWU/LkxJQlJB''@;'; put 'put ''UllJRD8udG9VcHBlckNhc2UoKSkpO0VlJiYoeWllbGQgZi5saWJyYXJ5T25DbGljayhFZS5MSUJSQVJZSUQsRWUpLEVlLnRhYmxlcyYmKEJlPUVlLnRhYmxlcy5maW5kKHFlPT5xZS5UQUJMRVVSST09PXJlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQlVSSSksQmUmJmYudGFibGVPbkNs''@;'; put 'put ''aWNrKEJlLlRBQkxFVVJJLEJlLEVlLCEwKS50aGVuKCgpPT57bGV0IHFlPUJlLlRBQkxFVVJJO2lmKHFlKXtjb25zdCBydD1xZS5yZXBsYWNlKCJcXCIsIlxcXFwiKTtsZXQgcHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke3J0fSddYCk7c2V0VGltZW91dCgoKT0+e3B0JiYoZi5s''@;'; put 'put ''b2dnZXJTZXJ2aWNlLmxvZygibGlicmFyeVRvU2VsZWN0IixFZSkscHQuc2Nyb2xsSW50b1ZpZXcoKSl9LDFlMyl9fSkpLEVlJiYoRWUuZXhwYW5kZWQ9ITApLEJlJiYoQmUuZXhwYW5kZWQ9ITApKX1yZS5hZGFwdGVyUmVzcG9uc2UuZnJvbXNhcy5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1p''@;'; put 'put ''dD9mLmxhcmdlRG90RmlsZUxpbmVzPXJlLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxNKCl9KTtyZXR1cm4gZnVuY3Rpb24ocmUpe3JldHVybiBaLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKFo9PntmLmdyYXBoTG9hZGluZz0hMSxmLmdy''@;'; put 'put ''YXBoQ29udGFpbmVyPSExfSl9KX0pKCl9Z2V0U1ZHVVJMKCl7bGV0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyYXBoIiksZD1uZXcgWE1MU2VyaWFsaXplcixoPW5ldyBCbG9iKFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1hZ2Uvc3ZnK3htbCJ9KTtyZXR1cm4gVVJM''@;'; put 'put ''LmNyZWF0ZU9iamVjdFVSTChoKX1nZXRTVkdCbG9iKCl7bGV0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyYXBoIiksZD1uZXcgWE1MU2VyaWFsaXplcjtyZXR1cm4gbmV3IEJsb2IoW2Quc2VyaWFsaXplVG9TdHJpbmcoYSldLHt0eXBlOiJpbWFnZS9zdmcreG1sIn0pfWRvd25sb2Fk''@;'; put 'put ''U1ZHKCl7aWYoQk4oIiNncmFwaCIpLnJlc2V0Wm9vbSgpLG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKHRoaXMuZ2V0U1ZHQmxvYigpLHRoaXMuY29uc3RydWN0TmFtZSgic3ZnIikpO2Vsc2V7bGV0''@;'; put 'put ''IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldFNWR1VSTCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJzdmciKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfX1kb3du''@;'; put 'put ''bG9hZFBORygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe0JOKCIjZ3JhcGgiKS5yZXNldFpvb20oKSwkRXQuc2F2ZVN2Z0FzUG5nKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNncmFwaCBzdmciKSxhLmNvbnN0cnVjdE5hbWUoInBuZyIpKX0pKCl9ZG93bmxvYWRDU1YoKXts''@;'; put 'put ''ZXQgYT10aGlzLmZsYXRkYXRhO2NvbnN0IGQ9KHJlLGNlKT0+bnVsbD09PWNlPyIiOmNlLGg9T2JqZWN0LmtleXMoYVswXSk7bGV0IGY9YS5tYXAocmU9PmgubWFwKGNlPT5KU09OLnN0cmluZ2lmeShyZVtjZV0sZCkpLmpvaW4oIiwiKSk7Zi51bnNoaWZ0KGguam9pbigiLCIpKTtsZXQgdj1m''@;'; put 'put ''LmpvaW4oIlxyXG4iKTt2YXIgTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksRD1uZXcgQmxvYihbdl0se3R5cGU6InRleHQvY3N2In0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKEQs''@;'; put 'put ''dGhpcy5jb25zdHJ1Y3ROYW1lKCJjc3YiKSk7ZWxzZXt2YXIgWj13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChEKTtNLmhyZWY9WixNLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgiY3N2IiksTS5jbGljaygpLHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKFopLE0ucmVtb3ZlKCl9''@;'; put 'put ''fWdldERvdFVybCgpe2xldCBkPW5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KTtyZXR1cm4gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZCl9Z2V0RG90QmxvYigpe3JldHVybiBuZXcgQmxvYihbdGhpcy52aXpJbnB1dF0se3R5cGU6InRleHQvcGxhaW4i''@;'; put 'put ''fSl9ZG93bmxvYWREb3QoKXtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYih0aGlzLmdldERvdEJsb2IoKSx0aGlzLmNvbnN0cnVjdE5hbWUoInR4dCIpKTtlbHNle2xldCBhPWRvY3VtZW50LmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhpcy5nZXREb3RVcmwoKSxhLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgidHh0IiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKX19c2hvd1N2Zygpe3dpbmRvdy5v''@;'; put 'put ''cGVuKHRoaXMuZ2V0U1ZHVVJMKCksIl9ibGFuayIpfWJ1aWxkR3JhcGgoYSl7dGhpcy5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksdGhpcy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMCxzZXRUaW1lb3V0KCgpPT57Qk4oIiNncmFwaCIpLnpvb20oITApLmFkZElt''@;'; put 'put ''YWdlKCJodHRwczovL2RhdGFjb250cm9sbGVyLmlvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIwLzAxL2ZjMS5wbmciLCIzMHB4IiwiMzBweCIpLnJlbmRlckRvdCh0aGlzLnZpeklucHV0LCgpPT57dGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmlkbG9va3VwJiZ0aGlzLm1ha2VHcmFwaExp''@;'; put 'put ''bmthYmxlKHRoaXMuaWRsb29rdXApLGEmJmEoKX0pfSwxMDApfWNvbnN0cnVjdE5hbWUoYSl7bGV0IGQ9IiIsaD0iIixmPSIiLHY9eFR0KCkuZm9ybWF0KCJZWU1NRERfSEhtbSIpO2lmKHRoaXMubGlicmFyeUxpc3QmJnRoaXMubGlicmFyeUxpc3QubGVuZ3RoKXtsZXQgTT10aGlzLmxpYnJh''@;'; put 'put ''cnlMaXN0LmZpbmQoRD0+RC5MSUJSQVJZSUQ9PXRoaXMubGliKTtNJiYoZD1gXyR7TS5MSUJSQVJZTkFNRX1gKX1pZih0aGlzLnRhYmxlc0xpc3QmJnRoaXMudGFibGVzTGlzdC5sZW5ndGgpe2xldCBNPXRoaXMudGFibGVzTGlzdC5maW5kKEQ9PkQuVEFCTEVVUkk9PXRoaXMudGFibGUpO00m''@;'; put 'put ''JihoPWBfJHtNLlRBQkxFTkFNRX1gKX1pZih0aGlzLmNvbHVtbnNMaXN0JiZ0aGlzLmNvbHVtbnNMaXN0Lmxlbmd0aCl7bGV0IE09dGhpcy5jb2x1bW5zTGlzdC5maW5kKEQ9PkQuQ09MVVJJPT10aGlzLmNvbHVtbik7TSYmKGY9YF8ke00uQ09MTkFNRX1gKX1yZXR1cm5gJHt0aGlzLmRpcmVj''@;'; put 'put ''dGlvblRleHQoKX0ke2R9JHtofSR7Zn1fJHt2fS4ke2F9YH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh1MSksR2UoQnMpLEdlKEN1KSxHZShMcyksR2UoZmgpLEdlKHZjKSxHZShTZCksR2UoU3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21w''@;'; put 'put ''PVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1saW5lYWdlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo1OCx2YXJzOjExLGNvbnN0czpbWyJtYXhEZXB0aERvdCIsIiJdLFsibWF4RGVwdGgiLCIiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2Vh''@;'; put 'put ''cmNoVHJlZUlucHV0IiwiIl0sWzMsInNjcm9sbGVkVG9Cb3R0b20iXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIl0s''@;'; put 'put ''WyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciIsImQtZmxleCIsImZsZXgtY29sdW1uIl0s''@;'; put 'put ''WzEsImJpZ2xpbmVhZ2Utcm93IiwibWItMGkiXSxbInR5cGUiLCJudW1iZXIiLCJtaW4iLCIxIiwicGxhY2Vob2xkZXIiLCJNYXggZGVwdGggdmFsdWUiLDEsImNsci1pbnB1dCIsIm1heC1kZXB0aC1pbnB1dCJdLFsxLCJtYi0yMCJdLFsxLCJiaWdsaW5lYWdlLXJvdyJdLFsidHlwZSIsImJ1''@;'; put 'put ''dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwibXQtMy1uZWdhdGl2ZSIsMywiZGlzYWJsZWQiXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFsiY2xyUG9z''@;'; put 'put ''aXRpb24iLCJib3R0b20tbGVmdCIsNCwiY2xySWZPcGVuIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBs''@;'; put 'put ''ZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJj''@;'; put 'put ''bHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMs''@;'; put 'put ''ImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxh''@;'; put 'put ''Y2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiwiaWQiXSxbInNoYXBlIiwidGFibGUiXSxbImFwcFN0ZWFsRm9j''@;'; put 'put ''dXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiQ29sdW1ucyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwib2Jq''@;'; put 'put ''ZWN0cyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNkcy10ZXh0Iiwi''@;'; put 'put ''c2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJmb3JtLWJsb2NrIiwic3ciLCJwb3Np''@;'; put 'put ''dGlvbi1yZWxhdGl2ZSIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJsaW5hZ2UtdGl0bGUtd3JhcHBlciIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImZvbnQtd2VpZ2h0LWJvbGQiLCJwb3NpdGlvbi1hYnNvbHV0ZSJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEy''@;'; put 'put ''IHRleHQtY2VudGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIiw0LCJuZ0lmIl0sWzMsIm10LTIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgcGItMTAi''@;'; put 'put ''LDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJwYi0xMCJdLFszLCJyb3V0ZXJMaW5rIl0sWzEsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1lbmQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwibXItNSIs''@;'; put 'put ''MywiY2xpY2siXSxbMSwiYnRuLWdyb3VwIiwiZGlyZWN0aW9uIiwiZC1ibG9jayJdLFsxLCJyYWRpbyIsImJ0biIsMywiY2xpY2siXSxbInR5cGUiLCJyYWRpbyIsIm5hbWUiLCJidG4tZ3JvdXAtZGVtby1yYWRpb3MiLDMsImNoZWNrZWQiXSxbMSwibXItMTAiXSxbImNsckRyb3Bkb3duVHJp''@;'; put 'put ''Z2dlciIsIiIsMSwiYnRuIiwiYnRuLWluZm8tb3V0bGluZSIsMywiZGlzYWJsZWQiXSxbImNsYXNzIiwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsiY2xy''@;'; put 'put ''RHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsInJlZnJlc2hDYWNoZSIsMywiY2hhbmdlIiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwi''@;'; put 'put ''XSxbMSwidGV4dC1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImdyYXBoLXJlbmRlci1zcGlubmVyIl0sWyJjbGFzcyIsInNw''@;'; put 'put ''aW5uZXIgc3Bpbm5lci1zbSIsNCwibmdJZiJdLFsiaWQiLCJncmFwaCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO2RlKDAsImFwcC1zaWRlYmFyIiw0KSxGdCgic2Nyb2xsZWRUb0JvdHRvbSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5sb2Fk''@;'; put 'put ''TW9yZUxpYnJhcmllcygpKX0pLGRlKDEsImNsci10cmVlIiksZ3QoMixYRXQsNiwzLCJjbHItdHJlZS1ub2RlIiw1KSgzLHNUdCwyLDEsIm5nLWNvbnRhaW5lciIsNiksaGUoKSxndCg0LGxUdCwzLDAsImRpdiIsNyksaGUoKSxkZSg1LCJkaXYiLDgpKDYsImRpdiIsOSksZ3QoNyxjVHQsNCww''@;'; put 'put ''LCJkaXYiLDEwKSg4LENUdCw4LDQsIm5nLWNvbnRhaW5lciIsMTEpLGhlKCkoKSxkZSg5LCJjbHItbW9kYWwiLDEyKSgxMCwiaDMiLDEzKSxMZSgxMSwiTGltaXQgRGVwdGgiKSxoZSgpLGRlKDEyLCJkaXYiLDE0KSgxMywicCIpLExlKDE0LCJFbnRlciB0aGUgZGVwdGggbnVtYmVyIHlvdSB3''@;'; put 'put ''b3VsZCBsaWtlIHRvIGxpbWl0IERPVCByZW5kZXJpbmcgdG86IiksaGUoKSgpLGRlKDE1LCJkaXYiLDE1KSgxNiwiZGl2IiwxNiksR3QoMTcsImlucHV0IiwxNywwKSxoZSgpLGRlKDE5LCJjbHItY29udHJvbC1oZWxwZXIiLDE4KSxMZSgyMCwiVG8gcmVuZGVyIHdpdGggdW5saW1pdGVkIGRl''@;'; put 'put ''cHRoLCBsZWF2ZSB0aGUgaW5wdXQgZW1wdHkiKSxoZSgpLGRlKDIxLCJkaXYiLDE5KSgyMiwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmxpbWl0RG90RGVwdGg9ITEpfSksTGUoMjMsIiBDYW5jZWwgIiksaGUoKSxkZSgyNCwiYnV0dG9uIiwy''@;'; put 'put ''MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGYpO2NvbnN0IE09aGEoMTgpO3JldHVybiBoLnJlc3VibWl0V2l0aE1heERlcHRoKE0udmFsdWUpLEN0KGgubGltaXREb3REZXB0aD0hMSl9KSxMZSgyNSwiIFJlc3VibWl0ICIpLGhlKCkoKSgpKCksZGUoMjYsImNsci1tb2RhbCIsMTIpKDI3''@;'; put 'put ''LCJoMyIsMTMpLExlKDI4LCJXYXJuaW5nIiksaGUoKSxkZSgyOSwiZGl2IiwxNCkoMzAsInAiKSxMZSgzMSksaGUoKSgpLGRlKDMyLCJkaXYiLDE1KSgzMywiZGl2IiwxOSkoMzQsInAiKSxMZSgzNSwiUmVuZGVyIGFueXdheSAodGhpcyBtYXkgdGFrZSBhIGxvbmcgdGltZSkiKSxoZSgpLGRl''@;'; put 'put ''KDM2LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguY29udGludWVSZW5kZXJpbmdHcmFwaCgpKX0pLExlKDM3LCIgUmVuZGVyICIpLGhlKCkoKSxkZSgzOCwiZGl2IiwxOSkoMzksInAiKSxMZSg0MCwiRG93bmxvYWQgdGhlIHJlc3VsdCAoUE5H''@;'; put 'put ''ICYgU1ZHIHJlcXVpcmUgcmVuZGVyaW5nKSIpLGhlKCksZGUoNDEsImNsci1kcm9wZG93biIpKDQyLCJidXR0b24iLDIxKSxMZSg0MywiIERvd25sb2FkICIpLEd0KDQ0LCJjbHItaWNvbiIsMjIpLGhlKCksZ3QoNDUsTVR0LDYsMSwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSxoZSgpKCksZGUo''@;'; put 'put ''NDYsImRpdiIsMTkpKDQ3LCJwIiksTGUoNDgsIlJlc3VibWl0IHdpdGggYSBtYXgtZGVwdGggKHNwZWNpZnkgZGVwdGgpIiksaGUoKSxHdCg0OSwiaW5wdXQiLDE3LDEpLGRlKDUxLCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoZik7Y29uc3QgTT1oYSg1MCk7cmV0dXJu''@;'; put 'put ''IEN0KGgucmVzdWJtaXRXaXRoTWF4RGVwdGgoTS52YWx1ZSkpfSksTGUoNTIsIiBSZXN1Ym1pdCAiKSxoZSgpKCksZGUoNTMsImRpdiIsMTkpKDU0LCJwIiksTGUoNTUsIkNhbmNlbCB0aGlzIHN1Ym1pc3Npb24iKSxoZSgpLGRlKDU2LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd0KGYpLEN0KGguY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSl9KSxMZSg1NywiIENhbmNlbCAiKSxoZSgpKCkoKSgpfTImZCYmKGZlKDIpLE1lKCJuZ0lmIixoLmxpYnJhcnlMaXN0KSxmZSgpLE1lKCJuZ0Zvck9mIixoLmxpYnJhcnlMaXN0KSxmZSgpLE1lKCJuZ0lmIixoLmxp''@;'; put 'put ''YnJhcmllc1BhZ2luZyksZmUoMyksTWUoIm5nSWYiLCFoLmNvbHVtbiYmIWgudGFibGUpLGZlKCksTWUoIm5nSWYiLGguY29sdW1ufHxoLnRhYmxlKSxmZSgpLE1lKCJjbHJNb2RhbE9wZW4iLGgubGltaXREb3REZXB0aCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSgxNyksTWUoImNsck1v''@;'; put 'put ''ZGFsT3BlbiIsbnVsbCE9PWgubGFyZ2VEb3RGaWxlTGluZXMpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNSksRHIoIiBUaGUgZ2VuZXJhdGVkIGRvdCBmaWxlIGhhcyAiLGgubGFyZ2VEb3RGaWxlTGluZXMsIiBsaW5lcy4gUmVuZGVyaW5nIG1heSB0YWtlIGEgbG9uZyB0aW1lLCBob3cg''@;'; put 'put ''d291bGQgeW91IGxpa2UgdG8gcHJvY2VlZD8gIiksZmUoMTEpLE1lKCJkaXNhYmxlZCIsIWguY29sdW1uJiYhaC50YWJsZSkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLGMxLHFsLE1kLG5sLCRzLEVoLFBkLGZnLEhsLG91LEt1LGowLEwyLGRzLGpMLElkLFNoLFoxLHNnLGc3LG03LFZ5LGk0LHI0''@;'; put 'put ''XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEVUdD0oKT0+WzEwLDIwLDUwLDEwMF07ZnVuY3Rpb24gVFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwxNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZNKCJ2YWx1ZSIsYSksZmUoKSxE''@;'; put 'put ''cigiICIsYSwiICIpfX1mdW5jdGlvbiBBVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyMCl9ZnVuY3Rpb24ga1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4g''@;'; put 'put ''aC5tZXRhRGF0YVNlYXJjaD0iIixDdChoLm1ldGFMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBEVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSkoMSwiZGl2IiwxNikoMiwiaW5wdXQiLDE3LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixm''@;'; put 'put ''dW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYubWV0YURhdGFTZWFyY2gsaCl8fChmLm1ldGFEYXRhU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLm1ldGFMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQs''@;'; put 'put ''QVR0LDEsMCwiY2xyLWljb24iLDE4KSg1LGtUdCwxLDAsImNsci1pY29uIiwxOSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubWV0YURhdGFTZWFyY2gpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJu''@;'; put 'put ''Z0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gSVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjMpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdCx2PVJlKCk7cmV0dXJuIEN0KHYudHJlZU5v''@;'; put 'put ''ZGVDbGlja2VkKGgsZix2Lm1ldGFEYXRhTGlzdCkpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDI0KSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdCxmPVJlKCk7cmV0dXJuIGYubWV0YURhdGFJZD1oLklELEN0KGYubWV0YURhdGFPbkNsaWNrKGYubWV0YURhdGFJZCxoKSl9KSxHdCgyLCJjbHItaWNvbiIsMjUpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''UmUoKS4kaW1wbGljaXQ7cGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLERyKCIgIixhLklELCIgIil9fWZ1bmN0aW9uIFJUdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsSVR0LDQsMywiY2xyLXRy''@;'; put 'put ''ZWUtbm9kZSIsMjIpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBMVHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDI2KSxHdCgxLCJjbHItaWNvbiIsMjcpLGRlKDIsInAiLDI4KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBh''@;'; put 'put ''IHR5cGUgIiksaGUoKSgpKX1mdW5jdGlvbiBPVHQoYyxsKXsxJmMmJihkZSgwLCJoNCIpLExlKDEsIkxvYWRpbmcgbWV0YWRhdGEgdHlwZXMiKSxoZSgpKX1mdW5jdGlvbiBQVHQoYyxsKXsxJmMmJihkZSgwLCJoNCIpLExlKDEsIkxvYWRpbmcgbWV0YWRhdGEgb2JqZWN0cyIpLGhlKCkpfWZ1''@;'; put 'put ''bmN0aW9uIEZUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsT1R0LDIsMCwiaDQiLDMxKSgyLFBUdCwyLDAsImg0IiwzMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nSWYiLGEubWV0YXR5cGVzTG9hZGluZyksZmUoKSxNZSgibmdJZiIsIWEubWV0YXR5cGVz''@;'; put 'put ''TG9hZGluZyl9fWZ1bmN0aW9uIEhUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjkpKDEsInNwYW4iLDMwKSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGd0KDMsRlR0LDMsMiwiZGl2IiwzMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMyksTWUoIm5nSWYiLGEubG9hZGluZyl9''@;'; put 'put ''fWZ1bmN0aW9uIE5UdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzgpKDEsImlucHV0IiwzOSwxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgyKTtyZXR1cm4gbWkoZi5tZXRhT2JqZWN0U2VhcmNoLGgpfHwoZi5tZXRhT2Jq''@;'; put 'put ''ZWN0U2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5tZXRhT2JqZWN0T25GaWx0ZXIoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCkscGkoIm5nTW9kZWwiLGEubWV0YU9iamVjdFNlYXJjaCl9fWZ1bmN0aW9u''@;'; put 'put ''IFZUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDQzKX1mdW5jdGlvbiBCVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNSl9ZnVuY3Rpb24galR0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsNTQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtmZSgpLERy''@;'; put 'put ''KCIgIixhLlVSSSwiICIpfX1mdW5jdGlvbiB6VHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2IiksZ3QoMyxWVHQsMSwwLCJjbHItaWNvbiIsNTEpKDQsQlR0LDEsMCwiY2xyLWljb24iLDUyKSxMZSg1KSxoZSgpLGd0KDYsalR0LDIs''@;'; put 'put ''MSwicCIsNTMpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJjbHJFeHBhbmRhYmxlIiwhMCksZmUoKSxUcigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLGZlKDIpLE1lKCJuZ0lmIiwhYS5jb3VudCksZmUoKSxNZSgibmdJZiIsYS5jb3VudCksZmUoKSxEcigiICIsYS5k''@;'; put 'put ''aXNwbGF5LCIgIiksZmUoKSxNZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiBVVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZSIsNDcpLGd0KDEselR0LDcsNywiY2xyLXRyZWUtbm9kZSIsNDgpLGVsKDIsImFzeW5jIiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDYpO01lKCJjbHJM''@;'; put 'put ''YXp5IiwhMCksZmUoKSxNZSgiY2xyUmVjdXJzaXZlRm9yT2YiLERjKDIsMyxhLnJvb3QkKSkoImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIixhLmdldENoaWxkcmVuKX19ZnVuY3Rpb24gWlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWFjY29yZGlvbi1jb250ZW50IiksZ3QoMSxVVHQs''@;'; put 'put ''Myw1LCJjbHItdHJlZSIsNDYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSgpLE1lKCJuZ0lmIixhLnNob3dBY2MpfX1mdW5jdGlvbiBXVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItYWNjb3JkaW9uLXBhbmVsIiw0MiksRnQoImNsckFjY29yZGlvblBhbmVsT3Bl''@;'; put 'put ''bkNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdCx2PVJlKDMpO3JldHVybiBDdChoP3YucGFuZWxDaGFuZ2UoaCxmKToiIil9KSxkZSgxLCJjbHItYWNjb3JkaW9uLXRpdGxlIiksR3QoMiwiY2xyLWljb24iLDQzKSxMZSgzKSxkZSg0LCJwIiw0NCksTGUo''@;'; put 'put ''NSksaGUoKSgpLGd0KDYsWlR0LDIsMSwiY2xyLWFjY29yZGlvbi1jb250ZW50Iiw0NSksaGUoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoMyksRHIoIiAiLGEuTkFNRSwiICIpLGZlKDIpLHdyKGEuSUQpfX1mdW5jdGlvbiBZVHQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgx''@;'; put 'put ''LFdUdCw3LDIsImNsci1hY2NvcmRpb24tcGFuZWwiLDQxKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gR1R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0MCkoMSwiY2xyLWFjY29yZGlvbiIpLGd0KDIsWVR0LDIs''@;'; put 'put ''MSwibmctY29udGFpbmVyIiw3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgibmdGb3JPZiIsYS5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5jdGlvbiAkVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw0Myl9ZnVuY3Rpb24gS1R0KGMsbCl7MSZjJiZHdCgwLCJjbHIt''@;'; put 'put ''aWNvbiIsMjUpfWZ1bmN0aW9uIHFUdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDU0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoKSxEcigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gWFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIsNDkp''@;'; put 'put ''KDEsImRpdiIsNTApKDIsImRpdiIpLGd0KDMsJFR0LDEsMCwiY2xyLWljb24iLDUxKSg0LEtUdCwxLDAsImNsci1pY29uIiw1MiksTGUoNSksaGUoKSxndCg2LHFUdCwyLDEsInAiLDUzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgiY2xyRXhwYW5kYWJsZSIsITApLGZl''@;'; put 'put ''KCksVHIoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxmZSgyKSxNZSgibmdJZiIsIWEuY291bnQpLGZlKCksTWUoIm5nSWYiLGEuY291bnQpLGZlKCksRHIoIiAiLGEuZGlzcGxheSwiICIpLGZlKCksTWUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rpb24gSlR0KGMsbCl7aWYoMSZjJiYoZGUo''@;'; put 'put ''MCwiY2xyLXRyZWUiLDQ3KSxndCgxLFhUdCw3LDcsImNsci10cmVlLW5vZGUiLDQ4KSxlbCgyLCJhc3luYyIpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSg0KTtNZSgiY2xyTGF6eSIsITApLGZlKCksTWUoImNsclJlY3Vyc2l2ZUZvck9mIixEYygyLDMsYS5yb290JCkpKCJjbHJSZWN1cnNpdmVG''@;'; put 'put ''b3JHZXRDaGlsZHJlbiIsYS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIFFUdChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImRpdiIsNTUpLEd0KDIsImNsci1pY29uIiw0MyksZGUoMywiZGl2Iiw1NikoNCwicCIsNTcpLExlKDUpLGhlKCksZGUoNiwicCIsNTgpLExlKDcpLGhlKCkoKSgpLGd0''@;'; put 'put ''KDgsSlR0LDMsNSwiY2xyLXRyZWUiLDQ2KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSgzKTtmZSg1KSxEcigiICIsYS5OQU1FLCIgIiksZmUoMiksRHIoIiAiLGEuSUQsIiAiKSxmZSgpLE1lKCJuZ0lmIixkLnNob3dBY2MpfX1mdW5jdGlvbiBlQXQoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiLDQwKSxndCgxLFFUdCw5LDMsIm5nLWNvbnRhaW5lciIsNyksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm5nRm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gdEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRnLXJvdyIpKDEsImNs''@;'; put 'put ''ci1kZy1jZWxsIiksTGUoMiksaGUoKSxkZSgzLCJjbHItZGctY2VsbCIpLExlKDQpLGhlKCksZGUoNSwiY2xyLWRnLWNlbGwiKSxMZSg2KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLlRZUEUpLGZlKDIpLHdyKGEuTkFNRSksZmUoMiksd3IoYS5WQUxVRSl9''@;'; put 'put ''fWZ1bmN0aW9uIG5BdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kYXRhZ3JpZCIsNTkpKDEsImNsci1kZy1jb2x1bW4iKSxMZSgyLCIgVFlQRSAiKSxHdCgzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGhlKCksZGUoNCwiY2xyLWRnLWNvbHVtbiIpLExlKDUsIiBOQU1FICIpLEd0KDYs''@;'; put 'put ''ImNsci1kZy1zdHJpbmctZmlsdGVyIiw2MCksaGUoKSxkZSg3LCJjbHItZGctY29sdW1uIiksTGUoOCwiIFZBTFVFICIpLEd0KDksImNsci1kZy1zdHJpbmctZmlsdGVyIiw2MCksaGUoKSxndCgxMCx0QXQsNywzLCJjbHItZGctcm93Iiw2MSksZGUoMTEsImNsci1kZy1mb290ZXIiKSgxMiwi''@;'; put 'put ''Y2xyLWRnLXBhZ2luYXRpb24iLDYyLDIpKDE0LCJjbHItZGctcGFnZS1zaXplIiw2MyksTGUoMTUsIkF0dHJpYnV0ZXMgcGVyIHBhZ2UiKSxoZSgpLExlKDE2KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPWhhKDEzKSxkPVJlKDIpO2ZlKDMpLE1lKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC50eXBl''@;'; put 'put ''RmlsdGVyKSxmZSgzKSxNZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQubmFtZUZpbHRlciksZmUoMyksTWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnZhbHVlRmlsdGVyKSxmZSgpLE1lKCJjbHJEZ0l0ZW1zT2YiLGQubWV0YU9iamVjdEF0dHJpYnV0ZXMpLGZlKDIpLE1lKCJjbHJEZ1BhZ2VTaXpl''@;'; put 'put ''IiwxMCksZmUoMiksTWUoImNsclBhZ2VTaXplT3B0aW9ucyIsR3MoOSxFVHQpKSxmZSgyKSxWZigiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIEF0dHJpYnV0ZXMgIil9fWZ1bmN0aW9uIHJBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRp''@;'; put 'put ''diIsMzIpKDEsImRpdiIsMzMpLGd0KDIsTlR0LDMsMSwiZGl2IiwzNCksR3QoMywiYnIiKSxndCg0LEdUdCwzLDEsImRpdiIsMzUpKDUsZUF0LDIsMSwiZGl2IiwzNSksaGUoKSxkZSg2LCJkaXYiLDM2KSg3LCJoMyIpLExlKDgpLGhlKCksZ3QoOSxuQXQsMTcsMTAsImNsci1kYXRhZ3JpZCIs''@;'; put 'put ''MzcpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoMiksTWUoIm5nSWYiLGEubWV0YU9iamVjdExpc3QmJiFhLm9iamVjdFJvdXRlKSxmZSgyKSxNZSgibmdJZiIsIWEub2JqZWN0VmlldyksZmUoKSxNZSgibmdJZiIsYS5vYmplY3RWaWV3KSxmZSgzKSx3cihhLmFzc29PYmplY3RTZWxl''@;'; put 'put ''Y3RlZCksZmUoKSxNZSgibmdJZiIsYS5zaG93VGFibGUpfX1sZXQgWnRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91''@;'; put 'put ''dGVyPXYsdGhpcy5yb3V0ZT1NLHRoaXMubWV0YURhdGFTZWFyY2g9IiIsdGhpcy5tZXRhT2JqZWN0U2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdEFzc29jaWF0aW9ucz1bXSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2hvd0FjYz0hMSx0aGlz''@;'; put 'put ''Lm1ldGFEYXRhSWQ9IiIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMCx0aGlzLm1ldGFPYmplY3RTaXplPTIwMCx0aGlzLmFzc29UeXBlU2VsZWN0ZWQ9IiIsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiIsdGhpcy5yZXBvc2l0b3J5PSIiLHRoaXMub2JqZWN0Um91''@;'; put 'put ''dGU9ITEsdGhpcy5zaG93RGF0YT0hMSx0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5nZXRDaGlsZHJlbj1EPT5ELmNvdW50P2ZvKEQuZGV0YWlscyk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6RC5BU1NP''@;'; put 'put ''Q1VSSX1dfSkudGhlbihyZT0+e3RoaXMuc2hvd1RhYmxlPSEwLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9cmUuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXMsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9RC5OQU1FO2xldCBjZT10aGlzLnJvdXRlci51cmw7cmV0dXJuIHRoaXMubG9jYXRp''@;'; put 'put ''b24ucmVwbGFjZVN0YXRlKHRoaXMub2JqZWN0Um91dGU/Y2Uuc2xpY2UoMCxjZS5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3QvIitELkFTU09DVVJJLnNsaWNlKDErRC5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKTpjZSsiL29iamVjdC8iK0QuQVNTT0NVUkkuc2xpY2UoMStELkFTU09D''@;'; put 'put ''VVJJLmluZGV4T2YoIlxcIikpKSx0aGlzLmdldEFzc29zaWF0aW9uc0NvdW50KHJlLmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMpfSksdGhpcy5kZWJvdW5jZT0hMX1uZ09uSW5pdCgpe0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L21ldGFkYXRhIix0aGlzLnJvdXRlci51''@;'; put 'put ''cmwuaW5jbHVkZXMoIi92aWV3L21ldGFkYXRhL29iamVjdC8iKSYmKHRoaXMub2JqZWN0Um91dGU9ITAsdGhpcy5vYmplY3RWaWV3PSEwKSx0aGlzLnBhZ2VTaXplPTUsS24ubWV0YWRhdGEubWV0YURhdGFMaXN0JiZLbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzJiYhdGhpcy5vYmplY3RS''@;'; put 'put ''b3V0ZT8odGhpcy5tZXRhRGF0YUxpc3Q9S24ubWV0YWRhdGEubWV0YURhdGFMaXN0LHRoaXMucmVwb3NpdG9yaWVzPUtuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMsdGhpcy5yZXBvc2l0b3J5PUtuLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5t''@;'; put 'put ''ZXRhdHlwZXNMb2FkaW5nPSExLHRoaXMubWV0YURhdGFTZWFyY2g9S24ubWV0YWRhdGEubWV0YURhdGFTZWFyY2gpOih0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhdHlwZXMiLG51bGwpLnRoZW4oYT0+e3RoaXMubWV0YURhdGFMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnR5''@;'; put 'put ''cGVzLEtuLm1ldGFkYXRhLm1ldGFEYXRhTGlzdD10aGlzLm1ldGFEYXRhTGlzdCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSExfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YXJlcG9zIixudWxsKS50aGVuKGE9PntsZXQgZD0hMTt0aGlzLnJl''@;'; put 'put ''cG9zaXRvcmllcz1bXTtmb3IobGV0IGg9MDtoPGEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zLmxlbmd0aDtoKyspdGhpcy5yZXBvc2l0b3JpZXMucHVzaChhLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvc1toXS5OQU1FKSwiRm91bmRhdGlvbiI9PT1hLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBv''@;'; put 'put ''c1toXS5OQU1FJiYoZD0hMCk7aWYodGhpcy5yZXBvc2l0b3J5PWQ/IkZvdW5kYXRpb24iOmEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zWzBdLk5BTUUsS24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcz10aGlzLnJlcG9zaXRvcmllcyxLbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9''@;'; put 'put ''dGhpcy5yZXBvc2l0b3J5LHRoaXMub2JqZWN0Um91dGUpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuc2hvd0RhdGE9ITA7bGV0IGg9IiIsZj10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5vYmplY3RJRDt0aGlzLm1ldGFPYmplY3RMaXN0PVtdLHRoaXMubWV0YU9i''@;'; put 'put ''amVjdExpc3QucHVzaCh7SUQ6ZixOQU1FOmh9KSx0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdE9uQ2xpY2sodGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0uSUQsdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0pfX0pKX10cmVlTm9k''@;'; put 'put ''ZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9''@;'; put 'put ''KX1tZXRhRGF0YU9uQ2xpY2soYSxkKXt0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi92aWV3L21ldGFkYXRhIiksdGhpcy5zaG93RGF0YT0hMSx0aGlzLmxvYWRpbmc9ITAsdGhpcy5zZWxlY3RtZXRhRGF0YShhLGQpfW1ldGFPYmplY3RPbkNsaWNrKGEs''@;'; put 'put ''ZCl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zZWxlY3RtZXRhT2JqZWN0KGEsZCl9c2VsZWN0bWV0YURhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLnNhc1Nl''@;'; put 'put ''cnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhb2JqZWN0cyIse1NBU0NvbnRyb2xUYWJsZTpbe21ldGF0eXBlOmEscmVwbzpoLnJlcG9zaXRvcnl9XX0pLnRoZW4odj0+e2gubWV0YU9iamVjdExpc3Q9di5hZGFwdGVyUmVzcG9uc2Uub2JqZWN0cyxoLmdldE1ldGFPYmplY3RBdHRyaWJ1dGVz''@;'; put 'put ''KGgubWV0YU9iamVjdFNpemUpLGgubG9hZGluZz0hMSxoLmFzc29UeXBlU2VsZWN0ZWQ9YSxoLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSxoLnNob3dEYXRhPSEwfSl9KSgpfXNlbGVjdG1ldGFPYmplY3QoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLnNhc1Nl''@;'; put 'put ''cnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9di5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zLGgucm9vdCQ9Zm8oaC5nZXRBc3Nvc2lhdGlvbnND''@;'; put 'put ''b3VudCh2LmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMpKSxoLnNob3dBY2M9ITAsaC5zaG93VGFibGU9ITA7bGV0IE09di5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlcy5maW5kKFo9PiJOYW1lIj09PVouTkFNRSkuVkFMVUU7aC5hc3NvT2JqZWN0U2VsZWN0ZWQ9TSxkLk5BTUU9TTts''@;'; put 'put ''ZXQgRD1oLnJvdXRlci51cmw7aC5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaC5vYmplY3RSb3V0ZT9ELnNsaWNlKDAsRC5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3QvIithLnNsaWNlKDErYS5pbmRleE9mKCJcXCIpKTpEKyIvb2JqZWN0LyIrYS5zbGljZSgxK2EuaW5kZXhPZigiXFwi''@;'; put 'put ''KSkpLGgubWV0YU9iamVjdEF0dHJpYnV0ZXM9di5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlc30pfSkoKX1zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFp''@;'; put 'put ''bHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6YX1dfSkudGhlbih2PT57aC5tZXRhT2JqZWN0QXR0cmlidXRlcz12LmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1dGVzLGguc2hvd1RhYmxlPSEwfSl9KSgpfWdldEFzc29zaWF0aW9uc0NvdW50KGEpe2xldCBkPW5ldyBNYXA7Zm9yKGxl''@;'; put 'put ''dCBmIG9mIGEpe2QuaGFzKGYuQVNTT0MpfHxkLnNldChmLkFTU09DLHtjb3VudDowLGRldGFpbHM6W119KTtsZXQgdj1kLmdldChmLkFTU09DKTt2LmNvdW50Kyssdi5kZXRhaWxzLnB1c2goe0FTU09DVVJJOmYuQVNTT0NVUkksTkFNRTpmLk5BTUUsZGlzcGxheTpmLk5BTUUsVVJJOmYuQVNT''@;'; put 'put ''T0NVUkkuc2xpY2UoZi5BU1NPQ1VSSS5pbmRleE9mKCI6IikrMSl9KX1sZXQgaD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGYsdil7aC5wdXNoKHtBU1NPQzp2LGNvdW50OmYuY291bnQsZGV0YWlsczpmLmRldGFpbHMsZGlzcGxheTp2KyIgKCAiK2YuY291bnQrIiApIn0pfSksaH1z''@;'; put 'put ''ZXRUeXBlQXNzb3NpYXRpb25zKGEpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiB0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnMpaC5BU1NPQz09PWEmJmQucHVzaChoKTtyZXR1cm4gdGhpcy5hc3Nvc2lhdGlvbk5hbWVzPWQsZH1hc3Nvc2lhdGlvbk5hbWVPbkNsaWNrKGEpe3RoaXMuYXNzb09i''@;'; put 'put ''amVjdFNlbGVjdGVkPSIgLiAiLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zaG93VGFibGU9ITEsdGhpcy5zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEpfW1ldGFMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubWV0YURh''@;'; put 'put ''dGFMaXN0LHRoaXMubWV0YURhdGFTZWFyY2gsIklEIiksS24ubWV0YWRhdGEubWV0YURhdGFTZWFyY2g9dGhpcy5tZXRhRGF0YVNlYXJjaH1tZXRhT2JqZWN0T25GaWx0ZXIoKXt0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuaGVscGVyU2VydmljZS5tZXRhT2JqZWN0T25GaWx0''@;'; put 'put ''ZXIodGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RTZWFyY2gsIk5BTUUiKSx0aGlzLmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKHRoaXMubWV0YU9iamVjdFNpemUpLEtuLm1ldGFkYXRhLm1ldGFPYmplY3RTZWFyY2g9dGhpcy5tZXRhT2JqZWN0U2VhcmNofWdldE1ldGFPYmpl''@;'; put 'put ''Y3RBdHRyaWJ1dGVzKGEpe2lmKHZvaWQgMCE9PXRoaXMubWV0YU9iamVjdExpc3QmJnRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoPmEpe2xldCBkPTAsaD0tMTtmb3IobGV0IGY9MDtmPHRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoO2YrKylpZigodm9pZCAwPT09dGhpcy5tZXRhT2JqZWN0''@;'; put 'put ''TGlzdFtmXS5oaWRkZW58fCExPT09dGhpcy5tZXRhT2JqZWN0TGlzdFtmXS5oaWRkZW4pJiZkKyssZD09PWEpe2g9ZjticmVha310aGlzLm1ldGFPYmplY3RTaG93TGlzdD0tMSE9PWg/dGhpcy5tZXRhT2JqZWN0TGlzdC5zbGljZSgwLGgpOnRoaXMubWV0YU9iamVjdExpc3R9ZWxzZSB0aGlz''@;'; put 'put ''Lm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0fXBhbmVsQ2hhbmdlKGEsZCl7dGhpcy5kZWJvdW5jZXx8KHRoaXMubWV0YU9iamVjdE9uQ2xpY2soZC5JRCxkKSx0aGlzLmRlYm91bmNlPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmRlYm91bmNlPSExfSw2MDApKX11cGRh''@;'; put 'put ''dGVTZWxlY3RlZFJlcG9zaXRvcnkoKXtLbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhpcy5yZXBvc2l0b3J5fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZShCcyksR2UoU3UpLEdlKGZoKSxHZShMcyksR2UoQ3UpKX19''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tZXRhZGF0YSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTcsdmFyczo4LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaE9ialRyZWVJbnB1''@;'; put 'put ''dCIsIiJdLFsicGFnaW5hdGlvbiIsIiJdLFsxLCJyZXBvLWRyb3Bkb3duIl0sWyJjbHJTZWxlY3QiLCIiLCJpZCIsInJlcG9zaXRvcnkiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwic2VhcmNo''@;'; put 'put ''LW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudC1pIl0sWzEsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9h''@;'; put 'put ''ZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXJvdyBjbHItZmxleC1ncm93LTEiLDQsIm5nSWYiXSxbMywidmFsdWUiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vo''@;'; put 'put ''b2xkZXIiLCJzZWFyY2ggU0FTIFR5cGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxb''@;'; put 'put ''InNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxv''@;'; put 'put ''YWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNkcy10ZXh0''@;'; put 'put ''Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0lmIl0sWzEsImNsci1yb3ciLCJjbHItZmxleC1ncm93LTEiXSxbMSwiY2xyLWNvbC02Il0sWyJjbGFzcyIsInNlYXJjaC1pbnB1''@;'; put 'put ''dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvYmplY3RzLWNvbCIsNCwibmdJZiJdLFsxLCJjbHItY29sLTYiLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRl''@;'; put 'put ''ciIsInNlYXJjaCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsxLCJvYmplY3RzLWNvbCJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyQWNjb3JkaW9uUGFu''@;'; put 'put ''ZWxPcGVuQ2hhbmdlIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzEsImZsb2F0LXJpZ2h0Il0sWzQsImNscklmRXhwYW5kZWQiXSxbMywiY2xyTGF6eSIsNCwibmdJZiJdLFszLCJjbHJMYXp5Il0sWzMsImNsckV4cGFuZGFibGUiLDQsImNsclJlY3Vyc2l2ZUZvciIsImNsclJlY3Vyc2l2''@;'; put 'put ''ZUZvck9mIiwiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iXSxbMywiY2xyRXhwYW5kYWJsZSJdLFsxLCJmdWxsLXdpZHRoIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2NrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZsb2F0LXJpZ2h0IG9iamVjdC11''@;'; put 'put ''cmkiLDQsIm5nSWYiXSxbMSwiZmxvYXQtcmlnaHQiLCJvYmplY3QtdXJpIl0sWzEsImNvbHMtaGVhZCJdLFsxLCJvYmplY3QtdGV4dCJdLFsxLCJtLTAiLCJ3b3JkLWJyZWFrIiwibXItMjAiXSxbMSwiZmxvYXQtcmlnaHQiLCJtbC0zIl0sWzEsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxb''@;'; put 'put ''MywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwzKSgyLCJj''@;'; put 'put ''bHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksTGUoNCwiTWV0YWRhdGEgUmVwb3NpdG9yeSIpLGhlKCksZGUoNSwic2VsZWN0Iiw0KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmVwb3NpdG9yeSx2KXx8KGgucmVwb3NpdG9yeT12KSx2fSksRnQo''@;'; put 'put ''ImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC51cGRhdGVTZWxlY3RlZFJlcG9zaXRvcnkoKX0pLGd0KDYsVFR0LDIsMiwib3B0aW9uIiw1KSxoZSgpKCkoKSxkZSg3LCJjbHItdHJlZSIpLGd0KDgsRFR0LDYsMywiY2xyLXRyZWUtbm9kZSIsNikoOSxSVHQsMiwxLCJuZy1jb250YWluZXIi''@;'; put 'put ''LDcpLGhlKCkoKSxkZSgxMCwiZGl2Iiw4KSgxMSwiZGl2Iiw5KSgxMiwiaDMiLDEwKSxMZSgxMyksaGUoKSxndCgxNCxMVHQsNCwwLCJkaXYiLDExKSgxNSxIVHQsNCwxLCJkaXYiLDEyKSgxNixyQXQsMTAsNSwiZGl2IiwxMyksaGUoKSgpKSwyJmQmJihmZSg1KSxwaSgibmdNb2RlbCIsaC5y''@;'; put 'put ''ZXBvc2l0b3J5KSxmZSgpLE1lKCJuZ0Zvck9mIixoLnJlcG9zaXRvcmllcyksZmUoMiksTWUoIm5nSWYiLGgubWV0YURhdGFMaXN0KSxmZSgpLE1lKCJuZ0Zvck9mIixoLm1ldGFEYXRhTGlzdCksZmUoNCksd3IoaC5hc3NvVHlwZVNlbGVjdGVkKSxmZSgpLE1lKCJuZ0lmIiwhaC5sb2FkaW5n''@;'; put 'put ''JiYhaC5tZXRhT2JqZWN0TGlzdCksZmUoKSxNZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLE1lKCJuZ0lmIixoLnNob3dEYXRhKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsQTIsazIscWwsVDIsbmwsJHMsQW0sUWYsUjcsY08sSnksWHgsdU8sRW0sSGRlLFNwLEw3LHRfLFRtLGs3LHhtLEQ3LGRH''@;'; put 'put ''LEVoLFBkLFpkZSxIbCxqMCxCMWUsZHMsWjEsRTcsJHksRTFlLEZMLEExZSxUMWUsazFlLERZLGk0LHI0LEVNXSxlbmNhcHN1bGF0aW9uOjJ9KX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpO2Z1bmN0aW9uIGlBdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBhQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLnJvbGVT''@;'; put 'put ''ZWFyY2g9IiIsQ3QoaC5yb2xlTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gb0F0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3Qo''@;'; put 'put ''YSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLnJvbGVTZWFyY2gsaCl8fChmLnJvbGVTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkucm9sZUxpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxpQXQsMSwwLCJjbHItaWNvbiIsMTAp''@;'; put 'put ''KDUsYUF0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5yb2xlU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1''@;'; put 'put ''bmN0aW9uIHNBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5yb2xlT25DbGljayhoKSl9KSxkZSgxLCJwIiwxNiksR3QoMiwi''@;'; put 'put ''Y2xyLWljb24iLDE3KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0LGQ9UmUoKTtUcigiYWN0aXZlIixhLlJPTEVVUkk9PT1kLnJvbGVVcmkpLGZlKDMpLERyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIGxBdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0''@;'; put 'put ''KDEsc0F0LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBjQXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUo''@;'; put 'put ''KSgpKX1mdW5jdGlvbiB1QXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIGRBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMikoMSwidGQiLDMwKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMCksTGUoNCksaGUoKSxkZSg1''@;'; put 'put ''LCJ0ZCIsMzApLExlKDYpLGhlKCksZGUoNywidGQiLDMwKSxMZSg4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLlVSSU1FTSksZmUoMiksd3IoYS5NRU1CRVJOQU1FKSxmZSgyKSx3cihhLkVNQUlMKSxm''@;'; put 'put ''ZSgyKSx3cihhLk1FTUJFUkNSRUFURUQpLGZlKDIpLHdyKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIGhBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLExlKDUsIk5BTUUiKSxoZSgpKCksZGUoNiwidGQiLDI5''@;'; put 'put ''KSg3LCJiIiksTGUoOCwiRU1BSUwiKSxoZSgpKCksZGUoOSwidGQiLDI5KSgxMCwiYiIpLExlKDExLCJDUkVBVEVEIiksaGUoKSgpLGRlKDEyLCJ0ZCIsMzApKDEzLCJiIiksTGUoMTQsIlVQREFURUQiKSxoZSgpKCkoKSgpLGRlKDE1LCJ0Ym9keSIpLGd0KDE2LGRBdCw5LDUsInRyIiwzMSks''@;'; put 'put ''aGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMTYpLE1lKCJuZ0Zvck9mIixhLnJvbGVNZW1iZXJzKX19ZnVuY3Rpb24gZkF0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBHcm91cHMgUHJlc2VudCAhIiksaGUoKSl9ZnVuY3Rpb24gcEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwi''@;'; put 'put ''dHIiLDMyKSgxLCJ0ZCIsMzApLExlKDIpLGhlKCksZGUoMywidGQiLDMwKSxMZSg0KSxoZSgpLGRlKDUsInRkIiwzMCksTGUoNiksaGUoKSxkZSg3LCJ0ZCIsMzApLExlKDgpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O01lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9n''@;'; put 'put ''cm91cHMvIithLlVSSU1FTSksZmUoMiksd3IoYS5NRU1CRVJOQU1FKSxmZSgyKSx3cihhLkVNQUlMKSxmZSgyKSx3cihhLk1FTUJFUkNSRUFURUQpLGZlKDIpLHdyKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIGdBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOCkoMSwidGhlYWQi''@;'; put 'put ''KSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLExlKDUsIk5BTUUiKSxoZSgpKCksZGUoNiwidGQiLDI5KSg3LCJiIiksTGUoOCwiRU1BSUwiKSxoZSgpKCksZGUoOSwidGQiLDI5KSgxMCwiYiIpLExlKDExLCJDUkVBVEVEIiksaGUoKSgpLGRlKDEyLCJ0ZCIsMzApKDEzLCJiIiksTGUoMTQs''@;'; put 'put ''IlVQREFURUQiKSxoZSgpKCkoKSgpLGRlKDE1LCJ0Ym9keSIpLGd0KDE2LHBBdCw5LDUsInRyIiwzMSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMTYpLE1lKCJuZ0Zvck9mIixhLnJvbGVHcm91cHMpfX1mdW5jdGlvbiBtQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJk''@;'; put 'put ''aXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJ0YWJsZSIsMjIpKDQsInRib2R5IikoNSwidHIiKSg2LCJ0ZCIsMjMpKDcsInAiLDI0KSg4LCJiIiksTGUoOSksaGUoKSgpKCkoKSxkZSgxMCwidHIiKSgxMSwidGQiLDIzKSgxMiwiaSIpLExlKDEzKSxoZSgpKCkoKSgpKCkoKSgpLGRlKDE0LCJkaXYi''@;'; put 'put ''LDIwKSgxNSwiZGl2IiwyMSkoMTYsImRpdiIsMjUpKDE3LCJkaXYiKSgxOCwiaDMiKSxMZSgxOSksaGUoKSxndCgyMCx1QXQsMiwwLCJoNSIsNiksZGUoMjEsImRpdiIsMjYpLGd0KDIyLGhBdCwxNywxLCJ0YWJsZSIsMjcpLGhlKCkoKSxHdCgyMywiaHIiKSxkZSgyNCwiZGl2IikoMjUsImgz''@;'; put 'put ''IiksTGUoMjYpLGhlKCksZ3QoMjcsZkF0LDIsMCwiaDUiLDYpLGRlKDI4LCJkaXYiLDI2KSxndCgyOSxnQXQsMTcsMSwidGFibGUiLDI3KSxoZSgpKCksR3QoMzAsImJyIiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKCk7ZmUoOSksd3IoYS5yb2xlTmFtZSksZmUoNCksd3IoYS5yb2xl''@;'; put 'put ''RGVzYyksZmUoNiksRHIoIk1FTUJFUlMgKCIsYS5yb2xlTWVtYmVyc0NvdW50LCIpIiksZmUoKSxNZSgibmdJZiIsMD09YS5yb2xlTWVtYmVyc0NvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS5yb2xlTWVtYmVyc0NvdW50KSxmZSg0KSxEcigiR3JvdXBzICgiLGEucm9sZUdyb3Vwc0NvdW50''@;'; put 'put ''LCIpIiksZmUoKSxNZSgibmdJZiIsMD09YS5yb2xlR3JvdXBzQ291bnQpLGZlKDIpLE1lKCJuZ0lmIiwwIT1hLnJvbGVHcm91cHNDb3VudCl9fWxldCBTN2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1k''@;'; put 'put ''LHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLnJvbGVTZWFyY2g9IiIsdGhpcy5yb2xlVXJpPSIiLHRoaXMucm9sZU5hbWU9IiIsdGhpcy5yb2xlRGVzYz0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtVVJJPSIiLHRoaXMubG9hZGluZz0h''@;'; put 'put ''MX1uZ09uSW5pdCgpe0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvcm9sZXMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1VUkk9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMu''@;'; put 'put ''dXJpKSxLbi51c2VybmF2LnJvbGVMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMucm9sZXM9S24udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9S24udXNlcm5hdi5yb2xlU2VhcmNoKTp2b2lkIDA9PT1Lbi51c2VybmF2LnJvbGVMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhp''@;'; put 'put ''cy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlcz1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyxLbi51c2VybmF2LnJvbGVMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMucGFyYW1Q''@;'; put 'put ''cmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQgZD10aGlzLmZpbmRSb2xlKHRoaXMucm9sZXMsdGhpcy5wYXJhbVVSSSk7ITEhPT1kJiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xl''@;'; put 'put ''aWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBz''@;'; put 'put ''PWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1kLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZC5ST0xFREVTQ30pKX19KSk6''@;'; put 'put ''KHRoaXMucm9sZXM9S24udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9S24udXNlcm5hdi5yb2xlU2VhcmNoLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5yb2xlcz1hLmFkYXB0ZXJSZXNwb25zZS5yb2xl''@;'; put 'put ''cyxLbi51c2VybmF2LnJvbGVMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMucGFyYW1QcmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQgZD10aGlzLmZpbmRSb2xlKHRoaXMucm9sZXMsdGhpcy5wYXJhbVVSSSk7ITEhPT1kJiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuc2Fz''@;'; put 'put ''U2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJz''@;'; put 'put ''Q291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1kLlJPTEVVUkks''@;'; put 'put ''dGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZC5ST0xFREVTQ30pKX19KSl9cm9sZUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5yb2xlcyx0aGlzLnJvbGVTZWFyY2gsIlJPTEVOQU1FIiksS24udXNlcm5hdi5yb2xl''@;'; put 'put ''U2VhcmNoPXRoaXMucm9sZVNlYXJjaH1yb2xlT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkko''@;'; put 'put ''YS5ST0xFVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5ST0xFVVJJKSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDphLlJPTEVVUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYu''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5hZGFwdGVyUmVzcG9u''@;'; put 'put ''c2Uuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9YS5ST0xFVVJJLHRoaXMucm9sZU5hbWU9YS5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWEuUk9MRURFU0N9KX1maW5kUm9sZShhLGQpe2xldCBoPSExO3JldHVybiBhLmZvckVhY2goZj0+e2YuUk9MRVVSST09PWQmJihoPWYpfSksaH1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShCcyksR2UoU3UpLEdlKExzKSxHZShmaCksR2UoQ3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yb2xlIl1dLGhvc3RBdHRyczpbMSwiY29udGVu''@;'; put 'put ''dC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNz''@;'; put 'put ''IiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBSb2xlcyIsIm5hbWUiLCJpbnB1dCIs''@;'; put 'put ''ImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xp''@;'; put 'put ''Y2siXSxbMywiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwiYmxvY2tzLWdyb3VwIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLXJvdyJdLFsx''@;'; put 'put ''LCJjbHItY29sLTgiXSxbMSwidGFibGUiLCJyb2xlLWluZm8iXSxbMSwibGVmdCJdLFsxLCJyb2xlLWluZm8tdGV4dCJdLFsxLCJjYXJkIiwicm9sZS1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSBtZW1iZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUi''@;'; put 'put ''LCJtZW1iZXItdGFibGUiXSxbMSwid2lkdGgtMjUiXSxbMSwiIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiLDEpKDEsImNsci10cmVlIiksZ3QoMixv''@;'; put 'put ''QXQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLGxBdCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksZ3QoNSxjQXQsMywwLCJkaXYiLDUpKDYsbUF0LDMxLDgsImRpdiIsNiksaGUoKSksMiZkJiYoZmUoMiksTWUoIm5nSWYiLGgucm9sZXMpLGZlKCksTWUoIm5n''@;'; put 'put ''Rm9yT2YiLGgucm9sZXMpLGZlKDIpLE1lKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCksTWUoIm5nSWYiLGgucm9sZU1lbWJlcnMmJiFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxjMSxxbCxubCwkcyxFaCxQZCxIbCxaMSxpNCxyNF0sc3R5bGVzOlsiOjpuZy1kZWVwIGJvZHlbY2Rz''@;'; put 'put ''LXRoZW1lPWRhcmtdIC5yb2xle2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX06Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLnJvbGUtZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9OjpuZy1kZWVwIGJv''@;'; put 'put ''ZHlbY2RzLXRoZW1lPWRhcmtdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjk0MDRifTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1saWdodF0gLnJvbGUtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94''@;'; put 'put ''LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN306Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5yb2xlLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9OjpuZy1kZWVwIGJvZHlbY2RzLXRo''@;'; put 'put ''ZW1lPWxpZ2h0XSAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNn0uc2lkZWJhci1oZWlnaHR7aGVpZ2h0OjEwMCV9LnJvbGUtaW5mby10ZXh0e2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fS5yb2xlLWluZm97Ym9yZGVyOjFweCBzb2xp''@;'; put 'put ''ZDtib3JkZXItcmFkaXVzOjNweH0ucm9sZS1pbmZvIHRke3RleHQtYWxpZ246Y2VudGVyfS5yb2xlLWRhdGF7Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH0ucm9sZS1kYXRhe21pbi1oZWlnaHQ6dW5zZXR9LnJvbGUtZGF0YSBoMywucm9sZS1kYXRhIGg1e3RleHQtYWxpZ246''@;'; put 'put ''Y2VudGVyfS5tZW1iZXItdGFibGV7d2lkdGg6MTAwJX0ubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdodDo3MDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7''@;'; put 'put ''LnJvbGUtZGF0YXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19XG4iXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLHZBdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3''@;'; put 'put ''KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXJuYXYtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXIt''@;'; put 'put ''b3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksYkF0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlldy1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRs''@;'; put 'put ''ZXQiKX0sZGVwZW5kZW5jaWVzOltyZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB5QXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gX0F0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDEzKSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC51c2VyU2VhcmNoPSIiLEN0KGgudXNlckxpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIHdBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDcpKDEsImRpdiIsOCko''@;'; put 'put ''MiwiaW5wdXQiLDksMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKTtyZXR1cm4gbWkoZi51c2VyU2VhcmNoLGgpfHwoZi51c2VyU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLnVzZXJM''@;'; put 'put ''aXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQseUF0LDEsMCwiY2xyLWljb24iLDEwKSg1LF9BdCwxLDAsImNsci1pY29uIiwxMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPVJlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQudXNlclNlYXJjaCksZmUoMiksTWUoIm5nSWYiLGEudmFs''@;'; put 'put ''dWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBDQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQ7cmV0''@;'; put 'put ''dXJuIEN0KFJlKCkudXNlck9uQ2xpY2soaCkpfSksZGUoMSwicCIsMTYpLEd0KDIsImNsci1pY29uIiwxNyksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdCxkPVJlKCk7VHIoImFjdGl2ZSIsKG51bGw9PWQudXNlckluZm8/bnVsbDpkLnVzZXJJbmZvLlVSSSk9''@;'; put 'put ''PT1hLlVSSSksZmUoMyksRHIoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBTQXQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLENBdCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rp''@;'; put 'put ''b24gTUF0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24geEF0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwidHIiKSgyLCJ0ZCIsMjcpLExlKDMsIiBNZXRhZGF0YSBDcmVhdGVkOiAiKSxkZSg0LCJi''@;'; put 'put ''IiksTGUoNSksaGUoKSgpKCksZGUoNiwidHIiKSg3LCJ0ZCIsMjcpLExlKDgsIiBNZXRhZGF0YSBVcGRhdGVkOiAiKSxkZSg5LCJiIiksTGUoMTApLGhlKCkoKSgpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSg1KSx3cihhLnVzZXJJbmZvLk1FVEFEQVRBQ1JFQVRFRCksZmUoNSksd3Io''@;'; put 'put ''YS51c2VySW5mby5NRVRBREFUQVVQREFURUQpfX1mdW5jdGlvbiBFQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksTGUoOCksaGUoKSgpKCkoKSxkZSg5''@;'; put 'put ''LCJ0ciIpKDEwLCJ0ZCIsMjcpKDExLCJwIiwyOCkoMTIsImIiKSxMZSgxMyksaGUoKSgpKCkoKSxndCgxNCx4QXQsMTEsMiwibmctY29udGFpbmVyIiw2KSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoOCksd3IoYS51c2VySW5mby5OQU1FKSxmZSg1KSx3cihhLnVzZXJJbmZv''@;'; put 'put ''LkRJU1BMQVlOQU1FKSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWZ1bmN0aW9uIFRBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNikoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNykoNiwi''@;'; put 'put ''cCIsMjgpKDcsImIiKSxMZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNyksTGUoMTEsIiBVc2VyIElEOiAiKSxkZSgxMiwiYiIpLExlKDEzKSxoZSgpKCkoKSxkZSgxNCwidHIiKSgxNSwidGQiLDI3KSxMZSgxNiwiIFVzZXIgcHJvdmlkZXIgSUQ6ICIpLGRlKDE3LCJiIiks''@;'; put 'put ''TGUoMTgpLGhlKCkoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSg4KSx3cihhLnVzZXJJbmZvLk5BTUUpLGZlKDUpLHdyKGEudXNlckluZm8uVVJJKSxmZSg1KSx3cihhLnVzZXJJbmZvLlBST1ZJREVSKX19ZnVuY3Rpb24gQUF0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgx''@;'; put 'put ''LCJObyBFbWFpbHMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIGtBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDMxKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMSksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksd3IoYS5FTUFJTCksZmUoMiks''@;'; put 'put ''d3IoYS5UWVBFKX19ZnVuY3Rpb24gREF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJiIiksTGUoNSwiRU1BSUwiKSxoZSgpKCksZGUoNiwidGQiLDMxKSg3LCJiIiksTGUoOCwiVFlQRSIpLGhlKCkoKSgpKCksZGUoOSwi''@;'; put 'put ''dGJvZHkiKSxndCgxMCxrQXQsNSwyLCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoMTApLE1lKCJuZ0Zvck9mIixhLnVzZXJFbWFpbHMpfX1mdW5jdGlvbiBJQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIpLGhlKCksZ3QoMyxBQXQsMiwwLCJo''@;'; put 'put ''NSIsNiksZGUoNCwiZGl2IiwyNCksZ3QoNSxEQXQsMTEsMSwidGFibGUiLDI1KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxEcigiRU1BSUxTICgiLGEudXNlckVtYWlsc0NvdW50fHwiMCIsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLnVzZXJFbWFpbHNDb3VudCksZmUoMiks''@;'; put 'put ''TWUoIm5nSWYiLDAhPWEudXNlckVtYWlsc0NvdW50KX19ZnVuY3Rpb24gUkF0KGMsbCl7MSZjJiZHdCgwLCJociIpfWZ1bmN0aW9uIExBdChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gR3JvdXBzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBPQXQoYyxsKXtpZigxJmMmJihkZSgw''@;'; put 'put ''LCJ0ZCIsMzMpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrYS5VUkkpLGZlKCksRHIoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIFBBdChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEs''@;'; put 'put ''InRkIiwzMyksTGUoMiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7ZmUoKSxNZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrKGEuR1JPVVBVUkl8fGEuVVJJKSksZmUoKSxEcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gRkF0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwidHIiKSxndCgxLE9BdCwyLDIsInRkIiwzMikoMixQQXQsMywyLCJuZy1jb250YWluZXIiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSxNZSgibmdJZiIs''@;'; put 'put ''YS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfX1mdW5jdGlvbiBIQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRib2R5IiksZ3QoMixGQXQsMywyLCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksTWUoIm5nRm9yT2YiLGEudXNl''@;'; put 'put ''ckdyb3Vwcyl9fWZ1bmN0aW9uIE5BdChjLGwpezEmYyYmR3QoMCwiaHIiKX1mdW5jdGlvbiBWQXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIFJvbGVzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBCQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwzNCksTGUoMiks''@;'; put 'put ''aGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1SZSg0KTtmZSgpLE1lKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9yb2xlcy8iK2QuZ2V0Um9sZVVSSShhLlJPTEVVUkkpKSxmZSgpLERyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIGpBdChjLGwpe2lmKDEmYyYm''@;'; put 'put ''KGRlKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxndCgyLEJBdCwzLDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgzKTtmZSgyKSxNZSgibmdGb3JPZiIsYS51c2VyUm9sZXMpfX1mdW5jdGlvbiB6QXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIpLGhl''@;'; put 'put ''KCksZ3QoMyxWQXQsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNCksZ3QoNSxqQXQsMywxLCJ0YWJsZSIsMjUpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDIpLERyKCJST0xFUyAoIixhLnVzZXJSb2xlc0NvdW50fHwiMCIsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLnVzZXJSb2xl''@;'; put 'put ''c0NvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS51c2VyUm9sZXNDb3VudCl9fWZ1bmN0aW9uIFVBdChjLGwpezEmYyYmR3QoMCwiaHIiKX1mdW5jdGlvbiBaQXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIExvZ2lucyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gV0F0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMzEpLExlKDIpLGhlKCksZGUoMywidGQiLDMxKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLkRPTUFJTiksZmUoMiksd3IoYS5VU0VSSUQpfX1mdW5jdGlvbiBZQXQoYyxsKXtpZigxJmMmJihkZSgw''@;'; put 'put ''LCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQsImIiKSxMZSg1LCJET01BSU4iKSxoZSgpKCksZGUoNiwidGQiKSg3LCJiIiksTGUoOCwiVVNFUiBJRCIpLGhlKCkoKSgpKCksZGUoOSwidGJvZHkiKSxndCgxMCxXQXQsNSwyLCJ0ciIsMyksaGUoKSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9UmUoMyk7ZmUoMTApLE1lKCJuZ0Zvck9mIixhLnVzZXJMb2dpbnMpfX1mdW5jdGlvbiBHQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIpLGhlKCksZ3QoMyxaQXQsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNCksZ3QoNSxZQXQsMTEsMSwidGFibGUi''@;'; put 'put ''LDI1KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxEcigiTE9HSU5TICgiLGEudXNlckxvZ2luc0NvdW50fHwiMCIsIikiKSxmZSgpLE1lKCJuZ0lmIiwwPT1hLnVzZXJMb2dpbnNDb3VudCksZmUoMiksTWUoIm5nSWYiLDAhPWEudXNlckxvZ2luc0NvdW50KX19ZnVuY3Rpb24g''@;'; put 'put ''JEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxFQXQsMTUsMywiZGl2IiwyMCkoMixUQXQsMTksMywiZGl2IiwyMCksZGUoMywiZGl2IiwyMSkoNCwiZGl2IiwyMikoNSwiZGl2IiwyMyksZ3QoNixJQXQsNiwzLCJkaXYiLDYpKDcsUkF0LDEsMCwiaHIiLDYpLGRlKDgsImRpdiIp''@;'; put 'put ''KDksImgzIiksTGUoMTApLGhlKCksZ3QoMTEsTEF0LDIsMCwiaDUiLDYpLGRlKDEyLCJkaXYiLDI0KSxndCgxMyxIQXQsMywxLCJ0YWJsZSIsMjUpLGhlKCkoKSxndCgxNCxOQXQsMSwwLCJociIsNikoMTUsekF0LDYsMywiZGl2Iiw2KSgxNixVQXQsMSwwLCJociIsNikoMTcsR0F0LDYsMywi''@;'; put 'put ''ZGl2Iiw2KSxHdCgxOCwiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJmEudXNlckluZm8p''@;'; put 'put ''LGZlKDQpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSxNZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKDMpLERyKCJHUk9VUFMgKCIsYS51c2VyR3JvdXBzQ291bnR8fCIwIiwiKSIpLGZlKCksTWUoIm5nSWYiLDA9''@;'; put 'put ''PWEudXNlckdyb3Vwc0NvdW50KSxmZSgyKSxNZSgibmdJZiIsMCE9YS51c2VyR3JvdXBzQ291bnQpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLE1lKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSxNZSgi''@;'; put 'put ''bmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksTWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19bGV0IE03ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5zYXNT''@;'; put 'put ''ZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj12LHRoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbU5hbWU9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhp''@;'; put 'put ''cy5pc1ZpeWE9ITEsdGhpcy5zZXJ2ZXJUeXBlPSIiLHRoaXMuU2VydmVyVHlwZT1CMC5ZLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09dGhp''@;'; put 'put ''cy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApfW5nT25Jbml0KCl7aWYoS24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi91c2VycyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9''@;'; put 'put ''ITAsdGhpcy5wYXJhbU5hbWU9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxLbi51c2VybmF2LnVzZXJMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQpdGhpcy51c2Vycz1Lbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Lbi51c2VybmF2LnVzZXJTZWFyY2g7ZWxzZSBp''@;'; put 'put ''Zih2b2lkIDA9PT1Lbi51c2VybmF2LnVzZXJMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRo''@;'; put 'put ''ZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBoPUpTT04ucGFyc2UoYSkuaXRlbXMubWFwKGY9Pih7TkFNRTpmLm5hbWUsVVJJOmYuaWQsUFJPVklERVI6Zi5wcm92aWRlcklkfSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPWgsS24udXNlcm5hdi51c2VyTGlzdD1ofSk6dGhpcy5z''@;'; put 'put ''YXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPWEuYWRhcHRlclJlc3BvbnNlLnVzZXJzLEtuLnVzZXJuYXYudXNlckxpc3Q9YS5hZGFwdGVyUmVzcG9uc2UudXNlcnN9KSk6KHRoaXMudXNlcnM9''@;'; put 'put ''S24udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9S24udXNlcm5hdi51c2VyU2VhcmNoKSx0aGlzLnBhcmFtUHJlc2VudClpZih0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWEpe2xldCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaTtmZXRjaCh0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihkPT5kLnRleHQoKSkudGhlbihkPT57bGV0IGg9SlNPTi5wYXJzZShkKTt0aGlzLnVzZXJEYXRhPWgs''@;'; put 'put ''dGhpcy5sb2FkaW5nPSExO2xldCBmPWguaXRlbXMubWFwKHY9Pih7R1JPVVBOQU1FOnYubmFtZSxVUkk6di5pZH0pKTt0aGlzLnVzZXJHcm91cHM9Zix0aGlzLnVzZXJHcm91cHNDb3VudD1mLmxlbmd0aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQodj0+di5V''@;'; put 'put ''Ukk9PT1hKSl9KX1lbHNle2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO3RoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIse2l3YW50Olt7dXJpOmF9XX0pLnRoZW4oaD0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5z''@;'; put 'put ''ZXJ2ZXJUeXBlKXtjYXNlIEIwLlkuU2FzOTp0aGlzLnVzZXJJbmZvPWguYWRhcHRlclJlc3BvbnNlLmluZm9bMF0sdGhpcy51c2VyRW1haWxzPWguYWRhcHRlclJlc3BvbnNlLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMubGVuZ3RoLHRoaXMu''@;'; put 'put ''dXNlclJvbGVzPWguYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2Uucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1oLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2Uu''@;'; put 'put ''bG9naW5zLmxlbmd0aDticmVhaztjYXNlIEIwLlkuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChmPT5mLlVSST09PWEpO2Vsc2V7Y29uc3QgZj1oLmFkYXB0ZXJSZXNwb25zZS5ncm91cHNbMF07dGhpcy51c2VySW5mbz17VVJJOmYuSUQsTkFNRTpm''@;'; put 'put ''Lk5BTUUsRElTUExBWU5BTUU6Zi5OQU1FfX19dGhpcy51c2VyRGF0YT1oLmFkYXB0ZXJSZXNwb25zZSx0aGlzLnVzZXJHcm91cHM9aC5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLmdyb3Vwcy5sZW5ndGh9KX19dXNlckxpc3RP''@;'; put 'put ''bkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy51c2Vycyx0aGlzLnVzZXJTZWFyY2gsIk5BTUUiKSxLbi51c2VybmF2LnVzZXJTZWFyY2g9dGhpcy51c2VyU2VhcmNofXVzZXJPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRl''@;'; put 'put ''ci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuVVJJKSksdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2''@;'; put 'put ''ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrYS5VUkkrIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGg9PmgudGV4dCgpKS50aGVuKGg9PntsZXQgZj1KU09OLnBhcnNlKGgpO3RoaXMudXNlckRhdGE9Zix0aGlz''@;'; put 'put ''LmxvYWRpbmc9ITE7bGV0IHY9Zi5pdGVtcy5tYXAoTT0+KHtHUk9VUE5BTUU6TS5uYW1lLFVSSTpNLmlkfSkpO3RoaXMudXNlckdyb3Vwcz12LHRoaXMudXNlckdyb3Vwc0NvdW50PXYubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChNPT5NLlVSST09''@;'; put 'put ''PWEuVVJJKSl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpbe3VyaTphLlVSSX1dfSkudGhlbihmPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQjAuWS5TYXM5OnRoaXMudXNlckluZm89''@;'; put 'put ''Zi5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9Zi5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9Zi5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy51''@;'; put 'put ''c2VyUm9sZXNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5yb2xlcy5sZW5ndGgsdGhpcy51c2VyTG9naW5zPWYuYWRhcHRlclJlc3BvbnNlLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgQjAuWS5TYXNqczppZih0''@;'; put 'put ''aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKHY9PnYuVVJJPT09YS5VUkkpO2Vsc2V7Y29uc3Qgdj1mLmFkYXB0ZXJSZXNwb25zZS5ncm91cHNbMF07dGhpcy51c2VySW5mbz17VVJJOnYuSUQsTkFNRTp2Lk5BTUUsRElTUExBWU5BTUU6di5OQU1FfX19dGhpcy51c2Vy''@;'; put 'put ''RGF0YT1mLmFkYXB0ZXJSZXNwb25zZSx0aGlzLnVzZXJHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLmdyb3Vwcy5sZW5ndGh9KX1nZXRSb2xlVVJJKGEpe3JldHVybiBhLnNwbGl0KCJPTVNPQko6SWRlbnRpdHlH''@;'; put 'put ''cm91cCIpWzFdLnNsaWNlKDEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1KSxHZShCcyksR2UoQ3UpLEdlKGZoKSxHZShMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXIiXV0s''@;'; put 'put ''aG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNv''@;'; put 'put ''bnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFVz''@;'; put 'put ''ZXJzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJz''@;'; put 'put ''aGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VyIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNs''@;'; put 'put ''YXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwidXNlci1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSB1c2VyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwidXNlci1pbmZvIl0sWzEs''@;'; put 'put ''ImxlZnQiXSxbMSwidXNlci1pbmZvLXRleHQiXSxbMSwidGFibGUiLCJ1c2VyLXRhYmxlIl0sWzEsIndpZHRoLTUwIl0sWzEsIiJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsImNsYXNzIiwiIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0''@;'; put 'put ''aXZlIiwxLCIiLDMsInJvdXRlckxpbmsiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHItdHJlZSIpLGd0KDIsd0F0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxTQXQsMiwxLCJuZy1jb250YWluZXIi''@;'; put 'put ''LDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLGd0KDUsTUF0LDMsMCwiZGl2Iiw1KSg2LCRBdCwxOSwxMSwiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSxNZSgibmdJZiIsaC51c2VycyksZmUoKSxNZSgibmdGb3JPZiIsaC51c2VycyksZmUoMiksTWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxN''@;'; put 'put ''ZSgibmdJZiIsaC51c2VyRGF0YSYmIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W25zLGJhLGMxLHB5LHFsLG5sLCRzLEVoLFBkLEhsLFoxLGk0LHI0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEtBdD1jPT5bInNlZ21lbnQiLGNdLHFBdD0oYyxsKT0+KHsic2Vn''@;'; put 'put ''bWVudC1tYWluIjohMCxleHBhbmRhYmxlOmMsZXhwYW5kZWQ6bH0pO2Z1bmN0aW9uIFhBdChjLGwpezEmYyYmR3QoMCwiZGl2Iiw5KX1mdW5jdGlvbiBKQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJzcGFuIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0''@;'; put 'put ''IGg9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkub25WYWx1ZUNsaWNrKGgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkuJGltcGxpY2l0O2ZlKCksd3IoYS5kZXNjcmlwdGlvbil9fWZ1bmN0aW9uIFFBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNl''@;'; put 'put ''Y3Rpb24iLDExKSgxLCJuZ3gtanNvbi12aWV3ZXIiLDEyKSxGdCgic2VnbWVudExpbmtDbGlja2VkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikub25TZWdtZW50TGlua0NsaWNrKGgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQsZD1SZSgpO2Zl''@;'; put 'put ''KCksTWUoImpzb24iLGEudmFsdWUpKCJleHBhbmRlZCIsZC5leHBhbmRlZCkoImRlcHRoIixkLmRlcHRoKSgiX2N1cnJlbnREZXB0aCIsZC5fY3VycmVudERlcHRoKzEpfX1mdW5jdGlvbiBla3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJzZWN0aW9uIiwyKSgxLCJzZWN0aW9u''@;'; put 'put ''IiwzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KFJlKCkudG9nZ2xlKGgpKX0pLGd0KDIsWEF0LDEsMCwiZGl2Iiw0KSxkZSgzLCJzcGFuIiw1KSxMZSg0KSxoZSgpLGRlKDUsInNwYW4iLDYpLExlKDYsIjogIiksaGUoKSxndCg3LEpB''@;'; put 'put ''dCwyLDEsInNwYW4iLDcpLGhlKCksZ3QoOCxRQXQsMiw0LCJzZWN0aW9uIiw4KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7TWUoIm5nQ2xhc3MiLHNwKDYsS0F0LCJzZWdtZW50LXR5cGUtIithLnR5cGUpKSxmZSgpLE1lKCJuZ0NsYXNzIixscCg4LHFBdCxkLmlz''@;'; put 'put ''RXhwYW5kYWJsZShhKSxhLmV4cGFuZGVkKSksZmUoKSxNZSgibmdJZiIsZC5pc0V4cGFuZGFibGUoYSkpLGZlKDIpLHdyKGEua2V5KSxmZSgzKSxNZSgibmdJZiIsIWEuZXhwYW5kZWR8fCFkLmlzRXhwYW5kYWJsZShhKSksZmUoKSxNZSgibmdJZiIsYS5leHBhbmRlZCYmZC5pc0V4cGFuZGFi''@;'; put 'put ''bGUoYSkpfX1sZXQgdGt0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGVkPSEwLHRoaXMuZGVwdGg9LTEsdGhpcy5fY3VycmVudERlcHRoPTAsdGhpcy5zZWdtZW50TGlua0NsaWNrZWQ9bmV3IEtyLHRoaXMuc2VnbWVudHM9W119bmdPbkNoYW5nZXMoKXt0aGlzLnNl''@;'; put 'put ''Z21lbnRzPVtdLHRoaXMuanNvbj10aGlzLmRlY3ljbGUodGhpcy5qc29uKSwib2JqZWN0Ij09dHlwZW9mIHRoaXMuanNvbj9PYmplY3Qua2V5cyh0aGlzLmpzb24pLmZvckVhY2goYT0+e3RoaXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNlS2V5VmFsdWUoYSx0aGlzLmpzb25bYV0pKX0pOnRo''@;'; put 'put ''aXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNlS2V5VmFsdWUoYCgke3R5cGVvZiB0aGlzLmpzb259KWAsdGhpcy5qc29uKSl9aXNFeHBhbmRhYmxlKGEpe3JldHVybiJvYmplY3QiPT09YS50eXBlfHwiYXJyYXkiPT09YS50eXBlfXRvZ2dsZShhKXt0aGlzLmlzRXhwYW5kYWJsZShhKSYmKGEu''@;'; put 'put ''ZXhwYW5kZWQ9IWEuZXhwYW5kZWQpfW9uVmFsdWVDbGljayhhKXsibGluayI9PT1hLnR5cGUmJnRoaXMuc2VnbWVudExpbmtDbGlja2VkLmVtaXQoYS52YWx1ZSl9b25TZWdtZW50TGlua0NsaWNrKGEpe3RoaXMuc2VnbWVudExpbmtDbGlja2VkLmVtaXQoYSl9cGFyc2VLZXlWYWx1ZShhLGQp''@;'; put 'put ''e2NvbnN0IGg9e2tleTphLHZhbHVlOmQsdHlwZTp2b2lkIDAsZGVzY3JpcHRpb246IiIrZCxleHBhbmRlZDp0aGlzLmlzRXhwYW5kZWQoKX07c3dpdGNoKHR5cGVvZiBoLnZhbHVlKXtjYXNlIm51bWJlciI6aC50eXBlPSJudW1iZXIiO2JyZWFrO2Nhc2UiYm9vbGVhbiI6aC50eXBlPSJib29s''@;'; put 'put ''ZWFuIjticmVhaztjYXNlImZ1bmN0aW9uIjpoLnR5cGU9ImZ1bmN0aW9uIjticmVhaztjYXNlInN0cmluZyI6aWYodGhpcy5pc0xpbmsoaC52YWx1ZSkpe2gudHlwZT0ibGluayI7YnJlYWt9aC50eXBlPSJzdHJpbmciLGguZGVzY3JpcHRpb249JyInK2gudmFsdWUrJyInO2JyZWFrO2Nhc2Ui''@;'; put 'put ''dW5kZWZpbmVkIjpoLnR5cGU9InVuZGVmaW5lZCIsaC5kZXNjcmlwdGlvbj0idW5kZWZpbmVkIjticmVhaztjYXNlIm9iamVjdCI6bnVsbD09PWgudmFsdWU/KGgudHlwZT0ibnVsbCIsaC5kZXNjcmlwdGlvbj0ibnVsbCIpOkFycmF5LmlzQXJyYXkoaC52YWx1ZSk/KGgudHlwZT0iYXJyYXki''@;'; put 'put ''LGguZGVzY3JpcHRpb249IkFycmF5WyIraC52YWx1ZS5sZW5ndGgrIl0gIitKU09OLnN0cmluZ2lmeShoLnZhbHVlKSk6aC52YWx1ZSBpbnN0YW5jZW9mIERhdGU/aC50eXBlPSJkYXRlIjooaC50eXBlPSJvYmplY3QiLGguZGVzY3JpcHRpb249Ik9iamVjdCAiK0pTT04uc3RyaW5naWZ5KGgu''@;'; put 'put ''dmFsdWUpKX1yZXR1cm4gaH1pc0xpbmsoYSl7cmV0dXJuImh0dHBzOi8vIj09PWEuc3Vic3RyaW5nKDAsOCl8fCJodHRwOi8vIj09PWEuc3Vic3RyaW5nKDAsNyl8fCIvIj09PWFbMF19aXNFeHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkJiYhKHRoaXMuZGVwdGg+LTEmJnRoaXMuX2N1''@;'; put 'put ''cnJlbnREZXB0aD49dGhpcy5kZXB0aCl9ZGVjeWNsZShhKXtjb25zdCBkPW5ldyBXZWFrTWFwO3JldHVybiBmdW5jdGlvbiBoKGYsdil7bGV0IE0sRDtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIGZ8fG51bGw9PT1mfHxmIGluc3RhbmNlb2YgQm9vbGVhbnx8ZiBpbnN0YW5jZW9mIERhdGV8fGYg''@;'; put 'put ''aW5zdGFuY2VvZiBOdW1iZXJ8fGYgaW5zdGFuY2VvZiBSZWdFeHB8fGYgaW5zdGFuY2VvZiBTdHJpbmc/ZjooTT1kLmdldChmKSx2b2lkIDAhPT1NP3skcmVmOk19OihkLnNldChmLHYpLEFycmF5LmlzQXJyYXkoZik/KEQ9W10sZi5mb3JFYWNoKGZ1bmN0aW9uKFoscmUpe0RbcmVdPWgoWix2''@;'; put 'put ''KyJbIityZSsiXSIpfSkpOihEPXt9LE9iamVjdC5rZXlzKGYpLmZvckVhY2goZnVuY3Rpb24oWil7RFtaXT1oKGZbWl0sdisiWyIrSlNPTi5zdHJpbmdpZnkoWikrIl0iKX0pKSxEKSl9KGEsIiQiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5neC1qc29uLXZpZXdlciJdXSxpbnB1dHM6e2pzb246Impzb24iLGV4cGFuZGVkOiJleHBhbmRlZCIsZGVwdGg6ImRlcHRoIixfY3VycmVudERlcHRoOiJfY3VycmVudERlcHRoIn0sb3V0cHV0czp7c2VnbWVudExpbmtDbGlja2Vk''@;'; put 'put ''OiJzZWdtZW50TGlua0NsaWNrZWQifSxmZWF0dXJlczpbd2xdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzEsIm5neC1qc29uLXZpZXdlciJdLFszLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdDbGFzcyJdLFszLCJjbGljayIsIm5nQ2xhc3MiXSxbImNsYXNzIiwidG9n''@;'; put 'put ''Z2xlciIsNCwibmdJZiJdLFsxLCJzZWdtZW50LWtleSJdLFsxLCJzZWdtZW50LXNlcGFyYXRvciJdLFsiY2xhc3MiLCJzZWdtZW50LXZhbHVlIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjaGlsZHJlbiIsNCwibmdJZiJdLFsxLCJ0b2dnbGVyIl0sWzEsInNlZ21lbnQtdmFsdWUi''@;'; put 'put ''LDMsImNsaWNrIl0sWzEsImNoaWxkcmVuIl0sWzMsInNlZ21lbnRMaW5rQ2xpY2tlZCIsImpzb24iLCJleHBhbmRlZCIsImRlcHRoIiwiX2N1cnJlbnREZXB0aCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsInNlY3Rpb24iLDApLGd0KDEsZWt0LDksMTEsInNlY3Rpb24i''@;'; put 'put ''LDEpLGhlKCkpLDImYSYmKGZlKCksTWUoIm5nRm9yT2YiLGQuc2VnbWVudHMpKX0sZGVwZW5kZW5jaWVzOlt3dSxucyxiYSxjXSxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOy5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OnZhcigtLW5neC1qc29uLWZv''@;'; put 'put ''bnQtZmFtaWx5LCBtb25vc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1uZ3gtanNvbi1mb250LXNpemUsIDFlbSk7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVu''@;'; put 'put ''dFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHg7bWFyZ2luOjFweCAxcHggMXB4IDEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLXdy''@;'; put 'put ''YXA6YnJlYWstd29yZH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO21h''@;'; put 'put ''cmdpbi1sZWZ0Oi0xNHB4O21hcmdpbi10b3A6M3B4O2ZvbnQtc2l6ZTouOGVtO2xpbmUtaGVpZ2h0OjEuMmVtO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjb2xvcjp2YXIoLS1uZ3gtanNvbi10b2dnbGVyLCAjNzg3ODc4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5z''@;'; put 'put ''ZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVdOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IlxcMjViYSI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjFzIGVhc2Ut''@;'; put 'put ''aW59Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24ta2V5LCAj''@;'; put 'put ''NEUxODdDKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtc2VwYXJhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gt''@;'; put 'put ''anNvbi1zZXBhcmF0b3IsICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6''@;'; put 'put ''dmFyKC0tbmd4LWpzb24tdmFsdWUsICMwMDApfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNoaWxkcmVuW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxMnB4fS5uZ3gtanNvbi12aWV3ZXJbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1zdHJpbmdbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tc3RyaW5nLCAjRkY2QjZCKX0u''@;'; put 'put ''bmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1q''@;'; put 'put ''c29uLW51bWJlciwgIzAwOTY4OCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWJvb2xlYW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYm9vbGVhbiwgI0I5MzhBNCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWRhdGVbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVu''@;'; put 'put ''dC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZGF0ZSwgIzA1NjY4RCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWFycmF5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtb2JqZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdt''@;'; put 'put ''ZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW9iamVjdCwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWZ1bmN0aW9uW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWZ1bmN0aW9uLCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdt''@;'; put 'put ''ZW50LXR5cGUtbGlua1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1saW5rLCAjOUI1OUI2KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1udWxsLCAjZmZmKX0ubmd4LWpzb24t''@;'; put 'put ''dmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXVu''@;'; put 'put ''ZGVmaW5lZCwgI2ZmZil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bGxbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi1udWxsLWJnLCByZWQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2Vn''@;'; put 'put ''bWVudC1rZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFp''@;'; put 'put ''bltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQta2V5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbGlu''@;'; put 'put ''a1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2Vn''@;'; put 'put ''bWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kZWRbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVdOmFmdGVye3RyYW5zZm9ybTpyb3Rh''@;'; put 'put ''dGUoOTBkZWcpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdLCAubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b2dnbGVyW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcn0nXX0pLGN9KSgpLG5rdD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxj''@;'; put 'put ''fSkoKSxya3Q9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7aWYoIWEuaW5jbHVkZXMoIi8iKSlyZXR1cm4gYTtsZXQgZD0iIjtjb25zdCBoPWEuc3BsaXQoIi8iKTtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylpZigiIiE9PWhbZl0pe2NvbnN0IHY9aFtmXTtkKz0iLyIrdixoW2ZdPWA8''@;'; put 'put ''YSBocmVmPSR7ZH0+JHt2fTwvYT5gfXJldHVybiBoLmpvaW4oIi8iKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToibGlua2luemUiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxpa3Q9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToicHJldHR5anNvbiIsdHlw''@;'; put 'put ''ZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGFrdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMjQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmTSgidmFsdWUiLGEudmFsdWUpLGZlKCksRHIoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIG9r''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGdyb3VwIiwyMiksZ3QoMSxha3QsMiwyLCJvcHRpb24iLDIzKSxlbCgyLCJrZXl2YWx1ZSIpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVJlKCk7TWUoImxhYmVsIixhLmtleSksZmUoKSxNZSgibmdGb3JPZiIsRGMoMiwyLGQuY29s''@;'; put 'put ''bGVjdGlvbnNbYS5rZXldKSl9fWZ1bmN0aW9uIHNrdChjLGwpezEmYyYmKGRlKDAsInAiLDI1KSxMZSgxLCIgU2VsZWN0IGNvbGxlY3Rpb24gdG8gc3RhcnQgIiksaGUoKSl9ZnVuY3Rpb24gbGt0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMjYpfWZ1bmN0aW9uIGNrdChjLGwpezEm''@;'; put 'put ''YyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiB1a3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpO3JldHVybiBoLmxpbmtzU2VhcmNoPSIiLEN0KGgubGlua3NMaXN0T25G''@;'; put 'put ''aWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBka3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNykoMSwiZGl2IiwyOCkoMiwiaW5wdXQiLDI5LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJu''@;'; put 'put ''IG1pKGYubGlua3NTZWFyY2gsaCl8fChmLmxpbmtzU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LGNrdCwxLDAsImNsci1pY29uIiwzMCkoNSx1a3QsMSwwLCJjbHItaWNv''@;'; put 'put ''biIsMzEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLmxpbmtzU2VhcmNoKSxmZSgyKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGhrdChjLGwpe2lm''@;'; put 'put ''KDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQsdj1SZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5lbmRwb2ludExpbmtzKSl9KSxnaSgiY2xyRXhw''@;'; put 'put ''YW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKCkuJGltcGxpY2l0''@;'; put 'put ''O3JldHVybiBDdChSZSgpLmxpbmtPbkNsaWNrKGgpKX0pLEd0KDIsImNsci1pY29uIiwzNyksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIiwhIWEubG9hZGluZ1RhYmxlcyYmIWEu''@;'; put 'put ''dGFibGVzKSxmZSgzKSxVdSgiICIsYS5tZXRob2QsIiAiLGEucmVsLCIgIil9fWZ1bmN0aW9uIGZrdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsaGt0LDQsNCwiY2xyLXRyZWUtbm9kZSIsMzQpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lmIiwhYS5oaWRk''@;'; put 'put ''ZW4pfX1mdW5jdGlvbiBwa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMil9ZnVuY3Rpb24gZ2t0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDMzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgyKTtyZXR1cm4gaC5pdGVtc1Nl''@;'; put 'put ''YXJjaD0iIixDdChoLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gbWt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjcpKDEsImRpdiIsMjgpKDIsImlucHV0IiwzOCwxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7''@;'; put 'put ''d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLml0ZW1zU2VhcmNoLGgpfHwoZi5pdGVtc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5pdGVtc0xpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxwa3QsMSwwLCJjbHItaWNv''@;'; put 'put ''biIsMzApKDUsZ2t0LDEsMCwiY2xyLWljb24iLDMxKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9UmUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5pdGVtc1NlYXJjaCksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3Ro''@;'; put 'put ''PjApfX1mdW5jdGlvbiB2a3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwzNSksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYuZW5k''@;'; put 'put ''cG9pbnRJdGVtcykpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDM2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3Qo''@;'; put 'put ''YSk7Y29uc3QgaD1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS5pdGVtT25DbGljayhoKSl9KSxHdCgyLCJjbHItaWNvbiIsMzcpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoKS4kaW1wbGljaXQ7cGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxNZSgiY2xyTG9hZGlu''@;'; put 'put ''ZyIsISFhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksRHIoIiAiLGEubmFtZXx8YS5pZCwiICIpfX1mdW5jdGlvbiBia3QoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLHZrdCw0LDMsImNsci10cmVlLW5vZGUiLDM0KSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUo''@;'; put 'put ''KSxNZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24geWt0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzkpfWZ1bmN0aW9uIF9rdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsIm5neC1qc29uLXZpZXdlciIsNDkpLEZ0KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3JldHVybiB3dChhKSxDdChSZSgzKS5vbkpzb25MaW5rQ2xpY2soaCkpfSksaGUoKX0yJmMmJk1lKCJqc29uIixSZSgzKS5lbmRwb2ludEpzb24pKCJleHBhbmRlZCIsITEpfWZ1bmN0aW9uIHdrdChjLGwpe2lmKDEmYyYmKHNpKDApLExlKDEpLGVsKDIsInByZXR0eWpzb24iKSxs''@;'; put 'put ''aSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxEcigiXG4gICAgICAgICAgICAiLERjKDIsMSxhLmVuZHBvaW50SnNvbiksIlxuICAgICAgICAgICIpfX1mdW5jdGlvbiBDa3QoYyxsKXtpZigxJmMmJihzaSgwKSxMZSgxLCJcbiAgICAgICAgICAiKSxndCgyLF9rdCwxLDIsIm5neC1qc29u''@;'; put 'put ''LXZpZXdlciIsNDgpLExlKDMsIlxuICAgICAgICAgICIpLGd0KDQsd2t0LDMsMywibmctY29udGFpbmVyIiwyMSksTGUoNSwiXG4gICAgICAgICIpLGxpKCkpLDImYyl7Y29uc3QgYT1SZSgyKTtmZSgyKSxNZSgibmdJZiIsIWEucmF3SnNvbiksZmUoMiksTWUoIm5nSWYiLGEucmF3SnNvbil9''@;'; put 'put ''fWZ1bmN0aW9uIFNrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsNDApKDIsInNwYW4iLDQxKSxMZSgzLCIgR0VUICIpLGRlKDQsInAiLDQyKSxlbCg1LCJsaW5raW56ZSIpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkub25C''@;'; put 'put ''cmVhZGN1bXNDbGljayhoKSl9KSxoZSgpLGRlKDYsImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5jb3B5QnJlYWRjcnVtcygpKX0pLEd0KDcsImNsci1pY29uIiwxNyksaGUoKSgpLGRlKDgsImRpdiIsNDMpKDksImNsci1pbnB1dC1jb250''@;'; put 'put ''YWluZXIiLDE0KSgxMCwibGFiZWwiKSxMZSgxMSwiU3RhcnQiKSxoZSgpLGRlKDEyLCJpbnB1dCIsNDQpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYuZW5kcG9pbnQuc3RhcnQsaCl8fChmLmVuZHBvaW50LnN0YXJ0PWgpLEN0''@;'; put 'put ''KGgpfSksaGUoKSgpLGRlKDEzLCJjbHItaW5wdXQtY29udGFpbmVyIiwxNCkoMTQsImxhYmVsIiksTGUoMTUsIkxpbWl0IiksaGUoKSxkZSgxNiwiaW5wdXQiLDQ0KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpO3JldHVybiBtaShmLmVuZHBvaW50''@;'; put 'put ''LmxpbWl0LGgpfHwoZi5lbmRwb2ludC5saW1pdD1oKSxDdChoKX0pLGhlKCkoKSxkZSgxNywiYnV0dG9uIiw0NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgpLmFwcGx5UXVlcnlQYXJhbXMoKSl9KSxHdCgxOCwiY2xyLWljb24iLDQ2KSxoZSgpKCkoKSxkZSgx''@;'; put 'put ''OSwicHJlIiw0NyksTGUoMjAsIiAgICAgICAgIiksZ3QoMjEsQ2t0LDYsMiwibmctY29udGFpbmVyIiwyMSksTGUoMjIsIlxuICAgICAgIiksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpO2ZlKDQpLE1lKCJpbm5lckhUTUwiLERjKDUsNyxhLmVuZHBvaW50LnVybCksVjQpLGZlKDgp''@;'; put 'put ''LHBpKCJuZ01vZGVsIixhLmVuZHBvaW50LnN0YXJ0KSxNZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLGZlKDQpLHBpKCJuZ01vZGVsIixhLmVuZHBvaW50LmxpbWl0KSxNZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQpLGZlKCksTWUoImRpc2Fi''@;'; put 'put ''bGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LmxpbWl0JiZ2b2lkIDA9PT1hLmVuZHBvaW50LnN0YXJ0KSxmZSg0KSxNZSgibmdJZiIsYS5lbmRwb2ludEpzb24pfX1sZXQgTWt0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5zYXNW''@;'; put 'put ''aXlhU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuZXZlbnRTZXJ2aWNlPWYsdGhpcy5jb2xsZWN0aW9ucz17fSx0aGlzLmNvbGxlY3Rpb249IiIsdGhpcy5lbmRwb2ludExpbmtzPVtdLHRoaXMuZW5kcG9pbnRJdGVtcz1bXSx0aGlzLmVuZHBvaW50PXt1cmw6IiIsc3RhcnQ6LTEs''@;'; put 'put ''bGltaXQ6LTF9LHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITEsdGhpcy5yYXdKc29uPSExLHRoaXMubGlua3NTZWFyY2g9IiIsdGhpcy5pdGVtc1NlYXJjaD0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZ31uZ09uSW5pdCgpe3Ro''@;'; put 'put ''aXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5jb2xsZWN0aW9ucz10aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEFsbENvbGxlY3Rpb25zKCl9bGlua3NMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMu''@;'; put 'put ''ZW5kcG9pbnRMaW5rcyx0aGlzLmxpbmtzU2VhcmNoLCJyZWwiKSxLbi52aXlhQXBpLmxpbmtzc1NlYXJjaD10aGlzLmxpbmtzU2VhcmNofWl0ZW1zTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVuZHBvaW50SXRlbXMsdGhpcy5pdGVtc1Nl''@;'; put 'put ''YXJjaCwibmFtZSIpLEtuLnZpeWFBcGkuaXRlbXNTZWFyY2g9dGhpcy5pdGVtc1NlYXJjaH1saW5rT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5ocmVmKX1pdGVtT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5saW5rc1swXS5ocmVmKX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBz''@;'; put 'put ''ZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX11cGRhdGVTZWxlY3RlZENvbGxlY3Rp''@;'; put 'put ''b24oKXtLbi52aXlhQXBpLnNlbGVjdGVkQ29sbGVjdGlvbj10aGlzLmNvbGxlY3Rpb24sdGhpcy5lbmRwb2ludC51cmw9dGhpcy5jb2xsZWN0aW9uLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeUNvbGxlY3Rpb24odGhpcy5jb2xsZWN0aW9uKS5z''@;'; put 'put ''dWJzY3JpYmUoYT0+e3RoaXMuZW5kcG9pbnRMaW5rcz1hLmxpbmtzLHRoaXMuZW5kcG9pbnRJdGVtcz1hLml0ZW1zP2EuaXRlbXM6W10sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLmVuZHBvaW50SnNvbj1hLHRoaXMuZW5kcG9pbnQuc3RhcnQ9YS5zdGFydCx0aGlzLmVuZHBvaW50''@;'; put 'put ''LmxpbWl0PWEubGltaXR9LGE9Pnt0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExO2xldCBkPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3QiO2EubWVzc2FnZSYmKGQ9YS5tZXNzYWdlKSxhLmVycm9yJiYoYS5lcnJvci5tZXNzYWdlJiYoZD1hLmVycm9yLm1lc3NhZ2UpLGEu''@;'; put 'put ''ZXJyb3IucmVtZWRpYXRpb24mJihkPWAke2R9XG4ke2EuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsZCxudWxsLCJIVFRQIEVycm9yIil9KX1vbkpzb25MaW5rQ2xpY2soYSl7dGhpcy5sb2FkVXJsKGEpfW9uSnNvbkNsaWNrKGEp''@;'; put 'put ''e2lmKGEucHJldmVudERlZmF1bHQoKSwiQSI9PT1hLnNyY0VsZW1lbnQudGFnTmFtZSl7Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfX1vbkJyZWFkY3Vtc0NsaWNrKGEpe2lmKGEucHJldmVudERlZmF1bHQoKSwh''@;'; put 'put ''YS5zcmNFbGVtZW50LmhyZWYpcmV0dXJuO2NvbnN0IGQ9YS5zcmNFbGVtZW50LmhyZWYuc3BsaXQoYS5zcmNFbGVtZW50Lmhvc3QpWzFdO3RoaXMubG9hZFVybChkKX1jb3B5SnNvbigpe3RoaXMuZW5kcG9pbnRKc29uJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmlu''@;'; put 'put ''Z2lmeSh0aGlzLmVuZHBvaW50SnNvbixudWxsLDIpKX1jb3B5QnJlYWRjcnVtcygpe3RoaXMuZW5kcG9pbnQmJnRoaXMuZW5kcG9pbnQudXJsJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmVuZHBvaW50LnVybCl9YXBwbHlRdWVyeVBhcmFtcygpe2NvbnN0IGE9dGhpcy5l''@;'; put 'put ''bmRwb2ludC5zdGFydCxkPXRoaXMuZW5kcG9pbnQubGltaXQsaD1gPyR7dm9pZCAwIT09YT8ic3RhcnQ9IithOiIifSR7dm9pZCAwIT09ZD8iJmxpbWl0PSIrZDoiIn1gLGY9YCR7dGhpcy5lbmRwb2ludC51cmwuc3BsaXQoIj8iKVswXX0ke2h9YDt0aGlzLmxvYWRVcmwoZil9bG9hZFVybChh''@;'; put 'put ''KXt0aGlzLmVuZHBvaW50TG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5VXJsKGEpLnN1YnNjcmliZShkPT57dGhpcy5lbmRwb2ludExpbmtzPWQubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWQuaXRlbXM/ZC5pdGVtczpbXSx0aGlzLmVuZHBvaW50SnNvbj1kLHRoaXMuZW5k''@;'; put 'put ''cG9pbnRMb2FkaW5nPSExLHRoaXMuZW5kcG9pbnQudXJsPWEsdGhpcy5lbmRwb2ludC5zdGFydD1kLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9ZC5saW1pdH0sZD0+e3RoaXMuZW5kcG9pbnRMb2FkaW5nPSExO2xldCBoPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3Qi''@;'; put 'put ''O2QubWVzc2FnZSYmKGg9ZC5tZXNzYWdlKSxkLmVycm9yJiYoZC5lcnJvci5tZXNzYWdlJiYoaD1kLmVycm9yLm1lc3NhZ2UpLGQuZXJyb3IucmVtZWRpYXRpb24mJihoPWAke2h9XG4ke2QuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51''@;'; put 'put ''bGwsaCxudWxsLCJIVFRQIEVycm9yIil9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShTdSksR2UoVFcpLEdlKEJzKSxHZSh2YykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpeWEtYXBp''@;'; put 'put ''LWV4cGxvcmVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozMyx2YXJzOjEzLGNvbnN0czpbWyJzZWFyY2hMaW5rc1RyZWVJbnB1dCIsIiJdLFsic2VhcmNoSXRlbXNUcmVlSW5wdXQiLCIiXSxbMSwiYXBpLWNvbGxlY3Rpb24tZHJvcGRvd24iXSxbImNsclNl''@;'; put 'put ''bGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMywibGFiZWwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250''@;'; put 'put ''ZW50LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsImgtMTAwIiwicC0xMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJd''@;'; put 'put ''LFsxLCJ3LTEwMCIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInNpdGlvbi1yZWxhdGl2ZSJdLFsxLCJqc29uLXRvZ2dsZSIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwibS0wIl0sWyJ0eXBlIiwi''@;'; put 'put ''Y2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsImJ0bi1zbSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29weSJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0tMCJdLFsiY2xyU21hbGwiLCIi''@;'; put 'put ''LDQsIm5nSWYiXSxbMSwidy0xMDAiLCJsaWdodCJdLFs0LCJuZ0lmIl0sWzMsImxhYmVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRy''@;'; put 'put ''ZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGxpbmtzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIs''@;'; put 'put ''InNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGl0ZW1zIiwi''@;'; put 'put ''bmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImQtZmxl''@;'; put 'put ''eCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJlbmRwb2ludC1icmVhZGNydW1zIiwzLCJjbGljayIsImlubmVySFRNTCJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwicXVlcnktcGFyYW1zIl0sWyJjbHJJbnB1dCIsIiIsInR5cGUi''@;'; put 'put ''LCJudW1iZXIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsInBsYXkiXSxbMSwianNvbi1hcmVhIl0sWyJjbGFzcyIsImQtYmxv''@;'; put 'put ''Y2siLDMsImpzb24iLCJleHBhbmRlZCIsInNlZ21lbnRMaW5rQ2xpY2tlZCIsNCwibmdJZiJdLFsxLCJkLWJsb2NrIiwzLCJzZWdtZW50TGlua0NsaWNrZWQiLCJqc29uIiwiZXhwYW5kZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIpKDEsImRp''@;'; put 'put ''diIsMikoMiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIpLExlKDQsIkFQSSBDb2xsZWN0aW9uIiksaGUoKSxkZSg1LCJzZWxlY3QiLDMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5jb2xsZWN0aW9uLHYpfHwoaC5jb2xsZWN0aW9uPXYpLHZ9''@;'; put 'put ''KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLnVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpfSksZ3QoNixva3QsMyw0LCJvcHRncm91cCIsNCksZWwoNywia2V5dmFsdWUiKSxoZSgpKCkoKSxndCg4LHNrdCwyLDAsInAiLDUpLGRlKDksImRpdiIsNiksZ3QoMTAsbGt0LDEsMCwi''@;'; put 'put ''Y2xyLXNwaW5uZXIiLDcpLGhlKCksZGUoMTEsImNsci10cmVlIiksZ3QoMTIsZGt0LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoMTMsZmt0LDIsMSwibmctY29udGFpbmVyIiw5KSxoZSgpLGRlKDE0LCJjbHItdHJlZSIpLGd0KDE1LG1rdCw2LDMsImNsci10cmVlLW5vZGUiLDgpKDE2LGJrdCwy''@;'; put 'put ''LDEsIm5nLWNvbnRhaW5lciIsOSksaGUoKSgpLGRlKDE3LCJkaXYiLDEwKSgxOCwiZGl2IiwxMSkoMTksImRpdiIsMTIpKDIwLCJkaXYiLDEzKSgyMSwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDE0KSgyMiwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjMsImlucHV0IiwxNSksZ2koIm5nTW9kZWxD''@;'; put 'put ''aGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJhd0pzb24sdil8fChoLnJhd0pzb249diksdn0pLGhlKCksZGUoMjQsImxhYmVsIiksTGUoMjUsIlJBVyBKc29uIiksaGUoKSgpKCksZGUoMjYsImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5jb3B5SnNv''@;'; put 'put ''bigpfSksR3QoMjcsImNsci1pY29uIiwxNyksaGUoKSgpLGRlKDI4LCJoNCIsMTgpLExlKDI5LCIgQVBJIEV4cGxvcmVyICIpLGd0KDMwLHlrdCwxLDAsImNsci1zcGlubmVyIiwxOSksaGUoKSgpLEd0KDMxLCJociIsMjApLGd0KDMyLFNrdCwyMyw5LCJuZy1jb250YWluZXIiLDIxKSxoZSgp''@;'; put 'put ''KCkpLDImZCYmKGZlKDUpLHBpKCJuZ01vZGVsIixoLmNvbGxlY3Rpb24pLGZlKCksTWUoIm5nRm9yT2YiLERjKDcsMTEsaC5jb2xsZWN0aW9ucykpLGZlKDIpLE1lKCJuZ0lmIixoLmVuZHBvaW50TGlua3MubGVuZ3RoPDEmJiFoLmNvbGxlY3Rpb25Mb2FkaW5nKSxmZSgyKSxNZSgibmdJZiIs''@;'; put 'put ''aC5jb2xsZWN0aW9uTG9hZGluZyksZmUoMiksTWUoIm5nSWYiLGguZW5kcG9pbnRMaW5rcy5sZW5ndGg+MCksZmUoKSxNZSgibmdGb3JPZiIsaC5lbmRwb2ludExpbmtzKSxmZSgyKSxNZSgibmdJZiIsaC5lbmRwb2ludEl0ZW1zLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0Zvck9mIixoLmVuZHBv''@;'; put 'put ''aW50SXRlbXMpLGZlKDcpLHBpKCJuZ01vZGVsIixoLnJhd0pzb24pLGZlKDcpLE1lKCJuZ0lmIixoLmVuZHBvaW50TG9hZGluZyksZmUoMiksTWUoIm5nSWYiLGguY29sbGVjdGlvbi5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEEyLGsyLHFsLHZMLE1kLFQyLG5sLCRzLEVoLFBk''@;'; put 'put ''LEhsLGowLGRzLElkLEJ5LFNoLFoxLEdMLEU3LCR5LFJkLGk0LHI0LHRrdCx3Uixya3QsaWt0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHhrdD1uZXcgU3QoIldpbmRvd1Rva2VuIix0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRvY3VtZW50P3twcm92aWRlZElu''@;'; put 'put ''OiJyb290IixmYWN0b3J5OigpPT53aW5kb3d9Ontwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT57fX0pO2xldCBFa3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1pvbmU9YSx0aGlzLmRvY3VtZW50PWQsdGhpcy53aW5kb3c9aCx0aGlzLmNvcHlTdWJqZWN0''@;'; put 'put ''PW5ldyBXbix0aGlzLmNvcHlSZXNwb25zZSQ9dGhpcy5jb3B5U3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlzLmNvbmZpZz17fX1jb25maWd1cmUoYSl7dGhpcy5jb25maWc9YX1jb3B5KGEpe2lmKCF0aGlzLmlzU3VwcG9ydGVkfHwhYSlyZXR1cm4gdGhpcy5wdXNoQ29weVJlc3BvbnNlKHtp''@;'; put 'put ''c1N1Y2Nlc3M6ITEsY29udGVudDphfSk7Y29uc3QgZD10aGlzLmNvcHlGcm9tQ29udGVudChhKTtyZXR1cm4gdGhpcy5wdXNoQ29weVJlc3BvbnNlKGQ/e2NvbnRlbnQ6YSxpc1N1Y2Nlc3M6ZH06e2lzU3VjY2VzczohMSxjb250ZW50OmF9KX1nZXQgaXNTdXBwb3J0ZWQoKXtyZXR1cm4hIXRo''@;'; put 'put ''aXMuZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkJiYhIXRoaXMuZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkKCJjb3B5IikmJiEhdGhpcy53aW5kb3d9aXNUYXJnZXRWYWxpZChhKXtpZihhIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudHx8YSBpbnN0YW5jZW9mIEhUTUxU''@;'; put 'put ''ZXh0QXJlYUVsZW1lbnQpe2lmKGEuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXRocm93IG5ldyBFcnJvcignSW52YWxpZCAidGFyZ2V0IiBhdHRyaWJ1dGUuIFBsZWFzZSB1c2UgInJlYWRvbmx5IiBpbnN0ZWFkIG9mICJkaXNhYmxlZCIgYXR0cmlidXRlJyk7cmV0dXJuITB9dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJUYXJnZXQgc2hvdWxkIGJlIGlucHV0IG9yIHRleHRhcmVhIil9Y29weUZyb21JbnB1dEVsZW1lbnQoYSxkPSEwKXt0cnl7dGhpcy5zZWxlY3RUYXJnZXQoYSk7Y29uc3QgaD10aGlzLmNvcHlUZXh0KCk7cmV0dXJuIHRoaXMuY2xlYXJTZWxlY3Rpb24oZD9hOnZvaWQgMCx0aGlz''@;'; put 'put ''LndpbmRvdyksaCYmdGhpcy5pc0NvcHlTdWNjZXNzSW5JRTExKCl9Y2F0Y2h7cmV0dXJuITF9fWlzQ29weVN1Y2Nlc3NJbklFMTEoKXtjb25zdCBhPXRoaXMud2luZG93LmNsaXBib2FyZERhdGE7cmV0dXJuIShhJiZhLmdldERhdGEmJiFhLmdldERhdGEoIlRleHQiKSl9Y29weUZyb21Db250''@;'; put 'put ''ZW50KGEsZD10aGlzLmRvY3VtZW50LmJvZHkpe2lmKHRoaXMudGVtcFRleHRBcmVhJiYhZC5jb250YWlucyh0aGlzLnRlbXBUZXh0QXJlYSkmJnRoaXMuZGVzdHJveSh0aGlzLnRlbXBUZXh0QXJlYS5wYXJlbnRFbGVtZW50fHx2b2lkIDApLCF0aGlzLnRlbXBUZXh0QXJlYSl7dGhpcy50ZW1w''@;'; put 'put ''VGV4dEFyZWE9dGhpcy5jcmVhdGVUZW1wVGV4dEFyZWEodGhpcy5kb2N1bWVudCx0aGlzLndpbmRvdyk7dHJ5e2QuYXBwZW5kQ2hpbGQodGhpcy50ZW1wVGV4dEFyZWEpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQ29udGFpbmVyIHNob3VsZCBiZSBhIERvbSBlbGVtZW50Iil9fXRoaXMudGVt''@;'; put 'put ''cFRleHRBcmVhLnZhbHVlPWE7Y29uc3QgaD10aGlzLmNvcHlGcm9tSW5wdXRFbGVtZW50KHRoaXMudGVtcFRleHRBcmVhLCExKTtyZXR1cm4gdGhpcy5jb25maWcuY2xlYW5VcEFmdGVyQ29weSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCks''@;'; put 'put ''aH1kZXN0cm95KGE9dGhpcy5kb2N1bWVudC5ib2R5KXt0aGlzLnRlbXBUZXh0QXJlYSYmKGEucmVtb3ZlQ2hpbGQodGhpcy50ZW1wVGV4dEFyZWEpLHRoaXMudGVtcFRleHRBcmVhPXZvaWQgMCl9c2VsZWN0VGFyZ2V0KGEpe3JldHVybiBhLnNlbGVjdCgpLGEuc2V0U2VsZWN0aW9uUmFuZ2Uo''@;'; put 'put ''MCxhLnZhbHVlLmxlbmd0aCksYS52YWx1ZS5sZW5ndGh9Y29weVRleHQoKXtyZXR1cm4gdGhpcy5kb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpfWNsZWFyU2VsZWN0aW9uKGEsZCl7YSYmYS5mb2N1cygpLGQuZ2V0U2VsZWN0aW9uKCk/LnJlbW92ZUFsbFJhbmdlcygpfWNyZWF0ZVRlbXBU''@;'; put 'put ''ZXh0QXJlYShhLGQpe2NvbnN0IGg9InJ0bCI9PT1hLmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpO2xldCBmO3JldHVybiBmPWEuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKSxmLnN0eWxlLmZvbnRTaXplPSIxMnB0IixmLnN0eWxlLmJvcmRlcj0iMCIsZi5zdHlsZS5wYWRk''@;'; put 'put ''aW5nPSIwIixmLnN0eWxlLm1hcmdpbj0iMCIsZi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGVbaD8icmlnaHQiOiJsZWZ0Il09Ii05OTk5cHgiLGYuc3R5bGUudG9wPShkLnBhZ2VZT2Zmc2V0fHxhLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApKyJweCIsZi5zZXRBdHRyaWJ1''@;'; put 'put ''dGUoInJlYWRvbmx5IiwiIiksZn1wdXNoQ29weVJlc3BvbnNlKGEpe3RoaXMuY29weVN1YmplY3Qub2JzZXJ2ZXJzLmxlbmd0aD4wJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNvcHlTdWJqZWN0Lm5leHQoYSl9KX1wdXNoQ29weVJlcG9uc2UoYSl7dGhpcy5wdXNoQ29weVJlc3BvbnNl''@;'; put 'put ''KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihXYSkseHIodnMpLHhyKHhrdCw4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksVGt0PSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5uZ1pvbmU9YSx0aGlzLmhvc3Q9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jbGlwYm9hcmRTcnY9Zix0aGlzLmNiT25TdWNjZXNzPW5ldyBLcix0aGlzLmNiT25FcnJvcj1uZXcgS3IsdGhpcy5vbkNsaWNrPXY9Pnt0aGlzLmNsaXBib2FyZFNy''@;'; put 'put ''di5pc1N1cHBvcnRlZD90aGlzLnRhcmdldEVsbSYmdGhpcy5jbGlwYm9hcmRTcnYuaXNUYXJnZXRWYWxpZCh0aGlzLnRhcmdldEVsbSk/dGhpcy5oYW5kbGVSZXN1bHQodGhpcy5jbGlwYm9hcmRTcnYuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50YXJnZXRFbG0pLHRoaXMudGFyZ2V0RWxt''@;'; put 'put ''LnZhbHVlLHYpOnRoaXMuY2JDb250ZW50JiZ0aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUNvbnRlbnQodGhpcy5jYkNvbnRlbnQsdGhpcy5jb250YWluZXIpLHRoaXMuY2JDb250ZW50LHYpOnRoaXMuaGFuZGxlUmVzdWx0KCExLHZvaWQgMCx2KX19bmdPbklu''@;'; put 'put ''aXQoKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuY2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwiY2xpY2siLHRoaXMub25DbGljayl9KX1uZ09uRGVzdHJveSgpe3RoaXMuY2xpY2tMaXN0ZW5lciYmdGhp''@;'; put 'put ''cy5jbGlja0xpc3RlbmVyKCksdGhpcy5jbGlwYm9hcmRTcnYuZGVzdHJveSh0aGlzLmNvbnRhaW5lcil9aGFuZGxlUmVzdWx0KGEsZCxoKXtsZXQgZj17aXNTdWNjZXNzOmEsY29udGVudDpkLHN1Y2Nlc3NNZXNzYWdlOnRoaXMuY2JTdWNjZXNzTXNnLGV2ZW50Omh9O2E/dGhpcy5jYk9uU3Vj''@;'; put 'put ''Y2Vzcy5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uU3VjY2Vzcy5lbWl0KGYpfSk6dGhpcy5jYk9uRXJyb3Iub2JzZXJ2ZWQmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY2JPbkVycm9yLmVtaXQoZil9KSx0aGlzLmNsaXBib2FyZFNydi5wdXNoQ29weVJlc3Bv''@;'; put 'put ''bnNlKGYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShXYSksR2UoSmkpLEdlKEVvKSxHZShFa3QpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmd4Q2xpcGJvYXJkIiwiIl1dLGlucHV0czp7dGFyZ2V0RWxtOltO''@;'; put 'put ''bi5Ob25lLCJuZ3hDbGlwYm9hcmQiLCJ0YXJnZXRFbG0iXSxjb250YWluZXI6ImNvbnRhaW5lciIsY2JDb250ZW50OiJjYkNvbnRlbnQiLGNiU3VjY2Vzc01zZzoiY2JTdWNjZXNzTXNnIn0sb3V0cHV0czp7Y2JPblN1Y2Nlc3M6ImNiT25TdWNjZXNzIixjYk9uRXJyb3I6ImNiT25FcnJvciJ9''@;'; put 'put ''fSksY30pKCksQWt0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpO3ZhciBra3Q9eSgyNTAwMSk7bGV0IERrdD0o''@;'; put 'put ''KCk9PntjbGFzcyBje3RyYW5zZm9ybShhLC4uLmQpe2NvbnN0IGg9cGFyc2VJbnQoZFswXSl8fDIsZj0ibnVtYmVyIiE9dHlwZW9mIGE/cGFyc2VJbnQoYSk6YTtyZXR1cm4oMCxra3QuQykoZixoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToiY29udmVydFNpemUiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKTtjb25zdCBJa3Q9WyJxdWVyeUZpbHRlciJdLFJrdD0oKT0+WyIiLCIgIl07ZnVuY3Rpb24gTGt0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw1NCksR3QoMSwi''@;'; put 'put ''Y2xyLXNwaW5uZXIiLDU1KSxoZSgpKX1mdW5jdGlvbiBPa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw2MSl9ZnVuY3Rpb24gUGt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDYyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1SZSgy''@;'; put 'put ''KTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsQ3QoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBGa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw1NikoMSwiZGl2Iiw1NykoMiwiaW5wdXQiLDU4LDEpLGdpKCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCk7cmV0dXJuIG1pKGYubGlicmFyaWVzU2VhcmNoLGgpfHwoZi5saWJyYXJpZXNTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKCkubGlicmFyeU9uRmlsdGVyKCkpfSks''@;'; put 'put ''aGUoKSxndCg0LE9rdCwxLDAsImNsci1pY29uIiw1OSkoNSxQa3QsMSwwLCJjbHItaWNvbiIsNjApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1SZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksZmUoMiksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEp''@;'; put 'put ''LGZlKCksTWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBIa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw2MSl9ZnVuY3Rpb24gTmt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDYyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSks''@;'; put 'put ''UmUoKTtjb25zdCBoPWhhKDMpLGY9UmUoMikuJGltcGxpY2l0LHY9UmUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMiKSl9KSxoZSgpfX1mdW5jdGlvbiBWa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJj''@;'; put 'put ''bHItdHJlZS1ub2RlIiw1NikoMSwiZGl2Iiw1NykoMiwiaW5wdXQiLDY3LDIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0''@;'; put 'put ''KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPVJlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoUmUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxndCg0LEhrdCwxLDAsImNsci1pY29uIiw1OSkoNSxOa3QsMSwwLCJjbHItaWNvbiIsNjApLGhlKCkoKX1pZigyJmMp''@;'; put 'put ''e2NvbnN0IGE9aGEoMyksZD1SZSgyKS4kaW1wbGljaXQ7ZmUoMiksTWUoImlkIiwic2VhcmNoXyIrZC5MSUJSQVJZUkVGKSxwaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLE1lKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4w''@;'; put 'put ''KX19ZnVuY3Rpb24gQmt0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNzQpfWZ1bmN0aW9uIGprdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDc1KX1mdW5jdGlvbiB6a3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDcwKSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7d3QoYSk7Y29uc3QgaD1SZSgpLm5nVmFyLGY9UmUoKS4kaW1wbGljaXQsdj1SZSgyKS4kaW1wbGljaXQsTT1SZSgpO3JldHVybiBDdChoPyIiOk0ub25UYWJsZUNsaWNrKGYsdikpfSksc2koMSw3MSksZ3QoMixCa3QsMSwwLCJjbHItaWNvbiIsNzIpKDMsamt0LDEsMCwiY2xyLWljb24i''@;'; put 'put ''LDczKSxsaSgpLExlKDQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKCkubmdWYXIsZD1SZSgpLiRpbXBsaWNpdCxoPVJlKDIpLiRpbXBsaWNpdCxmPVJlKCk7VHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgiYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLGZlKCksTWUo''@;'; put 'put ''Im5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwhMCksZmUoKSxNZSgibmdTd2l0Y2hDYXNlIiwhMSksZmUoKSxEcigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpfX1mdW5jdGlvbiBVa3QoYyxsKXsxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1j''@;'; put 'put ''b250ZW50Iiw3NykoMSwic3BhbiIpLExlKDIsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGhlKCkoKSl9ZnVuY3Rpb24gWmt0KGMsbCl7MSZjJiYoc2koMCksZ3QoMSxVa3QsMywwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw3Niks''@;'; put 'put ''bGkoKSl9ZnVuY3Rpb24gV2t0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAiKSxndCgxLHprdCw1LDgsImJ1dHRvbiIsNjkpKDIsWmt0LDIsMCwibmctY29udGFpbmVyIiw0MiksaGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXIsZD1SZSgpLiRpbXBsaWNpdDtmZSgpLE1lKCJuZ0lm''@;'; put 'put ''IixkLmxlbmd0aD4wKSxmZSgpLE1lKCJuZ0lmIixhKX19ZnVuY3Rpb24gWWt0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIpLGd0KDEsV2t0LDMsMiwiY2xyLXRvb2x0aXAiLDY4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPVJlKDMpO2ZlKCksTWUoIm5nVmFyIixh''@;'; put 'put ''KzE+ZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBHa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2NCksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPVJlKCkuJGltcGxpY2l0''@;'; put 'put ''O3JldHVybiBDdChSZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1SZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiw2NSks''@;'; put 'put ''RnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9UmUoKS4kaW1wbGljaXQsZj1SZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllSRUYsQ3QoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSksR3QoMiwiY2xyLWljb24iLDY2KSxMZSgzKSxoZSgpLGd0KDQsVmt0LDYs''@;'; put 'put ''NCwiY2xyLXRyZWUtbm9kZSIsNykoNSxZa3QsMiwxLCJjbHItdHJlZS1ub2RlIiw4KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1SZSgpLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLE1lKCJjbHJMb2FkaW5nIixhLmxv''@;'; put 'put ''YWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksRHIoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxmZSgpLE1lKCJuZ0lmIixhLnRhYmxlcyksZmUoKSxNZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiAka3QoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLEdrdCw2LDcsImNsci10cmVl''@;'; put 'put ''LW5vZGUiLDYzKSxsaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxNZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIEtrdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzgpKDEsInNwYW4iLDc5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkp''@;'; put 'put ''fWZ1bmN0aW9uIHFrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsODApKDEsImRpdiIsODEpKDIsImRpdiIsODIpKDMsImRpdiIsODMpKDQsImJ1dHRvbiIsODQpLEd0KDUsImNsci1pY29uIiw4NSksaGUoKSxkZSg2LCJoMyIsNDcpLExlKDcsIkVycm9yIiksaGUoKSgp''@;'; put 'put ''LGRlKDgsImRpdiIsMTUpKDksInAiKSxMZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIpLGhlKCkoKSxkZSgxMSwiZGl2IiwyNikoMTIsImJ1dHRvbiIsODYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoKS5udWxsVmFyaWFibGVzPSExKX0p''@;'; put 'put ''LExlKDEzLCIgT2sgIiksaGUoKSgpKCkoKSgpfX1mdW5jdGlvbiBYa3QoYyxsKXsxJmMmJkd0KDAsImRpdiIsODcpfWZ1bmN0aW9uIEprdChjLGwpezEmYyYmR3QoMCwiYXBwLXF1ZXJ5IixudWxsLDMpfWZ1bmN0aW9uIFFrdChjLGwpezEmYyYmKGRlKDAsImRpdiIsODgpKDEsInNwYW4iLDg5''@;'; put 'put ''KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsImRpdiIsOTApKDQsInAiLDkxKSxMZSg1LCJMb2FkaW5nIFRhYmxlIFZpZXdlciIpLGhlKCkoKSgpKX1mdW5jdGlvbiBlRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTE1KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7d3QoYSksUmUoKTtjb25zdCBoPWhhKDUpO3JldHVybiBDdChSZSgyKS5zZWFyY2hUYWJsZShoKSl9KSxoZSgpfX1mdW5jdGlvbiB0RHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMTYpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIG5EdChjLGwpezEmYyYm''@;'; put 'put ''R3QoMCwiY2xyLWljb24iLDExNyl9ZnVuY3Rpb24gckR0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTE4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMyk7ZmUoKSxEcigiICIsbnVsbD09YS50YWJsZVRpdGxlP251bGw6YS50YWJsZVRpdGxlLnJlcGxhY2UoIi1GQyIsIiIpLCIg''@;'; put 'put ''Iil9fWZ1bmN0aW9uIGlEdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDEyMCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPVJlKDQpO2ZlKCksRHIoIiAiLGEuZHNOb3RlLCIgIil9fWZ1bmN0aW9uIGFEdChjLGwpezEmYyYmKHNpKDApLGd0KDEsaUR0LDIsMSwi''@;'; put 'put ''Y2xyLXRvb2x0aXAtY29udGVudCIsMTE5KSxsaSgpKX1mdW5jdGlvbiBvRHQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksZWwoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoKSxLSSgiICgiLHo4KDIsNCxhLm51bWJlck9mUm93cywi''@;'; put 'put ''LCIpLCIgIiwxPT09YS5udW1iZXJPZlJvd3M/InJvdyI6InJvd3MiLCIsICIsYS5maWx0ZXJDb2xzLmxlbmd0aCwiIiwxPT09YS5maWx0ZXJDb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24gc0R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZ3QoMSxv''@;'; put 'put ''RHQsMyw3LCJzcGFuIiw0MiksZGUoMiwiY2xyLWljb24iLDEyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgzKS5yZWxvYWRUYWJsZURhdGEoKSl9KSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLG51bGwhPT1hLm51bWJl''@;'; put 'put ''ck9mUm93cyl9fWZ1bmN0aW9uIGxEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KFJlKDUpLmVkaXRUYWJsZSgpKX0pLEd0KDEsImNsci1pY29uIiwxMzMpLGRlKDIsInNwYW4iKSxMZSgzLCJF''@;'; put 'put ''ZGl0IiksaGUoKSgpfX1mdW5jdGlvbiBjRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg1KS5nb1RvTGluZWFnZSgpKX0pLEd0KDEsImNsci1pY29uIiwxMzQpLGRlKDIsInNwYW4iKSxM''@;'; put 'put ''ZSgzLCJMaW5lYWdlIiksaGUoKSgpfX1mdW5jdGlvbiB1RHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsMTI2KSgxLCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS5uZXdWaWV3Ym94KCkpfSks''@;'; put 'put ''R3QoMiwiY2xyLWljb24iLDEyOCksZGUoMywic3BhbiIpLExlKDQsIlZpZXdib3hlcyIpLGhlKCkoKSxndCg1LGxEdCw0LDAsImRpdiIsMTI5KSg2LGNEdCw0LDAsImRpdiIsMTI5KSxkZSg3LCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSg0KS5v''@;'; put 'put ''cGVuUWIoKSl9KSxHdCg4LCJjbHItaWNvbiIsMTMwKSxkZSg5LCJzcGFuIiksTGUoMTAsIkZpbHRlciIpLGhlKCkoKSxkZSgxMSwiZGl2IiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkub3BlbkRvd25sb2FkPSEwKX0pLEd0KDEyLCJjbHItaWNvbiIs''@;'; put 'put ''MTMxKSxkZSgxMywic3BhbiIpLExlKDE0LCJEb3dubG9hZCIpLGhlKCkoKSxkZSgxNSwiZGl2IiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkuc2hvd1dlYlF1ZXJ5KCkpfSksR3QoMTYsImNsci1pY29uIiwxMzIpLGRlKDE3LCJzcGFuIiksTGUoMTgs''@;'; put 'put ''IldlYiBRdWVyeSBVUkwiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoNSksTWUoIm5nSWYiLGEudGFibGVFZGl0RXhpc3RzKCkpLGZlKCksTWUoIm5nSWYiLGEudGFibGV1cmkpfX1mdW5jdGlvbiBkRHQoYyxsKXsxJmMmJihkZSgwLCJjbHItZHJvcGRvd24iLDEyMikoMSwi''@;'; put 'put ''YnV0dG9uIiwxMjMpLEd0KDIsImNsci1pY29uIiwxMjQpLExlKDMsIiBvcHRpb25zICIpLGhlKCksZ3QoNCx1RHQsMTksMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDEyNSksaGUoKSksMiZjJiZNZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKX1mdW5jdGlvbiBoRHQoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiLDEzNSkoMSwic3BhbiIpLExlKDIsIkZJTFRFUiA6ICIpLGRlKDMsImIiKSxMZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKDQpLHdyKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24gZkR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5''@;'; put 'put ''OCkoMSwic2VjdGlvbiIsOTkpKDIsImZvcm0iLDEwMCkoMywiZGl2IiwxMDEpKDQsImlucHV0IiwxMDIsNCksRnQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9aGEoNSk7cmV0dXJuIEN0KFJlKDIpLnNlYXJjaFRhYmxlKGgpKX0pLGhlKCksZ3QoNixlRHQsMSwwLCJj''@;'; put 'put ''bHItaWNvbiIsMTAzKSg3LHREdCwyLDAsInNwYW4iLDEwNCksaGUoKSxkZSg4LCJjbHItY2hlY2tib3gtY29udGFpbmVyIikoOSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMCwiaW5wdXQiLDEwNSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9UmUoMik7''@;'; put 'put ''cmV0dXJuIG1pKGYuc2VhcmNoTnVtZXJpYyxoKXx8KGYuc2VhcmNoTnVtZXJpYz1oKSxDdChoKX0pLGhlKCksZGUoMTEsImxhYmVsIiksTGUoMTIsIk51bWVyaWMiKSxoZSgpKCkoKSgpKCksZGUoMTMsImRpdiIsMTA2KSgxNCwicCIsMTA3KSgxNSwiY2xyLXRvb2x0aXAiLDEwOCkoMTYsImNs''@;'; put 'put ''ci1pY29uIiwxMDkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoMikuZGF0YXNldEluZm89ITApfSksaGUoKSxndCgxNyxuRHQsMSwwLCJjbHItaWNvbiIsMTEwKSgxOCxyRHQsMiwxLCJzcGFuIiwxMTEpKDE5LGFEdCwyLDAsIm5nLWNvbnRhaW5lciIsNDIpLGhl''@;'; put 'put ''KCksZ3QoMjAsc0R0LDMsMSwibmctY29udGFpbmVyIiw0MiksaGUoKSgpLGRlKDIxLCJkaXYiLDExMiksZ3QoMjIsZER0LDUsMSwiY2xyLWRyb3Bkb3duIiwxMTMpLGhlKCksZ3QoMjMsaER0LDUsMSwiZGl2IiwxMTQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPVJlKDIpO2ZlKDQpLE1lKCJ0eXBl''@;'; put 'put ''IixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxmZSgyKSxNZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksZmUoKSxNZSgibmdJZiIsYS5zZWFyY2hMb2FkaW5nKSxmZSgzKSxwaSgibmdNb2RlbCIsYS5zZWFyY2hOdW1lcmljKSxmZSg3KSxNZSgibmdJZiIsbnVsbD09YS50YWJs''@;'; put 'put ''ZVRpdGxlP251bGw6YS50YWJsZVRpdGxlLmluY2x1ZGVzKCItRkMiKSksZmUoKSxNZSgibmdJZiIsYS50YWJsZVRpdGxlJiZhLnRhYmxlVGl0bGUubGVuZ3RoPjApLGZlKCksTWUoIm5nSWYiLGEuZHNOb3RlJiZhLmRzTm90ZS5sZW5ndGg+MCksZmUoKSxNZSgibmdJZiIsYS50YWJsZVRpdGxl''@;'; put 'put ''JiZhLnRhYmxlVGl0bGUubGVuZ3RoPjApLGZlKDIpLE1lKCJuZ0lmIixhLnRhYmxlVGl0bGUmJiFhLmFib3J0QWN0aXZlKSxmZSgpLE1lKCJuZ0lmIiwiMT0xIiE9PWEucXVlcnlUZXh0JiYhR3MoMTAsUmt0KS5pbmNsdWRlcyhhLnF1ZXJ5VGV4dCkmJiFhLmFib3J0QWN0aXZlKX19ZnVuY3Rp''@;'; put 'put ''b24gcER0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMzYpLEd0KDEsImltZyIsMTM3KSxkZSgyLCJoMyIsMTM4KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGxpYnJhcnkgIiksaGUoKSgpKX1mdW5jdGlvbiBnRHQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiw1NSl9ZnVuY3Rpb24gbUR0''@;'; put 'put ''KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxNDUpLEd0KDEsImltZyIsMTQ2KSxkZSgyLCJwIiwxMzgpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIiksaGUoKSgpKX1mdW5jdGlvbiB2RHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJwIiwxNDkpLExlKDEsIiBObyBsaWJy''@;'; put 'put ''YXJ5IGluZm8gZm91bmQuIENsaWNrICIpLGRlKDIsImNsci1pY29uIiwxNTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoUmUoNCkucmVsb2FkTGliSW5mbygpKX0pLGhlKCksTGUoMywiIGJ1dHRvbiB0byByZWZyZXNoLiAiKSxoZSgpfX1mdW5jdGlvbiBiRHQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIkVOR0lORToiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkVOR0lORToiIiwiICIpfX1mdW5jdGlv''@;'; put 'put ''biB5RHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIkxJQklEOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCSUQ6IiIsIiAiKX19''@;'; put 'put ''ZnVuY3Rpb24gX0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJMSUJOQU1FOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCTkFN''@;'; put 'put ''RToiIiwiICIpfX1mdW5jdGlvbiB3RHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIkxJQlNJWkU6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxlbCg1LCJjb252ZXJ0U2l6ZSIpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLERyKCIgIixh''@;'; put 'put ''LmxpYmluZm9bMF0/RGMoNSwxLGEubGliaW5mb1swXS5MSUJTSVpFKToiIiwiICIpfX1mdW5jdGlvbiBDRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIk9XTkVSUzoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJl''@;'; put 'put ''KDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLk9XTkVSUzoiIiwiICIpfX1mdW5jdGlvbiBTRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIlBBVEhTOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9UmUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEFUSFM6IiIsIiAiKX19ZnVuY3Rpb24gTUR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJQRVJNUzoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlBFUk1TOiIiLCIgIil9fWZ1bmN0aW9uIHhEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksTGUoMiwiU0NIRU1BUzoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQp''@;'; put 'put ''LGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlNDSEVNQVM6IiIsIiAiKX19ZnVuY3Rpb24gRUR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJUQUJMRV9DTlQ6IiksaGUoKSxkZSgzLCJ0''@;'; put 'put ''ZCIsMTUyKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1SZSg1KTtmZSg0KSxEcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5UQUJMRV9DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gVER0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJDQVRBTE9HX0NO''@;'; put 'put ''VDoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPVJlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkNBVEFMT0dfQ05UOiIiLCIgIil9fWZ1bmN0aW9uIEFEdChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsInRhYmxlIiks''@;'; put 'put ''Z3QoMixiRHQsNSwxLCJ0ciIsNDIpKDMseUR0LDUsMSwidHIiLDQyKSg0LF9EdCw1LDEsInRyIiw0MikoNSx3RHQsNiwzLCJ0ciIsNDIpKDYsQ0R0LDUsMSwidHIiLDQyKSg3LFNEdCw1LDEsInRyIiw0MikoOCxNRHQsNSwxLCJ0ciIsNDIpKDkseER0LDUsMSwidHIiLDQyKSgxMCxFRHQsNSwx''@;'; put 'put ''LCJ0ciIsNDIpKDExLFREdCw1LDEsInRyIiw0MiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9UmUoNCk7ZmUoMiksTWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkVOR0lORSksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCSUQpLGZlKCksTWUoIm5nSWYiLCIiIT09YS5s''@;'; put 'put ''aWJpbmZvWzBdLkxJQk5BTUUpLGZlKCksTWUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uTElCU0laRSksZmUoKSxNZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uT1dORVJTKSxmZSgpLE1lKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QQVRIUyksZmUoKSxNZSgibmdJZiIsIiIhPT1h''@;'; put 'put ''LmxpYmluZm9bMF0uUEVSTVMpLGZlKCksTWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlNDSEVNQVMpLGZlKCksTWUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uVEFCTEVfQ05UKSxmZSgpLE1lKCJuZ0lmIixudWxsIT09YS5saWJpbmZvWzBdLkNBVEFMT0dfQ05UKX19ZnVuY3Rpb24g''@;'; put 'put ''a0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNDcpLGd0KDEsdkR0LDQsMCwicCIsMTQ4KSgyLEFEdCwxMiwxMCwibmctY29udGFpbmVyIiw0MiksaGUoKSksMiZjKXtjb25zdCBhPVJlKDMpO2ZlKCksTWUoIm5nSWYiLGEubGliaW5mby5sZW5ndGg8MSksZmUoKSxNZSgibmdJZiIsYS5s''@;'; put 'put ''aWJpbmZvLmxlbmd0aD4wKX19ZnVuY3Rpb24gRER0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2IiwxMzkpLEd0KDIsInNlY3Rpb24iLDk5KSxkZSgzLCJkaXYiLDE0MCkoNCwicCIsOTEpLExlKDUpLGhlKCksZGUoNiwiY2xyLWljb24iLDEyMSksRnQoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChSZSgyKS5yZWxvYWRMaWJJbmZvKCkpfSksaGUoKSgpLEd0KDcsImRpdiIsMTEyKSxoZSgpLGRlKDgsImRpdiIsMTQxKSxndCg5LGdEdCwxLDAsImNsci1zcGlubmVyIiwxNDIpLGhlKCksZ3QoMTAsbUR0LDQsMCwiZGl2IiwxNDMpKDExLGtE''@;'; put 'put ''dCwzLDIsImRpdiIsMTQ0KSxsaSgpfWlmKDImYyl7Y29uc3QgYT1SZSgyKTtmZSg1KSxEcigiICIsYS5saWIsIiAiKSxmZSg0KSxNZSgibmdJZiIsbnVsbD09PWEubGliaW5mbyksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyksZmUoKSxNZSgibmdJZiIsbnVsbCE9PWEubGliaW5m''@;'; put 'put ''byl9fWZ1bmN0aW9uIElEdChjLGwpezEmYyYmKGRlKDAsImgzIiwxNTYpLExlKDEsIiBObyBkYXRhIGZvdW5kIHdpdGggZ2l2ZW4gY29uZGl0aW9ucyAiKSxoZSgpKX1mdW5jdGlvbiBSRHQoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTU2KSxMZSgxLCIgTm8gZGF0YSBmb3VuZCBkdWUgdG8gc2Fz''@;'; put 'put ''IHJlcXVlc3QgZXJyb3IgIiksaGUoKSl9ZnVuY3Rpb24gTER0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNTMpLEd0KDEsImNsci1pY29uIiwxNTQpLGd0KDIsSUR0LDIsMCwiaDMiLDE1NSkoMyxSRHQsMiwwLCJoMyIsMTU1KSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoMiksTWUo''@;'; put 'put ''Im5nSWYiLGEubm9EYXRhKSxmZSgpLE1lKCJuZ0lmIixhLm5vRGF0YVJlcUVycil9fWZ1bmN0aW9uIE9EdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTU3KSxHdCgxLCJob3QtdGFibGUiLDE1OCksaGUoKSksMiZjKXtjb25zdCBhPVJlKDIpO2ZlKCksTWUoIm11bHRpQ29sdW1uU29ydGlu''@;'; put 'put ''ZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixhLmhvdFRhYmxlLmNvbHVtbnMpKCJjb3B5UGFzdGUiLGEuaG90VGFibGUuY29weVBhc3RlKSgi''@;'; put 'put ''Y29udGV4dE1lbnUiLGEuaG90VGFibGUuY29udGV4dE1lbnUpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3duTWVudSIsYS5ob3RUYWJsZS5kcm9wZG93bk1lbnUpKCJoZWlnaHQiLGEuaG90VGFibGUuaGVpZ2h0KSgibW9kaWZ5Q29sV2lkdGgiLGEubWF4V2lkdGhDaGVrZXIpKCJjZWxscyIsYS5o''@;'; put 'put ''b3RUYWJsZS5jZWxscykoIm1heFJvd3MiLGEuaG90VGFibGUubWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJhZnRlckdldENvbEhlYWRlciIsYS5ob3RUYWJsZS5hZnRlckdldENvbEhlYWRlcikoInJvd0hlYWRlcnMiLGEuaG90VGFibGUucm93SGVhZGVycykoInJvd0hlYWRl''@;'; put 'put ''cldpZHRoIixhLmhvdFRhYmxlLnJvd0hlYWRlcldpZHRoKSgicm93SGVpZ2h0cyIsYS5ob3RUYWJsZS5yb3dIZWlnaHRzKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZS5saWNlbnNlS2V5KX19ZnVuY3Rpb24gUER0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTU5KSxMZSgxKSxHdCgyLCJjb250''@;'; put 'put ''YWN0LWxpbmsiKSxoZSgpKSwyJmMpe2NvbnN0IGE9UmUoMik7ZmUoKSxEcigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIEZEdChjLGwpe2lmKDEmYyYmKGRlKDAsImRp''@;'; put 'put ''diIsOTIpLGd0KDEsZkR0LDI0LDExLCJkaXYiLDkzKSgyLHBEdCw0LDAsImRpdiIsOTQpKDMsRER0LDEyLDQsIm5nLWNvbnRhaW5lciIsNDIpKDQsTER0LDQsMiwiZGl2Iiw5NSkoNSxPRHQsMiwxOSwiZGl2Iiw5NiksZGUoNiwiZGl2IiksZ3QoNyxQRHQsMywxLCJwIiw5NyksaGUoKSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9UmUoKTtmZSgpLE1lKCJuZ0lmIixhLnRhYmxlKSxmZSgpLE1lKCJuZ0lmIiwhKGEubGlifHxhLnRhYmxlfHxhLm5vRGF0YVJlcUVycnx8YS5ub0RhdGEpKSxmZSgpLE1lKCJuZ0lmIiwhYS5ub0RhdGEmJiFhLm5vRGF0YVJlcUVyciYmIWEudGFibGUmJmEubGliKSxmZSgp''@;'; put 'put ''LE1lKCJuZ0lmIixhLm5vRGF0YXx8YS5ub0RhdGFSZXFFcnIpLGZlKCksTWUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiZhLnRhYmxlKSxmZSgyKSxNZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkmJmEuaG90''@;'; put 'put ''VGFibGUuZGF0YSYmYS5ob3RUYWJsZS5kYXRhLmxlbmd0aD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19bGV0IHpOPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNT''@;'; put 'put ''dG9yZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMucm91dGU9dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMubG9nZ2VyU2VydmljZT1ELHRoaXMuaGVscGVyU2VydmljZT1aLHRoaXMubG9jYXRpb249cmUsdGhpcy5jZGY9Y2UsdGhpcy5xdWVyeUZpbHRl''@;'; put 'put ''ckNvbXBMaXN0PW5ldyBmZCx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNUcmVlRXhwYW5kZWQ9ITEsdGhpcy5saWJpbmZvPW51bGwsdGhpcy50YWJsZXVyaT1udWxsLHRoaXMuZmls''@;'; put 'put ''dGVyPSExLHRoaXMuZmlsdGVyQ29scz1bXSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5hYm9ydEFjdGl2ZT0hMSx0aGlzLnVybEZpbHRlclBrPW51bGwsdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy53ZWJRdWVyeVRleHQ9IiIsdGhpcy5xdWVyeUVycj0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0''@;'; put 'put ''aGlzLmxpYnJhcmllc0xvYWRpbmc9ITEsdGhpcy5sb2FkaW5nVGFibGVWaWV3PSExLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLm5vRGF0YVJlcUVycj0hMSx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLmFjdGlvbkRpc2FibGU9ITEsdGhpcy5vcGVuRG93bmxvYWQ9''@;'; put 'put ''ITEsdGhpcy53ZWJRdWVyeT0hMSx0aGlzLndlYlF1ZXJ5VGFiPSExLHRoaXMuZG93bmxvYWRGb3JtYXQ9IkNTViIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5zZWFyY2hMb2FkaW5nPSExLHRoaXMuc2VhcmNoTnVtZXJpYz0hMSx0aGlzLm51bWJlck9mUm93cz1u''@;'; put 'put ''dWxsLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLnZlcnNpb25zPVtdLHRoaXMuZHNOb3RlPSIiLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRo''@;'; put 'put ''aXMuSW5maW5pdHk9MS8wLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDoiMTAwJSIsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsc2V0dGluZ3M6e30sbGljZW5zZUtleTp2b2lkIDAs''@;'; put 'put ''cm93SGVhZGVyczpiZT0+IiAiLGFmdGVyR2V0Q29sSGVhZGVyOihiZSxFZSxCZSk9PntFZS5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjAsY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29s''@;'; put 'put ''dW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9vbmx5In0sYWxpZ25t''@;'; put 'put ''ZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KGJlLEVlLEJlLHFlLHJ0LHB0KT0+e2NvbnN0IGR0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgSnQsdm49Ik5vIGluZm8gZm91bmQi''@;'; put 'put ''O2lmKHRoaXMuaG90SW5zdGFuY2Upe2NvbnN0IENuPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKXx8W10sdG49Q24/Q25bMF1bMV06LTEsTW49dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKHRuKTtKdD10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tNbl0sSnQmJih2bj1gTEFCRUw6''@;'; put 'put ''ICR7SnQ/LmxhYmVsfTxicj5UWVBFOiAke0p0Py50eXBlfTxicj5MRU5HVEg6ICR7SnQ/Lmxlbmd0aH08YnI+Rk9STUFUOiAke0p0Py5mb3JtYXR9YCl9cmV0dXJuIGR0LmlubmVySFRNTD12bixkdH19fX19LHRoaXMuaG90SW5zdGFuY2U9bnVsbCx0aGlzLmhvdEluc3RhbmNlQ2xpY2tMaXN0''@;'; put 'put ''ZW5lcj0hMSx0aGlzLnZpZXdib3hPcGVuPSExLHRoaXMuaG90VGFibGVSZWdpc3RlcmVyPW5ldyBZbSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpfW5nT25Jbml0KCl7IiIhPT1Lbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbiYmMD09PU9iamVjdC5r''@;'; put 'put ''ZXlzKHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zKS5sZW5ndGgmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1l''@;'; put 'put ''bSYmKEtuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L2RhdGEiKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGUubGljZW5zZUtleT1hfSl9bmV3Vmlld2JveCgpe3RoaXMudmlld2JveE9wZW49ITB9cmVzZXRGaWx0''@;'; put 'put ''ZXIoKXt0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QmJnRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdC5yZXNldEZpbHRlcigpfXNlYXJjaFRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Quc2VhcmNoTG9hZGluZz0hMDtsZXQgaD1hLnZhbHVlLGY9''@;'; put 'put ''ZC5saWIrIi4iK2QudGFibGUsdj1wYXJzZUludChkLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCl8fDA7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFTZWFyY2goaCxkLnNlYXJjaE51bWVyaWMsZix2KS50aGVuKE09PntNLnNhc3BhcmFtc3x8TS52aWV3RGF0YT8oZC5o''@;'; put 'put ''b3RUYWJsZS5kYXRhPU0udmlld2RhdGEsZC4kZGF0YUZvcm1hdHM9TS4kdmlld2RhdGEsZC5kc21ldGE9TS5kc21ldGEsZC52ZXJzaW9ucz1NLnZlcnNpb25zfHxbXSxkLnNldERTTm90ZSgpLGQubnVtYmVyT2ZSb3dzPU0uc2FzcGFyYW1zWzBdLk5PQlMsZC5xdWVyeVRleHQ9TS5zYXNwYXJh''@;'; put 'put ''bXNbMF0uRklMVEVSX1RFWFQsZC5oZWFkZXJQa3M9TS5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/ZC5ub0RhdGE9ITA6KGQubm9EYXRhPSExLGQudGFibGVGbGFnPSExLGQuc2V0dXBIb3QoKSkpOmQuc2VhcmNoTG9hZGluZz0h''@;'; put 'put ''MX0pLmNhdGNoKE09PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoTSl9KSxkLnNlYXJjaExvYWRpbmc9ITF9KSgpfXJlbG9hZFRhYmxlRGF0YSgpe3RoaXMudmlld0RhdGEodGhpcy51cmxGaWx0ZXJQa3x8MCl9cmVsb2FkTGliSW5mbygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigp''@;'; put 'put ''e2EubGliaW5mbz1udWxsLGEuc2FzU3RvcmVTZXJ2aWNlLnJlZnJlc2hMaWJJbmZvKGEubGliKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgpe2EubGliaW5mbz1oLmxpYmluZm8sS24udmlld2VyLmxpYmluZm89YS5saWJpbmZvO2NvbnN0IGY9YS5saWJyYXJpZXMuZmlu''@;'; put 'put ''ZCh2PT52LkxJQlJBUllSRUY9PT1hLmxpYik7ZiYmKGYubGliaW5mbz1hLmxpYmluZm8pfSk7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKSxudWxsPT09YS5saWJpbmZvJiYoYS5saWJpbmZv''@;'; put 'put ''PVtdKX0pfSkoKX1maWx0ZXJGbihhKXt0aGlzLmxpYnJhcmllcz10aGlzLmxpYnJhcmllcy5maWx0ZXIoaD0+LTEhPT1oLkxJQlJBUllOQU1FLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG9jYWxlTG93ZXJDYXNlKCkpKX1kb3dubG9hZERhdGEoKXtsZXQgYT10aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''LnNlcnZlclVybCxkPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgRCxmPSImdHlwZT0iK3RoaXMuZG93bmxvYWRGb3JtYXQsdj0iJnRhYmxlPSIrdGhpcy50YWJsZVRpdGxlLE09IlNBU1ZJWUEiPT09dGhpcy5z''@;'; put 'put ''YXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRleHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZX1gOiIiO0Q9dHlwZW9mIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRl''@;'; put 'put ''cklkKSx3aW5kb3cub3BlbihhK2grIi8/X3Byb2dyYW09IitkKyIvc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEiK2YrditNKyImZmlsdGVyPSIrRCksdGhpcy5vcGVuRG93bmxvYWQ9ITF9ZG93bmxvYWREREwoKXtsZXQgYT10aGlzLmxpYixkPXRoaXMudGFibGUsaD10aGlzLmRvd25sb2Fk''@;'; put 'put ''Rm9ybWF0LnJlcGxhY2UoIl9EREwiLCIiKSxmPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHY9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgTT10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGYrTSsiLz9fcHJvZ3JhbT0iK3YrIi9zZXJ2aWNl''@;'; put 'put ''cy9wdWJsaWMvZ2V0ZGRsIitgJmRzPSR7ZH0mbGlicmVmPSR7YX0mZmxhdm91cj0ke2h9JHsiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiJ9YCksdGhpcy5vcGVuRG93bmxvYWQ9''@;'; put 'put ''ITF9b25DbGlDb21tYW5kRm9jdXMoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEudGFyZ2V0LnNlbGVjdCgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYlRhYil9dGFibGVFZGl0RXhpc3RzKCl7bGV0IGE9e307YT1Lbi5lZGl0b3IubGli''@;'; put 'put ''c0FuZFRhYmxlcztsZXQgZD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzFdLGg9dGhpcy5saWJUYWIuc3BsaXQoIi4iKVswXTtyZXR1cm4hIWFbaF0mJmFbaF0uaW5jbHVkZXMoZCl9Z29Ub0xpbmVhZ2UoKXtsZXQgZD1gL3ZpZXcvbGluZWFnZS8ke3RoaXMudGFibGV1cmkuc3BsaXQoIlxcIilb''@;'; put 'put ''MV19L1JFVkVSU0VgO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZCl9c2hvd1dlYlF1ZXJ5KCl7bGV0IGE7dGhpcy53ZWJRdWVyeT0hMCxhPXR5cGVvZiB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZD4idSI/MDpwYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFt''@;'; put 'put ''cy5maWx0ZXJJZCk7bGV0IGQ9d2luZG93LmxvY2F0aW9uLnBvcnQubGVuZ3RoPjA/IjoiK3dpbmRvdy5sb2NhdGlvbi5wb3J0OiIiO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgdj1gJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5s''@;'; put 'put ''b2NhdGlvbi5ob3N0bmFtZX0ke2R9LyR7aH0vP19wcm9ncmFtPSR7dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2N9L3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhJnR5cGU9V0VCJHt0aGlzLndlYlF1ZXJ5VGFiPyJUQUIiOiJDU1YifSZ0YWJsZT0ke3RoaXMudGFibGVUaXRsZX0keyImZmlsdGVy''@;'; put 'put ''PSIrYX1gO3RoaXMud2ViUXVlcnlUZXh0PXYucmVwbGFjZSgvIC9naW0sIiUyMCIpfWNvcHlUb0NsaXAoKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2Euc3R5bGUucG9zaXRpb249ImZpeGVkIixhLnN0eWxlLmxlZnQ9IjAiLGEuc3R5bGUudG9wPSIwIixhLnN0''@;'; put 'put ''eWxlLm9wYWNpdHk9IjAiLGEudmFsdWU9dGhpcy53ZWJRdWVyeVRleHQsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmZvY3VzKCksYS5zZWxlY3QoKSxkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9Z29Ub1ZpZXdlcigpe3Ro''@;'; put 'put ''aXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93VGFibGVTZWxlY3QoKXt0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Y2hlY2tFeHBhbmQoYSl7fWNvbGxhcHNlTGlicmFyeUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntoLkxJQlJBUllSRUYhPT1kLkxJQlJB''@;'; put 'put ''UllSRUYmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcmllcywhMCksdGhpcy5saWJyYXJpZXNQYWdp''@;'; put 'put ''bmc9ITEpfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5RXhwYW5kZWRDaGFuZ2UoYSxkKXthJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGli''@;'; put 'put ''cmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihkLnRhYmxlcz9kLmV4cGFuZGVkPSEhaHx8IWQuZXhwYW5kZWQ6eWllbGQgZi5zZWxlY3RUYWJsZShhLCExLGQpLGQuZXhwYW5kZWQpe2YuY2RmLmRldGVjdENoYW5nZXMo''@;'; put 'put ''KTtsZXQgdj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjc2VhcmNoXyR7ZC5MSUJSQVJZUkVGfWApO2YubG9nZ2VyU2VydmljZS5sb2coIltsaWJUcmVlU2VhcmNoSW5wdXRdIix2KSx2JiZ2LmZvY3VzKCksZCYmZC5saWJpbmZvJiYoZi5saWJpbmZvPWQubGliaW5mbyksZi5saWImJmYudGFi''@;'; put 'put ''bGUmJiFoP2Yucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhlbigoKT0+e2Yucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2YubGliXSx7cXVlcnlQYXJhbXNIYW5kbGlu''@;'; put 'put ''ZzoicHJlc2VydmUifSl9KTpmLmxpYiYmIWYudGFibGUmJmYubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9kYXRhLyIrZi5saWIpfWYuY29sbGFwc2VMaWJyYXJ5SXRlbXMoZi5saWJyYXJpZXMsZCl9KSgpfW9uVGFibGVDbGljayhhLGQpe3RoaXMubGliPWQuTElCUkFSWVJFRix0aGlz''@;'; put 'put ''LnRhYmxlPWEsdGhpcy5zZWxlY3RMaWJUYWJsZShhKSx0aGlzLnZpZXdEYXRhKDApfXNlbGVjdFRhYmxlKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLmxvYWRpbmdUYWJsZXM9ITAsZi50YWJsZT0hMSxmLnRhYmxlRGlzYWJsZT0hMCwiUGxlYXNlIHNlbGVjdCBs''@;'; put 'put ''aWJyYXJ5IiE9PWE/S24udmlld2VyLnRhYmxlc1NldCYmZD8oZi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMSxmLnRhYmxlcz1Lbi52aWV3ZXIudGFibGVzLGYubGliaW5mbz1Lbi52aWV3ZXIubGliaW5mbyk6KGYubGliaW5mbz1udWxsLHlpZWxkIGYuc2FzU3RvcmVTZXJ2aWNl''@;'; put 'put ''LnZpZXdUYWJsZXMoYSkudGhlbih2PT57Zi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMTtsZXQgTT12Lm1wdGFibGVzLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5NRU1OQU1FfSk7Zi5saWJpbmZvPXYubGliaW5mb3x8W10sZi50YWJsZXM9TSxoJiYoaC50YWJsZXM9TSxoLmxp''@;'; put 'put ''YmluZm89Zi5saWJpbmZvKSxLbi52aWV3ZXIubGlicmFyaWVzPWYubGlicmFyaWVzLEtuLnZpZXdlci5saWJyYXJ5PWYubGliLEtuLnZpZXdlci50YWJsZXM9Zi50YWJsZXMsS24udmlld2VyLmxpYmluZm89Zi5saWJpbmZvLEtuLnZpZXdlci50YWJsZXNTZXQ9ITB9KS5jYXRjaCh2PT57Zi5s''@;'; put 'put ''b2dnZXJTZXJ2aWNlLmVycm9yKHYpLGYuYWJvcnRBY3RpdmU9ITAsZi5ub0RhdGE9ITAsZi50YWJsZVRpdGxlPSIiLGYudGFibGVEaXNhYmxlPSEwfSkpOmYudGFibGVEaXNhYmxlPSEwLEtuLnZpZXdlci5saWJyYXJ5PWYubGliLGR8fGYuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5n''@;'; put 'put ''VGFibGVzPSExLGguZXhwYW5kZWQ9IWguZXhwYW5kZWR9KSgpfXNlbGVjdExpYlRhYmxlKGEsZCl7IlBsZWFzZSBzZWxlY3QgdGFibGUiIT09YT8odGhpcy5hY3Rpb25EaXNhYmxlPSExLHRoaXMubGliVGFiPXRoaXMubGliKyIuIit0aGlzLnRhYmxlKTp0aGlzLmFjdGlvbkRpc2FibGU9ITAs''@;'; put 'put ''S24udmlld2VyLnRhYmxlPWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMubGliVGFiKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtLbi52aWV3ZXIuZmlsdGVyLmxpYmRzPSIiLEtuLnZpZXdlci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsS24u''@;'; put 'put ''dmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiLEtuLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxLbi52aWV3ZXIuZmlsdGVyLmNvbHM9W10sS24udmlld2VyLmZpbHRlci52YWxzPVtdfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEhdGhpcy5saWJUYWImJmErIi4iK2Q9PT10aGlzLmxpYlRh''@;'; put 'put ''Yn10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxLbi52''@;'; put 'put ''aWV3ZXIubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYnJhcnlSZXNldEZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5yZXNldEFycmF5RmlsdGVyKHRoaXMubGlicmFyaWVzKX12aWV3RGF0YShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQg''@;'; put 'put ''aDtpZihkLmxvYWRpbmdUYWJsZVZpZXc9ITAsdHlwZW9mIGQubGliRGF0YXNldD4idSIpaD1kLmxpYisiLiIrZC50YWJsZTtlbHNlIGlmKHR5cGVvZiBkLmxpYj4idSImJnR5cGVvZiBkLnRhYmxlPiJ1Iil7bGV0IE09W107aWYoTT1kLmxpYkRhdGFzZXQuc3BsaXQoIi4iKSxLbi52aWV3ZXIu''@;'; put 'put ''c3RhcnR1cFNldD9kLmxpYnJhcmllcz1Lbi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihEPT57ZC5saWJyYXJpZXM9RC5zYXNsaWJzfSkuY2F0Y2goRD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihEKX0pLGQubGliPU1bMF0sS24udmll''@;'; put 'put ''d2VyLnN0YXJ0dXBTZXQpZC50YWJsZXM9S24udmlld2VyLnRhYmxlcztlbHNle2xldCBEPWQubGlicmFyaWVzLmZpbmQoWj0+Wi5MSUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1kLmxpYi50b0xvd2VyQ2FzZSgpKTt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGQubGliKS50''@;'; put 'put ''aGVuKFo9PntkLnRhYmxlcz1aLm1wdGFibGVzLm1hcChmdW5jdGlvbihyZSl7cmV0dXJuIHJlLk1FTU5BTUV9KSxELnRhYmxlcz1kLnRhYmxlcyxLbi52aWV3ZXIubGlicmFyaWVzPWQubGlicmFyaWVzLEtuLnZpZXdlci50YWJsZXM9ZC50YWJsZXMsS24udmlld2VyLnN0YXJ0dXBTZXQ9ITB9''@;'; put 'put ''KS5jYXRjaChaPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFopfSl9ZC50YWJsZT1NWzFdLGQudGFibGVGbGFnPSExLGg9ZC5saWJEYXRhc2V0LGQubGliVGFiPWh9ZWxzZSBLbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Lbi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3Rv''@;'; put 'put ''cmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihNPT57ZC5saWJyYXJpZXM9TS5zYXNsaWJzfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLHR5cGVvZiBkLnRhYmxlPCJ1IiYmKEtuLnZpZXdlci5zdGFydHVwU2V0P2QudGFibGVzPUtuLnZpZXdlci50YWJsZXM6eWllbGQg''@;'; put 'put ''ZC5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhkLmxpYikudGhlbihNPT57ZC50YWJsZXM9TS5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIEQuTUVNTkFNRX0pfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKSxkLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2Rh''@;'; put 'put ''dGEiXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KSxkLnRhYmxlRmxhZz0hMSxoPWQubGliKyIuIitkLnRhYmxlLGQudGFibGVUaXRsZT1oLGQubGliVGFiPWgpO2Qucm91dGVyLnVybC5zcGxpdCgiLyIpLmxlbmd0aD4zJiZoJiYoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uu''@;'; put 'put ''dmlld0RhdGEoaCxhKS50aGVuKE09PntpZihNLnF1ZXJ5Lmxlbmd0aD4wJiYidmlldyI9PT1Lbi5yb290UGFyYW0mJjA9PT1Lbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXMubGVuZ3RoJiYoS24udmlld2VyLmZpbHRlci5xdWVyeT1kLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKE0ucXVlcnkpLEtu''@;'; put 'put ''LnZpZXdlci5maWx0ZXIubGliZHM9ZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLGQuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoInZpZXdlciIsTS5jb2xzKSksZC5hYm9ydEFjdGl2ZT0hMSxkLmZpbHRlckNvbHM9TS5jb2xzLHplZShkLmZpbHRl''@;'; put 'put ''ckNvbHMsW10sTS4kdmlld2RhdGEpLGQubnVtYmVyT2ZSb3dzPU0uc2FzcGFyYW1zWzBdLk5PQlMsZC5oZWFkZXJQa3M9TS5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksIlNBUzkiPT09ZC5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKXtsZXQgYmU9TS5zYXNwYXJhbXNbMF0uVEFC''@;'; put 'put ''TEVVUkk7YmUmJmJlLmxlbmd0aD4wJiYoZC50YWJsZXVyaT1iZSl9ZC5ob3RUYWJsZS5kYXRhPU0udmlld2RhdGEsZC4kZGF0YUZvcm1hdHM9TS4kdmlld2RhdGEsZC5kc21ldGE9TS5kc21ldGEsZC52ZXJzaW9ucz1NLnZlcnNpb25zfHxbXSxkLnNldERTTm90ZSgpLGQucXVlcnlUZXh0PU0u''@;'; put 'put ''c2FzcGFyYW1zWzBdLkZJTFRFUl9URVhUO2xldCBEPVtdLFo9W107Zm9yKGxldCBiZSBpbiBNLnZpZXdkYXRhWzBdKWJlJiZaLnB1c2goYmUpO2ZvcihsZXQgYmU9MDtiZTxaLmxlbmd0aDtiZSsrKUQucHVzaCh7ZGF0YTpaW2JlXX0pO2QuaG90VGFibGUuY29sSGVhZGVycz1aLGQuaG90VGFi''@;'; put 'put ''bGUuY29sdW1ucz1ELGQuaG90VGFibGUuY2VsbHM9ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fSxkLnRhYmxlRmxhZz0hMTtsZXQgY2U9W107Y2U9aC5zcGxpdCgiLiIpLGQubGliPWNlWzBdLGQudGFibGU9Y2VbMV0sMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/KGQubm9EYXRh''@;'; put 'put ''PSEwLGQudGFibGVGbGFnPSEwKTooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEpLGQubm9EYXRhUmVxRXJyPSExfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKSxkLmFib3J0QWN0aXZlPSEwLGQubm9EYXRhUmVxRXJyPSEwfSkpLGQucm91dGVyLnVybC5pbmNsdWRlcygi''@;'; put 'put ''L2RhdGEiKSYmaCYmZC5yb3V0ZXIubmF2aWdhdGUoMCE9PWE/WyIvdmlldy9kYXRhLyIraCsiLyIrYV06WyIvdmlldy9kYXRhLyIraF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2xldCBmPWQudGFibGUsdj1kLmxpYnJhcmllcy5maW5kKE09Pk0uTElCUkFSWVJFRi50b0xv''@;'; put 'put ''d2VyQ2FzZSgpPT09ZC5saWIudG9Mb3dlckNhc2UoKSk7dj8oS24udmlld2VyLmxpYnJhcmllcy5sZW5ndGg+MCYmKGQubGlicmFyaWVzPUtuLnZpZXdlci5saWJyYXJpZXMsZC5saWJyYXJpZXNTZWFyY2g9S24udmlld2VyLmxpYnJhcmllc1NlYXJjaCksZC5saWJyYXJ5T25DbGljayhkLmxp''@;'; put 'put ''Yix2LCEwKSk6ZC5saWJpbmZvPVtdLGQudGFibGU9Znx8ZC50YWJsZSxkLmxpYnJhcmllcyYmZC5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoZC5saWJyYXJpZXMpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmZC5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksZC5s''@;'; put 'put ''b2FkaW5nVGFibGVWaWV3PSExLCFkLm5vRGF0YSYmIWQubm9EYXRhUmVxRXJyJiZoJiZkLnNldHVwSG90KCksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXJ8fHNldFRpbWVvdXQoKCk9PntsZXQgTT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG90SW5zdGFuY2UiKTtNJiYoTS5hZGRFdmVu''@;'; put 'put ''dExpc3RlbmVyKCJtb3VzZWRvd24iLEQ9PntzZXRUaW1lb3V0KCgpPT57bGV0IFo9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRlYnVnLXN3aXRjaC1pdGVtIil8fHZvaWQgMDtaJiZaLmNsaWNrKCl9LDEwMCl9KSxkLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcj0hMCl9LDJlMyl9KSgpfW1h''@;'; put 'put ''eFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfW9wZW5RYigpe3RoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYisiLiIrdGhpcy50YWJsZSx0aGlzLmZpbHRlckNvbHMp''@;'; put 'put ''fXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W10saD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7bGV0IGY9YS5j''@;'; put 'put ''bGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0dXJuInZpZXciPT09S24ucm9vdFBhcmFtJiYoS24udmlld2VyLmZpbHRlci5jbGF1c2VzPVtdLEtuLnZpZXdlci5maWx0ZXIucXVlcnk9W10sS24udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEu''@;'; put 'put ''cm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdLmVsZW1lbnRzO2Q9TS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIG51bGw9PT1ELnZh''@;'; put 'put ''cmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChNKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2NvbnN0IGY9e2dyb3VwTG9naWM6YS5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTthLmNsYXVzZXMucXVl''@;'; put 'put ''cnlPYmouZm9yRWFjaChNPT57Y29uc3QgRD17ZmlsdGVyQ2xhdXNlczpbXX07TS5lbGVtZW50cy5mb3JFYWNoKFo9PntELmZpbHRlckNsYXVzZXMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFopKX0pLEQuY2xhdXNlTG9naWM9TS5jbGF1c2VMb2dpYyxmLmZpbHRlckdyb3Vwcy5w''@;'; put 'put ''dXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoRCkpfSk7Y29uc3Qgdj1hLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGYpO3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLHYpLnRoZW4oTT0+e2EucXVlcnlUZXh0PU0ucmVzdWx0WzBd''@;'; put 'put ''LkZJTFRFUl9URVhUO2xldCBEPU0ucmVzdWx0WzBdLkZJTFRFUl9SSzthLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIithLmxpYmRzKyIvIitEXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksYS52aWV3RGF0YShEKSxhLmZpbHRlcj0hMX0pLmNhdGNoKE09PnthLmxv''@;'; put 'put ''Z2dlclNlcnZpY2UuZXJyb3IoTSl9KSxhLnN1Ym1pdExvYWRpbmc9ITF9fSkoKX1yZW1vdmVRdWVyeSgpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZUNsYXVzZSgpfWRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKGEpe3ZvaWQgMCE9PWEuTE9BRF9SRUYmJnRoaXMucm91dGVyLm5hdmln''@;'; put 'put ''YXRlKFtgL3N0YWdlLyR7YS5MT0FEX1JFRn1gXSl9c2V0RFNOb3RlKCl7Y29uc3QgYT10aGlzLmRzbWV0YS5maW5kKGY9PiJOT1RFUyI9PT1mLk5BTUUpLGQ9dGhpcy5kc21ldGEuZmluZChmPT4iRERfTE9OR0RFU0MiPT09Zi5OQU1FKSxoPXRoaXMuZHNtZXRhLmZpbmQoZj0+IkREX1NIT1JU''@;'; put 'put ''REVTQyI9PT1mLk5BTUUpO3RoaXMuZHNOb3RlPWEmJmEuVkFMVUU/YS5WQUxVRTpkJiZkLlZBTFVFP2QuVkFMVUU6aCYmaC5WQUxVRT9oLlZBTFVFOiIifXNldHVwSG90KCl7c2V0VGltZW91dCgoKT0+eyF0aGlzLmxvYWRpbmdUYWJsZVZpZXcmJnRoaXMubGliRGF0YXNldCYmKHRoaXMuaG90''@;'; put 'put ''SW5zdGFuY2U9dGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNlIiksdGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7cmV0dXJuIGE+NTAwPzUwMDphfSxhZnRlckdldENvbEhlYWRlcjooYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKGEpO2gmJnRoaXMuaGVhZGVyUGtzLmluZGV4T2YoaCk+LTEmJmQuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksZC5j''@;'; put 'put ''bGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9fSkpfSwxZTMpfWxvYWRXaXRoUGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMCxhLnRhYmxlVGl0bGU9YS5yb3V0ZS5zbmFwc2hvdC5wYXJh''@;'; put 'put ''bXMubGliTWVtfHwwLGEudXJsRmlsdGVyUGs9cGFyc2VJbnQoYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWR8fCIwIik7bGV0IGg9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtO2EubGliRGF0YXNldD1oLGguaW5jbHVkZXMoIi4iKXx8KGEubGliPWgpLHlpZWxkIGEudmll''@;'; put 'put ''d0RhdGEoYS51cmxGaWx0ZXJQayksYS5ub0RhdGE/c2V0VGltZW91dCgoKT0+e2EudGFibGVGbGFnPSEwfSwxMjAwKTpzZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITF9LDEyMDApfSkoKX1sb2FkV2l0aG91dFBhcmFtZXRlcnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbioo''@;'; put 'put ''KXthLnN3aXRjaEZsYWc9ITEsYS5saWJyYXJpZXNMb2FkaW5nPSEwLEtuLnZpZXdlci5zdGFydHVwU2V0P3NldFRpbWVvdXQoKCk9PnthLmxpYnJhcmllcz1Lbi52aWV3ZXIubGlicmFyaWVzLGEubGlicmFyaWVzU2VhcmNoPUtuLnZpZXdlci5saWJyYXJpZXNTZWFyY2gsYS5saWI9S24udmll''@;'; put 'put ''d2VyLmxpYnJhcnksYS5saWJyYXJpZXNUcmVlRXhwYW5kZWQ9ITAsYS5saWJyYXJpZXNMb2FkaW5nPSExLGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyaWVzKX0sMTAwKTooYS5ub0RhdGFSZXFFcnI9ITEseWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMo''@;'; put 'put ''KS50aGVuKGQ9PnthLmxpYnJhcmllcz1kLnNhc2xpYnMsS24udmlld2VyLmxpYnJhcmllcz1hLmxpYnJhcmllcyxLbi52aWV3ZXIuc3RhcnR1cFNldD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJpZXMpfSkuY2F0Y2go''@;'; put 'put ''ZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKSxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5ub0RhdGFSZXFFcnI9ITB9KSl9KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmhvdFRhYmxlLmRhdGEu''@;'; put 'put ''bGVuZ3RoPjAmJihhLnRhYmxlRmxhZz0hMCksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9PnthLndoZXJlU3RyaW5nPWQuc3RyaW5nLGEuY2xhdXNlcz1kLm9iaixhLmxpYmRzPWQubGliZHN9KSx0eXBlb2YgYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGli''@;'; put 'put ''TWVtPCJ1Ij9hLmxvYWRXaXRoUGFyYW1ldGVycygpOmEubG9hZFdpdGhvdXRQYXJhbWV0ZXJzKCl9KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUxKSxHZShraCksR2UoQnMpLEdlKExzKSxHZShDdSksR2UodmMpLEdlKFNkKSxHZShT''@;'; put 'put ''dSksR2UoZmgpLEdlKEVzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlld2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoSWt0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGgucXVlcnlGaWx0ZXJDb21wTGlz''@;'; put 'put ''dD1mKX19LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo5NSx2YXJzOjMwLGNvbnN0czpbWyJjbGlDb21tYW5kSW5wdXQiLCIiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsic2VhcmNo''@;'; put 'put ''RWwiLCIiXSxbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwi''@;'; put 'put ''bmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsLWJhY2tkcm9wIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIs''@;'; put 'put ''ImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJjbHItY29sLW1kLTYiXSxbMSwiZG93bmxvYWQtc2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLCJuZ01vZGVsIl0sWyJ2YWx1ZSIsIkNTViJdLFsidmFsdWUiLCJTQVMiXSxbInZhbHVlIiwiUEdTUUxfRERMIl0sWyJ2YWx1ZSIsIlNBU19EREwiXSxbInZhbHVlIiwiVFNRTF9EREwiXSxbInZhbHVlIiwiRVhDRUwiXSxbInZhbHVlIiwiTUFSS0RPV04iXSxbMSwibW9kYWwtZm9vdGVy''@;'; put 'put ''Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiaWQiXSxbMSwibW9kYWwtYm9keSIsIndlYi1xdWVyeSJdLFsx''@;'; put 'put ''LCJyb3ciXSxbMSwiY2xyLWNvbC1sZy0xMiIsImNsci1jb2wtbWQtMTIiLCJjbHItY29sLXNtLTEyIiwiY2xyLWNvbC14cy0xMiJdLFsxLCJjYXJkIiwibm8tYm9yZGVycyJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImJ0bi1ncm91''@;'; put 'put ''cCJdLFsxLCJyYWRpbyIsImJ0biIsMywiY2xpY2siXSxbInR5cGUiLCJyYWRpbyIsIm5hbWUiLCJidG4tZ3JvdXAtZGVtby1yYWRpb3MiLDMsImNoZWNrZWQiXSxbMSwiY2FyZC1ibG9jayIsIndlYi1xdWVyeS13cmFwcGVyIiwid29yZC1icmVhay1hbGwiXSxbImNsclRleHRhcmVhIiwiIiwi''@;'; put 'put ''cm93cyIsIjQiLCJjb2xzIiwiNTAiLCJ0eXBlIiwidGV4dCIsInJlYWRvbmx5IiwiIiwxLCJ3ZWItcXVlcnktdGV4dCIsMywiZm9jdXMiLCJ2YWx1ZSJdLFsxLCJjYXJkLWZvb3RlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siLCJuZ3hDbGlwYm9hcmQiXSxbImFy''@;'; put 'put ''aWEtbW9kYWwiLCJ0cnVlIiwxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMs''@;'; put 'put ''ImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImJ0bi1zbSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFszLCJjbHJNb2RhbE9wZW5D''@;'; put 'put ''aGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVy''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQgbm8tYm9yZGVycyBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiw0LCJuZ0lmIl0sWzMsIm9wZW5DaGFuZ2UiLCJyb3dDbGlja2VkIiwib3BlbiIsImRzbWV0YSIsInZlcnNpb25zIl0sWzMsInZpZXdib3hNb2RhbENoYW5nZSIsInZpZXdi''@;'; put 'put ''b3hNb2RhbCJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIs''@;'; put 'put ''Im5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUi''@;'; put 'put ''LCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEs''@;'; put 'put ''Im0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLCJrZXl1cCIsImlkIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJjbGFzcyIsImNsci10cmVlbm9kZS1saW5rIiwzLCJkYy1sb2NrZWQtY29udHJvbCIsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIs''@;'; put 'put ''MSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFwZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9u''@;'; put 'put ''IiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwibW9kYWwiLCJ6LWluZGV4''@;'; put 'put ''LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsxLCJtb2RhbC1jb250ZW50Il0sWzEsIm1vZGFsLWhlYWRlciJdLFsiYXJpYS1sYWJlbCIsIkNsb3NlIiwidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiXSxbImFyaWEtaGlk''@;'; put 'put ''ZGVuIiwidHJ1ZSIsInNoYXBlIiwiY2xvc2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1iYWNrZHJvcCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0s''@;'; put 'put ''WzEsIm10LTEwIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xhc3MiLCJoZWFkZXItcm93IGNsci1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWp1c3RpZnktY29udGVu''@;'; put 'put ''dC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2sgbm9EYXRhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1mbGV4LTEiLDQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRl''@;'; put 'put ''eHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsImZvcm0tYmxvY2siLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciIsInN3IiwiY2xy''@;'; put 'put ''LWNvbC1tZCJdLFsiY2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJrZXl1cC5lbnRlciIsInR5cGUiXSxbInNo''@;'; put 'put ''YXBlIiwic2VhcmNoIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJd''@;'; put 'put ''LFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8iLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1zbS1yb3ciXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwiY2xyLWZsZXgtY29sdW1uIiwiZC1mbGV4IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNs''@;'; put 'put ''ci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwiYXJpYS1sYWJlbCIsIlZpZXcgZGF0YXNldCBtZXRhIGluZm8iLCJzaGFwZSIsImluZm8tY2lyY2xlIiwic2l6ZSIsIjI0IiwxLCJp''@;'; put 'put ''cy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3IteWVsbG93IG1yLTUiLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiw0LCJuZ0lmIl0sWzEsIm9wdGlvbnMtY29sIiwiY2xyLWNvbC1tZCJdLFsiY2xh''@;'; put 'put ''c3MiLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxb''@;'; put 'put ''InNoYXBlIiwiYm9sdCIsMSwiY29sb3IteWVsbG93IiwibXItNSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJs''@;'; put 'put ''ZyJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwzLCJjbGljayJdLFsxLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRu''@;'; put 'put ''LW91dGxpbmUiLCJmaWx0ZXJTaWRlIl0sWyJzaGFwZSIsImNvZyIsInNpemUiLCIxNSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNo''@;'; put 'put ''YXBlIiwidmlldy1jYXJkcyJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJmaWx0ZXIiXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiZG93bmxvYWQtY2xvdWQiXSxbInNoYXBlIiwicGVuY2lsIl0sWyJzaGFwZSIsInN3aXRjaCJd''@;'; put 'put ''LFsxLCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtbGlicmFyeS1wbmciLCJhbHQiLCJzZWxlY3QgYSBs''@;'; put 'put ''aWJyYXJ5IGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwiYm9yZGVyLWJvdHRvbS1kaXZpZGVyIiwianVzdGlmeS1jb250ZW50LWJl''@;'; put 'put ''dHdlZW4iLCJ3LTEwMCIsIm0tMCJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8iLCJtdC0xNSIsIm1iLTE1Il0sWzEsInRleHQtY2VudGVyIiwibXQtMTAiXSxbImNsck1lZGl1bSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZC1pbmZvIHBvaW50ZXItZXZl''@;'; put 'put ''bnRzLW5vbmUiLDQsIm5nSWYiXSxbImNsYXNzIiwibGliaW5mbyBtLTAgY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJuby10YWJsZS1zZWxlY3RlZC1pbmZvIiwicG9pbnRlci1ldmVudHMtbm9uZSJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4w''@;'; put 'put ''TENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtdGFibGUtcG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWzEsImxpYmluZm8iLCJtLTAiLCJjbHItcm93Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIG0tMCB3LTEwMCIsNCwibmdJZiJdLFsxLCJ0''@;'; put 'put ''ZXh0LWNlbnRlciIsIm0tMCIsInctMTAwIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLCJtLTAiLDMsImNsaWNrIl0sWzEsIm0tMCJdLFsxLCJtLTAiLCJmb250LWJvbGQiXSxbMSwiY2FyZC1ibG9jayIsIm5vRGF0YSJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJk''@;'; put 'put ''Iiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwiY2xhc3NO''@;'; put 'put ''YW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51Iiwi''@;'; put 'put ''aGVpZ2h0IiwibW9kaWZ5Q29sV2lkdGgiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJhZnRlckdldENvbEhlYWRlciIsInJvd0hlYWRlcnMiLCJyb3dIZWFkZXJXaWR0aCIsInJvd0hlaWdodHMiLCJsaWNlbnNlS2V5Il0sWzEsIm10LTItaSIsInctMTAwIiwidGV4''@;'; put 'put ''dC1jZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJhcHAtc2lkZWJhciIsNSksRnQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubG9hZE1vcmVMaWJyYXJpZXMoKSl9KSxndCgxLExrdCwyLDAs''@;'; put 'put ''ImRpdiIsNiksZGUoMiwiY2xyLXRyZWUiKSxndCgzLEZrdCw2LDMsImNsci10cmVlLW5vZGUiLDcpKDQsJGt0LDIsMSwibmctY29udGFpbmVyIiw4KSxoZSgpLGd0KDUsS2t0LDMsMCwiZGl2Iiw5KSxoZSgpLGRlKDYsImRpdiIsMTApLGd0KDcscWt0LDE0LDAsImRpdiIsMTEpKDgsWGt0LDEs''@;'; put 'put ''MCwiZGl2IiwxMiksZGUoOSwiY2xyLW1vZGFsIiwxMyksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgub3BlbkRvd25sb2FkLE0pfHwoaC5vcGVuRG93bmxvYWQ9TSksQ3QoTSl9KSxkZSgxMCwiaDMiLDE0KSxMZSgxMSwiRG93bmxvYWQiKSxo''@;'; put 'put ''ZSgpLGRlKDEyLCJkaXYiLDE1KSgxMywiZGl2IiwxNikoMTQsImNsci1zZWxlY3QtY29udGFpbmVyIiwxNykoMTUsImxhYmVsIiksTGUoMTYsIlBsZWFzZSBjaG9vc2UgZG93bmxvYWQgZm9ybWF0IiksaGUoKSxkZSgxNywic2VsZWN0IiwxOCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KE0pe3JldHVybiB3dChmKSxtaShoLmRvd25sb2FkRm9ybWF0LE0pfHwoaC5kb3dubG9hZEZvcm1hdD1NKSxDdChNKX0pLGRlKDE4LCJvcHRpb24iLDE5KSxMZSgxOSwiQ1NWIiksaGUoKSxkZSgyMCwib3B0aW9uIiwyMCksTGUoMjEsIkRhdGFsaW5lcyAoY2FyZHMgZmlsZSkiKSxoZSgpLGRl''@;'; put 'put ''KDIyLCJvcHRpb24iLDIxKSxMZSgyMywiRERMIChQR1NRTCBGbGF2b3VyKSIpLGhlKCksZGUoMjQsIm9wdGlvbiIsMjIpLExlKDI1LCJEREwgKFNBUyBGbGF2b3VyKSIpLGhlKCksZGUoMjYsIm9wdGlvbiIsMjMpLExlKDI3LCJEREwgKFRTUUwgRmxhdm91cikiKSxoZSgpLGRlKDI4LCJvcHRp''@;'; put 'put ''b24iLDI0KSxMZSgyOSwiRXhjZWwgKC54bHN4KSIpLGhlKCksZGUoMzAsIm9wdGlvbiIsMjUpLExlKDMxLCJNYXJrZG93biAoLm1kKSIpLGhlKCkoKSgpKCkoKSxkZSgzMiwiZGl2IiwyNikoMzMsImJ1dHRvbiIsMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5v''@;'; put 'put ''cGVuRG93bmxvYWQ9ITEpfSksTGUoMzQsIiBDYW5jZWwgIiksaGUoKSxkZSgzNSwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmRvd25sb2FkRm9ybWF0LmluY2x1ZGVzKCJEREwiKT9oLmRvd25sb2FkRERMKCk6aC5kb3dubG9hZERhdGEoKSl9''@;'; put 'put ''KSxMZSgzNiwiIE9rICIpLGhlKCkoKSgpLGRlKDM3LCJjbHItbW9kYWwiLDEzKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC53ZWJRdWVyeSxNKXx8KGgud2ViUXVlcnk9TSksQ3QoTSl9KSxkZSgzOCwiaDMiLDE0KSxMZSgzOSwiIFdlYiBR''@;'; put 'put ''dWVyeSBVUkwgIiksaGUoKSxkZSg0MCwiZGl2IiwyOSkoNDEsImRpdiIsMzApKDQyLCJkaXYiLDMxKSg0MywiZGl2IiwzMikoNDQsImRpdiIsMzMpKDQ1LCJzcGFuIiksTGUoNDYsIkNvcHkgdGhlIGJlbG93IGludG8geW91ciBwcmVmZXJyZWQgY2xpZW50IHRvb2w6IiksaGUoKSxkZSg0Nywi''@;'; put 'put ''ZGl2IiwzNCkoNDgsImRpdiIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC53ZWJRdWVyeVRhYj0hMCxDdChoLnNob3dXZWJRdWVyeSgpKX0pLEd0KDQ5LCJpbnB1dCIsMzYpLGRlKDUwLCJsYWJlbCIpLExlKDUxLCJUQUIiKSxoZSgpKCksZGUoNTIsImRpdiIsMzUp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC53ZWJRdWVyeVRhYj0hMSxDdChoLnNob3dXZWJRdWVyeSgpKX0pLEd0KDUzLCJpbnB1dCIsMzYpLGRlKDU0LCJsYWJlbCIpLExlKDU1LCJDU1YiKSxoZSgpKCkoKSgpLGRlKDU2LCJkaXYiLDM3KSg1NywidGV4dGFyZWEiLDM4''@;'; put 'put ''LDApLEZ0KCJmb2N1cyIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25DbGlDb21tYW5kRm9jdXMoTSkpfSksTGUoNTksIiAgICAgICAgICAgICAgIiksaGUoKSgpLGRlKDYwLCJkaXYiLDM5KSg2MSwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChm''@;'; put 'put ''KSxDdChoLmNvcHlUb0NsaXAoKSl9KSxMZSg2MiwiIGNvcHkgdG8gY2xpcGJvYXJkICIpLGhlKCkoKSgpKCkoKSgpLGRlKDYzLCJkaXYiLDI2KSg2NCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLndlYlF1ZXJ5PSExKX0pLExlKDY1LCIgY2xv''@;'; put 'put ''c2UgIiksaGUoKSgpKCksZGUoNjYsImNsci1tb2RhbCIsNDEpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmZpbHRlcixNKXx8KGguZmlsdGVyPU0pLEN0KE0pfSksZGUoNjcsImgzIiwxNCksTGUoNjgsIiBGaWx0ZXIgZm9yIHRhYmxlOiIp''@;'; put 'put ''LGRlKDY5LCJzcGFuIiksTGUoNzApLGhlKCkoKSxkZSg3MSwiZGl2IiwxNSksZ3QoNzIsSmt0LDIsMCwiYXBwLXF1ZXJ5Iiw0MiksaGUoKSxkZSg3MywiZGl2IiwyNikoNzQsImJ1dHRvbiIsNDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNldEZpbHRlcigp''@;'; put 'put ''KX0pLExlKDc1LCIgcmVzZXQgZmlsdGVyICIpLGhlKCksZGUoNzYsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5maWx0ZXI9ITEsQ3QoaC5yZW1vdmVRdWVyeSgpKX0pLExlKDc3LCIgQ2FuY2VsICIpLGhlKCksZGUoNzgsImJ1dHRvbiIsNDUpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zZW5kQ2xhdXNlKCkpfSksTGUoNzksIiBPayAiKSxoZSgpKCkoKSxkZSg4MCwiY2xyLW1vZGFsIiw0NiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgucXVlcnlFcnIsTSl8''@;'; put 'put ''fChoLnF1ZXJ5RXJyPU0pLEN0KE0pfSksZGUoODEsImgzIiw0NyksTGUoODIsIkVycm9yIiksaGUoKSxkZSg4MywiZGl2IiwxNSkoODQsInAiKSxMZSg4NSksaGUoKSgpLGRlKDg2LCJkaXYiLDI2KSg4NywiYnV0dG9uIiw0OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxD''@;'; put 'put ''dChoLnF1ZXJ5RXJyPSExKX0pLExlKDg4LCIgQ2FuY2VsICIpLGhlKCksZGUoODksImJ1dHRvbiIsNDkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxMZSg5MCwiIE9rICIpLGhlKCkoKSgpLGd0KDkxLFFrdCw2LDAsImRpdiIsNTApKDky''@;'; put 'put ''LEZEdCw4LDYsImRpdiIsNTEpLGhlKCksZGUoOTMsImFwcC1kYXRhc2V0LWluZm8iLDUyKSxnaSgib3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZGF0YXNldEluZm8sTSl8fChoLmRhdGFzZXRJbmZvPU0pLEN0KE0pfSksRnQoInJvd0NsaWNrZWQiLGZ1bmN0aW9u''@;'; put 'put ''KE0pe3JldHVybiB3dChmKSxDdChoLmRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKE0pKX0pLGhlKCksZGUoOTQsImFwcC12aWV3Ym94ZXMiLDUzKSxnaSgidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC52aWV3Ym94T3BlbixNKXx8KGgudmlld2Jv''@;'; put 'put ''eE9wZW49TSksQ3QoTSl9KSxoZSgpfWlmKDImZCl7Y29uc3QgZj1oYSg1OCk7ZmUoKSxNZSgibmdJZiIsaC5saWJyYXJpZXNMb2FkaW5nKSxmZSgyKSxNZSgibmdJZiIsaC5saWJyYXJpZXMpLGZlKCksTWUoIm5nRm9yT2YiLGgubGlicmFyaWVzKSxmZSgpLE1lKCJuZ0lmIixoLmxpYnJhcmll''@;'; put 'put ''c1BhZ2luZyksZmUoMiksTWUoIm5nSWYiLGgubnVsbFZhcmlhYmxlcyksZmUoKSxNZSgibmdJZiIsaC5udWxsVmFyaWFibGVzKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGgub3BlbkRvd25sb2FkKSxNZSgiY2xyTW9kYWxTaXplIiwibWQiKSxmZSg4KSxwaSgibmdNb2RlbCIsaC5kb3dubG9h''@;'; put 'put ''ZEZvcm1hdCksZmUoMTgpLE1lKCJpZCIsaC50YWJsZVRpdGxlKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLndlYlF1ZXJ5KSxNZSgiY2xyTW9kYWxTaXplIiwibGciKSxmZSgxMiksTWUoImNoZWNrZWQiLGgud2ViUXVlcnlUYWIpLGZlKDQpLE1lKCJjaGVja2VkIiwhaC53ZWJRdWVyeVRh''@;'; put 'put ''YiksZmUoNCksTWUoInZhbHVlIixoLndlYlF1ZXJ5VGV4dCksZmUoNCksTWUoIm5neENsaXBib2FyZCIsZiksZmUoNSkscGkoImNsck1vZGFsT3BlbiIsaC5maWx0ZXIpLE1lKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksRHIoIiAiLGgubGliVGFi''@;'; put 'put ''LCIgIiksZmUoMiksTWUoIm5nSWYiLGguZmlsdGVyKSxmZSg2KSxNZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLnF1ZXJ5RXJyKSxmZSg1KSx3cihoLnF1ZXJ5RXJyTWVzc2FnZSksZmUoNiksTWUoIm5nSWYiLGgubG9hZGluZ1RhYmxl''@;'; put 'put ''VmlldyksZmUoKSxNZSgibmdJZiIsIWgubG9hZGluZ1RhYmxlVmlldyksZmUoKSxwaSgib3BlbiIsaC5kYXRhc2V0SW5mbyksTWUoImRzbWV0YSIsaC5kc21ldGEpKCJ2ZXJzaW9ucyIsaC52ZXJzaW9ucyksZmUoKSxwaSgidmlld2JveE1vZGFsIixoLnZpZXdib3hPcGVuKX19LGRlcGVuZGVu''@;'; put 'put ''Y2llczpbSTZlLG5zLGJhLFMyLGNwLFRrdCxsNyxBMixrMixxbCxNZCxUMixubCxvNywkcyx5cCxFaCxQZCxmZyxIbCxvdSxLdSxqMCxMMixQMixkcyxRMWUsSWQsQnksU2gsWjEsRTcsJHksUUwsc2csZzcsbTcsVnksdjcseTcsYjcsUmQsRF8saTQsTzZlLHBPLFhlZSxTdyxyNCxGNmUsRGt0''@;'; put 'put ''XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEhEdD1be3BhdGg6IiIsY29tcG9uZW50OmJBdCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJkYXRhIn0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDp6Tn0se3BhdGg6ImRhdGEiLGNv''@;'; put 'put ''bXBvbmVudDp6Tn0se3BhdGg6ImRhdGEvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDp6Tn0se3BhdGg6ImRhdGEvOmxpYk1lbSIsY29tcG9uZW50OnpOfSx7cGF0aDoibGluZWFnZSIsY29tcG9uZW50OmpOfSx7cGF0aDoibGluZWFnZS86dGFibGVpZC86ZGlyZWN0aW9uIixjb21wb25l''@;'; put 'put ''bnQ6ak59LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24iLGNvbXBvbmVudDpqTn0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbi86cmVsb2FkIixjb21wb25lbnQ6ak59LHtwYXRoOiJ2aXlhLWFwaS1leHBsb3JlciIsY29tcG9uZW50Ok1r''@;'; put 'put ''dH0se3BhdGg6Im1ldGFkYXRhIixjb21wb25lbnQ6WnRlfSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRCIsY29tcG9uZW50Olp0ZX0se3BhdGg6Im1ldGFkYXRhL29iamVjdC86b2JqZWN0SUQvOm9iamVjdE5hbWUiLGNvbXBvbmVudDpadGV9LHtwYXRoOiJ1c2VybmF2Iixjb21w''@;'; put 'put ''b25lbnQ6dkF0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86Imdyb3VwcyJ9LHtwYXRoOiJ1c2VycyIsY29tcG9uZW50Ok03ZX0se3BhdGg6InVzZXJzLzp1cmkiLGNvbXBvbmVudDpNN2V9LHtwYXRoOiJncm91cHMiLGNvbXBvbmVudDp0OGV9LHtwYXRo''@;'; put 'put ''OiJncm91cHMvOnVyaSIsY29tcG9uZW50OnQ4ZX0se3BhdGg6InJvbGVzIixjb21wb25lbnQ6UzdlfSx7cGF0aDoicm9sZXMvOnVyaSIsY29tcG9uZW50OlM3ZX1dfV19XTtsZXQgTkR0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZChIRHQpLHpjXX0pfX1yZXR1cm4gY30pKCksVkR0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltONmUsUmEsTkR0LEFrdCxSYyx6MCxvOS5mb3JSb290KCksRzksQ3csTUEsUWVlLG5mXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgakR0''@;'; put 'put ''PXpjLmZvclJvb3QoW3twYXRoOiIiLHJlZGlyZWN0VG86ImhvbWUiLHBhdGhNYXRjaDoiZnVsbCJ9LHtwYXRoOiJ2aWV3Iixsb2FkQ2hpbGRyZW46KCk9PlZEdH0se3BhdGg6InJldmlldyIsY29tcG9uZW50OkJfdCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVj''@;'; put 'put ''dFRvOiJ0b2FwcHJvdmUifSx7cGF0aDoiIixsb2FkQ2hpbGRyZW46KCk9PlZfdH1dfSx7cGF0aDoibGljZW5zaW5nIixsb2FkQ2hpbGRyZW46KCk9Pml5dH0se3BhdGg6ImhvbWUiLGxvYWRDaGlsZHJlbjooKT0+eWJ0fSx7cGF0aDoiZWRpdG9yIixsb2FkQ2hpbGRyZW46KCk9PmM5dH0se3Bh''@;'; put 'put ''dGg6InN0YWdlIixsb2FkQ2hpbGRyZW46KCk9PnFfdH0se3BhdGg6InN5c3RlbSIsbG9hZENoaWxkcmVuOigpPT5jd3R9LHtwYXRoOiJkZXBsb3kiLGxvYWRDaGlsZHJlbjooKT0+bHFlfSx7cGF0aDoiKioiLGNvbXBvbmVudDpqJGV9XSx7dXNlSGFzaDohMH0pO2xldCB6RHQ9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmMsYm9vdHN0cmFwOltYWWVdfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W29MLGtoLHR0ZSwkUl0saW1wb3J0''@;'; put 'put ''czpbQiRlLFRvZSxSYyxJT2Usb0FlLGpEdCxDdyx6MCxHOSxNQSxuZixua3RdfSl9fXJldHVybiBjfSkoKTtrQ2UoKS5ib290c3RyYXBNb2R1bGUoekR0KX0sMzczNDoobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e3ZhciBfYXN5bmNUb0dl''@;'; put 'put ''bmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDI5MjkzKS5kZWZhdWx0LF93cmFwQXN5bmNHZW5lcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXyg0Mjk1OCkuZGVmYXVsdCxfYXdhaXRBc3luY0dlbmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDUzMzQ0KS5kZWZhdWx0LF9hc3luY0dlbmVy''@;'; put 'put ''YXRvckRlbGVnYXRlPV9fd2VicGFja19yZXF1aXJlX18oOTM1MTMpLmRlZmF1bHQsX2FzeW5jSXRlcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXyg4Mjg4MSkuZGVmYXVsdCx5O3NlbGYseT0oKT0+KCgpPT57dmFyIF9fd2VicGFja19tb2R1bGVzX189ezMwNjI6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9eSg4NzY0KS5CdWZmZXI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQ3N2Rm9ybWF0dGVyU3RyZWFtPXZvaWQgMDtjb25zdCBfPXkoMjgzMCksZz15KDk5NDcpO1guQ3N2Rm9ybWF0dGVyU3RyZWFtPWNsYXNzIEIgZXh0ZW5k''@;'; put 'put ''cyBfLlRyYW5zZm9ybXtjb25zdHJ1Y3RvcihQKXtzdXBlcih7d3JpdGFibGVPYmplY3RNb2RlOlAub2JqZWN0TW9kZX0pLHRoaXMuaGFzV3JpdHRlbkJPTT0hMSx0aGlzLmZvcm1hdHRlck9wdGlvbnM9UCx0aGlzLnJvd0Zvcm1hdHRlcj1uZXcgZy5Sb3dGb3JtYXR0ZXIoUCksdGhpcy5oYXNX''@;'; put 'put ''cml0dGVuQk9NPSFQLndyaXRlQk9NfXRyYW5zZm9ybShQKXtyZXR1cm4gdGhpcy5yb3dGb3JtYXR0ZXIucm93VHJhbnNmb3JtPVAsdGhpc31fdHJhbnNmb3JtKFAsRixPKXtsZXQgej0hMTt0cnl7dGhpcy5oYXNXcml0dGVuQk9NfHwodGhpcy5wdXNoKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5C''@;'; put 'put ''T00pLHRoaXMuaGFzV3JpdHRlbkJPTT0hMCksdGhpcy5yb3dGb3JtYXR0ZXIuZm9ybWF0KFAsKE4sTCk9Pk4/KHo9ITAsTyhOKSk6KEwmJkwuZm9yRWFjaChLPT57dGhpcy5wdXNoKEkuZnJvbShLLCJ1dGY4IikpfSksej0hMCxPKCkpKX1jYXRjaChOKXtpZih6KXRocm93IE47TyhOKX19X2Zs''@;'; put 'put ''dXNoKFApe3RoaXMucm93Rm9ybWF0dGVyLmZpbmlzaCgoRixPKT0+Rj9QKEYpOihPJiZPLmZvckVhY2goej0+e3RoaXMucHVzaChJLmZyb20oeiwidXRmOCIpKX0pLFAoKSkpfX19LDY3NjM6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KSxYLkZvcm1hdHRlck9wdGlvbnM9dm9pZCAwLFguRm9ybWF0dGVyT3B0aW9ucz1jbGFzcyB5e2NvbnN0cnVjdG9yKF89e30pe3ZhciBnO3RoaXMub2JqZWN0TW9kZT0hMCx0aGlzLmRlbGltaXRlcj0iLCIsdGhpcy5yb3dEZWxpbWl0ZXI9IlxuIix0aGlzLnF1b3RlPSci''@;'; put 'put ''Jyx0aGlzLmVzY2FwZT10aGlzLnF1b3RlLHRoaXMucXVvdGVDb2x1bW5zPSExLHRoaXMucXVvdGVIZWFkZXJzPXRoaXMucXVvdGVDb2x1bW5zLHRoaXMuaGVhZGVycz1udWxsLHRoaXMuaW5jbHVkZUVuZFJvd0RlbGltaXRlcj0hMSx0aGlzLndyaXRlQk9NPSExLHRoaXMuQk9NPSJcdWZlZmYi''@;'; put 'put ''LHRoaXMuYWx3YXlzV3JpdGVIZWFkZXJzPSExLE9iamVjdC5hc3NpZ24odGhpcyxffHx7fSksdHlwZW9mIF8/LnF1b3RlSGVhZGVycz4idSImJih0aGlzLnF1b3RlSGVhZGVycz10aGlzLnF1b3RlQ29sdW1ucyksITA9PT1fPy5xdW90ZT90aGlzLnF1b3RlPSciJzohMT09PV8/LnF1b3RlJiYo''@;'; put 'put ''dGhpcy5xdW90ZT0iIiksInN0cmluZyIhPXR5cGVvZiBfPy5lc2NhcGUmJih0aGlzLmVzY2FwZT10aGlzLnF1b3RlKSx0aGlzLnNob3VsZFdyaXRlSGVhZGVycz0hIXRoaXMuaGVhZGVycyYmKG51bGw9PT0oZz1fLndyaXRlSGVhZGVycyl8fHZvaWQgMD09PWd8fGcpLHRoaXMuaGVhZGVycz1B''@;'; put 'put ''cnJheS5pc0FycmF5KHRoaXMuaGVhZGVycyk/dGhpcy5oZWFkZXJzOm51bGwsdGhpcy5lc2NhcGVkUXVvdGU9YCR7dGhpcy5lc2NhcGV9JHt0aGlzLnF1b3RlfWB9fX0sNTE4NjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8''@;'; put 'put ''ZnVuY3Rpb24oUCl7cmV0dXJuIFAmJlAuX19lc01vZHVsZT9QOntkZWZhdWx0OlB9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5GaWVsZEZvcm1hdHRlcj12b2lkIDA7Y29uc3QgXz1JKHkoODA5NCkpLGc9SSh5KDk3MjIpKSxCPUkoeSgxNjU4''@;'; put 'put ''KSk7WC5GaWVsZEZvcm1hdHRlcj1jbGFzcyB3e2NvbnN0cnVjdG9yKEYpe3RoaXMuX2hlYWRlcnM9bnVsbCx0aGlzLmZvcm1hdHRlck9wdGlvbnM9RixudWxsIT09Ri5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPUYuaGVhZGVycyksdGhpcy5SRVBMQUNFX1JFR0VYUD1uZXcgUmVnRXhwKEYucXVv''@;'; put 'put ''dGUsImciKTtjb25zdCBPPWBbJHtGLmRlbGltaXRlcn0ke0IuZGVmYXVsdChGLnJvd0RlbGltaXRlcil9fFxyfFxuXWA7dGhpcy5FU0NBUEVfUkVHRVhQPW5ldyBSZWdFeHAoTyl9c2V0IGhlYWRlcnMoRil7dGhpcy5faGVhZGVycz1GfXNob3VsZFF1b3RlKEYsTyl7Y29uc3Qgej1PP3RoaXMu''@;'; put 'put ''Zm9ybWF0dGVyT3B0aW9ucy5xdW90ZUhlYWRlcnM6dGhpcy5mb3JtYXR0ZXJPcHRpb25zLnF1b3RlQ29sdW1ucztyZXR1cm4gXy5kZWZhdWx0KHopP3o6QXJyYXkuaXNBcnJheSh6KT96W0ZdOm51bGwhPT10aGlzLl9oZWFkZXJzJiZ6W3RoaXMuX2hlYWRlcnNbRl1dfWZvcm1hdChGLE8seil7''@;'; put 'put ''Y29uc3QgTj1gJHtnLmRlZmF1bHQoRik/IiI6Rn1gLnJlcGxhY2UoL1wwL2csIiIpLHtmb3JtYXR0ZXJPcHRpb25zOkx9PXRoaXM7cmV0dXJuIiIhPT1MLnF1b3RlJiYtMSE9PU4uaW5kZXhPZihMLnF1b3RlKT90aGlzLnF1b3RlRmllbGQoTi5yZXBsYWNlKHRoaXMuUkVQTEFDRV9SRUdFWFAs''@;'; put 'put ''TC5lc2NhcGVkUXVvdGUpKTotMSE9PU4uc2VhcmNoKHRoaXMuRVNDQVBFX1JFR0VYUCl8fHRoaXMuc2hvdWxkUXVvdGUoTyx6KT90aGlzLnF1b3RlRmllbGQoTik6Tn1xdW90ZUZpZWxkKEYpe2NvbnN0e3F1b3RlOk99PXRoaXMuZm9ybWF0dGVyT3B0aW9ucztyZXR1cm5gJHtPfSR7Rn0ke099''@;'; put 'put ''YH19fSw3MTgxOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KSxYLlJvd0Zvcm1hdHRlcj12b2lkIDA7Y29uc3QgXz1JKHkoODQyMykpLGc9SSh5KDIzMDcpKSxCPXkoNTE4Niksdz15KDQ2OTIpO2NsYXNzIFB7Y29uc3RydWN0b3IoTyl7dGhpcy5yb3dDb3VudD0wLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1PLHRoaXMuZmllbGRGb3JtYXR0ZXI9''@;'; put 'put ''bmV3IEIuRmllbGRGb3JtYXR0ZXIoTyksdGhpcy5oZWFkZXJzPU8uaGVhZGVycyx0aGlzLnNob3VsZFdyaXRlSGVhZGVycz1PLnNob3VsZFdyaXRlSGVhZGVycyx0aGlzLmhhc1dyaXR0ZW5IZWFkZXJzPSExLG51bGwhPT10aGlzLmhlYWRlcnMmJih0aGlzLmZpZWxkRm9ybWF0dGVyLmhlYWRl''@;'; put 'put ''cnM9dGhpcy5oZWFkZXJzKSxPLnRyYW5zZm9ybSYmKHRoaXMucm93VHJhbnNmb3JtPU8udHJhbnNmb3JtKX1zdGF0aWMgaXNSb3dIYXNoQXJyYXkoTyl7cmV0dXJuISFBcnJheS5pc0FycmF5KE8pJiZBcnJheS5pc0FycmF5KE9bMF0pJiYyPT09T1swXS5sZW5ndGh9c3RhdGljIGlzUm93QXJy''@;'; put 'put ''YXkoTyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoTykmJiF0aGlzLmlzUm93SGFzaEFycmF5KE8pfXN0YXRpYyBnYXRoZXJIZWFkZXJzKE8pe3JldHVybiBQLmlzUm93SGFzaEFycmF5KE8pP08ubWFwKHo9PnpbMF0pOkFycmF5LmlzQXJyYXkoTyk/TzpPYmplY3Qua2V5cyhPKX1zdGF0aWMgY3Jl''@;'; put 'put ''YXRlVHJhbnNmb3JtKE8pe3JldHVybiB3LmlzU3luY1RyYW5zZm9ybShPKT8oeixOKT0+e2xldCBMPW51bGw7dHJ5e0w9Tyh6KX1jYXRjaChLKXtyZXR1cm4gTihLKX1yZXR1cm4gTihudWxsLEwpfTooeixOKT0+e08oeixOKX19c2V0IHJvd1RyYW5zZm9ybShPKXtpZighXy5kZWZhdWx0KE8p''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSB0cmFuc2Zvcm0gc2hvdWxkIGJlIGEgZnVuY3Rpb24iKTt0aGlzLl9yb3dUcmFuc2Zvcm09UC5jcmVhdGVUcmFuc2Zvcm0oTyl9Zm9ybWF0KE8seil7dGhpcy5jYWxsVHJhbnNmb3JtZXIoTywoTixMKT0+e2lmKE4pcmV0dXJuIHooTik7aWYoIU8p''@;'; put 'put ''cmV0dXJuIHoobnVsbCk7Y29uc3QgSz1bXTtpZihMKXtjb25zdHtzaG91bGRGb3JtYXRDb2x1bW5zOlUsaGVhZGVyczpXfT10aGlzLmNoZWNrSGVhZGVycyhMKTtpZih0aGlzLnNob3VsZFdyaXRlSGVhZGVycyYmVyYmIXRoaXMuaGFzV3JpdHRlbkhlYWRlcnMmJihLLnB1c2godGhpcy5mb3Jt''@;'; put 'put ''YXRDb2x1bW5zKFcsITApKSx0aGlzLmhhc1dyaXR0ZW5IZWFkZXJzPSEwKSxVKXtjb25zdCBZPXRoaXMuZ2F0aGVyQ29sdW1ucyhMKTtLLnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKFksITEpKX19cmV0dXJuIHoobnVsbCxLKX0pfWZpbmlzaChPKXtjb25zdCB6PVtdO2lmKHRoaXMuZm9ybWF0''@;'; put 'put ''dGVyT3B0aW9ucy5hbHdheXNXcml0ZUhlYWRlcnMmJjA9PT10aGlzLnJvd0NvdW50KXtpZighdGhpcy5oZWFkZXJzKXJldHVybiBPKG5ldyBFcnJvcigiYGFsd2F5c1dyaXRlSGVhZGVyc2Agb3B0aW9uIGlzIHNldCB0byB0cnVlIGJ1dCBgaGVhZGVyc2Agb3B0aW9uIG5vdCBwcm92aWRlZC4i''@;'; put 'put ''KSk7ei5wdXNoKHRoaXMuZm9ybWF0Q29sdW1ucyh0aGlzLmhlYWRlcnMsITApKX1yZXR1cm4gdGhpcy5mb3JtYXR0ZXJPcHRpb25zLmluY2x1ZGVFbmRSb3dEZWxpbWl0ZXImJnoucHVzaCh0aGlzLmZvcm1hdHRlck9wdGlvbnMucm93RGVsaW1pdGVyKSxPKG51bGwseil9Y2hlY2tIZWFkZXJz''@;'; put 'put ''KE8pe2lmKHRoaXMuaGVhZGVycylyZXR1cm57c2hvdWxkRm9ybWF0Q29sdW1uczohMCxoZWFkZXJzOnRoaXMuaGVhZGVyc307Y29uc3Qgej1QLmdhdGhlckhlYWRlcnMoTyk7cmV0dXJuIHRoaXMuaGVhZGVycz16LHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz16LHRoaXMuc2hvdWxkV3Jp''@;'; put 'put ''dGVIZWFkZXJzP3tzaG91bGRGb3JtYXRDb2x1bW5zOiFnLmRlZmF1bHQoeixPKSxoZWFkZXJzOnp9OntzaG91bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6bnVsbH19Z2F0aGVyQ29sdW1ucyhPKXtpZihudWxsPT09dGhpcy5oZWFkZXJzKXRocm93IG5ldyBFcnJvcigiSGVhZGVycyBpcyBj''@;'; put 'put ''dXJyZW50bHkgbnVsbCIpO3JldHVybiBBcnJheS5pc0FycmF5KE8pP1AuaXNSb3dIYXNoQXJyYXkoTyk/dGhpcy5oZWFkZXJzLm1hcCgoeixOKT0+e2NvbnN0IEw9T1tOXTtyZXR1cm4gTD9MWzFdOiIifSk6UC5pc1Jvd0FycmF5KE8pJiYhdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/Tzp0aGlz''@;'; put 'put ''LmhlYWRlcnMubWFwKCh6LE4pPT5PW05dKTp0aGlzLmhlYWRlcnMubWFwKHo9Pk9bel0pfWNhbGxUcmFuc2Zvcm1lcihPLHope3JldHVybiB0aGlzLl9yb3dUcmFuc2Zvcm0/dGhpcy5fcm93VHJhbnNmb3JtKE8seik6eihudWxsLE8pfWZvcm1hdENvbHVtbnMoTyx6KXtjb25zdCBOPU8ubWFw''@;'; put 'put ''KChLLFUpPT50aGlzLmZpZWxkRm9ybWF0dGVyLmZvcm1hdChLLFUseikpLmpvaW4odGhpcy5mb3JtYXR0ZXJPcHRpb25zLmRlbGltaXRlcikse3Jvd0NvdW50Okx9PXRoaXM7cmV0dXJuIHRoaXMucm93Q291bnQrPTEsTD9bdGhpcy5mb3JtYXR0ZXJPcHRpb25zLnJvd0RlbGltaXRlcixOXS5q''@;'; put 'put ''b2luKCIiKTpOfX1YLlJvd0Zvcm1hdHRlcj1QfSw5OTQ3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkZpZWxkRm9ybWF0dGVyPVguUm93Rm9ybWF0dGVyPXZvaWQgMDt2YXIgST15KDcxODEpO09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJSb3dGb3JtYXR0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLlJvd0Zvcm1hdHRlcn19KTt2YXIgXz15KDUxODYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJGaWVsZEZvcm1hdHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIF8uRmllbGRGb3JtYXR0ZXJ9fSl9LDcyMDE6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oVSxXLFkscSl7dm9pZCAwPT09''@;'; put 'put ''cSYmKHE9WSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFUscSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gV1tZXX19KX06ZnVuY3Rpb24oVSxXLFkscSl7dm9pZCAwPT09cSYmKHE9WSksVVtxXT1XW1ldfSksZz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9i''@;'; put 'put ''amVjdC5jcmVhdGU/ZnVuY3Rpb24oVSxXKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoVSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6V30pfTpmdW5jdGlvbihVLFcpe1UuZGVmYXVsdD1XfSksQj10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oVSl7aWYoVSYmVS5fX2Vz''@;'; put 'put ''TW9kdWxlKXJldHVybiBVO3ZhciBXPXt9O2lmKG51bGwhPVUpZm9yKHZhciBZIGluIFUpImRlZmF1bHQiIT09WSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsWSkmJl8oVyxVLFkpO3JldHVybiBnKFcsVSksV30sdz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVu''@;'; put 'put ''Y3Rpb24oVSxXKXtmb3IodmFyIFkgaW4gVSkiZGVmYXVsdCIhPT1ZJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFcsWSkmJl8oVyxVLFkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC53cml0ZVRvUGF0aD1YLndyaXRl''@;'; put 'put ''VG9TdHJpbmc9WC53cml0ZVRvQnVmZmVyPVgud3JpdGVUb1N0cmVhbT1YLndyaXRlPVguZm9ybWF0PVguRm9ybWF0dGVyT3B0aW9ucz1YLkNzdkZvcm1hdHRlclN0cmVhbT12b2lkIDA7Y29uc3QgUD15KDk1MzkpLEY9eSgyODMwKSxPPUIoeSg4NjQ2KSksej15KDY3NjMpLE49eSgzMDYyKTt3''@;'; put 'put ''KHkoNDY5MiksWCk7dmFyIEw9eSgzMDYyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiQ3N2Rm9ybWF0dGVyU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5Dc3ZGb3JtYXR0ZXJTdHJlYW19fSk7dmFyIEs9eSg2NzYzKTtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoWCwiRm9ybWF0dGVyT3B0aW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsuRm9ybWF0dGVyT3B0aW9uc319KSxYLmZvcm1hdD1VPT5uZXcgTi5Dc3ZGb3JtYXR0ZXJTdHJlYW0obmV3IHouRm9ybWF0dGVyT3B0aW9ucyhVKSksWC53cml0ZT0oVSxXKT0+e2Nv''@;'; put 'put ''bnN0IFk9WC5mb3JtYXQoVykscT1QLnByb21pc2lmeSgoZWUsSik9PntZLndyaXRlKGVlLHZvaWQgMCxKKX0pO3JldHVybiBVLnJlZHVjZSgoZWUsSik9PmVlLnRoZW4oKCk9PnEoSikpLFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpPT5ZLmVuZCgpKS5jYXRjaChlZT0+e1kuZW1pdCgiZXJy''@;'; put 'put ''b3IiLGVlKX0pLFl9LFgud3JpdGVUb1N0cmVhbT0oVSxXLFkpPT5YLndyaXRlKFcsWSkucGlwZShVKSxYLndyaXRlVG9CdWZmZXI9KFUsVz17fSk9Pntjb25zdCBZPVtdLHE9bmV3IEYuV3JpdGFibGUoe3dyaXRlKGVlLEosbmUpe1kucHVzaChlZSksbmUoKX19KTtyZXR1cm4gbmV3IFByb21p''@;'; put 'put ''c2UoKGVlLEopPT57cS5vbigiZXJyb3IiLEopLm9uKCJmaW5pc2giLCgpPT5lZShJLmNvbmNhdChZKSkpLFgud3JpdGUoVSxXKS5waXBlKHEpfSl9LFgud3JpdGVUb1N0cmluZz0oVSxXKT0+WC53cml0ZVRvQnVmZmVyKFUsVykudGhlbihZPT5ZLnRvU3RyaW5nKCkpLFgud3JpdGVUb1BhdGg9''@;'; put 'put ''KFUsVyxZKT0+e2NvbnN0IHE9Ty5jcmVhdGVXcml0ZVN0cmVhbShVLHtlbmNvZGluZzoidXRmOCJ9KTtyZXR1cm4gWC53cml0ZShXLFkpLnBpcGUocSl9fSw0NjkyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''WC5pc1N5bmNUcmFuc2Zvcm09dm9pZCAwLFguaXNTeW5jVHJhbnNmb3JtPXk9PjE9PT15Lmxlbmd0aH0sMjY1NjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTyl7cmV0dXJuIE8mJk8uX19lc01vZHVsZT9P''@;'; put 'put ''OntkZWZhdWx0Ok99fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5kZWNvZGVUb2tlbj1YLmhhc1Rva2VuRXhwaXJlZD1YLmlzUmVmcmVzaFRva2VuRXhwaXJpbmc9WC5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9dm9pZCAwO2NvbnN0IF89SSh5KDYy''@;'; put 'put ''NDUpKTtmdW5jdGlvbiBQKE8seil7cmV0dXJuKDAsXy5kZWZhdWx0KShPKS5leHAtKG5ldyBEYXRlKS52YWx1ZU9mKCkvMWUzPD16fVguaXNBY2Nlc3NUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uIGcoTyx6PTM2MDApe3JldHVybiFPfHxQKE8seil9LFguaXNSZWZyZXNoVG9rZW5FeHBpcmluZz1m''@;'; put 'put ''dW5jdGlvbiBCKE8sej0zMCl7cmV0dXJuIU98fFAoTyx6KX0sWC5oYXNUb2tlbkV4cGlyZWQ9ZnVuY3Rpb24gdyhPKXtyZXR1cm4hT3x8UChPLDApfSxYLmRlY29kZVRva2VuPWZ1bmN0aW9uIEYoTyl7bGV0IHo7dHJ5e3o9KDAsXy5kZWZhdWx0KShPKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkludmFsaWQgdG9rZW4gc3VwcGxpZWQuIil9cmV0dXJuIHp9fSw2Nzk5OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoZyxQLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBp''@;'; put 'put ''biBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKHkoMjY1NiksWCl9LDMyNTk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnByZWZpeE1lc3NhZ2U9dm9pZCAwLFgucHJlZml4TWVzc2FnZT0oSSxfKT0+e2lmKCJvYmplY3QiPT10eXBlb2YgSSlpZihJLmhhc093blByb3BlcnR5KCJtZXNzYWdlIikpSS5tZXNzYWdlPV8rSS5tZXNz''@;'; put 'put ''YWdlO2Vsc2V7aWYoIUkuaGFzT3duUHJvcGVydHkoImJvZHkiKSlyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEkpLHttZXNzYWdlOl99KTtpZigib2JqZWN0Ij09dHlwZW9mIEkuYm9keSYmKEkubWVzc2FnZT1JLmJvZHkubWVzc2FnZT9fK0kuYm9keS5tZXNzYWdlOl8p''@;'; put 'put ''LCJzdHJpbmciPT10eXBlb2YgSS5ib2R5KXtsZXQgZzt0cnl7Zz1KU09OLnBhcnNlKEkuYm9keSl9Y2F0Y2h7cmV0dXJuIEkubWVzc2FnZT1fLEl9cmV0dXJuIGcubWVzc2FnZT1nLm1lc3NhZ2U/XytnLm1lc3NhZ2U6XyxJLmJvZHk9ZyxJfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIEkmJihJ''@;'; put 'put ''PV8rSSksSX19LDk3Nzg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAse2VudW1lcmFi''@;'; put 'put ''bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSl9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5w''@;'; put 'put ''cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oeSgzMjU5KSxYKSxfKHkoMTA2NCksWCl9LDEwNjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2VydmVyVHlwZUVycm9yPXZvaWQgMDtjb25zdCBJPXkoMzkwMCk7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKEI9W10pe2xldCB3PShCPVsuLi5uZXcgU2V0KEIpXSkubGVuZ3RoP0Iuam9pbigiLCAiKS50cmlt''@;'; put 'put ''KCk6W0kuU2VydmVyVHlwZS5TYXNWaXlhLEkuU2VydmVyVHlwZS5TYXM5LEkuU2VydmVyVHlwZS5TYXNqc10uam9pbigiLCAiKS50cmltKCk7dz13LnJlcGxhY2UoLyxccyhbXixdKikkLywiIGFuZCAkMSIpLHN1cGVyKGBJbnZhbGlkIHNlcnZlciB0eXBlOiB2YWxpZCBvcHRpb24kezEhPT1C''@;'; put 'put ''Lmxlbmd0aD8icyI6IiJ9ICR7MSE9PUIubGVuZ3RoPyJhcmUiOiJpcyJ9ICR7d31gKSx0aGlzLm5hbWU9IlNlcnZlclR5cGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1YLlNlcnZlclR5cGVFcnJvcj1ffSwzOTA2OmZ1bmN0aW9uKHVlLFgseSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihPLHosTixMKXtyZXR1cm4gbmV3KE58fChOPVByb21pc2UpKShmdW5jdGlvbihVLFcpe2Z1bmN0aW9uIFkoSil7dHJ5e2VlKEwubmV4dChKKSl9Y2F0Y2gobmUpe1cobmUpfX1mdW5jdGlvbiBxKEope3RyeXtl''@;'; put 'put ''ZShMLnRocm93KEopKX1jYXRjaChuZSl7VyhuZSl9fWZ1bmN0aW9uIGVlKEope0ouZG9uZT9VKEoudmFsdWUpOmZ1bmN0aW9uIEsoVSl7cmV0dXJuIFUgaW5zdGFuY2VvZiBOP1U6bmV3IE4oZnVuY3Rpb24oVyl7VyhVKX0pfShKLnZhbHVlKS50aGVuKFkscSl9ZWUoKEw9TC5hcHBseShPLHp8''@;'; put 'put ''fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC51cGRhdGVDc3Y9WC5jcmVhdGVDc3Y9WC5yZWFkQ3N2PXZvaWQgMDtjb25zdCBfPXkoMTU1OSksZz15KDcyMDEpO1gucmVhZENzdj1PPT5JKHZvaWQgMCx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCgwLF8ucmVhZEZpbGUpKE8pKS5zcGxpdCgiXG4iKS5maWx0ZXIoTj0+Ti5sZW5ndGgpLm1hcChOPT5OLnNwbGl0KCIsIikpfSksWC5jcmVhdGVDc3Y9KE8seixOKT0+SSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBM''@;'; put 'put ''PXlpZWxkKDAsZy53cml0ZVRvU3RyaW5nKSh6LHtoZWFkZXJzOk59KTt5aWVsZCgwLF8uY3JlYXRlRmlsZSkoTyxMKX0pLFgudXBkYXRlQ3N2PShPLHosTixMKT0+SSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPXlpZWxkIEYoTyx6LE4sTCk7aWYoTCl7Y29uc3Qg''@;'; put 'put ''VT0wPT09Sy5sZW5ndGg/MTpLLmxlbmd0aCxXPU4uZmluZEluZGV4KFk9Plk9PT1MKTtXPi0xP3ouc3BsaWNlKFcsMCxVKTooTi5zcGxpY2UoMCwwLEwpLHouc3BsaWNlKDAsMCxVKSl9Sy5wdXNoKHopLHlpZWxkKDAsWC5jcmVhdGVDc3YpKE8sSyxOKX0pO2NvbnN0IEY9KE8seixOLEwpPT5J''@;'; put 'put ''KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHoubGVuZ3RoIT09Ti5sZW5ndGgpe2lmKHoubGVuZ3RoPk4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO2lmKCFMfHx6Lmxl''@;'; put 'put ''bmd0aCsxIT09Ti5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbGVzcyBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIil9ZWxzZSBpZihMJiZOLmluY2x1ZGVzKEwpKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmll''@;'; put 'put ''bGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO2NvbnN0IEs9eWllbGQoMCxYLnJlYWRDc3YpKE8pLmNhdGNoKFc9PltdKSxVPUtbMF07aWYoVSl7aWYoTi5sZW5ndGg+VS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgZ3JlYXRlciB0aGFu''@;'; put 'put ''IG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7aWYoTi5sZW5ndGg8VS5sZW5ndGgpe2lmKCFMfHxOLmxlbmd0aCsxIT09VS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgbGVzcyB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5z''@;'; put 'put ''Iik7Y29uc3QgVz1VLmZpbmRJbmRleChxPT5xPT09TCksWT1bLi4uTl07aWYoIShXPi0xKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpO2lmKFkuc3BsaWNlKFcsMCxMKSxKU09OLnN0cmluZ2lmeShOKSE9PUpTT04u''@;'; put 'put ''c3RyaW5naWZ5KFkpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIil9ZWxzZXtpZihKU09OLnN0cmluZ2lmeShOKSE9PUpTT04uc3RyaW5naWZ5KFUpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2Vz''@;'; put 'put ''IG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYoTCYmIU4uaW5jbHVkZXMoTCkpdGhyb3cgbmV3IEVycm9yKCJjYW4gbm90IGFkZCBuZXcgaWQgdG8gZXhpc3RpbmcgZGF0YSIpfX1yZXR1cm4gS30pfSwxNTU5OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMm''@;'; put 'put ''JnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihtLEEsYWUsdGUpe3ZvaWQgMD09PXRlJiYodGU9YWUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLHRlLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBBW2FlXX19KX06ZnVuY3Rpb24obSxB''@;'; put 'put ''LGFlLHRlKXt2b2lkIDA9PT10ZSYmKHRlPWFlKSxtW3RlXT1BW2FlXX0pLF89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG0sQSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG0sImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOkF9KX06''@;'; put 'put ''ZnVuY3Rpb24obSxBKXttLmRlZmF1bHQ9QX0pLGc9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKG0pe2lmKG0mJm0uX19lc01vZHVsZSlyZXR1cm4gbTt2YXIgQT17fTtpZihudWxsIT1tKWZvcih2YXIgYWUgaW4gbSkiZGVmYXVsdCIhPT1hZSYmT2JqZWN0LnByb3RvdHlwZS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eS5jYWxsKG0sYWUpJiZJKEEsbSxhZSk7cmV0dXJuIF8oQSxtKSxBfSxCPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihtLEEsYWUsdGUpe3JldHVybiBuZXcoYWV8fChhZT1Qcm9taXNlKSkoZnVuY3Rpb24od2UsVWUpe2Z1bmN0aW9uIEplKHZlKXt0cnl7eGUo''@;'; put 'put ''dGUubmV4dCh2ZSkpfWNhdGNoKFhlKXtVZShYZSl9fWZ1bmN0aW9uIG90KHZlKXt0cnl7eGUodGUudGhyb3codmUpKX1jYXRjaChYZSl7VWUoWGUpfX1mdW5jdGlvbiB4ZSh2ZSl7dmUuZG9uZT93ZSh2ZS52YWx1ZSk6ZnVuY3Rpb24gc2Uod2Upe3JldHVybiB3ZSBpbnN0YW5jZW9mIGFlP3dl''@;'; put 'put ''Om5ldyBhZShmdW5jdGlvbihVZSl7VWUod2UpfSl9KHZlLnZhbHVlKS50aGVuKEplLG90KX14ZSgodGU9dGUuYXBwbHkobSxBfHxbXSkpLm5leHQoKSl9KX0sdz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24obSl7cmV0dXJuIG0mJm0uX19lc01vZHVsZT9tOntkZWZhdWx0''@;'; put 'put ''Om19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRMaW5lRW5kaW5nPVguaXNUZXN0RmlsZT1YLnRlc3RGaWxlUmVnRXhwPVguY3JlYXRlUmVhZFN0cmVhbT1YLmNyZWF0ZVdyaXRlU3RyZWFtPVguZ2V0UmVhbFBhdGg9WC5iYXNlNjRFbmNv''@;'; put 'put ''ZGVGaWxlPVguYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPVgucGF0aFNlcEVzY2FwZWQ9WC5jb3B5PVgubW92ZUZpbGU9WC5nZXRSZWxhdGl2ZVBhdGg9WC51bmlmeUZpbGVQYXRoPVguZGVsZXRlRm9sZGVyPVguZGVsZXRlRmlsZT1YLmNyZWF0ZUZpbGU9WC5jcmVhdGVGb2xkZXI9WC5saXN0Rmls''@;'; put 'put ''ZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9WC5saXN0U3ViRm9sZGVyc0luRm9sZGVyPVgubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9WC5saXN0SW5pRmlsZXNJbkZvbGRlcj1YLmxpc3RGaWxlc0luRm9sZGVyPVgucmVhZEZpbGVCaW5hcnk9WC5yZWFkRmlsZT1YLmlzRm9sZGVyPVguZm9sZGVyRXhp''@;'; put 'put ''c3RzPVguZmlsZUV4aXN0cz12b2lkIDA7Y29uc3QgUD13KHkoNTY3NCkpLEY9dyh5KDI1MjApKSxPPXkoNjI2Niksej1nKHkoMjk3NSkpLE49eSgzOTAwKTtmdW5jdGlvbiBLKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21p''@;'; put 'put ''c2VzLmFjY2VzcyhtLFAuZGVmYXVsdC5jb25zdGFudHMuRl9PSykudGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KX1mdW5jdGlvbiBZKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKG0pfSl9ZnVu''@;'; put 'put ''Y3Rpb24gcShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKG0se3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKEE9PkEuZmlsdGVyKGFlPT4hYWUuaXNEaXJlY3RvcnkoKSkubWFwKGFlPT5hZS5uYW1lKSl9''@;'; put 'put ''KX1mdW5jdGlvbiBpZShtLEE9ITAsYWU9W10pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4odGU9PkIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigp''@;'; put 'put ''e2lmKEEmJnRlLmZpbHRlcih3ZT0+d2UuaXNEaXJlY3RvcnkoKSkubGVuZ3RoKXtsZXQgd2U9W107cmV0dXJuIHlpZWxkKDAsTy5hc3luY0ZvckVhY2gpKHRlLmZpbHRlcihVZT0+VWUuaXNEaXJlY3RvcnkoKSksVWU9PkIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEpl''@;'; put 'put ''PVVlLm5hbWU7aWYoIWFlLmluY2x1ZGVzKEplKSl7Y29uc3Qgb3Q9Ri5kZWZhdWx0LmpvaW4obSxKZSk7d2U9Wy4uLndlLC4uLih5aWVsZCBpZShvdCxBLGFlKSkubWFwKHhlPT5GLmRlZmF1bHQuam9pbihKZSx4ZSkpXX19KSksWy4uLnRlLmZpbHRlcihVZT0+IVVlLmlzRGlyZWN0b3J5KCkp''@;'; put 'put ''Lm1hcChVZT0+VWUubmFtZSksLi4ud2VdfXJldHVybiB0ZS5tYXAoc2U9PnNlLm5hbWUpfSkpfSl9ZnVuY3Rpb24gbGUobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMubWtkaXIobSx7cmVjdXJzaXZlOiEwfSl9KX1m''@;'; put 'put ''dW5jdGlvbiBTZShtLEE9Ri5kZWZhdWx0LnNlcCxhZT0iLyIpe2NvbnN0IHRlPXt1bml4OiIvIix3aW46IlxcIn07bGV0IHNlPU9iamVjdC5rZXlzKHRlKS5maW5kKHdlPT50ZVt3ZV09PT1BKTtpZihzZSl7Y29uc3Qgd2U9dGVbT2JqZWN0LmtleXModGUpLmZpbmQoVWU9PlVlIT09c2UpXTty''@;'; put 'put ''ZXR1cm4gc2U9dGVbc2VdLG0uc3BsaXQod2UpLmpvaW4oc2UpfXJldHVybiBtLnNwbGl0KGFlKS5qb2luKEEpfVguZmlsZUV4aXN0cz1mdW5jdGlvbiBMKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLmFjY2Vzcyht''@;'; put 'put ''LFAuZGVmYXVsdC5jb25zdGFudHMuRl9PSykudGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KX0sWC5mb2xkZXJFeGlzdHM9SyxYLmlzRm9sZGVyPWZ1bmN0aW9uIFUobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMu''@;'; put 'put ''bHN0YXQobSkudGhlbihBPT5BLmlzRGlyZWN0b3J5KCkpLmNhdGNoKCgpPT4hMSl9KX0sWC5yZWFkRmlsZT1mdW5jdGlvbiBXKG0sQT0idXRmOCIpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKG0sQSl9''@;'; put 'put ''KX0sWC5yZWFkRmlsZUJpbmFyeT1ZLFgubGlzdEZpbGVzSW5Gb2xkZXI9cSxYLmxpc3RJbmlGaWxlc0luRm9sZGVyPWZ1bmN0aW9uIGVlKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgcShtKSkuZmlsdGVyKEE9PkEuZW5kc1dpdGgoIi5p''@;'; put 'put ''bmkiKSl9KX0sWC5saXN0U2FzRmlsZXNJbkZvbGRlcj1mdW5jdGlvbiBKKG0sQT0hMSxhZT1bXSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBpZShtLEEsYWUpKS5maWx0ZXIod2U9PndlLmVuZHNXaXRoKCIuc2FzIikpfSl9LFgubGlzdFN1''@;'; put 'put ''YkZvbGRlcnNJbkZvbGRlcj1mdW5jdGlvbiBuZShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKG0se3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKEE9PkEuZmlsdGVyKGFlPT5hZS5pc0RpcmVjdG9yeSgp''@;'; put 'put ''KS5tYXAoYWU9PmFlLm5hbWUpKX0pfSxYLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1pZSxYLmNyZWF0ZUZvbGRlcj1sZSxYLmNyZWF0ZUZpbGU9ZnVuY3Rpb24gbWUobSxBLGFlKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoKG09U2UobSkpLnNw''@;'; put 'put ''bGl0KEYuZGVmYXVsdC5zZXApLmxlbmd0aD4xKXtsZXQgdGU9bS5zcGxpdChGLmRlZmF1bHQuc2VwKTt0ZS5wb3AoKTtjb25zdCBzZT10ZS5qb2luKEYuZGVmYXVsdC5zZXApOyh5aWVsZCBLKHNlKSl8fCh5aWVsZCBsZShzZSkpfXJldHVybiBQLmRlZmF1bHQucHJvbWlzZXMud3JpdGVGaWxl''@;'; put 'put ''KG0sQSxhZSl9KX0sWC5kZWxldGVGaWxlPWZ1bmN0aW9uIF9lKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnJlbW92ZShtKX0pfSxYLmRlbGV0ZUZvbGRlcj1mdW5jdGlvbiBUZShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lk''@;'; put 'put ''IDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5ybShtLHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9KX0pfSxYLnVuaWZ5RmlsZVBhdGg9U2UsWC5nZXRSZWxhdGl2ZVBhdGg9ZnVuY3Rpb24gamUobSxBKXtjb25zdCBhZT1tLnNwbGl0KEYuZGVmYXVsdC5zZXApLHRlPUEuc3BsaXQoRi5k''@;'; put 'put ''ZWZhdWx0LnNlcCk7bGV0IHNlPVtdLHdlPVtdO2FlLmZvckVhY2goKHZlLFhlKT0+e3ZvaWQgMCE9PXRlW1hlXSYmYWVbWGVdPT09dGVbWGVdP3NlLnB1c2godmUpOnZlJiZ3ZS5wdXNoKHZlKX0pO2NvbnN0IFVlPXNlLmpvaW4oRi5kZWZhdWx0LnNlcCksSmU9bmV3IFJlZ0V4cChgXiR7Ri5k''@;'; put 'put ''ZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIil9YCksb3Q9bmV3IFJlZ0V4cChgJHtGLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKX0kYCk7cmV0dXJuKHdlLmxlbmd0aD9gLi4ke0YuZGVmYXVsdC5zZXB9YC5yZXBlYXQod2UubGVuZ3RoKTpgLiR7Ri5kZWZhdWx0LnNl''@;'; put 'put ''cH1gKStBLnJlcGxhY2UoVWUsIiIpLnJlcGxhY2UoSmUsIiIpLnJlcGxhY2Uob3QsIiIpfSxYLm1vdmVGaWxlPWZ1bmN0aW9uIFYobSxBKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZW5hbWUobSxBKX0pfSxYLmNv''@;'; put 'put ''cHk9ZnVuY3Rpb24gcChtLEEpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LmNvcHkobSxBKX0pfSxYLnBhdGhTZXBFc2NhcGVkPUYuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpLFguYmFzZTY0RW5jb2RlSW1hZ2VGaWxl''@;'; put 'put ''PWZ1bmN0aW9uIGIobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBZKG0pLnRoZW4oQT0+e2xldCBhZT1GLmRlZmF1bHQuZXh0bmFtZShtKS5zdWJzdHIoMSl8fCJwbmciO3JldHVybiJzdmciPT09YWUmJihhZT0ic3ZnK3htbCIpLCJkYXRhOmltYWdl''@;'; put 'put ''LyIrYWUrIjtiYXNlNjQsIitBLnRvU3RyaW5nKCJiYXNlNjQiKX0pfSl9LFguYmFzZTY0RW5jb2RlRmlsZT1mdW5jdGlvbiB4KG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKG0se2VuY29kaW5nOiJi''@;'; put 'put ''YXNlNjQifSl9KX0sWC5nZXRSZWFsUGF0aD1mdW5jdGlvbiBDKG0pe3JldHVybiBQLmRlZmF1bHQucmVhbHBhdGhTeW5jKG0pfSxYLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0aW9uIFQobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB6LmZp''@;'; put 'put ''bGVFeGlzdHMobSkpfHwoeWllbGQgei5jcmVhdGVGaWxlKG0sIiIpKSxQLmRlZmF1bHQuY3JlYXRlV3JpdGVTdHJlYW0obSx7ZmxhZ3M6ImEifSl9KX0sWC5jcmVhdGVSZWFkU3RyZWFtPW09PkIodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5jcmVh''@;'; put 'put ''dGVSZWFkU3RyZWFtKG0pfSksWC50ZXN0RmlsZVJlZ0V4cD0vXC50ZXN0XC4oXGQrXC4pP3NhcyQvaSxYLmlzVGVzdEZpbGU9bT0+WC50ZXN0RmlsZVJlZ0V4cC50ZXN0KG0pLFguZ2V0TGluZUVuZGluZz1tPT5uZXcgUmVnRXhwKE4uTGluZUVuZGluZ3MuQ1JMRikudGVzdChtKT9OLkxpbmVF''@;'; put 'put ''bmRpbmdzLkNSTEY6Ti5MaW5lRW5kaW5ncy5MRn0sNTYyNjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRBYnNvbHV0ZVBhdGg9dm9pZCAwO2NvbnN0IF89SSh5KDI1MjApKSxnPUkoeSg3NDM1KSk7WC5nZXRBYnNvbHV0ZVBhdGg9KHcsUCk9Pl8uZGVmYXVsdC5pc0Fic29sdXRlKHcpfHwvXn4vLmV4ZWModyk/Xy5kZWZhdWx0Lm5v''@;'; put 'put ''cm1hbGl6ZSh3LnJlcGxhY2UoL15+LyxnLmRlZmF1bHQuaG9tZWRpcigpKSk6Xy5kZWZhdWx0LmpvaW4oUCx3KX0sMjk3NTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24odyxQLEYs''@;'; put 'put ''Tyl7dm9pZCAwPT09TyYmKE89RiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsTyx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUFtGXX19KX06ZnVuY3Rpb24odyxQLEYsTyl7dm9pZCAwPT09TyYmKE89Riksd1tPXT1QW0ZdfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rh''@;'; put 'put ''cnx8ZnVuY3Rpb24odyxQKXtmb3IodmFyIEYgaW4gdykiZGVmYXVsdCIhPT1GJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsRikmJkkoUCx3LEYpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5yZWFkQ3N2PVguY3Jl''@;'; put 'put ''YXRlQ3N2PVgudXBkYXRlQ3N2PVguZ2V0TGluZUVuZGluZz1YLnRlc3RGaWxlUmVnRXhwPVguaXNUZXN0RmlsZT1YLmdldFJlYWxQYXRoPVguYmFzZTY0RW5jb2RlRmlsZT1YLmJhc2U2NEVuY29kZUltYWdlRmlsZT1YLmNvcHk9WC5wYXRoU2VwRXNjYXBlZD1YLm1vdmVGaWxlPVgudW5pZnlG''@;'; put 'put ''aWxlUGF0aD1YLmdldFJlbGF0aXZlUGF0aD1YLmRlbGV0ZUZvbGRlcj1YLmRlbGV0ZUZpbGU9WC5jcmVhdGVXcml0ZVN0cmVhbT1YLmNyZWF0ZVJlYWRTdHJlYW09WC5jcmVhdGVGb2xkZXI9WC5jcmVhdGVGaWxlPVgubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPVgubGlzdFN1YkZv''@;'; put 'put ''bGRlcnNJbkZvbGRlcj1YLmxpc3RTYXNGaWxlc0luRm9sZGVyPVgubGlzdEluaUZpbGVzSW5Gb2xkZXI9WC5saXN0RmlsZXNJbkZvbGRlcj1YLnJlYWRGaWxlQmluYXJ5PVgucmVhZEZpbGU9WC5pc0ZvbGRlcj1YLmZvbGRlckV4aXN0cz1YLmZpbGVFeGlzdHM9dm9pZCAwO3ZhciBnPXkoMTU1''@;'; put 'put ''OSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImZpbGVFeGlzdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmZpbGVFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImZvbGRlckV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGcuZm9sZGVyRXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJpc0ZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuaXNGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInJlYWRGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gZy5yZWFkRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicmVhZEZpbGVCaW5hcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnJlYWRGaWxlQmluYXJ5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJsaXN0RmlsZXNJbkZv''@;'; put 'put ''bGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubGlzdEZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImxpc3RJbmlGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5saXN0SW5pRmlsZXNJ''@;'; put 'put ''bkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibGlzdFNhc0ZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmxpc3RTYXNGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJsaXN0U3ViRm9sZGVyc0luRm9s''@;'; put 'put ''ZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5saXN0U3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJsaXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBn''@;'; put 'put ''Lmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuY3JlYXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlRm9sZGVyIix7''@;'; put 'put ''ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5jcmVhdGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNyZWF0ZVJlYWRTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmNyZWF0ZVJlYWRTdHJlYW19fSksT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KFgsImNyZWF0ZVdyaXRlU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5jcmVhdGVXcml0ZVN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZGVsZXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGcuZGVsZXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZGVsZXRlRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5kZWxldGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdldFJlbGF0aXZlUGF0aCIse2VudW1lcmFi''@;'; put 'put ''bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZ2V0UmVsYXRpdmVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJ1bmlmeUZpbGVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy51bmlmeUZpbGVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJtb3ZlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubW92ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInBhdGhTZXBFc2NhcGVkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5wYXRoU2VwRXNjYXBlZH19KSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY29weSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuY29weX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiYmFzZTY0RW5jb2RlSW1hZ2VGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5i''@;'; put 'put ''YXNlNjRFbmNvZGVJbWFnZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImJhc2U2NEVuY29kZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmJhc2U2NEVuY29kZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdldFJlYWxQYXRoIix7''@;'; put 'put ''ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZXRSZWFsUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiaXNUZXN0RmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuaXNUZXN0RmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''WCwidGVzdEZpbGVSZWdFeHAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnRlc3RGaWxlUmVnRXhwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZXRMaW5lRW5kaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZXRMaW5lRW5k''@;'; put 'put ''aW5nfX0pO3ZhciBCPXkoMzkwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInVwZGF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIudXBkYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBCLmNyZWF0ZUNzdn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicmVhZENzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIucmVhZENzdn19KSxfKHkoNTYyNiksWCl9LDI3Nzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgubmV3TGluZT1YLmNhcGl0YWxpemVGaXJzdENoYXI9WC5zYW5pdGl6ZVNwZWNpYWxDaGFycz1YLnBhZFdpdGhOdW1iZXI9dm9pZCAwO3ZhciBJPXkoNTMwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInBhZFdp''@;'; put 'put ''dGhOdW1iZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnBhZFdpdGhOdW1iZXJ9fSk7dmFyIF89eSg5Mjc1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwic2FuaXRpemVTcGVjaWFsQ2hhcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBf''@;'; put 'put ''LnNhbml0aXplU3BlY2lhbENoYXJzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjYXBpdGFsaXplRmlyc3RDaGFyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5jYXBpdGFsaXplRmlyc3RDaGFyfX0pO3ZhciBnPXkoMTYyOCk7T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFgsIm5ld0xpbmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLm5ld0xpbmV9fSl9LDUzMDY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhZFdpdGhOdW1iZXI9dm9pZCAw''@;'; put 'put ''LFgucGFkV2l0aE51bWJlcj0oSSxfPTApPT5JPjk/STpgJHtffSR7SX1gfSwxNjI4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgubmV3TGluZT12b2lkIDAsWC5uZXdMaW5lPSgp''@;'; put 'put ''PT4id2luMzIiPT09SS5wbGF0Zm9ybT8iXFxyXFxuIjoiXFxuIn0sOTI3NToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguY2FwaXRhbGl6ZUZpcnN0Q2hhcj1YLnNhbml0aXplU3BlY2lhbENoYXJzPXZvaWQg''@;'; put 'put ''MCxYLnNhbml0aXplU3BlY2lhbENoYXJzPV89Pl8ucmVwbGFjZSgvW1x1MDAxYlx1MDA5Yl1bWygpIzs/XSooPzpbMC05XXsxLDR9KD86O1swLTldezAsNH0pKik/WzAtOUEtT1JaY2YtbnFyeT0+PF0vZywiIiksWC5jYXBpdGFsaXplRmlyc3RDaGFyPV89Pl8uY2hhckF0KDApLnRvVXBwZXJD''@;'; put 'put ''YXNlKCkrXy5zbGljZSgxKX0sNjQ2NzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRil7cmV0dXJuIEYmJkYuX19lc01vZHVsZT9GOntkZWZhdWx0OkZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc1NwZWNpYWxNaXNzaW5nPVguY2hvaWNlVmFsaWRhdG9yPVguY29uZmlybWF0aW9uVmFsaWRhdG9yPVgudXJsVmFsaWRhdG9yPXZvaWQgMDtjb25zdCBfPUkoeSg0ODEpKTtYLnVybFZhbGlkYXRvcj0oRixPKT0+ISFfLmRlZmF1bHQuaXNIdHRwVXJp''@;'; put 'put ''KEYpfHwhIV8uZGVmYXVsdC5pc0h0dHBzVXJpKEYpfHwiIj09PUZ8fE8sWC5jb25maXJtYXRpb25WYWxpZGF0b3I9Rj0+ITA9PT1GfHwhMT09PUYsWC5jaG9pY2VWYWxpZGF0b3I9KEYsTyx6KT0+Rj4wJiZGPD1PfHx6LFguaXNTcGVjaWFsTWlzc2luZz1GPT4oInN0cmluZyIhPXR5cGVvZiBG''@;'; put 'put ''fHwhRi5pbmNsdWRlcygiLi4iKSkmJm5ldyBSZWdFeHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KEYpfSw3NzU3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdlbmVyYXRlVGltZXN0YW1w''@;'; put 'put ''PVgudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz1YLmNvbnZlcnRTZWNvbmRzVG9IbXM9dm9pZCAwO3ZhciBJPXkoMTMwMik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNvbnZlcnRTZWNvbmRzVG9IbXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNvbnZlcnRT''@;'; put 'put ''ZWNvbmRzVG9IbXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdlbmVy''@;'; put 'put ''YXRlVGltZXN0YW1wIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5nZW5lcmF0ZVRpbWVzdGFtcH19KX0sMTMwMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jb252ZXJ0U2Vj''@;'; put 'put ''b25kc1RvSG1zPVguZ2VuZXJhdGVUaW1lc3RhbXA9WC50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPXZvaWQgMDtjb25zdCBJPXkoMjc3Nyk7WC50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPSh3PURhdGUubm93KCkpPT57Y29uc3QgUD1uZXcgRGF0ZSh3KTtyZXR1cm5bUC5nZXRGdWxsWWVh''@;'; put 'put ''cigpLCgwLEkucGFkV2l0aE51bWJlcikoUC5nZXRNb250aCgpKzEpLCgwLEkucGFkV2l0aE51bWJlcikoUC5nZXREYXRlKCkpXS5qb2luKCIvIikrIiAiK1soMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0SG91cnMoKSksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldE1pbnV0ZXMoKSksKDAsSS5w''@;'; put 'put ''YWRXaXRoTnVtYmVyKShQLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKX0sWC5nZW5lcmF0ZVRpbWVzdGFtcD0odz0iIixQKT0+e2NvbnN0IEY9bmV3IERhdGU7bGV0IE89W0YuZ2V0VVRDRnVsbFllYXIoKSxGLmdldFVUQ01vbnRoKCkrMSxGLmdldFVUQ0RhdGUoKSxGLmdldFVUQ0hvdXJzKCks''@;'; put 'put ''Ri5nZXRVVENNaW51dGVzKCksRi5nZXRVVENTZWNvbmRzKCldO3JldHVybiBPPU8ubWFwKHo9PigwLEkucGFkV2l0aE51bWJlcikoeikpLFAmJncmJlA8Ty5sZW5ndGgmJlA+PTAmJk8uc3BsaWNlKFAsMCx3KSxPPU8uam9pbihQPyIiOncpLE99LFguY29udmVydFNlY29uZHNUb0htcz13PT57''@;'; put 'put ''aWYoIXcpcmV0dXJuIjAgc2Vjb25kIjtjb25zdCBQPU1hdGguZmxvb3Iody82MCksRj1NYXRoLmZsb29yKFAvNjApLE89UCU2MCx6PXclNjA7bGV0IE49IiI7cmV0dXJuIEY+MCYmKE49RisiIGhvdXIiKyhGPjE/InMiOiIiKSksTz4wJiYoTis9YCR7Tj8iLCAiOiIifSR7T30gbWludXRlJHtP''@;'; put 'put ''PjE/InMiOiIifWApLHo+MCYmKE4rPWAke04/IiwgIjoiIn0ke3p9IHNlY29uZCR7ej4xPyJzIjoiIn1gKSxOfX0sODIzOToodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQ29uZmlnVHlwZXM9dm9p''@;'; put 'put ''ZCAwLChJPVguQ29uZmlnVHlwZXN8fChYLkNvbmZpZ1R5cGVzPXt9KSkuQnVpbGQ9ImJ1aWxkQ29uZmlnIixJLlNlcnZpY2U9InNlcnZpY2VDb25maWciLEkuSm9iPSJqb2JDb25maWciLEkuVGVzdD0idGVzdENvbmZpZyIsSS5Eb2M9ImRvY0NvbmZpZyIsSS5EZXBsb3k9ImRlcGxveUNvbmZp''@;'; put 'put ''ZyIsSS5TdHJlYW09InN0cmVhbUNvbmZpZyIsSS5BdXRoPSJhdXRoQ29uZmlnIn0sMjQyNzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxODk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzY5MjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NzI5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5MaW5lRW5kaW5ncz12b2lkIDAsKEk9WC5MaW5lRW5kaW5nc3x8KFguTGluZUVuZGluZ3M9e30pKS5DUkxGPSJcclxuIixJLkxGPSJcbiJ9LDY5Mzk6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLk1lbWJlclR5cGU9dm9pZCAwLChJPVguTWVtYmVyVHlwZXx8KFguTWVtYmVyVHlwZT17fSkpLnNlcnZpY2U9InNlcnZpY2UiLEkuZmlsZT0iZmlsZSIsSS5mb2xkZXI9ImZvbGRlciJ9LDMzMjc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTE2NToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzOTAwOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pfTpmdW5jdGlvbihnLEIs''@;'; put 'put ''dyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKHkoODIzOSksWCksXyh5KDI0MjcpLFgpLF8oeSgxODkpLFgpLF8oeSgzNjkyKSxYKSxfKHkoNjkzOSksWCksXyh5KDMzMjcpLFgpLF8oeSg1MTY1KSxYKSxfKHkoNDA2OSksWCksXyh5KDg5MzIpLFgpLF8oeSg0''@;'; put 'put ''KSxYKSxfKHkoMjAxNSksWCksXyh5KDg1MTUpLFgpLF8oeSg1MzEzKSxYKSxfKHkoODk3OSksWCksXyh5KDQ3MjkpLFgpfSw0MDY5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc01hY3JvVmFycz12b2lk''@;'; put 'put ''IDAsWC5pc01hY3JvVmFycz1JPT5JJiYib2JqZWN0Ij09dHlwZW9mIEkubWFjcm9WYXJzJiYhQXJyYXkuaXNBcnJheShJLm1hY3JvVmFycyl9LDg5MzI6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDoodWUs''@;'; put 'put ''WCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTSnNGaWxlVHlwZT12b2lkIDAsKEk9WC5TQVNKc0ZpbGVUeXBlfHwoWC5TQVNKc0ZpbGVUeXBlPXt9KSkuc2VydmljZT0iU2VydmljZSIsSS5qb2I9Ikpv''@;'; put 'put ''YiIsSS50ZXN0PSJUZXN0IixJLmZpbGU9IkZpbGUifSwyMDE1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg1MTU6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5kZWZpbmVQcm9wZXJ0eShY''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNlcnZlclR5cGU9dm9pZCAwLChJPVguU2VydmVyVHlwZXx8KFguU2VydmVyVHlwZT17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLEkuU2FzOT0iU0FTOSIsSS5TYXNqcz0iU0FTSlMifSw1MzEzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg5Nzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguVGFyZ2V0PXZvaWQgMDtjb25zdCBJPXkoODIzOSksXz15KDg1MTUpLGc9''@;'; put 'put ''eSg2NzgxKTtYLlRhcmdldD1jbGFzcyBCe2NvbnN0cnVjdG9yKFAsRj17fSl7dGhpcy5fc2VydmVyVHlwZT1fLlNlcnZlclR5cGUuU2FzVml5YSx0aGlzLmdldENvbmZpZz0oTyx6KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2NvbmZpZ1tPXXx8e30pLHpbT10pO3Ry''@;'; put 'put ''eXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0OiBJbnB1dCBKU09OIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3RoaXMuX2NvbmZpZz1GLHRoaXMuX25hbWU9KDAsZy52YWxpZGF0ZVRhcmdldE5hbWUpKFAubmFtZSksdGhpcy5fc2VydmVyVXJsPSgwLGcudmFsaWRhdGVT''@;'; put 'put ''ZXJ2ZXJVcmwpKFAuc2VydmVyVXJsKSx0aGlzLl9zZXJ2ZXJUeXBlPSgwLGcudmFsaWRhdGVTZXJ2ZXJUeXBlKShQLnNlcnZlclR5cGUpLHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zPSgwLGcudmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucykoUC5odHRwc0FnZW50T3B0aW9ucyksdGhpcy5fYXBw''@;'; put 'put ''TG9jPSgwLGcudmFsaWRhdGVBcHBMb2MpKFAuYXBwTG9jKSx0aGlzLl9jb250ZXh0TmFtZT0oMCxnLnZhbGlkYXRlQ29udGV4dE5hbWUpKFAuY29udGV4dE5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc2VydmVyTmFtZT0oMCxnLnZhbGlkYXRlU2VydmVyTmFtZSkoUC5zZXJ2ZXJOYW1l''@;'; put 'put ''LHRoaXMuX3NlcnZlclR5cGUpLHRoaXMuX3N5bmNGb2xkZXI9KDAsZy52YWxpZGF0ZVN5bmNGb2xkZXIpKFAuc3luY0ZvbGRlciksdGhpcy5fcmVwb3NpdG9yeU5hbWU9KDAsZy52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lKShQLnJlcG9zaXRvcnlOYW1lLHRoaXMuX3NlcnZlclR5cGUpLFAuZG9j''@;'; put 'put ''Q29uZmlnJiYodGhpcy5fZG9jQ29uZmlnPSgwLGcudmFsaWRhdGVEb2NDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuRG9jLFApKSksUC5hdXRoQ29uZmlnJiYodGhpcy5fYXV0aENvbmZpZz0oMCxnLnZhbGlkYXRlQXV0aENvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25m''@;'; put 'put ''aWdUeXBlcy5BdXRoLFApKSksUC5hdXRoQ29uZmlnU2FzOSYmKHRoaXMuX2F1dGhDb25maWdTYXM5PSgwLGcudmFsaWRhdGVBdXRoQ29uZmlnU2FzOSkoUC5hdXRoQ29uZmlnU2FzOSkpLFAuYnVpbGRDb25maWcmJih0aGlzLl9idWlsZENvbmZpZz0oMCxnLnZhbGlkYXRlQnVpbGRDb25maWcp''@;'; put 'put ''KHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuQnVpbGQsUCksdGhpcy5fbmFtZSkpLHRoaXMuX2RlcGxveUNvbmZpZz0oMCxnLnZhbGlkYXRlRGVwbG95Q29uZmlnKShQLmRlcGxveUNvbmZpZz90aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLkRlcGxveSxQKTp7ZGVwbG95U2Vydmlj''@;'; put 'put ''ZVBhY2s6ITAsZGVwbG95U2NyaXB0czpbXX0pLFAuc2VydmljZUNvbmZpZyYmKHRoaXMuX3NlcnZpY2VDb25maWc9KDAsZy52YWxpZGF0ZVNlcnZpY2VDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuU2VydmljZSxQKSkpLFAuam9iQ29uZmlnJiYodGhpcy5fam9iQ29uZmln''@;'; put 'put ''PSgwLGcudmFsaWRhdGVKb2JDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuSm9iLFApKSksUC5zdHJlYW1Db25maWcmJih0aGlzLl9zdHJlYW1Db25maWc9KDAsZy52YWxpZGF0ZVN0cmVhbUNvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5TdHJlYW0sUCkp''@;'; put 'put ''KSxQLnRlc3RDb25maWcmJih0aGlzLl90ZXN0Q29uZmlnPSgwLGcudmFsaWRhdGVUZXN0Q29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLlRlc3QsUCkpKSxQLm1hY3JvRm9sZGVycyYmUC5tYWNyb0ZvbGRlcnMubGVuZ3RoJiYodGhpcy5fbWFjcm9Gb2xkZXJzPVAubWFjcm9G''@;'; put 'put ''b2xkZXJzKSxQLnByb2dyYW1Gb2xkZXJzJiZQLnByb2dyYW1Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX3Byb2dyYW1Gb2xkZXJzPVAucHJvZ3JhbUZvbGRlcnMpLFAuYmluYXJ5Rm9sZGVycyYmUC5iaW5hcnlGb2xkZXJzLmxlbmd0aCYmKHRoaXMuX2JpbmFyeUZvbGRlcnM9UC5iaW5hcnlGb2xk''@;'; put 'put ''ZXJzKSxQLnN5bmNEaXJlY3RvcmllcyYmUC5zeW5jRGlyZWN0b3JpZXMubGVuZ3RoJiYodGhpcy5fc3luY0RpcmVjdG9yaWVzPSgwLGcudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXMpKFAuc3luY0RpcmVjdG9yaWVzKSksUC5zYXNqc0J1aWxkRm9sZGVyJiYodGhpcy5fc2FzanNCdWlsZEZvbGRl''@;'; put 'put ''cj0oMCxnLnZhbGlkYXRlU2FzanNCdWlsZEZvbGRlcikoUC5zYXNqc0J1aWxkRm9sZGVyKSksUC5zYXNqc1Jlc3VsdHNGb2xkZXImJih0aGlzLl9zYXNqc1Jlc3VsdHNGb2xkZXI9KDAsZy52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcikoUC5zYXNqc1Jlc3VsdHNGb2xkZXIpKX1jYXRjaChP''@;'; put 'put ''KXt0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhcnNpbmcgdGFyZ2V0OiAke08ubWVzc2FnZX1gKX19Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1nZXQgc2VydmVyVXJsKCl7cmV0dXJuIHRoaXMuX3NlcnZlclVybH1nZXQgc2VydmVyVHlwZSgpe3JldHVybiB0aGlzLl9zZXJ2ZXJUeXBl''@;'; put 'put ''fWdldCBodHRwc0FnZW50T3B0aW9ucygpe3JldHVybiB0aGlzLl9odHRwc0FnZW50T3B0aW9uc31nZXQgYXBwTG9jKCl7cmV0dXJuIHRoaXMuX2FwcExvY31nZXQgZG9jQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2RvY0NvbmZpZ31nZXQgYXV0aENvbmZpZygpe3JldHVybiB0aGlzLl9hdXRoQ29u''@;'; put 'put ''ZmlnfWdldCBhdXRoQ29uZmlnU2FzOSgpe3JldHVybiB0aGlzLl9hdXRoQ29uZmlnU2FzOX1nZXQgYnVpbGRDb25maWcoKXtyZXR1cm4gdGhpcy5fYnVpbGRDb25maWd9Z2V0IGRlcGxveUNvbmZpZygpe3JldHVybiB0aGlzLl9kZXBsb3lDb25maWd9Z2V0IHNlcnZpY2VDb25maWcoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fc2VydmljZUNvbmZpZ31nZXQgam9iQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2pvYkNvbmZpZ31nZXQgc3RyZWFtQ29uZmlnKCl7cmV0dXJuIHRoaXMuX3N0cmVhbUNvbmZpZ31nZXQgbWFjcm9Gb2xkZXJzKCl7cmV0dXJuIHRoaXMuX21hY3JvRm9sZGVyc31nZXQgcHJvZ3JhbUZv''@;'; put 'put ''bGRlcnMoKXtyZXR1cm4gdGhpcy5fcHJvZ3JhbUZvbGRlcnN9Z2V0IGJpbmFyeUZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fYmluYXJ5Rm9sZGVyc31nZXQgY29udGV4dE5hbWUoKXtyZXR1cm4gdGhpcy5fY29udGV4dE5hbWV9Z2V0IHNlcnZlck5hbWUoKXtyZXR1cm4gdGhpcy5fc2VydmVyTmFt''@;'; put 'put ''ZX1nZXQgcmVwb3NpdG9yeU5hbWUoKXtyZXR1cm4gdGhpcy5fcmVwb3NpdG9yeU5hbWV9Z2V0IHRlc3RDb25maWcoKXtyZXR1cm4gdGhpcy5fdGVzdENvbmZpZ31nZXQgc3luY0ZvbGRlcigpe3JldHVybiB0aGlzLl9zeW5jRm9sZGVyfWdldCBzeW5jRGlyZWN0b3JpZXMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fc3luY0RpcmVjdG9yaWVzfWdldCBzYXNqc0J1aWxkRm9sZGVyKCl7cmV0dXJuIHRoaXMuX3Nhc2pzQnVpbGRGb2xkZXJ9Z2V0IHNhc2pzUmVzdWx0c0ZvbGRlcigpe3JldHVybiB0aGlzLl9zYXNqc1Jlc3VsdHNGb2xkZXJ9dG9Kc29uKFA9ITApe3ZhciBGLE8sejtjb25zdCBOPXtuYW1l''@;'; put 'put ''OnRoaXMubmFtZSxzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmwsc2VydmVyVHlwZTp0aGlzLnNlcnZlclR5cGUsaHR0cHNBZ2VudE9wdGlvbnM6dGhpcy5odHRwc0FnZW50T3B0aW9ucyxhcHBMb2M6dGhpcy5hcHBMb2MsZG9jQ29uZmlnOnRoaXMuZG9jQ29uZmlnLGRlcGxveUNvbmZpZzp0aGlz''@;'; put 'put ''LmRlcGxveUNvbmZpZ307cmV0dXJuIShudWxsPT09KEY9dGhpcy5tYWNyb0ZvbGRlcnMpfHx2b2lkIDA9PT1GKSYmRi5sZW5ndGgmJihOLm1hY3JvRm9sZGVycz10aGlzLm1hY3JvRm9sZGVycyksIShudWxsPT09KE89dGhpcy5wcm9ncmFtRm9sZGVycyl8fHZvaWQgMD09PU8pJiZPLmxlbmd0''@;'; put 'put ''aCYmKE4ucHJvZ3JhbUZvbGRlcnM9dGhpcy5wcm9ncmFtRm9sZGVycyksIShudWxsPT09KHo9dGhpcy5iaW5hcnlGb2xkZXJzKXx8dm9pZCAwPT09eikmJnoubGVuZ3RoJiYoTi5iaW5hcnlGb2xkZXJzPXRoaXMuYmluYXJ5Rm9sZGVycyksdGhpcy5hdXRoQ29uZmlnJiYoTi5hdXRoQ29uZmln''@;'; put 'put ''PXRoaXMuYXV0aENvbmZpZyksdGhpcy5hdXRoQ29uZmlnU2FzOSYmKE4uYXV0aENvbmZpZ1Nhczk9dGhpcy5hdXRoQ29uZmlnU2FzOSksdGhpcy5zYXNqc0J1aWxkRm9sZGVyP04uc2FzanNCdWlsZEZvbGRlcj10aGlzLnNhc2pzQnVpbGRGb2xkZXI6UCYmKE4uc2FzanNCdWlsZEZvbGRlcj1n''@;'; put 'put ''LkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSKSx0aGlzLnNhc2pzUmVzdWx0c0ZvbGRlcj9OLnNhc2pzUmVzdWx0c0ZvbGRlcj10aGlzLnNhc2pzUmVzdWx0c0ZvbGRlcjpQJiYoTi5zYXNqc1Jlc3VsdHNGb2xkZXI9Zy5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSKSx0aGlzLnN5bmNE''@;'; put 'put ''aXJlY3Rvcmllcz9OLnN5bmNEaXJlY3Rvcmllcz10aGlzLnN5bmNEaXJlY3RvcmllczpQJiYoTi5zeW5jRGlyZWN0b3JpZXM9W10pLHRoaXMuYnVpbGRDb25maWc/Ti5idWlsZENvbmZpZz10aGlzLmJ1aWxkQ29uZmlnOlAmJihOLmJ1aWxkQ29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJv''@;'; put 'put ''Z3JhbToiIixidWlsZE91dHB1dEZpbGVOYW1lOmAke3RoaXMubmFtZX0uc2FzYCxtYWNyb1ZhcnM6e319KSx0aGlzLmpvYkNvbmZpZz9OLmpvYkNvbmZpZz10aGlzLmpvYkNvbmZpZzpQJiYoTi5qb2JDb25maWc9e2pvYkZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIs''@;'; put 'put ''bWFjcm9WYXJzOnt9fSksdGhpcy5zZXJ2aWNlQ29uZmlnP04uc2VydmljZUNvbmZpZz10aGlzLnNlcnZpY2VDb25maWc6UCYmKE4uc2VydmljZUNvbmZpZz17c2VydmljZUZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9fSksdGhpcy5zdHJlYW1D''@;'; put 'put ''b25maWc/Ti5zdHJlYW1Db25maWc9dGhpcy5zdHJlYW1Db25maWc6UCYmKE4uc3RyZWFtQ29uZmlnPXtzdHJlYW1XZWJGb2xkZXI6IiIsc3RyZWFtV2ViOiExLHdlYlNvdXJjZVBhdGg6IiIsc3RyZWFtU2VydmljZU5hbWU6IiIsYXNzZXRQYXRoczpbXX0pLHRoaXMudGVzdENvbmZpZz9OLnRl''@;'; put 'put ''c3RDb25maWc9dGhpcy50ZXN0Q29uZmlnOlAmJihOLnRlc3RDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fSx0ZXN0U2V0VXA6IiIsdGVzdFRlYXJEb3duOiIifSksdGhpcy5zZXJ2ZXJUeXBlPT09Xy5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ti5jb250ZXh0''@;'; put 'put ''TmFtZT10aGlzLmNvbnRleHROYW1lOnRoaXMuc2VydmVyVHlwZT09PV8uU2VydmVyVHlwZS5TYXM5JiYoTi5zZXJ2ZXJOYW1lPXRoaXMuc2VydmVyTmFtZSxOLnJlcG9zaXRvcnlOYW1lPXRoaXMucmVwb3NpdG9yeU5hbWUpLE59fX0sNjc4MTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24ocCl7cmV0dXJuIHAmJnAuX19lc01vZHVsZT9wOntkZWZhdWx0OnB9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcj1Y''@;'; put 'put ''LnZhbGlkYXRlU2FzanNCdWlsZEZvbGRlcj1YLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzPVgudmFsaWRhdGVSZXBvc2l0b3J5TmFtZT1YLnZhbGlkYXRlU3luY0ZvbGRlcj1YLnZhbGlkYXRlU2VydmVyTmFtZT1YLnZhbGlkYXRlQ29udGV4dE5hbWU9WC52YWxpZGF0ZVN0cmVhbUNvbmZpZz1Y''@;'; put 'put ''LnZhbGlkYXRlRGVwbG95Q29uZmlnPVgudmFsaWRhdGVKb2JDb25maWc9WC52YWxpZGF0ZVRlc3RDb25maWc9WC52YWxpZGF0ZVNlcnZpY2VDb25maWc9WC52YWxpZGF0ZUJ1aWxkQ29uZmlnPVgudmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1YLnZhbGlkYXRlQXV0aENvbmZpZz1YLnZhbGlkYXRl''@;'; put 'put ''RG9jQ29uZmlnPVgudmFsaWRhdGVBcHBMb2M9WC52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPVgudmFsaWRhdGVTZXJ2ZXJVcmw9WC52YWxpZGF0ZVRhcmdldE5hbWU9WC52YWxpZGF0ZVNlcnZlclR5cGU9WC5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSPVguREVGQVVMVF9TQVNKU19C''@;'; put 'put ''VUlMRF9GT0xERVI9dm9pZCAwO2NvbnN0IF89SSh5KDQ4MSkpLGc9eSgzOTAwKTtYLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSPSJzYXNqc2J1aWxkIixYLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVI9InNhc2pzcmVzdWx0cyIsWC52YWxpZGF0ZVNlcnZlclR5cGU9cD0+e2lmKCFw''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgdHlwZTogYHNlcnZlclR5cGVgIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihwIT09Zy5TZXJ2ZXJUeXBlLlNhczkmJnAhPT1nLlNlcnZlclR5cGUuU2FzVml5YSYmcCE9PWcuU2VydmVyVHlwZS5TYXNqcyl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoYEludmFsaWQgc2VydmVyIHR5cGU6IFN1cHBvcnRlZCB2YWx1ZXMgZm9yICBcYHNlcnZlclR5cGVcYCBhcmUgJHtnLlNlcnZlclR5cGUuU2FzVml5YX0sICR7Zy5TZXJ2ZXJUeXBlLlNhczl9IGFuZCAke2cuU2VydmVyVHlwZS5TYXNqc30uYCk7cmV0dXJuIHB9LFgudmFsaWRh''@;'; put 'put ''dGVUYXJnZXROYW1lPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKHAudHJpbSgpLmluY2x1ZGVzKCIgIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBu''@;'; put 'put ''YW1lOiBgbmFtZWAgY2Fubm90IGluY2x1ZGUgc3BhY2VzLiIpO2lmKCEvXlthLXpBLVowLTlcLV0rJC9pLnRlc3QocCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgZGFzaGVz''@;'; put 'put ''LiIpO3JldHVybiBwfSxYLnZhbGlkYXRlU2VydmVyVXJsPXA9PntpZihudWxsPT1wJiYocD0iIiksIiIhPT1wJiYhXy5kZWZhdWx0LmlzSHR0cFVyaShwKSYmIV8uZGVmYXVsdC5pc0h0dHBzVXJpKHApKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgVVJMOiBgc2VydmVyVXJsYCBz''@;'; put 'put ''aG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKTtyZXR1cm4gcH0sWC52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPXA9PntpZihwKXtpZigib2JqZWN0IiE9dHlwZW9mIHAp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNBZ2VudE9wdGlvbnNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYW4gb2JqZWN0IG9mIGBIdHRwc0FnZW50T3B0aW9uc2AiKTtpZihudWxsPT1wLmFsbG93SW5zZWN1cmVSZXF1ZXN0cylwLmFsbG93SW5zZWN1cmVS''@;'; put 'put ''ZXF1ZXN0cz0hMTtlbHNlIGlmKCJib29sZWFuIiE9dHlwZW9mIHAuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBzQWdlbnRPcHRpb25zLmFsbG93SW5zZWN1cmVSZXF1ZXN0c2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBh''@;'; put 'put ''IGJvb2xlYW4iKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHAuY2FQYXRoJiYocC5jYVBhdGg9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIHAua2V5UGF0aCYmKHAua2V5UGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgcC5jZXJ0UGF0aCYmKHAuY2VydFBhdGg9dm9pZCAwKSxwfX0sWC52''@;'; put 'put ''YWxpZGF0ZUFwcExvYz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighcC5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2Nh''@;'; put 'put ''dGlvbjogYGFwcExvY2AgbXVzdCBzdGFydCB3aXRoIGEgYC9gLiIpO3JldHVybiBwfSxYLnZhbGlkYXRlRG9jQ29uZmlnPXA9PntpZihwfHwocD17fSksImJvb2xlYW4iIT10eXBlb2YgcC5kaXNwbGF5TWFjcm9Db3JlJiYocC5kaXNwbGF5TWFjcm9Db3JlPXZvaWQgMCksImJvb2xlYW4iIT10''@;'; put 'put ''eXBlb2YgcC5lbmFibGVMaW5lYWdlJiYocC5lbmFibGVMaW5lYWdlPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBwLm91dERpcmVjdG9yeSYmKHAub3V0RGlyZWN0b3J5PXZvaWQgMCksInN0cmluZyI9PXR5cGVvZiBwLmRhdGFDb250cm9sbGVyVXJsKXtpZigiIiE9PXAuZGF0YUNvbnRyb2xs''@;'; put 'put ''ZXJVcmwmJiFfLmRlZmF1bHQuaXNIdHRwVXJpKHAuZGF0YUNvbnRyb2xsZXJVcmwpJiYhXy5kZWZhdWx0LmlzSHR0cHNVcmkocC5kYXRhQ29udHJvbGxlclVybCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERhdGEgQ29udHJvbGxlciBVcmw6IGBkYXRhQ29udHJvbGxlclVybGAgc2hvdWxk''@;'; put 'put ''IGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBVUkwgb2YgdGhlIGZvcm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIil9ZWxzZSBwLmRhdGFDb250cm9sbGVyVXJsPXZvaWQgMDtyZXR1cm4gcH0sWC52YWxpZGF0ZUF1dGhDb25maWc9cD0+e2lmKCFwKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHB9LFgudmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiBK''@;'; put 'put ''U09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighcC51c2VyTmFtZXx8IXAucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiB1c2VyTmFtZSBhbmQgcGFzc3dvcmQgY2FuIG5vdCBiZSBlbXB0eSIpO3JldHVybiBwfSxYLnZh''@;'; put 'put ''bGlkYXRlQnVpbGRDb25maWc9KHAsYik9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYnVpbGQgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5idWlsZE91dHB1dEZpbGVOYW1lfHwocC5idWlsZE91dHB1dEZpbGVOYW1lPWAke2J9''@;'; put 'put ''LnNhc2ApLHAuaW5pdFByb2dyYW18fChwLmluaXRQcm9ncmFtPSIiKSxwLnRlcm1Qcm9ncmFtfHwocC50ZXJtUHJvZ3JhbT0iIikscC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17fSkscH0sWC52YWxpZGF0ZVNlcnZpY2VDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxp''@;'; put 'put ''ZCBzZXJ2aWNlIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHAuaW5pdFByb2dyYW18fChwLmluaXRQcm9ncmFtPSIiKSxwLnRlcm1Qcm9ncmFtfHwocC50ZXJtUHJvZ3JhbT0iIikscC5zZXJ2aWNlRm9sZGVyc3x8KHAuc2VydmljZUZvbGRlcnM9''@;'; put 'put ''W10pLHAubWFjcm9WYXJzfHwocC5tYWNyb1ZhcnM9e30pLHB9LFgudmFsaWRhdGVUZXN0Q29uZmlnPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGVzdCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmluaXRQcm9ncmFtfHwo''@;'; put 'put ''cC5pbml0UHJvZ3JhbT0iIikscC50ZXJtUHJvZ3JhbXx8KHAudGVybVByb2dyYW09IiIpLHAubWFjcm9WYXJzfHwocC5tYWNyb1ZhcnM9e30pLHAudGVzdFNldFVwfHwocC50ZXN0U2V0VXA9IiIpLHAudGVzdFRlYXJEb3dufHwocC50ZXN0VGVhckRvd249IiIpLHB9LFgudmFsaWRhdGVKb2JD''@;'; put 'put ''b25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBqb2IgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5pbml0UHJvZ3JhbXx8KHAuaW5pdFByb2dyYW09IiIpLHAudGVybVByb2dyYW18fChwLnRlcm1Qcm9ncmFtPSIiKSxw''@;'; put 'put ''LmpvYkZvbGRlcnN8fChwLmpvYkZvbGRlcnM9W10pLHAubWFjcm9WYXJzfHwocC5tYWNyb1ZhcnM9e30pLHB9LFgudmFsaWRhdGVEZXBsb3lDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkZXBsb3kgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVm''@;'; put 'put ''aW5lZC4iKTtyZXR1cm4gcC5kZXBsb3lTZXJ2aWNlUGFjaz0hIXAuZGVwbG95U2VydmljZVBhY2sscC5kZXBsb3lTY3JpcHRzfHwocC5kZXBsb3lTY3JpcHRzPVtdKSxwfSxYLnZhbGlkYXRlU3RyZWFtQ29uZmlnPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNv''@;'; put 'put ''bmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoITAhPT1wLnN0cmVhbVdlYiYmITEhPT1wLnN0cmVhbVdlYil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYmAgY2Fubm90IGJlIGEgbm9uLWJvb2xlYW4gdmFsdWUuIik7''@;'; put 'put ''aWYocC5zdHJlYW1XZWImJiFwLnN0cmVhbVdlYkZvbGRlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYkZvbGRlcmAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGBzdHJlYW1XZWJgIGlzIHRydWUuIik7aWYocC5zdHJl''@;'; put 'put ''YW1XZWImJiFwLndlYlNvdXJjZVBhdGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGB3ZWJTb3VyY2VQYXRoYCBzaG91bGQgY29udGFpbiB0aGUgcGF0aCB0byB5b3VyIGZyb250ZW5kIGFwcGxpY2F0aW9uIGVnIGJ1aWxkLCBkaXN0LCBvciBzcmMuIik7cmV0dXJu''@;'; put 'put ''IHAuc3RyZWFtTG9nbyYmInN0cmluZyIhPXR5cGVvZiBwLnN0cmVhbUxvZ28mJihwLnN0cmVhbUxvZ289dm9pZCAwKSxwLmFzc2V0UGF0aHN8fChwLmFzc2V0UGF0aHM9W10pLHAuc3RyZWFtU2VydmljZU5hbWV8fChwLnN0cmVhbVNlcnZpY2VOYW1lPSJjbGlja21lIikscH0sWC52YWxpZGF0''@;'; put 'put ''ZUNvbnRleHROYW1lPShwLGIpPT5iIT09Zy5TZXJ2ZXJUeXBlLlNhc1ZpeWF8fHA/cDoiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0IixYLnZhbGlkYXRlU2VydmVyTmFtZT0ocCxiKT0+YiE9PWcuU2VydmVyVHlwZS5TYXM5fHxwP3A6IlNBU0FwcCIsWC52YWxpZGF0ZVN5bmNG''@;'; put 'put ''b2xkZXI9cD0+e2lmKCJzdHJpbmciPT10eXBlb2YgcCYmcClyZXR1cm4gcH0sWC52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPShwLGIpPT5iIT09Zy5TZXJ2ZXJUeXBlLlNhczl8fHA/cDoiRm91bmRhdGlvbiIsWC52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1wPT57aWYoIXApdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJJbnZhbGlkIHN5bmNEaXJlY3RvcmllcyBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmZvckVhY2goYj0+e2lmKCFiLmxvY2FsfHwhYi5yZW1vdGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN5bmNEaXJlY3RvcnkgY29uZmlnOiB2''@;'; put 'put ''YWx1ZXMgb2YgcHJvcGVydHkgJ2xvY2FsJyBhbmQgJ3JlbW90ZSBjYW4gbm90IGJlIGVtcHR5IG9yIHVuZGVmaW5lZCIpfSkscH0sWC52YWxpZGF0ZVNhc2pzQnVpbGRGb2xkZXI9cD0+e2lmKCJzdHJpbmciIT10eXBlb2YgcCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB2YWx1''@;'; put 'put ''ZSAoJHt0eXBlb2YgcH0pIGlzIHByb3ZpZGVkIGZvciBwcm9wZXJ0eSAnc2FzanNCdWlsZEZvbGRlcicgaW4gY29uZmlnLiBSZXF1aXJlZCBpcyBzdHJpbmcuYCk7cmV0dXJuIHB8fFguREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVJ9LFgudmFsaWRhdGVTYXNqc1Jlc3VsdHNGb2xkZXI9cD0+''@;'; put 'put ''e2lmKCJzdHJpbmciIT10eXBlb2YgcCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB2YWx1ZSAoJHt0eXBlb2YgcH0pIGlzIHByb3ZpZGVkIGZvciBwcm9wZXJ0eSAnc2FzanNSZXN1bHRzRm9sZGVyJyBpbiBjb25maWcuIFJlcXVpcmVkIGlzIHN0cmluZy5gKTtyZXR1cm4gcHx8''@;'; put 'put ''WC5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSfX0sMjkyNzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6''@;'; put 'put ''Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRlY29kZUZyb21CYXNlNjQ9WC5lbmNvZGVUb0Jhc2U2ND12b2lkIDA7Y29uc3QgZz1fKHkoNTgzNSkpLEI9IntzYXNqc19lbmNvZGVkfSI7WC5lbmNvZGVUb0Jhc2U2ND1GPT57Y29uc3QgTz1n''@;'; put 'put ''LmRlZmF1bHQucmFuZG9tQnl0ZXMoMTAwKS50b1N0cmluZygiaGV4Iiksej1JLmZyb20oTytGKS50b1N0cmluZygiYmFzZTY0Iik7cmV0dXJuIEIren0sWC5kZWNvZGVGcm9tQmFzZTY0PUY9PkYuc3RhcnRzV2l0aChCKT8oRj1GLnJlcGxhY2UoL157c2FzanNfZW5jb2RlZH0vLCIiKSxJLmZy''@;'; put 'put ''b20oRiwiYmFzZTY0IikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMjAwKSk6Rn0sNTgxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5ieXRlc1RvU2l6ZT12b2lkIDAsWC5ieXRlc1RvU2l6ZT0oSSxfPTEsZz0x''@;'; put 'put ''MDk5NTExNjI3Nzc2KT0+e2lmKDA9PT1JKXJldHVybiIwIEIiO0k9ST5nP2c6STtjb25zdCBQPV88MD8wOl8sRj1NYXRoLmZsb29yKE1hdGgubG9nKEkpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oSS9NYXRoLnBvdygxMDI0LEYpKS50b0ZpeGVkKFApKyIgIitbIkIiLCJLQiIsIk1CIiwiR0Ii''@;'; put 'put ''LCJUQiJdW0ZdfX0sODY1MzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguY2h1bms9dm9pZCAwLFguY2h1bms9ZnVuY3Rpb24geShJLF89MjIwKXtyZXR1cm4gSS5sZW5ndGg8PV8/W0ldOihJLm1hdGNoKG5l''@;'; put 'put ''dyBSZWdFeHAoIi57MSwiK18rIn0iLCJnIikpfHxbXSkuZmlsdGVyKGc9PiEhZyl9fSw2NDU3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5kaWZmPXZvaWQgMCxYLmRpZmY9ZnVuY3Rpb24geShJLF8pe3Jl''@;'; put 'put ''dHVyblsuLi5JLmZpbHRlcih3PT4ib2JqZWN0Ij09dHlwZW9mIHc/IUpTT04uc3RyaW5naWZ5KF8pLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KHcpKTohXy5pbmNsdWRlcyh3KSksLi4uXy5maWx0ZXIodz0+Im9iamVjdCI9PXR5cGVvZiB3PyFKU09OLnN0cmluZ2lmeShJKS5pbmNsdWRlcyhK''@;'; put 'put ''U09OLnN0cmluZ2lmeSh3KSk6IUkuaW5jbHVkZXModykpXX19LDE1Mjk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEV4ZWN1dG9yUGF0aD12b2lkIDA7Y29uc3QgeT17U0FTVklZQToiL1NBU0pvYkV4''@;'; put 'put ''ZWN1dGlvbiIsU0FTOToiL1NBU1N0b3JlZFByb2Nlc3MvZG8ifTtYLmdldEV4ZWN1dG9yUGF0aD1fPT5fPyhfPV8udG9VcHBlckNhc2UoKSx5W19dfHwiIik6IiJ9LDMzMTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLFguZ2V0VHJlZUV4YW1wbGU9WC5pc0ZpbGVUcmVlPXZvaWQgMDtjb25zdCBJPXkoMzkwMCk7WC5pc0ZpbGVUcmVlPUY9PkYmJkYubWVtYmVycyYmQXJyYXkuaXNBcnJheShGLm1lbWJlcnMpJiYwPT09Ri5tZW1iZXJzLmZpbHRlcihPPT4hZyhPKSYmIUIoTykmJiF3KE8pKS5sZW5n''@;'; put 'put ''dGg7Y29uc3QgZz1GPT5GJiYic3RyaW5nIj09dHlwZW9mIEYubmFtZSYmRi50eXBlPT09SS5NZW1iZXJUeXBlLnNlcnZpY2UmJiJzdHJpbmciPT10eXBlb2YgRi5jb2RlLEI9Rj0+RiYmInN0cmluZyI9PXR5cGVvZiBGLm5hbWUmJkYudHlwZT09PUkuTWVtYmVyVHlwZS5maWxlJiYic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIEYuY29kZSx3PUY9PkYmJiJzdHJpbmciPT10eXBlb2YgRi5uYW1lJiZGLnR5cGU9PT1JLk1lbWJlclR5cGUuZm9sZGVyJiZGLm1lbWJlcnMmJkFycmF5LmlzQXJyYXkoRi5tZW1iZXJzKSYmMD09PUYubWVtYmVycy5maWx0ZXIoTz0+IWcoTykmJiFCKE8pJiYhdyhPKSkubGVu''@;'; put 'put ''Z3RoO1guZ2V0VHJlZUV4YW1wbGU9KCk9Pih7bWVtYmVyczpbe25hbWU6ImpvYnMiLHR5cGU6SS5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToiZXh0cmFjdCIsdHlwZTpJLk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJtYWtlZGF0YTEiLHR5cGU6SS5NZW1iZXJU''@;'; put 'put ''eXBlLnNlcnZpY2UsY29kZToiJXB1dCBIZWxsbyBXb3JsZCE7In1dfV19XX0pfSw2MjY2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihOLEwsSyxVKXt2b2lkIDA9PT1VJiYoVT1L''@;'; put 'put ''KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTixVLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMW0tdfX0pfTpmdW5jdGlvbihOLEwsSyxVKXt2b2lkIDA9PT1VJiYoVT1LKSxOW1VdPUxbS119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihOLEwpe2Zv''@;'; put 'put ''cih2YXIgSyBpbiBOKSJkZWZhdWx0IiE9PUsmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTCxLKSYmSShMLE4sSyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmNodW5rPVguZGlmZj1YLmJ5dGVzVG9TaXplPVguZ2V0''@;'; put 'put ''RXhlY3V0b3JQYXRoPVguZGVjb2RlRnJvbUJhc2U2ND1YLmVuY29kZVRvQmFzZTY0PVgudXJsT3JpZ2luPVguZ2VuZXJhdGVQYXRoRm9yU2FzPVguZ2V0TWFjcm9zUGF0aD1YLmVzY2FwZVdpblNsYXNoZXM9WC5pc0xpbnV4PVguaXNXaW5kb3dzPVgudW5pcUFycmF5PVguYXN5bmNGb3JFYWNo''@;'; put 'put ''PVgudXVpZHY0PXZvaWQgMDt2YXIgZz15KDExMzEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJ1dWlkdjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnV1aWR2NH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiYXN5bmNGb3JFYWNoIix7ZW51bWVyYWJsZToh''@;'; put 'put ''MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5hc3luY0ZvckVhY2h9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInVuaXFBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcudW5pcUFycmF5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJpc1dpbmRvd3Mi''@;'; put 'put ''LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmlzV2luZG93c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiaXNMaW51eCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuaXNMaW51eH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZXNj''@;'; put 'put ''YXBlV2luU2xhc2hlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZXNjYXBlV2luU2xhc2hlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2V0TWFjcm9zUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZ2V0TWFjcm9zUGF0''@;'; put 'put ''aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2VuZXJhdGVQYXRoRm9yU2FzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZW5lcmF0ZVBhdGhGb3JTYXN9fSksXyh5KDMzMTYpLFgpO3ZhciBCPXkoOTY1Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInVy''@;'; put 'put ''bE9yaWdpbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIudXJsT3JpZ2lufX0pO3ZhciB3PXkoMjkyNyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImVuY29kZVRvQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5lbmNvZGVUb0Jh''@;'; put 'put ''c2U2NH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZGVjb2RlRnJvbUJhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcuZGVjb2RlRnJvbUJhc2U2NH19KTt2YXIgUD15KDE1MjkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZXRFeGVjdXRvclBhdGgi''@;'; put 'put ''LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQLmdldEV4ZWN1dG9yUGF0aH19KTt2YXIgRj15KDU4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImJ5dGVzVG9TaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRi5ieXRlc1RvU2l6ZX19KTt2''@;'; put 'put ''YXIgTz15KDY0NTcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJkaWZmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTy5kaWZmfX0pO3ZhciB6PXkoODY1Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNodW5rIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gei5jaHVua319KX0sOTY1MjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgudXJsT3JpZ2luPXZvaWQgMCxYLnVybE9yaWdpbj1JPT57aWYoIiI9PT1JKXJldHVybiBJO2xldCBfO3RyeXtfPW5l''@;'; put 'put ''dyBVUkwoSSkub3JpZ2lufWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBVUkwuIil9cmV0dXJuIF99fSwxMTMxOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBfPXkoNDE1NSksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxZLHEsZWUpe3JldHVybiBu''@;'; put 'put ''ZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKG5lLGllKXtmdW5jdGlvbiBsZShUZSl7dHJ5e19lKGVlLm5leHQoVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBtZShUZSl7dHJ5e19lKGVlLnRocm93KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gX2UoVGUpe1RlLmRv''@;'; put 'put ''bmU/bmUoVGUudmFsdWUpOmZ1bmN0aW9uIEoobmUpe3JldHVybiBuZSBpbnN0YW5jZW9mIHE/bmU6bmV3IHEoZnVuY3Rpb24oaWUpe2llKG5lKX0pfShUZS52YWx1ZSkudGhlbihsZSxtZSl9X2UoKGVlPWVlLmFwcGx5KFcsWXx8W10pKS5uZXh0KCkpfSl9LEI9dGhpcyYmdGhpcy5fX2ltcG9y''@;'; put 'put ''dERlZmF1bHR8fGZ1bmN0aW9uKFcpe3JldHVybiBXJiZXLl9fZXNNb2R1bGU/Vzp7ZGVmYXVsdDpXfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2VuZXJhdGVQYXRoRm9yU2FzPVguZ2V0TWFjcm9zUGF0aD1YLmVzY2FwZVdpblNsYXNoZXM9''@;'; put 'put ''WC5pc0xpbnV4PVguaXNXaW5kb3dzPVgudW5pcUFycmF5PVgudXVpZHY0PVguYXN5bmNGb3JFYWNoPXZvaWQgMDtjb25zdCB3PUIoeSgyNTIwKSk7WC5hc3luY0ZvckVhY2g9ZnVuY3Rpb24gUChXLFkpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtmb3IobGV0IHE9''@;'; put 'put ''MDtxPFcubGVuZ3RoO3ErKyl5aWVsZCBZKFdbcV0scSxXKX0pfSxYLnV1aWR2ND0oKT0+Inh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLFc9Pntjb25zdCBZPTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oIngiPT1XP1k6MyZZfDgpLnRvU3Ry''@;'; put 'put ''aW5nKDE2KX0pLFgudW5pcUFycmF5PVc9PkFycmF5LmZyb20obmV3IFNldChXKSksWC5pc1dpbmRvd3M9KCk9PiJ3aW4zMiI9PT1fLnBsYXRmb3JtLFguaXNMaW51eD0oKT0+ImxpbnV4Ij09PV8ucGxhdGZvcm0sWC5lc2NhcGVXaW5TbGFzaGVzPVc9PigwLFguaXNXaW5kb3dzKSgpP1cucmVw''@;'; put 'put ''bGFjZSgvXFwvZywiXFxcXCIpOlcsWC5nZXRNYWNyb3NQYXRoPSgpPT53LmRlZmF1bHQuam9pbigiLyIsIi4uIiwibWFjcm9zIiksWC5nZW5lcmF0ZVBhdGhGb3JTYXM9Vz0+Vy5yZXBsYWNlKC9cXC9nLCIvIil9LDk4MDk6KHVlLFgseSk9Pnt2YXIgST1YO0kuYmlnbnVtPXkoNDU5MCksSS5k''@;'; put 'put ''ZWZpbmU9eSgyNTAwKS5kZWZpbmUsSS5iYXNlPXkoMTk3OSksSS5jb25zdGFudHM9eSg2ODI2KSxJLmRlY29kZXJzPXkoODMwNyksSS5lbmNvZGVycz15KDY1NzkpfSwyNTAwOih1ZSxYLHkpPT57dmFyIEk9eSg5ODA5KSxfPXkoNTcxNyk7ZnVuY3Rpb24gQih3LFApe3RoaXMubmFtZT13LHRo''@;'; put 'put ''aXMuYm9keT1QLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX1YLmRlZmluZT1mdW5jdGlvbihQLEYpe3JldHVybiBuZXcgQihQLEYpfSxCLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24oUCl7dmFyIEY7dHJ5e0Y9eSg1MTQwKS5ydW5JblRoaXNDb250ZXh0KCIoZnVu''@;'; put 'put ''Y3Rpb24gIit0aGlzLm5hbWUrIihlbnRpdHkpIHtcbiAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XG59KSIpfWNhdGNoe0Y9ZnVuY3Rpb24oeil7dGhpcy5faW5pdE5hbWVkKHopfX1yZXR1cm4gXyhGLFApLEYucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oeil7UC5jYWxsKHRoaXMs''@;'; put 'put ''eil9LG5ldyBGKHRoaXMpfSxCLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbihQKXtyZXR1cm4gdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShQPVB8fCJkZXIiKXx8KHRoaXMuZGVjb2RlcnNbUF09dGhpcy5fY3JlYXRlTmFtZWQoSS5kZWNvZGVyc1tQXSkpLHRoaXMuZGVjb2Rl''@;'; put 'put ''cnNbUF19LEIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoRikuZGVjb2RlKFAsTyl9LEIucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5KFA9UHx8ImRlciIp''@;'; put 'put ''fHwodGhpcy5lbmNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmVuY29kZXJzW1BdKSksdGhpcy5lbmNvZGVyc1tQXX0sQi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihGKS5lbmNvZGUoUCxPKX19LDY2MjU6KHVlLFgseSk9Pnt2''@;'; put 'put ''YXIgST15KDU3MTcpLF89eSgxOTc5KS5SZXBvcnRlcixnPXkoODc2NCkuQnVmZmVyO2Z1bmN0aW9uIEIoUCxGKXtfLmNhbGwodGhpcyxGKSxnLmlzQnVmZmVyKFApPyh0aGlzLmJhc2U9UCx0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPVAubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3Qg''@;'; put 'put ''QnVmZmVyIil9ZnVuY3Rpb24gdyhQLEYpe2lmKEFycmF5LmlzQXJyYXkoUCkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPVAubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPIGluc3RhbmNlb2Ygd3x8KE89bmV3IHcoTyxGKSksdGhpcy5sZW5ndGgrPU8ubGVuZ3RoLE99LHRoaXMpO2Vsc2UgaWYo''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBQKXtpZighKDA8PVAmJlA8PTI1NSkpcmV0dXJuIEYuZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgUCl0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9''@;'; put 'put ''Zy5ieXRlTGVuZ3RoKFApO2Vsc2V7aWYoIWcuaXNCdWZmZXIoUCkpcmV0dXJuIEYuZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIFApO3RoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1QLmxlbmd0aH19SShCLF8pLFguQz1CLEIucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOl8ucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LEIucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oRil7dmFyIE89bmV3IEIodGhpcy5iYXNlKTtyZXR1cm4gTy5vZmZzZXQ9Ri5vZmZzZXQsTy5sZW5ndGg9dGhpcy5vZmZzZXQsdGhp''@;'; put 'put ''cy5vZmZzZXQ9Ri5vZmZzZXQsXy5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsRi5yZXBvcnRlciksT30sQi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxCLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oRil7cmV0''@;'; put 'put ''dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcihGfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIil9LEIucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oRixPKXtpZighKHRoaXMub2Zmc2V0K0Y8PXRoaXMu''@;'; put 'put ''bGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihPfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIik7dmFyIHo9bmV3IEIodGhpcy5iYXNlKTtyZXR1cm4gei5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLHoub2Zmc2V0PXRoaXMub2Zmc2V0LHoubGVuZ3RoPXRoaXMub2Zmc2V0K0Ys''@;'; put 'put ''dGhpcy5vZmZzZXQrPUYsen0sQi5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UoRj9GLm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LFguUj13LHcucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oRixPKXtyZXR1cm4gRnx8KEY9bmV3IGcodGhp''@;'; put 'put ''cy5sZW5ndGgpKSxPfHwoTz0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbih6KXt6LmpvaW4oRixPKSxPKz16Lmxlbmd0aH0pOigibnVtYmVyIj09dHlwZW9mIHRoaXMudmFsdWU/RltPXT10aGlzLnZhbHVl''@;'; put 'put ''OiJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZT9GLndyaXRlKHRoaXMudmFsdWUsTyk6Zy5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KEYsTyksTys9dGhpcy5sZW5ndGgpKSxGfX0sMTk3OToodWUsWCx5KT0+e3ZhciBJPVg7SS5SZXBvcnRlcj15KDg0NjUpLmIsSS5E''@;'; put 'put ''ZWNvZGVyQnVmZmVyPXkoNjYyNSkuQyxJLkVuY29kZXJCdWZmZXI9eSg2NjI1KS5SLEkuTm9kZT15KDE5NDkpfSwxOTQ5Oih1ZSxYLHkpPT57dmFyIEk9eSgxOTc5KS5SZXBvcnRlcixfPXkoMTk3OSkuRW5jb2RlckJ1ZmZlcixnPXkoMTk3OSkuRGVjb2RlckJ1ZmZlcixCPXkoOTc0Niksdz1b''@;'; put 'put ''InNlcSIsInNlcW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBzdHIiLCJjaGFyc3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282NDZzdHIiLCJu''@;'; put 'put ''dW1zdHIiLCJvY3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLFA9WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNvbmNhdCh3KTtm''@;'; put 'put ''dW5jdGlvbiBPKE4sTCl7dmFyIEs9e307dGhpcy5fYmFzZVN0YXRlPUssSy5lbmM9TixLLnBhcmVudD1MfHxudWxsLEsuY2hpbGRyZW49bnVsbCxLLnRhZz1udWxsLEsuYXJncz1udWxsLEsucmV2ZXJzZUFyZ3M9bnVsbCxLLmNob2ljZT1udWxsLEsub3B0aW9uYWw9ITEsSy5hbnk9ITEsSy5v''@;'; put 'put ''Ymo9ITEsSy51c2U9bnVsbCxLLnVzZURlY29kZXI9bnVsbCxLLmtleT1udWxsLEsuZGVmYXVsdD1udWxsLEsuZXhwbGljaXQ9bnVsbCxLLmltcGxpY2l0PW51bGwsSy5jb250YWlucz1udWxsLEsucGFyZW50fHwoSy5jaGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfXVlLmV4cG9ydHM9Tzt2YXIg''@;'; put 'put ''ej1bImVuYyIsInBhcmVudCIsImNoaWxkcmVuIiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlucyJdO08ucHJvdG90''@;'; put 'put ''eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlLEs9e307ei5mb3JFYWNoKGZ1bmN0aW9uKFcpe0tbV109TFtXXX0pO3ZhciBVPW5ldyB0aGlzLmNvbnN0cnVjdG9yKEsucGFyZW50KTtyZXR1cm4gVS5fYmFzZVN0YXRlPUssVX0sTy5wcm90b3R5cGUuX3dyYXA9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgTD10aGlzLl9iYXNlU3RhdGU7UC5mb3JFYWNoKGZ1bmN0aW9uKEspe3RoaXNbS109ZnVuY3Rpb24oKXt2YXIgVz1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gTC5jaGlsZHJlbi5wdXNoKFcpLFdbS10uYXBwbHkoVyxhcmd1bWVudHMpfX0sdGhpcyl9LE8u''@;'; put 'put ''cHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtCKG51bGw9PT1LLnBhcmVudCksTC5jYWxsKHRoaXMpLEsuY2hpbGRyZW49Sy5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0dXJuIFUuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxC''@;'; put 'put ''LmVxdWFsKEsuY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxPLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGUsVT1MLmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4gVyBpbnN0YW5jZW9mIHRo''@;'; put 'put ''aXMuY29uc3RydWN0b3J9LHRoaXMpO0w9TC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIShXIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1VLmxlbmd0aCYmKEIobnVsbD09PUsuY2hpbGRyZW4pLEsuY2hpbGRyZW49VSxVLmZvckVhY2goZnVuY3Rpb24oVyl7Vy5f''@;'; put 'put ''YmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PUwubGVuZ3RoJiYoQihudWxsPT09Sy5hcmdzKSxLLmFyZ3M9TCxLLnJldmVyc2VBcmdzPUwubWFwKGZ1bmN0aW9uKFcpe2lmKCJvYmplY3QiIT10eXBlb2YgV3x8Vy5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gVzt2YXIgWT17''@;'; put 'put ''fTtyZXR1cm4gT2JqZWN0LmtleXMoVykuZm9yRWFjaChmdW5jdGlvbihxKXtxPT0oMHxxKSYmKHF8PTApLFlbV1txXV09cX0pLFl9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIsIl9kZWNvZGVOdWxs''@;'; put 'put ''IiwiX2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNoKGZ1bmN0aW9uKE4p''@;'; put 'put ''e08ucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKE4rIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiAiK3RoaXMuX2Jhc2VTdGF0ZS5lbmMpfX0pLHcuZm9yRWFjaChmdW5jdGlvbihOKXtPLnByb3RvdHlwZVtOXT1mdW5jdGlvbigpe3ZhciBLPXRoaXMuX2Jh''@;'; put 'put ''c2VTdGF0ZSxVPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEIobnVsbD09PUsudGFnKSxLLnRhZz1OLHRoaXMuX3VzZUFyZ3MoVSksdGhpc319KSxPLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oTCl7QihMKTt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJu''@;'; put 'put ''IEIobnVsbD09PUsudXNlKSxLLnVzZT1MLHRoaXN9LE8ucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxPLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51''@;'; put 'put ''bGw9PT1LLmRlZmF1bHQpLEsuZGVmYXVsdD1MLEsub3B0aW9uYWw9ITAsdGhpc30sTy5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmV4cGxpY2l0JiZudWxsPT09Sy5pbXBsaWNpdCksSy5leHBsaWNpdD1MLHRo''@;'; put 'put ''aXN9LE8ucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5leHBsaWNpdCYmbnVsbD09PUsuaW1wbGljaXQpLEsuaW1wbGljaXQ9TCx0aGlzfSxPLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9i''@;'; put 'put ''YXNlU3RhdGUsSz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBMLm9iaj0hMCwwIT09Sy5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoSyksdGhpc30sTy5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxs''@;'; put 'put ''PT09Sy5rZXkpLEsua2V5PUwsdGhpc30sTy5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sTy5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5jaG9pY2Up''@;'; put 'put ''LEsuY2hvaWNlPUwsdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyhMKS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJuIExbVV19KSksdGhpc30sTy5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLnVzZSksSy5jb250YWlu''@;'; put 'put ''cz1MLHRoaXN9LE8ucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVUucGFyZW50KXJldHVybiBMLndyYXBSZXN1bHQoVS5jaGlsZHJlblswXS5fZGVjb2RlKEwsSykpO3ZhciBuZSxXPVUuZGVmYXVsdCxZPSEwLHE9bnVsbDtp''@;'; put 'put ''ZihudWxsIT09VS5rZXkmJihxPUwuZW50ZXJLZXkoVS5rZXkpKSxVLm9wdGlvbmFsKXt2YXIgZWU9bnVsbDtpZihudWxsIT09VS5leHBsaWNpdD9lZT1VLmV4cGxpY2l0Om51bGwhPT1VLmltcGxpY2l0P2VlPVUuaW1wbGljaXQ6bnVsbCE9PVUudGFnJiYoZWU9VS50YWcpLG51bGwhPT1lZXx8''@;'; put 'put ''VS5hbnkpe2lmKFk9dGhpcy5fcGVla1RhZyhMLGVlLFUuYW55KSxMLmlzRXJyb3IoWSkpcmV0dXJuIFl9ZWxzZXt2YXIgSj1MLnNhdmUoKTt0cnl7bnVsbD09PVUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoVS50YWcsTCxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTCxLKSxZPSEwfWNhdGNo''@;'; put 'put ''e1k9ITF9TC5yZXN0b3JlKEopfX1pZihVLm9iaiYmWSYmKG5lPUwuZW50ZXJPYmplY3QoKSksWSl7aWYobnVsbCE9PVUuZXhwbGljaXQpe3ZhciBpZT10aGlzLl9kZWNvZGVUYWcoTCxVLmV4cGxpY2l0KTtpZihMLmlzRXJyb3IoaWUpKXJldHVybiBpZTtMPWllfXZhciBsZT1MLm9mZnNldDtp''@;'; put 'put ''ZihudWxsPT09VS51c2UmJm51bGw9PT1VLmNob2ljZSl7VS5hbnkmJihKPUwuc2F2ZSgpKTt2YXIgbWU9dGhpcy5fZGVjb2RlVGFnKEwsbnVsbCE9PVUuaW1wbGljaXQ/VS5pbXBsaWNpdDpVLnRhZyxVLmFueSk7aWYoTC5pc0Vycm9yKG1lKSlyZXR1cm4gbWU7VS5hbnk/Vz1MLnJhdyhKKTpM''@;'; put 'put ''PW1lfWlmKEsmJksudHJhY2smJm51bGwhPT1VLnRhZyYmSy50cmFjayhMLnBhdGgoKSxsZSxMLmxlbmd0aCwidGFnZ2VkIiksSyYmSy50cmFjayYmbnVsbCE9PVUudGFnJiZLLnRyYWNrKEwucGF0aCgpLEwub2Zmc2V0LEwubGVuZ3RoLCJjb250ZW50IiksVS5hbnl8fChXPW51bGw9PT1VLmNo''@;'; put 'put ''b2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFnLEwsSyk6dGhpcy5fZGVjb2RlQ2hvaWNlKEwsSykpLEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZighVS5hbnkmJm51bGw9PT1VLmNob2ljZSYmbnVsbCE9PVUuY2hpbGRyZW4mJlUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihTZSl7U2Uu''@;'; put 'put ''X2RlY29kZShMLEspfSksVS5jb250YWlucyYmKCJvY3RzdHIiPT09VS50YWd8fCJiaXRzdHIiPT09VS50YWcpKXt2YXIgX2U9bmV3IGcoVyk7Vz10aGlzLl9nZXRVc2UoVS5jb250YWlucyxMLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShfZSxLKX19cmV0dXJuIFUub2JqJiZZJiYoVz1M''@;'; put 'put ''LmxlYXZlT2JqZWN0KG5lKSksbnVsbD09PVUua2V5fHxudWxsPT09VyYmITAhPT1ZP251bGwhPT1xJiZMLmV4aXRLZXkocSk6TC5sZWF2ZUtleShxLFUua2V5LFcpLFd9LE8ucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7cmV0''@;'; put 'put ''dXJuInNlcSI9PT1MfHwic2V0Ij09PUw/bnVsbDoic2Vxb2YiPT09THx8InNldG9mIj09PUw/dGhpcy5fZGVjb2RlTGlzdChLLEwsVy5hcmdzWzBdLFUpOi9zdHIkLy50ZXN0KEwpP3RoaXMuX2RlY29kZVN0cihLLEwsVSk6Im9iamlkIj09PUwmJlcuYXJncz90aGlzLl9kZWNvZGVPYmppZChL''@;'; put 'put ''LFcuYXJnc1swXSxXLmFyZ3NbMV0sVSk6Im9iamlkIj09PUw/dGhpcy5fZGVjb2RlT2JqaWQoSyxudWxsLG51bGwsVSk6ImdlbnRpbWUiPT09THx8InV0Y3RpbWUiPT09TD90aGlzLl9kZWNvZGVUaW1lKEssTCxVKToibnVsbF8iPT09TD90aGlzLl9kZWNvZGVOdWxsKEssVSk6ImJvb2wiPT09''@;'; put 'put ''TD90aGlzLl9kZWNvZGVCb29sKEssVSk6Im9iakRlc2MiPT09TD90aGlzLl9kZWNvZGVTdHIoSyxMLFUpOiJpbnQiPT09THx8ImVudW0iPT09TD90aGlzLl9kZWNvZGVJbnQoSyxXLmFyZ3MmJlcuYXJnc1swXSxVKTpudWxsIT09Vy51c2U/dGhpcy5fZ2V0VXNlKFcudXNlLEsuX3JlcG9ydGVy''@;'; put 'put ''U3RhdGUub2JqKS5fZGVjb2RlKEssVSk6Sy5lcnJvcigidW5rbm93biB0YWc6ICIrTCl9LE8ucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFUudXNlRGVjb2Rlcj10aGlzLl91c2UoTCxLKSxCKG51bGw9PT1VLnVzZURlY29kZXIu''@;'; put 'put ''X2Jhc2VTdGF0ZS5wYXJlbnQpLFUudXNlRGVjb2Rlcj1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxVLmltcGxpY2l0IT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihVLnVzZURlY29kZXI9VS51c2VEZWNvZGVyLmNsb25lKCksVS51c2VEZWNvZGVyLl9i''@;'; put 'put ''YXNlU3RhdGUuaW1wbGljaXQ9VS5pbXBsaWNpdCksVS51c2VEZWNvZGVyfSxPLnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlLFc9bnVsbCxZPSExO3JldHVybiBPYmplY3Qua2V5cyhVLmNob2ljZSkuc29tZShmdW5jdGlvbihxKXt2''@;'; put 'put ''YXIgZWU9TC5zYXZlKCksSj1VLmNob2ljZVtxXTt0cnl7dmFyIG5lPUouX2RlY29kZShMLEspO2lmKEwuaXNFcnJvcihuZSkpcmV0dXJuITE7Vz17dHlwZTpxLHZhbHVlOm5lfSxZPSEwfWNhdGNoe3JldHVybiBMLnJlc3RvcmUoZWUpLCExfXJldHVybiEwfSx0aGlzKSxZP1c6TC5lcnJvcigi''@;'; put 'put ''Q2hvaWNlIG5vdCBtYXRjaGVkIil9LE8ucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKEwpe3JldHVybiBuZXcgXyhMLHRoaXMucmVwb3J0ZXIpfSxPLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09''@;'; put 'put ''PVcuZGVmYXVsdHx8Vy5kZWZhdWx0IT09TCl7dmFyIFk9dGhpcy5fZW5jb2RlVmFsdWUoTCxLLFUpO2lmKHZvaWQgMCE9PVkmJiF0aGlzLl9za2lwRGVmYXVsdChZLEssVSkpcmV0dXJuIFl9fSxPLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPXRoaXMuX2Jh''@;'; put 'put ''c2VTdGF0ZTtpZihudWxsPT09Vy5wYXJlbnQpcmV0dXJuIFcuY2hpbGRyZW5bMF0uX2VuY29kZShMLEt8fG5ldyBJKTt2YXIgSj1udWxsO2lmKHRoaXMucmVwb3J0ZXI9SyxXLm9wdGlvbmFsJiZ2b2lkIDA9PT1MKXtpZihudWxsPT09Vy5kZWZhdWx0KXJldHVybjtMPVcuZGVmYXVsdH12YXIg''@;'; put 'put ''WT1udWxsLHE9ITE7aWYoVy5hbnkpSj10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2Vsc2UgaWYoVy5jaG9pY2UpSj10aGlzLl9lbmNvZGVDaG9pY2UoTCxLKTtlbHNlIGlmKFcuY29udGFpbnMpWT10aGlzLl9nZXRVc2UoVy5jb250YWlucyxVKS5fZW5jb2RlKEwsSykscT0hMDtlbHNl''@;'; put 'put ''IGlmKFcuY2hpbGRyZW4pWT1XLmNoaWxkcmVuLm1hcChmdW5jdGlvbihsZSl7aWYoIm51bGxfIj09PWxlLl9iYXNlU3RhdGUudGFnKXJldHVybiBsZS5fZW5jb2RlKG51bGwsSyxMKTtpZihudWxsPT09bGUuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIEsuZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZl''@;'; put 'put ''IGEga2V5Iik7dmFyIG1lPUsuZW50ZXJLZXkobGUuX2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgTClyZXR1cm4gSy5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7dmFyIF9lPWxlLl9lbmNvZGUoTFtsZS5fYmFzZVN0YXRlLmtleV0s''@;'; put 'put ''SyxMKTtyZXR1cm4gSy5sZWF2ZUtleShtZSksX2V9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihsZSl7cmV0dXJuIGxlfSksWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFkpO2Vsc2UgaWYoInNlcW9mIj09PVcudGFnfHwic2V0b2YiPT09Vy50YWcpe2lmKCFXLmFyZ3N8fDEhPT1XLmFyZ3Mu''@;'; put 'put ''bGVuZ3RoKXJldHVybiBLLmVycm9yKCJUb28gbWFueSBhcmdzIGZvciA6ICIrVy50YWcpO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiBLLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7dmFyIGVlPXRoaXMuY2xvbmUoKTtlZS5fYmFzZVN0YXRlLmltcGxp''@;'; put 'put ''Y2l0PW51bGwsWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwubWFwKGZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5fZ2V0VXNlKHRoaXMuX2Jhc2VTdGF0ZS5hcmdzWzBdLEwpLl9lbmNvZGUobGUsSyl9LGVlKSl9ZWxzZSBudWxsIT09Vy51c2U/Sj10aGlzLl9nZXRVc2UoVy51c2UsVSku''@;'; put 'put ''X2VuY29kZShMLEspOihZPXRoaXMuX2VuY29kZVByaW1pdGl2ZShXLnRhZyxMKSxxPSEwKTtpZighVy5hbnkmJm51bGw9PT1XLmNob2ljZSl7dmFyIG5lPW51bGwhPT1XLmltcGxpY2l0P1cuaW1wbGljaXQ6Vy50YWcsaWU9bnVsbD09PVcuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQi''@;'; put 'put ''O251bGw9PT1uZT9udWxsPT09Vy51c2UmJksuZXJyb3IoIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOm51bGw9PT1XLnVzZSYmKEo9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKG5lLHEsaWUsWSkpfXJldHVybiBudWxsIT09Vy5leHBsaWNpdCYmKEo9dGhpcy5fZW5jb2Rl''@;'; put 'put ''Q29tcG9zaXRlKFcuZXhwbGljaXQsITEsImNvbnRleHQiLEopKSxKfSxPLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlLFc9VS5jaG9pY2VbTC50eXBlXTtyZXR1cm4gV3x8QighMSxMLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09O''@;'; put 'put ''LnN0cmluZ2lmeShPYmplY3Qua2V5cyhVLmNob2ljZSkpKSxXLl9lbmNvZGUoTC52YWx1ZSxLKX0sTy5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdChMKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKEss''@;'; put 'put ''TCk7aWYoIm9iamlkIj09PUwmJlUuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoSyxVLnJldmVyc2VBcmdzWzBdLFUuYXJnc1sxXSk7aWYoIm9iamlkIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKEssbnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1MfHwidXRjdGltZSI9PT1M''@;'; put 'put ''KXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKEssTCk7aWYoIm51bGxfIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PUx8fCJlbnVtIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZUludChLLFUuYXJncyYmVS5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09TClyZXR1''@;'; put 'put ''cm4gdGhpcy5fZW5jb2RlQm9vbChLKTtpZigib2JqRGVzYyI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxMKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitMKX0sTy5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKEwpe3JldHVybi9eWzAtOSBdKiQvLnRlc3Qo''@;'; put 'put ''TCl9LE8ucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKEwpe3JldHVybi9eW0EtWmEtejAtOSAnXChcKVwrLFwtXC5cLzo9XD9dKiQvLnRlc3QoTCl9fSw4NDY1Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KTtmdW5jdGlvbiBfKEIpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxs''@;'; put 'put ''LHBhdGg6W10sb3B0aW9uczpCfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIGcoQix3KXt0aGlzLnBhdGg9Qix0aGlzLnJldGhyb3codyl9WC5iPV8sXy5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih3KXtyZXR1cm4gdyBpbnN0YW5jZW9mIGd9LF8ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6dy5vYmoscGF0aExlbjp3LnBhdGgubGVuZ3RofX0sXy5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO1Aub2JqPXcub2JqLFAucGF0aD1QLnBhdGguc2xpY2UoMCx3LnBh''@;'; put 'put ''dGhMZW4pfSxfLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2godyl9LF8ucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtQLnBhdGg9UC5wYXRoLnNsaWNlKDAsdy0x''@;'; put 'put ''KX0sXy5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24odyxQLEYpe3ZhciBPPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHcpLG51bGwhPT1PLm9iaiYmKE8ub2JqW1BdPUYpfSxfLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUu''@;'; put 'put ''cGF0aC5qb2luKCIvIil9LF8ucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxQPXcub2JqO3JldHVybiB3Lm9iaj17fSxQfSxfLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRl''@;'; put 'put ''LEY9UC5vYmo7cmV0dXJuIFAub2JqPXcsRn0sXy5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odyl7dmFyIFAsRj10aGlzLl9yZXBvcnRlclN0YXRlLE89dyBpbnN0YW5jZW9mIGc7aWYoUD1PP3c6bmV3IGcoRi5wYXRoLm1hcChmdW5jdGlvbih6KXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnko''@;'; put 'put ''eikrIl0ifSkuam9pbigiIiksdy5tZXNzYWdlfHx3LHcuc3RhY2spLCFGLm9wdGlvbnMucGFydGlhbCl0aHJvdyBQO3JldHVybiBPfHxGLmVycm9ycy5wdXNoKFApLFB9LF8ucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4g''@;'; put 'put ''UC5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3Iodyk/bnVsbDp3LGVycm9yczpQLmVycm9yc306d30sSShnLEVycm9yKSxnLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHcpe2lmKHRoaXMubWVzc2FnZT13KyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVy''@;'; put 'put ''cm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGcpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChQKXt0aGlzLnN0YWNrPVAuc3RhY2t9cmV0dXJuIHRoaXN9fSwxNjA6KHVlLFgseSk9Pnt2YXIgST15''@;'; put 'put ''KDY4MjYpO1gudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxYLnRhZ0NsYXNzQnlOYW1lPUkuX3JldmVyc2UoWC50YWdDbGFzcyksWC50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0''@;'; put 'put ''ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwy''@;'; put 'put ''MToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LFgudGFnQnlOYW1lPUkuX3JldmVyc2UoWC50YWcpfSw2ODI2''@;'; put 'put ''Oih1ZSxYLHkpPT57dmFyIEk9WDtJLl9yZXZlcnNlPWZ1bmN0aW9uKGcpe3ZhciBCPXt9O3JldHVybiBPYmplY3Qua2V5cyhnKS5mb3JFYWNoKGZ1bmN0aW9uKHcpeygwfHcpPT13JiYod3w9MCksQltnW3ddXT13fSksQn0sSS5kZXI9eSgxNjApfSwxNjcxOih1ZSxYLHkpPT57dmFyIEk9eSg1''@;'; put 'put ''NzE3KSxfPXkoOTgwOSksZz1fLmJhc2UsQj1fLmJpZ251bSx3PV8uY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBQKE4pe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1OLm5hbWUsdGhpcy5lbnRpdHk9Tix0aGlzLnRyZWU9bmV3IEYsdGhpcy50cmVlLl9pbml0KE4uYm9keSl9ZnVuY3Rpb24gRihO''@;'; put 'put ''KXtnLk5vZGUuY2FsbCh0aGlzLCJkZXIiLE4pfWZ1bmN0aW9uIE8oTixMKXt2YXIgSz1OLnJlYWRVSW50OChMKTtpZihOLmlzRXJyb3IoSykpcmV0dXJuIEs7dmFyIFU9dy50YWdDbGFzc1tLPj42XSxXPSEoMzImSyk7aWYoMzEmfkspSyY9MzE7ZWxzZXt2YXIgWT1LO2ZvcihLPTA7ISgxMjgm''@;'; put 'put ''flkpOyl7aWYoWT1OLnJlYWRVSW50OChMKSxOLmlzRXJyb3IoWSkpcmV0dXJuIFk7Szw8PTcsS3w9MTI3Jll9fXJldHVybntjbHM6VSxwcmltaXRpdmU6Vyx0YWc6Syx0YWdTdHI6dy50YWdbS119fWZ1bmN0aW9uIHooTixMLEspe3ZhciBVPU4ucmVhZFVJbnQ4KEspO2lmKE4uaXNFcnJvcihV''@;'; put 'put ''KSlyZXR1cm4gVTtpZighTCYmMTI4PT09VSlyZXR1cm4gbnVsbDtpZighKDEyOCZVKSlyZXR1cm4gVTt2YXIgVz0xMjcmVTtpZihXPjQpcmV0dXJuIE4uZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtVPTA7Zm9yKHZhciBZPTA7WTxXO1krKyl7VTw8PTg7dmFyIHE9Ti5yZWFk''@;'; put 'put ''VUludDgoSyk7aWYoTi5pc0Vycm9yKHEpKXJldHVybiBxO1V8PXF9cmV0dXJuIFV9dWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihMLEspe3JldHVybiBMIGluc3RhbmNlb2YgZy5EZWNvZGVyQnVmZmVyfHwoTD1uZXcgZy5EZWNvZGVyQnVmZmVyKEwsSykpLHRoaXMu''@;'; put 'put ''dHJlZS5fZGVjb2RlKEwsSyl9LEkoRixnLk5vZGUpLEYucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKEwsSyxVKXtpZihMLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgVz1MLnNhdmUoKSxZPU8oTCwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytLKyciJyk7cmV0dXJuIEwuaXNFcnJvcihZKT9Z''@;'; put 'put ''OihMLnJlc3RvcmUoVyksWS50YWc9PT1LfHxZLnRhZ1N0cj09PUt8fFkudGFnU3RyKyJvZiI9PT1LfHxVKX0sRi5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihMLEssVSl7dmFyIFc9TyhMLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytLKyciJyk7aWYoTC5pc0Vycm9yKFcpKXJl''@;'; put 'put ''dHVybiBXO3ZhciBZPXooTCxXLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrSysnIicpO2lmKEwuaXNFcnJvcihZKSlyZXR1cm4gWTtpZighVSYmVy50YWchPT1LJiZXLnRhZ1N0ciE9PUsmJlcudGFnU3RyKyJvZiIhPT1LKXJldHVybiBMLmVycm9yKCdGYWlsZWQgdG8g''@;'; put 'put ''bWF0Y2ggdGFnOiAiJytLKyciJyk7aWYoVy5wcmltaXRpdmV8fG51bGwhPT1ZKXJldHVybiBMLnNraXAoWSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0srJyInKTt2YXIgcT1MLnNhdmUoKSxlZT10aGlzLl9za2lwVW50aWxFbmQoTCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBs''@;'; put 'put ''ZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTtyZXR1cm4gTC5pc0Vycm9yKGVlKT9lZTooWT1MLm9mZnNldC1xLm9mZnNldCxMLnJlc3RvcmUocSksTC5za2lwKFksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytLKyciJykpfSxGLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0''@;'; put 'put ''aW9uKEwsSyl7Zm9yKDs7KXt2YXIgVT1PKEwsSyk7aWYoTC5pc0Vycm9yKFUpKXJldHVybiBVO3ZhciBZLFc9eihMLFUucHJpbWl0aXZlLEspO2lmKEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZihZPVUucHJpbWl0aXZlfHxudWxsIT09Vz9MLnNraXAoVyk6dGhpcy5fc2tpcFVudGlsRW5kKEws''@;'; put 'put ''SyksTC5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCJlbmQiPT09VS50YWdTdHIpYnJlYWt9fSxGLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihMLEssVSxXKXtmb3IodmFyIFk9W107IUwuaXNFbXB0eSgpOyl7dmFyIHE9dGhpcy5fcGVla1RhZyhMLCJlbmQiKTtpZihMLmlzRXJyb3Io''@;'; put 'put ''cSkpcmV0dXJuIHE7dmFyIGVlPVUuZGVjb2RlKEwsImRlciIsVyk7aWYoTC5pc0Vycm9yKGVlKSYmcSlicmVhaztZLnB1c2goZWUpfXJldHVybiBZfSxGLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKEwsSyl7aWYoImJpdHN0ciI9PT1LKXt2YXIgVT1MLnJlYWRVSW50OCgpO3JldHVy''@;'; put 'put ''biBMLmlzRXJyb3IoVSk/VTp7dW51c2VkOlUsZGF0YTpMLnJhdygpfX1pZigiYm1wc3RyIj09PUspe3ZhciBXPUwucmF3KCk7aWYoVy5sZW5ndGglMj09MSlyZXR1cm4gTC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtmb3IodmFyIFk9''@;'; put 'put ''IiIscT0wO3E8Vy5sZW5ndGgvMjtxKyspWSs9U3RyaW5nLmZyb21DaGFyQ29kZShXLnJlYWRVSW50MTZCRSgyKnEpKTtyZXR1cm4gWX1pZigibnVtc3RyIj09PUspe3ZhciBlZT1MLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihlZSk/ZWU6TC5lcnJvcigi''@;'; put 'put ''RGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1LKXJldHVybiBMLnJhdygpO2lmKCJvYmpEZXNjIj09PUspcmV0dXJuIEwucmF3KCk7aWYoInByaW50c3RyIj09PUspe3ZhciBKPUwucmF3KCkudG9TdHJpbmcoImFz''@;'; put 'put ''Y2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoSik/SjpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KEspP0wucmF3KCkudG9TdHJpbmcoKTpMLmVycm9yKCJEZWNvZGluZyBvZiBz''@;'; put 'put ''dHJpbmcgdHlwZTogIitLKyIgdW5zdXBwb3J0ZWQiKX0sRi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKEwsSyxVKXtmb3IodmFyIFcsWT1bXSxxPTA7IUwuaXNFbXB0eSgpOyl7dmFyIGVlPUwucmVhZFVJbnQ4KCk7cTw8PTcscXw9MTI3JmVlLDEyOCZlZXx8KFkucHVzaChxKSxx''@;'; put 'put ''PTApfWlmKDEyOCZlZSYmWS5wdXNoKHEpLFc9VT9ZOltZWzBdLzQwfDAsWVswXSU0MF0uY29uY2F0KFkuc2xpY2UoMSkpLEspe3ZhciBpZT1LW1cuam9pbigiICIpXTt2b2lkIDA9PT1pZSYmKGllPUtbVy5qb2luKCIuIildKSx2b2lkIDAhPT1pZSYmKFc9aWUpfXJldHVybiBXfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihMLEspe3ZhciBVPUwucmF3KCkudG9TdHJpbmcoKTtpZigiZ2VudGltZSI9PT1LKXZhciBXPTB8VS5zbGljZSgwLDQpLFk9MHxVLnNsaWNlKDQsNikscT0wfFUuc2xpY2UoNiw4KSxlZT0wfFUuc2xpY2UoOCwxMCksSj0wfFUuc2xpY2UoMTAsMTIp''@;'; put 'put ''LG5lPTB8VS5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1LKXJldHVybiBMLmVycm9yKCJEZWNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Vz0wfFUuc2xpY2UoMCwyKSxZPTB8VS5zbGljZSgyLDQpLHE9MHxVLnNsaWNlKDQsNiksZWU9MHxVLnNsaWNl''@;'; put 'put ''KDYsOCksSj0wfFUuc2xpY2UoOCwxMCksbmU9MHxVLnNsaWNlKDEwLDEyKSxXPVc8NzA/MmUzK1c6MTkwMCtXfXJldHVybiBEYXRlLlVUQyhXLFktMSxxLGVlLEosbmUsMCl9LEYucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKEwpe3JldHVybiBudWxsfSxGLnByb3RvdHlwZS5fZGVj''@;'; put 'put ''b2RlQm9vbD1mdW5jdGlvbihMKXt2YXIgSz1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoSyk/SzowIT09S30sRi5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihMLEspe3ZhciBVPUwucmF3KCksVz1uZXcgQihVKTtyZXR1cm4gSyYmKFc9S1tXLnRvU3RyaW5nKDEwKV18fFcp''@;'; put 'put ''LFd9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTCxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTCYmKEw9TChLKSksTC5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDgzMDc6KHVlLFgseSk9Pnt2YXIgST1YO0kuZGVyPXkoMTY3MSksSS5wZW09eSg5NjMxKX0sOTYzMToodWUsWCx5''@;'; put 'put ''KT0+e3ZhciBJPXkoNTcxNyksXz15KDg3NjQpLkJ1ZmZlcixnPXkoMTY3MSk7ZnVuY3Rpb24gQih3KXtnLmNhbGwodGhpcyx3KSx0aGlzLmVuYz0icGVtIn1JKEIsZyksdWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihQLEYpe2Zvcih2YXIgTz1QLnRvU3RyaW5nKCku''@;'; put 'put ''c3BsaXQoL1tcclxuXSsvZyksej1GLmxhYmVsLnRvVXBwZXJDYXNlKCksTj0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC8sTD0tMSxLPS0xLFU9MDtVPE8ubGVuZ3RoO1UrKyl7dmFyIFc9T1tVXS5tYXRjaChOKTtpZihudWxsIT09VyYmV1syXT09PXope2lmKC0xIT09TCl7aWYo''@;'; put 'put ''IkVORCIhPT1XWzFdKWJyZWFrO0s9VTticmVha31pZigiQkVHSU4iIT09V1sxXSlicmVhaztMPVV9fWlmKC0xPT09THx8LTE9PT1LKXRocm93IG5ldyBFcnJvcigiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogIit6KTt2YXIgWT1PLnNsaWNlKEwrMSxLKS5qb2luKCIiKTtZLnJlcGxhY2Uo''@;'; put 'put ''L1teYS16MC05XCtcLz1dKy9naSwiIik7dmFyIHE9bmV3IF8oWSwiYmFzZTY0Iik7cmV0dXJuIGcucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMscSxGKX19LDY5ODQ6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg4NzY0KS5CdWZmZXIsZz15KDk4MDkpLEI9Zy5iYXNlLHc9Zy5jb25z''@;'; put 'put ''dGFudHMuZGVyO2Z1bmN0aW9uIFAoTil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPU4ubmFtZSx0aGlzLmVudGl0eT1OLHRoaXMudHJlZT1uZXcgRix0aGlzLnRyZWUuX2luaXQoTi5ib2R5KX1mdW5jdGlvbiBGKE4pe0IuTm9kZS5jYWxsKHRoaXMsImRlciIsTil9ZnVuY3Rpb24gTyhOKXty''@;'; put 'put ''ZXR1cm4gTjwxMD8iMCIrTjpOfXVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUoTCxLKS5qb2luKCl9LEkoRixCLk5vZGUpLEYucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24oTCxLLFUsVyl7dmFy''@;'; put 'put ''IEosWT1mdW5jdGlvbiB6KE4sTCxLLFUpe3ZhciBXO2lmKCJzZXFvZiI9PT1OP049InNlcSI6InNldG9mIj09PU4mJihOPSJzZXQiKSx3LnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShOKSlXPXcudGFnQnlOYW1lW05dO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBOfHwoMHxOKSE9PU4pcmV0''@;'; put 'put ''dXJuIFUuZXJyb3IoIlVua25vd24gdGFnOiAiK04pO1c9Tn1yZXR1cm4gVz49MzE/VS5lcnJvcigiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkIik6KEx8fChXfD0zMiksV3w9dy50YWdDbGFzc0J5TmFtZVtLfHwidW5pdmVyc2FsIl08PDYpfShMLEssVSx0aGlzLnJlcG9y''@;'; put 'put ''dGVyKTtpZihXLmxlbmd0aDwxMjgpcmV0dXJuKEo9bmV3IF8oMikpWzBdPVksSlsxXT1XLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtKLFddKTtmb3IodmFyIHE9MSxlZT1XLmxlbmd0aDtlZT49MjU2O2VlPj49OClxKys7KEo9bmV3IF8oMitxKSlbMF09WSxKWzFdPTEyOHxx''@;'; put 'put ''LGVlPTErcTtmb3IodmFyIG5lPVcubGVuZ3RoO25lPjA7ZWUtLSxuZT4+PTgpSltlZV09MjU1Jm5lO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtKLFddKX0sRi5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbihMLEspe2lmKCJiaXRzdHIiPT09SylyZXR1cm4gdGhpcy5f''@;'; put 'put ''Y3JlYXRlRW5jb2RlckJ1ZmZlcihbMHxMLnVudXNlZCxMLmRhdGFdKTtpZigiYm1wc3RyIj09PUspe2Zvcih2YXIgVT1uZXcgXygyKkwubGVuZ3RoKSxXPTA7VzxMLmxlbmd0aDtXKyspVS53cml0ZVVJbnQxNkJFKEwuY2hhckNvZGVBdChXKSwyKlcpO3JldHVybiB0aGlzLl9jcmVhdGVFbmNv''@;'; put 'put ''ZGVyQnVmZmVyKFUpfXJldHVybiJudW1zdHIiPT09Sz90aGlzLl9pc051bXN0cihMKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlIik6''@;'; put 'put ''InByaW50c3RyIj09PUs/dGhpcy5faXNQcmludHN0cihMKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRl''@;'; put 'put ''cnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrIik6L3N0ciQvLnRlc3QoSyl8fCJvYmpEZXNjIj09PUs/dGhp''@;'; put 'put ''cy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitLKyIgdW5zdXBwb3J0ZWQiKX0sRi5wcm90b3R5cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKEwsSyxVKXtpZigic3RyaW5nIj09dHlwZW9mIEwpe2lmKCFLKXJl''@;'; put 'put ''dHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYoIUsuaGFzT3duUHJvcGVydHkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwIik7TD1LW0xdLnNw''@;'; put 'put ''bGl0KC9bXHNcLl0rL2cpO2Zvcih2YXIgVz0wO1c8TC5sZW5ndGg7VysrKUxbV118PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KEwpKWZvcihMPUwuc2xpY2UoKSxXPTA7VzxMLmxlbmd0aDtXKyspTFtXXXw9MDtpZighQXJyYXkuaXNBcnJheShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJv''@;'; put 'put ''cigib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiAiK0pTT04uc3RyaW5naWZ5KEwpKTtpZighVSl7aWYoTFsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQiIpO0wuc3BsaWNlKDAsMiw0MCpM''@;'; put 'put ''WzBdK0xbMV0pfXZhciBZPTA7Zm9yKFc9MDtXPEwubGVuZ3RoO1crKyl7dmFyIHE9TFtXXTtmb3IoWSsrO3E+PTEyODtxPj49NylZKyt9dmFyIGVlPW5ldyBfKFkpLEo9ZWUubGVuZ3RoLTE7Zm9yKFc9TC5sZW5ndGgtMTtXPj0wO1ctLSlmb3IoZWVbSi0tXT0xMjcmKHE9TFtXXSk7KHE+Pj03''@;'; put 'put ''KT4wOyllZVtKLS1dPTEyOHwxMjcmcTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihlZSl9LEYucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEwsSyl7dmFyIFUsVz1uZXcgRGF0ZShMKTtyZXR1cm4iZ2VudGltZSI9PT1LP1U9W08oVy5nZXRGdWxsWWVhcigpKSxPKFcu''@;'; put 'put ''Z2V0VVRDTW9udGgoKSsxKSxPKFcuZ2V0VVRDRGF0ZSgpKSxPKFcuZ2V0VVRDSG91cnMoKSksTyhXLmdldFVUQ01pbnV0ZXMoKSksTyhXLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1LP1U9W08oVy5nZXRGdWxsWWVhcigpJTEwMCksTyhXLmdldFVUQ01vbnRo''@;'; put 'put ''KCkrMSksTyhXLmdldFVUQ0RhdGUoKSksTyhXLmdldFVUQ0hvdXJzKCkpLE8oVy5nZXRVVENNaW51dGVzKCkpLE8oVy5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitLKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRo''@;'; put 'put ''aXMuX2VuY29kZVN0cihVLCJvY3RzdHIiKX0sRi5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LEYucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oTCxLKXtpZigic3RyaW5nIj09dHlwZW9mIEwpe2lmKCFL''@;'; put 'put ''KXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIUsuaGFzT3duUHJvcGVydHkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3Ry''@;'; put 'put ''aW5naWZ5KEwpKTtMPUtbTF19aWYoIm51bWJlciIhPXR5cGVvZiBMJiYhXy5pc0J1ZmZlcihMKSl7dmFyIFU9TC50b0FycmF5KCk7IUwuc2lnbiYmMTI4JlVbMF0mJlUudW5zaGlmdCgwKSxMPW5ldyBfKFUpfWlmKF8uaXNCdWZmZXIoTCkpe3ZhciBXPUwubGVuZ3RoOzA9PT1MLmxlbmd0aCYm''@;'; put 'put ''VysrO3ZhciBxPW5ldyBfKFcpO3JldHVybiBMLmNvcHkocSksMD09PUwubGVuZ3RoJiYocVswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHEpfWlmKEw8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2lmKEw8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNv''@;'; put 'put ''ZGVyQnVmZmVyKFswLExdKTtXPTE7Zm9yKHZhciBZPUw7WT49MjU2O1k+Pj04KVcrKztmb3IoWT0ocT1uZXcgQXJyYXkoVykpLmxlbmd0aC0xO1k+PTA7WS0tKXFbWV09MjU1JkwsTD4+PTg7cmV0dXJuIDEyOCZxWzBdJiZxLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihu''@;'; put 'put ''ZXcgXyhxKSl9LEYucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEw/MjU1OjApfSxGLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEwmJihMPUwoSykpLEwuX2dldEVu''@;'; put 'put ''Y29kZXIoImRlciIpLnRyZWV9LEYucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihMLEssVSl7dmFyIFksVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcuZGVmYXVsdClyZXR1cm4hMTt2YXIgcT1MLmpvaW4oKTtpZih2b2lkIDA9PT1XLmRlZmF1bHRCdWZmZXImJihXLmRlZmF1''@;'; put 'put ''bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoVy5kZWZhdWx0LEssVSkuam9pbigpKSxxLmxlbmd0aCE9PVcuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKFk9MDtZPHEubGVuZ3RoO1krKylpZihxW1ldIT09Vy5kZWZhdWx0QnVmZmVyW1ldKXJldHVybiExO3JldHVybiEwfX0s''@;'; put 'put ''NjU3OToodWUsWCx5KT0+e3ZhciBJPVg7SS5kZXI9eSg2OTg0KSxJLnBlbT15KDI4ODMpfSwyODgzOih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoNjk4NCk7ZnVuY3Rpb24gZyhCKXtfLmNhbGwodGhpcyxCKSx0aGlzLmVuYz0icGVtIn1JKGcsXyksdWUuZXhwb3J0cz1nLGcucHJvdG90''@;'; put 'put ''eXBlLmVuY29kZT1mdW5jdGlvbih3LFApe2Zvcih2YXIgTz1fLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLHcpLnRvU3RyaW5nKCJiYXNlNjQiKSx6PVsiLS0tLS1CRUdJTiAiK1AubGFiZWwrIi0tLS0tIl0sTj0wO048Ty5sZW5ndGg7Tis9NjQpei5wdXNoKE8uc2xpY2UoTixOKzY0KSk7''@;'; put 'put ''cmV0dXJuIHoucHVzaCgiLS0tLS1FTkQgIitQLmxhYmVsKyItLS0tLSIpLHouam9pbigiXG4iKX19LDQ1OTA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxl''@;'; put 'put ''ZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13''@;'; put 'put ''Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUm''@;'; put 'put ''JmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8''@;'; put 'put ''VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iu''@;'; put 'put ''d29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4''@;'; put 'put ''KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09''@;'; put 'put ''KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJh''@;'; put 'put ''eSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3''@;'; put 'put ''MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJy''@;'; put 'put ''YXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3Ro''@;'; put 'put ''LzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtD''@;'; put 'put ''LTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08''@;'; put 'put ''PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2Vp''@;'; put 'put ''bCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQs''@;'; put 'put ''dGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0x''@;'; put 'put ''OD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9''@;'; put 'put ''VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWop''@;'; put 'put ''e3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihw''@;'; put 'put ''KXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xv''@;'; put 'put ''bmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlw''@;'; put 'put ''PWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRo''@;'; put 'put ''aXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4Mjgx''@;'; put 'put ''MjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2''@;'; put 'put ''MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3Ro''@;'; put 'put ''K3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1h''@;'; put 'put ''dGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4g''@;'; put 'put ''MCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKysp''@;'; put 'put ''e3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQu''@;'; put 'put ''dG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7''@;'; put 'put ''IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06''@;'; put 'put ''Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6''@;'; put 'put ''cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVu''@;'; put 'put ''Y3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNp''@;'; put 'put ''cmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCks''@;'; put 'put ''alttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90''@;'; put 'put ''eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJv''@;'; put 'put ''dG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtm''@;'; put 'put ''b3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0''@;'; put 'put ''aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3Ro''@;'; put 'put ''aXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmlu''@;'; put 'put ''ZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5n''@;'; put 'put ''dGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCku''@;'; put 'put ''aXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIu''@;'; put 'put ''bGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5j''@;'; put 'put ''bG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9u''@;'; put 'put ''KHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNb''@;'; put 'put ''Q109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhv''@;'; put 'put ''cih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYz''@;'; put 'put ''Jn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1m''@;'; put 'put ''dW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90''@;'; put 'put ''eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9''@;'; put 'put ''PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hd''@;'; put 'put ''PTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQp''@;'; put 'put ''dGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVn''@;'; put 'put ''YXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3Ro''@;'; put 'put ''PnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24o''@;'; put 'put ''KX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMu''@;'; put 'put ''d29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0''@;'; put 'put ''aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhp''@;'; put 'put ''cy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9''@;'; put 'put ''eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSx4ZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLHplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sT2U9ODE5MSZGZSxJZT1G''@;'; put 'put ''ZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4x''@;'; put 'put ''MyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9''@;'; put 'put ''MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRp''@;'; put 'put ''dmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDAp''@;'; put 'put ''Kyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxSdCksbT0obT1NYXRoLmltdWwoeGUsUHQpKStNYXRoLmltdWwodmUsUnQp''@;'; put 'put ''fDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHplLFJ0KSxtPShtPU1hdGguaW11bCh6ZSxQdCkpK01hdGguaW11''@;'; put 'put ''bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bCh4ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUs''@;'; put 'put ''ZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChPZSxSdCksbT0obT1NYXRoLmltdWwoT2UsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoemUsUXQpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh6ZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVl''@;'; put 'put ''LFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3Qp''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwoT2UsUXQpfDAsbT0obT1tK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bCh6ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFd0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEpl''@;'; put 'put ''LHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKE9lLGhuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoemUsV3QpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh6ZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVl''@;'; put 'put ''LFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQp''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFd0KXwwLG09KG09bStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoemUsc3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxVdCl8MCkrTWF0aC5pbXVsKERl''@;'; put 'put ''LHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bCh4ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUs''@;'; put 'put ''eHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtl''@;'; put 'put ''LFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoT2Usc3QpfDAsbT0obT1tK01hdGguaW11bChPZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bCh6ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGh0KXwwLG09KG09bStNYXRoLmltdWwoeGUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11''@;'; put 'put ''bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQs''@;'; put 'put ''ZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFdlKXwwLG09KG09bStNYXRoLmltdWwoT2UsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoemUsaHQpfDAsbT0obT1tK01hdGguaW11bCh6ZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQp''@;'; put 'put ''fDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChPZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHplLHJuKXwwLG09KG09bStNYXRoLmltdWwoemUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoeGUsY24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUs''@;'; put 'put ''Zm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE9lLHJuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''T2UsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoemUsY24pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHhlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxt''@;'; put 'put ''PShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUs''@;'; put 'put ''eHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE9lLGNuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChJZSxjbil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bCh6ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHplLGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDAp''@;'; put 'put ''KyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''bnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKE9lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxt''@;'; put 'put ''PShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUs''@;'; put 'put ''Zm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4p''@;'; put 'put ''fDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11''@;'; put 'put ''bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXww''@;'; put 'put ''KSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhbOF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2''@;'; put 'put ''XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVs''@;'; put 'put ''VG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYu''@;'; put 'put ''bmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTtt''@;'; put 'put ''Kyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0''@;'; put 'put ''dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtD''@;'; put 'put ''KyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlw''@;'; put 'put ''ZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7''@;'; put 'put ''ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSx4ZT1D''@;'; put 'put ''W2FlK3dlK2pdLHZlPXRlKm90LXNlKnhlO3hlPXRlKnhlK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUreGUseFthZSt3ZStqXT1VZS1vdCxDW2FlK3dlK2pdPUplLXhlLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUu''@;'; put 'put ''Z3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgv''@;'; put 'put ''MjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3Vu''@;'; put 'put ''ZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgx''@;'; put 'put ''OTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09''@;'; put 'put ''MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShD''@;'; put 'put ''KSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGos''@;'; put 'put ''SCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0s''@;'; put 'put ''QyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVs''@;'; put 'put ''PWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJh''@;'; put 'put ''eSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2''@;'; put 'put ''NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYo''@;'; put 'put ''dGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndv''@;'; put 'put ''cmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0''@;'; put 'put ''aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIp''@;'; put 'put ''e3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5s''@;'; put 'put ''ZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYz''@;'; put 'put ''XjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0''@;'; put 'put ''aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwy''@;'; put 'put ''Ni1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGco''@;'; put 'put ''MD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAm''@;'; put 'put ''JnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4g''@;'; put 'put ''ZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0m''@;'; put 'put ''PTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhw''@;'; put 'put ''PDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5p''@;'; put 'put ''c3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02''@;'; put 'put ''NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''cCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53''@;'; put 'put ''b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3Ry''@;'; put 'put ''aXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAu''@;'; put 'put ''bGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndv''@;'; put 'put ''cmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2''@;'; put 'put ''MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxu''@;'; put 'put ''KHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0u''@;'; put 'put ''d29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndv''@;'; put 'put ''cmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYm''@;'; put 'put ''KG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVy''@;'; put 'put ''bygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZU''@;'; put 'put ''LmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5u''@;'; put 'put ''ZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5s''@;'; put 'put ''ZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0p''@;'; put 'put ''KX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnBy''@;'; put 'put ''b3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVn''@;'; put 'put ''YXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5j''@;'; put 'put ''dGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9''@;'; put 'put ''MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4o''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygw''@;'; put 'put ''KSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8''@;'; put 'put ''PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtp''@;'; put 'put ''ZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIo''@;'; put 'put ''Qyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpi''@;'; put 'put ''LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2Rk''@;'; put 'put ''KCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5p''@;'; put 'put ''c3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJu''@;'; put 'put ''IHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJu''@;'; put 'put ''KDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29y''@;'; put 'put ''ZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0''@;'; put 'put ''aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhp''@;'; put 'put ''cy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10''@;'; put 'put ''aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4o''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90''@;'; put 'put ''b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0''@;'; put 'put ''aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVk''@;'; put 'put ''LCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0''@;'; put 'put ''aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJl''@;'; put 'put ''ZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0''@;'; put 'put ''aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJy''@;'; put 'put ''ZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMu''@;'; put 'put ''cmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRO''@;'; put 'put ''ZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYh''@;'; put 'put ''cC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3''@;'; put 'put ''KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0''@;'; put 'put ''aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1m''@;'; put 'put ''dW5jdGlvbiBqZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhp''@;'; put 'put ''cy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5w''@;'; put 'put ''cm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0o''@;'; put 'put ''Yj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1i''@;'; put 'put ''LnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3Bs''@;'; put 'put ''aXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndv''@;'; put 'put ''cmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9''@;'; put 'put ''LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05Nzcq''@;'; put 'put ''QyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihw''@;'; put 'put ''KXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5l''@;'; put 'put ''W3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcg''@;'; put 'put ''VGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3Zl''@;'; put 'put ''cmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9u''@;'; put 'put ''KHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDAp''@;'; put 'put ''PDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxi''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5w''@;'; put 'put ''cm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIg''@;'; put 'put ''Qz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0''@;'; put 'put ''aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21w''@;'; put 'put ''KEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9''@;'; put 'put ''cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10''@;'; put 'put ''aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9''@;'; put 'put ''dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhp''@;'; put 'put ''cy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgamUocCl9LEIoamUsU2UpLGplLnByb3RvdHlwZS5j''@;'; put 'put ''b252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0samUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSxqZS5wcm90b3R5cGUu''@;'; put 'put ''aW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14''@;'; put 'put ''LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVy''@;'; put 'put ''bygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1U''@;'; put 'put ''O3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlz''@;'; put 'put ''LnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw5MjgyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpO2Z1bmN0aW9uIGcoVmUpe3JldHVybihnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''U3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGtlKXtyZXR1cm4gdHlwZW9mIGtlfTpmdW5jdGlvbihrZSl7cmV0dXJuIGtlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZrZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYma2UhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBrZX0p''@;'; put 'put ''KFZlKX1mdW5jdGlvbiBCKFZlLGtlKXtmb3IodmFyIEFlPTA7QWU8a2UubGVuZ3RoO0FlKyspe3ZhciBfdD1rZVtBZV07X3QuZW51bWVyYWJsZT1fdC5lbnVtZXJhYmxlfHwhMSxfdC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIF90JiYoX3Qud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShWZSxQKF90LmtleSksX3QpfX1mdW5jdGlvbiB3KFZlLGtlLEFlKXtyZXR1cm4ga2UmJkIoVmUucHJvdG90eXBlLGtlKSxBZSYmQihWZSxBZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFZlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLFZlfWZ1bmN0aW9uIFAoVmUpe3ZhciBr''@;'; put 'put ''ZT1mdW5jdGlvbiBGKFZlLGtlKXtpZigib2JqZWN0IiE9PWcoVmUpfHxudWxsPT09VmUpcmV0dXJuIFZlO3ZhciBBZT1WZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PUFlKXt2YXIgX3Q9QWUuY2FsbChWZSxrZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWcoX3QpKXJldHVy''@;'; put 'put ''biBfdDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWtlP1N0cmluZzpOdW1iZXIpKFZlKX0oVmUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09ZyhrZSk/a2U6U3RyaW5nKGtlKX12''@;'; put 'put ''YXIgamUsVixOPXkoMjEzNikuY29kZXMsTD1OLkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQsSz1OLkVSUl9JTlZBTElEX0FSR19UWVBFLFU9Ti5FUlJfSU5WQUxJRF9BUkdfVkFMVUUsVz1OLkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxZPU4uRVJSX01JU1NJTkdfQVJHUyxxPXkoNTk2MSksSj15''@;'; put 'put ''KDk1MzkpLmluc3BlY3QsbmU9eSg5NTM5KS50eXBlcyxpZT1uZS5pc1Byb21pc2UsbGU9bmUuaXNSZWdFeHAsbWU9eSg4MTYyKSgpLF9lPXkoNTYyNCkoKSxUZT15KDE5MjQpKCJSZWdFeHAucHJvdG90eXBlLnRlc3QiKTtmdW5jdGlvbiBDKCl7dmFyIFZlPXkoOTE1OCk7amU9VmUuaXNEZWVw''@;'; put 'put ''RXF1YWwsVj1WZS5pc0RlZXBTdHJpY3RFcXVhbH12YXIgRT0hMSxtPXVlLmV4cG9ydHM9d2UsQT17fTtmdW5jdGlvbiBhZShWZSl7dGhyb3cgVmUubWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yP1ZlLm1lc3NhZ2U6bmV3IHEoVmUpfWZ1bmN0aW9uIHNlKFZlLGtlLEFlLF90KXtpZighQWUpe3Zh''@;'; put 'put ''ciBudD0hMTtpZigwPT09a2UpbnQ9ITAsX3Q9Ik5vIHZhbHVlIGFyZ3VtZW50IHBhc3NlZCB0byBgYXNzZXJ0Lm9rKClgIjtlbHNlIGlmKF90IGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgX3Q7dmFyIFFlPW5ldyBxKHthY3R1YWw6QWUsZXhwZWN0ZWQ6ITAsbWVzc2FnZTpfdCxvcGVyYXRvcjoi''@;'; put 'put ''PT0iLHN0YWNrU3RhcnRGbjpWZX0pO3Rocm93IFFlLmdlbmVyYXRlZE1lc3NhZ2U9bnQsUWV9fWZ1bmN0aW9uIHdlKCl7Zm9yKHZhciBWZT1hcmd1bWVudHMubGVuZ3RoLGtlPW5ldyBBcnJheShWZSksQWU9MDtBZTxWZTtBZSsrKWtlW0FlXT1hcmd1bWVudHNbQWVdO3NlLmFwcGx5KHZvaWQg''@;'; put 'put ''MCxbd2Usa2UubGVuZ3RoXS5jb25jYXQoa2UpKX1tLmZhaWw9ZnVuY3Rpb24gdGUoVmUsa2UsQWUsX3QsbnQpe3ZhciB1bixRZT1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT1RZT91bj0iRmFpbGVkIjoxPT09UWU/KEFlPVZlLFZlPXZvaWQgMCk6KCExPT09RSYmKEU9ITAsKEkuZW1pdFdhcm5p''@;'; put 'put ''bmc/SS5lbWl0V2FybmluZzpfLndhcm4uYmluZChfKSkoImFzc2VydC5mYWlsKCkgd2l0aCBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXNzZXJ0LnN0cmljdEVxdWFsKCkgaW5zdGVhZCBvciBvbmx5IHBhc3MgYSBtZXNzYWdlLiIsIkRlcHJlY2F0''@;'; put 'put ''aW9uV2FybmluZyIsIkRFUDAwOTQiKSksMj09PVFlJiYoX3Q9IiE9IikpLEFlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgQWU7dmFyIE10PXthY3R1YWw6VmUsZXhwZWN0ZWQ6a2Usb3BlcmF0b3I6dm9pZCAwPT09X3Q/ImZhaWwiOl90LHN0YWNrU3RhcnRGbjpudHx8dGV9O3ZvaWQgMCE9PUFl''@;'; put 'put ''JiYoTXQubWVzc2FnZT1BZSk7dmFyIER0PW5ldyBxKE10KTt0aHJvdyB1biYmKER0Lm1lc3NhZ2U9dW4sRHQuZ2VuZXJhdGVkTWVzc2FnZT0hMCksRHR9LG0uQXNzZXJ0aW9uRXJyb3I9cSxtLm9rPXdlLG0uZXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8''@;'; put 'put ''Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTtrZSE9QWUmJmFlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpWZX0pfSxtLm5vdEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7a2U9PUFlJiZhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6IiE9IixzdGFja1N0YXJ0Rm46VmV9KX0sbS5kZWVwRXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1qZSYmQygpLGplKGtlLEFlKXx8YWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJkZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfSxtLm5vdERlZXBFcXVhbD1mdW5jdGlv''@;'; put 'put ''biBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWplJiZDKCksamUoa2UsQWUpJiZhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6Im5vdERlZXBFcXVhbCIsc3RhY2tT''@;'; put 'put ''dGFydEZuOlZlfSl9LG0uZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09amUmJkMoKSxWKGtlLEFlKXx8YWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNz''@;'; put 'put ''YWdlOl90LG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfSxtLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBVZShWZSxrZSxBZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWplJiZD''@;'; put 'put ''KCksVihWZSxrZSkmJmFlKHthY3R1YWw6VmUsZXhwZWN0ZWQ6a2UsbWVzc2FnZTpBZSxvcGVyYXRvcjoibm90RGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46VWV9KX0sbS5zdHJpY3RFcXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5l''@;'; put 'put ''dyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO19lKGtlLEFlKXx8YWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJzdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlZlfSl9LG0ubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTtfZShrZSxBZSkmJmFlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoibm90U3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfTt2YXIgSmU9dyhmdW5jdGlvbiBWZShrZSxBZSxf''@;'; put 'put ''dCl7dmFyIG50PXRoaXM7KGZ1bmN0aW9uIE8oVmUsa2Upe2lmKCEoVmUgaW5zdGFuY2VvZiBrZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLFZlKSxBZS5mb3JFYWNoKGZ1bmN0aW9uKFFlKXtRZSBpbiBrZSYmKG50W1Fl''@;'; put 'put ''XT12b2lkIDAhPT1fdCYmInN0cmluZyI9PXR5cGVvZiBfdFtRZV0mJmxlKGtlW1FlXSkmJlRlKGtlW1FlXSxfdFtRZV0pP190W1FlXTprZVtRZV0pfSl9KTtmdW5jdGlvbiB4ZShWZSxrZSxBZSxfdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGtlKXtpZihsZShrZSkpcmV0dXJuIFRlKGtlLFZl''@;'; put 'put ''KTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgSygiZXhwZWN0ZWQiLFsiRnVuY3Rpb24iLCJSZWdFeHAiXSxrZSk7aWYoIm9iamVjdCIhPT1nKFZlKXx8bnVsbD09PVZlKXt2YXIgbnQ9bmV3IHEoe2FjdHVhbDpWZSxleHBlY3RlZDprZSxtZXNzYWdlOkFlLG9wZXJhdG9yOiJk''@;'; put 'put ''ZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpfdH0pO3Rocm93IG50Lm9wZXJhdG9yPV90Lm5hbWUsbnR9dmFyIFFlPU9iamVjdC5rZXlzKGtlKTtpZihrZSBpbnN0YW5jZW9mIEVycm9yKVFlLnB1c2goIm5hbWUiLCJtZXNzYWdlIik7ZWxzZSBpZigwPT09UWUubGVuZ3RoKXRocm93IG5l''@;'; put 'put ''dyBVKCJlcnJvciIsa2UsIm1heSBub3QgYmUgYW4gZW1wdHkgb2JqZWN0Iik7cmV0dXJuIHZvaWQgMD09PWplJiZDKCksUWUuZm9yRWFjaChmdW5jdGlvbih1bil7InN0cmluZyI9PXR5cGVvZiBWZVt1bl0mJmxlKGtlW3VuXSkmJlRlKGtlW3VuXSxWZVt1bl0pfHxmdW5jdGlvbiBvdChWZSxr''@;'; put 'put ''ZSxBZSxfdCxudCxRZSl7aWYoIShBZSBpbiBWZSl8fCFWKFZlW0FlXSxrZVtBZV0pKXtpZighX3Qpe3ZhciB1bj1uZXcgSmUoVmUsbnQpLHl0PW5ldyBKZShrZSxudCxWZSksTXQ9bmV3IHEoe2FjdHVhbDp1bixleHBlY3RlZDp5dCxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0''@;'; put 'put ''YXJ0Rm46UWV9KTt0aHJvdyBNdC5hY3R1YWw9VmUsTXQuZXhwZWN0ZWQ9a2UsTXQub3BlcmF0b3I9UWUubmFtZSxNdH1hZSh7YWN0dWFsOlZlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6UWUubmFtZSxzdGFja1N0YXJ0Rm46UWV9KX19KFZlLGtlLHVuLEFlLFFlLF90KX0pLCEw''@;'; put 'put ''fXJldHVybiB2b2lkIDAhPT1rZS5wcm90b3R5cGUmJlZlIGluc3RhbmNlb2Yga2V8fCFFcnJvci5pc1Byb3RvdHlwZU9mKGtlKSYmITA9PT1rZS5jYWxsKHt9LFZlKX1mdW5jdGlvbiB2ZShWZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFZlKXRocm93IG5ldyBLKCJmbiIsIkZ1bmN0aW9uIixW''@;'; put 'put ''ZSk7dHJ5e1ZlKCl9Y2F0Y2goa2Upe3JldHVybiBrZX1yZXR1cm4gQX1mdW5jdGlvbiBYZShWZSl7cmV0dXJuIGllKFZlKXx8bnVsbCE9PVZlJiYib2JqZWN0Ij09PWcoVmUpJiYiZnVuY3Rpb24iPT10eXBlb2YgVmUudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIFZlLmNhdGNofWZ1bmN0aW9u''@;'; put 'put ''IHplKFZlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciBrZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVmUpe2lmKCFYZShrZT1WZSgpKSl0aHJvdyBuZXcgVygiaW5zdGFuY2Ugb2YgUHJvbWlzZSIsInByb21pc2VGbiIsa2UpfWVsc2V7aWYoIVhlKFZlKSl0''@;'; put 'put ''aHJvdyBuZXcgSygicHJvbWlzZUZuIixbIkZ1bmN0aW9uIiwiUHJvbWlzZSJdLFZlKTtrZT1WZX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBrZX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gQX0pLmNhdGNoKGZ1bmN0aW9uKEFlKXtyZXR1cm4gQWV9''@;'; put 'put ''KX0pfWZ1bmN0aW9uIERlKFZlLGtlLEFlLF90KXtpZigic3RyaW5nIj09dHlwZW9mIEFlKXtpZig0PT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgSygiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLEFlKTtpZigib2JqZWN0Ij09PWcoa2UpJiZudWxs''@;'; put 'put ''IT09a2Upe2lmKGtlLm1lc3NhZ2U9PT1BZSl0aHJvdyBuZXcgTCgiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciBtZXNzYWdlICInLmNvbmNhdChrZS5tZXNzYWdlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSl9ZWxzZSBpZihrZT09PUFlKXRocm93IG5ldyBMKCJlcnJvci9t''@;'; put 'put ''ZXNzYWdlIiwnVGhlIGVycm9yICInLmNvbmNhdChrZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpO190PUFlLEFlPXZvaWQgMH1lbHNlIGlmKG51bGwhPUFlJiYib2JqZWN0IiE9PWcoQWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgQWUpdGhyb3cgbmV3IEsoImVycm9yIixbIk9i''@;'; put 'put ''amVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxBZSk7aWYoa2U9PT1BKXt2YXIgbnQ9IiI7QWUmJkFlLm5hbWUmJihudCs9IiAoIi5jb25jYXQoQWUubmFtZSwiKSIpKSxudCs9X3Q/IjogIi5jb25jYXQoX3QpOiIuIixhZSh7YWN0dWFsOnZvaWQgMCxleHBlY3RlZDpBZSxvcGVy''@;'; put 'put ''YXRvcjpWZS5uYW1lLG1lc3NhZ2U6Ik1pc3NpbmcgZXhwZWN0ZWQgIi5jb25jYXQoInJlamVjdHMiPT09VmUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KG50KSxzdGFja1N0YXJ0Rm46VmV9KX1pZihBZSYmIXhlKGtlLEFlLF90LFZlKSl0aHJvdyBrZX1mdW5jdGlvbiBG''@;'; put 'put ''ZShWZSxrZSxBZSxfdCl7aWYoa2UhPT1BKXtpZigic3RyaW5nIj09dHlwZW9mIEFlJiYoX3Q9QWUsQWU9dm9pZCAwKSwhQWV8fHhlKGtlLEFlKSl7dmFyIG50PV90PyI6ICIuY29uY2F0KF90KToiLiI7YWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxvcGVyYXRvcjpWZS5uYW1lLG1lc3NhZ2U6''@;'; put 'put ''IkdvdCB1bndhbnRlZCAiLmNvbmNhdCgiZG9lc05vdFJlamVjdCI9PT1WZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQobnQsIlxuIikrJ0FjdHVhbCBtZXNzYWdlOiAiJy5jb25jYXQoa2UmJmtlLm1lc3NhZ2UsJyInKSxzdGFja1N0YXJ0Rm46VmV9KX10aHJvdyBrZX19''@;'; put 'put ''ZnVuY3Rpb24gT2UoVmUsa2UsQWUsX3QsbnQpe2lmKCFsZShrZSkpdGhyb3cgbmV3IEsoInJlZ2V4cCIsIlJlZ0V4cCIsa2UpO3ZhciBRZT0ibWF0Y2giPT09bnQ7aWYoInN0cmluZyIhPXR5cGVvZiBWZXx8VGUoa2UsVmUpIT09UWUpe2lmKEFlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgQWU7''@;'; put 'put ''dmFyIHVuPSFBZTtBZT1BZXx8KCJzdHJpbmciIT10eXBlb2YgVmU/J1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlICcrIiIuY29uY2F0KGcoVmUpLCIgKCIpLmNvbmNhdChKKFZlKSwiKSIpOihRZT8iVGhlIGlucHV0IGRpZCBub3Qg''@;'; put 'put ''bWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAiOiJUaGUgaW5wdXQgd2FzIGV4cGVjdGVkIHRvIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uICIpKyIiLmNvbmNhdChKKGtlKSwiLiBJbnB1dDpcblxuIikuY29uY2F0KEooVmUpLCJcbiIpKTt2YXIgeXQ9bmV3IHEoe2FjdHVh''@;'; put 'put ''bDpWZSxleHBlY3RlZDprZSxtZXNzYWdlOkFlLG9wZXJhdG9yOm50LHN0YWNrU3RhcnRGbjpfdH0pO3Rocm93IHl0LmdlbmVyYXRlZE1lc3NhZ2U9dW4seXR9fWZ1bmN0aW9uIEllKCl7Zm9yKHZhciBWZT1hcmd1bWVudHMubGVuZ3RoLGtlPW5ldyBBcnJheShWZSksQWU9MDtBZTxWZTtBZSsr''@;'; put 'put ''KWtlW0FlXT1hcmd1bWVudHNbQWVdO3NlLmFwcGx5KHZvaWQgMCxbSWUsa2UubGVuZ3RoXS5jb25jYXQoa2UpKX1tLnRocm93cz1mdW5jdGlvbiBWZShrZSl7Zm9yKHZhciBBZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShBZT4xP0FlLTE6MCksbnQ9MTtudDxBZTtudCsrKV90W250''@;'; put 'put ''LTFdPWFyZ3VtZW50c1tudF07RGUuYXBwbHkodm9pZCAwLFtWZSx2ZShrZSldLmNvbmNhdChfdCkpfSxtLnJlamVjdHM9ZnVuY3Rpb24gVmUoa2Upe2Zvcih2YXIgQWU9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoQWU+MT9BZS0xOjApLG50PTE7bnQ8QWU7bnQrKylfdFtudC0xXT1h''@;'; put 'put ''cmd1bWVudHNbbnRdO3JldHVybiB6ZShrZSkudGhlbihmdW5jdGlvbihRZSl7cmV0dXJuIERlLmFwcGx5KHZvaWQgMCxbVmUsUWVdLmNvbmNhdChfdCkpfSl9LG0uZG9lc05vdFRocm93PWZ1bmN0aW9uIFZlKGtlKXtmb3IodmFyIEFlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KEFl''@;'; put 'put ''PjE/QWUtMTowKSxudD0xO250PEFlO250KyspX3RbbnQtMV09YXJndW1lbnRzW250XTtGZS5hcHBseSh2b2lkIDAsW1ZlLHZlKGtlKV0uY29uY2F0KF90KSl9LG0uZG9lc05vdFJlamVjdD1mdW5jdGlvbiBWZShrZSl7Zm9yKHZhciBBZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShB''@;'; put 'put ''ZT4xP0FlLTE6MCksbnQ9MTtudDxBZTtudCsrKV90W250LTFdPWFyZ3VtZW50c1tudF07cmV0dXJuIHplKGtlKS50aGVuKGZ1bmN0aW9uKFFlKXtyZXR1cm4gRmUuYXBwbHkodm9pZCAwLFtWZSxRZV0uY29uY2F0KF90KSl9KX0sbS5pZkVycm9yPWZ1bmN0aW9uIFZlKGtlKXtpZihudWxsIT1r''@;'; put 'put ''ZSl7dmFyIEFlPSJpZkVycm9yIGdvdCB1bndhbnRlZCBleGNlcHRpb246ICI7Im9iamVjdCI9PT1nKGtlKSYmInN0cmluZyI9PXR5cGVvZiBrZS5tZXNzYWdlP0FlKz0wPT09a2UubWVzc2FnZS5sZW5ndGgmJmtlLmNvbnN0cnVjdG9yP2tlLmNvbnN0cnVjdG9yLm5hbWU6a2UubWVzc2FnZTpB''@;'; put 'put ''ZSs9SihrZSk7dmFyIF90PW5ldyBxKHthY3R1YWw6a2UsZXhwZWN0ZWQ6bnVsbCxvcGVyYXRvcjoiaWZFcnJvciIsbWVzc2FnZTpBZSxzdGFja1N0YXJ0Rm46VmV9KSxudD1rZS5zdGFjaztpZigic3RyaW5nIj09dHlwZW9mIG50KXt2YXIgUWU9bnQuc3BsaXQoIlxuIik7UWUuc2hpZnQoKTtm''@;'; put 'put ''b3IodmFyIHVuPV90LnN0YWNrLnNwbGl0KCJcbiIpLHl0PTA7eXQ8UWUubGVuZ3RoO3l0Kyspe3ZhciBNdD11bi5pbmRleE9mKFFlW3l0XSk7aWYoLTEhPT1NdCl7dW49dW4uc2xpY2UoMCxNdCk7YnJlYWt9fV90LnN0YWNrPSIiLmNvbmNhdCh1bi5qb2luKCJcbiIpLCJcbiIpLmNvbmNhdChR''@;'; put 'put ''ZS5qb2luKCJcbiIpKX10aHJvdyBfdH19LG0ubWF0Y2g9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe09lKGtlLEFlLF90LFZlLCJtYXRjaCIpfSxtLmRvZXNOb3RNYXRjaD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7T2Uoa2UsQWUsX3QsVmUsImRvZXNOb3RNYXRjaCIpfSxtLnN0cmljdD1tZShJZSxt''@;'; put 'put ''LHtlcXVhbDptLnN0cmljdEVxdWFsLGRlZXBFcXVhbDptLmRlZXBTdHJpY3RFcXVhbCxub3RFcXVhbDptLm5vdFN0cmljdEVxdWFsLG5vdERlZXBFcXVhbDptLm5vdERlZXBTdHJpY3RFcXVhbH0pLG0uc3RyaWN0LnN0cmljdD1tLnN0cmljdH0sNTk2MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST15KDQxNTUpO2Z1bmN0aW9uIF8oQSxhZSl7dmFyIHRlPU9iamVjdC5rZXlzKEEpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBzZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKEEpO2FlJiYoc2U9c2UuZmlsdGVyKGZ1bmN0aW9uKHdlKXtyZXR1cm4g''@;'; put 'put ''T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihBLHdlKS5lbnVtZXJhYmxlfSkpLHRlLnB1c2guYXBwbHkodGUsc2UpfXJldHVybiB0ZX1mdW5jdGlvbiBnKEEpe2Zvcih2YXIgYWU9MTthZTxhcmd1bWVudHMubGVuZ3RoO2FlKyspe3ZhciB0ZT1udWxsIT1hcmd1bWVudHNbYWVdP2Fy''@;'; put 'put ''Z3VtZW50c1thZV06e307YWUlMj9fKE9iamVjdCh0ZSksITApLmZvckVhY2goZnVuY3Rpb24oc2Upe0IoQSxzZSx0ZVtzZV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y''@;'; put 'put ''cyh0ZSkpOl8oT2JqZWN0KHRlKSkuZm9yRWFjaChmdW5jdGlvbihzZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsc2UsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0ZSxzZSkpfSl9cmV0dXJuIEF9ZnVuY3Rpb24gQihBLGFlLHRlKXtyZXR1cm4oYWU9TyhhZSkpaW4gQT9PYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoQSxhZSx7dmFsdWU6dGUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpBW2FlXT10ZSxBfWZ1bmN0aW9uIFAoQSxhZSl7Zm9yKHZhciB0ZT0wO3RlPGFlLmxlbmd0aDt0ZSsrKXt2YXIgc2U9YWVbdGVdO3NlLmVudW1lcmFibGU9''@;'; put 'put ''c2UuZW51bWVyYWJsZXx8ITEsc2UuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBzZSYmKHNlLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxPKHNlLmtleSksc2UpfX1mdW5jdGlvbiBPKEEpe3ZhciBhZT1mdW5jdGlvbiB6KEEsYWUpe2lmKCJvYmplY3QiIT09aWUoQSl8''@;'; put 'put ''fG51bGw9PT1BKXJldHVybiBBO3ZhciB0ZT1BW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09dGUpe3ZhciBzZT10ZS5jYWxsKEEsYWV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1pZShzZSkpcmV0dXJuIHNlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVz''@;'; put 'put ''dCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09YWU/U3RyaW5nOk51bWJlcikoQSl9KEEsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09aWUoYWUpP2FlOlN0cmluZyhhZSl9ZnVuY3Rpb24gSyhBLGFlKXtpZihhZSYmKCJvYmplY3QiPT09aWUoYWUpfHwi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgYWUpKXJldHVybiBhZTtpZih2b2lkIDAhPT1hZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBVKEEpfWZ1bmN0aW9uIFUoQSl7aWYodm9pZCAwPT09''@;'; put 'put ''QSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBBfWZ1bmN0aW9uIFcoQSl7dmFyIGFlPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lkIDA7cmV0dXJuIFc9''@;'; put 'put ''ZnVuY3Rpb24oc2Upe2lmKG51bGw9PT1zZXx8IWZ1bmN0aW9uIGVlKEEpe3JldHVybi0xIT09RnVuY3Rpb24udG9TdHJpbmcuY2FsbChBKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIil9KHNlKSlyZXR1cm4gc2U7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHNlKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7aWYodHlwZW9mIGFlPCJ1Iil7aWYoYWUuaGFzKHNlKSlyZXR1cm4gYWUuZ2V0KHNlKTthZS5zZXQoc2Usd2UpfWZ1bmN0aW9uIHdlKCl7cmV0dXJuIFkoc2UsYXJndW1lbnRzLG5lKHRoaXMpLmNv''@;'; put 'put ''bnN0cnVjdG9yKX1yZXR1cm4gd2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc2UucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6d2UsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksSih3ZSxzZSl9LFcoQSl9ZnVuY3Rpb24gWShBLGFlLHRlKXtyZXR1''@;'; put 'put ''cm4oWT1xKCk/UmVmbGVjdC5jb25zdHJ1Y3QuYmluZCgpOmZ1bmN0aW9uKHdlLFVlLEplKXt2YXIgb3Q9W251bGxdO290LnB1c2guYXBwbHkob3QsVWUpO3ZhciB2ZT1uZXcoRnVuY3Rpb24uYmluZC5hcHBseSh3ZSxvdCkpO3JldHVybiBKZSYmSih2ZSxKZS5wcm90b3R5cGUpLHZlfSkuYXBw''@;'; put 'put ''bHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIHEoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnBy''@;'; put 'put ''b3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gSihBLGFlKXtyZXR1cm4oSj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5j''@;'; put 'put ''dGlvbihzZSx3ZSl7cmV0dXJuIHNlLl9fcHJvdG9fXz13ZSxzZX0pKEEsYWUpfWZ1bmN0aW9uIG5lKEEpe3JldHVybihuZT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0ZSl7cmV0dXJuIHRlLl9fcHJvdG9fX3x8T2JqZWN0Lmdl''@;'; put 'put ''dFByb3RvdHlwZU9mKHRlKX0pKEEpfWZ1bmN0aW9uIGllKEEpe3JldHVybihpZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihhZSl7cmV0dXJuIHR5cGVvZiBhZX06ZnVuY3Rpb24oYWUpe3JldHVybiBhZSYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYWUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmFlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgYWV9KShBKX12YXIgbWU9eSg5NTM5KS5pbnNwZWN0LFRlPXkoMjEzNikuY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEU7ZnVuY3Rpb24g''@;'; put 'put ''U2UoQSxhZSx0ZSl7cmV0dXJuKHZvaWQgMD09PXRlfHx0ZT5BLmxlbmd0aCkmJih0ZT1BLmxlbmd0aCksQS5zdWJzdHJpbmcodGUtYWUubGVuZ3RoLHRlKT09PWFlfXZhciBWPSIiLHA9IiIsYj0iIix4PSIiLEM9e2RlZXBTdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmlj''@;'; put 'put ''dGx5IGRlZXAtZXF1YWw6IixzdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGVxdWFsOiIsc3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsZGVlcEVxdWFsOiJFeHBlY3RlZCB2''@;'; put 'put ''YWx1ZXMgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsOiIsZXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGVxdWFsOiIsbm90RGVlcFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbCB0bzonLG5vdFN0cmljdEVxdWFs''@;'; put 'put ''OidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBzdHJpY3RseSB1bmVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLG5vdERlZXBFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgbm90''@;'; put 'put ''IHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbCB0bzonLG5vdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBsb29zZWx5IHVuZXF1YWwgdG86Jyxub3RJZGVudGljYWw6IlZhbHVlcyBpZGVudGljYWwgYnV0IG5vdCByZWZlcmVuY2UtZXF1YWw6In07ZnVuY3Rpb24gSChBKXt2YXIgYWU9''@;'; put 'put ''T2JqZWN0LmtleXMoQSksdGU9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoQSkpO3JldHVybiBhZS5mb3JFYWNoKGZ1bmN0aW9uKHNlKXt0ZVtzZV09QVtzZV19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGUsIm1lc3NhZ2UiLHt2YWx1ZTpBLm1lc3NhZ2V9KSx0ZX1mdW5j''@;'; put 'put ''dGlvbiBqKEEpe3JldHVybiBtZShBLHtjb21wYWN0OiExLGN1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MWUzLG1heEFycmF5TGVuZ3RoOjEvMCxzaG93SGlkZGVuOiExLGJyZWFrTGVuZ3RoOjEvMCxzaG93UHJveHk6ITEsc29ydGVkOiEwLGdldHRlcnM6ITB9KX12YXIgbT1mdW5jdGlvbihBLGFl''@;'; put 'put ''KXshZnVuY3Rpb24gTihBLGFlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYWUmJm51bGwhPT1hZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYWUmJmFlLnBy''@;'; put 'put ''b3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOkEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGFlJiZKKEEsYWUpfShzZSxBKTt2YXIgdGU9ZnVuY3Rpb24gTChBKXt2YXIgYWU9cSgpO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbigpe3ZhciB3ZSxzZT1uZShBKTtpZihhZSl7dmFyIFVlPW5lKHRoaXMpLmNvbnN0cnVjdG9yO3dlPVJlZmxlY3QuY29uc3RydWN0KHNlLGFyZ3VtZW50cyxVZSl9ZWxzZSB3ZT1zZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIEsodGhpcyx3ZSl9fShzZSk7ZnVu''@;'; put 'put ''Y3Rpb24gc2Uod2Upe3ZhciBVZTtpZihmdW5jdGlvbiB3KEEsYWUpe2lmKCEoQSBpbnN0YW5jZW9mIGFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxzZSksIm9iamVjdCIhPT1pZSh3ZSl8fG51bGw9PT13ZSl0aHJvdyBu''@;'; put 'put ''ZXcgVGUoIm9wdGlvbnMiLCJPYmplY3QiLHdlKTt2YXIgSmU9d2UubWVzc2FnZSxvdD13ZS5vcGVyYXRvcix4ZT13ZS5zdGFja1N0YXJ0Rm4sdmU9d2UuYWN0dWFsLFhlPXdlLmV4cGVjdGVkLHplPUVycm9yLnN0YWNrVHJhY2VMaW1pdDtpZihFcnJvci5zdGFja1RyYWNlTGltaXQ9MCxudWxs''@;'; put 'put ''IT1KZSlVZT10ZS5jYWxsKHRoaXMsU3RyaW5nKEplKSk7ZWxzZSBpZihJLnN0ZGVyciYmSS5zdGRlcnIuaXNUVFkmJihJLnN0ZGVyciYmSS5zdGRlcnIuZ2V0Q29sb3JEZXB0aCYmMSE9PUkuc3RkZXJyLmdldENvbG9yRGVwdGgoKT8oVj0iXHgxYlszNG0iLHA9Ilx4MWJbMzJtIix4PSJceDFi''@;'; put 'put ''WzM5bSIsYj0iXHgxYlszMW0iKTooVj0iIixwPSIiLHg9IiIsYj0iIikpLCJvYmplY3QiPT09aWUodmUpJiZudWxsIT09dmUmJiJvYmplY3QiPT09aWUoWGUpJiZudWxsIT09WGUmJiJzdGFjayJpbiB2ZSYmdmUgaW5zdGFuY2VvZiBFcnJvciYmInN0YWNrImluIFhlJiZYZSBpbnN0YW5jZW9m''@;'; put 'put ''IEVycm9yJiYodmU9SCh2ZSksWGU9SChYZSkpLCJkZWVwU3RyaWN0RXF1YWwiPT09b3R8fCJzdHJpY3RFcXVhbCI9PT1vdClVZT10ZS5jYWxsKHRoaXMsZnVuY3Rpb24gRShBLGFlLHRlKXt2YXIgc2U9IiIsd2U9IiIsVWU9MCxKZT0iIixvdD0hMSx4ZT1qKEEpLHZlPXhlLnNwbGl0KCJcbiIp''@;'; put 'put ''LFhlPWooYWUpLnNwbGl0KCJcbiIpLHplPTAsRGU9IiI7aWYoInN0cmljdEVxdWFsIj09PXRlJiYib2JqZWN0Ij09PWllKEEpJiYib2JqZWN0Ij09PWllKGFlKSYmbnVsbCE9PUEmJm51bGwhPT1hZSYmKHRlPSJzdHJpY3RFcXVhbE9iamVjdCIpLDE9PT12ZS5sZW5ndGgmJjE9PT1YZS5sZW5n''@;'; put 'put ''dGgmJnZlWzBdIT09WGVbMF0pe3ZhciBGZT12ZVswXS5sZW5ndGgrWGVbMF0ubGVuZ3RoO2lmKEZlPD0xMCl7aWYoISgib2JqZWN0Ij09PWllKEEpJiZudWxsIT09QXx8Im9iamVjdCI9PT1pZShhZSkmJm51bGwhPT1hZXx8MD09PUEmJjA9PT1hZSkpcmV0dXJuIiIuY29uY2F0KENbdGVdLCJc''@;'; put 'put ''blxuIikrIiIuY29uY2F0KHZlWzBdLCIgIT09ICIpLmNvbmNhdChYZVswXSwiXG4iKX1lbHNlIGlmKCJzdHJpY3RFcXVhbE9iamVjdCIhPT10ZSYmRmU8KEkuc3RkZXJyJiZJLnN0ZGVyci5pc1RUWT9JLnN0ZGVyci5jb2x1bW5zOjgwKSl7Zm9yKDt2ZVswXVt6ZV09PT1YZVswXVt6ZV07KXpl''@;'; put 'put ''Kys7emU+MiYmKERlPSJcbiAgIi5jb25jYXQoZnVuY3Rpb24gamUoQSxhZSl7aWYoYWU9TWF0aC5mbG9vcihhZSksMD09QS5sZW5ndGh8fDA9PWFlKXJldHVybiIiO3ZhciB0ZT1BLmxlbmd0aCphZTtmb3IoYWU9TWF0aC5mbG9vcihNYXRoLmxvZyhhZSkvTWF0aC5sb2coMikpO2FlOylBKz1B''@;'; put 'put ''LGFlLS07cmV0dXJuIEErQS5zdWJzdHJpbmcoMCx0ZS1BLmxlbmd0aCl9KCIgIix6ZSksIl4iKSx6ZT0wKX19Zm9yKHZhciBJZT12ZVt2ZS5sZW5ndGgtMV0sVmU9WGVbWGUubGVuZ3RoLTFdO0llPT09VmUmJih6ZSsrPDI/SmU9IlxuICAiLmNvbmNhdChJZSkuY29uY2F0KEplKTpzZT1JZSx2''@;'; put 'put ''ZS5wb3AoKSxYZS5wb3AoKSwwIT09dmUubGVuZ3RoJiYwIT09WGUubGVuZ3RoKTspSWU9dmVbdmUubGVuZ3RoLTFdLFZlPVhlW1hlLmxlbmd0aC0xXTt2YXIga2U9TWF0aC5tYXgodmUubGVuZ3RoLFhlLmxlbmd0aCk7aWYoMD09PWtlKXt2YXIgQWU9eGUuc3BsaXQoIlxuIik7aWYoQWUubGVu''@;'; put 'put ''Z3RoPjMwKWZvcihBZVsyNl09IiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KTtBZS5sZW5ndGg+Mjc7KUFlLnBvcCgpO3JldHVybiIiLmNvbmNhdChDLm5vdElkZW50aWNhbCwiXG5cbiIpLmNvbmNhdChBZS5qb2luKCJcbiIpLCJcbiIpfXplPjMmJihKZT0iXG4iLmNvbmNhdChWLCIuLi4i''@;'; put 'put ''KS5jb25jYXQoeCkuY29uY2F0KEplKSxvdD0hMCksIiIhPT1zZSYmKEplPSJcbiAgIi5jb25jYXQoc2UpLmNvbmNhdChKZSksc2U9IiIpO3ZhciBfdD0wLG50PUNbdGVdKyJcbiIuY29uY2F0KHAsIisgYWN0dWFsIikuY29uY2F0KHgsIiAiKS5jb25jYXQoYiwiLSBleHBlY3RlZCIpLmNvbmNh''@;'; put 'put ''dCh4KSxRZT0iICIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4LCIgTGluZXMgc2tpcHBlZCIpO2Zvcih6ZT0wO3plPGtlO3plKyspe3ZhciB1bj16ZS1VZTtpZih2ZS5sZW5ndGg8emUrMSl1bj4xJiZ6ZT4yJiYodW4+ND8od2UrPSJcbiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KSxvdD0h''@;'; put 'put ''MCk6dW4+MyYmKHdlKz0iXG4gICIuY29uY2F0KFhlW3plLTJdKSxfdCsrKSx3ZSs9IlxuICAiLmNvbmNhdChYZVt6ZS0xXSksX3QrKyksVWU9emUsc2UrPSJcbiIuY29uY2F0KGIsIi0iKS5jb25jYXQoeCwiICIpLmNvbmNhdChYZVt6ZV0pLF90Kys7ZWxzZSBpZihYZS5sZW5ndGg8emUrMSl1''@;'; put 'put ''bj4xJiZ6ZT4yJiYodW4+ND8od2UrPSJcbiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KSxvdD0hMCk6dW4+MyYmKHdlKz0iXG4gICIuY29uY2F0KHZlW3plLTJdKSxfdCsrKSx3ZSs9IlxuICAiLmNvbmNhdCh2ZVt6ZS0xXSksX3QrKyksVWU9emUsd2UrPSJcbiIuY29uY2F0KHAsIisiKS5j''@;'; put 'put ''b25jYXQoeCwiICIpLmNvbmNhdCh2ZVt6ZV0pLF90Kys7ZWxzZXt2YXIgeXQ9WGVbemVdLE10PXZlW3plXSxEdD1NdCE9PXl0JiYoIVNlKE10LCIsIil8fE10LnNsaWNlKDAsLTEpIT09eXQpO0R0JiZTZSh5dCwiLCIpJiZ5dC5zbGljZSgwLC0xKT09PU10JiYoRHQ9ITEsTXQrPSIsIiksRHQ/''@;'; put 'put ''KHVuPjEmJnplPjImJih1bj40Pyh3ZSs9IlxuIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpLG90PSEwKTp1bj4zJiYod2UrPSJcbiAgIi5jb25jYXQodmVbemUtMl0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KHZlW3plLTFdKSxfdCsrKSxVZT16ZSx3ZSs9IlxuIi5jb25jYXQocCwiKyIp''@;'; put 'put ''LmNvbmNhdCh4LCIgIikuY29uY2F0KE10KSxzZSs9IlxuIi5jb25jYXQoYiwiLSIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHl0KSxfdCs9Mik6KHdlKz1zZSxzZT0iIiwoMT09PXVufHwwPT09emUpJiYod2UrPSJcbiAgIi5jb25jYXQoTXQpLF90KyspKX1pZihfdD4yMCYmemU8a2UtMilyZXR1''@;'; put 'put ''cm4iIi5jb25jYXQobnQpLmNvbmNhdChRZSwiXG4iKS5jb25jYXQod2UsIlxuIikuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KS5jb25jYXQoc2UsIlxuIikrIiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KX1yZXR1cm4iIi5jb25jYXQobnQpLmNvbmNhdChvdD9RZToiIiwiXG4iKS5jb25j''@;'; put 'put ''YXQod2UpLmNvbmNhdChzZSkuY29uY2F0KEplKS5jb25jYXQoRGUpfSh2ZSxYZSxvdCkpO2Vsc2UgaWYoIm5vdERlZXBTdHJpY3RFcXVhbCI9PT1vdHx8Im5vdFN0cmljdEVxdWFsIj09PW90KXt2YXIgRGU9Q1tvdF0sRmU9aih2ZSkuc3BsaXQoIlxuIik7aWYoIm5vdFN0cmljdEVxdWFsIj09''@;'; put 'put ''PW90JiYib2JqZWN0Ij09PWllKHZlKSYmbnVsbCE9PXZlJiYoRGU9Qy5ub3RTdHJpY3RFcXVhbE9iamVjdCksRmUubGVuZ3RoPjMwKWZvcihGZVsyNl09IiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KTtGZS5sZW5ndGg+Mjc7KUZlLnBvcCgpO1VlPXRlLmNhbGwodGhpcywxPT09RmUubGVu''@;'; put 'put ''Z3RoPyIiLmNvbmNhdChEZSwiICIpLmNvbmNhdChGZVswXSk6IiIuY29uY2F0KERlLCJcblxuIikuY29uY2F0KEZlLmpvaW4oIlxuIiksIlxuIikpfWVsc2V7dmFyIE9lPWoodmUpLEllPSIiLFZlPUNbb3RdOyJub3REZWVwRXF1YWwiPT09b3R8fCJub3RFcXVhbCI9PT1vdD8oT2U9IiIuY29u''@;'; put 'put ''Y2F0KENbb3RdLCJcblxuIikuY29uY2F0KE9lKSkubGVuZ3RoPjEwMjQmJihPZT0iIi5jb25jYXQoT2Uuc2xpY2UoMCwxMDIxKSwiLi4uIikpOihJZT0iIi5jb25jYXQoaihYZSkpLE9lLmxlbmd0aD41MTImJihPZT0iIi5jb25jYXQoT2Uuc2xpY2UoMCw1MDkpLCIuLi4iKSksSWUubGVuZ3Ro''@;'; put 'put ''PjUxMiYmKEllPSIiLmNvbmNhdChJZS5zbGljZSgwLDUwOSksIi4uLiIpKSwiZGVlcEVxdWFsIj09PW90fHwiZXF1YWwiPT09b3Q/T2U9IiIuY29uY2F0KFZlLCJcblxuIikuY29uY2F0KE9lLCJcblxuc2hvdWxkIGVxdWFsXG5cbiIpOkllPSIgIi5jb25jYXQob3QsIiAiKS5jb25jYXQoSWUp''@;'; put 'put ''KSxVZT10ZS5jYWxsKHRoaXMsIiIuY29uY2F0KE9lKS5jb25jYXQoSWUpKX1yZXR1cm4gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PXplLFVlLmdlbmVyYXRlZE1lc3NhZ2U9IUplLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVKFVlKSwibmFtZSIse3ZhbHVlOiJBc3NlcnRpb25FcnJvciBbRVJSX0FT''@;'; put 'put ''U0VSVElPTl0iLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksVWUuY29kZT0iRVJSX0FTU0VSVElPTiIsVWUuYWN0dWFsPXZlLFVlLmV4cGVjdGVkPVhlLFVlLm9wZXJhdG9yPW90LEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tU''@;'; put 'put ''cmFjZShVKFVlKSx4ZSksVWUubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLEsoVWUpfXJldHVybiBmdW5jdGlvbiBGKEEsYWUsdGUpe2FlJiZQKEEucHJvdG90eXBlLGFlKSx0ZSYmUChBLHRlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oc2UsW3tr''@;'; put 'put ''ZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiIiLmNvbmNhdCh0aGlzLm5hbWUsIiBbIikuY29uY2F0KHRoaXMuY29kZSwiXTogIikuY29uY2F0KHRoaXMubWVzc2FnZSl9fSx7a2V5OmFlLHZhbHVlOmZ1bmN0aW9uKFVlLEplKXtyZXR1cm4gbWUodGhpcyxnKGcoe30sSmUp''@;'; put 'put ''LHt9LHtjdXN0b21JbnNwZWN0OiExLGRlcHRoOjB9KSl9fV0pLHNlfShXKEVycm9yKSxtZS5jdXN0b20pO3VlLmV4cG9ydHM9bX0sMjEzNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKG1lKXtyZXR1cm4oST0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihfZSl7cmV0dXJuIHR5cGVvZiBfZX06ZnVuY3Rpb24oX2Upe3JldHVybiBfZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmX2UuY29uc3RydWN0b3I9PT1TeW1ib2wmJl9lIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBl''@;'; put 'put ''b2YgX2V9KShtZSl9ZnVuY3Rpb24gXyhtZSxfZSl7Zm9yKHZhciBUZT0wO1RlPF9lLmxlbmd0aDtUZSsrKXt2YXIgU2U9X2VbVGVdO1NlLmVudW1lcmFibGU9U2UuZW51bWVyYWJsZXx8ITEsU2UuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBTZSYmKFNlLndyaXRhYmxlPSEwKSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkobWUsQihTZS5rZXkpLFNlKX19ZnVuY3Rpb24gQihtZSl7dmFyIF9lPWZ1bmN0aW9uIHcobWUsX2Upe2lmKCJvYmplY3QiIT09SShtZSl8fG51bGw9PT1tZSlyZXR1cm4gbWU7dmFyIFRlPW1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09VGUpe3ZhciBT''@;'; put 'put ''ZT1UZS5jYWxsKG1lLF9lfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09SShTZSkpcmV0dXJuIFNlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09X2U/U3RyaW5nOk51bWJlcikobWUp''@;'; put 'put ''fShtZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1JKF9lKT9fZTpTdHJpbmcoX2UpfWZ1bmN0aW9uIE8obWUsX2Upe3JldHVybihPPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKFNlLGplKXtyZXR1cm4gU2UuX19wcm90b19f''@;'; put 'put ''PWplLFNlfSkobWUsX2UpfWZ1bmN0aW9uIFUobWUpe3JldHVybihVPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKFRlKXtyZXR1cm4gVGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoVGUpfSkobWUpfXZhciBZLHEs''@;'; put 'put ''Vz17fTtmdW5jdGlvbiBlZShtZSxfZSxUZSl7VGV8fChUZT1FcnJvcik7dmFyIGplPWZ1bmN0aW9uKFYpeyFmdW5jdGlvbiBGKG1lLF9lKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgX2UmJm51bGwhPT1fZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVy''@;'; put 'put ''IGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO21lLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF9lJiZfZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTptZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lLCJwcm90b3R5cGUiLHt3cml0''@;'; put 'put ''YWJsZTohMX0pLF9lJiZPKG1lLF9lKX0oYixWKTt2YXIgcD1mdW5jdGlvbiB6KG1lKXt2YXIgX2U9ZnVuY3Rpb24gSygpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgamUsU2U9VShtZSk7aWYoX2Up''@;'; put 'put ''e3ZhciBWPVUodGhpcykuY29uc3RydWN0b3I7amU9UmVmbGVjdC5jb25zdHJ1Y3QoU2UsYXJndW1lbnRzLFYpfWVsc2UgamU9U2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBOKG1lLF9lKXtpZihfZSYmKCJvYmplY3QiPT09SShfZSl8fCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBfZSkpcmV0dXJuIF9lO2lmKHZvaWQgMCE9PV9lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIEwobWUpe2lmKHZvaWQgMD09PW1lKXRocm93IG5ldyBSZWZlcmVu''@;'; put 'put ''Y2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIG1lfShtZSl9KHRoaXMsamUpfX0oYik7ZnVuY3Rpb24gYih4LEMsVCl7dmFyIEg7cmV0dXJuIGZ1bmN0aW9uIFAobWUsX2Upe2lmKCEobWUgaW5zdGFuY2Vv''@;'; put 'put ''ZiBfZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYiksSD1wLmNhbGwodGhpcyxmdW5jdGlvbiBTZShWLHAsYil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBfZT9fZTpfZShWLHAsYil9KHgsQyxUKSksSC5jb2RlPW1lLEh9''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIGcobWUsX2UsVGUpe3JldHVybiBfZSYmXyhtZS5wcm90b3R5cGUsX2UpLFRlJiZfKG1lLFRlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbWV9KGIpfShUZSk7V1ttZV09amV9ZnVuY3Rpb24gSihtZSxfZSl7aWYo''@;'; put 'put ''QXJyYXkuaXNBcnJheShtZSkpe3ZhciBUZT1tZS5sZW5ndGg7cmV0dXJuIG1lPW1lLm1hcChmdW5jdGlvbihTZSl7cmV0dXJuIFN0cmluZyhTZSl9KSxUZT4yPyJvbmUgb2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQobWUuc2xpY2UoMCxUZS0xKS5qb2luKCIsICIpLCIsIG9yICIpK21lW1Rl''@;'; put 'put ''LTFdOjI9PT1UZT8ib25lIG9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KG1lWzBdLCIgb3IgIikuY29uY2F0KG1lWzFdKToib2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQobWVbMF0pfXJldHVybiJvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChTdHJpbmcobWUpKX1lZSgiRVJSX0FNQklH''@;'; put 'put ''VU9VU19BUkdVTUVOVCIsJ1RoZSAiJXMiIGFyZ3VtZW50IGlzIGFtYmlndW91cy4gJXMnLFR5cGVFcnJvciksZWUoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihtZSxfZSxUZSl7dmFyIFNlLGplO2lmKHZvaWQgMD09PVkmJihZPXkoOTI4MikpLFkoInN0cmluZyI9PXR5cGVvZiBt''@;'; put 'put ''ZSwiJ25hbWUnIG11c3QgYmUgYSBzdHJpbmciKSwic3RyaW5nIj09dHlwZW9mIF9lJiZmdW5jdGlvbiBuZShtZSxfZSxUZSl7cmV0dXJuIG1lLnN1YnN0cighVGV8fFRlPDA/MDorVGUsX2UubGVuZ3RoKT09PV9lfShfZSwibm90ICIpPyhTZT0ibXVzdCBub3QgYmUiLF9lPV9lLnJlcGxhY2Uo''@;'; put 'put ''L15ub3QgLywiIikpOlNlPSJtdXN0IGJlIixmdW5jdGlvbiBpZShtZSxfZSxUZSl7cmV0dXJuKHZvaWQgMD09PVRlfHxUZT5tZS5sZW5ndGgpJiYoVGU9bWUubGVuZ3RoKSxtZS5zdWJzdHJpbmcoVGUtX2UubGVuZ3RoLFRlKT09PV9lfShtZSwiIGFyZ3VtZW50IikpamU9IlRoZSAiLmNvbmNh''@;'; put 'put ''dChtZSwiICIpLmNvbmNhdChTZSwiICIpLmNvbmNhdChKKF9lLCJ0eXBlIikpO2Vsc2V7dmFyIFY9ZnVuY3Rpb24gbGUobWUsX2UsVGUpe3JldHVybiJudW1iZXIiIT10eXBlb2YgVGUmJihUZT0wKSwhKFRlK19lLmxlbmd0aD5tZS5sZW5ndGgpJiYtMSE9PW1lLmluZGV4T2YoX2UsVGUpfSht''@;'; put 'put ''ZSwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtqZT0nVGhlICInLmNvbmNhdChtZSwnIiAnKS5jb25jYXQoViwiICIpLmNvbmNhdChTZSwiICIpLmNvbmNhdChKKF9lLCJ0eXBlIikpfXJldHVybiBqZSsiLiBSZWNlaXZlZCB0eXBlICIuY29uY2F0KEkoVGUpKX0sVHlwZUVycm9yKSxlZSgi''@;'; put 'put ''RVJSX0lOVkFMSURfQVJHX1ZBTFVFIixmdW5jdGlvbihtZSxfZSl7dmFyIFRlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiaXMgaW52YWxpZCI7dm9pZCAwPT09cSYmKHE9eSg5NTM5KSk7dmFyIFNlPXEuaW5zcGVjdChfZSk7cmV0dXJu''@;'; put 'put ''IFNlLmxlbmd0aD4xMjgmJihTZT0iIi5jb25jYXQoU2Uuc2xpY2UoMCwxMjgpLCIuLi4iKSksIlRoZSBhcmd1bWVudCAnIi5jb25jYXQobWUsIicgIikuY29uY2F0KFRlLCIuIFJlY2VpdmVkICIpLmNvbmNhdChTZSl9LFR5cGVFcnJvcixSYW5nZUVycm9yKSxlZSgiRVJSX0lOVkFMSURfUkVU''@;'; put 'put ''VVJOX1ZBTFVFIixmdW5jdGlvbihtZSxfZSxUZSl7dmFyIFNlO3JldHVybiBTZT1UZSYmVGUuY29uc3RydWN0b3ImJlRlLmNvbnN0cnVjdG9yLm5hbWU/Imluc3RhbmNlIG9mICIuY29uY2F0KFRlLmNvbnN0cnVjdG9yLm5hbWUpOiJ0eXBlICIuY29uY2F0KEkoVGUpKSwiRXhwZWN0ZWQgIi5j''@;'; put 'put ''b25jYXQobWUsJyB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSAiJykuY29uY2F0KF9lLCciJykrIiBmdW5jdGlvbiBidXQgZ290ICIuY29uY2F0KFNlLCIuIil9LFR5cGVFcnJvciksZWUoIkVSUl9NSVNTSU5HX0FSR1MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBtZT1hcmd1bWVudHMubGVuZ3RoLF9l''@;'; put 'put ''PW5ldyBBcnJheShtZSksVGU9MDtUZTxtZTtUZSsrKV9lW1RlXT1hcmd1bWVudHNbVGVdO3ZvaWQgMD09PVkmJihZPXkoOTI4MikpLFkoX2UubGVuZ3RoPjAsIkF0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIik7dmFyIFNlPSJUaGUgIixqZT1fZS5sZW5ndGg7c3dpdGNo''@;'; put 'put ''KF9lPV9lLm1hcChmdW5jdGlvbihWKXtyZXR1cm4nIicuY29uY2F0KFYsJyInKX0pLGplKXtjYXNlIDE6U2UrPSIiLmNvbmNhdChfZVswXSwiIGFyZ3VtZW50Iik7YnJlYWs7Y2FzZSAyOlNlKz0iIi5jb25jYXQoX2VbMF0sIiBhbmQgIikuY29uY2F0KF9lWzFdLCIgYXJndW1lbnRzIik7YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDpTZSs9X2Uuc2xpY2UoMCxqZS0xKS5qb2luKCIsICIpLFNlKz0iLCBhbmQgIi5jb25jYXQoX2VbamUtMV0sIiBhcmd1bWVudHMiKX1yZXR1cm4iIi5jb25jYXQoU2UsIiBtdXN0IGJlIHNwZWNpZmllZCIpfSxUeXBlRXJyb3IpLHVlLmV4cG9ydHMuY29kZXM9V30sOTE1ODoo''@;'; put 'put ''dWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKER0LGl0KXtyZXR1cm4gZnVuY3Rpb24gUChEdCl7aWYoQXJyYXkuaXNBcnJheShEdCkpcmV0dXJuIER0fShEdCl8fGZ1bmN0aW9uIHcoRHQsaXQpe3ZhciAkZT1udWxsPT1EdD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZEdFtTeW1i''@;'; put 'put ''b2wuaXRlcmF0b3JdfHxEdFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPSRlKXt2YXIgdHQsSGUsdXQscXQsUnQ9W10sUHQ9ITAsY2k9ITE7dHJ5e2lmKHV0PSgkZT0kZS5jYWxsKER0KSkubmV4dCwwPT09aXQpe2lmKE9iamVjdCgkZSkhPT0kZSlyZXR1cm47UHQ9ITF9ZWxzZSBmb3IoOyEoUHQ9''@;'; put 'put ''KHR0PXV0LmNhbGwoJGUpKS5kb25lKSYmKFJ0LnB1c2godHQudmFsdWUpLFJ0Lmxlbmd0aCE9PWl0KTtQdD0hMCk7fWNhdGNoKFF0KXtjaT0hMCxIZT1RdH1maW5hbGx5e3RyeXtpZighUHQmJm51bGwhPSRlLnJldHVybiYmKHF0PSRlLnJldHVybigpLE9iamVjdChxdCkhPT1xdCkpcmV0dXJu''@;'; put 'put ''fWZpbmFsbHl7aWYoY2kpdGhyb3cgSGV9fXJldHVybiBSdH19KER0LGl0KXx8ZnVuY3Rpb24gZyhEdCxpdCl7aWYoRHQpe2lmKCJzdHJpbmciPT10eXBlb2YgRHQpcmV0dXJuIEIoRHQsaXQpO3ZhciAkZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRHQpLnNsaWNlKDgsLTEpO2lm''@;'; put 'put ''KCJPYmplY3QiPT09JGUmJkR0LmNvbnN0cnVjdG9yJiYoJGU9RHQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT0kZXx8IlNldCI9PT0kZSlyZXR1cm4gQXJyYXkuZnJvbShEdCk7aWYoIkFyZ3VtZW50cyI9PT0kZXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQv''@;'; put 'put ''LnRlc3QoJGUpKXJldHVybiBCKER0LGl0KX19KER0LGl0KXx8ZnVuY3Rpb24gXygpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVj''@;'; put 'put ''dHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gQihEdCxpdCl7KG51bGw9PWl0fHxpdD5EdC5sZW5ndGgpJiYoaXQ9RHQubGVuZ3RoKTtmb3IodmFyICRlPTAsdHQ9bmV3IEFycmF5KGl0KTskZTxpdDskZSsrKXR0WyRlXT1EdFskZV07cmV0''@;'; put 'put ''dXJuIHR0fWZ1bmN0aW9uIEYoRHQpe3JldHVybihGPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGl0KXtyZXR1cm4gdHlwZW9mIGl0fTpmdW5jdGlvbihpdCl7cmV0dXJuIGl0JiYiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''U3ltYm9sJiZpdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmaXQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBpdH0pKER0KX12YXIgTz12b2lkIDAhPT0vYS9nLmZsYWdzLHo9ZnVuY3Rpb24oaXQpe3ZhciAkZT1bXTtyZXR1cm4gaXQuZm9yRWFjaChmdW5jdGlvbih0dCl7cmV0''@;'; put 'put ''dXJuICRlLnB1c2godHQpfSksJGV9LE49ZnVuY3Rpb24oaXQpe3ZhciAkZT1bXTtyZXR1cm4gaXQuZm9yRWFjaChmdW5jdGlvbih0dCxIZSl7cmV0dXJuICRlLnB1c2goW0hlLHR0XSl9KSwkZX0sTD1PYmplY3QuaXM/T2JqZWN0LmlzOnkoNjA5KSxLPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5''@;'; put 'put ''bWJvbHM/T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbigpe3JldHVybltdfSxVPU51bWJlci5pc05hTj9OdW1iZXIuaXNOYU46eSgzNjApO2Z1bmN0aW9uIFcoRHQpe3JldHVybiBEdC5jYWxsLmJpbmQoRHQpfXZhciBZPVcoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eSkscT1XKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUpLGVlPVcoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyksSj15KDk1MzkpLnR5cGVzLG5lPUouaXNBbnlBcnJheUJ1ZmZlcixpZT1KLmlzQXJyYXlCdWZmZXJWaWV3LGxlPUouaXNEYXRlLG1lPUouaXNNYXAs''@;'; put 'put ''X2U9Si5pc1JlZ0V4cCxUZT1KLmlzU2V0LFNlPUouaXNOYXRpdmVFcnJvcixqZT1KLmlzQm94ZWRQcmltaXRpdmUsVj1KLmlzTnVtYmVyT2JqZWN0LHA9Si5pc1N0cmluZ09iamVjdCxiPUouaXNCb29sZWFuT2JqZWN0LHg9Si5pc0JpZ0ludE9iamVjdCxDPUouaXNTeW1ib2xPYmplY3QsVD1K''@;'; put 'put ''LmlzRmxvYXQzMkFycmF5LEg9Si5pc0Zsb2F0NjRBcnJheTtmdW5jdGlvbiBqKER0KXtpZigwPT09RHQubGVuZ3RofHxEdC5sZW5ndGg+MTApcmV0dXJuITA7Zm9yKHZhciBpdD0wO2l0PER0Lmxlbmd0aDtpdCsrKXt2YXIgJGU9RHQuY2hhckNvZGVBdChpdCk7aWYoJGU8NDh8fCRlPjU3KXJl''@;'; put 'put ''dHVybiEwfXJldHVybiAxMD09PUR0Lmxlbmd0aCYmRHQ+PU1hdGgucG93KDIsMzIpfWZ1bmN0aW9uIEUoRHQpe3JldHVybiBPYmplY3Qua2V5cyhEdCkuZmlsdGVyKGopLmNvbmNhdChLKER0KS5maWx0ZXIoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5iaW5kKER0KSkp''@;'; put 'put ''fWZ1bmN0aW9uIG0oRHQsaXQpe2lmKER0PT09aXQpcmV0dXJuIDA7Zm9yKHZhciAkZT1EdC5sZW5ndGgsdHQ9aXQubGVuZ3RoLEhlPTAsdXQ9TWF0aC5taW4oJGUsdHQpO0hlPHV0OysrSGUpaWYoRHRbSGVdIT09aXRbSGVdKXskZT1EdFtIZV0sdHQ9aXRbSGVdO2JyZWFrfXJldHVybiAkZTx0''@;'; put 'put ''dD8tMTp0dDwkZT8xOjB9dmFyIHNlPTAsd2U9MSxVZT0yLEplPTM7ZnVuY3Rpb24gRGUoRHQsaXQsJGUsdHQpe2lmKER0PT09aXQpcmV0dXJuIDAhPT1EdHx8ISRlfHxMKER0LGl0KTtpZigkZSl7aWYoIm9iamVjdCIhPT1GKER0KSlyZXR1cm4ibnVtYmVyIj09dHlwZW9mIER0JiZVKER0KSYm''@;'; put 'put ''VShpdCk7aWYoIm9iamVjdCIhPT1GKGl0KXx8bnVsbD09PUR0fHxudWxsPT09aXR8fE9iamVjdC5nZXRQcm90b3R5cGVPZihEdCkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaXQpKXJldHVybiExfWVsc2V7aWYobnVsbD09PUR0fHwib2JqZWN0IiE9PUYoRHQpKXJldHVybihudWxsPT09aXR8''@;'; put 'put ''fCJvYmplY3QiIT09RihpdCkpJiZEdD09aXQ7aWYobnVsbD09PWl0fHwib2JqZWN0IiE9PUYoaXQpKXJldHVybiExfXZhciBIZT1lZShEdCk7aWYoSGUhPT1lZShpdCkpcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShEdCkpe2lmKER0Lmxlbmd0aCE9PWl0Lmxlbmd0aClyZXR1cm4hMTt2YXIg''@;'; put 'put ''cXQ9RShEdCksUnQ9RShpdCk7cmV0dXJuIHF0Lmxlbmd0aD09PVJ0Lmxlbmd0aCYmT2UoRHQsaXQsJGUsdHQsd2UscXQpfWlmKCJbb2JqZWN0IE9iamVjdF0iPT09SGUmJighbWUoRHQpJiZtZShpdCl8fCFUZShEdCkmJlRlKGl0KSkpcmV0dXJuITE7aWYobGUoRHQpKXtpZighbGUoaXQpfHxE''@;'; put 'put ''YXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoRHQpIT09RGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKGl0KSlyZXR1cm4hMX1lbHNlIGlmKF9lKER0KSl7aWYoIV9lKGl0KXx8IWZ1bmN0aW9uIG90KER0LGl0KXtyZXR1cm4gTz9EdC5zb3VyY2U9PT1pdC5zb3VyY2UmJkR0LmZsYWdzPT09''@;'; put 'put ''aXQuZmxhZ3M6UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKER0KT09PVJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdCl9KER0LGl0KSlyZXR1cm4hMX1lbHNlIGlmKFNlKER0KXx8RHQgaW5zdGFuY2VvZiBFcnJvcil7aWYoRHQubWVzc2FnZSE9PWl0Lm1lc3NhZ2V8fER0''@;'; put 'put ''Lm5hbWUhPT1pdC5uYW1lKXJldHVybiExfWVsc2V7aWYoaWUoRHQpKXtpZigkZXx8IVQoRHQpJiYhSChEdCkpe2lmKCFmdW5jdGlvbiB2ZShEdCxpdCl7cmV0dXJuIER0LmJ5dGVMZW5ndGg9PT1pdC5ieXRlTGVuZ3RoJiYwPT09bShuZXcgVWludDhBcnJheShEdC5idWZmZXIsRHQuYnl0ZU9m''@;'; put 'put ''ZnNldCxEdC5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheShpdC5idWZmZXIsaXQuYnl0ZU9mZnNldCxpdC5ieXRlTGVuZ3RoKSl9KER0LGl0KSlyZXR1cm4hMX1lbHNlIGlmKCFmdW5jdGlvbiB4ZShEdCxpdCl7aWYoRHQuYnl0ZUxlbmd0aCE9PWl0LmJ5dGVMZW5ndGgpcmV0dXJuITE7Zm9y''@;'; put 'put ''KHZhciAkZT0wOyRlPER0LmJ5dGVMZW5ndGg7JGUrKylpZihEdFskZV0hPT1pdFskZV0pcmV0dXJuITE7cmV0dXJuITB9KER0LGl0KSlyZXR1cm4hMTt2YXIgUHQ9RShEdCksY2k9RShpdCk7cmV0dXJuIFB0Lmxlbmd0aD09PWNpLmxlbmd0aCYmT2UoRHQsaXQsJGUsdHQsc2UsUHQpfWlmKFRl''@;'; put 'put ''KER0KSlyZXR1cm4hKCFUZShpdCl8fER0LnNpemUhPT1pdC5zaXplKSYmT2UoRHQsaXQsJGUsdHQsVWUpO2lmKG1lKER0KSlyZXR1cm4hKCFtZShpdCl8fER0LnNpemUhPT1pdC5zaXplKSYmT2UoRHQsaXQsJGUsdHQsSmUpO2lmKG5lKER0KSl7aWYoIWZ1bmN0aW9uIFhlKER0LGl0KXtyZXR1''@;'; put 'put ''cm4gRHQuYnl0ZUxlbmd0aD09PWl0LmJ5dGVMZW5ndGgmJjA9PT1tKG5ldyBVaW50OEFycmF5KER0KSxuZXcgVWludDhBcnJheShpdCkpfShEdCxpdCkpcmV0dXJuITF9ZWxzZSBpZihqZShEdCkmJiFmdW5jdGlvbiB6ZShEdCxpdCl7cmV0dXJuIFYoRHQpP1YoaXQpJiZMKE51bWJlci5wcm90''@;'; put 'put ''b3R5cGUudmFsdWVPZi5jYWxsKER0KSxOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCkpOnAoRHQpP3AoaXQpJiZTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChEdCk9PT1TdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCk6YihEdCk/YihpdCkmJkJvb2xlYW4ucHJv''@;'; put 'put ''dG90eXBlLnZhbHVlT2YuY2FsbChEdCk9PT1Cb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoaXQpOngoRHQpP3goaXQpJiZCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChEdCk9PT1CaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCk6QyhpdCkmJlN5bWJvbC5wcm90b3R5''@;'; put 'put ''cGUudmFsdWVPZi5jYWxsKER0KT09PVN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KX0oRHQsaXQpKXJldHVybiExfXJldHVybiBPZShEdCxpdCwkZSx0dCxzZSl9ZnVuY3Rpb24gRmUoRHQsaXQpe3JldHVybiBpdC5maWx0ZXIoZnVuY3Rpb24oJGUpe3JldHVybiBxKER0LCRlKX0p''@;'; put 'put ''fWZ1bmN0aW9uIE9lKER0LGl0LCRlLHR0LEhlLHV0KXtpZig1PT09YXJndW1lbnRzLmxlbmd0aCl7dXQ9T2JqZWN0LmtleXMoRHQpO3ZhciBxdD1PYmplY3Qua2V5cyhpdCk7aWYodXQubGVuZ3RoIT09cXQubGVuZ3RoKXJldHVybiExfWZvcih2YXIgUnQ9MDtSdDx1dC5sZW5ndGg7UnQrKylp''@;'; put 'put ''ZighWShpdCx1dFtSdF0pKXJldHVybiExO2lmKCRlJiY1PT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIFB0PUsoRHQpO2lmKDAhPT1QdC5sZW5ndGgpe3ZhciBjaT0wO2ZvcihSdD0wO1J0PFB0Lmxlbmd0aDtSdCsrKXt2YXIgUXQ9UHRbUnRdO2lmKHEoRHQsUXQpKXtpZighcShpdCxRdCkpcmV0''@;'; put 'put ''dXJuITE7dXQucHVzaChRdCksY2krK31lbHNlIGlmKHEoaXQsUXQpKXJldHVybiExfXZhciBzbj1LKGl0KTtpZihQdC5sZW5ndGghPT1zbi5sZW5ndGgmJkZlKGl0LHNuKS5sZW5ndGghPT1jaSlyZXR1cm4hMX1lbHNle3ZhciBSaT1LKGl0KTtpZigwIT09UmkubGVuZ3RoJiYwIT09RmUoaXQs''@;'; put 'put ''UmkpLmxlbmd0aClyZXR1cm4hMX19aWYoMD09PXV0Lmxlbmd0aCYmKEhlPT09c2V8fEhlPT09d2UmJjA9PT1EdC5sZW5ndGh8fDA9PT1EdC5zaXplKSlyZXR1cm4hMDtpZih2b2lkIDA9PT10dCl0dD17dmFsMTpuZXcgTWFwLHZhbDI6bmV3IE1hcCxwb3NpdGlvbjowfTtlbHNle3ZhciBobj10''@;'; put 'put ''dC52YWwxLmdldChEdCk7aWYodm9pZCAwIT09aG4pe3ZhciBmdD10dC52YWwyLmdldChpdCk7aWYodm9pZCAwIT09ZnQpcmV0dXJuIGhuPT09ZnR9dHQucG9zaXRpb24rK310dC52YWwxLnNldChEdCx0dC5wb3NpdGlvbiksdHQudmFsMi5zZXQoaXQsdHQucG9zaXRpb24pO3ZhciBPcj1mdW5j''@;'; put 'put ''dGlvbiB1bihEdCxpdCwkZSx0dCxIZSx1dCl7dmFyIHF0PTA7aWYodXQ9PT1VZSl7aWYoIWZ1bmN0aW9uIF90KER0LGl0LCRlLHR0KXtmb3IodmFyIEhlPW51bGwsdXQ9eihEdCkscXQ9MDtxdDx1dC5sZW5ndGg7cXQrKyl7dmFyIFJ0PXV0W3F0XTtpZigib2JqZWN0Ij09PUYoUnQpJiZudWxs''@;'; put 'put ''IT09UnQpbnVsbD09PUhlJiYoSGU9bmV3IFNldCksSGUuYWRkKFJ0KTtlbHNlIGlmKCFpdC5oYXMoUnQpKXtpZigkZXx8IWtlKER0LGl0LFJ0KSlyZXR1cm4hMTtudWxsPT09SGUmJihIZT1uZXcgU2V0KSxIZS5hZGQoUnQpfX1pZihudWxsIT09SGUpe2Zvcih2YXIgUHQ9eihpdCksY2k9MDtj''@;'; put 'put ''aTxQdC5sZW5ndGg7Y2krKyl7dmFyIFF0PVB0W2NpXTtpZigib2JqZWN0Ij09PUYoUXQpJiZudWxsIT09UXQpe2lmKCFJZShIZSxRdCwkZSx0dCkpcmV0dXJuITF9ZWxzZSBpZighJGUmJiFEdC5oYXMoUXQpJiYhSWUoSGUsUXQsJGUsdHQpKXJldHVybiExfXJldHVybiAwPT09SGUuc2l6ZX1y''@;'; put 'put ''ZXR1cm4hMH0oRHQsaXQsJGUsSGUpKXJldHVybiExfWVsc2UgaWYodXQ9PT1KZSl7aWYoIWZ1bmN0aW9uIFFlKER0LGl0LCRlLHR0KXtmb3IodmFyIEhlPW51bGwsdXQ9TihEdCkscXQ9MDtxdDx1dC5sZW5ndGg7cXQrKyl7dmFyIFJ0PUkodXRbcXRdLDIpLFB0PVJ0WzBdLGNpPVJ0WzFdO2lm''@;'; put 'put ''KCJvYmplY3QiPT09RihQdCkmJm51bGwhPT1QdCludWxsPT09SGUmJihIZT1uZXcgU2V0KSxIZS5hZGQoUHQpO2Vsc2V7dmFyIFF0PWl0LmdldChQdCk7aWYodm9pZCAwPT09UXQmJiFpdC5oYXMoUHQpfHwhRGUoY2ksUXQsJGUsdHQpKXtpZigkZXx8IUFlKER0LGl0LFB0LGNpLHR0KSlyZXR1''@;'; put 'put ''cm4hMTtudWxsPT09SGUmJihIZT1uZXcgU2V0KSxIZS5hZGQoUHQpfX19aWYobnVsbCE9PUhlKXtmb3IodmFyIHNuPU4oaXQpLFJpPTA7Umk8c24ubGVuZ3RoO1JpKyspe3ZhciBobj1JKHNuW1JpXSwyKSxmdD1oblswXSxPcj1oblsxXTtpZigib2JqZWN0Ij09PUYoZnQpJiZudWxsIT09ZnQp''@;'; put 'put ''e2lmKCFudChIZSxEdCxmdCxPciwkZSx0dCkpcmV0dXJuITF9ZWxzZSBpZighKCRlfHxEdC5oYXMoZnQpJiZEZShEdC5nZXQoZnQpLE9yLCExLHR0KXx8bnQoSGUsRHQsZnQsT3IsITEsdHQpKSlyZXR1cm4hMX1yZXR1cm4gMD09PUhlLnNpemV9cmV0dXJuITB9KER0LGl0LCRlLEhlKSlyZXR1''@;'; put 'put ''cm4hMX1lbHNlIGlmKHV0PT09d2UpZm9yKDtxdDxEdC5sZW5ndGg7cXQrKyl7aWYoIVkoRHQscXQpKXtpZihZKGl0LHF0KSlyZXR1cm4hMTtmb3IodmFyIFJ0PU9iamVjdC5rZXlzKER0KTtxdDxSdC5sZW5ndGg7cXQrKyl7dmFyIFB0PVJ0W3F0XTtpZighWShpdCxQdCl8fCFEZShEdFtQdF0s''@;'; put 'put ''aXRbUHRdLCRlLEhlKSlyZXR1cm4hMX1yZXR1cm4gUnQubGVuZ3RoPT09T2JqZWN0LmtleXMoaXQpLmxlbmd0aH1pZighWShpdCxxdCl8fCFEZShEdFtxdF0saXRbcXRdLCRlLEhlKSlyZXR1cm4hMX1mb3IocXQ9MDtxdDx0dC5sZW5ndGg7cXQrKyl7dmFyIGNpPXR0W3F0XTtpZighRGUoRHRb''@;'; put 'put ''Y2ldLGl0W2NpXSwkZSxIZSkpcmV0dXJuITF9cmV0dXJuITB9KER0LGl0LCRlLHV0LHR0LEhlKTtyZXR1cm4gdHQudmFsMS5kZWxldGUoRHQpLHR0LnZhbDIuZGVsZXRlKGl0KSxPcn1mdW5jdGlvbiBJZShEdCxpdCwkZSx0dCl7Zm9yKHZhciBIZT16KER0KSx1dD0wO3V0PEhlLmxlbmd0aDt1''@;'; put 'put ''dCsrKXt2YXIgcXQ9SGVbdXRdO2lmKERlKGl0LHF0LCRlLHR0KSlyZXR1cm4gRHQuZGVsZXRlKHF0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBWZShEdCl7c3dpdGNoKEYoRHQpKXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIG51bGw7Y2FzZSJvYmplY3QiOnJldHVybjtjYXNlInN5bWJvbCI6cmV0''@;'; put 'put ''dXJuITE7Y2FzZSJzdHJpbmciOkR0PStEdDtjYXNlIm51bWJlciI6aWYoVShEdCkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24ga2UoRHQsaXQsJGUpe3ZhciB0dD1WZSgkZSk7cmV0dXJuIHR0Pz8oaXQuaGFzKHR0KSYmIUR0Lmhhcyh0dCkpfWZ1bmN0aW9uIEFlKER0LGl0LCRlLHR0LEhl''@;'; put 'put ''KXt2YXIgdXQ9VmUoJGUpO2lmKG51bGwhPXV0KXJldHVybiB1dDt2YXIgcXQ9aXQuZ2V0KHV0KTtyZXR1cm4hKHZvaWQgMD09PXF0JiYhaXQuaGFzKHV0KXx8IURlKHR0LHF0LCExLEhlKSkmJiFEdC5oYXModXQpJiZEZSh0dCxxdCwhMSxIZSl9ZnVuY3Rpb24gbnQoRHQsaXQsJGUsdHQsSGUs''@;'; put 'put ''dXQpe2Zvcih2YXIgcXQ9eihEdCksUnQ9MDtSdDxxdC5sZW5ndGg7UnQrKyl7dmFyIFB0PXF0W1J0XTtpZihEZSgkZSxQdCxIZSx1dCkmJkRlKHR0LGl0LmdldChQdCksSGUsdXQpKXJldHVybiBEdC5kZWxldGUoUHQpLCEwfXJldHVybiExfXVlLmV4cG9ydHM9e2lzRGVlcEVxdWFsOmZ1bmN0''@;'; put 'put ''aW9uIHl0KER0LGl0KXtyZXR1cm4gRGUoRHQsaXQsITEpfSxpc0RlZXBTdHJpY3RFcXVhbDpmdW5jdGlvbiBNdChEdCxpdCl7cmV0dXJuIERlKER0LGl0LCEwKX19fSw4MjI0Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksWC53cmFwcGVyPWZ1bmN0aW9uIHkoSSl7cmV0dXJuIEl9fSw5NzQyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gRihVKXt2YXIgVz1QKFUpLHE9V1sxXTtyZXR1cm4gMyooV1swXStxKS80LXF9LFgudG9CeXRlQXJyYXk9ZnVuY3Rpb24geihVKXt2''@;'; put 'put ''YXIgVyxsZSxZPVAoVSkscT1ZWzBdLGVlPVlbMV0sSj1uZXcgXyhmdW5jdGlvbiBPKFUsVyxZKXtyZXR1cm4gMyooVytZKS80LVl9KDAscSxlZSkpLG5lPTAsaWU9ZWU+MD9xLTQ6cTtmb3IobGU9MDtsZTxpZTtsZSs9NClXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDE4fElbVS5jaGFyQ29kZUF0''@;'; put 'put ''KGxlKzEpXTw8MTJ8SVtVLmNoYXJDb2RlQXQobGUrMildPDw2fElbVS5jaGFyQ29kZUF0KGxlKzMpXSxKW25lKytdPVc+PjE2JjI1NSxKW25lKytdPVc+PjgmMjU1LEpbbmUrK109MjU1Jlc7cmV0dXJuIDI9PT1lZSYmKFc9SVtVLmNoYXJDb2RlQXQobGUpXTw8MnxJW1UuY2hhckNvZGVBdChs''@;'; put 'put ''ZSsxKV0+PjQsSltuZSsrXT0yNTUmVyksMT09PWVlJiYoVz1JW1UuY2hhckNvZGVBdChsZSldPDwxMHxJW1UuY2hhckNvZGVBdChsZSsxKV08PDR8SVtVLmNoYXJDb2RlQXQobGUrMildPj4yLEpbbmUrK109Vz4+OCYyNTUsSltuZSsrXT0yNTUmVyksSn0sWC5mcm9tQnl0ZUFycmF5PWZ1bmN0''@;'; put 'put ''aW9uIEsoVSl7Zm9yKHZhciBXLFk9VS5sZW5ndGgscT1ZJTMsZWU9W10sSj0xNjM4MyxuZT0wLGllPVktcTtuZTxpZTtuZSs9SillZS5wdXNoKEwoVSxuZSxuZStKPmllP2llOm5lK0opKTtyZXR1cm4gMT09PXE/ZWUucHVzaCh5WyhXPVVbWS0xXSk+PjJdK3lbVzw8NCY2M10rIj09Iik6Mj09''@;'; put 'put ''PXEmJmVlLnB1c2goeVsoVz0oVVtZLTJdPDw4KStVW1ktMV0pPj4xMF0reVtXPj40JjYzXSt5W1c8PDImNjNdKyI9IiksZWUuam9pbigiIil9O2Zvcih2YXIgeT1bXSxJPVtdLF89dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXksZz0iQUJDREVGR0hJSktMTU5PUFFSU1RV''@;'; put 'put ''VldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsQj0wO0I8NjQ7KytCKXlbQl09Z1tCXSxJW2cuY2hhckNvZGVBdChCKV09QjtmdW5jdGlvbiBQKFUpe3ZhciBXPVUubGVuZ3RoO2lmKFclND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0''@;'; put 'put ''aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBZPVUuaW5kZXhPZigiPSIpO3JldHVybi0xPT09WSYmKFk9VyksW1ksWT09PVc/MDo0LVklNF19ZnVuY3Rpb24gTihVKXtyZXR1cm4geVtVPj4xOCY2M10reVtVPj4xMiY2M10reVtVPj42JjYzXSt5WzYzJlVdfWZ1bmN0aW9uIEwoVSxX''@;'; put 'put ''LFkpe2Zvcih2YXIgZWU9W10sSj1XO0o8WTtKKz0zKWVlLnB1c2goTigoVVtKXTw8MTYmMTY3MTE2ODApKyhVW0orMV08PDgmNjUyODApKygyNTUmVVtKKzJdKSkpO3JldHVybiBlZS5qb2luKCIiKX1JWzQ1XT02MixJWzk1XT02M30sMzU1MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJ''@;'; put 'put ''LF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKHgsQyl7aWYoIXgpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQih4LEMpe3guc3VwZXJfPUM7dmFyIFQ9ZnVuY3Rpb24oKXt9O1QucHJvdG90eXBlPUMucHJvdG90eXBlLHgucHJvdG90eXBlPW5ldyBU''@;'; put 'put ''LHgucHJvdG90eXBlLmNvbnN0cnVjdG9yPXh9ZnVuY3Rpb24gdyh4LEMsVCl7aWYody5pc0JOKHgpKXJldHVybiB4O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT14JiYoKCJsZSI9PT1DfHwiYmUiPT09QykmJihUPUMs''@;'; put 'put ''Qz0xMCksdGhpcy5faW5pdCh4fHwwLEN8fDEwLFR8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZl''@;'; put 'put ''cjp5KDY2MDEpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRih4LEMpe3ZhciBUPXguY2hhckNvZGVBdChDKTtyZXR1cm4gVD49NDgmJlQ8PTU3P1QtNDg6VD49NjUmJlQ8PTcwP1QtNTU6VD49OTcmJlQ8PTEwMj9ULTg3OnZvaWQgZyghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit4KX1mdW5j''@;'; put 'put ''dGlvbiBPKHgsQyxUKXt2YXIgSD1GKHgsVCk7cmV0dXJuIFQtMT49QyYmKEh8PUYoeCxULTEpPDw0KSxIfWZ1bmN0aW9uIHooeCxDLFQsSCl7Zm9yKHZhciBqPTAsRT0wLG09TWF0aC5taW4oeC5sZW5ndGgsVCksQT1DO0E8bTtBKyspe3ZhciBhZT14LmNoYXJDb2RlQXQoQSktNDg7aio9SCxF''@;'; put 'put ''PWFlPj00OT9hZS00OSsxMDphZT49MTc/YWUtMTcrMTA6YWUsZyhhZT49MCYmRTxILCJJbnZhbGlkIGNoYXJhY3RlciIpLGorPUV9cmV0dXJuIGp9ZnVuY3Rpb24gTih4LEMpe3gud29yZHM9Qy53b3Jkcyx4Lmxlbmd0aD1DLmxlbmd0aCx4Lm5lZ2F0aXZlPUMubmVnYXRpdmUseC5yZWQ9Qy5y''@;'; put 'put ''ZWR9aWYody5pc0JOPWZ1bmN0aW9uKEMpe3JldHVybiBDIGluc3RhbmNlb2Ygd3x8bnVsbCE9PUMmJiJvYmplY3QiPT10eXBlb2YgQyYmQy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoQy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKEMsVCl7cmV0dXJu''@;'; put 'put ''IEMuY21wKFQpPjA/QzpUfSx3Lm1pbj1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKTwwP0M6VH0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oQyxULEgpe2lmKCJudW1iZXIiPT10eXBlb2YgQylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihDLFQsSCk7aWYoIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBDKXJldHVybiB0aGlzLl9pbml0QXJyYXkoQyxULEgpOyJoZXgiPT09VCYmKFQ9MTYpLGcoVD09PSgwfFQpJiZUPj0yJiZUPD0zNik7dmFyIGo9MDsiLSI9PT0oQz1DLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKGorKyx0aGlzLm5lZ2F0aXZlPTEpLGo8Qy5sZW5ndGgm''@;'; put 'put ''JigxNj09PVQ/dGhpcy5fcGFyc2VIZXgoQyxqLEgpOih0aGlzLl9wYXJzZUJhc2UoQyxULGopLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihDLFQsSCl7QzwwJiYodGhpcy5uZWdhdGl2ZT0x''@;'; put 'put ''LEM9LUMpLEM8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJkNdLHRoaXMubGVuZ3RoPTEpOkM8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhDPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMu''@;'; put 'put ''d29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsSCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oQyxULEgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBD''@;'; put 'put ''Lmxlbmd0aCksQy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoQy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMu''@;'; put 'put ''d29yZHNbal09MDt2YXIgRSxtLEE9MDtpZigiYmUiPT09SClmb3Ioaj1DLmxlbmd0aC0xLEU9MDtqPj0wO2otPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tqXXxDW2otMV08PDh8Q1tqLTJdPDwxNik8PEEmNjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+''@;'; put 'put ''PTI2JiYoQS09MjYsRSsrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihqPTAsRT0wO2o8Qy5sZW5ndGg7ais9Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbaisxXTw8OHxDW2orMl08PDE2KTw8QSY2NzEwODg2Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYm''@;'; put 'put ''JihBLT0yNixFKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oQyxULEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoQy5sZW5ndGgtVCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5s''@;'; put 'put ''ZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgQSxFPTAsbT0wO2lmKCJiZSI9PT1IKWZvcihqPUMubGVuZ3RoLTE7aj49VDtqLT0yKUE9TyhDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O2Vs''@;'; put 'put ''c2UgZm9yKGo9KEMubGVuZ3RoLVQpJTI9PTA/VCsxOlQ7ajxDLmxlbmd0aDtqKz0yKUE9TyhDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O3RoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJz''@;'; put 'put ''ZUJhc2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBqPTAsRT0xO0U8PTY3MTA4ODYzO0UqPVQpaisrO2otLSxFPUUvVHwwO2Zvcih2YXIgbT1DLmxlbmd0aC1ILEE9bSVqLGFlPU1hdGgubWluKG0sbS1BKStILHRlPTAsc2U9SDtzZTxhZTtz''@;'; put 'put ''ZSs9ail0ZT16KEMsc2Usc2UraixUKSx0aGlzLmltdWxuKEUpLHRoaXMud29yZHNbMF0rdGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dGU6dGhpcy5faWFkZG4odGUpO2lmKDAhPT1BKXt2YXIgd2U9MTtmb3IodGU9eihDLHNlLEMubGVuZ3RoLFQpLHNlPTA7c2U8QTtzZSsrKXdlKj1UO3Ro''@;'; put 'put ''aXMuaW11bG4od2UpLHRoaXMud29yZHNbMF0rdGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dGU6dGhpcy5faWFkZG4odGUpfXRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oQyl7Qy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgVD0wO1Q8dGhp''@;'; put 'put ''cy5sZW5ndGg7VCsrKUMud29yZHNbVF09dGhpcy53b3Jkc1tUXTtDLmxlbmd0aD10aGlzLmxlbmd0aCxDLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsQy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKEMpe04oQyx0aGlzKX0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KEMpLEN9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oQyl7Zm9yKDt0aGlzLmxlbmd0aDxDOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlv''@;'; put 'put ''bigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRz''@;'; put 'put ''WzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e3cucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPUx9Y2F0Y2h7dy5wcm90b3R5cGUuaW5zcGVjdD1M''@;'; put 'put ''fWVsc2Ugdy5wcm90b3R5cGUuaW5zcGVjdD1MO2Z1bmN0aW9uIEwoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgSz1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFc9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIx''@;'; put 'put ''Niw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2''@;'; put 'put ''OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlO3ZhciBIPXgubGVuZ3RoK0MubGVuZ3RofDA7VC5sZW5ndGg9SCxIPUgt''@;'; put 'put ''MXwwO3ZhciBqPTB8eC53b3Jkc1swXSxFPTB8Qy53b3Jkc1swXSxtPWoqRSxhZT1tLzY3MTA4ODY0fDA7VC53b3Jkc1swXT02NzEwODg2MyZtO2Zvcih2YXIgdGU9MTt0ZTxIO3RlKyspe2Zvcih2YXIgc2U9YWU+Pj4yNix3ZT02NzEwODg2MyZhZSxVZT1NYXRoLm1pbih0ZSxDLmxlbmd0aC0x''@;'; put 'put ''KSxKZT1NYXRoLm1heCgwLHRlLXgubGVuZ3RoKzEpO0plPD1VZTtKZSsrKXNlKz0obT0oaj0wfHgud29yZHNbdGUtSmV8MF0pKihFPTB8Qy53b3Jkc1tKZV0pK3dlKS82NzEwODg2NHwwLHdlPTY3MTA4ODYzJm07VC53b3Jkc1t0ZV09MHx3ZSxhZT0wfHNlfXJldHVybiAwIT09YWU/VC53b3Jk''@;'; put 'put ''c1t0ZV09MHxhZTpULmxlbmd0aC0tLFQuX3N0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oQyxUKXt2YXIgSDtpZihUPTB8VHx8MSwxNj09PShDPUN8fDEwKXx8ImhleCI9PT1DKXtIPSIiO2Zvcih2YXIgaj0wLEU9MCxtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPXRo''@;'; put 'put ''aXMud29yZHNbbV0sYWU9KDE2Nzc3MjE1JihBPDxqfEUpKS50b1N0cmluZygxNik7RT1BPj4+MjQtaiYxNjc3NzIxNSwoais9Mik+PTI2JiYoai09MjYsbS0tKSxIPTAhPT1FfHxtIT09dGhpcy5sZW5ndGgtMT9LWzYtYWUubGVuZ3RoXSthZStIOmFlK0h9Zm9yKDAhPT1FJiYoSD1FLnRvU3Ry''@;'; put 'put ''aW5nKDE2KStIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoQz09PSgwfEMpJiZDPj0yJiZDPD0zNil7dmFyIHRlPVVbQ10sc2U9V1tDXTtIPSIiO3ZhciB3ZT10aGlzLmNsb25lKCk7Zm9yKHdlLm5lZ2F0aXZlPTA7IXdl''@;'; put 'put ''LmlzWmVybygpOyl7dmFyIFVlPXdlLm1vZHJuKHNlKS50b1N0cmluZyhDKTtIPSh3ZT13ZS5pZGl2bihzZSkpLmlzWmVybygpP1VlK0g6S1t0ZS1VZS5sZW5ndGhdK1VlK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBDPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9DKz02NzEwODg2NCp0aGlzLndvcmRzWzFd''@;'; put 'put ''OjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Qys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1D''@;'; put 'put ''OkN9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxQJiYody5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShQLEMsVCl9KSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKEMs''@;'; put 'put ''VCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksQyxUKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMuX3N0cmlwKCk7dmFyIGo9dGhpcy5ieXRlTGVuZ3RoKCksRT1IfHxNYXRoLm1heCgxLGopO2coajw9RSwiYnl0ZSBhcnJheSBsb25nZXIgdGhh''@;'; put 'put ''biBkZXNpcmVkIGxlbmd0aCIpLGcoRT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgbT1mdW5jdGlvbihDLFQpe3JldHVybiBDLmFsbG9jVW5zYWZlP0MuYWxsb2NVbnNhZmUoVCk6bmV3IEMoVCl9KEMsRSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1U''@;'; put 'put ''PyJMRSI6IkJFIildKG0saiksbX0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxqO0NbSCsrXT0yNTUmQSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+''@;'; put 'put ''PjgmMjU1KSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjE2JjI1NSksNj09PW0/KEg8Qy5sZW5ndGgmJihDW0grK109QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSDxDLmxlbmd0aClmb3IoQ1tIKytdPWo7SDxDLmxlbmd0aDspQ1tIKytdPTB9LHcucHJvdG90eXBlLl90''@;'; put 'put ''b0FycmF5TGlrZUJFPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPUMubGVuZ3RoLTEsaj0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18ajtDW0gtLV09MjU1JkEsSD49MCYmKENbSC0tXT1BPj44JjI1NSksSD49MCYmKENbSC0tXT1BPj4xNiYyNTUp''@;'; put 'put ''LDY9PT1tPyhIPj0wJiYoQ1tILS1dPUE+PjI0JjI1NSksaj0wLG09MCk6KGo9QT4+PjI0LG0rPTIpfWlmKEg+PTApZm9yKENbSC0tXT1qO0g+PTA7KUNbSC0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oQyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoQyl9''@;'; put 'put ''OmZ1bmN0aW9uKEMpe3ZhciBUPUMsSD0wO3JldHVybiBUPj00MDk2JiYoSCs9MTMsVD4+Pj0xMyksVD49NjQmJihIKz03LFQ+Pj49NyksVD49OCYmKEgrPTQsVD4+Pj00KSxUPj0yJiYoSCs9MixUPj4+PTIpLEgrVH0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKEMpe2lmKDA9PT1D''@;'; put 'put ''KXJldHVybiAyNjt2YXIgVD1DLEg9MDtyZXR1cm4gODE5MSZUfHwoSCs9MTMsVD4+Pj0xMyksMTI3JlR8fChIKz03LFQ+Pj49NyksMTUmVHx8KEgrPTQsVD4+Pj00KSwzJlR8fChIKz0yLFQ+Pj49MiksMSZUfHxIKyssSH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIFQ9''@;'; put 'put ''dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrVH0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgQz0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7''@;'; put 'put ''dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tUXSk7aWYoQys9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIEN9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlv''@;'; put 'put ''bihDKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihDKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnRlc3RuKEMtMSk/dGhpcy5ub3RuKEMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNs''@;'; put 'put ''b25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygp''@;'; put 'put ''fHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihDKXtmb3IoO3RoaXMubGVuZ3RoPEMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBUPTA7VDxDLmxlbmd0aDtUKyspdGhpcy53b3Jkc1tUXT10aGlzLndvcmRzW1Rd''@;'; put 'put ''fEMud29yZHNbVF07cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihDKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVu''@;'; put 'put ''Z3RoP3RoaXMuY2xvbmUoKS5pb3IoQyk6Qy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihDKTpDLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVu''@;'; put 'put ''Y3Rpb24oQyl7dmFyIFQ7VD10aGlzLmxlbmd0aD5DLmxlbmd0aD9DOnRoaXM7Zm9yKHZhciBIPTA7SDxULmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJkMud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1YW5kKEMpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKEMpOkMuY2xvbmUoKS5pYW5kKHRo''@;'; put 'put ''aXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoQyk6Qy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihDKXt2YXIgVCxIO3RoaXMubGVuZ3RoPkMubGVuZ3Ro''@;'; put 'put ''PyhUPXRoaXMsSD1DKTooVD1DLEg9dGhpcyk7Zm9yKHZhciBqPTA7ajxILmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1ULndvcmRzW2pdXkgud29yZHNbal07aWYodGhpcyE9PVQpZm9yKDtqPFQubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3Ro''@;'; put 'put ''PVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1eG9yKEMpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3Ro''@;'; put 'put ''aXMuY2xvbmUoKS5peG9yKEMpOkMuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoQyk6Qy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5j''@;'; put 'put ''dGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9MHxNYXRoLmNlaWwoQy8yNiksSD1DJTI2O3RoaXMuX2V4cGFuZChUKSxIPjAmJlQtLTtmb3IodmFyIGo9MDtqPFQ7aisrKXRoaXMud29yZHNbal09NjcxMDg4NjMmfnRoaXMud29yZHNbal07cmV0dXJuIEg+MCYmKHRo''@;'; put 'put ''aXMud29yZHNbal09fnRoaXMud29yZHNbal0mNjcxMDg4NjM+PjI2LUgpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihDKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihDLFQpe2coIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBDJiZDPj0wKTt2YXIgSD1DLzI2fDAsaj1DJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPVQ/dGhpcy53b3Jkc1tIXXwxPDxqOnRoaXMud29yZHNbSF0mfigxPDxqKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMpe3ZhciBULEgs''@;'; put 'put ''ajtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlKXJldHVybiBDLm5lZ2F0aXZl''@;'; put 'put ''PTAsVD10aGlzLmlzdWIoQyksQy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KEg9dGhpcyxqPUMpOihIPUMsaj10aGlzKTtmb3IodmFyIEU9MCxtPTA7bTxqLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT02NzEwODg2MyYoVD0oMHxILndvcmRzW21dKSso''@;'; put 'put ''MHxqLndvcmRzW21dKStFKSxFPVQ+Pj4yNjtmb3IoOzAhPT1FJiZtPEgubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pK0UpLEU9VD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1FKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPUUsdGhp''@;'; put 'put ''cy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7bTxILmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT1ILndvcmRzW21dO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyl7dmFyIFQ7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oQy5u''@;'; put 'put ''ZWdhdGl2ZT0wLFQ9dGhpcy5zdWIoQyksQy5uZWdhdGl2ZV49MSxUKTowPT09Qy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxUPUMuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxUKTp0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChD''@;'; put 'put ''KTpDLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihDKXtpZigwIT09Qy5uZWdhdGl2ZSl7Qy5uZWdhdGl2ZT0wO3ZhciBUPXRoaXMuaWFkZChDKTtyZXR1cm4gQy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJu''@;'; put 'put ''IHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIGosRSxIPXRoaXMuY21wKEMpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KGo9dGhpcyxF''@;'; put 'put ''PUMpOihqPUMsRT10aGlzKTtmb3IodmFyIG09MCxBPTA7QTxFLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKS0oMHxFLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2Zvcig7MCE9PW0mJkE8ai5sZW5ndGg7QSsrKW09KFQ9KDB8ai53b3Jkc1tBXSkrbSk+''@;'; put 'put ''PjI2LHRoaXMud29yZHNbQV09NjcxMDg4NjMmVDtpZigwPT09bSYmQTxqLmxlbmd0aCYmaiE9PXRoaXMpZm9yKDtBPGoubGVuZ3RoO0ErKyl0aGlzLndvcmRzW0FdPWoud29yZHNbQV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEEpLGohPT10aGlzJiYodGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKEMpfTt2YXIgSj1mdW5jdGlvbihDLFQsSCl7dmFyIGFlLHRlLHNlLGo9Qy53b3JkcyxFPVQud29yZHMsbT1ILndvcmRzLEE9MCx3ZT0wfGpbMF0sVWU9''@;'; put 'put ''ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8alsxXSx4ZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxqWzJdLHplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfGpbM10sT2U9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8als0XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxqWzVdLG50PTgxOTEm''@;'; put 'put ''X3QsUWU9X3Q+Pj4xMyx1bj0wfGpbNl0seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8als3XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxqWzhdLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfGpbOV0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8RVswXSxRdD04MTkxJmNpLHNu''@;'; put 'put ''PWNpPj4+MTMsUmk9MHxFWzFdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfEVbMl0sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8RVszXSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxFWzRdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfEVbNV0saHQ9ODE5MSZucix4dD1ucj4+''@;'; put 'put ''PjEzLGpuPTB8RVs2XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxFWzddLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfEVbOF0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzLHVhPTB8RVs5XSxFaT04MTkxJnVhLHZyPXVhPj4+MTM7SC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUs''@;'; put 'put ''SC5sZW5ndGg9MTk7dmFyIFduPShBKyhhZT1NYXRoLmltdWwoVWUsUXQpKXwwKSsoKDgxOTEmKHRlPSh0ZT1NYXRoLmltdWwoVWUsc24pKStNYXRoLmltdWwoSmUsUXQpfDApKTw8MTMpfDA7QT0oKHNlPU1hdGguaW11bChKZSxzbikpKyh0ZT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9Njcx''@;'; put 'put ''MDg4NjMsYWU9TWF0aC5pbXVsKHhlLFF0KSx0ZT0odGU9TWF0aC5pbXVsKHhlLHNuKSkrTWF0aC5pbXVsKHZlLFF0KXwwLHNlPU1hdGguaW11bCh2ZSxzbik7dmFyICRpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsaG4pfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxmdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEplLGhuKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsZnQpfDApKyh0ZT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHplLFF0KSx0ZT0odGU9TWF0aC5pbXVsKHplLHNuKSkrTWF0aC5pbXVsKERlLFF0KXwwLHNl''@;'; put 'put ''PU1hdGguaW11bChEZSxzbiksYWU9YWUrTWF0aC5pbXVsKHhlLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxzZT1zZStNYXRoLmltdWwodmUsZnQpfDA7dmFyIGVpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsV3QpfDApfDApKygoODE5MSYo''@;'; put 'put ''dGU9KHRlPXRlK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsQXQpfDApKyh0ZT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKE9lLFF0KSx0ZT0odGU9TWF0aC5pbXVsKE9l''@;'; put 'put ''LHNuKSkrTWF0aC5pbXVsKEllLFF0KXwwLHNlPU1hdGguaW11bChJZSxzbiksYWU9YWUrTWF0aC5pbXVsKHplLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxzZT1zZStNYXRoLmltdWwoRGUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLFd0''@;'; put 'put ''KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxzZT1zZStNYXRoLmltdWwodmUsQXQpfDA7dmFyIFFyPShBKyhhZT1hZStNYXRoLmltdWwoVWUsc3QpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEplLHN0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsVXQpfDApKyh0ZT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKGtlLFF0KSx0ZT0odGU9TWF0aC5pbXVsKGtlLHNuKSkrTWF0aC5pbXVsKEFlLFF0KXwwLHNlPU1hdGguaW11bChB''@;'; put 'put ''ZSxzbiksYWU9YWUrTWF0aC5pbXVsKE9lLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChJZSxobil8MCxzZT1zZStNYXRoLmltdWwoSWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsQXQpfDApK01hdGgu''@;'; put 'put ''aW11bChEZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoRGUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxzZT1zZStNYXRoLmltdWwodmUsVXQpfDA7dmFyIFZpPShBKyhhZT1hZStNYXRoLmltdWwo''@;'; put 'put ''VWUsV2UpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsVHQpfDApKyh0ZT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKG50LFF0''@;'; put 'put ''KSx0ZT0odGU9TWF0aC5pbXVsKG50LHNuKSkrTWF0aC5pbXVsKFFlLFF0KXwwLHNlPU1hdGguaW11bChRZSxzbiksYWU9YWUrTWF0aC5pbXVsKGtlLGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxzZT1zZStNYXRoLmltdWwoQWUsZnQpfDAs''@;'; put 'put ''YWU9YWUrTWF0aC5pbXVsKE9lLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoSWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChE''@;'; put 'put ''ZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoRGUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxzZT1zZStNYXRoLmltdWwodmUsVHQpfDA7dmFyIE5pPShBKyhhZT1hZStNYXRoLmltdWwoVWUsaHQp''@;'; put 'put ''fDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUseHQpfDApKyh0ZT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHl0LFF0KSx0ZT0o''@;'; put 'put ''dGU9TWF0aC5pbXVsKHl0LHNuKSkrTWF0aC5pbXVsKE10LFF0KXwwLHNlPU1hdGguaW11bChNdCxzbiksYWU9YWUrTWF0aC5pbXVsKG50LGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxzZT1zZStNYXRoLmltdWwoUWUsZnQpfDAsYWU9YWUr''@;'; put 'put ''TWF0aC5pbXVsKGtlLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxzZT1zZStNYXRoLmltdWwoQWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8''@;'; put 'put ''MCxzZT1zZStNYXRoLmltdWwoSWUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoRGUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLGh0KXwwLHRlPSh0ZT10ZStNYXRo''@;'; put 'put ''LmltdWwoeGUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxzZT1zZStNYXRoLmltdWwodmUseHQpfDA7dmFyIERhPShBKyhhZT1hZStNYXRoLmltdWwoVWUscm4pfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwKSk8PDEzKXww''@;'; put 'put ''O0E9KChzZT1zZStNYXRoLmltdWwoSmUsenQpfDApKyh0ZT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKGl0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKGl0LHNuKSkrTWF0aC5pbXVsKCRlLFF0KXwwLHNlPU1hdGguaW11bCgkZSxzbiksYWU9YWUrTWF0aC5p''@;'; put 'put ''bXVsKHl0LGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxzZT1zZStNYXRoLmltdWwoTXQsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxzZT1z''@;'; put 'put ''ZStNYXRoLmltdWwoUWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoQWUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwo''@;'; put 'put ''T2UsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoSWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxzZT1zZStNYXRoLmltdWwoRGUseHQpfDAsYWU9YWUrTWF0aC5p''@;'; put 'put ''bXVsKHhlLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxzZT1zZStNYXRoLmltdWwodmUsenQpfDA7dmFyIExyPShBKyhhZT1hZStNYXRoLmltdWwoVWUsY24pfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxmbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEplLGNuKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsZm4pfDApKyh0ZT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEhlLFF0KSx0ZT0odGU9TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLHNlPU1h''@;'; put 'put ''dGguaW11bCh1dCxzbiksYWU9YWUrTWF0aC5pbXVsKGl0LGhuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxzZT1zZStNYXRoLmltdWwoJGUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsQXQp''@;'; put 'put ''fDApK01hdGguaW11bChNdCxXdCl8MCxzZT1zZStNYXRoLmltdWwoTXQsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoUWUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKGtl''@;'; put 'put ''LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoQWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxzZT1zZStNYXRo''@;'; put 'put ''LmltdWwoSWUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsenQpfDApK01hdGguaW11bChEZSxybil8MCxzZT1zZStNYXRoLmltdWwoRGUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKHhlLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsZm4p''@;'; put 'put ''fDApK01hdGguaW11bCh2ZSxjbil8MCxzZT1zZStNYXRoLmltdWwodmUsZm4pfDA7dmFyIFdpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStN''@;'; put 'put ''YXRoLmltdWwoSmUsZW4pfDApKyh0ZT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHNuKSkrTWF0aC5pbXVsKFB0LFF0KXwwLHNlPU1hdGguaW11bChQdCxzbiksYWU9YWUrTWF0aC5pbXVsKEhlLGhuKXww''@;'; put 'put ''LHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsZnQpfDApK01hdGguaW11bCh1dCxobil8MCxzZT1zZStNYXRoLmltdWwodXQsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxzZT1zZStNYXRoLmltdWwo''@;'; put 'put ''JGUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxzZT1zZStNYXRoLmltdWwoTXQsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsVHQpfDApK01h''@;'; put 'put ''dGguaW11bChRZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoUWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxzZT1zZStNYXRoLmltdWwoQWUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLHJuKXww''@;'; put 'put ''LHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChJZSxybil8MCxzZT1zZStNYXRoLmltdWwoSWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKHplLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxzZT1zZStNYXRoLmltdWwo''@;'; put 'put ''RGUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHhlLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCxzZT1zZStNYXRoLmltdWwodmUsZW4pfDA7dmFyIHBhPShBKyhhZT1hZStNYXRoLmltdWwoVWUsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRl''@;'; put 'put ''K01hdGguaW11bChVZSx2cil8MCkrTWF0aC5pbXVsKEplLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsdnIpfDApKyh0ZT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LGhuKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LGZ0KSkrTWF0''@;'; put 'put ''aC5pbXVsKFB0LGhuKXwwLHNlPU1hdGguaW11bChQdCxmdCksYWU9YWUrTWF0aC5pbXVsKEhlLFd0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsQXQpfDApK01hdGguaW11bCh1dCxXdCl8MCxzZT1zZStNYXRoLmltdWwodXQsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LHN0KXwwLHRlPSh0''@;'; put 'put ''ZT10ZStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoJGUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxzZT1zZStNYXRoLmltdWwoTXQsVHQp''@;'; put 'put ''fDAsYWU9YWUrTWF0aC5pbXVsKG50LGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxzZT1zZStNYXRoLmltdWwoUWUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11''@;'; put 'put ''bChBZSxybil8MCxzZT1zZStNYXRoLmltdWwoQWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKE9lLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxzZT1zZStNYXRoLmltdWwoSWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHplLFh0KXwwLHRlPSh0''@;'; put 'put ''ZT10ZStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoRGUsZW4pfDA7dmFyIFFuPShBKyhhZT1hZStNYXRoLmltdWwoeGUsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bCh4ZSx2cil8MCkrTWF0aC5pbXVsKHZlLEVpKXww''@;'; put 'put ''KSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwodmUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFd0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LEF0KSkrTWF0aC5pbXVsKFB0LFd0KXwwLHNlPU1hdGguaW11bChQdCxBdCksYWU9''@;'; put 'put ''YWUrTWF0aC5pbXVsKEhlLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsVXQpfDApK01hdGguaW11bCh1dCxzdCl8MCxzZT1zZStNYXRoLmltdWwodXQsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxX''@;'; put 'put ''ZSl8MCxzZT1zZStNYXRoLmltdWwoJGUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxzZT1zZStNYXRoLmltdWwoTXQseHQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LHJuKXwwLHRlPSh0ZT10ZStN''@;'; put 'put ''YXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxzZT1zZStNYXRoLmltdWwoUWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKGtlLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxzZT1zZStNYXRoLmltdWwoQWUsZm4pfDAsYWU9''@;'; put 'put ''YWUrTWF0aC5pbXVsKE9lLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoSWUsZW4pfDA7dmFyIGxhPShBKyhhZT1hZStNYXRoLmltdWwoemUsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bCh6''@;'; put 'put ''ZSx2cil8MCkrTWF0aC5pbXVsKERlLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoRGUsdnIpfDApKyh0ZT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LHN0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LFV0KSkrTWF0aC5pbXVsKFB0LHN0''@;'; put 'put ''KXwwLHNlPU1hdGguaW11bChQdCxVdCksYWU9YWUrTWF0aC5pbXVsKEhlLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsVHQpfDApK01hdGguaW11bCh1dCxXZSl8MCxzZT1zZStNYXRoLmltdWwodXQsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LGh0KXwwLHRlPSh0ZT10ZStNYXRoLmlt''@;'; put 'put ''dWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxzZT1zZStNYXRoLmltdWwoJGUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxzZT1zZStNYXRoLmltdWwoTXQsenQpfDAsYWU9YWUrTWF0''@;'; put 'put ''aC5pbXVsKG50LGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxzZT1zZStNYXRoLmltdWwoUWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKGtlLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCxz''@;'; put 'put ''ZT1zZStNYXRoLmltdWwoQWUsZW4pfDA7dmFyIHlhPShBKyhhZT1hZStNYXRoLmltdWwoT2UsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChPZSx2cil8MCkrTWF0aC5pbXVsKEllLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSWUsdnIpfDApKyh0ZT4+''@;'; put 'put ''PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFdlKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LFR0KSkrTWF0aC5pbXVsKFB0LFdlKXwwLHNlPU1hdGguaW11bChQdCxUdCksYWU9YWUrTWF0aC5pbXVsKEhlLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUs''@;'; put 'put ''eHQpfDApK01hdGguaW11bCh1dCxodCl8MCxzZT1zZStNYXRoLmltdWwodXQseHQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxzZT1zZStNYXRoLmltdWwoJGUsenQpfDAsYWU9YWUrTWF0aC5pbXVs''@;'; put 'put ''KHl0LGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxzZT1zZStNYXRoLmltdWwoTXQsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKG50LFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCxzZT1zZStN''@;'; put 'put ''YXRoLmltdWwoUWUsZW4pfDA7dmFyIExhPShBKyhhZT1hZStNYXRoLmltdWwoa2UsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChrZSx2cil8MCkrTWF0aC5pbXVsKEFlLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoQWUsdnIpfDApKyh0ZT4+PjEzKXww''@;'; put 'put ''KSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LGh0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHh0KSkrTWF0aC5pbXVsKFB0LGh0KXwwLHNlPU1hdGguaW11bChQdCx4dCksYWU9YWUrTWF0aC5pbXVsKEhlLHJuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsenQpfDAp''@;'; put 'put ''K01hdGguaW11bCh1dCxybil8MCxzZT1zZStNYXRoLmltdWwodXQsenQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxzZT1zZStNYXRoLmltdWwoJGUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFh0''@;'; put 'put ''KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCxzZT1zZStNYXRoLmltdWwoTXQsZW4pfDA7dmFyIEZhPShBKyhhZT1hZStNYXRoLmltdWwobnQsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChudCx2cil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFFlLEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoUWUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LHJuKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHp0KSkrTWF0aC5pbXVsKFB0LHJuKXwwLHNlPU1hdGguaW11bChQ''@;'; put 'put ''dCx6dCksYWU9YWUrTWF0aC5pbXVsKEhlLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsZm4pfDApK01hdGguaW11bCh1dCxjbil8MCxzZT1zZStNYXRoLmltdWwodXQsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsZW4pfDApK01hdGgu''@;'; put 'put ''aW11bCgkZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoJGUsZW4pfDA7dmFyIHRpPShBKyhhZT1hZStNYXRoLmltdWwoeXQsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bCh5dCx2cil8MCkrTWF0aC5pbXVsKE10LEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwo''@;'; put 'put ''TXQsdnIpfDApKyh0ZT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LGNuKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LGZuKSkrTWF0aC5pbXVsKFB0LGNuKXwwLHNlPU1hdGguaW11bChQdCxmbiksYWU9YWUrTWF0aC5pbXVsKEhlLFh0KXwwLHRlPSh0ZT10''@;'; put 'put ''ZStNYXRoLmltdWwoSGUsZW4pfDApK01hdGguaW11bCh1dCxYdCl8MCxzZT1zZStNYXRoLmltdWwodXQsZW4pfDA7dmFyIGdvPShBKyhhZT1hZStNYXRoLmltdWwoaXQsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChpdCx2cil8MCkrTWF0aC5pbXVsKCRlLEVpKXwwKSk8''@;'; put 'put ''PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoJGUsdnIpfDApKyh0ZT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFh0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LGVuKSkrTWF0aC5pbXVsKFB0LFh0KXwwLHNlPU1hdGguaW11bChQdCxlbik7dmFyIE5z''@;'; put 'put ''PShBKyhhZT1hZStNYXRoLmltdWwoSGUsRWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChIZSx2cil8MCkrTWF0aC5pbXVsKHV0LEVpKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwodXQsdnIpfDApKyh0ZT4+PjEzKXwwKSsoTnM+Pj4yNil8MCxOcyY9NjcxMDg4''@;'; put 'put ''NjM7dmFyIGJsPShBKyhhZT1NYXRoLmltdWwoUnQsRWkpKXwwKSsoKDgxOTEmKHRlPSh0ZT1NYXRoLmltdWwoUnQsdnIpKStNYXRoLmltdWwoUHQsRWkpfDApKTw8MTMpfDA7cmV0dXJuIEE9KChzZT1NYXRoLmltdWwoUHQsdnIpKSsodGU+Pj4xMyl8MCkrKGJsPj4+MjYpfDAsYmwmPTY3MTA4''@;'; put 'put ''ODYzLG1bMF09V24sbVsxXT0kaSxtWzJdPWVpLG1bM109UXIsbVs0XT1WaSxtWzVdPU5pLG1bNl09RGEsbVs3XT1McixtWzhdPVdpLG1bOV09cGEsbVsxMF09UW4sbVsxMV09bGEsbVsxMl09eWEsbVsxM109TGEsbVsxNF09RmEsbVsxNV09dGksbVsxNl09Z28sbVsxN109TnMsbVsxOF09Ymws''@;'; put 'put ''MCE9PUEmJihtWzE5XT1BLEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIG5lKHgsQyxUKXtULm5lZ2F0aXZlPUMubmVnYXRpdmVeeC5uZWdhdGl2ZSxULmxlbmd0aD14Lmxlbmd0aCtDLmxlbmd0aDtmb3IodmFyIEg9MCxqPTAsRT0wO0U8VC5sZW5ndGgtMTtFKyspe3ZhciBtPWo7aj0wO2Zvcih2''@;'; put 'put ''YXIgQT02NzEwODg2MyZILGFlPU1hdGgubWluKEUsQy5sZW5ndGgtMSksdGU9TWF0aC5tYXgoMCxFLXgubGVuZ3RoKzEpO3RlPD1hZTt0ZSsrKXt2YXIgSmU9KDB8eC53b3Jkc1tFLXRlXSkqKDB8Qy53b3Jkc1t0ZV0pLG90PTY3MTA4ODYzJkplO0E9NjcxMDg4NjMmKG90PW90K0F8MCksais9''@;'; put 'put ''KG09KG09bSsoSmUvNjcxMDg4NjR8MCl8MCkrKG90Pj4+MjYpfDApPj4+MjYsbSY9NjcxMDg4NjN9VC53b3Jkc1tFXT1BLEg9bSxtPWp9cmV0dXJuIDAhPT1IP1Qud29yZHNbRV09SDpULmxlbmd0aC0tLFQuX3N0cmlwKCl9ZnVuY3Rpb24gaWUoeCxDLFQpe3JldHVybiBuZSh4LEMsVCl9ZnVu''@;'; put 'put ''Y3Rpb24gbGUoeCxDKXt0aGlzLng9eCx0aGlzLnk9Q31NYXRoLmltdWx8fChKPWVlKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihDLFQpe3ZhciBqPXRoaXMubGVuZ3RoK0MubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PUMubGVuZ3RoP0oodGhpcyxDLFQpOmo8NjM/''@;'; put 'put ''ZWUodGhpcyxDLFQpOmo8MTAyND9uZSh0aGlzLEMsVCk6aWUodGhpcyxDLFQpfSxsZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhDKS0xLGo9MDtqPEM7aisrKVRbal09dGhpcy5yZXZCaW4oaixI''@;'; put 'put ''LEMpO3JldHVybiBUfSxsZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKEMsVCxIKXtpZigwPT09Q3x8Qz09PUgtMSlyZXR1cm4gQztmb3IodmFyIGo9MCxFPTA7RTxUO0UrKylqfD0oMSZDKTw8VC1FLTEsQz4+PTE7cmV0dXJuIGp9LGxlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKEMs''@;'; put 'put ''VCxILGosRSxtKXtmb3IodmFyIEE9MDtBPG07QSsrKWpbQV09VFtDW0FdXSxFW0FdPUhbQ1tBXV19LGxlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oQyxULEgsaixFLG0pe3RoaXMucGVybXV0ZShtLEMsVCxILGosRSk7Zm9yKHZhciBBPTE7QTxFO0E8PD0xKWZvcih2YXIgYWU9QTw8''@;'; put 'put ''MSx0ZT1NYXRoLmNvcygyKk1hdGguUEkvYWUpLHNlPU1hdGguc2luKDIqTWF0aC5QSS9hZSksd2U9MDt3ZTxFO3dlKz1hZSlmb3IodmFyIFVlPXRlLEplPXNlLG90PTA7b3Q8QTtvdCsrKXt2YXIgeGU9SFt3ZStvdF0sdmU9alt3ZStvdF0sWGU9SFt3ZStvdCtBXSx6ZT1qW3dlK290K0FdLERl''@;'; put 'put ''PVVlKlhlLUplKnplO3plPVVlKnplK0plKlhlLEhbd2Urb3RdPXhlKyhYZT1EZSksalt3ZStvdF09dmUremUsSFt3ZStvdCtBXT14ZS1YZSxqW3dlK290K0FdPXZlLXplLG90IT09YWUmJihEZT10ZSpVZS1zZSpKZSxKZT10ZSpKZStzZSpVZSxVZT1EZSl9fSxsZS5wcm90b3R5cGUuZ3Vlc3NM''@;'; put 'put ''ZW4xM2I9ZnVuY3Rpb24oQyxUKXt2YXIgSD0xfE1hdGgubWF4KFQsQyksaj0xJkgsRT0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKUUrKztyZXR1cm4gMTw8RSsxK2p9LGxlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oQyxULEgpe2lmKCEoSDw9MSkpZm9yKHZhciBqPTA7ajxILzI7aisr''@;'; put 'put ''KXt2YXIgRT1DW2pdO0Nbal09Q1tILWotMV0sQ1tILWotMV09RSxFPVRbal0sVFtqXT0tVFtILWotMV0sVFtILWotMV09LUV9fSxsZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPTAsaj0wO2o8VC8yO2orKyl7dmFyIEU9ODE5MipNYXRoLnJvdW5kKENb''@;'; put 'put ''MipqKzFdL1QpK01hdGgucm91bmQoQ1syKmpdL1QpK0g7Q1tqXT02NzEwODg2MyZFLEg9RTw2NzEwODg2ND8wOkUvNjcxMDg4NjR8MH1yZXR1cm4gQ30sbGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oQyxULEgsail7Zm9yKHZhciBFPTAsbT0wO208VDttKyspSFsyKm1dPTgxOTEm''@;'; put 'put ''KEUrPTB8Q1ttXSksSFsyKm0rMV09ODE5MSYoRT4+Pj0xMyksRT4+Pj0xMztmb3IobT0yKlQ7bTxqOysrbSlIW21dPTA7ZygwPT09RSksZyghKC04MTkyJkUpKX0sbGUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPW5ldyBBcnJheShDKSxIPTA7SDxDO0grKylUW0hdPTA7''@;'; put 'put ''cmV0dXJuIFR9LGxlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKEMsVCxIKXt2YXIgaj0yKnRoaXMuZ3Vlc3NMZW4xM2IoQy5sZW5ndGgsVC5sZW5ndGgpLEU9dGhpcy5tYWtlUkJUKGopLG09dGhpcy5zdHViKGopLEE9bmV3IEFycmF5KGopLGFlPW5ldyBBcnJheShqKSx0ZT1uZXcgQXJyYXko''@;'; put 'put ''aiksc2U9bmV3IEFycmF5KGopLHdlPW5ldyBBcnJheShqKSxVZT1uZXcgQXJyYXkoaiksSmU9SC53b3JkcztKZS5sZW5ndGg9aix0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxBLGopLHRoaXMuY29udmVydDEzYihULndvcmRzLFQubGVuZ3RoLHNlLGopLHRoaXMudHJhbnNmb3Jt''@;'; put 'put ''KEEsbSxhZSx0ZSxqLEUpLHRoaXMudHJhbnNmb3JtKHNlLG0sd2UsVWUsaixFKTtmb3IodmFyIG90PTA7b3Q8ajtvdCsrKXt2YXIgeGU9YWVbb3RdKndlW290XS10ZVtvdF0qVWVbb3RdO3RlW290XT1hZVtvdF0qVWVbb3RdK3RlW290XSp3ZVtvdF0sYWVbb3RdPXhlfXJldHVybiB0aGlzLmNv''@;'; put 'put ''bmp1Z2F0ZShhZSx0ZSxqKSx0aGlzLnRyYW5zZm9ybShhZSx0ZSxKZSxtLGosRSksdGhpcy5jb25qdWdhdGUoSmUsbSxqKSx0aGlzLm5vcm1hbGl6ZTEzYihKZSxqKSxILm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD1DLmxlbmd0aCtULmxlbmd0aCxILl9zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyl7dmFyIFQ9bmV3IHcobnVsbCk7cmV0dXJuIFQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK0MubGVuZ3RoKSx0aGlzLm11bFRvKEMsVCl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oQyl7dmFyIFQ9bmV3IHcobnVsbCk7cmV0dXJu''@;'; put 'put ''IFQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK0MubGVuZ3RoKSxpZSh0aGlzLEMsVCl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhDLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9''@;'; put 'put ''LUMpLGcoIm51bWJlciI9PXR5cGVvZiBDKSxnKEM8NjcxMDg4NjQpO2Zvcih2YXIgSD0wLGo9MDtqPHRoaXMubGVuZ3RoO2orKyl7dmFyIEU9KDB8dGhpcy53b3Jkc1tqXSkqQyxtPSg2NzEwODg2MyZFKSsoNjcxMDg4NjMmSCk7SD4+PTI2LEgrPUUvNjcxMDg4NjR8MCxIKz1tPj4+MjYsdGhp''@;'; put 'put ''cy53b3Jkc1tqXT02NzEwODg2MyZtfXJldHVybiAwIT09SCYmKHRoaXMud29yZHNbal09SCx0aGlzLmxlbmd0aCsrKSxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihDKX0sdy5wcm90b3R5cGUuc3FyPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyl7dmFyIFQ9ZnVuY3Rpb24gcSh4KXtmb3IodmFyIEM9bmV3IEFycmF5KHguYml0''@;'; put 'put ''TGVuZ3RoKCkpLFQ9MDtUPEMubGVuZ3RoO1QrKylDW1RdPXgud29yZHNbVC8yNnwwXT4+PlQlMjYmMTtyZXR1cm4gQ30oQyk7aWYoMD09PVQubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIEg9dGhpcyxqPTA7ajxULmxlbmd0aCYmMD09PVRbal07aisrLEg9SC5zcXIoKSk7aWYoKytq''@;'; put 'put ''PFQubGVuZ3RoKWZvcih2YXIgRT1ILnNxcigpO2o8VC5sZW5ndGg7aisrLEU9RS5zcXIoKSkwIT09VFtqXSYmKEg9SC5tdWwoRSkpO3JldHVybiBIfSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBFLFQ9QyUyNixIPShDLVQp''@;'; put 'put ''LzI2LGo9NjcxMDg4NjM+Pj4yNi1UPDwyNi1UO2lmKDAhPT1UKXt2YXIgbT0wO2ZvcihFPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV0majt0aGlzLndvcmRzW0VdPSgwfHRoaXMud29yZHNbRV0pLUE8PFR8bSxtPUE+Pj4yNi1UfW0mJih0aGlzLndvcmRzW0VdPW0s''@;'; put 'put ''dGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihFPXRoaXMubGVuZ3RoLTE7RT49MDtFLS0pdGhpcy53b3Jkc1tFK0hdPXRoaXMud29yZHNbRV07Zm9yKEU9MDtFPEg7RSsrKXRoaXMud29yZHNbRV09MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aXNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oQyxULEgpe3ZhciBqO2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKSxqPVQ/KFQtVCUyNikvMjY6MDt2YXIgRT1DJTI2LG09TWF0''@;'; put 'put ''aC5taW4oKEMtRSkvMjYsdGhpcy5sZW5ndGgpLEE9NjcxMDg4NjNeNjcxMDg4NjM+Pj5FPDxFLGFlPUg7aWYoai09bSxqPU1hdGgubWF4KDAsaiksYWUpe2Zvcih2YXIgdGU9MDt0ZTxtO3RlKyspYWUud29yZHNbdGVdPXRoaXMud29yZHNbdGVdO2FlLmxlbmd0aD1tfWlmKDAhPT1tKWlmKHRo''@;'; put 'put ''aXMubGVuZ3RoPm0pZm9yKHRoaXMubGVuZ3RoLT1tLHRlPTA7dGU8dGhpcy5sZW5ndGg7dGUrKyl0aGlzLndvcmRzW3RlXT10aGlzLndvcmRzW3RlK21dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHNlPTA7Zm9yKHRlPXRoaXMubGVuZ3RoLTE7dGU+PTAmJigwIT09''@;'; put 'put ''c2V8fHRlPj1qKTt0ZS0tKXt2YXIgd2U9MHx0aGlzLndvcmRzW3RlXTt0aGlzLndvcmRzW3RlXT1zZTw8MjYtRXx3ZT4+PkUsc2U9d2UmQX1yZXR1cm4gYWUmJjAhPT1zZSYmKGFlLndvcmRzW2FlLmxlbmd0aCsrXT1zZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMu''@;'; put 'put ''bGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKEMsVCxIKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oQyxULEgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oQyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oQyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaXVzaHJuKEMpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9QyUyNixIPShDLVQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxUKSl9LHcucHJvdG90eXBlLmltYXNrbj1m''@;'; put 'put ''dW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9QyUyNixIPShDLVQpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09VCYmSCsrLHRo''@;'; put 'put ''aXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1UJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxUKSx0aGlzLl9zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFz''@;'; put 'put ''a24oQyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKEMpe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3MTA4ODY0KSxDPDA/dGhpcy5pc3VibigtQyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9Qz8odGhpcy53b3Jk''@;'; put 'put ''c1swXT1DLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKEMpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oQyl7dGhpcy53b3Jkc1swXSs9Qztm''@;'; put 'put ''b3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1RdPj02NzEwODg2NDtUKyspdGhpcy53b3Jkc1tUXS09NjcxMDg4NjQsVD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tUKzFdPTE6dGhpcy53b3Jkc1tUKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMu''@;'; put 'put ''bGVuZ3RoLFQrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oQyl7aWYoZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2NzEwODg2NCksQzwwKXJldHVybiB0aGlzLmlhZGRuKC1DKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFk''@;'; put 'put ''ZG4oQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09QywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgmJnRoaXMud29y''@;'; put 'put ''ZHNbVF08MDtUKyspdGhpcy53b3Jkc1tUXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tUKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oQyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oQyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihDKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11''@;'; put 'put ''bD1mdW5jdGlvbihDLFQsSCl7dmFyIEU7dGhpcy5fZXhwYW5kKEMubGVuZ3RoK0gpO3ZhciBtLEE9MDtmb3IoRT0wO0U8Qy5sZW5ndGg7RSsrKXttPSgwfHRoaXMud29yZHNbRStIXSkrQTt2YXIgYWU9KDB8Qy53b3Jkc1tFXSkqVDtBPSgobS09NjcxMDg4NjMmYWUpPj4yNiktKGFlLzY3MTA4''@;'; put 'put ''ODY0fDApLHRoaXMud29yZHNbRStIXT02NzEwODg2MyZtfWZvcig7RTx0aGlzLmxlbmd0aC1IO0UrKylBPShtPSgwfHRoaXMud29yZHNbRStIXSkrQSk+PjI2LHRoaXMud29yZHNbRStIXT02NzEwODg2MyZtO2lmKDA9PT1BKXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihnKC0xPT09QSksQT0w''@;'; put 'put ''LEU9MDtFPHRoaXMubGVuZ3RoO0UrKylBPShtPS0oMHx0aGlzLndvcmRzW0VdKStBKT4+MjYsdGhpcy53b3Jkc1tFXT02NzEwODg2MyZtO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oQyxUKXt2YXIgSCxqPXRoaXMu''@;'; put 'put ''Y2xvbmUoKSxFPUMsbT0wfEUud29yZHNbRS5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKG0pKSYmKEU9RS51c2hsbihIKSxqLml1c2hsbihIKSxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXSk7dmFyIHRlLGFlPWoubGVuZ3RoLUUubGVuZ3RoO2lmKCJtb2QiIT09VCl7KHRlPW5l''@;'; put 'put ''dyB3KG51bGwpKS5sZW5ndGg9YWUrMSx0ZS53b3Jkcz1uZXcgQXJyYXkodGUubGVuZ3RoKTtmb3IodmFyIHNlPTA7c2U8dGUubGVuZ3RoO3NlKyspdGUud29yZHNbc2VdPTB9dmFyIHdlPWouY2xvbmUoKS5faXNobG5zdWJtdWwoRSwxLGFlKTswPT09d2UubmVnYXRpdmUmJihqPXdlLHRlJiYo''@;'; put 'put ''dGUud29yZHNbYWVdPTEpKTtmb3IodmFyIFVlPWFlLTE7VWU+PTA7VWUtLSl7dmFyIEplPTY3MTA4ODY0KigwfGoud29yZHNbRS5sZW5ndGgrVWVdKSsoMHxqLndvcmRzW0UubGVuZ3RoK1VlLTFdKTtmb3IoSmU9TWF0aC5taW4oSmUvbXwwLDY3MTA4ODYzKSxqLl9pc2hsbnN1Ym11bChFLEpl''@;'; put 'put ''LFVlKTswIT09ai5uZWdhdGl2ZTspSmUtLSxqLm5lZ2F0aXZlPTAsai5faXNobG5zdWJtdWwoRSwxLFVlKSxqLmlzWmVybygpfHwoai5uZWdhdGl2ZV49MSk7dGUmJih0ZS53b3Jkc1tVZV09SmUpfXJldHVybiB0ZSYmdGUuX3N0cmlwKCksai5fc3RyaXAoKSwiZGl2IiE9PVQmJjAhPT1IJiZq''@;'; put 'put ''Lml1c2hybihIKSx7ZGl2OnRlfHxudWxsLG1vZDpqfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKEMsVCxIKXtyZXR1cm4gZyghQy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5lZ2F0aXZl''@;'; put 'put ''PyhtPXRoaXMubmVnKCkuZGl2bW9kKEMsVCksIm1vZCIhPT1UJiYoaj1tLmRpdi5uZWcoKSksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxIJiYwIT09RS5uZWdhdGl2ZSYmRS5pYWRkKEMpKSx7ZGl2OmosbW9kOkV9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmU/KG09dGhp''@;'; put 'put ''cy5kaXZtb2QoQy5uZWcoKSxUKSwibW9kIiE9PVQmJihqPW0uZGl2Lm5lZygpKSx7ZGl2OmosbW9kOm0ubW9kfSk6dGhpcy5uZWdhdGl2ZSZDLm5lZ2F0aXZlPyhtPXRoaXMubmVnKCkuZGl2bW9kKEMubmVnKCksVCksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxIJiYwIT09RS5uZWdhdGl2''@;'; put 'put ''ZSYmRS5pc3ViKEMpKSx7ZGl2Om0uZGl2LG1vZDpFfSk6Qy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKEMpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PUMubGVuZ3RoPyJkaXYiPT09VD97ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1UP3tk''@;'; put 'put ''aXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RybihDLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihDLFQpO3ZhciBqLEUsbX0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKEMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmRpdm1vZChDLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2QiLCEwKS5tb2R9LHcu''@;'; put 'put ''cHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKEMpe3ZhciBUPXRoaXMuZGl2bW9kKEMpO2lmKFQubW9kLmlzWmVybygpKXJldHVybiBULmRpdjt2YXIgSD0wIT09VC5kaXYubmVnYXRpdmU/VC5tb2QuaXN1YihDKTpULm1vZCxqPUMudXNocm4oMSksRT1DLmFuZGxuKDEpLG09SC5jbXAoaik7''@;'; put 'put ''cmV0dXJuIG08MHx8MT09PUUmJjA9PT1tP1QuZGl2OjAhPT1ULmRpdi5uZWdhdGl2ZT9ULmRpdi5pc3VibigxKTpULmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzKTtmb3IodmFyIEg9KDE8PDI2KSVD''@;'; put 'put ''LGo9MCxFPXRoaXMubGVuZ3RoLTE7RT49MDtFLS0paj0oSCpqKygwfHRoaXMud29yZHNbRV0pKSVDO3JldHVybiBUPy1qOmp9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubW9kcm4oQyl9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtU''@;'; put 'put ''JiYoQz0tQyksZyhDPD02NzEwODg2Myk7Zm9yKHZhciBIPTAsaj10aGlzLmxlbmd0aC0xO2o+PTA7ai0tKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSs2NzEwODg2NCpIO3RoaXMud29yZHNbal09RS9DfDAsSD1FJUN9cmV0dXJuIHRoaXMuX3N0cmlwKCksVD90aGlzLmluZWcoKTp0aGlzfSx3''@;'; put 'put ''LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oQyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdhdGl2ZSksZyghQy5pc1plcm8oKSk7dmFyIFQ9dGhpcyxIPUMuY2xvbmUoKTtUPTAhPT1ULm5lZ2F0aXZlP1QudW1v''@;'; put 'put ''ZChDKTpULmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLEU9bmV3IHcoMCksbT1uZXcgdygwKSxBPW5ldyB3KDEpLGFlPTA7VC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspVC5pdXNocm4oMSksSC5pdXNocm4oMSksKythZTtmb3IodmFyIHRlPUguY2xvbmUoKSxzZT1ULmNsb25lKCk7IVQuaXNa''@;'; put 'put ''ZXJvKCk7KXtmb3IodmFyIHdlPTAsVWU9MTshKFQud29yZHNbMF0mVWUpJiZ3ZTwyNjsrK3dlLFVlPDw9MSk7aWYod2U+MClmb3IoVC5pdXNocm4od2UpO3dlLS0gPjA7KShqLmlzT2RkKCl8fEUuaXNPZGQoKSkmJihqLmlhZGQodGUpLEUuaXN1YihzZSkpLGouaXVzaHJuKDEpLEUuaXVzaHJu''@;'; put 'put ''KDEpO2Zvcih2YXIgSmU9MCxvdD0xOyEoSC53b3Jkc1swXSZvdCkmJkplPDI2OysrSmUsb3Q8PD0xKTtpZihKZT4wKWZvcihILml1c2hybihKZSk7SmUtLSA+MDspKG0uaXNPZGQoKXx8QS5pc09kZCgpKSYmKG0uaWFkZCh0ZSksQS5pc3ViKHNlKSksbS5pdXNocm4oMSksQS5pdXNocm4oMSk7''@;'; put 'put ''VC5jbXAoSCk+PTA/KFQuaXN1YihIKSxqLmlzdWIobSksRS5pc3ViKEEpKTooSC5pc3ViKFQpLG0uaXN1YihqKSxBLmlzdWIoRSkpfXJldHVybnthOm0sYjpBLGdjZDpILml1c2hsbihhZSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdhdGl2ZSksZyghQy5p''@;'; put 'put ''c1plcm8oKSk7dmFyIHdlLFQ9dGhpcyxIPUMuY2xvbmUoKTtUPTAhPT1ULm5lZ2F0aXZlP1QudW1vZChDKTpULmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLEU9bmV3IHcoMCksbT1ILmNsb25lKCk7VC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBBPTAsYWU9MTshKFQud29y''@;'; put 'put ''ZHNbMF0mYWUpJiZBPDI2OysrQSxhZTw8PTEpO2lmKEE+MClmb3IoVC5pdXNocm4oQSk7QS0tID4wOylqLmlzT2RkKCkmJmouaWFkZChtKSxqLml1c2hybigxKTtmb3IodmFyIHRlPTAsc2U9MTshKEgud29yZHNbMF0mc2UpJiZ0ZTwyNjsrK3RlLHNlPDw9MSk7aWYodGU+MClmb3IoSC5pdXNo''@;'; put 'put ''cm4odGUpO3RlLS0gPjA7KUUuaXNPZGQoKSYmRS5pYWRkKG0pLEUuaXVzaHJuKDEpO1QuY21wKEgpPj0wPyhULmlzdWIoSCksai5pc3ViKEUpKTooSC5pc3ViKFQpLEUuaXN1YihqKSl9cmV0dXJuKHdlPTA9PT1ULmNtcG4oMSk/ajpFKS5jbXBuKDApPDAmJndlLmlhZGQoQyksd2V9LHcucHJv''@;'; put 'put ''dG90eXBlLmdjZD1mdW5jdGlvbihDKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBDLmFicygpO2lmKEMuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIFQ9dGhpcy5jbG9uZSgpLEg9Qy5jbG9uZSgpO1QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBqPTA7VC5pc0V2ZW4o''@;'; put 'put ''KSYmSC5pc0V2ZW4oKTtqKyspVC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO1QuaXNFdmVuKCk7KVQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIEU9VC5jbXAoSCk7aWYoRTwwKXt2YXIgbT1UO1Q9SCxIPW19ZWxzZSBpZigwPT09RXx8MD09''@;'; put 'put ''PUguY21wbigxKSlicmVhaztULmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKGopfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmVnY2QoQykuYS51bW9kKEMpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMud29yZHNbMF0mQ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMpO3ZhciBU''@;'; put 'put ''PUMlMjYsSD0oQy1UKS8yNixqPTE8PFQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PWosdGhpcztmb3IodmFyIEU9aixtPUg7MCE9PUUmJm08dGhpcy5sZW5ndGg7bSsrKXt2YXIgQT0wfHRoaXMud29yZHNbbV07RT0oQSs9RSk+Pj4y''@;'; put 'put ''Nix0aGlzLndvcmRzW21dPUEmPTY3MTA4ODYzfXJldHVybiAwIT09RSYmKHRoaXMud29yZHNbbV09RSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUu''@;'; put 'put ''Y21wbj1mdW5jdGlvbihDKXt2YXIgSCxUPUM8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlQpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzLCJOdW1i''@;'; put 'put ''ZXIgaXMgdG9vIGJpZyIpO3ZhciBqPTB8dGhpcy53b3Jkc1swXTtIPWo9PT1DPzA6ajxDPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKEMpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1cm4tMTtp''@;'; put 'put ''ZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIDE7dmFyIFQ9dGhpcy51Y21wKEMpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1UOlR9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oQyl7aWYodGhpcy5sZW5ndGg+Qy5sZW5ndGgpcmV0dXJuIDE7aWYodGhp''@;'; put 'put ''cy5sZW5ndGg8Qy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBUPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgaj0wfHRoaXMud29yZHNbSF0sRT0wfEMud29yZHNbSF07aWYoaiE9PUUpe2o8RT9UPS0xOmo+RSYmKFQ9MSk7YnJlYWt9fXJldHVybiBUfSx3LnByb3RvdHlwZS5ndG49''@;'; put 'put ''ZnVuY3Rpb24oQyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKEMpe3JldHVybiAxPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9u''@;'; put 'put ''KEMpe3JldHVybiB0aGlzLmNtcChDKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKEMpe3JldHVybi0xPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wKEMpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKEMpe3JldHVy''@;'; put 'put ''biB0aGlzLmNtcG4oQyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXAoQyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oQyl7cmV0dXJuIDA9PT10aGlz''@;'; put 'put ''LmNtcChDKX0sdy5yZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBwKEMpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHBvc2l0aXZlcyIpLEMuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChDKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5y''@;'; put 'put ''ZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5yZWQ9Qyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNv''@;'; put 'put ''bnRleHQiKSx0aGlzLl9mb3JjZVJlZChDKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLnJlZC5zdWIodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlv''@;'; put 'put ''bihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEMpLHRoaXMucmVkLm11bCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxD''@;'; put 'put ''KSx0aGlzLnJlZC5pbXVsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRo''@;'; put 'put ''aXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRo''@;'; put 'put ''aXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkJiYhQy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsQyl9O3ZhciBtZT17azI1NjpudWxs''@;'; put 'put ''LHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIF9lKHgsQyl7dGhpcy5uYW1lPXgsdGhpcy5wPW5ldyB3KEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlz''@;'; put 'put ''Ll90bXAoKX1mdW5jdGlvbiBUZSgpe19lLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gU2UoKXtfZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGplKCl7X2UuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBWKCl7X2UuY2FsbCh0''@;'; put 'put ''aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBwKHgpe2lmKCJzdHJpbmciPT10eXBlb2YgeCl7dmFyIEM9dy5fcHJpbWUoeCk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxz''@;'; put 'put ''ZSBnKHguZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gYih4KXtwLmNhbGwodGhpcyx4KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYt''@;'; put 'put ''dGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5t''@;'; put 'put ''KSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfV9lLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHcobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxDfSxf''@;'; put 'put ''ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihDKXt2YXIgSCxUPUM7ZG97dGhpcy5zcGxpdChULHRoaXMudG1wKSxIPShUPShUPXRoaXMuaW11bEsoVCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIGo9SDx0aGlzLm4/LTE6VC51Y21wKHRoaXMu''@;'; put 'put ''cCk7cmV0dXJuIDA9PT1qPyhULndvcmRzWzBdPTAsVC5sZW5ndGg9MSk6aj4wP1QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVQuc3RyaXA/VC5zdHJpcCgpOlQuX3N0cmlwKCksVH0sX2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Qy5pdXNocm4odGhpcy5uLDAsVCl9LF9lLnByb3Rv''@;'; put 'put ''dHlwZS5pbXVsSz1mdW5jdGlvbihDKXtyZXR1cm4gQy5pbXVsKHRoaXMuayl9LEIoVGUsX2UpLFRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD00MTk0MzAzLGo9TWF0aC5taW4oQy5sZW5ndGgsOSksRT0wO0U8ajtFKyspVC53b3Jkc1tFXT1DLndvcmRzW0VdO2lm''@;'; put 'put ''KFQubGVuZ3RoPWosQy5sZW5ndGg8PTkpcmV0dXJuIEMud29yZHNbMF09MCx2b2lkKEMubGVuZ3RoPTEpO3ZhciBtPUMud29yZHNbOV07Zm9yKFQud29yZHNbVC5sZW5ndGgrK109bSZILEU9MTA7RTxDLmxlbmd0aDtFKyspe3ZhciBBPTB8Qy53b3Jkc1tFXTtDLndvcmRzW0UtMTBdPShBJkgp''@;'; put 'put ''PDw0fG0+Pj4yMixtPUF9Qy53b3Jkc1tFLTEwXT1tPj4+PTIyLEMubGVuZ3RoLT0wPT09bSYmQy5sZW5ndGg+MTA/MTA6OX0sVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe0Mud29yZHNbQy5sZW5ndGhdPTAsQy53b3Jkc1tDLmxlbmd0aCsxXT0wLEMubGVuZ3RoKz0yO2Zvcih2YXIg''@;'; put 'put ''VD0wLEg9MDtIPEMubGVuZ3RoO0grKyl7dmFyIGo9MHxDLndvcmRzW0hdO0Mud29yZHNbSF09NjcxMDg4NjMmKFQrPTk3NypqKSxUPTY0KmorKFQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiYoQy5sZW5ndGgtLSwwPT09Qy53b3Jkc1tDLmxlbmd0aC0xXSYm''@;'; put 'put ''Qy5sZW5ndGgtLSksQ30sQihTZSxfZSksQihqZSxfZSksQihWLF9lKSxWLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspe3ZhciBqPTE5KigwfEMud29yZHNbSF0pK1QsRT02NzEwODg2MyZqO2o+Pj49MjYsQy53b3Jkc1tIXT1FLFQ9''@;'; put 'put ''an1yZXR1cm4gMCE9PVQmJihDLndvcmRzW0MubGVuZ3RoKytdPVQpLEN9LHcuX3ByaW1lPWZ1bmN0aW9uKEMpe2lmKG1lW0NdKXJldHVybiBtZVtDXTt2YXIgVDtpZigiazI1NiI9PT1DKVQ9bmV3IFRlO2Vsc2UgaWYoInAyMjQiPT09QylUPW5ldyBTZTtlbHNlIGlmKCJwMTkyIj09PUMpVD1u''@;'; put 'put ''ZXcgamU7ZWxzZXtpZigicDI1NTE5IiE9PUMpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrQyk7VD1uZXcgVn1yZXR1cm4gbWVbQ109VCxUfSxwLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0''@;'; put 'put ''aXZlcyIpLGcoQy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0scC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oQyxUKXtnKCEoQy5uZWdhdGl2ZXxULm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKEMucmVkJiZDLnJlZD09PVQu''@;'; put 'put ''cmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHAucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKEMpLl9mb3JjZVJlZCh0aGlzKTooTihDLEMudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSksQyl9''@;'; put 'put ''LHAucHJvdG90eXBlLm5lZz1mdW5jdGlvbihDKXtyZXR1cm4gQy5pc1plcm8oKT9DLmNsb25lKCk6dGhpcy5tLnN1YihDKS5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLmFkZChUKTtyZXR1cm4gSC5jbXAo''@;'; put 'put ''dGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5pYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSxwLnByb3RvdHlw''@;'; put 'put ''ZS5zdWI9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5zdWIoVCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1D''@;'; put 'put ''LmlzdWIoVCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSxwLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShDKSx0aGlzLmltb2QoQy51c2hsbihUKSl9LHAucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fdmVyaWZ5MihDLFQpLHRoaXMuaW1vZChDLmltdWwoVCkpfSxwLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihDLFQpLHRoaXMuaW1vZChDLm11bChUKSl9LHAucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW11bChDLEMu''@;'; put 'put ''Y2xvbmUoKSl9LHAucHJvdG90eXBlLnNxcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5tdWwoQyxDKX0scC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihDKXtpZihDLmlzWmVybygpKXJldHVybiBDLmNsb25lKCk7dmFyIFQ9dGhpcy5tLmFuZGxuKDMpO2lmKGcoVCUyPT0xKSwzPT09VCl7dmFy''@;'; put 'put ''IEg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhDLEgpfWZvcih2YXIgaj10aGlzLm0uc3VibigxKSxFPTA7IWouaXNaZXJvKCkmJjA9PT1qLmFuZGxuKDEpOylFKyssai5pdXNocm4oMSk7Zyghai5pc1plcm8oKSk7dmFyIG09bmV3IHcoMSkudG9SZWQo''@;'; put 'put ''dGhpcyksQT1tLnJlZE5lZygpLGFlPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx0ZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHRlPW5ldyB3KDIqdGUqdGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh0ZSxhZSkuY21wKEEpOyl0ZS5yZWRJQWRkKEEpO2Zvcih2YXIgc2U9dGhpcy5wb3co''@;'; put 'put ''dGUsaiksd2U9dGhpcy5wb3coQyxqLmFkZG4oMSkuaXVzaHJuKDEpKSxVZT10aGlzLnBvdyhDLGopLEplPUU7MCE9PVVlLmNtcChtKTspe2Zvcih2YXIgb3Q9VWUseGU9MDswIT09b3QuY21wKG0pO3hlKyspb3Q9b3QucmVkU3FyKCk7Zyh4ZTxKZSk7dmFyIHZlPXRoaXMucG93KHNlLG5ldyB3''@;'; put 'put ''KDEpLml1c2hsbihKZS14ZS0xKSk7d2U9d2UucmVkTXVsKHZlKSxzZT12ZS5yZWRTcXIoKSxVZT1VZS5yZWRNdWwoc2UpLEplPXhlfXJldHVybiB3ZX0scC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXt2YXIgVD1DLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09VC5uZWdhdGl2ZT8oVC5u''@;'; put 'put ''ZWdhdGl2ZT0wLHRoaXMuaW1vZChUKS5yZWROZWcoKSk6dGhpcy5pbW9kKFQpfSxwLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyxUKXtpZihULmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09VC5jbXBuKDEpKXJldHVybiBDLmNsb25lKCk7dmFyIGo9bmV3IEFy''@;'; put 'put ''cmF5KDE2KTtqWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGpbMV09Qztmb3IodmFyIEU9MjtFPGoubGVuZ3RoO0UrKylqW0VdPXRoaXMubXVsKGpbRS0xXSxDKTt2YXIgbT1qWzBdLEE9MCxhZT0wLHRlPVQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT10ZSYmKHRlPTI2KSxFPVQubGVuZ3RoLTE7''@;'; put 'put ''RT49MDtFLS0pe2Zvcih2YXIgc2U9VC53b3Jkc1tFXSx3ZT10ZS0xO3dlPj0wO3dlLS0pe3ZhciBVZT1zZT4+d2UmMTttIT09alswXSYmKG09dGhpcy5zcXIobSkpLDAhPT1VZXx8MCE9PUE/KEE8PD0xLEF8PVVlLCg0PT0rK2FlfHwwPT09RSYmMD09PXdlKSYmKG09dGhpcy5tdWwobSxqW0Fd''@;'; put 'put ''KSxhZT0wLEE9MCkpOmFlPTB9dGU9MjZ9cmV0dXJuIG19LHAucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihDKXt2YXIgVD1DLnVtb2QodGhpcy5tKTtyZXR1cm4gVD09PUM/VC5jbG9uZSgpOlR9LHAucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKEMpe3ZhciBUPUMuY2xvbmUo''@;'; put 'put ''KTtyZXR1cm4gVC5yZWQ9bnVsbCxUfSx3Lm1vbnQ9ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBiKEMpfSxCKGIscCksYi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltb2QoQy51c2hsbih0aGlzLnNoaWZ0KSl9LGIucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1''@;'; put 'put ''bmN0aW9uKEMpe3ZhciBUPXRoaXMuaW1vZChDLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gVC5yZWQ9bnVsbCxUfSxiLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gQy53b3Jkc1swXT0wLEMubGVuZ3RoPTEsQzt2YXIgSD1DLmlt''@;'; put 'put ''dWwoVCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0aGlzLm0pPj0wP209RS5pc3ViKHRoaXMubSk6RS5jbXBuKDApPDAmJiht''@;'; put 'put ''PUUuaWFkZCh0aGlzLm0pKSxtLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPUMubXVsKFQpLGo9SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwo''@;'; put 'put ''dGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksRT1ILmlzdWIoaikuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhpcy5tKSksbS5fZm9yY2VSZWQodGhp''@;'; put 'put ''cyl9LGIucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW1vZChDLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw5OTMxOih1ZSxYLHkpPT57dmFyIEk7ZnVuY3Rpb24gXyhCKXt0aGlzLnJhbmQ9''@;'; put 'put ''Qn1pZih1ZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiBJfHwoST1uZXcgXyhudWxsKSksSS5nZW5lcmF0ZSh3KX0sdWUuZXhwb3J0cy5SYW5kPV8sXy5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JhbmQodyl9LF8ucHJvdG90eXBlLl9yYW5kPWZ1bmN0''@;'; put 'put ''aW9uKHcpe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKHcpO2Zvcih2YXIgUD1uZXcgVWludDhBcnJheSh3KSxGPTA7RjxQLmxlbmd0aDtGKyspUFtGXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBQfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2Vs''@;'; put 'put ''Zi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9fLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgUD1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFApLFB9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0''@;'; put 'put ''UmFuZG9tVmFsdWVzP18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhQKSxQfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKF8ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgZz15KDkyMTQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnLnJhbmRvbUJ5dGVzKXRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCIpO18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3Jl''@;'; put 'put ''dHVybiBnLnJhbmRvbUJ5dGVzKHcpfX1jYXRjaHt9fSw0NDk3Oih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gXyhPKXtJLmlzQnVmZmVyKE8pfHwoTz1JLmZyb20oTykpO2Zvcih2YXIgej1PLmxlbmd0aC80fDAsTj1uZXcgQXJyYXkoeiksTD0wO0w8ejtMKyspTltM''@;'; put 'put ''XT1PLnJlYWRVSW50MzJCRSg0KkwpO3JldHVybiBOfWZ1bmN0aW9uIGcoTyl7Zm9yKDswPE8ubGVuZ3RoO08rKylPWzBdPTB9ZnVuY3Rpb24gQihPLHosTixMLEspe2Zvcih2YXIgbGUsbWUsX2UsVGUsVT1OWzBdLFc9TlsxXSxZPU5bMl0scT1OWzNdLGVlPU9bMF1eelswXSxKPU9bMV1eelsx''@;'; put 'put ''XSxuZT1PWzJdXnpbMl0saWU9T1szXV56WzNdLFNlPTQsamU9MTtqZTxLO2plKyspbGU9VVtlZT4+PjI0XV5XW0o+Pj4xNiYyNTVdXllbbmU+Pj44JjI1NV1ecVsyNTUmaWVdXnpbU2UrK10sbWU9VVtKPj4+MjRdXldbbmU+Pj4xNiYyNTVdXllbaWU+Pj44JjI1NV1ecVsyNTUmZWVdXnpbU2Ur''@;'; put 'put ''K10sX2U9VVtuZT4+PjI0XV5XW2llPj4+MTYmMjU1XV5ZW2VlPj4+OCYyNTVdXnFbMjU1JkpdXnpbU2UrK10sVGU9VVtpZT4+PjI0XV5XW2VlPj4+MTYmMjU1XV5ZW0o+Pj44JjI1NV1ecVsyNTUmbmVdXnpbU2UrK10sZWU9bGUsSj1tZSxuZT1fZSxpZT1UZTtyZXR1cm4gbGU9KExbZWU+Pj4y''@;'; put 'put ''NF08PDI0fExbSj4+PjE2JjI1NV08PDE2fExbbmU+Pj44JjI1NV08PDh8TFsyNTUmaWVdKV56W1NlKytdLG1lPShMW0o+Pj4yNF08PDI0fExbbmU+Pj4xNiYyNTVdPDwxNnxMW2llPj4+OCYyNTVdPDw4fExbMjU1JmVlXSleeltTZSsrXSxfZT0oTFtuZT4+PjI0XTw8MjR8TFtpZT4+PjE2JjI1''@;'; put 'put ''NV08PDE2fExbZWU+Pj44JjI1NV08PDh8TFsyNTUmSl0pXnpbU2UrK10sVGU9KExbaWU+Pj4yNF08PDI0fExbZWU+Pj4xNiYyNTVdPDwxNnxMW0o+Pj44JjI1NV08PDh8TFsyNTUmbmVdKV56W1NlKytdLFtsZT4+Pj0wLG1lPj4+PTAsX2U+Pj49MCxUZT4+Pj0wXX12YXIgdz1bMCwxLDIsNCw4''@;'; put 'put ''LDE2LDMyLDY0LDEyOCwyNyw1NF0sUD1mdW5jdGlvbigpe2Zvcih2YXIgTz1uZXcgQXJyYXkoMjU2KSx6PTA7ejwyNTY7eisrKU9bel09ejwxMjg/ejw8MTp6PDwxXjI4Mztmb3IodmFyIE49W10sTD1bXSxLPVtbXSxbXSxbXSxbXV0sVT1bW10sW10sW10sW11dLFc9MCxZPTAscT0wO3E8MjU2''@;'; put 'put ''OysrcSl7dmFyIGVlPVleWTw8MV5ZPDwyXlk8PDNeWTw8NDtOW1ddPWVlPWVlPj4+OF4yNTUmZWVeOTksTFtlZV09Vzt2YXIgSj1PW1ddLG5lPU9bSl0saWU9T1tuZV0sbGU9MjU3Kk9bZWVdXjE2ODQzMDA4KmVlO0tbMF1bV109bGU8PDI0fGxlPj4+OCxLWzFdW1ddPWxlPDwxNnxsZT4+PjE2''@;'; put 'put ''LEtbMl1bV109bGU8PDh8bGU+Pj4yNCxLWzNdW1ddPWxlLFVbMF1bZWVdPShsZT0xNjg0MzAwOSppZV42NTUzNypuZV4yNTcqSl4xNjg0MzAwOCpXKTw8MjR8bGU+Pj44LFVbMV1bZWVdPWxlPDwxNnxsZT4+PjE2LFVbMl1bZWVdPWxlPDw4fGxlPj4+MjQsVVszXVtlZV09bGUsMD09PVc/Vz1Z''@;'; put 'put ''PTE6KFc9Sl5PW09bT1tpZV5KXV1dLFlePU9bT1tZXV0pfXJldHVybntTQk9YOk4sSU5WX1NCT1g6TCxTVUJfTUlYOkssSU5WX1NVQl9NSVg6VX19KCk7ZnVuY3Rpb24gRihPKXt0aGlzLl9rZXk9XyhPKSx0aGlzLl9yZXNldCgpfUYuYmxvY2tTaXplPTE2LEYua2V5U2l6ZT0zMixGLnByb3Rv''@;'; put 'put ''dHlwZS5ibG9ja1NpemU9Ri5ibG9ja1NpemUsRi5wcm90b3R5cGUua2V5U2l6ZT1GLmtleVNpemUsRi5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBPPXRoaXMuX2tleSx6PU8ubGVuZ3RoLE49eis2LEw9NCooTisxKSxLPVtdLFU9MDtVPHo7VSsrKUtbVV09T1tVXTtmb3Io''@;'; put 'put ''VT16O1U8TDtVKyspe3ZhciBXPUtbVS0xXTtVJXo9PTA/KFc9UC5TQk9YWyhXPVc8PDh8Vz4+PjI0KT4+PjI0XTw8MjR8UC5TQk9YW1c+Pj4xNiYyNTVdPDwxNnxQLlNCT1hbVz4+PjgmMjU1XTw8OHxQLlNCT1hbMjU1JlddLFdePXdbVS96fDBdPDwyNCk6ej42JiZVJXo9PTQmJihXPVAuU0JP''@;'; put 'put ''WFtXPj4+MjRdPDwyNHxQLlNCT1hbVz4+PjE2JjI1NV08PDE2fFAuU0JPWFtXPj4+OCYyNTVdPDw4fFAuU0JPWFsyNTUmV10pLEtbVV09S1tVLXpdXld9Zm9yKHZhciBZPVtdLHE9MDtxPEw7cSsrKXt2YXIgZWU9TC1xLEo9S1tlZS0ocSU0PzA6NCldO1lbcV09cTw0fHxlZTw9ND9KOlAuSU5W''@;'; put 'put ''X1NVQl9NSVhbMF1bUC5TQk9YW0o+Pj4yNF1dXlAuSU5WX1NVQl9NSVhbMV1bUC5TQk9YW0o+Pj4xNiYyNTVdXV5QLklOVl9TVUJfTUlYWzJdW1AuU0JPWFtKPj4+OCYyNTVdXV5QLklOVl9TVUJfTUlYWzNdW1AuU0JPWFsyNTUmSl1dfXRoaXMuX25Sb3VuZHM9Tix0aGlzLl9rZXlTY2hlZHVs''@;'; put 'put ''ZT1LLHRoaXMuX2ludktleVNjaGVkdWxlPVl9LEYucHJvdG90eXBlLmVuY3J5cHRCbG9ja1Jhdz1mdW5jdGlvbihPKXtyZXR1cm4gQihPPV8oTyksdGhpcy5fa2V5U2NoZWR1bGUsUC5TVUJfTUlYLFAuU0JPWCx0aGlzLl9uUm91bmRzKX0sRi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0''@;'; put 'put ''aW9uKE8pe3ZhciB6PXRoaXMuZW5jcnlwdEJsb2NrUmF3KE8pLE49SS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIE4ud3JpdGVVSW50MzJCRSh6WzBdLDApLE4ud3JpdGVVSW50MzJCRSh6WzFdLDQpLE4ud3JpdGVVSW50MzJCRSh6WzJdLDgpLE4ud3JpdGVVSW50MzJCRSh6WzNdLDEyKSxOfSxG''@;'; put 'put ''LnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oTyl7dmFyIHo9KE89XyhPKSlbMV07T1sxXT1PWzNdLE9bM109ejt2YXIgTj1CKE8sdGhpcy5faW52S2V5U2NoZWR1bGUsUC5JTlZfU1VCX01JWCxQLklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLEw9SS5hbGxvY1Vuc2FmZSgxNik7cmV0''@;'; put 'put ''dXJuIEwud3JpdGVVSW50MzJCRShOWzBdLDApLEwud3JpdGVVSW50MzJCRShOWzNdLDQpLEwud3JpdGVVSW50MzJCRShOWzJdLDgpLEwud3JpdGVVSW50MzJCRShOWzFdLDEyKSxMfSxGLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe2codGhpcy5fa2V5U2NoZWR1bGUpLGcodGhpcy5faW52''@;'; put 'put ''S2V5U2NoZWR1bGUpLGcodGhpcy5fa2V5KX0sdWUuZXhwb3J0cy5BRVM9Rn0sNDg0ODoodWUsWCx5KT0+e3ZhciBJPXkoNDQ5NyksXz15KDk1MDkpLkJ1ZmZlcixnPXkoMTAyNyksQj15KDU3MTcpLHc9eSgzMjg4KSxQPXkoNzI5NSksRj15KDY4NSk7ZnVuY3Rpb24gTihMLEssVSxXKXtnLmNh''@;'; put 'put ''bGwodGhpcyk7dmFyIFk9Xy5hbGxvYyg0LDApO3RoaXMuX2NpcGhlcj1uZXcgSS5BRVMoSyk7dmFyIHE9dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhZKTt0aGlzLl9naGFzaD1uZXcgdyhxKSxVPWZ1bmN0aW9uIHooTCxLLFUpe2lmKDEyPT09Sy5sZW5ndGgpcmV0dXJuIEwuX2ZpbklEPV8u''@;'; put 'put ''Y29uY2F0KFtLLF8uZnJvbShbMCwwLDAsMV0pXSksXy5jb25jYXQoW0ssXy5mcm9tKFswLDAsMCwyXSldKTt2YXIgVz1uZXcgdyhVKSxZPUsubGVuZ3RoLHE9WSUxNjtXLnVwZGF0ZShLKSxxJiZXLnVwZGF0ZShfLmFsbG9jKHE9MTYtcSwwKSksVy51cGRhdGUoXy5hbGxvYyg4LDApKTt2YXIg''@;'; put 'put ''ZWU9OCpZLEo9Xy5hbGxvYyg4KTtKLndyaXRlVUludEJFKGVlLDAsOCksVy51cGRhdGUoSiksTC5fZmluSUQ9Vy5zdGF0ZTt2YXIgbmU9Xy5mcm9tKEwuX2ZpbklEKTtyZXR1cm4gRihuZSksbmV9KHRoaXMsVSxxKSx0aGlzLl9wcmV2PV8uZnJvbShVKSx0aGlzLl9jYWNoZT1fLmFsbG9jVW5z''@;'; put 'put ''YWZlKDApLHRoaXMuX3NlY0NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1XLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPUwsdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1CKE4sZyksTi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihM''@;'; put 'put ''KXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgSz0xNi10aGlzLl9hbGVuJTE2O0s8MTYmJihLPV8uYWxsb2MoSywwKSx0aGlzLl9naGFzaC51cGRhdGUoSykpfXRoaXMuX2NhbGxlZD0hMDt2YXIgVT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxMKTtyZXR1cm4gdGhpcy5fZ2hh''@;'; put 'put ''c2gudXBkYXRlKHRoaXMuX2RlY3J5cHQ/TDpVKSx0aGlzLl9sZW4rPUwubGVuZ3RoLFV9LE4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1''@;'; put 'put ''dGhlbnRpY2F0ZSBkYXRhIik7dmFyIEw9UCh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiBPKEwsSyl7dmFyIFU9MDtMLmxlbmd0aCE9PUsu''@;'; put 'put ''bGVuZ3RoJiZVKys7Zm9yKHZhciBXPU1hdGgubWluKEwubGVuZ3RoLEsubGVuZ3RoKSxZPTA7WTxXOysrWSlVKz1MW1ldXktbWV07cmV0dXJuIFV9KEwsdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRh''@;'; put 'put ''dGEiKTt0aGlzLl9hdXRoVGFnPUwsdGhpcy5fY2lwaGVyLnNjcnViKCl9LE4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwhXy5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFn''@;'; put 'put ''IGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LE4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oSyl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIp''@;'; put 'put ''O3RoaXMuX2F1dGhUYWc9S30sTi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKEspe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShLKSx0aGlzLl9hbGVuKz1LLmxl''@;'; put 'put ''bmd0aH0sdWUuZXhwb3J0cz1OfSw0Njk2Oih1ZSxYLHkpPT57dmFyIEk9eSgxNDk0KSxfPXkoNjE5MyksZz15KDQ5NDYpO1guY3JlYXRlQ2lwaGVyPVguQ2lwaGVyPUkuY3JlYXRlQ2lwaGVyLFguY3JlYXRlQ2lwaGVyaXY9WC5DaXBoZXJpdj1JLmNyZWF0ZUNpcGhlcml2LFguY3JlYXRlRGVj''@;'; put 'put ''aXBoZXI9WC5EZWNpcGhlcj1fLmNyZWF0ZURlY2lwaGVyLFguY3JlYXRlRGVjaXBoZXJpdj1YLkRlY2lwaGVyaXY9Xy5jcmVhdGVEZWNpcGhlcml2LFgubGlzdENpcGhlcnM9WC5nZXRDaXBoZXJzPWZ1bmN0aW9uIEIoKXtyZXR1cm4gT2JqZWN0LmtleXMoZyl9fSw2MTkzOih1ZSxYLHkpPT57''@;'; put 'put ''dmFyIEk9eSg0ODQ4KSxfPXkoOTUwOSkuQnVmZmVyLGc9eSg0NSksQj15KDU5NjkpLHc9eSgxMDI3KSxQPXkoNDQ5NyksRj15KDMwNDgpO2Z1bmN0aW9uIHooVyxZLHEpe3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTix0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IFAu''@;'; put 'put ''QUVTKFkpLHRoaXMuX3ByZXY9Xy5mcm9tKHEpLHRoaXMuX21vZGU9Vyx0aGlzLl9hdXRvcGFkZGluZz0hMH1mdW5jdGlvbiBOKCl7dGhpcy5jYWNoZT1fLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEsoVyxZLHEpe3ZhciBlZT1nW1cudG9Mb3dlckNhc2UoKV07aWYoIWVlKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgcSYmKHE9Xy5mcm9tKHEpKSwiR0NNIiE9PWVlLm1vZGUmJnEubGVuZ3RoIT09ZWUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitxLmxlbmd0aCk7aWYoInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBZJiYoWT1fLmZyb20oWSkpLFkubGVuZ3RoIT09ZWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrWS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09ZWUudHlwZT9uZXcgQihlZS5tb2R1bGUsWSxxLCEwKToiYXV0aCI9PT1lZS50eXBlP25l''@;'; put 'put ''dyBJKGVlLm1vZHVsZSxZLHEsITApOm5ldyB6KGVlLm1vZHVsZSxZLHEpfXkoNTcxNykoeix3KSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFcpe3RoaXMuX2NhY2hlLmFkZChXKTtmb3IodmFyIFkscSxlZT1bXTtZPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KXE9''@;'; put 'put ''dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsWSksZWUucHVzaChxKTtyZXR1cm4gXy5jb25jYXQoZWUpfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVz10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbiBMKFcpe3ZhciBZPVdb''@;'; put 'put ''MTVdO2lmKFk8MXx8WT4xNil0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtmb3IodmFyIHE9LTE7KytxPFk7KWlmKFdbcSsoMTYtWSldIT09WSl0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtpZigxNiE9PVkpcmV0dXJuIFcuc2xpY2Uo''@;'; put 'put ''MCwxNi1ZKX0odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsVykpO2lmKFcpdGhyb3cgbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sei5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVyx0''@;'; put 'put ''aGlzfSxOLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVyl7dGhpcy5jYWNoZT1fLmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9LE4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihXKXt2YXIgWTtpZihXKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gWT10aGlzLmNhY2hlLnNsaWNlKDAsMTYp''@;'; put 'put ''LHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksWX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gWT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksWTtyZXR1cm4gbnVsbH0sTi5wcm90b3R5cGUuZmx1c2g9ZnVu''@;'; put 'put ''Y3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX0sWC5jcmVhdGVEZWNpcGhlcj1mdW5jdGlvbiBVKFcsWSl7dmFyIHE9Z1tXLnRvTG93ZXJDYXNlKCldO2lmKCFxKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBlZT1GKFks''@;'; put 'put ''ITEscS5rZXkscS5pdik7cmV0dXJuIEsoVyxlZS5rZXksZWUuaXYpfSxYLmNyZWF0ZURlY2lwaGVyaXY9S30sMTQ5NDoodWUsWCx5KT0+e3ZhciBJPXkoNDUpLF89eSg0ODQ4KSxnPXkoOTUwOSkuQnVmZmVyLEI9eSg1OTY5KSx3PXkoMTAyNyksUD15KDQ0OTcpLEY9eSgzMDQ4KTtmdW5jdGlv''@;'; put 'put ''biB6KFcsWSxxKXt3LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IEwsdGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhZKSx0aGlzLl9wcmV2PWcuZnJvbShxKSx0aGlzLl9tb2RlPVcsdGhpcy5fYXV0b3BhZGRpbmc9ITB9eSg1NzE3KSh6LHcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24o''@;'; put 'put ''Vyl7dGhpcy5fY2FjaGUuYWRkKFcpO2Zvcih2YXIgWSxxLGVlPVtdO1k9dGhpcy5fY2FjaGUuZ2V0KCk7KXE9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsWSksZWUucHVzaChxKTtyZXR1cm4gZy5jb25jYXQoZWUpfTt2YXIgTj1nLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiBMKCl7dGhpcy5jYWNo''@;'; put 'put ''ZT1nLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEsoVyxZLHEpe3ZhciBlZT1JW1cudG9Mb3dlckNhc2UoKV07aWYoIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgWSYmKFk9Zy5mcm9tKFkpKSxZLmxlbmd0aCE9PWVlLmtl''@;'; put 'put ''eS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK1kubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIHEmJihxPWcuZnJvbShxKSksIkdDTSIhPT1lZS5tb2RlJiZxLmxlbmd0aCE9PWVlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3Ro''@;'; put 'put ''ICIrcS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09ZWUudHlwZT9uZXcgQihlZS5tb2R1bGUsWSxxKToiYXV0aCI9PT1lZS50eXBlP25ldyBfKGVlLm1vZHVsZSxZLHEpOm5ldyB6KGVlLm1vZHVsZSxZLHEpfXoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hl''@;'; put 'put ''LmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIFc9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsVyksdGhpcy5fY2lwaGVyLnNjcnViKCksVztpZighVy5lcXVhbHMoTikpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBi''@;'; put 'put ''bG9jayBsZW5ndGgiKX0sei5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVyx0aGlzfSxMLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVyl7dGhpcy5jYWNoZT1nLmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9LEwucHJvdG90eXBl''@;'; put 'put ''LmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgVz10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFd9cmV0dXJuIG51bGx9LEwucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBXPTE2''@;'; put 'put ''LXRoaXMuY2FjaGUubGVuZ3RoLFk9Zy5hbGxvY1Vuc2FmZShXKSxxPS0xOysrcTxXOylZLndyaXRlVUludDgoVyxxKTtyZXR1cm4gZy5jb25jYXQoW3RoaXMuY2FjaGUsWV0pfSxYLmNyZWF0ZUNpcGhlcml2PUssWC5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24gVShXLFkpe3ZhciBxPUlbVy50b0xv''@;'; put 'put ''d2VyQ2FzZSgpXTtpZighcSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgZWU9RihZLCExLHEua2V5LHEuaXYpO3JldHVybiBLKFcsZWUua2V5LGVlLml2KX19LDMyODg6KHVlLFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcixfPUkuYWxsb2MoMTYsMCk7''@;'; put 'put ''ZnVuY3Rpb24gQihQKXt2YXIgRj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gRi53cml0ZVVJbnQzMkJFKFBbMF0+Pj4wLDApLEYud3JpdGVVSW50MzJCRShQWzFdPj4+MCw0KSxGLndyaXRlVUludDMyQkUoUFsyXT4+PjAsOCksRi53cml0ZVVJbnQzMkJFKFBbM10+Pj4wLDEyKSxGfWZ1bmN0''@;'; put 'put ''aW9uIHcoUCl7dGhpcy5oPVAsdGhpcy5zdGF0ZT1JLmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9SS5hbGxvY1Vuc2FmZSgwKX13LnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihQKXtmb3IodmFyIEY9LTE7KytGPFAubGVuZ3RoOyl0aGlzLnN0YXRlW0ZdXj1QW0ZdO3RoaXMuX211bHRpcGx5KCl9''@;'; put 'put ''LHcucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgTyxOLFA9ZnVuY3Rpb24gZyhQKXtyZXR1cm5bUC5yZWFkVUludDMyQkUoMCksUC5yZWFkVUludDMyQkUoNCksUC5yZWFkVUludDMyQkUoOCksUC5yZWFkVUludDMyQkUoMTIpXX0odGhpcy5oKSxGPVswLDAsMCwwXSxM''@;'; put 'put ''PS0xOysrTDwxMjg7KXtmb3IoISEodGhpcy5zdGF0ZVt+fihMLzgpXSYxPDw3LUwlOCkmJihGWzBdXj1QWzBdLEZbMV1ePVBbMV0sRlsyXV49UFsyXSxGWzNdXj1QWzNdKSxOPSEhKDEmUFszXSksTz0zO08+MDtPLS0pUFtPXT1QW09dPj4+MXwoMSZQW08tMV0pPDwzMTtQWzBdPVBbMF0+Pj4x''@;'; put 'put ''LE4mJihQWzBdPS01MjAwOTM2OTZeUFswXSl9dGhpcy5zdGF0ZT1CKEYpfSx3LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oUCl7dGhpcy5jYWNoZT1JLmNvbmNhdChbdGhpcy5jYWNoZSxQXSk7Zm9yKHZhciBGO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspRj10aGlzLmNhY2hlLnNsaWNlKDAs''@;'; put 'put ''MTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChGKX0sdy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oUCxGKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goSS5jb25jYXQoW3RoaXMuY2FjaGUsX10sMTYpKSx0aGlzLmdoYXNoKEIoWzAs''@;'; put 'put ''UCwwLEZdKSksdGhpcy5zdGF0ZX0sdWUuZXhwb3J0cz13fSw2ODU6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uIFgoeSl7Zm9yKHZhciBfLEk9eS5sZW5ndGg7SS0tOyl7aWYoMjU1IT09KF89eS5yZWFkVUludDgoSSkpKXtfKysseS53cml0ZVVJbnQ4KF8sSSk7YnJlYWt9eS53cml0ZVVJbnQ4''@;'; put 'put ''KDAsSSl9fX0sNTI5MjoodWUsWCx5KT0+e3ZhciBJPXkoNzI5NSk7WC5lbmNyeXB0PWZ1bmN0aW9uKF8sZyl7dmFyIEI9SShnLF8uX3ByZXYpO3JldHVybiBfLl9wcmV2PV8uX2NpcGhlci5lbmNyeXB0QmxvY2soQiksXy5fcHJldn0sWC5kZWNyeXB0PWZ1bmN0aW9uKF8sZyl7dmFyIEI9Xy5f''@;'; put 'put ''cHJldjtfLl9wcmV2PWc7dmFyIHc9Xy5fY2lwaGVyLmRlY3J5cHRCbG9jayhnKTtyZXR1cm4gSSh3LEIpfX0sNjMxMToodWUsWCx5KT0+e3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89eSg3Mjk1KTtmdW5jdGlvbiBnKEIsdyxQKXt2YXIgRj13Lmxlbmd0aCxPPV8odyxCLl9jYWNoZSk7cmV0dXJu''@;'; put 'put ''IEIuX2NhY2hlPUIuX2NhY2hlLnNsaWNlKEYpLEIuX3ByZXY9SS5jb25jYXQoW0IuX3ByZXYsUD93Ok9dKSxPfVguZW5jcnlwdD1mdW5jdGlvbihCLHcsUCl7Zm9yKHZhciBPLEY9SS5hbGxvY1Vuc2FmZSgwKTt3Lmxlbmd0aDspe2lmKDA9PT1CLl9jYWNoZS5sZW5ndGgmJihCLl9jYWNoZT1C''@;'; put 'put ''Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKEIuX3ByZXYpLEIuX3ByZXY9SS5hbGxvY1Vuc2FmZSgwKSksIShCLl9jYWNoZS5sZW5ndGg8PXcubGVuZ3RoKSl7Rj1JLmNvbmNhdChbRixnKEIsdyxQKV0pO2JyZWFrfUY9SS5jb25jYXQoW0YsZyhCLHcuc2xpY2UoMCxPPUIuX2NhY2hlLmxlbmd0aCks''@;'; put 'put ''UCldKSx3PXcuc2xpY2UoTyl9cmV0dXJuIEZ9fSwxNTEwOih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gXyhCLHcsUCl7Zm9yKHZhciBMLEssTz0tMSxOPTA7KytPPDg7KU4rPSgxMjgmKEs9Qi5fY2lwaGVyLmVuY3J5cHRCbG9jayhCLl9wcmV2KVswXV4oTD13JjE8''@;'; put 'put ''PDctTz8xMjg6MCkpKT4+TyU4LEIuX3ByZXY9ZyhCLl9wcmV2LFA/TDpLKTtyZXR1cm4gTn1mdW5jdGlvbiBnKEIsdyl7dmFyIFA9Qi5sZW5ndGgsRj0tMSxPPUkuYWxsb2NVbnNhZmUoQi5sZW5ndGgpO2ZvcihCPUkuY29uY2F0KFtCLEkuZnJvbShbd10pXSk7KytGPFA7KU9bRl09QltGXTw8''@;'; put 'put ''MXxCW0YrMV0+Pjc7cmV0dXJuIE99WC5lbmNyeXB0PWZ1bmN0aW9uKEIsdyxQKXtmb3IodmFyIEY9dy5sZW5ndGgsTz1JLmFsbG9jVW5zYWZlKEYpLHo9LTE7Kyt6PEY7KU9bel09XyhCLHdbel0sUCk7cmV0dXJuIE99fSwxOTY0Oih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXI7ZnVu''@;'; put 'put ''Y3Rpb24gXyhnLEIsdyl7dmFyIEY9Zy5fY2lwaGVyLmVuY3J5cHRCbG9jayhnLl9wcmV2KVswXV5CO3JldHVybiBnLl9wcmV2PUkuY29uY2F0KFtnLl9wcmV2LnNsaWNlKDEpLEkuZnJvbShbdz9COkZdKV0pLEZ9WC5lbmNyeXB0PWZ1bmN0aW9uKGcsQix3KXtmb3IodmFyIFA9Qi5sZW5ndGgs''@;'; put 'put ''Rj1JLmFsbG9jVW5zYWZlKFApLE89LTE7KytPPFA7KUZbT109XyhnLEJbT10sdyk7cmV0dXJuIEZ9fSw2MDA5Oih1ZSxYLHkpPT57dmFyIEk9eSg3Mjk1KSxfPXkoOTUwOSkuQnVmZmVyLGc9eSg2ODUpO2Z1bmN0aW9uIEIoUCl7dmFyIEY9UC5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhQLl9w''@;'; put 'put ''cmV2KTtyZXR1cm4gZyhQLl9wcmV2KSxGfVguZW5jcnlwdD1mdW5jdGlvbihQLEYpe3ZhciBPPU1hdGguY2VpbChGLmxlbmd0aC8xNiksej1QLl9jYWNoZS5sZW5ndGg7UC5fY2FjaGU9Xy5jb25jYXQoW1AuX2NhY2hlLF8uYWxsb2NVbnNhZmUoMTYqTyldKTtmb3IodmFyIE49MDtOPE87Tisr''@;'; put 'put ''KXt2YXIgTD1CKFApLEs9eisxNipOO1AuX2NhY2hlLndyaXRlVUludDMyQkUoTFswXSxLKzApLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFsxXSxLKzQpLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFsyXSxLKzgpLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFszXSxLKzEyKX12YXIgVT1QLl9j''@;'; put 'put ''YWNoZS5zbGljZSgwLEYubGVuZ3RoKTtyZXR1cm4gUC5fY2FjaGU9UC5fY2FjaGUuc2xpY2UoRi5sZW5ndGgpLEkoRixVKX19LDEwODQ6KHVlLFgpPT57WC5lbmNyeXB0PWZ1bmN0aW9uKHksSSl7cmV0dXJuIHkuX2NpcGhlci5lbmNyeXB0QmxvY2soSSl9LFguZGVjcnlwdD1mdW5jdGlvbih5''@;'; put 'put ''LEkpe3JldHVybiB5Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKEkpfX0sNDU6KHVlLFgseSk9Pnt2YXIgST17RUNCOnkoMTA4NCksQ0JDOnkoNTI5MiksQ0ZCOnkoNjMxMSksQ0ZCODp5KDE5NjQpLENGQjE6eSgxNTEwKSxPRkI6eSg4ODYxKSxDVFI6eSg2MDA5KSxHQ006eSg2MDA5KX0sXz15KDQ5''@;'; put 'put ''NDYpO2Zvcih2YXIgZyBpbiBfKV9bZ10ubW9kdWxlPUlbX1tnXS5tb2RlXTt1ZS5leHBvcnRzPV99LDg4NjE6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXkoNzI5NSk7ZnVuY3Rpb24gZyhCKXtyZXR1cm4gQi5fcHJldj1CLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIuX3ByZXYp''@;'; put 'put ''LEIuX3ByZXZ9WC5lbmNyeXB0PWZ1bmN0aW9uKEIsdyl7Zm9yKDtCLl9jYWNoZS5sZW5ndGg8dy5sZW5ndGg7KUIuX2NhY2hlPUkuY29uY2F0KFtCLl9jYWNoZSxnKEIpXSk7dmFyIFA9Qi5fY2FjaGUuc2xpY2UoMCx3Lmxlbmd0aCk7cmV0dXJuIEIuX2NhY2hlPUIuX2NhY2hlLnNsaWNlKHcu''@;'; put 'put ''bGVuZ3RoKSxfKHcsUCl9fSw1OTY5Oih1ZSxYLHkpPT57dmFyIEk9eSg0NDk3KSxfPXkoOTUwOSkuQnVmZmVyLGc9eSgxMDI3KTtmdW5jdGlvbiB3KFAsRixPLHope2cuY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IEkuQUVTKEYpLHRoaXMuX3ByZXY9Xy5mcm9tKE8pLHRoaXMuX2NhY2hl''@;'; put 'put ''PV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PXosdGhpcy5fbW9kZT1QfXkoNTcxNykodyxnKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxQLHRoaXMuX2Rl''@;'; put 'put ''Y3J5cHQpfSx3LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sdWUuZXhwb3J0cz13fSwzNjE0Oih1ZSxYLHkpPT57dmFyIEk9eSg3NjY3KSxfPXkoNDY5NiksZz15KDQ1KSxCPXkoOTcxNSksdz15KDMwNDgpO2Z1bmN0aW9uIE8oTCxLLFUpe2lmKEw9''@;'; put 'put ''TC50b0xvd2VyQ2FzZSgpLGdbTF0pcmV0dXJuIF8uY3JlYXRlQ2lwaGVyaXYoTCxLLFUpO2lmKEJbTF0pcmV0dXJuIG5ldyBJKHtrZXk6SyxpdjpVLG1vZGU6TH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIHooTCxLLFUpe2lmKEw9TC50b0xv''@;'; put 'put ''d2VyQ2FzZSgpLGdbTF0pcmV0dXJuIF8uY3JlYXRlRGVjaXBoZXJpdihMLEssVSk7aWYoQltMXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlUsbW9kZTpMLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1YLmNyZWF0ZUNpcGhlcj1YLkNpcGhl''@;'; put 'put ''cj1mdW5jdGlvbiBQKEwsSyl7dmFyIFUsVztpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKVU9Z1tMXS5rZXksVz1nW0xdLml2O2Vsc2V7aWYoIUJbTF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7VT04KkJbTF0ua2V5LFc9QltMXS5pdn12YXIgWT13KEssITEs''@;'; put 'put ''VSxXKTtyZXR1cm4gTyhMLFkua2V5LFkuaXYpfSxYLmNyZWF0ZUNpcGhlcml2PVguQ2lwaGVyaXY9TyxYLmNyZWF0ZURlY2lwaGVyPVguRGVjaXBoZXI9ZnVuY3Rpb24gRihMLEspe3ZhciBVLFc7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlVPWdbTF0ua2V5LFc9Z1tMXS5pdjtlbHNle2lm''@;'; put 'put ''KCFCW0xdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1U9OCpCW0xdLmtleSxXPUJbTF0uaXZ9dmFyIFk9dyhLLCExLFUsVyk7cmV0dXJuIHooTCxZLmtleSxZLml2KX0sWC5jcmVhdGVEZWNpcGhlcml2PVguRGVjaXBoZXJpdj16LFgubGlzdENpcGhlcnM9WC5n''@;'; put 'put ''ZXRDaXBoZXJzPWZ1bmN0aW9uIE4oKXtyZXR1cm4gT2JqZWN0LmtleXMoQikuY29uY2F0KF8uZ2V0Q2lwaGVycygpKX19LDc2Njc6KHVlLFgseSk9Pnt2YXIgST15KDEwMjcpLF89eSg1MjUxKSxnPXkoNTcxNyksQj15KDk1MDkpLkJ1ZmZlcix3PXsiZGVzLWVkZTMtY2JjIjpfLkNCQy5pbnN0''@;'; put 'put ''YW50aWF0ZShfLkVERSksImRlcy1lZGUzIjpfLkVERSwiZGVzLWVkZS1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVkZSI6Xy5FREUsImRlcy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uREVTKSwiZGVzLWVjYiI6Xy5ERVN9O2Z1bmN0aW9uIFAoRil7SS5jYWxsKHRoaXMp''@;'; put 'put ''O3ZhciBOLE89Ri5tb2RlLnRvTG93ZXJDYXNlKCksej13W09dO049Ri5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIEw9Ri5rZXk7Qi5pc0J1ZmZlcihMKXx8KEw9Qi5mcm9tKEwpKSwoImRlcy1lZGUiPT09T3x8ImRlcy1lZGUtY2JjIj09PU8pJiYoTD1CLmNvbmNhdChbTCxMLnNs''@;'; put 'put ''aWNlKDAsOCldKSk7dmFyIEs9Ri5pdjtCLmlzQnVmZmVyKEspfHwoSz1CLmZyb20oSykpLHRoaXMuX2Rlcz16LmNyZWF0ZSh7a2V5OkwsaXY6Syx0eXBlOk59KX13LmRlcz13WyJkZXMtY2JjIl0sdy5kZXMzPXdbImRlcy1lZGUzLWNiYyJdLHVlLmV4cG9ydHM9UCxnKFAsSSksUC5wcm90b3R5''@;'; put 'put ''cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gQi5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoRikpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gQi5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDk3MTU6KHVlLFgpPT57WFsiZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxY''@;'; put 'put ''WyJkZXMtY2JjIl09WC5kZXM9e2tleTo4LGl2Ojh9LFhbImRlcy1lZGUzLWNiYyJdPVguZGVzMz17a2V5OjI0LGl2Ojh9LFhbImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxYWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sWFsiZGVzLWVkZSJdPXtrZXk6MTYsaXY6MH19LDM2NjM6KHVl''@;'; put 'put ''LFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNTUwKSxfPXkoMTc5OCksZz15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBCKEYpe3ZhciB6LE89Ri5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtkb3t6PW5ldyBJKF8oTykpfXdoaWxlKHouY21wKEYubW9kdWx1cyk+PTB8fCF6LnVtb2QoRi5wcmlt''@;'; put 'put ''ZTEpfHwhei51bW9kKEYucHJpbWUyKSk7cmV0dXJuIHp9ZnVuY3Rpb24gUChGLE8pe3ZhciB6PWZ1bmN0aW9uIHcoRil7dmFyIE89QihGKTtyZXR1cm57YmxpbmRlcjpPLnRvUmVkKEkubW9udChGLm1vZHVsdXMpKS5yZWRQb3cobmV3IEkoRi5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKSx1''@;'; put 'put ''bmJsaW5kZXI6Ty5pbnZtKEYubW9kdWx1cyl9fShPKSxOPU8ubW9kdWx1cy5ieXRlTGVuZ3RoKCksTD1uZXcgSShGKS5tdWwoei5ibGluZGVyKS51bW9kKE8ubW9kdWx1cyksSz1MLnRvUmVkKEkubW9udChPLnByaW1lMSkpLFU9TC50b1JlZChJLm1vbnQoTy5wcmltZTIpKSxXPU8uY29lZmZp''@;'; put 'put ''Y2llbnQsWT1PLnByaW1lMSxxPU8ucHJpbWUyLGVlPUsucmVkUG93KE8uZXhwb25lbnQxKS5mcm9tUmVkKCksSj1VLnJlZFBvdyhPLmV4cG9uZW50MikuZnJvbVJlZCgpLG5lPWVlLmlzdWIoSikuaW11bChXKS51bW9kKFkpLmltdWwocSk7cmV0dXJuIEouaWFkZChuZSkuaW11bCh6LnVuYmxp''@;'; put 'put ''bmRlcikudW1vZChPLm1vZHVsdXMpLnRvQXJyYXlMaWtlKGcsImJlIixOKX1QLmdldHI9Qix1ZS5leHBvcnRzPVB9LDYwNDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz15KDUyMDcpfSw0NzQzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUwOSkuQnVmZmVy''@;'; put 'put ''LF89eSgzNDgyKSxnPXkoMzg3MiksQj15KDU3MTcpLHc9eSgyOTU3KSxQPXkoNzc1MyksRj15KDUyMDcpO2Z1bmN0aW9uIE8oSyl7Zy5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBVPUZbS107aWYoIVUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFz''@;'; put 'put ''aFR5cGU9VS5oYXNoLHRoaXMuX2hhc2g9XyhVLmhhc2gpLHRoaXMuX3RhZz1VLmlkLHRoaXMuX3NpZ25UeXBlPVUuc2lnbn1mdW5jdGlvbiB6KEspe2cuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgVT1GW0tdO2lmKCFVKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIp''@;'; put 'put ''O3RoaXMuX2hhc2g9XyhVLmhhc2gpLHRoaXMuX3RhZz1VLmlkLHRoaXMuX3NpZ25UeXBlPVUuc2lnbn1mdW5jdGlvbiBOKEspe3JldHVybiBuZXcgTyhLKX1mdW5jdGlvbiBMKEspe3JldHVybiBuZXcgeihLKX1PYmplY3Qua2V5cyhGKS5mb3JFYWNoKGZ1bmN0aW9uKEspe0ZbS10uaWQ9SS5m''@;'; put 'put ''cm9tKEZbS10uaWQsImhleCIpLEZbSy50b0xvd2VyQ2FzZSgpXT1GW0tdfSksQihPLGcuV3JpdGFibGUpLE8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihVLFcsWSl7dGhpcy5faGFzaC51cGRhdGUoVSksWSgpfSxPLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVSxXKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBVP0kuZnJvbShVLFcpOlUpLHRoaXN9LE8ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oVSxXKXt0aGlzLmVuZCgpO3ZhciBZPXRoaXMuX2hhc2guZGlnZXN0KCkscT13KFksVSx0aGlzLl9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSx0aGlz''@;'; put 'put ''Ll90YWcpO3JldHVybiBXP3EudG9TdHJpbmcoVyk6cX0sQih6LGcuV3JpdGFibGUpLHoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihVLFcsWSl7dGhpcy5faGFzaC51cGRhdGUoVSksWSgpfSx6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVSxXKXtyZXR1cm4gdGhpcy5faGFzaC51cGRh''@;'; put 'put ''dGUoInN0cmluZyI9PXR5cGVvZiBVP0kuZnJvbShVLFcpOlUpLHRoaXN9LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihVLFcsWSl7dmFyIHE9InN0cmluZyI9PXR5cGVvZiBXP0kuZnJvbShXLFkpOlc7dGhpcy5lbmQoKTt2YXIgZWU9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gUChx''@;'; put 'put ''LGVlLFUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sdWUuZXhwb3J0cz17U2lnbjpOLFZlcmlmeTpMLGNyZWF0ZVNpZ246TixjcmVhdGVWZXJpZnk6TH19LDI5NTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz15KDgzNTUpLGc9eSgzNjYzKSxCPXko''@;'; put 'put ''Njk0OCkuZWMsdz15KDM1NTApLFA9eSg5ODApLEY9eSgxMzA4KTtmdW5jdGlvbiBVKEosbmUsaWUsbGUpe2lmKChKPUkuZnJvbShKLnRvQXJyYXkoKSkpLmxlbmd0aDxuZS5ieXRlTGVuZ3RoKCkpe3ZhciBtZT1JLmFsbG9jKG5lLmJ5dGVMZW5ndGgoKS1KLmxlbmd0aCk7Sj1JLmNvbmNhdChb''@;'; put 'put ''bWUsSl0pfXZhciBfZT1pZS5sZW5ndGgsVGU9ZnVuY3Rpb24gWShKLG5lKXtKPShKPVcoSixuZSkpLm1vZChuZSk7dmFyIGllPUkuZnJvbShKLnRvQXJyYXkoKSk7aWYoaWUubGVuZ3RoPG5lLmJ5dGVMZW5ndGgoKSl7dmFyIGxlPUkuYWxsb2MobmUuYnl0ZUxlbmd0aCgpLWllLmxlbmd0aCk7''@;'; put 'put ''aWU9SS5jb25jYXQoW2xlLGllXSl9cmV0dXJuIGllfShpZSxuZSksU2U9SS5hbGxvYyhfZSk7U2UuZmlsbCgxKTt2YXIgamU9SS5hbGxvYyhfZSk7cmV0dXJuIGplPV8obGUsamUpLnVwZGF0ZShTZSkudXBkYXRlKEkuZnJvbShbMF0pKS51cGRhdGUoSikudXBkYXRlKFRlKS5kaWdlc3QoKSxT''@;'; put 'put ''ZT1fKGxlLGplKS51cGRhdGUoU2UpLmRpZ2VzdCgpLHtrOmplPV8obGUsamUpLnVwZGF0ZShTZSkudXBkYXRlKEkuZnJvbShbMV0pKS51cGRhdGUoSikudXBkYXRlKFRlKS5kaWdlc3QoKSx2OlNlPV8obGUsamUpLnVwZGF0ZShTZSkuZGlnZXN0KCl9fWZ1bmN0aW9uIFcoSixuZSl7dmFyIGll''@;'; put 'put ''PW5ldyB3KEopLGxlPShKLmxlbmd0aDw8MyktbmUuYml0TGVuZ3RoKCk7cmV0dXJuIGxlPjAmJmllLmlzaHJuKGxlKSxpZX1mdW5jdGlvbiBxKEosbmUsaWUpe3ZhciBsZSxtZTtkb3tmb3IobGU9SS5hbGxvYygwKTs4KmxlLmxlbmd0aDxKLmJpdExlbmd0aCgpOyluZS52PV8oaWUsbmUuayku''@;'; put 'put ''dXBkYXRlKG5lLnYpLmRpZ2VzdCgpLGxlPUkuY29uY2F0KFtsZSxuZS52XSk7bWU9VyhsZSxKKSxuZS5rPV8oaWUsbmUuaykudXBkYXRlKG5lLnYpLnVwZGF0ZShJLmZyb20oWzBdKSkuZGlnZXN0KCksbmUudj1fKGllLG5lLmspLnVwZGF0ZShuZS52KS5kaWdlc3QoKX13aGlsZSgtMSE9PW1l''@;'; put 'put ''LmNtcChKKSk7cmV0dXJuIG1lfWZ1bmN0aW9uIGVlKEosbmUsaWUsbGUpe3JldHVybiBKLnRvUmVkKHcubW9udChpZSkpLnJlZFBvdyhuZSkuZnJvbVJlZCgpLm1vZChsZSl9dWUuZXhwb3J0cz1mdW5jdGlvbiB6KEosbmUsaWUsbGUsbWUpe3ZhciBfZT1QKG5lKTtpZihfZS5jdXJ2ZSl7aWYo''@;'; put 'put ''ImVjZHNhIiE9PWxlJiYiZWNkc2EvcnNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBOKEosbmUpe3ZhciBpZT1GW25lLmN1cnZlLmpvaW4oIi4iKV07aWYoIWllKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAi''@;'; put 'put ''K25lLmN1cnZlLmpvaW4oIi4iKSk7dmFyIF9lPW5ldyBCKGllKS5rZXlGcm9tUHJpdmF0ZShuZS5wcml2YXRlS2V5KS5zaWduKEopO3JldHVybiBJLmZyb20oX2UudG9ERVIoKSl9KEosX2UpfWlmKCJkc2EiPT09X2UudHlwZSl7aWYoImRzYSIhPT1sZSl0aHJvdyBuZXcgRXJyb3IoIndyb25n''@;'; put 'put ''IHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTChKLG5lLGllKXtmb3IodmFyIGplLGxlPW5lLnBhcmFtcy5wcml2X2tleSxtZT1uZS5wYXJhbXMucCxfZT1uZS5wYXJhbXMucSxUZT1uZS5wYXJhbXMuZyxTZT1uZXcgdygwKSxWPVcoSixfZSkubW9kKF9lKSxwPSExLGI9VShs''@;'; put 'put ''ZSxfZSxKLGllKTshMT09PXA7KVNlPWVlKFRlLGplPXEoX2UsYixpZSksbWUsX2UpLDA9PT0ocD1qZS5pbnZtKF9lKS5pbXVsKFYuYWRkKGxlLm11bChTZSkpKS5tb2QoX2UpKS5jbXBuKDApJiYocD0hMSxTZT1uZXcgdygwKSk7cmV0dXJuIGZ1bmN0aW9uIEsoSixuZSl7Sj1KLnRvQXJyYXko''@;'; put 'put ''KSxuZT1uZS50b0FycmF5KCksMTI4JkpbMF0mJihKPVswXS5jb25jYXQoSikpLDEyOCZuZVswXSYmKG5lPVswXS5jb25jYXQobmUpKTt2YXIgbGU9WzQ4LEoubGVuZ3RoK25lLmxlbmd0aCs0LDIsSi5sZW5ndGhdO3JldHVybiBsZT1sZS5jb25jYXQoSixbMixuZS5sZW5ndGhdLG5lKSxJLmZy''@;'; put 'put ''b20obGUpfShTZSxwKX0oSixfZSxpZSl9aWYoInJzYSIhPT1sZSYmImVjZHNhL3JzYSIhPT1sZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtpZih2b2lkIDAhPT1uZS5wYWRkaW5nJiYxIT09bmUucGFkZGluZyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgb3Ig''@;'; put 'put ''dW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIik7Sj1JLmNvbmNhdChbbWUsSl0pO2Zvcih2YXIgVGU9X2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksU2U9WzAsMV07Si5sZW5ndGgrU2UubGVuZ3RoKzE8VGU7KVNlLnB1c2goMjU1KTtTZS5wdXNoKDApO2Zvcih2YXIgamU9LTE7KytqZTxKLmxlbmd0''@;'; put 'put ''aDspU2UucHVzaChKW2plXSk7cmV0dXJuIGcoU2UsX2UpfSx1ZS5leHBvcnRzLmdldEtleT1VLHVlLmV4cG9ydHMubWFrZUtleT1xfSw3NzUzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89eSgzNTUwKSxnPXkoNjk0OCkuZWMsQj15KDk4MCksdz15KDEz''@;'; put 'put ''MDgpO2Z1bmN0aW9uIHooTixMKXtpZihOLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKE4uY21wKEwpPj0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX11ZS5leHBvcnRzPWZ1bmN0aW9uIFAoTixMLEssVSxXKXt2YXIgWT1CKEspO2lmKCJlYyI9''@;'; put 'put ''PT1ZLnR5cGUpe2lmKCJlY2RzYSIhPT1VJiYiZWNkc2EvcnNhIiE9PVUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gRihOLEwsSyl7dmFyIFU9d1tLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYoIVUpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJ1bmtub3duIGN1cnZlICIrSy5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcgZyhVKS52ZXJpZnkoTCxOLEsuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oTixMLFkpfWlmKCJkc2EiPT09WS50eXBlKXtpZigiZHNhIiE9PVUpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTyhOLEwsSyl7dmFyIFU9Sy5kYXRhLnAsVz1LLmRhdGEucSxZPUsuZGF0YS5nLHE9Sy5kYXRhLnB1Yl9rZXksZWU9Qi5zaWduYXR1cmUuZGVjb2RlKE4sImRlciIpLEo9ZWUucyxuZT1lZS5yO3ooSixXKSx6''@;'; put 'put ''KG5lLFcpO3ZhciBpZT1fLm1vbnQoVSksbGU9Si5pbnZtKFcpO3JldHVybiAwPT09WS50b1JlZChpZSkucmVkUG93KG5ldyBfKEwpLm11bChsZSkubW9kKFcpKS5mcm9tUmVkKCkubXVsKHEudG9SZWQoaWUpLnJlZFBvdyhuZS5tdWwobGUpLm1vZChXKSkuZnJvbVJlZCgpKS5tb2QoVSkubW9k''@;'; put 'put ''KFcpLmNtcChuZSl9KE4sTCxZKX1pZigicnNhIiE9PVUmJiJlY2RzYS9yc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO0w9SS5jb25jYXQoW1csTF0pO2Zvcih2YXIgcT1ZLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGVlPVsxXSxKPTA7TC5sZW5ndGgrZWUu''@;'; put 'put ''bGVuZ3RoKzI8cTspZWUucHVzaCgyNTUpLEorPTE7ZWUucHVzaCgwKTtmb3IodmFyIG5lPS0xOysrbmU8TC5sZW5ndGg7KWVlLnB1c2goTFtuZV0pO2VlPUkuZnJvbShlZSk7dmFyIGllPV8ubW9udChZLm1vZHVsdXMpO049KE49bmV3IF8oTikudG9SZWQoaWUpKS5yZWRQb3cobmV3IF8oWS5w''@;'; put 'put ''dWJsaWNFeHBvbmVudCkpLE49SS5mcm9tKE4uZnJvbVJlZCgpLnRvQXJyYXkoKSk7dmFyIGxlPUo8OD8xOjA7Zm9yKHE9TWF0aC5taW4oTi5sZW5ndGgsZWUubGVuZ3RoKSxOLmxlbmd0aCE9PWVlLmxlbmd0aCYmKGxlPTEpLG5lPS0xOysrbmU8cTspbGV8PU5bbmVdXmVlW25lXTtyZXR1cm4g''@;'; put 'put ''MD09PWxlfX0sNDM5MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDgyMTIpLF89T2JqZWN0LmtleXN8fGZ1bmN0aW9uKEspe3ZhciBVPVtdO2Zvcih2YXIgVyBpbiBLKVUucHVzaChXKTtyZXR1cm4gVX07dWUuZXhwb3J0cz16O3ZhciBnPU9iamVjdC5jcmVhdGUoeSg2NDk3KSk7''@;'; put 'put ''Zy5pbmhlcml0cz15KDU3MTcpO3ZhciBCPXkoNDk2MCksdz15KDIwMTApO2cuaW5oZXJpdHMoeixCKTtmb3IodmFyIFA9Xyh3LnByb3RvdHlwZSksRj0wO0Y8UC5sZW5ndGg7RisrKXt2YXIgTz1QW0ZdO3oucHJvdG90eXBlW09dfHwoei5wcm90b3R5cGVbT109dy5wcm90b3R5cGVbT10pfWZ1''@;'; put 'put ''bmN0aW9uIHooSyl7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KEspO0IuY2FsbCh0aGlzLEspLHcuY2FsbCh0aGlzLEspLEsmJiExPT09Sy5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLEsmJiExPT09Sy53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLHRoaXMu''@;'; put 'put ''YWxsb3dIYWxmT3Blbj0hMCxLJiYhMT09PUsuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdGhpcy5vbmNlKCJlbmQiLE4pfWZ1bmN0aW9uIE4oKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fEkubmV4dFRpY2soTCx0aGlzKX1m''@;'; put 'put ''dW5jdGlvbiBMKEspe0suZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KHoucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oSyl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUssdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syl9fSksei5wcm90''@;'; put 'put ''b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oSyxVKXt0aGlzLnB1c2gobnVsbCksdGhpcy5lbmQoKSxJLm5leHRUaWNrKFUsSyl9fSwxMjk0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Zzt2YXIgST15KDM5MTIpLF89T2JqZWN0LmNyZWF0ZSh5KDY0OTcpKTtmdW5jdGlvbiBn''@;'; put 'put ''KEIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhCKTtJLmNhbGwodGhpcyxCKX1fLmluaGVyaXRzPXkoNTcxNyksXy5pbmhlcml0cyhnLEkpLGcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oQix3LFApe1AobnVsbCxCKX19LDQ5NjA6KHVlLFgseSk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoODIxMik7dWUuZXhwb3J0cz1sZTt2YXIgQixnPXkoNTgyNik7bGUuUmVhZGFibGVTdGF0ZT1pZSx5KDcxODcpO3ZhciBQPWZ1bmN0aW9uKHZlLFhlKXtyZXR1cm4gdmUubGlzdGVuZXJzKFhlKS5sZW5ndGh9LEY9eSg5ODE5KSxPPXkoMTU3Miku''@;'; put 'put ''QnVmZmVyLHo9KHR5cGVvZiB5Lmc8InUiP3kuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxLPU9iamVjdC5jcmVhdGUoeSg2NDk3KSk7Sy5pbmhlcml0cz15KDU3MTcpO3ZhciBVPXkoNjM1MyksVz12''@;'; put 'put ''b2lkIDA7Vz1VJiZVLmRlYnVnbG9nP1UuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgZWUsWT15KDIyNjcpLHE9eSg1OTk3KTtLLmluaGVyaXRzKGxlLEYpO3ZhciBKPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIGllKHZl''@;'; put 'put ''LFhlKXt2YXIgemU9WGUgaW5zdGFuY2VvZihCPUJ8fHkoNDM5MCkpO3RoaXMub2JqZWN0TW9kZT0hISh2ZT12ZXx8e30pLm9iamVjdE1vZGUsemUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXZlLnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIERlPXZlLmhpZ2hXYXRlck1h''@;'; put 'put ''cmssRmU9dmUucmVhZGFibGVIaWdoV2F0ZXJNYXJrO3RoaXMuaGlnaFdhdGVyTWFyaz1EZXx8MD09PURlP0RlOnplJiYoRmV8fDA9PT1GZSk/RmU6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5i''@;'; put 'put ''dWZmZXI9bmV3IFksdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlz''@;'; put 'put ''LmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPXZlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGlu''@;'; put 'put ''Z01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHZlLmVuY29kaW5nJiYoZWV8fChlZT15KDIyMjEpLnMpLHRoaXMuZGVjb2Rlcj1uZXcgZWUodmUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9dmUuZW5jb2RpbmcpfWZ1bmN0aW9uIGxlKHZlKXtpZihCPUJ8fHko''@;'; put 'put ''NDM5MCksISh0aGlzIGluc3RhbmNlb2YgbGUpKXJldHVybiBuZXcgbGUodmUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IGllKHZlLHRoaXMpLHRoaXMucmVhZGFibGU9ITAsdmUmJigiZnVuY3Rpb24iPT10eXBlb2YgdmUucmVhZCYmKHRoaXMuX3JlYWQ9dmUucmVhZCksImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIHZlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXZlLmRlc3Ryb3kpKSxGLmNhbGwodGhpcyl9ZnVuY3Rpb24gbWUodmUsWGUsemUsRGUsRmUpe3ZhciBJZSxPZT12ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gbnVsbD09PVhlPyhPZS5yZWFkaW5nPSExLGZ1bmN0aW9uIGIodmUsWGUp''@;'; put 'put ''e2lmKCFYZS5lbmRlZCl7aWYoWGUuZGVjb2Rlcil7dmFyIHplPVhlLmRlY29kZXIuZW5kKCk7emUmJnplLmxlbmd0aCYmKFhlLmJ1ZmZlci5wdXNoKHplKSxYZS5sZW5ndGgrPVhlLm9iamVjdE1vZGU/MTp6ZS5sZW5ndGgpfVhlLmVuZGVkPSEwLHgodmUpfX0odmUsT2UpKTooRmV8fChJZT1m''@;'; put 'put ''dW5jdGlvbiBUZSh2ZSxYZSl7dmFyIHplO3JldHVybiFmdW5jdGlvbiBMKHZlKXtyZXR1cm4gTy5pc0J1ZmZlcih2ZSl8fHZlIGluc3RhbmNlb2Ygen0oWGUpJiYic3RyaW5nIiE9dHlwZW9mIFhlJiZ2b2lkIDAhPT1YZSYmIXZlLm9iamVjdE1vZGUmJih6ZT1uZXcgVHlwZUVycm9yKCJJbnZh''@;'; put 'put ''bGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLHplfShPZSxYZSkpLEllP3ZlLmVtaXQoImVycm9yIixJZSk6T2Uub2JqZWN0TW9kZXx8WGUmJlhlLmxlbmd0aD4wPygic3RyaW5nIiE9dHlwZW9mIFhlJiYhT2Uub2JqZWN0TW9kZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKFhlKSE9PU8u''@;'; put 'put ''cHJvdG90eXBlJiYoWGU9ZnVuY3Rpb24gTih2ZSl7cmV0dXJuIE8uZnJvbSh2ZSl9KFhlKSksRGU/T2UuZW5kRW1pdHRlZD92ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpKTpfZSh2ZSxPZSxYZSwhMCk6T2UuZW5kZWQ/dmUuZW1p''@;'; put 'put ''dCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSk6KE9lLnJlYWRpbmc9ITEsT2UuZGVjb2RlciYmIXplPyhYZT1PZS5kZWNvZGVyLndyaXRlKFhlKSxPZS5vYmplY3RNb2RlfHwwIT09WGUubGVuZ3RoP19lKHZlLE9lLFhlLCExKTpUKHZlLE9lKSk6X2UodmUs''@;'; put 'put ''T2UsWGUsITEpKSk6RGV8fChPZS5yZWFkaW5nPSExKSksZnVuY3Rpb24gU2UodmUpe3JldHVybiF2ZS5lbmRlZCYmKHZlLm5lZWRSZWFkYWJsZXx8dmUubGVuZ3RoPHZlLmhpZ2hXYXRlck1hcmt8fDA9PT12ZS5sZW5ndGgpfShPZSl9ZnVuY3Rpb24gX2UodmUsWGUsemUsRGUpe1hlLmZsb3dp''@;'; put 'put ''bmcmJjA9PT1YZS5sZW5ndGgmJiFYZS5zeW5jPyh2ZS5lbWl0KCJkYXRhIix6ZSksdmUucmVhZCgwKSk6KFhlLmxlbmd0aCs9WGUub2JqZWN0TW9kZT8xOnplLmxlbmd0aCxEZT9YZS5idWZmZXIudW5zaGlmdCh6ZSk6WGUuYnVmZmVyLnB1c2goemUpLFhlLm5lZWRSZWFkYWJsZSYmeCh2ZSkp''@;'; put 'put ''LFQodmUsWGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHZlKXt0aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9dmUpfX0pLGxlLnByb3RvdHlwZS5kZXN0cm95PXEuZGVzdHJveSxsZS5wcm90b3R5cGUuX3VuZGVzdHJveT1xLnVuZGVzdHJveSxsZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odmUsWGUpe3RoaXMucHVz''@;'; put 'put ''aChudWxsKSxYZSh2ZSl9LGxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHZlLFhlKXt2YXIgRGUsemU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gemUub2JqZWN0TW9kZT9EZT0hMDoic3RyaW5nIj09dHlwZW9mIHZlJiYoKFhlPVhlfHx6ZS5kZWZhdWx0RW5jb2RpbmcpIT09emUuZW5j''@;'; put 'put ''b2RpbmcmJih2ZT1PLmZyb20odmUsWGUpLFhlPSIiKSxEZT0hMCksbWUodGhpcyx2ZSxYZSwhMSxEZSl9LGxlLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHZlKXtyZXR1cm4gbWUodGhpcyx2ZSxudWxsLCEwLCExKX0sbGUucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''ITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LGxlLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbih2ZSl7cmV0dXJuIGVlfHwoZWU9eSgyMjIxKS5zKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IGVlKHZlKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5n''@;'; put 'put ''PXZlLHRoaXN9O2Z1bmN0aW9uIHAodmUsWGUpe3JldHVybiB2ZTw9MHx8MD09PVhlLmxlbmd0aCYmWGUuZW5kZWQ/MDpYZS5vYmplY3RNb2RlPzE6dmUhPXZlP1hlLmZsb3dpbmcmJlhlLmxlbmd0aD9YZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpYZS5sZW5ndGg6KHZlPlhlLmhpZ2hXYXRl''@;'; put 'put ''ck1hcmsmJihYZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIFYodmUpe3JldHVybiB2ZT49ODM4ODYwOD92ZT04Mzg4NjA4Oih2ZS0tLHZlfD12ZT4+PjEsdmV8PXZlPj4+Mix2ZXw9dmU+Pj40LHZlfD12ZT4+PjgsdmV8PXZlPj4+MTYsdmUrKyksdmV9KHZlKSksdmU8PVhlLmxlbmd0aD92ZTpY''@;'; put 'put ''ZS5lbmRlZD9YZS5sZW5ndGg6KFhlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24geCh2ZSl7dmFyIFhlPXZlLl9yZWFkYWJsZVN0YXRlO1hlLm5lZWRSZWFkYWJsZT0hMSxYZS5lbWl0dGVkUmVhZGFibGV8fChXKCJlbWl0UmVhZGFibGUiLFhlLmZsb3dpbmcpLFhlLmVtaXR0ZWRSZWFk''@;'; put 'put ''YWJsZT0hMCxYZS5zeW5jP18ubmV4dFRpY2soQyx2ZSk6Qyh2ZSkpfWZ1bmN0aW9uIEModmUpe1coImVtaXQgcmVhZGFibGUiKSx2ZS5lbWl0KCJyZWFkYWJsZSIpLGFlKHZlKX1mdW5jdGlvbiBUKHZlLFhlKXtYZS5yZWFkaW5nTW9yZXx8KFhlLnJlYWRpbmdNb3JlPSEwLF8ubmV4dFRpY2so''@;'; put 'put ''SCx2ZSxYZSkpfWZ1bmN0aW9uIEgodmUsWGUpe2Zvcih2YXIgemU9WGUubGVuZ3RoOyFYZS5yZWFkaW5nJiYhWGUuZmxvd2luZyYmIVhlLmVuZGVkJiZYZS5sZW5ndGg8WGUuaGlnaFdhdGVyTWFyayYmKFcoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksdmUucmVhZCgwKSx6ZSE9PVhlLmxlbmd0''@;'; put 'put ''aCk7KXplPVhlLmxlbmd0aDtYZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBFKHZlKXtXKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSx2ZS5yZWFkKDApfWZ1bmN0aW9uIEEodmUsWGUpe1hlLnJlYWRpbmd8fChXKCJyZXN1bWUgcmVhZCAwIiksdmUucmVhZCgwKSksWGUucmVzdW1lU2No''@;'; put 'put ''ZWR1bGVkPSExLFhlLmF3YWl0RHJhaW49MCx2ZS5lbWl0KCJyZXN1bWUiKSxhZSh2ZSksWGUuZmxvd2luZyYmIVhlLnJlYWRpbmcmJnZlLnJlYWQoMCl9ZnVuY3Rpb24gYWUodmUpe3ZhciBYZT12ZS5fcmVhZGFibGVTdGF0ZTtmb3IoVygiZmxvdyIsWGUuZmxvd2luZyk7WGUuZmxvd2luZyYm''@;'; put 'put ''bnVsbCE9PXZlLnJlYWQoKTspO31mdW5jdGlvbiB0ZSh2ZSxYZSl7cmV0dXJuIDA9PT1YZS5sZW5ndGg/bnVsbDooWGUub2JqZWN0TW9kZT96ZT1YZS5idWZmZXIuc2hpZnQoKTohdmV8fHZlPj1YZS5sZW5ndGg/KHplPVhlLmRlY29kZXI/WGUuYnVmZmVyLmpvaW4oIiIpOjE9PT1YZS5idWZm''@;'; put 'put ''ZXIubGVuZ3RoP1hlLmJ1ZmZlci5oZWFkLmRhdGE6WGUuYnVmZmVyLmNvbmNhdChYZS5sZW5ndGgpLFhlLmJ1ZmZlci5jbGVhcigpKTp6ZT1mdW5jdGlvbiBzZSh2ZSxYZSx6ZSl7dmFyIERlO3JldHVybiB2ZTxYZS5oZWFkLmRhdGEubGVuZ3RoPyhEZT1YZS5oZWFkLmRhdGEuc2xpY2UoMCx2''@;'; put 'put ''ZSksWGUuaGVhZC5kYXRhPVhlLmhlYWQuZGF0YS5zbGljZSh2ZSkpOkRlPXZlPT09WGUuaGVhZC5kYXRhLmxlbmd0aD9YZS5zaGlmdCgpOnplP2Z1bmN0aW9uIHdlKHZlLFhlKXt2YXIgemU9WGUuaGVhZCxEZT0xLEZlPXplLmRhdGE7Zm9yKHZlLT1GZS5sZW5ndGg7emU9emUubmV4dDspe3Zh''@;'; put 'put ''ciBPZT16ZS5kYXRhLEllPXZlPk9lLmxlbmd0aD9PZS5sZW5ndGg6dmU7aWYoRmUrPUllPT09T2UubGVuZ3RoP09lOk9lLnNsaWNlKDAsdmUpLDA9PSh2ZS09SWUpKXtJZT09PU9lLmxlbmd0aD8oKytEZSxYZS5oZWFkPXplLm5leHQ/emUubmV4dDpYZS50YWlsPW51bGwpOihYZS5oZWFkPXpl''@;'; put 'put ''LHplLmRhdGE9T2Uuc2xpY2UoSWUpKTticmVha30rK0RlfXJldHVybiBYZS5sZW5ndGgtPURlLEZlfSh2ZSxYZSk6ZnVuY3Rpb24gVWUodmUsWGUpe3ZhciB6ZT1PLmFsbG9jVW5zYWZlKHZlKSxEZT1YZS5oZWFkLEZlPTE7Zm9yKERlLmRhdGEuY29weSh6ZSksdmUtPURlLmRhdGEubGVuZ3Ro''@;'; put 'put ''O0RlPURlLm5leHQ7KXt2YXIgT2U9RGUuZGF0YSxJZT12ZT5PZS5sZW5ndGg/T2UubGVuZ3RoOnZlO2lmKE9lLmNvcHkoemUsemUubGVuZ3RoLXZlLDAsSWUpLDA9PSh2ZS09SWUpKXtJZT09PU9lLmxlbmd0aD8oKytGZSxYZS5oZWFkPURlLm5leHQ/RGUubmV4dDpYZS50YWlsPW51bGwpOihY''@;'; put 'put ''ZS5oZWFkPURlLERlLmRhdGE9T2Uuc2xpY2UoSWUpKTticmVha30rK0ZlfXJldHVybiBYZS5sZW5ndGgtPUZlLHplfSh2ZSxYZSksRGV9KHZlLFhlLmJ1ZmZlcixYZS5kZWNvZGVyKSx6ZSk7dmFyIHplfWZ1bmN0aW9uIEplKHZlKXt2YXIgWGU9dmUuX3JlYWRhYmxlU3RhdGU7aWYoWGUubGVu''@;'; put 'put ''Z3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTtYZS5lbmRFbWl0dGVkfHwoWGUuZW5kZWQ9ITAsXy5uZXh0VGljayhvdCxYZSx2ZSkpfWZ1bmN0aW9uIG90KHZlLFhlKXshdmUuZW5kRW1pdHRlZCYmMD09PXZlLmxlbmd0''@;'; put 'put ''aCYmKHZlLmVuZEVtaXR0ZWQ9ITAsWGUucmVhZGFibGU9ITEsWGUuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIHhlKHZlLFhlKXtmb3IodmFyIHplPTAsRGU9dmUubGVuZ3RoO3plPERlO3plKyspaWYodmVbemVdPT09WGUpcmV0dXJuIHplO3JldHVybi0xfWxlLnByb3RvdHlwZS5yZWFkPWZ1bmN0''@;'; put 'put ''aW9uKHZlKXtXKCJyZWFkIix2ZSksdmU9cGFyc2VJbnQodmUsMTApO3ZhciBYZT10aGlzLl9yZWFkYWJsZVN0YXRlLHplPXZlO2lmKDAhPT12ZSYmKFhlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PXZlJiZYZS5uZWVkUmVhZGFibGUmJihYZS5sZW5ndGg+PVhlLmhpZ2hXYXRlck1hcmt8fFhl''@;'; put 'put ''LmVuZGVkKSlyZXR1cm4gVygicmVhZDogZW1pdFJlYWRhYmxlIixYZS5sZW5ndGgsWGUuZW5kZWQpLDA9PT1YZS5sZW5ndGgmJlhlLmVuZGVkP0plKHRoaXMpOngodGhpcyksbnVsbDtpZigwPT09KHZlPXAodmUsWGUpKSYmWGUuZW5kZWQpcmV0dXJuIDA9PT1YZS5sZW5ndGgmJkplKHRoaXMp''@;'; put 'put ''LG51bGw7dmFyIEZlLERlPVhlLm5lZWRSZWFkYWJsZTtyZXR1cm4gVygibmVlZCByZWFkYWJsZSIsRGUpLCgwPT09WGUubGVuZ3RofHxYZS5sZW5ndGgtdmU8WGUuaGlnaFdhdGVyTWFyaykmJlcoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixEZT0hMCksWGUuZW5kZWR8fFhlLnJlYWRp''@;'; put 'put ''bmc/VygicmVhZGluZyBvciBlbmRlZCIsRGU9ITEpOkRlJiYoVygiZG8gcmVhZCIpLFhlLnJlYWRpbmc9ITAsWGUuc3luYz0hMCwwPT09WGUubGVuZ3RoJiYoWGUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKFhlLmhpZ2hXYXRlck1hcmspLFhlLnN5bmM9ITEsWGUucmVhZGluZ3x8KHZl''@;'; put 'put ''PXAoemUsWGUpKSksbnVsbD09PShGZT12ZT4wP3RlKHZlLFhlKTpudWxsKT8oWGUubmVlZFJlYWRhYmxlPSEwLHZlPTApOlhlLmxlbmd0aC09dmUsMD09PVhlLmxlbmd0aCYmKFhlLmVuZGVkfHwoWGUubmVlZFJlYWRhYmxlPSEwKSx6ZSE9PXZlJiZYZS5lbmRlZCYmSmUodGhpcykpLG51bGwh''@;'; put 'put ''PT1GZSYmdGhpcy5lbWl0KCJkYXRhIixGZSksRmV9LGxlLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih2ZSl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJfcmVhZCgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sbGUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odmUsWGUpe3ZhciB6ZT10''@;'; put 'put ''aGlzLERlPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKERlLnBpcGVzQ291bnQpe2Nhc2UgMDpEZS5waXBlcz12ZTticmVhaztjYXNlIDE6RGUucGlwZXM9W0RlLnBpcGVzLHZlXTticmVhaztkZWZhdWx0OkRlLnBpcGVzLnB1c2godmUpfURlLnBpcGVzQ291bnQrPTEsVygicGlwZSBjb3Vu''@;'; put 'put ''dD0lZCBvcHRzPSVqIixEZS5waXBlc0NvdW50LFhlKTt2YXIgT2U9WGUmJiExPT09WGUuZW5kfHx2ZT09PUkuc3Rkb3V0fHx2ZT09PUkuc3RkZXJyP0R0OlZlO2Z1bmN0aW9uIFZlKCl7Vygib25lbmQiKSx2ZS5lbmQoKX1EZS5lbmRFbWl0dGVkP18ubmV4dFRpY2soT2UpOnplLm9uY2UoImVu''@;'; put 'put ''ZCIsT2UpLHZlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIEllKGl0LCRlKXtXKCJvbnVucGlwZSIpLGl0PT09emUmJiRlJiYhMT09PSRlLmhhc1VucGlwZWQmJigkZS5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIF90KCl7VygiY2xlYW51cCIpLHZlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIseXQpLHZl''@;'; put 'put ''LnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLE10KSx2ZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLGtlKSx2ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHVuKSx2ZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixJZSksemUucmVtb3ZlTGlzdGVuZXIoImVuZCIsVmUpLHplLnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KCJlbmQiLER0KSx6ZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsUWUpLEFlPSEwLERlLmF3YWl0RHJhaW4mJighdmUuX3dyaXRhYmxlU3RhdGV8fHZlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJmtlKCl9KCkpfSk7dmFyIGtlPWZ1bmN0aW9uIGoodmUpe3JldHVybiBmdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBYZT12ZS5fcmVhZGFibGVTdGF0ZTtXKCJwaXBlT25EcmFpbiIsWGUuYXdhaXREcmFpbiksWGUuYXdhaXREcmFpbiYmWGUuYXdhaXREcmFpbi0tLDA9PT1YZS5hd2FpdERyYWluJiZQKHZlLCJkYXRhIikmJihYZS5mbG93aW5nPSEwLGFlKHZlKSl9fSh6ZSk7dmUub24oImRyYWluIixrZSk7''@;'; put 'put ''dmFyIEFlPSExLG50PSExO2Z1bmN0aW9uIFFlKGl0KXtXKCJvbmRhdGEiKSxudD0hMSwhMT09PXZlLndyaXRlKGl0KSYmIW50JiYoKDE9PT1EZS5waXBlc0NvdW50JiZEZS5waXBlcz09PXZlfHxEZS5waXBlc0NvdW50PjEmJi0xIT09eGUoRGUucGlwZXMsdmUpKSYmIUFlJiYoVygiZmFsc2Ug''@;'; put 'put ''d3JpdGUgcmVzcG9uc2UsIHBhdXNlIixEZS5hd2FpdERyYWluKSxEZS5hd2FpdERyYWluKyssbnQ9ITApLHplLnBhdXNlKCkpfWZ1bmN0aW9uIHVuKGl0KXtXKCJvbmVycm9yIixpdCksRHQoKSx2ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHVuKSwwPT09UCh2ZSwiZXJyb3IiKSYmdmUuZW1p''@;'; put 'put ''dCgiZXJyb3IiLGl0KX1mdW5jdGlvbiB5dCgpe3ZlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLE10KSxEdCgpfWZ1bmN0aW9uIE10KCl7Vygib25maW5pc2giKSx2ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHl0KSxEdCgpfWZ1bmN0aW9uIER0KCl7VygidW5waXBlIiksemUudW5waXBlKHZl''@;'; put 'put ''KX1yZXR1cm4gemUub24oImRhdGEiLFFlKSxmdW5jdGlvbiBuZSh2ZSxYZSx6ZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHZlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gdmUucHJlcGVuZExpc3RlbmVyKFhlLHplKTt2ZS5fZXZlbnRzJiZ2ZS5fZXZlbnRzW1hlXT9nKHZlLl9ldmVudHNbWGVd''@;'; put 'put ''KT92ZS5fZXZlbnRzW1hlXS51bnNoaWZ0KHplKTp2ZS5fZXZlbnRzW1hlXT1bemUsdmUuX2V2ZW50c1tYZV1dOnZlLm9uKFhlLHplKX0odmUsImVycm9yIix1biksdmUub25jZSgiY2xvc2UiLHl0KSx2ZS5vbmNlKCJmaW5pc2giLE10KSx2ZS5lbWl0KCJwaXBlIix6ZSksRGUuZmxvd2luZ3x8''@;'; put 'put ''KFcoInBpcGUgcmVzdW1lIiksemUucmVzdW1lKCkpLHZlfSxsZS5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKHZlKXt2YXIgWGU9dGhpcy5fcmVhZGFibGVTdGF0ZSx6ZT17aGFzVW5waXBlZDohMX07aWYoMD09PVhlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PVhlLnBpcGVzQ291''@;'; put 'put ''bnQpcmV0dXJuIHZlJiZ2ZSE9PVhlLnBpcGVzfHwodmV8fCh2ZT1YZS5waXBlcyksWGUucGlwZXM9bnVsbCxYZS5waXBlc0NvdW50PTAsWGUuZmxvd2luZz0hMSx2ZSYmdmUuZW1pdCgidW5waXBlIix0aGlzLHplKSksdGhpcztpZighdmUpe3ZhciBEZT1YZS5waXBlcyxGZT1YZS5waXBlc0Nv''@;'; put 'put ''dW50O1hlLnBpcGVzPW51bGwsWGUucGlwZXNDb3VudD0wLFhlLmZsb3dpbmc9ITE7Zm9yKHZhciBPZT0wO09lPEZlO09lKyspRGVbT2VdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBJZT14ZShYZS5waXBlcyx2ZSk7cmV0dXJuLTE9PT1JZXx8''@;'; put 'put ''KFhlLnBpcGVzLnNwbGljZShJZSwxKSxYZS5waXBlc0NvdW50LT0xLDE9PT1YZS5waXBlc0NvdW50JiYoWGUucGlwZXM9WGUucGlwZXNbMF0pLHZlLmVtaXQoInVucGlwZSIsdGhpcyx6ZSkpLHRoaXN9LGxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1sZS5wcm90b3R5cGUub249ZnVuY3Rpb24o''@;'; put 'put ''dmUsWGUpe3ZhciB6ZT1GLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdmUsWGUpO2lmKCJkYXRhIj09PXZlKSExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoInJlYWRhYmxlIj09PXZlKXt2YXIgRGU9dGhpcy5fcmVhZGFibGVTdGF0ZTshRGUu''@;'; put 'put ''ZW5kRW1pdHRlZCYmIURlLnJlYWRhYmxlTGlzdGVuaW5nJiYoRGUucmVhZGFibGVMaXN0ZW5pbmc9RGUubmVlZFJlYWRhYmxlPSEwLERlLmVtaXR0ZWRSZWFkYWJsZT0hMSxEZS5yZWFkaW5nP0RlLmxlbmd0aCYmeCh0aGlzKTpfLm5leHRUaWNrKEUsdGhpcykpfXJldHVybiB6ZX0sbGUucHJv''@;'; put 'put ''dG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciB2ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB2ZS5mbG93aW5nfHwoVygicmVzdW1lIiksdmUuZmxvd2luZz0hMCxmdW5jdGlvbiBtKHZlLFhlKXtYZS5yZXN1bWVTY2hlZHVsZWR8fChYZS5yZXN1bWVTY2hlZHVsZWQ9ITAsXy5uZXh0''@;'; put 'put ''VGljayhBLHZlLFhlKSl9KHRoaXMsdmUpKSx0aGlzfSxsZS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gVygiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoVygicGF1''@;'; put 'put ''c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzfSxsZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbih2ZSl7dmFyIFhlPXRoaXMsemU9dGhpcy5fcmVhZGFibGVTdGF0ZSxEZT0hMTtmb3IodmFyIEZlIGluIHZlLm9uKCJlbmQiLGZ1bmN0''@;'; put 'put ''aW9uKCl7aWYoVygid3JhcHBlZCBlbmQiKSx6ZS5kZWNvZGVyJiYhemUuZW5kZWQpe3ZhciBJZT16ZS5kZWNvZGVyLmVuZCgpO0llJiZJZS5sZW5ndGgmJlhlLnB1c2goSWUpfVhlLnB1c2gobnVsbCl9KSx2ZS5vbigiZGF0YSIsZnVuY3Rpb24oSWUpe1coIndyYXBwZWQgZGF0YSIpLHplLmRl''@;'; put 'put ''Y29kZXImJihJZT16ZS5kZWNvZGVyLndyaXRlKEllKSksemUub2JqZWN0TW9kZSYmbnVsbD09SWV8fCEoemUub2JqZWN0TW9kZXx8SWUmJkllLmxlbmd0aCl8fFhlLnB1c2goSWUpfHwoRGU9ITAsdmUucGF1c2UoKSl9KSx2ZSl2b2lkIDA9PT10aGlzW0ZlXSYmImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IHZlW0ZlXSYmKHRoaXNbRmVdPWZ1bmN0aW9uKEllKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdmVbSWVdLmFwcGx5KHZlLGFyZ3VtZW50cyl9fShGZSkpO2Zvcih2YXIgT2U9MDtPZTxKLmxlbmd0aDtPZSsrKXZlLm9uKEpbT2VdLHRoaXMuZW1pdC5iaW5kKHRoaXMsSltPZV0pKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihJZSl7Vygid3JhcHBlZCBfcmVhZCIsSWUpLERlJiYoRGU9ITEsdmUucmVzdW1lKCkpfSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobGUucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksbGUuX2Zyb21MaXN0PXRlfSwzOTEyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Qjt2YXIgST15KDQzOTApLF89T2JqZWN0LmNyZWF0ZSh5KDY0OTcpKTtmdW5jdGlvbiBnKEYsTyl7dmFy''@;'; put 'put ''IHo9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ei50cmFuc2Zvcm1pbmc9ITE7dmFyIE49ei53cml0ZWNiO2lmKCFOKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpKTt6LndyaXRlY2h1bms9bnVsbCx6LndyaXRl''@;'; put 'put ''Y2I9bnVsbCxudWxsIT1PJiZ0aGlzLnB1c2goTyksTihGKTt2YXIgTD10aGlzLl9yZWFkYWJsZVN0YXRlO0wucmVhZGluZz0hMSwoTC5uZWVkUmVhZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTC5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBCKEYpe2lmKCEo''@;'; put 'put ''dGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQihGKTtJLmNhbGwodGhpcyxGKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Zy5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3Jp''@;'; put 'put ''dGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsRiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1GLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IEYuZmx1c2gmJih0aGlzLl9mbHVzaD1GLmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIix3KX1mdW5jdGlvbiB3KCl7dmFyIEY9dGhpczsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fZmx1c2g/dGhpcy5fZmx1c2goZnVuY3Rpb24oTyx6KXtQKEYsTyx6KX0pOlAodGhpcyxudWxsLG51bGwp''@;'; put 'put ''fWZ1bmN0aW9uIFAoRixPLHope2lmKE8pcmV0dXJuIEYuZW1pdCgiZXJyb3IiLE8pO2lmKG51bGwhPXomJkYucHVzaCh6KSxGLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCIpO2lmKEYuX3Ry''@;'; put 'put ''YW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtyZXR1cm4gRi5wdXNoKG51bGwpfV8uaW5oZXJpdHM9eSg1NzE3KSxfLmluaGVyaXRzKEIsSSksQi5wcm90b3R5cGUucHVzaD1m''@;'; put 'put ''dW5jdGlvbihGLE8pe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLEkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLEYsTyl9LEIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oRixPLHope3Rocm93IG5ldyBFcnJvcigiX3RyYW5zZm9ybSgpIGlzIG5v''@;'; put 'put ''dCBpbXBsZW1lbnRlZCIpfSxCLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oRixPLHope3ZhciBOPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKE4ud3JpdGVjYj16LE4ud3JpdGVjaHVuaz1GLE4ud3JpdGVlbmNvZGluZz1PLCFOLnRyYW5zZm9ybWluZyl7dmFyIEw9dGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZTsoTi5uZWVkVHJhbnNmb3JtfHxMLm5lZWRSZWFkYWJsZXx8TC5sZW5ndGg8TC5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChMLmhpZ2hXYXRlck1hcmspfX0sQi5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oRil7dmFyIE89dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbCE9PU8ud3Jp''@;'; put 'put ''dGVjaHVuayYmTy53cml0ZWNiJiYhTy50cmFuc2Zvcm1pbmc/KE8udHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShPLndyaXRlY2h1bmssTy53cml0ZWVuY29kaW5nLE8uYWZ0ZXJUcmFuc2Zvcm0pKTpPLm5lZWRUcmFuc2Zvcm09ITB9LEIucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0''@;'; put 'put ''aW9uKEYsTyl7dmFyIHo9dGhpcztJLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsRixmdW5jdGlvbihOKXtPKE4pLHouZW1pdCgiY2xvc2UiKX0pfX0sMjAxMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg4MjEyKTtmdW5jdGlvbiBCKG0pe3ZhciBBPXRo''@;'; put 'put ''aXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIEUobSxBLGFlKXt2YXIgdGU9bS5lbnRyeTtmb3IobS5lbnRyeT1udWxsO3RlOyl7dmFyIHNlPXRlLmNhbGxiYWNrO0EucGVuZGluZ2NiLS0sc2UoYWUpLHRlPXRlLm5leHR9''@;'; put 'put ''QS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1tfShBLG0pfX11ZS5leHBvcnRzPUo7dmFyIFAsdz0hSS5icm93c2VyJiZbInYwLjEwIiwidjAuOS4iXS5pbmRleE9mKEkudmVyc2lvbi5zbGljZSgwLDUpKT4tMT9zZXRJbW1lZGlhdGU6Xy5uZXh0VGljaztKLldyaXRhYmxlU3RhdGU9cTt2YXIg''@;'; put 'put ''Rj1PYmplY3QuY3JlYXRlKHkoNjQ5NykpO0YuaW5oZXJpdHM9eSg1NzE3KTt2YXIgZWUsTz17ZGVwcmVjYXRlOnkoNDkyNyl9LHo9eSg5ODE5KSxOPXkoMTU3MikuQnVmZmVyLEw9KHR5cGVvZiB5Lmc8InUiP3kuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3Nl''@;'; put 'put ''bGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxXPXkoNTk5Nyk7ZnVuY3Rpb24gWSgpe31mdW5jdGlvbiBxKG0sQSl7UD1QfHx5KDQzOTApO3ZhciBhZT1BIGluc3RhbmNlb2YgUDt0aGlzLm9iamVjdE1vZGU9ISEobT1tfHx7fSkub2JqZWN0TW9kZSxhZSYmKHRoaXMub2JqZWN0TW9k''@;'; put 'put ''ZT10aGlzLm9iamVjdE1vZGV8fCEhbS53cml0YWJsZU9iamVjdE1vZGUpO3ZhciB0ZT1tLmhpZ2hXYXRlck1hcmssc2U9bS53cml0YWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPXRlfHwwPT09dGU/dGU6YWUmJihzZXx8MD09PXNlKT9zZTp0aGlzLm9iamVjdE1vZGU/MTY6''@;'; put 'put ''MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRl''@;'; put 'put ''Y29kZVN0cmluZ3M9ISghMT09PW0uZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9bS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEs''@;'; put 'put ''dGhpcy5vbndyaXRlPWZ1bmN0aW9uKEplKXshZnVuY3Rpb24gamUobSxBKXt2YXIgYWU9bS5fd3JpdGFibGVTdGF0ZSx0ZT1hZS5zeW5jLHNlPWFlLndyaXRlY2I7aWYoZnVuY3Rpb24gU2UobSl7bS53cml0aW5nPSExLG0ud3JpdGVjYj1udWxsLG0ubGVuZ3RoLT1tLndyaXRlbGVuLG0ud3Jp''@;'; put 'put ''dGVsZW49MH0oYWUpLEEpIWZ1bmN0aW9uIFRlKG0sQSxhZSx0ZSxzZSl7LS1BLnBlbmRpbmdjYixhZT8oXy5uZXh0VGljayhzZSx0ZSksXy5uZXh0VGljayhILG0sQSksbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5lbWl0KCJlcnJvciIsdGUpKTooc2UodGUpLG0uX3dyaXRh''@;'; put 'put ''YmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLG0uZW1pdCgiZXJyb3IiLHRlKSxIKG0sQSkpfShtLGFlLHRlLEEsc2UpO2Vsc2V7dmFyIHdlPXgoYWUpOyF3ZSYmIWFlLmNvcmtlZCYmIWFlLmJ1ZmZlclByb2Nlc3NpbmcmJmFlLmJ1ZmZlcmVkUmVxdWVzdCYmYihtLGFlKSx0ZT93KFYsbSxhZSx3''@;'; put 'put ''ZSxzZSk6VihtLGFlLHdlLHNlKX19KEEsSmUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJv''@;'; put 'put ''ckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBCKHRoaXMpfWZ1bmN0aW9uIEoobSl7aWYoUD1QfHx5KDQzOTApLCEoZWUuY2FsbChKLHRoaXMpfHx0aGlzIGluc3RhbmNlb2YgUCkpcmV0dXJuIG5ldyBKKG0pO3RoaXMu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGU9bmV3IHEobSx0aGlzKSx0aGlzLndyaXRhYmxlPSEwLG0mJigiZnVuY3Rpb24iPT10eXBlb2YgbS53cml0ZSYmKHRoaXMuX3dyaXRlPW0ud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBtLndyaXRldiYmKHRoaXMuX3dyaXRldj1tLndyaXRldiksImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIG0uZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9bS5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgbS5maW5hbCYmKHRoaXMuX2ZpbmFsPW0uZmluYWwpKSx6LmNhbGwodGhpcyl9ZnVuY3Rpb24gX2UobSxBLGFlLHRlLHNlLHdlLFVlKXtBLndyaXRlbGVuPXRlLEEud3JpdGVjYj1V''@;'; put 'put ''ZSxBLndyaXRpbmc9ITAsQS5zeW5jPSEwLGFlP20uX3dyaXRldihzZSxBLm9ud3JpdGUpOm0uX3dyaXRlKHNlLHdlLEEub253cml0ZSksQS5zeW5jPSExfWZ1bmN0aW9uIFYobSxBLGFlLHRlKXthZXx8ZnVuY3Rpb24gcChtLEEpezA9PT1BLmxlbmd0aCYmQS5uZWVkRHJhaW4mJihBLm5lZWRE''@;'; put 'put ''cmFpbj0hMSxtLmVtaXQoImRyYWluIikpfShtLEEpLEEucGVuZGluZ2NiLS0sdGUoKSxIKG0sQSl9ZnVuY3Rpb24gYihtLEEpe0EuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgYWU9QS5idWZmZXJlZFJlcXVlc3Q7aWYobS5fd3JpdGV2JiZhZSYmYWUubmV4dCl7dmFyIHNlPW5ldyBBcnJheShB''@;'; put 'put ''LmJ1ZmZlcmVkUmVxdWVzdENvdW50KSx3ZT1BLmNvcmtlZFJlcXVlc3RzRnJlZTt3ZS5lbnRyeT1hZTtmb3IodmFyIFVlPTAsSmU9ITA7YWU7KXNlW1VlXT1hZSxhZS5pc0J1Znx8KEplPSExKSxhZT1hZS5uZXh0LFVlKz0xO3NlLmFsbEJ1ZmZlcnM9SmUsX2UobSxBLCEwLEEubGVuZ3RoLHNl''@;'; put 'put ''LCIiLHdlLmZpbmlzaCksQS5wZW5kaW5nY2IrKyxBLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx3ZS5uZXh0PyhBLmNvcmtlZFJlcXVlc3RzRnJlZT13ZS5uZXh0LHdlLm5leHQ9bnVsbCk6QS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEIoQSksQS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVs''@;'; put 'put ''c2V7Zm9yKDthZTspe3ZhciBvdD1hZS5jaHVuaztpZihfZShtLEEsITEsQS5vYmplY3RNb2RlPzE6b3QubGVuZ3RoLG90LGFlLmVuY29kaW5nLGFlLmNhbGxiYWNrKSxhZT1hZS5uZXh0LEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSxBLndyaXRpbmcpYnJlYWt9bnVsbD09PWFlJiYoQS5sYXN0''@;'; put 'put ''QnVmZmVyZWRSZXF1ZXN0PW51bGwpfUEuYnVmZmVyZWRSZXF1ZXN0PWFlLEEuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiB4KG0pe3JldHVybiBtLmVuZGluZyYmMD09PW0ubGVuZ3RoJiZudWxsPT09bS5idWZmZXJlZFJlcXVlc3QmJiFtLmZpbmlzaGVkJiYhbS53cml0aW5nfWZ1bmN0''@;'; put 'put ''aW9uIEMobSxBKXttLl9maW5hbChmdW5jdGlvbihhZSl7QS5wZW5kaW5nY2ItLSxhZSYmbS5lbWl0KCJlcnJvciIsYWUpLEEucHJlZmluaXNoZWQ9ITAsbS5lbWl0KCJwcmVmaW5pc2giKSxIKG0sQSl9KX1mdW5jdGlvbiBIKG0sQSl7dmFyIGFlPXgoQSk7cmV0dXJuIGFlJiYoZnVuY3Rpb24g''@;'; put 'put ''VChtLEEpeyFBLnByZWZpbmlzaGVkJiYhQS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBtLl9maW5hbD8oQS5wZW5kaW5nY2IrKyxBLmZpbmFsQ2FsbGVkPSEwLF8ubmV4dFRpY2soQyxtLEEpKTooQS5wcmVmaW5pc2hlZD0hMCxtLmVtaXQoInByZWZpbmlzaCIpKSl9KG0sQSks''@;'; put 'put ''MD09PUEucGVuZGluZ2NiJiYoQS5maW5pc2hlZD0hMCxtLmVtaXQoImZpbmlzaCIpKSksYWV9Ri5pbmhlcml0cyhKLHopLHEucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgQT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxhZT1bXTtBOylhZS5wdXNoKEEpLEE9QS5uZXh0O3Jl''@;'; put 'put ''dHVybiBhZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6Ty5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8oZWU9''@;'; put 'put ''RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEosU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihtKXtyZXR1cm4hIWVlLmNhbGwodGhpcyxtKXx8dGhpcz09PUomJm0mJm0uX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2Vv''@;'; put 'put ''ZiBxfX0pKTplZT1mdW5jdGlvbihtKXtyZXR1cm4gbSBpbnN0YW5jZW9mIHRoaXN9LEoucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LEoucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKG0s''@;'; put 'put ''QSxhZSl7dmFyIHRlPXRoaXMuX3dyaXRhYmxlU3RhdGUsc2U9ITEsd2U9IXRlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIFUobSl7cmV0dXJuIE4uaXNCdWZmZXIobSl8fG0gaW5zdGFuY2VvZiBMfShtKTtyZXR1cm4gd2UmJiFOLmlzQnVmZmVyKG0pJiYobT1mdW5jdGlvbiBLKG0pe3JldHVybiBO''@;'; put 'put ''LmZyb20obSl9KG0pKSwiZnVuY3Rpb24iPT10eXBlb2YgQSYmKGFlPUEsQT1udWxsKSx3ZT9BPSJidWZmZXIiOkF8fChBPXRlLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIGFlJiYoYWU9WSksdGUuZW5kZWQ/ZnVuY3Rpb24gbmUobSxBKXt2YXIgYWU9bmV3IEVycm9yKCJ3''@;'; put 'put ''cml0ZSBhZnRlciBlbmQiKTttLmVtaXQoImVycm9yIixhZSksXy5uZXh0VGljayhBLGFlKX0odGhpcyxhZSk6KHdlfHxmdW5jdGlvbiBpZShtLEEsYWUsdGUpe3ZhciBzZT0hMCx3ZT0hMTtyZXR1cm4gbnVsbD09PWFlP3dlPW5ldyBUeXBlRXJyb3IoIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1''@;'; put 'put ''ZXMgdG8gc3RyZWFtIik6InN0cmluZyIhPXR5cGVvZiBhZSYmdm9pZCAwIT09YWUmJiFBLm9iamVjdE1vZGUmJih3ZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLHdlJiYobS5lbWl0KCJlcnJvciIsd2UpLF8ubmV4dFRpY2sodGUsd2UpLHNlPSEx''@;'; put 'put ''KSxzZX0odGhpcyx0ZSxtLGFlKSkmJih0ZS5wZW5kaW5nY2IrKyxzZT1mdW5jdGlvbiBtZShtLEEsYWUsdGUsc2Usd2Upe2lmKCFhZSl7dmFyIFVlPWZ1bmN0aW9uIGxlKG0sQSxhZSl7cmV0dXJuIW0ub2JqZWN0TW9kZSYmITEhPT1tLmRlY29kZVN0cmluZ3MmJiJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''QSYmKEE9Ti5mcm9tKEEsYWUpKSxBfShBLHRlLHNlKTt0ZSE9PVVlJiYoYWU9ITAsc2U9ImJ1ZmZlciIsdGU9VWUpfXZhciBKZT1BLm9iamVjdE1vZGU/MTp0ZS5sZW5ndGg7QS5sZW5ndGgrPUplO3ZhciBvdD1BLmxlbmd0aDxBLmhpZ2hXYXRlck1hcms7aWYob3R8fChBLm5lZWREcmFpbj0h''@;'; put 'put ''MCksQS53cml0aW5nfHxBLmNvcmtlZCl7dmFyIHhlPUEubGFzdEJ1ZmZlcmVkUmVxdWVzdDtBLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOnRlLGVuY29kaW5nOnNlLGlzQnVmOmFlLGNhbGxiYWNrOndlLG5leHQ6bnVsbH0seGU/eGUubmV4dD1BLmxhc3RCdWZmZXJlZFJlcXVlc3Q6QS5i''@;'; put 'put ''dWZmZXJlZFJlcXVlc3Q9QS5sYXN0QnVmZmVyZWRSZXF1ZXN0LEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBfZShtLEEsITEsSmUsdGUsc2Usd2UpO3JldHVybiBvdH0odGhpcyx0ZSx3ZSxtLEEsYWUpKSxzZX0sSi5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRh''@;'; put 'put ''YmxlU3RhdGUuY29ya2VkKyt9LEoucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBtPXRoaXMuX3dyaXRhYmxlU3RhdGU7bS5jb3JrZWQmJihtLmNvcmtlZC0tLCFtLndyaXRpbmcmJiFtLmNvcmtlZCYmIW0uYnVmZmVyUHJvY2Vzc2luZyYmbS5idWZmZXJlZFJlcXVlc3QmJmIodGhp''@;'; put 'put ''cyxtKSl9LEoucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihBKXtpZigic3RyaW5nIj09dHlwZW9mIEEmJihBPUEudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZs''@;'; put 'put ''ZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigoQSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrQSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPUEsdGhpc30sT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KEoucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksSi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKG0sQSxhZSl7YWUobmV3IEVycm9y''@;'; put 'put ''KCJfd3JpdGUoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LEoucHJvdG90eXBlLl93cml0ZXY9bnVsbCxKLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24obSxBLGFlKXt2YXIgdGU9dGhpcy5fd3JpdGFibGVTdGF0ZTsiZnVuY3Rpb24iPT10eXBlb2YgbT8oYWU9bSxtPW51bGwsQT1udWxsKToiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgQSYmKGFlPUEsQT1udWxsKSxudWxsIT1tJiZ0aGlzLndyaXRlKG0sQSksdGUuY29ya2VkJiYodGUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksdGUuZW5kaW5nfHxmdW5jdGlvbiBqKG0sQSxhZSl7QS5lbmRpbmc9ITAsSChtLEEpLGFlJiYoQS5maW5pc2hlZD9fLm5l''@;'; put 'put ''eHRUaWNrKGFlKTptLm9uY2UoImZpbmlzaCIsYWUpKSxBLmVuZGVkPSEwLG0ud3JpdGFibGU9ITF9KHRoaXMsdGUsYWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0''@;'; put 'put ''YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKG0pe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1tKX19KSxKLnByb3RvdHlwZS5kZXN0cm95PVcuZGVzdHJveSxKLnByb3RvdHlwZS5fdW5kZXN0cm95PVcu''@;'; put 'put ''dW5kZXN0cm95LEoucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKG0sQSl7dGhpcy5lbmQoKSxBKG0pfX0sMjI2NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz15KDE1NzIpLkJ1ZmZlcixnPXkoNjQxOSk7ZnVuY3Rpb24gQih3LFAsRil7dy5jb3B5KFAsRil9dWUuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbigpe2Z1bmN0aW9uIHcoKXsoZnVuY3Rpb24gSSh3LFApe2lmKCEodyBpbnN0YW5jZW9mIFApKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyx3KSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxl''@;'; put 'put ''bmd0aD0wfXJldHVybiB3LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYpe3ZhciBPPXtkYXRhOkYsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PU86dGhpcy5oZWFkPU8sdGhpcy50YWlsPU8sKyt0aGlzLmxlbmd0aH0sdy5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlv''@;'; put 'put ''bihGKXt2YXIgTz17ZGF0YTpGLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9TyksdGhpcy5oZWFkPU8sKyt0aGlzLmxlbmd0aH0sdy5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBGPXRoaXMuaGVhZC5kYXRhO3Jl''@;'; put 'put ''dHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsRn19LHcucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LHcucHJvdG90eXBlLmpvaW49''@;'; put 'put ''ZnVuY3Rpb24oRil7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgTz10aGlzLmhlYWQsej0iIitPLmRhdGE7Tz1PLm5leHQ7KXorPUYrTy5kYXRhO3JldHVybiB6fSx3LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oRil7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBfLmFs''@;'; put 'put ''bG9jKDApO2Zvcih2YXIgTz1fLmFsbG9jVW5zYWZlKEY+Pj4wKSx6PXRoaXMuaGVhZCxOPTA7ejspQih6LmRhdGEsTyxOKSxOKz16LmRhdGEubGVuZ3RoLHo9ei5uZXh0O3JldHVybiBPfSx3fSgpLGcmJmcuaW5zcGVjdCYmZy5pbnNwZWN0LmN1c3RvbSYmKHVlLmV4cG9ydHMucHJvdG90eXBl''@;'; put 'put ''W2cuaW5zcGVjdC5jdXN0b21dPWZ1bmN0aW9uKCl7dmFyIHc9Zy5pbnNwZWN0KHtsZW5ndGg6dGhpcy5sZW5ndGh9KTtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKyIgIit3fSl9LDU5OTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4MjEyKTtmdW5jdGlvbiBCKHcsUCl7''@;'; put 'put ''dy5lbWl0KCJlcnJvciIsUCl9dWUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBfKHcsUCl7dmFyIEY9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUu''@;'; put 'put ''ZGVzdHJveWVkPyhQP1Aodyk6dyYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKEIsdGhpcyx3KSk6SS5uZXh0VGljayhCLHRoaXMsdykpLHRoaXMpOih0''@;'; put 'put ''aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxudWxsLGZ1bmN0aW9uKE4peyFQJiZOP0YuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGU/Ri5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fChGLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKEIsRixOKSk6SS5uZXh0VGljayhCLEYsTik6UCYmUChOKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gZygpe3RoaXMuX3JlYWRhYmxlU3RhdGUm''@;'; put 'put ''Jih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0''@;'; put 'put ''YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX19fSw5ODE5Oih1ZSxYLHkpPT57dWUuZXhwb3J0cz15KDcxODcpLkV2ZW50RW1pdHRlcn0sMTU3MjoodWUsWCx5KT0+e3ZhciBJPXkoODc2NCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9y''@;'; put 'put ''KHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLFgpLFguQnVmZmVyPUIpLGcoXyxCKSxCLmZyb209ZnVuY3Rpb24odyxQ''@;'; put 'put ''LEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFy''@;'; put 'put ''Z3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz1fKHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5T''@;'; put 'put ''bG93QnVmZmVyKHcpfX0sMzg3MjoodWUsWCx5KT0+eyhYPXVlLmV4cG9ydHM9eSg0OTYwKSkuU3RyZWFtPVgsWC5SZWFkYWJsZT1YLFguV3JpdGFibGU9eSgyMDEwKSxYLkR1cGxleD15KDQzOTApLFguVHJhbnNmb3JtPXkoMzkxMiksWC5QYXNzVGhyb3VnaD15KDEyOTQpfSwyMjIxOih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM2NCkuQnVmZmVyLF89SS5pc0VuY29kaW5nfHxmdW5jdGlvbihKKXtzd2l0Y2goKEo9IiIrSikmJkoudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2Ui''@;'; put 'put ''YmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiB3KEope3ZhciBuZTtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbiBCKEope3ZhciBuZT1mdW5j''@;'; put 'put ''dGlvbiBnKEope2lmKCFKKXJldHVybiJ1dGY4Ijtmb3IodmFyIG5lOzspc3dpdGNoKEope2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRp''@;'; put 'put ''bjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBKO2RlZmF1bHQ6aWYobmUpcmV0dXJuO0o9KCIiK0opLnRvTG93ZXJDYXNlKCksbmU9ITB9fShKKTtpZigic3RyaW5nIiE9dHlwZW9mIG5lJiYoSS5pc0VuY29k''@;'; put 'put ''aW5nPT09X3x8IV8oSikpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitKKTtyZXR1cm4gbmV8fEp9KEopLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PUssdGhpcy5lbmQ9VSxuZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD16LG5l''@;'; put 'put ''PTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1XLHRoaXMuZW5kPVksbmU9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPXEsdm9pZCh0aGlzLmVuZD1lZSl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1JLmFsbG9jVW5zYWZlKG5l''@;'; put 'put ''KX1mdW5jdGlvbiBQKEope3JldHVybiBKPD0xMjc/MDpKPj41PT02PzI6Sj4+ND09MTQ/MzpKPj4zPT0zMD80Oko+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24geihKKXt2YXIgbmU9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxpZT1mdW5jdGlvbiBPKEosbmUsaWUpe2lmKDEyOCE9KDE5MiZu''@;'; put 'put ''ZVswXSkpcmV0dXJuIEoubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjEmJm5lLmxlbmd0aD4xKXtpZigxMjghPSgxOTImbmVbMV0pKXJldHVybiBKLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4yJiZuZS5sZW5ndGg+MiYmMTI4IT0oMTkyJm5lWzJdKSlyZXR1''@;'; put 'put ''cm4gSi5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxKKTtyZXR1cm4gdm9pZCAwIT09aWU/aWU6dGhpcy5sYXN0TmVlZDw9Si5sZW5ndGg/KEouY29weSh0aGlzLmxhc3RDaGFyLG5lLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhp''@;'; put 'put ''cy5sYXN0VG90YWwpKTooSi5jb3B5KHRoaXMubGFzdENoYXIsbmUsMCxKLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1KLmxlbmd0aCkpfWZ1bmN0aW9uIEsoSixuZSl7aWYoKEoubGVuZ3RoLW5lKSUyPT0wKXt2YXIgaWU9Si50b1N0cmluZygidXRmMTZsZSIsbmUpO2lmKGllKXt2YXIg''@;'; put 'put ''bGU9aWUuY2hhckNvZGVBdChpZS5sZW5ndGgtMSk7aWYobGU+PTU1Mjk2JiZsZTw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0saWUuc2xpY2Uo''@;'; put 'put ''MCwtMSl9cmV0dXJuIGllfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV0sSi50b1N0cmluZygidXRmMTZsZSIsbmUsSi5sZW5ndGgtMSl9ZnVuY3Rpb24gVShKKXt2YXIgbmU9SiYmSi5sZW5ndGg/dGhpcy53cml0''@;'; put 'put ''ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9uZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQpOm5lfWZ1bmN0aW9uIFcoSixuZSl7dmFyIGllPShKLmxlbmd0aC1uZSklMztyZXR1cm4gMD09PWllP0oudG9TdHJpbmco''@;'; put 'put ''ImJhc2U2NCIsbmUpOih0aGlzLmxhc3ROZWVkPTMtaWUsdGhpcy5sYXN0VG90YWw9MywxPT09aWU/dGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdKSxKLnRvU3RyaW5nKCJi''@;'; put 'put ''YXNlNjQiLG5lLEoubGVuZ3RoLWllKSl9ZnVuY3Rpb24gWShKKXt2YXIgbmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9uZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpuZX1mdW5jdGlvbiBxKEop''@;'; put 'put ''e3JldHVybiBKLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIGVlKEope3JldHVybiBKJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIifVgucz13LHcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEope2lmKDA9PT1KLmxlbmd0aClyZXR1cm4iIjt2YXIgbmUsaWU7aWYodGhpcy5s''@;'; put 'put ''YXN0TmVlZCl7aWYodm9pZCAwPT09KG5lPXRoaXMuZmlsbExhc3QoSikpKXJldHVybiIiO2llPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgaWU9MDtyZXR1cm4gaWU8Si5sZW5ndGg/bmU/bmUrdGhpcy50ZXh0KEosaWUpOnRoaXMudGV4dChKLGllKTpuZXx8IiJ9LHcucHJv''@;'; put 'put ''dG90eXBlLmVuZD1mdW5jdGlvbiBMKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP25lKyJcdWZmZmQiOm5lfSx3LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIE4oSixuZSl7dmFyIGllPWZ1bmN0aW9uIEYoSixuZSxpZSl7dmFyIGxl''@;'; put 'put ''PW5lLmxlbmd0aC0xO2lmKGxlPGllKXJldHVybiAwO3ZhciBtZT1QKG5lW2xlXSk7cmV0dXJuIG1lPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0xKSxtZSk6LS1sZTxpZXx8LTI9PT1tZT8wOihtZT1QKG5lW2xlXSkpPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0yKSxtZSk6LS1sZTxpZXx8''@;'; put 'put ''LTI9PT1tZT8wOihtZT1QKG5lW2xlXSkpPj0wPyhtZT4wJiYoMj09PW1lP21lPTA6Si5sYXN0TmVlZD1tZS0zKSxtZSk6MH0odGhpcyxKLG5lKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gSi50b1N0cmluZygidXRmOCIsbmUpO3RoaXMubGFzdFRvdGFsPWllO3ZhciBsZT1KLmxlbmd0aC0o''@;'; put 'put ''aWUtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFyLDAsbGUpLEoudG9TdHJpbmcoInV0ZjgiLG5lLGxlKX0sdy5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oSil7aWYodGhpcy5sYXN0TmVlZDw9Si5sZW5ndGgpcmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFy''@;'; put 'put ''LHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7Si5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLEoubGVuZ3RoKSx0''@;'; put 'put ''aGlzLmxhc3ROZWVkLT1KLmxlbmd0aH19LDMzNjQ6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLF89SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlvbiBCKHcsUCxGKXtyZXR1cm4gXyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9j''@;'; put 'put ''VW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz91ZS5leHBvcnRzPUk6KGcoSSxYKSxYLkJ1ZmZlcj1CKSxnKF8sQiksQi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTty''@;'; put 'put ''ZXR1cm4gXyh3LFAsRil9LEIuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIE89Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ty5maWxs''@;'; put 'put ''KFAsRik6Ty5maWxsKFApOk8uZmlsbCgwKSxPfSxCLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LEIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9u''@;'; put 'put ''KHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDcyOTU6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQil7Zm9y''@;'; put 'put ''KHZhciB3PU1hdGgubWluKGcubGVuZ3RoLEIubGVuZ3RoKSxQPW5ldyBJKHcpLEY9MDtGPHc7KytGKVBbRl09Z1tGXV5CW0ZdO3JldHVybiBQfX0sODc2NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUxMDgpO2NvbnN0IF89eSg5NzQyKSxnPXkoNjQ1KSxCPSJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtYLkJ1ZmZlcj1PLFguU2xvd0J1ZmZlcj1mdW5jdGlvbiBuZSgkZSl7cmV0dXJuKyRlIT0kZSYmKCRlPTApLE8uYWxsb2MoKyRl''@;'; put 'put ''KX0sWC5JTlNQRUNUX01BWF9CWVRFUz01MDtjb25zdCB3PTIxNDc0ODM2NDc7ZnVuY3Rpb24gRigkZSl7aWYoJGU+dyl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInKyRlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTtjb25zdCB0dD1uZXcgVWludDhBcnJheSgk''@;'; put 'put ''ZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0dCxPLnByb3RvdHlwZSksdHR9ZnVuY3Rpb24gTygkZSx0dCxIZSl7aWYoIm51bWJlciI9PXR5cGVvZiAkZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0dCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVz''@;'; put 'put ''dCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gSygkZSl9cmV0dXJuIHooJGUsdHQsSGUpfWZ1bmN0aW9uIHooJGUsdHQsSGUpe2lmKCJzdHJpbmciPT10eXBlb2YgJGUpcmV0dXJuIGZ1bmN0aW9uIFUoJGUsdHQpe2lmKCgic3RyaW5nIiE9dHlwZW9m''@;'; put 'put ''IHR0fHwiIj09PXR0KSYmKHR0PSJ1dGY4IiksIU8uaXNFbmNvZGluZyh0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0dCk7Y29uc3QgSGU9MHxpZSgkZSx0dCk7bGV0IHV0PUYoSGUpO2NvbnN0IHF0PXV0LndyaXRlKCRlLHR0KTtyZXR1cm4gcXQhPT1IZSYm''@;'; put 'put ''KHV0PXV0LnNsaWNlKDAscXQpKSx1dH0oJGUsdHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldygkZSkpcmV0dXJuIGZ1bmN0aW9uIFkoJGUpe2lmKHVuKCRlLFVpbnQ4QXJyYXkpKXtjb25zdCB0dD1uZXcgVWludDhBcnJheSgkZSk7cmV0dXJuIHEodHQuYnVmZmVyLHR0LmJ5dGVPZmZzZXQsdHQu''@;'; put 'put ''Ynl0ZUxlbmd0aCl9cmV0dXJuIFcoJGUpfSgkZSk7aWYobnVsbD09JGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2Vp''@;'; put 'put ''dmVkIHR5cGUgIit0eXBlb2YgJGUpO2lmKHVuKCRlLEFycmF5QnVmZmVyKXx8JGUmJnVuKCRlLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJih1bigkZSxTaGFyZWRBcnJheUJ1ZmZlcil8fCRlJiZ1bigkZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZm''@;'; put 'put ''ZXIpKSlyZXR1cm4gcSgkZSx0dCxIZSk7aWYoIm51bWJlciI9PXR5cGVvZiAkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtjb25zdCB1dD0kZS52YWx1ZU9mJiYkZS52''@;'; put 'put ''YWx1ZU9mKCk7aWYobnVsbCE9dXQmJnV0IT09JGUpcmV0dXJuIE8uZnJvbSh1dCx0dCxIZSk7Y29uc3QgcXQ9ZnVuY3Rpb24gZWUoJGUpe2lmKE8uaXNCdWZmZXIoJGUpKXtjb25zdCB0dD0wfEooJGUubGVuZ3RoKSxIZT1GKHR0KTtyZXR1cm4gMD09PUhlLmxlbmd0aHx8JGUuY29weShIZSww''@;'; put 'put ''LDAsdHQpLEhlfXJldHVybiB2b2lkIDAhPT0kZS5sZW5ndGg/Im51bWJlciIhPXR5cGVvZiAkZS5sZW5ndGh8fHl0KCRlLmxlbmd0aCk/RigwKTpXKCRlKToiQnVmZmVyIj09PSRlLnR5cGUmJkFycmF5LmlzQXJyYXkoJGUuZGF0YSk/VygkZS5kYXRhKTp2b2lkIDB9KCRlKTtpZihxdClyZXR1''@;'; put 'put ''cm4gcXQ7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mICRlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIE8uZnJvbSgkZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSx0dCxIZSk7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgJGUpfWZ1bmN0aW9uIE4oJGUpe2lmKCJudW1iZXIiIT10eXBlb2Yg''@;'; put 'put ''JGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZigkZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrJGUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIEsoJGUpe3JldHVy''@;'; put 'put ''biBOKCRlKSxGKCRlPDA/MDowfEooJGUpKX1mdW5jdGlvbiBXKCRlKXtjb25zdCB0dD0kZS5sZW5ndGg8MD8wOjB8SigkZS5sZW5ndGgpLEhlPUYodHQpO2ZvcihsZXQgdXQ9MDt1dDx0dDt1dCs9MSlIZVt1dF09MjU1JiRlW3V0XTtyZXR1cm4gSGV9ZnVuY3Rpb24gcSgkZSx0dCxIZSl7aWYo''@;'; put 'put ''dHQ8MHx8JGUuYnl0ZUxlbmd0aDx0dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoJGUuYnl0ZUxlbmd0aDx0dCsoSGV8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBi''@;'; put 'put ''b3VuZHMnKTtsZXQgdXQ7cmV0dXJuIHV0PXZvaWQgMD09PXR0JiZ2b2lkIDA9PT1IZT9uZXcgVWludDhBcnJheSgkZSk6dm9pZCAwPT09SGU/bmV3IFVpbnQ4QXJyYXkoJGUsdHQpOm5ldyBVaW50OEFycmF5KCRlLHR0LEhlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodXQsTy5wcm90b3R5cGUp''@;'; put 'put ''LHV0fWZ1bmN0aW9uIEooJGUpe2lmKCRlPj13KXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4Iit3LnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8JGV9ZnVuY3Rpb24gaWUoJGUsdHQpe2lm''@;'; put 'put ''KE8uaXNCdWZmZXIoJGUpKXJldHVybiAkZS5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCRlKXx8dW4oJGUsQXJyYXlCdWZmZXIpKXJldHVybiAkZS5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgJGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50''@;'; put 'put ''IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mICRlKTtjb25zdCBIZT0kZS5sZW5ndGgsdXQ9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighdXQmJjA9PT1IZSlyZXR1cm4gMDts''@;'; put 'put ''ZXQgcXQ9ITE7Zm9yKDs7KXN3aXRjaCh0dCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gSGU7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4ga2UoJGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYt''@;'; put 'put ''MTZsZSI6cmV0dXJuIDIqSGU7Y2FzZSJoZXgiOnJldHVybiBIZT4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBudCgkZSkubGVuZ3RoO2RlZmF1bHQ6aWYocXQpcmV0dXJuIHV0Py0xOmtlKCRlKS5sZW5ndGg7dHQ9KCIiK3R0KS50b0xvd2VyQ2FzZSgpLHF0PSEwfX1mdW5jdGlvbiBsZSgkZSx0''@;'; put 'put ''dCxIZSl7bGV0IHV0PSExO2lmKCh2b2lkIDA9PT10dHx8dHQ8MCkmJih0dD0wKSx0dD50aGlzLmxlbmd0aHx8KCh2b2lkIDA9PT1IZXx8SGU+dGhpcy5sZW5ndGgpJiYoSGU9dGhpcy5sZW5ndGgpLEhlPD0wKXx8KEhlPj4+PTApPD0odHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKCRlfHwoJGU9InV0''@;'; put 'put ''ZjgiKTs7KXN3aXRjaCgkZSl7Y2FzZSJoZXgiOnJldHVybiBtKHRoaXMsdHQsSGUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEModGhpcyx0dCxIZSk7Y2FzZSJhc2NpaSI6cmV0dXJuIGoodGhpcyx0dCxIZSk7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRSh0aGlz''@;'; put 'put ''LHR0LEhlKTtjYXNlImJhc2U2NCI6cmV0dXJuIHgodGhpcyx0dCxIZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBBKHRoaXMsdHQsSGUpO2RlZmF1bHQ6aWYodXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGlu''@;'; put 'put ''ZzogIiskZSk7JGU9KCRlKyIiKS50b0xvd2VyQ2FzZSgpLHV0PSEwfX1mdW5jdGlvbiBtZSgkZSx0dCxIZSl7Y29uc3QgdXQ9JGVbdHRdOyRlW3R0XT0kZVtIZV0sJGVbSGVdPXV0fWZ1bmN0aW9uIF9lKCRlLHR0LEhlLHV0LHF0KXtpZigwPT09JGUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgSGU/KHV0PUhlLEhlPTApOkhlPjIxNDc0ODM2NDc/SGU9MjE0NzQ4MzY0NzpIZTwtMjE0NzQ4MzY0OCYmKEhlPS0yMTQ3NDgzNjQ4KSx5dChIZT0rSGUpJiYoSGU9cXQ/MDokZS5sZW5ndGgtMSksSGU8MCYmKEhlPSRlLmxlbmd0aCtIZSksSGU+PSRlLmxlbmd0aCl7aWYo''@;'; put 'put ''cXQpcmV0dXJuLTE7SGU9JGUubGVuZ3RoLTF9ZWxzZSBpZihIZTwwKXtpZighcXQpcmV0dXJuLTE7SGU9MH1pZigic3RyaW5nIj09dHlwZW9mIHR0JiYodHQ9Ty5mcm9tKHR0LHV0KSksTy5pc0J1ZmZlcih0dCkpcmV0dXJuIDA9PT10dC5sZW5ndGg/LTE6VGUoJGUsdHQsSGUsdXQscXQpO2lm''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgdHQpcmV0dXJuIHR0Jj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/cXQ/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKCRlLHR0LEhlKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5j''@;'; put 'put ''YWxsKCRlLHR0LEhlKTpUZSgkZSxbdHRdLEhlLHV0LHF0KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBUZSgkZSx0dCxIZSx1dCxxdCl7bGV0IHNuLFJ0PTEsUHQ9JGUubGVuZ3RoLGNpPXR0Lmxlbmd0aDtpZih2''@;'; put 'put ''b2lkIDAhPT11dCYmKCJ1Y3MyIj09PSh1dD1TdHJpbmcodXQpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09dXR8fCJ1dGYxNmxlIj09PXV0fHwidXRmLTE2bGUiPT09dXQpKXtpZigkZS5sZW5ndGg8Mnx8dHQubGVuZ3RoPDIpcmV0dXJuLTE7UnQ9MixQdC89MixjaS89MixIZS89Mn1mdW5j''@;'; put 'put ''dGlvbiBRdChSaSxobil7cmV0dXJuIDE9PT1SdD9SaVtobl06UmkucmVhZFVJbnQxNkJFKGhuKlJ0KX1pZihxdCl7bGV0IFJpPS0xO2Zvcihzbj1IZTtzbjxQdDtzbisrKWlmKFF0KCRlLHNuKT09PVF0KHR0LC0xPT09Umk/MDpzbi1SaSkpe2lmKC0xPT09UmkmJihSaT1zbiksc24tUmkrMT09''@;'; put 'put ''PWNpKXJldHVybiBSaSpSdH1lbHNlLTEhPT1SaSYmKHNuLT1zbi1SaSksUmk9LTF9ZWxzZSBmb3IoSGUrY2k+UHQmJihIZT1QdC1jaSksc249SGU7c24+PTA7c24tLSl7bGV0IFJpPSEwO2ZvcihsZXQgaG49MDtobjxjaTtobisrKWlmKFF0KCRlLHNuK2huKSE9PVF0KHR0LGhuKSl7Umk9ITE7''@;'; put 'put ''YnJlYWt9aWYoUmkpcmV0dXJuIHNufXJldHVybi0xfWZ1bmN0aW9uIFNlKCRlLHR0LEhlLHV0KXtIZT1OdW1iZXIoSGUpfHwwO2NvbnN0IHF0PSRlLmxlbmd0aC1IZTt1dD8odXQ9TnVtYmVyKHV0KSk+cXQmJih1dD1xdCk6dXQ9cXQ7Y29uc3QgUnQ9dHQubGVuZ3RoO2xldCBQdDtmb3IodXQ+''@;'; put 'put ''UnQvMiYmKHV0PVJ0LzIpLFB0PTA7UHQ8dXQ7KytQdCl7Y29uc3QgY2k9cGFyc2VJbnQodHQuc3Vic3RyKDIqUHQsMiksMTYpO2lmKHl0KGNpKSlyZXR1cm4gUHQ7JGVbSGUrUHRdPWNpfXJldHVybiBQdH1mdW5jdGlvbiBqZSgkZSx0dCxIZSx1dCl7cmV0dXJuIFFlKGtlKHR0LCRlLmxlbmd0''@;'; put 'put ''aC1IZSksJGUsSGUsdXQpfWZ1bmN0aW9uIFYoJGUsdHQsSGUsdXQpe3JldHVybiBRZShmdW5jdGlvbiBBZSgkZSl7Y29uc3QgdHQ9W107Zm9yKGxldCBIZT0wO0hlPCRlLmxlbmd0aDsrK0hlKXR0LnB1c2goMjU1JiRlLmNoYXJDb2RlQXQoSGUpKTtyZXR1cm4gdHR9KHR0KSwkZSxIZSx1dCl9''@;'; put 'put ''ZnVuY3Rpb24gcCgkZSx0dCxIZSx1dCl7cmV0dXJuIFFlKG50KHR0KSwkZSxIZSx1dCl9ZnVuY3Rpb24gYigkZSx0dCxIZSx1dCl7cmV0dXJuIFFlKGZ1bmN0aW9uIF90KCRlLHR0KXtsZXQgSGUsdXQscXQ7Y29uc3QgUnQ9W107Zm9yKGxldCBQdD0wO1B0PCRlLmxlbmd0aCYmISgodHQtPTIp''@;'; put 'put ''PDApOysrUHQpSGU9JGUuY2hhckNvZGVBdChQdCksdXQ9SGU+PjgscXQ9SGUlMjU2LFJ0LnB1c2gocXQpLFJ0LnB1c2godXQpO3JldHVybiBSdH0odHQsJGUubGVuZ3RoLUhlKSwkZSxIZSx1dCl9ZnVuY3Rpb24geCgkZSx0dCxIZSl7cmV0dXJuIF8uZnJvbUJ5dGVBcnJheSgwPT09dHQmJkhl''@;'; put 'put ''PT09JGUubGVuZ3RoPyRlOiRlLnNsaWNlKHR0LEhlKSl9ZnVuY3Rpb24gQygkZSx0dCxIZSl7SGU9TWF0aC5taW4oJGUubGVuZ3RoLEhlKTtjb25zdCB1dD1bXTtsZXQgcXQ9dHQ7Zm9yKDtxdDxIZTspe2NvbnN0IFJ0PSRlW3F0XTtsZXQgUHQ9bnVsbCxjaT1SdD4yMzk/NDpSdD4yMjM/MzpS''@;'; put 'put ''dD4xOTE/MjoxO2lmKHF0K2NpPD1IZSl7bGV0IFF0LHNuLFJpLGhuO3N3aXRjaChjaSl7Y2FzZSAxOlJ0PDEyOCYmKFB0PVJ0KTticmVhaztjYXNlIDI6UXQ9JGVbcXQrMV0sMTI4PT0oMTkyJlF0KSYmKGhuPSgzMSZSdCk8PDZ8NjMmUXQsaG4+MTI3JiYoUHQ9aG4pKTticmVhaztjYXNlIDM6''@;'; put 'put ''UXQ9JGVbcXQrMV0sc249JGVbcXQrMl0sMTI4PT0oMTkyJlF0KSYmMTI4PT0oMTkyJnNuKSYmKGhuPSgxNSZSdCk8PDEyfCg2MyZRdCk8PDZ8NjMmc24saG4+MjA0NyYmKGhuPDU1Mjk2fHxobj41NzM0MykmJihQdD1obikpO2JyZWFrO2Nhc2UgNDpRdD0kZVtxdCsxXSxzbj0kZVtxdCsyXSxS''@;'; put 'put ''aT0kZVtxdCszXSwxMjg9PSgxOTImUXQpJiYxMjg9PSgxOTImc24pJiYxMjg9PSgxOTImUmkpJiYoaG49KDE1JlJ0KTw8MTh8KDYzJlF0KTw8MTJ8KDYzJnNuKTw8Nnw2MyZSaSxobj42NTUzNSYmaG48MTExNDExMiYmKFB0PWhuKSl9fW51bGw9PT1QdD8oUHQ9NjU1MzMsY2k9MSk6UHQ+NjU1''@;'; put 'put ''MzUmJihQdC09NjU1MzYsdXQucHVzaChQdD4+PjEwJjEwMjN8NTUyOTYpLFB0PTU2MzIwfDEwMjMmUHQpLHV0LnB1c2goUHQpLHF0Kz1jaX1yZXR1cm4gZnVuY3Rpb24gSCgkZSl7Y29uc3QgdHQ9JGUubGVuZ3RoO2lmKHR0PD1UKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0''@;'; put 'put ''cmluZywkZSk7bGV0IEhlPSIiLHV0PTA7Zm9yKDt1dDx0dDspSGUrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCRlLnNsaWNlKHV0LHV0Kz1UKSk7cmV0dXJuIEhlfSh1dCl9WC5rTWF4TGVuZ3RoPXcsIShPLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gUCgpe3RyeXtj''@;'; put 'put ''b25zdCAkZT1uZXcgVWludDhBcnJheSgxKSx0dD17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0dCxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKCRlLHR0KSw0Mj09PSRlLmZvbygpfWNhdGNoe3JldHVy''@;'; put 'put ''biExfX0oKSkmJnR5cGVvZiBJPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIEkuZXJyb3ImJkkuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQu''@;'; put 'put ''eCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihPLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoTy5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoTy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLE8ucG9vbFNpemU9ODE5MixPLmZyb209ZnVuY3Rpb24oJGUsdHQsSGUpe3JldHVybiB6KCRlLHR0''@;'; put 'put ''LEhlKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKE8ucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoTyxVaW50OEFycmF5KSxPLmFsbG9jPWZ1bmN0aW9uKCRlLHR0LEhlKXtyZXR1cm4gZnVuY3Rpb24gTCgkZSx0dCxIZSl7cmV0dXJuIE4oJGUp''@;'; put 'put ''LCRlPD0wP0YoJGUpOnZvaWQgMCE9PXR0PyJzdHJpbmciPT10eXBlb2YgSGU/RigkZSkuZmlsbCh0dCxIZSk6RigkZSkuZmlsbCh0dCk6RigkZSl9KCRlLHR0LEhlKX0sTy5hbGxvY1Vuc2FmZT1mdW5jdGlvbigkZSl7cmV0dXJuIEsoJGUpfSxPLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbigk''@;'; put 'put ''ZSl7cmV0dXJuIEsoJGUpfSxPLmlzQnVmZmVyPWZ1bmN0aW9uKHR0KXtyZXR1cm4gbnVsbCE9dHQmJiEwPT09dHQuX2lzQnVmZmVyJiZ0dCE9PU8ucHJvdG90eXBlfSxPLmNvbXBhcmU9ZnVuY3Rpb24odHQsSGUpe2lmKHVuKHR0LFVpbnQ4QXJyYXkpJiYodHQ9Ty5mcm9tKHR0LHR0Lm9mZnNl''@;'; put 'put ''dCx0dC5ieXRlTGVuZ3RoKSksdW4oSGUsVWludDhBcnJheSkmJihIZT1PLmZyb20oSGUsSGUub2Zmc2V0LEhlLmJ5dGVMZW5ndGgpKSwhTy5pc0J1ZmZlcih0dCl8fCFPLmlzQnVmZmVyKEhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3Qg''@;'; put 'put ''YmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZih0dD09PUhlKXJldHVybiAwO2xldCB1dD10dC5sZW5ndGgscXQ9SGUubGVuZ3RoO2ZvcihsZXQgUnQ9MCxQdD1NYXRoLm1pbih1dCxxdCk7UnQ8UHQ7KytSdClpZih0dFtSdF0hPT1IZVtSdF0pe3V0PXR0W1J0XSxxdD1I''@;'; put 'put ''ZVtSdF07YnJlYWt9cmV0dXJuIHV0PHF0Py0xOnF0PHV0PzE6MH0sTy5pc0VuY29kaW5nPWZ1bmN0aW9uKHR0KXtzd2l0Y2goU3RyaW5nKHR0KS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5h''@;'; put 'put ''cnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LE8uY29uY2F0PWZ1bmN0aW9uKHR0LEhlKXtpZighQXJyYXkuaXNBcnJheSh0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcign''@;'; put 'put ''Imxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT10dC5sZW5ndGgpcmV0dXJuIE8uYWxsb2MoMCk7bGV0IHV0O2lmKHZvaWQgMD09PUhlKWZvcihIZT0wLHV0PTA7dXQ8dHQubGVuZ3RoOysrdXQpSGUrPXR0W3V0XS5sZW5ndGg7Y29uc3QgcXQ9Ty5h''@;'; put 'put ''bGxvY1Vuc2FmZShIZSk7bGV0IFJ0PTA7Zm9yKHV0PTA7dXQ8dHQubGVuZ3RoOysrdXQpe2xldCBQdD10dFt1dF07aWYodW4oUHQsVWludDhBcnJheSkpUnQrUHQubGVuZ3RoPnF0Lmxlbmd0aD8oTy5pc0J1ZmZlcihQdCl8fChQdD1PLmZyb20oUHQpKSxQdC5jb3B5KHF0LFJ0KSk6VWludDhB''@;'; put 'put ''cnJheS5wcm90b3R5cGUuc2V0LmNhbGwocXQsUHQsUnQpO2Vsc2V7aWYoIU8uaXNCdWZmZXIoUHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtQdC5jb3B5KHF0LFJ0KX1SdCs9UHQubGVuZ3RofXJldHVybiBxdH0s''@;'; put 'put ''Ty5ieXRlTGVuZ3RoPWllLE8ucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxPLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0''@;'; put 'put ''cyIpO2ZvcihsZXQgSGU9MDtIZTx0dDtIZSs9MiltZSh0aGlzLEhlLEhlKzEpO3JldHVybiB0aGlzfSxPLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEg''@;'; put 'put ''bXVsdGlwbGUgb2YgMzItYml0cyIpO2ZvcihsZXQgSGU9MDtIZTx0dDtIZSs9NCltZSh0aGlzLEhlLEhlKzMpLG1lKHRoaXMsSGUrMSxIZSsyKTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7Y29uc3QgdHQ9dGhpcy5sZW5ndGg7aWYodHQlOCE9MCl0aHJvdyBu''@;'; put 'put ''ZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IobGV0IEhlPTA7SGU8dHQ7SGUrPTgpbWUodGhpcyxIZSxIZSs3KSxtZSh0aGlzLEhlKzEsSGUrNiksbWUodGhpcyxIZSsyLEhlKzUpLG1lKHRoaXMsSGUrMyxIZSs0KTtyZXR1cm4g''@;'; put 'put ''dGhpc30sTy5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9Ty5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PXR0PyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP0ModGhpcywwLHR0KTpsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LE8u''@;'; put 'put ''cHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0dCl7aWYoIU8uaXNCdWZmZXIodHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXR0fHwwPT09Ty5jb21wYXJlKHRoaXMsdHQpfSxPLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0''@;'; put 'put ''aW9uKCl7bGV0IHR0PSIiO2NvbnN0IEhlPVguSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHR0PXRoaXMudG9TdHJpbmcoImhleCIsMCxIZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5IZSYmKHR0Kz0iIC4uLiAiKSwiPEJ1ZmZlciAiK3R0KyI+In0sQiYm''@;'; put 'put ''KE8ucHJvdG90eXBlW0JdPU8ucHJvdG90eXBlLmluc3BlY3QpLE8ucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odHQsSGUsdXQscXQsUnQpe2lmKHVuKHR0LFVpbnQ4QXJyYXkpJiYodHQ9Ty5mcm9tKHR0LHR0Lm9mZnNldCx0dC5ieXRlTGVuZ3RoKSksIU8uaXNCdWZmZXIodHQpKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHR0KTtpZih2b2lkIDA9PT1IZSYmKEhlPTApLHZvaWQgMD09PXV0JiYodXQ9dHQ/dHQubGVuZ3RoOjApLHZv''@;'; put 'put ''aWQgMD09PXF0JiYocXQ9MCksdm9pZCAwPT09UnQmJihSdD10aGlzLmxlbmd0aCksSGU8MHx8dXQ+dHQubGVuZ3RofHxxdDwwfHxSdD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocXQ+PVJ0JiZIZT49dXQpcmV0dXJuIDA7aWYocXQ+''@;'; put 'put ''PVJ0KXJldHVybi0xO2lmKEhlPj11dClyZXR1cm4gMTtpZih0aGlzPT09dHQpcmV0dXJuIDA7bGV0IFB0PShSdD4+Pj0wKS0ocXQ+Pj49MCksY2k9KHV0Pj4+PTApLShIZT4+Pj0wKTtjb25zdCBRdD1NYXRoLm1pbihQdCxjaSksc249dGhpcy5zbGljZShxdCxSdCksUmk9dHQuc2xpY2UoSGUs''@;'; put 'put ''dXQpO2ZvcihsZXQgaG49MDtobjxRdDsrK2huKWlmKHNuW2huXSE9PVJpW2huXSl7UHQ9c25baG5dLGNpPVJpW2huXTticmVha31yZXR1cm4gUHQ8Y2k/LTE6Y2k8UHQ/MTowfSxPLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2Yo''@;'; put 'put ''dHQsSGUsdXQpfSxPLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gX2UodGhpcyx0dCxIZSx1dCwhMCl9LE8ucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gX2UodGhpcyx0dCxIZSx1dCwhMSl9LE8ucHJvdG90eXBlLndy''@;'; put 'put ''aXRlPWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXtpZih2b2lkIDA9PT1IZSlxdD0idXRmOCIsdXQ9dGhpcy5sZW5ndGgsSGU9MDtlbHNlIGlmKHZvaWQgMD09PXV0JiYic3RyaW5nIj09dHlwZW9mIEhlKXF0PUhlLHV0PXRoaXMubGVuZ3RoLEhlPTA7ZWxzZXtpZighaXNGaW5pdGUoSGUpKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtIZT4+Pj0wLGlzRmluaXRlKHV0KT8odXQ+Pj49MCx2b2lkIDA9PT1xdCYmKHF0PSJ1dGY4IikpOihxdD11dCx1dD12b2lkIDApfWNvbnN0''@;'; put 'put ''IFJ0PXRoaXMubGVuZ3RoLUhlO2lmKCh2b2lkIDA9PT11dHx8dXQ+UnQpJiYodXQ9UnQpLHR0Lmxlbmd0aD4wJiYodXQ8MHx8SGU8MCl8fEhlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO3F0fHwocXQ9''@;'; put 'put ''InV0ZjgiKTtsZXQgUHQ9ITE7Zm9yKDs7KXN3aXRjaChxdCl7Y2FzZSJoZXgiOnJldHVybiBTZSh0aGlzLHR0LEhlLHV0KTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBqZSh0aGlzLHR0LEhlLHV0KTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBW''@;'; put 'put ''KHRoaXMsdHQsSGUsdXQpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gcCh0aGlzLHR0LEhlLHV0KTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGIodGhpcyx0dCxIZSx1dCk7ZGVmYXVsdDppZihQdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJV''@;'; put 'put ''bmtub3duIGVuY29kaW5nOiAiK3F0KTtxdD0oIiIrcXQpLnRvTG93ZXJDYXNlKCksUHQ9ITB9fSxPLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2NvbnN0''@;'; put 'put ''IFQ9NDA5NjtmdW5jdGlvbiBqKCRlLHR0LEhlKXtsZXQgdXQ9IiI7SGU9TWF0aC5taW4oJGUubGVuZ3RoLEhlKTtmb3IobGV0IHF0PXR0O3F0PEhlOysrcXQpdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JiRlW3F0XSk7cmV0dXJuIHV0fWZ1bmN0aW9uIEUoJGUsdHQsSGUpe2xldCB1dD0i''@;'; put 'put ''IjtIZT1NYXRoLm1pbigkZS5sZW5ndGgsSGUpO2ZvcihsZXQgcXQ9dHQ7cXQ8SGU7KytxdCl1dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgkZVtxdF0pO3JldHVybiB1dH1mdW5jdGlvbiBtKCRlLHR0LEhlKXtjb25zdCB1dD0kZS5sZW5ndGg7KCF0dHx8dHQ8MCkmJih0dD0wKSwoIUhlfHxIZTww''@;'; put 'put ''fHxIZT51dCkmJihIZT11dCk7bGV0IHF0PSIiO2ZvcihsZXQgUnQ9dHQ7UnQ8SGU7KytSdClxdCs9TXRbJGVbUnRdXTtyZXR1cm4gcXR9ZnVuY3Rpb24gQSgkZSx0dCxIZSl7Y29uc3QgdXQ9JGUuc2xpY2UodHQsSGUpO2xldCBxdD0iIjtmb3IobGV0IFJ0PTA7UnQ8dXQubGVuZ3RoLTE7UnQr''@;'; put 'put ''PTIpcXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodXRbUnRdKzI1Nip1dFtSdCsxXSk7cmV0dXJuIHF0fWZ1bmN0aW9uIGFlKCRlLHR0LEhlKXtpZigkZSUxIT0wfHwkZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZigkZSt0dD5IZSl0aHJvdyBuZXcgUmFu''@;'; put 'put ''Z2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIHRlKCRlLHR0LEhlLHV0LHF0LFJ0KXtpZighTy5pc0J1ZmZlcigkZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScp''@;'; put 'put ''O2lmKHR0PnF0fHx0dDxSdCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoSGUrdXQ+JGUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBzZSgkZSx0dCxIZSx1dCxxdCl7''@;'; put 'put ''RGUodHQsdXQscXQsJGUsSGUsNyk7bGV0IFJ0PU51bWJlcih0dCZCaWdJbnQoNDI5NDk2NzI5NSkpOyRlW0hlKytdPVJ0LFJ0Pj49OCwkZVtIZSsrXT1SdCxSdD4+PTgsJGVbSGUrK109UnQsUnQ+Pj04LCRlW0hlKytdPVJ0O2xldCBQdD1OdW1iZXIodHQ+PkJpZ0ludCgzMikmQmlnSW50KDQy''@;'; put 'put ''OTQ5NjcyOTUpKTtyZXR1cm4gJGVbSGUrK109UHQsUHQ+Pj04LCRlW0hlKytdPVB0LFB0Pj49OCwkZVtIZSsrXT1QdCxQdD4+PTgsJGVbSGUrK109UHQsSGV9ZnVuY3Rpb24gd2UoJGUsdHQsSGUsdXQscXQpe0RlKHR0LHV0LHF0LCRlLEhlLDcpO2xldCBSdD1OdW1iZXIodHQmQmlnSW50KDQy''@;'; put 'put ''OTQ5NjcyOTUpKTskZVtIZSs3XT1SdCxSdD4+PTgsJGVbSGUrNl09UnQsUnQ+Pj04LCRlW0hlKzVdPVJ0LFJ0Pj49OCwkZVtIZSs0XT1SdDtsZXQgUHQ9TnVtYmVyKHR0Pj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuICRlW0hlKzNdPVB0LFB0Pj49OCwkZVtIZSsyXT1Q''@;'; put 'put ''dCxQdD4+PTgsJGVbSGUrMV09UHQsUHQ+Pj04LCRlW0hlXT1QdCxIZSs4fWZ1bmN0aW9uIFVlKCRlLHR0LEhlLHV0LHF0LFJ0KXtpZihIZSt1dD4kZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKEhlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3Io''@;'; put 'put ''IkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEplKCRlLHR0LEhlLHV0LHF0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAscXR8fFVlKCRlLDAsSGUsNCksZy53cml0ZSgkZSx0dCxIZSx1dCwyMyw0KSxIZSs0fWZ1bmN0aW9uIG90KCRlLHR0LEhlLHV0LHF0KXtyZXR1cm4gdHQ9K3R0LEhl''@;'; put 'put ''Pj4+PTAscXR8fFVlKCRlLDAsSGUsOCksZy53cml0ZSgkZSx0dCxIZSx1dCw1Miw4KSxIZSs4fU8ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHR0LEhlKXtjb25zdCB1dD10aGlzLmxlbmd0aDsodHQ9fn50dCk8MD8odHQrPXV0KTwwJiYodHQ9MCk6dHQ+dXQmJih0dD11dCksKEhlPXZvaWQg''@;'; put 'put ''MD09PUhlP3V0On5+SGUpPDA/KEhlKz11dCk8MCYmKEhlPTApOkhlPnV0JiYoSGU9dXQpLEhlPHR0JiYoSGU9dHQpO2NvbnN0IHF0PXRoaXMuc3ViYXJyYXkodHQsSGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocXQsTy5wcm90b3R5cGUpLHF0fSxPLnByb3RvdHlwZS5yZWFkVWlu''@;'; put 'put ''dExFPU8ucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odHQsSGUsdXQpe3R0Pj4+PTAsSGU+Pj49MCx1dHx8YWUodHQsSGUsdGhpcy5sZW5ndGgpO2xldCBxdD10aGlzW3R0XSxSdD0xLFB0PTA7Zm9yKDsrK1B0PEhlJiYoUnQqPTI1Nik7KXF0Kz10aGlzW3R0K1B0XSpSdDtyZXR1cm4g''@;'; put 'put ''cXR9LE8ucHJvdG90eXBlLnJlYWRVaW50QkU9Ty5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0dCxIZSx1dCl7dHQ+Pj49MCxIZT4+Pj0wLHV0fHxhZSh0dCxIZSx0aGlzLmxlbmd0aCk7bGV0IHF0PXRoaXNbdHQrLS1IZV0sUnQ9MTtmb3IoO0hlPjAmJihSdCo9MjU2KTspcXQrPXRo''@;'; put 'put ''aXNbdHQrLS1IZV0qUnQ7cmV0dXJuIHF0fSxPLnByb3RvdHlwZS5yZWFkVWludDg9Ty5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0dF19LE8ucHJvdG90eXBlLnJlYWRVaW50MTZMRT1PLnBy''@;'; put 'put ''b3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCwyLHRoaXMubGVuZ3RoKSx0aGlzW3R0XXx0aGlzW3R0KzFdPDw4fSxPLnByb3RvdHlwZS5yZWFkVWludDE2QkU9Ty5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHR0LEhl''@;'; put 'put ''KXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsMix0aGlzLmxlbmd0aCksdGhpc1t0dF08PDh8dGhpc1t0dCsxXX0sTy5wcm90b3R5cGUucmVhZFVpbnQzMkxFPU8ucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDQsdGhpcy5s''@;'; put 'put ''ZW5ndGgpLCh0aGlzW3R0XXx0aGlzW3R0KzFdPDw4fHRoaXNbdHQrMl08PDE2KSsxNjc3NzIxNip0aGlzW3R0KzNdfSxPLnByb3RvdHlwZS5yZWFkVWludDMyQkU9Ty5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsNCx0aGlz''@;'; put 'put ''Lmxlbmd0aCksMTY3NzcyMTYqdGhpc1t0dF0rKHRoaXNbdHQrMV08PDE2fHRoaXNbdHQrMl08PDh8dGhpc1t0dCszXSl9LE8ucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRT1EdChmdW5jdGlvbih0dCl7RmUodHQ+Pj49MCwib2Zmc2V0Iik7Y29uc3QgSGU9dGhpc1t0dF0sdXQ9dGhpc1t0dCs3''@;'; put 'put ''XTsodm9pZCAwPT09SGV8fHZvaWQgMD09PXV0KSYmT2UodHQsdGhpcy5sZW5ndGgtOCk7Y29uc3QgcXQ9SGUrMjU2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSt0aGlzWysrdHRdKjIqKjI0LFJ0PXRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSt1dCoyKioy''@;'; put 'put ''NDtyZXR1cm4gQmlnSW50KHF0KSsoQmlnSW50KFJ0KTw8QmlnSW50KDMyKSl9KSxPLnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkU9RHQoZnVuY3Rpb24odHQpe0ZlKHR0Pj4+PTAsIm9mZnNldCIpO2NvbnN0IEhlPXRoaXNbdHRdLHV0PXRoaXNbdHQrN107KHZvaWQgMD09PUhlfHx2b2lkIDA9''@;'; put 'put ''PT11dCkmJk9lKHR0LHRoaXMubGVuZ3RoLTgpO2NvbnN0IHF0PUhlKjIqKjI0KzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdGhpc1srK3R0XSxSdD10aGlzWysrdHRdKjIqKjI0KzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdXQ7cmV0dXJuKEJpZ0ludChxdCk8PEJp''@;'; put 'put ''Z0ludCgzMikpK0JpZ0ludChSdCl9KSxPLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odHQsSGUsdXQpe3R0Pj4+PTAsSGU+Pj49MCx1dHx8YWUodHQsSGUsdGhpcy5sZW5ndGgpO2xldCBxdD10aGlzW3R0XSxSdD0xLFB0PTA7Zm9yKDsrK1B0PEhlJiYoUnQqPTI1Nik7KXF0Kz10aGlz''@;'; put 'put ''W3R0K1B0XSpSdDtyZXR1cm4gUnQqPTEyOCxxdD49UnQmJihxdC09TWF0aC5wb3coMiw4KkhlKSkscXR9LE8ucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0dCxIZSx1dCl7dHQ+Pj49MCxIZT4+Pj0wLHV0fHxhZSh0dCxIZSx0aGlzLmxlbmd0aCk7bGV0IHF0PUhlLFJ0PTEsUHQ9dGhp''@;'; put 'put ''c1t0dCstLXF0XTtmb3IoO3F0PjAmJihSdCo9MjU2KTspUHQrPXRoaXNbdHQrLS1xdF0qUnQ7cmV0dXJuIFJ0Kj0xMjgsUHQ+PVJ0JiYoUHQtPU1hdGgucG93KDIsOCpIZSkpLFB0fSxPLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0''@;'; put 'put ''LDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3R0XT8tMSooMjU1LXRoaXNbdHRdKzEpOnRoaXNbdHRdfSxPLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbih0dCxIZSl7dHQ+Pj49MCxIZXx8YWUodHQsMix0aGlzLmxlbmd0aCk7Y29uc3QgdXQ9dGhpc1t0dF18dGhpc1t0dCsxXTw8ODty''@;'; put 'put ''ZXR1cm4gMzI3NjgmdXQ/NDI5NDkwMTc2MHx1dDp1dH0sTy5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odHQsSGUpe3R0Pj4+PTAsSGV8fGFlKHR0LDIsdGhpcy5sZW5ndGgpO2NvbnN0IHV0PXRoaXNbdHQrMV18dGhpc1t0dF08PDg7cmV0dXJuIDMyNzY4JnV0PzQyOTQ5MDE3NjB8''@;'; put 'put ''dXQ6dXR9LE8ucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0dF18dGhpc1t0dCsxXTw8OHx0aGlzW3R0KzJdPDwxNnx0aGlzW3R0KzNdPDwyNH0sTy5wcm90b3R5cGUucmVhZEludDMyQkU9''@;'; put 'put ''ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSx0aGlzW3R0XTw8MjR8dGhpc1t0dCsxXTw8MTZ8dGhpc1t0dCsyXTw8OHx0aGlzW3R0KzNdfSxPLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRT1EdChmdW5jdGlvbih0dCl7RmUodHQ+Pj49MCwi''@;'; put 'put ''b2Zmc2V0Iik7Y29uc3QgSGU9dGhpc1t0dF0sdXQ9dGhpc1t0dCs3XTtyZXR1cm4odm9pZCAwPT09SGV8fHZvaWQgMD09PXV0KSYmT2UodHQsdGhpcy5sZW5ndGgtOCksKEJpZ0ludCh0aGlzW3R0KzRdKzI1Nip0aGlzW3R0KzVdKzY1NTM2KnRoaXNbdHQrNl0rKHV0PDwyNCkpPDxCaWdJbnQo''@;'; put 'put ''MzIpKStCaWdJbnQoSGUrMjU2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSsxNjc3NzIxNip0aGlzWysrdHRdKX0pLE8ucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPUR0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBIZT10aGlzW3R0XSx1dD10aGlzW3R0Kzdd''@;'; put 'put ''Oyh2b2lkIDA9PT1IZXx8dm9pZCAwPT09dXQpJiZPZSh0dCx0aGlzLmxlbmd0aC04KTtjb25zdCBxdD0oSGU8PDI0KSs2NTUzNip0aGlzWysrdHRdKzI1Nip0aGlzWysrdHRdK3RoaXNbKyt0dF07cmV0dXJuKEJpZ0ludChxdCk8PEJpZ0ludCgzMikpK0JpZ0ludCgxNjc3NzIxNip0aGlzWysr''@;'; put 'put ''dHRdKzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdXQpfSksTy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSxnLnJlYWQodGhpcyx0dCwhMCwyMyw0KX0sTy5wcm90b3R5cGUucmVhZEZs''@;'; put 'put ''b2F0QkU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSxnLnJlYWQodGhpcyx0dCwhMSwyMyw0KX0sTy5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsOCx0aGlzLmxlbmd0''@;'; put 'put ''aCksZy5yZWFkKHRoaXMsdHQsITAsNTIsOCl9LE8ucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDgsdGhpcy5sZW5ndGgpLGcucmVhZCh0aGlzLHR0LCExLDUyLDgpfSxPLnByb3RvdHlwZS53cml0ZVVpbnRMRT1PLnByb3Rv''@;'; put 'put ''dHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0dCxIZSx1dCxxdCl7dHQ9K3R0LEhlPj4+PTAsdXQ+Pj49MCxxdHx8dGUodGhpcyx0dCxIZSx1dCxNYXRoLnBvdygyLDgqdXQpLTEsMCk7bGV0IFJ0PTEsUHQ9MDtmb3IodGhpc1tIZV09MjU1JnR0OysrUHQ8dXQmJihSdCo9MjU2KTspdGhpc1tI''@;'; put 'put ''ZStQdF09dHQvUnQmMjU1O3JldHVybiBIZSt1dH0sTy5wcm90b3R5cGUud3JpdGVVaW50QkU9Ty5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24odHQsSGUsdXQscXQpe3R0PSt0dCxIZT4+Pj0wLHV0Pj4+PTAscXR8fHRlKHRoaXMsdHQsSGUsdXQsTWF0aC5wb3coMiw4KnV0KS0xLDAp''@;'; put 'put ''O2xldCBSdD11dC0xLFB0PTE7Zm9yKHRoaXNbSGUrUnRdPTI1NSZ0dDstLVJ0Pj0wJiYoUHQqPTI1Nik7KXRoaXNbSGUrUnRdPXR0L1B0JjI1NTtyZXR1cm4gSGUrdXR9LE8ucHJvdG90eXBlLndyaXRlVWludDg9Ty5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0dCxIZSx1dCl7cmV0''@;'; put 'put ''dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDEsMjU1LDApLHRoaXNbSGVdPTI1NSZ0dCxIZSsxfSxPLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFPU8ucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8''@;'; put 'put ''dGUodGhpcyx0dCxIZSwyLDY1NTM1LDApLHRoaXNbSGVdPTI1NSZ0dCx0aGlzW0hlKzFdPXR0Pj4+OCxIZSsyfSxPLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPU8ucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUo''@;'; put 'put ''dGhpcyx0dCxIZSwyLDY1NTM1LDApLHRoaXNbSGVdPXR0Pj4+OCx0aGlzW0hlKzFdPTI1NSZ0dCxIZSsyfSxPLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPU8ucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhp''@;'; put 'put ''cyx0dCxIZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tIZSszXT10dD4+PjI0LHRoaXNbSGUrMl09dHQ+Pj4xNix0aGlzW0hlKzFdPXR0Pj4+OCx0aGlzW0hlXT0yNTUmdHQsSGUrNH0sTy5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1PLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHR0''@;'; put 'put ''LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbSGVdPXR0Pj4+MjQsdGhpc1tIZSsxXT10dD4+PjE2LHRoaXNbSGUrMl09dHQ+Pj44LHRoaXNbSGUrM109MjU1JnR0LEhlKzR9LE8ucHJvdG90eXBlLndyaXRlQmlnVUlu''@;'; put 'put ''dDY0TEU9RHQoZnVuY3Rpb24odHQsSGU9MCl7cmV0dXJuIHNlKHRoaXMsdHQsSGUsQmlnSW50KDApLEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpfSksTy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRT1EdChmdW5jdGlvbih0dCxIZT0wKXtyZXR1cm4gd2UodGhpcyx0dCxIZSxCaWdJ''@;'; put 'put ''bnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxPLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXtpZih0dD0rdHQsSGU+Pj49MCwhcXQpe2NvbnN0IFF0PU1hdGgucG93KDIsOCp1dC0xKTt0ZSh0aGlzLHR0LEhlLHV0LFF0LTEsLVF0KX1sZXQg''@;'; put 'put ''UnQ9MCxQdD0xLGNpPTA7Zm9yKHRoaXNbSGVdPTI1NSZ0dDsrK1J0PHV0JiYoUHQqPTI1Nik7KXR0PDAmJjA9PT1jaSYmMCE9PXRoaXNbSGUrUnQtMV0mJihjaT0xKSx0aGlzW0hlK1J0XT0odHQvUHR8MCktY2kmMjU1O3JldHVybiBIZSt1dH0sTy5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5j''@;'; put 'put ''dGlvbih0dCxIZSx1dCxxdCl7aWYodHQ9K3R0LEhlPj4+PTAsIXF0KXtjb25zdCBRdD1NYXRoLnBvdygyLDgqdXQtMSk7dGUodGhpcyx0dCxIZSx1dCxRdC0xLC1RdCl9bGV0IFJ0PXV0LTEsUHQ9MSxjaT0wO2Zvcih0aGlzW0hlK1J0XT0yNTUmdHQ7LS1SdD49MCYmKFB0Kj0yNTYpOyl0dDww''@;'; put 'put ''JiYwPT09Y2kmJjAhPT10aGlzW0hlK1J0KzFdJiYoY2k9MSksdGhpc1tIZStSdF09KHR0L1B0fDApLWNpJjI1NTtyZXR1cm4gSGUrdXR9LE8ucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDEsMTI3''@;'; put 'put ''LC0xMjgpLHR0PDAmJih0dD0yNTUrdHQrMSksdGhpc1tIZV09MjU1JnR0LEhlKzF9LE8ucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0hlXT0yNTUmdHQs''@;'; put 'put ''dGhpc1tIZSsxXT10dD4+PjgsSGUrMn0sTy5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbSGVdPXR0Pj4+OCx0aGlzW0hlKzFdPTI1NSZ0dCxIZSsyfSxP''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbSGVdPTI1NSZ0dCx0aGlzW0hlKzFdPXR0Pj4+OCx0aGlzW0hlKzJdPXR0Pj4+MTYsdGhp''@;'; put 'put ''c1tIZSszXT10dD4+PjI0LEhlKzR9LE8ucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdHQ8MCYmKHR0PTQyOTQ5NjcyOTUrdHQrMSksdGhpc1tI''@;'; put 'put ''ZV09dHQ+Pj4yNCx0aGlzW0hlKzFdPXR0Pj4+MTYsdGhpc1tIZSsyXT10dD4+PjgsdGhpc1tIZSszXT0yNTUmdHQsSGUrNH0sTy5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NExFPUR0KGZ1bmN0aW9uKHR0LEhlPTApe3JldHVybiBzZSh0aGlzLHR0LEhlLC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIpLEJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZmZmZmIikpfSksTy5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFPUR0KGZ1bmN0aW9uKHR0LEhlPTApe3JldHVybiB3ZSh0aGlzLHR0LEhlLC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''IikpfSksTy5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gSmUodGhpcyx0dCxIZSwhMCx1dCl9LE8ucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIEplKHRoaXMsdHQsSGUsITEsdXQpfSxPLnByb3RvdHlwZS53''@;'; put 'put ''cml0ZURvdWJsZUxFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gb3QodGhpcyx0dCxIZSwhMCx1dCl9LE8ucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBvdCh0aGlzLHR0LEhlLCExLHV0KX0sTy5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0dCxI''@;'; put 'put ''ZSx1dCxxdCl7aWYoIU8uaXNCdWZmZXIodHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKHV0fHwodXQ9MCksIXF0JiYwIT09cXQmJihxdD10aGlzLmxlbmd0aCksSGU+PXR0Lmxlbmd0aCYmKEhlPXR0Lmxlbmd0aCksSGV8fChIZT0wKSxx''@;'; put 'put ''dD4wJiZxdDx1dCYmKHF0PXV0KSxxdD09PXV0fHwwPT09dHQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoSGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHV0PDB8fHV0Pj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFu''@;'; put 'put ''Z2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocXQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtxdD50aGlzLmxlbmd0aCYmKHF0PXRoaXMubGVuZ3RoKSx0dC5sZW5ndGgtSGU8cXQtdXQmJihxdD10dC5sZW5ndGgtSGUrdXQpO2NvbnN0''@;'; put 'put ''IFJ0PXF0LXV0O3JldHVybiB0aGlzPT09dHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihIZSx1dCxxdCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodHQsdGhpcy5zdWJhcnJheSh1dCxxdCksSGUpLFJ0''@;'; put 'put ''fSxPLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXtpZigic3RyaW5nIj09dHlwZW9mIHR0KXtpZigic3RyaW5nIj09dHlwZW9mIEhlPyhxdD1IZSxIZT0wLHV0PXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHV0JiYocXQ9dXQsdXQ9dGhpcy5sZW5ndGgpLHZvaWQg''@;'; put 'put ''MCE9PXF0JiYic3RyaW5nIiE9dHlwZW9mIHF0KXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIHF0JiYhTy5pc0VuY29kaW5nKHF0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3F0KTtp''@;'; put 'put ''ZigxPT09dHQubGVuZ3RoKXtjb25zdCBQdD10dC5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1xdCYmUHQ8MTI4fHwibGF0aW4xIj09PXF0KSYmKHR0PVB0KX19ZWxzZSJudW1iZXIiPT10eXBlb2YgdHQ/dHQmPTI1NToiYm9vbGVhbiI9PXR5cGVvZiB0dCYmKHR0PU51bWJlcih0dCkpO2lmKEhl''@;'; put 'put ''PDB8fHRoaXMubGVuZ3RoPEhlfHx0aGlzLmxlbmd0aDx1dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYodXQ8PUhlKXJldHVybiB0aGlzO2xldCBSdDtpZihIZT4+Pj0wLHV0PXZvaWQgMD09PXV0P3RoaXMubGVuZ3RoOnV0Pj4+MCx0dHx8KHR0PTApLCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgdHQpZm9yKFJ0PUhlO1J0PHV0OysrUnQpdGhpc1tSdF09dHQ7ZWxzZXtjb25zdCBQdD1PLmlzQnVmZmVyKHR0KT90dDpPLmZyb20odHQscXQpLGNpPVB0Lmxlbmd0aDtpZigwPT09Y2kpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK3R0KyciIGlzIGlu''@;'; put 'put ''dmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoUnQ9MDtSdDx1dC1IZTsrK1J0KXRoaXNbUnQrSGVdPVB0W1J0JWNpXX1yZXR1cm4gdGhpc307Y29uc3QgeGU9e307ZnVuY3Rpb24gdmUoJGUsdHQsSGUpe3hlWyRlXT1jbGFzcyBleHRlbmRzIEhle2NvbnN0cnVjdG9yKCl7c3VwZXIo''@;'; put 'put ''KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibWVzc2FnZSIse3ZhbHVlOnR0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0aGlzLm5hbWU9YCR7dGhpcy5uYW1lfSBbJHskZX1dYCxkZWxldGUgdGhpcy5uYW1lfWdldCBjb2RlKCl7cmV0''@;'; put 'put ''dXJuICRlfXNldCBjb2RlKHF0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29kZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnF0LHdyaXRhYmxlOiEwfSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFskeyRlfV06ICR7dGhpcy5tZXNzYWdlfWB9''@;'; put 'put ''fX1mdW5jdGlvbiBYZSgkZSl7bGV0IHR0PSIiLEhlPSRlLmxlbmd0aDtjb25zdCB1dD0iLSI9PT0kZVswXT8xOjA7Zm9yKDtIZT49dXQrNDtIZS09Myl0dD1gXyR7JGUuc2xpY2UoSGUtMyxIZSl9JHt0dH1gO3JldHVybmAkeyRlLnNsaWNlKDAsSGUpfSR7dHR9YH1mdW5jdGlvbiBEZSgkZSx0''@;'; put 'put ''dCxIZSx1dCxxdCxSdCl7aWYoJGU+SGV8fCRlPHR0KXtjb25zdCBQdD0iYmlnaW50Ij09dHlwZW9mIHR0PyJuIjoiIjtsZXQgY2k7dGhyb3cgY2k9UnQ+Mz8wPT09dHR8fHR0PT09QmlnSW50KDApP2A+PSAwJHtQdH0gYW5kIDwgMiR7UHR9ICoqICR7OCooUnQrMSl9JHtQdH1gOmA+PSAtKDIk''@;'; put 'put ''e1B0fSAqKiAkezgqKFJ0KzEpLTF9JHtQdH0pIGFuZCA8IDIgKiogJHs4KihSdCsxKS0xfSR7UHR9YDpgPj0gJHt0dH0ke1B0fSBhbmQgPD0gJHtIZX0ke1B0fWAsbmV3IHhlLkVSUl9PVVRfT0ZfUkFOR0UoInZhbHVlIixjaSwkZSl9IWZ1bmN0aW9uIHplKCRlLHR0LEhlKXtGZSh0dCwib2Zm''@;'; put 'put ''c2V0IiksKHZvaWQgMD09PSRlW3R0XXx8dm9pZCAwPT09JGVbdHQrSGVdKSYmT2UodHQsJGUubGVuZ3RoLShIZSsxKSl9KHV0LHF0LFJ0KX1mdW5jdGlvbiBGZSgkZSx0dCl7aWYoIm51bWJlciIhPXR5cGVvZiAkZSl0aHJvdyBuZXcgeGUuRVJSX0lOVkFMSURfQVJHX1RZUEUodHQsIm51bWJl''@;'; put 'put ''ciIsJGUpfWZ1bmN0aW9uIE9lKCRlLHR0LEhlKXt0aHJvdyBNYXRoLmZsb29yKCRlKSE9PSRlPyhGZSgkZSxIZSksbmV3IHhlLkVSUl9PVVRfT0ZfUkFOR0UoSGV8fCJvZmZzZXQiLCJhbiBpbnRlZ2VyIiwkZSkpOnR0PDA/bmV3IHhlLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUzpuZXcgeGUu''@;'; put 'put ''RVJSX09VVF9PRl9SQU5HRShIZXx8Im9mZnNldCIsYD49ICR7SGU/MTowfSBhbmQgPD0gJHt0dH1gLCRlKX12ZSgiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTIixmdW5jdGlvbigkZSl7cmV0dXJuICRlP2AkeyRlfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgOiJBdHRlbXB0IHRvIGFj''@;'; put 'put ''Y2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzIn0sUmFuZ2VFcnJvciksdmUoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbigkZSx0dCl7cmV0dXJuYFRoZSAiJHskZX0iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2Yg''@;'; put 'put ''dHR9YH0sVHlwZUVycm9yKSx2ZSgiRVJSX09VVF9PRl9SQU5HRSIsZnVuY3Rpb24oJGUsdHQsSGUpe2xldCB1dD1gVGhlIHZhbHVlIG9mICIkeyRlfSIgaXMgb3V0IG9mIHJhbmdlLmAscXQ9SGU7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoSGUpJiZNYXRoLmFicyhIZSk+NDI5NDk2NzI5Nj9x''@;'; put 'put ''dD1YZShTdHJpbmcoSGUpKToiYmlnaW50Ij09dHlwZW9mIEhlJiYocXQ9U3RyaW5nKEhlKSwoSGU+QmlnSW50KDIpKipCaWdJbnQoMzIpfHxIZTwtKEJpZ0ludCgyKSoqQmlnSW50KDMyKSkpJiYocXQ9WGUocXQpKSxxdCs9Im4iKSx1dCs9YCBJdCBtdXN0IGJlICR7dHR9LiBSZWNlaXZlZCAk''@;'; put 'put ''e3F0fWAsdXR9LFJhbmdlRXJyb3IpO2NvbnN0IEllPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24ga2UoJGUsdHQpe2xldCBIZTt0dD10dHx8MS8wO2NvbnN0IHV0PSRlLmxlbmd0aDtsZXQgcXQ9bnVsbDtjb25zdCBSdD1bXTtmb3IobGV0IFB0PTA7UHQ8dXQ7KytQdCl7aWYoSGU9JGUu''@;'; put 'put ''Y2hhckNvZGVBdChQdCksSGU+NTUyOTUmJkhlPDU3MzQ0KXtpZighcXQpe2lmKEhlPjU2MzE5KXsodHQtPTMpPi0xJiZSdC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihQdCsxPT09dXQpeyh0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfXF0PUhlO2NvbnRp''@;'; put 'put ''bnVlfWlmKEhlPDU2MzIwKXsodHQtPTMpPi0xJiZSdC5wdXNoKDIzOSwxOTEsMTg5KSxxdD1IZTtjb250aW51ZX1IZT02NTUzNisocXQtNTUyOTY8PDEwfEhlLTU2MzIwKX1lbHNlIHF0JiYodHQtPTMpPi0xJiZSdC5wdXNoKDIzOSwxOTEsMTg5KTtpZihxdD1udWxsLEhlPDEyOCl7aWYoKHR0''@;'; put 'put ''LT0xKTwwKWJyZWFrO1J0LnB1c2goSGUpfWVsc2UgaWYoSGU8MjA0OCl7aWYoKHR0LT0yKTwwKWJyZWFrO1J0LnB1c2goSGU+PjZ8MTkyLDYzJkhlfDEyOCl9ZWxzZSBpZihIZTw2NTUzNil7aWYoKHR0LT0zKTwwKWJyZWFrO1J0LnB1c2goSGU+PjEyfDIyNCxIZT4+NiY2M3wxMjgsNjMmSGV8''@;'; put 'put ''MTI4KX1lbHNle2lmKCEoSGU8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodHQtPTQpPDApYnJlYWs7UnQucHVzaChIZT4+MTh8MjQwLEhlPj4xMiY2M3wxMjgsSGU+PjYmNjN8MTI4LDYzJkhlfDEyOCl9fXJldHVybiBSdH1mdW5jdGlvbiBudCgk''@;'; put 'put ''ZSl7cmV0dXJuIF8udG9CeXRlQXJyYXkoZnVuY3Rpb24gVmUoJGUpe2lmKCgkZT0oJGU9JGUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoSWUsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoOyRlLmxlbmd0aCU0IT0wOykkZSs9Ij0iO3JldHVybiAkZX0oJGUpKX1mdW5jdGlvbiBR''@;'; put 'put ''ZSgkZSx0dCxIZSx1dCl7bGV0IHF0O2ZvcihxdD0wO3F0PHV0JiYhKHF0K0hlPj10dC5sZW5ndGh8fHF0Pj0kZS5sZW5ndGgpOysrcXQpdHRbcXQrSGVdPSRlW3F0XTtyZXR1cm4gcXR9ZnVuY3Rpb24gdW4oJGUsdHQpe3JldHVybiAkZSBpbnN0YW5jZW9mIHR0fHxudWxsIT0kZSYmbnVsbCE9''@;'; put 'put ''JGUuY29uc3RydWN0b3ImJm51bGwhPSRlLmNvbnN0cnVjdG9yLm5hbWUmJiRlLmNvbnN0cnVjdG9yLm5hbWU9PT10dC5uYW1lfWZ1bmN0aW9uIHl0KCRlKXtyZXR1cm4gJGUhPSRlfWNvbnN0IE10PWZ1bmN0aW9uKCl7Y29uc3QgJGU9IjAxMjM0NTY3ODlhYmNkZWYiLHR0PW5ldyBBcnJheSgy''@;'; put 'put ''NTYpO2ZvcihsZXQgSGU9MDtIZTwxNjsrK0hlKXtjb25zdCB1dD0xNipIZTtmb3IobGV0IHF0PTA7cXQ8MTY7KytxdCl0dFt1dCtxdF09JGVbSGVdKyRlW3F0XX1yZXR1cm4gdHR9KCk7ZnVuY3Rpb24gRHQoJGUpe3JldHVybiB0eXBlb2YgQmlnSW50PiJ1Ij9pdDokZX1mdW5jdGlvbiBpdCgp''@;'; put 'put ''e3Rocm93IG5ldyBFcnJvcigiQmlnSW50IG5vdCBzdXBwb3J0ZWQiKX19LDUxMTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NjEyKSxfPXkoMTc2OCksZz15KDg5MjgpLEI9eSg5NzcwKTt1ZS5leHBvcnRzPUJ8fEkuY2FsbChnLF8pfSwzMTkyOih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXkoODYxMiksXz15KDE3NjgpLGc9eSg1MTE2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIGcoSSxfLGFyZ3VtZW50cyl9fSwxNzY4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5fSw4OTI4OnVlPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3VlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGx9LDMxOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg2MTIpLF89eSg0NDUzKSxnPXkoODkyOCksQj15KDUxMTYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7aWYoUC5sZW5ndGg8MXx8ImZ1bmN0aW9uIiE9''@;'; put 'put ''dHlwZW9mIFBbMF0pdGhyb3cgbmV3IF8oImEgZnVuY3Rpb24gaXMgcmVxdWlyZWQiKTtyZXR1cm4gQihJLGcsUCl9fSw5NzcwOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fSwxOTI0Oih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPXkoMjEwKSxfPXkoNTU1OSksZz1fKEkoIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiIpKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7dmFyIEY9SSh3LCEhUCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEYmJmcodywiLnByb3RvdHlwZS4iKT4tMT9fKEYpOkZ9''@;'; put 'put ''fSw1NTU5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzc3MSksXz15KDQ0MjkpLGc9eSgzMTkpLEI9eSgzMTkyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFApe3ZhciBGPWcoYXJndW1lbnRzKSxPPVAubGVuZ3RoLShhcmd1bWVudHMubGVuZ3RoLTEpO3JldHVybiBJKEYsMSsoTz4w''@;'; put 'put ''P086MCksITApfSxfP18odWUuZXhwb3J0cywiYXBwbHkiLHt2YWx1ZTpCfSk6dWUuZXhwb3J0cy5hcHBseT1CfSw3Mzc5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjEwKSxfPXkoMzE5KSxnPV8oW0koIiVTdHJpbmcucHJvdG90eXBlLmluZGV4T2YlIildKTt1ZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKHcsUCl7dmFyIEY9SSh3LCEhUCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEYmJmcodywiLnByb3RvdHlwZS4iKT4tMT9fKFtGXSk6Rn19LDEwMjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz15KDI4MzApLlRyYW5zZm9ybSxnPXko''@;'; put 'put ''MjU1MykucztmdW5jdGlvbiB3KHope18uY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2Ygeix0aGlzLmhhc2hNb2RlP3RoaXNbel09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmlu''@;'; put 'put ''YWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9eSg1NzE3KSh3LF8pO3ZhciBQPXR5cGVvZiBVaW50OEFycmF5PCJ1IixGPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmQXJy''@;'; put 'put ''YXlCdWZmZXIuaXNWaWV3JiYoSS5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLlRZUEVEX0FSUkFZX1NVUFBPUlQpO3cucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih6LE4sTCl7dmFyIEs9ZnVuY3Rpb24gTyh6LE4pe2lmKHogaW5zdGFuY2VvZiBJKXJldHVybiB6O2lmKCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgeilyZXR1cm4gSS5mcm9tKHosTik7aWYoRiYmQXJyYXlCdWZmZXIuaXNWaWV3KHopKXtpZigwPT09ei5ieXRlTGVuZ3RoKXJldHVybiBJLmFsbG9jKDApO3ZhciBMPUkuZnJvbSh6LmJ1ZmZlcix6LmJ5dGVPZmZzZXQsei5ieXRlTGVuZ3RoKTtpZihMLmJ5dGVMZW5n''@;'; put 'put ''dGg9PT16LmJ5dGVMZW5ndGgpcmV0dXJuIEx9aWYoUCYmeiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuaXNCdWZmZXIoeikmJnouY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB6LmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZ6LmNvbnN0cnVjdG9yLmlzQnVmZmVyKHopKXJldHVybiBJ''@;'; put 'put ''LmZyb20oeik7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEJ1ZmZlciwgVHlwZWRBcnJheSwgb3IgRGF0YVZpZXcuJyl9KHosTiksVT10aGlzLl91cGRhdGUoSyk7cmV0dXJuIHRoaXMuaGFz''@;'; put 'put ''aE1vZGU/dGhpczooTCYmKFU9dGhpcy5fdG9TdHJpbmcoVSxMKSksVSl9LHcucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSx3LnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3Vw''@;'; put 'put ''cG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlp''@;'; put 'put ''bmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHosTixMKXt2YXIgSzt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoeik6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh6KSl9Y2F0Y2goVSl7Sz1VfWZpbmFsbHl7''@;'; put 'put ''TChLKX19LHcucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih6KXt2YXIgTjt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaChMKXtOPUx9eihOKX0sdy5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy5fX2ZpbmFsKCl8fEkuYWxsb2MoMCk7''@;'; put 'put ''cmV0dXJuIHomJihOPXRoaXMuX3RvU3RyaW5nKE4seiwhMCkpLE59LHcucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih6LE4sTCl7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGcoTiksdGhpcy5fZW5jb2Rpbmc9TiksdGhpcy5fZW5jb2RpbmchPT1OKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiY2FuXHUyMDE5dCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIEs9dGhpcy5fZGVjb2Rlci53cml0ZSh6KTtyZXR1cm4gTCYmKEsrPXRoaXMuX2RlY29kZXIuZW5kKCkpLEt9LHVlLmV4cG9ydHM9d30sNTEwODoodWUsWCx5KT0+e3ZhciBJPXkoOTUzOSksXz15KDkyODIpO2Z1bmN0''@;'; put 'put ''aW9uIGcoKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX12YXIgdyxCPUFycmF5LnByb3RvdHlwZS5zbGljZSxQPXt9O3c9dHlwZW9mIHkuZzwidSImJnkuZy5jb25zb2xlP3kuZy5jb25zb2xlOnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY29uc29sZT93aW5kb3cuY29uc29sZTp7fTtm''@;'; put 'put ''b3IodmFyIEY9W1tmdW5jdGlvbiBLKCl7fSwibG9nIl0sW2Z1bmN0aW9uIFUoKXt3LmxvZy5hcHBseSh3LGFyZ3VtZW50cyl9LCJpbmZvIl0sW2Z1bmN0aW9uIFcoKXt3LmxvZy5hcHBseSh3LGFyZ3VtZW50cyl9LCJ3YXJuIl0sW2Z1bmN0aW9uIFkoKXt3Lndhcm4uYXBwbHkodyxhcmd1bWVu''@;'; put 'put ''dHMpfSwiZXJyb3IiXSxbZnVuY3Rpb24gcShsZSl7UFtsZV09ZygpfSwidGltZSJdLFtmdW5jdGlvbiBlZShsZSl7dmFyIG1lPVBbbGVdO2lmKCFtZSl0aHJvdyBuZXcgRXJyb3IoIk5vIHN1Y2ggbGFiZWw6ICIrbGUpO2RlbGV0ZSBQW2xlXTt2YXIgX2U9ZygpLW1lO3cubG9nKGxlKyI6ICIr''@;'; put 'put ''X2UrIm1zIil9LCJ0aW1lRW5kIl0sW2Z1bmN0aW9uIEooKXt2YXIgbGU9bmV3IEVycm9yO2xlLm5hbWU9IlRyYWNlIixsZS5tZXNzYWdlPUkuZm9ybWF0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx3LmVycm9yKGxlLnN0YWNrKX0sInRyYWNlIl0sW2Z1bmN0aW9uIG5lKGxlKXt3LmxvZyhJLmlu''@;'; put 'put ''c3BlY3QobGUpKyJcbiIpfSwiZGlyIl0sW2Z1bmN0aW9uIGllKGxlKXtpZighbGUpe3ZhciBtZT1CLmNhbGwoYXJndW1lbnRzLDEpO18ub2soITEsSS5mb3JtYXQuYXBwbHkobnVsbCxtZSkpfX0sImFzc2VydCJdXSxPPTA7TzxGLmxlbmd0aDtPKyspe3ZhciB6PUZbT10sTD16WzFdO3dbTF18''@;'; put 'put ''fCh3W0xdPXpbMF0pfXVlLmV4cG9ydHM9d30sNjQ5NzoodWUsWCx5KT0+e3ZhciBJPXkoODc2NCkuQnVmZmVyO2Z1bmN0aW9uIHEoZWUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZWUpfVguaXNBcnJheT1mdW5jdGlvbiBfKGVlKXtyZXR1cm4gQXJyYXkuaXNBcnJh''@;'; put 'put ''eT9BcnJheS5pc0FycmF5KGVlKToiW29iamVjdCBBcnJheV0iPT09cShlZSl9LFguaXNCb29sZWFuPWZ1bmN0aW9uIGcoZWUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGVlfSxYLmlzTnVsbD1mdW5jdGlvbiBCKGVlKXtyZXR1cm4gbnVsbD09PWVlfSxYLmlzTnVsbE9yVW5kZWZpbmVkPWZ1''@;'; put 'put ''bmN0aW9uIHcoZWUpe3JldHVybiBudWxsPT1lZX0sWC5pc051bWJlcj1mdW5jdGlvbiBQKGVlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGVlfSxYLmlzU3RyaW5nPWZ1bmN0aW9uIEYoZWUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZWV9LFguaXNTeW1ib2w9ZnVuY3Rpb24gTyhlZSl7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiBlZX0sWC5pc1VuZGVmaW5lZD1mdW5jdGlvbiB6KGVlKXtyZXR1cm4gdm9pZCAwPT09ZWV9LFguaXNSZWdFeHA9ZnVuY3Rpb24gTihlZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1xKGVlKX0sWC5pc09iamVjdD1mdW5jdGlvbiBMKGVlKXtyZXR1cm4i''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIGVlJiZudWxsIT09ZWV9LFguaXNEYXRlPWZ1bmN0aW9uIEsoZWUpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PXEoZWUpfSxYLmlzRXJyb3I9ZnVuY3Rpb24gVShlZSl7cmV0dXJuIltvYmplY3QgRXJyb3JdIj09PXEoZWUpfHxlZSBpbnN0YW5jZW9mIEVycm9yfSxY''@;'; put 'put ''LmlzRnVuY3Rpb249ZnVuY3Rpb24gVyhlZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGVlfSxYLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIFkoZWUpe3JldHVybiBudWxsPT09ZWV8fCJib29sZWFuIj09dHlwZW9mIGVlfHwibnVtYmVyIj09dHlwZW9mIGVlfHwic3RyaW5nIj09dHlwZW9mIGVl''@;'; put 'put ''fHwic3ltYm9sIj09dHlwZW9mIGVlfHx0eXBlb2YgZWU+InUifSxYLmlzQnVmZmVyPUkuaXNCdWZmZXJ9LDYzOTM6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXkoNjk0OCksZz15KDY0MjYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyB3KE8pfTt2YXIgQj17''@;'; put 'put ''c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUx''@;'; put 'put ''OTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiB3KEYpe3RoaXMuY3VydmVUeXBlPUJbRl0sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlz''@;'; put 'put ''LmN1cnZlVHlwZT17bmFtZTpGfSksdGhpcy5jdXJ2ZT1uZXcgXy5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIFAoRixPLHope0FycmF5LmlzQXJyYXkoRil8fChGPUYudG9BcnJheSgpKTt2YXIgTj1uZXcgSShGKTtpZih6JiZOLmxlbmd0aDx6KXt2''@;'; put 'put ''YXIgTD1uZXcgSSh6LU4ubGVuZ3RoKTtMLmZpbGwoMCksTj1JLmNvbmNhdChbTCxOXSl9cmV0dXJuIE8/Ti50b1N0cmluZyhPKTpOfUIucDIyND1CLnNlY3AyMjRyMSxCLnAyNTY9Qi5zZWNwMjU2cjE9Qi5wcmltZTI1NnYxLEIucDE5Mj1CLnNlY3AxOTJyMT1CLnByaW1lMTkydjEsQi5wMzg0''@;'; put 'put ''PUIuc2VjcDM4NHIxLEIucDUyMT1CLnNlY3A1MjFyMSx3LnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oRixPKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KEYsTyl9LHcucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVu''@;'; put 'put ''Y3Rpb24oRixPLHope3JldHVybiBPPU98fCJ1dGY4IixJLmlzQnVmZmVyKEYpfHwoRj1uZXcgSShGLE8pKSxQKHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhGKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLHosdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0''@;'; put 'put ''aCl9LHcucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihGLE8pe3ZhciB6PXRoaXMua2V5cy5nZXRQdWJsaWMoImNvbXByZXNzZWQiPT09TywhMCk7cmV0dXJuImh5YnJpZCI9PT1PJiYoelswXT16W3oubGVuZ3RoLTFdJTI/Nzo2KSxQKHosRil9LHcucHJvdG90eXBlLmdldFByaXZh''@;'; put 'put ''dGVLZXk9ZnVuY3Rpb24oRil7cmV0dXJuIFAodGhpcy5rZXlzLmdldFByaXZhdGUoKSxGKX0sdy5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKEYsTyl7cmV0dXJuIE89T3x8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsTykpLHRoaXMua2V5cy5faW1wb3J0UHVibGlj''@;'; put 'put ''KEYpLHRoaXN9LHcucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24oRixPKXtPPU98fCJ1dGY4IixJLmlzQnVmZmVyKEYpfHwoRj1uZXcgSShGLE8pKTt2YXIgej1uZXcgZyhGKTtyZXR1cm4gej16LnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCks''@;'; put 'put ''dGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKHopLHRoaXN9fSw2NDI2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5z''@;'; put 'put ''dXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVs''@;'; put 'put ''bCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNp''@;'; put 'put ''emU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoODYyMykuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9''@;'; put 'put ''MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29k''@;'; put 'put ''ZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUm''@;'; put 'put ''JkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''cClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFj''@;'; put 'put ''ZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3''@;'; put 'put ''MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJy''@;'; put 'put ''YXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGom''@;'; put 'put ''NjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEw''@;'; put 'put ''ODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlz''@;'; put 'put ''LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2''@;'; put 'put ''MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0gr''@;'; put 'put ''PTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5n''@;'; put 'put ''dGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEs''@;'; put 'put ''cC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRo''@;'; put 'put ''aXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5l''@;'; put 'put ''dyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMu''@;'; put 'put ''bGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywx''@;'; put 'put ''Njc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywx''@;'; put 'put ''NzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14''@;'; put 'put ''LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxz''@;'; put 'put ''ZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpi''@;'; put 'put ''Lmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxF''@;'; put 'put ''PSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5n''@;'; put 'put ''dGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9''@;'; put 'put ''YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4''@;'; put 'put ''fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10''@;'; put 'put ''aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlz''@;'; put 'put ''LnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJl''@;'; put 'put ''cXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpb''@;'; put 'put ''bV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1h''@;'; put 'put ''dGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9u''@;'; put 'put ''KHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMu''@;'; put 'put ''bGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRv''@;'; put 'put ''VHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmlu''@;'; put 'put ''ZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10''@;'; put 'put ''aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25l''@;'; put 'put ''KCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0''@;'; put 'put ''aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0''@;'; put 'put ''aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAu''@;'; put 'put ''bGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''bm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJu''@;'; put 'put ''IHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2''@;'; put 'put ''YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5u''@;'; put 'put ''ZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jk''@;'; put 'put ''c1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3Ro''@;'; put 'put ''XT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRp''@;'; put 'put ''dmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgp''@;'; put 'put ''LmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhD''@;'; put 'put ''PXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNb''@;'; put 'put ''al0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYm''@;'; put 'put ''KHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0s''@;'; put 'put ''dGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgx''@;'; put 'put ''OTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0''@;'; put 'put ''LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1y''@;'; put 'put ''aT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRp''@;'; put 'put ''dmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11''@;'; put 'put ''bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCks''@;'; put 'put ''RT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVs''@;'; put 'put ''KERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhu''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8''@;'; put 'put ''MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01h''@;'; put 'put ''dGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChK''@;'; put 'put ''ZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9''@;'; put 'put ''NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01h''@;'; put 'put ''dGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChE''@;'; put 'put ''ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8''@;'; put 'put ''MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdl''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVs''@;'; put 'put ''KHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhu''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQp''@;'; put 'put ''fDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11''@;'; put 'put ''bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiks''@;'; put 'put ''RT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStN''@;'; put 'put ''YXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUs''@;'; put 'put ''aG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEll''@;'; put 'put ''LHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5''@;'; put 'put ''MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkr''@;'; put 'put ''TWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtl''@;'; put 'put ''LHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4p''@;'; put 'put ''fDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFl''@;'; put 'put ''LHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5''@;'; put 'put ''MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkr''@;'; put 'put ''TWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStN''@;'; put 'put ''YXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUs''@;'; put 'put ''aHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11''@;'; put 'put ''bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCks''@;'; put 'put ''RT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVs''@;'; put 'put ''KHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9''@;'; put 'put ''NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEw''@;'; put 'put ''ODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRp''@;'; put 'put ''LDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4''@;'; put 'put ''LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxl''@;'; put 'put ''bmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNb''@;'; put 'put ''VC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14''@;'; put 'put ''OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMs''@;'; put 'put ''eCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxi''@;'; put 'put ''LHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxt''@;'; put 'put ''PU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2Uq''@;'; put 'put ''eGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihw''@;'; put 'put ''LGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0Nd''@;'; put 'put ''PXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91''@;'; put 'put ''bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsx''@;'; put 'put ''XT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlw''@;'; put 'put ''ZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5l''@;'; put 'put ''dyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNm''@;'; put 'put ''b3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0s''@;'; put 'put ''c2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3''@;'; put 'put ''IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3Ro''@;'; put 'put ''KSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0''@;'; put 'put ''aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5s''@;'; put 'put ''ZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''bXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9''@;'; put 'put ''cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJb''@;'; put 'put ''Q10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhp''@;'; put 'put ''cy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMu''@;'; put 'put ''d29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHAp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtp''@;'; put 'put ''ZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRo''@;'; put 'put ''aXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1''@;'; put 'put ''cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhp''@;'; put 'put ''cy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShw''@;'; put 'put ''LWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJp''@;'; put 'put ''bWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5i''@;'; put 'put ''PDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlz''@;'; put 'put ''dWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0''@;'; put 'put ''aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MCly''@;'; put 'put ''ZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1sw''@;'; put 'put ''XT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRu''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90''@;'; put 'put ''b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMu''@;'; put 'put ''d29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMu''@;'; put 'put ''d29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQu''@;'; put 'put ''d29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNs''@;'; put 'put ''b25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2Zv''@;'; put 'put ''cihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVy''@;'; put 'put ''biBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6''@;'; put 'put ''bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpU''@;'; put 'put ''fSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIp''@;'; put 'put ''LCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0''@;'; put 'put ''aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7''@;'; put 'put ''dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIu''@;'; put 'put ''bW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMp''@;'; put 'put ''O2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0w''@;'; put 'put ''O3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1m''@;'; put 'put ''dW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNF''@;'; put 'put ''dmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVz''@;'; put 'put ''aHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNl''@;'; put 'put ''KTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnth''@;'; put 'put ''OkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3''@;'; put 'put ''IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJu''@;'; put 'put ''KDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5p''@;'; put 'put ''c3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlz''@;'; put 'put ''LmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4''@;'; put 'put ''Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5h''@;'; put 'put ''LnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53''@;'; put 'put ''b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIg''@;'; put 'put ''VD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVy''@;'; put 'put ''bz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtp''@;'; put 'put ''Zih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90''@;'; put 'put ''eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3''@;'; put 'put ''LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRz''@;'; put 'put ''W3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxy''@;'; put 'put ''ZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhp''@;'; put 'put ''cy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNl''@;'; put 'put ''UmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJl''@;'; put 'put ''ZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJl''@;'; put 'put ''ZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhp''@;'; put 'put ''cy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0''@;'; put 'put ''aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90''@;'; put 'put ''b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBn''@;'; put 'put ''KHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51''@;'; put 'put ''bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5i''@;'; put 'put ''aXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShW''@;'; put 'put ''KXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwo''@;'; put 'put ''dGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10''@;'; put 'put ''aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlh''@;'; put 'put ''ZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0''@;'; put 'put ''cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2''@;'; put 'put ''YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5s''@;'; put 'put ''ZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1''@;'; put 'put ''bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8''@;'; put 'put ''MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAu''@;'; put 'put ''bGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBi''@;'; put 'put ''O2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxT''@;'; put 'put ''ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2co''@;'; put 'put ''IShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/''@;'; put 'put ''dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90''@;'; put 'put ''b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAs''@;'; put 'put ''Yik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''dmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnky''@;'; put 'put ''KHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9u''@;'; put 'put ''KHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDsh''@;'; put 'put ''Qy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0p''@;'; put 'put ''LnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVl''@;'; put 'put ''PTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlw''@;'; put 'put ''ZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVy''@;'; put 'put ''biBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIg''@;'; put 'put ''SD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHww''@;'; put 'put ''IT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNs''@;'; put 'put ''b25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYo''@;'; put 'put ''cC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5z''@;'; put 'put ''aGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJu''@;'; put 'put ''IG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+''@;'; put 'put ''PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9''@;'; put 'put ''fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDM0ODI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NzE3KSxfPXkoMjMxOCksZz15KDk3ODUpLEI9eSg5MDcyKSx3PXkoMTAyNyk7ZnVuY3Rpb24gUChGKXt3LmNhbGwodGhpcywiZGlnZXN0IiksdGhpcy5faGFzaD1GfUkoUCx3KSxQLnBy''@;'; put 'put ''b3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3RoaXMuX2hhc2gudXBkYXRlKEYpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFzaC5kaWdlc3QoKX0sdWUuZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4ibWQ1Ij09PShPPU8udG9Mb3dlckNhc2UoKSk/''@;'; put 'put ''bmV3IF86InJtZDE2MCI9PT1PfHwicmlwZW1kMTYwIj09PU8/bmV3IGc6bmV3IFAoQihPKSl9fSw4MDI4Oih1ZSxYLHkpPT57dmFyIEk9eSgyMzE4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3JldHVybihuZXcgSSkudXBkYXRlKF8pLmRpZ2VzdCgpfX0sODM1NToodWUsWCx5KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST15KDU3MTcpLF89eSgxMDMxKSxnPXkoMTAyNyksQj15KDk1MDkpLkJ1ZmZlcix3PXkoODAyOCksUD15KDk3ODUpLEY9eSg5MDcyKSxPPUIuYWxsb2MoMTI4KTtmdW5jdGlvbiB6KE4sTCl7Zy5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgTCYmKEw9''@;'; put 'put ''Qi5mcm9tKEwpKTt2YXIgSz0ic2hhNTEyIj09PU58fCJzaGEzODQiPT09Tj8xMjg6NjQ7dGhpcy5fYWxnPU4sdGhpcy5fa2V5PUwsTC5sZW5ndGg+Sz9MPSgicm1kMTYwIj09PU4/bmV3IFA6RihOKSkudXBkYXRlKEwpLmRpZ2VzdCgpOkwubGVuZ3RoPEsmJihMPUIuY29uY2F0KFtMLE9dLEsp''@;'; put 'put ''KTtmb3IodmFyIFc9dGhpcy5faXBhZD1CLmFsbG9jVW5zYWZlKEspLFk9dGhpcy5fb3BhZD1CLmFsbG9jVW5zYWZlKEspLHE9MDtxPEs7cSsrKVdbcV09NTReTFtxXSxZW3FdPTkyXkxbcV07dGhpcy5faGFzaD0icm1kMTYwIj09PU4/bmV3IFA6RihOKSx0aGlzLl9oYXNoLnVwZGF0ZShXKX1J''@;'; put 'put ''KHosZyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihOKXt0aGlzLl9oYXNoLnVwZGF0ZShOKX0sei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4oInJtZDE2MCI9PT10aGlzLl9hbGc/bmV3IFA6Rih0aGlzLl9hbGcpKS51''@;'; put 'put ''cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKE4pLmRpZ2VzdCgpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uKEwsSyl7cmV0dXJuInJtZDE2MCI9PT0oTD1MLnRvTG93ZXJDYXNlKCkpfHwicmlwZW1kMTYwIj09PUw/bmV3IHooInJtZDE2MCIsSyk6Im1kNSI9PT1MP25ldyBfKHcsSyk6bmV3IHooTCxL''@;'; put 'put ''KX19LDEwMzE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NzE3KSxfPXkoOTUwOSkuQnVmZmVyLGc9eSgxMDI3KSxCPV8uYWxsb2MoMTI4KSx3PTY0O2Z1bmN0aW9uIFAoRixPKXtnLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBPJiYoTz1fLmZyb20oTykp''@;'; put 'put ''LHRoaXMuX2FsZz1GLHRoaXMuX2tleT1PLE8ubGVuZ3RoPnc/Tz1GKE8pOk8ubGVuZ3RoPHcmJihPPV8uY29uY2F0KFtPLEJdLHcpKTtmb3IodmFyIHo9dGhpcy5faXBhZD1fLmFsbG9jVW5zYWZlKHcpLE49dGhpcy5fb3BhZD1fLmFsbG9jVW5zYWZlKHcpLEw9MDtMPHc7TCsrKXpbTF09NTRe''@;'; put 'put ''T1tMXSxOW0xdPTkyXk9bTF07dGhpcy5faGFzaD1bel19SShQLGcpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7dGhpcy5faGFzaC5wdXNoKEYpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgRj10aGlzLl9hbGcoXy5jb25jYXQodGhpcy5faGFzaCkpO3JldHVy''@;'; put 'put ''biB0aGlzLl9hbGcoXy5jb25jYXQoW3RoaXMuX29wYWQsRl0pKX0sdWUuZXhwb3J0cz1QfSw1ODM1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO1gucmFuZG9tQnl0ZXM9WC5ybmc9WC5wc2V1ZG9SYW5kb21CeXRlcz1YLnBybmc9eSgxNzk4KSxYLmNyZWF0ZUhhc2g9WC5IYXNoPXkoMzQ4Miks''@;'; put 'put ''WC5jcmVhdGVIbWFjPVguSG1hYz15KDgzNTUpO3ZhciBJPXkoNjA0MiksXz1PYmplY3Qua2V5cyhJKSxnPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChfKTtYLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBnfTt2''@;'; put 'put ''YXIgQj15KDU2MzIpO1gucGJrZGYyPUIucGJrZGYyLFgucGJrZGYyU3luYz1CLnBia2RmMlN5bmM7dmFyIHc9eSgzNjE0KTtYLkNpcGhlcj13LkNpcGhlcixYLmNyZWF0ZUNpcGhlcj13LmNyZWF0ZUNpcGhlcixYLkNpcGhlcml2PXcuQ2lwaGVyaXYsWC5jcmVhdGVDaXBoZXJpdj13LmNyZWF0''@;'; put 'put ''ZUNpcGhlcml2LFguRGVjaXBoZXI9dy5EZWNpcGhlcixYLmNyZWF0ZURlY2lwaGVyPXcuY3JlYXRlRGVjaXBoZXIsWC5EZWNpcGhlcml2PXcuRGVjaXBoZXJpdixYLmNyZWF0ZURlY2lwaGVyaXY9dy5jcmVhdGVEZWNpcGhlcml2LFguZ2V0Q2lwaGVycz13LmdldENpcGhlcnMsWC5saXN0Q2lw''@;'; put 'put ''aGVycz13Lmxpc3RDaXBoZXJzO3ZhciBQPXkoMjYwNyk7WC5EaWZmaWVIZWxsbWFuR3JvdXA9UC5EaWZmaWVIZWxsbWFuR3JvdXAsWC5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9UC5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsWC5nZXREaWZmaWVIZWxsbWFuPVAuZ2V0RGlmZmllSGVsbG1h''@;'; put 'put ''bixYLmNyZWF0ZURpZmZpZUhlbGxtYW49UC5jcmVhdGVEaWZmaWVIZWxsbWFuLFguRGlmZmllSGVsbG1hbj1QLkRpZmZpZUhlbGxtYW47dmFyIEY9eSg0NzQzKTtYLmNyZWF0ZVNpZ249Ri5jcmVhdGVTaWduLFguU2lnbj1GLlNpZ24sWC5jcmVhdGVWZXJpZnk9Ri5jcmVhdGVWZXJpZnksWC5W''@;'; put 'put ''ZXJpZnk9Ri5WZXJpZnksWC5jcmVhdGVFQ0RIPXkoNjM5Myk7dmFyIE89eSg3OTAwKTtYLnB1YmxpY0VuY3J5cHQ9Ty5wdWJsaWNFbmNyeXB0LFgucHJpdmF0ZUVuY3J5cHQ9Ty5wcml2YXRlRW5jcnlwdCxYLnB1YmxpY0RlY3J5cHQ9Ty5wdWJsaWNEZWNyeXB0LFgucHJpdmF0ZURlY3J5cHQ9''@;'; put 'put ''Ty5wcml2YXRlRGVjcnlwdDt2YXIgej15KDc5NjMpO1gucmFuZG9tRmlsbD16LnJhbmRvbUZpbGwsWC5yYW5kb21GaWxsU3luYz16LnJhbmRvbUZpbGxTeW5jLFguY3JlYXRlQ3JlZGVudGlhbHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInNvcnJ5LCBjcmVhdGVDcmVkZW50aWFscyBp''@;'; put 'put ''cyBub3QgaW1wbGVtZW50ZWQgeWV0XG53ZSBhY2NlcHQgcHVsbCByZXF1ZXN0c1xuaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnkiKX0sWC5jb25zdGFudHM9e0RIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERI''@;'; put 'put ''X1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxBTFBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElO''@;'; put 'put ''Rzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjZ9fSwyMjk2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXkoNDQyOSksXz15KDM0NjQpLGc9eSg0NDUzKSxCPXkoNzI5Nik7dWUuZXhwb3J0cz1mdW5jdGlvbihQLEYsTyl7aWYoIVB8fCJvYmplY3QiIT10eXBlb2YgUCYmImZ1bmN0aW9uIiE9dHlwZW9mIFApdGhyb3cgbmV3IGcoImBvYmpgIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgZnVu''@;'; put 'put ''Y3Rpb25gIik7aWYoInN0cmluZyIhPXR5cGVvZiBGJiYic3ltYm9sIiE9dHlwZW9mIEYpdGhyb3cgbmV3IGcoImBwcm9wZXJ0eWAgbXVzdCBiZSBhIHN0cmluZyBvciBhIHN5bWJvbGAiKTtpZihhcmd1bWVudHMubGVuZ3RoPjMmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1szXSYmbnVs''@;'; put 'put ''bCE9PWFyZ3VtZW50c1szXSl0aHJvdyBuZXcgZygiYG5vbkVudW1lcmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NCYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzRdJiZudWxsIT09YXJndW1lbnRzWzRdKXRo''@;'; put 'put ''cm93IG5ldyBnKCJgbm9uV3JpdGFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NSYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzVdJiZudWxsIT09YXJndW1lbnRzWzVdKXRocm93IG5ldyBnKCJgbm9uQ29uZmln''@;'; put 'put ''dXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjYmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s2XSl0aHJvdyBuZXcgZygiYGxvb3NlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIik7dmFyIHo9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTpudWxsLE49YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTpudWxsLEw9YXJndW1lbnRzLmxlbmd0aD41P2FyZ3VtZW50c1s1XTpudWxsLEs9YXJndW1lbnRzLmxlbmd0aD42JiZhcmd1bWVudHNbNl0sVT0hIUImJkIoUCxGKTtp''@;'; put 'put ''ZihJKUkoUCxGLHtjb25maWd1cmFibGU6bnVsbD09PUwmJlU/VS5jb25maWd1cmFibGU6IUwsZW51bWVyYWJsZTpudWxsPT09eiYmVT9VLmVudW1lcmFibGU6IXosdmFsdWU6Tyx3cml0YWJsZTpudWxsPT09TiYmVT9VLndyaXRhYmxlOiFOfSk7ZWxzZXtpZighSyYmKHp8fE58fEwpKXRocm93''@;'; put 'put ''IG5ldyBfKCJUaGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgZGVmaW5pbmcgYSBwcm9wZXJ0eSBhcyBub24tY29uZmlndXJhYmxlLCBub24td3JpdGFibGUsIG9yIG5vbi1lbnVtZXJhYmxlLiIpO1BbRl09T319fSw0Mjg5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXko''@;'; put 'put ''MjIxNSksXz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiZm9vIiksZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEI9QXJyYXkucHJvdG90eXBlLmNvbmNhdCx3PXkoMjI5NiksRj15KDEwNDQpKCksTz1mdW5jdGlvbihOLEwsSyxVKXtpZihM''@;'; put 'put ''IGluIE4paWYoITA9PT1VKXtpZihOW0xdPT09SylyZXR1cm59ZWxzZSBpZighZnVuY3Rpb24oTil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE4mJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1nLmNhbGwoTil9KFUpfHwhVSgpKXJldHVybjtGP3coTixMLEssITApOncoTixMLEspfSx6PWZ1bmN0''@;'; put 'put ''aW9uKE4sTCl7dmFyIEs9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp7fSxVPUkoTCk7XyYmKFU9Qi5jYWxsKFUsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhMKSkpO2Zvcih2YXIgVz0wO1c8VS5sZW5ndGg7Vys9MSlPKE4sVVtXXSxMW1VbV11dLEtbVVtXXV0pfTt6LnN1''@;'; put 'put ''cHBvcnRzRGVzY3JpcHRvcnM9ISFGLHVlLmV4cG9ydHM9en0sNTI1MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtYLnV0aWxzPXkoMTI3OCksWC5DaXBoZXI9eSg1NzU2KSxYLkRFUz15KDc3OCksWC5DQkM9eSg5MDUxKSxYLkVERT15KDY1MSl9LDkwNTE6KHVlLFgseSk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9eSg5NzQ2KSxfPXkoNTcxNyksZz17fTtmdW5jdGlvbiBCKFApe0kuZXF1YWwoUC5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFyIEY9MDtGPHRoaXMuaXYubGVuZ3RoO0YrKyl0aGlzLml2W0ZdPVBbRl19WC5pbnN0YW50''@;'; put 'put ''aWF0ZT1mdW5jdGlvbiB3KFApe2Z1bmN0aW9uIEYoTCl7UC5jYWxsKHRoaXMsTCksdGhpcy5fY2JjSW5pdCgpfV8oRixQKTtmb3IodmFyIE89T2JqZWN0LmtleXMoZyksej0wO3o8Ty5sZW5ndGg7eisrKXt2YXIgTj1PW3pdO0YucHJvdG90eXBlW05dPWdbTl19cmV0dXJuIEYuY3JlYXRlPWZ1''@;'; put 'put ''bmN0aW9uKEspe3JldHVybiBuZXcgRihLKX0sRn0sZy5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciBGPW5ldyBCKHRoaXMub3B0aW9ucy5pdik7dGhpcy5fY2JjU3RhdGU9Rn0sZy5fdXBkYXRlPWZ1bmN0aW9uKEYsTyx6LE4pe3ZhciBLPXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlw''@;'; put 'put ''ZSxVPXRoaXMuX2NiY1N0YXRlLml2O2lmKCJlbmNyeXB0Ij09PXRoaXMudHlwZSl7Zm9yKHZhciBXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspVVtXXV49RltPK1ddO2ZvcihLLl91cGRhdGUuY2FsbCh0aGlzLFUsMCx6LE4pLFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylVW1ddPXpbTitXXX1l''@;'; put 'put ''bHNle2ZvcihLLl91cGRhdGUuY2FsbCh0aGlzLEYsTyx6LE4pLFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKyl6W04rV11ePVVbV107Zm9yKFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylVW1ddPUZbTytXXX19fSw1NzU2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTc0Nik7ZnVu''@;'; put 'put ''Y3Rpb24gXyhnKXt0aGlzLm9wdGlvbnM9Zyx0aGlzLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMucGFkZGluZz0hMSE9PWcucGFkZGlu''@;'; put 'put ''Z311ZS5leHBvcnRzPV8sXy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LF8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihCKXtyZXR1cm4gMD09PUIubGVuZ3RoP1tdOiJkZWNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl91cGRhdGVEZWNyeXB0KEIpOnRoaXMuX3VwZGF0ZUVuY3J5cHQo''@;'; put 'put ''Qil9LF8ucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rpb24oQix3KXtmb3IodmFyIFA9TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLEIubGVuZ3RoLXcpLEY9MDtGPFA7RisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmK0ZdPUJbdytGXTtyZXR1cm4gdGhpcy5i''@;'; put 'put ''dWZmZXJPZmYrPVAsUH0sXy5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKEIsdyl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEIsdyksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0sXy5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQ9ZnVuY3Rpb24oQil7''@;'; put 'put ''dmFyIHc9MCxQPTAsTz1uZXcgQXJyYXkoKCh0aGlzLmJ1ZmZlck9mZitCLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCkqdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKHcrPXRoaXMuX2J1ZmZlcihCLHcpLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5idWZmZXIubGVuZ3RoJiYo''@;'; put 'put ''UCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQKSkpO2Zvcih2YXIgej1CLmxlbmd0aC0oQi5sZW5ndGgtdykldGhpcy5ibG9ja1NpemU7dzx6O3crPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShCLHcsTyxQKSxQKz10aGlzLmJsb2NrU2l6ZTtmb3IoO3c8Qi5sZW5ndGg7dysrLHRoaXMuYnVm''@;'; put 'put ''ZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPUJbd107cmV0dXJuIE99LF8ucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKEIpe2Zvcih2YXIgdz0wLFA9MCxGPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrQi5sZW5ndGgpL3RoaXMuYmxvY2tTaXplKS0xLE89''@;'; put 'put ''bmV3IEFycmF5KEYqdGhpcy5ibG9ja1NpemUpO0Y+MDtGLS0pdys9dGhpcy5fYnVmZmVyKEIsdyksUCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQKTtyZXR1cm4gdys9dGhpcy5fYnVmZmVyKEIsdyksT30sXy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oQil7dmFyIHcsUDtyZXR1cm4gQiYmKHc9''@;'; put 'put ''dGhpcy51cGRhdGUoQikpLFA9ImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLHc/dy5jb25jYXQoUCk6UH0sXy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihCLHcpe2lmKDA9PT13KXJldHVybiExO2Zvcig7dzxCLmxlbmd0aDsp''@;'; put 'put ''Qlt3KytdPTA7cmV0dXJuITB9LF8ucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgQj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5i''@;'; put 'put ''dWZmZXIsMCxCLDApLEJ9LF8ucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihCKXtyZXR1cm4gQn0sXy5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe0kuZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNyeXB0Iik7dmFy''@;'; put 'put ''IEI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIoQiwwKSx0aGlzLl91bnBhZChCKX19LDc3ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk3NDYpLF89eSg1NzE3KSxnPXkoMTI3OCksQj15KDU3NTYpO2Z1bmN0aW9uIHcoKXt0aGlz''@;'; put 'put ''LnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gUChPKXtCLmNhbGwodGhpcyxPKTt2YXIgej1uZXcgdzt0aGlzLl9kZXNTdGF0ZT16LHRoaXMuZGVyaXZlS2V5cyh6LE8ua2V5KX1fKFAsQiksdWUuZXhwb3J0cz1QLFAuY3JlYXRlPWZ1bmN0aW9uKHope3JldHVybiBu''@;'; put 'put ''ZXcgUCh6KX07dmFyIEY9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO1AucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oeixOKXt6LmtleXM9bmV3IEFycmF5KDMyKSxJLmVxdWFsKE4ubGVuZ3RoLHRoaXMuYmxvY2tTaXplLCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIg''@;'; put 'put ''TD1nLnJlYWRVSW50MzJCRShOLDApLEs9Zy5yZWFkVUludDMyQkUoTiw0KTtnLnBjMShMLEssei50bXAsMCksTD16LnRtcFswXSxLPXoudG1wWzFdO2Zvcih2YXIgVT0wO1U8ei5rZXlzLmxlbmd0aDtVKz0yKXt2YXIgVz1GW1U+Pj4xXTtMPWcucjI4c2hsKEwsVyksSz1nLnIyOHNobChLLFcp''@;'; put 'put ''LGcucGMyKEwsSyx6LmtleXMsVSl9fSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHosTixMLEspe3ZhciBVPXRoaXMuX2Rlc1N0YXRlLFc9Zy5yZWFkVUludDMyQkUoeixOKSxZPWcucmVhZFVJbnQzMkJFKHosTis0KTtnLmlwKFcsWSxVLnRtcCwwKSxXPVUudG1wWzBdLFk9VS50bXBb''@;'; put 'put ''MV0sImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQoVSxXLFksVS50bXAsMCk6dGhpcy5fZGVjcnlwdChVLFcsWSxVLnRtcCwwKSxZPVUudG1wWzFdLGcud3JpdGVVSW50MzJCRShMLFc9VS50bXBbMF0sSyksZy53cml0ZVVJbnQzMkJFKEwsWSxLKzQpfSxQLnByb3RvdHlwZS5f''@;'; put 'put ''cGFkPWZ1bmN0aW9uKHosTil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuITE7Zm9yKHZhciBMPXoubGVuZ3RoLU4sSz1OO0s8ei5sZW5ndGg7SysrKXpbS109TDtyZXR1cm4hMH0sUC5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKHope2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiB6''@;'; put 'put ''O2Zvcih2YXIgTj16W3oubGVuZ3RoLTFdLEw9ei5sZW5ndGgtTjtMPHoubGVuZ3RoO0wrKylJLmVxdWFsKHpbTF0sTik7cmV0dXJuIHouc2xpY2UoMCx6Lmxlbmd0aC1OKX0sUC5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oeixOLEwsSyxVKXtmb3IodmFyIFc9TixZPUwscT0wO3E8ei5r''@;'; put 'put ''ZXlzLmxlbmd0aDtxKz0yKXt2YXIgZWU9ei5rZXlzW3FdLEo9ei5rZXlzW3ErMV07Zy5leHBhbmQoWSx6LnRtcCwwKTt2YXIgbmU9Zy5zdWJzdGl0dXRlKGVlXj16LnRtcFswXSxKXj16LnRtcFsxXSksbGU9WTtZPShXXmcucGVybXV0ZShuZSkpPj4+MCxXPWxlfWcucmlwKFksVyxLLFUpfSxQ''@;'; put 'put ''LnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbih6LE4sTCxLLFUpe2Zvcih2YXIgVz1MLFk9TixxPXoua2V5cy5sZW5ndGgtMjtxPj0wO3EtPTIpe3ZhciBlZT16LmtleXNbcV0sSj16LmtleXNbcSsxXTtnLmV4cGFuZChXLHoudG1wLDApO3ZhciBuZT1nLnN1YnN0aXR1dGUoZWVePXoudG1w''@;'; put 'put ''WzBdLEpePXoudG1wWzFdKSxsZT1XO1c9KFleZy5wZXJtdXRlKG5lKSk+Pj4wLFk9bGV9Zy5yaXAoVyxZLEssVSl9fSw2NTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NzQ2KSxfPXkoNTcxNyksZz15KDU3NTYpLEI9eSg3NzgpO2Z1bmN0aW9uIHcoRixPKXtJLmVxdWFsKE8u''@;'; put 'put ''bGVuZ3RoLDI0LCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgej1PLnNsaWNlKDAsOCksTj1PLnNsaWNlKDgsMTYpLEw9Ty5zbGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPSJlbmNyeXB0Ij09PUY/W0IuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6en0pLEIuY3JlYXRlKHt0eXBlOiJkZWNy''@;'; put 'put ''eXB0IixrZXk6Tn0pLEIuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6TH0pXTpbQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpMfSksQi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpOfSksQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTp6fSldfWZ1bmN0aW9uIFAoRil7Zy5j''@;'; put 'put ''YWxsKHRoaXMsRik7dmFyIE89bmV3IHcodGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPU99XyhQLGcpLHVlLmV4cG9ydHM9UCxQLmNyZWF0ZT1mdW5jdGlvbihPKXtyZXR1cm4gbmV3IFAoTyl9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTyx6LE4sTCl7''@;'; put 'put ''dmFyIEs9dGhpcy5fZWRlU3RhdGU7Sy5jaXBoZXJzWzBdLl91cGRhdGUoTyx6LE4sTCksSy5jaXBoZXJzWzFdLl91cGRhdGUoTixMLE4sTCksSy5jaXBoZXJzWzJdLl91cGRhdGUoTixMLE4sTCl9LFAucHJvdG90eXBlLl9wYWQ9Qi5wcm90b3R5cGUuX3BhZCxQLnByb3RvdHlwZS5fdW5wYWQ9''@;'; put 'put ''Qi5wcm90b3R5cGUuX3VucGFkfSwxMjc4Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLnJlYWRVSW50MzJCRT1mdW5jdGlvbihCLHcpe3JldHVybihCWzArd108PDI0fEJbMSt3XTw8MTZ8QlsyK3ddPDw4fEJbMyt3XSk+Pj4wfSxYLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oQix3LFApe0JbMCtQ''@;'; put 'put ''XT13Pj4+MjQsQlsxK1BdPXc+Pj4xNiYyNTUsQlsyK1BdPXc+Pj44JjI1NSxCWzMrUF09MjU1Jnd9LFguaXA9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49NjtOPj0wO04tPTIpe2Zvcih2YXIgTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+PkwrTiYxO2ZvcihMPTA7TDw9''@;'; put 'put ''MjQ7TCs9OClPPDw9MSxPfD1CPj4+TCtOJjF9Zm9yKE49NjtOPj0wO04tPTIpe2ZvcihMPTE7TDw9MjU7TCs9OCl6PDw9MSx6fD13Pj4+TCtOJjE7Zm9yKEw9MTtMPD0yNTtMKz04KXo8PD0xLHp8PUI+Pj5MK04mMX1QW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxYLnJpcD1mdW5jdGlvbihC''@;'; put 'put ''LHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj0wO048NDtOKyspZm9yKHZhciBMPTI0O0w+PTA7TC09OClPPDw9MSxPfD13Pj4+TCtOJjEsTzw8PTEsT3w9Qj4+PkwrTiYxO2ZvcihOPTQ7Tjw4O04rKylmb3IoTD0yNDtMPj0wO0wtPTgpejw8PTEsenw9dz4+PkwrTiYxLHo8PD0xLHp8PUI+Pj5M''@;'; put 'put ''K04mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxYLnBjMT1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj03O04+PTU7Ti0tKXtmb3IodmFyIEw9MDtMPD0yNDtMKz04KU88PD0xLE98PXc+PkwrTiYxO2ZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD1CPj5MK04mMX1m''@;'; put 'put ''b3IoTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+TCtOJjE7Zm9yKE49MTtOPD0zO04rKyl7Zm9yKEw9MDtMPD0yNDtMKz04KXo8PD0xLHp8PXc+PkwrTiYxO2ZvcihMPTA7TDw9MjQ7TCs9OCl6PDw9MSx6fD1CPj5MK04mMX1mb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEsenw9Qj4+TCtOJjE7''@;'; put 'put ''UFtGKzBdPU8+Pj4wLFBbRisxXT16Pj4+MH0sWC5yMjhzaGw9ZnVuY3Rpb24oQix3KXtyZXR1cm4gQjw8dyYyNjg0MzU0NTV8Qj4+PjI4LXd9O3ZhciB5PVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5''@;'; put 'put ''LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO1gucGMyPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPXkubGVuZ3RoPj4+MSxMPTA7TDxOO0wrKylPPDw9MSxPfD1CPj4+eVtMXSYxO2ZvcihMPU47TDx5Lmxlbmd0aDtMKyspejw8''@;'; put 'put ''PTEsenw9dz4+PnlbTF0mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxYLmV4cGFuZD1mdW5jdGlvbihCLHcsUCl7dmFyIEY9MCxPPTA7Rj0oMSZCKTw8NXxCPj4+Mjc7Zm9yKHZhciB6PTIzO3o+PTE1O3otPTQpRjw8PTYsRnw9Qj4+PnomNjM7Zm9yKHo9MTE7ej49Mzt6LT00KU98PUI+''@;'; put 'put ''Pj56JjYzLE88PD02O098PSgzMSZCKTw8MXxCPj4+MzEsd1tQKzBdPUY+Pj4wLHdbUCsxXT1PPj4+MH07dmFyIEk9WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDExLDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMs''@;'; put 'put ''NCw2LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMsNywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwxMCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQs''@;'; put 'put ''MSwyLDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEwLDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIs''@;'; put 'put ''MTQsMTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcsMTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwxMCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwx''@;'; put 'put ''MiwyLDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIsMSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQs''@;'; put 'put ''MywxMiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwxMiw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQsNCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwy''@;'; put 'put ''LDExLDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMsMTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwxNCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAs''@;'; put 'put ''MTUsMywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwxMV07WC5zdWJzdGl0dXRlPWZ1bmN0aW9uKEIsdyl7Zm9yKHZhciBQ''@;'; put 'put ''PTAsRj0wO0Y8NDtGKyspUDw8PTQsUHw9SVs2NCpGKyhCPj4+MTgtNipGJjYzKV07Zm9yKEY9MDtGPDQ7RisrKVA8PD00LFB8PUlbMjU2KzY0KkYrKHc+Pj4xOC02KkYmNjMpXTtyZXR1cm4gUD4+PjB9O3ZhciBfPVsxNiwyNSwxMiwxMSwzLDIwLDQsMTUsMzEsMTcsOSw2LDI3LDE0LDEsMjIs''@;'; put 'put ''MzAsMjQsOCwxOCwwLDUsMjksMjMsMTMsMTksMiwyNiwxMCwyMSwyOCw3XTtYLnBlcm11dGU9ZnVuY3Rpb24oQil7Zm9yKHZhciB3PTAsUD0wO1A8Xy5sZW5ndGg7UCsrKXc8PD0xLHd8PUI+Pj5fW1BdJjE7cmV0dXJuIHc+Pj4wfSxYLnBhZFNwbGl0PWZ1bmN0aW9uKEIsdyxQKXtmb3IodmFy''@;'; put 'put ''IEY9Qi50b1N0cmluZygyKTtGLmxlbmd0aDx3OylGPSIwIitGO2Zvcih2YXIgTz1bXSx6PTA7ejx3O3orPVApTy5wdXNoKEYuc2xpY2Uoeix6K1ApKTtyZXR1cm4gTy5qb2luKCIgIil9fSwyNjA3Oih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz15KDM1OTApLGc9eSg5Nzk5KSxC''@;'; put 'put ''PXkoNzQyNiksUD17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O1guRGlmZmllSGVsbG1hbkdyb3VwPVguY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPVguZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbiB3KE8pe3ZhciB6PW5ldyBJKGdbT10ucHJpbWUsImhleCIpLE49bmV3IEkoZ1tPXS5n''@;'; put 'put ''ZW4sImhleCIpO3JldHVybiBuZXcgQih6LE4pfSxYLmNyZWF0ZURpZmZpZUhlbGxtYW49WC5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIEYoTyx6LE4sTCl7cmV0dXJuIEkuaXNCdWZmZXIoeil8fHZvaWQgMD09PVBbel0/RihPLCJiaW5hcnkiLHosTik6KHo9enx8ImJpbmFyeSIsTD1MfHwiYmlu''@;'; put 'put ''YXJ5IixOPU58fG5ldyBJKFsyXSksSS5pc0J1ZmZlcihOKXx8KE49bmV3IEkoTixMKSksIm51bWJlciI9PXR5cGVvZiBPP25ldyBCKF8oTyxOKSxOLCEwKTooSS5pc0J1ZmZlcihPKXx8KE89bmV3IEkoTyx6KSksbmV3IEIoTyxOLCEwKSkpfX0sNzQyNjoodWUsWCx5KT0+e3ZhciBJPXkoODc2''@;'; put 'put ''NCkuQnVmZmVyLF89eSgzNjIwKSxCPW5ldyh5KDMwNDcpKSx3PW5ldyBfKDI0KSxQPW5ldyBfKDExKSxGPW5ldyBfKDEwKSxPPW5ldyBfKDMpLHo9bmV3IF8oNyksTj15KDM1OTApLEw9eSgxNzk4KTtmdW5jdGlvbiBLKEosbmUpe3JldHVybiBuZT1uZXx8InV0ZjgiLEkuaXNCdWZmZXIoSil8''@;'; put 'put ''fChKPW5ldyBJKEosbmUpKSx0aGlzLl9wdWI9bmV3IF8oSiksdGhpc31mdW5jdGlvbiBVKEosbmUpe3JldHVybiBuZT1uZXx8InV0ZjgiLEkuaXNCdWZmZXIoSil8fChKPW5ldyBJKEosbmUpKSx0aGlzLl9wcml2PW5ldyBfKEopLHRoaXN9dWUuZXhwb3J0cz1xO3ZhciBXPXt9O2Z1bmN0aW9u''@;'; put 'put ''IHEoSixuZSxpZSl7dGhpcy5zZXRHZW5lcmF0b3IobmUpLHRoaXMuX19wcmltZT1uZXcgXyhKKSx0aGlzLl9wcmltZT1fLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1KLmxlbmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3ByaW1lQ29kZT12''@;'; put 'put ''b2lkIDAsaWU/KHRoaXMuc2V0UHVibGljS2V5PUssdGhpcy5zZXRQcml2YXRlS2V5PVUpOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIGVlKEosbmUpe3ZhciBpZT1uZXcgSShKLnRvQXJyYXkoKSk7cmV0dXJuIG5lP2llLnRvU3RyaW5nKG5lKTppZX1PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''cS5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1mdW5jdGlvbiBZKEosbmUpe3ZhciBpZT1uZS50b1N0cmluZygiaGV4IiksbGU9W2llLEou''@;'; put 'put ''dG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYobGUgaW4gVylyZXR1cm4gV1tsZV07dmFyIF9lLG1lPTA7aWYoSi5pc0V2ZW4oKXx8IU4uc2ltcGxlU2lldmV8fCFOLmZlcm1hdFRlc3QoSil8fCFCLnRlc3QoSikpcmV0dXJuIG1lKz0xLFdbbGVdPW1lKz0iMDIiPT09aWV8fCIwNSI9PT1pZT84''@;'; put 'put ''OjQsbWU7c3dpdGNoKEIudGVzdChKLnNocm4oMSkpfHwobWUrPTIpLGllKXtjYXNlIjAyIjpKLm1vZCh3KS5jbXAoUCkmJihtZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KF9lPUoubW9kKEYpKS5jbXAoTykmJl9lLmNtcCh6KSYmKG1lKz04KTticmVhaztkZWZhdWx0Om1lKz00fXJldHVybiBXW2xl''@;'; put 'put ''XT1tZSxtZX0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSkscS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBfKEwodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dl''@;'; put 'put ''bi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSxxLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKEope3ZhciBuZT0oSj0oSj1uZXcgXyhKKSkudG9SZWQodGhpcy5fcHJpbWUpKS5yZWRQb3codGhpcy5f''@;'; put 'put ''cHJpdikuZnJvbVJlZCgpLGllPW5ldyBJKG5lLnRvQXJyYXkoKSksbGU9dGhpcy5nZXRQcmltZSgpO2lmKGllLmxlbmd0aDxsZS5sZW5ndGgpe3ZhciBtZT1uZXcgSShsZS5sZW5ndGgtaWUubGVuZ3RoKTttZS5maWxsKDApLGllPUkuY29uY2F0KFttZSxpZV0pfXJldHVybiBpZX0scS5wcm90''@;'; put 'put ''b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKG5lKXtyZXR1cm4gZWUodGhpcy5fcHViLG5lKX0scS5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihuZSl7cmV0dXJuIGVlKHRoaXMuX3ByaXYsbmUpfSxxLnByb3RvdHlwZS5nZXRQcmltZT1mdW5jdGlvbihKKXtyZXR1cm4gZWUo''@;'; put 'put ''dGhpcy5fX3ByaW1lLEopfSxxLnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oSil7cmV0dXJuIGVlKHRoaXMuX2dlbixKKX0scS5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKEosbmUpe3JldHVybiBuZT1uZXx8InV0ZjgiLEkuaXNCdWZmZXIoSil8fChKPW5ldyBJKEos''@;'; put 'put ''bmUpKSx0aGlzLl9fZ2VuPUosdGhpcy5fZ2VuPW5ldyBfKEopLHRoaXN9fSwzNTkwOih1ZSxYLHkpPT57dmFyIEk9eSgxNzk4KTt1ZS5leHBvcnRzPWxlLGxlLnNpbXBsZVNpZXZlPW5lLGxlLmZlcm1hdFRlc3Q9aWU7dmFyIF89eSgzNjIwKSxnPW5ldyBfKDI0KSx3PW5ldyh5KDMwNDcpKSxQ''@;'; put 'put ''PW5ldyBfKDEpLEY9bmV3IF8oMiksTz1uZXcgXyg1KSxMPShuZXcgXygxNiksbmV3IF8oOCksbmV3IF8oMTApKSxLPW5ldyBfKDMpLFc9KG5ldyBfKDcpLG5ldyBfKDExKSksWT1uZXcgXyg0KSxlZT0obmV3IF8oMTIpLG51bGwpO2Z1bmN0aW9uIG5lKG1lKXtmb3IodmFyIF9lPWZ1bmN0aW9u''@;'; put 'put ''IEooKXtpZihudWxsIT09ZWUpcmV0dXJuIGVlO3ZhciBfZT1bXTtfZVswXT0yO2Zvcih2YXIgVGU9MSxTZT0zO1NlPDEwNDg1NzY7U2UrPTIpe2Zvcih2YXIgamU9TWF0aC5jZWlsKE1hdGguc3FydChTZSkpLFY9MDtWPFRlJiZfZVtWXTw9amUmJlNlJV9lW1ZdIT0wO1YrKyk7VGUhPT1WJiZf''@;'; put 'put ''ZVtWXTw9amV8fChfZVtUZSsrXT1TZSl9cmV0dXJuIGVlPV9lLF9lfSgpLFRlPTA7VGU8X2UubGVuZ3RoO1RlKyspaWYoMD09PW1lLm1vZG4oX2VbVGVdKSlyZXR1cm4gMD09PW1lLmNtcG4oX2VbVGVdKTtyZXR1cm4hMH1mdW5jdGlvbiBpZShtZSl7dmFyIF9lPV8ubW9udChtZSk7cmV0dXJu''@;'; put 'put ''IDA9PT1GLnRvUmVkKF9lKS5yZWRQb3cobWUuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gbGUobWUsX2Upe2lmKG1lPDE2KXJldHVybiBuZXcgXygyPT09X2V8fDU9PT1fZT9bMTQwLDEyM106WzE0MCwzOV0pO19lPW5ldyBfKF9lKTtmb3IodmFyIFRlLFNlOzspe2ZvcihU''@;'; put 'put ''ZT1uZXcgXyhJKE1hdGguY2VpbChtZS84KSkpO1RlLmJpdExlbmd0aCgpPm1lOylUZS5pc2hybigxKTtpZihUZS5pc0V2ZW4oKSYmVGUuaWFkZChQKSxUZS50ZXN0bigxKXx8VGUuaWFkZChGKSxfZS5jbXAoRikpe2lmKCFfZS5jbXAoTykpZm9yKDtUZS5tb2QoTCkuY21wKEspOylUZS5pYWRk''@;'; put 'put ''KFkpfWVsc2UgZm9yKDtUZS5tb2QoZykuY21wKFcpOylUZS5pYWRkKFkpO2lmKG5lKFNlPVRlLnNocm4oMSkpJiZuZShUZSkmJmllKFNlKSYmaWUoVGUpJiZ3LnRlc3QoU2UpJiZ3LnRlc3QoVGUpKXJldHVybiBUZX19fSwzNjIwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90''@;'; put 'put ''b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0''@;'; put 'put ''aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNzc0''@;'; put 'put ''OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEp''@;'; put 'put ''PDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1m''@;'; put 'put ''dW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJy''@;'; put 'put ''YXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgo''@;'; put 'put ''cCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMu''@;'; put 'put ''d29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEw''@;'; put 'put ''ODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0''@;'; put 'put ''dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtp''@;'; put 'put ''ZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlm''@;'; put 'put ''KCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlz''@;'; put 'put ''LnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0w''@;'; put 'put ''O3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09''@;'; put 'put ''MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlz''@;'; put 'put ''LndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihU''@;'; put 'put ''KSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMu''@;'; put 'put ''d29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9''@;'; put 'put ''dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMu''@;'; put 'put ''bGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2ln''@;'; put 'put ''bigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxC''@;'; put 'put ''TjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1''@;'; put 'put ''LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwy''@;'; put 'put ''NDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3''@;'; put 'put ''Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09''@;'; put 'put ''NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53''@;'; put 'put ''b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2''@;'; put 'put ''PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgt''@;'; put 'put ''LSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYm''@;'; put 'put ''cDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4''@;'; put 'put ''fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCEx''@;'; put 'put ''LCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0''@;'; put 'put ''dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlz''@;'; put 'put ''LmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRo''@;'; put 'put ''aXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxB''@;'; put 'put ''Lml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQm''@;'; put 'put ''Jih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4''@;'; put 'put ''Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5n''@;'; put 'put ''dGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJu''@;'; put 'put ''IHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlz''@;'; put 'put ''LmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3''@;'; put 'put ''LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3Ro''@;'; put 'put ''aXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVu''@;'; put 'put ''Z3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFu''@;'; put 'put ''ZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhp''@;'; put 'put ''cy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNb''@;'; put 'put ''Q109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0''@;'; put 'put ''aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2''@;'; put 'put ''O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5''@;'; put 'put ''cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNb''@;'; put 'put ''eF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlz''@;'; put 'put ''LmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4''@;'; put 'put ''PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02''@;'; put 'put ''NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jk''@;'; put 'put ''c1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRp''@;'; put 'put ''dmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBD''@;'; put 'put ''LFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkt''@;'; put 'put ''KDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxD''@;'; put 'put ''Lmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3Qs''@;'; put 'put ''dmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVu''@;'; put 'put ''Pj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEz''@;'; put 'put ''LE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0w''@;'; put 'put ''fFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUs''@;'; put 'put ''UHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11''@;'; put 'put ''bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkm''@;'; put 'put ''PTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4y''@;'; put 'put ''Nil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGgu''@;'; put 'put ''aW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''eGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxt''@;'; put 'put ''PShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUs''@;'; put 'put ''QXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxU''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0''@;'; put 'put ''aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''eGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxt''@;'; put 'put ''PShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUs''@;'; put 'put ''QXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGgu''@;'; put 'put ''aW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''bnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4y''@;'; put 'put ''Nil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXww''@;'; put 'put ''KStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''SmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEm''@;'; put 'put ''PTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxj''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''TXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxo''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVs''@;'; put 'put ''KHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxo''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDAp''@;'; put 'put ''K01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11''@;'; put 'put ''bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxo''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVs''@;'; put 'put ''KEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxj''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''TXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEm''@;'; put 'put ''PTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4y''@;'; put 'put ''Nil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxl''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStN''@;'; put 'put ''YXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1O''@;'; put 'put ''aSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxi''@;'; put 'put ''KX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxi''@;'; put 'put ''KTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02''@;'; put 'put ''NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82''@;'; put 'put ''NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rp''@;'; put 'put ''b24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4g''@;'; put 'put ''cDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNm''@;'; put 'put ''b3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1t''@;'; put 'put ''LHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUr''@;'; put 'put ''d2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzEr''@;'; put 'put ''Q30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFs''@;'; put 'put ''aXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90''@;'; put 'put ''b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxK''@;'; put 'put ''LnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5t''@;'; put 'put ''YWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3Jkcyxw''@;'; put 'put ''Lmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2Vd''@;'; put 'put ''O21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0''@;'; put 'put ''aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcu''@;'; put 'put ''cHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRo''@;'; put 'put ''aXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0y''@;'; put 'put ''NixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3''@;'; put 'put ''LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIg''@;'; put 'put ''cD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgm''@;'; put 'put ''JjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgs''@;'; put 'put ''SD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0''@;'; put 'put ''dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/''@;'; put 'put ''KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxl''@;'; put 'put ''bmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgt''@;'; put 'put ''MTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlz''@;'; put 'put ''Lmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1m''@;'; put 'put ''dW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRo''@;'; put 'put ''aXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNr''@;'; put 'put ''bihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNb''@;'; put 'put ''MF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9y''@;'; put 'put ''KHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxl''@;'; put 'put ''bmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRu''@;'; put 'put ''KHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRz''@;'; put 'put ''W2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1m''@;'; put 'put ''dW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDAp''@;'; put 'put ''LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8''@;'; put 'put ''dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCks''@;'; put 'put ''VD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSku''@;'; put 'put ''bGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFy''@;'; put 'put ''IHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0t''@;'; put 'put ''LEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319''@;'; put 'put ''LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2Qi''@;'; put 'put ''IT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYo''@;'; put 'put ''Qz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0p''@;'; put 'put ''OnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndv''@;'; put 'put ''cmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0s''@;'; put 'put ''dy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFy''@;'; put 'put ''IGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9''@;'; put 'put ''PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkp''@;'; put 'put ''JXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIu''@;'; put 'put ''bmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9u''@;'; put 'put ''ZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSks''@;'; put 'put ''VC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNo''@;'; put 'put ''cm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxn''@;'; put 'put ''KCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShi''@;'; put 'put ''LndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0p''@;'; put 'put ''O20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUu''@;'; put 'put ''Z2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4Lmlz''@;'; put 'put ''RXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBu''@;'; put 'put ''KDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4''@;'; put 'put ''PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMu''@;'; put 'put ''d29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRv''@;'; put 'put ''byBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRo''@;'; put 'put ''aXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3Ro''@;'; put 'put ''PHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9''@;'; put 'put ''LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252''@;'; put 'put ''ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIp''@;'; put 'put ''LHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMu''@;'; put 'put ''cmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElT''@;'; put 'put ''cXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQs''@;'; put 'put ''InJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhp''@;'; put 'put ''cy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpu''@;'; put 'put ''dWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgp''@;'; put 'put ''fWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIy''@;'; put 'put ''NTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhW''@;'; put 'put ''Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhp''@;'; put 'put ''cy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0''@;'; put 'put ''aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5w''@;'; put 'put ''cm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7''@;'; put 'put ''cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlw''@;'; put 'put ''ZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIu''@;'; put 'put ''bGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0''@;'; put 'put ''fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0w''@;'; put 'put ''LHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5s''@;'; put 'put ''ZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1D''@;'; put 'put ''fXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5l''@;'; put 'put ''dyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3Np''@;'; put 'put ''dGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09''@;'; put 'put ''Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnBy''@;'; put 'put ''b3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlz''@;'; put 'put ''Lm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUu''@;'; put 'put ''c3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAu''@;'; put 'put ''aXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChw''@;'; put 'put ''LHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1i''@;'; put 'put ''KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50''@;'; put 'put ''b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMp''@;'; put 'put ''LGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1''@;'; put 'put ''c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZl''@;'; put 'put ''PTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2''@;'; put 'put ''KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7''@;'; put 'put ''Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9''@;'; put 'put ''MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9''@;'; put 'put ''bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7''@;'; put 'put ''dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14''@;'; put 'put ''Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0''@;'; put 'put ''aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWlu''@;'; put 'put ''dikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5w''@;'; put 'put ''cm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDY1MDQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIGcsST15KDMxOSksXz15KDcyOTYp''@;'; put 'put ''O3RyeXtnPVtdLl9fcHJvdG9fXz09PUFycmF5LnByb3RvdHlwZX1jYXRjaChGKXtpZighRnx8Im9iamVjdCIhPXR5cGVvZiBGfHwhKCJjb2RlImluIEYpfHwiRVJSX1BST1RPX0FDQ0VTUyIhPT1GLmNvZGUpdGhyb3cgRn12YXIgQj0hIWcmJl8mJl8oT2JqZWN0LnByb3RvdHlwZSwiX19wcm90''@;'; put 'put ''b19fIiksdz1PYmplY3QsUD13LmdldFByb3RvdHlwZU9mO3VlLmV4cG9ydHM9QiYmImZ1bmN0aW9uIj09dHlwZW9mIEIuZ2V0P0koW0IuZ2V0XSk6ImZ1bmN0aW9uIj09dHlwZW9mIFAmJmZ1bmN0aW9uKE8pe3JldHVybiBQKG51bGw9PU8/Tzp3KE8pKX19LDY5NDg6KHVlLFgseSk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9WDtJLnZlcnNpb249eSg4NTk3KS5pOCxJLnV0aWxzPXkoOTUzKSxJLnJhbmQ9eSg5OTMxKSxJLmN1cnZlPXkoODI1NCksSS5jdXJ2ZXM9eSg1NDI3KSxJLmVjPXkoNzk1NCksSS5lZGRzYT15KDU5ODApfSw0OTE4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXkoMzc4NSksXz15KDk1MyksZz1fLmdldE5BRixCPV8uZ2V0SlNGLHc9Xy5hc3NlcnQ7ZnVuY3Rpb24gUChPLHope3RoaXMudHlwZT1PLHRoaXMucD1uZXcgSSh6LnAsMTYpLHRoaXMucmVkPXoucHJpbWU/SS5yZWQoei5wcmltZSk6SS5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBJKDAp''@;'; put 'put ''LnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgSSgxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IEkoMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj16Lm4mJm5ldyBJKHoubiwxNiksdGhpcy5nPXouZyYmdGhpcy5wb2ludEZyb21KU09OKHouZyx6LmdSZWQpLHRoaXMuX3duYWZU''@;'; put 'put ''MT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCksdGhpcy5fYml0TGVuZ3RoPXRoaXMubj90aGlzLm4uYml0TGVuZ3RoKCk6MDt2YXIgTj10aGlzLm4mJnRoaXMucC5kaXYodGhp''@;'; put 'put ''cy5uKTshTnx8Ti5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBGKE8seil7dGhpcy5jdXJ2ZT1PLHRoaXMudHlwZT16LHRoaXMucHJlY29tcHV0ZWQ9bnVsbH11ZS5leHBv''@;'; put 'put ''cnRzPVAsUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxQLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAucHJvdG90eXBlLl9maXhlZE5hZk11bD1m''@;'; put 'put ''dW5jdGlvbih6LE4pe3coei5wcmVjb21wdXRlZCk7dmFyIEw9ei5fZ2V0RG91YmxlcygpLEs9ZyhOLDEsdGhpcy5fYml0TGVuZ3RoKSxVPSgxPDxMLnN0ZXArMSktKEwuc3RlcCUyPT0wPzI6MSk7VS89Mzt2YXIgWSxxLFc9W107Zm9yKFk9MDtZPEsubGVuZ3RoO1krPUwuc3RlcCl7cT0wO2Zv''@;'; put 'put ''cih2YXIgZWU9WStMLnN0ZXAtMTtlZT49WTtlZS0tKXE9KHE8PDEpK0tbZWVdO1cucHVzaChxKX1mb3IodmFyIEo9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLG5lPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxpZT1VO2llPjA7aWUtLSl7Zm9yKFk9MDtZPFcubGVuZ3RoO1krKyko''@;'; put 'put ''cT1XW1ldKT09PWllP25lPW5lLm1peGVkQWRkKEwucG9pbnRzW1ldKTpxPT09LWllJiYobmU9bmUubWl4ZWRBZGQoTC5wb2ludHNbWV0ubmVnKCkpKTtKPUouYWRkKG5lKX1yZXR1cm4gSi50b1AoKX0sUC5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oeixOKXtmb3IodmFyIEw9NCxLPXou''@;'; put 'put ''X2dldE5BRlBvaW50cyhMKSxVPUsucG9pbnRzLFc9ZyhOLEw9Sy53bmQsdGhpcy5fYml0TGVuZ3RoKSxZPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxxPVcubGVuZ3RoLTE7cT49MDtxLS0pe2Zvcih2YXIgZWU9MDtxPj0wJiYwPT09V1txXTtxLS0pZWUrKztpZihxPj0wJiZlZSsrLFk9''@;'; put 'put ''WS5kYmxwKGVlKSxxPDApYnJlYWs7dmFyIEo9V1txXTt3KDAhPT1KKSxZPSJhZmZpbmUiPT09ei50eXBlP1kubWl4ZWRBZGQoSj4wP1VbSi0xPj4xXTpVWy1KLTE+PjFdLm5lZygpKTpZLmFkZChKPjA/VVtKLTE+PjFdOlVbLUotMT4+MV0ubmVnKCkpfXJldHVybiJhZmZpbmUiPT09ei50eXBl''@;'; put 'put ''P1kudG9QKCk6WX0sUC5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24oeixOLEwsSyxVKXt2YXIgSixuZSxpZSxXPXRoaXMuX3duYWZUMSxZPXRoaXMuX3duYWZUMixxPXRoaXMuX3duYWZUMyxlZT0wO2ZvcihKPTA7SjxLO0orKyl7dmFyIGxlPShpZT1OW0pdKS5fZ2V0TkFGUG9pbnRz''@;'; put 'put ''KHopO1dbSl09bGUud25kLFlbSl09bGUucG9pbnRzfWZvcihKPUstMTtKPj0xO0otPTIpe3ZhciBtZT1KLTEsX2U9SjtpZigxPT09V1ttZV0mJjE9PT1XW19lXSl7dmFyIFRlPVtOW21lXSxudWxsLG51bGwsTltfZV1dOzA9PT1OW21lXS55LmNtcChOW19lXS55KT8oVGVbMV09TlttZV0uYWRk''@;'; put 'put ''KE5bX2VdKSxUZVsyXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXS5uZWcoKSkpOjA9PT1OW21lXS55LmNtcChOW19lXS55LnJlZE5lZygpKT8oVGVbMV09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0pLFRlWzJdPU5bbWVdLmFkZChOW19lXS5uZWcoKSkpOihUZVsxXT1OW21lXS50b0oo''@;'; put 'put ''KS5taXhlZEFkZChOW19lXSksVGVbMl09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0ubmVnKCkpKTt2YXIgU2U9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10samU9QihMW21lXSxMW19lXSk7Zm9yKGVlPU1hdGgubWF4KGplWzBdLmxlbmd0aCxlZSkscVttZV09bmV3IEFycmF5KGVlKSxxW19l''@;'; put 'put ''XT1uZXcgQXJyYXkoZWUpLG5lPTA7bmU8ZWU7bmUrKylxW21lXVtuZV09U2VbMyooMSsoMHxqZVswXVtuZV0pKSsoMSsoMHxqZVsxXVtuZV0pKV0scVtfZV1bbmVdPTAsWVttZV09VGV9ZWxzZSBxW21lXT1nKExbbWVdLFdbbWVdLHRoaXMuX2JpdExlbmd0aCkscVtfZV09ZyhMW19lXSxXW19l''@;'; put 'put ''XSx0aGlzLl9iaXRMZW5ndGgpLGVlPU1hdGgubWF4KHFbbWVdLmxlbmd0aCxlZSksZWU9TWF0aC5tYXgocVtfZV0ubGVuZ3RoLGVlKX12YXIgYj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkseD10aGlzLl93bmFmVDQ7Zm9yKEo9ZWU7Sj49MDtKLS0pe2Zvcih2YXIgQz0wO0o+PTA7KXt2''@;'; put 'put ''YXIgVD0hMDtmb3IobmU9MDtuZTxLO25lKyspeFtuZV09MHxxW25lXVtKXSwwIT09eFtuZV0mJihUPSExKTtpZighVClicmVhaztDKyssSi0tfWlmKEo+PTAmJkMrKyxiPWIuZGJscChDKSxKPDApYnJlYWs7Zm9yKG5lPTA7bmU8SztuZSsrKXt2YXIgSD14W25lXTswIT09SCYmKEg+MD9pZT1Z''@;'; put 'put ''W25lXVtILTE+PjFdOkg8MCYmKGllPVlbbmVdWy1ILTE+PjFdLm5lZygpKSxiPSJhZmZpbmUiPT09aWUudHlwZT9iLm1peGVkQWRkKGllKTpiLmFkZChpZSkpfX1mb3IoSj0wO0o8SztKKyspWVtKXT1udWxsO3JldHVybiBVP2I6Yi50b1AoKX0sUC5CYXNlUG9pbnQ9RixGLnByb3RvdHlwZS5l''@;'; put 'put ''cT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LEYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LFAucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHosTil7ej1fLnRvQXJyYXko''@;'; put 'put ''eixOKTt2YXIgTD10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09elswXXx8Nj09PXpbMF18fDc9PT16WzBdKSYmei5sZW5ndGgtMT09MipMKXJldHVybiA2PT09elswXT93KHpbei5sZW5ndGgtMV0lMj09MCk6Nz09PXpbMF0mJncoelt6Lmxlbmd0aC0xXSUyPT0xKSx0aGlzLnBvaW50KHou''@;'; put 'put ''c2xpY2UoMSwxK0wpLHouc2xpY2UoMStMLDErMipMKSk7aWYoKDI9PT16WzBdfHwzPT09elswXSkmJnoubGVuZ3RoLTE9PT1MKXJldHVybiB0aGlzLnBvaW50RnJvbVgoei5zbGljZSgxLDErTCksMz09PXpbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBwb2ludCBmb3JtYXQiKX0sRi5w''@;'; put 'put ''cm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5lbmNvZGUoeiwhMCl9LEYucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxMPXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIixOKTtyZXR1cm4g''@;'; put 'put ''ej9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQoTCk6WzRdLmNvbmNhdChMLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJlIixOKSl9LEYucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih6LE4pe3JldHVybiBfLmVuY29kZSh0aGlzLl9lbmNvZGUoTikseil9LEYucHJvdG90eXBlLnBy''@;'; put 'put ''ZWNvbXB1dGU9ZnVuY3Rpb24oeil7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgTj17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIE4ubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxOLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LHopLE4uYmV0''@;'; put 'put ''YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1OLHRoaXN9LEYucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKHope2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBOPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIU4mJk4ucG9pbnRzLmxlbmd0''@;'; put 'put ''aD49TWF0aC5jZWlsKCh6LmJpdExlbmd0aCgpKzEpL04uc3RlcCl9LEYucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKHosTil7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciBM''@;'; put 'put ''PVt0aGlzXSxLPXRoaXMsVT0wO1U8TjtVKz16KXtmb3IodmFyIFc9MDtXPHo7VysrKUs9Sy5kYmwoKTtMLnB1c2goSyl9cmV0dXJue3N0ZXA6eixwb2ludHM6TH19LEYucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24oeil7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21w''@;'; put 'put ''dXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgTj1bdGhpc10sTD0oMTw8eiktMSxLPTE9PT1MP251bGw6dGhpcy5kYmwoKSxVPTE7VTxMO1UrKylOW1VdPU5bVS0xXS5hZGQoSyk7cmV0dXJue3duZDp6LHBvaW50czpOfX0sRi5wcm90b3R5cGUuX2dldEJldGE9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sRi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih6KXtmb3IodmFyIE49dGhpcyxMPTA7TDx6O0wrKylOPU4uZGJsKCk7cmV0dXJuIE59fSwxMTM4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUzKSxfPXkoMzc4NSksZz15KDU3MTcpLEI9''@;'; put 'put ''eSg0OTE4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAoTyl7dGhpcy50d2lzdGVkPTEhPSgwfE8uYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxPLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxCLmNhbGwodGhpcywiZWR3YXJkcyIsTyksdGhpcy5hPW5ldyBfKE8uYSwxNiku''@;'; put 'put ''dW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IF8oTy5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBfKE8uZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFk''@;'; put 'put ''ZCh0aGlzLmQpLHcoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfE8uYyl9ZnVuY3Rpb24gRihPLHosTixMLEspe0IuQmFzZVBvaW50LmNhbGwodGhpcyxPLCJwcm9qZWN0aXZlIiksbnVsbD09PXomJm51bGw9PT1OJiZudWxsPT09''@;'; put 'put ''TD8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBfKHosMTYpLHRoaXMueT1uZXcgXyhOLDE2KSx0aGlzLno9TD9uZXcgXyhMLDE2''@;'; put 'put ''KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9SyYmbmV3IF8oSywxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56''@;'; put 'put ''LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVk''@;'; put 'put ''TXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9ZyhQLEIpLHVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5tT25lQT96LnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoeil9LFAu''@;'; put 'put ''cHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLm9uZUM/ejp0aGlzLmMucmVkTXVsKHopfSxQLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oeixOLEwsSyl7cmV0dXJuIHRoaXMucG9pbnQoeixOLEwsSyl9LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oeixO''@;'; put 'put ''KXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIEw9ei5yZWRTcXIoKSxLPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoTCkpLFU9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKEwpKSxXPUsucmVkTXVsKFUucmVk''@;'; put 'put ''SW52bSgpKSxZPVcucmVkU3FydCgpO2lmKDAhPT1ZLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgcT1ZLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihOJiYhcXx8IU4mJnEpJiYoWT1ZLnJlZE5lZygpKSx0aGlz''@;'; put 'put ''LnBvaW50KHosWSl9LFAucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIEw9ei5yZWRTcXIoKSxLPUwucmVkU3ViKHRoaXMuYzIpLFU9TC5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMiku''@;'; put 'put ''cmVkU3ViKHRoaXMuYSksVz1LLnJlZE11bChVLnJlZEludm0oKSk7aWYoMD09PVcuY21wKHRoaXMuemVybykpe2lmKE4pdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHopfXZhciBZPVcucmVkU3FydCgpO2lmKDAhPT1ZLnJlZFNx''@;'; put 'put ''cigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gWS5mcm9tUmVkKCkuaXNPZGQoKSE9PU4mJihZPVkucmVkTmVnKCkpLHRoaXMucG9pbnQoWSx6KX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oeil7aWYoei5p''@;'; put 'put ''c0luZmluaXR5KCkpcmV0dXJuITA7ei5ub3JtYWxpemUoKTt2YXIgTj16LngucmVkU3FyKCksTD16LnkucmVkU3FyKCksSz1OLnJlZE11bCh0aGlzLmEpLnJlZEFkZChMKSxVPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKE4pLnJlZE11bChMKSkpO3JldHVy''@;'; put 'put ''biAwPT09Sy5jbXAoVSl9LGcoRixCLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih6KXtyZXR1cm4gRi5mcm9tSlNPTih0aGlzLHopfSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gbmV3IEYodGhpcyx6LE4sTCxLKX0sRi5m''@;'; put 'put ''cm9tSlNPTj1mdW5jdGlvbih6LE4pe3JldHVybiBuZXcgRih6LE5bMF0sTlsxXSxOWzJdKX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCku''@;'; put 'put ''dG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10''@;'; put 'put ''aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LEYucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkU3FyKCksTj10aGlzLnkucmVkU3FyKCksTD10aGlzLnoucmVkU3FyKCk7TD1MLnJlZElBZGQoTCk7''@;'; put 'put ''dmFyIEs9dGhpcy5jdXJ2ZS5fbXVsQSh6KSxVPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKHopLnJlZElTdWIoTiksVz1LLnJlZEFkZChOKSxZPVcucmVkU3ViKEwpLHE9Sy5yZWRTdWIoTiksZWU9VS5yZWRNdWwoWSksSj1XLnJlZE11bChxKSxuZT1VLnJlZE11bChx''@;'; put 'put ''KSxpZT1ZLnJlZE11bChXKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChlZSxKLGllLG5lKX0sRi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgSyxVLFcsWSxxLGVlLHo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLE49dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJl''@;'; put 'put ''ZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIEo9KFk9dGhpcy5jdXJ2ZS5fbXVsQShOKSkucmVkQWRkKEwpO3RoaXMuek9uZT8oSz16LnJlZFN1YihOKS5yZWRTdWIoTCkucmVkTXVsKEoucmVkU3ViKHRoaXMuY3VydmUudHdvKSksVT1KLnJlZE11bChZLnJlZFN1YihMKSksVz1K''@;'; put 'put ''LnJlZFNxcigpLnJlZFN1YihKKS5yZWRTdWIoSikpOihxPXRoaXMuei5yZWRTcXIoKSxlZT1KLnJlZFN1YihxKS5yZWRJU3ViKHEpLEs9ei5yZWRTdWIoTikucmVkSVN1YihMKS5yZWRNdWwoZWUpLFU9Si5yZWRNdWwoWS5yZWRTdWIoTCkpLFc9Si5yZWRNdWwoZWUpKX1lbHNlIFk9Ti5yZWRB''@;'; put 'put ''ZGQoTCkscT10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksZWU9WS5yZWRTdWIocSkucmVkU3ViKHEpLEs9dGhpcy5jdXJ2ZS5fbXVsQyh6LnJlZElTdWIoWSkpLnJlZE11bChlZSksVT10aGlzLmN1cnZlLl9tdWxDKFkpLnJlZE11bChOLnJlZElTdWIoTCkpLFc9WS5yZWRNdWwo''@;'; put 'put ''ZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSxXKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEYucHJvdG90eXBlLl9leHRBZGQ9''@;'; put 'put ''ZnVuY3Rpb24oeil7dmFyIE49dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bCh6LnkucmVkU3ViKHoueCkpLEw9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bCh6LnkucmVkQWRkKHoueCkpLEs9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoei50KSxVPXRoaXMuei5y''@;'; put 'put ''ZWRNdWwoei56LnJlZEFkZCh6LnopKSxXPUwucmVkU3ViKE4pLFk9VS5yZWRTdWIoSykscT1VLnJlZEFkZChLKSxlZT1MLnJlZEFkZChOKSxKPVcucmVkTXVsKFkpLG5lPXEucmVkTXVsKGVlKSxpZT1XLnJlZE11bChlZSksbGU9WS5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQo''@;'; put 'put ''SixuZSxsZSxpZSl9LEYucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKHope3ZhciBuZSxpZSxOPXRoaXMuei5yZWRNdWwoei56KSxMPU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKHoueCksVT10aGlzLnkucmVkTXVsKHoueSksVz10aGlzLmN1cnZlLmQucmVkTXVsKEspLnJlZE11bChV''@;'; put 'put ''KSxZPUwucmVkU3ViKFcpLHE9TC5yZWRBZGQoVyksZWU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bCh6LngucmVkQWRkKHoueSkpLnJlZElTdWIoSykucmVkSVN1YihVKSxKPU4ucmVkTXVsKFkpLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8obmU9Ti5yZWRNdWwo''@;'; put 'put ''cSkucmVkTXVsKFUucmVkU3ViKHRoaXMuY3VydmUuX211bEEoSykpKSxpZT1ZLnJlZE11bChxKSk6KG5lPU4ucmVkTXVsKHEpLnJlZE11bChVLnJlZFN1YihLKSksaWU9dGhpcy5jdXJ2ZS5fbXVsQyhZKS5yZWRNdWwocSkpLHRoaXMuY3VydmUucG9pbnQoSixuZSxpZSl9LEYucHJvdG90eXBl''@;'; put 'put ''LmFkZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/ejp6LmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKHopOnRoaXMuX3Byb2pBZGQoeil9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5faGFzRG91''@;'; put 'put ''Ymxlcyh6KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHopOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx6KX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKHosTixMKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LExdLDIsITEpfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHosTixMKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LExdLDIsITApfSxGLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHo9dGhpcy56LnJlZEludm0oKTty''@;'; put 'put ''ZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoeiksdGhpcy55PXRoaXMueS5yZWRNdWwoeiksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoeikpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxGLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHope3JldHVybiB0aGlzPT09enx8MD09PXRoaXMuZ2V0WCgpLmNtcCh6LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoei5nZXRZKCkpfSxGLnByb3RvdHlwZS5l''@;'; put 'put ''cVhUb1A9ZnVuY3Rpb24oeil7dmFyIE49ei50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoTikpcmV0dXJuITA7Zm9yKHZhciBMPXouY2xvbmUoKSxLPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihMLmlhZGQodGhpcy5j''@;'; put 'put ''dXJ2ZS5uKSxMLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKE4ucmVkSUFkZChLKSwwPT09dGhpcy54LmNtcChOKSlyZXR1cm4hMH19LEYucHJvdG90eXBlLnRvUD1GLnByb3RvdHlwZS5ub3JtYWxpemUsRi5wcm90b3R5cGUubWl4ZWRBZGQ9Ri5wcm90b3R5cGUuYWRkfSw4MjU0''@;'; put 'put ''Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPVg7SS5iYXNlPXkoNDkxOCksSS5zaG9ydD15KDY2NzMpLEkubW9udD15KDI4ODEpLEkuZWR3YXJkcz15KDExMzgpfSwyODgxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc4NSksXz15KDU3MTcpLGc9eSg0OTE4KSxCPXko''@;'; put 'put ''OTUzKTtmdW5jdGlvbiB3KEYpe2cuY2FsbCh0aGlzLCJtb250IixGKSx0aGlzLmE9bmV3IEkoRi5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBJKEYuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IEkoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3''@;'; put 'put ''bz1uZXcgSSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIFAoRixPLHope2cuQmFzZVBvaW50LmNhbGwodGhpcyxGLCJwcm9qZWN0aXZlIiksbnVsbD09PU8mJm51bGw9PT16Pyh0aGlzLng9dGhpcy5j''@;'; put 'put ''dXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgSShPLDE2KSx0aGlzLno9bmV3IEkoeiwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZl''@;'; put 'put ''LnJlZCkpKX1fKHcsZyksdWUuZXhwb3J0cz13LHcucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKE8pe3ZhciB6PU8ubm9ybWFsaXplKCkueCxOPXoucmVkU3FyKCksTD1OLnJlZE11bCh6KS5yZWRBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHopO3JldHVybiAwPT09TC5yZWRTcXJ0''@;'; put 'put ''KCkucmVkU3FyKCkuY21wKEwpfSxfKFAsZy5CYXNlUG9pbnQpLHcucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKE8seil7cmV0dXJuIHRoaXMucG9pbnQoQi50b0FycmF5KE8seiksMSl9LHcucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKE8seil7cmV0dXJuIG5ldyBQKHRoaXMsTyx6''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihPKXtyZXR1cm4gUC5mcm9tSlNPTih0aGlzLE8pfSxQLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxQLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJl''@;'; put 'put ''Iix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sUC5mcm9tSlNPTj1mdW5jdGlvbihPLHope3JldHVybiBuZXcgUChPLHpbMF0selsxXXx8Ty5vbmUpfSxQLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+''@;'; put 'put ''IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LFAucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxQLnByb3RvdHlw''@;'; put 'put ''ZS5kYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksTD10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCksSz16LnJlZFN1YihMKSxVPXoucmVkTXVsKEwpLFc9Sy5yZWRNdWwoTC5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKEspKSk7cmV0''@;'; put 'put ''dXJuIHRoaXMuY3VydmUucG9pbnQoVSxXKX0sUC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihPLHope3ZhciBOPXRoaXMueC5yZWRBZGQodGhp''@;'; put 'put ''cy56KSxMPXRoaXMueC5yZWRTdWIodGhpcy56KSxLPU8ueC5yZWRBZGQoTy56KSxXPU8ueC5yZWRTdWIoTy56KS5yZWRNdWwoTiksWT1LLnJlZE11bChMKSxxPXouei5yZWRNdWwoVy5yZWRBZGQoWSkucmVkU3FyKCkpLGVlPXoueC5yZWRNdWwoVy5yZWRJU3ViKFkpLnJlZFNxcigpKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5jdXJ2ZS5wb2ludChxLGVlKX0sUC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE8pe2Zvcih2YXIgej1PLmNsb25lKCksTj10aGlzLEw9dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLFU9W107MCE9PXouY21wbigwKTt6Lml1c2hybigxKSlVLnB1c2goei5hbmRsbigxKSk7Zm9y''@;'; put 'put ''KHZhciBXPVUubGVuZ3RoLTE7Vz49MDtXLS0pMD09PVVbV10/KE49Ti5kaWZmQWRkKEwsdGhpcyksTD1MLmRibCgpKTooTD1OLmRpZmZBZGQoTCx0aGlzKSxOPU4uZGJsKCkpO3JldHVybiBMfSxQLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBw''@;'; put 'put ''b3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTyl7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5j''@;'; put 'put ''bXAoTy5nZXRYKCkpfSxQLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LFAucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Jt''@;'; put 'put ''YWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sNjY3MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MyksXz15KDM3ODUpLGc9eSg1NzE3KSxCPXkoNDkxOCksdz1JLmFzc2VydDtmdW5jdGlvbiBQKHope0IuY2FsbCh0aGlzLCJzaG9ydCIseiksdGhpcy5hPW5ldyBfKHouYSwx''@;'; put 'put ''NikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgXyh6LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhp''@;'; put 'put ''cy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKHopLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIEYoeixOLEwsSyl7Qi5CYXNlUG9pbnQuY2FsbCh0aGlzLHosImFmZmluZSIpLG51''@;'; put 'put ''bGw9PT1OJiZudWxsPT09TD8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IF8oTiwxNiksdGhpcy55PW5ldyBfKEwsMTYpLEsmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRo''@;'; put 'put ''aXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gTyh6LE4sTCxLKXtCLkJhc2VQb2ludC5jYWxsKHRoaXMseiwiamFjb2JpYW4i''@;'; put 'put ''KSxudWxsPT09TiYmbnVsbD09PUwmJm51bGw9PT1LPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgXygwKSk6KHRoaXMueD1uZXcgXyhOLDE2KSx0aGlzLnk9bmV3IF8oTCwxNiksdGhpcy56PW5ldyBfKEssMTYpKSx0aGlzLngucmVkfHwo''@;'; put 'put ''dGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2''@;'; put 'put ''ZS5vbmV9ZyhQLEIpLHVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKE4pe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBMLEs7aWYoTi5iZXRhKUw9bmV3IF8oTi5iZXRhLDE2KS50b1JlZCh0aGlz''@;'; put 'put ''LnJlZCk7ZWxzZXt2YXIgVT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtMPShMPVVbMF0uY21wKFVbMV0pPDA/VVswXTpVWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoTi5sYW1iZGEpSz1uZXcgXyhOLmxhbWJkYSwxNik7ZWxzZXt2YXIgVz10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTsw''@;'; put 'put ''PT09dGhpcy5nLm11bChXWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTCkpP0s9V1swXTp3KDA9PT10aGlzLmcubXVsKEs9V1sxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKEwpKSl9cmV0dXJue2JldGE6TCxsYW1iZGE6SyxiYXNpczpOLmJhc2lzP04uYmFzaXMubWFwKGZ1bmN0aW9uKHEp''@;'; put 'put ''e3JldHVybnthOm5ldyBfKHEuYSwxNiksYjpuZXcgXyhxLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhLKX19fSxQLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKE4pe3ZhciBMPU49PT10aGlzLnA/dGhpcy5yZWQ6Xy5tb250KE4pLEs9bmV3IF8oMikudG9SZWQoTCkucmVk''@;'; put 'put ''SW52bSgpLFU9Sy5yZWROZWcoKSxXPW5ldyBfKDMpLnRvUmVkKEwpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoSyk7cmV0dXJuW1UucmVkQWRkKFcpLmZyb21SZWQoKSxVLnJlZFN1YihXKS5mcm9tUmVkKCldfSxQLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKE4pe2Zvcih2''@;'; put 'put ''YXIgSixuZSxpZSxsZSxtZSxfZSxUZSxqZSxWLEw9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxLPU4sVT10aGlzLm4uY2xvbmUoKSxXPW5ldyBfKDEpLFk9bmV3IF8oMCkscT1uZXcgXygwKSxlZT1uZXcgXygxKSxTZT0wOzAhPT1LLmNtcG4oMCk7KXt2''@;'; put 'put ''YXIgcD1VLmRpdihLKTtqZT1VLnN1YihwLm11bChLKSksVj1xLnN1YihwLm11bChXKSk7dmFyIGI9ZWUuc3ViKHAubXVsKFkpKTtpZighaWUmJmplLmNtcChMKTwwKUo9VGUubmVnKCksbmU9VyxpZT1qZS5uZWcoKSxsZT1WO2Vsc2UgaWYoaWUmJjI9PSsrU2UpYnJlYWs7VGU9amUsVT1LLEs9''@;'; put 'put ''amUscT1XLFc9VixlZT1ZLFk9Yn1tZT1qZS5uZWcoKSxfZT1WO3ZhciB4PWllLnNxcigpLmFkZChsZS5zcXIoKSk7cmV0dXJuIG1lLnNxcigpLmFkZChfZS5zcXIoKSkuY21wKHgpPj0wJiYobWU9SixfZT1uZSksaWUubmVnYXRpdmUmJihpZT1pZS5uZWcoKSxsZT1sZS5uZWcoKSksbWUubmVn''@;'; put 'put ''YXRpdmUmJihtZT1tZS5uZWcoKSxfZT1fZS5uZWcoKSksW3thOmllLGI6bGV9LHthOm1lLGI6X2V9XX0sUC5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbihOKXt2YXIgTD10aGlzLmVuZG8uYmFzaXMsSz1MWzBdLFU9TFsxXSxXPVUuYi5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxZPUsu''@;'; put 'put ''Yi5uZWcoKS5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxxPVcubXVsKEsuYSksZWU9WS5tdWwoVS5hKSxKPVcubXVsKEsuYiksbmU9WS5tdWwoVS5iKTtyZXR1cm57azE6Ti5zdWIocSkuc3ViKGVlKSxrMjpKLmFkZChuZSkubmVnKCl9fSxQLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9u''@;'; put 'put ''KE4sTCl7KE49bmV3IF8oTiwxNikpLnJlZHx8KE49Ti50b1JlZCh0aGlzLnJlZCkpO3ZhciBLPU4ucmVkU3FyKCkucmVkTXVsKE4pLnJlZElBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLFU9Sy5yZWRTcXJ0KCk7aWYoMCE9PVUucmVkU3FyKCkucmVkU3ViKEspLmNtcCh0''@;'; put 'put ''aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBXPVUuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKEwmJiFXfHwhTCYmVykmJihVPVUucmVkTmVnKCkpLHRoaXMucG9pbnQoTixVKX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oTil7aWYoTi5pbmYp''@;'; put 'put ''cmV0dXJuITA7dmFyIEw9Ti54LEs9Ti55LFU9dGhpcy5hLnJlZE11bChMKSxXPUwucmVkU3FyKCkucmVkTXVsKEwpLnJlZElBZGQoVSkucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09Sy5yZWRTcXIoKS5yZWRJU3ViKFcpLmNtcG4oMCl9LFAucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1m''@;'; put 'put ''dW5jdGlvbihOLEwsSyl7Zm9yKHZhciBVPXRoaXMuX2VuZG9XbmFmVDEsVz10aGlzLl9lbmRvV25hZlQyLFk9MDtZPE4ubGVuZ3RoO1krKyl7dmFyIHE9dGhpcy5fZW5kb1NwbGl0KExbWV0pLGVlPU5bWV0sSj1lZS5fZ2V0QmV0YSgpO3EuazEubmVnYXRpdmUmJihxLmsxLmluZWcoKSxlZT1l''@;'; put 'put ''ZS5uZWcoITApKSxxLmsyLm5lZ2F0aXZlJiYocS5rMi5pbmVnKCksSj1KLm5lZyghMCkpLFVbMipZXT1lZSxVWzIqWSsxXT1KLFdbMipZXT1xLmsxLFdbMipZKzFdPXEuazJ9Zm9yKHZhciBuZT10aGlzLl93bmFmTXVsQWRkKDEsVSxXLDIqWSxLKSxpZT0wO2llPDIqWTtpZSsrKVVbaWVdPW51''@;'; put 'put ''bGwsV1tpZV09bnVsbDtyZXR1cm4gbmV9LGcoRixCLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTixMLEspe3JldHVybiBuZXcgRih0aGlzLE4sTCxLKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihOLEwpe3JldHVybiBGLmZyb21KU09OKHRoaXMs''@;'; put 'put ''TixMKX0sRi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBOPXRoaXMucHJlY29tcHV0ZWQ7aWYoTiYmTi5iZXRhKXJldHVybiBOLmJldGE7dmFyIEw9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRh''@;'; put 'put ''KSx0aGlzLnkpO2lmKE4pe3ZhciBLPXRoaXMuY3VydmUsVT1mdW5jdGlvbihXKXtyZXR1cm4gSy5wb2ludChXLngucmVkTXVsKEsuZW5kby5iZXRhKSxXLnkpfTtOLmJldGE9TCxMLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOk4ubmFmJiZ7d25kOk4ubmFmLnduZCxwb2ludHM6Ti5uYWYu''@;'; put 'put ''cG9pbnRzLm1hcChVKX0sZG91YmxlczpOLmRvdWJsZXMmJntzdGVwOk4uZG91Ymxlcy5zdGVwLHBvaW50czpOLmRvdWJsZXMucG9pbnRzLm1hcChVKX19fXJldHVybiBMfX0sRi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlz''@;'; put 'put ''LnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFm''@;'; put 'put ''JiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sRi5mcm9tSlNPTj1mdW5jdGlvbihOLEwsSyl7InN0cmluZyI9PXR5cGVvZiBMJiYoTD1KU09OLnBhcnNlKEwpKTt2YXIg''@;'; put 'put ''VT1OLnBvaW50KExbMF0sTFsxXSxLKTtpZighTFsyXSlyZXR1cm4gVTtmdW5jdGlvbiBXKHEpe3JldHVybiBOLnBvaW50KHFbMF0scVsxXSxLKX12YXIgWT1MWzJdO3JldHVybiBVLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpZLmRvdWJsZXMmJntzdGVwOlkuZG91Ymxlcy5zdGVw''@;'; put 'put ''LHBvaW50czpbVV0uY29uY2F0KFkuZG91Ymxlcy5wb2ludHMubWFwKFcpKX0sbmFmOlkubmFmJiZ7d25kOlkubmFmLnduZCxwb2ludHM6W1VdLmNvbmNhdChZLm5hZi5wb2ludHMubWFwKFcpKX19LFV9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmlu''@;'; put 'put ''aXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmluZn0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaW5mKXJldHVybiBOO2lmKE4uaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoTikpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShOKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lm''@;'; put 'put ''KDA9PT10aGlzLnguY21wKE4ueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTD10aGlzLnkucmVkU3ViKE4ueSk7MCE9PUwuY21wbigwKSYmKEw9TC5yZWRNdWwodGhpcy54LnJlZFN1YihOLngpLnJlZEludm0oKSkpO3ZhciBLPUwucmVkU3FyKCkucmVkSVN1Yih0''@;'; put 'put ''aGlzLngpLnJlZElTdWIoTi54KSxVPUwucmVkTXVsKHRoaXMueC5yZWRTdWIoSykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChLLFUpfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTj10aGlzLnkucmVkQWRk''@;'; put 'put ''KHRoaXMueSk7aWYoMD09PU4uY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBMPXRoaXMuY3VydmUuYSxLPXRoaXMueC5yZWRTcXIoKSxVPU4ucmVkSW52bSgpLFc9Sy5yZWRBZGQoSykucmVkSUFkZChLKS5yZWRJQWRkKEwpLnJlZE11bChVKSxZPVcucmVk''@;'; put 'put ''U3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLHE9Vy5yZWRNdWwodGhpcy54LnJlZFN1YihZKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFkscSl9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0s''@;'; put 'put ''Ri5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTil7cmV0dXJuIE49bmV3IF8oTiwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKE4pP3RoaXMuY3VydmUuX2ZpeGVkTmFm''@;'; put 'put ''TXVsKHRoaXMsTik6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbTl0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxOKX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXt2YXIgVT1bdGhpcyxMXSxXPVtOLEtdO3JldHVybiB0aGlz''@;'; put 'put ''LmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoVSxXKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsVSxXLDIpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXt2YXIgVT1bdGhpcyxMXSxXPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5j''@;'; put 'put ''dXJ2ZS5fZW5kb1duYWZNdWxBZGQoVSxXLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsVSxXLDIsITApfSxGLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcz09PU58fHRoaXMuaW5mPT09Ti5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoTi54KSYmMD09PXRo''@;'; put 'put ''aXMueS5jbXAoTi55KSl9LEYucHJvdG90eXBlLm5lZz1mdW5jdGlvbihOKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKE4mJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBLPXRoaXMucHJlY29tcHV0ZWQsVT1m''@;'; put 'put ''dW5jdGlvbihXKXtyZXR1cm4gVy5uZWcoKX07TC5wcmVjb21wdXRlZD17bmFmOksubmFmJiZ7d25kOksubmFmLnduZCxwb2ludHM6Sy5uYWYucG9pbnRzLm1hcChVKX0sZG91YmxlczpLLmRvdWJsZXMmJntzdGVwOksuZG91Ymxlcy5zdGVwLHBvaW50czpLLmRvdWJsZXMucG9pbnRzLm1hcChV''@;'; put 'put ''KX19fXJldHVybiBMfSxGLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxnKE8sQi5CYXNlUG9pbnQpLFAucHJvdG90''@;'; put 'put ''eXBlLmpwb2ludD1mdW5jdGlvbihOLEwsSyl7cmV0dXJuIG5ldyBPKHRoaXMsTixMLEspfSxPLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBOPXRoaXMuei5yZWRJbnZtKCksTD1OLnJl''@;'; put 'put ''ZFNxcigpLEs9dGhpcy54LnJlZE11bChMKSxVPXRoaXMueS5yZWRNdWwoTCkucmVkTXVsKE4pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSl9LE8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMu''@;'; put 'put ''eil9LE8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTjtpZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgTD1OLnoucmVkU3FyKCksSz10aGlzLnoucmVkU3FyKCksVT10aGlzLngucmVkTXVsKEwpLFc9Ti54LnJlZE11bChLKSxZ''@;'; put 'put ''PXRoaXMueS5yZWRNdWwoTC5yZWRNdWwoTi56KSkscT1OLnkucmVkTXVsKEsucmVkTXVsKHRoaXMueikpLGVlPVUucmVkU3ViKFcpLEo9WS5yZWRTdWIocSk7aWYoMD09PWVlLmNtcG4oMCkpcmV0dXJuIDAhPT1KLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRo''@;'; put 'put ''aXMuZGJsKCk7dmFyIG5lPWVlLnJlZFNxcigpLGllPW5lLnJlZE11bChlZSksbGU9VS5yZWRNdWwobmUpLG1lPUoucmVkU3FyKCkucmVkSUFkZChpZSkucmVkSVN1YihsZSkucmVkSVN1YihsZSksX2U9Si5yZWRNdWwobGUucmVkSVN1YihtZSkpLnJlZElTdWIoWS5yZWRNdWwoaWUpKSxUZT10''@;'; put 'put ''aGlzLnoucmVkTXVsKE4ueikucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobWUsX2UsVGUpfSxPLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTi50b0ooKTtpZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2''@;'; put 'put ''YXIgTD10aGlzLnoucmVkU3FyKCksSz10aGlzLngsVT1OLngucmVkTXVsKEwpLFc9dGhpcy55LFk9Ti55LnJlZE11bChMKS5yZWRNdWwodGhpcy56KSxxPUsucmVkU3ViKFUpLGVlPVcucmVkU3ViKFkpO2lmKDA9PT1xLmNtcG4oMCkpcmV0dXJuIDAhPT1lZS5jbXBuKDApP3RoaXMuY3VydmUu''@;'; put 'put ''anBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBKPXEucmVkU3FyKCksbmU9Si5yZWRNdWwocSksaWU9Sy5yZWRNdWwoSiksbGU9ZWUucmVkU3FyKCkucmVkSUFkZChuZSkucmVkSVN1YihpZSkucmVkSVN1YihpZSksbWU9ZWUucmVkTXVsKGllLnJlZElTdWIobGUpKS5yZWRJ''@;'; put 'put ''U3ViKFcucmVkTXVsKG5lKSksX2U9dGhpcy56LnJlZE11bChxKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobGUsbWUsX2UpfSxPLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKE4pe2lmKDA9PT1OKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFOKXJl''@;'; put 'put ''dHVybiB0aGlzLmRibCgpO3ZhciBMO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgSz10aGlzO2ZvcihMPTA7TDxOO0wrKylLPUsuZGJsKCk7cmV0dXJuIEt9dmFyIFU9dGhpcy5jdXJ2ZS5hLFc9dGhpcy5jdXJ2ZS50aW52LFk9dGhpcy54LHE9dGhpcy55LGVl''@;'; put 'put ''PXRoaXMueixKPWVlLnJlZFNxcigpLnJlZFNxcigpLG5lPXEucmVkQWRkKHEpO2ZvcihMPTA7TDxOO0wrKyl7dmFyIGllPVkucmVkU3FyKCksbGU9bmUucmVkU3FyKCksbWU9bGUucmVkU3FyKCksX2U9aWUucmVkQWRkKGllKS5yZWRJQWRkKGllKS5yZWRJQWRkKFUucmVkTXVsKEopKSxUZT1Z''@;'; put 'put ''LnJlZE11bChsZSksU2U9X2UucmVkU3FyKCkucmVkSVN1YihUZS5yZWRBZGQoVGUpKSxqZT1UZS5yZWRJU3ViKFNlKSxWPV9lLnJlZE11bChqZSk7Vj1WLnJlZElBZGQoVikucmVkSVN1YihtZSk7dmFyIHA9bmUucmVkTXVsKGVlKTtMKzE8TiYmKEo9Si5yZWRNdWwobWUpKSxZPVNlLGVlPXAs''@;'; put 'put ''bmU9Vn1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoWSxuZS5yZWRNdWwoVyksZWUpfSxPLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90''@;'; put 'put ''aHJlZURibCgpOnRoaXMuX2RibCgpfSxPLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBOLEwsSztpZih0aGlzLnpPbmUpe3ZhciBVPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxZPVcucmVkU3FyKCkscT10aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElT''@;'; put 'put ''dWIoVSkucmVkSVN1YihZKTtxPXEucmVkSUFkZChxKTt2YXIgZWU9VS5yZWRBZGQoVSkucmVkSUFkZChVKSxKPWVlLnJlZFNxcigpLnJlZElTdWIocSkucmVkSVN1YihxKSxuZT1ZLnJlZElBZGQoWSk7bmU9KG5lPW5lLnJlZElBZGQobmUpKS5yZWRJQWRkKG5lKSxOPUosTD1lZS5yZWRNdWwo''@;'; put 'put ''cS5yZWRJU3ViKEopKS5yZWRJU3ViKG5lKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLngucmVkU3FyKCksbGU9dGhpcy55LnJlZFNxcigpLG1lPWxlLnJlZFNxcigpLF9lPXRoaXMueC5yZWRBZGQobGUpLnJlZFNxcigpLnJlZElTdWIoaWUpLnJlZElTdWIobWUp''@;'; put 'put ''O19lPV9lLnJlZElBZGQoX2UpO3ZhciBUZT1pZS5yZWRBZGQoaWUpLnJlZElBZGQoaWUpLFNlPVRlLnJlZFNxcigpLGplPW1lLnJlZElBZGQobWUpO2plPShqZT1qZS5yZWRJQWRkKGplKSkucmVkSUFkZChqZSksTj1TZS5yZWRJU3ViKF9lKS5yZWRJU3ViKF9lKSxMPVRlLnJlZE11bChfZS5y''@;'; put 'put ''ZWRJU3ViKE4pKS5yZWRJU3ViKGplKSxLPShLPXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChLKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixMLEspfSxPLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgTixMLEs7aWYodGhpcy56T25lKXt2YXIgVT10aGlzLngu''@;'; put 'put ''cmVkU3FyKCksVz10aGlzLnkucmVkU3FyKCksWT1XLnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChXKS5yZWRTcXIoKS5yZWRJU3ViKFUpLnJlZElTdWIoWSk7cT1xLnJlZElBZGQocSk7dmFyIGVlPVUucmVkQWRkKFUpLnJlZElBZGQoVSkucmVkSUFkZCh0aGlzLmN1cnZlLmEpLEo9ZWUucmVk''@;'; put 'put ''U3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHEpO049Sjt2YXIgbmU9WS5yZWRJQWRkKFkpO25lPShuZT1uZS5yZWRJQWRkKG5lKSkucmVkSUFkZChuZSksTD1lZS5yZWRNdWwocS5yZWRJU3ViKEopKS5yZWRJU3ViKG5lKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlz''@;'; put 'put ''LnoucmVkU3FyKCksbGU9dGhpcy55LnJlZFNxcigpLG1lPXRoaXMueC5yZWRNdWwobGUpLF9lPXRoaXMueC5yZWRTdWIoaWUpLnJlZE11bCh0aGlzLngucmVkQWRkKGllKSk7X2U9X2UucmVkQWRkKF9lKS5yZWRJQWRkKF9lKTt2YXIgVGU9bWUucmVkSUFkZChtZSksU2U9KFRlPVRlLnJlZElB''@;'; put 'put ''ZGQoVGUpKS5yZWRBZGQoVGUpO049X2UucmVkU3FyKCkucmVkSVN1YihTZSksSz10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihsZSkucmVkSVN1YihpZSk7dmFyIGplPWxlLnJlZFNxcigpO2plPShqZT0oamU9amUucmVkSUFkZChqZSkpLnJlZElBZGQoamUpKS5yZWRJ''@;'; put 'put ''QWRkKGplKSxMPV9lLnJlZE11bChUZS5yZWRJU3ViKE4pKS5yZWRJU3ViKGplKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixMLEspfSxPLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5jdXJ2ZS5hLEw9dGhpcy54LEs9dGhpcy55LFU9dGhpcy56LFc9VS5yZWRTcXIo''@;'; put 'put ''KS5yZWRTcXIoKSxZPUwucmVkU3FyKCkscT1LLnJlZFNxcigpLGVlPVkucmVkQWRkKFkpLnJlZElBZGQoWSkucmVkSUFkZChOLnJlZE11bChXKSksSj1MLnJlZEFkZChMKSxuZT0oSj1KLnJlZElBZGQoSikpLnJlZE11bChxKSxpZT1lZS5yZWRTcXIoKS5yZWRJU3ViKG5lLnJlZEFkZChuZSkp''@;'; put 'put ''LGxlPW5lLnJlZElTdWIoaWUpLG1lPXEucmVkU3FyKCk7bWU9KG1lPShtZT1tZS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSkpLnJlZElBZGQobWUpO3ZhciBfZT1lZS5yZWRNdWwobGUpLnJlZElTdWIobWUpLFRlPUsucmVkQWRkKEspLnJlZE11bChVKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9p''@;'; put 'put ''bnQoaWUsX2UsVGUpfSxPLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBOPXRoaXMueC5yZWRTcXIoKSxMPXRoaXMueS5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxVPUwucmVkU3FyKCksVz1O''@;'; put 'put ''LnJlZEFkZChOKS5yZWRJQWRkKE4pLFk9Vy5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoTCkucmVkU3FyKCkucmVkSVN1YihOKS5yZWRJU3ViKFUpLGVlPShxPShxPShxPXEucmVkSUFkZChxKSkucmVkQWRkKHEpLnJlZElBZGQocSkpLnJlZElTdWIoWSkpLnJlZFNxcigpLEo9VS5yZWRJQWRk''@;'; put 'put ''KFUpO0o9KEo9KEo9Si5yZWRJQWRkKEopKS5yZWRJQWRkKEopKS5yZWRJQWRkKEopO3ZhciBuZT1XLnJlZElBZGQocSkucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKGVlKS5yZWRJU3ViKEopLGllPUwucmVkTXVsKG5lKTtpZT0oaWU9aWUucmVkSUFkZChpZSkpLnJlZElBZGQoaWUpO3Zh''@;'; put 'put ''ciBsZT10aGlzLngucmVkTXVsKGVlKS5yZWRJU3ViKGllKTtsZT0obGU9bGUucmVkSUFkZChsZSkpLnJlZElBZGQobGUpO3ZhciBtZT10aGlzLnkucmVkTXVsKG5lLnJlZE11bChKLnJlZElTdWIobmUpKS5yZWRJU3ViKHEucmVkTXVsKGVlKSkpO21lPShtZT0obWU9bWUucmVkSUFkZChtZSkp''@;'; put 'put ''LnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKTt2YXIgX2U9dGhpcy56LnJlZEFkZChxKS5yZWRTcXIoKS5yZWRJU3ViKEspLnJlZElTdWIoZWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsZSxtZSxfZSl9LE8ucHJvdG90eXBlLm11bD1mdW5jdGlvbihOLEwpe3JldHVybiBOPW5ldyBfKE4s''@;'; put 'put ''TCksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLE4pfSxPLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtpZigiYWZmaW5lIj09PU4udHlwZSlyZXR1cm4gdGhpcy5lcShOLnRvSigpKTtpZih0aGlzPT09TilyZXR1cm4hMDt2YXIgTD10aGlzLnoucmVkU3FyKCksSz1OLnoucmVkU3FyKCk7aWYo''@;'; put 'put ''MCE9PXRoaXMueC5yZWRNdWwoSykucmVkSVN1YihOLngucmVkTXVsKEwpKS5jbXBuKDApKXJldHVybiExO3ZhciBVPUwucmVkTXVsKHRoaXMueiksVz1LLnJlZE11bChOLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChXKS5yZWRJU3ViKE4ueS5yZWRNdWwoVSkpLmNtcG4oMCl9LE8ucHJv''@;'; put 'put ''dG90eXBlLmVxWFRvUD1mdW5jdGlvbihOKXt2YXIgTD10aGlzLnoucmVkU3FyKCksSz1OLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoTCk7aWYoMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITA7Zm9yKHZhciBVPU4uY2xvbmUoKSxXPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoTCk7Oyl7''@;'; put 'put ''aWYoVS5pYWRkKHRoaXMuY3VydmUubiksVS5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihLLnJlZElBZGQoVyksMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITB9fSxPLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBv''@;'; put 'put ''aW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sTy5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhp''@;'; put 'put ''cy56LmNtcG4oMCl9fSw1NDI3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBPLEk9WCxfPXkoMzcxNSksZz15KDgyNTQpLHc9eSg5NTMpLmFzc2VydDtmdW5jdGlvbiBQKHope3RoaXMuY3VydmU9InNob3J0Ij09PXoudHlwZT9uZXcgZy5zaG9ydCh6KToiZWR3YXJkcyI9PT16LnR5cGU/''@;'; put 'put ''bmV3IGcuZWR3YXJkcyh6KTpuZXcgZy5tb250KHopLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9ei5oYXNoLHcodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSx3KHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFs''@;'; put 'put ''aWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gRih6LE4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBMPW5ldyBQKE4pO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoSSx6LHtjb25maWd1''@;'; put 'put ''cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpMfSksTH19KX1JLlByZXNldEN1cnZlPVAsRigicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6Xy5z''@;'; put 'put ''aGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksRigicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIy''@;'; put 'put ''NCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1''@;'; put 'put ''NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2Mx''@;'; put 'put ''ZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksRigicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAw''@;'; put 'put ''MDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2''@;'; put 'put ''YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0''@;'; put 'put ''MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLEYoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDpfLnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3''@;'; put 'put ''NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlk''@;'; put 'put ''IDdhNDMxZDdjIDkwZWEwZTVmIl19KSxGKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTcz''@;'; put 'put ''ZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5''@;'; put 'put ''YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6Xy5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4''@;'; put 'put ''ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4''@;'; put 'put ''NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksRigiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixu''@;'; put 'put ''OiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLEYoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2''@;'; put 'put ''NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e089eSgxMDM3KX1jYXRjaHtPPXZvaWQgMH1GKCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpfLnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0''@;'; put 'put ''MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQz''@;'; put 'put ''N2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNl''@;'; put 'put ''MjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4IixPXX0pfSw3OTU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc4NSksXz15KDIxNTYpLGc9eSg5NTMpLEI9eSg1NDI3''@;'; put 'put ''KSx3PXkoOTkzMSksUD1nLmFzc2VydCxGPXkoMTI1MSksTz15KDYxMSk7ZnVuY3Rpb24geihOKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooTik7InN0cmluZyI9PXR5cGVvZiBOJiYoUChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQixOKSwiVW5r''@;'; put 'put ''bm93biBjdXJ2ZSAiK04pLE49QltOXSksTiBpbnN0YW5jZW9mIEIuUHJlc2V0Q3VydmUmJihOPXtjdXJ2ZTpOfSksdGhpcy5jdXJ2ZT1OLmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9Ti5j''@;'; put 'put ''dXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKE4uY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9Ti5oYXNofHxOLmN1cnZlLmhhc2h9dWUuZXhwb3J0cz16LHoucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyBGKHRoaXMsTCl9LHoucHJvdG90eXBlLmtleUZy''@;'; put 'put ''b21Qcml2YXRlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEYuZnJvbVByaXZhdGUodGhpcyxMLEspfSx6LnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEYuZnJvbVB1YmxpYyh0aGlzLEwsSyl9LHoucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oTCl7THx8''@;'; put 'put ''KEw9e30pO2Zvcih2YXIgSz1uZXcgXyh7aGFzaDp0aGlzLmhhc2gscGVyczpMLnBlcnMscGVyc0VuYzpMLnBlcnNFbmN8fCJ1dGY4IixlbnRyb3B5OkwuZW50cm9weXx8dyh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOkwuZW50cm9weSYmTC5lbnRyb3B5RW5jfHwidXRmOCIs''@;'; put 'put ''bm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLFU9dGhpcy5uLmJ5dGVMZW5ndGgoKSxXPXRoaXMubi5zdWIobmV3IEkoMikpOzspe3ZhciBZPW5ldyBJKEsuZ2VuZXJhdGUoVSkpO2lmKCEoWS5jbXAoVyk+MCkpcmV0dXJuIFkuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShZKX19LHoucHJv''@;'; put 'put ''dG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihMLEssVSl7dmFyIFc7aWYoSS5pc0JOKEwpfHwibnVtYmVyIj09dHlwZW9mIEwpVz0oTD1uZXcgSShMLDE2KSkuYnl0ZUxlbmd0aCgpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBMKVc9TC5sZW5ndGgsTD1uZXcgSShMLDE2KTtlbHNle3Zh''@;'; put 'put ''ciBZPUwudG9TdHJpbmcoKTtXPVkubGVuZ3RoKzE+Pj4xLEw9bmV3IEkoWSwxNil9Im51bWJlciIhPXR5cGVvZiBVJiYoVT04KlcpO3ZhciBxPVUtdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBxPjAmJihMPUwudXNocm4ocSkpLCFLJiZMLmNtcCh0aGlzLm4pPj0wP0wuc3ViKHRoaXMubik6''@;'; put 'put ''TH0sei5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihMLEssVSxXKXtpZigib2JqZWN0Ij09dHlwZW9mIFUmJihXPVUsVT1udWxsKSxXfHwoVz17fSksInN0cmluZyIhPXR5cGVvZiBMJiYibnVtYmVyIiE9dHlwZW9mIEwmJiFJLmlzQk4oTCkpe1AoIm9iamVjdCI9PXR5cGVvZiBMJiZMJiYibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIEwubGVuZ3RoLCJFeHBlY3RlZCBtZXNzYWdlIHRvIGJlIGFuIGFycmF5LWxpa2UsIGEgaGV4IHN0cmluZywgb3IgYSBCTiBpbnN0YW5jZSIpLFAoTC5sZW5ndGg+Pj4wPT09TC5sZW5ndGgpO2Zvcih2YXIgWT0wO1k8TC5sZW5ndGg7WSsrKVAoKDI1NSZMW1ldKT09PUxb''@;'; put 'put ''WV0pfUs9dGhpcy5rZXlGcm9tUHJpdmF0ZShLLFUpLEw9dGhpcy5fdHJ1bmNhdGVUb04oTCwhMSxXLm1zZ0JpdExlbmd0aCksUCghTC5pc05lZygpLCJDYW4gbm90IHNpZ24gYSBuZWdhdGl2ZSBtZXNzYWdlIik7dmFyIHE9dGhpcy5uLmJ5dGVMZW5ndGgoKSxlZT1LLmdldFByaXZhdGUoKS50''@;'; put 'put ''b0FycmF5KCJiZSIscSksSj1MLnRvQXJyYXkoImJlIixxKTtQKG5ldyBJKEopLmVxKEwpLCJDYW4gbm90IHNpZ24gbWVzc2FnZSIpO2Zvcih2YXIgbmU9bmV3IF8oe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6ZWUsbm9uY2U6SixwZXJzOlcucGVycyxwZXJzRW5jOlcucGVyc0VuY3x8InV0Zjgi''@;'; put 'put ''fSksaWU9dGhpcy5uLnN1YihuZXcgSSgxKSksbGU9MDs7bGUrKyl7dmFyIG1lPVcuaz9XLmsobGUpOm5ldyBJKG5lLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKChtZT10aGlzLl90cnVuY2F0ZVRvTihtZSwhMCkpLmNtcG4oMSk8PTB8fG1lLmNtcChpZSk+PTApKXt2YXIg''@;'; put 'put ''X2U9dGhpcy5nLm11bChtZSk7aWYoIV9lLmlzSW5maW5pdHkoKSl7dmFyIFRlPV9lLmdldFgoKSxTZT1UZS51bW9kKHRoaXMubik7aWYoMCE9PVNlLmNtcG4oMCkpe3ZhciBqZT1tZS5pbnZtKHRoaXMubikubXVsKFNlLm11bChLLmdldFByaXZhdGUoKSkuaWFkZChMKSk7aWYoMCE9PShqZT1q''@;'; put 'put ''ZS51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBWPShfZS5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09VGUuY21wKFNlKT8yOjApO3JldHVybiBXLmNhbm9uaWNhbCYmamUuY21wKHRoaXMubmgpPjAmJihqZT10aGlzLm4uc3ViKGplKSxWXj0xKSxuZXcgTyh7cjpTZSxzOmplLHJlY292ZXJ5''@;'; put 'put ''UGFyYW06Vn0pfX19fX19LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihMLEssVSxXLFkpe1l8fChZPXt9KSxMPXRoaXMuX3RydW5jYXRlVG9OKEwsITEsWS5tc2dCaXRMZW5ndGgpLFU9dGhpcy5rZXlGcm9tUHVibGljKFUsVyk7dmFyIHE9KEs9bmV3IE8oSywiaGV4IikpLnIsZWU9Sy5z''@;'; put 'put ''O2lmKHEuY21wbigxKTwwfHxxLmNtcCh0aGlzLm4pPj0wfHxlZS5jbXBuKDEpPDB8fGVlLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBsZSxKPWVlLmludm0odGhpcy5uKSxuZT1KLm11bChMKS51bW9kKHRoaXMubiksaWU9Si5tdWwocSkudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1''@;'; put 'put ''cnZlLl9tYXh3ZWxsVHJpY2s/IShsZT10aGlzLmcuam11bEFkZChuZSxVLmdldFB1YmxpYygpLGllKSkuaXNJbmZpbml0eSgpJiZsZS5lcVhUb1AocSk6IShsZT10aGlzLmcubXVsQWRkKG5lLFUuZ2V0UHVibGljKCksaWUpKS5pc0luZmluaXR5KCkmJjA9PT1sZS5nZXRYKCkudW1vZCh0aGlz''@;'; put 'put ''Lm4pLmNtcChxKX0sei5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihOLEwsSyxVKXtQKCgzJkspPT09SywiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLEw9bmV3IE8oTCxVKTt2YXIgVz10aGlzLm4sWT1uZXcgSShOKSxxPUwucixlZT1MLnMsSj0x''@;'; put 'put ''JkssbmU9Sz4+MTtpZihxLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmbmUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtxPXRoaXMuY3VydmUucG9pbnRGcm9tWChuZT9xLmFkZCh0aGlzLmN1cnZlLm4pOnEs''@;'; put 'put ''Sik7dmFyIGllPUwuci5pbnZtKFcpLGxlPVcuc3ViKFkpLm11bChpZSkudW1vZChXKSxtZT1lZS5tdWwoaWUpLnVtb2QoVyk7cmV0dXJuIHRoaXMuZy5tdWxBZGQobGUscSxtZSl9LHoucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oTixMLEssVSl7aWYobnVsbCE9PShM''@;'; put 'put ''PW5ldyBPKEwsVSkpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIEwucmVjb3ZlcnlQYXJhbTtmb3IodmFyIFc9MDtXPDQ7VysrKXt2YXIgWTt0cnl7WT10aGlzLnJlY292ZXJQdWJLZXkoTixMLFcpfWNhdGNoe2NvbnRpbnVlfWlmKFkuZXEoSykpcmV0dXJuIFd9dGhyb3cgbmV3IEVycm9yKCJVbmFi''@;'; put 'put ''bGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19LDEyNTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzg1KSxnPXkoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gQih3LFApe3RoaXMuZWM9dyx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLFAucHJpdiYmdGhpcy5f''@;'; put 'put ''aW1wb3J0UHJpdmF0ZShQLnByaXYsUC5wcml2RW5jKSxQLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKFAucHViLFAucHViRW5jKX11ZS5leHBvcnRzPUIsQi5mcm9tUHVibGljPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihQLHtwdWI6RixwdWJFbmM6T30p''@;'; put 'put ''fSxCLmZyb21Qcml2YXRlPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihQLHtwcml2OkYscHJpdkVuYzpPfSl9LEIucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gUC5pc0luZmluaXR5KCk/e3Jl''@;'; put 'put ''c3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9OlAudmFsaWRhdGUoKT9QLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVh''@;'; put 'put ''c29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LEIucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihQLEYpe3JldHVybiJzdHJpbmciPT10eXBlb2YgUCYmKEY9UCxQPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxGP3RoaXMucHVi''@;'; put 'put ''LmVuY29kZShGLFApOnRoaXMucHVifSxCLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKFApe3JldHVybiJoZXgiPT09UD90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxCLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihQLEYpe3RoaXMucHJpdj1uZXcg''@;'; put 'put ''SShQLEZ8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sQi5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbihQLEYpe2lmKFAueHx8UC55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9nKFAueCwiTmVlZCB4IGNvb3JkaW5hdGUi''@;'; put 'put ''KTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUudHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmZyhQLngmJlAueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChQLngsUC55KSk7dGhpcy5wdWI9dGhp''@;'; put 'put ''cy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChQLEYpfSxCLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oUCl7cmV0dXJuIFAudmFsaWRhdGUoKXx8ZyhQLnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksUC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LEIucHJvdG90eXBlLnNp''@;'; put 'put ''Z249ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLmVjLnNpZ24oUCx0aGlzLEYsTyl9LEIucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KFAsRix0aGlzLHZvaWQgMCxPKX0sQi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LDYxMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3ODUpLF89eSg5NTMpLGc9Xy5hc3NlcnQ7ZnVu''@;'; put 'put ''Y3Rpb24gQih6LE4pe2lmKHogaW5zdGFuY2VvZiBCKXJldHVybiB6O3RoaXMuX2ltcG9ydERFUih6LE4pfHwoZyh6LnImJnoucywiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBJKHouciwxNiksdGhpcy5zPW5ldyBJKHoucywxNiksdGhpcy5yZWNvdmVyeVBhcmFtPXZv''@;'; put 'put ''aWQgMD09PXoucmVjb3ZlcnlQYXJhbT9udWxsOnoucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gdygpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBQKHosTil7dmFyIEw9eltOLnBsYWNlKytdO2lmKCEoMTI4JkwpKXJldHVybiBMO3ZhciBLPTE1Jkw7aWYoMD09PUt8fEs+NHx8MD09PXpbTi5wbGFj''@;'; put 'put ''ZV0pcmV0dXJuITE7Zm9yKHZhciBVPTAsVz0wLFk9Ti5wbGFjZTtXPEs7VysrLFkrKylVPDw9OCxVfD16W1ldLFU+Pj49MDtyZXR1cm4hKFU8PTEyNykmJihOLnBsYWNlPVksVSl9ZnVuY3Rpb24gRih6KXtmb3IodmFyIE49MCxMPXoubGVuZ3RoLTE7IXpbTl0mJiEoMTI4JnpbTisxXSkmJk48''@;'; put 'put ''TDspTisrO3JldHVybiAwPT09Tj96Onouc2xpY2UoTil9ZnVuY3Rpb24gTyh6LE4pe2lmKE48MTI4KXoucHVzaChOKTtlbHNle3ZhciBMPTErKE1hdGgubG9nKE4pL01hdGguTE4yPj4+Myk7Zm9yKHoucHVzaCgxMjh8TCk7LS1MOyl6LnB1c2goTj4+PihMPDwzKSYyNTUpO3oucHVzaChOKX19''@;'; put 'put ''dWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oTixMKXtOPV8udG9BcnJheShOLEwpO3ZhciBLPW5ldyB3O2lmKDQ4IT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBVPVAoTixLKTtpZighMT09PVV8fFUrSy5wbGFjZSE9PU4ubGVuZ3RofHwyIT09TltLLnBs''@;'; put 'put ''YWNlKytdKXJldHVybiExO3ZhciBXPVAoTixLKTtpZighMT09PVd8fDEyOCZOW0sucGxhY2VdKXJldHVybiExO3ZhciBZPU4uc2xpY2UoSy5wbGFjZSxXK0sucGxhY2UpO2lmKEsucGxhY2UrPVcsMiE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgcT1QKE4sSyk7aWYoITE9PT1xfHxOLmxl''@;'; put 'put ''bmd0aCE9PXErSy5wbGFjZXx8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIGVlPU4uc2xpY2UoSy5wbGFjZSxxK0sucGxhY2UpO2lmKDA9PT1ZWzBdKXtpZighKDEyOCZZWzFdKSlyZXR1cm4hMTtZPVkuc2xpY2UoMSl9aWYoMD09PWVlWzBdKXtpZighKDEyOCZlZVsxXSkpcmV0dXJuITE7''@;'; put 'put ''ZWU9ZWUuc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1uZXcgSShZKSx0aGlzLnM9bmV3IEkoZWUpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxCLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihOKXt2YXIgTD10aGlzLnIudG9BcnJheSgpLEs9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4Jkxb''@;'; put 'put ''MF0mJihMPVswXS5jb25jYXQoTCkpLDEyOCZLWzBdJiYoSz1bMF0uY29uY2F0KEspKSxMPUYoTCksSz1GKEspOyEoS1swXXx8MTI4JktbMV0pOylLPUsuc2xpY2UoMSk7dmFyIFU9WzJdO08oVSxMLmxlbmd0aCksKFU9VS5jb25jYXQoTCkpLnB1c2goMiksTyhVLEsubGVuZ3RoKTt2YXIgVz1V''@;'; put 'put ''LmNvbmNhdChLKSxZPVs0OF07cmV0dXJuIE8oWSxXLmxlbmd0aCksWT1ZLmNvbmNhdChXKSxfLmVuY29kZShZLE4pfX0sNTk4MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3MTUpLF89eSg1NDI3KSxnPXkoOTUzKSxCPWcuYXNzZXJ0LHc9Zy5wYXJzZUJ5dGVzLFA9eSg5MDg3''@;'; put 'put ''KSxGPXkoMzYyMik7ZnVuY3Rpb24gTyh6KXtpZihCKCJlZDI1NTE5Ij09PXosIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8oeik7dGhpcy5jdXJ2ZT16PV9bel0uY3VydmUsdGhpcy5nPXouZyx0aGlzLmcucHJlY29t''@;'; put 'put ''cHV0ZSh6Lm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPXoucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbCh6Lm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPUkuc2hhNTEyfXVlLmV4cG9ydHM9TyxPLnByb3RvdHlwZS5zaWduPWZ1bmN0''@;'; put 'put ''aW9uKE4sTCl7Tj13KE4pO3ZhciBLPXRoaXMua2V5RnJvbVNlY3JldChMKSxVPXRoaXMuaGFzaEludChLLm1lc3NhZ2VQcmVmaXgoKSxOKSxXPXRoaXMuZy5tdWwoVSksWT10aGlzLmVuY29kZVBvaW50KFcpLHE9dGhpcy5oYXNoSW50KFksSy5wdWJCeXRlcygpLE4pLm11bChLLnByaXYoKSks''@;'; put 'put ''ZWU9VS5hZGQocSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6VyxTOmVlLFJlbmNvZGVkOll9KX0sTy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKE4sTCxLKXtpZihOPXcoTiksKEw9dGhpcy5tYWtlU2lnbmF0dXJlKEwpKS5TKCkuZ3RlKEwuZWRk''@;'; put 'put ''c2EuY3VydmUubil8fEwuUygpLmlzTmVnKCkpcmV0dXJuITE7dmFyIFU9dGhpcy5rZXlGcm9tUHVibGljKEspLFc9dGhpcy5oYXNoSW50KEwuUmVuY29kZWQoKSxVLnB1YkJ5dGVzKCksTiksWT10aGlzLmcubXVsKEwuUygpKTtyZXR1cm4gTC5SKCkuYWRkKFUucHViKCkubXVsKFcpKS5lcShZ''@;'; put 'put ''KX0sTy5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgTj10aGlzLmhhc2goKSxMPTA7TDxhcmd1bWVudHMubGVuZ3RoO0wrKylOLnVwZGF0ZShhcmd1bWVudHNbTF0pO3JldHVybiBnLmludEZyb21MRShOLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LE8ucHJvdG90''@;'; put 'put ''eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oTil7cmV0dXJuIFAuZnJvbVB1YmxpYyh0aGlzLE4pfSxPLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKE4pe3JldHVybiBQLmZyb21TZWNyZXQodGhpcyxOKX0sTy5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihOKXty''@;'; put 'put ''ZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRih0aGlzLE4pfSxPLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTD1OLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIExbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9Ti5nZXRYKCku''@;'; put 'put ''aXNPZGQoKT8xMjg6MCxMfSxPLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTD0oTj1nLnBhcnNlQnl0ZXMoTikpLmxlbmd0aC0xLEs9Ti5zbGljZSgwLEwpLmNvbmNhdCgtMTI5Jk5bTF0pLFU9ISEoMTI4Jk5bTF0pLFc9Zy5pbnRGcm9tTEUoSyk7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y3VydmUucG9pbnRGcm9tWShXLFUpfSxPLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIE4udG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxPLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIGcuaW50RnJvbUxFKE4pfSxPLnByb3Rv''@;'; put 'put ''dHlwZS5pc1BvaW50PWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sOTA4NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MyksXz1JLmFzc2VydCxnPUkucGFyc2VCeXRlcyxCPUkuY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gdyhQLEYp''@;'; put 'put ''e3RoaXMuZWRkc2E9UCx0aGlzLl9zZWNyZXQ9ZyhGLnNlY3JldCksUC5pc1BvaW50KEYucHViKT90aGlzLl9wdWI9Ri5wdWI6dGhpcy5fcHViQnl0ZXM9ZyhGLnB1Yil9dy5mcm9tUHVibGljPWZ1bmN0aW9uKEYsTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiB3P086bmV3IHcoRix7cHViOk99KX0s''@;'; put 'put ''dy5mcm9tU2VjcmV0PWZ1bmN0aW9uKEYsTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiB3P086bmV3IHcoRix7c2VjcmV0Ok99KX0sdy5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sQih3LCJwdWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRz''@;'; put 'put ''YS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLEIodywicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLEIodywicHJpdkJ5dGVzIixmdW5jdGlv''@;'; put 'put ''bigpe3ZhciBGPXRoaXMuZWRkc2EsTz10aGlzLmhhc2goKSx6PUYuZW5jb2RpbmdMZW5ndGgtMSxOPU8uc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gTlswXSY9MjQ4LE5bel0mPTEyNyxOW3pdfD02NCxOfSksQih3LCJwcml2IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNh''@;'; put 'put ''LmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLEIodywiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksQih3LCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGlj''@;'; put 'put ''ZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLHcucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oRil7cmV0dXJuIF8odGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihGLHRoaXMpfSx3LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oRixP''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoRixPLHRoaXMpfSx3LnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oRil7cmV0dXJuIF8odGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5IiksSS5lbmNvZGUodGhpcy5zZWNyZXQoKSxGKX0sdy5wcm90b3R5cGUuZ2V0UHVi''@;'; put 'put ''bGljPWZ1bmN0aW9uKEYpe3JldHVybiBJLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksRil9LHVlLmV4cG9ydHM9d30sMzYyMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3ODUpLF89eSg5NTMpLGc9Xy5hc3NlcnQsQj1fLmNhY2hlZFByb3BlcnR5LHc9Xy5wYXJzZUJ5dGVzO2Z1''@;'; put 'put ''bmN0aW9uIFAoRixPKXt0aGlzLmVkZHNhPUYsIm9iamVjdCIhPXR5cGVvZiBPJiYoTz13KE8pKSxBcnJheS5pc0FycmF5KE8pJiYoZyhPLmxlbmd0aD09PTIqRi5lbmNvZGluZ0xlbmd0aCwiU2lnbmF0dXJlIGhhcyBpbnZhbGlkIHNpemUiKSxPPXtSOk8uc2xpY2UoMCxGLmVuY29kaW5nTGVu''@;'; put 'put ''Z3RoKSxTOk8uc2xpY2UoRi5lbmNvZGluZ0xlbmd0aCl9KSxnKE8uUiYmTy5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxGLmlzUG9pbnQoTy5SKSYmKHRoaXMuX1I9Ty5SKSxPLlMgaW5zdGFuY2VvZiBJJiYodGhpcy5fUz1PLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXko''@;'; put 'put ''Ty5SKT9PLlI6Ty5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KE8uUyk/Ty5TOk8uU2VuY29kZWR9QihQLCJTIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksQihQLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxCKFAsIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLEIoUCwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMu''@;'; put 'put ''UygpKX0pLFAucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxQLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBfLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2Uo''@;'; put 'put ''KX0sdWUuZXhwb3J0cz1QfSwxMDM3OnVlPT57dWUuZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAx''@;'; put 'put ''Mjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSJdLFsiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZj''@;'; put 'put ''YWYiXSxbIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBkNDQ3YjAwYzljOTljZWFj''@;'; put 'put ''MDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwIiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5Il0sWyI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3''@;'; put 'put ''OWE1NWRmZmRmODBjIiwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIsIjk2ZTg2N2I1NTk1Y2M0''@;'; put 'put ''OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcx''@;'; put 'put ''MWY3MTJkZGZkNGZkYWUxZGU4OTk5Il0sWyIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSJdLFsiZTEw''@;'; put 'put ''MzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2Vj''@;'; put 'put ''NWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmQiLCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2''@;'; put 'put ''Y2IxIiwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNj''@;'; put 'put ''YWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgiXSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDciLCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEw''@;'; put 'put ''MDQ3ZTg0NjAzNzJhIl0sWyIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJdLFsiNmY5ZDliODAzZWNm''@;'; put 'put ''MTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2Ri''@;'; put 'put ''MGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCIsIjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODMiLCI3YzQ4''@;'; put 'put ''MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZk''@;'; put 'put ''NGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5Il0sWyI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUx''@;'; put 'put ''NyJdLFsiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1''@;'; put 'put ''ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjUiLCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkIl0sWyIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFk''@;'; put 'put ''NjkwOGQwNTU5NzU0IiwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIsIjE3NzQ5Yzc2NmM5ZDBi''@;'; put 'put ''MThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTcz''@;'; put 'put ''ZjdiNzc3MDFkM2RiN2YyM2NiOTZmIl0sWyI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSJdLFsiYzcz''@;'; put 'put ''OGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3''@;'; put 'put ''ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGIiLCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2''@;'; put 'put ''ZTAzIiwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4''@;'; put 'put ''Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgiXSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAiLCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBk''@;'; put 'put ''MWEwNDFlMTc3ZWExIl0sWyI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0sWyI4ZjY4YjlkMmY2M2I1''@;'; put 'put ''ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAz''@;'; put 'put ''NjgxZTNlNjY4NmZkNTA1MzIzMWUxMSIsIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWUiLCJlZmE0''@;'; put 'put ''NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThk''@;'; put 'put ''MGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSJdLFsiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0''@;'; put 'put ''NSJdLFsiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3''@;'; put 'put ''MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWQiLCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0Il0sWyI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThi''@;'; put 'put ''ZDM3M2ZkMDU0Yzk2IiwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQiXSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJkZGI4NGYwZjRhNGRkZDU3''@;'; put 'put ''NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0''@;'; put 'put ''YzY1ZTg5OWJlOTMyMzg1YTJhOCJdLFsiYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgiXSxbIjc3Nzhh''@;'; put 'put ''NzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVm''@;'; put 'put ''OTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWMiLCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUx''@;'; put 'put ''IiwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0''@;'; put 'put ''ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDciXSxbIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEiLCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4''@;'; put 'put ''YmFlYzI5M2VjIl0sWyJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzIiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsiZTRhNDJkNDNjNWNmMTY5''@;'; put 'put ''ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhm''@;'; put 'put ''ZWE0OTQ3MTczYjlkNDMwMGJmMTkiLCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlIiwiYjMxOGUw''@;'; put 'put ''ZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2''@;'; put 'put ''ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEiXSxbImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYx''@;'; put 'put ''Il0sWyJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjljOWEyODU4NzJkMzllNTZl''@;'; put 'put ''NjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3YyIsImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMiXSxbIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZk''@;'; put 'put ''ZmYwOTQ3NWI3YmEiLCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkIl0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwiZTgyZDg2ZmI2NDQzZmNi''@;'; put 'put ''NzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNh''@;'; put 'put ''ZWFiMzU4Mjk5ZTVlOWZhZjY1ODkiXSxbIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlIl0sWyIxMzQ2''@;'; put 'put ''NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2Ew''@;'; put 'put ''Y2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NiIsImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNh''@;'; put 'put ''YSIsIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2Zi''@;'; put 'put ''OTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUiXSxbImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODciLCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQw''@;'; put 'put ''MGM2NDRhNTczIl0sWyJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlIiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0sbmFmOnt3bmQ6Nyxwb2lu''@;'; put 'put ''dHM6W1siZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcy''@;'; put 'put ''NTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQiLCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2Il0sWyI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJi''@;'; put 'put ''ZGRlZGNhYzRmOWJjIiwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIsImNjMzM4OTIxYjBhN2Q5''@;'; put 'put ''ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZm''@;'; put 'put ''OWQ2YTgzMDFkNzRjOWM5NTNjNjFiIl0sWyJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxIl0sWyJkNzky''@;'; put 'put ''NGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFl''@;'; put 'put ''Yjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCIsIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODVi''@;'; put 'put ''NmMiLCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1''@;'; put 'put ''OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4YyJdLFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZiIsIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3''@;'; put 'put ''NmI1MzJiN2Q2NyJdLFsiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxbImRhZWQ0ZjJiZTNhOGJm''@;'; put 'put ''Mjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRm''@;'; put 'put ''MjgxYjBlNmEzYjVlODdkMjJlN2RiIiwiMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCIsImUwMjJj''@;'; put 'put ''ZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2Ey''@;'; put 'put ''Y2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2Il0sWyI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5''@;'; put 'put ''Il0sWyI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2''@;'; put 'put ''YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZiIsIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EiXSxbIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVh''@;'; put 'put ''YmIwZmEwM2M4ZmIiLCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjciXSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJlZWNmNDEyNTMxMzZlNWY5''@;'; put 'put ''OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3''@;'; put 'put ''NjRiNjUzMDUyYTEyOTQ5YzlhIl0sWyI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNiJdLFsiZjJkYWM5''@;'; put 'put ''OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEy''@;'; put 'put ''MTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWIiLCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3''@;'; put 'put ''IiwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1''@;'; put 'put ''ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzYiXSxbIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAiLCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0''@;'; put 'put ''NzVhN2U0YjQwIl0sWyI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3NTRlMzIzOWYzMjU1NzBj''@;'; put 'put ''ZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzIl0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1''@;'; put 'put ''MmY5ZmUyNjk0NjkxZDliOWU4IiwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYiIsIjNiOTUyZDMy''@;'; put 'put ''YzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcy''@;'; put 'put ''MjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3Il0sWyI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OCJd''@;'; put 'put ''LFsiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmEx''@;'; put 'put ''NTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUiLCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2Il0sWyI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1''@;'; put 'put ''MGQ4ODQyNDlhIiwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJdLFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1MzRhZDQ0MTc1ZmJjMzAw''@;'; put 'put ''ZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMy''@;'; put 'put ''NTcwNzc4NDE5YmRhZjU3MzNkIl0sWyI3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMiJdLFsiOTQ4ZGNh''@;'; put 'put ''ZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIy''@;'; put 'put ''MjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWIiLCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2Nh''@;'; put 'put ''IiwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThm''@;'; put 'put ''OTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTQiXSxbIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAiLCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJh''@;'; put 'put ''NDA0MDc4NTc1Il0sWyI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsiMTVkOTQ0MTI1NDk0NTA2''@;'; put 'put ''NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJi''@;'; put 'put ''OGFhYWFjMTM4NTk5ZDA3MTc5NDAiLCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwIiwiYTg1NWJh''@;'; put 'put ''YmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFl''@;'; put 'put ''YzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NCJdLFsiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZSJd''@;'; put 'put ''LFsiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhm''@;'; put 'put ''NDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgiLCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiIl0sWyIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMw''@;'; put 'put ''OTFhYTgyNGJmIiwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJdLFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhlYzBiYTIzOGI5NmJlYzBj''@;'; put 'put ''YmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRl''@;'; put 'put ''MjVlYmFhYzQ3OWVjMWM4YzFlIl0sWyIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZCJdLFsiZWFhNWY5''@;'; put 'put ''ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFl''@;'; put 'put ''MDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MSIsImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUi''@;'; put 'put ''LCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3''@;'; put 'put ''MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YiJdLFsiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NyIsIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1''@;'; put 'put ''OGZhOTkxMyJdLFsiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIsIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5NWJiMzk5YTY5NzFkMzc2''@;'; put 'put ''MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUiXSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4''@;'; put 'put ''YmY5OTQ3MWJjYTBlZjJmNjYiLCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYiLCJlYWQxMjE2ODU5''@;'; put 'put ''NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5''@;'; put 'put ''YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZSJdLFsiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNiJdLFsi''@;'; put 'put ''ODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZk''@;'; put 'put ''NDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEiLCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxbImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlm''@;'; put 'put ''Y2UyNTIiLCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2''@;'; put 'put ''ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjIl0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiIiwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNk''@;'; put 'put ''ZWM0MTdhZmVhOGZhMyJdLFsiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQiXSxbImFmOGFkZGJmMmI2''@;'; put 'put ''NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJj''@;'; put 'put ''ZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OSIsIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYiLCJiMGVh''@;'; put 'put ''NTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0''@;'; put 'put ''ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNCJdLFsiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQy''@;'; put 'put ''NTciXSxbImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3''@;'; put 'put ''YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NiJdLFsiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2''@;'; put 'put ''ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIsIjIxYWU3ZjQ2ODBlODg5''@;'; put 'put ''YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3''@;'; put 'put ''MGNiMTI2ODlmZjFlMzFjNzQ0NDgiXSxbImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhIl0sWyJjNDA3''@;'; put 'put ''NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgz''@;'; put 'put ''MzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMiIsIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVk''@;'; put 'put ''ZWEiLCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2Fl''@;'; put 'put ''MmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZCJdLFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NiIsIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4''@;'; put 'put ''YWMwNzIwMDY4MmEiXSxbImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0sWyI0ODQ1NzUyNDgyMGZh''@;'; put 'put ''NjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkx''@;'; put 'put ''NTI5MjNmMzY3YTE3NjdjMTFjY2VkYSIsImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTkiLCJjZDQ1''@;'; put 'put ''MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0''@;'; put 'put ''ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNSJdLFsiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIy''@;'; put 'put ''M2UiXSxbIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhm''@;'; put 'put ''MDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhIiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMiJdLFsiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkz''@;'; put 'put ''MmU1ZGIzM2FmM2Q4MCIsIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQiLCI0MzgxMzZkNjAzZTg1''@;'; put 'put ''OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1''@;'; put 'put ''MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCJdLFsiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NSJdLFsiZTYy''@;'; put 'put ''Zjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5''@;'; put 'put ''MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMiLCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3''@;'; put 'put ''YTAwIiwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2''@;'; put 'put ''ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzYyJdLFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNyIsImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFh''@;'; put 'put ''YmNiMDA1Y2M0YTQiXSxbIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0sWyI0MTYyZDQ4OGI4OTQw''@;'; put 'put ''MjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVj''@;'; put 'put ''M2U1MDY4NGYzYmE0YTRiZjVmNjgzZCIsImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YiIsIjI5OWQy''@;'; put 'put ''MWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3Nzgy''@;'; put 'put ''ZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3Il0sWyIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3''@;'; put 'put ''YiJdLFsiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZi''@;'; put 'put ''OWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEiLCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjIl0sWyJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2''@;'; put 'put ''NDE4YzE1N2IxMTJjIiwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIsIjRjYjA0NDM3ZjM5MWVk''@;'; put 'put ''NzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYw''@;'; put 'put ''YWNhNjE0YjEwZGMxNGQxMjVhYzQ2Il0sWyI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZiJdLFsiNzk4''@;'; put 'put ''NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5''@;'; put 'put ''OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTkiLCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2''@;'; put 'put ''ZGEzIiwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4''@;'; put 'put ''MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3MyJdLFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NiIsImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4''@;'; put 'put ''MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0sWyI4MDlhMjBjNjdkNjQ5''@;'; put 'put ''MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2Yy''@;'; put 'put ''OWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCIsIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjkiXV19fX0sOTUzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPVgsXz15KDM3ODUpLGc9eSg5NzQ2KSxCPXkoNDUwNCk7SS5h''@;'; put 'put ''c3NlcnQ9ZyxJLnRvQXJyYXk9Qi50b0FycmF5LEkuemVybzI9Qi56ZXJvMixJLnRvSGV4PUIudG9IZXgsSS5lbmNvZGU9Qi5lbmNvZGUsSS5nZXROQUY9ZnVuY3Rpb24gdyhOLEwsSyl7dmFyIFcsVT1uZXcgQXJyYXkoTWF0aC5tYXgoTi5iaXRMZW5ndGgoKSxLKSsxKTtmb3IoVz0wO1c8VS5s''@;'; put 'put ''ZW5ndGg7Vys9MSlVW1ddPTA7dmFyIFk9MTw8TCsxLHE9Ti5jbG9uZSgpO2ZvcihXPTA7VzxVLmxlbmd0aDtXKyspe3ZhciBlZSxKPXEuYW5kbG4oWS0xKTtxLmlzT2RkKCk/cS5pc3VibihlZT1KPihZPj4xKS0xPyhZPj4xKS1KOkopOmVlPTAsVVtXXT1lZSxxLml1c2hybigxKX1yZXR1cm4g''@;'; put 'put ''VX0sSS5nZXRKU0Y9ZnVuY3Rpb24gUChOLEwpe3ZhciBLPVtbXSxbXV07Tj1OLmNsb25lKCksTD1MLmNsb25lKCk7Zm9yKHZhciBZLFU9MCxXPTA7Ti5jbXBuKC1VKT4wfHxMLmNtcG4oLVcpPjA7KXt2YXIgSixuZSxxPU4uYW5kbG4oMykrVSYzLGVlPUwuYW5kbG4oMykrVyYzOzM9PT1xJiYo''@;'; put 'put ''cT0tMSksMz09PWVlJiYoZWU9LTEpLEo9MSZxPzMhPShZPU4uYW5kbG4oNykrVSY3KSYmNSE9PVl8fDIhPT1lZT9xOi1xOjAsS1swXS5wdXNoKEopLG5lPTEmZWU/MyE9KFk9TC5hbmRsbig3KStXJjcpJiY1IT09WXx8MiE9PXE/ZWU6LWVlOjAsS1sxXS5wdXNoKG5lKSwyKlU9PT1KKzEmJihV''@;'; put 'put ''PTEtVSksMipXPT09bmUrMSYmKFc9MS1XKSxOLml1c2hybigxKSxMLml1c2hybigxKX1yZXR1cm4gS30sSS5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBGKE4sTCxLKXt2YXIgVT0iXyIrTDtOLnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW1VdP3RoaXNbVV06''@;'; put 'put ''dGhpc1tVXT1LLmNhbGwodGhpcyl9fSxJLnBhcnNlQnl0ZXM9ZnVuY3Rpb24gTyhOKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE4/SS50b0FycmF5KE4sImhleCIpOk59LEkuaW50RnJvbUxFPWZ1bmN0aW9uIHooTil7cmV0dXJuIG5ldyBfKE4sImhleCIsImxlIil9fSwzNzg1OmZ1bmN0aW9u''@;'; put 'put ''KHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5''@;'; put 'put ''cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09''@;'; put 'put ''PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVm''@;'; put 'put ''ZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNTU2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7''@;'; put 'put ''cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9''@;'; put 'put ''cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0''@;'; put 'put ''dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5n''@;'; put 'put ''dGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRo''@;'; put 'put ''aXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRo''@;'; put 'put ''aXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0y''@;'; put 'put ''NCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49''@;'; put 'put ''MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlz''@;'; put 'put ''Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7''@;'; put 'put ''ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFy''@;'; put 'put ''c2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMp''@;'; put 'put ''bT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhp''@;'; put 'put ''cy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRz''@;'; put 'put ''W2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4''@;'; put 'put ''cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxl''@;'; put 'put ''bmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgs''@;'; put 'put ''Nyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcs''@;'; put 'put ''NzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5''@;'; put 'put ''Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypU''@;'; put 'put ''LEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9''@;'; put 'put ''MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlv''@;'; put 'put ''bihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3''@;'; put 'put ''NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSIt''@;'; put 'put ''Iit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJv''@;'; put 'put ''KCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90''@;'; put 'put ''b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53''@;'; put 'put ''b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBl''@;'; put 'put ''LnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtl''@;'; put 'put ''PWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxt''@;'; put 'put ''LEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlz''@;'; put 'put ''WmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00''@;'; put 'put ''MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZi''@;'; put 'put ''fHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5n''@;'; put 'put ''dGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7''@;'; put 'put ''aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5h''@;'; put 'put ''YnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5''@;'; put 'put ''cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9y''@;'; put 'put ''KHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3Ro''@;'; put 'put ''P3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdh''@;'; put 'put ''dGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0w''@;'; put 'put ''O0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4''@;'; put 'put ''b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFy''@;'; put 'put ''IGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2''@;'; put 'put ''LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJl''@;'; put 'put ''dHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2ln''@;'; put 'put ''bigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4''@;'; put 'put ''Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5n''@;'; put 'put ''dGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6''@;'; put 'put ''MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9''@;'; put 'put ''ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5n''@;'; put 'put ''dGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8''@;'; put 'put ''Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdl''@;'; put 'put ''Pj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEz''@;'; put 'put ''LHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0w''@;'; put 'put ''fFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzdd''@;'; put 'put ''LHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDAp''@;'; put 'put ''KygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01h''@;'; put 'put ''dGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkr''@;'; put 'put ''KG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNl''@;'; put 'put ''LGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''eGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxt''@;'; put 'put ''PShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUs''@;'; put 'put ''QXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygo''@;'; put 'put ''ODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0''@;'; put 'put ''KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUs''@;'; put 'put ''VHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''eGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxt''@;'; put 'put ''PShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUs''@;'; put 'put ''QXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNl''@;'; put 'put ''LGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''aXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkr''@;'; put 'put ''KG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXww''@;'; put 'put ''KStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''RGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChV''@;'; put 'put ''ZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9''@;'; put 'put ''TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxj''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''TXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxy''@;'; put 'put ''bil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEm''@;'; put 'put ''KG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01h''@;'; put 'put ''dGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxj''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''TXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChr''@;'; put 'put ''ZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9''@;'; put 'put ''TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkr''@;'; put 'put ''KG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXww''@;'; put 'put ''KStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10''@;'; put 'put ''LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygo''@;'; put 'put ''ODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5''@;'; put 'put ''MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1''@;'; put 'put ''XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAs''@;'; put 'put ''Yil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0''@;'; put 'put ''aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtU''@;'; put 'put ''Kyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYo''@;'; put 'put ''d2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9''@;'; put 'put ''LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4''@;'; put 'put ''KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09''@;'; put 'put ''eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxh''@;'; put 'put ''ZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1K''@;'; put 'put ''ZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7''@;'; put 'put ''eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1D''@;'; put 'put ''LTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQv''@;'; put 'put ''NjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09''@;'; put 'put ''MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2Io''@;'; put 'put ''cC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9''@;'; put 'put ''Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBV''@;'; put 'put ''ZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUx''@;'; put 'put ''M2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3Au''@;'; put 'put ''bGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcx''@;'; put 'put ''MDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2''@;'; put 'put ''YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9y''@;'; put 'put ''KHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1''@;'; put 'put ''bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tU''@;'; put 'put ''XT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndv''@;'; put 'put ''cmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUu''@;'; put 'put ''d29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0x''@;'; put 'put ''O3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxl''@;'; put 'put ''bmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJu''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYx''@;'; put 'put ''PDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxl''@;'; put 'put ''bmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRo''@;'; put 'put ''aXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0''@;'; put 'put ''aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0''@;'; put 'put ''aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJu''@;'; put 'put ''IHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9''@;'; put 'put ''MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJv''@;'; put 'put ''dG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEw''@;'; put 'put ''ODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlw''@;'; put 'put ''KCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9u''@;'; put 'put ''KHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYo''@;'; put 'put ''Im1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFl''@;'; put 'put ''LG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQs''@;'; put 'put ''c2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVz''@;'; put 'put ''aHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10''@;'; put 'put ''aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2''@;'; put 'put ''bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQu''@;'; put 'put ''aXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51''@;'; put 'put ''bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5''@;'; put 'put ''cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4g''@;'; put 'put ''SDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0Mt''@;'; put 'put ''LSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndv''@;'; put 'put ''cmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIg''@;'; put 'put ''Yj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtm''@;'; put 'put ''b3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRk''@;'; put 'put ''KG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGou''@;'; put 'put ''aXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5j''@;'; put 'put ''dGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBu''@;'; put 'put ''KDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8''@;'; put 'put ''PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYm''@;'; put 'put ''YWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtm''@;'; put 'put ''b3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9''@;'; put 'put ''SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEo''@;'; put 'put ''MSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53''@;'; put 'put ''b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndv''@;'; put 'put ''cmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCks''@;'; put 'put ''ZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAu''@;'; put 'put ''bmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVu''@;'; put 'put ''Z3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4g''@;'; put 'put ''Yn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJv''@;'; put 'put ''dG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRl''@;'; put 'put ''bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0''@;'; put 'put ''aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51''@;'; put 'put ''bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5''@;'; put 'put ''cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''LnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5z''@;'; put 'put ''cXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJ''@;'; put 'put ''bnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks''@;'; put 'put ''dGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxw''@;'; put 'put ''KX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0''@;'; put 'put ''aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywi''@;'; put 'put ''cDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1''@;'; put 'put ''bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMu''@;'; put 'put ''bT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0''@;'; put 'put ''JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhp''@;'; put 'put ''cy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1h''@;'; put 'put ''dGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9''@;'; put 'put ''eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNo''@;'; put 'put ''cm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKysp''@;'; put 'put ''Yi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jk''@;'; put 'put ''c1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsx''@;'; put 'put ''XT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSww''@;'; put 'put ''PT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYz''@;'; put 'put ''JkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3''@;'; put 'put ''IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2''@;'; put 'put ''ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBv''@;'; put 'put ''c2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhp''@;'; put 'put ''cy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4''@;'; put 'put ''PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4Lmlz''@;'; put 'put ''dWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7''@;'; put 'put ''dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5p''@;'; put 'put ''bXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0u''@;'; put 'put ''YW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFD''@;'; put 'put ''LmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRk''@;'; put 'put ''KGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3Zh''@;'; put 'put ''ciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJu''@;'; put 'put ''IDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBw''@;'; put 'put ''LmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09''@;'; put 'put ''MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRo''@;'; put 'put ''aXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3Zh''@;'; put 'put ''ciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5''@;'; put 'put ''cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVu''@;'; put 'put ''Z3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMu''@;'; put 'put ''bSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFz''@;'; put 'put ''a24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMu''@;'; put 'put ''bSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDQ0Mjk6dWU9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IFg9T2JqZWN0LmRlZmluZVByb3BlcnR5fHwhMTtpZihYKXRyeXtYKHt9LCJhIix7dmFsdWU6MX0pfWNhdGNoe1g9ITF9dWUuZXhwb3J0cz1YfSwzOTgxOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9RXZhbEVycm9yfSwxNjQ4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9RXJy''@;'; put 'put ''b3J9LDQ3MjY6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1SYW5nZUVycm9yfSw2NzEyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9UmVmZXJlbmNlRXJyb3J9LDM0NjQ6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1TeW50YXhFcnJvcn0sNDQ1Mzp1ZT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt1ZS5leHBvcnRzPVR5cGVFcnJvcn0sMzkxNTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVVSSUVycm9yfSw4ODkyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9T2JqZWN0fSw3MTg3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBCLEk9eSg1MTA4KSxfPSJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsZz1fJiYiZnVuY3Rpb24iPT10eXBlb2YgXy5hcHBseT9fLmFwcGx5OmZ1bmN0aW9uKF9lLFRlLFNlKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoX2UsVGUsU2UpfTtCPV8mJiJmdW5jdGlvbiI9PXR5cGVvZiBf''@;'; put 'put ''Lm93bktleXM/Xy5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oX2Upe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoX2UpKX06ZnVuY3Rpb24oX2Upe3JldHVybiBPYmpl''@;'; put 'put ''Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfZSl9O3ZhciBQPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oX2Upe3JldHVybiBfZSE9X2V9O2Z1bmN0aW9uIEYoKXtGLmluaXQuY2FsbCh0aGlzKX11ZS5leHBvcnRzPUYsdWUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIG5lKG1lLF9lKXtyZXR1cm4gbmV3''@;'; put 'put ''IFByb21pc2UoZnVuY3Rpb24oVGUsU2Upe2Z1bmN0aW9uIGplKHApe21lLnJlbW92ZUxpc3RlbmVyKF9lLFYpLFNlKHApfWZ1bmN0aW9uIFYoKXsiZnVuY3Rpb24iPT10eXBlb2YgbWUucmVtb3ZlTGlzdGVuZXImJm1lLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsamUpLFRlKFtdLnNsaWNlLmNh''@;'; put 'put ''bGwoYXJndW1lbnRzKSl9bGUobWUsX2UsVix7b25jZTohMH0pLCJlcnJvciIhPT1fZSYmZnVuY3Rpb24gaWUobWUsX2UsVGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBtZS5vbiYmbGUobWUsImVycm9yIixfZSxUZSl9KG1lLGplLHtvbmNlOiEwfSl9KX0sRi5FdmVudEVtaXR0ZXI9RixGLnByb3Rv''@;'; put 'put ''dHlwZS5fZXZlbnRzPXZvaWQgMCxGLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxGLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgTz0xMDtmdW5jdGlvbiB6KG1lKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJsaXN0ZW5lciIg''@;'; put 'put ''YXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIG1lKX1mdW5jdGlvbiBOKG1lKXtyZXR1cm4gdm9pZCAwPT09bWUuX21heExpc3RlbmVycz9GLmRlZmF1bHRNYXhMaXN0ZW5lcnM6bWUuX21heExpc3RlbmVyc31mdW5jdGlvbiBMKG1lLF9l''@;'; put 'put ''LFRlLFNlKXt2YXIgamUsVixwO2lmKHooVGUpLHZvaWQgMD09PShWPW1lLl9ldmVudHMpPyhWPW1lLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxtZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PVYubmV3TGlzdGVuZXImJihtZS5lbWl0KCJuZXdMaXN0ZW5lciIsX2UsVGUubGlzdGVu''@;'; put 'put ''ZXI/VGUubGlzdGVuZXI6VGUpLFY9bWUuX2V2ZW50cykscD1WW19lXSksdm9pZCAwPT09cClwPVZbX2VdPVRlLCsrbWUuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHA/cD1WW19lXT1TZT9bVGUscF06W3AsVGVdOlNlP3AudW5zaGlmdChUZSk6cC5wdXNoKFRlKSwo''@;'; put 'put ''amU9TihtZSkpPjAmJnAubGVuZ3RoPmplJiYhcC53YXJuZWQpe3Aud2FybmVkPSEwO3ZhciBiPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK3AubGVuZ3RoKyIgIitTdHJpbmcoX2UpKyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRl''@;'; put 'put ''ci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO2IubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixiLmVtaXR0ZXI9bWUsYi50eXBlPV9lLGIuY291bnQ9cC5sZW5ndGgsZnVuY3Rpb24gdyhtZSl7SSYmSS53YXJuJiZJLndhcm4obWUpfShiKX1yZXR1cm4g''@;'; put 'put ''bWV9ZnVuY3Rpb24gSygpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3Rl''@;'; put 'put ''bmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gVShtZSxfZSxUZSl7dmFyIFNlPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDptZSx0eXBlOl9lLGxpc3RlbmVyOlRlfSxqZT1LLmJpbmQoU2UpO3JldHVybiBqZS5saXN0ZW5lcj1UZSxTZS53cmFwRm49amUs''@;'; put 'put ''amV9ZnVuY3Rpb24gVyhtZSxfZSxUZSl7dmFyIFNlPW1lLl9ldmVudHM7aWYodm9pZCAwPT09U2UpcmV0dXJuW107dmFyIGplPVNlW19lXTtyZXR1cm4gdm9pZCAwPT09amU/W106ImZ1bmN0aW9uIj09dHlwZW9mIGplP1RlP1tqZS5saXN0ZW5lcnx8amVdOltqZV06VGU/ZnVuY3Rpb24gSiht''@;'; put 'put ''ZSl7Zm9yKHZhciBfZT1uZXcgQXJyYXkobWUubGVuZ3RoKSxUZT0wO1RlPF9lLmxlbmd0aDsrK1RlKV9lW1RlXT1tZVtUZV0ubGlzdGVuZXJ8fG1lW1RlXTtyZXR1cm4gX2V9KGplKTpxKGplLGplLmxlbmd0aCl9ZnVuY3Rpb24gWShtZSl7dmFyIF9lPXRoaXMuX2V2ZW50cztpZih2b2lkIDAh''@;'; put 'put ''PT1fZSl7dmFyIFRlPV9lW21lXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVGUpcmV0dXJuIDE7aWYodm9pZCAwIT09VGUpcmV0dXJuIFRlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBxKG1lLF9lKXtmb3IodmFyIFRlPW5ldyBBcnJheShfZSksU2U9MDtTZTxfZTsrK1NlKVRlW1NlXT1tZVtT''@;'; put 'put ''ZV07cmV0dXJuIFRlfWZ1bmN0aW9uIGxlKG1lLF9lLFRlLFNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbWUub24pU2Uub25jZT9tZS5vbmNlKF9lLFRlKTptZS5vbihfZSxUZSk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbWUuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbWUpO21lLmFkZEV2ZW50TGlzdGVuZXIoX2UsZnVuY3Rpb24gamUoVil7U2Uub25jZSYmbWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihfZSxqZSksVGUo''@;'; put 'put ''Vil9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBPfSxzZXQ6ZnVuY3Rpb24obWUpe2lmKCJudW1iZXIiIT10eXBlb2YgbWV8fG1lPDB8fFAobWUpKXRocm93IG5ldyBSYW5nZUVycm9y''@;'; put 'put ''KCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrbWUrIi4iKTtPPW1lfX0pLEYuaW5pdD1mdW5jdGlvbigpeyh2b2lkIDA9PT10aGlzLl9ldmVudHN8fHRoaXMuX2V2''@;'; put 'put ''ZW50cz09PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSYmKHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sRi5wcm90b3R5cGUuc2V0TWF4''@;'; put 'put ''TGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXtpZigibnVtYmVyIiE9dHlwZW9mIF9lfHxfZTwwfHxQKF9lKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK19lKyIu''@;'; put 'put ''Iik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1fZSx0aGlzfSxGLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gTih0aGlzKX0sRi5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihfZSl7Zm9yKHZhciBUZT1bXSxTZT0xO1NlPGFyZ3VtZW50cy5sZW5ndGg7U2Ur''@;'; put 'put ''KylUZS5wdXNoKGFyZ3VtZW50c1tTZV0pO3ZhciBqZT0iZXJyb3IiPT09X2UsVj10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09VilqZT1qZSYmdm9pZCAwPT09Vi5lcnJvcjtlbHNlIGlmKCFqZSlyZXR1cm4hMTtpZihqZSl7dmFyIHA7aWYoVGUubGVuZ3RoPjAmJihwPVRlWzBdKSxwIGluc3Rh''@;'; put 'put ''bmNlb2YgRXJyb3IpdGhyb3cgcDt2YXIgYj1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhwPyIgKCIrcC5tZXNzYWdlKyIpIjoiIikpO3Rocm93IGIuY29udGV4dD1wLGJ9dmFyIHg9VltfZV07aWYodm9pZCAwPT09eClyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgeClnKHgs''@;'; put 'put ''dGhpcyxUZSk7ZWxzZXt2YXIgQz14Lmxlbmd0aCxUPXEoeCxDKTtmb3IoU2U9MDtTZTxDOysrU2UpZyhUW1NlXSx0aGlzLFRlKX1yZXR1cm4hMH0sRi5wcm90b3R5cGUub249Ri5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiBMKHRoaXMsX2UsVGUsITEpfSxG''@;'; put 'put ''LnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiBMKHRoaXMsX2UsVGUsITApfSxGLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKF9lLFRlKXtyZXR1cm4geihUZSksdGhpcy5vbihfZSxVKHRoaXMsX2UsVGUpKSx0aGlzfSxGLnByb3RvdHlwZS5wcmVwZW5k''@;'; put 'put ''T25jZUxpc3RlbmVyPWZ1bmN0aW9uKF9lLFRlKXtyZXR1cm4geihUZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoX2UsVSh0aGlzLF9lLFRlKSksdGhpc30sRi5wcm90b3R5cGUub2ZmPUYucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKF9lLFRlKXt2YXIgU2UsamUsVixwLGI7aWYo''@;'; put 'put ''eihUZSksdm9pZCAwPT09KGplPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KFNlPWplW19lXSkpcmV0dXJuIHRoaXM7aWYoU2U9PT1UZXx8U2UubGlzdGVuZXI9PT1UZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwp''@;'; put 'put ''OihkZWxldGUgamVbX2VdLGplLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixfZSxTZS5saXN0ZW5lcnx8VGUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBTZSl7Zm9yKFY9LTEscD1TZS5sZW5ndGgtMTtwPj0wO3AtLSlpZihTZVtwXT09PVRlfHxTZVtw''@;'; put 'put ''XS5saXN0ZW5lcj09PVRlKXtiPVNlW3BdLmxpc3RlbmVyLFY9cDticmVha31pZihWPDApcmV0dXJuIHRoaXM7MD09PVY/U2Uuc2hpZnQoKTpmdW5jdGlvbiBlZShtZSxfZSl7Zm9yKDtfZSsxPG1lLmxlbmd0aDtfZSsrKW1lW19lXT1tZVtfZSsxXTttZS5wb3AoKX0oU2UsViksMT09PVNlLmxl''@;'; put 'put ''bmd0aCYmKGplW19lXT1TZVswXSksdm9pZCAwIT09amUucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLF9lLGJ8fFRlKX1yZXR1cm4gdGhpc30sRi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXt2YXIgVGUsU2UsamU7aWYodm9pZCAw''@;'; put 'put ''PT09KFNlPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09U2UucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1TZVtfZV0mJigw''@;'; put 'put ''PT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0ZSBTZVtfZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBwLFY9T2JqZWN0LmtleXMoU2UpO2ZvcihqZT0wO2plPFYubGVuZ3RoOysramUpInJlbW92ZUxpc3RlbmVy''@;'; put 'put ''IiE9PShwPVZbamVdKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMocCk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YoVGU9U2VbX2VdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKF9lLFRlKTtlbHNlIGlmKHZvaWQgMCE9PVRlKWZvcihqZT1UZS5sZW5ndGgtMTtqZT49MDtqZS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoX2UsVGVbamVdKTtyZXR1cm4gdGhpc30sRi5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0''@;'; put 'put ''aW9uKF9lKXtyZXR1cm4gVyh0aGlzLF9lLCEwKX0sRi5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXtyZXR1cm4gVyh0aGlzLF9lLCExKX0sRi5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKG1lLF9lKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbWUubGlzdGVuZXJDb3VudD9t''@;'; put 'put ''ZS5saXN0ZW5lckNvdW50KF9lKTpZLmNhbGwobWUsX2UpfSxGLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PVksRi5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP0IodGhpcy5fZXZlbnRzKTpbXX19LDMwNDg6KHVlLFgseSk9Pnt2YXIg''@;'; put 'put ''ST15KDk1MDkpLkJ1ZmZlcixfPXkoMjMxOCk7dWUuZXhwb3J0cz1mdW5jdGlvbiBnKEIsdyxQLEYpe2lmKEkuaXNCdWZmZXIoQil8fChCPUkuZnJvbShCLCJiaW5hcnkiKSksdyYmKEkuaXNCdWZmZXIodyl8fCh3PUkuZnJvbSh3LCJiaW5hcnkiKSksOCE9PXcubGVuZ3RoKSl0aHJvdyBuZXcg''@;'; put 'put ''UmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVmZmVyIHdpdGggOCBieXRlIGxlbmd0aCIpO2Zvcih2YXIgTz1QLzgsej1JLmFsbG9jKE8pLE49SS5hbGxvYyhGfHwwKSxMPUkuYWxsb2MoMCk7Tz4wfHxGPjA7KXt2YXIgSz1uZXcgXztLLnVwZGF0ZShMKSxLLnVwZGF0ZShCKSx3JiZLLnVw''@;'; put 'put ''ZGF0ZSh3KSxMPUsuZGlnZXN0KCk7dmFyIFU9MDtpZihPPjApe3ZhciBXPXoubGVuZ3RoLU87VT1NYXRoLm1pbihPLEwubGVuZ3RoKSxMLmNvcHkoeixXLDAsVSksTy09VX1pZihVPEwubGVuZ3RoJiZGPjApe3ZhciBZPU4ubGVuZ3RoLUYscT1NYXRoLm1pbihGLEwubGVuZ3RoLVUpO0wuY29w''@;'; put 'put ''eShOLFksVSxVK3EpLEYtPXF9fXJldHVybiBMLmZpbGwoMCkse2tleTp6LGl2Ok59fX0sNDAyOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUzMjApLF89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxnPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dWUuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbih6LE4sTCl7aWYoIUkoTikpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIEs7YXJndW1lbnRzLmxlbmd0aD49MyYmKEs9TCksZnVuY3Rpb24gRihPKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09Xy5jYWxsKE8pfSh6KT9m''@;'; put 'put ''dW5jdGlvbih6LE4sTCl7Zm9yKHZhciBLPTAsVT16Lmxlbmd0aDtLPFU7SysrKWcuY2FsbCh6LEspJiYobnVsbD09TD9OKHpbS10sSyx6KTpOLmNhbGwoTCx6W0tdLEsseikpfSh6LE4sSyk6InN0cmluZyI9PXR5cGVvZiB6P2Z1bmN0aW9uKHosTixMKXtmb3IodmFyIEs9MCxVPXoubGVuZ3Ro''@;'; put 'put ''O0s8VTtLKyspbnVsbD09TD9OKHouY2hhckF0KEspLEsseik6Ti5jYWxsKEwsei5jaGFyQXQoSyksSyx6KX0oeixOLEspOmZ1bmN0aW9uKHosTixMKXtmb3IodmFyIEsgaW4geilnLmNhbGwoeixLKSYmKG51bGw9PUw/Tih6W0tdLEsseik6Ti5jYWxsKEwseltLXSxLLHopKX0oeixOLEspfX0s''@;'; put 'put ''NjIzMDp1ZT0+e3VlLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGYuRm9ybURhdGE6d2luZG93LkZvcm1EYXRhfSwzODczOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7Y29uc3QgXz15KDc3KSxnPXkoMjUyMCksQj15KDEzODEpLm1rZGlyc1N5bmMsdz15''@;'; put 'put ''KDMxOCkudXRpbWVzTWlsbGlzU3luYyxQPXkoMjczMyk7ZnVuY3Rpb24gTyhfZSxUZSxTZSxqZSl7Y29uc3QgcD0oamUuZGVyZWZlcmVuY2U/Xy5zdGF0U3luYzpfLmxzdGF0U3luYykoVGUpO2lmKHAuaXNEaXJlY3RvcnkoKSlyZXR1cm4gZnVuY3Rpb24gZWUoX2UsVGUsU2UsamUsVil7cmV0''@;'; put 'put ''dXJuIFRlP25lKFNlLGplLFYpOmZ1bmN0aW9uIEooX2UsVGUsU2UsamUpe3JldHVybiBfLm1rZGlyU3luYyhTZSksbmUoVGUsU2UsamUpLFkoU2UsX2UpfShfZS5tb2RlLFNlLGplLFYpfShwLF9lLFRlLFNlLGplKTtpZihwLmlzRmlsZSgpfHxwLmlzQ2hhcmFjdGVyRGV2aWNlKCl8fHAuaXNC''@;'; put 'put ''bG9ja0RldmljZSgpKXJldHVybiBmdW5jdGlvbiB6KF9lLFRlLFNlLGplLFYpe3JldHVybiBUZT9mdW5jdGlvbiBOKF9lLFRlLFNlLGplKXtpZihqZS5vdmVyd3JpdGUpcmV0dXJuIF8udW5saW5rU3luYyhTZSksTChfZSxUZSxTZSxqZSk7aWYoamUuZXJyb3JPbkV4aXN0KXRocm93IG5ldyBF''@;'; put 'put ''cnJvcihgJyR7U2V9JyBhbHJlYWR5IGV4aXN0c2ApfShfZSxTZSxqZSxWKTpMKF9lLFNlLGplLFYpfShwLF9lLFRlLFNlLGplKTtpZihwLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGZ1bmN0aW9uIGxlKF9lLFRlLFNlLGplKXtsZXQgVj1fLnJlYWRsaW5rU3luYyhUZSk7aWYoamUuZGVyZWZl''@;'; put 'put ''cmVuY2UmJihWPWcucmVzb2x2ZShJLmN3ZCgpLFYpKSxfZSl7bGV0IHA7dHJ5e3A9Xy5yZWFkbGlua1N5bmMoU2UpfWNhdGNoKGIpe2lmKCJFSU5WQUwiPT09Yi5jb2RlfHwiVU5LTk9XTiI9PT1iLmNvZGUpcmV0dXJuIF8uc3ltbGlua1N5bmMoVixTZSk7dGhyb3cgYn1pZihqZS5kZXJlZmVy''@;'; put 'put ''ZW5jZSYmKHA9Zy5yZXNvbHZlKEkuY3dkKCkscCkpLFAuaXNTcmNTdWJkaXIoVixwKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke1Z9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3B9Jy5gKTtpZihQLmlzU3JjU3ViZGlyKHAsVikpdGhyb3cgbmV3IEVycm9yKGBD''@;'; put 'put ''YW5ub3Qgb3ZlcndyaXRlICcke3B9JyB3aXRoICcke1Z9Jy5gKTtyZXR1cm4gZnVuY3Rpb24gbWUoX2UsVGUpe3JldHVybiBfLnVubGlua1N5bmMoVGUpLF8uc3ltbGlua1N5bmMoX2UsVGUpfShWLFNlKX1yZXR1cm4gXy5zeW1saW5rU3luYyhWLFNlKX0oX2UsVGUsU2UsamUpO3Rocm93IHAu''@;'; put 'put ''aXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7VGV9YCk6cC5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke1RlfWApOm5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke1RlfWApfWZ1bmN0aW9uIEwoX2UsVGUsU2Us''@;'; put 'put ''amUpe3JldHVybiBfLmNvcHlGaWxlU3luYyhUZSxTZSksamUucHJlc2VydmVUaW1lc3RhbXBzJiZmdW5jdGlvbiBLKF9lLFRlLFNlKXsoZnVuY3Rpb24gVShfZSl7cmV0dXJuISgxMjgmX2UpfSkoX2UpJiZmdW5jdGlvbiBXKF9lLFRlKXtZKF9lLDEyOHxUZSl9KFNlLF9lKSxmdW5jdGlvbiBx''@;'; put 'put ''KF9lLFRlKXtjb25zdCBTZT1fLnN0YXRTeW5jKF9lKTt3KFRlLFNlLmF0aW1lLFNlLm10aW1lKX0oVGUsU2UpfShfZS5tb2RlLFRlLFNlKSxZKFNlLF9lLm1vZGUpfWZ1bmN0aW9uIFkoX2UsVGUpe3JldHVybiBfLmNobW9kU3luYyhfZSxUZSl9ZnVuY3Rpb24gbmUoX2UsVGUsU2Upe2NvbnN0''@;'; put 'put ''IGplPV8ub3BlbmRpclN5bmMoX2UpO3RyeXtsZXQgVjtmb3IoO251bGwhPT0oVj1qZS5yZWFkU3luYygpKTspaWUoVi5uYW1lLF9lLFRlLFNlKX1maW5hbGx5e2plLmNsb3NlU3luYygpfX1mdW5jdGlvbiBpZShfZSxUZSxTZSxqZSl7Y29uc3QgVj1nLmpvaW4oVGUsX2UpLHA9Zy5qb2luKFNl''@;'; put 'put ''LF9lKTtpZihqZS5maWx0ZXImJiFqZS5maWx0ZXIoVixwKSlyZXR1cm47Y29uc3R7ZGVzdFN0YXQ6Yn09UC5jaGVja1BhdGhzU3luYyhWLHAsImNvcHkiLGplKTtyZXR1cm4gTyhiLFYscCxqZSl9dWUuZXhwb3J0cz1mdW5jdGlvbiBGKF9lLFRlLFNlKXsiZnVuY3Rpb24iPT10eXBlb2YgU2Um''@;'; put 'put ''JihTZT17ZmlsdGVyOlNlfSksKFNlPVNlfHx7fSkuY2xvYmJlcj0hKCJjbG9iYmVyImluIFNlKXx8ISFTZS5jbG9iYmVyLFNlLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImluIFNlPyEhU2Uub3ZlcndyaXRlOlNlLmNsb2JiZXIsU2UucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT1JLmFyY2gm''@;'; put 'put ''JkkuZW1pdFdhcm5pbmcoIlVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiLCJXYXJuaW5nIiwi''@;'; put 'put ''ZnMtZXh0cmEtV0FSTjAwMDIiKTtjb25zdHtzcmNTdGF0OmplLGRlc3RTdGF0OlZ9PVAuY2hlY2tQYXRoc1N5bmMoX2UsVGUsImNvcHkiLFNlKTtpZihQLmNoZWNrUGFyZW50UGF0aHNTeW5jKF9lLGplLFRlLCJjb3B5IiksU2UuZmlsdGVyJiYhU2UuZmlsdGVyKF9lLFRlKSlyZXR1cm47Y29u''@;'; put 'put ''c3QgcD1nLmRpcm5hbWUoVGUpO3JldHVybiBfLmV4aXN0c1N5bmMocCl8fEIocCksTyhWLF9lLFRlLFNlKX19LDcxODk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtjb25zdCBfPXkoNzc0OSksZz15KDI1MjApLHtta2RpcnM6Qn09eSgxMzgxKSx7cGF0aEV4aXN0czp3''@;'; put 'put ''fT15KDkyNTcpLHt1dGltZXNNaWxsaXM6UH09eSgzMTgpLEY9eSgyNzMzKTtmdW5jdGlvbiB6KCl7cmV0dXJuKHo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLGplPXt9KXsiZnVuY3Rpb24iPT10eXBlb2YgamUmJihqZT17ZmlsdGVyOmplfSksamUuY2xvYmJlcj0hKCJjbG9i''@;'; put 'put ''YmVyImluIGplKXx8ISFqZS5jbG9iYmVyLGplLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImluIGplPyEhamUub3ZlcndyaXRlOmplLmNsb2JiZXIsamUucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT1JLmFyY2gmJkkuZW1pdFdhcm5pbmcoIlVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMg''@;'; put 'put ''b3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiLCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDEiKTtjb25zdHtzcmNTdGF0OlYsZGVzdFN0YXQ6''@;'; put 'put ''cH09eWllbGQgRi5jaGVja1BhdGhzKFRlLFNlLCJjb3B5IixqZSk7aWYoeWllbGQgRi5jaGVja1BhcmVudFBhdGhzKFRlLFYsU2UsImNvcHkiKSwhKHlpZWxkIE4oVGUsU2UsamUpKSlyZXR1cm47Y29uc3QgeD1nLmRpcm5hbWUoU2UpOyh5aWVsZCB3KHgpKXx8KHlpZWxkIEIoeCkpLHlpZWxk''@;'; put 'put ''IEsocCxUZSxTZSxqZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIE4oVGUsU2UsamUpe3JldHVybiBMLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBMKCl7cmV0dXJuKEw9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLGplKXtyZXR1cm4hamUuZmls''@;'; put 'put ''dGVyfHxqZS5maWx0ZXIoVGUsU2UpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBLKFRlLFNlLGplLFYpe3JldHVybiBVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVKCl7cmV0dXJuIFU9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLGplLFYpe2Nv''@;'; put 'put ''bnN0IGI9eWllbGQoVi5kZXJlZmVyZW5jZT9fLnN0YXQ6Xy5sc3RhdCkoU2UpO2lmKGIuaXNEaXJlY3RvcnkoKSlyZXR1cm4gZnVuY3Rpb24gaWUoVGUsU2UsamUsVixwKXtyZXR1cm4gbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfShiLFRlLFNlLGplLFYpO2lmKGIuaXNGaWxlKCl8fGIuaXND''@;'; put 'put ''aGFyYWN0ZXJEZXZpY2UoKXx8Yi5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9uIFcoVGUsU2UsamUsVixwKXtyZXR1cm4gWS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KGIsVGUsU2UsamUsVik7aWYoYi5pc1N5bWJvbGljTGluaygpKXJldHVybiBmdW5jdGlvbiBtZShUZSxTZSxqZSxW''@;'; put 'put ''KXtyZXR1cm4gX2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfShUZSxTZSxqZSxWKTt0aHJvdyBiLmlzU29ja2V0KCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke1NlfWApOmIuaXNGSUZPKCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtTZX1g''@;'; put 'put ''KTpuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtTZX1gKX0pLFUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFkoKXtyZXR1cm4oWT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamUsVixwKXtpZighU2UpcmV0dXJuIHEoVGUsamUsVixwKTtpZihwLm92ZXJ3cml0''@;'; put 'put ''ZSlyZXR1cm4geWllbGQgXy51bmxpbmsoVikscShUZSxqZSxWLHApO2lmKHAuZXJyb3JPbkV4aXN0KXRocm93IG5ldyBFcnJvcihgJyR7Vn0nIGFscmVhZHkgZXhpc3RzYCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHEoVGUsU2UsamUsVil7cmV0dXJuIGVlLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlZSgpe3JldHVybihlZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamUsVil7aWYoeWllbGQgXy5jb3B5RmlsZShTZSxqZSksVi5wcmVzZXJ2ZVRpbWVzdGFtcHMpeyhmdW5jdGlvbiBKKFRlKXtyZXR1cm4hKDEyOCZUZSl9KShUZS5t''@;'; put 'put ''b2RlKSYmKHlpZWxkIGZ1bmN0aW9uIG5lKFRlLFNlKXtyZXR1cm4gXy5jaG1vZChUZSwxMjh8U2UpfShqZSxUZS5tb2RlKSk7Y29uc3QgcD15aWVsZCBfLnN0YXQoU2UpO3lpZWxkIFAoamUscC5hdGltZSxwLm10aW1lKX1yZXR1cm4gXy5jaG1vZChqZSxUZS5tb2RlKX0pKS5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyl9ZnVuY3Rpb24gbGUoKXtyZXR1cm4obGU9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLGplLFYscCl7U2V8fCh5aWVsZCBfLm1rZGlyKFYpKTtjb25zdCBiPVtdO3ZhciBULHg9ITEsQz0hMTt0cnl7Zm9yKHZhciBqLEg9X2FzeW5jSXRlcmF0b3IoeWllbGQg''@;'; put 'put ''Xy5vcGVuZGlyKGplKSk7eD0hKGo9eWllbGQgSC5uZXh0KCkpLmRvbmU7eD0hMSl7Y29uc3QgRT1qLnZhbHVlO3tjb25zdCBtPWcuam9pbihqZSxFLm5hbWUpLEE9Zy5qb2luKFYsRS5uYW1lKTtiLnB1c2goTihtLEEscCkudGhlbihhZT0+e2lmKGFlKXJldHVybiBGLmNoZWNrUGF0aHMobSxB''@;'; put 'put ''LCJjb3B5IixwKS50aGVuKCh7ZGVzdFN0YXQ6dGV9KT0+Syh0ZSxtLEEscCkpfSkpfX19Y2F0Y2goRSl7Qz0hMCxUPUV9ZmluYWxseXt0cnl7eCYmbnVsbCE9SC5yZXR1cm4mJih5aWVsZCBILnJldHVybigpKX1maW5hbGx5e2lmKEMpdGhyb3cgVH19eWllbGQgUHJvbWlzZS5hbGwoYiksU2V8''@;'; put 'put ''fCh5aWVsZCBfLmNobW9kKFYsVGUubW9kZSkpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBfZSgpe3JldHVybihfZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsamUsVil7bGV0IHA9eWllbGQgXy5yZWFkbGluayhTZSk7aWYoVi5kZXJlZmVyZW5jZSYmKHA9''@;'; put 'put ''Zy5yZXNvbHZlKEkuY3dkKCkscCkpLCFUZSlyZXR1cm4gXy5zeW1saW5rKHAsamUpO2xldCBiPW51bGw7dHJ5e2I9eWllbGQgXy5yZWFkbGluayhqZSl9Y2F0Y2goeCl7aWYoIkVJTlZBTCI9PT14LmNvZGV8fCJVTktOT1dOIj09PXguY29kZSlyZXR1cm4gXy5zeW1saW5rKHAsamUpO3Rocm93''@;'; put 'put ''IHh9aWYoVi5kZXJlZmVyZW5jZSYmKGI9Zy5yZXNvbHZlKEkuY3dkKCksYikpLEYuaXNTcmNTdWJkaXIocCxiKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3B9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2J9Jy5gKTtpZihGLmlzU3JjU3ViZGlyKGIscCkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke2J9JyB3aXRoICcke3B9Jy5gKTtyZXR1cm4geWllbGQgXy51bmxpbmsoamUpLF8uc3ltbGluayhwLGplKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz1mdW5jdGlvbiBPKFRlLFNlKXtyZXR1cm4gei5hcHBseSh0''@;'; put 'put ''aGlzLGFyZ3VtZW50cyl9fSw2NDY0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZTt1ZS5leHBvcnRzPXtjb3B5OkkoeSg3MTg5KSksY29weVN5bmM6eSgzODczKX19LDU1OTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEp''@;'; put 'put ''LmZyb21Qcm9taXNlLF89eSg3NzQ5KSxnPXkoMjUyMCksQj15KDEzODEpLHc9eSg0NTQyKSxQPUkoZnVuY3Rpb24oKXt2YXIgTz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTil7bGV0IEw7dHJ5e0w9eWllbGQgXy5yZWFkZGlyKE4pfWNhdGNoe3JldHVybiBCLm1rZGlycyhOKX1yZXR1''@;'; put 'put ''cm4gUHJvbWlzZS5hbGwoTC5tYXAoSz0+dy5yZW1vdmUoZy5qb2luKE4sSykpKSl9KTtyZXR1cm4gZnVuY3Rpb24geihOKXtyZXR1cm4gTy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKTtmdW5jdGlvbiBGKE8pe2xldCB6O3RyeXt6PV8ucmVhZGRpclN5bmMoTyl9Y2F0Y2h7cmV0dXJuIEIu''@;'; put 'put ''bWtkaXJzU3luYyhPKX16LmZvckVhY2goTj0+e049Zy5qb2luKE8sTiksdy5yZW1vdmVTeW5jKE4pfSl9dWUuZXhwb3J0cz17ZW1wdHlEaXJTeW5jOkYsZW1wdHlkaXJTeW5jOkYsZW1wdHlEaXI6UCxlbXB0eWRpcjpQfX0sNjUzMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXko''@;'; put 'put ''ODk4MSkuZnJvbVByb21pc2UsXz15KDI1MjApLGc9eSg3NzQ5KSxCPXkoMTM4MSk7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihPKXtsZXQgejt0cnl7ej15aWVsZCBnLnN0YXQoTyl9Y2F0Y2h7fWlmKHomJnouaXNGaWxlKCkpcmV0dXJuO2NvbnN0''@;'; put 'put ''IE49Xy5kaXJuYW1lKE8pO2xldCBMPW51bGw7dHJ5e0w9eWllbGQgZy5zdGF0KE4pfWNhdGNoKEspe2lmKCJFTk9FTlQiPT09Sy5jb2RlKXJldHVybiB5aWVsZCBCLm1rZGlycyhOKSx2b2lkKHlpZWxkIGcud3JpdGVGaWxlKE8sIiIpKTt0aHJvdyBLfUwuaXNEaXJlY3RvcnkoKT95aWVsZCBn''@;'; put 'put ''LndyaXRlRmlsZShPLCIiKTp5aWVsZCBnLnJlYWRkaXIoTil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e2NyZWF0ZUZpbGU6SShmdW5jdGlvbiB3KE8pe3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZUZpbGVTeW5jOmZ1bmN0aW9uIEYoTyl7bGV0''@;'; put 'put ''IHo7dHJ5e3o9Zy5zdGF0U3luYyhPKX1jYXRjaHt9aWYoeiYmei5pc0ZpbGUoKSlyZXR1cm47Y29uc3QgTj1fLmRpcm5hbWUoTyk7dHJ5e2cuc3RhdFN5bmMoTikuaXNEaXJlY3RvcnkoKXx8Zy5yZWFkZGlyU3luYyhOKX1jYXRjaChMKXtpZighTHx8IkVOT0VOVCIhPT1MLmNvZGUpdGhyb3cg''@;'; put 'put ''TDtCLm1rZGlyc1N5bmMoTil9Zy53cml0ZUZpbGVTeW5jKE8sIiIpfX19LDE3MjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3R7Y3JlYXRlRmlsZTpJLGNyZWF0ZUZpbGVTeW5jOl99PXkoNjUzMCkse2NyZWF0ZUxpbms6ZyxjcmVhdGVMaW5rU3luYzpCfT15KDQxNDcpLHtjcmVhdGVT''@;'; put 'put ''eW1saW5rOncsY3JlYXRlU3ltbGlua1N5bmM6UH09eSgzNjM1KTt1ZS5leHBvcnRzPXtjcmVhdGVGaWxlOkksY3JlYXRlRmlsZVN5bmM6XyxlbnN1cmVGaWxlOkksZW5zdXJlRmlsZVN5bmM6XyxjcmVhdGVMaW5rOmcsY3JlYXRlTGlua1N5bmM6QixlbnN1cmVMaW5rOmcsZW5zdXJlTGlua1N5''@;'; put 'put ''bmM6QixjcmVhdGVTeW1saW5rOncsY3JlYXRlU3ltbGlua1N5bmM6UCxlbnN1cmVTeW1saW5rOncsZW5zdXJlU3ltbGlua1N5bmM6UH19LDQxNDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSgyNTIwKSxnPXkoNzc0OSksQj15KDEzODEp''@;'; put 'put ''LHtwYXRoRXhpc3RzOnd9PXkoOTI1Nykse2FyZUlkZW50aWNhbDpQfT15KDI3MzMpO2Z1bmN0aW9uIE8oKXtyZXR1cm4oTz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTixMKXtsZXQgSyxVO3RyeXtLPXlpZWxkIGcubHN0YXQoTCl9Y2F0Y2h7fXRyeXtVPXlpZWxkIGcubHN0YXQoTil9''@;'; put 'put ''Y2F0Y2gocSl7dGhyb3cgcS5tZXNzYWdlPXEubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZUxpbmsiKSxxfWlmKEsmJlAoVSxLKSlyZXR1cm47Y29uc3QgVz1fLmRpcm5hbWUoTCk7KHlpZWxkIHcoVykpfHwoeWllbGQgQi5ta2RpcnMoVykpLHlpZWxkIGcubGluayhOLEwpfSkpLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtjcmVhdGVMaW5rOkkoZnVuY3Rpb24gRihOLEwpe3JldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZUxpbmtTeW5jOmZ1bmN0aW9uIHooTixMKXtsZXQgSzt0cnl7Sz1nLmxzdGF0U3luYyhMKX1jYXRjaHt9dHJ5e2Nv''@;'; put 'put ''bnN0IFk9Zy5sc3RhdFN5bmMoTik7aWYoSyYmUChZLEspKXJldHVybn1jYXRjaChZKXt0aHJvdyBZLm1lc3NhZ2U9WS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLFl9Y29uc3QgVT1fLmRpcm5hbWUoTCk7cmV0dXJuIGcuZXhpc3RzU3luYyhVKXx8Qi5ta2RpcnNTeW5j''@;'; put 'put ''KFUpLGcubGlua1N5bmMoTixMKX19fSw2MDcyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSgyNTIwKSxfPXkoNzc0OSkse3BhdGhFeGlzdHM6Z309eSg5MjU3KSxCPXkoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1''@;'; put 'put ''bmN0aW9uKihPLHope2lmKEkuaXNBYnNvbHV0ZShPKSl7dHJ5e3lpZWxkIF8ubHN0YXQoTyl9Y2F0Y2goVSl7dGhyb3cgVS5tZXNzYWdlPVUubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxVfXJldHVybnt0b0N3ZDpPLHRvRHN0Ok99fWNvbnN0IE49SS5kaXJuYW1l''@;'; put 'put ''KHopLEw9SS5qb2luKE4sTyk7aWYoeWllbGQgZyhMKSlyZXR1cm57dG9Dd2Q6TCx0b0RzdDpPfTt0cnl7eWllbGQgXy5sc3RhdChPKX1jYXRjaChVKXt0aHJvdyBVLm1lc3NhZ2U9VS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLFV9cmV0dXJue3RvQ3dkOk8sdG9E''@;'; put 'put ''c3Q6SS5yZWxhdGl2ZShOLE8pfX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17c3ltbGlua1BhdGhzOkIoZnVuY3Rpb24gdyhPLHope3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHN5bWxpbmtQYXRoc1N5bmM6ZnVuY3Rpb24gRihPLHope2lmKEkuaXNBYnNv''@;'; put 'put ''bHV0ZShPKSl7aWYoIV8uZXhpc3RzU3luYyhPKSl0aHJvdyBuZXcgRXJyb3IoImFic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6Tyx0b0RzdDpPfX1jb25zdCBOPUkuZGlybmFtZSh6KSxMPUkuam9pbihOLE8pO2lmKF8uZXhpc3RzU3luYyhMKSlyZXR1cm57''@;'; put 'put ''dG9Dd2Q6TCx0b0RzdDpPfTtpZighXy5leGlzdHNTeW5jKE8pKXRocm93IG5ldyBFcnJvcigicmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDpPLHRvRHN0OkkucmVsYXRpdmUoTixPKX19fX0sOTI1OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJ''@;'; put 'put ''PXkoNzc0OSksXz15KDg5ODEpLmZyb21Qcm9taXNlO2Z1bmN0aW9uIEIoKXtyZXR1cm4oQj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooUCxGKXtpZihGKXJldHVybiBGO2xldCBPO3RyeXtPPXlpZWxkIEkubHN0YXQoUCl9Y2F0Y2h7cmV0dXJuImZpbGUifXJldHVybiBPJiZPLmlzRGly''@;'; put 'put ''ZWN0b3J5KCk/ImRpciI6ImZpbGUifSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtzeW1saW5rVHlwZTpfKGZ1bmN0aW9uIGcoUCxGKXtyZXR1cm4gQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxzeW1saW5rVHlwZVN5bmM6ZnVuY3Rpb24gdyhQLEYpe2lmKEYpcmV0dXJu''@;'; put 'put ''IEY7bGV0IE87dHJ5e089SS5sc3RhdFN5bmMoUCl9Y2F0Y2h7cmV0dXJuImZpbGUifXJldHVybiBPJiZPLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUifX19LDM2MzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSgyNTIwKSxnPXkoNzc0''@;'; put 'put ''OSkse21rZGlyczpCLG1rZGlyc1N5bmM6d309eSgxMzgxKSx7c3ltbGlua1BhdGhzOlAsc3ltbGlua1BhdGhzU3luYzpGfT15KDYwNzIpLHtzeW1saW5rVHlwZTpPLHN5bWxpbmtUeXBlU3luYzp6fT15KDkyNTkpLHtwYXRoRXhpc3RzOk59PXkoOTI1Nykse2FyZUlkZW50aWNhbDpMfT15KDI3''@;'; put 'put ''MzMpO2Z1bmN0aW9uIFUoKXtyZXR1cm4oVT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooWSxxLGVlKXtsZXQgSjt0cnl7Sj15aWVsZCBnLmxzdGF0KHEpfWNhdGNoe31pZihKJiZKLmlzU3ltYm9saWNMaW5rKCkpe2NvbnN0W21lLF9lXT15aWVsZCBQcm9taXNlLmFsbChbZy5zdGF0KFkp''@;'; put 'put ''LGcuc3RhdChxKV0pO2lmKEwobWUsX2UpKXJldHVybn1jb25zdCBuZT15aWVsZCBQKFkscSk7WT1uZS50b0RzdDtjb25zdCBpZT15aWVsZCBPKG5lLnRvQ3dkLGVlKSxsZT1fLmRpcm5hbWUocSk7cmV0dXJuKHlpZWxkIE4obGUpKXx8KHlpZWxkIEIobGUpKSxnLnN5bWxpbmsoWSxxLGllKX0p''@;'; put 'put ''KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17Y3JlYXRlU3ltbGluazpJKGZ1bmN0aW9uIEsoWSxxLGVlKXtyZXR1cm4gVS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjcmVhdGVTeW1saW5rU3luYzpmdW5jdGlvbiBXKFkscSxlZSl7bGV0IEo7dHJ5e0o9Zy5sc3RhdFN5bmMo''@;'; put 'put ''cSl9Y2F0Y2h7fWlmKEomJkouaXNTeW1ib2xpY0xpbmsoKSl7Y29uc3QgbWU9Zy5zdGF0U3luYyhZKSxfZT1nLnN0YXRTeW5jKHEpO2lmKEwobWUsX2UpKXJldHVybn1jb25zdCBuZT1GKFkscSk7WT1uZS50b0RzdCxlZT16KG5lLnRvQ3dkLGVlKTtjb25zdCBpZT1fLmRpcm5hbWUocSk7cmV0''@;'; put 'put ''dXJuIGcuZXhpc3RzU3luYyhpZSl8fHcoaWUpLGcuc3ltbGlua1N5bmMoWSxxLGVlKX19fSw3NzQ5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7Y29uc3QgXz15KDg5ODEpLmZyb21DYWxsYmFjayxnPXkoNzcpLEI9WyJhY2Nlc3MiLCJhcHBlbmRGaWxlIiwiY2htb2Qi''@;'; put 'put ''LCJjaG93biIsImNsb3NlIiwiY29weUZpbGUiLCJjcCIsImZjaG1vZCIsImZjaG93biIsImZkYXRhc3luYyIsImZzdGF0IiwiZnN5bmMiLCJmdHJ1bmNhdGUiLCJmdXRpbWVzIiwiZ2xvYiIsImxjaG1vZCIsImxjaG93biIsImx1dGltZXMiLCJsaW5rIiwibHN0YXQiLCJta2RpciIsIm1rZHRl''@;'; put 'put ''bXAiLCJvcGVuIiwib3BlbmRpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsInJlYWRsaW5rIiwicmVhbHBhdGgiLCJyZW5hbWUiLCJybSIsInJtZGlyIiwic3RhdCIsInN0YXRmcyIsInN5bWxpbmsiLCJ0cnVuY2F0ZSIsInVubGluayIsInV0aW1lcyIsIndyaXRlRmlsZSJdLmZpbHRlcih3PT4i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgZ1t3XSk7T2JqZWN0LmFzc2lnbihYLGcpLEIuZm9yRWFjaCh3PT57WFt3XT1fKGdbd10pfSksWC5leGlzdHM9ZnVuY3Rpb24odyxQKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUD9nLmV4aXN0cyh3LFApOm5ldyBQcm9taXNlKEY9PmcuZXhpc3RzKHcsRikp''@;'; put 'put ''fSxYLnJlYWQ9ZnVuY3Rpb24odyxQLEYsTyx6LE4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBOP2cucmVhZCh3LFAsRixPLHosTik6bmV3IFByb21pc2UoKEwsSyk9PntnLnJlYWQodyxQLEYsTyx6LChVLFcsWSk9PntpZihVKXJldHVybiBLKFUpO0woe2J5dGVzUmVhZDpXLGJ1ZmZlcjpZ''@;'; put 'put ''fSl9KX0pfSxYLndyaXRlPWZ1bmN0aW9uKHcsUCwuLi5GKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRltGLmxlbmd0aC0xXT9nLndyaXRlKHcsUCwuLi5GKTpuZXcgUHJvbWlzZSgoTyx6KT0+e2cud3JpdGUodyxQLC4uLkYsKE4sTCxLKT0+e2lmKE4pcmV0dXJuIHooTik7Tyh7Ynl0ZXNX''@;'; put 'put ''cml0dGVuOkwsYnVmZmVyOkt9KX0pfSl9LFgucmVhZHY9ZnVuY3Rpb24odyxQLC4uLkYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGW0YubGVuZ3RoLTFdP2cucmVhZHYodyxQLC4uLkYpOm5ldyBQcm9taXNlKChPLHopPT57Zy5yZWFkdih3LFAsLi4uRiwoTixMLEspPT57aWYoTilyZXR1''@;'; put 'put ''cm4geihOKTtPKHtieXRlc1JlYWQ6TCxidWZmZXJzOkt9KX0pfSl9LFgud3JpdGV2PWZ1bmN0aW9uKHcsUCwuLi5GKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRltGLmxlbmd0aC0xXT9nLndyaXRldih3LFAsLi4uRik6bmV3IFByb21pc2UoKE8seik9PntnLndyaXRldih3LFAsLi4uRiwo''@;'; put 'put ''TixMLEspPT57aWYoTilyZXR1cm4geihOKTtPKHtieXRlc1dyaXR0ZW46TCxidWZmZXJzOkt9KX0pfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBnLnJlYWxwYXRoLm5hdGl2ZT9YLnJlYWxwYXRoLm5hdGl2ZT1fKGcucmVhbHBhdGgubmF0aXZlKTpJLmVtaXRXYXJuaW5nKCJmcy5yZWFscGF0aC5u''@;'; put 'put ''YXRpdmUgaXMgbm90IGEgZnVuY3Rpb24uIElzIGZzIGJlaW5nIG1vbmtleS1wYXRjaGVkPyIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMyIpfSw1Njc0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ey4uLnkoNzc0OSksLi4ueSg2NDY0KSwuLi55KDU1OTApLC4uLnko''@;'; put 'put ''MTcyMCksLi4ueSg2NTczKSwuLi55KDEzODEpLC4uLnkoNTMwKSwuLi55KDQ2NzApLC4uLnkoOTI1NyksLi4ueSg0NTQyKX19LDY1NzM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSg3MTgzKTtfLm91dHB1dEpzb249SSh5KDM1MDgpKSxf''@;'; put 'put ''Lm91dHB1dEpzb25TeW5jPXkoOTU3OCksXy5vdXRwdXRKU09OPV8ub3V0cHV0SnNvbixfLm91dHB1dEpTT05TeW5jPV8ub3V0cHV0SnNvblN5bmMsXy53cml0ZUpTT049Xy53cml0ZUpzb24sXy53cml0ZUpTT05TeW5jPV8ud3JpdGVKc29uU3luYyxfLnJlYWRKU09OPV8ucmVhZEpzb24sXy5y''@;'; put 'put ''ZWFkSlNPTlN5bmM9Xy5yZWFkSnNvblN5bmMsdWUuZXhwb3J0cz1ffSw3MTgzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg2ODEzKTt1ZS5leHBvcnRzPXtyZWFkSnNvbjpJLnJlYWRGaWxlLHJlYWRKc29uU3luYzpJLnJlYWRGaWxlU3luYyx3cml0ZUpzb246SS53cml0ZUZp''@;'; put 'put ''bGUsd3JpdGVKc29uU3luYzpJLndyaXRlRmlsZVN5bmN9fSw5NTc4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpJfT15KDY3ODApLHtvdXRwdXRGaWxlU3luYzpffT15KDQ2NzApO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCLHcsUCl7Y29uc3QgRj1JKHcsUCk7XyhC''@;'; put 'put ''LEYsUCl9fSwzNTA4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpJfT15KDY3ODApLHtvdXRwdXRGaWxlOl99PXkoNDY3MCk7ZnVuY3Rpb24gQigpe3JldHVybihCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKih3LFAsRj17fSl7Y29uc3QgTz1JKFAsRik7eWll''@;'; put 'put ''bGQgXyh3LE8sRil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gZyh3LFApe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDEzODE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLHttYWtlRGlyOl8s''@;'; put 'put ''bWFrZURpclN5bmM6Z309eSg4MjMzKSxCPUkoXyk7dWUuZXhwb3J0cz17bWtkaXJzOkIsbWtkaXJzU3luYzpnLG1rZGlycDpCLG1rZGlycFN5bmM6ZyxlbnN1cmVEaXI6QixlbnN1cmVEaXJTeW5jOmd9fSw4MjMzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg3NzQ5KSx7Y2hl''@;'; put 'put ''Y2tQYXRoOl99PXkoMzQ2OCksZz1CPT4ibnVtYmVyIj09dHlwZW9mIEI/Qjp7bW9kZTo1MTEsLi4uQn0ubW9kZTt1ZS5leHBvcnRzLm1ha2VEaXI9ZnVuY3Rpb24oKXt2YXIgQj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbioodyxQKXtyZXR1cm4gXyh3KSxJLm1rZGlyKHcse21vZGU6ZyhQ''@;'; put 'put ''KSxyZWN1cnNpdmU6ITB9KX0pO3JldHVybiBmdW5jdGlvbih3LFApe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksdWUuZXhwb3J0cy5tYWtlRGlyU3luYz0oQix3KT0+KF8oQiksSS5ta2RpclN5bmMoQix7bW9kZTpnKHcpLHJlY3Vyc2l2ZTohMH0pKX0sMzQ2ODoodWUsWCx5''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO2NvbnN0IF89eSgyNTIwKTt1ZS5leHBvcnRzLmNoZWNrUGF0aD1mdW5jdGlvbihCKXtpZigid2luMzIiPT09SS5wbGF0Zm9ybSYmL1s8PjoifD8qXS8udGVzdChCLnJlcGxhY2UoXy5wYXJzZShCKS5yb290LCIiKSkpe2NvbnN0IFA9bmV3''@;'; put 'put ''IEVycm9yKGBQYXRoIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHtCfWApO3Rocm93IFAuY29kZT0iRUlOVkFMIixQfX19LDUzMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2U7dWUuZXhwb3J0cz17bW92ZTpJKHkoNDM2KSksbW92ZVN5''@;'; put 'put ''bmM6eSgzNzM2KX19LDM3MzY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc3KSxfPXkoMjUyMCksZz15KDY0NjQpLmNvcHlTeW5jLEI9eSg0NTQyKS5yZW1vdmVTeW5jLHc9eSgxMzgxKS5ta2RpcnBTeW5jLFA9eSgyNzMzKTtmdW5jdGlvbiBOKEssVSxXKXt0cnl7SS5yZW5h''@;'; put 'put ''bWVTeW5jKEssVSl9Y2F0Y2goWSl7aWYoIkVYREVWIiE9PVkuY29kZSl0aHJvdyBZO3JldHVybiBmdW5jdGlvbiBMKEssVSxXKXtyZXR1cm4gZyhLLFUse292ZXJ3cml0ZTpXLGVycm9yT25FeGlzdDohMCxwcmVzZXJ2ZVRpbWVzdGFtcHM6ITB9KSxCKEspfShLLFUsVyl9fXVlLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24gRihLLFUsVyl7Y29uc3QgWT0oVz1XfHx7fSkub3ZlcndyaXRlfHxXLmNsb2JiZXJ8fCExLHtzcmNTdGF0OnEsaXNDaGFuZ2luZ0Nhc2U6ZWU9ITF9PVAuY2hlY2tQYXRoc1N5bmMoSyxVLCJtb3ZlIixXKTtyZXR1cm4gUC5jaGVja1BhcmVudFBhdGhzU3luYyhLLHEsVSwibW92''@;'; put 'put ''ZSIpLGZ1bmN0aW9uIE8oSyl7Y29uc3QgVT1fLmRpcm5hbWUoSyk7cmV0dXJuIF8ucGFyc2UoVSkucm9vdD09PVV9KFUpfHx3KF8uZGlybmFtZShVKSksZnVuY3Rpb24geihLLFUsVyxZKXtpZihZKXJldHVybiBOKEssVSxXKTtpZihXKXJldHVybiBCKFUpLE4oSyxVLFcpO2lmKEkuZXhpc3Rz''@;'; put 'put ''U3luYyhVKSl0aHJvdyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7cmV0dXJuIE4oSyxVLFcpfShLLFUsWSxlZSl9fSw0MzY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc3NDkpLF89eSgyNTIwKSx7Y29weTpnfT15KDY0NjQpLHtyZW1vdmU6Qn09eSg0NTQy''@;'; put 'put ''KSx7bWtkaXJwOnd9PXkoMTM4MSkse3BhdGhFeGlzdHM6UH09eSg5MjU3KSxGPXkoMjczMyk7ZnVuY3Rpb24geigpe3JldHVybiB6PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFkscT17fSl7Y29uc3QgZWU9cS5vdmVyd3JpdGV8fHEuY2xvYmJlcnx8ITEse3NyY1N0YXQ6Sixpc0No''@;'; put 'put ''YW5naW5nQ2FzZTpuZT0hMX09eWllbGQgRi5jaGVja1BhdGhzKFcsWSwibW92ZSIscSk7eWllbGQgRi5jaGVja1BhcmVudFBhdGhzKFcsSixZLCJtb3ZlIik7Y29uc3QgaWU9Xy5kaXJuYW1lKFkpO3JldHVybiBfLnBhcnNlKGllKS5yb290IT09aWUmJih5aWVsZCB3KGllKSksZnVuY3Rpb24g''@;'; put 'put ''TihXLFkscSxlZSl7cmV0dXJuIEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfShXLFksZWUsbmUpfSksei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTCgpe3JldHVybiBMPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFkscSxlZSl7aWYoIWVlKWlmKHEpeWllbGQgQihZKTtl''@;'; put 'put ''bHNlIGlmKHlpZWxkIFAoWSkpdGhyb3cgbmV3IEVycm9yKCJkZXN0IGFscmVhZHkgZXhpc3RzLiIpO3RyeXt5aWVsZCBJLnJlbmFtZShXLFkpfWNhdGNoKEope2lmKCJFWERFViIhPT1KLmNvZGUpdGhyb3cgSjt5aWVsZCBmdW5jdGlvbiBLKFcsWSxxKXtyZXR1cm4gVS5hcHBseSh0aGlzLGFy''@;'; put 'put ''Z3VtZW50cyl9KFcsWSxxKX19KSxMLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVKCl7cmV0dXJuKFU9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWSxxKXtyZXR1cm4geWllbGQgZyhXLFkse292ZXJ3cml0ZTpxLGVycm9yT25FeGlzdDohMCxwcmVzZXJ2ZVRpbWVzdGFt''@;'; put 'put ''cHM6ITB9KSxCKFcpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPWZ1bmN0aW9uIE8oVyxZKXtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSw0NjcwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZSxfPXkoNzc0OSks''@;'; put 'put ''Zz15KDI1MjApLEI9eSgxMzgxKSx3PXkoOTI1NykucGF0aEV4aXN0cztmdW5jdGlvbiBGKCl7cmV0dXJuKEY9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKHosTixMPSJ1dGYtOCIpe2NvbnN0IEs9Zy5kaXJuYW1lKHopO3JldHVybih5aWVsZCB3KEspKXx8KHlpZWxkIEIubWtkaXJzKEsp''@;'; put 'put ''KSxfLndyaXRlRmlsZSh6LE4sTCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e291dHB1dEZpbGU6SShmdW5jdGlvbiBQKHosTil7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksb3V0cHV0RmlsZVN5bmM6ZnVuY3Rpb24gTyh6LC4uLk4pe2NvbnN0IEw9Zy5k''@;'; put 'put ''aXJuYW1lKHopO18uZXhpc3RzU3luYyhMKXx8Qi5ta2RpcnNTeW5jKEwpLF8ud3JpdGVGaWxlU3luYyh6LC4uLk4pfX19LDkyNTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSg3NzQ5KTt1ZS5leHBvcnRzPXtwYXRoRXhpc3RzOkkoZnVu''@;'; put 'put ''Y3Rpb24gZyhCKXtyZXR1cm4gXy5hY2Nlc3MoQikudGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KSxwYXRoRXhpc3RzU3luYzpfLmV4aXN0c1N5bmN9fSw0NTQyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg3NyksXz15KDg5ODEpLmZyb21DYWxsYmFjazt1ZS5leHBvcnRz''@;'; put 'put ''PXtyZW1vdmU6XyhmdW5jdGlvbiBnKHcsUCl7SS5ybSh3LHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9LFApfSkscmVtb3ZlU3luYzpmdW5jdGlvbiBCKHcpe0kucm1TeW5jKHcse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pfX19LDI3MzM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15''@;'; put 'put ''KDc3NDkpLF89eSgyNTIwKSxnPXkoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gRigpe3JldHVybihGPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLHEsZWUsSil7Y29uc3R7c3JjU3RhdDpuZSxkZXN0U3RhdDppZX09eWllbGQgZnVuY3Rpb24gQihZLHEsZWUpe2NvbnN0IEo9ZWUu''@;'; put 'put ''ZGVyZWZlcmVuY2U/bmU9Pkkuc3RhdChuZSx7YmlnaW50OiEwfSk6bmU9PkkubHN0YXQobmUse2JpZ2ludDohMH0pO3JldHVybiBQcm9taXNlLmFsbChbSihZKSxKKHEpLmNhdGNoKG5lPT57aWYoIkVOT0VOVCI9PT1uZS5jb2RlKXJldHVybiBudWxsO3Rocm93IG5lfSldKS50aGVuKChbbmUs''@;'; put 'put ''aWVdKT0+KHtzcmNTdGF0Om5lLGRlc3RTdGF0OmllfSkpfShZLHEsSik7aWYoaWUpe2lmKEsobmUsaWUpKXtjb25zdCBsZT1fLmJhc2VuYW1lKFkpLG1lPV8uYmFzZW5hbWUocSk7aWYoIm1vdmUiPT09ZWUmJmxlIT09bWUmJmxlLnRvTG93ZXJDYXNlKCk9PT1tZS50b0xvd2VyQ2FzZSgpKXJl''@;'; put 'put ''dHVybntzcmNTdGF0Om5lLGRlc3RTdGF0OmllLGlzQ2hhbmdpbmdDYXNlOiEwfTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYobmUuaXNEaXJlY3RvcnkoKSYmIWllLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7cX0nIHdpdGggZGlyZWN0b3J5ICcke1l9Jy5gKTtpZighbmUuaXNEaXJlY3RvcnkoKSYmaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke3F9JyB3aXRoIG5vbi1k''@;'; put 'put ''aXJlY3RvcnkgJyR7WX0nLmApfWlmKG5lLmlzRGlyZWN0b3J5KCkmJlUoWSxxKSl0aHJvdyBuZXcgRXJyb3IoVyhZLHEsZWUpKTtyZXR1cm57c3JjU3RhdDpuZSxkZXN0U3RhdDppZX19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHooWSxxLGVlLEope3JldHVybiBOLmFwcGx5''@;'; put 'put ''KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBOKCl7cmV0dXJuKE49X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFkscSxlZSxKKXtjb25zdCBuZT1fLnJlc29sdmUoXy5kaXJuYW1lKFkpKSxpZT1fLnJlc29sdmUoXy5kaXJuYW1lKGVlKSk7aWYoaWU9PT1uZXx8aWU9PT1fLnBhcnNlKGll''@;'; put 'put ''KS5yb290KXJldHVybjtsZXQgbGU7dHJ5e2xlPXlpZWxkIEkuc3RhdChpZSx7YmlnaW50OiEwfSl9Y2F0Y2gobWUpe2lmKCJFTk9FTlQiPT09bWUuY29kZSlyZXR1cm47dGhyb3cgbWV9aWYoSyhxLGxlKSl0aHJvdyBuZXcgRXJyb3IoVyhZLGVlLEopKTtyZXR1cm4geihZLHEsaWUsSil9KSku''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEsoWSxxKXtyZXR1cm4gcS5pbm8mJnEuZGV2JiZxLmlubz09PVkuaW5vJiZxLmRldj09PVkuZGV2fWZ1bmN0aW9uIFUoWSxxKXtjb25zdCBlZT1fLnJlc29sdmUoWSkuc3BsaXQoXy5zZXApLmZpbHRlcihuZT0+bmUpLEo9Xy5yZXNvbHZl''@;'; put 'put ''KHEpLnNwbGl0KF8uc2VwKS5maWx0ZXIobmU9Pm5lKTtyZXR1cm4gZWUuZXZlcnkoKG5lLGllKT0+SltpZV09PT1uZSl9ZnVuY3Rpb24gVyhZLHEsZWUpe3JldHVybmBDYW5ub3QgJHtlZX0gJyR7WX0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cX0nLmB9dWUuZXhwb3J0cz17''@;'; put 'put ''Y2hlY2tQYXRoczpnKGZ1bmN0aW9uIFAoWSxxLGVlLEope3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNoZWNrUGF0aHNTeW5jOmZ1bmN0aW9uIE8oWSxxLGVlLEope2NvbnN0e3NyY1N0YXQ6bmUsZGVzdFN0YXQ6aWV9PWZ1bmN0aW9uIHcoWSxxLGVlKXtsZXQgSjtjb25zdCBu''@;'; put 'put ''ZT1lZS5kZXJlZmVyZW5jZT9sZT0+SS5zdGF0U3luYyhsZSx7YmlnaW50OiEwfSk6bGU9PkkubHN0YXRTeW5jKGxlLHtiaWdpbnQ6ITB9KSxpZT1uZShZKTt0cnl7Sj1uZShxKX1jYXRjaChsZSl7aWYoIkVOT0VOVCI9PT1sZS5jb2RlKXJldHVybntzcmNTdGF0OmllLGRlc3RTdGF0Om51bGx9''@;'; put 'put ''O3Rocm93IGxlfXJldHVybntzcmNTdGF0OmllLGRlc3RTdGF0Okp9fShZLHEsSik7aWYoaWUpe2lmKEsobmUsaWUpKXtjb25zdCBsZT1fLmJhc2VuYW1lKFkpLG1lPV8uYmFzZW5hbWUocSk7aWYoIm1vdmUiPT09ZWUmJmxlIT09bWUmJmxlLnRvTG93ZXJDYXNlKCk9PT1tZS50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpKXJldHVybntzcmNTdGF0Om5lLGRlc3RTdGF0OmllLGlzQ2hhbmdpbmdDYXNlOiEwfTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYobmUuaXNEaXJlY3RvcnkoKSYmIWllLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7cX0nIHdpdGggZGlyZWN0b3J5ICcke1l9Jy5gKTtpZighbmUuaXNEaXJlY3RvcnkoKSYmaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke3F9JyB3aXRo''@;'; put 'put ''IG5vbi1kaXJlY3RvcnkgJyR7WX0nLmApfWlmKG5lLmlzRGlyZWN0b3J5KCkmJlUoWSxxKSl0aHJvdyBuZXcgRXJyb3IoVyhZLHEsZWUpKTtyZXR1cm57c3JjU3RhdDpuZSxkZXN0U3RhdDppZX19LGNoZWNrUGFyZW50UGF0aHM6Zyh6KSxjaGVja1BhcmVudFBhdGhzU3luYzpmdW5jdGlvbiBM''@;'; put 'put ''KFkscSxlZSxKKXtjb25zdCBuZT1fLnJlc29sdmUoXy5kaXJuYW1lKFkpKSxpZT1fLnJlc29sdmUoXy5kaXJuYW1lKGVlKSk7aWYoaWU9PT1uZXx8aWU9PT1fLnBhcnNlKGllKS5yb290KXJldHVybjtsZXQgbGU7dHJ5e2xlPUkuc3RhdFN5bmMoaWUse2JpZ2ludDohMH0pfWNhdGNoKG1lKXtp''@;'; put 'put ''ZigiRU5PRU5UIj09PW1lLmNvZGUpcmV0dXJuO3Rocm93IG1lfWlmKEsocSxsZSkpdGhyb3cgbmV3IEVycm9yKFcoWSxlZSxKKSk7cmV0dXJuIEwoWSxxLGllLEopfSxpc1NyY1N1YmRpcjpVLGFyZUlkZW50aWNhbDpLfX0sMzE4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg3''@;'; put 'put ''NzQ5KSxfPXkoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gQigpe3JldHVybihCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihQLEYsTyl7Y29uc3Qgej15aWVsZCBJLm9wZW4oUCwicisiKTtsZXQgTj1udWxsO3RyeXt5aWVsZCBJLmZ1dGltZXMoeixGLE8pfWZpbmFsbHl7dHJ5e3lp''@;'; put 'put ''ZWxkIEkuY2xvc2Uoeil9Y2F0Y2goTCl7Tj1MfX1pZihOKXRocm93IE59KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e3V0aW1lc01pbGxpczpfKGZ1bmN0aW9uIGcoUCxGLE8pe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHV0aW1lc01pbGxpc1N5bmM6ZnVu''@;'; put 'put ''Y3Rpb24gdyhQLEYsTyl7Y29uc3Qgej1JLm9wZW5TeW5jKFAsInIrIik7cmV0dXJuIEkuZnV0aW1lc1N5bmMoeixGLE8pLEkuY2xvc2VTeW5jKHopfX19LDc2NDg6dWU9PnsidXNlIHN0cmljdCI7dmFyIHk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPU1hdGgubWF4LGc9ZnVuY3Rpb24o''@;'; put 'put ''RixPKXtmb3IodmFyIHo9W10sTj0wO048Ri5sZW5ndGg7Tis9MSl6W05dPUZbTl07Zm9yKHZhciBMPTA7TDxPLmxlbmd0aDtMKz0xKXpbTCtGLmxlbmd0aF09T1tMXTtyZXR1cm4gen07dWUuZXhwb3J0cz1mdW5jdGlvbihGKXt2YXIgTz10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBPfHwi''@;'; put 'put ''W29iamVjdCBGdW5jdGlvbl0iIT09eS5hcHBseShPKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrTyk7Zm9yKHZhciBOLHo9ZnVuY3Rpb24oRixPKXtmb3IodmFyIHo9W10sTj0xLEw9MDtOPEYubGVuZ3RoO04r''@;'; put 'put ''PTEsTCs9MSl6W0xdPUZbTl07cmV0dXJuIHp9KGFyZ3VtZW50cyksSz1JKDAsTy5sZW5ndGgtei5sZW5ndGgpLFU9W10sVz0wO1c8SztXKyspVVtXXT0iJCIrVztpZihOPUZ1bmN0aW9uKCJiaW5kZXIiLCJyZXR1cm4gZnVuY3Rpb24gKCIrZnVuY3Rpb24oUCxGKXtmb3IodmFyIE89IiIsej0w''@;'; put 'put ''O3o8UC5sZW5ndGg7eis9MSlPKz1QW3pdLHorMTxQLmxlbmd0aCYmKE8rPSIsIik7cmV0dXJuIE99KFUpKyIpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfSIpKGZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIE4pe3ZhciBxPU8uYXBwbHkodGhpcyxnKHosYXJn''@;'; put 'put ''dW1lbnRzKSk7cmV0dXJuIE9iamVjdChxKT09PXE/cTp0aGlzfXJldHVybiBPLmFwcGx5KEYsZyh6LGFyZ3VtZW50cykpfSksTy5wcm90b3R5cGUpe3ZhciBZPWZ1bmN0aW9uKCl7fTtZLnByb3RvdHlwZT1PLnByb3RvdHlwZSxOLnByb3RvdHlwZT1uZXcgWSxZLnByb3RvdHlwZT1udWxsfXJl''@;'; put 'put ''dHVybiBOfX0sODYxMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDc2NDgpO3VlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fEl9LDIxMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxfPXkoODg5MiksZz15KDE2NDgpLEI9eSgzOTgxKSx3PXkoNDcyNiks''@;'; put 'put ''UD15KDY3MTIpLEY9eSgzNDY0KSxPPXkoNDQ1Myksej15KDM5MTUpLE49eSg5NzM4KSxMPXkoNjMyOSksSz15KDIyNjQpLFU9eSg1NzMwKSxXPXkoNzA3KSxZPXkoMzg2MikscT15KDk1NTApLGVlPUZ1bmN0aW9uLEo9ZnVuY3Rpb24odmUpe3RyeXtyZXR1cm4gZWUoJyJ1c2Ugc3RyaWN0Ijsg''@;'; put 'put ''cmV0dXJuICgnK3ZlKyIpLmNvbnN0cnVjdG9yOyIpKCl9Y2F0Y2h7fX0sbmU9eSg3Mjk2KSxpZT15KDQ0MjkpLGxlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IE99LG1lPW5lP2Z1bmN0aW9uKCl7dHJ5e3JldHVybiBsZX1jYXRjaHt0cnl7cmV0dXJuIG5lKGFyZ3VtZW50cywiY2FsbGVlIikuZ2V0''@;'; put 'put ''fWNhdGNoe3JldHVybiBsZX19fSgpOmxlLF9lPXkoMTQwNSkoKSxUZT15KDE2MTgpLFNlPXkoODg5OSksamU9eSg0NDMpLFY9eSgxNzY4KSxwPXkoODkyOCksYj17fSx4PXR5cGVvZiBVaW50OEFycmF5PiJ1Inx8IVRlP0k6VGUoVWludDhBcnJheSksQz17X19wcm90b19fOm51bGwsIiVBZ2dy''@;'; put 'put ''ZWdhdGVFcnJvciUiOnR5cGVvZiBBZ2dyZWdhdGVFcnJvcj4idSI/STpBZ2dyZWdhdGVFcnJvciwiJUFycmF5JSI6QXJyYXksIiVBcnJheUJ1ZmZlciUiOnR5cGVvZiBBcnJheUJ1ZmZlcj4idSI/STpBcnJheUJ1ZmZlciwiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIjpfZSYmVGU/VGUoW11b''@;'; put 'put ''U3ltYm9sLml0ZXJhdG9yXSgpKTpJLCIlQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6SSwiJUFzeW5jRnVuY3Rpb24lIjpiLCIlQXN5bmNHZW5lcmF0b3IlIjpiLCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiOmIsIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6YiwiJUF0b21p''@;'; put 'put ''Y3MlIjp0eXBlb2YgQXRvbWljcz4idSI/STpBdG9taWNzLCIlQmlnSW50JSI6dHlwZW9mIEJpZ0ludD4idSI/STpCaWdJbnQsIiVCaWdJbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ0ludDY0QXJyYXk+InUiP0k6QmlnSW50NjRBcnJheSwiJUJpZ1VpbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ1VpbnQ2''@;'; put 'put ''NEFycmF5PiJ1Ij9JOkJpZ1VpbnQ2NEFycmF5LCIlQm9vbGVhbiUiOkJvb2xlYW4sIiVEYXRhVmlldyUiOnR5cGVvZiBEYXRhVmlldz4idSI/STpEYXRhVmlldywiJURhdGUlIjpEYXRlLCIlZGVjb2RlVVJJJSI6ZGVjb2RlVVJJLCIlZGVjb2RlVVJJQ29tcG9uZW50JSI6ZGVjb2RlVVJJQ29t''@;'; put 'put ''cG9uZW50LCIlZW5jb2RlVVJJJSI6ZW5jb2RlVVJJLCIlZW5jb2RlVVJJQ29tcG9uZW50JSI6ZW5jb2RlVVJJQ29tcG9uZW50LCIlRXJyb3IlIjpnLCIlZXZhbCUiOmV2YWwsIiVFdmFsRXJyb3IlIjpCLCIlRmxvYXQxNkFycmF5JSI6dHlwZW9mIEZsb2F0MTZBcnJheT4idSI/STpGbG9hdDE2''@;'; put 'put ''QXJyYXksIiVGbG9hdDMyQXJyYXklIjp0eXBlb2YgRmxvYXQzMkFycmF5PiJ1Ij9JOkZsb2F0MzJBcnJheSwiJUZsb2F0NjRBcnJheSUiOnR5cGVvZiBGbG9hdDY0QXJyYXk+InUiP0k6RmxvYXQ2NEFycmF5LCIlRmluYWxpemF0aW9uUmVnaXN0cnklIjp0eXBlb2YgRmluYWxpemF0aW9uUmVn''@;'; put 'put ''aXN0cnk+InUiP0k6RmluYWxpemF0aW9uUmVnaXN0cnksIiVGdW5jdGlvbiUiOmVlLCIlR2VuZXJhdG9yRnVuY3Rpb24lIjpiLCIlSW50OEFycmF5JSI6dHlwZW9mIEludDhBcnJheT4idSI/STpJbnQ4QXJyYXksIiVJbnQxNkFycmF5JSI6dHlwZW9mIEludDE2QXJyYXk+InUiP0k6SW50MTZB''@;'; put 'put ''cnJheSwiJUludDMyQXJyYXklIjp0eXBlb2YgSW50MzJBcnJheT4idSI/STpJbnQzMkFycmF5LCIlaXNGaW5pdGUlIjppc0Zpbml0ZSwiJWlzTmFOJSI6aXNOYU4sIiVJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZShUZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKTpJLCIlSlNPTiUiOiJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgSlNPTj9KU09OOkksIiVNYXAlIjp0eXBlb2YgTWFwPiJ1Ij9JOk1hcCwiJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIE1hcD4idSJ8fCFfZXx8IVRlP0k6VGUoKG5ldyBNYXApW1N5bWJvbC5pdGVyYXRvcl0oKSksIiVNYXRoJSI6TWF0aCwiJU51bWJlciUi''@;'; put 'put ''Ok51bWJlciwiJU9iamVjdCUiOl8sIiVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJSI6bmUsIiVwYXJzZUZsb2F0JSI6cGFyc2VGbG9hdCwiJXBhcnNlSW50JSI6cGFyc2VJbnQsIiVQcm9taXNlJSI6dHlwZW9mIFByb21pc2U+InUiP0k6UHJvbWlzZSwiJVByb3h5JSI6dHlwZW9m''@;'; put 'put ''IFByb3h5PiJ1Ij9JOlByb3h5LCIlUmFuZ2VFcnJvciUiOncsIiVSZWZlcmVuY2VFcnJvciUiOlAsIiVSZWZsZWN0JSI6dHlwZW9mIFJlZmxlY3Q+InUiP0k6UmVmbGVjdCwiJVJlZ0V4cCUiOlJlZ0V4cCwiJVNldCUiOnR5cGVvZiBTZXQ+InUiP0k6U2V0LCIlU2V0SXRlcmF0b3JQcm90b3R5''@;'; put 'put ''cGUlIjp0eXBlb2YgU2V0PiJ1Inx8IV9lfHwhVGU/STpUZSgobmV3IFNldClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJVNoYXJlZEFycmF5QnVmZmVyJSI6dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPiJ1Ij9JOlNoYXJlZEFycmF5QnVmZmVyLCIlU3RyaW5nJSI6U3RyaW5nLCIlU3RyaW5nSXRl''@;'; put 'put ''cmF0b3JQcm90b3R5cGUlIjpfZSYmVGU/VGUoIiJbU3ltYm9sLml0ZXJhdG9yXSgpKTpJLCIlU3ltYm9sJSI6X2U/U3ltYm9sOkksIiVTeW50YXhFcnJvciUiOkYsIiVUaHJvd1R5cGVFcnJvciUiOm1lLCIlVHlwZWRBcnJheSUiOngsIiVUeXBlRXJyb3IlIjpPLCIlVWludDhBcnJheSUiOnR5''@;'; put 'put ''cGVvZiBVaW50OEFycmF5PiJ1Ij9JOlVpbnQ4QXJyYXksIiVVaW50OENsYW1wZWRBcnJheSUiOnR5cGVvZiBVaW50OENsYW1wZWRBcnJheT4idSI/STpVaW50OENsYW1wZWRBcnJheSwiJVVpbnQxNkFycmF5JSI6dHlwZW9mIFVpbnQxNkFycmF5PiJ1Ij9JOlVpbnQxNkFycmF5LCIlVWludDMy''@;'; put 'put ''QXJyYXklIjp0eXBlb2YgVWludDMyQXJyYXk+InUiP0k6VWludDMyQXJyYXksIiVVUklFcnJvciUiOnosIiVXZWFrTWFwJSI6dHlwZW9mIFdlYWtNYXA+InUiP0k6V2Vha01hcCwiJVdlYWtSZWYlIjp0eXBlb2YgV2Vha1JlZj4idSI/STpXZWFrUmVmLCIlV2Vha1NldCUiOnR5cGVvZiBXZWFr''@;'; put 'put ''U2V0PiJ1Ij9JOldlYWtTZXQsIiVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUiOnAsIiVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklIjpWLCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSI6aWUsIiVPYmplY3QuZ2V0UHJvdG90eXBlT2YlIjpTZSwiJU1hdGguYWJzJSI6TiwiJU1hdGguZmxvb3Il''@;'; put 'put ''IjpMLCIlTWF0aC5tYXglIjpLLCIlTWF0aC5taW4lIjpVLCIlTWF0aC5wb3clIjpXLCIlTWF0aC5yb3VuZCUiOlksIiVNYXRoLnNpZ24lIjpxLCIlUmVmbGVjdC5nZXRQcm90b3R5cGVPZiUiOmplfTtpZihUZSl0cnl7bnVsbC5lcnJvcn1jYXRjaCh2ZSl7dmFyIFQ9VGUoVGUodmUpKTtDWyIl''@;'; put 'put ''RXJyb3IucHJvdG90eXBlJSJdPVR9dmFyIEg9ZnVuY3Rpb24gdmUoWGUpe3ZhciB6ZTtpZigiJUFzeW5jRnVuY3Rpb24lIj09PVhlKXplPUooImFzeW5jIGZ1bmN0aW9uICgpIHt9Iik7ZWxzZSBpZigiJUdlbmVyYXRvckZ1bmN0aW9uJSI9PT1YZSl6ZT1KKCJmdW5jdGlvbiogKCkge30iKTtl''@;'; put 'put ''bHNlIGlmKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiPT09WGUpemU9SigiYXN5bmMgZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yJSI9PT1YZSl7dmFyIERlPXZlKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiKTtEZSYmKHplPURlLnByb3RvdHlwZSl9ZWxz''@;'; put 'put ''ZSBpZigiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIj09PVhlKXt2YXIgRmU9dmUoIiVBc3luY0dlbmVyYXRvciUiKTtGZSYmVGUmJih6ZT1UZShGZS5wcm90b3R5cGUpKX1yZXR1cm4gQ1tYZV09emUsemV9LGo9e19fcHJvdG9fXzpudWxsLCIlQXJyYXlCdWZmZXJQcm90b3R5cGUlIjpbIkFy''@;'; put 'put ''cmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvdHlwZSUiOlsiQXJyYXkiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG9fZW50cmllcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJlbnRyaWVzIl0sIiVBcnJheVByb3RvX2ZvckVhY2glIjpbIkFycmF5IiwicHJvdG90eXBlIiwi''@;'; put 'put ''Zm9yRWFjaCJdLCIlQXJyYXlQcm90b19rZXlzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImtleXMiXSwiJUFycmF5UHJvdG9fdmFsdWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsInZhbHVlcyJdLCIlQXN5bmNGdW5jdGlvblByb3RvdHlwZSUiOlsiQXN5bmNGdW5jdGlvbiIsInByb3RvdHlw''@;'; put 'put ''ZSJdLCIlQXN5bmNHZW5lcmF0b3IlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVCb29sZWFuUHJvdG90eXBlJSI6WyJC''@;'; put 'put ''b29sZWFuIiwicHJvdG90eXBlIl0sIiVEYXRhVmlld1Byb3RvdHlwZSUiOlsiRGF0YVZpZXciLCJwcm90b3R5cGUiXSwiJURhdGVQcm90b3R5cGUlIjpbIkRhdGUiLCJwcm90b3R5cGUiXSwiJUVycm9yUHJvdG90eXBlJSI6WyJFcnJvciIsInByb3RvdHlwZSJdLCIlRXZhbEVycm9yUHJvdG90''@;'; put 'put ''eXBlJSI6WyJFdmFsRXJyb3IiLCJwcm90b3R5cGUiXSwiJUZsb2F0MzJBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVGbG9hdDY0QXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0NjRBcnJheSIsInByb3RvdHlwZSJdLCIlRnVuY3Rpb25Qcm90b3R5cGUlIjpb''@;'; put 'put ''IkZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3IlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVJbnQ4QXJyYXlQcm90b3R5cGUlIjpb''@;'; put 'put ''IkludDhBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MTZBcnJheVByb3RvdHlwZSUiOlsiSW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MzJBcnJheVByb3RvdHlwZSUiOlsiSW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlSlNPTlBhcnNlJSI6WyJKU09OIiwicGFyc2UiXSwiJUpTT05T''@;'; put 'put ''dHJpbmdpZnklIjpbIkpTT04iLCJzdHJpbmdpZnkiXSwiJU1hcFByb3RvdHlwZSUiOlsiTWFwIiwicHJvdG90eXBlIl0sIiVOdW1iZXJQcm90b3R5cGUlIjpbIk51bWJlciIsInByb3RvdHlwZSJdLCIlT2JqZWN0UHJvdG90eXBlJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiXSwiJU9ialByb3Rv''@;'; put 'put ''X3RvU3RyaW5nJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyJdLCIlT2JqUHJvdG9fdmFsdWVPZiUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidmFsdWVPZiJdLCIlUHJvbWlzZVByb3RvdHlwZSUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSJdLCIlUHJvbWlzZVByb3RvX3RoZW4l''@;'; put 'put ''IjpbIlByb21pc2UiLCJwcm90b3R5cGUiLCJ0aGVuIl0sIiVQcm9taXNlX2FsbCUiOlsiUHJvbWlzZSIsImFsbCJdLCIlUHJvbWlzZV9yZWplY3QlIjpbIlByb21pc2UiLCJyZWplY3QiXSwiJVByb21pc2VfcmVzb2x2ZSUiOlsiUHJvbWlzZSIsInJlc29sdmUiXSwiJVJhbmdlRXJyb3JQcm90''@;'; put 'put ''b3R5cGUlIjpbIlJhbmdlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSI6WyJSZWZlcmVuY2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVnRXhwUHJvdG90eXBlJSI6WyJSZWdFeHAiLCJwcm90b3R5cGUiXSwiJVNldFByb3RvdHlwZSUiOlsiU2V0IiwicHJv''@;'; put 'put ''dG90eXBlIl0sIiVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiU2hhcmVkQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJVN0cmluZ1Byb3RvdHlwZSUiOlsiU3RyaW5nIiwicHJvdG90eXBlIl0sIiVTeW1ib2xQcm90b3R5cGUlIjpbIlN5bWJvbCIsInByb3RvdHlwZSJdLCIlU3lu''@;'; put 'put ''dGF4RXJyb3JQcm90b3R5cGUlIjpbIlN5bnRheEVycm9yIiwicHJvdG90eXBlIl0sIiVUeXBlZEFycmF5UHJvdG90eXBlJSI6WyJUeXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVUeXBlRXJyb3JQcm90b3R5cGUlIjpbIlR5cGVFcnJvciIsInByb3RvdHlwZSJdLCIlVWludDhBcnJheVByb3Rv''@;'; put 'put ''dHlwZSUiOlsiVWludDhBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4Q2xhbXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MTZBcnJheVByb3RvdHlwZSUiOlsiVWludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQzMkFycmF5''@;'; put 'put ''UHJvdG90eXBlJSI6WyJVaW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlVVJJRXJyb3JQcm90b3R5cGUlIjpbIlVSSUVycm9yIiwicHJvdG90eXBlIl0sIiVXZWFrTWFwUHJvdG90eXBlJSI6WyJXZWFrTWFwIiwicHJvdG90eXBlIl0sIiVXZWFrU2V0UHJvdG90eXBlJSI6WyJXZWFrU2V0Iiwi''@;'; put 'put ''cHJvdG90eXBlIl19LEU9eSg4NjEyKSxtPXkoODgyNCksQT1FLmNhbGwocCxBcnJheS5wcm90b3R5cGUuY29uY2F0KSxhZT1FLmNhbGwoVixBcnJheS5wcm90b3R5cGUuc3BsaWNlKSx0ZT1FLmNhbGwocCxTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLHNlPUUuY2FsbChwLFN0cmluZy5wcm90''@;'; put 'put ''b3R5cGUuc2xpY2UpLHdlPUUuY2FsbChwLFJlZ0V4cC5wcm90b3R5cGUuZXhlYyksVWU9L1teJS5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCUkKSkvZyxKZT0vXFwoXFwpPy9n''@;'; put 'put ''LHhlPWZ1bmN0aW9uKFhlLHplKXt2YXIgRmUsRGU9WGU7aWYobShqLERlKSYmKERlPSIlIisoRmU9altEZV0pWzBdKyIlIiksbShDLERlKSl7dmFyIE9lPUNbRGVdO2lmKE9lPT09YiYmKE9lPUgoRGUpKSx0eXBlb2YgT2U+InUiJiYhemUpdGhyb3cgbmV3IE8oImludHJpbnNpYyAiK1hlKyIg''@;'; put 'put ''ZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhIik7cmV0dXJue2FsaWFzOkZlLG5hbWU6RGUsdmFsdWU6T2V9fXRocm93IG5ldyBGKCJpbnRyaW5zaWMgIitYZSsiIGRvZXMgbm90IGV4aXN0ISIpfTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFhlLHplKXtp''@;'; put 'put ''Zigic3RyaW5nIiE9dHlwZW9mIFhlfHwwPT09WGUubGVuZ3RoKXRocm93IG5ldyBPKCJpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmImJvb2xlYW4iIT10eXBlb2YgemUpdGhyb3cgbmV3IE8oJyJhbGxvd01pc3Npbmci''@;'; put 'put ''IGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7aWYobnVsbD09PXdlKC9eJT9bXiVdKiU/JC8sWGUpKXRocm93IG5ldyBGKCJgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lIik7dmFyIERl''@;'; put 'put ''PWZ1bmN0aW9uKFhlKXt2YXIgemU9c2UoWGUsMCwxKSxEZT1zZShYZSwtMSk7aWYoIiUiPT09emUmJiIlIiE9PURlKXRocm93IG5ldyBGKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgIik7aWYoIiUiPT09RGUmJiIlIiE9PXplKXRocm93IG5ldyBGKCJp''@;'; put 'put ''bnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgIik7dmFyIEZlPVtdO3JldHVybiB0ZShYZSxVZSxmdW5jdGlvbihPZSxJZSxWZSxrZSl7RmVbRmUubGVuZ3RoXT1WZT90ZShrZSxKZSwiJDEiKTpJZXx8T2V9KSxGZX0oWGUpLEZlPURlLmxlbmd0aD4wP0RlWzBd''@;'; put 'put ''OiIiLE9lPXhlKCIlIitGZSsiJSIsemUpLEllPU9lLm5hbWUsVmU9T2UudmFsdWUsa2U9ITEsQWU9T2UuYWxpYXM7QWUmJihGZT1BZVswXSxhZShEZSxBKFswLDFdLEFlKSkpO2Zvcih2YXIgX3Q9MSxudD0hMDtfdDxEZS5sZW5ndGg7X3QrPTEpe3ZhciBRZT1EZVtfdF0sdW49c2UoUWUsMCwx''@;'; put 'put ''KSx5dD1zZShRZSwtMSk7aWYoKCciJz09PXVufHwiJyI9PT11bnx8ImAiPT09dW58fCciJz09PXl0fHwiJyI9PT15dHx8ImAiPT09eXQpJiZ1biE9PXl0KXRocm93IG5ldyBGKCJwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzIik7aWYoKCJjb25z''@;'; put 'put ''dHJ1Y3RvciI9PT1RZXx8IW50KSYmKGtlPSEwKSxtKEMsSWU9IiUiKyhGZSs9Ii4iK1FlKSsiJSIpKVZlPUNbSWVdO2Vsc2UgaWYobnVsbCE9VmUpe2lmKCEoUWUgaW4gVmUpKXtpZighemUpdGhyb3cgbmV3IE8oImJhc2UgaW50cmluc2ljIGZvciAiK1hlKyIgZXhpc3RzLCBidXQgdGhlIHBy''@;'; put 'put ''b3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuIik7cmV0dXJufWlmKG5lJiZfdCsxPj1EZS5sZW5ndGgpe3ZhciBNdD1uZShWZSxRZSk7VmU9KG50PSEhTXQpJiYiZ2V0ImluIE10JiYhKCJvcmlnaW5hbFZhbHVlImluIE10LmdldCk/TXQuZ2V0OlZlW1FlXX1lbHNlIG50PW0oVmUsUWUpLFZlPVZl''@;'; put 'put ''W1FlXTtudCYmIWtlJiYoQ1tJZV09VmUpfX1yZXR1cm4gVmV9fSw4ODk5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODg5Mik7dWUuZXhwb3J0cz1JLmdldFByb3RvdHlwZU9mfHxudWxsfSw0NDM6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz10eXBlb2YgUmVmbGVjdDwi''@;'; put 'put ''dSImJlJlZmxlY3QuZ2V0UHJvdG90eXBlT2Z8fG51bGx9LDE2MTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NDMpLF89eSg4ODk5KSxnPXkoNjUwNCk7dWUuZXhwb3J0cz1JP2Z1bmN0aW9uKHcpe3JldHVybiBJKHcpfTpfP2Z1bmN0aW9uKHcpe2lmKCF3fHwib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIHcmJiJmdW5jdGlvbiIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoImdldFByb3RvOiBub3QgYW4gb2JqZWN0Iik7cmV0dXJuIF8odyl9Omc/ZnVuY3Rpb24odyl7cmV0dXJuIGcodyl9Om51bGx9LDY5MDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU9iamVjdC5n''@;'; put 'put ''ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9LDcyOTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2OTApO2lmKEkpdHJ5e0koW10sImxlbmd0aCIpfWNhdGNoe0k9bnVsbH11ZS5leHBvcnRzPUl9LDY0NTg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbiB5KEkp''@;'; put 'put ''e2lmKG51bGw9PT1JfHwib2JqZWN0IiE9dHlwZW9mIEkpcmV0dXJuIEk7aWYoSSBpbnN0YW5jZW9mIE9iamVjdCl2YXIgXz17X19wcm90b19fOlgoSSl9O2Vsc2UgXz1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhJKS5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKGcpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLGcsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJLGcpKX0pLF99O3ZhciBYPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oSSl7cmV0dXJuIEkuX19wcm90b19ffX0sNzc6KHVlLFgseSk9Pnt2YXIgTyx6LEk9eSg0''@;'; put 'put ''MTU1KSxfPXkoNTEwOCksZz15KDU0NDMpLEI9eSgyMTYxKSx3PXkoODUyMCksUD15KDY0NTgpLEY9eSg5NTM5KTtmdW5jdGlvbiBMKG5lLGllKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobmUsTyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGllfX0pfSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yPyhPPVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnF1ZXVlIiksej1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5wcmV2aW91cyIpKTooTz0iX19fZ3JhY2VmdWwtZnMucXVldWUiLHo9Il9fX2dyYWNlZnVsLWZzLnByZXZpb3VzIik7dmFyIHEs''@;'; put 'put ''Sz1mdW5jdGlvbiBOKCl7fTtmdW5jdGlvbiBXKG5lKXtCKG5lKSxuZS5ncmFjZWZ1bGlmeT1XLG5lLmNyZWF0ZVJlYWRTdHJlYW09ZnVuY3Rpb24gc2Uob3QseGUpe3JldHVybiBuZXcgbmUuUmVhZFN0cmVhbShvdCx4ZSl9LG5lLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0aW9uIHdlKG90LHhl''@;'; put 'put ''KXtyZXR1cm4gbmV3IG5lLldyaXRlU3RyZWFtKG90LHhlKX07dmFyIGllPW5lLnJlYWRGaWxlO25lLnJlYWRGaWxlPWZ1bmN0aW9uIGxlKG90LHhlLHZlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeGUmJih2ZT14ZSx4ZT1udWxsKSxmdW5jdGlvbiBYZSh6ZSxEZSxGZSxPZSl7cmV0dXJu''@;'; put 'put ''IGllKHplLERlLGZ1bmN0aW9uKEllKXshSWV8fCJFTUZJTEUiIT09SWUuY29kZSYmIkVORklMRSIhPT1JZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBGZSYmRmUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlkoW1hlLFt6ZSxEZSxGZV0sSWUsT2V8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9''@;'; put 'put ''KG90LHhlLHZlKX07dmFyIG1lPW5lLndyaXRlRmlsZTtuZS53cml0ZUZpbGU9ZnVuY3Rpb24gX2Uob3QseGUsdmUsWGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPW51bGwpLGZ1bmN0aW9uIHplKERlLEZlLE9lLEllLFZlKXtyZXR1cm4gbWUoRGUsRmUsT2UsZnVu''@;'; put 'put ''Y3Rpb24oa2UpeyFrZXx8IkVNRklMRSIhPT1rZS5jb2RlJiYiRU5GSUxFIiE9PWtlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WShbemUsW0RlLEZlLE9lLEllXSxrZSxWZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ob3QseGUsdmUs''@;'; put 'put ''WGUpfTt2YXIgVGU9bmUuYXBwZW5kRmlsZTtUZSYmKG5lLmFwcGVuZEZpbGU9ZnVuY3Rpb24gU2Uob3QseGUsdmUsWGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPW51bGwpLGZ1bmN0aW9uIHplKERlLEZlLE9lLEllLFZlKXtyZXR1cm4gVGUoRGUsRmUsT2UsZnVu''@;'; put 'put ''Y3Rpb24oa2UpeyFrZXx8IkVNRklMRSIhPT1rZS5jb2RlJiYiRU5GSUxFIiE9PWtlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WShbemUsW0RlLEZlLE9lLEllXSxrZSxWZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ob3QseGUsdmUs''@;'; put 'put ''WGUpfSk7dmFyIGplPW5lLmNvcHlGaWxlO2plJiYobmUuY29weUZpbGU9ZnVuY3Rpb24gVihvdCx4ZSx2ZSxYZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9MCksZnVuY3Rpb24gemUoRGUsRmUsT2UsSWUsVmUpe3JldHVybiBqZShEZSxGZSxPZSxmdW5jdGlvbihr''@;'; put 'put ''ZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNvZGUmJiJFTkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpZKFt6ZSxbRGUsRmUsT2UsSWVdLGtlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShvdCx4ZSx2ZSxYZSl9KTt2''@;'; put 'put ''YXIgcD1uZS5yZWFkZGlyO25lLnJlYWRkaXI9ZnVuY3Rpb24geChvdCx4ZSx2ZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHhlJiYodmU9eGUseGU9bnVsbCk7dmFyIFhlPWIudGVzdChJLnZlcnNpb24pP2Z1bmN0aW9uKEZlLE9lLEllLFZlKXtyZXR1cm4gcChGZSx6ZShGZSxPZSxJZSxWZSkpfTpm''@;'; put 'put ''dW5jdGlvbihGZSxPZSxJZSxWZSl7cmV0dXJuIHAoRmUsT2UsemUoRmUsT2UsSWUsVmUpKX07cmV0dXJuIFhlKG90LHhlLHZlKTtmdW5jdGlvbiB6ZShEZSxGZSxPZSxJZSl7cmV0dXJuIGZ1bmN0aW9uKFZlLGtlKXshVmV8fCJFTUZJTEUiIT09VmUuY29kZSYmIkVORklMRSIhPT1WZS5jb2Rl''@;'; put 'put ''PyhrZSYma2Uuc29ydCYma2Uuc29ydCgpLCJmdW5jdGlvbiI9PXR5cGVvZiBPZSYmT2UuY2FsbCh0aGlzLFZlLGtlKSk6WShbWGUsW0RlLEZlLE9lXSxWZSxJZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9fX07dmFyIGI9L152WzAtNV1cLi87aWYoInYwLjgiPT09SS52ZXJzaW9uLnN1YnN0''@;'; put 'put ''cigwLDQpKXt2YXIgQz13KG5lKTttPUMuUmVhZFN0cmVhbSxhZT1DLldyaXRlU3RyZWFtfXZhciBUPW5lLlJlYWRTdHJlYW07VCYmKG0ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVC5wcm90b3R5cGUpLG0ucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24gQSgpe3ZhciBvdD10aGlzO0plKG90LnBh''@;'; put 'put ''dGgsb3QuZmxhZ3Msb3QubW9kZSxmdW5jdGlvbih4ZSx2ZSl7eGU/KG90LmF1dG9DbG9zZSYmb3QuZGVzdHJveSgpLG90LmVtaXQoImVycm9yIix4ZSkpOihvdC5mZD12ZSxvdC5lbWl0KCJvcGVuIix2ZSksb3QucmVhZCgpKX0pfSk7dmFyIEg9bmUuV3JpdGVTdHJlYW07SCYmKGFlLnByb3Rv''@;'; put 'put ''dHlwZT1PYmplY3QuY3JlYXRlKEgucHJvdG90eXBlKSxhZS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbiB0ZSgpe3ZhciBvdD10aGlzO0plKG90LnBhdGgsb3QuZmxhZ3Msb3QubW9kZSxmdW5jdGlvbih4ZSx2ZSl7eGU/KG90LmRlc3Ryb3koKSxvdC5lbWl0KCJlcnJvciIseGUpKToob3QuZmQ9''@;'; put 'put ''dmUsb3QuZW1pdCgib3BlbiIsdmUpKX0pfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLCJSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG19LHNldDpmdW5jdGlvbihvdCl7bT1vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkobmUsIldyaXRlU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGFlfSxzZXQ6ZnVuY3Rpb24ob3Qpe2FlPW90fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBqPW07T2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLCJGaWxlUmVhZFN0cmVhbSIse2dldDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBqfSxzZXQ6ZnVuY3Rpb24ob3Qpe2o9b3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIEU9YWU7ZnVuY3Rpb24gbShvdCx4ZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtPyhULmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTptLmFwcGx5KE9iamVj''@;'; put 'put ''dC5jcmVhdGUobS5wcm90b3R5cGUpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYWUob3QseGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYWU/KEguYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOmFlLmFwcGx5KE9iamVjdC5jcmVhdGUoYWUucHJvdG90eXBlKSxhcmd1bWVudHMpfU9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShuZSwiRmlsZVdyaXRlU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEV9LHNldDpmdW5jdGlvbihvdCl7RT1vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgVWU9bmUub3BlbjtmdW5jdGlvbiBKZShvdCx4ZSx2ZSxYZSl7cmV0dXJuImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksZnVuY3Rpb24gemUoRGUsRmUsT2UsSWUsVmUpe3JldHVybiBVZShEZSxGZSxPZSxmdW5jdGlvbihrZSxBZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNvZGUmJiJFTkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUm''@;'; put 'put ''JkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpZKFt6ZSxbRGUsRmUsT2UsSWVdLGtlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShvdCx4ZSx2ZSxYZSl9cmV0dXJuIG5lLm9wZW49SmUsbmV9ZnVuY3Rpb24gWShuZSl7SygiRU5RVUVVRSIsbmVbMF0ubmFtZSxuZVsxXSksZ1tPXS5w''@;'; put 'put ''dXNoKG5lKSxKKCl9ZnVuY3Rpb24gZWUoKXtmb3IodmFyIG5lPURhdGUubm93KCksaWU9MDtpZTxnW09dLmxlbmd0aDsrK2llKWdbT11baWVdLmxlbmd0aD4yJiYoZ1tPXVtpZV1bM109bmUsZ1tPXVtpZV1bNF09bmUpO0ooKX1mdW5jdGlvbiBKKCl7aWYoY2xlYXJUaW1lb3V0KHEpLHE9dm9p''@;'; put 'put ''ZCAwLDAhPT1nW09dLmxlbmd0aCl7dmFyIG5lPWdbT10uc2hpZnQoKSxpZT1uZVswXSxsZT1uZVsxXSxtZT1uZVsyXSxfZT1uZVszXSxUZT1uZVs0XTtpZih2b2lkIDA9PT1fZSlLKCJSRVRSWSIsaWUubmFtZSxsZSksaWUuYXBwbHkobnVsbCxsZSk7ZWxzZSBpZihEYXRlLm5vdygpLV9lPj02''@;'; put 'put ''ZTQpe0soIlRJTUVPVVQiLGllLm5hbWUsbGUpO3ZhciBTZT1sZS5wb3AoKTsiZnVuY3Rpb24iPT10eXBlb2YgU2UmJlNlLmNhbGwobnVsbCxtZSl9ZWxzZXt2YXIgamU9RGF0ZS5ub3coKS1UZSxWPU1hdGgubWF4KFRlLV9lLDEpO2plPj1NYXRoLm1pbigxLjIqViwxMDApPyhLKCJSRVRSWSIs''@;'; put 'put ''aWUubmFtZSxsZSksaWUuYXBwbHkobnVsbCxsZS5jb25jYXQoW19lXSkpKTpnW09dLnB1c2gobmUpfXZvaWQgMD09PXEmJihxPXNldFRpbWVvdXQoSiwwKSl9fUYuZGVidWdsb2c/Sz1GLmRlYnVnbG9nKCJnZnM0Iik6L1xiZ2ZzNFxiL2kudGVzdChJLmVudi5OT0RFX0RFQlVHfHwiIikmJihL''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIG5lPUYuZm9ybWF0LmFwcGx5KEYsYXJndW1lbnRzKTtuZT0iR0ZTNDogIituZS5zcGxpdCgvXG4vKS5qb2luKCJcbkdGUzQ6ICIpLF8uZXJyb3IobmUpfSksZ1tPXXx8KEwoZyx5LmdbT118fFtdKSxnLmNsb3NlPWZ1bmN0aW9uKG5lKXtmdW5jdGlvbiBpZShsZSxt''@;'; put 'put ''ZSl7cmV0dXJuIG5lLmNhbGwoZyxsZSxmdW5jdGlvbihfZSl7X2V8fGVlKCksImZ1bmN0aW9uIj09dHlwZW9mIG1lJiZtZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLHose3ZhbHVlOm5lfSksaWV9KGcuY2xvc2UpLGcuY2xvc2VTeW5j''@;'; put 'put ''PWZ1bmN0aW9uKG5lKXtmdW5jdGlvbiBpZShsZSl7bmUuYXBwbHkoZyxhcmd1bWVudHMpLGVlKCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpZSx6LHt2YWx1ZTpuZX0pLGllfShnLmNsb3NlU3luYyksL1xiZ2ZzNFxiL2kudGVzdChJLmVudi5OT0RFX0RFQlVHfHwiIikmJkkub24o''@;'; put 'put ''ImV4aXQiLGZ1bmN0aW9uKCl7SyhnW09dKSx5KDkyODIpLmVxdWFsKGdbT10ubGVuZ3RoLDApfSkpLHkuZ1tPXXx8TCh5LmcsZ1tPXSksdWUuZXhwb3J0cz1XKFAoZykpLEkuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIJiYhZy5fX3BhdGNoZWQmJih1ZS5leHBvcnRzPVcoZyks''@;'; put 'put ''Zy5fX3BhdGNoZWQ9ITApfSw4NTIwOih1ZSxYLHkpPT57dmFyIEk9eSg0MTU1KSxfPXkoMjgzMCkuU3RyZWFtO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCKXtyZXR1cm57UmVhZFN0cmVhbTpmdW5jdGlvbiB3KEYsTyl7aWYoISh0aGlzIGluc3RhbmNlb2YgdykpcmV0dXJuIG5ldyB3KEYsTyk7''@;'; put 'put ''Xy5jYWxsKHRoaXMpO3ZhciB6PXRoaXM7dGhpcy5wYXRoPUYsdGhpcy5mZD1udWxsLHRoaXMucmVhZGFibGU9ITAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5mbGFncz0iciIsdGhpcy5tb2RlPTQzOCx0aGlzLmJ1ZmZlclNpemU9NjU1MzYsTz1PfHx7fTtmb3IodmFyIE49T2JqZWN0LmtleXMoTyks''@;'; put 'put ''TD0wLEs9Ti5sZW5ndGg7TDxLO0wrKyl7dmFyIFU9TltMXTt0aGlzW1VdPU9bVV19aWYodGhpcy5lbmNvZGluZyYmdGhpcy5zZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKSx2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9y''@;'; put 'put ''KCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodm9pZCAwPT09dGhpcy5lbmQpdGhpcy5lbmQ9MS8wO2Vsc2UgaWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLmVuZCl0aHJvdyBUeXBlRXJyb3IoImVuZCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydD50aGlzLmVuZCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoInN0YXJ0IG11c3QgYmUgPD0gZW5kIik7dGhpcy5wb3M9dGhpcy5zdGFydH1udWxsPT09dGhpcy5mZD9CLm9wZW4odGhpcy5wYXRoLHRoaXMuZmxhZ3MsdGhpcy5tb2RlLGZ1bmN0aW9uKFcsWSl7aWYoVylyZXR1cm4gei5lbWl0KCJlcnJvciIsVyksdm9pZCh6LnJlYWRhYmxl''@;'; put 'put ''PSExKTt6LmZkPVksei5lbWl0KCJvcGVuIixZKSx6Ll9yZWFkKCl9KTpJLm5leHRUaWNrKGZ1bmN0aW9uKCl7ei5fcmVhZCgpfSl9LFdyaXRlU3RyZWFtOmZ1bmN0aW9uIFAoRixPKXtpZighKHRoaXMgaW5zdGFuY2VvZiBQKSlyZXR1cm4gbmV3IFAoRixPKTtfLmNhbGwodGhpcyksdGhpcy5w''@;'; put 'put ''YXRoPUYsdGhpcy5mZD1udWxsLHRoaXMud3JpdGFibGU9ITAsdGhpcy5mbGFncz0idyIsdGhpcy5lbmNvZGluZz0iYmluYXJ5Iix0aGlzLm1vZGU9NDM4LHRoaXMuYnl0ZXNXcml0dGVuPTAsTz1PfHx7fTtmb3IodmFyIHo9T2JqZWN0LmtleXMoTyksTj0wLEw9ei5sZW5ndGg7TjxMO04rKyl7''@;'; put 'put ''dmFyIEs9eltOXTt0aGlzW0tdPU9bS119aWYodm9pZCAwIT09dGhpcy5zdGFydCl7aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLnN0YXJ0KXRocm93IFR5cGVFcnJvcigic3RhcnQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHRoaXMuc3RhcnQ8MCl0aHJvdyBuZXcgRXJyb3IoInN0YXJ0IG11c3Qg''@;'; put 'put ''YmUgPj0gemVybyIpO3RoaXMucG9zPXRoaXMuc3RhcnR9dGhpcy5idXN5PSExLHRoaXMuX3F1ZXVlPVtdLG51bGw9PT10aGlzLmZkJiYodGhpcy5fb3Blbj1CLm9wZW4sdGhpcy5fcXVldWUucHVzaChbdGhpcy5fb3Blbix0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsdm9pZCAwXSks''@;'; put 'put ''dGhpcy5mbHVzaCgpKX19fX0sMjE2MToodWUsWCx5KT0+e3ZhciBJPXkoNDE1NSksXz15KDMyMDgpLGc9SS5jd2QsQj1udWxsLHc9SS5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk18fEkucGxhdGZvcm07SS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4gQnx8KEI9Zy5jYWxsKEkpKSxCfTt0cnl7SS5j''@;'; put 'put ''d2QoKX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIEkuY2hkaXIpe3ZhciBQPUkuY2hkaXI7SS5jaGRpcj1mdW5jdGlvbihPKXtCPW51bGwsUC5jYWxsKEksTyl9LE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKEkuY2hkaXIsUCl9dWUuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbiBGKE8pe2Z1bmN0aW9uIEwoSil7cmV0dXJuIEomJmZ1bmN0aW9uKG5lLGllLGxlKXtyZXR1cm4gSi5jYWxsKE8sbmUsaWUsZnVuY3Rpb24obWUpe2VlKG1lKSYmKG1lPW51bGwpLGxlJiZsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19ZnVuY3Rpb24gSyhKKXtyZXR1cm4gSiYm''@;'; put 'put ''ZnVuY3Rpb24obmUsaWUpe3RyeXtyZXR1cm4gSi5jYWxsKE8sbmUsaWUpfWNhdGNoKGxlKXtpZighZWUobGUpKXRocm93IGxlfX19ZnVuY3Rpb24gVShKKXtyZXR1cm4gSiYmZnVuY3Rpb24obmUsaWUsbGUsbWUpe3JldHVybiBKLmNhbGwoTyxuZSxpZSxsZSxmdW5jdGlvbihfZSl7ZWUoX2Up''@;'; put 'put ''JiYoX2U9bnVsbCksbWUmJm1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBXKEope3JldHVybiBKJiZmdW5jdGlvbihuZSxpZSxsZSl7dHJ5e3JldHVybiBKLmNhbGwoTyxuZSxpZSxsZSl9Y2F0Y2gobWUpe2lmKCFlZShtZSkpdGhyb3cgbWV9fX1mdW5jdGlvbiBZKEope3Jl''@;'; put 'put ''dHVybiBKJiZmdW5jdGlvbihuZSxpZSxsZSl7ZnVuY3Rpb24gbWUoX2UsVGUpe1RlJiYoVGUudWlkPDAmJihUZS51aWQrPTQyOTQ5NjcyOTYpLFRlLmdpZDwwJiYoVGUuZ2lkKz00Mjk0OTY3Mjk2KSksbGUmJmxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgaWUmJihsZT1pZSxpZT1udWxsKSxpZT9KLmNhbGwoTyxuZSxpZSxtZSk6Si5jYWxsKE8sbmUsbWUpfX1mdW5jdGlvbiBxKEope3JldHVybiBKJiZmdW5jdGlvbihuZSxpZSl7dmFyIGxlPWllP0ouY2FsbChPLG5lLGllKTpKLmNhbGwoTyxuZSk7cmV0dXJuIGxlJiYobGUudWlkPDAmJihs''@;'; put 'put ''ZS51aWQrPTQyOTQ5NjcyOTYpLGxlLmdpZDwwJiYobGUuZ2lkKz00Mjk0OTY3Mjk2KSksbGV9fWZ1bmN0aW9uIGVlKEope3JldHVybiFKfHwiRU5PU1lTIj09PUouY29kZXx8IShJLmdldHVpZCYmMD09PUkuZ2V0dWlkKCl8fCJFSU5WQUwiIT09Si5jb2RlJiYiRVBFUk0iIT09Si5jb2RlKX1f''@;'; put 'put ''Lmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmSS52ZXJzaW9uLm1hdGNoKC9edjBcLjZcLlswLTJdfF52MFwuNVwuLykmJmZ1bmN0aW9uIHooSil7Si5sY2htb2Q9ZnVuY3Rpb24obmUsaWUsbGUpe0oub3BlbihuZSxfLk9fV1JPTkxZfF8uT19TWU1MSU5LLGllLGZ1bmN0aW9uKG1lLF9l''@;'; put 'put ''KXttZT9sZSYmbGUobWUpOkouZmNobW9kKF9lLGllLGZ1bmN0aW9uKFRlKXtKLmNsb3NlKF9lLGZ1bmN0aW9uKFNlKXtsZSYmbGUoVGV8fFNlKX0pfSl9KX0sSi5sY2htb2RTeW5jPWZ1bmN0aW9uKG5lLGllKXt2YXIgX2UsbGU9Si5vcGVuU3luYyhuZSxfLk9fV1JPTkxZfF8uT19TWU1MSU5L''@;'; put 'put ''LGllKSxtZT0hMDt0cnl7X2U9Si5mY2htb2RTeW5jKGxlLGllKSxtZT0hMX1maW5hbGx5e2lmKG1lKXRyeXtKLmNsb3NlU3luYyhsZSl9Y2F0Y2h7fWVsc2UgSi5jbG9zZVN5bmMobGUpfXJldHVybiBfZX19KE8pLE8ubHV0aW1lc3x8ZnVuY3Rpb24gTihKKXtfLmhhc093blByb3BlcnR5KCJP''@;'; put 'put ''X1NZTUxJTksiKSYmSi5mdXRpbWVzPyhKLmx1dGltZXM9ZnVuY3Rpb24obmUsaWUsbGUsbWUpe0oub3BlbihuZSxfLk9fU1lNTElOSyxmdW5jdGlvbihfZSxUZSl7X2U/bWUmJm1lKF9lKTpKLmZ1dGltZXMoVGUsaWUsbGUsZnVuY3Rpb24oU2Upe0ouY2xvc2UoVGUsZnVuY3Rpb24oamUpe21l''@;'; put 'put ''JiZtZShTZXx8amUpfSl9KX0pfSxKLmx1dGltZXNTeW5jPWZ1bmN0aW9uKG5lLGllLGxlKXt2YXIgX2UsbWU9Si5vcGVuU3luYyhuZSxfLk9fU1lNTElOSyksVGU9ITA7dHJ5e19lPUouZnV0aW1lc1N5bmMobWUsaWUsbGUpLFRlPSExfWZpbmFsbHl7aWYoVGUpdHJ5e0ouY2xvc2VTeW5jKG1l''@;'; put 'put ''KX1jYXRjaHt9ZWxzZSBKLmNsb3NlU3luYyhtZSl9cmV0dXJuIF9lfSk6Si5mdXRpbWVzJiYoSi5sdXRpbWVzPWZ1bmN0aW9uKG5lLGllLGxlLG1lKXttZSYmSS5uZXh0VGljayhtZSl9LEoubHV0aW1lc1N5bmM9ZnVuY3Rpb24oKXt9KX0oTyksTy5jaG93bj1VKE8uY2hvd24pLE8uZmNob3du''@;'; put 'put ''PVUoTy5mY2hvd24pLE8ubGNob3duPVUoTy5sY2hvd24pLE8uY2htb2Q9TChPLmNobW9kKSxPLmZjaG1vZD1MKE8uZmNobW9kKSxPLmxjaG1vZD1MKE8ubGNobW9kKSxPLmNob3duU3luYz1XKE8uY2hvd25TeW5jKSxPLmZjaG93blN5bmM9VyhPLmZjaG93blN5bmMpLE8ubGNob3duU3luYz1X''@;'; put 'put ''KE8ubGNob3duU3luYyksTy5jaG1vZFN5bmM9SyhPLmNobW9kU3luYyksTy5mY2htb2RTeW5jPUsoTy5mY2htb2RTeW5jKSxPLmxjaG1vZFN5bmM9SyhPLmxjaG1vZFN5bmMpLE8uc3RhdD1ZKE8uc3RhdCksTy5mc3RhdD1ZKE8uZnN0YXQpLE8ubHN0YXQ9WShPLmxzdGF0KSxPLnN0YXRTeW5j''@;'; put 'put ''PXEoTy5zdGF0U3luYyksTy5mc3RhdFN5bmM9cShPLmZzdGF0U3luYyksTy5sc3RhdFN5bmM9cShPLmxzdGF0U3luYyksTy5jaG1vZCYmIU8ubGNobW9kJiYoTy5sY2htb2Q9ZnVuY3Rpb24oSixuZSxpZSl7aWUmJkkubmV4dFRpY2soaWUpfSxPLmxjaG1vZFN5bmM9ZnVuY3Rpb24oKXt9KSxP''@;'; put 'put ''LmNob3duJiYhTy5sY2hvd24mJihPLmxjaG93bj1mdW5jdGlvbihKLG5lLGllLGxlKXtsZSYmSS5uZXh0VGljayhsZSl9LE8ubGNob3duU3luYz1mdW5jdGlvbigpe30pLCJ3aW4zMiI9PT13JiYoTy5yZW5hbWU9ImZ1bmN0aW9uIiE9dHlwZW9mIE8ucmVuYW1lP08ucmVuYW1lOmZ1bmN0aW9u''@;'; put 'put ''KEope2Z1bmN0aW9uIG5lKGllLGxlLG1lKXt2YXIgX2U9RGF0ZS5ub3coKSxUZT0wO0ooaWUsbGUsZnVuY3Rpb24gU2UoamUpe2lmKGplJiYoIkVBQ0NFUyI9PT1qZS5jb2RlfHwiRVBFUk0iPT09amUuY29kZXx8IkVCVVNZIj09PWplLmNvZGUpJiZEYXRlLm5vdygpLV9lPDZlNClyZXR1cm4g''@;'; put 'put ''c2V0VGltZW91dChmdW5jdGlvbigpe08uc3RhdChsZSxmdW5jdGlvbihWLHApe1YmJiJFTk9FTlQiPT09Vi5jb2RlP0ooaWUsbGUsU2UpOm1lKGplKX0pfSxUZSksdm9pZChUZTwxMDAmJihUZSs9MTApKTttZSYmbWUoamUpfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0''@;'; put 'put ''LnNldFByb3RvdHlwZU9mKG5lLEopLG5lfShPLnJlbmFtZSkpLE8ucmVhZD0iZnVuY3Rpb24iIT10eXBlb2YgTy5yZWFkP08ucmVhZDpmdW5jdGlvbihKKXtmdW5jdGlvbiBuZShpZSxsZSxtZSxfZSxUZSxTZSl7dmFyIGplO2lmKFNlJiYiZnVuY3Rpb24iPT10eXBlb2YgU2Upe3ZhciBWPTA7''@;'; put 'put ''amU9ZnVuY3Rpb24ocCxiLHgpe2lmKHAmJiJFQUdBSU4iPT09cC5jb2RlJiZWPDEwKXJldHVybiBWKyssSi5jYWxsKE8saWUsbGUsbWUsX2UsVGUsamUpO1NlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIEouY2FsbChPLGllLGxlLG1lLF9lLFRlLGplKX1yZXR1cm4gT2JqZWN0LnNl''@;'; put 'put ''dFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YobmUsSiksbmV9KE8ucmVhZCksTy5yZWFkU3luYz0iZnVuY3Rpb24iIT10eXBlb2YgTy5yZWFkU3luYz9PLnJlYWRTeW5jOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihuZSxpZSxsZSxtZSxfZSl7Zm9yKHZhciBUZT0wOzsp''@;'; put 'put ''dHJ5e3JldHVybiBKLmNhbGwoTyxuZSxpZSxsZSxtZSxfZSl9Y2F0Y2goU2Upe2lmKCJFQUdBSU4iPT09U2UuY29kZSYmVGU8MTApe1RlKys7Y29udGludWV9dGhyb3cgU2V9fX0oTy5yZWFkU3luYyl9fSwxMDQ0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDQyOSksXz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiEhSX07Xy5oYXNBcnJheUxlbmd0aERlZmluZUJ1Zz1mdW5jdGlvbigpe2lmKCFJKXJldHVybiBudWxsO3RyeXtyZXR1cm4gMSE9PUkoW10sImxlbmd0aCIse3ZhbHVlOjF9KS5sZW5ndGh9Y2F0Y2h7cmV0dXJuITB9fSx1ZS5leHBvcnRzPV99LDE0MDU6KHVlLFgseSk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbCxfPXkoNTQxOSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBJJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIEkoImZvbyIpJiYic3lt''@;'; put 'put ''Ym9sIj09dHlwZW9mIFN5bWJvbCgiYmFyIikmJl8oKX19LDU0MTk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBTeW1ib2x8fCJmdW5jdGlvbiIhPXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXJldHVybiEx''@;'; put 'put ''O2lmKCJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yKXJldHVybiEwO3ZhciB5PXt9LEk9U3ltYm9sKCJ0ZXN0IiksXz1PYmplY3QoSSk7aWYoInN0cmluZyI9PXR5cGVvZiBJfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChJKXx8Iltv''@;'; put 'put ''YmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXykpcmV0dXJuITE7Zm9yKHZhciBCIGluIHlbSV09NDIseSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmtleXMmJjAhPT1PYmplY3Qua2V5cyh5KS5sZW5ndGh8fCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmMCE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHkpLmxlbmd0aClyZXR1cm4hMTt2YXIgdz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHkpO2lmKDEhPT13Lmxlbmd0aHx8d1swXSE9PUl8fCFPYmplY3QucHJvdG90''@;'; put 'put ''eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeSxJKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIFA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih5LEkpO2lmKDQyIT09UC52YWx1ZXx8ITAhPT1Q''@;'; put 'put ''LmVudW1lcmFibGUpcmV0dXJuITF9cmV0dXJuITB9fSw2NDEwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTQxOSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBJKCkmJiEhU3ltYm9sLnRvU3RyaW5nVGFnfX0sMzM0OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ST15KDk1MDkpLkJ1ZmZlcixfPXkoMjgzMCkuVHJhbnNmb3JtO2Z1bmN0aW9uIEIoTyl7Xy5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPUkuYWxsb2NVbnNhZmUoTyksdGhpcy5fYmxvY2tTaXplPU8sdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRoaXMuX2ZpbmFs''@;'; put 'put ''aXplZD0hMX15KDU3MTcpKEIsXyksQi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihPLHosTil7dmFyIEw9bnVsbDt0cnl7dGhpcy51cGRhdGUoTyx6KX1jYXRjaChLKXtMPUt9TihMKX0sQi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKE8pe3ZhciB6PW51bGw7dHJ5e3RoaXMucHVz''@;'; put 'put ''aCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChOKXt6PU59Tyh6KX07dmFyIHc9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLFA9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihJLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJy''@;'; put 'put ''YXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7Qi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE8seil7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7Tz1mdW5jdGlvbiBGKE8seil7aWYoTyBpbnN0YW5jZW9mIEkpcmV0dXJuIE87''@;'; put 'put ''aWYoInN0cmluZyI9PXR5cGVvZiBPKXJldHVybiBJLmZyb20oTyx6KTtpZihQJiZBcnJheUJ1ZmZlci5pc1ZpZXcoTykpe2lmKDA9PT1PLmJ5dGVMZW5ndGgpcmV0dXJuIEkuYWxsb2MoMCk7dmFyIE49SS5mcm9tKE8uYnVmZmVyLE8uYnl0ZU9mZnNldCxPLmJ5dGVMZW5ndGgpO2lmKE4uYnl0''@;'; put 'put ''ZUxlbmd0aD09PU8uYnl0ZUxlbmd0aClyZXR1cm4gTn1pZih3JiZPIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5pc0J1ZmZlcihPKSYmTy5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIE8uY29uc3RydWN0b3IuaXNCdWZmZXImJk8uY29uc3RydWN0b3IuaXNCdWZmZXIoTykpcmV0''@;'; put 'put ''dXJuIEkuZnJvbShPKTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4nKX0oTyx6KTtmb3IodmFyIE49dGhpcy5fYmxvY2ssTD0wO3Ro''@;'; put 'put ''aXMuX2Jsb2NrT2Zmc2V0K08ubGVuZ3RoLUw+PXRoaXMuX2Jsb2NrU2l6ZTspe2Zvcih2YXIgSz10aGlzLl9ibG9ja09mZnNldDtLPHRoaXMuX2Jsb2NrU2l6ZTspTltLKytdPU9bTCsrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZvcig7TDxPLmxlbmd0aDspTlt0aGlz''@;'; put 'put ''Ll9ibG9ja09mZnNldCsrXT1PW0wrK107Zm9yKHZhciBVPTAsVz04Kk8ubGVuZ3RoO1c+MDsrK1UpdGhpcy5fbGVuZ3RoW1VdKz1XLChXPXRoaXMuX2xlbmd0aFtVXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhbVV0tPTQyOTQ5NjcyOTYqVyk7cmV0dXJuIHRoaXN9LEIucHJvdG90''@;'; put 'put ''eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LEIucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihPKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlz''@;'; put 'put ''Ll9maW5hbGl6ZWQ9ITA7dmFyIHo9dGhpcy5fZGlnZXN0KCk7dm9pZCAwIT09TyYmKHo9ei50b1N0cmluZyhPKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgTj0wO048NDsrK04pdGhpcy5fbGVuZ3RoW05dPTA7cmV0dXJuIHp9LEIucHJvdG90eXBl''@;'; put 'put ''Ll9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LHVlLmV4cG9ydHM9Qn0sMzcxNToodWUsWCx5KT0+e3ZhciBJPVg7SS51dGlscz15KDY0MzYpLEkuY29tbW9uPXkoNTc3MiksSS5zaGE9eSg5MDQxKSxJLnJpcGVtZD15KDI5''@;'; put 'put ''NDkpLEkuaG1hYz15KDIzNDQpLEkuc2hhMT1JLnNoYS5zaGExLEkuc2hhMjU2PUkuc2hhLnNoYTI1NixJLnNoYTIyND1JLnNoYS5zaGEyMjQsSS5zaGEzODQ9SS5zaGEuc2hhMzg0LEkuc2hhNTEyPUkuc2hhLnNoYTUxMixJLnJpcGVtZDE2MD1JLnJpcGVtZC5yaXBlbWQxNjB9LDU3NzI6KHVl''@;'; put 'put ''LFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDM2KSxfPXkoOTc0Nik7ZnVuY3Rpb24gZygpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0''@;'; put 'put ''b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPSJiaWciLHRoaXMuX2RlbHRhOD10aGlzLmJsb2NrU2l6ZS84LHRoaXMuX2RlbHRhMzI9''@;'; put 'put ''dGhpcy5ibG9ja1NpemUvMzJ9WC5CbG9ja0hhc2g9ZyxnLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odyxQKXtpZih3PUkudG9BcnJheSh3LFApLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNvbmNhdCh3KTp3LHRoaXMucGVuZGluZ1RvdGFsKz13Lmxlbmd0aCx0''@;'; put 'put ''aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciBGPSh3PXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9dy5zbGljZSh3Lmxlbmd0aC1GLHcubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSx3''@;'; put 'put ''PUkuam9pbjMyKHcsMCx3Lmxlbmd0aC1GLHRoaXMuZW5kaWFuKTtmb3IodmFyIE89MDtPPHcubGVuZ3RoO08rPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHcsTyxPK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxnLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHRo''@;'; put 'put ''aXMudXBkYXRlKHRoaXMuX3BhZCgpKSxfKG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdCh3KX0sZy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciB3PXRoaXMucGVuZGluZ1RvdGFsLFA9dGhpcy5fZGVsdGE4LEY9UC0odyt0aGlzLnBhZExlbmd0aCklUCxPPW5ldyBBcnJh''@;'; put 'put ''eShGK3RoaXMucGFkTGVuZ3RoKTtPWzBdPTEyODtmb3IodmFyIHo9MTt6PEY7eisrKU9bel09MDtpZih3PDw9MywiYmlnIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIE49ODtOPHRoaXMucGFkTGVuZ3RoO04rKylPW3orK109MDtPW3orK109MCxPW3orK109MCxPW3orK109MCxPW3orK109MCxP''@;'; put 'put ''W3orK109dz4+PjI0JjI1NSxPW3orK109dz4+PjE2JjI1NSxPW3orK109dz4+PjgmMjU1LE9beisrXT0yNTUmd31lbHNlIGZvcihPW3orK109MjU1JncsT1t6KytdPXc+Pj44JjI1NSxPW3orK109dz4+PjE2JjI1NSxPW3orK109dz4+PjI0JjI1NSxPW3orK109MCxPW3orK109MCxPW3orK109''@;'; put 'put ''MCxPW3orK109MCxOPTg7Tjx0aGlzLnBhZExlbmd0aDtOKyspT1t6KytdPTA7cmV0dXJuIE99fSwyMzQ0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDk3NDYpO2Z1bmN0aW9uIGcoQix3LFApe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhC''@;'; put 'put ''LHcsUCk7dGhpcy5IYXNoPUIsdGhpcy5ibG9ja1NpemU9Qi5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9Qi5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KEkudG9BcnJheSh3LFApKX11ZS5leHBvcnRzPWcsZy5wcm90b3R5cGUuX2luaXQ9ZnVu''@;'; put 'put ''Y3Rpb24odyl7dy5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJih3PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodykuZGlnZXN0KCkpLF8ody5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIFA9dy5sZW5ndGg7UDx0aGlzLmJsb2NrU2l6ZTtQKyspdy5wdXNoKDApO2ZvcihQPTA7UDx3Lmxl''@;'; put 'put ''bmd0aDtQKyspd1tQXV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KSxQPTA7UDx3Lmxlbmd0aDtQKyspd1tQXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KX0sZy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHcsUCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW5uZXIudXBkYXRlKHcsUCksdGhpc30sZy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdCh3KX19LDI5NDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9''@;'; put 'put ''eSg2NDM2KSxfPXkoNTc3MiksZz1JLnJvdGwzMixCPUkuc3VtMzIsdz1JLnN1bTMyXzMsUD1JLnN1bTMyXzQsRj1fLkJsb2NrSGFzaDtmdW5jdGlvbiBPKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPO0YuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIz''@;'; put 'put ''MzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLmVuZGlhbj0ibGl0dGxlIn1mdW5jdGlvbiB6KHEsZWUsSixuZSl7cmV0dXJuIHE8PTE1P2VlXkpebmU6cTw9MzE/ZWUmSnx+ZWUmbmU6cTw9NDc/KGVlfH5KKV5uZTpxPD02Mz9lZSZuZXxKJn5uZTplZV4oSnx+bmUp''@;'; put 'put ''fWZ1bmN0aW9uIEwocSl7cmV0dXJuIHE8PTE1PzEzNTI4Mjk5MjY6cTw9MzE/MTU0ODYwMzY4NDpxPD00Nz8xODM2MDcyNjkxOnE8PTYzPzIwNTM5OTQyMTc6MH1JLmluaGVyaXRzKE8sRiksWC5yaXBlbWQxNjA9TyxPLmJsb2NrU2l6ZT01MTIsTy5vdXRTaXplPTE2MCxPLmhtYWNTdHJlbmd0''@;'; put 'put ''aD0xOTIsTy5wYWRMZW5ndGg9NjQsTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlZSxKKXtmb3IodmFyIG5lPXRoaXMuaFswXSxpZT10aGlzLmhbMV0sbGU9dGhpcy5oWzJdLG1lPXRoaXMuaFszXSxfZT10aGlzLmhbNF0sVGU9bmUsU2U9aWUsamU9bGUsVj1tZSxwPV9lLGI9MDtiPDgw''@;'; put 'put ''O2IrKyl7dmFyIHg9QihnKFAobmUseihiLGllLGxlLG1lKSxlZVtLW2JdK0pdLChxPWIpPD0xNT8wOnE8PTMxPzE1MTg1MDAyNDk6cTw9NDc/MTg1OTc3NTM5MzpxPD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4MzgpLFdbYl0pLF9lKTtuZT1fZSxfZT1tZSxtZT1nKGxlLDEwKSxsZT1pZSxpZT14''@;'; put 'put ''LHg9QihnKFAoVGUseig3OS1iLFNlLGplLFYpLGVlW1VbYl0rSl0sTChiKSksWVtiXSkscCksVGU9cCxwPVYsVj1nKGplLDEwKSxqZT1TZSxTZT14fXZhciBxO3g9dyh0aGlzLmhbMV0sbGUsViksdGhpcy5oWzFdPXcodGhpcy5oWzJdLG1lLHApLHRoaXMuaFsyXT13KHRoaXMuaFszXSxfZSxU''@;'; put 'put ''ZSksdGhpcy5oWzNdPXcodGhpcy5oWzRdLG5lLFNlKSx0aGlzLmhbNF09dyh0aGlzLmhbMF0saWUsamUpLHRoaXMuaFswXT14fSxPLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGVlKXtyZXR1cm4iaGV4Ij09PWVlP0kudG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOkkuc3BsaXQzMih0aGlz''@;'; put 'put ''LmgsImxpdHRsZSIpfTt2YXIgSz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwx''@;'; put 'put ''NCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxVPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4''@;'; put 'put ''LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLFc9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMs''@;'; put 'put ''Niw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFk9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1''@;'; put 'put ''LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSw5MDQxOih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO1guc2hhMT15KDQ3NjEpLFguc2hhMjI0PXkoNzk5KSxYLnNoYTI1Nj15KDkzNDQpLFguc2hhMzg0PXkoNzcyKSxYLnNoYTUxMj15KDU5MDApfSw0NzYxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDU3NzIpLGc9eSg3MDM4KSxC''@;'; put 'put ''PUkucm90bDMyLHc9SS5zdW0zMixQPUkuc3VtMzJfNSxGPWcuZnRfMSxPPV8uQmxvY2tIYXNoLHo9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIE4oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBOKSlyZXR1cm4gbmV3IE47Ty5jYWxsKHRoaXMp''@;'; put 'put ''LHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfUkuaW5oZXJpdHMoTixPKSx1ZS5leHBvcnRzPU4sTi5ibG9ja1NpemU9NTEyLE4ub3V0U2l6ZT0xNjAsTi5obWFjU3RyZW5ndGg9ODAsTi5w''@;'; put 'put ''YWRMZW5ndGg9NjQsTi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihLLFUpe2Zvcih2YXIgVz10aGlzLlcsWT0wO1k8MTY7WSsrKVdbWV09S1tVK1ldO2Zvcig7WTxXLmxlbmd0aDtZKyspV1tZXT1CKFdbWS0zXV5XW1ktOF1eV1tZLTE0XV5XW1ktMTZdLDEpO3ZhciBxPXRoaXMuaFswXSxl''@;'; put 'put ''ZT10aGlzLmhbMV0sSj10aGlzLmhbMl0sbmU9dGhpcy5oWzNdLGllPXRoaXMuaFs0XTtmb3IoWT0wO1k8Vy5sZW5ndGg7WSsrKXt2YXIgbGU9fn4oWS8yMCksbWU9UChCKHEsNSksRihsZSxlZSxKLG5lKSxpZSxXW1ldLHpbbGVdKTtpZT1uZSxuZT1KLEo9QihlZSwzMCksZWU9cSxxPW1lfXRo''@;'; put 'put ''aXMuaFswXT13KHRoaXMuaFswXSxxKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sZWUpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxKKSx0aGlzLmhbM109dyh0aGlzLmhbM10sbmUpLHRoaXMuaFs0XT13KHRoaXMuaFs0XSxpZSl9LE4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oSyl7cmV0dXJu''@;'; put 'put ''ImhleCI9PT1LP0kudG9IZXgzMih0aGlzLmgsImJpZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzk5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDkzNDQpO2Z1bmN0aW9uIGcoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1cm4gbmV3IGc7Xy5j''@;'; put 'put ''YWxsKHRoaXMpLHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19SS5pbmhlcml0cyhnLF8pLHVlLmV4cG9ydHM9ZyxnLmJsb2NrU2l6ZT01MTIsZy5vdXRTaXplPTIyNCxn''@;'; put 'put ''LmhtYWNTdHJlbmd0aD0xOTIsZy5wYWRMZW5ndGg9NjQsZy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/SS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpfX0sOTM0NDoodWUsWCx5''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYpLF89eSg1NzcyKSxnPXkoNzAzOCksQj15KDk3NDYpLHc9SS5zdW0zMixQPUkuc3VtMzJfNCxGPUkuc3VtMzJfNSxPPWcuY2gzMix6PWcubWFqMzIsTj1nLnMwXzI1NixMPWcuczFfMjU2LEs9Zy5nMF8yNTYsVT1nLmcxXzI1NixXPV8uQmxv''@;'; put 'put ''Y2tIYXNoLFk9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0''@;'; put 'put ''ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4''@;'; put 'put ''NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcs''@;'; put 'put ''MzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQz''@;'; put 'put ''NjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gcSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBuZXcgcTtXLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTks''@;'; put 'put ''MjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPVksdGhpcy5XPW5ldyBBcnJheSg2NCl9SS5pbmhlcml0cyhxLFcpLHVlLmV4cG9ydHM9cSxxLmJsb2NrU2l6ZT01MTIscS5vdXRTaXplPTI1NixxLmhtYWNTdHJlbmd0aD0xOTIscS5wYWRMZW5ndGg9NjQscS5wcm90b3R5''@;'; put 'put ''cGUuX3VwZGF0ZT1mdW5jdGlvbihKLG5lKXtmb3IodmFyIGllPXRoaXMuVyxsZT0wO2xlPDE2O2xlKyspaWVbbGVdPUpbbmUrbGVdO2Zvcig7bGU8aWUubGVuZ3RoO2xlKyspaWVbbGVdPVAoVShpZVtsZS0yXSksaWVbbGUtN10sSyhpZVtsZS0xNV0pLGllW2xlLTE2XSk7dmFyIG1lPXRoaXMu''@;'; put 'put ''aFswXSxfZT10aGlzLmhbMV0sVGU9dGhpcy5oWzJdLFNlPXRoaXMuaFszXSxqZT10aGlzLmhbNF0sVj10aGlzLmhbNV0scD10aGlzLmhbNl0sYj10aGlzLmhbN107Zm9yKEIodGhpcy5rLmxlbmd0aD09PWllLmxlbmd0aCksbGU9MDtsZTxpZS5sZW5ndGg7bGUrKyl7dmFyIHg9RihiLEwoamUp''@;'; put 'put ''LE8oamUsVixwKSx0aGlzLmtbbGVdLGllW2xlXSksQz13KE4obWUpLHoobWUsX2UsVGUpKTtiPXAscD1WLFY9amUsamU9dyhTZSx4KSxTZT1UZSxUZT1fZSxfZT1tZSxtZT13KHgsQyl9dGhpcy5oWzBdPXcodGhpcy5oWzBdLG1lKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sX2UpLHRoaXMuaFsy''@;'; put 'put ''XT13KHRoaXMuaFsyXSxUZSksdGhpcy5oWzNdPXcodGhpcy5oWzNdLFNlKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0samUpLHRoaXMuaFs1XT13KHRoaXMuaFs1XSxWKSx0aGlzLmhbNl09dyh0aGlzLmhbNl0scCksdGhpcy5oWzddPXcodGhpcy5oWzddLGIpfSxxLnByb3RvdHlwZS5fZGlnZXN0''@;'; put 'put ''PWZ1bmN0aW9uKEope3JldHVybiJoZXgiPT09Sj9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDc3MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYpLF89eSg1OTAwKTtmdW5jdGlvbiBnKCl7aWYoISh0aGlzIGluc3RhbmNlb2Yg''@;'; put 'put ''ZykpcmV0dXJuIG5ldyBnO18uY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1''@;'; put 'put ''LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfUkuaW5oZXJpdHMoZyxfKSx1ZS5leHBvcnRzPWcsZy5ibG9ja1NpemU9MTAyNCxnLm91dFNpemU9Mzg0LGcuaG1hY1N0cmVuZ3RoPTE5MixnLnBhZExlbmd0aD0xMjgsZy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5j''@;'; put 'put ''dGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/SS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIil9fSw1OTAwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDU3NzIpLGc9eSg5NzQ2KSxCPUku''@;'; put 'put ''cm90cjY0X2hpLHc9SS5yb3RyNjRfbG8sUD1JLnNocjY0X2hpLEY9SS5zaHI2NF9sbyxPPUkuc3VtNjQsej1JLnN1bTY0X2hpLE49SS5zdW02NF9sbyxMPUkuc3VtNjRfNF9oaSxLPUkuc3VtNjRfNF9sbyxVPUkuc3VtNjRfNV9oaSxXPUkuc3VtNjRfNV9sbyxZPV8uQmxvY2tIYXNoLHE9WzEx''@;'; put 'put ''MTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0''@;'; put 'put ''NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1''@;'; put 'put ''ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwx''@;'; put 'put ''OTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1''@;'; put 'put ''ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2''@;'; put 'put ''MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3''@;'; put 'put ''Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3''@;'; put 'put ''MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0''@;'; put 'put ''MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1''@;'; put 'put ''NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1''@;'; put 'put ''NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXTtmdW5jdGlvbiBlZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGVlKSlyZXR1cm4gbmV3IGVlO1kuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcy''@;'; put 'put ''MCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1xLHRo''@;'; put 'put ''aXMuVz1uZXcgQXJyYXkoMTYwKX1mdW5jdGlvbiBKKHgsQyxULEgsail7dmFyIEU9eCZUXn54Jmo7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gbmUoeCxDLFQsSCxqLEUpe3ZhciBtPUMmSF5+QyZFO3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2KSxtfWZ1bmN0aW9u''@;'; put 'put ''IGllKHgsQyxULEgsail7dmFyIEU9eCZUXngmal5UJmo7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gbGUoeCxDLFQsSCxqLEUpe3ZhciBtPUMmSF5DJkVeSCZFO3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2KSxtfWZ1bmN0aW9uIG1lKHgsQyl7dmFyIEU9Qih4LEMs''@;'; put 'put ''MjgpXkIoQyx4LDIpXkIoQyx4LDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIF9lKHgsQyl7dmFyIEU9dyh4LEMsMjgpXncoQyx4LDIpXncoQyx4LDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFRlKHgsQyl7dmFyIEU9Qih4LEMsMTQp''@;'; put 'put ''XkIoeCxDLDE4KV5CKEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBTZSh4LEMpe3ZhciBFPXcoeCxDLDE0KV53KHgsQywxOCledyhDLHgsOSk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gamUoeCxDKXt2YXIgRT1CKHgsQywxKV5C''@;'; put 'put ''KHgsQyw4KV5QKHgsQyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBWKHgsQyl7dmFyIEU9dyh4LEMsMSledyh4LEMsOCleRih4LEMsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gcCh4LEMpe3ZhciBFPUIoeCxDLDE5KV5CKEMseCwy''@;'; put 'put ''OSleUCh4LEMsNik7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gYih4LEMpe3ZhciBFPXcoeCxDLDE5KV53KEMseCwyOSleRih4LEMsNik7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9SS5pbmhlcml0cyhlZSxZKSx1ZS5leHBvcnRzPWVlLGVlLmJsb2NrU2l6''@;'; put 'put ''ZT0xMDI0LGVlLm91dFNpemU9NTEyLGVlLmhtYWNTdHJlbmd0aD0xOTIsZWUucGFkTGVuZ3RoPTEyOCxlZS5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD10aGlzLlcsaj0wO2o8MzI7aisrKUhbal09Q1tUK2pdO2Zvcig7ajxILmxlbmd0aDtqKz0yKXt2''@;'; put 'put ''YXIgRT1wKEhbai00XSxIW2otM10pLG09YihIW2otNF0sSFtqLTNdKSxBPUhbai0xNF0sYWU9SFtqLTEzXSx0ZT1qZShIW2otMzBdLEhbai0yOV0pLHNlPVYoSFtqLTMwXSxIW2otMjldKSx3ZT1IW2otMzJdLFVlPUhbai0zMV07SFtqXT1MKEUsbSxBLGFlLHRlLHNlLHdlLFVlKSxIW2orMV09''@;'; put 'put ''SyhFLG0sQSxhZSx0ZSxzZSx3ZSxVZSl9fSxlZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihDLFQpe3RoaXMuX3ByZXBhcmVCbG9jayhDLFQpO3ZhciBIPXRoaXMuVyxqPXRoaXMuaFswXSxFPXRoaXMuaFsxXSxtPXRoaXMuaFsyXSxBPXRoaXMuaFszXSxhZT10aGlzLmhbNF0sdGU9dGhp''@;'; put 'put ''cy5oWzVdLHNlPXRoaXMuaFs2XSx3ZT10aGlzLmhbN10sVWU9dGhpcy5oWzhdLEplPXRoaXMuaFs5XSxvdD10aGlzLmhbMTBdLHhlPXRoaXMuaFsxMV0sdmU9dGhpcy5oWzEyXSxYZT10aGlzLmhbMTNdLHplPXRoaXMuaFsxNF0sRGU9dGhpcy5oWzE1XTtnKHRoaXMuay5sZW5ndGg9PT1ILmxl''@;'; put 'put ''bmd0aCk7Zm9yKHZhciBGZT0wO0ZlPEgubGVuZ3RoO0ZlKz0yKXt2YXIgT2U9emUsSWU9RGUsVmU9VGUoVWUsSmUpLGtlPVNlKFVlLEplKSxBZT1KKFVlLDAsb3QsMCx2ZSksX3Q9bmUoMCxKZSwwLHhlLDAsWGUpLG50PXRoaXMua1tGZV0sUWU9dGhpcy5rW0ZlKzFdLHVuPUhbRmVdLHl0PUhb''@;'; put 'put ''RmUrMV0sTXQ9VShPZSxJZSxWZSxrZSxBZSxfdCxudCxRZSx1bix5dCksRHQ9VyhPZSxJZSxWZSxrZSxBZSxfdCxudCxRZSx1bix5dCk7T2U9bWUoaixFKSxJZT1fZShqLEUpLFZlPWllKGosMCxtLDAsYWUpLGtlPWxlKDAsRSwwLEEsMCx0ZSk7dmFyIGl0PXooT2UsSWUsVmUsa2UpLCRlPU4o''@;'; put 'put ''T2UsSWUsVmUsa2UpO3plPXZlLERlPVhlLHZlPW90LFhlPXhlLG90PVVlLHhlPUplLFVlPXooc2Usd2UsTXQsRHQpLEplPU4od2Usd2UsTXQsRHQpLHNlPWFlLHdlPXRlLGFlPW0sdGU9QSxtPWosQT1FLGo9eihNdCxEdCxpdCwkZSksRT1OKE10LER0LGl0LCRlKX1PKHRoaXMuaCwwLGosRSks''@;'; put 'put ''Tyh0aGlzLmgsMixtLEEpLE8odGhpcy5oLDQsYWUsdGUpLE8odGhpcy5oLDYsc2Usd2UpLE8odGhpcy5oLDgsVWUsSmUpLE8odGhpcy5oLDEwLG90LHhlKSxPKHRoaXMuaCwxMix2ZSxYZSksTyh0aGlzLmgsMTQsemUsRGUpfSxlZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihDKXtyZXR1''@;'; put 'put ''cm4iaGV4Ij09PUM/SS50b0hleDMyKHRoaXMuaCwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3MDM4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBfPXkoNjQzNikucm90cjMyO2Z1bmN0aW9uIEIoTCxLLFUpe3JldHVybiBMJktefkwmVX1mdW5jdGlvbiB3KEwsSyxVKXty''@;'; put 'put ''ZXR1cm4gTCZLXkwmVV5LJlV9ZnVuY3Rpb24gUChMLEssVSl7cmV0dXJuIExeS15VfVguZnRfMT1mdW5jdGlvbiBnKEwsSyxVLFcpe3JldHVybiAwPT09TD9CKEssVSxXKToxPT09THx8Mz09PUw/UChLLFUsVyk6Mj09PUw/dyhLLFUsVyk6dm9pZCAwfSxYLmNoMzI9QixYLm1hajMyPXcsWC5w''@;'; put 'put ''MzI9UCxYLnMwXzI1Nj1mdW5jdGlvbiBGKEwpe3JldHVybiBfKEwsMileXyhMLDEzKV5fKEwsMjIpfSxYLnMxXzI1Nj1mdW5jdGlvbiBPKEwpe3JldHVybiBfKEwsNileXyhMLDExKV5fKEwsMjUpfSxYLmcwXzI1Nj1mdW5jdGlvbiB6KEwpe3JldHVybiBfKEwsNyleXyhMLDE4KV5MPj4+M30s''@;'; put 'put ''WC5nMV8yNTY9ZnVuY3Rpb24gTihMKXtyZXR1cm4gXyhMLDE3KV5fKEwsMTkpXkw+Pj4xMH19LDY0MzY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NzQ2KSxfPXkoNTcxNyk7ZnVuY3Rpb24gZyhiLHgpe3JldHVybiEoNTUyOTYhPSg2NDUxMiZiLmNoYXJDb2RlQXQoeCkpfHx4''@;'; put 'put ''PDB8fHgrMT49Yi5sZW5ndGgpJiY1NjMyMD09KDY0NTEyJmIuY2hhckNvZGVBdCh4KzEpKX1mdW5jdGlvbiBQKGIpe3JldHVybihiPj4+MjR8Yj4+PjgmNjUyODB8Yjw8OCYxNjcxMTY4MHwoMjU1JmIpPDwyNCk+Pj4wfWZ1bmN0aW9uIE8oYil7cmV0dXJuIDE9PT1iLmxlbmd0aD8iMCIrYjpi''@;'; put 'put ''fWZ1bmN0aW9uIHooYil7cmV0dXJuIDc9PT1iLmxlbmd0aD8iMCIrYjo2PT09Yi5sZW5ndGg/IjAwIitiOjU9PT1iLmxlbmd0aD8iMDAwIitiOjQ9PT1iLmxlbmd0aD8iMDAwMCIrYjozPT09Yi5sZW5ndGg/IjAwMDAwIitiOjI9PT1iLmxlbmd0aD8iMDAwMDAwIitiOjE9PT1iLmxlbmd0aD8i''@;'; put 'put ''MDAwMDAwMCIrYjpifVguaW5oZXJpdHM9XyxYLnRvQXJyYXk9ZnVuY3Rpb24gQihiLHgpe2lmKEFycmF5LmlzQXJyYXkoYikpcmV0dXJuIGIuc2xpY2UoKTtpZighYilyZXR1cm5bXTt2YXIgQz1bXTtpZigic3RyaW5nIj09dHlwZW9mIGIpaWYoeCl7aWYoImhleCI9PT14KWZvcigoYj1iLnJl''@;'; put 'put ''cGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKGI9IjAiK2IpLEg9MDtIPGIubGVuZ3RoO0grPTIpQy5wdXNoKHBhcnNlSW50KGJbSF0rYltIKzFdLDE2KSl9ZWxzZSBmb3IodmFyIFQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBqPWIuY2hhckNvZGVBdChIKTtqPDEy''@;'; put 'put ''OD9DW1QrK109ajpqPDIwNDg/KENbVCsrXT1qPj42fDE5MixDW1QrK109NjMmanwxMjgpOmcoYixIKT8oaj02NTUzNisoKDEwMjMmaik8PDEwKSsoMTAyMyZiLmNoYXJDb2RlQXQoKytIKSksQ1tUKytdPWo+PjE4fDI0MCxDW1QrK109aj4+MTImNjN8MTI4LENbVCsrXT1qPj42JjYzfDEyOCxD''@;'; put 'put ''W1QrK109NjMmanwxMjgpOihDW1QrK109aj4+MTJ8MjI0LENbVCsrXT1qPj42JjYzfDEyOCxDW1QrK109NjMmanwxMjgpfWVsc2UgZm9yKEg9MDtIPGIubGVuZ3RoO0grKylDW0hdPTB8YltIXTtyZXR1cm4gQ30sWC50b0hleD1mdW5jdGlvbiB3KGIpe2Zvcih2YXIgeD0iIixDPTA7QzxiLmxl''@;'; put 'put ''bmd0aDtDKyspeCs9TyhiW0NdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHh9LFguaHRvbmw9UCxYLnRvSGV4MzI9ZnVuY3Rpb24gRihiLHgpe2Zvcih2YXIgQz0iIixUPTA7VDxiLmxlbmd0aDtUKyspe3ZhciBIPWJbVF07ImxpdHRsZSI9PT14JiYoSD1QKEgpKSxDKz16KEgudG9TdHJpbmcoMTYp''@;'; put 'put ''KX1yZXR1cm4gQ30sWC56ZXJvMj1PLFguemVybzg9eixYLmpvaW4zMj1mdW5jdGlvbiBOKGIseCxDLFQpe3ZhciBIPUMteDtJKEglND09MCk7Zm9yKHZhciBqPW5ldyBBcnJheShILzQpLEU9MCxtPXg7RTxqLmxlbmd0aDtFKyssbSs9NClqW0VdPSgiYmlnIj09PVQ/YlttXTw8MjR8YlttKzFd''@;'; put 'put ''PDwxNnxiW20rMl08PDh8YlttKzNdOmJbbSszXTw8MjR8YlttKzJdPDwxNnxiW20rMV08PDh8YlttXSk+Pj4wO3JldHVybiBqfSxYLnNwbGl0MzI9ZnVuY3Rpb24gTChiLHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoNCpiLmxlbmd0aCksVD0wLEg9MDtUPGIubGVuZ3RoO1QrKyxIKz00KXt2YXIg''@;'; put 'put ''aj1iW1RdOyJiaWciPT09eD8oQ1tIXT1qPj4+MjQsQ1tIKzFdPWo+Pj4xNiYyNTUsQ1tIKzJdPWo+Pj44JjI1NSxDW0grM109MjU1JmopOihDW0grM109aj4+PjI0LENbSCsyXT1qPj4+MTYmMjU1LENbSCsxXT1qPj4+OCYyNTUsQ1tIXT0yNTUmail9cmV0dXJuIEN9LFgucm90cjMyPWZ1bmN0''@;'; put 'put ''aW9uIEsoYix4KXtyZXR1cm4gYj4+Pnh8Yjw8MzIteH0sWC5yb3RsMzI9ZnVuY3Rpb24gVShiLHgpe3JldHVybiBiPDx4fGI+Pj4zMi14fSxYLnN1bTMyPWZ1bmN0aW9uIFcoYix4KXtyZXR1cm4gYit4Pj4+MH0sWC5zdW0zMl8zPWZ1bmN0aW9uIFkoYix4LEMpe3JldHVybiBiK3grQz4+PjB9''@;'; put 'put ''LFguc3VtMzJfND1mdW5jdGlvbiBxKGIseCxDLFQpe3JldHVybiBiK3grQytUPj4+MH0sWC5zdW0zMl81PWZ1bmN0aW9uIGVlKGIseCxDLFQsSCl7cmV0dXJuIGIreCtDK1QrSD4+PjB9LFguc3VtNjQ9ZnVuY3Rpb24gSihiLHgsQyxUKXt2YXIgRT1UK2JbeCsxXT4+PjA7Ylt4XT0oRTxUPzE6''@;'; put 'put ''MCkrQytiW3hdPj4+MCxiW3grMV09RX0sWC5zdW02NF9oaT1mdW5jdGlvbiBuZShiLHgsQyxUKXtyZXR1cm4oeCtUPj4+MDx4PzE6MCkrYitDPj4+MH0sWC5zdW02NF9sbz1mdW5jdGlvbiBpZShiLHgsQyxUKXtyZXR1cm4geCtUPj4+MH0sWC5zdW02NF80X2hpPWZ1bmN0aW9uIGxlKGIseCxD''@;'; put 'put ''LFQsSCxqLEUsbSl7dmFyIEE9MCxhZT14O3JldHVybiBBKz0oYWU9YWUrVD4+PjApPHg/MTowLEErPShhZT1hZStqPj4+MCk8aj8xOjAsYitDK0grRSsoQSs9KGFlPWFlK20+Pj4wKTxtPzE6MCk+Pj4wfSxYLnN1bTY0XzRfbG89ZnVuY3Rpb24gbWUoYix4LEMsVCxILGosRSxtKXtyZXR1cm4g''@;'; put 'put ''eCtUK2orbT4+PjB9LFguc3VtNjRfNV9oaT1mdW5jdGlvbiBfZShiLHgsQyxULEgsaixFLG0sQSxhZSl7dmFyIHRlPTAsc2U9eDtyZXR1cm4gdGUrPShzZT1zZStUPj4+MCk8eD8xOjAsdGUrPShzZT1zZStqPj4+MCk8aj8xOjAsdGUrPShzZT1zZSttPj4+MCk8bT8xOjAsYitDK0grRStBKyh0''@;'; put 'put ''ZSs9KHNlPXNlK2FlPj4+MCk8YWU/MTowKT4+PjB9LFguc3VtNjRfNV9sbz1mdW5jdGlvbiBUZShiLHgsQyxULEgsaixFLG0sQSxhZSl7cmV0dXJuIHgrVCtqK20rYWU+Pj4wfSxYLnJvdHI2NF9oaT1mdW5jdGlvbiBTZShiLHgsQyl7cmV0dXJuKHg8PDMyLUN8Yj4+PkMpPj4+MH0sWC5yb3Ry''@;'; put 'put ''NjRfbG89ZnVuY3Rpb24gamUoYix4LEMpe3JldHVybihiPDwzMi1DfHg+Pj5DKT4+PjB9LFguc2hyNjRfaGk9ZnVuY3Rpb24gVihiLHgsQyl7cmV0dXJuIGI+Pj5DfSxYLnNocjY0X2xvPWZ1bmN0aW9uIHAoYix4LEMpe3JldHVybihiPDwzMi1DfHg+Pj5DKT4+PjB9fSw4ODI0Oih1ZSxYLHkp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLF89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxnPXkoODYxMik7dWUuZXhwb3J0cz1nLmNhbGwoSSxfKX0sMjE1NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3MTUpLF89eSg0NTA0''@;'; put 'put ''KSxnPXkoOTc0Nik7ZnVuY3Rpb24gQih3KXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIodyk7dGhpcy5oYXNoPXcuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISF3LnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PXcubWlu''@;'; put 'put ''RW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIFA9Xy50b0FycmF5KHcuZW50cm9weSx3LmVudHJvcHlFbmN8fCJoZXgiKSxGPV8udG9BcnJheSh3Lm5vbmNl''@;'; put 'put ''LHcubm9uY2VFbmN8fCJoZXgiKSxPPV8udG9BcnJheSh3LnBlcnMsdy5wZXJzRW5jfHwiaGV4Iik7ZyhQLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChQLEYsTyl9''@;'; put 'put ''dWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKFAsRixPKXt2YXIgej1QLmNvbmNhdChGKS5jb25jYXQoTyk7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgTj0wO048dGhpcy5WLmxlbmd0''@;'; put 'put ''aDtOKyspdGhpcy5LW05dPTAsdGhpcy5WW05dPTE7dGhpcy5fdXBkYXRlKHopLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxCLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSS5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxC''@;'; put 'put ''LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3ZhciBGPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTtQJiYoRj1GLnVwZGF0ZShQKSksdGhpcy5LPUYuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxQJiYodGhp''@;'; put 'put ''cy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUoUCkuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LEIucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihQLEYsTyx6KXsic3RyaW5nIiE9dHlwZW9mIEYm''@;'; put 'put ''Jih6PU8sTz1GLEY9bnVsbCksUD1fLnRvQXJyYXkoUCxGKSxPPV8udG9BcnJheShPLHopLGcoUC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShQLmNvbmNhdChP''@;'; put 'put ''fHxbXSkpLHRoaXMuX3Jlc2VlZD0xfSxCLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihQLEYsTyx6KXtpZih0aGlzLl9yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoIlJlc2VlZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2YgRiYmKHo9TyxPPUYs''@;'; put 'put ''Rj1udWxsKSxPJiYoTz1fLnRvQXJyYXkoTyx6fHwiaGV4IiksdGhpcy5fdXBkYXRlKE8pKTtmb3IodmFyIE49W107Ti5sZW5ndGg8UDspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxOPU4uY29uY2F0KHRoaXMuVik7dmFyIEw9Ti5zbGljZSgwLFApO3JldHVy''@;'; put 'put ''biB0aGlzLl91cGRhdGUoTyksdGhpcy5fcmVzZWVkKyssXy5lbmNvZGUoTCxGKX19LDY0NToodWUsWCk9PntYLnJlYWQ9ZnVuY3Rpb24oeSxJLF8sZyxCKXt2YXIgdyxQLEY9OCpCLWctMSxPPSgxPDxGKS0xLHo9Tz4+MSxOPS03LEw9Xz9CLTE6MCxLPV8/LTE6MSxVPXlbSStMXTtmb3IoTCs9''@;'; put 'put ''Syx3PVUmKDE8PC1OKS0xLFU+Pj0tTixOKz1GO04+MDt3PTI1Nip3K3lbSStMXSxMKz1LLE4tPTgpO2ZvcihQPXcmKDE8PC1OKS0xLHc+Pj0tTixOKz1nO04+MDtQPTI1NipQK3lbSStMXSxMKz1LLE4tPTgpO2lmKDA9PT13KXc9MS16O2Vsc2V7aWYodz09PU8pcmV0dXJuIFA/TmFOOjEvMCoo''@;'; put 'put ''VT8tMToxKTtQKz1NYXRoLnBvdygyLGcpLHctPXp9cmV0dXJuKFU/LTE6MSkqUCpNYXRoLnBvdygyLHctZyl9LFgud3JpdGU9ZnVuY3Rpb24oeSxJLF8sZyxCLHcpe3ZhciBQLEYsTyx6PTgqdy1CLTEsTj0oMTw8eiktMSxMPU4+PjEsSz0yMz09PUI/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93''@;'; put 'put ''KDIsLTc3KTowLFU9Zz8wOnctMSxXPWc/MTotMSxZPUk8MHx8MD09PUkmJjEvSTwwPzE6MDtmb3IoST1NYXRoLmFicyhJKSxpc05hTihJKXx8ST09PTEvMD8oRj1pc05hTihJKT8xOjAsUD1OKTooUD1NYXRoLmZsb29yKE1hdGgubG9nKEkpL01hdGguTE4yKSxJKihPPU1hdGgucG93KDIsLVAp''@;'; put 'put ''KTwxJiYoUC0tLE8qPTIpLChJKz1QK0w+PTE/Sy9POksqTWF0aC5wb3coMiwxLUwpKSpPPj0yJiYoUCsrLE8vPTIpLFArTD49Tj8oRj0wLFA9Tik6UCtMPj0xPyhGPShJKk8tMSkqTWF0aC5wb3coMixCKSxQKz1MKTooRj1JKk1hdGgucG93KDIsTC0xKSpNYXRoLnBvdygyLEIpLFA9MCkpO0I+''@;'; put 'put ''PTg7eVtfK1VdPTI1NSZGLFUrPVcsRi89MjU2LEItPTgpO2ZvcihQPVA8PEJ8Rix6Kz1CO3o+MDt5W18rVV09MjU1JlAsVSs9VyxQLz0yNTYsei09OCk7eVtfK1UtV118PTEyOCpZfX0sNTcxNzp1ZT0+e3VlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rp''@;'; put 'put ''b24oeSxJKXtJJiYoeS5zdXBlcl89SSx5LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6eSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKHksSSl7aWYoSSl7eS5zdXBlcl89STt2YXIg''@;'; put 'put ''Xz1mdW5jdGlvbigpe307Xy5wcm90b3R5cGU9SS5wcm90b3R5cGUseS5wcm90b3R5cGU9bmV3IF8seS5wcm90b3R5cGUuY29uc3RydWN0b3I9eX19fSwyNTg0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQxMCkoKSxnPXkoNzM3OSkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmciKSxCPWZ1bmN0aW9uKE8pe3JldHVybiEoSSYmTyYmIm9iamVjdCI9PXR5cGVvZiBPJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gTykmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT09ZyhPKX0sdz1mdW5jdGlvbihPKXtyZXR1cm4hIUIoTyl8fG51bGwhPT1PJiYib2JqZWN0Ij09dHlwZW9mIE8m''@;'; put 'put ''JiJsZW5ndGgiaW4gTyYmIm51bWJlciI9PXR5cGVvZiBPLmxlbmd0aCYmTy5sZW5ndGg+PTAmJiJbb2JqZWN0IEFycmF5XSIhPT1nKE8pJiYiY2FsbGVlImluIE8mJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1nKE8uY2FsbGVlKX0sUD1mdW5jdGlvbigpe3JldHVybiBCKGFyZ3VtZW50cyl9KCk7''@;'; put 'put ''Qi5pc0xlZ2FjeUFyZ3VtZW50cz13LHVlLmV4cG9ydHM9UD9COnd9LDUzMjA6dWU9PnsidXNlIHN0cmljdCI7dmFyIEksXyxYPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyx5PSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3QuYXBwbHk7aWYoImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e0k9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXt0aHJvdyBffX0pLF89e30seShmdW5jdGlvbigpe3Rocm93IDQyfSxudWxsLEkpfWNh''@;'; put 'put ''dGNoKGVlKXtlZSE9PV8mJih5PW51bGwpfWVsc2UgeT1udWxsO3ZhciBnPS9eXHMqY2xhc3NcYi8sQj1mdW5jdGlvbihKKXt0cnl7dmFyIG5lPVguY2FsbChKKTtyZXR1cm4gZy50ZXN0KG5lKX1jYXRjaHtyZXR1cm4hMX19LHc9ZnVuY3Rpb24oSil7dHJ5e3JldHVybiFCKEopJiYoWC5jYWxs''@;'; put 'put ''KEopLCEwKX1jYXRjaHtyZXR1cm4hMX19LFA9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxVPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiEhU3ltYm9sLnRvU3RyaW5nVGFnLFc9ISgwIGluWyxdKSxZPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2lmKCJvYmplY3QiPT10eXBlb2YgZG9jdW1l''@;'; put 'put ''bnQpe3ZhciBxPWRvY3VtZW50LmFsbDtQLmNhbGwocSk9PT1QLmNhbGwoZG9jdW1lbnQuYWxsKSYmKFk9ZnVuY3Rpb24oSil7aWYoKFd8fCFKKSYmKHR5cGVvZiBKPiJ1Inx8Im9iamVjdCI9PXR5cGVvZiBKKSl0cnl7dmFyIG5lPVAuY2FsbChKKTtyZXR1cm4oIltvYmplY3QgSFRNTEFsbENv''@;'; put 'put ''bGxlY3Rpb25dIj09PW5lfHwiW29iamVjdCBIVE1MIGRvY3VtZW50LmFsbCBjbGFzc10iPT09bmV8fCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSI9PT1uZXx8IltvYmplY3QgT2JqZWN0XSI9PT1uZSkmJm51bGw9PUooIiIpfWNhdGNoe31yZXR1cm4hMX0pfXVlLmV4cG9ydHM9eT9mdW5jdGlv''@;'; put 'put ''bihKKXtpZihZKEopKXJldHVybiEwO2lmKCFKfHwiZnVuY3Rpb24iIT10eXBlb2YgSiYmIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiExO3RyeXt5KEosbnVsbCxJKX1jYXRjaChuZSl7aWYobmUhPT1fKXJldHVybiExfXJldHVybiFCKEopJiZ3KEopfTpmdW5jdGlvbihKKXtpZihZKEopKXJl''@;'; put 'put ''dHVybiEwO2lmKCFKfHwiZnVuY3Rpb24iIT10eXBlb2YgSiYmIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiExO2lmKFUpcmV0dXJuIHcoSik7aWYoQihKKSlyZXR1cm4hMTt2YXIgbmU9UC5jYWxsKEopO3JldHVybiEoIltvYmplY3QgRnVuY3Rpb25dIiE9PW5lJiYiW29iamVjdCBHZW5lcmF0''@;'; put 'put ''b3JGdW5jdGlvbl0iIT09bmUmJiEvXlxbb2JqZWN0IEhUTUwvLnRlc3QobmUpKSYmdyhKKX19LDg2NjI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIHosST15KDczNzkpLGc9eSg5MjQ2KSgvXlxzKig/OmZ1bmN0aW9uKT9cKi8pLEI9eSg2NDEwKSgpLHc9eSgxNjE4KSxQPUkoIk9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmciKSxGPUkoIkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEwpcmV0dXJuITE7aWYoZyhGKEwpKSlyZXR1cm4hMDtpZighQilyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JG''@;'; put 'put ''dW5jdGlvbl0iPT09UChMKTtpZighdylyZXR1cm4hMTtpZih0eXBlb2Ygej4idSIpe3ZhciBVPWZ1bmN0aW9uKCl7aWYoIUIpcmV0dXJuITE7dHJ5e3JldHVybiBGdW5jdGlvbigicmV0dXJuIGZ1bmN0aW9uKigpIHt9IikoKX1jYXRjaHt9fSgpO3o9ISFVJiZ3KFUpfXJldHVybiB3KEwpPT09''@;'; put 'put ''en19LDg2MTE6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbih5KXtyZXR1cm4geSE9eX19LDM2MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU1NTkpLF89eSg0Mjg5KSxnPXkoODYxMSksQj15KDk0MTUpLHc9eSgzMTk0KSxQPUkoQigpLE51bWJlcik7XyhQ''@;'; put 'put ''LHtnZXRQb2x5ZmlsbDpCLGltcGxlbWVudGF0aW9uOmcsc2hpbTp3fSksdWUuZXhwb3J0cz1QfSw5NDE1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODYxMSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4mJk51bWJlci5pc05hTihOYU4pJiYhTnVt''@;'; put 'put ''YmVyLmlzTmFOKCJhIik/TnVtYmVyLmlzTmFOOkl9fSwzMTk0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDI4OSksXz15KDk0MTUpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgQj1fKCk7cmV0dXJuIEkoTnVtYmVyLHtpc05hTjpCfSx7aXNOYU46ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gTnVtYmVyLmlzTmFOIT09Qn19KSxCfX0sODQyMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdyxJPXkoNzM3OSksXz15KDY0MTApKCksZz15KDg4MjQpLEI9eSg3Mjk2KTtpZihfKXt2YXIgUD1JKCJSZWdFeHAucHJvdG90eXBlLmV4ZWMiKSxGPXt9LE89ZnVuY3Rpb24oKXt0aHJv''@;'; put 'put ''dyBGfSx6PXt0b1N0cmluZzpPLHZhbHVlT2Y6T307InN5bWJvbCI9PXR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUmJih6W1N5bWJvbC50b1ByaW1pdGl2ZV09Tyksdz1mdW5jdGlvbihVKXtpZighVXx8Im9iamVjdCIhPXR5cGVvZiBVKXJldHVybiExO3ZhciBXPUIoVSwibGFzdEluZGV4Iik7''@;'; put 'put ''aWYoIVd8fCFnKFcsInZhbHVlIikpcmV0dXJuITE7dHJ5e1AoVSx6KX1jYXRjaChxKXtyZXR1cm4gcT09PUZ9fX1lbHNle3ZhciBOPUkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKTt3PWZ1bmN0aW9uKFUpe3JldHVybiEoIVV8fCJvYmplY3QiIT10eXBlb2YgVSYmImZ1bmN0aW9uIiE9''@;'; put 'put ''dHlwZW9mIFUpJiYiW29iamVjdCBSZWdFeHBdIj09PU4oVSl9fXVlLmV4cG9ydHM9d30sNTY5MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzApO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7cmV0dXJuISFJKGcpfX0sNTgyNjp1ZT0+e3ZhciBYPXt9LnRvU3RyaW5nO3VlLmV4''@;'; put 'put ''cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oeSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09WC5jYWxsKHkpfX0sNjgxMzoodWUsWCx5KT0+e2xldCBJO3RyeXtJPXkoNzcpfWNhdGNoe0k9eSg0MTI5KX1jb25zdCBfPXkoODk4MSkse3N0cmluZ2lmeTpnLHN0cmlwQm9tOkJ9PXkoNjc4''@;'; put 'put ''MCk7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFk9e30peyJzdHJpbmciPT10eXBlb2YgWSYmKFk9e2VuY29kaW5nOll9KTtjb25zdCBxPVkuZnN8fEksZWU9ISgidGhyb3dzImluIFkpfHxZLnRocm93cztsZXQgbmUsSj15aWVsZCBfLmZyb21D''@;'; put 'put ''YWxsYmFjayhxLnJlYWRGaWxlKShXLFkpO0o9QihKKTt0cnl7bmU9SlNPTi5wYXJzZShKLFk/WS5yZXZpdmVyOm51bGwpfWNhdGNoKGllKXtpZihlZSl0aHJvdyBpZS5tZXNzYWdlPWAke1d9OiAke2llLm1lc3NhZ2V9YCxpZTtyZXR1cm4gbnVsbH1yZXR1cm4gbmV9KSkuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfWNvbnN0IEY9Xy5mcm9tUHJvbWlzZShmdW5jdGlvbiB3KFcpe3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO2Z1bmN0aW9uIE4oKXtyZXR1cm4oTj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVyxZLHE9e30pe2NvbnN0IGVlPXEuZnN8fEksSj1nKFkscSk7''@;'; put 'put ''eWllbGQgXy5mcm9tQ2FsbGJhY2soZWUud3JpdGVGaWxlKShXLEoscSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEw9Xy5mcm9tUHJvbWlzZShmdW5jdGlvbiB6KFcsWSl7cmV0dXJuIE4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7dWUuZXhwb3J0cz17cmVhZEZpbGU6RixyZWFk''@;'; put 'put ''RmlsZVN5bmM6ZnVuY3Rpb24gTyhXLFk9e30peyJzdHJpbmciPT10eXBlb2YgWSYmKFk9e2VuY29kaW5nOll9KTtjb25zdCBxPVkuZnN8fEksZWU9ISgidGhyb3dzImluIFkpfHxZLnRocm93czt0cnl7bGV0IEo9cS5yZWFkRmlsZVN5bmMoVyxZKTtyZXR1cm4gSj1CKEopLEpTT04ucGFyc2Uo''@;'; put 'put ''SixZLnJldml2ZXIpfWNhdGNoKEope2lmKGVlKXRocm93IEoubWVzc2FnZT1gJHtXfTogJHtKLm1lc3NhZ2V9YCxKO3JldHVybiBudWxsfX0sd3JpdGVGaWxlOkwsd3JpdGVGaWxlU3luYzpmdW5jdGlvbiBLKFcsWSxxPXt9KXtjb25zdCBlZT1xLmZzfHxJLEo9ZyhZLHEpO3JldHVybiBlZS53''@;'; put 'put ''cml0ZUZpbGVTeW5jKFcsSixxKX19fSw2NzgwOih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KS5CdWZmZXI7dWUuZXhwb3J0cz17c3RyaW5naWZ5OmZ1bmN0aW9uIF8oQix7RU9MOnc9IlxuIixmaW5hbEVPTDpQPSEwLHJlcGxhY2VyOkY9bnVsbCxzcGFjZXM6T309e30pe2NvbnN0IHo9UD93OiIi''@;'; put 'put ''O3JldHVybiBKU09OLnN0cmluZ2lmeShCLEYsTykucmVwbGFjZSgvXG4vZyx3KSt6fSxzdHJpcEJvbTpmdW5jdGlvbiBnKEIpe3JldHVybiBJLmlzQnVmZmVyKEIpJiYoQj1CLnRvU3RyaW5nKCJ1dGY4IikpLEIucmVwbGFjZSgvXlx1RkVGRi8sIiIpfX19LDYyNDU6KHVlLFgseSk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7ZnVuY3Rpb24gSShGKXt0aGlzLm1lc3NhZ2U9Rn15LnIoWCkseS5kKFgse0ludmFsaWRUb2tlbkVycm9yOigpPT5CLGRlZmF1bHQ6KCk9PlB9KSwoSS5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiO3ZhciBfPXR5cGVvZiB3aW5kb3c8''@;'; put 'put ''InUiJiZ3aW5kb3cuYXRvYiYmd2luZG93LmF0b2IuYmluZCh3aW5kb3cpfHxmdW5jdGlvbihGKXt2YXIgTz1TdHJpbmcoRikucmVwbGFjZSgvPSskLywiIik7aWYoTy5sZW5ndGglND09MSl0aHJvdyBuZXcgSSgiJ2F0b2InIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5v''@;'; put 'put ''dCBjb3JyZWN0bHkgZW5jb2RlZC4iKTtmb3IodmFyIHosTixMPTAsSz0wLFU9IiI7Tj1PLmNoYXJBdChLKyspO35OJiYoej1MJTQ/NjQqeitOOk4sTCsrJTQpP1UrPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1Jno+PigtMipMJjYpKTowKU49IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJj''@;'; put 'put ''ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5pbmRleE9mKE4pO3JldHVybiBVfTtmdW5jdGlvbiBCKEYpe3RoaXMubWVzc2FnZT1GfShCLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRUb2tlbkVycm9yIjtjb25zdCBQPWZ1bmN0aW9uIHcoRixPKXtpZigi''@;'; put 'put ''c3RyaW5nIiE9dHlwZW9mIEYpdGhyb3cgbmV3IEIoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkIik7dmFyIHo9ITA9PT0oTz1PfHx7fSkuaGVhZGVyPzA6MTt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZnVuY3Rpb24gZyhGKXt2YXIgTz1GLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywi''@;'; put 'put ''LyIpO3N3aXRjaChPLmxlbmd0aCU0KXtjYXNlIDA6YnJlYWs7Y2FzZSAyOk8rPSI9PSI7YnJlYWs7Y2FzZSAzOk8rPSI9IjticmVhaztkZWZhdWx0OnRocm93IklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyEifXRyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KF8oTykucmVwbGFjZSgvKC4p''@;'; put 'put ''L2csZnVuY3Rpb24oTixMKXt2YXIgSz1MLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIEsubGVuZ3RoPDImJihLPSIwIitLKSwiJSIrS30pKX1jYXRjaHtyZXR1cm4gXyhPKX19KEYuc3BsaXQoIi4iKVt6XSkpfWNhdGNoKE4pe3Rocm93IG5ldyBCKCJJ''@;'; put 'put ''bnZhbGlkIHRva2VuIHNwZWNpZmllZDogIitOLm1lc3NhZ2UpfX19LDE2NTg6KHVlLFgseSk9Pnt2YXIgZz0vW1xcXiQuKis/KClbXF17fXxdL2csQj1SZWdFeHAoZy5zb3VyY2UpLFA9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixGPSJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgeS5nJiZ5LmcmJnkuZy5PYmplY3Q9PT1PYmplY3QmJnkuZ3x8UHx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSx6PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsTj1GLlN5bWJvbCxMPU4/Ti5wcm90b3R5cGU6dm9pZCAwLEs9TD9MLnRvU3RyaW5nOnZvaWQgMDt1''@;'; put 'put ''ZS5leHBvcnRzPWZ1bmN0aW9uIGVlKEope3JldHVybihKPWZ1bmN0aW9uIHEoSil7cmV0dXJuIG51bGw9PUo/IiI6ZnVuY3Rpb24gVShKKXtpZigic3RyaW5nIj09dHlwZW9mIEopcmV0dXJuIEo7aWYoZnVuY3Rpb24gWShKKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIEp8fGZ1bmN0aW9uIFco''@;'; put 'put ''Sil7cmV0dXJuISFKJiYib2JqZWN0Ij09dHlwZW9mIEp9KEopJiYiW29iamVjdCBTeW1ib2xdIj09ei5jYWxsKEopfShKKSlyZXR1cm4gSz9LLmNhbGwoSik6IiI7dmFyIG5lPUorIiI7cmV0dXJuIjAiPT1uZSYmMS9KPT0tMS8wPyItMCI6bmV9KEopfShKKSkmJkIudGVzdChKKT9KLnJlcGxh''@;'; put 'put ''Y2UoZywiXFwkJiIpOkp9fSw4MDk0OnVlPT57dmFyIEk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt1ZS5leHBvcnRzPWZ1bmN0aW9uIF8oQil7cmV0dXJuITA9PT1CfHwhMT09PUJ8fGZ1bmN0aW9uIGcoQil7cmV0dXJuISFCJiYib2JqZWN0Ij09dHlwZW9mIEJ9KEIpJiYiW29iamVjdCBC''@;'; put 'put ''b29sZWFuXSI9PUkuY2FsbChCKX19LDIzMDc6KHVlLFgseSk9Pnt1ZT15Lm5tZCh1ZSk7dmFyIF89Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLGc9MSxCPTIsdz05MDA3MTk5MjU0NzQwOTkxLFA9IltvYmplY3QgQXJndW1lbnRzXSIsRj0iW29iamVjdCBBcnJheV0iLE89IltvYmplY3Qg''@;'; put 'put ''QXN5bmNGdW5jdGlvbl0iLHo9IltvYmplY3QgQm9vbGVhbl0iLE49IltvYmplY3QgRGF0ZV0iLEw9IltvYmplY3QgRXJyb3JdIixLPSJbb2JqZWN0IEZ1bmN0aW9uXSIsVT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLFc9IltvYmplY3QgTWFwXSIsWT0iW29iamVjdCBOdW1iZXJdIixx''@;'; put 'put ''PSJbb2JqZWN0IE51bGxdIixlZT0iW29iamVjdCBPYmplY3RdIixKPSJbb2JqZWN0IFByb21pc2VdIixuZT0iW29iamVjdCBQcm94eV0iLGllPSJbb2JqZWN0IFJlZ0V4cF0iLGxlPSJbb2JqZWN0IFNldF0iLG1lPSJbb2JqZWN0IFN0cmluZ10iLFRlPSJbb2JqZWN0IFVuZGVmaW5lZF0iLFNl''@;'; put 'put ''PSJbb2JqZWN0IFdlYWtNYXBdIixqZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLFY9IltvYmplY3QgRGF0YVZpZXddIixhZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyx0ZT0vXig/OjB8WzEtOV1cZCopJC8sc2U9e307c2VbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPXNlWyJbb2Jq''@;'; put 'put ''ZWN0IEZsb2F0NjRBcnJheV0iXT1zZVsiW29iamVjdCBJbnQ4QXJyYXldIl09c2VbIltvYmplY3QgSW50MTZBcnJheV0iXT1zZVsiW29iamVjdCBJbnQzMkFycmF5XSJdPXNlWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09c2VbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09c2VbIltvYmpl''@;'; put 'put ''Y3QgVWludDE2QXJyYXldIl09c2VbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsc2VbUF09c2VbRl09c2VbamVdPXNlW3pdPXNlW1ZdPXNlW05dPXNlW0xdPXNlW0tdPXNlW1ddPXNlW1ldPXNlW2VlXT1zZVtpZV09c2VbbGVdPXNlW21lXT1zZVtTZV09ITE7dmFyIHdlPSJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgeS5nJiZ5LmcmJnkuZy5PYmplY3Q9PT1PYmplY3QmJnkuZyxVZT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLEplPXdlfHxVZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxvdD1YJiYhWC5ub2RlVHlwZSYmWCx4ZT1vdCYm''@;'; put 'put ''dWUmJiF1ZS5ub2RlVHlwZSYmdWUsdmU9eGUmJnhlLmV4cG9ydHM9PT1vdCxYZT12ZSYmd2UucHJvY2Vzcyx6ZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gWGUmJlhlLmJpbmRpbmcmJlhlLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpLERlPXplJiZ6ZS5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24g''@;'; put 'put ''SWUoQW4sYW4pe2Zvcih2YXIgdmk9LTEsQXI9bnVsbD09QW4/MDpBbi5sZW5ndGg7Kyt2aTxBcjspaWYoYW4oQW5bdmldLHZpLEFuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBBZShBbixhbil7cmV0dXJuIEFuLmhhcyhhbil9ZnVuY3Rpb24gbnQoQW4pe3ZhciBhbj0tMSx2aT1BcnJh''@;'; put 'put ''eShBbi5zaXplKTtyZXR1cm4gQW4uZm9yRWFjaChmdW5jdGlvbihBcixQbyl7dmlbKythbl09W1BvLEFyXX0pLHZpfWZ1bmN0aW9uIHVuKEFuKXt2YXIgYW49LTEsdmk9QXJyYXkoQW4uc2l6ZSk7cmV0dXJuIEFuLmZvckVhY2goZnVuY3Rpb24oQXIpe3ZpWysrYW5dPUFyfSksdml9dmFyIEFu''@;'; put 'put ''LHl0PUFycmF5LnByb3RvdHlwZSxEdD1PYmplY3QucHJvdG90eXBlLGl0PUplWyJfX2NvcmUtanNfc2hhcmVkX18iXSwkZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsdHQ9RHQuaGFzT3duUHJvcGVydHksSGU9KEFuPS9bXi5dKyQvLmV4ZWMoaXQmJml0LmtleXMmJml0LmtleXMuSUVf''@;'; put 'put ''UFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIitBbjoiIix1dD1EdC50b1N0cmluZyxxdD1SZWdFeHAoIl4iKyRlLmNhbGwodHQpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3Ig''@;'; put 'put ''Lis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLFJ0PXZlP0plLkJ1ZmZlcjp2b2lkIDAsUHQ9SmUuU3ltYm9sLGNpPUplLlVpbnQ4QXJyYXksUXQ9RHQucHJvcGVydHlJc0VudW1lcmFibGUsc249eXQuc3BsaWNlLFJpPVB0P1B0LnRvU3RyaW5nVGFnOnZvaWQgMCxobj1PYmplY3QuZ2V0T3du''@;'; put 'put ''UHJvcGVydHlTeW1ib2xzLGZ0PVJ0P1J0LmlzQnVmZmVyOnZvaWQgMCxPcj1mdW5jdGlvbiBRZShBbixhbil7cmV0dXJuIGZ1bmN0aW9uKHZpKXtyZXR1cm4gQW4oYW4odmkpKX19KE9iamVjdC5rZXlzLE9iamVjdCksV3Q9WWgoSmUsIkRhdGFWaWV3IiksQXQ9WWgoSmUsIk1hcCIpLFJuPVlo''@;'; put 'put ''KEplLCJQcm9taXNlIiksc3Q9WWgoSmUsIlNldCIpLFV0PVloKEplLCJXZWFrTWFwIikscmk9WWgoT2JqZWN0LCJjcmVhdGUiKSxXZT1PbChXdCksVHQ9T2woQXQpLG5yPU9sKFJuKSxodD1PbChzdCkseHQ9T2woVXQpLGpuPVB0P1B0LnByb3RvdHlwZTp2b2lkIDAscm49am4/am4udmFsdWVP''@;'; put 'put ''Zjp2b2lkIDA7ZnVuY3Rpb24genQoQW4pe3ZhciBhbj0tMSx2aT1udWxsPT1Bbj8wOkFuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYW48dmk7KXt2YXIgQXI9QW5bYW5dO3RoaXMuc2V0KEFyWzBdLEFyWzFdKX19ZnVuY3Rpb24gZW4oQW4pe3ZhciBhbj0tMSx2aT1udWxsPT1Bbj8wOkFu''@;'; put 'put ''Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYW48dmk7KXt2YXIgQXI9QW5bYW5dO3RoaXMuc2V0KEFyWzBdLEFyWzFdKX19ZnVuY3Rpb24gZWkoQW4pe3ZhciBhbj0tMSx2aT1udWxsPT1Bbj8wOkFuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYW48dmk7KXt2YXIgQXI9QW5bYW5dO3Ro''@;'; put 'put ''aXMuc2V0KEFyWzBdLEFyWzFdKX19ZnVuY3Rpb24gV2koQW4pe3ZhciBhbj0tMSx2aT1udWxsPT1Bbj8wOkFuLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgZWk7Kythbjx2aTspdGhpcy5hZGQoQW5bYW5dKX1mdW5jdGlvbiBsYShBbil7dmFyIGFuPXRoaXMuX19kYXRhX189bmV3IGVu''@;'; put 'put ''KEFuKTt0aGlzLnNpemU9YW4uc2l6ZX1mdW5jdGlvbiBibChBbixhbil7Zm9yKHZhciB2aT1Bbi5sZW5ndGg7dmktLTspaWYodWYoQW5bdmldWzBdLGFuKSlyZXR1cm4gdmk7cmV0dXJuLTF9ZnVuY3Rpb24gTGMoQW4pe3JldHVybiBudWxsPT1Bbj92b2lkIDA9PT1Bbj9UZTpxOlJpJiZSaSBp''@;'; put 'put ''biBPYmplY3QoQW4pP2Z1bmN0aW9uIGNmKEFuKXt2YXIgYW49dHQuY2FsbChBbixSaSksdmk9QW5bUmldO3RyeXtBbltSaV09dm9pZCAwO3ZhciBBcj0hMH1jYXRjaHt9dmFyIFBvPXV0LmNhbGwoQW4pO3JldHVybiBBciYmKGFuP0FuW1JpXT12aTpkZWxldGUgQW5bUmldKSxQb30oQW4pOmZ1''@;'; put 'put ''bmN0aW9uIHI1KEFuKXtyZXR1cm4gdXQuY2FsbChBbil9KEFuKX1mdW5jdGlvbiBEMChBbil7cmV0dXJuIE5hKEFuKSYmTGMoQW4pPT1QfWZ1bmN0aW9uIGlyKEFuLGFuLHZpLEFyLFBvKXtyZXR1cm4gQW49PT1hbnx8KG51bGw9PUFufHxudWxsPT1hbnx8IU5hKEFuKSYmIU5hKGFuKT9BbiE9''@;'; put 'put ''QW4mJmFuIT1hbjpmdW5jdGlvbiB4YShBbixhbix2aSxBcixQbyxlbyl7dmFyIG9sPWRmKEFuKSx6bz1kZihhbiksVnM9b2w/RjpZaShBbiksU3M9em8/RjpZaShhbiksamw9KFZzPVZzPT1QP2VlOlZzKT09ZWUsSG89KFNzPVNzPT1QP2VlOlNzKT09ZWUsa289VnM9PVNzO2lmKGtvJiZoZihB''@;'; put 'put ''bikpe2lmKCFoZihhbikpcmV0dXJuITE7b2w9ITAsamw9ITF9aWYoa28mJiFqbClyZXR1cm4gZW98fChlbz1uZXcgbGEpLG9sfHxEMyhBbik/YjAoQW4sYW4sdmksQXIsUG8sZW8pOmZ1bmN0aW9uIEhhKEFuLGFuLHZpLEFyLFBvLGVvLG9sKXtzd2l0Y2godmkpe2Nhc2UgVjppZihBbi5ieXRl''@;'; put 'put ''TGVuZ3RoIT1hbi5ieXRlTGVuZ3RofHxBbi5ieXRlT2Zmc2V0IT1hbi5ieXRlT2Zmc2V0KXJldHVybiExO0FuPUFuLmJ1ZmZlcixhbj1hbi5idWZmZXI7Y2FzZSBqZTpyZXR1cm4hKEFuLmJ5dGVMZW5ndGghPWFuLmJ5dGVMZW5ndGh8fCFlbyhuZXcgY2koQW4pLG5ldyBjaShhbikpKTtjYXNl''@;'; put 'put ''IHo6Y2FzZSBOOmNhc2UgWTpyZXR1cm4gdWYoK0FuLCthbik7Y2FzZSBMOnJldHVybiBBbi5uYW1lPT1hbi5uYW1lJiZBbi5tZXNzYWdlPT1hbi5tZXNzYWdlO2Nhc2UgaWU6Y2FzZSBtZTpyZXR1cm4gQW49PWFuKyIiO2Nhc2UgVzp2YXIgem89bnQ7Y2FzZSBsZTppZih6b3x8KHpvPXVuKSxB''@;'; put 'put ''bi5zaXplIT1hbi5zaXplJiYhKEFyJmcpKXJldHVybiExO3ZhciBTcz1vbC5nZXQoQW4pO2lmKFNzKXJldHVybiBTcz09YW47QXJ8PUIsb2wuc2V0KEFuLGFuKTt2YXIgamw9YjAoem8oQW4pLHpvKGFuKSxBcixQbyxlbyxvbCk7cmV0dXJuIG9sLmRlbGV0ZShBbiksamw7Y2FzZSJbb2JqZWN0''@;'; put 'put ''IFN5bWJvbF0iOmlmKHJuKXJldHVybiBybi5jYWxsKEFuKT09cm4uY2FsbChhbil9cmV0dXJuITF9KEFuLGFuLFZzLHZpLEFyLFBvLGVvKTtpZighKHZpJmcpKXt2YXIgU3Q9amwmJnR0LmNhbGwoQW4sIl9fd3JhcHBlZF9fIiksQnQ9SG8mJnR0LmNhbGwoYW4sIl9fd3JhcHBlZF9fIik7aWYo''@;'; put 'put ''U3R8fEJ0KXt2YXIgX249U3Q/QW4udmFsdWUoKTpBbixtbj1CdD9hbi52YWx1ZSgpOmFuO3JldHVybiBlb3x8KGVvPW5ldyBsYSksUG8oX24sbW4sdmksQXIsZW8pfX1yZXR1cm4hIWtvJiYoZW98fChlbz1uZXcgbGEpLGZ1bmN0aW9uIEx1KEFuLGFuLHZpLEFyLFBvLGVvKXt2YXIgb2w9dmkm''@;'; put 'put ''Zyx6bz1QcihBbiksVnM9em8ubGVuZ3RoO2lmKFZzIT1QcihhbikubGVuZ3RoJiYhb2wpcmV0dXJuITE7Zm9yKHZhciBIbz1WcztIby0tOyl7dmFyIGtvPXpvW0hvXTtpZighKG9sP2tvIGluIGFuOnR0LmNhbGwoYW4sa28pKSlyZXR1cm4hMX12YXIgU3Q9ZW8uZ2V0KEFuKTtpZihTdCYmZW8u''@;'; put 'put ''Z2V0KGFuKSlyZXR1cm4gU3Q9PWFuO3ZhciBCdD0hMDtlby5zZXQoQW4sYW4pLGVvLnNldChhbixBbik7Zm9yKHZhciBfbj1vbDsrK0hvPFZzOyl7dmFyIG1uPUFuW2tvPXpvW0hvXV0sSW49YW5ba29dO2lmKEFyKXZhciBibj1vbD9BcihJbixtbixrbyxhbixBbixlbyk6QXIobW4sSW4sa28s''@;'; put 'put ''QW4sYW4sZW8pO2lmKCEodm9pZCAwPT09Ym4/bW49PT1Jbnx8UG8obW4sSW4sdmksQXIsZW8pOmJuKSl7QnQ9ITE7YnJlYWt9X258fChfbj0iY29uc3RydWN0b3IiPT1rbyl9aWYoQnQmJiFfbil7dmFyIHVyPUFuLmNvbnN0cnVjdG9yLGJpPWFuLmNvbnN0cnVjdG9yO3VyIT1iaSYmImNvbnN0''@;'; put 'put ''cnVjdG9yImluIEFuJiYiY29uc3RydWN0b3IiaW4gYW4mJiEoImZ1bmN0aW9uIj09dHlwZW9mIHVyJiZ1ciBpbnN0YW5jZW9mIHVyJiYiZnVuY3Rpb24iPT10eXBlb2YgYmkmJmJpIGluc3RhbmNlb2YgYmkpJiYoQnQ9ITEpfXJldHVybiBlby5kZWxldGUoQW4pLGVvLmRlbGV0ZShhbiksQnR9''@;'; put 'put ''KEFuLGFuLHZpLEFyLFBvLGVvKSl9KEFuLGFuLHZpLEFyLGlyLFBvKSl9ZnVuY3Rpb24gYjAoQW4sYW4sdmksQXIsUG8sZW8pe3ZhciBvbD12aSZnLHpvPUFuLmxlbmd0aCxWcz1hbi5sZW5ndGg7aWYoem8hPVZzJiYhKG9sJiZWcz56bykpcmV0dXJuITE7dmFyIFNzPWVvLmdldChBbik7aWYo''@;'; put 'put ''U3MmJmVvLmdldChhbikpcmV0dXJuIFNzPT1hbjt2YXIgamw9LTEsSG89ITAsa289dmkmQj9uZXcgV2k6dm9pZCAwO2Zvcihlby5zZXQoQW4sYW4pLGVvLnNldChhbixBbik7KytqbDx6bzspe3ZhciBTdD1BbltqbF0sQnQ9YW5bamxdO2lmKEFyKXZhciBfbj1vbD9BcihCdCxTdCxqbCxhbixB''@;'; put 'put ''bixlbyk6QXIoU3QsQnQsamwsQW4sYW4sZW8pO2lmKHZvaWQgMCE9PV9uKXtpZihfbiljb250aW51ZTtIbz0hMTticmVha31pZihrbyl7aWYoIUllKGFuLGZ1bmN0aW9uKG1uLEluKXtpZighQWUoa28sSW4pJiYoU3Q9PT1tbnx8UG8oU3QsbW4sdmksQXIsZW8pKSlyZXR1cm4ga28ucHVzaChJ''@;'; put 'put ''bil9KSl7SG89ITE7YnJlYWt9fWVsc2UgaWYoU3QhPT1CdCYmIVBvKFN0LEJ0LHZpLEFyLGVvKSl7SG89ITE7YnJlYWt9fXJldHVybiBlby5kZWxldGUoQW4pLGVvLmRlbGV0ZShhbiksSG99ZnVuY3Rpb24gUHIoQW4pe3JldHVybiBmdW5jdGlvbiBwdShBbixhbix2aSl7dmFyIEFyPWFuKEFu''@;'; put 'put ''KTtyZXR1cm4gZGYoQW4pP0FyOmZ1bmN0aW9uIE9lKEFuLGFuKXtmb3IodmFyIHZpPS0xLEFyPWFuLmxlbmd0aCxQbz1Bbi5sZW5ndGg7Kyt2aTxBcjspQW5bUG8rdmldPWFuW3ZpXTtyZXR1cm4gQW59KEFyLHZpKEFuKSl9KEFuLCRoLENzKX1mdW5jdGlvbiBvZChBbixhbil7dmFyIHZpPUFu''@;'; put 'put ''Ll9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBRYyhBbil7dmFyIGFuPXR5cGVvZiBBbjtyZXR1cm4ic3RyaW5nIj09YW58fCJudW1iZXIiPT1hbnx8InN5bWJvbCI9PWFufHwiYm9vbGVhbiI9PWFuPyJfX3Byb3RvX18iIT09QW46bnVsbD09PUFufShhbik/dmlbInN0cmluZyI9PXR5cGVvZiBh''@;'; put 'put ''bj8ic3RyaW5nIjoiaGFzaCJdOnZpLm1hcH1mdW5jdGlvbiBZaChBbixhbil7dmFyIHZpPWZ1bmN0aW9uIF90KEFuLGFuKXtyZXR1cm4gQW4/Llthbl19KEFuLGFuKTtyZXR1cm4gZnVuY3Rpb24gdWkoQW4pe3JldHVybiEoIU9jKEFuKXx8ZnVuY3Rpb24gbjUoQW4pe3JldHVybiEhSGUmJkhl''@;'; put 'put ''IGluIEFufShBbikpJiYoZmYoQW4pP3F0OmFlKS50ZXN0KE9sKEFuKSl9KHZpKT92aTp2b2lkIDB9enQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGhpKCl7dGhpcy5fX2RhdGFfXz1yaT9yaShudWxsKTp7fSx0aGlzLnNpemU9MH0senQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBjbihB''@;'; put 'put ''bil7dmFyIGFuPXRoaXMuaGFzKEFuKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bQW5dO3JldHVybiB0aGlzLnNpemUtPWFuPzE6MCxhbn0senQucHJvdG90eXBlLmdldD1mdW5jdGlvbiBmbihBbil7dmFyIGFuPXRoaXMuX19kYXRhX187aWYocmkpe3ZhciB2aT1hbltBbl07cmV0dXJuIHZpPT09''@;'; put 'put ''Xz92b2lkIDA6dml9cmV0dXJuIHR0LmNhbGwoYW4sQW4pP2FuW0FuXTp2b2lkIDB9LHp0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gSWkoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fO3JldHVybiByaT92b2lkIDAhPT1hbltBbl06dHQuY2FsbChhbixBbil9LHp0LnByb3RvdHlwZS5zZXQ9ZnVu''@;'; put 'put ''Y3Rpb24gWHQoQW4sYW4pe3ZhciB2aT10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKEFuKT8wOjEsdmlbQW5dPXJpJiZ2b2lkIDA9PT1hbj9fOmFuLHRoaXN9LGVuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiB1YSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXpl''@;'; put 'put ''PTB9LGVuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gRWkoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fLHZpPWJsKGFuLEFuKTtyZXR1cm4hKHZpPDB8fCh2aT09YW4ubGVuZ3RoLTE/YW4ucG9wKCk6c24uY2FsbChhbix2aSwxKSwtLXRoaXMuc2l6ZSwwKSl9LGVuLnByb3RvdHlwZS5nZXQ9''@;'; put 'put ''ZnVuY3Rpb24gdnIoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fLHZpPWJsKGFuLEFuKTtyZXR1cm4gdmk8MD92b2lkIDA6YW5bdmldWzFdfSxlbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFduKEFuKXtyZXR1cm4gYmwodGhpcy5fX2RhdGFfXyxBbik+LTF9LGVuLnByb3RvdHlwZS5zZXQ9ZnVu''@;'; put 'put ''Y3Rpb24gJGkoQW4sYW4pe3ZhciB2aT10aGlzLl9fZGF0YV9fLEFyPWJsKHZpLEFuKTtyZXR1cm4gQXI8MD8oKyt0aGlzLnNpemUsdmkucHVzaChbQW4sYW5dKSk6dmlbQXJdWzFdPWFuLHRoaXN9LGVpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBRcigpe3RoaXMuc2l6ZT0wLHRoaXMuX19k''@;'; put 'put ''YXRhX189e2hhc2g6bmV3IHp0LG1hcDpuZXcoQXR8fGVuKSxzdHJpbmc6bmV3IHp0fX0sZWkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBWaShBbil7dmFyIGFuPW9kKHRoaXMsQW4pLmRlbGV0ZShBbik7cmV0dXJuIHRoaXMuc2l6ZS09YW4/MTowLGFufSxlaS5wcm90b3R5cGUuZ2V0PWZ1''@;'; put 'put ''bmN0aW9uIE5pKEFuKXtyZXR1cm4gb2QodGhpcyxBbikuZ2V0KEFuKX0sZWkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBEYShBbil7cmV0dXJuIG9kKHRoaXMsQW4pLmhhcyhBbil9LGVpLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTHIoQW4sYW4pe3ZhciB2aT1vZCh0aGlzLEFuKSxBcj12aS5z''@;'; put 'put ''aXplO3JldHVybiB2aS5zZXQoQW4sYW4pLHRoaXMuc2l6ZSs9dmkuc2l6ZT09QXI/MDoxLHRoaXN9LFdpLnByb3RvdHlwZS5hZGQ9V2kucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24gcGEoQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChBbixfKSx0aGlzfSxXaS5wcm90b3R5cGUuaGFzPWZ1''@;'; put 'put ''bmN0aW9uIFFuKEFuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoQW4pfSxsYS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24geWEoKXt0aGlzLl9fZGF0YV9fPW5ldyBlbix0aGlzLnNpemU9MH0sbGEucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBMYShBbil7dmFyIGFuPXRoaXMuX19kYXRh''@;'; put 'put ''X18sdmk9YW4uZGVsZXRlKEFuKTtyZXR1cm4gdGhpcy5zaXplPWFuLnNpemUsdml9LGxhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gRmEoQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChBbil9LGxhLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gdGkoQW4pe3JldHVybiB0aGlzLl9fZGF0YV9f''@;'; put 'put ''LmhhcyhBbil9LGxhLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gZ28oQW4sYW4pe3ZhciB2aT10aGlzLl9fZGF0YV9fO2lmKHZpIGluc3RhbmNlb2YgZW4pe3ZhciBBcj12aS5fX2RhdGFfXztpZighQXR8fEFyLmxlbmd0aDwxOTkpcmV0dXJuIEFyLnB1c2goW0FuLGFuXSksdGhpcy5zaXplPSsr''@;'; put 'put ''dmkuc2l6ZSx0aGlzO3ZpPXRoaXMuX19kYXRhX189bmV3IGVpKEFyKX1yZXR1cm4gdmkuc2V0KEFuLGFuKSx0aGlzLnNpemU9dmkuc2l6ZSx0aGlzfTt2YXIgQ3M9aG4/ZnVuY3Rpb24oQW4pe3JldHVybiBudWxsPT1Bbj9bXTooQW49T2JqZWN0KEFuKSxmdW5jdGlvbiBGZShBbixhbil7Zm9y''@;'; put 'put ''KHZhciB2aT0tMSxBcj1udWxsPT1Bbj8wOkFuLmxlbmd0aCxQbz0wLGVvPVtdOysrdmk8QXI7KXt2YXIgb2w9QW5bdmldO2FuKG9sLHZpLEFuKSYmKGVvW1BvKytdPW9sKX1yZXR1cm4gZW99KGhuKEFuKSxmdW5jdGlvbihhbil7cmV0dXJuIFF0LmNhbGwoQW4sYW4pfSkpfTpmdW5jdGlvbiBL''@;'; put 'put ''aCgpe3JldHVybltdfSxZaT1MYztmdW5jdGlvbiB5bChBbixhbil7cmV0dXJuISEoYW49YW4/P3cpJiYoIm51bWJlciI9PXR5cGVvZiBBbnx8dGUudGVzdChBbikpJiZBbj4tMSYmQW4lMT09MCYmQW48YW59ZnVuY3Rpb24gT2woQW4pe2lmKG51bGwhPUFuKXt0cnl7cmV0dXJuICRlLmNhbGwo''@;'; put 'put ''QW4pfWNhdGNoe310cnl7cmV0dXJuIEFuKyIifWNhdGNoe319cmV0dXJuIiJ9ZnVuY3Rpb24gdWYoQW4sYW4pe3JldHVybiBBbj09PWFufHxBbiE9QW4mJmFuIT1hbn0oV3QmJllpKG5ldyBXdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9Vnx8QXQmJllpKG5ldyBBdCkhPVd8fFJuJiZZaShSbi5y''@;'; put 'put ''ZXNvbHZlKCkpIT1KfHxzdCYmWWkobmV3IHN0KSE9bGV8fFV0JiZZaShuZXcgVXQpIT1TZSkmJihZaT1mdW5jdGlvbihBbil7dmFyIGFuPUxjKEFuKSx2aT1hbj09ZWU/QW4uY29uc3RydWN0b3I6dm9pZCAwLEFyPXZpP09sKHZpKToiIjtpZihBcilzd2l0Y2goQXIpe2Nhc2UgV2U6cmV0dXJu''@;'; put 'put ''IFY7Y2FzZSBUdDpyZXR1cm4gVztjYXNlIG5yOnJldHVybiBKO2Nhc2UgaHQ6cmV0dXJuIGxlO2Nhc2UgeHQ6cmV0dXJuIFNlfXJldHVybiBhbn0pO3ZhciBzZD1EMChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0QwOmZ1bmN0aW9uKEFuKXtyZXR1cm4gTmEoQW4pJiZ0dC5jYWxs''@;'; put 'put ''KEFuLCJjYWxsZWUiKSYmIVF0LmNhbGwoQW4sImNhbGxlZSIpfSxkZj1BcnJheS5pc0FycmF5LGhmPWZ0fHxmdW5jdGlvbiBxaCgpe3JldHVybiExfTtmdW5jdGlvbiBmZihBbil7aWYoIU9jKEFuKSlyZXR1cm4hMTt2YXIgYW49TGMoQW4pO3JldHVybiBhbj09S3x8YW49PVV8fGFuPT1PfHxh''@;'; put 'put ''bj09bmV9ZnVuY3Rpb24gR2goQW4pe3JldHVybiJudW1iZXIiPT10eXBlb2YgQW4mJkFuPi0xJiZBbiUxPT0wJiZBbjw9d31mdW5jdGlvbiBPYyhBbil7dmFyIGFuPXR5cGVvZiBBbjtyZXR1cm4gbnVsbCE9QW4mJigib2JqZWN0Ij09YW58fCJmdW5jdGlvbiI9PWFuKX1mdW5jdGlvbiBOYShB''@;'; put 'put ''bil7cmV0dXJuIG51bGwhPUFuJiYib2JqZWN0Ij09dHlwZW9mIEFufXZhciBEMz1EZT9mdW5jdGlvbiBrZShBbil7cmV0dXJuIGZ1bmN0aW9uKGFuKXtyZXR1cm4gQW4oYW4pfX0oRGUpOmZ1bmN0aW9uIFZ0KEFuKXtyZXR1cm4gTmEoQW4pJiZHaChBbi5sZW5ndGgpJiYhIXNlW0xjKEFuKV19''@;'; put 'put ''O2Z1bmN0aW9uICRoKEFuKXtyZXR1cm4gZnVuY3Rpb24gazEoQW4pe3JldHVybiBudWxsIT1BbiYmR2goQW4ubGVuZ3RoKSYmIWZmKEFuKX0oQW4pP2Z1bmN0aW9uIE5zKEFuLGFuKXt2YXIgdmk9ZGYoQW4pLEFyPSF2aSYmc2QoQW4pLFBvPSF2aSYmIUFyJiZoZihBbiksZW89IXZpJiYhQXIm''@;'; put 'put ''JiFQbyYmRDMoQW4pLG9sPXZpfHxBcnx8UG98fGVvLHpvPW9sP2Z1bmN0aW9uIFZlKEFuLGFuKXtmb3IodmFyIHZpPS0xLEFyPUFycmF5KEFuKTsrK3ZpPEFuOylBclt2aV09YW4odmkpO3JldHVybiBBcn0oQW4ubGVuZ3RoLFN0cmluZyk6W10sVnM9em8ubGVuZ3RoO2Zvcih2YXIgU3MgaW4g''@;'; put 'put ''QW4pKGFufHx0dC5jYWxsKEFuLFNzKSkmJighb2x8fCEoImxlbmd0aCI9PVNzfHxQbyYmKCJvZmZzZXQiPT1Tc3x8InBhcmVudCI9PVNzKXx8ZW8mJigiYnVmZmVyIj09U3N8fCJieXRlTGVuZ3RoIj09U3N8fCJieXRlT2Zmc2V0Ij09U3MpfHx5bChTcyxWcykpKSYmem8ucHVzaChTcyk7cmV0''@;'; put 'put ''dXJuIHpvfShBbik6ZnVuY3Rpb24gSnIoQW4pe2lmKCFmdW5jdGlvbiB5MChBbil7dmFyIGFuPUFuJiZBbi5jb25zdHJ1Y3RvcjtyZXR1cm4gQW49PT0oImZ1bmN0aW9uIj09dHlwZW9mIGFuJiZhbi5wcm90b3R5cGV8fER0KX0oQW4pKXJldHVybiBPcihBbik7dmFyIGFuPVtdO2Zvcih2YXIg''@;'; put 'put ''dmkgaW4gT2JqZWN0KEFuKSl0dC5jYWxsKEFuLHZpKSYmImNvbnN0cnVjdG9yIiE9dmkmJmFuLnB1c2godmkpO3JldHVybiBhbn0oQW4pfXVlLmV4cG9ydHM9ZnVuY3Rpb24gZWgoQW4sYW4pe3JldHVybiBpcihBbixhbil9fSw4NDIzOih1ZSxYLHkpPT57dmFyIE89Im9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZix6PSJvYmplY3QiPT10eXBlb2YgeS5nJiZ5LmcmJnkuZy5PYmplY3Q9PT1PYmplY3QmJnkuZ3x8T3x8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxOPU9iamVjdC5wcm90b3R5cGUsTD1OLmhhc093blByb3BlcnR5LEs9''@;'; put 'put ''Ti50b1N0cmluZyxVPXouU3ltYm9sLFc9VT9VLnRvU3RyaW5nVGFnOnZvaWQgMDt1ZS5leHBvcnRzPWZ1bmN0aW9uIEooaWUpe2lmKCFmdW5jdGlvbiBuZShpZSl7dmFyIGxlPXR5cGVvZiBpZTtyZXR1cm4gbnVsbCE9aWUmJigib2JqZWN0Ij09bGV8fCJmdW5jdGlvbiI9PWxlKX0oaWUpKXJl''@;'; put 'put ''dHVybiExO3ZhciBsZT1mdW5jdGlvbiBZKGllKXtyZXR1cm4gbnVsbD09aWU/dm9pZCAwPT09aWU/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOlcmJlcgaW4gT2JqZWN0KGllKT9mdW5jdGlvbiBxKGllKXt2YXIgbGU9TC5jYWxsKGllLFcpLG1lPWllW1ddO3RyeXtpZVtX''@;'; put 'put ''XT12b2lkIDA7dmFyIF9lPSEwfWNhdGNoe312YXIgVGU9Sy5jYWxsKGllKTtyZXR1cm4gX2UmJihsZT9pZVtXXT1tZTpkZWxldGUgaWVbV10pLFRlfShpZSk6ZnVuY3Rpb24gZWUoaWUpe3JldHVybiBLLmNhbGwoaWUpfShpZSl9KGllKTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1sZXx8''@;'; put 'put ''IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09bGV8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09bGV8fCJbb2JqZWN0IFByb3h5XSI9PWxlfX0sOTcyMjp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24gWCh5KXtyZXR1cm4gbnVsbD09eX19LDk3Mzg6dWU9PnsidXNlIHN0cmljdCI7dWUu''@;'; put 'put ''ZXhwb3J0cz1NYXRoLmFic30sNjMyOTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGguZmxvb3J9LDM2Nzg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKHkpe3JldHVybiB5IT15fX0sMjI2NDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5l''@;'; put 'put ''eHBvcnRzPU1hdGgubWF4fSw1NzMwOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5taW59LDcwNzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGgucG93fSwzODYyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5yb3VuZH0sOTU1MDoodWUsWCx5KT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM2NzgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoZyl8fDA9PT1nP2c6ZzwwPy0xOjF9fSwyMzE4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTcxNyksXz15KDMzNDkpLGc9eSg5NTA5KS5CdWZmZXIsQj1uZXcgQXJyYXko''@;'; put 'put ''MTYpO2Z1bmN0aW9uIHcoKXtfLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gUChMLEspe3JldHVybiBMPDxLfEw+Pj4zMi1LfWZ1bmN0aW9uIEYoTCxLLFUsVyxZ''@;'; put 'put ''LHEsZWUpe3JldHVybiBQKEwrKEsmVXx+SyZXKStZK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIE8oTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKEsmV3xVJn5XKStZK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIHooTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKEteVV5XKStZK3F8MCxlZSkrS3ww''@;'; put 'put ''fWZ1bmN0aW9uIE4oTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKFVeKEt8flcpKStZK3F8MCxlZSkrS3wwfUkodyxfKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBMPUIsSz0wO0s8MTY7KytLKUxbS109dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpLKTt2YXIg''@;'; put 'put ''VT10aGlzLl9hLFc9dGhpcy5fYixZPXRoaXMuX2MscT10aGlzLl9kO1U9RihVLFcsWSxxLExbMF0sMzYxNDA5MDM2MCw3KSxxPUYocSxVLFcsWSxMWzFdLDM5MDU0MDI3MTAsMTIpLFk9RihZLHEsVSxXLExbMl0sNjA2MTA1ODE5LDE3KSxXPUYoVyxZLHEsVSxMWzNdLDMyNTA0NDE5NjYsMjIp''@;'; put 'put ''LFU9RihVLFcsWSxxLExbNF0sNDExODU0ODM5OSw3KSxxPUYocSxVLFcsWSxMWzVdLDEyMDAwODA0MjYsMTIpLFk9RihZLHEsVSxXLExbNl0sMjgyMTczNTk1NSwxNyksVz1GKFcsWSxxLFUsTFs3XSw0MjQ5MjYxMzEzLDIyKSxVPUYoVSxXLFkscSxMWzhdLDE3NzAwMzU0MTYsNykscT1GKHEs''@;'; put 'put ''VSxXLFksTFs5XSwyMzM2NTUyODc5LDEyKSxZPUYoWSxxLFUsVyxMWzEwXSw0Mjk0OTI1MjMzLDE3KSxXPUYoVyxZLHEsVSxMWzExXSwyMzA0NTYzMTM0LDIyKSxVPUYoVSxXLFkscSxMWzEyXSwxODA0NjAzNjgyLDcpLHE9RihxLFUsVyxZLExbMTNdLDQyNTQ2MjYxOTUsMTIpLFk9RihZLHEs''@;'; put 'put ''VSxXLExbMTRdLDI3OTI5NjUwMDYsMTcpLFU9TyhVLFc9RihXLFkscSxVLExbMTVdLDEyMzY1MzUzMjksMjIpLFkscSxMWzFdLDQxMjkxNzA3ODYsNSkscT1PKHEsVSxXLFksTFs2XSwzMjI1NDY1NjY0LDkpLFk9TyhZLHEsVSxXLExbMTFdLDY0MzcxNzcxMywxNCksVz1PKFcsWSxxLFUsTFsw''@;'; put 'put ''XSwzOTIxMDY5OTk0LDIwKSxVPU8oVSxXLFkscSxMWzVdLDM1OTM0MDg2MDUsNSkscT1PKHEsVSxXLFksTFsxMF0sMzgwMTYwODMsOSksWT1PKFkscSxVLFcsTFsxNV0sMzYzNDQ4ODk2MSwxNCksVz1PKFcsWSxxLFUsTFs0XSwzODg5NDI5NDQ4LDIwKSxVPU8oVSxXLFkscSxMWzldLDU2ODQ0''@;'; put 'put ''NjQzOCw1KSxxPU8ocSxVLFcsWSxMWzE0XSwzMjc1MTYzNjA2LDkpLFk9TyhZLHEsVSxXLExbM10sNDEwNzYwMzMzNSwxNCksVz1PKFcsWSxxLFUsTFs4XSwxMTYzNTMxNTAxLDIwKSxVPU8oVSxXLFkscSxMWzEzXSwyODUwMjg1ODI5LDUpLHE9TyhxLFUsVyxZLExbMl0sNDI0MzU2MzUxMiw5''@;'; put 'put ''KSxZPU8oWSxxLFUsVyxMWzddLDE3MzUzMjg0NzMsMTQpLFU9eihVLFc9TyhXLFkscSxVLExbMTJdLDIzNjgzNTk1NjIsMjApLFkscSxMWzVdLDQyOTQ1ODg3MzgsNCkscT16KHEsVSxXLFksTFs4XSwyMjcyMzkyODMzLDExKSxZPXooWSxxLFUsVyxMWzExXSwxODM5MDMwNTYyLDE2KSxXPXoo''@;'; put 'put ''VyxZLHEsVSxMWzE0XSw0MjU5NjU3NzQwLDIzKSxVPXooVSxXLFkscSxMWzFdLDI3NjM5NzUyMzYsNCkscT16KHEsVSxXLFksTFs0XSwxMjcyODkzMzUzLDExKSxZPXooWSxxLFUsVyxMWzddLDQxMzk0Njk2NjQsMTYpLFc9eihXLFkscSxVLExbMTBdLDMyMDAyMzY2NTYsMjMpLFU9eihVLFcs''@;'; put 'put ''WSxxLExbMTNdLDY4MTI3OTE3NCw0KSxxPXoocSxVLFcsWSxMWzBdLDM5MzY0MzAwNzQsMTEpLFk9eihZLHEsVSxXLExbM10sMzU3MjQ0NTMxNywxNiksVz16KFcsWSxxLFUsTFs2XSw3NjAyOTE4OSwyMyksVT16KFUsVyxZLHEsTFs5XSwzNjU0NjAyODA5LDQpLHE9eihxLFUsVyxZLExbMTJd''@;'; put 'put ''LDM4NzMxNTE0NjEsMTEpLFk9eihZLHEsVSxXLExbMTVdLDUzMDc0MjUyMCwxNiksVT1OKFUsVz16KFcsWSxxLFUsTFsyXSwzMjk5NjI4NjQ1LDIzKSxZLHEsTFswXSw0MDk2MzM2NDUyLDYpLHE9TihxLFUsVyxZLExbN10sMTEyNjg5MTQxNSwxMCksWT1OKFkscSxVLFcsTFsxNF0sMjg3ODYx''@;'; put 'put ''MjM5MSwxNSksVz1OKFcsWSxxLFUsTFs1XSw0MjM3NTMzMjQxLDIxKSxVPU4oVSxXLFkscSxMWzEyXSwxNzAwNDg1NTcxLDYpLHE9TihxLFUsVyxZLExbM10sMjM5OTk4MDY5MCwxMCksWT1OKFkscSxVLFcsTFsxMF0sNDI5MzkxNTc3MywxNSksVz1OKFcsWSxxLFUsTFsxXSwyMjQwMDQ0NDk3''@;'; put 'put ''LDIxKSxVPU4oVSxXLFkscSxMWzhdLDE4NzMzMTMzNTksNikscT1OKHEsVSxXLFksTFsxNV0sNDI2NDM1NTU1MiwxMCksWT1OKFkscSxVLFcsTFs2XSwyNzM0NzY4OTE2LDE1KSxXPU4oVyxZLHEsVSxMWzEzXSwxMzA5MTUxNjQ5LDIxKSxVPU4oVSxXLFkscSxMWzRdLDQxNDk0NDQyMjYsNiks''@;'; put 'put ''cT1OKHEsVSxXLFksTFsxMV0sMzE3NDc1NjkxNywxMCksWT1OKFkscSxVLFcsTFsyXSw3MTg3ODcyNTksMTUpLFc9TihXLFkscSxVLExbOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK1V8MCx0aGlzLl9iPXRoaXMuX2IrV3wwLHRoaXMuX2M9dGhpcy5fYytZfDAsdGhpcy5fZD10''@;'; put 'put ''aGlzLl9kK3F8MH0sdy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5f''@;'; put 'put ''YmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3Zh''@;'; put 'put ''ciBMPWcuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEwud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksTC53cml0ZUludDMyTEUodGhpcy5fYyw4KSxMLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxMfSx1ZS5leHBvcnRzPXd9LDMwNDc6KHVlLFgseSk9''@;'; put 'put ''Pnt2YXIgST15KDYyNDApLF89eSg5OTMxKTtmdW5jdGlvbiBnKEIpe3RoaXMucmFuZD1CfHxuZXcgXy5SYW5kfXVlLmV4cG9ydHM9ZyxnLmNyZWF0ZT1mdW5jdGlvbih3KXtyZXR1cm4gbmV3IGcodyl9LGcucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24odyl7dmFyIFA9dy5iaXRMZW5n''@;'; put 'put ''dGgoKSxGPU1hdGguY2VpbChQLzgpO2Rve3ZhciBPPW5ldyBJKHRoaXMucmFuZC5nZW5lcmF0ZShGKSl9d2hpbGUoTy5jbXAodyk+PTApO3JldHVybiBPfSxnLnByb3RvdHlwZS5fcmFuZHJhbmdlPWZ1bmN0aW9uKHcsUCl7dmFyIEY9UC5zdWIodyk7cmV0dXJuIHcuYWRkKHRoaXMuX3JhbmRi''@;'; put 'put ''ZWxvdyhGKSl9LGcucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24odyxQLEYpe3ZhciBPPXcuYml0TGVuZ3RoKCksej1JLm1vbnQodyksTj1uZXcgSSgxKS50b1JlZCh6KTtQfHwoUD1NYXRoLm1heCgxLE8vNDh8MCkpO2Zvcih2YXIgTD13LnN1Ym4oMSksSz0wOyFMLnRlc3RuKEspO0srKyk7Zm9y''@;'; put 'put ''KHZhciBVPXcuc2hybihLKSxXPUwudG9SZWQoeik7UD4wO1AtLSl7dmFyIHE9dGhpcy5fcmFuZHJhbmdlKG5ldyBJKDIpLEwpO0YmJkYocSk7dmFyIGVlPXEudG9SZWQoeikucmVkUG93KFUpO2lmKDAhPT1lZS5jbXAoTikmJjAhPT1lZS5jbXAoVykpe2Zvcih2YXIgSj0xO0o8SztKKyspe2lm''@;'; put 'put ''KDA9PT0oZWU9ZWUucmVkU3FyKCkpLmNtcChOKSlyZXR1cm4hMTtpZigwPT09ZWUuY21wKFcpKWJyZWFrfWlmKEo9PT1LKXJldHVybiExfX1yZXR1cm4hMH0sZy5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbih3LFApe3ZhciBGPXcuYml0TGVuZ3RoKCksTz1JLm1vbnQodyksej1uZXcg''@;'; put 'put ''SSgxKS50b1JlZChPKTtQfHwoUD1NYXRoLm1heCgxLEYvNDh8MCkpO2Zvcih2YXIgTj13LnN1Ym4oMSksTD0wOyFOLnRlc3RuKEwpO0wrKyk7Zm9yKHZhciBLPXcuc2hybihMKSxVPU4udG9SZWQoTyk7UD4wO1AtLSl7dmFyIFc9dGhpcy5fcmFuZHJhbmdlKG5ldyBJKDIpLE4pLFk9dy5nY2Qo''@;'; put 'put ''Vyk7aWYoMCE9PVkuY21wbigxKSlyZXR1cm4gWTt2YXIgcT1XLnRvUmVkKE8pLnJlZFBvdyhLKTtpZigwIT09cS5jbXAoeikmJjAhPT1xLmNtcChVKSl7Zm9yKHZhciBlZT0xO2VlPEw7ZWUrKyl7aWYoMD09PShxPXEucmVkU3FyKCkpLmNtcCh6KSlyZXR1cm4gcS5mcm9tUmVkKCkuc3Vibigx''@;'; put 'put ''KS5nY2Qodyk7aWYoMD09PXEuY21wKFUpKWJyZWFrfWlmKGVlPT09TClyZXR1cm4ocT1xLnJlZFNxcigpKS5mcm9tUmVkKCkuc3VibigxKS5nY2Qodyl9fXJldHVybiExfX0sNjI0MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7''@;'; put 'put ''aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rp''@;'; put 'put ''b24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJi''@;'; put 'put ''ZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDY2MTkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24g''@;'; put 'put ''RihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgp''@;'; put 'put ''e2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51''@;'; put 'put ''bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAo''@;'; put 'put ''Yik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2''@;'; put 'put ''KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAs''@;'; put 'put ''YixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxl''@;'; put 'put ''bmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5n''@;'; put 'put ''dGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxl''@;'; put 'put ''bmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgt''@;'; put 'put ''MSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAu''@;'; put 'put ''bGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFy''@;'; put 'put ''c2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14''@;'; put 'put ''KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9''@;'; put 'put ''TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtm''@;'; put 'put ''b3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0''@;'; put 'put ''P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0p''@;'; put 'put ''fXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMu''@;'; put 'put ''bGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWdu''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+''@;'; put 'put ''In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1''@;'; put 'put ''XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEs''@;'; put 'put ''NjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVn''@;'; put 'put ''YXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4''@;'; put 'put ''O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxh''@;'; put 'put ''ZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4''@;'; put 'put ''PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0''@;'; put 'put ''aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4''@;'; put 'put ''PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAi''@;'; put 'put ''K3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4g''@;'; put 'put ''Mj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBz''@;'; put 'put ''dG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50''@;'; put 'put ''b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1h''@;'; put 'put ''eCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDsh''@;'; put 'put ''QS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1''@;'; put 'put ''cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00''@;'; put 'put ''LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+''@;'; put 'put ''Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9C''@;'; put 'put ''aXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3Ro''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9t''@;'; put 'put ''VHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53''@;'; put 'put ''b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5u''@;'; put 'put ''ZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0''@;'; put 'put ''aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlz''@;'; put 'put ''LndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25l''@;'; put 'put ''KCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtp''@;'; put 'put ''Zih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSks''@;'; put 'put ''dGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5s''@;'; put 'put ''ZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07''@;'; put 'put ''Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRo''@;'; put 'put ''aXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEs''@;'; put 'put ''dGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zv''@;'; put 'put ''cih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkr''@;'; put 'put ''VCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90''@;'; put 'put ''eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9''@;'; put 'put ''cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhp''@;'; put 'put ''cy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgp''@;'; put 'put ''cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlz''@;'; put 'put ''LndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09''@;'; put 'put ''Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSx4ZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLHplPTgx''@;'; put 'put ''OTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sT2U9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0''@;'; put 'put ''LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1P''@;'; put 'put ''cj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4x''@;'; put 'put ''MyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8''@;'; put 'put ''PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxS''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoeGUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKHplLFJ0KSxtPShtPU1hdGguaW11bCh6ZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bCh4ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChPZSxSdCksbT0obT1NYXRoLmltdWwoT2UsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''SWUsUHQpLEU9RStNYXRoLmltdWwoemUsUXQpfDAsbT0obT1tK01hdGguaW11bCh6ZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsaG4p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRo''@;'; put 'put ''LmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoT2UsUXQpfDAsbT0obT1tK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bCh6ZSxobil8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFd0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3Qp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkp''@;'; put 'put ''PDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11''@;'; put 'put ''bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKE9lLGhuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEll''@;'; put 'put ''LGZ0KXwwLEU9RStNYXRoLmltdWwoemUsV3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFV0KXwwKStNYXRoLmltdWwodmUsc3Qp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRo''@;'; put 'put ''LmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFd0KXwwLG09KG09bStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoemUsc3Qp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bCh6ZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bCh4ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''JGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoT2Usc3QpfDAsbT0obT1tK01hdGguaW11bChPZSxVdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bCh6ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGh0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoeGUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFdlKXwwLG09KG09bStNYXRoLmltdWwoT2UsVHQpfDApK01hdGgu''@;'; put 'put ''aW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoemUsaHQpfDAsbT0obT1tK01hdGguaW11bCh6ZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxR''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChPZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHh0KXwwKStNYXRoLmltdWwoSWUs''@;'; put 'put ''aHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHplLHJuKXwwLG09KG09bStNYXRoLmltdWwoemUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoeGUsY24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxm''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11''@;'; put 'put ''bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQs''@;'; put 'put ''V2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKE9lLHJuKXwwLG09KG09bStNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoemUsY24pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKHhlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdp''@;'; put 'put ''Pj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUs''@;'; put 'put ''c3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE9lLGNuKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bCh6ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHplLGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMp''@;'; put 'put ''fDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQs''@;'; put 'put ''V2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKE9lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFu''@;'; put 'put ''Pj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUs''@;'; put 'put ''aHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxm''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11''@;'; put 'put ''bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxy''@;'; put 'put ''biksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkp''@;'; put 'put ''PDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXww''@;'; put 'put ''O3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhbOF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1X''@;'; put 'put ''aSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1W''@;'; put 'put ''LHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/''@;'; put 'put ''ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5s''@;'; put 'put ''ZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDAp''@;'; put 'put ''Pj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXko''@;'; put 'put ''cCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKysp''@;'; put 'put ''Q3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7''@;'; put 'put ''dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIg''@;'; put 'put ''VWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSx4ZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKnhlO3hlPXRlKnhlK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUreGUseFthZSt3ZStqXT1VZS1vdCxDW2FlK3dlK2pdPUplLXhlLHdlIT09RSYmKHZlPW0q''@;'; put 'put ''dGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1m''@;'; put 'put ''dW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2''@;'; put 'put ''YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24o''@;'; put 'put ''cCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihw''@;'; put 'put ''KXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxq''@;'; put 'put ''PW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQx''@;'; put 'put ''M2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0q''@;'; put 'put ''YWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAu''@;'; put 'put ''bGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4y''@;'; put 'put ''Nix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkp''@;'; put 'put ''LGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtp''@;'; put 'put ''ZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9''@;'; put 'put ''KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNb''@;'; put 'put ''VF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90''@;'; put 'put ''eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixI''@;'; put 'put ''PU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxl''@;'; put 'put ''bmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0p''@;'; put 'put ''e3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sdy5wcm90b3R5''@;'; put 'put ''cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMu''@;'; put 'put ''bGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53b3Jkc1swXSksdGhp''@;'; put 'put ''cy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRo''@;'; put 'put ''aXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztp''@;'; put 'put ''Zih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02''@;'; put 'put ''NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMu''@;'; put 'put ''X2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMm''@;'; put 'put ''SH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0''@;'; put 'put ''aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0x''@;'; put 'put ''XTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJy''@;'; put 'put ''YXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNl''@;'; put 'put ''PTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJt''@;'; put 'put ''dWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSwiZGl2''@;'; put 'put ''IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6''@;'; put 'put ''SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhp''@;'; put 'put ''cy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihw''@;'; put 'put ''LndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9kKHApO2lmKGIubW9k''@;'; put 'put ''LmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3Vi''@;'; put 'put ''bigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3LnByb3RvdHlwZS5p''@;'; put 'put ''ZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5k''@;'; put 'put ''aXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25l''@;'; put 'put ''KCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIg''@;'; put 'put ''YWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3''@;'; put 'put ''ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIo''@;'; put 'put ''eCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGFlLGI9dGhp''@;'; put 'put ''cyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8''@;'; put 'put ''PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRk''@;'; put 'put ''KEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlz''@;'; put 'put ''WmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5pdXNocm4oMSkseC5p''@;'; put 'put ''dXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlzdWIoeCl9cmV0dXJu''@;'; put 'put ''IHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''ISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8PGI7aWYodGhpcy5s''@;'; put 'put ''ZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVy''@;'; put 'put ''biAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIgeCxiPXA8MDtpZigw''@;'; put 'put ''IT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRz''@;'; put 'put ''WzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2''@;'; put 'put ''ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1cm4tMTtmb3IodmFy''@;'; put 'put ''IGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wbihw''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPj0wfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5wcm90b3R5cGUubHRl''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''bmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAuY29udmVydFRv''@;'; put 'put ''KHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRo''@;'; put 'put ''aXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMscCl9LHcucHJvdG90''@;'; put 'put ''eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhp''@;'; put 'put ''cy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0''@;'; put 'put ''aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5''@;'; put 'put ''cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9''@;'; put 'put ''O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgpe2llLmNhbGwodGhp''@;'; put 'put ''cywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAw''@;'; put 'put ''MDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBn''@;'; put 'put ''cmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBqZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygx''@;'; put 'put ''KS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRo''@;'; put 'put ''aXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24o''@;'; put 'put ''cCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oYi53b3Jkc1swXT0w''@;'; put 'put ''LGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVuZ3RoPD05KXJldHVy''@;'; put 'put ''biBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAud29yZHNbVC0xMF09''@;'; put 'put ''SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBD''@;'; put 'put ''PTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIobWUsaWUpLEIoX2Us''@;'; put 'put ''aWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWImJihwLndvcmRzW3Au''@;'; put 'put ''bGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXAp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3Zl''@;'; put 'put ''cmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJuIHguY21wbigwKTww''@;'; put 'put ''JiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9k''@;'; put 'put ''KHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxTZS5wcm90b3R5cGUu''@;'; put 'put ''c3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygx''@;'; put 'put ''KSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9''@;'; put 'put ''dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhwLEMuYWRkbigxKS5p''@;'; put 'put ''dXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11''@;'; put 'put ''bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6''@;'; put 'put ''dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlz''@;'; put 'put ''KSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLGFlPW0t''@;'; put 'put ''MTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90''@;'; put 'put ''eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiBuZXcgamUocCl9LEIoamUsU2UpLGplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0samUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlz''@;'; put 'put ''LnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSxqZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhp''@;'; put 'put ''cy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9''@;'; put 'put ''LGplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwo''@;'; put 'put ''dGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw5NzQ2OnVlPT57ZnVuY3Rpb24gWCh5LEkpe2lmKCF5KXRocm93IG5ldyBFcnJvcihJfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfXVlLmV4cG9y''@;'; put 'put ''dHM9WCxYLmVxdWFsPWZ1bmN0aW9uKEksXyxnKXtpZihJIT1fKXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZDogIitJKyIgIT0gIitfKX19LDQ1MDQ6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciB5PVg7ZnVuY3Rpb24gXyhCKXtyZXR1cm4gMT09PUIubGVuZ3RoPyIwIitC''@;'; put 'put ''OkJ9ZnVuY3Rpb24gZyhCKXtmb3IodmFyIHc9IiIsUD0wO1A8Qi5sZW5ndGg7UCsrKXcrPV8oQltQXS50b1N0cmluZygxNikpO3JldHVybiB3fXkudG9BcnJheT1mdW5jdGlvbiBJKEIsdyl7aWYoQXJyYXkuaXNBcnJheShCKSlyZXR1cm4gQi5zbGljZSgpO2lmKCFCKXJldHVybltdO3ZhciBQ''@;'; put 'put ''PVtdO2lmKCJzdHJpbmciIT10eXBlb2YgQil7Zm9yKHZhciBGPTA7RjxCLmxlbmd0aDtGKyspUFtGXT0wfEJbRl07cmV0dXJuIFB9aWYoImhleCI9PT13KWZvcigoQj1CLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKEI9IjAiK0IpLEY9MDtGPEIubGVuZ3RoO0Yr''@;'; put 'put ''PTIpUC5wdXNoKHBhcnNlSW50KEJbRl0rQltGKzFdLDE2KSk7ZWxzZSBmb3IoRj0wO0Y8Qi5sZW5ndGg7RisrKXt2YXIgTz1CLmNoYXJDb2RlQXQoRiksej1PPj44LE49MjU1Jk87ej9QLnB1c2goeixOKTpQLnB1c2goTil9cmV0dXJuIFB9LHkuemVybzI9Xyx5LnRvSGV4PWcseS5lbmNvZGU9''@;'; put 'put ''ZnVuY3Rpb24odyxQKXtyZXR1cm4iaGV4Ij09PVA/Zyh3KTp3fX0sNDI0NDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1mdW5jdGlvbih5KXtyZXR1cm4geSE9eX07dWUuZXhwb3J0cz1mdW5jdGlvbihJLF8pe3JldHVybiAwPT09SSYmMD09PV8/MS9JPT0xL186ISEoST09PV98fFgoSSkmJlgo''@;'; put 'put ''XykpfX0sNjA5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDI4OSksXz15KDU1NTkpLGc9eSg0MjQ0KSxCPXkoNTYyNCksdz15KDIyODEpLFA9XyhCKCksT2JqZWN0KTtJKFAse2dldFBvbHlmaWxsOkIsaW1wbGVtZW50YXRpb246ZyxzaGltOnd9KSx1ZS5leHBvcnRzPVB9LDU2''@;'; put 'put ''MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MjQ0KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6SX19LDIyODE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NjI0KSxfPXkoNDI4OSk7''@;'; put 'put ''dWUuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBCPUkoKTtyZXR1cm4gXyhPYmplY3Qse2lzOkJ9LHtpczpmdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXMhPT1CfX0pLEJ9fSw4OTg3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJO2lmKCFPYmplY3Qua2V5cyl7dmFyIF89T2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxnPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsQj15KDE0MTQpLHc9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxQPSF3LmNhbGwoe3RvU3RyaW5nOm51bGx9LCJ0b1N0cmluZyIpLEY9dy5jYWxsKGZ1bmN0aW9uKCl7fSwicHJv''@;'; put 'put ''dG90eXBlIiksTz1bInRvU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZU9mIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjb25zdHJ1Y3RvciJdLHo9ZnVuY3Rpb24oVSl7dmFyIFc9VS5jb25zdHJ1Y3RvcjtyZXR1cm4gVyYm''@;'; put 'put ''Vy5wcm90b3R5cGU9PT1VfSxOPXskYXBwbGljYXRpb25DYWNoZTohMCwkY29uc29sZTohMCwkZXh0ZXJuYWw6ITAsJGZyYW1lOiEwLCRmcmFtZUVsZW1lbnQ6ITAsJGZyYW1lczohMCwkaW5uZXJIZWlnaHQ6ITAsJGlubmVyV2lkdGg6ITAsJG9ubW96ZnVsbHNjcmVlbmNoYW5nZTohMCwkb25t''@;'; put 'put ''b3pmdWxsc2NyZWVuZXJyb3I6ITAsJG91dGVySGVpZ2h0OiEwLCRvdXRlcldpZHRoOiEwLCRwYWdlWE9mZnNldDohMCwkcGFnZVlPZmZzZXQ6ITAsJHBhcmVudDohMCwkc2Nyb2xsTGVmdDohMCwkc2Nyb2xsVG9wOiEwLCRzY3JvbGxYOiEwLCRzY3JvbGxZOiEwLCRzZWxmOiEwLCR3ZWJraXRJ''@;'; put 'put ''bmRleGVkREI6ITAsJHdlYmtpdFN0b3JhZ2VJbmZvOiEwLCR3aW5kb3c6ITB9LEw9ZnVuY3Rpb24oKXtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtmb3IodmFyIFUgaW4gd2luZG93KXRyeXtpZighTlsiJCIrVV0mJl8uY2FsbCh3aW5kb3csVSkmJm51bGwhPT13aW5kb3dbVV0mJiJv''@;'; put 'put ''YmplY3QiPT10eXBlb2Ygd2luZG93W1VdKXRyeXt6KHdpbmRvd1tVXSl9Y2F0Y2h7cmV0dXJuITB9fWNhdGNoe3JldHVybiEwfXJldHVybiExfSgpO0k9ZnVuY3Rpb24oVyl7dmFyIFk9bnVsbCE9PVcmJiJvYmplY3QiPT10eXBlb2YgVyxxPSJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1nLmNhbGwo''@;'; put 'put ''VyksZWU9QihXKSxKPVkmJiJbb2JqZWN0IFN0cmluZ10iPT09Zy5jYWxsKFcpLG5lPVtdO2lmKCFZJiYhcSYmIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgaWU9RiYmcTtpZihKJiZXLmxlbmd0aD4wJiYhXy5jYWxsKFcs''@;'; put 'put ''MCkpZm9yKHZhciBsZT0wO2xlPFcubGVuZ3RoOysrbGUpbmUucHVzaChTdHJpbmcobGUpKTtpZihlZSYmVy5sZW5ndGg+MClmb3IodmFyIG1lPTA7bWU8Vy5sZW5ndGg7KyttZSluZS5wdXNoKFN0cmluZyhtZSkpO2Vsc2UgZm9yKHZhciBfZSBpbiBXKSghaWV8fCJwcm90b3R5cGUiIT09X2Up''@;'; put 'put ''JiZfLmNhbGwoVyxfZSkmJm5lLnB1c2goU3RyaW5nKF9lKSk7aWYoUClmb3IodmFyIFRlPWZ1bmN0aW9uKFUpe2lmKHR5cGVvZiB3aW5kb3c+InUifHwhTClyZXR1cm4geihVKTt0cnl7cmV0dXJuIHooVSl9Y2F0Y2h7cmV0dXJuITF9fShXKSxTZT0wO1NlPE8ubGVuZ3RoOysrU2UpKCFUZXx8''@;'; put 'put ''ImNvbnN0cnVjdG9yIiE9PU9bU2VdKSYmXy5jYWxsKFcsT1tTZV0pJiZuZS5wdXNoKE9bU2VdKTtyZXR1cm4gbmV9fXVlLmV4cG9ydHM9SX0sMjIxNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1BcnJheS5wcm90b3R5cGUuc2xpY2UsXz15KDE0MTQpLGc9T2JqZWN0LmtleXMsQj1n''@;'; put 'put ''P2Z1bmN0aW9uKEYpe3JldHVybiBnKEYpfTp5KDg5ODcpLHc9T2JqZWN0LmtleXM7Qi5zaGltPWZ1bmN0aW9uKCl7aWYoT2JqZWN0LmtleXMpe3ZhciBGPWZ1bmN0aW9uKCl7dmFyIE89T2JqZWN0LmtleXMoYXJndW1lbnRzKTtyZXR1cm4gTyYmTy5sZW5ndGg9PT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''fSgxLDIpO0Z8fChPYmplY3Qua2V5cz1mdW5jdGlvbih6KXtyZXR1cm4gXyh6KT93KEkuY2FsbCh6KSk6dyh6KX0pfWVsc2UgT2JqZWN0LmtleXM9QjtyZXR1cm4gT2JqZWN0LmtleXN8fEJ9LHVlLmV4cG9ydHM9Qn0sMTQxNDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1PYmplY3QucHJvdG90''@;'; put 'put ''eXBlLnRvU3RyaW5nO3VlLmV4cG9ydHM9ZnVuY3Rpb24oSSl7dmFyIF89WC5jYWxsKEkpLGc9IltvYmplY3QgQXJndW1lbnRzXSI9PT1fO3JldHVybiBnfHwoZz0iW29iamVjdCBBcnJheV0iIT09XyYmbnVsbCE9PUkmJiJvYmplY3QiPT10eXBlb2YgSSYmIm51bWJlciI9PXR5cGVvZiBJLmxl''@;'; put 'put ''bmd0aCYmSS5sZW5ndGg+PTAmJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1YLmNhbGwoSS5jYWxsZWUpKSxnfX0sMjgzNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDIyMTUpLF89eSg1NDE5KSgpLGc9eSg3Mzc5KSxCPXkoODg5Miksdz1nKCJBcnJheS5wcm90b3R5cGUucHVzaCIp''@;'; put 'put ''LFA9ZygiT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSIpLEY9Xz9CLmdldE93blByb3BlcnR5U3ltYm9sczpudWxsO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeixOKXtpZihudWxsPT16KXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Zh''@;'; put 'put ''ciBMPUIoeik7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEw7Zm9yKHZhciBLPTE7Szxhcmd1bWVudHMubGVuZ3RoOysrSyl7dmFyIFU9Qihhcmd1bWVudHNbS10pLFc9SShVKSxZPV8mJihCLmdldE93blByb3BlcnR5U3ltYm9sc3x8Rik7aWYoWSlmb3IodmFyIHE9WShVKSxlZT0w''@;'; put 'put ''O2VlPHEubGVuZ3RoOysrZWUpe3ZhciBKPXFbZWVdO1AoVSxKKSYmdyhXLEopfWZvcih2YXIgbmU9MDtuZTxXLmxlbmd0aDsrK25lKXt2YXIgaWU9V1tuZV07UChVLGllKSYmKExbaWVdPVVbaWVdKX19cmV0dXJuIEx9fSw4MTYyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgz''@;'; put 'put ''Nyk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiFPYmplY3QuYXNzaWdufHxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO2Zvcih2YXIgQj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLHc9Qi5zcGxpdCgiIiksUD17fSxGPTA7Rjx3Lmxlbmd0aDsrK0YpUFt3W0ZdXT13''@;'; put 'put ''W0ZdO3ZhciBPPU9iamVjdC5hc3NpZ24oe30sUCksej0iIjtmb3IodmFyIE4gaW4gTyl6Kz1OO3JldHVybiBCIT09en0oKXx8ZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbnx8IU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucylyZXR1cm4hMTt2YXIgQj1PYmplY3QucHJldmVudEV4dGVuc2lv''@;'; put 'put ''bnMoezE6Mn0pO3RyeXtPYmplY3QuYXNzaWduKEIsInh5Iil9Y2F0Y2h7cmV0dXJuInkiPT09QlsxXX1yZXR1cm4hMX0oKT9JOk9iamVjdC5hc3NpZ259fSw3NDM1Oih1ZSxYKT0+e1guZW5kaWFubmVzcz1mdW5jdGlvbigpe3JldHVybiJMRSJ9LFguaG9zdG5hbWU9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdHlwZW9mIGxvY2F0aW9uPCJ1Ij9sb2NhdGlvbi5ob3N0bmFtZToiIn0sWC5sb2FkYXZnPWZ1bmN0aW9uKCl7cmV0dXJuW119LFgudXB0aW1lPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LFguZnJlZW1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxYLnRvdGFsbWVtPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LFguY3B1cz1mdW5jdGlvbigpe3JldHVybltdfSxYLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4iQnJvd3NlciJ9LFgucmVsZWFzZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9uYXZpZ2F0b3IuYXBwVmVyc2lv''@;'; put 'put ''bjoiIn0sWC5uZXR3b3JrSW50ZXJmYWNlcz1YLmdldE5ldHdvcmtJbnRlcmZhY2VzPWZ1bmN0aW9uKCl7cmV0dXJue319LFguYXJjaD1mdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0In0sWC5wbGF0Zm9ybT1mdW5jdGlvbigpe3JldHVybiJicm93c2VyIn0sWC50bXBkaXI9WC50bXBEaXI9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4iL3RtcCJ9LFguRU9MPSJcbiIsWC5ob21lZGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifX0sMjgxODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk4MDkpO1guY2VydGlmaWNhdGU9eSgxOTM0KTt2YXIgXz1JLmRlZmluZSgiUlNBUHJpdmF0ZUtleSIs''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5p''@;'; put 'put ''bnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MSIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtYLlJTQVByaXZhdGVLZXk9Xzt2YXIgZz1JLmRlZmluZSgiUlNBUHVibGljS2V5''@;'; put 'put ''IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCkpfSk7WC5SU0FQdWJsaWNLZXk9Zzt2YXIgQj1JLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgp''@;'; put 'put ''Lm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgibm9uZSIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5''@;'; put 'put ''KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSkub3B0aW9uYWwoKSl9KSx3PUkuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5Iiku''@;'; put 'put ''Yml0c3RyKCkpfSk7WC5QdWJsaWNLZXk9dzt2YXIgUD1JLmRlZmluZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtl''@;'; put 'put ''eSIpLm9jdHN0cigpKX0pO1guUHJpdmF0ZUtleT1QO3ZhciBGPUkuZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRl''@;'; put 'put ''Y3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBo''@;'; put 'put ''ZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO1guRW5jcnlwdGVkUHJpdmF0ZUtleT1GO3ZhciBPPUkuZGVmaW5lKCJEU0FQcml2YXRlS2V5Iixm''@;'; put 'put ''dW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCksdGhpcy5rZXkoInB1Yl9rZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9rZXkiKS5pbnQoKSl9''@;'; put 'put ''KTtYLkRTQVByaXZhdGVLZXk9TyxYLkRTQXBhcmFtPUkuZGVmaW5lKCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFyIHo9SS5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pLE49SS5kZWZp''@;'; put 'put ''bmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZSh6KSx0aGlzLmtleSgi''@;'; put 'put ''cHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtYLkVDUHJpdmF0ZUtleT1OLFguc2lnbmF0dXJlPUkuZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInIiKS5pbnQoKSx0aGlzLmtleSgicyIpLmludCgpKX0p''@;'; put 'put ''fSwxOTM0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTgwOSksXz1JLmRlZmluZSgiVGltZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSksZz1JLmRlZmluZSgiQXR0cmlidXRlVHlw''@;'; put 'put ''ZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgidmFsdWUiKS5hbnkoKSl9KSxCPUkuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0i''@;'; put 'put ''KS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCkpfSksdz1JLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIp''@;'; put 'put ''LnVzZShCKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLFA9SS5kZWZpbmUoIlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihnKX0pLEY9SS5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2YoUCl9''@;'; put 'put ''KSxPPUkuZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShGKX0pfSksej1JLmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShfKSx0aGlzLmtleSgibm90QWZ0''@;'; put 'put ''ZXIiKS51c2UoXykpfSksTj1JLmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxMPUku''@;'; put 'put ''ZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoQiksdGhpcy5r''@;'; put 'put ''ZXkoImlzc3VlciIpLnVzZShPKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoeiksdGhpcy5rZXkoInN1YmplY3QiKS51c2UoTyksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKHcpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9w''@;'; put 'put ''dGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihOKS5vcHRpb25hbCgpKX0pLEs9SS5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24o''@;'; put 'put ''KXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlmaWNhdGUiKS51c2UoTCksdGhpcy5rZXkoInNpZ25hdHVyZUFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTt1ZS5leHBvcnRzPUt9LDc2MzE6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylbXG5ccl0rL20sXz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJ''@;'; put 'put ''RklDQVRFKS0tLS0tL20sZz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpcblxyKy89XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxCPXkoMzA0OCksdz15KDQ2OTYpLFA9eSg5NTA5KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbihGLE8pe3ZhciBM''@;'; put 'put ''LHo9Ri50b1N0cmluZygpLE49ei5tYXRjaChJKTtpZihOKXt2YXIgVT0iYWVzIitOWzFdLFc9UC5mcm9tKE5bMl0sImhleCIpLFk9UC5mcm9tKE5bM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxxPUIoTyxXLnNsaWNlKDAsOCkscGFyc2VJbnQoTlsxXSwxMCkpLmtleSxlZT1b''@;'; put 'put ''XSxKPXcuY3JlYXRlRGVjaXBoZXJpdihVLHEsVyk7ZWUucHVzaChKLnVwZGF0ZShZKSksZWUucHVzaChKLmZpbmFsKCkpLEw9UC5jb25jYXQoZWUpfWVsc2V7dmFyIEs9ei5tYXRjaChnKTtMPVAuZnJvbShLWzJdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iil9cmV0dXJue3RhZzp6''@;'; put 'put ''Lm1hdGNoKF8pWzFdLGRhdGE6TH19fSw5ODA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODE4KSxfPXkoMjU2MiksZz15KDc2MzEpLEI9eSg0Njk2KSx3PXkoNTYzMiksUD15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBPKHope3ZhciBOOyJvYmplY3QiPT10eXBlb2YgeiYmIVAu''@;'; put 'put ''aXNCdWZmZXIoeikmJihOPXoucGFzc3BocmFzZSx6PXoua2V5KSwic3RyaW5nIj09dHlwZW9mIHomJih6PVAuZnJvbSh6KSk7dmFyIFcsWSxMPWcoeixOKSxLPUwudGFnLFU9TC5kYXRhO3N3aXRjaChLKXtjYXNlIkNFUlRJRklDQVRFIjpZPUkuY2VydGlmaWNhdGUuZGVjb2RlKFUsImRlciIp''@;'; put 'put ''LnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKFl8fChZPUkuUHVibGljS2V5LmRlY29kZShVLCJkZXIiKSksVz1ZLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4g''@;'; put 'put ''SS5SU0FQdWJsaWNLZXkuZGVjb2RlKFkuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gWS5zdWJqZWN0UHJpdmF0ZUtleT1ZLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOll9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEi''@;'; put 'put ''OnJldHVybiBZLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1JLkRTQXBhcmFtLmRlY29kZShZLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpZLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1cp''@;'; put 'put ''fWNhc2UiRU5DUllQVEVEIFBSSVZBVEUgS0VZIjpVPWZ1bmN0aW9uIEYoeixOKXt2YXIgTD16LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxLPXBhcnNlSW50KHouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxVPV9bei5h''@;'; put 'put ''bGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCIuIildLFc9ei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsWT16LnN1YmplY3RQcml2YXRlS2V5LHE9cGFyc2VJbnQoVS5zcGxpdCgiLSIpWzFdLDEwKS84LGVlPXcucGJrZGYyU3luYyhOLEwsSyxxLCJzaGExIiksSj1CLmNy''@;'; put 'put ''ZWF0ZURlY2lwaGVyaXYoVSxlZSxXKSxuZT1bXTtyZXR1cm4gbmUucHVzaChKLnVwZGF0ZShZKSksbmUucHVzaChKLmZpbmFsKCkpLFAuY29uY2F0KG5lKX0oVT1JLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpLE4pO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChXPShZPUku''@;'; put 'put ''UHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIikpLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4x''@;'; put 'put ''IjpyZXR1cm57Y3VydmU6WS5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTpJLkVDUHJpdmF0ZUtleS5kZWNvZGUoWS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFkuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1J''@;'; put 'put ''LkRTQXBhcmFtLmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6WS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitXKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4gSS5SU0FQdWJs''@;'; put 'put ''aWNLZXkuZGVjb2RlKFUsImRlciIpO2Nhc2UiUlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOkkuRFNBUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIil9O2Nh''@;'; put 'put ''c2UiRUMgUFJJVkFURSBLRVkiOnJldHVybntjdXJ2ZTooVT1JLkVDUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIikpLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpVLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrSyl9fU8uc2lnbmF0''@;'; put 'put ''dXJlPUkuc2lnbmF0dXJlLHVlLmV4cG9ydHM9T30sMTcyNTp1ZT0+e3VlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oeSxJKXt5LnN1cGVyXz1JLHkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1''@;'; put 'put ''ZTp5LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTpmdW5jdGlvbih5LEkpe3kuc3VwZXJfPUk7dmFyIF89ZnVuY3Rpb24oKXt9O18ucHJvdG90eXBlPUkucHJvdG90eXBlLHkucHJvdG90eXBlPW5ldyBfLHkucHJvdG90eXBlLmNvbnN0cnVjdG9yPXl9fSwy''@;'; put 'put ''OTc0OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbih5KXtyZXR1cm4geSYmIm9iamVjdCI9PXR5cGVvZiB5JiYiZnVuY3Rpb24iPT10eXBlb2YgeS5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgeS5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgeS5yZWFkVUludDh9fSw4MDU5Oih1ZSxYLHkpPT57''@;'; put 'put ''dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz0vJVtzZGolXS9nO1guZm9ybWF0PWZ1bmN0aW9uKEUpe2lmKCFsZShFKSl7Zm9yKHZhciBtPVtdLEE9MDtBPGFyZ3VtZW50cy5sZW5ndGg7QSsrKW0ucHVzaChQKGFyZ3VtZW50c1tBXSkpO3JldHVybiBtLmpvaW4oIiAiKX1BPTE7Zm9yKHZhciBh''@;'; put 'put ''ZT1hcmd1bWVudHMsdGU9YWUubGVuZ3RoLHNlPVN0cmluZyhFKS5yZXBsYWNlKGcsZnVuY3Rpb24oVWUpe2lmKCIlJSI9PT1VZSlyZXR1cm4iJSI7aWYoQT49dGUpcmV0dXJuIFVlO3N3aXRjaChVZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhhZVtBKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVt''@;'; put 'put ''YmVyKGFlW0ErK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYWVbQSsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIFVlfX0pLHdlPWFlW0FdO0E8dGU7d2U9YWVbKytBXSlKKHdlKXx8IVNlKHdlKT9zZSs9IiAiK3dlOnNlKz0iICIrUCh3''@;'; put 'put ''ZSk7cmV0dXJuIHNlfSxYLmRlcHJlY2F0ZT1mdW5jdGlvbihFLG0pe2lmKF9lKHkuZy5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWC5kZXByZWNhdGUoRSxtKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09SS5ub0RlcHJlY2F0aW9uKXJldHVybiBFO3ZhciBBPSEx''@;'; put 'put ''O3JldHVybiBmdW5jdGlvbiBhZSgpe2lmKCFBKXtpZihJLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG0pO0kudHJhY2VEZXByZWNhdGlvbj9fLnRyYWNlKG0pOl8uZXJyb3IobSksQT0hMH1yZXR1cm4gRS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgdyxCPXt9O2Z1bmN0''@;'; put 'put ''aW9uIFAoRSxtKXt2YXIgQT17c2VlbjpbXSxzdHlsaXplOk99O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoQS5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihBLmNvbG9ycz1hcmd1bWVudHNbM10pLGVlKG0pP0Euc2hvd0hpZGRlbj1tOm0mJlguX2V4dGVu''@;'; put 'put ''ZChBLG0pLF9lKEEuc2hvd0hpZGRlbikmJihBLnNob3dIaWRkZW49ITEpLF9lKEEuZGVwdGgpJiYoQS5kZXB0aD0yKSxfZShBLmNvbG9ycykmJihBLmNvbG9ycz0hMSksX2UoQS5jdXN0b21JbnNwZWN0KSYmKEEuY3VzdG9tSW5zcGVjdD0hMCksQS5jb2xvcnMmJihBLnN0eWxpemU9RiksTihB''@;'; put 'put ''LEUsQS5kZXB0aCl9ZnVuY3Rpb24gRihFLG0pe3ZhciBBPVAuc3R5bGVzW21dO3JldHVybiBBPyJceDFiWyIrUC5jb2xvcnNbQV1bMF0rIm0iK0UrIlx4MWJbIitQLmNvbG9yc1tBXVsxXSsibSI6RX1mdW5jdGlvbiBPKEUsbSl7cmV0dXJuIEV9ZnVuY3Rpb24gTihFLG0sQSl7aWYoRS5jdXN0''@;'; put 'put ''b21JbnNwZWN0JiZtJiZwKG0uaW5zcGVjdCkmJm0uaW5zcGVjdCE9PVguaW5zcGVjdCYmKCFtLmNvbnN0cnVjdG9yfHxtLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PW0pKXt2YXIgYWU9bS5pbnNwZWN0KEEsRSk7cmV0dXJuIGxlKGFlKXx8KGFlPU4oRSxhZSxBKSksYWV9dmFyIHRlPWZ1bmN0''@;'; put 'put ''aW9uIEwoRSxtKXtpZihfZShtKSlyZXR1cm4gRS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihsZShtKSl7dmFyIEE9IiciK0pTT04uc3RyaW5naWZ5KG0pLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7''@;'; put 'put ''cmV0dXJuIEUuc3R5bGl6ZShBLCJzdHJpbmciKX1yZXR1cm4gaWUobSk/RS5zdHlsaXplKCIiK20sIm51bWJlciIpOmVlKG0pP0Uuc3R5bGl6ZSgiIittLCJib29sZWFuIik6SihtKT9FLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShFLG0pO2lmKHRlKXJldHVybiB0ZTt2YXIgc2U9''@;'; put 'put ''T2JqZWN0LmtleXMobSksd2U9ZnVuY3Rpb24geihFKXt2YXIgbT17fTtyZXR1cm4gRS5mb3JFYWNoKGZ1bmN0aW9uKEEsYWUpe21bQV09ITB9KSxtfShzZSk7aWYoRS5zaG93SGlkZGVuJiYoc2U9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobSkpLFYobSkmJihzZS5pbmRleE9mKCJtZXNz''@;'; put 'put ''YWdlIik+PTB8fHNlLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBLKG0pO2lmKDA9PT1zZS5sZW5ndGgpe2lmKHAobSkpcmV0dXJuIEUuc3R5bGl6ZSgiW0Z1bmN0aW9uIisobS5uYW1lPyI6ICIrbS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihUZShtKSlyZXR1cm4gRS5z''@;'; put 'put ''dHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwicmVnZXhwIik7aWYoamUobSkpcmV0dXJuIEUuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJkYXRlIik7aWYoVihtKSlyZXR1cm4gSyhtKX12YXIgWGUsSmU9IiIsb3Q9ITEseGU9WyJ7Iiwi''@;'; put 'put ''fSJdO3JldHVybiBxKG0pJiYob3Q9ITAseGU9WyJbIiwiXSJdKSxwKG0pJiYoSmU9IiBbRnVuY3Rpb24iKyhtLm5hbWU/IjogIittLm5hbWU6IiIpKyJdIiksVGUobSkmJihKZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pKSxqZShtKSYmKEplPSIgIitEYXRlLnByb3Rv''@;'; put 'put ''dHlwZS50b1VUQ1N0cmluZy5jYWxsKG0pKSxWKG0pJiYoSmU9IiAiK0sobSkpLDAhPT1zZS5sZW5ndGh8fG90JiYwIT1tLmxlbmd0aD9BPDA/VGUobSk/RS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwicmVnZXhwIik6RS5zdHlsaXplKCJbT2JqZWN0XSIsInNw''@;'; put 'put ''ZWNpYWwiKTooRS5zZWVuLnB1c2gobSksWGU9b3Q/ZnVuY3Rpb24gVShFLG0sQSxhZSx0ZSl7Zm9yKHZhciBzZT1bXSx3ZT0wLFVlPW0ubGVuZ3RoO3dlPFVlOysrd2UpaihtLFN0cmluZyh3ZSkpP3NlLnB1c2goVyhFLG0sQSxhZSxTdHJpbmcod2UpLCEwKSk6c2UucHVzaCgiIik7cmV0dXJu''@;'; put 'put ''IHRlLmZvckVhY2goZnVuY3Rpb24oSmUpe0plLm1hdGNoKC9eXGQrJC8pfHxzZS5wdXNoKFcoRSxtLEEsYWUsSmUsITApKX0pLHNlfShFLG0sQSx3ZSxzZSk6c2UubWFwKGZ1bmN0aW9uKHplKXtyZXR1cm4gVyhFLG0sQSx3ZSx6ZSxvdCl9KSxFLnNlZW4ucG9wKCksZnVuY3Rpb24gWShFLG0s''@;'; put 'put ''QSl7dmFyIHRlPUUucmVkdWNlKGZ1bmN0aW9uKHNlLHdlKXtyZXR1cm4gd2UuaW5kZXhPZigiXG4iKSxzZSt3ZS5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk7cmV0dXJuIHRlPjYwP0FbMF0rKCIiPT09bT8iIjptKyJcbiAiKSsiICIrRS5qb2luKCIsXG4gICIp''@;'; put 'put ''KyIgIitBWzFdOkFbMF0rbSsiICIrRS5qb2luKCIsICIpKyIgIitBWzFdfShYZSxKZSx4ZSkpOnhlWzBdK0plK3hlWzFdfWZ1bmN0aW9uIEsoRSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEUpKyJdIn1mdW5jdGlvbiBXKEUsbSxBLGFlLHRlLHNlKXt2YXIgd2Us''@;'; put 'put ''VWUsSmU7aWYoKEplPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSx0ZSl8fHt2YWx1ZTptW3RlXX0pLmdldD9VZT1FLnN0eWxpemUoSmUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTpKZS5zZXQmJihVZT1FLnN0eWxpemUoIltTZXR0ZXJdIiwi''@;'; put 'put ''c3BlY2lhbCIpKSxqKGFlLHRlKXx8KHdlPSJbIit0ZSsiXSIpLFVlfHwoRS5zZWVuLmluZGV4T2YoSmUudmFsdWUpPDA/KFVlPUooQSk/TihFLEplLnZhbHVlLG51bGwpOk4oRSxKZS52YWx1ZSxBLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoVWU9c2U/VWUuc3BsaXQoIlxuIikubWFwKGZ1bmN0''@;'; put 'put ''aW9uKG90KXtyZXR1cm4iICAiK290fSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIitVZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24ob3Qpe3JldHVybiIgICAiK290fSkuam9pbigiXG4iKSk6VWU9RS5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxfZSh3ZSkpe2lmKHNlJiZ0''@;'; put 'put ''ZS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gVWU7KHdlPUpTT04uc3RyaW5naWZ5KCIiK3RlKSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8od2U9d2Uuc3Vic3RyKDEsd2UubGVuZ3RoLTIpLHdlPUUuc3R5bGl6ZSh3ZSwibmFtZSIpKTood2U9d2UucmVwbGFjZSgvJy9n''@;'; put 'put ''LCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLHdlPUUuc3R5bGl6ZSh3ZSwic3RyaW5nIikpfXJldHVybiB3ZSsiOiAiK1VlfWZ1bmN0aW9uIHEoRSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoRSl9ZnVuY3Rpb24gZWUoRSl7cmV0dXJuImJvb2xlYW4i''@;'; put 'put ''PT10eXBlb2YgRX1mdW5jdGlvbiBKKEUpe3JldHVybiBudWxsPT09RX1mdW5jdGlvbiBpZShFKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEV9ZnVuY3Rpb24gbGUoRSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBFfWZ1bmN0aW9uIF9lKEUpe3JldHVybiB2b2lkIDA9PT1FfWZ1bmN0aW9uIFRl''@;'; put 'put ''KEUpe3JldHVybiBTZShFKSYmIltvYmplY3QgUmVnRXhwXSI9PT14KEUpfWZ1bmN0aW9uIFNlKEUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgRSYmbnVsbCE9PUV9ZnVuY3Rpb24gamUoRSl7cmV0dXJuIFNlKEUpJiYiW29iamVjdCBEYXRlXSI9PT14KEUpfWZ1bmN0aW9uIFYoRSl7cmV0dXJu''@;'; put 'put ''IFNlKEUpJiYoIltvYmplY3QgRXJyb3JdIj09PXgoRSl8fEUgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gcChFKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRX1mdW5jdGlvbiB4KEUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRSl9ZnVuY3Rpb24gQyhFKXty''@;'; put 'put ''ZXR1cm4gRTwxMD8iMCIrRS50b1N0cmluZygxMCk6RS50b1N0cmluZygxMCl9WC5kZWJ1Z2xvZz1mdW5jdGlvbihFKXtpZihfZSh3KSYmKHc9SS5lbnYuTk9ERV9ERUJVR3x8IiIpLEU9RS50b1VwcGVyQ2FzZSgpLCFCW0VdKWlmKG5ldyBSZWdFeHAoIlxcYiIrRSsiXFxiIiwiaSIpLnRlc3Qo''@;'; put 'put ''dykpe3ZhciBtPUkucGlkO0JbRV09ZnVuY3Rpb24oKXt2YXIgQT1YLmZvcm1hdC5hcHBseShYLGFyZ3VtZW50cyk7Xy5lcnJvcigiJXMgJWQ6ICVzIixFLG0sQSl9fWVsc2UgQltFXT1mdW5jdGlvbigpe307cmV0dXJuIEJbRV19LFguaW5zcGVjdD1QLFAuY29sb3JzPXtib2xkOlsxLDIyXSxp''@;'; put 'put ''dGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMs''@;'; put 'put ''MzldfSxQLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LFguaXNBcnJheT1xLFguaXNCb29sZWFuPWVlLFgu''@;'; put 'put ''aXNOdWxsPUosWC5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiBuZShFKXtyZXR1cm4gbnVsbD09RX0sWC5pc051bWJlcj1pZSxYLmlzU3RyaW5nPWxlLFguaXNTeW1ib2w9ZnVuY3Rpb24gbWUoRSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBFfSxYLmlzVW5kZWZpbmVkPV9lLFguaXNSZWdF''@;'; put 'put ''eHA9VGUsWC5pc09iamVjdD1TZSxYLmlzRGF0ZT1qZSxYLmlzRXJyb3I9VixYLmlzRnVuY3Rpb249cCxYLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIGIoRSl7cmV0dXJuIG51bGw9PT1FfHwiYm9vbGVhbiI9PXR5cGVvZiBFfHwibnVtYmVyIj09dHlwZW9mIEV8fCJzdHJpbmciPT10eXBlb2YgRXx8''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBFfHx0eXBlb2YgRT4idSJ9LFguaXNCdWZmZXI9eSgyOTc0KTt2YXIgVD1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIGooRSxtKXtyZXR1cm4gT2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsbSl9WC5sb2c9ZnVuY3Rpb24oKXtfLmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gSCgpe3ZhciBFPW5ldyBEYXRlLG09W0MoRS5nZXRIb3VycygpKSxDKEUuZ2V0TWludXRlcygpKSxDKEUuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVy''@;'; put 'put ''bltFLmdldERhdGUoKSxUW0UuZ2V0TW9udGgoKV0sbV0uam9pbigiICIpfSgpLFguZm9ybWF0LmFwcGx5KFgsYXJndW1lbnRzKSl9LFguaW5oZXJpdHM9eSgxNzI1KSxYLl9leHRlbmQ9ZnVuY3Rpb24oRSxtKXtpZighbXx8IVNlKG0pKXJldHVybiBFO2Zvcih2YXIgQT1PYmplY3Qua2V5cyht''@;'; put 'put ''KSxhZT1BLmxlbmd0aDthZS0tOylFW0FbYWVdXT1tW0FbYWVdXTtyZXR1cm4gRX19LDI1MjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPSJ3aW4zMiI9PT1JLnBsYXRmb3JtLGc9eSg4MDU5KTtmdW5jdGlvbiBCKFkscSl7Zm9yKHZhciBlZT1bXSxKPTA7SjxZLmxl''@;'; put 'put ''bmd0aDtKKyspe3ZhciBuZT1ZW0pdOyFuZXx8Ii4iPT09bmV8fCgiLi4iPT09bmU/ZWUubGVuZ3RoJiYiLi4iIT09ZWVbZWUubGVuZ3RoLTFdP2VlLnBvcCgpOnEmJmVlLnB1c2goIi4uIik6ZWUucHVzaChuZSkpfXJldHVybiBlZX1mdW5jdGlvbiB3KFkpe2Zvcih2YXIgcT1ZLmxlbmd0aC0x''@;'; put 'put ''LGVlPTA7ZWU8PXEmJiFZW2VlXTtlZSsrKTtmb3IodmFyIEo9cTtKPj0wJiYhWVtKXTtKLS0pO3JldHVybiAwPT09ZWUmJko9PT1xP1k6ZWU+Sj9bXTpZLnNsaWNlKGVlLEorMSl9dmFyIFA9L14oW2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dK1teXFxcL10rKT8oW1xcXC9dKT8o''@;'; put 'put ''W1xzXFNdKj8pJC8sRj0vXihbXHNcU10qPykoKD86XC57MSwyfXxbXlxcXC9dKz98KShcLlteLlwvXFxdKnwpKSg/OltcXFwvXSopJC8sTz17fTtmdW5jdGlvbiB6KFkpe3ZhciBxPVAuZXhlYyhZKSxlZT0ocVsxXXx8IiIpKyhxWzJdfHwiIiksbmU9Ri5leGVjKHFbM118fCIiKTtyZXR1cm5b''@;'; put 'put ''ZWUsbmVbMV0sbmVbMl0sbmVbM11dfWZ1bmN0aW9uIE4oWSl7dmFyIHE9UC5leGVjKFkpLGVlPXFbMV18fCIiLEo9ISFlZSYmIjoiIT09ZWVbMV07cmV0dXJue2RldmljZTplZSxpc1VuYzpKLGlzQWJzb2x1dGU6Snx8ISFxWzJdLHRhaWw6cVszXX19ZnVuY3Rpb24gTChZKXtyZXR1cm4iXFxc''@;'; put 'put ''XCIrWS5yZXBsYWNlKC9eW1xcXC9dKy8sIiIpLnJlcGxhY2UoL1tcXFwvXSsvZywiXFwiKX1PLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIFk9IiIscT0iIixlZT0hMSxKPWFyZ3VtZW50cy5sZW5ndGgtMTtKPj0tMTtKLS0pe3ZhciBuZTtpZihKPj0wP25lPWFyZ3VtZW50c1tKXTpZPygh''@;'; put 'put ''KG5lPUkuZW52WyI9IitZXSl8fG5lLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCkhPT1ZLnRvTG93ZXJDYXNlKCkrIlxcIikmJihuZT1ZKyJcXCIpOm5lPUkuY3dkKCksIWcuaXNTdHJpbmcobmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBi''@;'; put 'put ''ZSBzdHJpbmdzIik7aWYobmUpe3ZhciBpZT1OKG5lKSxsZT1pZS5kZXZpY2UsbWU9aWUuaXNVbmMsX2U9aWUuaXNBYnNvbHV0ZSxUZT1pZS50YWlsO2lmKCghbGV8fCFZfHxsZS50b0xvd2VyQ2FzZSgpPT09WS50b0xvd2VyQ2FzZSgpKSYmKFl8fChZPWxlKSxlZXx8KHE9VGUrIlxcIitxLGVl''@;'; put 'put ''PV9lKSxZJiZlZSkpYnJlYWt9fXJldHVybiBtZSYmKFk9TChZKSksWSsoZWU/IlxcIjoiIikrKHE9QihxLnNwbGl0KC9bXFxcL10rLyksIWVlKS5qb2luKCJcXCIpKXx8Ii4ifSxPLm5vcm1hbGl6ZT1mdW5jdGlvbihZKXt2YXIgcT1OKFkpLGVlPXEuZGV2aWNlLEo9cS5pc1VuYyxuZT1xLmlz''@;'; put 'put ''QWJzb2x1dGUsaWU9cS50YWlsLGxlPS9bXFxcL10kLy50ZXN0KGllKTtyZXR1cm4hKGllPUIoaWUuc3BsaXQoL1tcXFwvXSsvKSwhbmUpLmpvaW4oIlxcIikpJiYhbmUmJihpZT0iLiIpLGllJiZsZSYmKGllKz0iXFwiKSxKJiYoZWU9TChlZSkpLGVlKyhuZT8iXFwiOiIiKStpZX0sTy5pc0Fi''@;'; put 'put ''c29sdXRlPWZ1bmN0aW9uKFkpe3JldHVybiBOKFkpLmlzQWJzb2x1dGV9LE8uam9pbj1mdW5jdGlvbigpe2Zvcih2YXIgWT1bXSxxPTA7cTxhcmd1bWVudHMubGVuZ3RoO3ErKyl7dmFyIGVlPWFyZ3VtZW50c1txXTtpZighZy5pc1N0cmluZyhlZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJn''@;'; put 'put ''dW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtlZSYmWS5wdXNoKGVlKX12YXIgSj1ZLmpvaW4oIlxcIik7cmV0dXJuL15bXFxcL117Mn1bXlxcXC9dLy50ZXN0KFlbMF0pfHwoSj1KLnJlcGxhY2UoL15bXFxcL117Mix9LywiXFwiKSksTy5ub3JtYWxpemUoSil9LE8ucmVs''@;'; put 'put ''YXRpdmU9ZnVuY3Rpb24oWSxxKXtZPU8ucmVzb2x2ZShZKSxxPU8ucmVzb2x2ZShxKTtmb3IodmFyIGVlPVkudG9Mb3dlckNhc2UoKSxKPXEudG9Mb3dlckNhc2UoKSxuZT13KHEuc3BsaXQoIlxcIikpLGllPXcoZWUuc3BsaXQoIlxcIikpLGxlPXcoSi5zcGxpdCgiXFwiKSksbWU9TWF0aC5t''@;'; put 'put ''aW4oaWUubGVuZ3RoLGxlLmxlbmd0aCksX2U9bWUsVGU9MDtUZTxtZTtUZSsrKWlmKGllW1RlXSE9PWxlW1RlXSl7X2U9VGU7YnJlYWt9aWYoMD09X2UpcmV0dXJuIHE7dmFyIFNlPVtdO2ZvcihUZT1fZTtUZTxpZS5sZW5ndGg7VGUrKylTZS5wdXNoKCIuLiIpO3JldHVybihTZT1TZS5jb25j''@;'; put 'put ''YXQobmUuc2xpY2UoX2UpKSkuam9pbigiXFwiKX0sTy5fbWFrZUxvbmc9ZnVuY3Rpb24oWSl7aWYoIWcuaXNTdHJpbmcoWSkpcmV0dXJuIFk7aWYoIVkpcmV0dXJuIiI7dmFyIHE9Ty5yZXNvbHZlKFkpO3JldHVybi9eW2EtekEtWl1cOlxcLy50ZXN0KHEpPyJcXFxcP1xcIitxOi9eXFxcXFte''@;'; put 'put ''Py5dLy50ZXN0KHEpPyJcXFxcP1xcVU5DXFwiK3Euc3Vic3RyaW5nKDIpOll9LE8uZGlybmFtZT1mdW5jdGlvbihZKXt2YXIgcT16KFkpLGVlPXFbMF0sSj1xWzFdO3JldHVybiBlZXx8Sj8oSiYmKEo9Si5zdWJzdHIoMCxKLmxlbmd0aC0xKSksZWUrSik6Ii4ifSxPLmJhc2VuYW1lPWZ1bmN0''@;'; put 'put ''aW9uKFkscSl7dmFyIGVlPXooWSlbMl07cmV0dXJuIHEmJmVlLnN1YnN0cigtMSpxLmxlbmd0aCk9PT1xJiYoZWU9ZWUuc3Vic3RyKDAsZWUubGVuZ3RoLXEubGVuZ3RoKSksZWV9LE8uZXh0bmFtZT1mdW5jdGlvbihZKXtyZXR1cm4geihZKVszXX0sTy5mb3JtYXQ9ZnVuY3Rpb24oWSl7aWYo''@;'; put 'put ''IWcuaXNPYmplY3QoWSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9mIFkpO2lmKCFnLmlzU3RyaW5nKFkucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3Qg''@;'; put 'put ''YmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0eXBlb2YgWS5yb290KTt2YXIgZWU9WS5kaXIsSj1ZLmJhc2V8fCIiO3JldHVybiBlZT9lZVtlZS5sZW5ndGgtMV09PT1PLnNlcD9lZStKOmVlK08uc2VwK0o6Sn0sTy5wYXJzZT1mdW5jdGlvbihZKXtpZighZy5pc1N0cmluZyhZKSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBZKTt2YXIgcT16KFkpO2lmKCFxfHw0IT09cS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK1krIiciKTtyZXR1cm57cm9vdDpx''@;'; put 'put ''WzBdLGRpcjpxWzBdK3FbMV0uc2xpY2UoMCwtMSksYmFzZTpxWzJdLGV4dDpxWzNdLG5hbWU6cVsyXS5zbGljZSgwLHFbMl0ubGVuZ3RoLXFbM10ubGVuZ3RoKX19LE8uc2VwPSJcXCIsTy5kZWxpbWl0ZXI9IjsiO3ZhciBLPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98''@;'; put 'put ''KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLyxVPXt9O2Z1bmN0aW9uIFcoWSl7cmV0dXJuIEsuZXhlYyhZKS5zbGljZSgxKX1VLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIFk9IiIscT0hMSxlZT1hcmd1bWVudHMubGVuZ3RoLTE7ZWU+PS0xJiYhcTtlZS0tKXt2YXIgSj1lZT49MD9hcmd1''@;'; put 'put ''bWVudHNbZWVdOkkuY3dkKCk7aWYoIWcuaXNTdHJpbmcoSikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtKJiYoWT1KKyIvIitZLHE9Ii8iPT09SlswXSl9cmV0dXJuKHE/Ii8iOiIiKSsoWT1CKFkuc3BsaXQoIi8iKSwh''@;'; put 'put ''cSkuam9pbigiLyIpKXx8Ii4ifSxVLm5vcm1hbGl6ZT1mdW5jdGlvbihZKXt2YXIgcT1VLmlzQWJzb2x1dGUoWSksZWU9WSYmIi8iPT09WVtZLmxlbmd0aC0xXTtyZXR1cm4hKFk9QihZLnNwbGl0KCIvIiksIXEpLmpvaW4oIi8iKSkmJiFxJiYoWT0iLiIpLFkmJmVlJiYoWSs9Ii8iKSwocT8i''@;'; put 'put ''LyI6IiIpK1l9LFUuaXNBYnNvbHV0ZT1mdW5jdGlvbihZKXtyZXR1cm4iLyI9PT1ZLmNoYXJBdCgwKX0sVS5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBZPSIiLHE9MDtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgZWU9YXJndW1lbnRzW3FdO2lmKCFnLmlzU3RyaW5nKGVlKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO2VlJiYoWSs9WT8iLyIrZWU6ZWUpfXJldHVybiBVLm5vcm1hbGl6ZShZKX0sVS5yZWxhdGl2ZT1mdW5jdGlvbihZLHEpe1k9VS5yZXNvbHZlKFkpLnN1YnN0cigxKSxxPVUucmVzb2x2ZShxKS5z''@;'; put 'put ''dWJzdHIoMSk7Zm9yKHZhciBlZT13KFkuc3BsaXQoIi8iKSksSj13KHEuc3BsaXQoIi8iKSksbmU9TWF0aC5taW4oZWUubGVuZ3RoLEoubGVuZ3RoKSxpZT1uZSxsZT0wO2xlPG5lO2xlKyspaWYoZWVbbGVdIT09SltsZV0pe2llPWxlO2JyZWFrfXZhciBtZT1bXTtmb3IobGU9aWU7bGU8ZWUu''@;'; put 'put ''bGVuZ3RoO2xlKyspbWUucHVzaCgiLi4iKTtyZXR1cm4obWU9bWUuY29uY2F0KEouc2xpY2UoaWUpKSkuam9pbigiLyIpfSxVLl9tYWtlTG9uZz1mdW5jdGlvbihZKXtyZXR1cm4gWX0sVS5kaXJuYW1lPWZ1bmN0aW9uKFkpe3ZhciBxPVcoWSksZWU9cVswXSxKPXFbMV07cmV0dXJuIGVlfHxK''@;'; put 'put ''PyhKJiYoSj1KLnN1YnN0cigwLEoubGVuZ3RoLTEpKSxlZStKKToiLiJ9LFUuYmFzZW5hbWU9ZnVuY3Rpb24oWSxxKXt2YXIgZWU9VyhZKVsyXTtyZXR1cm4gcSYmZWUuc3Vic3RyKC0xKnEubGVuZ3RoKT09PXEmJihlZT1lZS5zdWJzdHIoMCxlZS5sZW5ndGgtcS5sZW5ndGgpKSxlZX0sVS5l''@;'; put 'put ''eHRuYW1lPWZ1bmN0aW9uKFkpe3JldHVybiBXKFkpWzNdfSxVLmZvcm1hdD1mdW5jdGlvbihZKXtpZighZy5pc09iamVjdChZKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgWSk7aWYoIWcuaXNTdHJp''@;'; put 'put ''bmcoWS5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBZLnJvb3QpO3JldHVybihZLmRpcj9ZLmRpcitVLnNlcDoiIikrKFkuYmFzZXx8IiIpfSxVLnBhcnNlPWZ1bmN0aW9u''@;'; put 'put ''KFkpe2lmKCFnLmlzU3RyaW5nKFkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIFkpO3ZhciBxPVcoWSk7aWYoIXF8fDQhPT1xLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHBhdGgg''@;'; put 'put ''JyIrWSsiJyIpO3JldHVybiBxWzFdPXFbMV18fCIiLHFbMl09cVsyXXx8IiIscVszXT1xWzNdfHwiIix7cm9vdDpxWzBdLGRpcjpxWzBdK3FbMV0uc2xpY2UoMCwtMSksYmFzZTpxWzJdLGV4dDpxWzNdLG5hbWU6cVsyXS5zbGljZSgwLHFbMl0ubGVuZ3RoLXFbM10ubGVuZ3RoKX19LFUuc2Vw''@;'; put 'put ''PSIvIixVLmRlbGltaXRlcj0iOiIsdWUuZXhwb3J0cz1fP086VSx1ZS5leHBvcnRzLnBvc2l4PVUsdWUuZXhwb3J0cy53aW4zMj1PfSw1NjMyOih1ZSxYLHkpPT57WC5wYmtkZjI9eSg4NjM4KSxYLnBia2RmMlN5bmM9eSgxMjU3KX0sODYzODoodWUsWCx5KT0+e3ZhciBQLEwsST15KDk1MDkp''@;'; put 'put ''LkJ1ZmZlcixfPXkoNzM1NyksZz15KDIzNjgpLEI9eSgxMjU3KSx3PXkoNzc3NyksRj15LmcuY3J5cHRvJiZ5LmcuY3J5cHRvLnN1YnRsZSxPPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNoYS0yNTYiOiJTSEEtMjU2IixzaGEz''@;'; put 'put ''ODQ6IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIifSx6PVtdO2Z1bmN0aW9uIEsoKXtyZXR1cm4gTHx8KEw9eS5nLnByb2Nlc3MmJnkuZy5wcm9jZXNzLm5leHRUaWNrP3kuZy5wcm9jZXNzLm5leHRUaWNrOnkuZy5xdWV1''@;'; put 'put ''ZU1pY3JvdGFzaz95LmcucXVldWVNaWNyb3Rhc2s6eS5nLnNldEltbWVkaWF0ZT95Lmcuc2V0SW1tZWRpYXRlOnkuZy5zZXRUaW1lb3V0KX1mdW5jdGlvbiBVKFkscSxlZSxKLG5lKXtyZXR1cm4gRi5pbXBvcnRLZXkoInJhdyIsWSx7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRzIl0p''@;'; put 'put ''LnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBGLmRlcml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDpxLGl0ZXJhdGlvbnM6ZWUsaGFzaDp7bmFtZTpuZX19LGllLEo8PDMpfSkudGhlbihmdW5jdGlvbihpZSl7cmV0dXJuIEkuZnJvbShpZSl9KX11ZS5leHBvcnRzPWZ1bmN0aW9uKFkscSxl''@;'; put 'put ''ZSxKLG5lLGllKXsiZnVuY3Rpb24iPT10eXBlb2YgbmUmJihpZT1uZSxuZT12b2lkIDApO3ZhciBsZT1PWyhuZT1uZXx8InNoYTEiKS50b0xvd2VyQ2FzZSgpXTtpZihsZSYmImZ1bmN0aW9uIj09dHlwZW9mIHkuZy5Qcm9taXNlKXtpZihfKGVlLEopLFk9dyhZLGcsIlBhc3N3b3JkIikscT13''@;'; put 'put ''KHEsZywiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBpZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpOyFmdW5jdGlvbiBXKFkscSl7WS50aGVuKGZ1bmN0aW9uKGVlKXtLKCkoZnVuY3Rpb24oKXtxKG51bGwsZWUpfSl9LGZ1bmN0aW9uKGVlKXtL''@;'; put 'put ''KCkoZnVuY3Rpb24oKXtxKGVlKX0pfSl9KGZ1bmN0aW9uIE4oWSl7aWYoeS5nLnByb2Nlc3MmJiF5LmcucHJvY2Vzcy5icm93c2VyfHwhRnx8IUYuaW1wb3J0S2V5fHwhRi5kZXJpdmVCaXRzKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKHZvaWQgMCE9PXpbWV0pcmV0dXJuIHpbWV07''@;'; put 'put ''dmFyIHE9VShQPVB8fEkuYWxsb2MoOCksUCwxMCwxMjgsWSkudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybiB6W1ldPXEscX0obGUpLnRoZW4oZnVuY3Rpb24obWUpe3JldHVybiBtZT9VKFkscSxlZSxKLGxlKTpCKFkscSxlZSxK''@;'; put 'put ''LG5lKX0pLGllKX1lbHNlIEsoKShmdW5jdGlvbigpe3ZhciBtZTt0cnl7bWU9QihZLHEsZWUsSixuZSl9Y2F0Y2goX2Upe3JldHVybiBpZShfZSl9aWUobnVsbCxtZSl9KX19LDIzNjg6KHVlLFgseSk9Pnt2YXIgXyxJPXkoNDE1NSk7Xz15LmcucHJvY2VzcyYmeS5nLnByb2Nlc3MuYnJvd3Nl''@;'; put 'put ''cj8idXRmLTgiOnkuZy5wcm9jZXNzJiZ5LmcucHJvY2Vzcy52ZXJzaW9uP3BhcnNlSW50KEkudmVyc2lvbi5zcGxpdCgiLiIpWzBdLnNsaWNlKDEpLDEwKT49Nj8idXRmLTgiOiJiaW5hcnkiOiJ1dGYtOCIsdWUuZXhwb3J0cz1ffSw3MzU3OnVlPT57dmFyIFg9TWF0aC5wb3coMiwzMCktMTt1''@;'; put 'put ''ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7aWYoIm51bWJlciIhPXR5cGVvZiB5KXRocm93IG5ldyBUeXBlRXJyb3IoIkl0ZXJhdGlvbnMgbm90IGEgbnVtYmVyIik7aWYoeTwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBpdGVyYXRpb25zIik7aWYoIm51bWJlciIhPXR5cGVvZiBJKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoSTwwfHxJPlh8fEkhPUkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKX19LDEyNTc6KHVlLFgseSk9Pnt2YXIgST15KDgwMjgpLF89eSg5Nzg1KSxnPXkoOTA3MiksQj15KDk1MDkpLkJ1ZmZl''@;'; put 'put ''cix3PXkoNzM1NyksUD15KDIzNjgpLEY9eSg3Nzc3KSxPPUIuYWxsb2MoMTI4KSx6PXttZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1MTI6NjQscm1kMTYwOjIwLHJpcGVtZDE2MDoyMH07ZnVuY3Rpb24gTihVLFcsWSl7dmFyIHE9ZnVuY3Rpb24gTChV''@;'; put 'put ''KXtyZXR1cm4icm1kMTYwIj09PVV8fCJyaXBlbWQxNjAiPT09VT9mdW5jdGlvbiBZKHEpe3JldHVybihuZXcgXykudXBkYXRlKHEpLmRpZ2VzdCgpfToibWQ1Ij09PVU/STpmdW5jdGlvbiBXKHEpe3JldHVybiBnKFUpLnVwZGF0ZShxKS5kaWdlc3QoKX19KFUpLGVlPSJzaGE1MTIiPT09VXx8''@;'; put 'put ''InNoYTM4NCI9PT1VPzEyODo2NDtXLmxlbmd0aD5lZT9XPXEoVyk6Vy5sZW5ndGg8ZWUmJihXPUIuY29uY2F0KFtXLE9dLGVlKSk7Zm9yKHZhciBKPUIuYWxsb2NVbnNhZmUoZWUreltVXSksbmU9Qi5hbGxvY1Vuc2FmZShlZSt6W1VdKSxpZT0wO2llPGVlO2llKyspSltpZV09NTReV1tpZV0s''@;'; put 'put ''bmVbaWVdPTkyXldbaWVdO3ZhciBsZT1CLmFsbG9jVW5zYWZlKGVlK1krNCk7Si5jb3B5KGxlLDAsMCxlZSksdGhpcy5pcGFkMT1sZSx0aGlzLmlwYWQyPUosdGhpcy5vcGFkPW5lLHRoaXMuYWxnPVUsdGhpcy5ibG9ja3NpemU9ZWUsdGhpcy5oYXNoPXEsdGhpcy5zaXplPXpbVV19Ti5wcm90''@;'; put 'put ''b3R5cGUucnVuPWZ1bmN0aW9uKFUsVyl7cmV0dXJuIFUuY29weShXLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2goVykuY29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uIEsoVSxXLFkscSxlZSl7dyhZLHEpO3Zh''@;'; put 'put ''ciBKPW5ldyBOKGVlPWVlfHwic2hhMSIsVT1GKFUsUCwiUGFzc3dvcmQiKSwoVz1GKFcsUCwiU2FsdCIpKS5sZW5ndGgpLG5lPUIuYWxsb2NVbnNhZmUocSksaWU9Qi5hbGxvY1Vuc2FmZShXLmxlbmd0aCs0KTtXLmNvcHkoaWUsMCwwLFcubGVuZ3RoKTtmb3IodmFyIGxlPTAsbWU9eltlZV0s''@;'; put 'put ''X2U9TWF0aC5jZWlsKHEvbWUpLFRlPTE7VGU8PV9lO1RlKyspe2llLndyaXRlVUludDMyQkUoVGUsVy5sZW5ndGgpO2Zvcih2YXIgU2U9Si5ydW4oaWUsSi5pcGFkMSksamU9U2UsVj0xO1Y8WTtWKyspe2plPUoucnVuKGplLEouaXBhZDIpO2Zvcih2YXIgcD0wO3A8bWU7cCsrKVNlW3BdXj1q''@;'; put 'put ''ZVtwXX1TZS5jb3B5KG5lLGxlKSxsZSs9bWV9cmV0dXJuIG5lfX0sNzc3NzoodWUsWCx5KT0+e3ZhciBJPXkoOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnLEIpe2lmKEkuaXNCdWZmZXIoXykpcmV0dXJuIF87aWYoInN0cmluZyI9PXR5cGVvZiBfKXJldHVybiBJLmZyb20o''@;'; put 'put ''XyxnKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoXykpcmV0dXJuIEkuZnJvbShfLmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVFcnJvcihCKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0sOTkwODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5l''@;'; put 'put ''eHBvcnRzPVsiRmxvYXQxNkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiQmlnSW50NjRBcnJh''@;'; put 'put ''eSIsIkJpZ1VpbnQ2NEFycmF5Il19LDgyMTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTt1ZS5leHBvcnRzPXR5cGVvZiBJPiJ1Inx8IUkudmVyc2lvbnx8MD09PUkudmVyc2lvbi5pbmRleE9mKCJ2MC4iKXx8MD09PUkudmVyc2lvbi5pbmRleE9mKCJ2MS4iKSYmMCE9''@;'; put 'put ''PUkudmVyc2lvbi5pbmRleE9mKCJ2MS44LiIpP3tuZXh0VGljazpmdW5jdGlvbiBfKGcsQix3LFApe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYWxsYmFjayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIE8seixGPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg7c3dpdGNoKEYpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIEkubmV4dFRpY2soZyk7Y2FzZSAyOnJldHVybiBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7Zy5jYWxsKG51bGwsQil9KTtjYXNlIDM6cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtnLmNhbGwobnVsbCxCLHcpfSk7Y2FzZSA0''@;'; put 'put ''OnJldHVybiBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7Zy5jYWxsKG51bGwsQix3LFApfSk7ZGVmYXVsdDpmb3IoTz1uZXcgQXJyYXkoRi0xKSx6PTA7ejxPLmxlbmd0aDspT1t6KytdPWFyZ3VtZW50c1t6XTtyZXR1cm4gSS5uZXh0VGljayhmdW5jdGlvbigpe2cuYXBwbHkobnVsbCxPKX0pfX19''@;'; put 'put ''Okl9LDQxNTU6dWU9Pnt2YXIgeSxJLFg9dWUuZXhwb3J0cz17fTtmdW5jdGlvbiBfKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gZygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVk''@;'; put 'put ''Iil9ZnVuY3Rpb24gQihXKXtpZih5PT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChXLDApO2lmKCh5PT09X3x8IXkpJiZzZXRUaW1lb3V0KXJldHVybiB5PXNldFRpbWVvdXQsc2V0VGltZW91dChXLDApO3RyeXtyZXR1cm4geShXLDApfWNhdGNoe3RyeXtyZXR1cm4geS5jYWxsKG51''@;'; put 'put ''bGwsVywwKX1jYXRjaHtyZXR1cm4geS5jYWxsKHRoaXMsVywwKX19fSFmdW5jdGlvbigpe3RyeXt5PSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6X31jYXRjaHt5PV99dHJ5e0k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6Z31j''@;'; put 'put ''YXRjaHtJPWd9fSgpO3ZhciBPLFA9W10sRj0hMSx6PS0xO2Z1bmN0aW9uIE4oKXshRnx8IU98fChGPSExLE8ubGVuZ3RoP1A9Ty5jb25jYXQoUCk6ej0tMSxQLmxlbmd0aCYmTCgpKX1mdW5jdGlvbiBMKCl7aWYoIUYpe3ZhciBXPUIoTik7Rj0hMDtmb3IodmFyIFk9UC5sZW5ndGg7WTspe2Zv''@;'; put 'put ''cihPPVAsUD1bXTsrK3o8WTspTyYmT1t6XS5ydW4oKTt6PS0xLFk9UC5sZW5ndGh9Tz1udWxsLEY9ITEsZnVuY3Rpb24gdyhXKXtpZihJPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoVyk7aWYoKEk9PT1nfHwhSSkmJmNsZWFyVGltZW91dClyZXR1cm4gST1jbGVhclRpbWVv''@;'; put 'put ''dXQsY2xlYXJUaW1lb3V0KFcpO3RyeXtyZXR1cm4gSShXKX1jYXRjaHt0cnl7cmV0dXJuIEkuY2FsbChudWxsLFcpfWNhdGNoe3JldHVybiBJLmNhbGwodGhpcyxXKX19fShXKX19ZnVuY3Rpb24gSyhXLFkpe3RoaXMuZnVuPVcsdGhpcy5hcnJheT1ZfWZ1bmN0aW9uIFUoKXt9WC5uZXh0VGlj''@;'; put 'put ''az1mdW5jdGlvbihXKXt2YXIgWT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBxPTE7cTxhcmd1bWVudHMubGVuZ3RoO3ErKylZW3EtMV09YXJndW1lbnRzW3FdO1AucHVzaChuZXcgSyhXLFkpKSwxPT09UC5sZW5ndGgmJiFGJiZC''@;'; put 'put ''KEwpfSxLLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxYLnRpdGxlPSJicm93c2VyIixYLmJyb3dzZXI9ITAsWC5lbnY9e30sWC5hcmd2PVtdLFgudmVyc2lvbj0iIixYLnZlcnNpb25zPXt9LFgub249VSxYLmFkZExpc3RlbmVyPVUs''@;'; put 'put ''WC5vbmNlPVUsWC5vZmY9VSxYLnJlbW92ZUxpc3RlbmVyPVUsWC5yZW1vdmVBbGxMaXN0ZW5lcnM9VSxYLmVtaXQ9VSxYLnByZXBlbmRMaXN0ZW5lcj1VLFgucHJlcGVuZE9uY2VMaXN0ZW5lcj1VLFgubGlzdGVuZXJzPWZ1bmN0aW9uKFcpe3JldHVybltdfSxYLmJpbmRpbmc9ZnVuY3Rpb24o''@;'; put 'put ''Vyl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxYLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sWC5jaGRpcj1mdW5jdGlvbihXKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxYLnVtYXNrPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIDB9fSw3OTAwOih1ZSxYLHkpPT57WC5wdWJsaWNFbmNyeXB0PXkoNjU1OSksWC5wcml2YXRlRGVjcnlwdD15KDYxMzgpLFgucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24oXyxnKXtyZXR1cm4gWC5wdWJsaWNFbmNyeXB0KF8sZywhMCl9LFgucHVibGljRGVjcnlwdD1m''@;'; put 'put ''dW5jdGlvbihfLGcpe3JldHVybiBYLnByaXZhdGVEZWNyeXB0KF8sZywhMCl9fSw5MTk5Oih1ZSxYLHkpPT57dmFyIEk9eSgzNDgyKSxfPXkoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIGcoQil7dmFyIHc9Xy5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdy53cml0ZVVJbnQzMkJFKEIsMCksd311ZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKEIsdyl7Zm9yKHZhciBPLFA9Xy5hbGxvYygwKSxGPTA7UC5sZW5ndGg8dzspTz1nKEYrKyksUD1fLmNvbmNhdChbUCxJKCJzaGExIikudXBkYXRlKEIpLnVwZGF0ZShPKS5kaWdlc3QoKV0pO3JldHVybiBQLnNsaWNlKDAsdyl9fSwyMTQ0OmZ1bmN0aW9uKHVlLFgs''@;'; put 'put ''eSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5w''@;'; put 'put ''cm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJi''@;'; put 'put ''ZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1''@;'; put 'put ''Ij93aW5kb3cuQnVmZmVyOnkoNzEwOCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJu''@;'; put 'put ''IGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJu''@;'; put 'put ''IEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAu''@;'; put 'put ''Y21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBw''@;'; put 'put ''KXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigx''@;'; put 'put ''Nj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9''@;'; put 'put ''LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29y''@;'; put 'put ''ZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxl''@;'; put 'put ''bmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29y''@;'; put 'put ''ZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2''@;'; put 'put ''JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihq''@;'; put 'put ''LT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0''@;'; put 'put ''aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBm''@;'; put 'put ''b3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNl''@;'; put 'put ''PWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAs''@;'; put 'put ''QSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jk''@;'; put 'put ''c1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRo''@;'; put 'put ''aXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1m''@;'; put 'put ''dW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0t''@;'; put 'put ''O3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0''@;'; put 'put ''aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcs''@;'; put 'put ''Nyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUz''@;'; put 'put ''NiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQz''@;'; put 'put ''NTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82''@;'; put 'put ''NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndv''@;'; put 'put ''cmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIp''@;'; put 'put ''e3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUs''@;'; put 'put ''KEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4''@;'; put 'put ''fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUr''@;'; put 'put ''eDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''dG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sx''@;'; put 'put ''XTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVm''@;'; put 'put ''ZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0''@;'; put 'put ''aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9Imxl''@;'; put 'put ''Ij09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygp''@;'; put 'put ''O20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYo''@;'; put 'put ''eCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9''@;'; put 'put ''MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0p''@;'; put 'put ''O3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9''@;'; put 'put ''eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5p''@;'; put 'put ''bm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVv''@;'; put 'put ''cj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhp''@;'; put 'put ''cztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxw''@;'; put 'put ''Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5s''@;'; put 'put ''ZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxN''@;'; put 'put ''YXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRo''@;'; put 'put ''aXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4''@;'; put 'put ''cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3Ro''@;'; put 'put ''aXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0''@;'; put 'put ''aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsr''@;'; put 'put ''KXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAu''@;'; put 'put ''bmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rp''@;'; put 'put ''b24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0''@;'; put 'put ''aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisr''@;'; put 'put ''KUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5n''@;'; put 'put ''dGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMs''@;'; put 'put ''b3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8''@;'; put 'put ''Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0s''@;'; put 'put ''aG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgx''@;'; put 'put ''OTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5''@;'; put 'put ''MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11''@;'; put 'put ''bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXww''@;'; put 'put ''KSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24p''@;'; put 'put ''fDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRl''@;'; put 'put ''LFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1h''@;'; put 'put ''dGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhu''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7''@;'; put 'put ''dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJ''@;'; put 'put ''ZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYo''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0''@;'; put 'put ''aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7''@;'; put 'put ''dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChR''@;'; put 'put ''ZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQp''@;'; put 'put ''fDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRl''@;'; put 'put ''LHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1h''@;'; put 'put ''dGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhu''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXww''@;'; put 'put ''KSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24p''@;'; put 'put ''fDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEpl''@;'; put 'put ''LGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9l''@;'; put 'put ''LGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10''@;'; put 'put ''LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2Us''@;'; put 'put ''eHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEz''@;'; put 'put ''KXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0''@;'; put 'put ''LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11''@;'; put 'put ''bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQs''@;'; put 'put ''eHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEz''@;'; put 'put ''KXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0''@;'; put 'put ''LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10''@;'; put 'put ''LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXww''@;'; put 'put ''KSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYo''@;'; put 'put ''bT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0o''@;'; put 'put ''bT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxI''@;'; put 'put ''WzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0''@;'; put 'put ''dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9''@;'; put 'put ''PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3Zh''@;'; put 'put ''ciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2Ur''@;'; put 'put ''anwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJv''@;'; put 'put ''dG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigw''@;'; put 'put ''PT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pd''@;'; put 'put ''XX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2Fl''@;'; put 'put ''PFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4''@;'; put 'put ''W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+''@;'; put 'put ''PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1U''@;'; put 'put ''fX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4''@;'; put 'put ''NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9''@;'; put 'put ''PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5n''@;'; put 'put ''dGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlz''@;'; put 'put ''LmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dl''@;'; put 'put ''XSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2Us''@;'; put 'put ''QykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3Ro''@;'; put 'put ''KSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMm''@;'; put 'put ''QykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1m''@;'; put 'put ''dW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4''@;'; put 'put ''PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9u''@;'; put 'put ''KHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0''@;'; put 'put ''aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1Rd''@;'; put 'put ''PTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNb''@;'; put 'put ''bV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBB''@;'; put 'put ''PTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYm''@;'; put 'put ''KHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9''@;'; put 'put ''LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9''@;'; put 'put ''eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29y''@;'; put 'put ''ZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxl''@;'; put 'put ''bmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRo''@;'; put 'put ''aXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBl''@;'; put 'put ''LnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZF''@;'; put 'put ''KT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9y''@;'; put 'put ''KGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7''@;'; put 'put ''dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIh''@;'; put 'put ''PT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJiht''@;'; put 'put ''LndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUp''@;'; put 'put ''OzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgp''@;'; put 'put ''LHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5l''@;'; put 'put ''ZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAu''@;'; put 'put ''bmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1Yihw''@;'; put 'put ''KSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9k''@;'; put 'put ''Om5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2''@;'; put 'put ''bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2''@;'; put 'put ''Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwx''@;'; put 'put ''PT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShi''@;'; put 'put ''KngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hd''@;'; put 'put ''PUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlz''@;'; put 'put ''LHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFy''@;'; put 'put ''IG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQu''@;'; put 'put ''aXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihB''@;'; put 'put ''KSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihw''@;'; put 'put ''KXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7''@;'; put 'put ''KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtp''@;'; put 'put ''ZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFk''@;'; put 'put ''ZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFy''@;'; put 'put ''IEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNl''@;'; put 'put ''IGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlz''@;'; put 'put ''LndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tI''@;'; put 'put ''XTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBd''@;'; put 'put ''fSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02''@;'; put 'put ''NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJl''@;'; put 'put ''dHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5w''@;'; put 'put ''cm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBl''@;'; put 'put ''Lmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRp''@;'; put 'put ''dmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNv''@;'; put 'put ''bnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBp''@;'; put 'put ''biByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVk''@;'; put 'put ''SUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''cmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f''@;'; put 'put ''dmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFy''@;'; put 'put ''IG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnAp''@;'; put 'put ''LHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIs''@;'; put 'put ''ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9u''@;'; put 'put ''IFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAs''@;'; put 'put ''dGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0w''@;'; put 'put ''JiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5p''@;'; put 'put ''c3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2Vp''@;'; put 'put ''bCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlz''@;'; put 'put ''Lm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhp''@;'; put 'put ''cy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jk''@;'; put 'put ''c1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtw''@;'; put 'put ''LndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAu''@;'; put 'put ''bGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53''@;'; put 'put ''b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+''@;'; put 'put ''Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vs''@;'; put 'put ''c2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVk''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZl''@;'; put 'put ''cyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRk''@;'; put 'put ''KGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhp''@;'; put 'put ''cy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5f''@;'; put 'put ''dmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1''@;'; put 'put ''bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4o''@;'; put 'put ''Myk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVy''@;'; put 'put ''bygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zv''@;'; put 'put ''cih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10''@;'; put 'put ''aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1i''@;'; put 'put ''Lm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25l''@;'; put 'put ''KCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9''@;'; put 'put ''Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVs''@;'; put 'put ''KEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAu''@;'; put 'put ''Y2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxqZS5wcm90b3R5cGUuY29u''@;'; put 'put ''dmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEs''@;'; put 'put ''cDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5j''@;'; put 'put ''bXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhp''@;'; put 'put ''cy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEgu''@;'; put 'put ''X2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDYxMzg6KHVlLFgseSk9Pnt2YXIgST15KDk4MCksXz15''@;'; put 'put ''KDkxOTkpLGc9eSg3ODU5KSxCPXkoMjE0NCksdz15KDM2NjMpLFA9eSgzNDgyKSxGPXkoNDgxOCksTz15KDk1MDkpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKFUsVyxZKXt2YXIgcTtxPVUucGFkZGluZz9VLnBhZGRpbmc6WT8xOjQ7dmFyIG5lLGVlPUkoVSksSj1lZS5tb2R1bHVzLmJ5''@;'; put 'put ''dGVMZW5ndGgoKTtpZihXLmxlbmd0aD5KfHxuZXcgQihXKS5jbXAoZWUubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7bmU9WT9GKG5ldyBCKFcpLGVlKTp3KFcsZWUpO3ZhciBpZT1PLmFsbG9jKEotbmUubGVuZ3RoKTtpZihuZT1PLmNvbmNhdChbaWUs''@;'; put 'put ''bmVdLEopLDQ9PT1xKXJldHVybiBmdW5jdGlvbiB6KEssVSl7dmFyIFc9Sy5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxZPVAoInNoYTEiKS51cGRhdGUoTy5hbGxvYygwKSkuZGlnZXN0KCkscT1ZLmxlbmd0aDtpZigwIT09VVswXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTt2''@;'; put 'put ''YXIgZWU9VS5zbGljZSgxLHErMSksSj1VLnNsaWNlKHErMSksbmU9ZyhlZSxfKEoscSkpLGllPWcoSixfKG5lLFctcS0xKSk7aWYoZnVuY3Rpb24gTChLLFUpe0s9Ty5mcm9tKEspLFU9Ty5mcm9tKFUpO3ZhciBXPTAsWT1LLmxlbmd0aDtLLmxlbmd0aCE9PVUubGVuZ3RoJiYoVysrLFk9TWF0''@;'; put 'put ''aC5taW4oSy5sZW5ndGgsVS5sZW5ndGgpKTtmb3IodmFyIHE9LTE7KytxPFk7KVcrPUtbcV1eVVtxXTtyZXR1cm4gV30oWSxpZS5zbGljZSgwLHEpKSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtmb3IodmFyIGxlPXE7MD09PWllW2xlXTspbGUrKztpZigxIT09aWVbbGUr''@;'; put 'put ''K10pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIGllLnNsaWNlKGxlKX0oZWUsbmUpO2lmKDE9PT1xKXJldHVybiBmdW5jdGlvbiBOKEssVSxXKXtmb3IodmFyIFk9VS5zbGljZSgwLDIpLHE9MixlZT0wOzAhPT1VW3ErK107KWlmKHE+PVUubGVuZ3RoKXtlZSsr''@;'; put 'put ''O2JyZWFrfXZhciBKPVUuc2xpY2UoMixxLTEpO2lmKCgiMDAwMiIhPT1ZLnRvU3RyaW5nKCJoZXgiKSYmIVd8fCIwMDAxIiE9PVkudG9TdHJpbmcoImhleCIpJiZXKSYmZWUrKyxKLmxlbmd0aDw4JiZlZSsrLGVlKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBV''@;'; put 'put ''LnNsaWNlKHEpfSgwLG5lLFkpO2lmKDM9PT1xKXJldHVybiBuZTt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpfX0sNjU1OToodWUsWCx5KT0+e3ZhciBJPXkoOTgwKSxfPXkoMTc5OCksZz15KDM0ODIpLEI9eSg5MTk5KSx3PXkoNzg1OSksUD15KDIxNDQpLEY9eSg0ODE4KSxP''@;'; put 'put ''PXkoMzY2Myksej15KDk1MDkpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKFcsWSxxKXt2YXIgZWU7ZWU9Vy5wYWRkaW5nP1cucGFkZGluZzpxPzE6NDt2YXIgbmUsSj1JKFcpO2lmKDQ9PT1lZSluZT1mdW5jdGlvbiBOKFUsVyl7dmFyIFk9VS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxxPVcu''@;'; put 'put ''bGVuZ3RoLGVlPWcoInNoYTEiKS51cGRhdGUoei5hbGxvYygwKSkuZGlnZXN0KCksSj1lZS5sZW5ndGgsbmU9MipKO2lmKHE+WS1uZS0yKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3ZhciBpZT16LmFsbG9jKFktcS1uZS0yKSxsZT1ZLUotMSxtZT1fKEopLF9lPXcoei5j''@;'; put 'put ''b25jYXQoW2VlLGllLHouYWxsb2MoMSwxKSxXXSxsZSksQihtZSxsZSkpLFRlPXcobWUsQihfZSxKKSk7cmV0dXJuIG5ldyBQKHouY29uY2F0KFt6LmFsbG9jKDEpLFRlLF9lXSxZKSl9KEosWSk7ZWxzZSBpZigxPT09ZWUpbmU9ZnVuY3Rpb24gTChVLFcsWSl7dmFyIEoscT1XLmxlbmd0aCxl''@;'; put 'put ''ZT1VLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKHE+ZWUtMTEpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7cmV0dXJuIEo9WT96LmFsbG9jKGVlLXEtMywyNTUpOmZ1bmN0aW9uIEsoVSl7Zm9yKHZhciBKLFc9ei5hbGxvY1Vuc2FmZShVKSxZPTAscT1fKDIqVSksZWU9MDtZ''@;'; put 'put ''PFU7KWVlPT09cS5sZW5ndGgmJihxPV8oMipVKSxlZT0wKSwoSj1xW2VlKytdKSYmKFdbWSsrXT1KKTtyZXR1cm4gV30oZWUtcS0zKSxuZXcgUCh6LmNvbmNhdChbei5mcm9tKFswLFk/MToyXSksSix6LmFsbG9jKDEpLFddLGVlKSl9KEosWSxxKTtlbHNle2lmKDMhPT1lZSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoInVua25vd24gcGFkZGluZyIpO2lmKChuZT1uZXcgUChZKSkuY21wKEoubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzIil9cmV0dXJuIHE/TyhuZSxKKTpGKG5lLEopfX0sNDgxODoodWUsWCx5KT0+e3ZhciBJPXkoMjE0NCksXz15''@;'; put 'put ''KDk1MDkpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uIGcoQix3KXtyZXR1cm4gXy5mcm9tKEIudG9SZWQoSS5tb250KHcubW9kdWx1cykpLnJlZFBvdyhuZXcgSSh3LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLnRvQXJyYXkoKSl9fSw3ODU5OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bih5LEkpe2Zvcih2YXIgXz15Lmxlbmd0aCxnPS0xOysrZzxfOyl5W2ddXj1JW2ddO3JldHVybiB5fX0sMzY4OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5LnIoWCkseS5kKFgse2RlY29kZTooKT0+U2UsZGVmYXVsdDooKT0+eCxlbmNvZGU6KCk9PmplLHRvQVNDSUk6KCk9PnAsdG9Vbmlj''@;'; put 'put ''b2RlOigpPT5WLHVjczJkZWNvZGU6KCk9PmllLHVjczJlbmNvZGU6KCk9PmxlfSk7Y29uc3QgST0yMTQ3NDgzNjQ3LF89MzYsTj0vXnhuLS0vLEw9L1teXDAtXHg3Rl0vLEs9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLFU9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lk''@;'; put 'put ''ZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LFk9TWF0aC5mbG9vcixxPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gZWUo''@;'; put 'put ''Qyl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoVVtDXSl9ZnVuY3Rpb24gbmUoQyxUKXtjb25zdCBIPUMuc3BsaXQoIkAiKTtsZXQgaj0iIjtILmxlbmd0aD4xJiYoaj1IWzBdKyJAIixDPUhbMV0pO2NvbnN0IG09ZnVuY3Rpb24gSihDLFQpe2NvbnN0IEg9W107bGV0IGo9Qy5sZW5ndGg7Zm9yKDtq''@;'; put 'put ''LS07KUhbal09VChDW2pdKTtyZXR1cm4gSH0oKEM9Qy5yZXBsYWNlKEssIi4iKSkuc3BsaXQoIi4iKSxUKS5qb2luKCIuIik7cmV0dXJuIGorbX1mdW5jdGlvbiBpZShDKXtjb25zdCBUPVtdO2xldCBIPTA7Y29uc3Qgaj1DLmxlbmd0aDtmb3IoO0g8ajspe2NvbnN0IEU9Qy5jaGFyQ29kZUF0''@;'; put 'put ''KEgrKyk7aWYoRT49NTUyOTYmJkU8PTU2MzE5JiZIPGope2NvbnN0IG09Qy5jaGFyQ29kZUF0KEgrKyk7NTYzMjA9PSg2NDUxMiZtKT9ULnB1c2goKCgxMDIzJkUpPDwxMCkrKDEwMjMmbSkrNjU1MzYpOihULnB1c2goRSksSC0tKX1lbHNlIFQucHVzaChFKX1yZXR1cm4gVH1jb25zdCBsZT1D''@;'; put 'put ''PT5TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5DKSxtZT1mdW5jdGlvbihDKXtyZXR1cm4gQz49NDgmJkM8NTg/Qy00OCsyNjpDPj02NSYmQzw5MT9DLTY1OkM+PTk3JiZDPDEyMz9DLTk3Ol99LF9lPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMrMjIrNzUqKEM8MjYpLSgoMCE9VCk8PDUpfSxUZT1m''@;'; put 'put ''dW5jdGlvbihDLFQsSCl7bGV0IGo9MDtmb3IoQz1IP1koQy83MDApOkM+PjEsQys9WShDL1QpO0M+NDU1O2orPV8pQz1ZKEMvMzUpO3JldHVybiBZKGorMzYqQy8oQyszOCkpfSxTZT1mdW5jdGlvbihDKXtjb25zdCBUPVtdLEg9Qy5sZW5ndGg7bGV0IGo9MCxFPTEyOCxtPTcyLEE9Qy5sYXN0''@;'; put 'put ''SW5kZXhPZigiLSIpO0E8MCYmKEE9MCk7Zm9yKGxldCBhZT0wO2FlPEE7KythZSlDLmNoYXJDb2RlQXQoYWUpPj0xMjgmJmVlKCJub3QtYmFzaWMiKSxULnB1c2goQy5jaGFyQ29kZUF0KGFlKSk7Zm9yKGxldCBhZT1BPjA/QSsxOjA7YWU8SDspe2NvbnN0IHRlPWo7Zm9yKGxldCB3ZT0xLFVl''@;'; put 'put ''PV87O1VlKz1fKXthZT49SCYmZWUoImludmFsaWQtaW5wdXQiKTtjb25zdCBKZT1tZShDLmNoYXJDb2RlQXQoYWUrKykpO0plPj1fJiZlZSgiaW52YWxpZC1pbnB1dCIpLEplPlkoKEktaikvd2UpJiZlZSgib3ZlcmZsb3ciKSxqKz1KZSp3ZTtjb25zdCBvdD1VZTw9bT8xOlVlPj1tKzI2PzI2''@;'; put 'put ''OlVlLW07aWYoSmU8b3QpYnJlYWs7Y29uc3QgeGU9Xy1vdDt3ZT5ZKEkveGUpJiZlZSgib3ZlcmZsb3ciKSx3ZSo9eGV9Y29uc3Qgc2U9VC5sZW5ndGgrMTttPVRlKGotdGUsc2UsMD09dGUpLFkoai9zZSk+SS1FJiZlZSgib3ZlcmZsb3ciKSxFKz1ZKGovc2UpLGolPXNlLFQuc3BsaWNlKGor''@;'; put 'put ''KywwLEUpfXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5UKX0samU9ZnVuY3Rpb24oQyl7Y29uc3QgVD1bXSxIPShDPWllKEMpKS5sZW5ndGg7bGV0IGo9MTI4LEU9MCxtPTcyO2Zvcihjb25zdCB0ZSBvZiBDKXRlPDEyOCYmVC5wdXNoKHEodGUpKTtjb25zdCBBPVQubGVuZ3RoO2xl''@;'; put 'put ''dCBhZT1BO2ZvcihBJiZULnB1c2goIi0iKTthZTxIOyl7bGV0IHRlPUk7Zm9yKGNvbnN0IHdlIG9mIEMpd2U+PWomJndlPHRlJiYodGU9d2UpO2NvbnN0IHNlPWFlKzE7dGUtaj5ZKChJLUUpL3NlKSYmZWUoIm92ZXJmbG93IiksRSs9KHRlLWopKnNlLGo9dGU7Zm9yKGNvbnN0IHdlIG9mIEMp''@;'; put 'put ''aWYod2U8aiYmKytFPkkmJmVlKCJvdmVyZmxvdyIpLHdlPT09ail7bGV0IFVlPUU7Zm9yKGxldCBKZT1fOztKZSs9Xyl7Y29uc3Qgb3Q9SmU8PW0/MTpKZT49bSsyNj8yNjpKZS1tO2lmKFVlPG90KWJyZWFrO2NvbnN0IHhlPVVlLW90LHZlPV8tb3Q7VC5wdXNoKHEoX2Uob3QreGUldmUsMCkp''@;'; put 'put ''KSxVZT1ZKHhlL3ZlKX1ULnB1c2gocShfZShVZSwwKSkpLG09VGUoRSxzZSxhZT09PUEpLEU9MCwrK2FlfSsrRSwrK2p9cmV0dXJuIFQuam9pbigiIil9LFY9ZnVuY3Rpb24oQyl7cmV0dXJuIG5lKEMsZnVuY3Rpb24oVCl7cmV0dXJuIE4udGVzdChUKT9TZShULnNsaWNlKDQpLnRvTG93ZXJD''@;'; put 'put ''YXNlKCkpOlR9KX0scD1mdW5jdGlvbihDKXtyZXR1cm4gbmUoQyxmdW5jdGlvbihUKXtyZXR1cm4gTC50ZXN0KFQpPyJ4bi0tIitqZShUKTpUfSl9LHg9e3ZlcnNpb246IjIuMy4xIix1Y3MyOntkZWNvZGU6aWUsZW5jb2RlOmxlfSxkZWNvZGU6U2UsZW5jb2RlOmplLHRvQVNDSUk6cCx0b1Vu''@;'; put 'put ''aWNvZGU6Vn19LDcxMjk6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciB5PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gXyhQKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChQLnJlcGxhY2UoL1wrL2csIiAiKSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0''@;'; put 'put ''aW9uIGcoUCl7dHJ5e3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoUCl9Y2F0Y2h7cmV0dXJuIG51bGx9fVguc3RyaW5naWZ5PWZ1bmN0aW9uIHcoUCxGKXtGPUZ8fCIiO3ZhciB6LE4sTz1bXTtmb3IoTiBpbiJzdHJpbmciIT10eXBlb2YgRiYmKEY9Ij8iKSxQKWlmKHkuY2FsbChQLE4pKXtp''@;'; put 'put ''ZighKHo9UFtOXSkmJihudWxsPT16fHxpc05hTih6KSkmJih6PSIiKSxOPWcoTiksej1nKHopLG51bGw9PT1OfHxudWxsPT09eiljb250aW51ZTtPLnB1c2goTisiPSIreil9cmV0dXJuIE8ubGVuZ3RoP0YrTy5qb2luKCImIik6IiJ9LFgucGFyc2U9ZnVuY3Rpb24gQihQKXtmb3IodmFyIHos''@;'; put 'put ''Rj0vKFtePT8jJl0rKT0/KFteJl0qKS9nLE89e307ej1GLmV4ZWMoUCk7KXt2YXIgTj1fKHpbMV0pLEw9Xyh6WzJdKTtudWxsPT09Tnx8bnVsbD09PUx8fE4gaW4gT3x8KE9bTl09TCl9cmV0dXJuIE99fSwxNzk4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz02NTUz''@;'; put 'put ''Nix3PXkoOTUwOSkuQnVmZmVyLFA9eS5nLmNyeXB0b3x8eS5nLm1zQ3J5cHRvO3VlLmV4cG9ydHM9UCYmUC5nZXRSYW5kb21WYWx1ZXM/ZnVuY3Rpb24gRihPLHope2lmKE8+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIp''@;'; put 'put ''O3ZhciBOPXcuYWxsb2NVbnNhZmUoTyk7aWYoTz4wKWlmKE8+Xylmb3IodmFyIEw9MDtMPE87TCs9XylQLmdldFJhbmRvbVZhbHVlcyhOLnNsaWNlKEwsTCtfKSk7ZWxzZSBQLmdldFJhbmRvbVZhbHVlcyhOKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygej9JLm5leHRUaWNrKGZ1bmN0aW9u''@;'; put 'put ''KCl7eihudWxsLE4pfSk6Tn06ZnVuY3Rpb24gQigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX19LDc5''@;'; put 'put ''NjM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtmdW5jdGlvbiBfKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0''@;'; put 'put ''IEV4cGxvcmVyIDExIil9dmFyIGc9eSg5NTA5KSxCPXkoMTc5OCksdz1nLkJ1ZmZlcixQPWcua01heExlbmd0aCxGPXkuZy5jcnlwdG98fHkuZy5tc0NyeXB0byxPPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24geihXLFkpe2lmKCJudW1iZXIiIT10eXBlb2YgV3x8VyE9Vyl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKFc+T3x8VzwwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYoVz5QfHxXPlkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBOKFcs''@;'; put 'put ''WSxxKXtpZigibnVtYmVyIiE9dHlwZW9mIFd8fFchPVcpdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVz5PfHxXPDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgdWludDMyIik7aWYoVytZPnF8fFc+UCl0aHJvdyBuZXcgUmFuZ2VF''@;'; put 'put ''cnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIEsoVyxZLHEsZWUpe2lmKEkuYnJvd3Nlcil7dmFyIG5lPW5ldyBVaW50OEFycmF5KFcuYnVmZmVyLFkscSk7cmV0dXJuIEYuZ2V0UmFuZG9tVmFsdWVzKG5lKSxlZT92b2lkIEkubmV4dFRpY2soZnVuY3Rpb24oKXtlZShudWxsLFcp''@;'; put 'put ''fSk6V31pZighZWUpcmV0dXJuIEIocSkuY29weShXLFkpLFc7QihxLGZ1bmN0aW9uKGxlLG1lKXtpZihsZSlyZXR1cm4gZWUobGUpO21lLmNvcHkoVyxZKSxlZShudWxsLFcpfSl9RiYmRi5nZXRSYW5kb21WYWx1ZXN8fCFJLmJyb3dzZXI/KFgucmFuZG9tRmlsbD1mdW5jdGlvbiBMKFcsWSxx''@;'; put 'put ''LGVlKXtpZighKHcuaXNCdWZmZXIoVyl8fFcgaW5zdGFuY2VvZiB5LmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFkpZWU9WSxZPTAscT1XLmxlbmd0''@;'; put 'put ''aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBxKWVlPXEscT1XLmxlbmd0aC1ZO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIGVlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHooWSxXLmxlbmd0aCksTihxLFksVy5s''@;'; put 'put ''ZW5ndGgpLEsoVyxZLHEsZWUpfSxYLnJhbmRvbUZpbGxTeW5jPWZ1bmN0aW9uIFUoVyxZLHEpe2lmKHR5cGVvZiBZPiJ1IiYmKFk9MCksISh3LmlzQnVmZmVyKFcpfHxXIGluc3RhbmNlb2YgeS5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3Qg''@;'; put 'put ''YmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO3JldHVybiB6KFksVy5sZW5ndGgpLHZvaWQgMD09PXEmJihxPVcubGVuZ3RoLVkpLE4ocSxZLFcubGVuZ3RoKSxLKFcsWSxxKX0pOihYLnJhbmRvbUZpbGw9XyxYLnJhbmRvbUZpbGxTeW5jPV8pfSw0MjgxOnVlPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciB5PXt9O2Z1bmN0aW9uIEkoUCxGLE8pe098fChPPUVycm9yKTt2YXIgTj1mdW5jdGlvbihMKXtmdW5jdGlvbiBLKFUsVyxZKXtyZXR1cm4gTC5jYWxsKHRoaXMsZnVuY3Rpb24geihMLEssVSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBGP0Y6RihMLEssVSl9KFUsVyxZKSl8fHRoaXN9cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIFgoUCxGKXtQLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEYucHJvdG90eXBlKSxQLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QLFAuX19wcm90b19fPUZ9KEssTCksS30oTyk7Ti5wcm90b3R5cGUubmFtZT1PLm5hbWUsTi5wcm90b3R5cGUuY29kZT1QLHlbUF09Tn1mdW5j''@;'; put 'put ''dGlvbiBfKFAsRil7aWYoQXJyYXkuaXNBcnJheShQKSl7dmFyIE89UC5sZW5ndGg7cmV0dXJuIFA9UC5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIFN0cmluZyh6KX0pLE8+Mj8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUC5zbGljZSgwLE8tMSkuam9pbigiLCAiKSwiLCBvciAiKStQ''@;'; put 'put ''W08tMV06Mj09PU8/Im9uZSBvZiAiLmNvbmNhdChGLCIgIikuY29uY2F0KFBbMF0sIiBvciAiKS5jb25jYXQoUFsxXSk6Im9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSl9cmV0dXJuIm9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoU3RyaW5nKFApKX1JKCJFUlJfSU5WQUxJRF9PUFRf''@;'; put 'put ''VkFMVUUiLGZ1bmN0aW9uKFAsRil7cmV0dXJuJ1RoZSB2YWx1ZSAiJytGKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytQKyciJ30sVHlwZUVycm9yKSxJKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oUCxGLE8pe3ZhciB6LE47aWYoInN0cmluZyI9PXR5cGVvZiBGJiZmdW5j''@;'; put 'put ''dGlvbiBnKFAsRixPKXtyZXR1cm4gUC5zdWJzdHIoIU98fE88MD8wOitPLEYubGVuZ3RoKT09PUZ9KEYsIm5vdCAiKT8oej0ibXVzdCBub3QgYmUiLEY9Ri5yZXBsYWNlKC9ebm90IC8sIiIpKTp6PSJtdXN0IGJlIixmdW5jdGlvbiBCKFAsRixPKXtyZXR1cm4odm9pZCAwPT09T3x8Tz5QLmxl''@;'; put 'put ''bmd0aCkmJihPPVAubGVuZ3RoKSxQLnN1YnN0cmluZyhPLUYubGVuZ3RoLE8pPT09Rn0oUCwiIGFyZ3VtZW50IikpTj0iVGhlICIuY29uY2F0KFAsIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdChfKEYsInR5cGUiKSk7ZWxzZXt2YXIgTD1mdW5jdGlvbiB3KFAsRixPKXtyZXR1cm4ibnVtYmVy''@;'; put 'put ''IiE9dHlwZW9mIE8mJihPPTApLCEoTytGLmxlbmd0aD5QLmxlbmd0aCkmJi0xIT09UC5pbmRleE9mKEYsTyl9KFAsIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7Tj0nVGhlICInLmNvbmNhdChQLCciICcpLmNvbmNhdChMLCIgIikuY29uY2F0KHosIiAiKS5jb25jYXQoXyhGLCJ0eXBlIikp''@;'; put 'put ''fXJldHVybiBOKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIE8pfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLEkoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIixmdW5jdGlvbihQKXtyZXR1cm4i''@;'; put 'put ''VGhlICIrUCsiIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQifSksSSgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxJKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24oUCl7cmV0dXJuIkNhbm5vdCBjYWxsICIrUCsiIGFmdGVyIGEgc3RyZWFt''@;'; put 'put ''IHdhcyBkZXN0cm95ZWQifSksSSgiRVJSX01VTFRJUExFX0NBTExCQUNLIiwiQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIiksSSgiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxJKCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIs''@;'; put 'put ''IndyaXRlIGFmdGVyIGVuZCIpLEkoIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMiLCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIsVHlwZUVycm9yKSxJKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oUCl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrUH0sVHlw''@;'; put 'put ''ZUVycm9yKSxJKCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSx1ZS5leHBvcnRzLnE9eX0sNjc1MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89T2JqZWN0LmtleXN8fGZ1bmN0aW9u''@;'; put 'put ''KEwpe3ZhciBLPVtdO2Zvcih2YXIgVSBpbiBMKUsucHVzaChVKTtyZXR1cm4gS307dWUuZXhwb3J0cz1PO3ZhciBnPXkoOTQ4MSksQj15KDQyMjkpO3koNTcxNykoTyxnKTtmb3IodmFyIHc9XyhCLnByb3RvdHlwZSksUD0wO1A8dy5sZW5ndGg7UCsrKXt2YXIgRj13W1BdO08ucHJvdG90eXBl''@;'; put 'put ''W0ZdfHwoTy5wcm90b3R5cGVbRl09Qi5wcm90b3R5cGVbRl0pfWZ1bmN0aW9uIE8oTCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPKEwpO2cuY2FsbCh0aGlzLEwpLEIuY2FsbCh0aGlzLEwpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxMJiYoITE9PT1MLnJlYWRhYmxlJiYo''@;'; put 'put ''dGhpcy5yZWFkYWJsZT0hMSksITE9PT1MLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksITE9PT1MLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEsdGhpcy5vbmNlKCJlbmQiLHopKSl9ZnVuY3Rpb24geigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fEkubmV4''@;'; put 'put ''dFRpY2soTix0aGlzKX1mdW5jdGlvbiBOKEwpe0wuZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9''@;'; put 'put ''fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KE8ucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oSyl7dm9pZCAwPT09''@;'; put 'put ''dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUssdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syl9fSl9LDI3MjU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1fO3Zh''@;'; put 'put ''ciBJPXkoNDYwNSk7ZnVuY3Rpb24gXyhnKXtpZighKHRoaXMgaW5zdGFuY2VvZiBfKSlyZXR1cm4gbmV3IF8oZyk7SS5jYWxsKHRoaXMsZyl9eSg1NzE3KShfLEkpLF8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZyxCLHcpe3cobnVsbCxnKX19LDk0ODE6KHVlLFgseSk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIF8sST15KDQxNTUpO3VlLmV4cG9ydHM9cCxwLlJlYWRhYmxlU3RhdGU9Vix5KDcxODcpO3ZhciBMLEI9ZnVuY3Rpb24oT2UsSWUpe3JldHVybiBPZS5saXN0ZW5lcnMoSWUpLmxlbmd0aH0sdz15KDI1MDMpLFA9eSg4NzY0KS5CdWZmZXIsRj0odHlwZW9mIHkuZzwidSI/''@;'; put 'put ''eS5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LE49eSg0NjE2KTtMPU4mJk4uZGVidWdsb2c/Ti5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBsZSxtZSxfZSxLPXkoNzMyNyksVT15''@;'; put 'put ''KDExOTUpLFk9eSgyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLHE9eSg0MjgxKS5xLGVlPXEuRVJSX0lOVkFMSURfQVJHX1RZUEUsSj1xLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsbmU9cS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxpZT1xLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9F''@;'; put 'put ''TkRfRVZFTlQ7eSg1NzE3KShwLHcpO3ZhciBUZT1VLmVycm9yT3JEZXN0cm95LFNlPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIFYoRmUsT2UsSWUpe189X3x8eSg2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBJZSYmKEllPU9lIGluc3RhbmNl''@;'; put 'put ''b2YgXyksdGhpcy5vYmplY3RNb2RlPSEhKEZlPUZlfHx7fSkub2JqZWN0TW9kZSxJZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhRmUucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9WSh0aGlzLEZlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLEll''@;'; put 'put ''KSx0aGlzLmJ1ZmZlcj1uZXcgSyx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxl''@;'; put 'put ''PSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1GZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIUZlLmF1dG9EZXN0cm95LHRoaXMu''@;'; put 'put ''ZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPUZlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLEZlLmVuY29kaW5nJiYobGV8fChsZT15KDI1NTMp''@;'; put 'put ''LnMpLHRoaXMuZGVjb2Rlcj1uZXcgbGUoRmUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9RmUuZW5jb2RpbmcpfWZ1bmN0aW9uIHAoRmUpe2lmKF89X3x8eSg2NzUzKSwhKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoRmUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IFYoRmUsdGhp''@;'; put 'put ''cyx0aGlzIGluc3RhbmNlb2YgXyksdGhpcy5yZWFkYWJsZT0hMCxGZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5yZWFkJiYodGhpcy5fcmVhZD1GZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgRmUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9RmUuZGVzdHJveSkpLHcuY2FsbCh0aGlzKX1m''@;'; put 'put ''dW5jdGlvbiBiKEZlLE9lLEllLFZlLGtlKXtMKCJyZWFkYWJsZUFkZENodW5rIixPZSk7dmFyIF90LEFlPUZlLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1PZSlBZS5yZWFkaW5nPSExLGZ1bmN0aW9uIEUoRmUsT2Upe2lmKEwoIm9uRW9mQ2h1bmsiKSwhT2UuZW5kZWQpe2lmKE9lLmRlY29k''@;'; put 'put ''ZXIpe3ZhciBJZT1PZS5kZWNvZGVyLmVuZCgpO0llJiZJZS5sZW5ndGgmJihPZS5idWZmZXIucHVzaChJZSksT2UubGVuZ3RoKz1PZS5vYmplY3RNb2RlPzE6SWUubGVuZ3RoKX1PZS5lbmRlZD0hMCxPZS5zeW5jP20oRmUpOihPZS5uZWVkUmVhZGFibGU9ITEsT2UuZW1pdHRlZFJlYWRhYmxl''@;'; put 'put ''fHwoT2UuZW1pdHRlZFJlYWRhYmxlPSEwLEEoRmUpKSl9fShGZSxBZSk7ZWxzZSBpZihrZXx8KF90PWZ1bmN0aW9uIEMoRmUsT2Upe3ZhciBJZTtyZXR1cm4hZnVuY3Rpb24geihGZSl7cmV0dXJuIFAuaXNCdWZmZXIoRmUpfHxGZSBpbnN0YW5jZW9mIEZ9KE9lKSYmInN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiBPZSYmdm9pZCAwIT09T2UmJiFGZS5vYmplY3RNb2RlJiYoSWU9bmV3IGVlKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJVaW50OEFycmF5Il0sT2UpKSxJZX0oQWUsT2UpKSxfdClUZShGZSxfdCk7ZWxzZSBpZihBZS5vYmplY3RNb2RlfHxPZSYmT2UubGVuZ3RoPjApaWYoInN0cmlu''@;'; put 'put ''ZyIhPXR5cGVvZiBPZSYmIUFlLm9iamVjdE1vZGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZihPZSkhPT1QLnByb3RvdHlwZSYmKE9lPWZ1bmN0aW9uIE8oRmUpe3JldHVybiBQLmZyb20oRmUpfShPZSkpLFZlKUFlLmVuZEVtaXR0ZWQ/VGUoRmUsbmV3IGllKTp4KEZlLEFlLE9lLCEwKTtlbHNl''@;'; put 'put ''IGlmKEFlLmVuZGVkKVRlKEZlLG5ldyBKKTtlbHNle2lmKEFlLmRlc3Ryb3llZClyZXR1cm4hMTtBZS5yZWFkaW5nPSExLEFlLmRlY29kZXImJiFJZT8oT2U9QWUuZGVjb2Rlci53cml0ZShPZSksQWUub2JqZWN0TW9kZXx8MCE9PU9lLmxlbmd0aD94KEZlLEFlLE9lLCExKTphZShGZSxBZSkp''@;'; put 'put ''OngoRmUsQWUsT2UsITEpfWVsc2UgVmV8fChBZS5yZWFkaW5nPSExLGFlKEZlLEFlKSk7cmV0dXJuIUFlLmVuZGVkJiYoQWUubGVuZ3RoPEFlLmhpZ2hXYXRlck1hcmt8fDA9PT1BZS5sZW5ndGgpfWZ1bmN0aW9uIHgoRmUsT2UsSWUsVmUpe09lLmZsb3dpbmcmJjA9PT1PZS5sZW5ndGgmJiFP''@;'; put 'put ''ZS5zeW5jPyhPZS5hd2FpdERyYWluPTAsRmUuZW1pdCgiZGF0YSIsSWUpKTooT2UubGVuZ3RoKz1PZS5vYmplY3RNb2RlPzE6SWUubGVuZ3RoLFZlP09lLmJ1ZmZlci51bnNoaWZ0KEllKTpPZS5idWZmZXIucHVzaChJZSksT2UubmVlZFJlYWRhYmxlJiZtKEZlKSksYWUoRmUsT2UpfU9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihPZSl7dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPU9lKX19KSxwLnByb3RvdHlwZS5kZXN0cm95PVUuZGVzdHJveSxwLnByb3RvdHlwZS5fdW5kZXN0cm95PVUudW5kZXN0cm95LHAucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKEZlLE9lKXtPZShGZSl9LHAucHJv''@;'; put 'put ''dG90eXBlLnB1c2g9ZnVuY3Rpb24oRmUsT2Upe3ZhciBWZSxJZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBJZS5vYmplY3RNb2RlP1ZlPSEwOiJzdHJpbmciPT10eXBlb2YgRmUmJigoT2U9T2V8fEllLmRlZmF1bHRFbmNvZGluZykhPT1JZS5lbmNvZGluZyYmKEZlPVAuZnJvbShGZSxP''@;'; put 'put ''ZSksT2U9IiIpLFZlPSEwKSxiKHRoaXMsRmUsT2UsITEsVmUpfSxwLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKEZlKXtyZXR1cm4gYih0aGlzLEZlLG51bGwsITAsITEpfSxwLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5m''@;'; put 'put ''bG93aW5nfSxwLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihGZSl7bGV8fChsZT15KDI1NTMpLnMpO3ZhciBPZT1uZXcgbGUoRmUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1PZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVj''@;'; put 'put ''b2Rlci5lbmNvZGluZztmb3IodmFyIEllPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQsVmU9IiI7bnVsbCE9PUllOylWZSs9T2Uud3JpdGUoSWUuZGF0YSksSWU9SWUubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PVZlJiZ0aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKFZlKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aD1WZS5sZW5ndGgsdGhpc307dmFyIFQ9MTA3Mzc0MTgyNDtmdW5jdGlvbiBqKEZlLE9lKXtyZXR1cm4gRmU8PTB8fDA9PT1PZS5sZW5ndGgmJk9lLmVuZGVkPzA6T2Uub2JqZWN0TW9kZT8xOkZl''@;'; put 'put ''IT1GZT9PZS5mbG93aW5nJiZPZS5sZW5ndGg/T2UuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6T2UubGVuZ3RoOihGZT5PZS5oaWdoV2F0ZXJNYXJrJiYoT2UuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiBIKEZlKXtyZXR1cm4gRmU+PVQ/RmU9VDooRmUtLSxGZXw9RmU+Pj4xLEZlfD1GZT4+PjIs''@;'; put 'put ''RmV8PUZlPj4+NCxGZXw9RmU+Pj44LEZlfD1GZT4+PjE2LEZlKyspLEZlfShGZSkpLEZlPD1PZS5sZW5ndGg/RmU6T2UuZW5kZWQ/T2UubGVuZ3RoOihPZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIG0oRmUpe3ZhciBPZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJlbWl0UmVhZGFibGUi''@;'; put 'put ''LE9lLm5lZWRSZWFkYWJsZSxPZS5lbWl0dGVkUmVhZGFibGUpLE9lLm5lZWRSZWFkYWJsZT0hMSxPZS5lbWl0dGVkUmVhZGFibGV8fChMKCJlbWl0UmVhZGFibGUiLE9lLmZsb3dpbmcpLE9lLmVtaXR0ZWRSZWFkYWJsZT0hMCxJLm5leHRUaWNrKEEsRmUpKX1mdW5jdGlvbiBBKEZlKXt2YXIg''@;'; put 'put ''T2U9RmUuX3JlYWRhYmxlU3RhdGU7TCgiZW1pdFJlYWRhYmxlXyIsT2UuZGVzdHJveWVkLE9lLmxlbmd0aCxPZS5lbmRlZCksIU9lLmRlc3Ryb3llZCYmKE9lLmxlbmd0aHx8T2UuZW5kZWQpJiYoRmUuZW1pdCgicmVhZGFibGUiKSxPZS5lbWl0dGVkUmVhZGFibGU9ITEpLE9lLm5lZWRSZWFk''@;'; put 'put ''YWJsZT0hT2UuZmxvd2luZyYmIU9lLmVuZGVkJiZPZS5sZW5ndGg8PU9lLmhpZ2hXYXRlck1hcmsseGUoRmUpfWZ1bmN0aW9uIGFlKEZlLE9lKXtPZS5yZWFkaW5nTW9yZXx8KE9lLnJlYWRpbmdNb3JlPSEwLEkubmV4dFRpY2sodGUsRmUsT2UpKX1mdW5jdGlvbiB0ZShGZSxPZSl7Zm9yKDsh''@;'; put 'put ''T2UucmVhZGluZyYmIU9lLmVuZGVkJiYoT2UubGVuZ3RoPE9lLmhpZ2hXYXRlck1hcmt8fE9lLmZsb3dpbmcmJjA9PT1PZS5sZW5ndGgpOyl7dmFyIEllPU9lLmxlbmd0aDtpZihMKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLEZlLnJlYWQoMCksSWU9PT1PZS5sZW5ndGgpYnJlYWt9T2UucmVh''@;'; put 'put ''ZGluZ01vcmU9ITF9ZnVuY3Rpb24gd2UoRmUpe3ZhciBPZT1GZS5fcmVhZGFibGVTdGF0ZTtPZS5yZWFkYWJsZUxpc3RlbmluZz1GZS5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsT2UucmVzdW1lU2NoZWR1bGVkJiYhT2UucGF1c2VkP09lLmZsb3dpbmc9ITA6RmUubGlzdGVuZXJDb3Vu''@;'; put 'put ''dCgiZGF0YSIpPjAmJkZlLnJlc3VtZSgpfWZ1bmN0aW9uIFVlKEZlKXtMKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxGZS5yZWFkKDApfWZ1bmN0aW9uIG90KEZlLE9lKXtMKCJyZXN1bWUiLE9lLnJlYWRpbmcpLE9lLnJlYWRpbmd8fEZlLnJlYWQoMCksT2UucmVzdW1lU2NoZWR1bGVk''@;'; put 'put ''PSExLEZlLmVtaXQoInJlc3VtZSIpLHhlKEZlKSxPZS5mbG93aW5nJiYhT2UucmVhZGluZyYmRmUucmVhZCgwKX1mdW5jdGlvbiB4ZShGZSl7dmFyIE9lPUZlLl9yZWFkYWJsZVN0YXRlO2ZvcihMKCJmbG93IixPZS5mbG93aW5nKTtPZS5mbG93aW5nJiZudWxsIT09RmUucmVhZCgpOyk7fWZ1''@;'; put 'put ''bmN0aW9uIHZlKEZlLE9lKXtyZXR1cm4gMD09PU9lLmxlbmd0aD9udWxsOihPZS5vYmplY3RNb2RlP0llPU9lLmJ1ZmZlci5zaGlmdCgpOiFGZXx8RmU+PU9lLmxlbmd0aD8oSWU9T2UuZGVjb2Rlcj9PZS5idWZmZXIuam9pbigiIik6MT09PU9lLmJ1ZmZlci5sZW5ndGg/T2UuYnVmZmVyLmZp''@;'; put 'put ''cnN0KCk6T2UuYnVmZmVyLmNvbmNhdChPZS5sZW5ndGgpLE9lLmJ1ZmZlci5jbGVhcigpKTpJZT1PZS5idWZmZXIuY29uc3VtZShGZSxPZS5kZWNvZGVyKSxJZSk7dmFyIEllfWZ1bmN0aW9uIFhlKEZlKXt2YXIgT2U9RmUuX3JlYWRhYmxlU3RhdGU7TCgiZW5kUmVhZGFibGUiLE9lLmVuZEVt''@;'; put 'put ''aXR0ZWQpLE9lLmVuZEVtaXR0ZWR8fChPZS5lbmRlZD0hMCxJLm5leHRUaWNrKHplLE9lLEZlKSl9ZnVuY3Rpb24gemUoRmUsT2Upe2lmKEwoImVuZFJlYWRhYmxlTlQiLEZlLmVuZEVtaXR0ZWQsRmUubGVuZ3RoKSwhRmUuZW5kRW1pdHRlZCYmMD09PUZlLmxlbmd0aCYmKEZlLmVuZEVtaXR0''@;'; put 'put ''ZWQ9ITAsT2UucmVhZGFibGU9ITEsT2UuZW1pdCgiZW5kIiksRmUuYXV0b0Rlc3Ryb3kpKXt2YXIgSWU9T2UuX3dyaXRhYmxlU3RhdGU7KCFJZXx8SWUuYXV0b0Rlc3Ryb3kmJkllLmZpbmlzaGVkKSYmT2UuZGVzdHJveSgpfX1mdW5jdGlvbiBEZShGZSxPZSl7Zm9yKHZhciBJZT0wLFZlPUZl''@;'; put 'put ''Lmxlbmd0aDtJZTxWZTtJZSsrKWlmKEZlW0llXT09PU9lKXJldHVybiBJZTtyZXR1cm4tMX1wLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKEZlKXtMKCJyZWFkIixGZSksRmU9cGFyc2VJbnQoRmUsMTApO3ZhciBPZT10aGlzLl9yZWFkYWJsZVN0YXRlLEllPUZlO2lmKDAhPT1GZSYmKE9lLmVt''@;'; put 'put ''aXR0ZWRSZWFkYWJsZT0hMSksMD09PUZlJiZPZS5uZWVkUmVhZGFibGUmJigoMCE9PU9lLmhpZ2hXYXRlck1hcms/T2UubGVuZ3RoPj1PZS5oaWdoV2F0ZXJNYXJrOk9lLmxlbmd0aD4wKXx8T2UuZW5kZWQpKXJldHVybiBMKCJyZWFkOiBlbWl0UmVhZGFibGUiLE9lLmxlbmd0aCxPZS5lbmRl''@;'; put 'put ''ZCksMD09PU9lLmxlbmd0aCYmT2UuZW5kZWQ/WGUodGhpcyk6bSh0aGlzKSxudWxsO2lmKDA9PT0oRmU9aihGZSxPZSkpJiZPZS5lbmRlZClyZXR1cm4gMD09PU9lLmxlbmd0aCYmWGUodGhpcyksbnVsbDt2YXIga2UsVmU9T2UubmVlZFJlYWRhYmxlO3JldHVybiBMKCJuZWVkIHJlYWRhYmxl''@;'; put 'put ''IixWZSksKDA9PT1PZS5sZW5ndGh8fE9lLmxlbmd0aC1GZTxPZS5oaWdoV2F0ZXJNYXJrKSYmTCgibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLFZlPSEwKSxPZS5lbmRlZHx8T2UucmVhZGluZz9MKCJyZWFkaW5nIG9yIGVuZGVkIixWZT0hMSk6VmUmJihMKCJkbyByZWFkIiksT2UucmVh''@;'; put 'put ''ZGluZz0hMCxPZS5zeW5jPSEwLDA9PT1PZS5sZW5ndGgmJihPZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoT2UuaGlnaFdhdGVyTWFyayksT2Uuc3luYz0hMSxPZS5yZWFkaW5nfHwoRmU9aihJZSxPZSkpKSxudWxsPT09KGtlPUZlPjA/dmUoRmUsT2UpOm51bGwpPyhPZS5uZWVkUmVh''@;'; put 'put ''ZGFibGU9T2UubGVuZ3RoPD1PZS5oaWdoV2F0ZXJNYXJrLEZlPTApOihPZS5sZW5ndGgtPUZlLE9lLmF3YWl0RHJhaW49MCksMD09PU9lLmxlbmd0aCYmKE9lLmVuZGVkfHwoT2UubmVlZFJlYWRhYmxlPSEwKSxJZSE9PUZlJiZPZS5lbmRlZCYmWGUodGhpcykpLG51bGwhPT1rZSYmdGhpcy5l''@;'; put 'put ''bWl0KCJkYXRhIixrZSksa2V9LHAucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEZlKXtUZSh0aGlzLG5ldyBuZSgiX3JlYWQoKSIpKX0scC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihGZSxPZSl7dmFyIEllPXRoaXMsVmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goVmUucGlwZXNDb3Vu''@;'; put 'put ''dCl7Y2FzZSAwOlZlLnBpcGVzPUZlO2JyZWFrO2Nhc2UgMTpWZS5waXBlcz1bVmUucGlwZXMsRmVdO2JyZWFrO2RlZmF1bHQ6VmUucGlwZXMucHVzaChGZSl9VmUucGlwZXNDb3VudCs9MSxMKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLFZlLnBpcGVzQ291bnQsT2UpO3ZhciBBZT1PZSYmITE9''@;'; put 'put ''PT1PZS5lbmR8fEZlPT09SS5zdGRvdXR8fEZlPT09SS5zdGRlcnI/dHQ6bnQ7ZnVuY3Rpb24gbnQoKXtMKCJvbmVuZCIpLEZlLmVuZCgpfVZlLmVuZEVtaXR0ZWQ/SS5uZXh0VGljayhBZSk6SWUub25jZSgiZW5kIixBZSksRmUub24oInVucGlwZSIsZnVuY3Rpb24gX3QoSGUsdXQpe0woIm9u''@;'; put 'put ''dW5waXBlIiksSGU9PT1JZSYmdXQmJiExPT09dXQuaGFzVW5waXBlZCYmKHV0Lmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24geXQoKXtMKCJjbGVhbnVwIiksRmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixpdCksRmUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsJGUpLEZlLnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KCJkcmFpbiIsUWUpLEZlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsRHQpLEZlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLF90KSxJZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixudCksSWUucmVtb3ZlTGlzdGVuZXIoImVuZCIsdHQpLEllLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixNdCksdW49ITAs''@;'; put 'put ''VmUuYXdhaXREcmFpbiYmKCFGZS5fd3JpdGFibGVTdGF0ZXx8RmUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmUWUoKX0oKSl9KTt2YXIgUWU9ZnVuY3Rpb24gc2UoRmUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBJZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJwaXBlT25EcmFpbiIsSWUuYXdh''@;'; put 'put ''aXREcmFpbiksSWUuYXdhaXREcmFpbiYmSWUuYXdhaXREcmFpbi0tLDA9PT1JZS5hd2FpdERyYWluJiZCKEZlLCJkYXRhIikmJihJZS5mbG93aW5nPSEwLHhlKEZlKSl9fShJZSk7RmUub24oImRyYWluIixRZSk7dmFyIHVuPSExO2Z1bmN0aW9uIE10KEhlKXtMKCJvbmRhdGEiKTt2YXIgdXQ9''@;'; put 'put ''RmUud3JpdGUoSGUpO0woImRlc3Qud3JpdGUiLHV0KSwhMT09PXV0JiYoKDE9PT1WZS5waXBlc0NvdW50JiZWZS5waXBlcz09PUZlfHxWZS5waXBlc0NvdW50PjEmJi0xIT09RGUoVmUucGlwZXMsRmUpKSYmIXVuJiYoTCgiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixWZS5hd2FpdERy''@;'; put 'put ''YWluKSxWZS5hd2FpdERyYWluKyspLEllLnBhdXNlKCkpfWZ1bmN0aW9uIER0KEhlKXtMKCJvbmVycm9yIixIZSksdHQoKSxGZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLER0KSwwPT09QihGZSwiZXJyb3IiKSYmVGUoRmUsSGUpfWZ1bmN0aW9uIGl0KCl7RmUucmVtb3ZlTGlzdGVuZXIoImZp''@;'; put 'put ''bmlzaCIsJGUpLHR0KCl9ZnVuY3Rpb24gJGUoKXtMKCJvbmZpbmlzaCIpLEZlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsaXQpLHR0KCl9ZnVuY3Rpb24gdHQoKXtMKCJ1bnBpcGUiKSxJZS51bnBpcGUoRmUpfXJldHVybiBJZS5vbigiZGF0YSIsTXQpLGZ1bmN0aW9uIGplKEZlLE9lLEllKXtp''@;'; put 'put ''ZigiZnVuY3Rpb24iPT10eXBlb2YgRmUucHJlcGVuZExpc3RlbmVyKXJldHVybiBGZS5wcmVwZW5kTGlzdGVuZXIoT2UsSWUpO0ZlLl9ldmVudHMmJkZlLl9ldmVudHNbT2VdP0FycmF5LmlzQXJyYXkoRmUuX2V2ZW50c1tPZV0pP0ZlLl9ldmVudHNbT2VdLnVuc2hpZnQoSWUpOkZlLl9ldmVu''@;'; put 'put ''dHNbT2VdPVtJZSxGZS5fZXZlbnRzW09lXV06RmUub24oT2UsSWUpfShGZSwiZXJyb3IiLER0KSxGZS5vbmNlKCJjbG9zZSIsaXQpLEZlLm9uY2UoImZpbmlzaCIsJGUpLEZlLmVtaXQoInBpcGUiLEllKSxWZS5mbG93aW5nfHwoTCgicGlwZSByZXN1bWUiKSxJZS5yZXN1bWUoKSksRmV9LHAu''@;'; put 'put ''cHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihGZSl7dmFyIE9lPXRoaXMuX3JlYWRhYmxlU3RhdGUsSWU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1PZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1PZS5waXBlc0NvdW50KXJldHVybiBGZSYmRmUhPT1PZS5waXBlc3x8KEZlfHwoRmU9''@;'; put 'put ''T2UucGlwZXMpLE9lLnBpcGVzPW51bGwsT2UucGlwZXNDb3VudD0wLE9lLmZsb3dpbmc9ITEsRmUmJkZlLmVtaXQoInVucGlwZSIsdGhpcyxJZSkpLHRoaXM7aWYoIUZlKXt2YXIgVmU9T2UucGlwZXMsa2U9T2UucGlwZXNDb3VudDtPZS5waXBlcz1udWxsLE9lLnBpcGVzQ291bnQ9MCxPZS5m''@;'; put 'put ''bG93aW5nPSExO2Zvcih2YXIgQWU9MDtBZTxrZTtBZSsrKVZlW0FlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgX3Q9RGUoT2UucGlwZXMsRmUpO3JldHVybi0xPT09X3R8fChPZS5waXBlcy5zcGxpY2UoX3QsMSksT2UucGlwZXNDb3VudC09''@;'; put 'put ''MSwxPT09T2UucGlwZXNDb3VudCYmKE9lLnBpcGVzPU9lLnBpcGVzWzBdKSxGZS5lbWl0KCJ1bnBpcGUiLHRoaXMsSWUpKSx0aGlzfSxwLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1wLnByb3RvdHlwZS5vbj1mdW5jdGlvbihGZSxPZSl7dmFyIEllPXcucHJvdG90eXBlLm9uLmNhbGwodGhpcyxG''@;'; put 'put ''ZSxPZSksVmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1GZT8oVmUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1WZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09RmUmJiFWZS5lbmRFbWl0dGVk''@;'; put 'put ''JiYhVmUucmVhZGFibGVMaXN0ZW5pbmcmJihWZS5yZWFkYWJsZUxpc3RlbmluZz1WZS5uZWVkUmVhZGFibGU9ITAsVmUuZmxvd2luZz0hMSxWZS5lbWl0dGVkUmVhZGFibGU9ITEsTCgib24gcmVhZGFibGUiLFZlLmxlbmd0aCxWZS5yZWFkaW5nKSxWZS5sZW5ndGg/bSh0aGlzKTpWZS5yZWFk''@;'; put 'put ''aW5nfHxJLm5leHRUaWNrKFVlLHRoaXMpKSxJZX0scC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oRmUsT2Upe3ZhciBJZT13LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsRmUsT2UpO3JldHVybiJyZWFkYWJsZSI9PT1GZSYmSS5uZXh0VGljayh3ZSx0aGlz''@;'; put 'put ''KSxJZX0scC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKEZlKXt2YXIgT2U9dy5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4oInJlYWRhYmxlIj09PUZlfHx2b2lkIDA9PT1GZSkmJkkubmV4dFRpY2sod2UsdGhp''@;'; put 'put ''cyksT2V9LHAucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBGZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBGZS5mbG93aW5nfHwoTCgicmVzdW1lIiksRmUuZmxvd2luZz0hRmUucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24gSmUoRmUsT2Upe09lLnJlc3VtZVNjaGVkdWxl''@;'; put 'put ''ZHx8KE9lLnJlc3VtZVNjaGVkdWxlZD0hMCxJLm5leHRUaWNrKG90LEZlLE9lKSl9KHRoaXMsRmUpKSxGZS5wYXVzZWQ9ITEsdGhpc30scC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gTCgiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dp''@;'; put 'put ''bmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoTCgicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxwLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKEZl''@;'; put 'put ''KXt2YXIgT2U9dGhpcyxJZT10aGlzLl9yZWFkYWJsZVN0YXRlLFZlPSExO2Zvcih2YXIga2UgaW4gRmUub24oImVuZCIsZnVuY3Rpb24oKXtpZihMKCJ3cmFwcGVkIGVuZCIpLEllLmRlY29kZXImJiFJZS5lbmRlZCl7dmFyIF90PUllLmRlY29kZXIuZW5kKCk7X3QmJl90Lmxlbmd0aCYmT2Uu''@;'; put 'put ''cHVzaChfdCl9T2UucHVzaChudWxsKX0pLEZlLm9uKCJkYXRhIixmdW5jdGlvbihfdCl7TCgid3JhcHBlZCBkYXRhIiksSWUuZGVjb2RlciYmKF90PUllLmRlY29kZXIud3JpdGUoX3QpKSxJZS5vYmplY3RNb2RlJiZudWxsPT1fdHx8IShJZS5vYmplY3RNb2RlfHxfdCYmX3QubGVuZ3RoKXx8''@;'; put 'put ''T2UucHVzaChfdCl8fChWZT0hMCxGZS5wYXVzZSgpKX0pLEZlKXZvaWQgMD09PXRoaXNba2VdJiYiZnVuY3Rpb24iPT10eXBlb2YgRmVba2VdJiYodGhpc1trZV09ZnVuY3Rpb24obnQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBGZVtudF0uYXBwbHkoRmUsYXJndW1lbnRzKX19KGtlKSk7''@;'; put 'put ''Zm9yKHZhciBBZT0wO0FlPFNlLmxlbmd0aDtBZSsrKUZlLm9uKFNlW0FlXSx0aGlzLmVtaXQuYmluZCh0aGlzLFNlW0FlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKF90KXtMKCJ3cmFwcGVkIF9yZWFkIixfdCksVmUmJihWZT0hMSxGZS5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBTeW1ib2wmJihwLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09bWUmJihtZT15KDU4NTApKSxtZSh0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJr''@;'; put 'put ''Iix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsInJlYWRhYmxlRmxvd2luZyIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2lu''@;'; put 'put ''Z30sc2V0OmZ1bmN0aW9uKE9lKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPU9lKX19KSxwLl9mcm9tTGlzdD12ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsInJlYWRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHAuZnJvbT1mdW5jdGlvbihGZSxPZSl7cmV0dXJuIHZvaWQgMD09PV9lJiYoX2U9eSg1MTY3KSksX2UocCxGZSxPZSl9KX0sNDYwNToodWUsWCx5KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt1ZS5leHBvcnRzPU87dmFyIEk9eSg0MjgxKS5xLF89SS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxnPUkuRVJSX01VTFRJUExFX0NBTExCQUNLLEI9SS5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLHc9SS5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAs''@;'; put 'put ''UD15KDY3NTMpO2Z1bmN0aW9uIEYoTCxLKXt2YXIgVT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtVLnRyYW5zZm9ybWluZz0hMTt2YXIgVz1VLndyaXRlY2I7aWYobnVsbD09PVcpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBnKTtVLndyaXRlY2h1bms9bnVsbCxVLndyaXRlY2I9bnVsbCxu''@;'; put 'put ''dWxsIT1LJiZ0aGlzLnB1c2goSyksVyhMKTt2YXIgWT10aGlzLl9yZWFkYWJsZVN0YXRlO1kucmVhZGluZz0hMSwoWS5uZWVkUmVhZGFibGV8fFkubGVuZ3RoPFkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoWS5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBPKEwpe2lmKCEodGhpcyBpbnN0''@;'; put 'put ''YW5jZW9mIE8pKXJldHVybiBuZXcgTyhMKTtQLmNhbGwodGhpcyxMKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Ri5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGlu''@;'; put 'put ''ZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsTCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBMLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1MLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIEwuZmx1c2gm''@;'; put 'put ''Jih0aGlzLl9mbHVzaD1MLmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIix6KX1mdW5jdGlvbiB6KCl7dmFyIEw9dGhpczsiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkP04odGhpcyxudWxsLG51bGwpOnRoaXMuX2ZsdXNoKGZ1''@;'; put 'put ''bmN0aW9uKEssVSl7TihMLEssVSl9KX1mdW5jdGlvbiBOKEwsSyxVKXtpZihLKXJldHVybiBMLmVtaXQoImVycm9yIixLKTtpZihudWxsIT1VJiZMLnB1c2goVSksTC5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IHc7aWYoTC5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRo''@;'; put 'put ''cm93IG5ldyBCO3JldHVybiBMLnB1c2gobnVsbCl9eSg1NzE3KShPLFApLE8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxQLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxMLEspfSxPLnByb3RvdHlwZS5f''@;'; put 'put ''dHJhbnNmb3JtPWZ1bmN0aW9uKEwsSyxVKXtVKG5ldyBfKCJfdHJhbnNmb3JtKCkiKSl9LE8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoVy53cml0ZWNiPVUsVy53cml0ZWNodW5rPUwsVy53cml0ZWVuY29kaW5nPUssIVcu''@;'; put 'put ''dHJhbnNmb3JtaW5nKXt2YXIgWT10aGlzLl9yZWFkYWJsZVN0YXRlOyhXLm5lZWRUcmFuc2Zvcm18fFkubmVlZFJlYWRhYmxlfHxZLmxlbmd0aDxZLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKFkuaGlnaFdhdGVyTWFyayl9fSxPLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihMKXt2YXIg''@;'; put 'put ''Sz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09Sy53cml0ZWNodW5rfHxLLnRyYW5zZm9ybWluZz9LLm5lZWRUcmFuc2Zvcm09ITA6KEsudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShLLndyaXRlY2h1bmssSy53cml0ZWVuY29kaW5nLEsuYWZ0ZXJUcmFuc2Zvcm0pKX0sTy5w''@;'; put 'put ''cm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oTCxLKXtQLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsTCxmdW5jdGlvbihVKXtLKFUpfSl9fSw0MjI5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBCLEk9eSg0MTU1KTtmdW5jdGlvbiBnKHhlKXt2YXIgdmU9dGhpczt0aGlzLm5l''@;'; put 'put ''eHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gb3QoeGUsdmUsWGUpe3ZhciB6ZT14ZS5lbnRyeTtmb3IoeGUuZW50cnk9bnVsbDt6ZTspe3ZhciBEZT16ZS5jYWxsYmFjazt2ZS5wZW5kaW5nY2ItLSxEZShYZSksemU9emUubmV4dH12ZS5j''@;'; put 'put ''b3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD14ZX0odmUseGUpfX11ZS5leHBvcnRzPVYsVi5Xcml0YWJsZVN0YXRlPVNlO3ZhciBqZSx3PXtkZXByZWNhdGU6eSg0OTI3KX0sUD15KDI1MDMpLEY9eSg4NzY0KS5CdWZmZXIsTz0odHlwZW9mIHkuZzwidSI/eS5nOnR5cGVvZiB3aW5kb3c8InUiP3dp''@;'; put 'put ''bmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LEw9eSgxMTk1KSxVPXkoMjQ1NykuZ2V0SGlnaFdhdGVyTWFyayxXPXkoNDI4MSkucSxZPVcuRVJSX0lOVkFMSURfQVJHX1RZUEUscT1XLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGVlPVcu''@;'; put 'put ''RVJSX01VTFRJUExFX0NBTExCQUNLLEo9Vy5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLG5lPVcuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsaWU9Vy5FUlJfU1RSRUFNX05VTExfVkFMVUVTLGxlPVcuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsbWU9Vy5FUlJfVU5LTk9XTl9FTkNPRElORyxfZT1M''@;'; put 'put ''LmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIFRlKCl7fWZ1bmN0aW9uIFNlKHhlLHZlLFhlKXtCPUJ8fHkoNjc1MyksImJvb2xlYW4iIT10eXBlb2YgWGUmJihYZT12ZSBpbnN0YW5jZW9mIEIpLHRoaXMub2JqZWN0TW9kZT0hISh4ZT14ZXx8e30pLm9iamVjdE1vZGUsWGUmJih0aGlzLm9iamVj''@;'; put 'put ''dE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXhlLndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPVUodGhpcyx4ZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIixYZSksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVu''@;'; put 'put ''ZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT14ZS5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz14ZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0''@;'; put 'put ''aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKERlKXshZnVuY3Rpb24gRSh4ZSx2ZSl7dmFyIFhlPXhlLl93cml0YWJsZVN0YXRlLHplPVhlLnN5bmMsRGU9WGUud3JpdGVjYjtpZigiZnVuY3Rpb24iIT10eXBl''@;'; put 'put ''b2YgRGUpdGhyb3cgbmV3IGVlO2lmKGZ1bmN0aW9uIGooeGUpe3hlLndyaXRpbmc9ITEseGUud3JpdGVjYj1udWxsLHhlLmxlbmd0aC09eGUud3JpdGVsZW4seGUud3JpdGVsZW49MH0oWGUpLHZlKSFmdW5jdGlvbiBIKHhlLHZlLFhlLHplLERlKXstLXZlLnBlbmRpbmdjYixYZT8oSS5uZXh0''@;'; put 'put ''VGljayhEZSx6ZSksSS5uZXh0VGljayhVZSx4ZSx2ZSkseGUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLF9lKHhlLHplKSk6KERlKHplKSx4ZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsX2UoeGUsemUpLFVlKHhlLHZlKSl9KHhlLFhlLHplLHZlLERlKTtlbHNle3Zh''@;'; put 'put ''ciBGZT10ZShYZSl8fHhlLmRlc3Ryb3llZDshRmUmJiFYZS5jb3JrZWQmJiFYZS5idWZmZXJQcm9jZXNzaW5nJiZYZS5idWZmZXJlZFJlcXVlc3QmJmFlKHhlLFhlKSx6ZT9JLm5leHRUaWNrKG0seGUsWGUsRmUsRGUpOm0oeGUsWGUsRmUsRGUpfX0odmUsRGUpfSx0aGlzLndyaXRlY2I9bnVs''@;'; put 'put ''bCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT14ZS5lbWl0Q2xvc2Us''@;'; put 'put ''dGhpcy5hdXRvRGVzdHJveT0hIXhlLmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgZyh0aGlzKX1mdW5jdGlvbiBWKHhlKXt2YXIgdmU9dGhpcyBpbnN0YW5jZW9mKEI9Qnx8eSg2NzUzKSk7aWYoIXZlJiYhamUuY2Fs''@;'; put 'put ''bChWLHRoaXMpKXJldHVybiBuZXcgVih4ZSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgU2UoeGUsdGhpcyx2ZSksdGhpcy53cml0YWJsZT0hMCx4ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS53cml0ZSYmKHRoaXMuX3dyaXRlPXhlLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgeGUud3Jp''@;'; put 'put ''dGV2JiYodGhpcy5fd3JpdGV2PXhlLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIHhlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXhlLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS5maW5hbCYmKHRoaXMuX2ZpbmFsPXhlLmZpbmFsKSksUC5jYWxsKHRoaXMpfWZ1bmN0aW9uIFQo''@;'; put 'put ''eGUsdmUsWGUsemUsRGUsRmUsT2Upe3ZlLndyaXRlbGVuPXplLHZlLndyaXRlY2I9T2UsdmUud3JpdGluZz0hMCx2ZS5zeW5jPSEwLHZlLmRlc3Ryb3llZD92ZS5vbndyaXRlKG5ldyBuZSgid3JpdGUiKSk6WGU/eGUuX3dyaXRldihEZSx2ZS5vbndyaXRlKTp4ZS5fd3JpdGUoRGUsRmUsdmUu''@;'; put 'put ''b253cml0ZSksdmUuc3luYz0hMX1mdW5jdGlvbiBtKHhlLHZlLFhlLHplKXtYZXx8ZnVuY3Rpb24gQSh4ZSx2ZSl7MD09PXZlLmxlbmd0aCYmdmUubmVlZERyYWluJiYodmUubmVlZERyYWluPSExLHhlLmVtaXQoImRyYWluIikpfSh4ZSx2ZSksdmUucGVuZGluZ2NiLS0semUoKSxVZSh4ZSx2''@;'; put 'put ''ZSl9ZnVuY3Rpb24gYWUoeGUsdmUpe3ZlLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIFhlPXZlLmJ1ZmZlcmVkUmVxdWVzdDtpZih4ZS5fd3JpdGV2JiZYZSYmWGUubmV4dCl7dmFyIERlPW5ldyBBcnJheSh2ZS5idWZmZXJlZFJlcXVlc3RDb3VudCksRmU9dmUuY29ya2VkUmVxdWVzdHNGcmVl''@;'; put 'put ''O0ZlLmVudHJ5PVhlO2Zvcih2YXIgT2U9MCxJZT0hMDtYZTspRGVbT2VdPVhlLFhlLmlzQnVmfHwoSWU9ITEpLFhlPVhlLm5leHQsT2UrPTE7RGUuYWxsQnVmZmVycz1JZSxUKHhlLHZlLCEwLHZlLmxlbmd0aCxEZSwiIixGZS5maW5pc2gpLHZlLnBlbmRpbmdjYisrLHZlLmxhc3RCdWZmZXJl''@;'; put 'put ''ZFJlcXVlc3Q9bnVsbCxGZS5uZXh0Pyh2ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9RmUubmV4dCxGZS5uZXh0PW51bGwpOnZlLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgZyh2ZSksdmUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7WGU7KXt2YXIgVmU9WGUuY2h1bms7aWYoVCh4ZSx2''@;'; put 'put ''ZSwhMSx2ZS5vYmplY3RNb2RlPzE6VmUubGVuZ3RoLFZlLFhlLmVuY29kaW5nLFhlLmNhbGxiYWNrKSxYZT1YZS5uZXh0LHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sdmUud3JpdGluZylicmVha31udWxsPT09WGUmJih2ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfXZlLmJ1ZmZlcmVk''@;'; put 'put ''UmVxdWVzdD1YZSx2ZS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHRlKHhlKXtyZXR1cm4geGUuZW5kaW5nJiYwPT09eGUubGVuZ3RoJiZudWxsPT09eGUuYnVmZmVyZWRSZXF1ZXN0JiYheGUuZmluaXNoZWQmJiF4ZS53cml0aW5nfWZ1bmN0aW9uIHNlKHhlLHZlKXt4ZS5fZmluYWwo''@;'; put 'put ''ZnVuY3Rpb24oWGUpe3ZlLnBlbmRpbmdjYi0tLFhlJiZfZSh4ZSxYZSksdmUucHJlZmluaXNoZWQ9ITAseGUuZW1pdCgicHJlZmluaXNoIiksVWUoeGUsdmUpfSl9ZnVuY3Rpb24gVWUoeGUsdmUpe3ZhciBYZT10ZSh2ZSk7aWYoWGUmJihmdW5jdGlvbiB3ZSh4ZSx2ZSl7IXZlLnByZWZpbmlz''@;'; put 'put ''aGVkJiYhdmUuZmluYWxDYWxsZWQmJigiZnVuY3Rpb24iIT10eXBlb2YgeGUuX2ZpbmFsfHx2ZS5kZXN0cm95ZWQ/KHZlLnByZWZpbmlzaGVkPSEwLHhlLmVtaXQoInByZWZpbmlzaCIpKToodmUucGVuZGluZ2NiKyssdmUuZmluYWxDYWxsZWQ9ITAsSS5uZXh0VGljayhzZSx4ZSx2ZSkpKX0o''@;'; put 'put ''eGUsdmUpLDA9PT12ZS5wZW5kaW5nY2ImJih2ZS5maW5pc2hlZD0hMCx4ZS5lbWl0KCJmaW5pc2giKSx2ZS5hdXRvRGVzdHJveSkpKXt2YXIgemU9eGUuX3JlYWRhYmxlU3RhdGU7KCF6ZXx8emUuYXV0b0Rlc3Ryb3kmJnplLmVuZEVtaXR0ZWQpJiZ4ZS5kZXN0cm95KCl9cmV0dXJuIFhlfXko''@;'; put 'put ''NTcxNykoVixQKSxTZS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB2ZT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxYZT1bXTt2ZTspWGUucHVzaCh2ZSksdmU9dmUubmV4dDtyZXR1cm4gWGV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShTZS5wcm90''@;'; put 'put ''b3R5cGUsImJ1ZmZlciIse2dldDp3LmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9''@;'; put 'put ''fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhqZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoVixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKHZlKXtyZXR1cm4hIWplLmNhbGwodGhpcyx2ZSl8fHRoaXM9PT1WJiZ2ZSYmdmUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBTZX19KSk6amU9ZnVuY3Rpb24odmUpe3JldHVybiB2ZSBpbnN0YW5jZW9mIHRo''@;'; put 'put ''aXN9LFYucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtfZSh0aGlzLG5ldyBKKX0sVi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeGUsdmUsWGUpe3ZhciB6ZT10aGlzLl93cml0YWJsZVN0YXRlLERlPSExLEZlPSF6ZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBOKHhlKXtyZXR1cm4gRi5pc0J1''@;'; put 'put ''ZmZlcih4ZSl8fHhlIGluc3RhbmNlb2YgT30oeGUpO3JldHVybiBGZSYmIUYuaXNCdWZmZXIoeGUpJiYoeGU9ZnVuY3Rpb24geih4ZSl7cmV0dXJuIEYuZnJvbSh4ZSl9KHhlKSksImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksRmU/dmU9ImJ1ZmZlciI6dmV8fCh2ZT16''@;'; put 'put ''ZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBYZSYmKFhlPVRlKSx6ZS5lbmRpbmc/ZnVuY3Rpb24gcCh4ZSx2ZSl7dmFyIFhlPW5ldyBsZTtfZSh4ZSxYZSksSS5uZXh0VGljayh2ZSxYZSl9KHRoaXMsWGUpOihGZXx8ZnVuY3Rpb24gYih4ZSx2ZSxYZSx6ZSl7dmFyIERl''@;'; put 'put ''O3JldHVybiBudWxsPT09WGU/RGU9bmV3IGllOiJzdHJpbmciIT10eXBlb2YgWGUmJiF2ZS5vYmplY3RNb2RlJiYoRGU9bmV3IFkoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLFhlKSksIURlfHwoX2UoeGUsRGUpLEkubmV4dFRpY2soemUsRGUpLCExKX0odGhpcyx6ZSx4ZSxYZSkpJiYo''@;'; put 'put ''emUucGVuZGluZ2NiKyssRGU9ZnVuY3Rpb24gQyh4ZSx2ZSxYZSx6ZSxEZSxGZSl7aWYoIVhlKXt2YXIgT2U9ZnVuY3Rpb24geCh4ZSx2ZSxYZSl7cmV0dXJuIXhlLm9iamVjdE1vZGUmJiExIT09eGUuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiB2ZSYmKHZlPUYuZnJvbSh2ZSxY''@;'; put 'put ''ZSkpLHZlfSh2ZSx6ZSxEZSk7emUhPT1PZSYmKFhlPSEwLERlPSJidWZmZXIiLHplPU9lKX12YXIgSWU9dmUub2JqZWN0TW9kZT8xOnplLmxlbmd0aDt2ZS5sZW5ndGgrPUllO3ZhciBWZT12ZS5sZW5ndGg8dmUuaGlnaFdhdGVyTWFyaztpZihWZXx8KHZlLm5lZWREcmFpbj0hMCksdmUud3Jp''@;'; put 'put ''dGluZ3x8dmUuY29ya2VkKXt2YXIga2U9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdDt2ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazp6ZSxlbmNvZGluZzpEZSxpc0J1ZjpYZSxjYWxsYmFjazpGZSxuZXh0Om51bGx9LGtlP2tlLm5leHQ9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdDp2ZS5idWZm''@;'; put 'put ''ZXJlZFJlcXVlc3Q9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdCx2ZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIFQoeGUsdmUsITEsSWUsemUsRGUsRmUpO3JldHVybiBWZX0odGhpcyx6ZSxGZSx4ZSx2ZSxYZSkpLERlfSxWLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3Jp''@;'; put 'put ''dGFibGVTdGF0ZS5jb3JrZWQrK30sVi5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIHhlPXRoaXMuX3dyaXRhYmxlU3RhdGU7eGUuY29ya2VkJiYoeGUuY29ya2VkLS0sIXhlLndyaXRpbmcmJiF4ZS5jb3JrZWQmJiF4ZS5idWZmZXJQcm9jZXNzaW5nJiZ4ZS5idWZmZXJlZFJlcXVl''@;'; put 'put ''c3QmJmFlKHRoaXMseGUpKX0sVi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKHZlKXtpZigic3RyaW5nIj09dHlwZW9mIHZlJiYodmU9dmUudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIs''@;'; put 'put ''InVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigodmUrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgbWUodmUpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz12ZSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5w''@;'; put 'put ''cm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsIndyaXRhYmxlSGln''@;'; put 'put ''aFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxWLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oeGUsdmUsWGUpe1hlKG5ldyBxKCJfd3JpdGUoKSIpKX0sVi5wcm90b3R5cGUuX3dyaXRl''@;'; put 'put ''dj1udWxsLFYucHJvdG90eXBlLmVuZD1mdW5jdGlvbih4ZSx2ZSxYZSl7dmFyIHplPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHhlPyhYZT14ZSx4ZT1udWxsLHZlPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPW51bGwpLG51bGwh''@;'; put 'put ''PXhlJiZ0aGlzLndyaXRlKHhlLHZlKSx6ZS5jb3JrZWQmJih6ZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSx6ZS5lbmRpbmd8fGZ1bmN0aW9uIEplKHhlLHZlLFhlKXt2ZS5lbmRpbmc9ITAsVWUoeGUsdmUpLFhlJiYodmUuZmluaXNoZWQ/SS5uZXh0VGljayhYZSk6eGUub25jZSgiZmluaXNo''@;'; put 'put ''IixYZSkpLHZlLmVuZGVkPSEwLHhlLndyaXRhYmxlPSExfSh0aGlzLHplLFhlKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5n''@;'; put 'put ''dGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHZl''@;'; put 'put ''KXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dmUpfX0pLFYucHJvdG90eXBlLmRlc3Ryb3k9TC5kZXN0cm95LFYucHJvdG90eXBlLl91bmRlc3Ryb3k9TC51bmRlc3Ryb3ksVi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oeGUsdmUpe3Zl''@;'; put 'put ''KHhlKX19LDU4NTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIF8sST15KDQxNTUpO2Z1bmN0aW9uIGcobGUsbWUsX2Upe3JldHVybiBtZT1mdW5jdGlvbiBCKGxlKXt2YXIgbWU9ZnVuY3Rpb24gdyhsZSxtZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBsZXx8bnVsbD09PWxlKXJldHVybiBs''@;'; put 'put ''ZTt2YXIgX2U9bGVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1fZSl7dmFyIFRlPV9lLmNhbGwobGUsbWV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBUZSlyZXR1cm4gVGU7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHBy''@;'; put 'put ''aW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1tZT9TdHJpbmc6TnVtYmVyKShsZSl9KGxlLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIG1lP21lOlN0cmluZyhtZSl9KG1lKSxtZSBpbiBsZT9PYmplY3QuZGVmaW5lUHJvcGVydHkobGUsbWUse3ZhbHVlOl9lLGVu''@;'; put 'put ''dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bGVbbWVdPV9lLGxlfXZhciBQPXkoODYxMCksRj1TeW1ib2woImxhc3RSZXNvbHZlIiksTz1TeW1ib2woImxhc3RSZWplY3QiKSx6PVN5bWJvbCgiZXJyb3IiKSxOPVN5bWJvbCgiZW5kZWQiKSxMPVN5bWJvbCgibGFz''@;'; put 'put ''dFByb21pc2UiKSxLPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLFU9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBXKGxlLG1lKXtyZXR1cm57dmFsdWU6bGUsZG9uZTptZX19ZnVuY3Rpb24gWShsZSl7dmFyIG1lPWxlW0ZdO2lmKG51bGwhPT1tZSl7dmFyIF9lPWxlW1VdLnJlYWQoKTtudWxs''@;'; put 'put ''IT09X2UmJihsZVtMXT1udWxsLGxlW0ZdPW51bGwsbGVbT109bnVsbCxtZShXKF9lLCExKSkpfX1mdW5jdGlvbiBxKGxlKXtJLm5leHRUaWNrKFksbGUpfXZhciBKPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLG5lPU9iamVjdC5zZXRQcm90b3R5cGVPZigoZyhfPXtnZXQg''@;'; put 'put ''c3RyZWFtKCl7cmV0dXJuIHRoaXNbVV19LG5leHQ6ZnVuY3Rpb24oKXt2YXIgbWU9dGhpcyxfZT10aGlzW3pdO2lmKG51bGwhPT1fZSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoX2UpO2lmKHRoaXNbTl0pcmV0dXJuIFByb21pc2UucmVzb2x2ZShXKHZvaWQgMCwhMCkpO2lmKHRoaXNbVV0uZGVz''@;'; put 'put ''dHJveWVkKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihWLHApe0kubmV4dFRpY2soZnVuY3Rpb24oKXttZVt6XT9wKG1lW3pdKTpWKFcodm9pZCAwLCEwKSl9KX0pO3ZhciBTZSxUZT10aGlzW0xdO2lmKFRlKVNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uIGVlKGxlLG1lKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oX2UsVGUpe2xlLnRoZW4oZnVuY3Rpb24oKXttZVtOXT9fZShXKHZvaWQgMCwhMCkpOm1lW0tdKF9lLFRlKX0sVGUpfX0oVGUsdGhpcykpO2Vsc2V7dmFyIGplPXRoaXNbVV0ucmVhZCgpO2lmKG51bGwhPT1qZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFcoamUsITEpKTtTZT1uZXcg''@;'; put 'put ''UHJvbWlzZSh0aGlzW0tdKX1yZXR1cm4gdGhpc1tMXT1TZSxTZX19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxnKF8sInJldHVybiIsZnVuY3Rpb24oKXt2YXIgbWU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oX2UsVGUpe21lW1VdLmRl''@;'; put 'put ''c3Ryb3kobnVsbCxmdW5jdGlvbihTZSl7U2U/VGUoU2UpOl9lKFcodm9pZCAwLCEwKSl9KX0pfSksXyksSik7dWUuZXhwb3J0cz1mdW5jdGlvbihtZSl7dmFyIF9lLFRlPU9iamVjdC5jcmVhdGUobmUsKGcoX2U9e30sVSx7dmFsdWU6bWUsd3JpdGFibGU6ITB9KSxnKF9lLEYse3ZhbHVlOm51''@;'; put 'put ''bGwsd3JpdGFibGU6ITB9KSxnKF9lLE8se3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxnKF9lLHose3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxnKF9lLE4se3ZhbHVlOm1lLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsd3JpdGFibGU6ITB9KSxnKF9lLEsse3ZhbHVlOmZ1bmN0aW9uKGpl''@;'; put 'put ''LFYpe3ZhciBwPVRlW1VdLnJlYWQoKTtwPyhUZVtMXT1udWxsLFRlW0ZdPW51bGwsVGVbT109bnVsbCxqZShXKHAsITEpKSk6KFRlW0ZdPWplLFRlW09dPVYpfSx3cml0YWJsZTohMH0pLF9lKSk7cmV0dXJuIFRlW0xdPW51bGwsUChtZSxmdW5jdGlvbihTZSl7aWYoU2UmJiJFUlJfU1RSRUFN''@;'; put 'put ''X1BSRU1BVFVSRV9DTE9TRSIhPT1TZS5jb2RlKXt2YXIgamU9VGVbT107cmV0dXJuIG51bGwhPT1qZSYmKFRlW0xdPW51bGwsVGVbRl09bnVsbCxUZVtPXT1udWxsLGplKFNlKSksdm9pZChUZVt6XT1TZSl9dmFyIFY9VGVbRl07bnVsbCE9PVYmJihUZVtMXT1udWxsLFRlW0ZdPW51bGwsVGVb''@;'; put 'put ''T109bnVsbCxWKFcodm9pZCAwLCEwKSkpLFRlW05dPSEwfSksbWUub24oInJlYWRhYmxlIixxLmJpbmQobnVsbCxUZSkpLFRlfX0sNzMyNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKFkscSl7dmFyIGVlPU9iamVjdC5rZXlzKFkpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0''@;'; put 'put ''eVN5bWJvbHMpe3ZhciBKPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoWSk7cSYmKEo9Si5maWx0ZXIoZnVuY3Rpb24obmUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFksbmUpLmVudW1lcmFibGV9KSksZWUucHVzaC5hcHBseShlZSxKKX1yZXR1cm4gZWV9''@;'; put 'put ''ZnVuY3Rpb24gXyhZKXtmb3IodmFyIHE9MTtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgZWU9bnVsbCE9YXJndW1lbnRzW3FdP2FyZ3VtZW50c1txXTp7fTtxJTI/SShPYmplY3QoZWUpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKEope2coWSxKLGVlW0pdKX0pOk9iamVjdC5nZXRPd25Qcm9w''@;'; put 'put ''ZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZWUpKTpJKE9iamVjdChlZSkpLmZvckVhY2goZnVuY3Rpb24oSil7T2JqZWN0LmRlZmluZVByb3BlcnR5KFksSixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj''@;'; put 'put ''cmlwdG9yKGVlLEopKX0pfXJldHVybiBZfWZ1bmN0aW9uIGcoWSxxLGVlKXtyZXR1cm4ocT1GKHEpKWluIFk/T2JqZWN0LmRlZmluZVByb3BlcnR5KFkscSx7dmFsdWU6ZWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpZW3FdPWVlLFl9ZnVuY3Rpb24gdyhZ''@;'; put 'put ''LHEpe2Zvcih2YXIgZWU9MDtlZTxxLmxlbmd0aDtlZSsrKXt2YXIgSj1xW2VlXTtKLmVudW1lcmFibGU9Si5lbnVtZXJhYmxlfHwhMSxKLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gSiYmKEoud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLEYoSi5rZXkpLEopfX1mdW5j''@;'; put 'put ''dGlvbiBGKFkpe3ZhciBxPWZ1bmN0aW9uIE8oWSxxKXtpZigib2JqZWN0IiE9dHlwZW9mIFl8fG51bGw9PT1ZKXJldHVybiBZO3ZhciBlZT1ZW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZWUpe3ZhciBKPWVlLmNhbGwoWSxxfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgSilyZXR1cm4gSjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXE/U3RyaW5nOk51bWJlcikoWSl9KFksInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgcT9xOlN0cmlu''@;'; put 'put ''ZyhxKX12YXIgTj15KDg3NjQpLkJ1ZmZlcixLPXkoMjM2MSkuaW5zcGVjdCxVPUsmJksuY3VzdG9tfHwiaW5zcGVjdCI7ZnVuY3Rpb24gVyhZLHEsZWUpe04ucHJvdG90eXBlLmNvcHkuY2FsbChZLHEsZWUpfXVlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBZKCl7KGZ1bmN0aW9uIEIo''@;'; put 'put ''WSxxKXtpZighKFkgaW5zdGFuY2VvZiBxKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsWSksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gZnVuY3Rpb24gUChZLHEsZWUpe3Em''@;'; put 'put ''JncoWS5wcm90b3R5cGUscSksZWUmJncoWSxlZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFksInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KFksW3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj17ZGF0YTplZSxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWls''@;'; put 'put ''Lm5leHQ9Sjp0aGlzLmhlYWQ9Six0aGlzLnRhaWw9SiwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9SiksdGhpcy5oZWFkPUosKyt0aGlzLmxl''@;'; put 'put ''bmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGVlPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZWV9fX0se2tl''@;'; put 'put ''eToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgSj10aGlzLmhlYWQsbmU9IiIrSi5kYXRhO0o9Si5u''@;'; put 'put ''ZXh0OyluZSs9ZWUrSi5kYXRhO3JldHVybiBuZX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gTi5hbGxvYygwKTtmb3IodmFyIEo9Ti5hbGxvY1Vuc2FmZShlZT4+PjApLG5lPXRoaXMuaGVhZCxpZT0wO25lOylXKG5lLmRhdGEs''@;'; put 'put ''SixpZSksaWUrPW5lLmRhdGEubGVuZ3RoLG5lPW5lLm5leHQ7cmV0dXJuIEp9fSx7a2V5OiJjb25zdW1lIix2YWx1ZTpmdW5jdGlvbihlZSxKKXt2YXIgbmU7cmV0dXJuIGVlPHRoaXMuaGVhZC5kYXRhLmxlbmd0aD8obmU9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxlZSksdGhpcy5oZWFkLmRh''@;'; put 'put ''dGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoZWUpKTpuZT1lZT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6Sj90aGlzLl9nZXRTdHJpbmcoZWUpOnRoaXMuX2dldEJ1ZmZlcihlZSksbmV9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFk''@;'; put 'put ''LmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9dGhpcy5oZWFkLG5lPTEsaWU9Si5kYXRhO2ZvcihlZS09aWUubGVuZ3RoO0o9Si5uZXh0Oyl7dmFyIGxlPUouZGF0YSxtZT1lZT5sZS5sZW5ndGg/bGUubGVuZ3RoOmVlO2lmKGllKz1tZT09PWxlLmxl''@;'; put 'put ''bmd0aD9sZTpsZS5zbGljZSgwLGVlKSwwPT0oZWUtPW1lKSl7bWU9PT1sZS5sZW5ndGg/KCsrbmUsdGhpcy5oZWFkPUoubmV4dD9KLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9SixKLmRhdGE9bGUuc2xpY2UobWUpKTticmVha30rK25lfXJldHVybiB0aGlzLmxlbmd0aC09bmUs''@;'; put 'put ''aWV9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9Ti5hbGxvY1Vuc2FmZShlZSksbmU9dGhpcy5oZWFkLGllPTE7Zm9yKG5lLmRhdGEuY29weShKKSxlZS09bmUuZGF0YS5sZW5ndGg7bmU9bmUubmV4dDspe3ZhciBsZT1uZS5kYXRhLG1lPWVlPmxlLmxlbmd0''@;'; put 'put ''aD9sZS5sZW5ndGg6ZWU7aWYobGUuY29weShKLEoubGVuZ3RoLWVlLDAsbWUpLDA9PShlZS09bWUpKXttZT09PWxlLmxlbmd0aD8oKytpZSx0aGlzLmhlYWQ9bmUubmV4dD9uZS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPW5lLG5lLmRhdGE9bGUuc2xpY2UobWUpKTticmVha30r''@;'; put 'put ''K2llfXJldHVybiB0aGlzLmxlbmd0aC09aWUsSn19LHtrZXk6VSx2YWx1ZTpmdW5jdGlvbihlZSxKKXtyZXR1cm4gSyh0aGlzLF8oXyh7fSxKKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dKSxZfSgpfSwxMTk1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1''@;'; put 'put ''NSk7ZnVuY3Rpb24gZyhPLHope1AoTyx6KSxCKE8pfWZ1bmN0aW9uIEIoTyl7Ty5fd3JpdGFibGVTdGF0ZSYmIU8uX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHxPLl9yZWFkYWJsZVN0YXRlJiYhTy5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fE8uZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBQ''@;'; put 'put ''KE8seil7Ty5lbWl0KCJlcnJvciIseil9dWUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBfKE8seil7dmFyIE49dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZGVzdHJveWVkPyh6P3ooTyk6TyYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKFAsdGhpcyxPKSk6SS5uZXh0VGljayhQLHRoaXMsTykpLHRo''@;'; put 'put ''aXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShPfHxudWxsLGZ1bmN0aW9uKFUpeyF6JiZVP04uX3dyaXRh''@;'; put 'put ''YmxlU3RhdGU/Ti5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/SS5uZXh0VGljayhCLE4pOihOLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKGcsTixVKSk6SS5uZXh0VGljayhnLE4sVSk6ej8oSS5uZXh0VGljayhCLE4pLHooVSkpOkkubmV4dFRpY2soQixO''@;'; put 'put ''KX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gdygpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9''@;'; put 'put ''ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24gRihPLHope3ZhciBOPU8uX3JlYWRhYmxlU3RhdGUsTD1P''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlO04mJk4uYXV0b0Rlc3Ryb3l8fEwmJkwuYXV0b0Rlc3Ryb3k/Ty5kZXN0cm95KHopOk8uZW1pdCgiZXJyb3IiLHopfX19LDg2MTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MjgxKS5xLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9u''@;'; put 'put ''IGcoKXt9dWUuZXhwb3J0cz1mdW5jdGlvbiB3KFAsRixPKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRilyZXR1cm4gdyhQLG51bGwsRik7Rnx8KEY9e30pLE89ZnVuY3Rpb24gXyhQKXt2YXIgRj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighRil7Rj0hMDtmb3IodmFyIE89YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aCx6PW5ldyBBcnJheShPKSxOPTA7TjxPO04rKyl6W05dPWFyZ3VtZW50c1tOXTtQLmFwcGx5KHRoaXMseil9fX0oT3x8Zyk7dmFyIHo9Ri5yZWFkYWJsZXx8ITEhPT1GLnJlYWRhYmxlJiZQLnJlYWRhYmxlLE49Ri53cml0YWJsZXx8ITEhPT1GLndyaXRhYmxlJiZQLndyaXRhYmxlLEw9''@;'; put 'put ''ZnVuY3Rpb24oKXtQLndyaXRhYmxlfHxVKCl9LEs9UC5fd3JpdGFibGVTdGF0ZSYmUC5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCxVPWZ1bmN0aW9uKCl7Tj0hMSxLPSEwLHp8fE8uY2FsbChQKX0sVz1QLl9yZWFkYWJsZVN0YXRlJiZQLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsWT1mdW5j''@;'; put 'put ''dGlvbigpe3o9ITEsVz0hMCxOfHxPLmNhbGwoUCl9LHE9ZnVuY3Rpb24oaWUpe08uY2FsbChQLGllKX0sZWU9ZnVuY3Rpb24oKXt2YXIgaWU7cmV0dXJuIHomJiFXPygoIVAuX3JlYWRhYmxlU3RhdGV8fCFQLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSYmKGllPW5ldyBJKSxPLmNhbGwoUCxpZSkp''@;'; put 'put ''Ok4mJiFLPygoIVAuX3dyaXRhYmxlU3RhdGV8fCFQLl93cml0YWJsZVN0YXRlLmVuZGVkKSYmKGllPW5ldyBJKSxPLmNhbGwoUCxpZSkpOnZvaWQgMH0sSj1mdW5jdGlvbigpe1AucmVxLm9uKCJmaW5pc2giLFUpfTtyZXR1cm4gZnVuY3Rpb24gQihQKXtyZXR1cm4gUC5zZXRIZWFkZXImJiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBQLmFib3J0fShQKT8oUC5vbigiY29tcGxldGUiLFUpLFAub24oImFib3J0IixlZSksUC5yZXE/SigpOlAub24oInJlcXVlc3QiLEopKTpOJiYhUC5fd3JpdGFibGVTdGF0ZSYmKFAub24oImVuZCIsTCksUC5vbigiY2xvc2UiLEwpKSxQLm9uKCJlbmQiLFkpLFAu''@;'; put 'put ''b24oImZpbmlzaCIsVSksITEhPT1GLmVycm9yJiZQLm9uKCJlcnJvciIscSksUC5vbigiY2xvc2UiLGVlKSxmdW5jdGlvbigpe1AucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsZWUpLFAucmVtb3ZlTGlzdGVuZXIoInJlcXVlc3QiLEopLFAu''@;'; put 'put ''cmVxJiZQLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEwpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFUpLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsWSksUC5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''ZXJyb3IiLHEpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixlZSl9fX0sNTE2Nzp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sOTk0NjoodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgSSxnPXkoNDI4MSkucSxCPWcuRVJSX01JU1NJTkdfQVJHUyx3PWcuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gUChVKXtpZihVKXRocm93IFV9ZnVuY3Rpb24geihVKXtVKCl9ZnVuY3Rpb24gTihVLFcpe3JldHVybiBVLnBpcGUoVyl9dWUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''biBLKCl7Zm9yKHZhciBVPWFyZ3VtZW50cy5sZW5ndGgsVz1uZXcgQXJyYXkoVSksWT0wO1k8VTtZKyspV1tZXT1hcmd1bWVudHNbWV07dmFyIHE9ZnVuY3Rpb24gTChVKXtyZXR1cm4gVS5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBVW1UubGVuZ3RoLTFdP1UucG9wKCk6UH0oVyk7aWYo''@;'; put 'put ''QXJyYXkuaXNBcnJheShXWzBdKSYmKFc9V1swXSksVy5sZW5ndGg8Mil0aHJvdyBuZXcgQigic3RyZWFtcyIpO3ZhciBlZSxKPVcubWFwKGZ1bmN0aW9uKG5lLGllKXt2YXIgbGU9aWU8Vy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24gTyhVLFcsWSxxKXtxPWZ1bmN0aW9uIF8oVSl7dmFyIFc9''@;'; put 'put ''ITE7cmV0dXJuIGZ1bmN0aW9uKCl7V3x8KFc9ITAsVS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fShxKTt2YXIgZWU9ITE7VS5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7ZWU9ITB9KSx2b2lkIDA9PT1JJiYoST15KDg2MTApKSxJKFUse3JlYWRhYmxlOlcsd3JpdGFibGU6WX0sZnVuY3Rpb24o''@;'; put 'put ''bmUpe2lmKG5lKXJldHVybiBxKG5lKTtlZT0hMCxxKCl9KTt2YXIgSj0hMTtyZXR1cm4gZnVuY3Rpb24obmUpe2lmKCFlZSYmIUope2lmKEo9ITAsZnVuY3Rpb24gRihVKXtyZXR1cm4gVS5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBVLmFib3J0fShVKSlyZXR1cm4gVS5hYm9ydCgp''@;'; put 'put ''O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBVLmRlc3Ryb3kpcmV0dXJuIFUuZGVzdHJveSgpO3EobmV8fG5ldyB3KCJwaXBlIikpfX19KG5lLGxlLGllPjAsZnVuY3Rpb24oX2Upe2VlfHwoZWU9X2UpLF9lJiZKLmZvckVhY2goeiksIWxlJiYoSi5mb3JFYWNoKHopLHEoZWUpKX0pfSk7cmV0dXJu''@;'; put 'put ''IFcucmVkdWNlKE4pfX0sMjQ1NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQyODEpLnEuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO3VlLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24gZyhCLHcsUCxGKXt2YXIgTz1mdW5jdGlvbiBfKEIsdyxQKXtyZXR1cm4gbnVs''@;'; put 'put ''bCE9Qi5oaWdoV2F0ZXJNYXJrP0IuaGlnaFdhdGVyTWFyazp3P0JbUF06bnVsbH0odyxGLFApO2lmKG51bGwhPU8pe2lmKCFpc0Zpbml0ZShPKXx8TWF0aC5mbG9vcihPKSE9PU98fE88MCl0aHJvdyBuZXcgSShGP1A6ImhpZ2hXYXRlck1hcmsiLE8pO3JldHVybiBNYXRoLmZsb29yKE8pfXJl''@;'; put 'put ''dHVybiBCLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sMjUwMzoodWUsWCx5KT0+e3VlLmV4cG9ydHM9eSg3MTg3KS5FdmVudEVtaXR0ZXJ9LDc0MTg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbih5LEkpe2lmKEk9SS5zcGxpdCgiOiIpWzBdLCEoeT0reSkpcmV0dXJuITE7''@;'; put 'put ''c3dpdGNoKEkpe2Nhc2UiaHR0cCI6Y2FzZSJ3cyI6cmV0dXJuIDgwIT09eTtjYXNlImh0dHBzIjpjYXNlIndzcyI6cmV0dXJuIDQ0MyE9PXk7Y2FzZSJmdHAiOnJldHVybiAyMSE9PXk7Y2FzZSJnb3BoZXIiOnJldHVybiA3MCE9PXk7Y2FzZSJmaWxlIjpyZXR1cm4hMX1yZXR1cm4gMCE9PXl9''@;'; put 'put ''fSw5Nzg1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODc2NCkuQnVmZmVyLF89eSg1NzE3KSxnPXkoMzM0OSksQj1uZXcgQXJyYXkoMTYpLHc9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEs''@;'; put 'put ''OCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sUD1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMs''@;'; put 'put ''NywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxGPVsxMSwxNCwxNSwxMiw1LDgs''@;'; put 'put ''Nyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1''@;'; put 'put ''LDEyLDEzLDE0LDExLDgsNSw2XSxPPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2''@;'; put 'put ''LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXSx6PVswLDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDI4NDA4NTM4MzhdLE49WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQyMTcsMF07ZnVuY3Rp''@;'; put 'put ''b24gTCgpe2cuY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjB9ZnVuY3Rpb24gSyhKLG5lKXtyZXR1cm4gSjw8bmV8Sj4+PjMyLW5lfWZ1bmN0aW9u''@;'; put 'put ''IFUoSixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisobmVeaWVebGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gVyhKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhuZSZpZXx+bmUmbGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gWShKLG5lLGllLGxl''@;'; put 'put ''LG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKygobmV8fmllKV5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBxKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKG5lJmxlfGllJn5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBlZShKLG5lLGllLGxlLG1lLF9lLFRl''@;'; put 'put ''LFNlKXtyZXR1cm4gSyhKKyhuZV4oaWV8fmxlKSkrX2UrVGV8MCxTZSkrbWV8MH1fKEwsZyksTC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgSj1CLG5lPTA7bmU8MTY7KytuZSlKW25lXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0Km5lKTtmb3IodmFyIGllPTB8dGhp''@;'; put 'put ''cy5fYSxsZT0wfHRoaXMuX2IsbWU9MHx0aGlzLl9jLF9lPTB8dGhpcy5fZCxUZT0wfHRoaXMuX2UsU2U9MHx0aGlzLl9hLGplPTB8dGhpcy5fYixWPTB8dGhpcy5fYyxwPTB8dGhpcy5fZCxiPTB8dGhpcy5fZSx4PTA7eDw4MDt4Kz0xKXt2YXIgQyxUO3g8MTY/KEM9VShpZSxsZSxtZSxfZSxU''@;'; put 'put ''ZSxKW3dbeF1dLHpbMF0sRlt4XSksVD1lZShTZSxqZSxWLHAsYixKW1BbeF1dLE5bMF0sT1t4XSkpOng8MzI/KEM9VyhpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbMV0sRlt4XSksVD1xKFNlLGplLFYscCxiLEpbUFt4XV0sTlsxXSxPW3hdKSk6eDw0OD8oQz1ZKGllLGxlLG1lLF9lLFRlLEpb''@;'; put 'put ''d1t4XV0selsyXSxGW3hdKSxUPVkoU2UsamUsVixwLGIsSltQW3hdXSxOWzJdLE9beF0pKTp4PDY0PyhDPXEoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzNdLEZbeF0pLFQ9VyhTZSxqZSxWLHAsYixKW1BbeF1dLE5bM10sT1t4XSkpOihDPWVlKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0sels0''@;'; put 'put ''XSxGW3hdKSxUPVUoU2UsamUsVixwLGIsSltQW3hdXSxOWzRdLE9beF0pKSxpZT1UZSxUZT1fZSxfZT1LKG1lLDEwKSxtZT1sZSxsZT1DLFNlPWIsYj1wLHA9SyhWLDEwKSxWPWplLGplPVR9dmFyIEg9dGhpcy5fYittZStwfDA7dGhpcy5fYj10aGlzLl9jK19lK2J8MCx0aGlzLl9jPXRoaXMu''@;'; put 'put ''X2QrVGUrU2V8MCx0aGlzLl9kPXRoaXMuX2UraWUramV8MCx0aGlzLl9lPXRoaXMuX2ErbGUrVnwwLHRoaXMuX2E9SH0sTC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMu''@;'; put 'put ''X2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5f''@;'; put 'put ''YmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBKPUkuYWxsb2M/SS5hbGxvYygyMCk6bmV3IEkoMjApO3JldHVybiBKLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEoud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksSi53cml0ZUludDMyTEUo''@;'; put 'put ''dGhpcy5fYyw4KSxKLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxKLndyaXRlSW50MzJMRSh0aGlzLl9lLDE2KSxKfSx1ZS5leHBvcnRzPUx9LDk1MDk6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLF89SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1m''@;'; put 'put ''dW5jdGlvbiBCKHcsUCxGKXtyZXR1cm4gXyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz91ZS5leHBvcnRzPUk6KGcoSSxYKSxYLkJ1ZmZlcj1CKSxCLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8ucHJvdG90eXBlKSxnKF8sQiksQi5m''@;'; put 'put ''cm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LEIuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIE89Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ty5maWxsKFAsRik6Ty5maWxsKFApOk8uZmlsbCgwKSxPfSxCLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10''@;'; put 'put ''eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LEIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVt''@;'; put 'put ''YmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDkyNDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3Mzc5KSxfPXkoODQyMCksZz1JKCJSZWdFeHAucHJvdG90eXBlLmV4ZWMiKSxCPXkoNDQ1Myk7dWUuZXhwb3J0cz1mdW5jdGlvbihQKXtpZighXyhQKSl0aHJvdyBuZXcg''@;'; put 'put ''QigiYHJlZ2V4YCBtdXN0IGJlIGEgUmVnRXhwIik7cmV0dXJuIGZ1bmN0aW9uKE8pe3JldHVybiBudWxsIT09ZyhQLE8pfX19LDc3NzE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMTApLF89eSgyMjk2KSxnPXkoMTA0NCkoKSxCPXkoNzI5Niksdz15KDQ0NTMpLFA9SSgiJU1h''@;'; put 'put ''dGguZmxvb3IlIik7dWUuZXhwb3J0cz1mdW5jdGlvbihPLHope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBPKXRocm93IG5ldyB3KCJgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoIm51bWJlciIhPXR5cGVvZiB6fHx6PDB8fHo+NDI5NDk2NzI5NXx8UCh6KSE9PXopdGhyb3cgbmV3IHcoImBs''@;'; put 'put ''ZW5ndGhgIG11c3QgYmUgYSBwb3NpdGl2ZSAzMi1iaXQgaW50ZWdlciIpO3ZhciBOPWFyZ3VtZW50cy5sZW5ndGg+MiYmISFhcmd1bWVudHNbMl0sTD0hMCxLPSEwO2lmKCJsZW5ndGgiaW4gTyYmQil7dmFyIFU9QihPLCJsZW5ndGgiKTtVJiYhVS5jb25maWd1cmFibGUmJihMPSExKSxVJiYh''@;'; put 'put ''VS53cml0YWJsZSYmKEs9ITEpfXJldHVybihMfHxLfHwhTikmJihnP18oTywibGVuZ3RoIix6LCEwLCEwKTpfKE8sImxlbmd0aCIseikpLE99fSw0MTg5Oih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gXyhnLEIpe3RoaXMuX2Jsb2NrPUkuYWxsb2MoZyksdGhpcy5f''@;'; put 'put ''ZmluYWxTaXplPUIsdGhpcy5fYmxvY2tTaXplPWcsdGhpcy5fbGVuPTB9Xy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGcsQil7InN0cmluZyI9PXR5cGVvZiBnJiYoZz1JLmZyb20oZyxCPUJ8fCJ1dGY4IikpO2Zvcih2YXIgdz10aGlzLl9ibG9jayxQPXRoaXMuX2Jsb2NrU2l6ZSxGPWcu''@;'; put 'put ''bGVuZ3RoLE89dGhpcy5fbGVuLHo9MDt6PEY7KXtmb3IodmFyIE49TyVQLEw9TWF0aC5taW4oRi16LFAtTiksSz0wO0s8TDtLKyspd1tOK0tdPWdbeitLXTt6Kz1MLChPKz1MKSVQPT0wJiZ0aGlzLl91cGRhdGUodyl9cmV0dXJuIHRoaXMuX2xlbis9Rix0aGlzfSxfLnByb3RvdHlwZS5kaWdl''@;'; put 'put ''c3Q9ZnVuY3Rpb24oZyl7dmFyIEI9dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1tCXT0xMjgsdGhpcy5fYmxvY2suZmlsbCgwLEIrMSksQj49dGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKTt2YXIgdz04''@;'; put 'put ''KnRoaXMuX2xlbjtpZih3PD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUodyx0aGlzLl9ibG9ja1NpemUtNCk7ZWxzZXt2YXIgUD0oNDI5NDk2NzI5NSZ3KT4+PjA7dGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSgody1QKS80Mjk0OTY3Mjk2LHRoaXMuX2Jsb2NrU2l6ZS04''@;'; put 'put ''KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKFAsdGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayk7dmFyIE89dGhpcy5faGFzaCgpO3JldHVybiBnP08udG9TdHJpbmcoZyk6T30sXy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJv''@;'; put 'put ''cigiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzIil9LHVlLmV4cG9ydHM9X30sOTA3MjoodWUsWCx5KT0+e3ZhciBJPXVlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7Zz1nLnRvTG93ZXJDYXNlKCk7dmFyIEI9SVtnXTtpZighQil0aHJvdyBuZXcgRXJyb3IoZysiIGlzIG5v''@;'; put 'put ''dCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKSIpO3JldHVybiBuZXcgQn07SS5zaGE9eSg0NDQ4KSxJLnNoYTE9eSg4MzM2KSxJLnNoYTIyND15KDg0MzIpLEkuc2hhMjU2PXkoNzQ5OSksSS5zaGEzODQ9eSgxNjg2KSxJLnNoYTUxMj15KDc4MTYpfSw0NDQ4Oih1ZSxYLHkp''@;'; put 'put ''PT57dmFyIEk9eSg1NzE3KSxfPXkoNDE4OSksZz15KDk1MDkpLkJ1ZmZlcixCPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1''@;'; put 'put ''bmN0aW9uIEYoTil7cmV0dXJuIE48PDV8Tj4+PjI3fWZ1bmN0aW9uIE8oTil7cmV0dXJuIE48PDMwfE4+Pj4yfWZ1bmN0aW9uIHooTixMLEssVSl7cmV0dXJuIDA9PT1OP0wmS3x+TCZVOjI9PT1OP0wmS3xMJlV8SyZVOkxeS15VfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4pe2Zvcih2YXIgTD10aGlzLl93LEs9MHx0aGlz''@;'; put 'put ''Ll9hLFU9MHx0aGlzLl9iLFc9MHx0aGlzLl9jLFk9MHx0aGlzLl9kLHE9MHx0aGlzLl9lLGVlPTA7ZWU8MTY7KytlZSlMW2VlXT1OLnJlYWRJbnQzMkJFKDQqZWUpO2Zvcig7ZWU8ODA7KytlZSlMW2VlXT1MW2VlLTNdXkxbZWUtOF1eTFtlZS0xNF1eTFtlZS0xNl07Zm9yKHZhciBKPTA7Sjw4''@;'; put 'put ''MDsrK0ope3ZhciBuZT1+fihKLzIwKSxpZT1GKEspK3oobmUsVSxXLFkpK3ErTFtKXStCW25lXXwwO3E9WSxZPVcsVz1PKFUpLFU9SyxLPWllfXRoaXMuX2E9Syt0aGlzLl9hfDAsdGhpcy5fYj1VK3RoaXMuX2J8MCx0aGlzLl9jPVcrdGhpcy5fY3wwLHRoaXMuX2Q9WSt0aGlzLl9kfDAsdGhp''@;'; put 'put ''cy5fZT1xK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTj1nLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTi53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTi53''@;'; put 'put ''cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLE59LHVlLmV4cG9ydHM9UH0sODMzNjoodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDQxODkpLGc9eSg5NTA5KS5CdWZmZXIsQj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4''@;'; put 'put ''LC04OTk0OTc1MTRdLHc9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBGKEwpe3JldHVybiBMPDwxfEw+Pj4zMX1mdW5jdGlvbiBPKEwpe3JldHVybiBMPDw1fEw+Pj4yN31mdW5jdGlvbiB6KEwpe3Jl''@;'; put 'put ''dHVybiBMPDwzMHxMPj4+Mn1mdW5jdGlvbiBOKEwsSyxVLFcpe3JldHVybiAwPT09TD9LJlV8fksmVzoyPT09TD9LJlV8SyZXfFUmVzpLXlVeV31JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRo''@;'; put 'put ''aXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihMKXtmb3IodmFyIEs9dGhpcy5fdyxVPTB8dGhpcy5fYSxXPTB8dGhpcy5fYixZPTB8dGhpcy5fYyxxPTB8dGhpcy5fZCxlZT0wfHRo''@;'; put 'put ''aXMuX2UsSj0wO0o8MTY7KytKKUtbSl09TC5yZWFkSW50MzJCRSg0KkopO2Zvcig7Sjw4MDsrK0opS1tKXT1GKEtbSi0zXV5LW0otOF1eS1tKLTE0XV5LW0otMTZdKTtmb3IodmFyIG5lPTA7bmU8ODA7KytuZSl7dmFyIGllPX5+KG5lLzIwKSxsZT1PKFUpK04oaWUsVyxZLHEpK2VlK0tbbmVd''@;'; put 'put ''K0JbaWVdfDA7ZWU9cSxxPVksWT16KFcpLFc9VSxVPWxlfXRoaXMuX2E9VSt0aGlzLl9hfDAsdGhpcy5fYj1XK3RoaXMuX2J8MCx0aGlzLl9jPVkrdGhpcy5fY3wwLHRoaXMuX2Q9cSt0aGlzLl9kfDAsdGhpcy5fZT1lZSt0aGlzLl9lfDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIEw9Zy5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksTC53cml0ZUludDMyQkUoMHx0aGlz''@;'; put 'put ''Ll9lLDE2KSxMfSx1ZS5leHBvcnRzPVB9LDg0MzI6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg3NDk5KSxnPXkoNDE4OSksQj15KDk1MDkpLkJ1ZmZlcix3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxnLmNhbGwodGhpcyw2NCw1Nil9SShQ''@;'; put 'put ''LF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3''@;'; put 'put ''NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRj1CLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gRi53cml0ZUludDMyQkUodGhpcy5fYSwwKSxGLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2Ms''@;'; put 'put ''OCksRi53cml0ZUludDMyQkUodGhpcy5fZCwxMiksRi53cml0ZUludDMyQkUodGhpcy5fZSwxNiksRi53cml0ZUludDMyQkUodGhpcy5fZiwyMCksRi53cml0ZUludDMyQkUodGhpcy5fZywyNCksRn0sdWUuZXhwb3J0cz1QfSw3NDk5Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoNDE4''@;'; put 'put ''OSksZz15KDk1MDkpLkJ1ZmZlcixCPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIx''@;'; put 'put ''NjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1''@;'; put 'put ''NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3''@;'; put 'put ''MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYx''@;'; put 'put ''ODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBGKFUsVyxZKXtyZXR1cm4gWV5VJihXXlkpfWZ1bmN0aW9u''@;'; put 'put ''IE8oVSxXLFkpe3JldHVybiBVJld8WSYoVXxXKX1mdW5jdGlvbiB6KFUpe3JldHVybihVPj4+MnxVPDwzMCleKFU+Pj4xM3xVPDwxOSleKFU+Pj4yMnxVPDwxMCl9ZnVuY3Rpb24gTihVKXtyZXR1cm4oVT4+PjZ8VTw8MjYpXihVPj4+MTF8VTw8MjEpXihVPj4+MjV8VTw8Nyl9ZnVuY3Rpb24g''@;'; put 'put ''TChVKXtyZXR1cm4oVT4+Pjd8VTw8MjUpXihVPj4+MTh8VTw8MTQpXlU+Pj4zfWZ1bmN0aW9uIEsoVSl7cmV0dXJuKFU+Pj4xN3xVPDwxNSleKFU+Pj4xOXxVPDwxMyleVT4+PjEwfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0''@;'; put 'put ''aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KFUpe2Zvcih2YXIgVz10aGlzLl93LFk9MHx0aGlzLl9hLHE9MHx0aGlzLl9iLGVlPTB8dGhpcy5fYyxKPTB8dGhpcy5fZCxuZT0wfHRoaXMuX2UsaWU9MHx0aGlzLl9mLGxlPTB8dGhpcy5fZyxtZT0wfHRoaXMuX2gsX2U9MDtfZTwxNjsrK19lKVdbX2VdPVUucmVhZEludDMyQkUoNCpfZSk7''@;'; put 'put ''Zm9yKDtfZTw2NDsrK19lKVdbX2VdPUsoV1tfZS0yXSkrV1tfZS03XStMKFdbX2UtMTVdKStXW19lLTE2XXwwO2Zvcih2YXIgVGU9MDtUZTw2NDsrK1RlKXt2YXIgU2U9bWUrTihuZSkrRihuZSxpZSxsZSkrQltUZV0rV1tUZV18MCxqZT16KFkpK08oWSxxLGVlKXwwO21lPWxlLGxlPWllLGll''@;'; put 'put ''PW5lLG5lPUorU2V8MCxKPWVlLGVlPXEscT1ZLFk9U2UramV8MH10aGlzLl9hPVkrdGhpcy5fYXwwLHRoaXMuX2I9cSt0aGlzLl9ifDAsdGhpcy5fYz1lZSt0aGlzLl9jfDAsdGhpcy5fZD1KK3RoaXMuX2R8MCx0aGlzLl9lPW5lK3RoaXMuX2V8MCx0aGlzLl9mPWllK3RoaXMuX2Z8MCx0aGlz''@;'; put 'put ''Ll9nPWxlK3RoaXMuX2d8MCx0aGlzLl9oPW1lK3RoaXMuX2h8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgVT1nLmFsbG9jVW5zYWZlKDMyKTtyZXR1cm4gVS53cml0ZUludDMyQkUodGhpcy5fYSwwKSxVLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLFUud3JpdGVJbnQzMkJF''@;'; put 'put ''KHRoaXMuX2MsOCksVS53cml0ZUludDMyQkUodGhpcy5fZCwxMiksVS53cml0ZUludDMyQkUodGhpcy5fZSwxNiksVS53cml0ZUludDMyQkUodGhpcy5fZiwyMCksVS53cml0ZUludDMyQkUodGhpcy5fZywyNCksVS53cml0ZUludDMyQkUodGhpcy5faCwyOCksVX0sdWUuZXhwb3J0cz1QfSwx''@;'; put 'put ''Njg2Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoNzgxNiksZz15KDQxODkpLEI9eSg5NTA5KS5CdWZmZXIsdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LGcuY2FsbCh0aGlzLDEyOCwxMTIpfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1NDI3MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0x''@;'; put 'put ''MjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYzLHRoaXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0''@;'; put 'put ''MjgsdGhpc30sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRj1CLmFsbG9jVW5zYWZlKDQ4KTtmdW5jdGlvbiBPKHosTixMKXtGLndyaXRlSW50MzJCRSh6LEwpLEYud3JpdGVJbnQzMkJFKE4sTCs0KX1yZXR1cm4gTyh0aGlzLl9haCx0aGlzLl9hbCwwKSxPKHRoaXMuX2JoLHRo''@;'; put 'put ''aXMuX2JsLDgpLE8odGhpcy5fY2gsdGhpcy5fY2wsMTYpLE8odGhpcy5fZGgsdGhpcy5fZGwsMjQpLE8odGhpcy5fZWgsdGhpcy5fZWwsMzIpLE8odGhpcy5fZmgsdGhpcy5fZmwsNDApLEZ9LHVlLmV4cG9ydHM9UH0sNzgxNjoodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDQxODkpLGc9''@;'; put 'put ''eSg5NTA5KS5CdWZmZXIsQj1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3''@;'; put 'put ''MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEw''@;'; put 'put ''Myw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1''@;'; put 'put ''NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2''@;'; put 'put ''OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1''@;'; put 'put ''MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQs''@;'; put 'put ''MzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3''@;'; put 'put ''NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0''@;'; put 'put ''NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTky''@;'; put 'put ''LDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2''@;'; put 'put ''NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHc9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcywxMjgsMTEyKX1m''@;'; put 'put ''dW5jdGlvbiBGKHEsZWUsSil7cmV0dXJuIEpecSYoZWVeSil9ZnVuY3Rpb24gTyhxLGVlLEope3JldHVybiBxJmVlfEomKHF8ZWUpfWZ1bmN0aW9uIHoocSxlZSl7cmV0dXJuKHE+Pj4yOHxlZTw8NCleKGVlPj4+MnxxPDwzMCleKGVlPj4+N3xxPDwyNSl9ZnVuY3Rpb24gTihxLGVlKXtyZXR1''@;'; put 'put ''cm4ocT4+PjE0fGVlPDwxOCleKHE+Pj4xOHxlZTw8MTQpXihlZT4+Pjl8cTw8MjMpfWZ1bmN0aW9uIEwocSxlZSl7cmV0dXJuKHE+Pj4xfGVlPDwzMSleKHE+Pj44fGVlPDwyNClecT4+Pjd9ZnVuY3Rpb24gSyhxLGVlKXtyZXR1cm4ocT4+PjF8ZWU8PDMxKV4ocT4+Pjh8ZWU8PDI0KV4ocT4+''@;'; put 'put ''Pjd8ZWU8PDI1KX1mdW5jdGlvbiBVKHEsZWUpe3JldHVybihxPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxxPDwzKV5xPj4+Nn1mdW5jdGlvbiBXKHEsZWUpe3JldHVybihxPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxxPDwzKV4ocT4+PjZ8ZWU8PDI2KX1mdW5jdGlvbiBZKHEsZWUpe3JldHVybiBx''@;'; put 'put ''Pj4+MDxlZT4+PjA/MTowfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMsdGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRoaXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9m''@;'; put 'put ''aD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5fYmw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2RsPTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1''@;'; put 'put ''MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMyMDksdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihxKXtmb3IodmFyIGVlPXRoaXMuX3csSj0wfHRoaXMuX2FoLG5lPTB8dGhpcy5fYmgsaWU9MHx0aGlzLl9jaCxsZT0wfHRoaXMuX2RoLG1lPTB8dGhp''@;'; put 'put ''cy5fZWgsX2U9MHx0aGlzLl9maCxUZT0wfHRoaXMuX2doLFNlPTB8dGhpcy5faGgsamU9MHx0aGlzLl9hbCxWPTB8dGhpcy5fYmwscD0wfHRoaXMuX2NsLGI9MHx0aGlzLl9kbCx4PTB8dGhpcy5fZWwsQz0wfHRoaXMuX2ZsLFQ9MHx0aGlzLl9nbCxIPTB8dGhpcy5faGwsaj0wO2o8MzI7ais9''@;'; put 'put ''MillZVtqXT1xLnJlYWRJbnQzMkJFKDQqaiksZWVbaisxXT1xLnJlYWRJbnQzMkJFKDQqais0KTtmb3IoO2o8MTYwO2orPTIpe3ZhciBFPWVlW2otMzBdLG09ZWVbai0zMCsxXSxBPUwoRSxtKSxhZT1LKG0sRSksdGU9VShFPWVlW2otNF0sbT1lZVtqLTQrMV0pLHNlPVcobSxFKSxKZT1lZVtq''@;'; put 'put ''LTMyXSxvdD1lZVtqLTMyKzFdLHhlPWFlK2VlW2otMTQrMV18MCx2ZT1BK2VlW2otMTRdK1koeGUsYWUpfDA7dmU9KHZlPXZlK3RlK1koeGU9eGUrc2V8MCxzZSl8MCkrSmUrWSh4ZT14ZStvdHwwLG90KXwwLGVlW2pdPXZlLGVlW2orMV09eGV9Zm9yKHZhciBYZT0wO1hlPDE2MDtYZSs9Mil7''@;'; put 'put ''dmU9ZWVbWGVdLHhlPWVlW1hlKzFdO3ZhciB6ZT1PKEosbmUsaWUpLERlPU8oamUsVixwKSxGZT16KEosamUpLE9lPXooamUsSiksSWU9TihtZSx4KSxWZT1OKHgsbWUpLGtlPUJbWGVdLEFlPUJbWGUrMV0sX3Q9RihtZSxfZSxUZSksbnQ9Rih4LEMsVCksUWU9SCtWZXwwLHVuPVNlK0llK1ko''@;'; put 'put ''UWUsSCl8MDt1bj0odW49KHVuPXVuK190K1koUWU9UWUrbnR8MCxudCl8MCkra2UrWShRZT1RZStBZXwwLEFlKXwwKSt2ZStZKFFlPVFlK3hlfDAseGUpfDA7dmFyIHl0PU9lK0RlfDAsTXQ9RmUremUrWSh5dCxPZSl8MDtTZT1UZSxIPVQsVGU9X2UsVD1DLF9lPW1lLEM9eCxtZT1sZSt1bitZ''@;'; put 'put ''KHg9YitRZXwwLGIpfDAsbGU9aWUsYj1wLGllPW5lLHA9VixuZT1KLFY9amUsSj11bitNdCtZKGplPVFlK3l0fDAsUWUpfDB9dGhpcy5fYWw9dGhpcy5fYWwramV8MCx0aGlzLl9ibD10aGlzLl9ibCtWfDAsdGhpcy5fY2w9dGhpcy5fY2wrcHwwLHRoaXMuX2RsPXRoaXMuX2RsK2J8MCx0aGlz''@;'; put 'put ''Ll9lbD10aGlzLl9lbCt4fDAsdGhpcy5fZmw9dGhpcy5fZmwrQ3wwLHRoaXMuX2dsPXRoaXMuX2dsK1R8MCx0aGlzLl9obD10aGlzLl9obCtIfDAsdGhpcy5fYWg9dGhpcy5fYWgrSitZKHRoaXMuX2FsLGplKXwwLHRoaXMuX2JoPXRoaXMuX2JoK25lK1kodGhpcy5fYmwsVil8MCx0aGlzLl9j''@;'; put 'put ''aD10aGlzLl9jaCtpZStZKHRoaXMuX2NsLHApfDAsdGhpcy5fZGg9dGhpcy5fZGgrbGUrWSh0aGlzLl9kbCxiKXwwLHRoaXMuX2VoPXRoaXMuX2VoK21lK1kodGhpcy5fZWwseCl8MCx0aGlzLl9maD10aGlzLl9maCtfZStZKHRoaXMuX2ZsLEMpfDAsdGhpcy5fZ2g9dGhpcy5fZ2grVGUrWSh0''@;'; put 'put ''aGlzLl9nbCxUKXwwLHRoaXMuX2hoPXRoaXMuX2hoK1NlK1kodGhpcy5faGwsSCl8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgcT1nLmFsbG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBlZShKLG5lLGllKXtxLndyaXRlSW50MzJCRShKLGllKSxxLndyaXRlSW50MzJCRShuZSxp''@;'; put 'put ''ZSs0KX1yZXR1cm4gZWUodGhpcy5fYWgsdGhpcy5fYWwsMCksZWUodGhpcy5fYmgsdGhpcy5fYmwsOCksZWUodGhpcy5fY2gsdGhpcy5fY2wsMTYpLGVlKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxlZSh0aGlzLl9laCx0aGlzLl9lbCwzMiksZWUodGhpcy5fZmgsdGhpcy5fZmwsNDApLGVlKHRo''@;'; put 'put ''aXMuX2doLHRoaXMuX2dsLDQ4KSxlZSh0aGlzLl9oaCx0aGlzLl9obCw1NikscX0sdWUuZXhwb3J0cz1QfSwyODMwOih1ZSxYLHkpPT57dWUuZXhwb3J0cz1nO3ZhciBJPXkoNzE4NykuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIGcoKXtJLmNhbGwodGhpcyl9eSg1NzE3KShnLEkpLGcuUmVhZGFi''@;'; put 'put ''bGU9eSg5NDgxKSxnLldyaXRhYmxlPXkoNDIyOSksZy5EdXBsZXg9eSg2NzUzKSxnLlRyYW5zZm9ybT15KDQ2MDUpLGcuUGFzc1Rocm91Z2g9eSgyNzI1KSxnLmZpbmlzaGVkPXkoODYxMCksZy5waXBlbGluZT15KDk5NDYpLGcuU3RyZWFtPWcsZy5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihC''@;'; put 'put ''LHcpe3ZhciBQPXRoaXM7ZnVuY3Rpb24gRihXKXtCLndyaXRhYmxlJiYhMT09PUIud3JpdGUoVykmJlAucGF1c2UmJlAucGF1c2UoKX1mdW5jdGlvbiBPKCl7UC5yZWFkYWJsZSYmUC5yZXN1bWUmJlAucmVzdW1lKCl9UC5vbigiZGF0YSIsRiksQi5vbigiZHJhaW4iLE8pLCFCLl9pc1N0ZGlv''@;'; put 'put ''JiYoIXd8fCExIT09dy5lbmQpJiYoUC5vbigiZW5kIixOKSxQLm9uKCJjbG9zZSIsTCkpO3ZhciB6PSExO2Z1bmN0aW9uIE4oKXt6fHwoej0hMCxCLmVuZCgpKX1mdW5jdGlvbiBMKCl7enx8KHo9ITAsImZ1bmN0aW9uIj09dHlwZW9mIEIuZGVzdHJveSYmQi5kZXN0cm95KCkpfWZ1bmN0aW9u''@;'; put 'put ''IEsoVyl7aWYoVSgpLDA9PT1JLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyBXfWZ1bmN0aW9uIFUoKXtQLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixGKSxCLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsTyksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixOKSxQLnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KCJjbG9zZSIsTCksUC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEspLEIucmVtb3ZlTGlzdGVuZXIoImVycm9yIixLKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFUpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVKSxCLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsVSl9cmV0dXJuIFAub24oImVy''@;'; put 'put ''cm9yIixLKSxCLm9uKCJlcnJvciIsSyksUC5vbigiZW5kIixVKSxQLm9uKCJjbG9zZSIsVSksQi5vbigiY2xvc2UiLFUpLEIuZW1pdCgicGlwZSIsUCksQn19LDI1NTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz1JLmlzRW5jb2Rpbmd8fGZ1bmN0aW9u''@;'; put 'put ''KEope3N3aXRjaCgoSj0iIitKKSYmSi50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNl''@;'; put 'put ''InJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIHcoSil7dmFyIG5lO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIEIoSil7dmFyIG5lPWZ1bmN0aW9uIGcoSil7aWYoIUopcmV0dXJuInV0ZjgiO2Zvcih2YXIgbmU7Oylzd2l0Y2goSil7Y2FzZSJ1dGY4Ijpj''@;'; put 'put ''YXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhl''@;'; put 'put ''eCI6cmV0dXJuIEo7ZGVmYXVsdDppZihuZSlyZXR1cm47Sj0oIiIrSikudG9Mb3dlckNhc2UoKSxuZT0hMH19KEopO2lmKCJzdHJpbmciIT10eXBlb2YgbmUmJihJLmlzRW5jb2Rpbmc9PT1ffHwhXyhKKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0opO3JldHVybiBu''@;'; put 'put ''ZXx8Sn0oSiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9Syx0aGlzLmVuZD1VLG5lPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXosbmU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PVcsdGhpcy5lbmQ9WSxuZT0zO2JyZWFrO2RlZmF1bHQ6''@;'; put 'put ''cmV0dXJuIHRoaXMud3JpdGU9cSx2b2lkKHRoaXMuZW5kPWVlKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPUkuYWxsb2NVbnNhZmUobmUpfWZ1bmN0aW9uIFAoSil7cmV0dXJuIEo8PTEyNz8wOko+PjU9PTY/MjpKPj40PT0xND8zOko+PjM9PTMwPzQ6''@;'; put 'put ''Sj4+Nj09Mj8tMTotMn1mdW5jdGlvbiB6KEope3ZhciBuZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLGllPWZ1bmN0aW9uIE8oSixuZSxpZSl7aWYoMTI4IT0oMTkyJm5lWzBdKSlyZXR1cm4gSi5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MSYmbmUubGVuZ3RoPjEp''@;'; put 'put ''e2lmKDEyOCE9KDE5MiZuZVsxXSkpcmV0dXJuIEoubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjImJm5lLmxlbmd0aD4yJiYxMjghPSgxOTImbmVbMl0pKXJldHVybiBKLmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlzLEopO3JldHVybiB2b2lkIDAhPT1pZT9pZTp0aGlzLmxh''@;'; put 'put ''c3ROZWVkPD1KLmxlbmd0aD8oSi5jb3B5KHRoaXMubGFzdENoYXIsbmUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihKLmNvcHkodGhpcy5sYXN0Q2hhcixuZSwwLEoubGVuZ3RoKSx2b2lkKHRoaXMubGFz''@;'; put 'put ''dE5lZWQtPUoubGVuZ3RoKSl9ZnVuY3Rpb24gSyhKLG5lKXtpZigoSi5sZW5ndGgtbmUpJTI9PTApe3ZhciBpZT1KLnRvU3RyaW5nKCJ1dGYxNmxlIixuZSk7aWYoaWUpe3ZhciBsZT1pZS5jaGFyQ29kZUF0KGllLmxlbmd0aC0xKTtpZihsZT49NTUyOTYmJmxlPD01NjMxOSlyZXR1cm4gdGhp''@;'; put 'put ''cy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSxpZS5zbGljZSgwLC0xKX1yZXR1cm4gaWV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFz''@;'; put 'put ''dENoYXJbMF09SltKLmxlbmd0aC0xXSxKLnRvU3RyaW5nKCJ1dGYxNmxlIixuZSxKLmxlbmd0aC0xKX1mdW5jdGlvbiBVKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP25lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUi''@;'; put 'put ''LDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6bmV9ZnVuY3Rpb24gVyhKLG5lKXt2YXIgaWU9KEoubGVuZ3RoLW5lKSUzO3JldHVybiAwPT09aWU/Si50b1N0cmluZygiYmFzZTY0IixuZSk6KHRoaXMubGFzdE5lZWQ9My1pZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1pZT90aGlzLmxh''@;'; put 'put ''c3RDaGFyWzBdPUpbSi5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0pLEoudG9TdHJpbmcoImJhc2U2NCIsbmUsSi5sZW5ndGgtaWUpKX1mdW5jdGlvbiBZKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndy''@;'; put 'put ''aXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP25lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOm5lfWZ1bmN0aW9uIHEoSil7cmV0dXJuIEoudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEomJkoubGVu''@;'; put 'put ''Z3RoP3RoaXMud3JpdGUoSik6IiJ9WC5zPXcsdy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSil7aWYoMD09PUoubGVuZ3RoKXJldHVybiIiO3ZhciBuZSxpZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0obmU9dGhpcy5maWxsTGFzdChKKSkpcmV0dXJuIiI7aWU9dGhpcy5sYXN0''@;'; put 'put ''TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBpZT0wO3JldHVybiBpZTxKLmxlbmd0aD9uZT9uZSt0aGlzLnRleHQoSixpZSk6dGhpcy50ZXh0KEosaWUpOm5lfHwiIn0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIEwoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0''@;'; put 'put ''dXJuIHRoaXMubGFzdE5lZWQ/bmUrIlx1ZmZmZCI6bmV9LHcucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24gTihKLG5lKXt2YXIgaWU9ZnVuY3Rpb24gRihKLG5lLGllKXt2YXIgbGU9bmUubGVuZ3RoLTE7aWYobGU8aWUpcmV0dXJuIDA7dmFyIG1lPVAobmVbbGVdKTtyZXR1cm4gbWU+PTA/KG1l''@;'; put 'put ''PjAmJihKLmxhc3ROZWVkPW1lLTEpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1lPVAobmVbbGVdKSk+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTIpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1lPVAobmVbbGVdKSk+PTA/KG1lPjAmJigyPT09bWU/bWU9MDpKLmxhc3ROZWVkPW1lLTMp''@;'; put 'put ''LG1lKTowfSh0aGlzLEosbmUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBKLnRvU3RyaW5nKCJ1dGY4IixuZSk7dGhpcy5sYXN0VG90YWw9aWU7dmFyIGxlPUoubGVuZ3RoLShpZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsMCxsZSksSi50b1N0cmluZygi''@;'; put 'put ''dXRmOCIsbmUsbGUpfSx3LnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihKKXtpZih0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aClyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9T''@;'; put 'put ''dHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsSi5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPUoubGVuZ3RofX0sNzg1NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXko''@;'; put 'put ''MzY4OSksXz15KDQ1NjQpLGc9eSg3NTIpLEI9eSgyMjI0KS55LHc9eSg1NzYxKS5tLFA9eSg4OTcxKS5VLEY9eSg3NjUyKSxPPXkoNDU2KSx7ZnJvbUNhbGxiYWNrOnp9PXkoNzA0MSkse2dldEN1c3RvbUluc3BlY3RTeW1ib2w6Tn09eSgxMjY5KSxMPS9eW1x4MjFceDIzLVx4MkJceDJELVx4''@;'; put 'put ''M0FceDNDLVx4NUJceDVELVx4N0VdKyQvLEs9L1tceDAwLVx4MUZdLyxVPVsiXG4iLCJcciIsIlwwIl0sVz0vW1x4MjAtXHgzQVx4M0MtXHg3RV0rLyxZPS9bXHgwOVx4MjAtXHgyRlx4M0ItXHg0MFx4NUItXHg2MFx4N0ItXHg3RV0vLHE9e2phbjowLGZlYjoxLG1hcjoyLGFwcjozLG1heTo0''@;'; put 'put ''LGp1bjo1LGp1bDo2LGF1Zzo3LHNlcDo4LG9jdDo5LG5vdjoxMCxkZWM6MTF9LGVlPTIxNDc0ODM2NDdlMyxuZT0nSW52YWxpZCBzYW1lU2l0ZUNvbnRleHQgb3B0aW9uIGZvciBnZXRDb29raWVzKCk7IGV4cGVjdGVkIG9uZSBvZiAic3RyaWN0IiwgImxheCIsIG9yICJub25lIic7ZnVuY3Rp''@;'; put 'put ''b24gaWUoemUpe0YudmFsaWRhdGUoRi5pc05vbkVtcHR5U3RyaW5nKHplKSx6ZSk7Y29uc3QgRGU9U3RyaW5nKHplKS50b0xvd2VyQ2FzZSgpO3JldHVybiJub25lIj09PURlfHwibGF4Ij09PURlfHwic3RyaWN0Ij09PURlP0RlOm51bGx9Y29uc3QgbGU9T2JqZWN0LmZyZWV6ZSh7U0lMRU5U''@;'; put 'put ''OiJzaWxlbnQiLFNUUklDVDoic3RyaWN0IixESVNBQkxFRDoidW5zYWZlLWRpc2FibGVkIn0pLG1lPS8oPzpeKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M30kKXwoPzpeKD86KD86W2EtZlxk''@;'; put 'put ''XXsxLDR9Oil7N30oPzpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXw6W2EtZlxkXXsxLDR9fDopfCg/OlthLWZcZF17''@;'; put 'put ''MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsMn18Oil8KD86W2EtZlxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZlxkXXsxLDR9KXsw''@;'; put 'put ''LDF9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsM318Oil8KD86W2EtZlxkXXsxLDR9Oil7M30oPzooPzo6W2EtZlxkXXsxLDR9KXswLDJ9Oig/OjI1''@;'; put 'put ''WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7Mn0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18Mlsw''@;'; put 'put ''LTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNX18Oil8KD86W2EtZlxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxk''@;'; put 'put ''XGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNn18Oil8KD86Oig/Oig/OjpbYS1mXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVb''@;'; put 'put ''MC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw3fXw6KSkpJCkvLF9lPSJcblxcWz8oPzpcbig/OlthLWZBLUZcXGRdezEsNH06KXs3fSg/OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Nn0oPzooPzoyNVsw''@;'; put 'put ''LTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fDpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRc''@;'; put 'put ''XGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsMn18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwxfTooPzoyNVswLTVd''@;'; put 'put ''fDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDN9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezN9KD86KD86OlthLWZBLUZcXGRdezEsNH0p''@;'; put 'put ''ezAsMn06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsyfSg/Oig/Ojpb''@;'; put 'put ''YS1mQS1GXFxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNX18Oil8XG4oPzpbYS1mQS1GXFxkXXsx''@;'; put 'put ''LDR9Oil7MX0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDZ9fDopfFxu''@;'; put 'put ''KD86Oig/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsN318OikpXG4pKD86''@;'; put 'put ''JVswLTlhLXpBLVpdezEsfSk/XFxdP1xuIi5yZXBsYWNlKC9ccypcL1wvLiokL2dtLCIiKS5yZXBsYWNlKC9cbi9nLCIiKS50cmltKCksVGU9bmV3IFJlZ0V4cChgXiR7X2V9JGApO2Z1bmN0aW9uIFNlKHplLERlLEZlLE9lKXtsZXQgSWU9MDtmb3IoO0llPHplLmxlbmd0aDspe2NvbnN0IFZl''@;'; put 'put ''PXplLmNoYXJDb2RlQXQoSWUpO2lmKFZlPD00N3x8VmU+PTU4KWJyZWFrO0llKyt9cmV0dXJuIEllPERlfHxJZT5GZXx8IU9lJiZJZSE9emUubGVuZ3RoP251bGw6cGFyc2VJbnQoemUuc3Vic3RyKDAsSWUpLDEwKX1mdW5jdGlvbiBqZSh6ZSl7Y29uc3QgRGU9emUuc3BsaXQoIjoiKSxGZT1b''@;'; put 'put ''MCwwLDBdO2lmKDMhPT1EZS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKGxldCBPZT0wO09lPDM7T2UrKyl7Y29uc3QgVmU9U2UoRGVbT2VdLDEsMiwyPT1PZSk7aWYobnVsbD09PVZlKXJldHVybiBudWxsO0ZlW09lXT1WZX1yZXR1cm4gRmV9ZnVuY3Rpb24gVih6ZSl7emU9U3RyaW5nKHplKS5z''@;'; put 'put ''dWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpO2NvbnN0IERlPXFbemVdO3JldHVybiBEZT49MD9EZTpudWxsfWZ1bmN0aW9uIHAoemUpe2lmKCF6ZSlyZXR1cm47Y29uc3QgRGU9emUuc3BsaXQoWSk7aWYoIURlKXJldHVybjtsZXQgRmU9bnVsbCxPZT1udWxsLEllPW51bGwsVmU9bnVsbCxrZT1u''@;'; put 'put ''dWxsLEFlPW51bGw7Zm9yKGxldCBfdD0wO190PERlLmxlbmd0aDtfdCsrKXtjb25zdCBudD1EZVtfdF0udHJpbSgpO2lmKCFudC5sZW5ndGgpY29udGludWU7bGV0IFFlO251bGw9PT1JZSYmKFFlPWplKG50KSxRZSk/KEZlPVFlWzBdLE9lPVFlWzFdLEllPVFlWzJdKTpudWxsIT09VmV8fChR''@;'; put 'put ''ZT1TZShudCwxLDIsITApLG51bGw9PT1RZSk/bnVsbCE9PWtlfHwoUWU9VihudCksbnVsbD09PVFlKT9udWxsPT09QWUmJihRZT1TZShudCwyLDQsITApLG51bGwhPT1RZSYmKEFlPVFlLEFlPj03MCYmQWU8PTk5P0FlKz0xOTAwOkFlPj0wJiZBZTw9NjkmJihBZSs9MmUzKSkpOmtlPVFlOlZl''@;'; put 'put ''PVFlfXJldHVybiBudWxsPT09VmV8fG51bGw9PT1rZXx8bnVsbD09PUFlfHxudWxsPT09SWV8fFZlPDF8fFZlPjMxfHxBZTwxNjAxfHxGZT4yM3x8T2U+NTl8fEllPjU5P3ZvaWQgMDpuZXcgRGF0ZShEYXRlLlVUQyhBZSxrZSxWZSxGZSxPZSxJZSkpfWZ1bmN0aW9uIGIoemUpe3JldHVybiBG''@;'; put 'put ''LnZhbGlkYXRlKEYuaXNEYXRlKHplKSx6ZSksemUudG9VVENTdHJpbmcoKX1mdW5jdGlvbiB4KHplKXtyZXR1cm4gbnVsbD09emU/bnVsbDooemU9emUudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpLFRlLnRlc3QoemUpJiYoemU9emUucmVwbGFjZSgiWyIsIiIpLnJlcGxhY2UoIl0iLCIiKSks''@;'; put 'put ''SSYmL1teXHUwMDAxLVx1MDA3Zl0vLnRlc3QoemUpJiYoemU9SS50b0FTQ0lJKHplKSksemUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gQyh6ZSxEZSxGZSl7aWYobnVsbD09emV8fG51bGw9PURlKXJldHVybiBudWxsO2lmKCExIT09RmUmJih6ZT14KHplKSxEZT14KERlKSksemU9PURlKXJl''@;'; put 'put ''dHVybiEwO2NvbnN0IE9lPXplLmxhc3RJbmRleE9mKERlKTtyZXR1cm4hKE9lPD0wfHx6ZS5sZW5ndGghPT1EZS5sZW5ndGgrT2V8fCIuIiE9PXplLnN1YnN0cihPZS0xLDEpfHxtZS50ZXN0KHplKSl9ZnVuY3Rpb24gVCh6ZSl7aWYoIXplfHwiLyIhPT16ZS5zdWJzdHIoMCwxKSlyZXR1cm4i''@;'; put 'put ''LyI7aWYoIi8iPT09emUpcmV0dXJuIHplO2NvbnN0IERlPXplLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIDA9PT1EZT8iLyI6emUuc2xpY2UoMCxEZSl9ZnVuY3Rpb24gRSh6ZSxEZSl7aWYoKCFEZXx8Im9iamVjdCIhPXR5cGVvZiBEZSkmJihEZT17fSksRi5pc0VtcHR5U3RyaW5nKHplKXx8''@;'; put 'put ''IUYuaXNTdHJpbmcoemUpKXJldHVybiBudWxsO2NvbnN0IEZlPSh6ZT16ZS50cmltKCkpLmluZGV4T2YoIjsiKSxJZT1mdW5jdGlvbiBqKHplLERlKXt6ZT1mdW5jdGlvbiBIKHplKXtpZihGLmlzRW1wdHlTdHJpbmcoemUpKXJldHVybiB6ZTtmb3IobGV0IERlPTA7RGU8VS5sZW5ndGg7RGUr''@;'; put 'put ''Kyl7Y29uc3QgRmU9emUuaW5kZXhPZihVW0RlXSk7LTEhPT1GZSYmKHplPXplLnN1YnN0cigwLEZlKSl9cmV0dXJuIHplfSh6ZSksRi52YWxpZGF0ZShGLmlzU3RyaW5nKHplKSx6ZSk7bGV0IE9lLEllLEZlPXplLmluZGV4T2YoIj0iKTtpZihEZSkwPT09RmUmJihGZT0oemU9emUuc3Vic3Ry''@;'; put 'put ''KDEpKS5pbmRleE9mKCI9IikpO2Vsc2UgaWYoRmU8PTApcmV0dXJuO2lmKEZlPD0wPyhPZT0iIixJZT16ZS50cmltKCkpOihPZT16ZS5zdWJzdHIoMCxGZSkudHJpbSgpLEllPXplLnN1YnN0cihGZSsxKS50cmltKCkpLEsudGVzdChPZSl8fEsudGVzdChJZSkpcmV0dXJuO2NvbnN0IFZlPW5l''@;'; put 'put ''dyBvdDtyZXR1cm4gVmUua2V5PU9lLFZlLnZhbHVlPUllLFZlfSgtMT09PUZlP3plOnplLnN1YnN0cigwLEZlKSwhIURlLmxvb3NlKTtpZighSWUpcmV0dXJuO2lmKC0xPT09RmUpcmV0dXJuIEllO2NvbnN0IFZlPXplLnNsaWNlKEZlKzEpLnRyaW0oKTtpZigwPT09VmUubGVuZ3RoKXJldHVy''@;'; put 'put ''biBJZTtjb25zdCBrZT1WZS5zcGxpdCgiOyIpO2Zvcig7a2UubGVuZ3RoOyl7Y29uc3QgQWU9a2Uuc2hpZnQoKS50cmltKCk7aWYoMD09PUFlLmxlbmd0aCljb250aW51ZTtjb25zdCBfdD1BZS5pbmRleE9mKCI9Iik7bGV0IG50LFFlO3N3aXRjaCgtMT09PV90PyhudD1BZSxRZT1udWxsKToo''@;'; put 'put ''bnQ9QWUuc3Vic3RyKDAsX3QpLFFlPUFlLnN1YnN0cihfdCsxKSksbnQ9bnQudHJpbSgpLnRvTG93ZXJDYXNlKCksUWUmJihRZT1RZS50cmltKCkpLG50KXtjYXNlImV4cGlyZXMiOmlmKFFlKXtjb25zdCB5dD1wKFFlKTt5dCYmKEllLmV4cGlyZXM9eXQpfWJyZWFrO2Nhc2UibWF4LWFnZSI6''@;'; put 'put ''aWYoUWUmJi9eLT9bMC05XSskLy50ZXN0KFFlKSl7Y29uc3QgeXQ9cGFyc2VJbnQoUWUsMTApO0llLnNldE1heEFnZSh5dCl9YnJlYWs7Y2FzZSJkb21haW4iOmlmKFFlKXtjb25zdCB5dD1RZS50cmltKCkucmVwbGFjZSgvXlwuLywiIik7eXQmJihJZS5kb21haW49eXQudG9Mb3dlckNhc2Uo''@;'; put 'put ''KSl9YnJlYWs7Y2FzZSJwYXRoIjpJZS5wYXRoPVFlJiYiLyI9PT1RZVswXT9RZTpudWxsO2JyZWFrO2Nhc2Uic2VjdXJlIjpJZS5zZWN1cmU9ITA7YnJlYWs7Y2FzZSJodHRwb25seSI6SWUuaHR0cE9ubHk9ITA7YnJlYWs7Y2FzZSJzYW1lc2l0ZSI6c3dpdGNoKFFlP1FlLnRvTG93ZXJDYXNl''@;'; put 'put ''KCk6IiIpe2Nhc2Uic3RyaWN0IjpJZS5zYW1lU2l0ZT0ic3RyaWN0IjticmVhaztjYXNlImxheCI6SWUuc2FtZVNpdGU9ImxheCI7YnJlYWs7Y2FzZSJub25lIjpJZS5zYW1lU2l0ZT0ibm9uZSI7YnJlYWs7ZGVmYXVsdDpJZS5zYW1lU2l0ZT12b2lkIDB9YnJlYWs7ZGVmYXVsdDpJZS5leHRl''@;'; put 'put ''bnNpb25zPUllLmV4dGVuc2lvbnN8fFtdLEllLmV4dGVuc2lvbnMucHVzaChBZSl9fXJldHVybiBJZX1mdW5jdGlvbiBhZSh6ZSl7bGV0IERlO3RyeXtEZT1KU09OLnBhcnNlKHplKX1jYXRjaChGZSl7cmV0dXJuIEZlfXJldHVybiBEZX1mdW5jdGlvbiB0ZSh6ZSl7aWYoIXplfHxGLmlzRW1w''@;'; put 'put ''dHlTdHJpbmcoemUpKXJldHVybiBudWxsO2xldCBEZTtpZigic3RyaW5nIj09dHlwZW9mIHplKXtpZihEZT1hZSh6ZSksRGUgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbnVsbH1lbHNlIERlPXplO2NvbnN0IEZlPW5ldyBvdDtmb3IobGV0IE9lPTA7T2U8b3Quc2VyaWFsaXphYmxlUHJvcGVy''@;'; put 'put ''dGllcy5sZW5ndGg7T2UrKyl7Y29uc3QgSWU9b3Quc2VyaWFsaXphYmxlUHJvcGVydGllc1tPZV07dm9pZCAwPT09RGVbSWVdfHxEZVtJZV09PT1KZVtJZV18fChGZVtJZV09ImV4cGlyZXMiPT09SWV8fCJjcmVhdGlvbiI9PT1JZXx8Imxhc3RBY2Nlc3NlZCI9PT1JZT9udWxsPT09RGVbSWVd''@;'; put 'put ''P251bGw6IkluZmluaXR5Ij09RGVbSWVdPyJJbmZpbml0eSI6bmV3IERhdGUoRGVbSWVdKTpEZVtJZV0pfXJldHVybiBGZX1mdW5jdGlvbiBzZSh6ZSxEZSl7Ri52YWxpZGF0ZShGLmlzT2JqZWN0KHplKSx6ZSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KERlKSxEZSk7bGV0IEZlPTA7cmV0dXJu''@;'; put 'put ''IEZlPShEZS5wYXRoP0RlLnBhdGgubGVuZ3RoOjApLSh6ZS5wYXRoP3plLnBhdGgubGVuZ3RoOjApLDAhPT1GZXx8KEZlPSh6ZS5jcmVhdGlvbj96ZS5jcmVhdGlvbi5nZXRUaW1lKCk6ZWUpLShEZS5jcmVhdGlvbj9EZS5jcmVhdGlvbi5nZXRUaW1lKCk6ZWUpLDAhPT1GZXx8KEZlPXplLmNy''@;'; put 'put ''ZWF0aW9uSW5kZXgtRGUuY3JlYXRpb25JbmRleCkpLEZlfWZ1bmN0aW9uIFVlKHplKXtpZih6ZSBpbnN0YW5jZW9mIE9iamVjdClyZXR1cm4gemU7dHJ5e3plPWRlY29kZVVSSSh6ZSl9Y2F0Y2h7fXJldHVybiBfKHplKX1jb25zdCBKZT17a2V5OiIiLHZhbHVlOiIiLGV4cGlyZXM6IkluZmlu''@;'; put 'put ''aXR5IixtYXhBZ2U6bnVsbCxkb21haW46bnVsbCxwYXRoOm51bGwsc2VjdXJlOiExLGh0dHBPbmx5OiExLGV4dGVuc2lvbnM6bnVsbCxob3N0T25seTpudWxsLHBhdGhJc0RlZmF1bHQ6bnVsbCxjcmVhdGlvbjpudWxsLGxhc3RBY2Nlc3NlZDpudWxsLHNhbWVTaXRlOnZvaWQgMH07Y2xhc3Mg''@;'; put 'put ''b3R7Y29uc3RydWN0b3IoRGU9e30pe2NvbnN0IEZlPU4oKTtGZSYmKHRoaXNbRmVdPXRoaXMuaW5zcGVjdCksT2JqZWN0LmFzc2lnbih0aGlzLEplLERlKSx0aGlzLmNyZWF0aW9uPXRoaXMuY3JlYXRpb258fG5ldyBEYXRlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjcmVhdGlvbklu''@;'; put 'put ''ZGV4Iix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6KytvdC5jb29raWVzQ3JlYXRlZH0pfWluc3BlY3QoKXtjb25zdCBEZT1EYXRlLm5vdygpLEZlPW51bGwhPXRoaXMuaG9zdE9ubHk/dGhpcy5ob3N0T25seToiPyIsT2U9dGhpcy5jcmVhdGlvbj9E''@;'; put 'put ''ZS10aGlzLmNyZWF0aW9uLmdldFRpbWUoKSsibXMiOiI/IixJZT10aGlzLmxhc3RBY2Nlc3NlZD9EZS10aGlzLmxhc3RBY2Nlc3NlZC5nZXRUaW1lKCkrIm1zIjoiPyI7cmV0dXJuYENvb2tpZT0iJHt0aGlzLnRvU3RyaW5nKCl9OyBob3N0T25seT0ke0ZlfTsgYUFnZT0ke0llfTsgY0FnZT0k''@;'; put 'put ''e09lfSJgfXRvSlNPTigpe2NvbnN0IERlPXt9O2Zvcihjb25zdCBGZSBvZiBvdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzKXRoaXNbRmVdIT09SmVbRmVdJiYoImV4cGlyZXMiPT09RmV8fCJjcmVhdGlvbiI9PT1GZXx8Imxhc3RBY2Nlc3NlZCI9PT1GZT9EZVtGZV09bnVsbD09PXRoaXNbRmVd''@;'; put 'put ''P251bGw6IkluZmluaXR5Ij09dGhpc1tGZV0/IkluZmluaXR5Ijp0aGlzW0ZlXS50b0lTT1N0cmluZygpOiJtYXhBZ2UiPT09RmU/bnVsbCE9PXRoaXNbRmVdJiYoRGVbRmVdPXRoaXNbRmVdPT0xLzB8fHRoaXNbRmVdPT0tMS8wP3RoaXNbRmVdLnRvU3RyaW5nKCk6dGhpc1tGZV0pOnRoaXNb''@;'; put 'put ''RmVdIT09SmVbRmVdJiYoRGVbRmVdPXRoaXNbRmVdKSk7cmV0dXJuIERlfWNsb25lKCl7cmV0dXJuIHRlKHRoaXMudG9KU09OKCkpfXZhbGlkYXRlKCl7aWYoIUwudGVzdCh0aGlzLnZhbHVlKXx8dGhpcy5leHBpcmVzIT0xLzAmJiEodGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZSkmJiFw''@;'; put 'put ''KHRoaXMuZXhwaXJlcyl8fG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZTw9MHx8bnVsbCE9dGhpcy5wYXRoJiYhVy50ZXN0KHRoaXMucGF0aCkpcmV0dXJuITE7Y29uc3QgRGU9dGhpcy5jZG9tYWluKCk7cmV0dXJuIShEZSYmKERlLm1hdGNoKC9cLiQvKXx8bnVsbD09Zy5nZXRQdWJs''@;'; put 'put ''aWNTdWZmaXgoRGUpKSl9c2V0RXhwaXJlcyhEZSl7dGhpcy5leHBpcmVzPURlIGluc3RhbmNlb2YgRGF0ZT9EZTpwKERlKXx8IkluZmluaXR5In1zZXRNYXhBZ2UoRGUpe3RoaXMubWF4QWdlPURlPT09MS8wfHxEZT09PS0xLzA/RGUudG9TdHJpbmcoKTpEZX1jb29raWVTdHJpbmcoKXtsZXQg''@;'; put 'put ''RGU9dGhpcy52YWx1ZTtyZXR1cm4gbnVsbD09RGUmJihEZT0iIiksIiI9PT10aGlzLmtleT9EZTpgJHt0aGlzLmtleX09JHtEZX1gfXRvU3RyaW5nKCl7bGV0IERlPXRoaXMuY29va2llU3RyaW5nKCk7aWYodGhpcy5leHBpcmVzIT0xLzAmJih0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRl''@;'; put 'put ''P0RlKz1gOyBFeHBpcmVzPSR7Yih0aGlzLmV4cGlyZXMpfWA6RGUrPWA7IEV4cGlyZXM9JHt0aGlzLmV4cGlyZXN9YCksbnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlIT0xLzAmJihEZSs9YDsgTWF4LUFnZT0ke3RoaXMubWF4QWdlfWApLHRoaXMuZG9tYWluJiYhdGhpcy5ob3N0T25s''@;'; put 'put ''eSYmKERlKz1gOyBEb21haW49JHt0aGlzLmRvbWFpbn1gKSx0aGlzLnBhdGgmJihEZSs9YDsgUGF0aD0ke3RoaXMucGF0aH1gKSx0aGlzLnNlY3VyZSYmKERlKz0iOyBTZWN1cmUiKSx0aGlzLmh0dHBPbmx5JiYoRGUrPSI7IEh0dHBPbmx5IiksdGhpcy5zYW1lU2l0ZSYmIm5vbmUiIT09dGhp''@;'; put 'put ''cy5zYW1lU2l0ZSl7Y29uc3QgRmU9b3Quc2FtZVNpdGVDYW5vbmljYWxbdGhpcy5zYW1lU2l0ZS50b0xvd2VyQ2FzZSgpXTtEZSs9YDsgU2FtZVNpdGU9JHtGZXx8dGhpcy5zYW1lU2l0ZX1gfXJldHVybiB0aGlzLmV4dGVuc2lvbnMmJnRoaXMuZXh0ZW5zaW9ucy5mb3JFYWNoKEZlPT57RGUr''@;'; put 'put ''PWA7ICR7RmV9YH0pLERlfVRUTChEZSl7aWYobnVsbCE9dGhpcy5tYXhBZ2UpcmV0dXJuIHRoaXMubWF4QWdlPD0wPzA6MWUzKnRoaXMubWF4QWdlO2xldCBGZT10aGlzLmV4cGlyZXM7cmV0dXJuIEZlIT0xLzA/KEZlIGluc3RhbmNlb2YgRGF0ZXx8KEZlPXAoRmUpfHwxLzApLEZlPT0xLzA/''@;'; put 'put ''MS8wOkZlLmdldFRpbWUoKS0oRGV8fERhdGUubm93KCkpKToxLzB9ZXhwaXJ5VGltZShEZSl7aWYobnVsbCE9dGhpcy5tYXhBZ2Upe2NvbnN0IE9lPXRoaXMubWF4QWdlPD0wPy0xLzA6MWUzKnRoaXMubWF4QWdlO3JldHVybihEZXx8dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUpLmdldFRpbWUo''@;'; put 'put ''KStPZX1yZXR1cm4gdGhpcy5leHBpcmVzPT0xLzA/MS8wOnRoaXMuZXhwaXJlcy5nZXRUaW1lKCl9ZXhwaXJ5RGF0ZShEZSl7Y29uc3QgRmU9dGhpcy5leHBpcnlUaW1lKERlKTtyZXR1cm4gRmU9PTEvMD9uZXcgRGF0ZShlZSk6RmU9PS0xLzA/bmV3IERhdGUoMCk6bmV3IERhdGUoRmUpfWlz''@;'; put 'put ''UGVyc2lzdGVudCgpe3JldHVybiBudWxsIT10aGlzLm1heEFnZXx8dGhpcy5leHBpcmVzIT0xLzB9Y2Fub25pY2FsaXplZERvbWFpbigpe3JldHVybiBudWxsPT10aGlzLmRvbWFpbj9udWxsOngodGhpcy5kb21haW4pfWNkb21haW4oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWxpemVkRG9tYWlu''@;'; put 'put ''KCl9fWZ1bmN0aW9uIHhlKHplKXtpZihudWxsIT16ZSl7Y29uc3QgRGU9emUudG9Mb3dlckNhc2UoKTtzd2l0Y2goRGUpe2Nhc2UgbGUuU1RSSUNUOmNhc2UgbGUuU0lMRU5UOmNhc2UgbGUuRElTQUJMRUQ6cmV0dXJuIERlfX1yZXR1cm4gbGUuU0lMRU5UfW90LmNvb2tpZXNDcmVhdGVkPTAs''@;'; put 'put ''b3QucGFyc2U9RSxvdC5mcm9tSlNPTj10ZSxvdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzPU9iamVjdC5rZXlzKEplKSxvdC5zYW1lU2l0ZUxldmVsPXtzdHJpY3Q6MyxsYXg6Mixub25lOjF9LG90LnNhbWVTaXRlQ2Fub25pY2FsPXtzdHJpY3Q6IlN0cmljdCIsbGF4OiJMYXgifTtjbGFzcyB2''@;'; put 'put ''ZXtjb25zdHJ1Y3RvcihEZSxGZT17cmVqZWN0UHVibGljU3VmZml4ZXM6ITB9KXsiYm9vbGVhbiI9PXR5cGVvZiBGZSYmKEZlPXtyZWplY3RQdWJsaWNTdWZmaXhlczpGZX0pLEYudmFsaWRhdGUoRi5pc09iamVjdChGZSksRmUpLHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXM9RmUucmVqZWN0''@;'; put 'put ''UHVibGljU3VmZml4ZXMsdGhpcy5lbmFibGVMb29zZU1vZGU9ISFGZS5sb29zZU1vZGUsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW49ImJvb2xlYW4iIT10eXBlb2YgRmUuYWxsb3dTcGVjaWFsVXNlRG9tYWlufHxGZS5hbGxvd1NwZWNpYWxVc2VEb21haW4sdGhpcy5zdG9yZT1EZXx8bmV3''@;'; put 'put ''IHcsdGhpcy5wcmVmaXhTZWN1cml0eT14ZShGZS5wcmVmaXhTZWN1cml0eSksdGhpcy5fY2xvbmVTeW5jPVhlKCJjbG9uZSIpLHRoaXMuX2ltcG9ydENvb2tpZXNTeW5jPVhlKCJfaW1wb3J0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llc1N5bmM9WGUoImdldENvb2tpZXMiKSx0aGlzLmdldENv''@;'; put 'put ''b2tpZVN0cmluZ1N5bmM9WGUoImdldENvb2tpZVN0cmluZyIpLHRoaXMuZ2V0U2V0Q29va2llU3RyaW5nc1N5bmM9WGUoImdldFNldENvb2tpZVN0cmluZ3MiKSx0aGlzLnJlbW92ZUFsbENvb2tpZXNTeW5jPVhlKCJyZW1vdmVBbGxDb29raWVzIiksdGhpcy5zZXRDb29raWVTeW5jPVhlKCJz''@;'; put 'put ''ZXRDb29raWUiKSx0aGlzLnNlcmlhbGl6ZVN5bmM9WGUoInNlcmlhbGl6ZSIpfXNldENvb2tpZShEZSxGZSxPZSxJZSl7bGV0IFZlO2lmKEYudmFsaWRhdGUoRi5pc05vbkVtcHR5U3RyaW5nKEZlKSxJZSxPZSksRi5pc0Z1bmN0aW9uKEZlKSlyZXR1cm4oSWU9RmUpKG5ldyBFcnJvcigiTm8g''@;'; put 'put ''VVJMIHdhcyBzcGVjaWZpZWQiKSk7Y29uc3Qga2U9VWUoRmUpO2lmKEYuaXNGdW5jdGlvbihPZSkmJihJZT1PZSxPZT17fSksRi52YWxpZGF0ZShGLmlzRnVuY3Rpb24oSWUpLEllKSwhRi5pc05vbkVtcHR5U3RyaW5nKERlKSYmIUYuaXNPYmplY3QoRGUpJiZEZSBpbnN0YW5jZW9mIFN0cmlu''@;'; put 'put ''ZyYmMD09RGUubGVuZ3RoKXJldHVybiBJZShudWxsKTtjb25zdCBBZT14KGtlLmhvc3RuYW1lKSxfdD1PZS5sb29zZXx8dGhpcy5lbmFibGVMb29zZU1vZGU7bGV0IG50PW51bGw7aWYoT2Uuc2FtZVNpdGVDb250ZXh0JiYobnQ9aWUoT2Uuc2FtZVNpdGVDb250ZXh0KSwhbnQpKXJldHVybiBJ''@;'; put 'put ''ZShuZXcgRXJyb3IobmUpKTtpZigic3RyaW5nIj09dHlwZW9mIERlfHxEZSBpbnN0YW5jZW9mIFN0cmluZyl7aWYoIShEZT1vdC5wYXJzZShEZSx7bG9vc2U6X3R9KSkpcmV0dXJuIFZlPW5ldyBFcnJvcigiQ29va2llIGZhaWxlZCB0byBwYXJzZSIpLEllKE9lLmlnbm9yZUVycm9yP251bGw6''@;'; put 'put ''VmUpfWVsc2UgaWYoIShEZSBpbnN0YW5jZW9mIG90KSlyZXR1cm4gVmU9bmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBzZXRDb29raWUgbXVzdCBiZSBhIENvb2tpZSBvYmplY3Qgb3Igc3RyaW5nIiksSWUoT2UuaWdub3JlRXJyb3I/bnVsbDpWZSk7Y29uc3QgUWU9T2Uubm93fHxuZXcg''@;'; put 'put ''RGF0ZTtpZih0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzJiZEZS5kb21haW4mJm51bGw9PWcuZ2V0UHVibGljU3VmZml4KERlLmNkb21haW4oKSx7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLGlnbm9yZUVycm9yOk9lLmlnbm9yZUVycm9yfSkmJiFU''@;'; put 'put ''ZS50ZXN0KERlLmRvbWFpbikpcmV0dXJuIFZlPW5ldyBFcnJvcigiQ29va2llIGhhcyBkb21haW4gc2V0IHRvIGEgcHVibGljIHN1ZmZpeCIpLEllKE9lLmlnbm9yZUVycm9yP251bGw6VmUpO2lmKERlLmRvbWFpbil7aWYoIUMoQWUsRGUuY2RvbWFpbigpLCExKSlyZXR1cm4gVmU9bmV3IEVy''@;'; put 'put ''cm9yKGBDb29raWUgbm90IGluIHRoaXMgaG9zdCdzIGRvbWFpbi4gQ29va2llOiR7RGUuY2RvbWFpbigpfSBSZXF1ZXN0OiR7QWV9YCksSWUoT2UuaWdub3JlRXJyb3I/bnVsbDpWZSk7bnVsbD09RGUuaG9zdE9ubHkmJihEZS5ob3N0T25seT0hMSl9ZWxzZSBEZS5ob3N0T25seT0hMCxEZS5k''@;'; put 'put ''b21haW49QWU7aWYoKCFEZS5wYXRofHwiLyIhPT1EZS5wYXRoWzBdKSYmKERlLnBhdGg9VChrZS5wYXRobmFtZSksRGUucGF0aElzRGVmYXVsdD0hMCksITE9PT1PZS5odHRwJiZEZS5odHRwT25seSlyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNu''@;'; put 'put ''J3QgYW4gSFRUUCBBUEkiKSxJZShPZS5pZ25vcmVFcnJvcj9udWxsOlZlKTtpZigibm9uZSIhPT1EZS5zYW1lU2l0ZSYmdm9pZCAwIT09RGUuc2FtZVNpdGUmJm50JiYibm9uZSI9PT1udClyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgaXMgU2FtZVNpdGUgYnV0IHRoaXMgaXMgYSBjcm9z''@;'; put 'put ''cy1vcmlnaW4gcmVxdWVzdCIpLEllKE9lLmlnbm9yZUVycm9yP251bGw6VmUpO2NvbnN0IHVuPXRoaXMucHJlZml4U2VjdXJpdHk9PT1sZS5TSUxFTlQ7aWYodGhpcy5wcmVmaXhTZWN1cml0eSE9PWxlLkRJU0FCTEVEKXtsZXQgJGUsaXQ9ITE7aWYoZnVuY3Rpb24gbSh6ZSl7cmV0dXJuIEYu''@;'; put 'put ''dmFsaWRhdGUoRi5pc09iamVjdCh6ZSksemUpLCF6ZS5rZXkuc3RhcnRzV2l0aCgiX19TZWN1cmUtIil8fHplLnNlY3VyZX0oRGUpP2Z1bmN0aW9uIEEoemUpe3JldHVybiBGLnZhbGlkYXRlKEYuaXNPYmplY3QoemUpKSwhemUua2V5LnN0YXJ0c1dpdGgoIl9fSG9zdC0iKXx8emUuc2VjdXJl''@;'; put 'put ''JiZ6ZS5ob3N0T25seSYmbnVsbCE9emUucGF0aCYmIi8iPT09emUucGF0aH0oRGUpfHwoaXQ9ITAsJGU9IkNvb2tpZSBoYXMgX19Ib3N0IHByZWZpeCBidXQgZWl0aGVyIFNlY3VyZSBvciBIb3N0T25seSBhdHRyaWJ1dGUgaXMgbm90IHNldCBvciBQYXRoIGlzIG5vdCAnLyciKTooaXQ9ITAs''@;'; put 'put ''JGU9IkNvb2tpZSBoYXMgX19TZWN1cmUgcHJlZml4IGJ1dCBTZWN1cmUgYXR0cmlidXRlIGlzIG5vdCBzZXQiKSxpdClyZXR1cm4gSWUoT2UuaWdub3JlRXJyb3J8fHVuP251bGw6bmV3IEVycm9yKCRlKSl9Y29uc3QgTXQ9dGhpcy5zdG9yZTtNdC51cGRhdGVDb29raWV8fChNdC51cGRhdGVD''@;'; put 'put ''b29raWU9ZnVuY3Rpb24oaXQsJGUsdHQpe3RoaXMucHV0Q29va2llKCRlLHR0KX0pLE10LmZpbmRDb29raWUoRGUuZG9tYWluLERlLnBhdGgsRGUua2V5LGZ1bmN0aW9uIER0KGl0LCRlKXtpZihpdClyZXR1cm4gSWUoaXQpO2NvbnN0IHR0PWZ1bmN0aW9uKEhlKXtpZihIZSlyZXR1cm4gSWUo''@;'; put 'put ''SGUpO0llKG51bGwsRGUpfTtpZigkZSl7aWYoITE9PT1PZS5odHRwJiYkZS5odHRwT25seSlyZXR1cm4gaXQ9bmV3IEVycm9yKCJvbGQgQ29va2llIGlzIEh0dHBPbmx5IGFuZCB0aGlzIGlzbid0IGFuIEhUVFAgQVBJIiksSWUoT2UuaWdub3JlRXJyb3I/bnVsbDppdCk7RGUuY3JlYXRpb249''@;'; put 'put ''JGUuY3JlYXRpb24sRGUuY3JlYXRpb25JbmRleD0kZS5jcmVhdGlvbkluZGV4LERlLmxhc3RBY2Nlc3NlZD1RZSxNdC51cGRhdGVDb29raWUoJGUsRGUsdHQpfWVsc2UgRGUuY3JlYXRpb249RGUubGFzdEFjY2Vzc2VkPVFlLE10LnB1dENvb2tpZShEZSx0dCl9KX1nZXRDb29raWVzKERlLEZl''@;'; put 'put ''LE9lKXtGLnZhbGlkYXRlKEYuaXNOb25FbXB0eVN0cmluZyhEZSksT2UsRGUpO2NvbnN0IEllPVVlKERlKTtGLmlzRnVuY3Rpb24oRmUpJiYoT2U9RmUsRmU9e30pLEYudmFsaWRhdGUoRi5pc09iamVjdChGZSksT2UsRmUpLEYudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKE9lKSxPZSk7Y29uc3Qg''@;'; put 'put ''VmU9eChJZS5ob3N0bmFtZSksa2U9SWUucGF0aG5hbWV8fCIvIjtsZXQgQWU9RmUuc2VjdXJlO251bGw9PUFlJiZJZS5wcm90b2NvbCYmKCJodHRwczoiPT1JZS5wcm90b2NvbHx8IndzczoiPT1JZS5wcm90b2NvbCkmJihBZT0hMCk7bGV0IF90PTA7aWYoRmUuc2FtZVNpdGVDb250ZXh0KXtj''@;'; put 'put ''b25zdCBpdD1pZShGZS5zYW1lU2l0ZUNvbnRleHQpO2lmKF90PW90LnNhbWVTaXRlTGV2ZWxbaXRdLCFfdClyZXR1cm4gT2UobmV3IEVycm9yKG5lKSl9bGV0IG50PUZlLmh0dHA7bnVsbD09bnQmJihudD0hMCk7Y29uc3QgUWU9RmUubm93fHxEYXRlLm5vdygpLHVuPSExIT09RmUuZXhwaXJl''@;'; put 'put ''LHl0PSEhRmUuYWxsUGF0aHMsTXQ9dGhpcy5zdG9yZTtmdW5jdGlvbiBEdChpdCl7aWYoaXQuaG9zdE9ubHkpe2lmKGl0LmRvbWFpbiE9VmUpcmV0dXJuITF9ZWxzZSBpZighQyhWZSxpdC5kb21haW4sITEpKXJldHVybiExO3JldHVybiEoIXl0JiYhUChrZSxpdC5wYXRoKXx8aXQuc2VjdXJl''@;'; put 'put ''JiYhQWV8fGl0Lmh0dHBPbmx5JiYhbnR8fF90JiZvdC5zYW1lU2l0ZUxldmVsW2l0LnNhbWVTaXRlfHwibm9uZSJdPl90fHx1biYmaXQuZXhwaXJ5VGltZSgpPD1RZSYmKE10LnJlbW92ZUNvb2tpZShpdC5kb21haW4saXQucGF0aCxpdC5rZXksKCk9Pnt9KSwxKSl9TXQuZmluZENvb2tpZXMo''@;'; put 'put ''VmUseXQ/bnVsbDprZSx0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbiwoaXQsJGUpPT57aWYoaXQpcmV0dXJuIE9lKGl0KTskZT0kZS5maWx0ZXIoRHQpLCExIT09RmUuc29ydCYmKCRlPSRlLnNvcnQoc2UpKTtjb25zdCB0dD1uZXcgRGF0ZTtmb3IoY29uc3QgSGUgb2YgJGUpSGUubGFzdEFj''@;'; put 'put ''Y2Vzc2VkPXR0O09lKG51bGwsJGUpfSl9Z2V0Q29va2llU3RyaW5nKC4uLkRlKXtjb25zdCBGZT1EZS5wb3AoKTtGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihGZSksRmUpLERlLnB1c2goZnVuY3Rpb24oSWUsVmUpe0llP0ZlKEllKTpGZShudWxsLFZlLnNvcnQoc2UpLm1hcChrZT0+a2UuY29v''@;'; put 'put ''a2llU3RyaW5nKCkpLmpvaW4oIjsgIikpfSksdGhpcy5nZXRDb29raWVzLmFwcGx5KHRoaXMsRGUpfWdldFNldENvb2tpZVN0cmluZ3MoLi4uRGUpe2NvbnN0IEZlPURlLnBvcCgpO0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKEZlKSxGZSksRGUucHVzaChmdW5jdGlvbihJZSxWZSl7SWU/RmUo''@;'; put 'put ''SWUpOkZlKG51bGwsVmUubWFwKGtlPT5rZS50b1N0cmluZygpKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxEZSl9c2VyaWFsaXplKERlKXtGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihEZSksRGUpO2xldCBGZT10aGlzLnN0b3JlLmNvbnN0cnVjdG9yLm5hbWU7Ri5pc09iamVjdChG''@;'; put 'put ''ZSkmJihGZT1udWxsKTtjb25zdCBPZT17dmVyc2lvbjpgdG91Z2gtY29va2llQCR7T31gLHN0b3JlVHlwZTpGZSxyZWplY3RQdWJsaWNTdWZmaXhlczohIXRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMsZW5hYmxlTG9vc2VNb2RlOiEhdGhpcy5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFs''@;'; put 'put ''VXNlRG9tYWluOiEhdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4scHJlZml4U2VjdXJpdHk6eGUodGhpcy5wcmVmaXhTZWN1cml0eSksY29va2llczpbXX07aWYoIXRoaXMuc3RvcmUuZ2V0QWxsQ29va2llc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuc3RvcmUuZ2V0QWxsQ29va2llcyly''@;'; put 'put ''ZXR1cm4gRGUobmV3IEVycm9yKCJzdG9yZSBkb2VzIG5vdCBzdXBwb3J0IGdldEFsbENvb2tpZXMgYW5kIGNhbm5vdCBiZSBzZXJpYWxpemVkIikpO3RoaXMuc3RvcmUuZ2V0QWxsQ29va2llcygoSWUsVmUpPT5JZT9EZShJZSk6KE9lLmNvb2tpZXM9VmUubWFwKGtlPT4oZGVsZXRlKGtlPWtl''@;'; put 'put ''IGluc3RhbmNlb2Ygb3Q/a2UudG9KU09OKCk6a2UpLmNyZWF0aW9uSW5kZXgsa2UpKSxEZShudWxsLE9lKSkpfXRvSlNPTigpe3JldHVybiB0aGlzLnNlcmlhbGl6ZVN5bmMoKX1faW1wb3J0Q29va2llcyhEZSxGZSl7bGV0IE9lPURlLmNvb2tpZXM7aWYoIU9lfHwhQXJyYXkuaXNBcnJheShP''@;'; put 'put ''ZSkpcmV0dXJuIEZlKG5ldyBFcnJvcigic2VyaWFsaXplZCBqYXIgaGFzIG5vIGNvb2tpZXMgYXJyYXkiKSk7T2U9T2Uuc2xpY2UoKTtjb25zdCBJZT1WZT0+e2lmKFZlKXJldHVybiBGZShWZSk7aWYoIU9lLmxlbmd0aClyZXR1cm4gRmUoVmUsdGhpcyk7bGV0IGtlO3RyeXtrZT10ZShPZS5z''@;'; put 'put ''aGlmdCgpKX1jYXRjaChBZSl7cmV0dXJuIEZlKEFlKX1pZihudWxsPT09a2UpcmV0dXJuIEllKG51bGwpO3RoaXMuc3RvcmUucHV0Q29va2llKGtlLEllKX07SWUoKX1jbG9uZShEZSxGZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJihGZT1EZSxEZT1udWxsKSx0aGlzLnNlcmlhbGl6ZSgoT2Us''@;'; put 'put ''SWUpPT57aWYoT2UpcmV0dXJuIEZlKE9lKTt2ZS5kZXNlcmlhbGl6ZShJZSxEZSxGZSl9KX1jbG9uZVN5bmMoRGUpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9jbG9uZVN5bmMoKTtpZighRGUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgY2xv''@;'; put 'put ''bmUgZGVzdGluYXRpb24gc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuX2Nsb25lU3luYyhEZSl9cmVtb3ZlQWxsQ29va2llcyhEZSl7Ri52YWxpZGF0ZShGLmlzRnVuY3Rpb24oRGUpLERlKTtjb25zdCBGZT10aGlzLnN0b3Jl''@;'; put 'put ''O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5yZW1vdmVBbGxDb29raWVzJiZGZS5yZW1vdmVBbGxDb29raWVzIT09Qi5wcm90b3R5cGUucmVtb3ZlQWxsQ29va2llcylyZXR1cm4gRmUucmVtb3ZlQWxsQ29va2llcyhEZSk7RmUuZ2V0QWxsQ29va2llcygoT2UsSWUpPT57aWYoT2UpcmV0dXJu''@;'; put 'put ''IERlKE9lKTtpZigwPT09SWUubGVuZ3RoKXJldHVybiBEZShudWxsKTtsZXQgVmU9MDtjb25zdCBrZT1bXTtmdW5jdGlvbiBBZShfdCl7aWYoX3QmJmtlLnB1c2goX3QpLFZlKyssVmU9PT1JZS5sZW5ndGgpcmV0dXJuIERlKGtlLmxlbmd0aD9rZVswXTpudWxsKX1JZS5mb3JFYWNoKF90PT57''@;'; put 'put ''RmUucmVtb3ZlQ29va2llKF90LmRvbWFpbixfdC5wYXRoLF90LmtleSxBZSl9KX0pfXN0YXRpYyBkZXNlcmlhbGl6ZShEZSxGZSxPZSl7bGV0IEllO2lmKDMhPT1hcmd1bWVudHMubGVuZ3RoJiYoT2U9RmUsRmU9bnVsbCksRi52YWxpZGF0ZShGLmlzRnVuY3Rpb24oT2UpLE9lKSwic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIERlKXtpZihJZT1hZShEZSksSWUgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gT2UoSWUpfWVsc2UgSWU9RGU7Y29uc3QgVmU9bmV3IHZlKEZlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpJZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6SWUuZW5hYmxlTG9vc2VNb2Rl''@;'; put 'put ''LGFsbG93U3BlY2lhbFVzZURvbWFpbjpJZS5hbGxvd1NwZWNpYWxVc2VEb21haW4scHJlZml4U2VjdXJpdHk6SWUucHJlZml4U2VjdXJpdHl9KTtWZS5faW1wb3J0Q29va2llcyhJZSxrZT0+e2lmKGtlKXJldHVybiBPZShrZSk7T2UobnVsbCxWZSl9KX1zdGF0aWMgZGVzZXJpYWxpemVTeW5j''@;'; put 'put ''KERlLEZlKXtjb25zdCBPZT0ic3RyaW5nIj09dHlwZW9mIERlP0pTT04ucGFyc2UoRGUpOkRlLEllPW5ldyB2ZShGZSx7cmVqZWN0UHVibGljU3VmZml4ZXM6T2UucmVqZWN0UHVibGljU3VmZml4ZXMsbG9vc2VNb2RlOk9lLmVuYWJsZUxvb3NlTW9kZX0pO2lmKCFJZS5zdG9yZS5zeW5jaHJv''@;'; put 'put ''bm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gSWUuX2ltcG9ydENvb2tpZXNTeW5jKE9lKSxJZX19ZnVuY3Rpb24gWGUoemUpe3JldHVybiBmdW5jdGlvbiguLi5EZSl7aWYoIXRo''@;'; put 'put ''aXMuc3RvcmUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7bGV0IEZlLE9lO2lmKHRoaXNbemVdKC4uLkRlLChJZSxWZSk9PntGZT1JZSxPZT1WZX0pLEZlKXRocm93IEZlO3Jl''@;'; put 'put ''dHVybiBPZX19dmUuZnJvbUpTT049dmUuZGVzZXJpYWxpemVTeW5jLFsiX2ltcG9ydENvb2tpZXMiLCJjbG9uZSIsImdldENvb2tpZXMiLCJnZXRDb29raWVTdHJpbmciLCJnZXRTZXRDb29raWVTdHJpbmdzIiwicmVtb3ZlQWxsQ29va2llcyIsInNlcmlhbGl6ZSIsInNldENvb2tpZSJdLmZv''@;'; put 'put ''ckVhY2goemU9Pnt2ZS5wcm90b3R5cGVbemVdPXoodmUucHJvdG90eXBlW3plXSl9KSx2ZS5kZXNlcmlhbGl6ZT16KHZlLmRlc2VyaWFsaXplKSxYLnZlcnNpb249TyxYLkNvb2tpZUphcj12ZSxYLkNvb2tpZT1vdCxYLlN0b3JlPUIsWC5NZW1vcnlDb29raWVTdG9yZT13LFgucGFyc2VEYXRl''@;'; put 'put ''PXAsWC5mb3JtYXREYXRlPWIsWC5wYXJzZT1FLFguZnJvbUpTT049dGUsWC5kb21haW5NYXRjaD1DLFguZGVmYXVsdFBhdGg9VCxYLnBhdGhNYXRjaD1QLFguZ2V0UHVibGljU3VmZml4PWcuZ2V0UHVibGljU3VmZml4LFguY29va2llQ29tcGFyZT1zZSxYLnBlcm11dGVEb21haW49eSg3MzI0''@;'; put 'put ''KS5wZXJtdXRlRG9tYWluLFgucGVybXV0ZVBhdGg9ZnVuY3Rpb24gd2UoemUpe2lmKEYudmFsaWRhdGUoRi5pc1N0cmluZyh6ZSkpLCIvIj09PXplKXJldHVyblsiLyJdO2NvbnN0IERlPVt6ZV07Zm9yKDt6ZS5sZW5ndGg+MTspe2NvbnN0IEZlPXplLmxhc3RJbmRleE9mKCIvIik7aWYoMD09''@;'; put 'put ''PUZlKWJyZWFrO3plPXplLnN1YnN0cigwLEZlKSxEZS5wdXNoKHplKX1yZXR1cm4gRGUucHVzaCgiLyIpLERlfSxYLmNhbm9uaWNhbERvbWFpbj14LFguUHJlZml4U2VjdXJpdHlFbnVtPWxlLFguUGFyYW1ldGVyRXJyb3I9Ri5QYXJhbWV0ZXJFcnJvcn0sNTc2MToodWUsWCx5KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijtjb25zdHtmcm9tQ2FsbGJhY2s6X309eSg3MDQxKSxnPXkoMjIyNCkueSxCPXkoNzMyNCkucGVybXV0ZURvbWFpbix3PXkoODk3MSkuVSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpQLGdldFV0aWxJbnNwZWN0OkZ9PXkoMTI2OSk7Y2xhc3MgTyBleHRlbmRzIGd7Y29uc3RydWN0''@;'; put 'put ''b3IoKXtzdXBlcigpLHRoaXMuc3luY2hyb25vdXM9ITAsdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBVPVAoKTtVJiYodGhpc1tVXT10aGlzLmluc3BlY3QpfWluc3BlY3QoKXtyZXR1cm5geyBpZHg6ICR7Rih6KSh0aGlzLmlkeCwhMSwyKX0gfWB9ZmluZENvb2tpZShVLFcs''@;'; put 'put ''WSxxKXtyZXR1cm4gcShudWxsLHRoaXMuaWR4W1VdJiZ0aGlzLmlkeFtVXVtXXT90aGlzLmlkeFtVXVtXXVtZXXx8bnVsbDp2b2lkIDApfWZpbmRDb29raWVzKFUsVyxZLHEpe2NvbnN0IGVlPVtdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBZJiYocT1ZLFk9ITApLCFVKXJldHVybiBxKG51bGws''@;'; put 'put ''W10pO2xldCBKO0o9Vz9mdW5jdGlvbihtZSl7T2JqZWN0LmtleXMobWUpLmZvckVhY2goX2U9PntpZih3KFcsX2UpKXtjb25zdCBUZT1tZVtfZV07Zm9yKGNvbnN0IFNlIGluIFRlKWVlLnB1c2goVGVbU2VdKX19KX06ZnVuY3Rpb24obWUpe2Zvcihjb25zdCBfZSBpbiBtZSl7Y29uc3QgVGU9''@;'; put 'put ''bWVbX2VdO2Zvcihjb25zdCBTZSBpbiBUZSllZS5wdXNoKFRlW1NlXSl9fTtjb25zdCBuZT1CKFUsWSl8fFtVXSxpZT10aGlzLmlkeDtuZS5mb3JFYWNoKGxlPT57Y29uc3QgbWU9aWVbbGVdO21lJiZKKG1lKX0pLHEobnVsbCxlZSl9cHV0Q29va2llKFUsVyl7dGhpcy5pZHhbVS5kb21haW5d''@;'; put 'put ''fHwodGhpcy5pZHhbVS5kb21haW5dPU9iamVjdC5jcmVhdGUobnVsbCkpLHRoaXMuaWR4W1UuZG9tYWluXVtVLnBhdGhdfHwodGhpcy5pZHhbVS5kb21haW5dW1UucGF0aF09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbVS5kb21haW5dW1UucGF0aF1bVS5rZXldPVUsVyhudWxsKX11''@;'; put 'put ''cGRhdGVDb29raWUoVSxXLFkpe3RoaXMucHV0Q29va2llKFcsWSl9cmVtb3ZlQ29va2llKFUsVyxZLHEpe3RoaXMuaWR4W1VdJiZ0aGlzLmlkeFtVXVtXXSYmdGhpcy5pZHhbVV1bV11bWV0mJmRlbGV0ZSB0aGlzLmlkeFtVXVtXXVtZXSxxKG51bGwpfXJlbW92ZUNvb2tpZXMoVSxXLFkpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmlkeFtVXSYmKFc/ZGVsZXRlIHRoaXMuaWR4W1VdW1ddOmRlbGV0ZSB0aGlzLmlkeFtVXSksWShudWxsKX1yZW1vdmVBbGxDb29raWVzKFUpe3JldHVybiB0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51bGwpLFUobnVsbCl9Z2V0QWxsQ29va2llcyhVKXtjb25zdCBXPVtdLFk9''@;'; put 'put ''dGhpcy5pZHg7T2JqZWN0LmtleXMoWSkuZm9yRWFjaChlZT0+e09iamVjdC5rZXlzKFlbZWVdKS5mb3JFYWNoKG5lPT57T2JqZWN0LmtleXMoWVtlZV1bbmVdKS5mb3JFYWNoKGxlPT57bnVsbCE9PWxlJiZXLnB1c2goWVtlZV1bbmVdW2xlXSl9KX0pfSksVy5zb3J0KChlZSxKKT0+KGVlLmNy''@;'; put 'put ''ZWF0aW9uSW5kZXh8fDApLShKLmNyZWF0aW9uSW5kZXh8fDApKSxVKG51bGwsVyl9fWZ1bmN0aW9uIHooSyl7Y29uc3QgVT1PYmplY3Qua2V5cyhLKTtpZigwPT09VS5sZW5ndGgpcmV0dXJuIltPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7fSI7bGV0IFc9IltPYmplY3Q6IG51bGwgcHJvdG90''@;'; put 'put ''eXBlXSB7XG4iO3JldHVybiBPYmplY3Qua2V5cyhLKS5mb3JFYWNoKChZLHEpPT57Vys9ZnVuY3Rpb24gTihLLFUpe2xldCBZPWAgICcke0t9JzogW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKFUpLmZvckVhY2goKHEsZWUsSik9PntZKz1mdW5jdGlv''@;'; put 'put ''biBMKEssVSl7Y29uc3QgVz0iICAgICI7bGV0IFk9YCR7V30nJHtLfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhVKS5mb3JFYWNoKChxLGVlLEopPT57WSs9YCAgICAgICR7cX06ICR7VVtxXS5pbnNwZWN0KCl9YCxlZTxKLmxlbmd0aC0xJiYo''@;'; put 'put ''WSs9IiwiKSxZKz0iXG4ifSksWSs9YCR7V319YCxZfShxLFVbcV0pLGVlPEoubGVuZ3RoLTEmJihZKz0iLCIpLFkrPSJcbiJ9KSxZKz0iICB9IixZfShZLEtbWV0pLHE8VS5sZW5ndGgtMSYmKFcrPSIsIiksVys9IlxuIn0pLFcrPSJ9IixXfVsiZmluZENvb2tpZSIsImZpbmRDb29raWVzIiwi''@;'; put 'put ''cHV0Q29va2llIiwidXBkYXRlQ29va2llIiwicmVtb3ZlQ29va2llIiwicmVtb3ZlQ29va2llcyIsInJlbW92ZUFsbENvb2tpZXMiLCJnZXRBbGxDb29raWVzIl0uZm9yRWFjaChLPT57Ty5wcm90b3R5cGVbS109XyhPLnByb3RvdHlwZVtLXSl9KSxYLm09T30sODk3MToodWUsWCk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7WC5VPWZ1bmN0aW9uIHkoSSxfKXtyZXR1cm4gXz09PUl8fDA9PT1JLmluZGV4T2YoXykmJigiLyI9PT1fLnN1YnN0cigtMSl8fCIvIj09PUkuc3Vic3RyKF8ubGVuZ3RoLDEpKX19LDczMjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc1Mik7WC5wZXJtdXRl''@;'; put 'put ''RG9tYWluPWZ1bmN0aW9uIF8oZyxCKXtjb25zdCB3PUkuZ2V0UHVibGljU3VmZml4KGcse2FsbG93U3BlY2lhbFVzZURvbWFpbjpCfSk7aWYoIXcpcmV0dXJuIG51bGw7aWYodz09ZylyZXR1cm5bZ107Ii4iPT1nLnNsaWNlKC0xKSYmKGc9Zy5zbGljZSgwLC0xKSk7Y29uc3QgRj1nLnNsaWNl''@;'; put 'put ''KDAsLSh3Lmxlbmd0aCsxKSkuc3BsaXQoIi4iKS5yZXZlcnNlKCk7bGV0IE89dztjb25zdCB6PVtPXTtmb3IoO0YubGVuZ3RoOylPPWAke0Yuc2hpZnQoKX0uJHtPfWAsei5wdXNoKE8pO3JldHVybiB6fX0sNzUyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4NTY2KSxfPVsi''@;'; put 'put ''bG9jYWwiLCJleGFtcGxlIiwiaW52YWxpZCIsImxvY2FsaG9zdCIsInRlc3QiXSxnPVsibG9jYWxob3N0IiwiaW52YWxpZCJdO1guZ2V0UHVibGljU3VmZml4PWZ1bmN0aW9uIEIodyxQPXt9KXtjb25zdCBGPXcuc3BsaXQoIi4iKSxPPUZbRi5sZW5ndGgtMV0sTj0hIVAuaWdub3JlRXJyb3I7''@;'; put 'put ''aWYoUC5hbGxvd1NwZWNpYWxVc2VEb21haW4mJl8uaW5jbHVkZXMoTykpe2lmKEYubGVuZ3RoPjEpcmV0dXJuYCR7RltGLmxlbmd0aC0yXX0uJHtPfWA7aWYoZy5pbmNsdWRlcyhPKSlyZXR1cm5gJHtPfWB9aWYoIU4mJl8uaW5jbHVkZXMoTykpdGhyb3cgbmV3IEVycm9yKGBDb29raWUgaGFz''@;'; put 'put ''IGRvbWFpbiBzZXQgdG8gdGhlIHB1YmxpYyBzdWZmaXggIiR7T30iIHdoaWNoIGlzIGEgc3BlY2lhbCB1c2UgZG9tYWluLiBUbyBhbGxvdyB0aGlzLCBjb25maWd1cmUgeW91ciBDb29raWVKYXIgd2l0aCB7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRydWUsIHJlamVjdFB1YmxpY1N1ZmZpeGVz''@;'; put 'put ''OiBmYWxzZX0uYCk7cmV0dXJuIEkuZ2V0KHcpfX0sMjIyNDoodWUsWCk9PnsidXNlIHN0cmljdCI7WC55PWNsYXNzIHl7Y29uc3RydWN0b3IoKXt0aGlzLnN5bmNocm9ub3VzPSExfWZpbmRDb29raWUoXyxnLEIsdyl7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llIGlzIG5vdCBpbXBsZW1l''@;'; put 'put ''bnRlZCIpfWZpbmRDb29raWVzKF8sZyxCLHcpe3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9cHV0Q29va2llKF8sZyl7dGhyb3cgbmV3IEVycm9yKCJwdXRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9dXBkYXRlQ29va2llKF8sZyxCKXt0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoInVwZGF0ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWUoXyxnLEIsdyl7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQ29va2llcyhfLGcsQil7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVD''@;'; put 'put ''b29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUFsbENvb2tpZXMoXyl7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWdldEFsbENvb2tpZXMoXyl7dGhyb3cgbmV3IEVycm9yKCJnZXRBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1l''@;'; put 'put ''bnRlZCAodGhlcmVmb3JlIGphciBjYW5ub3QgYmUgc2VyaWFsaXplZCkiKX19fSwxMjY5Oih1ZSxYLHkpPT57ZnVuY3Rpb24gSSgpe3RyeXtyZXR1cm4geSg5NTM5KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gXygpe3JldHVybiBTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0''@;'; put 'put ''LmN1c3RvbSIpfVguZ2V0VXRpbEluc3BlY3Q9ZnVuY3Rpb24odyxQPXt9KXtjb25zdCBPPShQLnJlcXVpcmVVdGlsfHxJKSgpO3JldHVybiBmdW5jdGlvbihOLEwsSyl7cmV0dXJuIE8/Ty5pbnNwZWN0KE4sTCxLKTp3KE4pfX0sWC5nZXRDdXN0b21JbnNwZWN0U3ltYm9sPWZ1bmN0aW9uKHc9''@;'; put 'put ''e30pe3JldHVybih3Lmxvb2t1cEN1c3RvbUluc3BlY3RTeW1ib2x8fF8pKCl8fGZ1bmN0aW9uIGcoQil7Y29uc3QgUD0oQi5yZXF1aXJlVXRpbHx8SSkoKTtyZXR1cm4gUD9QLmluc3BlY3QuY3VzdG9tOm51bGx9KHcpfX0sNzY1MjoodWUsWCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24geShO''@;'; put 'put ''KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTn1mdW5jdGlvbiBCKE4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgTnx8TiBpbnN0YW5jZW9mIFN0cmluZ31mdW5jdGlvbiB3KE4pe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09dG9TdHJpbmcuY2FsbChOKX1jbGFzcyB6IGV4dGVuZHMgRXJy''@;'; put 'put ''b3J7Y29uc3RydWN0b3IoLi4uTCl7c3VwZXIoLi4uTCl9fVguUGFyYW1ldGVyRXJyb3I9eixYLmlzRnVuY3Rpb249eSxYLmlzTm9uRW1wdHlTdHJpbmc9ZnVuY3Rpb24gSShOKXtyZXR1cm4gQihOKSYmIiIhPT1OfSxYLmlzRGF0ZT1mdW5jdGlvbiBfKE4pe3JldHVybiBmdW5jdGlvbiBQKE4s''@;'; put 'put ''TCl7dHJ5e3JldHVybiBOIGluc3RhbmNlb2YgTH1jYXRjaHtyZXR1cm4hMX19KE4sRGF0ZSkmJmZ1bmN0aW9uIEYoTil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBOJiZOJTE9PTB9KE4uZ2V0VGltZSgpKX0sWC5pc0VtcHR5U3RyaW5nPWZ1bmN0aW9uIGcoTil7cmV0dXJuIiI9PT1OfHxOIGlu''@;'; put 'put ''c3RhbmNlb2YgU3RyaW5nJiYiIj09PU4udG9TdHJpbmcoKX0sWC5pc1N0cmluZz1CLFguaXNPYmplY3Q9dyxYLnZhbGlkYXRlPWZ1bmN0aW9uIE8oTixMLEspe2lmKHkoTCl8fChLPUwsTD1udWxsKSx3KEspfHwoSz17RXJyb3I6IkZhaWxlZCBDaGVjayJ9KSwhTil7aWYoIUwpdGhyb3cgbmV3''@;'; put 'put ''IHooSyk7TChuZXcgeihLKSl9fX0sNDU2OnVlPT57dWUuZXhwb3J0cz0iNC4xLjMifSw3MDQxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLmZyb21DYWxsYmFjaz1mdW5jdGlvbih5KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9m''@;'; put 'put ''IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoSSxfKT0+e2FyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoXT0oZyxCKT0+e2lmKGcpcmV0dXJuIF8oZyk7SShCKX0sYXJndW1lbnRzLmxlbmd0aCsrLHkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7eS5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cyl9LCJuYW1lIix7dmFsdWU6eS5uYW1lfSl9LFguZnJvbVByb21pc2U9ZnVuY3Rpb24oeSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe2NvbnN0IEk9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07aWYoImZ1bmN0aW9uIiE9''@;'; put 'put ''dHlwZW9mIEkpcmV0dXJuIHkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxhcmd1bWVudHMubGVuZ3RoLS0seS5hcHBseSh0aGlzLGFyZ3VtZW50cykudGhlbihfPT5JKG51bGwsXyksSSl9LCJuYW1lIix7dmFsdWU6eS5uYW1lfSl9''@;'; put 'put ''fSw2NzI6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLE8pe3JldHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTCl7ZnVuY3Rpb24gSyhZKXt0cnl7VyhPLm5leHQoWSkpfWNhdGNoKHEpe0wo''@;'; put 'put ''cSl9fWZ1bmN0aW9uIFUoWSl7dHJ5e1coTy50aHJvdyhZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVyhZKXtZLmRvbmU/TihZLnZhbHVlKTpmdW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKEwpe0woTil9KX0oWS52YWx1ZSkudGhlbihLLFUp''@;'; put 'put ''fVcoKE89Ty5hcHBseSh3LFB8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Db250ZXh0TWFuYWdlcj12b2lkIDA7Y29uc3QgXz15KDU5MjgpLGc9eSg5Nzc4KTtYLkNvbnRleHRNYW5hZ2VyPWNsYXNzIEJ7Z2V0IGdl''@;'; put 'put ''dERlZmF1bHRDb21wdXRlQ29udGV4dHMoKXtyZXR1cm4gdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzfWdldCBnZXREZWZhdWx0TGF1bmNoZXJDb250ZXh0cygpe3JldHVybiB0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzfWNvbnN0cnVjdG9yKFAsRil7dGhpcy5zZXJ2ZXJVcmw9UCx0''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQ9Rix0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIkRhdGEgTWluaW5nIGNvbXB1dGUgY29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiU0FTIEpvYiBFeGVj''@;'; put 'put ''dXRpb24gY29tcHV0ZSBjb250ZXh0IiwiU0FTIE1vZGVsIE1hbmFnZXIgY29tcHV0ZSBjb250ZXh0IiwiU0FTIFN0dWRpbyBjb21wdXRlIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGNvbXB1dGUgY29udGV4dCJdLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHM9WyJDQVMg''@;'; put 'put ''Rm9ybWF0cyBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJEYXRhIE1pbmluZyBsYXVuY2hlciBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBsYXVuY2hlciBjb250ZXh0IiwiSm9iIEZsb3cgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBsYXVuY2hl''@;'; put 'put ''ciBjb250ZXh0IiwiU0FTIE1vZGVsIE1hbmFnZXIgbGF1bmNoZXIgY29udGV4dCIsIlNBUyBTdHVkaW8gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgbGF1bmNoZXIgY29udGV4dCJdLFAmJigwLF8uaXNVcmwpKFApfWdldENvbXB1dGVDb250ZXh0cyhQKXtyZXR1''@;'; put 'put ''cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0OkZ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDBgLFApLmNhdGNoKHo9Pnt0aHJvdygwLGcucHJlZml4TWVzc2Fn''@;'; put 'put ''ZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHRzLiAiKX0pO3JldHVybihGJiZGLml0ZW1zP0YuaXRlbXM6W10pLm1hcCh6PT4oe2NyZWF0ZWRCeTp6LmNyZWF0ZWRCeSxpZDp6LmlkLG5hbWU6ei5uYW1lLHZlcnNpb246ei52ZXJzaW9uLGF0dHJpYnV0ZXM6e319KSl9''@;'; put 'put ''KX1nZXRMYXVuY2hlckNvbnRleHRzKFApe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Rn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vbGF1bmNoZXIvY29udGV4dHM/bGltaXQ9MTAwMDBgLFApLmNh''@;'; put 'put ''dGNoKHo9Pnt0aHJvdygwLGcucHJlZml4TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsYXVuY2hlciBjb250ZXh0cy4gIil9KTtyZXR1cm4oRiYmRi5pdGVtcz9GLml0ZW1zOltdKS5tYXAoej0+KHtjcmVhdGVkQnk6ei5jcmVhdGVkQnksaWQ6ei5pZCxuYW1lOnoubmFtZSx2ZXJz''@;'; put 'put ''aW9uOnoudmVyc2lvbixhdHRyaWJ1dGVzOnt9fSkpfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoUCxGLE8seixOLEwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoUCksdGhpcy5pc0RlZmF1bHRDb250ZXh0KFAsdGhp''@;'; put 'put ''cy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLGBDb21wdXRlIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApLCh5aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0cyhOKSkuZmluZChlZT0+ZWUubmFtZT09PVApKXRocm93IG5ldyBFcnJvcihgQ29tcHV0ZSBjb250ZXh0ICcke1B9JyBh''@;'; put 'put ''bHJlYWR5IGV4aXN0cy5gKTtpZihGJiYhdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cy5pbmNsdWRlcyhGKSYmISh5aWVsZCB0aGlzLmdldExhdW5jaGVyQ29udGV4dHMoTikpLmZpbmQoSj0+Si5uYW1lPT09Rikpe2NvbnN0IEo9YFRoZSBsYXVuY2hlciBjb250ZXh0IGZvciAke0Z9YCxp''@;'; put 'put ''ZT15aWVsZCB0aGlzLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChGLEosImRpcmVjdCIsTikuY2F0Y2gobGU9Pnt0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICR7bGV9YCl9KTtpZighaWV8fCFpZS5uYW1lKXRocm93IG5ldyBFcnJvcigiRXJy''@;'; put 'put ''b3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4iKTtGPWllLm5hbWV9bGV0IFc9e3JldXNlU2VydmVyUHJvY2Vzc2VzOiEwfTtPJiYoVz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sVykse3J1blNlcnZlckFzOk99KSk7Y29uc3QgWT17bmFtZTpQLGxhdW5jaENvbnRl''@;'; put 'put ''eHQ6e2NvbnRleHROYW1lOkZ8fCIifSxhdHRyaWJ1dGVzOld9O0wmJkwubGVuZ3RoP1kuYXV0aG9yaXplZFVzZXJzPUw6WS5hdXRob3JpemVBbGxBdXRoZW50aWNhdGVkVXNlcnM9ITAseiYmKFkuZW52aXJvbm1lbnQ9e2F1dG9FeGVjTGluZXM6en0pO2NvbnN0e3Jlc3VsdDpxfT15aWVsZCB0''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0c2AsWSxOKS5jYXRjaChlZT0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKShlZSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgY29tcHV0ZSBjb250ZXh0LiAiKX0pO3JldHVybiBxfSl9Y3JlYXRl''@;'; put 'put ''TGF1bmNoZXJDb250ZXh0KFAsRixPPSJkaXJlY3QiLHope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKTtpZih0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRM''@;'; put 'put ''YXVuY2hlckNvbnRleHRzLGBMYXVuY2hlciBjb250ZXh0ICcke1B9JyBhbHJlYWR5IGV4aXN0cy5gKSwoeWllbGQgdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKHopKS5maW5kKFc9PlcubmFtZT09PVApKXRocm93IG5ldyBFcnJvcihgTGF1bmNoZXIgY29udGV4dCAnJHtQfScgYWxyZWFkeSBl''@;'; put 'put ''eGlzdHMuYCk7Y29uc3QgSz17bmFtZTpQLGRlc2NyaXB0aW9uOkYsbGF1bmNoVHlwZTpPfSx7cmVzdWx0OlV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9sYXVuY2hlci9jb250ZXh0c2AsSyx6KS5jYXRjaChXPT57dGhyb3coMCxnLnByZWZpeE1l''@;'; put 'put ''c3NhZ2UpKFcsIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICIpfSk7cmV0dXJuIFV9KX1lZGl0Q29tcHV0ZUNvbnRleHQoUCxGLE8pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgejt0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoUCks''@;'; put 'put ''dGhpcy5pc0RlZmF1bHRDb250ZXh0KFAsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJFZGl0aW5nIGRlZmF1bHQgU0FTIGNvbXB1dGUgY29udGV4dHMgaXMgbm90IGFsbG93ZWQuIiwhMCksej15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFAsTyksenx8KHo9eWllbGQg''@;'; put 'put ''dGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5SWQoRi5pZCxPKSk7Y29uc3R7cmVzdWx0Ok4sZXRhZzpMfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7ei5pZH1gLE8pLmNhdGNoKEs9Pnt0aHJvdyBLJiY0MDQ9PT1LLnN0''@;'; put 'put ''YXR1cz9uZXcgRXJyb3IoYFRoZSBjb250ZXh0ICcke1B9JyB3YXMgbm90IGZvdW5kIG9uIHRoaXMgc2VydmVyLmApOkt9KTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dChgL2NvbXB1dGUvY29udGV4dHMvJHtOLmlkfWAsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9i''@;'; put 'put ''amVjdC5hc3NpZ24oe30sTiksRikse2F0dHJpYnV0ZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LE4uYXR0cmlidXRlcyksRi5hdHRyaWJ1dGVzKX0pLE8seyJJZi1NYXRjaCI6TH0pfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Ok99PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/ZmlsdGVyPWVxKG5hbWUsICIke1B9IilgLEYpLmNhdGNoKHo9Pnt0aHJvdygwLGcucHJlZml4TWVzc2FnZSkoeiwi''@;'; put 'put ''RXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgbmFtZS4gIil9KTtpZighT3x8IU8uaXRlbXN8fCFPLml0ZW1zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZXh0ICcke1B9JyB3YXMgbm90IGZvdW5kIGF0ICcke3RoaXMuc2VydmVyVXJsfScuYCk7cmV0dXJu''@;'; put 'put ''IE8uaXRlbXNbMF19KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Ok99PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHtQ''@;'; put 'put ''fWAsRikuY2F0Y2goej0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBpZC4gIil9KTtyZXR1cm4gT30pfWdldEV4ZWN1dGFibGVDb250ZXh0cyhQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv''@;'; put 'put ''biooKXtjb25zdHtyZXN1bHQ6T309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGAsRj8uYWNjZXNzX3Rva2VuKS5jYXRjaChVPT57dGhyb3coMCxnLnByZWZpeE1lc3NhZ2UpKFUsIkVycm9yIHdoaWxl''@;'; put 'put ''IGZldGNoaW5nIGNvbXB1dGUgY29udGV4dHMuIil9KSx6PU8uaXRlbXN8fFtdLE49W10sTD16Lm1hcChVPT57Y29uc3QgVz1bIiVwdXQgJj1zeXN1c2VyaWQ7Il07cmV0dXJuKCk9PlAoYHRlc3QtJHtVLm5hbWV9YCxXLFUubmFtZSxGLG51bGwsITEsITAsITApLmNhdGNoKFk9PlkpfSk7bGV0''@;'; put 'put ''IEs9W107Zm9yKGNvbnN0IFUgb2YgTClLLnB1c2goeWllbGQgVSgpKTtyZXR1cm4gSy5mb3JFYWNoKChVLFcpPT57aWYoVSYmVS5sb2cpdHJ5e2xldCBxPSIiO2NvbnN0IGVlPVUubG9nLnNwbGl0KCJcbiIpLmZpbmQoSj0+Si5zdGFydHNXaXRoKCJTWVNVU0VSSUQ9IikpO2VlJiYocT1lZS5y''@;'; put 'put ''ZXBsYWNlKCJTWVNVU0VSSUQ9IiwiIiksTi5wdXNoKHtjcmVhdGVkQnk6eltXXS5jcmVhdGVkQnksaWQ6eltXXS5pZCxuYW1lOnpbV10ubmFtZSx2ZXJzaW9uOnpbV10udmVyc2lvbixhdHRyaWJ1dGVzOntzeXNVc2VySWQ6cX19KSl9Y2F0Y2goWSl7dGhyb3cgWX19KSxOfSl9ZGVsZXRlQ29t''@;'; put 'put ''cHV0ZUNvbnRleHQoUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKFApLHRoaXMuaXNEZWZhdWx0Q29udGV4dChQLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cywiRGVsZXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0''@;'; put 'put ''ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKTtjb25zdCB6PXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoUCxGKTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke3ouaWR9YCxG''@;'; put 'put ''KX0pfXZhbGlkYXRlQ29udGV4dE5hbWUoUCl7aWYoIVApdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIil9aXNEZWZhdWx0Q29udGV4dChQLEY9dGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLE89IiIsej0hMSl7aWYoRi5pbmNsdWRlcyhQKSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoYCR7T30ke3o/IlxuRGVmYXVsdCBjb250ZXh0czoiK0YubWFwKChOLEwpPT5gXG4ke0wrMX0uICR7Tn1gKToiIn1gKX19fSw4MzA2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4g''@;'; put 'put ''bmV3KEx8fChMPVByb21pc2UpKShmdW5jdGlvbihXLFkpe2Z1bmN0aW9uIHEobmUpe3RyeXtKKEsubmV4dChuZSkpfWNhdGNoKGllKXtZKGllKX19ZnVuY3Rpb24gZWUobmUpe3RyeXtKKEsudGhyb3cobmUpKX1jYXRjaChpZSl7WShpZSl9fWZ1bmN0aW9uIEoobmUpe25lLmRvbmU/VyhuZS52''@;'; put 'put ''YWx1ZSk6ZnVuY3Rpb24gVShXKXtyZXR1cm4gVyBpbnN0YW5jZW9mIEw/VzpuZXcgTChmdW5jdGlvbihZKXtZKFcpfSl9KG5lLnZhbHVlKS50aGVuKHEsZWUpfUooKEs9Sy5hcHBseSh6LE58fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih6''@;'; put 'put ''KXtyZXR1cm4geiYmei5fX2VzTW9kdWxlP3o6e2RlZmF1bHQ6en19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNBUzlBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IGc9eSg3NzU3KSxCPV8oeSg2MjMwKSksdz15KDc5NSksUD15KDU5MjgpO1guU0FT''@;'; put 'put ''OUFwaUNsaWVudD1jbGFzcyBGe2NvbnN0cnVjdG9yKE4sTCxLKXt0aGlzLnNlcnZlclVybD1OLHRoaXMuam9ic1BhdGg9TCxOJiYoMCxQLmlzVXJsKShOKSx0aGlzLnJlcXVlc3RDbGllbnQ9bmV3IHcuU2FzOVJlcXVlc3RDbGllbnQoTixLKX1nZXRDb25maWcoKXtyZXR1cm57c2VydmVyVXJs''@;'; put 'put ''OnRoaXMuc2VydmVyVXJsfX1zZXRDb25maWcoTil7TiYmKHRoaXMuc2VydmVyVXJsPU4pfWV4ZWN1dGVTY3JpcHQoTixMLEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQubG9naW4oTCxLLHRoaXMuam9ic1BhdGgpO2Nv''@;'; put 'put ''bnN0IFc9TyhbLi4uTiwiZGF0YSBfbnVsbF87IiwiZmlsZSBfd2Vib3V0OyIsInB1dCAnRXhlY3V0ZWQgc2FzanMgcnVuJzsiLCJydW47Il0uam9pbigiXG4iKSksWT1gL1VzZXIgRm9sZGVycy8ke0x9L015IEZvbGRlci9zYXNqcy9ydW5uZXJgLHE9Im11bHRpcGFydC9mb3JtLWRhdGE7IGJv''@;'; put 'put ''dW5kYXJ5PSIrVy5nZXRCb3VuZGFyeSgpLEo9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjpxLCJDb250ZW50LUxlbmd0aCI6Vy5nZXRMZW5ndGhTeW5jKCksQ29ubmVjdGlvbjoia2VlcC1hbGl2ZSJ9LG5lPWAke3RoaXMuam9ic1BhdGh9''@;'; put 'put ''Lz8keyJfcHJvZ3JhbT0iK1krIiZfZGVidWc9bG9nIn1gO3JldHVybih5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChuZSxXLHZvaWQgMCxxLEopKS5yZXN1bHR9KX19O2NvbnN0IE89ej0+e2NvbnN0IE49bmV3IEIuZGVmYXVsdCxMPWBzYXNqcy1leGVjdXRlLXNhczktJHsoMCxnLmdl''@;'; put 'put ''bmVyYXRlVGltZXN0YW1wKSgiIil9LnNhc2A7cmV0dXJuIE4uYXBwZW5kKEwseix7ZmlsZW5hbWU6TCxjb250ZW50VHlwZToidGV4dC9wbGFpbiJ9KSxOfX0sOTgyMTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19h''@;'; put 'put ''d2FpdGVyfHxmdW5jdGlvbihuZSxpZSxsZSxtZSl7cmV0dXJuIG5ldyhsZXx8KGxlPVByb21pc2UpKShmdW5jdGlvbihUZSxTZSl7ZnVuY3Rpb24gamUoYil7dHJ5e3AobWUubmV4dChiKSl9Y2F0Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIFYoYil7dHJ5e3AobWUudGhyb3coYikpfWNhdGNoKHgp''@;'; put 'put ''e1NlKHgpfX1mdW5jdGlvbiBwKGIpe2IuZG9uZT9UZShiLnZhbHVlKTpmdW5jdGlvbiBfZShUZSl7cmV0dXJuIFRlIGluc3RhbmNlb2YgbGU/VGU6bmV3IGxlKGZ1bmN0aW9uKFNlKXtTZShUZSl9KX0oYi52YWx1ZSkudGhlbihqZSxWKX1wKChtZT1tZS5hcHBseShuZSxpZXx8W10pKS5uZXh0''@;'; put 'put ''KCkpfSl9LEI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKG5lKXtyZXR1cm4gbmUmJm5lLl9fZXNNb2R1bGU/bmU6e2RlZmF1bHQ6bmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TQVNWaXlhQXBpQ2xpZW50PXZvaWQg''@;'; put 'put ''MDtjb25zdCB3PXkoNTkyOCksUD1CKHkoNjIzMCkpLEY9eSgxMzk1KSxPPXkoNjkwMyksej15KDY3MiksTj15KDkwOTcpLEw9eSg5Nzc4KSxLPXkoMTM0MyksVT15KDcwNCksVz15KDY0OTYpLFk9eSgxNjIyKSxxPXkoMzU2OSksZWU9eSgzNjYpO1guU0FTVml5YUFwaUNsaWVudD1jbGFzcyBK''@;'; put 'put ''e2NvbnN0cnVjdG9yKGllLGxlLG1lLF9lKXt0aGlzLnNlcnZlclVybD1pZSx0aGlzLnJvb3RGb2xkZXJOYW1lPWxlLHRoaXMuY29udGV4dE5hbWU9bWUsdGhpcy5yZXF1ZXN0Q2xpZW50PV9lLHRoaXMuX2RlYnVnPSExLHRoaXMuc2Vzc2lvbk1hbmFnZXI9bmV3IE8uU2Vzc2lvbk1hbmFnZXIo''@;'; put 'put ''dGhpcy5zZXJ2ZXJVcmwsdGhpcy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuY29udGV4dE1hbmFnZXI9bmV3IHouQ29udGV4dE1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLmZvbGRlck1hcD1uZXcgTWFwLGllJiYoMCx3LmlzVXJs''@;'; put 'put ''KShpZSl9YXBwZW5kUmVxdWVzdChpZSxsZSxtZSl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoaWUsbGUsbWUpfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWcoaWUpe3RoaXMuX2RlYnVnPWllLHRoaXMuc2Vzc2lvbk1hbmFnZXImJih0aGlzLnNlc3Np''@;'; put 'put ''b25NYW5hZ2VyLmRlYnVnPWllKX1nZXRKb2JzSW5Gb2xkZXIoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBsZT0oMCx3LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtpZX1gOmllO3JldHVybiB0aGlzLmZvbGRl''@;'; put 'put ''ck1hcC5nZXQobGUpfHwoeWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChsZSkpLHRoaXMuZm9sZGVyTWFwLmdldChsZSl9KX1nZXRDb25maWcoKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHJvb3RGb2xkZXJOYW1lOnRoaXMucm9vdEZvbGRlck5hbWV9fXNldENvbmZpZyhp''@;'; put 'put ''ZSxsZSl7aWUmJih0aGlzLnNlcnZlclVybD1pZSksbGUmJih0aGlzLnJvb3RGb2xkZXJOYW1lPWxlKX1nZXRDb21wdXRlQ29udGV4dHMoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRl''@;'; put 'put ''Q29udGV4dHMoaWUpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHN9Z2V0TGF1bmNoZXJDb250ZXh0cyhpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVy''@;'; put 'put ''biB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldExhdW5jaGVyQ29udGV4dHMoaWUpfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKGllKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbGU9dGhpcy5leGVjdXRlU2NyaXB0LmJpbmQodGhpcyk7cmV0dXJu''@;'; put 'put ''IHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKGxlLGllKX0pfWNyZWF0ZVNlc3Npb24oaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6X2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQo''@;'; put 'put ''Ii9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIixsZSksVGU9X2UuaXRlbXMmJl9lLml0ZW1zLmxlbmd0aD9fZS5pdGVtcy5maW5kKGplPT5qZS5uYW1lPT09aWUpOm51bGw7aWYoIVRlKXRocm93IG5ldyBFcnJvcihgRXhlY3V0aW9uIGNvbnRleHQgJHtpZX0gbm90IGZvdW5kLmApO2Nv''@;'; put 'put ''bnN0e3Jlc3VsdDpTZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9jb21wdXRlL2NvbnRleHRzLyR7VGUuaWR9L3Nlc3Npb25zYCx7fSxsZSk7cmV0dXJuIFNlfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBnKHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVDb21wdXRlQ29udGV4dChpZSxsZSxtZSxfZSxUZSxTZSl9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsbGUsbWU9ImRpcmVjdCIsX2Upe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxm''@;'; put 'put ''dW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsbGUsbWUsX2UpfSl9ZWRpdENvbXB1dGVDb250ZXh0KGllLGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRo''@;'; put 'put ''aXMuY29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVDb250ZXh0KGllLGxlLG1lKX0pfWRlbGV0ZUNvbXB1dGVDb250ZXh0KGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZGVsZXRlQ29tcHV0ZUNv''@;'; put 'put ''bnRleHQoaWUsbGUpfSl9ZXhlY3V0ZVNjcmlwdChpZSxsZSxtZSxfZSxUZT1udWxsLFNlPSExLGplPSExLFY9ITAscCxiPSExLHgpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxZLmV4ZWN1dGVPbkNvbXB1dGVBcGkpKHRoaXMucmVxdWVzdENsaWVu''@;'; put 'put ''dCx0aGlzLnNlc3Npb25NYW5hZ2VyLHRoaXMucm9vdEZvbGRlck5hbWUsaWUsbGUsbWUsX2UsVGUsU2UsamUsVixwLGIseCl9KX1nZXRGaWxlQ29udGVudChpZSxsZSxtZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IF9lPXlpZWxkIHRoaXMuZ2V0Rmls''@;'; put 'put ''ZVVyaShpZSxsZSxtZSkuY2F0Y2goVGU9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoVGUsYEVycm9yIHdoaWxlIGdldHRpbmcgZmlsZSBVUkkgZm9yOiAke2xlfSBpbiBmb2xkZXI6ICR7aWV9LiBgKX0pO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2Vy''@;'; put 'put ''dmVyVXJsfSR7X2V9L2NvbnRlbnRgLG1lKS50aGVuKFRlPT5UZS5yZXN1bHQpfSl9dXBkYXRlRmlsZUNvbnRlbnQoaWUsbGUsbWUsX2Upe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT15aWVsZCB0aGlzLmdldEZpbGVVcmkoaWUsbGUsX2UpLmNhdGNo''@;'; put 'put ''KFY9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoVixgRXJyb3Igd2hpbGUgZ2V0dGluZyBmaWxlIFVSSSBmb3I6ICR7bGV9IGluIGZvbGRlcjogJHtpZX0uIGApfSkse3Jlc3VsdDpTZSxldGFnOmplfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7''@;'; put 'put ''VGV9YCxfZSk7aWYoIVNlfHwhamUpdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7bGV9IGRvZXMgbm90IGhhdmUgYW4gRVRhZywgb3IgcmVxdWVzdCBmYWlsZWQuYCk7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wdXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtUZX0vY29udGVudGAsbWUs''@;'; put 'put ''X2UseyJJZi1NYXRjaCI6amUsIkNvbnRlbnQtVHlwZSI6U2UuY29udGVudFR5cGV9KS50aGVuKFY9PlYucmVzdWx0KX0pfWdldEZvbGRlcihpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAv''@;'; put 'put ''Zm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtpZX1gLGxlKS50aGVuKG1lPT5tZS5yZXN1bHQpfSl9Y3JlYXRlRmlsZShpZSxsZSxtZSxfZSxUZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFtZSYmIV9lKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBV''@;'; put 'put ''Ukkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7IV9lJiZtZSYmKF9lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKG1lLFRlKSk7Y29uc3QgU2U9e0FjY2VwdDoiYXBwbGljYXRpb24vdm5kLnNhcy5maWxlK2pzb24iLCJDb250ZW50LURpc3Bvc2l0aW9uIjpgZmlsZW5hbWU9''@;'; put 'put ''IiR7aWV9IjtgfSxqZT1uZXcgUC5kZWZhdWx0O3JldHVybiBqZS5hcHBlbmQoImZpbGUiLGxlLGllKSwoeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9maWxlcy9maWxlcz9wYXJlbnRGb2xkZXJVcmk9JHtfZX0mdHlwZURlZk5hbWU9ZmlsZSNyYXdVcGxvYWRgLGplLFRlLCJtdWx0''@;'; put 'put ''aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2plLl9ib3VuZGFyeSxTZSkpLnJlc3VsdH0pfWNyZWF0ZUZvbGRlcihpZSxsZSxtZSxfZSxUZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFNlPUkubG9nZ2VyfHxfO2lmKCFsZSYmIW1lKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7aWYoIW1lJiZsZSlpZihtZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShsZSxfZSkpe2lmKFRlKXtjb25zdCBWPWxlKyIvIitpZTsoeWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoVixfZSkpJiYo''@;'; put 'put ''eWllbGQgdGhpcy5kZWxldGVGb2xkZXIobGUrIi8iK2llLF9lKSl9fWVsc2V7U2UuaW5mbyhgUGFyZW50IGZvbGRlciBhdCBwYXRoICcke2xlfScgaXMgbm90IHByZXNlbnQuYCk7Y29uc3QgVj1sZS5zdWJzdHJpbmcoMCxsZS5sYXN0SW5kZXhPZigiLyIpKSxwPWAke2xlLnNwbGl0KCIvIiku''@;'; put 'put ''cG9wKCl9YDtpZigiIj09PVYpdGhyb3cgbmV3IEYuUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IobGUsdGhpcy5zZXJ2ZXJVcmwsX2UpO1NlLmluZm8oYENyZWF0aW5nIHBhcmVudCBmb2xkZXI6XG4nJHtwfScgaW4gJyR7Vn0nYCk7Y29uc3QgYj15aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcihwLFYs''@;'; put 'put ''dm9pZCAwLF9lKTtTZS5pbmZvKGBQYXJlbnQgZm9sZGVyICcke3B9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC5gKSxtZT1gL2ZvbGRlcnMvZm9sZGVycy8ke2IuaWR9YH1jb25zdHtyZXN1bHQ6amV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAvZm9sZGVycy9mb2xk''@;'; put 'put ''ZXJzP3BhcmVudEZvbGRlclVyaT0ke21lfWAse25hbWU6aWUsdHlwZToiZm9sZGVyIn0sX2UpLmNhdGNoKFY9Pntjb25zdHttZXNzYWdlOnAscmVzcG9uc2U6Yn09VjtpZihwJiZiJiZiLmRhdGEmJmIuZGF0YS5tZXNzYWdlKXtjb25zdHtzdGF0dXM6eH09Yix7bWVzc2FnZTpDfT1iLmRhdGEs''@;'; put 'put ''VD1bcCxDXS5tYXAoaj0+L1wuJC8udGVzdChqKT9qOmAke2p9LmApO3Rocm93IVRlJiY0MDk9PT14JiZULnB1c2goJ1RvIG92ZXJyaWRlLCBwbGVhc2Ugc2V0ICJpc0ZvcmNlZCIgdG8gInRydWUiLicpLFQuam9pbigiICIpfXRocm93IFZ9KTtyZXR1cm4geWllbGQgdGhpcy5wb3B1bGF0ZUZv''@;'; put 'put ''bGRlck1hcChgJHtsZX0vJHtpZX1gLF9lKSxqZX0pfWNyZWF0ZUpvYkRlZmluaXRpb24oaWUsbGUsbWUsX2UsVGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighbWUmJiFfZSl0aHJvdyBuZXcgRXJyb3IoIlBhdGggdG8gb3IgVVJJIG9mIHRoZSBwYXJlbnQg''@;'; put 'put ''Zm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiFfZSYmbWUmJihfZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShtZSxUZSkpLHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JEZWZpbml0aW9ucy9kZWZpbml0aW9ucz9wYXJlbnRGb2xkZXJVcmk9''@;'; put 'put ''JHtfZX1gLHtuYW1lOmllLHBhcmFtZXRlcnM6W3tuYW1lOiJfYWRkamVzYmVnaW5lbmRtYWNyb3MiLHR5cGU6IkNIQVJBQ1RFUiIsZGVmYXVsdFZhbHVlOiJmYWxzZSJ9XSx0eXBlOiJDb21wdXRlIixjb2RlOmxlfSxUZSl9KX1nZXRBdXRoQ29kZShpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGxlPWAke3RoaXMuc2VydmVyVXJsfS9TQVNMb2dvbi9vYXV0aC9hdXRob3JpemU/Y2xpZW50X2lkPSR7aWV9JnJlc3BvbnNlX3R5cGU9Y29kZWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQobGUsdm9pZCAwLCJ0ZXh0L3BsYWlu''@;'; put 'put ''IikudGhlbihfZT0+X2UucmVzdWx0KS50aGVuKF9lPT5nKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgVGU9IiI7aWYoKDAsTi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoX2UpKXtjb25zdCBqZT0oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmF1dGhvcml6ZShfZSkpLnNw''@;'; put 'put ''bGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLFY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFYuaW5uZXJIVE1MPWplLFRlPVYucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHQsVGV9e2NvbnN0IFNlPV9lLnNwbGl0KCI8Ym9keT4i''@;'; put 'put ''KVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLGplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBqZS5pbm5lckhUTUw9U2UsamUmJihUZT1qZS5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCksVGV9fSkpLmNhdGNoKCgpPT5udWxsKX0pfWdldEFjY2Vz''@;'; put 'put ''c1Rva2VuKGllLGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAscS5nZXRBY2Nlc3NUb2tlbkZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxpZSxsZSxtZSl9KX1yZWZyZXNoVG9rZW5zKGllLGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsZWUucmVmcmVzaFRva2Vuc0ZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxpZSxsZSxtZSl9KX1kZWxldGVDbGllbnQoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT10aGlzLnNlcnZl''@;'; put 'put ''clVybCtgL29hdXRoL2NsaWVudHMvJHtpZX1gO3JldHVybih5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKG1lLGxlKSkucmVzdWx0fSl9ZXhlY3V0ZUNvbXB1dGVKb2IoaWUsbGUsbWUsX2UsVGUsU2U9ITAsamU9ITEsVixwPSExLGIpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQg''@;'; put 'put ''MCxmdW5jdGlvbiooKXtsZXQgeD0oVGV8fHt9KS5hY2Nlc3NfdG9rZW47aWYoVGUmJih7YWNjZXNzX3Rva2VuOnh9PXlpZWxkKDAsVS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxUZSkpLCgwLHcuaXNSZWxhdGl2ZVBhdGgpKGllKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lIik7Y29uc3QgQz1pZS5zcGxpdCgiLyIpLFQ9Qy5wb3AoKSxIPUMuam9pbigiLyIpLGo9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9v''@;'; put 'put ''dEZvbGRlck5hbWV9LyR7SH1gOkg7eWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChqLHgpLmNhdGNoKHRlPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHRlLCJFcnJvciB3aGlsZSBwb3B1bGF0aW5nIGZvbGRlciBtYXAuICIpfSk7Y29uc3QgRT10aGlzLmZvbGRlck1hcC5nZXQoaik7''@;'; put 'put ''aWYoIUUpdGhyb3cgbmV3IEVycm9yKGBUaGUgZm9sZGVyICcke2p9JyB3YXMgbm90IGZvdW5kIG9uICcke3RoaXMuc2VydmVyVXJsfSdgKTtjb25zdCBtPUU/LmZpbmQodGU9PnRlLm5hbWU9PT1UKTtpZighbSl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO2xldCBBPW0/''@;'; put 'put ''LmNvZGU7aWYoIUEpe2NvbnN0IHRlPW0/LmxpbmtzLmZpbmQod2U9PiJnZXRSZXNvdXJjZSI9PT13ZS5yZWwpO2lmKCF0ZSl0aHJvdyBuZXcgRXJyb3IoIlVSSSBvZiBqb2IgZGVmaW5pdGlvbiB3YXMgbm90IGZvdW5kLiIpO2NvbnN0e3Jlc3VsdDpzZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xp''@;'; put 'put ''ZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke3RlLmhyZWZ9YCx4KS5jYXRjaCh3ZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKSh3ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IgZGVmaW5pdGlvbi4gIil9KTtBPXNlLmNvZGUsbS5jb2RlPUF9QXx8KEE9IiIpO2NvbnN0IGFlPUEucmVw''@;'; put 'put ''bGFjZSgvXHJcbi9nLCJcbiIpLnNwbGl0KCJcbiIpO3JldHVybiB5aWVsZCB0aGlzLmV4ZWN1dGVTY3JpcHQoaWUsYWUsbGUsVGUsX2UsbWUsamUsU2UsVixwLGIpfSl9ZXhlY3V0ZUpvYihpZSxsZSxtZSxfZSxUZSl7dmFyIFNlLGplLFY7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2xldCBwPShUZXx8e30pLmFjY2Vzc190b2tlbjtpZihUZSYmKHthY2Nlc3NfdG9rZW46cH09eWllbGQoMCxVLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LFRlKSksKDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlJlbGF0aXZlIHBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVyIG5hbWUuIik7Y29uc3QgYj1pZS5zcGxpdCgiLyIpLHg9Yi5wb3AoKSxDPWIuam9pbigiLyIpLFQ9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZv''@;'; put 'put ''bGRlck5hbWV9LyR7Q31gOkM7eWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChULHApO2NvbnN0IEg9dGhpcy5mb2xkZXJNYXAuZ2V0KFQpO2lmKCFIKXRocm93IG5ldyBFcnJvcihgVGhlIGZvbGRlciAnJHtUfScgd2FzIG5vdCBmb3VuZCBvbiAnJHt0aGlzLnNlcnZlclVybH0nLmApO2Nv''@;'; put 'put ''bnN0IGo9SD8uZmluZChEZT0+RGUubmFtZT09PXgpO2xldCBFPVtdO2lmKF9lJiZPYmplY3Qua2V5cyhfZSkubGVuZ3RoJiYoRT15aWVsZCB0aGlzLnVwbG9hZFRhYmxlcyhfZSxwKSksIWopdGhyb3cgbmV3IEVycm9yKCJKb2Igd2FzIG5vdCBmb3VuZC4iKTtjb25zdCBtPW51bGw9PT0oU2U9''@;'; put 'put ''aj8ubGlua3MuZmluZChEZT0+ImdldFJlc291cmNlIj09PURlLnJlbCkpfHx2b2lkIDA9PT1TZT92b2lkIDA6U2UuaHJlZix7cmVzdWx0OkF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHttfWAscCksYWU9e19jb250ZXh0TmFtZTpsZSxfcHJvZ3Jh''@;'; put 'put ''bTpgJHtUfS8ke3h9YCxfd2ViaW5fZmlsZV9jb3VudDpFLmxlbmd0aCxfT01JVEpTT05MSVNUSU5HOiEwLF9PTUlUSlNPTkxPRzohMCxfb21pdFNlc3Npb25SZXN1bHRzOiExLF9PTUlUVEVYVExJU1RJTkc6ITAsX09NSVRURVhUTE9HOiEwfTttZSYmKGFlLl9PTUlUVEVYVExPRz0iZmFsc2Ui''@;'; put 'put ''LGFlLl9vbWl0U2Vzc2lvblJlc3VsdHM9ImZhbHNlIixhZS5fREVCVUc9MTMxKSxFLmZvckVhY2goKERlLEZlKT0+e2FlW2Bfd2ViaW5fZmlsZXVyaSR7RmUrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7RGUuZmlsZS5pZH1gLGFlW2Bfd2ViaW5fbmFtZSR7RmUrMX1gXT1EZS50YWJsZU5hbWV9KTtj''@;'; put 'put ''b25zdCB0ZT17bmFtZTpgZXhlYy0ke3h9YCxkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsam9iRGVmaW5pdGlvbjpBLGFyZ3VtZW50czphZX0se3Jlc3VsdDpzZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkV4ZWN1dGlvbi9qb2Jz''@;'; put 'put ''P19hY3Rpb249d2FpdGAsdGUscCksd2U9eWllbGQgdGhpcy5wb2xsSm9iU3RhdGUoc2UsVGUpLmNhdGNoKERlPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKERlLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfSkse3Jlc3VsdDpVZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xp''@;'; put 'put ''ZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vam9iRXhlY3V0aW9uL2pvYnMvJHtzZS5pZH1gLHApO2xldCBKZSxvdDtjb25zdCB4ZT1VZS5yZXN1bHRzWyJfd2Vib3V0Lmpzb24iXSx2ZT1VZS5saW5rcy5maW5kKERlPT4ibG9nIj09PURlLnJlbCk7aWYoeGUmJihKZT15aWVsZCB0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7eGV9L2NvbnRlbnRgLHAsInRleHQvcGxhaW4iKSksbWUmJnZlJiYob3Q9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke3ZlLmhyZWZ9L2NvbnRlbnRgLHApLnRoZW4oRGU9PkRlLnJlc3Vs''@;'; put 'put ''dC5pdGVtcy5tYXAoRmU9PkZlLmxpbmUpLmpvaW4oIlxuIikpKSwiZmFpbGVkIj09PXdlKXRocm93IG5ldyBGLkpvYkV4ZWN1dGlvbkVycm9yKG51bGw9PT0oamU9VWUuZXJyb3IpfHx2b2lkIDA9PT1qZT92b2lkIDA6amUuZXJyb3JDb2RlLG51bGw9PT0oVj1VZS5lcnJvcil8fHZvaWQgMD09''@;'; put 'put ''PVY/dm9pZCAwOlYubWVzc2FnZSxvdCk7Y29uc3QgWGU9e3Jlc3VsdDpKZT8ucmVzdWx0LGxvZzpvdH0se2Vycm9yOnplfT1VZTtyZXR1cm4gemUmJihYZS5lcnJvcj16ZSksWGV9KX1wb3B1bGF0ZUZvbGRlck1hcChpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe2NvbnN0IG1lPSgwLHcuaXNSZWxhdGl2ZVBhdGgpKGllKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke2llfWA6aWU7aWYodGhpcy5mb2xkZXJNYXAuZ2V0KG1lKSlyZXR1cm47Y29uc3QgX2U9Ii9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iK21lLHtyZXN1bHQ6VGV9PXlpZWxk''@;'; put 'put ''IHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7X2V9YCxsZSkuY2F0Y2goVj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShWLCJFcnJvciB3aGlsZSBnZXR0aW5nIGZvbGRlci4gIil9KTtpZighVGUpdGhyb3cgbmV3IEVycm9yKGBUaGUgcGF0aCAke21lfSBkb2VzIG5vdCBleGlzdCBvbiAk''@;'; put 'put ''e3RoaXMuc2VydmVyVXJsfWApO2NvbnN0e3Jlc3VsdDpTZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgL2ZvbGRlcnMvZm9sZGVycy8ke1RlLmlkfS9tZW1iZXJzP2xpbWl0PSR7VGUubWVtYmVyQ291bnQ8NTAwPzUwMDpUZS5tZW1iZXJDb3VudH1gLGxlKS5jYXRjaChWPT57dGhy''@;'; put 'put ''b3coMCxMLnByZWZpeE1lc3NhZ2UpKFYsIkVycm9yIHdoaWxlIGdldHRpbmcgbWVtYmVycy4gIil9KTt0aGlzLmZvbGRlck1hcC5zZXQobWUsU2UuaXRlbXMpfSl9cG9sbEpvYlN0YXRlKGllLGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAs''@;'; put 'put ''Sy5wb2xsSm9iU3RhdGUpKHRoaXMucmVxdWVzdENsaWVudCxpZSx0aGlzLmRlYnVnLGxlLG1lKX0pfXVwbG9hZFRhYmxlcyhpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFcudXBsb2FkVGFibGVzKSh0aGlzLnJlcXVlc3RDbGllbnQsaWUs''@;'; put 'put ''bGUpfSl9Z2V0Rm9sZGVyRGV0YWlscyhpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPSgwLHcuaXNVcmkpKGllKT9pZTpgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7aWV9YCx7cmVzdWx0Ol9lfT15aWVsZCB0aGlzLnJlcXVlc3RD''@;'; put 'put ''bGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7bWV9YCxsZSkuY2F0Y2goVGU9PntpZihUZSBpbnN0YW5jZW9mIEYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBUZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYoX2UpcmV0dXJuIF9lfSl9Z2V0Rm9sZGVyVXJpKGllLGxlKXtyZXR1cm4gZyh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9eWllbGQgdGhpcy5nZXRGb2xkZXJEZXRhaWxzKGllLGxlKTtpZihtZSlyZXR1cm5gL2ZvbGRlcnMvZm9sZGVycy8ke21lLmlkfWB9KX1nZXRGaWxlVXJpKGllLGxlLG1lKXt2YXIgX2U7cmV0dXJuIGcodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPXlpZWxkIHRoaXMubGlzdEZvbGRlcihpZSxtZSwxZTMse3JldHVybkRldGFpbHM6ITB9KS5jYXRjaChqZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShqZSxgRXJyb3Igd2hpbGUgbGlzdGluZyBmb2xkZXI6ICR7aWV9LiBgKX0pO2lmKCFU''@;'; put 'put ''ZXx8IVRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYE5vIG1lbWJlcnMgZm91bmQgaW4gZm9sZGVyOiAke2llfWApO2NvbnN0IFNlPW51bGw9PT0oX2U9VGUuZmluZChqZT0+amUubmFtZT09PWxlKSl8fHZvaWQgMD09PV9lP3ZvaWQgMDpfZS51cmk7aWYoIVNlKXRocm93IG5ldyBFcnJvcihg''@;'; put 'put ''RmlsZSAke2xlfSBub3QgZm91bmQgaW4gZm9sZGVyOiAke2llfWApO3JldHVybiBTZX0pfWdldFJlY3ljbGVCaW5VcmkoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6bWV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhp''@;'; put 'put ''cy5zZXJ2ZXJVcmx9L2ZvbGRlcnMvZm9sZGVycy9AbXlSZWN5Y2xlQmluYCxpZSkuY2F0Y2goX2U9PntpZihfZSBpbnN0YW5jZW9mIEYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBfZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYobWUpcmV0dXJuYC9mb2xkZXJzL2ZvbGRlcnMvJHttZS5pZH1g''@;'; put 'put ''fSl9Z2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShpZSxsZSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoaWUs''@;'; put 'put ''bGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5SWQoaWUsbGUpfSl9bGlzdEZvbGRlcihpZSxsZSxtZT0yMCxfZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IFRlPSgwLHcuaXNVcmkpKGllKT9pZTp5aWVsZCB0aGlzLmdldEZvbGRlclVyaShpZSxsZSkse3Jlc3VsdDpTZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke1RlfS9tZW1iZXJzP2xpbWl0PSR7bWV9YCxsZSk7bGV0IGpl''@;'; put 'put ''PVtdO3JldHVybiBTZSYmU2UuaXRlbXMmJihqZT1fZT8ucmV0dXJuRGV0YWlscz9TZS5pdGVtczpTZS5pdGVtcy5tYXAoVj0+Vi5uYW1lKSksamV9KX1tb3ZlRm9sZGVyKGllLGxlLG1lLF9lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9aWUuc3Bs''@;'; put 'put ''aXQoIi8iKS5wb3AoKTtpZih5aWVsZCB0aGlzLmdldEZvbGRlckRldGFpbHMobGUsX2UpKW1lPVRlO2Vsc2V7bGV0IHg9bGUuc3BsaXQoIi8iKTt4LnNwbGljZSh4Lmxlbmd0aC0xLDEpLGxlPXguam9pbigiLyIpfWNvbnN0IGplPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGllLF9lKSxWPXlp''@;'; put 'put ''ZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGxlLF9lKTtpZighamUpcmV0dXJuO2NvbnN0IHA9amU/LnNwbGl0KCIvIikucG9wKCkse3Jlc3VsdDpifT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucGF0Y2goYCR7dGhpcy5zZXJ2ZXJVcmx9JHtqZX1gLHtpZDpwLG5hbWU6bWUscGFyZW50Rm9sZGVy''@;'; put 'put ''VXJpOlZ9LF9lKS5jYXRjaCh4PT57dGhyb3cgeC5jb2RlJiYiRU5PVEZPVU5EIj09PXguY29kZT97Ym9keTp7bWVzc2FnZTpgRm9sZGVyICcke2llLnNwbGl0KCIvIikucG9wKCl9JyB3YXMgbm90IGZvdW5kLmB9fTp4fSk7cmV0dXJuIGJ8fHZvaWQgMH0pfWRlbGV0ZUZvbGRlcihpZSxsZSl7''@;'; put 'put ''cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPXlpZWxkIHRoaXMuZ2V0UmVjeWNsZUJpblVyaShsZSksX2U9aWUuc3BsaXQoIi8iKS5wb3AoKXx8IiIsVGU9bmV3IERhdGUsamU9X2UrIiAiK1RlLnRvTG9jYWxlRGF0ZVN0cmluZygpKyIgIitUZS50b0xv''@;'; put 'put ''Y2FsZVRpbWVTdHJpbmcoKTtyZXR1cm4geWllbGQgdGhpcy5tb3ZlRm9sZGVyKGllLG1lLGplLGxlKX0pfX19LDU5NTY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcsWSxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVBy''@;'; put 'put ''b21pc2UpKShmdW5jdGlvbihuZSxpZSl7ZnVuY3Rpb24gbGUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gbWUoVGUpe3RyeXtfZShlZS50aHJvdyhUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP25lKFRlLnZh''@;'; put 'put ''bHVlKTpmdW5jdGlvbiBKKG5lKXtyZXR1cm4gbmUgaW5zdGFuY2VvZiBxP25lOm5ldyBxKGZ1bmN0aW9uKGllKXtpZShuZSl9KX0oVGUudmFsdWUpLnRoZW4obGUsbWUpfV9lKChlZT1lZS5hcHBseShXLFl8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01v''@;'; put 'put ''ZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgXz15KDU5MjgpLGc9eSgxMjMwKSxCPXkoOTgyMSksdz15KDgzMDYpLFA9eSgzNDY3KSxGPXkoMTUyNyksTz15KDM5MDApLHo9eSg0NTg4KSxOPXkoMzYwMiksTD15KDgyMTcpLEs9e3NlcnZlclVybDoiIixwYXRoU0FTSlM6Ii9TQVNqc0FwaS9zdHAv''@;'; put 'put ''ZXhlY3V0ZSIscGF0aFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIixwYXRoU0FTVml5YToiL1NBU0pvYkV4ZWN1dGlvbiIsYXBwTG9jOiIvUHVibGljL3NlZWRhcHAiLHNlcnZlclR5cGU6Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZGVidWc6ITEsY29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0''@;'; put 'put ''aW9uIGNvbXB1dGUgY29udGV4dCIsdXNlQ29tcHV0ZUFwaTpudWxsLGxvZ2luTWVjaGFuaXNtOmcuTG9naW5NZWNoYW5pc20uRGVmYXVsdH07WC5kZWZhdWx0PWNsYXNzIFV7Y29uc3RydWN0b3IoWSl7dGhpcy5zYXNqc0NvbmZpZz1uZXcgZy5TQVNqc0NvbmZpZyx0aGlzLmpvYnNQYXRoPSIi''@;'; put 'put ''LHRoaXMuc2FzVml5YUFwaUNsaWVudD1udWxsLHRoaXMuc2FzOUFwaUNsaWVudD1udWxsLHRoaXMuc2FzSlNBcGlDbGllbnQ9bnVsbCx0aGlzLmZpbGVVcGxvYWRlcj1udWxsLHRoaXMuYXV0aE1hbmFnZXI9bnVsbCx0aGlzLnJlcXVlc3RDbGllbnQ9bnVsbCx0aGlzLndlYkpvYkV4ZWN1dG9y''@;'; put 'put ''PW51bGwsdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmplc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bnVsbCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz0oKT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7dmFyIHEsZWUsSixuZSxpZTt5aWVsZCBudWxsPT09KHE9dGhpcy53ZWJKb2JFeGVjdXRvcil8fHZvaWQgMD09PXE/dm9pZCAwOnEucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShlZT10aGlzLmNvbXB1dGVKb2JFeGVjdXRvcil8fHZvaWQgMD09PWVl''@;'; put 'put ''P3ZvaWQgMDplZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KEo9dGhpcy5qZXNKb2JFeGVjdXRvcil8fHZvaWQgMD09PUo/dm9pZCAwOkoucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShuZT10aGlzLmZpbGVVcGxvYWRlcil8fHZvaWQgMD09PW5l''@;'; put 'put ''P3ZvaWQgMDpuZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KGllPXRoaXMuc2FzanNKb2JFeGVjdXRvcil8fHZvaWQgMD09PWllP3ZvaWQgMDppZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKX0pLHRoaXMuc2V0VmVyYm9zZU1vZGU9cT0+e3ZhciBlZTtudWxsPT09KGVl''@;'; put 'put ''PXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PWVlfHxlZS5zZXRWZXJib3NlTW9kZShxKX0sdGhpcy5zYXNqc0NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSyksWSksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX1nZXRDc3JmVG9rZW4oWT0iZ2VuZXJhbCIpe3Zh''@;'; put 'put ''ciBxO3JldHVybiBudWxsPT09KHE9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09cT92b2lkIDA6cS5nZXRDc3JmVG9rZW4oWSl9ZXhlY3V0ZVNjcmlwdCh7bGluZXNPZkNvZGU6WSxmaWxlTmFtZTpxLGNvbnRleHROYW1lOmVlLHJ1blRpbWU6SixhdXRoQ29uZmlnOm5lLGF1dGhDb25m''@;'; put 'put ''aWdTYXM5OmllLGRlYnVnOmxlfSl7dmFyIG1lLF9lO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbTy5TZXJ2ZXJUeXBlLlNhczksTy5TZXJ2ZXJUeXBlLlNhc2pzLE8uU2VydmVyVHlwZS5T''@;'; put 'put ''YXNWaXlhXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhczkpe2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoIkF1dGggY29uZmlnIGZvciBzYXM5IGlzIG5vdCBwcm92aWRlZCIpO3JldHVybiB5aWVsZCBudWxsPT09KG1lPXRoaXMuc2FzOUFwaUNsaWVudCl8''@;'; put 'put ''fHZvaWQgMD09PW1lP3ZvaWQgMDptZS5leGVjdXRlU2NyaXB0KFksaWUudXNlck5hbWUsaWUucGFzc3dvcmQpfWlmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcylyZXR1cm4geWllbGQgbnVsbD09PShfZT10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9p''@;'; put 'put ''ZCAwPT09X2U/dm9pZCAwOl9lLmV4ZWN1dGVTY3JpcHQoWS5qb2luKCJcbiIpLEosbmUpO2lmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNWaXlhKXtpZighKGVlPWVlfHx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO2lmKCFxKXRocm93IG5ldyBFcnJvcigiRmlsZSBuYW1lIGlzIHJlcXVpcmVkIGluIGNhc2Ugb2YgU0FTIFZJWUEuIFBsZWFzZSBw''@;'; put 'put ''cm92aWRlIGEgYGZpbGVOYW1lYC4iKTtyZXR1cm4geWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmV4ZWN1dGVTY3JpcHQocSxZLGVlLG5lLG51bGwsbGV8fHRoaXMuc2FzanNDb25maWcuZGVidWcpfX0pfWV4ZWN1dGVKb2IoWSxxLGVlKXt2YXIgSjtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtPLlNlcnZlclR5cGUuU2FzanNdKSx5aWVsZCBudWxsPT09KEo9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PUo/dm9pZCAwOkouZXhlY3V0ZUpvYihZLHEsZWUpfSl9''@;'; put 'put ''Z2V0Q29tcHV0ZUNvbnRleHRzKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRzIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQu''@;'; put 'put ''Z2V0Q29tcHV0ZUNvbnRleHRzKFkpfSl9Z2V0TGF1bmNoZXJDb250ZXh0cyhZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldExhdW5jaGVyQ29udGV4dHMiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlp''@;'; put 'put ''ZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRMYXVuY2hlckNvbnRleHRzKFkpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlz''@;'; put 'put ''LnNhc1ZpeWFBcGlDbGllbnQuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpfWdldEV4ZWN1dGFibGVDb250ZXh0cyhZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEV4ZWN1dGFibGVDb250ZXh0cyIs''@;'; put 'put ''W08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEV4ZWN1dGFibGVDb250ZXh0cyhZKX0pfWNyZWF0ZUNvbXB1dGVDb250ZXh0KFkscSxlZSxKLG5lLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUNvbXB1dGVDb250ZXh0IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlQ29tcHV0ZUNvbnRleHQoWSxxLGVlLEosbmUsaWUpfSl9Y3JlYXRlTGF1bmNoZXJDb250ZXh0KFkscSxlZSxK''@;'; put 'put ''KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUxhdW5jaGVyQ29udGV4dCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUxhdW5jaGVyQ29u''@;'; put 'put ''dGV4dChZLHEsZWUsSil9KX1lZGl0Q29tcHV0ZUNvbnRleHQoWSxxLGVlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImVkaXRDb21wdXRlQ29udGV4dCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQg''@;'; put 'put ''dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmVkaXRDb21wdXRlQ29udGV4dChZLHEsZWUpfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoWSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNvbXB1dGVDb250''@;'; put 'put ''ZXh0IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRlQ29tcHV0ZUNvbnRleHQoWSxxKX0pfWdldENvbXB1dGVDb250ZXh0QnlOYW1lKFkscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlz''@;'; put 'put ''LmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5TmFtZSIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFkscSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoWSxxKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlJZCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlJZChZLHEpfSl9''@;'; put 'put ''Y3JlYXRlU2Vzc2lvbihZLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlU2Vzc2lvbiIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZVNl''@;'; put 'put ''c3Npb24oWSxxKX0pfWNyZWF0ZUZvbGRlcihZLHEsZWUsSixuZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBuZT95aWVsZCBuZS5jcmVhdGVGb2xkZXIoWSxxLGVlLEosaWUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGb2xk''@;'; put 'put ''ZXIoWSxxLGVlLEosaWUpfSl9Y3JlYXRlRmlsZShZLHEsZWUsSixuZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBpZT95aWVsZCBpZS5jcmVhdGVGaWxlKFkscSxlZSxKLG5lKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRmls''@;'; put 'put ''ZShZLHEsZWUsSixuZSl9KX1nZXRGaWxlQ29udGVudChZLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RmlsZUNvbnRlbnQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2Fz''@;'; put 'put ''Vml5YUFwaUNsaWVudC5nZXRGaWxlQ29udGVudChZLHEsZWUpfSl9dXBkYXRlRmlsZUNvbnRlbnQoWSxxLGVlLEope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgidXBkYXRlRmlsZUNvbnRlbnQiLFtPLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC51cGRhdGVGaWxlQ29udGVudChZLHEsZWUsSil9KX1nZXRGb2xkZXIoWSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEZv''@;'; put 'put ''bGRlciIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZvbGRlcihZLHEpfSl9ZGVsZXRlRm9sZGVyKFkscSl7dmFyIGVlO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBv''@;'; put 'put ''cnRlZCgiZGVsZXRlRm9sZGVyIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCBudWxsPT09KGVlPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PWVlP3ZvaWQgMDplZS5kZWxldGVGb2xkZXIoWSxxKX0pfWxpc3RGb2xkZXIoWSxxLGVlLEo9ITEpe3ZhciBuZTtyZXR1cm4g''@;'; put 'put ''SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImxpc3RGb2xkZXIiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0obmU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09bmU/dm9pZCAwOm5lLmxp''@;'; put 'put ''c3RGb2xkZXIoWSxxLGVlLHtyZXR1cm5EZXRhaWxzOkp9KX0pfW1vdmVGb2xkZXIoWSxxLGVlLEope3ZhciBuZTtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoIm1vdmVGb2xkZXIiLFtPLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''Vml5YV0pLHlpZWxkIG51bGw9PT0obmU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09bmU/dm9pZCAwOm5lLm1vdmVGb2xkZXIoWSxxLGVlLEopfSl9Y3JlYXRlSm9iRGVmaW5pdGlvbihZLHEsZWUsSixuZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVKb2JEZWZpbml0aW9uIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxpZT95aWVsZCBpZS5jcmVhdGVKb2JEZWZpbml0aW9uKFkscSxlZSxKLG5lKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlSm9iRGVm''@;'; put 'put ''aW5pdGlvbihZLHEsZWUsSixuZSl9KX1nZXRBdXRoQ29kZShZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEF1dGhDb2RlIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFB''@;'; put 'put ''cGlDbGllbnQuZ2V0QXV0aENvZGUoWSl9KX1nZXRBY2Nlc3NUb2tlbihZLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QWNjZXNzVG9rZW4iLFtPLlNlcnZlclR5cGUuU2FzVml5YSxPLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbihZLGVlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4oWSxxLGVlKX0pfXJl''@;'; put 'put ''ZnJlc2hUb2tlbnMoWSxxLGVlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoInJlZnJlc2hUb2tlbnMiLFtPLlNlcnZlclR5cGUuU2FzVml5YSxPLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''LnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5yZWZyZXNoVG9rZW5zKGVlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQucmVmcmVzaFRva2VucyhZLHEsZWUpfSl9ZGVsZXRlQ2xpZW50KFkscSl7cmV0dXJuIEkodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDbGllbnQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDbGllbnQoWSxxKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuc2FzanNDb25maWd9Z2V0VXNlck5hbWUoKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci51c2VyTmFtZX1zZXRTQVNqc0NvbmZpZyhZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5zYXNqc0NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24o''@;'; put 'put ''e30sdGhpcy5zYXNqc0NvbmZpZyksWSksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX0pfXNldERlYnVnU3RhdGUoWSl7dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zz1ZLHRoaXMuc2FzVml5YUFwaUNsaWVudCYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz1ZKX1jaGVja1Nlc3Npb24oKXty''@;'; put 'put ''ZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIuY2hlY2tTZXNzaW9uKCl9KX1sb2dJbihZLHEsZWUsSj17fSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2FzanNDb25maWcubG9naW5N''@;'; put 'put ''ZWNoYW5pc209PT1nLkxvZ2luTWVjaGFuaXNtLkRlZmF1bHQpe2lmKCFZfHwhcSl0aHJvdyBuZXcgRXJyb3IoIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2luIG1lY2hhbmlzbS4iKTtyZXR1cm4gdGhpcy5hdXRoTWFuYWdl''@;'; put 'put ''ci5sb2dJbihZLHEpfWlmKHR5cGVvZiB3aW5kb3c+InUiKXRocm93IG5ldyBFcnJvcigiVGhlIHJlZGlyZWN0ZWQgbG9naW4gbWVjaGFuaXNtIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuIik7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIucmVkaXJlY3RlZExvZ0lu''@;'; put 'put ''KEopfSl9bG9nT3V0KCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIubG9nT3V0KCl9dXBsb2FkRmlsZShZLHEsZWUsSj17fSxuZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe0o9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcp''@;'; put 'put ''LEopO2NvbnN0IGllPXtmaWxlczpxLHBhcmFtczplZX07cmV0dXJuIHlpZWxkIHRoaXMuZmlsZVVwbG9hZGVyLmV4ZWN1dGUoWSxpZSxKLG5lKX0pfXJlcXVlc3QoWSxxLGVlPXt9LEosbmUsaWU9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtlZT1PYmplY3Qu''@;'; put 'put ''YXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksZWUpO2NvbnN0IGxlPSgwLF8udmFsaWRhdGVJbnB1dCkocSk7cmV0dXJuIGxlLnN0YXR1cz9lZS5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc2pzP3lpZWxkIHRoaXMuc2FzanNKb2JFeGVjdXRvci5leGVjdXRl''@;'; put 'put ''KFkscSxlZSxKLG5lLGllKTplZS5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJm51bGwhPWVlLnVzZUNvbXB1dGVBcGk/ZWUudXNlQ29tcHV0ZUFwaT95aWVsZCB0aGlzLmNvbXB1dGVKb2JFeGVjdXRvci5leGVjdXRlKFkscSxlZSxKLG5lKTooZWUuY29udGV4dE5hbWV8fChl''@;'; put 'put ''ZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZWUpLHtjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0In0pKSx5aWVsZCB0aGlzLmplc0pvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxxLGVlLEosbmUsaWUpKTplZS5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJU''@;'; put 'put ''eXBlLlNhczkmJmVlLnVzZXJuYW1lJiZlZS5wYXNzd29yZD95aWVsZCB0aGlzLnNhczlKb2JFeGVjdXRvci5leGVjdXRlKFkscSxlZSk6eWllbGQgdGhpcy53ZWJKb2JFeGVjdXRvci5leGVjdXRlKFkscSxlZSxKLG5lLGllKTpQcm9taXNlLnJlamVjdChuZXcgZy5FcnJvclJlc3BvbnNlKGxl''@;'; put 'put ''Lm1zZykpfSl9ZGVwbG95U2VydmljZVBhY2soWSxxLGVlLEosbmU9ITEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZXBsb3lTZXJ2aWNlUGFjayIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSk7bGV0IGllPW51bGw7aWYo''@;'; put 'put ''ZWV8fHEpZWV8fChlZT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCkscXx8KHE9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNWaXlhPyhpZT1uZXcgQi5TQVNWaXlhQXBpQ2xpZW50KGVlLHEsdGhpcy5zYXNq''@;'; put 'put ''c0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLGllLmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5JiYoaWU9bmV3IHcuU0FTOUFwaUNsaWVudChlZSx0aGlzLmpvYnNQYXRoLHRo''@;'; put 'put ''aXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKTtlbHNle2xldCBtZT1udWxsO3RoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNWaXlhP21lPXRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb25maWcoKTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5''@;'; put 'put ''cGU9PT1PLlNlcnZlclR5cGUuU2FzOSYmKG1lPXRoaXMuc2FzOUFwaUNsaWVudC5nZXRDb25maWcoKSksZWU9bWUuc2VydmVyVXJsLHE9bWUucm9vdEZvbGRlck5hbWV9WS5tZW1iZXJzWzBdLm1lbWJlcnMmJlkubWVtYmVyc1swXS5tZW1iZXJzLnNvcnQobWU9PiJmb2xkZXIiPT09bWUudHlw''@;'; put 'put ''ZT8tMToxKTtjb25zdCBsZT1ZLm1lbWJlcnM7eWllbGQgdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMocSxsZSxKLGllLG5lKX0pfXN0YXJ0Q29tcHV0ZUpvYihZLHEsZWU9e30sSixuZSxpZSxsZT0hMSxtZSxfZSl7dmFyIFRlLFNlLGplLFY7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe2lmKGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxlZSksdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgic3RhcnRDb21wdXRlSm9iIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSwhZWUuY29udGV4dE5hbWUpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgdW5kZWZpbmVkLiBQbGVhc2Ugc2V0IGEgYGNvbnRleHROYW1lYCBpbiB5b3VyIFNBU2pzIG9yIG92ZXJyaWRlIGNvbmZpZy4iKTtyZXR1cm4gX2U/KG51bGw9PT0oVGU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09VGV8fFRlLnNldFZlcmJv''@;'; put 'put ''c2VNb2RlKF9lKSxudWxsPT09KFNlPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PVNlfHxTZS5lbmFibGVWZXJib3NlTW9kZSgpKTohMT09PV9lJiYobnVsbD09PShqZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1qZXx8amUuZGlzYWJsZVZlcmJvc2VNb2RlKCkpLG51bGw9''@;'; put 'put ''PT0oVj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1WP3ZvaWQgMDpWLmV4ZWN1dGVDb21wdXRlSm9iKFksZWUuY29udGV4dE5hbWUsZWUuZGVidWcscSxKLCEhbmUsITEsaWUsbGUsbWUpfSl9ZmV0Y2hMb2dGaWxlQ29udGVudChZLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChZLHEpLnRoZW4oZWU9PntpZighZWUpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBnLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gUmVzcG9uc2Ugd2FzIG5vdCBwcm92''@;'; put 'put ''aWRlZC4iKSk7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShlZS5yZXN1bHQpfWNhdGNoKEope3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZy5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFRoZSByZXN1bHQgaXMgbm90IHZhbGlkLiIsSikpfX0pfSl9Z2V0U2Fz''@;'; put 'put ''UmVxdWVzdHMoKXtyZXR1cm5bLi4udGhpcy5yZXF1ZXN0Q2xpZW50LmdldFJlcXVlc3RzKCldLnNvcnQoXy5jb21wYXJlVGltZXN0YW1wcyl9Y2xlYXJTYXNSZXF1ZXN0cygpe3RoaXMucmVxdWVzdENsaWVudC5jbGVhclJlcXVlc3RzKCl9c2V0dXBDb25maWd1cmF0aW9uKCl7aWYodm9pZCAw''@;'; put 'put ''PT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx8fCIiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpaWYodHlwZW9mIGxvY2F0aW9uPCJ1Iil7bGV0IFk9YCR7bG9jYXRpb24ucHJvdG9jb2x9Ly8ke2xvY2F0aW9uLmhvc3RuYW1lfWA7bG9jYXRpb24ucG9ydCYmKFk9YCR7WX06JHts''@;'; put 'put ''b2NhdGlvbi5wb3J0fWApLHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPVl9ZWxzZSB0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD0iIjsiLyI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgtMSkmJih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD10aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnLnNlcnZlclVybC5zbGljZSgwLC0xKSksdGhpcy5yZXF1ZXN0Q2xpZW50P3RoaXMucmVxdWVzdENsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyk6dGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyh0aGlz''@;'; put 'put ''LnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanM/Ti5TYXNqc1JlcXVlc3RDbGllbnQ6ei5SZXF1ZXN0Q2xpZW50KSh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zLHRoaXMuc2FzanNDb25maWcucmVx''@;'; put 'put ''dWVzdEhpc3RvcnlMaW1pdCx0aGlzLnNhc2pzQ29uZmlnLnZlcmJvc2UpLHRoaXMuam9ic1BhdGg9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWE/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTVml5YTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9''@;'; put 'put ''PT1PLlNlcnZlclR5cGUuU2FzOT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVM5OnRoaXMuc2FzanNDb25maWcucGF0aFNBU0pTLHRoaXMuYXV0aE1hbmFnZXI9bmV3IEYuQXV0aE1hbmFnZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRo''@;'; put 'put ''aXMucmVxdWVzdENsaWVudCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQ/dGhpcy5zYXNWaXlhQXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyk6dGhpcy5zYXNWaXlhQXBpQ2xpZW50PW5ldyBCLlNBU1ZpeWFBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSYmKHRoaXMuc2FzOUFwaUNsaWVudD90aGlzLnNhczlBcGlDbGllbnQuc2V0Q29u''@;'; put 'put ''ZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKTp0aGlzLnNhczlBcGlDbGllbnQ9bmV3IHcuU0FTOUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSx0aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''LnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanMmJih0aGlzLnNhc0pTQXBpQ2xpZW50fHwodGhpcy5zYXNKU0FwaUNsaWVudD1uZXcgUC5TQVNqc0FwaUNsaWVudCh0aGlzLnJlcXVlc3RDbGllbnQpKSksdGhpcy5maWxlVXBsb2FkZXI9bmV3IEwuRmlsZVVwbG9hZGVyKHRoaXMuc2Fz''@;'; put 'put ''anNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1uZXcgTC5XZWJKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''LnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bmV3IEwuU2FzanNKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVz''@;'; put 'put ''dENsaWVudCksdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bmV3IEwuU2FzOUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdl''@;'; put 'put ''bnRPcHRpb25zKSx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1uZXcgTC5Db21wdXRlSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLmplc0pvYkV4ZWN1dG9yPW5ldyBMLkplc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25m''@;'; put 'put ''aWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCl9Y3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKFkscSxlZSxKLG5lKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQoMCxfLmFzeW5jRm9yRWFjaCkocSxpZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7c3dpdGNoKGllLnR5cGUpe2Nhc2UiZm9sZGVyIjp5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcihpZS5uYW1lLFksdm9pZCAwLGVlLEosbmUpO2JyZWFrO2Nhc2UiZmlsZSI6eWllbGQgdGhpcy5jcmVhdGVGaWxlKGllLm5hbWUsaWUuY29kZSxZLHZvaWQgMCxlZSxKKTticmVh''@;'; put 'put ''aztjYXNlInNlcnZpY2UiOnlpZWxkIHRoaXMuY3JlYXRlSm9iRGVmaW5pdGlvbihpZS5uYW1lLGllLmNvZGUsWSx2b2lkIDAsZWUsSik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuaWRlbnRpZmllZCBtZW1iZXIgJyR7aWUubmFtZX0nIHByb3ZpZGVkLmApfSJmb2xkZXIiPT09''@;'; put 'put ''aWUudHlwZSYmaWUubWVtYmVycyYmaWUubWVtYmVycy5sZW5ndGgmJih5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhgJHtZfS8ke2llLm5hbWV9YCxpZS5tZW1iZXJzLGVlLEosbmUpKX0pKX0pfWlzTWV0aG9kU3VwcG9ydGVkKFkscSl7aWYoIXRoaXMuc2FzanNDb25maWcu''@;'; put 'put ''c2VydmVyVHlwZXx8IXEuaW5jbHVkZXModGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKSl0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAnJHtZfScgaXMgb25seSBzdXBwb3J0ZWQgb24gJHtxLmpvaW4oIiwgIil9IHNlcnZlcnMuYCl9ZW5hYmxlVmVyYm9zZU1vZGUoWSxxKXt2YXIgZWU7bnVs''@;'; put 'put ''bD09PShlZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1lZXx8ZWUuZW5hYmxlVmVyYm9zZU1vZGUoWSxxKX1kaXNhYmxlVmVyYm9zZU1vZGUoKXt2YXIgWTtudWxsPT09KFk9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09WXx8WS5kaXNhYmxlVmVyYm9zZU1vZGUoKX19fSwz''@;'; put 'put ''NDY3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLEwsSyxVKXtyZXR1cm4gbmV3KEt8fChLPVByb21pc2UpKShmdW5jdGlvbihZLHEpe2Z1bmN0aW9uIGVlKGllKXt0cnl7bmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUp''@;'; put 'put ''e3EobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7bmUoVS50aHJvdyhpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gbmUoaWUpe2llLmRvbmU/WShpZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIEs/WTpuZXcgSyhmdW5jdGlvbihxKXtxKFkpfSl9KGllLnZh''@;'; put 'put ''bHVlKS50aGVuKGVlLEopfW5lKChVPVUuYXBwbHkoTixMfHxbXSkpLm5leHQoKSl9KX0sXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTil7cmV0dXJuIE4mJk4uX19lc01vZHVsZT9OOntkZWZhdWx0Ok59fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSksWC5TQVNqc0FwaUNsaWVudD12b2lkIDA7Y29uc3QgZz1fKHkoNjIzMCkpLEI9eSgzOTAwKSx3PXkoOTc3OCksUD15KDU3KSxGPXkoMjQ5KSxPPXkoNzA0KTtYLlNBU2pzQXBpQ2xpZW50PWNsYXNzIHp7Y29uc3RydWN0b3IoTCl7dGhpcy5yZXF1ZXN0Q2xpZW50PUx9''@;'; put 'put ''Z2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KEwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihMKXtjb25zdHthY2Nlc3NfdG9rZW46S309eWllbGQoMCxPLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LEwsQi5TZXJ2ZXJUeXBlLlNhc2pzKTtyZXR1cm4g''@;'; put 'put ''S319KX1kZXBsb3koTCxLLFUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPXlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KFUpO0wuYXBwTG9jPUwuYXBwTG9jfHxLO2NvbnN0e3Jlc3VsdDpZfT15aWVsZCB0aGlzLnJlcXVlc3RDbGll''@;'; put 'put ''bnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95IixMLFcsdm9pZCAwLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVuZ3RoOjEvMH0pO3JldHVybiBQcm9taXNlLnJlc29sdmUoWSl9KX1kZXBsb3laaXBGaWxlKEwsSyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0e2NyZWF0ZVJlYWRTdHJlYW06VX09eSgyOTc1KSxXPXlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KEspLFk9eWllbGQgVShMKSxxPW5ldyBnLmRlZmF1bHQ7cS5hcHBlbmQoImZpbGUiLFkpO2NvbnN0IGVlPWBtdWx0aXBhcnQvZm9ybS1kYXRhOyBi''@;'; put 'put ''b3VuZGFyeT0ke3EuZ2V0Qm91bmRhcnkoKX1gLHtyZXN1bHQ6Sn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveS91cGxvYWQiLHEsVyxlZSx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KTtyZXR1cm4gUHJvbWlz''@;'; put 'put ''ZS5yZXNvbHZlKEopfSl9ZXhlY3V0ZUpvYihMLEssVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9VT9VLmFjY2Vzc190b2tlbjp2b2lkIDA7bGV0IFk7WT1MLl9wcm9ncmFtLnN0YXJ0c1dpdGgoIi8iKT9MLl9wcm9ncmFtOmAke0t9LyR7TC5fcHJv''@;'; put 'put ''Z3JhbX1gO2NvbnN0IHE9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL3N0cC9leGVjdXRlIixPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe19kZWJ1ZzoxMzF9LEwpLHtfcHJvZ3JhbTpZfSksVyk7cmV0dXJue3Jlc3VsdDpxLnJlc3VsdCxsb2c6cS5sb2d9fSl9''@;'; put 'put ''ZXhlY3V0ZVNjcmlwdChMLEs9InNhcyIsVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9eWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoVSksWT17bG9nOiIifTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNB''@;'; put 'put ''U2pzQXBpL2NvZGUvZXhlY3V0ZSIse2NvZGU6TCxydW5UaW1lOkt9LFcpLnRoZW4ocT0+e2NvbnN0e2xvZzplZSxwcmludE91dHB1dDpKLHJlc3VsdDpuZX09cTtZLmxvZz1lZSxKJiYoWS5wcmludE91dHB1dD1KKSxuZSYmKFkud2Vib3V0PW5lKX0pLmNhdGNoKHE9Pnt0aHJvdygwLHcucHJl''@;'; put 'put ''Zml4TWVzc2FnZSkocSwiRXJyb3Igd2hpbGUgc2VuZGluZyBQT1NUIHJlcXVlc3QgdG8gZXhlY3V0ZSBjb2RlLiAiKX0pLFl9KX1nZXRBY2Nlc3NUb2tlbihMLEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxQLmdldEFjY2Vzc1Rva2VuRm9yU2Fz''@;'; put 'put ''anMpKHRoaXMucmVxdWVzdENsaWVudCxMLEspfSl9cmVmcmVzaFRva2VucyhMKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsRi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxMKX0pfX19LDY5MDM6ZnVuY3Rpb24odWUs''@;'; put 'put ''WCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixMLEssVSl7cmV0dXJuIG5ldyhLfHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oWSxxKXtmdW5jdGlvbiBlZShpZSl7dHJ5e25lKFUubmV4dChpZSkpfWNhdGNo''@;'; put 'put ''KGxlKXtxKGxlKX19ZnVuY3Rpb24gSihpZSl7dHJ5e25lKFUudGhyb3coaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1bmN0aW9uIG5lKGllKXtpZS5kb25lP1koaWUudmFsdWUpOmZ1bmN0aW9uIFcoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBLP1k6bmV3IEsoZnVuY3Rpb24ocSl7cShZKX0pfShp''@;'; put 'put ''ZS52YWx1ZSkudGhlbihlZSxKKX1uZSgoVT1VLmFwcGx5KE4sTHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNlc3Npb25NYW5hZ2VyPXZvaWQgMDtjb25zdCBCPXkoMTIzMCksdz15KDEzOTUpLFA9eSg1OTI4KSxG''@;'; put 'put ''PXkoOTc3OCk7WC5TZXNzaW9uTWFuYWdlcj1jbGFzcyB6e2NvbnN0cnVjdG9yKEwsSyxVKXt0aGlzLnNlcnZlclVybD1MLHRoaXMuY29udGV4dE5hbWU9Syx0aGlzLnJlcXVlc3RDbGllbnQ9VSx0aGlzLmxvZ2dlZEVycm9ycz1bXSx0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcj0iRXJyb3Ig''@;'; put 'put ''d2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0YXRlIGxpbmsuICIsdGhpcy5zZXNzaW9ucz1bXSx0aGlzLmN1cnJlbnRDb250ZXh0PW51bGwsdGhpcy5zZXR0aW5nQ29udGV4dD0hMSx0aGlzLl9kZWJ1Zz0hMSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGU9e3ByaW50ZWQ6ITEsc3RhdGU6Qi5TZXNz''@;'; put 'put ''aW9uU3RhdGUuTm9TdGF0ZX0sTCYmKDAsUC5pc1VybCkoTCl9Z2V0IGRlYnVnKCl7cmV0dXJuIHRoaXMuX2RlYnVnfXNldCBkZWJ1ZyhMKXt0aGlzLl9kZWJ1Zz1MfWlzU2Vzc2lvblZhbGlkKEwpe2lmKCFMKXJldHVybiExO2NvbnN0IEs9KChuZXcgRGF0ZSkuZ2V0VGltZSgpLW5ldyBEYXRl''@;'; put 'put ''KEwuY3JlYXRpb25UaW1lU3RhbXApLmdldFRpbWUoKSkvMWUzO3JldHVybiEoIUwuYXR0cmlidXRlc3x8Sz49TC5hdHRyaWJ1dGVzLnNlc3Npb25JbmFjdGl2ZVRpbWVvdXQpfXJlbW92ZVNlc3Npb25Gcm9tUG9vbChMKXt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKEs9Pksu''@;'; put 'put ''aWQhPT1MLmlkKX1yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKXt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKEw9PnRoaXMuaXNTZXNzaW9uVmFsaWQoTCkpfXRocm93RXJyb3JzKEwsSyl7dGhyb3cgSz8oMCxGLnByZWZpeE1lc3NhZ2UpKG5ldyBFcnJvcihMLmpvaW4oIi4gIikp''@;'; put 'put ''LEspOm5ldyBFcnJvcihMLm1hcChVPT5VLm1lc3NhZ2U/VS5tZXNzYWdlOlUpLmpvaW4oIi4gIikpfWdldFNlc3Npb24oTCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9W107bGV0IFU9ITE7Y29uc3QgVz0oKT0+e0subGVuZ3RoJiYhVSYmKFU9ITAs''@;'; put 'put ''dGhpcy50aHJvd0Vycm9ycyhLKSl9O2lmKHRoaXMucmVtb3ZlRXhwaXJlZFNlc3Npb25zKCksdGhpcy5zZXNzaW9ucy5sZW5ndGgpe2NvbnN0IFk9dGhpcy5zZXNzaW9uc1swXTtyZXR1cm4gdGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2woWSksdGhpcy5jcmVhdGVTZXNzaW9ucyhMKS5jYXRj''@;'; put 'put ''aChxPT57Sy5wdXNoKHEpfSksdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihMKS5jYXRjaChxPT57Sy5wdXNoKHEpfSksVygpLFl9e3RoaXMuY3JlYXRlU2Vzc2lvbnMoTCkuY2F0Y2gocT0+e0sucHVzaChxKX0pLHlpZWxkIHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTCkuY2F0''@;'; put 'put ''Y2gocT0+e0sucHVzaChxKX0pLHRoaXMucmVtb3ZlRXhwaXJlZFNlc3Npb25zKCk7Y29uc3QgWT10aGlzLnNlc3Npb25zLnBvcCgpO3JldHVybiB0aGlzLnJlbW92ZVNlc3Npb25Gcm9tUG9vbChZKSxXKCksWX19KX1nZXRFcnJvck1lc3NhZ2UoTCxLLFUpe3JldHVybmAke1V9IHJlcXVlc3Qg''@;'; put 'put ''dG8gJHtLfSBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAke0wucmVzcG9uc2Uuc3RhdHVzfHwidW5rbm93biJ9LiBgK0wucmVzcG9uc2UuZGF0YS5tZXNzYWdlfHwiIn1jbGVhclNlc3Npb24oTCxLKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVT1gL2Nv''@;'; put 'put ''bXB1dGUvc2Vzc2lvbnMvJHtMfWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUoVSxLKS50aGVuKCgpPT57dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihXPT5XLmlkIT09TCl9KS5jYXRjaChXPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMu''@;'; put 'put ''Z2V0RXJyb3JNZXNzYWdlKFcsVSwiREVMRVRFIiksIkVycm9yIHdoaWxlIGRlbGV0aW5nIHNlc3Npb24uICIpfSl9KX1jcmVhdGVTZXNzaW9ucyhMKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1bXTt0aGlzLnNlc3Npb25zLmxlbmd0aHx8KHlpZWxk''@;'; put 'put ''KDAsUC5hc3luY0ZvckVhY2gpKG5ldyBBcnJheSgxKSwoKT0+Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihMKS5jYXRjaChVPT57Sy5wdXNoKFUpfSl9KSkpLEsubGVuZ3RoJiZ0aGlzLnRocm93RXJyb3JzKEssIkVy''@;'; put 'put ''cm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIpfSl9d2FpdEZvckN1cnJlbnRDb250ZXh0KCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZShMPT57Y29uc3QgSz1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuY3VycmVudENvbnRleHQm''@;'; put 'put ''Jih0aGlzLnNldHRpbmdDb250ZXh0PSExLGNsZWFySW50ZXJ2YWwoSyksTCgpKX0sMTAwKX0pfSl9Y3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuY3VycmVudENvbnRleHR8fCh0aGlzLnNldHRpbmdDb250ZXh0''@;'; put 'put ''P3lpZWxkIHRoaXMud2FpdEZvckN1cnJlbnRDb250ZXh0KCk6eWllbGQgdGhpcy5zZXRDdXJyZW50Q29udGV4dChMKSk7Y29uc3QgSz1gJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke3RoaXMuY3VycmVudENvbnRleHQuaWR9L3Nlc3Npb25zYCx7cmVzdWx0OlUsZXRhZzpX''@;'; put 'put ''fT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChLLHt9LEwpLmNhdGNoKHE9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UocSxLLCJQT1NUIiksIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIpfSk7VS5ldGFnPVc7Y29uc3QgWT1VLmxp''@;'; put 'put ''bmtzLmZpbmQocT0+InN0YXRlIj09PXEucmVsKTtpZighWSl0aHJvdyB0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcjtyZXR1cm4gVS5zdGF0ZVVybD1ZLmhyZWYseWllbGQgdGhpcy53YWl0Rm9yU2Vzc2lvbihVLFcsTCksdGhpcy5zZXNzaW9ucy5wdXNoKFUpLFV9KX1zZXRDdXJyZW50Q29u''@;'; put 'put ''dGV4dChMKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIXRoaXMuY3VycmVudENvbnRleHQpe2NvbnN0IEs9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDBgO3RoaXMuc2V0dGluZ0NvbnRleHQ9ITA7Y29uc3R7cmVzdWx0''@;'; put 'put ''OlV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoSyxMKS5jYXRjaChxPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHEsSywiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcgbGlzdCBvZiBjb250ZXh0cy4gIil9KSxZPShVJiZVLml0ZW1zJiZV''@;'; put 'put ''Lml0ZW1zLmxlbmd0aD9VLml0ZW1zOltdKS5maW5kKHE9PnEubmFtZT09PXRoaXMuY29udGV4dE5hbWUpO2lmKCFZKXRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7dGhpcy5jb250ZXh0TmFtZX0nIHdhcyBub3QgZm91bmQgb24gdGhlIHNlcnZlciAke3RoaXMuc2VydmVyVXJsfS5g''@;'; put 'put ''KTt0aGlzLmN1cnJlbnRDb250ZXh0PVksUHJvbWlzZS5yZXNvbHZlKCl9fSl9d2FpdEZvclNlc3Npb24oTCxLLFUpe3ZhciBXO3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXR7c3RhdGU6WX09TDtjb25zdHtzdGF0ZVVybDpxfT1MLGVlPUkubG9nZ2VyfHxfO2lm''@;'; put 'put ''KFk9PT1CLlNlc3Npb25TdGF0ZS5QZW5kaW5nfHxZPT09Qi5TZXNzaW9uU3RhdGUuUnVubmluZ3x8WT09PUIuU2Vzc2lvblN0YXRlLk5vU3RhdGUpe2lmKHEpe3RoaXMuZGVidWcmJiF0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZCYmKGVlLmluZm8oYFBvbGxpbmc6ICR7dGhpcy5z''@;'; put 'put ''ZXJ2ZXJVcmwrcX1gKSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0hMCk7Y29uc3QgSj1gJHt0aGlzLnNlcnZlclVybH0ke3F9P3dhaXQ9MzBgLHtyZXN1bHQ6bmUscmVzcG9uc2VTdGF0dXM6aWV9PXlpZWxkIHRoaXMuZ2V0U2Vzc2lvblN0YXRlKEosSyxVKS5jYXRjaChsZT0+''@;'; put 'put ''e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKShsZSwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3Igc2Vzc2lvbi4gIil9KTtpZihZPW5lLnRyaW0oKSx0aGlzLmRlYnVnJiZ0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGUhPT1ZJiYoZWUuaW5mbyhgQ3VycmVudCBzZXNzaW9uIHN0YXRlIGlz''@;'; put 'put ''ICcke1l9J2ApLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZT1ZLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSExKSwhWSl7Y29uc3QgbGU9bmV3IHcuTm9TZXNzaW9uU3RhdGVFcnJvcihpZSx0aGlzLnNlcnZlclVybCtxLG51bGw9PT0oVz1MLmxpbmtzLmZpbmQobWU9''@;'; put 'put ''PiJsb2ciPT09bWUucmVsKSl8fHZvaWQgMD09PVc/dm9pZCAwOlcuaHJlZik7cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzLmZpbmQobWU9Pm1lLnNlcnZlclJlc3BvbnNlU3RhdHVzPT09bGUuc2VydmVyUmVzcG9uc2VTdGF0dXMpfHwodGhpcy5sb2dnZWRFcnJvcnMucHVzaChsZSksZWUuaW5m''@;'; put 'put ''byhsZS5tZXNzYWdlKSkseWllbGQgdGhpcy53YWl0Rm9yU2Vzc2lvbihMLEssVSl9cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzPVtdLFl9dGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3J9cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzPVtdLFl9KX1nZXRTZXNzaW9uU3RhdGUoTCxLLFUp''@;'; put 'put ''e3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChMLFUsInRleHQvcGxhaW4iLHsiSWYtTm9uZS1NYXRjaCI6S30pLnRoZW4oVz0+KHtyZXN1bHQ6Vy5yZXN1bHQscmVzcG9uc2VTdGF0dXM6Vy5zdGF0dXN9''@;'; put 'put ''KSkuY2F0Y2goVz0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShXLEwsIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gc3RhdGUuICIpfSl9KX1nZXRWYXJpYWJsZShMLEssVSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe2NvbnN0IFc9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvc2Vzc2lvbnMvJHtMfS92YXJpYWJsZXMvJHtLfWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoVyxVKS5jYXRjaChZPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNz''@;'; put 'put ''YWdlKFksVywiR0VUIiksYEVycm9yIHdoaWxlIGZldGNoaW5nIHNlc3Npb24gdmFyaWFibGUgJyR7S30nLiBgKX0pfSl9fX0sMTYyMjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihV''@;'; put 'put ''LFcsWSxxKXtyZXR1cm4gbmV3KFl8fChZPVByb21pc2UpKShmdW5jdGlvbihKLG5lKXtmdW5jdGlvbiBpZShfZSl7dHJ5e21lKHEubmV4dChfZSkpfWNhdGNoKFRlKXtuZShUZSl9fWZ1bmN0aW9uIGxlKF9lKXt0cnl7bWUocS50aHJvdyhfZSkpfWNhdGNoKFRlKXtuZShUZSl9fWZ1bmN0aW9u''@;'; put 'put ''IG1lKF9lKXtfZS5kb25lP0ooX2UudmFsdWUpOmZ1bmN0aW9uIGVlKEope3JldHVybiBKIGluc3RhbmNlb2YgWT9KOm5ldyBZKGZ1bmN0aW9uKG5lKXtuZShKKX0pfShfZS52YWx1ZSkudGhlbihpZSxsZSl9bWUoKHE9cS5hcHBseShVLFd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5leGVjdXRlT25Db21wdXRlQXBpPXZvaWQgMDtjb25zdCBCPXkoNzc1Nyksdz15KDk3NzgpLFA9eSgzNjA3KSxGPXkoNzA0KSxPPXkoNTkyOCksej15KDcxNCksTj15KDEzNDMpLEw9eSg2NDk2KTtYLmV4ZWN1dGVPbkNvbXB1''@;'; put 'put ''dGVBcGk9ZnVuY3Rpb24gSyhVLFcsWSxxLGVlLEosbmUsaWU9bnVsbCxsZT0hMSxtZT0hMSxfZT0hMCxUZSxTZT0hMSxqZSl7dmFyIFYscDtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IGI9KG5lfHx7fSkuYWNjZXNzX3Rva2VuO25lJiYoe2FjY2Vzc190b2tl''@;'; put 'put ''bjpifT15aWVsZCgwLEYuZ2V0VG9rZW5zKShVLG5lKSk7Y29uc3QgeD1JLmxvZ2dlcnx8Xzt0cnl7bGV0IEM7Y29uc3QgVD15aWVsZCBXLmdldFNlc3Npb24oYikuY2F0Y2goeGU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbi4gIil9''@;'; put 'put ''KTtpZihDPVQuaWQsU2Upe2NvbnN0e3Jlc3VsdDp4ZX09eWllbGQgVy5nZXRWYXJpYWJsZShDLCJTWVNKT0JJRCIsYikuY2F0Y2godmU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkodmUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiB2YXJpYWJsZS4gIil9KTtpZih4ZSYmeGUudmFs''@;'; put 'put ''dWUpe2NvbnN0IHZlPVk/cS5zcGxpdChZKS5qb2luKCIiKS5yZXBsYWNlKC9eXC8vLCIiKTpxOyhJLmxvZ2dlcnx8XykuaW5mbyhgVHJpZ2dlcmluZyAnJHt2ZX0nIHdpdGggUElEICR7eGUudmFsdWV9IGF0ICR7KDAsQi50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTKSgpfWApfX1sZXQgSDtI''@;'; put 'put ''PSgwLE8uaXNSZWxhdGl2ZVBhdGgpKHEpP2BleGVjLSR7cS5pbmNsdWRlcygiLyIpP3Euc3BsaXQoIi8iKVsxXTpxfWA6cS5zcGxpdCgiLyIpLnBvcCgpO2xldCBqPXtTWVNfSkVTX0pPQl9VUkk6IiIsX3Byb2dyYW06KDAsTy5pc1JlbGF0aXZlUGF0aCkocSk/WSsiLyIrcTpxfTtqZSYmKGo9''@;'; put 'put ''T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGopLGplKSksbGUmJihqPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxqKSx7X0RFQlVHOjEzMX0pKTtsZXQgRT1bXTtpZSYmKEpTT04uc3RyaW5naWZ5KGllKS5pbmNsdWRlcygiOyIpPyhFPXlpZWxkKDAsTC51cGxvYWRUYWJs''@;'; put 'put ''ZXMpKFUsaWUsYikuY2F0Y2goeGU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIHVwbG9hZGluZyB0YWJsZXMuICIpfSksai5fd2ViaW5fZmlsZV9jb3VudD1FLmxlbmd0aCxFLmZvckVhY2goKHhlLHZlKT0+e2pbYF93ZWJpbl9maWxldXJpJHt2ZSsxfWBdPWAv''@;'; put 'put ''ZmlsZXMvZmlsZXMvJHt4ZS5maWxlLmlkfWAsaltgX3dlYmluX25hbWUke3ZlKzF9YF09eGUudGFibGVOYW1lfSkpOmo9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGopLCgwLHouZm9ybWF0RGF0YUZvclJlcXVlc3QpKGllKSkpO2NvbnN0IG09e25hbWU6SHx8IkRlZmF1bHQgSm9i''@;'; put 'put ''IE5hbWUiLGRlc2NyaXB0aW9uOiJQb3dlcmVkIGJ5IFNBU2pzIixjb2RlOmVlLHZhcmlhYmxlczpqLHZlcnNpb246Mn0se3Jlc3VsdDpBfT15aWVsZCBVLnBvc3QoYC9jb21wdXRlL3Nlc3Npb25zLyR7Q30vam9ic2AsbSxiKS5jYXRjaCh4ZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKSh4''@;'; put 'put ''ZSwiRXJyb3Igd2hpbGUgcG9zdGluZyBqb2IuICIpfSk7aWYoIV9lKXJldHVybiBUO2xlJiYoeC5pbmZvKGBKb2IgaGFzIGJlZW4gc3VibWl0dGVkIGZvciAnJHtIfScuYCkseC5pbmZvKGBZb3UgY2FuIG1vbml0b3IgdGhlIGpvYiBwcm9ncmVzcyBhdCAnJHtVLmdldEJhc2VVcmwoKX0ke0Eu''@;'; put 'put ''bGlua3MuZmluZCh4ZT0+InN0YXRlIj09PXhlLnJlbCkuaHJlZn0nLmApKTtjb25zdCB0ZT15aWVsZCgwLE4ucG9sbEpvYlN0YXRlKShVLEEsbGUsbmUsVGUse3Nlc3Npb246VCxzZXNzaW9uTWFuYWdlcjpXfSkuY2F0Y2goeGU9PmcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3Zh''@;'; put 'put ''ciB2ZSxYZTtjb25zdCB6ZT1udWxsPT09KHZlPXhlPy5yZXNwb25zZSl8fHZvaWQgMD09PXZlP3ZvaWQgMDp2ZS5kYXRhLERlPS9lcnI9WzAtOV0qLC8uZXhlYyh6ZSk7aWYoIjUxMTMiPT09KG51bGw9PT0oWGU9RGU/LlswXSl8fHZvaWQgMD09PVhlP3ZvaWQgMDpYZS5zbGljZSg0LC0xKSkp''@;'; put 'put ''e2NvbnN0IEllPUEubGlua3MuZmluZChWZT0+InVwIj09PVZlLnJlbCkuaHJlZisiL2xvZyI7eGUubG9nPXlpZWxkKDAsTy5mZXRjaExvZ0J5Q2h1bmtzKShVLGIsSWUsMWU2KX10aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9''@;'; put 'put ''KSk7bmUmJih7YWNjZXNzX3Rva2VuOmJ9PXlpZWxkKDAsRi5nZXRUb2tlbnMpKFUsbmUpKTtjb25zdHtyZXN1bHQ6c2V9PXlpZWxkIFUuZ2V0KGAvY29tcHV0ZS9zZXNzaW9ucy8ke0N9L2pvYnMvJHtBLmlkfWAsYikuY2F0Y2goeGU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVy''@;'; put 'put ''cm9yIHdoaWxlIGdldHRpbmcgam9iLiAiKX0pO2xldCB3ZSxVZT0iIjtjb25zdCBKZT1zZS5saW5rcy5maW5kKHhlPT4ibG9nIj09PXhlLnJlbCk7aWYobGUmJkplKXtjb25zdCB4ZT1gJHtKZS5ocmVmfS9jb250ZW50YCx2ZT1udWxsIT09KHA9bnVsbD09PShWPXNlLmxvZ1N0YXRpc3RpY3Mp''@;'; put 'put ''fHx2b2lkIDA9PT1WP3ZvaWQgMDpWLmxpbmVDb3VudCkmJnZvaWQgMCE9PXA/cDoxZTY7VWU9eWllbGQoMCxPLmZldGNoTG9nQnlDaHVua3MpKFUsYix4ZSx2ZSl9aWYodGU9PT1OLkpvYlN0YXRlLkZhaWxlZHx8dGU9PT1OLkpvYlN0YXRlLkVycm9yKXRocm93IG5ldyBQLkNvbXB1dGVKb2JF''@;'; put 'put ''eGVjdXRpb25FcnJvcihzZSxVZSk7aWYoIW1lKXJldHVybntqb2I6c2UsbG9nOlVlfTtjb25zdCBvdD1gL2NvbXB1dGUvc2Vzc2lvbnMvJHtDfS9maWxlcmVmcy9fd2Vib3V0L2NvbnRlbnRgO3JldHVybiB3ZT15aWVsZCBVLmdldChvdCxiLCJ0ZXh0L3BsYWluIikuY2F0Y2goeGU9PmcodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciB2ZSxYZTtpZih4ZSBpbnN0YW5jZW9mIFAuTm90Rm91bmRFcnJvciYmSmUpe2NvbnN0IHplPWAke0plLmhyZWZ9L2NvbnRlbnRgLERlPW51bGwhPT0oWGU9bnVsbD09PSh2ZT1zZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09dmU/dm9p''@;'; put 'put ''ZCAwOnZlLmxpbmVDb3VudCkmJnZvaWQgMCE9PVhlP1hlOjFlNjtyZXR1cm4gVWU9eWllbGQoMCxPLmZldGNoTG9nQnlDaHVua3MpKFUsYix6ZSxEZSksUHJvbWlzZS5yZWplY3Qoe3N0YXR1czo1MDAsbG9nOlVlfSl9cmV0dXJue3Jlc3VsdDpKU09OLnN0cmluZ2lmeSh4ZSl9fSkpLHlpZWxk''@;'; put 'put ''IFcuY2xlYXJTZXNzaW9uKEMsYikuY2F0Y2goeGU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIGNsZWFyaW5nIHNlc3Npb24uICIpfSkse3Jlc3VsdDp3ZT8ucmVzdWx0LGxvZzpVZX19Y2F0Y2goQyl7aWYoNDA0PT09Qy5zdGF0dXMpcmV0dXJuIEsoVSxXLFks''@;'; put 'put ''cSxlZSxKLG5lLGllLGxlLCExLCEwKTt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoQywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHNjcmlwdC4gIil9fSl9fSw3NDU4OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVu''@;'; put 'put ''Y3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKHEpe3RyeXtZKHoubmV4dChxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKHEpe3RyeXtZKHoudGhyb3cocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShx''@;'; put 'put ''KXtxLmRvbmU/TChxLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0ocS52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRGaWxlU3RyZWFtPXZvaWQgMDtjb25zdCBnPXkoMjk3NSksQj15KDc3NTcpO1guZ2V0RmlsZVN0cmVhbT0oUCxGKT0+Xyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtjcmVhdGVXcml0ZVN0cmVhbTpPfT15KDI5NzUpLHo9''@;'; put 'put ''Rnx8SS5jd2QoKTtpZih5aWVsZCgwLGcuaXNGb2xkZXIpKHopKXtjb25zdCBMPWAke1AubmFtZXx8ImpvYiJ9LSR7KDAsQi5nZW5lcmF0ZVRpbWVzdGFtcCkoKX0ubG9nYCxVPXkoMjUyMCkuam9pbihGfHxJLmN3ZCgpLEwpO3JldHVybiB5aWVsZCBPKFUpfXJldHVybiB5aWVsZCBPKHopfSl9''@;'; put 'put ''LDEzNDM6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxZLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKG5lLGllKXtmdW5jdGlvbiBsZShUZSl7dHJ5''@;'; put 'put ''e19lKGVlLm5leHQoVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBtZShUZSl7dHJ5e19lKGVlLnRocm93KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gX2UoVGUpe1RlLmRvbmU/bmUoVGUudmFsdWUpOmZ1bmN0aW9uIEoobmUpe3JldHVybiBuZSBpbnN0YW5jZW9mIHE/''@;'; put 'put ''bmU6bmV3IHEoZnVuY3Rpb24oaWUpe2llKG5lKX0pfShUZS52YWx1ZSkudGhlbihsZSxtZSl9X2UoKGVlPWVlLmFwcGx5KFcsWXx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRvUG9sbD1YLnBvbGxKb2JTdGF0ZT1Y''@;'; put 'put ''LkpvYlN0YXRlPXZvaWQgMDtjb25zdCBCPXkoNzA0KSx3PXkoMTM5NSksUD15KDEyMzApLEY9eSg1OTI4KTt2YXIgTyxXOyhXPU89WC5Kb2JTdGF0ZXx8KFguSm9iU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsVy5SdW5uaW5nPSJydW5uaW5nIixXLlBlbmRpbmc9InBlbmRpbmci''@;'; put 'put ''LFcuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIixXLk5vU3RhdGU9IiIsVy5GYWlsZWQ9ImZhaWxlZCIsVy5FcnJvcj0iZXJyb3IiLFgucG9sbEpvYlN0YXRlPWZ1bmN0aW9uIHooVyxZLHEsZWUsSixuZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGll''@;'; put 'put ''PUkubG9nZ2VyfHxfLGxlPUo/LnN0cmVhbUxvZ3x8ITEsbWU9W3ttYXhQb2xsQ291bnQ6MjAwLHBvbGxJbnRlcnZhbDozMDB9LHttYXhQb2xsQ291bnQ6MzAwLHBvbGxJbnRlcnZhbDozZTN9LHttYXhQb2xsQ291bnQ6NTAwLHBvbGxJbnRlcnZhbDozZTR9LHttYXhQb2xsQ291bnQ6MzQwMCxw''@;'; put 'put ''b2xsSW50ZXJ2YWw6NmU0fV07bGV0IF9lO2lmKHZvaWQgMCE9PUope19lPVtKXTtsZXR7cG9sbFN0cmF0ZWd5Onh9PUo7dm9pZCAwIT09eD8oVSh4KSx4PXguc29ydCgoQyxUKT0+Qy5tYXhQb2xsQ291bnQtVC5tYXhQb2xsQ291bnQpLF9lPVsuLi5fZSwuLi54XSk6X2U9Wy4uLl9lLC4uLm1l''@;'; put 'put ''XX1lbHNlIF9lPW1lO2xldCBUZT1fZS5zcGxpY2UoMCwxKVswXTtKPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxUZSksSnx8e30pO2NvbnN0IFNlPVkubGlua3MuZmluZCh4PT4ic3RhdGUiPT09eC5yZWwpO2lmKCFTZSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBzdGF0ZSBsaW5rIHdh''@;'; put 'put ''cyBub3QgZm91bmQuIik7bGV0IHAsamU9eWllbGQgTihXLFksTy5Ob1N0YXRlLHEsZWUpLmNhdGNoKHg9PihpZS5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gJHtTZS5ocmVmfS4gU3RhcnRpbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuYCx4KSxPLlVu''@;'; put 'put ''YXZhaWxhYmxlKSksVj0wO2lmKGplPT09Ty5Db21wbGV0ZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZShqZSk7aWYobGUmJigwLEYuaXNOb2RlKSgpKXtjb25zdHtnZXRGaWxlU3RyZWFtOnh9PXkoNzQ1OCk7cD15aWVsZCB4KFksSi5sb2dGb2xkZXJQYXRoKX1sZXQgYj15aWVsZCgwLFguZG9Q''@;'; put 'put ''b2xsKShXLFksamUscSxWLEosZWUsbGUscCxuZSk7aWYoamU9Yi5zdGF0ZSxWPWIucG9sbENvdW50LCFMKGplKXx8Vj49Si5tYXhQb2xsQ291bnQmJiFfZS5sZW5ndGgpcmV0dXJuIGplO2Zvcig7X2UubGVuZ3RoJiZMKGplKTspVGU9X2Uuc3BsaWNlKDAsMSlbMF0sSiYmKFRlLmxvZ0ZvbGRl''@;'; put 'put ''clBhdGg9Si5sb2dGb2xkZXJQYXRoKSxiPXlpZWxkKDAsWC5kb1BvbGwpKFcsWSxqZSxxLFYsVGUsZWUsbGUscCxuZSksamU9Yi5zdGF0ZSxWPWIucG9sbENvdW50O3JldHVybiBwJiZwLmVuZCgpLGplfSl9O2NvbnN0IE49KFcsWSxxLGVlLEopPT5nKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IG5lPVkubGlua3MuZmluZChpZT0+InN0YXRlIj09PWllLnJlbCk7aWYoTChxKSl7bGV0IGllO0omJihpZT15aWVsZCgwLEIuZ2V0VG9rZW5zKShXLEopKTtjb25zdHtyZXN1bHQ6bGV9PXlpZWxkIFcuZ2V0KGAke25lLmhyZWZ9P19hY3Rpb249d2FpdCZ3YWl0PTMw''@;'; put 'put ''MGAsaWU/LmFjY2Vzc190b2tlbiwidGV4dC9wbGFpbiIse30sZWUpLmNhdGNoKG1lPT57dGhyb3cgbmV3IHcuSm9iU3RhdGVQb2xsRXJyb3IoWS5pZCxtZSl9KTtyZXR1cm4gbGUudHJpbSgpfXJldHVybiBxfSksTD1XPT5XPT09Ty5SdW5uaW5nfHxXPT09Ty5Ob1N0YXRlfHxXPT09Ty5QZW5k''@;'; put 'put ''aW5nfHxXPT09Ty5VbmF2YWlsYWJsZTtYLmRvUG9sbD0oVyxZLHEsZWUsSixuZSxpZSxsZSxtZSxfZSk9Pmcodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIFRlLFNlO2NvbnN0e21heFBvbGxDb3VudDpqZSxwb2xsSW50ZXJ2YWw6Vn09bmUscD1JLmxvZ2dlcnx8XyxiPVku''@;'; put 'put ''bGlua3MuZmluZChFPT4ic3RhdGUiPT09RS5yZWwpO2xldCBDPTAsVD1xLEg9Ty5Ob1N0YXRlLGo9MDtmb3IoO0woVCkmJko8PWplOyl7aWYoX2UmJkomJkolMTA9PTAmJmllKXtjb25zdHtzZXNzaW9uOm0sc2Vzc2lvbk1hbmFnZXI6QX09X2Use3N0YXRlVXJsOmFlLGV0YWc6dGUsaWQ6c2V9''@;'; put 'put ''PW0se2FjY2Vzc190b2tlbjp3ZX09aWUse2lkOlVlfT1ZLHtyZXN1bHQ6SmUscmVzcG9uc2VTdGF0dXM6b3R9PXlpZWxkIEEuZ2V0U2Vzc2lvblN0YXRlKGFlLHRlLHdlKS5jYXRjaCh2ZT0+e3Rocm93IG5ldyB3LkpvYlN0YXRlUG9sbEVycm9yKFVlLHZlKX0pLHhlPXZlPT5bUC5TZXNzaW9u''@;'; put 'put ''U3RhdGUuUnVubmluZyxQLlNlc3Npb25TdGF0ZS5JZGxlXS5pbmNsdWRlcyh2ZSk7aWYoIXhlKEplKXx8MjAwIT09b3Qpe0EuY2xlYXJTZXNzaW9uKHNlLHdlKTtjb25zdCB2ZT14ZShKZSk/YFNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzIG5vdCAyMDAuIFNlc3Npb24gcmVzcG9uc2Ugc3Rh''@;'; put 'put ''dHVzIGlzICR7b3R9LmA6YFNlc3Npb24gc3RhdGUgb2YgdGhlIGpvYiBpcyBub3QgJ3J1bm5pbmcnIG9yICdpZGxlJy4gU2Vzc2lvbiBzdGF0ZSBpcyAnJHtKZX0nYDt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJvcihVZSxuZXcgRXJyb3IodmUpKX19VD15aWVsZCBOKFcsWSxULGVlLGll''@;'; put 'put ''KS5jYXRjaChtPT57aWYoQysrLEo+PWplfHxDPj01KXRocm93IG07cmV0dXJuIHAuZXJyb3IoYEVycm9yIGZldGNoaW5nIGpvYiBzdGF0ZSBmcm9tICR7Yi5ocmVmfS4gUmVzdW1pbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuYCxtKSxPLlVuYXZhaWxhYmxlfSksSisrO2Nv''@;'; put 'put ''bnN0IEU9WS5saW5rcy5maW5kKG09PiJzZWxmIj09PW0ucmVsKS5ocmVmO2lmKGxlKXtjb25zdHtyZXN1bHQ6bX09eWllbGQgVy5nZXQoRSxpZT8uYWNjZXNzX3Rva2VuKSxBPW51bGwhPT0oU2U9bnVsbD09PShUZT1tLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1UZT92b2lkIDA6VGUubGlu''@;'; put 'put ''ZUNvdW50KSYmdm9pZCAwIT09U2U/U2U6MWU2LHtzYXZlTG9nOmFlfT0oMCxGLmlzTm9kZSkoKT95KDIwODApOntzYXZlTG9nOm51bGx9O2FlJiYoeWllbGQgYWUoWSxXLGosQSxtZSxpZT8uYWNjZXNzX3Rva2VuKSksais9QX1lZSYmSCE9PVQmJihwLmluZm8oYFBvbGxpbmc6ICR7Vy5nZXRC''@;'; put 'put ''YXNlVXJsKCkrRX0vc3RhdGVgKSxwLmluZm8oYEN1cnJlbnQgam9iIHN0YXRlOiAke1R9YCksSD1UKSxUIT09Ty5VbmF2YWlsYWJsZSYmQz4wJiYoQz0wKSxUIT09Ty5Db21wbGV0ZWQmJih5aWVsZCgwLEYuZGVsYXkpKFYpKX1yZXR1cm57c3RhdGU6VCxwb2xsQ291bnQ6Sn19KTtjb25zdCBV''@;'; put 'put ''PVc9Pntjb25zdCBZPShxLGVlKT0+e3Rocm93IG5ldyBFcnJvcihgUG9sbCBzdHJhdGVnaWVzIGFyZSBub3QgdmFsaWQuJHtxP2AgJHtxfWA6IiJ9JHtlZT9gIEludmFsaWQgcG9sbCBzdHJhdGVneTogXG4ke0pTT04uc3RyaW5naWZ5KGVlLG51bGwsMil9YDoiIn1gKX07Vy5mb3JFYWNoKChx''@;'; put 'put ''LGVlKT0+e2NvbnN0e21heFBvbGxDb3VudDpKLHBvbGxJbnRlcnZhbDpuZX09cTtKPDE/WSgiJ21heFBvbGxDb3VudCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIscSk6MCE9PWVlP0o8PVdbZWUtMV0ubWF4UG9sbENvdW50JiZZKCInbWF4UG9sbENvdW50JyBoYXMgdG8gYmUgZ3JlYXRl''@;'; put 'put ''ciB0aGFuICdtYXhQb2xsQ291bnQnIGluIHByZXZpb3VzIHBvbGwgc3RyYXRlZ3kuIixxKTpuZTwxJiZZKCIncG9sbEludGVydmFsJyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuIixxKX0pfX0sMjA4MDpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1''@;'; put 'put ''MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLE8seixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtxKE4ubmV4dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtxKE4udGhyb3co''@;'; put 'put ''ZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBxKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIEwoSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShLKX0pfShlZS52YWx1ZSkudGhlbihXLFkpfXEoKE49Ti5hcHBseShGLE98fFtdKSkubmV4''@;'; put 'put ''dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5zYXZlTG9nPXZvaWQgMDtjb25zdCBCPXkoNTkyOCksdz15KDYxMzEpO1guc2F2ZUxvZz1mdW5jdGlvbiBQKEYsTyx6LE4sTCxLKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24qKCl7aWYoIUspdGhyb3cgbmV3IEVycm9yKGBMb2dzIGZvciBqb2IgJHtGLmlkfSBjYW5ub3QgYmUgZmV0Y2hlZCB3aXRob3V0IGEgdmFsaWQgYWNjZXNzIHRva2VuLmApO2lmKCFMKXRocm93IG5ldyBFcnJvcihgTG9ncyBmb3Igam9iICR7Ri5pZH0gY2Fubm90IGJlIHdyaXR0ZW4g''@;'; put 'put ''d2l0aG91dCBhIHZhbGlkIHdyaXRlIHN0cmVhbS5gKTtjb25zdCBVPUkubG9nZ2VyfHxfLFc9Ri5saW5rcy5maW5kKHE9PiJsb2ciPT09cS5yZWwpO2lmKCFXKXRocm93IG5ldyBFcnJvcihgTG9nIFVSTCBmb3Igam9iICR7Ri5pZH0gd2FzIG5vdCBmb3VuZC5gKTtjb25zdCBZPXlpZWxkKDAs''@;'; put 'put ''Qi5mZXRjaExvZykoTyxLLGAke1cuaHJlZn0vY29udGVudGAseixOKTtVLmluZm8oYFdyaXRpbmcgbG9ncyB0byAke0wucGF0aH1gKSx5aWVsZCgwLHcud3JpdGVTdHJlYW0pKEwsWXx8IiIpfSl9fSw2NDk2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMu''@;'; put 'put ''X19hd2FpdGVyfHxmdW5jdGlvbih3LFAsRixPKXtyZXR1cm4gbmV3KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbihOLEwpe2Z1bmN0aW9uIEsoWSl7dHJ5e1coTy5uZXh0KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBVKFkpe3RyeXtXKE8udGhyb3coWSkpfWNhdGNoKHEpe0wocSl9fWZ1''@;'; put 'put ''bmN0aW9uIFcoWSl7WS5kb25lP04oWS52YWx1ZSk6ZnVuY3Rpb24geihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRihmdW5jdGlvbihMKXtMKE4pfSl9KFkudmFsdWUpLnRoZW4oSyxVKX1XKChPPU8uYXBwbHkodyxQfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgudXBsb2FkVGFibGVzPXZvaWQgMDtjb25zdCBfPXkoOTc3OCksZz15KDI0MDIpO1gudXBsb2FkVGFibGVzPWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBPPVtdO2Zv''@;'; put 'put ''cihjb25zdCB6IGluIFApe2NvbnN0IE49KDAsZy5jb252ZXJ0VG9DU1YpKFAseik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PU4pdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIp''@;'; put 'put ''O2NvbnN0IEw9eWllbGQgdy51cGxvYWRGaWxlKCIvZmlsZXMvZmlsZXMjcmF3VXBsb2FkIixOLEYpLmNhdGNoKEs9Pnt0aHJvdygwLF8ucHJlZml4TWVzc2FnZSkoSywiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIGZpbGUuICIpfSk7Ty5wdXNoKHt0YWJsZU5hbWU6eixmaWxlOkwucmVzdWx0fSl9''@;'; put 'put ''cmV0dXJuIE99KX19LDYxMzE6ZnVuY3Rpb24odWUsWCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihfLGcsQix3KXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihGLE8pe2Z1bmN0aW9uIHooSyl7dHJ5e0wody5uZXh0KEspKX1j''@;'; put 'put ''YXRjaChVKXtPKFUpfX1mdW5jdGlvbiBOKEspe3RyeXtMKHcudGhyb3coSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIEwoSyl7Sy5kb25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihmdW5jdGlvbihPKXtPKEYpfSl9KEsudmFsdWUp''@;'; put 'put ''LnRoZW4oeixOKX1MKCh3PXcuYXBwbHkoXyxnfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgud3JpdGVTdHJlYW09dm9pZCAwLFgud3JpdGVTdHJlYW09KF8sZyk9Pnkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rp''@;'; put 'put ''b24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChCLHcpPT57Xy53cml0ZShnKyJcbiIsUD0+e1A/dyhQKTpCKCEwKX0pfSl9KX0sMjg1MTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUxMDgpLF89eSg0MTU1KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihX''@;'; put 'put ''LFkscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24obmUsaWUpe2Z1bmN0aW9uIGxlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIG1lKFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5j''@;'; put 'put ''dGlvbiBfZShUZSl7VGUuZG9uZT9uZShUZS52YWx1ZSk6ZnVuY3Rpb24gSihuZSl7cmV0dXJuIG5lIGluc3RhbmNlb2YgcT9uZTpuZXcgcShmdW5jdGlvbihpZSl7aWUobmUpfSl9KFRlLnZhbHVlKS50aGVuKGxlLG1lKX1fZSgoZWU9ZWUuYXBwbHkoVyxZfHxbXSkpLm5leHQoKSl9KX07T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQXV0aE1hbmFnZXI9dm9pZCAwO2NvbnN0IEI9eSgzOTAwKSx3PXkoMTM5NSksUD15KDU5MjgpLEY9eSgxMTcwKSxPPXkoNTQxOCksej15KDQ1ODIpLE49eSg2NTQ3KSxMPXkoMTUyNyk7WC5BdXRoTWFuYWdl''@;'; put 'put ''cj1jbGFzcyBLe2NvbnN0cnVjdG9yKFkscSxlZSxKKXt0aGlzLnNlcnZlclVybD1ZLHRoaXMuc2VydmVyVHlwZT1xLHRoaXMucmVxdWVzdENsaWVudD1lZSx0aGlzLmxvZ2luQ2FsbGJhY2s9Six0aGlzLnVzZXJOYW1lPSIiLHRoaXMudXNlckxvbmdOYW1lPSIiLHRoaXMucmVkaXJlY3RlZExv''@;'; put 'put ''Z2luVXJsPSIvU0FTTG9nb24iLHRoaXMuZXh0cmFjdFVzZXJOYW1lPW5lPT57c3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gbmU/LmlkO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuIiI7Y2FzZSBCLlNlcnZlclR5cGUuU2FzanM6''@;'; put 'put ''cmV0dXJuIG5lPy51c2VybmFtZTtkZWZhdWx0OnJldHVybiBJLmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWU9bmU9Pntzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEIuU2Vy''@;'; put 'put ''dmVyVHlwZS5TYXNWaXlhOnJldHVybiBuZT8ubmFtZTtjYXNlIEIuU2VydmVyVHlwZS5TYXM5OnJldHVybigwLEYuZXh0cmFjdFVzZXJMb25nTmFtZVNhczkpKG5lKTtjYXNlIEIuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4gbmU/LmRpc3BsYXlOYW1lO2RlZmF1bHQ6cmV0dXJuIEkuZXJyb3Io''@;'; put 'put ''IlNlcnZlciBUeXBlIG5vdCBmb3VuZCBpbiBleHRyYWN0VXNlck5hbWUgZnVuY3Rpb24iKSwiIn19LHRoaXMuc2V0TG9naW5Vcmw9bmU9PntsZXQgaWU9bmVbMV0ucmVwbGFjZSgvXD8uKi8sIiIpO2lmKCIvIj09PWllWzBdKXtpZT1pZS5zdWJzdHIoMSk7Y29uc3QgbGU9dGhpcy5zZXJ2ZXJV''@;'; put 'put ''cmw/YCR7dGhpcy5zZXJ2ZXJVcmx9LyR7aWV9YDpgJHtpZX1gO3RoaXMubG9naW5Vcmw9dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/bGU6bGUucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIil9fSx0aGlzLmxvZ2luVXJsPSIvU0FT''@;'; put 'put ''TG9nb24vbG9naW4iLHRoaXMubG9nb3V0VXJsPXRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXM5PyIvU0FTTG9nb24vbG9nb3V0PyI6dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ii9TQVNMb2dvbi9sb2dvdXQuZG8/IjoiL1NBU0xvZ29uL2xvZ291dCIs''@;'; put 'put ''dGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9dGhpcy5zZXJ2ZXJVcmwrdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmx9cmVkaXJlY3RlZExvZ0luKHtvbkxvZ2dlZE91dDpZfSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2lzTG9nZ2VkSW46cSx1c2VyTmFtZTpl''@;'; put 'put ''ZSx1c2VyTG9uZ05hbWU6Sn09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7aWYocSlyZXR1cm4oXy5sb2dnZXJ8fEkpLmxvZygibG9naW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNzaW9uIGFscmVhZHkgZXhpc3RzIikseWllbGQgdGhpcy5sb2dpbkNhbGxiYWNrKCkse2lz''@;'; put 'put ''TG9nZ2VkSW46ITAsdXNlck5hbWU6ZWUsdXNlckxvbmdOYW1lOkp9O2NvbnN0IG5lPXlpZWxkKDAsTy5vcGVuV2ViUGFnZSkodGhpcy5yZWRpcmVjdGVkTG9naW5VcmwsIlNBU0xvZ29uIix7d2lkdGg6NTAwLGhlaWdodDo2MDB9LFkpO2lmKCFuZSlyZXR1cm57aXNMb2dnZWRJbjohMSx1c2Vy''@;'; put 'put ''TmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9O2NvbnN0e2lzTG9nZ2VkSW46aWV9PXRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhP3lpZWxkKDAsTi52ZXJpZnlTYXNWaXlhTG9naW4pKG5lKTp5aWVsZCgwLHoudmVyaWZ5U2FzOUxvZ2luKShuZSk7aWYobmUuY2xvc2UoKSxp''@;'; put 'put ''ZSl7dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczkmJih5aWVsZCB0aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCkpO2NvbnN0e3VzZXJOYW1lOmxlLHVzZXJMb25nTmFtZTptZX09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7cmV0dXJuIHlpZWxkIHRoaXMubG9naW5D''@;'; put 'put ''YWxsYmFjaygpLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOmxlLHVzZXJMb25nTmFtZTptZX19cmV0dXJue2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifX0pfWxvZ0luKFkscSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGVl''@;'; put 'put ''PXtfc2VydmljZToiZGVmYXVsdCIsdXNlcm5hbWU6WSxwYXNzd29yZDpxfTt0aGlzLnVzZXJOYW1lPSIiLHRoaXMudXNlckxvbmdOYW1lPSIiO2xldHtpc0xvZ2dlZEluOkosbG9naW5Gb3JtOm5lLHVzZXJMb25nTmFtZTppZX09eWllbGQgdGhpcy5jaGVja1Nlc3Npb24oKTtpZihKKXJldHVy''@;'; put 'put ''bihfLmxvZ2dlcnx8SSkubG9nKCJsb2dpbiB3YXMgbm90IGF0dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSx5aWVsZCB0aGlzLmxvZ2luQ2FsbGJhY2soKSx0aGlzLnVzZXJOYW1lPWVlLnVzZXJuYW1lLHRoaXMudXNlckxvbmdOYW1lPWllLHtpc0xvZ2dlZElu''@;'; put 'put ''OiEwLHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfTtsZXQgbGU9eWllbGQgdGhpcy5zZW5kTG9naW5SZXF1ZXN0KG5lLGVlKSxtZT0oMCxMLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudCkodGhpcy5zZXJ2ZXJUeXBlLGxlKTtpZighbWUp''@;'; put 'put ''e2lmKFUobGUpKXtjb25zdCBUZT15aWVsZCB0aGlzLmdldExvZ2luRm9ybShsZSk7bGU9eWllbGQgdGhpcy5zZW5kTG9naW5SZXF1ZXN0KFRlLGVlKX1jb25zdCBfZT15aWVsZCB0aGlzLmNoZWNrU2Vzc2lvbigpO21lPV9lLmlzTG9nZ2VkSW4sdGhpcy51c2VyTG9uZ05hbWU9X2UudXNlckxv''@;'; put 'put ''bmdOYW1lfXJldHVybiBtZSYmKHRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXM5JiYoeWllbGQgdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpKSx0aGlzLmxvZ2luQ2FsbGJhY2soKSx0aGlzLnVzZXJOYW1lPWVlLnVzZXJuYW1lKSx7aXNMb2dnZWRJbjptZSx1c2VyTmFt''@;'; put 'put ''ZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX19KX1wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPWAke3RoaXMuc2VydmVyVXJsfS9TQVNTdG9yZWRQcm9jZXNzL2pfc3By''@;'; put 'put ''aW5nX2Nhc19zZWN1cml0eV9jaGVja2A7eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgL1NBU0xvZ29uL2xvZ2luP3NlcnZpY2U9JHtZfWAsdm9pZCAwKS5jYXRjaChxPT57aWYoIShxIGluc3RhbmNlb2Ygdy5Ob3RGb3VuZEVycm9yKSl0aHJvdyBxfSl9KX1zZW5kTG9naW5SZXF1ZXN0''@;'; put 'put ''KFkscSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNqcyl7Y29uc3R7dXNlcm5hbWU6bmUscGFzc3dvcmQ6aWV9PXEse3Jlc3VsdDpsZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhp''@;'; put 'put ''cy5sb2dpblVybCx7dXNlcm5hbWU6bmUscGFzc3dvcmQ6aWV9LHZvaWQgMCk7cmV0dXJuIGxlfWZvcihjb25zdCBuZSBpbiBZKXFbbmVdPVlbbmVdO2NvbnN0IGVlPSgwLFAuc2VyaWFsaXplKShxKSx7cmVzdWx0Okp9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5V''@;'; put 'put ''cmwsZWUsdm9pZCAwLCJ0ZXh0L3BsYWluIix7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsQWNjZXB0OiIqLyoifSk7cmV0dXJuIEp9KX1jaGVja1Nlc3Npb24oKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7''@;'; put 'put ''aXNMb2dnZWRJbjpZLHVzZXJOYW1lOnEsdXNlckxvbmdOYW1lOmVlfT15aWVsZCB0aGlzLmZldGNoVXNlck5hbWUoKTtsZXQgSj1udWxsO3JldHVybiBZfHwoeWllbGQgdGhpcy5sb2dPdXQoKSxKPXlpZWxkIHRoaXMuZ2V0TmV3TG9naW5Gb3JtKCkpLFByb21pc2UucmVzb2x2ZSh7aXNMb2dn''@;'; put 'put ''ZWRJbjpZLHVzZXJOYW1lOnEsdXNlckxvbmdOYW1lOmVlLGxvZ2luRm9ybTpKfSl9KX1nZXROZXdMb2dpbkZvcm0oKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc2pzKXJldHVybiB0aGlzLnJlcXVl''@;'; put 'put ''c3RDbGllbnQuZ2V0KCIvIix2b2lkIDApLnRoZW4oKHtyZXN1bHQ6cX0pPT57dmFyIGVlO2NvbnN0IEo9bnVsbD09PShlZT0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhTUkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3Njcmlw''@;'; put 'put ''dD4vLmV4ZWMocSkpfHx2b2lkIDA9PT1lZT92b2lkIDA6ZWVbMV07SiYmKGRvY3VtZW50LmNvb2tpZT1KKX0pO2NvbnN0e3Jlc3VsdDpZfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9naW5VcmwucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xv''@;'; put 'put ''Z2luIiksdm9pZCAwLCJ0ZXh0L3BsYWluIik7cmV0dXJuIHlpZWxkIHRoaXMuZ2V0TG9naW5Gb3JtKFkpfSl9ZmV0Y2hVc2VyTmFtZSgpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPXRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlh''@;'; put 'put ''P2Ake3RoaXMuc2VydmVyVXJsfS9pZGVudGl0aWVzL3VzZXJzL0BjdXJyZW50VXNlcmA6dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczk/YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU1N0b3JlZFByb2Nlc3NgOmAke3RoaXMuc2VydmVyVXJsfS9TQVNqc0FwaS9zZXNzaW9uYCx7cmVz''@;'; put 'put ''dWx0OnF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoWSx2b2lkIDAsInRleHQvcGxhaW4iKS5jYXRjaChKPT4oe3Jlc3VsdDoiYXV0aEVyciJ9KSksZWU9ImF1dGhFcnIiIT09cTtyZXR1cm4gZWU/e2lzTG9nZ2VkSW46ZWUsdXNlck5hbWU6dGhpcy5leHRyYWN0VXNlck5hbWUocSks''@;'; put 'put ''dXNlckxvbmdOYW1lOnRoaXMuZXh0cmFjdFVzZXJMb25nTmFtZShxKX06KHlpZWxkIHRoaXMubG9nT3V0KCkse2lzTG9nZ2VkSW46ZWUsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifSl9KX1nZXRMb2dpbkZvcm0oWSl7Y29uc3QgZWU9Lzxmb3JtLithY3Rpb249IiguKihMb2dvbnxsb2dp''@;'; put 'put ''bilbXiJdKikuKj4vLmV4ZWMoWSksSj17fTtpZihlZSYmZWUubGVuZ3RoKXt0aGlzLnNldExvZ2luVXJsKGVlKTtjb25zdCBuZT0oWT1ZLnJlcGxhY2UoLzxpbnB1dC9nLCJcbjxpbnB1dCIpKS5tYXRjaCgvPGlucHV0LioiaGlkZGVuIltePl0qPi9nKTtuZSYmbmUuZm9yRWFjaChpZT0+e2Nv''@;'; put 'put ''bnN0IGxlPWllLm1hdGNoKC9uYW1lPSIoW14iXSopIlxzdmFsdWU9IihbXiJdKikvKTtsZSYmbGUubGVuZ3RoJiYoSltsZVsxXV09bGVbMl0pfSl9cmV0dXJuIE9iamVjdC5rZXlzKEopLmxlbmd0aD9KOm51bGx9bG9nT3V0KCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe3JldHVybiB0aGlzLnJlcXVlc3RDbGllbnQuY2xlYXJDc3JmVG9rZW5zKCksdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ291dFVybCx2b2lkIDApLnRoZW4oKCk9PiEwKX0pfX07Y29uc3QgVT1XPT4vQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdGhlIHN5c3RlbSB3YXMgdmVy''@;'; put 'put ''aWZ5aW5nIHlvdXIgY3JlZGVudGlhbHMuIFBsZWFzZSBlbnRlciB5b3VyIGNyZWRlbnRpYWxzIGFnYWluLi9nbS50ZXN0KFcpfSw1NzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhP''@;'; put 'put ''fHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKHEpe3RyeXtZKHoubmV4dChxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKHEpe3RyeXtZKHoudGhyb3cocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXtxLmRvbmU/TChxLnZhbHVlKTpmdW5jdGlv''@;'; put 'put ''biBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0ocS52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRB''@;'; put 'put ''Y2Nlc3NUb2tlbkZvclNhc2pzPXZvaWQgMDtjb25zdCBfPXkoOTc3OCksZz15KDkwMTcpLEI9eSgzOTAwKTtYLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9ZnVuY3Rpb24gdyhQLEYsTyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHo9Ii9TQVNqc0FwaS9h''@;'; put 'put ''dXRoL3Rva2VuIixOPXtjbGllbnRJZDpGLGNvZGU6T307cmV0dXJuIHlpZWxkIFAucG9zdCh6LE4sdm9pZCAwKS50aGVuKEw9Pntjb25zdCBLPUwucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46Sy5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOksucmVmcmVzaFRva2VufX0pLmNhdGNoKEw9''@;'; put 'put ''Pnt0aHJvdygwLF8ucHJlZml4TWVzc2FnZSkoTCwoMCxnLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcyIsQi5TZXJ2ZXJUeXBlLlNhc2pzLHosTixGKSl9KX0pfX0sMzU2OTpmdW5jdGlvbih1ZSxYLHkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihPLHosTixMKXtyZXR1cm4gbmV3KE58fChOPVByb21pc2UpKShmdW5jdGlvbihVLFcpe2Z1bmN0aW9uIFkoSil7dHJ5e2VlKEwubmV4dChKKSl9Y2F0Y2gobmUpe1cobmUp''@;'; put 'put ''fX1mdW5jdGlvbiBxKEope3RyeXtlZShMLnRocm93KEopKX1jYXRjaChuZSl7VyhuZSl9fWZ1bmN0aW9uIGVlKEope0ouZG9uZT9VKEoudmFsdWUpOmZ1bmN0aW9uIEsoVSl7cmV0dXJuIFUgaW5zdGFuY2VvZiBOP1U6bmV3IE4oZnVuY3Rpb24oVyl7VyhVKX0pfShKLnZhbHVlKS50aGVuKFks''@;'; put 'put ''cSl9ZWUoKEw9TC5hcHBseShPLHp8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9dm9pZCAwO2NvbnN0IGc9eSgzOTAwKSxCPXkoOTc3OCksdz15KDEzOTUpLFA9eSg5MDE3KTtY''@;'; put 'put ''LmdldEFjY2Vzc1Rva2VuRm9yVml5YT1mdW5jdGlvbiBGKE8seixOLEwpe3JldHVybiBfKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgSztLPXR5cGVvZiBJPiJ1Ij9idG9hKHorIjoiK04pOkkuZnJvbSh6KyI6IitOKS50b1N0cmluZygiYmFzZTY0Iik7Y29uc3QgVT0iL1NB''@;'; put 'put ''U0xvZ29uL29hdXRoL3Rva2VuIixXPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiK0ssQWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn0sWT1uZXcgVVJMU2VhcmNoUGFyYW1zKHtncmFudF90eXBlOiJhdXRob3JpemF0aW9uX2NvZGUiLGNvZGU6TH0pLHE9bmV3IFVSTFNlYXJjaFBhcmFtcyhZKTty''@;'; put 'put ''ZXR1cm4geWllbGQgTy5wb3N0KFUscSx2b2lkIDAsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsVykudGhlbihKPT5KLnJlc3VsdCkuY2F0Y2goSj0+e3Rocm93IEogaW5zdGFuY2VvZiB3LkNlcnRpZmljYXRlRXJyb3I/SjooMCxCLnByZWZpeE1lc3NhZ2UpKEosKDAsUC5n''@;'; put 'put ''ZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZldGNoaW5nIGFjY2VzcyB0b2tlbiIsImdldEFjY2Vzc1Rva2VuRm9yVml5YSIsZy5TZXJ2ZXJUeXBlLlNhc1ZpeWEsVSxZLFcseixOKSl9KX0pfX0sOTAxNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''WCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeFJlc3BvbnNlPVguZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9dm9pZCAwO2NvbnN0IEk9eSgzOTAwKSxnPVA9PmBSZXNwb25zZSBmcm9tICR7KFA9PlA9PT1JLlNlcnZlclR5cGUuU2FzVml5''@;'; put 'put ''YT8iVml5YSI6IlNhc2pzIikoUCl9IGlzIGJlbG93LmA7WC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeD0oUCxGLE8seixOLEwsSyxVKT0+e2NvbnN0IFc9cT0+SlNPTi5zdHJpbmdpZnkocSxudWxsLDIpLFk9W2BFcnJvciB3aGlsZSAke1B9IGZyb20gJHt6fWAsYFRocm93biBieSB0aGUg''@;'; put 'put ''QHNhc2pzL2FkYXB0ZXIgJHtGfSBmdW5jdGlvbi5gXTtyZXR1cm4gTiYmKFkucHVzaCgiUGF5bG9hZDoiKSxZLnB1c2goVyhOKSkpLEwmJihZLnB1c2goIkhlYWRlcnM6IiksWS5wdXNoKFcoTCkpKSxLJiZZLnB1c2goYENsaWVudElkOiAke0t9YCksVSYmWS5wdXNoKGBDbGllbnRTZWNyZXQ6''@;'; put 'put ''ICR7VX1gKSxZLnB1c2goIiIpLFkucHVzaChgJHtnKE8pfWApLFkucHVzaCgiIiksWS5qb2luKCJcbiIpfSxYLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9KFAsRik9PlAuc3BsaXQoYCR7ZyhGKX1cbmApLnBvcCgpfSw3MDQ6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oeixOLEwsSyl7cmV0dXJuIG5ldyhMfHwoTD1Qcm9taXNlKSkoZnVuY3Rpb24oVyxZKXtmdW5jdGlvbiBxKG5lKXt0cnl7SihLLm5leHQobmUpKX1jYXRjaChpZSl7WShpZSl9fWZ1bmN0''@;'; put 'put ''aW9uIGVlKG5lKXt0cnl7SihLLnRocm93KG5lKSl9Y2F0Y2goaWUpe1koaWUpfX1mdW5jdGlvbiBKKG5lKXtuZS5kb25lP1cobmUudmFsdWUpOmZ1bmN0aW9uIFUoVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiBMP1c6bmV3IEwoZnVuY3Rpb24oWSl7WShXKX0pfShuZS52YWx1ZSkudGhlbihxLGVl''@;'; put 'put ''KX1KKChLPUsuYXBwbHkoeixOfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VG9rZW5zPXZvaWQgMDtjb25zdCBCPXkoNjc5OSksdz15KDM5MDApLFA9eSgzNjYpLEY9eSgyNDkpO1guZ2V0VG9rZW5zPWZ1bmN0''@;'; put 'put ''aW9uIE8oeixOLEw9dy5TZXJ2ZXJUeXBlLlNhc1ZpeWEpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPUkubG9nZ2VyfHxfO2xldHthY2Nlc3NfdG9rZW46VSxyZWZyZXNoX3Rva2VuOlcsY2xpZW50Olksc2VjcmV0OnF9PU47aWYoKDAsQi5pc0FjY2Vz''@;'; put 'put ''c1Rva2VuRXhwaXJpbmcpKFUpfHwoMCxCLmlzUmVmcmVzaFRva2VuRXhwaXJpbmcpKFcpKXtpZigoMCxCLmhhc1Rva2VuRXhwaXJlZCkoVykpe2NvbnN0IEo9IlVuYWJsZSB0byBvYnRhaW4gbmV3IGFjY2VzcyB0b2tlbi4gWW91ciByZWZyZXNoIHRva2VuIGhhcyBleHBpcmVkLiI7dGhyb3cg''@;'; put 'put ''Sy5lcnJvcihKKSxuZXcgRXJyb3IoSil9Sy5pbmZvKCJSZWZyZXNoaW5nIGFjY2VzcyBhbmQgcmVmcmVzaCB0b2tlbnMuIiksKHthY2Nlc3NfdG9rZW46VSxyZWZyZXNoX3Rva2VuOld9PUw9PT13LlNlcnZlclR5cGUuU2FzVml5YT95aWVsZCgwLFAucmVmcmVzaFRva2Vuc0ZvclZpeWEpKHos''@;'; put 'put ''WSxxLFcpOnlpZWxkKDAsRi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKHosVykpfXJldHVybnthY2Nlc3NfdG9rZW46VSxyZWZyZXNoX3Rva2VuOlcsY2xpZW50Olksc2VjcmV0OnF9fSl9fSwxNTI3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVh''@;'; put 'put ''dGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYm''@;'; put 'put ''KEY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxC''@;'; put 'put ''KXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyh5KDI4NTEpLFgpLF8oeSg5MDk3KSxYKSxfKHko''@;'; put 'put ''OTE2NiksWCksXyh5KDY2NDMpLFgpfSw5MDk3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD12b2lkIDAsWC5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD1JPT4vPGZv''@;'; put 'put ''cm0uK2FjdGlvbj0iKC4qTG9nb25cL29hdXRoXC9hdXRob3JpemVbXiJdKikuKj4vZ20udGVzdChJKX0sOTE2NjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNMb2dJblJlcXVpcmVkPXZvaWQgMCxYLmlz''@;'; put 'put ''TG9nSW5SZXF1aXJlZD1JPT4vPGZvcm0uK2FjdGlvbj0iKC4qKExvZ29uKXwobG9naW4pW14iXSopLio+L2dtLnRlc3QoSSl9LDY2NDM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNMb2dJblN1Y2Nl''@;'; put 'put ''c3NIZWFkZXJQcmVzZW50PVguZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXI9WC5sb2dpblN1Y2Nlc3NIZWFkZXJzPVguZGVmYXVsdFN1Y2Nlc3NIZWFkZXJLZXk9dm9pZCAwO2NvbnN0IEk9eSgzOTAwKSxfPXkoNTkyOCksZz0iWW91IGhhdmUgc2lnbmVkIGluLiI7WC5kZWZhdWx0U3Vj''@;'; put 'put ''Y2Vzc0hlYWRlcktleT0iZGVmYXVsdCIsWC5sb2dpblN1Y2Nlc3NIZWFkZXJzPXtlczoiWWEgc2UgaGEgaW5pY2lhZG8gbGEgc2VzaVx4ZjNuLiIsdGg6Ilx1MGUwNFx1MGUzOFx1MGUxM1x1MGUyNVx1MGUwN1x1MGUwYVx1MGUzN1x1MGU0OFx1MGUyZFx1MGU0MFx1MGUwMlx1MGU0OVx1MGUz''@;'; put 'put ''Mlx1MGU0M1x1MGUwYVx1MGU0OVx1MGU0MVx1MGUyNVx1MGU0OVx1MGUyNyIsamE6Ilx1MzBiNVx1MzBhNFx1MzBmM1x1MzBhNFx1MzBmM1x1MzA1N1x1MzA3ZVx1MzA1N1x1MzA1Zlx1MzAwMiIsbmI6IkR1IGhhciBsb2dnZXQgZGVnIHBceGU1LiIsc2w6IlByaWphdmlsaSBzdGUgc2UuIixh''@;'; put 'put ''cjoiXHUwNjQ0XHUwNjQyXHUwNjJmIFx1MDY0Mlx1MDY0NVx1MDYyYSAiLHNrOiJQcmlobFx4ZTFzaWxpIHN0ZSBzYS4iLHpoX0hLOiJcdTYwYThcdTVkZjJcdTc2N2JcdTUxNjVcdTMwMDIiLHpoX0NOOiJcdTYwYThcdTVkZjJcdTc2N2JcdTVmNTVcdTMwMDIiLGl0OiJMJ3V0ZW50ZSBzaSBc''@;'; put 'put ''eGU4IGNvbm5lc3NvLiIsc3Y6IkR1IGhhciBsb2dnYXQgaW4uIixoZToiXHUwNWUwXHUwNWRiXHUwNWUwXHUwNWUxXHUwNWVhICIsbmw6IlUgaGVidCB6aWNoIGFhbmdlbWVsZC4iLHBsOiJab3N0YVx1MDE0MmVcdTAxNWIgemFsb2dvd2FueS4iLGtvOiJcdWI4NWNcdWFkZjhcdWM3NzhcdWQ1''@;'; put 'put ''ODhcdWMyYjVcdWIyYzhcdWIyZTQuIix6aF9UVzoiXHU2MGE4XHU1ZGYyXHU3NjdiXHU1MTY1XHUzMDAyIix0cjoiT3R1cnVtIGFceGU3dFx1MDEzMW5cdTAxMzF6LiIsaXc6Ilx1MDVlMFx1MDVkYlx1MDVlMFx1MDVlMVx1MDVlYSAiLGZyOiJWb3VzIFx4ZWF0ZXMgY29ubmVjdFx4ZTkuIix1''@;'; put 'put ''azoiXHUwNDEyXHUwNDM4IFx1MDQzMlx1MDQzMlx1MDQ1Nlx1MDQzOVx1MDQ0OFx1MDQzYlx1MDQzOCBcdTA0MzIgXHUwNDNlXHUwNDMxXHUwNDNiXHUwNDU2XHUwNDNhXHUwNDNlXHUwNDMyXHUwNDM4XHUwNDM5IFx1MDQzN1x1MDQzMFx1MDQzZlx1MDQzOFx1MDQ0MS4iLHB0X0JSOiJWb2Nc''@;'; put 'put ''eGVhIHNlIGNvbmVjdG91LiIsbm86IkR1IGhhciBsb2dnZXQgZGVnIHBceGU1LiIsY3M6IkpzdGUgcFx1MDE1OWlobFx4ZTFcdTAxNjFlbmkuIixmaToiT2xldCBraXJqYXV0dW51dCBzaXNceGU0XHhlNG4uIixydToiXHUwNDEyXHUwNDRiIFx1MDQzMlx1MDQ0Ylx1MDQzZlx1MDQzZVx1MDQz''@;'; put 'put ''Ylx1MDQzZFx1MDQzOFx1MDQzYlx1MDQzOCBcdTA0MzJcdTA0NDVcdTA0M2VcdTA0MzQgXHUwNDMyIFx1MDQ0MVx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQ0My4iLGVsOiJcdTAzODhcdTAzYzdcdTAzYjVcdTAzYzRcdTAzYjUgXHUwM2MzXHUwM2M1XHUwM2JkXHUwM2I0XHUw''@;'; put 'put ''M2I1XHUwM2I4XHUwM2I1XHUwM2FmLiIsaHI6IlByaWphdmlsaSBzdGUgc2UuIixkYToiRHUgZXIgbG9nZ2V0IHBceGU1LiIsZGU6IlNpZSBzaW5kIGpldHp0IGFuZ2VtZWxkZXQuIixzaDoiUHJpamF2bGplbmkgc3RlLiIscHQ6IkluaWNpb3Ugc2Vzc1x4ZTNvLiIsaHU6IkJlamVsZW50a2V6''@;'; put 'put ''ZXR0LiIsc3I6IlByaWphdmxqZW5pIHN0ZS4iLGVuOmcsW1guZGVmYXVsdFN1Y2Nlc3NIZWFkZXJLZXldOmd9LFguZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXI9KCk9PntsZXQgUD1YLmxvZ2luU3VjY2Vzc0hlYWRlcnNbWC5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleV07Y29uc3QgRj0o''@;'; put 'put ''MCxfLmdldFVzZXJMYW5ndWFnZSkoKTtpZihGKXtsZXQgTz1YLmxvZ2luU3VjY2Vzc0hlYWRlcnNbRl07aWYoTylQPU87ZWxzZXtjb25zdCBOPU9iamVjdC5rZXlzKFgubG9naW5TdWNjZXNzSGVhZGVycykuZmluZChMPT5uZXcgUmVnRXhwKEwsImkiKS50ZXN0KEYpKTtOJiYoUD1YLmxvZ2lu''@;'; put 'put ''U3VjY2Vzc0hlYWRlcnNbTl0pfX1yZXR1cm4gUH0sWC5pc0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQ9KFAsRik9PlA9PT1JLlNlcnZlclR5cGUuU2FzanM/Rj8ubG9nZ2VkSW46bmV3IFJlZ0V4cCgoMCxYLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyKSgpLCJnbSIpLnRlc3QoRil9''@;'; put 'put ''LDU0MTg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLE8pe3JldHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTCl7ZnVuY3Rpb24gSyhZKXt0cnl7VyhPLm5leHQoWSkpfWNhdGNoKHEpe0wo''@;'; put 'put ''cSl9fWZ1bmN0aW9uIFUoWSl7dHJ5e1coTy50aHJvdyhZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVyhZKXtZLmRvbmU/TihZLnZhbHVlKTpmdW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKEwpe0woTil9KX0oWS52YWx1ZSkudGhlbihLLFUp''@;'; put 'put ''fVcoKE89Ty5hcHBseSh3LFB8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5vcGVuV2ViUGFnZT12b2lkIDA7Y29uc3QgXz15KDEyMTApLGc9e3dpZHRoOjUwMCxoZWlnaHQ6NjAwfTtYLm9wZW5XZWJQYWdlPWZ1bmN0''@;'; put 'put ''aW9uIEIodyxQPSIiLEY9ZyxPKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7d2lkdGg6eixoZWlnaHQ6Tn09RixMPXNjcmVlbi53aWR0aC8yLXovMixLPXNjcmVlbi5oZWlnaHQvMi1OLzI7cmV0dXJuIHdpbmRvdy5vcGVuKHcsUCxgdG9vbGJhcj0wLGxv''@;'; put 'put ''Y2F0aW9uPTAsbWVudWJhcj0wLHdpZHRoPSR7en0saGVpZ2h0PSR7Tn0sbGVmdD0ke0x9LHRvcD0ke0t9YCl8fCgoeWllbGQoTz8/Xy5vcGVuTG9naW5Qcm9tcHQpKCkpP3dpbmRvdy5vcGVuKHcsUCxgdG9vbGJhcj0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHdpZHRoPSR7en0saGVpZ2h0PSR7''@;'; put 'put ''Tn0sbGVmdD0ke0x9LHRvcD0ke0t9YCk6bnVsbCl9KX19LDI0OTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBV''@;'; put 'put ''KHEpe3RyeXtZKHoubmV4dChxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKHEpe3RyeXtZKHoudGhyb3cocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXtxLmRvbmU/TChxLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1''@;'; put 'put ''bmN0aW9uKEspe0soTCl9KX0ocS52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5yZWZyZXNoVG9rZW5zRm9yU2FzanM9dm9pZCAwO2NvbnN0IF89eSg5Nzc4''@;'; put 'put ''KSxnPXkoOTAxNyksQj15KDM5MDApO1gucmVmcmVzaFRva2Vuc0ZvclNhc2pzPWZ1bmN0aW9uIHcoUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTz0iL1NBU2pzQXBpL2F1dGgvcmVmcmVzaCIsej17QXV0aG9yaXphdGlvbjoiQmVhcmVyICIrRn07''@;'; put 'put ''cmV0dXJuIHlpZWxkIFAucG9zdChPLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHopLnRoZW4oTD0+e2NvbnN0IEs9TC5yZXN1bHQ7cmV0dXJue2FjY2Vzc190b2tlbjpLLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46Sy5yZWZyZXNoVG9rZW59fSkuY2F0Y2goTD0+e3Rocm93KDAsXy5wcmVmaXhN''@;'; put 'put ''ZXNzYWdlKShMLCgwLGcuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJyZWZyZXNoaW5nIHRva2VucyIsInJlZnJlc2hUb2tlbnNGb3JTYXNqcyIsQi5TZXJ2ZXJUeXBlLlNhc2pzLE8pKX0pfSl9fSwzNjY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg4NzY0KS5C''@;'; put 'put ''dWZmZXIsXz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixMLEssVSl7cmV0dXJuIG5ldyhLfHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oWSxxKXtmdW5jdGlvbiBlZShpZSl7dHJ5e25lKFUubmV4dChpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gSihpZSl7dHJ5e25lKFUu''@;'; put 'put ''dGhyb3coaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1bmN0aW9uIG5lKGllKXtpZS5kb25lP1koaWUudmFsdWUpOmZ1bmN0aW9uIFcoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBLP1k6bmV3IEsoZnVuY3Rpb24ocSl7cShZKX0pfShpZS52YWx1ZSkudGhlbihlZSxKKX1uZSgoVT1VLmFwcGx5KE4s''@;'; put 'put ''THx8W10pKS5uZXh0KCkpfSl9LGc9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKE4pe3JldHVybiBOJiZOLl9fZXNNb2R1bGU/Tjp7ZGVmYXVsdDpOfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucmVmcmVzaFRva2Vuc0Zv''@;'; put 'put ''clZpeWE9dm9pZCAwO2NvbnN0IEI9eSgzOTAwKSx3PXkoOTc3OCksUD1nKHkoNjIzMCkpLEY9eSg1OTI4KSxPPXkoOTAxNyk7WC5yZWZyZXNoVG9rZW5zRm9yVml5YT1mdW5jdGlvbiB6KE4sTCxLLFUpe3JldHVybiBfKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighKDAsRi5p''@;'; put 'put ''c05vZGUpKCkpdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgJ3JlZnJlc2hUb2tlbnNGb3JWaXlhJyBjYW4gb25seSBiZSB1c2VkIGJ5IE5vZGUuIik7Y29uc3QgVz0iL1NBU0xvZ29uL29hdXRoL3Rva2VuIixxPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiKyh0eXBlb2YgST4idSI/YnRvYShMKyI6''@;'; put 'put ''IitLKTpJLmZyb20oTCsiOiIrSykudG9TdHJpbmcoImJhc2U2NCIpKX0sZWU9bmV3IFAuZGVmYXVsdDtyZXR1cm4gZWUuYXBwZW5kKCJncmFudF90eXBlIiwicmVmcmVzaF90b2tlbiIpLGVlLmFwcGVuZCgicmVmcmVzaF90b2tlbiIsVSkseWllbGQgTi5wb3N0KFcsZWUsdm9pZCAwLCJtdWx0''@;'; put 'put ''aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2VlLl9ib3VuZGFyeSxxKS50aGVuKG5lPT5uZS5yZXN1bHQpLmNhdGNoKG5lPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKG5lLCgwLE8uZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJyZWZyZXNoaW5nIHRva2VucyIsInJlZnJlc2hU''@;'; put 'put ''b2tlbnNGb3JWaXlhIixCLlNlcnZlclR5cGUuU2FzVml5YSxXLGVlLHEsTCxLKSl9KX0pfX0sNDU4MjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsTyl7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVu''@;'; put 'put ''Y3Rpb24oTixMKXtmdW5jdGlvbiBLKFkpe3RyeXtXKE8ubmV4dChZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVShZKXt0cnl7VyhPLnRocm93KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBXKFkpe1kuZG9uZT9OKFkudmFsdWUpOmZ1bmN0aW9uIHooTil7cmV0dXJuIE4gaW5zdGFu''@;'; put 'put ''Y2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTCl7TChOKX0pfShZLnZhbHVlKS50aGVuKEssVSl9VygoTz1PLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnZlcmlmeVNhczlMb2dpbj12b2lkIDA7Y29u''@;'; put 'put ''c3QgXz15KDU5MjgpLGc9eSgxNTI3KTtYLnZlcmlmeVNhczlMb2dpbj1mdW5jdGlvbiBCKHcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgUD0hMSxGPW5ldyBEYXRlLE89MDtkb3tpZih5aWVsZCgwLF8uZGVsYXkpKDFlMyksdy5jbG9zZWQpYnJlYWs7UD13''@;'; put 'put ''LndpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJTQVNMb2dvbiIpJiZ3LndpbmRvdy5kb2N1bWVudC5ib2R5LmlubmVyVGV4dC5pbmNsdWRlcygoMCxnLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyKSgpKSxPPSgobmV3IERhdGUpLnZhbHVlT2YoKS1GLnZhbHVlT2YoKSkvMWUz''@;'; put 'put ''fXdoaWxlKCFQJiZPPDMwMCk7cmV0dXJue2lzTG9nZ2VkSW46UH19KX19LDY1NDc6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixPLHope3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSyl7''@;'; put 'put ''ZnVuY3Rpb24gVShxKXt0cnl7WSh6Lm5leHQocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gVyhxKXt0cnl7WSh6LnRocm93KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkocSl7cS5kb25lP0wocS52YWx1ZSk6ZnVuY3Rpb24gTihMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIE8/''@;'; put 'put ''TDpuZXcgTyhmdW5jdGlvbihLKXtLKEwpfSl9KHEudmFsdWUpLnRoZW4oVSxXKX1ZKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNMb2dnZWRJblNBU1ZJWUE9WC52ZXJpZnlTYXNWaXlh''@;'; put 'put ''TG9naW49dm9pZCAwO2NvbnN0IF89eSg1OTI4KSxnPXkoMTUyNyk7WC52ZXJpZnlTYXNWaXlhTG9naW49ZnVuY3Rpb24gQihQKXt2YXIgRixPO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgej0hMSxOPW5ldyBEYXRlLEw9MDtkb3tpZih5aWVsZCgwLF8uZGVs''@;'; put 'put ''YXkpKDFlMyksUC5jbG9zZWQpYnJlYWs7ej0oMCxYLmlzTG9nZ2VkSW5TQVNWSVlBKSgpLEw9KChuZXcgRGF0ZSkudmFsdWVPZigpLU4udmFsdWVPZigpKS8xZTN9d2hpbGUoIXomJkw8MzAwKTtsZXQgSz0hMTtOPW5ldyBEYXRlO2Rve2lmKHlpZWxkKDAsXy5kZWxheSkoMWUzKSxQLmNsb3Nl''@;'; put 'put ''ZClicmVhaztLPVAud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIil8fChudWxsPT09KE89bnVsbD09PShGPVAud2luZG93LmRvY3VtZW50LmJvZHkpfHx2b2lkIDA9PT1GP3ZvaWQgMDpGLmlubmVyVGV4dCl8fHZvaWQgMD09PU8/dm9pZCAwOk8uaW5jbHVkZXMoKDAs''@;'; put 'put ''Zy5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcikoKSkpLEw9KChuZXcgRGF0ZSkudmFsdWVPZigpLU4udmFsdWVPZigpKS8xZTN9d2hpbGUoIUsmJkw8MzAwKTtyZXR1cm57aXNMb2dnZWRJbjp6JiZLfX0pfSxYLmlzTG9nZ2VkSW5TQVNWSVlBPSgpPT5kb2N1bWVudC5jb29raWUuaW5j''@;'; put 'put ''bHVkZXMoIkN1cnJlbnQtVXNlciIpJiZkb2N1bWVudC5jb29raWUuaW5jbHVkZXMoInVzZXJJZCIpfSw0MDM3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09dm9p''@;'; put 'put ''ZCAwO2NvbnN0IEk9eSgyNDAyKSxfPXkoNTkyOCk7WC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPShCLHcpPT57Zm9yKGNvbnN0IFAgaW4gdyl7aWYoIUFycmF5LmlzQXJyYXkod1tQXSkpY29udGludWU7Y29uc3QgRj1QLE89KDAsSS5jb252ZXJ0VG9DU1YpKHcsUCk7aWYoIkVSUk9SOiBMQVJH''@;'; put 'put ''RSBTVFJJTkcgTEVOR1RIIj09PU8pdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKCgwLF8uaXNOb2RlKSgpKUIuYXBwZW5kKEYsTyx7ZmlsZW5hbWU6YCR7Rn0uY3N2YCxjb250ZW50VHlw''@;'; put 'put ''ZToiYXBwbGljYXRpb24vY3N2In0pO2Vsc2V7Y29uc3Qgej1uZXcgQmxvYihbT10se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtCLmFwcGVuZChGLHosYCR7Rn0uY3N2YCl9fXJldHVybiBCfX0sMjE3MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT12b2lkIDA7Y29uc3QgST15KDI0MDIpLF89eSg0Nzk5KTtYLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtPShCLHcpPT57Y29uc3QgUD1bXSxGPXt9O2xldCBPPTA7Zm9yKGNvbnN0IHogaW4gdyl7TysrLCgw''@;'; put 'put ''LEkuaXNGb3JtYXRzVGFibGUpKHopfHxQLnB1c2goeik7Y29uc3QgTj0oMCxJLmNvbnZlcnRUb0NTVikodyx6KTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Til0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMy''@;'; put 'put ''NzY1IGNoYXJhY3RlcnMuIik7Ti5sZW5ndGg+MTZlMz8oMCxfLnNwbGl0Q2h1bmtzKShOKS5tYXAoSz0+e0IuYXBwZW5kKGBzYXNqcyR7T31kYXRhYCxLKX0pOkZbYHNhc2pzJHtPfWRhdGFgXT1OfXJldHVybiBGLnNhc2pzX3RhYmxlcz1QLmpvaW4oIiAiKSx7Zm9ybURhdGE6QixyZXF1ZXN0''@;'; put 'put ''UGFyYW1zOkZ9fX0sMzYwNzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24odyxQLEYsTyl7dm9pZCAwPT09TyYmKE89Rik7dmFyIHo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp''@;'; put 'put ''cHRvcihQLEYpOyghenx8KCJnZXQiaW4gej8hUC5fX2VzTW9kdWxlOnoud3JpdGFibGV8fHouY29uZmlndXJhYmxlKSkmJih6PXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LE8seil9OmZ1bmN0aW9uKHcsUCxGLE8p''@;'; put 'put ''e3ZvaWQgMD09PU8mJihPPUYpLHdbT109UFtGXX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBGIGluIHcpImRlZmF1bHQiIT09RiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLEYpJiZJKFAsdyxGKX0sZz10aGlzJiZ0''@;'; put 'put ''aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgQj1nKHkoNTk1NikpO18oeSgxMjMwKSxYKSxfKHkoMTM5NSksWCks''@;'; put 'put ''Xyh5KDk4MjEpLFgpLF8oeSg4MzA2KSxYKSxfKHkoMzQ2NyksWCksXyh5KDM2MDIpLFgpLFguZGVmYXVsdD1CLmRlZmF1bHR9LDE1NzA6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixPLHope3JldHVybiBuZXco''@;'; put 'put ''T3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSyl7ZnVuY3Rpb24gVShxKXt0cnl7WSh6Lm5leHQocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gVyhxKXt0cnl7WSh6LnRocm93KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkocSl7cS5kb25lP0wocS52YWx1ZSk6ZnVuY3Rp''@;'; put 'put ''b24gTihMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIE8/TDpuZXcgTyhmdW5jdGlvbihLKXtLKEwpfSl9KHEudmFsdWUpLnRoZW4oVSxXKX1ZKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQ29t''@;'; put 'put ''cHV0ZUpvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBfPXkoMzkwMCksZz15KDEzOTUpLEI9eSg2MTE4KTtYLkNvbXB1dGVKb2JFeGVjdXRvcj1jbGFzcyB3IGV4dGVuZHMgQi5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoRixPKXtzdXBlcihGLF8uU2VydmVyVHlwZS5TYXNWaXlhKSx0aGlz''@;'; put 'put ''LnNhc1ZpeWFBcGlDbGllbnQ9T31leGVjdXRlKEYsTyx6LE4sTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9Tnx8KCgpPT5Qcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuIG5ldyBQcm9taXNlKChxLGVlKT0+e3ZhciBKO251bGw9PT0oSj10aGlzLnNh''@;'; put 'put ''c1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1KfHxKLmV4ZWN1dGVDb21wdXRlSm9iKEYsei5jb250ZXh0TmFtZSx6LmRlYnVnLE8sTCwhMCwhMCkudGhlbihuZT0+e3RoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KG5lLEYsei5kZWJ1ZykscShuZS5yZXN1bHQpfSkuY2F0Y2go''@;'; put 'put ''bmU9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe25lIGluc3RhbmNlb2YgZy5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChuZSxGLHouZGVidWcpLGVlKG5ldyBnLkVycm9yUmVzcG9uc2UobmU/Lm1lc3NhZ2Us''@;'; put 'put ''bmUpKSksbmUgaW5zdGFuY2VvZiBnLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEYsTyx6LE4pLnRoZW4oaWU9PntxKGllKX0saWU9PntlZShpZSl9KSkseWllbGQgSygpKTplZShuZXcgZy5FcnJvclJlc3BvbnNlKG5lPy5t''@;'; put 'put ''ZXNzYWdlLG5lKSl9KSl9KX0pfX19LDM0OTE6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVuY3Rpb24gVyhlZSl7dHJ5e3Eo''@;'; put 'put ''Ti5uZXh0KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWShlZSl7dHJ5e3EoTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIHEoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihV''@;'; put 'put ''KXtVKEspfSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9cSgoTj1OLmFwcGx5KEYsT3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkZpbGVVcGxvYWRlcj12b2lkIDA7Y29uc3QgXz15KDU5MjgpLGc9eSgxMzk1KSxCPXko''@;'; put 'put ''MzkwMCksdz15KDYxMTgpO1guRmlsZVVwbG9hZGVyPWNsYXNzIFAgZXh0ZW5kcyB3LkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihPLHosTixMKXtzdXBlcihPLHopLHRoaXMuam9ic1BhdGg9Tix0aGlzLnJlcXVlc3RDbGllbnQ9TH1leGVjdXRlKE8seixOLEwpe3JldHVybiBJKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtmaWxlczpLLHBhcmFtczpVfT16LFc9THx8KCgpPT5Qcm9taXNlLnJlc29sdmUoKSk7aWYoIUs/Lmxlbmd0aCl0aHJvdyBuZXcgZy5FcnJvclJlc3BvbnNlKCJBdCBsZWFzdCBvbmUgZmlsZSBtdXN0IGJlIHByb3ZpZGVkLiIpO2lmKCFP''@;'; put 'put ''fHwiIj09PU8pdGhyb3cgbmV3IGcuRXJyb3JSZXNwb25zZSgic2FzSm9iIG11c3QgYmUgcHJvdmlkZWQuIik7bGV0IFk9IiI7Zm9yKGxldCBtZSBpbiBVKVUuaGFzT3duUHJvcGVydHkobWUpJiYoWSs9YCYke21lfT0ke1VbbWVdfWApO2NvbnN0IHE9Ti5hcHBMb2M/Ti5hcHBMb2MucmVwbGFj''@;'; put 'put ''ZSgvXC8/JC8sIi8iKStPLnJlcGxhY2UoL15cLy8sIiIpOk8sZWU9YCR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrcX0ke1l9YCxKPW5ldyBGb3JtRGF0YTtmb3IobGV0IG1lIG9mIEspSi5hcHBlbmQoImZpbGUiLG1lLmZpbGUsbWUuZmlsZU5hbWUpO2NvbnN0IG5lPXRoaXMucmVx''@;'; put 'put ''dWVzdENsaWVudC5nZXRDc3JmVG9rZW4oImZpbGUiKTtuZSYmSi5hcHBlbmQoIl9jc3JmIixuZS52YWx1ZSksTi5kZWJ1ZyYmSi5hcHBlbmQoIl9kZWJ1ZyIsIjEzMSIpLE4uc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhJiZOLmNvbnRleHROYW1lJiZKLmFwcGVuZCgiX2NvbnRl''@;'; put 'put ''eHRuYW1lIixOLmNvbnRleHROYW1lKTtjb25zdCBpZT17ImNhY2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn07cmV0dXJuIG5ldyBQcm9taXNlKChtZSxfZSk9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChlZSxKLHZvaWQg''@;'; put 'put ''MCwiYXBwbGljYXRpb24vanNvbiIsaWUpLnRoZW4oVGU9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFRlLE8sTi5kZWJ1Zyk7bGV0IFNlPVRlLnJlc3VsdDtpZihOLmRlYnVnKXN3aXRjaCh0aGlzLnNlcnZlclR5cGUp''@;'; put 'put ''e2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6U2U9eWllbGQoMCxfLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2UpKFRlLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQsTi5zZXJ2ZXJVcmwpO2JyZWFrO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhczk6U2U9InN0cmluZyI9PXR5cGVvZiBUZS5yZXN1''@;'; put 'put ''bHQ/KDAsXy5wYXJzZVdlYm91dFJlc3BvbnNlKShUZS5yZXN1bHQsZWUpOlRlLnJlc3VsdDticmVhaztjYXNlIEIuU2VydmVyVHlwZS5TYXNqczpTZT0ic3RyaW5nIj09dHlwZW9mIFRlLnJlc3VsdD8oMCxfLmdldFZhbGlkSnNvbikoVGUucmVzdWx0KTpUZS5yZXN1bHR9ZWxzZSBTZT0ic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIFRlLnJlc3VsdD8oMCxfLmdldFZhbGlkSnNvbikoVGUucmVzdWx0KTpUZS5yZXN1bHQ7bWUoU2UpfSkpLmNhdGNoKFRlPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtUZSBpbnN0YW5jZW9mIGcuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RD''@;'; put 'put ''bGllbnQuYXBwZW5kUmVxdWVzdChUZSxPLE4uZGVidWcpLF9lKG5ldyBnLkVycm9yUmVzcG9uc2UoVGU/Lm1lc3NhZ2UsVGUpKSksVGUgaW5zdGFuY2VvZiBnLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKE8seixOLEwpLnRo''@;'; put 'put ''ZW4oU2U9PnttZShTZSl9LFNlPT57X2UoU2UpfSkpLHlpZWxkIFcoKSk6X2UobmV3IGcuRXJyb3JSZXNwb25zZSgiRmlsZSB1cGxvYWQgcmVxdWVzdCBmYWlsZWQuIixUZSkpfSkpfSl9KX19fSw0NDQ2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19h''@;'; put 'put ''d2FpdGVyfHxmdW5jdGlvbihGLE8seixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtxKE4ubmV4dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtxKE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1m''@;'; put 'put ''dW5jdGlvbiBxKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIEwoSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShLKX0pfShlZS52YWx1ZSkudGhlbihXLFkpfXEoKE49Ti5hcHBseShGLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5KZXNKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgXz15KDM5MDApLGc9eSgxMzk1KSxCPXkoNjExOCksdz15KDU5MjgpO1guSmVzSm9iRXhlY3V0b3I9Y2xhc3MgUCBleHRlbmRzIEIuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVj''@;'; put 'put ''dG9yKE8seil7c3VwZXIoTyxfLlNlcnZlclR5cGUuU2FzVml5YSksdGhpcy5zYXNWaXlhQXBpQ2xpZW50PXp9ZXhlY3V0ZShPLHosTixMLEssVT1bXSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9THx8KCgpPT5Qcm9taXNlLnJlc29sdmUoKSk7cmV0''@;'; put 'put ''dXJuIG5ldyBQcm9taXNlKChxLGVlKT0+e3ZhciBKO251bGw9PT0oSj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1KfHxKLmV4ZWN1dGVKb2IoTyxOLmNvbnRleHROYW1lLE4uZGVidWcseixLKS50aGVuKG5lPT57dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3Qo''@;'; put 'put ''bmUsTyxOLmRlYnVnKTtjb25zdCBpZT0oMCx3LmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShuZSxVKTtxKGllKX0pLmNhdGNoKG5lPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtuZSBpbnN0YW5jZW9mIGcuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFB''@;'; put 'put ''cGlDbGllbnQuYXBwZW5kUmVxdWVzdChuZSxPLE4uZGVidWcpLGVlKG5ldyBnLkVycm9yUmVzcG9uc2UobmU/Lm1lc3NhZ2UsbmUpKSksbmUgaW5zdGFuY2VvZiBnLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKE8seixOLEws''@;'; put 'put ''SyxVKS50aGVuKGllPT57cShpZSl9LGllPT57ZWUoaWUpfSkpLHlpZWxkIFcoKSk6ZWUobmV3IGcuRXJyb3JSZXNwb25zZShuZT8ubWVzc2FnZSxuZSkpfSkpfSl9KX19fSw2MTE4OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5j''@;'; put 'put ''dGlvbihCLHcsUCxGKXtyZXR1cm4gbmV3KFB8fChQPVByb21pc2UpKShmdW5jdGlvbih6LE4pe2Z1bmN0aW9uIEwoVyl7dHJ5e1UoRi5uZXh0KFcpKX1jYXRjaChZKXtOKFkpfX1mdW5jdGlvbiBLKFcpe3RyeXtVKEYudGhyb3coVykpfWNhdGNoKFkpe04oWSl9fWZ1bmN0aW9uIFUoVyl7Vy5k''@;'; put 'put ''b25lP3ooVy52YWx1ZSk6ZnVuY3Rpb24gTyh6KXtyZXR1cm4geiBpbnN0YW5jZW9mIFA/ejpuZXcgUChmdW5jdGlvbihOKXtOKHopfSl9KFcudmFsdWUpLnRoZW4oTCxLKX1VKChGPUYuYXBwbHkoQix3fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1''@;'; put 'put ''bGUiLHt2YWx1ZTohMH0pLFguQmFzZUpvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBfPXkoNTkyOCk7WC5CYXNlSm9iRXhlY3V0b3I9Y2xhc3MgZ3tjb25zdHJ1Y3Rvcih3LFApe3RoaXMuc2VydmVyVXJsPXcsdGhpcy5zZXJ2ZXJUeXBlPVAsdGhpcy53YWl0aW5nUmVxdWVzdHM9W10sdGhpcy5y''@;'; put 'put ''ZXNlbmRXYWl0aW5nUmVxdWVzdHM9KCk9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkKDAsXy5hc3luY0ZvckVhY2gpKHRoaXMud2FpdGluZ1JlcXVlc3RzLEY9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIEYoKX0pKSx0aGlzLndhaXRpbmdS''@;'; put 'put ''ZXF1ZXN0cz1bXX0pfWFwcGVuZFdhaXRpbmdSZXF1ZXN0KHcpe3RoaXMud2FpdGluZ1JlcXVlc3RzLnB1c2godyl9Z2V0UmVxdWVzdFBhcmFtcyh3KXtjb25zdCBQPXt9O3JldHVybiB3LmRlYnVnJiYoUC5fb21pdHRleHRsb2c9ImZhbHNlIixQLl9vbWl0U2Vzc2lvblJlc3VsdHM9ImZhbHNl''@;'; put 'put ''IixQLl9kZWJ1Zz0xMzEpLFB9fX0sMjY5MzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixMLEssVSl7cmV0dXJuIG5ldyhLfHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oWSxxKXtmdW5jdGlvbiBlZShpZSl7dHJ5e25l''@;'; put 'put ''KFUubmV4dChpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gSihpZSl7dHJ5e25lKFUudGhyb3coaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1bmN0aW9uIG5lKGllKXtpZS5kb25lP1koaWUudmFsdWUpOmZ1bmN0aW9uIFcoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBLP1k6bmV3IEsoZnVu''@;'; put 'put ''Y3Rpb24ocSl7cShZKX0pfShpZS52YWx1ZSkudGhlbihlZSxKKX1uZSgoVT1VLmFwcGx5KE4sTHx8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKE4pe3JldHVybiBOJiZOLl9fZXNNb2R1bGU/Tjp7ZGVmYXVsdDpOfX07T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2FzOUpvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBnPV8oeSg2MjMwKSksQj15KDEzOTUpLHc9eSg1OTI4KSxQPXkoNjExOCksRj15KDc5NSk7WC5TYXM5Sm9iRXhlY3V0b3I9Y2xhc3MgTyBleHRlbmRzIFAuQmFzZUpvYkV4''@;'; put 'put ''ZWN1dG9ye2NvbnN0cnVjdG9yKEwsSyxVLFcsWSl7c3VwZXIoTCxLKSx0aGlzLmpvYnNQYXRoPVUsdGhpcy5yZXF1ZXN0Q2xpZW50PVcsdGhpcy5zYXM5UmVxdWVzdENsaWVudD1uZXcgRi5TYXM5UmVxdWVzdENsaWVudChMLFkpfWV4ZWN1dGUoTCxLLFUpe3JldHVybiBJKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPSgwLHcuaXNSZWxhdGl2ZVBhdGgpKEwpJiZVLmFwcExvYz9VLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0wucmVwbGFjZSgvXlwvLywiIik6TDtsZXQgWT1gJHtVLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9PyR7Il9wcm9ncmFtPSIr''@;'; put 'put ''V31gO1k9YCR7WX0ke1UudXNlcm5hbWUmJlUucGFzc3dvcmQ/IiZfdXNlcm5hbWU9IitVLnVzZXJuYW1lKyImX3Bhc3N3b3JkPSIrVS5wYXNzd29yZDoiIn1gLFk9YCR7WX0ke1UuZGVidWc/IiZfZGVidWc9MTMxIjoiIn1gO2xldCBxPU9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRSZXF1ZXN0''@;'; put 'put ''UGFyYW1zKFUpKSxlZT1uZXcgZy5kZWZhdWx0O2lmKEspdHJ5e2VlPXooZWUsSyl9Y2F0Y2goaWUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgQi5FcnJvclJlc3BvbnNlKGllPy5tZXNzYWdlLGllKSl9ZWxzZSBLPSIiO2Zvcihjb25zdCBpZSBpbiBxKXEuaGFzT3duUHJvcGVydHkoaWUp''@;'; put 'put ''JiZlZS5hcHBlbmQoaWUscVtpZV0pO3lpZWxkIHRoaXMuc2FzOVJlcXVlc3RDbGllbnQubG9naW4oVS51c2VybmFtZSxVLnBhc3N3b3JkLHRoaXMuam9ic1BhdGgpO2NvbnN0IEo9SyYmT2JqZWN0LmtleXMoSykubGVuZ3RoPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2VlLl9i''@;'; put 'put ''b3VuZGFyeToidGV4dC9wbGFpbiI7cmV0dXJuIG5ldyBQcm9taXNlKChpZSxsZSk9PnRoaXMuc2FzOVJlcXVlc3RDbGllbnQucG9zdChZLGVlLHZvaWQgMCxKLHtBY2NlcHQ6IiovKiIsQ29ubmVjdGlvbjoiS2VlcC1BbGl2ZSJ9KS50aGVuKG1lPT57dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVu''@;'; put 'put ''ZFJlcXVlc3QobWUsTCxVLmRlYnVnKSxpZShtZSl9KS5jYXRjaChtZT0+e2xldCBfZT1tZTttZS5yZXN1bHQmJiIiIT09bWUucmVzdWx0P19lPW1lLnJlc3VsdDptZS5tZXNzYWdlJiYoX2U9bWUubWVzc2FnZSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoX2UsTCxVLmRlYnVn''@;'; put 'put ''KSxsZShuZXcgQi5FcnJvclJlc3BvbnNlKG1lPy5tZXNzYWdlLG1lKSl9KSl9KX1nZXRSZXF1ZXN0UGFyYW1zKEwpe2NvbnN0IEs9e307cmV0dXJuIEwuZGVidWcmJihLLl9kZWJ1Zz0xMzEpLEt9fTtjb25zdCB6PShOLEwpPT57Zm9yKGNvbnN0IEsgaW4gTCl7Y29uc3QgVT1LLFc9KDAsdy5j''@;'; put 'put ''b252ZXJ0VG9DU1YpKEwsSyk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVcpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO04uYXBwZW5kKFUsVyx7ZmlsZW5hbWU6YCR7VX0u''@;'; put 'put ''Y3N2YCxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pfXJldHVybiBOfX0sMTA2NTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTCxLLFUsVyl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24o''@;'; put 'put ''cSxlZSl7ZnVuY3Rpb24gSihsZSl7dHJ5e2llKFcubmV4dChsZSkpfWNhdGNoKG1lKXtlZShtZSl9fWZ1bmN0aW9uIG5lKGxlKXt0cnl7aWUoVy50aHJvdyhsZSkpfWNhdGNoKG1lKXtlZShtZSl9fWZ1bmN0aW9uIGllKGxlKXtsZS5kb25lP3EobGUudmFsdWUpOmZ1bmN0aW9uIFkocSl7cmV0''@;'; put 'put ''dXJuIHEgaW5zdGFuY2VvZiBVP3E6bmV3IFUoZnVuY3Rpb24oZWUpe2VlKHEpfSl9KGxlLnZhbHVlKS50aGVuKEosbmUpfWllKChXPVcuYXBwbHkoTCxLfHxbXSkpLm5leHQoKSl9KX0sXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTCl7cmV0dXJuIEwmJkwuX19lc01v''@;'; put 'put ''ZHVsZT9MOntkZWZhdWx0Okx9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TYXNqc0pvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBnPV8oeSg2MjMwKSksQj15KDM5MDApLHc9eSgxMzk1KSxQPXkoNDAzNyksRj15KDU5MjgpLE89eSg1OTI4KSx6''@;'; put 'put ''PXkoNjExOCk7WC5TYXNqc0pvYkV4ZWN1dG9yPWNsYXNzIE4gZXh0ZW5kcyB6LkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihLLFUsVyl7c3VwZXIoSyxCLlNlcnZlclR5cGUuU2FzanMpLHRoaXMuam9ic1BhdGg9VSx0aGlzLnJlcXVlc3RDbGllbnQ9V31leGVjdXRlKEssVSxXLFkscSxl''@;'; put 'put ''ZT1bXSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEo9WSxuZT0oMCxPLmlzUmVsYXRpdmVQYXRoKShLKSYmVy5hcHBMb2M/Vy5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStLLnJlcGxhY2UoL15cLy8sIiIpOks7bGV0IGllPWAke1cuc2VydmVyVXJs''@;'; put 'put ''fSR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrbmV9YCxsZT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhXKSksbWU9KDAsRi5nZXRGb3JtRGF0YSkoKTtpZihVKXRyeXttZT0oMCxQLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm0pKG1lLFUpfWNhdGNoKFNlKXty''@;'; put 'put ''ZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHcuRXJyb3JSZXNwb25zZShTZT8ubWVzc2FnZSxTZSkpfWZvcihjb25zdCBTZSBpbiBsZSlsZS5oYXNPd25Qcm9wZXJ0eShTZSkmJm1lLmFwcGVuZChTZSxsZVtTZV0pO2NvbnN0IF9lPW1lIGluc3RhbmNlb2YgZy5kZWZhdWx0JiZ0eXBlb2YgRm9y''@;'; put 'put ''bURhdGE+InUiP2BtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke21lLmdldEhlYWRlcnMoKVsiY29udGVudC10eXBlIl19YDoibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7cmV0dXJuIG5ldyBQcm9taXNlKChTZSxqZSk9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChpZSxtZSxxPy5hY2Nl''@;'; put 'put ''c3NfdG9rZW4sX2UpLnRoZW4oVj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoT2JqZWN0LmVudHJpZXMoVi5yZXN1bHQpLmxlbmd0aDwxKXRocm93IG5ldyB3LkpvYkV4ZWN1dGlvbkVycm9yKDAsYE5vIHdlYm91dCB3YXMgcmV0dXJuZWQgYnkgam9iICR7bmV9LiAgUGxl''@;'; put 'put ''YXNlIGNoZWNrIHRoZSBTQVMgbG9nIGZvciBtb3JlIGluZm8uYCxWLmxvZyk7Y29uc3R7cmVzdWx0OnB9PVY7cCYmInN0cmluZyI9PXR5cGVvZiBwJiZwLnRyaW0oKSYmKFYucmVzdWx0PSgwLE8uZ2V0VmFsaWRKc29uKShwKSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVixL''@;'; put 'put ''LFcuZGVidWcpO2NvbnN0IGI9KDAsTy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoVixlZSk7U2UoYil9KSkuY2F0Y2goVj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7ViBpbnN0YW5jZW9mIHcuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQu''@;'; put 'put ''YXBwZW5kUmVxdWVzdChWLEssVy5kZWJ1ZyksamUobmV3IHcuRXJyb3JSZXNwb25zZShWPy5tZXNzYWdlLFYpKSksViBpbnN0YW5jZW9mIHcuTG9naW5SZXF1aXJlZEVycm9yPyhZfHxqZShuZXcgdy5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1''@;'; put 'put ''cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzLiIsVikpLHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShLLFUsVyxZLHEsZWUpLnRoZW4ocD0+e1NlKHApfSxwPT57amUocCl9KSksSiYmKHlpZWxkIEooKSkpOmplKG5ldyB3LkVycm9y''@;'; put 'put ''UmVzcG9uc2UoVj8ubWVzc2FnZSxWKSl9KSl9KX0pfX19LDYwODQ6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEwsSyxVLFcpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKHEsZWUpe2Z1bmN0aW9u''@;'; put 'put ''IEoobGUpe3RyeXtpZShXLm5leHQobGUpKX1jYXRjaChtZSl7ZWUobWUpfX1mdW5jdGlvbiBuZShsZSl7dHJ5e2llKFcudGhyb3cobGUpKX1jYXRjaChtZSl7ZWUobWUpfX1mdW5jdGlvbiBpZShsZSl7bGUuZG9uZT9xKGxlLnZhbHVlKTpmdW5jdGlvbiBZKHEpe3JldHVybiBxIGluc3RhbmNl''@;'; put 'put ''b2YgVT9xOm5ldyBVKGZ1bmN0aW9uKGVlKXtlZShxKX0pfShsZS52YWx1ZSkudGhlbihKLG5lKX1pZSgoVz1XLmFwcGx5KEwsS3x8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEwpe3JldHVybiBMJiZMLl9fZXNNb2R1bGU/TDp7ZGVmYXVs''@;'; put 'put ''dDpMfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguV2ViSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IGc9Xyh5KDYyMzApKSxCPXkoMzkwMCksdz15KDEzOTUpLFA9eSg0MDM3KSxGPXkoMjE3MCksTz15KDU5MjgpLHo9eSg2MTE4KTtYLldlYkpv''@;'; put 'put ''YkV4ZWN1dG9yPWNsYXNzIE4gZXh0ZW5kcyB6LkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihLLFUsVyxZLHEpe3N1cGVyKEssVSksdGhpcy5qb2JzUGF0aD1XLHRoaXMucmVxdWVzdENsaWVudD1ZLHRoaXMuc2FzVml5YUFwaUNsaWVudD1xfWV4ZWN1dGUoSyxVLFcsWSxxLGVlPVtdKXty''@;'; put 'put ''ZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSj1ZLG5lPSgwLE8uaXNSZWxhdGl2ZVBhdGgpKEspJiZXLmFwcExvYz9XLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0sucmVwbGFjZSgvXlwvLywiIik6SztsZXQgaWU9YCR7Vy5zZXJ2ZXJVcmx9JHt0aGlz''@;'; put 'put ''LmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IituZX1gO2lmKFcuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhKXtsZXQgU2U7dHJ5e1NlPXlpZWxkIHRoaXMuZ2V0Sm9iVXJpKEspfWNhdGNoKGplKXtyZXR1cm4gbmV3IFByb21pc2UoKFYscCk9PkkodGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe2plIGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShLLFUsVyxZLHEsZWUpLnRoZW4oYj0+e1YoYil9LGI9PntwKGIpfSkpLEomJih5aWVsZCBKKCkpKTpwKG5ldyB3LkVycm9yUmVz''@;'; put 'put ''cG9uc2UoamU/Lm1lc3NhZ2UsamUpKX0pKX1pZSs9U2UubGVuZ3RoPjA/IiZfam9iPSIrU2U6IiIsU2UubGVuZ3RoPjAmJihpZSs9IiZfam9iPSIrU2UsaWU9aWUucmVwbGFjZSgiX3Byb2dyYW09IiwiX19wcm9ncmFtPSIpKSxpZSs9Vy5jb250ZXh0TmFtZSYmIS9ccy8udGVzdChXLmNvbnRl''@;'; put 'put ''eHROYW1lKT9gJl9jb250ZXh0bmFtZT0ke1cuY29udGV4dE5hbWV9YDoiIn1sZXQgbGU9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoVykpLG1lPSgwLE8uZ2V0Rm9ybURhdGEpKCk7aWYoVSl7Y29uc3QgU2U9SlNPTi5zdHJpbmdpZnkoVSk7aWYoVy5zZXJ2ZXJUeXBl''@;'; put 'put ''PT09Qi5TZXJ2ZXJUeXBlLlNhczl8fFNlLmxlbmd0aD41ZTV8fFNlLmluY2x1ZGVzKCI7IikpdHJ5e21lPSgwLFAuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkobWUsVSl9Y2F0Y2goamUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKGplPy5tZXNzYWdlLGplKSl9''@;'; put 'put ''ZWxzZSB0cnl7Y29uc3R7Zm9ybURhdGE6amUscmVxdWVzdFBhcmFtczpWfT0oMCxGLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtKShtZSxVKTttZT1qZSxsZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbGUpLFYpfWNhdGNoKGplKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHcu''@;'; put 'put ''RXJyb3JSZXNwb25zZShqZT8ubWVzc2FnZSxqZSkpfX1mb3IoY29uc3QgU2UgaW4gbGUpbGUuaGFzT3duUHJvcGVydHkoU2UpJiZtZS5hcHBlbmQoU2UsbGVbU2VdKTtjb25zdCBfZT1tZSBpbnN0YW5jZW9mIGcuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0t''@;'; put 'put ''ZGF0YTsgYm91bmRhcnk9JHttZS5nZXRIZWFkZXJzKClbImNvbnRlbnQtdHlwZSJdfWA6Im11bHRpcGFydC9mb3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoU2UsamUpPT57dGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoaWUsbWUscT8uYWNjZXNzX3Rva2VuLF9lKS50aGVuKFY9PkkodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFYsSyxXLmRlYnVnKTtsZXQgcD1WLnJlc3VsdDtpZihXLmRlYnVnKXN3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cD15aWVsZCgwLE8ucGFy''@;'; put 'put ''c2VTYXNWaXlhRGVidWdSZXNwb25zZSkoVi5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2VydmVyVXJsKTticmVhaztjYXNlIEIuU2VydmVyVHlwZS5TYXM5OnA9InN0cmluZyI9PXR5cGVvZiBWLnJlc3VsdD8oMCxPLnBhcnNlV2Vib3V0UmVzcG9uc2UpKFYucmVzdWx0LGllKTpW''@;'; put 'put ''LnJlc3VsdH1jb25zdCBiPSgwLE8uYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKHtyZXN1bHQ6cCxsb2c6Vi5sb2d9LGVlKTtTZShiKX0pKS5jYXRjaChWPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtWIGluc3RhbmNlb2Ygdy5Kb2JFeGVjdXRpb25FcnJvciYmKHRo''@;'; put 'put ''aXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFYsSyxXLmRlYnVnKSxqZShuZXcgdy5FcnJvclJlc3BvbnNlKFY/Lm1lc3NhZ2UsVikpKSxWIGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVpcmVkRXJyb3I/KFl8fGplKG5ldyB3LkVycm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhl''@;'; put 'put ''bnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMuIixWKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEssVSxXLFkscSxlZSkudGhlbihwPT57U2UocCl9LHA9PntqZShwKX0pKSxKJiYoeWllbGQgSigp''@;'; put 'put ''KSk6amUobmV3IHcuRXJyb3JSZXNwb25zZShWPy5tZXNzYWdlLFYpKX0pKX0pfSl9Z2V0Sm9iVXJpKEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5zYXNWaXlhQXBpQ2xpZW50KXJldHVybiIiO2xldCBXLFksVT0iIjtpZigoMCxPLmlzUmVsYXRp''@;'; put 'put ''dmVQYXRoKShLKSl7Y29uc3QgZWU9Sy5zcGxpdCgiLyIpO1c9ZWUubGVuZ3RoPjE/ZWVbMF06IiIsWT1lZS5sZW5ndGg+MT9lZVsxXToiIn1lbHNle2NvbnN0IGVlPUsuc3BsaXQoIi8iKTtZPWVlLnBvcCgpfHwiIixXPWVlLmpvaW4oIi8iKX1pZighWSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBu''@;'; put 'put ''YW1lIGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtjb25zdCBxPXlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRKb2JzSW5Gb2xkZXIoVyk7aWYocSl7Y29uc3QgZWU9cS5maW5kKEo9PkoubmFtZT09PVkmJiJqb2JEZWZpbml0aW9uIj09PUouY29udGVudFR5cGUpO2VlJiYo''@;'; put 'put ''VT1lZS51cmkpfXJldHVybiBVfSl9fX0sODIxNzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blBy''@;'; put 'put ''b3BlcnR5RGVzY3JpcHRvcihCLHcpOyghRnx8KCJnZXQiaW4gRj8hQi5fX2VzTW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAsRil9OmZ1bmN0''@;'; put 'put ''aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3''@;'; put 'put ''KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oeSgxNTcwKSxYKSxfKHkoMzQ5MSksWCksXyh5KDQ0NDYpLFgpLF8oeSg2MTE4KSxYKSxfKHkoMjY5MyksWCksXyh5KDYwODQpLFgpLF8oeSgxMDY1KSxYKX0sNDU4ODpmdW5jdGlvbih1ZSxYLHkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihuZSxpZSxsZSxtZSl7dm9pZCAwPT09bWUmJihtZT1sZSk7dmFyIF9lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io''@;'; put 'put ''aWUsbGUpOyghX2V8fCgiZ2V0ImluIF9lPyFpZS5fX2VzTW9kdWxlOl9lLndyaXRhYmxlfHxfZS5jb25maWd1cmFibGUpKSYmKF9lPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpZVtsZV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLG1lLF9lKX06ZnVuY3Rpb24o''@;'; put 'put ''bmUsaWUsbGUsbWUpe3ZvaWQgMD09PW1lJiYobWU9bGUpLG5lW21lXT1pZVtsZV19KSxCPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihuZSxpZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2''@;'; put 'put ''YWx1ZTppZX0pfTpmdW5jdGlvbihuZSxpZSl7bmUuZGVmYXVsdD1pZX0pLHc9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKG5lKXtpZihuZSYmbmUuX19lc01vZHVsZSlyZXR1cm4gbmU7dmFyIGllPXt9O2lmKG51bGwhPW5lKWZvcih2YXIgbGUgaW4gbmUpImRlZmF1bHQiIT09''@;'; put 'put ''bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZSxsZSkmJmcoaWUsbmUsbGUpO3JldHVybiBCKGllLG5lKSxpZX0sUD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24obmUsaWUsbGUsbWUpe3JldHVybiBuZXcobGV8fChsZT1Qcm9taXNlKSkoZnVuY3Rpb24o''@;'; put 'put ''VGUsU2Upe2Z1bmN0aW9uIGplKGIpe3RyeXtwKG1lLm5leHQoYikpfWNhdGNoKHgpe1NlKHgpfX1mdW5jdGlvbiBWKGIpe3RyeXtwKG1lLnRocm93KGIpKX1jYXRjaCh4KXtTZSh4KX19ZnVuY3Rpb24gcChiKXtiLmRvbmU/VGUoYi52YWx1ZSk6ZnVuY3Rpb24gX2UoVGUpe3JldHVybiBUZSBp''@;'; put 'put ''bnN0YW5jZW9mIGxlP1RlOm5ldyBsZShmdW5jdGlvbihTZSl7U2UoVGUpfSl9KGIudmFsdWUpLnRoZW4oamUsVil9cCgobWU9bWUuYXBwbHkobmUsaWV8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC50aHJvd0lmRXJy''@;'; put 'put ''b3I9WC5SZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCBGPXcoeSg4MzczKSksTz15KDE1MjcpLHo9eSgxMzk1KSxOPXkoMjgxMyksTD15KDk3NzgpLEs9eSg5NTI2KSxVPXkoNTkyOCksVz15KDEwMDUpLFk9eSg5NTM5KTtYLlJlcXVlc3RDbGllbnQ9Y2xhc3MgcXtjb25zdHJ1Y3RvcihpZSxs''@;'; put 'put ''ZSxtZSxfZSl7dGhpcy5iYXNlVXJsPWllLHRoaXMucmVxdWVzdHM9W10sdGhpcy5yZXF1ZXN0c0xpbWl0PTEwLHRoaXMudmVyYm9zZU1vZGU9ITEsdGhpcy5jc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9LHRoaXMuZ2V0UmVxdWVzdHM9KCk9PnRoaXMucmVxdWVzdHMsdGhpcy5j''@;'; put 'put ''bGVhclJlcXVlc3RzPSgpPT57dGhpcy5yZXF1ZXN0cz1bXX0sdGhpcy5hdXRob3JpemU9VGU9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBTZT1udWxsO2NvbnN0IGplPXt9LFY9VGUuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0scD1kb2N1bWVu''@;'; put 'put ''dC5jcmVhdGVFbGVtZW50KCJkaXYiKTtwLmlubmVySFRNTD1WO2NvbnN0IGI9cC5xdWVyeVNlbGVjdG9yKCIjYXBwbGljYXRpb25fYXV0aG9yaXphdGlvbiIpO1NlPWI/dGhpcy5iYXNlVXJsK2IuZ2V0QXR0cmlidXRlKCJhY3Rpb24iKTpudWxsO2NvbnN0IHg9Yj8ucXVlcnlTZWxlY3RvckFs''@;'; put 'put ''bCgiaW5wdXQiKTtmb3IoY29uc3QgSCBvZiB4KSJ1c2VyX29hdXRoX2FwcHJvdmFsIj09PUgubmFtZSYmKEgudmFsdWU9InRydWUiKSxqZVtILm5hbWVdPUgudmFsdWU7Y29uc3QgQz1PYmplY3Qua2V5cyhqZSkuZmluZChIPT5IPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJjc3JmIikpO0Mm''@;'; put 'put ''Jih0aGlzLmNzcmZUb2tlbi52YWx1ZT1qZVtDXSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lPXRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWV8fCJ4LWNzcmYtdG9rZW4iKTtjb25zdCBUPW5ldyBGb3JtRGF0YTtmb3IoY29uc3QgSCBpbiBqZSlqZS5oYXNPd25Qcm9wZXJ0eShIKSYmVC5hcHBl''@;'; put 'put ''bmQoSCxqZVtIXSk7aWYoIVNlKXRocm93IG5ldyBFcnJvcigiQXV0aCBGb3JtIFVSTCBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4geWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoU2UsVCx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6IiovKiIsIkNvbnRlbnQt''@;'; put 'put ''VHlwZSI6InRleHQvcGxhaW4ifX0pLnRoZW4oSD0+SC5kYXRhKS5jYXRjaChIPT57KEkubG9nZ2VyfHxfKS5lcnJvcihIKX0pfSksdGhpcy5wcmV0dGlmeVN0cmluZz1UZT0+KDAsWS5pbnNwZWN0KShUZSx7Y29sb3JzOiJibGVhY2hlZCIhPT10aGlzLnZlcmJvc2VNb2RlfSksdGhpcy5wYXJz''@;'; put 'put ''ZUludGVyY2VwdGVkQm9keT1UZT0+e2lmKCFUZSlyZXR1cm4iIjtsZXQgU2U7aWYoInN0cmluZyI9PXR5cGVvZiBUZSl0cnl7U2U9SlNPTi5wYXJzZShUZSl9Y2F0Y2h7U2U9VGV9ZWxzZSBTZT1UZTtjb25zdCBqZT10aGlzLnByZXR0aWZ5U3RyaW5nKFNlKS5zcGxpdCgiXG4iKTtyZXR1cm4g''@;'; put 'put ''amUubGVuZ3RoPjUxJiYoamUuc3BsaWNlKDUwKSxqZS5wdXNoKCIuLi4iKSksamUuam9pbigiXG4iKX0sdGhpcy5oYW5kbGVBeGlvc1Jlc3BvbnNlPVRlPT57dmFyIFNlLGplLFYscDtjb25zdHtzdGF0dXM6Yixjb25maWc6eCxyZXF1ZXN0OkMsZGF0YTpUfT1UZSxIPW51bGwhPT0oU2U9Qz8u''@;'; put 'put ''X2hlYWRlcikmJnZvaWQgMCE9PVNlP1NlOiJOb3QgcHJvdmlkZWRcbiIsaj1udWxsIT09KFY9bnVsbD09PShqZT1DPy5yZXMpfHx2b2lkIDA9PT1qZT92b2lkIDA6amUucmF3SGVhZGVycykmJnZvaWQgMCE9PVY/VjpbIk5vdCBwcm92aWRlZCJdLEU9dGhpcy5mb3JtYXRIZWFkZXJzKGopLG09''@;'; put 'put ''dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShUKTtyZXR1cm4gbnVsbD09PShwPUkubG9nZ2VyKXx8dm9pZCAwPT09cHx8cC5pbmZvKGBIVFRQIFJlcXVlc3QgKGZpcnN0IDUwIGxpbmVzKTpcbiR7SH0ke3RoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoeC5kYXRhKX1cblxuSFRUUCBSZXNwb25z''@;'; put 'put ''ZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmcoYil9XG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7RX0ke20/YFxuXG4ke219YDoiIn1cbmApLFRlfSx0aGlzLmhhbmRsZUF4aW9zRXJyb3I9VGU9Pnt2YXIgU2UsamUsVixwLGIseDtjb25zdCBDPSJOb3QgcHJvdmlk''@;'; put 'put ''ZWQiLHtyZXNwb25zZTpULHJlcXVlc3Q6SCxjb25maWc6an09VGU7bGV0IEU9e19oZWFkZXI6YCR7Q31cbmAscmVzOntyYXdIZWFkZXJzOltDXX19O0gmJihFPXtfaGVhZGVyOm51bGwhPT0oVj1udWxsIT09KFNlPUguX2hlYWRlcikmJnZvaWQgMCE9PVNlP1NlOm51bGw9PT0oamU9SC5fY3Vy''@;'; put 'put ''cmVudFJlcXVlc3QpfHx2b2lkIDA9PT1qZT92b2lkIDA6amUuX2hlYWRlcikmJnZvaWQgMCE9PVY/VjpDLHJlczp7cmF3SGVhZGVyczpudWxsIT09KGI9bnVsbD09PShwPUgucmVzKXx8dm9pZCAwPT09cD92b2lkIDA6cC5yYXdIZWFkZXJzKSYmdm9pZCAwIT09Yj9iOltDXX19KTtsZXQgbT1U''@;'; put 'put ''fHx7c3RhdHVzOkMscmVxdWVzdDpFLGNvbmZpZzpqfHx7ZGF0YTpDLGhlYWRlcnM6e319LGRhdGE6Q307Y29uc3R7c3RhdHVzOkEscmVxdWVzdDphZSxkYXRhOnRlfT1tLHtfaGVhZGVyOnNlLHJlczp3ZX09YWUsVWU9dGhpcy5mb3JtYXRIZWFkZXJzKHdlLnJhd0hlYWRlcnMpLEplPXRoaXMu''@;'; put 'put ''cGFyc2VJbnRlcmNlcHRlZEJvZHkodGUpO3JldHVybiBudWxsPT09KHg9SS5sb2dnZXIpfHx2b2lkIDA9PT14fHx4LmluZm8oYEhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMpOlxuJHtzZX0ke3RoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoaj8uZGF0YSl9XG5cbkhUVFAgUmVzcG9uc2Ug''@;'; put 'put ''Q29kZTogJHt0aGlzLnByZXR0aWZ5U3RyaW5nKEEpfVxuXG5IVFRQIFJlc3BvbnNlIChmaXJzdCA1MCBsaW5lcyk6XG4ke1VlfSR7SmU/YFxuXG4ke0plfWA6IiJ9XG5gKSxUZX0sdGhpcy5mb3JtYXRIZWFkZXJzPVRlPT5UZS5yZWR1Y2UoKFNlLGplLFYpPT5TZSsoViUyPT0wP2AkezA9PT1W''@;'; put 'put ''PyIiOiJcbiJ9JHtqZX1gOmA6ICR7amV9YCksIiIpLHRoaXMuc2V0VmVyYm9zZU1vZGU9VGU9Pnt0aGlzLnZlcmJvc2VNb2RlPVRlLHRoaXMudmVyYm9zZU1vZGU/dGhpcy5lbmFibGVWZXJib3NlTW9kZSgpOnRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlKCl9LHRoaXMuZW5hYmxlVmVyYm9zZU1v''@;'; put 'put ''ZGU9KFRlPXRoaXMuaGFuZGxlQXhpb3NSZXNwb25zZSxTZT10aGlzLmhhbmRsZUF4aW9zRXJyb3IpPT57dGhpcy5odHRwSW50ZXJjZXB0b3I9dGhpcy5odHRwQ2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoVGUsU2UpfSx0aGlzLmRpc2FibGVWZXJib3NlTW9kZT0oKT0+e3RoaXMu''@;'; put 'put ''aHR0cEludGVyY2VwdG9yJiZ0aGlzLmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmVqZWN0KHRoaXMuaHR0cEludGVyY2VwdG9yKX0sdGhpcy5nZXRIZWFkZXJzPShUZSxTZSk9Pntjb25zdCBqZT17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9''@;'; put 'put ''PVNlJiYoamVbIkNvbnRlbnQtVHlwZSJdPVNlKSxqZS5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09U2U/ImFwcGxpY2F0aW9uL2pzb24iOiIqLyoiLFRlJiYoamUuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7VGV9YCksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9r''@;'; put 'put ''ZW4udmFsdWUmJihqZVt0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmNzcmZUb2tlbi52YWx1ZSksamV9LHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuPVRlPT57Y29uc3QgU2U9dGhpcy5wYXJzZUNzcmZUb2tlbihUZSk7U2UmJih0aGlzLmZpbGVVcGxvYWRDc3Jm''@;'; put 'put ''VG9rZW49U2UpfSx0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuPVRlPT57Y29uc3QgU2U9dGhpcy5wYXJzZUNzcmZUb2tlbihUZSk7U2UmJih0aGlzLmNzcmZUb2tlbj1TZSl9LHRoaXMucGFyc2VDc3JmVG9rZW49VGU9Pnt2YXIgU2U7Y29uc3QgamU9bnVsbD09PShTZT1UZS5oZWFkZXJzWyJ4''@;'; put 'put ''LWNzcmYtaGVhZGVyIl0pfHx2b2lkIDA9PT1TZT92b2lkIDA6U2UudG9Mb3dlckNhc2UoKTtpZihqZSlyZXR1cm57aGVhZGVyTmFtZTpqZSx2YWx1ZTpUZS5oZWFkZXJzW2plXXx8IiJ9fSx0aGlzLmhhbmRsZUVycm9yPShUZSxTZSxqZT0hMSk9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe2NvbnN0IFY9VGUucmVzcG9uc2U7aWYoVGUgaW5zdGFuY2VvZiB6LkF1dGhvcml6ZUVycm9yKXtjb25zdCBwPXlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoVGUuY29uZmlybVVybCx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFp''@;'; put 'put ''biIsQWNjZXB0OiIqLyoifX0pLmNhdGNoKGI9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoYiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBlcnJvciBjb25maXJtVXJsLiAiKX0pO3JldHVybigwLE8uaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKHA/LmRhdGEpJiYoeWllbGQgdGhpcy5hdXRob3Jp''@;'; put 'put ''emUocC5kYXRhKS5jYXRjaChiPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKGIsIkVycm9yIHdoaWxlIGF1dGhvcml6aW5nIHJlcXVlc3QuICIpfSkpLHlpZWxkIFNlKCkuY2F0Y2goYj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShiLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJh''@;'; put 'put ''Y2sgaW4gaGFuZGxlRXJyb3IuICIpfSl9aWYoVGUgaW5zdGFuY2VvZiB6LkxvZ2luUmVxdWlyZWRFcnJvcil0aHJvdyB0aGlzLmNsZWFyQ3NyZlRva2VucygpLFRlO2lmKFRlIGluc3RhbmNlb2YgVy5JbnZhbGlkU0FTanNDc3JmRXJyb3IpcmV0dXJuIHlpZWxkIHRoaXMuaHR0cENsaWVudC5n''@;'; put 'put ''ZXQoIi8iLHt3aXRoWFNSRlRva2VuOiEwfSkudGhlbihwPT57dmFyIGI7Y29uc3QgeD1udWxsPT09KGI9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKHAu''@;'; put 'put ''ZGF0YSkpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiWzFdO3gmJihkb2N1bWVudC5jb29raWU9eCl9KS5jYXRjaChwPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHAsIkVycm9yIHdoaWxlIHJlLWZldGNoaW5nIENTUkYgdG9rZW4uIil9KSx5aWVsZCBTZSgpLmNhdGNoKHA9Pnt0aHJvdygwLEwu''@;'; put 'put ''cHJlZml4TWVzc2FnZSkocCwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pO2lmKDQwMz09PVY/LnN0YXR1c3x8NDQ5PT09Vj8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuKFYpLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWUm''@;'; put 'put ''JnRoaXMuY3NyZlRva2VuLnZhbHVlKXJldHVybiB5aWVsZCBTZSgpLmNhdGNoKHA9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkocCwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pO3Rocm93IFRlfWlmKDQwND09PVY/LnN0YXR1cyl0aHJvdyBu''@;'; put 'put ''ZXcgei5Ob3RGb3VuZEVycm9yKFYuY29uZmlnLnVybCk7aWYoNTAyIT09Vj8uc3RhdHVzKXRocm93IFRlLmlzQXhpb3NFcnJvciYmIlVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUiPT09VGUuY29kZT9uZXcgei5DZXJ0aWZpY2F0ZUVycm9yKFRlLm1lc3NhZ2UpOlRlLm1lc3NhZ2U/''@;'; put 'put ''VGU6KDAsTC5wcmVmaXhNZXNzYWdlKShUZSwiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpO2lmKGplKXRocm93IG5ldyB6LkludGVybmFsU2VydmVyRXJyb3J9KSx0aGlzLmNyZWF0ZUh0dHBDbGllbnQoaWUsbGUpLG1lJiYodGhpcy5yZXF1ZXN0c0xpbWl0PW1lKSxfZSYmKHRoaXMu''@;'; put 'put ''c2V0VmVyYm9zZU1vZGUoX2UpLHRoaXMuZW5hYmxlVmVyYm9zZU1vZGUoKSl9c2V0Q29uZmlnKGllLGxlKXt0aGlzLmNyZWF0ZUh0dHBDbGllbnQoaWUsbGUpfXNhdmVMb2NhbFN0b3JhZ2VUb2tlbihpZSxsZSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIixpZSksbG9jYWxT''@;'; put 'put ''dG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsbGUpfWdldENzcmZUb2tlbihpZT0iZ2VuZXJhbCIpe3JldHVybiJmaWxlIj09PWllP3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbjp0aGlzLmNzcmZUb2tlbn1jbGVhckNzcmZUb2tlbnMoKXt0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToi''@;'; put 'put ''Iix2YWx1ZToiIn0sdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifX1jbGVhckxvY2FsU3RvcmFnZVRva2Vucygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NUb2tlbiIsIiIpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLCIi''@;'; put 'put ''KX1nZXRCYXNlVXJsKCl7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5iYXNlVVJMfHwiIn1hcHBlbmRSZXF1ZXN0KGllLGxlLG1lKXtsZXQgX2U9IiIsVGU9IiIsU2U9bnVsbDttZSYmKGllPy5sb2c/KF9lPSgwLFUucGFyc2VTb3VyY2VDb2RlKShpZS5sb2cpLFRlPSgwLFUucGFy''@;'; put 'put ''c2VHZW5lcmF0ZWRDb2RlKShpZS5sb2cpLFNlPWllPy5yZXN1bHQ/aWUucmVzdWx0LldPUks6aWUubG9nKTppZT8ucmVzdWx0JiYoInN0cmluZyI9PXR5cGVvZiBpZS5yZXN1bHQmJihfZT0oMCxVLnBhcnNlU291cmNlQ29kZSkoaWUucmVzdWx0KSxUZT0oMCxVLnBhcnNlR2VuZXJhdGVkQ29k''@;'; put 'put ''ZSkoaWUucmVzdWx0KSksU2U9aWUucmVzdWx0LldPUkspKTtjb25zdCBqZT0ic3RyaW5nIj09dHlwZW9mIGllPy5yZXN1bHQ/aWU/LnJlc3VsdDpKU09OLnN0cmluZ2lmeShpZT8ucmVzdWx0LG51bGwsMik7dGhpcy5yZXF1ZXN0cy5wdXNoKHtsb2dGaWxlOmllPy5sb2d8fGplfHxpZSxzZXJ2''@;'; put 'put ''aWNlTGluazpsZSx0aW1lc3RhbXA6bmV3IERhdGUsc291cmNlQ29kZTpfZSxnZW5lcmF0ZWRDb2RlOlRlLFNBU1dPUks6U2V9KSx0aGlzLnJlcXVlc3RzLmxlbmd0aD50aGlzLnJlcXVlc3RzTGltaXQmJnRoaXMucmVxdWVzdHMuc3BsaWNlKDAsMSl9Z2V0KGllLGxlLG1lPSJhcHBsaWNhdGlv''@;'; put 'put ''bi9qc29uIixfZT17fSxUZT0hMSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGplPXtoZWFkZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMobGUsbWUpKSxfZSkscmVzcG9uc2VUeXBlOiJ0ZXh0L3BsYWluIj09''@;'; put 'put ''PW1lPyJ0ZXh0IjoianNvbiIsd2l0aFhTUkZUb2tlbjohMH07cmV0dXJuInRleHQvcGxhaW4iPT09bWUmJihqZS50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLHRoaXMuaHR0cENsaWVudC5nZXQoaWUsamUpLnRoZW4oVj0+KCgwLFgudGhyb3dJZkVycm9yKShWKSx0aGlzLnBhcnNlUmVzcG9u''@;'; put 'put ''c2UoVikpKS5jYXRjaChWPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihWLCgpPT50aGlzLmdldChpZSxsZSxtZSxfZSkuY2F0Y2gocD0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShwLCJFcnJvciB3aGlsZSBleGVjdXRp''@;'; put 'put ''bmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLFRlKX0pKX0pfXBvc3QoaWUsbGUsbWUsX2U9ImFwcGxpY2F0aW9uL2pzb24iLFRlPXt9LFNlPXt9KXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgamU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWdu''@;'; put 'put ''KHt9LHRoaXMuZ2V0SGVhZGVycyhtZSxfZSkpLFRlKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoaWUsbGUsT2JqZWN0LmFzc2lnbih7aGVhZGVyczpqZSx3aXRoWFNSRlRva2VuOiEwfSxTZSkpLnRoZW4oVj0+KCgwLFgudGhyb3dJZkVycm9yKShWKSx0aGlzLnBhcnNlUmVzcG9uc2Uo''@;'; put 'put ''VikpKS5jYXRjaChWPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihWLCgpPT50aGlzLnBvc3QoaWUsbGUsbWUsX2UsVGUpKX0pKX0pfXB1dChpZSxsZSxtZSxfZT17fSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IFRlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMobWUsImFwcGxpY2F0aW9uL2pzb24iKSksX2UpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucHV0KGllLGxlLHtoZWFkZXJzOlRlLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKFNl''@;'; put 'put ''PT4oKDAsWC50aHJvd0lmRXJyb3IpKFNlKSx0aGlzLnBhcnNlUmVzcG9uc2UoU2UpKSkuY2F0Y2goU2U9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFNlLCgpPT50aGlzLnB1dChpZSxsZSxtZSxfZSkpfSkpfSl9ZGVsZXRl''@;'; put 'put ''KGllLGxlKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9dGhpcy5nZXRIZWFkZXJzKGxlLCJhcHBsaWNhdGlvbi9qc29uIik7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWxldGUoaWUse2hlYWRlcnM6bWUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4o''@;'; put 'put ''X2U9PigoMCxYLnRocm93SWZFcnJvcikoX2UpLHRoaXMucGFyc2VSZXNwb25zZShfZSkpKS5jYXRjaChfZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoX2UsKCk9PnRoaXMuZGVsZXRlKGllLGxlKSl9KSl9KX1wYXRjaChp''@;'; put 'put ''ZSxsZT17fSxtZSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IF9lPXRoaXMuZ2V0SGVhZGVycyhtZSwiYXBwbGljYXRpb24vanNvbiIpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucGF0Y2goaWUsbGUse2hlYWRlcnM6X2Usd2l0aFhTUkZUb2tlbjohMH0p''@;'; put 'put ''LnRoZW4oVGU9PigoMCxYLnRocm93SWZFcnJvcikoVGUpLHRoaXMucGFyc2VSZXNwb25zZShUZSkpKS5jYXRjaChUZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoVGUsKCk9PnRoaXMucGF0Y2goaWUsbGUsbWUpKX0pKX0p''@;'; put 'put ''fXVwbG9hZEZpbGUoaWUsbGUsbWUpe3ZhciBfZTtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9dGhpcy5nZXRIZWFkZXJzKG1lLCJhcHBsaWNhdGlvbi9qc29uIik7bnVsbCE9PShfZT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pJiZ2b2lkIDAhPT1f''@;'; put 'put ''ZSYmX2UudmFsdWUmJihUZVt0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4uaGVhZGVyTmFtZV09dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuLnZhbHVlKTt0cnl7Y29uc3QgU2U9eWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoaWUsbGUse2hlYWRlcnM6VGUsdHJhbnNmb3JtUmVxdWVzdDpqZT0+''@;'; put 'put ''amV9KTtyZXR1cm57cmVzdWx0OlNlLmRhdGEsZXRhZzpTZS5oZWFkZXJzLmV0YWd9fWNhdGNoKFNlKXtjb25zdCBqZT1TZS5yZXNwb25zZTtpZig0MDM9PT1qZT8uc3RhdHVzfHw0NDk9PT1qZT8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9hZENzcmZUb2tlbihqZSksdGhp''@;'; put 'put ''cy5maWxlVXBsb2FkQ3NyZlRva2VuKXJldHVybiB0aGlzLnVwbG9hZEZpbGUoaWUsbGUsbWUpO3Rocm93IFNlfXRocm93IFNlfX0pfXBhcnNlUmVzcG9uc2UoaWUpe2NvbnN0IGxlPWllPy5oZWFkZXJzP2llLmhlYWRlcnMuZXRhZzoiIjtsZXQgbWUsX2U9ITE7dHJ5e21lPSJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgaWUuZGF0YT9KU09OLnBhcnNlKGllLmRhdGEpOmllLmRhdGF9Y2F0Y2h7dHJ5e21lPUpTT04ucGFyc2UoKDAsTi5wYXJzZVdlYm91dFJlc3BvbnNlKShpZS5kYXRhKSl9Y2F0Y2h7bWU9aWUuZGF0YX1fZT0hMH1sZXQgVGU9e3Jlc3VsdDptZSxldGFnOmxlLHN0YXR1czppZS5zdGF0''@;'; put 'put ''dXN9O3JldHVybiBfZSYmKFRlLmxvZz1pZS5kYXRhKSxUZX1jcmVhdGVIdHRwQ2xpZW50KGllLGxlKXtjb25zdCBtZT1sZT9uZXcgRi5BZ2VudChsZSk6dm9pZCAwO3RoaXMuaHR0cENsaWVudD0oMCxVLmNyZWF0ZUF4aW9zSW5zdGFuY2UpKGllLG1lKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVs''@;'; put 'put ''dHMudmFsaWRhdGVTdGF0dXM9X2U9Pl9lPj0yMDAmJl9lPD00MDF9fSxYLnRocm93SWZFcnJvcj1uZT0+e3ZhciBpZSxsZSxtZSxfZSxUZSxTZSxqZTtzd2l0Y2gobmUuc3RhdHVzKXtjYXNlIDQwMDppZigib2JqZWN0Ij09dHlwZW9mIG5lLmRhdGEmJiJpbnZhbGlkX2dyYW50Ij09PW5lLmRh''@;'; put 'put ''dGEuZXJyb3IpdGhyb3cgbmV3IHouTG9naW5SZXF1aXJlZEVycm9yKG5lLmRhdGEpO2lmKCJzdHJpbmciPT10eXBlb2YgbmUuZGF0YSYmImludmFsaWQgY3NyZiB0b2tlbiEiPT09bmUuZGF0YS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBXLkludmFsaWRTQVNqc0NzcmZFcnJvcjticmVhaztj''@;'; put 'put ''YXNlIDQwMTp0aHJvdyJvYmplY3QiPT10eXBlb2YgbmUuZGF0YT9uZXcgei5Mb2dpblJlcXVpcmVkRXJyb3IobmUuZGF0YSk6bmV3IHouTG9naW5SZXF1aXJlZEVycm9yfWlmKG51bGwhPT0obGU9bnVsbD09PShpZT1uZS5kYXRhKXx8dm9pZCAwPT09aWU/dm9pZCAwOmllLmVudGl0eUlEKSYm''@;'; put 'put ''dm9pZCAwIT09bGUmJmxlLmluY2x1ZGVzKCJsb2dpbiIpKXRocm93IG5ldyB6LkxvZ2luUmVxdWlyZWRFcnJvcjtpZigic3RyaW5nIj09dHlwZW9mIG5lLmRhdGEmJigwLE8uaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKG5lLmRhdGEpKXRocm93IG5ldyB6LkF1dGhvcml6ZUVycm9yKCJBdXRo''@;'; put 'put ''b3JpemF0aW9uIHJlcXVpcmVkIixuZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZigic3RyaW5nIj09dHlwZW9mIG5lLmRhdGEmJigwLE8uaXNMb2dJblJlcXVpcmVkKShuZS5kYXRhKSYmKG51bGw9PT0oX2U9bnVsbD09PShtZT1uZS5jb25maWcpfHx2b2lkIDA9PT1tZT92b2lkIDA6bWUudXJs''@;'; put 'put ''KXx8dm9pZCAwPT09X2V8fCFfZS5pbmNsdWRlcygiL1NBU0xvZ29uL2xvZ2luIikpKXRocm93IG5ldyB6LkxvZ2luUmVxdWlyZWRFcnJvcjtpZihudWxsIT09KFRlPW5lLmRhdGEpJiZ2b2lkIDAhPT1UZSYmVGUuYXV0aF9yZXF1ZXN0KXRocm93IG5ldyB6LkF1dGhvcml6ZUVycm9yKG5lLmRh''@;'; put 'put ''dGEubWVzc2FnZSxuZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZihudWxsIT09KGplPW51bGw9PT0oU2U9bmUuY29uZmlnKXx8dm9pZCAwPT09U2U/dm9pZCAwOlNlLnVybCkmJnZvaWQgMCE9PWplJiZqZS5pbmNsdWRlcygic2FzQXV0aEVycm9yIikpdGhyb3cgbmV3IEsuU0FTOUF1dGhFcnJv''@;'; put 'put ''cjtjb25zdCBWPUoobmUuZGF0YSk7aWYoVil0aHJvdyBWfTtjb25zdCBKPW5lPT57aWYoIW5lKXJldHVybiBudWxsO3RyeXtjb25zdCBpZT1KU09OLnBhcnNlKG5lPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtpZihpZS5lcnJvckNvZGUmJmllLm1lc3NhZ2UpcmV0dXJuIG5ldyB6LkpvYkV4''@;'; put 'put ''ZWN1dGlvbkVycm9yKGllLmVycm9yQ29kZSxpZS5tZXNzYWdlLG5lPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKX1jYXRjaHt9dHJ5e2lmKG5lPy5pbmNsdWRlcygneyJlcnJvckNvZGUnKSl7Y29uc3QgbGU9bmUuc3BsaXQoJ3siZXJyb3JDb2RlJyk7aWYobGUubGVuZ3RoPjEpe2NvbnN0IG1l''@;'; put 'put ''PSd7ImVycm9yQ29kZScrbGVbMV0uc3BsaXQoJyJ9JylbMF0rJyJ9JyxfZT1KU09OLnBhcnNlKG1lLnJlcGxhY2UoL1tcblxyXS9nLCIgIikpO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcihfZS5lcnJvckNvZGUsX2UubWVzc2FnZSxuZT8ucmVwbGFjZSgvW1xuXHJdL2csIlxuIikp''@;'; put 'put ''fX19Y2F0Y2h7fXRyeXtpZihuZT8ubWF0Y2goL3N0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpKXtjb25zdCBsZT1uZS5zcGxpdCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSk7aWYobGUubGVuZ3RoPjEpe2NvbnN0IG1lPWxlWzFdLnNwbGl0KCI8aT4iKVsxXS5zcGxpdCgiPC9p''@;'; put 'put ''PiIpWzBdLF9lPW1lLmVuZHNXaXRoKCJydW5uZXIiKT8iU0FTSlMgcnVubmVyIG5vdCBmb3VuZC4gSGVyZSdzIHRoZSBsaW5rIChodHRwczovL2NsaS5zYXNqcy5pby9hdXRoLyNzYXNqcy1ydW5uZXIpIHRvIHRoZSBTQVMgY29kZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIFNBU2pzIHJ1bm5lciI6''@;'; put 'put ''YFN0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogJHttZX1gO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcig1MDAsX2UsIiIpfX19Y2F0Y2h7fXRyeXtpZighbmU/Lm1hdGNoKC8+PndlYm91dEJFR0lOPDwvKSYmbmU/Lm1hdGNoKC9TdG9yZWQgUHJvY2VzcyBFcnJvci9pKSYmbmU/Lm1h''@;'; put 'put ''dGNoKC9UaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLi9pKSl7Y29uc3QgbGU9bmUuc3BsaXQoIjxoMj5TQVMgTG9nPC9oMj4iKTtpZihsZS5sZW5ndGg+MSl7Y29uc3QgbWU9bGVbMV0uc3BsaXQoIjxwcmU+IilbMV0uc3BsaXQoIjwvcHJlPiIpWzBdO3JldHVybiBuZXcgei5K''@;'; put 'put ''b2JFeGVjdXRpb25FcnJvcig1MDAsIlRoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuIixtZSl9fX1jYXRjaHt9cmV0dXJuIG51bGx9fSw3OTU6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3Jl''@;'; put 'put ''YXRlP2Z1bmN0aW9uKEwsSyxVLFcpe3ZvaWQgMD09PVcmJihXPVUpO3ZhciBZPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSyxVKTsoIVl8fCgiZ2V0ImluIFk/IUsuX19lc01vZHVsZTpZLndyaXRhYmxlfHxZLmNvbmZpZ3VyYWJsZSkpJiYoWT17ZW51bWVyYWJsZTohMCxnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gS1tVXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTCxXLFkpfTpmdW5jdGlvbihMLEssVSxXKXt2b2lkIDA9PT1XJiYoVz1VKSxMW1ddPUtbVV19KSxfPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihMLEsp''@;'; put 'put ''e09iamVjdC5kZWZpbmVQcm9wZXJ0eShMLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpLfSl9OmZ1bmN0aW9uKEwsSyl7TC5kZWZhdWx0PUt9KSxnPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihMKXtpZihMJiZMLl9fZXNNb2R1bGUpcmV0dXJuIEw7dmFyIEs9e307''@;'; put 'put ''aWYobnVsbCE9TClmb3IodmFyIFUgaW4gTCkiZGVmYXVsdCIhPT1VJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTCxVKSYmSShLLEwsVSk7cmV0dXJuIF8oSyxMKSxLfSxCPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihMLEssVSxXKXtyZXR1cm4gbmV3KFV8''@;'; put 'put ''fChVPVByb21pc2UpKShmdW5jdGlvbihxLGVlKXtmdW5jdGlvbiBKKGxlKXt0cnl7aWUoVy5uZXh0KGxlKSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gbmUobGUpe3RyeXtpZShXLnRocm93KGxlKSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gaWUobGUpe2xlLmRvbmU/cShsZS52''@;'; put 'put ''YWx1ZSk6ZnVuY3Rpb24gWShxKXtyZXR1cm4gcSBpbnN0YW5jZW9mIFU/cTpuZXcgVShmdW5jdGlvbihlZSl7ZWUocSl9KX0obGUudmFsdWUpLnRoZW4oSixuZSl9aWUoKFc9Vy5hcHBseShMLEt8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksWC5TYXM5UmVxdWVzdENsaWVudD12b2lkIDA7Y29uc3Qgdz15KDgyMjQpLFA9Zyh5KDc4NTcpKSxGPXkoOTc3OCksTz15KDQ1ODgpLHo9eSgxMzk1KTtYLlNhczlSZXF1ZXN0Q2xpZW50PWNsYXNzIE4gZXh0ZW5kcyBPLlJlcXVlc3RDbGllbnR7Y29uc3RydWN0b3IoSyxV''@;'; put 'put ''KXtzdXBlcihLLFUpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5tYXhSZWRpcmVjdHM9MCx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMudmFsaWRhdGVTdGF0dXM9Vz0+Vz49MjAwJiZXPDMwMyx3LndyYXBwZXImJigoMCx3LndyYXBwZXIpKHRoaXMuaHR0cENsaWVudCksdGhpcy5odHRwQ2xp''@;'; put 'put ''ZW50LmRlZmF1bHRzLmphcj1uZXcgUC5Db29raWVKYXIpfWxvZ2luKEssVSxXKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT1gL1VzZXIgRm9sZGVycy8ke0t9L015IEZvbGRlci9zYXNqcy9ydW5uZXJgO3RoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5q''@;'; put 'put ''YXImJih0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyLnJlbW92ZUFsbENvb2tpZXMoKSx5aWVsZCB0aGlzLmdldChgJHtXfT9fcHJvZ3JhbT0ke1l9Jl91c2VybmFtZT0ke0t9Jl9wYXNzd29yZD0ke1V9YCx2b2lkIDAsInRleHQvcGxhaW4iKSl9KX1nZXQoSyxVLFc9ImFwcGxpY2F0aW9u''@;'; put 'put ''L2pzb24iLFk9e30scT0hMSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEo9e2hlYWRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhVLFcpKSxZKSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09Vz8idGV4''@;'; put 'put ''dCI6Impzb24iLHdpdGhYU1JGVG9rZW46ITB9O3JldHVybiJ0ZXh0L3BsYWluIj09PVcmJihKLnRyYW5zZm9ybVJlc3BvbnNlPXZvaWQgMCksdGhpcy5odHRwQ2xpZW50LmdldChLLEopLnRoZW4obmU9PjMwMj09PW5lLnN0YXR1cz90aGlzLmdldChuZS5oZWFkZXJzLmxvY2F0aW9uLFUsVyk6''@;'; put 'put ''KCgwLE8udGhyb3dJZkVycm9yKShuZSksdGhpcy5wYXJzZVJlc3BvbnNlKG5lKSkpLmNhdGNoKG5lPT5CKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihuZSBpbnN0YW5jZW9mIHouSm9iRXhlY3V0aW9uRXJyb3IpdGhyb3cgbmU7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJy''@;'; put 'put ''b3IobmUsKCk9PnRoaXMuZ2V0KEssVSxXLFkpLmNhdGNoKGllPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGllLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLHEpLmNhdGNoKGllPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGllLCJFcnJv''@;'; put 'put ''ciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIil9KX0pKX0pfXBvc3QoSyxVLFcsWT0iYXBwbGljYXRpb24vanNvbiIscT17fSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRl''@;'; put 'put ''cnMoVyxZKSkscSk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KEssVSx7aGVhZGVyczplZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihKPT5CKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gMzAyPT09Si5zdGF0dXM/eWllbGQgdGhpcy5nZXQoSi5oZWFkZXJzLmxv''@;'; put 'put ''Y2F0aW9uLHZvaWQgMCxZLHEpOigoMCxPLnRocm93SWZFcnJvcikoSiksdGhpcy5wYXJzZVJlc3BvbnNlKEopKX0pKS5jYXRjaChKPT5CKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihKLCgpPT50aGlzLnBvc3QoSyxVLFcsWSxx''@;'; put 'put ''KSl9KSl9KX19fSwzNjAyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNBU0pTX0xPR1NfU0VQQVJBVE9SPVguU2FzanNSZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCBJPXkoNDU4OCk7WC5TYXNqc1Jl''@;'; put 'put ''cXVlc3RDbGllbnQ9Y2xhc3MgXyBleHRlbmRzIEkuUmVxdWVzdENsaWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5nZXRIZWFkZXJzPShCLHcpPT57dmFyIFA7Y29uc3QgRj17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PXcm''@;'; put 'put ''JihGWyJDb250ZW50LVR5cGUiXT13KSxGLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT13P3c6IiovKiIsIUImJnR5cGVvZiB3aW5kb3c8InUiJiYoQj1udWxsIT09KFA9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImFjY2Vzc1Rva2VuIikpJiZ2b2lkIDAhPT1QP1A6dm9pZCAwKSxCJiYoRi5B''@;'; put 'put ''dXRob3JpemF0aW9uPWBCZWFyZXIgJHtCfWApLEZ9fXBhcnNlUmVzcG9uc2UoQil7Y29uc3Qgdz1CPy5oZWFkZXJzP0IuaGVhZGVycy5ldGFnOiIiO2xldCBGLE8seixQPXt9O3RyeXtQPSJzdHJpbmciPT10eXBlb2YgQi5kYXRhP0pTT04ucGFyc2UoQi5kYXRhKTpCLmRhdGF9Y2F0Y2h7aWYo''@;'; put 'put ''Qi5kYXRhLmluY2x1ZGVzKFguU0FTSlNfTE9HU19TRVBBUkFUT1IpKXtjb25zdHtkYXRhOkt9PUIsVT1LLnNwbGl0KFguU0FTSlNfTE9HU19TRVBBUkFUT1IpO0Y9VS5zcGxpY2UoMCwxKVswXSx2b2lkIDAhPT1GJiYoUD1GKTtjb25zdCBXPVUuc3BsaWNlKDAsVS5sZW5ndGgtMSksWT1uZXcg''@;'; put 'put ''UmVnRXhwKGAke1guU0FTSlNfTE9HU19TRVBBUkFUT1J9JGApLHE9VVswXTtxJiYoWS50ZXN0KEspP1cubGVuZ3RoPjEmJlcucHVzaChxKTp6PXEpLE89Vy5qb2luKFguU0FTSlNfTE9HU19TRVBBUkFUT1IpfWVsc2UgUD1CLmRhdGF9Y29uc3QgTj17cmVzdWx0OlAsbG9nOk98fCIiLGV0YWc6''@;'; put 'put ''dyxzdGF0dXM6Qi5zdGF0dXN9O3JldHVybiB6JiYoTi5wcmludE91dHB1dD16KSxOfX0sWC5TQVNKU19MT0dTX1NFUEFSQVRPUj0iU0FTSlNfTE9HU19TRVBBUkFUT1JfMTYzZWUxN2I2ZmYyNGYwMjg5Mjg5NzJkODBhMjY3ODQifSw0NzA6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDY2NjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw2MTc3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU3NjY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDk3NToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNN''@;'; put 'put ''b2R1bGUiLHt2YWx1ZTohMH0pfSwyMTU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDc4MjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pfSw0MTY4Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg1MTY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzg0''@;'; put 'put ''MDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzMTUzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE0Mjg6KHVlLFgpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTg0MToodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEksXztPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Mb2dpbk1lY2hhbmlzbT1Y''@;'; put 'put ''LlNBU2pzQ29uZmlnPXZvaWQgMCxYLlNBU2pzQ29uZmlnPWNsYXNzIHl7Y29uc3RydWN0b3IoKXt0aGlzLnNlcnZlclVybD0iIix0aGlzLnBhdGhTQVNKUz0iIix0aGlzLnBhdGhTQVM5PSIiLHRoaXMucGF0aFNBU1ZpeWE9IiIsdGhpcy5hcHBMb2M9IiIsdGhpcy5zZXJ2ZXJUeXBlPW51bGws''@;'; put 'put ''dGhpcy5kZWJ1Zz0hMCx0aGlzLnZlcmJvc2U9ITAsdGhpcy5jb250ZXh0TmFtZT0iIix0aGlzLnVzZUNvbXB1dGVBcGk9bnVsbCx0aGlzLmxvZ2luTWVjaGFuaXNtPUkuRGVmYXVsdCx0aGlzLnJlcXVlc3RIaXN0b3J5TGltaXQ9MTB9fSwoXz1JPVguTG9naW5NZWNoYW5pc218fChYLkxvZ2lu''@;'; put 'put ''TWVjaGFuaXNtPXt9KSkuRGVmYXVsdD0iRGVmYXVsdCIsXy5SZWRpcmVjdGVkPSJSZWRpcmVjdGVkIn0sNjAzODoodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2Vzc2lvblN0YXRlPXZvaWQgMCwo''@;'; put 'put ''ST1YLlNlc3Npb25TdGF0ZXx8KFguU2Vzc2lvblN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLEkuUnVubmluZz0icnVubmluZyIsSS5QZW5kaW5nPSJwZW5kaW5nIixJLklkbGU9ImlkbGUiLEkuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIixJLk5vU3RhdGU9IiIsSS5GYWlsZWQ9''@;'; put 'put ''ImZhaWxlZCIsSS5FcnJvcj0iZXJyb3IifSw5NDkzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg2NTA6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KX0sMTI0Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5BdXRob3JpemVFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8sZyl7c3VwZXIoXyksdGhp''@;'; put 'put ''cy5tZXNzYWdlPV8sdGhpcy5jb25maXJtVXJsPWcsdGhpcy5uYW1lPSJBdXRob3JpemVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkF1dGhvcml6ZUVycm9yPXl9LDk0NjU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNlcnRpZmljYXRlRXJyb3I9dm9pZCAwO2NsYXNzIEkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihnKXtzdXBlcihgJHtnfVxuUGxlYXNlIHZpc2l0IHRoZSBsaW5rIGJlbG93IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoaXMg''@;'; put 'put ''aXNzdWU6XG4tIGh0dHBzOi8vZ2l0aHViLmNvbS9zYXNqcy9jbGkvaXNzdWVzLzExODEjaXNzdWVjb21tZW50LTEwOTA2Mzg1ODRcbmApLHRoaXMubmFtZT0iQ2VydGlmaWNhdGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsSS5wcm90b3R5cGUpfX1YLkNlcnRpZmljYXRlRXJy''@;'; put 'put ''b3I9SX0sNTI2NzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxnKXtzdXBlcigiRXJy''@;'; put 'put ''b3I6IEpvYiBleGVjdXRpb24gZmFpbGVkIiksdGhpcy5qb2I9Xyx0aGlzLmxvZz1nLHRoaXMubmFtZT0iQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPXl9LDkyMzI6KHVl''@;'; put 'put ''LFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkVycm9yUmVzcG9uc2U9dm9pZCAwLFguRXJyb3JSZXNwb25zZT1jbGFzcyB5e2NvbnN0cnVjdG9yKF8sZyxCKXtsZXQgdz1nO2lmKCJvYmplY3QiIT10eXBlb2YgZyl0''@;'; put 'put ''cnl7dz1KU09OLnBhcnNlKGcpfWNhdGNoe0I9Zyx3PSIifXRoaXMuZXJyb3I9e21lc3NhZ2U6XyxkZXRhaWxzOncscmF3OkJ9fX19LDUxMDk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkludGVybmFsU2Vy''@;'; put 'put ''dmVyRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJFcnJvcjogSW50ZXJuYWwgc2VydmVyIGVycm9yLiIpLHRoaXMubmFtZT0iSW50ZXJuYWxTZXJ2ZXJFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1Y''@;'; put 'put ''LkludGVybmFsU2VydmVyRXJyb3I9eX0sNTUxODoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSW52YWxpZEpzb25FcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3Vw''@;'; put 'put ''ZXIoIkVycm9yOiBpbnZhbGlkIEpzb24gc3RyaW5nIiksdGhpcy5uYW1lPSJJbnZhbGlkSnNvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguSW52YWxpZEpzb25FcnJvcj15fSwxMDA1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5JbnZhbGlkU0FTanNDc3JmRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJBdXRoIGVycm9yOiBJbnZhbGlkIENTUkYgdG9rZW4hIiksdGhpcy5uYW1lPSJJbnZhbGlkU0FT''@;'; put 'put ''anNDc3JmRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5JbnZhbGlkU0FTanNDc3JmRXJyb3I9eX0sODUzMToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSm9iRXhl''@;'; put 'put ''Y3V0aW9uRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLGcsQil7c3VwZXIoYEVycm9yIENvZGUgJHtffTogJHtnfWApLHRoaXMuZXJyb3JDb2RlPV8sdGhpcy5lcnJvck1lc3NhZ2U9Zyx0aGlzLnJlc3VsdD1CLHRoaXMubmFtZT0iSm9iRXhlY3V0aW9u''@;'; put 'put ''RXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5Kb2JFeGVjdXRpb25FcnJvcj15fSw5MDc5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Kb2JTdGF0ZVBvbGxFcnJv''@;'; put 'put ''cj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8sZyl7c3VwZXIoYEVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXRlIGZvciBqb2IgJHtffTogJHtnLm1lc3NhZ2V8fGd9YCksdGhpcy5vcmlnaW5hbEVycm9yPWcsdGhpcy5uYW1lPSJKb2JTdGF0ZVBvbGxFcnJv''@;'; put 'put ''ciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkpvYlN0YXRlUG9sbEVycm9yPXl9LDMwOTY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkpzb25QYXJzZUFycmF5RXJyb3I9''@;'; put 'put ''dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJDYW4gbm90IHBhcnNlIGFycmF5IG9iamVjdCB0byBqc29uLiIpLHRoaXMubmFtZT0iSnNvblBhcnNlQXJyYXlFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkpz''@;'; put 'put ''b25QYXJzZUFycmF5RXJyb3I9eX0sNjc0MzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTG9naW5SZXF1aXJlZEVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyl7c3Vw''@;'; put 'put ''ZXIoYEF1dGggZXJyb3I6ICR7Xz9KU09OLnN0cmluZ2lmeShfLG51bGwsMik6IllvdSBtdXN0IGJlIGxvZ2dlZCBpbiB0byBhY2Nlc3MgdGhpcyByZXNvdXJjZSJ9YCksdGhpcy5uYW1lPSJMb2dpblJlcXVpcmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBl''@;'; put 'put ''KX19WC5Mb2dpblJlcXVpcmVkRXJyb3I9eX0sNzg2NDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTm9TZXNzaW9uU3RhdGVFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9y''@;'; put 'put ''KF8sZyxCKXtzdXBlcihgQ291bGQgbm90IGdldCBzZXNzaW9uIHN0YXRlLiBTZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJHtffSB3aGlsc3QgY2hlY2tpbmcgc3RhdGU6ICR7Z31gKSx0aGlzLnNlcnZlclJlc3BvbnNlU3RhdHVzPV8sdGhpcy5zZXNzaW9uU3RhdGVVcmw9Zyx0aGlzLmxvZ1VybD1C''@;'; put 'put ''LHRoaXMubmFtZT0iTm9TZXNzaW9uU3RhdHVzIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguTm9TZXNzaW9uU3RhdGVFcnJvcj15fSw5NTc3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksWC5Ob3RGb3VuZEVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyl7c3VwZXIoYEVycm9yOiBSZXNvdXJjZSBhdCAke199IHdhcyBub3QgZm91bmRgKSx0aGlzLnVybD1fLHRoaXMubmFtZT0iTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3Rv''@;'; put 'put ''dHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLk5vdEZvdW5kRXJyb3I9eX0sOTI3OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj12b2lkIDA7Y29uc3QgST15''@;'; put 'put ''KDY3OTkpO2NsYXNzIF8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihCLHcsUCl7bGV0IEY9YFJvb3QgZm9sZGVyICR7Qn0gd2FzIG5vdCBmb3VuZC5cblBsZWFzZSBjaGVjayAke3d9L1NBU0RyaXZlLlxuSWYgdGhlIGZvbGRlciBET0VTIGV4aXN0IHRoZW4gaXQgaXMgbGlrZWx5IGEgcGVy''@;'; put 'put ''bWlzc2lvbiBwcm9ibGVtLlxuYDtpZihQKXtsZXQgej0oMCxJLmRlY29kZVRva2VuKShQKS5zY29wZTt6PXoubWFwKE49PiIqICIrTiksRis9IllvdXIgYWNjZXNzIHRva2VuIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgc2NvcGVzOlxuIit6LmpvaW4oIlxuIil9c3VwZXIoRiksdGhpcy5uYW1l''@;'; put 'put ''PSJSb290Rm9sZGVyTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1YLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPV99LDk1MjY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KSxYLlNBUzlBdXRoRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJUaGUgY3JlZGVudGlhbHMgeW91IHByb3ZpZGVkIGNhbm5vdCBiZSBhdXRoZW50aWNhdGVkLiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHNldCBvZiBjcmVkZW50''@;'; put 'put ''aWFscy4iKSx0aGlzLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguU0FTOUF1dGhFcnJvcj15fSw4ODc1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksWC5XZWJvdXRSZXNwb25zZUVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyl7c3VwZXIoYEVycm9yOiBlcnJvciB3aGlsZSBwYXJzaW5nIHJlc3BvbnNlIGZyb20gJHtffWApLHRoaXMudXJsPV8sdGhpcy5uYW1lPSJXZWJvdXRSZXNwb25zZUVy''@;'; put 'put ''cm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguV2Vib3V0UmVzcG9uc2VFcnJvcj15fSwxMzk1OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihn''@;'; put 'put ''LEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYmKEY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIEJbd119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyh5KDEyNCksWCksXyh5KDk0NjUpLFgpLF8oeSg1MjY3KSxYKSxfKHkoOTIzMiksWCksXyh5KDUxMDkpLFgpLF8o''@;'; put 'put ''eSg1NTE4KSxYKSxfKHkoODUzMSksWCksXyh5KDkwNzkpLFgpLF8oeSgzMDk2KSxYKSxfKHkoNjc0MyksWCksXyh5KDc4NjQpLFgpLF8oeSg5NTc3KSxYKSxfKHkoOTI3OSksWCksXyh5KDg4NzUpLFgpfSwxMjMwOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRo''@;'; put 'put ''aXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1''@;'; put 'put ''cmFibGUpKSYmKEY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVu''@;'; put 'put ''Y3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyh5KDQ3MCksWCksXyh5KDQ2NjYp''@;'; put 'put ''LFgpLF8oeSg0OTc1KSxYKSxfKHkoNTc2NiksWCksXyh5KDIxNSksWCksXyh5KDQ3ODIpLFgpLF8oeSg0MTY4KSxYKSxfKHkoODUxNiksWCksXyh5KDM4NDApLFgpLF8oeSg1ODQxKSxYKSxfKHkoMTQyOCksWCksXyh5KDYwMzgpLFgpLF8oeSg5NDkzKSxYKSxfKHkoMzE1MyksWCksXyh5KDg2''@;'; put 'put ''NTApLFgpLF8oeSg2MTc3KSxYKSxfKHkoMTM5NSksWCl9LDMzMDI6ZnVuY3Rpb24odWUsWCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihfLGcsQix3KXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihGLE8pe2Z1bmN0aW9uIHoo''@;'; put 'put ''Syl7dHJ5e0wody5uZXh0KEspKX1jYXRjaChVKXtPKFUpfX1mdW5jdGlvbiBOKEspe3RyeXtMKHcudGhyb3coSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIEwoSyl7Sy5kb25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihmdW5jdGlv''@;'; put 'put ''bihPKXtPKEYpfSl9KEsudmFsdWUpLnRoZW4oeixOKX1MKCh3PXcuYXBwbHkoXyxnfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9dm9pZCAwLFguYXBwZW5kRXh0''@;'; put 'put ''cmFSZXNwb25zZUF0dHJpYnV0ZXM9ZnVuY3Rpb24gSShfLGcpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgQj17fTtpZihnPy5sZW5ndGgpe2NvbnN0IHc9Zy5yZWR1Y2UoKFAsRik9PihQW0ZdPV9bRl0sUCkse30pO0I9T2JqZWN0LmFzc2lnbih7cmVzdWx0''@;'; put 'put ''Ol8ucmVzdWx0fSx3KX1lbHNlIEI9Xy5yZXN1bHQ7cmV0dXJuIEJ9KX19LDc5MjI6ZnVuY3Rpb24odWUsWCl7InVzZSBzdHJpY3QiO3ZhciB5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihfLGcsQix3KXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihGLE8pe2Z1''@;'; put 'put ''bmN0aW9uIHooSyl7dHJ5e0wody5uZXh0KEspKX1jYXRjaChVKXtPKFUpfX1mdW5jdGlvbiBOKEspe3RyeXtMKHcudGhyb3coSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIEwoSyl7Sy5kb25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcg''@;'; put 'put ''QihmdW5jdGlvbihPKXtPKEYpfSl9KEsudmFsdWUpLnRoZW4oeixOKX1MKCh3PXcuYXBwbHkoXyxnfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguYXN5bmNGb3JFYWNoPXZvaWQgMCxYLmFzeW5jRm9yRWFjaD1mdW5j''@;'; put 'put ''dGlvbiBJKF8sZyl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgQj0wO0I8Xy5sZW5ndGg7QisrKXlpZWxkIGcoX1tCXSxCLF8pfSl9fSwzNzkzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksWC5jb21wYXJlVGltZXN0YW1wcz12b2lkIDAsWC5jb21wYXJlVGltZXN0YW1wcz0oSSxfKT0+Xy50aW1lc3RhbXAuZ2V0VGltZSgpLUkudGltZXN0YW1wLmdldFRpbWUoKX0sMjQwMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUxMDgpO09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzRm9ybWF0c1RhYmxlPVguY29udmVydFRvQ1NWPXZvaWQgMDtjb25zdCBfPXkoNjQ2NyksZz15KDk3NzgpO1guY29udmVydFRvQ1NWPShGLE8pPT57dmFyIHo7aWYoIUZbT10pe2NvbnN0IGVlPSgwLGcucHJlZml4TWVz''@;'; put 'put ''c2FnZSkoIk5vIHRhYmxlIHByb3ZpZGVkIHRvIGJlIGNvbnZlcnRlZCB0byBDU1YuIiwiRXJyb3Igd2hpbGUgY29udmVydGluZyB0byBDU1YuICIpO3Rocm93InN0cmluZyI9PXR5cGVvZiBlZT9uZXcgRXJyb3IoZWUpOmVlfWNvbnN0IE49RltPXTtpZighQXJyYXkuaXNBcnJheShOKSlyZXR1''@;'; put 'put ''cm4iIjtsZXQgVSxMPW51bGw9PT0oej1GW2AkJHtPfWBdKXx8dm9pZCAwPT09ej92b2lkIDA6ei5mb3JtYXRzLEs9W10sVz0hMTtMJiYoSz1PYmplY3Qua2V5cyhMKS5tYXAoZWU9PmAke2VlfToke0xbZWVdfWApKTtjb25zdCBZPU9iamVjdC5rZXlzKE5bMF0pO3JldHVybiBZLmZvckVhY2go''@;'; put 'put ''ZWU9PntpZighTHx8IU9iamVjdC5rZXlzKEwpLmluY2x1ZGVzKGVlKSl7bGV0IEo9ITEsbmU9ITE7aWYoTi5mb3JFYWNoKGllPT57bnVsbD09PWllW2VlXXx8Im51bWJlciI9PXR5cGVvZiBpZVtlZV0/Sj0hMDoic3RyaW5nIj09dHlwZW9mIGllW2VlXSYmKDAsXy5pc1NwZWNpYWxNaXNzaW5n''@;'; put 'put ''KShpZVtlZV0pJiYobmU9ITApfSksSiYmbmUpSy5wdXNoKGAke2VlfTpiZXN0LmApLEx8fChMPXt9KSxMW2VlXT0iYmVzdC4iO2Vsc2V7bGV0IGllPW51bGwsbGU9ITEsbWU9LTE7Y29uc3QgX2U9Ti5tYXAoKFRlLFNlKT0+e2lmKFRlW2VlXXx8IiI9PT1UZVtlZV0pe2xldCBqZTtyZXR1cm4g''@;'; put 'put ''aWU/bGV8fChsZT0oIiI9PT1UZVtlZV18fCJzdHJpbmciPT10eXBlb2YgVGVbZWVdPyJjaGFycyI6Im51bWJlciIpIT09aWUsbWU9bGU/U2UrMTotMSk6aWU9IiI9PT1UZVtlZV18fCJzdHJpbmciPT10eXBlb2YgVGVbZWVdPyJjaGFycyI6Im51bWJlciIsInN0cmluZyI9PXR5cGVvZiBUZVtl''@;'; put 'put ''ZV0mJihqZT1QKFRlW2VlXSkpLGplfX0pLnNvcnQoKFRlLFNlKT0+U2UtVGUpWzBdO19lJiZfZT4zMjc2NSYmKFc9ITApLGxlJiZJLmVycm9yKGBSb3cgKCR7bWV9KSwgQ29sdW1uICgke2VlfSkgaGFzIG1peGVkIHR5cGVzOiBFUlJPUmApLEsucHVzaChgJHtlZX06JHsiY2hhcnMiPT09aWU/''@;'; put 'put ''IiRjaGFyIjoiIn0ke19lfHwoImNoYXJzIj09PWllPyIxIjoiYmVzdCIpfS5gKX19fSksTCYmKEs9Sy5zb3J0KChlZSxKKT0+WS5pbmRleE9mKGVlLnJlcGxhY2UoLzouKi8sIiIpKS1ZLmluZGV4T2YoSi5yZXBsYWNlKC86LiovLCIiKSkpKSxXPyJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdU''@;'; put 'put ''SCI6KFU9Ti5tYXAoZWU9Pk9iamVjdC5rZXlzKGVlKS5tYXAoKG5lLGllKT0+e2xldCBsZTtjb25zdCBtZT1lZVtuZV07aWYoIm51bWJlciI9PXR5cGVvZiBtZSlyZXR1cm4gbWU7aWYobGU9bnVsbD09PW1lPyIiOm1lLEwmJiJiZXN0LiI9PT1MW25lXSl7aWYobGUmJiEoMCxfLmlzU3BlY2lh''@;'; put 'put ''bE1pc3NpbmcpKGxlKSl0aHJvdyBuZXcgRXJyb3IoIkEgU3BlY2lhbCBtaXNzaW5nIHZhbHVlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tICdBJyB0byAnWicsICdfJywgJy5bYS16XScsICcuXyciKTtyZXR1cm5gJHtsZS5pbmNsdWRlcygiLiIpPyIiOiIuIn0ke2xlLnRv''@;'; put 'put ''TG93ZXJDYXNlKCl9YH1yZXR1cm4gbGU9bGUucmVwbGFjZSgvIi9nLCciIicpLGxlPWAiJHtsZX0iYCxsZS5zdWJzdHJpbmcoMSxsZS5sZW5ndGgtMSkuc2VhcmNoKC8oXHR8XG58XHJ8LHxcJ3xcIikvZ20pPDAmJihsZT1sZS5zdWJzdHJpbmcoMSxsZS5sZW5ndGgtMSkpLGxlPWxlLnJlcGxh''@;'; put 'put ''Y2UoL1xyXG4vZ20sIlxuIiksIiI9PT1sZSYmS1tpZV0uaW5jbHVkZXMoImJlc3QiKSYmKGxlPSIuIiksbGV9KS5qb2luKCIsIikpLEsuam9pbigiLCIpLnJlcGxhY2UoLywvZywiICIpKyJcclxuIitVLmpvaW4oIlxyXG4iKSl9LFguaXNGb3JtYXRzVGFibGU9Rj0+L15cJC4qLy50ZXN0KEYp''@;'; put 'put ''O2NvbnN0IFA9Rj0+e2xldCBPPUYubGVuZ3RoO2ZvcihsZXQgej1GLmxlbmd0aC0xO3o+PTA7ei0tKXtjb25zdCBOPUYuY2hhckNvZGVBdCh6KTtOPjEyNyYmTjw9MjA0Nz9PKys6Tj4yMDQ3JiZOPD02NTUzNSYmKE8rPTIpLE4+PTU2MzIwJiZOPD01NzM0MyYmei0tfXJldHVybiBPfX0sNjEx''@;'; put 'put ''NjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oQil7cmV0dXJuIEImJkIuX19lc01vZHVsZT9COntkZWZhdWx0OkJ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''WC5jcmVhdGVBeGlvc0luc3RhbmNlPXZvaWQgMDtjb25zdCBfPUkoeSg3MjE4KSk7WC5jcmVhdGVBeGlvc0luc3RhbmNlPShCLHcpPT5fLmRlZmF1bHQuY3JlYXRlKHtiYXNlVVJMOkIsaHR0cHNBZ2VudDp3fSl9LDk4MjU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRlbGF5PXZvaWQgMCxYLmRlbGF5PUk9Pm5ldyBQcm9taXNlKF89PnNldFRpbWVvdXQoXyxJKSl9LDk5MDpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPXRoaXMmJnRoaXMuX19h''@;'; put 'put ''d2FpdGVyfHxmdW5jdGlvbihGLE8seixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtxKE4ubmV4dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtxKE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1m''@;'; put 'put ''dW5jdGlvbiBxKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIEwoSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShLKX0pfShlZS52YWx1ZSkudGhlbihXLFkpfXEoKE49Ti5hcHBseShGLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5mZXRjaExvZz1YLmZldGNoTG9nQnlDaHVua3M9dm9pZCAwO2NvbnN0IEI9eSg5Nzc4KTtYLmZldGNoTG9nQnlDaHVua3M9KEYsTyx6LE4pPT5nKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVs''@;'; put 'put ''ZCgwLFguZmV0Y2hMb2cpKEYsTyx6LDAsTil9KSxYLmZldGNoTG9nPShGLE8seixOLEwpPT5nKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9SS5sb2dnZXJ8fF87bGV0IFU9IiI7Y29uc3QgVz1MPDFlND9MOjFlNDtkb3tLLmluZm8oYEZldGNoaW5nIGxvZ3MgZnJv''@;'; put 'put ''bSBsaW5lIG5vOiAke04rMX0gdG8gJHtOK1d9IG9mICR7TH0uYCk7Y29uc3QgWT15aWVsZCBGLmdldChgJHt6fT9zdGFydD0ke059JmxpbWl0PSR7V31gLE8pLnRoZW4oZWU9PmVlLnJlc3VsdCkuY2F0Y2goZWU9Pnt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkoZWUsIkVycm9yIHdoaWxlIGdl''@;'; put 'put ''dHRpbmcgbG9nLiAiKX0pO2lmKDA9PT1ZLml0ZW1zLmxlbmd0aClicmVhaztVKz1ZLml0ZW1zLm1hcChlZT0+ZWUubGluZSkuam9pbigiXG4iKSxOKz1XfXdoaWxlKE48TCk7cmV0dXJuIFV9KX0sNzE0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJf''@;'; put 'put ''X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmZvcm1hdERhdGFGb3JSZXF1ZXN0PXZvaWQgMDtjb25zdCBJPXkoMjQwMiksXz15KDQ3OTkpO1guZm9ybWF0RGF0YUZvclJlcXVlc3Q9Qj0+e2NvbnN0IHc9W107bGV0IFA9MDtjb25zdCBGPXt9O2Zvcihjb25zdCBPIGluIEIpe2lmKCgwLEkuaXNG''@;'; put 'put ''b3JtYXRzVGFibGUpKE8pJiZPYmplY3Qua2V5cyhCKS5pbmNsdWRlcyhPLnJlcGxhY2UoL15cJC8sIiIpKSljb250aW51ZTtQKyssKDAsSS5pc0Zvcm1hdHNUYWJsZSkoTyl8fHcucHVzaChPKTtjb25zdCB6PSgwLEkuY29udmVydFRvQ1NWKShCLE8pO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5H''@;'; put 'put ''IExFTkdUSCI9PT16KXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZih6Lmxlbmd0aD4xNmUzKXtjb25zdCBOPSgwLF8uc3BsaXRDaHVua3MpKHopO0ZbYHNhc2pzJHtQfWRhdGEwYF09Ti5s''@;'; put 'put ''ZW5ndGgsTi5mb3JFYWNoKChMLEspPT57Rltgc2FzanMke1B9ZGF0YSR7SysxfWBdPUx9KX1lbHNlIEZbYHNhc2pzJHtQfWRhdGFgXT16fXJldHVybiBGLnNhc2pzX3RhYmxlcz13LmpvaW4oIiAiKSxGfX0sODQ1ODpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0''@;'; put 'put ''aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRGb3JtRGF0YT12b2lkIDA7Y29uc3QgXz15KDU5MjgpLGc9SSh5KDYy''@;'; put 'put ''MzApKTtYLmdldEZvcm1EYXRhPSgpPT4oMCxfLmlzTm9kZSkoKT9uZXcgZy5kZWZhdWx0Om5ldyBGb3JtRGF0YX0sMzI2MDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VXNlckxhbmd1YWdlPXZvaWQg''@;'; put 'put ''MCxYLmdldFVzZXJMYW5ndWFnZT0oKT0+d2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXx8d2luZG93Lm5hdmlnYXRvci51c2VyTGFuZ3VhZ2V9LDE4ODQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0''@;'; put 'put ''VmFsaWRKc29uPXZvaWQgMDtjb25zdCBJPXkoMTM5NSk7WC5nZXRWYWxpZEpzb249Zz0+e3RyeXtpZihudWxsPT1nKXRocm93IG5ldyBJLkludmFsaWRKc29uRXJyb3I7aWYoQXJyYXkuaXNBcnJheShnKSl0aHJvdyBuZXcgSS5Kc29uUGFyc2VBcnJheUVycm9yO3JldHVybiJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgZz9nOiIiPT09Zz97fTpKU09OLnBhcnNlKGcpfWNhdGNoKEIpe3Rocm93IEIgaW5zdGFuY2VvZiBJLkpzb25QYXJzZUFycmF5RXJyb3I/QjpuZXcgSS5JbnZhbGlkSnNvbkVycm9yfX19LDU5Mjg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5f''@;'; put 'put ''X2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJs''@;'; put 'put ''ZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlv''@;'; put 'put ''bihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKHkoMzMwMiksWCksXyh5KDc5MjIpLFgp''@;'; put 'put ''LF8oeSgzNzkzKSxYKSxfKHkoMjQwMiksWCksXyh5KDYxMTYpLFgpLF8oeSg5ODI1KSxYKSxfKHkoOTkwKSxYKSxfKHkoMTg4NCksWCksXyh5KDQyNDMpLFgpLF8oeSgyNTcpLFgpLF8oeSgyKSxYKSxfKHkoMjYxNSksWCksXyh5KDI5MjApLFgpLF8oeSgyNDIyKSxYKSxfKHkoMzEpLFgpLF8o''@;'; put 'put ''eSg2NTE1KSxYKSxfKHkoNjQxNiksWCksXyh5KDI4MTMpLFgpLF8oeSg5ODk2KSxYKSxfKHkoNDc5OSksWCksXyh5KDQ1MTYpLFgpLF8oeSg4NDU4KSxYKSxfKHkoMzI2MCksWCl9LDQyNDM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc05vZGU9dm9pZCAwLFguaXNOb2RlPSgpPT50eXBlb2YgSTwidSImJm51bGwhPUkudmVyc2lvbnMmJm51bGwhPUkudmVyc2lvbnMubm9kZX0sMjU3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc1JlbGF0aXZlUGF0aD12b2lkIDAsWC5pc1JlbGF0aXZlUGF0aD1JPT4hIUkmJiFJLnN0YXJ0c1dpdGgoIi8iKX0sMjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''LFguaXNVcmk9dm9pZCAwLFguaXNVcmk9ST0+L15cL2ZvbGRlcnNcL2ZvbGRlcnNcLy8udGVzdChJKX0sMjYxNToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNVcmw9dm9pZCAwLFguaXNVcmw9ST0+e2Nv''@;'; put 'put ''bnN0IF89WyJodHRwOiIsImh0dHBzOiJdO3RyeXtjb25zdCBnPW5ldyBVUkwoSSk7aWYoIV8uaW5jbHVkZXMoZy5wcm90b2NvbCkpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9fSwxMjEwOmZ1bmN0aW9uKHVlLFgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fYXdh''@;'; put 'put ''aXRlcnx8ZnVuY3Rpb24oRixPLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxVKXtmdW5jdGlvbiBXKGVlKXt0cnl7cShOLm5leHQoZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBZKGVlKXt0cnl7cShOLnRocm93KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVu''@;'; put 'put ''Y3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBMKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFUpe1UoSyl9KX0oZWUudmFsdWUpLnRoZW4oVyxZKX1xKChOPU4uYXBwbHkoRixPfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgub3BlbkxvZ2luUHJvbXB0PXZvaWQgMDt2YXIgST1mdW5jdGlvbihGKXtyZXR1cm4gRi5zdHlsZXM9InNhc2pzQWRhcHRlclN0eWxlcyIsRi5vdmVybGF5PSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdEJHIixGLmRpYWxvZz0ic2Fz''@;'; put 'put ''anNBZGFwdGVyTG9naW5Qcm9tcHQiLEZ9KEl8fHt9KTtjb25zdCBfPSJzYXNqcy1hZGFwdGVyIixnPXtwb3BVcDpgJHtffXBvcFVwYCxwb3BVcEJHOmAke199cG9wVXBCR2B9O1gub3BlbkxvZ2luUHJvbXB0PSgpPT5uZXcgUHJvbWlzZShGPT55KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe2NvbnN0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtPLmlkPUkuc3R5bGVzLE8uaW5uZXJUZXh0PVA7Y29uc3Qgej1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt6LmlkPUkub3ZlcmxheSx6LmNsYXNzTGlzdC5hZGQoZy5wb3BVcEJHKTtjb25zdCBOPWRv''@;'; put 'put ''Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO04uaWQ9SS5kaWFsb2csTi5jbGFzc0xpc3QuYWRkKGcucG9wVXApO2NvbnN0IEw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaDEiKTtMLmlubmVyVGV4dD0iU2Vzc2lvbiBFeHBpcmVkISIsTi5hcHBlbmRDaGlsZChMKTtjb25zdCBLPWRvY3Vt''@;'; put 'put ''ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO1UuaW5uZXJUZXh0PSJZb3UgbmVlZCB0byByZWxvZ2luLCBjbGljayBPSyB0byBsb2dpbi4iLEsuYXBwZW5kQ2hpbGQoVSksTi5hcHBlbmRDaGlsZChLKTtjb25zdCBXPWRvY3VtZW50LmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1cuY2xhc3NMaXN0LmFkZCgiY2FuY2VsIiksVy5pbm5lclRleHQ9IkNhbmNlbCIsVy5vbmNsaWNrPSgpPT57dygpLEYoITEpfSxOLmFwcGVuZENoaWxkKFcpO2NvbnN0IFk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7WS5jbGFzc0xpc3Qu''@;'; put 'put ''YWRkKCJjb25maXJtIiksWS5pbm5lclRleHQ9Ik9rIixZLm9uY2xpY2s9KCk9Pnt3KCksRighMCl9LE4uYXBwZW5kQ2hpbGQoWSksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKE8pLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp''@;'; put 'put ''bGQoeiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChOKX0pKTtjb25zdCB3PSgpPT57T2JqZWN0LnZhbHVlcyhJKS5mb3JFYWNoKEY9Pnt2YXIgTztjb25zdCB6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEYpO251bGw9PT0oTz16Py5wYXJlbnROb2RlKXx8dm9pZCAwPT09T3x8Ty5yZW1v''@;'; put 'put ''dmVDaGlsZCh6KX0pLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImF1dG8ifSxQPWBcbi4ke2cucG9wVXBCR30gLFxuLiR7Zy5wb3BVcH0ge1xuICB6LWluZGV4OiAxMDAwMDtcbn1cbi4ke2cucG9wVXB9IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gt''@;'; put 'put ''c2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogNDAlO1xuICBsZWZ0OiA1MCU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1p''@;'; put 'put ''bHk6ICdQVCBTYW5zJywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogOTk5O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEw''@;'; put 'put ''MCU7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLiR7Zy5wb3BVcH0gPiBoMSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94''@;'; put 'put ''LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1cHg7XG4gIG1pbi1oZWlnaHQ6IDQwcHg7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9y''@;'; put 'put ''OiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBib3JkZXItd2lkdGg6IDVweDtcbiAgYm9yZGVyLWNvbG9yOiBibGFjaztcbn1cbi4ke2cucG9wVXB9ID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2Fs''@;'; put 'put ''YygxMDAlIC0xMDhweCk7XG4gIG1hcmdpbjogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1JTtcbiAgdGV4''@;'; put 'put ''dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25lO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi4ke2cucG9wVXB9ID4gZGl2ID4gc3BhbiB7XG4gIGRpc3BsYXk6IHRh''@;'; put 'put ''YmxlLWNlbGw7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAxMDhw''@;'; put 'put ''eDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuLiR7Zy5wb3BVcH0gLmNhbmNlbCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLiR7Zy5wb3BVcH0gLmNvbmZpcm0ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uJHtnLnBvcFVwfSA+IGJ1dHRvbiB7''@;'; put 'put ''XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHdpZHRoOiA1MCU7XG4gIGJvcmRlcjogMXB4IG5vbmUgI2Nj''@;'; put 'put ''YztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZDogcmdiYSgxLCAxLCAxLCAwLjIpO1xufVxuLiR7Zy5wb3BVcH0gPiBidXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiBy''@;'; put 'put ''Z2JhKDAsIDAsIDAsIDAuMik7XG59XG4uJHtnLnBvcFVwQkd9IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4g''@;'; put 'put ''IG9wYWNpdHk6IDAuOTU7XG4gIHotaW5kZXg6IDUwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoIzAzNzhjZCwgIzAxMjAzNik7XG59XG5gfSwyOTIwOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksWC5uZWVkc1JldHJ5PXZvaWQgMCxYLm5lZWRzUmV0cnk9ST0+ISFJJiYoSS5pbmNsdWRlcygnImVycm9yQ29kZSI6NDAzJykmJkkuaW5jbHVkZXMoIl9jc3JmIikmJkkuaW5jbHVkZXMoIlgtQ1NSRi1UT0tFTiIpfHxJLmluY2x1ZGVzKCcic3RhdHVzIjo0MDMnKSYmSS5pbmNsdWRl''@;'; put 'put ''cygnImVycm9yIjoiRm9yYmlkZGVuIicpfHxJLmluY2x1ZGVzKCcic3RhdHVzIjo0NDknKSYmSS5pbmNsdWRlcygiQXV0aGVudGljYXRpb24gc3VjY2VzcywgcmV0cnkgb3JpZ2luYWwgcmVxdWVzdCIpKX0sMjQyMjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VHZW5lcmF0ZWRDb2RlPXZvaWQgMCxYLnBhcnNlR2VuZXJhdGVkQ29kZT1JPT5JLnNwbGl0KCJcbiIpLmZpbHRlcih3PT53LnRyaW0oKS5zdGFydHNXaXRoKCJNUFJJTlQiKSkuam9pbigiXHJcbiIpfSwzMToodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhcnNlU2FzVml5YUxvZz12b2lkIDAsWC5wYXJzZVNhc1ZpeWFMb2c9Zz0+e2xldCBCO3RyeXtCPWcuaXRlbXM/Zy5pdGVtcy5tYXAodz0+dy5saW5lKS5q''@;'; put 'put ''b2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KGcpfWNhdGNoKHcpe0kuZXJyb3IoIkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBsb2cgcmVzcG9uc2UiLHcpLEI9Z31yZXR1cm4gQn19LDY1MTU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhcnNlU291cmNlQ29kZT12b2lkIDAsWC5wYXJzZVNvdXJjZUNvZGU9ST0+SS5zcGxpdCgiXG4iKS5maWx0ZXIoQj0+Qi50cmltKCkuc3Vic3RyaW5nKDAsMTApLnRyaW1TdGFydCgpLm1hdGNoKC9eXGQvKSkuam9pbigiXHJcbiIpfSw2''@;'; put 'put ''NDE2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihCLHcsUCxGKXtyZXR1cm4gbmV3KFB8fChQPVByb21pc2UpKShmdW5jdGlvbih6LE4pe2Z1bmN0aW9uIEwoVyl7dHJ5e1UoRi5uZXh0KFcpKX1jYXRjaChZKXtOKFkp''@;'; put 'put ''fX1mdW5jdGlvbiBLKFcpe3RyeXtVKEYudGhyb3coVykpfWNhdGNoKFkpe04oWSl9fWZ1bmN0aW9uIFUoVyl7Vy5kb25lP3ooVy52YWx1ZSk6ZnVuY3Rpb24gTyh6KXtyZXR1cm4geiBpbnN0YW5jZW9mIFA/ejpuZXcgUChmdW5jdGlvbihOKXtOKHopfSl9KFcudmFsdWUpLnRoZW4oTCxLKX1V''@;'; put 'put ''KChGPUYuYXBwbHkoQix3fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT12b2lkIDA7Y29uc3QgXz15KDU5MjgpO1gucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT0oQix3''@;'; put 'put ''LFApPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEY9Qi5zcGxpdCgvPGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweCIgc3JjPSJ8PGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweDsgYmFja2dyb3VuZC1jb2xvcjpD''@;'; put 'put ''YW52YXM7IiBzcmM9LylbMV0sTz1GP0Yuc3BsaXQoLyI+PFwvaWZyYW1lPnw+PFwvaWZyYW1lPi8pWzBdOm51bGw7aWYoIU8pdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB3ZWJvdXQgZmlsZSBVUkwuIik7cmV0dXJuIHcuZ2V0KFArTyx2b2lkIDAsInRleHQvcGxhaW4iKS50aGVu''@;'; put 'put ''KHo9PigwLF8uZ2V0VmFsaWRKc29uKSh6LnJlc3VsdCkpfSl9LDI4MTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5wYXJzZVdlYm91dFJlc3BvbnNlPXZvaWQgMDtjb25zdCBf''@;'; put 'put ''PXkoMTM5NSk7WC5wYXJzZVdlYm91dFJlc3BvbnNlPShCLHcpPT57bGV0IFA9IiI7aWYoQi5pbmNsdWRlcygiPj53ZWJvdXRCRUdJTjw8IikpdHJ5e1A9Qi5zcGxpdCgiPj53ZWJvdXRCRUdJTjw8IilbMV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRjaChGKXtpZih3KXRocm93IG5l''@;'; put 'put ''dyBfLldlYm91dFJlc3BvbnNlRXJyb3Iodyk7UD0iIixJLmVycm9yKEYpfXJldHVybiBQfX0sMTE3MDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9dm9pZCAwO2Nv''@;'; put 'put ''bnN0IHk9WyJMb2cgT2ZmIl07WC5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT1fPT57Y29uc3QgQj1fPy5tYXRjaCgvInRpdGxlIjpccz8iLio/Ii8pO2xldCB3PUI/LlswXS5zcGxpdCgiOiIpWzFdLnRyaW0oKSxQPXc/LmluZGV4T2YoIiAiKTtyZXR1cm4gdz8oeS5tYXAoRj0+e2NvbnN0IE89''@;'; put 'put ''dz8uaW5kZXhPZihGKXx8LTE7Tz4tMSYmKFA9TytGLmxlbmd0aCl9KSx3LnNsaWNlKFAsLTEpLnRyaW0oKSk6InVua25vd24ifX0sOTg5NjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguc2VyaWFsaXplPXZv''@;'; put 'put ''aWQgMCxYLnNlcmlhbGl6ZT1JPT57Y29uc3QgXz1bXTtmb3IoY29uc3QgZyBpbiBJKWlmKEkuaGFzT3duUHJvcGVydHkoZykpaWYoSVtnXWluc3RhbmNlb2YgQXJyYXkpZm9yKGxldCBCPTAsdz1JW2ddLmxlbmd0aDtCPHc7QisrKV8ucHVzaChlbmNvZGVVUklDb21wb25lbnQoZykrIj0iK2Vu''@;'; put 'put ''Y29kZVVSSUNvbXBvbmVudChJW2ddW0JdKSk7ZWxzZSBfLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGcpKyI9IitlbmNvZGVVUklDb21wb25lbnQoSVtnXSkpO3JldHVybiBfLmpvaW4oIiYiKX19LDQ3OTk6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJf''@;'; put 'put ''X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnNwbGl0Q2h1bmtzPXZvaWQgMCxYLnNwbGl0Q2h1bmtzPUk9Pntjb25zdCBnPU1hdGguY2VpbChJLmxlbmd0aC8xNmUzKSxCPW5ldyBBcnJheShnKTtmb3IobGV0IHc9MCxQPTA7dzxnOysrdyxQKz0xNmUzKUJbd109SS5zdWJzdHIoUCwxNmUzKTty''@;'; put 'put ''ZXR1cm4gQn19LDQ1MTY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnZhbGlkYXRlSW5wdXQ9WC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1YLk1PUkVfSU5GTz12b2lkIDAsWC5NT1JFX0lORk89IkZvciBt''@;'; put 'put ''b3JlIGluZm8gc2VlIGh0dHBzOi8vc2FzanMuaW8vc2FzanMtYWRhcHRlci8jcmVxdWVzdC1yZXNwb25zZSIsWC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1gUGFyYW1ldGVyIGRhdGEgY29udGFpbnMgaW52YWxpZCB0YWJsZSBzdHJ1Y3R1cmUuICR7WC5NT1JFX0lORk99YCxYLnZhbGlkYXRl''@;'; put 'put ''SW5wdXQ9Xz0+e2lmKG51bGw9PT1fKXJldHVybntzdGF0dXM6ITAsbXNnOiIifTtpZigib2JqZWN0IiE9PUkoXykpcmV0dXJue3N0YXR1czohMSxtc2c6WC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07Y29uc3QgZz1CPT5CLm1hdGNoKC9eXCQuKi8pJiZPYmplY3Qua2V5cyhfKS5pbmNsdWRl''@;'; put 'put ''cyhCLnJlcGxhY2UoL15cJC8sIiIpKTtmb3IoY29uc3QgQiBpbiBfKXtpZighQi5tYXRjaCgvXlthLXpBLVpfXS8pJiYhZyhCKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiRmlyc3QgbGV0dGVyIG9mIHRhYmxlIHNob3VsZCBiZSBhbHBoYWJldCBvciB1bmRlcnNjb3JlLiJ9O2lmKCFCLm1hdGNo''@;'; put 'put ''KC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvKSYmIWcoQikpcmV0dXJue3N0YXR1czohMSxtc2c6IlRhYmxlIG5hbWUgc2hvdWxkIGJlIGFscGhhbnVtZXJpYy4ifTtpZihCLmxlbmd0aD4zMilyZXR1cm57c3RhdHVzOiExLG1zZzoiTWF4aW11bSBsZW5ndGggZm9yIHRhYmxlIG5hbWUgY291''@;'; put 'put ''bGQgYmUgMzIgY2hhcmFjdGVycy4ifTtpZigiQXJyYXkiIT09SShfW0JdKSYmIWcoQikpcmV0dXJue3N0YXR1czohMSxtc2c6WC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07aWYoQXJyYXkuaXNBcnJheShfW0JdKSlmb3IoY29uc3QgdyBvZiBfW0JdKXtpZigib2JqZWN0IiE9PUkodykpcmV0''@;'; put 'put ''dXJue3N0YXR1czohMSxtc2c6YFRhYmxlICR7Qn0gY29udGFpbnMgaW52YWxpZCBzdHJ1Y3R1cmUuICR7WC5NT1JFX0lORk99YH07e2NvbnN0IFA9T2JqZWN0LmtleXModyk7Zm9yKGNvbnN0IEYgb2YgUClpZih2b2lkIDA9PT13W0ZdKXJldHVybntzdGF0dXM6ITEsbXNnOmBBIHJvdyBpbiB0''@;'; put 'put ''YWJsZSAke0J9IGNvbnRhaW5zIGludmFsaWQgdmFsdWUuIENhbid0IGFzc2lnbiB1bmRlZmluZWQgdG8gJHtGfS5gfX19fXJldHVybntzdGF0dXM6ITAsbXNnOiIifX07Y29uc3QgST1fPT5BcnJheS5pc0FycmF5KF8pPyJBcnJheSI6dHlwZW9mIF99LDg5ODE6KHVlLFgpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO1guZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKHkpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uSSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIElbSS5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChfLGcpPT57SS5wdXNoKChCLHcpPT5udWxsIT1CP2coQik6''@;'; put 'put ''Xyh3KSkseS5hcHBseSh0aGlzLEkpfSk7eS5hcHBseSh0aGlzLEkpfSwibmFtZSIse3ZhbHVlOnkubmFtZX0pfSxYLmZyb21Qcm9taXNlPWZ1bmN0aW9uKHkpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uSSl7Y29uc3QgXz1JW0kubGVuZ3RoLTFdO2lmKCJmdW5j''@;'; put 'put ''dGlvbiIhPXR5cGVvZiBfKXJldHVybiB5LmFwcGx5KHRoaXMsSSk7SS5wb3AoKSx5LmFwcGx5KHRoaXMsSSkudGhlbihnPT5fKG51bGwsZyksXyl9LCJuYW1lIix7dmFsdWU6eS5uYW1lfSl9fSw0NTY0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzQxOCksXz15KDcxMjkpLGc9''@;'; put 'put ''L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxCPS9bXG5cclx0XS9nLHc9L15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcL1wvLyxQPS86XGQrJC8sRj0vXihbYS16XVthLXowLTkuKy1dKjopPyhcL1wv''@;'; put 'put ''KT8oW1xcL10rKT8oW1xTXHNdKikvaSxPPS9eW2EtekEtWl06LztmdW5jdGlvbiB6KG5lKXtyZXR1cm4obmV8fCIiKS50b1N0cmluZygpLnJlcGxhY2UoZywiIil9dmFyIE49W1siIyIsImhhc2giXSxbIj8iLCJxdWVyeSJdLGZ1bmN0aW9uKGllLGxlKXtyZXR1cm4gVShsZS5wcm90b2NvbCk/''@;'; put 'put ''aWUucmVwbGFjZSgvXFwvZywiLyIpOmllfSxbIi8iLCJwYXRobmFtZSJdLFsiQCIsImF1dGgiLDFdLFtOYU4sImhvc3QiLHZvaWQgMCwxLDFdLFsvOihcZCopJC8sInBvcnQiLHZvaWQgMCwxXSxbTmFOLCJob3N0bmFtZSIsdm9pZCAwLDEsMV1dLEw9e2hhc2g6MSxxdWVyeToxfTtmdW5jdGlv''@;'; put 'put ''biBLKG5lKXt2YXIgaWU7aWU9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiB5Lmc8InUiP3kuZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTt2YXIgVGUsbWU9e30sX2U9dHlwZW9mKG5lPW5lfHxpZS5sb2NhdGlvbnx8e30pO2lmKCJibG9iOiI9PT1uZS5wcm90b2NvbCltZT1uZXcg''@;'; put 'put ''cSh1bmVzY2FwZShuZS5wYXRobmFtZSkse30pO2Vsc2UgaWYoInN0cmluZyI9PT1fZSlmb3IoVGUgaW4gbWU9bmV3IHEobmUse30pLEwpZGVsZXRlIG1lW1RlXTtlbHNlIGlmKCJvYmplY3QiPT09X2Upe2ZvcihUZSBpbiBuZSlUZSBpbiBMfHwobWVbVGVdPW5lW1RlXSk7dm9pZCAwPT09bWUu''@;'; put 'put ''c2xhc2hlcyYmKG1lLnNsYXNoZXM9dy50ZXN0KG5lLmhyZWYpKX1yZXR1cm4gbWV9ZnVuY3Rpb24gVShuZSl7cmV0dXJuImZpbGU6Ij09PW5lfHwiZnRwOiI9PT1uZXx8Imh0dHA6Ij09PW5lfHwiaHR0cHM6Ij09PW5lfHwid3M6Ij09PW5lfHwid3NzOiI9PT1uZX1mdW5jdGlvbiBXKG5lLGll''@;'; put 'put ''KXtuZT0obmU9eihuZSkpLnJlcGxhY2UoQiwiIiksaWU9aWV8fHt9O3ZhciBqZSxsZT1GLmV4ZWMobmUpLG1lPWxlWzFdP2xlWzFdLnRvTG93ZXJDYXNlKCk6IiIsX2U9ISFsZVsyXSxUZT0hIWxlWzNdLFNlPTA7cmV0dXJuIF9lP1RlPyhqZT1sZVsyXStsZVszXStsZVs0XSxTZT1sZVsyXS5s''@;'; put 'put ''ZW5ndGgrbGVbM10ubGVuZ3RoKTooamU9bGVbMl0rbGVbNF0sU2U9bGVbMl0ubGVuZ3RoKTpUZT8oamU9bGVbM10rbGVbNF0sU2U9bGVbM10ubGVuZ3RoKTpqZT1sZVs0XSwiZmlsZToiPT09bWU/U2U+PTImJihqZT1qZS5zbGljZSgyKSk6VShtZSk/amU9bGVbNF06bWU/X2UmJihqZT1qZS5z''@;'; put 'put ''bGljZSgyKSk6U2U+PTImJlUoaWUucHJvdG9jb2wpJiYoamU9bGVbNF0pLHtwcm90b2NvbDptZSxzbGFzaGVzOl9lfHxVKG1lKSxzbGFzaGVzQ291bnQ6U2UscmVzdDpqZX19ZnVuY3Rpb24gcShuZSxpZSxsZSl7aWYobmU9KG5lPXoobmUpKS5yZXBsYWNlKEIsIiIpLCEodGhpcyBpbnN0YW5j''@;'; put 'put ''ZW9mIHEpKXJldHVybiBuZXcgcShuZSxpZSxsZSk7dmFyIG1lLF9lLFRlLFNlLGplLFYscD1OLnNsaWNlKCksYj10eXBlb2YgaWUseD10aGlzLEM9MDtmb3IoIm9iamVjdCIhPT1iJiYic3RyaW5nIiE9PWImJihsZT1pZSxpZT1udWxsKSxsZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGxlJiYobGU9''@;'; put 'put ''Xy5wYXJzZSksbWU9IShfZT1XKG5lfHwiIixpZT1LKGllKSkpLnByb3RvY29sJiYhX2Uuc2xhc2hlcyx4LnNsYXNoZXM9X2Uuc2xhc2hlc3x8bWUmJmllLnNsYXNoZXMseC5wcm90b2NvbD1fZS5wcm90b2NvbHx8aWUucHJvdG9jb2x8fCIiLG5lPV9lLnJlc3QsKCJmaWxlOiI9PT1fZS5wcm90''@;'; put 'put ''b2NvbCYmKDIhPT1fZS5zbGFzaGVzQ291bnR8fE8udGVzdChuZSkpfHwhX2Uuc2xhc2hlcyYmKF9lLnByb3RvY29sfHxfZS5zbGFzaGVzQ291bnQ8Mnx8IVUoeC5wcm90b2NvbCkpKSYmKHBbM109Wy8oLiopLywicGF0aG5hbWUiXSk7QzxwLmxlbmd0aDtDKyspImZ1bmN0aW9uIiE9dHlwZW9m''@;'; put 'put ''KFNlPXBbQ10pPyhWPVNlWzFdLChUZT1TZVswXSkhPVRlP3hbVl09bmU6InN0cmluZyI9PXR5cGVvZiBUZT9+KGplPSJAIj09PVRlP25lLmxhc3RJbmRleE9mKFRlKTpuZS5pbmRleE9mKFRlKSkmJigibnVtYmVyIj09dHlwZW9mIFNlWzJdPyh4W1ZdPW5lLnNsaWNlKDAsamUpLG5lPW5lLnNs''@;'; put 'put ''aWNlKGplK1NlWzJdKSk6KHhbVl09bmUuc2xpY2UoamUpLG5lPW5lLnNsaWNlKDAsamUpKSk6KGplPVRlLmV4ZWMobmUpKSYmKHhbVl09amVbMV0sbmU9bmUuc2xpY2UoMCxqZS5pbmRleCkpLHhbVl09eFtWXXx8bWUmJlNlWzNdJiZpZVtWXXx8IiIsU2VbNF0mJih4W1ZdPXhbVl0udG9Mb3dl''@;'; put 'put ''ckNhc2UoKSkpOm5lPVNlKG5lLHgpO2xlJiYoeC5xdWVyeT1sZSh4LnF1ZXJ5KSksbWUmJmllLnNsYXNoZXMmJiIvIiE9PXgucGF0aG5hbWUuY2hhckF0KDApJiYoIiIhPT14LnBhdGhuYW1lfHwiIiE9PWllLnBhdGhuYW1lKSYmKHgucGF0aG5hbWU9ZnVuY3Rpb24gWShuZSxpZSl7aWYoIiI9''@;'; put 'put ''PT1uZSlyZXR1cm4gaWU7Zm9yKHZhciBsZT0oaWV8fCIvIikuc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5jb25jYXQobmUuc3BsaXQoIi8iKSksbWU9bGUubGVuZ3RoLF9lPWxlW21lLTFdLFRlPSExLFNlPTA7bWUtLTspIi4iPT09bGVbbWVdP2xlLnNwbGljZShtZSwxKToiLi4iPT09bGVbbWVd''@;'; put 'put ''PyhsZS5zcGxpY2UobWUsMSksU2UrKyk6U2UmJigwPT09bWUmJihUZT0hMCksbGUuc3BsaWNlKG1lLDEpLFNlLS0pO3JldHVybiBUZSYmbGUudW5zaGlmdCgiIiksKCIuIj09PV9lfHwiLi4iPT09X2UpJiZsZS5wdXNoKCIiKSxsZS5qb2luKCIvIil9KHgucGF0aG5hbWUsaWUucGF0aG5hbWUp''@;'; put 'put ''KSwiLyIhPT14LnBhdGhuYW1lLmNoYXJBdCgwKSYmVSh4LnByb3RvY29sKSYmKHgucGF0aG5hbWU9Ii8iK3gucGF0aG5hbWUpLEkoeC5wb3J0LHgucHJvdG9jb2wpfHwoeC5ob3N0PXguaG9zdG5hbWUseC5wb3J0PSIiKSx4LnVzZXJuYW1lPXgucGFzc3dvcmQ9IiIseC5hdXRoJiYofihqZT14''@;'; put 'put ''LmF1dGguaW5kZXhPZigiOiIpKT8oeC51c2VybmFtZT14LmF1dGguc2xpY2UoMCxqZSkseC51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHgudXNlcm5hbWUpKSx4LnBhc3N3b3JkPXguYXV0aC5zbGljZShqZSsxKSx4LnBhc3N3b3JkPWVuY29kZVVSSUNv''@;'; put 'put ''bXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC5wYXNzd29yZCkpKTp4LnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC5hdXRoKSkseC5hdXRoPXgucGFzc3dvcmQ/eC51c2VybmFtZSsiOiIreC5wYXNzd29yZDp4LnVzZXJuYW1lKSx4Lm9yaWdpbj0i''@;'; put 'put ''ZmlsZToiIT09eC5wcm90b2NvbCYmVSh4LnByb3RvY29sKSYmeC5ob3N0P3gucHJvdG9jb2wrIi8vIit4Lmhvc3Q6Im51bGwiLHguaHJlZj14LnRvU3RyaW5nKCl9cS5wcm90b3R5cGU9e3NldDpmdW5jdGlvbiBlZShuZSxpZSxsZSl7dmFyIG1lPXRoaXM7c3dpdGNoKG5lKXtjYXNlInF1ZXJ5''@;'; put 'put ''Ijoic3RyaW5nIj09dHlwZW9mIGllJiZpZS5sZW5ndGgmJihpZT0obGV8fF8ucGFyc2UpKGllKSksbWVbbmVdPWllO2JyZWFrO2Nhc2UicG9ydCI6bWVbbmVdPWllLEkoaWUsbWUucHJvdG9jb2wpP2llJiYobWUuaG9zdD1tZS5ob3N0bmFtZSsiOiIraWUpOihtZS5ob3N0PW1lLmhvc3RuYW1l''@;'; put 'put ''LG1lW25lXT0iIik7YnJlYWs7Y2FzZSJob3N0bmFtZSI6bWVbbmVdPWllLG1lLnBvcnQmJihpZSs9IjoiK21lLnBvcnQpLG1lLmhvc3Q9aWU7YnJlYWs7Y2FzZSJob3N0IjptZVtuZV09aWUsUC50ZXN0KGllKT8oaWU9aWUuc3BsaXQoIjoiKSxtZS5wb3J0PWllLnBvcCgpLG1lLmhvc3RuYW1l''@;'; put 'put ''PWllLmpvaW4oIjoiKSk6KG1lLmhvc3RuYW1lPWllLG1lLnBvcnQ9IiIpO2JyZWFrO2Nhc2UicHJvdG9jb2wiOm1lLnByb3RvY29sPWllLnRvTG93ZXJDYXNlKCksbWUuc2xhc2hlcz0hbGU7YnJlYWs7Y2FzZSJwYXRobmFtZSI6Y2FzZSJoYXNoIjppZihpZSl7dmFyIF9lPSJwYXRobmFtZSI9''@;'; put 'put ''PT1uZT8iLyI6IiMiO21lW25lXT1pZS5jaGFyQXQoMCkhPT1fZT9fZStpZTppZX1lbHNlIG1lW25lXT1pZTticmVhaztjYXNlInVzZXJuYW1lIjpjYXNlInBhc3N3b3JkIjptZVtuZV09ZW5jb2RlVVJJQ29tcG9uZW50KGllKTticmVhaztjYXNlImF1dGgiOnZhciBUZT1pZS5pbmRleE9mKCI6''@;'; put 'put ''Iik7flRlPyhtZS51c2VybmFtZT1pZS5zbGljZSgwLFRlKSxtZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KG1lLnVzZXJuYW1lKSksbWUucGFzc3dvcmQ9aWUuc2xpY2UoVGUrMSksbWUucGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVS''@;'; put 'put ''SUNvbXBvbmVudChtZS5wYXNzd29yZCkpKTptZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGllKSl9Zm9yKHZhciBTZT0wO1NlPE4ubGVuZ3RoO1NlKyspe3ZhciBqZT1OW1NlXTtqZVs0XSYmKG1lW2plWzFdXT1tZVtqZVsxXV0udG9Mb3dlckNhc2Uo''@;'; put 'put ''KSl9cmV0dXJuIG1lLmF1dGg9bWUucGFzc3dvcmQ/bWUudXNlcm5hbWUrIjoiK21lLnBhc3N3b3JkOm1lLnVzZXJuYW1lLG1lLm9yaWdpbj0iZmlsZToiIT09bWUucHJvdG9jb2wmJlUobWUucHJvdG9jb2wpJiZtZS5ob3N0P21lLnByb3RvY29sKyIvLyIrbWUuaG9zdDoibnVsbCIsbWUuaHJl''@;'; put 'put ''Zj1tZS50b1N0cmluZygpLG1lfSx0b1N0cmluZzpmdW5jdGlvbiBKKG5lKXsoIW5lfHwiZnVuY3Rpb24iIT10eXBlb2YgbmUpJiYobmU9Xy5zdHJpbmdpZnkpO3ZhciBpZSxsZT10aGlzLG1lPWxlLmhvc3QsX2U9bGUucHJvdG9jb2w7X2UmJiI6IiE9PV9lLmNoYXJBdChfZS5sZW5ndGgtMSkm''@;'; put 'put ''JihfZSs9IjoiKTt2YXIgVGU9X2UrKGxlLnByb3RvY29sJiZsZS5zbGFzaGVzfHxVKGxlLnByb3RvY29sKT8iLy8iOiIiKTtyZXR1cm4gbGUudXNlcm5hbWU/KFRlKz1sZS51c2VybmFtZSxsZS5wYXNzd29yZCYmKFRlKz0iOiIrbGUucGFzc3dvcmQpLFRlKz0iQCIpOmxlLnBhc3N3b3JkPyhU''@;'; put 'put ''ZSs9IjoiK2xlLnBhc3N3b3JkLFRlKz0iQCIpOiJmaWxlOiIhPT1sZS5wcm90b2NvbCYmVShsZS5wcm90b2NvbCkmJiFtZSYmIi8iIT09bGUucGF0aG5hbWUmJihUZSs9IkAiKSwoIjoiPT09bWVbbWUubGVuZ3RoLTFdfHxQLnRlc3QobGUuaG9zdG5hbWUpJiYhbGUucG9ydCkmJihtZSs9Ijoi''@;'; put 'put ''KSxUZSs9bWUrbGUucGF0aG5hbWUsKGllPSJvYmplY3QiPT10eXBlb2YgbGUucXVlcnk/bmUobGUucXVlcnkpOmxlLnF1ZXJ5KSYmKFRlKz0iPyIhPT1pZS5jaGFyQXQoMCk/Ij8iK2llOmllKSxsZS5oYXNoJiYoVGUrPWxlLmhhc2gpLFRlfX0scS5leHRyYWN0UHJvdG9jb2w9VyxxLmxvY2F0''@;'; put 'put ''aW9uPUsscS50cmltTGVmdD16LHEucXM9Xyx1ZS5leHBvcnRzPXF9LDQ5Mjc6KHVlLFgseSk9Pnt2YXIgST15KDUxMDgpO2Z1bmN0aW9uIGcoQil7dHJ5e2lmKCF5LmcubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciB3PXkuZy5sb2NhbFN0b3JhZ2VbQl07cmV0dXJu''@;'; put 'put ''IG51bGwhPXcmJiJ0cnVlIj09PVN0cmluZyh3KS50b0xvd2VyQ2FzZSgpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gXyhCLHcpe2lmKGcoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gQjt2YXIgUD0hMTtyZXR1cm4gZnVuY3Rpb24gRigpe2lmKCFQKXtpZihnKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKHcpO2coInRyYWNlRGVwcmVjYXRpb24iKT9JLnRyYWNlKHcpOkkud2Fybih3KSxQPSEwfXJldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwzODQ6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKHkpe3JldHVybiB5JiYib2JqZWN0Ij09dHlwZW9mIHkmJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiB5LmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LnJlYWRVSW50OH19LDU5NTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyNTg0KSxfPXkoODY2MiksZz15KDY0MzApLEI9eSg1NjkyKTtmdW5jdGlvbiB3''@;'; put 'put ''KEFlKXtyZXR1cm4gQWUuY2FsbC5iaW5kKEFlKX12YXIgUD10eXBlb2YgQmlnSW50PCJ1IixGPXR5cGVvZiBTeW1ib2w8InUiLE89dyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSx6PXcoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mKSxOPXcoU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mKSxM''@;'; put 'put ''PXcoQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZik7aWYoUCl2YXIgSz13KEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZik7aWYoRil2YXIgVT13KFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7ZnVuY3Rpb24gVyhBZSxfdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBBZSlyZXR1cm4hMTt0cnl7cmV0''@;'; put 'put ''dXJuIF90KEFlKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gcChBZSl7cmV0dXJuIltvYmplY3QgTWFwXSI9PT1PKEFlKX1mdW5jdGlvbiB4KEFlKXtyZXR1cm4iW29iamVjdCBTZXRdIj09PU8oQWUpfWZ1bmN0aW9uIFQoQWUpe3JldHVybiJbb2JqZWN0IFdlYWtNYXBdIj09PU8oQWUp''@;'; put 'put ''fWZ1bmN0aW9uIGooQWUpe3JldHVybiJbb2JqZWN0IFdlYWtTZXRdIj09PU8oQWUpfWZ1bmN0aW9uIG0oQWUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1PKEFlKX1mdW5jdGlvbiBBKEFlKXtyZXR1cm4hKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpJiYobS53b3JraW5nP20oQWUp''@;'; put 'put ''OkFlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpfWZ1bmN0aW9uIGFlKEFlKXtyZXR1cm4iW29iamVjdCBEYXRhVmlld10iPT09TyhBZSl9ZnVuY3Rpb24gdGUoQWUpe3JldHVybiEodHlwZW9mIERhdGFWaWV3PiJ1IikmJihhZS53b3JraW5nP2FlKEFlKTpBZSBpbnN0YW5jZW9mIERhdGFWaWV3''@;'; put 'put ''KX1YLmlzQXJndW1lbnRzT2JqZWN0PUksWC5pc0dlbmVyYXRvckZ1bmN0aW9uPV8sWC5pc1R5cGVkQXJyYXk9QixYLmlzUHJvbWlzZT1mdW5jdGlvbiBZKEFlKXtyZXR1cm4gdHlwZW9mIFByb21pc2U8InUiJiZBZSBpbnN0YW5jZW9mIFByb21pc2V8fG51bGwhPT1BZSYmIm9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBBZSYmImZ1bmN0aW9uIj09dHlwZW9mIEFlLnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBBZS5jYXRjaH0sWC5pc0FycmF5QnVmZmVyVmlldz1mdW5jdGlvbiBxKEFlKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlz''@;'; put 'put ''VmlldyhBZSk6QihBZSl8fHRlKEFlKX0sWC5pc1VpbnQ4QXJyYXk9ZnVuY3Rpb24gZWUoQWUpe3JldHVybiJVaW50OEFycmF5Ij09PWcoQWUpfSxYLmlzVWludDhDbGFtcGVkQXJyYXk9ZnVuY3Rpb24gSihBZSl7cmV0dXJuIlVpbnQ4Q2xhbXBlZEFycmF5Ij09PWcoQWUpfSxYLmlzVWludDE2''@;'; put 'put ''QXJyYXk9ZnVuY3Rpb24gbmUoQWUpe3JldHVybiJVaW50MTZBcnJheSI9PT1nKEFlKX0sWC5pc1VpbnQzMkFycmF5PWZ1bmN0aW9uIGllKEFlKXtyZXR1cm4iVWludDMyQXJyYXkiPT09ZyhBZSl9LFguaXNJbnQ4QXJyYXk9ZnVuY3Rpb24gbGUoQWUpe3JldHVybiJJbnQ4QXJyYXkiPT09ZyhB''@;'; put 'put ''ZSl9LFguaXNJbnQxNkFycmF5PWZ1bmN0aW9uIG1lKEFlKXtyZXR1cm4iSW50MTZBcnJheSI9PT1nKEFlKX0sWC5pc0ludDMyQXJyYXk9ZnVuY3Rpb24gX2UoQWUpe3JldHVybiJJbnQzMkFycmF5Ij09PWcoQWUpfSxYLmlzRmxvYXQzMkFycmF5PWZ1bmN0aW9uIFRlKEFlKXtyZXR1cm4iRmxv''@;'; put 'put ''YXQzMkFycmF5Ij09PWcoQWUpfSxYLmlzRmxvYXQ2NEFycmF5PWZ1bmN0aW9uIFNlKEFlKXtyZXR1cm4iRmxvYXQ2NEFycmF5Ij09PWcoQWUpfSxYLmlzQmlnSW50NjRBcnJheT1mdW5jdGlvbiBqZShBZSl7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT09ZyhBZSl9LFguaXNCaWdVaW50NjRBcnJh''@;'; put 'put ''eT1mdW5jdGlvbiBWKEFlKXtyZXR1cm4iQmlnVWludDY0QXJyYXkiPT09ZyhBZSl9LHAud29ya2luZz10eXBlb2YgTWFwPCJ1IiYmcChuZXcgTWFwKSxYLmlzTWFwPWZ1bmN0aW9uIGIoQWUpe3JldHVybiEodHlwZW9mIE1hcD4idSIpJiYocC53b3JraW5nP3AoQWUpOkFlIGluc3RhbmNlb2Yg''@;'; put 'put ''TWFwKX0seC53b3JraW5nPXR5cGVvZiBTZXQ8InUiJiZ4KG5ldyBTZXQpLFguaXNTZXQ9ZnVuY3Rpb24gQyhBZSl7cmV0dXJuISh0eXBlb2YgU2V0PiJ1IikmJih4Lndvcmtpbmc/eChBZSk6QWUgaW5zdGFuY2VvZiBTZXQpfSxULndvcmtpbmc9dHlwZW9mIFdlYWtNYXA8InUiJiZUKG5ldyBX''@;'; put 'put ''ZWFrTWFwKSxYLmlzV2Vha01hcD1mdW5jdGlvbiBIKEFlKXtyZXR1cm4hKHR5cGVvZiBXZWFrTWFwPiJ1IikmJihULndvcmtpbmc/VChBZSk6QWUgaW5zdGFuY2VvZiBXZWFrTWFwKX0sai53b3JraW5nPXR5cGVvZiBXZWFrU2V0PCJ1IiYmaihuZXcgV2Vha1NldCksWC5pc1dlYWtTZXQ9ZnVu''@;'; put 'put ''Y3Rpb24gRShBZSl7cmV0dXJuIGooQWUpfSxtLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmbShuZXcgQXJyYXlCdWZmZXIpLFguaXNBcnJheUJ1ZmZlcj1BLGFlLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIERhdGFWaWV3PCJ1IiYmYWUobmV3IERhdGFW''@;'; put 'put ''aWV3KG5ldyBBcnJheUJ1ZmZlcigxKSwwLDEpKSxYLmlzRGF0YVZpZXc9dGU7dmFyIHNlPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/U2hhcmVkQXJyYXlCdWZmZXI6dm9pZCAwO2Z1bmN0aW9uIHdlKEFlKXtyZXR1cm4iW29iamVjdCBTaGFyZWRBcnJheUJ1ZmZlcl0iPT09TyhBZSl9''@;'; put 'put ''ZnVuY3Rpb24gVWUoQWUpe3JldHVybiEodHlwZW9mIHNlPiJ1IikmJih0eXBlb2Ygd2Uud29ya2luZz4idSImJih3ZS53b3JraW5nPXdlKG5ldyBzZSkpLHdlLndvcmtpbmc/d2UoQWUpOkFlIGluc3RhbmNlb2Ygc2UpfWZ1bmN0aW9uIHplKEFlKXtyZXR1cm4gVyhBZSx6KX1mdW5jdGlvbiBE''@;'; put 'put ''ZShBZSl7cmV0dXJuIFcoQWUsTil9ZnVuY3Rpb24gRmUoQWUpe3JldHVybiBXKEFlLEwpfWZ1bmN0aW9uIE9lKEFlKXtyZXR1cm4gUCYmVyhBZSxLKX1mdW5jdGlvbiBJZShBZSl7cmV0dXJuIEYmJlcoQWUsVSl9WC5pc1NoYXJlZEFycmF5QnVmZmVyPVVlLFguaXNBc3luY0Z1bmN0aW9uPWZ1''@;'; put 'put ''bmN0aW9uIEplKEFlKXtyZXR1cm4iW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PT1PKEFlKX0sWC5pc01hcEl0ZXJhdG9yPWZ1bmN0aW9uIG90KEFlKXtyZXR1cm4iW29iamVjdCBNYXAgSXRlcmF0b3JdIj09PU8oQWUpfSxYLmlzU2V0SXRlcmF0b3I9ZnVuY3Rpb24geGUoQWUpe3JldHVybiJb''@;'; put 'put ''b2JqZWN0IFNldCBJdGVyYXRvcl0iPT09TyhBZSl9LFguaXNHZW5lcmF0b3JPYmplY3Q9ZnVuY3Rpb24gdmUoQWUpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0iPT09TyhBZSl9LFguaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlPWZ1bmN0aW9uIFhlKEFlKXtyZXR1cm4iW29iamVjdCBX''@;'; put 'put ''ZWJBc3NlbWJseS5Nb2R1bGVdIj09PU8oQWUpfSxYLmlzTnVtYmVyT2JqZWN0PXplLFguaXNTdHJpbmdPYmplY3Q9RGUsWC5pc0Jvb2xlYW5PYmplY3Q9RmUsWC5pc0JpZ0ludE9iamVjdD1PZSxYLmlzU3ltYm9sT2JqZWN0PUllLFguaXNCb3hlZFByaW1pdGl2ZT1mdW5jdGlvbiBWZShBZSl7''@;'; put 'put ''cmV0dXJuIHplKEFlKXx8RGUoQWUpfHxGZShBZSl8fE9lKEFlKXx8SWUoQWUpfSxYLmlzQW55QXJyYXlCdWZmZXI9ZnVuY3Rpb24ga2UoQWUpe3JldHVybiB0eXBlb2YgVWludDhBcnJheTwidSImJihBKEFlKXx8VWUoQWUpKX0sWyJpc1Byb3h5IiwiaXNFeHRlcm5hbCIsImlzTW9kdWxlTmFt''@;'; put 'put ''ZXNwYWNlT2JqZWN0Il0uZm9yRWFjaChmdW5jdGlvbihBZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsQWUse2VudW1lcmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoQWUrIiBpcyBub3Qgc3VwcG9ydGVkIGluIHVzZXJsYW5kIil9fSl9KX0sOTUzOToodWUsWCx5''@;'; put 'put ''KT0+e3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN8fGZ1bmN0aW9uKHdlKXtmb3IodmFyIFVlPU9iamVjdC5rZXlzKHdlKSxKZT17fSxvdD0wO290PFVlLmxlbmd0aDtvdCsrKUplW1VlW290XV09T2JqZWN0LmdldE93blByb3BlcnR5''@;'; put 'put ''RGVzY3JpcHRvcih3ZSxVZVtvdF0pO3JldHVybiBKZX0sQj0vJVtzZGolXS9nO1guZm9ybWF0PWZ1bmN0aW9uKHNlKXtpZighX2Uoc2UpKXtmb3IodmFyIHdlPVtdLFVlPTA7VWU8YXJndW1lbnRzLmxlbmd0aDtVZSsrKXdlLnB1c2goTyhhcmd1bWVudHNbVWVdKSk7cmV0dXJuIHdlLmpvaW4o''@;'; put 'put ''IiAiKX1VZT0xO2Zvcih2YXIgSmU9YXJndW1lbnRzLG90PUplLmxlbmd0aCx4ZT1TdHJpbmcoc2UpLnJlcGxhY2UoQixmdW5jdGlvbihYZSl7aWYoIiUlIj09PVhlKXJldHVybiIlIjtpZihVZT49b3QpcmV0dXJuIFhlO3N3aXRjaChYZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhKZVtVZSsr''@;'; put 'put ''XSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihKZVtVZSsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShKZVtVZSsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIFhlfX0pLHZlPUplW1VlXTtVZTxvdDt2ZT1KZVsrK1VlXSlpZSh2ZSl8fCFW''@;'; put 'put ''KHZlKT94ZSs9IiAiK3ZlOnhlKz0iICIrTyh2ZSk7cmV0dXJuIHhlfSxYLmRlcHJlY2F0ZT1mdW5jdGlvbihzZSx3ZSl7aWYodHlwZW9mIEk8InUiJiYhMD09PUkubm9EZXByZWNhdGlvbilyZXR1cm4gc2U7aWYodHlwZW9mIEk+InUiKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBYLmRlcHJl''@;'; put 'put ''Y2F0ZShzZSx3ZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgVWU9ITE7cmV0dXJuIGZ1bmN0aW9uIEplKCl7aWYoIVVlKXtpZihJLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKHdlKTtJLnRyYWNlRGVwcmVjYXRpb24/Xy50cmFjZSh3ZSk6Xy5lcnJvcih3ZSksVWU9ITB9''@;'; put 'put ''cmV0dXJuIHNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciB3PXt9LFA9L14kLztpZihJLmVudi5OT0RFX0RFQlVHKXt2YXIgRj1JLmVudi5OT0RFX0RFQlVHO0Y9Ri5yZXBsYWNlKC9bfFxce30oKVtcXV4kKz8uXS9nLCJcXCQmIikucmVwbGFjZSgvXCovZywiLioiKS5yZXBsYWNlKC8s''@;'; put 'put ''L2csIiR8XiIpLnRvVXBwZXJDYXNlKCksUD1uZXcgUmVnRXhwKCJeIitGKyIkIiwiaSIpfWZ1bmN0aW9uIE8oc2Usd2Upe3ZhciBVZT17c2VlbjpbXSxzdHlsaXplOk59O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoVWUuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''Pj00JiYoVWUuY29sb3JzPWFyZ3VtZW50c1szXSksbmUod2UpP1VlLnNob3dIaWRkZW49d2U6d2UmJlguX2V4dGVuZChVZSx3ZSksU2UoVWUuc2hvd0hpZGRlbikmJihVZS5zaG93SGlkZGVuPSExKSxTZShVZS5kZXB0aCkmJihVZS5kZXB0aD0yKSxTZShVZS5jb2xvcnMpJiYoVWUuY29sb3Jz''@;'; put 'put ''PSExKSxTZShVZS5jdXN0b21JbnNwZWN0KSYmKFVlLmN1c3RvbUluc3BlY3Q9ITApLFVlLmNvbG9ycyYmKFVlLnN0eWxpemU9eiksSyhVZSxzZSxVZS5kZXB0aCl9ZnVuY3Rpb24geihzZSx3ZSl7dmFyIFVlPU8uc3R5bGVzW3dlXTtyZXR1cm4gVWU/Ilx4MWJbIitPLmNvbG9yc1tVZV1bMF0r''@;'; put 'put ''Im0iK3NlKyJceDFiWyIrTy5jb2xvcnNbVWVdWzFdKyJtIjpzZX1mdW5jdGlvbiBOKHNlLHdlKXtyZXR1cm4gc2V9ZnVuY3Rpb24gSyhzZSx3ZSxVZSl7aWYoc2UuY3VzdG9tSW5zcGVjdCYmd2UmJngod2UuaW5zcGVjdCkmJndlLmluc3BlY3QhPT1YLmluc3BlY3QmJighd2UuY29uc3RydWN0''@;'; put 'put ''b3J8fHdlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PXdlKSl7dmFyIEplPXdlLmluc3BlY3QoVWUsc2UpO3JldHVybiBfZShKZSl8fChKZT1LKHNlLEplLFVlKSksSmV9dmFyIG90PWZ1bmN0aW9uIFUoc2Usd2Upe2lmKFNlKHdlKSlyZXR1cm4gc2Uuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5k''@;'; put 'put ''ZWZpbmVkIik7aWYoX2Uod2UpKXt2YXIgVWU9IiciK0pTT04uc3RyaW5naWZ5KHdlKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiBzZS5zdHlsaXplKFVlLCJzdHJpbmciKX1yZXR1cm4gbWUod2UpP3NlLnN0''@;'; put 'put ''eWxpemUoIiIrd2UsIm51bWJlciIpOm5lKHdlKT9zZS5zdHlsaXplKCIiK3dlLCJib29sZWFuIik6aWUod2UpP3NlLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShzZSx3ZSk7aWYob3QpcmV0dXJuIG90O3ZhciB4ZT1PYmplY3Qua2V5cyh3ZSksdmU9ZnVuY3Rpb24gTChzZSl7dmFy''@;'; put 'put ''IHdlPXt9O3JldHVybiBzZS5mb3JFYWNoKGZ1bmN0aW9uKFVlLEplKXt3ZVtVZV09ITB9KSx3ZX0oeGUpO2lmKHNlLnNob3dIaWRkZW4mJih4ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3ZSkpLGIod2UpJiYoeGUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHx4ZS5pbmRleE9mKCJkZXNj''@;'; put 'put ''cmlwdGlvbiIpPj0wKSlyZXR1cm4gVyh3ZSk7aWYoMD09PXhlLmxlbmd0aCl7aWYoeCh3ZSkpcmV0dXJuIHNlLnN0eWxpemUoIltGdW5jdGlvbiIrKHdlLm5hbWU/IjogIit3ZS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihqZSh3ZSkpcmV0dXJuIHNlLnN0eWxpemUoUmVnRXhwLnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZy5jYWxsKHdlKSwicmVnZXhwIik7aWYocCh3ZSkpcmV0dXJuIHNlLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3ZSksImRhdGUiKTtpZihiKHdlKSlyZXR1cm4gVyh3ZSl9dmFyIEllLHplPSIiLERlPSExLEZlPVsieyIsIn0iXTtyZXR1cm4gSih3''@;'; put 'put ''ZSkmJihEZT0hMCxGZT1bIlsiLCJdIl0pLHgod2UpJiYoemU9IiBbRnVuY3Rpb24iKyh3ZS5uYW1lPyI6ICIrd2UubmFtZToiIikrIl0iKSxqZSh3ZSkmJih6ZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdlKSkscCh3ZSkmJih6ZT0iICIrRGF0ZS5wcm90b3R5cGUudG9V''@;'; put 'put ''VENTdHJpbmcuY2FsbCh3ZSkpLGIod2UpJiYoemU9IiAiK1cod2UpKSwwIT09eGUubGVuZ3RofHxEZSYmMCE9d2UubGVuZ3RoP1VlPDA/amUod2UpP3NlLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdlKSwicmVnZXhwIik6c2Uuc3R5bGl6ZSgiW09iamVjdF0iLCJz''@;'; put 'put ''cGVjaWFsIik6KHNlLnNlZW4ucHVzaCh3ZSksSWU9RGU/ZnVuY3Rpb24gWShzZSx3ZSxVZSxKZSxvdCl7Zm9yKHZhciB4ZT1bXSx2ZT0wLFhlPXdlLmxlbmd0aDt2ZTxYZTsrK3ZlKW0od2UsU3RyaW5nKHZlKSk/eGUucHVzaChxKHNlLHdlLFVlLEplLFN0cmluZyh2ZSksITApKTp4ZS5wdXNo''@;'; put 'put ''KCIiKTtyZXR1cm4gb3QuZm9yRWFjaChmdW5jdGlvbih6ZSl7emUubWF0Y2goL15cZCskLyl8fHhlLnB1c2gocShzZSx3ZSxVZSxKZSx6ZSwhMCkpfSkseGV9KHNlLHdlLFVlLHZlLHhlKTp4ZS5tYXAoZnVuY3Rpb24oVmUpe3JldHVybiBxKHNlLHdlLFVlLHZlLFZlLERlKX0pLHNlLnNlZW4u''@;'; put 'put ''cG9wKCksZnVuY3Rpb24gZWUoc2Usd2UsVWUpe3ZhciBvdD1zZS5yZWR1Y2UoZnVuY3Rpb24oeGUsdmUpe3JldHVybiB2ZS5pbmRleE9mKCJcbiIpLHhlK3ZlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gb3Q+NjA/VWVbMF0rKCIiPT09d2U/IiI6''@;'; put 'put ''d2UrIlxuICIpKyIgIitzZS5qb2luKCIsXG4gICIpKyIgIitVZVsxXTpVZVswXSt3ZSsiICIrc2Uuam9pbigiLCAiKSsiICIrVWVbMV19KEllLHplLEZlKSk6RmVbMF0remUrRmVbMV19ZnVuY3Rpb24gVyhzZSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNlKSsi''@;'; put 'put ''XSJ9ZnVuY3Rpb24gcShzZSx3ZSxVZSxKZSxvdCx4ZSl7dmFyIHZlLFhlLHplO2lmKCh6ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdlLG90KXx8e3ZhbHVlOndlW290XX0pLmdldD9YZT1zZS5zdHlsaXplKHplLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJz''@;'; put 'put ''cGVjaWFsIik6emUuc2V0JiYoWGU9c2Uuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLG0oSmUsb3QpfHwodmU9IlsiK290KyJdIiksWGV8fChzZS5zZWVuLmluZGV4T2YoemUudmFsdWUpPDA/KFhlPWllKFVlKT9LKHNlLHplLnZhbHVlLG51bGwpOksoc2UsemUudmFsdWUsVWUtMSkp''@;'; put 'put ''LmluZGV4T2YoIlxuIik+LTEmJihYZT14ZT9YZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oRGUpe3JldHVybiIgICIrRGV9KS5qb2luKCJcbiIpLnNsaWNlKDIpOiJcbiIrWGUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKERlKXtyZXR1cm4iICAgIitEZX0pLmpvaW4oIlxuIikpOlhlPXNl''@;'; put 'put ''LnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLFNlKHZlKSl7aWYoeGUmJm90Lm1hdGNoKC9eXGQrJC8pKXJldHVybiBYZTsodmU9SlNPTi5zdHJpbmdpZnkoIiIrb3QpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyh2ZT12ZS5zbGljZSgxLC0xKSx2ZT1z''@;'; put 'put ''ZS5zdHlsaXplKHZlLCJuYW1lIikpOih2ZT12ZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksdmU9c2Uuc3R5bGl6ZSh2ZSwic3RyaW5nIikpfXJldHVybiB2ZSsiOiAiK1hlfWZ1bmN0aW9uIEooc2Upe3JldHVybiBBcnJh''@;'; put 'put ''eS5pc0FycmF5KHNlKX1mdW5jdGlvbiBuZShzZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygc2V9ZnVuY3Rpb24gaWUoc2Upe3JldHVybiBudWxsPT09c2V9ZnVuY3Rpb24gbWUoc2Upe3JldHVybiJudW1iZXIiPT10eXBlb2Ygc2V9ZnVuY3Rpb24gX2Uoc2Upe3JldHVybiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2Ygc2V9ZnVuY3Rpb24gU2Uoc2Upe3JldHVybiB2b2lkIDA9PT1zZX1mdW5jdGlvbiBqZShzZSl7cmV0dXJuIFYoc2UpJiYiW29iamVjdCBSZWdFeHBdIj09PVQoc2UpfWZ1bmN0aW9uIFYoc2Upe3JldHVybiJvYmplY3QiPT10eXBlb2Ygc2UmJm51bGwhPT1zZX1mdW5jdGlvbiBwKHNl''@;'; put 'put ''KXtyZXR1cm4gVihzZSkmJiJbb2JqZWN0IERhdGVdIj09PVQoc2UpfWZ1bmN0aW9uIGIoc2Upe3JldHVybiBWKHNlKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1UKHNlKXx8c2UgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24geChzZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHNlfWZ1bmN0''@;'; put 'put ''aW9uIFQoc2Upe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2UpfWZ1bmN0aW9uIEgoc2Upe3JldHVybiBzZTwxMD8iMCIrc2UudG9TdHJpbmcoMTApOnNlLnRvU3RyaW5nKDEwKX1YLmRlYnVnbG9nPWZ1bmN0aW9uKHNlKXtpZihzZT1zZS50b1VwcGVyQ2FzZSgpLCF3''@;'; put 'put ''W3NlXSlpZihQLnRlc3Qoc2UpKXt2YXIgd2U9SS5waWQ7d1tzZV09ZnVuY3Rpb24oKXt2YXIgVWU9WC5mb3JtYXQuYXBwbHkoWCxhcmd1bWVudHMpO18uZXJyb3IoIiVzICVkOiAlcyIsc2Usd2UsVWUpfX1lbHNlIHdbc2VdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gd1tzZV19LFguaW5zcGVjdD1P''@;'; put 'put ''LE8uY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzld''@;'; put 'put ''LHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxPLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LFgudHlw''@;'; put 'put ''ZXM9eSg1OTU1KSxYLmlzQXJyYXk9SixYLmlzQm9vbGVhbj1uZSxYLmlzTnVsbD1pZSxYLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIGxlKHNlKXtyZXR1cm4gbnVsbD09c2V9LFguaXNOdW1iZXI9bWUsWC5pc1N0cmluZz1fZSxYLmlzU3ltYm9sPWZ1bmN0aW9uIFRlKHNlKXtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIHNlfSxYLmlzVW5kZWZpbmVkPVNlLFguaXNSZWdFeHA9amUsWC50eXBlcy5pc1JlZ0V4cD1qZSxYLmlzT2JqZWN0PVYsWC5pc0RhdGU9cCxYLnR5cGVzLmlzRGF0ZT1wLFguaXNFcnJvcj1iLFgudHlwZXMuaXNOYXRpdmVFcnJvcj1iLFguaXNGdW5jdGlvbj14LFgu''@;'; put 'put ''aXNQcmltaXRpdmU9ZnVuY3Rpb24gQyhzZSl7cmV0dXJuIG51bGw9PT1zZXx8ImJvb2xlYW4iPT10eXBlb2Ygc2V8fCJudW1iZXIiPT10eXBlb2Ygc2V8fCJzdHJpbmciPT10eXBlb2Ygc2V8fCJzeW1ib2wiPT10eXBlb2Ygc2V8fHR5cGVvZiBzZT4idSJ9LFguaXNCdWZmZXI9eSgzODQpO3Zh''@;'; put 'put ''ciBqPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gbShzZSx3ZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSx3ZSl9WC5sb2c9ZnVuY3Rpb24oKXtf''@;'; put 'put ''LmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gRSgpe3ZhciBzZT1uZXcgRGF0ZSx3ZT1bSChzZS5nZXRIb3VycygpKSxIKHNlLmdldE1pbnV0ZXMoKSksSChzZS5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW3NlLmdldERhdGUoKSxqW3NlLmdldE1vbnRoKCldLHdlXS5qb2luKCIgIil9''@;'; put 'put ''KCksWC5mb3JtYXQuYXBwbHkoWCxhcmd1bWVudHMpKX0sWC5pbmhlcml0cz15KDU3MTcpLFguX2V4dGVuZD1mdW5jdGlvbihzZSx3ZSl7aWYoIXdlfHwhVih3ZSkpcmV0dXJuIHNlO2Zvcih2YXIgVWU9T2JqZWN0LmtleXMod2UpLEplPVVlLmxlbmd0aDtKZS0tOylzZVtVZVtKZV1dPXdlW1Vl''@;'; put 'put ''W0plXV07cmV0dXJuIHNlfTt2YXIgQT10eXBlb2YgU3ltYm9sPCJ1Ij9TeW1ib2woInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIpOnZvaWQgMDtmdW5jdGlvbiBhZShzZSx3ZSl7aWYoIXNlKXt2YXIgVWU9bmV3IEVycm9yKCJQcm9taXNlIHdhcyByZWplY3RlZCB3aXRoIGEgZmFsc3kgdmFsdWUi''@;'; put 'put ''KTtVZS5yZWFzb249c2Usc2U9VWV9cmV0dXJuIHdlKHNlKX1YLnByb21pc2lmeT1mdW5jdGlvbih3ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHdlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2lmKEEmJndl''@;'; put 'put ''W0FdKXt2YXIgVWU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKFVlPXdlW0FdKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVZSxBLHt2''@;'; put 'put ''YWx1ZTpVZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFVlfWZ1bmN0aW9uIFVlKCl7Zm9yKHZhciBKZSxvdCx4ZT1uZXcgUHJvbWlzZShmdW5jdGlvbih6ZSxEZSl7SmU9emUsb3Q9RGV9KSx2ZT1bXSxYZT0wO1hlPGFyZ3VtZW50cy5sZW5ndGg7WGUrKyl2''@;'; put 'put ''ZS5wdXNoKGFyZ3VtZW50c1tYZV0pO3ZlLnB1c2goZnVuY3Rpb24oemUsRGUpe3plP290KHplKTpKZShEZSl9KTt0cnl7d2UuYXBwbHkodGhpcyx2ZSl9Y2F0Y2goemUpe290KHplKX1yZXR1cm4geGV9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihVZSxPYmplY3QuZ2V0UHJvdG90eXBl''@;'; put 'put ''T2Yod2UpKSxBJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoVWUsQSx7dmFsdWU6VWUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhVZSxnKHdlKSl9LFgucHJvbWlzaWZ5LmN1c3RvbT1BLFguY2FsbGJhY2tpZnk9ZnVu''@;'; put 'put ''Y3Rpb24gdGUoc2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBzZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtmdW5jdGlvbiB3ZSgpe2Zvcih2YXIgVWU9W10sSmU9MDtKZTxhcmd1bWVudHMubGVuZ3RoO0pl''@;'; put 'put ''KyspVWUucHVzaChhcmd1bWVudHNbSmVdKTt2YXIgb3Q9VWUucG9wKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG90KXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbiIpO3ZhciB4ZT10aGlzLHZlPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IG90LmFwcGx5KHhlLGFyZ3VtZW50cyl9O3NlLmFwcGx5KHRoaXMsVWUpLnRoZW4oZnVuY3Rpb24oWGUpe0kubmV4dFRpY2sodmUuYmluZChudWxsLG51bGwsWGUpKX0sZnVuY3Rpb24oWGUpe0kubmV4dFRpY2soYWUuYmluZChudWxsLFhlLHZlKSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3Rv''@;'; put 'put ''dHlwZU9mKHdlLE9iamVjdC5nZXRQcm90b3R5cGVPZihzZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdlLGcoc2UpKSx3ZX19LDQ4MToodWUsWCx5KT0+eyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5leHBvcnRzLmlzX3VyaT1nLEkuZXhwb3J0cy5pc19odHRwX3VyaT1CLEkuZXhw''@;'; put 'put ''b3J0cy5pc19odHRwc191cmk9dyxJLmV4cG9ydHMuaXNfd2ViX3VyaT1QLEkuZXhwb3J0cy5pc1VyaT1nLEkuZXhwb3J0cy5pc0h0dHBVcmk9QixJLmV4cG9ydHMuaXNIdHRwc1VyaT13LEkuZXhwb3J0cy5pc1dlYlVyaT1QO3ZhciBfPWZ1bmN0aW9uKEYpe3JldHVybiBGLm1hdGNoKC8oPzoo''@;'; put 'put ''W146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBnKEYpe2lmKEYmJiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoRikmJiEvJVteMC05''@;'; put 'put ''YS1mXS9pLnRlc3QoRikmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdChGKSl7dmFyIE8sTixMLEssVSx6PSIiLFc9IiI7aWYoTj0oTz1fKEYpKVsyXSxMPU9bM10sSz1PWzRdLFU9T1s1XSwoej1PWzFdKSYmei5sZW5ndGgmJkwubGVuZ3RoPj0wKXtpZihOJiZOLmxlbmd0aCl7''@;'; put 'put ''aWYoMCE9PUwubGVuZ3RoJiYhL15cLy8udGVzdChMKSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoTCkpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50ZXN0KHoudG9Mb3dlckNhc2UoKSkpcmV0dXJuIFcrPXorIjoiLE4mJk4ubGVuZ3RoJiYoVys9Ii8vIitOKSxXKz1M''@;'; put 'put ''LEsmJksubGVuZ3RoJiYoVys9Ij8iK0spLFUmJlUubGVuZ3RoJiYoVys9IiMiK1UpLFd9fX1mdW5jdGlvbiBCKEYsTyl7aWYoZyhGKSl7dmFyIHosSyxXLFksTj0iIixMPSIiLFU9IiIscT0iIjtpZihMPSh6PV8oRikpWzJdLEs9elszXSxXPXpbNF0sWT16WzVdLE49elsxXSl7aWYoTyl7aWYo''@;'; put 'put ''Imh0dHBzIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybjtpZihMKXJldHVybi86KFxkKykkLy50ZXN0KEwpJiYoVT1MLm1hdGNoKC86KFxkKykkLylbMF0sTD1MLnJlcGxhY2UoLzpcZCskLywiIikpLHErPU4rIjoiLHErPSIv''@;'; put 'put ''LyIrTCxVJiYocSs9VSkscSs9SyxXJiZXLmxlbmd0aCYmKHErPSI/IitXKSxZJiZZLmxlbmd0aCYmKHErPSIjIitZKSxxfX19ZnVuY3Rpb24gdyhGKXtyZXR1cm4gQihGLCEwKX1mdW5jdGlvbiBQKEYpe3JldHVybiBCKEYpfHx3KEYpfX0odWU9eS5ubWQodWUpKX0sNTE0MDooX191bnVzZWRf''@;'; put 'put ''d2VicGFja19tb2R1bGUsZXhwb3J0cyk9Pnt2YXIgaW5kZXhPZj1mdW5jdGlvbih1ZSxYKXtpZih1ZS5pbmRleE9mKXJldHVybiB1ZS5pbmRleE9mKFgpO2Zvcih2YXIgeT0wO3k8dWUubGVuZ3RoO3krKylpZih1ZVt5XT09PVgpcmV0dXJuIHk7cmV0dXJuLTF9LE9iamVjdF9rZXlzPWZ1bmN0''@;'; put 'put ''aW9uKHVlKXtpZihPYmplY3Qua2V5cylyZXR1cm4gT2JqZWN0LmtleXModWUpO3ZhciBYPVtdO2Zvcih2YXIgeSBpbiB1ZSlYLnB1c2goeSk7cmV0dXJuIFh9LGZvckVhY2g9ZnVuY3Rpb24odWUsWCl7aWYodWUuZm9yRWFjaClyZXR1cm4gdWUuZm9yRWFjaChYKTtmb3IodmFyIHk9MDt5PHVl''@;'; put 'put ''Lmxlbmd0aDt5KyspWCh1ZVt5XSx5LHVlKX0sZGVmaW5lUHJvcD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfIix7fSksZnVuY3Rpb24odWUsWCx5KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsWCx7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsdmFsdWU6eX0pfX1jYXRjaHtyZXR1cm4gZnVuY3Rpb24oWCx5LEkpe1hbeV09SX19fSgpLGdsb2JhbHM9WyJBcnJheSIsIkJvb2xlYW4iLCJEYXRlIiwiRXJyb3IiLCJFdmFsRXJyb3IiLCJGdW5jdGlvbiIsIkluZmluaXR5IiwiSlNPTiIsIk1hdGgiLCJOYU4iLCJO''@;'; put 'put ''dW1iZXIiLCJPYmplY3QiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJSZWdFeHAiLCJTdHJpbmciLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9yIiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50''@;'; put 'put ''IiwiZXNjYXBlIiwiZXZhbCIsImlzRmluaXRlIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJ1bmRlZmluZWQiLCJ1bmVzY2FwZSJdO2Z1bmN0aW9uIENvbnRleHQoKXt9Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbihYKXtp''@;'; put 'put ''ZighKHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQpKXJldHVybiBuZXcgU2NyaXB0KFgpO3RoaXMuY29kZT1YfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlvbih1ZSl7aWYoISh1ZSBpbnN0YW5jZW9mIENvbnRleHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIm5lZWRzIGEgJ2Nv''@;'; put 'put ''bnRleHQnIGFyZ3VtZW50LiIpO3ZhciBYPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO1guc3R5bGV8fChYLnN0eWxlPXt9KSxYLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoWCk7dmFyIHk9WC5jb250ZW50V2luZG93LEk9eS5ldmFsLF89''@;'; put 'put ''eS5leGVjU2NyaXB0OyFJJiZfJiYoXy5jYWxsKHksIm51bGwiKSxJPXkuZXZhbCksZm9yRWFjaChPYmplY3Rfa2V5cyh1ZSksZnVuY3Rpb24odyl7eVt3XT11ZVt3XX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXt1ZVt3XSYmKHlbd109dWVbd10pfSk7dmFyIGc9T2JqZWN0X2tleXMo''@;'; put 'put ''eSksQj1JLmNhbGwoeSx0aGlzLmNvZGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9rZXlzKHkpLGZ1bmN0aW9uKHcpeyh3IGluIHVlfHwtMT09PWluZGV4T2YoZyx3KSkmJih1ZVt3XT15W3ddKX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXt3IGluIHVlfHxkZWZpbmVQcm9wKHVlLHcs''@;'; put 'put ''eVt3XSl9KSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKFgpLEJ9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5UaGlzQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBldmFsKHRoaXMuY29kZSl9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5OZXdDb250ZXh0PWZ1bmN0aW9uKHVlKXt2YXIgWD1TY3Jp''@;'; put 'put ''cHQuY3JlYXRlQ29udGV4dCh1ZSkseT10aGlzLnJ1bkluQ29udGV4dChYKTtyZXR1cm4gdWUmJmZvckVhY2goT2JqZWN0X2tleXMoWCksZnVuY3Rpb24oSSl7dWVbSV09WFtJXX0pLHl9LGZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksZnVuY3Rpb24odWUpe2V4cG9ydHNb''@;'; put 'put ''dWVdPVNjcmlwdFt1ZV09ZnVuY3Rpb24oWCl7dmFyIHk9U2NyaXB0KFgpO3JldHVybiB5W3VlXS5hcHBseSh5LFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX19KSxleHBvcnRzLmlzQ29udGV4dD1mdW5jdGlvbih1ZSl7cmV0dXJuIHVlIGluc3RhbmNlb2YgQ29udGV4dH0sZXhwb3J0cy5j''@;'; put 'put ''cmVhdGVTY3JpcHQ9ZnVuY3Rpb24odWUpe3JldHVybiBleHBvcnRzLlNjcmlwdCh1ZSl9LGV4cG9ydHMuY3JlYXRlQ29udGV4dD1TY3JpcHQuY3JlYXRlQ29udGV4dD1mdW5jdGlvbih1ZSl7dmFyIFg9bmV3IENvbnRleHQ7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB1ZSYmZm9yRWFjaChPYmpl''@;'; put 'put ''Y3Rfa2V5cyh1ZSksZnVuY3Rpb24oeSl7WFt5XT11ZVt5XX0pLFh9fSw2NDMwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDAyOSksXz15KDMwODMpLGc9eSg1NTU5KSxCPXkoNzM3OSksdz15KDcyOTYpLFA9QigiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEY9eSg2NDEw''@;'; put 'put ''KSgpLE89dHlwZW9mIGdsb2JhbFRoaXM+InUiP3kuZzpnbG9iYWxUaGlzLHo9XygpLE49QigiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLEw9T2JqZWN0LmdldFByb3RvdHlwZU9mLEs9QigiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciBuZT0w''@;'; put 'put ''O25lPGVlLmxlbmd0aDtuZSs9MSlpZihlZVtuZV09PT1KKXJldHVybiBuZTtyZXR1cm4tMX0sVT17X19wcm90b19fOm51bGx9O0koeixGJiZ3JiZMP2Z1bmN0aW9uKHEpe3ZhciBlZT1uZXcgT1txXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gZWUpe3ZhciBKPUwoZWUpLG5lPXcoSixTeW1i''@;'; put 'put ''b2wudG9TdHJpbmdUYWcpO2lmKCFuZSl7dmFyIGllPUwoSik7bmU9dyhpZSxTeW1ib2wudG9TdHJpbmdUYWcpfVVbIiQiK3FdPWcobmUuZ2V0KX19OmZ1bmN0aW9uKHEpe3ZhciBlZT1uZXcgT1txXSxKPWVlLnNsaWNlfHxlZS5zZXQ7SiYmKFVbIiQiK3FdPWcoSikpfSksdWUuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihlZSl7aWYoIWVlfHwib2JqZWN0IiE9dHlwZW9mIGVlKXJldHVybiExO2lmKCFGKXt2YXIgSj1OKFAoZWUpLDgsLTEpO3JldHVybiBLKHosSik+LTE/SjoiT2JqZWN0Ij09PUomJmZ1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShVLGZ1bmN0aW9uKG5lLGllKXtpZighSil0''@;'; put 'put ''cnl7bmUoZWUpLEo9TihpZSwxKX1jYXRjaHt9fSksSn0oZWUpfXJldHVybiB3P2Z1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShVLGZ1bmN0aW9uKG5lLGllKXtpZighSil0cnl7IiQiK25lKGVlKT09PWllJiYoSj1OKGllLDEpKX1jYXRjaHt9fSksSn0oZWUpOm51bGx9fSw4NjQ2Oigp''@;'; put 'put ''PT57fSw5NTA6KCk9Pnt9LDY2MDE6KCk9Pnt9LDkyMTQ6KCk9Pnt9LDY0MTk6KCk9Pnt9LDYzNTM6KCk9Pnt9LDg2MjM6KCk9Pnt9LDc3NDg6KCk9Pnt9LDU1Njg6KCk9Pnt9LDU0NDM6KCk9Pnt9LDQxMjk6KCk9Pnt9LDY2MTk6KCk9Pnt9LDcxMDg6KCk9Pnt9LDIzNjE6KCk9Pnt9LDQ2MTY6''@;'; put 'put ''KCk9Pnt9LDgzNzM6KCk9Pnt9LDMwODM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5OTA4KSxfPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij95Lmc6Z2xvYmFsVGhpczt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBCPVtdLHc9MDt3PEkubGVuZ3RoO3crKykiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgX1tJW3ddXSYmKEJbQi5sZW5ndGhdPUlbd10pO3JldHVybiBCfX0sNzIxODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg4NzY0KS5CdWZmZXIsZz15KDUxMDgpO2Z1bmN0aW9uIEIoU3QsQnQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTdC5h''@;'; put 'put ''cHBseShCdCxhcmd1bWVudHMpfX1jb25zdHt0b1N0cmluZzp3fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpQfT1PYmplY3QsRj0oU3Q9PkJ0PT57Y29uc3QgX249dy5jYWxsKEJ0KTtyZXR1cm4gU3RbX25dfHwoU3RbX25dPV9uLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkp''@;'; put 'put ''fSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTz1TdD0+KFN0PVN0LnRvTG93ZXJDYXNlKCksQnQ9PkYoQnQpPT09U3QpLHo9U3Q9PkJ0PT50eXBlb2YgQnQ9PT1TdCx7aXNBcnJheTpOfT1BcnJheSxMPXooInVuZGVmaW5lZCIpLFU9TygiQXJyYXlCdWZmZXIiKSxZPXooInN0cmluZyIpLHE9eigi''@;'; put 'put ''ZnVuY3Rpb24iKSxlZT16KCJudW1iZXIiKSxKPVN0PT5udWxsIT09U3QmJiJvYmplY3QiPT10eXBlb2YgU3QsaWU9U3Q9PntpZigib2JqZWN0IiE9PUYoU3QpKXJldHVybiExO2NvbnN0IEJ0PVAoU3QpO3JldHVybiEobnVsbCE9PUJ0JiZCdCE9PU9iamVjdC5wcm90b3R5cGUmJm51bGwhPT1P''@;'; put 'put ''YmplY3QuZ2V0UHJvdG90eXBlT2YoQnQpfHxTeW1ib2wudG9TdHJpbmdUYWcgaW4gU3R8fFN5bWJvbC5pdGVyYXRvciBpbiBTdCl9LGxlPU8oIkRhdGUiKSxtZT1PKCJGaWxlIiksX2U9TygiQmxvYiIpLFRlPU8oIkZpbGVMaXN0IiksVj1PKCJVUkxTZWFyY2hQYXJhbXMiKSxbcCxiLHgsQ109''@;'; put 'put ''WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoTyk7ZnVuY3Rpb24gSChTdCxCdCx7YWxsT3duS2V5czpfbj0hMX09e30pe2lmKG51bGw9PT1TdHx8dHlwZW9mIFN0PiJ1IilyZXR1cm47bGV0IG1uLEluO2lmKCJvYmplY3QiIT10eXBlb2YgU3Qm''@;'; put 'put ''JihTdD1bU3RdKSxOKFN0KSlmb3IobW49MCxJbj1TdC5sZW5ndGg7bW48SW47bW4rKylCdC5jYWxsKG51bGwsU3RbbW5dLG1uLFN0KTtlbHNle2NvbnN0IGJuPV9uP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFN0KTpPYmplY3Qua2V5cyhTdCksdXI9Ym4ubGVuZ3RoO2xldCBiaTtmb3Io''@;'; put 'put ''bW49MDttbjx1cjttbisrKWJpPWJuW21uXSxCdC5jYWxsKG51bGwsU3RbYmldLGJpLFN0KX19ZnVuY3Rpb24gaihTdCxCdCl7QnQ9QnQudG9Mb3dlckNhc2UoKTtjb25zdCBfbj1PYmplY3Qua2V5cyhTdCk7bGV0IEluLG1uPV9uLmxlbmd0aDtmb3IoO21uLS0gPjA7KWlmKEluPV9uW21uXSxC''@;'; put 'put ''dD09PUluLnRvTG93ZXJDYXNlKCkpcmV0dXJuIEluO3JldHVybiBudWxsfWNvbnN0IEU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnkuZyxtPVN0PT4hTChTdCkmJlN0IT09RSxvdD0oU3Q9PkJ0''@;'; put 'put ''PT5TdCYmQnQgaW5zdGFuY2VvZiBTdCkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZQKFVpbnQ4QXJyYXkpKSxYZT1PKCJIVE1MRm9ybUVsZW1lbnQiKSxEZT0oKHtoYXNPd25Qcm9wZXJ0eTpTdH0pPT4oQnQsX24pPT5TdC5jYWxsKEJ0LF9uKSkoT2JqZWN0LnByb3RvdHlwZSksRmU9TygiUmVn''@;'; put 'put ''RXhwIiksT2U9KFN0LEJ0KT0+e2NvbnN0IF9uPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKFN0KSxtbj17fTtIKF9uLChJbixibik9PntsZXQgdXI7ITEhPT0odXI9QnQoSW4sYm4sU3QpKSYmKG1uW2JuXT11cnx8SW4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3QsbW4p''@;'; put 'put ''fSxRZT1PKCJBc3luY0Z1bmN0aW9uIikseXQ9KFN0PSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRJbW1lZGlhdGUsQnQ9cShFLnBvc3RNZXNzYWdlKSxTdD9zZXRJbW1lZGlhdGU6QnQ/KF9uPWBheGlvc0Ake01hdGgucmFuZG9tKCl9YCxtbj1bXSxFLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2Ui''@;'; put 'put ''LCh7c291cmNlOkluLGRhdGE6Ym59KT0+e0luPT09RSYmYm49PT1fbiYmbW4ubGVuZ3RoJiZtbi5zaGlmdCgpKCl9LCExKSxJbj0+e21uLnB1c2goSW4pLEUucG9zdE1lc3NhZ2UoX24sIioiKX0pOl9uPT5zZXRUaW1lb3V0KF9uKSksTXQ9dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1Ij9xdWV1''@;'; put 'put ''ZU1pY3JvdGFzay5iaW5kKEUpOnR5cGVvZiBJPCJ1IiYmSS5uZXh0VGlja3x8eXQ7dmFyIFN0LEJ0LF9uLG1uLER0PXtpc0FycmF5Ok4saXNBcnJheUJ1ZmZlcjpVLGlzQnVmZmVyOmZ1bmN0aW9uIEsoU3Qpe3JldHVybiBudWxsIT09U3QmJiFMKFN0KSYmbnVsbCE9PVN0LmNvbnN0cnVjdG9y''@;'; put 'put ''JiYhTChTdC5jb25zdHJ1Y3RvcikmJnEoU3QuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZTdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihTdCl9LGlzRm9ybURhdGE6U3Q9PntsZXQgQnQ7cmV0dXJuIFN0JiYoImZ1bmN0aW9uIj09dHlwZW9mIEZvcm1EYXRhJiZTdCBpbnN0YW5jZW9mIEZvcm1EYXRh''@;'; put 'put ''fHxxKFN0LmFwcGVuZCkmJigiZm9ybWRhdGEiPT09KEJ0PUYoU3QpKXx8Im9iamVjdCI9PT1CdCYmcShTdC50b1N0cmluZykmJiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1TdC50b1N0cmluZygpKSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uIFcoU3Qpe2xldCBCdDtyZXR1cm4gQnQ9dHlw''@;'; put 'put ''ZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhTdCk6U3QmJlN0LmJ1ZmZlciYmVShTdC5idWZmZXIpLEJ0fSxpc1N0cmluZzpZLGlzTnVtYmVyOmVlLGlzQm9vbGVhbjpTdD0+ITA9PT1TdHx8ITE9PT1TdCxpc09iamVjdDpKLGlzUGxh''@;'; put 'put ''aW5PYmplY3Q6aWUsaXNSZWFkYWJsZVN0cmVhbTpwLGlzUmVxdWVzdDpiLGlzUmVzcG9uc2U6eCxpc0hlYWRlcnM6Qyxpc1VuZGVmaW5lZDpMLGlzRGF0ZTpsZSxpc0ZpbGU6bWUsaXNCbG9iOl9lLGlzUmVnRXhwOkZlLGlzRnVuY3Rpb246cSxpc1N0cmVhbTpTdD0+SihTdCkmJnEoU3QucGlw''@;'; put 'put ''ZSksaXNVUkxTZWFyY2hQYXJhbXM6Vixpc1R5cGVkQXJyYXk6b3QsaXNGaWxlTGlzdDpUZSxmb3JFYWNoOkgsbWVyZ2U6ZnVuY3Rpb24gQSgpe2NvbnN0e2Nhc2VsZXNzOlN0fT1tKHRoaXMpJiZ0aGlzfHx7fSxCdD17fSxfbj0obW4sSW4pPT57Y29uc3QgYm49U3QmJmooQnQsSW4pfHxJbjtC''@;'; put 'put ''dFtibl09aWUoQnRbYm5dKSYmaWUobW4pP0EoQnRbYm5dLG1uKTppZShtbik/QSh7fSxtbik6Tihtbik/bW4uc2xpY2UoKTptbn07Zm9yKGxldCBtbj0wLEluPWFyZ3VtZW50cy5sZW5ndGg7bW48SW47bW4rKylhcmd1bWVudHNbbW5dJiZIKGFyZ3VtZW50c1ttbl0sX24pO3JldHVybiBCdH0s''@;'; put 'put ''ZXh0ZW5kOihTdCxCdCxfbix7YWxsT3duS2V5czptbn09e30pPT4oSChCdCwoSW4sYm4pPT57U3RbYm5dPV9uJiZxKEluKT9CKEluLF9uKTpJbn0se2FsbE93bktleXM6bW59KSxTdCksdHJpbTpTdD0+U3QudHJpbT9TdC50cmltKCk6U3QucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNc''@;'; put 'put ''dUZFRkZceEEwXSskL2csIiIpLHN0cmlwQk9NOlN0PT4oNjUyNzk9PT1TdC5jaGFyQ29kZUF0KDApJiYoU3Q9U3Quc2xpY2UoMSkpLFN0KSxpbmhlcml0czooU3QsQnQsX24sbW4pPT57U3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQnQucHJvdG90eXBlLG1uKSxTdC5wcm90b3R5cGUuY29u''@;'; put 'put ''c3RydWN0b3I9U3QsT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LCJzdXBlciIse3ZhbHVlOkJ0LnByb3RvdHlwZX0pLF9uJiZPYmplY3QuYXNzaWduKFN0LnByb3RvdHlwZSxfbil9LHRvRmxhdE9iamVjdDooU3QsQnQsX24sbW4pPT57bGV0IEluLGJuLHVyO2NvbnN0IGJpPXt9O2lmKEJ0PUJ0''@;'; put 'put ''fHx7fSxudWxsPT1TdClyZXR1cm4gQnQ7ZG97Zm9yKEluPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFN0KSxibj1Jbi5sZW5ndGg7Ym4tLSA+MDspdXI9SW5bYm5dLCghbW58fG1uKHVyLFN0LEJ0KSkmJiFiaVt1cl0mJihCdFt1cl09U3RbdXJdLGJpW3VyXT0hMCk7U3Q9ITEhPT1fbiYm''@;'; put 'put ''UChTdCl9d2hpbGUoU3QmJighX258fF9uKFN0LEJ0KSkmJlN0IT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEJ0fSxraW5kT2Y6RixraW5kT2ZUZXN0Ok8sZW5kc1dpdGg6KFN0LEJ0LF9uKT0+e1N0PVN0cmluZyhTdCksKHZvaWQgMD09PV9ufHxfbj5TdC5sZW5ndGgpJiYoX249U3QubGVu''@;'; put 'put ''Z3RoKTtjb25zdCBtbj1TdC5pbmRleE9mKEJ0LF9uLT1CdC5sZW5ndGgpO3JldHVybi0xIT09bW4mJm1uPT09X259LHRvQXJyYXk6U3Q9PntpZighU3QpcmV0dXJuIG51bGw7aWYoTihTdCkpcmV0dXJuIFN0O2xldCBCdD1TdC5sZW5ndGg7aWYoIWVlKEJ0KSlyZXR1cm4gbnVsbDtjb25zdCBf''@;'; put 'put ''bj1uZXcgQXJyYXkoQnQpO2Zvcig7QnQtLSA+MDspX25bQnRdPVN0W0J0XTtyZXR1cm4gX259LGZvckVhY2hFbnRyeTooU3QsQnQpPT57Y29uc3QgbW49KFN0JiZTdFtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKFN0KTtsZXQgSW47Zm9yKDsoSW49bW4ubmV4dCgpKSYmIUluLmRvbmU7KXtjb25z''@;'; put 'put ''dCBibj1Jbi52YWx1ZTtCdC5jYWxsKFN0LGJuWzBdLGJuWzFdKX19LG1hdGNoQWxsOihTdCxCdCk9PntsZXQgX247Y29uc3QgbW49W107Zm9yKDtudWxsIT09KF9uPVN0LmV4ZWMoQnQpKTspbW4ucHVzaChfbik7cmV0dXJuIG1ufSxpc0hUTUxGb3JtOlhlLGhhc093blByb3BlcnR5OkRlLGhh''@;'; put 'put ''c093blByb3A6RGUscmVkdWNlRGVzY3JpcHRvcnM6T2UsZnJlZXplTWV0aG9kczpTdD0+e09lKFN0LChCdCxfbik9PntpZihxKFN0KSYmLTEhPT1bImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoX24pKXJldHVybiExO2lmKHEoU3RbX25dKSl7aWYoQnQuZW51bWVyYWJs''@;'; put 'put ''ZT0hMSwid3JpdGFibGUiaW4gQnQpcmV0dXJuIHZvaWQoQnQud3JpdGFibGU9ITEpO0J0LnNldHx8KEJ0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIitfbisiJyIpfSl9fSl9LHRvT2JqZWN0U2V0OihTdCxCdCk9Pntjb25zdCBfbj17''@;'; put 'put ''fSxtbj1Jbj0+e0luLmZvckVhY2goYm49Pntfbltibl09ITB9KX07cmV0dXJuIE4oU3QpP21uKFN0KTptbihTdHJpbmcoU3QpLnNwbGl0KEJ0KSksX259LHRvQ2FtZWxDYXNlOlN0PT5TdC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24oX24s''@;'; put 'put ''bW4sSW4pe3JldHVybiBtbi50b1VwcGVyQ2FzZSgpK0lufSksbm9vcDooKT0+e30sdG9GaW5pdGVOdW1iZXI6KFN0LEJ0KT0+bnVsbCE9U3QmJk51bWJlci5pc0Zpbml0ZShTdD0rU3QpP1N0OkJ0LGZpbmRLZXk6aixnbG9iYWw6RSxpc0NvbnRleHREZWZpbmVkOm0saXNTcGVjQ29tcGxpYW50''@;'; put 'put ''Rm9ybTpmdW5jdGlvbiBfdChTdCl7cmV0dXJuISEoU3QmJnEoU3QuYXBwZW5kKSYmIkZvcm1EYXRhIj09PVN0W1N5bWJvbC50b1N0cmluZ1RhZ10mJlN0W1N5bWJvbC5pdGVyYXRvcl0pfSx0b0pTT05PYmplY3Q6U3Q9Pntjb25zdCBCdD1uZXcgQXJyYXkoMTApLF9uPShtbixJbik9PntpZihK''@;'; put 'put ''KG1uKSl7aWYoQnQuaW5kZXhPZihtbik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBtbikpe0J0W0luXT1tbjtjb25zdCBibj1OKG1uKT9bXTp7fTtyZXR1cm4gSChtbiwodXIsYmkpPT57Y29uc3QgRnI9X24odXIsSW4rMSk7IUwoRnIpJiYoYm5bYmldPUZyKX0pLEJ0W0luXT12b2lkIDAs''@;'; put 'put ''Ym59fXJldHVybiBtbn07cmV0dXJuIF9uKFN0LDApfSxpc0FzeW5jRm46UWUsaXNUaGVuYWJsZTpTdD0+U3QmJihKKFN0KXx8cShTdCkpJiZxKFN0LnRoZW4pJiZxKFN0LmNhdGNoKSxzZXRJbW1lZGlhdGU6eXQsYXNhcDpNdH07ZnVuY3Rpb24gaXQoU3QsQnQsX24sbW4sSW4pe0Vycm9yLmNh''@;'; put 'put ''bGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrLHRoaXMubWVzc2FnZT1TdCx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLEJ0JiYodGhpcy5jb2RlPUJ0''@;'; put 'put ''KSxfbiYmKHRoaXMuY29uZmlnPV9uKSxtbiYmKHRoaXMucmVxdWVzdD1tbiksSW4mJih0aGlzLnJlc3BvbnNlPUluLHRoaXMuc3RhdHVzPUluLnN0YXR1cz9Jbi5zdGF0dXM6bnVsbCl9RHQuaW5oZXJpdHMoaXQsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMu''@;'; put 'put ''bWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0''@;'; put 'put ''YWNrLGNvbmZpZzpEdC50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnN0YXR1c319fSk7Y29uc3QgJGU9aXQucHJvdG90eXBlLHR0PXt9O2Z1bmN0aW9uIHV0KFN0KXtyZXR1cm4gRHQuaXNQbGFpbk9iamVjdChTdCl8fER0LmlzQXJyYXkoU3Qp''@;'; put 'put ''fWZ1bmN0aW9uIHF0KFN0KXtyZXR1cm4gRHQuZW5kc1dpdGgoU3QsIltdIik/U3Quc2xpY2UoMCwtMik6U3R9ZnVuY3Rpb24gUnQoU3QsQnQsX24pe3JldHVybiBTdD9TdC5jb25jYXQoQnQpLm1hcChmdW5jdGlvbihJbixibil7cmV0dXJuIEluPXF0KEluKSwhX24mJmJuPyJbIitJbisiXSI6''@;'; put 'put ''SW59KS5qb2luKF9uPyIuIjoiIik6QnR9WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BP''@;'; put 'put ''TlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChTdD0+e3R0W1N0XT17dmFsdWU6U3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaXQsdHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkZSwi''@;'; put 'put ''aXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KSxpdC5mcm9tPShTdCxCdCxfbixtbixJbixibik9Pntjb25zdCB1cj1PYmplY3QuY3JlYXRlKCRlKTtyZXR1cm4gRHQudG9GbGF0T2JqZWN0KFN0LHVyLGZ1bmN0aW9uKEZyKXtyZXR1cm4gRnIhPT1FcnJvci5wcm90b3R5cGV9LGJpPT4iaXNBeGlv''@;'; put 'put ''c0Vycm9yIiE9PWJpKSxpdC5jYWxsKHVyLFN0Lm1lc3NhZ2UsQnQsX24sbW4sSW4pLHVyLmNhdXNlPVN0LHVyLm5hbWU9U3QubmFtZSxibiYmT2JqZWN0LmFzc2lnbih1cixibiksdXJ9O2NvbnN0IGNpPUR0LnRvRmxhdE9iamVjdChEdCx7fSxudWxsLGZ1bmN0aW9uKEJ0KXtyZXR1cm4vXmlz''@;'; put 'put ''W0EtWl0vLnRlc3QoQnQpfSk7ZnVuY3Rpb24gUXQoU3QsQnQsX24pe2lmKCFEdC5pc09iamVjdChTdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7QnQ9QnR8fG5ldyBGb3JtRGF0YTtjb25zdCBtbj0oX249RHQudG9GbGF0T2JqZWN0KF9uLHttZXRh''@;'; put 'put ''VG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oX28samkpe3JldHVybiFEdC5pc1VuZGVmaW5lZChqaVtfb10pfSkpLm1ldGFUb2tlbnMsSW49X24udmlzaXRvcnx8b2EsYm49X24uZG90cyx1cj1fbi5pbmRleGVzLEZyPShfbi5CbG9ifHx0eXBlb2YgQmxvYjwidSIm''@;'; put 'put ''JkJsb2IpJiZEdC5pc1NwZWNDb21wbGlhbnRGb3JtKEJ0KTtpZighRHQuaXNGdW5jdGlvbihJbikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiB0YSh0byl7aWYobnVsbD09PXRvKXJldHVybiIiO2lmKER0LmlzRGF0ZSh0bykpcmV0''@;'; put 'put ''dXJuIHRvLnRvSVNPU3RyaW5nKCk7aWYoIUZyJiZEdC5pc0Jsb2IodG8pKXRocm93IG5ldyBpdCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gRHQuaXNBcnJheUJ1ZmZlcih0byl8fER0LmlzVHlwZWRBcnJheSh0byk/RnImJiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBCbG9iP25ldyBCbG9iKFt0b10pOl8uZnJvbSh0byk6dG99ZnVuY3Rpb24gb2EodG8sX28samkpe2xldCBQYz10bztpZih0byYmIWppJiYib2JqZWN0Ij09dHlwZW9mIHRvKWlmKER0LmVuZHNXaXRoKF9vLCJ7fSIpKV9vPW1uP19vOl9vLnNsaWNlKDAsLTIpLHRvPUpTT04u''@;'; put 'put ''c3RyaW5naWZ5KHRvKTtlbHNlIGlmKER0LmlzQXJyYXkodG8pJiZmdW5jdGlvbiBQdChTdCl7cmV0dXJuIER0LmlzQXJyYXkoU3QpJiYhU3Quc29tZSh1dCl9KHRvKXx8KER0LmlzRmlsZUxpc3QodG8pfHxEdC5lbmRzV2l0aChfbywiW10iKSkmJihQYz1EdC50b0FycmF5KHRvKSkpcmV0dXJu''@;'; put 'put ''IF9vPXF0KF9vKSxQYy5mb3JFYWNoKGZ1bmN0aW9uKENhLFRhKXshRHQuaXNVbmRlZmluZWQoQ2EpJiZudWxsIT09Q2EmJkJ0LmFwcGVuZCghMD09PXVyP1J0KFtfb10sVGEsYm4pOm51bGw9PT11cj9fbzpfbysiW10iLHRhKENhKSl9KSwhMTtyZXR1cm4hIXV0KHRvKXx8KEJ0LmFwcGVuZChS''@;'; put 'put ''dChqaSxfbyxibiksdGEodG8pKSwhMSl9Y29uc3QgVmE9W10sJG89T2JqZWN0LmFzc2lnbihjaSx7ZGVmYXVsdFZpc2l0b3I6b2EsY29udmVydFZhbHVlOnRhLGlzVmlzaXRhYmxlOnV0fSk7aWYoIUR0LmlzT2JqZWN0KFN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4g''@;'; put 'put ''b2JqZWN0Iik7cmV0dXJuIGZ1bmN0aW9uIFhsKHRvLF9vKXtpZighRHQuaXNVbmRlZmluZWQodG8pKXtpZigtMSE9PVZhLmluZGV4T2YodG8pKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitfby5qb2luKCIuIikpO1ZhLnB1c2godG8pLER0LmZvckVhY2go''@;'; put 'put ''dG8sZnVuY3Rpb24oUGMsemwpeyEwPT09KCEoRHQuaXNVbmRlZmluZWQoUGMpfHxudWxsPT09UGMpJiZJbi5jYWxsKEJ0LFBjLER0LmlzU3RyaW5nKHpsKT96bC50cmltKCk6emwsX28sJG8pKSYmWGwoUGMsX28/X28uY29uY2F0KHpsKTpbemxdKX0pLFZhLnBvcCgpfX0oU3QpLEJ0fWZ1bmN0''@;'; put 'put ''aW9uIHNuKFN0KXtjb25zdCBCdD17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdCkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24obW4pe3Jl''@;'; put 'put ''dHVybiBCdFttbl19KX1mdW5jdGlvbiBSaShTdCxCdCl7dGhpcy5fcGFpcnM9W10sU3QmJlF0KFN0LHRoaXMsQnQpfWNvbnN0IGhuPVJpLnByb3RvdHlwZTtmdW5jdGlvbiBmdChTdCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdCkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgv''@;'; put 'put ''JTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIE9yKFN0LEJ0LF9uKXtpZighQnQpcmV0dXJuIFN0O2NvbnN0IG1uPV9uJiZfbi5lbmNvZGV8fGZ0O0R0Lmlz''@;'; put 'put ''RnVuY3Rpb24oX24pJiYoX249e3NlcmlhbGl6ZTpfbn0pO2NvbnN0IEluPV9uJiZfbi5zZXJpYWxpemU7bGV0IGJuO2lmKGJuPUluP0luKEJ0LF9uKTpEdC5pc1VSTFNlYXJjaFBhcmFtcyhCdCk/QnQudG9TdHJpbmcoKTpuZXcgUmkoQnQsX24pLnRvU3RyaW5nKG1uKSxibil7Y29uc3QgdXI9''@;'; put 'put ''U3QuaW5kZXhPZigiIyIpOy0xIT09dXImJihTdD1TdC5zbGljZSgwLHVyKSksU3QrPSgtMT09PVN0LmluZGV4T2YoIj8iKT8iPyI6IiYiKStibn1yZXR1cm4gU3R9aG4uYXBwZW5kPWZ1bmN0aW9uKEJ0LF9uKXt0aGlzLl9wYWlycy5wdXNoKFtCdCxfbl0pfSxobi50b1N0cmluZz1mdW5jdGlv''@;'; put 'put ''bihCdCl7Y29uc3QgX249QnQ/ZnVuY3Rpb24obW4pe3JldHVybiBCdC5jYWxsKHRoaXMsbW4sc24pfTpzbjtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKEluKXtyZXR1cm4gX24oSW5bMF0pKyI9IitfbihJblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciBBdD1jbGFzcyBXdHtjb25z''@;'; put 'put ''dHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKEJ0LF9uLG1uKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6QnQscmVqZWN0ZWQ6X24sc3luY2hyb25vdXM6ISFtbiYmbW4uc3luY2hyb25vdXMscnVuV2hlbjptbj9tbi5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRs''@;'; put 'put ''ZXJzLmxlbmd0aC0xfWVqZWN0KEJ0KXt0aGlzLmhhbmRsZXJzW0J0XSYmKHRoaXMuaGFuZGxlcnNbQnRdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goQnQpe0R0LmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihtbil7bnVsbCE9''@;'; put 'put ''PW1uJiZCdChtbil9KX19LFJuPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSxXZT17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczp0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQ''@;'; put 'put ''YXJhbXM6UmksRm9ybURhdGE6dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsLEJsb2I6dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O2NvbnN0IFR0PXR5cGVvZiB3aW5kb3c8InUi''@;'; put 'put ''JiZ0eXBlb2YgZG9jdW1lbnQ8InUiLG5yPSJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3J8fHZvaWQgMCxodD1UdCYmKCFucnx8WyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihuci5wcm9kdWN0KTwwKSx4dD10eXBlb2YgV29ya2VyR2xvYmFs''@;'; put 'put ''U2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMsam49VHQmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIHp0PXsuLi5PYmplY3QuZnJlZXplKHtfX3Byb3Rv''@;'; put 'put ''X186bnVsbCxoYXNCcm93c2VyRW52OlR0LGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjp4dCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6aHQsbmF2aWdhdG9yOm5yLG9yaWdpbjpqbn0pLC4uLldlfTtmdW5jdGlvbiBJaShTdCl7ZnVuY3Rpb24gQnQoX24sbW4sSW4sYm4pe2xldCB1cj1f''@;'; put 'put ''bltibisrXTtpZigiX19wcm90b19fIj09PXVyKXJldHVybiEwO2NvbnN0IGJpPU51bWJlci5pc0Zpbml0ZSgrdXIpLEZyPWJuPj1fbi5sZW5ndGg7cmV0dXJuIHVyPSF1ciYmRHQuaXNBcnJheShJbik/SW4ubGVuZ3RoOnVyLEZyPyhJblt1cl09RHQuaGFzT3duUHJvcChJbix1cik/W0luW3Vy''@;'; put 'put ''XSxtbl06bW4sIWJpKTooKCFJblt1cl18fCFEdC5pc09iamVjdChJblt1cl0pKSYmKEluW3VyXT1bXSksQnQoX24sbW4sSW5bdXJdLGJuKSYmRHQuaXNBcnJheShJblt1cl0pJiYoSW5bdXJdPWZ1bmN0aW9uIGZuKFN0KXtjb25zdCBCdD17fSxfbj1PYmplY3Qua2V5cyhTdCk7bGV0IG1uO2Nv''@;'; put 'put ''bnN0IEluPV9uLmxlbmd0aDtsZXQgYm47Zm9yKG1uPTA7bW48SW47bW4rKylibj1fblttbl0sQnRbYm5dPVN0W2JuXTtyZXR1cm4gQnR9KEluW3VyXSkpLCFiaSl9aWYoRHQuaXNGb3JtRGF0YShTdCkmJkR0LmlzRnVuY3Rpb24oU3QuZW50cmllcykpe2NvbnN0IF9uPXt9O3JldHVybiBEdC5m''@;'; put 'put ''b3JFYWNoRW50cnkoU3QsKG1uLEluKT0+e0J0KGZ1bmN0aW9uIGNuKFN0KXtyZXR1cm4gRHQubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLFN0KS5tYXAoQnQ9PiJbXSI9PT1CdFswXT8iIjpCdFsxXXx8QnRbMF0pfShtbiksSW4sX24sMCl9KSxfbn1yZXR1cm4gbnVsbH1jb25zdCBlbj17dHJh''@;'; put 'put ''bnNpdGlvbmFsOlJuLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihCdCxfbil7Y29uc3QgbW49X24uZ2V0Q29udGVudFR5cGUoKXx8IiIsSW49bW4uaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGJuPUR0LmlzT2JqZWN0KEJ0''@;'; put 'put ''KTtpZihibiYmRHQuaXNIVE1MRm9ybShCdCkmJihCdD1uZXcgRm9ybURhdGEoQnQpKSxEdC5pc0Zvcm1EYXRhKEJ0KSlyZXR1cm4gSW4/SlNPTi5zdHJpbmdpZnkoSWkoQnQpKTpCdDtpZihEdC5pc0FycmF5QnVmZmVyKEJ0KXx8RHQuaXNCdWZmZXIoQnQpfHxEdC5pc1N0cmVhbShCdCl8fER0''@;'; put 'put ''LmlzRmlsZShCdCl8fER0LmlzQmxvYihCdCl8fER0LmlzUmVhZGFibGVTdHJlYW0oQnQpKXJldHVybiBCdDtpZihEdC5pc0FycmF5QnVmZmVyVmlldyhCdCkpcmV0dXJuIEJ0LmJ1ZmZlcjtpZihEdC5pc1VSTFNlYXJjaFBhcmFtcyhCdCkpcmV0dXJuIF9uLnNldENvbnRlbnRUeXBlKCJhcHBs''@;'; put 'put ''aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLEJ0LnRvU3RyaW5nKCk7bGV0IGJpO2lmKGJuKXtpZihtbi5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gZnVuY3Rpb24gaGkoU3QsQnQpe3JldHVybiBR''@;'; put 'put ''dChTdCxuZXcgenQuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihfbixtbixJbixibil7cmV0dXJuIHp0LmlzTm9kZSYmRHQuaXNCdWZmZXIoX24pPyh0aGlzLmFwcGVuZChtbixfbi50b1N0cmluZygiYmFzZTY0IikpLCExKTpibi5kZWZh''@;'; put 'put ''dWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxCdCkpfShCdCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChiaT1EdC5pc0ZpbGVMaXN0KEJ0KSl8fG1uLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7Y29uc3QgRnI9dGhpcy5lbnYmJnRoaXMu''@;'; put 'put ''ZW52LkZvcm1EYXRhO3JldHVybiBRdChiaT97ImZpbGVzW10iOkJ0fTpCdCxGciYmbmV3IEZyLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gYm58fEluPyhfbi5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLGZ1bmN0aW9uIFh0KFN0LEJ0LF9uKXtpZihEdC5pc1N0''@;'; put 'put ''cmluZyhTdCkpdHJ5e3JldHVybihCdHx8SlNPTi5wYXJzZSkoU3QpLER0LnRyaW0oU3QpfWNhdGNoKG1uKXtpZigiU3ludGF4RXJyb3IiIT09bW4ubmFtZSl0aHJvdyBtbn1yZXR1cm4oX258fEpTT04uc3RyaW5naWZ5KShTdCl9KEJ0KSk6QnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rp''@;'; put 'put ''b24oQnQpe2NvbnN0IF9uPXRoaXMudHJhbnNpdGlvbmFsfHxlbi50cmFuc2l0aW9uYWwsbW49X24mJl9uLmZvcmNlZEpTT05QYXJzaW5nLEluPSJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKER0LmlzUmVzcG9uc2UoQnQpfHxEdC5pc1JlYWRhYmxlU3RyZWFtKEJ0KSlyZXR1cm4gQnQ7''@;'; put 'put ''aWYoQnQmJkR0LmlzU3RyaW5nKEJ0KSYmKG1uJiYhdGhpcy5yZXNwb25zZVR5cGV8fEluKSl7Y29uc3QgdXI9IShfbiYmX24uc2lsZW50SlNPTlBhcnNpbmcpJiZJbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoQnQpfWNhdGNoKGJpKXtpZih1cil0aHJvdyJTeW50YXhFcnJvciI9PT1iaS5uYW1l''@;'; put 'put ''P2l0LmZyb20oYmksaXQuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6Yml9fXJldHVybiBCdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhC''@;'; put 'put ''b2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6enQuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOnp0LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oQnQpe3JldHVybiBCdD49MjAwJiZCdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0''@;'; put 'put ''ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtEdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLFN0PT57ZW4uaGVhZGVyc1tTdF09e319KTt2YXIgdWE9ZW47Y29uc3QgRWk9RHQudG9PYmplY3RTZXQoWyJhZ2UiLCJh''@;'; put 'put ''dXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJv''@;'; put 'put ''eHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksV249U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiAkaShTdCl7cmV0dXJuIFN0JiZTdHJpbmcoU3QpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGVpKFN0KXtyZXR1cm4hMT09''@;'; put 'put ''PVN0fHxudWxsPT1TdD9TdDpEdC5pc0FycmF5KFN0KT9TdC5tYXAoZWkpOlN0cmluZyhTdCl9ZnVuY3Rpb24gTmkoU3QsQnQsX24sbW4sSW4pe2lmKER0LmlzRnVuY3Rpb24obW4pKXJldHVybiBtbi5jYWxsKHRoaXMsQnQsX24pO2lmKEluJiYoQnQ9X24pLER0LmlzU3RyaW5nKEJ0KSl7aWYo''@;'; put 'put ''RHQuaXNTdHJpbmcobW4pKXJldHVybi0xIT09QnQuaW5kZXhPZihtbik7aWYoRHQuaXNSZWdFeHAobW4pKXJldHVybiBtbi50ZXN0KEJ0KX19Y2xhc3MgV2l7Y29uc3RydWN0b3IoQnQpe0J0JiZ0aGlzLnNldChCdCl9c2V0KEJ0LF9uLG1uKXtjb25zdCBJbj10aGlzO2Z1bmN0aW9uIGJuKGJp''@;'; put 'put ''LEZyLHRhKXtjb25zdCBvYT0kaShGcik7aWYoIW9hKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtjb25zdCBWYT1EdC5maW5kS2V5KEluLG9hKTsoIVZhfHx2b2lkIDA9PT1JbltWYV18fCEwPT09dGF8fHZvaWQgMD09PXRhJiYhMSE9''@;'; put 'put ''PUluW1ZhXSkmJihJbltWYXx8RnJdPWVpKGJpKSl9Y29uc3QgdXI9KGJpLEZyKT0+RHQuZm9yRWFjaChiaSwodGEsb2EpPT5ibih0YSxvYSxGcikpO2lmKER0LmlzUGxhaW5PYmplY3QoQnQpfHxCdCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpdXIoQnQsX24pO2Vsc2UgaWYoRHQuaXNT''@;'; put 'put ''dHJpbmcoQnQpJiYoQnQ9QnQudHJpbSgpKSYmIShTdD0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChTdC50cmltKCkpKShCdCkpdXIoKFN0PT57Y29uc3QgQnQ9e307bGV0IF9uLG1uLEluO3JldHVybiBTdCYmU3Quc3BsaXQoIlxuIikuZm9yRWFjaChmdW5jdGlvbih1''@;'; put 'put ''cil7SW49dXIuaW5kZXhPZigiOiIpLF9uPXVyLnN1YnN0cmluZygwLEluKS50cmltKCkudG9Mb3dlckNhc2UoKSxtbj11ci5zdWJzdHJpbmcoSW4rMSkudHJpbSgpLCEoIV9ufHxCdFtfbl0mJkVpW19uXSkmJigic2V0LWNvb2tpZSI9PT1fbj9CdFtfbl0/QnRbX25dLnB1c2gobW4pOkJ0W19u''@;'; put 'put ''XT1bbW5dOkJ0W19uXT1CdFtfbl0/QnRbX25dKyIsICIrbW46bW4pfSksQnR9KShCdCksX24pO2Vsc2UgaWYoRHQuaXNIZWFkZXJzKEJ0KSlmb3IoY29uc3RbYmksRnJdb2YgQnQuZW50cmllcygpKWJuKEZyLGJpLG1uKTtlbHNlIG51bGwhPUJ0JiZibihfbixCdCxtbik7cmV0dXJuIHRoaXN9''@;'; put 'put ''Z2V0KEJ0LF9uKXtpZihCdD0kaShCdCkpe2NvbnN0IG1uPUR0LmZpbmRLZXkodGhpcyxCdCk7aWYobW4pe2NvbnN0IEluPXRoaXNbbW5dO2lmKCFfbilyZXR1cm4gSW47aWYoITA9PT1fbilyZXR1cm4gZnVuY3Rpb24gUXIoU3Qpe2NvbnN0IEJ0PU9iamVjdC5jcmVhdGUobnVsbCksX249Lyhb''@;'; put 'put ''XlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZztsZXQgbW47Zm9yKDttbj1fbi5leGVjKFN0KTspQnRbbW5bMV1dPW1uWzJdO3JldHVybiBCdH0oSW4pO2lmKER0LmlzRnVuY3Rpb24oX24pKXJldHVybiBfbi5jYWxsKHRoaXMsSW4sbW4pO2lmKER0LmlzUmVnRXhwKF9uKSlyZXR1cm4g''@;'; put 'put ''X24uZXhlYyhJbik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhCdCxfbil7aWYoQnQ9JGkoQnQpKXtjb25zdCBtbj1EdC5maW5kS2V5KHRoaXMsQnQpO3JldHVybiEoIW1ufHx2b2lkIDA9PT10aGlzW21uXXx8X24m''@;'; put 'put ''JiFOaSgwLHRoaXNbbW5dLG1uLF9uKSl9cmV0dXJuITF9ZGVsZXRlKEJ0LF9uKXtjb25zdCBtbj10aGlzO2xldCBJbj0hMTtmdW5jdGlvbiBibih1cil7aWYodXI9JGkodXIpKXtjb25zdCBiaT1EdC5maW5kS2V5KG1uLHVyKTtiaSYmKCFfbnx8TmkoMCxtbltiaV0sYmksX24pKSYmKGRlbGV0''@;'; put 'put ''ZSBtbltiaV0sSW49ITApfX1yZXR1cm4gRHQuaXNBcnJheShCdCk/QnQuZm9yRWFjaChibik6Ym4oQnQpLElufWNsZWFyKEJ0KXtjb25zdCBfbj1PYmplY3Qua2V5cyh0aGlzKTtsZXQgbW49X24ubGVuZ3RoLEluPSExO2Zvcig7bW4tLTspe2NvbnN0IGJuPV9uW21uXTsoIUJ0fHxOaSgwLHRo''@;'; put 'put ''aXNbYm5dLGJuLEJ0LCEwKSkmJihkZWxldGUgdGhpc1tibl0sSW49ITApfXJldHVybiBJbn1ub3JtYWxpemUoQnQpe2NvbnN0IF9uPXRoaXMsbW49e307cmV0dXJuIER0LmZvckVhY2godGhpcywoSW4sYm4pPT57Y29uc3QgdXI9RHQuZmluZEtleShtbixibik7aWYodXIpcmV0dXJuIF9uW3Vy''@;'; put 'put ''XT1laShJbiksdm9pZCBkZWxldGUgX25bYm5dO2NvbnN0IGJpPUJ0P2Z1bmN0aW9uIERhKFN0KXtyZXR1cm4gU3QudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoQnQsX24sbW4pPT5fbi50b1VwcGVyQ2FzZSgpK21uKX0oYm4pOlN0cmluZyhibikudHJp''@;'; put 'put ''bSgpO2JpIT09Ym4mJmRlbGV0ZSBfbltibl0sX25bYmldPWVpKEluKSxtbltiaV09ITB9KSx0aGlzfWNvbmNhdCguLi5CdCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uQnQpfXRvSlNPTihCdCl7Y29uc3QgX249T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gRHQu''@;'; put 'put ''Zm9yRWFjaCh0aGlzLChtbixJbik9PntudWxsIT1tbiYmITEhPT1tbiYmKF9uW0luXT1CdCYmRHQuaXNBcnJheShtbik/bW4uam9pbigiLCAiKTptbil9KSxfbn1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3Jd''@;'; put 'put ''KCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbQnQsX25dKT0+QnQrIjogIitfbikuam9pbigiXG4iKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKEJ0KXtyZXR1cm4gQnQgaW5z''@;'; put 'put ''dGFuY2VvZiB0aGlzP0J0Om5ldyB0aGlzKEJ0KX1zdGF0aWMgY29uY2F0KEJ0LC4uLl9uKXtjb25zdCBtbj1uZXcgdGhpcyhCdCk7cmV0dXJuIF9uLmZvckVhY2goSW49Pm1uLnNldChJbikpLG1ufXN0YXRpYyBhY2Nlc3NvcihCdCl7Y29uc3QgbW49KHRoaXNbV25dPXRoaXNbV25dPXthY2Nl''@;'; put 'put ''c3NvcnM6e319KS5hY2Nlc3NvcnMsSW49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gYm4odXIpe2NvbnN0IGJpPSRpKHVyKTttbltiaV18fChmdW5jdGlvbiBMcihTdCxCdCl7Y29uc3QgX249RHQudG9DYW1lbENhc2UoIiAiK0J0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2gobW49PntP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoU3QsbW4rX24se3ZhbHVlOmZ1bmN0aW9uKEluLGJuLHVyKXtyZXR1cm4gdGhpc1ttbl0uY2FsbCh0aGlzLEJ0LEluLGJuLHVyKX0sY29uZmlndXJhYmxlOiEwfSl9KX0oSW4sdXIpLG1uW2JpXT0hMCl9cmV0dXJuIER0LmlzQXJyYXkoQnQpP0J0LmZvckVh''@;'; put 'put ''Y2goYm4pOmJuKEJ0KSx0aGlzfX1XaS5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSksRHQucmVkdWNlRGVzY3JpcHRvcnMoV2kucHJvdG90eXBlLCh7dmFsdWU6''@;'; put 'put ''U3R9LEJ0KT0+e2xldCBfbj1CdFswXS50b1VwcGVyQ2FzZSgpK0J0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PlN0LHNldChtbil7dGhpc1tfbl09bW59fX0pLER0LmZyZWV6ZU1ldGhvZHMoV2kpO3ZhciBwYT1XaTtmdW5jdGlvbiBRbihTdCxCdCl7Y29uc3QgX249dGhpc3x8dWEsbW49QnR8''@;'; put 'put ''fF9uLEluPXBhLmZyb20obW4uaGVhZGVycyk7bGV0IGJuPW1uLmRhdGE7cmV0dXJuIER0LmZvckVhY2goU3QsZnVuY3Rpb24oYmkpe2JuPWJpLmNhbGwoX24sYm4sSW4ubm9ybWFsaXplKCksQnQ/QnQuc3RhdHVzOnZvaWQgMCl9KSxJbi5ub3JtYWxpemUoKSxibn1mdW5jdGlvbiBsYShTdCl7''@;'; put 'put ''cmV0dXJuISghU3R8fCFTdC5fX0NBTkNFTF9fKX1mdW5jdGlvbiB5YShTdCxCdCxfbil7aXQuY2FsbCh0aGlzLFN0Pz8iY2FuY2VsZWQiLGl0LkVSUl9DQU5DRUxFRCxCdCxfbiksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1mdW5jdGlvbiBMYShTdCxCdCxfbil7Y29uc3QgbW49X24uY29u''@;'; put 'put ''ZmlnLnZhbGlkYXRlU3RhdHVzO19uLnN0YXR1cyYmbW4mJiFtbihfbi5zdGF0dXMpP0J0KG5ldyBpdCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK19uLnN0YXR1cyxbaXQuRVJSX0JBRF9SRVFVRVNULGl0LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoX24uc3RhdHVz''@;'; put 'put ''LzEwMCktNF0sX24uY29uZmlnLF9uLnJlcXVlc3QsX24pKTpTdChfbil9RHQuaW5oZXJpdHMoeWEsaXQse19fQ0FOQ0VMX186ITB9KTtjb25zdCBOcz0oU3QsQnQsX249Myk9PntsZXQgbW49MDtjb25zdCBJbj1mdW5jdGlvbiB0aShTdCxCdCl7U3Q9U3R8fDEwO2NvbnN0IF9uPW5ldyBBcnJh''@;'; put 'put ''eShTdCksbW49bmV3IEFycmF5KFN0KTtsZXQgdXIsSW49MCxibj0wO3JldHVybiBCdD12b2lkIDAhPT1CdD9CdDoxZTMsZnVuY3Rpb24oRnIpe2NvbnN0IHRhPURhdGUubm93KCksb2E9bW5bYm5dO3VyfHwodXI9dGEpLF9uW0luXT1GcixtbltJbl09dGE7bGV0IFZhPWJuLCRvPTA7Zm9yKDtW''@;'; put 'put ''YSE9PUluOykkbys9X25bVmErK10sVmElPVN0O2lmKEluPShJbisxKSVTdCxJbj09PWJuJiYoYm49KGJuKzEpJVN0KSx0YS11cjxCdClyZXR1cm47Y29uc3QgWGw9b2EmJnRhLW9hO3JldHVybiBYbD9NYXRoLnJvdW5kKDFlMyokby9YbCk6dm9pZCAwfX0oNTAsMjUwKTtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gZ28oU3QsQnQpe2xldCBJbixibixfbj0wLG1uPTFlMy9CdDtjb25zdCB1cj0odGEsb2E9RGF0ZS5ub3coKSk9Pntfbj1vYSxJbj1udWxsLGJuJiYoY2xlYXJUaW1lb3V0KGJuKSxibj1udWxsKSxTdC5hcHBseShudWxsLHRhKX07cmV0dXJuWyguLi50YSk9Pntjb25zdCBvYT1EYXRlLm5v''@;'; put 'put ''dygpLFZhPW9hLV9uO1ZhPj1tbj91cih0YSxvYSk6KEluPXRhLGJufHwoYm49c2V0VGltZW91dCgoKT0+e2JuPW51bGwsdXIoSW4pfSxtbi1WYSkpKX0sKCk9PkluJiZ1cihJbildfShibj0+e2NvbnN0IHVyPWJuLmxvYWRlZCxiaT1ibi5sZW5ndGhDb21wdXRhYmxlP2JuLnRvdGFsOnZvaWQg''@;'; put 'put ''MCxGcj11ci1tbix0YT1JbihGcik7bW49dXIsU3Qoe2xvYWRlZDp1cix0b3RhbDpiaSxwcm9ncmVzczpiaT91ci9iaTp2b2lkIDAsYnl0ZXM6RnIscmF0ZTp0YXx8dm9pZCAwLGVzdGltYXRlZDp0YSYmYmkmJnVyPD1iaT8oYmktdXIpL3RhOnZvaWQgMCxldmVudDpibixsZW5ndGhDb21wdXRh''@;'; put 'put ''YmxlOm51bGwhPWJpLFtCdD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH0pfSxfbil9LGJsPShTdCxCdCk9Pntjb25zdCBfbj1udWxsIT1TdDtyZXR1cm5bbW49PkJ0WzBdKHtsZW5ndGhDb21wdXRhYmxlOl9uLHRvdGFsOlN0LGxvYWRlZDptbn0pLEJ0WzFdXX0scHU9U3Q9PiguLi5CdCk9PkR0''@;'; put 'put ''LmFzYXAoKCk9PlN0KC4uLkJ0KSk7dmFyIExjPXp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudj8oKFN0LEJ0KT0+X249Pihfbj1uZXcgVVJMKF9uLHp0Lm9yaWdpbiksU3QucHJvdG9jb2w9PT1fbi5wcm90b2NvbCYmU3QuaG9zdD09PV9uLmhvc3QmJihCdHx8U3QucG9ydD09PV9uLnBvcnQpKSko''@;'; put 'put ''bmV3IFVSTCh6dC5vcmlnaW4pLHp0Lm5hdmlnYXRvciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdCh6dC5uYXZpZ2F0b3IudXNlckFnZW50KSk6KCk9PiEwLEQwPXp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoU3QsQnQsX24sbW4sSW4sYm4pe2NvbnN0IHVyPVtTdCsiPSIrZW5jb2Rl''@;'; put 'put ''VVJJQ29tcG9uZW50KEJ0KV07RHQuaXNOdW1iZXIoX24pJiZ1ci5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoX24pLnRvR01UU3RyaW5nKCkpLER0LmlzU3RyaW5nKG1uKSYmdXIucHVzaCgicGF0aD0iK21uKSxEdC5pc1N0cmluZyhJbikmJnVyLnB1c2goImRvbWFpbj0iK0luKSwhMD09PWJu''@;'; put 'put ''JiZ1ci5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9dXIuam9pbigiOyAiKX0scmVhZChTdCl7Y29uc3QgQnQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK1N0KyIpPShbXjtdKikiKSk7cmV0dXJuIEJ0P2RlY29kZVVSSUNvbXBvbmVudChCdFsz''@;'; put 'put ''XSk6bnVsbH0scmVtb3ZlKFN0KXt0aGlzLndyaXRlKFN0LCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkOigpPT5udWxsLHJlbW92ZSgpe319O2Z1bmN0aW9uIHVpKFN0LEJ0LF9uKXtsZXQgbW49IWZ1bmN0aW9uIGlyKFN0KXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5d''@;'; put 'put ''KjopP1wvXC8vaS50ZXN0KFN0KX0oQnQpO3JldHVybiBTdCYmbW58fDA9PV9uP2Z1bmN0aW9uIHhhKFN0LEJ0KXtyZXR1cm4gQnQ/U3QucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK0J0LnJlcGxhY2UoL15cLysvLCIiKTpTdH0oU3QsQnQpOkJ0fWNvbnN0IFZ0PVN0PT5TdCBpbnN0YW5jZW9m''@;'; put 'put ''IHBhP3suLi5TdH06U3Q7ZnVuY3Rpb24gSnIoU3QsQnQpe0J0PUJ0fHx7fTtjb25zdCBfbj17fTtmdW5jdGlvbiBtbih0YSxvYSxWYSwkbyl7cmV0dXJuIER0LmlzUGxhaW5PYmplY3QodGEpJiZEdC5pc1BsYWluT2JqZWN0KG9hKT9EdC5tZXJnZS5jYWxsKHtjYXNlbGVzczokb30sdGEsb2Ep''@;'; put 'put ''OkR0LmlzUGxhaW5PYmplY3Qob2EpP0R0Lm1lcmdlKHt9LG9hKTpEdC5pc0FycmF5KG9hKT9vYS5zbGljZSgpOm9hfWZ1bmN0aW9uIEluKHRhLG9hLFZhLCRvKXtyZXR1cm4gRHQuaXNVbmRlZmluZWQob2EpP0R0LmlzVW5kZWZpbmVkKHRhKT92b2lkIDA6bW4odm9pZCAwLHRhLDAsJG8pOm1u''@;'; put 'put ''KHRhLG9hLDAsJG8pfWZ1bmN0aW9uIGJuKHRhLG9hKXtpZighRHQuaXNVbmRlZmluZWQob2EpKXJldHVybiBtbih2b2lkIDAsb2EpfWZ1bmN0aW9uIHVyKHRhLG9hKXtyZXR1cm4gRHQuaXNVbmRlZmluZWQob2EpP0R0LmlzVW5kZWZpbmVkKHRhKT92b2lkIDA6bW4odm9pZCAwLHRhKTptbih2''@;'; put 'put ''b2lkIDAsb2EpfWZ1bmN0aW9uIGJpKHRhLG9hLFZhKXtyZXR1cm4gVmEgaW4gQnQ/bW4odGEsb2EpOlZhIGluIFN0P21uKHZvaWQgMCx0YSk6dm9pZCAwfWNvbnN0IEZyPXt1cmw6Ym4sbWV0aG9kOmJuLGRhdGE6Ym4sYmFzZVVSTDp1cix0cmFuc2Zvcm1SZXF1ZXN0OnVyLHRyYW5zZm9ybVJl''@;'; put 'put ''c3BvbnNlOnVyLHBhcmFtc1NlcmlhbGl6ZXI6dXIsdGltZW91dDp1cix0aW1lb3V0TWVzc2FnZTp1cix3aXRoQ3JlZGVudGlhbHM6dXIsd2l0aFhTUkZUb2tlbjp1cixhZGFwdGVyOnVyLHJlc3BvbnNlVHlwZTp1cix4c3JmQ29va2llTmFtZTp1cix4c3JmSGVhZGVyTmFtZTp1cixvblVwbG9h''@;'; put 'put ''ZFByb2dyZXNzOnVyLG9uRG93bmxvYWRQcm9ncmVzczp1cixkZWNvbXByZXNzOnVyLG1heENvbnRlbnRMZW5ndGg6dXIsbWF4Qm9keUxlbmd0aDp1cixiZWZvcmVSZWRpcmVjdDp1cix0cmFuc3BvcnQ6dXIsaHR0cEFnZW50OnVyLGh0dHBzQWdlbnQ6dXIsY2FuY2VsVG9rZW46dXIsc29ja2V0''@;'; put 'put ''UGF0aDp1cixyZXNwb25zZUVuY29kaW5nOnVyLHZhbGlkYXRlU3RhdHVzOmJpLGhlYWRlcnM6KHRhLG9hLFZhKT0+SW4oVnQodGEpLFZ0KG9hKSwwLCEwKX07cmV0dXJuIER0LmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxTdCxCdCkpLGZ1bmN0aW9uKG9hKXtjb25zdCBW''@;'; put 'put ''YT1GcltvYV18fEluLCRvPVZhKFN0W29hXSxCdFtvYV0sb2EpO0R0LmlzVW5kZWZpbmVkKCRvKSYmVmEhPT1iaXx8KF9uW29hXT0kbyl9KSxfbn12YXIgYjA9U3Q9Pntjb25zdCBCdD1Kcih7fSxTdCk7bGV0IEZyLHtkYXRhOl9uLHdpdGhYU1JGVG9rZW46bW4seHNyZkhlYWRlck5hbWU6SW4s''@;'; put 'put ''eHNyZkNvb2tpZU5hbWU6Ym4saGVhZGVyczp1cixhdXRoOmJpfT1CdDtpZihCdC5oZWFkZXJzPXVyPXBhLmZyb20odXIpLEJ0LnVybD1Pcih1aShCdC5iYXNlVVJMLEJ0LnVybCksU3QucGFyYW1zLFN0LnBhcmFtc1NlcmlhbGl6ZXIpLGJpJiZ1ci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNp''@;'; put 'put ''YyAiK2J0b2EoKGJpLnVzZXJuYW1lfHwiIikrIjoiKyhiaS5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYmkucGFzc3dvcmQpKToiIikpKSxEdC5pc0Zvcm1EYXRhKF9uKSlpZih6dC5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHp0Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldv''@;'; put 'put ''cmtlckVudil1ci5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoITEhPT0oRnI9dXIuZ2V0Q29udGVudFR5cGUoKSkpe2NvbnN0W3RhLC4uLm9hXT1Gcj9Gci5zcGxpdCgiOyIpLm1hcChWYT0+VmEudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107dXIuc2V0Q29udGVudFR5cGUoW3Rh''@;'; put 'put ''fHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4ub2FdLmpvaW4oIjsgIikpfWlmKHp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKG1uJiZEdC5pc0Z1bmN0aW9uKG1uKSYmKG1uPW1uKEJ0KSksbW58fCExIT09bW4mJkxjKEJ0LnVybCkpKXtjb25zdCB0YT1JbiYmYm4mJkQwLnJlYWQoYm4pO3Rh''@;'; put 'put ''JiZ1ci5zZXQoSW4sdGEpfXJldHVybiBCdH0sTHU9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IiYmZnVuY3Rpb24oU3Qpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfbixtbil7Y29uc3QgSW49YjAoU3QpO2xldCBibj1Jbi5kYXRhO2NvbnN0IHVyPXBhLmZyb20oSW4uaGVhZGVycyku''@;'; put 'put ''bm9ybWFsaXplKCk7bGV0IG9hLFZhLCRvLFhsLHRvLHtyZXNwb25zZVR5cGU6Ymksb25VcGxvYWRQcm9ncmVzczpGcixvbkRvd25sb2FkUHJvZ3Jlc3M6dGF9PUluO2Z1bmN0aW9uIF9vKCl7WGwmJlhsKCksdG8mJnRvKCksSW4uY2FuY2VsVG9rZW4mJkluLmNhbmNlbFRva2VuLnVuc3Vic2Ny''@;'; put 'put ''aWJlKG9hKSxJbi5zaWduYWwmJkluLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsb2EpfWxldCBqaT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gUGMoKXtpZighamkpcmV0dXJuO2NvbnN0IENhPXBhLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBqaSYmamku''@;'; put 'put ''Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpO0xhKGZ1bmN0aW9uKCQwKXtfbigkMCksX28oKX0sZnVuY3Rpb24oJDApe21uKCQwKSxfbygpfSx7ZGF0YTpiaSYmInRleHQiIT09YmkmJiJqc29uIiE9PWJpP2ppLnJlc3BvbnNlOmppLnJlc3BvbnNlVGV4dCxzdGF0dXM6amkuc3RhdHVzLHN0YXR1''@;'; put 'put ''c1RleHQ6amkuc3RhdHVzVGV4dCxoZWFkZXJzOkNhLGNvbmZpZzpTdCxyZXF1ZXN0OmppfSksamk9bnVsbH1qaS5vcGVuKEluLm1ldGhvZC50b1VwcGVyQ2FzZSgpLEluLnVybCwhMCksamkudGltZW91dD1Jbi50aW1lb3V0LCJvbmxvYWRlbmQiaW4gamk/amkub25sb2FkZW5kPVBjOmppLm9u''@;'; put 'put ''cmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFqaXx8NCE9PWppLnJlYWR5U3RhdGV8fDA9PT1qaS5zdGF0dXMmJighamkucmVzcG9uc2VVUkx8fDAhPT1qaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKXx8c2V0VGltZW91dChQYyl9LGppLm9uYWJvcnQ9ZnVuY3Rpb24oKXtqaSYm''@;'; put 'put ''KG1uKG5ldyBpdCgiUmVxdWVzdCBhYm9ydGVkIixpdC5FQ09OTkFCT1JURUQsU3QsamkpKSxqaT1udWxsKX0samkub25lcnJvcj1mdW5jdGlvbigpe21uKG5ldyBpdCgiTmV0d29yayBFcnJvciIsaXQuRVJSX05FVFdPUkssU3QsamkpKSxqaT1udWxsfSxqaS5vbnRpbWVvdXQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtsZXQgVGE9SW4udGltZW91dD8idGltZW91dCBvZiAiK0luLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCI7SW4udGltZW91dEVycm9yTWVzc2FnZSYmKFRhPUluLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG1uKG5ldyBpdChUYSwoSW4udHJhbnNpdGlvbmFsfHxSbiku''@;'; put 'put ''Y2xhcmlmeVRpbWVvdXRFcnJvcj9pdC5FVElNRURPVVQ6aXQuRUNPTk5BQk9SVEVELFN0LGppKSksamk9bnVsbH0sdm9pZCAwPT09Ym4mJnVyLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGppJiZEdC5mb3JFYWNoKHVyLnRvSlNPTigpLGZ1bmN0aW9uKFRhLFho''@;'; put 'put ''KXtqaS5zZXRSZXF1ZXN0SGVhZGVyKFhoLFRhKX0pLER0LmlzVW5kZWZpbmVkKEluLndpdGhDcmVkZW50aWFscyl8fChqaS53aXRoQ3JlZGVudGlhbHM9ISFJbi53aXRoQ3JlZGVudGlhbHMpLGJpJiYianNvbiIhPT1iaSYmKGppLnJlc3BvbnNlVHlwZT1Jbi5yZXNwb25zZVR5cGUpLHRhJiYo''@;'; put 'put ''WyRvLHRvXT1Ocyh0YSwhMCksamkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLCRvKSksRnImJmppLnVwbG9hZCYmKFtWYSxYbF09TnMoRnIpLGppLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsVmEpLGppLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZW5kIixY''@;'; put 'put ''bCkpLChJbi5jYW5jZWxUb2tlbnx8SW4uc2lnbmFsKSYmKG9hPUNhPT57amkmJihtbighQ2F8fENhLnR5cGU/bmV3IHlhKG51bGwsU3QsamkpOkNhKSxqaS5hYm9ydCgpLGppPW51bGwpfSxJbi5jYW5jZWxUb2tlbiYmSW4uY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9hKSxJbi5zaWduYWwmJihJ''@;'; put 'put ''bi5zaWduYWwuYWJvcnRlZD9vYSgpOkluLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsb2EpKSk7Y29uc3Qgemw9ZnVuY3Rpb24gRmEoU3Qpe2NvbnN0IEJ0PS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKFN0KTtyZXR1cm4gQnQmJkJ0WzFdfHwiIn0oSW4udXJsKTt6''@;'; put 'put ''bCYmLTE9PT16dC5wcm90b2NvbHMuaW5kZXhPZih6bCk/bW4obmV3IGl0KCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK3psKyI6IixpdC5FUlJfQkFEX1JFUVVFU1QsU3QpKTpqaS5zZW5kKGJufHxudWxsKX0pfSxvZD0oU3QsQnQpPT57Y29uc3R7bGVuZ3RoOl9ufT1TdD1TdD9TdC5maWx0ZXIo''@;'; put 'put ''Qm9vbGVhbik6W107aWYoQnR8fF9uKXtsZXQgSW4sbW49bmV3IEFib3J0Q29udHJvbGxlcjtjb25zdCBibj1mdW5jdGlvbih0YSl7aWYoIUluKXtJbj0hMCxiaSgpO2NvbnN0IG9hPXRhIGluc3RhbmNlb2YgRXJyb3I/dGE6dGhpcy5yZWFzb247bW4uYWJvcnQob2EgaW5zdGFuY2VvZiBpdD9v''@;'; put 'put ''YTpuZXcgeWEob2EgaW5zdGFuY2VvZiBFcnJvcj9vYS5tZXNzYWdlOm9hKSl9fTtsZXQgdXI9QnQmJnNldFRpbWVvdXQoKCk9Pnt1cj1udWxsLGJuKG5ldyBpdChgdGltZW91dCAke0J0fSBvZiBtcyBleGNlZWRlZGAsaXQuRVRJTUVET1VUKSl9LEJ0KTtjb25zdCBiaT0oKT0+e1N0JiYodXIm''@;'; put 'put ''JmNsZWFyVGltZW91dCh1ciksdXI9bnVsbCxTdC5mb3JFYWNoKHRhPT57dGEudW5zdWJzY3JpYmU/dGEudW5zdWJzY3JpYmUoYm4pOnRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iixibil9KSxTdD1udWxsKX07U3QuZm9yRWFjaCh0YT0+dGEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQi''@;'; put 'put ''LGJuKSk7Y29uc3R7c2lnbmFsOkZyfT1tbjtyZXR1cm4gRnIudW5zdWJzY3JpYmU9KCk9PkR0LmFzYXAoYmkpLEZyfX07Y29uc3QgWWg9ZnVuY3Rpb24qKFN0LEJ0KXtsZXQgX249U3QuYnl0ZUxlbmd0aDtpZighQnR8fF9uPEJ0KXJldHVybiB2b2lkKHlpZWxkIFN0KTtsZXQgSW4sbW49MDtm''@;'; put 'put ''b3IoO21uPF9uOylJbj1tbitCdCx5aWVsZCBTdC5zbGljZShtbixJbiksbW49SW59LGNmPWZ1bmN0aW9uKCl7dmFyIFN0PV93cmFwQXN5bmNHZW5lcmF0b3IoZnVuY3Rpb24qKEJ0LF9uKXt2YXIgYm4sbW49ITEsSW49ITE7dHJ5e2Zvcih2YXIgYmksdXI9X2FzeW5jSXRlcmF0b3IoQ3MoQnQp''@;'; put 'put ''KTttbj0hKGJpPXlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKHVyLm5leHQoKSkpLmRvbmU7bW49ITEpe2NvbnN0IEZyPWJpLnZhbHVlO3lpZWxkKl9hc3luY0dlbmVyYXRvckRlbGVnYXRlKF9hc3luY0l0ZXJhdG9yKFloKEZyLF9uKSksX2F3YWl0QXN5bmNHZW5lcmF0b3IpfX1jYXRjaChG''@;'; put 'put ''cil7SW49ITAsYm49RnJ9ZmluYWxseXt0cnl7bW4mJm51bGwhPXVyLnJldHVybiYmKHlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKHVyLnJldHVybigpKSl9ZmluYWxseXtpZihJbil0aHJvdyBibn19fSk7cmV0dXJuIGZ1bmN0aW9uKF9uLG1uKXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpfX0oKSxDcz1mdW5jdGlvbigpe3ZhciBTdD1fd3JhcEFzeW5jR2VuZXJhdG9yKGZ1bmN0aW9uKihCdCl7aWYoQnRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKXJldHVybiB2b2lkKHlpZWxkKl9hc3luY0dlbmVyYXRvckRlbGVnYXRlKF9hc3luY0l0ZXJhdG9yKEJ0KSxfYXdhaXRBc3lu''@;'; put 'put ''Y0dlbmVyYXRvcikpO2NvbnN0IF9uPUJ0LmdldFJlYWRlcigpO3RyeXtmb3IoOzspe2NvbnN0e2RvbmU6bW4sdmFsdWU6SW59PXlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKF9uLnJlYWQoKSk7aWYobW4pYnJlYWs7eWllbGQgSW59fWZpbmFsbHl7eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0''@;'; put 'put ''b3IoX24uY2FuY2VsKCkpfX0pO3JldHVybiBmdW5jdGlvbihfbil7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksWWk9KFN0LEJ0LF9uLG1uKT0+e2NvbnN0IEluPWNmKFN0LEJ0KTtsZXQgdXIsYm49MCxiaT1Gcj0+e3VyfHwodXI9ITAsbW4mJm1uKEZyKSl9O3JldHVybiBu''@;'; put 'put ''ZXcgUmVhZGFibGVTdHJlYW0oe3B1bGw6RnI9Pl9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKigpe3RyeXtjb25zdHtkb25lOnRhLHZhbHVlOm9hfT15aWVsZCBJbi5uZXh0KCk7aWYodGEpcmV0dXJuIGJpKCksdm9pZCBGci5jbG9zZSgpO2lmKF9uKXtsZXQgJG89Ym4rPW9hLmJ5dGVMZW5n''@;'; put 'put ''dGg7X24oJG8pfUZyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkob2EpKX1jYXRjaCh0YSl7dGhyb3cgYmkodGEpLHRhfX0pKCksY2FuY2VsOkZyPT4oYmkoRnIpLEluLnJldHVybigpKX0se2hpZ2hXYXRlck1hcms6Mn0pfSx5bD0iZnVuY3Rpb24iPT10eXBlb2YgZmV0Y2gmJiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBSZXF1ZXN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVzcG9uc2UsUWM9eWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWFkYWJsZVN0cmVhbSxuNT15bCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBUZXh0RW5jb2Rlcj8oU3Q9PkJ0PT5TdC5lbmNvZGUoQnQpKShuZXcgVGV4dEVuY29kZXIp''@;'; put 'put ''OmZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihCdCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHlpZWxkIG5ldyBSZXNwb25zZShCdCkuYXJyYXlCdWZmZXIoKSl9KTtyZXR1cm4gZnVuY3Rpb24oQnQpe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9''@;'; put 'put ''fSgpKSx5MD0oU3QsLi4uQnQpPT57dHJ5e3JldHVybiEhU3QoLi4uQnQpfWNhdGNoe3JldHVybiExfX0scjU9UWMmJnkwKCgpPT57bGV0IFN0PSExO2NvbnN0IEJ0PW5ldyBSZXF1ZXN0KHp0Lm9yaWdpbix7Ym9keTpuZXcgUmVhZGFibGVTdHJlYW0sbWV0aG9kOiJQT1NUIixnZXQgZHVwbGV4''@;'; put 'put ''KCl7cmV0dXJuIFN0PSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIFN0JiYhQnR9KSx1Zj1RYyYmeTAoKCk9PkR0LmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCIiKS5ib2R5KSksc2Q9e3N0cmVhbTp1ZiYmKFN0PT5TdC5ib2R5KX07eWwmJihT''@;'; put 'put ''dD0+e1sidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaChCdD0+eyFzZFtCdF0mJihzZFtCdF09RHQuaXNGdW5jdGlvbihTdFtCdF0pP19uPT5fbltCdF0oKTooX24sbW4pPT57dGhyb3cgbmV3IGl0KGBSZXNwb25zZSB0eXBlICcke0J0fScg''@;'; put 'put ''aXMgbm90IHN1cHBvcnRlZGAsaXQuRVJSX05PVF9TVVBQT1JULG1uKX0pfSl9KShuZXcgUmVzcG9uc2UpO2NvbnN0IGRmPWZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihCdCl7cmV0dXJuIG51bGw9PUJ0PzA6RHQuaXNCbG9iKEJ0KT9CdC5zaXplOkR0Lmlz''@;'; put 'put ''U3BlY0NvbXBsaWFudEZvcm0oQnQpPyh5aWVsZCBuZXcgUmVxdWVzdCh6dC5vcmlnaW4se21ldGhvZDoiUE9TVCIsYm9keTpCdH0pLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg6RHQuaXNBcnJheUJ1ZmZlclZpZXcoQnQpfHxEdC5pc0FycmF5QnVmZmVyKEJ0KT9CdC5ieXRlTGVuZ3RoOihE''@;'; put 'put ''dC5pc1VSTFNlYXJjaFBhcmFtcyhCdCkmJihCdCs9IiIpLER0LmlzU3RyaW5nKEJ0KT8oeWllbGQgbjUoQnQpKS5ieXRlTGVuZ3RoOnZvaWQgMCl9KTtyZXR1cm4gZnVuY3Rpb24oX24pe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGsxPWZ1bmN0aW9uKCl7dmFyIFN0PV9h''@;'; put 'put ''c3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihCdCxfbil7cmV0dXJuIER0LnRvRmluaXRlTnVtYmVyKEJ0LmdldENvbnRlbnRMZW5ndGgoKSk/P2RmKF9uKX0pO3JldHVybiBmdW5jdGlvbihfbixtbil7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7dmFyIGhmPXlsJiZmdW5j''@;'; put 'put ''dGlvbigpe3ZhciBTdD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooQnQpe2xldHt1cmw6X24sbWV0aG9kOm1uLGRhdGE6SW4sc2lnbmFsOmJuLGNhbmNlbFRva2VuOnVyLHRpbWVvdXQ6Ymksb25Eb3dubG9hZFByb2dyZXNzOkZyLG9uVXBsb2FkUHJvZ3Jlc3M6dGEscmVzcG9uc2VUeXBl''@;'; put 'put ''Om9hLGhlYWRlcnM6VmEsd2l0aENyZWRlbnRpYWxzOiRvPSJzYW1lLW9yaWdpbiIsZmV0Y2hPcHRpb25zOlhsfT1iMChCdCk7b2E9b2E/KG9hKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXQgX28sdG89b2QoW2JuLHVyJiZ1ci50b0Fib3J0U2lnbmFsKCldLGJpKTtjb25zdCBqaT10byYm''@;'; put 'put ''dG8udW5zdWJzY3JpYmUmJigoKT0+e3RvLnVuc3Vic2NyaWJlKCl9KTtsZXQgUGM7dHJ5e2lmKHRhJiZyNSYmImdldCIhPT1tbiYmImhlYWQiIT09bW4mJjAhPT0oUGM9eWllbGQgazEoVmEsSW4pKSl7bGV0ICQwLEcwPW5ldyBSZXF1ZXN0KF9uLHttZXRob2Q6IlBPU1QiLGJvZHk6SW4sZHVw''@;'; put 'put ''bGV4OiJoYWxmIn0pO2lmKER0LmlzRm9ybURhdGEoSW4pJiYoJDA9RzAuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpKSYmVmEuc2V0Q29udGVudFR5cGUoJDApLEcwLmJvZHkpe2NvbnN0W05vLHFpXT1ibChQYyxOcyhwdSh0YSkpKTtJbj1ZaShHMC5ib2R5LDY1NTM2LE5vLHFpKX19RHQu''@;'; put 'put ''aXNTdHJpbmcoJG8pfHwoJG89JG8/ImluY2x1ZGUiOiJvbWl0Iik7Y29uc3Qgemw9ImNyZWRlbnRpYWxzImluIFJlcXVlc3QucHJvdG90eXBlO19vPW5ldyBSZXF1ZXN0KF9uLHsuLi5YbCxzaWduYWw6dG8sbWV0aG9kOm1uLnRvVXBwZXJDYXNlKCksaGVhZGVyczpWYS5ub3JtYWxpemUoKS50''@;'; put 'put ''b0pTT04oKSxib2R5OkluLGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6emw/JG86dm9pZCAwfSk7bGV0IENhPXlpZWxkIGZldGNoKF9vKTtjb25zdCBUYT11ZiYmKCJzdHJlYW0iPT09b2F8fCJyZXNwb25zZSI9PT1vYSk7aWYodWYmJihGcnx8VGEmJmppKSl7Y29uc3QgRzA9e307WyJzdGF0''@;'; put 'put ''dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goTXM9PntHMFtNc109Q2FbTXNdfSk7Y29uc3QgJDA9RHQudG9GaW5pdGVOdW1iZXIoQ2EuaGVhZGVycy5nZXQoImNvbnRlbnQtbGVuZ3RoIikpLFtObyxxaV09RnImJmJsKCQwLE5zKHB1KEZyKSwhMCkpfHxbXTtDYT1uZXcgUmVz''@;'; put 'put ''cG9uc2UoWWkoQ2EuYm9keSw2NTUzNixObywoKT0+e3FpJiZxaSgpLGppJiZqaSgpfSksRzApfW9hPW9hfHwidGV4dCI7bGV0IFhoPXlpZWxkIHNkW0R0LmZpbmRLZXkoc2Qsb2EpfHwidGV4dCJdKENhLEJ0KTtyZXR1cm4hVGEmJmppJiZqaSgpLHlpZWxkIG5ldyBQcm9taXNlKChHMCwkMCk9''@;'; put 'put ''PntMYShHMCwkMCx7ZGF0YTpYaCxoZWFkZXJzOnBhLmZyb20oQ2EuaGVhZGVycyksc3RhdHVzOkNhLnN0YXR1cyxzdGF0dXNUZXh0OkNhLnN0YXR1c1RleHQsY29uZmlnOkJ0LHJlcXVlc3Q6X299KX0pfWNhdGNoKHpsKXt0aHJvdyBqaSYmamkoKSx6bCYmIlR5cGVFcnJvciI9PT16bC5uYW1l''@;'; put 'put ''JiYvZmV0Y2gvaS50ZXN0KHpsLm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IGl0KCJOZXR3b3JrIEVycm9yIixpdC5FUlJfTkVUV09SSyxCdCxfbykse2NhdXNlOnpsLmNhdXNlfHx6bH0pOml0LmZyb20oemwsemwmJnpsLmNvZGUsQnQsX28pfX0pO3JldHVybiBmdW5jdGlvbihCdCl7cmV0''@;'; put 'put ''dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7Y29uc3QgZWg9e2h0dHA6bnVsbCx4aHI6THUsZmV0Y2g6aGZ9O0R0LmZvckVhY2goZWgsKFN0LEJ0KT0+e2lmKFN0KXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LCJuYW1lIix7dmFsdWU6QnR9KX1jYXRjaHt9T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KFN0LCJhZGFwdGVyTmFtZSIse3ZhbHVlOkJ0fSl9fSk7Y29uc3QgZmY9U3Q9PmAtICR7U3R9YCxHaD1TdD0+RHQuaXNGdW5jdGlvbihTdCl8fG51bGw9PT1TdHx8ITE9PT1TdDt2YXIgT2NfZ2V0QWRhcHRlcj1TdD0+e1N0PUR0LmlzQXJyYXkoU3QpP1N0OltTdF07Y29u''@;'; put 'put ''c3R7bGVuZ3RoOkJ0fT1TdDtsZXQgX24sbW47Y29uc3QgSW49e307Zm9yKGxldCBibj0wO2JuPEJ0O2JuKyspe2xldCB1cjtpZihfbj1TdFtibl0sbW49X24sIUdoKF9uKSYmKG1uPWVoWyh1cj1TdHJpbmcoX24pKS50b0xvd2VyQ2FzZSgpXSx2b2lkIDA9PT1tbikpdGhyb3cgbmV3IGl0KGBV''@;'; put 'put ''bmtub3duIGFkYXB0ZXIgJyR7dXJ9J2ApO2lmKG1uKWJyZWFrO0luW3VyfHwiIyIrYm5dPW1ufWlmKCFtbil7Y29uc3QgYm49T2JqZWN0LmVudHJpZXMoSW4pLm1hcCgoW2JpLEZyXSk9PmBhZGFwdGVyICR7Yml9IGArKCExPT09RnI/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25t''@;'; put 'put ''ZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSk7dGhyb3cgbmV3IGl0KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrKEJ0P2JuLmxlbmd0aD4xPyJzaW5jZSA6XG4iK2JuLm1hcChmZikuam9pbigiXG4iKToiICIrZmYo''@;'; put 'put ''Ym5bMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCIpLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gbW59O2Z1bmN0aW9uIE5hKFN0KXtpZihTdC5jYW5jZWxUb2tlbiYmU3QuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLFN0LnNpZ25hbCYmU3Quc2lnbmFsLmFib3J0ZWQpdGhy''@;'; put 'put ''b3cgbmV3IHlhKG51bGwsU3QpfWZ1bmN0aW9uIEQzKFN0KXtyZXR1cm4gTmEoU3QpLFN0LmhlYWRlcnM9cGEuZnJvbShTdC5oZWFkZXJzKSxTdC5kYXRhPVFuLmNhbGwoU3QsU3QudHJhbnNmb3JtUmVxdWVzdCksLTEhPT1bInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoU3QubWV0aG9k''@;'; put 'put ''KSYmU3QuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksT2NfZ2V0QWRhcHRlcihTdC5hZGFwdGVyfHx1YS5hZGFwdGVyKShTdCkudGhlbihmdW5jdGlvbihtbil7cmV0dXJuIE5hKFN0KSxtbi5kYXRhPVFuLmNhbGwoU3QsU3Qu''@;'; put 'put ''dHJhbnNmb3JtUmVzcG9uc2UsbW4pLG1uLmhlYWRlcnM9cGEuZnJvbShtbi5oZWFkZXJzKSxtbn0sZnVuY3Rpb24obW4pe3JldHVybiBsYShtbil8fChOYShTdCksbW4mJm1uLnJlc3BvbnNlJiYobW4ucmVzcG9uc2UuZGF0YT1Rbi5jYWxsKFN0LFN0LnRyYW5zZm9ybVJlc3BvbnNlLG1uLnJl''@;'; put 'put ''c3BvbnNlKSxtbi5yZXNwb25zZS5oZWFkZXJzPXBhLmZyb20obW4ucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChtbil9KX1jb25zdCBLaD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKFN0LEJ0''@;'; put 'put ''KT0+e0toW1N0XT1mdW5jdGlvbihtbil7cmV0dXJuIHR5cGVvZiBtbj09PVN0fHwiYSIrKEJ0PDE/Im4gIjoiICIpK1N0fX0pO2NvbnN0IHFoPXt9O0toLnRyYW5zaXRpb25hbD1mdW5jdGlvbihCdCxfbixtbil7ZnVuY3Rpb24gSW4oYm4sdXIpe3JldHVybiJbQXhpb3MgdjEuOC4yXSBUcmFu''@;'; put 'put ''c2l0aW9uYWwgb3B0aW9uICciK2JuKyInIit1cisobW4/Ii4gIittbjoiIil9cmV0dXJuKGJuLHVyLGJpKT0+e2lmKCExPT09QnQpdGhyb3cgbmV3IGl0KEluKHVyLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKF9uPyIgaW4gIitfbjoiIikpLGl0LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gX24mJiFx''@;'; put 'put ''aFt1cl0mJihxaFt1cl09ITAsZy53YXJuKEluKHVyLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitfbisiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhQnR8fEJ0KGJuLHVyLGJpKX19LEtoLnNwZWxsaW5nPWZ1bmN0aW9uKEJ0KXtyZXR1cm4oX24s''@;'; put 'put ''bW4pPT4oZy53YXJuKGAke21ufSBpcyBsaWtlbHkgYSBtaXNzcGVsbGluZyBvZiAke0J0fWApLCEwKX07dmFyIGFuPXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uIEFuKFN0LEJ0LF9uKXtpZigib2JqZWN0IiE9dHlwZW9mIFN0KXRocm93IG5ldyBpdCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVj''@;'; put 'put ''dCIsaXQuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnN0IG1uPU9iamVjdC5rZXlzKFN0KTtsZXQgSW49bW4ubGVuZ3RoO2Zvcig7SW4tLSA+MDspe2NvbnN0IGJuPW1uW0luXSx1cj1CdFtibl07aWYodXIpe2NvbnN0IGJpPVN0W2JuXSxGcj12b2lkIDA9PT1iaXx8dXIoYmksYm4sU3QpO2lm''@;'; put 'put ''KCEwIT09RnIpdGhyb3cgbmV3IGl0KCJvcHRpb24gIitibisiIG11c3QgYmUgIitGcixpdC5FUlJfQkFEX09QVElPTl9WQUxVRSl9ZWxzZSBpZighMCE9PV9uKXRocm93IG5ldyBpdCgiVW5rbm93biBvcHRpb24gIitibixpdC5FUlJfQkFEX09QVElPTil9fSx2YWxpZGF0b3JzOktofTtjb25z''@;'; put 'put ''dCB2aT1hbi52YWxpZGF0b3JzO2NsYXNzIEFye2NvbnN0cnVjdG9yKEJ0KXt0aGlzLmRlZmF1bHRzPUJ0LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBBdCxyZXNwb25zZTpuZXcgQXR9fXJlcXVlc3QoQnQsX24pe3ZhciBtbj10aGlzO3JldHVybiBfYXN5bmNUb0dlbmVyYXRvcihm''@;'; put 'put ''dW5jdGlvbiooKXt0cnl7cmV0dXJuIHlpZWxkIG1uLl9yZXF1ZXN0KEJ0LF9uKX1jYXRjaChJbil7aWYoSW4gaW5zdGFuY2VvZiBFcnJvcil7bGV0IGJuPXt9O0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGJuKTpibj1uZXcgRXJyb3I7Y29uc3QgdXI9''@;'; put 'put ''Ym4uc3RhY2s/Ym4uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0cnl7SW4uc3RhY2s/dXImJiFTdHJpbmcoSW4uc3RhY2spLmVuZHNXaXRoKHVyLnJlcGxhY2UoL14uK1xuLitcbi8sIiIpKSYmKEluLnN0YWNrKz0iXG4iK3VyKTpJbi5zdGFjaz11cn1jYXRjaHt9fXRocm93IElufX0p''@;'; put 'put ''KCl9X3JlcXVlc3QoQnQsX24peyJzdHJpbmciPT10eXBlb2YgQnQ/KF9uPV9ufHx7fSkudXJsPUJ0Ol9uPUJ0fHx7fSxfbj1Kcih0aGlzLmRlZmF1bHRzLF9uKTtjb25zdHt0cmFuc2l0aW9uYWw6bW4scGFyYW1zU2VyaWFsaXplcjpJbixoZWFkZXJzOmJufT1fbjt2b2lkIDAhPT1tbiYmYW4u''@;'; put 'put ''YXNzZXJ0T3B0aW9ucyhtbix7c2lsZW50SlNPTlBhcnNpbmc6dmkudHJhbnNpdGlvbmFsKHZpLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOnZpLnRyYW5zaXRpb25hbCh2aS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOnZpLnRyYW5zaXRpb25hbCh2aS5ib29sZWFuKX0sITEpLG51''@;'; put 'put ''bGwhPUluJiYoRHQuaXNGdW5jdGlvbihJbik/X24ucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOklufTphbi5hc3NlcnRPcHRpb25zKEluLHtlbmNvZGU6dmkuZnVuY3Rpb24sc2VyaWFsaXplOnZpLmZ1bmN0aW9ufSwhMCkpLHZvaWQgMCE9PV9uLmFsbG93QWJzb2x1dGVVcmxzfHwoX24u''@;'; put 'put ''YWxsb3dBYnNvbHV0ZVVybHM9dm9pZCAwPT09dGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJsc3x8dGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscyksYW4uYXNzZXJ0T3B0aW9ucyhfbix7YmFzZVVybDp2aS5zcGVsbGluZygiYmFzZVVSTCIpLHdpdGhYc3JmVG9rZW46dmkuc3Bl''@;'; put 'put ''bGxpbmcoIndpdGhYU1JGVG9rZW4iKX0sITApLF9uLm1ldGhvZD0oX24ubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IHVyPWJuJiZEdC5tZXJnZShibi5jb21tb24sYm5bX24ubWV0aG9kXSk7Ym4mJkR0LmZvckVhY2goWyJkZWxldGUiLCJn''@;'; put 'put ''ZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sdG89PntkZWxldGUgYm5bdG9dfSksX24uaGVhZGVycz1wYS5jb25jYXQodXIsYm4pO2NvbnN0IGJpPVtdO2xldCBGcj0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oX28peyJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBfby5ydW5XaGVuJiYhMT09PV9vLnJ1bldoZW4oX24pfHwoRnI9RnImJl9vLnN5bmNocm9ub3VzLGJpLnVuc2hpZnQoX28uZnVsZmlsbGVkLF9vLnJlamVjdGVkKSl9KTtjb25zdCB0YT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KF9vKXt0YS5wdXNoKF9vLmZ1bGZpbGxlZCxfby5yZWplY3RlZCl9KTtsZXQgb2EsJG8sVmE9MDtpZighRnIpe2NvbnN0IHRvPVtEMy5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKHRvLnVuc2hpZnQuYXBwbHkodG8sYmkpLHRvLnB1c2guYXBwbHkodG8sdGEpLCRvPXRvLmxlbmd0aCxvYT1Qcm9t''@;'; put 'put ''aXNlLnJlc29sdmUoX24pO1ZhPCRvOylvYT1vYS50aGVuKHRvW1ZhKytdLHRvW1ZhKytdKTtyZXR1cm4gb2F9JG89YmkubGVuZ3RoO2xldCBYbD1fbjtmb3IoVmE9MDtWYTwkbzspe2NvbnN0IHRvPWJpW1ZhKytdLF9vPWJpW1ZhKytdO3RyeXtYbD10byhYbCl9Y2F0Y2goamkpe19vLmNhbGwo''@;'; put 'put ''dGhpcyxqaSk7YnJlYWt9fXRyeXtvYT1EMy5jYWxsKHRoaXMsWGwpfWNhdGNoKHRvKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QodG8pfWZvcihWYT0wLCRvPXRhLmxlbmd0aDtWYTwkbzspb2E9b2EudGhlbih0YVtWYSsrXSx0YVtWYSsrXSk7cmV0dXJuIG9hfWdldFVyaShCdCl7cmV0dXJuIE9y''@;'; put 'put ''KHVpKChCdD1Kcih0aGlzLmRlZmF1bHRzLEJ0KSkuYmFzZVVSTCxCdC51cmwsQnQuYWxsb3dBYnNvbHV0ZVVybHMpLEJ0LnBhcmFtcyxCdC5wYXJhbXNTZXJpYWxpemVyKX19RHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oQnQpe0FyLnByb3Rv''@;'; put 'put ''dHlwZVtCdF09ZnVuY3Rpb24oX24sbW4pe3JldHVybiB0aGlzLnJlcXVlc3QoSnIobW58fHt9LHttZXRob2Q6QnQsdXJsOl9uLGRhdGE6KG1ufHx7fSkuZGF0YX0pKX19KSxEdC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oQnQpe2Z1bmN0aW9uIF9uKG1uKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oYm4sdXIsYmkpe3JldHVybiB0aGlzLnJlcXVlc3QoSnIoYml8fHt9LHttZXRob2Q6QnQsaGVhZGVyczptbj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6Ym4sZGF0YTp1cn0pKX19QXIucHJvdG90eXBlW0J0XT1fbigpLEFyLnByb3Rv''@;'; put 'put ''dHlwZVtCdCsiRm9ybSJdPV9uKCEwKX0pO3ZhciBQbz1BcjtjbGFzcyBlb3tjb25zdHJ1Y3RvcihCdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEJ0KXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgX247dGhpcy5wcm9taXNlPW5ldyBQcm9t''@;'; put 'put ''aXNlKGZ1bmN0aW9uKGJuKXtfbj1ibn0pO2NvbnN0IG1uPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oSW49PntpZighbW4uX2xpc3RlbmVycylyZXR1cm47bGV0IGJuPW1uLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7Ym4tLSA+MDspbW4uX2xpc3RlbmVyc1tibl0oSW4pO21uLl9saXN0ZW5lcnM9''@;'; put 'put ''bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPUluPT57bGV0IGJuO2NvbnN0IHVyPW5ldyBQcm9taXNlKGJpPT57bW4uc3Vic2NyaWJlKGJpKSxibj1iaX0pLnRoZW4oSW4pO3JldHVybiB1ci5jYW5jZWw9ZnVuY3Rpb24oKXttbi51bnN1YnNjcmliZShibil9LHVyfSxCdChmdW5jdGlvbihibix1''@;'; put 'put ''cixiaSl7bW4ucmVhc29ufHwobW4ucmVhc29uPW5ldyB5YShibix1cixiaSksX24obW4ucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKEJ0KXt0aGlzLnJlYXNvbj9CdCh0aGlzLnJlYXNvbik6dGhpcy5fbGlz''@;'; put 'put ''dGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEJ0KTp0aGlzLl9saXN0ZW5lcnM9W0J0XX11bnN1YnNjcmliZShCdCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47Y29uc3QgX249dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoQnQpOy0xIT09X24mJnRoaXMuX2xpc3RlbmVycy5zcGxpY2Uo''@;'; put 'put ''X24sMSl9dG9BYm9ydFNpZ25hbCgpe2NvbnN0IEJ0PW5ldyBBYm9ydENvbnRyb2xsZXIsX249bW49PntCdC5hYm9ydChtbil9O3JldHVybiB0aGlzLnN1YnNjcmliZShfbiksQnQuc2lnbmFsLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKF9uKSxCdC5zaWduYWx9c3RhdGljIHNv''@;'; put 'put ''dXJjZSgpe2xldCBCdDtyZXR1cm57dG9rZW46bmV3IGVvKGZ1bmN0aW9uKEluKXtCdD1Jbn0pLGNhbmNlbDpCdH19fXZhciBvbD1lbztjb25zdCBTcz17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0''@;'; put 'put ''ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6''@;'; put 'put ''MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQ''@;'; put 'put ''YXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhS''@;'; put 'put ''ZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3Rl''@;'; put 'put ''ZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxk''@;'; put 'put ''c1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9y''@;'; put 'put ''dGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoU3MpLmZvckVhY2goKFtTdCxCdF0pPT57''@;'; put 'put ''U3NbQnRdPVN0fSk7dmFyIGpsPVNzO2NvbnN0IGtvPWZ1bmN0aW9uIEhvKFN0KXtjb25zdCBCdD1uZXcgUG8oU3QpLF9uPUIoUG8ucHJvdG90eXBlLnJlcXVlc3QsQnQpO3JldHVybiBEdC5leHRlbmQoX24sUG8ucHJvdG90eXBlLEJ0LHthbGxPd25LZXlzOiEwfSksRHQuZXh0ZW5kKF9uLEJ0''@;'; put 'put ''LG51bGwse2FsbE93bktleXM6ITB9KSxfbi5jcmVhdGU9ZnVuY3Rpb24oSW4pe3JldHVybiBIbyhKcihTdCxJbikpfSxfbn0odWEpO2tvLkF4aW9zPVBvLGtvLkNhbmNlbGVkRXJyb3I9eWEsa28uQ2FuY2VsVG9rZW49b2wsa28uaXNDYW5jZWw9bGEsa28uVkVSU0lPTj0iMS44LjIiLGtvLnRv''@;'; put 'put ''Rm9ybURhdGE9UXQsa28uQXhpb3NFcnJvcj1pdCxrby5DYW5jZWw9a28uQ2FuY2VsZWRFcnJvcixrby5hbGw9ZnVuY3Rpb24oQnQpe3JldHVybiBQcm9taXNlLmFsbChCdCl9LGtvLnNwcmVhZD1mdW5jdGlvbiB6byhTdCl7cmV0dXJuIGZ1bmN0aW9uKF9uKXtyZXR1cm4gU3QuYXBwbHkobnVs''@;'; put 'put ''bCxfbil9fSxrby5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24gVnMoU3Qpe3JldHVybiBEdC5pc09iamVjdChTdCkmJiEwPT09U3QuaXNBeGlvc0Vycm9yfSxrby5tZXJnZUNvbmZpZz1Kcixrby5BeGlvc0hlYWRlcnM9cGEsa28uZm9ybVRvSlNPTj1TdD0+SWkoRHQuaXNIVE1MRm9ybShTdCk/bmV3''@;'; put 'put ''IEZvcm1EYXRhKFN0KTpTdCksa28uZ2V0QWRhcHRlcj1PY19nZXRBZGFwdGVyLGtvLkh0dHBTdGF0dXNDb2RlPWpsLGtvLmRlZmF1bHQ9a28sdWUuZXhwb3J0cz1rb30sODU2NjoodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEksXztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhYLHtfX2VzTW9k''@;'; put 'put ''dWxlOnt2YWx1ZTohMH0sW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOiJNb2R1bGUifX0pO2NvbnN0IHc9ZnVuY3Rpb24geShZKXtyZXR1cm4gWSYmWS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWSwiZGVmYXVsdCIpP1kuZGVmYXVsdDpZfShm''@;'; put 'put ''dW5jdGlvbiBnKCl7aWYoXylyZXR1cm4gSTtfPTE7Y29uc3QgWT0yMTQ3NDgzNjQ3LHE9MzYsVGU9L154bi0tLyxTZT0vW15cMC1ceDdGXS8samU9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLFY9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8g''@;'; put 'put ''cHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LGI9TWF0aC5mbG9vcix4PVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gQyh3ZSl7dGhyb3cgbmV3IFJh''@;'; put 'put ''bmdlRXJyb3IoVlt3ZV0pfWZ1bmN0aW9uIEgod2UsVWUpe2NvbnN0IEplPXdlLnNwbGl0KCJAIik7bGV0IG90PSIiO0plLmxlbmd0aD4xJiYob3Q9SmVbMF0rIkAiLHdlPUplWzFdKTtjb25zdCB2ZT1mdW5jdGlvbiBUKHdlLFVlKXtjb25zdCBKZT1bXTtsZXQgb3Q9d2UubGVuZ3RoO2Zvcig7''@;'; put 'put ''b3QtLTspSmVbb3RdPVVlKHdlW290XSk7cmV0dXJuIEplfSgod2U9d2UucmVwbGFjZShqZSwiLiIpKS5zcGxpdCgiLiIpLFVlKS5qb2luKCIuIik7cmV0dXJuIG90K3ZlfWZ1bmN0aW9uIGood2Upe2NvbnN0IFVlPVtdO2xldCBKZT0wO2NvbnN0IG90PXdlLmxlbmd0aDtmb3IoO0plPG90Oyl7''@;'; put 'put ''Y29uc3QgeGU9d2UuY2hhckNvZGVBdChKZSsrKTtpZih4ZT49NTUyOTYmJnhlPD01NjMxOSYmSmU8b3Qpe2NvbnN0IHZlPXdlLmNoYXJDb2RlQXQoSmUrKyk7NTYzMjA9PSg2NDUxMiZ2ZSk/VWUucHVzaCgoKDEwMjMmeGUpPDwxMCkrKDEwMjMmdmUpKzY1NTM2KTooVWUucHVzaCh4ZSksSmUt''@;'; put 'put ''LSl9ZWxzZSBVZS5wdXNoKHhlKX1yZXR1cm4gVWV9Y29uc3QgbT1mdW5jdGlvbih3ZSl7cmV0dXJuIHdlPj00OCYmd2U8NTg/d2UtNDgrMjY6d2U+PTY1JiZ3ZTw5MT93ZS02NTp3ZT49OTcmJndlPDEyMz93ZS05NzpxfSxBPWZ1bmN0aW9uKHdlLFVlKXtyZXR1cm4gd2UrMjIrNzUqKHdlPDI2''@;'; put 'put ''KS0oKDAhPVVlKTw8NSl9LGFlPWZ1bmN0aW9uKHdlLFVlLEplKXtsZXQgb3Q9MDtmb3Iod2U9SmU/Yih3ZS83MDApOndlPj4xLHdlKz1iKHdlL1VlKTt3ZT40NTU7b3QrPXEpd2U9Yih3ZS8zNSk7cmV0dXJuIGIob3QrMzYqd2UvKHdlKzM4KSl9LHRlPWZ1bmN0aW9uKHdlKXtjb25zdCBVZT1b''@;'; put 'put ''XSxKZT13ZS5sZW5ndGg7bGV0IG90PTAseGU9MTI4LHZlPTcyLFhlPXdlLmxhc3RJbmRleE9mKCItIik7WGU8MCYmKFhlPTApO2ZvcihsZXQgemU9MDt6ZTxYZTsrK3plKXdlLmNoYXJDb2RlQXQoemUpPj0xMjgmJkMoIm5vdC1iYXNpYyIpLFVlLnB1c2god2UuY2hhckNvZGVBdCh6ZSkpO2Zv''@;'; put 'put ''cihsZXQgemU9WGU+MD9YZSsxOjA7emU8SmU7KXtjb25zdCBEZT1vdDtmb3IobGV0IE9lPTEsSWU9cTs7SWUrPXEpe3plPj1KZSYmQygiaW52YWxpZC1pbnB1dCIpO2NvbnN0IFZlPW0od2UuY2hhckNvZGVBdCh6ZSsrKSk7VmU+PXEmJkMoImludmFsaWQtaW5wdXQiKSxWZT5iKChZLW90KS9P''@;'; put 'put ''ZSkmJkMoIm92ZXJmbG93Iiksb3QrPVZlKk9lO2NvbnN0IGtlPUllPD12ZT8xOkllPj12ZSsyNj8yNjpJZS12ZTtpZihWZTxrZSlicmVhaztjb25zdCBBZT1xLWtlO09lPmIoWS9BZSkmJkMoIm92ZXJmbG93IiksT2UqPUFlfWNvbnN0IEZlPVVlLmxlbmd0aCsxO3ZlPWFlKG90LURlLEZlLDA9''@;'; put 'put ''PURlKSxiKG90L0ZlKT5ZLXhlJiZDKCJvdmVyZmxvdyIpLHhlKz1iKG90L0ZlKSxvdCU9RmUsVWUuc3BsaWNlKG90KyssMCx4ZSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLlVlKX0sc2U9ZnVuY3Rpb24od2Upe2NvbnN0IFVlPVtdLEplPSh3ZT1qKHdlKSkubGVuZ3RoO2xldCBv''@;'; put 'put ''dD0xMjgseGU9MCx2ZT03Mjtmb3IoY29uc3QgRGUgb2Ygd2UpRGU8MTI4JiZVZS5wdXNoKHgoRGUpKTtjb25zdCBYZT1VZS5sZW5ndGg7bGV0IHplPVhlO2ZvcihYZSYmVWUucHVzaCgiLSIpO3plPEplOyl7bGV0IERlPVk7Zm9yKGNvbnN0IE9lIG9mIHdlKU9lPj1vdCYmT2U8RGUmJihEZT1P''@;'; put 'put ''ZSk7Y29uc3QgRmU9emUrMTtEZS1vdD5iKChZLXhlKS9GZSkmJkMoIm92ZXJmbG93IikseGUrPShEZS1vdCkqRmUsb3Q9RGU7Zm9yKGNvbnN0IE9lIG9mIHdlKWlmKE9lPG90JiYrK3hlPlkmJkMoIm92ZXJmbG93IiksT2U9PT1vdCl7bGV0IEllPXhlO2ZvcihsZXQgVmU9cTs7VmUrPXEpe2Nv''@;'; put 'put ''bnN0IGtlPVZlPD12ZT8xOlZlPj12ZSsyNj8yNjpWZS12ZTtpZihJZTxrZSlicmVhaztjb25zdCBBZT1JZS1rZSxfdD1xLWtlO1VlLnB1c2goeChBKGtlK0FlJV90LDApKSksSWU9YihBZS9fdCl9VWUucHVzaCh4KEEoSWUsMCkpKSx2ZT1hZSh4ZSxGZSx6ZT09PVhlKSx4ZT0wLCsremV9Kyt4''@;'; put 'put ''ZSwrK290fXJldHVybiBVZS5qb2luKCIiKX07cmV0dXJuIEk9e3ZlcnNpb246IjIuMy4xIix1Y3MyOntkZWNvZGU6aixlbmNvZGU6d2U9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLndlKX0sZGVjb2RlOnRlLGVuY29kZTpzZSx0b0FTQ0lJOmZ1bmN0aW9uKHdlKXtyZXR1cm4gSCh3ZSxmdW5j''@;'; put 'put ''dGlvbihVZSl7cmV0dXJuIFNlLnRlc3QoVWUpPyJ4bi0tIitzZShVZSk6VWV9KX0sdG9Vbmljb2RlOmZ1bmN0aW9uKHdlKXtyZXR1cm4gSCh3ZSxmdW5jdGlvbihVZSl7cmV0dXJuIFRlLnRlc3QoVWUpP3RlKFVlLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOlVlfSl9fX0oKSksRj1bImFjIiwi''@;'; put 'put ''Y29tLmFjIiwiZWR1LmFjIiwiZ292LmFjIiwibWlsLmFjIiwibmV0LmFjIiwib3JnLmFjIiwiYWQiLCJhZSIsImFjLmFlIiwiY28uYWUiLCJnb3YuYWUiLCJtaWwuYWUiLCJuZXQuYWUiLCJvcmcuYWUiLCJzY2guYWUiLCJhZXJvIiwiYWlybGluZS5hZXJvIiwiYWlycG9ydC5hZXJvIiwiYWNj''@;'; put 'put ''aWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJvIiwiYWNjaWRlbnQtcHJldmVudGlvbi5hZXJvIiwiYWVyb2JhdGljLmFlcm8iLCJhZXJvY2x1Yi5hZXJvIiwiYWVyb2Ryb21lLmFlcm8iLCJhZ2VudHMuYWVybyIsImFpci1zdXJ2ZWlsbGFuY2UuYWVybyIsImFpci10cmFmZmljLWNvbnRyb2wuYWVy''@;'; put 'put ''byIsImFpcmNyYWZ0LmFlcm8iLCJhaXJ0cmFmZmljLmFlcm8iLCJhbWJ1bGFuY2UuYWVybyIsImFzc29jaWF0aW9uLmFlcm8iLCJhdXRob3IuYWVybyIsImJhbGxvb25pbmcuYWVybyIsImJyb2tlci5hZXJvIiwiY2FhLmFlcm8iLCJjYXJnby5hZXJvIiwiY2F0ZXJpbmcuYWVybyIsImNlcnRp''@;'; put 'put ''ZmljYXRpb24uYWVybyIsImNoYW1waW9uc2hpcC5hZXJvIiwiY2hhcnRlci5hZXJvIiwiY2l2aWxhdmlhdGlvbi5hZXJvIiwiY2x1Yi5hZXJvIiwiY29uZmVyZW5jZS5hZXJvIiwiY29uc3VsdGFudC5hZXJvIiwiY29uc3VsdGluZy5hZXJvIiwiY29udHJvbC5hZXJvIiwiY291bmNpbC5hZXJv''@;'; put 'put ''IiwiY3Jldy5hZXJvIiwiZGVzaWduLmFlcm8iLCJkZ2NhLmFlcm8iLCJlZHVjYXRvci5hZXJvIiwiZW1lcmdlbmN5LmFlcm8iLCJlbmdpbmUuYWVybyIsImVuZ2luZWVyLmFlcm8iLCJlbnRlcnRhaW5tZW50LmFlcm8iLCJlcXVpcG1lbnQuYWVybyIsImV4Y2hhbmdlLmFlcm8iLCJleHByZXNz''@;'; put 'put ''LmFlcm8iLCJmZWRlcmF0aW9uLmFlcm8iLCJmbGlnaHQuYWVybyIsImZyZWlnaHQuYWVybyIsImZ1ZWwuYWVybyIsImdsaWRpbmcuYWVybyIsImdvdmVybm1lbnQuYWVybyIsImdyb3VuZGhhbmRsaW5nLmFlcm8iLCJncm91cC5hZXJvIiwiaGFuZ2dsaWRpbmcuYWVybyIsImhvbWVidWlsdC5h''@;'; put 'put ''ZXJvIiwiaW5zdXJhbmNlLmFlcm8iLCJqb3VybmFsLmFlcm8iLCJqb3VybmFsaXN0LmFlcm8iLCJsZWFzaW5nLmFlcm8iLCJsb2dpc3RpY3MuYWVybyIsIm1hZ2F6aW5lLmFlcm8iLCJtYWludGVuYW5jZS5hZXJvIiwibWFya2V0cGxhY2UuYWVybyIsIm1lZGlhLmFlcm8iLCJtaWNyb2xpZ2h0''@;'; put 'put ''LmFlcm8iLCJtb2RlbGxpbmcuYWVybyIsIm5hdmlnYXRpb24uYWVybyIsInBhcmFjaHV0aW5nLmFlcm8iLCJwYXJhZ2xpZGluZy5hZXJvIiwicGFzc2VuZ2VyLWFzc29jaWF0aW9uLmFlcm8iLCJwaWxvdC5hZXJvIiwicHJlc3MuYWVybyIsInByb2R1Y3Rpb24uYWVybyIsInJlY3JlYXRpb24u''@;'; put 'put ''YWVybyIsInJlcGJvZHkuYWVybyIsInJlcy5hZXJvIiwicmVzZWFyY2guYWVybyIsInJvdG9yY3JhZnQuYWVybyIsInNhZmV0eS5hZXJvIiwic2NpZW50aXN0LmFlcm8iLCJzZXJ2aWNlcy5hZXJvIiwic2hvdy5hZXJvIiwic2t5ZGl2aW5nLmFlcm8iLCJzb2Z0d2FyZS5hZXJvIiwic3R1ZGVu''@;'; put 'put ''dC5hZXJvIiwidGF4aS5hZXJvIiwidHJhZGVyLmFlcm8iLCJ0cmFkaW5nLmFlcm8iLCJ0cmFpbmVyLmFlcm8iLCJ1bmlvbi5hZXJvIiwid29ya2luZ2dyb3VwLmFlcm8iLCJ3b3Jrcy5hZXJvIiwiYWYiLCJjb20uYWYiLCJlZHUuYWYiLCJnb3YuYWYiLCJuZXQuYWYiLCJvcmcuYWYiLCJhZyIs''@;'; put 'put ''ImNvLmFnIiwiY29tLmFnIiwibmV0LmFnIiwibm9tLmFnIiwib3JnLmFnIiwiYWkiLCJjb20uYWkiLCJuZXQuYWkiLCJvZmYuYWkiLCJvcmcuYWkiLCJhbCIsImNvbS5hbCIsImVkdS5hbCIsImdvdi5hbCIsIm1pbC5hbCIsIm5ldC5hbCIsIm9yZy5hbCIsImFtIiwiY28uYW0iLCJjb20uYW0i''@;'; put 'put ''LCJjb21tdW5lLmFtIiwibmV0LmFtIiwib3JnLmFtIiwiYW8iLCJjby5hbyIsImVkLmFvIiwiZWR1LmFvIiwiZ292LmFvIiwiZ3YuYW8iLCJpdC5hbyIsIm9nLmFvIiwib3JnLmFvIiwicGIuYW8iLCJhcSIsImFyIiwiYmV0LmFyIiwiY29tLmFyIiwiY29vcC5hciIsImVkdS5hciIsImdvYi5h''@;'; put 'put ''ciIsImdvdi5hciIsImludC5hciIsIm1pbC5hciIsIm11c2ljYS5hciIsIm11dHVhbC5hciIsIm5ldC5hciIsIm9yZy5hciIsInNlbmFzYS5hciIsInR1ci5hciIsImFycGEiLCJlMTY0LmFycGEiLCJob21lLmFycGEiLCJpbi1hZGRyLmFycGEiLCJpcDYuYXJwYSIsImlyaXMuYXJwYSIsInVy''@;'; put 'put ''aS5hcnBhIiwidXJuLmFycGEiLCJhcyIsImdvdi5hcyIsImFzaWEiLCJhdCIsImFjLmF0Iiwic3RoLmFjLmF0IiwiY28uYXQiLCJndi5hdCIsIm9yLmF0IiwiYXUiLCJhc24uYXUiLCJjb20uYXUiLCJlZHUuYXUiLCJnb3YuYXUiLCJpZC5hdSIsIm5ldC5hdSIsIm9yZy5hdSIsImNvbmYuYXUi''@;'; put 'put ''LCJvei5hdSIsImFjdC5hdSIsIm5zdy5hdSIsIm50LmF1IiwicWxkLmF1Iiwic2EuYXUiLCJ0YXMuYXUiLCJ2aWMuYXUiLCJ3YS5hdSIsImFjdC5lZHUuYXUiLCJjYXRob2xpYy5lZHUuYXUiLCJuc3cuZWR1LmF1IiwibnQuZWR1LmF1IiwicWxkLmVkdS5hdSIsInNhLmVkdS5hdSIsInRhcy5l''@;'; put 'put ''ZHUuYXUiLCJ2aWMuZWR1LmF1Iiwid2EuZWR1LmF1IiwicWxkLmdvdi5hdSIsInNhLmdvdi5hdSIsInRhcy5nb3YuYXUiLCJ2aWMuZ292LmF1Iiwid2EuZ292LmF1Iiwic2Nob29scy5uc3cuZWR1LmF1IiwiYXciLCJjb20uYXciLCJheCIsImF6IiwiYml6LmF6IiwiY29tLmF6IiwiZWR1LmF6''@;'; put 'put ''IiwiZ292LmF6IiwiaW5mby5heiIsImludC5heiIsIm1pbC5heiIsIm5hbWUuYXoiLCJuZXQuYXoiLCJvcmcuYXoiLCJwcC5heiIsInByby5heiIsImJhIiwiY29tLmJhIiwiZWR1LmJhIiwiZ292LmJhIiwibWlsLmJhIiwibmV0LmJhIiwib3JnLmJhIiwiYmIiLCJiaXouYmIiLCJjby5iYiIs''@;'; put 'put ''ImNvbS5iYiIsImVkdS5iYiIsImdvdi5iYiIsImluZm8uYmIiLCJuZXQuYmIiLCJvcmcuYmIiLCJzdG9yZS5iYiIsInR2LmJiIiwiKi5iZCIsImJlIiwiYWMuYmUiLCJiZiIsImdvdi5iZiIsImJnIiwiMC5iZyIsIjEuYmciLCIyLmJnIiwiMy5iZyIsIjQuYmciLCI1LmJnIiwiNi5iZyIsIjcu''@;'; put 'put ''YmciLCI4LmJnIiwiOS5iZyIsImEuYmciLCJiLmJnIiwiYy5iZyIsImQuYmciLCJlLmJnIiwiZi5iZyIsImcuYmciLCJoLmJnIiwiaS5iZyIsImouYmciLCJrLmJnIiwibC5iZyIsIm0uYmciLCJuLmJnIiwiby5iZyIsInAuYmciLCJxLmJnIiwici5iZyIsInMuYmciLCJ0LmJnIiwidS5iZyIs''@;'; put 'put ''InYuYmciLCJ3LmJnIiwieC5iZyIsInkuYmciLCJ6LmJnIiwiYmgiLCJjb20uYmgiLCJlZHUuYmgiLCJnb3YuYmgiLCJuZXQuYmgiLCJvcmcuYmgiLCJiaSIsImNvLmJpIiwiY29tLmJpIiwiZWR1LmJpIiwib3IuYmkiLCJvcmcuYmkiLCJiaXoiLCJiaiIsImFmcmljYS5iaiIsImFncm8uYmoi''@;'; put 'put ''LCJhcmNoaXRlY3Rlcy5iaiIsImFzc3VyLmJqIiwiYXZvY2F0cy5iaiIsImNvLmJqIiwiY29tLmJqIiwiZWNvLmJqIiwiZWNvbm8uYmoiLCJlZHUuYmoiLCJpbmZvLmJqIiwibG9pc2lycy5iaiIsIm1vbmV5LmJqIiwibmV0LmJqIiwib3JnLmJqIiwib3RlLmJqIiwicmVzdGF1cmFudC5iaiIs''@;'; put 'put ''InJlc3RvLmJqIiwidG91cmlzbS5iaiIsInVuaXYuYmoiLCJibSIsImNvbS5ibSIsImVkdS5ibSIsImdvdi5ibSIsIm5ldC5ibSIsIm9yZy5ibSIsImJuIiwiY29tLmJuIiwiZWR1LmJuIiwiZ292LmJuIiwibmV0LmJuIiwib3JnLmJuIiwiYm8iLCJjb20uYm8iLCJlZHUuYm8iLCJnb2IuYm8i''@;'; put 'put ''LCJpbnQuYm8iLCJtaWwuYm8iLCJuZXQuYm8iLCJvcmcuYm8iLCJ0di5ibyIsIndlYi5ibyIsImFjYWRlbWlhLmJvIiwiYWdyby5ibyIsImFydGUuYm8iLCJibG9nLmJvIiwiYm9saXZpYS5ibyIsImNpZW5jaWEuYm8iLCJjb29wZXJhdGl2YS5ibyIsImRlbW9jcmFjaWEuYm8iLCJkZXBvcnRl''@;'; put 'put ''LmJvIiwiZWNvbG9naWEuYm8iLCJlY29ub21pYS5ibyIsImVtcHJlc2EuYm8iLCJpbmRpZ2VuYS5ibyIsImluZHVzdHJpYS5ibyIsImluZm8uYm8iLCJtZWRpY2luYS5ibyIsIm1vdmltaWVudG8uYm8iLCJtdXNpY2EuYm8iLCJuYXR1cmFsLmJvIiwibm9tYnJlLmJvIiwibm90aWNpYXMuYm8i''@;'; put 'put ''LCJwYXRyaWEuYm8iLCJwbHVyaW5hY2lvbmFsLmJvIiwicG9saXRpY2EuYm8iLCJwcm9mZXNpb25hbC5ibyIsInB1ZWJsby5ibyIsInJldmlzdGEuYm8iLCJzYWx1ZC5ibyIsInRlY25vbG9naWEuYm8iLCJ0a3NhdC5ibyIsInRyYW5zcG9ydGUuYm8iLCJ3aWtpLmJvIiwiYnIiLCI5Z3VhY3Uu''@;'; put 'put ''YnIiLCJhYmMuYnIiLCJhZG0uYnIiLCJhZHYuYnIiLCJhZ3IuYnIiLCJhanUuYnIiLCJhbS5iciIsImFuYW5pLmJyIiwiYXBhcmVjaWRhLmJyIiwiYXBwLmJyIiwiYXJxLmJyIiwiYXJ0LmJyIiwiYXRvLmJyIiwiYi5iciIsImJhcnVlcmkuYnIiLCJiZWxlbS5iciIsImJldC5iciIsImJoei5i''@;'; put 'put ''ciIsImJpYi5iciIsImJpby5iciIsImJsb2cuYnIiLCJibWQuYnIiLCJib2F2aXN0YS5iciIsImJzYi5iciIsImNhbXBpbmFncmFuZGUuYnIiLCJjYW1waW5hcy5iciIsImNheGlhcy5iciIsImNpbS5iciIsImNuZy5iciIsImNudC5iciIsImNvbS5iciIsImNvbnRhZ2VtLmJyIiwiY29vcC5i''@;'; put 'put ''ciIsImNvei5iciIsImNyaS5iciIsImN1aWFiYS5iciIsImN1cml0aWJhLmJyIiwiZGVmLmJyIiwiZGVzLmJyIiwiZGV0LmJyIiwiZGV2LmJyIiwiZWNuLmJyIiwiZWNvLmJyIiwiZWR1LmJyIiwiZW1wLmJyIiwiZW5mLmJyIiwiZW5nLmJyIiwiZXNwLmJyIiwiZXRjLmJyIiwiZXRpLmJyIiwi''@;'; put 'put ''ZmFyLmJyIiwiZmVpcmEuYnIiLCJmbG9nLmJyIiwiZmxvcmlwYS5iciIsImZtLmJyIiwiZm5kLmJyIiwiZm9ydGFsLmJyIiwiZm90LmJyIiwiZm96LmJyIiwiZnN0LmJyIiwiZzEyLmJyIiwiZ2VvLmJyIiwiZ2dmLmJyIiwiZ29pYW5pYS5iciIsImdvdi5iciIsImFjLmdvdi5iciIsImFsLmdv''@;'; put 'put ''di5iciIsImFtLmdvdi5iciIsImFwLmdvdi5iciIsImJhLmdvdi5iciIsImNlLmdvdi5iciIsImRmLmdvdi5iciIsImVzLmdvdi5iciIsImdvLmdvdi5iciIsIm1hLmdvdi5iciIsIm1nLmdvdi5iciIsIm1zLmdvdi5iciIsIm10Lmdvdi5iciIsInBhLmdvdi5iciIsInBiLmdvdi5iciIsInBl''@;'; put 'put ''Lmdvdi5iciIsInBpLmdvdi5iciIsInByLmdvdi5iciIsInJqLmdvdi5iciIsInJuLmdvdi5iciIsInJvLmdvdi5iciIsInJyLmdvdi5iciIsInJzLmdvdi5iciIsInNjLmdvdi5iciIsInNlLmdvdi5iciIsInNwLmdvdi5iciIsInRvLmdvdi5iciIsImdydS5iciIsImltYi5iciIsImluZC5i''@;'; put 'put ''ciIsImluZi5iciIsImphYi5iciIsImphbXBhLmJyIiwiamRmLmJyIiwiam9pbnZpbGxlLmJyIiwiam9yLmJyIiwianVzLmJyIiwibGVnLmJyIiwibGVpbGFvLmJyIiwibGVsLmJyIiwibG9nLmJyIiwibG9uZHJpbmEuYnIiLCJtYWNhcGEuYnIiLCJtYWNlaW8uYnIiLCJtYW5hdXMuYnIiLCJt''@;'; put 'put ''YXJpbmdhLmJyIiwibWF0LmJyIiwibWVkLmJyIiwibWlsLmJyIiwibW9yZW5hLmJyIiwibXAuYnIiLCJtdXMuYnIiLCJuYXRhbC5iciIsIm5ldC5iciIsIm5pdGVyb2kuYnIiLCIqLm5vbS5iciIsIm5vdC5iciIsIm50ci5iciIsIm9kby5iciIsIm9uZy5iciIsIm9yZy5iciIsIm9zYXNjby5i''@;'; put 'put ''ciIsInBhbG1hcy5iciIsInBvYS5iciIsInBwZy5iciIsInByby5iciIsInBzYy5iciIsInBzaS5iciIsInB2aC5iciIsInFzbC5iciIsInJhZGlvLmJyIiwicmVjLmJyIiwicmVjaWZlLmJyIiwicmVwLmJyIiwicmliZWlyYW8uYnIiLCJyaW8uYnIiLCJyaW9icmFuY28uYnIiLCJyaW9wcmV0''@;'; put 'put ''by5iciIsInNhbHZhZG9yLmJyIiwic2FtcGEuYnIiLCJzYW50YW1hcmlhLmJyIiwic2FudG9hbmRyZS5iciIsInNhb2Jlcm5hcmRvLmJyIiwic2FvZ29uY2EuYnIiLCJzZWcuYnIiLCJzamMuYnIiLCJzbGcuYnIiLCJzbHouYnIiLCJzb3JvY2FiYS5iciIsInNydi5iciIsInRheGkuYnIiLCJ0''@;'; put 'put ''Yy5iciIsInRlYy5iciIsInRlby5iciIsInRoZS5iciIsInRtcC5iciIsInRyZC5iciIsInR1ci5iciIsInR2LmJyIiwidWRpLmJyIiwidmV0LmJyIiwidml4LmJyIiwidmxvZy5iciIsIndpa2kuYnIiLCJ6bGcuYnIiLCJicyIsImNvbS5icyIsImVkdS5icyIsImdvdi5icyIsIm5ldC5icyIs''@;'; put 'put ''Im9yZy5icyIsImJ0IiwiY29tLmJ0IiwiZWR1LmJ0IiwiZ292LmJ0IiwibmV0LmJ0Iiwib3JnLmJ0IiwiYnYiLCJidyIsImNvLmJ3Iiwib3JnLmJ3IiwiYnkiLCJnb3YuYnkiLCJtaWwuYnkiLCJjb20uYnkiLCJvZi5ieSIsImJ6IiwiY28uYnoiLCJjb20uYnoiLCJlZHUuYnoiLCJnb3YuYnoi''@;'; put 'put ''LCJuZXQuYnoiLCJvcmcuYnoiLCJjYSIsImFiLmNhIiwiYmMuY2EiLCJtYi5jYSIsIm5iLmNhIiwibmYuY2EiLCJubC5jYSIsIm5zLmNhIiwibnQuY2EiLCJudS5jYSIsIm9uLmNhIiwicGUuY2EiLCJxYy5jYSIsInNrLmNhIiwieWsuY2EiLCJnYy5jYSIsImNhdCIsImNjIiwiY2QiLCJnb3Yu''@;'; put 'put ''Y2QiLCJjZiIsImNnIiwiY2giLCJjaSIsImFjLmNpIiwiYVx4ZTlyb3BvcnQuY2kiLCJhc3NvLmNpIiwiY28uY2kiLCJjb20uY2kiLCJlZC5jaSIsImVkdS5jaSIsImdvLmNpIiwiZ291di5jaSIsImludC5jaSIsIm5ldC5jaSIsIm9yLmNpIiwib3JnLmNpIiwiKi5jayIsIiF3d3cuY2siLCJj''@;'; put 'put ''bCIsImNvLmNsIiwiZ29iLmNsIiwiZ292LmNsIiwibWlsLmNsIiwiY20iLCJjby5jbSIsImNvbS5jbSIsImdvdi5jbSIsIm5ldC5jbSIsImNuIiwiYWMuY24iLCJjb20uY24iLCJlZHUuY24iLCJnb3YuY24iLCJtaWwuY24iLCJuZXQuY24iLCJvcmcuY24iLCJcdTUxNmNcdTUzZjguY24iLCJc''@;'; put 'put ''dTdkYjJcdTdkNjEuY24iLCJcdTdmNTFcdTdlZGMuY24iLCJhaC5jbiIsImJqLmNuIiwiY3EuY24iLCJmai5jbiIsImdkLmNuIiwiZ3MuY24iLCJneC5jbiIsImd6LmNuIiwiaGEuY24iLCJoYi5jbiIsImhlLmNuIiwiaGkuY24iLCJoay5jbiIsImhsLmNuIiwiaG4uY24iLCJqbC5jbiIsImpz''@;'; put 'put ''LmNuIiwianguY24iLCJsbi5jbiIsIm1vLmNuIiwibm0uY24iLCJueC5jbiIsInFoLmNuIiwic2MuY24iLCJzZC5jbiIsInNoLmNuIiwic24uY24iLCJzeC5jbiIsInRqLmNuIiwidHcuY24iLCJ4ai5jbiIsInh6LmNuIiwieW4uY24iLCJ6ai5jbiIsImNvIiwiY29tLmNvIiwiZWR1LmNvIiwi''@;'; put 'put ''Z292LmNvIiwibWlsLmNvIiwibmV0LmNvIiwibm9tLmNvIiwib3JnLmNvIiwiY29tIiwiY29vcCIsImNyIiwiYWMuY3IiLCJjby5jciIsImVkLmNyIiwiZmkuY3IiLCJnby5jciIsIm9yLmNyIiwic2EuY3IiLCJjdSIsImNvbS5jdSIsImVkdS5jdSIsImdvYi5jdSIsImluZi5jdSIsIm5hdC5j''@;'; put 'put ''dSIsIm5ldC5jdSIsIm9yZy5jdSIsImN2IiwiY29tLmN2IiwiZWR1LmN2IiwiaWQuY3YiLCJpbnQuY3YiLCJuZXQuY3YiLCJub21lLmN2Iiwib3JnLmN2IiwicHVibC5jdiIsImN3IiwiY29tLmN3IiwiZWR1LmN3IiwibmV0LmN3Iiwib3JnLmN3IiwiY3giLCJnb3YuY3giLCJjeSIsImFjLmN5''@;'; put 'put ''IiwiYml6LmN5IiwiY29tLmN5IiwiZWtsb2dlcy5jeSIsImdvdi5jeSIsImx0ZC5jeSIsIm1pbC5jeSIsIm5ldC5jeSIsIm9yZy5jeSIsInByZXNzLmN5IiwicHJvLmN5IiwidG0uY3kiLCJjeiIsImRlIiwiZGoiLCJkayIsImRtIiwiY28uZG0iLCJjb20uZG0iLCJlZHUuZG0iLCJnb3YuZG0i''@;'; put 'put ''LCJuZXQuZG0iLCJvcmcuZG0iLCJkbyIsImFydC5kbyIsImNvbS5kbyIsImVkdS5kbyIsImdvYi5kbyIsImdvdi5kbyIsIm1pbC5kbyIsIm5ldC5kbyIsIm9yZy5kbyIsInNsZC5kbyIsIndlYi5kbyIsImR6IiwiYXJ0LmR6IiwiYXNzby5keiIsImNvbS5keiIsImVkdS5keiIsImdvdi5keiIs''@;'; put 'put ''Im5ldC5keiIsIm9yZy5keiIsInBvbC5keiIsInNvYy5keiIsInRtLmR6IiwiZWMiLCJjb20uZWMiLCJlZHUuZWMiLCJmaW4uZWMiLCJnb2IuZWMiLCJnb3YuZWMiLCJpbmZvLmVjIiwiazEyLmVjIiwibWVkLmVjIiwibWlsLmVjIiwibmV0LmVjIiwib3JnLmVjIiwicHJvLmVjIiwiZWR1Iiwi''@;'; put 'put ''ZWUiLCJhaXAuZWUiLCJjb20uZWUiLCJlZHUuZWUiLCJmaWUuZWUiLCJnb3YuZWUiLCJsaWIuZWUiLCJtZWQuZWUiLCJvcmcuZWUiLCJwcmkuZWUiLCJyaWlrLmVlIiwiZWciLCJhYy5lZyIsImNvbS5lZyIsImVkdS5lZyIsImV1bi5lZyIsImdvdi5lZyIsImluZm8uZWciLCJtZS5lZyIsIm1p''@;'; put 'put ''bC5lZyIsIm5hbWUuZWciLCJuZXQuZWciLCJvcmcuZWciLCJzY2kuZWciLCJzcG9ydC5lZyIsInR2LmVnIiwiKi5lciIsImVzIiwiY29tLmVzIiwiZWR1LmVzIiwiZ29iLmVzIiwibm9tLmVzIiwib3JnLmVzIiwiZXQiLCJiaXouZXQiLCJjb20uZXQiLCJlZHUuZXQiLCJnb3YuZXQiLCJpbmZv''@;'; put 'put ''LmV0IiwibmFtZS5ldCIsIm5ldC5ldCIsIm9yZy5ldCIsImV1IiwiZmkiLCJhbGFuZC5maSIsImZqIiwiYWMuZmoiLCJiaXouZmoiLCJjb20uZmoiLCJnb3YuZmoiLCJpbmZvLmZqIiwibWlsLmZqIiwibmFtZS5maiIsIm5ldC5maiIsIm9yZy5maiIsInByby5maiIsIiouZmsiLCJmbSIsImNv''@;'; put 'put ''bS5mbSIsImVkdS5mbSIsIm5ldC5mbSIsIm9yZy5mbSIsImZvIiwiZnIiLCJhc3NvLmZyIiwiY29tLmZyIiwiZ291di5mciIsIm5vbS5mciIsInByZC5mciIsInRtLmZyIiwiYXZvdWVzLmZyIiwiY2NpLmZyIiwiZ3JldGEuZnIiLCJodWlzc2llci1qdXN0aWNlLmZyIiwiZ2EiLCJnYiIsImdk''@;'; put 'put ''IiwiZWR1LmdkIiwiZ292LmdkIiwiZ2UiLCJjb20uZ2UiLCJlZHUuZ2UiLCJnb3YuZ2UiLCJuZXQuZ2UiLCJvcmcuZ2UiLCJwdnQuZ2UiLCJzY2hvb2wuZ2UiLCJnZiIsImdnIiwiY28uZ2ciLCJuZXQuZ2ciLCJvcmcuZ2ciLCJnaCIsImNvbS5naCIsImVkdS5naCIsImdvdi5naCIsIm1pbC5n''@;'; put 'put ''aCIsIm9yZy5naCIsImdpIiwiY29tLmdpIiwiZWR1LmdpIiwiZ292LmdpIiwibHRkLmdpIiwibW9kLmdpIiwib3JnLmdpIiwiZ2wiLCJjby5nbCIsImNvbS5nbCIsImVkdS5nbCIsIm5ldC5nbCIsIm9yZy5nbCIsImdtIiwiZ24iLCJhYy5nbiIsImNvbS5nbiIsImVkdS5nbiIsImdvdi5nbiIs''@;'; put 'put ''Im5ldC5nbiIsIm9yZy5nbiIsImdvdiIsImdwIiwiYXNzby5ncCIsImNvbS5ncCIsImVkdS5ncCIsIm1vYmkuZ3AiLCJuZXQuZ3AiLCJvcmcuZ3AiLCJncSIsImdyIiwiY29tLmdyIiwiZWR1LmdyIiwiZ292LmdyIiwibmV0LmdyIiwib3JnLmdyIiwiZ3MiLCJndCIsImNvbS5ndCIsImVkdS5n''@;'; put 'put ''dCIsImdvYi5ndCIsImluZC5ndCIsIm1pbC5ndCIsIm5ldC5ndCIsIm9yZy5ndCIsImd1IiwiY29tLmd1IiwiZWR1Lmd1IiwiZ292Lmd1IiwiZ3VhbS5ndSIsImluZm8uZ3UiLCJuZXQuZ3UiLCJvcmcuZ3UiLCJ3ZWIuZ3UiLCJndyIsImd5IiwiY28uZ3kiLCJjb20uZ3kiLCJlZHUuZ3kiLCJn''@;'; put 'put ''b3YuZ3kiLCJuZXQuZ3kiLCJvcmcuZ3kiLCJoayIsImNvbS5oayIsImVkdS5oayIsImdvdi5oayIsImlkdi5oayIsIm5ldC5oayIsIm9yZy5oayIsIlx1NGUyYVx1NGViYS5oayIsIlx1NTAwYlx1NGViYS5oayIsIlx1NTE2Y1x1NTNmOC5oayIsIlx1NjUzZlx1NWU5Yy5oayIsIlx1NjU0ZVx1''@;'; put 'put ''ODBiMi5oayIsIlx1NjU1OVx1ODBiMi5oayIsIlx1N2I4N1x1NGViYS5oayIsIlx1N2Q0NFx1N2U1NC5oayIsIlx1N2Q0NFx1N2VjNy5oayIsIlx1N2RiMlx1N2Q2MS5oayIsIlx1N2RiMlx1N2VkYy5oayIsIlx1N2VjNFx1N2U1NC5oayIsIlx1N2VjNFx1N2VjNy5oayIsIlx1N2Y1MVx1N2Q2''@;'; put 'put ''MS5oayIsIlx1N2Y1MVx1N2VkYy5oayIsImhtIiwiaG4iLCJjb20uaG4iLCJlZHUuaG4iLCJnb2IuaG4iLCJtaWwuaG4iLCJuZXQuaG4iLCJvcmcuaG4iLCJociIsImNvbS5ociIsImZyb20uaHIiLCJpei5ociIsIm5hbWUuaHIiLCJodCIsImFkdWx0Lmh0IiwiYXJ0Lmh0IiwiYXNzby5odCIs''@;'; put 'put ''ImNvbS5odCIsImNvb3AuaHQiLCJlZHUuaHQiLCJmaXJtLmh0IiwiZ291di5odCIsImluZm8uaHQiLCJtZWQuaHQiLCJuZXQuaHQiLCJvcmcuaHQiLCJwZXJzby5odCIsInBvbC5odCIsInByby5odCIsInJlbC5odCIsInNob3AuaHQiLCJodSIsIjIwMDAuaHUiLCJhZ3Jhci5odSIsImJvbHQu''@;'; put 'put ''aHUiLCJjYXNpbm8uaHUiLCJjaXR5Lmh1IiwiY28uaHUiLCJlcm90aWNhLmh1IiwiZXJvdGlrYS5odSIsImZpbG0uaHUiLCJmb3J1bS5odSIsImdhbWVzLmh1IiwiaG90ZWwuaHUiLCJpbmZvLmh1IiwiaW5nYXRsYW4uaHUiLCJqb2dhc3ouaHUiLCJrb255dmVsby5odSIsImxha2FzLmh1Iiwi''@;'; put 'put ''bWVkaWEuaHUiLCJuZXdzLmh1Iiwib3JnLmh1IiwicHJpdi5odSIsInJla2xhbS5odSIsInNleC5odSIsInNob3AuaHUiLCJzcG9ydC5odSIsInN1bGkuaHUiLCJzemV4Lmh1IiwidG0uaHUiLCJ0b3pzZGUuaHUiLCJ1dGF6YXMuaHUiLCJ2aWRlby5odSIsImlkIiwiYWMuaWQiLCJiaXouaWQi''@;'; put 'put ''LCJjby5pZCIsImRlc2EuaWQiLCJnby5pZCIsIm1pbC5pZCIsIm15LmlkIiwibmV0LmlkIiwib3IuaWQiLCJwb25wZXMuaWQiLCJzY2guaWQiLCJ3ZWIuaWQiLCJpZSIsImdvdi5pZSIsImlsIiwiYWMuaWwiLCJjby5pbCIsImdvdi5pbCIsImlkZi5pbCIsImsxMi5pbCIsIm11bmkuaWwiLCJu''@;'; put 'put ''ZXQuaWwiLCJvcmcuaWwiLCJcdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZDBcdTA1ZTdcdTA1ZDNcdTA1ZGVcdTA1ZDlcdTA1ZDQuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWQ5XHUwNWU5XHUwNWQ1XHUwNWQxLlx1MDVkOVx1MDVlOVx1MDVlOFx1''@;'; put 'put ''MDVkMFx1MDVkYyIsIlx1MDVlNlx1MDVkNFx1MDVkYy5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZGVcdTA1ZGVcdTA1ZTlcdTA1ZGMuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiaW0iLCJhYy5pbSIsImNvLmltIiwibHRkLmNvLmltIiwicGxjLmNvLmlt''@;'; put 'put ''IiwiY29tLmltIiwibmV0LmltIiwib3JnLmltIiwidHQuaW0iLCJ0di5pbSIsImluIiwiNWcuaW4iLCI2Zy5pbiIsImFjLmluIiwiYWkuaW4iLCJhbS5pbiIsImJpaGFyLmluIiwiYml6LmluIiwiYnVzaW5lc3MuaW4iLCJjYS5pbiIsImNuLmluIiwiY28uaW4iLCJjb20uaW4iLCJjb29wLmlu''@;'; put 'put ''IiwiY3MuaW4iLCJkZWxoaS5pbiIsImRyLmluIiwiZWR1LmluIiwiZXIuaW4iLCJmaXJtLmluIiwiZ2VuLmluIiwiZ292LmluIiwiZ3VqYXJhdC5pbiIsImluZC5pbiIsImluZm8uaW4iLCJpbnQuaW4iLCJpbnRlcm5ldC5pbiIsImlvLmluIiwibWUuaW4iLCJtaWwuaW4iLCJuZXQuaW4iLCJu''@;'; put 'put ''aWMuaW4iLCJvcmcuaW4iLCJwZy5pbiIsInBvc3QuaW4iLCJwcm8uaW4iLCJyZXMuaW4iLCJ0cmF2ZWwuaW4iLCJ0di5pbiIsInVrLmluIiwidXAuaW4iLCJ1cy5pbiIsImluZm8iLCJpbnQiLCJldS5pbnQiLCJpbyIsImNvLmlvIiwiY29tLmlvIiwiZWR1LmlvIiwiZ292LmlvIiwibWlsLmlv''@;'; put 'put ''IiwibmV0LmlvIiwibm9tLmlvIiwib3JnLmlvIiwiaXEiLCJjb20uaXEiLCJlZHUuaXEiLCJnb3YuaXEiLCJtaWwuaXEiLCJuZXQuaXEiLCJvcmcuaXEiLCJpciIsImFjLmlyIiwiY28uaXIiLCJnb3YuaXIiLCJpZC5pciIsIm5ldC5pciIsIm9yZy5pciIsInNjaC5pciIsIlx1MDYyN1x1MDZj''@;'; put 'put ''Y1x1MDYzMVx1MDYyN1x1MDY0Ni5pciIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Ni5pciIsImlzIiwiaXQiLCJlZHUuaXQiLCJnb3YuaXQiLCJhYnIuaXQiLCJhYnJ1enpvLml0IiwiYW9zdGEtdmFsbGV5Lml0IiwiYW9zdGF2YWxsZXkuaXQiLCJiYXMuaXQiLCJiYXNpbGljYXRh''@;'; put 'put ''Lml0IiwiY2FsLml0IiwiY2FsYWJyaWEuaXQiLCJjYW0uaXQiLCJjYW1wYW5pYS5pdCIsImVtaWxpYS1yb21hZ25hLml0IiwiZW1pbGlhcm9tYWduYS5pdCIsImVtci5pdCIsImZyaXVsaS12LWdpdWxpYS5pdCIsImZyaXVsaS12ZS1naXVsaWEuaXQiLCJmcml1bGktdmVnaXVsaWEuaXQiLCJm''@;'; put 'put ''cml1bGktdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGktdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaS12Z2l1bGlhLml0IiwiZnJpdWxpdi1naXVsaWEuaXQiLCJmcml1bGl2ZS1naXVsaWEuaXQiLCJmcml1bGl2ZWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxp''@;'; put 'put ''dmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaXZnaXVsaWEuaXQiLCJmdmcuaXQiLCJsYXouaXQiLCJsYXppby5pdCIsImxpZy5pdCIsImxpZ3VyaWEuaXQiLCJsb20uaXQiLCJsb21iYXJkaWEuaXQiLCJsb21iYXJkeS5pdCIsImx1Y2FuaWEuaXQiLCJtYXIuaXQiLCJtYXJjaGUuaXQiLCJtb2wu''@;'; put 'put ''aXQiLCJtb2xpc2UuaXQiLCJwaWVkbW9udC5pdCIsInBpZW1vbnRlLml0IiwicG1uLml0IiwicHVnLml0IiwicHVnbGlhLml0Iiwic2FyLml0Iiwic2FyZGVnbmEuaXQiLCJzYXJkaW5pYS5pdCIsInNpYy5pdCIsInNpY2lsaWEuaXQiLCJzaWNpbHkuaXQiLCJ0YWEuaXQiLCJ0b3MuaXQiLCJ0''@;'; put 'put ''b3NjYW5hLml0IiwidHJlbnRpbi1zdWQtdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW4tc3VkdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbi1zdWVkLXRpcm9sLml0IiwidHJlbnRpbi1zdWVkdGlyb2wuaXQiLCJ0cmVudGluby5p''@;'; put 'put ''dCIsInRyZW50aW5vLWEtYWRpZ2UuaXQiLCJ0cmVudGluby1hYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvLWFkaWdlLml0IiwidHJlbnRpbm8tYWx0b2FkaWdlLml0IiwidHJlbnRpbm8tcy10aXJvbC5pdCIsInRyZW50aW5vLXN0aXJvbC5pdCIsInRyZW50aW5vLXN1ZC10aXJvbC5pdCIsInRy''@;'; put 'put ''ZW50aW5vLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW5vLXN1ZHRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VlZHRpcm9sLml0IiwidHJlbnRpbm9hLWFkaWdlLml0IiwidHJlbnRpbm9hYWRpZ2UuaXQiLCJ0''@;'; put 'put ''cmVudGlub2FsdG8tYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG9hZGlnZS5pdCIsInRyZW50aW5vcy10aXJvbC5pdCIsInRyZW50aW5vc3Rpcm9sLml0IiwidHJlbnRpbm9zdWQtdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZC10aXJvbC5pdCIsInRyZW50aW5vc3VkdGlyb2wuaXQiLCJ0cmVudGlu''@;'; put 'put ''b3NceGZjZHRpcm9sLml0IiwidHJlbnRpbm9zdWVkLXRpcm9sLml0IiwidHJlbnRpbm9zdWVkdGlyb2wuaXQiLCJ0cmVudGluc3VkLXRpcm9sLml0IiwidHJlbnRpbnNceGZjZC10aXJvbC5pdCIsInRyZW50aW5zdWR0aXJvbC5pdCIsInRyZW50aW5zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5z''@;'; put 'put ''dWVkLXRpcm9sLml0IiwidHJlbnRpbnN1ZWR0aXJvbC5pdCIsInR1c2NhbnkuaXQiLCJ1bWIuaXQiLCJ1bWJyaWEuaXQiLCJ2YWwtZC1hb3N0YS5pdCIsInZhbC1kYW9zdGEuaXQiLCJ2YWxkLWFvc3RhLml0IiwidmFsZGFvc3RhLml0IiwidmFsbGUtYW9zdGEuaXQiLCJ2YWxsZS1kLWFvc3Rh''@;'; put 'put ''Lml0IiwidmFsbGUtZGFvc3RhLml0IiwidmFsbGVhb3N0YS5pdCIsInZhbGxlZC1hb3N0YS5pdCIsInZhbGxlZGFvc3RhLml0IiwidmFsbGVlLWFvc3RlLml0IiwidmFsbFx4ZTllLWFvc3RlLml0IiwidmFsbGVlLWQtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtZC1hb3N0ZS5pdCIsInZhbGxlZWFv''@;'; put 'put ''c3RlLml0IiwidmFsbFx4ZTllYW9zdGUuaXQiLCJ2YWxsZWVkYW9zdGUuaXQiLCJ2YWxsXHhlOWVkYW9zdGUuaXQiLCJ2YW8uaXQiLCJ2ZGEuaXQiLCJ2ZW4uaXQiLCJ2ZW5ldG8uaXQiLCJhZy5pdCIsImFncmlnZW50by5pdCIsImFsLml0IiwiYWxlc3NhbmRyaWEuaXQiLCJhbHRvLWFkaWdl''@;'; put 'put ''Lml0IiwiYWx0b2FkaWdlLml0IiwiYW4uaXQiLCJhbmNvbmEuaXQiLCJhbmRyaWEtYmFybGV0dGEtdHJhbmkuaXQiLCJhbmRyaWEtdHJhbmktYmFybGV0dGEuaXQiLCJhbmRyaWFiYXJsZXR0YXRyYW5pLml0IiwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdCIsImFvLml0IiwiYW9zdGEuaXQiLCJh''@;'; put 'put ''b3N0ZS5pdCIsImFwLml0IiwiYXEuaXQiLCJhcXVpbGEuaXQiLCJhci5pdCIsImFyZXp6by5pdCIsImFzY29saS1waWNlbm8uaXQiLCJhc2NvbGlwaWNlbm8uaXQiLCJhc3RpLml0IiwiYXQuaXQiLCJhdi5pdCIsImF2ZWxsaW5vLml0IiwiYmEuaXQiLCJiYWxzYW4uaXQiLCJiYWxzYW4tc3Vk''@;'; put 'put ''dGlyb2wuaXQiLCJiYWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJiYWxzYW4tc3VlZHRpcm9sLml0IiwiYmFyaS5pdCIsImJhcmxldHRhLXRyYW5pLWFuZHJpYS5pdCIsImJhcmxldHRhdHJhbmlhbmRyaWEuaXQiLCJiZWxsdW5vLml0IiwiYmVuZXZlbnRvLml0IiwiYmVyZ2Ftby5pdCIsImJnLml0''@;'; put 'put ''IiwiYmkuaXQiLCJiaWVsbGEuaXQiLCJibC5pdCIsImJuLml0IiwiYm8uaXQiLCJib2xvZ25hLml0IiwiYm9semFuby5pdCIsImJvbHphbm8tYWx0b2FkaWdlLml0IiwiYm96ZW4uaXQiLCJib3plbi1zdWR0aXJvbC5pdCIsImJvemVuLXNceGZjZHRpcm9sLml0IiwiYm96ZW4tc3VlZHRpcm9s''@;'; put 'put ''Lml0IiwiYnIuaXQiLCJicmVzY2lhLml0IiwiYnJpbmRpc2kuaXQiLCJicy5pdCIsImJ0Lml0IiwiYnVsc2FuLml0IiwiYnVsc2FuLXN1ZHRpcm9sLml0IiwiYnVsc2FuLXNceGZjZHRpcm9sLml0IiwiYnVsc2FuLXN1ZWR0aXJvbC5pdCIsImJ6Lml0IiwiY2EuaXQiLCJjYWdsaWFyaS5pdCIs''@;'; put 'put ''ImNhbHRhbmlzc2V0dGEuaXQiLCJjYW1waWRhbm8tbWVkaW8uaXQiLCJjYW1waWRhbm9tZWRpby5pdCIsImNhbXBvYmFzc28uaXQiLCJjYXJib25pYS1pZ2xlc2lhcy5pdCIsImNhcmJvbmlhaWdsZXNpYXMuaXQiLCJjYXJyYXJhLW1hc3NhLml0IiwiY2FycmFyYW1hc3NhLml0IiwiY2FzZXJ0''@;'; put 'put ''YS5pdCIsImNhdGFuaWEuaXQiLCJjYXRhbnphcm8uaXQiLCJjYi5pdCIsImNlLml0IiwiY2VzZW5hLWZvcmxpLml0IiwiY2VzZW5hLWZvcmxceGVjLml0IiwiY2VzZW5hZm9ybGkuaXQiLCJjZXNlbmFmb3JsXHhlYy5pdCIsImNoLml0IiwiY2hpZXRpLml0IiwiY2kuaXQiLCJjbC5pdCIsImNu''@;'; put 'put ''Lml0IiwiY28uaXQiLCJjb21vLml0IiwiY29zZW56YS5pdCIsImNyLml0IiwiY3JlbW9uYS5pdCIsImNyb3RvbmUuaXQiLCJjcy5pdCIsImN0Lml0IiwiY3VuZW8uaXQiLCJjei5pdCIsImRlbGwtb2dsaWFzdHJhLml0IiwiZGVsbG9nbGlhc3RyYS5pdCIsImVuLml0IiwiZW5uYS5pdCIsImZj''@;'; put 'put ''Lml0IiwiZmUuaXQiLCJmZXJtby5pdCIsImZlcnJhcmEuaXQiLCJmZy5pdCIsImZpLml0IiwiZmlyZW56ZS5pdCIsImZsb3JlbmNlLml0IiwiZm0uaXQiLCJmb2dnaWEuaXQiLCJmb3JsaS1jZXNlbmEuaXQiLCJmb3JsXHhlYy1jZXNlbmEuaXQiLCJmb3JsaWNlc2VuYS5pdCIsImZvcmxceGVj''@;'; put 'put ''Y2VzZW5hLml0IiwiZnIuaXQiLCJmcm9zaW5vbmUuaXQiLCJnZS5pdCIsImdlbm9hLml0IiwiZ2Vub3ZhLml0IiwiZ28uaXQiLCJnb3JpemlhLml0IiwiZ3IuaXQiLCJncm9zc2V0by5pdCIsImlnbGVzaWFzLWNhcmJvbmlhLml0IiwiaWdsZXNpYXNjYXJib25pYS5pdCIsImltLml0IiwiaW1w''@;'; put 'put ''ZXJpYS5pdCIsImlzLml0IiwiaXNlcm5pYS5pdCIsImtyLml0IiwibGEtc3BlemlhLml0IiwibGFxdWlsYS5pdCIsImxhc3BlemlhLml0IiwibGF0aW5hLml0IiwibGMuaXQiLCJsZS5pdCIsImxlY2NlLml0IiwibGVjY28uaXQiLCJsaS5pdCIsImxpdm9ybm8uaXQiLCJsby5pdCIsImxvZGku''@;'; put 'put ''aXQiLCJsdC5pdCIsImx1Lml0IiwibHVjY2EuaXQiLCJtYWNlcmF0YS5pdCIsIm1hbnRvdmEuaXQiLCJtYXNzYS1jYXJyYXJhLml0IiwibWFzc2FjYXJyYXJhLml0IiwibWF0ZXJhLml0IiwibWIuaXQiLCJtYy5pdCIsIm1lLml0IiwibWVkaW8tY2FtcGlkYW5vLml0IiwibWVkaW9jYW1waWRh''@;'; put 'put ''bm8uaXQiLCJtZXNzaW5hLml0IiwibWkuaXQiLCJtaWxhbi5pdCIsIm1pbGFuby5pdCIsIm1uLml0IiwibW8uaXQiLCJtb2RlbmEuaXQiLCJtb256YS5pdCIsIm1vbnphLWJyaWFuemEuaXQiLCJtb256YS1lLWRlbGxhLWJyaWFuemEuaXQiLCJtb256YWJyaWFuemEuaXQiLCJtb256YWVicmlh''@;'; put 'put ''bnphLml0IiwibW9uemFlZGVsbGFicmlhbnphLml0IiwibXMuaXQiLCJtdC5pdCIsIm5hLml0IiwibmFwbGVzLml0IiwibmFwb2xpLml0Iiwibm8uaXQiLCJub3ZhcmEuaXQiLCJudS5pdCIsIm51b3JvLml0Iiwib2cuaXQiLCJvZ2xpYXN0cmEuaXQiLCJvbGJpYS10ZW1waW8uaXQiLCJvbGJp''@;'; put 'put ''YXRlbXBpby5pdCIsIm9yLml0Iiwib3Jpc3Rhbm8uaXQiLCJvdC5pdCIsInBhLml0IiwicGFkb3ZhLml0IiwicGFkdWEuaXQiLCJwYWxlcm1vLml0IiwicGFybWEuaXQiLCJwYXZpYS5pdCIsInBjLml0IiwicGQuaXQiLCJwZS5pdCIsInBlcnVnaWEuaXQiLCJwZXNhcm8tdXJiaW5vLml0Iiwi''@;'; put 'put ''cGVzYXJvdXJiaW5vLml0IiwicGVzY2FyYS5pdCIsInBnLml0IiwicGkuaXQiLCJwaWFjZW56YS5pdCIsInBpc2EuaXQiLCJwaXN0b2lhLml0IiwicG4uaXQiLCJwby5pdCIsInBvcmRlbm9uZS5pdCIsInBvdGVuemEuaXQiLCJwci5pdCIsInByYXRvLml0IiwicHQuaXQiLCJwdS5pdCIsInB2''@;'; put 'put ''Lml0IiwicHouaXQiLCJyYS5pdCIsInJhZ3VzYS5pdCIsInJhdmVubmEuaXQiLCJyYy5pdCIsInJlLml0IiwicmVnZ2lvLWNhbGFicmlhLml0IiwicmVnZ2lvLWVtaWxpYS5pdCIsInJlZ2dpb2NhbGFicmlhLml0IiwicmVnZ2lvZW1pbGlhLml0IiwicmcuaXQiLCJyaS5pdCIsInJpZXRpLml0''@;'; put 'put ''IiwicmltaW5pLml0Iiwicm0uaXQiLCJybi5pdCIsInJvLml0Iiwicm9tYS5pdCIsInJvbWUuaXQiLCJyb3ZpZ28uaXQiLCJzYS5pdCIsInNhbGVybm8uaXQiLCJzYXNzYXJpLml0Iiwic2F2b25hLml0Iiwic2kuaXQiLCJzaWVuYS5pdCIsInNpcmFjdXNhLml0Iiwic28uaXQiLCJzb25kcmlv''@;'; put 'put ''Lml0Iiwic3AuaXQiLCJzci5pdCIsInNzLml0Iiwic1x4ZmNkdGlyb2wuaXQiLCJzdWVkdGlyb2wuaXQiLCJzdi5pdCIsInRhLml0IiwidGFyYW50by5pdCIsInRlLml0IiwidGVtcGlvLW9sYmlhLml0IiwidGVtcGlvb2xiaWEuaXQiLCJ0ZXJhbW8uaXQiLCJ0ZXJuaS5pdCIsInRuLml0Iiwi''@;'; put 'put ''dG8uaXQiLCJ0b3Jpbm8uaXQiLCJ0cC5pdCIsInRyLml0IiwidHJhbmktYW5kcmlhLWJhcmxldHRhLml0IiwidHJhbmktYmFybGV0dGEtYW5kcmlhLml0IiwidHJhbmlhbmRyaWFiYXJsZXR0YS5pdCIsInRyYW5pYmFybGV0dGFhbmRyaWEuaXQiLCJ0cmFwYW5pLml0IiwidHJlbnRvLml0Iiwi''@;'; put 'put ''dHJldmlzby5pdCIsInRyaWVzdGUuaXQiLCJ0cy5pdCIsInR1cmluLml0IiwidHYuaXQiLCJ1ZC5pdCIsInVkaW5lLml0IiwidXJiaW5vLXBlc2Fyby5pdCIsInVyYmlub3Blc2Fyby5pdCIsInZhLml0IiwidmFyZXNlLml0IiwidmIuaXQiLCJ2Yy5pdCIsInZlLml0IiwidmVuZXppYS5pdCIs''@;'; put 'put ''InZlbmljZS5pdCIsInZlcmJhbmlhLml0IiwidmVyY2VsbGkuaXQiLCJ2ZXJvbmEuaXQiLCJ2aS5pdCIsInZpYm8tdmFsZW50aWEuaXQiLCJ2aWJvdmFsZW50aWEuaXQiLCJ2aWNlbnphLml0Iiwidml0ZXJiby5pdCIsInZyLml0IiwidnMuaXQiLCJ2dC5pdCIsInZ2Lml0IiwiamUiLCJjby5q''@;'; put 'put ''ZSIsIm5ldC5qZSIsIm9yZy5qZSIsIiouam0iLCJqbyIsImFncmkuam8iLCJhaS5qbyIsImNvbS5qbyIsImVkdS5qbyIsImVuZy5qbyIsImZtLmpvIiwiZ292LmpvIiwibWlsLmpvIiwibmV0LmpvIiwib3JnLmpvIiwicGVyLmpvIiwicGhkLmpvIiwic2NoLmpvIiwidHYuam8iLCJqb2JzIiwi''@;'; put 'put ''anAiLCJhYy5qcCIsImFkLmpwIiwiY28uanAiLCJlZC5qcCIsImdvLmpwIiwiZ3IuanAiLCJsZy5qcCIsIm5lLmpwIiwib3IuanAiLCJhaWNoaS5qcCIsImFraXRhLmpwIiwiYW9tb3JpLmpwIiwiY2hpYmEuanAiLCJlaGltZS5qcCIsImZ1a3VpLmpwIiwiZnVrdW9rYS5qcCIsImZ1a3VzaGlt''@;'; put 'put ''YS5qcCIsImdpZnUuanAiLCJndW5tYS5qcCIsImhpcm9zaGltYS5qcCIsImhva2thaWRvLmpwIiwiaHlvZ28uanAiLCJpYmFyYWtpLmpwIiwiaXNoaWthd2EuanAiLCJpd2F0ZS5qcCIsImthZ2F3YS5qcCIsImthZ29zaGltYS5qcCIsImthbmFnYXdhLmpwIiwia29jaGkuanAiLCJrdW1hbW90''@;'; put 'put ''by5qcCIsImt5b3RvLmpwIiwibWllLmpwIiwibWl5YWdpLmpwIiwibWl5YXpha2kuanAiLCJuYWdhbm8uanAiLCJuYWdhc2FraS5qcCIsIm5hcmEuanAiLCJuaWlnYXRhLmpwIiwib2l0YS5qcCIsIm9rYXlhbWEuanAiLCJva2luYXdhLmpwIiwib3Nha2EuanAiLCJzYWdhLmpwIiwic2FpdGFt''@;'; put 'put ''YS5qcCIsInNoaWdhLmpwIiwic2hpbWFuZS5qcCIsInNoaXp1b2thLmpwIiwidG9jaGlnaS5qcCIsInRva3VzaGltYS5qcCIsInRva3lvLmpwIiwidG90dG9yaS5qcCIsInRveWFtYS5qcCIsIndha2F5YW1hLmpwIiwieWFtYWdhdGEuanAiLCJ5YW1hZ3VjaGkuanAiLCJ5YW1hbmFzaGkuanAi''@;'; put 'put ''LCJcdTRlMDlcdTkxY2QuanAiLCJcdTRlYWNcdTkwZmQuanAiLCJcdTRmNTBcdThjYzAuanAiLCJcdTUxNzVcdTVlYWIuanAiLCJcdTUzMTdcdTZkNzdcdTkwNTMuanAiLCJcdTUzNDNcdTg0NDkuanAiLCJcdTU0OGNcdTZiNGNcdTVjNzEuanAiLCJcdTU3ZmNcdTczODkuanAiLCJcdTU5Mjdc''@;'; put 'put ''dTUyMDYuanAiLCJcdTU5MjdcdTk2MmEuanAiLCJcdTU5NDhcdTgyNmYuanAiLCJcdTViYWVcdTU3Y2UuanAiLCJcdTViYWVcdTVkMGUuanAiLCJcdTViY2NcdTVjNzEuanAiLCJcdTVjNzFcdTUzZTMuanAiLCJcdTVjNzFcdTVmNjIuanAiLCJcdTVjNzFcdTY4YTguanAiLCJcdTVjOTBcdTk2''@;'; put 'put ''MWMuanAiLCJcdTVjYTFcdTVjNzEuanAiLCJcdTVjYTlcdTYyNGIuanAiLCJcdTVjZjZcdTY4MzkuanAiLCJcdTVlODNcdTVjZjYuanAiLCJcdTVmYjNcdTVjZjYuanAiLCJcdTYxMWJcdTVhOWIuanAiLCJcdTYxMWJcdTc3ZTUuanAiLCJcdTY1YjBcdTZmNWYuanAiLCJcdTY3NzFcdTRlYWMu''@;'; put 'put ''anAiLCJcdTY4MDNcdTY3MjguanAiLCJcdTZjOTZcdTdlMDQuanAiLCJcdTZlY2JcdThjYzAuanAiLCJcdTcxOGFcdTY3MmMuanAiLCJcdTc3ZjNcdTVkZGQuanAiLCJcdTc5NWVcdTU5NDhcdTVkZGQuanAiLCJcdTc5OGZcdTRlOTUuanAiLCJcdTc5OGZcdTVjYTEuanAiLCJcdTc5OGZcdTVj''@;'; put 'put ''ZjYuanAiLCJcdTc5Y2JcdTc1MzAuanAiLCJcdTdmYTRcdTk5YWMuanAiLCJcdTgzMjhcdTU3Y2UuanAiLCJcdTk1NzdcdTVkMGUuanAiLCJcdTk1NzdcdTkxY2UuanAiLCJcdTk3NTJcdTY4ZWUuanAiLCJcdTk3NTlcdTVjYTEuanAiLCJcdTk5OTlcdTVkZGQuanAiLCJcdTlhZDhcdTc3ZTUu''@;'; put 'put ''anAiLCJcdTljZTVcdTUzZDYuanAiLCJcdTllN2ZcdTUxNTBcdTVjZjYuanAiLCIqLmthd2FzYWtpLmpwIiwiIWNpdHkua2F3YXNha2kuanAiLCIqLmtpdGFreXVzaHUuanAiLCIhY2l0eS5raXRha3l1c2h1LmpwIiwiKi5rb2JlLmpwIiwiIWNpdHkua29iZS5qcCIsIioubmFnb3lhLmpwIiwi''@;'; put 'put ''IWNpdHkubmFnb3lhLmpwIiwiKi5zYXBwb3JvLmpwIiwiIWNpdHkuc2FwcG9yby5qcCIsIiouc2VuZGFpLmpwIiwiIWNpdHkuc2VuZGFpLmpwIiwiKi55b2tvaGFtYS5qcCIsIiFjaXR5Lnlva29oYW1hLmpwIiwiYWlzYWkuYWljaGkuanAiLCJhbWEuYWljaGkuanAiLCJhbmpvLmFpY2hpLmpw''@;'; put 'put ''IiwiYXN1a2UuYWljaGkuanAiLCJjaGlyeXUuYWljaGkuanAiLCJjaGl0YS5haWNoaS5qcCIsImZ1c28uYWljaGkuanAiLCJnYW1hZ29yaS5haWNoaS5qcCIsImhhbmRhLmFpY2hpLmpwIiwiaGF6dS5haWNoaS5qcCIsImhla2luYW4uYWljaGkuanAiLCJoaWdhc2hpdXJhLmFpY2hpLmpwIiwi''@;'; put 'put ''aWNoaW5vbWl5YS5haWNoaS5qcCIsImluYXphd2EuYWljaGkuanAiLCJpbnV5YW1hLmFpY2hpLmpwIiwiaXNzaGlraS5haWNoaS5qcCIsIml3YWt1cmEuYWljaGkuanAiLCJrYW5pZS5haWNoaS5qcCIsImthcml5YS5haWNoaS5qcCIsImthc3VnYWkuYWljaGkuanAiLCJraXJhLmFpY2hpLmpw''@;'; put 'put ''Iiwia2l5b3N1LmFpY2hpLmpwIiwia29tYWtpLmFpY2hpLmpwIiwia29uYW4uYWljaGkuanAiLCJrb3RhLmFpY2hpLmpwIiwibWloYW1hLmFpY2hpLmpwIiwibWl5b3NoaS5haWNoaS5qcCIsIm5pc2hpby5haWNoaS5qcCIsIm5pc3NoaW4uYWljaGkuanAiLCJvYnUuYWljaGkuanAiLCJvZ3Vj''@;'; put 'put ''aGkuYWljaGkuanAiLCJvaGFydS5haWNoaS5qcCIsIm9rYXpha2kuYWljaGkuanAiLCJvd2FyaWFzYWhpLmFpY2hpLmpwIiwic2V0by5haWNoaS5qcCIsInNoaWthdHN1LmFpY2hpLmpwIiwic2hpbnNoaXJvLmFpY2hpLmpwIiwic2hpdGFyYS5haWNoaS5qcCIsInRhaGFyYS5haWNoaS5qcCIs''@;'; put 'put ''InRha2FoYW1hLmFpY2hpLmpwIiwidG9iaXNoaW1hLmFpY2hpLmpwIiwidG9laS5haWNoaS5qcCIsInRvZ28uYWljaGkuanAiLCJ0b2thaS5haWNoaS5qcCIsInRva29uYW1lLmFpY2hpLmpwIiwidG95b2FrZS5haWNoaS5qcCIsInRveW9oYXNoaS5haWNoaS5qcCIsInRveW9rYXdhLmFpY2hp''@;'; put 'put ''LmpwIiwidG95b25lLmFpY2hpLmpwIiwidG95b3RhLmFpY2hpLmpwIiwidHN1c2hpbWEuYWljaGkuanAiLCJ5YXRvbWkuYWljaGkuanAiLCJha2l0YS5ha2l0YS5qcCIsImRhaXNlbi5ha2l0YS5qcCIsImZ1amlzYXRvLmFraXRhLmpwIiwiZ29qb21lLmFraXRhLmpwIiwiaGFjaGlyb2dhdGEu''@;'; put 'put ''YWtpdGEuanAiLCJoYXBwb3UuYWtpdGEuanAiLCJoaWdhc2hpbmFydXNlLmFraXRhLmpwIiwiaG9uam8uYWtpdGEuanAiLCJob25qeW8uYWtpdGEuanAiLCJpa2F3YS5ha2l0YS5qcCIsImthbWlrb2FuaS5ha2l0YS5qcCIsImthbWlva2EuYWtpdGEuanAiLCJrYXRhZ2FtaS5ha2l0YS5qcCIs''@;'; put 'put ''ImthenVuby5ha2l0YS5qcCIsImtpdGFha2l0YS5ha2l0YS5qcCIsImtvc2FrYS5ha2l0YS5qcCIsImt5b3dhLmFraXRhLmpwIiwibWlzYXRvLmFraXRhLmpwIiwibWl0YW5lLmFraXRhLmpwIiwibW9yaXlvc2hpLmFraXRhLmpwIiwibmlrYWhvLmFraXRhLmpwIiwibm9zaGlyby5ha2l0YS5q''@;'; put 'put ''cCIsIm9kYXRlLmFraXRhLmpwIiwib2dhLmFraXRhLmpwIiwib2dhdGEuYWtpdGEuanAiLCJzZW1ib2t1LmFraXRhLmpwIiwieW9rb3RlLmFraXRhLmpwIiwieXVyaWhvbmpvLmFraXRhLmpwIiwiYW9tb3JpLmFvbW9yaS5qcCIsImdvbm9oZS5hb21vcmkuanAiLCJoYWNoaW5vaGUuYW9tb3Jp''@;'; put 'put ''LmpwIiwiaGFzaGlrYW1pLmFvbW9yaS5qcCIsImhpcmFuYWkuYW9tb3JpLmpwIiwiaGlyb3Nha2kuYW9tb3JpLmpwIiwiaXRheWFuYWdpLmFvbW9yaS5qcCIsImt1cm9pc2hpLmFvbW9yaS5qcCIsIm1pc2F3YS5hb21vcmkuanAiLCJtdXRzdS5hb21vcmkuanAiLCJuYWthZG9tYXJpLmFvbW9y''@;'; put 'put ''aS5qcCIsIm5vaGVqaS5hb21vcmkuanAiLCJvaXJhc2UuYW9tb3JpLmpwIiwib3dhbmkuYW9tb3JpLmpwIiwicm9rdW5vaGUuYW9tb3JpLmpwIiwic2Fubm9oZS5hb21vcmkuanAiLCJzaGljaGlub2hlLmFvbW9yaS5qcCIsInNoaW5nby5hb21vcmkuanAiLCJ0YWtrby5hb21vcmkuanAiLCJ0''@;'; put 'put ''b3dhZGEuYW9tb3JpLmpwIiwidHN1Z2FydS5hb21vcmkuanAiLCJ0c3VydXRhLmFvbW9yaS5qcCIsImFiaWtvLmNoaWJhLmpwIiwiYXNhaGkuY2hpYmEuanAiLCJjaG9uYW4uY2hpYmEuanAiLCJjaG9zZWkuY2hpYmEuanAiLCJjaG9zaGkuY2hpYmEuanAiLCJjaHVvLmNoaWJhLmpwIiwiZnVu''@;'; put 'put ''YWJhc2hpLmNoaWJhLmpwIiwiZnV0dHN1LmNoaWJhLmpwIiwiaGFuYW1pZ2F3YS5jaGliYS5qcCIsImljaGloYXJhLmNoaWJhLmpwIiwiaWNoaWthd2EuY2hpYmEuanAiLCJpY2hpbm9taXlhLmNoaWJhLmpwIiwiaW56YWkuY2hpYmEuanAiLCJpc3VtaS5jaGliYS5qcCIsImthbWFnYXlhLmNo''@;'; put 'put ''aWJhLmpwIiwia2Ftb2dhd2EuY2hpYmEuanAiLCJrYXNoaXdhLmNoaWJhLmpwIiwia2F0b3JpLmNoaWJhLmpwIiwia2F0c3V1cmEuY2hpYmEuanAiLCJraW1pdHN1LmNoaWJhLmpwIiwia2lzYXJhenUuY2hpYmEuanAiLCJrb3pha2kuY2hpYmEuanAiLCJrdWp1a3VyaS5jaGliYS5qcCIsImt5''@;'; put 'put ''b25hbi5jaGliYS5qcCIsIm1hdHN1ZG8uY2hpYmEuanAiLCJtaWRvcmkuY2hpYmEuanAiLCJtaWhhbWEuY2hpYmEuanAiLCJtaW5hbWlib3NvLmNoaWJhLmpwIiwibW9iYXJhLmNoaWJhLmpwIiwibXV0c3V6YXdhLmNoaWJhLmpwIiwibmFnYXJhLmNoaWJhLmpwIiwibmFnYXJleWFtYS5jaGli''@;'; put 'put ''YS5qcCIsIm5hcmFzaGluby5jaGliYS5qcCIsIm5hcml0YS5jaGliYS5qcCIsIm5vZGEuY2hpYmEuanAiLCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwIiwib21pZ2F3YS5jaGliYS5qcCIsIm9uanVrdS5jaGliYS5qcCIsIm90YWtpLmNoaWJhLmpwIiwic2FrYWUuY2hpYmEuanAiLCJzYWt1cmEu''@;'; put 'put ''Y2hpYmEuanAiLCJzaGltb2Z1c2EuY2hpYmEuanAiLCJzaGlyYWtvLmNoaWJhLmpwIiwic2hpcm9pLmNoaWJhLmpwIiwic2hpc3VpLmNoaWJhLmpwIiwic29kZWdhdXJhLmNoaWJhLmpwIiwic29zYS5jaGliYS5qcCIsInRha28uY2hpYmEuanAiLCJ0YXRleWFtYS5jaGliYS5qcCIsInRvZ2Fu''@;'; put 'put ''ZS5jaGliYS5qcCIsInRvaG5vc2hvLmNoaWJhLmpwIiwidG9taXNhdG8uY2hpYmEuanAiLCJ1cmF5YXN1LmNoaWJhLmpwIiwieWFjaGltYXRhLmNoaWJhLmpwIiwieWFjaGl5by5jaGliYS5qcCIsInlva2FpY2hpYmEuY2hpYmEuanAiLCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEuanAiLCJ5b3Rz''@;'; put 'put ''dWthaWRvLmNoaWJhLmpwIiwiYWluYW4uZWhpbWUuanAiLCJob25haS5laGltZS5qcCIsImlrYXRhLmVoaW1lLmpwIiwiaW1hYmFyaS5laGltZS5qcCIsIml5by5laGltZS5qcCIsImthbWlqaW1hLmVoaW1lLmpwIiwia2lob2t1LmVoaW1lLmpwIiwia3VtYWtvZ2VuLmVoaW1lLmpwIiwibWFz''@;'; put 'put ''YWtpLmVoaW1lLmpwIiwibWF0c3Vuby5laGltZS5qcCIsIm1hdHN1eWFtYS5laGltZS5qcCIsIm5hbWlrYXRhLmVoaW1lLmpwIiwibmlpaGFtYS5laGltZS5qcCIsIm96dS5laGltZS5qcCIsInNhaWpvLmVoaW1lLmpwIiwic2VpeW8uZWhpbWUuanAiLCJzaGlrb2t1Y2h1by5laGltZS5qcCIs''@;'; put 'put ''InRvYmUuZWhpbWUuanAiLCJ0b29uLmVoaW1lLmpwIiwidWNoaWtvLmVoaW1lLmpwIiwidXdhamltYS5laGltZS5qcCIsInlhd2F0YWhhbWEuZWhpbWUuanAiLCJlY2hpemVuLmZ1a3VpLmpwIiwiZWloZWlqaS5mdWt1aS5qcCIsImZ1a3VpLmZ1a3VpLmpwIiwiaWtlZGEuZnVrdWkuanAiLCJr''@;'; put 'put ''YXRzdXlhbWEuZnVrdWkuanAiLCJtaWhhbWEuZnVrdWkuanAiLCJtaW5hbWllY2hpemVuLmZ1a3VpLmpwIiwib2JhbWEuZnVrdWkuanAiLCJvaGkuZnVrdWkuanAiLCJvbm8uZnVrdWkuanAiLCJzYWJhZS5mdWt1aS5qcCIsInNha2FpLmZ1a3VpLmpwIiwidGFrYWhhbWEuZnVrdWkuanAiLCJ0''@;'; put 'put ''c3VydWdhLmZ1a3VpLmpwIiwid2FrYXNhLmZ1a3VpLmpwIiwiYXNoaXlhLmZ1a3Vva2EuanAiLCJidXplbi5mdWt1b2thLmpwIiwiY2hpa3Vnby5mdWt1b2thLmpwIiwiY2hpa3Voby5mdWt1b2thLmpwIiwiY2hpa3Vqby5mdWt1b2thLmpwIiwiY2hpa3VzaGluby5mdWt1b2thLmpwIiwiY2hp''@;'; put 'put ''a3V6ZW4uZnVrdW9rYS5qcCIsImNodW8uZnVrdW9rYS5qcCIsImRhemFpZnUuZnVrdW9rYS5qcCIsImZ1a3VjaGkuZnVrdW9rYS5qcCIsImhha2F0YS5mdWt1b2thLmpwIiwiaGlnYXNoaS5mdWt1b2thLmpwIiwiaGlyb2thd2EuZnVrdW9rYS5qcCIsImhpc2F5YW1hLmZ1a3Vva2EuanAiLCJp''@;'; put 'put ''aXp1a2EuZnVrdW9rYS5qcCIsImluYXRzdWtpLmZ1a3Vva2EuanAiLCJrYWhvLmZ1a3Vva2EuanAiLCJrYXN1Z2EuZnVrdW9rYS5qcCIsImthc3V5YS5mdWt1b2thLmpwIiwia2F3YXJhLmZ1a3Vva2EuanAiLCJrZWlzZW4uZnVrdW9rYS5qcCIsImtvZ2EuZnVrdW9rYS5qcCIsImt1cmF0ZS5m''@;'; put 'put ''dWt1b2thLmpwIiwia3Vyb2dpLmZ1a3Vva2EuanAiLCJrdXJ1bWUuZnVrdW9rYS5qcCIsIm1pbmFtaS5mdWt1b2thLmpwIiwibWl5YWtvLmZ1a3Vva2EuanAiLCJtaXlhbWEuZnVrdW9rYS5qcCIsIm1peWF3YWthLmZ1a3Vva2EuanAiLCJtaXp1bWFraS5mdWt1b2thLmpwIiwibXVuYWthdGEu''@;'; put 'put ''ZnVrdW9rYS5qcCIsIm5ha2FnYXdhLmZ1a3Vva2EuanAiLCJuYWthbWEuZnVrdW9rYS5qcCIsIm5pc2hpLmZ1a3Vva2EuanAiLCJub2dhdGEuZnVrdW9rYS5qcCIsIm9nb3JpLmZ1a3Vva2EuanAiLCJva2FnYWtpLmZ1a3Vva2EuanAiLCJva2F3YS5mdWt1b2thLmpwIiwib2tpLmZ1a3Vva2Eu''@;'; put 'put ''anAiLCJvbXV0YS5mdWt1b2thLmpwIiwib25nYS5mdWt1b2thLmpwIiwib25vam8uZnVrdW9rYS5qcCIsIm90by5mdWt1b2thLmpwIiwic2FpZ2F3YS5mdWt1b2thLmpwIiwic2FzYWd1cmkuZnVrdW9rYS5qcCIsInNoaW5ndS5mdWt1b2thLmpwIiwic2hpbnlvc2hpdG9taS5mdWt1b2thLmpw''@;'; put 'put ''Iiwic2hvbmFpLmZ1a3Vva2EuanAiLCJzb2VkYS5mdWt1b2thLmpwIiwic3VlLmZ1a3Vva2EuanAiLCJ0YWNoaWFyYWkuZnVrdW9rYS5qcCIsInRhZ2F3YS5mdWt1b2thLmpwIiwidGFrYXRhLmZ1a3Vva2EuanAiLCJ0b2hvLmZ1a3Vva2EuanAiLCJ0b3lvdHN1LmZ1a3Vva2EuanAiLCJ0c3Vp''@;'; put 'put ''a2kuZnVrdW9rYS5qcCIsInVraWhhLmZ1a3Vva2EuanAiLCJ1bWkuZnVrdW9rYS5qcCIsInVzdWkuZnVrdW9rYS5qcCIsInlhbWFkYS5mdWt1b2thLmpwIiwieWFtZS5mdWt1b2thLmpwIiwieWFuYWdhd2EuZnVrdW9rYS5qcCIsInl1a3VoYXNoaS5mdWt1b2thLmpwIiwiYWl6dWJhbmdlLmZ1''@;'; put 'put ''a3VzaGltYS5qcCIsImFpenVtaXNhdG8uZnVrdXNoaW1hLmpwIiwiYWl6dXdha2FtYXRzdS5mdWt1c2hpbWEuanAiLCJhc2FrYXdhLmZ1a3VzaGltYS5qcCIsImJhbmRhaS5mdWt1c2hpbWEuanAiLCJkYXRlLmZ1a3VzaGltYS5qcCIsImZ1a3VzaGltYS5mdWt1c2hpbWEuanAiLCJmdXJ1ZG9u''@;'; put 'put ''by5mdWt1c2hpbWEuanAiLCJmdXRhYmEuZnVrdXNoaW1hLmpwIiwiaGFuYXdhLmZ1a3VzaGltYS5qcCIsImhpZ2FzaGkuZnVrdXNoaW1hLmpwIiwiaGlyYXRhLmZ1a3VzaGltYS5qcCIsImhpcm9uby5mdWt1c2hpbWEuanAiLCJpaXRhdGUuZnVrdXNoaW1hLmpwIiwiaW5hd2FzaGlyby5mdWt1''@;'; put 'put ''c2hpbWEuanAiLCJpc2hpa2F3YS5mdWt1c2hpbWEuanAiLCJpd2FraS5mdWt1c2hpbWEuanAiLCJpenVtaXpha2kuZnVrdXNoaW1hLmpwIiwia2FnYW1paXNoaS5mdWt1c2hpbWEuanAiLCJrYW5leWFtYS5mdWt1c2hpbWEuanAiLCJrYXdhbWF0YS5mdWt1c2hpbWEuanAiLCJraXRha2F0YS5m''@;'; put 'put ''dWt1c2hpbWEuanAiLCJraXRhc2hpb2JhcmEuZnVrdXNoaW1hLmpwIiwia29vcmkuZnVrdXNoaW1hLmpwIiwia29yaXlhbWEuZnVrdXNoaW1hLmpwIiwia3VuaW1pLmZ1a3VzaGltYS5qcCIsIm1paGFydS5mdWt1c2hpbWEuanAiLCJtaXNoaW1hLmZ1a3VzaGltYS5qcCIsIm5hbWllLmZ1a3Vz''@;'; put 'put ''aGltYS5qcCIsIm5hbmdvLmZ1a3VzaGltYS5qcCIsIm5pc2hpYWl6dS5mdWt1c2hpbWEuanAiLCJuaXNoaWdvLmZ1a3VzaGltYS5qcCIsIm9rdW1hLmZ1a3VzaGltYS5qcCIsIm9tb3RlZ28uZnVrdXNoaW1hLmpwIiwib25vLmZ1a3VzaGltYS5qcCIsIm90YW1hLmZ1a3VzaGltYS5qcCIsInNh''@;'; put 'put ''bWVnYXdhLmZ1a3VzaGltYS5qcCIsInNoaW1vZ28uZnVrdXNoaW1hLmpwIiwic2hpcmFrYXdhLmZ1a3VzaGltYS5qcCIsInNob3dhLmZ1a3VzaGltYS5qcCIsInNvbWEuZnVrdXNoaW1hLmpwIiwic3VrYWdhd2EuZnVrdXNoaW1hLmpwIiwidGFpc2hpbi5mdWt1c2hpbWEuanAiLCJ0YW1ha2F3''@;'; put 'put ''YS5mdWt1c2hpbWEuanAiLCJ0YW5hZ3VyYS5mdWt1c2hpbWEuanAiLCJ0ZW5laS5mdWt1c2hpbWEuanAiLCJ5YWJ1a2kuZnVrdXNoaW1hLmpwIiwieWFtYXRvLmZ1a3VzaGltYS5qcCIsInlhbWF0c3VyaS5mdWt1c2hpbWEuanAiLCJ5YW5haXp1LmZ1a3VzaGltYS5qcCIsInl1Z2F3YS5mdWt1''@;'; put 'put ''c2hpbWEuanAiLCJhbnBhY2hpLmdpZnUuanAiLCJlbmEuZ2lmdS5qcCIsImdpZnUuZ2lmdS5qcCIsImdpbmFuLmdpZnUuanAiLCJnb2RvLmdpZnUuanAiLCJndWpvLmdpZnUuanAiLCJoYXNoaW1hLmdpZnUuanAiLCJoaWNoaXNvLmdpZnUuanAiLCJoaWRhLmdpZnUuanAiLCJoaWdhc2hpc2hp''@;'; put 'put ''cmFrYXdhLmdpZnUuanAiLCJpYmlnYXdhLmdpZnUuanAiLCJpa2VkYS5naWZ1LmpwIiwia2FrYW1pZ2FoYXJhLmdpZnUuanAiLCJrYW5pLmdpZnUuanAiLCJrYXNhaGFyYS5naWZ1LmpwIiwia2FzYW1hdHN1LmdpZnUuanAiLCJrYXdhdWUuZ2lmdS5qcCIsImtpdGFnYXRhLmdpZnUuanAiLCJt''@;'; put 'put ''aW5vLmdpZnUuanAiLCJtaW5va2Ftby5naWZ1LmpwIiwibWl0YWtlLmdpZnUuanAiLCJtaXp1bmFtaS5naWZ1LmpwIiwibW90b3N1LmdpZnUuanAiLCJuYWthdHN1Z2F3YS5naWZ1LmpwIiwib2dha2kuZ2lmdS5qcCIsInNha2Fob2dpLmdpZnUuanAiLCJzZWtpLmdpZnUuanAiLCJzZWtpZ2Fo''@;'; put 'put ''YXJhLmdpZnUuanAiLCJzaGlyYWthd2EuZ2lmdS5qcCIsInRhamltaS5naWZ1LmpwIiwidGFrYXlhbWEuZ2lmdS5qcCIsInRhcnVpLmdpZnUuanAiLCJ0b2tpLmdpZnUuanAiLCJ0b21pa2EuZ2lmdS5qcCIsIndhbm91Y2hpLmdpZnUuanAiLCJ5YW1hZ2F0YS5naWZ1LmpwIiwieWFvdHN1Lmdp''@;'; put 'put ''ZnUuanAiLCJ5b3JvLmdpZnUuanAiLCJhbm5ha2EuZ3VubWEuanAiLCJjaGl5b2RhLmd1bm1hLmpwIiwiZnVqaW9rYS5ndW5tYS5qcCIsImhpZ2FzaGlhZ2F0c3VtYS5ndW5tYS5qcCIsImlzZXNha2kuZ3VubWEuanAiLCJpdGFrdXJhLmd1bm1hLmpwIiwia2FubmEuZ3VubWEuanAiLCJrYW5y''@;'; put 'put ''YS5ndW5tYS5qcCIsImthdGFzaGluYS5ndW5tYS5qcCIsImthd2FiYS5ndW5tYS5qcCIsImtpcnl1Lmd1bm1hLmpwIiwia3VzYXRzdS5ndW5tYS5qcCIsIm1hZWJhc2hpLmd1bm1hLmpwIiwibWVpd2EuZ3VubWEuanAiLCJtaWRvcmkuZ3VubWEuanAiLCJtaW5ha2FtaS5ndW5tYS5qcCIsIm5h''@;'; put 'put ''Z2Fub2hhcmEuZ3VubWEuanAiLCJuYWthbm9qby5ndW5tYS5qcCIsIm5hbm1va3UuZ3VubWEuanAiLCJudW1hdGEuZ3VubWEuanAiLCJvaXp1bWkuZ3VubWEuanAiLCJvcmEuZ3VubWEuanAiLCJvdGEuZ3VubWEuanAiLCJzaGlidWthd2EuZ3VubWEuanAiLCJzaGltb25pdGEuZ3VubWEuanAi''@;'; put 'put ''LCJzaGludG8uZ3VubWEuanAiLCJzaG93YS5ndW5tYS5qcCIsInRha2FzYWtpLmd1bm1hLmpwIiwidGFrYXlhbWEuZ3VubWEuanAiLCJ0YW1hbXVyYS5ndW5tYS5qcCIsInRhdGViYXlhc2hpLmd1bm1hLmpwIiwidG9taW9rYS5ndW5tYS5qcCIsInRzdWtpeW9uby5ndW5tYS5qcCIsInRzdW1h''@;'; put 'put ''Z29pLmd1bm1hLmpwIiwidWVuby5ndW5tYS5qcCIsInlvc2hpb2thLmd1bm1hLmpwIiwiYXNhbWluYW1pLmhpcm9zaGltYS5qcCIsImRhaXdhLmhpcm9zaGltYS5qcCIsImV0YWppbWEuaGlyb3NoaW1hLmpwIiwiZnVjaHUuaGlyb3NoaW1hLmpwIiwiZnVrdXlhbWEuaGlyb3NoaW1hLmpwIiwi''@;'; put 'put ''aGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwIiwiaGlnYXNoaWhpcm9zaGltYS5oaXJvc2hpbWEuanAiLCJob25nby5oaXJvc2hpbWEuanAiLCJqaW5zZWtpa29nZW4uaGlyb3NoaW1hLmpwIiwia2FpdGEuaGlyb3NoaW1hLmpwIiwia3VpLmhpcm9zaGltYS5qcCIsImt1bWFuby5oaXJvc2hpbWEu''@;'; put 'put ''anAiLCJrdXJlLmhpcm9zaGltYS5qcCIsIm1paGFyYS5oaXJvc2hpbWEuanAiLCJtaXlvc2hpLmhpcm9zaGltYS5qcCIsIm5ha2EuaGlyb3NoaW1hLmpwIiwib25vbWljaGkuaGlyb3NoaW1hLmpwIiwib3Nha2lrYW1pamltYS5oaXJvc2hpbWEuanAiLCJvdGFrZS5oaXJvc2hpbWEuanAiLCJz''@;'; put 'put ''YWthLmhpcm9zaGltYS5qcCIsInNlcmEuaGlyb3NoaW1hLmpwIiwic2VyYW5pc2hpLmhpcm9zaGltYS5qcCIsInNoaW5pY2hpLmhpcm9zaGltYS5qcCIsInNob2JhcmEuaGlyb3NoaW1hLmpwIiwidGFrZWhhcmEuaGlyb3NoaW1hLmpwIiwiYWJhc2hpcmkuaG9ra2FpZG8uanAiLCJhYmlyYS5o''@;'; put 'put ''b2trYWlkby5qcCIsImFpYmV0c3UuaG9ra2FpZG8uanAiLCJha2FiaXJhLmhva2thaWRvLmpwIiwiYWtrZXNoaS5ob2trYWlkby5qcCIsImFzYWhpa2F3YS5ob2trYWlkby5qcCIsImFzaGliZXRzdS5ob2trYWlkby5qcCIsImFzaG9yby5ob2trYWlkby5qcCIsImFzc2FidS5ob2trYWlkby5q''@;'; put 'put ''cCIsImF0c3VtYS5ob2trYWlkby5qcCIsImJpYmFpLmhva2thaWRvLmpwIiwiYmllaS5ob2trYWlkby5qcCIsImJpZnVrYS5ob2trYWlkby5qcCIsImJpaG9yby5ob2trYWlkby5qcCIsImJpcmF0b3JpLmhva2thaWRvLmpwIiwiY2hpcHB1YmV0c3UuaG9ra2FpZG8uanAiLCJjaGl0b3NlLmhv''@;'; put 'put ''a2thaWRvLmpwIiwiZGF0ZS5ob2trYWlkby5qcCIsImViZXRzdS5ob2trYWlkby5qcCIsImVtYmV0c3UuaG9ra2FpZG8uanAiLCJlbml3YS5ob2trYWlkby5qcCIsImVyaW1vLmhva2thaWRvLmpwIiwiZXNhbi5ob2trYWlkby5qcCIsImVzYXNoaS5ob2trYWlkby5qcCIsImZ1a2FnYXdhLmhv''@;'; put 'put ''a2thaWRvLmpwIiwiZnVrdXNoaW1hLmhva2thaWRvLmpwIiwiZnVyYW5vLmhva2thaWRvLmpwIiwiZnVydWJpcmEuaG9ra2FpZG8uanAiLCJoYWJvcm8uaG9ra2FpZG8uanAiLCJoYWtvZGF0ZS5ob2trYWlkby5qcCIsImhhbWF0b25iZXRzdS5ob2trYWlkby5qcCIsImhpZGFrYS5ob2trYWlk''@;'; put 'put ''by5qcCIsImhpZ2FzaGlrYWd1cmEuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2F3YS5ob2trYWlkby5qcCIsImhpcm9vLmhva2thaWRvLmpwIiwiaG9rdXJ5dS5ob2trYWlkby5qcCIsImhva3V0by5ob2trYWlkby5qcCIsImhvbmJldHN1Lmhva2thaWRvLmpwIiwiaG9yb2thbmFpLmhva2thaWRv''@;'; put 'put ''LmpwIiwiaG9yb25vYmUuaG9ra2FpZG8uanAiLCJpa2VkYS5ob2trYWlkby5qcCIsImltYWthbmUuaG9ra2FpZG8uanAiLCJpc2hpa2FyaS5ob2trYWlkby5qcCIsIml3YW1pemF3YS5ob2trYWlkby5qcCIsIml3YW5haS5ob2trYWlkby5qcCIsImthbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJr''@;'; put 'put ''YW1pa2F3YS5ob2trYWlkby5qcCIsImthbWlzaGlob3JvLmhva2thaWRvLmpwIiwia2FtaXN1bmFnYXdhLmhva2thaWRvLmpwIiwia2Ftb2VuYWkuaG9ra2FpZG8uanAiLCJrYXlhYmUuaG9ra2FpZG8uanAiLCJrZW1idWNoaS5ob2trYWlkby5qcCIsImtpa29uYWkuaG9ra2FpZG8uanAiLCJr''@;'; put 'put ''aW1vYmV0c3UuaG9ra2FpZG8uanAiLCJraXRhaGlyb3NoaW1hLmhva2thaWRvLmpwIiwia2l0YW1pLmhva2thaWRvLmpwIiwia2l5b3NhdG8uaG9ra2FpZG8uanAiLCJrb3NoaW1penUuaG9ra2FpZG8uanAiLCJrdW5uZXBwdS5ob2trYWlkby5qcCIsImt1cml5YW1hLmhva2thaWRvLmpwIiwi''@;'; put 'put ''a3Vyb21hdHN1bmFpLmhva2thaWRvLmpwIiwia3VzaGlyby5ob2trYWlkby5qcCIsImt1dGNoYW4uaG9ra2FpZG8uanAiLCJreW93YS5ob2trYWlkby5qcCIsIm1hc2hpa2UuaG9ra2FpZG8uanAiLCJtYXRzdW1hZS5ob2trYWlkby5qcCIsIm1pa2FzYS5ob2trYWlkby5qcCIsIm1pbmFtaWZ1''@;'; put 'put ''cmFuby5ob2trYWlkby5qcCIsIm1vbWJldHN1Lmhva2thaWRvLmpwIiwibW9zZXVzaGkuaG9ra2FpZG8uanAiLCJtdWthd2EuaG9ra2FpZG8uanAiLCJtdXJvcmFuLmhva2thaWRvLmpwIiwibmFpZS5ob2trYWlkby5qcCIsIm5ha2FnYXdhLmhva2thaWRvLmpwIiwibmFrYXNhdHN1bmFpLmhv''@;'; put 'put ''a2thaWRvLmpwIiwibmFrYXRvbWJldHN1Lmhva2thaWRvLmpwIiwibmFuYWUuaG9ra2FpZG8uanAiLCJuYW5wb3JvLmhva2thaWRvLmpwIiwibmF5b3JvLmhva2thaWRvLmpwIiwibmVtdXJvLmhva2thaWRvLmpwIiwibmlpa2FwcHUuaG9ra2FpZG8uanAiLCJuaWtpLmhva2thaWRvLmpwIiwi''@;'; put 'put ''bmlzaGlva29wcGUuaG9ra2FpZG8uanAiLCJub2JvcmliZXRzdS5ob2trYWlkby5qcCIsIm51bWF0YS5ob2trYWlkby5qcCIsIm9iaWhpcm8uaG9ra2FpZG8uanAiLCJvYmlyYS5ob2trYWlkby5qcCIsIm9rZXRvLmhva2thaWRvLmpwIiwib2tvcHBlLmhva2thaWRvLmpwIiwib3RhcnUuaG9r''@;'; put 'put ''a2FpZG8uanAiLCJvdG9iZS5ob2trYWlkby5qcCIsIm90b2Z1a2UuaG9ra2FpZG8uanAiLCJvdG9pbmVwcHUuaG9ra2FpZG8uanAiLCJvdW11Lmhva2thaWRvLmpwIiwib3pvcmEuaG9ra2FpZG8uanAiLCJwaXBwdS5ob2trYWlkby5qcCIsInJhbmtvc2hpLmhva2thaWRvLmpwIiwicmVidW4u''@;'; put 'put ''aG9ra2FpZG8uanAiLCJyaWt1YmV0c3UuaG9ra2FpZG8uanAiLCJyaXNoaXJpLmhva2thaWRvLmpwIiwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanAiLCJzYXJvbWEuaG9ra2FpZG8uanAiLCJzYXJ1ZnV0c3UuaG9ra2FpZG8uanAiLCJzaGFrb3Rhbi5ob2trYWlkby5qcCIsInNoYXJpLmhva2th''@;'; put 'put ''aWRvLmpwIiwic2hpYmVjaGEuaG9ra2FpZG8uanAiLCJzaGliZXRzdS5ob2trYWlkby5qcCIsInNoaWthYmUuaG9ra2FpZG8uanAiLCJzaGlrYW9pLmhva2thaWRvLmpwIiwic2hpbWFtYWtpLmhva2thaWRvLmpwIiwic2hpbWl6dS5ob2trYWlkby5qcCIsInNoaW1va2F3YS5ob2trYWlkby5q''@;'; put 'put ''cCIsInNoaW5zaGlub3RzdS5ob2trYWlkby5qcCIsInNoaW50b2t1Lmhva2thaWRvLmpwIiwic2hpcmFudWthLmhva2thaWRvLmpwIiwic2hpcmFvaS5ob2trYWlkby5qcCIsInNoaXJpdWNoaS5ob2trYWlkby5qcCIsInNvYmV0c3UuaG9ra2FpZG8uanAiLCJzdW5hZ2F3YS5ob2trYWlkby5q''@;'; put 'put ''cCIsInRhaWtpLmhva2thaWRvLmpwIiwidGFrYXN1Lmhva2thaWRvLmpwIiwidGFraWthd2EuaG9ra2FpZG8uanAiLCJ0YWtpbm91ZS5ob2trYWlkby5qcCIsInRlc2hpa2FnYS5ob2trYWlkby5qcCIsInRvYmV0c3UuaG9ra2FpZG8uanAiLCJ0b2htYS5ob2trYWlkby5qcCIsInRvbWFrb21h''@;'; put 'put ''aS5ob2trYWlkby5qcCIsInRvbWFyaS5ob2trYWlkby5qcCIsInRveWEuaG9ra2FpZG8uanAiLCJ0b3lha28uaG9ra2FpZG8uanAiLCJ0b3lvdG9taS5ob2trYWlkby5qcCIsInRveW91cmEuaG9ra2FpZG8uanAiLCJ0c3ViZXRzdS5ob2trYWlkby5qcCIsInRzdWtpZ2F0YS5ob2trYWlkby5q''@;'; put 'put ''cCIsInVyYWthd2EuaG9ra2FpZG8uanAiLCJ1cmF1c3UuaG9ra2FpZG8uanAiLCJ1cnl1Lmhva2thaWRvLmpwIiwidXRhc2hpbmFpLmhva2thaWRvLmpwIiwid2Fra2FuYWkuaG9ra2FpZG8uanAiLCJ3YXNzYW11Lmhva2thaWRvLmpwIiwieWFrdW1vLmhva2thaWRvLmpwIiwieW9pY2hpLmhv''@;'; put 'put ''a2thaWRvLmpwIiwiYWlvaS5oeW9nby5qcCIsImFrYXNoaS5oeW9nby5qcCIsImFrby5oeW9nby5qcCIsImFtYWdhc2FraS5oeW9nby5qcCIsImFvZ2FraS5oeW9nby5qcCIsImFzYWdvLmh5b2dvLmpwIiwiYXNoaXlhLmh5b2dvLmpwIiwiYXdhamkuaHlvZ28uanAiLCJmdWt1c2FraS5oeW9n''@;'; put 'put ''by5qcCIsImdvc2hpa2kuaHlvZ28uanAiLCJoYXJpbWEuaHlvZ28uanAiLCJoaW1lamkuaHlvZ28uanAiLCJpY2hpa2F3YS5oeW9nby5qcCIsImluYWdhd2EuaHlvZ28uanAiLCJpdGFtaS5oeW9nby5qcCIsImtha29nYXdhLmh5b2dvLmpwIiwia2FtaWdvcmkuaHlvZ28uanAiLCJrYW1pa2F3''@;'; put 'put ''YS5oeW9nby5qcCIsImthc2FpLmh5b2dvLmpwIiwia2FzdWdhLmh5b2dvLmpwIiwia2F3YW5pc2hpLmh5b2dvLmpwIiwibWlraS5oeW9nby5qcCIsIm1pbmFtaWF3YWppLmh5b2dvLmpwIiwibmlzaGlub21peWEuaHlvZ28uanAiLCJuaXNoaXdha2kuaHlvZ28uanAiLCJvbm8uaHlvZ28uanAi''@;'; put 'put ''LCJzYW5kYS5oeW9nby5qcCIsInNhbm5hbi5oeW9nby5qcCIsInNhc2F5YW1hLmh5b2dvLmpwIiwic2F5by5oeW9nby5qcCIsInNoaW5ndS5oeW9nby5qcCIsInNoaW5vbnNlbi5oeW9nby5qcCIsInNoaXNvLmh5b2dvLmpwIiwic3Vtb3RvLmh5b2dvLmpwIiwidGFpc2hpLmh5b2dvLmpwIiwi''@;'; put 'put ''dGFrYS5oeW9nby5qcCIsInRha2FyYXp1a2EuaHlvZ28uanAiLCJ0YWthc2Fnby5oeW9nby5qcCIsInRha2luby5oeW9nby5qcCIsInRhbWJhLmh5b2dvLmpwIiwidGF0c3Vuby5oeW9nby5qcCIsInRveW9va2EuaHlvZ28uanAiLCJ5YWJ1Lmh5b2dvLmpwIiwieWFzaGlyby5oeW9nby5qcCIs''@;'; put 'put ''Inlva2EuaHlvZ28uanAiLCJ5b2thd2EuaHlvZ28uanAiLCJhbWkuaWJhcmFraS5qcCIsImFzYWhpLmliYXJha2kuanAiLCJiYW5kby5pYmFyYWtpLmpwIiwiY2hpa3VzZWkuaWJhcmFraS5qcCIsImRhaWdvLmliYXJha2kuanAiLCJmdWppc2hpcm8uaWJhcmFraS5qcCIsImhpdGFjaGkuaWJh''@;'; put 'put ''cmFraS5qcCIsImhpdGFjaGluYWthLmliYXJha2kuanAiLCJoaXRhY2hpb21peWEuaWJhcmFraS5qcCIsImhpdGFjaGlvdGEuaWJhcmFraS5qcCIsImliYXJha2kuaWJhcmFraS5qcCIsImluYS5pYmFyYWtpLmpwIiwiaW5hc2hpa2kuaWJhcmFraS5qcCIsIml0YWtvLmliYXJha2kuanAiLCJp''@;'; put 'put ''d2FtYS5pYmFyYWtpLmpwIiwiam9zby5pYmFyYWtpLmpwIiwia2FtaXN1LmliYXJha2kuanAiLCJrYXNhbWEuaWJhcmFraS5qcCIsImthc2hpbWEuaWJhcmFraS5qcCIsImthc3VtaWdhdXJhLmliYXJha2kuanAiLCJrb2dhLmliYXJha2kuanAiLCJtaWhvLmliYXJha2kuanAiLCJtaXRvLmli''@;'; put 'put ''YXJha2kuanAiLCJtb3JpeWEuaWJhcmFraS5qcCIsIm5ha2EuaWJhcmFraS5qcCIsIm5hbWVnYXRhLmliYXJha2kuanAiLCJvYXJhaS5pYmFyYWtpLmpwIiwib2dhd2EuaWJhcmFraS5qcCIsIm9taXRhbWEuaWJhcmFraS5qcCIsInJ5dWdhc2FraS5pYmFyYWtpLmpwIiwic2FrYWkuaWJhcmFr''@;'; put 'put ''aS5qcCIsInNha3VyYWdhd2EuaWJhcmFraS5qcCIsInNoaW1vZGF0ZS5pYmFyYWtpLmpwIiwic2hpbW90c3VtYS5pYmFyYWtpLmpwIiwic2hpcm9zYXRvLmliYXJha2kuanAiLCJzb3dhLmliYXJha2kuanAiLCJzdWlmdS5pYmFyYWtpLmpwIiwidGFrYWhhZ2kuaWJhcmFraS5qcCIsInRhbWF0''@;'; put 'put ''c3VrdXJpLmliYXJha2kuanAiLCJ0b2thaS5pYmFyYWtpLmpwIiwidG9tb2JlLmliYXJha2kuanAiLCJ0b25lLmliYXJha2kuanAiLCJ0b3JpZGUuaWJhcmFraS5qcCIsInRzdWNoaXVyYS5pYmFyYWtpLmpwIiwidHN1a3ViYS5pYmFyYWtpLmpwIiwidWNoaWhhcmEuaWJhcmFraS5qcCIsInVz''@;'; put 'put ''aGlrdS5pYmFyYWtpLmpwIiwieWFjaGl5by5pYmFyYWtpLmpwIiwieWFtYWdhdGEuaWJhcmFraS5qcCIsInlhd2FyYS5pYmFyYWtpLmpwIiwieXVraS5pYmFyYWtpLmpwIiwiYW5hbWl6dS5pc2hpa2F3YS5qcCIsImhha3VpLmlzaGlrYXdhLmpwIiwiaGFrdXNhbi5pc2hpa2F3YS5qcCIsImth''@;'; put 'put ''Z2EuaXNoaWthd2EuanAiLCJrYWhva3UuaXNoaWthd2EuanAiLCJrYW5hemF3YS5pc2hpa2F3YS5qcCIsImthd2FraXRhLmlzaGlrYXdhLmpwIiwia29tYXRzdS5pc2hpa2F3YS5qcCIsIm5ha2Fub3RvLmlzaGlrYXdhLmpwIiwibmFuYW8uaXNoaWthd2EuanAiLCJub21pLmlzaGlrYXdhLmpw''@;'; put 'put ''Iiwibm9ub2ljaGkuaXNoaWthd2EuanAiLCJub3RvLmlzaGlrYXdhLmpwIiwic2hpa2EuaXNoaWthd2EuanAiLCJzdXp1LmlzaGlrYXdhLmpwIiwidHN1YmF0YS5pc2hpa2F3YS5qcCIsInRzdXJ1Z2kuaXNoaWthd2EuanAiLCJ1Y2hpbmFkYS5pc2hpa2F3YS5qcCIsIndhamltYS5pc2hpa2F3''@;'; put 'put ''YS5qcCIsImZ1ZGFpLml3YXRlLmpwIiwiZnVqaXNhd2EuaXdhdGUuanAiLCJoYW5hbWFraS5pd2F0ZS5qcCIsImhpcmFpenVtaS5pd2F0ZS5qcCIsImhpcm9uby5pd2F0ZS5qcCIsImljaGlub2hlLml3YXRlLmpwIiwiaWNoaW5vc2VraS5pd2F0ZS5qcCIsIml3YWl6dW1pLml3YXRlLmpwIiwi''@;'; put 'put ''aXdhdGUuaXdhdGUuanAiLCJqb2JvamkuaXdhdGUuanAiLCJrYW1haXNoaS5pd2F0ZS5qcCIsImthbmVnYXNha2kuaXdhdGUuanAiLCJrYXJ1bWFpLml3YXRlLmpwIiwia2F3YWkuaXdhdGUuanAiLCJraXRha2FtaS5pd2F0ZS5qcCIsImt1amkuaXdhdGUuanAiLCJrdW5vaGUuaXdhdGUuanAi''@;'; put 'put ''LCJrdXp1bWFraS5pd2F0ZS5qcCIsIm1peWFrby5pd2F0ZS5qcCIsIm1penVzYXdhLml3YXRlLmpwIiwibW9yaW9rYS5pd2F0ZS5qcCIsIm5pbm9oZS5pd2F0ZS5qcCIsIm5vZGEuaXdhdGUuanAiLCJvZnVuYXRvLml3YXRlLmpwIiwib3NodS5pd2F0ZS5qcCIsIm90c3VjaGkuaXdhdGUuanAi''@;'; put 'put ''LCJyaWt1emVudGFrYXRhLml3YXRlLmpwIiwic2hpd2EuaXdhdGUuanAiLCJzaGl6dWt1aXNoaS5pd2F0ZS5qcCIsInN1bWl0YS5pd2F0ZS5qcCIsInRhbm9oYXRhLml3YXRlLmpwIiwidG9uby5pd2F0ZS5qcCIsInlhaGFiYS5pd2F0ZS5qcCIsInlhbWFkYS5pd2F0ZS5qcCIsImF5YWdhd2Eu''@;'; put 'put ''a2FnYXdhLmpwIiwiaGlnYXNoaWthZ2F3YS5rYWdhd2EuanAiLCJrYW5vbmppLmthZ2F3YS5qcCIsImtvdG9oaXJhLmthZ2F3YS5qcCIsIm1hbm5vLmthZ2F3YS5qcCIsIm1hcnVnYW1lLmthZ2F3YS5qcCIsIm1pdG95by5rYWdhd2EuanAiLCJuYW9zaGltYS5rYWdhd2EuanAiLCJzYW51a2ku''@;'; put 'put ''a2FnYXdhLmpwIiwidGFkb3RzdS5rYWdhd2EuanAiLCJ0YWthbWF0c3Uua2FnYXdhLmpwIiwidG9ub3Noby5rYWdhd2EuanAiLCJ1Y2hpbm9taS5rYWdhd2EuanAiLCJ1dGF6dS5rYWdhd2EuanAiLCJ6ZW50c3VqaS5rYWdhd2EuanAiLCJha3VuZS5rYWdvc2hpbWEuanAiLCJhbWFtaS5rYWdv''@;'; put 'put ''c2hpbWEuanAiLCJoaW9raS5rYWdvc2hpbWEuanAiLCJpc2Eua2Fnb3NoaW1hLmpwIiwiaXNlbi5rYWdvc2hpbWEuanAiLCJpenVtaS5rYWdvc2hpbWEuanAiLCJrYWdvc2hpbWEua2Fnb3NoaW1hLmpwIiwia2Fub3lhLmthZ29zaGltYS5qcCIsImthd2FuYWJlLmthZ29zaGltYS5qcCIsImtp''@;'; put 'put ''bmtvLmthZ29zaGltYS5qcCIsImtvdXlhbWEua2Fnb3NoaW1hLmpwIiwibWFrdXJhemFraS5rYWdvc2hpbWEuanAiLCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwIiwibWluYW1pdGFuZS5rYWdvc2hpbWEuanAiLCJuYWthdGFuZS5rYWdvc2hpbWEuanAiLCJuaXNoaW5vb21vdGUua2Fnb3NoaW1h''@;'; put 'put ''LmpwIiwic2F0c3VtYXNlbmRhaS5rYWdvc2hpbWEuanAiLCJzb28ua2Fnb3NoaW1hLmpwIiwidGFydW1penUua2Fnb3NoaW1hLmpwIiwieXVzdWkua2Fnb3NoaW1hLmpwIiwiYWlrYXdhLmthbmFnYXdhLmpwIiwiYXRzdWdpLmthbmFnYXdhLmpwIiwiYXlhc2Uua2FuYWdhd2EuanAiLCJjaGln''@;'; put 'put ''YXNha2kua2FuYWdhd2EuanAiLCJlYmluYS5rYW5hZ2F3YS5qcCIsImZ1amlzYXdhLmthbmFnYXdhLmpwIiwiaGFkYW5vLmthbmFnYXdhLmpwIiwiaGFrb25lLmthbmFnYXdhLmpwIiwiaGlyYXRzdWthLmthbmFnYXdhLmpwIiwiaXNlaGFyYS5rYW5hZ2F3YS5qcCIsImthaXNlaS5rYW5hZ2F3''@;'; put 'put ''YS5qcCIsImthbWFrdXJhLmthbmFnYXdhLmpwIiwia2l5b2thd2Eua2FuYWdhd2EuanAiLCJtYXRzdWRhLmthbmFnYXdhLmpwIiwibWluYW1pYXNoaWdhcmEua2FuYWdhd2EuanAiLCJtaXVyYS5rYW5hZ2F3YS5qcCIsIm5ha2FpLmthbmFnYXdhLmpwIiwibmlub21peWEua2FuYWdhd2EuanAi''@;'; put 'put ''LCJvZGF3YXJhLmthbmFnYXdhLmpwIiwib2kua2FuYWdhd2EuanAiLCJvaXNvLmthbmFnYXdhLmpwIiwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcCIsInNhbXVrYXdhLmthbmFnYXdhLmpwIiwidHN1a3VpLmthbmFnYXdhLmpwIiwieWFtYWtpdGEua2FuYWdhd2EuanAiLCJ5YW1hdG8ua2FuYWdh''@;'; put 'put ''d2EuanAiLCJ5b2tvc3VrYS5rYW5hZ2F3YS5qcCIsInl1Z2F3YXJhLmthbmFnYXdhLmpwIiwiemFtYS5rYW5hZ2F3YS5qcCIsInp1c2hpLmthbmFnYXdhLmpwIiwiYWtpLmtvY2hpLmpwIiwiZ2Vpc2VpLmtvY2hpLmpwIiwiaGlkYWthLmtvY2hpLmpwIiwiaGlnYXNoaXRzdW5vLmtvY2hpLmpw''@;'; put 'put ''IiwiaW5vLmtvY2hpLmpwIiwia2FnYW1pLmtvY2hpLmpwIiwia2FtaS5rb2NoaS5qcCIsImtpdGFnYXdhLmtvY2hpLmpwIiwia29jaGkua29jaGkuanAiLCJtaWhhcmEua29jaGkuanAiLCJtb3RveWFtYS5rb2NoaS5qcCIsIm11cm90by5rb2NoaS5qcCIsIm5haGFyaS5rb2NoaS5qcCIsIm5h''@;'; put 'put ''a2FtdXJhLmtvY2hpLmpwIiwibmFua29rdS5rb2NoaS5qcCIsIm5pc2hpdG9zYS5rb2NoaS5qcCIsIm5peW9kb2dhd2Eua29jaGkuanAiLCJvY2hpLmtvY2hpLmpwIiwib2thd2Eua29jaGkuanAiLCJvdG95by5rb2NoaS5qcCIsIm90c3VraS5rb2NoaS5qcCIsInNha2F3YS5rb2NoaS5qcCIs''@;'; put 'put ''InN1a3Vtby5rb2NoaS5qcCIsInN1c2FraS5rb2NoaS5qcCIsInRvc2Eua29jaGkuanAiLCJ0b3Nhc2hpbWl6dS5rb2NoaS5qcCIsInRveW8ua29jaGkuanAiLCJ0c3Vuby5rb2NoaS5qcCIsInVtYWppLmtvY2hpLmpwIiwieWFzdWRhLmtvY2hpLmpwIiwieXVzdWhhcmEua29jaGkuanAiLCJh''@;'; put 'put ''bWFrdXNhLmt1bWFtb3RvLmpwIiwiYXJhby5rdW1hbW90by5qcCIsImFzby5rdW1hbW90by5qcCIsImNob3lvLmt1bWFtb3RvLmpwIiwiZ3lva3V0by5rdW1hbW90by5qcCIsImthbWlhbWFrdXNhLmt1bWFtb3RvLmpwIiwia2lrdWNoaS5rdW1hbW90by5qcCIsImt1bWFtb3RvLmt1bWFtb3Rv''@;'; put 'put ''LmpwIiwibWFzaGlraS5rdW1hbW90by5qcCIsIm1pZnVuZS5rdW1hbW90by5qcCIsIm1pbmFtYXRhLmt1bWFtb3RvLmpwIiwibWluYW1pb2d1bmkua3VtYW1vdG8uanAiLCJuYWdhc3Uua3VtYW1vdG8uanAiLCJuaXNoaWhhcmEua3VtYW1vdG8uanAiLCJvZ3VuaS5rdW1hbW90by5qcCIsIm96''@;'; put 'put ''dS5rdW1hbW90by5qcCIsInN1bW90by5rdW1hbW90by5qcCIsInRha2Ftb3JpLmt1bWFtb3RvLmpwIiwidWtpLmt1bWFtb3RvLmpwIiwidXRvLmt1bWFtb3RvLmpwIiwieWFtYWdhLmt1bWFtb3RvLmpwIiwieWFtYXRvLmt1bWFtb3RvLmpwIiwieWF0c3VzaGlyby5rdW1hbW90by5qcCIsImF5''@;'; put 'put ''YWJlLmt5b3RvLmpwIiwiZnVrdWNoaXlhbWEua3lvdG8uanAiLCJoaWdhc2hpeWFtYS5reW90by5qcCIsImlkZS5reW90by5qcCIsImluZS5reW90by5qcCIsImpveW8ua3lvdG8uanAiLCJrYW1lb2thLmt5b3RvLmpwIiwia2Ftby5reW90by5qcCIsImtpdGEua3lvdG8uanAiLCJraXp1Lmt5''@;'; put 'put ''b3RvLmpwIiwia3VtaXlhbWEua3lvdG8uanAiLCJreW90YW1iYS5reW90by5qcCIsImt5b3RhbmFiZS5reW90by5qcCIsImt5b3RhbmdvLmt5b3RvLmpwIiwibWFpenVydS5reW90by5qcCIsIm1pbmFtaS5reW90by5qcCIsIm1pbmFtaXlhbWFzaGlyby5reW90by5qcCIsIm1peWF6dS5reW90''@;'; put 'put ''by5qcCIsIm11a28ua3lvdG8uanAiLCJuYWdhb2tha3lvLmt5b3RvLmpwIiwibmFrYWd5by5reW90by5qcCIsIm5hbnRhbi5reW90by5qcCIsIm95YW1hemFraS5reW90by5qcCIsInNha3lvLmt5b3RvLmpwIiwic2Vpa2Eua3lvdG8uanAiLCJ0YW5hYmUua3lvdG8uanAiLCJ1amkua3lvdG8u''@;'; put 'put ''anAiLCJ1aml0YXdhcmEua3lvdG8uanAiLCJ3YXp1a2Eua3lvdG8uanAiLCJ5YW1hc2hpbmEua3lvdG8uanAiLCJ5YXdhdGEua3lvdG8uanAiLCJhc2FoaS5taWUuanAiLCJpbmFiZS5taWUuanAiLCJpc2UubWllLmpwIiwia2FtZXlhbWEubWllLmpwIiwia2F3YWdvZS5taWUuanAiLCJraWhv''@;'; put 'put ''Lm1pZS5qcCIsImtpc29zYWtpLm1pZS5qcCIsImtpd2EubWllLmpwIiwia29tb25vLm1pZS5qcCIsImt1bWFuby5taWUuanAiLCJrdXdhbmEubWllLmpwIiwibWF0c3VzYWthLm1pZS5qcCIsIm1laXdhLm1pZS5qcCIsIm1paGFtYS5taWUuanAiLCJtaW5hbWlpc2UubWllLmpwIiwibWlzdWdp''@;'; put 'put ''Lm1pZS5qcCIsIm1peWFtYS5taWUuanAiLCJuYWJhcmkubWllLmpwIiwic2hpbWEubWllLmpwIiwic3V6dWthLm1pZS5qcCIsInRhZG8ubWllLmpwIiwidGFpa2kubWllLmpwIiwidGFraS5taWUuanAiLCJ0YW1ha2kubWllLmpwIiwidG9iYS5taWUuanAiLCJ0c3UubWllLmpwIiwidWRvbm8u''@;'; put 'put ''bWllLmpwIiwidXJlc2hpbm8ubWllLmpwIiwid2F0YXJhaS5taWUuanAiLCJ5b2trYWljaGkubWllLmpwIiwiZnVydWthd2EubWl5YWdpLmpwIiwiaGlnYXNoaW1hdHN1c2hpbWEubWl5YWdpLmpwIiwiaXNoaW5vbWFraS5taXlhZ2kuanAiLCJpd2FudW1hLm1peWFnaS5qcCIsImtha3VkYS5t''@;'; put 'put ''aXlhZ2kuanAiLCJrYW1pLm1peWFnaS5qcCIsImthd2FzYWtpLm1peWFnaS5qcCIsIm1hcnVtb3JpLm1peWFnaS5qcCIsIm1hdHN1c2hpbWEubWl5YWdpLmpwIiwibWluYW1pc2FucmlrdS5taXlhZ2kuanAiLCJtaXNhdG8ubWl5YWdpLmpwIiwibXVyYXRhLm1peWFnaS5qcCIsIm5hdG9yaS5t''@;'; put 'put ''aXlhZ2kuanAiLCJvZ2F3YXJhLm1peWFnaS5qcCIsIm9oaXJhLm1peWFnaS5qcCIsIm9uYWdhd2EubWl5YWdpLmpwIiwib3Nha2kubWl5YWdpLmpwIiwicmlmdS5taXlhZ2kuanAiLCJzZW1pbmUubWl5YWdpLmpwIiwic2hpYmF0YS5taXlhZ2kuanAiLCJzaGljaGlrYXNodWt1Lm1peWFnaS5q''@;'; put 'put ''cCIsInNoaWthbWEubWl5YWdpLmpwIiwic2hpb2dhbWEubWl5YWdpLmpwIiwic2hpcm9pc2hpLm1peWFnaS5qcCIsInRhZ2Fqby5taXlhZ2kuanAiLCJ0YWl3YS5taXlhZ2kuanAiLCJ0b21lLm1peWFnaS5qcCIsInRvbWl5YS5taXlhZ2kuanAiLCJ3YWt1eWEubWl5YWdpLmpwIiwid2F0YXJp''@;'; put 'put ''Lm1peWFnaS5qcCIsInlhbWFtb3RvLm1peWFnaS5qcCIsInphby5taXlhZ2kuanAiLCJheWEubWl5YXpha2kuanAiLCJlYmluby5taXlhemFraS5qcCIsImdva2FzZS5taXlhemFraS5qcCIsImh5dWdhLm1peWF6YWtpLmpwIiwia2Fkb2dhd2EubWl5YXpha2kuanAiLCJrYXdhbWluYW1pLm1p''@;'; put 'put ''eWF6YWtpLmpwIiwia2lqby5taXlhemFraS5qcCIsImtpdGFnYXdhLm1peWF6YWtpLmpwIiwia2l0YWthdGEubWl5YXpha2kuanAiLCJraXRhdXJhLm1peWF6YWtpLmpwIiwia29iYXlhc2hpLm1peWF6YWtpLmpwIiwia3VuaXRvbWkubWl5YXpha2kuanAiLCJrdXNoaW1hLm1peWF6YWtpLmpw''@;'; put 'put ''IiwibWltYXRhLm1peWF6YWtpLmpwIiwibWl5YWtvbm9qby5taXlhemFraS5qcCIsIm1peWF6YWtpLm1peWF6YWtpLmpwIiwibW9yb3RzdWthLm1peWF6YWtpLmpwIiwibmljaGluYW4ubWl5YXpha2kuanAiLCJuaXNoaW1lcmEubWl5YXpha2kuanAiLCJub2Jlb2thLm1peWF6YWtpLmpwIiwi''@;'; put 'put ''c2FpdG8ubWl5YXpha2kuanAiLCJzaGlpYmEubWl5YXpha2kuanAiLCJzaGludG9taS5taXlhemFraS5qcCIsInRha2FoYXJ1Lm1peWF6YWtpLmpwIiwidGFrYW5hYmUubWl5YXpha2kuanAiLCJ0YWthemFraS5taXlhemFraS5qcCIsInRzdW5vLm1peWF6YWtpLmpwIiwiYWNoaS5uYWdhbm8u''@;'; put 'put ''anAiLCJhZ2VtYXRzdS5uYWdhbm8uanAiLCJhbmFuLm5hZ2Fuby5qcCIsImFva2kubmFnYW5vLmpwIiwiYXNhaGkubmFnYW5vLmpwIiwiYXp1bWluby5uYWdhbm8uanAiLCJjaGlrdWhva3UubmFnYW5vLmpwIiwiY2hpa3VtYS5uYWdhbm8uanAiLCJjaGluby5uYWdhbm8uanAiLCJmdWppbWku''@;'; put 'put ''bmFnYW5vLmpwIiwiaGFrdWJhLm5hZ2Fuby5qcCIsImhhcmEubmFnYW5vLmpwIiwiaGlyYXlhLm5hZ2Fuby5qcCIsImlpZGEubmFnYW5vLmpwIiwiaWlqaW1hLm5hZ2Fuby5qcCIsImlpeWFtYS5uYWdhbm8uanAiLCJpaXp1bmEubmFnYW5vLmpwIiwiaWtlZGEubmFnYW5vLmpwIiwiaWt1c2Fr''@;'; put 'put ''YS5uYWdhbm8uanAiLCJpbmEubmFnYW5vLmpwIiwia2FydWl6YXdhLm5hZ2Fuby5qcCIsImthd2FrYW1pLm5hZ2Fuby5qcCIsImtpc28ubmFnYW5vLmpwIiwia2lzb2Z1a3VzaGltYS5uYWdhbm8uanAiLCJraXRhYWlraS5uYWdhbm8uanAiLCJrb21hZ2FuZS5uYWdhbm8uanAiLCJrb21vcm8u''@;'; put 'put ''bmFnYW5vLmpwIiwibWF0c3VrYXdhLm5hZ2Fuby5qcCIsIm1hdHN1bW90by5uYWdhbm8uanAiLCJtaWFzYS5uYWdhbm8uanAiLCJtaW5hbWlhaWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1ha2kubmFnYW5vLmpwIiwibWluYW1pbWlub3dhLm5hZ2Fuby5qcCIsIm1pbm93YS5uYWdhbm8uanAiLCJt''@;'; put 'put ''aXlhZGEubmFnYW5vLmpwIiwibWl5b3RhLm5hZ2Fuby5qcCIsIm1vY2hpenVraS5uYWdhbm8uanAiLCJuYWdhbm8ubmFnYW5vLmpwIiwibmFnYXdhLm5hZ2Fuby5qcCIsIm5hZ2lzby5uYWdhbm8uanAiLCJuYWthZ2F3YS5uYWdhbm8uanAiLCJuYWthbm8ubmFnYW5vLmpwIiwibm96YXdhb25z''@;'; put 'put ''ZW4ubmFnYW5vLmpwIiwib2J1c2UubmFnYW5vLmpwIiwib2dhd2EubmFnYW5vLmpwIiwib2theWEubmFnYW5vLmpwIiwib21hY2hpLm5hZ2Fuby5qcCIsIm9taS5uYWdhbm8uanAiLCJvb2t1d2EubmFnYW5vLmpwIiwib29zaGlrYS5uYWdhbm8uanAiLCJvdGFraS5uYWdhbm8uanAiLCJvdGFy''@;'; put 'put ''aS5uYWdhbm8uanAiLCJzYWthZS5uYWdhbm8uanAiLCJzYWtha2kubmFnYW5vLmpwIiwic2FrdS5uYWdhbm8uanAiLCJzYWt1aG8ubmFnYW5vLmpwIiwic2hpbW9zdXdhLm5hZ2Fuby5qcCIsInNoaW5hbm9tYWNoaS5uYWdhbm8uanAiLCJzaGlvamlyaS5uYWdhbm8uanAiLCJzdXdhLm5hZ2Fu''@;'; put 'put ''by5qcCIsInN1emFrYS5uYWdhbm8uanAiLCJ0YWthZ2kubmFnYW5vLmpwIiwidGFrYW1vcmkubmFnYW5vLmpwIiwidGFrYXlhbWEubmFnYW5vLmpwIiwidGF0ZXNoaW5hLm5hZ2Fuby5qcCIsInRhdHN1bm8ubmFnYW5vLmpwIiwidG9nYWt1c2hpLm5hZ2Fuby5qcCIsInRvZ3VyYS5uYWdhbm8u''@;'; put 'put ''anAiLCJ0b21pLm5hZ2Fuby5qcCIsInVlZGEubmFnYW5vLmpwIiwid2FkYS5uYWdhbm8uanAiLCJ5YW1hZ2F0YS5uYWdhbm8uanAiLCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcCIsInlhc2FrYS5uYWdhbm8uanAiLCJ5YXN1b2thLm5hZ2Fuby5qcCIsImNoaWppd2EubmFnYXNha2kuanAiLCJmdXRz''@;'; put 'put ''dS5uYWdhc2FraS5qcCIsImdvdG8ubmFnYXNha2kuanAiLCJoYXNhbWkubmFnYXNha2kuanAiLCJoaXJhZG8ubmFnYXNha2kuanAiLCJpa2kubmFnYXNha2kuanAiLCJpc2FoYXlhLm5hZ2FzYWtpLmpwIiwia2F3YXRhbmEubmFnYXNha2kuanAiLCJrdWNoaW5vdHN1Lm5hZ2FzYWtpLmpwIiwi''@;'; put 'put ''bWF0c3V1cmEubmFnYXNha2kuanAiLCJuYWdhc2FraS5uYWdhc2FraS5qcCIsIm9iYW1hLm5hZ2FzYWtpLmpwIiwib211cmEubmFnYXNha2kuanAiLCJvc2V0by5uYWdhc2FraS5qcCIsInNhaWthaS5uYWdhc2FraS5qcCIsInNhc2Viby5uYWdhc2FraS5qcCIsInNlaWhpLm5hZ2FzYWtpLmpw''@;'; put 'put ''Iiwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwIiwic2hpbmthbWlnb3RvLm5hZ2FzYWtpLmpwIiwidG9naXRzdS5uYWdhc2FraS5qcCIsInRzdXNoaW1hLm5hZ2FzYWtpLmpwIiwidW56ZW4ubmFnYXNha2kuanAiLCJhbmRvLm5hcmEuanAiLCJnb3NlLm5hcmEuanAiLCJoZWd1cmkubmFyYS5qcCIs''@;'; put 'put ''ImhpZ2FzaGl5b3NoaW5vLm5hcmEuanAiLCJpa2FydWdhLm5hcmEuanAiLCJpa29tYS5uYXJhLmpwIiwia2FtaWtpdGF5YW1hLm5hcmEuanAiLCJrYW5tYWtpLm5hcmEuanAiLCJrYXNoaWJhLm5hcmEuanAiLCJrYXNoaWhhcmEubmFyYS5qcCIsImthdHN1cmFnaS5uYXJhLmpwIiwia2F3YWku''@;'; put 'put ''bmFyYS5qcCIsImthd2FrYW1pLm5hcmEuanAiLCJrYXdhbmlzaGkubmFyYS5qcCIsImtvcnlvLm5hcmEuanAiLCJrdXJvdGFraS5uYXJhLmpwIiwibWl0c3VlLm5hcmEuanAiLCJtaXlha2UubmFyYS5qcCIsIm5hcmEubmFyYS5qcCIsIm5vc2VnYXdhLm5hcmEuanAiLCJvamkubmFyYS5qcCIs''@;'; put 'put ''Im91ZGEubmFyYS5qcCIsIm95b2RvLm5hcmEuanAiLCJzYWt1cmFpLm5hcmEuanAiLCJzYW5nby5uYXJhLmpwIiwic2hpbW9pY2hpLm5hcmEuanAiLCJzaGltb2tpdGF5YW1hLm5hcmEuanAiLCJzaGluam8ubmFyYS5qcCIsInNvbmkubmFyYS5qcCIsInRha2F0b3JpLm5hcmEuanAiLCJ0YXdh''@;'; put 'put ''cmFtb3RvLm5hcmEuanAiLCJ0ZW5rYXdhLm5hcmEuanAiLCJ0ZW5yaS5uYXJhLmpwIiwidWRhLm5hcmEuanAiLCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwIiwieWFtYXRvdGFrYWRhLm5hcmEuanAiLCJ5YW1hem9lLm5hcmEuanAiLCJ5b3NoaW5vLm5hcmEuanAiLCJhZ2EubmlpZ2F0YS5qcCIs''@;'; put 'put ''ImFnYW5vLm5paWdhdGEuanAiLCJnb3Nlbi5uaWlnYXRhLmpwIiwiaXRvaWdhd2EubmlpZ2F0YS5qcCIsIml6dW1vemFraS5uaWlnYXRhLmpwIiwiam9ldHN1Lm5paWdhdGEuanAiLCJrYW1vLm5paWdhdGEuanAiLCJrYXJpd2EubmlpZ2F0YS5qcCIsImthc2hpd2F6YWtpLm5paWdhdGEuanAi''@;'; put 'put ''LCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcCIsIm1pdHN1a2UubmlpZ2F0YS5qcCIsIm11aWthLm5paWdhdGEuanAiLCJtdXJha2FtaS5uaWlnYXRhLmpwIiwibXlva28ubmlpZ2F0YS5qcCIsIm5hZ2Fva2EubmlpZ2F0YS5qcCIsIm5paWdhdGEubmlpZ2F0YS5qcCIsIm9qaXlhLm5paWdhdGEu''@;'; put 'put ''anAiLCJvbWkubmlpZ2F0YS5qcCIsInNhZG8ubmlpZ2F0YS5qcCIsInNhbmpvLm5paWdhdGEuanAiLCJzZWlyby5uaWlnYXRhLmpwIiwic2Vpcm91Lm5paWdhdGEuanAiLCJzZWtpa2F3YS5uaWlnYXRhLmpwIiwic2hpYmF0YS5uaWlnYXRhLmpwIiwidGFnYW1pLm5paWdhdGEuanAiLCJ0YWlu''@;'; put 'put ''YWkubmlpZ2F0YS5qcCIsInRvY2hpby5uaWlnYXRhLmpwIiwidG9rYW1hY2hpLm5paWdhdGEuanAiLCJ0c3ViYW1lLm5paWdhdGEuanAiLCJ0c3VuYW4ubmlpZ2F0YS5qcCIsInVvbnVtYS5uaWlnYXRhLmpwIiwieWFoaWtvLm5paWdhdGEuanAiLCJ5b2l0YS5uaWlnYXRhLmpwIiwieXV6YXdh''@;'; put 'put ''Lm5paWdhdGEuanAiLCJiZXBwdS5vaXRhLmpwIiwiYnVuZ29vbm8ub2l0YS5qcCIsImJ1bmdvdGFrYWRhLm9pdGEuanAiLCJoYXNhbWEub2l0YS5qcCIsImhpamkub2l0YS5qcCIsImhpbWVzaGltYS5vaXRhLmpwIiwiaGl0YS5vaXRhLmpwIiwia2FtaXRzdWUub2l0YS5qcCIsImtva29ub2Uu''@;'; put 'put ''b2l0YS5qcCIsImt1anUub2l0YS5qcCIsImt1bmlzYWtpLm9pdGEuanAiLCJrdXN1Lm9pdGEuanAiLCJvaXRhLm9pdGEuanAiLCJzYWlraS5vaXRhLmpwIiwidGFrZXRhLm9pdGEuanAiLCJ0c3VrdW1pLm9pdGEuanAiLCJ1c2Eub2l0YS5qcCIsInVzdWtpLm9pdGEuanAiLCJ5dWZ1Lm9pdGEu''@;'; put 'put ''anAiLCJha2Fpd2Eub2theWFtYS5qcCIsImFzYWt1Y2hpLm9rYXlhbWEuanAiLCJiaXplbi5va2F5YW1hLmpwIiwiaGF5YXNoaW1hLm9rYXlhbWEuanAiLCJpYmFyYS5va2F5YW1hLmpwIiwia2FnYW1pbm8ub2theWFtYS5qcCIsImthc2Fva2Eub2theWFtYS5qcCIsImtpYmljaHVvLm9rYXlh''@;'; put 'put ''bWEuanAiLCJrdW1lbmFuLm9rYXlhbWEuanAiLCJrdXJhc2hpa2kub2theWFtYS5qcCIsIm1hbml3YS5va2F5YW1hLmpwIiwibWlzYWtpLm9rYXlhbWEuanAiLCJuYWdpLm9rYXlhbWEuanAiLCJuaWltaS5va2F5YW1hLmpwIiwibmlzaGlhd2FrdXJhLm9rYXlhbWEuanAiLCJva2F5YW1hLm9r''@;'; put 'put ''YXlhbWEuanAiLCJzYXRvc2hvLm9rYXlhbWEuanAiLCJzZXRvdWNoaS5va2F5YW1hLmpwIiwic2hpbmpvLm9rYXlhbWEuanAiLCJzaG9vLm9rYXlhbWEuanAiLCJzb2phLm9rYXlhbWEuanAiLCJ0YWthaGFzaGkub2theWFtYS5qcCIsInRhbWFuby5va2F5YW1hLmpwIiwidHN1eWFtYS5va2F5''@;'; put 'put ''YW1hLmpwIiwid2FrZS5va2F5YW1hLmpwIiwieWFrYWdlLm9rYXlhbWEuanAiLCJhZ3VuaS5va2luYXdhLmpwIiwiZ2lub3dhbi5va2luYXdhLmpwIiwiZ2lub3phLm9raW5hd2EuanAiLCJndXNoaWthbWkub2tpbmF3YS5qcCIsImhhZWJhcnUub2tpbmF3YS5qcCIsImhpZ2FzaGkub2tpbmF3''@;'; put 'put ''YS5qcCIsImhpcmFyYS5va2luYXdhLmpwIiwiaWhleWEub2tpbmF3YS5qcCIsImlzaGlnYWtpLm9raW5hd2EuanAiLCJpc2hpa2F3YS5va2luYXdhLmpwIiwiaXRvbWFuLm9raW5hd2EuanAiLCJpemVuYS5va2luYXdhLmpwIiwia2FkZW5hLm9raW5hd2EuanAiLCJraW4ub2tpbmF3YS5qcCIs''@;'; put 'put ''ImtpdGFkYWl0by5va2luYXdhLmpwIiwia2l0YW5ha2FndXN1a3Uub2tpbmF3YS5qcCIsImt1bWVqaW1hLm9raW5hd2EuanAiLCJrdW5pZ2FtaS5va2luYXdhLmpwIiwibWluYW1pZGFpdG8ub2tpbmF3YS5qcCIsIm1vdG9idS5va2luYXdhLmpwIiwibmFnby5va2luYXdhLmpwIiwibmFoYS5v''@;'; put 'put ''a2luYXdhLmpwIiwibmFrYWd1c3VrdS5va2luYXdhLmpwIiwibmFraWppbi5va2luYXdhLmpwIiwibmFuam8ub2tpbmF3YS5qcCIsIm5pc2hpaGFyYS5va2luYXdhLmpwIiwib2dpbWkub2tpbmF3YS5qcCIsIm9raW5hd2Eub2tpbmF3YS5qcCIsIm9ubmEub2tpbmF3YS5qcCIsInNoaW1vamku''@;'; put 'put ''b2tpbmF3YS5qcCIsInRha2V0b21pLm9raW5hd2EuanAiLCJ0YXJhbWEub2tpbmF3YS5qcCIsInRva2FzaGlraS5va2luYXdhLmpwIiwidG9taWd1c3VrdS5va2luYXdhLmpwIiwidG9uYWtpLm9raW5hd2EuanAiLCJ1cmFzb2Uub2tpbmF3YS5qcCIsInVydW1hLm9raW5hd2EuanAiLCJ5YWVz''@;'; put 'put ''ZS5va2luYXdhLmpwIiwieW9taXRhbi5va2luYXdhLmpwIiwieW9uYWJhcnUub2tpbmF3YS5qcCIsInlvbmFndW5pLm9raW5hd2EuanAiLCJ6YW1hbWkub2tpbmF3YS5qcCIsImFiZW5vLm9zYWthLmpwIiwiY2hpaGF5YWFrYXNha2Eub3Nha2EuanAiLCJjaHVvLm9zYWthLmpwIiwiZGFpdG8u''@;'; put 'put ''b3Nha2EuanAiLCJmdWppaWRlcmEub3Nha2EuanAiLCJoYWJpa2luby5vc2FrYS5qcCIsImhhbm5hbi5vc2FrYS5qcCIsImhpZ2FzaGlvc2FrYS5vc2FrYS5qcCIsImhpZ2FzaGlzdW1peW9zaGkub3Nha2EuanAiLCJoaWdhc2hpeW9kb2dhd2Eub3Nha2EuanAiLCJoaXJha2F0YS5vc2FrYS5q''@;'; put 'put ''cCIsImliYXJha2kub3Nha2EuanAiLCJpa2VkYS5vc2FrYS5qcCIsIml6dW1pLm9zYWthLmpwIiwiaXp1bWlvdHN1Lm9zYWthLmpwIiwiaXp1bWlzYW5vLm9zYWthLmpwIiwia2Fkb21hLm9zYWthLmpwIiwia2FpenVrYS5vc2FrYS5qcCIsImthbmFuLm9zYWthLmpwIiwia2FzaGl3YXJhLm9z''@;'; put 'put ''YWthLmpwIiwia2F0YW5vLm9zYWthLmpwIiwia2F3YWNoaW5hZ2Fuby5vc2FrYS5qcCIsImtpc2hpd2FkYS5vc2FrYS5qcCIsImtpdGEub3Nha2EuanAiLCJrdW1hdG9yaS5vc2FrYS5qcCIsIm1hdHN1YmFyYS5vc2FrYS5qcCIsIm1pbmF0by5vc2FrYS5qcCIsIm1pbm9oLm9zYWthLmpwIiwi''@;'; put 'put ''bWlzYWtpLm9zYWthLmpwIiwibW9yaWd1Y2hpLm9zYWthLmpwIiwibmV5YWdhd2Eub3Nha2EuanAiLCJuaXNoaS5vc2FrYS5qcCIsIm5vc2Uub3Nha2EuanAiLCJvc2FrYXNheWFtYS5vc2FrYS5qcCIsInNha2FpLm9zYWthLmpwIiwic2F5YW1hLm9zYWthLmpwIiwic2VubmFuLm9zYWthLmpw''@;'; put 'put ''Iiwic2V0dHN1Lm9zYWthLmpwIiwic2hpam9uYXdhdGUub3Nha2EuanAiLCJzaGltYW1vdG8ub3Nha2EuanAiLCJzdWl0YS5vc2FrYS5qcCIsInRhZGFva2Eub3Nha2EuanAiLCJ0YWlzaGkub3Nha2EuanAiLCJ0YWppcmkub3Nha2EuanAiLCJ0YWthaXNoaS5vc2FrYS5qcCIsInRha2F0c3Vr''@;'; put 'put ''aS5vc2FrYS5qcCIsInRvbmRhYmF5YXNoaS5vc2FrYS5qcCIsInRveW9uYWthLm9zYWthLmpwIiwidG95b25vLm9zYWthLmpwIiwieWFvLm9zYWthLmpwIiwiYXJpYWtlLnNhZ2EuanAiLCJhcml0YS5zYWdhLmpwIiwiZnVrdWRvbWkuc2FnYS5qcCIsImdlbmthaS5zYWdhLmpwIiwiaGFtYXRh''@;'; put 'put ''bWEuc2FnYS5qcCIsImhpemVuLnNhZ2EuanAiLCJpbWFyaS5zYWdhLmpwIiwia2FtaW1pbmUuc2FnYS5qcCIsImthbnpha2kuc2FnYS5qcCIsImthcmF0c3Uuc2FnYS5qcCIsImthc2hpbWEuc2FnYS5qcCIsImtpdGFnYXRhLnNhZ2EuanAiLCJraXRhaGF0YS5zYWdhLmpwIiwia2l5YW1hLnNh''@;'; put 'put ''Z2EuanAiLCJrb3Vob2t1LnNhZ2EuanAiLCJreXVyYWdpLnNhZ2EuanAiLCJuaXNoaWFyaXRhLnNhZ2EuanAiLCJvZ2kuc2FnYS5qcCIsIm9tYWNoaS5zYWdhLmpwIiwib3VjaGkuc2FnYS5qcCIsInNhZ2Euc2FnYS5qcCIsInNoaXJvaXNoaS5zYWdhLmpwIiwidGFrdS5zYWdhLmpwIiwidGFy''@;'; put 'put ''YS5zYWdhLmpwIiwidG9zdS5zYWdhLmpwIiwieW9zaGlub2dhcmkuc2FnYS5qcCIsImFyYWthd2Euc2FpdGFtYS5qcCIsImFzYWthLnNhaXRhbWEuanAiLCJjaGljaGlidS5zYWl0YW1hLmpwIiwiZnVqaW1pLnNhaXRhbWEuanAiLCJmdWppbWluby5zYWl0YW1hLmpwIiwiZnVrYXlhLnNhaXRh''@;'; put 'put ''bWEuanAiLCJoYW5uby5zYWl0YW1hLmpwIiwiaGFueXUuc2FpdGFtYS5qcCIsImhhc3VkYS5zYWl0YW1hLmpwIiwiaGF0b2dheWEuc2FpdGFtYS5qcCIsImhhdG95YW1hLnNhaXRhbWEuanAiLCJoaWRha2Euc2FpdGFtYS5qcCIsImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpwIiwiaGlnYXNo''@;'; put 'put ''aW1hdHN1eWFtYS5zYWl0YW1hLmpwIiwiaG9uam8uc2FpdGFtYS5qcCIsImluYS5zYWl0YW1hLmpwIiwiaXJ1bWEuc2FpdGFtYS5qcCIsIml3YXRzdWtpLnNhaXRhbWEuanAiLCJrYW1paXp1bWkuc2FpdGFtYS5qcCIsImthbWlrYXdhLnNhaXRhbWEuanAiLCJrYW1pc2F0by5zYWl0YW1hLmpw''@;'; put 'put ''Iiwia2FzdWthYmUuc2FpdGFtYS5qcCIsImthd2Fnb2Uuc2FpdGFtYS5qcCIsImthd2FndWNoaS5zYWl0YW1hLmpwIiwia2F3YWppbWEuc2FpdGFtYS5qcCIsImthem8uc2FpdGFtYS5qcCIsImtpdGFtb3RvLnNhaXRhbWEuanAiLCJrb3NoaWdheWEuc2FpdGFtYS5qcCIsImtvdW5vc3Uuc2Fp''@;'; put 'put ''dGFtYS5qcCIsImt1a2kuc2FpdGFtYS5qcCIsImt1bWFnYXlhLnNhaXRhbWEuanAiLCJtYXRzdWJ1c2hpLnNhaXRhbWEuanAiLCJtaW5hbm8uc2FpdGFtYS5qcCIsIm1pc2F0by5zYWl0YW1hLmpwIiwibWl5YXNoaXJvLnNhaXRhbWEuanAiLCJtaXlvc2hpLnNhaXRhbWEuanAiLCJtb3JveWFt''@;'; put 'put ''YS5zYWl0YW1hLmpwIiwibmFnYXRvcm8uc2FpdGFtYS5qcCIsIm5hbWVnYXdhLnNhaXRhbWEuanAiLCJuaWl6YS5zYWl0YW1hLmpwIiwib2dhbm8uc2FpdGFtYS5qcCIsIm9nYXdhLnNhaXRhbWEuanAiLCJvZ29zZS5zYWl0YW1hLmpwIiwib2tlZ2F3YS5zYWl0YW1hLmpwIiwib21peWEuc2Fp''@;'; put 'put ''dGFtYS5qcCIsIm90YWtpLnNhaXRhbWEuanAiLCJyYW56YW4uc2FpdGFtYS5qcCIsInJ5b2thbWkuc2FpdGFtYS5qcCIsInNhaXRhbWEuc2FpdGFtYS5qcCIsInNha2Fkby5zYWl0YW1hLmpwIiwic2F0dGUuc2FpdGFtYS5qcCIsInNheWFtYS5zYWl0YW1hLmpwIiwic2hpa2kuc2FpdGFtYS5q''@;'; put 'put ''cCIsInNoaXJhb2thLnNhaXRhbWEuanAiLCJzb2thLnNhaXRhbWEuanAiLCJzdWdpdG8uc2FpdGFtYS5qcCIsInRvZGEuc2FpdGFtYS5qcCIsInRva2lnYXdhLnNhaXRhbWEuanAiLCJ0b2tvcm96YXdhLnNhaXRhbWEuanAiLCJ0c3VydWdhc2hpbWEuc2FpdGFtYS5qcCIsInVyYXdhLnNhaXRh''@;'; put 'put ''bWEuanAiLCJ3YXJhYmkuc2FpdGFtYS5qcCIsInlhc2hpby5zYWl0YW1hLmpwIiwieW9rb3plLnNhaXRhbWEuanAiLCJ5b25vLnNhaXRhbWEuanAiLCJ5b3JpaS5zYWl0YW1hLmpwIiwieW9zaGlkYS5zYWl0YW1hLmpwIiwieW9zaGlrYXdhLnNhaXRhbWEuanAiLCJ5b3NoaW1pLnNhaXRhbWEu''@;'; put 'put ''anAiLCJhaXNoby5zaGlnYS5qcCIsImdhbW8uc2hpZ2EuanAiLCJoaWdhc2hpb21pLnNoaWdhLmpwIiwiaGlrb25lLnNoaWdhLmpwIiwia29rYS5zaGlnYS5qcCIsImtvbmFuLnNoaWdhLmpwIiwia29zZWkuc2hpZ2EuanAiLCJrb3RvLnNoaWdhLmpwIiwia3VzYXRzdS5zaGlnYS5qcCIsIm1h''@;'; put 'put ''aWJhcmEuc2hpZ2EuanAiLCJtb3JpeWFtYS5zaGlnYS5qcCIsIm5hZ2FoYW1hLnNoaWdhLmpwIiwibmlzaGlhemFpLnNoaWdhLmpwIiwibm90b2dhd2Euc2hpZ2EuanAiLCJvbWloYWNoaW1hbi5zaGlnYS5qcCIsIm90c3Uuc2hpZ2EuanAiLCJyaXR0by5zaGlnYS5qcCIsInJ5dW9oLnNoaWdh''@;'; put 'put ''LmpwIiwidGFrYXNoaW1hLnNoaWdhLmpwIiwidGFrYXRzdWtpLnNoaWdhLmpwIiwidG9yYWhpbWUuc2hpZ2EuanAiLCJ0b3lvc2F0by5zaGlnYS5qcCIsInlhc3Uuc2hpZ2EuanAiLCJha2FnaS5zaGltYW5lLmpwIiwiYW1hLnNoaW1hbmUuanAiLCJnb3RzdS5zaGltYW5lLmpwIiwiaGFtYWRh''@;'; put 'put ''LnNoaW1hbmUuanAiLCJoaWdhc2hpaXp1bW8uc2hpbWFuZS5qcCIsImhpa2F3YS5zaGltYW5lLmpwIiwiaGlraW1pLnNoaW1hbmUuanAiLCJpenVtby5zaGltYW5lLmpwIiwia2FraW5va2kuc2hpbWFuZS5qcCIsIm1hc3VkYS5zaGltYW5lLmpwIiwibWF0c3VlLnNoaW1hbmUuanAiLCJtaXNh''@;'; put 'put ''dG8uc2hpbWFuZS5qcCIsIm5pc2hpbm9zaGltYS5zaGltYW5lLmpwIiwib2hkYS5zaGltYW5lLmpwIiwib2tpbm9zaGltYS5zaGltYW5lLmpwIiwib2t1aXp1bW8uc2hpbWFuZS5qcCIsInNoaW1hbmUuc2hpbWFuZS5qcCIsInRhbWF5dS5zaGltYW5lLmpwIiwidHN1d2Fuby5zaGltYW5lLmpw''@;'; put 'put ''IiwidW5uYW4uc2hpbWFuZS5qcCIsInlha3Vtby5zaGltYW5lLmpwIiwieWFzdWdpLnNoaW1hbmUuanAiLCJ5YXRzdWthLnNoaW1hbmUuanAiLCJhcmFpLnNoaXp1b2thLmpwIiwiYXRhbWkuc2hpenVva2EuanAiLCJmdWppLnNoaXp1b2thLmpwIiwiZnVqaWVkYS5zaGl6dW9rYS5qcCIsImZ1''@;'; put 'put ''amlrYXdhLnNoaXp1b2thLmpwIiwiZnVqaW5vbWl5YS5zaGl6dW9rYS5qcCIsImZ1a3Vyb2kuc2hpenVva2EuanAiLCJnb3RlbWJhLnNoaXp1b2thLmpwIiwiaGFpYmFyYS5zaGl6dW9rYS5qcCIsImhhbWFtYXRzdS5zaGl6dW9rYS5qcCIsImhpZ2FzaGlpenUuc2hpenVva2EuanAiLCJpdG8u''@;'; put 'put ''c2hpenVva2EuanAiLCJpd2F0YS5zaGl6dW9rYS5qcCIsIml6dS5zaGl6dW9rYS5qcCIsIml6dW5va3VuaS5zaGl6dW9rYS5qcCIsImtha2VnYXdhLnNoaXp1b2thLmpwIiwia2FubmFtaS5zaGl6dW9rYS5qcCIsImthd2FuZWhvbi5zaGl6dW9rYS5qcCIsImthd2F6dS5zaGl6dW9rYS5qcCIs''@;'; put 'put ''Imtpa3VnYXdhLnNoaXp1b2thLmpwIiwia29zYWkuc2hpenVva2EuanAiLCJtYWtpbm9oYXJhLnNoaXp1b2thLmpwIiwibWF0c3V6YWtpLnNoaXp1b2thLmpwIiwibWluYW1paXp1LnNoaXp1b2thLmpwIiwibWlzaGltYS5zaGl6dW9rYS5qcCIsIm1vcmltYWNoaS5zaGl6dW9rYS5qcCIsIm5p''@;'; put 'put ''c2hpaXp1LnNoaXp1b2thLmpwIiwibnVtYXp1LnNoaXp1b2thLmpwIiwib21hZXpha2kuc2hpenVva2EuanAiLCJzaGltYWRhLnNoaXp1b2thLmpwIiwic2hpbWl6dS5zaGl6dW9rYS5qcCIsInNoaW1vZGEuc2hpenVva2EuanAiLCJzaGl6dW9rYS5zaGl6dW9rYS5qcCIsInN1c29uby5zaGl6''@;'; put 'put ''dW9rYS5qcCIsInlhaXp1LnNoaXp1b2thLmpwIiwieW9zaGlkYS5zaGl6dW9rYS5qcCIsImFzaGlrYWdhLnRvY2hpZ2kuanAiLCJiYXRvLnRvY2hpZ2kuanAiLCJoYWdhLnRvY2hpZ2kuanAiLCJpY2hpa2FpLnRvY2hpZ2kuanAiLCJpd2FmdW5lLnRvY2hpZ2kuanAiLCJrYW1pbm9rYXdhLnRv''@;'; put 'put ''Y2hpZ2kuanAiLCJrYW51bWEudG9jaGlnaS5qcCIsImthcmFzdXlhbWEudG9jaGlnaS5qcCIsImt1cm9pc28udG9jaGlnaS5qcCIsIm1hc2hpa28udG9jaGlnaS5qcCIsIm1pYnUudG9jaGlnaS5qcCIsIm1va2EudG9jaGlnaS5qcCIsIm1vdGVnaS50b2NoaWdpLmpwIiwibmFzdS50b2NoaWdp''@;'; put 'put ''LmpwIiwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanAiLCJuaWtrby50b2NoaWdpLmpwIiwibmlzaGlrYXRhLnRvY2hpZ2kuanAiLCJub2dpLnRvY2hpZ2kuanAiLCJvaGlyYS50b2NoaWdpLmpwIiwib2h0YXdhcmEudG9jaGlnaS5qcCIsIm95YW1hLnRvY2hpZ2kuanAiLCJzYWt1cmEudG9jaGln''@;'; put 'put ''aS5qcCIsInNhbm8udG9jaGlnaS5qcCIsInNoaW1vdHN1a2UudG9jaGlnaS5qcCIsInNoaW95YS50b2NoaWdpLmpwIiwidGFrYW5lemF3YS50b2NoaWdpLmpwIiwidG9jaGlnaS50b2NoaWdpLmpwIiwidHN1Z2EudG9jaGlnaS5qcCIsInVqaWllLnRvY2hpZ2kuanAiLCJ1dHN1bm9taXlhLnRv''@;'; put 'put ''Y2hpZ2kuanAiLCJ5YWl0YS50b2NoaWdpLmpwIiwiYWl6dW1pLnRva3VzaGltYS5qcCIsImFuYW4udG9rdXNoaW1hLmpwIiwiaWNoaWJhLnRva3VzaGltYS5qcCIsIml0YW5vLnRva3VzaGltYS5qcCIsImthaW5hbi50b2t1c2hpbWEuanAiLCJrb21hdHN1c2hpbWEudG9rdXNoaW1hLmpwIiwi''@;'; put 'put ''bWF0c3VzaGlnZS50b2t1c2hpbWEuanAiLCJtaW1hLnRva3VzaGltYS5qcCIsIm1pbmFtaS50b2t1c2hpbWEuanAiLCJtaXlvc2hpLnRva3VzaGltYS5qcCIsIm11Z2kudG9rdXNoaW1hLmpwIiwibmFrYWdhd2EudG9rdXNoaW1hLmpwIiwibmFydXRvLnRva3VzaGltYS5qcCIsInNhbmFnb2No''@;'; put 'put ''aS50b2t1c2hpbWEuanAiLCJzaGlzaGlrdWkudG9rdXNoaW1hLmpwIiwidG9rdXNoaW1hLnRva3VzaGltYS5qcCIsIndhamlraS50b2t1c2hpbWEuanAiLCJhZGFjaGkudG9reW8uanAiLCJha2lydW5vLnRva3lvLmpwIiwiYWtpc2hpbWEudG9reW8uanAiLCJhb2dhc2hpbWEudG9reW8uanAi''@;'; put 'put ''LCJhcmFrYXdhLnRva3lvLmpwIiwiYnVua3lvLnRva3lvLmpwIiwiY2hpeW9kYS50b2t5by5qcCIsImNob2Z1LnRva3lvLmpwIiwiY2h1by50b2t5by5qcCIsImVkb2dhd2EudG9reW8uanAiLCJmdWNodS50b2t5by5qcCIsImZ1c3NhLnRva3lvLmpwIiwiaGFjaGlqby50b2t5by5qcCIsImhh''@;'; put 'put ''Y2hpb2ppLnRva3lvLmpwIiwiaGFtdXJhLnRva3lvLmpwIiwiaGlnYXNoaWt1cnVtZS50b2t5by5qcCIsImhpZ2FzaGltdXJheWFtYS50b2t5by5qcCIsImhpZ2FzaGl5YW1hdG8udG9reW8uanAiLCJoaW5vLnRva3lvLmpwIiwiaGlub2RlLnRva3lvLmpwIiwiaGlub2hhcmEudG9reW8uanAi''@;'; put 'put ''LCJpbmFnaS50b2t5by5qcCIsIml0YWJhc2hpLnRva3lvLmpwIiwia2F0c3VzaGlrYS50b2t5by5qcCIsImtpdGEudG9reW8uanAiLCJraXlvc2UudG9reW8uanAiLCJrb2RhaXJhLnRva3lvLmpwIiwia29nYW5laS50b2t5by5qcCIsImtva3VidW5qaS50b2t5by5qcCIsImtvbWFlLnRva3lv''@;'; put 'put ''LmpwIiwia290by50b2t5by5qcCIsImtvdXp1c2hpbWEudG9reW8uanAiLCJrdW5pdGFjaGkudG9reW8uanAiLCJtYWNoaWRhLnRva3lvLmpwIiwibWVndXJvLnRva3lvLmpwIiwibWluYXRvLnRva3lvLmpwIiwibWl0YWthLnRva3lvLmpwIiwibWl6dWhvLnRva3lvLmpwIiwibXVzYXNoaW11''@;'; put 'put ''cmF5YW1hLnRva3lvLmpwIiwibXVzYXNoaW5vLnRva3lvLmpwIiwibmFrYW5vLnRva3lvLmpwIiwibmVyaW1hLnRva3lvLmpwIiwib2dhc2F3YXJhLnRva3lvLmpwIiwib2t1dGFtYS50b2t5by5qcCIsIm9tZS50b2t5by5qcCIsIm9zaGltYS50b2t5by5qcCIsIm90YS50b2t5by5qcCIsInNl''@;'; put 'put ''dGFnYXlhLnRva3lvLmpwIiwic2hpYnV5YS50b2t5by5qcCIsInNoaW5hZ2F3YS50b2t5by5qcCIsInNoaW5qdWt1LnRva3lvLmpwIiwic3VnaW5hbWkudG9reW8uanAiLCJzdW1pZGEudG9reW8uanAiLCJ0YWNoaWthd2EudG9reW8uanAiLCJ0YWl0by50b2t5by5qcCIsInRhbWEudG9reW8u''@;'; put 'put ''anAiLCJ0b3NoaW1hLnRva3lvLmpwIiwiY2hpenUudG90dG9yaS5qcCIsImhpbm8udG90dG9yaS5qcCIsImthd2FoYXJhLnRvdHRvcmkuanAiLCJrb2dlLnRvdHRvcmkuanAiLCJrb3RvdXJhLnRvdHRvcmkuanAiLCJtaXNhc2EudG90dG9yaS5qcCIsIm5hbmJ1LnRvdHRvcmkuanAiLCJuaWNo''@;'; put 'put ''aW5hbi50b3R0b3JpLmpwIiwic2FrYWltaW5hdG8udG90dG9yaS5qcCIsInRvdHRvcmkudG90dG9yaS5qcCIsIndha2FzYS50b3R0b3JpLmpwIiwieWF6dS50b3R0b3JpLmpwIiwieW9uYWdvLnRvdHRvcmkuanAiLCJhc2FoaS50b3lhbWEuanAiLCJmdWNodS50b3lhbWEuanAiLCJmdWt1bWl0''@;'; put 'put ''c3UudG95YW1hLmpwIiwiZnVuYWhhc2hpLnRveWFtYS5qcCIsImhpbWkudG95YW1hLmpwIiwiaW1penUudG95YW1hLmpwIiwiaW5hbWkudG95YW1hLmpwIiwiam9oYW5hLnRveWFtYS5qcCIsImthbWlpY2hpLnRveWFtYS5qcCIsImt1cm9iZS50b3lhbWEuanAiLCJuYWthbmlpa2F3YS50b3lh''@;'; put 'put ''bWEuanAiLCJuYW1lcmlrYXdhLnRveWFtYS5qcCIsIm5hbnRvLnRveWFtYS5qcCIsIm55dXplbi50b3lhbWEuanAiLCJveWFiZS50b3lhbWEuanAiLCJ0YWlyYS50b3lhbWEuanAiLCJ0YWthb2thLnRveWFtYS5qcCIsInRhdGV5YW1hLnRveWFtYS5qcCIsInRvZ2EudG95YW1hLmpwIiwidG9u''@;'; put 'put ''YW1pLnRveWFtYS5qcCIsInRveWFtYS50b3lhbWEuanAiLCJ1bmF6dWtpLnRveWFtYS5qcCIsInVvenUudG95YW1hLmpwIiwieWFtYWRhLnRveWFtYS5qcCIsImFyaWRhLndha2F5YW1hLmpwIiwiYXJpZGFnYXdhLndha2F5YW1hLmpwIiwiZ29iby53YWtheWFtYS5qcCIsImhhc2hpbW90by53''@;'; put 'put ''YWtheWFtYS5qcCIsImhpZGFrYS53YWtheWFtYS5qcCIsImhpcm9nYXdhLndha2F5YW1hLmpwIiwiaW5hbWkud2FrYXlhbWEuanAiLCJpd2FkZS53YWtheWFtYS5qcCIsImthaW5hbi53YWtheWFtYS5qcCIsImthbWl0b25kYS53YWtheWFtYS5qcCIsImthdHN1cmFnaS53YWtheWFtYS5qcCIs''@;'; put 'put ''ImtpbWluby53YWtheWFtYS5qcCIsImtpbm9rYXdhLndha2F5YW1hLmpwIiwia2l0YXlhbWEud2FrYXlhbWEuanAiLCJrb3lhLndha2F5YW1hLmpwIiwia296YS53YWtheWFtYS5qcCIsImtvemFnYXdhLndha2F5YW1hLmpwIiwia3Vkb3lhbWEud2FrYXlhbWEuanAiLCJrdXNoaW1vdG8ud2Fr''@;'; put 'put ''YXlhbWEuanAiLCJtaWhhbWEud2FrYXlhbWEuanAiLCJtaXNhdG8ud2FrYXlhbWEuanAiLCJuYWNoaWthdHN1dXJhLndha2F5YW1hLmpwIiwic2hpbmd1Lndha2F5YW1hLmpwIiwic2hpcmFoYW1hLndha2F5YW1hLmpwIiwidGFpamkud2FrYXlhbWEuanAiLCJ0YW5hYmUud2FrYXlhbWEuanAi''@;'; put 'put ''LCJ3YWtheWFtYS53YWtheWFtYS5qcCIsInl1YXNhLndha2F5YW1hLmpwIiwieXVyYS53YWtheWFtYS5qcCIsImFzYWhpLnlhbWFnYXRhLmpwIiwiZnVuYWdhdGEueWFtYWdhdGEuanAiLCJoaWdhc2hpbmUueWFtYWdhdGEuanAiLCJpaWRlLnlhbWFnYXRhLmpwIiwia2Fob2t1LnlhbWFnYXRh''@;'; put 'put ''LmpwIiwia2FtaW5veWFtYS55YW1hZ2F0YS5qcCIsImthbmV5YW1hLnlhbWFnYXRhLmpwIiwia2F3YW5pc2hpLnlhbWFnYXRhLmpwIiwibWFtdXJvZ2F3YS55YW1hZ2F0YS5qcCIsIm1pa2F3YS55YW1hZ2F0YS5qcCIsIm11cmF5YW1hLnlhbWFnYXRhLmpwIiwibmFnYWkueWFtYWdhdGEuanAi''@;'; put 'put ''LCJuYWtheWFtYS55YW1hZ2F0YS5qcCIsIm5hbnlvLnlhbWFnYXRhLmpwIiwibmlzaGlrYXdhLnlhbWFnYXRhLmpwIiwib2JhbmF6YXdhLnlhbWFnYXRhLmpwIiwib2UueWFtYWdhdGEuanAiLCJvZ3VuaS55YW1hZ2F0YS5qcCIsIm9oa3VyYS55YW1hZ2F0YS5qcCIsIm9pc2hpZGEueWFtYWdh''@;'; put 'put ''dGEuanAiLCJzYWdhZS55YW1hZ2F0YS5qcCIsInNha2F0YS55YW1hZ2F0YS5qcCIsInNha2VnYXdhLnlhbWFnYXRhLmpwIiwic2hpbmpvLnlhbWFnYXRhLmpwIiwic2hpcmF0YWthLnlhbWFnYXRhLmpwIiwic2hvbmFpLnlhbWFnYXRhLmpwIiwidGFrYWhhdGEueWFtYWdhdGEuanAiLCJ0ZW5k''@;'; put 'put ''by55YW1hZ2F0YS5qcCIsInRvemF3YS55YW1hZ2F0YS5qcCIsInRzdXJ1b2thLnlhbWFnYXRhLmpwIiwieWFtYWdhdGEueWFtYWdhdGEuanAiLCJ5YW1hbm9iZS55YW1hZ2F0YS5qcCIsInlvbmV6YXdhLnlhbWFnYXRhLmpwIiwieXV6YS55YW1hZ2F0YS5qcCIsImFidS55YW1hZ3VjaGkuanAi''@;'; put 'put ''LCJoYWdpLnlhbWFndWNoaS5qcCIsImhpa2FyaS55YW1hZ3VjaGkuanAiLCJob2Z1LnlhbWFndWNoaS5qcCIsIml3YWt1bmkueWFtYWd1Y2hpLmpwIiwia3VkYW1hdHN1LnlhbWFndWNoaS5qcCIsIm1pdG91LnlhbWFndWNoaS5qcCIsIm5hZ2F0by55YW1hZ3VjaGkuanAiLCJvc2hpbWEueWFt''@;'; put 'put ''YWd1Y2hpLmpwIiwic2hpbW9ub3Nla2kueWFtYWd1Y2hpLmpwIiwic2h1bmFuLnlhbWFndWNoaS5qcCIsInRhYnVzZS55YW1hZ3VjaGkuanAiLCJ0b2t1eWFtYS55YW1hZ3VjaGkuanAiLCJ0b3lvdGEueWFtYWd1Y2hpLmpwIiwidWJlLnlhbWFndWNoaS5qcCIsInl1dS55YW1hZ3VjaGkuanAi''@;'; put 'put ''LCJjaHVvLnlhbWFuYXNoaS5qcCIsImRvc2hpLnlhbWFuYXNoaS5qcCIsImZ1ZWZ1a2kueWFtYW5hc2hpLmpwIiwiZnVqaWthd2EueWFtYW5hc2hpLmpwIiwiZnVqaWthd2FndWNoaWtvLnlhbWFuYXNoaS5qcCIsImZ1aml5b3NoaWRhLnlhbWFuYXNoaS5qcCIsImhheWFrYXdhLnlhbWFuYXNo''@;'; put 'put ''aS5qcCIsImhva3V0by55YW1hbmFzaGkuanAiLCJpY2hpa2F3YW1pc2F0by55YW1hbmFzaGkuanAiLCJrYWkueWFtYW5hc2hpLmpwIiwia29mdS55YW1hbmFzaGkuanAiLCJrb3NodS55YW1hbmFzaGkuanAiLCJrb3N1Z2UueWFtYW5hc2hpLmpwIiwibWluYW1pLWFscHMueWFtYW5hc2hpLmpw''@;'; put 'put ''IiwibWlub2J1LnlhbWFuYXNoaS5qcCIsIm5ha2FtaWNoaS55YW1hbmFzaGkuanAiLCJuYW5idS55YW1hbmFzaGkuanAiLCJuYXJ1c2F3YS55YW1hbmFzaGkuanAiLCJuaXJhc2FraS55YW1hbmFzaGkuanAiLCJuaXNoaWthdHN1cmEueWFtYW5hc2hpLmpwIiwib3NoaW5vLnlhbWFuYXNoaS5q''@;'; put 'put ''cCIsIm90c3VraS55YW1hbmFzaGkuanAiLCJzaG93YS55YW1hbmFzaGkuanAiLCJ0YWJheWFtYS55YW1hbmFzaGkuanAiLCJ0c3VydS55YW1hbmFzaGkuanAiLCJ1ZW5vaGFyYS55YW1hbmFzaGkuanAiLCJ5YW1hbmFrYWtvLnlhbWFuYXNoaS5qcCIsInlhbWFuYXNoaS55YW1hbmFzaGkuanAi''@;'; put 'put ''LCJrZSIsImFjLmtlIiwiY28ua2UiLCJnby5rZSIsImluZm8ua2UiLCJtZS5rZSIsIm1vYmkua2UiLCJuZS5rZSIsIm9yLmtlIiwic2Mua2UiLCJrZyIsImNvbS5rZyIsImVkdS5rZyIsImdvdi5rZyIsIm1pbC5rZyIsIm5ldC5rZyIsIm9yZy5rZyIsIioua2giLCJraSIsImJpei5raSIsImNv''@;'; put 'put ''bS5raSIsImVkdS5raSIsImdvdi5raSIsImluZm8ua2kiLCJuZXQua2kiLCJvcmcua2kiLCJrbSIsImFzcy5rbSIsImNvbS5rbSIsImVkdS5rbSIsImdvdi5rbSIsIm1pbC5rbSIsIm5vbS5rbSIsIm9yZy5rbSIsInByZC5rbSIsInRtLmttIiwiYXNzby5rbSIsImNvb3Aua20iLCJnb3V2Lmtt''@;'; put 'put ''IiwibWVkZWNpbi5rbSIsIm5vdGFpcmVzLmttIiwicGhhcm1hY2llbnMua20iLCJwcmVzc2Uua20iLCJ2ZXRlcmluYWlyZS5rbSIsImtuIiwiZWR1LmtuIiwiZ292LmtuIiwibmV0LmtuIiwib3JnLmtuIiwia3AiLCJjb20ua3AiLCJlZHUua3AiLCJnb3Yua3AiLCJvcmcua3AiLCJyZXAua3Ai''@;'; put 'put ''LCJ0cmEua3AiLCJrciIsImFjLmtyIiwiY28ua3IiLCJlcy5rciIsImdvLmtyIiwiaHMua3IiLCJrZy5rciIsIm1pbC5rciIsIm1zLmtyIiwibmUua3IiLCJvci5rciIsInBlLmtyIiwicmUua3IiLCJzYy5rciIsImJ1c2FuLmtyIiwiY2h1bmdidWsua3IiLCJjaHVuZ25hbS5rciIsImRhZWd1''@;'; put 'put ''LmtyIiwiZGFlamVvbi5rciIsImdhbmd3b24ua3IiLCJnd2FuZ2p1LmtyIiwiZ3llb25nYnVrLmtyIiwiZ3llb25nZ2kua3IiLCJneWVvbmduYW0ua3IiLCJpbmNoZW9uLmtyIiwiamVqdS5rciIsImplb25idWsua3IiLCJqZW9ubmFtLmtyIiwic2VvdWwua3IiLCJ1bHNhbi5rciIsImt3Iiwi''@;'; put 'put ''Y29tLmt3IiwiZWR1Lmt3IiwiZW1iLmt3IiwiZ292Lmt3IiwiaW5kLmt3IiwibmV0Lmt3Iiwib3JnLmt3Iiwia3kiLCJjb20ua3kiLCJlZHUua3kiLCJuZXQua3kiLCJvcmcua3kiLCJreiIsImNvbS5reiIsImVkdS5reiIsImdvdi5reiIsIm1pbC5reiIsIm5ldC5reiIsIm9yZy5reiIsImxh''@;'; put 'put ''IiwiY29tLmxhIiwiZWR1LmxhIiwiZ292LmxhIiwiaW5mby5sYSIsImludC5sYSIsIm5ldC5sYSIsIm9yZy5sYSIsInBlci5sYSIsImxiIiwiY29tLmxiIiwiZWR1LmxiIiwiZ292LmxiIiwibmV0LmxiIiwib3JnLmxiIiwibGMiLCJjby5sYyIsImNvbS5sYyIsImVkdS5sYyIsImdvdi5sYyIs''@;'; put 'put ''Im5ldC5sYyIsIm9yZy5sYyIsImxpIiwibGsiLCJhYy5sayIsImFzc24ubGsiLCJjb20ubGsiLCJlZHUubGsiLCJnb3YubGsiLCJncnAubGsiLCJob3RlbC5sayIsImludC5sayIsImx0ZC5sayIsIm5ldC5sayIsIm5nby5sayIsIm9yZy5sayIsInNjaC5sayIsInNvYy5sayIsIndlYi5sayIs''@;'; put 'put ''ImxyIiwiY29tLmxyIiwiZWR1LmxyIiwiZ292LmxyIiwibmV0LmxyIiwib3JnLmxyIiwibHMiLCJhYy5scyIsImJpei5scyIsImNvLmxzIiwiZWR1LmxzIiwiZ292LmxzIiwiaW5mby5scyIsIm5ldC5scyIsIm9yZy5scyIsInNjLmxzIiwibHQiLCJnb3YubHQiLCJsdSIsImx2IiwiYXNuLmx2''@;'; put 'put ''IiwiY29tLmx2IiwiY29uZi5sdiIsImVkdS5sdiIsImdvdi5sdiIsImlkLmx2IiwibWlsLmx2IiwibmV0Lmx2Iiwib3JnLmx2IiwibHkiLCJjb20ubHkiLCJlZHUubHkiLCJnb3YubHkiLCJpZC5seSIsIm1lZC5seSIsIm5ldC5seSIsIm9yZy5seSIsInBsYy5seSIsInNjaC5seSIsIm1hIiwi''@;'; put 'put ''YWMubWEiLCJjby5tYSIsImdvdi5tYSIsIm5ldC5tYSIsIm9yZy5tYSIsInByZXNzLm1hIiwibWMiLCJhc3NvLm1jIiwidG0ubWMiLCJtZCIsIm1lIiwiYWMubWUiLCJjby5tZSIsImVkdS5tZSIsImdvdi5tZSIsIml0cy5tZSIsIm5ldC5tZSIsIm9yZy5tZSIsInByaXYubWUiLCJtZyIsImNv''@;'; put 'put ''Lm1nIiwiY29tLm1nIiwiZWR1Lm1nIiwiZ292Lm1nIiwibWlsLm1nIiwibm9tLm1nIiwib3JnLm1nIiwicHJkLm1nIiwibWgiLCJtaWwiLCJtayIsImNvbS5tayIsImVkdS5tayIsImdvdi5tayIsImluZi5tayIsIm5hbWUubWsiLCJuZXQubWsiLCJvcmcubWsiLCJtbCIsImNvbS5tbCIsImVk''@;'; put 'put ''dS5tbCIsImdvdXYubWwiLCJnb3YubWwiLCJuZXQubWwiLCJvcmcubWwiLCJwcmVzc2UubWwiLCIqLm1tIiwibW4iLCJlZHUubW4iLCJnb3YubW4iLCJvcmcubW4iLCJtbyIsImNvbS5tbyIsImVkdS5tbyIsImdvdi5tbyIsIm5ldC5tbyIsIm9yZy5tbyIsIm1vYmkiLCJtcCIsIm1xIiwibXIi''@;'; put 'put ''LCJnb3YubXIiLCJtcyIsImNvbS5tcyIsImVkdS5tcyIsImdvdi5tcyIsIm5ldC5tcyIsIm9yZy5tcyIsIm10IiwiY29tLm10IiwiZWR1Lm10IiwibmV0Lm10Iiwib3JnLm10IiwibXUiLCJhYy5tdSIsImNvLm11IiwiY29tLm11IiwiZ292Lm11IiwibmV0Lm11Iiwib3IubXUiLCJvcmcubXUi''@;'; put 'put ''LCJtdXNldW0iLCJtdiIsImFlcm8ubXYiLCJiaXoubXYiLCJjb20ubXYiLCJjb29wLm12IiwiZWR1Lm12IiwiZ292Lm12IiwiaW5mby5tdiIsImludC5tdiIsIm1pbC5tdiIsIm11c2V1bS5tdiIsIm5hbWUubXYiLCJuZXQubXYiLCJvcmcubXYiLCJwcm8ubXYiLCJtdyIsImFjLm13IiwiYml6''@;'; put 'put ''Lm13IiwiY28ubXciLCJjb20ubXciLCJjb29wLm13IiwiZWR1Lm13IiwiZ292Lm13IiwiaW50Lm13IiwibmV0Lm13Iiwib3JnLm13IiwibXgiLCJjb20ubXgiLCJlZHUubXgiLCJnb2IubXgiLCJuZXQubXgiLCJvcmcubXgiLCJteSIsImJpei5teSIsImNvbS5teSIsImVkdS5teSIsImdvdi5t''@;'; put 'put ''eSIsIm1pbC5teSIsIm5hbWUubXkiLCJuZXQubXkiLCJvcmcubXkiLCJteiIsImFjLm16IiwiYWR2Lm16IiwiY28ubXoiLCJlZHUubXoiLCJnb3YubXoiLCJtaWwubXoiLCJuZXQubXoiLCJvcmcubXoiLCJuYSIsImFsdC5uYSIsImNvLm5hIiwiY29tLm5hIiwiZ292Lm5hIiwibmV0Lm5hIiwi''@;'; put 'put ''b3JnLm5hIiwibmFtZSIsIm5jIiwiYXNzby5uYyIsIm5vbS5uYyIsIm5lIiwibmV0IiwibmYiLCJhcnRzLm5mIiwiY29tLm5mIiwiZmlybS5uZiIsImluZm8ubmYiLCJuZXQubmYiLCJvdGhlci5uZiIsInBlci5uZiIsInJlYy5uZiIsInN0b3JlLm5mIiwid2ViLm5mIiwibmciLCJjb20ubmci''@;'; put 'put ''LCJlZHUubmciLCJnb3YubmciLCJpLm5nIiwibWlsLm5nIiwibW9iaS5uZyIsIm5hbWUubmciLCJuZXQubmciLCJvcmcubmciLCJzY2gubmciLCJuaSIsImFjLm5pIiwiYml6Lm5pIiwiY28ubmkiLCJjb20ubmkiLCJlZHUubmkiLCJnb2IubmkiLCJpbi5uaSIsImluZm8ubmkiLCJpbnQubmki''@;'; put 'put ''LCJtaWwubmkiLCJuZXQubmkiLCJub20ubmkiLCJvcmcubmkiLCJ3ZWIubmkiLCJubCIsIm5vIiwiZmhzLm5vIiwiZm9sa2ViaWJsLm5vIiwiZnlsa2VzYmlibC5ubyIsImlkcmV0dC5ubyIsIm11c2V1bS5ubyIsInByaXYubm8iLCJ2Z3Mubm8iLCJkZXAubm8iLCJoZXJhZC5ubyIsImtvbW11''@;'; put 'put ''bmUubm8iLCJtaWwubm8iLCJzdGF0Lm5vIiwiYWEubm8iLCJhaC5ubyIsImJ1Lm5vIiwiZm0ubm8iLCJobC5ubyIsImhtLm5vIiwiamFuLW1heWVuLm5vIiwibXIubm8iLCJubC5ubyIsIm50Lm5vIiwib2Yubm8iLCJvbC5ubyIsIm9zbG8ubm8iLCJybC5ubyIsInNmLm5vIiwic3Qubm8iLCJz''@;'; put 'put ''dmFsYmFyZC5ubyIsInRtLm5vIiwidHIubm8iLCJ2YS5ubyIsInZmLm5vIiwiZ3MuYWEubm8iLCJncy5haC5ubyIsImdzLmJ1Lm5vIiwiZ3MuZm0ubm8iLCJncy5obC5ubyIsImdzLmhtLm5vIiwiZ3MuamFuLW1heWVuLm5vIiwiZ3MubXIubm8iLCJncy5ubC5ubyIsImdzLm50Lm5vIiwiZ3Mu''@;'; put 'put ''b2Yubm8iLCJncy5vbC5ubyIsImdzLm9zbG8ubm8iLCJncy5ybC5ubyIsImdzLnNmLm5vIiwiZ3Muc3Qubm8iLCJncy5zdmFsYmFyZC5ubyIsImdzLnRtLm5vIiwiZ3MudHIubm8iLCJncy52YS5ubyIsImdzLnZmLm5vIiwiYWtyZWhhbW4ubm8iLCJceGU1a3JlaGFtbi5ubyIsImFsZ2FyZC5u''@;'; put 'put ''byIsIlx4ZTVsZ1x4ZTVyZC5ubyIsImFybmEubm8iLCJicm9ubm95c3VuZC5ubyIsImJyXHhmOG5uXHhmOHlzdW5kLm5vIiwiYnJ1bXVuZGRhbC5ubyIsImJyeW5lLm5vIiwiZHJvYmFrLm5vIiwiZHJceGY4YmFrLm5vIiwiZWdlcnN1bmQubm8iLCJmZXRzdW5kLm5vIiwiZmxvcm8ubm8iLCJm''@;'; put 'put ''bG9yXHhmOC5ubyIsImZyZWRyaWtzdGFkLm5vIiwiaG9ra3N1bmQubm8iLCJob25lZm9zcy5ubyIsImhceGY4bmVmb3NzLm5vIiwiamVzc2hlaW0ubm8iLCJqb3JwZWxhbmQubm8iLCJqXHhmOHJwZWxhbmQubm8iLCJraXJrZW5lcy5ubyIsImtvcGVydmlrLm5vIiwia3Jva3N0YWRlbHZhLm5v''@;'; put 'put ''IiwibGFuZ2V2YWcubm8iLCJsYW5nZXZceGU1Zy5ubyIsImxlaXJ2aWsubm8iLCJtam9uZGFsZW4ubm8iLCJtalx4ZjhuZGFsZW4ubm8iLCJtby1pLXJhbmEubm8iLCJtb3Nqb2VuLm5vIiwibW9zalx4Zjhlbi5ubyIsIm5lc29kZHRhbmdlbi5ubyIsIm9ya2FuZ2VyLm5vIiwib3NveXJvLm5v''@;'; put 'put ''Iiwib3NceGY4eXJvLm5vIiwicmFob2x0Lm5vIiwiclx4ZTVob2x0Lm5vIiwic2FuZG5lc3Nqb2VuLm5vIiwic2FuZG5lc3NqXHhmOGVuLm5vIiwic2tlZHNtb2tvcnNldC5ubyIsInNsYXR0dW0ubm8iLCJzcGplbGthdmlrLm5vIiwic3RhdGhlbGxlLm5vIiwic3RhdmVybi5ubyIsInN0am9y''@;'; put 'put ''ZGFsc2hhbHNlbi5ubyIsInN0alx4ZjhyZGFsc2hhbHNlbi5ubyIsInRhbmFuZ2VyLm5vIiwidHJhbmJ5Lm5vIiwidm9zc2V2YW5nZW4ubm8iLCJhYXJib3J0ZS5ubyIsImFlanJpZS5ubyIsImFmam9yZC5ubyIsIlx4ZTVmam9yZC5ubyIsImFnZGVuZXMubm8iLCJuZXMuYWtlcnNodXMubm8i''@;'; put 'put ''LCJha25vbHVva3RhLm5vIiwiXHhlMWtcdTAxNGJvbHVva3RhLm5vIiwiYWwubm8iLCJceGU1bC5ubyIsImFsYWhlYWRqdS5ubyIsIlx4ZTFsYWhlYWRqdS5ubyIsImFsZXN1bmQubm8iLCJceGU1bGVzdW5kLm5vIiwiYWxzdGFoYXVnLm5vIiwiYWx0YS5ubyIsIlx4ZTFsdFx4ZTEubm8iLCJh''@;'; put 'put ''bHZkYWwubm8iLCJhbWxpLm5vIiwiXHhlNW1saS5ubyIsImFtb3Qubm8iLCJceGU1bW90Lm5vIiwiYW5kYXN1b2xvLm5vIiwiYW5kZWJ1Lm5vIiwiYW5kb3kubm8iLCJhbmRceGY4eS5ubyIsImFyZGFsLm5vIiwiXHhlNXJkYWwubm8iLCJhcmVtYXJrLm5vIiwiYXJlbmRhbC5ubyIsIlx4ZTVz''@;'; put 'put ''Lm5vIiwiYXNlcmFsLm5vIiwiXHhlNXNlcmFsLm5vIiwiYXNrZXIubm8iLCJhc2tpbS5ubyIsImFza295Lm5vIiwiYXNrXHhmOHkubm8iLCJhc2t2b2xsLm5vIiwiYXNuZXMubm8iLCJceGU1c25lcy5ubyIsImF1ZG5lZGFsbi5ubyIsImF1a3JhLm5vIiwiYXVyZS5ubyIsImF1cmxhbmQubm8i''@;'; put 'put ''LCJhdXJza29nLWhvbGFuZC5ubyIsImF1cnNrb2ctaFx4ZjhsYW5kLm5vIiwiYXVzdGV2b2xsLm5vIiwiYXVzdHJoZWltLm5vIiwiYXZlcm95Lm5vIiwiYXZlclx4Zjh5Lm5vIiwiYmFkYWRkamEubm8iLCJiXHhlNWRceGU1ZGRqXHhlNS5ubyIsImJceGU2cnVtLm5vIiwiYmFoY2F2dW90bmEu''@;'; put 'put ''bm8iLCJiXHhlMWhjYXZ1b3RuYS5ubyIsImJhaGNjYXZ1b3RuYS5ubyIsImJceGUxaGNjYXZ1b3RuYS5ubyIsImJhaWRhci5ubyIsImJceGUxaWRceGUxci5ubyIsImJhamRkYXIubm8iLCJiXHhlMWpkZGFyLm5vIiwiYmFsYXQubm8iLCJiXHhlMWxceGUxdC5ubyIsImJhbGVzdHJhbmQubm8i''@;'; put 'put ''LCJiYWxsYW5nZW4ubm8iLCJiYWxzZmpvcmQubm8iLCJiYW1ibGUubm8iLCJiYXJkdS5ubyIsImJhcnVtLm5vIiwiYmF0c2Zqb3JkLm5vIiwiYlx4ZTV0c2Zqb3JkLm5vIiwiYmVhcmFsdmFoa2kubm8iLCJiZWFyYWx2XHhlMWhraS5ubyIsImJlYXJkdS5ubyIsImJlaWFybi5ubyIsImJlcmcu''@;'; put 'put ''bm8iLCJiZXJnZW4ubm8iLCJiZXJsZXZhZy5ubyIsImJlcmxldlx4ZTVnLm5vIiwiYmlldmF0Lm5vIiwiYmlldlx4ZTF0Lm5vIiwiYmluZGFsLm5vIiwiYmlya2VuZXMubm8iLCJiamFya295Lm5vIiwiYmphcmtceGY4eS5ubyIsImJqZXJrcmVpbS5ubyIsImJqdWduLm5vIiwiYm9kby5ubyIs''@;'; put 'put ''ImJvZFx4Zjgubm8iLCJib2tuLm5vIiwiYm9tbG8ubm8iLCJiXHhmOG1sby5ubyIsImJyZW1hbmdlci5ubyIsImJyb25ub3kubm8iLCJiclx4Zjhublx4Zjh5Lm5vIiwiYnVkZWpqdS5ubyIsIm5lcy5idXNrZXJ1ZC5ubyIsImJ5Z2xhbmQubm8iLCJieWtsZS5ubyIsImNhaGNlc3VvbG8ubm8i''@;'; put 'put ''LCJcdTAxMGRceGUxaGNlc3VvbG8ubm8iLCJkYXZ2ZW5qYXJnYS5ubyIsImRhdnZlbmpceGUxcmdhLm5vIiwiZGF2dmVzaWlkYS5ubyIsImRlYXRudS5ubyIsImRpZWxkZGFudW9ycmkubm8iLCJkaXZ0YXN2dW9kbmEubm8iLCJkaXZ0dGFzdnVvdG5hLm5vIiwiZG9ubmEubm8iLCJkXHhmOG5u''@;'; put 'put ''YS5ubyIsImRvdnJlLm5vIiwiZHJhbW1lbi5ubyIsImRyYW5nZWRhbC5ubyIsImR5cm95Lm5vIiwiZHlyXHhmOHkubm8iLCJlaWQubm8iLCJlaWRmam9yZC5ubyIsImVpZHNiZXJnLm5vIiwiZWlkc2tvZy5ubyIsImVpZHN2b2xsLm5vIiwiZWlnZXJzdW5kLm5vIiwiZWx2ZXJ1bS5ubyIsImVu''@;'; put 'put ''ZWJha2subm8iLCJlbmdlcmRhbC5ubyIsImV0bmUubm8iLCJldG5lZGFsLm5vIiwiZXZlbmFzc2kubm8iLCJldmVuXHhlMVx1MDE2MVx1MDE2MWkubm8iLCJldmVuZXMubm8iLCJldmplLW9nLWhvcm5uZXMubm8iLCJmYXJzdW5kLm5vIiwiZmF1c2tlLm5vIiwiZmVkamUubm8iLCJmZXQubm8i''@;'; put 'put ''LCJmaW5ub3kubm8iLCJmaW5uXHhmOHkubm8iLCJmaXRqYXIubm8iLCJmamFsZXIubm8iLCJmamVsbC5ubyIsImZsYS5ubyIsImZsXHhlNS5ubyIsImZsYWtzdGFkLm5vIiwiZmxhdGFuZ2VyLm5vIiwiZmxla2tlZmpvcmQubm8iLCJmbGVzYmVyZy5ubyIsImZsb3JhLm5vIiwiZm9sbGRhbC5u''@;'; put 'put ''byIsImZvcmRlLm5vIiwiZlx4ZjhyZGUubm8iLCJmb3JzYW5kLm5vIiwiZm9zbmVzLm5vIiwiZnJceGU2bmEubm8iLCJmcmFuYS5ubyIsImZyZWkubm8iLCJmcm9nbi5ubyIsImZyb2xhbmQubm8iLCJmcm9zdGEubm8iLCJmcm95YS5ubyIsImZyXHhmOHlhLm5vIiwiZnVvaXNrdS5ubyIsImZ1''@;'; put 'put ''b3Nza28ubm8iLCJmdXNhLm5vIiwiZnlyZXNkYWwubm8iLCJnYWl2dW90bmEubm8iLCJnXHhlMWl2dW90bmEubm8iLCJnYWxzYS5ubyIsImdceGUxbHNceGUxLm5vIiwiZ2FtdmlrLm5vIiwiZ2FuZ2F2aWlrYS5ubyIsImdceGUxXHUwMTRiZ2F2aWlrYS5ubyIsImdhdWxhci5ubyIsImdhdXNk''@;'; put 'put ''YWwubm8iLCJnaWVodGF2dW9hdG5hLm5vIiwiZ2lsZGVza2FsLm5vIiwiZ2lsZGVza1x4ZTVsLm5vIiwiZ2lza2Uubm8iLCJnamVtbmVzLm5vIiwiZ2plcmRydW0ubm8iLCJnamVyc3RhZC5ubyIsImdqZXNkYWwubm8iLCJnam92aWsubm8iLCJnalx4Zjh2aWsubm8iLCJnbG9wcGVuLm5vIiwi''@;'; put 'put ''Z29sLm5vIiwiZ3Jhbi5ubyIsImdyYW5lLm5vIiwiZ3JhbnZpbi5ubyIsImdyYXRhbmdlbi5ubyIsImdyaW1zdGFkLm5vIiwiZ3Jvbmcubm8iLCJncnVlLm5vIiwiZ3VsZW4ubm8iLCJndW92ZGFnZWFpZG51Lm5vIiwiaGEubm8iLCJoXHhlNS5ubyIsImhhYm1lci5ubyIsImhceGUxYm1lci5u''@;'; put 'put ''byIsImhhZHNlbC5ubyIsImhceGU2Z2Vib3N0YWQubm8iLCJoYWdlYm9zdGFkLm5vIiwiaGFsZGVuLm5vIiwiaGFsc2Eubm8iLCJoYW1hci5ubyIsImhhbWFyb3kubm8iLCJoYW1tYXJmZWFzdGEubm8iLCJoXHhlMW1tXHhlMXJmZWFzdGEubm8iLCJoYW1tZXJmZXN0Lm5vIiwiaGFwbWlyLm5v''@;'; put 'put ''IiwiaFx4ZTFwbWlyLm5vIiwiaGFyYW0ubm8iLCJoYXJlaWQubm8iLCJoYXJzdGFkLm5vIiwiaGFzdmlrLm5vIiwiaGF0dGZqZWxsZGFsLm5vIiwiaGF1Z2VzdW5kLm5vIiwib3MuaGVkbWFyay5ubyIsInZhbGVyLmhlZG1hcmsubm8iLCJ2XHhlNWxlci5oZWRtYXJrLm5vIiwiaGVtbmUubm8i''@;'; put 'put ''LCJoZW1uZXMubm8iLCJoZW1zZWRhbC5ubyIsImhpdHJhLm5vIiwiaGphcnRkYWwubm8iLCJoamVsbWVsYW5kLm5vIiwiaG9ib2wubm8iLCJob2JceGY4bC5ubyIsImhvZi5ubyIsImhvbC5ubyIsImhvbGUubm8iLCJob2xtZXN0cmFuZC5ubyIsImhvbHRhbGVuLm5vIiwiaG9sdFx4ZTVsZW4u''@;'; put 'put ''bm8iLCJvcy5ob3JkYWxhbmQubm8iLCJob3JuaW5kYWwubm8iLCJob3J0ZW4ubm8iLCJob3lhbmdlci5ubyIsImhceGY4eWFuZ2VyLm5vIiwiaG95bGFuZGV0Lm5vIiwiaFx4Zjh5bGFuZGV0Lm5vIiwiaHVyZGFsLm5vIiwiaHVydW0ubm8iLCJodmFsZXIubm8iLCJoeWxsZXN0YWQubm8iLCJp''@;'; put 'put ''YmVzdGFkLm5vIiwiaW5kZXJveS5ubyIsImluZGVyXHhmOHkubm8iLCJpdmVsYW5kLm5vIiwiaXZndS5ubyIsImpldm5ha2VyLm5vIiwiam9sc3Rlci5ubyIsImpceGY4bHN0ZXIubm8iLCJqb25kYWwubm8iLCJrYWZqb3JkLm5vIiwia1x4ZTVmam9yZC5ubyIsImthcmFzam9oa2Eubm8iLCJr''@;'; put 'put ''XHhlMXJceGUxXHUwMTYxam9oa2Eubm8iLCJrYXJhc2pvay5ubyIsImthcmxzb3kubm8iLCJrYXJtb3kubm8iLCJrYXJtXHhmOHkubm8iLCJrYXV0b2tlaW5vLm5vIiwia2xhYnUubm8iLCJrbFx4ZTZidS5ubyIsImtsZXBwLm5vIiwia29uZ3NiZXJnLm5vIiwia29uZ3N2aW5nZXIubm8iLCJr''@;'; put 'put ''cmFhbmdoa2Uubm8iLCJrclx4ZTVhbmdoa2Uubm8iLCJrcmFnZXJvLm5vIiwia3JhZ2VyXHhmOC5ubyIsImtyaXN0aWFuc2FuZC5ubyIsImtyaXN0aWFuc3VuZC5ubyIsImtyb2RzaGVyYWQubm8iLCJrclx4Zjhkc2hlcmFkLm5vIiwia3ZceGU2ZmpvcmQubm8iLCJrdlx4ZTZuYW5nZW4ubm8i''@;'; put 'put ''LCJrdmFmam9yZC5ubyIsImt2YWxzdW5kLm5vIiwia3ZhbS5ubyIsImt2YW5hbmdlbi5ubyIsImt2aW5lc2RhbC5ubyIsImt2aW5uaGVyYWQubm8iLCJrdml0ZXNlaWQubm8iLCJrdml0c295Lm5vIiwia3ZpdHNceGY4eS5ubyIsImxhYWtlc3Z1ZW1pZS5ubyIsImxceGU2cmRhbC5ubyIsImxh''@;'; put 'put ''aHBwaS5ubyIsImxceGUxaHBwaS5ubyIsImxhcmRhbC5ubyIsImxhcnZpay5ubyIsImxhdmFnaXMubm8iLCJsYXZhbmdlbi5ubyIsImxlYW5nYXZpaWthLm5vIiwibGVhXHUwMTRiZ2F2aWlrYS5ubyIsImxlYmVzYnkubm8iLCJsZWlrYW5nZXIubm8iLCJsZWlyZmpvcmQubm8iLCJsZWthLm5v''@;'; put 'put ''IiwibGVrc3Zpay5ubyIsImxlbnZpay5ubyIsImxlcmRhbC5ubyIsImxlc2phLm5vIiwibGV2YW5nZXIubm8iLCJsaWVyLm5vIiwibGllcm5lLm5vIiwibGlsbGVoYW1tZXIubm8iLCJsaWxsZXNhbmQubm8iLCJsaW5kYXMubm8iLCJsaW5kXHhlNXMubm8iLCJsaW5kZXNuZXMubm8iLCJsb2Fi''@;'; put 'put ''YXQubm8iLCJsb2FiXHhlMXQubm8iLCJsb2Rpbmdlbi5ubyIsImxceGY4ZGluZ2VuLm5vIiwibG9tLm5vIiwibG9wcGEubm8iLCJsb3JlbnNrb2cubm8iLCJsXHhmOHJlbnNrb2cubm8iLCJsb3Rlbi5ubyIsImxceGY4dGVuLm5vIiwibHVuZC5ubyIsImx1bm5lci5ubyIsImx1cm95Lm5vIiwi''@;'; put 'put ''bHVyXHhmOHkubm8iLCJsdXN0ZXIubm8iLCJseW5nZGFsLm5vIiwibHluZ2VuLm5vIiwibWFsYXR2dW9wbWkubm8iLCJtXHhlMWxhdHZ1b3BtaS5ubyIsIm1hbHNlbHYubm8iLCJtXHhlNWxzZWx2Lm5vIiwibWFsdmlrLm5vIiwibWFuZGFsLm5vIiwibWFya2VyLm5vIiwibWFybmFyZGFsLm5v''@;'; put 'put ''IiwibWFzZmpvcmRlbi5ubyIsIm1hc295Lm5vIiwibVx4ZTVzXHhmOHkubm8iLCJtYXR0YS12YXJqamF0Lm5vIiwibVx4ZTF0dGEtdlx4ZTFyamphdC5ubyIsIm1lbGFuZC5ubyIsIm1lbGRhbC5ubyIsIm1lbGh1cy5ubyIsIm1lbG95Lm5vIiwibWVsXHhmOHkubm8iLCJtZXJha2VyLm5vIiwi''@;'; put 'put ''bWVyXHhlNWtlci5ubyIsIm1pZHN1bmQubm8iLCJtaWR0cmUtZ2F1bGRhbC5ubyIsIm1vYXJla2Uubm8iLCJtb1x4ZTVyZWtlLm5vIiwibW9kYWxlbi5ubyIsIm1vZHVtLm5vIiwibW9sZGUubm8iLCJoZXJveS5tb3JlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tb3JlLW9nLXJvbXNkYWwubm8i''@;'; put 'put ''LCJoZXJceGY4eS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJtb3NrZW5lcy5ubyIsIm1vc3Mubm8iLCJtb3N2aWsubm8iLCJtdW9zYXQubm8iLCJtdW9zXHhlMXQubm8iLCJuYWFtZXNqZXZ1ZW1pZS5ubyIsIm5ceGU1XHhlNW1lc2pldnVl''@;'; put 'put ''bWllLm5vIiwiblx4ZTZyXHhmOHkubm8iLCJuYW1kYWxzZWlkLm5vIiwibmFtc29zLm5vIiwibmFtc3Nrb2dhbi5ubyIsIm5hbm5lc3RhZC5ubyIsIm5hcm95Lm5vIiwibmFydmlpa2Eubm8iLCJuYXJ2aWsubm8iLCJuYXVzdGRhbC5ubyIsIm5hdnVvdG5hLm5vIiwiblx4ZTF2dW90bmEubm8i''@;'; put 'put ''LCJuZWRyZS1laWtlci5ubyIsIm5lc25hLm5vIiwibmVzb2RkZW4ubm8iLCJuZXNzZWJ5Lm5vIiwibmVzc2V0Lm5vIiwibmlzc2VkYWwubm8iLCJuaXR0ZWRhbC5ubyIsIm5vcmQtYXVyZGFsLm5vIiwibm9yZC1mcm9uLm5vIiwibm9yZC1vZGFsLm5vIiwibm9yZGRhbC5ubyIsIm5vcmRrYXBw''@;'; put 'put ''Lm5vIiwiYm8ubm9yZGxhbmQubm8iLCJiXHhmOC5ub3JkbGFuZC5ubyIsImhlcm95Lm5vcmRsYW5kLm5vIiwiaGVyXHhmOHkubm9yZGxhbmQubm8iLCJub3JkcmUtbGFuZC5ubyIsIm5vcmRyZWlzYS5ubyIsIm5vcmUtb2ctdXZkYWwubm8iLCJub3RvZGRlbi5ubyIsIm5vdHRlcm95Lm5vIiwi''@;'; put 'put ''blx4Zjh0dGVyXHhmOHkubm8iLCJvZGRhLm5vIiwib2tzbmVzLm5vIiwiXHhmOGtzbmVzLm5vIiwib21hc3Z1b3RuYS5ubyIsIm9wcGRhbC5ubyIsIm9wcGVnYXJkLm5vIiwib3BwZWdceGU1cmQubm8iLCJvcmtkYWwubm8iLCJvcmxhbmQubm8iLCJceGY4cmxhbmQubm8iLCJvcnNrb2cubm8i''@;'; put 'put ''LCJceGY4cnNrb2cubm8iLCJvcnN0YS5ubyIsIlx4Zjhyc3RhLm5vIiwib3Nlbi5ubyIsIm9zdGVyb3kubm8iLCJvc3Rlclx4Zjh5Lm5vIiwidmFsZXIub3N0Zm9sZC5ubyIsInZceGU1bGVyLlx4ZjhzdGZvbGQubm8iLCJvc3RyZS10b3Rlbi5ubyIsIlx4ZjhzdHJlLXRvdGVuLm5vIiwib3Zl''@;'; put 'put ''cmhhbGxhLm5vIiwib3ZyZS1laWtlci5ubyIsIlx4Zjh2cmUtZWlrZXIubm8iLCJveWVyLm5vIiwiXHhmOHllci5ubyIsIm95Z2FyZGVuLm5vIiwiXHhmOHlnYXJkZW4ubm8iLCJveXN0cmUtc2xpZHJlLm5vIiwiXHhmOHlzdHJlLXNsaWRyZS5ubyIsInBvcnNhbmdlci5ubyIsInBvcnNhbmd1''@;'; put 'put ''Lm5vIiwicG9yc1x4ZTFcdTAxNGJndS5ubyIsInBvcnNncnVubi5ubyIsInJhZGUubm8iLCJyXHhlNWRlLm5vIiwicmFkb3kubm8iLCJyYWRceGY4eS5ubyIsInJceGU2bGluZ2VuLm5vIiwicmFoa2tlcmF2anUubm8iLCJyXHhlMWhra2VyXHhlMXZqdS5ubyIsInJhaXNhLm5vIiwiclx4ZTFp''@;'; put 'put ''c2Eubm8iLCJyYWtrZXN0YWQubm8iLCJyYWxpbmdlbi5ubyIsInJhbmEubm8iLCJyYW5kYWJlcmcubm8iLCJyYXVtYS5ubyIsInJlbmRhbGVuLm5vIiwicmVubmVidS5ubyIsInJlbm5lc295Lm5vIiwicmVubmVzXHhmOHkubm8iLCJyaW5kYWwubm8iLCJyaW5nZWJ1Lm5vIiwicmluZ2VyaWtl''@;'; put 'put ''Lm5vIiwicmluZ3Nha2VyLm5vIiwicmlzb3Iubm8iLCJyaXNceGY4ci5ubyIsInJpc3NhLm5vIiwicm9hbi5ubyIsInJvZG95Lm5vIiwiclx4ZjhkXHhmOHkubm8iLCJyb2xsYWcubm8iLCJyb21zYS5ubyIsInJvbXNrb2cubm8iLCJyXHhmOG1za29nLm5vIiwicm9yb3Mubm8iLCJyXHhmOHJv''@;'; put 'put ''cy5ubyIsInJvc3Qubm8iLCJyXHhmOHN0Lm5vIiwicm95a2VuLm5vIiwiclx4Zjh5a2VuLm5vIiwicm95cnZpay5ubyIsInJceGY4eXJ2aWsubm8iLCJydW92YXQubm8iLCJyeWdnZS5ubyIsInNhbGFuZ2VuLm5vIiwic2FsYXQubm8iLCJzXHhlMWxhdC5ubyIsInNceGUxbFx4ZTF0Lm5vIiwi''@;'; put 'put ''c2FsdGRhbC5ubyIsInNhbW5hbmdlci5ubyIsInNhbmRlZmpvcmQubm8iLCJzYW5kbmVzLm5vIiwic2FuZG95Lm5vIiwic2FuZFx4Zjh5Lm5vIiwic2FycHNib3JnLm5vIiwic2F1ZGEubm8iLCJzYXVoZXJhZC5ubyIsInNlbC5ubyIsInNlbGJ1Lm5vIiwic2VsamUubm8iLCJzZWxqb3JkLm5v''@;'; put 'put ''Iiwic2llbGxhay5ubyIsInNpZ2RhbC5ubyIsInNpbGphbi5ubyIsInNpcmRhbC5ubyIsInNrYW5pdC5ubyIsInNrXHhlMW5pdC5ubyIsInNrYW5sYW5kLm5vIiwic2tceGU1bmxhbmQubm8iLCJza2F1bi5ubyIsInNrZWRzbW8ubm8iLCJza2kubm8iLCJza2llbi5ubyIsInNraWVydmEubm8i''@;'; put 'put ''LCJza2llcnZceGUxLm5vIiwic2tpcHR2ZXQubm8iLCJza2phay5ubyIsInNralx4ZTVrLm5vIiwic2tqZXJ2b3kubm8iLCJza2plcnZceGY4eS5ubyIsInNrb2RqZS5ubyIsInNtb2xhLm5vIiwic21ceGY4bGEubm8iLCJzbmFhc2Uubm8iLCJzblx4ZTVhc2Uubm8iLCJzbmFzYS5ubyIsInNu''@;'; put 'put ''XHhlNXNhLm5vIiwic25pbGxmam9yZC5ubyIsInNub2FzYS5ubyIsInNvZ25kYWwubm8iLCJzb2duZS5ubyIsInNceGY4Z25lLm5vIiwic29rbmRhbC5ubyIsInNvbGEubm8iLCJzb2x1bmQubm8iLCJzb21uYS5ubyIsInNceGY4bW5hLm5vIiwic29uZHJlLWxhbmQubm8iLCJzXHhmOG5kcmUt''@;'; put 'put ''bGFuZC5ubyIsInNvbmdkYWxlbi5ubyIsInNvci1hdXJkYWwubm8iLCJzXHhmOHItYXVyZGFsLm5vIiwic29yLWZyb24ubm8iLCJzXHhmOHItZnJvbi5ubyIsInNvci1vZGFsLm5vIiwic1x4ZjhyLW9kYWwubm8iLCJzb3ItdmFyYW5nZXIubm8iLCJzXHhmOHItdmFyYW5nZXIubm8iLCJzb3Jm''@;'; put 'put ''b2xkLm5vIiwic1x4ZjhyZm9sZC5ubyIsInNvcnJlaXNhLm5vIiwic1x4ZjhycmVpc2Eubm8iLCJzb3J0bGFuZC5ubyIsInNvcnVtLm5vIiwic1x4ZjhydW0ubm8iLCJzcHlkZWJlcmcubm8iLCJzdGFuZ2Uubm8iLCJzdGF2YW5nZXIubm8iLCJzdGVpZ2VuLm5vIiwic3RlaW5ramVyLm5vIiwi''@;'; put 'put ''c3Rqb3JkYWwubm8iLCJzdGpceGY4cmRhbC5ubyIsInN0b2trZS5ubyIsInN0b3ItZWx2ZGFsLm5vIiwic3RvcmQubm8iLCJzdG9yZGFsLm5vIiwic3RvcmZqb3JkLm5vIiwic3RyYW5kLm5vIiwic3RyYW5kYS5ubyIsInN0cnluLm5vIiwic3VsYS5ubyIsInN1bGRhbC5ubyIsInN1bmQubm8i''@;'; put 'put ''LCJzdW5uZGFsLm5vIiwic3VybmFkYWwubm8iLCJzdmVpby5ubyIsInN2ZWx2aWsubm8iLCJzeWtreWx2ZW4ubm8iLCJ0YW5hLm5vIiwiYm8udGVsZW1hcmsubm8iLCJiXHhmOC50ZWxlbWFyay5ubyIsInRpbWUubm8iLCJ0aW5ndm9sbC5ubyIsInRpbm4ubm8iLCJ0amVsZHN1bmQubm8iLCJ0''@;'; put 'put ''am9tZS5ubyIsInRqXHhmOG1lLm5vIiwidG9ra2Uubm8iLCJ0b2xnYS5ubyIsInRvbnNiZXJnLm5vIiwidFx4Zjhuc2Jlcmcubm8iLCJ0b3Jza2VuLm5vIiwidHJceGU2bmEubm8iLCJ0cmFuYS5ubyIsInRyYW5veS5ubyIsInRyYW5ceGY4eS5ubyIsInRyb2FuZGluLm5vIiwidHJvZ3N0YWQu''@;'; put 'put ''bm8iLCJ0clx4Zjhnc3RhZC5ubyIsInRyb21zYS5ubyIsInRyb21zby5ubyIsInRyb21zXHhmOC5ubyIsInRyb25kaGVpbS5ubyIsInRyeXNpbC5ubyIsInR2ZWRlc3RyYW5kLm5vIiwidHlkYWwubm8iLCJ0eW5zZXQubm8iLCJ0eXNmam9yZC5ubyIsInR5c25lcy5ubyIsInR5c3ZceGU2ci5u''@;'; put 'put ''byIsInR5c3Zhci5ubyIsInVsbGVuc2FrZXIubm8iLCJ1bGxlbnN2YW5nLm5vIiwidWx2aWsubm8iLCJ1bmphcmdhLm5vIiwidW5qXHhlMXJnYS5ubyIsInV0c2lyYS5ubyIsInZhYXBzdGUubm8iLCJ2YWRzby5ubyIsInZhZHNceGY4Lm5vIiwidlx4ZTZyXHhmOHkubm8iLCJ2YWdhLm5vIiwi''@;'; put 'put ''dlx4ZTVnXHhlNS5ubyIsInZhZ2FuLm5vIiwidlx4ZTVnYW4ubm8iLCJ2YWdzb3kubm8iLCJ2XHhlNWdzXHhmOHkubm8iLCJ2YWtzZGFsLm5vIiwidmFsbGUubm8iLCJ2YW5nLm5vIiwidmFueWx2ZW4ubm8iLCJ2YXJkby5ubyIsInZhcmRceGY4Lm5vIiwidmFyZ2dhdC5ubyIsInZceGUxcmdn''@;'; put 'put ''XHhlMXQubm8iLCJ2YXJveS5ubyIsInZlZnNuLm5vIiwidmVnYS5ubyIsInZlZ2Fyc2hlaS5ubyIsInZlZ1x4ZTVyc2hlaS5ubyIsInZlbm5lc2xhLm5vIiwidmVyZGFsLm5vIiwidmVycmFuLm5vIiwidmVzdGJ5Lm5vIiwic2FuZGUudmVzdGZvbGQubm8iLCJ2ZXN0bmVzLm5vIiwidmVzdHJl''@;'; put 'put ''LXNsaWRyZS5ubyIsInZlc3RyZS10b3Rlbi5ubyIsInZlc3R2YWdveS5ubyIsInZlc3R2XHhlNWdceGY4eS5ubyIsInZldmVsc3RhZC5ubyIsInZpay5ubyIsInZpa25hLm5vIiwidmluZGFmam9yZC5ubyIsInZvYWdhdC5ubyIsInZvbGRhLm5vIiwidm9zcy5ubyIsIioubnAiLCJuciIsImJp''@;'; put 'put ''ei5uciIsImNvbS5uciIsImVkdS5uciIsImdvdi5uciIsImluZm8ubnIiLCJuZXQubnIiLCJvcmcubnIiLCJudSIsIm56IiwiYWMubnoiLCJjby5ueiIsImNyaS5ueiIsImdlZWsubnoiLCJnZW4ubnoiLCJnb3Z0Lm56IiwiaGVhbHRoLm56IiwiaXdpLm56Iiwia2l3aS5ueiIsIm1hb3JpLm56''@;'; put 'put ''IiwibVx1MDEwMW9yaS5ueiIsIm1pbC5ueiIsIm5ldC5ueiIsIm9yZy5ueiIsInBhcmxpYW1lbnQubnoiLCJzY2hvb2wubnoiLCJvbSIsImNvLm9tIiwiY29tLm9tIiwiZWR1Lm9tIiwiZ292Lm9tIiwibWVkLm9tIiwibXVzZXVtLm9tIiwibmV0Lm9tIiwib3JnLm9tIiwicHJvLm9tIiwib25p''@;'; put 'put ''b24iLCJvcmciLCJwYSIsImFiby5wYSIsImFjLnBhIiwiY29tLnBhIiwiZWR1LnBhIiwiZ29iLnBhIiwiaW5nLnBhIiwibWVkLnBhIiwibmV0LnBhIiwibm9tLnBhIiwib3JnLnBhIiwic2xkLnBhIiwicGUiLCJjb20ucGUiLCJlZHUucGUiLCJnb2IucGUiLCJtaWwucGUiLCJuZXQucGUiLCJu''@;'; put 'put ''b20ucGUiLCJvcmcucGUiLCJwZiIsImNvbS5wZiIsImVkdS5wZiIsIm9yZy5wZiIsIioucGciLCJwaCIsImNvbS5waCIsImVkdS5waCIsImdvdi5waCIsImkucGgiLCJtaWwucGgiLCJuZXQucGgiLCJuZ28ucGgiLCJvcmcucGgiLCJwayIsImFjLnBrIiwiYml6LnBrIiwiY29tLnBrIiwiZWR1''@;'; put 'put ''LnBrIiwiZmFtLnBrIiwiZ2twLnBrIiwiZ29iLnBrIiwiZ29nLnBrIiwiZ29rLnBrIiwiZ29uLnBrIiwiZ29wLnBrIiwiZ29zLnBrIiwiZ292LnBrIiwibmV0LnBrIiwib3JnLnBrIiwid2ViLnBrIiwicGwiLCJjb20ucGwiLCJuZXQucGwiLCJvcmcucGwiLCJhZ3JvLnBsIiwiYWlkLnBsIiwi''@;'; put 'put ''YXRtLnBsIiwiYXV0by5wbCIsImJpei5wbCIsImVkdS5wbCIsImdtaW5hLnBsIiwiZ3NtLnBsIiwiaW5mby5wbCIsIm1haWwucGwiLCJtZWRpYS5wbCIsIm1pYXN0YS5wbCIsIm1pbC5wbCIsIm5pZXJ1Y2hvbW9zY2kucGwiLCJub20ucGwiLCJwYy5wbCIsInBvd2lhdC5wbCIsInByaXYucGwi''@;'; put 'put ''LCJyZWFsZXN0YXRlLnBsIiwicmVsLnBsIiwic2V4LnBsIiwic2hvcC5wbCIsInNrbGVwLnBsIiwic29zLnBsIiwic3prb2xhLnBsIiwidGFyZ2kucGwiLCJ0bS5wbCIsInRvdXJpc20ucGwiLCJ0cmF2ZWwucGwiLCJ0dXJ5c3R5a2EucGwiLCJnb3YucGwiLCJhcC5nb3YucGwiLCJncml3Lmdv''@;'; put 'put ''di5wbCIsImljLmdvdi5wbCIsImlzLmdvdi5wbCIsImttcHNwLmdvdi5wbCIsImtvbnN1bGF0Lmdvdi5wbCIsImtwcHNwLmdvdi5wbCIsImt3cC5nb3YucGwiLCJrd3BzcC5nb3YucGwiLCJtdXAuZ292LnBsIiwibXcuZ292LnBsIiwib2lhLmdvdi5wbCIsIm9pcm0uZ292LnBsIiwib2tlLmdv''@;'; put 'put ''di5wbCIsIm9vdy5nb3YucGwiLCJvc2Noci5nb3YucGwiLCJvdW0uZ292LnBsIiwicGEuZ292LnBsIiwicGluYi5nb3YucGwiLCJwaXcuZ292LnBsIiwicG8uZ292LnBsIiwicHIuZ292LnBsIiwicHNwLmdvdi5wbCIsInBzc2UuZ292LnBsIiwicHVwLmdvdi5wbCIsInJ6Z3cuZ292LnBsIiwi''@;'; put 'put ''c2EuZ292LnBsIiwic2RuLmdvdi5wbCIsInNrby5nb3YucGwiLCJzby5nb3YucGwiLCJzci5nb3YucGwiLCJzdGFyb3N0d28uZ292LnBsIiwidWcuZ292LnBsIiwidWdpbS5nb3YucGwiLCJ1bS5nb3YucGwiLCJ1bWlnLmdvdi5wbCIsInVwb3cuZ292LnBsIiwidXBwby5nb3YucGwiLCJ1cy5n''@;'; put 'put ''b3YucGwiLCJ1dy5nb3YucGwiLCJ1enMuZ292LnBsIiwid2lmLmdvdi5wbCIsIndpaWguZ292LnBsIiwid2luYi5nb3YucGwiLCJ3aW9zLmdvdi5wbCIsIndpdGQuZ292LnBsIiwid2l3Lmdvdi5wbCIsIndrei5nb3YucGwiLCJ3c2EuZ292LnBsIiwid3Nrci5nb3YucGwiLCJ3c3NlLmdvdi5w''@;'; put 'put ''bCIsInd1b3ouZ292LnBsIiwid3ptaXV3Lmdvdi5wbCIsInpwLmdvdi5wbCIsInpwaXNkbi5nb3YucGwiLCJhdWd1c3Rvdy5wbCIsImJhYmlhLWdvcmEucGwiLCJiZWR6aW4ucGwiLCJiZXNraWR5LnBsIiwiYmlhbG93aWV6YS5wbCIsImJpYWx5c3Rvay5wbCIsImJpZWxhd2EucGwiLCJiaWVz''@;'; put 'put ''emN6YWR5LnBsIiwiYm9sZXNsYXdpZWMucGwiLCJieWRnb3N6Y3oucGwiLCJieXRvbS5wbCIsImNpZXN6eW4ucGwiLCJjemVsYWR6LnBsIiwiY3plc3QucGwiLCJkbHVnb2xla2EucGwiLCJlbGJsYWcucGwiLCJlbGsucGwiLCJnbG9nb3cucGwiLCJnbmllem5vLnBsIiwiZ29ybGljZS5wbCIs''@;'; put 'put ''ImdyYWpld28ucGwiLCJpbGF3YS5wbCIsImphd29yem5vLnBsIiwiamVsZW5pYS1nb3JhLnBsIiwiamdvcmEucGwiLCJrYWxpc3oucGwiLCJrYXJwYWN6LnBsIiwia2FydHV6eS5wbCIsImthc3p1YnkucGwiLCJrYXRvd2ljZS5wbCIsImthemltaWVyei1kb2xueS5wbCIsImtlcG5vLnBsIiwi''@;'; put 'put ''a2V0cnp5bi5wbCIsImtsb2R6a28ucGwiLCJrb2JpZXJ6eWNlLnBsIiwia29sb2JyemVnLnBsIiwia29uaW4ucGwiLCJrb25za293b2xhLnBsIiwia3V0bm8ucGwiLCJsYXB5LnBsIiwibGVib3JrLnBsIiwibGVnbmljYS5wbCIsImxlemFqc2sucGwiLCJsaW1hbm93YS5wbCIsImxvbXphLnBs''@;'; put 'put ''IiwibG93aWN6LnBsIiwibHViaW4ucGwiLCJsdWtvdy5wbCIsIm1hbGJvcmsucGwiLCJtYWxvcG9sc2thLnBsIiwibWF6b3dzemUucGwiLCJtYXp1cnkucGwiLCJtaWVsZWMucGwiLCJtaWVsbm8ucGwiLCJtcmFnb3dvLnBsIiwibmFrbG8ucGwiLCJub3dhcnVkYS5wbCIsIm55c2EucGwiLCJv''@;'; put 'put ''bGF3YS5wbCIsIm9sZWNrby5wbCIsIm9sa3Vzei5wbCIsIm9sc3p0eW4ucGwiLCJvcG9jem5vLnBsIiwib3BvbGUucGwiLCJvc3Ryb2RhLnBsIiwib3N0cm9sZWthLnBsIiwib3N0cm93aWVjLnBsIiwib3N0cm93d2xrcC5wbCIsInBpbGEucGwiLCJwaXN6LnBsIiwicG9kaGFsZS5wbCIsInBv''@;'; put 'put ''ZGxhc2llLnBsIiwicG9sa293aWNlLnBsIiwicG9tb3Jza2llLnBsIiwicG9tb3J6ZS5wbCIsInByb2Nob3dpY2UucGwiLCJwcnVzemtvdy5wbCIsInByemV3b3Jzay5wbCIsInB1bGF3eS5wbCIsInJhZG9tLnBsIiwicmF3YS1tYXoucGwiLCJyeWJuaWsucGwiLCJyemVzem93LnBsIiwic2Fu''@;'; put 'put ''b2sucGwiLCJzZWpueS5wbCIsInNrb2N6b3cucGwiLCJzbGFzay5wbCIsInNsdXBzay5wbCIsInNvc25vd2llYy5wbCIsInN0YWxvd2Etd29sYS5wbCIsInN0YXJhY2hvd2ljZS5wbCIsInN0YXJnYXJkLnBsIiwic3V3YWxraS5wbCIsInN3aWRuaWNhLnBsIiwic3dpZWJvZHppbi5wbCIsInN3''@;'; put 'put ''aW5vdWpzY2llLnBsIiwic3pjemVjaW4ucGwiLCJzemN6eXRuby5wbCIsInRhcm5vYnJ6ZWcucGwiLCJ0Z29yeS5wbCIsInR1cmVrLnBsIiwidHljaHkucGwiLCJ1c3RrYS5wbCIsIndhbGJyenljaC5wbCIsIndhcm1pYS5wbCIsIndhcnN6YXdhLnBsIiwid2F3LnBsIiwid2Vncm93LnBsIiwi''@;'; put 'put ''d2llbHVuLnBsIiwid2xvY2wucGwiLCJ3bG9jbGF3ZWsucGwiLCJ3b2R6aXNsYXcucGwiLCJ3b2xvbWluLnBsIiwid3JvY2xhdy5wbCIsInphY2hwb21vci5wbCIsInphZ2FuLnBsIiwiemFyb3cucGwiLCJ6Z29yYS5wbCIsInpnb3J6ZWxlYy5wbCIsInBtIiwicG4iLCJjby5wbiIsImVkdS5w''@;'; put 'put ''biIsImdvdi5wbiIsIm5ldC5wbiIsIm9yZy5wbiIsInBvc3QiLCJwciIsImJpei5wciIsImNvbS5wciIsImVkdS5wciIsImdvdi5wciIsImluZm8ucHIiLCJpc2xhLnByIiwibmFtZS5wciIsIm5ldC5wciIsIm9yZy5wciIsInByby5wciIsImFjLnByIiwiZXN0LnByIiwicHJvZi5wciIsInBy''@;'; put 'put ''byIsImFhYS5wcm8iLCJhY2EucHJvIiwiYWNjdC5wcm8iLCJhdm9jYXQucHJvIiwiYmFyLnBybyIsImNwYS5wcm8iLCJlbmcucHJvIiwianVyLnBybyIsImxhdy5wcm8iLCJtZWQucHJvIiwicmVjaHQucHJvIiwicHMiLCJjb20ucHMiLCJlZHUucHMiLCJnb3YucHMiLCJuZXQucHMiLCJvcmcu''@;'; put 'put ''cHMiLCJwbG8ucHMiLCJzZWMucHMiLCJwdCIsImNvbS5wdCIsImVkdS5wdCIsImdvdi5wdCIsImludC5wdCIsIm5ldC5wdCIsIm5vbWUucHQiLCJvcmcucHQiLCJwdWJsLnB0IiwicHciLCJiZWxhdS5wdyIsImNvLnB3IiwiZWQucHciLCJnby5wdyIsIm9yLnB3IiwicHkiLCJjb20ucHkiLCJj''@;'; put 'put ''b29wLnB5IiwiZWR1LnB5IiwiZ292LnB5IiwibWlsLnB5IiwibmV0LnB5Iiwib3JnLnB5IiwicWEiLCJjb20ucWEiLCJlZHUucWEiLCJnb3YucWEiLCJtaWwucWEiLCJuYW1lLnFhIiwibmV0LnFhIiwib3JnLnFhIiwic2NoLnFhIiwicmUiLCJhc3NvLnJlIiwiY29tLnJlIiwicm8iLCJhcnRz''@;'; put 'put ''LnJvIiwiY29tLnJvIiwiZmlybS5ybyIsImluZm8ucm8iLCJub20ucm8iLCJudC5ybyIsIm9yZy5ybyIsInJlYy5ybyIsInN0b3JlLnJvIiwidG0ucm8iLCJ3d3cucm8iLCJycyIsImFjLnJzIiwiY28ucnMiLCJlZHUucnMiLCJnb3YucnMiLCJpbi5ycyIsIm9yZy5ycyIsInJ1IiwicnciLCJh''@;'; put 'put ''Yy5ydyIsImNvLnJ3IiwiY29vcC5ydyIsImdvdi5ydyIsIm1pbC5ydyIsIm5ldC5ydyIsIm9yZy5ydyIsInNhIiwiY29tLnNhIiwiZWR1LnNhIiwiZ292LnNhIiwibWVkLnNhIiwibmV0LnNhIiwib3JnLnNhIiwicHViLnNhIiwic2NoLnNhIiwic2IiLCJjb20uc2IiLCJlZHUuc2IiLCJnb3Yu''@;'; put 'put ''c2IiLCJuZXQuc2IiLCJvcmcuc2IiLCJzYyIsImNvbS5zYyIsImVkdS5zYyIsImdvdi5zYyIsIm5ldC5zYyIsIm9yZy5zYyIsInNkIiwiY29tLnNkIiwiZWR1LnNkIiwiZ292LnNkIiwiaW5mby5zZCIsIm1lZC5zZCIsIm5ldC5zZCIsIm9yZy5zZCIsInR2LnNkIiwic2UiLCJhLnNlIiwiYWMu''@;'; put 'put ''c2UiLCJiLnNlIiwiYmQuc2UiLCJicmFuZC5zZSIsImMuc2UiLCJkLnNlIiwiZS5zZSIsImYuc2UiLCJmaC5zZSIsImZoc2suc2UiLCJmaHYuc2UiLCJnLnNlIiwiaC5zZSIsImkuc2UiLCJrLnNlIiwia29tZm9yYi5zZSIsImtvbW11bmFsZm9yYnVuZC5zZSIsImtvbXZ1eC5zZSIsImwuc2Ui''@;'; put 'put ''LCJsYW5iaWIuc2UiLCJtLnNlIiwibi5zZSIsIm5hdHVyYnJ1a3NneW1uLnNlIiwiby5zZSIsIm9yZy5zZSIsInAuc2UiLCJwYXJ0aS5zZSIsInBwLnNlIiwicHJlc3Muc2UiLCJyLnNlIiwicy5zZSIsInQuc2UiLCJ0bS5zZSIsInUuc2UiLCJ3LnNlIiwieC5zZSIsInkuc2UiLCJ6LnNlIiwi''@;'; put 'put ''c2ciLCJjb20uc2ciLCJlZHUuc2ciLCJnb3Yuc2ciLCJuZXQuc2ciLCJvcmcuc2ciLCJzaCIsImNvbS5zaCIsImdvdi5zaCIsIm1pbC5zaCIsIm5ldC5zaCIsIm9yZy5zaCIsInNpIiwic2oiLCJzayIsInNsIiwiY29tLnNsIiwiZWR1LnNsIiwiZ292LnNsIiwibmV0LnNsIiwib3JnLnNsIiwi''@;'; put 'put ''c20iLCJzbiIsImFydC5zbiIsImNvbS5zbiIsImVkdS5zbiIsImdvdXYuc24iLCJvcmcuc24iLCJwZXJzby5zbiIsInVuaXYuc24iLCJzbyIsImNvbS5zbyIsImVkdS5zbyIsImdvdi5zbyIsIm1lLnNvIiwibmV0LnNvIiwib3JnLnNvIiwic3IiLCJzcyIsImJpei5zcyIsImNvLnNzIiwiY29t''@;'; put 'put ''LnNzIiwiZWR1LnNzIiwiZ292LnNzIiwibWUuc3MiLCJuZXQuc3MiLCJvcmcuc3MiLCJzY2guc3MiLCJzdCIsImNvLnN0IiwiY29tLnN0IiwiY29uc3VsYWRvLnN0IiwiZWR1LnN0IiwiZW1iYWl4YWRhLnN0IiwibWlsLnN0IiwibmV0LnN0Iiwib3JnLnN0IiwicHJpbmNpcGUuc3QiLCJzYW90''@;'; put 'put ''b21lLnN0Iiwic3RvcmUuc3QiLCJzdSIsInN2IiwiY29tLnN2IiwiZWR1LnN2IiwiZ29iLnN2Iiwib3JnLnN2IiwicmVkLnN2Iiwic3giLCJnb3Yuc3giLCJzeSIsImNvbS5zeSIsImVkdS5zeSIsImdvdi5zeSIsIm1pbC5zeSIsIm5ldC5zeSIsIm9yZy5zeSIsInN6IiwiYWMuc3oiLCJjby5z''@;'; put 'put ''eiIsIm9yZy5zeiIsInRjIiwidGQiLCJ0ZWwiLCJ0ZiIsInRnIiwidGgiLCJhYy50aCIsImNvLnRoIiwiZ28udGgiLCJpbi50aCIsIm1pLnRoIiwibmV0LnRoIiwib3IudGgiLCJ0aiIsImFjLnRqIiwiYml6LnRqIiwiY28udGoiLCJjb20udGoiLCJlZHUudGoiLCJnby50aiIsImdvdi50aiIs''@;'; put 'put ''ImludC50aiIsIm1pbC50aiIsIm5hbWUudGoiLCJuZXQudGoiLCJuaWMudGoiLCJvcmcudGoiLCJ0ZXN0LnRqIiwid2ViLnRqIiwidGsiLCJ0bCIsImdvdi50bCIsInRtIiwiY28udG0iLCJjb20udG0iLCJlZHUudG0iLCJnb3YudG0iLCJtaWwudG0iLCJuZXQudG0iLCJub20udG0iLCJvcmcu''@;'; put 'put ''dG0iLCJ0biIsImNvbS50biIsImVucy50biIsImZpbi50biIsImdvdi50biIsImluZC50biIsImluZm8udG4iLCJpbnRsLnRuIiwibWluY29tLnRuIiwibmF0LnRuIiwibmV0LnRuIiwib3JnLnRuIiwicGVyc28udG4iLCJ0b3VyaXNtLnRuIiwidG8iLCJjb20udG8iLCJlZHUudG8iLCJnb3Yu''@;'; put 'put ''dG8iLCJtaWwudG8iLCJuZXQudG8iLCJvcmcudG8iLCJ0ciIsImF2LnRyIiwiYmJzLnRyIiwiYmVsLnRyIiwiYml6LnRyIiwiY29tLnRyIiwiZHIudHIiLCJlZHUudHIiLCJnZW4udHIiLCJnb3YudHIiLCJpbmZvLnRyIiwiazEyLnRyIiwia2VwLnRyIiwibWlsLnRyIiwibmFtZS50ciIsIm5l''@;'; put 'put ''dC50ciIsIm9yZy50ciIsInBvbC50ciIsInRlbC50ciIsInRzay50ciIsInR2LnRyIiwid2ViLnRyIiwibmMudHIiLCJnb3YubmMudHIiLCJ0dCIsImJpei50dCIsImNvLnR0IiwiY29tLnR0IiwiZWR1LnR0IiwiZ292LnR0IiwiaW5mby50dCIsIm1pbC50dCIsIm5hbWUudHQiLCJuZXQudHQi''@;'; put 'put ''LCJvcmcudHQiLCJwcm8udHQiLCJ0diIsInR3IiwiY2x1Yi50dyIsImNvbS50dyIsImViaXoudHciLCJlZHUudHciLCJnYW1lLnR3IiwiZ292LnR3IiwiaWR2LnR3IiwibWlsLnR3IiwibmV0LnR3Iiwib3JnLnR3IiwidHoiLCJhYy50eiIsImNvLnR6IiwiZ28udHoiLCJob3RlbC50eiIsImlu''@;'; put 'put ''Zm8udHoiLCJtZS50eiIsIm1pbC50eiIsIm1vYmkudHoiLCJuZS50eiIsIm9yLnR6Iiwic2MudHoiLCJ0di50eiIsInVhIiwiY29tLnVhIiwiZWR1LnVhIiwiZ292LnVhIiwiaW4udWEiLCJuZXQudWEiLCJvcmcudWEiLCJjaGVya2Fzc3kudWEiLCJjaGVya2FzeS51YSIsImNoZXJuaWdvdi51''@;'; put 'put ''YSIsImNoZXJuaWhpdi51YSIsImNoZXJuaXZ0c2kudWEiLCJjaGVybm92dHN5LnVhIiwiY2sudWEiLCJjbi51YSIsImNyLnVhIiwiY3JpbWVhLnVhIiwiY3YudWEiLCJkbi51YSIsImRuZXByb3BldHJvdnNrLnVhIiwiZG5pcHJvcGV0cm92c2sudWEiLCJkb25ldHNrLnVhIiwiZHAudWEiLCJp''@;'; put 'put ''Zi51YSIsIml2YW5vLWZyYW5raXZzay51YSIsImtoLnVhIiwia2hhcmtpdi51YSIsImtoYXJrb3YudWEiLCJraGVyc29uLnVhIiwia2htZWxuaXRza2l5LnVhIiwia2htZWxueXRza3lpLnVhIiwia2lldi51YSIsImtpcm92b2dyYWQudWEiLCJrbS51YSIsImtyLnVhIiwia3JvcHl2bnl0c2t5''@;'; put 'put ''aS51YSIsImtyeW0udWEiLCJrcy51YSIsImt2LnVhIiwia3lpdi51YSIsImxnLnVhIiwibHQudWEiLCJsdWdhbnNrLnVhIiwibHVoYW5zay51YSIsImx1dHNrLnVhIiwibHYudWEiLCJsdml2LnVhIiwibWsudWEiLCJteWtvbGFpdi51YSIsIm5pa29sYWV2LnVhIiwib2QudWEiLCJvZGVzYS51''@;'; put 'put ''YSIsIm9kZXNzYS51YSIsInBsLnVhIiwicG9sdGF2YS51YSIsInJpdm5lLnVhIiwicm92bm8udWEiLCJydi51YSIsInNiLnVhIiwic2ViYXN0b3BvbC51YSIsInNldmFzdG9wb2wudWEiLCJzbS51YSIsInN1bXkudWEiLCJ0ZS51YSIsInRlcm5vcGlsLnVhIiwidXoudWEiLCJ1emhnb3JvZC51''@;'; put 'put ''YSIsInV6aGhvcm9kLnVhIiwidmlubmljYS51YSIsInZpbm55dHNpYS51YSIsInZuLnVhIiwidm9seW4udWEiLCJ5YWx0YS51YSIsInpha2FycGF0dGlhLnVhIiwiemFwb3Jpemh6aGUudWEiLCJ6YXBvcml6aHpoaWEudWEiLCJ6aGl0b21pci51YSIsInpoeXRvbXlyLnVhIiwienAudWEiLCJ6''@;'; put 'put ''dC51YSIsInVnIiwiYWMudWciLCJjby51ZyIsImNvbS51ZyIsImdvLnVnIiwibmUudWciLCJvci51ZyIsIm9yZy51ZyIsInNjLnVnIiwidWsiLCJhYy51ayIsImNvLnVrIiwiZ292LnVrIiwibHRkLnVrIiwibWUudWsiLCJuZXQudWsiLCJuaHMudWsiLCJvcmcudWsiLCJwbGMudWsiLCJwb2xp''@;'; put 'put ''Y2UudWsiLCIqLnNjaC51ayIsInVzIiwiZG5pLnVzIiwiZmVkLnVzIiwiaXNhLnVzIiwia2lkcy51cyIsIm5zbi51cyIsImFrLnVzIiwiYWwudXMiLCJhci51cyIsImFzLnVzIiwiYXoudXMiLCJjYS51cyIsImNvLnVzIiwiY3QudXMiLCJkYy51cyIsImRlLnVzIiwiZmwudXMiLCJnYS51cyIs''@;'; put 'put ''Imd1LnVzIiwiaGkudXMiLCJpYS51cyIsImlkLnVzIiwiaWwudXMiLCJpbi51cyIsImtzLnVzIiwia3kudXMiLCJsYS51cyIsIm1hLnVzIiwibWQudXMiLCJtZS51cyIsIm1pLnVzIiwibW4udXMiLCJtby51cyIsIm1zLnVzIiwibXQudXMiLCJuYy51cyIsIm5kLnVzIiwibmUudXMiLCJuaC51''@;'; put 'put ''cyIsIm5qLnVzIiwibm0udXMiLCJudi51cyIsIm55LnVzIiwib2gudXMiLCJvay51cyIsIm9yLnVzIiwicGEudXMiLCJwci51cyIsInJpLnVzIiwic2MudXMiLCJzZC51cyIsInRuLnVzIiwidHgudXMiLCJ1dC51cyIsInZhLnVzIiwidmkudXMiLCJ2dC51cyIsIndhLnVzIiwid2kudXMiLCJ3''@;'; put 'put ''di51cyIsInd5LnVzIiwiazEyLmFrLnVzIiwiazEyLmFsLnVzIiwiazEyLmFyLnVzIiwiazEyLmFzLnVzIiwiazEyLmF6LnVzIiwiazEyLmNhLnVzIiwiazEyLmNvLnVzIiwiazEyLmN0LnVzIiwiazEyLmRjLnVzIiwiazEyLmZsLnVzIiwiazEyLmdhLnVzIiwiazEyLmd1LnVzIiwiazEyLmlh''@;'; put 'put ''LnVzIiwiazEyLmlkLnVzIiwiazEyLmlsLnVzIiwiazEyLmluLnVzIiwiazEyLmtzLnVzIiwiazEyLmt5LnVzIiwiazEyLmxhLnVzIiwiazEyLm1hLnVzIiwiazEyLm1kLnVzIiwiazEyLm1lLnVzIiwiazEyLm1pLnVzIiwiazEyLm1uLnVzIiwiazEyLm1vLnVzIiwiazEyLm1zLnVzIiwiazEy''@;'; put 'put ''Lm10LnVzIiwiazEyLm5jLnVzIiwiazEyLm5lLnVzIiwiazEyLm5oLnVzIiwiazEyLm5qLnVzIiwiazEyLm5tLnVzIiwiazEyLm52LnVzIiwiazEyLm55LnVzIiwiazEyLm9oLnVzIiwiazEyLm9rLnVzIiwiazEyLm9yLnVzIiwiazEyLnBhLnVzIiwiazEyLnByLnVzIiwiazEyLnNjLnVzIiwi''@;'; put 'put ''azEyLnRuLnVzIiwiazEyLnR4LnVzIiwiazEyLnV0LnVzIiwiazEyLnZhLnVzIiwiazEyLnZpLnVzIiwiazEyLnZ0LnVzIiwiazEyLndhLnVzIiwiazEyLndpLnVzIiwiY2MuYWsudXMiLCJsaWIuYWsudXMiLCJjYy5hbC51cyIsImxpYi5hbC51cyIsImNjLmFyLnVzIiwibGliLmFyLnVzIiwi''@;'; put 'put ''Y2MuYXMudXMiLCJsaWIuYXMudXMiLCJjYy5hei51cyIsImxpYi5hei51cyIsImNjLmNhLnVzIiwibGliLmNhLnVzIiwiY2MuY28udXMiLCJsaWIuY28udXMiLCJjYy5jdC51cyIsImxpYi5jdC51cyIsImNjLmRjLnVzIiwibGliLmRjLnVzIiwiY2MuZGUudXMiLCJjYy5mbC51cyIsImNjLmdh''@;'; put 'put ''LnVzIiwiY2MuZ3UudXMiLCJjYy5oaS51cyIsImNjLmlhLnVzIiwiY2MuaWQudXMiLCJjYy5pbC51cyIsImNjLmluLnVzIiwiY2Mua3MudXMiLCJjYy5reS51cyIsImNjLmxhLnVzIiwiY2MubWEudXMiLCJjYy5tZC51cyIsImNjLm1lLnVzIiwiY2MubWkudXMiLCJjYy5tbi51cyIsImNjLm1v''@;'; put 'put ''LnVzIiwiY2MubXMudXMiLCJjYy5tdC51cyIsImNjLm5jLnVzIiwiY2MubmQudXMiLCJjYy5uZS51cyIsImNjLm5oLnVzIiwiY2MubmoudXMiLCJjYy5ubS51cyIsImNjLm52LnVzIiwiY2MubnkudXMiLCJjYy5vaC51cyIsImNjLm9rLnVzIiwiY2Mub3IudXMiLCJjYy5wYS51cyIsImNjLnBy''@;'; put 'put ''LnVzIiwiY2MucmkudXMiLCJjYy5zYy51cyIsImNjLnNkLnVzIiwiY2MudG4udXMiLCJjYy50eC51cyIsImNjLnV0LnVzIiwiY2MudmEudXMiLCJjYy52aS51cyIsImNjLnZ0LnVzIiwiY2Mud2EudXMiLCJjYy53aS51cyIsImNjLnd2LnVzIiwiY2Mud3kudXMiLCJrMTIud3kudXMiLCJsaWIu''@;'; put 'put ''ZmwudXMiLCJsaWIuZ2EudXMiLCJsaWIuZ3UudXMiLCJsaWIuaGkudXMiLCJsaWIuaWEudXMiLCJsaWIuaWQudXMiLCJsaWIuaWwudXMiLCJsaWIuaW4udXMiLCJsaWIua3MudXMiLCJsaWIua3kudXMiLCJsaWIubGEudXMiLCJsaWIubWEudXMiLCJsaWIubWQudXMiLCJsaWIubWUudXMiLCJs''@;'; put 'put ''aWIubWkudXMiLCJsaWIubW4udXMiLCJsaWIubW8udXMiLCJsaWIubXMudXMiLCJsaWIubXQudXMiLCJsaWIubmMudXMiLCJsaWIubmQudXMiLCJsaWIubmUudXMiLCJsaWIubmgudXMiLCJsaWIubmoudXMiLCJsaWIubm0udXMiLCJsaWIubnYudXMiLCJsaWIubnkudXMiLCJsaWIub2gudXMi''@;'; put 'put ''LCJsaWIub2sudXMiLCJsaWIub3IudXMiLCJsaWIucGEudXMiLCJsaWIucHIudXMiLCJsaWIucmkudXMiLCJsaWIuc2MudXMiLCJsaWIuc2QudXMiLCJsaWIudG4udXMiLCJsaWIudHgudXMiLCJsaWIudXQudXMiLCJsaWIudmEudXMiLCJsaWIudmkudXMiLCJsaWIudnQudXMiLCJsaWIud2Eu''@;'; put 'put ''dXMiLCJsaWIud2kudXMiLCJsaWIud3kudXMiLCJjaHRyLmsxMi5tYS51cyIsInBhcm9jaC5rMTIubWEudXMiLCJwdnQuazEyLm1hLnVzIiwiYW5uLWFyYm9yLm1pLnVzIiwiY29nLm1pLnVzIiwiZHN0Lm1pLnVzIiwiZWF0b24ubWkudXMiLCJnZW4ubWkudXMiLCJtdXMubWkudXMiLCJ0ZWMu''@;'; put 'put ''bWkudXMiLCJ3YXNodGVuYXcubWkudXMiLCJ1eSIsImNvbS51eSIsImVkdS51eSIsImd1Yi51eSIsIm1pbC51eSIsIm5ldC51eSIsIm9yZy51eSIsInV6IiwiY28udXoiLCJjb20udXoiLCJuZXQudXoiLCJvcmcudXoiLCJ2YSIsInZjIiwiY29tLnZjIiwiZWR1LnZjIiwiZ292LnZjIiwibWls''@;'; put 'put ''LnZjIiwibmV0LnZjIiwib3JnLnZjIiwidmUiLCJhcnRzLnZlIiwiYmliLnZlIiwiY28udmUiLCJjb20udmUiLCJlMTIudmUiLCJlZHUudmUiLCJmaXJtLnZlIiwiZ29iLnZlIiwiZ292LnZlIiwiaW5mby52ZSIsImludC52ZSIsIm1pbC52ZSIsIm5ldC52ZSIsIm5vbS52ZSIsIm9yZy52ZSIs''@;'; put 'put ''InJhci52ZSIsInJlYy52ZSIsInN0b3JlLnZlIiwidGVjLnZlIiwid2ViLnZlIiwidmciLCJ2aSIsImNvLnZpIiwiY29tLnZpIiwiazEyLnZpIiwibmV0LnZpIiwib3JnLnZpIiwidm4iLCJhYy52biIsImFpLnZuIiwiYml6LnZuIiwiY29tLnZuIiwiZWR1LnZuIiwiZ292LnZuIiwiaGVhbHRo''@;'; put 'put ''LnZuIiwiaWQudm4iLCJpbmZvLnZuIiwiaW50LnZuIiwiaW8udm4iLCJuYW1lLnZuIiwibmV0LnZuIiwib3JnLnZuIiwicHJvLnZuIiwiYW5naWFuZy52biIsImJhY2dpYW5nLnZuIiwiYmFja2FuLnZuIiwiYmFjbGlldS52biIsImJhY25pbmgudm4iLCJiYXJpYS12dW5ndGF1LnZuIiwiYmVu''@;'; put 'put ''dHJlLnZuIiwiYmluaGRpbmgudm4iLCJiaW5oZHVvbmcudm4iLCJiaW5ocGh1b2Mudm4iLCJiaW5odGh1YW4udm4iLCJjYW1hdS52biIsImNhbnRoby52biIsImNhb2Jhbmcudm4iLCJkYWtsYWsudm4iLCJkYWtub25nLnZuIiwiZGFuYW5nLnZuIiwiZGllbmJpZW4udm4iLCJkb25nbmFpLnZu''@;'; put 'put ''IiwiZG9uZ3RoYXAudm4iLCJnaWFsYWkudm4iLCJoYWdpYW5nLnZuIiwiaGFpZHVvbmcudm4iLCJoYWlwaG9uZy52biIsImhhbmFtLnZuIiwiaGFub2kudm4iLCJoYXRpbmgudm4iLCJoYXVnaWFuZy52biIsImhvYWJpbmgudm4iLCJodW5neWVuLnZuIiwia2hhbmhob2Eudm4iLCJraWVuZ2lh''@;'; put 'put ''bmcudm4iLCJrb250dW0udm4iLCJsYWljaGF1LnZuIiwibGFtZG9uZy52biIsImxhbmdzb24udm4iLCJsYW9jYWkudm4iLCJsb25nYW4udm4iLCJuYW1kaW5oLnZuIiwibmdoZWFuLnZuIiwibmluaGJpbmgudm4iLCJuaW5odGh1YW4udm4iLCJwaHV0aG8udm4iLCJwaHV5ZW4udm4iLCJxdWFu''@;'; put 'put ''Z2Jpbmgudm4iLCJxdWFuZ25hbS52biIsInF1YW5nbmdhaS52biIsInF1YW5nbmluaC52biIsInF1YW5ndHJpLnZuIiwic29jdHJhbmcudm4iLCJzb25sYS52biIsInRheW5pbmgudm4iLCJ0aGFpYmluaC52biIsInRoYWluZ3V5ZW4udm4iLCJ0aGFuaGhvYS52biIsInRoYW5ocGhvaG9jaGlt''@;'; put 'put ''aW5oLnZuIiwidGh1YXRoaWVuaHVlLnZuIiwidGllbmdpYW5nLnZuIiwidHJhdmluaC52biIsInR1eWVucXVhbmcudm4iLCJ2aW5obG9uZy52biIsInZpbmhwaHVjLnZuIiwieWVuYmFpLnZuIiwidnUiLCJjb20udnUiLCJlZHUudnUiLCJuZXQudnUiLCJvcmcudnUiLCJ3ZiIsIndzIiwiY29t''@;'; put 'put ''LndzIiwiZWR1LndzIiwiZ292LndzIiwibmV0LndzIiwib3JnLndzIiwieXQiLCJcdTA2MjdcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA1NzBcdTA1NjFcdTA1NzUiLCJcdTA5YWNcdTA5YmVcdTA5ODJcdTA5YjJcdTA5YmUiLCJcdTA0MzFcdTA0MzMiLCJcdTA2MjdcdTA2''@;'; put 'put ''NDRcdTA2MjhcdTA2MmRcdTA2MzFcdTA2NGFcdTA2NDYiLCJcdTA0MzFcdTA0MzVcdTA0M2IiLCJcdTRlMmRcdTU2ZmQiLCJcdTRlMmRcdTU3MGIiLCJcdTA2MjdcdTA2NDRcdTA2MmNcdTA2MzJcdTA2MjdcdTA2MjZcdTA2MzEiLCJcdTA2NDVcdTA2MzVcdTA2MzEiLCJcdTA0MzVcdTA0NGUi''@;'; put 'put ''LCJcdTAzYjVcdTAzYzUiLCJcdTA2NDVcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjciLCJcdTEwZDJcdTEwZDQiLCJcdTAzYjVcdTAzYmIiLCJcdTk5OTlcdTZlMmYiLCJcdTUwMGJcdTRlYmEuXHU5OTk5XHU2ZTJmIiwiXHU1MTZjXHU1M2Y4Llx1OTk5''@;'; put 'put ''OVx1NmUyZiIsIlx1NjUzZlx1NWU5Yy5cdTk5OTlcdTZlMmYiLCJcdTY1NTlcdTgwYjIuXHU5OTk5XHU2ZTJmIiwiXHU3ZDQ0XHU3ZTU0Llx1OTk5OVx1NmUyZiIsIlx1N2RiMlx1N2Q2MS5cdTk5OTlcdTZlMmYiLCJcdTBjYWRcdTBjYmVcdTBjYjBcdTBjYTQiLCJcdTBiMmRcdTBiM2VcdTBi''@;'; put 'put ''MzBcdTBiMjQiLCJcdTA5YWRcdTA5YmVcdTA5ZjBcdTA5YTQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjRcdTA5MmVcdTA5NGQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5NGJcdTA5MjQiLCJcdTA2ODBcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBkMmRcdTBkM2VcdTBkMzBcdTBkMjRcdTBk''@;'; put 'put ''MDIiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjQiLCJcdTA2MjhcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTA2MjhcdTA2YmVcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBjMmRcdTBjM2VcdTBjMzBcdTBjMjRcdTBjNGQiLCJcdTBhYWRcdTBhYmVcdTBhYjBcdTBhYTQiLCJcdTBhMmRcdTBhM2Vc''@;'; put 'put ''dTBhMzBcdTBhMjQiLCJcdTA5YWRcdTA5YmVcdTA5YjBcdTA5YTQiLCJcdTBiODdcdTBiYThcdTBiY2RcdTBiYTRcdTBiYmZcdTBiYWZcdTBiYmUiLCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MzFc''@;'; put 'put ''dTA2MjdcdTA2NDIiLCJcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MzFcdTA2MmZcdTA2NDYiLCJcdWQ1NWNcdWFkNmQiLCJcdTA0OWJcdTA0MzBcdTA0MzciLCJcdTBlYTVcdTBlYjJcdTBlYTciLCJcdTBkYmRcdTBkODJcdTBkOWFcdTBkY2YiLCJcdTBiODdcdTBiYjJcdTBiOTlcdTBiY2RcdTBi''@;'; put 'put ''OTVcdTBiYzgiLCJcdTA2MjdcdTA2NDRcdTA2NDVcdTA2M2FcdTA2MzFcdTA2MjgiLCJcdTA0M2NcdTA0M2FcdTA0MzQiLCJcdTA0M2NcdTA0M2VcdTA0M2QiLCJcdTZmYjNcdTk1ODAiLCJcdTZmYjNcdTk1ZTgiLCJcdTA2NDVcdTA2NDRcdTA2NGFcdTA2MzNcdTA2NGFcdTA2MjciLCJcdTA2''@;'; put 'put ''MzlcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2YTlcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2NDNcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2NDFcdTA2NDRcdTA2MzNcdTA2MzdcdTA2NGFcdTA2NDYiLCJcdTA0NDFcdTA0NDBc''@;'; put 'put ''dTA0MzEiLCJcdTA0MzBcdTA0M2EuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDMxXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzNC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNmXHUw''@;'; put 'put ''NDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0M1x1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDBcdTA0NDQiLCJcdTA2NDJcdTA2MzdcdTA2MzEiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2MjkiLCJcdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2YzMiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2NDciLCJcdTA2MzNcdTA2NDhcdTA2MmZcdTA2Mjdc''@;'; put 'put ''dTA2NDYiLCJcdTY1YjBcdTUyYTBcdTU3NjEiLCJcdTBiOWFcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYWFcdTBiY2RcdTBiYWFcdTBiYzJcdTBiYjBcdTBiY2QiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjkiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjciLCJc''@;'; put 'put ''dTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMTdcdTBlMmJcdTBlMzJcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE4XHUwZTM4XHUwZTIzXHUwZTAxXHUwZTM0XHUwZTA4Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGU0MFx1MGUxOVx1MGU0N1x1MGUxNS5cdTBlNDRcdTBlMTdcdTBl''@;'; put 'put ''MjIiLCJcdTBlMjNcdTBlMzFcdTBlMTBcdTBlMWFcdTBlMzJcdTBlMjUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTI4XHUwZTM2XHUwZTAxXHUwZTI5XHUwZTMyLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyZFx1MGUwN1x1MGUwNFx1MGU0Y1x1MGUwMVx1MGUyMy5cdTBlNDRcdTBlMTdc''@;'; put 'put ''dTBlMjIiLCJcdTA2MmFcdTA2NDhcdTA2NDZcdTA2MzMiLCJcdTUzZjBcdTcwNjMiLCJcdTUzZjBcdTZlN2UiLCJcdTgxZmFcdTcwNjMiLCJcdTA0NDNcdTA0M2FcdTA0NDAiLCJcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDVcdTA2NDYiLCJ4eHgiLCJ5ZSIsImNvbS55ZSIsImVkdS55ZSIsImdv''@;'; put 'put ''di55ZSIsIm1pbC55ZSIsIm5ldC55ZSIsIm9yZy55ZSIsImFjLnphIiwiYWdyaWMuemEiLCJhbHQuemEiLCJjby56YSIsImVkdS56YSIsImdvdi56YSIsImdyb25kYXIuemEiLCJsYXcuemEiLCJtaWwuemEiLCJuZXQuemEiLCJuZ28uemEiLCJuaWMuemEiLCJuaXMuemEiLCJub20uemEiLCJv''@;'; put 'put ''cmcuemEiLCJzY2hvb2wuemEiLCJ0bS56YSIsIndlYi56YSIsInptIiwiYWMuem0iLCJiaXouem0iLCJjby56bSIsImNvbS56bSIsImVkdS56bSIsImdvdi56bSIsImluZm8uem0iLCJtaWwuem0iLCJuZXQuem0iLCJvcmcuem0iLCJzY2guem0iLCJ6dyIsImFjLnp3IiwiY28uenciLCJnb3Yu''@;'; put 'put ''enciLCJtaWwuenciLCJvcmcuenciLCJhYWEiLCJhYXJwIiwiYWJiIiwiYWJib3R0IiwiYWJidmllIiwiYWJjIiwiYWJsZSIsImFib2dhZG8iLCJhYnVkaGFiaSIsImFjYWRlbXkiLCJhY2NlbnR1cmUiLCJhY2NvdW50YW50IiwiYWNjb3VudGFudHMiLCJhY28iLCJhY3RvciIsImFkcyIsImFk''@;'; put 'put ''dWx0IiwiYWVnIiwiYWV0bmEiLCJhZmwiLCJhZnJpY2EiLCJhZ2FraGFuIiwiYWdlbmN5IiwiYWlnIiwiYWlyYnVzIiwiYWlyZm9yY2UiLCJhaXJ0ZWwiLCJha2RuIiwiYWxpYmFiYSIsImFsaXBheSIsImFsbGZpbmFueiIsImFsbHN0YXRlIiwiYWxseSIsImFsc2FjZSIsImFsc3RvbSIsImFt''@;'; put 'put ''YXpvbiIsImFtZXJpY2FuZXhwcmVzcyIsImFtZXJpY2FuZmFtaWx5IiwiYW1leCIsImFtZmFtIiwiYW1pY2EiLCJhbXN0ZXJkYW0iLCJhbmFseXRpY3MiLCJhbmRyb2lkIiwiYW5xdWFuIiwiYW56IiwiYW9sIiwiYXBhcnRtZW50cyIsImFwcCIsImFwcGxlIiwiYXF1YXJlbGxlIiwiYXJhYiIs''@;'; put 'put ''ImFyYW1jbyIsImFyY2hpIiwiYXJteSIsImFydCIsImFydGUiLCJhc2RhIiwiYXNzb2NpYXRlcyIsImF0aGxldGEiLCJhdHRvcm5leSIsImF1Y3Rpb24iLCJhdWRpIiwiYXVkaWJsZSIsImF1ZGlvIiwiYXVzcG9zdCIsImF1dGhvciIsImF1dG8iLCJhdXRvcyIsImF3cyIsImF4YSIsImF6dXJl''@;'; put 'put ''IiwiYmFieSIsImJhaWR1IiwiYmFuYW1leCIsImJhbmQiLCJiYW5rIiwiYmFyIiwiYmFyY2Vsb25hIiwiYmFyY2xheWNhcmQiLCJiYXJjbGF5cyIsImJhcmVmb290IiwiYmFyZ2FpbnMiLCJiYXNlYmFsbCIsImJhc2tldGJhbGwiLCJiYXVoYXVzIiwiYmF5ZXJuIiwiYmJjIiwiYmJ0IiwiYmJ2''@;'; put 'put ''YSIsImJjZyIsImJjbiIsImJlYXRzIiwiYmVhdXR5IiwiYmVlciIsImJlbnRsZXkiLCJiZXJsaW4iLCJiZXN0IiwiYmVzdGJ1eSIsImJldCIsImJoYXJ0aSIsImJpYmxlIiwiYmlkIiwiYmlrZSIsImJpbmciLCJiaW5nbyIsImJpbyIsImJsYWNrIiwiYmxhY2tmcmlkYXkiLCJibG9ja2J1c3Rl''@;'; put 'put ''ciIsImJsb2ciLCJibG9vbWJlcmciLCJibHVlIiwiYm1zIiwiYm13IiwiYm5wcGFyaWJhcyIsImJvYXRzIiwiYm9laHJpbmdlciIsImJvZmEiLCJib20iLCJib25kIiwiYm9vIiwiYm9vayIsImJvb2tpbmciLCJib3NjaCIsImJvc3RpayIsImJvc3RvbiIsImJvdCIsImJvdXRpcXVlIiwiYm94''@;'; put 'put ''IiwiYnJhZGVzY28iLCJicmlkZ2VzdG9uZSIsImJyb2Fkd2F5IiwiYnJva2VyIiwiYnJvdGhlciIsImJydXNzZWxzIiwiYnVpbGQiLCJidWlsZGVycyIsImJ1c2luZXNzIiwiYnV5IiwiYnV6eiIsImJ6aCIsImNhYiIsImNhZmUiLCJjYWwiLCJjYWxsIiwiY2Fsdmlua2xlaW4iLCJjYW0iLCJj''@;'; put 'put ''YW1lcmEiLCJjYW1wIiwiY2Fub24iLCJjYXBldG93biIsImNhcGl0YWwiLCJjYXBpdGFsb25lIiwiY2FyIiwiY2FyYXZhbiIsImNhcmRzIiwiY2FyZSIsImNhcmVlciIsImNhcmVlcnMiLCJjYXJzIiwiY2FzYSIsImNhc2UiLCJjYXNoIiwiY2FzaW5vIiwiY2F0ZXJpbmciLCJjYXRob2xpYyIs''@;'; put 'put ''ImNiYSIsImNibiIsImNicmUiLCJjZW50ZXIiLCJjZW8iLCJjZXJuIiwiY2ZhIiwiY2ZkIiwiY2hhbmVsIiwiY2hhbm5lbCIsImNoYXJpdHkiLCJjaGFzZSIsImNoYXQiLCJjaGVhcCIsImNoaW50YWkiLCJjaHJpc3RtYXMiLCJjaHJvbWUiLCJjaHVyY2giLCJjaXByaWFuaSIsImNpcmNsZSIs''@;'; put 'put ''ImNpc2NvIiwiY2l0YWRlbCIsImNpdGkiLCJjaXRpYyIsImNpdHkiLCJjbGFpbXMiLCJjbGVhbmluZyIsImNsaWNrIiwiY2xpbmljIiwiY2xpbmlxdWUiLCJjbG90aGluZyIsImNsb3VkIiwiY2x1YiIsImNsdWJtZWQiLCJjb2FjaCIsImNvZGVzIiwiY29mZmVlIiwiY29sbGVnZSIsImNvbG9n''@;'; put 'put ''bmUiLCJjb21tYmFuayIsImNvbW11bml0eSIsImNvbXBhbnkiLCJjb21wYXJlIiwiY29tcHV0ZXIiLCJjb21zZWMiLCJjb25kb3MiLCJjb25zdHJ1Y3Rpb24iLCJjb25zdWx0aW5nIiwiY29udGFjdCIsImNvbnRyYWN0b3JzIiwiY29va2luZyIsImNvb2wiLCJjb3JzaWNhIiwiY291bnRyeSIs''@;'; put 'put ''ImNvdXBvbiIsImNvdXBvbnMiLCJjb3Vyc2VzIiwiY3BhIiwiY3JlZGl0IiwiY3JlZGl0Y2FyZCIsImNyZWRpdHVuaW9uIiwiY3JpY2tldCIsImNyb3duIiwiY3JzIiwiY3J1aXNlIiwiY3J1aXNlcyIsImN1aXNpbmVsbGEiLCJjeW1ydSIsImN5b3UiLCJkYWQiLCJkYW5jZSIsImRhdGEiLCJk''@;'; put 'put ''YXRlIiwiZGF0aW5nIiwiZGF0c3VuIiwiZGF5IiwiZGNsayIsImRkcyIsImRlYWwiLCJkZWFsZXIiLCJkZWFscyIsImRlZ3JlZSIsImRlbGl2ZXJ5IiwiZGVsbCIsImRlbG9pdHRlIiwiZGVsdGEiLCJkZW1vY3JhdCIsImRlbnRhbCIsImRlbnRpc3QiLCJkZXNpIiwiZGVzaWduIiwiZGV2Iiwi''@;'; put 'put ''ZGhsIiwiZGlhbW9uZHMiLCJkaWV0IiwiZGlnaXRhbCIsImRpcmVjdCIsImRpcmVjdG9yeSIsImRpc2NvdW50IiwiZGlzY292ZXIiLCJkaXNoIiwiZGl5IiwiZG5wIiwiZG9jcyIsImRvY3RvciIsImRvZyIsImRvbWFpbnMiLCJkb3QiLCJkb3dubG9hZCIsImRyaXZlIiwiZHR2IiwiZHViYWki''@;'; put 'put ''LCJkdW5sb3AiLCJkdXBvbnQiLCJkdXJiYW4iLCJkdmFnIiwiZHZyIiwiZWFydGgiLCJlYXQiLCJlY28iLCJlZGVrYSIsImVkdWNhdGlvbiIsImVtYWlsIiwiZW1lcmNrIiwiZW5lcmd5IiwiZW5naW5lZXIiLCJlbmdpbmVlcmluZyIsImVudGVycHJpc2VzIiwiZXBzb24iLCJlcXVpcG1lbnQi''@;'; put 'put ''LCJlcmljc3NvbiIsImVybmkiLCJlc3EiLCJlc3RhdGUiLCJldXJvdmlzaW9uIiwiZXVzIiwiZXZlbnRzIiwiZXhjaGFuZ2UiLCJleHBlcnQiLCJleHBvc2VkIiwiZXhwcmVzcyIsImV4dHJhc3BhY2UiLCJmYWdlIiwiZmFpbCIsImZhaXJ3aW5kcyIsImZhaXRoIiwiZmFtaWx5IiwiZmFuIiwi''@;'; put 'put ''ZmFucyIsImZhcm0iLCJmYXJtZXJzIiwiZmFzaGlvbiIsImZhc3QiLCJmZWRleCIsImZlZWRiYWNrIiwiZmVycmFyaSIsImZlcnJlcm8iLCJmaWRlbGl0eSIsImZpZG8iLCJmaWxtIiwiZmluYWwiLCJmaW5hbmNlIiwiZmluYW5jaWFsIiwiZmlyZSIsImZpcmVzdG9uZSIsImZpcm1kYWxlIiwi''@;'; put 'put ''ZmlzaCIsImZpc2hpbmciLCJmaXQiLCJmaXRuZXNzIiwiZmxpY2tyIiwiZmxpZ2h0cyIsImZsaXIiLCJmbG9yaXN0IiwiZmxvd2VycyIsImZseSIsImZvbyIsImZvb2QiLCJmb290YmFsbCIsImZvcmQiLCJmb3JleCIsImZvcnNhbGUiLCJmb3J1bSIsImZvdW5kYXRpb24iLCJmb3giLCJmcmVl''@;'; put 'put ''IiwiZnJlc2VuaXVzIiwiZnJsIiwiZnJvZ2FucyIsImZyb250aWVyIiwiZnRyIiwiZnVqaXRzdSIsImZ1biIsImZ1bmQiLCJmdXJuaXR1cmUiLCJmdXRib2wiLCJmeWkiLCJnYWwiLCJnYWxsZXJ5IiwiZ2FsbG8iLCJnYWxsdXAiLCJnYW1lIiwiZ2FtZXMiLCJnYXAiLCJnYXJkZW4iLCJnYXki''@;'; put 'put ''LCJnYml6IiwiZ2RuIiwiZ2VhIiwiZ2VudCIsImdlbnRpbmciLCJnZW9yZ2UiLCJnZ2VlIiwiZ2lmdCIsImdpZnRzIiwiZ2l2ZXMiLCJnaXZpbmciLCJnbGFzcyIsImdsZSIsImdsb2JhbCIsImdsb2JvIiwiZ21haWwiLCJnbWJoIiwiZ21vIiwiZ214IiwiZ29kYWRkeSIsImdvbGQiLCJnb2xk''@;'; put 'put ''cG9pbnQiLCJnb2xmIiwiZ29vIiwiZ29vZHllYXIiLCJnb29nIiwiZ29vZ2xlIiwiZ29wIiwiZ290IiwiZ3JhaW5nZXIiLCJncmFwaGljcyIsImdyYXRpcyIsImdyZWVuIiwiZ3JpcGUiLCJncm9jZXJ5IiwiZ3JvdXAiLCJndWNjaSIsImd1Z2UiLCJndWlkZSIsImd1aXRhcnMiLCJndXJ1Iiwi''@;'; put 'put ''aGFpciIsImhhbWJ1cmciLCJoYW5nb3V0IiwiaGF1cyIsImhibyIsImhkZmMiLCJoZGZjYmFuayIsImhlYWx0aCIsImhlYWx0aGNhcmUiLCJoZWxwIiwiaGVsc2lua2kiLCJoZXJlIiwiaGVybWVzIiwiaGlwaG9wIiwiaGlzYW1pdHN1IiwiaGl0YWNoaSIsImhpdiIsImhrdCIsImhvY2tleSIs''@;'; put 'put ''ImhvbGRpbmdzIiwiaG9saWRheSIsImhvbWVkZXBvdCIsImhvbWVnb29kcyIsImhvbWVzIiwiaG9tZXNlbnNlIiwiaG9uZGEiLCJob3JzZSIsImhvc3BpdGFsIiwiaG9zdCIsImhvc3RpbmciLCJob3QiLCJob3RlbHMiLCJob3RtYWlsIiwiaG91c2UiLCJob3ciLCJoc2JjIiwiaHVnaGVzIiwi''@;'; put 'put ''aHlhdHQiLCJoeXVuZGFpIiwiaWJtIiwiaWNiYyIsImljZSIsImljdSIsImllZWUiLCJpZm0iLCJpa2FubyIsImltYW1hdCIsImltZGIiLCJpbW1vIiwiaW1tb2JpbGllbiIsImluYyIsImluZHVzdHJpZXMiLCJpbmZpbml0aSIsImluZyIsImluayIsImluc3RpdHV0ZSIsImluc3VyYW5jZSIs''@;'; put 'put ''Imluc3VyZSIsImludGVybmF0aW9uYWwiLCJpbnR1aXQiLCJpbnZlc3RtZW50cyIsImlwaXJhbmdhIiwiaXJpc2giLCJpc21haWxpIiwiaXN0IiwiaXN0YW5idWwiLCJpdGF1IiwiaXR2IiwiamFndWFyIiwiamF2YSIsImpjYiIsImplZXAiLCJqZXR6dCIsImpld2VscnkiLCJqaW8iLCJqbGwi''@;'; put 'put ''LCJqbXAiLCJqbmoiLCJqb2J1cmciLCJqb3QiLCJqb3kiLCJqcG1vcmdhbiIsImpwcnMiLCJqdWVnb3MiLCJqdW5pcGVyIiwia2F1ZmVuIiwia2RkaSIsImtlcnJ5aG90ZWxzIiwia2Vycnlsb2dpc3RpY3MiLCJrZXJyeXByb3BlcnRpZXMiLCJrZmgiLCJraWEiLCJraWRzIiwia2ltIiwia2lu''@;'; put 'put ''ZGxlIiwia2l0Y2hlbiIsImtpd2kiLCJrb2VsbiIsImtvbWF0c3UiLCJrb3NoZXIiLCJrcG1nIiwia3BuIiwia3JkIiwia3JlZCIsImt1b2tncm91cCIsImt5b3RvIiwibGFjYWl4YSIsImxhbWJvcmdoaW5pIiwibGFtZXIiLCJsYW5jYXN0ZXIiLCJsYW5kIiwibGFuZHJvdmVyIiwibGFueGVz''@;'; put 'put ''cyIsImxhc2FsbGUiLCJsYXQiLCJsYXRpbm8iLCJsYXRyb2JlIiwibGF3IiwibGF3eWVyIiwibGRzIiwibGVhc2UiLCJsZWNsZXJjIiwibGVmcmFrIiwibGVnYWwiLCJsZWdvIiwibGV4dXMiLCJsZ2J0IiwibGlkbCIsImxpZmUiLCJsaWZlaW5zdXJhbmNlIiwibGlmZXN0eWxlIiwibGlnaHRp''@;'; put 'put ''bmciLCJsaWtlIiwibGlsbHkiLCJsaW1pdGVkIiwibGltbyIsImxpbmNvbG4iLCJsaW5rIiwibGlwc3kiLCJsaXZlIiwibGl2aW5nIiwibGxjIiwibGxwIiwibG9hbiIsImxvYW5zIiwibG9ja2VyIiwibG9jdXMiLCJsb2wiLCJsb25kb24iLCJsb3R0ZSIsImxvdHRvIiwibG92ZSIsImxwbCIs''@;'; put 'put ''ImxwbGZpbmFuY2lhbCIsImx0ZCIsImx0ZGEiLCJsdW5kYmVjayIsImx1eGUiLCJsdXh1cnkiLCJtYWRyaWQiLCJtYWlmIiwibWFpc29uIiwibWFrZXVwIiwibWFuIiwibWFuYWdlbWVudCIsIm1hbmdvIiwibWFwIiwibWFya2V0IiwibWFya2V0aW5nIiwibWFya2V0cyIsIm1hcnJpb3R0Iiwi''@;'; put 'put ''bWFyc2hhbGxzIiwibWF0dGVsIiwibWJhIiwibWNraW5zZXkiLCJtZWQiLCJtZWRpYSIsIm1lZXQiLCJtZWxib3VybmUiLCJtZW1lIiwibWVtb3JpYWwiLCJtZW4iLCJtZW51IiwibWVyY2siLCJtZXJja21zZCIsIm1pYW1pIiwibWljcm9zb2Z0IiwibWluaSIsIm1pbnQiLCJtaXQiLCJtaXRz''@;'; put 'put ''dWJpc2hpIiwibWxiIiwibWxzIiwibW1hIiwibW9iaWxlIiwibW9kYSIsIm1vZSIsIm1vaSIsIm1vbSIsIm1vbmFzaCIsIm1vbmV5IiwibW9uc3RlciIsIm1vcm1vbiIsIm1vcnRnYWdlIiwibW9zY293IiwibW90byIsIm1vdG9yY3ljbGVzIiwibW92IiwibW92aWUiLCJtc2QiLCJtdG4iLCJt''@;'; put 'put ''dHIiLCJtdXNpYyIsIm5hYiIsIm5hZ295YSIsIm5hdnkiLCJuYmEiLCJuZWMiLCJuZXRiYW5rIiwibmV0ZmxpeCIsIm5ldHdvcmsiLCJuZXVzdGFyIiwibmV3IiwibmV3cyIsIm5leHQiLCJuZXh0ZGlyZWN0IiwibmV4dXMiLCJuZmwiLCJuZ28iLCJuaGsiLCJuaWNvIiwibmlrZSIsIm5pa29u''@;'; put 'put ''IiwibmluamEiLCJuaXNzYW4iLCJuaXNzYXkiLCJub2tpYSIsIm5vcnRvbiIsIm5vdyIsIm5vd3J1eiIsIm5vd3R2IiwibnJhIiwibnJ3IiwibnR0IiwibnljIiwib2JpIiwib2JzZXJ2ZXIiLCJvZmZpY2UiLCJva2luYXdhIiwib2xheWFuIiwib2xheWFuZ3JvdXAiLCJvbGxvIiwib21lZ2Ei''@;'; put 'put ''LCJvbmUiLCJvbmciLCJvbmwiLCJvbmxpbmUiLCJvb28iLCJvcGVuIiwib3JhY2xlIiwib3JhbmdlIiwib3JnYW5pYyIsIm9yaWdpbnMiLCJvc2FrYSIsIm90c3VrYSIsIm90dCIsIm92aCIsInBhZ2UiLCJwYW5hc29uaWMiLCJwYXJpcyIsInBhcnMiLCJwYXJ0bmVycyIsInBhcnRzIiwicGFy''@;'; put 'put ''dHkiLCJwYXkiLCJwY2N3IiwicGV0IiwicGZpemVyIiwicGhhcm1hY3kiLCJwaGQiLCJwaGlsaXBzIiwicGhvbmUiLCJwaG90byIsInBob3RvZ3JhcGh5IiwicGhvdG9zIiwicGh5c2lvIiwicGljcyIsInBpY3RldCIsInBpY3R1cmVzIiwicGlkIiwicGluIiwicGluZyIsInBpbmsiLCJwaW9u''@;'; put 'put ''ZWVyIiwicGl6emEiLCJwbGFjZSIsInBsYXkiLCJwbGF5c3RhdGlvbiIsInBsdW1iaW5nIiwicGx1cyIsInBuYyIsInBvaGwiLCJwb2tlciIsInBvbGl0aWUiLCJwb3JuIiwicHJhbWVyaWNhIiwicHJheGkiLCJwcmVzcyIsInByaW1lIiwicHJvZCIsInByb2R1Y3Rpb25zIiwicHJvZiIsInBy''@;'; put 'put ''b2dyZXNzaXZlIiwicHJvbW8iLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm90ZWN0aW9uIiwicHJ1IiwicHJ1ZGVudGlhbCIsInB1YiIsInB3YyIsInFwb24iLCJxdWViZWMiLCJxdWVzdCIsInJhY2luZyIsInJhZGlvIiwicmVhZCIsInJlYWxlc3RhdGUiLCJyZWFsdG9yIiwicmVhbHR5''@;'; put 'put ''IiwicmVjaXBlcyIsInJlZCIsInJlZHN0b25lIiwicmVkdW1icmVsbGEiLCJyZWhhYiIsInJlaXNlIiwicmVpc2VuIiwicmVpdCIsInJlbGlhbmNlIiwicmVuIiwicmVudCIsInJlbnRhbHMiLCJyZXBhaXIiLCJyZXBvcnQiLCJyZXB1YmxpY2FuIiwicmVzdCIsInJlc3RhdXJhbnQiLCJyZXZp''@;'; put 'put ''ZXciLCJyZXZpZXdzIiwicmV4cm90aCIsInJpY2giLCJyaWNoYXJkbGkiLCJyaWNvaCIsInJpbCIsInJpbyIsInJpcCIsInJvY2tzIiwicm9kZW8iLCJyb2dlcnMiLCJyb29tIiwicnN2cCIsInJ1Z2J5IiwicnVociIsInJ1biIsInJ3ZSIsInJ5dWt5dSIsInNhYXJsYW5kIiwic2FmZSIsInNh''@;'; put 'put ''ZmV0eSIsInNha3VyYSIsInNhbGUiLCJzYWxvbiIsInNhbXNjbHViIiwic2Ftc3VuZyIsInNhbmR2aWsiLCJzYW5kdmlrY29yb21hbnQiLCJzYW5vZmkiLCJzYXAiLCJzYXJsIiwic2FzIiwic2F2ZSIsInNheG8iLCJzYmkiLCJzYnMiLCJzY2IiLCJzY2hhZWZmbGVyIiwic2NobWlkdCIsInNj''@;'; put 'put ''aG9sYXJzaGlwcyIsInNjaG9vbCIsInNjaHVsZSIsInNjaHdhcnoiLCJzY2llbmNlIiwic2NvdCIsInNlYXJjaCIsInNlYXQiLCJzZWN1cmUiLCJzZWN1cml0eSIsInNlZWsiLCJzZWxlY3QiLCJzZW5lciIsInNlcnZpY2VzIiwic2V2ZW4iLCJzZXciLCJzZXgiLCJzZXh5Iiwic2ZyIiwic2hh''@;'; put 'put ''bmdyaWxhIiwic2hhcnAiLCJzaGVsbCIsInNoaWEiLCJzaGlrc2hhIiwic2hvZXMiLCJzaG9wIiwic2hvcHBpbmciLCJzaG91amkiLCJzaG93Iiwic2lsayIsInNpbmEiLCJzaW5nbGVzIiwic2l0ZSIsInNraSIsInNraW4iLCJza3kiLCJza3lwZSIsInNsaW5nIiwic21hcnQiLCJzbWlsZSIs''@;'; put 'put ''InNuY2YiLCJzb2NjZXIiLCJzb2NpYWwiLCJzb2Z0YmFuayIsInNvZnR3YXJlIiwic29odSIsInNvbGFyIiwic29sdXRpb25zIiwic29uZyIsInNvbnkiLCJzb3kiLCJzcGEiLCJzcGFjZSIsInNwb3J0Iiwic3BvdCIsInNybCIsInN0YWRhIiwic3RhcGxlcyIsInN0YXIiLCJzdGF0ZWJhbmsi''@;'; put 'put ''LCJzdGF0ZWZhcm0iLCJzdGMiLCJzdGNncm91cCIsInN0b2NraG9sbSIsInN0b3JhZ2UiLCJzdG9yZSIsInN0cmVhbSIsInN0dWRpbyIsInN0dWR5Iiwic3R5bGUiLCJzdWNrcyIsInN1cHBsaWVzIiwic3VwcGx5Iiwic3VwcG9ydCIsInN1cmYiLCJzdXJnZXJ5Iiwic3V6dWtpIiwic3dhdGNo''@;'; put 'put ''Iiwic3dpc3MiLCJzeWRuZXkiLCJzeXN0ZW1zIiwidGFiIiwidGFpcGVpIiwidGFsayIsInRhb2JhbyIsInRhcmdldCIsInRhdGFtb3RvcnMiLCJ0YXRhciIsInRhdHRvbyIsInRheCIsInRheGkiLCJ0Y2kiLCJ0ZGsiLCJ0ZWFtIiwidGVjaCIsInRlY2hub2xvZ3kiLCJ0ZW1hc2VrIiwidGVu''@;'; put 'put ''bmlzIiwidGV2YSIsInRoZCIsInRoZWF0ZXIiLCJ0aGVhdHJlIiwidGlhYSIsInRpY2tldHMiLCJ0aWVuZGEiLCJ0aXBzIiwidGlyZXMiLCJ0aXJvbCIsInRqbWF4eCIsInRqeCIsInRrbWF4eCIsInRtYWxsIiwidG9kYXkiLCJ0b2t5byIsInRvb2xzIiwidG9wIiwidG9yYXkiLCJ0b3NoaWJh''@;'; put 'put ''IiwidG90YWwiLCJ0b3VycyIsInRvd24iLCJ0b3lvdGEiLCJ0b3lzIiwidHJhZGUiLCJ0cmFkaW5nIiwidHJhaW5pbmciLCJ0cmF2ZWwiLCJ0cmF2ZWxlcnMiLCJ0cmF2ZWxlcnNpbnN1cmFuY2UiLCJ0cnVzdCIsInRydiIsInR1YmUiLCJ0dWkiLCJ0dW5lcyIsInR1c2h1IiwidHZzIiwidWJh''@;'; put 'put ''bmsiLCJ1YnMiLCJ1bmljb20iLCJ1bml2ZXJzaXR5IiwidW5vIiwidW9sIiwidXBzIiwidmFjYXRpb25zIiwidmFuYSIsInZhbmd1YXJkIiwidmVnYXMiLCJ2ZW50dXJlcyIsInZlcmlzaWduIiwidmVyc2ljaGVydW5nIiwidmV0IiwidmlhamVzIiwidmlkZW8iLCJ2aWciLCJ2aWtpbmciLCJ2''@;'; put 'put ''aWxsYXMiLCJ2aW4iLCJ2aXAiLCJ2aXJnaW4iLCJ2aXNhIiwidmlzaW9uIiwidml2YSIsInZpdm8iLCJ2bGFhbmRlcmVuIiwidm9ka2EiLCJ2b2x2byIsInZvdGUiLCJ2b3RpbmciLCJ2b3RvIiwidm95YWdlIiwid2FsZXMiLCJ3YWxtYXJ0Iiwid2FsdGVyIiwid2FuZyIsIndhbmdnb3UiLCJ3''@;'; put 'put ''YXRjaCIsIndhdGNoZXMiLCJ3ZWF0aGVyIiwid2VhdGhlcmNoYW5uZWwiLCJ3ZWJjYW0iLCJ3ZWJlciIsIndlYnNpdGUiLCJ3ZWQiLCJ3ZWRkaW5nIiwid2VpYm8iLCJ3ZWlyIiwid2hvc3dobyIsIndpZW4iLCJ3aWtpIiwid2lsbGlhbWhpbGwiLCJ3aW4iLCJ3aW5kb3dzIiwid2luZSIsIndp''@;'; put 'put ''bm5lcnMiLCJ3bWUiLCJ3b2x0ZXJza2x1d2VyIiwid29vZHNpZGUiLCJ3b3JrIiwid29ya3MiLCJ3b3JsZCIsIndvdyIsInd0YyIsInd0ZiIsInhib3giLCJ4ZXJveCIsInhpaHVhbiIsInhpbiIsIlx1MDkxNVx1MDk0OVx1MDkyZSIsIlx1MzBiYlx1MzBmY1x1MzBlYiIsIlx1NGY1Ylx1NWM3''@;'; put 'put ''MSIsIlx1NjE0OFx1NTU4NCIsIlx1OTZjNlx1NTZlMiIsIlx1NTcyOFx1N2ViZiIsIlx1NzBiOVx1NzcwYiIsIlx1MGUwNFx1MGUyZFx1MGUyMSIsIlx1NTE2Ylx1NTM2NiIsIlx1MDY0NVx1MDY0OFx1MDY0Mlx1MDYzOSIsIlx1NTE2Y1x1NzZjYSIsIlx1NTE2Y1x1NTNmOCIsIlx1OTk5OVx1''@;'; put 'put ''NjgzY1x1OTFjY1x1NjJjOSIsIlx1N2Y1MVx1N2FkOSIsIlx1NzlmYlx1NTJhOCIsIlx1NjIxMVx1NzIzMVx1NGY2MCIsIlx1MDQzY1x1MDQzZVx1MDQ0MVx1MDQzYVx1MDQzMlx1MDQzMCIsIlx1MDQzYVx1MDQzMFx1MDQ0Mlx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYSIsIlx1MDQzZVx1MDQz''@;'; put 'put ''ZFx1MDQzYlx1MDQzMFx1MDQzOVx1MDQzZCIsIlx1MDQ0MVx1MDQzMFx1MDQzOVx1MDQ0MiIsIlx1ODA1NFx1OTAxYSIsIlx1MDVlN1x1MDVkNVx1MDVkZCIsIlx1NjVmNlx1NWMxYSIsIlx1NWZhZVx1NTM1YSIsIlx1NmRlMVx1OWE2Y1x1OTUyMSIsIlx1MzBkNVx1MzBhMVx1MzBjM1x1MzBi''@;'; put 'put ''N1x1MzBlN1x1MzBmMyIsIlx1MDQzZVx1MDQ0MFx1MDQzMyIsIlx1MDkyOFx1MDk0N1x1MDkxZiIsIlx1MzBiOVx1MzBjOFx1MzBhMiIsIlx1MzBhMlx1MzBkZVx1MzBiZVx1MzBmMyIsIlx1YzBiY1x1YzEzMSIsIlx1NTU0Nlx1NjgwNyIsIlx1NTU0Nlx1NWU5NyIsIlx1NTU0Nlx1NTdjZSIs''@;'; put 'put ''Ilx1MDQzNFx1MDQzNVx1MDQ0Mlx1MDQzOCIsIlx1MzBkZFx1MzBhNFx1MzBmM1x1MzBjOCIsIlx1NjViMFx1OTVmYiIsIlx1NWJiNlx1OTZmYiIsIlx1MDY0M1x1MDY0OFx1MDY0NSIsIlx1NGUyZFx1NjU4N1x1N2Y1MSIsIlx1NGUyZFx1NGZlMSIsIlx1NWEzMVx1NGU1MCIsIlx1OGMzN1x1''@;'; put 'put ''NmI0YyIsIlx1OTZmYlx1OGEwYVx1NzZjOFx1NzlkMSIsIlx1OGQyZFx1NzI2OSIsIlx1MzBhZlx1MzBlOVx1MzBhNlx1MzBjOSIsIlx1OTAxYVx1OGNhOSIsIlx1N2Y1MVx1NWU5NyIsIlx1MDkzOFx1MDkwMlx1MDkxN1x1MDkyMFx1MDkyOCIsIlx1OTkxMFx1NTM4NSIsIlx1N2Y1MVx1N2Vk''@;'; put 'put ''YyIsIlx1MDQzYVx1MDQzZVx1MDQzYyIsIlx1NGU5YVx1OWE2Y1x1OTAwYSIsIlx1OThkZlx1NTRjMSIsIlx1OThkZVx1NTIyOVx1NmQ2NiIsIlx1NjI0Ylx1NjczYSIsIlx1MDYyN1x1MDYzMVx1MDYyN1x1MDY0NVx1MDY0M1x1MDY0OCIsIlx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NFx1MDY0''@;'; put 'put ''YVx1MDYyN1x1MDY0NiIsIlx1MDYyOFx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIsIlx1MDYyN1x1MDYyOFx1MDY0OFx1MDYzOFx1MDYyOFx1MDY0YSIsIlx1MDY0M1x1MDYyN1x1MDYyYlx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0MyIsIlx1MDY0N1x1MDY0NVx1MDYzMVx1MDYyN1x1MDY0NyIs''@;'; put 'put ''Ilx1YjJmN1x1Y2VmNCIsIlx1NjUzZlx1NWU5YyIsIlx1MDYzNFx1MDYyOFx1MDY0M1x1MDYyOSIsIlx1MDYyOFx1MDY0YVx1MDYyYVx1MDY0MyIsIlx1MDYzOVx1MDYzMVx1MDYyOCIsIlx1NjczYVx1Njc4NCIsIlx1N2VjNFx1N2VjN1x1NjczYVx1Njc4NCIsIlx1NTA2NVx1NWViNyIsIlx1''@;'; put 'put ''NjJkYlx1ODA1OCIsIlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1NTkyN1x1NjJmZiIsIlx1MzA3Zlx1MzA5M1x1MzA2YSIsIlx1MzBiMFx1MzBmY1x1MzBiMFx1MzBlYiIsIlx1NGUxNlx1NzU0YyIsIlx1NjZmOFx1N2M0ZCIsIlx1N2Y1MVx1NTc0MCIsIlx1YjJmN1x1YjEzNyIsIlx1MzBiM1x1''@;'; put 'put ''MzBlMCIsIlx1NTkyOVx1NGUzYlx1NjU1OSIsIlx1NmUzOFx1NjIwZiIsInZlcm1ceGY2Z2Vuc2JlcmF0ZXIiLCJ2ZXJtXHhmNmdlbnNiZXJhdHVuZyIsIlx1NGYwMVx1NGUxYSIsIlx1NGZlMVx1NjA2ZiIsIlx1NTYwOVx1OTFjY1x1NTkyN1x1OTE1Mlx1NWU5NyIsIlx1NTYwOVx1OTFjYyIs''@;'; put 'put ''Ilx1NWU3Zlx1NGUxYyIsIlx1NjUzZlx1NTJhMSIsInh5eiIsInlhY2h0cyIsInlhaG9vIiwieWFtYXh1biIsInlhbmRleCIsInlvZG9iYXNoaSIsInlvZ2EiLCJ5b2tvaGFtYSIsInlvdSIsInlvdXR1YmUiLCJ5dW4iLCJ6YXBwb3MiLCJ6YXJhIiwiemVybyIsInppcCIsInpvbmUiLCJ6dWVy''@;'; put 'put ''aWNoIiwiY28ua3JkIiwiZWR1LmtyZCIsImFydC5wbCIsImdsaXdpY2UucGwiLCJrcmFrb3cucGwiLCJwb3puYW4ucGwiLCJ3cm9jLnBsIiwiemFrb3BhbmUucGwiLCJsaWIuZGUudXMiLCIxMmNoYXJzLmRldiIsIjEyY2hhcnMuaXQiLCIxMmNoYXJzLnBybyIsImNjLnVhIiwiaW5mLnVhIiwi''@;'; put 'put ''bHRkLnVhIiwiNjExLnRvIiwiYTJob3N0ZWQuY29tIiwiY3BzZXJ2ZXIuY29tIiwiYWFhLnZvZGthIiwiKi5vbi1hY29ybi5pbyIsImFjdGl2ZXRyYWlsLmJpeiIsImFkYXB0YWJsZS5hcHAiLCJhZG9iZWFlbWNsb3VkLmNvbSIsIiouZGV2LmFkb2JlYWVtY2xvdWQuY29tIiwiYWVtLmxpdmUi''@;'; put 'put ''LCJobHgubGl2ZSIsImFkb2JlYWVtY2xvdWQubmV0IiwiYWVtLnBhZ2UiLCJobHgucGFnZSIsImhseDMucGFnZSIsImFkb2JlaW8tc3RhdGljLm5ldCIsImFkb2JlaW9ydW50aW1lLm5ldCIsImFmcmljYS5jb20iLCJiZWVwLnBsIiwiYWlya2l0YXBwcy5jb20iLCJhaXJraXRhcHBzLWF1LmNv''@;'; put 'put ''bSIsImFpcmtpdGFwcHMuZXUiLCJhaXZlbmNsb3VkLmNvbSIsImFrYWRucy5uZXQiLCJha2FtYWkubmV0IiwiYWthbWFpLXN0YWdpbmcubmV0IiwiYWthbWFpZWRnZS5uZXQiLCJha2FtYWllZGdlLXN0YWdpbmcubmV0IiwiYWthbWFpaGQubmV0IiwiYWthbWFpaGQtc3RhZ2luZy5uZXQiLCJh''@;'; put 'put ''a2FtYWlvcmlnaW4ubmV0IiwiYWthbWFpb3JpZ2luLXN0YWdpbmcubmV0IiwiYWthbWFpemVkLm5ldCIsImFrYW1haXplZC1zdGFnaW5nLm5ldCIsImVkZ2VrZXkubmV0IiwiZWRnZWtleS1zdGFnaW5nLm5ldCIsImVkZ2VzdWl0ZS5uZXQiLCJlZGdlc3VpdGUtc3RhZ2luZy5uZXQiLCJiYXJz''@;'; put 'put ''eS5jYSIsIiouY29tcHV0ZS5lc3RhdGUiLCIqLmFsY2VzLm5ldHdvcmsiLCJrYXNzZXJ2ZXIuY29tIiwiYWx0ZXJ2aXN0YS5vcmciLCJhbHdheXNkYXRhLm5ldCIsIm15YW1hemUubmV0IiwiZXhlY3V0ZS1hcGkuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZXhlY3V0ZS1hcGkuY24t''@;'; put 'put ''bm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImV4ZWN1dGUtYXBpLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFw''@;'; put 'put ''LW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAt''@;'; put 'put ''c291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUt''@;'; put 'put ''YXBpLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFw''@;'; put 'put ''aS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdl''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkubWUtY2VudHJhbC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJleGVjdXRlLWFwaS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiY2xv''@;'; put 'put ''dWRmcm9udC5uZXQiLCJhdXRoLmFmLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhlYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwi''@;'; put 'put ''YXV0aC5hcC1ub3J0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRo''@;'; put 'put ''ZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTQuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmNhLWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguY2Etd2VzdC0xLmFtYXpv''@;'; put 'put ''bmNvZ25pdG8uY29tIiwiYXV0aC5ldS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LWNlbnRyYWwtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtbm9ydGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1''@;'; put 'put ''dGguZXUtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdlc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguaWwtY2VudHJhbC0xLmFtYXpvbmNv''@;'; put 'put ''Z25pdG8uY29tIiwiYXV0aC5tZS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLm1lLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnNhLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBz''@;'; put 'put ''LnVzLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy1nb3Ytd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTEu''@;'; put 'put ''YW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiKi5jb21wdXRlLmFtYXpvbmF3cy5jb20uY24iLCIq''@;'; put 'put ''LmNvbXB1dGUuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS0xLmFtYXpvbmF3cy5jb20iLCJ1cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''LmNuIiwiZW1yc3R1ZGlvLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yYXBwdWktcHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcnN0dWRpby1wcm9k''@;'; put 'put ''LmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJhcHB1aS1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVt''@;'; put 'put ''cmFwcHVpLXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1u''@;'; put 'put ''b3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90''@;'; put 'put ''ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3Qt''@;'; put 'put ''My5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJlbXJzdHVk''@;'; put 'put ''aW8tcHJvZC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuY2EtY2VudHJhbC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtY2VudHJhbC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1''@;'; put 'put ''LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRp''@;'; put 'put ''by1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1y''@;'; put 'put ''YXBwdWktcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''ZW1ybm90ZWJvb2tzLXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTIuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0zLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJlbXJhcHB1aS1wcm9kLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QubWUtY2VudHJhbC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJv''@;'; put 'put ''ZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2Quc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8t''@;'; put 'put ''cHJvZC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWkt''@;'; put 'put ''cHJvZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5v''@;'; put 'put ''dGVib29rcy1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZ292LXdlc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtd2Vz''@;'; put 'put ''dC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIiouY24tbm9ydGgtMS5haXJmbG93''@;'; put 'put ''LmFtYXpvbmF3cy5jb20uY24iLCIqLmNuLW5vcnRod2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbS5jbiIsIiouYWYtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLWVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0xLmFpcmZsb3cuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1ub3J0aGVhc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aC0yLmFpcmZsb3cuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsIiouYXAtc291dGhlYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0zLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTQuYWlyZmxvdy5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiKi5jYS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5jYS13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1ub3J0''@;'; put 'put ''aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXNvdXRoLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTIuYWlyZmxvdy5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiKi5ldS13ZXN0LTMuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5pbC1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouc2Et''@;'; put 'put ''ZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0yLmFpcmZsb3cuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLmR1YWxzdGFjay5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY24t''@;'; put 'put ''bm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNjZXNzcG9pbnQuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtZGVwcmVjYXRlZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1vYmplY3QtbGFtYmRhLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMz''@;'; put 'put ''LXdlYnNpdGUuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuZHVhbHN0YWNrLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmNuLW5vcnRod2VzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtb2JqZWN0LWxhbWJkYS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMu''@;'; put 'put ''ZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy1hY2Nlc3Nwb2ludC5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My13ZWJzaXRlLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLW5vcnRo''@;'; put 'put ''ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAt''@;'; put 'put ''bm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFz''@;'; put 'put ''dC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMy5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTIu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1z''@;'; put 'put ''b3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5k''@;'; put 'put ''dWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNr''@;'; put 'put ''LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0''@;'; put 'put ''aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0''@;'; put 'put ''LWxhbWJkYS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEu''@;'; put 'put ''YXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLmFwLXNvdXRoZWFz''@;'; put 'put ''dC01LmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2lu''@;'; put 'put ''dC5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3Rh''@;'; put 'put ''Y2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMu''@;'; put 'put ''Y2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3Bv''@;'; put 'put ''aW50LmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jYS13''@;'; put 'put ''ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5jYS13ZXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLW9iamVjdC1sYW1iZGEuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LWNlbnRyYWwt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1j''@;'; put 'put ''ZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy13''@;'; put 'put ''ZWJzaXRlLmR1YWxzdGFjay5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMtYWNjZXNzcG9pbnQuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMi5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0yLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1''@;'; put 'put ''LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMi5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtYWNjZXNzcG9pbnQuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5pbC1jZW50cmFs''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRl''@;'; put 'put ''LmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''d2Vic2l0ZS5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2subWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNj''@;'; put 'put ''ZXNzcG9pbnQubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmFtYXpvbmF3cy5jb20iLCJzMy0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1l''@;'; put 'put ''YXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRo''@;'; put 'put ''ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWV4dGVybmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMtdXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy11cy1nb3Ytd2VzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJtcmFwLmFjY2Vzc3BvaW50LnMzLWdsb2JhbC5hbWF6b25hd3MuY29tIiwiczMtbWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi1lYXN0LTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInMzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRo''@;'; put 'put ''ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZWFzdC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnNhLWVhc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtb2JqZWN0LWxhbWJkYS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWVhc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFz''@;'; put 'put ''dC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBz''@;'; put 'put ''LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQu''@;'; put 'put ''ZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWdvdi1lYXN0LTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRh''@;'; put 'put ''LnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1n''@;'; put 'put ''b3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13''@;'; put 'put ''ZWJzaXRlLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLXdlc3Qt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtd2VzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3QtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1''@;'; put 'put ''YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50''@;'; put 'put ''LWZpcHMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdl''@;'; put 'put ''c3QtMi5hbWF6b25hd3MuY29tIiwibGFiZWxpbmcuYXAtbm9ydGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aGVhc3QtMS5zYWdl''@;'; put 'put ''bWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5ldS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsImxh''@;'; put 'put ''YmVsaW5nLmV1LXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYWYtc291dGgtMS5zYWdlbWFr''@;'; put 'put ''ZXIuYXdzIiwibm90ZWJvb2suYXAtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9ydGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJu''@;'; put 'put ''b3RlYm9vay5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNv''@;'; put 'put ''dXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtNC5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2Etd2VzdC0x''@;'; put 'put ''LnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLmNhLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1jZW50cmFsLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LW5vcnRoLTEuc2FnZW1ha2VyLmF3''@;'; put 'put ''cyIsIm5vdGVib29rLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS13ZXN0LTMu''@;'; put 'put ''c2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmlsLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2subWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5tZS1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5zYS1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5v''@;'; put 'put ''dGVib29rLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWdvdi1l''@;'; put 'put ''YXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZ292LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0''@;'; put 'put ''LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jbi1ub3J0aC0xLnNhZ2VtYWtlci5j''@;'; put 'put ''b20uY24iLCJub3RlYm9vay5jbi1ub3J0aHdlc3QtMS5zYWdlbWFrZXIuY29tLmNuIiwic3R1ZGlvLmFmLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFw''@;'; put 'put ''LW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVhc3QtMi5zYWdl''@;'; put 'put ''bWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtbm9ydGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1''@;'; put 'put ''LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8u''@;'; put 'put ''aWwtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnNhLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwi''@;'; put 'put ''c3R1ZGlvLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby1maXBzLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8tZmlwcy51cy1n''@;'; put 'put ''b3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY24tbm9ydGgtMS5zYWdlbWFrZXIuY29tLmNuIiwic3R1ZGlvLmNuLW5vcnRod2VzdC0xLnNhZ2VtYWtlci5jb20u''@;'; put 'put ''Y24iLCIqLmV4cGVyaW1lbnRzLnNhZ2VtYWtlci5hd3MiLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoLTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRp''@;'; put 'put ''Y3MtZ2F0ZXdheS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS51cy13ZXN0LTIuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsImFtcGxpZnlhcHAuY29tIiwiKi5hd3NhcHBydW5uZXIuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hZi1zb3V0aC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNz''@;'; put 'put ''ZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3Vk''@;'; put 'put ''OS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFz''@;'; put 'put ''dC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwidmZzLmNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0''@;'; put 'put ''aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmll''@;'; put 'put ''dy1hc3NldHMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUt''@;'; put 'put ''Y2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''IndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3Vk''@;'; put 'put ''OS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''dmZzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0''@;'; put 'put ''cy5hd3MtY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuc2EtZWFzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMt''@;'; put 'put ''ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZp''@;'; put 'put ''ZXctYXNzZXRzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLXdlc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJhd3NhcHBzLmNvbSIs''@;'; put 'put ''ImNuLW5vcnRoLTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImNuLW5vcnRod2VzdC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJlbGFzdGljYmVhbnN0YWxrLmNvbSIsImFmLXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1u''@;'; put 'put ''b3J0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTEuZWxhc3Rp''@;'; put 'put ''Y2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0zLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiY2EtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwi''@;'; put 'put ''ZXUtbm9ydGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20i''@;'; put 'put ''LCJpbC1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJtZS1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwic2EtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsu''@;'; put 'put ''Y29tIiwidXMtZ292LWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdvdi13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCIqLmVsYi5hbWF6b25hd3MuY29t''@;'; put 'put ''LmNuIiwiKi5lbGIuYW1hem9uYXdzLmNvbSIsImF3c2dsb2JhbGFjY2VsZXJhdG9yLmNvbSIsIioucHJpdmF0ZS5yZXBvc3QuYXdzIiwiZWVyby5vbmxpbmUiLCJlZXJvLXN0YWdlLm9ubGluZSIsImFwaWdlZS5pbyIsInBhbmVsLmRldiIsInNpaWl0ZXMuY29tIiwiYXBwc3BhY2Vob3N0ZWQu''@;'; put 'put ''Y29tIiwiYXBwc3BhY2V1c2VyY29udGVudC5jb20iLCJhcHB1ZG8ubmV0Iiwib24tYXB0aWJsZS5jb20iLCJmNS5zaSIsImFydmFuZWRnZS5pciIsInVzZXIuYXNlaW5ldC5uZS5qcCIsImd2LnZjIiwiZC5ndi52YyIsInVzZXIucGFydHkuZXVzIiwicGltaWVudGEub3JnIiwicG9pdnJvbi5v''@;'; put 'put ''cmciLCJwb3RhZ2VyLm9yZyIsInN3ZWV0cGVwcGVyLm9yZyIsIm15YXN1c3Rvci5jb20iLCJjZG4ucHJvZC5hdGxhc3NpYW4tZGV2Lm5ldCIsInRyYW5zbGF0ZWQucGFnZSIsIm15ZnJpdHoubGluayIsIm15ZnJpdHoubmV0Iiwib25hdnN0YWNrLm5ldCIsIiouYXdkZXYuY2EiLCIqLmFkdmlz''@;'; put 'put ''b3Iud3MiLCJlY29tbWVyY2Utc2hvcC5wbCIsImItZGF0YS5pbyIsImJhbGVuYS1kZXZpY2VzLmNvbSIsImJhc2UuZWMiLCJvZmZpY2lhbC5lYyIsImJ1eXNob3AuanAiLCJmYXNoaW9uc3RvcmUuanAiLCJoYW5kY3JhZnRlZC5qcCIsImthd2FpaXNob3AuanAiLCJzdXBlcnNhbGUuanAiLCJ0''@;'; put 'put ''aGVzaG9wLmpwIiwic2hvcHNlbGVjdC5uZXQiLCJiYXNlLnNob3AiLCJiZWFnbGVib2FyZC5pbyIsIiouYmVnZXQuYXBwIiwicGFnZXMuZ2F5IiwiYm5yLmxhIiwiYml0YnVja2V0LmlvIiwiYmxhY2tiYXVkY2RuLm5ldCIsIm9mLmplIiwiYmx1ZWJpdGUuaW8iLCJib29tbGEubmV0IiwiYm91''@;'; put 'put ''dGlyLmNvbSIsImJveGZ1c2UuaW8iLCJzcXVhcmU3LmNoIiwiYnBsYWNlZC5jb20iLCJicGxhY2VkLmRlIiwic3F1YXJlNy5kZSIsImJwbGFjZWQubmV0Iiwic3F1YXJlNy5uZXQiLCIqLnMuYnJhdmUuaW8iLCJzaG9wLmJyZW5kbHkuaHIiLCJzaG9wLmJyZW5kbHkucnMiLCJicm93c2Vyc2Fm''@;'; put 'put ''ZXR5bWFyay5pbyIsInJhZGlvLmFtIiwicmFkaW8uZm0iLCJ1azAuYmlndi5pbyIsImRoLmJ5dGVtYXJrLmNvLnVrIiwidm0uYnl0ZW1hcmsuY28udWsiLCJjYWZqcy5jb20iLCJjYW52YS1hcHBzLmNuIiwiKi5teS5jYW52YXNpdGUuY24iLCJjYW52YS1hcHBzLmNvbSIsIioubXkuY2FudmEu''@;'; put 'put ''c2l0ZSIsImRyci5hYyIsInV3dS5haSIsImNhcnJkLmNvIiwiY3JkLmNvIiwianUubXAiLCJhcGkuZ292LnVrIiwiY2RuNzctc3RvcmFnZS5jb20iLCJyc2MuY29udGVudHByb3h5OS5jeiIsInIuY2RuNzcubmV0IiwiY2RuNzctc3NsLm5ldCIsImMuY2RuNzcub3JnIiwicnNjLmNkbjc3Lm9y''@;'; put 'put ''ZyIsInNzbC5vcmlnaW4uY2RuNzctc2VjdXJlLm9yZyIsInphLmJ6IiwiYnIuY29tIiwiY24uY29tIiwiZGUuY29tIiwiZXUuY29tIiwianBuLmNvbSIsIm1leC5jb20iLCJydS5jb20iLCJzYS5jb20iLCJ1ay5jb20iLCJ1cy5jb20iLCJ6YS5jb20iLCJjb20uZGUiLCJnYi5uZXQiLCJodS5u''@;'; put 'put ''ZXQiLCJqcC5uZXQiLCJzZS5uZXQiLCJ1ay5uZXQiLCJhZS5vcmciLCJjb20uc2UiLCJjeC51YSIsImRpc2NvdXJzZS5ncm91cCIsImRpc2NvdXJzZS50ZWFtIiwiY2xlcmsuYXBwIiwiY2xlcmtzdGFnZS5hcHAiLCIqLmxjbC5kZXYiLCIqLmxjbHN0YWdlLmRldiIsIiouc3RnLmRldiIsIiou''@;'; put 'put ''c3Rnc3RhZ2UuZGV2IiwiY2xldmVyYXBwcy5jYyIsIiouc2VydmljZXMuY2xldmVyLWNsb3VkLmNvbSIsImNsZXZlcmFwcHMuaW8iLCJjbGV2ZXJhcHBzLnRlY2giLCJjbGlja3Jpc2luZy5uZXQiLCJjbG91ZG5zLmFzaWEiLCJjbG91ZG5zLmJlIiwiY2xvdWQtaXAuYml6IiwiY2xvdWRucy5i''@;'; put 'put ''aXoiLCJjbG91ZG5zLmNjIiwiY2xvdWRucy5jaCIsImNsb3VkbnMuY2wiLCJjbG91ZG5zLmNsdWIiLCJkbnNhYnIuY29tIiwiaXAtZGRucy5jb20iLCJjbG91ZG5zLmN4IiwiY2xvdWRucy5ldSIsImNsb3VkbnMuaW4iLCJjbG91ZG5zLmluZm8iLCJkZG5zLWlwLm5ldCIsImRucy1jbG91ZC5u''@;'; put 'put ''ZXQiLCJkbnMtZHluYW1pYy5uZXQiLCJjbG91ZG5zLm56IiwiY2xvdWRucy5vcmciLCJpcC1keW5hbWljLm9yZyIsImNsb3VkbnMucGgiLCJjbG91ZG5zLnBybyIsImNsb3VkbnMucHciLCJjbG91ZG5zLnVzIiwiYzY2Lm1lIiwiY2xvdWQ2Ni53cyIsImNsb3VkNjYuem9uZSIsImpkZXZjbG91''@;'; put 'put ''ZC5jb20iLCJ3cGRldmNsb3VkLmNvbSIsImNsb3VkYWNjZXNzLmhvc3QiLCJmcmVlc2l0ZS5ob3N0IiwiY2xvdWRhY2Nlc3MubmV0IiwiKi5jbG91ZGVyYS5zaXRlIiwiY2YtaXBmcy5jb20iLCJjbG91ZGZsYXJlLWlwZnMuY29tIiwidHJ5Y2xvdWRmbGFyZS5jb20iLCJwYWdlcy5kZXYiLCJy''@;'; put 'put ''Mi5kZXYiLCJ3b3JrZXJzLmRldiIsImNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmVhbnljYXN0Lm5ldCIsImNkbi5jbG91ZGZsYXJlY24ubmV0IiwiY2RuLmNsb3VkZmxhcmVnbG9iYWwubmV0IiwiY3VzdC5jbG91ZHNjYWxlLmNoIiwib2JqZWN0''@;'; put 'put ''cy5scGcuY2xvdWRzY2FsZS5jaCIsIm9iamVjdHMucm1hLmNsb3Vkc2NhbGUuY2giLCJ3bmV4dC5hcHAiLCJjbnB5LmdkbiIsIioub3RhcC5jbyIsImNvLmNhIiwiY28uY29tIiwiY29kZWJlcmcucGFnZSIsImNzYi5hcHAiLCJwcmV2aWV3LmNzYi5hcHAiLCJjby5ubCIsImNvLm5vIiwid2Vi''@;'; put 'put ''aG9zdGluZy5iZSIsImhvc3RpbmctY2x1c3Rlci5ubCIsImN0ZmNsb3VkLm5ldCIsImNvbnZleC5zaXRlIiwiYWMucnUiLCJlZHUucnUiLCJnb3YucnUiLCJpbnQucnUiLCJtaWwucnUiLCJ0ZXN0LnJ1IiwiZHluLmNvc2lkbnMuZGUiLCJkbnN1cGRhdGVyLmRlIiwiZHluYW1pc2NoZXMtZG5z''@;'; put 'put ''LmRlIiwiaW50ZXJuZXQtZG5zLmRlIiwibC1vLWctaS1uLmRlIiwiZHluYW1pYy1kbnMuaW5mbyIsImZlc3RlLWlwLm5ldCIsImtueC1zZXJ2ZXIubmV0Iiwic3RhdGljLWFjY2Vzcy5uZXQiLCJjcmFmdC5tZSIsInJlYWxtLmN6Iiwib24uY3Jpc3AuZW1haWwiLCIqLmNyeXB0b25vbWljLm5l''@;'; put 'put ''dCIsImN1cnYuZGV2IiwiY2ZvbGtzLnBsIiwiY3lvbi5saW5rIiwiY3lvbi5zaXRlIiwicGxhdGZvcm0wLmFwcCIsImZud2suc2l0ZSIsImZvbGlvbmV0d29yay5zaXRlIiwiYml6LmRrIiwiY28uZGsiLCJmaXJtLmRrIiwicmVnLmRrIiwic3RvcmUuZGsiLCJkeW5kbnMuZGFwcG5vZGUuaW8i''@;'; put 'put ''LCJidWlsdHdpdGhkYXJrLmNvbSIsImRhcmtsYW5nLmlvIiwiZGVtby5kYXRhZGV0ZWN0LmNvbSIsImluc3RhbmNlLmRhdGFkZXRlY3QuY29tIiwiZWRnZXN0YWNrLm1lIiwiZGF0dG9sb2NhbC5jb20iLCJkYXR0b3JlbGF5LmNvbSIsImRhdHRvd2ViLmNvbSIsIm15ZGF0dG8uY29tIiwiZGF0''@;'; put 'put ''dG9sb2NhbC5uZXQiLCJteWRhdHRvLm5ldCIsImRkbnNzLmRlIiwiZHluLmRkbnNzLmRlIiwiZHluZG5zLmRkbnNzLmRlIiwiZHluLWlwMjQuZGUiLCJkeW5kbnMxLmRlIiwiaG9tZS13ZWJzZXJ2ZXIuZGUiLCJkeW4uaG9tZS13ZWJzZXJ2ZXIuZGUiLCJteWhvbWUtc2VydmVyLmRlIiwiZGRu''@;'; put 'put ''c3Mub3JnIiwiZGViaWFuLm5ldCIsImRlZmluaW1hLmlvIiwiZGVmaW5pbWEubmV0IiwiZGVuby5kZXYiLCJkZW5vLXN0YWdpbmcuZGV2IiwiZGVkeW4uaW8iLCJkZXRhLmFwcCIsImRldGEuZGV2IiwiZGZpcm1hLnBsIiwiZGtvbnRvLnBsIiwieW91Mi5wbCIsIm9uZGlnaXRhbG9jZWFuLmFw''@;'; put 'put ''cCIsIiouZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSIsInVzLmtnIiwicnNzLm15LmlkIiwiZGloZXIuc29sdXRpb25zIiwiZGlzY29yZHNheXMuY29tIiwiZGlzY29yZHNlei5jb20iLCJqb3ppLmJpeiIsImRuc2hvbWUuZGUiLCJvbmxpbmUudGgiLCJzaG9wLnRoIiwiZHJheWRkbnMuY29tIiwi''@;'; put 'put ''c2hvcGFyZW5hLnBsIiwiZHJlYW1ob3N0ZXJzLmNvbSIsImR1cnVtaXMuY29tIiwibXlkcm9iby5jb20iLCJkcnVkLmlvIiwiZHJ1ZC51cyIsImR1Y2tkbnMub3JnIiwiZHkuZmkiLCJ0dW5rLm9yZyIsImR5bmRucy5iaXoiLCJmb3ItYmV0dGVyLmJpeiIsImZvci1tb3JlLmJpeiIsImZvci1z''@;'; put 'put ''b21lLmJpeiIsImZvci10aGUuYml6Iiwic2VsZmlwLmJpeiIsIndlYmhvcC5iaXoiLCJmdHBhY2Nlc3MuY2MiLCJnYW1lLXNlcnZlci5jYyIsIm15cGhvdG9zLmNjIiwic2NyYXBwaW5nLmNjIiwiYmxvZ2Rucy5jb20iLCJjZWNoaXJlLmNvbSIsImRuc2FsaWFzLmNvbSIsImRuc2Rvam8uY29t''@;'; put 'put ''IiwiZG9lc250ZXhpc3QuY29tIiwiZG9udGV4aXN0LmNvbSIsImRvb21kbnMuY29tIiwiZHluLW8tc2F1ci5jb20iLCJkeW5hbGlhcy5jb20iLCJkeW5kbnMtYXQtaG9tZS5jb20iLCJkeW5kbnMtYXQtd29yay5jb20iLCJkeW5kbnMtYmxvZy5jb20iLCJkeW5kbnMtZnJlZS5jb20iLCJkeW5k''@;'; put 'put ''bnMtaG9tZS5jb20iLCJkeW5kbnMtaXAuY29tIiwiZHluZG5zLW1haWwuY29tIiwiZHluZG5zLW9mZmljZS5jb20iLCJkeW5kbnMtcGljcy5jb20iLCJkeW5kbnMtcmVtb3RlLmNvbSIsImR5bmRucy1zZXJ2ZXIuY29tIiwiZHluZG5zLXdlYi5jb20iLCJkeW5kbnMtd2lraS5jb20iLCJkeW5k''@;'; put 'put ''bnMtd29yay5jb20iLCJlc3QtYS1sYS1tYWlzb24uY29tIiwiZXN0LWEtbGEtbWFzaW9uLmNvbSIsImVzdC1sZS1wYXRyb24uY29tIiwiZXN0LW1vbi1ibG9ndWV1ci5jb20iLCJmcm9tLWFrLmNvbSIsImZyb20tYWwuY29tIiwiZnJvbS1hci5jb20iLCJmcm9tLWNhLmNvbSIsImZyb20tY3Qu''@;'; put 'put ''Y29tIiwiZnJvbS1kYy5jb20iLCJmcm9tLWRlLmNvbSIsImZyb20tZmwuY29tIiwiZnJvbS1nYS5jb20iLCJmcm9tLWhpLmNvbSIsImZyb20taWEuY29tIiwiZnJvbS1pZC5jb20iLCJmcm9tLWlsLmNvbSIsImZyb20taW4uY29tIiwiZnJvbS1rcy5jb20iLCJmcm9tLWt5LmNvbSIsImZyb20t''@;'; put 'put ''bWEuY29tIiwiZnJvbS1tZC5jb20iLCJmcm9tLW1pLmNvbSIsImZyb20tbW4uY29tIiwiZnJvbS1tby5jb20iLCJmcm9tLW1zLmNvbSIsImZyb20tbXQuY29tIiwiZnJvbS1uYy5jb20iLCJmcm9tLW5kLmNvbSIsImZyb20tbmUuY29tIiwiZnJvbS1uaC5jb20iLCJmcm9tLW5qLmNvbSIsImZy''@;'; put 'put ''b20tbm0uY29tIiwiZnJvbS1udi5jb20iLCJmcm9tLW9oLmNvbSIsImZyb20tb2suY29tIiwiZnJvbS1vci5jb20iLCJmcm9tLXBhLmNvbSIsImZyb20tcHIuY29tIiwiZnJvbS1yaS5jb20iLCJmcm9tLXNjLmNvbSIsImZyb20tc2QuY29tIiwiZnJvbS10bi5jb20iLCJmcm9tLXR4LmNvbSIs''@;'; put 'put ''ImZyb20tdXQuY29tIiwiZnJvbS12YS5jb20iLCJmcm9tLXZ0LmNvbSIsImZyb20td2EuY29tIiwiZnJvbS13aS5jb20iLCJmcm9tLXd2LmNvbSIsImZyb20td3kuY29tIiwiZ2V0bXlpcC5jb20iLCJnb3RkbnMuY29tIiwiaG9iYnktc2l0ZS5jb20iLCJob21lbGludXguY29tIiwiaG9tZXVu''@;'; put 'put ''aXguY29tIiwiaWFtYWxsYW1hLmNvbSIsImlzLWEtYW5hcmNoaXN0LmNvbSIsImlzLWEtYmxvZ2dlci5jb20iLCJpcy1hLWJvb2trZWVwZXIuY29tIiwiaXMtYS1idWxscy1mYW4uY29tIiwiaXMtYS1jYXRlcmVyLmNvbSIsImlzLWEtY2hlZi5jb20iLCJpcy1hLWNvbnNlcnZhdGl2ZS5jb20i''@;'; put 'put ''LCJpcy1hLWNwYS5jb20iLCJpcy1hLWN1YmljbGUtc2xhdmUuY29tIiwiaXMtYS1kZW1vY3JhdC5jb20iLCJpcy1hLWRlc2lnbmVyLmNvbSIsImlzLWEtZG9jdG9yLmNvbSIsImlzLWEtZmluYW5jaWFsYWR2aXNvci5jb20iLCJpcy1hLWdlZWsuY29tIiwiaXMtYS1ncmVlbi5jb20iLCJpcy1h''@;'; put 'put ''LWd1cnUuY29tIiwiaXMtYS1oYXJkLXdvcmtlci5jb20iLCJpcy1hLWh1bnRlci5jb20iLCJpcy1hLWxhbmRzY2FwZXIuY29tIiwiaXMtYS1sYXd5ZXIuY29tIiwiaXMtYS1saWJlcmFsLmNvbSIsImlzLWEtbGliZXJ0YXJpYW4uY29tIiwiaXMtYS1sbGFtYS5jb20iLCJpcy1hLW11c2ljaWFu''@;'; put 'put ''LmNvbSIsImlzLWEtbmFzY2FyZmFuLmNvbSIsImlzLWEtbnVyc2UuY29tIiwiaXMtYS1wYWludGVyLmNvbSIsImlzLWEtcGVyc29uYWx0cmFpbmVyLmNvbSIsImlzLWEtcGhvdG9ncmFwaGVyLmNvbSIsImlzLWEtcGxheWVyLmNvbSIsImlzLWEtcmVwdWJsaWNhbi5jb20iLCJpcy1hLXJvY2tz''@;'; put 'put ''dGFyLmNvbSIsImlzLWEtc29jaWFsaXN0LmNvbSIsImlzLWEtc3R1ZGVudC5jb20iLCJpcy1hLXRlYWNoZXIuY29tIiwiaXMtYS10ZWNoaWUuY29tIiwiaXMtYS10aGVyYXBpc3QuY29tIiwiaXMtYW4tYWNjb3VudGFudC5jb20iLCJpcy1hbi1hY3Rvci5jb20iLCJpcy1hbi1hY3RyZXNzLmNv''@;'; put 'put ''bSIsImlzLWFuLWFuYXJjaGlzdC5jb20iLCJpcy1hbi1hcnRpc3QuY29tIiwiaXMtYW4tZW5naW5lZXIuY29tIiwiaXMtYW4tZW50ZXJ0YWluZXIuY29tIiwiaXMtY2VydGlmaWVkLmNvbSIsImlzLWdvbmUuY29tIiwiaXMtaW50by1hbmltZS5jb20iLCJpcy1pbnRvLWNhcnMuY29tIiwiaXMt''@;'; put 'put ''aW50by1jYXJ0b29ucy5jb20iLCJpcy1pbnRvLWdhbWVzLmNvbSIsImlzLWxlZXQuY29tIiwiaXMtbm90LWNlcnRpZmllZC5jb20iLCJpcy1zbGljay5jb20iLCJpcy11YmVybGVldC5jb20iLCJpcy13aXRoLXRoZWJhbmQuY29tIiwiaXNhLWdlZWsuY29tIiwiaXNhLWhvY2tleW51dC5jb20i''@;'; put 'put ''LCJpc3NtYXJ0ZXJ0aGFueW91LmNvbSIsImxpa2VzLXBpZS5jb20iLCJsaWtlc2NhbmR5LmNvbSIsIm5lYXQtdXJsLmNvbSIsInNhdmVzLXRoZS13aGFsZXMuY29tIiwic2VsZmlwLmNvbSIsInNlbGxzLWZvci1sZXNzLmNvbSIsInNlbGxzLWZvci11LmNvbSIsInNlcnZlYmJzLmNvbSIsInNp''@;'; put 'put ''bXBsZS11cmwuY29tIiwic3BhY2UtdG8tcmVudC5jb20iLCJ0ZWFjaGVzLXlvZ2EuY29tIiwid3JpdGVzdGhpc2Jsb2cuY29tIiwiYXRoLmN4IiwiZnVldHRlcnRkYXNuZXR6LmRlIiwiaXN0ZWluZ2Vlay5kZSIsImlzdG1laW4uZGUiLCJsZWJ0aW1uZXR6LmRlIiwibGVpdHVuZ3Nlbi5kZSIs''@;'; put 'put ''InRyYWV1bXRnZXJhZGUuZGUiLCJiYXJyZWwtb2Yta25vd2xlZGdlLmluZm8iLCJiYXJyZWxsLW9mLWtub3dsZWRnZS5pbmZvIiwiZHluZG5zLmluZm8iLCJmb3Itb3VyLmluZm8iLCJncm9rcy10aGUuaW5mbyIsImdyb2tzLXRoaXMuaW5mbyIsImhlcmUtZm9yLW1vcmUuaW5mbyIsImtub3dz''@;'; put 'put ''aXRhbGwuaW5mbyIsInNlbGZpcC5pbmZvIiwid2ViaG9wLmluZm8iLCJmb3Jnb3QuaGVyLm5hbWUiLCJmb3Jnb3QuaGlzLm5hbWUiLCJhdC1iYW5kLWNhbXAubmV0IiwiYmxvZ2Rucy5uZXQiLCJicm9rZS1pdC5uZXQiLCJidXlzaG91c2VzLm5ldCIsImRuc2FsaWFzLm5ldCIsImRuc2Rvam8u''@;'; put 'put ''bmV0IiwiZG9lcy1pdC5uZXQiLCJkb250ZXhpc3QubmV0IiwiZHluYWxpYXMubmV0IiwiZHluYXRob21lLm5ldCIsImVuZG9maW50ZXJuZXQubmV0IiwiZnJvbS1hei5uZXQiLCJmcm9tLWNvLm5ldCIsImZyb20tbGEubmV0IiwiZnJvbS1ueS5uZXQiLCJnZXRzLWl0Lm5ldCIsImhhbS1yYWRp''@;'; put 'put ''by1vcC5uZXQiLCJob21lZnRwLm5ldCIsImhvbWVpcC5uZXQiLCJob21lbGludXgubmV0IiwiaG9tZXVuaXgubmV0IiwiaW4tdGhlLWJhbmQubmV0IiwiaXMtYS1jaGVmLm5ldCIsImlzLWEtZ2Vlay5uZXQiLCJpc2EtZ2Vlay5uZXQiLCJraWNrcy1hc3MubmV0Iiwib2ZmaWNlLW9uLXRoZS5u''@;'; put 'put ''ZXQiLCJwb2R6b25lLm5ldCIsInNjcmFwcGVyLXNpdGUubmV0Iiwic2VsZmlwLm5ldCIsInNlbGxzLWl0Lm5ldCIsInNlcnZlYmJzLm5ldCIsInNlcnZlZnRwLm5ldCIsInRocnVoZXJlLm5ldCIsIndlYmhvcC5uZXQiLCJtZXJzZWluZS5udSIsIm1pbmUubnUiLCJzaGFja25ldC5udSIsImJs''@;'; put 'put ''b2dkbnMub3JnIiwiYmxvZ3NpdGUub3JnIiwiYm9sZGx5Z29pbmdub3doZXJlLm9yZyIsImRuc2FsaWFzLm9yZyIsImRuc2Rvam8ub3JnIiwiZG9lc250ZXhpc3Qub3JnIiwiZG9udGV4aXN0Lm9yZyIsImRvb21kbnMub3JnIiwiZHZyZG5zLm9yZyIsImR5bmFsaWFzLm9yZyIsImR5bmRucy5v''@;'; put 'put ''cmciLCJnby5keW5kbnMub3JnIiwiaG9tZS5keW5kbnMub3JnIiwiZW5kb2ZpbnRlcm5ldC5vcmciLCJlbmRvZnRoZWludGVybmV0Lm9yZyIsImZyb20tbWUub3JnIiwiZ2FtZS1ob3N0Lm9yZyIsImdvdGRucy5vcmciLCJob2JieS1zaXRlLm9yZyIsImhvbWVkbnMub3JnIiwiaG9tZWZ0cC5v''@;'; put 'put ''cmciLCJob21lbGludXgub3JnIiwiaG9tZXVuaXgub3JnIiwiaXMtYS1icnVpbnNmYW4ub3JnIiwiaXMtYS1jYW5kaWRhdGUub3JnIiwiaXMtYS1jZWx0aWNzZmFuLm9yZyIsImlzLWEtY2hlZi5vcmciLCJpcy1hLWdlZWsub3JnIiwiaXMtYS1rbmlnaHQub3JnIiwiaXMtYS1saW51eC11c2Vy''@;'; put 'put ''Lm9yZyIsImlzLWEtcGF0c2Zhbi5vcmciLCJpcy1hLXNveGZhbi5vcmciLCJpcy1mb3VuZC5vcmciLCJpcy1sb3N0Lm9yZyIsImlzLXNhdmVkLm9yZyIsImlzLXZlcnktYmFkLm9yZyIsImlzLXZlcnktZXZpbC5vcmciLCJpcy12ZXJ5LWdvb2Qub3JnIiwiaXMtdmVyeS1uaWNlLm9yZyIsImlz''@;'; put 'put ''LXZlcnktc3dlZXQub3JnIiwiaXNhLWdlZWsub3JnIiwia2lja3MtYXNzLm9yZyIsIm1pc2NvbmZ1c2VkLm9yZyIsInBvZHpvbmUub3JnIiwicmVhZG15YmxvZy5vcmciLCJzZWxmaXAub3JnIiwic2VsbHN5b3VyaG9tZS5vcmciLCJzZXJ2ZWJicy5vcmciLCJzZXJ2ZWZ0cC5vcmciLCJzZXJ2''@;'; put 'put ''ZWdhbWUub3JnIiwic3R1ZmYtNC1zYWxlLm9yZyIsIndlYmhvcC5vcmciLCJiZXR0ZXItdGhhbi50diIsImR5bmRucy50diIsIm9uLXRoZS13ZWIudHYiLCJ3b3JzZS10aGFuLnR2IiwiaXMtYnkudXMiLCJsYW5kLTQtc2FsZS51cyIsInN0dWZmLTQtc2FsZS51cyIsImR5bmRucy53cyIsIm15''@;'; put 'put ''cGV0cy53cyIsImRkbnNmcmVlLmNvbSIsImRkbnNnZWVrLmNvbSIsImdpaXplLmNvbSIsImdsZWV6ZS5jb20iLCJrb3pvdy5jb20iLCJsb3NleW91cmlwLmNvbSIsIm9vZ3V5LmNvbSIsInRoZXdvcmtwYy5jb20iLCJjYXNhY2FtLm5ldCIsImR5bnUubmV0IiwiYWNjZXNzY2FtLm9yZyIsImNh''@;'; put 'put ''bWR2ci5vcmciLCJmcmVlZGRucy5vcmciLCJteXdpcmUub3JnIiwid2VicmVkaXJlY3Qub3JnIiwibXlkZG5zLnJvY2tzIiwiZHludjYubmV0IiwiZTQuY3oiLCJlYXN5cGFuZWwuYXBwIiwiZWFzeXBhbmVsLmhvc3QiLCIqLmV3cC5saXZlIiwidHdtYWlsLmNjIiwidHdtYWlsLm5ldCIsInR3''@;'; put 'put ''bWFpbC5vcmciLCJteW1haWxlci5jb20udHciLCJ1cmwudHciLCJhdC5lbWYuY2FtcCIsInJ0Lmh0IiwiZWxlbWVudG9yLmNsb3VkIiwiZWxlbWVudG9yLmNvb2wiLCJlbi1yb290LmZyIiwibXl0dWxlYXAuY29tIiwidHVsZWFwLXBhcnRuZXJzLmNvbSIsImVuY3IuYXBwIiwiZW5jb3JlYXBp''@;'; put 'put ''LmNvbSIsImV1LmVuY293YXkuY2xvdWQiLCJldS5vcmciLCJhbC5ldS5vcmciLCJhc3NvLmV1Lm9yZyIsImF0LmV1Lm9yZyIsImF1LmV1Lm9yZyIsImJlLmV1Lm9yZyIsImJnLmV1Lm9yZyIsImNhLmV1Lm9yZyIsImNkLmV1Lm9yZyIsImNoLmV1Lm9yZyIsImNuLmV1Lm9yZyIsImN5LmV1Lm9y''@;'; put 'put ''ZyIsImN6LmV1Lm9yZyIsImRlLmV1Lm9yZyIsImRrLmV1Lm9yZyIsImVkdS5ldS5vcmciLCJlZS5ldS5vcmciLCJlcy5ldS5vcmciLCJmaS5ldS5vcmciLCJmci5ldS5vcmciLCJnci5ldS5vcmciLCJoci5ldS5vcmciLCJodS5ldS5vcmciLCJpZS5ldS5vcmciLCJpbC5ldS5vcmciLCJpbi5l''@;'; put 'put ''dS5vcmciLCJpbnQuZXUub3JnIiwiaXMuZXUub3JnIiwiaXQuZXUub3JnIiwianAuZXUub3JnIiwia3IuZXUub3JnIiwibHQuZXUub3JnIiwibHUuZXUub3JnIiwibHYuZXUub3JnIiwibWUuZXUub3JnIiwibWsuZXUub3JnIiwibXQuZXUub3JnIiwibXkuZXUub3JnIiwibmV0LmV1Lm9yZyIs''@;'; put 'put ''Im5nLmV1Lm9yZyIsIm5sLmV1Lm9yZyIsIm5vLmV1Lm9yZyIsIm56LmV1Lm9yZyIsInBsLmV1Lm9yZyIsInB0LmV1Lm9yZyIsInJvLmV1Lm9yZyIsInJ1LmV1Lm9yZyIsInNlLmV1Lm9yZyIsInNpLmV1Lm9yZyIsInNrLmV1Lm9yZyIsInRyLmV1Lm9yZyIsInVrLmV1Lm9yZyIsInVzLmV1Lm9y''@;'; put 'put ''ZyIsImV1cm9kaXIucnUiLCJldS0xLmV2ZW5ub2RlLmNvbSIsImV1LTIuZXZlbm5vZGUuY29tIiwiZXUtMy5ldmVubm9kZS5jb20iLCJldS00LmV2ZW5ub2RlLmNvbSIsInVzLTEuZXZlbm5vZGUuY29tIiwidXMtMi5ldmVubm9kZS5jb20iLCJ1cy0zLmV2ZW5ub2RlLmNvbSIsInVzLTQuZXZl''@;'; put 'put ''bm5vZGUuY29tIiwicmVsYXkuZXZlcnZhdWx0LmFwcCIsInJlbGF5LmV2ZXJ2YXVsdC5kZXYiLCJleHBvLmFwcCIsInN0YWdpbmcuZXhwby5hcHAiLCJvbmZhYnJpY2EuY29tIiwicnUubmV0IiwiYWR5Z2V5YS5ydSIsImJhc2hraXJpYS5ydSIsImJpci5ydSIsImNiZy5ydSIsImNvbS5ydSIs''@;'; put 'put ''ImRhZ2VzdGFuLnJ1IiwiZ3Jvem55LnJ1Iiwia2FsbXlraWEucnUiLCJrdXN0YW5haS5ydSIsIm1hcmluZS5ydSIsIm1vcmRvdmlhLnJ1IiwibXNrLnJ1IiwibXl0aXMucnUiLCJuYWxjaGlrLnJ1Iiwibm92LnJ1IiwicHlhdGlnb3Jzay5ydSIsInNwYi5ydSIsInZsYWRpa2F2a2F6LnJ1Iiwi''@;'; put 'put ''dmxhZGltaXIucnUiLCJhYmtoYXppYS5zdSIsImFkeWdleWEuc3UiLCJha3R5dWJpbnNrLnN1IiwiYXJraGFuZ2Vsc2suc3UiLCJhcm1lbmlhLnN1IiwiYXNoZ2FiYWQuc3UiLCJhemVyYmFpamFuLnN1IiwiYmFsYXNob3Yuc3UiLCJiYXNoa2lyaWEuc3UiLCJicnlhbnNrLnN1IiwiYnVraGFy''@;'; put 'put ''YS5zdSIsImNoaW1rZW50LnN1IiwiZGFnZXN0YW4uc3UiLCJlYXN0LWthemFraHN0YW4uc3UiLCJleG5ldC5zdSIsImdlb3JnaWEuc3UiLCJncm96bnkuc3UiLCJpdmFub3ZvLnN1IiwiamFtYnlsLnN1Iiwia2FsbXlraWEuc3UiLCJrYWx1Z2Euc3UiLCJrYXJhY29sLnN1Iiwia2FyYWdhbmRh''@;'; put 'put ''LnN1Iiwia2FyZWxpYS5zdSIsImtoYWthc3NpYS5zdSIsImtyYXNub2Rhci5zdSIsImt1cmdhbi5zdSIsImt1c3RhbmFpLnN1IiwibGVudWcuc3UiLCJtYW5neXNobGFrLnN1IiwibW9yZG92aWEuc3UiLCJtc2suc3UiLCJtdXJtYW5zay5zdSIsIm5hbGNoaWsuc3UiLCJuYXZvaS5zdSIsIm5v''@;'; put 'put ''cnRoLWthemFraHN0YW4uc3UiLCJub3Yuc3UiLCJvYm5pbnNrLnN1IiwicGVuemEuc3UiLCJwb2tyb3Zzay5zdSIsInNvY2hpLnN1Iiwic3BiLnN1IiwidGFzaGtlbnQuc3UiLCJ0ZXJtZXouc3UiLCJ0b2dsaWF0dGkuc3UiLCJ0cm9pdHNrLnN1IiwidHNlbGlub2dyYWQuc3UiLCJ0dWxhLnN1''@;'; put 'put ''IiwidHV2YS5zdSIsInZsYWRpa2F2a2F6LnN1IiwidmxhZGltaXIuc3UiLCJ2b2xvZ2RhLnN1IiwiY2hhbm5lbHNkdnIubmV0IiwidS5jaGFubmVsc2R2ci5uZXQiLCJlZGdlY29tcHV0ZS5hcHAiLCJmYXN0bHktZWRnZS5jb20iLCJmYXN0bHktdGVycmFyaXVtLmNvbSIsImZyZWV0bHMuZmFz''@;'; put 'put ''dGx5Lm5ldCIsIm1hcC5mYXN0bHkubmV0IiwiYS5wcm9kLmZhc3RseS5uZXQiLCJnbG9iYWwucHJvZC5mYXN0bHkubmV0IiwiYS5zc2wuZmFzdGx5Lm5ldCIsImIuc3NsLmZhc3RseS5uZXQiLCJnbG9iYWwuc3NsLmZhc3RseS5uZXQiLCJmYXN0bHlsYi5uZXQiLCJtYXAuZmFzdGx5bGIubmV0''@;'; put 'put ''IiwiKi51c2VyLmZtIiwiZmFzdHZwcy1zZXJ2ZXIuY29tIiwiZmFzdHZwcy5ob3N0IiwibXlmYXN0Lmhvc3QiLCJmYXN0dnBzLnNpdGUiLCJteWZhc3Quc3BhY2UiLCJjb25uLnVrIiwiY29wcm8udWsiLCJob3NwLnVrIiwiZmVkb3JhaW5mcmFjbG91ZC5vcmciLCJmZWRvcmFwZW9wbGUub3Jn''@;'; put 'put ''IiwiY2xvdWQuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3MuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3Muc3RnLmZlZG9yYXByb2plY3Qub3JnIiwibXlkb2Jpc3MuY29tIiwiZmgtbXVlbnN0ZXIuaW8iLCJmaWxlZ2Vhci5tZSIsImZpcmViYXNlYXBwLmNvbSIsImZsZHJ2LmNvbSIsImZs''@;'; put 'put ''dXR0ZXJmbG93LmFwcCIsImZseS5kZXYiLCJzaHcuaW8iLCJlZGdlYXBwLm5ldCIsImZvcmdlYmxvY2tzLmNvbSIsImlkLmZvcmdlcm9jay5pbyIsImZyYW1lci5haSIsImZyYW1lci5hcHAiLCJmcmFtZXJjYW52YXMuY29tIiwiZnJhbWVyLm1lZGlhIiwiZnJhbWVyLnBob3RvcyIsImZyYW1l''@;'; put 'put ''ci53ZWJzaXRlIiwiZnJhbWVyLndpa2kiLCIwZS52YyIsImZyZWVib3gtb3MuY29tIiwiZnJlZWJveG9zLmNvbSIsImZieC1vcy5mciIsImZieG9zLmZyIiwiZnJlZWJveC1vcy5mciIsImZyZWVib3hvcy5mciIsImZyZWVkZXNrdG9wLm9yZyIsImZyZWVteWlwLmNvbSIsIiouZnJ1c2t5LmRl''@;'; put 'put ''Iiwid2llbi5mdW5rZmV1ZXIuYXQiLCJkYWVtb24uYXNpYSIsImRpeC5hc2lhIiwibXlkbnMuYnoiLCIwYW0uanAiLCIwZzAuanAiLCIwajAuanAiLCIwdDAuanAiLCJteWRucy5qcCIsInBndy5qcCIsIndqZy5qcCIsImtleXdvcmQtb24ubmV0IiwibGl2ZS1vbi5uZXQiLCJzZXJ2ZXItb24u''@;'; put 'put ''bmV0IiwibXlkbnMudHciLCJteWRucy52YyIsIiouZnV0dXJlY21zLmF0IiwiKi5leC5mdXR1cmVjbXMuYXQiLCIqLmluLmZ1dHVyZWNtcy5hdCIsImZ1dHVyZWhvc3RpbmcuYXQiLCJmdXR1cmVtYWlsaW5nLmF0IiwiKi5leC5vcnRzaW5mby5hdCIsIioua3VuZGVuLm9ydHNpbmZvLmF0Iiwi''@;'; put 'put ''Ki5zdGF0aWNzLmNsb3VkIiwiYWxpYXNlczEyMS5jb20iLCJjYW1wYWlnbi5nb3YudWsiLCJzZXJ2aWNlLmdvdi51ayIsImluZGVwZW5kZW50LWNvbW1pc3Npb24udWsiLCJpbmRlcGVuZGVudC1pbnF1ZXN0LnVrIiwiaW5kZXBlbmRlbnQtaW5xdWlyeS51ayIsImluZGVwZW5kZW50LXBhbmVs''@;'; put 'put ''LnVrIiwiaW5kZXBlbmRlbnQtcmV2aWV3LnVrIiwicHVibGljLWlucXVpcnkudWsiLCJyb3lhbC1jb21taXNzaW9uLnVrIiwiZ2VoaXJuLm5lLmpwIiwidXNlcmNvbnRlbnQuanAiLCJnZW50YXBwcy5jb20iLCJnZW50bGVudGFwaXMuY29tIiwibGFiLm1zIiwiY2RuLWVkZ2VzLm5ldCIsImxv''@;'; put 'put ''Y2FsY2VydC5uZXQiLCJsb2NhbGhvc3RjZXJ0Lm5ldCIsImdzai5ieiIsImdpdGh1YnVzZXJjb250ZW50LmNvbSIsImdpdGh1YnByZXZpZXcuZGV2IiwiZ2l0aHViLmlvIiwiZ2l0bGFiLmlvIiwiZ2l0YXBwLnNpIiwiZ2l0cGFnZS5zaSIsImdsaXRjaC5tZSIsIm5vZy5jb21tdW5pdHkiLCJj''@;'; put 'put ''by5ybyIsInNob3Aucm8iLCJsb2xpcG9wLmlvIiwiYW5ncnkuanAiLCJiYWJ5Ymx1ZS5qcCIsImJhYnltaWxrLmpwIiwiYmFja2Ryb3AuanAiLCJiYW1iaW5hLmpwIiwiYml0dGVyLmpwIiwiYmx1c2guanAiLCJib28uanAiLCJib3kuanAiLCJib3lmcmllbmQuanAiLCJidXQuanAiLCJjYW5k''@;'; put 'put ''eXBvcC5qcCIsImNhcG9vLmpwIiwiY2F0Zm9vZC5qcCIsImNoZWFwLmpwIiwiY2hpY2FwcGEuanAiLCJjaGlsbG91dC5qcCIsImNoaXBzLmpwIiwiY2hvd2Rlci5qcCIsImNodS5qcCIsImNpYW8uanAiLCJjb2NvdHRlLmpwIiwiY29vbGJsb2cuanAiLCJjcmFua3kuanAiLCJjdXRlZ2lybC5q''@;'; put 'put ''cCIsImRhYS5qcCIsImRlY2EuanAiLCJkZWNpLmpwIiwiZGlnaWNrLmpwIiwiZWdvaXNtLmpwIiwiZmFrZWZ1ci5qcCIsImZlbS5qcCIsImZsaWVyLmpwIiwiZmxvcHB5LmpwIiwiZm9vbC5qcCIsImZyZW5jaGtpc3MuanAiLCJnaXJsZnJpZW5kLmpwIiwiZ2lybHkuanAiLCJnbG9vbXkuanAi''@;'; put 'put ''LCJnb25uYS5qcCIsImdyZWF0ZXIuanAiLCJoYWNjYS5qcCIsImhlYXZ5LmpwIiwiaGVyLmpwIiwiaGloby5qcCIsImhpcHB5LmpwIiwiaG9seS5qcCIsImh1bmdyeS5qcCIsImljdXJ1cy5qcCIsIml0aWdvLmpwIiwiamVsbHliZWFuLmpwIiwia2lraXJhcmEuanAiLCJraWxsLmpwIiwia2ls''@;'; put 'put ''by5qcCIsImt1cm9uLmpwIiwibGl0dGxlc3Rhci5qcCIsImxvbGlwb3BtYy5qcCIsImxvbGl0YXB1bmsuanAiLCJsb21vLmpwIiwibG92ZXBvcC5qcCIsImxvdmVzaWNrLmpwIiwibWFpbi5qcCIsIm1vZHMuanAiLCJtb25kLmpwIiwibW9uZ29saWFuLmpwIiwibW9vLmpwIiwibmFtYXN0ZS5q''@;'; put 'put ''cCIsIm5pa2l0YS5qcCIsIm5vYnVzaGkuanAiLCJub29yLmpwIiwib29wcy5qcCIsInBhcmFsbGVsLmpwIiwicGFyYXNpdGUuanAiLCJwZWNvcmkuanAiLCJwZWV3ZWUuanAiLCJwZW5uZS5qcCIsInBlcHBlci5qcCIsInBlcm1hLmpwIiwicGlnYm9hdC5qcCIsInBpbm9rby5qcCIsInB1bnl1''@;'; put 'put ''LmpwIiwicHVwdS5qcCIsInB1c3N5Y2F0LmpwIiwicHlhLmpwIiwicmFpbmRyb3AuanAiLCJyZWFkeW1hZGUuanAiLCJzYWRpc3QuanAiLCJzY2hvb2xidXMuanAiLCJzZWNyZXQuanAiLCJzdGFiYS5qcCIsInN0cmlwcGVyLmpwIiwic3ViLmpwIiwic3VubnlkYXkuanAiLCJ0aGljay5qcCIs''@;'; put 'put ''InRvbmtvdHN1LmpwIiwidW5kZXIuanAiLCJ1cHBlci5qcCIsInZlbHZldC5qcCIsInZlcnNlLmpwIiwidmVyc3VzLmpwIiwidml2aWFuLmpwIiwid2F0c29uLmpwIiwid2VibGlrZS5qcCIsIndoaXRlc25vdy5qcCIsInpvbWJpZS5qcCIsImhldGVtbC5uZXQiLCJncmFwaGljLmRlc2lnbiIs''@;'; put 'put ''ImdvaXAuZGUiLCJibG9nc3BvdC5hZSIsImJsb2dzcG90LmFsIiwiYmxvZ3Nwb3QuYW0iLCIqLmhvc3RlZC5hcHAiLCIqLnJ1bi5hcHAiLCJ3ZWIuYXBwIiwiYmxvZ3Nwb3QuY29tLmFyIiwiYmxvZ3Nwb3QuY28uYXQiLCJibG9nc3BvdC5jb20uYXUiLCJibG9nc3BvdC5iYSIsImJsb2dzcG90''@;'; put 'put ''LmJlIiwiYmxvZ3Nwb3QuYmciLCJibG9nc3BvdC5iaiIsImJsb2dzcG90LmNvbS5iciIsImJsb2dzcG90LmNvbS5ieSIsImJsb2dzcG90LmNhIiwiYmxvZ3Nwb3QuY2YiLCJibG9nc3BvdC5jaCIsImJsb2dzcG90LmNsIiwiYmxvZ3Nwb3QuY29tLmNvIiwiKi4wZW1tLmNvbSIsImFwcHNwb3Qu''@;'; put 'put ''Y29tIiwiKi5yLmFwcHNwb3QuY29tIiwiYmxvZ3Nwb3QuY29tIiwiY29kZXNwb3QuY29tIiwiZ29vZ2xlYXBpcy5jb20iLCJnb29nbGVjb2RlLmNvbSIsInBhZ2VzcGVlZG1vYmlsaXplci5jb20iLCJ3aXRoZ29vZ2xlLmNvbSIsIndpdGh5b3V0dWJlLmNvbSIsImJsb2dzcG90LmN2IiwiYmxv''@;'; put 'put ''Z3Nwb3QuY29tLmN5IiwiYmxvZ3Nwb3QuY3oiLCJibG9nc3BvdC5kZSIsIiouZ2F0ZXdheS5kZXYiLCJibG9nc3BvdC5kayIsImJsb2dzcG90LmNvbS5lZSIsImJsb2dzcG90LmNvbS5lZyIsImJsb2dzcG90LmNvbS5lcyIsImJsb2dzcG90LmZpIiwiYmxvZ3Nwb3QuZnIiLCJjbG91ZC5nb29n''@;'; put 'put ''IiwidHJhbnNsYXRlLmdvb2ciLCIqLnVzZXJjb250ZW50Lmdvb2ciLCJibG9nc3BvdC5nciIsImJsb2dzcG90LmhrIiwiYmxvZ3Nwb3QuaHIiLCJibG9nc3BvdC5odSIsImJsb2dzcG90LmNvLmlkIiwiYmxvZ3Nwb3QuaWUiLCJibG9nc3BvdC5jby5pbCIsImJsb2dzcG90LmluIiwiYmxvZ3Nw''@;'; put 'put ''b3QuaXMiLCJibG9nc3BvdC5pdCIsImJsb2dzcG90LmpwIiwiYmxvZ3Nwb3QuY28ua2UiLCJibG9nc3BvdC5rciIsImJsb2dzcG90LmxpIiwiYmxvZ3Nwb3QubHQiLCJibG9nc3BvdC5sdSIsImJsb2dzcG90Lm1kIiwiYmxvZ3Nwb3QubWsiLCJibG9nc3BvdC5jb20ubXQiLCJibG9nc3BvdC5t''@;'; put 'put ''eCIsImJsb2dzcG90Lm15IiwiY2xvdWRmdW5jdGlvbnMubmV0IiwiYmxvZ3Nwb3QuY29tLm5nIiwiYmxvZ3Nwb3QubmwiLCJibG9nc3BvdC5ubyIsImJsb2dzcG90LmNvLm56IiwiYmxvZ3Nwb3QucGUiLCJibG9nc3BvdC5wdCIsImJsb2dzcG90LnFhIiwiYmxvZ3Nwb3QucmUiLCJibG9nc3Bv''@;'; put 'put ''dC5ybyIsImJsb2dzcG90LnJzIiwiYmxvZ3Nwb3QucnUiLCJibG9nc3BvdC5zZSIsImJsb2dzcG90LnNnIiwiYmxvZ3Nwb3Quc2kiLCJibG9nc3BvdC5zayIsImJsb2dzcG90LnNuIiwiYmxvZ3Nwb3QudGQiLCJibG9nc3BvdC5jb20udHIiLCJibG9nc3BvdC50dyIsImJsb2dzcG90LnVnIiwi''@;'; put 'put ''YmxvZ3Nwb3QuY28udWsiLCJibG9nc3BvdC5jb20udXkiLCJibG9nc3BvdC52biIsImJsb2dzcG90LmNvLnphIiwiZ291cGlsZS5mciIsInB5bW50LnVrIiwiY2xvdWRhcHBzLmRpZ2l0YWwiLCJsb25kb24uY2xvdWRhcHBzLmRpZ2l0YWwiLCJnb3YubmwiLCJncmFmYW5hLWRldi5uZXQiLCJn''@;'; put 'put ''cmF5amF5bGVhZ3Vlcy5jb20iLCJnXHhmY25zdGlnYmVzdGVsbGVuLmRlIiwiZ1x4ZmNuc3RpZ2xpZWZlcm4uZGUiLCJmaW4uY2kiLCJmcmVlLmhyIiwiY2FhLmxpIiwidWEucnMiLCJjb25mLnNlIiwiaFx4ZTRra2luZW4uZmkiLCJocnNuLmRldiIsImhhc2hiYW5nLnNoIiwiaGFzdXJhLmFw''@;'; put 'put ''cCIsImhhc3VyYS1hcHAuaW8iLCJoYXRlbmFibG9nLmNvbSIsImhhdGVuYWRpYXJ5LmNvbSIsImhhdGVibG8uanAiLCJoYXRlbmFibG9nLmpwIiwiaGF0ZW5hZGlhcnkuanAiLCJoYXRlbmFkaWFyeS5vcmciLCJwYWdlcy5pdC5ocy1oZWlsYnJvbm4uZGUiLCJwYWdlcy1yZXNlYXJjaC5pdC5o''@;'; put 'put ''cy1oZWlsYnJvbm4uZGUiLCJoZWl5dS5zcGFjZSIsImhlbGlvaG8uc3QiLCJoZWxpb2hvc3QudXMiLCJoZXBmb3JnZS5vcmciLCJoZXJva3VhcHAuY29tIiwiaGVyb2t1c3NsLmNvbSIsImhleWZsb3cucGFnZSIsImhleWZsb3cuc2l0ZSIsInJhdmVuZGIuY2xvdWQiLCJyYXZlbmRiLmNvbW11''@;'; put 'put ''bml0eSIsImRldmVsb3BtZW50LnJ1biIsInJhdmVuZGIucnVuIiwiaG9tZXNrbGVwLnBsIiwiKi5raW4ub25lIiwiKi5pZC5wdWIiLCIqLmtpbi5wdWIiLCJzZWNhYXMuaGsiLCJob3BsaXguc2hvcCIsIm9yeC5iaXoiLCJiaXouZ2wiLCJiaXoubmciLCJjby5iaXoubmciLCJkbC5iaXoubmci''@;'; put 'put ''LCJnby5iaXoubmciLCJsZy5iaXoubmciLCJvbi5iaXoubmciLCJjb2wubmciLCJmaXJtLm5nIiwiZ2VuLm5nIiwibHRkLm5nIiwibmdvLm5nIiwicGxjLm5nIiwiaWUudWEiLCJob3N0eWhvc3RpbmcuaW8iLCJoZi5zcGFjZSIsInN0YXRpYy5oZi5zcGFjZSIsImh5cGVybm9kZS5pbyIsImlv''@;'; put 'put ''YmIubmV0IiwiY28uY3oiLCIqLm1vb25zY2FsZS5pbyIsIm1vb25zY2FsZS5uZXQiLCJnci5jb20iLCJpa2kuZmkiLCJpYnhvcy5pdCIsImlsaWFkYm94b3MuaXQiLCJzbXVzaGNkbi5jb20iLCJ3cGhvc3RlZG1haWwuY29tIiwid3BtdWNkbi5jb20iLCJ0ZW1wdXJsLmhvc3QiLCJ3cG11ZGV2''@;'; put 'put ''Lmhvc3QiLCJkeW4tYmVybGluLmRlIiwiaW4tYmVybGluLmRlIiwiaW4tYnJiLmRlIiwiaW4tYnV0dGVyLmRlIiwiaW4tZHNsLmRlIiwiaW4tdnBuLmRlIiwiaW4tZHNsLm5ldCIsImluLXZwbi5uZXQiLCJpbi1kc2wub3JnIiwiaW4tdnBuLm9yZyIsImJpei5hdCIsImluZm8uYXQiLCJpbmZv''@;'; put 'put ''LmN4IiwiYWMubGVnLmJyIiwiYWwubGVnLmJyIiwiYW0ubGVnLmJyIiwiYXAubGVnLmJyIiwiYmEubGVnLmJyIiwiY2UubGVnLmJyIiwiZGYubGVnLmJyIiwiZXMubGVnLmJyIiwiZ28ubGVnLmJyIiwibWEubGVnLmJyIiwibWcubGVnLmJyIiwibXMubGVnLmJyIiwibXQubGVnLmJyIiwicGEu''@;'; put 'put ''bGVnLmJyIiwicGIubGVnLmJyIiwicGUubGVnLmJyIiwicGkubGVnLmJyIiwicHIubGVnLmJyIiwicmoubGVnLmJyIiwicm4ubGVnLmJyIiwicm8ubGVnLmJyIiwicnIubGVnLmJyIiwicnMubGVnLmJyIiwic2MubGVnLmJyIiwic2UubGVnLmJyIiwic3AubGVnLmJyIiwidG8ubGVnLmJyIiwi''@;'; put 'put ''cGl4b2xpbm8uY29tIiwibmE0dS5ydSIsImFwcHMtMWFuZDEuY29tIiwibGl2ZS13ZWJzaXRlLmNvbSIsImFwcHMtMWFuZDEubmV0Iiwid2Vic2l0ZWJ1aWxkZXIub25saW5lIiwiYXBwLWlvbm9zLnNwYWNlIiwiaW9wc3lzLnNlIiwiKi5kd2ViLmxpbmsiLCJpcGlmb255Lm5ldCIsImlyLm1k''@;'; put 'put ''IiwiaXMtYS1nb29kLmRldiIsImlzLWEuZGV2IiwiaXNlcnZzY2h1bGUuZGUiLCJtZWluLWlzZXJ2LmRlIiwic2NodWxwbGF0dGZvcm0uZGUiLCJzY2h1bHNlcnZlci5kZSIsInRlc3QtaXNlcnYuZGUiLCJpc2Vydi5kZXYiLCJtZWwuY2xvdWRsZXRzLmNvbS5hdSIsImNsb3VkLmludGVyaG9z''@;'; put 'put ''dHNvbHV0aW9ucy5iZSIsImFscDEuYWUuZmxvdy5jaCIsImFwcGVuZ2luZS5mbG93LmNoIiwiZXMtMS5heGFybmV0LmNsb3VkIiwiZGlhZGVtLmNsb3VkIiwidmlwLmplbGFzdGljLmNsb3VkIiwiamVsZS5jbG91ZCIsIml0MS5ldXIuYXJ1YmEuamVudi1hcnViYS5jbG91ZCIsIml0MS5qZW52''@;'; put 'put ''LWFydWJhLmNsb3VkIiwia2VsaXdlYi5jbG91ZCIsImNzLmtlbGl3ZWIuY2xvdWQiLCJveGEuY2xvdWQiLCJ0bi5veGEuY2xvdWQiLCJ1ay5veGEuY2xvdWQiLCJwcmltZXRlbC5jbG91ZCIsInVrLnByaW1ldGVsLmNsb3VkIiwiY2EucmVjbGFpbS5jbG91ZCIsInVrLnJlY2xhaW0uY2xvdWQi''@;'; put 'put ''LCJ1cy5yZWNsYWltLmNsb3VkIiwiY2gudHJlbmRob3N0aW5nLmNsb3VkIiwiZGUudHJlbmRob3N0aW5nLmNsb3VkIiwiamVsZS5jbHViIiwiZG9wYWFzLmNvbSIsInBhYXMuaG9zdGVkLWJ5LXByZXZpZGVyLmNvbSIsInJhZy1jbG91ZC5ob3N0ZXVyLmNvbSIsInJhZy1jbG91ZC1jaC5ob3N0''@;'; put 'put ''ZXVyLmNvbSIsImpjbG91ZC5pay1zZXJ2ZXIuY29tIiwiamNsb3VkLXZlci1qcGMuaWstc2VydmVyLmNvbSIsImRlbW8uamVsYXN0aWMuY29tIiwicGFhcy5tYXNzaXZlZ3JpZC5jb20iLCJqZWQud2FmYWljbG91ZC5jb20iLCJyeWQud2FmYWljbG91ZC5jb20iLCJqLnNjYWxlZm9yY2UuY29t''@;'; put 'put ''LmN5IiwiamVsYXN0aWMuZG9nYWRvLmV1IiwiZmkuY2xvdWRwbGF0Zm9ybS5maSIsImRlbW8uZGF0YWNlbnRlci5maSIsInBhYXMuZGF0YWNlbnRlci5maSIsImplbGUuaG9zdCIsIm1pcmNsb3VkLmhvc3QiLCJwYWFzLmJlZWJ5dGUuaW8iLCJzZWtkMS5iZWVieXRlYXBwLmlvIiwiamVsZS5p''@;'; put 'put ''byIsImpjLm5lZW4uaXQiLCJqY2xvdWQua3oiLCJjbG91ZGppZmZ5Lm5ldCIsImZyYTEtZGUuY2xvdWRqaWZmeS5uZXQiLCJ3ZXN0MS11cy5jbG91ZGppZmZ5Lm5ldCIsImpscy1zdG8xLmVsYXN0eC5uZXQiLCJqbHMtc3RvMi5lbGFzdHgubmV0IiwiamxzLXN0bzMuZWxhc3R4Lm5ldCIsImZy''@;'; put 'put ''LTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0yLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55LTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJzZy0xLnBhYXMubWFzc2l2ZWdyaWQubmV0''@;'; put 'put ''IiwiamVsYXN0aWMuc2F2ZWluY2xvdWQubmV0Iiwibm9yZGVzdGUtaWRjLnNhdmVpbmNsb3VkLm5ldCIsImouc2NhbGVmb3JjZS5uZXQiLCJzZHNjbG91ZC5wbCIsInVuaWNsb3VkLnBsIiwibWlyY2xvdWQucnUiLCJlbnNjYWxlZC5zZyIsImplbGUuc2l0ZSIsImplbGFzdGljLnRlYW0iLCJv''@;'; put 'put ''cmFuZ2VjbG91ZC50biIsImoubGF5ZXJzaGlmdC5jby51ayIsInBoeC5lbnNjYWxlZC51cyIsIm1pcmNsb3VkLnVzIiwibXlqaW5vLnJ1IiwiKi5ob3N0aW5nLm15amluby5ydSIsIioubGFuZGluZy5teWppbm8ucnUiLCIqLnNwZWN0cnVtLm15amluby5ydSIsIioudnBzLm15amluby5ydSIs''@;'; put 'put ''ImpvdGVsdWx1LmNsb3VkIiwid2ViYWRvcnNpdGUuY29tIiwiam91d3dlYi5zaXRlIiwiKi5jbnMuam95ZW50LmNvbSIsIioudHJpdG9uLnpvbmUiLCJqcy5vcmciLCJrYWFzLmdnIiwia2hwbGF5Lm5sIiwia2Fwc2kuZmkiLCJlenByb3h5Lmt1bGV1dmVuLmJlIiwia3VsZXV2ZW4uY2xvdWQi''@;'; put 'put ''LCJrZXltYWNoaW5lLmRlIiwia2luZ2hvc3QubmV0IiwidW5pNS5uZXQiLCJrbmlnaHRwb2ludC5zeXN0ZW1zIiwia29vYmluLmV2ZW50cyIsIndlYnRoaW5ncy5pbyIsImtyZWxsaWFuLm5ldCIsIm95YS50byIsImdpdC1yZXBvcy5kZSIsImxjdWJlLXNlcnZlci5kZSIsInN2bi1yZXBvcy5k''@;'; put 'put ''ZSIsImxlYWRwYWdlcy5jbyIsImxwYWdlcy5jbyIsImxwdXNlcmNvbnRlbnQuY29tIiwibGVsdXguc2l0ZSIsImxpYnAycC5kaXJlY3QiLCJydW5jb250YWluZXJzLmRldiIsImNvLmJ1c2luZXNzIiwiY28uZWR1Y2F0aW9uIiwiY28uZXZlbnRzIiwiY28uZmluYW5jaWFsIiwiY28ubmV0d29y''@;'; put 'put ''ayIsImNvLnBsYWNlIiwiY28udGVjaG5vbG9neSIsImxpbmt5YXJkLWNsb3VkLmNoIiwibGlua3lhcmQuY2xvdWQiLCJtZW1iZXJzLmxpbm9kZS5jb20iLCIqLm5vZGViYWxhbmNlci5saW5vZGUuY29tIiwiKi5saW5vZGVvYmplY3RzLmNvbSIsImlwLmxpbm9kZXVzZXJjb250ZW50LmNvbSIs''@;'; put 'put ''IndlLmJzIiwiZmlsZWdlYXItc2cubWUiLCJnZ2ZmLm5ldCIsIioudXNlci5sb2NhbGNlcnQuZGV2IiwibG9kei5wbCIsInBhYmlhbmljZS5wbCIsInBsb2NrLnBsIiwic2llcmFkei5wbCIsInNraWVybmlld2ljZS5wbCIsInpnaWVyei5wbCIsImxvZ2lubGluZS5hcHAiLCJsb2dpbmxpbmUu''@;'; put 'put ''ZGV2IiwibG9naW5saW5lLmlvIiwibG9naW5saW5lLnNlcnZpY2VzIiwibG9naW5saW5lLnNpdGUiLCJsb2htdXMubWUiLCJzZXJ2ZXJzLnJ1biIsImtyYXNuaWsucGwiLCJsZWN6bmEucGwiLCJsdWJhcnRvdy5wbCIsImx1Ymxpbi5wbCIsInBvbmlhdG93YS5wbCIsInN3aWRuaWsucGwiLCJn''@;'; put 'put ''bHVnLm9yZy51ayIsImx1Zy5vcmcudWsiLCJsdWdzLm9yZy51ayIsImJhcnN5LmJnIiwiYmFyc3kuY2x1YiIsImJhcnN5Y2VudGVyLmNvbSIsImJhcnN5b25saW5lLmNvbSIsImJhcnN5LmRlIiwiYmFyc3kuZGV2IiwiYmFyc3kuZXUiLCJiYXJzeS5nciIsImJhcnN5LmluIiwiYmFyc3kuaW5m''@;'; put 'put ''byIsImJhcnN5LmlvIiwiYmFyc3kubWUiLCJiYXJzeS5tZW51IiwiYmFyc3lvbmxpbmUubWVudSIsImJhcnN5Lm1vYmkiLCJiYXJzeS5uZXQiLCJiYXJzeS5vbmxpbmUiLCJiYXJzeS5vcmciLCJiYXJzeS5wcm8iLCJiYXJzeS5wdWIiLCJiYXJzeS5ybyIsImJhcnN5LnJzIiwiYmFyc3kuc2hv''@;'; put 'put ''cCIsImJhcnN5b25saW5lLnNob3AiLCJiYXJzeS5zaXRlIiwiYmFyc3kuc3RvcmUiLCJiYXJzeS5zdXBwb3J0IiwiYmFyc3kudWsiLCJiYXJzeS5jby51ayIsImJhcnN5b25saW5lLmNvLnVrIiwiKi5tYWdlbnRvc2l0ZS5jbG91ZCIsImhiLmNsZG1haWwucnUiLCJtYXRsYWIuY2xvdWQiLCJt''@;'; put 'put ''b2RlbHNjYXBlLmNvbSIsIm13Y2xvdWRub25wcm9kLmNvbSIsInBvbHlzcGFjZS5jb20iLCJtYXlmaXJzdC5pbmZvIiwibWF5Zmlyc3Qub3JnIiwibWF6ZXBsYXkuY29tIiwibWNkaXIubWUiLCJtY2Rpci5ydSIsInZwcy5tY2Rpci5ydSIsIm1jcHJlLnJ1IiwibWVkaWF0ZWNoLmJ5IiwibWVk''@;'; put 'put ''aWF0ZWNoLmRldiIsImhyYS5oZWFsdGgiLCJtZWR1c2Fqcy5hcHAiLCJtaW5pc2VydmVyLmNvbSIsIm1lbXNldC5uZXQiLCJtZXNzZXJsaS5hcHAiLCJhdG1ldGEuY29tIiwiYXBwcy5mYnNieC5jb20iLCIqLmNsb3VkLm1ldGFjZW50cnVtLmN6IiwiY3VzdG9tLm1ldGFjZW50cnVtLmN6Iiwi''@;'; put 'put ''Zmx0LmNsb3VkLm11bmkuY3oiLCJ1c3IuY2xvdWQubXVuaS5jeiIsIm1ldGVvcmFwcC5jb20iLCJldS5tZXRlb3JhcHAuY29tIiwiY28ucGwiLCIqLmF6dXJlY29udGFpbmVyLmlvIiwiYXp1cmUtYXBpLm5ldCIsImF6dXJlLW1vYmlsZS5uZXQiLCJhenVyZWVkZ2UubmV0IiwiYXp1cmVmZC5u''@;'; put 'put ''ZXQiLCJhenVyZXN0YXRpY2FwcHMubmV0IiwiMS5henVyZXN0YXRpY2FwcHMubmV0IiwiMi5henVyZXN0YXRpY2FwcHMubmV0IiwiMy5henVyZXN0YXRpY2FwcHMubmV0IiwiNC5henVyZXN0YXRpY2FwcHMubmV0IiwiNS5henVyZXN0YXRpY2FwcHMubmV0IiwiNi5henVyZXN0YXRpY2FwcHMu''@;'; put 'put ''bmV0IiwiNy5henVyZXN0YXRpY2FwcHMubmV0IiwiY2VudHJhbHVzLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0YXNpYS5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdGV1cm9wZS5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdHVzMi5h''@;'; put 'put ''enVyZXN0YXRpY2FwcHMubmV0IiwiYXp1cmV3ZWJzaXRlcy5uZXQiLCJjbG91ZGFwcC5uZXQiLCJ0cmFmZmljbWFuYWdlci5uZXQiLCJibG9iLmNvcmUud2luZG93cy5uZXQiLCJzZXJ2aWNlYnVzLndpbmRvd3MubmV0Iiwicm91dGluZ3RoZWNsb3VkLmNvbSIsInNuLm15bmV0bmFtZS5uZXQi''@;'; put 'put ''LCJyb3V0aW5ndGhlY2xvdWQubmV0Iiwicm91dGluZ3RoZWNsb3VkLm9yZyIsImNzeC5jYyIsIm15ZGJzZXJ2ZXIuY29tIiwid2Vic3BhY2Vjb25maWcuZGUiLCJtaXR0d2FsZC5pbmZvIiwibWl0dHdhbGRzZXJ2ZXIuaW5mbyIsInR5cG8zc2VydmVyLmluZm8iLCJwcm9qZWN0LnNwYWNlIiwi''@;'; put 'put ''bW9keC5kZXYiLCJibW9hdHRhY2htZW50cy5vcmciLCJuZXQucnUiLCJvcmcucnUiLCJwcC5ydSIsImhvc3RlZHBpLmNvbSIsImNhcmFjYWwubXl0aGljLWJlYXN0cy5jb20iLCJjdXN0b21lci5teXRoaWMtYmVhc3RzLmNvbSIsImZlbnRpZ2VyLm15dGhpYy1iZWFzdHMuY29tIiwibHlueC5t''@;'; put 'put ''eXRoaWMtYmVhc3RzLmNvbSIsIm9jZWxvdC5teXRoaWMtYmVhc3RzLmNvbSIsIm9uY2lsbGEubXl0aGljLWJlYXN0cy5jb20iLCJvbnphLm15dGhpYy1iZWFzdHMuY29tIiwic3BoaW54Lm15dGhpYy1iZWFzdHMuY29tIiwidnMubXl0aGljLWJlYXN0cy5jb20iLCJ4Lm15dGhpYy1iZWFzdHMu''@;'; put 'put ''Y29tIiwieWFsaS5teXRoaWMtYmVhc3RzLmNvbSIsImN1c3QucmV0cm9zbnViLmNvLnVrIiwidWkubmFidS5jYXNhIiwiY2xvdWQubm9zcGFtcHJveHkuY29tIiwibmV0ZnkuYXBwIiwibmV0bGlmeS5hcHAiLCI0dS5jb20iLCJuZnNob3N0LmNvbSIsImlwZnMubmZ0c3RvcmFnZS5saW5rIiwi''@;'; put 'put ''bmdvLnVzIiwibmdyb2suYXBwIiwibmdyb2stZnJlZS5hcHAiLCJuZ3Jvay5kZXYiLCJuZ3Jvay1mcmVlLmRldiIsIm5ncm9rLmlvIiwiYXAubmdyb2suaW8iLCJhdS5uZ3Jvay5pbyIsImV1Lm5ncm9rLmlvIiwiaW4ubmdyb2suaW8iLCJqcC5uZ3Jvay5pbyIsInNhLm5ncm9rLmlvIiwidXMu''@;'; put 'put ''bmdyb2suaW8iLCJuZ3Jvay5waXp6YSIsIm5ncm9rLnBybyIsInRvcnVuLnBsIiwibmgtc2Vydi5jby51ayIsIm5pbXNpdGUudWsiLCJtbWFmYW4uYml6IiwibXlmdHAuYml6Iiwibm8taXAuYml6Iiwibm8taXAuY2EiLCJmYW50YXN5bGVhZ3VlLmNjIiwiZ290ZG5zLmNoIiwiM3V0aWxpdGll''@;'; put 'put ''cy5jb20iLCJibG9nc3l0ZS5jb20iLCJjaXNjb2ZyZWFrLmNvbSIsImRhbW5zZXJ2ZXIuY29tIiwiZGRuc2tpbmcuY29tIiwiZGl0Y2h5b3VyaXAuY29tIiwiZG5zaXNraW5reS5jb20iLCJkeW5ucy5jb20iLCJnZWVrZ2FsYXh5LmNvbSIsImhlYWx0aC1jYXJlcmVmb3JtLmNvbSIsImhvbWVz''@;'; put 'put ''ZWN1cml0eW1hYy5jb20iLCJob21lc2VjdXJpdHlwYy5jb20iLCJteWFjdGl2ZWRpcmVjdG9yeS5jb20iLCJteXNlY3VyaXR5Y2FtZXJhLmNvbSIsIm15dm5jLmNvbSIsIm5ldC1mcmVha3MuY29tIiwib250aGV3aWZpLmNvbSIsInBvaW50MnRoaXMuY29tIiwicXVpY2tzeXRlcy5jb20iLCJz''@;'; put 'put ''ZWN1cml0eXRhY3RpY3MuY29tIiwic2VydmViZWVyLmNvbSIsInNlcnZlY291bnRlcnN0cmlrZS5jb20iLCJzZXJ2ZWV4Y2hhbmdlLmNvbSIsInNlcnZlZnRwLmNvbSIsInNlcnZlZ2FtZS5jb20iLCJzZXJ2ZWhhbGZsaWZlLmNvbSIsInNlcnZlaHR0cC5jb20iLCJzZXJ2ZWh1bW91ci5jb20i''@;'; put 'put ''LCJzZXJ2ZWlyYy5jb20iLCJzZXJ2ZW1wMy5jb20iLCJzZXJ2ZXAycC5jb20iLCJzZXJ2ZXBpY3MuY29tIiwic2VydmVxdWFrZS5jb20iLCJzZXJ2ZXNhcmNhc20uY29tIiwic3R1ZmZ0b3JlYWQuY29tIiwidW51c3VhbHBlcnNvbi5jb20iLCJ3b3JraXNib3JpbmcuY29tIiwiZHZyY2FtLmlu''@;'; put 'put ''Zm8iLCJpbG92ZWNvbGxlZ2UuaW5mbyIsIm5vLWlwLmluZm8iLCJicmFzaWxpYS5tZSIsImRkbnMubWUiLCJkbnNmb3IubWUiLCJob3B0by5tZSIsImxvZ2ludG8ubWUiLCJub2lwLm1lIiwid2ViaG9wLm1lIiwiYm91bmNlbWUubmV0IiwiZGRucy5uZXQiLCJlYXRpbmctb3JnYW5pYy5uZXQi''@;'; put 'put ''LCJteWRpc3NlbnQubmV0IiwibXllZmZlY3QubmV0IiwibXltZWRpYXBjLm5ldCIsIm15cHN4Lm5ldCIsIm15c2VjdXJpdHljYW1lcmEubmV0IiwibmhsZmFuLm5ldCIsIm5vLWlwLm5ldCIsInBnYWZhbi5uZXQiLCJwcml2YXRpemVoZWFsdGhpbnN1cmFuY2UubmV0IiwicmVkaXJlY3RtZS5u''@;'; put 'put ''ZXQiLCJzZXJ2ZWJsb2cubmV0Iiwic2VydmVtaW5lY3JhZnQubmV0Iiwic3l0ZXMubmV0IiwiY2FibGUtbW9kZW0ub3JnIiwiY29sbGVnZWZhbi5vcmciLCJjb3VjaHBvdGF0b2ZyaWVzLm9yZyIsImhvcHRvLm9yZyIsIm1sYmZhbi5vcmciLCJteWZ0cC5vcmciLCJteXNlY3VyaXR5Y2FtZXJh''@;'; put 'put ''Lm9yZyIsIm5mbGZhbi5vcmciLCJuby1pcC5vcmciLCJyZWFkLWJvb2tzLm9yZyIsInVmY2Zhbi5vcmciLCJ6YXB0by5vcmciLCJuby1pcC5jby51ayIsImdvbGZmYW4udXMiLCJub2lwLnVzIiwicG9pbnR0by51cyIsInN0YWdlLm5vZGVhcnQuaW8iLCIqLmRldmVsb3Blci5hcHAiLCJub29w''@;'; put 'put ''LmFwcCIsIioubm9ydGhmbGFuay5hcHAiLCIqLmJ1aWxkLnJ1biIsIiouY29kZS5ydW4iLCIqLmRhdGFiYXNlLnJ1biIsIioubWlncmF0aW9uLnJ1biIsIm5vdGljZWFibGUubmV3cyIsIm5vdGlvbi5zaXRlIiwiZG5za2luZy5jaCIsIm15cGkuY28iLCJuNHQuY28iLCIwMDF3d3cuY29tIiwi''@;'; put 'put ''bXlpcGhvc3QuY29tIiwiZm9ydW16LmluZm8iLCJzb3VuZGNhc3QubWUiLCJ0Y3A0Lm1lIiwiZG5zdXAubmV0IiwiaGljYW0ubmV0Iiwibm93LWRucy5uZXQiLCJvd25pcC5uZXQiLCJ2cG5kbnMubmV0IiwiZHluc2Vydi5vcmciLCJub3ctZG5zLm9yZyIsIng0NDMucHciLCJub3ctZG5zLnRv''@;'; put 'put ''cCIsIm50ZGxsLnRvcCIsImZyZWVkZG5zLnVzIiwibnN1cGRhdGUuaW5mbyIsIm5lcmRwb2wub3ZoIiwibnljLm1uIiwicHJ2Y3kucGFnZSIsIm9ibC5vbmciLCJvYnNlcnZhYmxlaHEuY2xvdWQiLCJzdGF0aWMub2JzZXJ2YWJsZXVzZXJjb250ZW50LmNvbSIsIm9tZy5sb2wiLCJjbG91ZHlj''@;'; put 'put ''bHVzdGVyLm5ldCIsIm9tbml3ZS5zaXRlIiwiMTIzd2Vic2VpdGUuYXQiLCIxMjN3ZWJzaXRlLmJlIiwic2ltcGxlc2l0ZS5jb20uYnIiLCIxMjN3ZWJzaXRlLmNoIiwic2ltcGxlc2l0ZS5jb20iLCIxMjN3ZWJzZWl0ZS5kZSIsIjEyM2hqZW1tZXNpZGUuZGsiLCIxMjNtaXdlYi5lcyIsIjEy''@;'; put 'put ''M2tvdGlzaXZ1LmZpIiwiMTIzc2l0ZXdlYi5mciIsInNpbXBsZXNpdGUuZ3IiLCIxMjNob21lcGFnZS5pdCIsIjEyM3dlYnNpdGUubHUiLCIxMjN3ZWJzaXRlLm5sIiwiMTIzaGplbW1lc2lkZS5ubyIsInNlcnZpY2Uub25lIiwic2ltcGxlc2l0ZS5wbCIsIjEyM3BhZ2luYXdlYi5wdCIsIjEy''@;'; put 'put ''M21pbnNpZGEuc2UiLCJpcy1hLWZ1bGxzdGFjay5kZXYiLCJpcy1jb29sLmRldiIsImlzLW5vdC1hLmRldiIsImxvY2FscGxheWVyLmRldiIsImlzLWxvY2FsLm9yZyIsIm9wZW5zb2NpYWwuc2l0ZSIsIm9wZW5jcmFmdC5ob3N0aW5nIiwiMTYtYi5pdCIsIjMyLWIuaXQiLCI2NC1iLml0Iiwi''@;'; put 'put ''b3JzaXRlcy5jb20iLCJvcGVyYXVuaXRlLmNvbSIsIiouY3VzdG9tZXItb2NpLmNvbSIsIioub2NpLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcC5jdXN0b21lci1vY2kuY29tIiwiKi5vY3MuY3VzdG9tZXItb2NpLmNvbSIsIioub3JhY2xlY2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xv''@;'; put 'put ''dWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRhcHBzLnVrIiwidGVjaC5vcmFuZ2UiLCJjYW4ucmUiLCJhdXRoZ2Vhci1zdGFnaW5nLmNvbSIsImF1dGhnZWFyYXBwcy5jb20iLCJza3lnZWFyYXBwLmNvbSIsIm91dHN5c3RlbXNjbG91ZC5jb20iLCIqLmhvc3Rpbmcub3ZoLm5ldCIsIiou''@;'; put 'put ''d2VicGFhcy5vdmgubmV0Iiwib3ducHJvdmlkZXIuY29tIiwib3duLnBtIiwiKi5vd28uY29kZXMiLCJveC5ycyIsIm95LmxjIiwicGdmb2cuY29tIiwicGFnZXhsLmNvbSIsImdvdHBhbnRoZW9uLmNvbSIsInBhbnRoZW9uc2l0ZS5pbyIsIioucGF5d2hpcmwuY29tIiwiKi54bWl0LmNvIiwi''@;'; put 'put ''eG1pdC5kZXYiLCJtYWRldGhpcy5zaXRlIiwic3J2LnVzIiwiZ2guc3J2LnVzIiwiZ2wuc3J2LnVzIiwibGszLnJ1IiwibXlwZXAubGluayIsInBlcnNwZWN0YS5jbG91ZCIsIm9uLXdlYi5mciIsIioudXBzdW4uYXBwIiwidXBzdW5hcHAuY29tIiwiZW50LnBsYXRmb3JtLnNoIiwiZXUucGxh''@;'; put 'put ''dGZvcm0uc2giLCJ1cy5wbGF0Zm9ybS5zaCIsIioucGxhdGZvcm1zaC5zaXRlIiwiKi50c3Quc2l0ZSIsInBsYXR0ZXItYXBwLmNvbSIsInBsYXR0ZXItYXBwLmRldiIsInBsYXR0ZXJwLnVzIiwicGxleS5nYW1lcyIsIm9ucG9ydGVyLnJ1biIsImNvLmJuIiwicG9zdG1hbi1lY2hvLmNvbSIs''@;'; put 'put ''InBzdG1uLmlvIiwibW9jay5wc3Rtbi5pbyIsImh0dHBiaW4ub3JnIiwicHJlcXVhbGlmeW1lLnRvZGF5IiwieGVuLnByZ21yLmNvbSIsInByaXYuYXQiLCJwcm90b25ldC5pbyIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy1lbi1mcmFuY2UuZnIiLCJieWVuLnNpdGUiLCJwdWJ0bHMub3JnIiwi''@;'; put 'put ''cHl0aG9uYW55d2hlcmUuY29tIiwiZXUucHl0aG9uYW55d2hlcmUuY29tIiwicWEyLmNvbSIsInFjeC5pbyIsIiouc3lzLnFjeC5pbyIsIm15cW5hcGNsb3VkLmNuIiwiYWxwaGEtbXlxbmFwY2xvdWQuY29tIiwiZGV2LW15cW5hcGNsb3VkLmNvbSIsIm15Y2xvdWRuYXMuY29tIiwibXluYXNj''@;'; put 'put ''bG91ZC5jb20iLCJteXFuYXBjbG91ZC5jb20iLCJxb3RvLmlvIiwicXVhbGlmaW9hcHAuY29tIiwibGFkZXNrLmNvbSIsInFidXNlci5jb20iLCIqLnF1aXBlbGVtZW50cy5jb20iLCJ2YXBvci5jbG91ZCIsInZhcG9yY2xvdWQuaW8iLCJyYWNrbWF6ZS5jb20iLCJyYWNrbWF6ZS5uZXQiLCJj''@;'; put 'put ''bG91ZHNpdGUuYnVpbGRlcnMiLCJteXJhZHdlYi5uZXQiLCJzZXJ2ZXJuYW1lLnVzIiwid2ViLmluIiwiaW4ubmV0IiwibXlyZGJ4LmlvIiwic2l0ZS5yYi1ob3N0aW5nLmlvIiwiKi5vbi1yYW5jaGVyLmNsb3VkIiwiKi5vbi1rM3MuaW8iLCIqLm9uLXJpby5pbyIsInJhdnBhZ2UuY28uaWwi''@;'; put 'put ''LCJyZWFkdGhlZG9jcy1ob3N0ZWQuY29tIiwicmVhZHRoZWRvY3MuaW8iLCJyaGNsb3VkLmNvbSIsImluc3RhbmNlcy5zcGF3bi5jYyIsIm9ucmVuZGVyLmNvbSIsImFwcC5yZW5kZXIuY29tIiwicmVwbGl0LmFwcCIsImlkLnJlcGxpdC5hcHAiLCJmaXJld2FsbGVkcmVwbGl0LmNvIiwiaWQu''@;'; put 'put ''ZmlyZXdhbGxlZHJlcGxpdC5jbyIsInJlcGwuY28iLCJpZC5yZXBsLmNvIiwicmVwbGl0LmRldiIsImFyY2hlci5yZXBsaXQuZGV2IiwiYm9uZXMucmVwbGl0LmRldiIsImNhbmFyeS5yZXBsaXQuZGV2IiwiZ2xvYmFsLnJlcGxpdC5kZXYiLCJoYWNrZXIucmVwbGl0LmRldiIsImlkLnJlcGxp''@;'; put 'put ''dC5kZXYiLCJqYW5ld2F5LnJlcGxpdC5kZXYiLCJraW0ucmVwbGl0LmRldiIsImtpcmEucmVwbGl0LmRldiIsImtpcmsucmVwbGl0LmRldiIsIm9kby5yZXBsaXQuZGV2IiwicGFyaXMucmVwbGl0LmRldiIsInBpY2FyZC5yZXBsaXQuZGV2IiwicGlrZS5yZXBsaXQuZGV2IiwicHJlcmVsZWFz''@;'; put 'put ''ZS5yZXBsaXQuZGV2IiwicmVlZC5yZXBsaXQuZGV2IiwicmlrZXIucmVwbGl0LmRldiIsInNpc2tvLnJlcGxpdC5kZXYiLCJzcG9jay5yZXBsaXQuZGV2Iiwic3RhZ2luZy5yZXBsaXQuZGV2Iiwic3VsdS5yZXBsaXQuZGV2IiwidGFycGl0LnJlcGxpdC5kZXYiLCJ0ZWFtcy5yZXBsaXQuZGV2''@;'; put 'put ''IiwidHVja2VyLnJlcGxpdC5kZXYiLCJ3ZXNsZXkucmVwbGl0LmRldiIsIndvcmYucmVwbGl0LmRldiIsInJlcGwucnVuIiwicmVzaW5kZXZpY2UuaW8iLCJkZXZpY2VzLnJlc2luc3RhZ2luZy5pbyIsImh6Yy5pbyIsImFkaW1vLmNvLnVrIiwiaXRjb3VsZGJld29yLnNlIiwiYXVzLmJhc2tl''@;'; put 'put ''dGJhbGwiLCJuei5iYXNrZXRiYWxsIiwiZ2l0LXBhZ2VzLnJpdC5lZHUiLCJyb2NreS5wYWdlIiwicnViLmRlIiwicnVoci11bmktYm9jaHVtLmRlIiwiaW8ubm9jLnJ1aHItdW5pLWJvY2h1bS5kZSIsIlx1MDQzMVx1MDQzOFx1MDQzNy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0''@;'; put 'put ''M2VcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQzOFx1MDQ0MC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0NDFcdTA0M2EuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNlXHUw''@;'; put 'put ''NDQwXHUwNDMzLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzMFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQzMC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2VcdTA0NDdcdTA0MzguXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNmXHUwNDMxLlx1MDQ0MFx1MDQ0''@;'; put 'put ''M1x1MDQ0MSIsIlx1MDQ0Zi5cdTA0NDBcdTA0NDNcdTA0NDEiLCJyYXMucnUiLCJueWF0LmFwcCIsIjE4MHIuY29tIiwiZG9qaW4uY29tIiwic2FrdXJhdGFuLmNvbSIsInNha3VyYXdlYi5jb20iLCJ4MC5jb20iLCIyLWQuanAiLCJib25hLmpwIiwiY3JhcC5qcCIsImRheW5pZ2h0LmpwIiwi''@;'; put 'put ''ZWVrLmpwIiwiZmxvcC5qcCIsImhhbGZtb29uLmpwIiwiamVlei5qcCIsIm1hdHJpeC5qcCIsIm1pbW96YS5qcCIsIml2b3J5Lm5lLmpwIiwibWFpbC1ib3gubmUuanAiLCJtaW50cy5uZS5qcCIsIm1va3VyZW4ubmUuanAiLCJvcGFsLm5lLmpwIiwic2FrdXJhLm5lLmpwIiwic3Vtb21vLm5l''@;'; put 'put ''LmpwIiwidG9wYXoubmUuanAiLCJuZXRnYW1lcnMuanAiLCJueWFudGEuanAiLCJvMG8wLmpwIiwicmR5LmpwIiwicmdyLmpwIiwicnVsZXouanAiLCJzMy5pc2swMS5zYWt1cmFzdG9yYWdlLmpwIiwiczMuaXNrMDIuc2FrdXJhc3RvcmFnZS5qcCIsInNhbG9vbi5qcCIsInNibG8uanAiLCJz''@;'; put 'put ''a3IuanAiLCJ0YW5rLmpwIiwidWgtb2guanAiLCJ1bmRvLmpwIiwicnMud2ViYWNjZWwuanAiLCJ1c2VyLndlYmFjY2VsLmpwIiwid2Vic296YWkuanAiLCJ4aWkuanAiLCJzcXVhcmVzLm5ldCIsImpwbi5vcmciLCJraXJhcmEuc3QiLCJ4MC50byIsImZyb20udHYiLCJzYWt1cmEudHYiLCIq''@;'; put 'put ''LmJ1aWxkZXIuY29kZS5jb20iLCIqLmRldi1idWlsZGVyLmNvZGUuY29tIiwiKi5zdGctYnVpbGRlci5jb2RlLmNvbSIsIiouMDAxLnRlc3QuY29kZS1idWlsZGVyLXN0Zy5wbGF0Zm9ybS5zYWxlc2ZvcmNlLmNvbSIsIiouZC5jcm0uZGV2IiwiKi53LmNybS5kZXYiLCIqLndhLmNybS5kZXYi''@;'; put 'put ''LCIqLndiLmNybS5kZXYiLCIqLndjLmNybS5kZXYiLCIqLndkLmNybS5kZXYiLCIqLndlLmNybS5kZXYiLCIqLndmLmNybS5kZXYiLCJzYW5kY2F0cy5pbyIsImxvZ29pcC5jb20iLCJsb2dvaXAuZGUiLCJmci1wYXItMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiZnItcGFyLTIuYmFyZW1ldGFs''@;'; put 'put ''LnNjdy5jbG91ZCIsIm5sLWFtcy0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJjb2NrcGl0LmZyLXBhci5zY3cuY2xvdWQiLCJmbmMuZnItcGFyLnNjdy5jbG91ZCIsImZ1bmN0aW9ucy5mbmMuZnItcGFyLnNjdy5jbG91ZCIsIms4cy5mci1wYXIuc2N3LmNsb3VkIiwibm9kZXMuazhzLmZyLXBh''@;'; put 'put ''ci5zY3cuY2xvdWQiLCJzMy5mci1wYXIuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5mci1wYXIuc2N3LmNsb3VkIiwid2htLmZyLXBhci5zY3cuY2xvdWQiLCJwcml2Lmluc3RhbmNlcy5zY3cuY2xvdWQiLCJwdWIuaW5zdGFuY2VzLnNjdy5jbG91ZCIsIms4cy5zY3cuY2xvdWQiLCJjb2NrcGl0''@;'; put 'put ''Lm5sLWFtcy5zY3cuY2xvdWQiLCJrOHMubmwtYW1zLnNjdy5jbG91ZCIsIm5vZGVzLms4cy5ubC1hbXMuc2N3LmNsb3VkIiwiczMubmwtYW1zLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUubmwtYW1zLnNjdy5jbG91ZCIsIndobS5ubC1hbXMuc2N3LmNsb3VkIiwiY29ja3BpdC5wbC13YXcuc2N3''@;'; put 'put ''LmNsb3VkIiwiazhzLnBsLXdhdy5zY3cuY2xvdWQiLCJub2Rlcy5rOHMucGwtd2F3LnNjdy5jbG91ZCIsInMzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLnBsLXdhdy5zY3cuY2xvdWQiLCJzY2FsZWJvb2suc2N3LmNsb3VkIiwic21hcnRsYWJlbGluZy5zY3cuY2xvdWQiLCJkZWRp''@;'; put 'put ''Ym94LmZyIiwic2Nob2tva2Vrcy5uZXQiLCJnb3Yuc2NvdCIsInNlcnZpY2UuZ292LnNjb3QiLCJzY3J5c2VjLmNvbSIsImNsaWVudC5zY3J5cHRlZC5pbyIsImZpcmV3YWxsLWdhdGV3YXkuY29tIiwiZmlyZXdhbGwtZ2F0ZXdheS5kZSIsIm15LWdhdGV3YXkuZGUiLCJteS1yb3V0ZXIuZGUi''@;'; put 'put ''LCJzcGRucy5kZSIsInNwZG5zLmV1IiwiZmlyZXdhbGwtZ2F0ZXdheS5uZXQiLCJteS1maXJld2FsbC5vcmciLCJteWZpcmV3YWxsLm9yZyIsInNwZG5zLm9yZyIsInNlaWRhdC5uZXQiLCJzZWxsZnkuc3RvcmUiLCJtaW5pc2l0ZS5tcyIsInNlbnNlZXJpbmcubmV0Iiwic2VydmVib2x0LmNs''@;'; put 'put ''b3VkIiwiYml6LnVhIiwiY28udWEiLCJwcC51YSIsImFzLnNoLmNuIiwic2hlZXp5LmdhbWVzIiwic2hpZnRlZGl0LmlvIiwibXlzaG9wYmxvY2tzLmNvbSIsIm15c2hvcGlmeS5jb20iLCJzaG9waXRzaXRlLmNvbSIsInNob3B3YXJlLnNob3AiLCJzaG9wd2FyZS5zdG9yZSIsIm1vLXNpZW1l''@;'; put 'put ''bnMuaW8iLCIxa2FwcC5jb20iLCJhcHBjaGl6aS5jb20iLCJhcHBsaW56aS5jb20iLCJzaW5hYXBwLmNvbSIsInZpcHNpbmFhcHAuY29tIiwic2l0ZWxlYWYubmV0Iiwic21hbGwtd2ViLm9yZyIsImFlcm9wb3J0LmZyIiwiYXZvY2F0LmZyIiwiY2hhbWJhZ3JpLmZyIiwiY2hpcnVyZ2llbnMt''@;'; put 'put ''ZGVudGlzdGVzLmZyIiwiZXhwZXJ0cy1jb21wdGFibGVzLmZyIiwibWVkZWNpbi5mciIsIm5vdGFpcmVzLmZyIiwicGhhcm1hY2llbi5mciIsInBvcnQuZnIiLCJ2ZXRlcmluYWlyZS5mciIsInZwNC5tZSIsIiouc25vd2ZsYWtlLmFwcCIsIioucHJpdmF0ZWxpbmsuc25vd2ZsYWtlLmFwcCIs''@;'; put 'put ''InN0cmVhbWxpdC5hcHAiLCJzdHJlYW1saXRhcHAuY29tIiwidHJ5LXNub3dwbG93LmNvbSIsIm1hZmVsby5uZXQiLCJwbGF5c3RhdGlvbi1jbG91ZC5jb20iLCJzcmh0LnNpdGUiLCJhcHBzLmxhaXIuaW8iLCIqLnN0b2xvcy5pbyIsInNwYWNla2l0LmlvIiwiaW5kLm1vbSIsImN1c3RvbWVy''@;'; put 'put ''LnNwZWVkcGFydG5lci5kZSIsIm15c3ByZWFkc2hvcC5hdCIsIm15c3ByZWFkc2hvcC5jb20uYXUiLCJteXNwcmVhZHNob3AuYmUiLCJteXNwcmVhZHNob3AuY2EiLCJteXNwcmVhZHNob3AuY2giLCJteXNwcmVhZHNob3AuY29tIiwibXlzcHJlYWRzaG9wLmRlIiwibXlzcHJlYWRzaG9wLmRr''@;'; put 'put ''IiwibXlzcHJlYWRzaG9wLmVzIiwibXlzcHJlYWRzaG9wLmZpIiwibXlzcHJlYWRzaG9wLmZyIiwibXlzcHJlYWRzaG9wLmllIiwibXlzcHJlYWRzaG9wLml0IiwibXlzcHJlYWRzaG9wLm5ldCIsIm15c3ByZWFkc2hvcC5ubCIsIm15c3ByZWFkc2hvcC5ubyIsIm15c3ByZWFkc2hvcC5wbCIs''@;'; put 'put ''Im15c3ByZWFkc2hvcC5zZSIsIm15c3ByZWFkc2hvcC5jby51ayIsInctY29ycC1zdGF0aWNibGl0ei5jb20iLCJ3LWNyZWRlbnRpYWxsZXNzLXN0YXRpY2JsaXR6LmNvbSIsInctc3RhdGljYmxpdHouY29tIiwic3RhY2toZXJvLW5ldHdvcmsuY29tIiwicnVucy5vbnN0YWNraXQuY2xvdWQi''@;'; put 'put ''LCJzdGFja2l0LmdnIiwic3RhY2tpdC5yb2NrcyIsInN0YWNraXQucnVuIiwic3RhY2tpdC56b25lIiwibXVzaWNpYW4uaW8iLCJub3ZlY29yZS5zaXRlIiwiYXBpLnN0ZGxpYi5jb20iLCJmZWVkYmFjay5hYyIsImZvcm1zLmFjIiwiYXNzZXNzbWVudHMuY3giLCJjYWxjdWxhdG9ycy5jeCIs''@;'; put 'put ''ImZ1bm5lbHMuY3giLCJwYXlub3cuY3giLCJxdWl6emVzLmN4IiwicmVzZWFyY2hlZC5jeCIsInRlc3RzLmN4Iiwic3VydmV5cy5zbyIsInN0b3JlYmFzZS5zdG9yZSIsInN0b3JpcHJlc3MuYXBwIiwic3RvcmouZmFybSIsInN0cmFwaWFwcC5jb20iLCJtZWRpYS5zdHJhcGlhcHAuY29tIiwi''@;'; put 'put ''dnBzLWhvc3QubmV0IiwiYXRsLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsIm5qcy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJyaWMuamVsYXN0aWMudnBzLWhvc3QubmV0Iiwic3RyZWFrLWxpbmsuY29tIiwic3RyZWFrbGlua3MuY29tIiwic3RyZWFrdXNlcmNvbnRlbnQuY29tIiwic29jLnNy''@;'; put 'put ''Y2YubmV0IiwidXNlci5zcmNmLm5ldCIsInV0d2VudGUuaW8iLCJ0ZW1wLWRucy5jb20iLCJzdXBhYmFzZS5jbyIsInN1cGFiYXNlLmluIiwic3VwYWJhc2UubmV0Iiwic3luY2xvdWQuaXQiLCJkc2Nsb3VkLmJpeiIsImRpcmVjdC5xdWlja2Nvbm5lY3QuY24iLCJkc215bmFzLmNvbSIsImZh''@;'; put 'put ''bWlseWRzLmNvbSIsImRpc2tzdGF0aW9uLm1lIiwiZHNjbG91ZC5tZSIsImkyMzQubWUiLCJteWRzLm1lIiwic3lub2xvZ3kubWUiLCJkc2Nsb3VkLm1vYmkiLCJkc215bmFzLm5ldCIsImZhbWlseWRzLm5ldCIsImRzbXluYXMub3JnIiwiZmFtaWx5ZHMub3JnIiwiZGlyZWN0LnF1aWNrY29u''@;'; put 'put ''bmVjdC50byIsInZwbnBsdXMudG8iLCJteXRhYml0LmNvbSIsIm15dGFiaXQuY28uaWwiLCJ0YWJpdG9yZGVyLmNvLmlsIiwidGFpZnVuLWRucy5kZSIsInRzLm5ldCIsIiouYy50cy5uZXQiLCJnZGEucGwiLCJnZGFuc2sucGwiLCJnZHluaWEucGwiLCJtZWQucGwiLCJzb3BvdC5wbCIsInRh''@;'; put 'put ''dmV1c2VyY29udGVudC5jb20iLCJwLnRhd2suZW1haWwiLCJwLnRhd2t0by5lbWFpbCIsInNpdGUudGItaG9zdGluZy5jb20iLCJlZHVnaXQuaW8iLCJzMy50ZWNraWRzLm9yZyIsInRlbGViaXQuYXBwIiwidGVsZWJpdC5pbyIsIioudGVsZWJpdC54eXoiLCIqLmZpcmVuZXQuY2giLCIqLnN2''@;'; put 'put ''Yy5maXJlbmV0LmNoIiwicmVzZXJ2ZC5jb20iLCJ0aGluZ2R1c3RkYXRhLmNvbSIsImN1c3QuZGV2LnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGV2LnRoaW5nZHVzdC5pbyIsImN1c3QuZGlzcmVjLnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGlzcmVjLnRoaW5nZHVzdC5pbyIsImN1c3QucHJv''@;'; put 'put ''ZC50aGluZ2R1c3QuaW8iLCJjdXN0LnRlc3RpbmcudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInRpY2tldHMuaW8iLCJhcnZvLm5ldHdvcmsiLCJhemltdXRoLm5ldHdvcmsiLCJ0bG9uLm5ldHdvcmsiLCJ0b3Jwcm9qZWN0Lm5ldCIsInBhZ2VzLnRvcnBy''@;'; put 'put ''b2plY3QubmV0IiwidG93bm5ld3Mtc3RhZ2luZy5jb20iLCIxMmhwLmF0IiwiMml4LmF0IiwiNGxpbWEuYXQiLCJsaW1hLWNpdHkuYXQiLCIxMmhwLmNoIiwiMml4LmNoIiwiNGxpbWEuY2giLCJsaW1hLWNpdHkuY2giLCJ0cmFmZmljcGxleC5jbG91ZCIsImRlLmNvb2wiLCIxMmhwLmRlIiwi''@;'; put 'put ''Mml4LmRlIiwiNGxpbWEuZGUiLCJsaW1hLWNpdHkuZGUiLCIxMzM3LnBpY3R1cmVzIiwiY2xhbi5yaXAiLCJsaW1hLWNpdHkucm9ja3MiLCJ3ZWJzcGFjZS5yb2NrcyIsImxpbWEuem9uZSIsIioudHJhbnN1cmwuYmUiLCIqLnRyYW5zdXJsLmV1Iiwic2l0ZS50cmFuc2lwLm1lIiwiKi50cmFu''@;'; put 'put ''c3VybC5ubCIsInR1eGZhbWlseS5vcmciLCJkZC1kbnMuZGUiLCJkcmF5LWRucy5kZSIsImRyYXlkbnMuZGUiLCJkeW4tdnBuLmRlIiwiZHludnBuLmRlIiwibWVpbi12aWdvci5kZSIsIm15LXZpZ29yLmRlIiwibXktd2FuLmRlIiwic3luby1kcy5kZSIsInN5bm9sb2d5LWRpc2tzdGF0aW9u''@;'; put 'put ''LmRlIiwic3lub2xvZ3ktZHMuZGUiLCJkaXNrc3RhdGlvbi5ldSIsImRpc2tzdGF0aW9uLm9yZyIsInR5cGVkcmVhbS5hcHAiLCJwcm8udHlwZWZvcm0uY29tIiwiKi51YmVyc3BhY2UuZGUiLCJ1YmVyLnNwYWNlIiwiaGsuY29tIiwiaW5jLmhrIiwibHRkLmhrIiwiaGsub3JnIiwiaXQuY29t''@;'; put 'put ''IiwidW5pc29uLXNlcnZpY2VzLmNsb3VkIiwidmlydHVhbC11c2VyLmRlIiwidmlydHVhbHVzZXIuZGUiLCJuYW1lLnBtIiwic2NoLnRmIiwiYml6LndmIiwic2NoLndmIiwib3JnLnl0IiwicnMuYmEiLCJiaWVsc2tvLnBsIiwidXBsaS5pbyIsInVyb3duLmNsb3VkIiwiZG5zdXBkYXRlLmlu''@;'; put 'put ''Zm8iLCJ1cy5vcmciLCJ2LnVhIiwiZXhwcmVzcy52YWwucnVuIiwid2ViLnZhbC5ydW4iLCJ2ZXJjZWwuYXBwIiwidjAuYnVpbGQiLCJ2ZXJjZWwuZGV2IiwidnVzZXJjb250ZW50Lm5ldCIsIm5vdy5zaCIsIjIwMzguaW8iLCJyb3V0ZXIubWFuYWdlbWVudCIsInYtaW5mby5pbmZvIiwidm9v''@;'; put 'put ''cmxvcGVyLmNsb3VkIiwiKi52dWx0cm9iamVjdHMuY29tIiwid2FmZmxlY2VsbC5jb20iLCJ3ZWJmbG93LmlvIiwid2ViZmxvd3Rlc3QuaW8iLCIqLndlYmhhcmUuZGV2IiwiYm9va29ubGluZS5hcHAiLCJob3RlbHdpdGhmbGlnaHQuY29tIiwicmVzZXJ2ZS1vbmxpbmUuY29tIiwicmVzZXJ2''@;'; put 'put ''ZS1vbmxpbmUubmV0IiwiY3ByYXBpZC5jb20iLCJwbGVza25zLmNvbSIsIndwMi5ob3N0IiwicGRucy5wYWdlIiwicGxlc2sucGFnZSIsIndwc3F1YXJlZC5zaXRlIiwiKi53YWRsLnRvcCIsInJlbW90ZXdkLmNvbSIsImJveC5jYSIsInBhZ2VzLndpYXJkd2ViLmNvbSIsInRvb2xmb3JnZS5v''@;'; put 'put ''cmciLCJ3bWNsb3VkLm9yZyIsIndtZmxhYnMub3JnIiwid2RoLmFwcCIsInBhbmVsLmdnIiwiZGFlbW9uLnBhbmVsLmdnIiwid2l4c2l0ZS5jb20iLCJ3aXhzdHVkaW8uY29tIiwiZWRpdG9yeC5pbyIsIndpeHN0dWRpby5pbyIsIndpeC5ydW4iLCJtZXNzd2l0aGRucy5jb20iLCJ3b2x0bGFi''@;'; put 'put ''LWRlbW8uY29tIiwibXlmb3J1bS5jb21tdW5pdHkiLCJjb21tdW5pdHktcHJvLmRlIiwiZGlza3Vzc2lvbnNiZXJlaWNoLmRlIiwiY29tbXVuaXR5LXByby5uZXQiLCJtZWluZm9ydW0ubmV0IiwiYWZmaW5pdHlsb3R0ZXJ5Lm9yZy51ayIsInJhZmZsZWVudHJ5Lm9yZy51ayIsIndlZWtseWxv''@;'; put 'put ''dHRlcnkub3JnLnVrIiwid3BlbmdpbmVwb3dlcmVkLmNvbSIsImpzLndwZW5naW5lcG93ZXJlZC5jb20iLCJoYWxmLmhvc3QiLCJ4bmJheS5jb20iLCJ1Mi54bmJheS5jb20iLCJ1Mi1sb2NhbC54bmJheS5jb20iLCJjaXN0cm9uLm5sIiwiZGVtb24ubmwiLCJ4czRhbGwuc3BhY2UiLCJ5YW5k''@;'; put 'put ''ZXhjbG91ZC5uZXQiLCJzdG9yYWdlLnlhbmRleGNsb3VkLm5ldCIsIndlYnNpdGUueWFuZGV4Y2xvdWQubmV0Iiwib2ZmaWNpYWwuYWNhZGVteSIsInlvbGFzaXRlLmNvbSIsInlvbWJvLm1lIiwieW5oLmZyIiwibm9ob3N0Lm1lIiwibm9oby5zdCIsInphLm5ldCIsInphLm9yZyIsInphcC5j''@;'; put 'put ''bG91ZCIsInplYWJ1ci5hcHAiLCJic3MuZGVzaWduIiwiYmFzaWNzZXJ2ZXIuaW8iLCJ2aXJ0dWFsc2VydmVyLmlvIiwiZW50ZXJwcmlzZWNsb3VkLm51Il0ucmVkdWNlKChZLHEpPT57Y29uc3QgZWU9cS5yZXBsYWNlKC9eKFwqXC58XCEpLywiIiksSj13LnRvQVNDSUkoZWUpLG5lPXEuY2hh''@;'; put 'put ''ckF0KDApO2lmKFkuaGFzKEopKXRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgcnVsZXMgZm91bmQgZm9yICR7cX0gKCR7Sn0pYCk7cmV0dXJuIFkuc2V0KEose3J1bGU6cSxzdWZmaXg6ZWUscHVueVN1ZmZpeDpKLHdpbGRjYXJkOiIqIj09PW5lLGV4Y2VwdGlvbjoiISI9PT1uZX0pLFl9LG5l''@;'; put 'put ''dyBNYXApLHo9e0RPTUFJTl9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIHRvbyBzaG9ydC4iLERPTUFJTl9UT09fTE9ORzoiRG9tYWluIG5hbWUgdG9vIGxvbmcuIEl0IHNob3VsZCBiZSBubyBtb3JlIHRoYW4gMjU1IGNoYXJzLiIsTEFCRUxfU1RBUlRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUg''@;'; put 'put ''bGFiZWwgY2FuIG5vdCBzdGFydCB3aXRoIGEgZGFzaC4iLExBQkVMX0VORFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IGVuZCB3aXRoIGEgZGFzaC4iLExBQkVMX1RPT19MT05HOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbW9zdCA2MyBjaGFycyBsb25n''@;'; put 'put ''LiIsTEFCRUxfVE9PX1NIT1JUOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbGVhc3QgMSBjaGFyYWN0ZXIgbG9uZy4iLExBQkVMX0lOVkFMSURfQ0hBUlM6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgZGFzaGVz''@;'; put 'put ''LiJ9LEw9WT0+e2lmKCJzdHJpbmciIT10eXBlb2YgWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEb21haW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLiIpO2xldCBxPVkuc2xpY2UoMCkudG9Mb3dlckNhc2UoKTsiLiI9PT1xLmNoYXJBdChxLmxlbmd0aC0xKSYmKHE9cS5zbGljZSgwLHEubGVuZ3Ro''@;'; put 'put ''LTEpKTtjb25zdCBlZT0oWT0+e2NvbnN0IHE9dy50b0FTQ0lJKFkpO2lmKHEubGVuZ3RoPDEpcmV0dXJuIkRPTUFJTl9UT09fU0hPUlQiO2lmKHEubGVuZ3RoPjI1NSlyZXR1cm4iRE9NQUlOX1RPT19MT05HIjtjb25zdCBlZT1xLnNwbGl0KCIuIik7bGV0IEo7Zm9yKGxldCBuZT0wO25lPGVl''@;'; put 'put ''Lmxlbmd0aDsrK25lKXtpZihKPWVlW25lXSwhSi5sZW5ndGgpcmV0dXJuIkxBQkVMX1RPT19TSE9SVCI7aWYoSi5sZW5ndGg+NjMpcmV0dXJuIkxBQkVMX1RPT19MT05HIjtpZigiLSI9PT1KLmNoYXJBdCgwKSlyZXR1cm4iTEFCRUxfU1RBUlRTX1dJVEhfREFTSCI7aWYoIi0iPT09Si5jaGFy''@;'; put 'put ''QXQoSi5sZW5ndGgtMSkpcmV0dXJuIkxBQkVMX0VORFNfV0lUSF9EQVNIIjtpZighL15bYS16MC05XC1fXSskLy50ZXN0KEopKXJldHVybiJMQUJFTF9JTlZBTElEX0NIQVJTIn19KShxKTtpZihlZSlyZXR1cm57aW5wdXQ6WSxlcnJvcjp7bWVzc2FnZTp6W2VlXSxjb2RlOmVlfX07Y29uc3Qg''@;'; put 'put ''Sj17aW5wdXQ6WSx0bGQ6bnVsbCxzbGQ6bnVsbCxkb21haW46bnVsbCxzdWJkb21haW46bnVsbCxsaXN0ZWQ6ITF9LG5lPXEuc3BsaXQoIi4iKTtpZigibG9jYWwiPT09bmVbbmUubGVuZ3RoLTFdKXJldHVybiBKO2NvbnN0IGllPSgpPT4oL3huLS0vLnRlc3QocSkmJihKLmRvbWFpbiYmKEou''@;'; put 'put ''ZG9tYWluPXcudG9BU0NJSShKLmRvbWFpbikpLEouc3ViZG9tYWluJiYoSi5zdWJkb21haW49dy50b0FTQ0lJKEouc3ViZG9tYWluKSkpLEopLGxlPShZPT57Y29uc3QgcT13LnRvQVNDSUkoWSkuc3BsaXQoIi4iKTtmb3IobGV0IGVlPTA7ZWU8cS5sZW5ndGg7ZWUrKyl7Y29uc3QgSj1xLnNs''@;'; put 'put ''aWNlKGVlKS5qb2luKCIuIiksbmU9Ri5nZXQoSik7aWYobmUpcmV0dXJuIG5lfXJldHVybiBudWxsfSkocSk7aWYoIWxlKXJldHVybiBuZS5sZW5ndGg8Mj9KOihKLnRsZD1uZS5wb3AoKSxKLnNsZD1uZS5wb3AoKSxKLmRvbWFpbj1bSi5zbGQsSi50bGRdLmpvaW4oIi4iKSxuZS5sZW5ndGgm''@;'; put 'put ''JihKLnN1YmRvbWFpbj1uZS5wb3AoKSksaWUoKSk7Si5saXN0ZWQ9ITA7Y29uc3QgbWU9bGUuc3VmZml4LnNwbGl0KCIuIiksX2U9bmUuc2xpY2UoMCxuZS5sZW5ndGgtbWUubGVuZ3RoKTtyZXR1cm4gbGUuZXhjZXB0aW9uJiZfZS5wdXNoKG1lLnNoaWZ0KCkpLEoudGxkPW1lLmpvaW4oIi4i''@;'; put 'put ''KSwhX2UubGVuZ3RofHwobGUud2lsZGNhcmQmJihtZS51bnNoaWZ0KF9lLnBvcCgpKSxKLnRsZD1tZS5qb2luKCIuIikpLCFfZS5sZW5ndGgpfHwoSi5zbGQ9X2UucG9wKCksSi5kb21haW49W0ouc2xkLEoudGxkXS5qb2luKCIuIiksX2UubGVuZ3RoJiYoSi5zdWJkb21haW49X2Uuam9pbigi''@;'; put 'put ''LiIpKSksaWUoKX0sSz1ZPT5ZJiZMKFkpLmRvbWFpbnx8bnVsbCxVPVk9Pntjb25zdCBxPUwoWSk7cmV0dXJuISghcS5kb21haW58fCFxLmxpc3RlZCl9O1guZGVmYXVsdD17cGFyc2U6TCxnZXQ6Syxpc1ZhbGlkOlV9LFguZXJyb3JDb2Rlcz16LFguZ2V0PUssWC5pc1ZhbGlkPVUsWC5wYXJz''@;'; put 'put ''ZT1MfSw0OTQ2OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5Ijox''@;'; put 'put ''OTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJt''@;'; put 'put ''b2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIs''@;'; put 'put ''InR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMy''@;'; put 'put ''NTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBo''@;'; put 'put ''ZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVT''@;'; put 'put ''Iiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtl''@;'; put 'put ''eSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5''@;'; put 'put ''MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYi''@;'; put 'put ''OjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2Rl''@;'; put 'put ''IjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwi''@;'; put 'put ''dHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1''@;'; put 'put ''dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSw1MjA3''@;'; put 'put ''OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWdu''@;'; put 'put ''IjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0''@;'; put 'put ''MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0''@;'; put 'put ''IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlw''@;'; put 'put ''dGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQw''@;'; put 'put ''MjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24i''@;'; put 'put ''OiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2gi''@;'; put 'put ''OiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lU''@;'; put 'put ''SC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNI''@;'; put 'put ''QTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1T''@;'; put 'put ''SEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdp''@;'; put 'put ''dGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1''@;'; put 'put ''V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUw''@;'; put 'put ''MDA0MTAifX0nKX0sMTMwODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYi''@;'; put 'put ''LCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LDMyMDg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7Ik9fUkRPTkxZIjowLCJPX1dST05MWSI6MSwiT19SRFdSIjoyLCJTX0lGTVQiOjYxNDQwLCJTX0lGUkVHIjozMjc2OCwi''@;'; put 'put ''U19JRkRJUiI6MTYzODQsIlNfSUZDSFIiOjgxOTIsIlNfSUZCTEsiOjI0NTc2LCJTX0lGSUZPIjo0MDk2LCJTX0lGTE5LIjo0MDk2MCwiU19JRlNPQ0siOjQ5MTUyLCJPX0NSRUFUIjo1MTIsIk9fRVhDTCI6MjA0OCwiT19OT0NUVFkiOjEzMTA3MiwiT19UUlVOQyI6MTAyNCwiT19BUFBFTkQi''@;'; put 'put ''OjgsIk9fRElSRUNUT1JZIjoxMDQ4NTc2LCJPX05PRk9MTE9XIjoyNTYsIk9fU1lOQyI6MTI4LCJPX1NZTUxJTksiOjIwOTcxNTIsIk9fTk9OQkxPQ0siOjQsIlNfSVJXWFUiOjQ0OCwiU19JUlVTUiI6MjU2LCJTX0lXVVNSIjoxMjgsIlNfSVhVU1IiOjY0LCJTX0lSV1hHIjo1NiwiU19JUkdS''@;'; put 'put ''UCI6MzIsIlNfSVdHUlAiOjE2LCJTX0lYR1JQIjo4LCJTX0lSV1hPIjo3LCJTX0lST1RIIjo0LCJTX0lXT1RIIjoyLCJTX0lYT1RIIjoxLCJFMkJJRyI6NywiRUFDQ0VTIjoxMywiRUFERFJJTlVTRSI6NDgsIkVBRERSTk9UQVZBSUwiOjQ5LCJFQUZOT1NVUFBPUlQiOjQ3LCJFQUdBSU4iOjM1''@;'; put 'put ''LCJFQUxSRUFEWSI6MzcsIkVCQURGIjo5LCJFQkFETVNHIjo5NCwiRUJVU1kiOjE2LCJFQ0FOQ0VMRUQiOjg5LCJFQ0hJTEQiOjEwLCJFQ09OTkFCT1JURUQiOjUzLCJFQ09OTlJFRlVTRUQiOjYxLCJFQ09OTlJFU0VUIjo1NCwiRURFQURMSyI6MTEsIkVERVNUQUREUlJFUSI6MzksIkVET00i''@;'; put 'put ''OjMzLCJFRFFVT1QiOjY5LCJFRVhJU1QiOjE3LCJFRkFVTFQiOjE0LCJFRkJJRyI6MjcsIkVIT1NUVU5SRUFDSCI6NjUsIkVJRFJNIjo5MCwiRUlMU0VRIjo5MiwiRUlOUFJPR1JFU1MiOjM2LCJFSU5UUiI6NCwiRUlOVkFMIjoyMiwiRUlPIjo1LCJFSVNDT05OIjo1NiwiRUlTRElSIjoyMSwi''@;'; put 'put ''RUxPT1AiOjYyLCJFTUZJTEUiOjI0LCJFTUxJTksiOjMxLCJFTVNHU0laRSI6NDAsIkVNVUxUSUhPUCI6OTUsIkVOQU1FVE9PTE9ORyI6NjMsIkVORVRET1dOIjo1MCwiRU5FVFJFU0VUIjo1MiwiRU5FVFVOUkVBQ0giOjUxLCJFTkZJTEUiOjIzLCJFTk9CVUZTIjo1NSwiRU5PREFUQSI6OTYs''@;'; put 'put ''IkVOT0RFViI6MTksIkVOT0VOVCI6MiwiRU5PRVhFQyI6OCwiRU5PTENLIjo3NywiRU5PTElOSyI6OTcsIkVOT01FTSI6MTIsIkVOT01TRyI6OTEsIkVOT1BST1RPT1BUIjo0MiwiRU5PU1BDIjoyOCwiRU5PU1IiOjk4LCJFTk9TVFIiOjk5LCJFTk9TWVMiOjc4LCJFTk9UQ09OTiI6NTcsIkVO''@;'; put 'put ''T1RESVIiOjIwLCJFTk9URU1QVFkiOjY2LCJFTk9UU09DSyI6MzgsIkVOT1RTVVAiOjQ1LCJFTk9UVFkiOjI1LCJFTlhJTyI6NiwiRU9QTk9UU1VQUCI6MTAyLCJFT1ZFUkZMT1ciOjg0LCJFUEVSTSI6MSwiRVBJUEUiOjMyLCJFUFJPVE8iOjEwMCwiRVBST1RPTk9TVVBQT1JUIjo0MywiRVBS''@;'; put 'put ''T1RPVFlQRSI6NDEsIkVSQU5HRSI6MzQsIkVST0ZTIjozMCwiRVNQSVBFIjoyOSwiRVNSQ0giOjMsIkVTVEFMRSI6NzAsIkVUSU1FIjoxMDEsIkVUSU1FRE9VVCI6NjAsIkVUWFRCU1kiOjI2LCJFV09VTERCTE9DSyI6MzUsIkVYREVWIjoxOCwiU0lHSFVQIjoxLCJTSUdJTlQiOjIsIlNJR1FV''@;'; put 'put ''SVQiOjMsIlNJR0lMTCI6NCwiU0lHVFJBUCI6NSwiU0lHQUJSVCI6NiwiU0lHSU9UIjo2LCJTSUdCVVMiOjEwLCJTSUdGUEUiOjgsIlNJR0tJTEwiOjksIlNJR1VTUjEiOjMwLCJTSUdTRUdWIjoxMSwiU0lHVVNSMiI6MzEsIlNJR1BJUEUiOjEzLCJTSUdBTFJNIjoxNCwiU0lHVEVSTSI6MTUs''@;'; put 'put ''IlNJR0NITEQiOjIwLCJTSUdDT05UIjoxOSwiU0lHU1RPUCI6MTcsIlNJR1RTVFAiOjE4LCJTSUdUVElOIjoyMSwiU0lHVFRPVSI6MjIsIlNJR1VSRyI6MTYsIlNJR1hDUFUiOjI0LCJTSUdYRlNaIjoyNSwiU0lHVlRBTFJNIjoyNiwiU0lHUFJPRiI6MjcsIlNJR1dJTkNIIjoyOCwiU0lHSU8i''@;'; put 'put ''OjIzLCJTSUdTWVMiOjEyLCJTU0xfT1BfQUxMIjoyMTQ3NDg2NzE5LCJTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OIjoyNjIxNDQsIlNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UiOjQxOTQzMDQsIlNTTF9PUF9DSVNDT19BTllDT05ORUNUIjozMjc2OCwi''@;'; put 'put ''U1NMX09QX0NPT0tJRV9FWENIQU5HRSI6ODE5MiwiU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHIjoyMTQ3NDgzNjQ4LCJTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIjoyMDQ4LCJTU0xfT1BfRVBIRU1FUkFMX1JTQSI6MCwiU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVD''@;'; put 'put ''VCI6NCwiU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSIjozMiwiU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRyI6MSwiU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkciOjAsIlNTTF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUciOjUzNjg3MDkxMiwiU1NMX09QX05FVFNDQVBF''@;'; put 'put ''X0NIQUxMRU5HRV9CVUciOjIsIlNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHIjoxMDczNzQxODI0LCJTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUciOjgsIlNTTF9PUF9OT19DT01QUkVTU0lPTiI6MTMxMDcyLCJTU0xfT1BfTk9fUVVFUllfTVRV''@;'; put 'put ''Ijo0MDk2LCJTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT04iOjY1NTM2LCJTU0xfT1BfTk9fU1NMdjIiOjE2Nzc3MjE2LCJTU0xfT1BfTk9fU1NMdjMiOjMzNTU0NDMyLCJTU0xfT1BfTk9fVElDS0VUIjoxNjM4NCwiU1NMX09QX05PX1RMU3YxIjo2NzEwODg2''@;'; put 'put ''NCwiU1NMX09QX05PX1RMU3YxXzEiOjI2ODQzNTQ1NiwiU1NMX09QX05PX1RMU3YxXzIiOjEzNDIxNzcyOCwiU1NMX09QX1BLQ1MxX0NIRUNLXzEiOjAsIlNTTF9PUF9QS0NTMV9DSEVDS18yIjowLCJTU0xfT1BfU0lOR0xFX0RIX1VTRSI6MTA0ODU3NiwiU1NMX09QX1NJTkdMRV9FQ0RIX1VT''@;'; put 'put ''RSI6NTI0Mjg4LCJTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHIjoxMjgsIlNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUciOjAsIlNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUciOjUxMiwiU1NMX09QX1RMU19ENV9CVUciOjI1NiwiU1NMX09QX1RMU19ST0xMQkFD''@;'; put 'put ''S19CVUciOjgzODg2MDgsIkVOR0lORV9NRVRIT0RfRFNBIjoyLCJFTkdJTkVfTUVUSE9EX0RIIjo0LCJFTkdJTkVfTUVUSE9EX1JBTkQiOjgsIkVOR0lORV9NRVRIT0RfRUNESCI6MTYsIkVOR0lORV9NRVRIT0RfRUNEU0EiOjMyLCJFTkdJTkVfTUVUSE9EX0NJUEhFUlMiOjY0LCJFTkdJTkVf''@;'; put 'put ''TUVUSE9EX0RJR0VTVFMiOjEyOCwiRU5HSU5FX01FVEhPRF9TVE9SRSI6MjU2LCJFTkdJTkVfTUVUSE9EX1BLRVlfTUVUSFMiOjUxMiwiRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFMiOjEwMjQsIkVOR0lORV9NRVRIT0RfQUxMIjo2NTUzNSwiRU5HSU5FX01FVEhPRF9OT05FIjowLCJE''@;'; put 'put ''SF9DSEVDS19QX05PVF9TQUZFX1BSSU1FIjoyLCJESF9DSEVDS19QX05PVF9QUklNRSI6MSwiREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUiI6NCwiREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUiI6OCwiTlBOX0VOQUJMRUQiOjEsIlJTQV9QS0NTMV9QQURESU5HIjoxLCJSU0FfU1NMVjIz''@;'; put 'put ''X1BBRERJTkciOjIsIlJTQV9OT19QQURESU5HIjozLCJSU0FfUEtDUzFfT0FFUF9QQURESU5HIjo0LCJSU0FfWDkzMV9QQURESU5HIjo1LCJSU0FfUEtDUzFfUFNTX1BBRERJTkciOjYsIlBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCI6MiwiUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNT''@;'; put 'put ''RUQiOjQsIlBPSU5UX0NPTlZFUlNJT05fSFlCUklEIjo2LCJGX09LIjowLCJSX09LIjo0LCJXX09LIjoyLCJYX09LIjoxLCJVVl9VRFBfUkVVU0VBRERSIjo0fScpfSw5Nzk5OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIsInBy''@;'; put 'put ''aW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2Vj''@;'; put 'put ''NmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1''@;'; put 'put ''MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHA1''@;'; put 'put ''Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMy''@;'; put 'put ''NDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2''@;'; put 'put ''MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUw''@;'; put 'put ''ODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRi''@;'; put 'put ''MWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2Jl''@;'; put 'put ''MzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2''@;'; put 'put ''MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2''@;'; put 'put ''ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMz''@;'; put 'put ''MTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgx''@;'; put 'put ''NzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhj''@;'; put 'put ''MjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVl''@;'; put 'put ''Mzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMw''@;'; put 'put ''OGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFj''@;'; put 'put ''YmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3''@;'; put 'put ''NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZj''@;'; put 'put ''MTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmYifSwibW9kcDE3Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQz''@;'; put 'put ''NzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1''@;'; put 'put ''NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2Nl''@;'; put 'put ''YTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVl''@;'; put 'put ''NmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTlj''@;'; put 'put ''MzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3''@;'; put 'put ''ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4''@;'; put 'put ''OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5''@;'; put 'put ''ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2Yzll''@;'; put 'put ''YzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBk''@;'; put 'put ''YzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1''@;'; put 'put ''YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1''@;'; put 'put ''ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4''@;'; put 'put ''ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZl''@;'; put 'put ''MjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdj''@;'; put 'put ''NTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2''@;'; put 'put ''MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2Qy''@;'; put 'put ''YmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRj''@;'; put 'put ''YzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZm''@;'; put 'put ''MTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3''@;'; put 'put ''YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5''@;'; put 'put ''YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBk''@;'; put 'put ''ZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZiJ9fScpfSw4NTk3OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9e2k4OiI2LjYuMSJ9fSwyNTYyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2Ii''@;'; put 'put ''LCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44''@;'; put 'put ''NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEu''@;'; put 'put ''MTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9Jyl9fSxfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX19uZXN0ZWRfd2VicGFj''@;'; put 'put ''a19yZXF1aXJlXzI4OTQ5MDJfXyh1ZSl7dmFyIFg9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW3VlXTtpZih2b2lkIDAhPT1YKXJldHVybiBYLmV4cG9ydHM7dmFyIHk9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW3VlXT17aWQ6dWUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBfX3dl''@;'; put 'put ''YnBhY2tfbW9kdWxlc19fW3VlXS5jYWxsKHkuZXhwb3J0cyx5LHkuZXhwb3J0cyxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fKSx5LmxvYWRlZD0hMCx5LmV4cG9ydHN9X19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDJfXy5kPSh1ZSxYKT0+e2Zvcih2YXIgeSBpbiBY''@;'; put 'put ''KV9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTAyX18ubyhYLHkpJiYhX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDJfXy5vKHVlLHkpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodWUseSx7ZW51bWVyYWJsZTohMCxnZXQ6WFt5XX0pfSxfX25lc3RlZF93ZWJwYWNrX3JlcXVp''@;'; put 'put ''cmVfMjg5NDkwMl9fLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaHtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2lu''@;'; put 'put ''ZG93fX0oKSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fLm89KHVlLFgpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodWUsWCksX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDJfXy5yPXVlPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50''@;'; put 'put ''b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fLm5tZD11''@;'; put 'put ''ZT0+KHVlLnBhdGhzPVtdLHVlLmNoaWxkcmVufHwodWUuY2hpbGRyZW49W10pLHVlKTt2YXIgX19uZXN0ZWRfd2VicGFja19leHBvcnRzX189X19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDJfXygzNjA3KTtyZXR1cm4gX19uZXN0ZWRfd2VicGFja19leHBvcnRzX199KSgpLG1vZHVs''@;'; put 'put ''ZS5leHBvcnRzPXkoKX0sNTk0ODpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRil7cmV0dXJuIEYmJkYuX19lc01vZHVsZT9GOntkZWZhdWx0OkZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01v''@;'; put 'put ''ZHVsZSIse3ZhbHVlOiEwfSksWC5pc1NwZWNpYWxNaXNzaW5nPVguY2hvaWNlVmFsaWRhdG9yPVguY29uZmlybWF0aW9uVmFsaWRhdG9yPVgudXJsVmFsaWRhdG9yPXZvaWQgMDtjb25zdCBfPUkoeSgxMjk1NCkpO1gudXJsVmFsaWRhdG9yPShGLE8pPT4hIV8uZGVmYXVsdC5pc0h0dHBVcmko''@;'; put 'put ''Ril8fCEhXy5kZWZhdWx0LmlzSHR0cHNVcmkoRil8fCIiPT09Rnx8TyxYLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1GPT4hMD09PUZ8fCExPT09RixYLmNob2ljZVZhbGlkYXRvcj0oRixPLHopPT5GPjAmJkY8PU98fHosWC5pc1NwZWNpYWxNaXNzaW5nPUY9Pigic3RyaW5nIiE9dHlwZW9mIEZ8''@;'; put 'put ''fCFGLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoRil9LDEzMjQ3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXztYLlk9dm9pZCAwLChfPVguWXx8KFguWT17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLF8uU2FzOT0iU0FTOSIsXy5T''@;'; put 'put ''YXNqcz0iU0FTSlMifSwyNTAwMToodWUsWCk9PnsidXNlIHN0cmljdCI7WC5DPXZvaWQgMCxYLkM9KF8sZz0xLEI9MTA5OTUxMTYyNzc3Nik9PntpZigwPT09XylyZXR1cm4iMCBCIjtfPV8+Qj9COl87Y29uc3QgRj1nPDA/MDpnLE89TWF0aC5mbG9vcihNYXRoLmxvZyhfKS9NYXRoLmxvZygx''@;'; put 'put ''MDI0KSk7cmV0dXJuKF8vTWF0aC5wb3coMTAyNCxPKSkudG9GaXhlZChGKSsiICIrWyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiXVtPXX19LDQyOTI0OmZ1bmN0aW9uKHVlKXt2YXIgWD17dmVyc2lvbjoiMS4xNS4wIn07WFs0MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgw''@;'; put 'put ''M1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxd''@;'; put 'put ''Xl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1''@;'; put 'put ''MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUx''@;'; put 'put ''MFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1''@;'; put 'put ''MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhc''@;'; put 'put ''eGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs2MjBdPWZ1bmN0aW9u''@;'; put 'put ''KCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJD''@;'; put 'put ''REVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx1MDEwNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEwN1x4YzRcdTAxMDRcdTAxMThcdTAxMTlcdTAxNDJceGY0XHhmNlx1MDEw''@;'; put 'put ''Nlx4ZmJceGY5XHUwMTVhXHhkNlx4ZGNceGEyXHUwMTQxXHhhNVx1MDE1Ylx1MDE5Mlx1MDE3OVx1MDE3Ylx4ZjNceGQzXHUwMTQ0XHUwMTQzXHUwMTdhXHUwMTdjXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1''@;'; put 'put ''MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2''@;'; put 'put ''NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2''@;'; put 'put ''XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1n''@;'; put 'put ''KSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs3MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFh''@;'; put 'put ''XHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1''@;'; put 'put ''MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNi''@;'; put 'put ''Ylx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1''@;'; put 'put ''MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUx''@;'; put 'put ''OFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4Zlx4YjFcdTIyNjVcdTIyNjRcdTAzYWFcdTAz''@;'; put 'put ''YWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhb''@;'; put 'put ''ODUwXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2''@;'; put 'put ''Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYy''@;'; put 'put ''XHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFc''@;'; put 'put ''dTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBj''@;'; put 'put ''XHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAiLEk9W10s''@;'; put 'put ''Xz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg1Ml09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xi''@;'; put 'put ''XHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9w''@;'; put 'put ''cXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRcdTAxNmZcdTAxMDdceGU3XHUwMTQyXHhlYlx1MDE1MFx1MDE1MVx4ZWVcdTAxNzlceGM0XHUwMTA2XHhjOVx1MDEzOVx1MDEzYVx4ZjRceGY2XHUwMTNkXHUwMTNlXHUwMTVhXHUwMTViXHhkNlx4ZGNcdTAxNjRcdTAxNjVc''@;'; put 'put ''dTAxNDFceGQ3XHUwMTBkXHhlMVx4ZWRceGYzXHhmYVx1MDEwNFx1MDEwNVx1MDE3ZFx1MDE3ZVx1MDExOFx1MDExOVx4YWNcdTAxN2FcdTAxMGNcdTAxNWZceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHUwMTFhXHUwMTVlXHUyNTYzXHUyNTUxXHUyNTU3''@;'; put 'put ''XHUyNTVkXHUwMTdiXHUwMTdjXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTAyXHUwMTAzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDExMVx1MDExMFx1MDEwZVx4Y2JcdTAxMGZcdTAxNDdceGNkXHhjZVx1MDEx''@;'; put 'put ''Ylx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDE2Mlx1MDE2ZVx1MjU4MFx4ZDNceGRmXHhkNFx1MDE0M1x1MDE0NFx1MDE0OFx1MDE2MFx1MDE2MVx1MDE1NFx4ZGFcdTAxNTVcdTAxNzBceGZkXHhkZFx1MDE2M1x4YjRceGFkXHUwMmRkXHUwMmRiXHUwMmM3XHUwMmQ4XHhhN1x4ZjdceGI4''@;'; put 'put ''XHhiMFx4YThcdTAyZDlcdTAxNzFcdTAxNThcdTAxNTlcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NTddPWZ1bmN0''@;'; put 'put ''aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9A''@;'; put 'put ''QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5''@;'; put 'put ''XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVcdTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFc''@;'; put 'put ''dTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBj''@;'; put 'put ''XHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhkOVx4ZWNceGZmXHhhZlx4YjRceGFkXHhiMVx1ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsST1b''@;'; put 'put ''XSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODYxXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3''@;'; put 'put ''XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1u''@;'; put 'put ''b3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNc''@;'; put 'put ''eGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1''@;'; put 'put ''MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNc''@;'; put 'put ''dTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIy''@;'; put 'put ''MWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODY1XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBc''@;'; put 'put ''eDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNU''@;'; put 'put ''VVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4''@;'; put 'put ''ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YTRcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNc''@;'; put 'put ''dTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1''@;'; put 'put ''MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFc''@;'; put 'put ''eGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODY2''@;'; put 'put ''XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5''@;'; put 'put ''Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVc''@;'; put 'put ''dTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0''@;'; put 'put ''M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2Nc''@;'; put 'put ''dTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0''@;'; put 'put ''NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx4YTRc''@;'; put 'put ''dTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NzRdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4''@;'; put 'put ''MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9g''@;'; put 'put ''YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAy''@;'; put 'put ''Mlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBl''@;'; put 'put ''MTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNc''@;'; put 'put ''dTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBl''@;'; put 'put ''NDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLEk9W10sXz17fSxnPTA7MjU2IT1nOysr''@;'; put 'put ''Zyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg5NV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBm''@;'; put 'put ''XHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdm''@;'; put 'put ''XHUwMTBjXHhmY1x4ZTlcdTAxMGZceGU0XHUwMTBlXHUwMTY0XHUwMTBkXHUwMTFiXHUwMTFhXHUwMTM5XHhjZFx1MDEzZVx1MDFlYVx4YzRceGMxXHhjOVx1MDE3ZVx1MDE3ZFx4ZjRceGY2XHhkM1x1MDE2Zlx4ZGFceGZkXHhkNlx4ZGNcdTAxNjBcdTAxM2RceGRkXHUwMTU4XHUwMTY1XHhl''@;'; put 'put ''MVx4ZWRceGYzXHhmYVx1MDE0OFx1MDE0N1x1MDE2ZVx4ZDRcdTAxNjFcdTAxNTlcdTAxNTVcdTAxNTRceGJjXHhhN1x4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTVi''@;'; put 'put ''XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUy''@;'; put 'put ''NTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1''@;'; put 'put ''MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzkzMl09ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgZyx5PVtdLEk9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkq''@;'; put 'put ''KywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNjFcdWZmNjJcdWZmNjNcdWZmNjRcdWZmNjVcdWZmNjZcdWZmNjdc''@;'; put 'put ''dWZmNjhcdWZmNjlcdWZmNmFcdWZmNmJcdWZmNmNcdWZmNmRcdWZmNmVcdWZmNmZcdWZmNzBcdWZmNzFcdWZmNzJcdWZmNzNcdWZmNzRcdWZmNzVcdWZmNzZcdWZmNzdcdWZmNzhcdWZmNzlcdWZmN2FcdWZmN2JcdWZmN2NcdWZmN2RcdWZmN2VcdWZmN2ZcdWZmODBcdWZmODFcdWZmODJcdWZm''@;'; put 'put ''ODNcdWZmODRcdWZmODVcdWZmODZcdWZmODdcdWZmODhcdWZmODlcdWZmOGFcdWZmOGJcdWZmOGNcdWZmOGRcdWZmOGVcdWZmOGZcdWZmOTBcdWZmOTFcdWZmOTJcdWZmOTNcdWZmOTRcdWZmOTVcdWZmOTZcdWZmOTdcdWZmOThcdWZmOTlcdWZmOWFcdWZmOWJcdWZmOWNcdWZmOWRcdWZmOWVc''@;'; put 'put ''dWZmOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1swXS5sZW5ndGg7KytnKTY1NTMzIT09X1swXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzBdW2ddXT0wK2cseVswK2ddPV9bMF1bZ10pO2ZvcihfWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAz''@;'; put 'put ''XHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVmZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4XHUz''@;'; put 'put ''MDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDEwXHUzMDExXHVmZjBiXHVmZjBkXHhiMVx4ZDdcdWZmZmRceGY3XHVmZjFkXHUyMjYwXHVmZjFjXHVmZjFlXHUyMjY2XHUyMjY3XHUyMjFlXHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1''@;'; put 'put ''ZmZlNVx1ZmYwNFx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYwM1x1ZmYwNlx1ZmYwYVx1ZmYyMFx4YTdcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIwM2JcdTMwMTJcdTIxOTJcdTIxOTBcdTIxOTFc''@;'; put 'put ''dTIxOTNcdTMwMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTIyMjdcdTIyMjhcdWZmZTJcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJcdTIyNmFc''@;'; put 'put ''dTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxMmJcdTIwMzBcdTI2NmZcdTI2NmRcdTI2NmFcdTIwMjBcdTIwMjFceGI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNWVmXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTI5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTI5XVtnXV09MzMwMjQrZyx5WzMzMDI0K2ddPV9bMTI5XVtnXSk7Zm9yKF9bMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3''@;'; put 'put ''XHVmZjE4XHVmZjE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVm''@;'; put 'put ''ZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRk''@;'; put 'put ''XHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUz''@;'; put 'put ''MDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2''@;'; put 'put ''XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUz''@;'; put 'put ''MDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMwXVtnXV09MzMyODArZyx5WzMzMjgwK2ddPV9bMTMwXVtnXSk7Zm9yKF9bMTMxXT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1''@;'; put 'put ''XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUz''@;'; put 'put ''MGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHVmZmZkXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGVi''@;'; put 'put ''XHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUw''@;'; put 'put ''Mzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0''@;'; put 'put ''XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMxXVtnXV09MzM1MzYrZyx5WzMzNTM2K2ddPV9bMTMxXVtnXSk7Zm9yKF9bMTMyXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIx''@;'; put 'put ''XHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHVmZmZkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3''@;'; put 'put ''XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUy''@;'; put 'put ''NTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMyXVtnXV09MzM3OTIrZyx5WzMzNzkyK2ddPV9bMTMyXVtnXSk7Zm9y''@;'; put 'put ''KF9bMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHUyNDZmXHUyNDcw''@;'; put 'put ''XHUyNDcxXHUyNDcyXHUyNDczXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUz''@;'; put 'put ''MzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMzdiXHVmZmZkXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0XHUzMmE1XHUzMmE2''@;'; put 'put ''XHUzMmE3XHUzMmE4XHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM1XVtnXV09MzQ1NjArZyx5WzM0NTYwK2ddPV9b''@;'; put 'put ''MTM1XVtnXSk7Zm9yKF9bMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTljXHU1NTE2XHU1''@;'; put 'put ''YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5Yjhl''@;'; put 'put ''XHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3''@;'; put 'put ''NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1Mzcw''@;'; put 'put ''XHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM2XVtnXV09MzQ4MTYrZyx5''@;'; put 'put ''WzM0ODE2K2ddPV9bMTM2XVtnXSk7Zm9yKF9bMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjYyXHU5NjcwXHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVj''@;'; put 'put ''XHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4XHU1NTA0XHU2YjFkXHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBjXHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2''@;'; put 'put ''ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3YTRlXHU5ODM0XHU4MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1M2FkXHU1MTg2XHVmZmZkXHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0''@;'; put 'put ''XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2JmXHU2ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1XHU1MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjXHU2''@;'; put 'put ''MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3MzhiXHU3ZmMxXHU4OTU2XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBi''@;'; put 'put ''XHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmExXHU0ZjczXHU1MmEwXHU1M2VmXHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4''@;'; put 'put ''MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4YWIyXHU1NjI5XHU4Y2E4XHU4ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2MwXHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRl''@;'; put 'put ''XHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJhXHU2MDk0XHU2MDYyXHU2MWQwXHU2MjEyXHU2MmQwXHU2NTM5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM3XVtn''@;'; put 'put ''XV09MzUwNzIrZyx5WzM1MDcyK2ddPV9bMTM3XVtnXSk7Zm9yKF9bMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThi''@;'; put 'put ''XHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1''@;'; put 'put ''ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiXHVmZmZkXHU2YTdmXHU2OGI2''@;'; put 'put ''XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4''@;'; put 'put ''MzA1XHU4NDMxXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYy''@;'; put 'put ''XHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5''@;'; put 'put ''NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3''@;'; put 'put ''XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzhdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMTM4XVtnXV09MzUzMjgrZyx5WzM1MzI4K2ddPV9bMTM4XVtnXSk7Zm9yKF9bMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAw''@;'; put 'put ''XHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2''@;'; put 'put ''M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxXHVmZmZk''@;'; put 'put ''XHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5''@;'; put 'put ''YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMy''@;'; put 'put ''XHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2''@;'; put 'put ''NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4''@;'; put 'put ''XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzldW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMTM5XVtnXV09MzU1ODQrZyx5WzM1NTg0K2ddPV9bMTM5XVtnXSk7Zm9yKF9bMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThh''@;'; put 'put ''XHU5Njg4XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2XHU4ODg4XHU3OTQxXHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2''@;'; put 'put ''MDc1XHU2MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNhXHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3ZDk5XHU3ZTRiXHU3ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNl''@;'; put 'put ''XHU5YmU4XHVmZmZkXHU1Mjg3XHU2MjFmXHU2NDgzXHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1''@;'; put 'put ''YWNjXHU1ZWZhXHU2MWIyXHU2MWY4XHU2MmYzXHU2MzcyXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3ZDc5XHU3NzBjXHU4MGE5XHU4OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1Mzlm''@;'; put 'put ''XHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRlXHU1MDBiXHU1M2U0XHU1NDdjXHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3''@;'; put 'put ''Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0ZTkyXHU0ZjBkXHU1MzQ4XHU1NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0''@;'; put 'put ''XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5XHU1MmZlXHU1MzlhXHU1M2UzXHU1NDExXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQwXS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1sxNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQwXVtnXV09MzU4NDArZyx5WzM1ODQwK2ddPV9bMTQwXVtnXSk7Zm9yKF9bMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdk''@;'; put 'put ''XHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2''@;'; put 'put ''ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNm''@;'; put 'put ''XHU5MmZjXHU5NWE0XHU5NjRkXHVmZmZkXHU5ODA1XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2''@;'; put 'put ''ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3MmRiXHU4ZmJjXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUw''@;'; put 'put ''XHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2''@;'; put 'put ''YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2Zj''@;'; put 'put ''XHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQxXS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1sxNDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQxXVtnXV09MzYwOTYrZyx5WzM2MDk2K2ddPV9bMTQxXVtnXSk7Zm9yKF9bMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmRmXHU2MmY2XHU2NGFl''@;'; put 'put ''XHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4''@;'; put 'put ''Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVj''@;'; put 'put ''XHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyXHVmZmZkXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2''@;'; put 'put ''YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJi''@;'; put 'put ''XHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2''@;'; put 'put ''MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4''@;'; put 'put ''XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b''@;'; put 'put ''MTQyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQyXVtnXV09MzYzNTIrZyx5WzM2MzUyK2ddPV9bMTQyXVtnXSk7Zm9yKF9bMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Yjk3''@;'; put 'put ''XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNiXHU3ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRiXHU5MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1''@;'; put 'put ''MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5MWNkXHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4ZmYwXHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFj''@;'; put 'put ''XHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZmXHU2Yjg5XHU2ZGYzXHVmZmZkXHU2ZTk2XHU2ZjY0XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4XHU4NWFmXHU4''@;'; put 'put ''NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0XHU1MGI3XHU1MTFmXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFh''@;'; put 'put ''XHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2MzhjXHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2ZTU4XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3''@;'; put 'put ''OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2XHU4M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2XHU5MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFl''@;'; put 'put ''XHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1ZTM4XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1NjMxXHU1N2Y0XHU5OGZlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPV9bMTQzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQzXVtnXV09MzY2MDgrZyx5WzM2NjA4K2ddPV9bMTQzXVtnXSk7Zm9yKF9bMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2''@;'; put 'put ''ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBh''@;'; put 'put ''XHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4XHVmZmZkXHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5''@;'; put 'put ''YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEw''@;'; put 'put ''XHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1''@;'; put 'put ''ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBj''@;'; put 'put ''XHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ0XVtnXV09MzY4NjQrZyx5WzM2ODY0K2ddPV9bMTQ0XVtnXSk7Zm9yKF9bMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1''@;'; put 'put ''NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVl''@;'; put 'put ''XHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiXHVmZmZkXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4''@;'; put 'put ''MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJj''@;'; put 'put ''XHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2''@;'; put 'put ''N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRi''@;'; put 'put ''XHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ1XVtnXV09MzcxMjArZyx5WzM3MTIwK2ddPV9bMTQ1XVtnXSk7Zm9yKF9bMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2U5XHU0ZjQ2XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2''@;'; put 'put ''YjRlXHU2ZGUxXHU2ZTViXHU3MGFkXHU3N2VkXHU3YWVmXHU3YmFhXHU3ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2Njdh''@;'; put 'put ''XHU2YzYwXHU3NWY0XHU3YTFhXHU3ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0XHVmZmZkXHU5MDEwXHU3OWU5XHU3YTkyXHU4MzM2XHU1YWUxXHU3NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2''@;'; put 'put ''Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5MmYzXHU5OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1YmY1XHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEy''@;'; put 'put ''XHU2NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNhXHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1''@;'; put 'put ''ODljXHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3NWRiXHU5MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0''@;'; put 'put ''XHU0ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQzXHU4YzllXHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhjXHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4''@;'; put 'put ''ZTQ0XHU5MDEzXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ2XVtnXV09MzczNzYrZyx5WzM3Mzc2K2ddPV9bMTQ2XVtnXSk7Zm9yKF9bMTQ3XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1''@;'; put 'put ''MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3Njdi''@;'; put 'put ''XHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjXHVmZmZkXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2''@;'; put 'put ''NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAz''@;'; put 'put ''XHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3''@;'; put 'put ''NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBk''@;'; put 'put ''XHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1''@;'; put 'put ''ZWZmXHU2NWU1XHU0ZTczXHU1MTY1XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ3XVtnXV09Mzc2MzIrZyx5WzM3NjMyK2ddPV9bMTQ3XVtnXSk7Zm9yKF9bMTQ4XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3''@;'; put 'put ''MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFk''@;'; put 'put ''XHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1XHVmZmZkXHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3''@;'; put 'put ''OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2XHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4''@;'; put 'put ''XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2''@;'; put 'put ''NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2''@;'; put 'put ''XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1''@;'; put 'put ''ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ4XVtnXV09Mzc4ODgrZyx5WzM3ODg4K2ddPV9bMTQ4XVtnXSk7''@;'; put 'put ''Zm9yKF9bMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjNiXHU2N2NhXHU3YTE3XHU1MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1''@;'; put 'put ''OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVkXHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThj''@;'; put 'put ''XHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBkXHU0ZWQ4XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3XHVmZmZkXHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2XHU4MTUwXHU4MTlhXHU4''@;'; put 'put ''Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFlXHU2NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2''@;'; put 'put ''XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1MjA2XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1''@;'; put 'put ''ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAxXHU1MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAx''@;'; put 'put ''XHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3NTJiXHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1''@;'; put 'put ''Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ5XVtnXV09MzgxNDQrZyx5WzM4MTQ0K2dd''@;'; put 'put ''PV9bMTQ5XVtnXSk7Zm9yKF9bMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5''@;'; put 'put ''MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIw''@;'; put 'put ''XHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2XHVmZmZkXHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1''@;'; put 'put ''OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwXHU2ZjJiXHU4NTEz''@;'; put 'put ''XHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1''@;'; put 'put ''NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMy''@;'; put 'put ''XHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4''@;'; put 'put ''YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUwXVtnXV09Mzg0MDAr''@;'; put 'put ''Zyx5WzM4NDAwK2ddPV9bMTUwXVtnXSk7Zm9yKF9bMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2''@;'; put 'put ''NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2Rh''@;'; put 'put ''XHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyXHVmZmZkXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3''@;'; put 'put ''ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgz''@;'; put 'put ''XHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0''@;'; put 'put ''ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4''@;'; put 'put ''XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1''@;'; put 'put ''MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUx''@;'; put 'put ''XVtnXV09Mzg2NTYrZyx5WzM4NjU2K2ddPV9bMTUxXVtnXSk7Zm9yKF9bMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQyXHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1''@;'; put 'put ''MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1MTZkXHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3''@;'; put 'put ''XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMxXHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU1ZjBjXHU0ZTEwXHU0ZTE1XHU0ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0''@;'; put 'put ''ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2XHU0ZWMyXHU0ZWQ3XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2''@;'; put 'put ''XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0ZmNlXHU0ZmQ4XHU0ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1''@;'; put 'put ''MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1MDVhXHU1MDU2XHU1MDZjXHU1MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTJdW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMTUyXVtnXV09Mzg5MTIrZyx5WzM4OTEyK2ddPV9bMTUyXVtnXSk7Zm9yKF9bMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1''@;'; put 'put ''MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgy''@;'; put 'put ''XHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkXHVm''@;'; put 'put ''ZmZkXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1Mjky''@;'; put 'put ''XHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4XHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1''@;'; put 'put ''MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2''@;'; put 'put ''XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1''@;'; put 'put ''NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTNdW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMTUzXVtnXV09MzkxNjgrZyx5WzM5MTY4K2ddPV9bMTUzXVtnXSk7Zm9yKF9bMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1''@;'; put 'put ''NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdl''@;'; put 'put ''XHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1''@;'; put 'put ''NjMyXHU1NjM4XHVmZmZkXHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3''@;'; put 'put ''XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5XHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1''@;'; put 'put ''NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5''@;'; put 'put ''XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2''@;'; put 'put ''OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU0XS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09X1sxNTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU0XVtnXV09Mzk0MjQrZyx5WzM5NDI0K2ddPV9bMTU0XVtnXSk7Zm9yKF9bMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVlXHU0''@;'; put 'put ''ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1YTFjXHU1YTA5XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1YWJk''@;'; put 'put ''XHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQwXHU1YjJhXHU1YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1XHU1''@;'; put 'put ''Yjc4XHU2NTg4XHU1YjdhXHU1YjgwXHVmZmZkXHU1YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5XHU1YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIw''@;'; put 'put ''XHU1YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUzXHU1YzUwXHU1YzRmXHU1YjcxXHU1YzZjXHU1YzZlXHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2FiXHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1XHU1Y2JlXHU1''@;'; put 'put ''Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3XHU1ZDVjXHU1ZDFmXHU1ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1ZDc2XHU1ZDg3''@;'; put 'put ''XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1ZGM5XHU1ZGNkXHU1ZGQzXHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFhXHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3XHU1ZTQ0XHU1''@;'; put 'put ''ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2XHU1ZTdhXHU5ZWJjXHU1ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU1XS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09X1sxNTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU1XVtnXV09Mzk2ODArZyx5WzM5NjgwK2ddPV9bMTU1XVtnXSk7Zm9yKF9bMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZWQ2XHU1ZWUzXHU1''@;'; put 'put ''ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRl''@;'; put 'put ''XHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1''@;'; put 'put ''ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwXHVmZmZkXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQz''@;'; put 'put ''XHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2''@;'; put 'put ''MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3''@;'; put 'put ''XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2''@;'; put 'put ''MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PV9bMTU2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU2XVtnXV09Mzk5MzYrZyx5WzM5OTM2K2ddPV9bMTU2XVtnXSk7Zm9yKF9bMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2''@;'; put 'put ''MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNm''@;'; put 'put ''XHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2''@;'; put 'put ''M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiXHVmZmZkXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4''@;'; put 'put ''XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2''@;'; put 'put ''NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4''@;'; put 'put ''XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2''@;'; put 'put ''NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPV9bMTU3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU3XVtnXV09NDAxOTIrZyx5WzQwMTkyK2ddPV9bMTU3XVtnXSk7Zm9yKF9bMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU2NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUwXHU2NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJlXHU2NzNmXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYw''@;'; put 'put ''XHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2NzdjXHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2N2I4XHU2N2U0XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2''@;'; put 'put ''N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQwXHU2ODRkXHU2ODMyXHU2ODRlXHVmZmZkXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhmXHU2OGFkXHU2ODk0XHU2ODlkXHU2ODliXHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1''@;'; put 'put ''XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2OTA4XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2OGQ3XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2''@;'; put 'put ''OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5XHU2OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVlXHU2OTVkXHU2OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMx''@;'; put 'put ''XHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2OWRkXHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2YTFiXHU2OWZmXHU2YjBhXHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2''@;'; put 'put ''OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMxXHU2YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4XHU2YTIyXHU2YTkwXHU2YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU4XVtnXV09NDA0NDgrZyx5WzQwNDQ4K2ddPV9bMTU4XVtnXSk7Zm9yKF9bMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3''@;'; put 'put ''XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2''@;'; put 'put ''YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmViXHU2YmYzXHU2YmVmXHVmZmZkXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2Yzgx''@;'; put 'put ''XHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2''@;'; put 'put ''ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQy''@;'; put 'put ''XHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2''@;'; put 'put ''ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNj''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU5XVtnXV09NDA3MDQrZyx5WzQwNzA0K2ddPV9bMTU5XVtnXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmEx''@;'; put 'put ''XHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3''@;'; put 'put ''MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkXHVmZmZkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZj''@;'; put 'put ''XHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3''@;'; put 'put ''MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5''@;'; put 'put ''XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3''@;'; put 'put ''M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNm''@;'; put 'put ''XHU3NGQ0XHU3M2YxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI0XVtnXV09NTczNDQrZyx5WzU3MzQ0K2ddPV9bMjI0XVtnXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3NTI2''@;'; put 'put ''XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRhXHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZkXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEzXHU3''@;'; put 'put ''NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3NWZlXHU3NWZmXHVmZmZkXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3NjFmXHU3NjI3''@;'; put 'put ''XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3NjgzXHU3Njg4XHU3''@;'; put 'put ''NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFl''@;'; put 'put ''XHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3NzdlXHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2JiXHU3N2M3XHU3''@;'; put 'put ''N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3OGQ0XHU3OGJl''@;'; put 'put ''XHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI1XVtnXV09NTc2MDArZyx5WzU3NjAwK2ddPV9bMjI1XVtnXSk7Zm9yKF9bMjI2''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdh''@;'; put 'put ''XHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3''@;'; put 'put ''YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwXHVmZmZkXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNm''@;'; put 'put ''XHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3''@;'; put 'put ''YjQ1XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5''@;'; put 'put ''XHU3YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3''@;'; put 'put ''YzVmXHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNi''@;'; put 'put ''XHU3Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI2XVtnXV09NTc4NTYrZyx5WzU3ODU2K2ddPV9bMjI2XVtn''@;'; put 'put ''XSk7Zm9yKF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4''@;'; put 'put ''XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3''@;'; put 'put ''ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3XHVmZmZkXHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5''@;'; put 'put ''XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3''@;'; put 'put ''ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2''@;'; put 'put ''XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4''@;'; put 'put ''MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2''@;'; put 'put ''XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI3XVtnXV09NTgxMTIrZyx5WzU4MTEy''@;'; put 'put ''K2ddPV9bMjI3XVtnXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZlXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThh''@;'; put 'put ''XHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4MTVmXHU4MTkzXHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJlXHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4''@;'; put 'put ''MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4MjBhXHU4MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0XHVmZmZkXHU4MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJl''@;'; put 'put ''XHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4MjkyXHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFjXHU4MmUxXHU4MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4MzA2XHU4MmRjXHU4MzA5XHU4MmQ5XHU4MzM1XHU4''@;'; put 'put ''MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4MzUwXHU4MzQ1XHU4MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5''@;'; put 'put ''XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4M2ZkXHU4NDAzXHU4M2Q4XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2ZiXHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4''@;'; put 'put ''NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2XHU4NDJjXHU4NDZmXHU4NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3''@;'; put 'put ''XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4NGZjXHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI4XVtnXV09NTgz''@;'; put 'put ''NjgrZyx5WzU4MzY4K2ddPV9bMjI4XVtnXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0''@;'; put 'put ''XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4''@;'; put 'put ''NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjXHVmZmZkXHU4NmRmXHU4NmRiXHU4NmVm''@;'; put 'put ''XHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4''@;'; put 'put ''NzU5XHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3''@;'; put 'put ''XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4''@;'; put 'put ''ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFl''@;'; put 'put ''XHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MjI5XVtnXV09NTg2MjQrZyx5WzU4NjI0K2ddPV9bMjI5XVtnXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4''@;'; put 'put ''XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4''@;'; put 'put ''YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3XHVmZmZkXHU4YWU0''@;'; put 'put ''XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4''@;'; put 'put ''YjViXHU4YjVhXHU4YjZiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4Yzdh''@;'; put 'put ''XHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4''@;'; put 'put ''ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRm''@;'; put 'put ''XHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzBdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMjMwXVtnXV09NTg4ODArZyx5WzU4ODgwK2ddPV9bMjMwXVtnXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYw''@;'; put 'put ''XHU4ZTJhXHU4ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdjXHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkxXHU4ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4''@;'; put 'put ''ZWUzXHU4ZWZjXHU4ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4ZjBjXHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVj''@;'; put 'put ''XHVmZmZkXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjljXHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUyXHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5''@;'; put 'put ''MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4ZmY4XHU5MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5MDU4XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4''@;'; put 'put ''XHU5MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRhXHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5''@;'; put 'put ''MWI1XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5MWY1XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1''@;'; put 'put ''XHU5MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBmXHU5MmZhXHU5MzQ0XHU5MzJlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzFd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMxXVtnXV09NTkxMzYrZyx5WzU5MTM2K2ddPV9bMjMxXVtnXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1''@;'; put 'put ''XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5''@;'; put 'put ''NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2''@;'; put 'put ''XHU5NTk4XHU5NTk5XHVmZmZkXHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5''@;'; put 'put ''NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5''@;'; put 'put ''XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5''@;'; put 'put ''NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2Vk''@;'; put 'put ''XHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMyXS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1syMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMyXVtnXV09NTkzOTIrZyx5WzU5MzkyK2ddPV9bMjMyXVtnXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFh''@;'; put 'put ''XHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5''@;'; put 'put ''OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3''@;'; put 'put ''XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzXHVmZmZkXHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5''@;'; put 'put ''YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5YWY3XHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRk''@;'; put 'put ''XHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5''@;'; put 'put ''YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3''@;'; put 'put ''XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMzXS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1syMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMzXVtnXV09NTk2NDgrZyx5WzU5NjQ4K2ddPV9bMjMzXVtnXSk7Zm9yKF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDVkXHU5ZDVl''@;'; put 'put ''XHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZmXHU5ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5ZGMyXHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5''@;'; put 'put ''ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5ZTg4XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYxXHU5ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRj''@;'; put 'put ''XHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4XHU5ZWVmXHVmZmZkXHU5ZWY0XHU5ZWY2XHU5ZWY3XHU5ZWY5XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNlXHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5ZjYwXHU5''@;'; put 'put ''ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5ZmEwXHU1ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMjM0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM0XVtnXV09NTk5MDQrZyx5WzU5OTA0K2ddPV9bMjM0XVtnXSk7Zm9yKF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1''@;'; put 'put ''MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5''@;'; put 'put ''XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmZmZkXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1''@;'; put 'put ''Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1''@;'; put 'put ''XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2''@;'; put 'put ''ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4''@;'; put 'put ''XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHVmZmZkXHVmZmZkXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMjM3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM3XVtnXV09NjA2NzIrZyx5WzYwNjcyK2ddPV9bMjM3XVtnXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVm''@;'; put 'put ''YTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmEx''@;'; put 'put ''XHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHVmZmZkXHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4''@;'; put 'put ''YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRl''@;'; put 'put ''XHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5''@;'; put 'put ''M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1''@;'; put 'put ''XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM4XVtnXV09NjA5MjgrZyx5WzYwOTI4K2ddPV9bMjM4XVtnXSk7Zm9yKF9bMjUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmUyXHVmZmU0XHVmZjA3XHVm''@;'; put 'put ''ZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUyMjM1XHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0''@;'; put 'put ''XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHVmZmZkXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1''@;'; put 'put ''M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4''@;'; put 'put ''XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2''@;'; put 'put ''MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5''@;'; put 'put ''XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2''@;'; put 'put ''ZDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUwXVtnXV09NjRlMytnLHlbNjRlMytnXT1fWzI1MF1bZ10pO2ZvcihfWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1''@;'; put 'put ''Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMVx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1''@;'; put 'put ''NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmZmZFx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2Ri''@;'; put 'put ''N1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1''@;'; put 'put ''OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIw''@;'; put 'put ''YVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1''@;'; put 'put ''OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5''@;'; put 'put ''ZVx1OWE0ZVx1OWFkOVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MV1bZ11dPTY0MjU2K2cseVs2NDI1NitnXT1fWzI1MV1bZ10pO2ZvcihfWzI1Ml09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1Ml1bZ11dPTY0NTEyK2cseVs2NDUxMitnXT1fWzI1Ml1bZ10pO3JldHVybntl''@;'; put 'put ''bmM6SSxkZWM6eX19KCksWFs5MzZdPWZ1bmN0aW9uKCl7dmFyIGcseT1bXSxJPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgx''@;'; put 'put ''Y1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1swXVtnXV09MCtnLHlbMCtnXT1fWzBdW2ddKTtmb3IoX1sxMjld''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMDZcdTRlMGZcdTRlMTJcdTRlMTdcdTRlMWZcdTRlMjBcdTRlMjFcdTRlMjNcdTRlMjZcdTRlMjlcdTRlMmVcdTRlMmZcdTRlMzFcdTRlMzNcdTRlMzVc''@;'; put 'put ''dTRlMzdcdTRlM2NcdTRlNDBcdTRlNDFcdTRlNDJcdTRlNDRcdTRlNDZcdTRlNGFcdTRlNTFcdTRlNTVcdTRlNTdcdTRlNWFcdTRlNWJcdTRlNjJcdTRlNjNcdTRlNjRcdTRlNjVcdTRlNjdcdTRlNjhcdTRlNmFcdTRlNmJcdTRlNmNcdTRlNmRcdTRlNmVcdTRlNmZcdTRlNzJcdTRlNzRcdTRl''@;'; put 'put ''NzVcdTRlNzZcdTRlNzdcdTRlNzhcdTRlNzlcdTRlN2FcdTRlN2JcdTRlN2NcdTRlN2RcdTRlN2ZcdTRlODBcdTRlODFcdTRlODJcdTRlODNcdTRlODRcdTRlODVcdTRlODdcdTRlOGFcdWZmZmRcdTRlOTBcdTRlOTZcdTRlOTdcdTRlOTlcdTRlOWNcdTRlOWRcdTRlOWVcdTRlYTNcdTRlYWFc''@;'; put 'put ''dTRlYWZcdTRlYjBcdTRlYjFcdTRlYjRcdTRlYjZcdTRlYjdcdTRlYjhcdTRlYjlcdTRlYmNcdTRlYmRcdTRlYmVcdTRlYzhcdTRlY2NcdTRlY2ZcdTRlZDBcdTRlZDJcdTRlZGFcdTRlZGJcdTRlZGNcdTRlZTBcdTRlZTJcdTRlZTZcdTRlZTdcdTRlZTlcdTRlZWRcdTRlZWVcdTRlZWZcdTRl''@;'; put 'put ''ZjFcdTRlZjRcdTRlZjhcdTRlZjlcdTRlZmFcdTRlZmNcdTRlZmVcdTRmMDBcdTRmMDJcdTRmMDNcdTRmMDRcdTRmMDVcdTRmMDZcdTRmMDdcdTRmMDhcdTRmMGJcdTRmMGNcdTRmMTJcdTRmMTNcdTRmMTRcdTRmMTVcdTRmMTZcdTRmMWNcdTRmMWRcdTRmMjFcdTRmMjNcdTRmMjhcdTRmMjlc''@;'; put 'put ''dTRmMmNcdTRmMmRcdTRmMmVcdTRmMzFcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2VcdTRmM2ZcdTRmNDBcdTRmNDFcdTRmNDJcdTRmNDRcdTRmNDVcdTRmNDdcdTRmNDhcdTRmNDlcdTRmNGFcdTRmNGJcdTRmNGNcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNjFcdTRmNjJcdTRm''@;'; put 'put ''NjZcdTRmNjhcdTRmNmFcdTRmNmJcdTRmNmRcdTRmNmVcdTRmNzFcdTRmNzJcdTRmNzVcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmODBcdTRmODFcdTRmODJcdTRmODVcdTRmODZcdTRmODdcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTVcdTRmOTZc''@;'; put 'put ''dTRmOThcdTRmOTlcdTRmOWFcdTRmOWNcdTRmOWVcdTRmOWZcdTRmYTFcdTRmYTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMjldW2ddXT0zMzAyNCtnLHlbMzMwMjQrZ109X1sxMjldW2dd''@;'; put 'put ''KTtmb3IoX1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjBcdTRmYjFcdTRmYjJcdTRmYjNcdTRmYjRcdTRmYjZcdTRmYjdcdTRmYjhcdTRmYjlcdTRmYmFcdTRmYmJcdTRmYmNcdTRmYmRc''@;'; put 'put ''dTRmYmVcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZcdTRmYzdcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmZDJcdTRmZDNcdTRmZDRcdTRmZDVcdTRmZDZcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJcdTRmZTRcdTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNcdTRmZjBcdTRmZjJcdTRm''@;'; put 'put ''ZjRcdTRmZjVcdTRmZjZcdTRmZjdcdTRmZjlcdTRmZmJcdTRmZmNcdTRmZmRcdTRmZmZcdTUwMDBcdTUwMDFcdTUwMDJcdTUwMDNcdTUwMDRcdTUwMDVcdTUwMDZcdTUwMDdcdTUwMDhcdTUwMDlcdTUwMGFcdWZmZmRcdTUwMGJcdTUwMGVcdTUwMTBcdTUwMTFcdTUwMTNcdTUwMTVcdTUwMTZc''@;'; put 'put ''dTUwMTdcdTUwMWJcdTUwMWRcdTUwMWVcdTUwMjBcdTUwMjJcdTUwMjNcdTUwMjRcdTUwMjdcdTUwMmJcdTUwMmZcdTUwMzBcdTUwMzFcdTUwMzJcdTUwMzNcdTUwMzRcdTUwMzVcdTUwMzZcdTUwMzdcdTUwMzhcdTUwMzlcdTUwM2JcdTUwM2RcdTUwM2ZcdTUwNDBcdTUwNDFcdTUwNDJcdTUw''@;'; put 'put ''NDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUwNGJcdTUwNGRcdTUwNTBcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTRcdTUwNTZcdTUwNTdcdTUwNThcdTUwNTlcdTUwNWJcdTUwNWRcdTUwNWVcdTUwNWZcdTUwNjBcdTUwNjFcdTUwNjJcdTUwNjNcdTUwNjRcdTUwNjZcdTUwNjdcdTUwNjhc''@;'; put 'put ''dTUwNjlcdTUwNmFcdTUwNmJcdTUwNmRcdTUwNmVcdTUwNmZcdTUwNzBcdTUwNzFcdTUwNzJcdTUwNzNcdTUwNzRcdTUwNzVcdTUwNzhcdTUwNzlcdTUwN2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJcdTUwODNcdTUwODRcdTUwODZcdTUwODdcdTUwODlcdTUwOGFcdTUwOGJcdTUwOGNcdTUw''@;'; put 'put ''OGVcdTUwOGZcdTUwOTBcdTUwOTFcdTUwOTJcdTUwOTNcdTUwOTRcdTUwOTVcdTUwOTZcdTUwOTdcdTUwOThcdTUwOTlcdTUwOWFcdTUwOWJcdTUwOWNcdTUwOWRcdTUwOWVcdTUwOWZcdTUwYTBcdTUwYTFcdTUwYTJcdTUwYTRcdTUwYTZcdTUwYWFcdTUwYWJcdTUwYWRcdTUwYWVcdTUwYWZc''@;'; put 'put ''dTUwYjBcdTUwYjFcdTUwYjNcdTUwYjRcdTUwYjVcdTUwYjZcdTUwYjdcdTUwYjhcdTUwYjlcdTUwYmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzBdW2ddXT0zMzI4MCtnLHlbMzMyODAr''@;'; put 'put ''Z109X1sxMzBdW2ddKTtmb3IoX1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYmRcdTUwYmVcdTUwYmZcdTUwYzBcdTUwYzFcdTUwYzJcdTUwYzNcdTUwYzRcdTUwYzVcdTUwYzZcdTUwYzdcdTUwYzhcdTUwYzlcdTUwY2Fc''@;'; put 'put ''dTUwY2JcdTUwY2NcdTUwY2RcdTUwY2VcdTUwZDBcdTUwZDFcdTUwZDJcdTUwZDNcdTUwZDRcdTUwZDVcdTUwZDdcdTUwZDhcdTUwZDlcdTUwZGJcdTUwZGNcdTUwZGRcdTUwZGVcdTUwZGZcdTUwZTBcdTUwZTFcdTUwZTJcdTUwZTNcdTUwZTRcdTUwZTVcdTUwZThcdTUwZTlcdTUwZWFcdTUw''@;'; put 'put ''ZWJcdTUwZWZcdTUwZjBcdTUwZjFcdTUwZjJcdTUwZjRcdTUwZjZcdTUwZjdcdTUwZjhcdTUwZjlcdTUwZmFcdTUwZmNcdTUwZmRcdTUwZmVcdTUwZmZcdTUxMDBcdTUxMDFcdTUxMDJcdTUxMDNcdTUxMDRcdTUxMDVcdTUxMDhcdWZmZmRcdTUxMDlcdTUxMGFcdTUxMGNcdTUxMGRcdTUxMGVc''@;'; put 'put ''dTUxMGZcdTUxMTBcdTUxMTFcdTUxMTNcdTUxMTRcdTUxMTVcdTUxMTZcdTUxMTdcdTUxMThcdTUxMTlcdTUxMWFcdTUxMWJcdTUxMWNcdTUxMWRcdTUxMWVcdTUxMWZcdTUxMjBcdTUxMjJcdTUxMjNcdTUxMjRcdTUxMjVcdTUxMjZcdTUxMjdcdTUxMjhcdTUxMjlcdTUxMmFcdTUxMmJcdTUx''@;'; put 'put ''MmNcdTUxMmRcdTUxMmVcdTUxMmZcdTUxMzBcdTUxMzFcdTUxMzJcdTUxMzNcdTUxMzRcdTUxMzVcdTUxMzZcdTUxMzdcdTUxMzhcdTUxMzlcdTUxM2FcdTUxM2JcdTUxM2NcdTUxM2RcdTUxM2VcdTUxNDJcdTUxNDdcdTUxNGFcdTUxNGNcdTUxNGVcdTUxNGZcdTUxNTBcdTUxNTJcdTUxNTNc''@;'; put 'put ''dTUxNTdcdTUxNThcdTUxNTlcdTUxNWJcdTUxNWRcdTUxNWVcdTUxNWZcdTUxNjBcdTUxNjFcdTUxNjNcdTUxNjRcdTUxNjZcdTUxNjdcdTUxNjlcdTUxNmFcdTUxNmZcdTUxNzJcdTUxN2FcdTUxN2VcdTUxN2ZcdTUxODNcdTUxODRcdTUxODZcdTUxODdcdTUxOGFcdTUxOGJcdTUxOGVcdTUx''@;'; put 'put ''OGZcdTUxOTBcdTUxOTFcdTUxOTNcdTUxOTRcdTUxOThcdTUxOWFcdTUxOWRcdTUxOWVcdTUxOWZcdTUxYTFcdTUxYTNcdTUxYTZcdTUxYTdcdTUxYThcdTUxYTlcdTUxYWFcdTUxYWRcdTUxYWVcdTUxYjRcdTUxYjhcdTUxYjlcdTUxYmFcdTUxYmVcdTUxYmZcdTUxYzFcdTUxYzJcdTUxYzNc''@;'; put 'put ''dTUxYzVcdTUxYzhcdTUxY2FcdTUxY2RcdTUxY2VcdTUxZDBcdTUxZDJcdTUxZDNcdTUxZDRcdTUxZDVcdTUxZDZcdTUxZDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzFdW2ddXT0zMzUz''@;'; put 'put ''NitnLHlbMzM1MzYrZ109X1sxMzFdW2ddKTtmb3IoX1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxZDhcdTUxZDlcdTUxZGFcdTUxZGNcdTUxZGVcdTUxZGZcdTUxZTJcdTUxZTNcdTUxZTVcdTUxZTZcdTUxZTdcdTUxZThc''@;'; put 'put ''dTUxZTlcdTUxZWFcdTUxZWNcdTUxZWVcdTUxZjFcdTUxZjJcdTUxZjRcdTUxZjdcdTUxZmVcdTUyMDRcdTUyMDVcdTUyMDlcdTUyMGJcdTUyMGNcdTUyMGZcdTUyMTBcdTUyMTNcdTUyMTRcdTUyMTVcdTUyMWNcdTUyMWVcdTUyMWZcdTUyMjFcdTUyMjJcdTUyMjNcdTUyMjVcdTUyMjZcdTUy''@;'; put 'put ''MjdcdTUyMmFcdTUyMmNcdTUyMmZcdTUyMzFcdTUyMzJcdTUyMzRcdTUyMzVcdTUyM2NcdTUyM2VcdTUyNDRcdTUyNDVcdTUyNDZcdTUyNDdcdTUyNDhcdTUyNDlcdTUyNGJcdTUyNGVcdTUyNGZcdTUyNTJcdTUyNTNcdTUyNTVcdTUyNTdcdTUyNThcdWZmZmRcdTUyNTlcdTUyNWFcdTUyNWJc''@;'; put 'put ''dTUyNWRcdTUyNWZcdTUyNjBcdTUyNjJcdTUyNjNcdTUyNjRcdTUyNjZcdTUyNjhcdTUyNmJcdTUyNmNcdTUyNmRcdTUyNmVcdTUyNzBcdTUyNzFcdTUyNzNcdTUyNzRcdTUyNzVcdTUyNzZcdTUyNzdcdTUyNzhcdTUyNzlcdTUyN2FcdTUyN2JcdTUyN2NcdTUyN2VcdTUyODBcdTUyODNcdTUy''@;'; put 'put ''ODRcdTUyODVcdTUyODZcdTUyODdcdTUyODlcdTUyOGFcdTUyOGJcdTUyOGNcdTUyOGRcdTUyOGVcdTUyOGZcdTUyOTFcdTUyOTJcdTUyOTRcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOTlcdTUyOWFcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWVcdTUyYWZcdTUyYjBc''@;'; put 'put ''dTUyYjRcdTUyYjVcdTUyYjZcdTUyYjdcdTUyYjhcdTUyYjlcdTUyYmFcdTUyYmJcdTUyYmNcdTUyYmRcdTUyYzBcdTUyYzFcdTUyYzJcdTUyYzRcdTUyYzVcdTUyYzZcdTUyYzhcdTUyY2FcdTUyY2NcdTUyY2RcdTUyY2VcdTUyY2ZcdTUyZDFcdTUyZDNcdTUyZDRcdTUyZDVcdTUyZDdcdTUy''@;'; put 'put ''ZDlcdTUyZGFcdTUyZGJcdTUyZGNcdTUyZGRcdTUyZGVcdTUyZTBcdTUyZTFcdTUyZTJcdTUyZTNcdTUyZTVcdTUyZTZcdTUyZTdcdTUyZThcdTUyZTlcdTUyZWFcdTUyZWJcdTUyZWNcdTUyZWRcdTUyZWVcdTUyZWZcdTUyZjFcdTUyZjJcdTUyZjNcdTUyZjRcdTUyZjVcdTUyZjZcdTUyZjdc''@;'; put 'put ''dTUyZjhcdTUyZmJcdTUyZmNcdTUyZmRcdTUzMDFcdTUzMDJcdTUzMDNcdTUzMDRcdTUzMDdcdTUzMDlcdTUzMGFcdTUzMGJcdTUzMGNcdTUzMGVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sx''@;'; put 'put ''MzJdW2ddXT0zMzc5MitnLHlbMzM3OTIrZ109X1sxMzJdW2ddKTtmb3IoX1sxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMTFcdTUzMTJcdTUzMTNcdTUzMTRcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjJc''@;'; put 'put ''dTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRcdTUzMmZcdTUzMzBcdTUzMzFcdTUzMzJcdTUzMzNcdTUzMzRcdTUzMzVcdTUzMzZcdTUzMzdcdTUzMzhcdTUzM2NcdTUzM2RcdTUzNDBcdTUzNDJcdTUzNDRcdTUzNDZcdTUzNGJcdTUzNGNcdTUzNGRcdTUz''@;'; put 'put ''NTBcdTUzNTRcdTUzNThcdTUzNTlcdTUzNWJcdTUzNWRcdTUzNjVcdTUzNjhcdTUzNmFcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2VcdTUzODBcdTUzODFcdTUzODNcdTUzODdcdTUzODhcdTUzOGFcdTUzOGVcdTUzOGZcdWZmZmRcdTUzOTBc''@;'; put 'put ''dTUzOTFcdTUzOTJcdTUzOTNcdTUzOTRcdTUzOTZcdTUzOTdcdTUzOTlcdTUzOWJcdTUzOWNcdTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUzYWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWZcdTUzYjBcdTUzYjFcdTUzYjJcdTUzYjNcdTUzYjRcdTUzYjVcdTUzYjdcdTUzYjhcdTUz''@;'; put 'put ''YjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUzYzBcdTUzYzNcdTUzYzRcdTUzYzVcdTUzYzZcdTUzYzdcdTUzY2VcdTUzY2ZcdTUzZDBcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVcdTUzZTFcdTUzZTJcdTUzZTdcdTUzZjRcdTUzZmFcdTUzZmVcdTUzZmZc''@;'; put 'put ''dTU0MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJcdTU0MTRcdTU0MThcdTU0MTlcdTU0MWFcdTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFcdTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0M2ZcdTU0NDFcdTU0NDJcdTU0NDRcdTU0NDVcdTU0NDdcdTU0NDlcdTU0''@;'; put 'put ''NGNcdTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0NWFcdTU0NWRcdTU0NWVcdTU0NWZcdTU0NjBcdTU0NjFcdTU0NjNcdTU0NjVcdTU0NjdcdTU0NjlcdTU0NmFcdTU0NmJcdTU0NmNcdTU0NmRcdTU0NmVcdTU0NmZcdTU0NzBcdTU0NzRcdTU0NzlcdTU0N2FcdTU0N2VcdTU0N2ZcdTU0ODFc''@;'; put 'put ''dTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlcdTU0OGFcdTU0OGRcdTU0OTFcdTU0OTNcdTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzM11bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1sxMzNdW2ddXT0zNDA0OCtnLHlbMzQwNDgrZ109X1sxMzNdW2ddKTtmb3IoX1sxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YTJcdTU0YTVcdTU0YWVcdTU0YjBcdTU0YjJcdTU0YjVcdTU0YjZcdTU0Yjdc''@;'; put 'put ''dTU0YjlcdTU0YmFcdTU0YmNcdTU0YmVcdTU0YzNcdTU0YzVcdTU0Y2FcdTU0Y2JcdTU0ZDZcdTU0ZDhcdTU0ZGJcdTU0ZTBcdTU0ZTFcdTU0ZTJcdTU0ZTNcdTU0ZTRcdTU0ZWJcdTU0ZWNcdTU0ZWZcdTU0ZjBcdTU0ZjFcdTU0ZjRcdTU0ZjVcdTU0ZjZcdTU0ZjdcdTU0ZjhcdTU0ZjlcdTU0''@;'; put 'put ''ZmJcdTU0ZmVcdTU1MDBcdTU1MDJcdTU1MDNcdTU1MDRcdTU1MDVcdTU1MDhcdTU1MGFcdTU1MGJcdTU1MGNcdTU1MGRcdTU1MGVcdTU1MTJcdTU1MTNcdTU1MTVcdTU1MTZcdTU1MTdcdTU1MThcdTU1MTlcdTU1MWFcdTU1MWNcdTU1MWRcdTU1MWVcdTU1MWZcdTU1MjFcdTU1MjVcdTU1MjZc''@;'; put 'put ''dWZmZmRcdTU1MjhcdTU1MjlcdTU1MmJcdTU1MmRcdTU1MzJcdTU1MzRcdTU1MzVcdTU1MzZcdTU1MzhcdTU1MzlcdTU1M2FcdTU1M2JcdTU1M2RcdTU1NDBcdTU1NDJcdTU1NDVcdTU1NDdcdTU1NDhcdTU1NGJcdTU1NGNcdTU1NGRcdTU1NGVcdTU1NGZcdTU1NTFcdTU1NTJcdTU1NTNcdTU1''@;'; put 'put ''NTRcdTU1NTdcdTU1NThcdTU1NTlcdTU1NWFcdTU1NWJcdTU1NWRcdTU1NWVcdTU1NWZcdTU1NjBcdTU1NjJcdTU1NjNcdTU1NjhcdTU1NjlcdTU1NmJcdTU1NmZcdTU1NzBcdTU1NzFcdTU1NzJcdTU1NzNcdTU1NzRcdTU1NzlcdTU1N2FcdTU1N2RcdTU1N2ZcdTU1ODVcdTU1ODZcdTU1OGNc''@;'; put 'put ''dTU1OGRcdTU1OGVcdTU1OTBcdTU1OTJcdTU1OTNcdTU1OTVcdTU1OTZcdTU1OTdcdTU1OWFcdTU1OWJcdTU1OWVcdTU1YTBcdTU1YTFcdTU1YTJcdTU1YTNcdTU1YTRcdTU1YTVcdTU1YTZcdTU1YThcdTU1YTlcdTU1YWFcdTU1YWJcdTU1YWNcdTU1YWRcdTU1YWVcdTU1YWZcdTU1YjBcdTU1''@;'; put 'put ''YjJcdTU1YjRcdTU1YjZcdTU1YjhcdTU1YmFcdTU1YmNcdTU1YmZcdTU1YzBcdTU1YzFcdTU1YzJcdTU1YzNcdTU1YzZcdTU1YzdcdTU1YzhcdTU1Y2FcdTU1Y2JcdTU1Y2VcdTU1Y2ZcdTU1ZDBcdTU1ZDVcdTU1ZDdcdTU1ZDhcdTU1ZDlcdTU1ZGFcdTU1ZGJcdTU1ZGVcdTU1ZTBcdTU1ZTJc''@;'; put 'put ''dTU1ZTdcdTU1ZTlcdTU1ZWRcdTU1ZWVcdTU1ZjBcdTU1ZjFcdTU1ZjRcdTU1ZjZcdTU1ZjhcdTU1ZjlcdTU1ZmFcdTU1ZmJcdTU1ZmNcdTU1ZmZcdTU2MDJcdTU2MDNcdTU2MDRcdTU2MDVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzNF1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzRdW2ddXT0zNDMwNCtnLHlbMzQzMDQrZ109X1sxMzRdW2ddKTtmb3IoX1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2MDZcdTU2MDdcdTU2MGFcdTU2MGJcdTU2MGRcdTU2MTBc''@;'; put 'put ''dTU2MTFcdTU2MTJcdTU2MTNcdTU2MTRcdTU2MTVcdTU2MTZcdTU2MTdcdTU2MTlcdTU2MWFcdTU2MWNcdTU2MWRcdTU2MjBcdTU2MjFcdTU2MjJcdTU2MjVcdTU2MjZcdTU2MjhcdTU2MjlcdTU2MmFcdTU2MmJcdTU2MmVcdTU2MmZcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzhcdTU2''@;'; put 'put ''M2FcdTU2M2NcdTU2M2RcdTU2M2VcdTU2NDBcdTU2NDFcdTU2NDJcdTU2NDNcdTU2NDRcdTU2NDVcdTU2NDZcdTU2NDdcdTU2NDhcdTU2NDlcdTU2NGFcdTU2NGJcdTU2NGZcdTU2NTBcdTU2NTFcdTU2NTJcdTU2NTNcdTU2NTVcdTU2NTZcdTU2NWFcdTU2NWJcdTU2NWRcdTU2NWVcdTU2NWZc''@;'; put 'put ''dTU2NjBcdTU2NjFcdWZmZmRcdTU2NjNcdTU2NjVcdTU2NjZcdTU2NjdcdTU2NmRcdTU2NmVcdTU2NmZcdTU2NzBcdTU2NzJcdTU2NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N2FcdTU2N2RcdTU2N2VcdTU2N2ZcdTU2ODBcdTU2ODFcdTU2ODJcdTU2ODNcdTU2ODRcdTU2''@;'; put 'put ''ODdcdTU2ODhcdTU2ODlcdTU2OGFcdTU2OGJcdTU2OGNcdTU2OGRcdTU2OTBcdTU2OTFcdTU2OTJcdTU2OTRcdTU2OTVcdTU2OTZcdTU2OTdcdTU2OThcdTU2OTlcdTU2OWFcdTU2OWJcdTU2OWNcdTU2OWRcdTU2OWVcdTU2OWZcdTU2YTBcdTU2YTFcdTU2YTJcdTU2YTRcdTU2YTVcdTU2YTZc''@;'; put 'put ''dTU2YTdcdTU2YThcdTU2YTlcdTU2YWFcdTU2YWJcdTU2YWNcdTU2YWRcdTU2YWVcdTU2YjBcdTU2YjFcdTU2YjJcdTU2YjNcdTU2YjRcdTU2YjVcdTU2YjZcdTU2YjhcdTU2YjlcdTU2YmFcdTU2YmJcdTU2YmRcdTU2YmVcdTU2YmZcdTU2YzBcdTU2YzFcdTU2YzJcdTU2YzNcdTU2YzRcdTU2''@;'; put 'put ''YzVcdTU2YzZcdTU2YzdcdTU2YzhcdTU2YzlcdTU2Y2JcdTU2Y2NcdTU2Y2RcdTU2Y2VcdTU2Y2ZcdTU2ZDBcdTU2ZDFcdTU2ZDJcdTU2ZDNcdTU2ZDVcdTU2ZDZcdTU2ZDhcdTU2ZDlcdTU2ZGNcdTU2ZTNcdTU2ZTVcdTU2ZTZcdTU2ZTdcdTU2ZThcdTU2ZTlcdTU2ZWFcdTU2ZWNcdTU2ZWVc''@;'; put 'put ''dTU2ZWZcdTU2ZjJcdTU2ZjNcdTU2ZjZcdTU2ZjdcdTU2ZjhcdTU2ZmJcdTU2ZmNcdTU3MDBcdTU3MDFcdTU3MDJcdTU3MDVcdTU3MDdcdTU3MGJcdTU3MGNcdTU3MGRcdTU3MGVcdTU3MGZcdTU3MTBcdTU3MTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzVdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzEzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzVdW2ddXT0zNDU2MCtnLHlbMzQ1NjArZ109X1sxMzVdW2ddKTtmb3IoX1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3MTJcdTU3MTNcdTU3MTRcdTU3MTVc''@;'; put 'put ''dTU3MTZcdTU3MTdcdTU3MThcdTU3MTlcdTU3MWFcdTU3MWJcdTU3MWRcdTU3MWVcdTU3MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3MjVcdTU3MjZcdTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzRcdTU3MzVcdTU3MzZcdTU3MzdcdTU3MzhcdTU3M2NcdTU3M2RcdTU3M2ZcdTU3NDFcdTU3''@;'; put 'put ''NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhcdTU3NDlcdTU3NGJcdTU3NTJcdTU3NTNcdTU3NTRcdTU3NTVcdTU3NTZcdTU3NThcdTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3NzBcdTU3NzFcdTU3NzJcdTU3NzRcdTU3NzVcdTU3NzhcdTU3NzlcdTU3N2Fc''@;'; put 'put ''dTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODBcdWZmZmRcdTU3ODFcdTU3ODdcdTU3ODhcdTU3ODlcdTU3OGFcdTU3OGRcdTU3OGVcdTU3OGZcdTU3OTBcdTU3OTFcdTU3OTRcdTU3OTVcdTU3OTZcdTU3OTdcdTU3OThcdTU3OTlcdTU3OWFcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTVcdTU3''@;'; put 'put ''YThcdTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBcdTU3YjFcdTU3YjNcdTU3YjVcdTU3YjZcdTU3YjdcdTU3YjlcdTU3YmFcdTU3YmJcdTU3YmNcdTU3YmRcdTU3YmVcdTU3YmZcdTU3YzBcdTU3YzFcdTU3YzRcdTU3YzVcdTU3YzZcdTU3YzdcdTU3YzhcdTU3YzlcdTU3Y2FcdTU3Y2NcdTU3Y2Rc''@;'; put 'put ''dTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZcdTU3ZDdcdTU3ZGJcdTU3ZGNcdTU3ZGVcdTU3ZTFcdTU3ZTJcdTU3ZTNcdTU3ZTVcdTU3ZTZcdTU3ZTdcdTU3ZThcdTU3ZTlcdTU3ZWFcdTU3ZWJcdTU3ZWNcdTU3ZWVcdTU3ZjBcdTU3ZjFcdTU3ZjJcdTU3ZjNcdTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3''@;'; put 'put ''ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZcdTU4MDFcdTU4MDNcdTU4MDRcdTU4MDVcdTU4MDhcdTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4MThcdTU4MWFcdTU4MWJcdTU4MWNcdTU4MWRcdTU4MWZcdTU4MjJcdTU4MjNc''@;'; put 'put ''dTU4MjVcdTU4MjZcdTU4MjdcdTU4MjhcdTU4MjlcdTU4MmJcdTU4MmNcdTU4MmRcdTU4MmVcdTU4MmZcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzZcdTU4MzdcdTU4MzhcdTU4MzlcdTU4M2FcdTU4M2JcdTU4M2NcdTU4M2RcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzZdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzEzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzZdW2ddXT0zNDgxNitnLHlbMzQ4MTYrZ109X1sxMzZdW2ddKTtmb3IoX1sxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4M2VcdTU4M2Zc''@;'; put 'put ''dTU4NDBcdTU4NDFcdTU4NDJcdTU4NDNcdTU4NDVcdTU4NDZcdTU4NDdcdTU4NDhcdTU4NDlcdTU4NGFcdTU4NGJcdTU4NGVcdTU4NGZcdTU4NTBcdTU4NTJcdTU4NTNcdTU4NTVcdTU4NTZcdTU4NTdcdTU4NTlcdTU4NWFcdTU4NWJcdTU4NWNcdTU4NWRcdTU4NWZcdTU4NjBcdTU4NjFcdTU4''@;'; put 'put ''NjJcdTU4NjNcdTU4NjRcdTU4NjZcdTU4NjdcdTU4NjhcdTU4NjlcdTU4NmFcdTU4NmRcdTU4NmVcdTU4NmZcdTU4NzBcdTU4NzFcdTU4NzJcdTU4NzNcdTU4NzRcdTU4NzVcdTU4NzZcdTU4NzdcdTU4NzhcdTU4NzlcdTU4N2FcdTU4N2JcdTU4N2NcdTU4N2RcdTU4N2ZcdTU4ODJcdTU4ODRc''@;'; put 'put ''dTU4ODZcdTU4ODdcdTU4ODhcdTU4OGFcdTU4OGJcdTU4OGNcdWZmZmRcdTU4OGRcdTU4OGVcdTU4OGZcdTU4OTBcdTU4OTFcdTU4OTRcdTU4OTVcdTU4OTZcdTU4OTdcdTU4OThcdTU4OWJcdTU4OWNcdTU4OWRcdTU4YTBcdTU4YTFcdTU4YTJcdTU4YTNcdTU4YTRcdTU4YTVcdTU4YTZcdTU4''@;'; put 'put ''YTdcdTU4YWFcdTU4YWJcdTU4YWNcdTU4YWRcdTU4YWVcdTU4YWZcdTU4YjBcdTU4YjFcdTU4YjJcdTU4YjNcdTU4YjRcdTU4YjVcdTU4YjZcdTU4YjdcdTU4YjhcdTU4YjlcdTU4YmFcdTU4YmJcdTU4YmRcdTU4YmVcdTU4YmZcdTU4YzBcdTU4YzJcdTU4YzNcdTU4YzRcdTU4YzZcdTU4Yzdc''@;'; put 'put ''dTU4YzhcdTU4YzlcdTU4Y2FcdTU4Y2JcdTU4Y2NcdTU4Y2RcdTU4Y2VcdTU4Y2ZcdTU4ZDBcdTU4ZDJcdTU4ZDNcdTU4ZDRcdTU4ZDZcdTU4ZDdcdTU4ZDhcdTU4ZDlcdTU4ZGFcdTU4ZGJcdTU4ZGNcdTU4ZGRcdTU4ZGVcdTU4ZGZcdTU4ZTBcdTU4ZTFcdTU4ZTJcdTU4ZTNcdTU4ZTVcdTU4''@;'; put 'put ''ZTZcdTU4ZTdcdTU4ZThcdTU4ZTlcdTU4ZWFcdTU4ZWRcdTU4ZWZcdTU4ZjFcdTU4ZjJcdTU4ZjRcdTU4ZjVcdTU4ZjdcdTU4ZjhcdTU4ZmFcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU4ZmVcdTU4ZmZcdTU5MDBcdTU5MDFcdTU5MDNcdTU5MDVcdTU5MDZcdTU5MDhcdTU5MDlcdTU5MGFcdTU5MGJc''@;'; put 'put ''dTU5MGNcdTU5MGVcdTU5MTBcdTU5MTFcdTU5MTJcdTU5MTNcdTU5MTdcdTU5MThcdTU5MWJcdTU5MWRcdTU5MWVcdTU5MjBcdTU5MjFcdTU5MjJcdTU5MjNcdTU5MjZcdTU5MjhcdTU5MmNcdTU5MzBcdTU5MzJcdTU5MzNcdTU5MzVcdTU5MzZcdTU5M2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1sxMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzddW2ddXT0zNTA3MitnLHlbMzUwNzIrZ109X1sxMzddW2ddKTtmb3IoX1sxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTU5M2RcdTU5M2VcdTU5M2ZcdTU5NDBcdTU5NDNcdTU5NDVcdTU5NDZcdTU5NGFcdTU5NGNcdTU5NGRcdTU5NTBcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWJcdTU5NWNcdTU5NWRcdTU5NWVcdTU5NWZcdTU5NjFcdTU5NjNcdTU5NjRcdTU5NjZcdTU5NjdcdTU5NjhcdTU5NjlcdTU5NmFcdTU5''@;'; put 'put ''NmJcdTU5NmNcdTU5NmRcdTU5NmVcdTU5NmZcdTU5NzBcdTU5NzFcdTU5NzJcdTU5NzVcdTU5NzdcdTU5N2FcdTU5N2JcdTU5N2NcdTU5N2VcdTU5N2ZcdTU5ODBcdTU5ODVcdTU5ODlcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OGZcdTU5OTBcdTU5OTFcdTU5OTRcdTU5OTVcdTU5OThcdTU5OWFc''@;'; put 'put ''dTU5OWJcdTU5OWNcdTU5OWRcdTU5OWZcdTU5YTBcdTU5YTFcdTU5YTJcdTU5YTZcdWZmZmRcdTU5YTdcdTU5YWNcdTU5YWRcdTU5YjBcdTU5YjFcdTU5YjNcdTU5YjRcdTU5YjVcdTU5YjZcdTU5YjdcdTU5YjhcdTU5YmFcdTU5YmNcdTU5YmRcdTU5YmZcdTU5YzBcdTU5YzFcdTU5YzJcdTU5''@;'; put 'put ''YzNcdTU5YzRcdTU5YzVcdTU5YzdcdTU5YzhcdTU5YzlcdTU5Y2NcdTU5Y2RcdTU5Y2VcdTU5Y2ZcdTU5ZDVcdTU5ZDZcdTU5ZDlcdTU5ZGJcdTU5ZGVcdTU5ZGZcdTU5ZTBcdTU5ZTFcdTU5ZTJcdTU5ZTRcdTU5ZTZcdTU5ZTdcdTU5ZTlcdTU5ZWFcdTU5ZWJcdTU5ZWRcdTU5ZWVcdTU5ZWZc''@;'; put 'put ''dTU5ZjBcdTU5ZjFcdTU5ZjJcdTU5ZjNcdTU5ZjRcdTU5ZjVcdTU5ZjZcdTU5ZjdcdTU5ZjhcdTU5ZmFcdTU5ZmNcdTU5ZmRcdTU5ZmVcdTVhMDBcdTVhMDJcdTVhMGFcdTVhMGJcdTVhMGRcdTVhMGVcdTVhMGZcdTVhMTBcdTVhMTJcdTVhMTRcdTVhMTVcdTVhMTZcdTVhMTdcdTVhMTlcdTVh''@;'; put 'put ''MWFcdTVhMWJcdTVhMWRcdTVhMWVcdTVhMjFcdTVhMjJcdTVhMjRcdTVhMjZcdTVhMjdcdTVhMjhcdTVhMmFcdTVhMmJcdTVhMmNcdTVhMmRcdTVhMmVcdTVhMmZcdTVhMzBcdTVhMzNcdTVhMzVcdTVhMzdcdTVhMzhcdTVhMzlcdTVhM2FcdTVhM2JcdTVhM2RcdTVhM2VcdTVhM2ZcdTVhNDFc''@;'; put 'put ''dTVhNDJcdTVhNDNcdTVhNDRcdTVhNDVcdTVhNDdcdTVhNDhcdTVhNGJcdTVhNGNcdTVhNGRcdTVhNGVcdTVhNGZcdTVhNTBcdTVhNTFcdTVhNTJcdTVhNTNcdTVhNTRcdTVhNTZcdTVhNTdcdTVhNThcdTVhNTlcdTVhNWJcdTVhNWNcdTVhNWRcdTVhNWVcdTVhNWZcdTVhNjBcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1sxMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzhdW2ddXT0zNTMyOCtnLHlbMzUzMjgrZ109X1sxMzhdW2ddKTtmb3IoX1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTVhNjFcdTVhNjNcdTVhNjRcdTVhNjVcdTVhNjZcdTVhNjhcdTVhNjlcdTVhNmJcdTVhNmNcdTVhNmRcdTVhNmVcdTVhNmZcdTVhNzBcdTVhNzFcdTVhNzJcdTVhNzNcdTVhNzhcdTVhNzlcdTVhN2JcdTVhN2NcdTVhN2RcdTVhN2VcdTVhODBcdTVhODFcdTVhODJcdTVh''@;'; put 'put ''ODNcdTVhODRcdTVhODVcdTVhODZcdTVhODdcdTVhODhcdTVhODlcdTVhOGFcdTVhOGJcdTVhOGNcdTVhOGRcdTVhOGVcdTVhOGZcdTVhOTBcdTVhOTFcdTVhOTNcdTVhOTRcdTVhOTVcdTVhOTZcdTVhOTdcdTVhOThcdTVhOTlcdTVhOWNcdTVhOWRcdTVhOWVcdTVhOWZcdTVhYTBcdTVhYTFc''@;'; put 'put ''dTVhYTJcdTVhYTNcdTVhYTRcdTVhYTVcdTVhYTZcdTVhYTdcdTVhYThcdTVhYTlcdTVhYWJcdTVhYWNcdWZmZmRcdTVhYWRcdTVhYWVcdTVhYWZcdTVhYjBcdTVhYjFcdTVhYjRcdTVhYjZcdTVhYjdcdTVhYjlcdTVhYmFcdTVhYmJcdTVhYmNcdTVhYmRcdTVhYmZcdTVhYzBcdTVhYzNcdTVh''@;'; put 'put ''YzRcdTVhYzVcdTVhYzZcdTVhYzdcdTVhYzhcdTVhY2FcdTVhY2JcdTVhY2RcdTVhY2VcdTVhY2ZcdTVhZDBcdTVhZDFcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJcdTVhZGRcdTVhZGVcdTVhZGZcdTVhZTJcdTVhZTRcdTVhZTVcdTVhZTdcdTVhZThcdTVhZWFcdTVhZWNc''@;'; put 'put ''dTVhZWRcdTVhZWVcdTVhZWZcdTVhZjBcdTVhZjJcdTVhZjNcdTVhZjRcdTVhZjVcdTVhZjZcdTVhZjdcdTVhZjhcdTVhZjlcdTVhZmFcdTVhZmJcdTVhZmNcdTVhZmRcdTVhZmVcdTVhZmZcdTViMDBcdTViMDFcdTViMDJcdTViMDNcdTViMDRcdTViMDVcdTViMDZcdTViMDdcdTViMDhcdTVi''@;'; put 'put ''MGFcdTViMGJcdTViMGNcdTViMGRcdTViMGVcdTViMGZcdTViMTBcdTViMTFcdTViMTJcdTViMTNcdTViMTRcdTViMTVcdTViMThcdTViMTlcdTViMWFcdTViMWJcdTViMWNcdTViMWRcdTViMWVcdTViMWZcdTViMjBcdTViMjFcdTViMjJcdTViMjNcdTViMjRcdTViMjVcdTViMjZcdTViMjdc''@;'; put 'put ''dTViMjhcdTViMjlcdTViMmFcdTViMmJcdTViMmNcdTViMmRcdTViMmVcdTViMmZcdTViMzBcdTViMzFcdTViMzNcdTViMzVcdTViMzZcdTViMzhcdTViMzlcdTViM2FcdTViM2JcdTViM2NcdTViM2RcdTViM2VcdTViM2ZcdTViNDFcdTViNDJcdTViNDNcdTViNDRcdTViNDVcdTViNDZcdTVi''@;'; put 'put ''NDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxMzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzEzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxMzldW2ddXT0zNTU4NCtnLHlbMzU1ODQrZ109X1sxMzldW2ddKTtmb3IoX1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViNDhcdTViNDlcdTViNGFcdTViNGJcdTViNGNcdTViNGRcdTViNGVcdTViNGZcdTViNTJcdTViNTZcdTViNWVcdTViNjBcdTViNjFcdTViNjdcdTViNjhcdTViNmJcdTViNmRcdTViNmVcdTViNmZcdTViNzJcdTViNzRcdTViNzZcdTViNzdcdTVi''@;'; put 'put ''NzhcdTViNzlcdTViN2JcdTViN2NcdTViN2VcdTViN2ZcdTViODJcdTViODZcdTViOGFcdTViOGRcdTViOGVcdTViOTBcdTViOTFcdTViOTJcdTViOTRcdTViOTZcdTViOWZcdTViYTdcdTViYThcdTViYTlcdTViYWNcdTViYWRcdTViYWVcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFc''@;'; put 'put ''dTViYmJcdTViYmNcdTViYzBcdTViYzFcdTViYzNcdTViYzhcdTViYzlcdTViY2FcdTViY2JcdTViY2RcdTViY2VcdTViY2ZcdWZmZmRcdTViZDFcdTViZDRcdTViZDVcdTViZDZcdTViZDdcdTViZDhcdTViZDlcdTViZGFcdTViZGJcdTViZGNcdTViZTBcdTViZTJcdTViZTNcdTViZTZcdTVi''@;'; put 'put ''ZTdcdTViZTlcdTViZWFcdTViZWJcdTViZWNcdTViZWRcdTViZWZcdTViZjFcdTViZjJcdTViZjNcdTViZjRcdTViZjVcdTViZjZcdTViZjdcdTViZmRcdTViZmVcdTVjMDBcdTVjMDJcdTVjMDNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGJcdTVjMGNcdTVjMGRcdTVjMGVcdTVjMTBcdTVjMTJc''@;'; put 'put ''dTVjMTNcdTVjMTdcdTVjMTlcdTVjMWJcdTVjMWVcdTVjMWZcdTVjMjBcdTVjMjFcdTVjMjNcdTVjMjZcdTVjMjhcdTVjMjlcdTVjMmFcdTVjMmJcdTVjMmRcdTVjMmVcdTVjMmZcdTVjMzBcdTVjMzJcdTVjMzNcdTVjMzVcdTVjMzZcdTVjMzdcdTVjNDNcdTVjNDRcdTVjNDZcdTVjNDdcdTVj''@;'; put 'put ''NGNcdTVjNGRcdTVjNTJcdTVjNTNcdTVjNTRcdTVjNTZcdTVjNTdcdTVjNThcdTVjNWFcdTVjNWJcdTVjNWNcdTVjNWRcdTVjNWZcdTVjNjJcdTVjNjRcdTVjNjdcdTVjNjhcdTVjNjlcdTVjNmFcdTVjNmJcdTVjNmNcdTVjNmRcdTVjNzBcdTVjNzJcdTVjNzNcdTVjNzRcdTVjNzVcdTVjNzZc''@;'; put 'put ''dTVjNzdcdTVjNzhcdTVjN2JcdTVjN2NcdTVjN2RcdTVjN2VcdTVjODBcdTVjODNcdTVjODRcdTVjODVcdTVjODZcdTVjODdcdTVjODlcdTVjOGFcdTVjOGJcdTVjOGVcdTVjOGZcdTVjOTJcdTVjOTNcdTVjOTVcdTVjOWRcdTVjOWVcdTVjOWZcdTVjYTBcdTVjYTFcdTVjYTRcdTVjYTVcdTVj''@;'; put 'put ''YTZcdTVjYTdcdTVjYThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDBdW2ddXT0zNTg0MCtnLHlbMzU4NDArZ109X1sxNDBdW2ddKTtmb3IoX1sxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjYWFcdTVjYWVcdTVjYWZcdTVjYjBcdTVjYjJcdTVjYjRcdTVjYjZcdTVjYjlcdTVjYmFcdTVjYmJcdTVjYmNcdTVjYmVcdTVjYzBcdTVjYzJcdTVjYzNcdTVjYzVcdTVjYzZcdTVjYzdcdTVjYzhcdTVjYzlcdTVjY2FcdTVj''@;'; put 'put ''Y2NcdTVjY2RcdTVjY2VcdTVjY2ZcdTVjZDBcdTVjZDFcdTVjZDNcdTVjZDRcdTVjZDVcdTVjZDZcdTVjZDdcdTVjZDhcdTVjZGFcdTVjZGJcdTVjZGNcdTVjZGRcdTVjZGVcdTVjZGZcdTVjZTBcdTVjZTJcdTVjZTNcdTVjZTdcdTVjZTlcdTVjZWJcdTVjZWNcdTVjZWVcdTVjZWZcdTVjZjFc''@;'; put 'put ''dTVjZjJcdTVjZjNcdTVjZjRcdTVjZjVcdTVjZjZcdTVjZjdcdTVjZjhcdTVjZjlcdTVjZmFcdTVjZmNcdTVjZmRcdTVjZmVcdTVjZmZcdTVkMDBcdWZmZmRcdTVkMDFcdTVkMDRcdTVkMDVcdTVkMDhcdTVkMDlcdTVkMGFcdTVkMGJcdTVkMGNcdTVkMGRcdTVkMGZcdTVkMTBcdTVkMTFcdTVk''@;'; put 'put ''MTJcdTVkMTNcdTVkMTVcdTVkMTdcdTVkMThcdTVkMTlcdTVkMWFcdTVkMWNcdTVkMWRcdTVkMWZcdTVkMjBcdTVkMjFcdTVkMjJcdTVkMjNcdTVkMjVcdTVkMjhcdTVkMmFcdTVkMmJcdTVkMmNcdTVkMmZcdTVkMzBcdTVkMzFcdTVkMzJcdTVkMzNcdTVkMzVcdTVkMzZcdTVkMzdcdTVkMzhc''@;'; put 'put ''dTVkMzlcdTVkM2FcdTVkM2JcdTVkM2NcdTVkM2ZcdTVkNDBcdTVkNDFcdTVkNDJcdTVkNDNcdTVkNDRcdTVkNDVcdTVkNDZcdTVkNDhcdTVkNDlcdTVkNGRcdTVkNGVcdTVkNGZcdTVkNTBcdTVkNTFcdTVkNTJcdTVkNTNcdTVkNTRcdTVkNTVcdTVkNTZcdTVkNTdcdTVkNTlcdTVkNWFcdTVk''@;'; put 'put ''NWNcdTVkNWVcdTVkNWZcdTVkNjBcdTVkNjFcdTVkNjJcdTVkNjNcdTVkNjRcdTVkNjVcdTVkNjZcdTVkNjdcdTVkNjhcdTVkNmFcdTVkNmRcdTVkNmVcdTVkNzBcdTVkNzFcdTVkNzJcdTVkNzNcdTVkNzVcdTVkNzZcdTVkNzdcdTVkNzhcdTVkNzlcdTVkN2FcdTVkN2JcdTVkN2NcdTVkN2Rc''@;'; put 'put ''dTVkN2VcdTVkN2ZcdTVkODBcdTVkODFcdTVkODNcdTVkODRcdTVkODVcdTVkODZcdTVkODdcdTVkODhcdTVkODlcdTVkOGFcdTVkOGJcdTVkOGNcdTVkOGRcdTVkOGVcdTVkOGZcdTVkOTBcdTVkOTFcdTVkOTJcdTVkOTNcdTVkOTRcdTVkOTVcdTVkOTZcdTVkOTdcdTVkOThcdTVkOWFcdTVk''@;'; put 'put ''OWJcdTVkOWNcdTVkOWVcdTVkOWZcdTVkYTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDFdW2ddXT0zNjA5NitnLHlbMzYwOTYrZ109X1sxNDFdW2ddKTtmb3IoX1sxNDJdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkYTFcdTVkYTJcdTVkYTNcdTVkYTRcdTVkYTVcdTVkYTZcdTVkYTdcdTVkYThcdTVkYTlcdTVkYWFcdTVkYWJcdTVkYWNcdTVkYWRcdTVkYWVcdTVkYWZcdTVkYjBcdTVkYjFcdTVkYjJcdTVkYjNcdTVk''@;'; put 'put ''YjRcdTVkYjVcdTVkYjZcdTVkYjhcdTVkYjlcdTVkYmFcdTVkYmJcdTVkYmNcdTVkYmRcdTVkYmVcdTVkYmZcdTVkYzBcdTVkYzFcdTVkYzJcdTVkYzNcdTVkYzRcdTVkYzZcdTVkYzdcdTVkYzhcdTVkYzlcdTVkY2FcdTVkY2JcdTVkY2NcdTVkY2VcdTVkY2ZcdTVkZDBcdTVkZDFcdTVkZDJc''@;'; put 'put ''dTVkZDNcdTVkZDRcdTVkZDVcdTVkZDZcdTVkZDdcdTVkZDhcdTVkZDlcdTVkZGFcdTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWRcdWZmZmRcdTVkZjBcdTVkZjVcdTVkZjZcdTVkZjhcdTVkZjlcdTVkZmFcdTVkZmJcdTVkZmNcdTVkZmZcdTVlMDBcdTVl''@;'; put 'put ''MDRcdTVlMDdcdTVlMDlcdTVlMGFcdTVlMGJcdTVlMGRcdTVlMGVcdTVlMTJcdTVlMTNcdTVlMTdcdTVlMWVcdTVlMWZcdTVlMjBcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjRcdTVlMjVcdTVlMjhcdTVlMjlcdTVlMmFcdTVlMmJcdTVlMmNcdTVlMmZcdTVlMzBcdTVlMzJcdTVlMzNcdTVlMzRc''@;'; put 'put ''dTVlMzVcdTVlMzZcdTVlMzlcdTVlM2FcdTVlM2VcdTVlM2ZcdTVlNDBcdTVlNDFcdTVlNDNcdTVlNDZcdTVlNDdcdTVlNDhcdTVlNDlcdTVlNGFcdTVlNGJcdTVlNGRcdTVlNGVcdTVlNGZcdTVlNTBcdTVlNTFcdTVlNTJcdTVlNTNcdTVlNTZcdTVlNTdcdTVlNThcdTVlNTlcdTVlNWFcdTVl''@;'; put 'put ''NWNcdTVlNWRcdTVlNWZcdTVlNjBcdTVlNjNcdTVlNjRcdTVlNjVcdTVlNjZcdTVlNjdcdTVlNjhcdTVlNjlcdTVlNmFcdTVlNmJcdTVlNmNcdTVlNmRcdTVlNmVcdTVlNmZcdTVlNzBcdTVlNzFcdTVlNzVcdTVlNzdcdTVlNzlcdTVlN2VcdTVlODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhc''@;'; put 'put ''dTVlODlcdTVlOGNcdTVlOGRcdTVlOGVcdTVlOTJcdTVlOThcdTVlOWJcdTVlOWRcdTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYThcdTVlYTlcdTVlYWFcdTVlYWJcdTVlYWNcdTVlYWVcdTVlYWZcdTVlYjBcdTVlYjFcdTVlYjJcdTVlYjRcdTVlYmFcdTVlYmJcdTVlYmNcdTVlYmRcdTVl''@;'; put 'put ''YmZcdTVlYzBcdTVlYzFcdTVlYzJcdTVlYzNcdTVlYzRcdTVlYzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDJdW2ddXT0zNjM1MitnLHlbMzYzNTIrZ109X1sxNDJdW2ddKTtmb3IoX1sx''@;'; put 'put ''NDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlYzZcdTVlYzdcdTVlYzhcdTVlY2JcdTVlY2NcdTVlY2RcdTVlY2VcdTVlY2ZcdTVlZDBcdTVlZDRcdTVlZDVcdTVlZDdcdTVlZDhcdTVlZDlcdTVlZGFcdTVlZGNcdTVlZGRcdTVl''@;'; put 'put ''ZGVcdTVlZGZcdTVlZTBcdTVlZTFcdTVlZTJcdTVlZTNcdTVlZTRcdTVlZTVcdTVlZTZcdTVlZTdcdTVlZTlcdTVlZWJcdTVlZWNcdTVlZWRcdTVlZWVcdTVlZWZcdTVlZjBcdTVlZjFcdTVlZjJcdTVlZjNcdTVlZjVcdTVlZjhcdTVlZjlcdTVlZmJcdTVlZmNcdTVlZmRcdTVmMDVcdTVmMDZc''@;'; put 'put ''dTVmMDdcdTVmMDlcdTVmMGNcdTVmMGRcdTVmMGVcdTVmMTBcdTVmMTJcdTVmMTRcdTVmMTZcdTVmMTlcdTVmMWFcdTVmMWNcdTVmMWRcdTVmMWVcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjRcdWZmZmRcdTVmMjhcdTVmMmJcdTVmMmNcdTVmMmVcdTVmMzBcdTVmMzJcdTVmMzNcdTVmMzRcdTVm''@;'; put 'put ''MzVcdTVmMzZcdTVmMzdcdTVmMzhcdTVmM2JcdTVmM2RcdTVmM2VcdTVmM2ZcdTVmNDFcdTVmNDJcdTVmNDNcdTVmNDRcdTVmNDVcdTVmNDZcdTVmNDdcdTVmNDhcdTVmNDlcdTVmNGFcdTVmNGJcdTVmNGNcdTVmNGRcdTVmNGVcdTVmNGZcdTVmNTFcdTVmNTRcdTVmNTlcdTVmNWFcdTVmNWJc''@;'; put 'put ''dTVmNWNcdTVmNWVcdTVmNWZcdTVmNjBcdTVmNjNcdTVmNjVcdTVmNjdcdTVmNjhcdTVmNmJcdTVmNmVcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzZcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmN2ZcdTVmODNcdTVmODZcdTVmOGRcdTVmOGVcdTVmOGZcdTVmOTFcdTVmOTNcdTVm''@;'; put 'put ''OTRcdTVmOTZcdTVmOWFcdTVmOWJcdTVmOWRcdTVmOWVcdTVmOWZcdTVmYTBcdTVmYTJcdTVmYTNcdTVmYTRcdTVmYTVcdTVmYTZcdTVmYTdcdTVmYTlcdTVmYWJcdTVmYWNcdTVmYWZcdTVmYjBcdTVmYjFcdTVmYjJcdTVmYjNcdTVmYjRcdTVmYjZcdTVmYjhcdTVmYjlcdTVmYmFcdTVmYmJc''@;'; put 'put ''dTVmYmVcdTVmYmZcdTVmYzBcdTVmYzFcdTVmYzJcdTVmYzdcdTVmYzhcdTVmY2FcdTVmY2JcdTVmY2VcdTVmZDNcdTVmZDRcdTVmZDVcdTVmZGFcdTVmZGJcdTVmZGNcdTVmZGVcdTVmZGZcdTVmZTJcdTVmZTNcdTVmZTVcdTVmZTZcdTVmZThcdTVmZTlcdTVmZWNcdTVmZWZcdTVmZjBcdTVm''@;'; put 'put ''ZjJcdTVmZjNcdTVmZjRcdTVmZjZcdTVmZjdcdTVmZjlcdTVmZmFcdTVmZmNcdTYwMDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDNdW2ddXT0zNjYwOCtnLHlbMzY2MDgrZ109X1sxNDNd''@;'; put 'put ''W2ddKTtmb3IoX1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMDhcdTYwMDlcdTYwMGJcdTYwMGNcdTYwMTBcdTYwMTFcdTYwMTNcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWVcdTYwMWZcdTYwMjJcdTYwMjNcdTYwMjRcdTYw''@;'; put 'put ''MmNcdTYwMmRcdTYwMmVcdTYwMzBcdTYwMzFcdTYwMzJcdTYwMzNcdTYwMzRcdTYwMzZcdTYwMzdcdTYwMzhcdTYwMzlcdTYwM2FcdTYwM2RcdTYwM2VcdTYwNDBcdTYwNDRcdTYwNDVcdTYwNDZcdTYwNDdcdTYwNDhcdTYwNDlcdTYwNGFcdTYwNGNcdTYwNGVcdTYwNGZcdTYwNTFcdTYwNTNc''@;'; put 'put ''dTYwNTRcdTYwNTZcdTYwNTdcdTYwNThcdTYwNWJcdTYwNWNcdTYwNWVcdTYwNWZcdTYwNjBcdTYwNjFcdTYwNjVcdTYwNjZcdTYwNmVcdTYwNzFcdTYwNzJcdTYwNzRcdTYwNzVcdTYwNzdcdTYwN2VcdTYwODBcdWZmZmRcdTYwODFcdTYwODJcdTYwODVcdTYwODZcdTYwODdcdTYwODhcdTYw''@;'; put 'put ''OGFcdTYwOGJcdTYwOGVcdTYwOGZcdTYwOTBcdTYwOTFcdTYwOTNcdTYwOTVcdTYwOTdcdTYwOThcdTYwOTlcdTYwOWNcdTYwOWVcdTYwYTFcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYTdcdTYwYTlcdTYwYWFcdTYwYWVcdTYwYjBcdTYwYjNcdTYwYjVcdTYwYjZcdTYwYjdcdTYwYjlcdTYwYmFc''@;'; put 'put ''dTYwYmRcdTYwYmVcdTYwYmZcdTYwYzBcdTYwYzFcdTYwYzJcdTYwYzNcdTYwYzRcdTYwYzdcdTYwYzhcdTYwYzlcdTYwY2NcdTYwY2RcdTYwY2VcdTYwY2ZcdTYwZDBcdTYwZDJcdTYwZDNcdTYwZDRcdTYwZDZcdTYwZDdcdTYwZDlcdTYwZGJcdTYwZGVcdTYwZTFcdTYwZTJcdTYwZTNcdTYw''@;'; put 'put ''ZTRcdTYwZTVcdTYwZWFcdTYwZjFcdTYwZjJcdTYwZjVcdTYwZjdcdTYwZjhcdTYwZmJcdTYwZmNcdTYwZmRcdTYwZmVcdTYwZmZcdTYxMDJcdTYxMDNcdTYxMDRcdTYxMDVcdTYxMDdcdTYxMGFcdTYxMGJcdTYxMGNcdTYxMTBcdTYxMTFcdTYxMTJcdTYxMTNcdTYxMTRcdTYxMTZcdTYxMTdc''@;'; put 'put ''dTYxMThcdTYxMTlcdTYxMWJcdTYxMWNcdTYxMWRcdTYxMWVcdTYxMjFcdTYxMjJcdTYxMjVcdTYxMjhcdTYxMjlcdTYxMmFcdTYxMmNcdTYxMmRcdTYxMmVcdTYxMmZcdTYxMzBcdTYxMzFcdTYxMzJcdTYxMzNcdTYxMzRcdTYxMzVcdTYxMzZcdTYxMzdcdTYxMzhcdTYxMzlcdTYxM2FcdTYx''@;'; put 'put ''M2JcdTYxM2NcdTYxM2RcdTYxM2VcdTYxNDBcdTYxNDFcdTYxNDJcdTYxNDNcdTYxNDRcdTYxNDVcdTYxNDZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDRdW2ddXT0zNjg2NCtnLHlbMzY4''@;'; put 'put ''NjQrZ109X1sxNDRdW2ddKTtmb3IoX1sxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxNDdcdTYxNDlcdTYxNGJcdTYxNGRcdTYxNGZcdTYxNTBcdTYxNTJcdTYxNTNcdTYxNTRcdTYxNTZcdTYxNTdcdTYxNThcdTYxNTlcdTYx''@;'; put 'put ''NWFcdTYxNWJcdTYxNWNcdTYxNWVcdTYxNWZcdTYxNjBcdTYxNjFcdTYxNjNcdTYxNjRcdTYxNjVcdTYxNjZcdTYxNjlcdTYxNmFcdTYxNmJcdTYxNmNcdTYxNmRcdTYxNmVcdTYxNmZcdTYxNzFcdTYxNzJcdTYxNzNcdTYxNzRcdTYxNzZcdTYxNzhcdTYxNzlcdTYxN2FcdTYxN2JcdTYxN2Nc''@;'; put 'put ''dTYxN2RcdTYxN2VcdTYxN2ZcdTYxODBcdTYxODFcdTYxODJcdTYxODNcdTYxODRcdTYxODVcdTYxODZcdTYxODdcdTYxODhcdTYxODlcdTYxOGFcdTYxOGNcdTYxOGRcdTYxOGZcdTYxOTBcdTYxOTFcdTYxOTJcdTYxOTNcdTYxOTVcdWZmZmRcdTYxOTZcdTYxOTdcdTYxOThcdTYxOTlcdTYx''@;'; put 'put ''OWFcdTYxOWJcdTYxOWNcdTYxOWVcdTYxOWZcdTYxYTBcdTYxYTFcdTYxYTJcdTYxYTNcdTYxYTRcdTYxYTVcdTYxYTZcdTYxYWFcdTYxYWJcdTYxYWRcdTYxYWVcdTYxYWZcdTYxYjBcdTYxYjFcdTYxYjJcdTYxYjNcdTYxYjRcdTYxYjVcdTYxYjZcdTYxYjhcdTYxYjlcdTYxYmFcdTYxYmJc''@;'; put 'put ''dTYxYmNcdTYxYmRcdTYxYmZcdTYxYzBcdTYxYzFcdTYxYzNcdTYxYzRcdTYxYzVcdTYxYzZcdTYxYzdcdTYxYzlcdTYxY2NcdTYxY2RcdTYxY2VcdTYxY2ZcdTYxZDBcdTYxZDNcdTYxZDVcdTYxZDZcdTYxZDdcdTYxZDhcdTYxZDlcdTYxZGFcdTYxZGJcdTYxZGNcdTYxZGRcdTYxZGVcdTYx''@;'; put 'put ''ZGZcdTYxZTBcdTYxZTFcdTYxZTJcdTYxZTNcdTYxZTRcdTYxZTVcdTYxZTdcdTYxZThcdTYxZTlcdTYxZWFcdTYxZWJcdTYxZWNcdTYxZWRcdTYxZWVcdTYxZWZcdTYxZjBcdTYxZjFcdTYxZjJcdTYxZjNcdTYxZjRcdTYxZjZcdTYxZjdcdTYxZjhcdTYxZjlcdTYxZmFcdTYxZmJcdTYxZmNc''@;'; put 'put ''dTYxZmRcdTYxZmVcdTYyMDBcdTYyMDFcdTYyMDJcdTYyMDNcdTYyMDRcdTYyMDVcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBcdTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYyMmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYy''@;'; put 'put ''MzJcdTYyMzVcdTYyMzZcdTYyMzhcdTYyMzlcdTYyM2FcdTYyM2JcdTYyM2NcdTYyNDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDVdW2ddXT0z''@;'; put 'put ''NzEyMCtnLHlbMzcxMjArZ109X1sxNDVdW2ddKTtmb3IoX1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyNGZcdTYyNTBcdTYyNTVcdTYyNTZcdTYyNTdcdTYyNTlcdTYyNWFcdTYyNWNcdTYyNWRcdTYyNWVcdTYyNWZcdTYy''@;'; put 'put ''NjBcdTYyNjFcdTYyNjJcdTYyNjRcdTYyNjVcdTYyNjhcdTYyNzFcdTYyNzJcdTYyNzRcdTYyNzVcdTYyNzdcdTYyNzhcdTYyN2FcdTYyN2JcdTYyN2RcdTYyODFcdTYyODJcdTYyODNcdTYyODVcdTYyODZcdTYyODdcdTYyODhcdTYyOGJcdTYyOGNcdTYyOGRcdTYyOGVcdTYyOGZcdTYyOTBc''@;'; put 'put ''dTYyOTRcdTYyOTlcdTYyOWNcdTYyOWRcdTYyOWVcdTYyYTNcdTYyYTZcdTYyYTdcdTYyYTlcdTYyYWFcdTYyYWRcdTYyYWVcdTYyYWZcdTYyYjBcdTYyYjJcdTYyYjNcdTYyYjRcdTYyYjZcdTYyYjdcdTYyYjhcdTYyYmFcdTYyYmVcdTYyYzBcdTYyYzFcdWZmZmRcdTYyYzNcdTYyY2JcdTYy''@;'; put 'put ''Y2ZcdTYyZDFcdTYyZDVcdTYyZGRcdTYyZGVcdTYyZTBcdTYyZTFcdTYyZTRcdTYyZWFcdTYyZWJcdTYyZjBcdTYyZjJcdTYyZjVcdTYyZjhcdTYyZjlcdTYyZmFcdTYyZmJcdTYzMDBcdTYzMDNcdTYzMDRcdTYzMDVcdTYzMDZcdTYzMGFcdTYzMGJcdTYzMGNcdTYzMGRcdTYzMGZcdTYzMTBc''@;'; put 'put ''dTYzMTJcdTYzMTNcdTYzMTRcdTYzMTVcdTYzMTdcdTYzMThcdTYzMTlcdTYzMWNcdTYzMjZcdTYzMjdcdTYzMjlcdTYzMmNcdTYzMmRcdTYzMmVcdTYzMzBcdTYzMzFcdTYzMzNcdTYzMzRcdTYzMzVcdTYzMzZcdTYzMzdcdTYzMzhcdTYzM2JcdTYzM2NcdTYzM2VcdTYzM2ZcdTYzNDBcdTYz''@;'; put 'put ''NDFcdTYzNDRcdTYzNDdcdTYzNDhcdTYzNGFcdTYzNTFcdTYzNTJcdTYzNTNcdTYzNTRcdTYzNTZcdTYzNTdcdTYzNThcdTYzNTlcdTYzNWFcdTYzNWJcdTYzNWNcdTYzNWRcdTYzNjBcdTYzNjRcdTYzNjVcdTYzNjZcdTYzNjhcdTYzNmFcdTYzNmJcdTYzNmNcdTYzNmZcdTYzNzBcdTYzNzJc''@;'; put 'put ''dTYzNzNcdTYzNzRcdTYzNzVcdTYzNzhcdTYzNzlcdTYzN2NcdTYzN2RcdTYzN2VcdTYzN2ZcdTYzODFcdTYzODNcdTYzODRcdTYzODVcdTYzODZcdTYzOGJcdTYzOGRcdTYzOTFcdTYzOTNcdTYzOTRcdTYzOTVcdTYzOTdcdTYzOTlcdTYzOWFcdTYzOWJcdTYzOWNcdTYzOWRcdTYzOWVcdTYz''@;'; put 'put ''OWZcdTYzYTFcdTYzYTRcdTYzYTZcdTYzYWJcdTYzYWZcdTYzYjFcdTYzYjJcdTYzYjVcdTYzYjZcdTYzYjlcdTYzYmJcdTYzYmRcdTYzYmZcdTYzYzBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1sxNDZdW2ddXT0zNzM3NitnLHlbMzczNzYrZ109X1sxNDZdW2ddKTtmb3IoX1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzYzFcdTYzYzJcdTYzYzNcdTYzYzVcdTYzYzdcdTYzYzhcdTYzY2FcdTYzY2JcdTYzY2NcdTYz''@;'; put 'put ''ZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZDdcdTYzZDhcdTYzZDlcdTYzZGFcdTYzZGJcdTYzZGNcdTYzZGRcdTYzZGZcdTYzZTJcdTYzZTRcdTYzZTVcdTYzZTZcdTYzZTdcdTYzZThcdTYzZWJcdTYzZWNcdTYzZWVcdTYzZWZcdTYzZjBcdTYzZjFcdTYzZjNcdTYzZjVcdTYzZjdcdTYzZjlc''@;'; put 'put ''dTYzZmFcdTYzZmJcdTYzZmNcdTYzZmVcdTY0MDNcdTY0MDRcdTY0MDZcdTY0MDdcdTY0MDhcdTY0MDlcdTY0MGFcdTY0MGRcdTY0MGVcdTY0MTFcdTY0MTJcdTY0MTVcdTY0MTZcdTY0MTdcdTY0MThcdTY0MTlcdTY0MWFcdTY0MWRcdTY0MWZcdTY0MjJcdTY0MjNcdTY0MjRcdWZmZmRcdTY0''@;'; put 'put ''MjVcdTY0MjdcdTY0MjhcdTY0MjlcdTY0MmJcdTY0MmVcdTY0MmZcdTY0MzBcdTY0MzFcdTY0MzJcdTY0MzNcdTY0MzVcdTY0MzZcdTY0MzdcdTY0MzhcdTY0MzlcdTY0M2JcdTY0M2NcdTY0M2VcdTY0NDBcdTY0NDJcdTY0NDNcdTY0NDlcdTY0NGJcdTY0NGNcdTY0NGRcdTY0NGVcdTY0NGZc''@;'; put 'put ''dTY0NTBcdTY0NTFcdTY0NTNcdTY0NTVcdTY0NTZcdTY0NTdcdTY0NTlcdTY0NWFcdTY0NWJcdTY0NWNcdTY0NWRcdTY0NWZcdTY0NjBcdTY0NjFcdTY0NjJcdTY0NjNcdTY0NjRcdTY0NjVcdTY0NjZcdTY0NjhcdTY0NmFcdTY0NmJcdTY0NmNcdTY0NmVcdTY0NmZcdTY0NzBcdTY0NzFcdTY0''@;'; put 'put ''NzJcdTY0NzNcdTY0NzRcdTY0NzVcdTY0NzZcdTY0NzdcdTY0N2JcdTY0N2NcdTY0N2RcdTY0N2VcdTY0N2ZcdTY0ODBcdTY0ODFcdTY0ODNcdTY0ODZcdTY0ODhcdTY0ODlcdTY0OGFcdTY0OGJcdTY0OGNcdTY0OGRcdTY0OGVcdTY0OGZcdTY0OTBcdTY0OTNcdTY0OTRcdTY0OTdcdTY0OThc''@;'; put 'put ''dTY0OWFcdTY0OWJcdTY0OWNcdTY0OWRcdTY0OWZcdTY0YTBcdTY0YTFcdTY0YTJcdTY0YTNcdTY0YTVcdTY0YTZcdTY0YTdcdTY0YThcdTY0YWFcdTY0YWJcdTY0YWZcdTY0YjFcdTY0YjJcdTY0YjNcdTY0YjRcdTY0YjZcdTY0YjlcdTY0YmJcdTY0YmRcdTY0YmVcdTY0YmZcdTY0YzFcdTY0''@;'; put 'put ''YzNcdTY0YzRcdTY0YzZcdTY0YzdcdTY0YzhcdTY0YzlcdTY0Y2FcdTY0Y2JcdTY0Y2NcdTY0Y2ZcdTY0ZDFcdTY0ZDNcdTY0ZDRcdTY0ZDVcdTY0ZDZcdTY0ZDlcdTY0ZGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0N11bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1sxNDddW2ddXT0zNzYzMitnLHlbMzc2MzIrZ109X1sxNDddW2ddKTtmb3IoX1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0ZGJcdTY0ZGNcdTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0''@;'; put 'put ''ZTVcdTY0ZTdcdTY0ZThcdTY0ZTlcdTY0ZWFcdTY0ZWJcdTY0ZWNcdTY0ZWRcdTY0ZWVcdTY0ZWZcdTY0ZjBcdTY0ZjFcdTY0ZjJcdTY0ZjNcdTY0ZjRcdTY0ZjVcdTY0ZjZcdTY0ZjdcdTY0ZjhcdTY0ZjlcdTY0ZmFcdTY0ZmJcdTY0ZmNcdTY0ZmRcdTY0ZmVcdTY0ZmZcdTY1MDFcdTY1MDJc''@;'; put 'put ''dTY1MDNcdTY1MDRcdTY1MDVcdTY1MDZcdTY1MDdcdTY1MDhcdTY1MGFcdTY1MGJcdTY1MGNcdTY1MGRcdTY1MGVcdTY1MGZcdTY1MTBcdTY1MTFcdTY1MTNcdTY1MTRcdTY1MTVcdTY1MTZcdTY1MTdcdTY1MTlcdTY1MWFcdTY1MWJcdTY1MWNcdTY1MWRcdTY1MWVcdTY1MWZcdTY1MjBcdTY1''@;'; put 'put ''MjFcdWZmZmRcdTY1MjJcdTY1MjNcdTY1MjRcdTY1MjZcdTY1MjdcdTY1MjhcdTY1MjlcdTY1MmFcdTY1MmNcdTY1MmRcdTY1MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDBcdTY1NDFcdTY1NDJcdTY1NDNcdTY1NDRcdTY1NDZcdTY1NDdcdTY1NGFc''@;'; put 'put ''dTY1NGJcdTY1NGRcdTY1NGVcdTY1NTBcdTY1NTJcdTY1NTNcdTY1NTRcdTY1NTdcdTY1NThcdTY1NWFcdTY1NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVcdTY1NjdcdTY1NjhcdTY1NjlcdTY1NmFcdTY1NmRcdTY1NmVcdTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1''@;'; put 'put ''NzhcdTY1NzlcdTY1N2FcdTY1N2JcdTY1N2NcdTY1N2RcdTY1N2VcdTY1N2ZcdTY1ODBcdTY1ODFcdTY1ODJcdTY1ODNcdTY1ODRcdTY1ODVcdTY1ODZcdTY1ODhcdTY1ODlcdTY1OGFcdTY1OGRcdTY1OGVcdTY1OGZcdTY1OTJcdTY1OTRcdTY1OTVcdTY1OTZcdTY1OThcdTY1OWFcdTY1OWRc''@;'; put 'put ''dTY1OWVcdTY1YTBcdTY1YTJcdTY1YTNcdTY1YTZcdTY1YThcdTY1YWFcdTY1YWNcdTY1YWVcdTY1YjFcdTY1YjJcdTY1YjNcdTY1YjRcdTY1YjVcdTY1YjZcdTY1YjdcdTY1YjhcdTY1YmFcdTY1YmJcdTY1YmVcdTY1YmZcdTY1YzBcdTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1''@;'; put 'put ''Y2RcdTY1ZDBcdTY1ZDFcdTY1ZDNcdTY1ZDRcdTY1ZDVcdTY1ZDhcdTY1ZDlcdTY1ZGFcdTY1ZGJcdTY1ZGNcdTY1ZGRcdTY1ZGVcdTY1ZGZcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1ZWJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE0''@;'; put 'put ''OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDhdW2ddXT0zNzg4OCtnLHlbMzc4ODgrZ109X1sxNDhdW2ddKTtmb3IoX1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY1ZjJcdTY1ZjNcdTY1ZjRcdTY1ZjVcdTY1ZjhcdTY1''@;'; put 'put ''ZjlcdTY1ZmJcdTY1ZmNcdTY1ZmRcdTY1ZmVcdTY1ZmZcdTY2MDFcdTY2MDRcdTY2MDVcdTY2MDdcdTY2MDhcdTY2MDlcdTY2MGJcdTY2MGRcdTY2MTBcdTY2MTFcdTY2MTJcdTY2MTZcdTY2MTdcdTY2MThcdTY2MWFcdTY2MWJcdTY2MWNcdTY2MWVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRc''@;'; put 'put ''dTY2MjZcdTY2MjlcdTY2MmFcdTY2MmJcdTY2MmNcdTY2MmVcdTY2MzBcdTY2MzJcdTY2MzNcdTY2MzdcdTY2MzhcdTY2MzlcdTY2M2FcdTY2M2JcdTY2M2RcdTY2M2ZcdTY2NDBcdTY2NDJcdTY2NDRcdTY2NDVcdTY2NDZcdTY2NDdcdTY2NDhcdTY2NDlcdTY2NGFcdTY2NGRcdTY2NGVcdTY2''@;'; put 'put ''NTBcdTY2NTFcdTY2NThcdWZmZmRcdTY2NTlcdTY2NWJcdTY2NWNcdTY2NWRcdTY2NWVcdTY2NjBcdTY2NjJcdTY2NjNcdTY2NjVcdTY2NjdcdTY2NjlcdTY2NmFcdTY2NmJcdTY2NmNcdTY2NmRcdTY2NzFcdTY2NzJcdTY2NzNcdTY2NzVcdTY2NzhcdTY2NzlcdTY2N2JcdTY2N2NcdTY2N2Rc''@;'; put 'put ''dTY2N2ZcdTY2ODBcdTY2ODFcdTY2ODNcdTY2ODVcdTY2ODZcdTY2ODhcdTY2ODlcdTY2OGFcdTY2OGJcdTY2OGRcdTY2OGVcdTY2OGZcdTY2OTBcdTY2OTJcdTY2OTNcdTY2OTRcdTY2OTVcdTY2OThcdTY2OTlcdTY2OWFcdTY2OWJcdTY2OWNcdTY2OWVcdTY2OWZcdTY2YTBcdTY2YTFcdTY2''@;'; put 'put ''YTJcdTY2YTNcdTY2YTRcdTY2YTVcdTY2YTZcdTY2YTlcdTY2YWFcdTY2YWJcdTY2YWNcdTY2YWRcdTY2YWZcdTY2YjBcdTY2YjFcdTY2YjJcdTY2YjNcdTY2YjVcdTY2YjZcdTY2YjdcdTY2YjhcdTY2YmFcdTY2YmJcdTY2YmNcdTY2YmRcdTY2YmZcdTY2YzBcdTY2YzFcdTY2YzJcdTY2YzNc''@;'; put 'put ''dTY2YzRcdTY2YzVcdTY2YzZcdTY2YzdcdTY2YzhcdTY2YzlcdTY2Y2FcdTY2Y2JcdTY2Y2NcdTY2Y2RcdTY2Y2VcdTY2Y2ZcdTY2ZDBcdTY2ZDFcdTY2ZDJcdTY2ZDNcdTY2ZDRcdTY2ZDVcdTY2ZDZcdTY2ZDdcdTY2ZDhcdTY2ZGFcdTY2ZGVcdTY2ZGZcdTY2ZTBcdTY2ZTFcdTY2ZTJcdTY2''@;'; put 'put ''ZTNcdTY2ZTRcdTY2ZTVcdTY2ZTdcdTY2ZThcdTY2ZWFcdTY2ZWJcdTY2ZWNcdTY2ZWRcdTY2ZWVcdTY2ZWZcdTY2ZjFcdTY2ZjVcdTY2ZjZcdTY2ZjhcdTY2ZmFcdTY2ZmJcdTY2ZmRcdTY3MDFcdTY3MDJcdTY3MDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNDldLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzE0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNDldW2ddXT0zODE0NCtnLHlbMzgxNDQrZ109X1sxNDldW2ddKTtmb3IoX1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3MDRcdTY3MDVcdTY3MDZcdTY3''@;'; put 'put ''MDdcdTY3MGNcdTY3MGVcdTY3MGZcdTY3MTFcdTY3MTJcdTY3MTNcdTY3MTZcdTY3MThcdTY3MTlcdTY3MWFcdTY3MWNcdTY3MWVcdTY3MjBcdTY3MjFcdTY3MjJcdTY3MjNcdTY3MjRcdTY3MjVcdTY3MjdcdTY3MjlcdTY3MmVcdTY3MzBcdTY3MzJcdTY3MzNcdTY3MzZcdTY3MzdcdTY3Mzhc''@;'; put 'put ''dTY3MzlcdTY3M2JcdTY3M2NcdTY3M2VcdTY3M2ZcdTY3NDFcdTY3NDRcdTY3NDVcdTY3NDdcdTY3NGFcdTY3NGJcdTY3NGRcdTY3NTJcdTY3NTRcdTY3NTVcdTY3NTdcdTY3NThcdTY3NTlcdTY3NWFcdTY3NWJcdTY3NWRcdTY3NjJcdTY3NjNcdTY3NjRcdTY3NjZcdTY3NjdcdTY3NmJcdTY3''@;'; put 'put ''NmNcdTY3NmVcdTY3NzFcdTY3NzRcdTY3NzZcdWZmZmRcdTY3NzhcdTY3NzlcdTY3N2FcdTY3N2JcdTY3N2RcdTY3ODBcdTY3ODJcdTY3ODNcdTY3ODVcdTY3ODZcdTY3ODhcdTY3OGFcdTY3OGNcdTY3OGRcdTY3OGVcdTY3OGZcdTY3OTFcdTY3OTJcdTY3OTNcdTY3OTRcdTY3OTZcdTY3OTlc''@;'; put 'put ''dTY3OWJcdTY3OWZcdTY3YTBcdTY3YTFcdTY3YTRcdTY3YTZcdTY3YTlcdTY3YWNcdTY3YWVcdTY3YjFcdTY3YjJcdTY3YjRcdTY3YjlcdTY3YmFcdTY3YmJcdTY3YmNcdTY3YmRcdTY3YmVcdTY3YmZcdTY3YzBcdTY3YzJcdTY3YzVcdTY3YzZcdTY3YzdcdTY3YzhcdTY3YzlcdTY3Y2FcdTY3''@;'; put 'put ''Y2JcdTY3Y2NcdTY3Y2RcdTY3Y2VcdTY3ZDVcdTY3ZDZcdTY3ZDdcdTY3ZGJcdTY3ZGZcdTY3ZTFcdTY3ZTNcdTY3ZTRcdTY3ZTZcdTY3ZTdcdTY3ZThcdTY3ZWFcdTY3ZWJcdTY3ZWRcdTY3ZWVcdTY3ZjJcdTY3ZjVcdTY3ZjZcdTY3ZjdcdTY3ZjhcdTY3ZjlcdTY3ZmFcdTY3ZmJcdTY3ZmNc''@;'; put 'put ''dTY3ZmVcdTY4MDFcdTY4MDJcdTY4MDNcdTY4MDRcdTY4MDZcdTY4MGRcdTY4MTBcdTY4MTJcdTY4MTRcdTY4MTVcdTY4MThcdTY4MTlcdTY4MWFcdTY4MWJcdTY4MWNcdTY4MWVcdTY4MWZcdTY4MjBcdTY4MjJcdTY4MjNcdTY4MjRcdTY4MjVcdTY4MjZcdTY4MjdcdTY4MjhcdTY4MmJcdTY4''@;'; put 'put ''MmNcdTY4MmRcdTY4MmVcdTY4MmZcdTY4MzBcdTY4MzFcdTY4MzRcdTY4MzVcdTY4MzZcdTY4M2FcdTY4M2JcdTY4M2ZcdTY4NDdcdTY4NGJcdTY4NGRcdTY4NGZcdTY4NTJcdTY4NTZcdTY4NTdcdTY4NThcdTY4NTlcdTY4NWFcdTY4NWJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTBd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTBdW2ddXT0zODQwMCtnLHlbMzg0MDArZ109X1sxNTBdW2ddKTtmb3IoX1sxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4NWNcdTY4''@;'; put 'put ''NWRcdTY4NWVcdTY4NWZcdTY4NmFcdTY4NmNcdTY4NmRcdTY4NmVcdTY4NmZcdTY4NzBcdTY4NzFcdTY4NzJcdTY4NzNcdTY4NzVcdTY4NzhcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4N2RcdTY4N2VcdTY4N2ZcdTY4ODBcdTY4ODJcdTY4ODRcdTY4ODdcdTY4ODhcdTY4ODlcdTY4OGFc''@;'; put 'put ''dTY4OGJcdTY4OGNcdTY4OGRcdTY4OGVcdTY4OTBcdTY4OTFcdTY4OTJcdTY4OTRcdTY4OTVcdTY4OTZcdTY4OThcdTY4OTlcdTY4OWFcdTY4OWJcdTY4OWNcdTY4OWRcdTY4OWVcdTY4OWZcdTY4YTBcdTY4YTFcdTY4YTNcdTY4YTRcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWJcdTY4YWNcdTY4''@;'; put 'put ''YWVcdTY4YjFcdTY4YjJcdTY4YjRcdTY4YjZcdTY4YjdcdTY4YjhcdWZmZmRcdTY4YjlcdTY4YmFcdTY4YmJcdTY4YmNcdTY4YmRcdTY4YmVcdTY4YmZcdTY4YzFcdTY4YzNcdTY4YzRcdTY4YzVcdTY4YzZcdTY4YzdcdTY4YzhcdTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBcdTY4ZDFc''@;'; put 'put ''dTY4ZDNcdTY4ZDRcdTY4ZDZcdTY4ZDdcdTY4ZDlcdTY4ZGJcdTY4ZGNcdTY4ZGRcdTY4ZGVcdTY4ZGZcdTY4ZTFcdTY4ZTJcdTY4ZTRcdTY4ZTVcdTY4ZTZcdTY4ZTdcdTY4ZThcdTY4ZTlcdTY4ZWFcdTY4ZWJcdTY4ZWNcdTY4ZWRcdTY4ZWZcdTY4ZjJcdTY4ZjNcdTY4ZjRcdTY4ZjZcdTY4''@;'; put 'put ''ZjdcdTY4ZjhcdTY4ZmJcdTY4ZmRcdTY4ZmVcdTY4ZmZcdTY5MDBcdTY5MDJcdTY5MDNcdTY5MDRcdTY5MDZcdTY5MDdcdTY5MDhcdTY5MDlcdTY5MGFcdTY5MGNcdTY5MGZcdTY5MTFcdTY5MTNcdTY5MTRcdTY5MTVcdTY5MTZcdTY5MTdcdTY5MThcdTY5MTlcdTY5MWFcdTY5MWJcdTY5MWNc''@;'; put 'put ''dTY5MWRcdTY5MWVcdTY5MjFcdTY5MjJcdTY5MjNcdTY5MjVcdTY5MjZcdTY5MjdcdTY5MjhcdTY5MjlcdTY5MmFcdTY5MmJcdTY5MmNcdTY5MmVcdTY5MmZcdTY5MzFcdTY5MzJcdTY5MzNcdTY5MzVcdTY5MzZcdTY5MzdcdTY5MzhcdTY5M2FcdTY5M2JcdTY5M2NcdTY5M2VcdTY5NDBcdTY5''@;'; put 'put ''NDFcdTY5NDNcdTY5NDRcdTY5NDVcdTY5NDZcdTY5NDdcdTY5NDhcdTY5NDlcdTY5NGFcdTY5NGJcdTY5NGNcdTY5NGRcdTY5NGVcdTY5NGZcdTY5NTBcdTY5NTFcdTY5NTJcdTY5NTNcdTY5NTVcdTY5NTZcdTY5NThcdTY5NTlcdTY5NWJcdTY5NWNcdTY5NWZcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1sxNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTFdW2ddXT0zODY1NitnLHlbMzg2NTYrZ109X1sxNTFdW2ddKTtmb3IoX1sxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTY5NjFcdTY5NjJcdTY5NjRcdTY5NjVcdTY5NjdcdTY5NjhcdTY5NjlcdTY5NmFcdTY5NmNcdTY5NmRcdTY5NmZcdTY5NzBcdTY5NzJcdTY5NzNcdTY5NzRcdTY5NzVcdTY5NzZcdTY5N2FcdTY5N2JcdTY5N2RcdTY5N2VcdTY5N2ZcdTY5ODFcdTY5ODNcdTY5ODVcdTY5OGFcdTY5OGJc''@;'; put 'put ''dTY5OGNcdTY5OGVcdTY5OGZcdTY5OTBcdTY5OTFcdTY5OTJcdTY5OTNcdTY5OTZcdTY5OTdcdTY5OTlcdTY5OWFcdTY5OWRcdTY5OWVcdTY5OWZcdTY5YTBcdTY5YTFcdTY5YTJcdTY5YTNcdTY5YTRcdTY5YTVcdTY5YTZcdTY5YTlcdTY5YWFcdTY5YWNcdTY5YWVcdTY5YWZcdTY5YjBcdTY5''@;'; put 'put ''YjJcdTY5YjNcdTY5YjVcdTY5YjZcdTY5YjhcdTY5YjlcdTY5YmFcdTY5YmNcdTY5YmRcdWZmZmRcdTY5YmVcdTY5YmZcdTY5YzBcdTY5YzJcdTY5YzNcdTY5YzRcdTY5YzVcdTY5YzZcdTY5YzdcdTY5YzhcdTY5YzlcdTY5Y2JcdTY5Y2RcdTY5Y2ZcdTY5ZDFcdTY5ZDJcdTY5ZDNcdTY5ZDVc''@;'; put 'put ''dTY5ZDZcdTY5ZDdcdTY5ZDhcdTY5ZDlcdTY5ZGFcdTY5ZGNcdTY5ZGRcdTY5ZGVcdTY5ZTFcdTY5ZTJcdTY5ZTNcdTY5ZTRcdTY5ZTVcdTY5ZTZcdTY5ZTdcdTY5ZThcdTY5ZTlcdTY5ZWFcdTY5ZWJcdTY5ZWNcdTY5ZWVcdTY5ZWZcdTY5ZjBcdTY5ZjFcdTY5ZjNcdTY5ZjRcdTY5ZjVcdTY5''@;'; put 'put ''ZjZcdTY5ZjdcdTY5ZjhcdTY5ZjlcdTY5ZmFcdTY5ZmJcdTY5ZmNcdTY5ZmVcdTZhMDBcdTZhMDFcdTZhMDJcdTZhMDNcdTZhMDRcdTZhMDVcdTZhMDZcdTZhMDdcdTZhMDhcdTZhMDlcdTZhMGJcdTZhMGNcdTZhMGRcdTZhMGVcdTZhMGZcdTZhMTBcdTZhMTFcdTZhMTJcdTZhMTNcdTZhMTRc''@;'; put 'put ''dTZhMTVcdTZhMTZcdTZhMTlcdTZhMWFcdTZhMWJcdTZhMWNcdTZhMWRcdTZhMWVcdTZhMjBcdTZhMjJcdTZhMjNcdTZhMjRcdTZhMjVcdTZhMjZcdTZhMjdcdTZhMjlcdTZhMmJcdTZhMmNcdTZhMmRcdTZhMmVcdTZhMzBcdTZhMzJcdTZhMzNcdTZhMzRcdTZhMzZcdTZhMzdcdTZhMzhcdTZh''@;'; put 'put ''MzlcdTZhM2FcdTZhM2JcdTZhM2NcdTZhM2ZcdTZhNDBcdTZhNDFcdTZhNDJcdTZhNDNcdTZhNDVcdTZhNDZcdTZhNDhcdTZhNDlcdTZhNGFcdTZhNGJcdTZhNGNcdTZhNGRcdTZhNGVcdTZhNGZcdTZhNTFcdTZhNTJcdTZhNTNcdTZhNTRcdTZhNTVcdTZhNTZcdTZhNTdcdTZhNWFcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTJdW2ddXT0zODkxMitnLHlbMzg5MTIrZ109X1sxNTJdW2ddKTtmb3IoX1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTZhNWNcdTZhNWRcdTZhNWVcdTZhNWZcdTZhNjBcdTZhNjJcdTZhNjNcdTZhNjRcdTZhNjZcdTZhNjdcdTZhNjhcdTZhNjlcdTZhNmFcdTZhNmJcdTZhNmNcdTZhNmRcdTZhNmVcdTZhNmZcdTZhNzBcdTZhNzJcdTZhNzNcdTZhNzRcdTZhNzVcdTZhNzZcdTZhNzdc''@;'; put 'put ''dTZhNzhcdTZhN2FcdTZhN2JcdTZhN2RcdTZhN2VcdTZhN2ZcdTZhODFcdTZhODJcdTZhODNcdTZhODVcdTZhODZcdTZhODdcdTZhODhcdTZhODlcdTZhOGFcdTZhOGJcdTZhOGNcdTZhOGRcdTZhOGZcdTZhOTJcdTZhOTNcdTZhOTRcdTZhOTVcdTZhOTZcdTZhOThcdTZhOTlcdTZhOWFcdTZh''@;'; put 'put ''OWJcdTZhOWNcdTZhOWRcdTZhOWVcdTZhOWZcdTZhYTFcdTZhYTJcdTZhYTNcdTZhYTRcdTZhYTVcdTZhYTZcdWZmZmRcdTZhYTdcdTZhYThcdTZhYWFcdTZhYWRcdTZhYWVcdTZhYWZcdTZhYjBcdTZhYjFcdTZhYjJcdTZhYjNcdTZhYjRcdTZhYjVcdTZhYjZcdTZhYjdcdTZhYjhcdTZhYjlc''@;'; put 'put ''dTZhYmFcdTZhYmJcdTZhYmNcdTZhYmRcdTZhYmVcdTZhYmZcdTZhYzBcdTZhYzFcdTZhYzJcdTZhYzNcdTZhYzRcdTZhYzVcdTZhYzZcdTZhYzdcdTZhYzhcdTZhYzlcdTZhY2FcdTZhY2JcdTZhY2NcdTZhY2RcdTZhY2VcdTZhY2ZcdTZhZDBcdTZhZDFcdTZhZDJcdTZhZDNcdTZhZDRcdTZh''@;'; put 'put ''ZDVcdTZhZDZcdTZhZDdcdTZhZDhcdTZhZDlcdTZhZGFcdTZhZGJcdTZhZGNcdTZhZGRcdTZhZGVcdTZhZGZcdTZhZTBcdTZhZTFcdTZhZTJcdTZhZTNcdTZhZTRcdTZhZTVcdTZhZTZcdTZhZTdcdTZhZThcdTZhZTlcdTZhZWFcdTZhZWJcdTZhZWNcdTZhZWRcdTZhZWVcdTZhZWZcdTZhZjBc''@;'; put 'put ''dTZhZjFcdTZhZjJcdTZhZjNcdTZhZjRcdTZhZjVcdTZhZjZcdTZhZjdcdTZhZjhcdTZhZjlcdTZhZmFcdTZhZmJcdTZhZmNcdTZhZmRcdTZhZmVcdTZhZmZcdTZiMDBcdTZiMDFcdTZiMDJcdTZiMDNcdTZiMDRcdTZiMDVcdTZiMDZcdTZiMDdcdTZiMDhcdTZiMDlcdTZiMGFcdTZiMGJcdTZi''@;'; put 'put ''MGNcdTZiMGRcdTZiMGVcdTZiMGZcdTZiMTBcdTZiMTFcdTZiMTJcdTZiMTNcdTZiMTRcdTZiMTVcdTZiMTZcdTZiMTdcdTZiMThcdTZiMTlcdTZiMWFcdTZiMWJcdTZiMWNcdTZiMWRcdTZiMWVcdTZiMWZcdTZiMjVcdTZiMjZcdTZiMjhcdTZiMjlcdTZiMmFcdTZiMmJcdTZiMmNcdTZiMmRc''@;'; put 'put ''dTZiMmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTNdW2ddXT0zOTE2OCtnLHlbMzkxNjgrZ109X1sxNTNdW2ddKTtmb3IoX1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiMmZcdTZiMzBcdTZiMzFcdTZiMzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZiM2NcdTZiM2RcdTZiM2ZcdTZiNDBcdTZiNDFcdTZiNDJcdTZiNDRcdTZiNDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGRcdTZiNGVcdTZiNGZc''@;'; put 'put ''dTZiNTBcdTZiNTFcdTZiNTJcdTZiNTNcdTZiNTRcdTZiNTVcdTZiNTZcdTZiNTdcdTZiNThcdTZiNWFcdTZiNWJcdTZiNWNcdTZiNWRcdTZiNWVcdTZiNWZcdTZiNjBcdTZiNjFcdTZiNjhcdTZiNjlcdTZiNmJcdTZiNmNcdTZiNmRcdTZiNmVcdTZiNmZcdTZiNzBcdTZiNzFcdTZiNzJcdTZi''@;'; put 'put ''NzNcdTZiNzRcdTZiNzVcdTZiNzZcdTZiNzdcdTZiNzhcdTZiN2FcdTZiN2RcdTZiN2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODhcdWZmZmRcdTZiOGNcdTZiOGVcdTZiOGZcdTZiOTBcdTZiOTFcdTZiOTRcdTZiOTVcdTZiOTdcdTZiOThcdTZiOTlcdTZiOWNcdTZiOWRcdTZiOWVcdTZiOWZc''@;'; put 'put ''dTZiYTBcdTZiYTJcdTZiYTNcdTZiYTRcdTZiYTVcdTZiYTZcdTZiYTdcdTZiYThcdTZiYTlcdTZiYWJcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYWZcdTZiYjBcdTZiYjFcdTZiYjJcdTZiYjZcdTZiYjhcdTZiYjlcdTZiYmFcdTZiYmJcdTZiYmNcdTZiYmRcdTZiYmVcdTZiYzBcdTZiYzNcdTZi''@;'; put 'put ''YzRcdTZiYzZcdTZiYzdcdTZiYzhcdTZiYzlcdTZiY2FcdTZiY2NcdTZiY2VcdTZiZDBcdTZiZDFcdTZiZDhcdTZiZGFcdTZiZGNcdTZiZGRcdTZiZGVcdTZiZGZcdTZiZTBcdTZiZTJcdTZiZTNcdTZiZTRcdTZiZTVcdTZiZTZcdTZiZTdcdTZiZThcdTZiZTlcdTZiZWNcdTZiZWRcdTZiZWVc''@;'; put 'put ''dTZiZjBcdTZiZjFcdTZiZjJcdTZiZjRcdTZiZjZcdTZiZjdcdTZiZjhcdTZiZmFcdTZiZmJcdTZiZmNcdTZiZmVcdTZiZmZcdTZjMDBcdTZjMDFcdTZjMDJcdTZjMDNcdTZjMDRcdTZjMDhcdTZjMDlcdTZjMGFcdTZjMGJcdTZjMGNcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNcdTZjMWRcdTZj''@;'; put 'put ''MWVcdTZjMjBcdTZjMjNcdTZjMjVcdTZjMmJcdTZjMmNcdTZjMmRcdTZjMzFcdTZjMzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZjNDNcdTZjNDRcdTZjNDVcdTZjNDhcdTZjNGJcdTZjNGNcdTZjNGRcdTZjNGVcdTZjNGZcdTZjNTFcdTZjNTJc''@;'; put 'put ''dTZjNTNcdTZjNTZcdTZjNThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTRdW2ddXT0zOTQyNCtnLHlbMzk0MjQrZ109X1sxNTRdW2ddKTtmb3IoX1sxNTVdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNTlcdTZjNWFcdTZjNjJcdTZjNjNcdTZjNjVcdTZjNjZcdTZjNjdcdTZjNmJcdTZjNmNcdTZjNmRcdTZjNmVcdTZjNmZcdTZjNzFcdTZjNzNcdTZjNzVcdTZjNzdcdTZjNzhcdTZjN2FcdTZjN2JcdTZjN2NcdTZjN2Zc''@;'; put 'put ''dTZjODBcdTZjODRcdTZjODdcdTZjOGFcdTZjOGJcdTZjOGRcdTZjOGVcdTZjOTFcdTZjOTJcdTZjOTVcdTZjOTZcdTZjOTdcdTZjOThcdTZjOWFcdTZjOWNcdTZjOWRcdTZjOWVcdTZjYTBcdTZjYTJcdTZjYThcdTZjYWNcdTZjYWZcdTZjYjBcdTZjYjRcdTZjYjVcdTZjYjZcdTZjYjdcdTZj''@;'; put 'put ''YmFcdTZjYzBcdTZjYzFcdTZjYzJcdTZjYzNcdTZjYzZcdTZjYzdcdTZjYzhcdTZjY2JcdTZjY2RcdTZjY2VcdTZjY2ZcdTZjZDFcdTZjZDJcdTZjZDhcdWZmZmRcdTZjZDlcdTZjZGFcdTZjZGNcdTZjZGRcdTZjZGZcdTZjZTRcdTZjZTZcdTZjZTdcdTZjZTlcdTZjZWNcdTZjZWRcdTZjZjJc''@;'; put 'put ''dTZjZjRcdTZjZjlcdTZjZmZcdTZkMDBcdTZkMDJcdTZkMDNcdTZkMDVcdTZkMDZcdTZkMDhcdTZkMDlcdTZkMGFcdTZkMGRcdTZkMGZcdTZkMTBcdTZkMTFcdTZkMTNcdTZkMTRcdTZkMTVcdTZkMTZcdTZkMThcdTZkMWNcdTZkMWRcdTZkMWZcdTZkMjBcdTZkMjFcdTZkMjJcdTZkMjNcdTZk''@;'; put 'put ''MjRcdTZkMjZcdTZkMjhcdTZkMjlcdTZkMmNcdTZkMmRcdTZkMmZcdTZkMzBcdTZkMzRcdTZkMzZcdTZkMzdcdTZkMzhcdTZkM2FcdTZkM2ZcdTZkNDBcdTZkNDJcdTZkNDRcdTZkNDlcdTZkNGNcdTZkNTBcdTZkNTVcdTZkNTZcdTZkNTdcdTZkNThcdTZkNWJcdTZkNWRcdTZkNWZcdTZkNjFc''@;'; put 'put ''dTZkNjJcdTZkNjRcdTZkNjVcdTZkNjdcdTZkNjhcdTZkNmJcdTZkNmNcdTZkNmRcdTZkNzBcdTZkNzFcdTZkNzJcdTZkNzNcdTZkNzVcdTZkNzZcdTZkNzlcdTZkN2FcdTZkN2JcdTZkN2RcdTZkN2VcdTZkN2ZcdTZkODBcdTZkODFcdTZkODNcdTZkODRcdTZkODZcdTZkODdcdTZkOGFcdTZk''@;'; put 'put ''OGJcdTZkOGRcdTZkOGZcdTZkOTBcdTZkOTJcdTZkOTZcdTZkOTdcdTZkOThcdTZkOTlcdTZkOWFcdTZkOWNcdTZkYTJcdTZkYTVcdTZkYWNcdTZkYWRcdTZkYjBcdTZkYjFcdTZkYjNcdTZkYjRcdTZkYjZcdTZkYjdcdTZkYjlcdTZkYmFcdTZkYmJcdTZkYmNcdTZkYmRcdTZkYmVcdTZkYzFc''@;'; put 'put ''dTZkYzJcdTZkYzNcdTZkYzhcdTZkYzlcdTZkY2FcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTVdW2ddXT0zOTY4MCtnLHlbMzk2ODArZ109X1sxNTVdW2ddKTtmb3IoX1sxNTZdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkY2RcdTZkY2VcdTZkY2ZcdTZkZDBcdTZkZDJcdTZkZDNcdTZkZDRcdTZkZDVcdTZkZDdcdTZkZGFcdTZkZGJcdTZkZGNcdTZkZGZcdTZkZTJcdTZkZTNcdTZkZTVcdTZkZTdcdTZkZThcdTZkZTlc''@;'; put 'put ''dTZkZWFcdTZkZWRcdTZkZWZcdTZkZjBcdTZkZjJcdTZkZjRcdTZkZjVcdTZkZjZcdTZkZjhcdTZkZmFcdTZkZmRcdTZkZmVcdTZkZmZcdTZlMDBcdTZlMDFcdTZlMDJcdTZlMDNcdTZlMDRcdTZlMDZcdTZlMDdcdTZlMDhcdTZlMDlcdTZlMGJcdTZlMGZcdTZlMTJcdTZlMTNcdTZlMTVcdTZl''@;'; put 'put ''MThcdTZlMTlcdTZlMWJcdTZlMWNcdTZlMWVcdTZlMWZcdTZlMjJcdTZlMjZcdTZlMjdcdTZlMjhcdTZlMmFcdTZlMmNcdTZlMmVcdTZlMzBcdTZlMzFcdTZlMzNcdTZlMzVcdWZmZmRcdTZlMzZcdTZlMzdcdTZlMzlcdTZlM2JcdTZlM2NcdTZlM2RcdTZlM2VcdTZlM2ZcdTZlNDBcdTZlNDFc''@;'; put 'put ''dTZlNDJcdTZlNDVcdTZlNDZcdTZlNDdcdTZlNDhcdTZlNDlcdTZlNGFcdTZlNGJcdTZlNGNcdTZlNGZcdTZlNTBcdTZlNTFcdTZlNTJcdTZlNTVcdTZlNTdcdTZlNTlcdTZlNWFcdTZlNWNcdTZlNWRcdTZlNWVcdTZlNjBcdTZlNjFcdTZlNjJcdTZlNjNcdTZlNjRcdTZlNjVcdTZlNjZcdTZl''@;'; put 'put ''NjdcdTZlNjhcdTZlNjlcdTZlNmFcdTZlNmNcdTZlNmRcdTZlNmZcdTZlNzBcdTZlNzFcdTZlNzJcdTZlNzNcdTZlNzRcdTZlNzVcdTZlNzZcdTZlNzdcdTZlNzhcdTZlNzlcdTZlN2FcdTZlN2JcdTZlN2NcdTZlN2RcdTZlODBcdTZlODFcdTZlODJcdTZlODRcdTZlODdcdTZlODhcdTZlOGFc''@;'; put 'put ''dTZlOGJcdTZlOGNcdTZlOGRcdTZlOGVcdTZlOTFcdTZlOTJcdTZlOTNcdTZlOTRcdTZlOTVcdTZlOTZcdTZlOTdcdTZlOTlcdTZlOWFcdTZlOWJcdTZlOWRcdTZlOWVcdTZlYTBcdTZlYTFcdTZlYTNcdTZlYTRcdTZlYTZcdTZlYThcdTZlYTlcdTZlYWJcdTZlYWNcdTZlYWRcdTZlYWVcdTZl''@;'; put 'put ''YjBcdTZlYjNcdTZlYjVcdTZlYjhcdTZlYjlcdTZlYmNcdTZlYmVcdTZlYmZcdTZlYzBcdTZlYzNcdTZlYzRcdTZlYzVcdTZlYzZcdTZlYzhcdTZlYzlcdTZlY2FcdTZlY2NcdTZlY2RcdTZlY2VcdTZlZDBcdTZlZDJcdTZlZDZcdTZlZDhcdTZlZDlcdTZlZGJcdTZlZGNcdTZlZGRcdTZlZTNc''@;'; put 'put ''dTZlZTdcdTZlZWFcdTZlZWJcdTZlZWNcdTZlZWRcdTZlZWVcdTZlZWZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTZdW2ddXT0zOTkzNitnLHlbMzk5MzYrZ109X1sxNTZdW2ddKTtmb3Io''@;'; put 'put ''X1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZjBcdTZlZjFcdTZlZjJcdTZlZjNcdTZlZjVcdTZlZjZcdTZlZjdcdTZlZjhcdTZlZmFcdTZlZmJcdTZlZmNcdTZlZmRcdTZlZmVcdTZlZmZcdTZmMDBcdTZmMDFcdTZmMDNc''@;'; put 'put ''dTZmMDRcdTZmMDVcdTZmMDdcdTZmMDhcdTZmMGFcdTZmMGJcdTZmMGNcdTZmMGRcdTZmMGVcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTZcdTZmMTdcdTZmMThcdTZmMTlcdTZmMWFcdTZmMWJcdTZmMWNcdTZmMWRcdTZmMWVcdTZmMWZcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZm''@;'; put 'put ''MjdcdTZmMjhcdTZmMmNcdTZmMmVcdTZmMzBcdTZmMzJcdTZmMzRcdTZmMzVcdTZmMzdcdTZmMzhcdTZmMzlcdTZmM2FcdTZmM2JcdTZmM2NcdTZmM2RcdTZmM2ZcdTZmNDBcdTZmNDFcdTZmNDJcdWZmZmRcdTZmNDNcdTZmNDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGVc''@;'; put 'put ''dTZmNGZcdTZmNTBcdTZmNTFcdTZmNTJcdTZmNTNcdTZmNTRcdTZmNTVcdTZmNTZcdTZmNTdcdTZmNTlcdTZmNWFcdTZmNWJcdTZmNWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZmNjNcdTZmNjRcdTZmNjVcdTZmNjdcdTZmNjhcdTZmNjlcdTZmNmFcdTZmNmJcdTZmNmNcdTZmNmZcdTZmNzBcdTZm''@;'; put 'put ''NzFcdTZmNzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZmNzlcdTZmN2JcdTZmN2RcdTZmN2VcdTZmN2ZcdTZmODBcdTZmODFcdTZmODJcdTZmODNcdTZmODVcdTZmODZcdTZmODdcdTZmOGFcdTZmOGJcdTZmOGZcdTZmOTBcdTZmOTFcdTZmOTJcdTZmOTNcdTZmOTRcdTZmOTVcdTZmOTZcdTZmOTdc''@;'; put 'put ''dTZmOThcdTZmOTlcdTZmOWFcdTZmOWJcdTZmOWRcdTZmOWVcdTZmOWZcdTZmYTBcdTZmYTJcdTZmYTNcdTZmYTRcdTZmYTVcdTZmYTZcdTZmYThcdTZmYTlcdTZmYWFcdTZmYWJcdTZmYWNcdTZmYWRcdTZmYWVcdTZmYWZcdTZmYjBcdTZmYjFcdTZmYjJcdTZmYjRcdTZmYjVcdTZmYjdcdTZm''@;'; put 'put ''YjhcdTZmYmFcdTZmYmJcdTZmYmNcdTZmYmRcdTZmYmVcdTZmYmZcdTZmYzFcdTZmYzNcdTZmYzRcdTZmYzVcdTZmYzZcdTZmYzdcdTZmYzhcdTZmY2FcdTZmY2JcdTZmY2NcdTZmY2RcdTZmY2VcdTZmY2ZcdTZmZDBcdTZmZDNcdTZmZDRcdTZmZDVcdTZmZDZcdTZmZDdcdTZmZDhcdTZmZDlc''@;'; put 'put ''dTZmZGFcdTZmZGJcdTZmZGNcdTZmZGRcdTZmZGZcdTZmZTJcdTZmZTNcdTZmZTRcdTZmZTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTddW2ddXT00MDE5MitnLHlbNDAxOTIrZ109X1sx''@;'; put 'put ''NTddW2ddKTtmb3IoX1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmZTZcdTZmZTdcdTZmZThcdTZmZTlcdTZmZWFcdTZmZWJcdTZmZWNcdTZmZWRcdTZmZjBcdTZmZjFcdTZmZjJcdTZmZjNcdTZmZjRcdTZmZjVcdTZmZjZc''@;'; put 'put ''dTZmZjdcdTZmZjhcdTZmZjlcdTZmZmFcdTZmZmJcdTZmZmNcdTZmZmRcdTZmZmVcdTZmZmZcdTcwMDBcdTcwMDFcdTcwMDJcdTcwMDNcdTcwMDRcdTcwMDVcdTcwMDZcdTcwMDdcdTcwMDhcdTcwMDlcdTcwMGFcdTcwMGJcdTcwMGNcdTcwMGRcdTcwMGVcdTcwMGZcdTcwMTBcdTcwMTJcdTcw''@;'; put 'put ''MTNcdTcwMTRcdTcwMTVcdTcwMTZcdTcwMTdcdTcwMThcdTcwMTlcdTcwMWNcdTcwMWRcdTcwMWVcdTcwMWZcdTcwMjBcdTcwMjFcdTcwMjJcdTcwMjRcdTcwMjVcdTcwMjZcdTcwMjdcdTcwMjhcdTcwMjlcdTcwMmFcdWZmZmRcdTcwMmJcdTcwMmNcdTcwMmRcdTcwMmVcdTcwMmZcdTcwMzBc''@;'; put 'put ''dTcwMzFcdTcwMzJcdTcwMzNcdTcwMzRcdTcwMzZcdTcwMzdcdTcwMzhcdTcwM2FcdTcwM2JcdTcwM2NcdTcwM2RcdTcwM2VcdTcwM2ZcdTcwNDBcdTcwNDFcdTcwNDJcdTcwNDNcdTcwNDRcdTcwNDVcdTcwNDZcdTcwNDdcdTcwNDhcdTcwNDlcdTcwNGFcdTcwNGJcdTcwNGRcdTcwNGVcdTcw''@;'; put 'put ''NTBcdTcwNTFcdTcwNTJcdTcwNTNcdTcwNTRcdTcwNTVcdTcwNTZcdTcwNTdcdTcwNThcdTcwNTlcdTcwNWFcdTcwNWJcdTcwNWNcdTcwNWRcdTcwNWZcdTcwNjBcdTcwNjFcdTcwNjJcdTcwNjNcdTcwNjRcdTcwNjVcdTcwNjZcdTcwNjdcdTcwNjhcdTcwNjlcdTcwNmFcdTcwNmVcdTcwNzFc''@;'; put 'put ''dTcwNzJcdTcwNzNcdTcwNzRcdTcwNzdcdTcwNzlcdTcwN2FcdTcwN2JcdTcwN2RcdTcwODFcdTcwODJcdTcwODNcdTcwODRcdTcwODZcdTcwODdcdTcwODhcdTcwOGJcdTcwOGNcdTcwOGRcdTcwOGZcdTcwOTBcdTcwOTFcdTcwOTNcdTcwOTdcdTcwOThcdTcwOWFcdTcwOWJcdTcwOWVcdTcw''@;'; put 'put ''OWZcdTcwYTBcdTcwYTFcdTcwYTJcdTcwYTNcdTcwYTRcdTcwYTVcdTcwYTZcdTcwYTdcdTcwYThcdTcwYTlcdTcwYWFcdTcwYjBcdTcwYjJcdTcwYjRcdTcwYjVcdTcwYjZcdTcwYmFcdTcwYmVcdTcwYmZcdTcwYzRcdTcwYzVcdTcwYzZcdTcwYzdcdTcwYzlcdTcwY2JcdTcwY2NcdTcwY2Rc''@;'; put 'put ''dTcwY2VcdTcwY2ZcdTcwZDBcdTcwZDFcdTcwZDJcdTcwZDNcdTcwZDRcdTcwZDVcdTcwZDZcdTcwZDdcdTcwZGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNThdW2ddXT00MDQ0OCtnLHlb''@;'; put 'put ''NDA0NDgrZ109X1sxNThdW2ddKTtmb3IoX1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwZGNcdTcwZGRcdTcwZGVcdTcwZTBcdTcwZTFcdTcwZTJcdTcwZTNcdTcwZTVcdTcwZWFcdTcwZWVcdTcwZjBcdTcwZjFcdTcwZjJc''@;'; put 'put ''dTcwZjNcdTcwZjRcdTcwZjVcdTcwZjZcdTcwZjhcdTcwZmFcdTcwZmJcdTcwZmNcdTcwZmVcdTcwZmZcdTcxMDBcdTcxMDFcdTcxMDJcdTcxMDNcdTcxMDRcdTcxMDVcdTcxMDZcdTcxMDdcdTcxMDhcdTcxMGJcdTcxMGNcdTcxMGRcdTcxMGVcdTcxMGZcdTcxMTFcdTcxMTJcdTcxMTRcdTcx''@;'; put 'put ''MTdcdTcxMWJcdTcxMWNcdTcxMWRcdTcxMWVcdTcxMWZcdTcxMjBcdTcxMjFcdTcxMjJcdTcxMjNcdTcxMjRcdTcxMjVcdTcxMjdcdTcxMjhcdTcxMjlcdTcxMmFcdTcxMmJcdTcxMmNcdTcxMmRcdTcxMmVcdTcxMzJcdTcxMzNcdTcxMzRcdWZmZmRcdTcxMzVcdTcxMzdcdTcxMzhcdTcxMzlc''@;'; put 'put ''dTcxM2FcdTcxM2JcdTcxM2NcdTcxM2RcdTcxM2VcdTcxM2ZcdTcxNDBcdTcxNDFcdTcxNDJcdTcxNDNcdTcxNDRcdTcxNDZcdTcxNDdcdTcxNDhcdTcxNDlcdTcxNGJcdTcxNGRcdTcxNGZcdTcxNTBcdTcxNTFcdTcxNTJcdTcxNTNcdTcxNTRcdTcxNTVcdTcxNTZcdTcxNTdcdTcxNThcdTcx''@;'; put 'put ''NTlcdTcxNWFcdTcxNWJcdTcxNWRcdTcxNWZcdTcxNjBcdTcxNjFcdTcxNjJcdTcxNjNcdTcxNjVcdTcxNjlcdTcxNmFcdTcxNmJcdTcxNmNcdTcxNmRcdTcxNmZcdTcxNzBcdTcxNzFcdTcxNzRcdTcxNzVcdTcxNzZcdTcxNzdcdTcxNzlcdTcxN2JcdTcxN2NcdTcxN2VcdTcxN2ZcdTcxODBc''@;'; put 'put ''dTcxODFcdTcxODJcdTcxODNcdTcxODVcdTcxODZcdTcxODdcdTcxODhcdTcxODlcdTcxOGJcdTcxOGNcdTcxOGRcdTcxOGVcdTcxOTBcdTcxOTFcdTcxOTJcdTcxOTNcdTcxOTVcdTcxOTZcdTcxOTdcdTcxOWFcdTcxOWJcdTcxOWNcdTcxOWRcdTcxOWVcdTcxYTFcdTcxYTJcdTcxYTNcdTcx''@;'; put 'put ''YTRcdTcxYTVcdTcxYTZcdTcxYTdcdTcxYTlcdTcxYWFcdTcxYWJcdTcxYWRcdTcxYWVcdTcxYWZcdTcxYjBcdTcxYjFcdTcxYjJcdTcxYjRcdTcxYjZcdTcxYjdcdTcxYjhcdTcxYmFcdTcxYmJcdTcxYmNcdTcxYmRcdTcxYmVcdTcxYmZcdTcxYzBcdTcxYzFcdTcxYzJcdTcxYzRcdTcxYzVc''@;'; put 'put ''dTcxYzZcdTcxYzdcdTcxYzhcdTcxYzlcdTcxY2FcdTcxY2JcdTcxY2NcdTcxY2RcdTcxY2ZcdTcxZDBcdTcxZDFcdTcxZDJcdTcxZDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE1OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNTldW2dd''@;'; put 'put ''XT00MDcwNCtnLHlbNDA3MDQrZ109X1sxNTldW2ddKTtmb3IoX1sxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxZDZcdTcxZDdcdTcxZDhcdTcxZDlcdTcxZGFcdTcxZGJcdTcxZGNcdTcxZGRcdTcxZGVcdTcxZGZcdTcxZTFc''@;'; put 'put ''dTcxZTJcdTcxZTNcdTcxZTRcdTcxZTZcdTcxZThcdTcxZTlcdTcxZWFcdTcxZWJcdTcxZWNcdTcxZWRcdTcxZWZcdTcxZjBcdTcxZjFcdTcxZjJcdTcxZjNcdTcxZjRcdTcxZjVcdTcxZjZcdTcxZjdcdTcxZjhcdTcxZmFcdTcxZmJcdTcxZmNcdTcxZmRcdTcxZmVcdTcxZmZcdTcyMDBcdTcy''@;'; put 'put ''MDFcdTcyMDJcdTcyMDNcdTcyMDRcdTcyMDVcdTcyMDdcdTcyMDhcdTcyMDlcdTcyMGFcdTcyMGJcdTcyMGNcdTcyMGRcdTcyMGVcdTcyMGZcdTcyMTBcdTcyMTFcdTcyMTJcdTcyMTNcdTcyMTRcdTcyMTVcdTcyMTZcdTcyMTdcdTcyMThcdTcyMTlcdTcyMWFcdWZmZmRcdTcyMWJcdTcyMWNc''@;'; put 'put ''dTcyMWVcdTcyMWZcdTcyMjBcdTcyMjFcdTcyMjJcdTcyMjNcdTcyMjRcdTcyMjVcdTcyMjZcdTcyMjdcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJcdTcyMzNcdTcyMzRcdTcyM2FcdTcyM2NcdTcyM2VcdTcyNDBcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDRcdTcyNDVcdTcy''@;'; put 'put ''NDZcdTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTFcdTcyNTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcyNmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcyNzFcdTcyNzNc''@;'; put 'put ''dTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2RcdTcyODJcdTcyODNcdTcyODVcdTcyODZcdTcyODdcdTcyODhcdTcyODlcdTcyOGNcdTcyOGVcdTcyOTBcdTcyOTFcdTcyOTNcdTcyOTRcdTcyOTVcdTcyOTZcdTcyOTdcdTcyOThcdTcyOTlcdTcyOWFcdTcyOWJcdTcy''@;'; put 'put ''OWNcdTcyOWRcdTcyOWVcdTcyYTBcdTcyYTFcdTcyYTJcdTcyYTNcdTcyYTRcdTcyYTVcdTcyYTZcdTcyYTdcdTcyYThcdTcyYTlcdTcyYWFcdTcyYWJcdTcyYWVcdTcyYjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcyYmFcdTcyYmJcdTcyYmNcdTcyYmRcdTcyYmVcdTcyYmZcdTcyYzBcdTcyYzVc''@;'; put 'put ''dTcyYzZcdTcyYzdcdTcyYzlcdTcyY2FcdTcyY2JcdTcyY2NcdTcyY2ZcdTcyZDFcdTcyZDNcdTcyZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2MF1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1sxNjBdW2ddXT00MDk2MCtnLHlbNDA5NjArZ109X1sxNjBdW2ddKTtmb3IoX1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNFx1ZmY1ZVx1MjAxNlx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAw''@;'; put 'put ''Ylx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxNlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1''@;'; put 'put ''MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVmZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVj''@;'; put 'put ''Ylx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzE2MV1bZ11dPTQxMjE2K2cseVs0MTIxNitnXT1fWzE2MV1bZ10pO2ZvcihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ4OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4''@;'; put 'put ''ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5M1x1MjQ5NFx1MjQ5NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1''@;'; put 'put ''MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1MjQ4N1x1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1MzIyM1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIy''@;'; put 'put ''OVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYyXVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzE2Ml1bZ11dPTQxNDcyK2cseVs0MTQ3MitnXT1fWzE2Ml1bZ10pO2ZvcihfWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYx''@;'; put 'put ''NVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1''@;'; put 'put ''ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmYzY1x1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0''@;'; put 'put ''Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYz''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2M11bZ11dPTQxNzI4K2cseVs0MTcyOCtnXT1fWzE2M11bZ10pO2ZvcihfWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1''@;'; put 'put ''M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1''@;'; put 'put ''MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4''@;'; put 'put ''YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2NF0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMTY0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NF1bZ11dPTQxOTg0K2cseVs0MTk4NCtnXT1fWzE2NF1bZ10pO2ZvcihfWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBi''@;'; put 'put ''MVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1''@;'; put 'put ''MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBl''@;'; put 'put ''OFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2NV0u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NV1bZ11dPTQyMjQwK2cseVs0MjI0MCtnXT1fWzE2NV1bZ10pO2ZvcihfWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5''@;'; put 'put ''Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1''@;'; put 'put ''MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1ZmUzZlx1ZmU0MFx1ZmUz''@;'; put 'put ''ZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1ZmU0M1x1ZmU0NFx1ZmZmZFx1ZmZmZFx1ZmUzYlx1ZmUzY1x1ZmUzN1x1ZmUzOFx1ZmUzMVx1ZmZmZFx1ZmUzM1x1ZmUzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzE2Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Nl1bZ11dPTQyNDk2K2cseVs0MjQ5NitnXT1fWzE2Nl1bZ10pO2ZvcihfWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQx''@;'; put 'put ''Ylx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0''@;'; put 'put ''Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzE2N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2N11bZ11dPTQyNzUyK2cseVs0Mjc1MitnXT1fWzE2N11bZ10pO2ZvcihfWzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1MDJjYVx1MDJjYlx1MDJkOVx1MjAxM1x1MjAxNVx1MjAyNVx1MjAzNVx1MjEwNVx1MjEwOVx1MjE5Nlx1MjE5N1x1MjE5OFx1MjE5OVx1MjIxNVx1MjIxZlx1MjIyM1x1MjI1Mlx1MjI2Nlx1MjI2N1x1MjJiZlx1MjU1MFx1MjU1MVx1MjU1Mlx1MjU1M1x1MjU1NFx1''@;'; put 'put ''MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MjU2Ylx1MjU2Y1x1MjU2ZFx1MjU2ZVx1MjU2Zlx1MjU3''@;'; put 'put ''MFx1MjU3MVx1MjU3Mlx1MjU3M1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1ZmZmZFx1MjU4OFx1MjU4OVx1MjU4YVx1MjU4Ylx1MjU4Y1x1MjU4ZFx1MjU4ZVx1MjU4Zlx1MjU5M1x1MjU5NFx1MjU5NVx1MjViY1x1MjViZFx1MjVlMlx1MjVlM1x1MjVlNFx1''@;'; put 'put ''MjVlNVx1MjYwOVx1MjI5NVx1MzAxMlx1MzAxZFx1MzAxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0''@;'; put 'put ''ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1MDI1MVx1ZmZmZFx1MDE0NFx1MDE0OFx1ZmZmZFx1MDI2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1''@;'; put 'put ''MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEy''@;'; put 'put ''Nlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzE2OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OF1bZ11dPTQzMDA4K2cseVs0MzAwOCtnXT1fWzE2OF1bZ10pO2ZvcihfWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNhMVx1MzNjNFx1MzNjZVx1MzNkMVx1MzNkMlx1MzNkNVx1ZmUzMFx1ZmZlMlx1ZmZlNFx1ZmZmZFx1MjEyMVx1MzIzMVx1''@;'; put 'put ''ZmZmZFx1MjAxMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBmY1x1MzA5Ylx1MzA5Y1x1MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OVx1ZmU0YVx1ZmU0Ylx1ZmU0Y1x1ZmU0ZFx1ZmU0ZVx1ZmU0Zlx1ZmU1MFx1ZmU1MVx1ZmU1Mlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmU1''@;'; put 'put ''OVx1ZmU1YVx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmZmZFx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmU2OFx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMVx1MjUwMlx1MjUwM1x1MjUwNFx1MjUwNVx1MjUwNlx1MjUwN1x1MjUwOFx1MjUw''@;'; put 'put ''OVx1MjUwYVx1MjUwYlx1MjUwY1x1MjUwZFx1MjUwZVx1MjUwZlx1MjUxMFx1MjUxMVx1MjUxMlx1MjUxM1x1MjUxNFx1MjUxNVx1MjUxNlx1MjUxN1x1MjUxOFx1MjUxOVx1MjUxYVx1MjUxYlx1MjUxY1x1MjUxZFx1MjUxZVx1MjUxZlx1MjUyMFx1MjUyMVx1MjUyMlx1MjUyM1x1MjUyNFx1''@;'; put 'put ''MjUyNVx1MjUyNlx1MjUyN1x1MjUyOFx1MjUyOVx1MjUyYVx1MjUyYlx1MjUyY1x1MjUyZFx1MjUyZVx1MjUyZlx1MjUzMFx1MjUzMVx1MjUzMlx1MjUzM1x1MjUzNFx1MjUzNVx1MjUzNlx1MjUzN1x1MjUzOFx1MjUzOVx1MjUzYVx1MjUzYlx1MjUzY1x1MjUzZFx1MjUzZVx1MjUzZlx1MjU0''@;'; put 'put ''MFx1MjU0MVx1MjU0Mlx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1MjU0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzE2OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OV1bZ11dPTQzMjY0K2cseVs0MzI2NCtnXT1fWzE2OV1bZ10pO2ZvcihfWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NzJkY1x1NzJkZFx1NzJkZlx1NzJlMlx1NzJlM1x1NzJlNFx1NzJlNVx1NzJlNlx1NzJlN1x1NzJlYVx1NzJlYlx1NzJmNVx1NzJmNlx1NzJmOVx1NzJmZFx1NzJmZVx1NzJmZlx1NzMwMFx1NzMwMlx1NzMwNFx1NzMwNVx1NzMwNlx1NzMwN1x1NzMwOFx1NzMwOVx1''@;'; put 'put ''NzMwYlx1NzMwY1x1NzMwZFx1NzMwZlx1NzMxMFx1NzMxMVx1NzMxMlx1NzMxNFx1NzMxOFx1NzMxOVx1NzMxYVx1NzMxZlx1NzMyMFx1NzMyM1x1NzMyNFx1NzMyNlx1NzMyN1x1NzMyOFx1NzMyZFx1NzMyZlx1NzMzMFx1NzMzMlx1NzMzM1x1NzMzNVx1NzMzNlx1NzMzYVx1NzMzYlx1NzMz''@;'; put 'put ''Y1x1NzMzZFx1NzM0MFx1NzM0MVx1NzM0Mlx1NzM0M1x1NzM0NFx1NzM0NVx1NzM0Nlx1NzM0N1x1NzM0OFx1ZmZmZFx1NzM0OVx1NzM0YVx1NzM0Ylx1NzM0Y1x1NzM0ZVx1NzM0Zlx1NzM1MVx1NzM1M1x1NzM1NFx1NzM1NVx1NzM1Nlx1NzM1OFx1NzM1OVx1NzM1YVx1NzM1Ylx1NzM1Y1x1''@;'; put 'put ''NzM1ZFx1NzM1ZVx1NzM1Zlx1NzM2MVx1NzM2Mlx1NzM2M1x1NzM2NFx1NzM2NVx1NzM2Nlx1NzM2N1x1NzM2OFx1NzM2OVx1NzM2YVx1NzM2Ylx1NzM2ZVx1NzM3MFx1NzM3MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MF1bZ11dPTQzNTIwK2cseVs0MzUyMCtnXT1fWzE3MF1bZ10pO2ZvcihfWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3Mlx1NzM3M1x1NzM3NFx1NzM3NVx1NzM3Nlx1NzM3N1x1NzM3OFx1NzM3OVx1NzM3YVx1NzM3Ylx1NzM3Y1x1NzM3ZFx1NzM3Zlx1NzM4MFx1NzM4MVx1NzM4Mlx1NzM4M1x1NzM4NVx1NzM4Nlx1NzM4OFx1NzM4YVx1NzM4Y1x1NzM4ZFx1''@;'; put 'put ''NzM4Zlx1NzM5MFx1NzM5Mlx1NzM5M1x1NzM5NFx1NzM5NVx1NzM5N1x1NzM5OFx1NzM5OVx1NzM5YVx1NzM5Y1x1NzM5ZFx1NzM5ZVx1NzNhMFx1NzNhMVx1NzNhM1x1NzNhNFx1NzNhNVx1NzNhNlx1NzNhN1x1NzNhOFx1NzNhYVx1NzNhY1x1NzNhZFx1NzNiMVx1NzNiNFx1NzNiNVx1NzNi''@;'; put 'put ''Nlx1NzNiOFx1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZVx1NzNiZlx1NzNjMVx1NzNjM1x1NzNjNFx1NzNjNVx1NzNjNlx1NzNjN1x1ZmZmZFx1NzNjYlx1NzNjY1x1NzNjZVx1NzNkMlx1NzNkM1x1NzNkNFx1NzNkNVx1NzNkNlx1NzNkN1x1NzNkOFx1NzNkYVx1NzNkYlx1NzNkY1x1NzNkZFx1''@;'; put 'put ''NzNkZlx1NzNlMVx1NzNlMlx1NzNlM1x1NzNlNFx1NzNlNlx1NzNlOFx1NzNlYVx1NzNlYlx1NzNlY1x1NzNlZVx1NzNlZlx1NzNmMFx1NzNmMVx1NzNmM1x1NzNmNFx1NzNmNVx1NzNmNlx1NzNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MV1bZ11dPTQzNzc2K2cseVs0Mzc3NitnXT1fWzE3MV1bZ10pO2ZvcihfWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzNmOFx1NzNmOVx1NzNmYVx1NzNmYlx1NzNmY1x1NzNmZFx1NzNmZVx1NzNmZlx1NzQwMFx1NzQwMVx1NzQwMlx1NzQwNFx1NzQwN1x1NzQwOFx1NzQwYlx1NzQwY1x1NzQwZFx1NzQwZVx1NzQxMVx1NzQxMlx1NzQxM1x1''@;'; put 'put ''NzQxNFx1NzQxNVx1NzQxNlx1NzQxN1x1NzQxOFx1NzQxOVx1NzQxY1x1NzQxZFx1NzQxZVx1NzQxZlx1NzQyMFx1NzQyMVx1NzQyM1x1NzQyNFx1NzQyN1x1NzQyOVx1NzQyYlx1NzQyZFx1NzQyZlx1NzQzMVx1NzQzMlx1NzQzN1x1NzQzOFx1NzQzOVx1NzQzYVx1NzQzYlx1NzQzZFx1NzQz''@;'; put 'put ''ZVx1NzQzZlx1NzQ0MFx1NzQ0Mlx1NzQ0M1x1NzQ0NFx1NzQ0NVx1NzQ0Nlx1NzQ0N1x1NzQ0OFx1NzQ0OVx1NzQ0YVx1NzQ0Ylx1NzQ0Y1x1NzQ0ZFx1ZmZmZFx1NzQ0ZVx1NzQ0Zlx1NzQ1MFx1NzQ1MVx1NzQ1Mlx1NzQ1M1x1NzQ1NFx1NzQ1Nlx1NzQ1OFx1NzQ1ZFx1NzQ2MFx1NzQ2MVx1''@;'; put 'put ''NzQ2Mlx1NzQ2M1x1NzQ2NFx1NzQ2NVx1NzQ2Nlx1NzQ2N1x1NzQ2OFx1NzQ2OVx1NzQ2YVx1NzQ2Ylx1NzQ2Y1x1NzQ2ZVx1NzQ2Zlx1NzQ3MVx1NzQ3Mlx1NzQ3M1x1NzQ3NFx1NzQ3NVx1NzQ3OFx1NzQ3OVx1NzQ3YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTcyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Ml1bZ11dPTQ0MDMyK2cseVs0NDAzMitnXT1fWzE3Ml1bZ10pO2ZvcihfWzE3M109Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQ3Ylx1NzQ3Y1x1NzQ3ZFx1NzQ3Zlx1NzQ4Mlx1NzQ4NFx1NzQ4NVx1NzQ4Nlx1NzQ4OFx1NzQ4OVx1NzQ4YVx1NzQ4Y1x1NzQ4ZFx1NzQ4Zlx1NzQ5MVx1NzQ5Mlx1NzQ5M1x1NzQ5NFx1NzQ5NVx1''@;'; put 'put ''NzQ5Nlx1NzQ5N1x1NzQ5OFx1NzQ5OVx1NzQ5YVx1NzQ5Ylx1NzQ5ZFx1NzQ5Zlx1NzRhMFx1NzRhMVx1NzRhMlx1NzRhM1x1NzRhNFx1NzRhNVx1NzRhNlx1NzRhYVx1NzRhYlx1NzRhY1x1NzRhZFx1NzRhZVx1NzRhZlx1NzRiMFx1NzRiMVx1NzRiMlx1NzRiM1x1NzRiNFx1NzRiNVx1NzRi''@;'; put 'put ''Nlx1NzRiN1x1NzRiOFx1NzRiOVx1NzRiYlx1NzRiY1x1NzRiZFx1NzRiZVx1NzRiZlx1NzRjMFx1NzRjMVx1NzRjMlx1NzRjM1x1NzRjNFx1NzRjNVx1NzRjNlx1NzRjN1x1ZmZmZFx1NzRjOFx1NzRjOVx1NzRjYVx1NzRjYlx1NzRjY1x1NzRjZFx1NzRjZVx1NzRjZlx1NzRkMFx1NzRkMVx1''@;'; put 'put ''NzRkM1x1NzRkNFx1NzRkNVx1NzRkNlx1NzRkN1x1NzRkOFx1NzRkOVx1NzRkYVx1NzRkYlx1NzRkZFx1NzRkZlx1NzRlMVx1NzRlNVx1NzRlN1x1NzRlOFx1NzRlOVx1NzRlYVx1NzRlYlx1NzRlY1x1NzRlZFx1NzRmMFx1NzRmMVx1NzRmMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTczXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3M11bZ11dPTQ0Mjg4K2cseVs0NDI4OCtnXT1fWzE3M11bZ10pO2Zvcihf''@;'; put 'put ''WzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmM1x1NzRmNVx1NzRmOFx1NzRmOVx1NzRmYVx1NzRmYlx1NzRmY1x1NzRmZFx1NzRmZVx1NzUwMFx1NzUwMVx1NzUwMlx1NzUwM1x1NzUwNVx1NzUwNlx1NzUwN1x1NzUwOFx1''@;'; put 'put ''NzUwOVx1NzUwYVx1NzUwYlx1NzUwY1x1NzUwZVx1NzUxMFx1NzUxMlx1NzUxNFx1NzUxNVx1NzUxNlx1NzUxN1x1NzUxYlx1NzUxZFx1NzUxZVx1NzUyMFx1NzUyMVx1NzUyMlx1NzUyM1x1NzUyNFx1NzUyNlx1NzUyN1x1NzUyYVx1NzUyZVx1NzUzNFx1NzUzNlx1NzUzOVx1NzUzY1x1NzUz''@;'; put 'put ''ZFx1NzUzZlx1NzU0MVx1NzU0Mlx1NzU0M1x1NzU0NFx1NzU0Nlx1NzU0N1x1NzU0OVx1NzU0YVx1NzU0ZFx1NzU1MFx1NzU1MVx1NzU1Mlx1NzU1M1x1NzU1NVx1NzU1Nlx1NzU1N1x1NzU1OFx1ZmZmZFx1NzU1ZFx1NzU1ZVx1NzU1Zlx1NzU2MFx1NzU2MVx1NzU2Mlx1NzU2M1x1NzU2NFx1''@;'; put 'put ''NzU2N1x1NzU2OFx1NzU2OVx1NzU2Ylx1NzU2Y1x1NzU2ZFx1NzU2ZVx1NzU2Zlx1NzU3MFx1NzU3MVx1NzU3M1x1NzU3NVx1NzU3Nlx1NzU3N1x1NzU3YVx1NzU3Ylx1NzU3Y1x1NzU3ZFx1NzU3ZVx1NzU4MFx1NzU4MVx1NzU4Mlx1NzU4NFx1NzU4NVx1NzU4N1x1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NF1bZ11dPTQ0NTQ0K2cseVs0NDU0NCtnXT1fWzE3''@;'; put 'put ''NF1bZ10pO2ZvcihfWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzU4OFx1NzU4OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1NzU4ZVx1NzU5MFx1NzU5M1x1NzU5NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5ZVx1NzVhMlx1NzVhNlx1''@;'; put 'put ''NzVhN1x1NzVhOFx1NzVhOVx1NzVhYVx1NzVhZFx1NzViNlx1NzViN1x1NzViYVx1NzViYlx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNlx1NzVjYlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkMFx1NzVkMVx1NzVkM1x1NzVkN1x1NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVkZlx1NzVlMFx1NzVl''@;'; put 'put ''MVx1NzVlNVx1NzVlOVx1NzVlY1x1NzVlZFx1NzVlZVx1NzVlZlx1NzVmMlx1NzVmM1x1NzVmNVx1NzVmNlx1NzVmN1x1NzVmOFx1NzVmYVx1NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1NzYwNFx1NzYwNlx1NzYwN1x1ZmZmZFx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1NzYwZVx1NzYwZlx1''@;'; put 'put ''NzYxMVx1NzYxMlx1NzYxM1x1NzYxNFx1NzYxNlx1NzYxYVx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyMVx1NzYyM1x1NzYyN1x1NzYyOFx1NzYyY1x1NzYyZVx1NzYyZlx1NzYzMVx1NzYzMlx1NzYzNlx1NzYzN1x1NzYzOVx1NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0Mlx1NzY0NFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NV1bZ11dPTQ0ODAwK2cseVs0''@;'; put 'put ''NDgwMCtnXT1fWzE3NV1bZ10pO2ZvcihfWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY0NVx1NzY0Nlx1NzY0N1x1NzY0OFx1NzY0OVx1NzY0YVx1NzY0Ylx1NzY0ZVx1NzY0Zlx1NzY1MFx1NzY1MVx1NzY1Mlx1NzY1M1x1''@;'; put 'put ''NzY1NVx1NzY1N1x1NzY1OFx1NzY1OVx1NzY1YVx1NzY1Ylx1NzY1ZFx1NzY1Zlx1NzY2MFx1NzY2MVx1NzY2Mlx1NzY2NFx1NzY2NVx1NzY2Nlx1NzY2N1x1NzY2OFx1NzY2OVx1NzY2YVx1NzY2Y1x1NzY2ZFx1NzY2ZVx1NzY3MFx1NzY3MVx1NzY3Mlx1NzY3M1x1NzY3NFx1NzY3NVx1NzY3''@;'; put 'put ''Nlx1NzY3N1x1NzY3OVx1NzY3YVx1NzY3Y1x1NzY3Zlx1NzY4MFx1NzY4MVx1NzY4M1x1NzY4NVx1NzY4OVx1NzY4YVx1NzY4Y1x1NzY4ZFx1NzY4Zlx1NzY5MFx1NzY5Mlx1NzY5NFx1NzY5NVx1NzY5N1x1NzY5OFx1NzY5YVx1NzY5Ylx1ZmZmZFx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Zlx1''@;'; put 'put ''NzZhMFx1NzZhMVx1NzZhMlx1NzZhM1x1NzZhNVx1NzZhNlx1NzZhN1x1NzZhOFx1NzZhOVx1NzZhYVx1NzZhYlx1NzZhY1x1NzZhZFx1NzZhZlx1NzZiMFx1NzZiM1x1NzZiNVx1NzZiNlx1NzZiN1x1NzZiOFx1NzZiOVx1NzZiYVx1NzZiYlx1NzZiY1x1NzZiZFx1NzZiZVx1NzZjMFx1NzZj''@;'; put 'put ''MVx1NzZjM1x1NTU0YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRjZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1''@;'; put 'put ''NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIz''@;'; put 'put ''OFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQyNVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1''@;'; put 'put ''ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Nl1bZ11d''@;'; put 'put ''PTQ1MDU2K2cseVs0NTA1NitnXT1fWzE3Nl1bZ10pO2ZvcihfWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzZjNFx1NzZjN1x1NzZjOVx1NzZjYlx1NzZjY1x1NzZkM1x1NzZkNVx1NzZkOVx1NzZkYVx1NzZkY1x1NzZkZFx1''@;'; put 'put ''NzZkZVx1NzZlMFx1NzZlMVx1NzZlMlx1NzZlM1x1NzZlNFx1NzZlNlx1NzZlN1x1NzZlOFx1NzZlOVx1NzZlYVx1NzZlYlx1NzZlY1x1NzZlZFx1NzZmMFx1NzZmM1x1NzZmNVx1NzZmNlx1NzZmN1x1NzZmYVx1NzZmYlx1NzZmZFx1NzZmZlx1NzcwMFx1NzcwMlx1NzcwM1x1NzcwNVx1Nzcw''@;'; put 'put ''Nlx1NzcwYVx1NzcwY1x1NzcwZVx1NzcwZlx1NzcxMFx1NzcxMVx1NzcxMlx1NzcxM1x1NzcxNFx1NzcxNVx1NzcxNlx1NzcxN1x1NzcxOFx1NzcxYlx1NzcxY1x1NzcxZFx1NzcxZVx1NzcyMVx1NzcyM1x1NzcyNFx1NzcyNVx1NzcyN1x1NzcyYVx1NzcyYlx1ZmZmZFx1NzcyY1x1NzcyZVx1''@;'; put 'put ''NzczMFx1NzczMVx1NzczMlx1NzczM1x1NzczNFx1NzczOVx1NzczYlx1NzczZFx1NzczZVx1NzczZlx1Nzc0Mlx1Nzc0NFx1Nzc0NVx1Nzc0Nlx1Nzc0OFx1Nzc0OVx1Nzc0YVx1Nzc0Ylx1Nzc0Y1x1Nzc0ZFx1Nzc0ZVx1Nzc0Zlx1Nzc1Mlx1Nzc1M1x1Nzc1NFx1Nzc1NVx1Nzc1Nlx1Nzc1''@;'; put 'put ''N1x1Nzc1OFx1Nzc1OVx1Nzc1Y1x1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1''@;'; put 'put ''NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVm''@;'; put 'put ''OVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1''@;'; put 'put ''NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc3XVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzE3N11bZ11dPTQ1MzEyK2cseVs0NTMxMitnXT1fWzE3N11bZ10pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc1ZFx1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2NFx1Nzc2N1x1Nzc2OVx1Nzc2YVx1Nzc2ZFx1''@;'; put 'put ''Nzc2ZVx1Nzc2Zlx1Nzc3MFx1Nzc3MVx1Nzc3Mlx1Nzc3M1x1Nzc3NFx1Nzc3NVx1Nzc3Nlx1Nzc3N1x1Nzc3OFx1Nzc3YVx1Nzc3Ylx1Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1Nzc4Nlx1Nzc4N1x1Nzc4OFx1Nzc4OVx1Nzc4YVx1Nzc4Ylx1Nzc4Zlx1Nzc5MFx1Nzc5M1x1Nzc5NFx1Nzc5''@;'; put 'put ''NVx1Nzc5Nlx1Nzc5N1x1Nzc5OFx1Nzc5OVx1Nzc5YVx1Nzc5Ylx1Nzc5Y1x1Nzc5ZFx1Nzc5ZVx1NzdhMVx1NzdhM1x1NzdhNFx1NzdhNlx1NzdhOFx1NzdhYlx1NzdhZFx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiMlx1NzdiNFx1NzdiNlx1NzdiN1x1NzdiOFx1NzdiOVx1NzdiYVx1ZmZmZFx1''@;'; put 'put ''NzdiY1x1NzdiZVx1NzdjMFx1NzdjMVx1NzdjMlx1NzdjM1x1NzdjNFx1NzdjNVx1NzdjNlx1NzdjN1x1NzdjOFx1NzdjOVx1NzdjYVx1NzdjYlx1NzdjY1x1NzdjZVx1NzdjZlx1NzdkMFx1NzdkMVx1NzdkMlx1NzdkM1x1NzdkNFx1NzdkNVx1NzdkNlx1NzdkOFx1NzdkOVx1NzdkYVx1Nzdk''@;'; put 'put ''ZFx1NzdkZVx1NzdkZlx1NzdlMFx1NzdlMVx1NzdlNFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1''@;'; put 'put ''NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBl''@;'; put 'put ''OFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1''@;'; put 'put ''NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc4XVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzE3OF1bZ11dPTQ1NTY4K2cseVs0NTU2OCtnXT1fWzE3OF1bZ10pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdlNlx1NzdlOFx1NzdlYVx1NzdlZlx1NzdmMFx1NzdmMVx1NzdmMlx1''@;'; put 'put ''NzdmNFx1NzdmNVx1NzdmN1x1NzdmOVx1NzdmYVx1NzdmYlx1NzdmY1x1NzgwM1x1NzgwNFx1NzgwNVx1NzgwNlx1NzgwN1x1NzgwOFx1NzgwYVx1NzgwYlx1NzgwZVx1NzgwZlx1NzgxMFx1NzgxM1x1NzgxNVx1NzgxOVx1NzgxYlx1NzgxZVx1NzgyMFx1NzgyMVx1NzgyMlx1NzgyNFx1Nzgy''@;'; put 'put ''OFx1NzgyYVx1NzgyYlx1NzgyZVx1NzgyZlx1NzgzMVx1NzgzMlx1NzgzM1x1NzgzNVx1NzgzNlx1NzgzZFx1NzgzZlx1Nzg0MVx1Nzg0Mlx1Nzg0M1x1Nzg0NFx1Nzg0Nlx1Nzg0OFx1Nzg0OVx1Nzg0YVx1Nzg0Ylx1Nzg0ZFx1Nzg0Zlx1Nzg1MVx1Nzg1M1x1Nzg1NFx1Nzg1OFx1Nzg1OVx1''@;'; put 'put ''Nzg1YVx1ZmZmZFx1Nzg1Ylx1Nzg1Y1x1Nzg1ZVx1Nzg1Zlx1Nzg2MFx1Nzg2MVx1Nzg2Mlx1Nzg2M1x1Nzg2NFx1Nzg2NVx1Nzg2Nlx1Nzg2N1x1Nzg2OFx1Nzg2OVx1Nzg2Zlx1Nzg3MFx1Nzg3MVx1Nzg3Mlx1Nzg3M1x1Nzg3NFx1Nzg3NVx1Nzg3Nlx1Nzg3OFx1Nzg3OVx1Nzg3YVx1Nzg3''@;'; put 'put ''Ylx1Nzg3ZFx1Nzg3ZVx1Nzg3Zlx1Nzg4MFx1Nzg4MVx1Nzg4Mlx1Nzg4M1x1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1''@;'; put 'put ''OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3''@;'; put 'put ''Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMwMVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1''@;'; put 'put ''OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9b''@;'; put 'put ''MTc5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OV1bZ11dPTQ1ODI0K2cseVs0NTgyNCtnXT1fWzE3OV1bZ10pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg4NFx1Nzg4NVx1Nzg4Nlx1Nzg4OFx1Nzg4YVx1''@;'; put 'put ''Nzg4Ylx1Nzg4Zlx1Nzg5MFx1Nzg5Mlx1Nzg5NFx1Nzg5NVx1Nzg5Nlx1Nzg5OVx1Nzg5ZFx1Nzg5ZVx1NzhhMFx1NzhhMlx1NzhhNFx1NzhhNlx1NzhhOFx1NzhhOVx1NzhhYVx1NzhhYlx1NzhhY1x1NzhhZFx1NzhhZVx1NzhhZlx1NzhiNVx1NzhiNlx1NzhiN1x1NzhiOFx1NzhiYVx1Nzhi''@;'; put 'put ''Ylx1NzhiY1x1NzhiZFx1NzhiZlx1NzhjMFx1NzhjMlx1NzhjM1x1NzhjNFx1NzhjNlx1NzhjN1x1NzhjOFx1NzhjY1x1NzhjZFx1NzhjZVx1NzhjZlx1NzhkMVx1NzhkMlx1NzhkM1x1NzhkNlx1NzhkN1x1NzhkOFx1NzhkYVx1NzhkYlx1NzhkY1x1NzhkZFx1NzhkZVx1NzhkZlx1NzhlMFx1''@;'; put 'put ''NzhlMVx1NzhlMlx1NzhlM1x1ZmZmZFx1NzhlNFx1NzhlNVx1NzhlNlx1NzhlN1x1NzhlOVx1NzhlYVx1NzhlYlx1NzhlZFx1NzhlZVx1NzhlZlx1NzhmMFx1NzhmMVx1NzhmM1x1NzhmNVx1NzhmNlx1NzhmOFx1NzhmOVx1NzhmYlx1NzhmY1x1NzhmZFx1NzhmZVx1NzhmZlx1NzkwMFx1Nzkw''@;'; put 'put ''Mlx1NzkwM1x1NzkwNFx1NzkwNlx1NzkwN1x1NzkwOFx1NzkwOVx1NzkwYVx1NzkwYlx1NzkwY1x1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1''@;'; put 'put ''OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIy''@;'; put 'put ''MVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1''@;'; put 'put ''NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MF0ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PV9bMTgwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MF1bZ11dPTQ2MDgwK2cseVs0NjA4MCtnXT1fWzE4MF1bZ10pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkwZFx1NzkwZVx1NzkwZlx1''@;'; put 'put ''NzkxMFx1NzkxMVx1NzkxMlx1NzkxNFx1NzkxNVx1NzkxNlx1NzkxN1x1NzkxOFx1NzkxOVx1NzkxYVx1NzkxYlx1NzkxY1x1NzkxZFx1NzkxZlx1NzkyMFx1NzkyMVx1NzkyMlx1NzkyM1x1NzkyNVx1NzkyNlx1NzkyN1x1NzkyOFx1NzkyOVx1NzkyYVx1NzkyYlx1NzkyY1x1NzkyZFx1Nzky''@;'; put 'put ''ZVx1NzkyZlx1NzkzMFx1NzkzMVx1NzkzMlx1NzkzM1x1NzkzNVx1NzkzNlx1NzkzN1x1NzkzOFx1NzkzOVx1NzkzZFx1NzkzZlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0YVx1Nzk0Ylx1Nzk0Y1x1Nzk0ZFx1Nzk0ZVx1Nzk0Zlx1Nzk1MFx1Nzk1MVx1Nzk1Mlx1Nzk1NFx1''@;'; put 'put ''Nzk1NVx1Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2M1x1ZmZmZFx1Nzk2NFx1Nzk2Nlx1Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2ZVx1Nzk3MFx1Nzk3MVx1Nzk3Mlx1Nzk3M1x1Nzk3NFx1Nzk3NVx1Nzk3Nlx1Nzk3OVx1Nzk3Ylx1Nzk3Y1x1Nzk3ZFx1Nzk3ZVx1Nzk3Zlx1Nzk4Mlx1Nzk4''@;'; put 'put ''M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Ylx1Nzk4Y1x1Nzk4ZFx1Nzk4ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1''@;'; put 'put ''NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgy''@;'; put 'put ''NFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1''@;'; put 'put ''NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4''@;'; put 'put ''MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MV1bZ11dPTQ2MzM2K2cseVs0NjMzNitnXT1fWzE4MV1bZ10pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5M1x1''@;'; put 'put ''Nzk5NFx1Nzk5NVx1Nzk5Nlx1Nzk5N1x1Nzk5OFx1Nzk5OVx1Nzk5Ylx1Nzk5Y1x1Nzk5ZFx1Nzk5ZVx1Nzk5Zlx1NzlhMFx1NzlhMVx1NzlhMlx1NzlhM1x1NzlhNFx1NzlhNVx1NzlhNlx1NzlhOFx1NzlhOVx1NzlhYVx1NzlhYlx1NzlhY1x1NzlhZFx1NzlhZVx1NzlhZlx1NzliMFx1Nzli''@;'; put 'put ''MVx1NzliMlx1NzliNFx1NzliNVx1NzliNlx1NzliN1x1NzliOFx1NzliY1x1NzliZlx1NzljMlx1NzljNFx1NzljNVx1NzljN1x1NzljOFx1NzljYVx1NzljY1x1NzljZVx1NzljZlx1NzlkMFx1NzlkM1x1NzlkNFx1NzlkNlx1NzlkN1x1NzlkOVx1NzlkYVx1NzlkYlx1NzlkY1x1NzlkZFx1''@;'; put 'put ''NzlkZVx1NzllMFx1NzllMVx1NzllMlx1NzllNVx1NzllOFx1NzllYVx1ZmZmZFx1NzllY1x1NzllZVx1NzlmMVx1NzlmMlx1NzlmM1x1NzlmNFx1NzlmNVx1NzlmNlx1NzlmN1x1NzlmOVx1NzlmYVx1NzlmY1x1NzlmZVx1NzlmZlx1N2EwMVx1N2EwNFx1N2EwNVx1N2EwN1x1N2EwOFx1N2Ew''@;'; put 'put ''OVx1N2EwYVx1N2EwY1x1N2EwZlx1N2ExMFx1N2ExMVx1N2ExMlx1N2ExM1x1N2ExNVx1N2ExNlx1N2ExOFx1N2ExOVx1N2ExYlx1N2ExY1x1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1''@;'; put 'put ''NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5''@;'; put 'put ''Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVhZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1''@;'; put 'put ''ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJiOVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4Y1x1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT1fWzE4Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Ml1bZ11dPTQ2NTkyK2cseVs0NjU5MitnXT1fWzE4Ml1bZ10pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1N2ExZFx1N2ExZlx1N2EyMVx1N2EyMlx1N2EyNFx1N2EyNVx1N2EyNlx1N2EyN1x1N2EyOFx1N2EyOVx1N2EyYVx1N2EyYlx1N2EyY1x1N2EyZFx1N2EyZVx1N2EyZlx1N2EzMFx1N2EzMVx1N2EzMlx1N2EzNFx1N2EzNVx1N2EzNlx1N2EzOFx1N2EzYVx1N2EzZVx1N2E0MFx1N2E0''@;'; put 'put ''MVx1N2E0Mlx1N2E0M1x1N2E0NFx1N2E0NVx1N2E0N1x1N2E0OFx1N2E0OVx1N2E0YVx1N2E0Ylx1N2E0Y1x1N2E0ZFx1N2E0ZVx1N2E0Zlx1N2E1MFx1N2E1Mlx1N2E1M1x1N2E1NFx1N2E1NVx1N2E1Nlx1N2E1OFx1N2E1OVx1N2E1YVx1N2E1Ylx1N2E1Y1x1N2E1ZFx1N2E1ZVx1N2E1Zlx1''@;'; put 'put ''N2E2MFx1N2E2MVx1N2E2Mlx1N2E2M1x1N2E2NFx1N2E2NVx1N2E2Nlx1N2E2N1x1N2E2OFx1ZmZmZFx1N2E2OVx1N2E2YVx1N2E2Ylx1N2E2Y1x1N2E2ZFx1N2E2ZVx1N2E2Zlx1N2E3MVx1N2E3Mlx1N2E3M1x1N2E3NVx1N2E3Ylx1N2E3Y1x1N2E3ZFx1N2E3ZVx1N2E4Mlx1N2E4NVx1N2E4''@;'; put 'put ''N1x1N2E4OVx1N2E4YVx1N2E4Ylx1N2E4Y1x1N2E4ZVx1N2E4Zlx1N2E5MFx1N2E5M1x1N2E5NFx1N2E5OVx1N2E5YVx1N2E5Ylx1N2E5ZVx1N2FhMVx1N2FhMlx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1''@;'; put 'put ''N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2''@;'; put 'put ''MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1''@;'; put 'put ''ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4M11bZ11dPTQ2ODQ4K2cseVs0Njg0OCtnXT1fWzE4M11bZ10pO2ZvcihfWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FhM1x1N2FhNFx1N2FhN1x1N2FhOVx1N2FhYVx1N2FhYlx1N2FhZVx1N2FhZlx1N2FiMFx1N2FiMVx1N2FiMlx1N2FiNFx1N2FiNVx1N2FiNlx1N2FiN1x1N2FiOFx1N2FiOVx1N2FiYVx1N2FiYlx1N2FiY1x1N2FiZFx1N2FiZVx1N2FjMFx1N2FjMVx1N2Fj''@;'; put 'put ''Mlx1N2FjM1x1N2FjNFx1N2FjNVx1N2FjNlx1N2FjN1x1N2FjOFx1N2FjOVx1N2FjYVx1N2FjY1x1N2FjZFx1N2FjZVx1N2FjZlx1N2FkMFx1N2FkMVx1N2FkMlx1N2FkM1x1N2FkNFx1N2FkNVx1N2FkN1x1N2FkOFx1N2FkYVx1N2FkYlx1N2FkY1x1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNFx1''@;'; put 'put ''N2FlN1x1N2FlOFx1N2FlOVx1N2FlYVx1N2FlYlx1N2FlY1x1N2FlZVx1N2FmMFx1N2FmMVx1N2FmMlx1N2FmM1x1ZmZmZFx1N2FmNFx1N2FmNVx1N2FmNlx1N2FmN1x1N2FmOFx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1N2IwMVx1N2IwMlx1N2IwNVx1N2IwN1x1N2IwOVx1N2IwY1x1N2Iw''@;'; put 'put ''ZFx1N2IwZVx1N2IxMFx1N2IxMlx1N2IxM1x1N2IxNlx1N2IxN1x1N2IxOFx1N2IxYVx1N2IxY1x1N2IxZFx1N2IxZlx1N2IyMVx1N2IyMlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1''@;'; put 'put ''NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5''@;'; put 'put ''OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1''@;'; put 'put ''N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5''@;'; put 'put ''YVx1N2ZiOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NF1bZ11dPTQ3MTA0K2cseVs0NzEwNCtnXT1fWzE4NF1bZ10pO2ZvcihfWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IyZlx1N2IzMFx1N2IzMlx1N2IzNFx1N2IzNVx1N2IzNlx1N2IzN1x1N2IzOVx1N2IzYlx1N2IzZFx1N2IzZlx1N2I0MFx1N2I0MVx1N2I0Mlx1N2I0M1x1N2I0NFx1N2I0Nlx1N2I0OFx1N2I0YVx1N2I0ZFx1N2I0ZVx1N2I1M1x1N2I1''@;'; put 'put ''NVx1N2I1N1x1N2I1OVx1N2I1Y1x1N2I1ZVx1N2I1Zlx1N2I2MVx1N2I2M1x1N2I2NFx1N2I2NVx1N2I2Nlx1N2I2N1x1N2I2OFx1N2I2OVx1N2I2YVx1N2I2Ylx1N2I2Y1x1N2I2ZFx1N2I2Zlx1N2I3MFx1N2I3M1x1N2I3NFx1N2I3Nlx1N2I3OFx1N2I3YVx1N2I3Y1x1N2I3ZFx1N2I3Zlx1''@;'; put 'put ''N2I4MVx1N2I4Mlx1N2I4M1x1N2I4NFx1N2I4Nlx1N2I4N1x1N2I4OFx1N2I4OVx1N2I4YVx1N2I4Ylx1N2I4Y1x1N2I4ZVx1N2I4Zlx1ZmZmZFx1N2I5MVx1N2I5Mlx1N2I5M1x1N2I5Nlx1N2I5OFx1N2I5OVx1N2I5YVx1N2I5Ylx1N2I5ZVx1N2I5Zlx1N2JhMFx1N2JhM1x1N2JhNFx1N2Jh''@;'; put 'put ''NVx1N2JhZVx1N2JhZlx1N2JiMFx1N2JiMlx1N2JiM1x1N2JiNVx1N2JiNlx1N2JiN1x1N2JiOVx1N2JiYVx1N2JiYlx1N2JiY1x1N2JiZFx1N2JiZVx1N2JiZlx1N2JjMFx1N2JjMlx1N2JjM1x1N2JjNFx1NTdjMlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1''@;'; put 'put ''NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYx''@;'; put 'put ''M1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1''@;'; put 'put ''NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5''@;'; put 'put ''Y1x1ODhmOVx1OGZjN1x1NTRjOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NV1bZ11dPTQ3MzYwK2cseVs0NzM2MCtnXT1fWzE4NV1bZ10pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2JjNVx1N2JjOFx1N2JjOVx1N2JjYVx1N2JjYlx1N2JjZFx1N2JjZVx1N2JjZlx1N2JkMFx1N2JkMlx1N2JkNFx1N2JkNVx1N2JkNlx1N2JkN1x1N2JkOFx1N2JkYlx1N2JkY1x1N2JkZVx1N2JkZlx1N2JlMFx1N2Jl''@;'; put 'put ''Mlx1N2JlM1x1N2JlNFx1N2JlN1x1N2JlOFx1N2JlOVx1N2JlYlx1N2JlY1x1N2JlZFx1N2JlZlx1N2JmMFx1N2JmMlx1N2JmM1x1N2JmNFx1N2JmNVx1N2JmNlx1N2JmOFx1N2JmOVx1N2JmYVx1N2JmYlx1N2JmZFx1N2JmZlx1N2MwMFx1N2MwMVx1N2MwMlx1N2MwM1x1N2MwNFx1N2MwNVx1''@;'; put 'put ''N2MwNlx1N2MwOFx1N2MwOVx1N2MwYVx1N2MwZFx1N2MwZVx1N2MxMFx1N2MxMVx1N2MxMlx1N2MxM1x1N2MxNFx1N2MxNVx1N2MxN1x1N2MxOFx1N2MxOVx1ZmZmZFx1N2MxYVx1N2MxYlx1N2MxY1x1N2MxZFx1N2MxZVx1N2MyMFx1N2MyMVx1N2MyMlx1N2MyM1x1N2MyNFx1N2MyNVx1N2My''@;'; put 'put ''OFx1N2MyOVx1N2MyYlx1N2MyY1x1N2MyZFx1N2MyZVx1N2MyZlx1N2MzMFx1N2MzMVx1N2MzMlx1N2MzM1x1N2MzNFx1N2MzNVx1N2MzNlx1N2MzN1x1N2MzOVx1N2MzYVx1N2MzYlx1N2MzY1x1N2MzZFx1N2MzZVx1N2M0Mlx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1''@;'; put 'put ''OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBk''@;'; put 'put ''ZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1''@;'; put 'put ''NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2''@;'; put 'put ''Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Nl1bZ11dPTQ3NjE2K2cseVs0NzYxNitnXT1fWzE4Nl1bZ10pO2ZvcihfWzE4N109Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2M0M1x1N2M0NFx1N2M0NVx1N2M0Nlx1N2M0N1x1N2M0OFx1N2M0OVx1N2M0YVx1N2M0Ylx1N2M0Y1x1N2M0ZVx1N2M0Zlx1N2M1MFx1N2M1MVx1N2M1Mlx1N2M1M1x1N2M1NFx1N2M1NVx1N2M1''@;'; put 'put ''Nlx1N2M1N1x1N2M1OFx1N2M1OVx1N2M1YVx1N2M1Ylx1N2M1Y1x1N2M1ZFx1N2M1ZVx1N2M1Zlx1N2M2MFx1N2M2MVx1N2M2Mlx1N2M2M1x1N2M2NFx1N2M2NVx1N2M2Nlx1N2M2N1x1N2M2OFx1N2M2OVx1N2M2YVx1N2M2Ylx1N2M2Y1x1N2M2ZFx1N2M2ZVx1N2M2Zlx1N2M3MFx1N2M3MVx1''@;'; put 'put ''N2M3Mlx1N2M3NVx1N2M3Nlx1N2M3N1x1N2M3OFx1N2M3OVx1N2M3YVx1N2M3ZVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2M4Mlx1N2M4M1x1N2M4NFx1N2M4NVx1N2M4Nlx1N2M4N1x1ZmZmZFx1N2M4OFx1N2M4YVx1N2M4Ylx1N2M4Y1x1N2M4ZFx1N2M4ZVx1N2M4Zlx1N2M5MFx1N2M5M1x1N2M5''@;'; put 'put ''NFx1N2M5Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2NhMFx1N2NhMVx1N2NhM1x1N2NhNlx1N2NhN1x1N2NhOFx1N2NhOVx1N2NhYlx1N2NhY1x1N2NhZFx1N2NhZlx1N2NiMFx1N2NiNFx1N2NiNVx1N2NiNlx1N2NiN1x1N2NiOFx1N2NiYVx1N2NiYlx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1''@;'; put 'put ''NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzEx''@;'; put 'put ''NVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1''@;'; put 'put ''NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFm''@;'; put 'put ''Ylx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4N11bZ11dPTQ3ODcyK2cseVs0Nzg3MitnXT1fWzE4N11bZ10pO2Zv''@;'; put 'put ''cihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NiZlx1N2NjMFx1N2NjMlx1N2NjM1x1N2NjNFx1N2NjNlx1N2NjOVx1N2NjYlx1N2NjZVx1N2NjZlx1N2NkMFx1N2NkMVx1N2NkMlx1N2NkM1x1N2NkNFx1N2NkOFx1N2Nk''@;'; put 'put ''YVx1N2NkYlx1N2NkZFx1N2NkZVx1N2NlMVx1N2NlMlx1N2NlM1x1N2NlNFx1N2NlNVx1N2NlNlx1N2NlN1x1N2NlOVx1N2NlYVx1N2NlYlx1N2NlY1x1N2NlZFx1N2NlZVx1N2NmMFx1N2NmMVx1N2NmMlx1N2NmM1x1N2NmNFx1N2NmNVx1N2NmNlx1N2NmN1x1N2NmOVx1N2NmYVx1N2NmY1x1''@;'; put 'put ''N2NmZFx1N2NmZVx1N2NmZlx1N2QwMFx1N2QwMVx1N2QwMlx1N2QwM1x1N2QwNFx1N2QwNVx1N2QwNlx1N2QwN1x1N2QwOFx1N2QwOVx1N2QwYlx1N2QwY1x1N2QwZFx1N2QwZVx1N2QwZlx1N2QxMFx1ZmZmZFx1N2QxMVx1N2QxMlx1N2QxM1x1N2QxNFx1N2QxNVx1N2QxNlx1N2QxN1x1N2Qx''@;'; put 'put ''OFx1N2QxOVx1N2QxYVx1N2QxYlx1N2QxY1x1N2QxZFx1N2QxZVx1N2QxZlx1N2QyMVx1N2QyM1x1N2QyNFx1N2QyNVx1N2QyNlx1N2QyOFx1N2QyOVx1N2QyYVx1N2QyY1x1N2QyZFx1N2QyZVx1N2QzMFx1N2QzMVx1N2QzMlx1N2QzM1x1N2QzNFx1N2QzNVx1N2QzNlx1ODA4Y1x1OTk2NVx1''@;'; put 'put ''OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2''@;'; put 'put ''M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJhMVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1''@;'; put 'put ''N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFj''@;'; put 'put ''Zlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2JhZFx1NGVmNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OF1bZ11dPTQ4MTI4K2cseVs0ODEyOCtnXT1f''@;'; put 'put ''WzE4OF1bZ10pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QzN1x1N2QzOFx1N2QzOVx1N2QzYVx1N2QzYlx1N2QzY1x1N2QzZFx1N2QzZVx1N2QzZlx1N2Q0MFx1N2Q0MVx1N2Q0Mlx1N2Q0M1x1N2Q0NFx1N2Q0''@;'; put 'put ''NVx1N2Q0Nlx1N2Q0N1x1N2Q0OFx1N2Q0OVx1N2Q0YVx1N2Q0Ylx1N2Q0Y1x1N2Q0ZFx1N2Q0ZVx1N2Q0Zlx1N2Q1MFx1N2Q1MVx1N2Q1Mlx1N2Q1M1x1N2Q1NFx1N2Q1NVx1N2Q1Nlx1N2Q1N1x1N2Q1OFx1N2Q1OVx1N2Q1YVx1N2Q1Ylx1N2Q1Y1x1N2Q1ZFx1N2Q1ZVx1N2Q1Zlx1N2Q2MFx1''@;'; put 'put ''N2Q2MVx1N2Q2Mlx1N2Q2M1x1N2Q2NFx1N2Q2NVx1N2Q2Nlx1N2Q2N1x1N2Q2OFx1N2Q2OVx1N2Q2YVx1N2Q2Ylx1N2Q2Y1x1N2Q2ZFx1N2Q2Zlx1N2Q3MFx1N2Q3MVx1N2Q3Mlx1N2Q3M1x1N2Q3NFx1N2Q3NVx1N2Q3Nlx1ZmZmZFx1N2Q3OFx1N2Q3OVx1N2Q3YVx1N2Q3Ylx1N2Q3Y1x1N2Q3''@;'; put 'put ''ZFx1N2Q3ZVx1N2Q3Zlx1N2Q4MFx1N2Q4MVx1N2Q4Mlx1N2Q4M1x1N2Q4NFx1N2Q4NVx1N2Q4Nlx1N2Q4N1x1N2Q4OFx1N2Q4OVx1N2Q4YVx1N2Q4Ylx1N2Q4Y1x1N2Q4ZFx1N2Q4ZVx1N2Q4Zlx1N2Q5MFx1N2Q5MVx1N2Q5Mlx1N2Q5M1x1N2Q5NFx1N2Q5NVx1N2Q5Nlx1N2Q5N1x1N2Q5OFx1''@;'; put 'put ''NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBj''@;'; put 'put ''YVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1''@;'; put 'put ''NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1''@;'; put 'put ''Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OV1bZ11dPTQ4Mzg0K2cs''@;'; put 'put ''eVs0ODM4NCtnXT1fWzE4OV1bZ10pO2ZvcihfWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Q5OVx1N2Q5YVx1N2Q5Ylx1N2Q5Y1x1N2Q5ZFx1N2Q5ZVx1N2Q5Zlx1N2RhMFx1N2RhMVx1N2RhMlx1N2RhM1x1N2RhNFx1N2Rh''@;'; put 'put ''NVx1N2RhN1x1N2RhOFx1N2RhOVx1N2RhYVx1N2RhYlx1N2RhY1x1N2RhZFx1N2RhZlx1N2RiMFx1N2RiMVx1N2RiMlx1N2RiM1x1N2RiNFx1N2RiNVx1N2RiNlx1N2RiN1x1N2RiOFx1N2RiOVx1N2RiYVx1N2RiYlx1N2RiY1x1N2RiZFx1N2RiZVx1N2RiZlx1N2RjMFx1N2RjMVx1N2RjMlx1''@;'; put 'put ''N2RjM1x1N2RjNFx1N2RjNVx1N2RjNlx1N2RjN1x1N2RjOFx1N2RjOVx1N2RjYVx1N2RjYlx1N2RjY1x1N2RjZFx1N2RjZVx1N2RjZlx1N2RkMFx1N2RkMVx1N2RkMlx1N2RkM1x1N2RkNFx1N2RkNVx1N2RkNlx1N2RkN1x1N2RkOFx1N2RkOVx1ZmZmZFx1N2RkYVx1N2RkYlx1N2RkY1x1N2Rk''@;'; put 'put ''ZFx1N2RkZVx1N2RkZlx1N2RlMFx1N2RlMVx1N2RlMlx1N2RlM1x1N2RlNFx1N2RlNVx1N2RlNlx1N2RlN1x1N2RlOFx1N2RlOVx1N2RlYVx1N2RlYlx1N2RlY1x1N2RlZFx1N2RlZVx1N2RlZlx1N2RmMFx1N2RmMVx1N2RmMlx1N2RmM1x1N2RmNFx1N2RmNVx1N2RmNlx1N2RmN1x1N2RmOFx1''@;'; put 'put ''N2RmOVx1N2RmYVx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2Fk''@;'; put 'put ''ZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1''@;'; put 'put ''NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4''@;'; put 'put ''OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MF1b''@;'; put 'put ''Z11dPTQ4NjQwK2cseVs0ODY0MCtnXT1fWzE5MF1bZ10pO2ZvcihfWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2RmYlx1N2RmY1x1N2RmZFx1N2RmZVx1N2RmZlx1N2UwMFx1N2UwMVx1N2UwMlx1N2UwM1x1N2UwNFx1N2Uw''@;'; put 'put ''NVx1N2UwNlx1N2UwN1x1N2UwOFx1N2UwOVx1N2UwYVx1N2UwYlx1N2UwY1x1N2UwZFx1N2UwZVx1N2UwZlx1N2UxMFx1N2UxMVx1N2UxMlx1N2UxM1x1N2UxNFx1N2UxNVx1N2UxNlx1N2UxN1x1N2UxOFx1N2UxOVx1N2UxYVx1N2UxYlx1N2UxY1x1N2UxZFx1N2UxZVx1N2UxZlx1N2UyMFx1''@;'; put 'put ''N2UyMVx1N2UyMlx1N2UyM1x1N2UyNFx1N2UyNVx1N2UyNlx1N2UyN1x1N2UyOFx1N2UyOVx1N2UyYVx1N2UyYlx1N2UyY1x1N2UyZFx1N2UyZVx1N2UyZlx1N2UzMFx1N2UzMVx1N2UzMlx1N2UzM1x1N2UzNFx1N2UzNVx1N2UzNlx1N2UzN1x1N2UzOFx1N2UzOVx1ZmZmZFx1N2UzYVx1N2Uz''@;'; put 'put ''Y1x1N2UzZFx1N2UzZVx1N2UzZlx1N2U0MFx1N2U0Mlx1N2U0M1x1N2U0NFx1N2U0NVx1N2U0Nlx1N2U0OFx1N2U0OVx1N2U0YVx1N2U0Ylx1N2U0Y1x1N2U0ZFx1N2U0ZVx1N2U0Zlx1N2U1MFx1N2U1MVx1N2U1Mlx1N2U1M1x1N2U1NFx1N2U1NVx1N2U1Nlx1N2U1N1x1N2U1OFx1N2U1OVx1''@;'; put 'put ''N2U1YVx1N2U1Ylx1N2U1Y1x1N2U1ZFx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1''@;'; put 'put ''Ylx1NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1''@;'; put 'put ''NTQyZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMy''@;'; put 'put ''MVx1N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkxXVtnXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzE5MV1bZ11dPTQ4ODk2K2cseVs0ODg5NitnXT1fWzE5MV1bZ10pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U1ZVx1N2U1Zlx1N2U2MFx1N2U2MVx1N2U2Mlx1N2U2M1x1N2U2NFx1N2U2NVx1N2U2''@;'; put 'put ''Nlx1N2U2N1x1N2U2OFx1N2U2OVx1N2U2YVx1N2U2Ylx1N2U2Y1x1N2U2ZFx1N2U2ZVx1N2U2Zlx1N2U3MFx1N2U3MVx1N2U3Mlx1N2U3M1x1N2U3NFx1N2U3NVx1N2U3Nlx1N2U3N1x1N2U3OFx1N2U3OVx1N2U3YVx1N2U3Ylx1N2U3Y1x1N2U3ZFx1N2U3ZVx1N2U3Zlx1N2U4MFx1N2U4MVx1''@;'; put 'put ''N2U4M1x1N2U4NFx1N2U4NVx1N2U4Nlx1N2U4N1x1N2U4OFx1N2U4OVx1N2U4YVx1N2U4Ylx1N2U4Y1x1N2U4ZFx1N2U4ZVx1N2U4Zlx1N2U5MFx1N2U5MVx1N2U5Mlx1N2U5M1x1N2U5NFx1N2U5NVx1N2U5Nlx1N2U5N1x1N2U5OFx1N2U5OVx1N2U5YVx1N2U5Y1x1N2U5ZFx1N2U5ZVx1ZmZm''@;'; put 'put ''ZFx1N2VhZVx1N2ViNFx1N2ViYlx1N2ViY1x1N2VkNlx1N2VlNFx1N2VlY1x1N2VmOVx1N2YwYVx1N2YxMFx1N2YxZVx1N2YzN1x1N2YzOVx1N2YzYlx1N2YzY1x1N2YzZFx1N2YzZVx1N2YzZlx1N2Y0MFx1N2Y0MVx1N2Y0M1x1N2Y0Nlx1N2Y0N1x1N2Y0OFx1N2Y0OVx1N2Y0YVx1N2Y0Ylx1''@;'; put 'put ''N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y0Zlx1N2Y1Mlx1N2Y1M1x1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRk''@;'; put 'put ''ZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1''@;'; put 'put ''OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQw''@;'; put 'put ''Nlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkyXVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzE5Ml1bZ11dPTQ5MTUyK2cseVs0OTE1MitnXT1fWzE5Ml1bZ10pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y1Nlx1N2Y1OVx1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y1ZVx1N2Y2''@;'; put 'put ''MFx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2N1x1N2Y2Ylx1N2Y2Y1x1N2Y2ZFx1N2Y2Zlx1N2Y3MFx1N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1N2Y3OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3Zlx1N2Y4MFx1N2Y4Mlx1N2Y4M1x1N2Y4NFx1N2Y4NVx1N2Y4Nlx1N2Y4N1x1''@;'; put 'put ''N2Y4OFx1N2Y4OVx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5MFx1N2Y5MVx1N2Y5Mlx1N2Y5M1x1N2Y5NVx1N2Y5Nlx1N2Y5N1x1N2Y5OFx1N2Y5OVx1N2Y5Ylx1N2Y5Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1N2ZhOFx1N2ZhOVx1N2ZhYVx1N2ZhYlx1N2ZhY1x1N2ZhZFx1N2Zh''@;'; put 'put ''ZVx1N2ZiMVx1ZmZmZFx1N2ZiM1x1N2ZiNFx1N2ZiNVx1N2ZiNlx1N2ZiN1x1N2ZiYVx1N2ZiYlx1N2ZiZVx1N2ZjMFx1N2ZjMlx1N2ZjM1x1N2ZjNFx1N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2ZjZlx1N2ZkMFx1N2ZkMVx1N2ZkMlx1N2ZkM1x1N2ZkNlx1N2ZkN1x1''@;'; put 'put ''N2ZkOVx1N2ZkYVx1N2ZkYlx1N2ZkY1x1N2ZkZFx1N2ZkZVx1N2ZlMlx1N2ZlM1x1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRm''@;'; put 'put ''ZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1''@;'; put 'put ''NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNh''@;'; put 'put ''ZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5M10ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PV9bMTkzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5M11bZ11dPTQ5NDA4K2cseVs0OTQwOCtnXT1fWzE5M11bZ10pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlNFx1N2ZlN1x1N2ZlOFx1N2ZlYVx1N2Zl''@;'; put 'put ''Ylx1N2ZlY1x1N2ZlZFx1N2ZlZlx1N2ZmMlx1N2ZmNFx1N2ZmNVx1N2ZmNlx1N2ZmN1x1N2ZmOFx1N2ZmOVx1N2ZmYVx1N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwMlx1ODAwN1x1ODAwOFx1ODAwOVx1ODAwYVx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxYVx1ODAxYlx1ODAxZFx1ODAxZVx1''@;'; put 'put ''ODAxZlx1ODAyMVx1ODAyM1x1ODAyNFx1ODAyYlx1ODAyY1x1ODAyZFx1ODAyZVx1ODAyZlx1ODAzMFx1ODAzMlx1ODAzNFx1ODAzOVx1ODAzYVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0MVx1ODA0NFx1ODA0NVx1ODA0N1x1ODA0OFx1ODA0OVx1ODA0ZVx1ODA0Zlx1ODA1MFx1ODA1MVx1ODA1''@;'; put 'put ''M1x1ODA1NVx1ODA1Nlx1ODA1N1x1ZmZmZFx1ODA1OVx1ODA1Ylx1ODA1Y1x1ODA1ZFx1ODA1ZVx1ODA1Zlx1ODA2MFx1ODA2MVx1ODA2Mlx1ODA2M1x1ODA2NFx1ODA2NVx1ODA2Nlx1ODA2N1x1ODA2OFx1ODA2Ylx1ODA2Y1x1ODA2ZFx1ODA2ZVx1ODA2Zlx1ODA3MFx1ODA3Mlx1ODA3M1x1''@;'; put 'put ''ODA3NFx1ODA3NVx1ODA3Nlx1ODA3N1x1ODA3OFx1ODA3OVx1ODA3YVx1ODA3Ylx1ODA3Y1x1ODA3ZFx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0''@;'; put 'put ''Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1''@;'; put 'put ''NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWVi''@;'; put 'put ''Ylx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NF0ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PV9bMTk0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NF1bZ11dPTQ5NjY0K2cseVs0OTY2NCtnXT1fWzE5NF1bZ10pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA3ZVx1ODA4MVx1ODA4''@;'; put 'put ''Mlx1ODA4NVx1ODA4OFx1ODA4YVx1ODA4ZFx1ODA4ZVx1ODA4Zlx1ODA5MFx1ODA5MVx1ODA5Mlx1ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5ZVx1ODBhM1x1ODBhNlx1ODBhN1x1ODBhOFx1ODBhY1x1ODBiMFx1ODBiM1x1ODBiNVx1ODBiNlx1ODBiOFx1ODBiOVx1ODBiYlx1ODBjNVx1''@;'; put 'put ''ODBjN1x1ODBjOFx1ODBjOVx1ODBjYVx1ODBjYlx1ODBjZlx1ODBkMFx1ODBkMVx1ODBkMlx1ODBkM1x1ODBkNFx1ODBkNVx1ODBkOFx1ODBkZlx1ODBlMFx1ODBlMlx1ODBlM1x1ODBlNlx1ODBlZVx1ODBmNVx1ODBmN1x1ODBmOVx1ODBmYlx1ODBmZVx1ODBmZlx1ODEwMFx1ODEwMVx1ODEw''@;'; put 'put ''M1x1ODEwNFx1ODEwNVx1ODEwN1x1ODEwOFx1ODEwYlx1ZmZmZFx1ODEwY1x1ODExNVx1ODExN1x1ODExOVx1ODExYlx1ODExY1x1ODExZFx1ODExZlx1ODEyMFx1ODEyMVx1ODEyMlx1ODEyM1x1ODEyNFx1ODEyNVx1ODEyNlx1ODEyN1x1ODEyOFx1ODEyOVx1ODEyYVx1ODEyYlx1ODEyZFx1''@;'; put 'put ''ODEyZVx1ODEzMFx1ODEzM1x1ODEzNFx1ODEzNVx1ODEzN1x1ODEzOVx1ODEzYVx1ODEzYlx1ODEzY1x1ODEzZFx1ODEzZlx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5''@;'; put 'put ''Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1''@;'; put 'put ''OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJk''@;'; put 'put ''N1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzE5NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NV1bZ11dPTQ5OTIwK2cseVs0OTkyMCtnXT1fWzE5NV1bZ10pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0''@;'; put 'put ''MFx1ODE0MVx1ODE0Mlx1ODE0M1x1ODE0NFx1ODE0NVx1ODE0N1x1ODE0OVx1ODE0ZFx1ODE0ZVx1ODE0Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1Ylx1ODE1Y1x1ODE1ZFx1ODE1ZVx1ODE1Zlx1ODE2MVx1ODE2Mlx1ODE2M1x1ODE2NFx1ODE2Nlx1ODE2OFx1ODE2YVx1ODE2Ylx1''@;'; put 'put ''ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1ODE3Nlx1ODE3N1x1ODE3OFx1ODE4MVx1ODE4M1x1ODE4NFx1ODE4NVx1ODE4Nlx1ODE4N1x1ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5Mlx1ODE5M1x1ODE5NFx1ODE5NVx1ODE5Nlx1ODE5N1x1ODE5OVx1ODE5''@;'; put 'put ''YVx1ODE5ZVx1ODE5Zlx1ODFhMFx1ODFhMVx1ODFhMlx1ODFhNFx1ODFhNVx1ZmZmZFx1ODFhN1x1ODFhOVx1ODFhYlx1ODFhY1x1ODFhZFx1ODFhZVx1ODFhZlx1ODFiMFx1ODFiMVx1ODFiMlx1ODFiNFx1ODFiNVx1ODFiNlx1ODFiN1x1ODFiOFx1ODFiOVx1ODFiY1x1ODFiZFx1ODFiZVx1''@;'; put 'put ''ODFiZlx1ODFjNFx1ODFjNVx1ODFjN1x1ODFjOFx1ODFjOVx1ODFjYlx1ODFjZFx1ODFjZVx1ODFjZlx1ODFkMFx1ODFkMVx1ODFkMlx1ODFkM1x1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYy''@;'; put 'put ''MFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1''@;'; put 'put ''NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3''@;'; put 'put ''Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MVx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT1fWzE5Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Nl1bZ11dPTUwMTc2K2cseVs1MDE3NitnXT1fWzE5Nl1bZ10pO2ZvcihfWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ODFkNFx1ODFkNVx1ODFkNlx1ODFkN1x1ODFkOFx1ODFkOVx1ODFkYVx1ODFkYlx1ODFkY1x1ODFkZFx1ODFkZVx1ODFkZlx1ODFlMFx1ODFlMVx1ODFlMlx1ODFlNFx1ODFlNVx1ODFlNlx1ODFlOFx1ODFlOVx1ODFlYlx1ODFlZVx1ODFlZlx1ODFmMFx1ODFmMVx1ODFmMlx1''@;'; put 'put ''ODFmNVx1ODFmNlx1ODFmN1x1ODFmOFx1ODFmOVx1ODFmYVx1ODFmZFx1ODFmZlx1ODIwM1x1ODIwN1x1ODIwOFx1ODIwOVx1ODIwYVx1ODIwYlx1ODIwZVx1ODIwZlx1ODIxMVx1ODIxM1x1ODIxNVx1ODIxNlx1ODIxN1x1ODIxOFx1ODIxOVx1ODIxYVx1ODIxZFx1ODIyMFx1ODIyNFx1ODIy''@;'; put 'put ''NVx1ODIyNlx1ODIyN1x1ODIyOVx1ODIyZVx1ODIzMlx1ODIzYVx1ODIzY1x1ODIzZFx1ODIzZlx1ZmZmZFx1ODI0MFx1ODI0MVx1ODI0Mlx1ODI0M1x1ODI0NVx1ODI0Nlx1ODI0OFx1ODI0YVx1ODI0Y1x1ODI0ZFx1ODI0ZVx1ODI1MFx1ODI1MVx1ODI1Mlx1ODI1M1x1ODI1NFx1ODI1NVx1''@;'; put 'put ''ODI1Nlx1ODI1N1x1ODI1OVx1ODI1Ylx1ODI1Y1x1ODI1ZFx1ODI1ZVx1ODI2MFx1ODI2MVx1ODI2Mlx1ODI2M1x1ODI2NFx1ODI2NVx1ODI2Nlx1ODI2N1x1ODI2OVx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJh''@;'; put 'put ''YVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFlNlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1''@;'; put 'put ''NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2''@;'; put 'put ''YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJhOFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkN1x1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5N11bZ11dPTUwNDMyK2cseVs1MDQzMitnXT1fWzE5N11bZ10pO2ZvcihfWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI2YVx1ODI2Ylx1ODI2Y1x1ODI2ZFx1ODI3MVx1ODI3NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Ylx1ODI3Y1x1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1ODI4N1x1ODI4OVx1ODI4Y1x1ODI5MFx1ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1''@;'; put 'put ''ODI5YVx1ODI5Ylx1ODI5ZVx1ODJhMFx1ODJhMlx1ODJhM1x1ODJhN1x1ODJiMlx1ODJiNVx1ODJiNlx1ODJiYVx1ODJiYlx1ODJiY1x1ODJiZlx1ODJjMFx1ODJjMlx1ODJjM1x1ODJjNVx1ODJjNlx1ODJjOVx1ODJkMFx1ODJkNlx1ODJkOVx1ODJkYVx1ODJkZFx1ODJlMlx1ODJlN1x1ODJl''@;'; put 'put ''OFx1ODJlOVx1ODJlYVx1ODJlY1x1ODJlZFx1ODJlZVx1ODJmMFx1ODJmMlx1ODJmM1x1ODJmNVx1ODJmNlx1ODJmOFx1ZmZmZFx1ODJmYVx1ODJmY1x1ODJmZFx1ODJmZVx1ODJmZlx1ODMwMFx1ODMwYVx1ODMwYlx1ODMwZFx1ODMxMFx1ODMxMlx1ODMxM1x1ODMxNlx1ODMxOFx1ODMxOVx1''@;'; put 'put ''ODMxZFx1ODMxZVx1ODMxZlx1ODMyMFx1ODMyMVx1ODMyMlx1ODMyM1x1ODMyNFx1ODMyNVx1ODMyNlx1ODMyOVx1ODMyYVx1ODMyZVx1ODMzMFx1ODMzMlx1ODMzN1x1ODMzYlx1ODMzZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2Jj''@;'; put 'put ''N1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1''@;'; put 'put ''NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYw''@;'; put 'put ''Nlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1''@;'; put 'put ''OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OF1bZ11dPTUwNjg4K2cseVs1MDY4OCtnXT1fWzE5OF1bZ10pO2ZvcihfWzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODMzZVx1ODMzZlx1ODM0MVx1ODM0Mlx1ODM0NFx1ODM0NVx1ODM0OFx1ODM0YVx1ODM0Ylx1ODM0Y1x1ODM0ZFx1ODM0ZVx1ODM1M1x1ODM1NVx1ODM1Nlx1ODM1N1x1ODM1OFx1ODM1OVx1ODM1ZFx1ODM2Mlx1ODM3MFx1ODM3MVx1''@;'; put 'put ''ODM3Mlx1ODM3M1x1ODM3NFx1ODM3NVx1ODM3Nlx1ODM3OVx1ODM3YVx1ODM3ZVx1ODM3Zlx1ODM4MFx1ODM4MVx1ODM4Mlx1ODM4M1x1ODM4NFx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4Zlx1ODM5MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5Nlx1ODM5N1x1ODM5''@;'; put 'put ''OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMVx1ODNhMlx1ODNhM1x1ODNhNFx1ODNhNVx1ODNhNlx1ODNhN1x1ODNhY1x1ODNhZFx1ODNhZVx1ZmZmZFx1ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNjM1x1ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1ODNjYlx1ODNjZFx1''@;'; put 'put ''ODNjZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1ODNkNVx1ODNkN1x1ODNkOVx1ODNkYVx1ODNkYlx1ODNkZVx1ODNlMlx1ODNlM1x1ODNlNFx1ODNlNlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZj''@;'; put 'put ''MVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1''@;'; put 'put ''NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4''@;'; put 'put ''MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1''@;'; put 'put ''OGVhZlx1NWM0OFx1OWE3MVx1NmUyMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OV1bZ11dPTUwOTQ0K2cseVs1MDk0NCtnXT1fWzE5OV1bZ10pO2ZvcihfWzIwMF09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNlZVx1ODNlZlx1ODNmM1x1ODNmNFx1ODNmNVx1ODNmNlx1ODNmN1x1ODNmYVx1ODNmYlx1ODNmY1x1ODNmZVx1ODNmZlx1ODQwMFx1ODQwMlx1ODQwNVx1ODQwN1x1ODQwOFx1ODQwOVx1ODQwYVx1ODQxMFx1''@;'; put 'put ''ODQxMlx1ODQxM1x1ODQxNFx1ODQxNVx1ODQxNlx1ODQxN1x1ODQxOVx1ODQxYVx1ODQxYlx1ODQxZVx1ODQxZlx1ODQyMFx1ODQyMVx1ODQyMlx1ODQyM1x1ODQyOVx1ODQyYVx1ODQyYlx1ODQyY1x1ODQyZFx1ODQyZVx1ODQyZlx1ODQzMFx1ODQzMlx1ODQzM1x1ODQzNFx1ODQzNVx1ODQz''@;'; put 'put ''Nlx1ODQzN1x1ODQzOVx1ODQzYVx1ODQzYlx1ODQzZVx1ODQzZlx1ODQ0MFx1ODQ0MVx1ODQ0Mlx1ODQ0M1x1ODQ0NFx1ODQ0NVx1ODQ0N1x1ODQ0OFx1ODQ0OVx1ZmZmZFx1ODQ0YVx1ODQ0Ylx1ODQ0Y1x1ODQ0ZFx1ODQ0ZVx1ODQ0Zlx1ODQ1MFx1ODQ1Mlx1ODQ1M1x1ODQ1NFx1ODQ1NVx1''@;'; put 'put ''ODQ1Nlx1ODQ1OFx1ODQ1ZFx1ODQ1ZVx1ODQ1Zlx1ODQ2MFx1ODQ2Mlx1ODQ2NFx1ODQ2NVx1ODQ2Nlx1ODQ2N1x1ODQ2OFx1ODQ2YVx1ODQ2ZVx1ODQ2Zlx1ODQ3MFx1ODQ3Mlx1ODQ3NFx1ODQ3N1x1ODQ3OVx1ODQ3Ylx1ODQ3Y1x1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcw''@;'; put 'put ''OFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEzNlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1''@;'; put 'put ''NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJi''@;'; put 'put ''OVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVmMFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1''@;'; put 'put ''ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMF1bZ11dPTUxMjAwK2cseVs1MTIwMCtnXT1fWzIwMF1bZ10pO2ZvcihfWzIwMV09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODQ3ZFx1ODQ3ZVx1ODQ3Zlx1ODQ4MFx1ODQ4MVx1ODQ4M1x1ODQ4NFx1ODQ4NVx1ODQ4Nlx1ODQ4YVx1ODQ4ZFx1ODQ4Zlx1ODQ5MFx1ODQ5MVx1ODQ5Mlx1ODQ5M1x1ODQ5NFx1ODQ5NVx1''@;'; put 'put ''ODQ5Nlx1ODQ5OFx1ODQ5YVx1ODQ5Ylx1ODQ5ZFx1ODQ5ZVx1ODQ5Zlx1ODRhMFx1ODRhMlx1ODRhM1x1ODRhNFx1ODRhNVx1ODRhNlx1ODRhN1x1ODRhOFx1ODRhOVx1ODRhYVx1ODRhYlx1ODRhY1x1ODRhZFx1ODRhZVx1ODRiMFx1ODRiMVx1ODRiM1x1ODRiNVx1ODRiNlx1ODRiN1x1ODRi''@;'; put 'put ''Ylx1ODRiY1x1ODRiZVx1ODRjMFx1ODRjMlx1ODRjM1x1ODRjNVx1ODRjNlx1ODRjN1x1ODRjOFx1ODRjYlx1ODRjY1x1ODRjZVx1ODRjZlx1ODRkMlx1ODRkNFx1ODRkNVx1ODRkN1x1ZmZmZFx1ODRkOFx1ODRkOVx1ODRkYVx1ODRkYlx1ODRkY1x1ODRkZVx1ODRlMVx1ODRlMlx1ODRlNFx1''@;'; put 'put ''ODRlN1x1ODRlOFx1ODRlOVx1ODRlYVx1ODRlYlx1ODRlZFx1ODRlZVx1ODRlZlx1ODRmMVx1ODRmMlx1ODRmM1x1ODRmNFx1ODRmNVx1ODRmNlx1ODRmN1x1ODRmOFx1ODRmOVx1ODRmYVx1ODRmYlx1ODRmZFx1ODRmZVx1ODUwMFx1ODUwMVx1ODUwMlx1NGYxZVx1NjU2M1x1Njg1MVx1NTVk''@;'; put 'put ''M1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1''@;'; put 'put ''ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBi''@;'; put 'put ''NVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1''@;'; put 'put ''NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMV1bZ11dPTUxNDU2K2cseVs1MTQ1NitnXT1fWzIwMV1bZ10p''@;'; put 'put ''O2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUwM1x1ODUwNFx1ODUwNVx1ODUwNlx1ODUwN1x1ODUwOFx1ODUwOVx1ODUwYVx1ODUwYlx1ODUwZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUxMlx1ODUxNFx1ODUxNVx1''@;'; put 'put ''ODUxNlx1ODUxOFx1ODUxOVx1ODUxYlx1ODUxY1x1ODUxZFx1ODUxZVx1ODUyMFx1ODUyMlx1ODUyM1x1ODUyNFx1ODUyNVx1ODUyNlx1ODUyN1x1ODUyOFx1ODUyOVx1ODUyYVx1ODUyZFx1ODUyZVx1ODUyZlx1ODUzMFx1ODUzMVx1ODUzMlx1ODUzM1x1ODUzNFx1ODUzNVx1ODUzNlx1ODUz''@;'; put 'put ''ZVx1ODUzZlx1ODU0MFx1ODU0MVx1ODU0Mlx1ODU0NFx1ODU0NVx1ODU0Nlx1ODU0N1x1ODU0Ylx1ODU0Y1x1ODU0ZFx1ODU0ZVx1ODU0Zlx1ODU1MFx1ODU1MVx1ODU1Mlx1ODU1M1x1ODU1NFx1ODU1NVx1ZmZmZFx1ODU1N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1Y1x1ODU1ZFx1ODU1Zlx1''@;'; put 'put ''ODU2MFx1ODU2MVx1ODU2Mlx1ODU2M1x1ODU2NVx1ODU2Nlx1ODU2N1x1ODU2OVx1ODU2YVx1ODU2Ylx1ODU2Y1x1ODU2ZFx1ODU2ZVx1ODU2Zlx1ODU3MFx1ODU3MVx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1ODU3Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZk''@;'; put 'put ''Ylx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1''@;'; put 'put ''NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJm''@;'; put 'put ''Zlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1''@;'; put 'put ''NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1NmYzMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMl1bZ11dPTUxNzEyK2cseVs1MTcxMitn''@;'; put 'put ''XT1fWzIwMl1bZ10pO2ZvcihfWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4Mlx1ODU4M1x1ODU4Nlx1ODU4OFx1ODU4OVx1ODU4YVx1ODU4Ylx1ODU4Y1x1ODU4ZFx1ODU4ZVx1ODU5MFx1ODU5MVx1ODU5Mlx1ODU5M1x1''@;'; put 'put ''ODU5NFx1ODU5NVx1ODU5Nlx1ODU5N1x1ODU5OFx1ODU5OVx1ODU5YVx1ODU5ZFx1ODU5ZVx1ODU5Zlx1ODVhMFx1ODVhMVx1ODVhMlx1ODVhM1x1ODVhNVx1ODVhNlx1ODVhN1x1ODVhOVx1ODVhYlx1ODVhY1x1ODVhZFx1ODViMVx1ODViMlx1ODViM1x1ODViNFx1ODViNVx1ODViNlx1ODVi''@;'; put 'put ''OFx1ODViYVx1ODViYlx1ODViY1x1ODViZFx1ODViZVx1ODViZlx1ODVjMFx1ODVjMlx1ODVjM1x1ODVjNFx1ODVjNVx1ODVjNlx1ODVjN1x1ODVjOFx1ODVjYVx1ODVjYlx1ODVjY1x1ODVjZFx1ODVjZVx1ODVkMVx1ODVkMlx1ZmZmZFx1ODVkNFx1ODVkNlx1ODVkN1x1ODVkOFx1ODVkOVx1''@;'; put 'put ''ODVkYVx1ODVkYlx1ODVkZFx1ODVkZVx1ODVkZlx1ODVlMFx1ODVlMVx1ODVlMlx1ODVlM1x1ODVlNVx1ODVlNlx1ODVlN1x1ODVlOFx1ODVlYVx1ODVlYlx1ODVlY1x1ODVlZFx1ODVlZVx1ODVlZlx1ODVmMFx1ODVmMVx1ODVmMlx1ODVmM1x1ODVmNFx1ODVmNVx1ODVmNlx1ODVmN1x1ODVm''@;'; put 'put ''OFx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUyOVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5NVx1NTYzNlx1''@;'; put 'put ''NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1OTE2NVx1NGZk''@;'; put 'put ''N1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVhZlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2IwYlx1ODRkMVx1''@;'; put 'put ''NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwM11bZ11dPTUxOTY4''@;'; put 'put ''K2cseVs1MTk2OCtnXT1fWzIwM11bZ10pO2ZvcihfWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODVmOVx1ODVmYVx1ODVmY1x1ODVmZFx1ODVmZVx1ODYwMFx1ODYwMVx1ODYwMlx1ODYwM1x1ODYwNFx1ODYwNlx1ODYwN1x1''@;'; put 'put ''ODYwOFx1ODYwOVx1ODYwYVx1ODYwYlx1ODYwY1x1ODYwZFx1ODYwZVx1ODYwZlx1ODYxMFx1ODYxMlx1ODYxM1x1ODYxNFx1ODYxNVx1ODYxN1x1ODYxOFx1ODYxOVx1ODYxYVx1ODYxYlx1ODYxY1x1ODYxZFx1ODYxZVx1ODYxZlx1ODYyMFx1ODYyMVx1ODYyMlx1ODYyM1x1ODYyNFx1ODYy''@;'; put 'put ''NVx1ODYyNlx1ODYyOFx1ODYyYVx1ODYyYlx1ODYyY1x1ODYyZFx1ODYyZVx1ODYyZlx1ODYzMFx1ODYzMVx1ODYzMlx1ODYzM1x1ODYzNFx1ODYzNVx1ODYzNlx1ODYzN1x1ODYzOVx1ODYzYVx1ODYzYlx1ODYzZFx1ODYzZVx1ODYzZlx1ODY0MFx1ZmZmZFx1ODY0MVx1ODY0Mlx1ODY0M1x1''@;'; put 'put ''ODY0NFx1ODY0NVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODY0OVx1ODY0YVx1ODY0Ylx1ODY0Y1x1ODY1Mlx1ODY1M1x1ODY1NVx1ODY1Nlx1ODY1N1x1ODY1OFx1ODY1OVx1ODY1Ylx1ODY1Y1x1ODY1ZFx1ODY1Zlx1ODY2MFx1ODY2MVx1ODY2M1x1ODY2NFx1ODY2NVx1ODY2Nlx1ODY2N1x1ODY2''@;'; put 'put ''OFx1ODY2OVx1ODY2YVx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1''@;'; put 'put ''NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3''@;'; put 'put ''Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1''@;'; put 'put ''NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIw''@;'; put 'put ''NF1bZ11dPTUyMjI0K2cseVs1MjIyNCtnXT1fWzIwNF1bZ10pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY2ZFx1ODY2Zlx1ODY3MFx1ODY3Mlx1ODY3M1x1ODY3NFx1ODY3NVx1ODY3Nlx1ODY3N1x1ODY3OFx1''@;'; put 'put ''ODY4M1x1ODY4NFx1ODY4NVx1ODY4Nlx1ODY4N1x1ODY4OFx1ODY4OVx1ODY4ZVx1ODY4Zlx1ODY5MFx1ODY5MVx1ODY5Mlx1ODY5NFx1ODY5Nlx1ODY5N1x1ODY5OFx1ODY5OVx1ODY5YVx1ODY5Ylx1ODY5ZVx1ODY5Zlx1ODZhMFx1ODZhMVx1ODZhMlx1ODZhNVx1ODZhNlx1ODZhYlx1ODZh''@;'; put 'put ''ZFx1ODZhZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZiOFx1ODZiOVx1ODZiYlx1ODZiY1x1ODZiZFx1ODZiZVx1ODZiZlx1ODZjMVx1ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1ODZkMlx1ODZkM1x1ODZkNVx1ODZkNlx1ODZkN1x1ODZkYVx1ODZkY1x1ZmZmZFx1ODZkZFx1''@;'; put 'put ''ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1ODZlNVx1ODZlNlx1ODZlN1x1ODZlOFx1ODZlYVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZmNVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZmY1x1ODZmZFx1ODZmZlx1ODcwMVx1ODcwNFx1ODcwNVx1ODcwNlx1ODcwYlx1ODcwY1x1ODcwZVx1ODcw''@;'; put 'put ''Zlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcxNlx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1''@;'; put 'put ''OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0''@;'; put 'put ''MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1''@;'; put 'put ''NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA1XVtnXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzIwNV1bZ11dPTUyNDgwK2cseVs1MjQ4MCtnXT1fWzIwNV1bZ10pO2ZvcihfWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODcxOVx1ODcxYlx1ODcxZFx1ODcxZlx1ODcyMFx1ODcyNFx1ODcyNlx1ODcyN1x1''@;'; put 'put ''ODcyOFx1ODcyYVx1ODcyYlx1ODcyY1x1ODcyZFx1ODcyZlx1ODczMFx1ODczMlx1ODczM1x1ODczNVx1ODczNlx1ODczOFx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODc0MFx1ODc0MVx1ODc0Mlx1ODc0M1x1ODc0NFx1ODc0NVx1ODc0Nlx1ODc0YVx1ODc0Ylx1ODc0ZFx1ODc0Zlx1ODc1''@;'; put 'put ''MFx1ODc1MVx1ODc1Mlx1ODc1NFx1ODc1NVx1ODc1Nlx1ODc1OFx1ODc1YVx1ODc1Ylx1ODc1Y1x1ODc1ZFx1ODc1ZVx1ODc1Zlx1ODc2MVx1ODc2Mlx1ODc2Nlx1ODc2N1x1ODc2OFx1ODc2OVx1ODc2YVx1ODc2Ylx1ODc2Y1x1ODc2ZFx1ODc2Zlx1ODc3MVx1ODc3Mlx1ODc3M1x1ODc3NVx1''@;'; put 'put ''ZmZmZFx1ODc3N1x1ODc3OFx1ODc3OVx1ODc3YVx1ODc3Zlx1ODc4MFx1ODc4MVx1ODc4NFx1ODc4Nlx1ODc4N1x1ODc4OVx1ODc4YVx1ODc4Y1x1ODc4ZVx1ODc4Zlx1ODc5MFx1ODc5MVx1ODc5Mlx1ODc5NFx1ODc5NVx1ODc5Nlx1ODc5OFx1ODc5OVx1ODc5YVx1ODc5Ylx1ODc5Y1x1ODc5''@;'; put 'put ''ZFx1ODc5ZVx1ODdhMFx1ODdhMVx1ODdhMlx1ODdhM1x1ODdhNFx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1NjcyYVx1ODUxYVx1''@;'; put 'put ''NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1NmRhMVx1N2E5''@;'; put 'put ''ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1ZVx1NjIwYVx1''@;'; put 'put ''OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA2XVtn''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNl1bZ11dPTUyNzM2K2cseVs1MjczNitnXT1fWzIwNl1bZ10pO2ZvcihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODdhNVx1ODdhNlx1ODdhN1x1ODdhOVx1ODdhYVx1ODdhZVx1''@;'; put 'put ''ODdiMFx1ODdiMVx1ODdiMlx1ODdiNFx1ODdiNlx1ODdiN1x1ODdiOFx1ODdiOVx1ODdiYlx1ODdiY1x1ODdiZVx1ODdiZlx1ODdjMVx1ODdjMlx1ODdjM1x1ODdjNFx1ODdjNVx1ODdjN1x1ODdjOFx1ODdjOVx1ODdjY1x1ODdjZFx1ODdjZVx1ODdjZlx1ODdkMFx1ODdkNFx1ODdkNVx1ODdk''@;'; put 'put ''Nlx1ODdkN1x1ODdkOFx1ODdkOVx1ODdkYVx1ODdkY1x1ODdkZFx1ODdkZVx1ODdkZlx1ODdlMVx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlNlx1ODdlN1x1ODdlOFx1ODdlOVx1ODdlYlx1ODdlY1x1ODdlZFx1ODdlZlx1ODdmMFx1ODdmMVx1ODdmMlx1ODdmM1x1ODdmNFx1ODdmNVx1ODdmNlx1''@;'; put 'put ''ODdmN1x1ODdmOFx1ZmZmZFx1ODdmYVx1ODdmYlx1ODdmY1x1ODdmZFx1ODdmZlx1ODgwMFx1ODgwMVx1ODgwMlx1ODgwNFx1ODgwNVx1ODgwNlx1ODgwN1x1ODgwOFx1ODgwOVx1ODgwYlx1ODgwY1x1ODgwZFx1ODgwZVx1ODgwZlx1ODgxMFx1ODgxMVx1ODgxMlx1ODgxNFx1ODgxN1x1ODgx''@;'; put 'put ''OFx1ODgxOVx1ODgxYVx1ODgxY1x1ODgxZFx1ODgxZVx1ODgxZlx1ODgyMFx1ODgyM1x1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1''@;'; put 'put ''NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIz''@;'; put 'put ''N1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1''@;'; put 'put ''NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwN10ubGVuZ3RoOysrZyk2NTUz''@;'; put 'put ''MyE9PV9bMjA3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwN11bZ11dPTUyOTkyK2cseVs1Mjk5MitnXT1fWzIwN11bZ10pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyNFx1ODgyNVx1ODgyNlx1ODgyN1x1''@;'; put 'put ''ODgyOFx1ODgyOVx1ODgyYVx1ODgyYlx1ODgyY1x1ODgyZFx1ODgyZVx1ODgyZlx1ODgzMFx1ODgzMVx1ODgzM1x1ODgzNFx1ODgzNVx1ODgzNlx1ODgzN1x1ODgzOFx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1ODgzZlx1ODg0MVx1ODg0Mlx1ODg0M1x1ODg0Nlx1ODg0N1x1ODg0OFx1ODg0''@;'; put 'put ''OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg0Zlx1ODg1MFx1ODg1MVx1ODg1Mlx1ODg1M1x1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YVx1ODg1Ylx1ODg1Y1x1ODg1ZFx1ODg1ZVx1ODg1Zlx1ODg2MFx1ODg2Nlx1ODg2N1x1ODg2YVx1ODg2ZFx1ODg2Zlx1ODg3MVx1ODg3M1x1ODg3NFx1ODg3NVx1''@;'; put 'put ''ODg3Nlx1ODg3OFx1ODg3OVx1ODg3YVx1ZmZmZFx1ODg3Ylx1ODg3Y1x1ODg4MFx1ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1ODg4YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1ODg5NVx1ODg5N1x1ODg5OFx1ODg5OVx1ODg5YVx1ODg5Ylx1ODg5ZFx1ODg5''@;'; put 'put ''ZVx1ODg5Zlx1ODhhMFx1ODhhMVx1ODhhM1x1ODhhNVx1ODhhNlx1ODhhN1x1ODhhOFx1ODhhOVx1ODhhYVx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1''@;'; put 'put ''ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4''@;'; put 'put ''Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1''@;'; put 'put ''ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1NzM4NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOF0ubGVu''@;'; put 'put ''Z3RoOysrZyk2NTUzMyE9PV9bMjA4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOF1bZ11dPTUzMjQ4K2cseVs1MzI0OCtnXT1fWzIwOF1bZ10pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhhY1x1ODhhZVx1''@;'; put 'put ''ODhhZlx1ODhiMFx1ODhiMlx1ODhiM1x1ODhiNFx1ODhiNVx1ODhiNlx1ODhiOFx1ODhiOVx1ODhiYVx1ODhiYlx1ODhiZFx1ODhiZVx1ODhiZlx1ODhjMFx1ODhjM1x1ODhjNFx1ODhjN1x1ODhjOFx1ODhjYVx1ODhjYlx1ODhjY1x1ODhjZFx1ODhjZlx1ODhkMFx1ODhkMVx1ODhkM1x1ODhk''@;'; put 'put ''Nlx1ODhkN1x1ODhkYVx1ODhkYlx1ODhkY1x1ODhkZFx1ODhkZVx1ODhlMFx1ODhlMVx1ODhlNlx1ODhlN1x1ODhlOVx1ODhlYVx1ODhlYlx1ODhlY1x1ODhlZFx1ODhlZVx1ODhlZlx1ODhmMlx1ODhmNVx1ODhmNlx1ODhmN1x1ODhmYVx1ODhmYlx1ODhmZFx1ODhmZlx1ODkwMFx1ODkwMVx1''@;'; put 'put ''ODkwM1x1ODkwNFx1ODkwNVx1ODkwNlx1ODkwN1x1ODkwOFx1ZmZmZFx1ODkwOVx1ODkwYlx1ODkwY1x1ODkwZFx1ODkwZVx1ODkwZlx1ODkxMVx1ODkxNFx1ODkxNVx1ODkxNlx1ODkxN1x1ODkxOFx1ODkxY1x1ODkxZFx1ODkxZVx1ODkxZlx1ODkyMFx1ODkyMlx1ODkyM1x1ODkyNFx1ODky''@;'; put 'put ''Nlx1ODkyN1x1ODkyOFx1ODkyOVx1ODkyY1x1ODkyZFx1ODkyZVx1ODkyZlx1ODkzMVx1ODkzMlx1ODkzM1x1ODkzNVx1ODkzN1x1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZlYVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1''@;'; put 'put ''NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYw''@;'; put 'put ''OVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcxMlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFkNVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1''@;'; put 'put ''NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn''@;'; put 'put ''IT1fWzIwOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOV1bZ11dPTUzNTA0K2cseVs1MzUwNCtnXT1fWzIwOV1bZ10pO2ZvcihfWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ODkzOFx1ODkzOVx1ODkzYVx1ODkzYlx1ODkzY1x1ODkzZFx1ODkzZVx1ODkzZlx1ODk0MFx1ODk0Mlx1ODk0M1x1ODk0NVx1ODk0Nlx1ODk0N1x1ODk0OFx1ODk0OVx1ODk0YVx1ODk0Ylx1ODk0Y1x1ODk0ZFx1ODk0ZVx1ODk0Zlx1ODk1MFx1ODk1MVx1ODk1Mlx1ODk1M1x1ODk1NFx1ODk1''@;'; put 'put ''NVx1ODk1Nlx1ODk1N1x1ODk1OFx1ODk1OVx1ODk1YVx1ODk1Ylx1ODk1Y1x1ODk1ZFx1ODk2MFx1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2NFx1ODk2NVx1ODk2N1x1ODk2OFx1ODk2OVx1ODk2YVx1ODk2Ylx1ODk2Y1x1ODk2ZFx1ODk2ZVx1ODk2Zlx1ODk3MFx1ODk3MVx1ODk3Mlx1ODk3M1x1''@;'; put 'put ''ODk3NFx1ODk3NVx1ODk3Nlx1ODk3N1x1ODk3OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ZmZmZFx1ODk3ZFx1ODk3ZVx1ODk4MFx1ODk4Mlx1ODk4NFx1ODk4NVx1ODk4N1x1ODk4OFx1ODk4OVx1ODk4YVx1ODk4Ylx1ODk4Y1x1ODk4ZFx1ODk4ZVx1ODk4Zlx1ODk5MFx1ODk5MVx1ODk5Mlx1ODk5''@;'; put 'put ''M1x1ODk5NFx1ODk5NVx1ODk5Nlx1ODk5N1x1ODk5OFx1ODk5OVx1ODk5YVx1ODk5Ylx1ODk5Y1x1ODk5ZFx1ODk5ZVx1ODk5Zlx1ODlhMFx1ODlhMVx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1''@;'; put 'put ''ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5''@;'; put 'put ''MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1''@;'; put 'put ''NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLGc9MDtnIT1fWzIxMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMF1bZ11dPTUzNzYwK2cseVs1Mzc2MCtnXT1fWzIxMF1bZ10pO2ZvcihfWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ODlhMlx1ODlhM1x1ODlhNFx1ODlhNVx1ODlhNlx1ODlhN1x1ODlhOFx1ODlhOVx1ODlhYVx1ODlhYlx1ODlhY1x1ODlhZFx1ODlhZVx1ODlhZlx1ODliMFx1ODliMVx1ODliMlx1ODliM1x1ODliNFx1ODliNVx1ODliNlx1ODliN1x1ODliOFx1ODliOVx1ODliYVx1ODli''@;'; put 'put ''Ylx1ODliY1x1ODliZFx1ODliZVx1ODliZlx1ODljMFx1ODljM1x1ODljZFx1ODlkM1x1ODlkNFx1ODlkNVx1ODlkN1x1ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1ODlkZlx1ODllMFx1ODllMVx1ODllMlx1ODllNFx1ODllN1x1ODllOFx1ODllOVx1ODllYVx1ODllY1x1ODllZFx1ODllZVx1''@;'; put 'put ''ODlmMFx1ODlmMVx1ODlmMlx1ODlmNFx1ODlmNVx1ODlmNlx1ODlmN1x1ODlmOFx1ODlmOVx1ODlmYVx1ZmZmZFx1ODlmYlx1ODlmY1x1ODlmZFx1ODlmZVx1ODlmZlx1OGEwMVx1OGEwMlx1OGEwM1x1OGEwNFx1OGEwNVx1OGEwNlx1OGEwOFx1OGEwOVx1OGEwYVx1OGEwYlx1OGEwY1x1OGEw''@;'; put 'put ''ZFx1OGEwZVx1OGEwZlx1OGExMFx1OGExMVx1OGExMlx1OGExM1x1OGExNFx1OGExNVx1OGExNlx1OGExN1x1OGExOFx1OGExOVx1OGExYVx1OGExYlx1OGExY1x1OGExZFx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1''@;'; put 'put ''ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZl''@;'; put 'put ''N1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1''@;'; put 'put ''OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4''@;'; put 'put ''OVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjExXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMV1bZ11dPTU0MDE2K2cseVs1NDAxNitnXT1fWzIxMV1bZ10pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGExZVx1OGExZlx1OGEyMFx1OGEyMVx1OGEyMlx1OGEyM1x1OGEyNFx1OGEyNVx1OGEyNlx1OGEyN1x1OGEyOFx1OGEyOVx1OGEyYVx1OGEyYlx1OGEyY1x1OGEyZFx1OGEyZVx1OGEyZlx1OGEzMFx1OGEzMVx1OGEzMlx1OGEzM1x1OGEzNFx1OGEz''@;'; put 'put ''NVx1OGEzNlx1OGEzN1x1OGEzOFx1OGEzOVx1OGEzYVx1OGEzYlx1OGEzY1x1OGEzZFx1OGEzZlx1OGE0MFx1OGE0MVx1OGE0Mlx1OGE0M1x1OGE0NFx1OGE0NVx1OGE0Nlx1OGE0N1x1OGE0OVx1OGE0YVx1OGE0Ylx1OGE0Y1x1OGE0ZFx1OGE0ZVx1OGE0Zlx1OGE1MFx1OGE1MVx1OGE1Mlx1''@;'; put 'put ''OGE1M1x1OGE1NFx1OGE1NVx1OGE1Nlx1OGE1N1x1OGE1OFx1OGE1OVx1OGE1YVx1OGE1Ylx1OGE1Y1x1OGE1ZFx1OGE1ZVx1ZmZmZFx1OGE1Zlx1OGE2MFx1OGE2MVx1OGE2Mlx1OGE2M1x1OGE2NFx1OGE2NVx1OGE2Nlx1OGE2N1x1OGE2OFx1OGE2OVx1OGE2YVx1OGE2Ylx1OGE2Y1x1OGE2''@;'; put 'put ''ZFx1OGE2ZVx1OGE2Zlx1OGE3MFx1OGE3MVx1OGE3Mlx1OGE3M1x1OGE3NFx1OGE3NVx1OGE3Nlx1OGE3N1x1OGE3OFx1OGE3YVx1OGE3Ylx1OGE3Y1x1OGE3ZFx1OGE3ZVx1OGE3Zlx1OGE4MFx1NmQ3NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1''@;'; put 'put ''NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAx''@;'; put 'put ''OFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1''@;'; put 'put ''ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUy''@;'; put 'put ''M1x1NjcyZFx1OGY2N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMl1bZ11dPTU0MjcyK2cseVs1NDI3MitnXT1fWzIxMl1bZ10pO2ZvcihfWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE4MVx1OGE4Mlx1OGE4M1x1OGE4NFx1OGE4NVx1OGE4Nlx1OGE4N1x1OGE4OFx1OGE4Ylx1OGE4Y1x1OGE4ZFx1OGE4ZVx1OGE4Zlx1OGE5MFx1OGE5MVx1OGE5Mlx1OGE5NFx1OGE5NVx1OGE5Nlx1OGE5N1x1OGE5OFx1OGE5''@;'; put 'put ''OVx1OGE5YVx1OGE5Ylx1OGE5Y1x1OGE5ZFx1OGE5ZVx1OGE5Zlx1OGFhMFx1OGFhMVx1OGFhMlx1OGFhM1x1OGFhNFx1OGFhNVx1OGFhNlx1OGFhN1x1OGFhOFx1OGFhOVx1OGFhYVx1OGFhYlx1OGFhY1x1OGFhZFx1OGFhZVx1OGFhZlx1OGFiMFx1OGFiMVx1OGFiMlx1OGFiM1x1OGFiNFx1''@;'; put 'put ''OGFiNVx1OGFiNlx1OGFiN1x1OGFiOFx1OGFiOVx1OGFiYVx1OGFiYlx1OGFiY1x1OGFiZFx1OGFiZVx1OGFiZlx1OGFjMFx1OGFjMVx1OGFjMlx1ZmZmZFx1OGFjM1x1OGFjNFx1OGFjNVx1OGFjNlx1OGFjN1x1OGFjOFx1OGFjOVx1OGFjYVx1OGFjYlx1OGFjY1x1OGFjZFx1OGFjZVx1OGFj''@;'; put 'put ''Zlx1OGFkMFx1OGFkMVx1OGFkMlx1OGFkM1x1OGFkNFx1OGFkNVx1OGFkNlx1OGFkN1x1OGFkOFx1OGFkOVx1OGFkYVx1OGFkYlx1OGFkY1x1OGFkZFx1OGFkZVx1OGFkZlx1OGFlMFx1OGFlMVx1OGFlMlx1OGFlM1x1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1''@;'; put 'put ''NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3''@;'; put 'put ''MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1''@;'; put 'put ''ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAx''@;'; put 'put ''NFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxM11bZ11dPTU0NTI4K2cseVs1NDUyOCtnXT1fWzIxM11bZ10pO2ZvcihfWzIxNF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlNFx1OGFlNVx1OGFlNlx1OGFlN1x1OGFlOFx1OGFlOVx1OGFlYVx1OGFlYlx1OGFlY1x1OGFlZFx1OGFlZVx1OGFlZlx1OGFmMFx1OGFmMVx1OGFmMlx1OGFmM1x1OGFmNFx1OGFmNVx1OGFmNlx1OGFm''@;'; put 'put ''N1x1OGFmOFx1OGFmOVx1OGFmYVx1OGFmYlx1OGFmY1x1OGFmZFx1OGFmZVx1OGFmZlx1OGIwMFx1OGIwMVx1OGIwMlx1OGIwM1x1OGIwNFx1OGIwNVx1OGIwNlx1OGIwOFx1OGIwOVx1OGIwYVx1OGIwYlx1OGIwY1x1OGIwZFx1OGIwZVx1OGIwZlx1OGIxMFx1OGIxMVx1OGIxMlx1OGIxM1x1''@;'; put 'put ''OGIxNFx1OGIxNVx1OGIxNlx1OGIxN1x1OGIxOFx1OGIxOVx1OGIxYVx1OGIxYlx1OGIxY1x1OGIxZFx1OGIxZVx1OGIxZlx1OGIyMFx1OGIyMVx1OGIyMlx1OGIyM1x1ZmZmZFx1OGIyNFx1OGIyNVx1OGIyN1x1OGIyOFx1OGIyOVx1OGIyYVx1OGIyYlx1OGIyY1x1OGIyZFx1OGIyZVx1OGIy''@;'; put 'put ''Zlx1OGIzMFx1OGIzMVx1OGIzMlx1OGIzM1x1OGIzNFx1OGIzNVx1OGIzNlx1OGIzN1x1OGIzOFx1OGIzOVx1OGIzYVx1OGIzYlx1OGIzY1x1OGIzZFx1OGIzZVx1OGIzZlx1OGI0MFx1OGI0MVx1OGI0Mlx1OGI0M1x1OGI0NFx1OGI0NVx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1''@;'; put 'put ''Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1NGU0Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFm''@;'; put 'put ''M1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2ExYVx1OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1''@;'; put 'put ''NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1NzZiMVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1''@;'; put 'put ''N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNF1bZ11dPTU0Nzg0K2cseVs1NDc4NCtnXT1fWzIxNF1bZ10pO2ZvcihfWzIx''@;'; put 'put ''NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI0Nlx1OGI0N1x1OGI0OFx1OGI0OVx1OGI0YVx1OGI0Ylx1OGI0Y1x1OGI0ZFx1OGI0ZVx1OGI0Zlx1OGI1MFx1OGI1MVx1OGI1Mlx1OGI1M1x1OGI1NFx1OGI1NVx1OGI1Nlx1OGI1''@;'; put 'put ''N1x1OGI1OFx1OGI1OVx1OGI1YVx1OGI1Ylx1OGI1Y1x1OGI1ZFx1OGI1ZVx1OGI1Zlx1OGI2MFx1OGI2MVx1OGI2Mlx1OGI2M1x1OGI2NFx1OGI2NVx1OGI2N1x1OGI2OFx1OGI2OVx1OGI2YVx1OGI2Ylx1OGI2ZFx1OGI2ZVx1OGI2Zlx1OGI3MFx1OGI3MVx1OGI3Mlx1OGI3M1x1OGI3NFx1''@;'; put 'put ''OGI3NVx1OGI3Nlx1OGI3N1x1OGI3OFx1OGI3OVx1OGI3YVx1OGI3Ylx1OGI3Y1x1OGI3ZFx1OGI3ZVx1OGI3Zlx1OGI4MFx1OGI4MVx1OGI4Mlx1OGI4M1x1OGI4NFx1OGI4NVx1OGI4Nlx1ZmZmZFx1OGI4N1x1OGI4OFx1OGI4OVx1OGI4YVx1OGI4Ylx1OGI4Y1x1OGI4ZFx1OGI4ZVx1OGI4''@;'; put 'put ''Zlx1OGI5MFx1OGI5MVx1OGI5Mlx1OGI5M1x1OGI5NFx1OGI5NVx1OGI5Nlx1OGI5N1x1OGI5OFx1OGI5OVx1OGI5YVx1OGI5Ylx1OGI5Y1x1OGI5ZFx1OGI5ZVx1OGI5Zlx1OGJhY1x1OGJiMVx1OGJiYlx1OGJjN1x1OGJkMFx1OGJlYVx1OGMwOVx1OGMxZVx1NGY0Zlx1NmNlOFx1Nzk1ZFx1''@;'; put 'put ''OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJkOVx1NTM1''@;'; put 'put ''M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFlYVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1NWI5N1x1''@;'; put 'put ''N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1NjdkZVx1NTA1''@;'; put 'put ''YVx1NGY1Y1x1NTc1MFx1NWVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNV1bZ11dPTU1MDQwK2cseVs1NTA0MCtnXT1fWzIxNV1b''@;'; put 'put ''Z10pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMzOFx1OGMzOVx1OGMzYVx1OGMzYlx1OGMzY1x1OGMzZFx1OGMzZVx1OGMzZlx1OGM0MFx1OGM0Mlx1OGM0M1x1OGM0NFx1OGM0NVx1OGM0OFx1OGM0YVx1OGM0''@;'; put 'put ''Ylx1OGM0ZFx1OGM0ZVx1OGM0Zlx1OGM1MFx1OGM1MVx1OGM1Mlx1OGM1M1x1OGM1NFx1OGM1Nlx1OGM1N1x1OGM1OFx1OGM1OVx1OGM1Ylx1OGM1Y1x1OGM1ZFx1OGM1ZVx1OGM1Zlx1OGM2MFx1OGM2M1x1OGM2NFx1OGM2NVx1OGM2Nlx1OGM2N1x1OGM2OFx1OGM2OVx1OGM2Y1x1OGM2ZFx1''@;'; put 'put ''OGM2ZVx1OGM2Zlx1OGM3MFx1OGM3MVx1OGM3Mlx1OGM3NFx1OGM3NVx1OGM3Nlx1OGM3N1x1OGM3Ylx1OGM3Y1x1OGM3ZFx1OGM3ZVx1OGM3Zlx1OGM4MFx1OGM4MVx1OGM4M1x1OGM4NFx1OGM4Nlx1OGM4N1x1ZmZmZFx1OGM4OFx1OGM4Ylx1OGM4ZFx1OGM4ZVx1OGM4Zlx1OGM5MFx1OGM5''@;'; put 'put ''MVx1OGM5Mlx1OGM5M1x1OGM5NVx1OGM5Nlx1OGM5N1x1OGM5OVx1OGM5YVx1OGM5Ylx1OGM5Y1x1OGM5ZFx1OGM5ZVx1OGM5Zlx1OGNhMFx1OGNhMVx1OGNhMlx1OGNhM1x1OGNhNFx1OGNhNVx1OGNhNlx1OGNhN1x1OGNhOFx1OGNhOVx1OGNhYVx1OGNhYlx1OGNhY1x1OGNhZFx1NGU4ZFx1''@;'; put 'put ''NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5''@;'; put 'put ''Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1''@;'; put 'put ''NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2''@;'; put 'put ''NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNl1bZ11dPTU1Mjk2K2cseVs1NTI5''@;'; put 'put ''NitnXT1fWzIxNl1bZ10pO2ZvcihfWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhZVx1OGNhZlx1OGNiMFx1OGNiMVx1OGNiMlx1OGNiM1x1OGNiNFx1OGNiNVx1OGNiNlx1OGNiN1x1OGNiOFx1OGNiOVx1OGNiYVx1OGNi''@;'; put 'put ''Ylx1OGNiY1x1OGNiZFx1OGNiZVx1OGNiZlx1OGNjMFx1OGNjMVx1OGNjMlx1OGNjM1x1OGNjNFx1OGNjNVx1OGNjNlx1OGNjN1x1OGNjOFx1OGNjOVx1OGNjYVx1OGNjYlx1OGNjY1x1OGNjZFx1OGNjZVx1OGNjZlx1OGNkMFx1OGNkMVx1OGNkMlx1OGNkM1x1OGNkNFx1OGNkNVx1OGNkNlx1''@;'; put 'put ''OGNkN1x1OGNkOFx1OGNkOVx1OGNkYVx1OGNkYlx1OGNkY1x1OGNkZFx1OGNkZVx1OGNkZlx1OGNlMFx1OGNlMVx1OGNlMlx1OGNlM1x1OGNlNFx1OGNlNVx1OGNlNlx1OGNlN1x1OGNlOFx1OGNlOVx1OGNlYVx1OGNlYlx1OGNlY1x1ZmZmZFx1OGNlZFx1OGNlZVx1OGNlZlx1OGNmMFx1OGNm''@;'; put 'put ''MVx1OGNmMlx1OGNmM1x1OGNmNFx1OGNmNVx1OGNmNlx1OGNmN1x1OGNmOFx1OGNmOVx1OGNmYVx1OGNmYlx1OGNmY1x1OGNmZFx1OGNmZVx1OGNmZlx1OGQwMFx1OGQwMVx1OGQwMlx1OGQwM1x1OGQwNFx1OGQwNVx1OGQwNlx1OGQwN1x1OGQwOFx1OGQwOVx1OGQwYVx1OGQwYlx1OGQwY1x1''@;'; put 'put ''OGQwZFx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAy''@;'; put 'put ''OVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1''@;'; put 'put ''NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2''@;'; put 'put ''ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxN11bZ11dPTU1''@;'; put 'put ''NTUyK2cseVs1NTU1MitnXT1fWzIxN11bZ10pO2ZvcihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwZVx1OGQwZlx1OGQxMFx1OGQxMVx1OGQxMlx1OGQxM1x1OGQxNFx1OGQxNVx1OGQxNlx1OGQxN1x1OGQxOFx1OGQx''@;'; put 'put ''OVx1OGQxYVx1OGQxYlx1OGQxY1x1OGQyMFx1OGQ1MVx1OGQ1Mlx1OGQ1N1x1OGQ1Zlx1OGQ2NVx1OGQ2OFx1OGQ2OVx1OGQ2YVx1OGQ2Y1x1OGQ2ZVx1OGQ2Zlx1OGQ3MVx1OGQ3Mlx1OGQ3OFx1OGQ3OVx1OGQ3YVx1OGQ3Ylx1OGQ3Y1x1OGQ3ZFx1OGQ3ZVx1OGQ3Zlx1OGQ4MFx1OGQ4Mlx1''@;'; put 'put ''OGQ4M1x1OGQ4Nlx1OGQ4N1x1OGQ4OFx1OGQ4OVx1OGQ4Y1x1OGQ4ZFx1OGQ4ZVx1OGQ4Zlx1OGQ5MFx1OGQ5Mlx1OGQ5M1x1OGQ5NVx1OGQ5Nlx1OGQ5N1x1OGQ5OFx1OGQ5OVx1OGQ5YVx1OGQ5Ylx1OGQ5Y1x1OGQ5ZFx1OGQ5ZVx1OGRhMFx1OGRhMVx1ZmZmZFx1OGRhMlx1OGRhNFx1OGRh''@;'; put 'put ''NVx1OGRhNlx1OGRhN1x1OGRhOFx1OGRhOVx1OGRhYVx1OGRhYlx1OGRhY1x1OGRhZFx1OGRhZVx1OGRhZlx1OGRiMFx1OGRiMlx1OGRiNlx1OGRiN1x1OGRiOVx1OGRiYlx1OGRiZFx1OGRjMFx1OGRjMVx1OGRjMlx1OGRjNVx1OGRjN1x1OGRjOFx1OGRjOVx1OGRjYVx1OGRjZFx1OGRkMFx1''@;'; put 'put ''OGRkMlx1OGRkM1x1OGRkNFx1NTFjN1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJl''@;'; put 'put ''MFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMxNVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1''@;'; put 'put ''OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3''@;'; put 'put ''NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzIxOF1bZ11dPTU1ODA4K2cseVs1NTgwOCtnXT1fWzIxOF1bZ10pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGRkNVx1OGRkOFx1OGRkOVx1OGRkY1x1OGRlMFx1OGRlMVx1OGRlMlx1OGRlNVx1OGRlNlx1OGRl''@;'; put 'put ''N1x1OGRlOVx1OGRlZFx1OGRlZVx1OGRmMFx1OGRmMVx1OGRmMlx1OGRmNFx1OGRmNlx1OGRmY1x1OGRmZVx1OGRmZlx1OGUwMFx1OGUwMVx1OGUwMlx1OGUwM1x1OGUwNFx1OGUwNlx1OGUwN1x1OGUwOFx1OGUwYlx1OGUwZFx1OGUwZVx1OGUxMFx1OGUxMVx1OGUxMlx1OGUxM1x1OGUxNVx1''@;'; put 'put ''OGUxNlx1OGUxN1x1OGUxOFx1OGUxOVx1OGUxYVx1OGUxYlx1OGUxY1x1OGUyMFx1OGUyMVx1OGUyNFx1OGUyNVx1OGUyNlx1OGUyN1x1OGUyOFx1OGUyYlx1OGUyZFx1OGUzMFx1OGUzMlx1OGUzM1x1OGUzNFx1OGUzNlx1OGUzN1x1OGUzOFx1OGUzYlx1OGUzY1x1OGUzZVx1ZmZmZFx1OGUz''@;'; put 'put ''Zlx1OGU0M1x1OGU0NVx1OGU0Nlx1OGU0Y1x1OGU0ZFx1OGU0ZVx1OGU0Zlx1OGU1MFx1OGU1M1x1OGU1NFx1OGU1NVx1OGU1Nlx1OGU1N1x1OGU1OFx1OGU1YVx1OGU1Ylx1OGU1Y1x1OGU1ZFx1OGU1ZVx1OGU1Zlx1OGU2MFx1OGU2MVx1OGU2Mlx1OGU2M1x1OGU2NFx1OGU2NVx1OGU2N1x1''@;'; put 'put ''OGU2OFx1OGU2YVx1OGU2Ylx1OGU2ZVx1OGU3MVx1OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEy''@;'; put 'put ''Zlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1''@;'; put 'put ''NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdi''@;'; put 'put ''Mlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE5XVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzIxOV1bZ11dPTU2MDY0K2cseVs1NjA2NCtnXT1fWzIxOV1bZ10pO2ZvcihfWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU3M1x1OGU3NVx1OGU3N1x1OGU3OFx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU3''@;'; put 'put ''ZFx1OGU3ZVx1OGU4MFx1OGU4Mlx1OGU4M1x1OGU4NFx1OGU4Nlx1OGU4OFx1OGU4OVx1OGU4YVx1OGU4Ylx1OGU4Y1x1OGU4ZFx1OGU4ZVx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NVx1OGU5Nlx1OGU5N1x1OGU5OFx1OGU5OVx1OGU5YVx1OGU5Ylx1OGU5ZFx1OGU5Zlx1OGVhMFx1OGVhMVx1''@;'; put 'put ''OGVhMlx1OGVhM1x1OGVhNFx1OGVhNVx1OGVhNlx1OGVhN1x1OGVhOFx1OGVhOVx1OGVhYVx1OGVhZFx1OGVhZVx1OGViMFx1OGViMVx1OGViM1x1OGViNFx1OGViNVx1OGViNlx1OGViN1x1OGViOFx1OGViOVx1OGViYlx1OGViY1x1OGViZFx1OGViZVx1OGViZlx1OGVjMFx1OGVjMVx1OGVj''@;'; put 'put ''Mlx1ZmZmZFx1OGVjM1x1OGVjNFx1OGVjNVx1OGVjNlx1OGVjN1x1OGVjOFx1OGVjOVx1OGVjYVx1OGVjYlx1OGVjY1x1OGVjZFx1OGVjZlx1OGVkMFx1OGVkMVx1OGVkMlx1OGVkM1x1OGVkNFx1OGVkNVx1OGVkNlx1OGVkN1x1OGVkOFx1OGVkOVx1OGVkYVx1OGVkYlx1OGVkY1x1OGVkZFx1''@;'; put 'put ''OGVkZVx1OGVkZlx1OGVlMFx1OGVlMVx1OGVlMlx1OGVlM1x1OGVlNFx1NTgwYlx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3''@;'; put 'put ''Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1''@;'; put 'put ''ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5''@;'; put 'put ''Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIw''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMF1bZ11dPTU2MzIwK2cseVs1NjMyMCtnXT1fWzIyMF1bZ10pO2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVlNVx1OGVlNlx1OGVlN1x1OGVlOFx1OGVlOVx1OGVl''@;'; put 'put ''YVx1OGVlYlx1OGVlY1x1OGVlZFx1OGVlZVx1OGVlZlx1OGVmMFx1OGVmMVx1OGVmMlx1OGVmM1x1OGVmNFx1OGVmNVx1OGVmNlx1OGVmN1x1OGVmOFx1OGVmOVx1OGVmYVx1OGVmYlx1OGVmY1x1OGVmZFx1OGVmZVx1OGVmZlx1OGYwMFx1OGYwMVx1OGYwMlx1OGYwM1x1OGYwNFx1OGYwNVx1''@;'; put 'put ''OGYwNlx1OGYwN1x1OGYwOFx1OGYwOVx1OGYwYVx1OGYwYlx1OGYwY1x1OGYwZFx1OGYwZVx1OGYwZlx1OGYxMFx1OGYxMVx1OGYxMlx1OGYxM1x1OGYxNFx1OGYxNVx1OGYxNlx1OGYxN1x1OGYxOFx1OGYxOVx1OGYxYVx1OGYxYlx1OGYxY1x1OGYxZFx1OGYxZVx1OGYxZlx1OGYyMFx1OGYy''@;'; put 'put ''MVx1OGYyMlx1OGYyM1x1ZmZmZFx1OGYyNFx1OGYyNVx1OGYyNlx1OGYyN1x1OGYyOFx1OGYyOVx1OGYyYVx1OGYyYlx1OGYyY1x1OGYyZFx1OGYyZVx1OGYyZlx1OGYzMFx1OGYzMVx1OGYzMlx1OGYzM1x1OGYzNFx1OGYzNVx1OGYzNlx1OGYzN1x1OGYzOFx1OGYzOVx1OGYzYVx1OGYzYlx1''@;'; put 'put ''OGYzY1x1OGYzZFx1OGYzZVx1OGYzZlx1OGY0MFx1OGY0MVx1OGY0Mlx1OGY0M1x1OGY0NFx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNh''@;'; put 'put ''OVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQxY1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1''@;'; put 'put ''ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRk''@;'; put 'put ''MFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRiZlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUxZlx1ODUzYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMV0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMjIxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMV1bZ11dPTU2NTc2K2cseVs1NjU3NitnXT1fWzIyMV1bZ10pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY0NVx1OGY0Nlx1OGY0N1x1OGY0''@;'; put 'put ''OFx1OGY0OVx1OGY0YVx1OGY0Ylx1OGY0Y1x1OGY0ZFx1OGY0ZVx1OGY0Zlx1OGY1MFx1OGY1MVx1OGY1Mlx1OGY1M1x1OGY1NFx1OGY1NVx1OGY1Nlx1OGY1N1x1OGY1OFx1OGY1OVx1OGY1YVx1OGY1Ylx1OGY1Y1x1OGY1ZFx1OGY1ZVx1OGY1Zlx1OGY2MFx1OGY2MVx1OGY2Mlx1OGY2M1x1''@;'; put 'put ''OGY2NFx1OGY2NVx1OGY2YVx1OGY4MFx1OGY4Y1x1OGY5Mlx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZhMlx1OGZhNFx1OGZhNVx1OGZhNlx1OGZhN1x1OGZhYVx1OGZhY1x1OGZhZFx1OGZhZVx1OGZhZlx1OGZiMlx1OGZiM1x1OGZiNFx1OGZiNVx1OGZiN1x1OGZiOFx1OGZiYVx1OGZiYlx1OGZi''@;'; put 'put ''Y1x1OGZiZlx1OGZjMFx1OGZjM1x1OGZjNlx1ZmZmZFx1OGZjOVx1OGZjYVx1OGZjYlx1OGZjY1x1OGZjZFx1OGZjZlx1OGZkMlx1OGZkNlx1OGZkN1x1OGZkYVx1OGZlMFx1OGZlMVx1OGZlM1x1OGZlN1x1OGZlY1x1OGZlZlx1OGZmMVx1OGZmMlx1OGZmNFx1OGZmNVx1OGZmNlx1OGZmYVx1''@;'; put 'put ''OGZmYlx1OGZmY1x1OGZmZVx1OGZmZlx1OTAwN1x1OTAwOFx1OTAwY1x1OTAwZVx1OTAxM1x1OTAxNVx1OTAxOFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4''@;'; put 'put ''N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1''@;'; put 'put ''NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNi''@;'; put 'put ''Y1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMl0u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMl1bZ11dPTU2ODMyK2cseVs1NjgzMitnXT1fWzIyMl1bZ10pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAxOVx1OTAx''@;'; put 'put ''Y1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyN1x1OTAyOFx1OTAyOVx1OTAyYVx1OTAyYlx1OTAyY1x1OTAzMFx1OTAzMVx1OTAzMlx1OTAzM1x1OTAzNFx1OTAzN1x1OTAzOVx1OTAzYVx1OTAzZFx1OTAzZlx1OTA0MFx1OTA0M1x1OTA0NVx1OTA0Nlx1OTA0OFx1OTA0OVx1OTA0YVx1OTA0Ylx1''@;'; put 'put ''OTA0Y1x1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1OTA1OVx1OTA1YVx1OTA1Y1x1OTA1ZFx1OTA1ZVx1OTA1Zlx1OTA2MFx1OTA2MVx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2YVx1OTA2Ylx1OTA2Y1x1OTA2Zlx1OTA3MFx1OTA3MVx1OTA3Mlx1OTA3M1x1OTA3Nlx1OTA3N1x1OTA3''@;'; put 'put ''OFx1OTA3OVx1OTA3YVx1OTA3Ylx1OTA3Y1x1OTA3ZVx1OTA4MVx1ZmZmZFx1OTA4NFx1OTA4NVx1OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4Y1x1OTA4ZFx1OTA4ZVx1OTA4Zlx1OTA5MFx1OTA5Mlx1OTA5NFx1OTA5Nlx1OTA5OFx1OTA5YVx1OTA5Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1''@;'; put 'put ''OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1OTBhYlx1OTBhZFx1OTBiMlx1OTBiN1x1OTBiY1x1OTBiZFx1OTBiZlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZk''@;'; put 'put ''Mlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNlOFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1''@;'; put 'put ''NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRk''@;'; put 'put ''ZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUxNFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzY1x1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzIyM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyM11bZ11dPTU3MDg4K2cseVs1NzA4OCtnXT1fWzIyM11bZ10pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1OTBjMlx1OTBjM1x1OTBjNlx1OTBjOFx1OTBjOVx1OTBjYlx1OTBjY1x1OTBjZFx1OTBkMlx1OTBkNFx1OTBkNVx1OTBkNlx1OTBkOFx1OTBkOVx1OTBkYVx1OTBkZVx1OTBkZlx1OTBlMFx1OTBlM1x1OTBlNFx1OTBlNVx1OTBlOVx1OTBlYVx1OTBlY1x1OTBlZVx1OTBmMFx1OTBmMVx1''@;'; put 'put ''OTBmMlx1OTBmM1x1OTBmNVx1OTBmNlx1OTBmN1x1OTBmOVx1OTBmYVx1OTBmYlx1OTBmY1x1OTBmZlx1OTEwMFx1OTEwMVx1OTEwM1x1OTEwNVx1OTEwNlx1OTEwN1x1OTEwOFx1OTEwOVx1OTEwYVx1OTEwYlx1OTEwY1x1OTEwZFx1OTEwZVx1OTEwZlx1OTExMFx1OTExMVx1OTExMlx1OTEx''@;'; put 'put ''M1x1OTExNFx1OTExNVx1OTExNlx1OTExN1x1OTExOFx1OTExYVx1OTExYlx1OTExY1x1ZmZmZFx1OTExZFx1OTExZlx1OTEyMFx1OTEyMVx1OTEyNFx1OTEyNVx1OTEyNlx1OTEyN1x1OTEyOFx1OTEyOVx1OTEyYVx1OTEyYlx1OTEyY1x1OTEyZFx1OTEyZVx1OTEzMFx1OTEzMlx1OTEzM1x1''@;'; put 'put ''OTEzNFx1OTEzNVx1OTEzNlx1OTEzN1x1OTEzOFx1OTEzYVx1OTEzYlx1OTEzY1x1OTEzZFx1OTEzZVx1OTEzZlx1OTE0MFx1OTE0MVx1OTE0Mlx1OTE0NFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1NTUzMFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTVi''@;'; put 'put ''OVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVlNlx1NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1''@;'; put 'put ''NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2''@;'; put 'put ''NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUxOVx1NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzY1x1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzIyNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNF1bZ11dPTU3MzQ0K2cseVs1NzM0NCtnXT1fWzIyNF1bZ10pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1OTE0NVx1OTE0N1x1OTE0OFx1OTE1MVx1OTE1M1x1OTE1NFx1OTE1NVx1OTE1Nlx1OTE1OFx1OTE1OVx1OTE1Ylx1OTE1Y1x1OTE1Zlx1OTE2MFx1OTE2Nlx1OTE2N1x1OTE2OFx1OTE2Ylx1OTE2ZFx1OTE3M1x1OTE3YVx1OTE3Ylx1OTE3Y1x1OTE4MFx1OTE4MVx1''@;'; put 'put ''OTE4Mlx1OTE4M1x1OTE4NFx1OTE4Nlx1OTE4OFx1OTE4YVx1OTE4ZVx1OTE4Zlx1OTE5M1x1OTE5NFx1OTE5NVx1OTE5Nlx1OTE5N1x1OTE5OFx1OTE5OVx1OTE5Y1x1OTE5ZFx1OTE5ZVx1OTE5Zlx1OTFhMFx1OTFhMVx1OTFhNFx1OTFhNVx1OTFhNlx1OTFhN1x1OTFhOFx1OTFhOVx1OTFh''@;'; put 'put ''Ylx1OTFhY1x1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiN1x1OTFiOFx1OTFiOVx1OTFiYlx1ZmZmZFx1OTFiY1x1OTFiZFx1OTFiZVx1OTFiZlx1OTFjMFx1OTFjMVx1OTFjMlx1OTFjM1x1OTFjNFx1OTFjNVx1OTFjNlx1OTFjOFx1OTFjYlx1OTFkMFx1OTFkMlx1OTFkM1x1''@;'; put 'put ''OTFkNFx1OTFkNVx1OTFkNlx1OTFkN1x1OTFkOFx1OTFkOVx1OTFkYVx1OTFkYlx1OTFkZFx1OTFkZVx1OTFkZlx1OTFlMFx1OTFlMVx1OTFlMlx1OTFlM1x1OTFlNFx1OTFlNVx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5''@;'; put 'put ''Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1''@;'; put 'put ''NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5''@;'; put 'put ''NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1''@;'; put 'put ''NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bZ11dPTU3NjAwK2cseVs1NzYwMCtnXT1fWzIyNV1bZ10pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFlNlx1OTFlN1x1OTFlOFx1OTFlOVx1OTFlYVx1OTFlYlx1OTFlY1x1OTFlZFx1OTFlZVx1OTFlZlx1OTFmMFx1OTFmMVx1OTFmMlx1OTFmM1x1OTFmNFx1OTFmNVx1OTFmNlx1OTFmN1x1OTFmOFx1OTFmOVx1OTFmYVx1OTFmYlx1OTFmY1x1''@;'; put 'put ''OTFmZFx1OTFmZVx1OTFmZlx1OTIwMFx1OTIwMVx1OTIwMlx1OTIwM1x1OTIwNFx1OTIwNVx1OTIwNlx1OTIwN1x1OTIwOFx1OTIwOVx1OTIwYVx1OTIwYlx1OTIwY1x1OTIwZFx1OTIwZVx1OTIwZlx1OTIxMFx1OTIxMVx1OTIxMlx1OTIxM1x1OTIxNFx1OTIxNVx1OTIxNlx1OTIxN1x1OTIx''@;'; put 'put ''OFx1OTIxOVx1OTIxYVx1OTIxYlx1OTIxY1x1OTIxZFx1OTIxZVx1OTIxZlx1OTIyMFx1OTIyMVx1OTIyMlx1OTIyM1x1OTIyNFx1ZmZmZFx1OTIyNVx1OTIyNlx1OTIyN1x1OTIyOFx1OTIyOVx1OTIyYVx1OTIyYlx1OTIyY1x1OTIyZFx1OTIyZVx1OTIyZlx1OTIzMFx1OTIzMVx1OTIzMlx1''@;'; put 'put ''OTIzM1x1OTIzNFx1OTIzNVx1OTIzNlx1OTIzN1x1OTIzOFx1OTIzOVx1OTIzYVx1OTIzYlx1OTIzY1x1OTIzZFx1OTIzZVx1OTIzZlx1OTI0MFx1OTI0MVx1OTI0Mlx1OTI0M1x1OTI0NFx1OTI0NVx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMy''@;'; put 'put ''Mlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2N1x1OTk2OFx1OTk2OVx1OTk2YVx1OTk2Ylx1OTk2Y1x1OTk3NFx1OTk3N1x1OTk3ZFx1''@;'; put 'put ''OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZj''@;'; put 'put ''NFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAwNFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1''@;'; put 'put ''NjA3Ylx1NjA3YVx1NjA0Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1bZ11dPTU3ODU2K2cseVs1Nzg1NitnXT1fWzIyNl1bZ10pO2ZvcihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTI0Nlx1OTI0N1x1OTI0OFx1OTI0OVx1OTI0YVx1OTI0Ylx1OTI0Y1x1OTI0ZFx1OTI0ZVx1OTI0Zlx1OTI1MFx1OTI1MVx1OTI1Mlx1OTI1M1x1OTI1NFx1OTI1NVx1OTI1Nlx1OTI1N1x1OTI1OFx1OTI1OVx1OTI1YVx1''@;'; put 'put ''OTI1Ylx1OTI1Y1x1OTI1ZFx1OTI1ZVx1OTI1Zlx1OTI2MFx1OTI2MVx1OTI2Mlx1OTI2M1x1OTI2NFx1OTI2NVx1OTI2Nlx1OTI2N1x1OTI2OFx1OTI2OVx1OTI2YVx1OTI2Ylx1OTI2Y1x1OTI2ZFx1OTI2ZVx1OTI2Zlx1OTI3MFx1OTI3MVx1OTI3Mlx1OTI3M1x1OTI3NVx1OTI3Nlx1OTI3''@;'; put 'put ''N1x1OTI3OFx1OTI3OVx1OTI3YVx1OTI3Ylx1OTI3Y1x1OTI3ZFx1OTI3ZVx1OTI3Zlx1OTI4MFx1OTI4MVx1OTI4Mlx1OTI4M1x1OTI4NFx1OTI4NVx1ZmZmZFx1OTI4Nlx1OTI4N1x1OTI4OFx1OTI4OVx1OTI4YVx1OTI4Ylx1OTI4Y1x1OTI4ZFx1OTI4Zlx1OTI5MFx1OTI5MVx1OTI5Mlx1''@;'; put 'put ''OTI5M1x1OTI5NFx1OTI5NVx1OTI5Nlx1OTI5N1x1OTI5OFx1OTI5OVx1OTI5YVx1OTI5Ylx1OTI5Y1x1OTI5ZFx1OTI5ZVx1OTI5Zlx1OTJhMFx1OTJhMVx1OTJhMlx1OTJhM1x1OTJhNFx1OTJhNVx1OTJhNlx1OTJhN1x1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4''@;'; put 'put ''M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEyYlx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1''@;'; put 'put ''NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIx''@;'; put 'put ''NVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNmN1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1''@;'; put 'put ''NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyN11bZ11dPTU4MTEyK2cseVs1ODExMitnXT1fWzIyN11bZ10pO2ZvcihfWzIyOF09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhOFx1OTJhOVx1OTJhYVx1OTJhYlx1OTJhY1x1OTJhZFx1OTJhZlx1OTJiMFx1OTJiMVx1OTJiMlx1OTJiM1x1OTJiNFx1OTJiNVx1OTJiNlx1OTJiN1x1OTJiOFx1OTJiOVx1OTJiYVx1OTJiYlx1''@;'; put 'put ''OTJiY1x1OTJiZFx1OTJiZVx1OTJiZlx1OTJjMFx1OTJjMVx1OTJjMlx1OTJjM1x1OTJjNFx1OTJjNVx1OTJjNlx1OTJjN1x1OTJjOVx1OTJjYVx1OTJjYlx1OTJjY1x1OTJjZFx1OTJjZVx1OTJjZlx1OTJkMFx1OTJkMVx1OTJkMlx1OTJkM1x1OTJkNFx1OTJkNVx1OTJkNlx1OTJkN1x1OTJk''@;'; put 'put ''OFx1OTJkOVx1OTJkYVx1OTJkYlx1OTJkY1x1OTJkZFx1OTJkZVx1OTJkZlx1OTJlMFx1OTJlMVx1OTJlMlx1OTJlM1x1OTJlNFx1OTJlNVx1OTJlNlx1OTJlN1x1OTJlOFx1ZmZmZFx1OTJlOVx1OTJlYVx1OTJlYlx1OTJlY1x1OTJlZFx1OTJlZVx1OTJlZlx1OTJmMFx1OTJmMVx1OTJmMlx1''@;'; put 'put ''OTJmM1x1OTJmNFx1OTJmNVx1OTJmNlx1OTJmN1x1OTJmOFx1OTJmOVx1OTJmYVx1OTJmYlx1OTJmY1x1OTJmZFx1OTJmZVx1OTJmZlx1OTMwMFx1OTMwMVx1OTMwMlx1OTMwM1x1OTMwNFx1OTMwNVx1OTMwNlx1OTMwN1x1OTMwOFx1OTMwOVx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0''@;'; put 'put ''OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1''@;'; put 'put ''NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVl''@;'; put 'put ''MFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1''@;'; put 'put ''NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bZ11dPTU4MzY4K2cseVs1ODM2OCtnXT1fWzIyOF1bZ10pO2Zvcihf''@;'; put 'put ''WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYVx1OTMwYlx1OTMwY1x1OTMwZFx1OTMwZVx1OTMwZlx1OTMxMFx1OTMxMVx1OTMxMlx1OTMxM1x1OTMxNFx1OTMxNVx1OTMxNlx1OTMxN1x1OTMxOFx1OTMxOVx1OTMxYVx1''@;'; put 'put ''OTMxYlx1OTMxY1x1OTMxZFx1OTMxZVx1OTMxZlx1OTMyMFx1OTMyMVx1OTMyMlx1OTMyM1x1OTMyNFx1OTMyNVx1OTMyNlx1OTMyN1x1OTMyOFx1OTMyOVx1OTMyYVx1OTMyYlx1OTMyY1x1OTMyZFx1OTMyZVx1OTMyZlx1OTMzMFx1OTMzMVx1OTMzMlx1OTMzM1x1OTMzNFx1OTMzNVx1OTMz''@;'; put 'put ''Nlx1OTMzN1x1OTMzOFx1OTMzOVx1OTMzYVx1OTMzYlx1OTMzY1x1OTMzZFx1OTMzZlx1OTM0MFx1OTM0MVx1OTM0Mlx1OTM0M1x1OTM0NFx1OTM0NVx1OTM0Nlx1OTM0N1x1OTM0OFx1OTM0OVx1ZmZmZFx1OTM0YVx1OTM0Ylx1OTM0Y1x1OTM0ZFx1OTM0ZVx1OTM0Zlx1OTM1MFx1OTM1MVx1''@;'; put 'put ''OTM1Mlx1OTM1M1x1OTM1NFx1OTM1NVx1OTM1Nlx1OTM1N1x1OTM1OFx1OTM1OVx1OTM1YVx1OTM1Ylx1OTM1Y1x1OTM1ZFx1OTM1ZVx1OTM1Zlx1OTM2MFx1OTM2MVx1OTM2Mlx1OTM2M1x1OTM2NFx1OTM2NVx1OTM2Nlx1OTM2N1x1OTM2OFx1OTM2OVx1OTM2Ylx1NmZjOVx1NmZhN1x1NmZi''@;'; put 'put ''OVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZlMFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1''@;'; put 'put ''OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1''@;'; put 'put ''MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1''@;'; put 'put ''NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1NTlhOVx1NTlhYVx1NTlhM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bZ11dPTU4NjI0K2cseVs1ODYyNCtnXT1fWzIy''@;'; put 'put ''OV1bZ10pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTM2Y1x1OTM2ZFx1OTM2ZVx1OTM2Zlx1OTM3MFx1OTM3MVx1OTM3Mlx1OTM3M1x1OTM3NFx1OTM3NVx1OTM3Nlx1OTM3N1x1OTM3OFx1OTM3OVx1OTM3YVx1''@;'; put 'put ''OTM3Ylx1OTM3Y1x1OTM3ZFx1OTM3ZVx1OTM3Zlx1OTM4MFx1OTM4MVx1OTM4Mlx1OTM4M1x1OTM4NFx1OTM4NVx1OTM4Nlx1OTM4N1x1OTM4OFx1OTM4OVx1OTM4YVx1OTM4Ylx1OTM4Y1x1OTM4ZFx1OTM4ZVx1OTM5MFx1OTM5MVx1OTM5Mlx1OTM5M1x1OTM5NFx1OTM5NVx1OTM5Nlx1OTM5''@;'; put 'put ''N1x1OTM5OFx1OTM5OVx1OTM5YVx1OTM5Ylx1OTM5Y1x1OTM5ZFx1OTM5ZVx1OTM5Zlx1OTNhMFx1OTNhMVx1OTNhMlx1OTNhM1x1OTNhNFx1OTNhNVx1OTNhNlx1OTNhN1x1OTNhOFx1OTNhOVx1OTNhYVx1OTNhYlx1ZmZmZFx1OTNhY1x1OTNhZFx1OTNhZVx1OTNhZlx1OTNiMFx1OTNiMVx1''@;'; put 'put ''OTNiMlx1OTNiM1x1OTNiNFx1OTNiNVx1OTNiNlx1OTNiN1x1OTNiOFx1OTNiOVx1OTNiYVx1OTNiYlx1OTNiY1x1OTNiZFx1OTNiZVx1OTNiZlx1OTNjMFx1OTNjMVx1OTNjMlx1OTNjM1x1OTNjNFx1OTNjNVx1OTNjNlx1OTNjN1x1OTNjOFx1OTNjOVx1OTNjYlx1OTNjY1x1OTNjZFx1NTk5''@;'; put 'put ''N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEzMlx1NWEzNFx1NWExMVx1NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1''@;'; put 'put ''NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1NWIwOVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMx''@;'; put 'put ''NVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5M1x1OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1''@;'; put 'put ''OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMF1bZ11dPTU4ODgwK2cseVs1''@;'; put 'put ''ODg4MCtnXT1fWzIzMF1bZ10pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNjZVx1OTNjZlx1OTNkMFx1OTNkMVx1OTNkMlx1OTNkM1x1OTNkNFx1OTNkNVx1OTNkN1x1OTNkOFx1OTNkOVx1OTNkYVx1OTNkYlx1''@;'; put 'put ''OTNkY1x1OTNkZFx1OTNkZVx1OTNkZlx1OTNlMFx1OTNlMVx1OTNlMlx1OTNlM1x1OTNlNFx1OTNlNVx1OTNlNlx1OTNlN1x1OTNlOFx1OTNlOVx1OTNlYVx1OTNlYlx1OTNlY1x1OTNlZFx1OTNlZVx1OTNlZlx1OTNmMFx1OTNmMVx1OTNmMlx1OTNmM1x1OTNmNFx1OTNmNVx1OTNmNlx1OTNm''@;'; put 'put ''N1x1OTNmOFx1OTNmOVx1OTNmYVx1OTNmYlx1OTNmY1x1OTNmZFx1OTNmZVx1OTNmZlx1OTQwMFx1OTQwMVx1OTQwMlx1OTQwM1x1OTQwNFx1OTQwNVx1OTQwNlx1OTQwN1x1OTQwOFx1OTQwOVx1OTQwYVx1OTQwYlx1OTQwY1x1OTQwZFx1ZmZmZFx1OTQwZVx1OTQwZlx1OTQxMFx1OTQxMVx1''@;'; put 'put ''OTQxMlx1OTQxM1x1OTQxNFx1OTQxNVx1OTQxNlx1OTQxN1x1OTQxOFx1OTQxOVx1OTQxYVx1OTQxYlx1OTQxY1x1OTQxZFx1OTQxZVx1OTQxZlx1OTQyMFx1OTQyMVx1OTQyMlx1OTQyM1x1OTQyNFx1OTQyNVx1OTQyNlx1OTQyN1x1OTQyOFx1OTQyOVx1OTQyYVx1OTQyYlx1OTQyY1x1OTQy''@;'; put 'put ''ZFx1OTQyZVx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1''@;'; put 'put ''N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2YyM1x1N2YyNFx1N2YyNVx1N2YyNlx1N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2Yz''@;'; put 'put ''MFx1N2YzMVx1N2YzMlx1N2YzM1x1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1''@;'; put 'put ''NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMV1bZ11d''@;'; put 'put ''PTU5MTM2K2cseVs1OTEzNitnXT1fWzIzMV1bZ10pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQyZlx1OTQzMFx1OTQzMVx1OTQzMlx1OTQzM1x1OTQzNFx1OTQzNVx1OTQzNlx1OTQzN1x1OTQzOFx1OTQzOVx1''@;'; put 'put ''OTQzYVx1OTQzYlx1OTQzY1x1OTQzZFx1OTQzZlx1OTQ0MFx1OTQ0MVx1OTQ0Mlx1OTQ0M1x1OTQ0NFx1OTQ0NVx1OTQ0Nlx1OTQ0N1x1OTQ0OFx1OTQ0OVx1OTQ0YVx1OTQ0Ylx1OTQ0Y1x1OTQ0ZFx1OTQ0ZVx1OTQ0Zlx1OTQ1MFx1OTQ1MVx1OTQ1Mlx1OTQ1M1x1OTQ1NFx1OTQ1NVx1OTQ1''@;'; put 'put ''Nlx1OTQ1N1x1OTQ1OFx1OTQ1OVx1OTQ1YVx1OTQ1Ylx1OTQ1Y1x1OTQ1ZFx1OTQ1ZVx1OTQ1Zlx1OTQ2MFx1OTQ2MVx1OTQ2Mlx1OTQ2M1x1OTQ2NFx1OTQ2NVx1OTQ2Nlx1OTQ2N1x1OTQ2OFx1OTQ2OVx1OTQ2YVx1OTQ2Y1x1OTQ2ZFx1OTQ2ZVx1OTQ2Zlx1ZmZmZFx1OTQ3MFx1OTQ3MVx1''@;'; put 'put ''OTQ3Mlx1OTQ3M1x1OTQ3NFx1OTQ3NVx1OTQ3Nlx1OTQ3N1x1OTQ3OFx1OTQ3OVx1OTQ3YVx1OTQ3Ylx1OTQ3Y1x1OTQ3ZFx1OTQ3ZVx1OTQ3Zlx1OTQ4MFx1OTQ4MVx1OTQ4Mlx1OTQ4M1x1OTQ4NFx1OTQ5MVx1OTQ5Nlx1OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRkNFx1OTRkYVx1OTRl''@;'; put 'put ''Nlx1OTRmYlx1OTUxY1x1OTUyMFx1NzQxYlx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1''@;'; put 'put ''OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1Njdk''@;'; put 'put ''OVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1NjgwMFx1NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1''@;'; put 'put ''Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMyXVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzIzMl1bZ11dPTU5MzkyK2cseVs1OTM5MitnXT1fWzIzMl1bZ10pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTUyN1x1OTUzM1x1OTUzZFx1OTU0M1x1OTU0OFx1OTU0Ylx1OTU1NVx1OTU1YVx1OTU2MFx1''@;'; put 'put ''OTU2ZVx1OTU3NFx1OTU3NVx1OTU3N1x1OTU3OFx1OTU3OVx1OTU3YVx1OTU3Ylx1OTU3Y1x1OTU3ZFx1OTU3ZVx1OTU4MFx1OTU4MVx1OTU4Mlx1OTU4M1x1OTU4NFx1OTU4NVx1OTU4Nlx1OTU4N1x1OTU4OFx1OTU4OVx1OTU4YVx1OTU4Ylx1OTU4Y1x1OTU4ZFx1OTU4ZVx1OTU4Zlx1OTU5''@;'; put 'put ''MFx1OTU5MVx1OTU5Mlx1OTU5M1x1OTU5NFx1OTU5NVx1OTU5Nlx1OTU5N1x1OTU5OFx1OTU5OVx1OTU5YVx1OTU5Ylx1OTU5Y1x1OTU5ZFx1OTU5ZVx1OTU5Zlx1OTVhMFx1OTVhMVx1OTVhMlx1OTVhM1x1OTVhNFx1OTVhNVx1OTVhNlx1OTVhN1x1OTVhOFx1OTVhOVx1OTVhYVx1ZmZmZFx1''@;'; put 'put ''OTVhYlx1OTVhY1x1OTVhZFx1OTVhZVx1OTVhZlx1OTViMFx1OTViMVx1OTViMlx1OTViM1x1OTViNFx1OTViNVx1OTViNlx1OTViN1x1OTViOFx1OTViOVx1OTViYVx1OTViYlx1OTViY1x1OTViZFx1OTViZVx1OTViZlx1OTVjMFx1OTVjMVx1OTVjMlx1OTVjM1x1OTVjNFx1OTVjNVx1OTVj''@;'; put 'put ''Nlx1OTVjN1x1OTVjOFx1OTVjOVx1OTVjYVx1OTVjYlx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1''@;'; put 'put ''Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1''@;'; put 'put ''MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1''@;'; put 'put ''OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4Ylx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMzXVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzIzM11bZ11dPTU5NjQ4K2cseVs1OTY0OCtnXT1fWzIzM11bZ10pO2ZvcihfWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTVjY1x1OTVjZFx1OTVjZVx1OTVjZlx1OTVkMFx1OTVkMVx1OTVkMlx1''@;'; put 'put ''OTVkM1x1OTVkNFx1OTVkNVx1OTVkNlx1OTVkN1x1OTVkOFx1OTVkOVx1OTVkYVx1OTVkYlx1OTVkY1x1OTVkZFx1OTVkZVx1OTVkZlx1OTVlMFx1OTVlMVx1OTVlMlx1OTVlM1x1OTVlNFx1OTVlNVx1OTVlNlx1OTVlN1x1OTVlY1x1OTVmZlx1OTYwN1x1OTYxM1x1OTYxOFx1OTYxYlx1OTYx''@;'; put 'put ''ZVx1OTYyMFx1OTYyM1x1OTYyNFx1OTYyNVx1OTYyNlx1OTYyN1x1OTYyOFx1OTYyOVx1OTYyYlx1OTYyY1x1OTYyZFx1OTYyZlx1OTYzMFx1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzZVx1OTY0MVx1OTY0M1x1OTY0YVx1OTY0ZVx1OTY0Zlx1OTY1MVx1OTY1Mlx1OTY1M1x1OTY1Nlx1''@;'; put 'put ''OTY1N1x1ZmZmZFx1OTY1OFx1OTY1OVx1OTY1YVx1OTY1Y1x1OTY1ZFx1OTY1ZVx1OTY2MFx1OTY2M1x1OTY2NVx1OTY2Nlx1OTY2Ylx1OTY2ZFx1OTY2ZVx1OTY2Zlx1OTY3MFx1OTY3MVx1OTY3M1x1OTY3OFx1OTY3OVx1OTY3YVx1OTY3Ylx1OTY3Y1x1OTY3ZFx1OTY3ZVx1OTY3Zlx1OTY4''@;'; put 'put ''MFx1OTY4MVx1OTY4Mlx1OTY4M1x1OTY4NFx1OTY4N1x1OTY4OVx1OTY4YVx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1''@;'; put 'put ''NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3''@;'; put 'put ''N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1''@;'; put 'put ''ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9b''@;'; put 'put ''MjM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNF1bZ11dPTU5OTA0K2cseVs1OTkwNCtnXT1fWzIzNF1bZ10pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1''@;'; put 'put ''OTY5NVx1OTY5Nlx1OTY5YVx1OTY5Ylx1OTY5ZFx1OTY5ZVx1OTY5Zlx1OTZhMFx1OTZhMVx1OTZhMlx1OTZhM1x1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOFx1OTZhOVx1OTZhYVx1OTZhYlx1OTZhY1x1OTZhZFx1OTZhZVx1OTZhZlx1OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZi''@;'; put 'put ''OFx1OTZiYVx1OTZiYlx1OTZiZlx1OTZjMlx1OTZjM1x1OTZjOFx1OTZjYVx1OTZjYlx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNlx1OTZkN1x1OTZkOFx1OTZkOVx1OTZkYVx1OTZkYlx1OTZkY1x1OTZkZFx1OTZkZVx1OTZkZlx1OTZlMVx1OTZlMlx1OTZlM1x1OTZlNFx1OTZlNVx1''@;'; put 'put ''OTZlNlx1OTZlN1x1OTZlYlx1ZmZmZFx1OTZlY1x1OTZlZFx1OTZlZVx1OTZmMFx1OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZmY1x1OTZmZFx1OTZmZlx1OTcwMlx1OTcwM1x1OTcwNVx1OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcx''@;'; put 'put ''NFx1OTcxNVx1OTcxN1x1OTcxOFx1OTcxOVx1OTcxYVx1OTcxYlx1OTcxZFx1OTcxZlx1OTcyMFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1''@;'; put 'put ''NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBk''@;'; put 'put ''Ylx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBkN1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1''@;'; put 'put ''ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNV0ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PV9bMjM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNV1bZ11dPTYwMTYwK2cseVs2MDE2MCtnXT1fWzIzNV1bZ10pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTcyMVx1OTcyMlx1OTcyM1x1''@;'; put 'put ''OTcyNFx1OTcyNVx1OTcyNlx1OTcyN1x1OTcyOFx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyZVx1OTcyZlx1OTczMVx1OTczM1x1OTczNFx1OTczNVx1OTczNlx1OTczN1x1OTczYVx1OTczYlx1OTczY1x1OTczZFx1OTczZlx1OTc0MFx1OTc0MVx1OTc0Mlx1OTc0M1x1OTc0NFx1OTc0NVx1OTc0''@;'; put 'put ''Nlx1OTc0N1x1OTc0OFx1OTc0OVx1OTc0YVx1OTc0Ylx1OTc0Y1x1OTc0ZFx1OTc0ZVx1OTc0Zlx1OTc1MFx1OTc1MVx1OTc1NFx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Y1x1OTc1ZFx1OTc1Zlx1OTc2M1x1OTc2NFx1OTc2Nlx1OTc2N1x1OTc2OFx1OTc2YVx1OTc2Ylx1OTc2Y1x1''@;'; put 'put ''OTc2ZFx1OTc2ZVx1OTc2Zlx1OTc3MFx1OTc3MVx1ZmZmZFx1OTc3Mlx1OTc3NVx1OTc3N1x1OTc3OFx1OTc3OVx1OTc3YVx1OTc3Ylx1OTc3ZFx1OTc3ZVx1OTc3Zlx1OTc4MFx1OTc4MVx1OTc4Mlx1OTc4M1x1OTc4NFx1OTc4Nlx1OTc4N1x1OTc4OFx1OTc4OVx1OTc4YVx1OTc4Y1x1OTc4''@;'; put 'put ''ZVx1OTc4Zlx1OTc5MFx1OTc5M1x1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OVx1OTc5YVx1OTc5Ylx1OTc5Y1x1OTc5ZFx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1''@;'; put 'put ''NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEy''@;'; put 'put ''Zlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFlN1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1''@;'; put 'put ''NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1NWZkMVx1NWZkMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIz''@;'; put 'put ''Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNl1bZ11dPTYwNDE2K2cseVs2MDQxNitnXT1fWzIzNl1bZ10pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1''@;'; put 'put ''OTc5Zlx1OTdhMVx1OTdhMlx1OTdhNFx1OTdhNVx1OTdhNlx1OTdhN1x1OTdhOFx1OTdhOVx1OTdhYVx1OTdhY1x1OTdhZVx1OTdiMFx1OTdiMVx1OTdiM1x1OTdiNVx1OTdiNlx1OTdiN1x1OTdiOFx1OTdiOVx1OTdiYVx1OTdiYlx1OTdiY1x1OTdiZFx1OTdiZVx1OTdiZlx1OTdjMFx1OTdj''@;'; put 'put ''MVx1OTdjMlx1OTdjM1x1OTdjNFx1OTdjNVx1OTdjNlx1OTdjN1x1OTdjOFx1OTdjOVx1OTdjYVx1OTdjYlx1OTdjY1x1OTdjZFx1OTdjZVx1OTdjZlx1OTdkMFx1OTdkMVx1OTdkMlx1OTdkM1x1OTdkNFx1OTdkNVx1OTdkNlx1OTdkN1x1OTdkOFx1OTdkOVx1OTdkYVx1OTdkYlx1OTdkY1x1''@;'; put 'put ''OTdkZFx1OTdkZVx1OTdkZlx1OTdlMFx1OTdlMVx1OTdlMlx1OTdlM1x1ZmZmZFx1OTdlNFx1OTdlNVx1OTdlOFx1OTdlZVx1OTdlZlx1OTdmMFx1OTdmMVx1OTdmMlx1OTdmNFx1OTdmN1x1OTdmOFx1OTdmOVx1OTdmYVx1OTdmYlx1OTdmY1x1OTdmZFx1OTdmZVx1OTdmZlx1OTgwMFx1OTgw''@;'; put 'put ''MVx1OTgwMlx1OTgwM1x1OTgwNFx1OTgwNVx1OTgwNlx1OTgwN1x1OTgwOFx1OTgwOVx1OTgwYVx1OTgwYlx1OTgwY1x1OTgwZFx1OTgwZVx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1''@;'; put 'put ''NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0''@;'; put 'put ''ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1''@;'; put 'put ''NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT1fWzIzN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzN11bZ11dPTYwNjcyK2cseVs2MDY3MitnXT1fWzIzN11bZ10pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OTgwZlx1OTgxMFx1OTgxMVx1OTgxMlx1OTgxM1x1OTgxNFx1OTgxNVx1OTgxNlx1OTgxN1x1OTgxOFx1OTgxOVx1OTgxYVx1OTgxYlx1OTgxY1x1OTgxZFx1OTgxZVx1OTgxZlx1OTgyMFx1OTgyMVx1OTgyMlx1OTgyM1x1OTgyNFx1OTgyNVx1OTgyNlx1OTgyN1x1OTgyOFx1OTgy''@;'; put 'put ''OVx1OTgyYVx1OTgyYlx1OTgyY1x1OTgyZFx1OTgyZVx1OTgyZlx1OTgzMFx1OTgzMVx1OTgzMlx1OTgzM1x1OTgzNFx1OTgzNVx1OTgzNlx1OTgzN1x1OTgzOFx1OTgzOVx1OTgzYVx1OTgzYlx1OTgzY1x1OTgzZFx1OTgzZVx1OTgzZlx1OTg0MFx1OTg0MVx1OTg0Mlx1OTg0M1x1OTg0NFx1''@;'; put 'put ''OTg0NVx1OTg0Nlx1OTg0N1x1OTg0OFx1OTg0OVx1OTg0YVx1OTg0Ylx1OTg0Y1x1OTg0ZFx1ZmZmZFx1OTg0ZVx1OTg0Zlx1OTg1MFx1OTg1MVx1OTg1Mlx1OTg1M1x1OTg1NFx1OTg1NVx1OTg1Nlx1OTg1N1x1OTg1OFx1OTg1OVx1OTg1YVx1OTg1Ylx1OTg1Y1x1OTg1ZFx1OTg1ZVx1OTg1''@;'; put 'put ''Zlx1OTg2MFx1OTg2MVx1OTg2Mlx1OTg2M1x1OTg2NFx1OTg2NVx1OTg2Nlx1OTg2N1x1OTg2OFx1OTg2OVx1OTg2YVx1OTg2Ylx1OTg2Y1x1OTg2ZFx1OTg2ZVx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1''@;'; put 'put ''NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4''@;'; put 'put ''YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNlx1OTRiN1x1OTRiOFx1OTRiOVx1OTRiYVx1OTRiY1x1OTRiZFx1''@;'; put 'put ''OTRiZlx1OTRjNFx1OTRjOFx1OTRjOVx1OTRjYVx1OTRjYlx1OTRjY1x1OTRjZFx1OTRjZVx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYVx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOF1bZ11dPTYwOTI4K2cseVs2MDkyOCtnXT1fWzIzOF1bZ10pO2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg2Zlx1OTg3MFx1OTg3MVx1OTg3Mlx1OTg3M1x1OTg3NFx1OTg4Ylx1OTg4ZVx1OTg5Mlx1OTg5NVx1OTg5OVx1OThhM1x1OThhOFx1OThhOVx1OThhYVx1OThhYlx1OThhY1x1OThhZFx1OThhZVx1OThhZlx1OThiMFx1OThiMVx1OThiMlx1OThiM1x1OThi''@;'; put 'put ''NFx1OThiNVx1OThiNlx1OThiN1x1OThiOFx1OThiOVx1OThiYVx1OThiYlx1OThiY1x1OThiZFx1OThiZVx1OThiZlx1OThjMFx1OThjMVx1OThjMlx1OThjM1x1OThjNFx1OThjNVx1OThjNlx1OThjN1x1OThjOFx1OThjOVx1OThjYVx1OThjYlx1OThjY1x1OThjZFx1OThjZlx1OThkMFx1''@;'; put 'put ''OThkNFx1OThkNlx1OThkN1x1OThkYlx1OThkY1x1OThkZFx1OThlMFx1OThlMVx1OThlMlx1OThlM1x1OThlNFx1ZmZmZFx1OThlNVx1OThlNlx1OThlOVx1OThlYVx1OThlYlx1OThlY1x1OThlZFx1OThlZVx1OThlZlx1OThmMFx1OThmMVx1OThmMlx1OThmM1x1OThmNFx1OThmNVx1OThm''@;'; put 'put ''Nlx1OThmN1x1OThmOFx1OThmOVx1OThmYVx1OThmYlx1OThmY1x1OThmZFx1OThmZVx1OThmZlx1OTkwMFx1OTkwMVx1OTkwMlx1OTkwM1x1OTkwNFx1OTkwNVx1OTkwNlx1OTkwN1x1OTRlOVx1OTRlYlx1OTRlZVx1OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1''@;'; put 'put ''OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMlx1OTUxM1x1OTUxNFx1OTUxNVx1OTUxNlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUz''@;'; put 'put ''Mlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1''@;'; put 'put ''OTU2MVx1OTU2Mlx1OTU2NFx1OTU2NVx1OTU2Nlx1OTU2N1x1OTU2OFx1OTU2OVx1OTU2YVx1OTU2Ylx1OTU2Y1x1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2Ex''@;'; put 'put ''ZVx1N2ExNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOV1bZ11dPTYxMTg0K2cseVs2MTE4NCtnXT1fWzIzOV1bZ10pO2ZvcihfWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTkwOFx1OTkwOVx1OTkwYVx1OTkwYlx1OTkwY1x1OTkwZVx1OTkwZlx1OTkxMVx1OTkxMlx1OTkxM1x1OTkxNFx1OTkxNVx1OTkxNlx1OTkxN1x1OTkxOFx1OTkxOVx1OTkxYVx1OTkxYlx1OTkxY1x1OTkxZFx1OTkxZVx1OTkxZlx1OTky''@;'; put 'put ''MFx1OTkyMVx1OTkyMlx1OTkyM1x1OTkyNFx1OTkyNVx1OTkyNlx1OTkyN1x1OTkyOFx1OTkyOVx1OTkyYVx1OTkyYlx1OTkyY1x1OTkyZFx1OTkyZlx1OTkzMFx1OTkzMVx1OTkzMlx1OTkzM1x1OTkzNFx1OTkzNVx1OTkzNlx1OTkzN1x1OTkzOFx1OTkzOVx1OTkzYVx1OTkzYlx1OTkzY1x1''@;'; put 'put ''OTkzZFx1OTkzZVx1OTkzZlx1OTk0MFx1OTk0MVx1OTk0Mlx1OTk0M1x1OTk0NFx1OTk0NVx1OTk0Nlx1OTk0N1x1OTk0OFx1OTk0OVx1ZmZmZFx1OTk0YVx1OTk0Ylx1OTk0Y1x1OTk0ZFx1OTk0ZVx1OTk0Zlx1OTk1MFx1OTk1MVx1OTk1Mlx1OTk1M1x1OTk1Nlx1OTk1N1x1OTk1OFx1OTk1''@;'; put 'put ''OVx1OTk1YVx1OTk1Ylx1OTk1Y1x1OTk1ZFx1OTk1ZVx1OTk1Zlx1OTk2MFx1OTk2MVx1OTk2Mlx1OTk2NFx1OTk2Nlx1OTk3M1x1OTk3OFx1OTk3OVx1OTk3Ylx1OTk3ZVx1OTk4Mlx1OTk4M1x1OTk4OVx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1''@;'; put 'put ''NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0''@;'; put 'put ''OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1''@;'; put 'put ''NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYy''@;'; put 'put ''NVx1NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MF1bZ11dPTYxNDQwK2cseVs2MTQ0MCtnXT1fWzI0MF1bZ10pO2ZvcihfWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTk4Y1x1OTk4ZVx1OTk5YVx1OTk5Ylx1OTk5Y1x1OTk5ZFx1OTk5ZVx1OTk5Zlx1OTlhMFx1OTlhMVx1OTlhMlx1OTlhM1x1OTlhNFx1OTlhNlx1OTlhN1x1OTlhOVx1OTlhYVx1OTlhYlx1OTlhY1x1OTlhZFx1OTlh''@;'; put 'put ''ZVx1OTlhZlx1OTliMFx1OTliMVx1OTliMlx1OTliM1x1OTliNFx1OTliNVx1OTliNlx1OTliN1x1OTliOFx1OTliOVx1OTliYVx1OTliYlx1OTliY1x1OTliZFx1OTliZVx1OTliZlx1OTljMFx1OTljMVx1OTljMlx1OTljM1x1OTljNFx1OTljNVx1OTljNlx1OTljN1x1OTljOFx1OTljOVx1''@;'; put 'put ''OTljYVx1OTljYlx1OTljY1x1OTljZFx1OTljZVx1OTljZlx1OTlkMFx1OTlkMVx1OTlkMlx1OTlkM1x1OTlkNFx1OTlkNVx1OTlkNlx1OTlkN1x1OTlkOFx1ZmZmZFx1OTlkOVx1OTlkYVx1OTlkYlx1OTlkY1x1OTlkZFx1OTlkZVx1OTlkZlx1OTllMFx1OTllMVx1OTllMlx1OTllM1x1OTll''@;'; put 'put ''NFx1OTllNVx1OTllNlx1OTllN1x1OTllOFx1OTllOVx1OTllYVx1OTllYlx1OTllY1x1OTllZFx1OTllZVx1OTllZlx1OTlmMFx1OTlmMVx1OTlmMlx1OTlmM1x1OTlmNFx1OTlmNVx1OTlmNlx1OTlmN1x1OTlmOFx1OTlmOVx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1''@;'; put 'put ''NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2''@;'; put 'put ''NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1''@;'; put 'put ''ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2''@;'; put 'put ''OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MV1bZ11dPTYxNjk2K2cseVs2MTY5NitnXT1fWzI0MV1bZ10pO2ZvcihfWzI0Ml09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmYVx1OTlmYlx1OTlmY1x1OTlmZFx1OTlmZVx1OTlmZlx1OWEwMFx1OWEwMVx1OWEwMlx1OWEwM1x1OWEwNFx1OWEwNVx1OWEwNlx1OWEwN1x1OWEwOFx1OWEwOVx1OWEwYVx1OWEwYlx1OWEw''@;'; put 'put ''Y1x1OWEwZFx1OWEwZVx1OWEwZlx1OWExMFx1OWExMVx1OWExMlx1OWExM1x1OWExNFx1OWExNVx1OWExNlx1OWExN1x1OWExOFx1OWExOVx1OWExYVx1OWExYlx1OWExY1x1OWExZFx1OWExZVx1OWExZlx1OWEyMFx1OWEyMVx1OWEyMlx1OWEyM1x1OWEyNFx1OWEyNVx1OWEyNlx1OWEyN1x1''@;'; put 'put ''OWEyOFx1OWEyOVx1OWEyYVx1OWEyYlx1OWEyY1x1OWEyZFx1OWEyZVx1OWEyZlx1OWEzMFx1OWEzMVx1OWEzMlx1OWEzM1x1OWEzNFx1OWEzNVx1OWEzNlx1OWEzN1x1OWEzOFx1ZmZmZFx1OWEzOVx1OWEzYVx1OWEzYlx1OWEzY1x1OWEzZFx1OWEzZVx1OWEzZlx1OWE0MFx1OWE0MVx1OWE0''@;'; put 'put ''Mlx1OWE0M1x1OWE0NFx1OWE0NVx1OWE0Nlx1OWE0N1x1OWE0OFx1OWE0OVx1OWE0YVx1OWE0Ylx1OWE0Y1x1OWE0ZFx1OWE0ZVx1OWE0Zlx1OWE1MFx1OWE1MVx1OWE1Mlx1OWE1M1x1OWE1NFx1OWE1NVx1OWE1Nlx1OWE1N1x1OWE1OFx1OWE1OVx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1''@;'; put 'put ''OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZi''@;'; put 'put ''Nlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1''@;'; put 'put ''ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3''@;'; put 'put ''Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Ml1bZ11dPTYxOTUyK2cseVs2MTk1MitnXT1fWzI0Ml1bZ10pO2Zv''@;'; put 'put ''cihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE1YVx1OWE1Ylx1OWE1Y1x1OWE1ZFx1OWE1ZVx1OWE1Zlx1OWE2MFx1OWE2MVx1OWE2Mlx1OWE2M1x1OWE2NFx1OWE2NVx1OWE2Nlx1OWE2N1x1OWE2OFx1OWE2OVx1OWE2''@;'; put 'put ''YVx1OWE2Ylx1OWE3Mlx1OWE4M1x1OWE4OVx1OWE4ZFx1OWE4ZVx1OWE5NFx1OWE5NVx1OWE5OVx1OWFhNlx1OWFhOVx1OWFhYVx1OWFhYlx1OWFhY1x1OWFhZFx1OWFhZVx1OWFhZlx1OWFiMlx1OWFiM1x1OWFiNFx1OWFiNVx1OWFiOVx1OWFiYlx1OWFiZFx1OWFiZVx1OWFiZlx1OWFjM1x1''@;'; put 'put ''OWFjNFx1OWFjNlx1OWFjN1x1OWFjOFx1OWFjOVx1OWFjYVx1OWFjZFx1OWFjZVx1OWFjZlx1OWFkMFx1OWFkMlx1OWFkNFx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkOVx1OWFkYVx1OWFkYlx1OWFkY1x1ZmZmZFx1OWFkZFx1OWFkZVx1OWFlMFx1OWFlMlx1OWFlM1x1OWFlNFx1OWFlNVx1OWFl''@;'; put 'put ''N1x1OWFlOFx1OWFlOVx1OWFlYVx1OWFlY1x1OWFlZVx1OWFmMFx1OWFmMVx1OWFmMlx1OWFmM1x1OWFmNFx1OWFmNVx1OWFmNlx1OWFmN1x1OWFmOFx1OWFmYVx1OWFmY1x1OWFmZFx1OWFmZVx1OWFmZlx1OWIwMFx1OWIwMVx1OWIwMlx1OWIwNFx1OWIwNVx1OWIwNlx1ODdjNlx1ODc4OFx1''@;'; put 'put ''ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2Yz''@;'; put 'put ''Nlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1''@;'; put 'put ''N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2Jk''@;'; put 'put ''YVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0M11bZ11dPTYyMjA4K2cseVs2MjIwOCtnXT1f''@;'; put 'put ''WzI0M11bZ10pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIwN1x1OWIwOVx1OWIwYVx1OWIwYlx1OWIwY1x1OWIwZFx1OWIwZVx1OWIxMFx1OWIxMVx1OWIxMlx1OWIxNFx1OWIxNVx1OWIxNlx1OWIxN1x1OWIx''@;'; put 'put ''OFx1OWIxOVx1OWIxYVx1OWIxYlx1OWIxY1x1OWIxZFx1OWIxZVx1OWIyMFx1OWIyMVx1OWIyMlx1OWIyNFx1OWIyNVx1OWIyNlx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyYlx1OWIyY1x1OWIyZFx1OWIyZVx1OWIzMFx1OWIzMVx1OWIzM1x1OWIzNFx1OWIzNVx1OWIzNlx1OWIzN1x1''@;'; put 'put ''OWIzOFx1OWIzOVx1OWIzYVx1OWIzZFx1OWIzZVx1OWIzZlx1OWI0MFx1OWI0Nlx1OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1OWI1M1x1OWI1NVx1OWI1Nlx1OWI1N1x1OWI1OFx1OWI1OVx1OWI1YVx1ZmZmZFx1OWI1Ylx1OWI1Y1x1OWI1ZFx1OWI1ZVx1OWI1Zlx1OWI2''@;'; put 'put ''MFx1OWI2MVx1OWI2Mlx1OWI2M1x1OWI2NFx1OWI2NVx1OWI2Nlx1OWI2N1x1OWI2OFx1OWI2OVx1OWI2YVx1OWI2Ylx1OWI2Y1x1OWI2ZFx1OWI2ZVx1OWI2Zlx1OWI3MFx1OWI3MVx1OWI3Mlx1OWI3M1x1OWI3NFx1OWI3NVx1OWI3Nlx1OWI3N1x1OWI3OFx1OWI3OVx1OWI3YVx1OWI3Ylx1''@;'; put 'put ''N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0''@;'; put 'put ''Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1''@;'; put 'put ''N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5''@;'; put 'put ''NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NF1bZ11dPTYyNDY0K2cs''@;'; put 'put ''eVs2MjQ2NCtnXT1fWzI0NF1bZ10pO2ZvcihfWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWI3Y1x1OWI3ZFx1OWI3ZVx1OWI3Zlx1OWI4MFx1OWI4MVx1OWI4Mlx1OWI4M1x1OWI4NFx1OWI4NVx1OWI4Nlx1OWI4N1x1OWI4''@;'; put 'put ''OFx1OWI4OVx1OWI4YVx1OWI4Ylx1OWI4Y1x1OWI4ZFx1OWI4ZVx1OWI4Zlx1OWI5MFx1OWI5MVx1OWI5Mlx1OWI5M1x1OWI5NFx1OWI5NVx1OWI5Nlx1OWI5N1x1OWI5OFx1OWI5OVx1OWI5YVx1OWI5Ylx1OWI5Y1x1OWI5ZFx1OWI5ZVx1OWI5Zlx1OWJhMFx1OWJhMVx1OWJhMlx1OWJhM1x1''@;'; put 'put ''OWJhNFx1OWJhNVx1OWJhNlx1OWJhN1x1OWJhOFx1OWJhOVx1OWJhYVx1OWJhYlx1OWJhY1x1OWJhZFx1OWJhZVx1OWJhZlx1OWJiMFx1OWJiMVx1OWJiMlx1OWJiM1x1OWJiNFx1OWJiNVx1OWJiNlx1OWJiN1x1OWJiOFx1OWJiOVx1OWJiYVx1ZmZmZFx1OWJiYlx1OWJiY1x1OWJiZFx1OWJi''@;'; put 'put ''ZVx1OWJiZlx1OWJjMFx1OWJjMVx1OWJjMlx1OWJjM1x1OWJjNFx1OWJjNVx1OWJjNlx1OWJjN1x1OWJjOFx1OWJjOVx1OWJjYVx1OWJjYlx1OWJjY1x1OWJjZFx1OWJjZVx1OWJjZlx1OWJkMFx1OWJkMVx1OWJkMlx1OWJkM1x1OWJkNFx1OWJkNVx1OWJkNlx1OWJkN1x1OWJkOFx1OWJkOVx1''@;'; put 'put ''OWJkYVx1OWJkYlx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3''@;'; put 'put ''ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRmN1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1''@;'; put 'put ''OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5''@;'; put 'put ''MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NV1b''@;'; put 'put ''Z11dPTYyNzIwK2cseVs2MjcyMCtnXT1fWzI0NV1bZ10pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWJkY1x1OWJkZFx1OWJkZVx1OWJkZlx1OWJlMFx1OWJlMVx1OWJlMlx1OWJlM1x1OWJlNFx1OWJlNVx1OWJl''@;'; put 'put ''Nlx1OWJlN1x1OWJlOFx1OWJlOVx1OWJlYVx1OWJlYlx1OWJlY1x1OWJlZFx1OWJlZVx1OWJlZlx1OWJmMFx1OWJmMVx1OWJmMlx1OWJmM1x1OWJmNFx1OWJmNVx1OWJmNlx1OWJmN1x1OWJmOFx1OWJmOVx1OWJmYVx1OWJmYlx1OWJmY1x1OWJmZFx1OWJmZVx1OWJmZlx1OWMwMFx1OWMwMVx1''@;'; put 'put ''OWMwMlx1OWMwM1x1OWMwNFx1OWMwNVx1OWMwNlx1OWMwN1x1OWMwOFx1OWMwOVx1OWMwYVx1OWMwYlx1OWMwY1x1OWMwZFx1OWMwZVx1OWMwZlx1OWMxMFx1OWMxMVx1OWMxMlx1OWMxM1x1OWMxNFx1OWMxNVx1OWMxNlx1OWMxN1x1OWMxOFx1OWMxOVx1OWMxYVx1ZmZmZFx1OWMxYlx1OWMx''@;'; put 'put ''Y1x1OWMxZFx1OWMxZVx1OWMxZlx1OWMyMFx1OWMyMVx1OWMyMlx1OWMyM1x1OWMyNFx1OWMyNVx1OWMyNlx1OWMyN1x1OWMyOFx1OWMyOVx1OWMyYVx1OWMyYlx1OWMyY1x1OWMyZFx1OWMyZVx1OWMyZlx1OWMzMFx1OWMzMVx1OWMzMlx1OWMzM1x1OWMzNFx1OWMzNVx1OWMzNlx1OWMzN1x1''@;'; put 'put ''OWMzOFx1OWMzOVx1OWMzYVx1OWMzYlx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4''@;'; put 'put ''OFx1OWY4OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1''@;'; put 'put ''OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNi''@;'; put 'put ''Mlx1OWNiM1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNiN1x1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ2XVtnXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzI0Nl1bZ11dPTYyOTc2K2cseVs2Mjk3NitnXT1fWzI0Nl1bZ10pO2ZvcihfWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWMzY1x1OWMzZFx1OWMzZVx1OWMzZlx1OWM0MFx1OWM0MVx1OWM0Mlx1OWM0M1x1OWM0''@;'; put 'put ''NFx1OWM0NVx1OWM0Nlx1OWM0N1x1OWM0OFx1OWM0OVx1OWM0YVx1OWM0Ylx1OWM0Y1x1OWM0ZFx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1MVx1OWM1Mlx1OWM1M1x1OWM1NFx1OWM1NVx1OWM1Nlx1OWM1N1x1OWM1OFx1OWM1OVx1OWM1YVx1OWM1Ylx1OWM1Y1x1OWM1ZFx1OWM1ZVx1OWM1Zlx1''@;'; put 'put ''OWM2MFx1OWM2MVx1OWM2Mlx1OWM2M1x1OWM2NFx1OWM2NVx1OWM2Nlx1OWM2N1x1OWM2OFx1OWM2OVx1OWM2YVx1OWM2Ylx1OWM2Y1x1OWM2ZFx1OWM2ZVx1OWM2Zlx1OWM3MFx1OWM3MVx1OWM3Mlx1OWM3M1x1OWM3NFx1OWM3NVx1OWM3Nlx1OWM3N1x1OWM3OFx1OWM3OVx1OWM3YVx1ZmZm''@;'; put 'put ''ZFx1OWM3Ylx1OWM3ZFx1OWM3ZVx1OWM4MFx1OWM4M1x1OWM4NFx1OWM4OVx1OWM4YVx1OWM4Y1x1OWM4Zlx1OWM5M1x1OWM5Nlx1OWM5N1x1OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1OWNhY1x1OWNhZlx1OWNiOVx1OWNiZVx1OWNiZlx1OWNjMFx1OWNjMVx1OWNjMlx1OWNjOFx1OWNjOVx1''@;'; put 'put ''OWNkMVx1OWNkMlx1OWNkYVx1OWNkYlx1OWNlMFx1OWNlMVx1OWNjY1x1OWNjZFx1OWNjZVx1OWNjZlx1OWNkMFx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdh''@;'; put 'put ''Ylx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1''@;'; put 'put ''OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVk''@;'; put 'put ''Y1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ3XVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzI0N11bZ11dPTYzMjMyK2cseVs2MzIzMitnXT1fWzI0N11bZ10pO2ZvcihfWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWNlM1x1OWNlNFx1OWNlNVx1OWNlNlx1OWNlN1x1OWNlOFx1OWNl''@;'; put 'put ''OVx1OWNlYVx1OWNlYlx1OWNlY1x1OWNlZFx1OWNlZVx1OWNlZlx1OWNmMFx1OWNmMVx1OWNmMlx1OWNmM1x1OWNmNFx1OWNmNVx1OWNmNlx1OWNmN1x1OWNmOFx1OWNmOVx1OWNmYVx1OWNmYlx1OWNmY1x1OWNmZFx1OWNmZVx1OWNmZlx1OWQwMFx1OWQwMVx1OWQwMlx1OWQwM1x1OWQwNFx1''@;'; put 'put ''OWQwNVx1OWQwNlx1OWQwN1x1OWQwOFx1OWQwOVx1OWQwYVx1OWQwYlx1OWQwY1x1OWQwZFx1OWQwZVx1OWQwZlx1OWQxMFx1OWQxMVx1OWQxMlx1OWQxM1x1OWQxNFx1OWQxNVx1OWQxNlx1OWQxN1x1OWQxOFx1OWQxOVx1OWQxYVx1OWQxYlx1OWQxY1x1OWQxZFx1OWQxZVx1OWQxZlx1OWQy''@;'; put 'put ''MFx1OWQyMVx1ZmZmZFx1OWQyMlx1OWQyM1x1OWQyNFx1OWQyNVx1OWQyNlx1OWQyN1x1OWQyOFx1OWQyOVx1OWQyYVx1OWQyYlx1OWQyY1x1OWQyZFx1OWQyZVx1OWQyZlx1OWQzMFx1OWQzMVx1OWQzMlx1OWQzM1x1OWQzNFx1OWQzNVx1OWQzNlx1OWQzN1x1OWQzOFx1OWQzOVx1OWQzYVx1''@;'; put 'put ''OWQzYlx1OWQzY1x1OWQzZFx1OWQzZVx1OWQzZlx1OWQ0MFx1OWQ0MVx1OWQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0OF0ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PV9bMjQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OF1bZ11dPTYzNDg4K2cseVs2MzQ4OCtnXT1fWzI0OF1bZ10pO2ZvcihfWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0M1x1OWQ0NFx1OWQ0NVx1OWQ0Nlx1OWQ0''@;'; put 'put ''N1x1OWQ0OFx1OWQ0OVx1OWQ0YVx1OWQ0Ylx1OWQ0Y1x1OWQ0ZFx1OWQ0ZVx1OWQ0Zlx1OWQ1MFx1OWQ1MVx1OWQ1Mlx1OWQ1M1x1OWQ1NFx1OWQ1NVx1OWQ1Nlx1OWQ1N1x1OWQ1OFx1OWQ1OVx1OWQ1YVx1OWQ1Ylx1OWQ1Y1x1OWQ1ZFx1OWQ1ZVx1OWQ1Zlx1OWQ2MFx1OWQ2MVx1OWQ2Mlx1''@;'; put 'put ''OWQ2M1x1OWQ2NFx1OWQ2NVx1OWQ2Nlx1OWQ2N1x1OWQ2OFx1OWQ2OVx1OWQ2YVx1OWQ2Ylx1OWQ2Y1x1OWQ2ZFx1OWQ2ZVx1OWQ2Zlx1OWQ3MFx1OWQ3MVx1OWQ3Mlx1OWQ3M1x1OWQ3NFx1OWQ3NVx1OWQ3Nlx1OWQ3N1x1OWQ3OFx1OWQ3OVx1OWQ3YVx1OWQ3Ylx1OWQ3Y1x1OWQ3ZFx1OWQ3''@;'; put 'put ''ZVx1OWQ3Zlx1OWQ4MFx1OWQ4MVx1ZmZmZFx1OWQ4Mlx1OWQ4M1x1OWQ4NFx1OWQ4NVx1OWQ4Nlx1OWQ4N1x1OWQ4OFx1OWQ4OVx1OWQ4YVx1OWQ4Ylx1OWQ4Y1x1OWQ4ZFx1OWQ4ZVx1OWQ4Zlx1OWQ5MFx1OWQ5MVx1OWQ5Mlx1OWQ5M1x1OWQ5NFx1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1''@;'; put 'put ''OWQ5OVx1OWQ5YVx1OWQ5Ylx1OWQ5Y1x1OWQ5ZFx1OWQ5ZVx1OWQ5Zlx1OWRhMFx1OWRhMVx1OWRhMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0OV0ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PV9bMjQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OV1bZ11dPTYzNzQ0K2cseVs2Mzc0NCtnXT1fWzI0OV1bZ10pO2ZvcihfWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhM1x1OWRhNFx1OWRh''@;'; put 'put ''NVx1OWRhNlx1OWRhN1x1OWRhOFx1OWRhOVx1OWRhYVx1OWRhYlx1OWRhY1x1OWRhZFx1OWRhZVx1OWRhZlx1OWRiMFx1OWRiMVx1OWRiMlx1OWRiM1x1OWRiNFx1OWRiNVx1OWRiNlx1OWRiN1x1OWRiOFx1OWRiOVx1OWRiYVx1OWRiYlx1OWRiY1x1OWRiZFx1OWRiZVx1OWRiZlx1OWRjMFx1''@;'; put 'put ''OWRjMVx1OWRjMlx1OWRjM1x1OWRjNFx1OWRjNVx1OWRjNlx1OWRjN1x1OWRjOFx1OWRjOVx1OWRjYVx1OWRjYlx1OWRjY1x1OWRjZFx1OWRjZVx1OWRjZlx1OWRkMFx1OWRkMVx1OWRkMlx1OWRkM1x1OWRkNFx1OWRkNVx1OWRkNlx1OWRkN1x1OWRkOFx1OWRkOVx1OWRkYVx1OWRkYlx1OWRk''@;'; put 'put ''Y1x1OWRkZFx1OWRkZVx1OWRkZlx1OWRlMFx1OWRlMVx1ZmZmZFx1OWRlMlx1OWRlM1x1OWRlNFx1OWRlNVx1OWRlNlx1OWRlN1x1OWRlOFx1OWRlOVx1OWRlYVx1OWRlYlx1OWRlY1x1OWRlZFx1OWRlZVx1OWRlZlx1OWRmMFx1OWRmMVx1OWRmMlx1OWRmM1x1OWRmNFx1OWRmNVx1OWRmNlx1''@;'; put 'put ''OWRmN1x1OWRmOFx1OWRmOVx1OWRmYVx1OWRmYlx1OWRmY1x1OWRmZFx1OWRmZVx1OWRmZlx1OWUwMFx1OWUwMVx1OWUwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzI1MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MF1bZ11dPTY0ZTMrZyx5WzY0ZTMrZ109X1syNTBdW2ddKTtmb3IoX1syNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTllMDNc''@;'; put 'put ''dTllMDRcdTllMDVcdTllMDZcdTllMDdcdTllMDhcdTllMDlcdTllMGFcdTllMGJcdTllMGNcdTllMGRcdTllMGVcdTllMGZcdTllMTBcdTllMTFcdTllMTJcdTllMTNcdTllMTRcdTllMTVcdTllMTZcdTllMTdcdTllMThcdTllMTlcdTllMWFcdTllMWJcdTllMWNcdTllMWRcdTllMWVcdTll''@;'; put 'put ''MjRcdTllMjdcdTllMmVcdTllMzBcdTllMzRcdTllM2JcdTllM2NcdTllNDBcdTllNGRcdTllNTBcdTllNTJcdTllNTNcdTllNTRcdTllNTZcdTllNTlcdTllNWRcdTllNWZcdTllNjBcdTllNjFcdTllNjJcdTllNjVcdTllNmVcdTllNmZcdTllNzJcdTllNzRcdTllNzVcdTllNzZcdTllNzdc''@;'; put 'put ''dTllNzhcdTllNzlcdTllN2FcdTllN2JcdTllN2NcdTllN2RcdTllODBcdWZmZmRcdTllODFcdTllODNcdTllODRcdTllODVcdTllODZcdTllODlcdTllOGFcdTllOGNcdTllOGRcdTllOGVcdTllOGZcdTllOTBcdTllOTFcdTllOTRcdTllOTVcdTllOTZcdTllOTdcdTllOThcdTllOTlcdTll''@;'; put 'put ''OWFcdTllOWJcdTllOWNcdTllOWVcdTllYTBcdTllYTFcdTllYTJcdTllYTNcdTllYTRcdTllYTVcdTllYTdcdTllYThcdTllYTlcdTllYWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1syNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTFdW2ddXT02NDI1NitnLHlbNjQyNTYrZ109X1syNTFdW2ddKTtmb3IoX1syNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTllYWJcdTllYWNcdTllYWRcdTllYWVcdTllYWZcdTllYjBcdTllYjFcdTllYjJcdTllYjNcdTllYjVcdTllYjZcdTllYjdcdTllYjlcdTllYmFcdTllYmNcdTllYmZcdTllYzBcdTllYzFcdTllYzJcdTllYzNcdTllYzVcdTllYzZcdTllYzdcdTllYzhcdTllY2FcdTllY2JcdTll''@;'; put 'put ''Y2NcdTllZDBcdTllZDJcdTllZDNcdTllZDVcdTllZDZcdTllZDdcdTllZDlcdTllZGFcdTllZGVcdTllZTFcdTllZTNcdTllZTRcdTllZTZcdTllZThcdTllZWJcdTllZWNcdTllZWRcdTllZWVcdTllZjBcdTllZjFcdTllZjJcdTllZjNcdTllZjRcdTllZjVcdTllZjZcdTllZjdcdTllZjhc''@;'; put 'put ''dTllZmFcdTllZmRcdTllZmZcdTlmMDBcdTlmMDFcdTlmMDJcdTlmMDNcdTlmMDRcdTlmMDVcdWZmZmRcdTlmMDZcdTlmMDdcdTlmMDhcdTlmMDlcdTlmMGFcdTlmMGNcdTlmMGZcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTVcdTlmMTZcdTlmMThcdTlmMWFcdTlmMWJcdTlmMWNcdTlmMWRcdTlm''@;'; put 'put ''MWVcdTlmMWZcdTlmMjFcdTlmMjNcdTlmMjRcdTlmMjVcdTlmMjZcdTlmMjdcdTlmMjhcdTlmMjlcdTlmMmFcdTlmMmJcdTlmMmRcdTlmMmVcdTlmMzBcdTlmMzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTJdW2ddXT02NDUxMitnLHlbNjQ1MTIrZ109X1syNTJdW2ddKTtmb3IoX1syNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTlmMzJcdTlmMzNcdTlmMzRcdTlmMzVcdTlmMzZcdTlmMzhcdTlmM2FcdTlmM2NcdTlmM2ZcdTlmNDBcdTlmNDFcdTlmNDJcdTlmNDNcdTlmNDVcdTlmNDZcdTlmNDdcdTlmNDhcdTlmNDlcdTlmNGFcdTlmNGJcdTlmNGNcdTlmNGRcdTlmNGVcdTlmNGZcdTlm''@;'; put 'put ''NTJcdTlmNTNcdTlmNTRcdTlmNTVcdTlmNTZcdTlmNTdcdTlmNThcdTlmNTlcdTlmNWFcdTlmNWJcdTlmNWNcdTlmNWRcdTlmNWVcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjJcdTlmNjNcdTlmNjRcdTlmNjVcdTlmNjZcdTlmNjdcdTlmNjhcdTlmNjlcdTlmNmFcdTlmNmJcdTlmNmNcdTlmNmRc''@;'; put 'put ''dTlmNmVcdTlmNmZcdTlmNzBcdTlmNzFcdTlmNzJcdTlmNzNcdTlmNzRcdTlmNzVcdTlmNzZcdTlmNzdcdTlmNzhcdWZmZmRcdTlmNzlcdTlmN2FcdTlmN2JcdTlmN2NcdTlmN2RcdTlmN2VcdTlmODFcdTlmODJcdTlmOGRcdTlmOGVcdTlmOGZcdTlmOTBcdTlmOTFcdTlmOTJcdTlmOTNcdTlm''@;'; put 'put ''OTRcdTlmOTVcdTlmOTZcdTlmOTdcdTlmOThcdTlmOWNcdTlmOWRcdTlmOWVcdTlmYTFcdTlmYTJcdTlmYTNcdTlmYTRcdTlmYTVcdWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdcdWY5ZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTNdW2ddXT02NDc2OCtnLHlbNjQ3NjgrZ109X1syNTNdW2ddKTtmb3IoX1syNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZhMGNcdWZhMGRcdWZhMGVcdWZhMGZcdWZhMTFcdWZhMTNcdWZhMTRcdWZhMThcdWZhMWZcdWZhMjBcdWZhMjFcdWZhMjNcdWZhMjRcdWZhMjdcdWZhMjhcdWZhMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTRdW2ddXT02NTAyNCtnLHlbNjUwMjQrZ109X1syNTRdW2ddKTtyZXR1cm57ZW5jOkksZGVjOnl9fSgpLFhb''@;'; put 'put ''OTQ5XT1mdW5jdGlvbigpe3ZhciBnLHk9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwi''@;'; put 'put ''IyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMF1bZ11dPTArZyx5WzArZ109X1swXVtnXSk7Zm9yKF9bMTI5XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzAyXHVhYzAzXHVhYzA1XHVhYzA2XHVhYzBiXHVhYzBjXHVhYzBkXHVhYzBlXHVhYzBmXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVhYzIyXHVhYzIzXHVhYzI1XHVhYzI2XHVhYzI3XHVhYzI4XHVhYzI5''@;'; put 'put ''XHVhYzJhXHVhYzJiXHVhYzJlXHVhYzMyXHVhYzMzXHVhYzM0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzM1XHVhYzM2XHVhYzM3XHVhYzNhXHVhYzNiXHVhYzNkXHVhYzNlXHVhYzNmXHVhYzQxXHVhYzQyXHVhYzQzXHVhYzQ0XHVhYzQ1XHVhYzQ2XHVhYzQ3XHVh''@;'; put 'put ''YzQ4XHVhYzQ5XHVhYzRhXHVhYzRjXHVhYzRlXHVhYzRmXHVhYzUwXHVhYzUxXHVhYzUyXHVhYzUzXHVhYzU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVhYzViXHVhYzVkXHVhYzVlXHVhYzVmXHVhYzYwXHVhYzYxXHVhYzYy''@;'; put 'put ''XHVhYzYzXHVhYzY0XHVhYzY1XHVhYzY2XHVhYzY3XHVhYzY4XHVhYzY5XHVhYzZhXHVhYzZiXHVhYzZjXHVhYzZkXHVhYzZlXHVhYzZmXHVhYzcyXHVhYzczXHVhYzc1XHVhYzc2XHVhYzc5XHVhYzdiXHVhYzdjXHVhYzdkXHVhYzdlXHVhYzdmXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhkXHVh''@;'; put 'put ''YzhlXHVhYzhmXHVhYzkxXHVhYzkyXHVhYzkzXHVhYzk1XHVhYzk2XHVhYzk3XHVhYzk4XHVhYzk5XHVhYzlhXHVhYzliXHVhYzllXHVhY2EyXHVhY2EzXHVhY2E0XHVhY2E1XHVhY2E2XHVhY2E3XHVhY2FiXHVhY2FkXHVhY2FlXHVhY2IxXHVhY2IyXHVhY2IzXHVhY2I0XHVhY2I1XHVhY2I2''@;'; put 'put ''XHVhY2I3XHVhY2JhXHVhY2JlXHVhY2JmXHVhY2MwXHVhY2MyXHVhY2MzXHVhY2M1XHVhY2M2XHVhY2M3XHVhY2M5XHVhY2NhXHVhY2NiXHVhY2NkXHVhY2NlXHVhY2NmXHVhY2QwXHVhY2QxXHVhY2QyXHVhY2QzXHVhY2Q0XHVhY2Q2XHVhY2Q4XHVhY2Q5XHVhY2RhXHVhY2RiXHVhY2RjXHVh''@;'; put 'put ''Y2RkXHVhY2RlXHVhY2RmXHVhY2UyXHVhY2UzXHVhY2U1XHVhY2U2XHVhY2U5XHVhY2ViXHVhY2VkXHVhY2VlXHVhY2YyXHVhY2Y0XHVhY2Y3XHVhY2Y4XHVhY2Y5XHVhY2ZhXHVhY2ZiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVhZDAyXHVhZDAzXHVhZDA1XHVhZDA3XHVhZDA4XHVhZDA5XHVhZDBh''@;'; put 'put ''XHVhZDBiXHVhZDBlXHVhZDEwXHVhZDEyXHVhZDEzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTI5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTI5XVtnXV09MzMwMjQrZyx5WzMzMDI0K2ddPV9bMTI5XVtnXSk7Zm9yKF9bMTMwXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDE0XHVhZDE1XHVhZDE2XHVhZDE3XHVhZDE5XHVhZDFhXHVhZDFiXHVhZDFkXHVhZDFlXHVhZDFmXHVhZDIxXHVhZDIyXHVhZDIzXHVhZDI0XHVhZDI1XHVhZDI2XHVhZDI3XHVhZDI4''@;'; put 'put ''XHVhZDJhXHVhZDJiXHVhZDJlXHVhZDJmXHVhZDMwXHVhZDMxXHVhZDMyXHVhZDMzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDM2XHVhZDM3XHVhZDM5XHVhZDNhXHVhZDNiXHVhZDNkXHVhZDNlXHVhZDNmXHVhZDQwXHVhZDQxXHVhZDQyXHVhZDQzXHVhZDQ2XHVh''@;'; put 'put ''ZDQ4XHVhZDRhXHVhZDRiXHVhZDRjXHVhZDRkXHVhZDRlXHVhZDRmXHVhZDUxXHVhZDUyXHVhZDUzXHVhZDU1XHVhZDU2XHVhZDU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDU5XHVhZDVhXHVhZDViXHVhZDVjXHVhZDVkXHVhZDVlXHVhZDVmXHVhZDYwXHVhZDYy''@;'; put 'put ''XHVhZDY0XHVhZDY1XHVhZDY2XHVhZDY3XHVhZDY4XHVhZDY5XHVhZDZhXHVhZDZiXHVhZDZlXHVhZDZmXHVhZDcxXHVhZDcyXHVhZDc3XHVhZDc4XHVhZDc5XHVhZDdhXHVhZDdlXHVhZDgwXHVhZDgzXHVhZDg0XHVhZDg1XHVhZDg2XHVhZDg3XHVhZDhhXHVhZDhiXHVhZDhkXHVhZDhlXHVh''@;'; put 'put ''ZDhmXHVhZDkxXHVhZDkyXHVhZDkzXHVhZDk0XHVhZDk1XHVhZDk2XHVhZDk3XHVhZDk4XHVhZDk5XHVhZDlhXHVhZDliXHVhZDllXHVhZDlmXHVhZGEwXHVhZGExXHVhZGEyXHVhZGEzXHVhZGE1XHVhZGE2XHVhZGE3XHVhZGE4XHVhZGE5XHVhZGFhXHVhZGFiXHVhZGFjXHVhZGFkXHVhZGFl''@;'; put 'put ''XHVhZGFmXHVhZGIwXHVhZGIxXHVhZGIyXHVhZGIzXHVhZGI0XHVhZGI1XHVhZGI2XHVhZGI4XHVhZGI5XHVhZGJhXHVhZGJiXHVhZGJjXHVhZGJkXHVhZGJlXHVhZGJmXHVhZGMyXHVhZGMzXHVhZGM1XHVhZGM2XHVhZGM3XHVhZGM5XHVhZGNhXHVhZGNiXHVhZGNjXHVhZGNkXHVhZGNlXHVh''@;'; put 'put ''ZGNmXHVhZGQyXHVhZGQ0XHVhZGQ1XHVhZGQ2XHVhZGQ3XHVhZGQ4XHVhZGQ5XHVhZGRhXHVhZGRiXHVhZGRkXHVhZGRlXHVhZGRmXHVhZGUxXHVhZGUyXHVhZGUzXHVhZGU1XHVhZGU2XHVhZGU3XHVhZGU4XHVhZGU5XHVhZGVhXHVhZGViXHVhZGVjXHVhZGVkXHVhZGVlXHVhZGVmXHVhZGYw''@;'; put 'put ''XHVhZGYxXHVhZGYyXHVhZGYzXHVhZGY0XHVhZGY1XHVhZGY2XHVhZGY3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMwXVtnXV09MzMyODArZyx5WzMzMjgwK2ddPV9bMTMwXVtnXSk7Zm9y''@;'; put 'put ''KF9bMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZGZhXHVhZGZiXHVhZGZkXHVhZGZlXHVhZTAyXHVhZTAzXHVhZTA0XHVhZTA1XHVhZTA2XHVhZTA3XHVhZTBhXHVhZTBjXHVhZTBlXHVhZTBmXHVhZTEwXHVhZTEx''@;'; put 'put ''XHVhZTEyXHVhZTEzXHVhZTE1XHVhZTE2XHVhZTE3XHVhZTE4XHVhZTE5XHVhZTFhXHVhZTFiXHVhZTFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTFkXHVhZTFlXHVhZTFmXHVhZTIwXHVhZTIxXHVhZTIyXHVhZTIzXHVhZTI0XHVhZTI1XHVhZTI2XHVhZTI3XHVh''@;'; put 'put ''ZTI4XHVhZTI5XHVhZTJhXHVhZTJiXHVhZTJjXHVhZTJkXHVhZTJlXHVhZTJmXHVhZTMyXHVhZTMzXHVhZTM1XHVhZTM2XHVhZTM5XHVhZTNiXHVhZTNjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTNkXHVhZTNlXHVhZTNmXHVhZTQyXHVhZTQ0XHVhZTQ3XHVhZTQ4''@;'; put 'put ''XHVhZTQ5XHVhZTRiXHVhZTRmXHVhZTUxXHVhZTUyXHVhZTUzXHVhZTU1XHVhZTU3XHVhZTU4XHVhZTU5XHVhZTVhXHVhZTViXHVhZTVlXHVhZTYyXHVhZTYzXHVhZTY0XHVhZTY2XHVhZTY3XHVhZTZhXHVhZTZiXHVhZTZkXHVhZTZlXHVhZTZmXHVhZTcxXHVhZTcyXHVhZTczXHVhZTc0XHVh''@;'; put 'put ''ZTc1XHVhZTc2XHVhZTc3XHVhZTdhXHVhZTdlXHVhZTdmXHVhZTgwXHVhZTgxXHVhZTgyXHVhZTgzXHVhZTg2XHVhZTg3XHVhZTg4XHVhZTg5XHVhZThhXHVhZThiXHVhZThkXHVhZThlXHVhZThmXHVhZTkwXHVhZTkxXHVhZTkyXHVhZTkzXHVhZTk0XHVhZTk1XHVhZTk2XHVhZTk3XHVhZTk4''@;'; put 'put ''XHVhZTk5XHVhZTlhXHVhZTliXHVhZTljXHVhZTlkXHVhZTllXHVhZTlmXHVhZWEwXHVhZWExXHVhZWEyXHVhZWEzXHVhZWE0XHVhZWE1XHVhZWE2XHVhZWE3XHVhZWE4XHVhZWE5XHVhZWFhXHVhZWFiXHVhZWFjXHVhZWFkXHVhZWFlXHVhZWFmXHVhZWIwXHVhZWIxXHVhZWIyXHVhZWIzXHVh''@;'; put 'put ''ZWI0XHVhZWI1XHVhZWI2XHVhZWI3XHVhZWI4XHVhZWI5XHVhZWJhXHVhZWJiXHVhZWJmXHVhZWMxXHVhZWMyXHVhZWMzXHVhZWM1XHVhZWM2XHVhZWM3XHVhZWM4XHVhZWM5XHVhZWNhXHVhZWNiXHVhZWNlXHVhZWQyXHVhZWQzXHVhZWQ0XHVhZWQ1XHVhZWQ2XHVhZWQ3XHVhZWRhXHVhZWRi''@;'; put 'put ''XHVhZWRkXHVhZWRlXHVhZWRmXHVhZWUwXHVhZWUxXHVhZWUyXHVhZWUzXHVhZWU0XHVhZWU1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMxXVtnXV09MzM1MzYrZyx5WzMzNTM2K2ddPV9b''@;'; put 'put ''MTMxXVtnXSk7Zm9yKF9bMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZWU2XHVhZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlXHVhZWVmXHVhZWYwXHVhZWYxXHVhZWYyXHVhZWYzXHVhZWY1XHVhZWY2XHVhZWY3''@;'; put 'put ''XHVhZWY5XHVhZWZhXHVhZWZiXHVhZWZkXHVhZWZlXHVhZWZmXHVhZjAwXHVhZjAxXHVhZjAyXHVhZjAzXHVhZjA0XHVhZjA1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjA2XHVhZjA5XHVhZjBhXHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExXHVhZjEyXHVh''@;'; put 'put ''ZjEzXHVhZjE0XHVhZjE1XHVhZjE2XHVhZjE3XHVhZjE4XHVhZjE5XHVhZjFhXHVhZjFiXHVhZjFjXHVhZjFkXHVhZjFlXHVhZjFmXHVhZjIwXHVhZjIxXHVhZjIyXHVhZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjI0XHVhZjI1XHVhZjI2XHVhZjI3XHVhZjI4''@;'; put 'put ''XHVhZjI5XHVhZjJhXHVhZjJiXHVhZjJlXHVhZjJmXHVhZjMxXHVhZjMzXHVhZjM1XHVhZjM2XHVhZjM3XHVhZjM4XHVhZjM5XHVhZjNhXHVhZjNiXHVhZjNlXHVhZjQwXHVhZjQ0XHVhZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRhXHVhZjRiXHVhZjRjXHVhZjRkXHVhZjRlXHVhZjRmXHVhZjUxXHVh''@;'; put 'put ''ZjUyXHVhZjUzXHVhZjU0XHVhZjU1XHVhZjU2XHVhZjU3XHVhZjU4XHVhZjU5XHVhZjVhXHVhZjViXHVhZjVlXHVhZjVmXHVhZjYwXHVhZjYxXHVhZjYyXHVhZjYzXHVhZjY2XHVhZjY3XHVhZjY4XHVhZjY5XHVhZjZhXHVhZjZiXHVhZjZjXHVhZjZkXHVhZjZlXHVhZjZmXHVhZjcwXHVhZjcx''@;'; put 'put ''XHVhZjcyXHVhZjczXHVhZjc0XHVhZjc1XHVhZjc2XHVhZjc3XHVhZjc4XHVhZjdhXHVhZjdiXHVhZjdjXHVhZjdkXHVhZjdlXHVhZjdmXHVhZjgxXHVhZjgyXHVhZjgzXHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5XHVhZjhhXHVhZjhiXHVhZjhjXHVhZjhkXHVhZjhlXHVhZjhmXHVhZjkyXHVh''@;'; put 'put ''ZjkzXHVhZjk0XHVhZjk2XHVhZjk3XHVhZjk4XHVhZjk5XHVhZjlhXHVhZjliXHVhZjlkXHVhZjllXHVhZjlmXHVhZmEwXHVhZmExXHVhZmEyXHVhZmEzXHVhZmE0XHVhZmE1XHVhZmE2XHVhZmE3XHVhZmE4XHVhZmE5XHVhZmFhXHVhZmFiXHVhZmFjXHVhZmFkXHVhZmFlXHVhZmFmXHVhZmIw''@;'; put 'put ''XHVhZmIxXHVhZmIyXHVhZmIzXHVhZmI0XHVhZmI1XHVhZmI2XHVhZmI3XHVhZmJhXHVhZmJiXHVhZmJkXHVhZmJlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMyXVtnXV09MzM3OTIrZyx5''@;'; put 'put ''WzMzNzkyK2ddPV9bMTMyXVtnXSk7Zm9yKF9bMTMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZmJmXHVhZmMxXHVhZmMyXHVhZmMzXHVhZmM0XHVhZmM1XHVhZmM2XHVhZmNhXHVhZmNjXHVhZmNmXHVhZmQwXHVhZmQx''@;'; put 'put ''XHVhZmQyXHVhZmQzXHVhZmQ1XHVhZmQ2XHVhZmQ3XHVhZmQ4XHVhZmQ5XHVhZmRhXHVhZmRiXHVhZmRkXHVhZmRlXHVhZmRmXHVhZmUwXHVhZmUxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZmUyXHVhZmUzXHVhZmU0XHVhZmU1XHVhZmU2XHVhZmU3XHVhZmVhXHVh''@;'; put 'put ''ZmViXHVhZmVjXHVhZmVkXHVhZmVlXHVhZmVmXHVhZmYyXHVhZmYzXHVhZmY1XHVhZmY2XHVhZmY3XHVhZmY5XHVhZmZhXHVhZmZiXHVhZmZjXHVhZmZkXHVhZmZlXHVhZmZmXHViMDAyXHViMDAzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMDA1XHViMDA2XHViMDA3''@;'; put 'put ''XHViMDA4XHViMDA5XHViMDBhXHViMDBiXHViMDBkXHViMDBlXHViMDBmXHViMDExXHViMDEyXHViMDEzXHViMDE1XHViMDE2XHViMDE3XHViMDE4XHViMDE5XHViMDFhXHViMDFiXHViMDFlXHViMDFmXHViMDIwXHViMDIxXHViMDIyXHViMDIzXHViMDI0XHViMDI1XHViMDI2XHViMDI3XHVi''@;'; put 'put ''MDI5XHViMDJhXHViMDJiXHViMDJjXHViMDJkXHViMDJlXHViMDJmXHViMDMwXHViMDMxXHViMDMyXHViMDMzXHViMDM0XHViMDM1XHViMDM2XHViMDM3XHViMDM4XHViMDM5XHViMDNhXHViMDNiXHViMDNjXHViMDNkXHViMDNlXHViMDNmXHViMDQwXHViMDQxXHViMDQyXHViMDQzXHViMDQ2''@;'; put 'put ''XHViMDQ3XHViMDQ5XHViMDRiXHViMDRkXHViMDRmXHViMDUwXHViMDUxXHViMDUyXHViMDU2XHViMDU4XHViMDVhXHViMDViXHViMDVjXHViMDVlXHViMDVmXHViMDYwXHViMDYxXHViMDYyXHViMDYzXHViMDY0XHViMDY1XHViMDY2XHViMDY3XHViMDY4XHViMDY5XHViMDZhXHViMDZiXHVi''@;'; put 'put ''MDZjXHViMDZkXHViMDZlXHViMDZmXHViMDcwXHViMDcxXHViMDcyXHViMDczXHViMDc0XHViMDc1XHViMDc2XHViMDc3XHViMDc4XHViMDc5XHViMDdhXHViMDdiXHViMDdlXHViMDdmXHViMDgxXHViMDgyXHViMDgzXHViMDg1XHViMDg2XHViMDg3XHViMDg4XHViMDg5XHViMDhhXHViMDhi''@;'; put 'put ''XHViMDhlXHViMDkwXHViMDkyXHViMDkzXHViMDk0XHViMDk1XHViMDk2XHViMDk3XHViMDliXHViMDlkXHViMDllXHViMGEzXHViMGE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMzXVtn''@;'; put 'put ''XV09MzQwNDgrZyx5WzM0MDQ4K2ddPV9bMTMzXVtnXSk7Zm9yKF9bMTM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGE1XHViMGE2XHViMGE3XHViMGFhXHViMGIwXHViMGIyXHViMGI2XHViMGI3XHViMGI5XHViMGJh''@;'; put 'put ''XHViMGJiXHViMGJkXHViMGJlXHViMGJmXHViMGMwXHViMGMxXHViMGMyXHViMGMzXHViMGM2XHViMGNhXHViMGNiXHViMGNjXHViMGNkXHViMGNlXHViMGNmXHViMGQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGQzXHViMGQ1XHViMGQ2XHViMGQ3XHViMGQ5XHVi''@;'; put 'put ''MGRhXHViMGRiXHViMGRjXHViMGRkXHViMGRlXHViMGRmXHViMGUxXHViMGUyXHViMGUzXHViMGU0XHViMGU2XHViMGU3XHViMGU4XHViMGU5XHViMGVhXHViMGViXHViMGVjXHViMGVkXHViMGVlXHViMGVmXHViMGYwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGYx''@;'; put 'put ''XHViMGYyXHViMGYzXHViMGY0XHViMGY1XHViMGY2XHViMGY3XHViMGY4XHViMGY5XHViMGZhXHViMGZiXHViMGZjXHViMGZkXHViMGZlXHViMGZmXHViMTAwXHViMTAxXHViMTAyXHViMTAzXHViMTA0XHViMTA1XHViMTA2XHViMTA3XHViMTBhXHViMTBkXHViMTBlXHViMTBmXHViMTExXHVi''@;'; put 'put ''MTE0XHViMTE1XHViMTE2XHViMTE3XHViMTFhXHViMTFlXHViMTFmXHViMTIwXHViMTIxXHViMTIyXHViMTI2XHViMTI3XHViMTI5XHViMTJhXHViMTJiXHViMTJkXHViMTJlXHViMTJmXHViMTMwXHViMTMxXHViMTMyXHViMTMzXHViMTM2XHViMTNhXHViMTNiXHViMTNjXHViMTNkXHViMTNl''@;'; put 'put ''XHViMTNmXHViMTQyXHViMTQzXHViMTQ1XHViMTQ2XHViMTQ3XHViMTQ5XHViMTRhXHViMTRiXHViMTRjXHViMTRkXHViMTRlXHViMTRmXHViMTUyXHViMTUzXHViMTU2XHViMTU3XHViMTU5XHViMTVhXHViMTViXHViMTVkXHViMTVlXHViMTVmXHViMTYxXHViMTYyXHViMTYzXHViMTY0XHVi''@;'; put 'put ''MTY1XHViMTY2XHViMTY3XHViMTY4XHViMTY5XHViMTZhXHViMTZiXHViMTZjXHViMTZkXHViMTZlXHViMTZmXHViMTcwXHViMTcxXHViMTcyXHViMTczXHViMTc0XHViMTc1XHViMTc2XHViMTc3XHViMTdhXHViMTdiXHViMTdkXHViMTdlXHViMTdmXHViMTgxXHViMTgzXHViMTg0XHViMTg1''@;'; put 'put ''XHViMTg2XHViMTg3XHViMThhXHViMThjXHViMThlXHViMThmXHViMTkwXHViMTkxXHViMTk1XHViMTk2XHViMTk3XHViMTk5XHViMTlhXHViMTliXHViMTlkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzRdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMTM0XVtnXV09MzQzMDQrZyx5WzM0MzA0K2ddPV9bMTM0XVtnXSk7Zm9yKF9bMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMTllXHViMTlmXHViMWEwXHViMWExXHViMWEyXHViMWEzXHViMWE0XHViMWE1''@;'; put 'put ''XHViMWE2XHViMWE3XHViMWE5XHViMWFhXHViMWFiXHViMWFjXHViMWFkXHViMWFlXHViMWFmXHViMWIwXHViMWIxXHViMWIyXHViMWIzXHViMWI0XHViMWI1XHViMWI2XHViMWI3XHViMWI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWI5XHViMWJhXHViMWJiXHVi''@;'; put 'put ''MWJjXHViMWJkXHViMWJlXHViMWJmXHViMWMwXHViMWMxXHViMWMyXHViMWMzXHViMWM0XHViMWM1XHViMWM2XHViMWM3XHViMWM4XHViMWM5XHViMWNhXHViMWNiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHViMWQzXHViMWQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHViMWQ2XHViMWQ3XHViMWQ4XHViMWQ5XHViMWRhXHViMWRiXHViMWRlXHViMWUwXHViMWUxXHViMWUyXHViMWUzXHViMWU0XHViMWU1XHViMWU2XHViMWU3XHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVmXHViMWYxXHViMWYyXHViMWYzXHViMWY0XHViMWY1XHViMWY2XHVi''@;'; put 'put ''MWY3XHViMWY4XHViMWZhXHViMWZjXHViMWZlXHViMWZmXHViMjAwXHViMjAxXHViMjAyXHViMjAzXHViMjA2XHViMjA3XHViMjA5XHViMjBhXHViMjBkXHViMjBlXHViMjBmXHViMjEwXHViMjExXHViMjEyXHViMjEzXHViMjE2XHViMjE4XHViMjFhXHViMjFiXHViMjFjXHViMjFkXHViMjFl''@;'; put 'put ''XHViMjFmXHViMjIxXHViMjIyXHViMjIzXHViMjI0XHViMjI1XHViMjI2XHViMjI3XHViMjI4XHViMjI5XHViMjJhXHViMjJiXHViMjJjXHViMjJkXHViMjJlXHViMjJmXHViMjMwXHViMjMxXHViMjMyXHViMjMzXHViMjM1XHViMjM2XHViMjM3XHViMjM4XHViMjM5XHViMjNhXHViMjNiXHVi''@;'; put 'put ''MjNkXHViMjNlXHViMjNmXHViMjQwXHViMjQxXHViMjQyXHViMjQzXHViMjQ0XHViMjQ1XHViMjQ2XHViMjQ3XHViMjQ4XHViMjQ5XHViMjRhXHViMjRiXHViMjRjXHViMjRkXHViMjRlXHViMjRmXHViMjUwXHViMjUxXHViMjUyXHViMjUzXHViMjU0XHViMjU1XHViMjU2XHViMjU3XHViMjU5''@;'; put 'put ''XHViMjVhXHViMjViXHViMjVkXHViMjVlXHViMjVmXHViMjYxXHViMjYyXHViMjYzXHViMjY0XHViMjY1XHViMjY2XHViMjY3XHViMjZhXHViMjZiXHViMjZjXHViMjZkXHViMjZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzVdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMTM1XVtnXV09MzQ1NjArZyx5WzM0NTYwK2ddPV9bMTM1XVtnXSk7Zm9yKF9bMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMjZmXHViMjcwXHViMjcxXHViMjcyXHViMjczXHViMjc2''@;'; put 'put ''XHViMjc3XHViMjc4XHViMjc5XHViMjdhXHViMjdiXHViMjdkXHViMjdlXHViMjdmXHViMjgwXHViMjgxXHViMjgyXHViMjgzXHViMjg2XHViMjg3XHViMjg4XHViMjhhXHViMjhiXHViMjhjXHViMjhkXHViMjhlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMjhmXHVi''@;'; put 'put ''MjkyXHViMjkzXHViMjk1XHViMjk2XHViMjk3XHViMjliXHViMjljXHViMjlkXHViMjllXHViMjlmXHViMmEyXHViMmE0XHViMmE3XHViMmE4XHViMmE5XHViMmFiXHViMmFkXHViMmFlXHViMmFmXHViMmIxXHViMmIyXHViMmIzXHViMmI1XHViMmI2XHViMmI3XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHViMmI4XHViMmI5XHViMmJhXHViMmJiXHViMmJjXHViMmJkXHViMmJlXHViMmJmXHViMmMwXHViMmMxXHViMmMyXHViMmMzXHViMmM0XHViMmM1XHViMmM2XHViMmM3XHViMmNhXHViMmNiXHViMmNkXHViMmNlXHViMmNmXHViMmQxXHViMmQzXHViMmQ0XHVi''@;'; put 'put ''MmQ1XHViMmQ2XHViMmQ3XHViMmRhXHViMmRjXHViMmRlXHViMmRmXHViMmUwXHViMmUxXHViMmUzXHViMmU3XHViMmU5XHViMmVhXHViMmYwXHViMmYxXHViMmYyXHViMmY2XHViMmZjXHViMmZkXHViMmZlXHViMzAyXHViMzAzXHViMzA1XHViMzA2XHViMzA3XHViMzA5XHViMzBhXHViMzBi''@;'; put 'put ''XHViMzBjXHViMzBkXHViMzBlXHViMzBmXHViMzEyXHViMzE2XHViMzE3XHViMzE4XHViMzE5XHViMzFhXHViMzFiXHViMzFkXHViMzFlXHViMzFmXHViMzIwXHViMzIxXHViMzIyXHViMzIzXHViMzI0XHViMzI1XHViMzI2XHViMzI3XHViMzI4XHViMzI5XHViMzJhXHViMzJiXHViMzJjXHVi''@;'; put 'put ''MzJkXHViMzJlXHViMzJmXHViMzMwXHViMzMxXHViMzMyXHViMzMzXHViMzM0XHViMzM1XHViMzM2XHViMzM3XHViMzM4XHViMzM5XHViMzNhXHViMzNiXHViMzNjXHViMzNkXHViMzNlXHViMzNmXHViMzQwXHViMzQxXHViMzQyXHViMzQzXHViMzQ0XHViMzQ1XHViMzQ2XHViMzQ3XHViMzQ4''@;'; put 'put ''XHViMzQ5XHViMzRhXHViMzRiXHViMzRjXHViMzRkXHViMzRlXHViMzRmXHViMzUwXHViMzUxXHViMzUyXHViMzUzXHViMzU3XHViMzU5XHViMzVhXHViMzVkXHViMzYwXHViMzYxXHViMzYyXHViMzYzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM2XS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1sxMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM2XVtnXV09MzQ4MTYrZyx5WzM0ODE2K2ddPV9bMTM2XVtnXSk7Zm9yKF9bMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMzY2XHViMzY4XHViMzZhXHViMzZj''@;'; put 'put ''XHViMzZkXHViMzZmXHViMzcyXHViMzczXHViMzc1XHViMzc2XHViMzc3XHViMzc5XHViMzdhXHViMzdiXHViMzdjXHViMzdkXHViMzdlXHViMzdmXHViMzgyXHViMzg2XHViMzg3XHViMzg4XHViMzg5XHViMzhhXHViMzhiXHViMzhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHViMzhlXHViMzhmXHViMzkxXHViMzkyXHViMzkzXHViMzk1XHViMzk2XHViMzk3XHViMzk4XHViMzk5XHViMzlhXHViMzliXHViMzljXHViMzlkXHViMzllXHViMzlmXHViM2EyXHViM2EzXHViM2E0XHViM2E1XHViM2E2XHViM2E3XHViM2E5XHViM2FhXHViM2FiXHViM2FkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViM2FlXHViM2FmXHViM2IwXHViM2IxXHViM2IyXHViM2IzXHViM2I0XHViM2I1XHViM2I2XHViM2I3XHViM2I4XHViM2I5XHViM2JhXHViM2JiXHViM2JjXHViM2JkXHViM2JlXHViM2JmXHViM2MwXHViM2MxXHViM2MyXHViM2MzXHVi''@;'; put 'put ''M2M2XHViM2M3XHViM2M5XHViM2NhXHViM2NkXHViM2NmXHViM2QxXHViM2QyXHViM2QzXHViM2Q2XHViM2Q4XHViM2RhXHViM2RjXHViM2RlXHViM2RmXHViM2UxXHViM2UyXHViM2UzXHViM2U1XHViM2U2XHViM2U3XHViM2U5XHViM2VhXHViM2ViXHViM2VjXHViM2VkXHViM2VlXHViM2Vm''@;'; put 'put ''XHViM2YwXHViM2YxXHViM2YyXHViM2YzXHViM2Y0XHViM2Y1XHViM2Y2XHViM2Y3XHViM2Y4XHViM2Y5XHViM2ZhXHViM2ZiXHViM2ZkXHViM2ZlXHViM2ZmXHViNDAwXHViNDAxXHViNDAyXHViNDAzXHViNDA0XHViNDA1XHViNDA2XHViNDA3XHViNDA4XHViNDA5XHViNDBhXHViNDBiXHVi''@;'; put 'put ''NDBjXHViNDBkXHViNDBlXHViNDBmXHViNDExXHViNDEyXHViNDEzXHViNDE0XHViNDE1XHViNDE2XHViNDE3XHViNDE5XHViNDFhXHViNDFiXHViNDFkXHViNDFlXHViNDFmXHViNDIxXHViNDIyXHViNDIzXHViNDI0XHViNDI1XHViNDI2XHViNDI3XHViNDJhXHViNDJjXHViNDJkXHViNDJl''@;'; put 'put ''XHViNDJmXHViNDMwXHViNDMxXHViNDMyXHViNDMzXHViNDM1XHViNDM2XHViNDM3XHViNDM4XHViNDM5XHViNDNhXHViNDNiXHViNDNjXHViNDNkXHViNDNlXHViNDNmXHViNDQwXHViNDQxXHViNDQyXHViNDQzXHViNDQ0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM3XS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1sxMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM3XVtnXV09MzUwNzIrZyx5WzM1MDcyK2ddPV9bMTM3XVtnXSk7Zm9yKF9bMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDQ1XHViNDQ2''@;'; put 'put ''XHViNDQ3XHViNDQ4XHViNDQ5XHViNDRhXHViNDRiXHViNDRjXHViNDRkXHViNDRlXHViNDRmXHViNDUyXHViNDUzXHViNDU1XHViNDU2XHViNDU3XHViNDU5XHViNDVhXHViNDViXHViNDVjXHViNDVkXHViNDVlXHViNDVmXHViNDYyXHViNDY0XHViNDY2XHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHViNDY3XHViNDY4XHViNDY5XHViNDZhXHViNDZiXHViNDZkXHViNDZlXHViNDZmXHViNDcwXHViNDcxXHViNDcyXHViNDczXHViNDc0XHViNDc1XHViNDc2XHViNDc3XHViNDc4XHViNDc5XHViNDdhXHViNDdiXHViNDdjXHViNDdkXHViNDdlXHViNDdmXHViNDgx''@;'; put 'put ''XHViNDgyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDgzXHViNDg0XHViNDg1XHViNDg2XHViNDg3XHViNDg5XHViNDhhXHViNDhiXHViNDhjXHViNDhkXHViNDhlXHViNDhmXHViNDkwXHViNDkxXHViNDkyXHViNDkzXHViNDk0XHViNDk1XHViNDk2XHViNDk3XHVi''@;'; put 'put ''NDk4XHViNDk5XHViNDlhXHViNDliXHViNDljXHViNDllXHViNDlmXHViNGEwXHViNGExXHViNGEyXHViNGEzXHViNGE1XHViNGE2XHViNGE3XHViNGE5XHViNGFhXHViNGFiXHViNGFkXHViNGFlXHViNGFmXHViNGIwXHViNGIxXHViNGIyXHViNGIzXHViNGI0XHViNGI2XHViNGI4XHViNGJh''@;'; put 'put ''XHViNGJiXHViNGJjXHViNGJkXHViNGJlXHViNGJmXHViNGMxXHViNGMyXHViNGMzXHViNGM1XHViNGM2XHViNGM3XHViNGM5XHViNGNhXHViNGNiXHViNGNjXHViNGNkXHViNGNlXHViNGNmXHViNGQxXHViNGQyXHViNGQzXHViNGQ0XHViNGQ2XHViNGQ3XHViNGQ4XHViNGQ5XHViNGRhXHVi''@;'; put 'put ''NGRiXHViNGRlXHViNGRmXHViNGUxXHViNGUyXHViNGU1XHViNGU3XHViNGU4XHViNGU5XHViNGVhXHViNGViXHViNGVlXHViNGYwXHViNGYyXHViNGYzXHViNGY0XHViNGY1XHViNGY2XHViNGY3XHViNGY5XHViNGZhXHViNGZiXHViNGZjXHViNGZkXHViNGZlXHViNGZmXHViNTAwXHViNTAx''@;'; put 'put ''XHViNTAyXHViNTAzXHViNTA0XHViNTA1XHViNTA2XHViNTA3XHViNTA4XHViNTA5XHViNTBhXHViNTBiXHViNTBjXHViNTBkXHViNTBlXHViNTBmXHViNTEwXHViNTExXHViNTEyXHViNTEzXHViNTE2XHViNTE3XHViNTE5XHViNTFhXHViNTFkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b''@;'; put 'put ''MTM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM4XVtnXV09MzUzMjgrZyx5WzM1MzI4K2ddPV9bMTM4XVtnXSk7Zm9yKF9bMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHViNTFlXHViNTFmXHViNTIwXHViNTIxXHViNTIyXHViNTIzXHViNTI2XHViNTJiXHViNTJjXHViNTJkXHViNTJlXHViNTJmXHViNTMyXHViNTMzXHViNTM1XHViNTM2XHViNTM3XHViNTM5XHViNTNhXHViNTNiXHViNTNjXHViNTNkXHViNTNlXHViNTNmXHViNTQyXHViNTQ2XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTQ3XHViNTQ4XHViNTQ5XHViNTRhXHViNTRlXHViNTRmXHViNTUxXHViNTUyXHViNTUzXHViNTU1XHViNTU2XHViNTU3XHViNTU4XHViNTU5XHViNTVhXHViNTViXHViNTVlXHViNTYyXHViNTYzXHViNTY0XHViNTY1XHViNTY2XHViNTY3''@;'; put 'put ''XHViNTY4XHViNTY5XHViNTZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTZiXHViNTZjXHViNTZkXHViNTZlXHViNTZmXHViNTcwXHViNTcxXHViNTcyXHViNTczXHViNTc0XHViNTc1XHViNTc2XHViNTc3XHViNTc4XHViNTc5XHViNTdhXHViNTdiXHViNTdjXHVi''@;'; put 'put ''NTdkXHViNTdlXHViNTdmXHViNTgwXHViNTgxXHViNTgyXHViNTgzXHViNTg0XHViNTg1XHViNTg2XHViNTg3XHViNTg4XHViNTg5XHViNThhXHViNThiXHViNThjXHViNThkXHViNThlXHViNThmXHViNTkwXHViNTkxXHViNTkyXHViNTkzXHViNTk0XHViNTk1XHViNTk2XHViNTk3XHViNTk4''@;'; put 'put ''XHViNTk5XHViNTlhXHViNTliXHViNTljXHViNTlkXHViNTllXHViNTlmXHViNWEyXHViNWEzXHViNWE1XHViNWE2XHViNWE3XHViNWE5XHViNWFjXHViNWFkXHViNWFlXHViNWFmXHViNWIyXHViNWI2XHViNWI3XHViNWI4XHViNWI5XHViNWJhXHViNWJlXHViNWJmXHViNWMxXHViNWMyXHVi''@;'; put 'put ''NWMzXHViNWM1XHViNWM2XHViNWM3XHViNWM4XHViNWM5XHViNWNhXHViNWNiXHViNWNlXHViNWQyXHViNWQzXHViNWQ0XHViNWQ1XHViNWQ2XHViNWQ3XHViNWQ5XHViNWRhXHViNWRiXHViNWRjXHViNWRkXHViNWRlXHViNWRmXHViNWUwXHViNWUxXHViNWUyXHViNWUzXHViNWU0XHViNWU1''@;'; put 'put ''XHViNWU2XHViNWU3XHViNWU4XHViNWU5XHViNWVhXHViNWViXHViNWVkXHViNWVlXHViNWVmXHViNWYwXHViNWYxXHViNWYyXHViNWYzXHViNWY0XHViNWY1XHViNWY2XHViNWY3XHViNWY4XHViNWY5XHViNWZhXHViNWZiXHViNWZjXHViNWZkXHViNWZlXHViNWZmXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPV9bMTM5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM5XVtnXV09MzU1ODQrZyx5WzM1NTg0K2ddPV9bMTM5XVtnXSk7Zm9yKF9bMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHViNjAwXHViNjAxXHViNjAyXHViNjAzXHViNjA0XHViNjA1XHViNjA2XHViNjA3XHViNjA4XHViNjA5XHViNjBhXHViNjBiXHViNjBjXHViNjBkXHViNjBlXHViNjBmXHViNjEyXHViNjEzXHViNjE1XHViNjE2XHViNjE3XHViNjE5XHViNjFhXHViNjFiXHViNjFjXHVi''@;'; put 'put ''NjFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjFlXHViNjFmXHViNjIwXHViNjIxXHViNjIyXHViNjIzXHViNjI0XHViNjI2XHViNjI3XHViNjI4XHViNjI5XHViNjJhXHViNjJiXHViNjJkXHViNjJlXHViNjJmXHViNjMwXHViNjMxXHViNjMyXHViNjMzXHViNjM1''@;'; put 'put ''XHViNjM2XHViNjM3XHViNjM4XHViNjM5XHViNjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjNiXHViNjNjXHViNjNkXHViNjNlXHViNjNmXHViNjQwXHViNjQxXHViNjQyXHViNjQzXHViNjQ0XHViNjQ1XHViNjQ2XHViNjQ3XHViNjQ5XHViNjRhXHViNjRiXHVi''@;'; put 'put ''NjRjXHViNjRkXHViNjRlXHViNjRmXHViNjUwXHViNjUxXHViNjUyXHViNjUzXHViNjU0XHViNjU1XHViNjU2XHViNjU3XHViNjU4XHViNjU5XHViNjVhXHViNjViXHViNjVjXHViNjVkXHViNjVlXHViNjVmXHViNjYwXHViNjYxXHViNjYyXHViNjYzXHViNjY1XHViNjY2XHViNjY3XHViNjY5''@;'; put 'put ''XHViNjZhXHViNjZiXHViNjZjXHViNjZkXHViNjZlXHViNjZmXHViNjcwXHViNjcxXHViNjcyXHViNjczXHViNjc0XHViNjc1XHViNjc2XHViNjc3XHViNjc4XHViNjc5XHViNjdhXHViNjdiXHViNjdjXHViNjdkXHViNjdlXHViNjdmXHViNjgwXHViNjgxXHViNjgyXHViNjgzXHViNjg0XHVi''@;'; put 'put ''Njg1XHViNjg2XHViNjg3XHViNjg4XHViNjg5XHViNjhhXHViNjhiXHViNjhjXHViNjhkXHViNjhlXHViNjhmXHViNjkwXHViNjkxXHViNjkyXHViNjkzXHViNjk0XHViNjk1XHViNjk2XHViNjk3XHViNjk4XHViNjk5XHViNjlhXHViNjliXHViNjllXHViNjlmXHViNmExXHViNmEyXHViNmEz''@;'; put 'put ''XHViNmE1XHViNmE2XHViNmE3XHViNmE4XHViNmE5XHViNmFhXHViNmFkXHViNmFlXHViNmFmXHViNmIwXHViNmIyXHViNmIzXHViNmI0XHViNmI1XHViNmI2XHViNmI3XHViNmI4XHViNmI5XHViNmJhXHViNmJiXHViNmJjXHViNmJkXHViNmJlXHViNmJmXHViNmMwXHViNmMxXHViNmMyXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQwXVtnXV09MzU4NDArZyx5WzM1ODQwK2ddPV9bMTQwXVtnXSk7Zm9yKF9bMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmMzXHViNmM0XHViNmM1XHViNmM2XHViNmM3XHViNmM4XHViNmM5XHViNmNhXHViNmNiXHViNmNjXHViNmNkXHViNmNlXHViNmNmXHViNmQwXHViNmQxXHViNmQyXHViNmQzXHViNmQ1XHViNmQ2XHViNmQ3XHViNmQ4XHViNmQ5XHViNmRhXHVi''@;'; put 'put ''NmRiXHViNmRjXHViNmRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmRlXHViNmRmXHViNmUwXHViNmUxXHViNmUyXHViNmUzXHViNmU0XHViNmU1XHViNmU2XHViNmU3XHViNmU4XHViNmU5XHViNmVhXHViNmViXHViNmVjXHViNmVkXHViNmVlXHViNmVmXHViNmYx''@;'; put 'put ''XHViNmYyXHViNmYzXHViNmY1XHViNmY2XHViNmY3XHViNmY5XHViNmZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmZiXHViNmZjXHViNmZkXHViNmZlXHViNmZmXHViNzAyXHViNzAzXHViNzA0XHViNzA2XHViNzA3XHViNzA4XHViNzA5XHViNzBhXHViNzBiXHVi''@;'; put 'put ''NzBjXHViNzBkXHViNzBlXHViNzBmXHViNzEwXHViNzExXHViNzEyXHViNzEzXHViNzE0XHViNzE1XHViNzE2XHViNzE3XHViNzE4XHViNzE5XHViNzFhXHViNzFiXHViNzFjXHViNzFkXHViNzFlXHViNzFmXHViNzIwXHViNzIxXHViNzIyXHViNzIzXHViNzI0XHViNzI1XHViNzI2XHViNzI3''@;'; put 'put ''XHViNzJhXHViNzJiXHViNzJkXHViNzJlXHViNzMxXHViNzMyXHViNzMzXHViNzM0XHViNzM1XHViNzM2XHViNzM3XHViNzNhXHViNzNjXHViNzNkXHViNzNlXHViNzNmXHViNzQwXHViNzQxXHViNzQyXHViNzQzXHViNzQ1XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRhXHViNzRiXHViNzRkXHVi''@;'; put 'put ''NzRlXHViNzRmXHViNzUwXHViNzUxXHViNzUyXHViNzUzXHViNzU2XHViNzU3XHViNzU4XHViNzU5XHViNzVhXHViNzViXHViNzVjXHViNzVkXHViNzVlXHViNzVmXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHViNzY3XHViNzY5XHViNzZhXHViNzZiXHViNzZjXHViNzZkXHViNzZl''@;'; put 'put ''XHViNzZmXHViNzcyXHViNzc0XHViNzc2XHViNzc3XHViNzc4XHViNzc5XHViNzdhXHViNzdiXHViNzdlXHViNzdmXHViNzgxXHViNzgyXHViNzgzXHViNzg1XHViNzg2XHViNzg3XHViNzg4XHViNzg5XHViNzhhXHViNzhiXHViNzhlXHViNzkzXHViNzk0XHViNzk1XHViNzlhXHViNzliXHVi''@;'; put 'put ''NzlkXHViNzllXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQxXVtnXV09MzYwOTYrZyx5WzM2MDk2K2ddPV9bMTQxXVtnXSk7Zm9yKF9bMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNzlmXHViN2ExXHViN2EyXHViN2EzXHViN2E0XHViN2E1XHViN2E2XHViN2E3XHViN2FhXHViN2FlXHViN2FmXHViN2IwXHViN2IxXHViN2IyXHViN2IzXHViN2I2XHViN2I3XHViN2I5XHViN2JhXHViN2JiXHViN2JjXHVi''@;'; put 'put ''N2JkXHViN2JlXHViN2JmXHViN2MwXHViN2MxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViN2MyXHViN2MzXHViN2M0XHViN2M1XHViN2M2XHViN2M4XHViN2NhXHViN2NiXHViN2NjXHViN2NkXHViN2NlXHViN2NmXHViN2QwXHViN2QxXHViN2QyXHViN2QzXHViN2Q0''@;'; put 'put ''XHViN2Q1XHViN2Q2XHViN2Q3XHViN2Q4XHViN2Q5XHViN2RhXHViN2RiXHViN2RjXHViN2RkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViN2RlXHViN2RmXHViN2UwXHViN2UxXHViN2UyXHViN2UzXHViN2U0XHViN2U1XHViN2U2XHViN2U3XHViN2U4XHViN2U5XHVi''@;'; put 'put ''N2VhXHViN2ViXHViN2VlXHViN2VmXHViN2YxXHViN2YyXHViN2YzXHViN2Y1XHViN2Y2XHViN2Y3XHViN2Y4XHViN2Y5XHViN2ZhXHViN2ZiXHViN2ZlXHViODAyXHViODAzXHViODA0XHViODA1XHViODA2XHViODBhXHViODBiXHViODBkXHViODBlXHViODBmXHViODExXHViODEyXHViODEz''@;'; put 'put ''XHViODE0XHViODE1XHViODE2XHViODE3XHViODFhXHViODFjXHViODFlXHViODFmXHViODIwXHViODIxXHViODIyXHViODIzXHViODI2XHViODI3XHViODI5XHViODJhXHViODJiXHViODJkXHViODJlXHViODJmXHViODMwXHViODMxXHViODMyXHViODMzXHViODM2XHViODNhXHViODNiXHVi''@;'; put 'put ''ODNjXHViODNkXHViODNlXHViODNmXHViODQxXHViODQyXHViODQzXHViODQ1XHViODQ2XHViODQ3XHViODQ4XHViODQ5XHViODRhXHViODRiXHViODRjXHViODRkXHViODRlXHViODRmXHViODUwXHViODUyXHViODU0XHViODU1XHViODU2XHViODU3XHViODU4XHViODU5XHViODVhXHViODVi''@;'; put 'put ''XHViODVlXHViODVmXHViODYxXHViODYyXHViODYzXHViODY1XHViODY2XHViODY3XHViODY4XHViODY5XHViODZhXHViODZiXHViODZlXHViODcwXHViODcyXHViODczXHViODc0XHViODc1XHViODc2XHViODc3XHViODc5XHViODdhXHViODdiXHViODdkXHViODdlXHViODdmXHViODgwXHVi''@;'; put 'put ''ODgxXHViODgyXHViODgzXHViODg0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQyXVtnXV09MzYzNTIrZyx5WzM2MzUyK2ddPV9bMTQyXVtnXSk7Zm9yKF9bMTQzXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViODg1XHViODg2XHViODg3XHViODg4XHViODg5XHViODhhXHViODhiXHViODhjXHViODhlXHViODhmXHViODkwXHViODkxXHViODkyXHViODkzXHViODk0XHViODk1XHViODk2XHViODk3XHViODk4XHVi''@;'; put 'put ''ODk5XHViODlhXHViODliXHViODljXHViODlkXHViODllXHViODlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGEwXHViOGExXHViOGEyXHViOGEzXHViOGE0XHViOGE1XHViOGE2XHViOGE3XHViOGE5XHViOGFhXHViOGFiXHViOGFjXHViOGFkXHViOGFlXHViOGFm''@;'; put 'put ''XHViOGIxXHViOGIyXHViOGIzXHViOGI1XHViOGI2XHViOGI3XHViOGI5XHViOGJhXHViOGJiXHViOGJjXHViOGJkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGJlXHViOGJmXHViOGMyXHViOGM0XHViOGM2XHViOGM3XHViOGM4XHViOGM5XHViOGNhXHViOGNiXHVi''@;'; put 'put ''OGNkXHViOGNlXHViOGNmXHViOGQxXHViOGQyXHViOGQzXHViOGQ1XHViOGQ2XHViOGQ3XHViOGQ4XHViOGQ5XHViOGRhXHViOGRiXHViOGRjXHViOGRlXHViOGUwXHViOGUyXHViOGUzXHViOGU0XHViOGU1XHViOGU2XHViOGU3XHViOGVhXHViOGViXHViOGVkXHViOGVlXHViOGVmXHViOGYx''@;'; put 'put ''XHViOGYyXHViOGYzXHViOGY0XHViOGY1XHViOGY2XHViOGY3XHViOGZhXHViOGZjXHViOGZlXHViOGZmXHViOTAwXHViOTAxXHViOTAyXHViOTAzXHViOTA1XHViOTA2XHViOTA3XHViOTA4XHViOTA5XHViOTBhXHViOTBiXHViOTBjXHViOTBkXHViOTBlXHViOTBmXHViOTEwXHViOTExXHVi''@;'; put 'put ''OTEyXHViOTEzXHViOTE0XHViOTE1XHViOTE2XHViOTE3XHViOTE5XHViOTFhXHViOTFiXHViOTFjXHViOTFkXHViOTFlXHViOTFmXHViOTIxXHViOTIyXHViOTIzXHViOTI0XHViOTI1XHViOTI2XHViOTI3XHViOTI4XHViOTI5XHViOTJhXHViOTJiXHViOTJjXHViOTJkXHViOTJlXHViOTJm''@;'; put 'put ''XHViOTMwXHViOTMxXHViOTMyXHViOTMzXHViOTM0XHViOTM1XHViOTM2XHViOTM3XHViOTM4XHViOTM5XHViOTNhXHViOTNiXHViOTNlXHViOTNmXHViOTQxXHViOTQyXHViOTQzXHViOTQ1XHViOTQ2XHViOTQ3XHViOTQ4XHViOTQ5XHViOTRhXHViOTRiXHViOTRkXHViOTRlXHViOTUwXHVi''@;'; put 'put ''OTUyXHViOTUzXHViOTU0XHViOTU1XHViOTU2XHViOTU3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQzXVtnXV09MzY2MDgrZyx5WzM2NjA4K2ddPV9bMTQzXVtnXSk7Zm9yKF9bMTQ0XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTVhXHViOTViXHViOTVkXHViOTVlXHViOTVmXHViOTYxXHViOTYyXHViOTYzXHViOTY0XHViOTY1XHViOTY2XHViOTY3XHViOTZhXHViOTZjXHViOTZlXHViOTZmXHViOTcwXHVi''@;'; put 'put ''OTcxXHViOTcyXHViOTczXHViOTc2XHViOTc3XHViOTc5XHViOTdhXHViOTdiXHViOTdkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTdlXHViOTdmXHViOTgwXHViOTgxXHViOTgyXHViOTgzXHViOTg2XHViOTg4XHViOThiXHViOThjXHViOThmXHViOTkwXHViOTkx''@;'; put 'put ''XHViOTkyXHViOTkzXHViOTk0XHViOTk1XHViOTk2XHViOTk3XHViOTk4XHViOTk5XHViOTlhXHViOTliXHViOTljXHViOTlkXHViOTllXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTlmXHViOWEwXHViOWExXHViOWEyXHViOWEzXHViOWE0XHViOWE1XHViOWE2XHVi''@;'; put 'put ''OWE3XHViOWE4XHViOWE5XHViOWFhXHViOWFiXHViOWFlXHViOWFmXHViOWIxXHViOWIyXHViOWIzXHViOWI1XHViOWI2XHViOWI3XHViOWI4XHViOWI5XHViOWJhXHViOWJiXHViOWJlXHViOWMwXHViOWMyXHViOWMzXHViOWM0XHViOWM1XHViOWM2XHViOWM3XHViOWNhXHViOWNiXHViOWNk''@;'; put 'put ''XHViOWQzXHViOWQ0XHViOWQ1XHViOWQ2XHViOWQ3XHViOWRhXHViOWRjXHViOWRmXHViOWUwXHViOWUyXHViOWU2XHViOWU3XHViOWU5XHViOWVhXHViOWViXHViOWVkXHViOWVlXHViOWVmXHViOWYwXHViOWYxXHViOWYyXHViOWYzXHViOWY2XHViOWZiXHViOWZjXHViOWZkXHViOWZlXHVi''@;'; put 'put ''OWZmXHViYTAyXHViYTAzXHViYTA0XHViYTA1XHViYTA2XHViYTA3XHViYTA5XHViYTBhXHViYTBiXHViYTBjXHViYTBkXHViYTBlXHViYTBmXHViYTEwXHViYTExXHViYTEyXHViYTEzXHViYTE0XHViYTE2XHViYTE3XHViYTE4XHViYTE5XHViYTFhXHViYTFiXHViYTFjXHViYTFkXHViYTFl''@;'; put 'put ''XHViYTFmXHViYTIwXHViYTIxXHViYTIyXHViYTIzXHViYTI0XHViYTI1XHViYTI2XHViYTI3XHViYTI4XHViYTI5XHViYTJhXHViYTJiXHViYTJjXHViYTJkXHViYTJlXHViYTJmXHViYTMwXHViYTMxXHViYTMyXHViYTMzXHViYTM0XHViYTM1XHViYTM2XHViYTM3XHViYTNhXHViYTNiXHVi''@;'; put 'put ''YTNkXHViYTNlXHViYTNmXHViYTQxXHViYTQzXHViYTQ0XHViYTQ1XHViYTQ2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ0XVtnXV09MzY4NjQrZyx5WzM2ODY0K2ddPV9bMTQ0XVtnXSk7''@;'; put 'put ''Zm9yKF9bMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTQ3XHViYTRhXHViYTRjXHViYTRmXHViYTUwXHViYTUxXHViYTUyXHViYTU2XHViYTU3XHViYTU5XHViYTVhXHViYTViXHViYTVkXHViYTVlXHViYTVmXHVi''@;'; put 'put ''YTYwXHViYTYxXHViYTYyXHViYTYzXHViYTY2XHViYTZhXHViYTZiXHViYTZjXHViYTZkXHViYTZlXHViYTZmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTcyXHViYTczXHViYTc1XHViYTc2XHViYTc3XHViYTc5XHViYTdhXHViYTdiXHViYTdjXHViYTdkXHViYTdl''@;'; put 'put ''XHViYTdmXHViYTgwXHViYTgxXHViYTgyXHViYTg2XHViYTg4XHViYTg5XHViYThhXHViYThiXHViYThkXHViYThlXHViYThmXHViYTkwXHViYTkxXHViYTkyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTkzXHViYTk0XHViYTk1XHViYTk2XHViYTk3XHViYTk4XHVi''@;'; put 'put ''YTk5XHViYTlhXHViYTliXHViYTljXHViYTlkXHViYTllXHViYTlmXHViYWEwXHViYWExXHViYWEyXHViYWEzXHViYWE0XHViYWE1XHViYWE2XHViYWE3XHViYWFhXHViYWFkXHViYWFlXHViYWFmXHViYWIxXHViYWIzXHViYWI0XHViYWI1XHViYWI2XHViYWI3XHViYWJhXHViYWJjXHViYWJl''@;'; put 'put ''XHViYWJmXHViYWMwXHViYWMxXHViYWMyXHViYWMzXHViYWM1XHViYWM2XHViYWM3XHViYWM5XHViYWNhXHViYWNiXHViYWNjXHViYWNkXHViYWNlXHViYWNmXHViYWQwXHViYWQxXHViYWQyXHViYWQzXHViYWQ0XHViYWQ1XHViYWQ2XHViYWQ3XHViYWRhXHViYWRiXHViYWRjXHViYWRkXHVi''@;'; put 'put ''YWRlXHViYWRmXHViYWUwXHViYWUxXHViYWUyXHViYWUzXHViYWU0XHViYWU1XHViYWU2XHViYWU3XHViYWU4XHViYWU5XHViYWVhXHViYWViXHViYWVjXHViYWVkXHViYWVlXHViYWVmXHViYWYwXHViYWYxXHViYWYyXHViYWYzXHViYWY0XHViYWY1XHViYWY2XHViYWY3XHViYWY4XHViYWY5''@;'; put 'put ''XHViYWZhXHViYWZiXHViYWZkXHViYWZlXHViYWZmXHViYjAxXHViYjAyXHViYjAzXHViYjA1XHViYjA2XHViYjA3XHViYjA4XHViYjA5XHViYjBhXHViYjBiXHViYjBjXHViYjBlXHViYjEwXHViYjEyXHViYjEzXHViYjE0XHViYjE1XHViYjE2XHViYjE3XHViYjE5XHViYjFhXHViYjFiXHVi''@;'; put 'put ''YjFkXHViYjFlXHViYjFmXHViYjIxXHViYjIyXHViYjIzXHViYjI0XHViYjI1XHViYjI2XHViYjI3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ1XVtnXV09MzcxMjArZyx5WzM3MTIwK2dd''@;'; put 'put ''PV9bMTQ1XVtnXSk7Zm9yKF9bMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjI4XHViYjJhXHViYjJjXHViYjJkXHViYjJlXHViYjJmXHViYjMwXHViYjMxXHViYjMyXHViYjMzXHViYjM3XHViYjM5XHViYjNhXHVi''@;'; put 'put ''YjNmXHViYjQwXHViYjQxXHViYjQyXHViYjQzXHViYjQ2XHViYjQ4XHViYjRhXHViYjRiXHViYjRjXHViYjRlXHViYjUxXHViYjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjUzXHViYjU1XHViYjU2XHViYjU3XHViYjU5XHViYjVhXHViYjViXHViYjVjXHViYjVk''@;'; put 'put ''XHViYjVlXHViYjVmXHViYjYwXHViYjYyXHViYjY0XHViYjY1XHViYjY2XHViYjY3XHViYjY4XHViYjY5XHViYjZhXHViYjZiXHViYjZkXHViYjZlXHViYjZmXHViYjcwXHViYjcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjcyXHViYjczXHViYjc0XHViYjc1XHVi''@;'; put 'put ''Yjc2XHViYjc3XHViYjc4XHViYjc5XHViYjdhXHViYjdiXHViYjdjXHViYjdkXHViYjdlXHViYjdmXHViYjgwXHViYjgxXHViYjgyXHViYjgzXHViYjg0XHViYjg1XHViYjg2XHViYjg3XHViYjg5XHViYjhhXHViYjhiXHViYjhkXHViYjhlXHViYjhmXHViYjkxXHViYjkyXHViYjkzXHViYjk0''@;'; put 'put ''XHViYjk1XHViYjk2XHViYjk3XHViYjk4XHViYjk5XHViYjlhXHViYjliXHViYjljXHViYjlkXHViYjllXHViYjlmXHViYmEwXHViYmExXHViYmEyXHViYmEzXHViYmE1XHViYmE2XHViYmE3XHViYmE5XHViYmFhXHViYmFiXHViYmFkXHViYmFlXHViYmFmXHViYmIwXHViYmIxXHViYmIyXHVi''@;'; put 'put ''YmIzXHViYmI1XHViYmI2XHViYmI4XHViYmI5XHViYmJhXHViYmJiXHViYmJjXHViYmJkXHViYmJlXHViYmJmXHViYmMxXHViYmMyXHViYmMzXHViYmM1XHViYmM2XHViYmM3XHViYmM5XHViYmNhXHViYmNiXHViYmNjXHViYmNkXHViYmNlXHViYmNmXHViYmQxXHViYmQyXHViYmQ0XHViYmQ1''@;'; put 'put ''XHViYmQ2XHViYmQ3XHViYmQ4XHViYmQ5XHViYmRhXHViYmRiXHViYmRjXHViYmRkXHViYmRlXHViYmRmXHViYmUwXHViYmUxXHViYmUyXHViYmUzXHViYmU0XHViYmU1XHViYmU2XHViYmU3XHViYmU4XHViYmU5XHViYmVhXHViYmViXHViYmVjXHViYmVkXHViYmVlXHViYmVmXHViYmYwXHVi''@;'; put 'put ''YmYxXHViYmYyXHViYmYzXHViYmY0XHViYmY1XHViYmY2XHViYmY3XHViYmZhXHViYmZiXHViYmZkXHViYmZlXHViYzAxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ2XVtnXV09MzczNzYr''@;'; put 'put ''Zyx5WzM3Mzc2K2ddPV9bMTQ2XVtnXSk7Zm9yKF9bMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzAzXHViYzA0XHViYzA1XHViYzA2XHViYzA3XHViYzBhXHViYzBlXHViYzEwXHViYzEyXHViYzEzXHViYzE5XHVi''@;'; put 'put ''YzFhXHViYzIwXHViYzIxXHViYzIyXHViYzIzXHViYzI2XHViYzI4XHViYzJhXHViYzJiXHViYzJjXHViYzJlXHViYzJmXHViYzMyXHViYzMzXHViYzM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzM2XHViYzM3XHViYzM5XHViYzNhXHViYzNiXHViYzNjXHViYzNk''@;'; put 'put ''XHViYzNlXHViYzNmXHViYzQyXHViYzQ2XHViYzQ3XHViYzQ4XHViYzRhXHViYzRiXHViYzRlXHViYzRmXHViYzUxXHViYzUyXHViYzUzXHViYzU0XHViYzU1XHViYzU2XHViYzU3XHViYzU4XHViYzU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzVhXHViYzViXHVi''@;'; put 'put ''YzVjXHViYzVlXHViYzVmXHViYzYwXHViYzYxXHViYzYyXHViYzYzXHViYzY0XHViYzY1XHViYzY2XHViYzY3XHViYzY4XHViYzY5XHViYzZhXHViYzZiXHViYzZjXHViYzZkXHViYzZlXHViYzZmXHViYzcwXHViYzcxXHViYzcyXHViYzczXHViYzc0XHViYzc1XHViYzc2XHViYzc3XHViYzc4''@;'; put 'put ''XHViYzc5XHViYzdhXHViYzdiXHViYzdjXHViYzdkXHViYzdlXHViYzdmXHViYzgwXHViYzgxXHViYzgyXHViYzgzXHViYzg2XHViYzg3XHViYzg5XHViYzhhXHViYzhkXHViYzhmXHViYzkwXHViYzkxXHViYzkyXHViYzkzXHViYzk2XHViYzk4XHViYzliXHViYzljXHViYzlkXHViYzllXHVi''@;'; put 'put ''YzlmXHViY2EyXHViY2EzXHViY2E1XHViY2E2XHViY2E5XHViY2FhXHViY2FiXHViY2FjXHViY2FkXHViY2FlXHViY2FmXHViY2IyXHViY2I2XHViY2I3XHViY2I4XHViY2I5XHViY2JhXHViY2JiXHViY2JlXHViY2JmXHViY2MxXHViY2MyXHViY2MzXHViY2M1XHViY2M2XHViY2M3XHViY2M4''@;'; put 'put ''XHViY2M5XHViY2NhXHViY2NiXHViY2NjXHViY2NlXHViY2QyXHViY2QzXHViY2Q0XHViY2Q2XHViY2Q3XHViY2Q5XHViY2RhXHViY2RiXHViY2RkXHViY2RlXHViY2RmXHViY2UwXHViY2UxXHViY2UyXHViY2UzXHViY2U0XHViY2U1XHViY2U2XHViY2U3XHViY2U4XHViY2U5XHViY2VhXHVi''@;'; put 'put ''Y2ViXHViY2VjXHViY2VkXHViY2VlXHViY2VmXHViY2YwXHViY2YxXHViY2YyXHViY2YzXHViY2Y3XHViY2Y5XHViY2ZhXHViY2ZiXHViY2ZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ3''@;'; put 'put ''XVtnXV09Mzc2MzIrZyx5WzM3NjMyK2ddPV9bMTQ3XVtnXSk7Zm9yKF9bMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViY2ZlXHViY2ZmXHViZDAwXHViZDAxXHViZDAyXHViZDAzXHViZDA2XHViZDA4XHViZDBhXHVi''@;'; put 'put ''ZDBiXHViZDBjXHViZDBkXHViZDBlXHViZDBmXHViZDExXHViZDEyXHViZDEzXHViZDE1XHViZDE2XHViZDE3XHViZDE4XHViZDE5XHViZDFhXHViZDFiXHViZDFjXHViZDFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZDFlXHViZDFmXHViZDIwXHViZDIxXHViZDIy''@;'; put 'put ''XHViZDIzXHViZDI1XHViZDI2XHViZDI3XHViZDI4XHViZDI5XHViZDJhXHViZDJiXHViZDJkXHViZDJlXHViZDJmXHViZDMwXHViZDMxXHViZDMyXHViZDMzXHViZDM0XHViZDM1XHViZDM2XHViZDM3XHViZDM4XHViZDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVi''@;'; put 'put ''ZDNhXHViZDNiXHViZDNjXHViZDNkXHViZDNlXHViZDNmXHViZDQxXHViZDQyXHViZDQzXHViZDQ0XHViZDQ1XHViZDQ2XHViZDQ3XHViZDRhXHViZDRiXHViZDRkXHViZDRlXHViZDRmXHViZDUxXHViZDUyXHViZDUzXHViZDU0XHViZDU1XHViZDU2XHViZDU3XHViZDVhXHViZDViXHViZDVj''@;'; put 'put ''XHViZDVkXHViZDVlXHViZDVmXHViZDYwXHViZDYxXHViZDYyXHViZDYzXHViZDY1XHViZDY2XHViZDY3XHViZDY5XHViZDZhXHViZDZiXHViZDZjXHViZDZkXHViZDZlXHViZDZmXHViZDcwXHViZDcxXHViZDcyXHViZDczXHViZDc0XHViZDc1XHViZDc2XHViZDc3XHViZDc4XHViZDc5XHVi''@;'; put 'put ''ZDdhXHViZDdiXHViZDdjXHViZDdkXHViZDdlXHViZDdmXHViZDgyXHViZDgzXHViZDg1XHViZDg2XHViZDhiXHViZDhjXHViZDhkXHViZDhlXHViZDhmXHViZDkyXHViZDk0XHViZDk2XHViZDk3XHViZDk4XHViZDliXHViZDlkXHViZDllXHViZDlmXHViZGEwXHViZGExXHViZGEyXHViZGEz''@;'; put 'put ''XHViZGE1XHViZGE2XHViZGE3XHViZGE4XHViZGE5XHViZGFhXHViZGFiXHViZGFjXHViZGFkXHViZGFlXHViZGFmXHViZGIxXHViZGIyXHViZGIzXHViZGI0XHViZGI1XHViZGI2XHViZGI3XHViZGI5XHViZGJhXHViZGJiXHViZGJjXHViZGJkXHViZGJlXHViZGJmXHViZGMwXHViZGMxXHVi''@;'; put 'put ''ZGMyXHViZGMzXHViZGM0XHViZGM1XHViZGM2XHViZGM3XHViZGM4XHViZGM5XHViZGNhXHViZGNiXHViZGNjXHViZGNkXHViZGNlXHViZGNmXHViZGQwXHViZGQxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDhdW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMTQ4XVtnXV09Mzc4ODgrZyx5WzM3ODg4K2ddPV9bMTQ4XVtnXSk7Zm9yKF9bMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGQyXHViZGQzXHViZGQ2XHViZGQ3XHViZGQ5XHViZGRhXHViZGRiXHVi''@;'; put 'put ''ZGRkXHViZGRlXHViZGRmXHViZGUwXHViZGUxXHViZGUyXHViZGUzXHViZGU0XHViZGU1XHViZGU2XHViZGU3XHViZGU4XHViZGVhXHViZGViXHViZGVjXHViZGVkXHViZGVlXHViZGVmXHViZGYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGYyXHViZGYzXHViZGY1''@;'; put 'put ''XHViZGY2XHViZGY3XHViZGY5XHViZGZhXHViZGZiXHViZGZjXHViZGZkXHViZGZlXHViZGZmXHViZTAxXHViZTAyXHViZTA0XHViZTA2XHViZTA3XHViZTA4XHViZTA5XHViZTBhXHViZTBiXHViZTBlXHViZTBmXHViZTExXHViZTEyXHViZTEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHViZTE1XHViZTE2XHViZTE3XHViZTE4XHViZTE5XHViZTFhXHViZTFiXHViZTFlXHViZTIwXHViZTIxXHViZTIyXHViZTIzXHViZTI0XHViZTI1XHViZTI2XHViZTI3XHViZTI4XHViZTI5XHViZTJhXHViZTJiXHViZTJjXHViZTJkXHViZTJlXHViZTJmXHViZTMwXHViZTMx''@;'; put 'put ''XHViZTMyXHViZTMzXHViZTM0XHViZTM1XHViZTM2XHViZTM3XHViZTM4XHViZTM5XHViZTNhXHViZTNiXHViZTNjXHViZTNkXHViZTNlXHViZTNmXHViZTQwXHViZTQxXHViZTQyXHViZTQzXHViZTQ2XHViZTQ3XHViZTQ5XHViZTRhXHViZTRiXHViZTRkXHViZTRmXHViZTUwXHViZTUxXHVi''@;'; put 'put ''ZTUyXHViZTUzXHViZTU2XHViZTU4XHViZTVjXHViZTVkXHViZTVlXHViZTVmXHViZTYyXHViZTYzXHViZTY1XHViZTY2XHViZTY3XHViZTY5XHViZTZiXHViZTZjXHViZTZkXHViZTZlXHViZTZmXHViZTcyXHViZTc2XHViZTc3XHViZTc4XHViZTc5XHViZTdhXHViZTdlXHViZTdmXHViZTgx''@;'; put 'put ''XHViZTgyXHViZTgzXHViZTg1XHViZTg2XHViZTg3XHViZTg4XHViZTg5XHViZThhXHViZThiXHViZThlXHViZTkyXHViZTkzXHViZTk0XHViZTk1XHViZTk2XHViZTk3XHViZTlhXHViZTliXHViZTljXHViZTlkXHViZTllXHViZTlmXHViZWEwXHViZWExXHViZWEyXHViZWEzXHViZWE0XHVi''@;'; put 'put ''ZWE1XHViZWE2XHViZWE3XHViZWE5XHViZWFhXHViZWFiXHViZWFjXHViZWFkXHViZWFlXHViZWFmXHViZWIwXHViZWIxXHViZWIyXHViZWIzXHViZWI0XHViZWI1XHViZWI2XHViZWI3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDldW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMTQ5XVtnXV09MzgxNDQrZyx5WzM4MTQ0K2ddPV9bMTQ5XVtnXSk7Zm9yKF9bMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWI4XHViZWI5XHViZWJhXHViZWJiXHViZWJjXHVi''@;'; put 'put ''ZWJkXHViZWJlXHViZWJmXHViZWMwXHViZWMxXHViZWMyXHViZWMzXHViZWM0XHViZWM1XHViZWM2XHViZWM3XHViZWM4XHViZWM5XHViZWNhXHViZWNiXHViZWNjXHViZWNkXHViZWNlXHViZWNmXHViZWQyXHViZWQzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWQ1''@;'; put 'put ''XHViZWQ2XHViZWQ5XHViZWRhXHViZWRiXHViZWRjXHViZWRkXHViZWRlXHViZWRmXHViZWUxXHViZWUyXHViZWU2XHViZWU3XHViZWU4XHViZWU5XHViZWVhXHViZWViXHViZWVkXHViZWVlXHViZWVmXHViZWYwXHViZWYxXHViZWYyXHViZWYzXHViZWY0XHViZWY1XHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWY2XHViZWY3XHViZWY4XHViZWY5XHViZWZhXHViZWZiXHViZWZjXHViZWZkXHViZWZlXHViZWZmXHViZjAwXHViZjAyXHViZjAzXHViZjA0XHViZjA1XHViZjA2XHViZjA3XHViZjBhXHViZjBiXHViZjBjXHViZjBkXHViZjBlXHViZjBmXHViZjEw''@;'; put 'put ''XHViZjExXHViZjEyXHViZjEzXHViZjE0XHViZjE1XHViZjE2XHViZjE3XHViZjFhXHViZjFlXHViZjFmXHViZjIwXHViZjIxXHViZjIyXHViZjIzXHViZjI0XHViZjI1XHViZjI2XHViZjI3XHViZjI4XHViZjI5XHViZjJhXHViZjJiXHViZjJjXHViZjJkXHViZjJlXHViZjJmXHViZjMwXHVi''@;'; put 'put ''ZjMxXHViZjMyXHViZjMzXHViZjM0XHViZjM1XHViZjM2XHViZjM3XHViZjM4XHViZjM5XHViZjNhXHViZjNiXHViZjNjXHViZjNkXHViZjNlXHViZjNmXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5XHViZjRhXHViZjRiXHViZjRjXHViZjRkXHViZjRlXHViZjRmXHViZjUy''@;'; put 'put ''XHViZjUzXHViZjU0XHViZjU2XHViZjU3XHViZjU4XHViZjU5XHViZjVhXHViZjViXHViZjVjXHViZjVkXHViZjVlXHViZjVmXHViZjYwXHViZjYxXHViZjYyXHViZjYzXHViZjY0XHViZjY1XHViZjY2XHViZjY3XHViZjY4XHViZjY5XHViZjZhXHViZjZiXHViZjZjXHViZjZkXHViZjZlXHVi''@;'; put 'put ''ZjZmXHViZjcwXHViZjcxXHViZjcyXHViZjczXHViZjc0XHViZjc1XHViZjc2XHViZjc3XHViZjc4XHViZjc5XHViZjdhXHViZjdiXHViZjdjXHViZjdkXHViZjdlXHViZjdmXHViZjgwXHViZjgxXHViZjgyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUwXS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09X1sxNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUwXVtnXV09Mzg0MDArZyx5WzM4NDAwK2ddPV9bMTUwXVtnXSk7Zm9yKF9bMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZjgzXHViZjg0XHViZjg1XHVi''@;'; put 'put ''Zjg2XHViZjg3XHViZjg4XHViZjg5XHViZjhhXHViZjhiXHViZjhjXHViZjhkXHViZjhlXHViZjhmXHViZjkwXHViZjkxXHViZjkyXHViZjkzXHViZjk1XHViZjk2XHViZjk3XHViZjk4XHViZjk5XHViZjlhXHViZjliXHViZjljXHViZjlkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHViZjllXHViZjlmXHViZmEwXHViZmExXHViZmEyXHViZmEzXHViZmE0XHViZmE1XHViZmE2XHViZmE3XHViZmE4XHViZmE5XHViZmFhXHViZmFiXHViZmFjXHViZmFkXHViZmFlXHViZmFmXHViZmIxXHViZmIyXHViZmIzXHViZmI0XHViZmI1XHViZmI2XHViZmI3XHViZmI4XHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZmI5XHViZmJhXHViZmJiXHViZmJjXHViZmJkXHViZmJlXHViZmJmXHViZmMwXHViZmMxXHViZmMyXHViZmMzXHViZmM0XHViZmM2XHViZmM3XHViZmM4XHViZmM5XHViZmNhXHViZmNiXHViZmNlXHViZmNmXHViZmQxXHViZmQy''@;'; put 'put ''XHViZmQzXHViZmQ1XHViZmQ2XHViZmQ3XHViZmQ4XHViZmQ5XHViZmRhXHViZmRiXHViZmRkXHViZmRlXHViZmUwXHViZmUyXHViZmUzXHViZmU0XHViZmU1XHViZmU2XHViZmU3XHViZmU4XHViZmU5XHViZmVhXHViZmViXHViZmVjXHViZmVkXHViZmVlXHViZmVmXHViZmYwXHViZmYxXHVi''@;'; put 'put ''ZmYyXHViZmYzXHViZmY0XHViZmY1XHViZmY2XHViZmY3XHViZmY4XHViZmY5XHViZmZhXHViZmZiXHViZmZjXHViZmZkXHViZmZlXHViZmZmXHVjMDAwXHVjMDAxXHVjMDAyXHVjMDAzXHVjMDA0XHVjMDA1XHVjMDA2XHVjMDA3XHVjMDA4XHVjMDA5XHVjMDBhXHVjMDBiXHVjMDBjXHVjMDBk''@;'; put 'put ''XHVjMDBlXHVjMDBmXHVjMDEwXHVjMDExXHVjMDEyXHVjMDEzXHVjMDE0XHVjMDE1XHVjMDE2XHVjMDE3XHVjMDE4XHVjMDE5XHVjMDFhXHVjMDFiXHVjMDFjXHVjMDFkXHVjMDFlXHVjMDFmXHVjMDIwXHVjMDIxXHVjMDIyXHVjMDIzXHVjMDI0XHVjMDI1XHVjMDI2XHVjMDI3XHVjMDI4XHVj''@;'; put 'put ''MDI5XHVjMDJhXHVjMDJiXHVjMDJjXHVjMDJkXHVjMDJlXHVjMDJmXHVjMDMwXHVjMDMxXHVjMDMyXHVjMDMzXHVjMDM0XHVjMDM1XHVjMDM2XHVjMDM3XHVjMDM4XHVjMDM5XHVjMDNhXHVjMDNiXHVjMDNkXHVjMDNlXHVjMDNmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUxXS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09X1sxNTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUxXVtnXV09Mzg2NTYrZyx5WzM4NjU2K2ddPV9bMTUxXVtnXSk7Zm9yKF9bMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDQwXHVj''@;'; put 'put ''MDQxXHVjMDQyXHVjMDQzXHVjMDQ0XHVjMDQ1XHVjMDQ2XHVjMDQ3XHVjMDQ4XHVjMDQ5XHVjMDRhXHVjMDRiXHVjMDRjXHVjMDRkXHVjMDRlXHVjMDRmXHVjMDUwXHVjMDUyXHVjMDUzXHVjMDU0XHVjMDU1XHVjMDU2XHVjMDU3XHVjMDU5XHVjMDVhXHVjMDViXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVjMDVkXHVjMDVlXHVjMDVmXHVjMDYxXHVjMDYyXHVjMDYzXHVjMDY0XHVjMDY1XHVjMDY2XHVjMDY3XHVjMDZhXHVjMDZiXHVjMDZjXHVjMDZkXHVjMDZlXHVjMDZmXHVjMDcwXHVjMDcxXHVjMDcyXHVjMDczXHVjMDc0XHVjMDc1XHVjMDc2XHVjMDc3XHVj''@;'; put 'put ''MDc4XHVjMDc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDdhXHVjMDdiXHVjMDdjXHVjMDdkXHVjMDdlXHVjMDdmXHVjMDgwXHVjMDgxXHVjMDgyXHVjMDgzXHVjMDg0XHVjMDg1XHVjMDg2XHVjMDg3XHVjMDg4XHVjMDg5XHVjMDhhXHVjMDhiXHVjMDhjXHVjMDhk''@;'; put 'put ''XHVjMDhlXHVjMDhmXHVjMDkyXHVjMDkzXHVjMDk1XHVjMDk2XHVjMDk3XHVjMDk5XHVjMDlhXHVjMDliXHVjMDljXHVjMDlkXHVjMDllXHVjMDlmXHVjMGEyXHVjMGE0XHVjMGE2XHVjMGE3XHVjMGE4XHVjMGE5XHVjMGFhXHVjMGFiXHVjMGFlXHVjMGIxXHVjMGIyXHVjMGI3XHVjMGI4XHVj''@;'; put 'put ''MGI5XHVjMGJhXHVjMGJiXHVjMGJlXHVjMGMyXHVjMGMzXHVjMGM0XHVjMGM2XHVjMGM3XHVjMGNhXHVjMGNiXHVjMGNkXHVjMGNlXHVjMGNmXHVjMGQxXHVjMGQyXHVjMGQzXHVjMGQ0XHVjMGQ1XHVjMGQ2XHVjMGQ3XHVjMGRhXHVjMGRlXHVjMGRmXHVjMGUwXHVjMGUxXHVjMGUyXHVjMGUz''@;'; put 'put ''XHVjMGU2XHVjMGU3XHVjMGU5XHVjMGVhXHVjMGViXHVjMGVkXHVjMGVlXHVjMGVmXHVjMGYwXHVjMGYxXHVjMGYyXHVjMGYzXHVjMGY2XHVjMGY4XHVjMGZhXHVjMGZiXHVjMGZjXHVjMGZkXHVjMGZlXHVjMGZmXHVjMTAxXHVjMTAyXHVjMTAzXHVjMTA1XHVjMTA2XHVjMTA3XHVjMTA5XHVj''@;'; put 'put ''MTBhXHVjMTBiXHVjMTBjXHVjMTBkXHVjMTBlXHVjMTBmXHVjMTExXHVjMTEyXHVjMTEzXHVjMTE0XHVjMTE2XHVjMTE3XHVjMTE4XHVjMTE5XHVjMTFhXHVjMTFiXHVjMTIxXHVjMTIyXHVjMTI1XHVjMTI4XHVjMTI5XHVjMTJhXHVjMTJiXHVjMTJlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PV9bMTUyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUyXVtnXV09Mzg5MTIrZyx5WzM4OTEyK2ddPV9bMTUyXVtnXSk7Zm9yKF9bMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVjMTM3XHVjMTNhXHVjMTNiXHVjMTNkXHVjMTNlXHVjMTNmXHVjMTQxXHVjMTQyXHVjMTQzXHVjMTQ0XHVjMTQ1XHVjMTQ2XHVjMTQ3XHVjMTRhXHVjMTRlXHVjMTRmXHVjMTUwXHVjMTUxXHVjMTUyXHVjMTUzXHVjMTU2XHVjMTU3XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTU5XHVjMTVhXHVjMTViXHVjMTVkXHVjMTVlXHVjMTVmXHVjMTYwXHVjMTYxXHVjMTYyXHVjMTYzXHVjMTY2XHVjMTZhXHVjMTZiXHVjMTZjXHVjMTZkXHVjMTZlXHVjMTZmXHVjMTcxXHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2XHVj''@;'; put 'put ''MTc3XHVjMTc5XHVjMTdhXHVjMTdiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTdjXHVjMTdkXHVjMTdlXHVjMTdmXHVjMTgwXHVjMTgxXHVjMTgyXHVjMTgzXHVjMTg0XHVjMTg2XHVjMTg3XHVjMTg4XHVjMTg5XHVjMThhXHVjMThiXHVjMThmXHVjMTkxXHVjMTky''@;'; put 'put ''XHVjMTkzXHVjMTk1XHVjMTk3XHVjMTk4XHVjMTk5XHVjMTlhXHVjMTliXHVjMTllXHVjMWEwXHVjMWEyXHVjMWEzXHVjMWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVjMWIxXHVjMWIyXHVjMWIzXHVjMWI0XHVjMWI1XHVjMWI2XHVjMWI3XHVjMWI4XHVj''@;'; put 'put ''MWI5XHVjMWJhXHVjMWJiXHVjMWJjXHVjMWJlXHVjMWJmXHVjMWMwXHVjMWMxXHVjMWMyXHVjMWMzXHVjMWM1XHVjMWM2XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkXHVjMWNlXHVjMWNmXHVjMWQwXHVjMWQxXHVjMWQyXHVjMWQzXHVjMWQ1XHVjMWQ2XHVjMWQ5XHVjMWRhXHVjMWRi''@;'; put 'put ''XHVjMWRjXHVjMWRkXHVjMWRlXHVjMWRmXHVjMWUxXHVjMWUyXHVjMWUzXHVjMWU1XHVjMWU2XHVjMWU3XHVjMWU5XHVjMWVhXHVjMWViXHVjMWVjXHVjMWVkXHVjMWVlXHVjMWVmXHVjMWYyXHVjMWY0XHVjMWY1XHVjMWY2XHVjMWY3XHVjMWY4XHVjMWY5XHVjMWZhXHVjMWZiXHVjMWZlXHVj''@;'; put 'put ''MWZmXHVjMjAxXHVjMjAyXHVjMjAzXHVjMjA1XHVjMjA2XHVjMjA3XHVjMjA4XHVjMjA5XHVjMjBhXHVjMjBiXHVjMjBlXHVjMjEwXHVjMjEyXHVjMjEzXHVjMjE0XHVjMjE1XHVjMjE2XHVjMjE3XHVjMjFhXHVjMjFiXHVjMjFkXHVjMjFlXHVjMjIxXHVjMjIyXHVjMjIzXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPV9bMTUzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUzXVtnXV09MzkxNjgrZyx5WzM5MTY4K2ddPV9bMTUzXVtnXSk7Zm9yKF9bMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVjMjI0XHVjMjI1XHVjMjI2XHVjMjI3XHVjMjJhXHVjMjJjXHVjMjJlXHVjMjMwXHVjMjMzXHVjMjM1XHVjMjM2XHVjMjM3XHVjMjM4XHVjMjM5XHVjMjNhXHVjMjNiXHVjMjNjXHVjMjNkXHVjMjNlXHVjMjNmXHVjMjQwXHVjMjQxXHVjMjQyXHVjMjQzXHVjMjQ0''@;'; put 'put ''XHVjMjQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjQ2XHVjMjQ3XHVjMjQ5XHVjMjRhXHVjMjRiXHVjMjRjXHVjMjRkXHVjMjRlXHVjMjRmXHVjMjUyXHVjMjUzXHVjMjU1XHVjMjU2XHVjMjU3XHVjMjU5XHVjMjVhXHVjMjViXHVjMjVjXHVjMjVkXHVjMjVlXHVj''@;'; put 'put ''MjVmXHVjMjYxXHVjMjYyXHVjMjYzXHVjMjY0XHVjMjY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjY3XHVjMjY4XHVjMjY5XHVjMjZhXHVjMjZiXHVjMjZlXHVjMjZmXHVjMjcxXHVjMjcyXHVjMjczXHVjMjc1XHVjMjc2XHVjMjc3XHVjMjc4XHVjMjc5XHVjMjdh''@;'; put 'put ''XHVjMjdiXHVjMjdlXHVjMjgwXHVjMjgyXHVjMjgzXHVjMjg0XHVjMjg1XHVjMjg2XHVjMjg3XHVjMjhhXHVjMjhiXHVjMjhjXHVjMjhkXHVjMjhlXHVjMjhmXHVjMjkxXHVjMjkyXHVjMjkzXHVjMjk0XHVjMjk1XHVjMjk2XHVjMjk3XHVjMjk5XHVjMjlhXHVjMjljXHVjMjllXHVjMjlmXHVj''@;'; put 'put ''MmEwXHVjMmExXHVjMmEyXHVjMmEzXHVjMmE2XHVjMmE3XHVjMmE5XHVjMmFhXHVjMmFiXHVjMmFlXHVjMmFmXHVjMmIwXHVjMmIxXHVjMmIyXHVjMmIzXHVjMmI2XHVjMmI4XHVjMmJhXHVjMmJiXHVjMmJjXHVjMmJkXHVjMmJlXHVjMmJmXHVjMmMwXHVjMmMxXHVjMmMyXHVjMmMzXHVjMmM0''@;'; put 'put ''XHVjMmM1XHVjMmM2XHVjMmM3XHVjMmM4XHVjMmM5XHVjMmNhXHVjMmNiXHVjMmNjXHVjMmNkXHVjMmNlXHVjMmNmXHVjMmQwXHVjMmQxXHVjMmQyXHVjMmQzXHVjMmQ0XHVjMmQ1XHVjMmQ2XHVjMmQ3XHVjMmQ4XHVjMmQ5XHVjMmRhXHVjMmRiXHVjMmRlXHVjMmRmXHVjMmUxXHVjMmUyXHVj''@;'; put 'put ''MmU1XHVjMmU2XHVjMmU3XHVjMmU4XHVjMmU5XHVjMmVhXHVjMmVlXHVjMmYwXHVjMmYyXHVjMmYzXHVjMmY0XHVjMmY1XHVjMmY3XHVjMmZhXHVjMmZkXHVjMmZlXHVjMmZmXHVjMzAxXHVjMzAyXHVjMzAzXHVjMzA0XHVjMzA1XHVjMzA2XHVjMzA3XHVjMzBhXHVjMzBiXHVjMzBlXHVjMzBm''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU0XVtnXV09Mzk0MjQrZyx5WzM5NDI0K2ddPV9bMTU0XVtnXSk7Zm9yKF9bMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzEwXHVjMzExXHVjMzEyXHVjMzE2XHVjMzE3XHVjMzE5XHVjMzFhXHVjMzFiXHVjMzFkXHVjMzFlXHVjMzFmXHVjMzIwXHVjMzIxXHVjMzIyXHVjMzIzXHVjMzI2XHVjMzI3XHVjMzJhXHVjMzJiXHVjMzJjXHVjMzJkXHVjMzJlXHVjMzJm''@;'; put 'put ''XHVjMzMwXHVjMzMxXHVjMzMyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzMzXHVjMzM0XHVjMzM1XHVjMzM2XHVjMzM3XHVjMzM4XHVjMzM5XHVjMzNhXHVjMzNiXHVjMzNjXHVjMzNkXHVjMzNlXHVjMzNmXHVjMzQwXHVjMzQxXHVjMzQyXHVjMzQzXHVjMzQ0XHVj''@;'; put 'put ''MzQ2XHVjMzQ3XHVjMzQ4XHVjMzQ5XHVjMzRhXHVjMzRiXHVjMzRjXHVjMzRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzRlXHVjMzRmXHVjMzUwXHVjMzUxXHVjMzUyXHVjMzUzXHVjMzU0XHVjMzU1XHVjMzU2XHVjMzU3XHVjMzU4XHVjMzU5XHVjMzVhXHVjMzVi''@;'; put 'put ''XHVjMzVjXHVjMzVkXHVjMzVlXHVjMzVmXHVjMzYwXHVjMzYxXHVjMzYyXHVjMzYzXHVjMzY0XHVjMzY1XHVjMzY2XHVjMzY3XHVjMzZhXHVjMzZiXHVjMzZkXHVjMzZlXHVjMzZmXHVjMzcxXHVjMzczXHVjMzc0XHVjMzc1XHVjMzc2XHVjMzc3XHVjMzdhXHVjMzdiXHVjMzdlXHVjMzdmXHVj''@;'; put 'put ''MzgwXHVjMzgxXHVjMzgyXHVjMzgzXHVjMzg1XHVjMzg2XHVjMzg3XHVjMzg5XHVjMzhhXHVjMzhiXHVjMzhkXHVjMzhlXHVjMzhmXHVjMzkwXHVjMzkxXHVjMzkyXHVjMzkzXHVjMzk0XHVjMzk1XHVjMzk2XHVjMzk3XHVjMzk4XHVjMzk5XHVjMzlhXHVjMzliXHVjMzljXHVjMzlkXHVjMzll''@;'; put 'put ''XHVjMzlmXHVjM2EwXHVjM2ExXHVjM2EyXHVjM2EzXHVjM2E0XHVjM2E1XHVjM2E2XHVjM2E3XHVjM2E4XHVjM2E5XHVjM2FhXHVjM2FiXHVjM2FjXHVjM2FkXHVjM2FlXHVjM2FmXHVjM2IwXHVjM2IxXHVjM2IyXHVjM2IzXHVjM2I0XHVjM2I1XHVjM2I2XHVjM2I3XHVjM2I4XHVjM2I5XHVj''@;'; put 'put ''M2JhXHVjM2JiXHVjM2JjXHVjM2JkXHVjM2JlXHVjM2JmXHVjM2MxXHVjM2MyXHVjM2MzXHVjM2M0XHVjM2M1XHVjM2M2XHVjM2M3XHVjM2M4XHVjM2M5XHVjM2NhXHVjM2NiXHVjM2NjXHVjM2NkXHVjM2NlXHVjM2NmXHVjM2QwXHVjM2QxXHVjM2QyXHVjM2QzXHVjM2Q0XHVjM2Q1XHVjM2Q2''@;'; put 'put ''XHVjM2Q3XHVjM2RhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU1XVtnXV09Mzk2ODArZyx5WzM5NjgwK2ddPV9bMTU1XVtnXSk7Zm9yKF9bMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2RiXHVjM2RkXHVjM2RlXHVjM2UxXHVjM2UzXHVjM2U0XHVjM2U1XHVjM2U2XHVjM2U3XHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlXHVjM2VmXHVjM2YwXHVjM2YxXHVjM2YyXHVjM2YzXHVjM2Y2XHVjM2Y3XHVjM2Y5''@;'; put 'put ''XHVjM2ZhXHVjM2ZiXHVjM2ZjXHVjM2ZkXHVjM2ZlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2ZmXHVjNDAwXHVjNDAxXHVjNDAyXHVjNDAzXHVjNDA0XHVjNDA1XHVjNDA2XHVjNDA3XHVjNDA5XHVjNDBhXHVjNDBiXHVjNDBjXHVjNDBkXHVjNDBlXHVjNDBmXHVj''@;'; put 'put ''NDExXHVjNDEyXHVjNDEzXHVjNDE0XHVjNDE1XHVjNDE2XHVjNDE3XHVjNDE4XHVjNDE5XHVjNDFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNDFiXHVjNDFjXHVjNDFkXHVjNDFlXHVjNDFmXHVjNDIwXHVjNDIxXHVjNDIyXHVjNDIzXHVjNDI1XHVjNDI2XHVjNDI3''@;'; put 'put ''XHVjNDI4XHVjNDI5XHVjNDJhXHVjNDJiXHVjNDJkXHVjNDJlXHVjNDJmXHVjNDMxXHVjNDMyXHVjNDMzXHVjNDM1XHVjNDM2XHVjNDM3XHVjNDM4XHVjNDM5XHVjNDNhXHVjNDNiXHVjNDNlXHVjNDNmXHVjNDQwXHVjNDQxXHVjNDQyXHVjNDQzXHVjNDQ0XHVjNDQ1XHVjNDQ2XHVjNDQ3XHVj''@;'; put 'put ''NDQ5XHVjNDRhXHVjNDRiXHVjNDRjXHVjNDRkXHVjNDRlXHVjNDRmXHVjNDUwXHVjNDUxXHVjNDUyXHVjNDUzXHVjNDU0XHVjNDU1XHVjNDU2XHVjNDU3XHVjNDU4XHVjNDU5XHVjNDVhXHVjNDViXHVjNDVjXHVjNDVkXHVjNDVlXHVjNDVmXHVjNDYwXHVjNDYxXHVjNDYyXHVjNDYzXHVjNDY2''@;'; put 'put ''XHVjNDY3XHVjNDY5XHVjNDZhXHVjNDZiXHVjNDZkXHVjNDZlXHVjNDZmXHVjNDcwXHVjNDcxXHVjNDcyXHVjNDczXHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhXHVjNDdiXHVjNDdjXHVjNDdkXHVjNDdlXHVjNDdmXHVjNDgxXHVjNDgyXHVjNDgzXHVjNDg0XHVjNDg1XHVjNDg2XHVjNDg3XHVj''@;'; put 'put ''NDg4XHVjNDg5XHVjNDhhXHVjNDhiXHVjNDhjXHVjNDhkXHVjNDhlXHVjNDhmXHVjNDkwXHVjNDkxXHVjNDkyXHVjNDkzXHVjNDk1XHVjNDk2XHVjNDk3XHVjNDk4XHVjNDk5XHVjNDlhXHVjNDliXHVjNDlkXHVjNDllXHVjNDlmXHVjNGEwXHVjNGExXHVjNGEyXHVjNGEzXHVjNGE0XHVjNGE1''@;'; put 'put ''XHVjNGE2XHVjNGE3XHVjNGE4XHVjNGE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU2XVtnXV09Mzk5MzYrZyx5WzM5OTM2K2ddPV9bMTU2XVtnXSk7Zm9yKF9bMTU3XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGFhXHVjNGFiXHVjNGFjXHVjNGFkXHVjNGFlXHVjNGFmXHVjNGIwXHVjNGIxXHVjNGIyXHVjNGIzXHVjNGI0XHVjNGI1XHVjNGI2XHVjNGI3XHVjNGI5XHVjNGJhXHVjNGJiXHVjNGJkXHVjNGJl''@;'; put 'put ''XHVjNGJmXHVjNGMwXHVjNGMxXHVjNGMyXHVjNGMzXHVjNGM0XHVjNGM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGM2XHVjNGM3XHVjNGM4XHVjNGM5XHVjNGNhXHVjNGNiXHVjNGNjXHVjNGNkXHVjNGNlXHVjNGNmXHVjNGQwXHVjNGQxXHVjNGQyXHVjNGQzXHVj''@;'; put 'put ''NGQ0XHVjNGQ1XHVjNGQ2XHVjNGQ3XHVjNGQ4XHVjNGQ5XHVjNGRhXHVjNGRiXHVjNGRjXHVjNGRkXHVjNGRlXHVjNGRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGUwXHVjNGUxXHVjNGUyXHVjNGUzXHVjNGU0XHVjNGU1XHVjNGU2XHVjNGU3XHVjNGU4XHVjNGVh''@;'; put 'put ''XHVjNGViXHVjNGVjXHVjNGVkXHVjNGVlXHVjNGVmXHVjNGYyXHVjNGYzXHVjNGY1XHVjNGY2XHVjNGY3XHVjNGY5XHVjNGZiXHVjNGZjXHVjNGZkXHVjNGZlXHVjNTAyXHVjNTAzXHVjNTA0XHVjNTA1XHVjNTA2XHVjNTA3XHVjNTA4XHVjNTA5XHVjNTBhXHVjNTBiXHVjNTBkXHVjNTBlXHVj''@;'; put 'put ''NTBmXHVjNTExXHVjNTEyXHVjNTEzXHVjNTE1XHVjNTE2XHVjNTE3XHVjNTE4XHVjNTE5XHVjNTFhXHVjNTFiXHVjNTFkXHVjNTFlXHVjNTFmXHVjNTIwXHVjNTIxXHVjNTIyXHVjNTIzXHVjNTI0XHVjNTI1XHVjNTI2XHVjNTI3XHVjNTJhXHVjNTJiXHVjNTJkXHVjNTJlXHVjNTJmXHVjNTMx''@;'; put 'put ''XHVjNTMyXHVjNTMzXHVjNTM0XHVjNTM1XHVjNTM2XHVjNTM3XHVjNTNhXHVjNTNjXHVjNTNlXHVjNTNmXHVjNTQwXHVjNTQxXHVjNTQyXHVjNTQzXHVjNTQ2XHVjNTQ3XHVjNTRiXHVjNTRmXHVjNTUwXHVjNTUxXHVjNTUyXHVjNTU2XHVjNTVhXHVjNTViXHVjNTVjXHVjNTVmXHVjNTYyXHVj''@;'; put 'put ''NTYzXHVjNTY1XHVjNTY2XHVjNTY3XHVjNTY5XHVjNTZhXHVjNTZiXHVjNTZjXHVjNTZkXHVjNTZlXHVjNTZmXHVjNTcyXHVjNTc2XHVjNTc3XHVjNTc4XHVjNTc5XHVjNTdhXHVjNTdiXHVjNTdlXHVjNTdmXHVjNTgxXHVjNTgyXHVjNTgzXHVjNTg1XHVjNTg2XHVjNTg4XHVjNTg5XHVjNThh''@;'; put 'put ''XHVjNThiXHVjNThlXHVjNTkwXHVjNTkyXHVjNTkzXHVjNTk0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU3XVtnXV09NDAxOTIrZyx5WzQwMTkyK2ddPV9bMTU3XVtnXSk7Zm9yKF9bMTU4''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNTk2XHVjNTk5XHVjNTlhXHVjNTliXHVjNTlkXHVjNTllXHVjNTlmXHVjNWExXHVjNWEyXHVjNWEzXHVjNWE0XHVjNWE1XHVjNWE2XHVjNWE3XHVjNWE4XHVjNWFhXHVjNWFi''@;'; put 'put ''XHVjNWFjXHVjNWFkXHVjNWFlXHVjNWFmXHVjNWIwXHVjNWIxXHVjNWIyXHVjNWIzXHVjNWI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWI3XHVjNWJhXHVjNWJmXHVjNWMwXHVjNWMxXHVjNWMyXHVjNWMzXHVjNWNiXHVjNWNkXHVjNWNmXHVjNWQyXHVjNWQzXHVj''@;'; put 'put ''NWQ1XHVjNWQ2XHVjNWQ3XHVjNWQ5XHVjNWRhXHVjNWRiXHVjNWRjXHVjNWRkXHVjNWRlXHVjNWRmXHVjNWUyXHVjNWU0XHVjNWU2XHVjNWU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWU4XHVjNWU5XHVjNWVhXHVjNWViXHVjNWVmXHVjNWYxXHVjNWYyXHVjNWYz''@;'; put 'put ''XHVjNWY1XHVjNWY4XHVjNWY5XHVjNWZhXHVjNWZiXHVjNjAyXHVjNjAzXHVjNjA0XHVjNjA5XHVjNjBhXHVjNjBiXHVjNjBkXHVjNjBlXHVjNjBmXHVjNjExXHVjNjEyXHVjNjEzXHVjNjE0XHVjNjE1XHVjNjE2XHVjNjE3XHVjNjFhXHVjNjFkXHVjNjFlXHVjNjFmXHVjNjIwXHVjNjIxXHVj''@;'; put 'put ''NjIyXHVjNjIzXHVjNjI2XHVjNjI3XHVjNjI5XHVjNjJhXHVjNjJiXHVjNjJmXHVjNjMxXHVjNjMyXHVjNjM2XHVjNjM4XHVjNjNhXHVjNjNjXHVjNjNkXHVjNjNlXHVjNjNmXHVjNjQyXHVjNjQzXHVjNjQ1XHVjNjQ2XHVjNjQ3XHVjNjQ5XHVjNjRhXHVjNjRiXHVjNjRjXHVjNjRkXHVjNjRl''@;'; put 'put ''XHVjNjRmXHVjNjUyXHVjNjU2XHVjNjU3XHVjNjU4XHVjNjU5XHVjNjVhXHVjNjViXHVjNjVlXHVjNjVmXHVjNjYxXHVjNjYyXHVjNjYzXHVjNjY0XHVjNjY1XHVjNjY2XHVjNjY3XHVjNjY4XHVjNjY5XHVjNjZhXHVjNjZiXHVjNjZkXHVjNjZlXHVjNjcwXHVjNjcyXHVjNjczXHVjNjc0XHVj''@;'; put 'put ''Njc1XHVjNjc2XHVjNjc3XHVjNjdhXHVjNjdiXHVjNjdkXHVjNjdlXHVjNjdmXHVjNjgxXHVjNjgyXHVjNjgzXHVjNjg0XHVjNjg1XHVjNjg2XHVjNjg3XHVjNjhhXHVjNjhjXHVjNjhlXHVjNjhmXHVjNjkwXHVjNjkxXHVjNjkyXHVjNjkzXHVjNjk2XHVjNjk3XHVjNjk5XHVjNjlhXHVjNjli''@;'; put 'put ''XHVjNjlkXHVjNjllXHVjNjlmXHVjNmEwXHVjNmExXHVjNmEyXHVjNmEzXHVjNmE2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU4XVtnXV09NDA0NDgrZyx5WzQwNDQ4K2ddPV9bMTU4XVtn''@;'; put 'put ''XSk7Zm9yKF9bMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmE4XHVjNmFhXHVjNmFiXHVjNmFjXHVjNmFkXHVjNmFlXHVjNmFmXHVjNmIyXHVjNmIzXHVjNmI1XHVjNmI2XHVjNmI3XHVjNmJiXHVjNmJjXHVjNmJk''@;'; put 'put ''XHVjNmJlXHVjNmJmXHVjNmMyXHVjNmM0XHVjNmM2XHVjNmM3XHVjNmM4XHVjNmM5XHVjNmNhXHVjNmNiXHVjNmNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQzXHVjNmQ1XHVjNmQ2XHVjNmQ3XHVjNmQ4XHVjNmQ5XHVjNmRhXHVj''@;'; put 'put ''NmRiXHVjNmRlXHVjNmRmXHVjNmUyXHVjNmUzXHVjNmU0XHVjNmU1XHVjNmU2XHVjNmU3XHVjNmVhXHVjNmViXHVjNmVkXHVjNmVlXHVjNmVmXHVjNmYxXHVjNmYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmYzXHVjNmY0XHVjNmY1XHVjNmY2XHVjNmY3XHVjNmZh''@;'; put 'put ''XHVjNmZiXHVjNmZjXHVjNmZlXHVjNmZmXHVjNzAwXHVjNzAxXHVjNzAyXHVjNzAzXHVjNzA2XHVjNzA3XHVjNzA5XHVjNzBhXHVjNzBiXHVjNzBkXHVjNzBlXHVjNzBmXHVjNzEwXHVjNzExXHVjNzEyXHVjNzEzXHVjNzE2XHVjNzE4XHVjNzFhXHVjNzFiXHVjNzFjXHVjNzFkXHVjNzFlXHVj''@;'; put 'put ''NzFmXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVjNzI3XHVjNzI5XHVjNzJhXHVjNzJiXHVjNzJjXHVjNzJkXHVjNzJlXHVjNzJmXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVjNzNmXHVjNzQxXHVjNzQyXHVjNzQzXHVjNzQ1XHVjNzQ2XHVjNzQ3''@;'; put 'put ''XHVjNzQ4XHVjNzQ5XHVjNzRiXHVjNzRlXHVjNzUwXHVjNzU5XHVjNzVhXHVjNzViXHVjNzVkXHVjNzVlXHVjNzVmXHVjNzYxXHVjNzYyXHVjNzYzXHVjNzY0XHVjNzY1XHVjNzY2XHVjNzY3XHVjNzY5XHVjNzZhXHVjNzZjXHVjNzZkXHVjNzZlXHVjNzZmXHVjNzcwXHVjNzcxXHVjNzcyXHVj''@;'; put 'put ''NzczXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVjNzdiXHVjNzdmXHVjNzgwXHVjNzgxXHVjNzgyXHVjNzg2XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVjNzk5XHVjNzliXHVjNzljXHVjNzlkXHVjNzllXHVjNzlmXHVjN2EyXHVjN2E3XHVjN2E4XHVjN2E5''@;'; put 'put ''XHVjN2FhXHVjN2FiXHVjN2FlXHVjN2FmXHVjN2IxXHVjN2IyXHVjN2IzXHVjN2I1XHVjN2I2XHVjN2I3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU5XVtnXV09NDA3MDQrZyx5WzQwNzA0''@;'; put 'put ''K2ddPV9bMTU5XVtnXSk7Zm9yKF9bMTYwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2I4XHVjN2I5XHVjN2JhXHVjN2JiXHVjN2JlXHVjN2MyXHVjN2MzXHVjN2M0XHVjN2M1XHVjN2M2XHVjN2M3XHVjN2NhXHVjN2Ni''@;'; put 'put ''XHVjN2NkXHVjN2NmXHVjN2QxXHVjN2QyXHVjN2QzXHVjN2Q0XHVjN2Q1XHVjN2Q2XHVjN2Q3XHVjN2Q5XHVjN2RhXHVjN2RiXHVjN2RjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2RlXHVjN2RmXHVjN2UwXHVjN2UxXHVjN2UyXHVjN2UzXHVjN2U1XHVjN2U2XHVj''@;'; put 'put ''N2U3XHVjN2U5XHVjN2VhXHVjN2ViXHVjN2VkXHVjN2VlXHVjN2VmXHVjN2YwXHVjN2YxXHVjN2YyXHVjN2YzXHVjN2Y0XHVjN2Y1XHVjN2Y2XHVjN2Y3XHVjN2Y4XHVjN2Y5XHVjN2ZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2ZiXHVjN2ZjXHVjN2ZkXHVjN2Zl''@;'; put 'put ''XHVjN2ZmXHVjODAyXHVjODAzXHVjODA1XHVjODA2XHVjODA3XHVjODA5XHVjODBiXHVjODBjXHVjODBkXHVjODBlXHVjODBmXHVjODEyXHVjODE0XHVjODE3XHVjODE4XHVjODE5XHVjODFhXHVjODFiXHVjODFlXHVjODFmXHVjODIxXHVjODIyXHVjODIzXHVjODI1XHVjODI2XHVjODI3XHVj''@;'; put 'put ''ODI4XHVjODI5XHVjODJhXHVjODJiXHVjODJlXHVjODMwXHVjODMyXHVjODMzXHVjODM0XHVjODM1XHVjODM2XHVjODM3XHVjODM5XHVjODNhXHVjODNiXHVjODNkXHVjODNlXHVjODNmXHVjODQxXHVjODQyXHVjODQzXHVjODQ0XHVjODQ1XHVjODQ2XHVjODQ3XHVjODRhXHVjODRiXHVjODRl''@;'; put 'put ''XHVjODRmXHVjODUwXHVjODUxXHVjODUyXHVjODUzXHVjODU1XHVjODU2XHVjODU3XHVjODU4XHVjODU5XHVjODVhXHVjODViXHVjODVjXHVjODVkXHVjODVlXHVjODVmXHVjODYwXHVjODYxXHVjODYyXHVjODYzXHVjODY0XHVjODY1XHVjODY2XHVjODY3XHVjODY4XHVjODY5XHVjODZhXHVj''@;'; put 'put ''ODZiXHVjODZjXHVjODZkXHVjODZlXHVjODZmXHVjODcyXHVjODczXHVjODc1XHVjODc2XHVjODc3XHVjODc5XHVjODdiXHVjODdjXHVjODdkXHVjODdlXHVjODdmXHVjODgyXHVjODg0XHVjODg4XHVjODg5XHVjODhhXHVjODhlXHVjODhmXHVjODkwXHVjODkxXHVjODkyXHVjODkzXHVjODk1''@;'; put 'put ''XHVjODk2XHVjODk3XHVjODk4XHVjODk5XHVjODlhXHVjODliXHVjODljXHVjODllXHVjOGEwXHVjOGEyXHVjOGEzXHVjOGE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYwXVtnXV09NDA5''@;'; put 'put ''NjArZyx5WzQwOTYwK2ddPV9bMTYwXVtnXSk7Zm9yKF9bMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGE1XHVjOGE2XHVjOGE3XHVjOGE5XHVjOGFhXHVjOGFiXHVjOGFjXHVjOGFkXHVjOGFlXHVjOGFmXHVjOGIw''@;'; put 'put ''XHVjOGIxXHVjOGIyXHVjOGIzXHVjOGI0XHVjOGI1XHVjOGI2XHVjOGI3XHVjOGI4XHVjOGI5XHVjOGJhXHVjOGJiXHVjOGJlXHVjOGJmXHVjOGMwXHVjOGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGMyXHVjOGMzXHVjOGM1XHVjOGM2XHVjOGM3XHVjOGM5XHVj''@;'; put 'put ''OGNhXHVjOGNiXHVjOGNkXHVjOGNlXHVjOGNmXHVjOGQwXHVjOGQxXHVjOGQyXHVjOGQzXHVjOGQ2XHVjOGQ4XHVjOGRhXHVjOGRiXHVjOGRjXHVjOGRkXHVjOGRlXHVjOGRmXHVjOGUyXHVjOGUzXHVjOGU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGU2XHVjOGU3''@;'; put 'put ''XHVjOGU4XHVjOGU5XHVjOGVhXHVjOGViXHVjOGVjXHVjOGVkXHVjOGVlXHVjOGVmXHVjOGYwXHVjOGYxXHVjOGYyXHVjOGYzXHVjOGY0XHVjOGY2XHVjOGY3XHVjOGY4XHVjOGY5XHVjOGZhXHVjOGZiXHVjOGZlXHVjOGZmXHVjOTAxXHVjOTAyXHVjOTAzXHVjOTA3XHVjOTA4XHVjOTA5XHVj''@;'; put 'put ''OTBhXHVjOTBiXHVjOTBlXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MjAyNVx1MjAyNlx4YThcdTMwMDNceGFkXHUyMDE1XHUyMjI1XHVmZjNjXHUyMjNjXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBl''@;'; put 'put ''XHUzMDBmXHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjYwXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM0XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1MjEyYlx1ZmZlMFx1ZmZlMVx1ZmZlNVx1MjY0Mlx1MjY0MFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx4YTdc''@;'; put 'put ''dTIwM2JcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIy''@;'; put 'put ''MmNcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjlcdTIyMjdcdTIyMjhcdWZmZTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjFdW2ddXT00MTIxNitn''@;'; put 'put ''LHlbNDEyMTYrZ109X1sxNjFdW2ddKTtmb3IoX1sxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MTBcdWM5MTJcdWM5MTNcdWM5MTRcdWM5MTVcdWM5MTZcdWM5MTdcdWM5MTlcdWM5MWFcdWM5MWJcdWM5MWNcdWM5''@;'; put 'put ''MWRcdWM5MWVcdWM5MWZcdWM5MjBcdWM5MjFcdWM5MjJcdWM5MjNcdWM5MjRcdWM5MjVcdWM5MjZcdWM5MjdcdWM5MjhcdWM5MjlcdWM5MmFcdWM5MmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MmRcdWM5MmVcdWM5MmZcdWM5MzBcdWM5MzFcdWM5MzJcdWM5MzNc''@;'; put 'put ''dWM5MzVcdWM5MzZcdWM5MzdcdWM5MzhcdWM5MzlcdWM5M2FcdWM5M2JcdWM5M2NcdWM5M2RcdWM5M2VcdWM5M2ZcdWM5NDBcdWM5NDFcdWM5NDJcdWM5NDNcdWM5NDRcdWM5NDVcdWM5NDZcdWM5NDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NDhcdWM5NDlcdWM5''@;'; put 'put ''NGFcdWM5NGJcdWM5NGNcdWM5NGRcdWM5NGVcdWM5NGZcdWM5NTJcdWM5NTNcdWM5NTVcdWM5NTZcdWM5NTdcdWM5NTlcdWM5NWFcdWM5NWJcdWM5NWNcdWM5NWRcdWM5NWVcdWM5NWZcdWM5NjJcdWM5NjRcdWM5NjVcdWM5NjZcdWM5NjdcdWM5NjhcdWM5NjlcdWM5NmFcdWM5NmJcdWM5NmRc''@;'; put 'put ''dWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNceGI0XHVmZjVlXHUwMmM3XHUwMmQ4XHUwMmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEwOVx1MjAzMFx1MjVjMVx1MjVjMFx1MjViN1x1MjViNlx1MjY2NFx1''@;'; put 'put ''MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1MjI5OVx1MjVjOFx1MjVhM1x1MjVkMFx1MjVkMVx1MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1MjYxZVx4YjZcdTIwMjBcdTIwMjFcdTIxOTVcdTIxOTdcdTIxOTlc''@;'; put 'put ''dTIxOTZcdTIxOThcdTI2NmRcdTI2NjlcdTI2NmFcdTI2NmNcdTMyN2ZcdTMyMWNcdTIxMTZcdTMzYzdcdTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYyXVtnXV09NDE0NzIrZyx5''@;'; put 'put ''WzQxNDcyK2ddPV9bMTYyXVtnXSk7Zm9yKF9bMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTcxXHVjOTcyXHVjOTczXHVjOTc1XHVjOTc2XHVjOTc3XHVjOTc4XHVjOTc5XHVjOTdhXHVjOTdiXHVjOTdkXHVjOTdl''@;'; put 'put ''XHVjOTdmXHVjOTgwXHVjOTgxXHVjOTgyXHVjOTgzXHVjOTg0XHVjOTg1XHVjOTg2XHVjOTg3XHVjOThhXHVjOThiXHVjOThkXHVjOThlXHVjOThmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTkxXHVjOTkyXHVjOTkzXHVjOTk0XHVjOTk1XHVjOTk2XHVjOTk3XHVj''@;'; put 'put ''OTlhXHVjOTljXHVjOTllXHVjOTlmXHVjOWEwXHVjOWExXHVjOWEyXHVjOWEzXHVjOWE0XHVjOWE1XHVjOWE2XHVjOWE3XHVjOWE4XHVjOWE5XHVjOWFhXHVjOWFiXHVjOWFjXHVjOWFkXHVjOWFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWFmXHVjOWIwXHVjOWIx''@;'; put 'put ''XHVjOWIyXHVjOWIzXHVjOWI0XHVjOWI1XHVjOWI2XHVjOWI3XHVjOWI4XHVjOWI5XHVjOWJhXHVjOWJiXHVjOWJjXHVjOWJkXHVjOWJlXHVjOWJmXHVjOWMyXHVjOWMzXHVjOWM1XHVjOWM2XHVjOWM5XHVjOWNiXHVjOWNjXHVjOWNkXHVjOWNlXHVjOWNmXHVjOWQyXHVjOWQ0XHVjOWQ3XHVj''@;'; put 'put ''OWQ4XHVjOWRiXHVmZjAxXHVmZjAyXHVmZjAzXHVmZjA0XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFh''@;'; put 'put ''XHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVm''@;'; put 'put ''ZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZmU2XHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUx''@;'; put 'put ''XHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYzXVtn''@;'; put 'put ''XV09NDE3MjgrZyx5WzQxNzI4K2ddPV9bMTYzXVtnXSk7Zm9yKF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWRlXHVjOWRmXHVjOWUxXHVjOWUzXHVjOWU1XHVjOWU2XHVjOWU4XHVjOWU5XHVjOWVhXHVjOWVi''@;'; put 'put ''XHVjOWVlXHVjOWYyXHVjOWYzXHVjOWY0XHVjOWY1XHVjOWY2XHVjOWY3XHVjOWZhXHVjOWZiXHVjOWZkXHVjOWZlXHVjOWZmXHVjYTAxXHVjYTAyXHVjYTAzXHVjYTA0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTA1XHVjYTA2XHVjYTA3XHVjYTBhXHVjYTBlXHVj''@;'; put 'put ''YTBmXHVjYTEwXHVjYTExXHVjYTEyXHVjYTEzXHVjYTE1XHVjYTE2XHVjYTE3XHVjYTE5XHVjYTFhXHVjYTFiXHVjYTFjXHVjYTFkXHVjYTFlXHVjYTFmXHVjYTIwXHVjYTIxXHVjYTIyXHVjYTIzXHVjYTI0XHVjYTI1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTI2''@;'; put 'put ''XHVjYTI3XHVjYTI4XHVjYTJhXHVjYTJiXHVjYTJjXHVjYTJkXHVjYTJlXHVjYTJmXHVjYTMwXHVjYTMxXHVjYTMyXHVjYTMzXHVjYTM0XHVjYTM1XHVjYTM2XHVjYTM3XHVjYTM4XHVjYTM5XHVjYTNhXHVjYTNiXHVjYTNjXHVjYTNkXHVjYTNlXHVjYTNmXHVjYTQwXHVjYTQxXHVjYTQyXHVj''@;'; put 'put ''YTQzXHVjYTQ0XHVjYTQ1XHVjYTQ2XHUzMTMxXHUzMTMyXHUzMTMzXHUzMTM0XHUzMTM1XHUzMTM2XHUzMTM3XHUzMTM4XHUzMTM5XHUzMTNhXHUzMTNiXHUzMTNjXHUzMTNkXHUzMTNlXHUzMTNmXHUzMTQwXHUzMTQxXHUzMTQyXHUzMTQzXHUzMTQ0XHUzMTQ1XHUzMTQ2XHUzMTQ3XHUzMTQ4''@;'; put 'put ''XHUzMTQ5XHUzMTRhXHUzMTRiXHUzMTRjXHUzMTRkXHUzMTRlXHUzMTRmXHUzMTUwXHUzMTUxXHUzMTUyXHUzMTUzXHUzMTU0XHUzMTU1XHUzMTU2XHUzMTU3XHUzMTU4XHUzMTU5XHUzMTVhXHUzMTViXHUzMTVjXHUzMTVkXHUzMTVlXHUzMTVmXHUzMTYwXHUzMTYxXHUzMTYyXHUzMTYzXHUz''@;'; put 'put ''MTY0XHUzMTY1XHUzMTY2XHUzMTY3XHUzMTY4XHUzMTY5XHUzMTZhXHUzMTZiXHUzMTZjXHUzMTZkXHUzMTZlXHUzMTZmXHUzMTcwXHUzMTcxXHUzMTcyXHUzMTczXHUzMTc0XHUzMTc1XHUzMTc2XHUzMTc3XHUzMTc4XHUzMTc5XHUzMTdhXHUzMTdiXHUzMTdjXHUzMTdkXHUzMTdlXHUzMTdm''@;'; put 'put ''XHUzMTgwXHUzMTgxXHUzMTgyXHUzMTgzXHUzMTg0XHUzMTg1XHUzMTg2XHUzMTg3XHUzMTg4XHUzMTg5XHUzMThhXHUzMThiXHUzMThjXHUzMThkXHUzMThlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjRdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMTY0XVtnXV09NDE5ODQrZyx5WzQxOTg0K2ddPV9bMTY0XVtnXSk7Zm9yKF9bMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTQ3XHVjYTQ4XHVjYTQ5XHVjYTRhXHVjYTRiXHVjYTRlXHVjYTRmXHVjYTUx''@;'; put 'put ''XHVjYTUyXHVjYTUzXHVjYTU1XHVjYTU2XHVjYTU3XHVjYTU4XHVjYTU5XHVjYTVhXHVjYTViXHVjYTVlXHVjYTYyXHVjYTYzXHVjYTY0XHVjYTY1XHVjYTY2XHVjYTY3XHVjYTY5XHVjYTZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTZiXHVjYTZjXHVjYTZkXHVj''@;'; put 'put ''YTZlXHVjYTZmXHVjYTcwXHVjYTcxXHVjYTcyXHVjYTczXHVjYTc0XHVjYTc1XHVjYTc2XHVjYTc3XHVjYTc4XHVjYTc5XHVjYTdhXHVjYTdiXHVjYTdjXHVjYTdlXHVjYTdmXHVjYTgwXHVjYTgxXHVjYTgyXHVjYTgzXHVjYTg1XHVjYTg2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVjYTg3XHVjYTg4XHVjYTg5XHVjYThhXHVjYThiXHVjYThjXHVjYThkXHVjYThlXHVjYThmXHVjYTkwXHVjYTkxXHVjYTkyXHVjYTkzXHVjYTk0XHVjYTk1XHVjYTk2XHVjYTk3XHVjYTk5XHVjYTlhXHVjYTliXHVjYTljXHVjYTlkXHVjYTllXHVjYTlmXHVjYWEwXHVjYWExXHVj''@;'; put 'put ''YWEyXHVjYWEzXHVjYWE0XHVjYWE1XHVjYWE2XHVjYWE3XHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2''@;'; put 'put ''XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUw''@;'; put 'put ''M2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2Jk''@;'; put 'put ''XHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjVdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMTY1XVtnXV09NDIyNDArZyx5WzQyMjQwK2ddPV9bMTY1XVtnXSk7Zm9yKF9bMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWE4XHVjYWE5XHVjYWFhXHVjYWFiXHVjYWFjXHVjYWFk''@;'; put 'put ''XHVjYWFlXHVjYWFmXHVjYWIwXHVjYWIxXHVjYWIyXHVjYWIzXHVjYWI0XHVjYWI1XHVjYWI2XHVjYWI3XHVjYWI4XHVjYWI5XHVjYWJhXHVjYWJiXHVjYWJlXHVjYWJmXHVjYWMxXHVjYWMyXHVjYWMzXHVjYWM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWM2XHVj''@;'; put 'put ''YWM3XHVjYWM4XHVjYWM5XHVjYWNhXHVjYWNiXHVjYWNlXHVjYWQwXHVjYWQyXHVjYWQ0XHVjYWQ1XHVjYWQ2XHVjYWQ3XHVjYWRhXHVjYWRiXHVjYWRjXHVjYWRkXHVjYWRlXHVjYWRmXHVjYWUxXHVjYWUyXHVjYWUzXHVjYWU0XHVjYWU1XHVjYWU2XHVjYWU3XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVjYWU4XHVjYWU5XHVjYWVhXHVjYWViXHVjYWVkXHVjYWVlXHVjYWVmXHVjYWYwXHVjYWYxXHVjYWYyXHVjYWYzXHVjYWY1XHVjYWY2XHVjYWY3XHVjYWY4XHVjYWY5XHVjYWZhXHVjYWZiXHVjYWZjXHVjYWZkXHVjYWZlXHVjYWZmXHVjYjAwXHVjYjAxXHVj''@;'; put 'put ''YjAyXHVjYjAzXHVjYjA0XHVjYjA1XHVjYjA2XHVjYjA3XHVjYjA5XHVjYjBhXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJi''@;'; put 'put ''XHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyXHUyNTEyXHUyNTExXHUyNTFhXHUyNTE5XHUyNTE2XHUyNTE1XHUyNTBlXHUyNTBkXHUyNTFlXHUyNTFmXHUyNTIxXHUyNTIyXHUyNTI2XHUyNTI3XHUyNTI5XHUy''@;'; put 'put ''NTJhXHUyNTJkXHUyNTJlXHUyNTMxXHUyNTMyXHUyNTM1XHUyNTM2XHUyNTM5XHUyNTNhXHUyNTNkXHUyNTNlXHUyNTQwXHUyNTQxXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY2XS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1sxNjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY2XVtnXV09NDI0OTYrZyx5WzQyNDk2K2ddPV9bMTY2XVtnXSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjBiXHVjYjBjXHVjYjBkXHVjYjBl''@;'; put 'put ''XHVjYjBmXHVjYjExXHVjYjEyXHVjYjEzXHVjYjE1XHVjYjE2XHVjYjE3XHVjYjE5XHVjYjFhXHVjYjFiXHVjYjFjXHVjYjFkXHVjYjFlXHVjYjFmXHVjYjIyXHVjYjIzXHVjYjI0XHVjYjI1XHVjYjI2XHVjYjI3XHVjYjI4XHVjYjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVjYjJhXHVjYjJiXHVjYjJjXHVjYjJkXHVjYjJlXHVjYjJmXHVjYjMwXHVjYjMxXHVjYjMyXHVjYjMzXHVjYjM0XHVjYjM1XHVjYjM2XHVjYjM3XHVjYjM4XHVjYjM5XHVjYjNhXHVjYjNiXHVjYjNjXHVjYjNkXHVjYjNlXHVjYjNmXHVjYjQwXHVjYjQyXHVjYjQzXHVjYjQ0XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjQ1XHVjYjQ2XHVjYjQ3XHVjYjRhXHVjYjRiXHVjYjRkXHVjYjRlXHVjYjRmXHVjYjUxXHVjYjUyXHVjYjUzXHVjYjU0XHVjYjU1XHVjYjU2XHVjYjU3XHVjYjVhXHVjYjViXHVjYjVjXHVjYjVlXHVjYjVmXHVjYjYwXHVjYjYxXHVj''@;'; put 'put ''YjYyXHVjYjYzXHVjYjY1XHVjYjY2XHVjYjY3XHVjYjY4XHVjYjY5XHVjYjZhXHVjYjZiXHVjYjZjXHUzMzk1XHUzMzk2XHUzMzk3XHUyMTEzXHUzMzk4XHUzM2M0XHUzM2EzXHUzM2E0XHUzM2E1XHUzM2E2XHUzMzk5XHUzMzlhXHUzMzliXHUzMzljXHUzMzlkXHUzMzllXHUzMzlmXHUzM2Ew''@;'; put 'put ''XHUzM2ExXHUzM2EyXHUzM2NhXHUzMzhkXHUzMzhlXHUzMzhmXHUzM2NmXHUzMzg4XHUzMzg5XHUzM2M4XHUzM2E3XHUzM2E4XHUzM2IwXHUzM2IxXHUzM2IyXHUzM2IzXHUzM2I0XHUzM2I1XHUzM2I2XHUzM2I3XHUzM2I4XHUzM2I5XHUzMzgwXHUzMzgxXHUzMzgyXHUzMzgzXHUzMzg0XHUz''@;'; put 'put ''M2JhXHUzM2JiXHUzM2JjXHUzM2JkXHUzM2JlXHUzM2JmXHUzMzkwXHUzMzkxXHUzMzkyXHUzMzkzXHUzMzk0XHUyMTI2XHUzM2MwXHUzM2MxXHUzMzhhXHUzMzhiXHUzMzhjXHUzM2Q2XHUzM2M1XHUzM2FkXHUzM2FlXHUzM2FmXHUzM2RiXHUzM2E5XHUzM2FhXHUzM2FiXHUzM2FjXHUzM2Rk''@;'; put 'put ''XHUzM2QwXHUzM2QzXHUzM2MzXHUzM2M5XHUzM2RjXHUzM2M2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY3XS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1sxNjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY3XVtnXV09NDI3NTIrZyx5WzQyNzUyK2ddPV9bMTY3XVtnXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjZkXHVjYjZl''@;'; put 'put ''XHVjYjZmXHVjYjcwXHVjYjcxXHVjYjcyXHVjYjczXHVjYjc0XHVjYjc1XHVjYjc2XHVjYjc3XHVjYjdhXHVjYjdiXHVjYjdjXHVjYjdkXHVjYjdlXHVjYjdmXHVjYjgwXHVjYjgxXHVjYjgyXHVjYjgzXHVjYjg0XHVjYjg1XHVjYjg2XHVjYjg3XHVjYjg4XHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVjYjg5XHVjYjhhXHVjYjhiXHVjYjhjXHVjYjhkXHVjYjhlXHVjYjhmXHVjYjkwXHVjYjkxXHVjYjkyXHVjYjkzXHVjYjk0XHVjYjk1XHVjYjk2XHVjYjk3XHVjYjk4XHVjYjk5XHVjYjlhXHVjYjliXHVjYjlkXHVjYjllXHVjYjlmXHVjYmEwXHVjYmExXHVjYmEy''@;'; put 'put ''XHVjYmEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmE0XHVjYmE1XHVjYmE2XHVjYmE3XHVjYmE4XHVjYmE5XHVjYmFhXHVjYmFiXHVjYmFjXHVjYmFkXHVjYmFlXHVjYmFmXHVjYmIwXHVjYmIxXHVjYmIyXHVjYmIzXHVjYmI0XHVjYmI1XHVjYmI2XHVjYmI3XHVj''@;'; put 'put ''YmI5XHVjYmJhXHVjYmJiXHVjYmJjXHVjYmJkXHVjYmJlXHVjYmJmXHVjYmMwXHVjYmMxXHVjYmMyXHVjYmMzXHVjYmM0XHhjNlx4ZDBceGFhXHUwMTI2XHVmZmZkXHUwMTMyXHVmZmZkXHUwMTNmXHUwMTQxXHhkOFx1MDE1Mlx4YmFceGRlXHUwMTY2XHUwMTRhXHVmZmZkXHUzMjYwXHUzMjYx''@;'; put 'put ''XHUzMjYyXHUzMjYzXHUzMjY0XHUzMjY1XHUzMjY2XHUzMjY3XHUzMjY4XHUzMjY5XHUzMjZhXHUzMjZiXHUzMjZjXHUzMjZkXHUzMjZlXHUzMjZmXHUzMjcwXHUzMjcxXHUzMjcyXHUzMjczXHUzMjc0XHUzMjc1XHUzMjc2XHUzMjc3XHUzMjc4XHUzMjc5XHUzMjdhXHUzMjdiXHUyNGQwXHUy''@;'; put 'put ''NGQxXHUyNGQyXHUyNGQzXHUyNGQ0XHUyNGQ1XHUyNGQ2XHUyNGQ3XHUyNGQ4XHUyNGQ5XHUyNGRhXHUyNGRiXHUyNGRjXHUyNGRkXHUyNGRlXHUyNGRmXHUyNGUwXHUyNGUxXHUyNGUyXHUyNGUzXHUyNGU0XHUyNGU1XHUyNGU2XHUyNGU3XHUyNGU4XHUyNGU5XHUyNDYwXHUyNDYxXHUyNDYy''@;'; put 'put ''XHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVkXHUyMTVlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY4XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1sxNjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY4XVtnXV09NDMwMDgrZyx5WzQzMDA4K2ddPV9bMTY4XVtnXSk7Zm9yKF9bMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmM1XHVjYmM2XHVjYmM3''@;'; put 'put ''XHVjYmM4XHVjYmM5XHVjYmNhXHVjYmNiXHVjYmNjXHVjYmNkXHVjYmNlXHVjYmNmXHVjYmQwXHVjYmQxXHVjYmQyXHVjYmQzXHVjYmQ1XHVjYmQ2XHVjYmQ3XHVjYmQ4XHVjYmQ5XHVjYmRhXHVjYmRiXHVjYmRjXHVjYmRkXHVjYmRlXHVjYmRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVjYmUwXHVjYmUxXHVjYmUyXHVjYmUzXHVjYmU1XHVjYmU2XHVjYmU4XHVjYmVhXHVjYmViXHVjYmVjXHVjYmVkXHVjYmVlXHVjYmVmXHVjYmYwXHVjYmYxXHVjYmYyXHVjYmYzXHVjYmY0XHVjYmY1XHVjYmY2XHVjYmY3XHVjYmY4XHVjYmY5XHVjYmZhXHVjYmZiXHVjYmZj''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmZkXHVjYmZlXHVjYmZmXHVjYzAwXHVjYzAxXHVjYzAyXHVjYzAzXHVjYzA0XHVjYzA1XHVjYzA2XHVjYzA3XHVjYzA4XHVjYzA5XHVjYzBhXHVjYzBiXHVjYzBlXHVjYzBmXHVjYzExXHVjYzEyXHVjYzEzXHVjYzE1XHVj''@;'; put 'put ''YzE2XHVjYzE3XHVjYzE4XHVjYzE5XHVjYzFhXHVjYzFiXHVjYzFlXHVjYzFmXHVjYzIwXHVjYzIzXHVjYzI0XHhlNlx1MDExMVx4ZjBcdTAxMjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDBcdTAxNDJceGY4XHUwMTUzXHhkZlx4ZmVcdTAxNjdcdTAxNGJcdTAxNDlcdTMyMDBcdTMyMDFcdTMy''@;'; put 'put ''MDJcdTMyMDNcdTMyMDRcdTMyMDVcdTMyMDZcdTMyMDdcdTMyMDhcdTMyMDlcdTMyMGFcdTMyMGJcdTMyMGNcdTMyMGRcdTMyMGVcdTMyMGZcdTMyMTBcdTMyMTFcdTMyMTJcdTMyMTNcdTMyMTRcdTMyMTVcdTMyMTZcdTMyMTdcdTMyMThcdTMyMTlcdTMyMWFcdTMyMWJcdTI0OWNcdTI0OWRc''@;'; put 'put ''dTI0OWVcdTI0OWZcdTI0YTBcdTI0YTFcdTI0YTJcdTI0YTNcdTI0YTRcdTI0YTVcdTI0YTZcdTI0YTdcdTI0YThcdTI0YTlcdTI0YWFcdTI0YWJcdTI0YWNcdTI0YWRcdTI0YWVcdTI0YWZcdTI0YjBcdTI0YjFcdTI0YjJcdTI0YjNcdTI0YjRcdTI0YjVcdTI0NzRcdTI0NzVcdTI0NzZcdTI0''@;'; put 'put ''NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJceGI5XHhiMlx4YjNcdTIwNzRcdTIwN2ZcdTIwODFcdTIwODJcdTIwODNcdTIwODRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjldLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzE2OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjldW2ddXT00MzI2NCtnLHlbNDMyNjQrZ109X1sxNjldW2ddKTtmb3IoX1sxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjMjVcdWNjMjZcdWNjMmFcdWNj''@;'; put 'put ''MmJcdWNjMmRcdWNjMmZcdWNjMzFcdWNjMzJcdWNjMzNcdWNjMzRcdWNjMzVcdWNjMzZcdWNjMzdcdWNjM2FcdWNjM2ZcdWNjNDBcdWNjNDFcdWNjNDJcdWNjNDNcdWNjNDZcdWNjNDdcdWNjNDlcdWNjNGFcdWNjNGJcdWNjNGRcdWNjNGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWNjNGZcdWNjNTBcdWNjNTFcdWNjNTJcdWNjNTNcdWNjNTZcdWNjNWFcdWNjNWJcdWNjNWNcdWNjNWRcdWNjNWVcdWNjNWZcdWNjNjFcdWNjNjJcdWNjNjNcdWNjNjVcdWNjNjdcdWNjNjlcdWNjNmFcdWNjNmJcdWNjNmNcdWNjNmRcdWNjNmVcdWNjNmZcdWNjNzFcdWNjNzJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjNzNcdWNjNzRcdWNjNzZcdWNjNzdcdWNjNzhcdWNjNzlcdWNjN2FcdWNjN2JcdWNjN2NcdWNjN2RcdWNjN2VcdWNjN2ZcdWNjODBcdWNjODFcdWNjODJcdWNjODNcdWNjODRcdWNjODVcdWNjODZcdWNjODdcdWNjODhcdWNjODlc''@;'; put 'put ''dWNjOGFcdWNjOGJcdWNjOGNcdWNjOGRcdWNjOGVcdWNjOGZcdWNjOTBcdWNjOTFcdWNjOTJcdWNjOTNcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMw''@;'; put 'put ''NTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRc''@;'; put 'put ''dTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMw''@;'; put 'put ''ODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzBdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzE3MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzBdW2ddXT00MzUyMCtnLHlbNDM1MjArZ109X1sxNzBdW2ddKTtmb3IoX1sxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjOTRcdWNj''@;'; put 'put ''OTVcdWNjOTZcdWNjOTdcdWNjOWFcdWNjOWJcdWNjOWRcdWNjOWVcdWNjOWZcdWNjYTFcdWNjYTJcdWNjYTNcdWNjYTRcdWNjYTVcdWNjYTZcdWNjYTdcdWNjYWFcdWNjYWVcdWNjYWZcdWNjYjBcdWNjYjFcdWNjYjJcdWNjYjNcdWNjYjZcdWNjYjdcdWNjYjlcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWNjYmFcdWNjYmJcdWNjYmRcdWNjYmVcdWNjYmZcdWNjYzBcdWNjYzFcdWNjYzJcdWNjYzNcdWNjYzZcdWNjYzhcdWNjY2FcdWNjY2JcdWNjY2NcdWNjY2RcdWNjY2VcdWNjY2ZcdWNjZDFcdWNjZDJcdWNjZDNcdWNjZDVcdWNjZDZcdWNjZDdcdWNjZDhcdWNj''@;'; put 'put ''ZDlcdWNjZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjZGJcdWNjZGNcdWNjZGRcdWNjZGVcdWNjZGZcdWNjZTBcdWNjZTFcdWNjZTJcdWNjZTNcdWNjZTVcdWNjZTZcdWNjZTdcdWNjZThcdWNjZTlcdWNjZWFcdWNjZWJcdWNjZWRcdWNjZWVcdWNjZWZcdWNjZjFc''@;'; put 'put ''dWNjZjJcdWNjZjNcdWNjZjRcdWNjZjVcdWNjZjZcdWNjZjdcdWNjZjhcdWNjZjlcdWNjZmFcdWNjZmJcdWNjZmNcdWNjZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMw''@;'; put 'put ''YjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2Jc''@;'; put 'put ''dTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMw''@;'; put 'put ''ZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1sxNzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzFdW2ddXT00Mzc3NitnLHlbNDM3NzYrZ109X1sxNzFdW2ddKTtmb3IoX1sxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWNjZmVcdWNjZmZcdWNkMDBcdWNkMDJcdWNkMDNcdWNkMDRcdWNkMDVcdWNkMDZcdWNkMDdcdWNkMGFcdWNkMGJcdWNkMGRcdWNkMGVcdWNkMGZcdWNkMTFcdWNkMTJcdWNkMTNcdWNkMTRcdWNkMTVcdWNkMTZcdWNkMTdcdWNkMWFcdWNkMWNcdWNkMWVcdWNkMWZcdWNkMjBcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkMjFcdWNkMjJcdWNkMjNcdWNkMjVcdWNkMjZcdWNkMjdcdWNkMjlcdWNkMmFcdWNkMmJcdWNkMmRcdWNkMmVcdWNkMmZcdWNkMzBcdWNkMzFcdWNkMzJcdWNkMzNcdWNkMzRcdWNkMzVcdWNkMzZcdWNkMzdcdWNkMzhcdWNkM2FcdWNk''@;'; put 'put ''M2JcdWNkM2NcdWNkM2RcdWNkM2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkM2ZcdWNkNDBcdWNkNDFcdWNkNDJcdWNkNDNcdWNkNDRcdWNkNDVcdWNkNDZcdWNkNDdcdWNkNDhcdWNkNDlcdWNkNGFcdWNkNGJcdWNkNGNcdWNkNGRcdWNkNGVcdWNkNGZcdWNkNTBc''@;'; put 'put ''dWNkNTFcdWNkNTJcdWNkNTNcdWNkNTRcdWNkNTVcdWNkNTZcdWNkNTdcdWNkNThcdWNkNTlcdWNkNWFcdWNkNWJcdWNkNWRcdWNkNWVcdWNkNWZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0''@;'; put 'put ''MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0''@;'; put 'put ''NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1sxNzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzJdW2ddXT00NDAzMitnLHlbNDQwMzIrZ109X1sxNzJdW2ddKTtmb3IoX1sxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWNkNjFcdWNkNjJcdWNkNjNcdWNkNjVcdWNkNjZcdWNkNjdcdWNkNjhcdWNkNjlcdWNkNmFcdWNkNmJcdWNkNmVcdWNkNzBcdWNkNzJcdWNkNzNcdWNkNzRcdWNkNzVcdWNkNzZcdWNkNzdcdWNkNzlcdWNkN2FcdWNkN2JcdWNkN2NcdWNkN2RcdWNkN2VcdWNkN2Zc''@;'; put 'put ''dWNkODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkODFcdWNkODJcdWNkODNcdWNkODRcdWNkODVcdWNkODZcdWNkODdcdWNkODlcdWNkOGFcdWNkOGJcdWNkOGNcdWNkOGRcdWNkOGVcdWNkOGZcdWNkOTBcdWNkOTFcdWNkOTJcdWNkOTNcdWNkOTZcdWNkOTdcdWNk''@;'; put 'put ''OTlcdWNkOWFcdWNkOWJcdWNkOWRcdWNkOWVcdWNkOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYTBcdWNkYTFcdWNkYTJcdWNkYTNcdWNkYTZcdWNkYThcdWNkYWFcdWNkYWJcdWNkYWNcdWNkYWRcdWNkYWVcdWNkYWZcdWNkYjFcdWNkYjJcdWNkYjNcdWNkYjRc''@;'; put 'put ''dWNkYjVcdWNkYjZcdWNkYjdcdWNkYjhcdWNkYjlcdWNkYmFcdWNkYmJcdWNkYmNcdWNkYmRcdWNkYmVcdWNkYmZcdWNkYzBcdWNkYzFcdWNkYzJcdWNkYzNcdWNkYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzNdW2ddXT00NDI4OCtnLHlbNDQyODgrZ109X1sxNzNdW2ddKTtmb3IoX1sxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYzZcdWNkYzdcdWNkYzhcdWNkYzlcdWNkY2FcdWNkY2JcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDFcdWNkZDJcdWNkZDNcdWNkZDRcdWNkZDVcdWNkZDZcdWNkZDdcdWNkZDhcdWNkZDlcdWNkZGFcdWNkZGJcdWNkZGNcdWNkZGRcdWNkZGVc''@;'; put 'put ''dWNkZGZcdWNkZTBcdWNkZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkZTJcdWNkZTNcdWNkZTRcdWNkZTVcdWNkZTZcdWNkZTdcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNkZWVcdWNkZWZcdWNkZjFcdWNkZjJcdWNkZjNcdWNkZjRcdWNkZjVcdWNkZjZcdWNk''@;'; put 'put ''ZjdcdWNkZmFcdWNkZmNcdWNkZmVcdWNkZmZcdWNlMDBcdWNlMDFcdWNlMDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFcdWNlMGJcdWNlMGRcdWNlMGVcdWNlMGZcdWNlMTBcdWNlMTFcdWNlMTJcdWNlMTNc''@;'; put 'put ''dWNlMTVcdWNlMTZcdWNlMTdcdWNlMThcdWNlMWFcdWNlMWJcdWNlMWNcdWNlMWRcdWNlMWVcdWNlMWZcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzRdW2ddXT00NDU0NCtnLHlbNDQ1NDQrZ109X1sxNzRdW2ddKTtmb3IoX1sxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMmNcdWNlMmRcdWNlMmVcdWNlMmZcdWNlMzJcdWNlMzRcdWNlMzZcdWNlMzdcdWNlMzhcdWNlMzlcdWNlM2FcdWNlM2JcdWNlM2NcdWNlM2RcdWNlM2VcdWNlM2ZcdWNlNDBcdWNlNDFcdWNlNDJcdWNlNDNcdWNlNDRc''@;'; put 'put ''dWNlNDVcdWNlNDZcdWNlNDdcdWNlNDhcdWNlNDlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlNGFcdWNlNGJcdWNlNGNcdWNlNGRcdWNlNGVcdWNlNGZcdWNlNTBcdWNlNTFcdWNlNTJcdWNlNTNcdWNlNTRcdWNlNTVcdWNlNTZcdWNlNTdcdWNlNWFcdWNlNWJcdWNl''@;'; put 'put ''NWRcdWNlNWVcdWNlNjJcdWNlNjNcdWNlNjRcdWNlNjVcdWNlNjZcdWNlNjdcdWNlNmFcdWNlNmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlNmVcdWNlNmZcdWNlNzBcdWNlNzFcdWNlNzJcdWNlNzNcdWNlNzZcdWNlNzdcdWNlNzlcdWNlN2FcdWNlN2JcdWNlN2Rc''@;'; put 'put ''dWNlN2VcdWNlN2ZcdWNlODBcdWNlODFcdWNlODJcdWNlODNcdWNlODZcdWNlODhcdWNlOGFcdWNlOGJcdWNlOGNcdWNlOGRcdWNlOGVcdWNlOGZcdWNlOTJcdWNlOTNcdWNlOTVcdWNlOTZcdWNlOTdcdWNlOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzVdW2ddXT00NDgwMCtnLHlbNDQ4MDArZ109X1sxNzVdW2ddKTtmb3IoX1sxNzZdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlOWFcdWNlOWJcdWNlOWNcdWNlOWRcdWNlOWVcdWNlOWZcdWNlYTJcdWNlYTZcdWNlYTdcdWNlYThcdWNlYTlcdWNlYWFcdWNlYWJcdWNlYWVcdWNlYWZcdWNlYjBcdWNlYjFcdWNlYjJcdWNlYjNc''@;'; put 'put ''dWNlYjRcdWNlYjVcdWNlYjZcdWNlYjdcdWNlYjhcdWNlYjlcdWNlYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlYmJcdWNlYmNcdWNlYmRcdWNlYmVcdWNlYmZcdWNlYzBcdWNlYzJcdWNlYzNcdWNlYzRcdWNlYzVcdWNlYzZcdWNlYzdcdWNlYzhcdWNlYzlcdWNl''@;'; put 'put ''Y2FcdWNlY2JcdWNlY2NcdWNlY2RcdWNlY2VcdWNlY2ZcdWNlZDBcdWNlZDFcdWNlZDJcdWNlZDNcdWNlZDRcdWNlZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlZDZcdWNlZDdcdWNlZDhcdWNlZDlcdWNlZGFcdWNlZGJcdWNlZGNcdWNlZGRcdWNlZGVcdWNlZGZc''@;'; put 'put ''dWNlZTBcdWNlZTFcdWNlZTJcdWNlZTNcdWNlZTZcdWNlZTdcdWNlZTlcdWNlZWFcdWNlZWRcdWNlZWVcdWNlZWZcdWNlZjBcdWNlZjFcdWNlZjJcdWNlZjNcdWNlZjZcdWNlZmFcdWNlZmJcdWNlZmNcdWNlZmRcdWNlZmVcdWNlZmZcdWFjMDBcdWFjMDFcdWFjMDRcdWFjMDdcdWFjMDhcdWFj''@;'; put 'put ''MDlcdWFjMGFcdWFjMTBcdWFjMTFcdWFjMTJcdWFjMTNcdWFjMTRcdWFjMTVcdWFjMTZcdWFjMTdcdWFjMTlcdWFjMWFcdWFjMWJcdWFjMWNcdWFjMWRcdWFjMjBcdWFjMjRcdWFjMmNcdWFjMmRcdWFjMmZcdWFjMzBcdWFjMzFcdWFjMzhcdWFjMzlcdWFjM2NcdWFjNDBcdWFjNGJcdWFjNGRc''@;'; put 'put ''dWFjNTRcdWFjNThcdWFjNWNcdWFjNzBcdWFjNzFcdWFjNzRcdWFjNzdcdWFjNzhcdWFjN2FcdWFjODBcdWFjODFcdWFjODNcdWFjODRcdWFjODVcdWFjODZcdWFjODlcdWFjOGFcdWFjOGJcdWFjOGNcdWFjOTBcdWFjOTRcdWFjOWNcdWFjOWRcdWFjOWZcdWFjYTBcdWFjYTFcdWFjYThcdWFj''@;'; put 'put ''YTlcdWFjYWFcdWFjYWNcdWFjYWZcdWFjYjBcdWFjYjhcdWFjYjlcdWFjYmJcdWFjYmNcdWFjYmRcdWFjYzFcdWFjYzRcdWFjYzhcdWFjY2NcdWFjZDVcdWFjZDdcdWFjZTBcdWFjZTFcdWFjZTRcdWFjZTdcdWFjZThcdWFjZWFcdWFjZWNcdWFjZWZcdWFjZjBcdWFjZjFcdWFjZjNcdWFjZjVc''@;'; put 'put ''dWFjZjZcdWFjZmNcdWFjZmRcdWFkMDBcdWFkMDRcdWFkMDZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzZdW2ddXT00NTA1NitnLHlbNDUwNTYrZ109X1sxNzZdW2ddKTtmb3IoX1sxNzdd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDlcdWNmMGFcdWNmMGJcdWNmMGNcdWNmMGRcdWNmMGVcdWNmMGZcdWNmMTJcdWNmMTRcdWNmMTZcdWNmMTdcdWNmMThc''@;'; put 'put ''dWNmMTlcdWNmMWFcdWNmMWJcdWNmMWRcdWNmMWVcdWNmMWZcdWNmMjFcdWNmMjJcdWNmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMjVcdWNmMjZcdWNmMjdcdWNmMjhcdWNmMjlcdWNmMmFcdWNmMmJcdWNmMmVcdWNmMzJcdWNmMzNcdWNmMzRcdWNmMzVcdWNm''@;'; put 'put ''MzZcdWNmMzdcdWNmMzlcdWNmM2FcdWNmM2JcdWNmM2NcdWNmM2RcdWNmM2VcdWNmM2ZcdWNmNDBcdWNmNDFcdWNmNDJcdWNmNDNcdWNmNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNDVcdWNmNDZcdWNmNDdcdWNmNDhcdWNmNDlcdWNmNGFcdWNmNGJcdWNmNGNc''@;'; put 'put ''dWNmNGRcdWNmNGVcdWNmNGZcdWNmNTBcdWNmNTFcdWNmNTJcdWNmNTNcdWNmNTZcdWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWRcdWNmNWVcdWNmNWZcdWNmNjBcdWNmNjFcdWNmNjJcdWNmNjNcdWNmNjZcdWNmNjhcdWNmNmFcdWNmNmJcdWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFk''@;'; put 'put ''MTFcdWFkMThcdWFkMWNcdWFkMjBcdWFkMjlcdWFkMmNcdWFkMmRcdWFkMzRcdWFkMzVcdWFkMzhcdWFkM2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRcdWFkNThcdWFkNjFcdWFkNjNcdWFkNmNcdWFkNmRcdWFkNzBcdWFkNzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2Jc''@;'; put 'put ''dWFkN2NcdWFkN2RcdWFkN2ZcdWFkODFcdWFkODJcdWFkODhcdWFkODlcdWFkOGNcdWFkOTBcdWFkOWNcdWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFkYzhcdWFkZDBcdWFkZDFcdWFkZDNcdWFkZGNcdWFkZTBcdWFkZTRcdWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFl''@;'; put 'put ''MDBcdWFlMDFcdWFlMDhcdWFlMDlcdWFlMGJcdWFlMGRcdWFlMTRcdWFlMzBcdWFlMzFcdWFlMzRcdWFlMzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVcdWFlNDZcdWFlNGFcdWFlNGNcdWFlNGRcdWFlNGVcdWFlNTBcdWFlNTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZc''@;'; put 'put ''dWFlNjBcdWFlNjFcdWFlNjVcdWFlNjhcdWFlNjlcdWFlNmNcdWFlNzBcdWFlNzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzddW2ddXT00NTMxMitnLHlbNDUzMTIrZ109X1sxNzddW2dd''@;'; put 'put ''KTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNmRcdWNmNmVcdWNmNmZcdWNmNzJcdWNmNzNcdWNmNzVcdWNmNzZcdWNmNzdcdWNmNzlcdWNmN2FcdWNmN2JcdWNmN2NcdWNmN2RcdWNmN2VcdWNmN2Zc''@;'; put 'put ''dWNmODFcdWNmODJcdWNmODNcdWNmODRcdWNmODZcdWNmODdcdWNmODhcdWNmODlcdWNmOGFcdWNmOGJcdWNmOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmOGVcdWNmOGZcdWNmOTBcdWNmOTFcdWNmOTJcdWNmOTNcdWNmOTRcdWNmOTVcdWNmOTZcdWNmOTdcdWNm''@;'; put 'put ''OThcdWNmOTlcdWNmOWFcdWNmOWJcdWNmOWNcdWNmOWRcdWNmOWVcdWNmOWZcdWNmYTBcdWNmYTJcdWNmYTNcdWNmYTRcdWNmYTVcdWNmYTZcdWNmYTdcdWNmYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmYWFcdWNmYWJcdWNmYWNcdWNmYWRcdWNmYWVcdWNmYWZc''@;'; put 'put ''dWNmYjFcdWNmYjJcdWNmYjNcdWNmYjRcdWNmYjVcdWNmYjZcdWNmYjdcdWNmYjhcdWNmYjlcdWNmYmFcdWNmYmJcdWNmYmNcdWNmYmRcdWNmYmVcdWNmYmZcdWNmYzBcdWNmYzFcdWNmYzJcdWNmYzNcdWNmYzVcdWNmYzZcdWNmYzdcdWNmYzhcdWNmYzlcdWNmY2FcdWNmY2JcdWFlNzlcdWFl''@;'; put 'put ''N2JcdWFlN2NcdWFlN2RcdWFlODRcdWFlODVcdWFlOGNcdWFlYmNcdWFlYmRcdWFlYmVcdWFlYzBcdWFlYzRcdWFlY2NcdWFlY2RcdWFlY2ZcdWFlZDBcdWFlZDFcdWFlZDhcdWFlZDlcdWFlZGNcdWFlZThcdWFlZWJcdWFlZWRcdWFlZjRcdWFlZjhcdWFlZmNcdWFmMDdcdWFmMDhcdWFmMGRc''@;'; put 'put ''dWFmMTBcdWFmMmNcdWFmMmRcdWFmMzBcdWFmMzJcdWFmMzRcdWFmM2NcdWFmM2RcdWFmM2ZcdWFmNDFcdWFmNDJcdWFmNDNcdWFmNDhcdWFmNDlcdWFmNTBcdWFmNWNcdWFmNWRcdWFmNjRcdWFmNjVcdWFmNzlcdWFmODBcdWFmODRcdWFmODhcdWFmOTBcdWFmOTFcdWFmOTVcdWFmOWNcdWFm''@;'; put 'put ''YjhcdWFmYjlcdWFmYmNcdWFmYzBcdWFmYzdcdWFmYzhcdWFmYzlcdWFmY2JcdWFmY2RcdWFmY2VcdWFmZDRcdWFmZGNcdWFmZThcdWFmZTlcdWFmZjBcdWFmZjFcdWFmZjRcdWFmZjhcdWIwMDBcdWIwMDFcdWIwMDRcdWIwMGNcdWIwMTBcdWIwMTRcdWIwMWNcdWIwMWRcdWIwMjhcdWIwNDRc''@;'; put 'put ''dWIwNDVcdWIwNDhcdWIwNGFcdWIwNGNcdWIwNGVcdWIwNTNcdWIwNTRcdWIwNTVcdWIwNTdcdWIwNTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzhdW2ddXT00NTU2OCtnLHlbNDU1Njgr''@;'; put 'put ''Z109X1sxNzhdW2ddKTtmb3IoX1sxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmY2NcdWNmY2RcdWNmY2VcdWNmY2ZcdWNmZDBcdWNmZDFcdWNmZDJcdWNmZDNcdWNmZDRcdWNmZDVcdWNmZDZcdWNmZDdcdWNmZDhc''@;'; put 'put ''dWNmZDlcdWNmZGFcdWNmZGJcdWNmZGNcdWNmZGRcdWNmZGVcdWNmZGZcdWNmZTJcdWNmZTNcdWNmZTVcdWNmZTZcdWNmZTdcdWNmZTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmZWFcdWNmZWJcdWNmZWNcdWNmZWRcdWNmZWVcdWNmZWZcdWNmZjJcdWNmZjRcdWNm''@;'; put 'put ''ZjZcdWNmZjdcdWNmZjhcdWNmZjlcdWNmZmFcdWNmZmJcdWNmZmRcdWNmZmVcdWNmZmZcdWQwMDFcdWQwMDJcdWQwMDNcdWQwMDVcdWQwMDZcdWQwMDdcdWQwMDhcdWQwMDlcdWQwMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMGJcdWQwMGNcdWQwMGRcdWQwMGVc''@;'; put 'put ''dWQwMGZcdWQwMTBcdWQwMTJcdWQwMTNcdWQwMTRcdWQwMTVcdWQwMTZcdWQwMTdcdWQwMTlcdWQwMWFcdWQwMWJcdWQwMWNcdWQwMWRcdWQwMWVcdWQwMWZcdWQwMjBcdWQwMjFcdWQwMjJcdWQwMjNcdWQwMjRcdWQwMjVcdWQwMjZcdWQwMjdcdWQwMjhcdWQwMjlcdWQwMmFcdWQwMmJcdWQw''@;'; put 'put ''MmNcdWIwNWRcdWIwN2NcdWIwN2RcdWIwODBcdWIwODRcdWIwOGNcdWIwOGRcdWIwOGZcdWIwOTFcdWIwOThcdWIwOTlcdWIwOWFcdWIwOWNcdWIwOWZcdWIwYTBcdWIwYTFcdWIwYTJcdWIwYThcdWIwYTlcdWIwYWJcdWIwYWNcdWIwYWRcdWIwYWVcdWIwYWZcdWIwYjFcdWIwYjNcdWIwYjRc''@;'; put 'put ''dWIwYjVcdWIwYjhcdWIwYmNcdWIwYzRcdWIwYzVcdWIwYzdcdWIwYzhcdWIwYzlcdWIwZDBcdWIwZDFcdWIwZDRcdWIwZDhcdWIwZTBcdWIwZTVcdWIxMDhcdWIxMDlcdWIxMGJcdWIxMGNcdWIxMTBcdWIxMTJcdWIxMTNcdWIxMThcdWIxMTlcdWIxMWJcdWIxMWNcdWIxMWRcdWIxMjNcdWIx''@;'; put 'put ''MjRcdWIxMjVcdWIxMjhcdWIxMmNcdWIxMzRcdWIxMzVcdWIxMzdcdWIxMzhcdWIxMzlcdWIxNDBcdWIxNDFcdWIxNDRcdWIxNDhcdWIxNTBcdWIxNTFcdWIxNTRcdWIxNTVcdWIxNThcdWIxNWNcdWIxNjBcdWIxNzhcdWIxNzlcdWIxN2NcdWIxODBcdWIxODJcdWIxODhcdWIxODlcdWIxOGJc''@;'; put 'put ''dWIxOGRcdWIxOTJcdWIxOTNcdWIxOTRcdWIxOThcdWIxOWNcdWIxYThcdWIxY2NcdWIxZDBcdWIxZDRcdWIxZGNcdWIxZGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzldW2ddXT00NTgy''@;'; put 'put ''NCtnLHlbNDU4MjQrZ109X1sxNzldW2ddKTtmb3IoX1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMmVcdWQwMmZcdWQwMzBcdWQwMzFcdWQwMzJcdWQwMzNcdWQwMzZcdWQwMzdcdWQwMzlcdWQwM2FcdWQwM2Jc''@;'; put 'put ''dWQwM2RcdWQwM2VcdWQwM2ZcdWQwNDBcdWQwNDFcdWQwNDJcdWQwNDNcdWQwNDZcdWQwNDhcdWQwNGFcdWQwNGJcdWQwNGNcdWQwNGRcdWQwNGVcdWQwNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNTFcdWQwNTJcdWQwNTNcdWQwNTVcdWQwNTZcdWQwNTdcdWQw''@;'; put 'put ''NTlcdWQwNWFcdWQwNWJcdWQwNWNcdWQwNWRcdWQwNWVcdWQwNWZcdWQwNjFcdWQwNjJcdWQwNjNcdWQwNjRcdWQwNjVcdWQwNjZcdWQwNjdcdWQwNjhcdWQwNjlcdWQwNmFcdWQwNmJcdWQwNmVcdWQwNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNzFcdWQwNzJc''@;'; put 'put ''dWQwNzNcdWQwNzVcdWQwNzZcdWQwNzdcdWQwNzhcdWQwNzlcdWQwN2FcdWQwN2JcdWQwN2VcdWQwN2ZcdWQwODBcdWQwODJcdWQwODNcdWQwODRcdWQwODVcdWQwODZcdWQwODdcdWQwODhcdWQwODlcdWQwOGFcdWQwOGJcdWQwOGNcdWQwOGRcdWQwOGVcdWQwOGZcdWQwOTBcdWQwOTFcdWQw''@;'; put 'put ''OTJcdWQwOTNcdWQwOTRcdWIxZGZcdWIxZThcdWIxZTlcdWIxZWNcdWIxZjBcdWIxZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIyMTRcdWIyMTVcdWIyMTdcdWIyMTlcdWIyMjBcdWIyMzRcdWIyM2NcdWIyNThcdWIyNWNcdWIyNjBcdWIyNjhcdWIyNjlc''@;'; put 'put ''dWIyNzRcdWIyNzVcdWIyN2NcdWIyODRcdWIyODVcdWIyODlcdWIyOTBcdWIyOTFcdWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVcdWIyYTZcdWIyYWFcdWIyYWNcdWIyYjBcdWIyYjRcdWIyYzhcdWIyYzlcdWIyY2NcdWIyZDBcdWIyZDJcdWIyZDhcdWIy''@;'; put 'put ''ZDlcdWIyZGJcdWIyZGRcdWIyZTJcdWIyZTRcdWIyZTVcdWIyZTZcdWIyZThcdWIyZWJcdWIyZWNcdWIyZWRcdWIyZWVcdWIyZWZcdWIyZjNcdWIyZjRcdWIyZjVcdWIyZjdcdWIyZjhcdWIyZjlcdWIyZmFcdWIyZmJcdWIyZmZcdWIzMDBcdWIzMDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFc''@;'; put 'put ''dWIzMTNcdWIzMTRcdWIzMTVcdWIzMWNcdWIzNTRcdWIzNTVcdWIzNTZcdWIzNThcdWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sx''@;'; put 'put ''ODBdW2ddXT00NjA4MCtnLHlbNDYwODArZ109X1sxODBdW2ddKTtmb3IoX1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwOTVcdWQwOTZcdWQwOTdcdWQwOThcdWQwOTlcdWQwOWFcdWQwOWJcdWQwOWNcdWQwOWRc''@;'; put 'put ''dWQwOWVcdWQwOWZcdWQwYTBcdWQwYTFcdWQwYTJcdWQwYTNcdWQwYTZcdWQwYTdcdWQwYTlcdWQwYWFcdWQwYWJcdWQwYWRcdWQwYWVcdWQwYWZcdWQwYjBcdWQwYjFcdWQwYjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwYjNcdWQwYjZcdWQwYjhcdWQwYmFcdWQw''@;'; put 'put ''YmJcdWQwYmNcdWQwYmRcdWQwYmVcdWQwYmZcdWQwYzJcdWQwYzNcdWQwYzVcdWQwYzZcdWQwYzdcdWQwY2FcdWQwY2JcdWQwY2NcdWQwY2RcdWQwY2VcdWQwY2ZcdWQwZDJcdWQwZDZcdWQwZDdcdWQwZDhcdWQwZDlcdWQwZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWQwZGJcdWQwZGVcdWQwZGZcdWQwZTFcdWQwZTJcdWQwZTNcdWQwZTVcdWQwZTZcdWQwZTdcdWQwZThcdWQwZTlcdWQwZWFcdWQwZWJcdWQwZWVcdWQwZjJcdWQwZjNcdWQwZjRcdWQwZjVcdWQwZjZcdWQwZjdcdWQwZjlcdWQwZmFcdWQwZmJcdWQwZmNcdWQwZmRcdWQwZmVcdWQwZmZcdWQx''@;'; put 'put ''MDBcdWQxMDFcdWQxMDJcdWQxMDNcdWQxMDRcdWIzNjdcdWIzNjlcdWIzNmJcdWIzNmVcdWIzNzBcdWIzNzFcdWIzNzRcdWIzNzhcdWIzODBcdWIzODFcdWIzODNcdWIzODRcdWIzODVcdWIzOGNcdWIzOTBcdWIzOTRcdWIzYTBcdWIzYTFcdWIzYThcdWIzYWNcdWIzYzRcdWIzYzVcdWIzYzhc''@;'; put 'put ''dWIzY2JcdWIzY2NcdWIzY2VcdWIzZDBcdWIzZDRcdWIzZDVcdWIzZDdcdWIzZDlcdWIzZGJcdWIzZGRcdWIzZTBcdWIzZTRcdWIzZThcdWIzZmNcdWI0MTBcdWI0MThcdWI0MWNcdWI0MjBcdWI0MjhcdWI0MjlcdWI0MmJcdWI0MzRcdWI0NTBcdWI0NTFcdWI0NTRcdWI0NThcdWI0NjBcdWI0''@;'; put 'put ''NjFcdWI0NjNcdWI0NjVcdWI0NmNcdWI0ODBcdWI0ODhcdWI0OWRcdWI0YTRcdWI0YThcdWI0YWNcdWI0YjVcdWI0YjdcdWI0YjlcdWI0YzBcdWI0YzRcdWI0YzhcdWI0ZDBcdWI0ZDVcdWI0ZGNcdWI0ZGRcdWI0ZTBcdWI0ZTNcdWI0ZTRcdWI0ZTZcdWI0ZWNcdWI0ZWRcdWI0ZWZcdWI0ZjFc''@;'; put 'put ''dWI0ZjhcdWI1MTRcdWI1MTVcdWI1MThcdWI1MWJcdWI1MWNcdWI1MjRcdWI1MjVcdWI1MjdcdWI1MjhcdWI1MjlcdWI1MmFcdWI1MzBcdWI1MzFcdWI1MzRcdWI1MzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MV1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1sxODFdW2ddXT00NjMzNitnLHlbNDYzMzYrZ109X1sxODFdW2ddKTtmb3IoX1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxMDVcdWQxMDZcdWQxMDdcdWQxMDhcdWQxMDlcdWQxMGFcdWQxMGJc''@;'; put 'put ''dWQxMGNcdWQxMGVcdWQxMGZcdWQxMTBcdWQxMTFcdWQxMTJcdWQxMTNcdWQxMTRcdWQxMTVcdWQxMTZcdWQxMTdcdWQxMThcdWQxMTlcdWQxMWFcdWQxMWJcdWQxMWNcdWQxMWRcdWQxMWVcdWQxMWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxMjBcdWQxMjFcdWQx''@;'; put 'put ''MjJcdWQxMjNcdWQxMjRcdWQxMjVcdWQxMjZcdWQxMjdcdWQxMjhcdWQxMjlcdWQxMmFcdWQxMmJcdWQxMmNcdWQxMmRcdWQxMmVcdWQxMmZcdWQxMzJcdWQxMzNcdWQxMzVcdWQxMzZcdWQxMzdcdWQxMzlcdWQxM2JcdWQxM2NcdWQxM2RcdWQxM2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWQxM2ZcdWQxNDJcdWQxNDZcdWQxNDdcdWQxNDhcdWQxNDlcdWQxNGFcdWQxNGJcdWQxNGVcdWQxNGZcdWQxNTFcdWQxNTJcdWQxNTNcdWQxNTVcdWQxNTZcdWQxNTdcdWQxNThcdWQxNTlcdWQxNWFcdWQxNWJcdWQxNWVcdWQxNjBcdWQxNjJcdWQxNjNcdWQxNjRcdWQx''@;'; put 'put ''NjVcdWQxNjZcdWQxNjdcdWQxNjlcdWQxNmFcdWQxNmJcdWQxNmRcdWI1NDBcdWI1NDFcdWI1NDNcdWI1NDRcdWI1NDVcdWI1NGJcdWI1NGNcdWI1NGRcdWI1NTBcdWI1NTRcdWI1NWNcdWI1NWRcdWI1NWZcdWI1NjBcdWI1NjFcdWI1YTBcdWI1YTFcdWI1YTRcdWI1YThcdWI1YWFcdWI1YWJc''@;'; put 'put ''dWI1YjBcdWI1YjFcdWI1YjNcdWI1YjRcdWI1YjVcdWI1YmJcdWI1YmNcdWI1YmRcdWI1YzBcdWI1YzRcdWI1Y2NcdWI1Y2RcdWI1Y2ZcdWI1ZDBcdWI1ZDFcdWI1ZDhcdWI1ZWNcdWI2MTBcdWI2MTFcdWI2MTRcdWI2MThcdWI2MjVcdWI2MmNcdWI2MzRcdWI2NDhcdWI2NjRcdWI2NjhcdWI2''@;'; put 'put ''OWNcdWI2OWRcdWI2YTBcdWI2YTRcdWI2YWJcdWI2YWNcdWI2YjFcdWI2ZDRcdWI2ZjBcdWI2ZjRcdWI2ZjhcdWI3MDBcdWI3MDFcdWI3MDVcdWI3MjhcdWI3MjlcdWI3MmNcdWI3MmZcdWI3MzBcdWI3MzhcdWI3MzlcdWI3M2JcdWI3NDRcdWI3NDhcdWI3NGNcdWI3NTRcdWI3NTVcdWI3NjBc''@;'; put 'put ''dWI3NjRcdWI3NjhcdWI3NzBcdWI3NzFcdWI3NzNcdWI3NzVcdWI3N2NcdWI3N2RcdWI3ODBcdWI3ODRcdWI3OGNcdWI3OGRcdWI3OGZcdWI3OTBcdWI3OTFcdWI3OTJcdWI3OTZcdWI3OTdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4Ml1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbX1sxODJdW2ddXT00NjU5MitnLHlbNDY1OTIrZ109X1sxODJdW2ddKTtmb3IoX1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxNmVcdWQxNmZcdWQxNzBcdWQxNzFcdWQxNzJc''@;'; put 'put ''dWQxNzNcdWQxNzRcdWQxNzVcdWQxNzZcdWQxNzdcdWQxNzhcdWQxNzlcdWQxN2FcdWQxN2JcdWQxN2RcdWQxN2VcdWQxN2ZcdWQxODBcdWQxODFcdWQxODJcdWQxODNcdWQxODVcdWQxODZcdWQxODdcdWQxODlcdWQxOGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQx''@;'; put 'put ''OGJcdWQxOGNcdWQxOGRcdWQxOGVcdWQxOGZcdWQxOTBcdWQxOTFcdWQxOTJcdWQxOTNcdWQxOTRcdWQxOTVcdWQxOTZcdWQxOTdcdWQxOThcdWQxOTlcdWQxOWFcdWQxOWJcdWQxOWNcdWQxOWRcdWQxOWVcdWQxOWZcdWQxYTJcdWQxYTNcdWQxYTVcdWQxYTZcdWQxYTdcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxYTlcdWQxYWFcdWQxYWJcdWQxYWNcdWQxYWRcdWQxYWVcdWQxYWZcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdcdWQxYjhcdWQxYjlcdWQxYmJcdWQxYmRcdWQxYmVcdWQxYmZcdWQxYzFcdWQxYzJcdWQxYzNcdWQxYzRcdWQxYzVcdWQxYzZcdWQx''@;'; put 'put ''YzdcdWQxYzhcdWQxYzlcdWQxY2FcdWQxY2JcdWQxY2NcdWQxY2RcdWQxY2VcdWQxY2ZcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJcdWI3YWNcdWI3YWRcdWI3YjRcdWI3YjVcdWI3YjhcdWI3YzdcdWI3YzlcdWI3ZWNcdWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNc''@;'; put 'put ''dWI3ZmRcdWI3ZmZcdWI4MDBcdWI4MDFcdWI4MDdcdWI4MDhcdWI4MDlcdWI4MGNcdWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4MjhcdWI4MmNcdWI4MzRcdWI4MzVcdWI4MzdcdWI4MzhcdWI4MzlcdWI4NDBcdWI4NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4''@;'; put 'put ''NWRcdWI4NjBcdWI4NjRcdWI4NmNcdWI4NmRcdWI4NmZcdWI4NzFcdWI4NzhcdWI4N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFcdWI4YzNcdWI4YzVcdWI4Y2NcdWI4ZDBcdWI4ZDRcdWI4ZGRcdWI4ZGZcdWI4ZTFcdWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBc''@;'; put 'put ''dWI4ZjhcdWI4ZjlcdWI4ZmJcdWI4ZmRcdWI5MDRcdWI5MThcdWI5MjBcdWI5M2NcdWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5NTlcdWI5NWNcdWI5NjBcdWI5NjhcdWI5NjlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODNdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzE4M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODNdW2ddXT00Njg0OCtnLHlbNDY4NDgrZ109X1sxODNdW2ddKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxZDBcdWQxZDFcdWQxZDJc''@;'; put 'put ''dWQxZDNcdWQxZDRcdWQxZDVcdWQxZDZcdWQxZDdcdWQxZDlcdWQxZGFcdWQxZGJcdWQxZGNcdWQxZGRcdWQxZGVcdWQxZGZcdWQxZTBcdWQxZTFcdWQxZTJcdWQxZTNcdWQxZTRcdWQxZTVcdWQxZTZcdWQxZTdcdWQxZThcdWQxZTlcdWQxZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWQxZWJcdWQxZWNcdWQxZWRcdWQxZWVcdWQxZWZcdWQxZjBcdWQxZjFcdWQxZjJcdWQxZjNcdWQxZjVcdWQxZjZcdWQxZjdcdWQxZjlcdWQxZmFcdWQxZmJcdWQxZmNcdWQxZmRcdWQxZmVcdWQxZmZcdWQyMDBcdWQyMDFcdWQyMDJcdWQyMDNcdWQyMDRcdWQyMDVcdWQyMDZc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyMDhcdWQyMGFcdWQyMGJcdWQyMGNcdWQyMGRcdWQyMGVcdWQyMGZcdWQyMTFcdWQyMTJcdWQyMTNcdWQyMTRcdWQyMTVcdWQyMTZcdWQyMTdcdWQyMThcdWQyMTlcdWQyMWFcdWQyMWJcdWQyMWNcdWQyMWRcdWQyMWVcdWQy''@;'; put 'put ''MWZcdWQyMjBcdWQyMjFcdWQyMjJcdWQyMjNcdWQyMjRcdWQyMjVcdWQyMjZcdWQyMjdcdWQyMjhcdWQyMjlcdWI5NmJcdWI5NmRcdWI5NzRcdWI5NzVcdWI5NzhcdWI5N2NcdWI5ODRcdWI5ODVcdWI5ODdcdWI5ODlcdWI5OGFcdWI5OGRcdWI5OGVcdWI5YWNcdWI5YWRcdWI5YjBcdWI5YjRc''@;'; put 'put ''dWI5YmNcdWI5YmRcdWI5YmZcdWI5YzFcdWI5YzhcdWI5YzlcdWI5Y2NcdWI5Y2VcdWI5Y2ZcdWI5ZDBcdWI5ZDFcdWI5ZDJcdWI5ZDhcdWI5ZDlcdWI5ZGJcdWI5ZGRcdWI5ZGVcdWI5ZTFcdWI5ZTNcdWI5ZTRcdWI5ZTVcdWI5ZThcdWI5ZWNcdWI5ZjRcdWI5ZjVcdWI5ZjdcdWI5ZjhcdWI5''@;'; put 'put ''ZjlcdWI5ZmFcdWJhMDBcdWJhMDFcdWJhMDhcdWJhMTVcdWJhMzhcdWJhMzlcdWJhM2NcdWJhNDBcdWJhNDJcdWJhNDhcdWJhNDlcdWJhNGJcdWJhNGRcdWJhNGVcdWJhNTNcdWJhNTRcdWJhNTVcdWJhNThcdWJhNWNcdWJhNjRcdWJhNjVcdWJhNjdcdWJhNjhcdWJhNjlcdWJhNzBcdWJhNzFc''@;'; put 'put ''dWJhNzRcdWJhNzhcdWJhODNcdWJhODRcdWJhODVcdWJhODdcdWJhOGNcdWJhYThcdWJhYTlcdWJhYWJcdWJhYWNcdWJhYjBcdWJhYjJcdWJhYjhcdWJhYjlcdWJhYmJcdWJhYmRcdWJhYzRcdWJhYzhcdWJhZDhcdWJhZDlcdWJhZmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODRdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzE4NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODRdW2ddXT00NzEwNCtnLHlbNDcxMDQrZ109X1sxODRdW2ddKTtmb3IoX1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyMmFc''@;'; put 'put ''dWQyMmJcdWQyMmVcdWQyMmZcdWQyMzFcdWQyMzJcdWQyMzNcdWQyMzVcdWQyMzZcdWQyMzdcdWQyMzhcdWQyMzlcdWQyM2FcdWQyM2JcdWQyM2VcdWQyNDBcdWQyNDJcdWQyNDNcdWQyNDRcdWQyNDVcdWQyNDZcdWQyNDdcdWQyNDlcdWQyNGFcdWQyNGJcdWQyNGNcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNGRcdWQyNGVcdWQyNGZcdWQyNTBcdWQyNTFcdWQyNTJcdWQyNTNcdWQyNTRcdWQyNTVcdWQyNTZcdWQyNTdcdWQyNThcdWQyNTlcdWQyNWFcdWQyNWJcdWQyNWRcdWQyNWVcdWQyNWZcdWQyNjBcdWQyNjFcdWQyNjJcdWQyNjNcdWQyNjVcdWQyNjZc''@;'; put 'put ''dWQyNjdcdWQyNjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjlcdWQyNmFcdWQyNmJcdWQyNmNcdWQyNmRcdWQyNmVcdWQyNmZcdWQyNzBcdWQyNzFcdWQyNzJcdWQyNzNcdWQyNzRcdWQyNzVcdWQyNzZcdWQyNzdcdWQyNzhcdWQyNzlcdWQyN2FcdWQyN2JcdWQy''@;'; put 'put ''N2NcdWQyN2RcdWQyN2VcdWQyN2ZcdWQyODJcdWQyODNcdWQyODVcdWQyODZcdWQyODdcdWQyODlcdWQyOGFcdWQyOGJcdWQyOGNcdWJiMDBcdWJiMDRcdWJiMGRcdWJiMGZcdWJiMTFcdWJiMThcdWJiMWNcdWJiMjBcdWJiMjlcdWJiMmJcdWJiMzRcdWJiMzVcdWJiMzZcdWJiMzhcdWJiM2Jc''@;'; put 'put ''dWJiM2NcdWJiM2RcdWJiM2VcdWJiNDRcdWJiNDVcdWJiNDdcdWJiNDlcdWJiNGRcdWJiNGZcdWJiNTBcdWJiNTRcdWJiNThcdWJiNjFcdWJiNjNcdWJiNmNcdWJiODhcdWJiOGNcdWJiOTBcdWJiYTRcdWJiYThcdWJiYWNcdWJiYjRcdWJiYjdcdWJiYzBcdWJiYzRcdWJiYzhcdWJiZDBcdWJi''@;'; put 'put ''ZDNcdWJiZjhcdWJiZjlcdWJiZmNcdWJiZmZcdWJjMDBcdWJjMDJcdWJjMDhcdWJjMDlcdWJjMGJcdWJjMGNcdWJjMGRcdWJjMGZcdWJjMTFcdWJjMTRcdWJjMTVcdWJjMTZcdWJjMTdcdWJjMThcdWJjMWJcdWJjMWNcdWJjMWRcdWJjMWVcdWJjMWZcdWJjMjRcdWJjMjVcdWJjMjdcdWJjMjlc''@;'; put 'put ''dWJjMmRcdWJjMzBcdWJjMzFcdWJjMzRcdWJjMzhcdWJjNDBcdWJjNDFcdWJjNDNcdWJjNDRcdWJjNDVcdWJjNDlcdWJjNGNcdWJjNGRcdWJjNTBcdWJjNWRcdWJjODRcdWJjODVcdWJjODhcdWJjOGJcdWJjOGNcdWJjOGVcdWJjOTRcdWJjOTVcdWJjOTdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1sxODVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODVdW2ddXT00NzM2MCtnLHlbNDczNjArZ109X1sxODVdW2ddKTtmb3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWQyOGRcdWQyOGVcdWQyOGZcdWQyOTJcdWQyOTNcdWQyOTRcdWQyOTZcdWQyOTdcdWQyOThcdWQyOTlcdWQyOWFcdWQyOWJcdWQyOWRcdWQyOWVcdWQyOWZcdWQyYTFcdWQyYTJcdWQyYTNcdWQyYTVcdWQyYTZcdWQyYTdcdWQyYThcdWQyYTlcdWQyYWFcdWQyYWJcdWQyYWRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyYWVcdWQyYWZcdWQyYjBcdWQyYjJcdWQyYjNcdWQyYjRcdWQyYjVcdWQyYjZcdWQyYjdcdWQyYmFcdWQyYmJcdWQyYmRcdWQyYmVcdWQyYzFcdWQyYzNcdWQyYzRcdWQyYzVcdWQyYzZcdWQyYzdcdWQyY2FcdWQyY2NcdWQyY2Rc''@;'; put 'put ''dWQyY2VcdWQyY2ZcdWQyZDBcdWQyZDFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQyZGJcdWQyZGRcdWQyZGVcdWQyZGZcdWQyZTBcdWQyZTFcdWQyZTJcdWQyZTNcdWQyZTZcdWQyZTdcdWQy''@;'; put 'put ''ZThcdWQyZTlcdWQyZWFcdWQyZWJcdWQyZWNcdWQyZWRcdWQyZWVcdWQyZWZcdWQyZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJjOWFcdWJjYTBcdWJjYTFcdWJjYTRcdWJjYTdcdWJjYThcdWJjYjBcdWJjYjFcdWJjYjNcdWJjYjRcdWJjYjVcdWJjYmNc''@;'; put 'put ''dWJjYmRcdWJjYzBcdWJjYzRcdWJjY2RcdWJjY2ZcdWJjZDBcdWJjZDFcdWJjZDVcdWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRcdWJkMDVcdWJkMDdcdWJkMDlcdWJkMTBcdWJkMTRcdWJkMjRcdWJkMmNcdWJkNDBcdWJkNDhcdWJkNDlcdWJkNGNcdWJk''@;'; put 'put ''NTBcdWJkNThcdWJkNTlcdWJkNjRcdWJkNjhcdWJkODBcdWJkODFcdWJkODRcdWJkODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJkOTlcdWJkOWFcdWJkOWNcdWJkYTRcdWJkYjBcdWJkYjhcdWJkZDRcdWJkZDVcdWJkZDhcdWJkZGNcdWJkZTlcdWJkZjBc''@;'; put 'put ''dWJkZjRcdWJkZjhcdWJlMDBcdWJlMDNcdWJlMDVcdWJlMGNcdWJlMGRcdWJlMTBcdWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNcdWJlNGVcdWJlNTRcdWJlNTVcdWJlNTdcdWJlNTlcdWJlNWFcdWJlNWJcdWJlNjBcdWJlNjFcdWJlNjRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1sxODZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODZdW2ddXT00NzYxNitnLHlbNDc2MTYrZ109X1sxODZdW2ddKTtmb3IoX1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWQyZmJcdWQyZmNcdWQyZmRcdWQyZmVcdWQyZmZcdWQzMDJcdWQzMDRcdWQzMDZcdWQzMDdcdWQzMDhcdWQzMDlcdWQzMGFcdWQzMGJcdWQzMGZcdWQzMTFcdWQzMTJcdWQzMTNcdWQzMTVcdWQzMTdcdWQzMThcdWQzMTlcdWQzMWFcdWQzMWJcdWQzMWVcdWQz''@;'; put 'put ''MjJcdWQzMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzMjRcdWQzMjZcdWQzMjdcdWQzMmFcdWQzMmJcdWQzMmRcdWQzMmVcdWQzMmZcdWQzMzFcdWQzMzJcdWQzMzNcdWQzMzRcdWQzMzVcdWQzMzZcdWQzMzdcdWQzM2FcdWQzM2VcdWQzM2ZcdWQzNDBcdWQzNDFc''@;'; put 'put ''dWQzNDJcdWQzNDNcdWQzNDZcdWQzNDdcdWQzNDhcdWQzNDlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzNGFcdWQzNGJcdWQzNGNcdWQzNGRcdWQzNGVcdWQzNGZcdWQzNTBcdWQzNTFcdWQzNTJcdWQzNTNcdWQzNTRcdWQzNTVcdWQzNTZcdWQzNTdcdWQzNThcdWQz''@;'; put 'put ''NTlcdWQzNWFcdWQzNWJcdWQzNWNcdWQzNWRcdWQzNWVcdWQzNWZcdWQzNjBcdWQzNjFcdWQzNjJcdWQzNjNcdWQzNjRcdWQzNjVcdWQzNjZcdWQzNjdcdWQzNjhcdWQzNjlcdWJlNjhcdWJlNmFcdWJlNzBcdWJlNzFcdWJlNzNcdWJlNzRcdWJlNzVcdWJlN2JcdWJlN2NcdWJlN2RcdWJlODBc''@;'; put 'put ''dWJlODRcdWJlOGNcdWJlOGRcdWJlOGZcdWJlOTBcdWJlOTFcdWJlOThcdWJlOTlcdWJlYThcdWJlZDBcdWJlZDFcdWJlZDRcdWJlZDdcdWJlZDhcdWJlZTBcdWJlZTNcdWJlZTRcdWJlZTVcdWJlZWNcdWJmMDFcdWJmMDhcdWJmMDlcdWJmMThcdWJmMTlcdWJmMWJcdWJmMWNcdWJmMWRcdWJm''@;'; put 'put ''NDBcdWJmNDFcdWJmNDRcdWJmNDhcdWJmNTBcdWJmNTFcdWJmNTVcdWJmOTRcdWJmYjBcdWJmYzVcdWJmY2NcdWJmY2RcdWJmZDBcdWJmZDRcdWJmZGNcdWJmZGZcdWJmZTFcdWMwM2NcdWMwNTFcdWMwNThcdWMwNWNcdWMwNjBcdWMwNjhcdWMwNjlcdWMwOTBcdWMwOTFcdWMwOTRcdWMwOThc''@;'; put 'put ''dWMwYTBcdWMwYTFcdWMwYTNcdWMwYTVcdWMwYWNcdWMwYWRcdWMwYWZcdWMwYjBcdWMwYjNcdWMwYjRcdWMwYjVcdWMwYjZcdWMwYmNcdWMwYmRcdWMwYmZcdWMwYzBcdWMwYzFcdWMwYzVcdWMwYzhcdWMwYzlcdWMwY2NcdWMwZDBcdWMwZDhcdWMwZDlcdWMwZGJcdWMwZGNcdWMwZGRcdWMw''@;'; put 'put ''ZTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODddW2ddXT00Nzg3MitnLHlbNDc4NzIrZ109X1sxODddW2ddKTtmb3IoX1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzNmFcdWQzNmJcdWQzNmNcdWQzNmRcdWQzNmVcdWQzNmZcdWQzNzBcdWQzNzFcdWQzNzJcdWQzNzNcdWQzNzRcdWQzNzVcdWQzNzZcdWQzNzdcdWQzNzhcdWQzNzlcdWQzN2FcdWQzN2JcdWQzN2VcdWQzN2ZcdWQzODFcdWQzODJcdWQz''@;'; put 'put ''ODNcdWQzODVcdWQzODZcdWQzODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzODhcdWQzODlcdWQzOGFcdWQzOGJcdWQzOGVcdWQzOTJcdWQzOTNcdWQzOTRcdWQzOTVcdWQzOTZcdWQzOTdcdWQzOWFcdWQzOWJcdWQzOWRcdWQzOWVcdWQzOWZcdWQzYTFcdWQzYTJc''@;'; put 'put ''dWQzYTNcdWQzYTRcdWQzYTVcdWQzYTZcdWQzYTdcdWQzYWFcdWQzYWNcdWQzYWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzYWZcdWQzYjBcdWQzYjFcdWQzYjJcdWQzYjNcdWQzYjVcdWQzYjZcdWQzYjdcdWQzYjlcdWQzYmFcdWQzYmJcdWQzYmRcdWQzYmVcdWQz''@;'; put 'put ''YmZcdWQzYzBcdWQzYzFcdWQzYzJcdWQzYzNcdWQzYzZcdWQzYzdcdWQzY2FcdWQzY2JcdWQzY2NcdWQzY2RcdWQzY2VcdWQzY2ZcdWQzZDFcdWQzZDJcdWQzZDNcdWQzZDRcdWQzZDVcdWQzZDZcdWMwZTVcdWMwZThcdWMwZWNcdWMwZjRcdWMwZjVcdWMwZjdcdWMwZjlcdWMxMDBcdWMxMDRc''@;'; put 'put ''dWMxMDhcdWMxMTBcdWMxMTVcdWMxMWNcdWMxMWRcdWMxMWVcdWMxMWZcdWMxMjBcdWMxMjNcdWMxMjRcdWMxMjZcdWMxMjdcdWMxMmNcdWMxMmRcdWMxMmZcdWMxMzBcdWMxMzFcdWMxMzZcdWMxMzhcdWMxMzlcdWMxM2NcdWMxNDBcdWMxNDhcdWMxNDlcdWMxNGJcdWMxNGNcdWMxNGRcdWMx''@;'; put 'put ''NTRcdWMxNTVcdWMxNThcdWMxNWNcdWMxNjRcdWMxNjVcdWMxNjdcdWMxNjhcdWMxNjlcdWMxNzBcdWMxNzRcdWMxNzhcdWMxODVcdWMxOGNcdWMxOGRcdWMxOGVcdWMxOTBcdWMxOTRcdWMxOTZcdWMxOWNcdWMxOWRcdWMxOWZcdWMxYTFcdWMxYTVcdWMxYThcdWMxYTlcdWMxYWNcdWMxYjBc''@;'; put 'put ''dWMxYmRcdWMxYzRcdWMxYzhcdWMxY2NcdWMxZDRcdWMxZDdcdWMxZDhcdWMxZTBcdWMxZTRcdWMxZThcdWMxZjBcdWMxZjFcdWMxZjNcdWMxZmNcdWMxZmRcdWMyMDBcdWMyMDRcdWMyMGNcdWMyMGRcdWMyMGZcdWMyMTFcdWMyMThcdWMyMTlcdWMyMWNcdWMyMWZcdWMyMjBcdWMyMjhcdWMy''@;'; put 'put ''MjlcdWMyMmJcdWMyMmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODhdW2ddXT00ODEyOCtnLHlbNDgxMjgrZ109X1sxODhdW2ddKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZDdcdWQzZDlcdWQzZGFcdWQzZGJcdWQzZGNcdWQzZGRcdWQzZGVcdWQzZGZcdWQzZTBcdWQzZTJcdWQzZTRcdWQzZTVcdWQzZTZcdWQzZTdcdWQzZThcdWQzZTlcdWQzZWFcdWQzZWJcdWQzZWVcdWQzZWZcdWQz''@;'; put 'put ''ZjFcdWQzZjJcdWQzZjNcdWQzZjVcdWQzZjZcdWQzZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZjhcdWQzZjlcdWQzZmFcdWQzZmJcdWQzZmVcdWQ0MDBcdWQ0MDJcdWQ0MDNcdWQ0MDRcdWQ0MDVcdWQ0MDZcdWQ0MDdcdWQ0MDlcdWQ0MGFcdWQ0MGJcdWQ0MGNc''@;'; put 'put ''dWQ0MGRcdWQ0MGVcdWQ0MGZcdWQ0MTBcdWQ0MTFcdWQ0MTJcdWQ0MTNcdWQ0MTRcdWQ0MTVcdWQ0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MTdcdWQ0MThcdWQ0MTlcdWQ0MWFcdWQ0MWJcdWQ0MWNcdWQ0MWVcdWQ0MWZcdWQ0MjBcdWQ0MjFcdWQ0MjJcdWQ0''@;'; put 'put ''MjNcdWQ0MjRcdWQ0MjVcdWQ0MjZcdWQ0MjdcdWQ0MjhcdWQ0MjlcdWQ0MmFcdWQ0MmJcdWQ0MmNcdWQ0MmRcdWQ0MmVcdWQ0MmZcdWQ0MzBcdWQ0MzFcdWQ0MzJcdWQ0MzNcdWQ0MzRcdWQ0MzVcdWQ0MzZcdWQ0MzdcdWMyMmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFc''@;'; put 'put ''dWMyNTRcdWMyNThcdWMyNjBcdWMyNjVcdWMyNmNcdWMyNmRcdWMyNzBcdWMyNzRcdWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJcdWMyOWRcdWMyYTRcdWMyYTVcdWMyYThcdWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMy''@;'; put 'put ''ZGNcdWMyZGRcdWMyZTBcdWMyZTNcdWMyZTRcdWMyZWJcdWMyZWNcdWMyZWRcdWMyZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMzMDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMzMTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhc''@;'; put 'put ''dWMzMjlcdWMzNDVcdWMzNjhcdWMzNjlcdWMzNmNcdWMzNzBcdWMzNzJcdWMzNzhcdWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlcdWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJcdWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0''@;'; put 'put ''MDhcdWM0MTBcdWM0MjRcdWM0MmNcdWM0MzBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODldW2ddXT00ODM4NCtnLHlbNDgzODQrZ109X1sxODldW2ddKTtmb3IoX1sxOTBdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MzhcdWQ0MzlcdWQ0M2FcdWQ0M2JcdWQ0M2NcdWQ0M2RcdWQ0M2VcdWQ0M2ZcdWQ0NDFcdWQ0NDJcdWQ0NDNcdWQ0NDVcdWQ0NDZcdWQ0NDdcdWQ0NDhcdWQ0NDlcdWQ0NGFcdWQ0NGJcdWQ0''@;'; put 'put ''NGNcdWQ0NGRcdWQ0NGVcdWQ0NGZcdWQ0NTBcdWQ0NTFcdWQ0NTJcdWQ0NTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0NTRcdWQ0NTVcdWQ0NTZcdWQ0NTdcdWQ0NThcdWQ0NTlcdWQ0NWFcdWQ0NWJcdWQ0NWRcdWQ0NWVcdWQ0NWZcdWQ0NjFcdWQ0NjJcdWQ0NjNc''@;'; put 'put ''dWQ0NjVcdWQ0NjZcdWQ0NjdcdWQ0NjhcdWQ0NjlcdWQ0NmFcdWQ0NmJcdWQ0NmNcdWQ0NmVcdWQ0NzBcdWQ0NzFcdWQ0NzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0NzNcdWQ0NzRcdWQ0NzVcdWQ0NzZcdWQ0NzdcdWQ0N2FcdWQ0N2JcdWQ0N2RcdWQ0N2VcdWQ0''@;'; put 'put ''ODFcdWQ0ODNcdWQ0ODRcdWQ0ODVcdWQ0ODZcdWQ0ODdcdWQ0OGFcdWQ0OGNcdWQ0OGVcdWQ0OGZcdWQ0OTBcdWQ0OTFcdWQ0OTJcdWQ0OTNcdWQ0OTVcdWQ0OTZcdWQ0OTdcdWQ0OThcdWQ0OTlcdWQ0OWFcdWQ0OWJcdWQ0OWNcdWQ0OWRcdWM0MzRcdWM0M2NcdWM0M2RcdWM0NDhcdWM0NjRc''@;'; put 'put ''dWM0NjVcdWM0NjhcdWM0NmNcdWM0NzRcdWM0NzVcdWM0NzlcdWM0ODBcdWM0OTRcdWM0OWNcdWM0YjhcdWM0YmNcdWM0ZTlcdWM0ZjBcdWM0ZjFcdWM0ZjRcdWM0ZjhcdWM0ZmFcdWM0ZmZcdWM1MDBcdWM1MDFcdWM1MGNcdWM1MTBcdWM1MTRcdWM1MWNcdWM1MjhcdWM1MjlcdWM1MmNcdWM1''@;'; put 'put ''MzBcdWM1MzhcdWM1MzlcdWM1M2JcdWM1M2RcdWM1NDRcdWM1NDVcdWM1NDhcdWM1NDlcdWM1NGFcdWM1NGNcdWM1NGRcdWM1NGVcdWM1NTNcdWM1NTRcdWM1NTVcdWM1NTdcdWM1NThcdWM1NTlcdWM1NWRcdWM1NWVcdWM1NjBcdWM1NjFcdWM1NjRcdWM1NjhcdWM1NzBcdWM1NzFcdWM1NzNc''@;'; put 'put ''dWM1NzRcdWM1NzVcdWM1N2NcdWM1N2RcdWM1ODBcdWM1ODRcdWM1ODdcdWM1OGNcdWM1OGRcdWM1OGZcdWM1OTFcdWM1OTVcdWM1OTdcdWM1OThcdWM1OWNcdWM1YTBcdWM1YTlcdWM1YjRcdWM1YjVcdWM1YjhcdWM1YjlcdWM1YmJcdWM1YmNcdWM1YmRcdWM1YmVcdWM1YzRcdWM1YzVcdWM1''@;'; put 'put ''YzZcdWM1YzdcdWM1YzhcdWM1YzlcdWM1Y2FcdWM1Y2NcdWM1Y2VcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTBdW2ddXT00ODY0MCtnLHlbNDg2NDArZ109X1sxOTBdW2ddKTtmb3IoX1sx''@;'; put 'put ''OTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0OWVcdWQ0OWZcdWQ0YTBcdWQ0YTFcdWQ0YTJcdWQ0YTNcdWQ0YTRcdWQ0YTVcdWQ0YTZcdWQ0YTdcdWQ0YThcdWQ0YWFcdWQ0YWJcdWQ0YWNcdWQ0YWRcdWQ0YWVcdWQ0''@;'; put 'put ''YWZcdWQ0YjBcdWQ0YjFcdWQ0YjJcdWQ0YjNcdWQ0YjRcdWQ0YjVcdWQ0YjZcdWQ0YjdcdWQ0YjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0YjlcdWQ0YmFcdWQ0YmJcdWQ0YmNcdWQ0YmRcdWQ0YmVcdWQ0YmZcdWQ0YzBcdWQ0YzFcdWQ0YzJcdWQ0YzNcdWQ0YzRc''@;'; put 'put ''dWQ0YzVcdWQ0YzZcdWQ0YzdcdWQ0YzhcdWQ0YzlcdWQ0Y2FcdWQ0Y2JcdWQ0Y2RcdWQ0Y2VcdWQ0Y2ZcdWQ0ZDFcdWQ0ZDJcdWQ0ZDNcdWQ0ZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZDZcdWQ0ZDdcdWQ0ZDhcdWQ0ZDlcdWQ0ZGFcdWQ0ZGJcdWQ0ZGRcdWQ0''@;'; put 'put ''ZGVcdWQ0ZTBcdWQ0ZTFcdWQ0ZTJcdWQ0ZTNcdWQ0ZTRcdWQ0ZTVcdWQ0ZTZcdWQ0ZTdcdWQ0ZTlcdWQ0ZWFcdWQ0ZWJcdWQ0ZWRcdWQ0ZWVcdWQ0ZWZcdWQ0ZjFcdWQ0ZjJcdWQ0ZjNcdWQ0ZjRcdWQ0ZjVcdWQ0ZjZcdWQ0ZjdcdWQ0ZjlcdWQ0ZmFcdWQ0ZmNcdWM1ZDBcdWM1ZDFcdWM1ZDRc''@;'; put 'put ''dWM1ZDhcdWM1ZTBcdWM1ZTFcdWM1ZTNcdWM1ZTVcdWM1ZWNcdWM1ZWRcdWM1ZWVcdWM1ZjBcdWM1ZjRcdWM1ZjZcdWM1ZjdcdWM1ZmNcdWM1ZmRcdWM1ZmVcdWM1ZmZcdWM2MDBcdWM2MDFcdWM2MDVcdWM2MDZcdWM2MDdcdWM2MDhcdWM2MGNcdWM2MTBcdWM2MThcdWM2MTlcdWM2MWJcdWM2''@;'; put 'put ''MWNcdWM2MjRcdWM2MjVcdWM2MjhcdWM2MmNcdWM2MmRcdWM2MmVcdWM2MzBcdWM2MzNcdWM2MzRcdWM2MzVcdWM2MzdcdWM2MzlcdWM2M2JcdWM2NDBcdWM2NDFcdWM2NDRcdWM2NDhcdWM2NTBcdWM2NTFcdWM2NTNcdWM2NTRcdWM2NTVcdWM2NWNcdWM2NWRcdWM2NjBcdWM2NmNcdWM2NmZc''@;'; put 'put ''dWM2NzFcdWM2NzhcdWM2NzlcdWM2N2NcdWM2ODBcdWM2ODhcdWM2ODlcdWM2OGJcdWM2OGRcdWM2OTRcdWM2OTVcdWM2OThcdWM2OWNcdWM2YTRcdWM2YTVcdWM2YTdcdWM2YTlcdWM2YjBcdWM2YjFcdWM2YjRcdWM2YjhcdWM2YjlcdWM2YmFcdWM2YzBcdWM2YzFcdWM2YzNcdWM2YzVcdWM2''@;'; put 'put ''Y2NcdWM2Y2RcdWM2ZDBcdWM2ZDRcdWM2ZGNcdWM2ZGRcdWM2ZTBcdWM2ZTFcdWM2ZThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTFdW2ddXT00ODg5NitnLHlbNDg4OTYrZ109X1sxOTFd''@;'; put 'put ''W2ddKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZmVcdWQ0ZmZcdWQ1MDBcdWQ1MDFcdWQ1MDJcdWQ1MDNcdWQ1MDVcdWQ1MDZcdWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1MGJcdWQ1MGRcdWQ1MGVcdWQ1''@;'; put 'put ''MGZcdWQ1MTBcdWQ1MTFcdWQ1MTJcdWQ1MTNcdWQ1MTZcdWQ1MThcdWQ1MTlcdWQ1MWFcdWQ1MWJcdWQ1MWNcdWQ1MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MWVcdWQ1MWZcdWQ1MjBcdWQ1MjFcdWQ1MjJcdWQ1MjNcdWQ1MjRcdWQ1MjVcdWQ1MjZcdWQ1Mjdc''@;'; put 'put ''dWQ1MjhcdWQ1MjlcdWQ1MmFcdWQ1MmJcdWQ1MmNcdWQ1MmRcdWQ1MmVcdWQ1MmZcdWQ1MzBcdWQ1MzFcdWQ1MzJcdWQ1MzNcdWQ1MzRcdWQ1MzVcdWQ1MzZcdWQ1MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MzhcdWQ1MzlcdWQ1M2FcdWQ1M2JcdWQ1M2VcdWQ1''@;'; put 'put ''M2ZcdWQ1NDFcdWQ1NDJcdWQ1NDNcdWQ1NDVcdWQ1NDZcdWQ1NDdcdWQ1NDhcdWQ1NDlcdWQ1NGFcdWQ1NGJcdWQ1NGVcdWQ1NTBcdWQ1NTJcdWQ1NTNcdWQ1NTRcdWQ1NTVcdWQ1NTZcdWQ1NTdcdWQ1NWFcdWQ1NWJcdWQ1NWRcdWQ1NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlc''@;'; put 'put ''dWM2ZWNcdWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRcdWM3MDRcdWM3MDVcdWM3MDhcdWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3MjhcdWM3MzBcdWM3MzFcdWM3MzNcdWM3MzVcdWM3MzdcdWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3''@;'; put 'put ''NGNcdWM3NGRcdWM3NGZcdWM3NTFcdWM3NTJcdWM3NTNcdWM3NTRcdWM3NTVcdWM3NTZcdWM3NTdcdWM3NThcdWM3NWNcdWM3NjBcdWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVcdWM3NzhcdWM3N2NcdWM3N2RcdWM3N2VcdWM3ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFc''@;'; put 'put ''dWM3OGVcdWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZcdWM3OTdcdWM3OThcdWM3OWFcdWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRcdWM3YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3YmZcdWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3''@;'; put 'put ''ZDBcdWM3ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3ZWNcdWM4MDBcdWM4MDFcdWM4MDRcdWM4MDhcdWM4MGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTJdW2ddXT00OTE1MitnLHlbNDkx''@;'; put 'put ''NTIrZ109X1sxOTJdW2ddKTtmb3IoX1sxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1NjRcdWQ1NjZcdWQ1NjdcdWQ1NmFcdWQ1NmNcdWQ1NmVcdWQ1NmZcdWQ1NzBcdWQ1NzFcdWQ1NzJcdWQ1NzNcdWQ1NzZcdWQ1''@;'; put 'put ''NzdcdWQ1NzlcdWQ1N2FcdWQ1N2JcdWQ1N2RcdWQ1N2VcdWQ1N2ZcdWQ1ODBcdWQ1ODFcdWQ1ODJcdWQ1ODNcdWQ1ODZcdWQ1OGFcdWQ1OGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1OGNcdWQ1OGRcdWQ1OGVcdWQ1OGZcdWQ1OTFcdWQ1OTJcdWQ1OTNcdWQ1OTRc''@;'; put 'put ''dWQ1OTVcdWQ1OTZcdWQ1OTdcdWQ1OThcdWQ1OTlcdWQ1OWFcdWQ1OWJcdWQ1OWNcdWQ1OWRcdWQ1OWVcdWQ1OWZcdWQ1YTBcdWQ1YTFcdWQ1YTJcdWQ1YTNcdWQ1YTRcdWQ1YTZcdWQ1YTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1YThcdWQ1YTlcdWQ1YWFcdWQ1''@;'; put 'put ''YWJcdWQ1YWNcdWQ1YWRcdWQ1YWVcdWQ1YWZcdWQ1YjBcdWQ1YjFcdWQ1YjJcdWQ1YjNcdWQ1YjRcdWQ1YjVcdWQ1YjZcdWQ1YjdcdWQ1YjhcdWQ1YjlcdWQ1YmFcdWQ1YmJcdWQ1YmNcdWQ1YmRcdWQ1YmVcdWQ1YmZcdWQ1YzBcdWQ1YzFcdWQ1YzJcdWQ1YzNcdWQ1YzRcdWQ1YzVcdWQ1YzZc''@;'; put 'put ''dWQ1YzdcdWM4MTBcdWM4MTFcdWM4MTNcdWM4MTVcdWM4MTZcdWM4MWNcdWM4MWRcdWM4MjBcdWM4MjRcdWM4MmNcdWM4MmRcdWM4MmZcdWM4MzFcdWM4MzhcdWM4M2NcdWM4NDBcdWM4NDhcdWM4NDlcdWM4NGNcdWM4NGRcdWM4NTRcdWM4NzBcdWM4NzFcdWM4NzRcdWM4NzhcdWM4N2FcdWM4''@;'; put 'put ''ODBcdWM4ODFcdWM4ODNcdWM4ODVcdWM4ODZcdWM4ODdcdWM4OGJcdWM4OGNcdWM4OGRcdWM4OTRcdWM4OWRcdWM4OWZcdWM4YTFcdWM4YThcdWM4YmNcdWM4YmRcdWM4YzRcdWM4YzhcdWM4Y2NcdWM4ZDRcdWM4ZDVcdWM4ZDdcdWM4ZDlcdWM4ZTBcdWM4ZTFcdWM4ZTRcdWM4ZjVcdWM4ZmNc''@;'; put 'put ''dWM4ZmRcdWM5MDBcdWM5MDRcdWM5MDVcdWM5MDZcdWM5MGNcdWM5MGRcdWM5MGZcdWM5MTFcdWM5MThcdWM5MmNcdWM5MzRcdWM5NTBcdWM5NTFcdWM5NTRcdWM5NThcdWM5NjBcdWM5NjFcdWM5NjNcdWM5NmNcdWM5NzBcdWM5NzRcdWM5N2NcdWM5ODhcdWM5ODlcdWM5OGNcdWM5OTBcdWM5''@;'; put 'put ''OThcdWM5OTlcdWM5OWJcdWM5OWRcdWM5YzBcdWM5YzFcdWM5YzRcdWM5YzdcdWM5YzhcdWM5Y2FcdWM5ZDBcdWM5ZDFcdWM5ZDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTNdW2ddXT00''@;'; put 'put ''OTQwOCtnLHlbNDk0MDgrZ109X1sxOTNdW2ddKTtmb3IoX1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1Y2FcdWQ1Y2JcdWQ1Y2RcdWQ1Y2VcdWQ1Y2ZcdWQ1ZDFcdWQ1ZDNcdWQ1ZDRcdWQ1ZDVcdWQ1ZDZcdWQ1''@;'; put 'put ''ZDdcdWQ1ZGFcdWQ1ZGNcdWQ1ZGVcdWQ1ZGZcdWQ1ZTBcdWQ1ZTFcdWQ1ZTJcdWQ1ZTNcdWQ1ZTZcdWQ1ZTdcdWQ1ZTlcdWQ1ZWFcdWQ1ZWJcdWQ1ZWRcdWQ1ZWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1ZWZcdWQ1ZjBcdWQ1ZjFcdWQ1ZjJcdWQ1ZjNcdWQ1ZjZc''@;'; put 'put ''dWQ1ZjhcdWQ1ZmFcdWQ1ZmJcdWQ1ZmNcdWQ1ZmRcdWQ1ZmVcdWQ1ZmZcdWQ2MDJcdWQ2MDNcdWQ2MDVcdWQ2MDZcdWQ2MDdcdWQ2MDlcdWQ2MGFcdWQ2MGJcdWQ2MGNcdWQ2MGRcdWQ2MGVcdWQ2MGZcdWQ2MTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MTZcdWQ2''@;'; put 'put ''MTdcdWQ2MThcdWQ2MTlcdWQ2MWFcdWQ2MWJcdWQ2MWRcdWQ2MWVcdWQ2MWZcdWQ2MjFcdWQ2MjJcdWQ2MjNcdWQ2MjVcdWQ2MjZcdWQ2MjdcdWQ2MjhcdWQ2MjlcdWQ2MmFcdWQ2MmJcdWQ2MmNcdWQ2MmVcdWQ2MmZcdWQ2MzBcdWQ2MzFcdWQ2MzJcdWQ2MzNcdWQ2MzRcdWQ2MzVcdWQ2MzZc''@;'; put 'put ''dWQ2MzdcdWQ2M2FcdWQ2M2JcdWM5ZDVcdWM5ZDZcdWM5ZDlcdWM5ZGFcdWM5ZGNcdWM5ZGRcdWM5ZTBcdWM5ZTJcdWM5ZTRcdWM5ZTdcdWM5ZWNcdWM5ZWRcdWM5ZWZcdWM5ZjBcdWM5ZjFcdWM5ZjhcdWM5ZjlcdWM5ZmNcdWNhMDBcdWNhMDhcdWNhMDlcdWNhMGJcdWNhMGNcdWNhMGRcdWNh''@;'; put 'put ''MTRcdWNhMThcdWNhMjlcdWNhNGNcdWNhNGRcdWNhNTBcdWNhNTRcdWNhNWNcdWNhNWRcdWNhNWZcdWNhNjBcdWNhNjFcdWNhNjhcdWNhN2RcdWNhODRcdWNhOThcdWNhYmNcdWNhYmRcdWNhYzBcdWNhYzRcdWNhY2NcdWNhY2RcdWNhY2ZcdWNhZDFcdWNhZDNcdWNhZDhcdWNhZDlcdWNhZTBc''@;'; put 'put ''dWNhZWNcdWNhZjRcdWNiMDhcdWNiMTBcdWNiMTRcdWNiMThcdWNiMjBcdWNiMjFcdWNiNDFcdWNiNDhcdWNiNDlcdWNiNGNcdWNiNTBcdWNiNThcdWNiNTlcdWNiNWRcdWNiNjRcdWNiNzhcdWNiNzlcdWNiOWNcdWNiYjhcdWNiZDRcdWNiZTRcdWNiZTdcdWNiZTlcdWNjMGNcdWNjMGRcdWNj''@;'; put 'put ''MTBcdWNjMTRcdWNjMWNcdWNjMWRcdWNjMjFcdWNjMjJcdWNjMjdcdWNjMjhcdWNjMjlcdWNjMmNcdWNjMmVcdWNjMzBcdWNjMzhcdWNjMzlcdWNjM2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NF1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1sxOTRdW2ddXT00OTY2NCtnLHlbNDk2NjQrZ109X1sxOTRdW2ddKTtmb3IoX1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2M2RcdWQ2M2VcdWQ2M2ZcdWQ2NDFcdWQ2NDJcdWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2''@;'; put 'put ''NDdcdWQ2NGFcdWQ2NGNcdWQ2NGVcdWQ2NGZcdWQ2NTBcdWQ2NTJcdWQ2NTNcdWQ2NTZcdWQ2NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWRcdWQ2NWVcdWQ2NWZcdWQ2NjBcdWQ2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2NjJcdWQ2NjNcdWQ2NjRcdWQ2NjVc''@;'; put 'put ''dWQ2NjZcdWQ2NjhcdWQ2NmFcdWQ2NmJcdWQ2NmNcdWQ2NmRcdWQ2NmVcdWQ2NmZcdWQ2NzJcdWQ2NzNcdWQ2NzVcdWQ2NzZcdWQ2NzdcdWQ2NzhcdWQ2NzlcdWQ2N2FcdWQ2N2JcdWQ2N2NcdWQ2N2RcdWQ2N2VcdWQ2N2ZcdWQ2ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODZcdWQ2ODdcdWQ2ODhcdWQ2ODlcdWQ2OGFcdWQ2OGJcdWQ2OGVcdWQ2OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTVcdWQ2OTZcdWQ2OTdcdWQ2OThcdWQ2OTlcdWQ2OWFcdWQ2OWJcdWQ2OWNcdWQ2OWVcdWQ2YTBcdWQ2YTJcdWQ2YTNcdWQ2YTRc''@;'; put 'put ''dWQ2YTVcdWQ2YTZcdWQ2YTdcdWQ2YTlcdWQ2YWFcdWNjM2NcdWNjM2RcdWNjM2VcdWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRcdWNjNTVcdWNjNTdcdWNjNThcdWNjNTlcdWNjNjBcdWNjNjRcdWNjNjZcdWNjNjhcdWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNjOWNcdWNjYTBcdWNj''@;'; put 'put ''YThcdWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRcdWNjYjRcdWNjYjVcdWNjYjhcdWNjYmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNjZDBcdWNjZDRcdWNjZTRcdWNjZWNcdWNjZjBcdWNkMDFcdWNkMDhcdWNkMDlcdWNkMGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJcdWNkMWRcdWNkMjRc''@;'; put 'put ''dWNkMjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNkNjBcdWNkNjRcdWNkNmNcdWNkNmRcdWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRcdWNkOTVcdWNkOThcdWNkOWNcdWNkYTRcdWNkYTVcdWNkYTdcdWNkYTlcdWNkYjBcdWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNkZWNcdWNkZjBcdWNk''@;'; put 'put ''ZjhcdWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRcdWNlMDhcdWNlMGNcdWNlMTRcdWNlMTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNlMzBcdWNlMzFcdWNlMzNcdWNlMzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NV1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1sxOTVdW2ddXT00OTkyMCtnLHlbNDk5MjArZ109X1sxOTVdW2ddKTtmb3IoX1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2YWJcdWQ2YWRcdWQ2YWVcdWQ2YWZcdWQ2YjFcdWQ2YjJcdWQ2''@;'; put 'put ''YjNcdWQ2YjRcdWQ2YjVcdWQ2YjZcdWQ2YjdcdWQ2YjhcdWQ2YmFcdWQ2YmNcdWQ2YmRcdWQ2YmVcdWQ2YmZcdWQ2YzBcdWQ2YzFcdWQ2YzJcdWQ2YzNcdWQ2YzZcdWQ2YzdcdWQ2YzlcdWQ2Y2FcdWQ2Y2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2Y2RcdWQ2Y2Vc''@;'; put 'put ''dWQ2Y2ZcdWQ2ZDBcdWQ2ZDJcdWQ2ZDNcdWQ2ZDVcdWQ2ZDZcdWQ2ZDhcdWQ2ZGFcdWQ2ZGJcdWQ2ZGNcdWQ2ZGRcdWQ2ZGVcdWQ2ZGZcdWQ2ZTFcdWQ2ZTJcdWQ2ZTNcdWQ2ZTVcdWQ2ZTZcdWQ2ZTdcdWQ2ZTlcdWQ2ZWFcdWQ2ZWJcdWQ2ZWNcdWQ2ZWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWQ2ZWVcdWQ2ZWZcdWQ2ZjFcdWQ2ZjJcdWQ2ZjNcdWQ2ZjRcdWQ2ZjZcdWQ2ZjdcdWQ2ZjhcdWQ2ZjlcdWQ2ZmFcdWQ2ZmJcdWQ2ZmVcdWQ2ZmZcdWQ3MDFcdWQ3MDJcdWQ3MDNcdWQ3MDVcdWQ3MDZcdWQ3MDdcdWQ3MDhcdWQ3MDlcdWQ3MGFcdWQ3MGJcdWQ3MGNc''@;'; put 'put ''dWQ3MGRcdWQ3MGVcdWQ3MGZcdWQ3MTBcdWQ3MTJcdWQ3MTNcdWQ3MTRcdWNlNThcdWNlNTlcdWNlNWNcdWNlNWZcdWNlNjBcdWNlNjFcdWNlNjhcdWNlNjlcdWNlNmJcdWNlNmRcdWNlNzRcdWNlNzVcdWNlNzhcdWNlN2NcdWNlODRcdWNlODVcdWNlODdcdWNlODlcdWNlOTBcdWNlOTFcdWNl''@;'; put 'put ''OTRcdWNlOThcdWNlYTBcdWNlYTFcdWNlYTNcdWNlYTRcdWNlYTVcdWNlYWNcdWNlYWRcdWNlYzFcdWNlZTRcdWNlZTVcdWNlZThcdWNlZWJcdWNlZWNcdWNlZjRcdWNlZjVcdWNlZjdcdWNlZjhcdWNlZjlcdWNmMDBcdWNmMDFcdWNmMDRcdWNmMDhcdWNmMTBcdWNmMTFcdWNmMTNcdWNmMTVc''@;'; put 'put ''dWNmMWNcdWNmMjBcdWNmMjRcdWNmMmNcdWNmMmRcdWNmMmZcdWNmMzBcdWNmMzFcdWNmMzhcdWNmNTRcdWNmNTVcdWNmNThcdWNmNWNcdWNmNjRcdWNmNjVcdWNmNjdcdWNmNjlcdWNmNzBcdWNmNzFcdWNmNzRcdWNmNzhcdWNmODBcdWNmODVcdWNmOGNcdWNmYTFcdWNmYThcdWNmYjBcdWNm''@;'; put 'put ''YzRcdWNmZTBcdWNmZTFcdWNmZTRcdWNmZThcdWNmZjBcdWNmZjFcdWNmZjNcdWNmZjVcdWNmZmNcdWQwMDBcdWQwMDRcdWQwMTFcdWQwMThcdWQwMmRcdWQwMzRcdWQwMzVcdWQwMzhcdWQwM2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5''@;'; put 'put ''Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTZdW2ddXT01MDE3NitnLHlbNTAxNzYrZ109X1sxOTZdW2ddKTtmb3IoX1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3MTVcdWQ3MTZcdWQ3MTdcdWQ3MWFcdWQ3''@;'; put 'put ''MWJcdWQ3MWRcdWQ3MWVcdWQ3MWZcdWQ3MjFcdWQ3MjJcdWQ3MjNcdWQ3MjRcdWQ3MjVcdWQ3MjZcdWQ3MjdcdWQ3MmFcdWQ3MmNcdWQ3MmVcdWQ3MmZcdWQ3MzBcdWQ3MzFcdWQ3MzJcdWQ3MzNcdWQ3MzZcdWQ3MzdcdWQ3MzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWQ3M2FcdWQ3M2JcdWQ3M2RcdWQ3M2VcdWQ3M2ZcdWQ3NDBcdWQ3NDFcdWQ3NDJcdWQ3NDNcdWQ3NDVcdWQ3NDZcdWQ3NDhcdWQ3NGFcdWQ3NGJcdWQ3NGNcdWQ3NGRcdWQ3NGVcdWQ3NGZcdWQ3NTJcdWQ3NTNcdWQ3NTVcdWQ3NWFcdWQ3NWJcdWQ3NWNcdWQ3NWRcdWQ3NWVcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3NWZcdWQ3NjJcdWQ3NjRcdWQ3NjZcdWQ3NjdcdWQ3NjhcdWQ3NmFcdWQ3NmJcdWQ3NmRcdWQ3NmVcdWQ3NmZcdWQ3NzFcdWQ3NzJcdWQ3NzNcdWQ3NzVcdWQ3NzZcdWQ3NzdcdWQ3NzhcdWQ3NzlcdWQ3N2FcdWQ3N2JcdWQ3N2VcdWQ3N2Zc''@;'; put 'put ''dWQ3ODBcdWQ3ODJcdWQ3ODNcdWQ3ODRcdWQ3ODVcdWQ3ODZcdWQ3ODdcdWQ3OGFcdWQ3OGJcdWQwNDRcdWQwNDVcdWQwNDdcdWQwNDlcdWQwNTBcdWQwNTRcdWQwNThcdWQwNjBcdWQwNmNcdWQwNmRcdWQwNzBcdWQwNzRcdWQwN2NcdWQwN2RcdWQwODFcdWQwYTRcdWQwYTVcdWQwYThcdWQw''@;'; put 'put ''YWNcdWQwYjRcdWQwYjVcdWQwYjdcdWQwYjlcdWQwYzBcdWQwYzFcdWQwYzRcdWQwYzhcdWQwYzlcdWQwZDBcdWQwZDFcdWQwZDNcdWQwZDRcdWQwZDVcdWQwZGNcdWQwZGRcdWQwZTBcdWQwZTRcdWQwZWNcdWQwZWRcdWQwZWZcdWQwZjBcdWQwZjFcdWQwZjhcdWQxMGRcdWQxMzBcdWQxMzFc''@;'; put 'put ''dWQxMzRcdWQxMzhcdWQxM2FcdWQxNDBcdWQxNDFcdWQxNDNcdWQxNDRcdWQxNDVcdWQxNGNcdWQxNGRcdWQxNTBcdWQxNTRcdWQxNWNcdWQxNWRcdWQxNWZcdWQxNjFcdWQxNjhcdWQxNmNcdWQxN2NcdWQxODRcdWQxODhcdWQxYTBcdWQxYTFcdWQxYTRcdWQxYThcdWQxYjBcdWQxYjFcdWQx''@;'; put 'put ''YjNcdWQxYjVcdWQxYmFcdWQxYmNcdWQxYzBcdWQxZDhcdWQxZjRcdWQxZjhcdWQyMDdcdWQyMDlcdWQyMTBcdWQyMmNcdWQyMmRcdWQyMzBcdWQyMzRcdWQyM2NcdWQyM2RcdWQyM2ZcdWQyNDFcdWQyNDhcdWQyNWNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTddLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzE5N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTddW2ddXT01MDQzMitnLHlbNTA0MzIrZ109X1sxOTddW2ddKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3OGRcdWQ3OGVcdWQ3''@;'; put 'put ''OGZcdWQ3OTFcdWQ3OTJcdWQ3OTNcdWQ3OTRcdWQ3OTVcdWQ3OTZcdWQ3OTdcdWQ3OWFcdWQ3OWNcdWQ3OWVcdWQ3OWZcdWQ3YTBcdWQ3YTFcdWQ3YTJcdWQ3YTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQyODhcdWQyOTBcdWQyOTFcdWQyOTVcdWQyOWNcdWQyYTBcdWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQy''@;'; put 'put ''YmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQyYzlcdWQyY2JcdWQyZDRcdWQyZDhcdWQyZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBcdWQzMDFcdWQzMDNcdWQzMDVcdWQzMGNcdWQzMGRcdWQzMGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZc''@;'; put 'put ''dWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhcdWQzMjlcdWQzMmNcdWQzMzBcdWQzMzhcdWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQzN2RcdWQzODBcdWQzODRcdWQzOGNcdWQzOGRcdWQzOGZcdWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQz''@;'; put 'put ''YThcdWQzYTlcdWQzYWJcdWQzYWRcdWQzYjRcdWQzYjhcdWQzYmNcdWQzYzRcdWQzYzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNcdWQzZWRcdWQzZjBcdWQzZjRcdWQzZmNcdWQzZmRcdWQzZmZcdWQ0MDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOThd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOThdW2ddXT01MDY4OCtnLHlbNTA2ODgrZ109X1sxOThdW2ddKTtmb3IoX1sxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MDhcdWQ0MWRcdWQ0NDBcdWQ0NDRcdWQ0NWNcdWQ0NjBcdWQ0NjRcdWQ0NmRcdWQ0NmZcdWQ0NzhcdWQ0NzlcdWQ0N2NcdWQ0N2ZcdWQ0ODBcdWQ0''@;'; put 'put ''ODJcdWQ0ODhcdWQ0ODlcdWQ0OGJcdWQ0OGRcdWQ0OTRcdWQ0YTlcdWQ0Y2NcdWQ0ZDBcdWQ0ZDRcdWQ0ZGNcdWQ0ZGZcdWQ0ZThcdWQ0ZWNcdWQ0ZjBcdWQ0ZjhcdWQ0ZmJcdWQ0ZmRcdWQ1MDRcdWQ1MDhcdWQ1MGNcdWQ1MTRcdWQ1MTVcdWQ1MTdcdWQ1M2NcdWQ1M2RcdWQ1NDBcdWQ1NDRc''@;'; put 'put ''dWQ1NGNcdWQ1NGRcdWQ1NGZcdWQ1NTFcdWQ1NThcdWQ1NTlcdWQ1NWNcdWQ1NjBcdWQ1NjVcdWQ1NjhcdWQ1NjlcdWQ1NmJcdWQ1NmRcdWQ1NzRcdWQ1NzVcdWQ1NzhcdWQ1N2NcdWQ1ODRcdWQ1ODVcdWQ1ODdcdWQ1ODhcdWQ1ODlcdWQ1OTBcdWQ1YTVcdWQ1YzhcdWQ1YzlcdWQ1Y2NcdWQ1''@;'; put 'put ''ZDBcdWQ1ZDJcdWQ1ZDhcdWQ1ZDlcdWQ1ZGJcdWQ1ZGRcdWQ1ZTRcdWQ1ZTVcdWQ1ZThcdWQ1ZWNcdWQ1ZjRcdWQ1ZjVcdWQ1ZjdcdWQ1ZjlcdWQ2MDBcdWQ2MDFcdWQ2MDRcdWQ2MDhcdWQ2MTBcdWQ2MTFcdWQ2MTNcdWQ2MTRcdWQ2MTVcdWQ2MWNcdWQ2MjBcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1sxOTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTldW2ddXT01MDk0NCtnLHlbNTA5NDQrZ109X1sxOTldW2ddKTtmb3IoX1syMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MjRcdWQ2MmRcdWQ2MzhcdWQ2MzlcdWQ2M2NcdWQ2NDBcdWQ2NDVcdWQ2NDhcdWQ2NDlcdWQ2NGJcdWQ2NGRcdWQ2NTFcdWQ2''@;'; put 'put ''NTRcdWQ2NTVcdWQ2NThcdWQ2NWNcdWQ2NjdcdWQ2NjlcdWQ2NzBcdWQ2NzFcdWQ2NzRcdWQ2ODNcdWQ2ODVcdWQ2OGNcdWQ2OGRcdWQ2OTBcdWQ2OTRcdWQ2OWRcdWQ2OWZcdWQ2YTFcdWQ2YThcdWQ2YWNcdWQ2YjBcdWQ2YjlcdWQ2YmJcdWQ2YzRcdWQ2YzVcdWQ2YzhcdWQ2Y2NcdWQ2ZDFc''@;'; put 'put ''dWQ2ZDRcdWQ2ZDdcdWQ2ZDlcdWQ2ZTBcdWQ2ZTRcdWQ2ZThcdWQ2ZjBcdWQ2ZjVcdWQ2ZmNcdWQ2ZmRcdWQ3MDBcdWQ3MDRcdWQ3MTFcdWQ3MThcdWQ3MTlcdWQ3MWNcdWQ3MjBcdWQ3MjhcdWQ3MjlcdWQ3MmJcdWQ3MmRcdWQ3MzRcdWQ3MzVcdWQ3MzhcdWQ3M2NcdWQ3NDRcdWQ3NDdcdWQ3''@;'; put 'put ''NDlcdWQ3NTBcdWQ3NTFcdWQ3NTRcdWQ3NTZcdWQ3NTdcdWQ3NThcdWQ3NTlcdWQ3NjBcdWQ3NjFcdWQ3NjNcdWQ3NjVcdWQ3NjlcdWQ3NmNcdWQ3NzBcdWQ3NzRcdWQ3N2NcdWQ3N2RcdWQ3ODFcdWQ3ODhcdWQ3ODlcdWQ3OGNcdWQ3OTBcdWQ3OThcdWQ3OTlcdWQ3OWJcdWQ3OWRcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1syMDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDBdW2ddXT01MTIwMCtnLHlbNTEyMDArZ109X1syMDBdW2ddKTtmb3IoX1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmM2RcdTRmNzNcdTUwNDdcdTUwZjlcdTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFcdTVi''@;'; put 'put ''YjZcdTY2ODdcdTY3YjZcdTY3YjdcdTY3ZWZcdTZiNGNcdTczYzJcdTc1YzJcdTdhM2NcdTgyZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZcdThjYzhcdThkY2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUyM2JcdTUzNzRcdTU0MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5YmFc''@;'; put 'put ''dTg5ZDJcdTk1YTNcdTRmODNcdTUyMGFcdTU4YmVcdTU5NzhcdTU5ZTZcdTVlNzJcdTVlNzlcdTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4N2ZcdTZmOTdcdTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhcdTdhZmZcdTdjMjFcdTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJcdTU1''@;'; put 'put ''OWRcdTY2ZjdcdTZlMzRcdTc4YTNcdTdhZWRcdTg0NWJcdTg5MTBcdTg3NGVcdTk3YThcdTUyZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZcdTYxYmVcdTYyMjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZlMWJcdTc1MThcdTc1YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0NTJc''@;'; put 'put ''dTlmOTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDJdW2ddXT01MTcxMitnLHlbNTE3MTIrZ109X1syMDJdW2ddKTtmb3IoX1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMjNcdTVjYWNcdTc1MzJcdTgwZGJcdTkyNDBcdTk1OThcdTUyNWJcdTU4MDhcdTU5''@;'; put 'put ''ZGNcdTVjYTFcdTVkMTdcdTVlYjdcdTVmM2FcdTVmNGFcdTYxNzdcdTZjNWZcdTc1N2FcdTc1ODZcdTdjZTBcdTdkNzNcdTdkYjFcdTdmOGNcdTgxNTRcdTgyMjFcdTg1OTFcdTg5NDFcdThiMWJcdTkyZmNcdTk2NGRcdTljNDdcdTRlY2JcdTRlZjdcdTUwMGJcdTUxZjFcdTU4NGZcdTYxMzdc''@;'; put 'put ''dTYxM2VcdTYxNjhcdTY1MzlcdTY5ZWFcdTZmMTFcdTc1YTVcdTc2ODZcdTc2ZDZcdTdiODdcdTgyYTVcdTg0Y2JcdWY5MDBcdTkzYTdcdTk1OGJcdTU1ODBcdTViYTJcdTU3NTFcdWY5MDFcdTdjYjNcdTdmYjlcdTkxYjVcdTUwMjhcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYzNmVcdTY0''@;'; put 'put ''ZGFcdTY0ZTdcdTZlMjBcdTcwYWNcdTc5NWJcdThkZGRcdThlMWVcdWY5MDJcdTkwN2RcdTkyNDVcdTkyZjhcdTRlN2VcdTRlZjZcdTUwNjVcdTVkZmVcdTVlZmFcdTYxMDZcdTY5NTdcdTgxNzFcdTg2NTRcdThlNDdcdTkzNzVcdTlhMmJcdTRlNWVcdTUwOTFcdTY3NzBcdTY4NDBcdTUxMDlc''@;'; put 'put ''dTUyOGRcdTUyOTJcdTZhYTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDNdW2ddXT01MTk2OCtnLHlbNTE5NjgrZ109X1syMDNdW2ddKTtmb3IoX1syMDRdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YmNcdTkyMTBcdTllZDRcdTUyYWJcdTYwMmZcdThmZjJcdTUw''@;'; put 'put ''NDhcdTYxYTlcdTYzZWRcdTY0Y2FcdTY4M2NcdTZhODRcdTZmYzBcdTgxODhcdTg5YTFcdTk2OTRcdTU4MDVcdTcyN2RcdTcyYWNcdTc1MDRcdTdkNzlcdTdlNmRcdTgwYTlcdTg5OGJcdThiNzRcdTkwNjNcdTlkNTFcdTYyODlcdTZjN2FcdTZmNTRcdTdkNTBcdTdmM2FcdThhMjNcdTUxN2Nc''@;'; put 'put ''dTYxNGFcdTdiOWRcdThiMTlcdTkyNTdcdTkzOGNcdTRlYWNcdTRmZDNcdTUwMWVcdTUwYmVcdTUxMDZcdTUyYzFcdTUyY2RcdTUzN2ZcdTU3NzBcdTU4ODNcdTVlOWFcdTVmOTFcdTYxNzZcdTYxYWNcdTY0Y2VcdTY1NmNcdTY2NmZcdTY2YmJcdTY2ZjRcdTY4OTdcdTZkODdcdTcwODVcdTcw''@;'; put 'put ''ZjFcdTc0OWZcdTc0YTVcdTc0Y2FcdTc1ZDlcdTc4NmNcdTc4ZWNcdTdhZGZcdTdhZjZcdTdkNDVcdTdkOTNcdTgwMTVcdTgwM2ZcdTgxMWJcdTgzOTZcdThiNjZcdThmMTVcdTkwMTVcdTkzZTFcdTk4MDNcdTk4MzhcdTlhNWFcdTliZThcdTRmYzJcdTU1NTNcdTU4M2FcdTU5NTFcdTViNjNc''@;'; put 'put ''dTVjNDZcdTYwYjhcdTYyMTJcdTY4NDJcdTY4YjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDRdW2ddXT01MjIyNCtnLHlbNTIyMjQrZ109X1syMDRdW2ddKTtmb3IoX1syMDVdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4ZThcdTZlYWFcdTc1NGNcdTc2NzhcdTc4''@;'; put 'put ''Y2VcdTdhM2RcdTdjZmJcdTdlNmJcdTdlN2NcdThhMDhcdThhYTFcdThjM2ZcdTk2OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFcdTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJcdTYyZjdcdTY1MzdcdTY1NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRcdTc1ZmNc''@;'; put 'put ''dTc2OTBcdTc3N2VcdTdhM2ZcdTdmOTRcdTgwMDNcdTgwYTFcdTgxOGZcdTgyZTZcdTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4NjdcdTlhZDhcdTlmMTNcdTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThjMzdcdTlk''@;'; put 'put ''NjBcdTU2ZjBcdTU3NjRcdTVkMTFcdTY2MDZcdTY4YjFcdTY4Y2RcdTZlZmVcdTc0MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJcdTUxNmNcdTUxNzFcdTUyOWZcdTViNTRcdTVkZTVcdTYwNTBcdTYwNmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2FcdTg2YTNc''@;'; put 'put ''dThjYTJcdTk3OGZcdTRlMzJcdTViZTFcdTYyMDhcdTY3OWNcdTc0ZGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDVdW2ddXT01MjQ4MCtnLHlbNTI0ODArZ109X1syMDVdW2ddKTtmb3Io''@;'; put 'put ''X1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5ZDFcdTgzZDNcdThh''@;'; put 'put ''ODdcdThhYjJcdThkZThcdTkwNGVcdTkzNGJcdTk4NDZcdTVlZDNcdTY5ZThcdTg1ZmZcdTkwZWRcdWY5MDVcdTUxYTBcdTViOThcdTViZWNcdTYxNjNcdTY4ZmFcdTZiM2VcdTcwNGNcdTc0MmZcdTc0ZDhcdTdiYTFcdTdmNTBcdTgzYzVcdTg5YzBcdThjYWJcdTk1ZGNcdTk5MjhcdTUyMmVc''@;'; put 'put ''dTYwNWRcdTYyZWNcdTkwMDJcdTRmOGFcdTUxNDlcdTUzMjFcdTU4ZDlcdTVlZTNcdTY2ZTBcdTZkMzhcdTcwOWFcdTcyYzJcdTczZDZcdTdiNTBcdTgwZjFcdTk0NWJcdTUzNjZcdTYzOWJcdTdmNmJcdTRlNTZcdTUwODBcdTU4NGFcdTU4ZGVcdTYwMmFcdTYxMjdcdTYyZDBcdTY5ZDBcdTli''@;'; put 'put ''NDFcdTViOGZcdTdkMThcdTgwYjFcdThmNWZcdTRlYTRcdTUwZDFcdTU0YWNcdTU1YWNcdTViMGNcdTVkYTBcdTVkZTdcdTY1MmFcdTY1NGVcdTY4MjFcdTZhNGJcdTcyZTFcdTc2OGVcdTc3ZWZcdTdkNWVcdTdmZjlcdTgxYTBcdTg1NGVcdTg2ZGZcdThmMDNcdThmNGVcdTkwY2FcdTk5MDNc''@;'; put 'put ''dTlhNTVcdTliYWJcdTRlMThcdTRlNDVcdTRlNWRcdTRlYzdcdTRmZjFcdTUxNzdcdTUyZmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDZdW2ddXT01MjczNitnLHlbNTI3MzYrZ109X1sy''@;'; put 'put ''MDZdW2ddKTtmb3IoX1syMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUz''@;'; put 'put ''NDBcdTUzZTNcdTUzZTVcdTU0OGVcdTU2MTRcdTU3NzVcdTU3YTJcdTViYzdcdTVkODdcdTVlZDBcdTYxZmNcdTYyZDhcdTY1NTFcdTY3YjhcdTY3ZTlcdTY5Y2JcdTZiNTBcdTZiYzZcdTZiZWNcdTZjNDJcdTZlOWRcdTcwNzhcdTcyZDdcdTczOTZcdTc0MDNcdTc3YmZcdTc3ZTlcdTdhNzZc''@;'; put 'put ''dTdkN2ZcdTgwMDlcdTgxZmNcdTgyMDVcdTgyMGFcdTgyZGZcdTg4NjJcdThiMzNcdThjZmNcdThlYzBcdTkwMTFcdTkwYjFcdTkyNjRcdTkyYjZcdTk5ZDJcdTlhNDVcdTljZTlcdTlkZDdcdTlmOWNcdTU3MGJcdTVjNDBcdTgzY2FcdTk3YTBcdTk3YWJcdTllYjRcdTU0MWJcdTdhOThcdTdm''@;'; put 'put ''YTRcdTg4ZDlcdThlY2RcdTkwZTFcdTU4MDBcdTVjNDhcdTYzOThcdTdhOWZcdTViYWVcdTVmMTNcdTdhNzlcdTdhYWVcdTgyOGVcdThlYWNcdTUwMjZcdTUyMzhcdTUyZjhcdTUzNzdcdTU3MDhcdTYyZjNcdTYzNzJcdTZiMGFcdTZkYzNcdTc3MzdcdTUzYTVcdTczNTdcdTg1NjhcdThlNzZc''@;'; put 'put ''dTk1ZDVcdTY3M2FcdTZhYzNcdTZmNzBcdThhNmRcdThlY2NcdTk5NGJcdWY5MDZcdTY2NzdcdTZiNzhcdThjYjRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDddW2ddXT01Mjk5MitnLHlb''@;'; put 'put ''NTI5OTIrZ109X1syMDddW2ddKTtmb3IoX1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTliM2NcdWY5MDdcdTUzZWJcdTU3MmRcdTU5NGVcdTYzYzZcdTY5ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1YThcdTUyZmJcdTU3NDdcdTc1NDdcdTdiNjBcdTgzY2NcdTkyMWVcdWY5MDhcdTZhNThcdTUxNGJc''@;'; put 'put ''dTUyNGJcdTUyODdcdTYyMWZcdTY4ZDhcdTY5NzVcdTk2OTlcdTUwYzVcdTUyYTRcdTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2VcdTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJcdThiMzlcdThmZDFcdTk5NDlcdWY5MDlcdTRlY2FcdTU5OTdcdTY0ZDJcdTY2MTFcdTZhOGVcdTc0''@;'; put 'put ''MzRcdTc5ODFcdTc5YmRcdTgyYTlcdTg4N2VcdTg4N2ZcdTg5NWZcdWY5MGFcdTkzMjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdkMWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3ZGNcdTgwYWZcdTRmMDFcdTRmMGVcdTUxNzZcdTUxODBcdTU1ZGNcdTU2NjhcdTU3M2JcdTU3ZmFc''@;'; put 'put ''dTU3ZmNcdTU5MTRcdTU5NDdcdTU5OTNcdTViYzRcdTVjOTBcdTVkMGVcdTVkZjFcdTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDhdW2dd''@;'; put 'put ''XT01MzI0OCtnLHlbNTMyNDgrZ109X1syMDhdW2ddKTtmb3IoX1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3MWVcdTY3MWZcdTY3NWVcdTY4Y2JcdTY4YzRcdTZhNWZcdTZiM2FcdTZjMjNcdTZjN2RcdTZjODJcdTZkYzdcdTczOThcdTc0MjZcdTc0MmFcdTc0ODJcdTc0YTNcdTc1NzhcdTc1N2ZcdTc4ODFcdTc4ZWZcdTc5NDFcdTc5NDdcdTc5NDhcdTc5N2Fc''@;'; put 'put ''dTdiOTVcdTdkMDBcdTdkYmFcdTdmODhcdTgwMDZcdTgwMmRcdTgwOGNcdThhMThcdThiNGZcdThjNDhcdThkNzdcdTkzMjFcdTkzMjRcdTk4ZTJcdTk5NTFcdTlhMGVcdTlhMGZcdTlhNjVcdTllOTJcdTdkY2FcdTRmNzZcdTU0MDlcdTYyZWVcdTY4NTRcdTkxZDFcdTU1YWJcdTUxM2FcdWY5''@;'; put 'put ''MGJcdWY5MGNcdTVhMWNcdTYxZTZcdWY5MGRcdTYyY2ZcdTYyZmZcdWY5MGVcdWY5MGZcdWY5MTBcdWY5MTFcdWY5MTJcdWY5MTNcdTkwYTNcdWY5MTRcdWY5MTVcdWY5MTZcdWY5MTdcdWY5MThcdThhZmVcdWY5MTlcdWY5MWFcdWY5MWJcdWY5MWNcdTY2OTZcdWY5MWRcdTcxNTZcdWY5MWVc''@;'; put 'put ''dWY5MWZcdTk2ZTNcdWY5MjBcdTYzNGZcdTYzN2FcdTUzNTdcdWY5MjFcdTY3OGZcdTY5NjBcdTZlNzNcdWY5MjJcdTc1MzdcdWY5MjNcdWY5MjRcdWY5MjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOV1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1syMDldW2ddXT01MzUwNCtnLHlbNTM1MDQrZ109X1syMDldW2ddKTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMGRcdWY5MjZcdWY5MjdcdTg4NzJcdTU2Y2FcdTVhMThcdWY5MjhcdWY5MjlcdWY5MmFcdWY5MmJcdWY5MmNcdTRlNDNcdWY5MmRcdTUxNjdcdTU5NDhcdTY3ZjBcdTgwMTBcdWY5MmVcdTU5NzNcdTVlNzRcdTY0OWFcdTc5Y2Fc''@;'; put 'put ''dTVmZjVcdTYwNmNcdTYyYzhcdTYzN2JcdTViZTdcdTViZDdcdTUyYWFcdWY5MmZcdTU5NzRcdTVmMjlcdTYwMTJcdWY5MzBcdWY5MzFcdWY5MzJcdTc0NTlcdWY5MzNcdWY5MzRcdWY5MzVcdWY5MzZcdWY5MzdcdWY5MzhcdTk5ZDFcdWY5MzlcdWY5M2FcdWY5M2JcdWY5M2NcdWY5M2RcdWY5''@;'; put 'put ''M2VcdWY5M2ZcdWY5NDBcdWY5NDFcdWY5NDJcdWY5NDNcdTZmYzNcdWY5NDRcdWY5NDVcdTgxYmZcdThmYjJcdTYwZjFcdWY5NDZcdWY5NDdcdTgxNjZcdWY5NDhcdWY5NDlcdTVjM2ZcdWY5NGFcdWY5NGJcdWY5NGNcdWY5NGRcdWY5NGVcdWY5NGZcdWY5NTBcdWY5NTFcdTVhZTlcdThhMjVc''@;'; put 'put ''dTY3N2JcdTdkMTBcdWY5NTJcdWY5NTNcdWY5NTRcdWY5NTVcdWY5NTZcdWY5NTdcdTgwZmRcdWY5NThcdWY5NTlcdTVjM2NcdTZjZTVcdTUzM2ZcdTZlYmFcdTU5MWFcdTgzMzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMF1bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1syMTBdW2ddXT01Mzc2MCtnLHlbNTM3NjArZ109X1syMTBdW2ddKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4YzdcdTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBcdTZiYjVcdTZlNGRcdTc3ZWRcdTdhZWZcdTdjMWVcdTdkZGVcdTg2Y2JcdTg4OTJcdTkxMzJcdTkzNWJc''@;'; put 'put ''dTY0YmJcdTZmYmVcdTczN2FcdTc1YjhcdTkwNTRcdTU1NTZcdTU3NGRcdTYxYmFcdTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZmYjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1NDFcdTg5ODNcdThhYzdcdThiNWFcdTkzMWZcdTZjOTNcdTc1NTNcdTdiNTRcdThlMGZcdTkwNWRcdTU1''@;'; put 'put ''MTBcdTU4MDJcdTU4NThcdTVlNjJcdTYyMDdcdTY0OWVcdTY4ZTBcdTc1NzZcdTdjZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVcdTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZcdTVmODVcdTYyMzRcdTY0ZTFcdTczYjNcdTgxZmFcdTg4OGJcdThjYjhcdTk2OGFcdTllZGJcdTViODVc''@;'; put 'put ''dTVmYjdcdTYwYjNcdTUwMTJcdTUyMDBcdTUyMzBcdTU3MTZcdTU4MzVcdTU4NTdcdTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVmOTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0MTdcdTY4NDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1f''@;'; put 'put ''WzIxMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTFdW2ddXT01NDAxNitnLHlbNTQwMTYrZ109X1syMTFdW2ddKTtmb3IoX1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4ZjlcdTZhYzJcdTZkZDhcdTZlMjFcdTZlZDRcdTZmZTRcdTcxZmVcdTc2ZGNcdTc3NzlcdTc5YjFcdTdhM2JcdTg0MDRcdTg5YTlcdThjZWRcdThkZjNcdThlNDhcdTkwMDNcdTkwMTRc''@;'; put 'put ''dTkwNTNcdTkwZmRcdTkzNGRcdTk2NzZcdTk3ZGNcdTZiZDJcdTcwMDZcdTcyNThcdTcyYTJcdTczNjhcdTc3NjNcdTc5YmZcdTdiZTRcdTdlOWJcdThiODBcdTU4YTlcdTYwYzdcdTY1NjZcdTY1ZmRcdTY2YmVcdTZjOGNcdTcxMWVcdTcxYzlcdThjNWFcdTk4MTNcdTRlNmRcdTdhODFcdTRl''@;'; put 'put ''ZGRcdTUxYWNcdTUxY2RcdTUyZDVcdTU0MGNcdTYxYTdcdTY3NzFcdTY4NTBcdTY4ZGZcdTZkMWVcdTZmN2NcdTc1YmNcdTc3YjNcdTdhZTVcdTgwZjRcdTg0NjNcdTkyODVcdTUxNWNcdTY1OTdcdTY3NWNcdTY3OTNcdTc1ZDhcdTdhYzdcdTgzNzNcdWY5NWFcdThjNDZcdTkwMTdcdTk4MmRc''@;'; put 'put ''dTVjNmZcdTgxYzBcdTgyOWFcdTkwNDFcdTkwNmZcdTkyMGRcdTVmOTdcdTVkOWRcdTZhNTlcdTcxYzhcdTc2N2JcdTdiNDlcdTg1ZTRcdThiMDRcdTkxMjdcdTlhMzBcdTU1ODdcdTYxZjZcdWY5NWJcdTc2NjlcdTdmODVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTJdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT1fWzIxMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTJdW2ddXT01NDI3MitnLHlbNTQyNzIrZ109X1syMTJdW2ddKTtmb3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2M2ZcdTg3YmFcdTg4ZjhcdTkwOGZcdWY5NWNcdTZkMWJcdTcwZDlcdTczZGVcdTdkNjFcdTg0M2RcdWY5NWRcdTkxNmFcdTk5ZjFcdWY5NWVcdTRlODJcdTUzNzVc''@;'; put 'put ''dTZiMDRcdTZiMTJcdTcwM2VcdTcyMWJcdTg2MmRcdTllMWVcdTUyNGNcdThmYTNcdTVkNTBcdTY0ZTVcdTY1MmNcdTZiMTZcdTZmZWJcdTdjNDNcdTdlOWNcdTg1Y2RcdTg5NjRcdTg5YmRcdTYyYzlcdTgxZDhcdTg4MWZcdTVlY2FcdTY3MTdcdTZkNmFcdTcyZmNcdTc0MDVcdTc0NmZcdTg3''@;'; put 'put ''ODJcdTkwZGVcdTRmODZcdTVkMGRcdTVmYTBcdTg0MGFcdTUxYjdcdTYzYTBcdTc1NjVcdTRlYWVcdTUwMDZcdTUxNjlcdTUxYzlcdTY4ODFcdTZhMTFcdTdjYWVcdTdjYjFcdTdjZTdcdTgyNmZcdThhZDJcdThmMWJcdTkxY2ZcdTRmYjZcdTUxMzdcdTUyZjVcdTU0NDJcdTVlZWNcdTYxNmVc''@;'; put 'put ''dTYyM2VcdTY1YzVcdTZhZGFcdTZmZmVcdTc5MmFcdTg1ZGNcdTg4MjNcdTk1YWRcdTlhNjJcdTlhNmFcdTllOTdcdTllY2VcdTUyOWJcdTY2YzZcdTZiNzdcdTcwMWRcdTc5MmJcdThmNjJcdTk3NDJcdTYxOTBcdTYyMDBcdTY1MjNcdTZmMjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sy''@;'; put 'put ''MTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTNdW2ddXT01NDUyOCtnLHlbNTQ1MjgrZ109X1syMTNdW2ddKTtmb3IoX1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDlcdTc0ODlcdTdkZjRcdTgwNmZcdTg0ZWVcdThmMjZcdTkwMjNcdTkzNGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZkMGNcdTcwYzhcdTg4YzJc''@;'; put 'put ''dTVlYzlcdTY1ODJcdTZiYWVcdTZmYzJcdTdjM2VcdTczNzVcdTRlZTRcdTRmMzZcdTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNcdTczYjJcdTdiMmRcdTdmOWFcdTdmY2VcdTgwNDZcdTkwMWVcdTkyMzRcdTk2ZjZcdTk3NDhcdTk4MThcdTlmNjFcdTRmOGJcdTZmYTdcdTc5YWVcdTkx''@;'; put 'put ''YjRcdTk2YjdcdTUyZGVcdWY5NjBcdTY0ODhcdTY0YzRcdTZhZDNcdTZmNWVcdTcwMThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2NWNcdThkZWZcdThmMDVcdTk3MzJcdTliNmZcdTlkZmFcdTllNzVcdTc4OGNcdTc5N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTllN2ZcdTllOTNcdThhZDZc''@;'; put 'put ''dTU4ZGZcdTVmMDRcdTY3MjdcdTcwMjdcdTc0Y2ZcdTdjNjBcdTgwN2VcdTUxMjFcdTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFcdThjZjRcdTk2ZjdcdTRlODZcdTUwZGFcdTViZWVcdTVlZDZcdTY1OTlcdTcxY2VcdTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmNcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1syMTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTRdW2ddXT01NDc4NCtnLHlbNTQ3ODQrZ109X1syMTRdW2ddKTtmb3IoX1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwN2NcdTliMjdcdTlmOGRcdTU4ZDhcdTVhNDFcdTVjNjJcdTZhMTNcdTZkZGFcdTZmMGZcdTc2M2JcdTdkMmZcdTdlMzdc''@;'; put 'put ''dTg1MWVcdTg5MzhcdTkzZTRcdTk2NGJcdTUyODlcdTY1ZDJcdTY3ZjNcdTY5YjRcdTZkNDFcdTZlOWNcdTcwMGZcdTc0MDlcdTc0NjBcdTc1NTlcdTc2MjRcdTc4NmJcdThiMmNcdTk4NWVcdTUxNmRcdTYyMmVcdTk2NzhcdTRmOTZcdTUwMmJcdTVkMTlcdTZkZWFcdTdkYjhcdThmMmFcdTVm''@;'; put 'put ''OGJcdTYxNDRcdTY4MTdcdWY5NjFcdTk2ODZcdTUyZDJcdTgwOGJcdTUxZGNcdTUxY2NcdTY5NWVcdTdhMWNcdTdkYmVcdTgzZjFcdTk2NzVcdTRmZGFcdTUyMjlcdTUzOThcdTU0MGZcdTU1MGVcdTVjNjVcdTYwYTdcdTY3NGVcdTY4YThcdTZkNmNcdTcyODFcdTcyZjhcdTc0MDZcdTc0ODNc''@;'; put 'put ''dWY5NjJcdTc1ZTJcdTdjNmNcdTdmNzlcdTdmYjhcdTgzODlcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTkxZDBcdTk2ZTJcdTliYzlcdTU0MWRcdTZmN2VcdTcxZDBcdTc0OThcdTg1ZmFcdThlYWFcdTk2YTNcdTljNTdcdTllOWZcdTY3OTdcdTZkY2JcdTc0MzNcdTgxZThcdTk3MTZcdTc4MmNcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTVdW2ddXT01NTA0MCtnLHlbNTUwNDArZ109X1syMTVdW2ddKTtmb3IoX1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhY2JcdTdiMjBcdTdjOTJcdTY0NjlcdTc0NmFcdTc1ZjJcdTc4YmNcdTc4ZThcdTk5YWNcdTliNTRc''@;'; put 'put ''dTllYmJcdTViZGVcdTVlNTVcdTZmMjBcdTgxOWNcdTgzYWJcdTkwODhcdTRlMDdcdTUzNGRcdTVhMjlcdTVkZDJcdTVmNGVcdTYxNjJcdTYzM2RcdTY2NjlcdTY2ZmNcdTZlZmZcdTZmMmJcdTcwNjNcdTc3OWVcdTg0MmNcdTg1MTNcdTg4M2JcdThmMTNcdTk5NDVcdTljM2JcdTU1MWNcdTYy''@;'; put 'put ''YjlcdTY3MmJcdTZjYWJcdTgzMDlcdTg5NmFcdTk3N2FcdTRlYTFcdTU5ODRcdTVmZDhcdTVmZDlcdTY3MWJcdTdkYjJcdTdmNTRcdTgyOTJcdTgzMmJcdTgzYmRcdThmMWVcdTkwOTlcdTU3Y2JcdTU5YjlcdTVhOTJcdTViZDBcdTY2MjdcdTY3OWFcdTY4ODVcdTZiY2ZcdTcxNjRcdTdmNzVc''@;'; put 'put ''dThjYjdcdThjZTNcdTkwODFcdTliNDVcdTgxMDhcdThjOGFcdTk2NGNcdTlhNDBcdTllYTVcdTViNWZcdTZjMTNcdTczMWJcdTc2ZjJcdTc2ZGZcdTg0MGNcdTUxYWFcdTg5OTNcdTUxNGRcdTUxOTVcdTUyYzlcdTY4YzlcdTZjOTRcdTc3MDRcdTc3MjBcdTdkYmZcdTdkZWNcdTk3NjJcdTll''@;'; put 'put ''YjVcdTZlYzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTZdW2ddXT01NTI5NitnLHlbNTUyOTYrZ109X1syMTZdW2ddKTtmb3IoX1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1MTFcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTY2OWRcdTY5MjdcdTZlOWZc''@;'; put 'put ''dTc2YmZcdTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZcdTkxNjlcdTkyOThcdTljZjRcdTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5YzZcdTVlM2RcdTYxNTVcdTY0NzhcdTY0NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2RcdTZiZGJcdTcyNWZcdTcyNjFcdTc0NDFcdTc3MzhcdTc3ZGJcdTgw''@;'; put 'put ''MTdcdTgyYmNcdTgzMDVcdThiMDBcdThiMjhcdThjOGNcdTY3MjhcdTZjOTBcdTcyNjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlcdTZiN2ZcdTZjOTJcdTU5MjJcdTY3MjZcdTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVlZGZcdTYzY2ZcdTY2MzRcdTY3NzNcdTZlM2FcdTczMmJcdTdhZDdc''@;'; put 'put ''dTgyZDdcdTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVcdTYxY2JcdTYyMGFcdTYyYzdcdTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZiY2JcdTcxMjFcdTczZjdcdTc1NWRcdTdlNDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNcdThjYmZcdTk3MjdcdTlkNjFcdTU4YThcdTllZDhcdTUwMTFcdTUy''@;'; put 'put ''MGVcdTU0M2JcdTU1NGZcdTY1ODdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTddW2ddXT01NTU1MitnLHlbNTU1NTIrZ109X1syMTddW2ddKTtmb3IoX1syMThdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNzZcdTdkMGFcdTdkMGJcdTgwNWVcdTg2OGFcdTk1ODBc''@;'; put 'put ''dTk2ZWZcdTUyZmZcdTZjOTVcdTcyNjlcdTU0NzNcdTVhOWFcdTVjM2VcdTVkNGJcdTVmNGNcdTVmYWVcdTY3MmFcdTY4YjZcdTY5NjNcdTZlM2NcdTZlNDRcdTc3MDlcdTdjNzNcdTdmOGVcdTg1ODdcdThiMGVcdThmZjdcdTk3NjFcdTllZjRcdTVjYjdcdTYwYjZcdTYxMGRcdTYxYWJcdTY1''@;'; put 'put ''NGZcdTY1ZmJcdTY1ZmNcdTZjMTFcdTZjZWZcdTczOWZcdTczYzlcdTdkZTFcdTk1OTRcdTViYzZcdTg3MWNcdThiMTBcdTUyNWRcdTUzNWFcdTYyY2RcdTY0MGZcdTY0YjJcdTY3MzRcdTZhMzhcdTZjY2FcdTczYzBcdTc0OWVcdTdiOTRcdTdjOTVcdTdlMWJcdTgxOGFcdTgyMzZcdTg1ODRc''@;'; put 'put ''dThmZWJcdTk2ZjlcdTk5YzFcdTRmMzRcdTUzNGFcdTUzY2RcdTUzZGJcdTYyY2NcdTY0MmNcdTY1MDBcdTY1OTFcdTY5YzNcdTZjZWVcdTZmNThcdTczZWRcdTc1NTRcdTc2MjJcdTc2ZTRcdTc2ZmNcdTc4ZDBcdTc4ZmJcdTc5MmNcdTdkNDZcdTgyMmNcdTg3ZTBcdThmZDRcdTk4MTJcdTk4''@;'; put 'put ''ZWZcdTUyYzNcdTYyZDRcdTY0YTVcdTZlMjRcdTZmNTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMThdW2ddXT01NTgwOCtnLHlbNTU4MDgrZ109X1syMThdW2ddKTtmb3IoX1syMTldPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2N2NcdThkY2JcdTkxYjFcdTkyNjJc''@;'; put 'put ''dTlhZWVcdTliNDNcdTUwMjNcdTUwOGRcdTU3NGFcdTU5YThcdTVjMjhcdTVlNDdcdTVmNzdcdTYyM2ZcdTY1M2VcdTY1YjlcdTY1YzFcdTY2MDlcdTY3OGJcdTY5OWNcdTZlYzJcdTc4YzVcdTdkMjFcdTgwYWFcdTgxODBcdTgyMmJcdTgyYjNcdTg0YTFcdTg2OGNcdThhMmFcdThiMTdcdTkw''@;'; put 'put ''YTZcdTk2MzJcdTlmOTBcdTUwMGRcdTRmZjNcdWY5NjNcdTU3ZjlcdTVmOThcdTYyZGNcdTYzOTJcdTY3NmZcdTZlNDNcdTcxMTlcdTc2YzNcdTgwY2NcdTgwZGFcdTg4ZjRcdTg4ZjVcdTg5MTlcdThjZTBcdThmMjlcdTkxNGRcdTk2NmFcdTRmMmZcdTRmNzBcdTVlMWJcdTY3Y2ZcdTY4MjJc''@;'; put 'put ''dTc2N2RcdTc2N2VcdTliNDRcdTVlNjFcdTZhMGFcdTcxNjlcdTcxZDRcdTc1NmFcdWY5NjRcdTdlNDFcdTg1NDNcdTg1ZTlcdTk4ZGNcdTRmMTBcdTdiNGZcdTdmNzBcdTk1YTVcdTUxZTFcdTVlMDZcdTY4YjVcdTZjM2VcdTZjNGVcdTZjZGJcdTcyYWZcdTdiYzRcdTgzMDNcdTZjZDVcdTc0''@;'; put 'put ''M2FcdTUwZmJcdTUyODhcdTU4YzFcdTY0ZDhcdTZhOTdcdTc0YTdcdTc2NTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTldW2ddXT01NjA2NCtnLHlbNTYwNjQrZ109X1syMTldW2ddKTtm''@;'; put 'put ''b3IoX1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4YTdcdTg2MTdc''@;'; put 'put ''dTk1ZTJcdTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFcdThiOGFcdThmYThcdThmYWZcdTkwOGFcdTUyMjVcdTc3YTVcdTljNDlcdTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVcdTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRcdTY4YzVcdTcwYjNcdTc1MDFcdTc1YzVcdTc5YzlcdTdhZGRcdThm''@;'; put 'put ''MjdcdTk5MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4MzFcdTViZjZcdTY2NmVcdTZiNjVcdTZkMTFcdTZlN2FcdTZmN2RcdTczZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUzMTBcdTUzNWNcdTViOTNcdTVmYTlcdTY3MGRcdTc5OGZcdTgxNzlc''@;'; put 'put ''dTgzMmZcdTg1MTRcdTg5MDdcdTg5ODZcdThmMzlcdThmM2JcdTk5YTVcdTljMTJcdTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlcdTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdcdTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJcdTg0ZWNcdTg3MDJcdTkwMjJcdTkyZDJcdTljZjNcdTRlMGRcdTRl''@;'; put 'put ''ZDhcdTRmZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0MjZcdTU0OTBcdTU3ZTBcdTU5MmJcdTVhNjZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjBdW2ddXT01NjMyMCtnLHlbNTYzMjArZ109''@;'; put 'put ''X1syMjBdW2ddKTtmb3IoX1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTViNWFcdTViNzVcdTViY2NcdTVlOWNcdWY5NjZcdTYyNzZcdTY1NzdcdTY1YTdcdTZkNmVcdTZlYTVcdTcyMzZcdTdiMjZcdTdjM2ZcdTdmMzZcdTgxNTBcdTgxNTFcdTgxOWFcdTgyNDBcdTgyOTlcdTgzYTlcdThhMDNcdThjYTBcdThjZTZcdThjZmJcdThkNzRcdThkYmFcdTkwZThcdTkx''@;'; put 'put ''ZGNcdTk2MWNcdTk2NDRcdTk5ZDlcdTljZTdcdTUzMTdcdTUyMDZcdTU0MjlcdTU2NzRcdTU4YjNcdTU5NTRcdTU5NmVcdTVmZmZcdTYxYTRcdTYyNmVcdTY2MTBcdTZjN2VcdTcxMWFcdTc2YzZcdTdjODlcdTdjZGVcdTdkMWJcdTgyYWNcdThjYzFcdTk2ZjBcdWY5NjdcdTRmNWJcdTVmMTdc''@;'; put 'put ''dTVmN2ZcdTYyYzJcdTVkMjlcdTY3MGJcdTY4ZGFcdTc4N2NcdTdlNDNcdTlkNmNcdTRlMTVcdTUwOTlcdTUzMTVcdTUzMmFcdTUzNTFcdTU5ODNcdTVhNjJcdTVlODdcdTYwYjJcdTYxOGFcdTYyNDlcdTYyNzlcdTY1OTBcdTY3ODdcdTY5YTdcdTZiZDRcdTZiZDZcdTZiZDdcdTZiZDhcdTZj''@;'; put 'put ''YjhcdWY5NjhcdTc0MzVcdTc1ZmFcdTc4MTJcdTc4OTFcdTc5ZDVcdTc5ZDhcdTdjODNcdTdkY2JcdTdmZTFcdTgwYTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjFdW2ddXT01NjU3Nitn''@;'; put 'put ''LHlbNTY1NzYrZ109X1syMjFdW2ddKTtmb3IoX1syMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTgxM2VcdTgxYzJcdTgzZjJcdTg3MWFcdTg4ZThcdThhYjlcdThiNmNcdThjYmJcdTkxMTlcdTk3NWVcdTk4ZGJcdTlmM2JcdTU2YWNcdTViMmFcdTVmNmNcdTY1OGNcdTZhYjNcdTZiYWZcdTZkNWNcdTZmZjFcdTcwMTVcdTcyNWRcdTczYWRcdThjYTdcdThjZDNcdTk4''@;'; put 'put ''M2JcdTYxOTFcdTZjMzdcdTgwNThcdTlhMDFcdTRlNGRcdTRlOGJcdTRlOWJcdTRlZDVcdTRmM2FcdTRmM2NcdTRmN2ZcdTRmZGZcdTUwZmZcdTUzZjJcdTUzZjhcdTU1MDZcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5NjJcdTVhMTFcdTViZWJcdTViZmFcdTVjMDRcdTVkZjNcdTVlMmJcdTVmOTlc''@;'; put 'put ''dTYwMWRcdTYzNjhcdTY1OWNcdTY1YWZcdTY3ZjZcdTY3ZmJcdTY4YWRcdTZiN2JcdTZjOTlcdTZjZDdcdTZlMjNcdTcwMDlcdTczNDVcdTc4MDJcdTc5M2VcdTc5NDBcdTc5NjBcdTc5YzFcdTdiZTlcdTdkMTdcdTdkNzJcdTgwODZcdTgyMGRcdTgzOGVcdTg0ZDFcdTg2YzdcdTg4ZGZcdThh''@;'; put 'put ''NTBcdThhNWVcdThiMWRcdThjZGNcdThkNjZcdThmYWRcdTkwYWFcdTk4ZmNcdTk5ZGZcdTllOWRcdTUyNGFcdWY5NjlcdTY3MTRcdWY5NmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjJd''@;'; put 'put ''W2ddXT01NjgzMitnLHlbNTY4MzIrZ109X1syMjJdW2ddKTtmb3IoX1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwOThcdTUyMmFcdTVjNzFcdTY1NjNcdTZjNTVcdTczY2FcdTc1MjNcdTc1OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlcdTRlMDlcdWY5NmJcdTY3NDlcdTY4ZWVcdTZlMTdcdTgyOWZcdTg1''@;'; put 'put ''MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4YWZcdTRlMGFcdTUwYjdcdTUwY2ZcdTUxMWZcdTU1NDZcdTU1YWFcdTU2MTdcdTViNDBcdTVjMTlcdTVjZTBcdTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4NTFcdTZhNjFcdTZlNThcdTcyM2RcdTcyNDBcdTcyYzBcdTc2Zjhc''@;'; put 'put ''dTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRcdThhNzNcdThjNjFcdThjZGVcdTk3MWNcdTU4NWVcdTc0YmRcdThjZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdkMjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRcdTdiMTlcdTU4ODVcdTU4ZmJcdTVkYmNcdTVlOGZcdTVlYjZcdTVm''@;'; put 'put ''OTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2OTFcdTY2ZDlcdTY2ZjhcdTY4MTZcdTY4ZjJcdTcyODBcdTc0NWVcdTdiNmVcdTdkNmVcdTdkZDZcdTdmNzJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyM11bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1syMjNdW2ddXT01NzA4OCtnLHlbNTcwODgrZ109X1syMjNdW2ddKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwZTVcdTgyMTJcdTg1YWZcdTg5N2ZcdThhOTNcdTkwMWRcdTkyZTRcdTllY2RcdTlmMjBcdTU5MTVcdTU5NmRcdTVlMmRcdTYwZGNcdTY2MTRcdTY2NzNcdTY3OTBcdTZjNTBcdTZkYzVcdTZmNWZcdTc3ZjNcdTc4YTlcdTg0''@;'; put 'put ''YzZcdTkxY2JcdTkzMmJcdTRlZDlcdTUwY2FcdTUxNDhcdTU1ODRcdTViMGJcdTViYTNcdTYyNDdcdTY1N2VcdTY1Y2JcdTZlMzJcdTcxN2RcdTc0MDFcdTc0NDRcdTc0ODdcdTc0YmZcdTc2NmNcdTc5YWFcdTdkZGFcdTdlNTVcdTdmYThcdTgxN2FcdTgxYjNcdTgyMzlcdTg2MWFcdTg3ZWNc''@;'; put 'put ''dThhNzVcdThkZTNcdTkwNzhcdTkyOTFcdTk0MjVcdTk5NGRcdTliYWVcdTUzNjhcdTVjNTFcdTY5NTRcdTZjYzRcdTZkMjlcdTZlMmJcdTgyMGNcdTg1OWJcdTg5M2JcdThhMmRcdThhYWFcdTk2ZWFcdTlmNjdcdTUyNjFcdTY2YjlcdTZiYjJcdTdlOTZcdTg3ZmVcdThkMGRcdTk1ODNcdTk2''@;'; put 'put ''NWRcdTY1MWRcdTZkODlcdTcxZWVcdWY5NmVcdTU3Y2VcdTU5ZDNcdTViYWNcdTYwMjdcdTYwZmFcdTYyMTBcdTY2MWZcdTY2NWZcdTczMjlcdTczZjlcdTc2ZGJcdTc3MDFcdTdiNmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNF1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1syMjRdW2ddXT01NzM0NCtnLHlbNTczNDQrZ109X1syMjRdW2ddKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwNTZcdTgwNzJcdTgxNjVcdThhYTBcdTkxOTJcdTRlMTZcdTUyZTJcdTZiNzJcdTZkMTdcdTdhMDVcdTdiMzlcdTdkMzBcdWY5NmZcdThjYjBcdTUzZWNcdTU2MmZcdTU4NTFcdTViYjVcdTVjMGZcdTVj''@;'; put 'put ''MTFcdTVkZTJcdTYyNDBcdTYzODNcdTY0MTRcdTY2MmRcdTY4YjNcdTZjYmNcdTZkODhcdTZlYWZcdTcwMWZcdTcwYTRcdTcxZDJcdTc1MjZcdTc1OGZcdTc1OGVcdTc2MTlcdTdiMTFcdTdiZTBcdTdjMmJcdTdkMjBcdTdkMzlcdTg1MmNcdTg1NmRcdTg2MDdcdThhMzRcdTkwMGRcdTkwNjFc''@;'; put 'put ''dTkwYjVcdTkyYjdcdTk3ZjZcdTlhMzdcdTRmZDdcdTVjNmNcdTY3NWZcdTZkOTFcdTdjOWZcdTdlOGNcdThiMTZcdThkMTZcdTkwMWZcdTViNmJcdTVkZmRcdTY0MGRcdTg0YzBcdTkwNWNcdTk4ZTFcdTczODdcdTViOGJcdTYwOWFcdTY3N2VcdTZkZGVcdThhMWZcdThhYTZcdTkwMDFcdTk4''@;'; put 'put ''MGNcdTUyMzdcdWY5NzBcdTcwNTFcdTc4OGVcdTkzOTZcdTg4NzBcdTkxZDdcdTRmZWVcdTUzZDdcdTU1ZmRcdTU2ZGFcdTU3ODJcdTU4ZmRcdTVhYzJcdTViODhcdTVjYWJcdTVjYzBcdTVlMjVcdTYxMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjVdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzIyNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjVdW2ddXT01NzYwMCtnLHlbNTc2MDArZ109X1syMjVdW2ddKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMGRcdTYyNGJcdTYzODhcdTY0MWNcdTY1MzZcdTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRcdTZkMTlcdTZmMzFcdTcxZTdcdTcyZTlcdTczNzhcdTc0MDdcdTc0YjJcdTc2MjZcdTc3''@;'; put 'put ''NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdkOGZcdTdkYWNcdTdlNjFcdTdmOWVcdTgxMjlcdTgzMzFcdTg0OTBcdTg0ZGFcdTg1ZWFcdTg4OTZcdThhYjBcdThiOTBcdThmMzhcdTkwNDJcdTkwODNcdTkxNmNcdTkyOTZcdTkyYjlcdTk2OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3MDBc''@;'; put 'put ''dTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRcdTU4N2VcdTU5MTlcdTViNzBcdTViYmZcdTZkZDFcdTZmNWFcdTcxOWZcdTc0MjFcdTc0YjlcdTgwODVcdTgzZmRcdTVkZTFcdTVmODdcdTVmYWFcdTYwNDJcdTY1ZWNcdTY4MTJcdTY5NmZcdTZhNTNcdTZiODlcdTZkMzVcdTZkZjNcdTcz''@;'; put 'put ''ZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgxMjNcdTgyMWNcdTgzNDBcdTg0ZjRcdTg1NjNcdThhNjJcdThhYzRcdTkxODdcdTkzMWVcdTk4MDZcdTk5YjRcdTYyMGNcdTg4NTNcdThmZjBcdTkyNjVcdTVkMDdcdTVkMjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjZdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzIyNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjZdW2ddXT01Nzg1NitnLHlbNTc4NTYrZ109X1syMjZdW2ddKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkNjlcdTc0NWZcdTgxOWRcdTg3NjhcdTZmZDVcdTYyZmVcdTdmZDJcdTg5MzZcdTg5NzJcdTRlMWVcdTRlNThcdTUwZTdcdTUyZGRcdTUzNDdcdTYyN2ZcdTY2''@;'; put 'put ''MDdcdTdlNjlcdTg4MDVcdTk2NWVcdTRmOGRcdTUzMTlcdTU2MzZcdTU5Y2JcdTVhYTRcdTVjMzhcdTVjNGVcdTVjNGRcdTVlMDJcdTVmMTFcdTYwNDNcdTY1YmRcdTY2MmZcdTY2NDJcdTY3YmVcdTY3ZjRcdTczMWNcdTc3ZTJcdTc5M2FcdTdmYzVcdTg0OTRcdTg0Y2RcdTg5OTZcdThhNjZc''@;'; put 'put ''dThhNjlcdThhZTFcdThjNTVcdThjN2FcdTU3ZjRcdTViZDRcdTVmMGZcdTYwNmZcdTYyZWRcdTY5MGRcdTZiOTZcdTZlNWNcdTcxODRcdTdiZDJcdTg3NTVcdThiNThcdThlZmVcdTk4ZGZcdTk4ZmVcdTRmMzhcdTRmODFcdTRmZTFcdTU0N2JcdTVhMjBcdTViYjhcdTYxM2NcdTY1YjBcdTY2''@;'; put 'put ''NjhcdTcxZmNcdTc1MzNcdTc5NWVcdTdkMzNcdTgxNGVcdTgxZTNcdTgzOThcdTg1YWFcdTg1Y2VcdTg3MDNcdThhMGFcdThlYWJcdThmOWJcdWY5NzFcdThmYzVcdTU5MzFcdTViYTRcdTViZTZcdTYwODlcdTViZTlcdTVjMGJcdTVmYzNcdTZjODFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1syMjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjddW2ddXT01ODExMitnLHlbNTgxMTIrZ109X1syMjddW2ddKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5NzJcdTZkZjFcdTcwMGJcdTc1MWFcdTgyYWZcdThhZjZcdTRlYzBcdTUzNDFcdWY5NzNcdTk2ZDlcdTZjMGZcdTRlOWVcdTRmYzRcdTUx''@;'; put 'put ''NTJcdTU1NWVcdTVhMjVcdTVjZThcdTYyMTFcdTcyNTlcdTgyYmRcdTgzYWFcdTg2ZmVcdTg4NTlcdThhMWRcdTk2M2ZcdTk2YzVcdTk5MTNcdTlkMDlcdTlkNWRcdTU4MGFcdTVjYjNcdTVkYmRcdTVlNDRcdTYwZTFcdTYxMTVcdTYzZTFcdTZhMDJcdTZlMjVcdTkxMDJcdTkzNTRcdTk4NGVc''@;'; put 'put ''dTljMTBcdTlmNzdcdTViODlcdTVjYjhcdTYzMDlcdTY2NGZcdTY4NDhcdTc3M2NcdTk2YzFcdTk3OGRcdTk4NTRcdTliOWZcdTY1YTFcdThiMDFcdThlY2JcdTk1YmNcdTU1MzVcdTVjYTlcdTVkZDZcdTVlYjVcdTY2OTdcdTc2NGNcdTgzZjRcdTk1YzdcdTU4ZDNcdTYyYmNcdTcyY2VcdTlk''@;'; put 'put ''MjhcdTRlZjBcdTU5MmVcdTYwMGZcdTY2M2JcdTZiODNcdTc5ZTdcdTlkMjZcdTUzOTNcdTU0YzBcdTU3YzNcdTVkMTZcdTYxMWJcdTY2ZDZcdTZkYWZcdTc4OGRcdTgyN2VcdTk2OThcdTk3NDRcdTUzODRcdTYyN2NcdTYzOTZcdTZkYjJcdTdlMGFcdTgxNGJcdTk4NGRcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1syMjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW2ddXT01ODM2OCtnLHlbNTgzNjgrZ109X1syMjhdW2ddKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZcdTUwM2JcdTUxYjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5MzBcdTcy''@;'; put 'put ''M2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5NzVcdWY5NzZcdTdkMDRcdTgyZTVcdTg0NmZcdTg0YmJcdTg1ZTVcdThlOGRcdWY5NzdcdTRmNmZcdWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1MThcdTY1NmRcdTY2OThcdWY5N2FcdTY5NGFcdTZhMjNcdTZkMGJc''@;'; put 'put ''dTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNcdTdhNzBcdWY5N2JcdTdmOGFcdWY5N2NcdTg5NDRcdWY5N2RcdThiOTNcdTkxYzBcdTk2N2RcdWY5N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBcdTc5YTZcdThhOWVcdTk5YWRcdTliNWFcdTlmNmNcdTUxMDRcdTYx''@;'; put 'put ''YjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4MzBcdTVmNjZcdTcxMDlcdThhMDBcdThhZmFcdTViN2NcdTg2MTZcdTRmZmFcdTUxM2NcdTU2YjRcdTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRlODhcdTRmNTlcdWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJcdWY5ODJc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW2ddXT01ODYyNCtnLHlbNTg2MjQrZ109X1syMjldW2ddKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5ODNcdTZiNWZcdTZjNWRcdWY5ODRcdTc0YjVcdTc5MTZcdWY5ODVcdTgyMDdcdTgyNDVcdTgz''@;'; put 'put ''MzlcdThmM2ZcdThmNWRcdWY5ODZcdTk5MThcdWY5ODdcdWY5ODhcdWY5ODlcdTRlYTZcdWY5OGFcdTU3ZGZcdTVmNzlcdTY2MTNcdWY5OGJcdWY5OGNcdTc1YWJcdTdlNzlcdThiNmZcdWY5OGRcdTkwMDZcdTlhNWJcdTU2YTVcdTU4MjdcdTU5ZjhcdTVhMWZcdTViYjRcdWY5OGVcdTVlZjZc''@;'; put 'put ''dWY5OGZcdWY5OTBcdTYzNTBcdTYzM2JcdWY5OTFcdTY5M2RcdTZjODdcdTZjYmZcdTZkOGVcdTZkOTNcdTZkZjVcdTZmMTRcdWY5OTJcdTcwZGZcdTcxMzZcdTcxNTlcdWY5OTNcdTcxYzNcdTcxZDVcdWY5OTRcdTc4NGZcdTc4NmZcdWY5OTVcdTdiNzVcdTdkZTNcdWY5OTZcdTdlMmZcdWY5''@;'; put 'put ''OTdcdTg4NGRcdThlZGZcdWY5OThcdWY5OTlcdWY5OWFcdTkyNWJcdWY5OWJcdTljZjZcdWY5OWNcdWY5OWRcdWY5OWVcdTYwODVcdTZkODVcdWY5OWZcdTcxYjFcdWY5YTBcdWY5YTFcdTk1YjFcdTUzYWRcdWY5YTJcdWY5YTNcdWY5YTRcdTY3ZDNcdWY5YTVcdTcwOGVcdTcxMzBcdTc0MzBc''@;'; put 'put ''dTgyNzZcdTgyZDJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW2ddXT01ODg4MCtnLHlbNTg4ODArZ109X1syMzBdW2ddKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5YTZcdTk1YmJcdTlhZTVcdTllN2RcdTY2YzRcdWY5YTdcdTcxYzFcdTg0''@;'; put 'put ''NDlcdWY5YThcdWY5YTlcdTU4NGJcdWY5YWFcdWY5YWJcdTVkYjhcdTVmNzFcdWY5YWNcdTY2MjBcdTY2OGVcdTY5NzlcdTY5YWVcdTZjMzhcdTZjZjNcdTZlMzZcdTZmNDFcdTZmZGFcdTcwMWJcdTcwMmZcdTcxNTBcdTcxZGZcdTczNzBcdWY5YWRcdTc0NWJcdWY5YWVcdTc0ZDRcdTc2Yzhc''@;'; put 'put ''dTdhNGVcdTdlOTNcdWY5YWZcdWY5YjBcdTgyZjFcdThhNjBcdThmY2VcdWY5YjFcdTkzNDhcdWY5YjJcdTk3MTlcdWY5YjNcdWY5YjRcdTRlNDJcdTUwMmFcdWY5YjVcdTUyMDhcdTUzZTFcdTY2ZjNcdTZjNmRcdTZmY2FcdTczMGFcdTc3N2ZcdTdhNjJcdTgyYWVcdTg1ZGRcdTg2MDJcdWY5''@;'; put 'put ''YjZcdTg4ZDRcdThhNjNcdThiN2RcdThjNmJcdWY5YjdcdTkyYjNcdWY5YjhcdTk3MTNcdTk4MTBcdTRlOTRcdTRmMGRcdTRmYzlcdTUwYjJcdTUzNDhcdTU0M2VcdTU0MzNcdTU1ZGFcdTU4NjJcdTU4YmFcdTU5NjdcdTVhMWJcdTViZTRcdTYwOWZcdWY5YjlcdTYxY2FcdTY1NTZcdTY1ZmZc''@;'; put 'put ''dTY2NjRcdTY4YTdcdTZjNWFcdTZmYjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW2ddXT01OTEzNitnLHlbNTkxMzYrZ109X1syMzFdW2ddKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwY2ZcdTcxYWNcdTczNTJcdTdiN2RcdTg3MDhcdThh''@;'; put 'put ''YTRcdTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTczNDRcdTczODlcdTkyM2FcdTZlYWJcdTc0NjVcdTc2MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUxNDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkwOTVcdTk2Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdhYTlcdTdhYWFc''@;'; put 'put ''dTgxZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlcdTViOGNcdTViOWJcdTY4YTFcdTY5MDBcdTZkNjNcdTczYTlcdTc0MTNcdTc0MmNcdTc4OTdcdTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVcdTk4MTFcdTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlcdTZjNmFcdTcz''@;'; put 'put ''OGJcdTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5MTZcdTVkNmNcdTVkY2RcdTczMjVcdTc1NGZcdWY5YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVkYTJcdTYyZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5YmVcdTY2ZGNc''@;'; put 'put ''dWY5YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRcdWY5YzFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW2ddXT01OTM5MitnLHlbNTkzOTIrZ109X1syMzJdW2ddKTtmb3IoX1syMzNd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhODhcdTdhYWZcdTdlNDdcdTdl''@;'; put 'put ''NWVcdTgwMDBcdTgxNzBcdWY5YzJcdTg3ZWZcdTg5ODFcdThiMjBcdTkwNTlcdWY5YzNcdTkwODBcdTk5NTJcdTYxN2VcdTZiMzJcdTZkNzRcdTdlMWZcdTg5MjVcdThmYjFcdTRmZDFcdTUwYWRcdTUxOTdcdTUyYzdcdTU3YzdcdTU4ODlcdTViYjlcdTVlYjhcdTYxNDJcdTY5OTVcdTZkOGNc''@;'; put 'put ''dTZlNjdcdTZlYjZcdTcxOTRcdTc0NjJcdTc1MjhcdTc1MmNcdTgwNzNcdTgzMzhcdTg0YzlcdThlMGFcdTkzOTRcdTkzZGVcdWY5YzRcdTRlOGVcdTRmNTFcdTUwNzZcdTUxMmFcdTUzYzhcdTUzY2JcdTUzZjNcdTViODdcdTViZDNcdTVjMjRcdTYxMWFcdTYxODJcdTY1ZjRcdTcyNWJcdTcz''@;'; put 'put ''OTdcdTc0NDBcdTc2YzJcdTc5NTBcdTc5OTFcdTc5YjlcdTdkMDZcdTdmYmRcdTgyOGJcdTg1ZDVcdTg2NWVcdThmYzJcdTkwNDdcdTkwZjVcdTkxZWFcdTk2ODVcdTk2ZThcdTk2ZTlcdTUyZDZcdTVmNjdcdTY1ZWRcdTY2MzFcdTY4MmZcdTcxNWNcdTdhMzZcdTkwYzFcdTk4MGFcdTRlOTFc''@;'; put 'put ''dWY5YzVcdTZhNTJcdTZiOWVcdTZmOTBcdTcxODlcdTgwMThcdTgyYjhcdTg1NTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW2ddXT01OTY0OCtnLHlbNTk2NDgrZ109X1syMzNdW2dd''@;'; put 'put ''KTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNGJcdTk2''@;'; put 'put ''OTVcdTk2ZjJcdTk3ZmJcdTg1MWFcdTliMzFcdTRlOTBcdTcxOGFcdTk2YzRcdTUxNDNcdTUzOWZcdTU0ZTFcdTU3MTNcdTU3MTJcdTU3YTNcdTVhOWJcdTVhYzRcdTViYzNcdTYwMjhcdTYxM2ZcdTYzZjRcdTZjODVcdTZkMzlcdTZlNzJcdTZlOTBcdTcyMzBcdTczM2ZcdTc0NTdcdTgyZDFc''@;'; put 'put ''dTg4ODFcdThmNDVcdTkwNjBcdWY5YzZcdTk2NjJcdTk4NThcdTlkMWJcdTY3MDhcdThkOGFcdTkyNWVcdTRmNGRcdTUwNDlcdTUwZGVcdTUzNzFcdTU3MGRcdTU5ZDRcdTVhMDFcdTVjMDlcdTYxNzBcdTY2OTBcdTZlMmRcdTcyMzJcdTc0NGJcdTdkZWZcdTgwYzNcdTg0MGVcdTg0NjZcdTg1''@;'; put 'put ''M2ZcdTg3NWZcdTg4NWJcdTg5MThcdThiMDJcdTkwNTVcdTk3Y2JcdTliNGZcdTRlNzNcdTRmOTFcdTUxMTJcdTUxNmFcdWY5YzdcdTU1MmZcdTU1YTlcdTViN2FcdTViYTVcdTVlN2NcdTVlN2RcdTVlYmVcdTYwYTBcdTYwZGZcdTYxMDhcdTYxMDlcdTYzYzRcdTY1MzhcdTY3MDlcdWY5Yzhc''@;'; put 'put ''dTY3ZDRcdTY3ZGFcdWY5YzlcdTY5NjFcdTY5NjJcdTZjYjlcdTZkMjdcdWY5Y2FcdTZlMzhcdWY5Y2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW2ddXT01OTkwNCtnLHlbNTk5MDQr''@;'; put 'put ''Z109X1syMzRdW2ddKTtmb3IoX1syMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0NWNcdTc1MzFcdWY5Y2RcdTc2NTJcdWY5Y2VcdWY5Y2ZcdTdkYWRcdTgxZmVcdTg0MzhcdTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkwM2VcdTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVcdWY5ZDBcdWY5ZDFc''@;'; put 'put ''dTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJcdWY5ZDNcdWY5ZDRcdTUxNDFcdTU5NmJcdTVjMzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTczYTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlcdWY5ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcwMWNcdTdkNjhcdTg3''@;'; put 'put ''OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZiYjdcdThhYmVcdTkyODBcdTk2YjFcdTRlNTlcdTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBcdTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgxYmFcdTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBcdTViOWNcdTYxMGZc''@;'; put 'put ''dTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFcdTc3ZTNcdTdmYTlcdTgyNjRcdTg1OGZcdTg3ZmJcdTg4NjNcdThhYmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzVdW2ddXT02MDE2''@;'; put 'put ''MCtnLHlbNjAxNjArZ109X1syMzVdW2ddKTtmb3IoX1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdThiNzBcdTkxYWJcdTRlOGNcdTRlZTVcdTRmMGFcdWY5ZGRcdWY5ZGVcdTU5MzdcdTU5ZThcdWY5ZGZcdTVkZjJcdTVmMWJcdTVmNWJcdTYwMjFcdWY5ZTBcdWY5ZTFcdWY5ZTJcdWY5ZTNcdTcyM2VcdTczZTVcdWY5ZTRcdTc1NzBcdTc1Y2RcdWY5ZTVcdTc5ZmJc''@;'; put 'put ''dWY5ZTZcdTgwMGNcdTgwMzNcdTgwODRcdTgyZTFcdTgzNTFcdWY5ZTdcdWY5ZThcdThjYmRcdThjYjNcdTkwODdcdWY5ZTlcdWY5ZWFcdTk4ZjRcdTk5MGNcdWY5ZWJcdWY5ZWNcdTcwMzdcdTc2Y2FcdTdmY2FcdTdmY2NcdTdmZmNcdThiMWFcdTRlYmFcdTRlYzFcdTUyMDNcdTUzNzBcdWY5''@;'; put 'put ''ZWRcdTU0YmRcdTU2ZTBcdTU5ZmJcdTViYzVcdTVmMTVcdTVmY2RcdTZlNmVcdWY5ZWVcdWY5ZWZcdTdkNmFcdTgzMzVcdWY5ZjBcdTg2OTNcdThhOGRcdWY5ZjFcdTk3NmRcdTk3NzdcdWY5ZjJcdWY5ZjNcdTRlMDBcdTRmNWFcdTRmN2VcdTU4ZjlcdTY1ZTVcdTZlYTJcdTkwMzhcdTkzYjBc''@;'; put 'put ''dTk5YjlcdTRlZmJcdTU4ZWNcdTU5OGFcdTU5ZDlcdTYwNDFcdWY5ZjRcdWY5ZjVcdTdhMTRcdWY5ZjZcdTgzNGZcdThjYzNcdTUxNjVcdTUzNDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sy''@;'; put 'put ''MzZdW2ddXT02MDQxNitnLHlbNjA0MTYrZ109X1syMzZdW2ddKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5ZjdcdWY5ZjhcdWY5ZjlcdTRlY2RcdTUyNjlcdTViNTVcdTgyYmZcdTRlZDRcdTUyM2FcdTU0YThcdTU5YzlcdTU5ZmZcdTViNTBcdTViNTdcdTViNWNcdTYwNjNcdTYxNDhcdTZlY2JcdTcwOTlcdTcxNmVcdTczODZcdTc0ZjdcdTc1YjVc''@;'; put 'put ''dTc4YzFcdTdkMmJcdTgwMDVcdTgxZWFcdTgzMjhcdTg1MTdcdTg1YzlcdThhZWVcdThjYzdcdTk2Y2NcdTRmNWNcdTUyZmFcdTU2YmNcdTY1YWJcdTY2MjhcdTcwN2NcdTcwYjhcdTcyMzVcdTdkYmRcdTgyOGRcdTkxNGNcdTk2YzBcdTlkNzJcdTViNzFcdTY4ZTdcdTZiOThcdTZmN2FcdTc2''@;'; put 'put ''ZGVcdTVjOTFcdTY2YWJcdTZmNWJcdTdiYjRcdTdjMmFcdTg4MzZcdTk2ZGNcdTRlMDhcdTRlZDdcdTUzMjBcdTU4MzRcdTU4YmJcdTU4ZWZcdTU5NmNcdTVjMDdcdTVlMzNcdTVlODRcdTVmMzVcdTYzOGNcdTY2YjJcdTY3NTZcdTZhMWZcdTZhYTNcdTZiMGNcdTZmM2ZcdTcyNDZcdWY5ZmFc''@;'; put 'put ''dTczNTBcdTc0OGJcdTdhZTBcdTdjYTdcdTgxNzhcdTgxZGZcdTgxZTdcdTgzOGFcdTg0NmNcdTg1MjNcdTg1OTRcdTg1Y2ZcdTg4ZGRcdThkMTNcdTkxYWNcdTk1NzdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzN11bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1syMzddW2ddXT02MDY3MitnLHlbNjA2NzIrZ109X1syMzddW2ddKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OWNcdTUxOGRcdTU0YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3NTBcdTY4M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2RcdTdlMjFcdTg4YzFcdThjYTFcdThmMDlcdTlmNGJcdTlmNGVcdTcyMmRcdTdiOGZcdThhY2Rc''@;'; put 'put ''dTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBcdTU5ZDBcdTVlOTVcdTYyYjVcdTY3NzVcdTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFcdTcyZDlcdTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgyZTdcdTgzZjlcdTg0NTdcdTg1ZjdcdThhNWJcdThjYWZcdThlODdcdTkwMTlcdTkwYjhcdTk2''@;'; put 'put ''Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTViYzJcdTY0NThcdTY1NzVcdTZlZjRcdTcyYzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdiMWJcdTdjNGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJcdThjY2FcdThkNjRcdThkZTFcdThlNWZcdThmZWFcdThmZjlcdTkwNjlcdTkzZDFcdTRmNDNc''@;'; put 'put ''dTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRcdTUyNmFcdTU4NjFcdTU4N2NcdTU5NjBcdTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJcdTYyMzBcdTY4MTNcdTZiYmZcdTZjMDhcdTZmYjFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOF1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW2ddXT02MDkyOCtnLHlbNjA5MjgrZ109X1syMzhdW2ddKTtmb3IoX1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNGVcdTc0MjBcdTc1MzBcdTc1MzhcdTc1NTFcdTc2NzJcdTdiNGNcdTdiOGJcdTdiYWRcdTdiYzZcdTdlOGZcdThhNmVcdThmM2VcdThmNDlcdTkyM2ZcdTkyOTNcdTkzMjJcdTk0MmJcdTk2ZmJc''@;'; put 'put ''dTk4NWFcdTk4NmJcdTk5MWVcdTUyMDdcdTYyMmFcdTYyOThcdTZkNTlcdTc2NjRcdTdhY2FcdTdiYzBcdTdkNzZcdTUzNjBcdTVjYmVcdTVlOTdcdTZmMzhcdTcwYjlcdTdjOThcdTk3MTFcdTliOGVcdTllZGVcdTYzYTVcdTY0N2FcdTg3NzZcdTRlMDFcdTRlOTVcdTRlYWRcdTUwNWNcdTUw''@;'; put 'put ''NzVcdTU0NDhcdTU5YzNcdTViOWFcdTVlNDBcdTVlYWRcdTVlZjdcdTVmODFcdTYwYzVcdTYzM2FcdTY1M2ZcdTY1NzRcdTY1Y2NcdTY2NzZcdTY2NzhcdTY3ZmVcdTY5NjhcdTZhODlcdTZiNjNcdTZjNDBcdTZkYzBcdTZkZThcdTZlMWZcdTZlNWVcdTcwMWVcdTcwYTFcdTczOGVcdTczZmRc''@;'; put 'put ''dTc1M2FcdTc3NWJcdTc4ODdcdTc5OGVcdTdhMGJcdTdhN2RcdTdjYmVcdTdkOGVcdTgyNDdcdThhMDJcdThhZWFcdThjOWVcdTkxMmRcdTkxNGFcdTkxZDhcdTkyNjZcdTkyY2NcdTkzMjBcdTk3MDZcdTk3NTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzldLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzIzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzldW2ddXT02MTE4NCtnLHlbNjExODQrZ109X1syMzldW2ddKTtmb3IoX1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3NWNcdTk4MDJcdTlmMGVcdTUyMzZcdTUyOTFcdTU1N2NcdTU4MjRcdTVlMWRcdTVmMWZcdTYwOGNcdTYzZDBcdTY4YWZcdTZmZGZcdTc5NmRcdTdiMmNcdTgxY2RcdTg1YmFc''@;'; put 'put ''dTg4ZmRcdThhZjhcdThlNDRcdTkxOGRcdTk2NjRcdTk2OWJcdTk3M2RcdTk4NGNcdTlmNGFcdTRmY2VcdTUxNDZcdTUxY2JcdTUyYTlcdTU2MzJcdTVmMTRcdTVmNmJcdTYzYWFcdTY0Y2RcdTY1ZTlcdTY2NDFcdTY2ZmFcdTY2ZjlcdTY3MWRcdTY4OWRcdTY4ZDdcdTY5ZmRcdTZmMTVcdTZm''@;'; put 'put ''NmVcdTcxNjdcdTcxZTVcdTcyMmFcdTc0YWFcdTc3M2FcdTc5NTZcdTc5NWFcdTc5ZGZcdTdhMjBcdTdhOTVcdTdjOTdcdTdjZGZcdTdkNDRcdTdlNzBcdTgwODdcdTg1ZmJcdTg2YTRcdThhNTRcdThhYmZcdThkOTlcdThlODFcdTkwMjBcdTkwNmRcdTkxZTNcdTk2M2JcdTk2ZDVcdTljZTVc''@;'; put 'put ''dTY1Y2ZcdTdjMDdcdThkYjNcdTkzYzNcdTViNThcdTVjMGFcdTUzNTJcdTYyZDlcdTczMWRcdTUwMjdcdTViOTdcdTVmOWVcdTYwYjBcdTYxNmJcdTY4ZDVcdTZkZDlcdTc0MmVcdTdhMmVcdTdkNDJcdTdkOWNcdTdlMzFcdTgxNmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDBdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzI0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDBdW2ddXT02MTQ0MCtnLHlbNjE0NDArZ109X1syNDBdW2ddKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdcdTYzMmJcdTdmNmFcdTRlM2JcdTRmNGZcdTRmOGZcdTUwNWFcdTU5ZGRc''@;'; put 'put ''dTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZcdTViOTlcdTVkZGVcdTVlZGFcdTY2NWRcdTY3MzFcdTY3ZjFcdTY4MmFcdTZjZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdkMDJcdTdkMmNcdTdkYTJcdTgyMWZcdTg2ZGJcdThhM2JcdThhODVcdThk''@;'; put 'put ''NzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkxNTJcdTk0NDRcdTk5ZDBcdTdhZjlcdTdjYTVcdTRmY2FcdTUxMDFcdTUxYzZcdTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNcdTcxMGNcdTc1NmZcdTdhZTNcdTg4MjJcdTkwMjFcdTkwNzVcdTk2Y2Jc''@;'; put 'put ''dTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZcdTkxY2RcdTUzN2RcdTZhZGJcdTY5NmJcdTZjNDFcdTg0N2FcdTU4OWVcdTYxOGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThiNDlcdThkMDhcdTRlNGJcdTUzZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1syNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDFdW2ddXT02MTY5NitnLHlbNjE2OTYrZ109X1syNDFdW2ddKTtmb3IoX1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU3MzBcdTU3NDBcdTVmZDdcdTYzMDFcdTYzMDdcdTY0NmZcdTY1MmZcdTY1ZThcdTY2N2FcdTY3OWRcdTY3YjNcdTZiNjJc''@;'; put 'put ''dTZjNjBcdTZjOWFcdTZmMmNcdTc3ZTVcdTc4MjVcdTc5NDlcdTc5NTdcdTdkMTlcdTgwYTJcdTgxMDJcdTgxZjNcdTgyOWRcdTgyYjdcdTg3MThcdThhOGNcdWY5ZmNcdThkMDRcdThkYmVcdTkwNzJcdTc2ZjRcdTdhMTlcdTdhMzdcdTdlNTRcdTgwNzdcdTU1MDdcdTU1ZDRcdTU4NzVcdTYz''@;'; put 'put ''MmZcdTY0MjJcdTY2NDlcdTY2NGJcdTY4NmRcdTY5OWJcdTZiODRcdTZkMjVcdTZlYjFcdTczY2RcdTc0NjhcdTc0YTFcdTc1NWJcdTc1YjlcdTc2ZTFcdTc3MWVcdTc3OGJcdTc5ZTZcdTdlMDlcdTdlMWRcdTgxZmJcdTg1MmZcdTg4OTdcdThhM2FcdThjZDFcdThlZWJcdThmYjBcdTkwMzJc''@;'; put 'put ''dTkzYWRcdTk2NjNcdTk2NzNcdTk3MDdcdTRmODRcdTUzZjFcdTU5ZWFcdTVhYzlcdTVlMTlcdTY4NGVcdTc0YzZcdTc1YmVcdTc5ZTlcdTdhOTJcdTgxYTNcdTg2ZWRcdThjZWFcdThkY2NcdThmZWRcdTY1OWZcdTY3MTVcdWY5ZmRcdTU3ZjdcdTZmNTdcdTdkZGRcdThmMmZcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1syNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDJdW2ddXT02MTk1MitnLHlbNjE5NTIrZ109X1syNDJdW2ddKTtmb3IoX1syNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZjZcdTk2YzZcdTVmYjVcdTYxZjJcdTZmODRcdTRlMTRcdTRmOThcdTUwMWZcdTUzYzlcdTU1ZGZcdTVkNmZc''@;'; put 'put ''dTVkZWVcdTZiMjFcdTZiNjRcdTc4Y2JcdTdiOWFcdWY5ZmVcdThlNDlcdThlY2FcdTkwNmVcdTYzNDlcdTY0M2VcdTc3NDBcdTdhODRcdTkzMmZcdTk0N2ZcdTlmNmFcdTY0YjBcdTZmYWZcdTcxZTZcdTc0YThcdTc0ZGFcdTdhYzRcdTdjMTJcdTdlODJcdTdjYjJcdTdlOThcdThiOWFcdThk''@;'; put 'put ''MGFcdTk0N2RcdTk5MTBcdTk5NGNcdTUyMzlcdTViZGZcdTY0ZTZcdTY3MmRcdTdkMmVcdTUwZWRcdTUzYzNcdTU4NzlcdTYxNThcdTYxNTlcdTYxZmFcdTY1YWNcdTdhZDlcdThiOTJcdThiOTZcdTUwMDlcdTUwMjFcdTUyNzVcdTU1MzFcdTVhM2NcdTVlZTBcdTVmNzBcdTYxMzRcdTY1NWVc''@;'; put 'put ''dTY2MGNcdTY2MzZcdTY2YTJcdTY5Y2RcdTZlYzRcdTZmMzJcdTczMTZcdTc2MjFcdTdhOTNcdTgxMzlcdTgyNTlcdTgzZDZcdTg0YmNcdTUwYjVcdTU3ZjBcdTViYzBcdTViZThcdTVmNjlcdTYzYTFcdTc4MjZcdTdkYjVcdTgzZGNcdTg1MjFcdTkxYzdcdTkxZjVcdTUxOGFcdTY3ZjVcdTdi''@;'; put 'put ''NTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDNdW2ddXT02MjIwOCtnLHlbNjIyMDgrZ109X1syNDNdW2ddKTtmb3IoX1syNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWNcdTUxYzRcdTU5YmJcdTYwYmRcdTg2NTVcdTUwMWNcdWY5ZmZcdTUyNTRcdTVjM2Fc''@;'; put 'put ''dTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1YTVcdTZlY2NcdTc2MjBcdTgxMGFcdThlNjBcdTk2NWZcdTk2YmJcdTRlZGZcdTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRcdTdhN2ZcdTgyMWJcdTg1YTZcdThjZTRcdThlMTBcdTkwNzdcdTkxZTdcdTk1''@;'; put 'put ''ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJcdTU1ODZcdTVmYjlcdTY0YTRcdTZmODhcdTdkYjRcdThmMWZcdThmNGRcdTk0MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdjNjRcdThhNzlcdThhYzJcdTU4MWVcdTU5YmVcdTVlMTZcdTYzNzdcdTcyNTJc''@;'; put 'put ''dTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThmMTJcdTVlZjNcdTY2NzRcdTZkZjhcdTgwN2RcdTgzYzFcdThhY2JcdTk3NTFcdTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZcdTkwMmVcdTkwNWVcdTlhZDRcdTUyMWRcdTUyN2ZcdTU0ZThcdTYxOTRcdTYy''@;'; put 'put ''ODRcdTYyZGJcdTY4YTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDRdW2ddXT02MjQ2NCtnLHlbNjI0NjQrZ109X1syNDRdW2ddKTtmb3IoX1syNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5MTJcdTY5NWFcdTZhMzVcdTcwOTJcdTcxMjZcdTc4NWRcdTc5MDFc''@;'; put 'put ''dTc5MGVcdTc5ZDJcdTdhMGRcdTgwOTZcdTgyNzhcdTgyZDVcdTgzNDlcdTg1NDlcdThjODJcdThkODVcdTkxNjJcdTkxOGJcdTkxYWVcdTRmYzNcdTU2ZDFcdTcxZWRcdTc3ZDdcdTg3MDBcdTg5ZjhcdTViZjhcdTVmZDZcdTY3NTFcdTkwYThcdTUzZTJcdTU4NWFcdTViZjVcdTYwYTRcdTYx''@;'; put 'put ''ODFcdTY0NjBcdTdlM2RcdTgwNzBcdTg1MjVcdTkyODNcdTY0YWVcdTUwYWNcdTVkMTRcdTY3MDBcdTU4OWNcdTYyYmRcdTYzYThcdTY5MGVcdTY5NzhcdTZhMWVcdTZlNmJcdTc2YmFcdTc5Y2JcdTgyYmJcdTg0MjlcdThhY2ZcdThkYThcdThmZmRcdTkxMTJcdTkxNGJcdTkxOWNcdTkzMTBc''@;'; put 'put ''dTkzMThcdTkzOWFcdTk2ZGJcdTlhMzZcdTljMGRcdTRlMTFcdTc1NWNcdTc5NWRcdTdhZmFcdTdiNTFcdTdiYzlcdTdlMmVcdTg0YzRcdThlNTlcdThlNzRcdThlZjhcdTkwMTBcdTY2MjVcdTY5M2ZcdTc0NDNcdTUxZmFcdTY3MmVcdTllZGNcdTUxNDVcdTVmZTBcdTZjOTZcdTg3ZjJcdTg4''@;'; put 'put ''NWRcdTg4NzdcdTYwYjRcdTgxYjVcdTg0MDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDVdW2ddXT02MjcyMCtnLHlbNjI3MjArZ109X1syNDVdW2ddKTtmb3IoX1syNDZdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMDVcdTUzZDZcdTU0MzlcdTU2MzRcdTVhMzZc''@;'; put 'put ''dTVjMzFcdTcwOGFcdTdmZTBcdTgwNWFcdTgxMDZcdTgxZWRcdThkYTNcdTkxODlcdTlhNWZcdTlkZjJcdTUwNzRcdTRlYzRcdTUzYTBcdTYwZmJcdTZlMmNcdTVjNjRcdTRmODhcdTUwMjRcdTU1ZTRcdTVjZDlcdTVlNWZcdTYwNjVcdTY4OTRcdTZjYmJcdTZkYzRcdTcxYmVcdTc1ZDRcdTc1''@;'; put 'put ''ZjRcdTc2NjFcdTdhMWFcdTdhNDlcdTdkYzdcdTdkZmJcdTdmNmVcdTgxZjRcdTg2YTlcdThmMWNcdTk2YzlcdTk5YjNcdTlmNTJcdTUyNDdcdTUyYzVcdTk4ZWRcdTg5YWFcdTRlMDNcdTY3ZDJcdTZmMDZcdTRmYjVcdTViZTJcdTY3OTVcdTZjODhcdTZkNzhcdTc0MWJcdTc4MjdcdTkxZGRc''@;'; put 'put ''dTkzN2NcdTg3YzRcdTc5ZTRcdTdhMzFcdTVmZWJcdTRlZDZcdTU0YTRcdTU1M2VcdTU4YWVcdTU5YTVcdTYwZjBcdTYyNTNcdTYyZDZcdTY3MzZcdTY5NTVcdTgyMzVcdTk2NDBcdTk5YjFcdTk5ZGRcdTUwMmNcdTUzNTNcdTU1NDRcdTU3N2NcdWZhMDFcdTYyNThcdWZhMDJcdTY0ZTJcdTY2''@;'; put 'put ''NmJcdTY3ZGRcdTZmYzFcdTZmZWZcdTc0MjJcdTc0MzhcdThhMTdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDZdW2ddXT02Mjk3NitnLHlbNjI5NzYrZ109X1syNDZdW2ddKTtmb3IoX1sy''@;'; put 'put ''NDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0MzhcdTU0NTFcdTU2MDZc''@;'; put 'put ''dTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThcdTcwYWRcdTdkYmJcdThhOTVcdTU5NmFcdTgxMmJcdTYzYTJcdTc3MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZlNmZcdWZhMDNcdTg1NjlcdTUxNGNcdTUzZjBcdTU5MmFcdTYwMjBcdTYxNGJcdTZi''@;'; put 'put ''ODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgyZDRcdThkYzZcdTkwYjBcdTk4YjFcdWZhMDRcdTY0YzdcdTZmYTRcdTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZcdWZhMDVcdTc1ZGJcdTdiNTJcdTdkNzFcdTkwMWFcdTU4MDZcdTY5Y2NcdTgxN2Zc''@;'; put 'put ''dTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdcdTU5YWNcdTYyOTVcdTkwMGZcdTliMmFcdTYxNWRcdTcyNzlcdTk1ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZjZTJcdTZkM2VcdTcyMmNcdTc0MzZcdTc4MzRcdTdmNzdcdTgyYWRcdThkZGJcdTk4''@;'; put 'put ''MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0ZTNcdThjYTlcdThmYTZcdTkyMTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDddW2ddXT02MzIzMitnLHlbNjMyMzIrZ109X1syNDdd''@;'; put 'put ''W2ddKTtmb3IoX1syNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2MmFc''@;'; put 'put ''dTUxNmJcdTUzZWRcdTYzNGNcdTRmNjlcdTU1MDRcdTYwOTZcdTY1NTdcdTZjOWJcdTZkN2ZcdTcyNGNcdTcyZmRcdTdhMTdcdTg5ODdcdThjOWRcdTVmNmRcdTZmOGVcdTcwZjlcdTgxYThcdTYxMGVcdTRmYmZcdTUwNGZcdTYyNDFcdTcyNDdcdTdiYzdcdTdkZThcdTdmZTlcdTkwNGRcdTk3''@;'; put 'put ''YWRcdTlhMTlcdThjYjZcdTU3NmFcdTVlNzNcdTY3YjBcdTg0MGRcdThhNTVcdTU0MjBcdTViMTZcdTVlNjNcdTVlZTJcdTVmMGFcdTY1ODNcdTgwYmFcdTg1M2RcdTk1ODlcdTk2NWJcdTRmNDhcdTUzMDVcdTUzMGRcdTUzMGZcdTU0ODZcdTU0ZmFcdTU3MDNcdTVlMDNcdTYwMTZcdTYyOWJc''@;'; put 'put ''dTYyYjFcdTYzNTVcdWZhMDZcdTZjZTFcdTZkNjZcdTc1YjFcdTc4MzJcdTgwZGVcdTgxMmZcdTgyZGVcdTg0NjFcdTg0YjJcdTg4OGRcdTg5MTJcdTkwMGJcdTkyZWFcdTk4ZmRcdTliOTFcdTVlNDVcdTY2YjRcdTY2ZGRcdTcwMTFcdTcyMDZcdWZhMDdcdTRmZjVcdTUyN2RcdTVmNmFcdTYx''@;'; put 'put ''NTNcdTY3NTNcdTZhMTlcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThjNzlcdTk4YzdcdTk4YzRcdTlhNDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDhdW2ddXT02MzQ4OCtnLHlbNjM0''@;'; put 'put ''ODgrZ109X1syNDhdW2ddKTtmb3IoX1syNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTU0YzFcdTdhMWZcdTY5NTNcdThhZjdcdThjNGFcdTk4YThcdTk5YWVcdTVmN2NcdTYyYWJcdTc1YjJcdTc2YWVcdTg4YWJcdTkwN2ZcdTk2NDJcdTUzMzlcdTVmM2NcdTVmYzVcdTZjY2NcdTczY2NcdTc1NjJcdTc1OGJcdTdiNDZcdTgyZmVcdTk5OWRcdTRlNGZcdTkwM2NcdTRl''@;'; put 'put ''MGJcdTRmNTVcdTUzYTZcdTU5MGZcdTVlYzhcdTY2MzBcdTZjYjNcdTc0NTVcdTgzNzdcdTg3NjZcdThjYzBcdTkwNTBcdTk3MWVcdTljMTVcdTU4ZDFcdTViNzhcdTg2NTBcdThiMTRcdTlkYjRcdTViZDJcdTYwNjhcdTYwOGRcdTY1ZjFcdTZjNTdcdTZmMjJcdTZmYTNcdTcwMWFcdTdmNTVc''@;'; put 'put ''dTdmZjBcdTk1OTFcdTk1OTJcdTk2NTBcdTk3ZDNcdTUyNzJcdThmNDRcdTUxZmRcdTU0MmJcdTU0YjhcdTU1NjNcdTU1OGFcdTZhYmJcdTZkYjVcdTdkZDhcdTgyNjZcdTkyOWNcdTk2NzdcdTllNzlcdTU0MDhcdTU0YzhcdTc2ZDJcdTg2ZTRcdTk1YTRcdTk1ZDRcdTk2NWNcdTRlYTJcdTRm''@;'; put 'put ''MDlcdTU5ZWVcdTVhZTZcdTVkZjdcdTYwNTJcdTYyOTdcdTY3NmRcdTY4NDFcdTZjODZcdTZlMmZcdTdmMzhcdTgwOWJcdTgyMmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDldW2ddXT02''@;'; put 'put ''Mzc0NCtnLHlbNjM3NDQrZ109X1syNDldW2ddKTtmb3IoX1syNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZhMDhcdWZhMDlcdTk4MDVcdTRlYTVcdTUwNTVcdTU0YjNcdTU3OTNcdTU5NWFcdTViNjlcdTViYjNcdTYxYzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3ZjlcdTg5ZTNcdThhNzJcdThhZTdcdTkwODJcdTk5ZWRcdTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVl''@;'; put 'put ''NzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0MTFcdTU2YWVcdTczZTZcdTkxMTVcdTk3ZmZcdTk5MDlcdTk5NTdcdTk5OTlcdTU2NTNcdTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZhZjZcdTczN2JcdThlZDJcdTZiNDdcdTk2YWFcdTlhNTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3Njlc''@;'; put 'put ''dTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJcdTZjZWJcdTcwYWJcdTczODRcdTczYjlcdTczZmVcdTc3MjlcdTc3NGRcdTdkNDNcdTdkNjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFcdThjZTJcdTkyNDlcdTk4NmZcdTViNTFcdTdhNzRcdTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUz''@;'; put 'put ''NTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcyZjlcdTgxMDVcdTgxMDdcdTgzYTJcdTkyY2ZcdTk4MzBcdTRlYThcdTUxNDRcdTUyMTFcdTU3OGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1syNTBdW2ddXT02NGUzK2cseVs2NGUzK2ddPV9bMjUwXVtnXSk7Zm9yKF9bMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjYyXHU2Y2MyXHU2ZWNlXHU3MDA1XHU3MDUwXHU3MGFmXHU3MTkyXHU3M2U5XHU3NDY5XHU4MzRhXHU4N2EyXHU4ODYxXHU5MDA4XHU5MGEyXHU5M2EzXHU5OWE4XHU1MTZlXHU1ZjU3XHU2MGUwXHU2MTY3XHU2NmIzXHU4NTU5XHU4ZTRh''@;'; put 'put ''XHU5MWFmXHU5NzhiXHU0ZTRlXHU0ZTkyXHU1NDdjXHU1OGQ1XHU1OGZhXHU1OTdkXHU1Y2I1XHU1ZjI3XHU2MjM2XHU2MjQ4XHU2NjBhXHU2NjY3XHU2YmViXHU2ZDY5XHU2ZGNmXHU2ZTU2XHU2ZWY4XHU2Zjk0XHU2ZmUwXHU2ZmU5XHU3MDVkXHU3MmQwXHU3NDI1XHU3NDVhXHU3NGUwXHU3''@;'; put 'put ''NjkzXHU3OTVjXHU3Y2NhXHU3ZTFlXHU4MGUxXHU4MmE2XHU4NDZiXHU4NGJmXHU4NjRlXHU4NjVmXHU4Nzc0XHU4Yjc3XHU4YzZhXHU5M2FjXHU5ODAwXHU5ODY1XHU2MGQxXHU2MjE2XHU5MTc3XHU1YTVhXHU2NjBmXHU2ZGY3XHU2ZTNlXHU3NDNmXHU5YjQyXHU1ZmZkXHU2MGRhXHU3YjBm''@;'; put 'put ''XHU1NGM0XHU1ZjE4XHU2YzVlXHU2Y2QzXHU2ZDJhXHU3MGQ4XHU3ZDA1XHU4Njc5XHU4YTBjXHU5ZDNiXHU1MzE2XHU1NDhjXHU1YjA1XHU2YTNhXHU3MDZiXHU3NTc1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTFdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMjUxXVtnXV09NjQyNTYrZyx5WzY0MjU2K2ddPV9bMjUxXVtnXSk7Zm9yKF9bMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OThkXHU3OWJlXHU4MmIxXHU4M2VmXHU4YTcxXHU4YjQxXHU4Y2E4XHU5Nzc0XHVmYTBiXHU2NGY0XHU2NTJiXHU3OGJhXHU3OGJiXHU3YTZiXHU0ZTM4XHU1NTlhXHU1OTUwXHU1YmE2XHU1ZTdiXHU2MGEzXHU2M2Ri''@;'; put 'put ''XHU2YjYxXHU2NjY1XHU2ODUzXHU2ZTE5XHU3MTY1XHU3NGIwXHU3ZDA4XHU5MDg0XHU5YTY5XHU5YzI1XHU2ZDNiXHU2ZWQxXHU3MzNlXHU4YzQxXHU5NWNhXHU1MWYwXHU1ZTRjXHU1ZmE4XHU2MDRkXHU2MGY2XHU2MTMwXHU2MTRjXHU2NjQzXHU2NjQ0XHU2OWE1XHU2Y2MxXHU2ZTVmXHU2''@;'; put 'put ''ZWM5XHU2ZjYyXHU3MTRjXHU3NDljXHU3Njg3XHU3YmMxXHU3YzI3XHU4MzUyXHU4NzU3XHU5MDUxXHU5NjhkXHU5ZWMzXHU1MzJmXHU1NmRlXHU1ZWZiXHU1ZjhhXHU2MDYyXHU2MDk0XHU2MWY3XHU2NjY2XHU2NzAzXHU2YTljXHU2ZGVlXHU2ZmFlXHU3MDcwXHU3MzZhXHU3ZTZhXHU4MWJl''@;'; put 'put ''XHU4MzM0XHU4NmQ0XHU4YWE4XHU4Y2M0XHU1MjgzXHU3MzcyXHU1Yjk2XHU2YTZiXHU5NDA0XHU1NGVlXHU1Njg2XHU1YjVkXHU2NTQ4XHU2NTg1XHU2NmM5XHU2ODlmXHU2ZDhkXHU2ZGM2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTJd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUyXVtnXV09NjQ1MTIrZyx5WzY0NTEyK2ddPV9bMjUyXVtnXSk7Zm9yKF9bMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MjNiXHU4MGI0XHU5MTc1XHU5YTRkXHU0ZmFmXHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5XHU1NWM1XHU1ZTNmXHU1ZjhjXHU2NzNkXHU3MTY2XHU3M2RkXHU5MDA1XHU1MmRiXHU1MmYz''@;'; put 'put ''XHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZiXHU4NWIwXHU4YTEzXHU2Njg4XHU4NWE4XHU1NWE3XHU2Njg0XHU3MTRhXHU4NDMxXHU1MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2M2VlXHU2Njg5XHU3MTQ3XHU4YWYxXHU4ZjFkXHU5ZWJlXHU0ZjExXHU2NDNhXHU3MGNiXHU3''@;'; put 'put ''NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1MTQ3XHU1MWY2XHU1MzA4XHU2ZDM2XHU4MGY4XHU5ZWQxXHU2NjE1XHU2YjIzXHU3MDk4XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2XHU2YjIwXHU2YjNkXHU2YjQ2XHU1NDM4XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4MjA4XHU1MGQ2''@;'; put 'put ''XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVjXHU1YjA5XHU1ZTBjXHU2MTk5XHU2MTk4XHU2MjMxXHU2NjVlXHU2NmU2XHU3MTk5XHU3MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3ZmIyXHU4YTcwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUzXS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1syNTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUzXVtnXV09NjQ3NjgrZyx5WzY0NzY4K2ddPV9bMjUzXVtnXSk7cmV0dXJue2VuYzpJLGRlYzp5fX0oKSxYWzk1MF09ZnVuY3Rpb24oKXt2YXIgZyx5PVtdLEk9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0''@;'; put 'put ''XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFi''@;'; put 'put ''Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1swXS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1swXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzBdW2ddXT0wK2cseVswK2ddPV9bMF1bZ10pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1ZmYwY1x1MzAwMVx1MzAwMlx1''@;'; put 'put ''ZmYwZVx1MjAyN1x1ZmYxYlx1ZmYxYVx1ZmYxZlx1ZmYwMVx1ZmUzMFx1MjAyNlx1MjAyNVx1ZmU1MFx1ZmU1MVx1ZmU1Mlx4YjdcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZmNWNcdTIwMTNcdWZlMzFcdTIwMTRcdWZlMzNcdTI1NzRcdWZlMzRcdWZlNGZcdWZmMDhcdWZmMDlcdWZlMzVc''@;'; put 'put ''dWZlMzZcdWZmNWJcdWZmNWRcdWZlMzdcdWZlMzhcdTMwMTRcdTMwMTVcdWZlMzlcdWZlM2FcdTMwMTBcdTMwMTFcdWZlM2JcdWZlM2NcdTMwMGFcdTMwMGJcdWZlM2RcdWZlM2VcdTMwMDhcdTMwMDlcdWZlM2ZcdWZlNDBcdTMwMGNcdTMwMGRcdWZlNDFcdWZlNDJcdTMwMGVcdTMwMGZcdWZl''@;'; put 'put ''NDNcdWZlNDRcdWZlNTlcdWZlNWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMWRcdTMwMWVcdTIwMzVcdTIwMzJcdWZmMDNcdWZmMDZcdWZmMGFcdTIwM2JceGE3XHUzMDAz''@;'; put 'put ''XHUyNWNiXHUyNWNmXHUyNWIzXHUyNWIyXHUyNWNlXHUyNjA2XHUyNjA1XHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWJkXHUyNWJjXHUzMmEzXHUyMTA1XHhhZlx1ZmZlM1x1ZmYzZlx1MDJjZFx1ZmU0OVx1ZmU0YVx1ZmU0ZFx1ZmU0ZVx1ZmU0Ylx1ZmU0Y1x1ZmU1Zlx1ZmU2MFx1ZmU2''@;'; put 'put ''MVx1ZmYwYlx1ZmYwZFx4ZDdceGY3XHhiMVx1MjIxYVx1ZmYxY1x1ZmYxZVx1ZmYxZFx1MjI2Nlx1MjI2N1x1MjI2MFx1MjIxZVx1MjI1Mlx1MjI2MVx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmY1ZVx1MjIyOVx1MjIyYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MzNkMlx1''@;'; put 'put ''MzNkMVx1MjIyYlx1MjIyZVx1MjIzNVx1MjIzNFx1MjY0MFx1MjY0Mlx1MjI5NVx1MjI5OVx1MjE5MVx1MjE5M1x1MjE5MFx1MjE5Mlx1MjE5Nlx1MjE5N1x1MjE5OVx1MjE5OFx1MjIyNVx1MjIyM1x1ZmYwZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2MV0ubGVuZ3RoOysrZyk2NTUz''@;'; put 'put ''MyE9PV9bMTYxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2MV1bZ11dPTQxMjE2K2cseVs0MTIxNitnXT1fWzE2MV1bZ10pO2ZvcihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYzY1x1MjIxNVx1ZmU2OFx1ZmYwNFx1''@;'; put 'put ''ZmZlNVx1MzAxMlx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYyMFx1MjEwM1x1MjEwOVx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1MzNkNVx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNjZVx1MzNhMVx1MzM4ZVx1MzM4Zlx1MzNjNFx4YjBcdTUxNTlcdTUxNWJcdTUxNWVcdTUxNWRcdTUxNjFcdTUxNjNcdTU1ZTdc''@;'; put 'put ''dTc0ZTlcdTdjY2VcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1ODhcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2NcdTI1MzRcdTI1MmNcdTI1MjRcdTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1MGNcdTI1''@;'; put 'put ''MTBcdTI1MTRcdTI1MThcdTI1NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1NzFcdTI1NzJcdTI1NzNcdWZmMTBcdWZmMTFcdWZmMTJcdWZm''@;'; put 'put ''MTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTMwMjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTUzNDFcdTUzNDRc''@;'; put 'put ''dTUzNDVcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZm''@;'; put 'put ''NDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjJdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzE2Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjJdW2ddXT00MTQ3MitnLHlbNDE0NzIrZ109X1sxNjJdW2ddKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNTdcdWZmNThcdWZm''@;'; put 'put ''NTlcdWZmNWFcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJc''@;'; put 'put ''dTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMx''@;'; put 'put ''MGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMx''@;'; put 'put ''MWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdTAyZDlcdTAyYzlcdTAyY2FcdTAyYzdcdTAyY2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1sxNjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjNdW2ddXT00MTcyOCtnLHlbNDE3MjgrZ109X1sxNjNdW2ddKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRl''@;'; put 'put ''MDBcdTRlNTlcdTRlMDFcdTRlMDNcdTRlNDNcdTRlNWRcdTRlODZcdTRlOGNcdTRlYmFcdTUxM2ZcdTUxNjVcdTUxNmJcdTUxZTBcdTUyMDBcdTUyMDFcdTUyOWJcdTUzMTVcdTUzNDFcdTUzNWNcdTUzYzhcdTRlMDlcdTRlMGJcdTRlMDhcdTRlMGFcdTRlMmJcdTRlMzhcdTUxZTFcdTRlNDVc''@;'; put 'put ''dTRlNDhcdTRlNWZcdTRlNWVcdTRlOGVcdTRlYTFcdTUxNDBcdTUyMDNcdTUyZmFcdTUzNDNcdTUzYzlcdTUzZTNcdTU3MWZcdTU4ZWJcdTU5MTVcdTU5MjdcdTU5NzNcdTViNTBcdTViNTFcdTViNTNcdTViZjhcdTVjMGZcdTVjMjJcdTVjMzhcdTVjNzFcdTVkZGRcdTVkZTVcdTVkZjFcdTVk''@;'; put 'put ''ZjJcdTVkZjNcdTVkZmVcdTVlNzJcdTVlZmVcdTVmMGJcdTVmMTNcdTYyNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTFcdTRlMTBcdTRlMGRcdTRlMmRcdTRlMzBcdTRlMzlcdTRlNGJcdTVjMzlcdTRlODhcdTRlOTFcdTRlOTVcdTRlOTJcdTRlOTRcdTRl''@;'; put 'put ''YTJcdTRlYzFcdTRlYzBcdTRlYzNcdTRlYzZcdTRlYzdcdTRlY2RcdTRlY2FcdTRlY2JcdTRlYzRcdTUxNDNcdTUxNDFcdTUxNjdcdTUxNmRcdTUxNmVcdTUxNmNcdTUxOTdcdTUxZjZcdTUyMDZcdTUyMDdcdTUyMDhcdTUyZmJcdTUyZmVcdTUyZmZcdTUzMTZcdTUzMzlcdTUzNDhcdTUzNDdc''@;'; put 'put ''dTUzNDVcdTUzNWVcdTUzODRcdTUzY2JcdTUzY2FcdTUzY2RcdTU4ZWNcdTU5MjlcdTU5MmJcdTU5MmFcdTU5MmRcdTViNTRcdTVjMTFcdTVjMjRcdTVjM2FcdTVjNmZcdTVkZjRcdTVlN2JcdTVlZmZcdTVmMTRcdTVmMTVcdTVmYzNcdTYyMDhcdTYyMzZcdTYyNGJcdTYyNGVcdTY1MmZcdTY1''@;'; put 'put ''ODdcdTY1OTdcdTY1YTRcdTY1YjlcdTY1ZTVcdTY2ZjBcdTY3MDhcdTY3MjhcdTZiMjBcdTZiNjJcdTZiNzlcdTZiY2JcdTZiZDRcdTZiZGJcdTZjMGZcdTZjMzRcdTcwNmJcdTcyMmFcdTcyMzZcdTcyM2JcdTcyNDdcdTcyNTlcdTcyNWJcdTcyYWNcdTczOGJcdTRlMTlcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1sxNjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjRdW2ddXT00MTk4NCtnLHlbNDE5ODQrZ109X1sxNjRdW2ddKTtmb3IoX1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTRlMTZcdTRlMTVcdTRlMTRcdTRlMThcdTRlM2JcdTRlNGRcdTRlNGZcdTRlNGVcdTRlZTVcdTRlZDhcdTRlZDRcdTRlZDVcdTRlZDZcdTRlZDdcdTRlZTNcdTRlZTRcdTRlZDlcdTRlZGVcdTUxNDVcdTUxNDRcdTUxODlcdTUxOGFcdTUxYWNcdTUxZjlcdTUxZmFcdTUxZjhc''@;'; put 'put ''dTUyMGFcdTUyYTBcdTUyOWZcdTUzMDVcdTUzMDZcdTUzMTdcdTUzMWRcdTRlZGZcdTUzNGFcdTUzNDlcdTUzNjFcdTUzNjBcdTUzNmZcdTUzNmVcdTUzYmJcdTUzZWZcdTUzZTRcdTUzZjNcdTUzZWNcdTUzZWVcdTUzZTlcdTUzZThcdTUzZmNcdTUzZjhcdTUzZjVcdTUzZWJcdTUzZTZcdTUz''@;'; put 'put ''ZWFcdTUzZjJcdTUzZjFcdTUzZjBcdTUzZTVcdTUzZWRcdTUzZmJcdTU2ZGJcdTU2ZGFcdTU5MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5MmVcdTU5MzFcdTU5NzRcdTU5NzZcdTViNTVcdTViODNcdTVjM2NcdTVkZThcdTVkZTdcdTVkZTZcdTVlMDJcdTVl''@;'; put 'put ''MDNcdTVlNzNcdTVlN2NcdTVmMDFcdTVmMThcdTVmMTdcdTVmYzVcdTYyMGFcdTYyNTNcdTYyNTRcdTYyNTJcdTYyNTFcdTY1YTVcdTY1ZTZcdTY3MmVcdTY3MmNcdTY3MmFcdTY3MmJcdTY3MmRcdTZiNjNcdTZiY2RcdTZjMTFcdTZjMTBcdTZjMzhcdTZjNDFcdTZjNDBcdTZjM2VcdTcyYWZc''@;'; put 'put ''dTczODRcdTczODlcdTc0ZGNcdTc0ZTZcdTc1MThcdTc1MWZcdTc1MjhcdTc1MjlcdTc1MzBcdTc1MzFcdTc1MzJcdTc1MzNcdTc1OGJcdTc2N2RcdTc2YWVcdTc2YmZcdTc2ZWVcdTc3ZGJcdTc3ZTJcdTc3ZjNcdTc5M2FcdTc5YmVcdTdhNzRcdTdhY2JcdTRlMWVcdTRlMWZcdTRlNTJcdTRl''@;'; put 'put ''NTNcdTRlNjlcdTRlOTlcdTRlYTRcdTRlYTZcdTRlYTVcdTRlZmZcdTRmMDlcdTRmMTlcdTRmMGFcdTRmMTVcdTRmMGRcdTRmMTBcdTRmMTFcdTRmMGZcdTRlZjJcdTRlZjZcdTRlZmJcdTRlZjBcdTRlZjNcdTRlZmRcdTRmMDFcdTRmMGJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjhc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjVdW2ddXT00MjI0MCtnLHlbNDIyNDArZ109X1sxNjVdW2ddKTtmb3IoX1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxNzFcdTUxOGRcdTUxYjBcdTUyMTdcdTUyMTFcdTUyMTJcdTUyMGVcdTUyMTZcdTUyYTNcdTUzMDhcdTUzMjFcdTUzMjBcdTUzNzBcdTUzNzFcdTU0MDlcdTU0MGZcdTU0MGNcdTU0MGFcdTU0MTBcdTU0MDFcdTU0MGJcdTU0MDRcdTU0MTFcdTU0MGRc''@;'; put 'put ''dTU0MDhcdTU0MDNcdTU0MGVcdTU0MDZcdTU0MTJcdTU2ZTBcdTU2ZGVcdTU2ZGRcdTU3MzNcdTU3MzBcdTU3MjhcdTU3MmRcdTU3MmNcdTU3MmZcdTU3MjlcdTU5MTlcdTU5MWFcdTU5MzdcdTU5MzhcdTU5ODRcdTU5NzhcdTU5ODNcdTU5N2RcdTU5NzlcdTU5ODJcdTU5ODFcdTViNTdcdTVi''@;'; put 'put ''NThcdTViODdcdTViODhcdTViODVcdTViODlcdTViZmFcdTVjMTZcdTVjNzlcdTVkZGVcdTVlMDZcdTVlNzZcdTVlNzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGZcdTVmMWJcdTVmZDlcdTVmZDZcdTYyMGVcdTYyMGNcdTYyMGRcdTYyMTBcdTYyNjNcdTYy''@;'; put 'put ''NWJcdTYyNThcdTY1MzZcdTY1ZTlcdTY1ZThcdTY1ZWNcdTY1ZWRcdTY2ZjJcdTY2ZjNcdTY3MDlcdTY3M2RcdTY3MzRcdTY3MzFcdTY3MzVcdTZiMjFcdTZiNjRcdTZiN2JcdTZjMTZcdTZjNWRcdTZjNTdcdTZjNTlcdTZjNWZcdTZjNjBcdTZjNTBcdTZjNTVcdTZjNjFcdTZjNWJcdTZjNGRc''@;'; put 'put ''dTZjNGVcdTcwNzBcdTcyNWZcdTcyNWRcdTc2N2VcdTdhZjlcdTdjNzNcdTdjZjhcdTdmMzZcdTdmOGFcdTdmYmRcdTgwMDFcdTgwMDNcdTgwMGNcdTgwMTJcdTgwMzNcdTgwN2ZcdTgwODlcdTgwOGJcdTgwOGNcdTgxZTNcdTgxZWFcdTgxZjNcdTgxZmNcdTgyMGNcdTgyMWJcdTgyMWZcdTgy''@;'; put 'put ''NmVcdTgyNzJcdTgyN2VcdTg2NmJcdTg4NDBcdTg4NGNcdTg4NjNcdTg5N2ZcdTk2MjFcdTRlMzJcdTRlYThcdTRmNGRcdTRmNGZcdTRmNDdcdTRmNTdcdTRmNWVcdTRmMzRcdTRmNWJcdTRmNTVcdTRmMzBcdTRmNTBcdTRmNTFcdTRmM2RcdTRmM2FcdTRmMzhcdTRmNDNcdTRmNTRcdTRmM2Nc''@;'; put 'put ''dTRmNDZcdTRmNjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjZdW2ddXT00MjQ5NitnLHlbNDI0OTYrZ109X1sxNjZdW2ddKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWNcdTRmNjBcdTRmMmZcdTRmNGVcdTRmMzZcdTRmNTlcdTRmNWRcdTRmNDhcdTRmNWFcdTUxNGNcdTUxNGJcdTUxNGRcdTUxNzVcdTUxYjZcdTUxYjdcdTUyMjVcdTUyMjRcdTUyMjlcdTUyMmFcdTUyMjhcdTUyYWJcdTUyYTlc''@;'; put 'put ''dTUyYWFcdTUyYWNcdTUzMjNcdTUzNzNcdTUzNzVcdTU0MWRcdTU0MmRcdTU0MWVcdTU0M2VcdTU0MjZcdTU0NGVcdTU0MjdcdTU0NDZcdTU0NDNcdTU0MzNcdTU0NDhcdTU0NDJcdTU0MWJcdTU0MjlcdTU0NGFcdTU0MzlcdTU0M2JcdTU0MzhcdTU0MmVcdTU0MzVcdTU0MzZcdTU0MjBcdTU0''@;'; put 'put ''M2NcdTU0NDBcdTU0MzFcdTU0MmJcdTU0MWZcdTU0MmNcdTU2ZWFcdTU2ZjBcdTU2ZTRcdTU2ZWJcdTU3NGFcdTU3NTFcdTU3NDBcdTU3NGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3NDdcdTU3NGVcdTU3M2VcdTU3NTBcdTU3NGZcdTU3M2JcdTU4ZWZcdTU5''@;'; put 'put ''M2VcdTU5OWRcdTU5OTJcdTU5YThcdTU5OWVcdTU5YTNcdTU5OTlcdTU5OTZcdTU5OGRcdTU5YTRcdTU5OTNcdTU5OGFcdTU5YTVcdTViNWRcdTViNWNcdTViNWFcdTViNWJcdTViOGNcdTViOGJcdTViOGZcdTVjMmNcdTVjNDBcdTVjNDFcdTVjM2ZcdTVjM2VcdTVjOTBcdTVjOTFcdTVjOTRc''@;'; put 'put ''dTVjOGNcdTVkZWJcdTVlMGNcdTVlOGZcdTVlODdcdTVlOGFcdTVlZjdcdTVmMDRcdTVmMWZcdTVmNjRcdTVmNjJcdTVmNzdcdTVmNzlcdTVmZDhcdTVmY2NcdTVmZDdcdTVmY2RcdTVmZjFcdTVmZWJcdTVmZjhcdTVmZWFcdTYyMTJcdTYyMTFcdTYyODRcdTYyOTdcdTYyOTZcdTYyODBcdTYy''@;'; put 'put ''NzZcdTYyODlcdTYyNmRcdTYyOGFcdTYyN2NcdTYyN2VcdTYyNzlcdTYyNzNcdTYyOTJcdTYyNmZcdTYyOThcdTYyNmVcdTYyOTVcdTYyOTNcdTYyOTFcdTYyODZcdTY1MzlcdTY1M2JcdTY1MzhcdTY1ZjFcdTY2ZjRcdTY3NWZcdTY3NGVcdTY3NGZcdTY3NTBcdTY3NTFcdTY3NWNcdTY3NTZc''@;'; put 'put ''dTY3NWVcdTY3NDlcdTY3NDZcdTY3NjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjddW2ddXT00Mjc1MitnLHlbNDI3NTIrZ109X1sxNjddW2ddKTtmb3IoX1sxNjhdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTNcdTY3NTdcdTZiNjVcdTZiY2ZcdTZjNDJcdTZjNWVcdTZjOTlcdTZjODFcdTZjODhcdTZjODlcdTZjODVcdTZjOWJcdTZjNmFcdTZjN2FcdTZjOTBcdTZjNzBcdTZjOGNcdTZjNjhcdTZjOTZcdTZjOTJc''@;'; put 'put ''dTZjN2RcdTZjODNcdTZjNzJcdTZjN2VcdTZjNzRcdTZjODZcdTZjNzZcdTZjOGRcdTZjOTRcdTZjOThcdTZjODJcdTcwNzZcdTcwN2NcdTcwN2RcdTcwNzhcdTcyNjJcdTcyNjFcdTcyNjBcdTcyYzRcdTcyYzJcdTczOTZcdTc1MmNcdTc1MmJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2ZWZcdTc3''@;'; put 'put ''ZTNcdTc5YzFcdTc5YzBcdTc5YmZcdTdhNzZcdTdjZmJcdTdmNTVcdTgwOTZcdTgwOTNcdTgwOWRcdTgwOThcdTgwOWJcdTgwOWFcdTgwYjJcdTgyNmZcdTgyOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGJcdTgyOGRcdTg5OGJcdTg5ZDJcdThhMDBcdThj''@;'; put 'put ''MzdcdThjNDZcdThjNTVcdThjOWRcdThkNjRcdThkNzBcdThkYjNcdThlYWJcdThlY2FcdThmOWJcdThmYjBcdThmYzJcdThmYzZcdThmYzVcdThmYzRcdTVkZTFcdTkwOTFcdTkwYTJcdTkwYWFcdTkwYTZcdTkwYTNcdTkxNDlcdTkxYzZcdTkxY2NcdTk2MzJcdTk2MmVcdTk2MzFcdTk2MmFc''@;'; put 'put ''dTk2MmNcdTRlMjZcdTRlNTZcdTRlNzNcdTRlOGJcdTRlOWJcdTRlOWVcdTRlYWJcdTRlYWNcdTRmNmZcdTRmOWRcdTRmOGRcdTRmNzNcdTRmN2ZcdTRmNmNcdTRmOWJcdTRmOGJcdTRmODZcdTRmODNcdTRmNzBcdTRmNzVcdTRmODhcdTRmNjlcdTRmN2JcdTRmOTZcdTRmN2VcdTRmOGZcdTRm''@;'; put 'put ''OTFcdTRmN2FcdTUxNTRcdTUxNTJcdTUxNTVcdTUxNjlcdTUxNzdcdTUxNzZcdTUxNzhcdTUxYmRcdTUxZmRcdTUyM2JcdTUyMzhcdTUyMzdcdTUyM2FcdTUyMzBcdTUyMmVcdTUyMzZcdTUyNDFcdTUyYmVcdTUyYmJcdTUzNTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhc''@;'; put 'put ''dTUzNzlcdTUzZDZcdTUzZDRcdTUzZDdcdTU0NzNcdTU0NzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjhdW2ddXT00MzAwOCtnLHlbNDMwMDgrZ109X1sxNjhdW2ddKTtmb3IoX1sxNjld''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0OTZcdTU0NzhcdTU0OTVcdTU0ODBcdTU0N2JcdTU0NzdcdTU0ODRcdTU0OTJcdTU0ODZcdTU0N2NcdTU0OTBcdTU0NzFcdTU0NzZcdTU0OGNcdTU0OWFcdTU0NjJcdTU0NjhcdTU0OGJc''@;'; put 'put ''dTU0N2RcdTU0OGVcdTU2ZmFcdTU3ODNcdTU3NzdcdTU3NmFcdTU3NjlcdTU3NjFcdTU3NjZcdTU3NjRcdTU3N2NcdTU5MWNcdTU5NDlcdTU5NDdcdTU5NDhcdTU5NDRcdTU5NTRcdTU5YmVcdTU5YmJcdTU5ZDRcdTU5YjlcdTU5YWVcdTU5ZDFcdTU5YzZcdTU5ZDBcdTU5Y2RcdTU5Y2JcdTU5''@;'; put 'put ''ZDNcdTU5Y2FcdTU5YWZcdTU5YjNcdTU5ZDJcdTU5YzVcdTViNWZcdTViNjRcdTViNjNcdTViOTdcdTViOWFcdTViOThcdTViOWNcdTViOTlcdTViOWJcdTVjMWFcdTVjNDhcdTVjNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjNDZcdTVjYjdcdTVjYTFcdTVj''@;'; put 'put ''YjhcdTVjYTlcdTVjYWJcdTVjYjFcdTVjYjNcdTVlMThcdTVlMWFcdTVlMTZcdTVlMTVcdTVlMWJcdTVlMTFcdTVlNzhcdTVlOWFcdTVlOTdcdTVlOWNcdTVlOTVcdTVlOTZcdTVlZjZcdTVmMjZcdTVmMjdcdTVmMjlcdTVmODBcdTVmODFcdTVmN2ZcdTVmN2NcdTVmZGRcdTVmZTBcdTVmZmRc''@;'; put 'put ''dTVmZjVcdTVmZmZcdTYwMGZcdTYwMTRcdTYwMmZcdTYwMzVcdTYwMTZcdTYwMmFcdTYwMTVcdTYwMjFcdTYwMjdcdTYwMjlcdTYwMmJcdTYwMWJcdTYyMTZcdTYyMTVcdTYyM2ZcdTYyM2VcdTYyNDBcdTYyN2ZcdTYyYzlcdTYyY2NcdTYyYzRcdTYyYmZcdTYyYzJcdTYyYjlcdTYyZDJcdTYy''@;'; put 'put ''ZGJcdTYyYWJcdTYyZDNcdTYyZDRcdTYyY2JcdTYyYzhcdTYyYThcdTYyYmRcdTYyYmNcdTYyZDBcdTYyZDlcdTYyYzdcdTYyY2RcdTYyYjVcdTYyZGFcdTYyYjFcdTYyZDhcdTYyZDZcdTYyZDdcdTYyYzZcdTYyYWNcdTYyY2VcdTY1M2VcdTY1YTdcdTY1YmNcdTY1ZmFcdTY2MTRcdTY2MTNc''@;'; put 'put ''dTY2MGNcdTY2MDZcdTY2MDJcdTY2MGVcdTY2MDBcdTY2MGZcdTY2MTVcdTY2MGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjldW2ddXT00MzI2NCtnLHlbNDMyNjQrZ109X1sxNjldW2dd''@;'; put 'put ''KTtmb3IoX1sxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2MDdcdTY3MGRcdTY3MGJcdTY3NmRcdTY3OGJcdTY3OTVcdTY3NzFcdTY3OWNcdTY3NzNcdTY3NzdcdTY3ODdcdTY3OWRcdTY3OTdcdTY3NmZcdTY3NzBcdTY3N2Zc''@;'; put 'put ''dTY3ODlcdTY3N2VcdTY3OTBcdTY3NzVcdTY3OWFcdTY3OTNcdTY3N2NcdTY3NmFcdTY3NzJcdTZiMjNcdTZiNjZcdTZiNjdcdTZiN2ZcdTZjMTNcdTZjMWJcdTZjZTNcdTZjZThcdTZjZjNcdTZjYjFcdTZjY2NcdTZjZTVcdTZjYjNcdTZjYmRcdTZjYmVcdTZjYmNcdTZjZTJcdTZjYWJcdTZj''@;'; put 'put ''ZDVcdTZjZDNcdTZjYjhcdTZjYzRcdTZjYjlcdTZjYzFcdTZjYWVcdTZjZDdcdTZjYzVcdTZjZjFcdTZjYmZcdTZjYmJcdTZjZTFcdTZjZGJcdTZjY2FcdTZjYWNcdTZjZWZcdTZjZGNcdTZjZDZcdTZjZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwOTVcdTcw''@;'; put 'put ''OGVcdTcwOTJcdTcwOGFcdTcwOTlcdTcyMmNcdTcyMmRcdTcyMzhcdTcyNDhcdTcyNjdcdTcyNjlcdTcyYzBcdTcyY2VcdTcyZDlcdTcyZDdcdTcyZDBcdTczYTlcdTczYThcdTczOWZcdTczYWJcdTczYTVcdTc1M2RcdTc1OWRcdTc1OTlcdTc1OWFcdTc2ODRcdTc2YzJcdTc2ZjJcdTc2ZjRc''@;'; put 'put ''dTc3ZTVcdTc3ZmRcdTc5M2VcdTc5NDBcdTc5NDFcdTc5YzlcdTc5YzhcdTdhN2FcdTdhNzlcdTdhZmFcdTdjZmVcdTdmNTRcdTdmOGNcdTdmOGJcdTgwMDVcdTgwYmFcdTgwYTVcdTgwYTJcdTgwYjFcdTgwYTFcdTgwYWJcdTgwYTlcdTgwYjRcdTgwYWFcdTgwYWZcdTgxZTVcdTgxZmVcdTgy''@;'; put 'put ''MGRcdTgyYjNcdTgyOWRcdTgyOTlcdTgyYWRcdTgyYmRcdTgyOWZcdTgyYjlcdTgyYjFcdTgyYWNcdTgyYTVcdTgyYWZcdTgyYjhcdTgyYTNcdTgyYjBcdTgyYmVcdTgyYjdcdTg2NGVcdTg2NzFcdTUyMWRcdTg4NjhcdThlY2JcdThmY2VcdThmZDRcdThmZDFcdTkwYjVcdTkwYjhcdTkwYjFc''@;'; put 'put ''dTkwYjZcdTkxYzdcdTkxZDFcdTk1NzdcdTk1ODBcdTk2MWNcdTk2NDBcdTk2M2ZcdTk2M2JcdTk2NDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzBdW2ddXT00MzUyMCtnLHlbNDM1MjAr''@;'; put 'put ''Z109X1sxNzBdW2ddKTtmb3IoX1sxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NDJcdTk2YjlcdTk2ZThcdTk3NTJcdTk3NWVcdTRlOWZcdTRlYWRcdTRlYWVcdTRmZTFcdTRmYjVcdTRmYWZcdTRmYmZcdTRmZTBcdTRmZDFc''@;'; put 'put ''dTRmY2ZcdTRmZGRcdTRmYzNcdTRmYjZcdTRmZDhcdTRmZGZcdTRmY2FcdTRmZDdcdTRmYWVcdTRmZDBcdTRmYzRcdTRmYzJcdTRmZGFcdTRmY2VcdTRmZGVcdTRmYjdcdTUxNTdcdTUxOTJcdTUxOTFcdTUxYTBcdTUyNGVcdTUyNDNcdTUyNGFcdTUyNGRcdTUyNGNcdTUyNGJcdTUyNDdcdTUy''@;'; put 'put ''YzdcdTUyYzlcdTUyYzNcdTUyYzFcdTUzMGRcdTUzNTdcdTUzN2JcdTUzOWFcdTUzZGJcdTU0YWNcdTU0YzBcdTU0YThcdTU0Y2VcdTU0YzlcdTU0YjhcdTU0YTZcdTU0YjNcdTU0YzdcdTU0YzJcdTU0YmRcdTU0YWFcdTU0YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTU0YzRcdTU0YzhcdTU0YWZcdTU0YWJcdTU0YjFcdTU0YmJcdTU0YTlcdTU0YTdcdTU0YmZcdTU2ZmZcdTU3ODJcdTU3OGJcdTU3YTBcdTU3YTNcdTU3YTJcdTU3Y2VcdTU3YWVcdTU3OTNcdTU5NTVcdTU5NTFcdTU5NGZcdTU5NGVcdTU5NTBcdTU5ZGNcdTU5ZDhcdTU5ZmZcdTU5ZTNc''@;'; put 'put ''dTU5ZThcdTVhMDNcdTU5ZTVcdTU5ZWFcdTU5ZGFcdTU5ZTZcdTVhMDFcdTU5ZmJcdTViNjlcdTViYTNcdTViYTZcdTViYTRcdTViYTJcdTViYTVcdTVjMDFcdTVjNGVcdTVjNGZcdTVjNGRcdTVjNGJcdTVjZDlcdTVjZDJcdTVkZjdcdTVlMWRcdTVlMjVcdTVlMWZcdTVlN2RcdTVlYTBcdTVl''@;'; put 'put ''YTZcdTVlZmFcdTVmMDhcdTVmMmRcdTVmNjVcdTVmODhcdTVmODVcdTVmOGFcdTVmOGJcdTVmODdcdTVmOGNcdTVmODlcdTYwMTJcdTYwMWRcdTYwMjBcdTYwMjVcdTYwMGVcdTYwMjhcdTYwNGRcdTYwNzBcdTYwNjhcdTYwNjJcdTYwNDZcdTYwNDNcdTYwNmNcdTYwNmJcdTYwNmFcdTYwNjRc''@;'; put 'put ''dTYyNDFcdTYyZGNcdTYzMTZcdTYzMDlcdTYyZmNcdTYyZWRcdTYzMDFcdTYyZWVcdTYyZmRcdTYzMDdcdTYyZjFcdTYyZjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzFdW2ddXT00Mzc3''@;'; put 'put ''NitnLHlbNDM3NzYrZ109X1sxNzFdW2ddKTtmb3IoX1sxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWZcdTYyZWNcdTYyZmVcdTYyZjRcdTYzMTFcdTYzMDJcdTY1M2ZcdTY1NDVcdTY1YWJcdTY1YmRcdTY1ZTJcdTY2MjVc''@;'; put 'put ''dTY2MmRcdTY2MjBcdTY2MjdcdTY2MmZcdTY2MWZcdTY2MjhcdTY2MzFcdTY2MjRcdTY2ZjdcdTY3ZmZcdTY3ZDNcdTY3ZjFcdTY3ZDRcdTY3ZDBcdTY3ZWNcdTY3YjZcdTY3YWZcdTY3ZjVcdTY3ZTlcdTY3ZWZcdTY3YzRcdTY3ZDFcdTY3YjRcdTY3ZGFcdTY3ZTVcdTY3YjhcdTY3Y2ZcdTY3''@;'; put 'put ''ZGVcdTY3ZjNcdTY3YjBcdTY3ZDlcdTY3ZTJcdTY3ZGRcdTY3ZDJcdTZiNmFcdTZiODNcdTZiODZcdTZiYjVcdTZiZDJcdTZiZDdcdTZjMWZcdTZjYzlcdTZkMGJcdTZkMzJcdTZkMmFcdTZkNDFcdTZkMjVcdTZkMGNcdTZkMzFcdTZkMWVcdTZkMTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTZkM2JcdTZkM2RcdTZkM2VcdTZkMzZcdTZkMWJcdTZjZjVcdTZkMzlcdTZkMjdcdTZkMzhcdTZkMjlcdTZkMmVcdTZkMzVcdTZkMGVcdTZkMmJcdTcwYWJcdTcwYmFcdTcwYjNcdTcwYWNcdTcwYWZcdTcwYWRcdTcwYjhcdTcwYWVcdTcwYTRcdTcyMzBcdTcyNzJc''@;'; put 'put ''dTcyNmZcdTcyNzRcdTcyZTlcdTcyZTBcdTcyZTFcdTczYjdcdTczY2FcdTczYmJcdTczYjJcdTczY2RcdTczYzBcdTczYjNcdTc1MWFcdTc1MmRcdTc1NGZcdTc1NGNcdTc1NGVcdTc1NGJcdTc1YWJcdTc1YTRcdTc1YTVcdTc1YTJcdTc1YTNcdTc2NzhcdTc2ODZcdTc2ODdcdTc2ODhcdTc2''@;'; put 'put ''YzhcdTc2YzZcdTc2YzNcdTc2YzVcdTc3MDFcdTc2ZjlcdTc2ZjhcdTc3MDlcdTc3MGJcdTc2ZmVcdTc2ZmNcdTc3MDdcdTc3ZGNcdTc4MDJcdTc4MTRcdTc4MGNcdTc4MGRcdTc5NDZcdTc5NDlcdTc5NDhcdTc5NDdcdTc5YjlcdTc5YmFcdTc5ZDFcdTc5ZDJcdTc5Y2JcdTdhN2ZcdTdhODFc''@;'; put 'put ''dTdhZmZcdTdhZmRcdTdjN2RcdTdkMDJcdTdkMDVcdTdkMDBcdTdkMDlcdTdkMDdcdTdkMDRcdTdkMDZcdTdmMzhcdTdmOGVcdTdmYmZcdTgwMDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sx''@;'; put 'put ''NzJdW2ddXT00NDAzMitnLHlbNDQwMzIrZ109X1sxNzJdW2ddKTtmb3IoX1sxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMTBcdTgwMGRcdTgwMTFcdTgwMzZcdTgwZDZcdTgwZTVcdTgwZGFcdTgwYzNcdTgwYzRcdTgwY2Nc''@;'; put 'put ''dTgwZTFcdTgwZGJcdTgwY2VcdTgwZGVcdTgwZTRcdTgwZGRcdTgxZjRcdTgyMjJcdTgyZTdcdTgzMDNcdTgzMDVcdTgyZTNcdTgyZGJcdTgyZTZcdTgzMDRcdTgyZTVcdTgzMDJcdTgzMDlcdTgyZDJcdTgyZDdcdTgyZjFcdTgzMDFcdTgyZGNcdTgyZDRcdTgyZDFcdTgyZGVcdTgyZDNcdTgy''@;'; put 'put ''ZGZcdTgyZWZcdTgzMDZcdTg2NTBcdTg2NzlcdTg2N2JcdTg2N2FcdTg4NGRcdTg4NmJcdTg5ODFcdTg5ZDRcdThhMDhcdThhMDJcdThhMDNcdThjOWVcdThjYTBcdThkNzRcdThkNzNcdThkYjRcdThlY2RcdThlY2NcdThmZjBcdThmZTZcdThmZTJcdThmZWFcdThmZTVcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmZWRcdThmZWJcdThmZTRcdThmZThcdTkwY2FcdTkwY2VcdTkwYzFcdTkwYzNcdTkxNGJcdTkxNGFcdTkxY2RcdTk1ODJcdTk2NTBcdTk2NGJcdTk2NGNcdTk2NGRcdTk3NjJcdTk3NjlcdTk3Y2JcdTk3ZWRcdTk3ZjNcdTk4MDFcdTk4YThc''@;'; put 'put ''dTk4ZGJcdTk4ZGZcdTk5OTZcdTk5OTlcdTRlNThcdTRlYjNcdTUwMGNcdTUwMGRcdTUwMjNcdTRmZWZcdTUwMjZcdTUwMjVcdTRmZjhcdTUwMjlcdTUwMTZcdTUwMDZcdTUwM2NcdTUwMWZcdTUwMWFcdTUwMTJcdTUwMTFcdTRmZmFcdTUwMDBcdTUwMTRcdTUwMjhcdTRmZjFcdTUwMjFcdTUw''@;'; put 'put ''MGJcdTUwMTlcdTUwMThcdTRmZjNcdTRmZWVcdTUwMmRcdTUwMmFcdTRmZmVcdTUwMmJcdTUwMDlcdTUxN2NcdTUxYTRcdTUxYTVcdTUxYTJcdTUxY2RcdTUxY2NcdTUxYzZcdTUxY2JcdTUyNTZcdTUyNWNcdTUyNTRcdTUyNWJcdTUyNWRcdTUzMmFcdTUzN2ZcdTUzOWZcdTUzOWRcdTUzZGZc''@;'; put 'put ''dTU0ZThcdTU1MTBcdTU1MDFcdTU1MzdcdTU0ZmNcdTU0ZTVcdTU0ZjJcdTU1MDZcdTU0ZmFcdTU1MTRcdTU0ZTlcdTU0ZWRcdTU0ZTFcdTU1MDlcdTU0ZWVcdTU0ZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3M11bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1sxNzNdW2ddXT00NDI4OCtnLHlbNDQyODgrZ109X1sxNzNdW2ddKTtmb3IoX1sxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0ZTZcdTU1MjdcdTU1MDdcdTU0ZmRcdTU1MGZcdTU3MDNcdTU3MDRcdTU3YzJc''@;'; put 'put ''dTU3ZDRcdTU3Y2JcdTU3YzNcdTU4MDlcdTU5MGZcdTU5NTdcdTU5NThcdTU5NWFcdTVhMTFcdTVhMThcdTVhMWNcdTVhMWZcdTVhMWJcdTVhMTNcdTU5ZWNcdTVhMjBcdTVhMjNcdTVhMjlcdTVhMjVcdTVhMGNcdTVhMDlcdTViNmJcdTVjNThcdTViYjBcdTViYjNcdTViYjZcdTViYjRcdTVi''@;'; put 'put ''YWVcdTViYjVcdTViYjlcdTViYjhcdTVjMDRcdTVjNTFcdTVjNTVcdTVjNTBcdTVjZWRcdTVjZmRcdTVjZmJcdTVjZWFcdTVjZThcdTVjZjBcdTVjZjZcdTVkMDFcdTVjZjRcdTVkZWVcdTVlMmRcdTVlMmJcdTVlYWJcdTVlYWRcdTVlYTdcdTVmMzFcdTVmOTJcdTVmOTFcdTVmOTBcdTYwNTlc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNjNcdTYwNjVcdTYwNTBcdTYwNTVcdTYwNmRcdTYwNjlcdTYwNmZcdTYwODRcdTYwOWZcdTYwOWFcdTYwOGRcdTYwOTRcdTYwOGNcdTYwODVcdTYwOTZcdTYyNDdcdTYyZjNcdTYzMDhcdTYyZmZcdTYzNGVcdTYzM2Vc''@;'; put 'put ''dTYzMmZcdTYzNTVcdTYzNDJcdTYzNDZcdTYzNGZcdTYzNDlcdTYzM2FcdTYzNTBcdTYzM2RcdTYzMmFcdTYzMmJcdTYzMjhcdTYzNGRcdTYzNGNcdTY1NDhcdTY1NDlcdTY1OTlcdTY1YzFcdTY1YzVcdTY2NDJcdTY2NDlcdTY2NGZcdTY2NDNcdTY2NTJcdTY2NGNcdTY2NDVcdTY2NDFcdTY2''@;'; put 'put ''ZjhcdTY3MTRcdTY3MTVcdTY3MTdcdTY4MjFcdTY4MzhcdTY4NDhcdTY4NDZcdTY4NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4YjNcdTY4MTdcdTY4NGNcdTY4NTFcdTY4M2RcdTY3ZjRcdTY4NTBcdTY4NDBcdTY4M2NcdTY4NDNcdTY4MmFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFc''@;'; put 'put ''dTZiOGFcdTZiODlcdTZiYjdcdTZjMjNcdTZjMjdcdTZjMjhcdTZjMjZcdTZjMjRcdTZjZjBcdTZkNmFcdTZkOTVcdTZkODhcdTZkODdcdTZkNjZcdTZkNzhcdTZkNzdcdTZkNTlcdTZkOTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3NF1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzRdW2ddXT00NDU0NCtnLHlbNDQ1NDQrZ109X1sxNzRdW2ddKTtmb3IoX1sxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmNcdTZkODlcdTZkNmVcdTZkNWFcdTZkNzRcdTZkNjlc''@;'; put 'put ''dTZkOGNcdTZkOGFcdTZkNzlcdTZkODVcdTZkNjVcdTZkOTRcdTcwY2FcdTcwZDhcdTcwZTRcdTcwZDlcdTcwYzhcdTcwY2ZcdTcyMzlcdTcyNzlcdTcyZmNcdTcyZjlcdTcyZmRcdTcyZjhcdTcyZjdcdTczODZcdTczZWRcdTc0MDlcdTczZWVcdTczZTBcdTczZWFcdTczZGVcdTc1NTRcdTc1''@;'; put 'put ''NWRcdTc1NWNcdTc1NWFcdTc1NTlcdTc1YmVcdTc1YzVcdTc1YzdcdTc1YjJcdTc1YjNcdTc1YmRcdTc1YmNcdTc1YjlcdTc1YzJcdTc1YjhcdTc2OGJcdTc2YjBcdTc2Y2FcdTc2Y2RcdTc2Y2VcdTc3MjlcdTc3MWZcdTc3MjBcdTc3MjhcdTc3ZTlcdTc4MzBcdTc4MjdcdTc4MzhcdTc4MWRc''@;'; put 'put ''dTc4MzRcdTc4MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4MjVcdTc4MmRcdTc4MjBcdTc4MWZcdTc4MzJcdTc5NTVcdTc5NTBcdTc5NjBcdTc5NWZcdTc5NTZcdTc5NWVcdTc5NWRcdTc5NTdcdTc5NWFcdTc5ZTRcdTc5ZTNcdTc5ZTdcdTc5ZGZcdTc5ZTZc''@;'; put 'put ''dTc5ZTlcdTc5ZDhcdTdhODRcdTdhODhcdTdhZDlcdTdiMDZcdTdiMTFcdTdjODlcdTdkMjFcdTdkMTdcdTdkMGJcdTdkMGFcdTdkMjBcdTdkMjJcdTdkMTRcdTdkMTBcdTdkMTVcdTdkMWFcdTdkMWNcdTdkMGRcdTdkMTlcdTdkMWJcdTdmM2FcdTdmNWZcdTdmOTRcdTdmYzVcdTdmYzFcdTgw''@;'; put 'put ''MDZcdTgwMThcdTgwMTVcdTgwMTlcdTgwMTdcdTgwM2RcdTgwM2ZcdTgwZjFcdTgxMDJcdTgwZjBcdTgxMDVcdTgwZWRcdTgwZjRcdTgxMDZcdTgwZjhcdTgwZjNcdTgxMDhcdTgwZmRcdTgxMGFcdTgwZmNcdTgwZWZcdTgxZWRcdTgxZWNcdTgyMDBcdTgyMTBcdTgyMmFcdTgyMmJcdTgyMjhc''@;'; put 'put ''dTgyMmNcdTgyYmJcdTgzMmJcdTgzNTJcdTgzNTRcdTgzNGFcdTgzMzhcdTgzNTBcdTgzNDlcdTgzMzVcdTgzMzRcdTgzNGZcdTgzMzJcdTgzMzlcdTgzMzZcdTgzMTdcdTgzNDBcdTgzMzFcdTgzMjhcdTgzNDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzVdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzE3NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzVdW2ddXT00NDgwMCtnLHlbNDQ4MDArZ109X1sxNzVdW2ddKTtmb3IoX1sxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2NTRcdTg2OGFcdTg2YWFcdTg2OTNc''@;'; put 'put ''dTg2YTRcdTg2YTlcdTg2OGNcdTg2YTNcdTg2OWNcdTg4NzBcdTg4NzdcdTg4ODFcdTg4ODJcdTg4N2RcdTg4NzlcdThhMThcdThhMTBcdThhMGVcdThhMGNcdThhMTVcdThhMGFcdThhMTdcdThhMTNcdThhMTZcdThhMGZcdThhMTFcdThjNDhcdThjN2FcdThjNzlcdThjYTFcdThjYTJcdThk''@;'; put 'put ''NzdcdThlYWNcdThlZDJcdThlZDRcdThlY2ZcdThmYjFcdTkwMDFcdTkwMDZcdThmZjdcdTkwMDBcdThmZmFcdThmZjRcdTkwMDNcdThmZmRcdTkwMDVcdThmZjhcdTkwOTVcdTkwZTFcdTkwZGRcdTkwZTJcdTkxNTJcdTkxNGRcdTkxNGNcdTkxZDhcdTkxZGRcdTkxZDdcdTkxZGNcdTkxZDlc''@;'; put 'put ''dTk1ODNcdTk2NjJcdTk2NjNcdTk2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NWJcdTk2NWRcdTk2NjRcdTk2NThcdTk2NWVcdTk2YmJcdTk4ZTJcdTk5YWNcdTlhYThcdTlhZDhcdTliMjVcdTliMzJcdTliM2NcdTRlN2VcdTUwN2FcdTUwN2RcdTUwNWNc''@;'; put 'put ''dTUwNDdcdTUwNDNcdTUwNGNcdTUwNWFcdTUwNDlcdTUwNjVcdTUwNzZcdTUwNGVcdTUwNTVcdTUwNzVcdTUwNzRcdTUwNzdcdTUwNGZcdTUwMGZcdTUwNmZcdTUwNmRcdTUxNWNcdTUxOTVcdTUxZjBcdTUyNmFcdTUyNmZcdTUyZDJcdTUyZDlcdTUyZDhcdTUyZDVcdTUzMTBcdTUzMGZcdTUz''@;'; put 'put ''MTlcdTUzM2ZcdTUzNDBcdTUzM2VcdTUzYzNcdTY2ZmNcdTU1NDZcdTU1NmFcdTU1NjZcdTU1NDRcdTU1NWVcdTU1NjFcdTU1NDNcdTU1NGFcdTU1MzFcdTU1NTZcdTU1NGZcdTU1NTVcdTU1MmZcdTU1NjRcdTU1MzhcdTU1MmVcdTU1NWNcdTU1MmNcdTU1NjNcdTU1MzNcdTU1NDFcdTU1NTdc''@;'; put 'put ''dTU3MDhcdTU3MGJcdTU3MDlcdTU3ZGZcdTU4MDVcdTU4MGFcdTU4MDZcdTU3ZTBcdTU3ZTRcdTU3ZmFcdTU4MDJcdTU4MzVcdTU3ZjdcdTU3ZjlcdTU5MjBcdTU5NjJcdTVhMzZcdTVhNDFcdTVhNDlcdTVhNjZcdTVhNmFcdTVhNDBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzZdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzE3Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzZdW2ddXT00NTA1NitnLHlbNDUwNTYrZ109X1sxNzZdW2ddKTtmb3IoX1sxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhM2NcdTVhNjJc''@;'; put 'put ''dTVhNWFcdTVhNDZcdTVhNGFcdTViNzBcdTViYzdcdTViYzVcdTViYzRcdTViYzJcdTViYmZcdTViYzZcdTVjMDlcdTVjMDhcdTVjMDdcdTVjNjBcdTVjNWNcdTVjNWRcdTVkMDdcdTVkMDZcdTVkMGVcdTVkMWJcdTVkMTZcdTVkMjJcdTVkMTFcdTVkMjlcdTVkMTRcdTVkMTlcdTVkMjRcdTVk''@;'; put 'put ''MjdcdTVkMTdcdTVkZTJcdTVlMzhcdTVlMzZcdTVlMzNcdTVlMzdcdTVlYjdcdTVlYjhcdTVlYjZcdTVlYjVcdTVlYmVcdTVmMzVcdTVmMzdcdTVmNTdcdTVmNmNcdTVmNjlcdTVmNmJcdTVmOTdcdTVmOTlcdTVmOWVcdTVmOThcdTVmYTFcdTVmYTBcdTVmOWNcdTYwN2ZcdTYwYTNcdTYwODlc''@;'; put 'put ''dTYwYTBcdTYwYThcdTYwY2JcdTYwYjRcdTYwZTZcdTYwYmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwYzVcdTYwYmJcdTYwYjVcdTYwZGNcdTYwYmNcdTYwZDhcdTYwZDVcdTYwYzZcdTYwZGZcdTYwYjhcdTYwZGFcdTYwYzdcdTYyMWFcdTYyMWJcdTYyNDhc''@;'; put 'put ''dTYzYTBcdTYzYTdcdTYzNzJcdTYzOTZcdTYzYTJcdTYzYTVcdTYzNzdcdTYzNjdcdTYzOThcdTYzYWFcdTYzNzFcdTYzYTlcdTYzODlcdTYzODNcdTYzOWJcdTYzNmJcdTYzYThcdTYzODRcdTYzODhcdTYzOTlcdTYzYTFcdTYzYWNcdTYzOTJcdTYzOGZcdTYzODBcdTYzN2JcdTYzNjlcdTYz''@;'; put 'put ''NjhcdTYzN2FcdTY1NWRcdTY1NTZcdTY1NTFcdTY1NTlcdTY1NTdcdTU1NWZcdTY1NGZcdTY1NThcdTY1NTVcdTY1NTRcdTY1OWNcdTY1OWJcdTY1YWNcdTY1Y2ZcdTY1Y2JcdTY1Y2NcdTY1Y2VcdTY2NWRcdTY2NWFcdTY2NjRcdTY2NjhcdTY2NjZcdTY2NWVcdTY2ZjlcdTUyZDdcdTY3MWJc''@;'; put 'put ''dTY4ODFcdTY4YWZcdTY4YTJcdTY4OTNcdTY4YjVcdTY4N2ZcdTY4NzZcdTY4YjFcdTY4YTdcdTY4OTdcdTY4YjBcdTY4ODNcdTY4YzRcdTY4YWRcdTY4ODZcdTY4ODVcdTY4OTRcdTY4OWRcdTY4YThcdTY4OWZcdTY4YTFcdTY4ODJcdTZiMzJcdTZiYmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1sxNzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzddW2ddXT00NTMxMitnLHlbNDUzMTIrZ109X1sxNzddW2ddKTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTZiZWJcdTZiZWNcdTZjMmJcdTZkOGVcdTZkYmNcdTZkZjNcdTZkZDlcdTZkYjJcdTZkZTFcdTZkY2NcdTZkZTRcdTZkZmJcdTZkZmFcdTZlMDVcdTZkYzdcdTZkY2JcdTZkYWZcdTZkZDFcdTZkYWVcdTZkZGVcdTZkZjlcdTZkYjhcdTZkZjdcdTZkZjVcdTZkYzVcdTZkZDJcdTZlMWFcdTZk''@;'; put 'put ''YjVcdTZkZGFcdTZkZWJcdTZkZDhcdTZkZWFcdTZkZjFcdTZkZWVcdTZkZThcdTZkYzZcdTZkYzRcdTZkYWFcdTZkZWNcdTZkYmZcdTZkZTZcdTcwZjlcdTcxMDlcdTcxMGFcdTcwZmRcdTcwZWZcdTcyM2RcdTcyN2RcdTcyODFcdTczMWNcdTczMWJcdTczMTZcdTczMTNcdTczMTlcdTczODdc''@;'; put 'put ''dTc0MDVcdTc0MGFcdTc0MDNcdTc0MDZcdTczZmVcdTc0MGRcdTc0ZTBcdTc0ZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZjdcdTc1MWNcdTc1MjJcdTc1NjVcdTc1NjZcdTc1NjJcdTc1NzBcdTc1OGZcdTc1ZDRcdTc1ZDVcdTc1YjVcdTc1Y2FcdTc1Y2Rc''@;'; put 'put ''dTc2OGVcdTc2ZDRcdTc2ZDJcdTc2ZGJcdTc3MzdcdTc3M2VcdTc3M2NcdTc3MzZcdTc3MzhcdTc3M2FcdTc4NmJcdTc4NDNcdTc4NGVcdTc5NjVcdTc5NjhcdTc5NmRcdTc5ZmJcdTdhOTJcdTdhOTVcdTdiMjBcdTdiMjhcdTdiMWJcdTdiMmNcdTdiMjZcdTdiMTlcdTdiMWVcdTdiMmVcdTdj''@;'; put 'put ''OTJcdTdjOTdcdTdjOTVcdTdkNDZcdTdkNDNcdTdkNzFcdTdkMmVcdTdkMzlcdTdkM2NcdTdkNDBcdTdkMzBcdTdkMzNcdTdkNDRcdTdkMmZcdTdkNDJcdTdkMzJcdTdkMzFcdTdmM2RcdTdmOWVcdTdmOWFcdTdmY2NcdTdmY2VcdTdmZDJcdTgwMWNcdTgwNGFcdTgwNDZcdTgxMmZcdTgxMTZc''@;'; put 'put ''dTgxMjNcdTgxMmJcdTgxMjlcdTgxMzBcdTgxMjRcdTgyMDJcdTgyMzVcdTgyMzdcdTgyMzZcdTgyMzlcdTgzOGVcdTgzOWVcdTgzOThcdTgzNzhcdTgzYTJcdTgzOTZcdTgzYmRcdTgzYWJcdTgzOTJcdTgzOGFcdTgzOTNcdTgzODlcdTgzYTBcdTgzNzdcdTgzN2JcdTgzN2NcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1sxNzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzhdW2ddXT00NTU2OCtnLHlbNDU1NjgrZ109X1sxNzhdW2ddKTtmb3IoX1sxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTgzODZcdTgzYTdcdTg2NTVcdTVmNmFcdTg2YzdcdTg2YzBcdTg2YjZcdTg2YzRcdTg2YjVcdTg2YzZcdTg2Y2JcdTg2YjFcdTg2YWZcdTg2YzlcdTg4NTNcdTg4OWVcdTg4ODhcdTg4YWJcdTg4OTJcdTg4OTZcdTg4OGRcdTg4OGJcdTg5OTNcdTg5OGZcdThhMmFcdThh''@;'; put 'put ''MWRcdThhMjNcdThhMjVcdThhMzFcdThhMmRcdThhMWZcdThhMWJcdThhMjJcdThjNDlcdThjNWFcdThjYTlcdThjYWNcdThjYWJcdThjYThcdThjYWFcdThjYTdcdThkNjdcdThkNjZcdThkYmVcdThkYmFcdThlZGJcdThlZGZcdTkwMTlcdTkwMGRcdTkwMWFcdTkwMTdcdTkwMjNcdTkwMWZc''@;'; put 'put ''dTkwMWRcdTkwMTBcdTkwMTVcdTkwMWVcdTkwMjBcdTkwMGZcdTkwMjJcdTkwMTZcdTkwMWJcdTkwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwZThcdTkwZWRcdTkwZmRcdTkxNTdcdTkxY2VcdTkxZjVcdTkxZTZcdTkxZTNcdTkxZTdcdTkxZWRcdTkxZTlc''@;'; put 'put ''dTk1ODlcdTk2NmFcdTk2NzVcdTk2NzNcdTk2NzhcdTk2NzBcdTk2NzRcdTk2NzZcdTk2NzdcdTk2NmNcdTk2YzBcdTk2ZWFcdTk2ZTlcdTdhZTBcdTdhZGZcdTk4MDJcdTk4MDNcdTliNWFcdTljZTVcdTllNzVcdTllN2ZcdTllYTVcdTllYmJcdTUwYTJcdTUwOGRcdTUwODVcdTUwOTlcdTUw''@;'; put 'put ''OTFcdTUwODBcdTUwOTZcdTUwOThcdTUwOWFcdTY3MDBcdTUxZjFcdTUyNzJcdTUyNzRcdTUyNzVcdTUyNjlcdTUyZGVcdTUyZGRcdTUyZGJcdTUzNWFcdTUzYTVcdTU1N2JcdTU1ODBcdTU1YTdcdTU1N2NcdTU1OGFcdTU1OWRcdTU1OThcdTU1ODJcdTU1OWNcdTU1YWFcdTU1OTRcdTU1ODdc''@;'; put 'put ''dTU1OGJcdTU1ODNcdTU1YjNcdTU1YWVcdTU1OWZcdTU1M2VcdTU1YjJcdTU1OWFcdTU1YmJcdTU1YWNcdTU1YjFcdTU1N2VcdTU1ODlcdTU1YWJcdTU1OTlcdTU3MGRcdTU4MmZcdTU4MmFcdTU4MzRcdTU4MjRcdTU4MzBcdTU4MzFcdTU4MjFcdTU4MWRcdTU4MjBcdTU4ZjlcdTU4ZmFcdTU5''@;'; put 'put ''NjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzldW2ddXT00NTgyNCtnLHlbNDU4MjQrZ109X1sxNzldW2ddKTtmb3IoX1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNzdcdTVhOWFcdTVhN2ZcdTVhOTJcdTVhOWJcdTVhYTdcdTViNzNcdTViNzFcdTViZDJcdTViY2NcdTViZDNcdTViZDBcdTVjMGFcdTVjMGJcdTVjMzFcdTVkNGNcdTVkNTBcdTVkMzRcdTVkNDdcdTVkZmRcdTVlNDVcdTVlM2RcdTVlNDBcdTVl''@;'; put 'put ''NDNcdTVlN2VcdTVlY2FcdTVlYzFcdTVlYzJcdTVlYzRcdTVmM2NcdTVmNmRcdTVmYTlcdTVmYWFcdTVmYThcdTYwZDFcdTYwZTFcdTYwYjJcdTYwYjZcdTYwZTBcdTYxMWNcdTYxMjNcdTYwZmFcdTYxMTVcdTYwZjBcdTYwZmJcdTYwZjRcdTYxNjhcdTYwZjFcdTYxMGVcdTYwZjZcdTYxMDlc''@;'; put 'put ''dTYxMDBcdTYxMTJcdTYyMWZcdTYyNDlcdTYzYTNcdTYzOGNcdTYzY2ZcdTYzYzBcdTYzZTlcdTYzYzlcdTYzYzZcdTYzY2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzZDJcdTYzZTNcdTYzZDBcdTYzZTFcdTYzZDZcdTYzZWRcdTYzZWVcdTYzNzZcdTYzZjRc''@;'; put 'put ''dTYzZWFcdTYzZGJcdTY0NTJcdTYzZGFcdTYzZjlcdTY1NWVcdTY1NjZcdTY1NjJcdTY1NjNcdTY1OTFcdTY1OTBcdTY1YWZcdTY2NmVcdTY2NzBcdTY2NzRcdTY2NzZcdTY2NmZcdTY2OTFcdTY2N2FcdTY2N2VcdTY2NzdcdTY2ZmVcdTY2ZmZcdTY3MWZcdTY3MWRcdTY4ZmFcdTY4ZDVcdTY4''@;'; put 'put ''ZTBcdTY4ZDhcdTY4ZDdcdTY5MDVcdTY4ZGZcdTY4ZjVcdTY4ZWVcdTY4ZTdcdTY4ZjlcdTY4ZDJcdTY4ZjJcdTY4ZTNcdTY4Y2JcdTY4Y2RcdTY5MGRcdTY5MTJcdTY5MGVcdTY4YzlcdTY4ZGFcdTY5NmVcdTY4ZmJcdTZiM2VcdTZiM2FcdTZiM2RcdTZiOThcdTZiOTZcdTZiYmNcdTZiZWZc''@;'; put 'put ''dTZjMmVcdTZjMmZcdTZjMmNcdTZlMmZcdTZlMzhcdTZlNTRcdTZlMjFcdTZlMzJcdTZlNjdcdTZlNGFcdTZlMjBcdTZlMjVcdTZlMjNcdTZlMWJcdTZlNWJcdTZlNThcdTZlMjRcdTZlNTZcdTZlNmVcdTZlMmRcdTZlMjZcdTZlNmZcdTZlMzRcdTZlNGRcdTZlM2FcdTZlMmNcdTZlNDNcdTZl''@;'; put 'put ''MWRcdTZlM2VcdTZlY2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODBdW2ddXT00NjA4MCtnLHlbNDYwODArZ109X1sxODBdW2ddKTtmb3IoX1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlODlcdTZlMTlcdTZlNGVcdTZlNjNcdTZlNDRcdTZlNzJcdTZlNjlcdTZlNWZcdTcxMTlcdTcxMWFcdTcxMjZcdTcxMzBcdTcxMjFcdTcxMzZcdTcxNmVcdTcxMWNcdTcyNGNcdTcyODRcdTcyODBcdTczMzZcdTczMjVcdTcz''@;'; put 'put ''MzRcdTczMjlcdTc0M2FcdTc0MmFcdTc0MzNcdTc0MjJcdTc0MjVcdTc0MzVcdTc0MzZcdTc0MzRcdTc0MmZcdTc0MWJcdTc0MjZcdTc0MjhcdTc1MjVcdTc1MjZcdTc1NmJcdTc1NmFcdTc1ZTJcdTc1ZGJcdTc1ZTNcdTc1ZDlcdTc1ZDhcdTc1ZGVcdTc1ZTBcdTc2N2JcdTc2N2NcdTc2OTZc''@;'; put 'put ''dTc2OTNcdTc2YjRcdTc2ZGNcdTc3NGZcdTc3ZWRcdTc4NWRcdTc4NmNcdTc4NmZcdTdhMGRcdTdhMDhcdTdhMGJcdTdhMDVcdTdhMDBcdTdhOThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhOTdcdTdhOTZcdTdhZTVcdTdhZTNcdTdiNDlcdTdiNTZcdTdiNDZc''@;'; put 'put ''dTdiNTBcdTdiNTJcdTdiNTRcdTdiNGRcdTdiNGJcdTdiNGZcdTdiNTFcdTdjOWZcdTdjYTVcdTdkNWVcdTdkNTBcdTdkNjhcdTdkNTVcdTdkMmJcdTdkNmVcdTdkNzJcdTdkNjFcdTdkNjZcdTdkNjJcdTdkNzBcdTdkNzNcdTU1ODRcdTdmZDRcdTdmZDVcdTgwMGJcdTgwNTJcdTgwODVcdTgx''@;'; put 'put ''NTVcdTgxNTRcdTgxNGJcdTgxNTFcdTgxNGVcdTgxMzlcdTgxNDZcdTgxM2VcdTgxNGNcdTgxNTNcdTgxNzRcdTgyMTJcdTgyMWNcdTgzZTlcdTg0MDNcdTgzZjhcdTg0MGRcdTgzZTBcdTgzYzVcdTg0MGJcdTgzYzFcdTgzZWZcdTgzZjFcdTgzZjRcdTg0NTdcdTg0MGFcdTgzZjBcdTg0MGNc''@;'; put 'put ''dTgzY2NcdTgzZmRcdTgzZjJcdTgzY2FcdTg0MzhcdTg0MGVcdTg0MDRcdTgzZGNcdTg0MDdcdTgzZDRcdTgzZGZcdTg2NWJcdTg2ZGZcdTg2ZDlcdTg2ZWRcdTg2ZDRcdTg2ZGJcdTg2ZTRcdTg2ZDBcdTg2ZGVcdTg4NTdcdTg4YzFcdTg4YzJcdTg4YjFcdTg5ODNcdTg5OTZcdThhM2JcdThh''@;'; put 'put ''NjBcdThhNTVcdThhNWVcdThhM2NcdThhNDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODFdW2ddXT00NjMzNitnLHlbNDYzMzYrZ109X1sxODFdW2ddKTtmb3IoX1sxODJdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhNTRcdThhNWJcdThhNTBcdThhNDZcdThhMzRcdThhM2FcdThhMzZcdThhNTZcdThjNjFcdThjODJcdThjYWZcdThjYmNcdThjYjNcdThjYmRcdThjYzFcdThjYmJcdThjYzBcdThjYjRcdThjYjdcdThj''@;'; put 'put ''YjZcdThjYmZcdThjYjhcdThkOGFcdThkODVcdThkODFcdThkY2VcdThkZGRcdThkY2JcdThkZGFcdThkZDFcdThkY2NcdThkZGJcdThkYzZcdThlZmJcdThlZjhcdThlZmNcdThmOWNcdTkwMmVcdTkwMzVcdTkwMzFcdTkwMzhcdTkwMzJcdTkwMzZcdTkxMDJcdTkwZjVcdTkxMDlcdTkwZmVc''@;'; put 'put ''dTkxNjNcdTkxNjVcdTkxY2ZcdTkyMTRcdTkyMTVcdTkyMjNcdTkyMDlcdTkyMWVcdTkyMGRcdTkyMTBcdTkyMDdcdTkyMTFcdTk1OTRcdTk1OGZcdTk1OGJcdTk1OTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1OTNcdTk1OTJcdTk1OGVcdTk2OGFcdTk2OGVc''@;'; put 'put ''dTk2OGJcdTk2N2RcdTk2ODVcdTk2ODZcdTk2OGRcdTk2NzJcdTk2ODRcdTk2YzFcdTk2YzVcdTk2YzRcdTk2YzZcdTk2YzdcdTk2ZWZcdTk2ZjJcdTk3Y2NcdTk4MDVcdTk4MDZcdTk4MDhcdTk4ZTdcdTk4ZWFcdTk4ZWZcdTk4ZTlcdTk4ZjJcdTk4ZWRcdTk5YWVcdTk5YWRcdTllYzNcdTll''@;'; put 'put ''Y2RcdTllZDFcdTRlODJcdTUwYWRcdTUwYjVcdTUwYjJcdTUwYjNcdTUwYzVcdTUwYmVcdTUwYWNcdTUwYjdcdTUwYmJcdTUwYWZcdTUwYzdcdTUyN2ZcdTUyNzdcdTUyN2RcdTUyZGZcdTUyZTZcdTUyZTRcdTUyZTJcdTUyZTNcdTUzMmZcdTU1ZGZcdTU1ZThcdTU1ZDNcdTU1ZTZcdTU1Y2Vc''@;'; put 'put ''dTU1ZGNcdTU1YzdcdTU1ZDFcdTU1ZTNcdTU1ZTRcdTU1ZWZcdTU1ZGFcdTU1ZTFcdTU1YzVcdTU1YzZcdTU1ZTVcdTU1YzlcdTU3MTJcdTU3MTNcdTU4NWVcdTU4NTFcdTU4NThcdTU4NTdcdTU4NWFcdTU4NTRcdTU4NmJcdTU4NGNcdTU4NmRcdTU4NGFcdTU4NjJcdTU4NTJcdTU4NGJcdTU5''@;'; put 'put ''NjdcdTVhYzFcdTVhYzlcdTVhY2NcdTVhYmVcdTVhYmRcdTVhYmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODJdW2ddXT00NjU5MitnLHlbNDY1OTIrZ109X1sxODJdW2ddKTtmb3IoX1sx''@;'; put 'put ''ODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjNcdTVhYzJcdTVhYjJcdTVkNjlcdTVkNmZcdTVlNGNcdTVlNzlcdTVlYzlcdTVlYzhcdTVmMTJcdTVmNTlcdTVmYWNcdTVmYWVcdTYxMWFcdTYxMGZcdTYxNDhcdTYxMWZcdTYw''@;'; put 'put ''ZjNcdTYxMWJcdTYwZjlcdTYxMDFcdTYxMDhcdTYxNGVcdTYxNGNcdTYxNDRcdTYxNGRcdTYxM2VcdTYxMzRcdTYxMjdcdTYxMGRcdTYxMDZcdTYxMzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0M2VcdTY0MWVcdTY0MmFcdTY0MmRcdTY0M2RcdTY0MmNcdTY0MGZcdTY0MWNcdTY0MTRcdTY0MGRc''@;'; put 'put ''dTY0MzZcdTY0MTZcdTY0MTdcdTY0MDZcdTY1NmNcdTY1OWZcdTY1YjBcdTY2OTdcdTY2ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2OThcdTY2OGRcdTY3MDNcdTY5OTRcdTY5NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NWFcdTY5NzdcdTY5NjBc''@;'; put 'put ''dTY5NTRcdTY5NzVcdTY5MzBcdTY5ODJcdTY5NGFcdTY5NjhcdTY5NmJcdTY5NWVcdTY5NTNcdTY5NzlcdTY5ODZcdTY5NWRcdTY5NjNcdTY5NWJcdTZiNDdcdTZiNzJcdTZiYzBcdTZiYmZcdTZiZDNcdTZiZmRcdTZlYTJcdTZlYWZcdTZlZDNcdTZlYjZcdTZlYzJcdTZlOTBcdTZlOWRcdTZl''@;'; put 'put ''YzdcdTZlYzVcdTZlYTVcdTZlOThcdTZlYmNcdTZlYmFcdTZlYWJcdTZlZDFcdTZlOTZcdTZlOWNcdTZlYzRcdTZlZDRcdTZlYWFcdTZlYTdcdTZlYjRcdTcxNGVcdTcxNTlcdTcxNjlcdTcxNjRcdTcxNDlcdTcxNjdcdTcxNWNcdTcxNmNcdTcxNjZcdTcxNGNcdTcxNjVcdTcxNWVcdTcxNDZc''@;'; put 'put ''dTcxNjhcdTcxNTZcdTcyM2FcdTcyNTJcdTczMzdcdTczNDVcdTczM2ZcdTczM2VcdTc0NmZcdTc0NWFcdTc0NTVcdTc0NWZcdTc0NWVcdTc0NDFcdTc0M2ZcdTc0NTlcdTc0NWJcdTc0NWNcdTc1NzZcdTc1NzhcdTc2MDBcdTc1ZjBcdTc2MDFcdTc1ZjJcdTc1ZjFcdTc1ZmFcdTc1ZmZcdTc1''@;'; put 'put ''ZjRcdTc1ZjNcdTc2ZGVcdTc2ZGZcdTc3NWJcdTc3NmJcdTc3NjZcdTc3NWVcdTc3NjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODNdW2ddXT00Njg0OCtnLHlbNDY4NDgrZ109X1sxODNd''@;'; put 'put ''W2ddKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NzlcdTc3NmFcdTc3NmNcdTc3NWNcdTc3NjVcdTc3NjhcdTc3NjJcdTc3ZWVcdTc4OGVcdTc4YjBcdTc4OTdcdTc4OThcdTc4OGNcdTc4ODlcdTc4N2NcdTc4''@;'; put 'put ''OTFcdTc4OTNcdTc4N2ZcdTc5N2FcdTc5N2ZcdTc5ODFcdTg0MmNcdTc5YmRcdTdhMWNcdTdhMWFcdTdhMjBcdTdhMTRcdTdhMWZcdTdhMWVcdTdhOWZcdTdhYTBcdTdiNzdcdTdiYzBcdTdiNjBcdTdiNmVcdTdiNjdcdTdjYjFcdTdjYjNcdTdjYjVcdTdkOTNcdTdkNzlcdTdkOTFcdTdkODFc''@;'; put 'put ''dTdkOGZcdTdkNWJcdTdmNmVcdTdmNjlcdTdmNmFcdTdmNzJcdTdmYTlcdTdmYThcdTdmYTRcdTgwNTZcdTgwNThcdTgwODZcdTgwODRcdTgxNzFcdTgxNzBcdTgxNzhcdTgxNjVcdTgxNmVcdTgxNzNcdTgxNmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNzlc''@;'; put 'put ''dTgxN2FcdTgxNjZcdTgyMDVcdTgyNDdcdTg0ODJcdTg0NzdcdTg0M2RcdTg0MzFcdTg0NzVcdTg0NjZcdTg0NmJcdTg0NDlcdTg0NmNcdTg0NWJcdTg0M2NcdTg0MzVcdTg0NjFcdTg0NjNcdTg0NjlcdTg0NmRcdTg0NDZcdTg2NWVcdTg2NWNcdTg2NWZcdTg2ZjlcdTg3MTNcdTg3MDhcdTg3''@;'; put 'put ''MDdcdTg3MDBcdTg2ZmVcdTg2ZmJcdTg3MDJcdTg3MDNcdTg3MDZcdTg3MGFcdTg4NTlcdTg4ZGZcdTg4ZDRcdTg4ZDlcdTg4ZGNcdTg4ZDhcdTg4ZGRcdTg4ZTFcdTg4Y2FcdTg4ZDVcdTg4ZDJcdTg5OWNcdTg5ZTNcdThhNmJcdThhNzJcdThhNzNcdThhNjZcdThhNjlcdThhNzBcdThhODdc''@;'; put 'put ''dThhN2NcdThhNjNcdThhYTBcdThhNzFcdThhODVcdThhNmRcdThhNjJcdThhNmVcdThhNmNcdThhNzlcdThhN2JcdThhM2VcdThhNjhcdThjNjJcdThjOGFcdThjODlcdThjY2FcdThjYzdcdThjYzhcdThjYzRcdThjYjJcdThjYzNcdThjYzJcdThjYzVcdThkZTFcdThkZGZcdThkZThcdThk''@;'; put 'put ''ZWZcdThkZjNcdThkZmFcdThkZWFcdThkZTRcdThkZTZcdThlYjJcdThmMDNcdThmMDlcdThlZmVcdThmMGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODRdW2ddXT00NzEwNCtnLHlbNDcx''@;'; put 'put ''MDQrZ109X1sxODRdW2ddKTtmb3IoX1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOWZcdThmYjJcdTkwNGJcdTkwNGFcdTkwNTNcdTkwNDJcdTkwNTRcdTkwM2NcdTkwNTVcdTkwNTBcdTkwNDdcdTkwNGZcdTkwNGVcdTkw''@;'; put 'put ''NGRcdTkwNTFcdTkwM2VcdTkwNDFcdTkxMTJcdTkxMTdcdTkxNmNcdTkxNmFcdTkxNjlcdTkxYzlcdTkyMzdcdTkyNTdcdTkyMzhcdTkyM2RcdTkyNDBcdTkyM2VcdTkyNWJcdTkyNGJcdTkyNjRcdTkyNTFcdTkyMzRcdTkyNDlcdTkyNGRcdTkyNDVcdTkyMzlcdTkyM2ZcdTkyNWFcdTk1OThc''@;'; put 'put ''dTk2OThcdTk2OTRcdTk2OTVcdTk2Y2RcdTk2Y2JcdTk2YzlcdTk2Y2FcdTk2ZjdcdTk2ZmJcdTk2ZjlcdTk2ZjZcdTk3NTZcdTk3NzRcdTk3NzZcdTk4MTBcdTk4MTFcdTk4MTNcdTk4MGFcdTk4MTJcdTk4MGNcdTk4ZmNcdTk4ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTk4ZmRcdTk4ZmVcdTk5YjNcdTk5YjFcdTk5YjRcdTlhZTFcdTljZTlcdTllODJcdTlmMGVcdTlmMTNcdTlmMjBcdTUwZTdcdTUwZWVcdTUwZTVcdTUwZDZcdTUwZWRcdTUwZGFcdTUwZDVcdTUwY2ZcdTUwZDFcdTUwZjFcdTUwY2VcdTUwZTlcdTUxNjJcdTUxZjNcdTUyODNcdTUy''@;'; put 'put ''ODJcdTUzMzFcdTUzYWRcdTU1ZmVcdTU2MDBcdTU2MWJcdTU2MTdcdTU1ZmRcdTU2MTRcdTU2MDZcdTU2MDlcdTU2MGRcdTU2MGVcdTU1ZjdcdTU2MTZcdTU2MWZcdTU2MDhcdTU2MTBcdTU1ZjZcdTU3MThcdTU3MTZcdTU4NzVcdTU4N2VcdTU4ODNcdTU4OTNcdTU4OGFcdTU4NzlcdTU4ODVc''@;'; put 'put ''dTU4N2RcdTU4ZmRcdTU5MjVcdTU5MjJcdTU5MjRcdTU5NmFcdTU5NjlcdTVhZTFcdTVhZTZcdTVhZTlcdTVhZDdcdTVhZDZcdTVhZDhcdTVhZTNcdTViNzVcdTViZGVcdTViZTdcdTViZTFcdTViZTVcdTViZTZcdTViZThcdTViZTJcdTViZTRcdTViZGZcdTVjMGRcdTVjNjJcdTVkODRcdTVk''@;'; put 'put ''ODdcdTVlNWJcdTVlNjNcdTVlNTVcdTVlNTdcdTVlNTRcdTVlZDNcdTVlZDZcdTVmMGFcdTVmNDZcdTVmNzBcdTVmYjlcdTYxNDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODVdW2ddXT00''@;'; put 'put ''NzM2MCtnLHlbNDczNjArZ109X1sxODVdW2ddKTtmb3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxM2ZcdTYxNGJcdTYxNzdcdTYxNjJcdTYxNjNcdTYxNWZcdTYxNWFcdTYxNThcdTYxNzVcdTYyMmFcdTY0ODdcdTY0''@;'; put 'put ''NThcdTY0NTRcdTY0YTRcdTY0NzhcdTY0NWZcdTY0N2FcdTY0NTFcdTY0NjdcdTY0MzRcdTY0NmRcdTY0N2JcdTY1NzJcdTY1YTFcdTY1ZDdcdTY1ZDZcdTY2YTJcdTY2YThcdTY2OWRcdTY5OWNcdTY5YThcdTY5OTVcdTY5YzFcdTY5YWVcdTY5ZDNcdTY5Y2JcdTY5OWJcdTY5YjdcdTY5YmJc''@;'; put 'put ''dTY5YWJcdTY5YjRcdTY5ZDBcdTY5Y2RcdTY5YWRcdTY5Y2NcdTY5YTZcdTY5YzNcdTY5YTNcdTZiNDlcdTZiNGNcdTZjMzNcdTZmMzNcdTZmMTRcdTZlZmVcdTZmMTNcdTZlZjRcdTZmMjlcdTZmM2VcdTZmMjBcdTZmMmNcdTZmMGZcdTZmMDJcdTZmMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTZlZmZcdTZlZWZcdTZmMDZcdTZmMzFcdTZmMzhcdTZmMzJcdTZmMjNcdTZmMTVcdTZmMmJcdTZmMmZcdTZmODhcdTZmMmFcdTZlZWNcdTZmMDFcdTZlZjJcdTZlY2NcdTZlZjdcdTcxOTRcdTcxOTlcdTcxN2RcdTcxOGFcdTcxODRcdTcxOTJcdTcyM2VcdTcy''@;'; put 'put ''OTJcdTcyOTZcdTczNDRcdTczNTBcdTc0NjRcdTc0NjNcdTc0NmFcdTc0NzBcdTc0NmRcdTc1MDRcdTc1OTFcdTc2MjdcdTc2MGRcdTc2MGJcdTc2MDlcdTc2MTNcdTc2ZTFcdTc2ZTNcdTc3ODRcdTc3N2RcdTc3N2ZcdTc3NjFcdTc4YzFcdTc4OWZcdTc4YTdcdTc4YjNcdTc4YTlcdTc4YTNc''@;'; put 'put ''dTc5OGVcdTc5OGZcdTc5OGRcdTdhMmVcdTdhMzFcdTdhYWFcdTdhYTlcdTdhZWRcdTdhZWZcdTdiYTFcdTdiOTVcdTdiOGJcdTdiNzVcdTdiOTdcdTdiOWRcdTdiOTRcdTdiOGZcdTdiYjhcdTdiODdcdTdiODRcdTdjYjlcdTdjYmRcdTdjYmVcdTdkYmJcdTdkYjBcdTdkOWNcdTdkYmRcdTdk''@;'; put 'put ''YmVcdTdkYTBcdTdkY2FcdTdkYjRcdTdkYjJcdTdkYjFcdTdkYmFcdTdkYTJcdTdkYmZcdTdkYjVcdTdkYjhcdTdkYWRcdTdkZDJcdTdkYzdcdTdkYWNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1sxODZdW2ddXT00NzYxNitnLHlbNDc2MTYrZ109X1sxODZdW2ddKTtmb3IoX1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNzBcdTdmZTBcdTdmZTFcdTdmZGZcdTgwNWVcdTgwNWFcdTgwODdcdTgxNTBcdTgxODBcdTgx''@;'; put 'put ''OGZcdTgxODhcdTgxOGFcdTgxN2ZcdTgxODJcdTgxZTdcdTgxZmFcdTgyMDdcdTgyMTRcdTgyMWVcdTgyNGJcdTg0YzlcdTg0YmZcdTg0YzZcdTg0YzRcdTg0OTlcdTg0OWVcdTg0YjJcdTg0OWNcdTg0Y2JcdTg0YjhcdTg0YzBcdTg0ZDNcdTg0OTBcdTg0YmNcdTg0ZDFcdTg0Y2FcdTg3M2Zc''@;'; put 'put ''dTg3MWNcdTg3M2JcdTg3MjJcdTg3MjVcdTg3MzRcdTg3MThcdTg3NTVcdTg3MzdcdTg3MjlcdTg4ZjNcdTg5MDJcdTg4ZjRcdTg4ZjlcdTg4ZjhcdTg4ZmRcdTg4ZThcdTg5MWFcdTg4ZWZcdThhYTZcdThhOGNcdThhOWVcdThhYTNcdThhOGRcdThhYTFcdThhOTNcdThhYTRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhYWFcdThhYTVcdThhYThcdThhOThcdThhOTFcdThhOWFcdThhYTdcdThjNmFcdThjOGRcdThjOGNcdThjZDNcdThjZDFcdThjZDJcdThkNmJcdThkOTlcdThkOTVcdThkZmNcdThmMTRcdThmMTJcdThmMTVcdThmMTNcdThmYTNcdTkw''@;'; put 'put ''NjBcdTkwNThcdTkwNWNcdTkwNjNcdTkwNTlcdTkwNWVcdTkwNjJcdTkwNWRcdTkwNWJcdTkxMTlcdTkxMThcdTkxMWVcdTkxNzVcdTkxNzhcdTkxNzdcdTkxNzRcdTkyNzhcdTkyODBcdTkyODVcdTkyOThcdTkyOTZcdTkyN2JcdTkyOTNcdTkyOWNcdTkyYThcdTkyN2NcdTkyOTFcdTk1YTFc''@;'; put 'put ''dTk1YThcdTk1YTlcdTk1YTNcdTk1YTVcdTk1YTRcdTk2OTlcdTk2OWNcdTk2OWJcdTk2Y2NcdTk2ZDJcdTk3MDBcdTk3N2NcdTk3ODVcdTk3ZjZcdTk4MTdcdTk4MThcdTk4YWZcdTk4YjFcdTk5MDNcdTk5MDVcdTk5MGNcdTk5MDlcdTk5YzFcdTlhYWZcdTlhYjBcdTlhZTZcdTliNDFcdTli''@;'; put 'put ''NDJcdTljZjRcdTljZjZcdTljZjNcdTllYmNcdTlmM2JcdTlmNGFcdTUxMDRcdTUxMDBcdTUwZmJcdTUwZjVcdTUwZjlcdTUxMDJcdTUxMDhcdTUxMDlcdTUxMDVcdTUxZGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4N11bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1sxODddW2ddXT00Nzg3MitnLHlbNDc4NzIrZ109X1sxODddW2ddKTtmb3IoX1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUyODdcdTUyODhcdTUyODlcdTUyOGRcdTUyOGFcdTUyZjBcdTUzYjJcdTU2''@;'; put 'put ''MmVcdTU2M2JcdTU2MzlcdTU2MzJcdTU2M2ZcdTU2MzRcdTU2MjlcdTU2NTNcdTU2NGVcdTU2NTdcdTU2NzRcdTU2MzZcdTU2MmZcdTU2MzBcdTU4ODBcdTU4OWZcdTU4OWVcdTU4YjNcdTU4OWNcdTU4YWVcdTU4YTlcdTU4YTZcdTU5NmRcdTViMDlcdTVhZmJcdTViMGJcdTVhZjVcdTViMGNc''@;'; put 'put ''dTViMDhcdTViZWVcdTViZWNcdTViZTlcdTViZWJcdTVjNjRcdTVjNjVcdTVkOWRcdTVkOTRcdTVlNjJcdTVlNWZcdTVlNjFcdTVlZTJcdTVlZGFcdTVlZGZcdTVlZGRcdTVlZTNcdTVlZTBcdTVmNDhcdTVmNzFcdTVmYjdcdTVmYjVcdTYxNzZcdTYxNjdcdTYxNmVcdTYxNWRcdTYxNTVcdTYx''@;'; put 'put ''ODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxN2NcdTYxNzBcdTYxNmJcdTYxN2VcdTYxYTdcdTYxOTBcdTYxYWJcdTYxOGVcdTYxYWNcdTYxOWFcdTYxYTRcdTYxOTRcdTYxYWVcdTYyMmVcdTY0NjlcdTY0NmZcdTY0NzlcdTY0OWVcdTY0YjJcdTY0ODhcdTY0''@;'; put 'put ''OTBcdTY0YjBcdTY0YTVcdTY0OTNcdTY0OTVcdTY0YTlcdTY0OTJcdTY0YWVcdTY0YWRcdTY0YWJcdTY0OWFcdTY0YWNcdTY0OTlcdTY0YTJcdTY0YjNcdTY1NzVcdTY1NzdcdTY1NzhcdTY2YWVcdTY2YWJcdTY2YjRcdTY2YjFcdTZhMjNcdTZhMWZcdTY5ZThcdTZhMDFcdTZhMWVcdTZhMTlc''@;'; put 'put ''dTY5ZmRcdTZhMjFcdTZhMTNcdTZhMGFcdTY5ZjNcdTZhMDJcdTZhMDVcdTY5ZWRcdTZhMTFcdTZiNTBcdTZiNGVcdTZiYTRcdTZiYzVcdTZiYzZcdTZmM2ZcdTZmN2NcdTZmODRcdTZmNTFcdTZmNjZcdTZmNTRcdTZmODZcdTZmNmRcdTZmNWJcdTZmNzhcdTZmNmVcdTZmOGVcdTZmN2FcdTZm''@;'; put 'put ''NzBcdTZmNjRcdTZmOTdcdTZmNThcdTZlZDVcdTZmNmZcdTZmNjBcdTZmNWZcdTcxOWZcdTcxYWNcdTcxYjFcdTcxYThcdTcyNTZcdTcyOWJcdTczNGVcdTczNTdcdTc0NjlcdTc0OGJcdTc0ODNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4''@;'; put 'put ''OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODhdW2ddXT00ODEyOCtnLHlbNDgxMjgrZ109X1sxODhdW2ddKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2VcdTc0ODBcdTc1N2ZcdTc2MjBcdTc2MjlcdTc2''@;'; put 'put ''MWZcdTc2MjRcdTc2MjZcdTc2MjFcdTc2MjJcdTc2OWFcdTc2YmFcdTc2ZTRcdTc3OGVcdTc3ODdcdTc3OGNcdTc3OTFcdTc3OGJcdTc4Y2JcdTc4YzVcdTc4YmFcdTc4Y2FcdTc4YmVcdTc4ZDVcdTc4YmNcdTc4ZDBcdTdhM2ZcdTdhM2NcdTdhNDBcdTdhM2RcdTdhMzdcdTdhM2JcdTdhYWZc''@;'; put 'put ''dTdhYWVcdTdiYWRcdTdiYjFcdTdiYzRcdTdiYjRcdTdiYzZcdTdiYzdcdTdiYzFcdTdiYTBcdTdiY2NcdTdjY2FcdTdkZTBcdTdkZjRcdTdkZWZcdTdkZmJcdTdkZDhcdTdkZWNcdTdkZGRcdTdkZThcdTdkZTNcdTdkZGFcdTdkZGVcdTdkZTlcdTdkOWVcdTdkZDlcdTdkZjJcdTdkZjlcdTdm''@;'; put 'put ''NzVcdTdmNzdcdTdmYWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTlcdTgwMjZcdTgxOWJcdTgxOWNcdTgxOWRcdTgxYTBcdTgxOWFcdTgxOThcdTg1MTdcdTg1M2RcdTg1MWFcdTg0ZWVcdTg1MmNcdTg1MmRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1MjFcdTg1''@;'; put 'put ''MTRcdTg0ZWNcdTg1MjVcdTg0ZmZcdTg1MDZcdTg3ODJcdTg3NzRcdTg3NzZcdTg3NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3NTdcdTg3NGNcdTg3NTNcdTg4NWJcdTg4NWRcdTg5MTBcdTg5MDdcdTg5MTJcdTg5MTNcdTg5MTVcdTg5MGFcdThhYmNcdThhZDJcdThhYzdcdThhYzRc''@;'; put 'put ''dThhOTVcdThhY2JcdThhZjhcdThhYjJcdThhYzlcdThhYzJcdThhYmZcdThhYjBcdThhZDZcdThhY2RcdThhYjZcdThhYjlcdThhZGJcdThjNGNcdThjNGVcdThjNmNcdThjZTBcdThjZGVcdThjZTZcdThjZTRcdThjZWNcdThjZWRcdThjZTJcdThjZTNcdThjZGNcdThjZWFcdThjZTFcdThk''@;'; put 'put ''NmRcdThkOWZcdThkYTNcdThlMmJcdThlMTBcdThlMWRcdThlMjJcdThlMGZcdThlMjlcdThlMWZcdThlMjFcdThlMWVcdThlYmFcdThmMWRcdThmMWJcdThmMWZcdThmMjlcdThmMjZcdThmMmFcdThmMWNcdThmMWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODldLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzE4OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODldW2ddXT00ODM4NCtnLHlbNDgzODQrZ109X1sxODldW2ddKTtmb3IoX1sxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmMjVcdTkwNjlcdTkwNmVcdTkw''@;'; put 'put ''NjhcdTkwNmRcdTkwNzdcdTkxMzBcdTkxMmRcdTkxMjdcdTkxMzFcdTkxODdcdTkxODlcdTkxOGJcdTkxODNcdTkyYzVcdTkyYmJcdTkyYjdcdTkyZWFcdTkyYWNcdTkyZTRcdTkyYzFcdTkyYjNcdTkyYmNcdTkyZDJcdTkyYzdcdTkyZjBcdTkyYjJcdTk1YWRcdTk1YjFcdTk3MDRcdTk3MDZc''@;'; put 'put ''dTk3MDdcdTk3MDlcdTk3NjBcdTk3OGRcdTk3OGJcdTk3OGZcdTk4MjFcdTk4MmJcdTk4MWNcdTk4YjNcdTk5MGFcdTk5MTNcdTk5MTJcdTk5MThcdTk5ZGRcdTk5ZDBcdTk5ZGZcdTk5ZGJcdTk5ZDFcdTk5ZDVcdTk5ZDJcdTk5ZDlcdTlhYjdcdTlhZWVcdTlhZWZcdTliMjdcdTliNDVcdTli''@;'; put 'put ''NDRcdTliNzdcdTliNmZcdTlkMDZcdTlkMDlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkMDNcdTllYTlcdTllYmVcdTllY2VcdTU4YThcdTlmNTJcdTUxMTJcdTUxMThcdTUxMTRcdTUxMTBcdTUxMTVcdTUxODBcdTUxYWFcdTUxZGRcdTUyOTFcdTUyOTNcdTUy''@;'; put 'put ''ZjNcdTU2NTlcdTU2NmJcdTU2NzlcdTU2NjlcdTU2NjRcdTU2NzhcdTU2NmFcdTU2NjhcdTU2NjVcdTU2NzFcdTU2NmZcdTU2NmNcdTU2NjJcdTU2NzZcdTU4YzFcdTU4YmVcdTU4YzdcdTU4YzVcdTU5NmVcdTViMWRcdTViMzRcdTViNzhcdTViZjBcdTVjMGVcdTVmNGFcdTYxYjJcdTYxOTFc''@;'; put 'put ''dTYxYTlcdTYxOGFcdTYxY2RcdTYxYjZcdTYxYmVcdTYxY2FcdTYxYzhcdTYyMzBcdTY0YzVcdTY0YzFcdTY0Y2JcdTY0YmJcdTY0YmNcdTY0ZGFcdTY0YzRcdTY0YzdcdTY0YzJcdTY0Y2RcdTY0YmZcdTY0ZDJcdTY0ZDRcdTY0YmVcdTY1NzRcdTY2YzZcdTY2YzlcdTY2YjlcdTY2YzRcdTY2''@;'; put 'put ''YzdcdTY2YjhcdTZhM2RcdTZhMzhcdTZhM2FcdTZhNTlcdTZhNmJcdTZhNThcdTZhMzlcdTZhNDRcdTZhNjJcdTZhNjFcdTZhNGJcdTZhNDdcdTZhMzVcdTZhNWZcdTZhNDhcdTZiNTlcdTZiNzdcdTZjMDVcdTZmYzJcdTZmYjFcdTZmYTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTBd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTBdW2ddXT00ODY0MCtnLHlbNDg2NDArZ109X1sxOTBdW2ddKTtmb3IoX1sxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzNcdTZm''@;'; put 'put ''YTRcdTZmYzFcdTZmYTdcdTZmYjNcdTZmYzBcdTZmYjlcdTZmYjZcdTZmYTZcdTZmYTBcdTZmYjRcdTcxYmVcdTcxYzlcdTcxZDBcdTcxZDJcdTcxYzhcdTcxZDVcdTcxYjlcdTcxY2VcdTcxZDlcdTcxZGNcdTcxYzNcdTcxYzRcdTczNjhcdTc0OWNcdTc0YTNcdTc0OThcdTc0OWZcdTc0OWVc''@;'; put 'put ''dTc0ZTJcdTc1MGNcdTc1MGRcdTc2MzRcdTc2MzhcdTc2M2FcdTc2ZTdcdTc2ZTVcdTc3YTBcdTc3OWVcdTc3OWZcdTc3YTVcdTc4ZThcdTc4ZGFcdTc4ZWNcdTc4ZTdcdTc5YTZcdTdhNGRcdTdhNGVcdTdhNDZcdTdhNGNcdTdhNGJcdTdhYmFcdTdiZDlcdTdjMTFcdTdiYzlcdTdiZTRcdTdi''@;'; put 'put ''ZGJcdTdiZTFcdTdiZTlcdTdiZTZcdTdjZDVcdTdjZDZcdTdlMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlMTFcdTdlMDhcdTdlMWJcdTdlMjNcdTdlMWVcdTdlMWRcdTdlMDlcdTdlMTBcdTdmNzlcdTdmYjJcdTdmZjBcdTdmZjFcdTdmZWVcdTgwMjhcdTgx''@;'; put 'put ''YjNcdTgxYTlcdTgxYThcdTgxZmJcdTgyMDhcdTgyNThcdTgyNTlcdTg1NGFcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjlcdTg1NDNcdTg1NDlcdTg1NmRcdTg1NmFcdTg1NWVcdTg3ODNcdTg3OWZcdTg3OWVcdTg3YTJcdTg3OGRcdTg4NjFcdTg5MmFcdTg5MzJcdTg5MjVcdTg5MmJcdTg5MjFc''@;'; put 'put ''dTg5YWFcdTg5YTZcdThhZTZcdThhZmFcdThhZWJcdThhZjFcdThiMDBcdThhZGNcdThhZTdcdThhZWVcdThhZmVcdThiMDFcdThiMDJcdThhZjdcdThhZWRcdThhZjNcdThhZjZcdThhZmNcdThjNmJcdThjNmRcdThjOTNcdThjZjRcdThlNDRcdThlMzFcdThlMzRcdThlNDJcdThlMzlcdThl''@;'; put 'put ''MzVcdThmM2JcdThmMmZcdThmMzhcdThmMzNcdThmYThcdThmYTZcdTkwNzVcdTkwNzRcdTkwNzhcdTkwNzJcdTkwN2NcdTkwN2FcdTkxMzRcdTkxOTJcdTkzMjBcdTkzMzZcdTkyZjhcdTkzMzNcdTkzMmZcdTkzMjJcdTkyZmNcdTkzMmJcdTkzMDRcdTkzMWFcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1sxOTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTFdW2ddXT00ODg5NitnLHlbNDg4OTYrZ109X1sxOTFdW2ddKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVcdTkzMmVcdTkzMTlcdTk1YmJcdTk2YTdcdTk2YThcdTk2YWFcdTk2ZDVcdTk3MGVcdTk3MTFcdTk3MTZcdTk3MGRcdTk3MTNcdTk3MGZcdTk3NWJcdTk3NWNcdTk3NjZcdTk3OThcdTk4MzBcdTk4MzhcdTk4M2JcdTk4MzdcdTk4MmRcdTk4Mzlc''@;'; put 'put ''dTk4MjRcdTk5MTBcdTk5MjhcdTk5MWVcdTk5MWJcdTk5MjFcdTk5MWFcdTk5ZWRcdTk5ZTJcdTk5ZjFcdTlhYjhcdTlhYmNcdTlhZmJcdTlhZWRcdTliMjhcdTliOTFcdTlkMTVcdTlkMjNcdTlkMjZcdTlkMjhcdTlkMTJcdTlkMWJcdTllZDhcdTllZDRcdTlmOGRcdTlmOWNcdTUxMmFcdTUx''@;'; put 'put ''MWZcdTUxMjFcdTUxMzJcdTUyZjVcdTU2OGVcdTU2ODBcdTU2OTBcdTU2ODVcdTU2ODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2OGZcdTU4ZDVcdTU4ZDNcdTU4ZDFcdTU4Y2VcdTViMzBcdTViMmFcdTViMjRcdTViN2FcdTVjMzdcdTVjNjhcdTVkYmNcdTVk''@;'; put 'put ''YmFcdTVkYmRcdTVkYjhcdTVlNmJcdTVmNGNcdTVmYmRcdTYxYzlcdTYxYzJcdTYxYzdcdTYxZTZcdTYxY2JcdTYyMzJcdTYyMzRcdTY0Y2VcdTY0Y2FcdTY0ZDhcdTY0ZTBcdTY0ZjBcdTY0ZTZcdTY0ZWNcdTY0ZjFcdTY0ZTJcdTY0ZWRcdTY1ODJcdTY1ODNcdTY2ZDlcdTY2ZDZcdTZhODBc''@;'; put 'put ''dTZhOTRcdTZhODRcdTZhYTJcdTZhOWNcdTZhZGJcdTZhYTNcdTZhN2VcdTZhOTdcdTZhOTBcdTZhYTBcdTZiNWNcdTZiYWVcdTZiZGFcdTZjMDhcdTZmZDhcdTZmZjFcdTZmZGZcdTZmZTBcdTZmZGJcdTZmZTRcdTZmZWJcdTZmZWZcdTZmODBcdTZmZWNcdTZmZTFcdTZmZTlcdTZmZDVcdTZm''@;'; put 'put ''ZWVcdTZmZjBcdTcxZTdcdTcxZGZcdTcxZWVcdTcxZTZcdTcxZTVcdTcxZWRcdTcxZWNcdTcxZjRcdTcxZTBcdTcyMzVcdTcyNDZcdTczNzBcdTczNzJcdTc0YTlcdTc0YjBcdTc0YTZcdTc0YThcdTc2NDZcdTc2NDJcdTc2NGNcdTc2ZWFcdTc3YjNcdTc3YWFcdTc3YjBcdTc3YWNcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTJdW2ddXT00OTE1MitnLHlbNDkxNTIrZ109X1sxOTJdW2ddKTtmb3IoX1sxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTc3YTdcdTc3YWRcdTc3ZWZcdTc4ZjdcdTc4ZmFcdTc4ZjRcdTc4ZWZcdTc5MDFcdTc5YTdcdTc5YWFcdTdhNTdcdTdhYmZcdTdjMDdcdTdjMGRcdTdiZmVcdTdiZjdcdTdjMGNcdTdiZTBcdTdjZTBcdTdjZGNcdTdjZGVcdTdjZTJcdTdjZGZcdTdjZDlcdTdjZGRc''@;'; put 'put ''dTdlMmVcdTdlM2VcdTdlNDZcdTdlMzdcdTdlMzJcdTdlNDNcdTdlMmJcdTdlM2RcdTdlMzFcdTdlNDVcdTdlNDFcdTdlMzRcdTdlMzlcdTdlNDhcdTdlMzVcdTdlM2ZcdTdlMmZcdTdmNDRcdTdmZjNcdTdmZmNcdTgwNzFcdTgwNzJcdTgwNzBcdTgwNmZcdTgwNzNcdTgxYzZcdTgxYzNcdTgx''@;'; put 'put ''YmFcdTgxYzJcdTgxYzBcdTgxYmZcdTgxYmRcdTgxYzlcdTgxYmVcdTgxZThcdTgyMDlcdTgyNzFcdTg1YWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTg1N2VcdTg1OWNcdTg1OTFcdTg1OTRcdTg1YWZcdTg1OWJcdTg1ODdcdTg1YThcdTg1OGFcdTg2''@;'; put 'put ''NjdcdTg3YzBcdTg3ZDFcdTg3YjNcdTg3ZDJcdTg3YzZcdTg3YWJcdTg3YmJcdTg3YmFcdTg3YzhcdTg3Y2JcdTg5M2JcdTg5MzZcdTg5NDRcdTg5MzhcdTg5M2RcdTg5YWNcdThiMGVcdThiMTdcdThiMTlcdThiMWJcdThiMGFcdThiMjBcdThiMWRcdThiMDRcdThiMTBcdThjNDFcdThjM2Zc''@;'; put 'put ''dThjNzNcdThjZmFcdThjZmRcdThjZmNcdThjZjhcdThjZmJcdThkYThcdThlNDlcdThlNGJcdThlNDhcdThlNGFcdThmNDRcdThmM2VcdThmNDJcdThmNDVcdThmM2ZcdTkwN2ZcdTkwN2RcdTkwODRcdTkwODFcdTkwODJcdTkwODBcdTkxMzlcdTkxYTNcdTkxOWVcdTkxOWNcdTkzNGRcdTkz''@;'; put 'put ''ODJcdTkzMjhcdTkzNzVcdTkzNGFcdTkzNjVcdTkzNGJcdTkzMThcdTkzN2VcdTkzNmNcdTkzNWJcdTkzNzBcdTkzNWFcdTkzNTRcdTk1Y2FcdTk1Y2JcdTk1Y2NcdTk1YzhcdTk1YzZcdTk2YjFcdTk2YjhcdTk2ZDZcdTk3MWNcdTk3MWVcdTk3YTBcdTk3ZDNcdTk4NDZcdTk4YjZcdTk5MzVc''@;'; put 'put ''dTlhMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTNdW2ddXT00OTQwOCtnLHlbNDk0MDgrZ109X1sxOTNdW2ddKTtmb3IoX1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ZmZcdTliYWVcdTliYWJcdTliYWFcdTliYWRcdTlkM2JcdTlkM2ZcdTllOGJcdTllY2ZcdTllZGVcdTllZGNcdTllZGRcdTllZGJcdTlmM2VcdTlmNGJcdTUzZTJcdTU2OTVcdTU2YWVcdTU4ZDlcdTU4ZDhcdTViMzhcdTVmNWRcdTYxZTNc''@;'; put 'put ''dTYyMzNcdTY0ZjRcdTY0ZjJcdTY0ZmVcdTY1MDZcdTY0ZmFcdTY0ZmJcdTY0ZjdcdTY1YjdcdTY2ZGNcdTY3MjZcdTZhYjNcdTZhYWNcdTZhYzNcdTZhYmJcdTZhYjhcdTZhYzJcdTZhYWVcdTZhYWZcdTZiNWZcdTZiNzhcdTZiYWZcdTcwMDlcdTcwMGJcdTZmZmVcdTcwMDZcdTZmZmFcdTcw''@;'; put 'put ''MTFcdTcwMGZcdTcxZmJcdTcxZmNcdTcxZmVcdTcxZjhcdTczNzdcdTczNzVcdTc0YTdcdTc0YmZcdTc1MTVcdTc2NTZcdTc2NThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NTJcdTc3YmRcdTc3YmZcdTc3YmJcdTc3YmNcdTc5MGVcdTc5YWVcdTdhNjFcdTdh''@;'; put 'put ''NjJcdTdhNjBcdTdhYzRcdTdhYzVcdTdjMmJcdTdjMjdcdTdjMmFcdTdjMWVcdTdjMjNcdTdjMjFcdTdjZTdcdTdlNTRcdTdlNTVcdTdlNWVcdTdlNWFcdTdlNjFcdTdlNTJcdTdlNTlcdTdmNDhcdTdmZjlcdTdmZmJcdTgwNzdcdTgwNzZcdTgxY2RcdTgxY2ZcdTgyMGFcdTg1Y2ZcdTg1YTlc''@;'; put 'put ''dTg1Y2RcdTg1ZDBcdTg1YzlcdTg1YjBcdTg1YmFcdTg1YjlcdTg1YTZcdTg3ZWZcdTg3ZWNcdTg3ZjJcdTg3ZTBcdTg5ODZcdTg5YjJcdTg5ZjRcdThiMjhcdThiMzlcdThiMmNcdThiMmJcdThjNTBcdThkMDVcdThlNTlcdThlNjNcdThlNjZcdThlNjRcdThlNWZcdThlNTVcdThlYzBcdThm''@;'; put 'put ''NDlcdThmNGRcdTkwODdcdTkwODNcdTkwODhcdTkxYWJcdTkxYWNcdTkxZDBcdTkzOTRcdTkzOGFcdTkzOTZcdTkzYTJcdTkzYjNcdTkzYWVcdTkzYWNcdTkzYjBcdTkzOThcdTkzOWFcdTkzOTdcdTk1ZDRcdTk1ZDZcdTk1ZDBcdTk1ZDVcdTk2ZTJcdTk2ZGNcdTk2ZDlcdTk2ZGJcdTk2ZGVc''@;'; put 'put ''dTk3MjRcdTk3YTNcdTk3YTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTRdW2ddXT00OTY2NCtnLHlbNDk2NjQrZ109X1sxOTRdW2ddKTtmb3IoX1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YWRcdTk3ZjlcdTk4NGRcdTk4NGZcdTk4NGNcdTk4NGVcdTk4NTNcdTk4YmFcdTk5M2VcdTk5M2ZcdTk5M2RcdTk5MmVcdTk5YTVcdTlhMGVcdTlhYzFcdTliMDNcdTliMDZcdTliNGZcdTliNGVcdTliNGRcdTliY2Fc''@;'; put 'put ''dTliYzlcdTliZmRcdTliYzhcdTliYzBcdTlkNTFcdTlkNWRcdTlkNjBcdTllZTBcdTlmMTVcdTlmMmNcdTUxMzNcdTU2YTVcdTU4ZGVcdTU4ZGZcdTU4ZTJcdTViZjVcdTlmOTBcdTVlZWNcdTYxZjJcdTYxZjdcdTYxZjZcdTYxZjVcdTY1MDBcdTY1MGZcdTY2ZTBcdTY2ZGRcdTZhZTVcdTZh''@;'; put 'put ''ZGRcdTZhZGFcdTZhZDNcdTcwMWJcdTcwMWZcdTcwMjhcdTcwMWFcdTcwMWRcdTcwMTVcdTcwMThcdTcyMDZcdTcyMGRcdTcyNThcdTcyYTJcdTczNzhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczN2FcdTc0YmRcdTc0Y2FcdTc0ZTNcdTc1ODdcdTc1ODZcdTc2''@;'; put 'put ''NWZcdTc2NjFcdTc3YzdcdTc5MTlcdTc5YjFcdTdhNmJcdTdhNjlcdTdjM2VcdTdjM2ZcdTdjMzhcdTdjM2RcdTdjMzdcdTdjNDBcdTdlNmJcdTdlNmRcdTdlNzlcdTdlNjlcdTdlNmFcdTdmODVcdTdlNzNcdTdmYjZcdTdmYjlcdTdmYjhcdTgxZDhcdTg1ZTlcdTg1ZGRcdTg1ZWFcdTg1ZDVc''@;'; put 'put ''dTg1ZTRcdTg1ZTVcdTg1ZjdcdTg3ZmJcdTg4MDVcdTg4MGRcdTg3ZjlcdTg3ZmVcdTg5NjBcdTg5NWZcdTg5NTZcdTg5NWVcdThiNDFcdThiNWNcdThiNThcdThiNDlcdThiNWFcdThiNGVcdThiNGZcdThiNDZcdThiNTlcdThkMDhcdThkMGFcdThlN2NcdThlNzJcdThlODdcdThlNzZcdThl''@;'; put 'put ''NmNcdThlN2FcdThlNzRcdThmNTRcdThmNGVcdThmYWRcdTkwOGFcdTkwOGJcdTkxYjFcdTkxYWVcdTkzZTFcdTkzZDFcdTkzZGZcdTkzYzNcdTkzYzhcdTkzZGNcdTkzZGRcdTkzZDZcdTkzZTJcdTkzY2RcdTkzZDhcdTkzZTRcdTkzZDdcdTkzZThcdTk1ZGNcdTk2YjRcdTk2ZTNcdTk3MmFc''@;'; put 'put ''dTk3MjdcdTk3NjFcdTk3ZGNcdTk3ZmJcdTk4NWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTVdW2ddXT00OTkyMCtnLHlbNDk5MjArZ109X1sxOTVdW2ddKTtmb3IoX1sxOTZdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NThcdTk4NWJcdTk4YmNcdTk5NDVcdTk5NDlcdTlhMTZcdTlhMTlcdTliMGRcdTliZThcdTliZTdcdTliZDZcdTliZGJcdTlkODlcdTlkNjFcdTlkNzJcdTlkNmFcdTlkNmNcdTllOTJcdTllOTdc''@;'; put 'put ''dTllOTNcdTllYjRcdTUyZjhcdTU2YThcdTU2YjdcdTU2YjZcdTU2YjRcdTU2YmNcdTU4ZTRcdTViNDBcdTViNDNcdTViN2RcdTViZjZcdTVkYzlcdTYxZjhcdTYxZmFcdTY1MThcdTY1MTRcdTY1MTlcdTY2ZTZcdTY3MjdcdTZhZWNcdTcwM2VcdTcwMzBcdTcwMzJcdTcyMTBcdTczN2JcdTc0''@;'; put 'put ''Y2ZcdTc2NjJcdTc2NjVcdTc5MjZcdTc5MmFcdTc5MmNcdTc5MmJcdTdhYzdcdTdhZjZcdTdjNGNcdTdjNDNcdTdjNGRcdTdjZWZcdTdjZjBcdThmYWVcdTdlN2RcdTdlN2NcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlODJcdTdmNGNcdTgwMDBcdTgxZGFcdTgy''@;'; put 'put ''NjZcdTg1ZmJcdTg1ZjlcdTg2MTFcdTg1ZmFcdTg2MDZcdTg2MGJcdTg2MDdcdTg2MGFcdTg4MTRcdTg4MTVcdTg5NjRcdTg5YmFcdTg5ZjhcdThiNzBcdThiNmNcdThiNjZcdThiNmZcdThiNWZcdThiNmJcdThkMGZcdThkMGRcdThlODlcdThlODFcdThlODVcdThlODJcdTkxYjRcdTkxY2Jc''@;'; put 'put ''dTk0MThcdTk0MDNcdTkzZmRcdTk1ZTFcdTk3MzBcdTk4YzRcdTk5NTJcdTk5NTFcdTk5YThcdTlhMmJcdTlhMzBcdTlhMzdcdTlhMzVcdTljMTNcdTljMGRcdTllNzlcdTllYjVcdTllZThcdTlmMmZcdTlmNWZcdTlmNjNcdTlmNjFcdTUxMzdcdTUxMzhcdTU2YzFcdTU2YzBcdTU2YzJcdTU5''@;'; put 'put ''MTRcdTVjNmNcdTVkY2RcdTYxZmNcdTYxZmVcdTY1MWRcdTY1MWNcdTY1OTVcdTY2ZTlcdTZhZmJcdTZiMDRcdTZhZmFcdTZiYjJcdTcwNGNcdTcyMWJcdTcyYTdcdTc0ZDZcdTc0ZDRcdTc2NjlcdTc3ZDNcdTdjNTBcdTdlOGZcdTdlOGNcdTdmYmNcdTg2MTdcdTg2MmRcdTg2MWFcdTg4MjNc''@;'; put 'put ''dTg4MjJcdTg4MjFcdTg4MWZcdTg5NmFcdTg5NmNcdTg5YmRcdThiNzRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTZdW2ddXT01MDE3NitnLHlbNTAxNzYrZ109X1sxOTZdW2ddKTtmb3Io''@;'; put 'put ''X1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNzdcdThiN2RcdThkMTNcdThlOGFcdThlOGRcdThlOGJcdThmNWZcdThmYWZcdTkxYmFcdTk0MmVcdTk0MzNcdTk0MzVcdTk0M2FcdTk0MzhcdTk0MzJcdTk0MmJcdTk1ZTJc''@;'; put 'put ''dTk3MzhcdTk3MzlcdTk3MzJcdTk3ZmZcdTk4NjdcdTk4NjVcdTk5NTdcdTlhNDVcdTlhNDNcdTlhNDBcdTlhM2VcdTlhY2ZcdTliNTRcdTliNTFcdTljMmRcdTljMjVcdTlkYWZcdTlkYjRcdTlkYzJcdTlkYjhcdTllOWRcdTllZWZcdTlmMTlcdTlmNWNcdTlmNjZcdTlmNjdcdTUxM2NcdTUx''@;'; put 'put ''M2JcdTU2YzhcdTU2Y2FcdTU2YzlcdTViN2ZcdTVkZDRcdTVkZDJcdTVmNGVcdTYxZmZcdTY1MjRcdTZiMGFcdTZiNjFcdTcwNTFcdTcwNThcdTczODBcdTc0ZTRcdTc1OGFcdTc2NmVcdTc2NmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjNcdTdjNjBcdTdj''@;'; put 'put ''NWZcdTgwN2VcdTgwN2RcdTgxZGZcdTg5NzJcdTg5NmZcdTg5ZmNcdThiODBcdThkMTZcdThkMTdcdThlOTFcdThlOTNcdThmNjFcdTkxNDhcdTk0NDRcdTk0NTFcdTk0NTJcdTk3M2RcdTk3M2VcdTk3YzNcdTk3YzFcdTk4NmJcdTk5NTVcdTlhNTVcdTlhNGRcdTlhZDJcdTliMWFcdTljNDlc''@;'; put 'put ''dTljMzFcdTljM2VcdTljM2JcdTlkZDNcdTlkZDdcdTlmMzRcdTlmNmNcdTlmNmFcdTlmOTRcdTU2Y2NcdTVkZDZcdTYyMDBcdTY1MjNcdTY1MmJcdTY1MmFcdTY2ZWNcdTZiMTBcdTc0ZGFcdTdhY2FcdTdjNjRcdTdjNjNcdTdjNjVcdTdlOTNcdTdlOTZcdTdlOTRcdTgxZTJcdTg2MzhcdTg2''@;'; put 'put ''M2ZcdTg4MzFcdThiOGFcdTkwOTBcdTkwOGZcdTk0NjNcdTk0NjBcdTk0NjRcdTk3NjhcdTk4NmZcdTk5NWNcdTlhNWFcdTlhNWJcdTlhNTdcdTlhZDNcdTlhZDRcdTlhZDFcdTljNTRcdTljNTdcdTljNTZcdTlkZTVcdTllOWZcdTllZjRcdTU2ZDFcdTU4ZTlcdTY1MmNcdTcwNWVcdTc2NzFc''@;'; put 'put ''dTc2NzJcdTc3ZDdcdTdmNTBcdTdmODhcdTg4MzZcdTg4MzlcdTg4NjJcdThiOTNcdThiOTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTddW2ddXT01MDQzMitnLHlbNTA0MzIrZ109X1sx''@;'; put 'put ''OTddW2ddKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOTZcdTgyNzdcdThkMWJcdTkxYzBcdTk0NmFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3YzZcdTk4NzBcdTlhNWZcdTliMjJcdTliNThcdTljNWZcdTlkZjlc''@;'; put 'put ''dTlkZmFcdTllN2NcdTllN2RcdTlmMDdcdTlmNzdcdTlmNzJcdTVlZjNcdTZiMTZcdTcwNjNcdTdjNmNcdTdjNmVcdTg4M2JcdTg5YzBcdThlYTFcdTkxYzFcdTk0NzJcdTk0NzBcdTk4NzFcdTk5NWVcdTlhZDZcdTliMjNcdTllY2NcdTcwNjRcdTc3ZGFcdThiOWFcdTk0NzdcdTk3YzlcdTlh''@;'; put 'put ''NjJcdTlhNjVcdTdlOWNcdThiOWNcdThlYWFcdTkxYzVcdTk0N2RcdTk0N2VcdTk0N2NcdTljNzdcdTljNzhcdTllZjdcdThjNTRcdTk0N2ZcdTllMWFcdTcyMjhcdTlhNmFcdTliMzFcdTllMWJcdTllMWVcdTdjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOThdW2ddXT01MDY4OCtnLHlb''@;'; put 'put ''NTA2ODgrZ109X1sxOThdW2ddKTtmb3IoX1syMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlNDJcdTRlNWNcdTUxZjVcdTUzMWFcdTUzODJcdTRlMDdcdTRlMGNcdTRlNDdcdTRlOGRcdTU2ZDdcdWZhMGNcdTVjNmVcdTVmNzNc''@;'; put 'put ''dTRlMGZcdTUxODdcdTRlMGVcdTRlMmVcdTRlOTNcdTRlYzJcdTRlYzlcdTRlYzhcdTUxOThcdTUyZmNcdTUzNmNcdTUzYjlcdTU3MjBcdTU5MDNcdTU5MmNcdTVjMTBcdTVkZmZcdTY1ZTFcdTZiYjNcdTZiY2NcdTZjMTRcdTcyM2ZcdTRlMzFcdTRlM2NcdTRlZThcdTRlZGNcdTRlZTlcdTRl''@;'; put 'put ''ZTFcdTRlZGRcdTRlZGFcdTUyMGNcdTUzMWNcdTUzNGNcdTU3MjJcdTU3MjNcdTU5MTdcdTU5MmZcdTViODFcdTViODRcdTVjMTJcdTVjM2JcdTVjNzRcdTVjNzNcdTVlMDRcdTVlODBcdTVlODJcdTVmYzlcdTYyMDlcdTYyNTBcdTZjMTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTZjMzZcdTZjNDNcdTZjM2ZcdTZjM2JcdTcyYWVcdTcyYjBcdTczOGFcdTc5YjhcdTgwOGFcdTk2MWVcdTRmMGVcdTRmMThcdTRmMmNcdTRlZjVcdTRmMTRcdTRlZjFcdTRmMDBcdTRlZjdcdTRmMDhcdTRmMWRcdTRmMDJcdTRmMDVcdTRmMjJcdTRmMTNcdTRmMDRcdTRlZjRc''@;'; put 'put ''dTRmMTJcdTUxYjFcdTUyMTNcdTUyMDlcdTUyMTBcdTUyYTZcdTUzMjJcdTUzMWZcdTUzNGRcdTUzOGFcdTU0MDdcdTU2ZTFcdTU2ZGZcdTU3MmVcdTU3MmFcdTU3MzRcdTU5M2NcdTU5ODBcdTU5N2NcdTU5ODVcdTU5N2JcdTU5N2VcdTU5NzdcdTU5N2ZcdTViNTZcdTVjMTVcdTVjMjVcdTVj''@;'; put 'put ''N2NcdTVjN2FcdTVjN2JcdTVjN2VcdTVkZGZcdTVlNzVcdTVlODRcdTVmMDJcdTVmMWFcdTVmNzRcdTVmZDVcdTVmZDRcdTVmY2ZcdTYyNWNcdTYyNWVcdTYyNjRcdTYyNjFcdTYyNjZcdTYyNjJcdTYyNTlcdTYyNjBcdTYyNWFcdTYyNjVcdTY1ZWZcdTY1ZWVcdTY3M2VcdTY3MzlcdTY3Mzhc''@;'; put 'put ''dTY3M2JcdTY3M2FcdTY3M2ZcdTY3M2NcdTY3MzNcdTZjMThcdTZjNDZcdTZjNTJcdTZjNWNcdTZjNGZcdTZjNGFcdTZjNTRcdTZjNGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDFdW2dd''@;'; put 'put ''XT01MTQ1NitnLHlbNTE0NTYrZ109X1syMDFdW2ddKTtmb3IoX1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNGNcdTcwNzFcdTcyNWVcdTcyYjRcdTcyYjVcdTczOGVcdTc1MmFcdTc2N2ZcdTdhNzVcdTdmNTFcdTgyNzhc''@;'; put 'put ''dTgyN2NcdTgyODBcdTgyN2RcdTgyN2ZcdTg2NGRcdTg5N2VcdTkwOTlcdTkwOTdcdTkwOThcdTkwOWJcdTkwOTRcdTk2MjJcdTk2MjRcdTk2MjBcdTk2MjNcdTRmNTZcdTRmM2JcdTRmNjJcdTRmNDlcdTRmNTNcdTRmNjRcdTRmM2VcdTRmNjdcdTRmNTJcdTRmNWZcdTRmNDFcdTRmNThcdTRm''@;'; put 'put ''MmRcdTRmMzNcdTRmM2ZcdTRmNjFcdTUxOGZcdTUxYjlcdTUyMWNcdTUyMWVcdTUyMjFcdTUyYWRcdTUyYWVcdTUzMDlcdTUzNjNcdTUzNzJcdTUzOGVcdTUzOGZcdTU0MzBcdTU0MzdcdTU0MmFcdTU0NTRcdTU0NDVcdTU0MTlcdTU0MWNcdTU0MjVcdTU0MThcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0M2RcdTU0NGZcdTU0NDFcdTU0MjhcdTU0MjRcdTU0NDdcdTU2ZWVcdTU2ZTdcdTU2ZTVcdTU3NDFcdTU3NDVcdTU3NGNcdTU3NDlcdTU3NGJcdTU3NTJcdTU5MDZcdTU5NDBcdTU5YTZcdTU5OThcdTU5YTBcdTU5OTdcdTU5OGVcdTU5YTJcdTU5OTBc''@;'; put 'put ''dTU5OGZcdTU5YTdcdTU5YTFcdTViOGVcdTViOTJcdTVjMjhcdTVjMmFcdTVjOGRcdTVjOGZcdTVjODhcdTVjOGJcdTVjODlcdTVjOTJcdTVjOGFcdTVjODZcdTVjOTNcdTVjOTVcdTVkZTBcdTVlMGFcdTVlMGVcdTVlOGJcdTVlODlcdTVlOGNcdTVlODhcdTVlOGRcdTVmMDVcdTVmMWRcdTVm''@;'; put 'put ''NzhcdTVmNzZcdTVmZDJcdTVmZDFcdTVmZDBcdTVmZWRcdTVmZThcdTVmZWVcdTVmZjNcdTVmZTFcdTVmZTRcdTVmZTNcdTVmZmFcdTVmZWZcdTVmZjdcdTVmZmJcdTYwMDBcdTVmZjRcdTYyM2FcdTYyODNcdTYyOGNcdTYyOGVcdTYyOGZcdTYyOTRcdTYyODdcdTYyNzFcdTYyN2JcdTYyN2Fc''@;'; put 'put ''dTYyNzBcdTYyODFcdTYyODhcdTYyNzdcdTYyN2RcdTYyNzJcdTYyNzRcdTY1MzdcdTY1ZjBcdTY1ZjRcdTY1ZjNcdTY1ZjJcdTY1ZjVcdTY3NDVcdTY3NDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMl1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1syMDJdW2ddXT01MTcxMitnLHlbNTE3MTIrZ109X1syMDJdW2ddKTtmb3IoX1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTlcdTY3NTVcdTY3NGNcdTY3NDhcdTY3NWRcdTY3NGRcdTY3NWFcdTY3NGJcdTZiZDBc''@;'; put 'put ''dTZjMTlcdTZjMWFcdTZjNzhcdTZjNjdcdTZjNmJcdTZjODRcdTZjOGJcdTZjOGZcdTZjNzFcdTZjNmZcdTZjNjlcdTZjOWFcdTZjNmRcdTZjODdcdTZjOTVcdTZjOWNcdTZjNjZcdTZjNzNcdTZjNjVcdTZjN2JcdTZjOGVcdTcwNzRcdTcwN2FcdTcyNjNcdTcyYmZcdTcyYmRcdTcyYzNcdTcy''@;'; put 'put ''YzZcdTcyYzFcdTcyYmFcdTcyYzVcdTczOTVcdTczOTdcdTczOTNcdTczOTRcdTczOTJcdTc1M2FcdTc1MzlcdTc1OTRcdTc1OTVcdTc2ODFcdTc5M2RcdTgwMzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgwOWNcdTgyOTBcdTgyOGZcdTgyODVcdTgyOGVcdTgyOTFcdTgyOTNcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGFcdTgyODNcdTgyODRcdThjNzhcdThmYzlcdThmYmZcdTkwOWZcdTkwYTFcdTkwYTVcdTkwOWVcdTkwYTdcdTkwYTBcdTk2MzBcdTk2MjhcdTk2MmZcdTk2MmRcdTRlMzNcdTRmOThcdTRmN2NcdTRmODVcdTRmN2RcdTRmODBc''@;'; put 'put ''dTRmODdcdTRmNzZcdTRmNzRcdTRmODlcdTRmODRcdTRmNzdcdTRmNGNcdTRmOTdcdTRmNmFcdTRmOWFcdTRmNzlcdTRmODFcdTRmNzhcdTRmOTBcdTRmOWNcdTRmOTRcdTRmOWVcdTRmOTJcdTRmODJcdTRmOTVcdTRmNmJcdTRmNmVcdTUxOWVcdTUxYmNcdTUxYmVcdTUyMzVcdTUyMzJcdTUy''@;'; put 'put ''MzNcdTUyNDZcdTUyMzFcdTUyYmNcdTUzMGFcdTUzMGJcdTUzM2NcdTUzOTJcdTUzOTRcdTU0ODdcdTU0N2ZcdTU0ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0NmJcdTU0N2FcdTU0N2VcdTU0NjVcdTU0NmNcdTU0NzRcdTU0NjZcdTU0OGRcdTU0NmZcdTU0NjFcdTU0NjBcdTU0OThcdTU0NjNc''@;'; put 'put ''dTU0NjdcdTU0NjRcdTU2ZjdcdTU2ZjlcdTU3NmZcdTU3NzJcdTU3NmRcdTU3NmJcdTU3NzFcdTU3NzBcdTU3NzZcdTU3ODBcdTU3NzVcdTU3N2JcdTU3NzNcdTU3NzRcdTU3NjJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwM11bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1syMDNdW2ddXT01MTk2OCtnLHlbNTE5NjgrZ109X1syMDNdW2ddKTtmb3IoX1syMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3NjhcdTU3N2RcdTU5MGNcdTU5NDVcdTU5YjVcdTU5YmFcdTU5Y2Zc''@;'; put 'put ''dTU5Y2VcdTU5YjJcdTU5Y2NcdTU5YzFcdTU5YjZcdTU5YmNcdTU5YzNcdTU5ZDZcdTU5YjFcdTU5YmRcdTU5YzBcdTU5YzhcdTU5YjRcdTU5YzdcdTViNjJcdTViNjVcdTViOTNcdTViOTVcdTVjNDRcdTVjNDdcdTVjYWVcdTVjYTRcdTVjYTBcdTVjYjVcdTVjYWZcdTVjYThcdTVjYWNcdTVj''@;'; put 'put ''OWZcdTVjYTNcdTVjYWRcdTVjYTJcdTVjYWFcdTVjYTdcdTVjOWRcdTVjYTVcdTVjYjZcdTVjYjBcdTVjYTZcdTVlMTdcdTVlMTRcdTVlMTlcdTVmMjhcdTVmMjJcdTVmMjNcdTVmMjRcdTVmNTRcdTVmODJcdTVmN2VcdTVmN2RcdTVmZGVcdTVmZTVcdTYwMmRcdTYwMjZcdTYwMTlcdTYwMzJc''@;'; put 'put ''dTYwMGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMzRcdTYwMGFcdTYwMTdcdTYwMzNcdTYwMWFcdTYwMWVcdTYwMmNcdTYwMjJcdTYwMGRcdTYwMTBcdTYwMmVcdTYwMTNcdTYwMTFcdTYwMGNcdTYwMDlcdTYwMWNcdTYyMTRcdTYyM2RcdTYyYWRcdTYyYjRc''@;'; put 'put ''dTYyZDFcdTYyYmVcdTYyYWFcdTYyYjZcdTYyY2FcdTYyYWVcdTYyYjNcdTYyYWZcdTYyYmJcdTYyYTlcdTYyYjBcdTYyYjhcdTY1M2RcdTY1YThcdTY1YmJcdTY2MDlcdTY1ZmNcdTY2MDRcdTY2MTJcdTY2MDhcdTY1ZmJcdTY2MDNcdTY2MGJcdTY2MGRcdTY2MDVcdTY1ZmRcdTY2MTFcdTY2''@;'; put 'put ''MTBcdTY2ZjZcdTY3MGFcdTY3ODVcdTY3NmNcdTY3OGVcdTY3OTJcdTY3NzZcdTY3N2JcdTY3OThcdTY3ODZcdTY3ODRcdTY3NzRcdTY3OGRcdTY3OGNcdTY3N2FcdTY3OWZcdTY3OTFcdTY3OTlcdTY3ODNcdTY3N2RcdTY3ODFcdTY3NzhcdTY3NzlcdTY3OTRcdTZiMjVcdTZiODBcdTZiN2Vc''@;'; put 'put ''dTZiZGVcdTZjMWRcdTZjOTNcdTZjZWNcdTZjZWJcdTZjZWVcdTZjZDlcdTZjYjZcdTZjZDRcdTZjYWRcdTZjZTdcdTZjYjdcdTZjZDBcdTZjYzJcdTZjYmFcdTZjYzNcdTZjYzZcdTZjZWRcdTZjZjJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1f''@;'; put 'put ''WzIwNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDRdW2ddXT01MjIyNCtnLHlbNTIyMjQrZ109X1syMDRdW2ddKTtmb3IoX1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDJcdTZjZGRcdTZjYjRcdTZjOGFcdTZjOWRc''@;'; put 'put ''dTZjODBcdTZjZGVcdTZjYzBcdTZkMzBcdTZjY2RcdTZjYzdcdTZjYjBcdTZjZjlcdTZjY2ZcdTZjZTlcdTZjZDFcdTcwOTRcdTcwOThcdTcwODVcdTcwOTNcdTcwODZcdTcwODRcdTcwOTFcdTcwOTZcdTcwODJcdTcwOWFcdTcwODNcdTcyNmFcdTcyZDZcdTcyY2JcdTcyZDhcdTcyYzlcdTcy''@;'; put 'put ''ZGNcdTcyZDJcdTcyZDRcdTcyZGFcdTcyY2NcdTcyZDFcdTczYTRcdTczYTFcdTczYWRcdTczYTZcdTczYTJcdTczYTBcdTczYWNcdTczOWRcdTc0ZGRcdTc0ZThcdTc1M2ZcdTc1NDBcdTc1M2VcdTc1OGNcdTc1OThcdTc2YWZcdTc2ZjNcdTc2ZjFcdTc2ZjBcdTc2ZjVcdTc3ZjhcdTc3ZmNc''@;'; put 'put ''dTc3ZjlcdTc3ZmJcdTc3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3ZjdcdTc5NDJcdTc5M2ZcdTc5YzVcdTdhNzhcdTdhN2JcdTdhZmJcdTdjNzVcdTdjZmRcdTgwMzVcdTgwOGZcdTgwYWVcdTgwYTNcdTgwYjhcdTgwYjVcdTgwYWRcdTgyMjBcdTgyYTBc''@;'; put 'put ''dTgyYzBcdTgyYWJcdTgyOWFcdTgyOThcdTgyOWJcdTgyYjVcdTgyYTdcdTgyYWVcdTgyYmNcdTgyOWVcdTgyYmFcdTgyYjRcdTgyYThcdTgyYTFcdTgyYTlcdTgyYzJcdTgyYTRcdTgyYzNcdTgyYjZcdTgyYTJcdTg2NzBcdTg2NmZcdTg2NmRcdTg2NmVcdThjNTZcdThmZDJcdThmY2JcdThm''@;'; put 'put ''ZDNcdThmY2RcdThmZDZcdThmZDVcdThmZDdcdTkwYjJcdTkwYjRcdTkwYWZcdTkwYjNcdTkwYjBcdTk2MzlcdTk2M2RcdTk2M2NcdTk2M2FcdTk2NDNcdTRmY2RcdTRmYzVcdTRmZDNcdTRmYjJcdTRmYzlcdTRmY2JcdTRmYzFcdTRmZDRcdTRmZGNcdTRmZDlcdTRmYmJcdTRmYjNcdTRmZGJc''@;'; put 'put ''dTRmYzdcdTRmZDZcdTRmYmFcdTRmYzBcdTRmYjlcdTRmZWNcdTUyNDRcdTUyNDlcdTUyYzBcdTUyYzJcdTUzM2RcdTUzN2NcdTUzOTdcdTUzOTZcdTUzOTlcdTUzOThcdTU0YmFcdTU0YTFcdTU0YWRcdTU0YTVcdTU0Y2ZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDVdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT1fWzIwNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDVdW2ddXT01MjQ4MCtnLHlbNTI0ODArZ109X1syMDVdW2ddKTtmb3IoX1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzNcdTgzMGRcdTU0Yjdc''@;'; put 'put ''dTU0YWVcdTU0ZDZcdTU0YjZcdTU0YzVcdTU0YzZcdTU0YTBcdTU0NzBcdTU0YmNcdTU0YTJcdTU0YmVcdTU0NzJcdTU0ZGVcdTU0YjBcdTU3YjVcdTU3OWVcdTU3OWZcdTU3YTRcdTU3OGNcdTU3OTdcdTU3OWRcdTU3OWJcdTU3OTRcdTU3OThcdTU3OGZcdTU3OTlcdTU3YTVcdTU3OWFcdTU3''@;'; put 'put ''OTVcdTU4ZjRcdTU5MGRcdTU5NTNcdTU5ZTFcdTU5ZGVcdTU5ZWVcdTVhMDBcdTU5ZjFcdTU5ZGRcdTU5ZmFcdTU5ZmRcdTU5ZmNcdTU5ZjZcdTU5ZTRcdTU5ZjJcdTU5ZjdcdTU5ZGJcdTU5ZTlcdTU5ZjNcdTU5ZjVcdTU5ZTBcdTU5ZmVcdTU5ZjRcdTU5ZWRcdTViYThcdTVjNGNcdTVjZDBc''@;'; put 'put ''dTVjZDhcdTVjY2NcdTVjZDdcdTVjY2JcdTVjZGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjZGVcdTVjZGFcdTVjYzlcdTVjYzdcdTVjY2FcdTVjZDZcdTVjZDNcdTVjZDRcdTVjY2ZcdTVjYzhcdTVjYzZcdTVjY2VcdTVjZGZcdTVjZjhcdTVkZjlcdTVlMjFc''@;'; put 'put ''dTVlMjJcdTVlMjNcdTVlMjBcdTVlMjRcdTVlYjBcdTVlYTRcdTVlYTJcdTVlOWJcdTVlYTNcdTVlYTVcdTVmMDdcdTVmMmVcdTVmNTZcdTVmODZcdTYwMzdcdTYwMzlcdTYwNTRcdTYwNzJcdTYwNWVcdTYwNDVcdTYwNTNcdTYwNDdcdTYwNDlcdTYwNWJcdTYwNGNcdTYwNDBcdTYwNDJcdTYw''@;'; put 'put ''NWZcdTYwMjRcdTYwNDRcdTYwNThcdTYwNjZcdTYwNmVcdTYyNDJcdTYyNDNcdTYyY2ZcdTYzMGRcdTYzMGJcdTYyZjVcdTYzMGVcdTYzMDNcdTYyZWJcdTYyZjlcdTYzMGZcdTYzMGNcdTYyZjhcdTYyZjZcdTYzMDBcdTYzMTNcdTYzMTRcdTYyZmFcdTYzMTVcdTYyZmJcdTYyZjBcdTY1NDFc''@;'; put 'put ''dTY1NDNcdTY1YWFcdTY1YmZcdTY2MzZcdTY2MjFcdTY2MzJcdTY2MzVcdTY2MWNcdTY2MjZcdTY2MjJcdTY2MzNcdTY2MmJcdTY2M2FcdTY2MWRcdTY2MzRcdTY2MzlcdTY2MmVcdTY3MGZcdTY3MTBcdTY3YzFcdTY3ZjJcdTY3YzhcdTY3YmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sy''@;'; put 'put ''MDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDZdW2ddXT01MjczNitnLHlbNTI3MzYrZ109X1syMDZdW2ddKTtmb3IoX1syMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3ZGNc''@;'; put 'put ''dTY3YmJcdTY3ZjhcdTY3ZDhcdTY3YzBcdTY3YjdcdTY3YzVcdTY3ZWJcdTY3ZTRcdTY3ZGZcdTY3YjVcdTY3Y2RcdTY3YjNcdTY3ZjdcdTY3ZjZcdTY3ZWVcdTY3ZTNcdTY3YzJcdTY3YjlcdTY3Y2VcdTY3ZTdcdTY3ZjBcdTY3YjJcdTY3ZmNcdTY3YzZcdTY3ZWRcdTY3Y2NcdTY3YWVcdTY3''@;'; put 'put ''ZTZcdTY3ZGJcdTY3ZmFcdTY3YzlcdTY3Y2FcdTY3YzNcdTY3ZWFcdTY3Y2JcdTZiMjhcdTZiODJcdTZiODRcdTZiYjZcdTZiZDZcdTZiZDhcdTZiZTBcdTZjMjBcdTZjMjFcdTZkMjhcdTZkMzRcdTZkMmRcdTZkMWZcdTZkM2NcdTZkM2ZcdTZkMTJcdTZkMGFcdTZjZGFcdTZkMzNcdTZkMDRc''@;'; put 'put ''dTZkMTlcdTZkM2FcdTZkMWFcdTZkMTFcdTZkMDBcdTZkMWRcdTZkNDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMDFcdTZkMThcdTZkMzdcdTZkMDNcdTZkMGZcdTZkNDBcdTZkMDdcdTZkMjBcdTZkMmNcdTZkMDhcdTZkMjJcdTZkMDlcdTZkMTBcdTcwYjdc''@;'; put 'put ''dTcwOWZcdTcwYmVcdTcwYjFcdTcwYjBcdTcwYTFcdTcwYjRcdTcwYjVcdTcwYTlcdTcyNDFcdTcyNDlcdTcyNGFcdTcyNmNcdTcyNzBcdTcyNzNcdTcyNmVcdTcyY2FcdTcyZTRcdTcyZThcdTcyZWJcdTcyZGZcdTcyZWFcdTcyZTZcdTcyZTNcdTczODVcdTczY2NcdTczYzJcdTczYzhcdTcz''@;'; put 'put ''YzVcdTczYjlcdTczYjZcdTczYjVcdTczYjRcdTczZWJcdTczYmZcdTczYzdcdTczYmVcdTczYzNcdTczYzZcdTczYjhcdTczY2JcdTc0ZWNcdTc0ZWVcdTc1MmVcdTc1NDdcdTc1NDhcdTc1YTdcdTc1YWFcdTc2NzlcdTc2YzRcdTc3MDhcdTc3MDNcdTc3MDRcdTc3MDVcdTc3MGFcdTc2Zjdc''@;'; put 'put ''dTc2ZmJcdTc2ZmFcdTc3ZTdcdTc3ZThcdTc4MDZcdTc4MTFcdTc4MTJcdTc4MDVcdTc4MTBcdTc4MGZcdTc4MGVcdTc4MDlcdTc4MDNcdTc4MTNcdTc5NGFcdTc5NGNcdTc5NGJcdTc5NDVcdTc5NDRcdTc5ZDVcdTc5Y2RcdTc5Y2ZcdTc5ZDZcdTc5Y2VcdTdhODBcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1syMDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDddW2ddXT01Mjk5MitnLHlbNTI5OTIrZ109X1syMDddW2ddKTtmb3IoX1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTdhN2VcdTdhZDFcdTdiMDBcdTdiMDFcdTdjN2FcdTdjNzhcdTdjNzlcdTdjN2ZcdTdjODBcdTdjODFcdTdkMDNcdTdkMDhcdTdkMDFcdTdmNThcdTdmOTFcdTdmOGRcdTdmYmVcdTgwMDdcdTgwMGVcdTgwMGZcdTgwMTRcdTgwMzdcdTgwZDhcdTgwYzdcdTgwZTBcdTgwZDFcdTgw''@;'; put 'put ''YzhcdTgwYzJcdTgwZDBcdTgwYzVcdTgwZTNcdTgwZDlcdTgwZGNcdTgwY2FcdTgwZDVcdTgwYzlcdTgwY2ZcdTgwZDdcdTgwZTZcdTgwY2RcdTgxZmZcdTgyMjFcdTgyOTRcdTgyZDlcdTgyZmVcdTgyZjlcdTgzMDdcdTgyZThcdTgzMDBcdTgyZDVcdTgzM2FcdTgyZWJcdTgyZDZcdTgyZjRc''@;'; put 'put ''dTgyZWNcdTgyZTFcdTgyZjJcdTgyZjVcdTgzMGNcdTgyZmJcdTgyZjZcdTgyZjBcdTgyZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyZTRcdTgyZTBcdTgyZmFcdTgyZjNcdTgyZWRcdTg2NzdcdTg2NzRcdTg2N2NcdTg2NzNcdTg4NDFcdTg4NGVcdTg4Njdc''@;'; put 'put ''dTg4NmFcdTg4NjlcdTg5ZDNcdThhMDRcdThhMDdcdThkNzJcdThmZTNcdThmZTFcdThmZWVcdThmZTBcdTkwZjFcdTkwYmRcdTkwYmZcdTkwZDVcdTkwYzVcdTkwYmVcdTkwYzdcdTkwY2JcdTkwYzhcdTkxZDRcdTkxZDNcdTk2NTRcdTk2NGZcdTk2NTFcdTk2NTNcdTk2NGFcdTk2NGVcdTUw''@;'; put 'put ''MWVcdTUwMDVcdTUwMDdcdTUwMTNcdTUwMjJcdTUwMzBcdTUwMWJcdTRmZjVcdTRmZjRcdTUwMzNcdTUwMzdcdTUwMmNcdTRmZjZcdTRmZjdcdTUwMTdcdTUwMWNcdTUwMjBcdTUwMjdcdTUwMzVcdTUwMmZcdTUwMzFcdTUwMGVcdTUxNWFcdTUxOTRcdTUxOTNcdTUxY2FcdTUxYzRcdTUxYzVc''@;'; put 'put ''dTUxYzhcdTUxY2VcdTUyNjFcdTUyNWFcdTUyNTJcdTUyNWVcdTUyNWZcdTUyNTVcdTUyNjJcdTUyY2RcdTUzMGVcdTUzOWVcdTU1MjZcdTU0ZTJcdTU1MTdcdTU1MTJcdTU0ZTdcdTU0ZjNcdTU0ZTRcdTU1MWFcdTU0ZmZcdTU1MDRcdTU1MDhcdTU0ZWJcdTU1MTFcdTU1MDVcdTU0ZjFcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDhdW2ddXT01MzI0OCtnLHlbNTMyNDgrZ109X1syMDhdW2ddKTtmb3IoX1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTU1MGFcdTU0ZmJcdTU0ZjdcdTU0ZjhcdTU0ZTBcdTU1MGVcdTU1MDNcdTU1MGJcdTU3MDFcdTU3MDJcdTU3Y2NcdTU4MzJcdTU3ZDVcdTU3ZDJcdTU3YmFcdTU3YzZcdTU3YmRcdTU3YmNcdTU3YjhcdTU3YjZcdTU3YmZcdTU3YzdcdTU3ZDBcdTU3YjlcdTU3''@;'; put 'put ''YzFcdTU5MGVcdTU5NGFcdTVhMTlcdTVhMTZcdTVhMmRcdTVhMmVcdTVhMTVcdTVhMGZcdTVhMTdcdTVhMGFcdTVhMWVcdTVhMzNcdTViNmNcdTViYTdcdTViYWRcdTViYWNcdTVjMDNcdTVjNTZcdTVjNTRcdTVjZWNcdTVjZmZcdTVjZWVcdTVjZjFcdTVjZjdcdTVkMDBcdTVjZjlcdTVlMjlc''@;'; put 'put ''dTVlMjhcdTVlYThcdTVlYWVcdTVlYWFcdTVlYWNcdTVmMzNcdTVmMzBcdTVmNjdcdTYwNWRcdTYwNWFcdTYwNjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNDFcdTYwYTJcdTYwODhcdTYwODBcdTYwOTJcdTYwODFcdTYwOWRcdTYwODNcdTYwOTVcdTYwOWJc''@;'; put 'put ''dTYwOTdcdTYwODdcdTYwOWNcdTYwOGVcdTYyMTlcdTYyNDZcdTYyZjJcdTYzMTBcdTYzNTZcdTYzMmNcdTYzNDRcdTYzNDVcdTYzMzZcdTYzNDNcdTYzZTRcdTYzMzlcdTYzNGJcdTYzNGFcdTYzM2NcdTYzMjlcdTYzNDFcdTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYzMmRcdTYzNDdcdTYz''@;'; put 'put ''MzNcdTYzNWFcdTYzNTFcdTYzMzhcdTYzNTdcdTYzNDBcdTYzNDhcdTY1NGFcdTY1NDZcdTY1YzZcdTY1YzNcdTY1YzRcdTY1YzJcdTY2NGFcdTY2NWZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MWZcdTY4MWFcdTY4NDlcdTY4MzJcdTY4MzNcdTY4M2JcdTY4NGJcdTY4NGZcdTY4MTZc''@;'; put 'put ''dTY4MzFcdTY4MWNcdTY4MzVcdTY4MmJcdTY4MmRcdTY4MmZcdTY4NGVcdTY4NDRcdTY4MzRcdTY4MWRcdTY4MTJcdTY4MTRcdTY4MjZcdTY4MjhcdTY4MmVcdTY4NGRcdTY4M2FcdTY4MjVcdTY4MjBcdTZiMmNcdTZiMmZcdTZiMmRcdTZiMzFcdTZiMzRcdTZiNmRcdTgwODJcdTZiODhcdTZi''@;'; put 'put ''ZTZcdTZiZTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDldW2ddXT01MzUwNCtnLHlbNTM1MDQrZ109X1syMDldW2ddKTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZThcdTZiZTNcdTZiZTJcdTZiZTdcdTZjMjVcdTZkN2FcdTZkNjNcdTZkNjRcdTZkNzZcdTZkMGRcdTZkNjFcdTZkOTJcdTZkNThcdTZkNjJcdTZkNmRcdTZkNmZcdTZkOTFcdTZkOGRcdTZkZWZcdTZkN2ZcdTZkODZcdTZkNWVcdTZk''@;'; put 'put ''NjdcdTZkNjBcdTZkOTdcdTZkNzBcdTZkN2NcdTZkNWZcdTZkODJcdTZkOThcdTZkMmZcdTZkNjhcdTZkOGJcdTZkN2VcdTZkODBcdTZkODRcdTZkMTZcdTZkODNcdTZkN2JcdTZkN2RcdTZkNzVcdTZkOTBcdTcwZGNcdTcwZDNcdTcwZDFcdTcwZGRcdTcwY2JcdTdmMzlcdTcwZTJcdTcwZDdc''@;'; put 'put ''dTcwZDJcdTcwZGVcdTcwZTBcdTcwZDRcdTcwY2RcdTcwYzVcdTcwYzZcdTcwYzdcdTcwZGFcdTcwY2VcdTcwZTFcdTcyNDJcdTcyNzhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyNzdcdTcyNzZcdTczMDBcdTcyZmFcdTcyZjRcdTcyZmVcdTcyZjZcdTcyZjNc''@;'; put 'put ''dTcyZmJcdTczMDFcdTczZDNcdTczZDlcdTczZTVcdTczZDZcdTczYmNcdTczZTdcdTczZTNcdTczZTlcdTczZGNcdTczZDJcdTczZGJcdTczZDRcdTczZGRcdTczZGFcdTczZDdcdTczZDhcdTczZThcdTc0ZGVcdTc0ZGZcdTc0ZjRcdTc0ZjVcdTc1MjFcdTc1NWJcdTc1NWZcdTc1YjBcdTc1''@;'; put 'put ''YzFcdTc1YmJcdTc1YzRcdTc1YzBcdTc1YmZcdTc1YjZcdTc1YmFcdTc2OGFcdTc2YzlcdTc3MWRcdTc3MWJcdTc3MTBcdTc3MTNcdTc3MTJcdTc3MjNcdTc3MTFcdTc3MTVcdTc3MTlcdTc3MWFcdTc3MjJcdTc3MjdcdTc4MjNcdTc4MmNcdTc4MjJcdTc4MzVcdTc4MmZcdTc4MjhcdTc4MmVc''@;'; put 'put ''dTc4MmJcdTc4MjFcdTc4MjlcdTc4MzNcdTc4MmFcdTc4MzFcdTc5NTRcdTc5NWJcdTc5NGZcdTc5NWNcdTc5NTNcdTc5NTJcdTc5NTFcdTc5ZWJcdTc5ZWNcdTc5ZTBcdTc5ZWVcdTc5ZWRcdTc5ZWFcdTc5ZGNcdTc5ZGVcdTc5ZGRcdTdhODZcdTdhODlcdTdhODVcdTdhOGJcdTdhOGNcdTdh''@;'; put 'put ''OGFcdTdhODdcdTdhZDhcdTdiMTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTBdW2ddXT01Mzc2MCtnLHlbNTM3NjArZ109X1syMTBdW2ddKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMDRcdTdiMTNcdTdiMDVcdTdiMGZcdTdiMDhcdTdiMGFcdTdiMGVcdTdiMDlcdTdiMTJcdTdjODRcdTdjOTFcdTdjOGFcdTdjOGNcdTdjODhcdTdjOGRcdTdjODVcdTdkMWVcdTdkMWRcdTdkMTFcdTdkMGVcdTdk''@;'; put 'put ''MThcdTdkMTZcdTdkMTNcdTdkMWZcdTdkMTJcdTdkMGZcdTdkMGNcdTdmNWNcdTdmNjFcdTdmNWVcdTdmNjBcdTdmNWRcdTdmNWJcdTdmOTZcdTdmOTJcdTdmYzNcdTdmYzJcdTdmYzBcdTgwMTZcdTgwM2VcdTgwMzlcdTgwZmFcdTgwZjJcdTgwZjlcdTgwZjVcdTgxMDFcdTgwZmJcdTgxMDBc''@;'; put 'put ''dTgyMDFcdTgyMmZcdTgyMjVcdTgzMzNcdTgzMmRcdTgzNDRcdTgzMTlcdTgzNTFcdTgzMjVcdTgzNTZcdTgzM2ZcdTgzNDFcdTgzMjZcdTgzMWNcdTgzMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzNDJcdTgzNGVcdTgzMWJcdTgzMmFcdTgzMDhcdTgzM2Nc''@;'; put 'put ''dTgzNGRcdTgzMTZcdTgzMjRcdTgzMjBcdTgzMzdcdTgzMmZcdTgzMjlcdTgzNDdcdTgzNDVcdTgzNGNcdTgzNTNcdTgzMWVcdTgzMmNcdTgzNGJcdTgzMjdcdTgzNDhcdTg2NTNcdTg2NTJcdTg2YTJcdTg2YThcdTg2OTZcdTg2OGRcdTg2OTFcdTg2OWVcdTg2ODdcdTg2OTdcdTg2ODZcdTg2''@;'; put 'put ''OGJcdTg2OWFcdTg2ODVcdTg2YTVcdTg2OTlcdTg2YTFcdTg2YTdcdTg2OTVcdTg2OThcdTg2OGVcdTg2OWRcdTg2OTBcdTg2OTRcdTg4NDNcdTg4NDRcdTg4NmRcdTg4NzVcdTg4NzZcdTg4NzJcdTg4ODBcdTg4NzFcdTg4N2ZcdTg4NmZcdTg4ODNcdTg4N2VcdTg4NzRcdTg4N2NcdThhMTJc''@;'; put 'put ''dThjNDdcdThjNTdcdThjN2JcdThjYTRcdThjYTNcdThkNzZcdThkNzhcdThkYjVcdThkYjdcdThkYjZcdThlZDFcdThlZDNcdThmZmVcdThmZjVcdTkwMDJcdThmZmZcdThmZmJcdTkwMDRcdThmZmNcdThmZjZcdTkwZDZcdTkwZTBcdTkwZDlcdTkwZGFcdTkwZTNcdTkwZGZcdTkwZTVcdTkw''@;'; put 'put ''ZDhcdTkwZGJcdTkwZDdcdTkwZGNcdTkwZTRcdTkxNTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTFdW2ddXT01NDAxNitnLHlbNTQwMTYrZ109X1syMTFdW2ddKTtmb3IoX1syMTJdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNGVcdTkxNGZcdTkxZDVcdTkxZTJcdTkxZGFcdTk2NWNcdTk2NWZcdTk2YmNcdTk4ZTNcdTlhZGZcdTliMmZcdTRlN2ZcdTUwNzBcdTUwNmFcdTUwNjFcdTUwNWVcdTUwNjBcdTUwNTNcdTUw''@;'; put 'put ''NGJcdTUwNWRcdTUwNzJcdTUwNDhcdTUwNGRcdTUwNDFcdTUwNWJcdTUwNGFcdTUwNjJcdTUwMTVcdTUwNDVcdTUwNWZcdTUwNjlcdTUwNmJcdTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNmVcdTUwNzNcdTUwNTdcdTUwNTFcdTUxZDBcdTUyNmJcdTUyNmRcdTUyNmNcdTUyNmVcdTUyZDZc''@;'; put 'put ''dTUyZDNcdTUzMmRcdTUzOWNcdTU1NzVcdTU1NzZcdTU1M2NcdTU1NGRcdTU1NTBcdTU1MzRcdTU1MmFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1MzVcdTU1MzBcdTU1NTJcdTU1NDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGNcdTU1MzJcdTU1NjVcdTU1NGVc''@;'; put 'put ''dTU1MzlcdTU1NDhcdTU1MmRcdTU1M2JcdTU1NDBcdTU1NGJcdTU3MGFcdTU3MDdcdTU3ZmJcdTU4MTRcdTU3ZTJcdTU3ZjZcdTU3ZGNcdTU3ZjRcdTU4MDBcdTU3ZWRcdTU3ZmRcdTU4MDhcdTU3ZjhcdTU4MGJcdTU3ZjNcdTU3Y2ZcdTU4MDdcdTU3ZWVcdTU3ZTNcdTU3ZjJcdTU3ZTVcdTU3''@;'; put 'put ''ZWNcdTU3ZTFcdTU4MGVcdTU3ZmNcdTU4MTBcdTU3ZTdcdTU4MDFcdTU4MGNcdTU3ZjFcdTU3ZTlcdTU3ZjBcdTU4MGRcdTU4MDRcdTU5NWNcdTVhNjBcdTVhNThcdTVhNTVcdTVhNjdcdTVhNWVcdTVhMzhcdTVhMzVcdTVhNmRcdTVhNTBcdTVhNWZcdTVhNjVcdTVhNmNcdTVhNTNcdTVhNjRc''@;'; put 'put ''dTVhNTdcdTVhNDNcdTVhNWRcdTVhNTJcdTVhNDRcdTVhNWJcdTVhNDhcdTVhOGVcdTVhM2VcdTVhNGRcdTVhMzlcdTVhNGNcdTVhNzBcdTVhNjlcdTVhNDdcdTVhNTFcdTVhNTZcdTVhNDJcdTVhNWNcdTViNzJcdTViNmVcdTViYzFcdTViYzBcdTVjNTlcdTVkMWVcdTVkMGJcdTVkMWRcdTVk''@;'; put 'put ''MWFcdTVkMjBcdTVkMGNcdTVkMjhcdTVkMGRcdTVkMjZcdTVkMjVcdTVkMGZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTJdW2ddXT01NDI3MitnLHlbNTQyNzIrZ109X1syMTJdW2ddKTtm''@;'; put 'put ''b3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkMzBcdTVkMTJcdTVkMjNcdTVkMWZcdTVkMmVcdTVlM2VcdTVlMzRcdTVlYjFcdTVlYjRcdTVlYjlcdTVlYjJcdTVlYjNcdTVmMzZcdTVmMzhcdTVmOWJcdTVmOTZcdTVm''@;'; put 'put ''OWZcdTYwOGFcdTYwOTBcdTYwODZcdTYwYmVcdTYwYjBcdTYwYmFcdTYwZDNcdTYwZDRcdTYwY2ZcdTYwZTRcdTYwZDlcdTYwZGRcdTYwYzhcdTYwYjFcdTYwZGJcdTYwYjdcdTYwY2FcdTYwYmZcdTYwYzNcdTYwY2RcdTYwYzBcdTYzMzJcdTYzNjVcdTYzOGFcdTYzODJcdTYzN2RcdTYzYmRc''@;'; put 'put ''dTYzOWVcdTYzYWRcdTYzOWRcdTYzOTdcdTYzYWJcdTYzOGVcdTYzNmZcdTYzODdcdTYzOTBcdTYzNmVcdTYzYWZcdTYzNzVcdTYzOWNcdTYzNmRcdTYzYWVcdTYzN2NcdTYzYTRcdTYzM2JcdTYzOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzNzhcdTYzODVc''@;'; put 'put ''dTYzODFcdTYzOTFcdTYzOGRcdTYzNzBcdTY1NTNcdTY1Y2RcdTY2NjVcdTY2NjFcdTY2NWJcdTY2NTlcdTY2NWNcdTY2NjJcdTY3MThcdTY4NzlcdTY4ODdcdTY4OTBcdTY4OWNcdTY4NmRcdTY4NmVcdTY4YWVcdTY4YWJcdTY5NTZcdTY4NmZcdTY4YTNcdTY4YWNcdTY4YTlcdTY4NzVcdTY4''@;'; put 'put ''NzRcdTY4YjJcdTY4OGZcdTY4NzdcdTY4OTJcdTY4N2NcdTY4NmJcdTY4NzJcdTY4YWFcdTY4ODBcdTY4NzFcdTY4N2VcdTY4OWJcdTY4OTZcdTY4OGJcdTY4YTBcdTY4ODlcdTY4YTRcdTY4NzhcdTY4N2JcdTY4OTFcdTY4OGNcdTY4OGFcdTY4N2RcdTZiMzZcdTZiMzNcdTZiMzdcdTZiMzhc''@;'; put 'put ''dTZiOTFcdTZiOGZcdTZiOGRcdTZiOGVcdTZiOGNcdTZjMmFcdTZkYzBcdTZkYWJcdTZkYjRcdTZkYjNcdTZlNzRcdTZkYWNcdTZkZTlcdTZkZTJcdTZkYjdcdTZkZjZcdTZkZDRcdTZlMDBcdTZkYzhcdTZkZTBcdTZkZGZcdTZkZDZcdTZkYmVcdTZkZTVcdTZkZGNcdTZkZGRcdTZkZGJcdTZk''@;'; put 'put ''ZjRcdTZkY2FcdTZkYmRcdTZkZWRcdTZkZjBcdTZkYmFcdTZkZDVcdTZkYzJcdTZkY2ZcdTZkYzlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTNdW2ddXT01NDUyOCtnLHlbNTQ1MjgrZ109''@;'; put 'put ''X1syMTNdW2ddKTtmb3IoX1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkZDBcdTZkZjJcdTZkZDNcdTZkZmRcdTZkZDdcdTZkY2RcdTZkZTNcdTZkYmJcdTcwZmFcdTcxMGRcdTcwZjdcdTcxMTdcdTcwZjRcdTcxMGNcdTcw''@;'; put 'put ''ZjBcdTcxMDRcdTcwZjNcdTcxMTBcdTcwZmNcdTcwZmZcdTcxMDZcdTcxMTNcdTcxMDBcdTcwZjhcdTcwZjZcdTcxMGJcdTcxMDJcdTcxMGVcdTcyN2VcdTcyN2JcdTcyN2NcdTcyN2ZcdTczMWRcdTczMTdcdTczMDdcdTczMTFcdTczMThcdTczMGFcdTczMDhcdTcyZmZcdTczMGZcdTczMWVc''@;'; put 'put ''dTczODhcdTczZjZcdTczZjhcdTczZjVcdTc0MDRcdTc0MDFcdTczZmRcdTc0MDdcdTc0MDBcdTczZmFcdTczZmNcdTczZmZcdTc0MGNcdTc0MGJcdTczZjRcdTc0MDhcdTc1NjRcdTc1NjNcdTc1Y2VcdTc1ZDJcdTc1Y2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTc1Y2JcdTc1Y2NcdTc1ZDFcdTc1ZDBcdTc2OGZcdTc2ODlcdTc2ZDNcdTc3MzlcdTc3MmZcdTc3MmRcdTc3MzFcdTc3MzJcdTc3MzRcdTc3MzNcdTc3M2RcdTc3MjVcdTc3M2JcdTc3MzVcdTc4NDhcdTc4NTJcdTc4NDlcdTc4NGRcdTc4NGFcdTc4NGNcdTc4MjZcdTc4NDVcdTc4NTBcdTc5''@;'; put 'put ''NjRcdTc5NjdcdTc5NjlcdTc5NmFcdTc5NjNcdTc5NmJcdTc5NjFcdTc5YmJcdTc5ZmFcdTc5ZjhcdTc5ZjZcdTc5ZjdcdTdhOGZcdTdhOTRcdTdhOTBcdTdiMzVcdTdiNDdcdTdiMzRcdTdiMjVcdTdiMzBcdTdiMjJcdTdiMjRcdTdiMzNcdTdiMThcdTdiMmFcdTdiMWRcdTdiMzFcdTdiMmJc''@;'; put 'put ''dTdiMmRcdTdiMmZcdTdiMzJcdTdiMzhcdTdiMWFcdTdiMjNcdTdjOTRcdTdjOThcdTdjOTZcdTdjYTNcdTdkMzVcdTdkM2RcdTdkMzhcdTdkMzZcdTdkM2FcdTdkNDVcdTdkMmNcdTdkMjlcdTdkNDFcdTdkNDdcdTdkM2VcdTdkM2ZcdTdkNGFcdTdkM2JcdTdkMjhcdTdmNjNcdTdmOTVcdTdm''@;'; put 'put ''OWNcdTdmOWRcdTdmOWJcdTdmY2FcdTdmY2JcdTdmY2RcdTdmZDBcdTdmZDFcdTdmYzdcdTdmY2ZcdTdmYzlcdTgwMWZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTRdW2ddXT01NDc4NCtn''@;'; put 'put ''LHlbNTQ3ODQrZ109X1syMTRdW2ddKTtmb3IoX1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMWVcdTgwMWJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThcdTgxMjVcdTgxMTlcdTgxMWJcdTgxMmRcdTgxMWZcdTgxMmNcdTgx''@;'; put 'put ''MWVcdTgxMjFcdTgxMTVcdTgxMjdcdTgxMWRcdTgxMjJcdTgyMTFcdTgyMzhcdTgyMzNcdTgyM2FcdTgyMzRcdTgyMzJcdTgyNzRcdTgzOTBcdTgzYTNcdTgzYThcdTgzOGRcdTgzN2FcdTgzNzNcdTgzYTRcdTgzNzRcdTgzOGZcdTgzODFcdTgzOTVcdTgzOTlcdTgzNzVcdTgzOTRcdTgzYTlc''@;'; put 'put ''dTgzN2RcdTgzODNcdTgzOGNcdTgzOWRcdTgzOWJcdTgzYWFcdTgzOGJcdTgzN2VcdTgzYTVcdTgzYWZcdTgzODhcdTgzOTdcdTgzYjBcdTgzN2ZcdTgzYTZcdTgzODdcdTgzYWVcdTgzNzZcdTgzOWFcdTg2NTlcdTg2NTZcdTg2YmZcdTg2YjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTg2YzJcdTg2YzFcdTg2YzVcdTg2YmFcdTg2YjBcdTg2YzhcdTg2YjlcdTg2YjNcdTg2YjhcdTg2Y2NcdTg2YjRcdTg2YmJcdTg2YmNcdTg2YzNcdTg2YmRcdTg2YmVcdTg4NTJcdTg4ODlcdTg4OTVcdTg4YThcdTg4YTJcdTg4YWFcdTg4OWFcdTg4OTFcdTg4YTFcdTg4''@;'; put 'put ''OWZcdTg4OThcdTg4YTdcdTg4OTlcdTg4OWJcdTg4OTdcdTg4YTRcdTg4YWNcdTg4OGNcdTg4OTNcdTg4OGVcdTg5ODJcdTg5ZDZcdTg5ZDlcdTg5ZDVcdThhMzBcdThhMjdcdThhMmNcdThhMWVcdThjMzlcdThjM2JcdThjNWNcdThjNWRcdThjN2RcdThjYTVcdThkN2RcdThkN2JcdThkNzlc''@;'; put 'put ''dThkYmNcdThkYzJcdThkYjlcdThkYmZcdThkYzFcdThlZDhcdThlZGVcdThlZGRcdThlZGNcdThlZDdcdThlZTBcdThlZTFcdTkwMjRcdTkwMGJcdTkwMTFcdTkwMWNcdTkwMGNcdTkwMjFcdTkwZWZcdTkwZWFcdTkwZjBcdTkwZjRcdTkwZjJcdTkwZjNcdTkwZDRcdTkwZWJcdTkwZWNcdTkw''@;'; put 'put ''ZTlcdTkxNTZcdTkxNThcdTkxNWFcdTkxNTNcdTkxNTVcdTkxZWNcdTkxZjRcdTkxZjFcdTkxZjNcdTkxZjhcdTkxZTRcdTkxZjlcdTkxZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTVd''@;'; put 'put ''W2ddXT01NTA0MCtnLHlbNTUwNDArZ109X1syMTVdW2ddKTtmb3IoX1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxZWJcdTkxZjdcdTkxZThcdTkxZWVcdTk1N2FcdTk1ODZcdTk1ODhcdTk2N2NcdTk2NmRcdTk2NmJcdTk2''@;'; put 'put ''NzFcdTk2NmZcdTk2YmZcdTk3NmFcdTk4MDRcdTk4ZTVcdTk5OTdcdTUwOWJcdTUwOTVcdTUwOTRcdTUwOWVcdTUwOGJcdTUwYTNcdTUwODNcdTUwOGNcdTUwOGVcdTUwOWRcdTUwNjhcdTUwOWNcdTUwOTJcdTUwODJcdTUwODdcdTUxNWZcdTUxZDRcdTUzMTJcdTUzMTFcdTUzYTRcdTUzYTdc''@;'; put 'put ''dTU1OTFcdTU1YThcdTU1YTVcdTU1YWRcdTU1NzdcdTU2NDVcdTU1YTJcdTU1OTNcdTU1ODhcdTU1OGZcdTU1YjVcdTU1ODFcdTU1YTNcdTU1OTJcdTU1YTRcdTU1N2RcdTU1OGNcdTU1YTZcdTU1N2ZcdTU1OTVcdTU1YTFcdTU1OGVcdTU3MGNcdTU4MjlcdTU4MzdcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4MTlcdTU4MWVcdTU4MjdcdTU4MjNcdTU4MjhcdTU3ZjVcdTU4NDhcdTU4MjVcdTU4MWNcdTU4MWJcdTU4MzNcdTU4M2ZcdTU4MzZcdTU4MmVcdTU4MzlcdTU4MzhcdTU4MmRcdTU4MmNcdTU4M2JcdTU5NjFcdTVhYWZcdTVhOTRcdTVhOWZcdTVh''@;'; put 'put ''N2FcdTVhYTJcdTVhOWVcdTVhNzhcdTVhYTZcdTVhN2NcdTVhYTVcdTVhYWNcdTVhOTVcdTVhYWVcdTVhMzdcdTVhODRcdTVhOGFcdTVhOTdcdTVhODNcdTVhOGJcdTVhYTlcdTVhN2JcdTVhN2RcdTVhOGNcdTVhOWNcdTVhOGZcdTVhOTNcdTVhOWRcdTViZWFcdTViY2RcdTViY2JcdTViZDRc''@;'; put 'put ''dTViZDFcdTViY2FcdTViY2VcdTVjMGNcdTVjMzBcdTVkMzdcdTVkNDNcdTVkNmJcdTVkNDFcdTVkNGJcdTVkM2ZcdTVkMzVcdTVkNTFcdTVkNGVcdTVkNTVcdTVkMzNcdTVkM2FcdTVkNTJcdTVkM2RcdTVkMzFcdTVkNTlcdTVkNDJcdTVkMzlcdTVkNDlcdTVkMzhcdTVkM2NcdTVkMzJcdTVk''@;'; put 'put ''MzZcdTVkNDBcdTVkNDVcdTVlNDRcdTVlNDFcdTVmNThcdTVmYTZcdTVmYTVcdTVmYWJcdTYwYzlcdTYwYjlcdTYwY2NcdTYwZTJcdTYwY2VcdTYwYzRcdTYxMTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNl1bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1syMTZdW2ddXT01NTI5NitnLHlbNTUyOTYrZ109X1syMTZdW2ddKTtmb3IoX1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwZjJcdTYxMGFcdTYxMTZcdTYxMDVcdTYwZjVcdTYxMTNcdTYwZjhcdTYwZmNcdTYw''@;'; put 'put ''ZmVcdTYwYzFcdTYxMDNcdTYxMThcdTYxMWRcdTYxMTBcdTYwZmZcdTYxMDRcdTYxMGJcdTYyNGFcdTYzOTRcdTYzYjFcdTYzYjBcdTYzY2VcdTYzZTVcdTYzZThcdTYzZWZcdTYzYzNcdTY0OWRcdTYzZjNcdTYzY2FcdTYzZTBcdTYzZjZcdTYzZDVcdTYzZjJcdTYzZjVcdTY0NjFcdTYzZGZc''@;'; put 'put ''dTYzYmVcdTYzZGRcdTYzZGNcdTYzYzRcdTYzZDhcdTYzZDNcdTYzYzJcdTYzYzdcdTYzY2NcdTYzY2JcdTYzYzhcdTYzZjBcdTYzZDdcdTYzZDlcdTY1MzJcdTY1NjdcdTY1NmFcdTY1NjRcdTY1NWNcdTY1NjhcdTY1NjVcdTY1OGNcdTY1OWRcdTY1OWVcdTY1YWVcdTY1ZDBcdTY1ZDJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2N2NcdTY2NmNcdTY2N2JcdTY2ODBcdTY2NzFcdTY2NzlcdTY2NmFcdTY2NzJcdTY3MDFcdTY5MGNcdTY4ZDNcdTY5MDRcdTY4ZGNcdTY5MmFcdTY4ZWNcdTY4ZWFcdTY4ZjFcdTY5MGZcdTY4ZDZcdTY4ZjdcdTY4ZWJcdTY4''@;'; put 'put ''ZTRcdTY4ZjZcdTY5MTNcdTY5MTBcdTY4ZjNcdTY4ZTFcdTY5MDdcdTY4Y2NcdTY5MDhcdTY5NzBcdTY4YjRcdTY5MTFcdTY4ZWZcdTY4YzZcdTY5MTRcdTY4ZjhcdTY4ZDBcdTY4ZmRcdTY4ZmNcdTY4ZThcdTY5MGJcdTY5MGFcdTY5MTdcdTY4Y2VcdTY4YzhcdTY4ZGRcdTY4ZGVcdTY4ZTZc''@;'; put 'put ''dTY4ZjRcdTY4ZDFcdTY5MDZcdTY4ZDRcdTY4ZTlcdTY5MTVcdTY5MjVcdTY4YzdcdTZiMzlcdTZiM2JcdTZiM2ZcdTZiM2NcdTZiOTRcdTZiOTdcdTZiOTlcdTZiOTVcdTZiYmRcdTZiZjBcdTZiZjJcdTZiZjNcdTZjMzBcdTZkZmNcdTZlNDZcdTZlNDdcdTZlMWZcdTZlNDlcdTZlODhcdTZl''@;'; put 'put ''M2NcdTZlM2RcdTZlNDVcdTZlNjJcdTZlMmJcdTZlM2ZcdTZlNDFcdTZlNWRcdTZlNzNcdTZlMWNcdTZlMzNcdTZlNGJcdTZlNDBcdTZlNTFcdTZlM2JcdTZlMDNcdTZlMmVcdTZlNWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxN11bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1syMTddW2ddXT01NTU1MitnLHlbNTU1NTIrZ109X1syMTddW2ddKTtmb3IoX1syMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlNjhcdTZlNWNcdTZlNjFcdTZlMzFcdTZlMjhcdTZlNjBcdTZl''@;'; put 'put ''NzFcdTZlNmJcdTZlMzlcdTZlMjJcdTZlMzBcdTZlNTNcdTZlNjVcdTZlMjdcdTZlNzhcdTZlNjRcdTZlNzdcdTZlNTVcdTZlNzlcdTZlNTJcdTZlNjZcdTZlMzVcdTZlMzZcdTZlNWFcdTcxMjBcdTcxMWVcdTcxMmZcdTcwZmJcdTcxMmVcdTcxMzFcdTcxMjNcdTcxMjVcdTcxMjJcdTcxMzJc''@;'; put 'put ''dTcxMWZcdTcxMjhcdTcxM2FcdTcxMWJcdTcyNGJcdTcyNWFcdTcyODhcdTcyODlcdTcyODZcdTcyODVcdTcyOGJcdTczMTJcdTczMGJcdTczMzBcdTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMmRcdTczMjZcdTczMjNcdTczMzVcdTczMGNcdTc0MmVcdTc0MmNcdTc0MzBcdTc0''@;'; put 'put ''MmJcdTc0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWFcdTc0MjFcdTc0MmRcdTc0MzFcdTc0MjRcdTc0MjNcdTc0MWRcdTc0MjlcdTc0MjBcdTc0MzJcdTc0ZmJcdTc1MmZcdTc1NmZcdTc1NmNcdTc1ZTdcdTc1ZGFcdTc1ZTFcdTc1ZTZcdTc1ZGRcdTc1''@;'; put 'put ''ZGZcdTc1ZTRcdTc1ZDdcdTc2OTVcdTc2OTJcdTc2ZGFcdTc3NDZcdTc3NDdcdTc3NDRcdTc3NGRcdTc3NDVcdTc3NGFcdTc3NGVcdTc3NGJcdTc3NGNcdTc3ZGVcdTc3ZWNcdTc4NjBcdTc4NjRcdTc4NjVcdTc4NWNcdTc4NmRcdTc4NzFcdTc4NmFcdTc4NmVcdTc4NzBcdTc4NjlcdTc4Njhc''@;'; put 'put ''dTc4NWVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5NzJcdTc5NzBcdTdhMDJcdTdhMGFcdTdhMDNcdTdhMGNcdTdhMDRcdTdhOTlcdTdhZTZcdTdhZTRcdTdiNGFcdTdiM2JcdTdiNDRcdTdiNDhcdTdiNGNcdTdiNGVcdTdiNDBcdTdiNThcdTdiNDVcdTdjYTJcdTdjOWVcdTdjYThcdTdjYTFcdTdk''@;'; put 'put ''NThcdTdkNmZcdTdkNjNcdTdkNTNcdTdkNTZcdTdkNjdcdTdkNmFcdTdkNGZcdTdkNmRcdTdkNWNcdTdkNmJcdTdkNTJcdTdkNTRcdTdkNjlcdTdkNTFcdTdkNWZcdTdkNGVcdTdmM2VcdTdmM2ZcdTdmNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMThdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzIxOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMThdW2ddXT01NTgwOCtnLHlbNTU4MDgrZ109X1syMThdW2ddKTtmb3IoX1syMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNjZcdTdmYTJcdTdmYTBcdTdmYTFcdTdm''@;'; put 'put ''ZDdcdTgwNTFcdTgwNGZcdTgwNTBcdTgwZmVcdTgwZDRcdTgxNDNcdTgxNGFcdTgxNTJcdTgxNGZcdTgxNDdcdTgxM2RcdTgxNGRcdTgxM2FcdTgxZTZcdTgxZWVcdTgxZjdcdTgxZjhcdTgxZjlcdTgyMDRcdTgyM2NcdTgyM2RcdTgyM2ZcdTgyNzVcdTgzM2JcdTgzY2ZcdTgzZjlcdTg0MjNc''@;'; put 'put ''dTgzYzBcdTgzZThcdTg0MTJcdTgzZTdcdTgzZTRcdTgzZmNcdTgzZjZcdTg0MTBcdTgzYzZcdTgzYzhcdTgzZWJcdTgzZTNcdTgzYmZcdTg0MDFcdTgzZGRcdTgzZTVcdTgzZDhcdTgzZmZcdTgzZTFcdTgzY2JcdTgzY2VcdTgzZDZcdTgzZjVcdTgzYzlcdTg0MDlcdTg0MGZcdTgzZGVcdTg0''@;'; put 'put ''MTFcdTg0MDZcdTgzYzJcdTgzZjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzZDVcdTgzZmFcdTgzYzdcdTgzZDFcdTgzZWFcdTg0MTNcdTgzYzNcdTgzZWNcdTgzZWVcdTgzYzRcdTgzZmJcdTgzZDdcdTgzZTJcdTg0MWJcdTgzZGJcdTgzZmVcdTg2ZDhcdTg2''@;'; put 'put ''ZTJcdTg2ZTZcdTg2ZDNcdTg2ZTNcdTg2ZGFcdTg2ZWFcdTg2ZGRcdTg2ZWJcdTg2ZGNcdTg2ZWNcdTg2ZTlcdTg2ZDdcdTg2ZThcdTg2ZDFcdTg4NDhcdTg4NTZcdTg4NTVcdTg4YmFcdTg4ZDdcdTg4YjlcdTg4YjhcdTg4YzBcdTg4YmVcdTg4YjZcdTg4YmNcdTg4YjdcdTg4YmRcdTg4YjJc''@;'; put 'put ''dTg5MDFcdTg4YzlcdTg5OTVcdTg5OThcdTg5OTdcdTg5ZGRcdTg5ZGFcdTg5ZGJcdThhNGVcdThhNGRcdThhMzlcdThhNTlcdThhNDBcdThhNTdcdThhNThcdThhNDRcdThhNDVcdThhNTJcdThhNDhcdThhNTFcdThhNGFcdThhNGNcdThhNGZcdThjNWZcdThjODFcdThjODBcdThjYmFcdThj''@;'; put 'put ''YmVcdThjYjBcdThjYjlcdThjYjVcdThkODRcdThkODBcdThkODlcdThkZDhcdThkZDNcdThkY2RcdThkYzdcdThkZDZcdThkZGNcdThkY2ZcdThkZDVcdThkZDlcdThkYzhcdThkZDdcdThkYzVcdThlZWZcdThlZjdcdThlZmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTldLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzIxOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTldW2ddXT01NjA2NCtnLHlbNTYwNjQrZ109X1syMTldW2ddKTtmb3IoX1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlZjlcdThlZTZcdThl''@;'; put 'put ''ZWVcdThlZTVcdThlZjVcdThlZTdcdThlZThcdThlZjZcdThlZWJcdThlZjFcdThlZWNcdThlZjRcdThlZTlcdTkwMmRcdTkwMzRcdTkwMmZcdTkxMDZcdTkxMmNcdTkxMDRcdTkwZmZcdTkwZmNcdTkxMDhcdTkwZjlcdTkwZmJcdTkxMDFcdTkxMDBcdTkxMDdcdTkxMDVcdTkxMDNcdTkxNjFc''@;'; put 'put ''dTkxNjRcdTkxNWZcdTkxNjJcdTkxNjBcdTkyMDFcdTkyMGFcdTkyMjVcdTkyMDNcdTkyMWFcdTkyMjZcdTkyMGZcdTkyMGNcdTkyMDBcdTkyMTJcdTkxZmZcdTkxZmRcdTkyMDZcdTkyMDRcdTkyMjdcdTkyMDJcdTkyMWNcdTkyMjRcdTkyMTlcdTkyMTdcdTkyMDVcdTkyMTZcdTk1N2JcdTk1''@;'; put 'put ''OGRcdTk1OGNcdTk1OTBcdTk2ODdcdTk2N2VcdTk2ODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODlcdTk2ODNcdTk2ODBcdTk2YzJcdTk2YzhcdTk2YzNcdTk2ZjFcdTk2ZjBcdTk3NmNcdTk3NzBcdTk3NmVcdTk4MDdcdTk4YTlcdTk4ZWJcdTljZTZcdTll''@;'; put 'put ''ZjlcdTRlODNcdTRlODRcdTRlYjZcdTUwYmRcdTUwYmZcdTUwYzZcdTUwYWVcdTUwYzRcdTUwY2FcdTUwYjRcdTUwYzhcdTUwYzJcdTUwYjBcdTUwYzFcdTUwYmFcdTUwYjFcdTUwY2JcdTUwYzlcdTUwYjZcdTUwYjhcdTUxZDdcdTUyN2FcdTUyNzhcdTUyN2JcdTUyN2NcdTU1YzNcdTU1ZGJc''@;'; put 'put ''dTU1Y2NcdTU1ZDBcdTU1Y2JcdTU1Y2FcdTU1ZGRcdTU1YzBcdTU1ZDRcdTU1YzRcdTU1ZTlcdTU1YmZcdTU1ZDJcdTU1OGRcdTU1Y2ZcdTU1ZDVcdTU1ZTJcdTU1ZDZcdTU1YzhcdTU1ZjJcdTU1Y2RcdTU1ZDlcdTU1YzJcdTU3MTRcdTU4NTNcdTU4NjhcdTU4NjRcdTU4NGZcdTU4NGRcdTU4''@;'; put 'put ''NDlcdTU4NmZcdTU4NTVcdTU4NGVcdTU4NWRcdTU4NTlcdTU4NjVcdTU4NWJcdTU4M2RcdTU4NjNcdTU4NzFcdTU4ZmNcdTVhYzdcdTVhYzRcdTVhY2JcdTVhYmFcdTVhYjhcdTVhYjFcdTVhYjVcdTVhYjBcdTVhYmZcdTVhYzhcdTVhYmJcdTVhYzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1syMjBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjBdW2ddXT01NjMyMCtnLHlbNTYzMjArZ109X1syMjBdW2ddKTtmb3IoX1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVh''@;'; put 'put ''YjdcdTVhYzBcdTVhY2FcdTVhYjRcdTVhYjZcdTVhY2RcdTVhYjlcdTVhOTBcdTViZDZcdTViZDhcdTViZDlcdTVjMWZcdTVjMzNcdTVkNzFcdTVkNjNcdTVkNGFcdTVkNjVcdTVkNzJcdTVkNmNcdTVkNWVcdTVkNjhcdTVkNjdcdTVkNjJcdTVkZjBcdTVlNGZcdTVlNGVcdTVlNGFcdTVlNGRc''@;'; put 'put ''dTVlNGJcdTVlYzVcdTVlY2NcdTVlYzZcdTVlY2JcdTVlYzdcdTVmNDBcdTVmYWZcdTVmYWRcdTYwZjdcdTYxNDlcdTYxNGFcdTYxMmJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMmVcdTYxNDZcdTYxMmZcdTYxNGZcdTYxMjlcdTYxNDBcdTYyMjBcdTkxNjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYz''@;'; put 'put ''YzVcdTYzZjFcdTYzZWJcdTY0MTBcdTY0MTJcdTY0MDlcdTY0MjBcdTY0MjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0MzNcdTY0NDNcdTY0MWZcdTY0MTVcdTY0MThcdTY0MzlcdTY0MzdcdTY0MjJcdTY0MjNcdTY0MGNcdTY0MjZcdTY0MzBcdTY0MjhcdTY0''@;'; put 'put ''NDFcdTY0MzVcdTY0MmZcdTY0MGFcdTY0MWFcdTY0NDBcdTY0MjVcdTY0MjdcdTY0MGJcdTYzZTdcdTY0MWJcdTY0MmVcdTY0MjFcdTY0MGVcdTY1NmZcdTY1OTJcdTY1ZDNcdTY2ODZcdTY2OGNcdTY2OTVcdTY2OTBcdTY2OGJcdTY2OGFcdTY2OTlcdTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZc''@;'; put 'put ''dTY5NWZcdTY5MzhcdTY5NGVcdTY5NjJcdTY5NzFcdTY5M2ZcdTY5NDVcdTY5NmFcdTY5MzlcdTY5NDJcdTY5NTdcdTY5NTlcdTY5N2FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NmNcdTY5MzNcdTY5M2RcdTY5NjVcdTY4ZjBcdTY5NzhcdTY5MzRcdTY5NjlcdTY5NDBcdTY5NmZcdTY5NDRcdTY5''@;'; put 'put ''NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NGNcdTY5M2JcdTY5NGJcdTY5MzdcdTY5NWNcdTY5NGZcdTY5NTFcdTY5MzJcdTY5NTJcdTY5MmZcdTY5N2JcdTY5M2NcdTZiNDZcdTZiNDVcdTZiNDNcdTZiNDJcdTZiNDhcdTZiNDFcdTZiOWJcdWZhMGRcdTZiZmJcdTZiZmNcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1syMjFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjFdW2ddXT01NjU3NitnLHlbNTY1NzYrZ109X1syMjFdW2ddKTtmb3IoX1syMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTZiZjlcdTZiZjdcdTZiZjhcdTZlOWJcdTZlZDZcdTZlYzhcdTZlOGZcdTZlYzBcdTZlOWZcdTZlOTNcdTZlOTRcdTZlYTBcdTZlYjFcdTZlYjlcdTZlYzZcdTZlZDJcdTZlYmRcdTZlYzFcdTZlOWVcdTZlYzlcdTZlYjdcdTZlYjBcdTZlY2RcdTZlYTZcdTZlY2ZcdTZlYjJc''@;'; put 'put ''dTZlYmVcdTZlYzNcdTZlZGNcdTZlZDhcdTZlOTlcdTZlOTJcdTZlOGVcdTZlOGRcdTZlYTRcdTZlYTFcdTZlYmZcdTZlYjNcdTZlZDBcdTZlY2FcdTZlOTdcdTZlYWVcdTZlYTNcdTcxNDdcdTcxNTRcdTcxNTJcdTcxNjNcdTcxNjBcdTcxNDFcdTcxNWRcdTcxNjJcdTcxNzJcdTcxNzhcdTcx''@;'; put 'put ''NmFcdTcxNjFcdTcxNDJcdTcxNThcdTcxNDNcdTcxNGJcdTcxNzBcdTcxNWZcdTcxNTBcdTcxNTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDRcdTcxNGRcdTcxNWFcdTcyNGZcdTcyOGRcdTcyOGNcdTcyOTFcdTcyOTBcdTcyOGVcdTczM2NcdTczNDJcdTcz''@;'; put 'put ''M2JcdTczM2FcdTczNDBcdTczNGFcdTczNDlcdTc0NDRcdTc0NGFcdTc0NGJcdTc0NTJcdTc0NTFcdTc0NTdcdTc0NDBcdTc0NGZcdTc0NTBcdTc0NGVcdTc0NDJcdTc0NDZcdTc0NGRcdTc0NTRcdTc0ZTFcdTc0ZmZcdTc0ZmVcdTc0ZmRcdTc1MWRcdTc1NzlcdTc1NzdcdTY5ODNcdTc1ZWZc''@;'; put 'put ''dTc2MGZcdTc2MDNcdTc1ZjdcdTc1ZmVcdTc1ZmNcdTc1ZjlcdTc1ZjhcdTc2MTBcdTc1ZmJcdTc1ZjZcdTc1ZWRcdTc1ZjVcdTc1ZmRcdTc2OTlcdTc2YjVcdTc2ZGRcdTc3NTVcdTc3NWZcdTc3NjBcdTc3NTJcdTc3NTZcdTc3NWFcdTc3NjlcdTc3NjdcdTc3NTRcdTc3NTlcdTc3NmRcdTc3''@;'; put 'put ''ZTBcdTc4ODdcdTc4OWFcdTc4OTRcdTc4OGZcdTc4ODRcdTc4OTVcdTc4ODVcdTc4ODZcdTc4YTFcdTc4ODNcdTc4NzlcdTc4OTlcdTc4ODBcdTc4OTZcdTc4N2JcdTc5N2NcdTc5ODJcdTc5N2RcdTc5NzlcdTdhMTFcdTdhMThcdTdhMTlcdTdhMTJcdTdhMTdcdTdhMTVcdTdhMjJcdTdhMTNc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjJdW2ddXT01NjgzMitnLHlbNTY4MzIrZ109X1syMjJdW2ddKTtmb3IoX1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMWJcdTdhMTBcdTdhYTNcdTdhYTJcdTdhOWVcdTdhZWJcdTdiNjZcdTdiNjRcdTdiNmRcdTdiNzRcdTdiNjlcdTdiNzJcdTdiNjVcdTdiNzNcdTdiNzFcdTdiNzBcdTdiNjFcdTdiNzhcdTdiNzZcdTdiNjNcdTdjYjJcdTdjYjRcdTdjYWZcdTdkODhc''@;'; put 'put ''dTdkODZcdTdkODBcdTdkOGRcdTdkN2ZcdTdkODVcdTdkN2FcdTdkOGVcdTdkN2JcdTdkODNcdTdkN2NcdTdkOGNcdTdkOTRcdTdkODRcdTdkN2RcdTdkOTJcdTdmNmRcdTdmNmJcdTdmNjdcdTdmNjhcdTdmNmNcdTdmYTZcdTdmYTVcdTdmYTdcdTdmZGJcdTdmZGNcdTgwMjFcdTgxNjRcdTgx''@;'; put 'put ''NjBcdTgxNzdcdTgxNWNcdTgxNjlcdTgxNWJcdTgxNjJcdTgxNzJcdTY3MjFcdTgxNWVcdTgxNzZcdTgxNjdcdTgxNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDRcdTgxNjFcdTgyMWRcdTgyNDlcdTgyNDRcdTgyNDBcdTgyNDJcdTgyNDVcdTg0ZjFcdTg0''@;'; put 'put ''M2ZcdTg0NTZcdTg0NzZcdTg0NzlcdTg0OGZcdTg0OGRcdTg0NjVcdTg0NTFcdTg0NDBcdTg0ODZcdTg0NjdcdTg0MzBcdTg0NGRcdTg0N2RcdTg0NWFcdTg0NTlcdTg0NzRcdTg0NzNcdTg0NWRcdTg1MDdcdTg0NWVcdTg0MzdcdTg0M2FcdTg0MzRcdTg0N2FcdTg0NDNcdTg0NzhcdTg0MzJc''@;'; put 'put ''dTg0NDVcdTg0MjlcdTgzZDlcdTg0NGJcdTg0MmZcdTg0NDJcdTg0MmRcdTg0NWZcdTg0NzBcdTg0MzlcdTg0NGVcdTg0NGNcdTg0NTJcdTg0NmZcdTg0YzVcdTg0OGVcdTg0M2JcdTg0NDdcdTg0MzZcdTg0MzNcdTg0NjhcdTg0N2VcdTg0NDRcdTg0MmJcdTg0NjBcdTg0NTRcdTg0NmVcdTg0''@;'; put 'put ''NTBcdTg3MGJcdTg3MDRcdTg2ZjdcdTg3MGNcdTg2ZmFcdTg2ZDZcdTg2ZjVcdTg3NGRcdTg2ZjhcdTg3MGVcdTg3MDlcdTg3MDFcdTg2ZjZcdTg3MGRcdTg3MDVcdTg4ZDZcdTg4Y2JcdTg4Y2RcdTg4Y2VcdTg4ZGVcdTg4ZGJcdTg4ZGFcdTg4Y2NcdTg4ZDBcdTg5ODVcdTg5OWJcdTg5ZGZc''@;'; put 'put ''dTg5ZTVcdTg5ZTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjNdW2ddXT01NzA4OCtnLHlbNTcwODgrZ109X1syMjNdW2ddKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTFcdTg5ZTBcdTg5ZTJcdTg5ZGNcdTg5ZTZcdThhNzZcdThhODZcdThhN2ZcdThhNjFcdThhM2ZcdThhNzdcdThhODJcdThhODRcdThhNzVcdThhODNcdThhODFcdThhNzRcdThhN2FcdThjM2NcdThjNGJcdThjNGFcdThjNjVc''@;'; put 'put ''dThjNjRcdThjNjZcdThjODZcdThjODRcdThjODVcdThjY2NcdThkNjhcdThkNjlcdThkOTFcdThkOGNcdThkOGVcdThkOGZcdThkOGRcdThkOTNcdThkOTRcdThkOTBcdThkOTJcdThkZjBcdThkZTBcdThkZWNcdThkZjFcdThkZWVcdThkZDBcdThkZTlcdThkZTNcdThkZTJcdThkZTdcdThk''@;'; put 'put ''ZjJcdThkZWJcdThkZjRcdThmMDZcdThlZmZcdThmMDFcdThmMDBcdThmMDVcdThmMDdcdThmMDhcdThmMDJcdThmMGJcdTkwNTJcdTkwM2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNDRcdTkwNDlcdTkwM2RcdTkxMTBcdTkxMGRcdTkxMGZcdTkxMTFcdTkx''@;'; put 'put ''MTZcdTkxMTRcdTkxMGJcdTkxMGVcdTkxNmVcdTkxNmZcdTkyNDhcdTkyNTJcdTkyMzBcdTkyM2FcdTkyNjZcdTkyMzNcdTkyNjVcdTkyNWVcdTkyODNcdTkyMmVcdTkyNGFcdTkyNDZcdTkyNmRcdTkyNmNcdTkyNGZcdTkyNjBcdTkyNjdcdTkyNmZcdTkyMzZcdTkyNjFcdTkyNzBcdTkyMzFc''@;'; put 'put ''dTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNGVcdTkyNTNcdTkyNGNcdTkyNTZcdTkyMzJcdTk1OWZcdTk1OWNcdTk1OWVcdTk1OWJcdTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Y2VcdTk2ZmFcdTk2ZmRcdTk2ZjhcdTk2ZjVcdTk3NzNcdTk3NzdcdTk3NzhcdTk3NzJcdTk4MGZcdTk4''@;'; put 'put ''MGRcdTk4MGVcdTk4YWNcdTk4ZjZcdTk4ZjlcdTk5YWZcdTk5YjJcdTk5YjBcdTk5YjVcdTlhYWRcdTlhYWJcdTliNWJcdTljZWFcdTljZWRcdTljZTdcdTllODBcdTllZmRcdTUwZTZcdTUwZDRcdTUwZDdcdTUwZThcdTUwZjNcdTUwZGJcdTUwZWFcdTUwZGRcdTUwZTRcdTUwZDNcdTUwZWNc''@;'; put 'put ''dTUwZjBcdTUwZWZcdTUwZTNcdTUwZTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjRdW2ddXT01NzM0NCtnLHlbNTczNDQrZ109X1syMjRdW2ddKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxZDhcdTUyODBcdTUyODFcdTUyZTlcdTUyZWJcdTUzMzBcdTUzYWNcdTU2MjdcdTU2MTVcdTU2MGNcdTU2MTJcdTU1ZmNcdTU2MGZcdTU2MWNcdTU2MDFcdTU2MTNcdTU2MDJcdTU1ZmFcdTU2MWRcdTU2MDRc''@;'; put 'put ''dTU1ZmZcdTU1ZjlcdTU4ODlcdTU4N2NcdTU4OTBcdTU4OThcdTU4ODZcdTU4ODFcdTU4N2ZcdTU4NzRcdTU4OGJcdTU4N2FcdTU4ODdcdTU4OTFcdTU4OGVcdTU4NzZcdTU4ODJcdTU4ODhcdTU4N2JcdTU4OTRcdTU4OGZcdTU4ZmVcdTU5NmJcdTVhZGNcdTVhZWVcdTVhZTVcdTVhZDVcdTVh''@;'; put 'put ''ZWFcdTVhZGFcdTVhZWRcdTVhZWJcdTVhZjNcdTVhZTJcdTVhZTBcdTVhZGJcdTVhZWNcdTVhZGVcdTVhZGRcdTVhZDlcdTVhZThcdTVhZGZcdTViNzdcdTViZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViZTNcdTVjNjNcdTVkODJcdTVkODBcdTVkN2RcdTVk''@;'; put 'put ''ODZcdTVkN2FcdTVkODFcdTVkNzdcdTVkOGFcdTVkODlcdTVkODhcdTVkN2VcdTVkN2NcdTVkOGRcdTVkNzlcdTVkN2ZcdTVlNThcdTVlNTlcdTVlNTNcdTVlZDhcdTVlZDFcdTVlZDdcdTVlY2VcdTVlZGNcdTVlZDVcdTVlZDlcdTVlZDJcdTVlZDRcdTVmNDRcdTVmNDNcdTVmNmZcdTVmYjZc''@;'; put 'put ''dTYxMmNcdTYxMjhcdTYxNDFcdTYxNWVcdTYxNzFcdTYxNzNcdTYxNTJcdTYxNTNcdTYxNzJcdTYxNmNcdTYxODBcdTYxNzRcdTYxNTRcdTYxN2FcdTYxNWJcdTYxNjVcdTYxM2JcdTYxNmFcdTYxNjFcdTYxNTZcdTYyMjlcdTYyMjdcdTYyMmJcdTY0MmJcdTY0NGRcdTY0NWJcdTY0NWRcdTY0''@;'; put 'put ''NzRcdTY0NzZcdTY0NzJcdTY0NzNcdTY0N2RcdTY0NzVcdTY0NjZcdTY0YTZcdTY0NGVcdTY0ODJcdTY0NWVcdTY0NWNcdTY0NGJcdTY0NTNcdTY0NjBcdTY0NTBcdTY0N2ZcdTY0M2ZcdTY0NmNcdTY0NmJcdTY0NTlcdTY0NjVcdTY0NzdcdTY1NzNcdTY1YTBcdTY2YTFcdTY2YTBcdTY2OWZc''@;'; put 'put ''dTY3MDVcdTY3MDRcdTY3MjJcdTY5YjFcdTY5YjZcdTY5YzlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjVdW2ddXT01NzYwMCtnLHlbNTc2MDArZ109X1syMjVdW2ddKTtmb3IoX1syMjZd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5YTBcdTY5Y2VcdTY5OTZcdTY5YjBcdTY5YWNcdTY5YmNcdTY5OTFcdTY5OTlcdTY5OGVcdTY5YTdcdTY5OGRcdTY5YTlcdTY5YmVcdTY5YWZcdTY5YmZcdTY5YzRcdTY5YmRcdTY5YTRc''@;'; put 'put ''dTY5ZDRcdTY5YjlcdTY5Y2FcdTY5OWFcdTY5Y2ZcdTY5YjNcdTY5OTNcdTY5YWFcdTY5YTFcdTY5OWVcdTY5ZDlcdTY5OTdcdTY5OTBcdTY5YzJcdTY5YjVcdTY5YTVcdTY5YzZcdTZiNGFcdTZiNGRcdTZiNGJcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYzNcdTZiYzRcdTZiZmVcdTZlY2VcdTZl''@;'; put 'put ''ZjVcdTZlZjFcdTZmMDNcdTZmMjVcdTZlZjhcdTZmMzdcdTZlZmJcdTZmMmVcdTZmMDlcdTZmNGVcdTZmMTlcdTZmMWFcdTZmMjdcdTZmMThcdTZmM2JcdTZmMTJcdTZlZWRcdTZmMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmMzZcdTZmNzNcdTZlZjlcdTZl''@;'; put 'put ''ZWVcdTZmMmRcdTZmNDBcdTZmMzBcdTZmM2NcdTZmMzVcdTZlZWJcdTZmMDdcdTZmMGVcdTZmNDNcdTZmMDVcdTZlZmRcdTZlZjZcdTZmMzlcdTZmMWNcdTZlZmNcdTZmM2FcdTZmMWZcdTZmMGRcdTZmMWVcdTZmMDhcdTZmMjFcdTcxODdcdTcxOTBcdTcxODlcdTcxODBcdTcxODVcdTcxODJc''@;'; put 'put ''dTcxOGZcdTcxN2JcdTcxODZcdTcxODFcdTcxOTdcdTcyNDRcdTcyNTNcdTcyOTdcdTcyOTVcdTcyOTNcdTczNDNcdTczNGRcdTczNTFcdTczNGNcdTc0NjJcdTc0NzNcdTc0NzFcdTc0NzVcdTc0NzJcdTc0NjdcdTc0NmVcdTc1MDBcdTc1MDJcdTc1MDNcdTc1N2RcdTc1OTBcdTc2MTZcdTc2''@;'; put 'put ''MDhcdTc2MGNcdTc2MTVcdTc2MTFcdTc2MGFcdTc2MTRcdTc2YjhcdTc3ODFcdTc3N2NcdTc3ODVcdTc3ODJcdTc3NmVcdTc3ODBcdTc3NmZcdTc3N2VcdTc3ODNcdTc4YjJcdTc4YWFcdTc4YjRcdTc4YWRcdTc4YThcdTc4N2VcdTc4YWJcdTc4OWVcdTc4YTVcdTc4YTBcdTc4YWNcdTc4YTJc''@;'; put 'put ''dTc4YTRcdTc5OThcdTc5OGFcdTc5OGJcdTc5OTZcdTc5OTVcdTc5OTRcdTc5OTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjZdW2ddXT01Nzg1NitnLHlbNTc4NTYrZ109X1syMjZdW2dd''@;'; put 'put ''KTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTdcdTc5ODhcdTc5OTJcdTc5OTBcdTdhMmJcdTdhNGFcdTdhMzBcdTdhMmZcdTdhMjhcdTdhMjZcdTdhYThcdTdhYWJcdTdhYWNcdTdhZWVcdTdiODhcdTdiOWNc''@;'; put 'put ''dTdiOGFcdTdiOTFcdTdiOTBcdTdiOTZcdTdiOGRcdTdiOGNcdTdiOWJcdTdiOGVcdTdiODVcdTdiOThcdTUyODRcdTdiOTlcdTdiYTRcdTdiODJcdTdjYmJcdTdjYmZcdTdjYmNcdTdjYmFcdTdkYTdcdTdkYjdcdTdkYzJcdTdkYTNcdTdkYWFcdTdkYzFcdTdkYzBcdTdkYzVcdTdkOWRcdTdk''@;'; put 'put ''Y2VcdTdkYzRcdTdkYzZcdTdkY2JcdTdkY2NcdTdkYWZcdTdkYjlcdTdkOTZcdTdkYmNcdTdkOWZcdTdkYTZcdTdkYWVcdTdkYTlcdTdkYTFcdTdkYzlcdTdmNzNcdTdmZTJcdTdmZTNcdTdmZTVcdTdmZGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMjRcdTgw''@;'; put 'put ''NWRcdTgwNWNcdTgxODlcdTgxODZcdTgxODNcdTgxODdcdTgxOGRcdTgxOGNcdTgxOGJcdTgyMTVcdTg0OTdcdTg0YTRcdTg0YTFcdTg0OWZcdTg0YmFcdTg0Y2VcdTg0YzJcdTg0YWNcdTg0YWVcdTg0YWJcdTg0YjlcdTg0YjRcdTg0YzFcdTg0Y2RcdTg0YWFcdTg0OWFcdTg0YjFcdTg0ZDBc''@;'; put 'put ''dTg0OWRcdTg0YTdcdTg0YmJcdTg0YTJcdTg0OTRcdTg0YzdcdTg0Y2NcdTg0OWJcdTg0YTlcdTg0YWZcdTg0YThcdTg0ZDZcdTg0OThcdTg0YjZcdTg0Y2ZcdTg0YTBcdTg0ZDdcdTg0ZDRcdTg0ZDJcdTg0ZGJcdTg0YjBcdTg0OTFcdTg2NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3NmJcdTg3''@;'; put 'put ''NDBcdTg3MmVcdTg3MWVcdTg3MjFcdTg3MTlcdTg3MWJcdTg3NDNcdTg3MmNcdTg3NDFcdTg3M2VcdTg3NDZcdTg3MjBcdTg3MzJcdTg3MmFcdTg3MmRcdTg3M2NcdTg3MTJcdTg3M2FcdTg3MzFcdTg3MzVcdTg3NDJcdTg3MjZcdTg3MjdcdTg3MzhcdTg3MjRcdTg3MWFcdTg3MzBcdTg3MTFc''@;'; put 'put ''dTg4ZjdcdTg4ZTdcdTg4ZjFcdTg4ZjJcdTg4ZmFcdTg4ZmVcdTg4ZWVcdTg4ZmNcdTg4ZjZcdTg4ZmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjddW2ddXT01ODExMitnLHlbNTgxMTIr''@;'; put 'put ''Z109X1syMjddW2ddKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4ZjBcdTg4ZWNcdTg4ZWJcdTg5OWRcdTg5YTFcdTg5OWZcdTg5OWVcdTg5ZTlcdTg5ZWJcdTg5ZThcdThhYWJcdThhOTlcdThhOGJcdThhOTJc''@;'; put 'put ''dThhOGZcdThhOTZcdThjM2RcdThjNjhcdThjNjlcdThjZDVcdThjY2ZcdThjZDdcdThkOTZcdThlMDlcdThlMDJcdThkZmZcdThlMGRcdThkZmRcdThlMGFcdThlMDNcdThlMDdcdThlMDZcdThlMDVcdThkZmVcdThlMDBcdThlMDRcdThmMTBcdThmMTFcdThmMGVcdThmMGRcdTkxMjNcdTkx''@;'; put 'put ''MWNcdTkxMjBcdTkxMjJcdTkxMWZcdTkxMWRcdTkxMWFcdTkxMjRcdTkxMjFcdTkxMWJcdTkxN2FcdTkxNzJcdTkxNzlcdTkxNzNcdTkyYTVcdTkyYTRcdTkyNzZcdTkyOWJcdTkyN2FcdTkyYTBcdTkyOTRcdTkyYWFcdTkyOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTkyYTZcdTkyOWFcdTkyYWJcdTkyNzlcdTkyOTdcdTkyN2ZcdTkyYTNcdTkyZWVcdTkyOGVcdTkyODJcdTkyOTVcdTkyYTJcdTkyN2RcdTkyODhcdTkyYTFcdTkyOGFcdTkyODZcdTkyOGNcdTkyOTlcdTkyYTdcdTkyN2VcdTkyODdcdTkyYTlcdTkyOWRcdTkyOGJcdTkyMmRcdTk2OWVc''@;'; put 'put ''dTk2YTFcdTk2ZmZcdTk3NThcdTk3N2RcdTk3N2FcdTk3N2VcdTk3ODNcdTk3ODBcdTk3ODJcdTk3N2JcdTk3ODRcdTk3ODFcdTk3N2ZcdTk3Y2VcdTk3Y2RcdTk4MTZcdTk4YWRcdTk4YWVcdTk5MDJcdTk5MDBcdTk5MDdcdTk5OWRcdTk5OWNcdTk5YzNcdTk5YjlcdTk5YmJcdTk5YmFcdTk5''@;'; put 'put ''YzJcdTk5YmRcdTk5YzdcdTlhYjFcdTlhZTNcdTlhZTdcdTliM2VcdTliM2ZcdTliNjBcdTliNjFcdTliNWZcdTljZjFcdTljZjJcdTljZjVcdTllYTdcdTUwZmZcdTUxMDNcdTUxMzBcdTUwZjhcdTUxMDZcdTUxMDdcdTUwZjZcdTUwZmVcdTUxMGJcdTUxMGNcdTUwZmRcdTUxMGFcdTUyOGJc''@;'; put 'put ''dTUyOGNcdTUyZjFcdTUyZWZcdTU2NDhcdTU2NDJcdTU2NGNcdTU2MzVcdTU2NDFcdTU2NGFcdTU2NDlcdTU2NDZcdTU2NThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW2ddXT01ODM2''@;'; put 'put ''OCtnLHlbNTgzNjgrZ109X1syMjhdW2ddKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NWFcdTU2NDBcdTU2MzNcdTU2M2RcdTU2MmNcdTU2M2VcdTU2MzhcdTU2MmFcdTU2M2FcdTU3MWFcdTU4YWJcdTU4OWRc''@;'; put 'put ''dTU4YjFcdTU4YTBcdTU4YTNcdTU4YWZcdTU4YWNcdTU4YTVcdTU4YTFcdTU4ZmZcdTVhZmZcdTVhZjRcdTVhZmRcdTVhZjdcdTVhZjZcdTViMDNcdTVhZjhcdTViMDJcdTVhZjlcdTViMDFcdTViMDdcdTViMDVcdTViMGZcdTVjNjdcdTVkOTlcdTVkOTdcdTVkOWZcdTVkOTJcdTVkYTJcdTVk''@;'; put 'put ''OTNcdTVkOTVcdTVkYTBcdTVkOWNcdTVkYTFcdTVkOWFcdTVkOWVcdTVlNjlcdTVlNWRcdTVlNjBcdTVlNWNcdTdkZjNcdTVlZGJcdTVlZGVcdTVlZTFcdTVmNDlcdTVmYjJcdTYxOGJcdTYxODNcdTYxNzlcdTYxYjFcdTYxYjBcdTYxYTJcdTYxODlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTYxOWJcdTYxOTNcdTYxYWZcdTYxYWRcdTYxOWZcdTYxOTJcdTYxYWFcdTYxYTFcdTYxOGRcdTYxNjZcdTYxYjNcdTYyMmRcdTY0NmVcdTY0NzBcdTY0OTZcdTY0YTBcdTY0ODVcdTY0OTdcdTY0OWNcdTY0OGZcdTY0OGJcdTY0OGFcdTY0OGNcdTY0YTNcdTY0OWZc''@;'; put 'put ''dTY0NjhcdTY0YjFcdTY0OThcdTY1NzZcdTY1N2FcdTY1NzlcdTY1N2JcdTY1YjJcdTY1YjNcdTY2YjVcdTY2YjBcdTY2YTlcdTY2YjJcdTY2YjdcdTY2YWFcdTY2YWZcdTZhMDBcdTZhMDZcdTZhMTdcdTY5ZTVcdTY5ZjhcdTZhMTVcdTY5ZjFcdTY5ZTRcdTZhMjBcdTY5ZmZcdTY5ZWNcdTY5''@;'; put 'put ''ZTJcdTZhMWJcdTZhMWRcdTY5ZmVcdTZhMjdcdTY5ZjJcdTY5ZWVcdTZhMTRcdTY5ZjdcdTY5ZTdcdTZhNDBcdTZhMDhcdTY5ZTZcdTY5ZmJcdTZhMGRcdTY5ZmNcdTY5ZWJcdTZhMDlcdTZhMDRcdTZhMThcdTZhMjVcdTZhMGZcdTY5ZjZcdTZhMjZcdTZhMDdcdTY5ZjRcdTZhMTZcdTZiNTFc''@;'; put 'put ''dTZiYTVcdTZiYTNcdTZiYTJcdTZiYTZcdTZjMDFcdTZjMDBcdTZiZmZcdTZjMDJcdTZmNDFcdTZmMjZcdTZmN2VcdTZmODdcdTZmYzZcdTZmOTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sy''@;'; put 'put ''MjldW2ddXT01ODYyNCtnLHlbNTg2MjQrZ109X1syMjldW2ddKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmOGRcdTZmODlcdTZmOGNcdTZmNjJcdTZmNGZcdTZmODVcdTZmNWFcdTZmOTZcdTZmNzZcdTZmNmNc''@;'; put 'put ''dTZmODJcdTZmNTVcdTZmNzJcdTZmNTJcdTZmNTBcdTZmNTdcdTZmOTRcdTZmOTNcdTZmNWRcdTZmMDBcdTZmNjFcdTZmNmJcdTZmN2RcdTZmNjdcdTZmOTBcdTZmNTNcdTZmOGJcdTZmNjlcdTZmN2ZcdTZmOTVcdTZmNjNcdTZmNzdcdTZmNmFcdTZmN2JcdTcxYjJcdTcxYWZcdTcxOWJcdTcx''@;'; put 'put ''YjBcdTcxYTBcdTcxOWFcdTcxYTlcdTcxYjVcdTcxOWRcdTcxYTVcdTcxOWVcdTcxYTRcdTcxYTFcdTcxYWFcdTcxOWNcdTcxYTdcdTcxYjNcdTcyOThcdTcyOWFcdTczNThcdTczNTJcdTczNWVcdTczNWZcdTczNjBcdTczNWRcdTczNWJcdTczNjFcdTczNWFcdTczNTlcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNjJcdTc0ODdcdTc0ODlcdTc0OGFcdTc0ODZcdTc0ODFcdTc0N2RcdTc0ODVcdTc0ODhcdTc0N2NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N2VcdTc2MjVcdTc2MWVcdTc2MTlcdTc2MWRcdTc2MWNcdTc2MjNcdTc2MWFcdTc2MjhcdTc2MWJc''@;'; put 'put ''dTc2OWNcdTc2OWRcdTc2OWVcdTc2OWJcdTc3OGRcdTc3OGZcdTc3ODlcdTc3ODhcdTc4Y2RcdTc4YmJcdTc4Y2ZcdTc4Y2NcdTc4ZDFcdTc4Y2VcdTc4ZDRcdTc4YzhcdTc4YzNcdTc4YzRcdTc4YzlcdTc5OWFcdTc5YTFcdTc5YTBcdTc5OWNcdTc5YTJcdTc5OWJcdTZiNzZcdTdhMzlcdTdh''@;'; put 'put ''YjJcdTdhYjRcdTdhYjNcdTdiYjdcdTdiY2JcdTdiYmVcdTdiYWNcdTdiY2VcdTdiYWZcdTdiYjlcdTdiY2FcdTdiYjVcdTdjYzVcdTdjYzhcdTdjY2NcdTdjY2JcdTdkZjdcdTdkZGJcdTdkZWFcdTdkZTdcdTdkZDdcdTdkZTFcdTdlMDNcdTdkZmFcdTdkZTZcdTdkZjZcdTdkZjFcdTdkZjBc''@;'; put 'put ''dTdkZWVcdTdkZGZcdTdmNzZcdTdmYWNcdTdmYjBcdTdmYWRcdTdmZWRcdTdmZWJcdTdmZWFcdTdmZWNcdTdmZTZcdTdmZThcdTgwNjRcdTgwNjdcdTgxYTNcdTgxOWZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMF1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1syMzBdW2ddXT01ODg4MCtnLHlbNTg4ODArZ109X1syMzBdW2ddKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxOWVcdTgxOTVcdTgxYTJcdTgxOTlcdTgxOTdcdTgyMTZcdTgyNGZcdTgyNTNc''@;'; put 'put ''dTgyNTJcdTgyNTBcdTgyNGVcdTgyNTFcdTg1MjRcdTg1M2JcdTg1MGZcdTg1MDBcdTg1MjlcdTg1MGVcdTg1MDlcdTg1MGRcdTg1MWZcdTg1MGFcdTg1MjdcdTg1MWNcdTg0ZmJcdTg1MmJcdTg0ZmFcdTg1MDhcdTg1MGNcdTg0ZjRcdTg1MmFcdTg0ZjJcdTg1MTVcdTg0ZjdcdTg0ZWJcdTg0''@;'; put 'put ''ZjNcdTg0ZmNcdTg1MTJcdTg0ZWFcdTg0ZTlcdTg1MTZcdTg0ZmVcdTg1MjhcdTg1MWRcdTg1MmVcdTg1MDJcdTg0ZmRcdTg1MWVcdTg0ZjZcdTg1MzFcdTg1MjZcdTg0ZTdcdTg0ZThcdTg0ZjBcdTg0ZWZcdTg0ZjlcdTg1MThcdTg1MjBcdTg1MzBcdTg1MGJcdTg1MTlcdTg1MmZcdTg2NjJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3NTZcdTg3NjNcdTg3NjRcdTg3NzdcdTg3ZTFcdTg3NzNcdTg3NThcdTg3NTRcdTg3NWJcdTg3NTJcdTg3NjFcdTg3NWFcdTg3NTFcdTg3NWVcdTg3NmRcdTg3NmFcdTg3NTBcdTg3NGVcdTg3NWZcdTg3NWRcdTg3NmZc''@;'; put 'put ''dTg3NmNcdTg3N2FcdTg3NmVcdTg3NWNcdTg3NjVcdTg3NGZcdTg3N2JcdTg3NzVcdTg3NjJcdTg3NjdcdTg3NjlcdTg4NWFcdTg5MDVcdTg5MGNcdTg5MTRcdTg5MGJcdTg5MTdcdTg5MThcdTg5MTlcdTg5MDZcdTg5MTZcdTg5MTFcdTg5MGVcdTg5MDlcdTg5YTJcdTg5YTRcdTg5YTNcdTg5''@;'; put 'put ''ZWRcdTg5ZjBcdTg5ZWNcdThhY2ZcdThhYzZcdThhYjhcdThhZDNcdThhZDFcdThhZDRcdThhZDVcdThhYmJcdThhZDdcdThhYmVcdThhYzBcdThhYzVcdThhZDhcdThhYzNcdThhYmFcdThhYmRcdThhZDlcdThjM2VcdThjNGRcdThjOGZcdThjZTVcdThjZGZcdThjZDlcdThjZThcdThjZGFc''@;'; put 'put ''dThjZGRcdThjZTdcdThkYTBcdThkOWNcdThkYTFcdThkOWJcdThlMjBcdThlMjNcdThlMjVcdThlMjRcdThlMmVcdThlMTVcdThlMWJcdThlMTZcdThlMTFcdThlMTlcdThlMjZcdThlMjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMV1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW2ddXT01OTEzNitnLHlbNTkxMzYrZ109X1syMzFdW2ddKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMTRcdThlMTJcdThlMThcdThlMTNcdThlMWNcdThlMTdc''@;'; put 'put ''dThlMWFcdThmMmNcdThmMjRcdThmMThcdThmMWFcdThmMjBcdThmMjNcdThmMTZcdThmMTdcdTkwNzNcdTkwNzBcdTkwNmZcdTkwNjdcdTkwNmJcdTkxMmZcdTkxMmJcdTkxMjlcdTkxMmFcdTkxMzJcdTkxMjZcdTkxMmVcdTkxODVcdTkxODZcdTkxOGFcdTkxODFcdTkxODJcdTkxODRcdTkx''@;'; put 'put ''ODBcdTkyZDBcdTkyYzNcdTkyYzRcdTkyYzBcdTkyZDlcdTkyYjZcdTkyY2ZcdTkyZjFcdTkyZGZcdTkyZDhcdTkyZTlcdTkyZDdcdTkyZGRcdTkyY2NcdTkyZWZcdTkyYzJcdTkyZThcdTkyY2FcdTkyYzhcdTkyY2VcdTkyZTZcdTkyY2RcdTkyZDVcdTkyYzlcdTkyZTBcdTkyZGVcdTkyZTdc''@;'; put 'put ''dTkyZDFcdTkyZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYjVcdTkyZTFcdTkyYzZcdTkyYjRcdTk1N2NcdTk1YWNcdTk1YWJcdTk1YWVcdTk1YjBcdTk2YTRcdTk2YTJcdTk2ZDNcdTk3MDVcdTk3MDhcdTk3MDJcdTk3NWFcdTk3OGFcdTk3OGVcdTk3ODhc''@;'; put 'put ''dTk3ZDBcdTk3Y2ZcdTk4MWVcdTk4MWRcdTk4MjZcdTk4MjlcdTk4MjhcdTk4MjBcdTk4MWJcdTk4MjdcdTk4YjJcdTk5MDhcdTk4ZmFcdTk5MTFcdTk5MTRcdTk5MTZcdTk5MTdcdTk5MTVcdTk5ZGNcdTk5Y2RcdTk5Y2ZcdTk5ZDNcdTk5ZDRcdTk5Y2VcdTk5YzlcdTk5ZDZcdTk5ZDhcdTk5''@;'; put 'put ''Y2JcdTk5ZDdcdTk5Y2NcdTlhYjNcdTlhZWNcdTlhZWJcdTlhZjNcdTlhZjJcdTlhZjFcdTliNDZcdTliNDNcdTliNjdcdTliNzRcdTliNzFcdTliNjZcdTliNzZcdTliNzVcdTliNzBcdTliNjhcdTliNjRcdTliNmNcdTljZmNcdTljZmFcdTljZmRcdTljZmZcdTljZjdcdTlkMDdcdTlkMDBc''@;'; put 'put ''dTljZjlcdTljZmJcdTlkMDhcdTlkMDVcdTlkMDRcdTllODNcdTllZDNcdTlmMGZcdTlmMTBcdTUxMWNcdTUxMTNcdTUxMTdcdTUxMWFcdTUxMTFcdTUxZGVcdTUzMzRcdTUzZTFcdTU2NzBcdTU2NjBcdTU2NmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzJdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW2ddXT01OTM5MitnLHlbNTkzOTIrZ109X1syMzJdW2ddKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NzNcdTU2NjZcdTU2NjNcdTU2NmRc''@;'; put 'put ''dTU2NzJcdTU2NWVcdTU2NzdcdTU3MWNcdTU3MWJcdTU4YzhcdTU4YmRcdTU4YzlcdTU4YmZcdTU4YmFcdTU4YzJcdTU4YmNcdTU4YzZcdTViMTdcdTViMTlcdTViMWJcdTViMjFcdTViMTRcdTViMTNcdTViMTBcdTViMTZcdTViMjhcdTViMWFcdTViMjBcdTViMWVcdTViZWZcdTVkYWNcdTVk''@;'; put 'put ''YjFcdTVkYTlcdTVkYTdcdTVkYjVcdTVkYjBcdTVkYWVcdTVkYWFcdTVkYThcdTVkYjJcdTVkYWRcdTVkYWZcdTVkYjRcdTVlNjdcdTVlNjhcdTVlNjZcdTVlNmZcdTVlZTlcdTVlZTdcdTVlZTZcdTVlZThcdTVlZTVcdTVmNGJcdTVmYmNcdTYxOWRcdTYxYThcdTYxOTZcdTYxYzVcdTYxYjRc''@;'; put 'put ''dTYxYzZcdTYxYzFcdTYxY2NcdTYxYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxYmZcdTYxYjhcdTYxOGNcdTY0ZDdcdTY0ZDZcdTY0ZDBcdTY0Y2ZcdTY0YzlcdTY0YmRcdTY0ODlcdTY0YzNcdTY0ZGJcdTY0ZjNcdTY0ZDlcdTY1MzNcdTY1N2ZcdTY1N2Nc''@;'; put 'put ''dTY1YTJcdTY2YzhcdTY2YmVcdTY2YzBcdTY2Y2FcdTY2Y2JcdTY2Y2ZcdTY2YmRcdTY2YmJcdTY2YmFcdTY2Y2NcdTY3MjNcdTZhMzRcdTZhNjZcdTZhNDlcdTZhNjdcdTZhMzJcdTZhNjhcdTZhM2VcdTZhNWRcdTZhNmRcdTZhNzZcdTZhNWJcdTZhNTFcdTZhMjhcdTZhNWFcdTZhM2JcdTZh''@;'; put 'put ''M2ZcdTZhNDFcdTZhNmFcdTZhNjRcdTZhNTBcdTZhNGZcdTZhNTRcdTZhNmZcdTZhNjlcdTZhNjBcdTZhM2NcdTZhNWVcdTZhNTZcdTZhNTVcdTZhNGRcdTZhNGVcdTZhNDZcdTZiNTVcdTZiNTRcdTZiNTZcdTZiYTdcdTZiYWFcdTZiYWJcdTZiYzhcdTZiYzdcdTZjMDRcdTZjMDNcdTZjMDZc''@;'; put 'put ''dTZmYWRcdTZmY2JcdTZmYTNcdTZmYzdcdTZmYmNcdTZmY2VcdTZmYzhcdTZmNWVcdTZmYzRcdTZmYmRcdTZmOWVcdTZmY2FcdTZmYThcdTcwMDRcdTZmYTVcdTZmYWVcdTZmYmFcdTZmYWNcdTZmYWFcdTZmY2ZcdTZmYmZcdTZmYjhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzNdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW2ddXT01OTY0OCtnLHlbNTk2NDgrZ109X1syMzNdW2ddKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYTJcdTZmYzlc''@;'; put 'put ''dTZmYWJcdTZmY2RcdTZmYWZcdTZmYjJcdTZmYjBcdTcxYzVcdTcxYzJcdTcxYmZcdTcxYjhcdTcxZDZcdTcxYzBcdTcxYzFcdTcxY2JcdTcxZDRcdTcxY2FcdTcxYzdcdTcxY2ZcdTcxYmRcdTcxZDhcdTcxYmNcdTcxYzZcdTcxZGFcdTcxZGJcdTcyOWRcdTcyOWVcdTczNjlcdTczNjZcdTcz''@;'; put 'put ''NjdcdTczNmNcdTczNjVcdTczNmJcdTczNmFcdTc0N2ZcdTc0OWFcdTc0YTBcdTc0OTRcdTc0OTJcdTc0OTVcdTc0YTFcdTc1MGJcdTc1ODBcdTc2MmZcdTc2MmRcdTc2MzFcdTc2M2RcdTc2MzNcdTc2M2NcdTc2MzVcdTc2MzJcdTc2MzBcdTc2YmJcdTc2ZTZcdTc3OWFcdTc3OWRcdTc3YTFc''@;'; put 'put ''dTc3OWNcdTc3OWJcdTc3YTJcdTc3YTNcdTc3OTVcdTc3OTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3OTdcdTc4ZGRcdTc4ZTlcdTc4ZTVcdTc4ZWFcdTc4ZGVcdTc4ZTNcdTc4ZGJcdTc4ZTFcdTc4ZTJcdTc4ZWRcdTc4ZGZcdTc4ZTBcdTc5YTRcdTdhNDRc''@;'; put 'put ''dTdhNDhcdTdhNDdcdTdhYjZcdTdhYjhcdTdhYjVcdTdhYjFcdTdhYjdcdTdiZGVcdTdiZTNcdTdiZTdcdTdiZGRcdTdiZDVcdTdiZTVcdTdiZGFcdTdiZThcdTdiZjlcdTdiZDRcdTdiZWFcdTdiZTJcdTdiZGNcdTdiZWJcdTdiZDhcdTdiZGZcdTdjZDJcdTdjZDRcdTdjZDdcdTdjZDBcdTdj''@;'; put 'put ''ZDFcdTdlMTJcdTdlMjFcdTdlMTdcdTdlMGNcdTdlMWZcdTdlMjBcdTdlMTNcdTdlMGVcdTdlMWNcdTdlMTVcdTdlMWFcdTdlMjJcdTdlMGJcdTdlMGZcdTdlMTZcdTdlMGRcdTdlMTRcdTdlMjVcdTdlMjRcdTdmNDNcdTdmN2JcdTdmN2NcdTdmN2FcdTdmYjFcdTdmZWZcdTgwMmFcdTgwMjlc''@;'; put 'put ''dTgwNmNcdTgxYjFcdTgxYTZcdTgxYWVcdTgxYjlcdTgxYjVcdTgxYWJcdTgxYjBcdTgxYWNcdTgxYjRcdTgxYjJcdTgxYjdcdTgxYTdcdTgxZjJcdTgyNTVcdTgyNTZcdTgyNTdcdTg1NTZcdTg1NDVcdTg1NmJcdTg1NGRcdTg1NTNcdTg1NjFcdTg1NThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1syMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW2ddXT01OTkwNCtnLHlbNTk5MDQrZ109X1syMzRdW2ddKTtmb3IoX1syMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTg1NDBcdTg1NDZcdTg1NjRcdTg1NDFcdTg1NjJcdTg1NDRcdTg1NTFcdTg1NDdcdTg1NjNcdTg1M2VcdTg1NWJcdTg1NzFcdTg1NGVcdTg1NmVcdTg1NzVcdTg1NTVcdTg1NjdcdTg1NjBcdTg1OGNcdTg1NjZcdTg1NWRcdTg1NTRcdTg1NjVcdTg1NmNcdTg2NjNcdTg2NjVcdTg2NjRcdTg3''@;'; put 'put ''OWJcdTg3OGZcdTg3OTdcdTg3OTNcdTg3OTJcdTg3ODhcdTg3ODFcdTg3OTZcdTg3OThcdTg3NzlcdTg3ODdcdTg3YTNcdTg3ODVcdTg3OTBcdTg3OTFcdTg3OWRcdTg3ODRcdTg3OTRcdTg3OWNcdTg3OWFcdTg3ODlcdTg5MWVcdTg5MjZcdTg5MzBcdTg5MmRcdTg5MmVcdTg5MjdcdTg5MzFc''@;'; put 'put ''dTg5MjJcdTg5MjlcdTg5MjNcdTg5MmZcdTg5MmNcdTg5MWZcdTg5ZjFcdThhZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZTJcdThhZjJcdThhZjRcdThhZjVcdThhZGRcdThiMTRcdThhZTRcdThhZGZcdThhZjBcdThhYzhcdThhZGVcdThhZTFcdThhZThc''@;'; put 'put ''dThhZmZcdThhZWZcdThhZmJcdThjOTFcdThjOTJcdThjOTBcdThjZjVcdThjZWVcdThjZjFcdThjZjBcdThjZjNcdThkNmNcdThkNmVcdThkYTVcdThkYTdcdThlMzNcdThlM2VcdThlMzhcdThlNDBcdThlNDVcdThlMzZcdThlM2NcdThlM2RcdThlNDFcdThlMzBcdThlM2ZcdThlYmRcdThm''@;'; put 'put ''MzZcdThmMmVcdThmMzVcdThmMzJcdThmMzlcdThmMzdcdThmMzRcdTkwNzZcdTkwNzlcdTkwN2JcdTkwODZcdTkwZmFcdTkxMzNcdTkxMzVcdTkxMzZcdTkxOTNcdTkxOTBcdTkxOTFcdTkxOGRcdTkxOGZcdTkzMjdcdTkzMWVcdTkzMDhcdTkzMWZcdTkzMDZcdTkzMGZcdTkzN2FcdTkzMzhc''@;'; put 'put ''dTkzM2NcdTkzMWJcdTkzMjNcdTkzMTJcdTkzMDFcdTkzNDZcdTkzMmRcdTkzMGVcdTkzMGRcdTkyY2JcdTkzMWRcdTkyZmFcdTkzMjVcdTkzMTNcdTkyZjlcdTkyZjdcdTkzMzRcdTkzMDJcdTkzMjRcdTkyZmZcdTkzMjlcdTkzMzlcdTkzMzVcdTkzMmFcdTkzMTRcdTkzMGNcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1syMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzVdW2ddXT02MDE2MCtnLHlbNjAxNjArZ109X1syMzVdW2ddKTtmb3IoX1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTkzMGJcdTkyZmVcdTkzMDlcdTkzMDBcdTkyZmJcdTkzMTZcdTk1YmNcdTk1Y2RcdTk1YmVcdTk1YjlcdTk1YmFcdTk1YjZcdTk1YmZcdTk1YjVcdTk1YmRcdTk2YTlcdTk2ZDRcdTk3MGJcdTk3MTJcdTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRcdTk3ZjBcdTk3ZjhcdTk4''@;'; put 'put ''MzVcdTk4MmZcdTk4MzJcdTk5MjRcdTk5MWZcdTk5MjdcdTk5MjlcdTk5OWVcdTk5ZWVcdTk5ZWNcdTk5ZTVcdTk5ZTRcdTk5ZjBcdTk5ZTNcdTk5ZWFcdTk5ZTlcdTk5ZTdcdTlhYjlcdTlhYmZcdTlhYjRcdTlhYmJcdTlhZjZcdTlhZmFcdTlhZjlcdTlhZjdcdTliMzNcdTliODBcdTliODVc''@;'; put 'put ''dTliODdcdTliN2NcdTliN2VcdTliN2JcdTliODJcdTliOTNcdTliOTJcdTliOTBcdTliN2FcdTliOTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2RcdTliODhcdTlkMjVcdTlkMTdcdTlkMjBcdTlkMWVcdTlkMTRcdTlkMjlcdTlkMWRcdTlkMThcdTlkMjJc''@;'; put 'put ''dTlkMTBcdTlkMTlcdTlkMWZcdTllODhcdTllODZcdTllODdcdTllYWVcdTllYWRcdTllZDVcdTllZDZcdTllZmFcdTlmMTJcdTlmM2RcdTUxMjZcdTUxMjVcdTUxMjJcdTUxMjRcdTUxMjBcdTUxMjlcdTUyZjRcdTU2OTNcdTU2OGNcdTU2OGRcdTU2ODZcdTU2ODRcdTU2ODNcdTU2N2VcdTU2''@;'; put 'put ''ODJcdTU2N2ZcdTU2ODFcdTU4ZDZcdTU4ZDRcdTU4Y2ZcdTU4ZDJcdTViMmRcdTViMjVcdTViMzJcdTViMjNcdTViMmNcdTViMjdcdTViMjZcdTViMmZcdTViMmVcdTViN2JcdTViZjFcdTViZjJcdTVkYjdcdTVlNmNcdTVlNmFcdTVmYmVcdTVmYmJcdTYxYzNcdTYxYjVcdTYxYmNcdTYxZTdc''@;'; put 'put ''dTYxZTBcdTYxZTVcdTYxZTRcdTYxZThcdTYxZGVcdTY0ZWZcdTY0ZTlcdTY0ZTNcdTY0ZWJcdTY0ZTRcdTY0ZThcdTY1ODFcdTY1ODBcdTY1YjZcdTY1ZGFcdTY2ZDJcdTZhOGRcdTZhOTZcdTZhODFcdTZhYTVcdTZhODlcdTZhOWZcdTZhOWJcdTZhYTFcdTZhOWVcdTZhODdcdTZhOTNcdTZh''@;'; put 'put ''OGVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzZdW2ddXT02MDQxNitnLHlbNjA0MTYrZ109X1syMzZdW2ddKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTVcdTZhODNcdTZhYThcdTZhYTRcdTZhOTFcdTZhN2ZcdTZhYTZcdTZhOWFcdTZhODVcdTZhOGNcdTZhOTJcdTZiNWJcdTZiYWRcdTZjMDlcdTZmY2NcdTZmYTlcdTZmZjRcdTZmZDRcdTZmZTNcdTZmZGNcdTZmZWRcdTZmZTdcdTZmZTZcdTZm''@;'; put 'put ''ZGVcdTZmZjJcdTZmZGRcdTZmZTJcdTZmZThcdTcxZTFcdTcxZjFcdTcxZThcdTcxZjJcdTcxZTRcdTcxZjBcdTcxZTJcdTczNzNcdTczNmVcdTczNmZcdTc0OTdcdTc0YjJcdTc0YWJcdTc0OTBcdTc0YWFcdTc0YWRcdTc0YjFcdTc0YTVcdTc0YWZcdTc1MTBcdTc1MTFcdTc1MTJcdTc1MGZc''@;'; put 'put ''dTc1ODRcdTc2NDNcdTc2NDhcdTc2NDlcdTc2NDdcdTc2YTRcdTc2ZTlcdTc3YjVcdTc3YWJcdTc3YjJcdTc3YjdcdTc3YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YjRcdTc3YjFcdTc3YThcdTc3ZjBcdTc4ZjNcdTc4ZmRcdTc5MDJcdTc4ZmJcdTc4ZmNc''@;'; put 'put ''dTc4ZjJcdTc5MDVcdTc4ZjlcdTc4ZmVcdTc5MDRcdTc5YWJcdTc5YThcdTdhNWNcdTdhNWJcdTdhNTZcdTdhNThcdTdhNTRcdTdhNWFcdTdhYmVcdTdhYzBcdTdhYzFcdTdjMDVcdTdjMGZcdTdiZjJcdTdjMDBcdTdiZmZcdTdiZmJcdTdjMGVcdTdiZjRcdTdjMGJcdTdiZjNcdTdjMDJcdTdj''@;'; put 'put ''MDlcdTdjMDNcdTdjMDFcdTdiZjhcdTdiZmRcdTdjMDZcdTdiZjBcdTdiZjFcdTdjMTBcdTdjMGFcdTdjZThcdTdlMmRcdTdlM2NcdTdlNDJcdTdlMzNcdTk4NDhcdTdlMzhcdTdlMmFcdTdlNDlcdTdlNDBcdTdlNDdcdTdlMjlcdTdlNGNcdTdlMzBcdTdlM2JcdTdlMzZcdTdlNDRcdTdlM2Fc''@;'; put 'put ''dTdmNDVcdTdmN2ZcdTdmN2VcdTdmN2RcdTdmZjRcdTdmZjJcdTgwMmNcdTgxYmJcdTgxYzRcdTgxY2NcdTgxY2FcdTgxYzVcdTgxYzdcdTgxYmNcdTgxZTlcdTgyNWJcdTgyNWFcdTgyNWNcdTg1ODNcdTg1ODBcdTg1OGZcdTg1YTdcdTg1OTVcdTg1YTBcdTg1OGJcdTg1YTNcdTg1N2JcdTg1''@;'; put 'put ''YTRcdTg1OWFcdTg1OWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW2ddXT02MDY3MitnLHlbNjA2NzIrZ109X1syMzddW2ddKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NzdcdTg1N2NcdTg1ODlcdTg1YTFcdTg1N2FcdTg1NzhcdTg1NTdcdTg1OGVcdTg1OTZcdTg1ODZcdTg1OGRcdTg1OTlcdTg1OWRcdTg1ODFcdTg1YTJcdTg1ODJcdTg1ODhcdTg1ODVcdTg1NzlcdTg1NzZcdTg1OThcdTg1''@;'; put 'put ''OTBcdTg1OWZcdTg2NjhcdTg3YmVcdTg3YWFcdTg3YWRcdTg3YzVcdTg3YjBcdTg3YWNcdTg3YjlcdTg3YjVcdTg3YmNcdTg3YWVcdTg3YzlcdTg3YzNcdTg3YzJcdTg3Y2NcdTg3YjdcdTg3YWZcdTg3YzRcdTg3Y2FcdTg3YjRcdTg3YjZcdTg3YmZcdTg3YjhcdTg3YmRcdTg3ZGVcdTg3YjJc''@;'; put 'put ''dTg5MzVcdTg5MzNcdTg5M2NcdTg5M2VcdTg5NDFcdTg5NTJcdTg5MzdcdTg5NDJcdTg5YWRcdTg5YWZcdTg5YWVcdTg5ZjJcdTg5ZjNcdThiMWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiMThcdThiMTZcdThiMTFcdThiMDVcdThiMGJcdThiMjJcdThiMGZc''@;'; put 'put ''dThiMTJcdThiMTVcdThiMDdcdThiMGRcdThiMDhcdThiMDZcdThiMWNcdThiMTNcdThiMWFcdThjNGZcdThjNzBcdThjNzJcdThjNzFcdThjNmZcdThjOTVcdThjOTRcdThjZjlcdThkNmZcdThlNGVcdThlNGRcdThlNTNcdThlNTBcdThlNGNcdThlNDdcdThmNDNcdThmNDBcdTkwODVcdTkw''@;'; put 'put ''N2VcdTkxMzhcdTkxOWFcdTkxYTJcdTkxOWJcdTkxOTlcdTkxOWZcdTkxYTFcdTkxOWRcdTkxYTBcdTkzYTFcdTkzODNcdTkzYWZcdTkzNjRcdTkzNTZcdTkzNDdcdTkzN2NcdTkzNThcdTkzNWNcdTkzNzZcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNjBcdTkzNmRcdTkzOGZcdTkzNGNcdTkzNmFc''@;'; put 'put ''dTkzNzlcdTkzNTdcdTkzNTVcdTkzNTJcdTkzNGZcdTkzNzFcdTkzNzdcdTkzN2JcdTkzNjFcdTkzNWVcdTkzNjNcdTkzNjdcdTkzODBcdTkzNGVcdTkzNTlcdTk1YzdcdTk1YzBcdTk1YzlcdTk1YzNcdTk1YzVcdTk1YjdcdTk2YWVcdTk2YjBcdTk2YWNcdTk3MjBcdTk3MWZcdTk3MThcdTk3''@;'; put 'put ''MWRcdTk3MTlcdTk3OWFcdTk3YTFcdTk3OWNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW2ddXT02MDkyOCtnLHlbNjA5MjgrZ109X1syMzhdW2ddKTtmb3IoX1syMzldPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3OWVcdTk3OWRcdTk3ZDVcdTk3ZDRcdTk3ZjFcdTk4NDFcdTk4NDRcdTk4NGFcdTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5MmJcdTk5MmNcdTk5MmFcdTk5MzNcdTk5MzJcdTk5MmZcdTk5MmRcdTk5''@;'; put 'put ''MzFcdTk5MzBcdTk5OThcdTk5YTNcdTk5YTFcdTlhMDJcdTk5ZmFcdTk5ZjRcdTk5ZjdcdTk5ZjlcdTk5ZjhcdTk5ZjZcdTk5ZmJcdTk5ZmRcdTk5ZmVcdTk5ZmNcdTlhMDNcdTlhYmVcdTlhZmVcdTlhZmRcdTliMDFcdTlhZmNcdTliNDhcdTliOWFcdTliYThcdTliOWVcdTliOWJcdTliYTZc''@;'; put 'put ''dTliYTFcdTliYTVcdTliYTRcdTliODZcdTliYTJcdTliYTBcdTliYWZcdTlkMzNcdTlkNDFcdTlkNjdcdTlkMzZcdTlkMmVcdTlkMmZcdTlkMzFcdTlkMzhcdTlkMzBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNDVcdTlkNDJcdTlkNDNcdTlkM2VcdTlkMzdc''@;'; put 'put ''dTlkNDBcdTlkM2RcdTdmZjVcdTlkMmRcdTllOGFcdTllODlcdTllOGRcdTllYjBcdTllYzhcdTllZGFcdTllZmJcdTllZmZcdTlmMjRcdTlmMjNcdTlmMjJcdTlmNTRcdTlmYTBcdTUxMzFcdTUxMmRcdTUxMmVcdTU2OThcdTU2OWNcdTU2OTdcdTU2OWFcdTU2OWRcdTU2OTlcdTU5NzBcdTVi''@;'; put 'put ''M2NcdTVjNjlcdTVjNmFcdTVkYzBcdTVlNmRcdTVlNmVcdTYxZDhcdTYxZGZcdTYxZWRcdTYxZWVcdTYxZjFcdTYxZWFcdTYxZjBcdTYxZWJcdTYxZDZcdTYxZTlcdTY0ZmZcdTY1MDRcdTY0ZmRcdTY0ZjhcdTY1MDFcdTY1MDNcdTY0ZmNcdTY1OTRcdTY1ZGJcdTY2ZGFcdTY2ZGJcdTY2ZDhc''@;'; put 'put ''dTZhYzVcdTZhYjlcdTZhYmRcdTZhZTFcdTZhYzZcdTZhYmFcdTZhYjZcdTZhYjdcdTZhYzdcdTZhYjRcdTZhYWRcdTZiNWVcdTZiYzlcdTZjMGJcdTcwMDdcdTcwMGNcdTcwMGRcdTcwMDFcdTcwMDVcdTcwMTRcdTcwMGVcdTZmZmZcdTcwMDBcdTZmZmJcdTcwMjZcdTZmZmNcdTZmZjdcdTcw''@;'; put 'put ''MGFcdTcyMDFcdTcxZmZcdTcxZjlcdTcyMDNcdTcxZmRcdTczNzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzldW2ddXT02MTE4NCtnLHlbNjExODQrZ109X1syMzldW2ddKTtmb3IoX1sy''@;'; put 'put ''NDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0YjhcdTc0YzBcdTc0YjVcdTc0YzFcdTc0YmVcdTc0YjZcdTc0YmJcdTc0YzJcdTc1MTRcdTc1MTNcdTc2NWNcdTc2NjRcdTc2NTlcdTc2NTBcdTc2NTNcdTc2NTdcdTc2NWFcdTc2''@;'; put 'put ''YTZcdTc2YmRcdTc2ZWNcdTc3YzJcdTc3YmFcdTc4ZmZcdTc5MGNcdTc5MTNcdTc5MTRcdTc5MDlcdTc5MTBcdTc5MTJcdTc5MTFcdTc5YWRcdTc5YWNcdTdhNWZcdTdjMWNcdTdjMjlcdTdjMTlcdTdjMjBcdTdjMWZcdTdjMmRcdTdjMWRcdTdjMjZcdTdjMjhcdTdjMjJcdTdjMjVcdTdjMzBc''@;'; put 'put ''dTdlNWNcdTdlNTBcdTdlNTZcdTdlNjNcdTdlNThcdTdlNjJcdTdlNWZcdTdlNTFcdTdlNjBcdTdlNTdcdTdlNTNcdTdmYjVcdTdmYjNcdTdmZjdcdTdmZjhcdTgwNzVcdTgxZDFcdTgxZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxZDBcdTgyNWZcdTgyNWVc''@;'; put 'put ''dTg1YjRcdTg1YzZcdTg1YzBcdTg1YzNcdTg1YzJcdTg1YjNcdTg1YjVcdTg1YmRcdTg1YzdcdTg1YzRcdTg1YmZcdTg1Y2JcdTg1Y2VcdTg1YzhcdTg1YzVcdTg1YjFcdTg1YjZcdTg1ZDJcdTg2MjRcdTg1YjhcdTg1YjdcdTg1YmVcdTg2NjlcdTg3ZTdcdTg3ZTZcdTg3ZTJcdTg3ZGJcdTg3''@;'; put 'put ''ZWJcdTg3ZWFcdTg3ZTVcdTg3ZGZcdTg3ZjNcdTg3ZTRcdTg3ZDRcdTg3ZGNcdTg3ZDNcdTg3ZWRcdTg3ZDhcdTg3ZTNcdTg3YTRcdTg3ZDdcdTg3ZDlcdTg4MDFcdTg3ZjRcdTg3ZThcdTg3ZGRcdTg5NTNcdTg5NGJcdTg5NGZcdTg5NGNcdTg5NDZcdTg5NTBcdTg5NTFcdTg5NDlcdThiMmFc''@;'; put 'put ''dThiMjdcdThiMjNcdThiMzNcdThiMzBcdThiMzVcdThiNDdcdThiMmZcdThiM2NcdThiM2VcdThiMzFcdThiMjVcdThiMzdcdThiMjZcdThiMzZcdThiMmVcdThiMjRcdThiM2JcdThiM2RcdThiM2FcdThjNDJcdThjNzVcdThjOTlcdThjOThcdThjOTdcdThjZmVcdThkMDRcdThkMDJcdThk''@;'; put 'put ''MDBcdThlNWNcdThlNjJcdThlNjBcdThlNTdcdThlNTZcdThlNWVcdThlNjVcdThlNjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDBdW2ddXT02MTQ0MCtnLHlbNjE0NDArZ109X1syNDBd''@;'; put 'put ''W2ddKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNWJcdThlNWFcdThlNjFcdThlNWRcdThlNjlcdThlNTRcdThmNDZcdThmNDdcdThmNDhcdThmNGJcdTkxMjhcdTkxM2FcdTkxM2JcdTkxM2VcdTkxYThcdTkx''@;'; put 'put ''YTVcdTkxYTdcdTkxYWZcdTkxYWFcdTkzYjVcdTkzOGNcdTkzOTJcdTkzYjdcdTkzOWJcdTkzOWRcdTkzODlcdTkzYTdcdTkzOGVcdTkzYWFcdTkzOWVcdTkzYTZcdTkzOTVcdTkzODhcdTkzOTlcdTkzOWZcdTkzOGRcdTkzYjFcdTkzOTFcdTkzYjJcdTkzYTRcdTkzYThcdTkzYjRcdTkzYTNc''@;'; put 'put ''dTkzYTVcdTk1ZDJcdTk1ZDNcdTk1ZDFcdTk2YjNcdTk2ZDdcdTk2ZGFcdTVkYzJcdTk2ZGZcdTk2ZDhcdTk2ZGRcdTk3MjNcdTk3MjJcdTk3MjVcdTk3YWNcdTk3YWVcdTk3YThcdTk3YWJcdTk3YTRcdTk3YWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YTJc''@;'; put 'put ''dTk3YTVcdTk3ZDdcdTk3ZDlcdTk3ZDZcdTk3ZDhcdTk3ZmFcdTk4NTBcdTk4NTFcdTk4NTJcdTk4YjhcdTk5NDFcdTk5M2NcdTk5M2FcdTlhMGZcdTlhMGJcdTlhMDlcdTlhMGRcdTlhMDRcdTlhMTFcdTlhMGFcdTlhMDVcdTlhMDdcdTlhMDZcdTlhYzBcdTlhZGNcdTliMDhcdTliMDRcdTli''@;'; put 'put ''MDVcdTliMjlcdTliMzVcdTliNGFcdTliNGNcdTliNGJcdTliYzdcdTliYzZcdTliYzNcdTliYmZcdTliYzFcdTliYjVcdTliYjhcdTliZDNcdTliYjZcdTliYzRcdTliYjlcdTliYmRcdTlkNWNcdTlkNTNcdTlkNGZcdTlkNGFcdTlkNWJcdTlkNGJcdTlkNTlcdTlkNTZcdTlkNGNcdTlkNTdc''@;'; put 'put ''dTlkNTJcdTlkNTRcdTlkNWZcdTlkNThcdTlkNWFcdTllOGVcdTllOGNcdTllZGZcdTlmMDFcdTlmMDBcdTlmMTZcdTlmMjVcdTlmMmJcdTlmMmFcdTlmMjlcdTlmMjhcdTlmNGNcdTlmNTVcdTUxMzRcdTUxMzVcdTUyOTZcdTUyZjdcdTUzYjRcdTU2YWJcdTU2YWRcdTU2YTZcdTU2YTdcdTU2''@;'; put 'put ''YWFcdTU2YWNcdTU4ZGFcdTU4ZGRcdTU4ZGJcdTU5MTJcdTViM2RcdTViM2VcdTViM2ZcdTVkYzNcdTVlNzBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDFdW2ddXT02MTY5NitnLHlbNjE2''@;'; put 'put ''OTYrZ109X1syNDFdW2ddKTtmb3IoX1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmYmZcdTYxZmJcdTY1MDdcdTY1MTBcdTY1MGRcdTY1MDlcdTY1MGNcdTY1MGVcdTY1ODRcdTY1ZGVcdTY1ZGRcdTY2ZGVcdTZhZTdcdTZh''@;'; put 'put ''ZTBcdTZhY2NcdTZhZDFcdTZhZDlcdTZhY2JcdTZhZGZcdTZhZGNcdTZhZDBcdTZhZWJcdTZhY2ZcdTZhY2RcdTZhZGVcdTZiNjBcdTZiYjBcdTZjMGNcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMmJcdTcwMjFcdTcwMjJcdTcwMjNcdTcwMjlcdTcwMTdcdTcwMjRcdTcwMWNcdTcwMmFc''@;'; put 'put ''dTcyMGNcdTcyMGFcdTcyMDdcdTcyMDJcdTcyMDVcdTcyYTVcdTcyYTZcdTcyYTRcdTcyYTNcdTcyYTFcdTc0Y2JcdTc0YzVcdTc0YjdcdTc0YzNcdTc1MTZcdTc2NjBcdTc3YzlcdTc3Y2FcdTc3YzRcdTc3ZjFcdTc5MWRcdTc5MWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTc5MjFcdTc5MWNcdTc5MTdcdTc5MWVcdTc5YjBcdTdhNjdcdTdhNjhcdTdjMzNcdTdjM2NcdTdjMzlcdTdjMmNcdTdjM2JcdTdjZWNcdTdjZWFcdTdlNzZcdTdlNzVcdTdlNzhcdTdlNzBcdTdlNzdcdTdlNmZcdTdlN2FcdTdlNzJcdTdlNzRcdTdlNjhcdTdmNGJcdTdmNGFcdTdm''@;'; put 'put ''ODNcdTdmODZcdTdmYjdcdTdmZmRcdTdmZmVcdTgwNzhcdTgxZDdcdTgxZDVcdTgyNjRcdTgyNjFcdTgyNjNcdTg1ZWJcdTg1ZjFcdTg1ZWRcdTg1ZDlcdTg1ZTFcdTg1ZThcdTg1ZGFcdTg1ZDdcdTg1ZWNcdTg1ZjJcdTg1ZjhcdTg1ZDhcdTg1ZGZcdTg1ZTNcdTg1ZGNcdTg1ZDFcdTg1ZjBc''@;'; put 'put ''dTg1ZTZcdTg1ZWZcdTg1ZGVcdTg1ZTJcdTg4MDBcdTg3ZmFcdTg4MDNcdTg3ZjZcdTg3ZjdcdTg4MDlcdTg4MGNcdTg4MGJcdTg4MDZcdTg3ZmNcdTg4MDhcdTg3ZmZcdTg4MGFcdTg4MDJcdTg5NjJcdTg5NWFcdTg5NWJcdTg5NTdcdTg5NjFcdTg5NWNcdTg5NThcdTg5NWRcdTg5NTlcdTg5''@;'; put 'put ''ODhcdTg5YjdcdTg5YjZcdTg5ZjZcdThiNTBcdThiNDhcdThiNGFcdThiNDBcdThiNTNcdThiNTZcdThiNTRcdThiNGJcdThiNTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDJdW2ddXT02''@;'; put 'put ''MTk1MitnLHlbNjE5NTIrZ109X1syNDJdW2ddKTtmb3IoX1syNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNTFcdThiNDJcdThiNTJcdThiNTdcdThjNDNcdThjNzdcdThjNzZcdThjOWFcdThkMDZcdThkMDdcdThkMDlcdThk''@;'; put 'put ''YWNcdThkYWFcdThkYWRcdThkYWJcdThlNmRcdThlNzhcdThlNzNcdThlNmFcdThlNmZcdThlN2JcdThlYzJcdThmNTJcdThmNTFcdThmNGZcdThmNTBcdThmNTNcdThmYjRcdTkxNDBcdTkxM2ZcdTkxYjBcdTkxYWRcdTkzZGVcdTkzYzdcdTkzY2ZcdTkzYzJcdTkzZGFcdTkzZDBcdTkzZjlc''@;'; put 'put ''dTkzZWNcdTkzY2NcdTkzZDlcdTkzYTlcdTkzZTZcdTkzY2FcdTkzZDRcdTkzZWVcdTkzZTNcdTkzZDVcdTkzYzRcdTkzY2VcdTkzYzBcdTkzZDJcdTkzZTdcdTk1N2RcdTk1ZGFcdTk1ZGJcdTk2ZTFcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MjhcdTk3MjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTk3YjNcdTk3YjdcdTk3YjZcdTk3ZGRcdTk3ZGVcdTk3ZGZcdTk4NWNcdTk4NTlcdTk4NWRcdTk4NTdcdTk4YmZcdTk4YmRcdTk4YmJcdTk4YmVcdTk5NDhcdTk5NDdcdTk5NDNcdTk5YTZcdTk5YTdcdTlhMWFcdTlhMTVcdTlhMjVcdTlhMWRcdTlhMjRcdTlh''@;'; put 'put ''MWJcdTlhMjJcdTlhMjBcdTlhMjdcdTlhMjNcdTlhMWVcdTlhMWNcdTlhMTRcdTlhYzJcdTliMGJcdTliMGFcdTliMGVcdTliMGNcdTliMzdcdTliZWFcdTliZWJcdTliZTBcdTliZGVcdTliZTRcdTliZTZcdTliZTJcdTliZjBcdTliZDRcdTliZDdcdTliZWNcdTliZGNcdTliZDlcdTliZTVc''@;'; put 'put ''dTliZDVcdTliZTFcdTliZGFcdTlkNzdcdTlkODFcdTlkOGFcdTlkODRcdTlkODhcdTlkNzFcdTlkODBcdTlkNzhcdTlkODZcdTlkOGJcdTlkOGNcdTlkN2RcdTlkNmJcdTlkNzRcdTlkNzVcdTlkNzBcdTlkNjlcdTlkODVcdTlkNzNcdTlkN2JcdTlkODJcdTlkNmZcdTlkNzlcdTlkN2ZcdTlk''@;'; put 'put ''ODdcdTlkNjhcdTllOTRcdTllOTFcdTllYzBcdTllZmNcdTlmMmRcdTlmNDBcdTlmNDFcdTlmNGRcdTlmNTZcdTlmNTdcdTlmNThcdTUzMzdcdTU2YjJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0M11bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1syNDNdW2ddXT02MjIwOCtnLHlbNjIyMDgrZ109X1syNDNdW2ddKTtmb3IoX1syNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2YjVcdTU2YjNcdTU4ZTNcdTViNDVcdTVkYzZcdTVkYzdcdTVlZWVcdTVlZWZcdTVmYzBcdTVm''@;'; put 'put ''YzFcdTYxZjlcdTY1MTdcdTY1MTZcdTY1MTVcdTY1MTNcdTY1ZGZcdTY2ZThcdTY2ZTNcdTY2ZTRcdTZhZjNcdTZhZjBcdTZhZWFcdTZhZThcdTZhZjlcdTZhZjFcdTZhZWVcdTZhZWZcdTcwM2NcdTcwMzVcdTcwMmZcdTcwMzdcdTcwMzRcdTcwMzFcdTcwNDJcdTcwMzhcdTcwM2ZcdTcwM2Fc''@;'; put 'put ''dTcwMzlcdTcwNDBcdTcwM2JcdTcwMzNcdTcwNDFcdTcyMTNcdTcyMTRcdTcyYThcdTczN2RcdTczN2NcdTc0YmFcdTc2YWJcdTc2YWFcdTc2YmVcdTc2ZWRcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3Y2RcdTc3ZjJcdTc5MjVcdTc5MjNcdTc5MjdcdTc5MjhcdTc5MjRcdTc5MjlcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjJcdTdhNmVcdTdhNmNcdTdhNmRcdTdhZjdcdTdjNDlcdTdjNDhcdTdjNGFcdTdjNDdcdTdjNDVcdTdjZWVcdTdlN2JcdTdlN2VcdTdlODFcdTdlODBcdTdmYmFcdTdmZmZcdTgwNzlcdTgxZGJcdTgxZDlcdTgyMGJcdTgyNjhcdTgy''@;'; put 'put ''NjlcdTg2MjJcdTg1ZmZcdTg2MDFcdTg1ZmVcdTg2MWJcdTg2MDBcdTg1ZjZcdTg2MDRcdTg2MDlcdTg2MDVcdTg2MGNcdTg1ZmRcdTg4MTlcdTg4MTBcdTg4MTFcdTg4MTdcdTg4MTNcdTg4MTZcdTg5NjNcdTg5NjZcdTg5YjlcdTg5ZjdcdThiNjBcdThiNmFcdThiNWRcdThiNjhcdThiNjNc''@;'; put 'put ''dThiNjVcdThiNjdcdThiNmRcdThkYWVcdThlODZcdThlODhcdThlODRcdThmNTlcdThmNTZcdThmNTdcdThmNTVcdThmNThcdThmNWFcdTkwOGRcdTkxNDNcdTkxNDFcdTkxYjdcdTkxYjVcdTkxYjJcdTkxYjNcdTk0MGJcdTk0MTNcdTkzZmJcdTk0MjBcdTk0MGZcdTk0MTRcdTkzZmVcdTk0''@;'; put 'put ''MTVcdTk0MTBcdTk0MjhcdTk0MTlcdTk0MGRcdTkzZjVcdTk0MDBcdTkzZjdcdTk0MDdcdTk0MGVcdTk0MTZcdTk0MTJcdTkzZmFcdTk0MDlcdTkzZjhcdTk0MGFcdTkzZmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NF1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1syNDRdW2ddXT02MjQ2NCtnLHlbNjI0NjQrZ109X1syNDRdW2ddKTtmb3IoX1syNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZmNcdTk0MGNcdTkzZjZcdTk0MTFcdTk0MDZcdTk1ZGVcdTk1ZTBcdTk1''@;'; put 'put ''ZGZcdTk3MmVcdTk3MmZcdTk3YjlcdTk3YmJcdTk3ZmRcdTk3ZmVcdTk4NjBcdTk4NjJcdTk4NjNcdTk4NWZcdTk4YzFcdTk4YzJcdTk5NTBcdTk5NGVcdTk5NTlcdTk5NGNcdTk5NGJcdTk5NTNcdTlhMzJcdTlhMzRcdTlhMzFcdTlhMmNcdTlhMmFcdTlhMzZcdTlhMjlcdTlhMmVcdTlhMzhc''@;'; put 'put ''dTlhMmRcdTlhYzdcdTlhY2FcdTlhYzZcdTliMTBcdTliMTJcdTliMTFcdTljMGJcdTljMDhcdTliZjdcdTljMDVcdTljMTJcdTliZjhcdTljNDBcdTljMDdcdTljMGVcdTljMDZcdTljMTdcdTljMTRcdTljMDlcdTlkOWZcdTlkOTlcdTlkYTRcdTlkOWRcdTlkOTJcdTlkOThcdTlkOTBcdTlk''@;'; put 'put ''OWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkYTBcdTlkOTRcdTlkOWNcdTlkYWFcdTlkOTdcdTlkYTFcdTlkOWFcdTlkYTJcdTlkYThcdTlkOWVcdTlkYTNcdTlkYmZcdTlkYTlcdTlkOTZcdTlkYTZcdTlkYTdcdTllOTlcdTllOWJcdTllOWFcdTllZTVcdTll''@;'; put 'put ''ZTRcdTllZTdcdTllZTZcdTlmMzBcdTlmMmVcdTlmNWJcdTlmNjBcdTlmNWVcdTlmNWRcdTlmNTlcdTlmOTFcdTUxM2FcdTUxMzlcdTUyOThcdTUyOTdcdTU2YzNcdTU2YmRcdTU2YmVcdTViNDhcdTViNDdcdTVkY2JcdTVkY2ZcdTVlZjFcdTYxZmRcdTY1MWJcdTZiMDJcdTZhZmNcdTZiMDNc''@;'; put 'put ''dTZhZjhcdTZiMDBcdTcwNDNcdTcwNDRcdTcwNGFcdTcwNDhcdTcwNDlcdTcwNDVcdTcwNDZcdTcyMWRcdTcyMWFcdTcyMTlcdTczN2VcdTc1MTdcdTc2NmFcdTc3ZDBcdTc5MmRcdTc5MzFcdTc5MmZcdTdjNTRcdTdjNTNcdTdjZjJcdTdlOGFcdTdlODdcdTdlODhcdTdlOGJcdTdlODZcdTdl''@;'; put 'put ''OGRcdTdmNGRcdTdmYmJcdTgwMzBcdTgxZGRcdTg2MThcdTg2MmFcdTg2MjZcdTg2MWZcdTg2MjNcdTg2MWNcdTg2MTlcdTg2MjdcdTg2MmVcdTg2MjFcdTg2MjBcdTg2MjlcdTg2MWVcdTg2MjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0''@;'; put 'put ''NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDVdW2ddXT02MjcyMCtnLHlbNjI3MjArZ109X1syNDVdW2ddKTtmb3IoX1syNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4MjlcdTg4MWRcdTg4MWJcdTg4MjBcdTg4MjRcdTg4''@;'; put 'put ''MWNcdTg4MmJcdTg4NGFcdTg5NmRcdTg5NjlcdTg5NmVcdTg5NmJcdTg5ZmFcdThiNzlcdThiNzhcdThiNDVcdThiN2FcdThiN2JcdThkMTBcdThkMTRcdThkYWZcdThlOGVcdThlOGNcdThmNWVcdThmNWJcdThmNWRcdTkxNDZcdTkxNDRcdTkxNDVcdTkxYjlcdTk0M2ZcdTk0M2JcdTk0MzZc''@;'; put 'put ''dTk0MjlcdTk0M2RcdTk0M2NcdTk0MzBcdTk0MzlcdTk0MmFcdTk0MzdcdTk0MmNcdTk0NDBcdTk0MzFcdTk1ZTVcdTk1ZTRcdTk1ZTNcdTk3MzVcdTk3M2FcdTk3YmZcdTk3ZTFcdTk4NjRcdTk4YzlcdTk4YzZcdTk4YzBcdTk5NThcdTk5NTZcdTlhMzlcdTlhM2RcdTlhNDZcdTlhNDRcdTlh''@;'; put 'put ''NDJcdTlhNDFcdTlhM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhM2ZcdTlhY2RcdTliMTVcdTliMTdcdTliMThcdTliMTZcdTliM2FcdTliNTJcdTljMmJcdTljMWRcdTljMWNcdTljMmNcdTljMjNcdTljMjhcdTljMjlcdTljMjRcdTljMjFcdTlkYjdcdTlk''@;'; put 'put ''YjZcdTlkYmNcdTlkYzFcdTlkYzdcdTlkY2FcdTlkY2ZcdTlkYmVcdTlkYzVcdTlkYzNcdTlkYmJcdTlkYjVcdTlkY2VcdTlkYjlcdTlkYmFcdTlkYWNcdTlkYzhcdTlkYjFcdTlkYWRcdTlkY2NcdTlkYjNcdTlkY2RcdTlkYjJcdTllN2FcdTllOWNcdTllZWJcdTllZWVcdTllZWRcdTlmMWJc''@;'; put 'put ''dTlmMThcdTlmMWFcdTlmMzFcdTlmNGVcdTlmNjVcdTlmNjRcdTlmOTJcdTRlYjlcdTU2YzZcdTU2YzVcdTU2Y2JcdTU5NzFcdTViNGJcdTViNGNcdTVkZDVcdTVkZDFcdTVlZjJcdTY1MjFcdTY1MjBcdTY1MjZcdTY1MjJcdTZiMGJcdTZiMDhcdTZiMDlcdTZjMGRcdTcwNTVcdTcwNTZcdTcw''@;'; put 'put ''NTdcdTcwNTJcdTcyMWVcdTcyMWZcdTcyYTlcdTczN2ZcdTc0ZDhcdTc0ZDVcdTc0ZDlcdTc0ZDdcdTc2NmRcdTc2YWRcdTc5MzVcdTc5YjRcdTdhNzBcdTdhNzFcdTdjNTdcdTdjNWNcdTdjNTlcdTdjNWJcdTdjNWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDZdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzI0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDZdW2ddXT02Mjk3NitnLHlbNjI5NzYrZ109X1syNDZdW2ddKTtmb3IoX1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjZjRcdTdjZjFcdTdlOTFcdTdm''@;'; put 'put ''NGZcdTdmODdcdTgxZGVcdTgyNmJcdTg2MzRcdTg2MzVcdTg2MzNcdTg2MmNcdTg2MzJcdTg2MzZcdTg4MmNcdTg4MjhcdTg4MjZcdTg4MmFcdTg4MjVcdTg5NzFcdTg5YmZcdTg5YmVcdTg5ZmJcdThiN2VcdThiODRcdThiODJcdThiODZcdThiODVcdThiN2ZcdThkMTVcdThlOTVcdThlOTRc''@;'; put 'put ''dThlOWFcdThlOTJcdThlOTBcdThlOTZcdThlOTdcdThmNjBcdThmNjJcdTkxNDdcdTk0NGNcdTk0NTBcdTk0NGFcdTk0NGJcdTk0NGZcdTk0NDdcdTk0NDVcdTk0NDhcdTk0NDlcdTk0NDZcdTk3M2ZcdTk3ZTNcdTk4NmFcdTk4NjlcdTk4Y2JcdTk5NTRcdTk5NWJcdTlhNGVcdTlhNTNcdTlh''@;'; put 'put ''NTRcdTlhNGNcdTlhNGZcdTlhNDhcdTlhNGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhNDlcdTlhNTJcdTlhNTBcdTlhZDBcdTliMTlcdTliMmJcdTliM2JcdTliNTZcdTliNTVcdTljNDZcdTljNDhcdTljM2ZcdTljNDRcdTljMzlcdTljMzNcdTljNDFcdTlj''@;'; put 'put ''M2NcdTljMzdcdTljMzRcdTljMzJcdTljM2RcdTljMzZcdTlkZGJcdTlkZDJcdTlkZGVcdTlkZGFcdTlkY2JcdTlkZDBcdTlkZGNcdTlkZDFcdTlkZGZcdTlkZTlcdTlkZDlcdTlkZDhcdTlkZDZcdTlkZjVcdTlkZDVcdTlkZGRcdTllYjZcdTllZjBcdTlmMzVcdTlmMzNcdTlmMzJcdTlmNDJc''@;'; put 'put ''dTlmNmJcdTlmOTVcdTlmYTJcdTUxM2RcdTUyOTlcdTU4ZThcdTU4ZTdcdTU5NzJcdTViNGRcdTVkZDhcdTg4MmZcdTVmNGZcdTYyMDFcdTYyMDNcdTYyMDRcdTY1MjlcdTY1MjVcdTY1OTZcdTY2ZWJcdTZiMTFcdTZiMTJcdTZiMGZcdTZiY2FcdTcwNWJcdTcwNWFcdTcyMjJcdTczODJcdTcz''@;'; put 'put ''ODFcdTczODNcdTc2NzBcdTc3ZDRcdTdjNjdcdTdjNjZcdTdlOTVcdTgyNmNcdTg2M2FcdTg2NDBcdTg2MzlcdTg2M2NcdTg2MzFcdTg2M2JcdTg2M2VcdTg4MzBcdTg4MzJcdTg4MmVcdTg4MzNcdTg5NzZcdTg5NzRcdTg5NzNcdTg5ZmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDdd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDddW2ddXT02MzIzMitnLHlbNjMyMzIrZ109X1syNDddW2ddKTtmb3IoX1syNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOGNcdThi''@;'; put 'put ''OGVcdThiOGJcdThiODhcdThjNDVcdThkMTlcdThlOThcdThmNjRcdThmNjNcdTkxYmNcdTk0NjJcdTk0NTVcdTk0NWRcdTk0NTdcdTk0NWVcdTk3YzRcdTk3YzVcdTk4MDBcdTlhNTZcdTlhNTlcdTliMWVcdTliMWZcdTliMjBcdTljNTJcdTljNThcdTljNTBcdTljNGFcdTljNGRcdTljNGJc''@;'; put 'put ''dTljNTVcdTljNTlcdTljNGNcdTljNGVcdTlkZmJcdTlkZjdcdTlkZWZcdTlkZTNcdTlkZWJcdTlkZjhcdTlkZTRcdTlkZjZcdTlkZTFcdTlkZWVcdTlkZTZcdTlkZjJcdTlkZjBcdTlkZTJcdTlkZWNcdTlkZjRcdTlkZjNcdTlkZThcdTlkZWRcdTllYzJcdTllZDBcdTllZjJcdTllZjNcdTlm''@;'; put 'put ''MDZcdTlmMWNcdTlmMzhcdTlmMzdcdTlmMzZcdTlmNDNcdTlmNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmNzFcdTlmNzBcdTlmNmVcdTlmNmZcdTU2ZDNcdTU2Y2RcdTViNGVcdTVjNmRcdTY1MmRcdTY2ZWRcdTY2ZWVcdTZiMTNcdTcwNWZcdTcwNjFcdTcw''@;'; put 'put ''NWRcdTcwNjBcdTcyMjNcdTc0ZGJcdTc0ZTVcdTc3ZDVcdTc5MzhcdTc5YjdcdTc5YjZcdTdjNmFcdTdlOTdcdTdmODlcdTgyNmRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NGJcdThiOTRcdThiOTVcdThlOWVcdThlOWZcdThlYTBcdThlOWRcdTkxYmVcdTkxYmRcdTkxYzJcdTk0NmJc''@;'; put 'put ''dTk0NjhcdTk0NjlcdTk2ZTVcdTk3NDZcdTk3NDNcdTk3NDdcdTk3YzdcdTk3ZTVcdTlhNWVcdTlhZDVcdTliNTlcdTljNjNcdTljNjdcdTljNjZcdTljNjJcdTljNWVcdTljNjBcdTllMDJcdTlkZmVcdTllMDdcdTllMDNcdTllMDZcdTllMDVcdTllMDBcdTllMDFcdTllMDlcdTlkZmZcdTlk''@;'; put 'put ''ZmRcdTllMDRcdTllYTBcdTlmMWVcdTlmNDZcdTlmNzRcdTlmNzVcdTlmNzZcdTU2ZDRcdTY1MmVcdTY1YjhcdTZiMThcdTZiMTlcdTZiMTdcdTZiMWFcdTcwNjJcdTcyMjZcdTcyYWFcdTc3ZDhcdTc3ZDlcdTc5MzlcdTdjNjlcdTdjNmJcdTdjZjZcdTdlOWFcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1syNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDhdW2ddXT02MzQ4OCtnLHlbNjM0ODgrZ109X1syNDhdW2ddKTtmb3IoX1syNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTdlOThcdTdlOWJcdTdlOTlcdTgxZTBcdTgxZTFcdTg2NDZcdTg2NDdcdTg2NDhcdTg5NzlcdTg5N2FcdTg5N2NcdTg5N2JcdTg5ZmZcdThiOThcdThiOTlcdThlYTVcdThlYTRcdThlYTNcdTk0NmVcdTk0NmRcdTk0NmZcdTk0NzFcdTk0NzNcdTk3NDlcdTk4NzJcdTk5NWZcdTljNjhc''@;'; put 'put ''dTljNmVcdTljNmRcdTllMGJcdTllMGRcdTllMTBcdTllMGZcdTllMTJcdTllMTFcdTllYTFcdTllZjVcdTlmMDlcdTlmNDdcdTlmNzhcdTlmN2JcdTlmN2FcdTlmNzlcdTU3MWVcdTcwNjZcdTdjNmZcdTg4M2NcdThkYjJcdThlYTZcdTkxYzNcdTk0NzRcdTk0NzhcdTk0NzZcdTk0NzVcdTlh''@;'; put 'put ''NjBcdTljNzRcdTljNzNcdTljNzFcdTljNzVcdTllMTRcdTllMTNcdTllZjZcdTlmMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmYTRcdTcwNjhcdTcwNjVcdTdjZjdcdTg2NmFcdTg4M2VcdTg4M2RcdTg4M2ZcdThiOWVcdThjOWNcdThlYTlcdThlYzlcdTk3''@;'; put 'put ''NGJcdTk4NzNcdTk4NzRcdTk4Y2NcdTk5NjFcdTk5YWJcdTlhNjRcdTlhNjZcdTlhNjdcdTliMjRcdTllMTVcdTllMTdcdTlmNDhcdTYyMDdcdTZiMWVcdTcyMjdcdTg2NGNcdThlYThcdTk0ODJcdTk0ODBcdTk0ODFcdTlhNjlcdTlhNjhcdTliMmVcdTllMTlcdTcyMjlcdTg2NGJcdThiOWZc''@;'; put 'put ''dTk0ODNcdTljNzlcdTllYjdcdTc2NzVcdTlhNmJcdTljN2FcdTllMWRcdTcwNjlcdTcwNmFcdTllYTRcdTlmN2VcdTlmNDlcdTlmOThcdTc4ODFcdTkyYjlcdTg4Y2ZcdTU4YmJcdTYwNTJcdTdjYTdcdTVhZmFcdTI1NTRcdTI1NjZcdTI1NTdcdTI1NjBcdTI1NmNcdTI1NjNcdTI1NWFcdTI1''@;'; put 'put ''NjlcdTI1NWRcdTI1NTJcdTI1NjRcdTI1NTVcdTI1NWVcdTI1NmFcdTI1NjFcdTI1NThcdTI1NjdcdTI1NWJcdTI1NTNcdTI1NjVcdTI1NTZcdTI1NWZcdTI1NmJcdTI1NjJcdTI1NTlcdTI1NjhcdTI1NWNcdTI1NTFcdTI1NTBcdTI1NmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1OTNcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1syNDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDldW2ddXT02Mzc0NCtnLHlbNjM3NDQrZ109X1syNDldW2ddKTtyZXR1cm57ZW5jOkksZGVjOnl9fSgpLFhbMTI1MF09ZnVuY3Rpb24oKXtmb3IodmFyIHk9''@;'; put 'put ''IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9Q''@;'; put 'put ''UVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwMTYwXHUyMDM5XHUwMTVhXHUwMTY0XHUwMTdkXHUwMTc5XHVmZmZkXHUyMDE4XHUyMDE5''@;'; put 'put ''XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTViXHUwMTY1XHUwMTdlXHUwMTdhXHhhMFx1MDJjN1x1MDJkOFx1MDE0MVx4YTRcdTAxMDRceGE2XHhhN1x4YThceGE5XHUwMTVlXHhhYlx4YWNceGFkXHhhZVx1MDE3Ylx4YjBceGIxXHUw''@;'; put 'put ''MmRiXHUwMTQyXHhiNFx4YjVceGI2XHhiN1x4YjhcdTAxMDVcdTAxNWZceGJiXHUwMTNkXHUwMmRkXHUwMTNlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAx''@;'; put 'put ''NDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhkYVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhm''@;'; put 'put ''M1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAxNzFceGZjXHhmZFx1MDE2M1x1MDJkOSIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVj''@;'; put 'put ''Okl9fSgpLFhbMTI1MV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKiss''@;'; put 'put ''LS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBh''@;'; put 'put ''XHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlc''@;'; put 'put ''dTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0NTRceGJiXHUwNDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4''@;'; put 'put ''XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUw''@;'; put 'put ''NDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRm''@;'; put 'put ''IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjUyXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4''@;'; put 'put ''MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdo''@;'; put 'put ''aWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNc''@;'; put 'put ''dTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJi''@;'; put 'put ''XHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRc''@;'; put 'put ''eGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5j''@;'; put 'put ''aGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTNdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3''@;'; put 'put ''XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1''@;'; put 'put ''MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBc''@;'; put 'put ''dTAzODVcdTAzODZceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRceGI1XHhiNlx4YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1''@;'; put 'put ''MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNh''@;'; put 'put ''ZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1''@;'; put 'put ''MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1NF09ZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZH''@;'; put 'put ''SElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUy''@;'; put 'put ''MDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4''@;'; put 'put ''YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJc''@;'; put 'put ''eGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIixJPVtdLF89e30s''@;'; put 'put ''Zz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjU1XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxu''@;'; put 'put ''XHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0''@;'; put 'put ''dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNc''@;'; put 'put ''dTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4''@;'; put 'put ''YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHVmZmZkXHUwNWJiXHUwNWJjXHUwNWJkXHUwNWJlXHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1''@;'; put 'put ''XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6''@;'; put 'put ''SX19KCksWFsxMjU2XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywt''@;'; put 'put ''Li8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdTA2N2VcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTA2NzlcdTIwMzlcdTAxNTJc''@;'; put 'put ''dTA2ODZcdTA2OThcdTA2ODhcdTA2YWZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTA2YTlcdTIxMjJcdTA2OTFcdTIwM2FcdTAxNTNcdTIwMGNcdTIwMGRcdTA2YmFceGEwXHUwNjBjXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdTA2YmVceGFi''@;'; put 'put ''XHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlcdTA2MWJceGJiXHhiY1x4YmRceGJlXHUwNjFmXHUwNmMxXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUw''@;'; put 'put ''NjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHhkN1x1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x4ZTBcdTA2NDRceGUyXHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHhlN1x4ZThceGU5XHhlYVx4''@;'; put 'put ''ZWJcdTA2NDlcdTA2NGFceGVlXHhlZlx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx4ZjRcdTA2NGZcdTA2NTBceGY3XHUwNjUxXHhmOVx1MDY1Mlx4ZmJceGZjXHUyMDBlXHUyMDBmXHUwNmQyIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3ku''@;'; put 'put ''Y2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjU3XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgx''@;'; put 'put ''N1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVc''@;'; put 'put ''dTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZk''@;'; put 'put ''XHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThc''@;'; put 'put ''dTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4''@;'; put 'put ''ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTAyZDkiLEk9W10sXz17fSxnPTA7MjU2''@;'; put 'put ''IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNThdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJc''@;'; put 'put ''eDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7''@;'; put 'put ''fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1''@;'; put 'put ''ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhj''@;'; put 'put ''MFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1''@;'; put 'put ''XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChn''@;'; put 'put ''KSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzFlNF09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1''@;'; put 'put ''XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2''@;'; put 'put ''XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUy''@;'; put 'put ''MjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUy''@;'; put 'put ''XHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNc''@;'; put 'put ''eGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXku''@;'; put 'put ''Y2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDAwNl09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgx''@;'; put 'put ''Y1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YjlceGIyXHhjOVx4YjNceGQ2XHhkY1x1MDM4NVx4ZTBceGUyXHhlNFx1MDM4''@;'; put 'put ''NFx4YThceGU3XHhlOVx4ZThceGVhXHhlYlx4YTNcdTIxMjJceGVlXHhlZlx1MjAyMlx4YmRcdTIwMzBceGY0XHhmNlx4YTZceGFkXHhmOVx4ZmJceGZjXHUyMDIwXHUwMzkzXHUwMzk0XHUwMzk4XHUwMzliXHUwMzllXHUwM2EwXHhkZlx4YWVceGE5XHUwM2EzXHUwM2FhXHhhN1x1MjI2MFx4''@;'; put 'put ''YjBcdTAzODdcdTAzOTFceGIxXHUyMjY0XHUyMjY1XHhhNVx1MDM5Mlx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OVx1MDM5YVx1MDM5Y1x1MDNhNlx1MDNhYlx1MDNhOFx1MDNhOVx1MDNhY1x1MDM5ZFx4YWNcdTAzOWZcdTAzYTFcdTIyNDhcdTAzYTRceGFiXHhiYlx1MjAyNlx4YTBcdTAzYTVc''@;'; put 'put ''dTAzYTdcdTAzODZcdTAzODhcdTAxNTNcdTIwMTNcdTIwMTVcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NjXHUwMzhmXHUwM2NkXHUwM2IxXHUwM2IyXHUwM2M4XHUwM2I0XHUwM2I1XHUwM2M2XHUwM2Iz''@;'; put 'put ''XHUwM2I3XHUwM2I5XHUwM2JlXHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JmXHUwM2MwXHUwM2NlXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2I4XHUwM2M5XHUwM2MyXHUwM2M3XHUwM2M1XHUwM2I2XHUwM2NhXHUwM2NiXHUwMzkwXHUwM2IwXHVmZmZkIixJPVtdLF89e30sZz0wOzI1NiE9''@;'; put 'put ''ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDAwN109ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4''@;'; put 'put ''MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8''@;'; put 'put ''fX5ceDdmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUw''@;'; put 'put ''NDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUyMjAyXHUwNDA4XHUwNDA0''@;'; put 'put ''XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAx''@;'; put 'put ''OVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0''@;'; put 'put ''NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hh''@;'; put 'put ''ckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDAwOF09ZnVuY3Rpb24oKXt2YXIgZyx5PVtdLEk9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4''@;'; put 'put ''MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHVmOGQ4XHVmOGQ5XHVmOGRhXHVmOGRiXHVmOGRj''@;'; put 'put ''XHVmOGRkXHVmOGRlXHVmOGRmXHVmOGUwXHVmOGUxXHVmOGUyXHVmOGUzXHVmOGU0XHVmOGU1XHVmOGU2XHVmOGU3XHVmOGU4XHVmOGU5XHVmOGVhXHVmOGViXHVmOGVjXHVmOGVkXHVmOGVlXHVmOGVmXHVmOGYwXHVmOGYxXHVmOGYyXHVmOGYzXHVmOGY0XHVmOGY1XHVmOGY2XHVmOGY3XHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOGY4XHVmOGY5XHVmOGZhXHVmOGZiXHVmOGZjXHVmOGZkXHVmOGZlXHVmOGZmIi5zcGxpdCgiIiksZz0wO2chPV9bMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1swXVtnXV09MCtnLHlbMCtnXT1fWzBd''@;'; put 'put ''W2ddKTtmb3IoX1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBc''@;'; put 'put ''dTMwMDFcdTMwMDJcdTMwZmJcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE1XHVmZjVlXHVmZmZkXHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3''@;'; put 'put ''XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUy''@;'; put 'put ''MjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEw''@;'; put 'put ''XHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYxXVtnXV09NDEyMTYrZyx5WzQxMjE2K2ddPV9bMTYxXVtn''@;'; put 'put ''XSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0''@;'; put 'put ''XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUy''@;'; put 'put ''NDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYz''@;'; put 'put ''XHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYyXVtnXV09NDE0NzIrZyx5WzQxNDcy''@;'; put 'put ''K2ddPV9bMTYyXVtnXSk7Zm9yKF9bMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFi''@;'; put 'put ''XHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVm''@;'; put 'put ''ZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUy''@;'; put 'put ''XHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYzXVtnXV09NDE3''@;'; put 'put ''MjgrZyx5WzQxNzI4K2ddPV9bMTYzXVtnXSk7Zm9yKF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5''@;'; put 'put ''XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUz''@;'; put 'put ''MDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkw''@;'; put 'put ''XHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MTY0XVtnXV09NDE5ODQrZyx5WzQxOTg0K2ddPV9bMTY0XVtnXSk7Zm9yKF9bMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3''@;'; put 'put ''XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUz''@;'; put 'put ''MGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVl''@;'; put 'put ''XHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjVdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMTY1XVtnXV09NDIyNDArZyx5WzQyMjQwK2ddPV9bMTY1XVtnXSk7Zm9yKF9bMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2''@;'; put 'put ''XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUw''@;'; put 'put ''M2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjZd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY2XVtnXV09NDI0OTYrZyx5WzQyNDk2K2ddPV9bMTY2XVtnXSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIx''@;'; put 'put ''XHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4''@;'; put 'put ''XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY3XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1sxNjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY3XVtnXV09NDI3NTIrZyx5WzQyNzUyK2ddPV9bMTY3XVtnXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1''@;'; put 'put ''MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUz''@;'; put 'put ''MTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjhd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY4XVtnXV09NDMwMDgrZyx5WzQzMDA4K2ddPV9bMTY4XVtnXSk7Zm9yKF9bMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBm''@;'; put 'put ''XHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUy''@;'; put 'put ''NTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUyNTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2''@;'; put 'put ''XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY5XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1sxNjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY5XVtnXV09NDMyNjQrZyx5WzQzMjY0K2ddPV9bMTY5XVtnXSk7Zm9yKF9bMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4''@;'; put 'put ''XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1''@;'; put 'put ''ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNj''@;'; put 'put ''XHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc2XS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1sxNzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc2XVtnXV09NDUwNTYrZyx5WzQ1MDU2K2ddPV9bMTc2XVtnXSk7Zm9yKF9bMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIy''@;'; put 'put ''XHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1''@;'; put 'put ''ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4''@;'; put 'put ''XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMTc3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc3XVtnXV09NDUzMTIrZyx5WzQ1MzEyK2ddPV9bMTc3XVtnXSk7Zm9yKF9bMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0''@;'; put 'put ''XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5''@;'; put 'put ''MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZk''@;'; put 'put ''XHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2XHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMTc4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc4XVtnXV09NDU1NjgrZyx5WzQ1NTY4K2ddPV9bMTc4XVtnXSk7Zm9yKF9bMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIx''@;'; put 'put ''XHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1''@;'; put 'put ''N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1''@;'; put 'put ''XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2''@;'; put 'put ''OTVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc5XVtnXV09NDU4MjQrZyx5WzQ1ODI0K2ddPV9bMTc5XVtnXSk7Zm9yKF9bMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdm''@;'; put 'put ''XHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3''@;'; put 'put ''OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2''@;'; put 'put ''XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4''@;'; put 'put ''ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgwXVtnXV09NDYwODArZyx5WzQ2MDgwK2ddPV9bMTgwXVtnXSk7Zm9yKF9bMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4''@;'; put 'put ''XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1''@;'; put 'put ''Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0''@;'; put 'put ''XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3''@;'; put 'put ''ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgxXVtnXV09NDYzMzYrZyx5WzQ2MzM2K2ddPV9bMTgxXVtnXSk7Zm9yKF9bMTgyXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2''@;'; put 'put ''XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4''@;'; put 'put ''YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZl''@;'; put 'put ''XHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4''@;'; put 'put ''MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgyXVtnXV09NDY1OTIrZyx5WzQ2NTkyK2ddPV9bMTgyXVtnXSk7Zm9yKF9b''@;'; put 'put ''MTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDMwXHU1M2QxXHU3ZjVh''@;'; put 'put ''XHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2''@;'; put 'put ''MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2Yzdl''@;'; put 'put ''XHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2''@;'; put 'put ''Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgzXVtnXV09NDY4NDgrZyx5WzQ2ODQ4K2ddPV9bMTgz''@;'; put 'put ''XVtnXSk7Zm9yKF9bMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZl''@;'; put 'put ''XHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5''@;'; put 'put ''NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDli''@;'; put 'put ''XHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5''@;'; put 'put ''Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg0XVtnXV09NDcxMDQrZyx5WzQ3''@;'; put 'put ''MTA0K2ddPV9bMTg0XVtnXSk7Zm9yKF9bMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1''@;'; put 'put ''OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJh''@;'; put 'put ''XHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4''@;'; put 'put ''ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg1XVtnXV09''@;'; put 'put ''NDczNjArZyx5WzQ3MzYwK2ddPV9bMTg1XVtnXSk7Zm9yKF9bMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2''@;'; put 'put ''YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4''@;'; put 'put ''XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1''@;'; put 'put ''NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODZdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMTg2XVtnXV09NDc2MTYrZyx5WzQ3NjE2K2ddPV9bMTg2XVtnXSk7Zm9yKF9bMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3''@;'; put 'put ''M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcw''@;'; put 'put ''XHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2''@;'; put 'put ''ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODddW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMTg3XVtnXV09NDc4NzIrZyx5WzQ3ODcyK2ddPV9bMTg3XVtnXSk7Zm9yKF9bMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1''@;'; put 'put ''YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5''@;'; put 'put ''XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2''@;'; put 'put ''OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sx''@;'; put 'put ''ODhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg4XVtnXV09NDgxMjgrZyx5WzQ4MTI4K2ddPV9bMTg4XVtnXSk7Zm9yKF9bMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1''@;'; put 'put ''MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4Zjdm''@;'; put 'put ''XHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3''@;'; put 'put ''NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg5XS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1sxODldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg5XVtnXV09NDgzODQrZyx5WzQ4Mzg0K2ddPV9bMTg5XVtnXSk7Zm9yKF9bMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5''@;'; put 'put ''ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhl''@;'; put 'put ''XHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2''@;'; put 'put ''MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkw''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkwXVtnXV09NDg2NDArZyx5WzQ4NjQwK2ddPV9bMTkwXVtnXSk7Zm9yKF9bMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1''@;'; put 'put ''MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0''@;'; put 'put ''XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2''@;'; put 'put ''MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPV9bMTkxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkxXVtnXV09NDg4OTYrZyx5WzQ4ODk2K2ddPV9bMTkxXVtnXSk7Zm9yKF9bMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2''@;'; put 'put ''MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNh''@;'; put 'put ''XHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1''@;'; put 'put ''MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMTkyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkyXVtnXV09NDkxNTIrZyx5WzQ5MTUyK2ddPV9bMTkyXVtnXSk7Zm9yKF9bMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4''@;'; put 'put ''M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3''@;'; put 'put ''XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4''@;'; put 'put ''M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNj''@;'; put 'put ''XHU3YWJmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkzXVtnXV09NDk0MDgrZyx5WzQ5NDA4K2ddPV9bMTkzXVtnXSk7Zm9yKF9bMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2''@;'; put 'put ''ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1''@;'; put 'put ''XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5''@;'; put 'put ''NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEz''@;'; put 'put ''XHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk0XVtnXV09NDk2NjQrZyx5WzQ5NjY0K2ddPV9bMTk0XVtnXSk7Zm9yKF9bMTk1XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4''@;'; put 'put ''M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQw''@;'; put 'put ''XHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2''@;'; put 'put ''OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIz''@;'; put 'put ''XHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk1XVtnXV09NDk5MjArZyx5WzQ5OTIwK2ddPV9bMTk1XVtnXSk7Zm9yKF9bMTk2XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3''@;'; put 'put ''OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2''@;'; put 'put ''XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4''@;'; put 'put ''MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRh''@;'; put 'put ''XHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk2XVtnXV09NTAxNzYrZyx5WzUwMTc2K2ddPV9bMTk2XVtnXSk7Zm9y''@;'; put 'put ''KF9bMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmU3XHU2Y2RlXHU3''@;'; put 'put ''MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZh''@;'; put 'put ''XHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3''@;'; put 'put ''MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3''@;'; put 'put ''XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk3XVtnXV09NTA0MzIrZyx5WzUwNDMyK2ddPV9b''@;'; put 'put ''MTk3XVtnXSk7Zm9yKF9bMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1''@;'; put 'put ''NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBk''@;'; put 'put ''XHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2''@;'; put 'put ''NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAx''@;'; put 'put ''XHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk4XVtnXV09NTA2ODgrZyx5''@;'; put 'put ''WzUwNjg4K2ddPV9bMTk4XVtnXSk7Zm9yKF9bMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDVi''@;'; put 'put ''XHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0''@;'; put 'put ''ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIx''@;'; put 'put ''XHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk5XVtn''@;'; put 'put ''XV09NTA5NDQrZyx5WzUwOTQ0K2ddPV9bMTk5XVtnXSk7Zm9yKF9bMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMw''@;'; put 'put ''XHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0''@;'; put 'put ''ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRh''@;'; put 'put ''XHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDBdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMjAwXVtnXV09NTEyMDArZyx5WzUxMjAwK2ddPV9bMjAwXVtnXSk7Zm9yKF9bMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1''@;'; put 'put ''XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2''@;'; put 'put ''OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFi''@;'; put 'put ''XHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDFdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMjAxXVtnXV09NTE0NTYrZyx5WzUxNDU2K2ddPV9bMjAxXVtnXSk7Zm9yKF9bMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4Njgw''@;'; put 'put ''XHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1''@;'; put 'put ''ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1Yjcw''@;'; put 'put ''XHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAyXS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1syMDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAyXVtnXV09NTE3MTIrZyx5WzUxNzEyK2ddPV9bMjAyXVtnXSk7Zm9yKF9bMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2Fj''@;'; put 'put ''XHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1''@;'; put 'put ''YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhl''@;'; put 'put ''XHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAzXS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1syMDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAzXVtnXV09NTE5NjgrZyx5WzUxOTY4K2ddPV9bMjAzXVtnXSk7Zm9yKF9bMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJh''@;'; put 'put ''XHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3''@;'; put 'put ''MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1Njhm''@;'; put 'put ''XHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b''@;'; put 'put ''MjA0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA0XVtnXV09NTIyMjQrZyx5WzUyMjI0K2ddPV9bMjA0XVtnXSk7Zm9yKF9bMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0''@;'; put 'put ''XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4''@;'; put 'put ''OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdl''@;'; put 'put ''XHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPV9bMjA1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA1XVtnXV09NTI0ODArZyx5WzUyNDgwK2ddPV9bMjA1XVtnXSk7Zm9yKF9bMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0''@;'; put 'put ''XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3''@;'; put 'put ''YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNi''@;'; put 'put ''XHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA2XVtnXV09NTI3MzYrZyx5WzUyNzM2K2ddPV9bMjA2XVtnXSk7Zm9yKF9bMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFh''@;'; put 'put ''XHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2''@;'; put 'put ''MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2Ey''@;'; put 'put ''XHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2''@;'; put 'put ''ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA3XVtnXV09NTI5OTIrZyx5WzUyOTkyK2ddPV9bMjA3XVtnXSk7Zm9yKF9bMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0''@;'; put 'put ''XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1''@;'; put 'put ''ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3Zjll''@;'; put 'put ''XHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1''@;'; put 'put ''YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA4XVtnXV09NTMyNDgrZyx5WzUzMjQ4K2ddPV9bMjA4XVtnXSk7Zm9yKF9bMjA5XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTli''@;'; put 'put ''XHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1''@;'; put 'put ''ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0''@;'; put 'put ''XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2''@;'; put 'put ''ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA5XVtnXV09NTM1MDQrZyx5WzUzNTA0K2ddPV9bMjA5XVtnXSk7Zm9yKF9bMjEwXT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkx''@;'; put 'put ''XHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0''@;'; put 'put ''ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5''@;'; put 'put ''XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1''@;'; put 'put ''NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEwXVtnXV09NTM3NjArZyx5WzUzNzYwK2ddPV9bMjEwXVtnXSk7''@;'; put 'put ''Zm9yKF9bMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzcwXHU4MmYx''@;'; put 'put ''XHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2''@;'; put 'put ''Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0''@;'; put 'put ''XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1''@;'; put 'put ''NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjExXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjExXVtnXV09NTQwMTYrZyx5WzU0MDE2K2dd''@;'; put 'put ''PV9bMjExXVtnXSk7Zm9yKF9bMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3''@;'; put 'put ''ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIw''@;'; put 'put ''XHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2''@;'; put 'put ''Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEyXVtnXV09NTQyNzIr''@;'; put 'put ''Zyx5WzU0MjcyK2ddPV9bMjEyXVtnXSk7Zm9yKF9bMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4''@;'; put 'put ''NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3''@;'; put 'put ''XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2''@;'; put 'put ''MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEz''@;'; put 'put ''XVtnXV09NTQ1MjgrZyx5WzU0NTI4K2ddPV9bMjEzXVtnXSk7Zm9yKF9bMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2''@;'; put 'put ''MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlm''@;'; put 'put ''XHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4''@;'; put 'put ''YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTRdW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMjE0XVtnXV09NTQ3ODQrZyx5WzU0Nzg0K2ddPV9bMjE0XVtnXSk7Zm9yKF9bMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5''@;'; put 'put ''NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3Yzdk''@;'; put 'put ''XHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5''@;'; put 'put ''MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTVdW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMjE1XVtnXV09NTUwNDArZyx5WzU1MDQwK2ddPV9bMjE1XVtnXSk7Zm9yKF9bMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1''@;'; put 'put ''MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1''@;'; put 'put ''XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0''@;'; put 'put ''ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE2XS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09X1syMTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE2XVtnXV09NTUyOTYrZyx5WzU1Mjk2K2ddPV9bMjE2XVtnXSk7Zm9yKF9bMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0''@;'; put 'put ''ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdi''@;'; put 'put ''XHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1''@;'; put 'put ''MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE3XS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09X1syMTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE3XVtnXV09NTU1NTIrZyx5WzU1NTUyK2ddPV9bMjE3XVtnXSk7Zm9yKF9bMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4''@;'; put 'put ''YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEy''@;'; put 'put ''XHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5''@;'; put 'put ''NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PV9bMjE4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE4XVtnXV09NTU4MDgrZyx5WzU1ODA4K2ddPV9bMjE4XVtnXSk7Zm9yKF9bMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5''@;'; put 'put ''MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1''@;'; put 'put ''XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1''@;'; put 'put ''NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPV9bMjE5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE5XVtnXV09NTYwNjQrZyx5WzU2MDY0K2ddPV9bMjE5XVtnXSk7Zm9yKF9bMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1''@;'; put 'put ''ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFl''@;'; put 'put ''XHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4''@;'; put 'put ''MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIwXVtnXV09NTYzMjArZyx5WzU2MzIwK2ddPV9bMjIwXVtnXSk7Zm9yKF9bMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4''@;'; put 'put ''M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2''@;'; put 'put ''XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4''@;'; put 'put ''NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5''@;'; put 'put ''XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIxXVtnXV09NTY1NzYrZyx5WzU2NTc2K2ddPV9bMjIxXVtnXSk7Zm9yKF9bMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4''@;'; put 'put ''NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZl''@;'; put 'put ''XHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2''@;'; put 'put ''MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIx''@;'; put 'put ''XHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIyXVtnXV09NTY4MzIrZyx5WzU2ODMyK2ddPV9bMjIyXVtnXSk7Zm9yKF9bMjIzXT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2''@;'; put 'put ''NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIx''@;'; put 'put ''XHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1''@;'; put 'put ''NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5''@;'; put 'put ''XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIzXVtnXV09NTcwODgrZyx5WzU3MDg4K2ddPV9bMjIzXVtnXSk7Zm9yKF9bMjI0''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTM3XHU1NTU2XHU1NTc1XHU1''@;'; put 'put ''NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWVi''@;'; put 'put ''XHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1''@;'; put 'put ''NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5''@;'; put 'put ''XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI0XVtnXV09NTczNDQrZyx5WzU3MzQ0K2ddPV9bMjI0XVtn''@;'; put 'put ''XSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZTM3XHU1''@;'; put 'put ''ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0''@;'; put 'put ''XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4''@;'; put 'put ''YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQy''@;'; put 'put ''XHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI1XVtnXV09NTc2MDArZyx5WzU3NjAw''@;'; put 'put ''K2ddPV9bMjI1XVtnXSk7Zm9yKF9bMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYz''@;'; put 'put ''XHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1''@;'; put 'put ''ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFi''@;'; put 'put ''XHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI2XVtnXV09NTc4''@;'; put 'put ''NTYrZyx5WzU3ODU2K2ddPV9bMjI2XVtnXSk7Zm9yKF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBl''@;'; put 'put ''XHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5''@;'; put 'put ''NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2Fk''@;'; put 'put ''XHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MjI3XVtnXV09NTgxMTIrZyx5WzU4MTEyK2ddPV9bMjI3XVtnXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVl''@;'; put 'put ''XHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2''@;'; put 'put ''ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1''@;'; put 'put ''XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjhdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMjI4XVtnXV09NTgzNjgrZyx5WzU4MzY4K2ddPV9bMjI4XVtnXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1Yjkz''@;'; put 'put ''XHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5''@;'; put 'put ''MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUw''@;'; put 'put ''XHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjld''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI5XVtnXV09NTg2MjQrZyx5WzU4NjI0K2ddPV9bMjI5XVtnXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5''@;'; put 'put ''XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1''@;'; put 'put ''YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThh''@;'; put 'put ''XHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMwXS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1syMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMwXVtnXV09NTg4ODArZyx5WzU4ODgwK2ddPV9bMjMwXVtnXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWVi''@;'; put 'put ''XHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3ZjIyXHU3ZjIzXHU3''@;'; put 'put ''ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3''@;'; put 'put ''XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMxXS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1syMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMxXVtnXV09NTkxMzYrZyx5WzU5MTM2K2ddPV9bMjMxXVtnXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3''@;'; put 'put ''XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2''@;'; put 'put ''Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0''@;'; put 'put ''XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMjMyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMyXVtnXV09NTkzOTIrZyx5WzU5MzkyK2ddPV9bMjMyXVtnXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0''@;'; put 'put ''XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2''@;'; put 'put ''YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3''@;'; put 'put ''XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMjMzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMzXVtnXV09NTk2NDgrZyx5WzU5NjQ4K2ddPV9bMjMzXVtnXSk7Zm9yKF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIy''@;'; put 'put ''XHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2''@;'; put 'put ''NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4''@;'; put 'put ''XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2''@;'; put 'put ''M2IwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM0XVtnXV09NTk5MDQrZyx5WzU5OTA0K2ddPV9bMjM0XVtnXSk7Zm9yKF9bMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1''@;'; put 'put ''XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4''@;'; put 'put ''MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVh''@;'; put 'put ''XHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2''@;'; put 'put ''NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM1XVtnXV09NjAxNjArZyx5WzYwMTYwK2ddPV9bMjM1XVtnXSk7Zm9yKF9bMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2''@;'; put 'put ''XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3''@;'; put 'put ''MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5''@;'; put 'put ''XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3''@;'; put 'put ''OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM2XVtnXV09NjA0MTYrZyx5WzYwNDE2K2ddPV9bMjM2XVtnXSk7Zm9yKF9bMjM3XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQx''@;'; put 'put ''XHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3''@;'; put 'put ''ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1''@;'; put 'put ''XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3''@;'; put 'put ''NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM3XVtnXV09NjA2NzIrZyx5WzYwNjcyK2ddPV9bMjM3XVtnXSk7Zm9yKF9b''@;'; put 'put ''MjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzYyXHU3NzY1XHU3Nzdm''@;'; put 'put ''XHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3''@;'; put 'put ''ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIw''@;'; put 'put ''XHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5''@;'; put 'put ''NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM4XVtnXV09NjA5MjgrZyx5WzYwOTI4K2ddPV9bMjM4''@;'; put 'put ''XVtnXSk7Zm9yKF9bMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NGU5''@;'; put 'put ''XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5''@;'; put 'put ''NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUz''@;'; put 'put ''XHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5''@;'; put 'put ''NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM5XVtnXV09NjExODQrZyx5WzYx''@;'; put 'put ''MTg0K2ddPV9bMjM5XVtnXSk7Zm9yKF9bMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5''@;'; put 'put ''ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZhXHU5ZTZiXHU5ZTZj''@;'; put 'put ''XHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3''@;'; put 'put ''NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQwXVtnXV09''@;'; put 'put ''NjE0NDArZyx5WzYxNDQwK2ddPV9bMjQwXVtnXSk7Zm9yKF9bMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3''@;'; put 'put ''YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4''@;'; put 'put ''XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4''@;'; put 'put ''MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMjQxXVtnXV09NjE2OTYrZyx5WzYxNjk2K2ddPV9bMjQxXVtnXSk7Zm9yKF9bMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4''@;'; put 'put ''NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRl''@;'; put 'put ''XHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4''@;'; put 'put ''NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDJdW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMjQyXVtnXV09NjE5NTIrZyx5WzYxOTUyK2ddPV9bMjQyXVtnXSk7Zm9yKF9bMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4''@;'; put 'put ''N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJl''@;'; put 'put ''XHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3''@;'; put 'put ''YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sy''@;'; put 'put ''NDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQzXVtnXV09NjIyMDgrZyx5WzYyMjA4K2ddPV9bMjQzXVtnXSk7Zm9yKF9bMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4''@;'; put 'put ''MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3Yzkx''@;'; put 'put ''XHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3''@;'; put 'put ''ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ0XS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1syNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ0XVtnXV09NjI0NjQrZyx5WzYyNDY0K2ddPV9bMjQ0XVtnXSk7Zm9yKF9bMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5''@;'; put 'put ''MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2''@;'; put 'put ''XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4''@;'; put 'put ''ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ1''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ1XVtnXV09NjI3MjArZyx5WzYyNzIwK2ddPV9bMjQ1XVtnXSk7Zm9yKF9bMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5''@;'; put 'put ''NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZh''@;'; put 'put ''XHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1XHU5''@;'; put 'put ''Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPV9bMjQ2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ2XVtnXV09NjI5NzYrZyx5WzYyOTc2K2ddPV9bMjQ2XVtnXSk7Zm9yKF9bMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5''@;'; put 'put ''Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1''@;'; put 'put ''XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5''@;'; put 'put ''ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0XHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMjQ3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ3XVtnXV09NjMyMzIrZyx5WzYzMjMyK2ddPV9bMjQ3XVtnXSk7cmV0dXJue2VuYzpJLGRlYzp5fX0oKSxYWzEwMDI5XT1mdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''eT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1O''@;'; put 'put ''T1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEwNVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAxMDdceGU5XHUwMTc5XHUwMTdhXHUwMTBlXHhlZFx1MDEwZlx1MDExMlx1''@;'; put 'put ''MDExM1x1MDExNlx4ZjNcdTAxMTdceGY0XHhmNlx4ZjVceGZhXHUwMTFhXHUwMTFiXHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUwMTIzXHUwMTJlXHUwMTJmXHUwMTJhXHUyMjY0XHUyMjY1XHUwMTJiXHUw''@;'; put 'put ''MTM2XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNiXHUwMTNjXHUwMTNkXHUwMTNlXHUwMTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDE0OFx1MDE1MFx4ZDVcdTAxNTFcdTAxNGNcdTIwMTNcdTIwMTRcdTIw''@;'; put 'put ''MWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHUwMTRkXHUwMTU0XHUwMTU1XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFhXHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhjMVx1MDE2NFx1MDE2NVx4Y2RcdTAxN2RcdTAxN2VcdTAxNmFceGQzXHhk''@;'; put 'put ''NFx1MDE2Ylx1MDE2ZVx4ZGFcdTAxNmZcdTAxNzBcdTAxNzFcdTAxNzJcdTAxNzNceGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtn''@;'; put 'put ''XT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTAwNzldPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgx''@;'; put 'put ''Ylx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhl''@;'; put 'put ''M1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIy''@;'; put 'put ''NjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNc''@;'; put 'put ''dTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAy''@;'; put 'put ''YzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhb''@;'; put 'put ''MTAwODFdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0''@;'; put 'put ''NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4''@;'; put 'put ''ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUw''@;'; put 'put ''M2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4''@;'; put 'put ''XHUwMTFlXHUwMTFmXHUwMTMwXHUwMTMxXHUwMTVlXHUwMTVmXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1ZmZmZFx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlc''@;'; put 'put ''dTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsyODU5MV09ZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xN''@;'; put 'put ''Tk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5''@;'; put 'put ''Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0''@;'; put 'put ''XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRc''@;'; put 'put ''eGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJu''@;'; put 'put ''e2VuYzpfLGRlYzpJfX0oKSx1ZS5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSImJih1ZS5leHBvcnRzPVgpLGZ1bmN0aW9uKHksSSl7InVzZSBzdHJpY3QiO2lmKHR5cGVvZiBYPiJ1Iil7dmFyIF89WDt1ZS5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9SVF9D''@;'; put 'put ''T0RFUEFHRT4idSI/dWUuZXhwb3J0cz1JKF8pOnkuY3B0YWJsZT1JKF8pfWVsc2UgWD1JKFgpfSh0aGlzLGZ1bmN0aW9uKHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST17MTIwMDoidXRmMTZsZSIsMTIwMToidXRmMTZiZSIsMTJlMzoidXRmMzJsZSIsMTIwMDE6InV0ZjMyYmUiLDE2OTY5OiJ1dGY2''@;'; put 'put ''NGxlIiwyMDEyNzoiYXNjaWkiLDY1ZTM6InV0ZjciLDY1MDAxOiJ1dGY4In0sXz1bODc0LDEyNTAsMTI1MSwxMjUyLDEyNTMsMTI1NCwxMjU1LDEyNTYsMWU0XSxnPVs5MzIsOTM2LDk0OSw5NTBdLEI9WzY1MDAxXSx3PXt9LFA9e30sRj17fSxPPXt9LHo9ZnVuY3Rpb24oail7cmV0dXJuIFN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoail9LE49ZnVuY3Rpb24oail7cmV0dXJuIGouY2hhckNvZGVBdCgwKX0sTD10eXBlb2YgQnVmZmVyPCJ1IixLPWZ1bmN0aW9uKCl7fTtpZihMKXt2YXIgVT0hQnVmZmVyLmZyb207aWYoIVUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7VT0h''@;'; put 'put ''MH1LPVU/ZnVuY3Rpb24oSCxqKXtyZXR1cm4gaj9uZXcgQnVmZmVyKEgsaik6bmV3IEJ1ZmZlcihIKX06QnVmZmVyLmZyb20uYmluZChCdWZmZXIpLEJ1ZmZlci5hbGxvY1Vuc2FmZXx8KEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihIKXtyZXR1cm4gbmV3IEJ1ZmZlcihIKX0pO3ZhciBX''@;'; put 'put ''PTEwMjQsWT1CdWZmZXIuYWxsb2NVbnNhZmUoVyksZWU9ZnVuY3Rpb24oail7dmFyIEU9ZnVuY3Rpb24oail7Zm9yKHZhciBFPUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NTUzNiksbT0wO208NjU1MzY7KyttKUVbbV09MDtmb3IodmFyIEE9T2JqZWN0LmtleXMoaiksYWU9QS5sZW5ndGgsdGU9MCxz''@;'; put 'put ''ZT1BW3RlXTt0ZTxhZTsrK3RlKShzZT1BW3RlXSkmJihFW3NlLmNoYXJDb2RlQXQoMCldPWpbc2VdKTtyZXR1cm4gRX0oeVtqXS5lbmMpO3JldHVybiBmdW5jdGlvbihBLGFlKXt2YXIgc2UsdGU9QS5sZW5ndGgsd2U9MCxVZT0wLEplPTAsb3Q9MDtpZigic3RyaW5nIj09dHlwZW9mIEEpZm9y''@;'; put 'put ''KHNlPUJ1ZmZlci5hbGxvY1Vuc2FmZSh0ZSksd2U9MDt3ZTx0ZTsrK3dlKXNlW3dlXT1FW0EuY2hhckNvZGVBdCh3ZSldO2Vsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKEEpKXtmb3Ioc2U9QnVmZmVyLmFsbG9jVW5zYWZlKDIqdGUpLFVlPTAsd2U9MDt3ZTx0ZTsrK3dlKShKZT1BW3dlXSk8MTI4''@;'; put 'put ''P3NlW1VlKytdPUVbSmVdOkplPDIyND8oc2VbVWUrK109RVsoKDMxJkplKTw8NikrKDYzJkFbd2UrMV0pXSwrK3dlKTpKZTwyNDA/KHNlW1VlKytdPUVbKCgxNSZKZSk8PDEyKSsoKDYzJkFbd2UrMV0pPDw2KSsoNjMmQVt3ZSsyXSldLHdlKz0yKToob3Q9KCg3JkplKTw8MTgpKygoNjMmQVt3''@;'; put 'put ''ZSsxXSk8PDEyKSsoKDYzJkFbd2UrMl0pPDw2KSsoNjMmQVt3ZSszXSksd2UrPTMsb3Q8NjU1MzY/c2VbVWUrK109RVtvdF06KHNlW1VlKytdPUVbNTUyOTYrKChvdC09NjU1MzYpPj4xMCYxMDIzKV0sc2VbVWUrK109RVs1NjMyMCsoMTAyMyZvdCldKSk7c2U9c2Uuc2xpY2UoMCxVZSl9ZWxz''@;'; put 'put ''ZSBmb3Ioc2U9QnVmZmVyLmFsbG9jVW5zYWZlKHRlKSx3ZT0wO3dlPHRlOysrd2Upc2Vbd2VdPUVbQVt3ZV0uY2hhckNvZGVBdCgwKV07cmV0dXJuIGFlJiYiYnVmIiE9PWFlPyJhcnIiIT09YWU/c2UudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoc2UpOnNlfX0sSj1mdW5jdGlv''@;'; put 'put ''bihqKXt2YXIgRT15W2pdLmRlYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLEE9MCxhZT0iIjtmb3IoQT0wO0E8RS5sZW5ndGg7KytBKWlmKGFlPUVbQV0pe3ZhciB0ZT1hZS5jaGFyQ29kZUF0KDApO21bMipBXT0yNTUmdGUsbVsyKkErMV09dGU+Pjh9cmV0dXJuIGZ1bmN0aW9uKHdl''@;'; put 'put ''KXt2YXIgVWU9d2UubGVuZ3RoLEplPTAsb3Q9MDtpZigyKlVlPlcmJihXPTIqVWUsWT1CdWZmZXIuYWxsb2NVbnNhZmUoVykpLEJ1ZmZlci5pc0J1ZmZlcih3ZSkpZm9yKEplPTA7SmU8VWU7SmUrKylZWzIqSmVdPW1bb3Q9Mip3ZVtKZV1dLFlbMipKZSsxXT1tW290KzFdO2Vsc2UgaWYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiB3ZSlmb3IoSmU9MDtKZTxVZTtKZSsrKW90PTIqd2UuY2hhckNvZGVBdChKZSksWVsyKkplXT1tW290XSxZWzIqSmUrMV09bVtvdCsxXTtlbHNlIGZvcihKZT0wO0plPFVlO0plKyspWVsyKkplXT1tW290PTIqd2VbSmVdXSxZWzIqSmUrMV09bVtvdCsxXTtyZXR1cm4g''@;'; put 'put ''WS5zbGljZSgwLDIqVWUpLnRvU3RyaW5nKCJ1Y3MyIil9fSxuZT1mdW5jdGlvbihqKXtmb3IodmFyIEU9eVtqXS5lbmMsbT1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSxBPTA7QTwxMzEwNzI7KytBKW1bQV09MDtmb3IodmFyIGFlPU9iamVjdC5rZXlzKEUpLHRlPTAsc2U9YWVbdGVdO3Rl''@;'; put 'put ''PGFlLmxlbmd0aDsrK3RlKWlmKHNlPWFlW3RlXSl7dmFyIHdlPXNlLmNoYXJDb2RlQXQoMCk7bVsyKndlXT0yNTUmRVtzZV0sbVsyKndlKzFdPUVbc2VdPj44fXJldHVybiBmdW5jdGlvbihKZSxvdCl7dmFyIHhlPUplLmxlbmd0aCx2ZT1CdWZmZXIuYWxsb2NVbnNhZmUoMip4ZSksWGU9MCx6''@;'; put 'put ''ZT0wLERlPTAsRmU9MCxPZT0wO2lmKCJzdHJpbmciPT10eXBlb2YgSmUpe2ZvcihYZT1GZT0wO1hlPHhlOysrWGUpemU9MipKZS5jaGFyQ29kZUF0KFhlKSx2ZVtGZSsrXT1tW3plKzFdfHxtW3plXSxtW3plKzFdPjAmJih2ZVtGZSsrXT1tW3plXSk7dmU9dmUuc2xpY2UoMCxGZSl9ZWxzZSBp''@;'; put 'put ''ZihCdWZmZXIuaXNCdWZmZXIoSmUpKXtmb3IoWGU9RmU9MDtYZTx4ZTsrK1hlKShPZT1KZVtYZV0pPDEyOD96ZT1PZTpPZTwyMjQ/KHplPSgoMzEmT2UpPDw2KSsoNjMmSmVbWGUrMV0pLCsrWGUpOk9lPDI0MD8oemU9KCgxNSZPZSk8PDEyKSsoKDYzJkplW1hlKzFdKTw8NikrKDYzJkplW1hl''@;'; put 'put ''KzJdKSxYZSs9Mik6KHplPSgoNyZPZSk8PDE4KSsoKDYzJkplW1hlKzFdKTw8MTIpKygoNjMmSmVbWGUrMl0pPDw2KSsoNjMmSmVbWGUrM10pLFhlKz0zKSx6ZTw2NTUzNj8odmVbRmUrK109bVsxKyh6ZSo9MildfHxtW3plXSxtW3plKzFdPjAmJih2ZVtGZSsrXT1tW3plXSkpOih2ZVtGZSsr''@;'; put 'put ''XT1tWzErKHplPTIqKDU1Mjk2KygoRGU9emUtNjU1MzYpPj4xMCYxMDIzKSkpXXx8bVt6ZV0sbVt6ZSsxXT4wJiYodmVbRmUrK109bVt6ZV0pLHZlW0ZlKytdPW1bMSsoemU9MiooNTYzMjArKDEwMjMmRGUpKSldfHxtW3plXSxtW3plKzFdPjAmJih2ZVtGZSsrXT1tW3plXSkpO3ZlPXZlLnNs''@;'; put 'put ''aWNlKDAsRmUpfWVsc2UgZm9yKFhlPUZlPTA7WGU8eGU7WGUrKyl6ZT0yKkplW1hlXS5jaGFyQ29kZUF0KDApLHZlW0ZlKytdPW1bemUrMV18fG1bemVdLG1bemUrMV0+MCYmKHZlW0ZlKytdPW1bemVdKTtyZXR1cm4gb3QmJiJidWYiIT09b3Q/ImFyciIhPT1vdD92ZS50b1N0cmluZygiYmlu''@;'; put 'put ''YXJ5Iik6W10uc2xpY2UuY2FsbCh2ZSk6dmV9fSxpZT1mdW5jdGlvbihqKXt2YXIgYWUsRT15W2pdLmRlYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLEE9MCx0ZT0wLHNlPTAsd2U9MDtmb3Iod2U9MDt3ZTw2NTUzNjsrK3dlKW1bMip3ZV09MjU1LG1bMip3ZSsxXT0yNTM7Zm9yKEE9''@;'; put 'put ''MDtBPEUubGVuZ3RoOysrQSkoYWU9RVtBXSkmJih0ZT1hZS5jaGFyQ29kZUF0KDApLG1bc2U9MipBXT0yNTUmdGUsbVtzZSsxXT10ZT4+OCk7cmV0dXJuIGZ1bmN0aW9uKEplKXt2YXIgb3Q9SmUubGVuZ3RoLHhlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKm90KSx2ZT0wLFhlPTAsemU9MDtpZihC''@;'; put 'put ''dWZmZXIuaXNCdWZmZXIoSmUpKWZvcih2ZT0wO3ZlPG90O3ZlKyspMjU1PT09bVtYZT0yKkplW3ZlXV0mJjI1Mz09PW1bWGUrMV0mJihYZT0yKigoSmVbdmVdPDw4KStKZVt2ZSsxXSksKyt2ZSkseGVbemUrK109bVtYZV0seGVbemUrK109bVtYZSsxXTtlbHNlIGlmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgSmUpZm9yKHZlPTA7dmU8b3Q7dmUrKylYZT0yKkplLmNoYXJDb2RlQXQodmUpLDI1NT09PW1bWGVdJiYyNTM9PT1tW1hlKzFdJiYoWGU9MiooKEplLmNoYXJDb2RlQXQodmUpPDw4KStKZS5jaGFyQ29kZUF0KHZlKzEpKSwrK3ZlKSx4ZVt6ZSsrXT1tW1hlXSx4ZVt6ZSsrXT1tW1hlKzFd''@;'; put 'put ''O2Vsc2UgZm9yKHZlPTA7dmU8b3Q7dmUrKykyNTU9PT1tW1hlPTIqSmVbdmVdXSYmMjUzPT09bVtYZSsxXSYmKFhlPTIqKChKZVt2ZV08PDgpK0plW3ZlKzFdKSwrK3ZlKSx4ZVt6ZSsrXT1tW1hlXSx4ZVt6ZSsrXT1tW1hlKzFdO3JldHVybiB4ZS5zbGljZSgwLHplKS50b1N0cmluZygidWNz''@;'; put 'put ''MiIpfX07d1s2NTAwMV09ZnVuY3Rpb24gSChqKXtpZigic3RyaW5nIj09dHlwZW9mIGopcmV0dXJuIEgoai5zcGxpdCgiIikubWFwKE4pKTt2YXIgRT1qLmxlbmd0aCxtPTAsQT0wOzQqRT5XJiYoVz00KkUsWT1CdWZmZXIuYWxsb2NVbnNhZmUoVykpO3ZhciBhZT0wO0U+PTMmJjIzOT09alsw''@;'; put 'put ''XSYmMTg3PT1qWzFdJiYxOTE9PWpbMl0mJihhZT0zKTtmb3IodmFyIHRlPTEsc2U9MCx3ZT0wO2FlPEU7YWUrPXRlKXRlPTEsKHdlPWpbYWVdKTwxMjg/bT13ZTp3ZTwyMjQ/KG09NjQqKDMxJndlKSsoNjMmalthZSsxXSksdGU9Mik6d2U8MjQwPyhtPSgoMTUmd2UpPDwxMikrNjQqKDYzJmpb''@;'; put 'put ''YWUrMV0pKyg2MyZqW2FlKzJdKSx0ZT0zKToobT0yNjIxNDQqKDcmd2UpKygoNjMmalthZSsxXSk8PDEyKSs2NCooNjMmalthZSsyXSkrKDYzJmpbYWUrM10pLHRlPTQpLG08NjU1MzY/KFlbc2UrK109MjU1Jm0sWVtzZSsrXT1tPj44KTooQT01NTI5NisoKG0tPTY1NTM2KT4+MTAmMTAyMyks''@;'; put 'put ''bT01NjMyMCsoMTAyMyZtKSxZW3NlKytdPTI1NSZBLFlbc2UrK109QT4+PjgsWVtzZSsrXT0yNTUmbSxZW3NlKytdPW0+Pj44JjI1NSk7cmV0dXJuIFkuc2xpY2UoMCxzZSkudG9TdHJpbmcoInVjczIiKX0sUFs2NTAwMV09ZnVuY3Rpb24oaixFKXtpZihMJiZCdWZmZXIuaXNCdWZmZXIoaikp''@;'; put 'put ''cmV0dXJuIEUmJiJidWYiIT09RT8iYXJyIiE9PUU/ai50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChqKTpqO3ZhciBtPWoubGVuZ3RoLEE9MCxhZT0wLHRlPTAsc2U9InN0cmluZyI9PXR5cGVvZiBqOzQqbT5XJiYoVz00Km0sWT1CdWZmZXIuYWxsb2NVbnNhZmUoVykpO2Zvcih2''@;'; put 'put ''YXIgd2U9MDt3ZTxtOysrd2UpKEE9c2U/ai5jaGFyQ29kZUF0KHdlKTpqW3dlXS5jaGFyQ29kZUF0KDApKTw9MTI3P1lbdGUrK109QTpBPD0yMDQ3PyhZW3RlKytdPTE5MisoQT4+NiksWVt0ZSsrXT0xMjgrKDYzJkEpKTpBPj01NTI5NiYmQTw9NTczNDM/KEEtPTU1Mjk2LCsrd2UsYWU9KHNl''@;'; put 'put ''P2ouY2hhckNvZGVBdCh3ZSk6alt3ZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKEE8PDEwKSxZW3RlKytdPTI0MCsoYWU+Pj4xOCY3KSxZW3RlKytdPTE0NCsoYWU+Pj4xMiY2MyksWVt0ZSsrXT0xMjgrKGFlPj4+NiY2MyksWVt0ZSsrXT0xMjgrKDYzJmFlKSk6KFlbdGUrK109MjI0KyhBPj4x''@;'; put 'put ''MiksWVt0ZSsrXT0xMjgrKEE+PjYmNjMpLFlbdGUrK109MTI4Kyg2MyZBKSk7cmV0dXJuIEUmJiJidWYiIT09RT8iYXJyIiE9PUU/WS5zbGljZSgwLHRlKS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChZLDAsdGUpOlkuc2xpY2UoMCx0ZSl9fXZhciBsZT1mdW5jdGlvbigpe2lm''@;'; put 'put ''KEwpe2lmKEZbX1swXV0pcmV0dXJuO3ZhciBqPTAsRT0wO2ZvcihqPTA7ajxfLmxlbmd0aDsrK2opeVtFPV9bal1dJiYoRltFXT1KKEUpLE9bRV09ZWUoRSkpO2ZvcihqPTA7ajxnLmxlbmd0aDsrK2opeVtFPWdbal1dJiYoRltFXT1pZShFKSxPW0VdPW5lKEUpKTtmb3Ioaj0wO2o8Qi5sZW5n''@;'; put 'put ''dGg7KytqKXdbRT1CW2pdXSYmKEZbRV09d1tFXSksUFtFXSYmKE9bRV09UFtFXSl9fSxtZT1mdW5jdGlvbihILGope3JldHVybiIifSxfZT1mdW5jdGlvbihqKXtkZWxldGUgRltqXSxkZWxldGUgT1tqXX0sU2U9e2VuY2FjaGU6bGUsZGVjYWNoZTpmdW5jdGlvbigpe2lmKEwpe2lmKCFGW19b''@;'; put 'put ''MF1dKXJldHVybjtfLmZvckVhY2goX2UpLGcuZm9yRWFjaChfZSksQi5mb3JFYWNoKF9lKX1wPW1lLGI9MH0sc2JjczpfLGRiY3M6Z307bGUoKTt2YXIgamU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHA9bWUsYj0w''@;'; put 'put ''O3JldHVybiB5LnV0aWxzPXtkZWNvZGU6ZnVuY3Rpb24gSChqLEUpe3ZhciBtO2lmKG09RltqXSlyZXR1cm4gbShFKTtpZigic3RyaW5nIj09dHlwZW9mIEUpcmV0dXJuIEgoaixFLnNwbGl0KCIiKS5tYXAoTikpO3ZhciB2ZSxBPUUubGVuZ3RoLGFlPW5ldyBBcnJheShBKSx0ZT0iIixzZT0w''@;'; put 'put ''LHdlPTAsVWU9MSxKZT0wLG90PTAseGU9eVtqXSxYZT0iIjtpZih4ZSYmKHZlPXhlLmRlYykpZm9yKHdlPTA7d2U8QTt3ZSs9VWUpe2lmKFVlPTIsKHRlPXZlWyhFW3dlXTw8OCkrRVt3ZSsxXV0pfHwoVWU9MSx0ZT12ZVtFW3dlXV0pLCF0ZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXpl''@;'; put 'put ''ZCBjb2RlOiAiK0Vbd2VdKyIgIitFW3dlK1VlLTFdKyIgIit3ZSsiICIrVWUrIiAiK3ZlW0Vbd2VdXSk7YWVbSmUrK109dGV9ZWxzZXtpZighKFhlPUlbal0pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK2opO3N3aXRjaChYZSl7Y2FzZSJ1dGY4Ijpmb3IoQT49MyYmMjM5''@;'; put 'put ''PT1FWzBdJiYxODc9PUVbMV0mJjE5MT09RVsyXSYmKHdlPTMpO3dlPEE7d2UrPVVlKVVlPTEsRVt3ZV08MTI4P3NlPUVbd2VdOkVbd2VdPDIyND8oc2U9NjQqKDMxJkVbd2VdKSsoNjMmRVt3ZSsxXSksVWU9Mik6RVt3ZV08MjQwPyhzZT0oKDE1JkVbd2VdKTw8MTIpKzY0Kig2MyZFW3dlKzFd''@;'; put 'put ''KSsoNjMmRVt3ZSsyXSksVWU9Myk6KHNlPTI2MjE0NCooNyZFW3dlXSkrKCg2MyZFW3dlKzFdKTw8MTIpKzY0Kig2MyZFW3dlKzJdKSsoNjMmRVt3ZSszXSksVWU9NCksc2U8NjU1MzZ8fChvdD01NTI5NisoKHNlLT02NTUzNik+PjEwJjEwMjMpLHNlPTU2MzIwKygxMDIzJnNlKSxhZVtKZSsr''@;'; put 'put ''XT1TdHJpbmcuZnJvbUNoYXJDb2RlKG90KSksYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZShzZSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoTCYmQnVmZmVyLmlzQnVmZmVyKEUpKXJldHVybiBFLnRvU3RyaW5nKFhlKTtmb3Iod2U9MDt3ZTxBO3dlKyspYWVbd2VdPVN0cmluZy5mcm9tQ2hh''@;'; put 'put ''ckNvZGUoRVt3ZV0pO0plPUE7YnJlYWs7Y2FzZSJ1dGYxNmxlIjppZihBPj0yJiYyNTU9PUVbMF0mJjI1ND09RVsxXSYmKHdlPTIpLEwmJkJ1ZmZlci5pc0J1ZmZlcihFKSlyZXR1cm4gRS50b1N0cmluZyhYZSk7Zm9yKFVlPTI7d2UrMTxBO3dlKz1VZSlhZVtKZSsrXT1TdHJpbmcuZnJvbUNo''@;'; put 'put ''YXJDb2RlKChFW3dlKzFdPDw4KStFW3dlXSk7YnJlYWs7Y2FzZSJ1dGYxNmJlIjpmb3IoQT49MiYmMjU0PT1FWzBdJiYyNTU9PUVbMV0mJih3ZT0yKSxVZT0yO3dlKzE8QTt3ZSs9VWUpYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoRVt3ZV08PDgpK0Vbd2UrMV0pO2JyZWFrO2Nhc2Ui''@;'; put 'put ''dXRmMzJsZSI6Zm9yKEE+PTQmJjI1NT09RVswXSYmMjU0PT1FWzFdJiYwPT09RVsyXSYmMD09PUVbM10mJih3ZT00KSxVZT00O3dlPEE7d2UrPVVlKShzZT0oRVt3ZSszXTw8MjQpKyhFW3dlKzJdPDwxNikrKEVbd2UrMV08PDgpK0Vbd2VdKT42NTUzNT8oc2UtPTY1NTM2LGFlW0plKytdPVN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKHNlPj4xMCYxMDIzKSksYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZzZSkpKTphZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihBPj00JiYyNTU9PUVbM10mJjI1ND09''@;'; put 'put ''RVsyXSYmMD09PUVbMV0mJjA9PT1FWzBdJiYod2U9NCksVWU9NDt3ZTxBO3dlKz1VZSkoc2U9KEVbd2VdPDwyNCkrKEVbd2UrMV08PDE2KSsoRVt3ZSsyXTw8OCkrRVt3ZSszXSk+NjU1MzU/KHNlLT02NTUzNixhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhzZT4+MTAmMTAy''@;'; put 'put ''MykpLGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmc2UpKSk6YWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZShzZSk7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3IoQT49NCYmNDM9PUVbMF0mJjQ3PT1FWzFdJiYxMTg9PUVbMl0mJihBPj01JiY1Nj09RVszXSYmNDU9PUVb''@;'; put 'put ''NF0/d2U9NTooNTY9PUVbM118fDU3PT1FWzNdfHw0Mz09RVszXXx8NDc9PUVbM10pJiYod2U9NCkpO3dlPEE7d2UrPVVlKWlmKDQzPT09RVt3ZV0paWYoVWU9MSw0NSE9PUVbd2UrMV0pe2Zvcig7U3RyaW5nLmZyb21DaGFyQ29kZShFW3dlK1VlXSkubWF0Y2goL1tBLVphLXowLTkrXC9dLyk7''@;'; put 'put ''KVVlKys7dmFyIHplPTA7NDU9PT1FW3dlK1VlXSYmKCsrVWUsemU9MSk7Zm9yKHZhciBEZT1bXSxGZT0iIixrZT0wLEFlPTAsX3Q9MCxudD0wLFFlPTE7UWU8VWUtemUmJihrZT1qZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZStRZSsrXSkpLEFlPWplLmluZGV4T2YoU3RyaW5n''@;'; put 'put ''LmZyb21DaGFyQ29kZShFW3dlK1FlKytdKSksRGUucHVzaChrZTw8MnxBZT4+NCksLTEhPT0oX3Q9amUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrUWUrK10pKSkmJihEZS5wdXNoKCgxNSZBZSk8PDR8X3Q+PjIpLC0xIT09KG50PWplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFy''@;'; put 'put ''Q29kZShFW3dlK1FlKytdKSkpKSk7KW50PDY0JiZEZS5wdXNoKCgzJl90KTw8NnxudCk7Zm9yKEZlPUgoMTIwMSxEZSksUWU9MDtRZTxGZS5sZW5ndGg7KytRZSlhZVtKZSsrXT1GZS5jaGFyQXQoUWUpfWVsc2UgVWU9MixhZVtKZSsrXT0iKyI7ZWxzZSBVZT0xLGFlW0plKytdPVN0cmluZy5m''@;'; put 'put ''cm9tQ2hhckNvZGUoRVt3ZV0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitqKyIgIitJW2pdKX19cmV0dXJuIGFlLnNsaWNlKDAsSmUpLmpvaW4oIiIpfSxlbmNvZGU6ZnVuY3Rpb24gSChqLEUsbSl7aWYoaj09PWImJnApcmV0dXJuIHAoRSxt''@;'; put 'put ''KTtpZihPW2pdKXJldHVybihwPU9bYj1qXSkoRSxtKTtMJiZCdWZmZXIuaXNCdWZmZXIoRSkmJihFPUUudG9TdHJpbmcoInV0ZjgiKSk7dmFyIG90LEE9RS5sZW5ndGgsYWU9TD9CdWZmZXIuYWxsb2NVbnNhZmUoNCpBKTpbXSx0ZT0wLHNlPTAsd2U9MCxVZT0wLEplPXlbal0seGU9IiIsdmU9''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBFO2lmKEplJiYob3Q9SmUuZW5jKSlmb3Ioc2U9MDtzZTxBOysrc2UsKyt3ZSkodGU9b3RbdmU/RS5jaGFyQXQoc2UpOkVbc2VdXSk+MjU1PyhhZVt3ZV09dGU+PjgsYWVbKyt3ZV09MjU1JnRlKTphZVt3ZV09MjU1JnRlO2Vsc2V7aWYoISh4ZT1JW2pdKSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBDUDogIitqKTtzd2l0Y2goeGUpe2Nhc2UidXRmOCI6aWYoTCYmdmUpe3dlPShhZT1LKEUseGUpKS5sZW5ndGg7YnJlYWt9Zm9yKHNlPTA7c2U8QTsrK3NlLCsrd2UpKHRlPXZlP0UuY2hhckNvZGVBdChzZSk6RVtzZV0uY2hhckNvZGVBdCgwKSk8''@;'; put 'put ''PTEyNz9hZVt3ZV09dGU6dGU8PTIwNDc/KGFlW3dlXT0xOTIrKHRlPj42KSxhZVsrK3dlXT0xMjgrKDYzJnRlKSk6dGU+PTU1Mjk2JiZ0ZTw9NTczNDM/KHRlLT01NTI5NixVZT0odmU/RS5jaGFyQ29kZUF0KCsrc2UpOkVbKytzZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKHRlPDwxMCksYWVb''@;'; put 'put ''d2VdPTI0MCsoVWU+Pj4xOCY3KSxhZVsrK3dlXT0xNDQrKFVlPj4+MTImNjMpLGFlWysrd2VdPTEyOCsoVWU+Pj42JjYzKSxhZVsrK3dlXT0xMjgrKDYzJlVlKSk6KGFlW3dlXT0yMjQrKHRlPj4xMiksYWVbKyt3ZV09MTI4Kyh0ZT4+NiY2MyksYWVbKyt3ZV09MTI4Kyg2MyZ0ZSkpO2JyZWFr''@;'; put 'put ''O2Nhc2UiYXNjaWkiOmlmKEwmJiJzdHJpbmciPT10eXBlb2YgRSl7d2U9KGFlPUsoRSx4ZSkpLmxlbmd0aDticmVha31mb3Ioc2U9MDtzZTxBOysrc2UsKyt3ZSl7aWYoISgodGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKTw9MTI3KSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''ImJhZCBhc2NpaSAiK3RlKTthZVt3ZV09dGV9YnJlYWs7Y2FzZSJ1dGYxNmxlIjppZihMJiYic3RyaW5nIj09dHlwZW9mIEUpe3dlPShhZT1LKEUseGUpKS5sZW5ndGg7YnJlYWt9Zm9yKHNlPTA7c2U8QTsrK3NlKXRlPXZlP0UuY2hhckNvZGVBdChzZSk6RVtzZV0uY2hhckNvZGVBdCgwKSxh''@;'; put 'put ''ZVt3ZSsrXT0yNTUmdGUsYWVbd2UrK109dGU+Pjg7YnJlYWs7Y2FzZSJ1dGYxNmJlIjpmb3Ioc2U9MDtzZTxBOysrc2UpdGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApLGFlW3dlKytdPXRlPj44LGFlW3dlKytdPTI1NSZ0ZTticmVhaztjYXNlInV0ZjMybGUiOmZv''@;'; put 'put ''cihzZT0wO3NlPEE7KytzZSkodGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJnRlPD01NzM0MyYmKHRlPTY1NTM2Kyh0ZS01NTI5Njw8MTApKyhFWysrc2VdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxhZVt3ZSsrXT0yNTUmdGUsYWVbd2UrK109MjU1''@;'; put 'put ''Jih0ZT4+PTgpLGFlW3dlKytdPTI1NSYodGU+Pj04KSxhZVt3ZSsrXT0yNTUmKHRlPj49OCk7YnJlYWs7Y2FzZSJ1dGYzMmJlIjpmb3Ioc2U9MDtzZTxBOysrc2UpKHRlPXZlP0UuY2hhckNvZGVBdChzZSk6RVtzZV0uY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZ0ZTw9NTczNDMmJih0ZT02NTUz''@;'; put 'put ''NisodGUtNTUyOTY8PDEwKSsoRVsrK3NlXS5jaGFyQ29kZUF0KDApLTU2MzIwKSksYWVbd2UrM109MjU1JnRlLGFlW3dlKzJdPTI1NSYodGU+Pj04KSxhZVt3ZSsxXT0yNTUmKHRlPj49OCksYWVbd2VdPTI1NSYodGU+Pj04KSx3ZSs9NDticmVhaztjYXNlInV0ZjciOmZvcihzZT0wO3NlPEE7''@;'; put 'put ''c2UrKyl7dmFyIFhlPXZlP0UuY2hhckF0KHNlKTpFW3NlXS5jaGFyQXQoMCk7aWYoIisiIT09WGUpaWYoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JygpLC0uLzo/Ii5pbmRleE9mKFhlKT4tMSlhZVt3ZSsrXT1YZS5jaGFy''@;'; put 'put ''Q29kZUF0KDApO2Vsc2V7dmFyIHplPUgoMTIwMSxYZSk7YWVbd2UrK109NDMsYWVbd2UrK109amUuY2hhckNvZGVBdCh6ZVswXT4+MiksYWVbd2UrK109amUuY2hhckNvZGVBdCgoKDMmemVbMF0pPDw0KSsoKHplWzFdfHwwKT4+NCkpLGFlW3dlKytdPWplLmNoYXJDb2RlQXQoKCgxNSZ6ZVsx''@;'; put 'put ''XSk8PDIpKygoemVbMl18fDApPj42KSksYWVbd2UrK109NDV9ZWxzZSBhZVt3ZSsrXT00MyxhZVt3ZSsrXT00NX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgbWFnaWM6ICIraisiICIrSVtqXSl9fXJldHVybiBhZT1hZS5zbGljZSgwLHdlKSxMP20mJiJidWYi''@;'; put 'put ''IT09bT8iYXJyIiE9PW0/YWUudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoYWUpOmFlOiJzdHIiPT1tP2FlLm1hcCh6KS5qb2luKCIiKTphZX0saGFzY3A6ZnVuY3Rpb24oail7cmV0dXJuISgheVtqXSYmIUlbal0pfSxtYWdpYzpJLGNhY2hlOlNlfSx5fSl9LDMxNzk6KHVlLFgp''@;'; put 'put ''PT57dmFyIHksSSxfOyFmdW5jdGlvbihnKXtpZih0eXBlb2YgRE9fTk9UX0VYUE9SVF9KU1pJUD4idSIpdWUuZXhwb3J0cz1nKCk7ZWxzZSBpZih0eXBlb2YgRE9fTk9UX0VYUE9SVF9KU1pJUD4idSIpSlNaaXBTeW5jPWcoKSxJPVtdLHZvaWQgMCE9PShfPSJmdW5jdGlvbiI9PXR5cGVvZih5''@;'; put 'put ''PWcpP3kuYXBwbHkoWCxJKTp5KSYmKHVlLmV4cG9ydHM9Xyk7ZWxzZXt2YXIgQjt0eXBlb2YgZ2xvYmFsVGhpczwidSI/Qj1nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP0I9d2luZG93OnR5cGVvZiBnbG9iYWw8InUiP0I9Z2xvYmFsOnR5cGVvZiAkPCJ1IiYmJC5nbG9iYWw/Qj0kLmds''@;'; put 'put ''b2JhbDp0eXBlb2Ygc2VsZjwidSImJihCPXNlbGYpLEIuSlNaaXBTeW5jPWcoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIFAoRixPLHope2Z1bmN0aW9uIE4oVSxXKXtpZighT1tVXSl7aWYoIUZbVV0pe2lmKEwpcmV0dXJuIEwoVSwhMCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qg''@;'; put 'put ''ZmluZCBtb2R1bGUgJyIrVSsiJyIpfXZhciBxPU9bVV09e2V4cG9ydHM6e319O0ZbVV1bMF0uY2FsbChxLmV4cG9ydHMsZnVuY3Rpb24oZWUpe3JldHVybiBOKEZbVV1bMV1bZWVdfHxlZSl9LHEscS5leHBvcnRzLFAsRixPLHopfXJldHVybiBPW1VdLmV4cG9ydHN9Zm9yKHZhciBMPXZvaWQg''@;'; put 'put ''MCxLPTA7Szx6Lmxlbmd0aDtLKyspTih6W0tdKTtyZXR1cm4gTn0oezE6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjtPLmVuY29kZT1mdW5jdGlvbihO''@;'; put 'put ''LEwpe2Zvcih2YXIgVSxXLFkscSxlZSxKLG5lLEs9IiIsaWU9MDtpZTxOLmxlbmd0aDspcT0oVT1OLmNoYXJDb2RlQXQoaWUrKykpPj4yLGVlPSgzJlUpPDw0fChXPU4uY2hhckNvZGVBdChpZSsrKSk+PjQsSj0oMTUmVyk8PDJ8KFk9Ti5jaGFyQ29kZUF0KGllKyspKT4+NixuZT02MyZZLGlz''@;'; put 'put ''TmFOKFcpP0o9bmU9NjQ6aXNOYU4oWSkmJihuZT02NCksSz1LK3ouY2hhckF0KHEpK3ouY2hhckF0KGVlKSt6LmNoYXJBdChKKSt6LmNoYXJBdChuZSk7cmV0dXJuIEt9LE8uZGVjb2RlPWZ1bmN0aW9uKE4sTCl7dmFyIFcsWSxxLGVlLEosbmUsSz0iIixpZT0wO2ZvcihOPU4ucmVwbGFjZSgv''@;'; put 'put ''W15BLVphLXowLTlcK1wvXD1dL2csIiIpO2llPE4ubGVuZ3RoOylxPXouaW5kZXhPZihOLmNoYXJBdChpZSsrKSksVz0oMTUmKGVlPXouaW5kZXhPZihOLmNoYXJBdChpZSsrKSkpKTw8NHwoSj16LmluZGV4T2YoTi5jaGFyQXQoaWUrKykpKT4+MixZPSgzJkopPDw2fChuZT16LmluZGV4T2Yo''@;'; put 'put ''Ti5jaGFyQXQoaWUrKykpKSxLKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHE8PDJ8ZWU+PjQpLDY0IT1KJiYoSys9U3RyaW5nLmZyb21DaGFyQ29kZShXKSksNjQhPW5lJiYoSys9U3RyaW5nLmZyb21DaGFyQ29kZShZKSk7cmV0dXJuIEt9fSx7fV0sMjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtmdW5jdGlvbiB6KCl7dGhpcy5jb21wcmVzc2VkU2l6ZT0wLHRoaXMudW5jb21wcmVzc2VkU2l6ZT0wLHRoaXMuY3JjMzI9MCx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPW51bGwsdGhpcy5jb21wcmVzc2VkQ29udGVudD1udWxsfXoucHJvdG90eXBlPXtnZXRDb250ZW50OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIG51bGx9LGdldENvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSxGLmV4cG9ydHM9en0se31dLDM6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ty5TVE9SRT17bWFnaWM6IlwwXDAiLGNvbXByZXNzOmZ1bmN0aW9uKHope3JldHVybiB6fSx1''@;'; put 'put ''bmNvbXByZXNzOmZ1bmN0aW9uKHope3JldHVybiB6fSxjb21wcmVzc0lucHV0VHlwZTpudWxsLHVuY29tcHJlc3NJbnB1dFR5cGU6bnVsbH0sTy5ERUZMQVRFPVAoIi4vZmxhdGUiKX0seyIuL2ZsYXRlIjo4fV0sNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0''@;'; put 'put ''aWxzIiksTj1bMCwxOTk2OTU5ODk0LDM5OTM5MTk3ODgsMjU2NzUyNDc5NCwxMjQ2MzQxMzcsMTg4NjA1NzYxNSwzOTE1NjIxNjg1LDI2NTczOTIwMzUsMjQ5MjY4Mjc0LDIwNDQ1MDgzMjQsMzc3MjExNTIzMCwyNTQ3MTc3ODY0LDE2Mjk0MTk5NSwyMTI1NTYxMDIxLDM4ODc2MDcwNDcsMjQy''@;'; put 'put ''ODQ0NDA0OSw0OTg1MzY1NDgsMTc4OTkyNzY2Niw0MDg5MDE2NjQ4LDIyMjcwNjEyMTQsNDUwNTQ4ODYxLDE4NDMyNTg2MDMsNDEwNzU4MDc1MywyMjExNjc3NjM5LDMyNTg4Mzk5MCwxNjg0Nzc3MTUyLDQyNTExMjIwNDIsMjMyMTkyNjYzNiwzMzU2MzM0ODcsMTY2MTM2NTQ2NSw0MTk1MzAy''@;'; put 'put ''NzU1LDIzNjYxMTUzMTcsOTk3MDczMDk2LDEyODE5NTM4ODYsMzU3OTg1NTMzMiwyNzI0Njg4MjQyLDEwMDY4ODgxNDUsMTI1ODYwNzY4NywzNTI0MTAxNjI5LDI3Njg5NDI0NDMsOTAxMDk3NzIyLDExMTkwMDA2ODQsMzY4NjUxNzIwNiwyODk4MDY1NzI4LDg1MzA0NDQ1MSwxMTcyMjY2MTAx''@;'; put 'put ''LDM3MDUwMTU3NTksMjg4MjYxNjY2NSw2NTE3Njc5ODAsMTM3MzUwMzU0NiwzMzY5NTU0MzA0LDMyMTgxMDQ1OTgsNTY1NTA3MjUzLDE0NTQ2MjE3MzEsMzQ4NTExMTcwNSwzMDk5NDM2MzAzLDY3MTI2Njk3NCwxNTk0MTk4MDI0LDMzMjI3MzA5MzAsMjk3MDM0NzgxMiw3OTU4MzU1MjcsMTQ4''@;'; put 'put ''MzIzMDIyNSwzMjQ0MzY3Mjc1LDMwNjAxNDk1NjUsMTk5NDE0NjE5MiwzMTE1ODUzNCwyNTYzOTA3NzcyLDQwMjM3MTc5MzAsMTkwNzQ1OTQ2NSwxMTI2MzcyMTUsMjY4MDE1MzI1MywzOTA0NDI3MDU5LDIwMTM3NzYyOTAsMjUxNzIyMDM2LDI1MTcyMTUzNzQsMzc3NTgzMDA0MCwyMTM3NjU2''@;'; put 'put ''NzYzLDE0MTM3NjgxMywyNDM5Mjc3NzE5LDM4NjUyNzEyOTcsMTgwMjE5NTQ0NCw0NzY4NjQ4NjYsMjIzODAwMTM2OCw0MDY2NTA4ODc4LDE4MTIzNzA5MjUsNDUzMDkyNzMxLDIxODE2MjUwMjUsNDExMTQ1MTIyMywxNzA2MDg4OTAyLDMxNDA0MjcwNCwyMzQ0NTMyMjAyLDQyNDAwMTc1MzIs''@;'; put 'put ''MTY1ODY1ODI3MSwzNjY2MTk5NzcsMjM2MjY3MDMyMyw0MjI0OTk0NDA1LDEzMDM1MzU5NjAsOTg0OTYxNDg2LDI3NDcwMDcwOTIsMzU2OTAzNzUzOCwxMjU2MTcwODE3LDEwMzc2MDQzMTEsMjc2NTIxMDczMywzNTU0MDc5OTk1LDExMzEwMTQ1MDYsODc5Njc5OTk2LDI5MDkyNDM0NjIsMzY2''@;'; put 'put ''Mzc3MTg1NiwxMTQxMTI0NDY3LDg1NTg0MjI3NywyODUyODAxNjMxLDM3MDg2NDg2NDksMTM0MjUzMzk0OCw2NTQ0NTkzMDYsMzE4ODM5NjA0OCwzMzczMDE1MTc0LDE0NjY0Nzk5MDksNTQ0MTc5NjM1LDMxMTA1MjM5MTMsMzQ2MjUyMjAxNSwxNTkxNjcxMDU0LDcwMjEzODc3NiwyOTY2NDYw''@;'; put 'put ''NDUwLDMzNTI3OTk0MTIsMTUwNDkxODgwNyw3ODM1NTE4NzMsMzA4MjY0MDQ0MywzMjMzNDQyOTg5LDM5ODgyOTIzODQsMjU5NjI1NDY0Niw2MjMxNzA2OCwxOTU3ODEwODQyLDM5Mzk4NDU5NDUsMjY0NzgxNjExMSw4MTQ3MDk5NywxOTQzODAzNTIzLDM4MTQ5MTg5MzAsMjQ4OTU5NjgwNCwy''@;'; put 'put ''MjUyNzQ0MzAsMjA1Mzc5MDM3NiwzODI2MTc1NzU1LDI0NjY5MDYwMTMsMTY3ODE2NzQzLDIwOTc2NTEzNzcsNDAyNzU1MjU4MCwyMjY1NDkwMzg2LDUwMzQ0NDA3MiwxNzYyMDUwODE0LDQxNTA0MTcyNDUsMjE1NDEyOTM1NSw0MjY1MjIyMjUsMTg1MjUwNzg3OSw0Mjc1MzEzNTI2LDIzMTIz''@;'; put 'put ''MTc5MjAsMjgyNzUzNjI2LDE3NDI1NTU4NTIsNDE4OTcwODE0MywyMzk0ODc3OTQ1LDM5NzkxNzc2MywxNjIyMTgzNjM3LDM2MDQzOTA4ODgsMjcxNDg2NjU1OCw5NTM3Mjk3MzIsMTM0MDA3NjYyNiwzNTE4NzE5OTg1LDI3OTczNjA5OTksMTA2ODgyODM4MSwxMjE5NjM4ODU5LDM2MjQ3NDE4''@;'; put 'put ''NTAsMjkzNjY3NTE0OCw5MDYxODU0NjIsMTA5MDgxMjUxMiwzNzQ3NjcyMDAzLDI4MjUzNzk2NjksODI5MzI5MTM1LDExODEzMzUxNjEsMzQxMjE3NzgwNCwzMTYwODM0ODQyLDYyODA4NTQwOCwxMzgyNjA1MzY2LDM0MjMzNjkxMDksMzEzODA3ODQ2Nyw1NzA1NjIyMzMsMTQyNjQwMDgxNSwz''@;'; put 'put ''MzE3MzE2NTQyLDI5OTg3MzM2MDgsNzMzMjM5OTU0LDE1NTUyNjE5NTYsMzI2ODkzNTU5MSwzMDUwMzYwNjI1LDc1MjQ1OTQwMywxNTQxMzIwMjIxLDI2MDcwNzE5MjAsMzk2NTk3MzAzMCwxOTY5OTIyOTcyLDQwNzM1NDk4LDI2MTc4MzcyMjUsMzk0MzU3NzE1MSwxOTEzMDg3ODc3LDgzOTA4''@;'; put 'put ''MzcxLDI1MTIzNDE2MzQsMzgwMzc0MDY5MiwyMDc1MjA4NjIyLDIxMzI2MTExMiwyNDYzMjcyNjAzLDM4NTU5OTAyODUsMjA5NDg1NDA3MSwxOTg5NTg4ODEsMjI2MjAyOTAxMiw0MDU3MjYwNjEwLDE3NTkzNTk5OTIsNTM0NDE0MTkwLDIxNzY3MTg1NDEsNDEzOTMyOTExNSwxODczODM2MDAx''@;'; put 'put ''LDQxNDY2NDU2NywyMjgyMjQ4OTM0LDQyNzkyMDAzNjgsMTcxMTY4NDU1NCwyODUyODExMTYsMjQwNTgwMTcyNyw0MTY3MjE2NzQ1LDE2MzQ0Njc3OTUsMzc2MjI5NzAxLDI2ODUwNjc4OTYsMzYwODAwNzQwNiwxMzA4OTE4NjEyLDk1NjU0MzkzOCwyODA4NTU1MTA1LDM0OTU5NTgyNjMsMTIz''@;'; put 'put ''MTYzNjMwMSwxMDQ3NDI3MDM1LDI5MzI5NTk4MTgsMzY1NDcwMzgzNiwxMDg4MzU5MjcwLDkzNjkxOGUzLDI4NDc3MTQ4OTksMzczNjgzNzgyOSwxMjAyOTAwODYzLDgxNzIzMzg5NywzMTgzMzQyMTA4LDM0MDEyMzcxMzAsMTQwNDI3NzU1Miw2MTU4MTgxNTAsMzEzNDIwNzQ5MywzNDUzNDIx''@;'; put 'put ''MjAzLDE0MjM4NTc0NDksNjAxNDUwNDMxLDMwMDk4Mzc2MTQsMzI5NDcxMDQ1NiwxNTY3MTAzNzQ2LDcxMTkyODcyNCwzMDIwNjY4NDcxLDMyNzIzODAwNjUsMTUxMDMzNDIzNSw3NTUxNjcxMTddO0YuZXhwb3J0cz1mdW5jdGlvbihLLFUpe2lmKHR5cGVvZiBLPiJ1Inx8IUsubGVuZ3RoKXJl''@;'; put 'put ''dHVybiAwO3ZhciBXPSJzdHJpbmciIT09ei5nZXRUeXBlT2YoSyk7dHlwZW9mIFU+InUiJiYoVT0wKTt2YXIgZWU9MDtVPX5VO2Zvcih2YXIgSj0wLG5lPUsubGVuZ3RoO0o8bmU7SisrKWVlPVc/S1tKXTpLLmNoYXJDb2RlQXQoSiksVT1VPj4+OF5OWzI1NSYoVV5lZSldO3JldHVybn5VfX0s''@;'; put 'put ''eyIuL3V0aWxzIjoyMX1dLDU6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91dGlscyIpO2Z1bmN0aW9uIE4oTCl7dGhpcy5kYXRhPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLmluZGV4PTB9Ti5wcm90b3R5cGU9e2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKEwpe3RoaXMu''@;'; put 'put ''Y2hlY2tJbmRleCh0aGlzLmluZGV4K0wpfSxjaGVja0luZGV4OmZ1bmN0aW9uKEwpe2lmKHRoaXMubGVuZ3RoPEx8fEw8MCl0aHJvdyBuZXcgRXJyb3IoIkVuZCBvZiBkYXRhIHJlYWNoZWQgKGRhdGEgbGVuZ3RoID0gIit0aGlzLmxlbmd0aCsiLCBhc2tlZCBpbmRleCA9ICIrTCsiKS4gQ29y''@;'; put 'put ''cnVwdGVkIHppcCA/Iil9LHNldEluZGV4OmZ1bmN0aW9uKEwpe3RoaXMuY2hlY2tJbmRleChMKSx0aGlzLmluZGV4PUx9LHNraXA6ZnVuY3Rpb24oTCl7dGhpcy5zZXRJbmRleCh0aGlzLmluZGV4K0wpfSxieXRlQXQ6ZnVuY3Rpb24oTCl7fSxyZWFkSW50OmZ1bmN0aW9uKEwpe3ZhciBVLEs9''@;'; put 'put ''MDtmb3IodGhpcy5jaGVja09mZnNldChMKSxVPXRoaXMuaW5kZXgrTC0xO1U+PXRoaXMuaW5kZXg7VS0tKUs9KEs8PDgpK3RoaXMuYnl0ZUF0KFUpO3JldHVybiB0aGlzLmluZGV4Kz1MLEt9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oTCl7cmV0dXJuIHoudHJhbnNmb3JtVG8oInN0cmluZyIsdGhp''@;'; put 'put ''cy5yZWFkRGF0YShMKSl9LHJlYWREYXRhOmZ1bmN0aW9uKEwpe30sbGFzdEluZGV4T2ZTaWduYXR1cmU6ZnVuY3Rpb24oTCl7fSxyZWFkRGF0ZTpmdW5jdGlvbigpe3ZhciBMPXRoaXMucmVhZEludCg0KTtyZXR1cm4gbmV3IERhdGUoMTk4MCsoTD4+MjUmMTI3KSwoTD4+MjEmMTUpLTEsTD4+''@;'; put 'put ''MTYmMzEsTD4+MTEmMzEsTD4+NSY2MywoMzEmTCk8PDEpfX0sRi5leHBvcnRzPU59LHsiLi91dGlscyI6MjF9XSw2OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO08uYmFzZTY0PSExLE8uYmluYXJ5PSExLE8uZGlyPSExLE8uY3JlYXRlRm9sZGVycz0hMSxPLmRhdGU9bnVsbCxPLmNv''@;'; put 'put ''bXByZXNzaW9uPW51bGwsTy5jb21tZW50PW51bGx9LHt9XSw3OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKTtPLnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oTil7cmV0dXJuIHouc3RyaW5nMmJpbmFyeShOKX0sTy5zdHJpbmcyVWludDhBcnJheT1mdW5j''@;'; put 'put ''dGlvbihOKXtyZXR1cm4gei50cmFuc2Zvcm1UbygidWludDhhcnJheSIsTil9LE8udWludDhBcnJheTJTdHJpbmc9ZnVuY3Rpb24oTil7cmV0dXJuIHoudHJhbnNmb3JtVG8oInN0cmluZyIsTil9LE8uc3RyaW5nMkJsb2I9ZnVuY3Rpb24oTil7dmFyIEw9ei50cmFuc2Zvcm1UbygiYXJyYXli''@;'; put 'put ''dWZmZXIiLE4pO3JldHVybiB6LmFycmF5QnVmZmVyMkJsb2IoTCl9LE8uYXJyYXlCdWZmZXIyQmxvYj1mdW5jdGlvbihOKXtyZXR1cm4gei5hcnJheUJ1ZmZlcjJCbG9iKE4pfSxPLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKE4sTCl7cmV0dXJuIHoudHJhbnNmb3JtVG8oTixMKX0sTy5nZXRUeXBl''@;'; put 'put ''T2Y9ZnVuY3Rpb24oTil7cmV0dXJuIHouZ2V0VHlwZU9mKE4pfSxPLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihOKXtyZXR1cm4gei5jaGVja1N1cHBvcnQoTil9LE8uTUFYX1ZBTFVFXzE2QklUUz16Lk1BWF9WQUxVRV8xNkJJVFMsTy5NQVhfVkFMVUVfMzJCSVRTPXouTUFYX1ZBTFVFXzMyQklU''@;'; put 'put ''UyxPLnByZXR0eT1mdW5jdGlvbihOKXtyZXR1cm4gei5wcmV0dHkoTil9LE8uZmluZENvbXByZXNzaW9uPWZ1bmN0aW9uKE4pe3JldHVybiB6LmZpbmRDb21wcmVzc2lvbihOKX0sTy5pc1JlZ0V4cD1mdW5jdGlvbihOKXtyZXR1cm4gei5pc1JlZ0V4cChOKX19LHsiLi91dGlscyI6MjF9XSw4''@;'; put 'put ''OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdHlwZW9mIFVpbnQxNkFycmF5PCJ1IiYmdHlwZW9mIFVpbnQzMkFycmF5PCJ1IixOPVAoInBha28iKTtPLnVuY29tcHJlc3NJbnB1dFR5cGU9ej8idWludDhhcnJheSI6ImFycmF5IixP''@;'; put 'put ''LmNvbXByZXNzSW5wdXRUeXBlPXo/InVpbnQ4YXJyYXkiOiJhcnJheSIsTy5tYWdpYz0iXGJcMCIsTy5jb21wcmVzcz1mdW5jdGlvbihMKXtyZXR1cm4gTi5kZWZsYXRlUmF3KEwpfSxPLnVuY29tcHJlc3M9ZnVuY3Rpb24oTCl7cmV0dXJuIE4uaW5mbGF0ZVJhdyhMKX19LHtwYWtvOjI0fV0s''@;'; put 'put ''OTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2Jhc2U2NCIpO2Z1bmN0aW9uIE4oTCxLKXtpZighKHRoaXMgaW5zdGFuY2VvZiBOKSlyZXR1cm4gbmV3IE4oTCxLKTt0aGlzLmZpbGVzPXt9LHRoaXMuY29tbWVudD1udWxsLHRoaXMucm9vdD0iIixMJiZ0aGlzLmxv''@;'; put 'put ''YWQoTCxLKSx0aGlzLmNsb25lPWZ1bmN0aW9uKCl7dmFyIFU9bmV3IE47Zm9yKHZhciBXIGluIHRoaXMpImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXNbV10mJihVW1ddPXRoaXNbV10pO3JldHVybiBVfX0oTi5wcm90b3R5cGU9UCgiLi9vYmplY3QiKSkubG9hZD1QKCIuL2xvYWQiKSxOLnN1cHBv''@;'; put 'put ''cnQ9UCgiLi9zdXBwb3J0IiksTi5kZWZhdWx0cz1QKCIuL2RlZmF1bHRzIiksTi51dGlscz1QKCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyIpLE4uYmFzZTY0PXtlbmNvZGU6ZnVuY3Rpb24oTCl7cmV0dXJuIHouZW5jb2RlKEwpfSxkZWNvZGU6ZnVuY3Rpb24oTCl7cmV0dXJuIHouZGVjb2Rl''@;'; put 'put ''KEwpfX0sTi5jb21wcmVzc2lvbnM9UCgiLi9jb21wcmVzc2lvbnMiKSxGLmV4cG9ydHM9Tn0seyIuL2Jhc2U2NCI6MSwiLi9jb21wcmVzc2lvbnMiOjMsIi4vZGVmYXVsdHMiOjYsIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIjo3LCIuL2xvYWQiOjEwLCIuL29iamVjdCI6MTMsIi4vc3VwcG9y''@;'; put 'put ''dCI6MTd9XSwxMDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2Jhc2U2NCIpLE49UCgiLi96aXBFbnRyaWVzIik7Ri5leHBvcnRzPWZ1bmN0aW9uKEwsSyl7dmFyIFUsVyxZLHE7Zm9yKChLPUt8fHt9KS5iYXNlNjQmJihMPXouZGVjb2RlKEwpKSxVPShXPW5ldyBO''@;'; put 'put ''KEwsSykpLmZpbGVzLFk9MDtZPFUubGVuZ3RoO1krKyl0aGlzLmZpbGUoKHE9VVtZXSkuZmlsZU5hbWUscS5kZWNvbXByZXNzZWQse2JpbmFyeTohMCxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITAsZGF0ZTpxLmRhdGUsZGlyOnEuZGlyLGNvbW1lbnQ6cS5maWxlQ29tbWVudC5sZW5ndGg/cS5m''@;'; put 'put ''aWxlQ29tbWVudDpudWxsLGNyZWF0ZUZvbGRlcnM6Sy5jcmVhdGVGb2xkZXJzfSk7cmV0dXJuIFcuemlwQ29tbWVudC5sZW5ndGgmJih0aGlzLmNvbW1lbnQ9Vy56aXBDb21tZW50KSx0aGlzfX0seyIuL2Jhc2U2NCI6MSwiLi96aXBFbnRyaWVzIjoyMn1dLDExOltmdW5jdGlvbihQLEYsTyl7''@;'; put 'put ''KGZ1bmN0aW9uKHopeyJ1c2Ugc3RyaWN0Ijt2YXIgTj1mdW5jdGlvbigpe307aWYodHlwZW9mIHo8InUiKXt2YXIgTD0hei5mcm9tO2lmKCFMKXRyeXt6LmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtMPSEwfU49TD9mdW5jdGlvbihLLFUpe3JldHVybiBVP25ldyB6KEssVSk6bmV3IHooSyl9''@;'; put 'put ''OnouZnJvbS5iaW5kKHopLHouYWxsb2N8fCh6LmFsbG9jPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgeihLKX0pfUYuZXhwb3J0cz1mdW5jdGlvbihLLFUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgSz96LmFsbG9jKEspOk4oSyxVKX0sRi5leHBvcnRzLnRlc3Q9ZnVuY3Rpb24oSyl7cmV0dXJu''@;'; put 'put ''IHouaXNCdWZmZXIoSyl9fSkuY2FsbCh0aGlzLHR5cGVvZiBCdWZmZXI8InUiP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTI6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91aW50OEFycmF5UmVhZGVyIik7ZnVuY3Rpb24gTihMKXt0aGlzLmRhdGE9TCx0aGlzLmxlbmd0''@;'; put 'put ''aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MH0oTi5wcm90b3R5cGU9bmV3IHopLnJlYWREYXRhPWZ1bmN0aW9uKEwpe3RoaXMuY2hlY2tPZmZzZXQoTCk7dmFyIEs9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsdGhpcy5pbmRleCtMKTtyZXR1cm4gdGhpcy5pbmRleCs9TCxLfSxG''@;'; put 'put ''LmV4cG9ydHM9Tn0seyIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4fV0sMTM6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdXBwb3J0IiksTj1QKCIuL3V0aWxzIiksTD1QKCIuL2NyYzMyIiksSz1QKCIuL3NpZ25hdHVyZSIpLFU9UCgiLi9kZWZhdWx0cyIpLFc9UCgi''@;'; put 'put ''Li9iYXNlNjQiKSxZPVAoIi4vY29tcHJlc3Npb25zIikscT1QKCIuL2NvbXByZXNzZWRPYmplY3QiKSxlZT1QKCIuL25vZGVCdWZmZXIiKSxKPVAoIi4vdXRmOCIpLG5lPVAoIi4vc3RyaW5nV3JpdGVyIiksaWU9UCgiLi91aW50OEFycmF5V3JpdGVyIiksbGU9ZnVuY3Rpb24oail7aWYoai5f''@;'; put 'put ''ZGF0YSBpbnN0YW5jZW9mIHEmJihqLl9kYXRhPWouX2RhdGEuZ2V0Q29udGVudCgpLGoub3B0aW9ucy5iaW5hcnk9ITAsai5vcHRpb25zLmJhc2U2ND0hMSwidWludDhhcnJheSI9PT1OLmdldFR5cGVPZihqLl9kYXRhKSkpe3ZhciBFPWouX2RhdGE7ai5fZGF0YT1uZXcgVWludDhBcnJheShF''@;'; put 'put ''Lmxlbmd0aCksMCE9PUUubGVuZ3RoJiZqLl9kYXRhLnNldChFLDApfXJldHVybiBqLl9kYXRhfSxtZT1mdW5jdGlvbihqKXt2YXIgRT1sZShqKTtyZXR1cm4ic3RyaW5nIj09PU4uZ2V0VHlwZU9mKEUpPyFqLm9wdGlvbnMuYmluYXJ5JiZ6Lm5vZGVidWZmZXI/ZWUoRSwidXRmLTgiKTpqLmFz''@;'; put 'put ''QmluYXJ5KCk6RX0sX2U9ZnVuY3Rpb24oail7dmFyIEU9bGUodGhpcyk7cmV0dXJuIG51bGw9PT1FfHx0eXBlb2YgRT4idSI/IiI6KHRoaXMub3B0aW9ucy5iYXNlNjQmJihFPVcuZGVjb2RlKEUpKSxFPWomJnRoaXMub3B0aW9ucy5iaW5hcnk/SC51dGY4ZGVjb2RlKEUpOk4udHJhbnNmb3Jt''@;'; put 'put ''VG8oInN0cmluZyIsRSksIWomJiF0aGlzLm9wdGlvbnMuYmluYXJ5JiYoRT1OLnRyYW5zZm9ybVRvKCJzdHJpbmciLEgudXRmOGVuY29kZShFKSkpLEUpfSxUZT1mdW5jdGlvbihqLEUsbSl7dGhpcy5uYW1lPWosdGhpcy5kaXI9bS5kaXIsdGhpcy5kYXRlPW0uZGF0ZSx0aGlzLmNvbW1lbnQ9''@;'; put 'put ''bS5jb21tZW50LHRoaXMuX2RhdGE9RSx0aGlzLm9wdGlvbnM9bSx0aGlzLl9pbml0aWFsTWV0YWRhdGE9e2RpcjptLmRpcixkYXRlOm0uZGF0ZX19O1RlLnByb3RvdHlwZT17YXNUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIF9lLmNhbGwodGhpcywhMCl9LGFzQmluYXJ5OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIF9lLmNhbGwodGhpcywhMSl9LGFzTm9kZUJ1ZmZlcjpmdW5jdGlvbigpe3ZhciBqPW1lKHRoaXMpO3JldHVybiBOLnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixqKX0sYXNVaW50OEFycmF5OmZ1bmN0aW9uKCl7dmFyIGo9bWUodGhpcyk7cmV0dXJuIE4udHJhbnNmb3JtVG8oInVpbnQ4''@;'; put 'put ''YXJyYXkiLGopfSxhc0FycmF5QnVmZmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXNVaW50OEFycmF5KCkuYnVmZmVyfX07dmFyIFNlPWZ1bmN0aW9uKGosRSl7dmFyIEEsbT0iIjtmb3IoQT0wO0E8RTtBKyspbSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmaiksaj4+Pj04O3JldHVybiBt''@;'; put 'put ''fSxqZT1mdW5jdGlvbigpe3ZhciBFLG0saj17fTtmb3IoRT0wO0U8YXJndW1lbnRzLmxlbmd0aDtFKyspZm9yKG0gaW4gYXJndW1lbnRzW0VdKWFyZ3VtZW50c1tFXS5oYXNPd25Qcm9wZXJ0eShtKSYmdHlwZW9mIGpbbV0+InUiJiYoalttXT1hcmd1bWVudHNbRV1bbV0pO3JldHVybiBqfSxw''@;'; put 'put ''PWZ1bmN0aW9uKGosRSxtKXt2YXIgYWUsQT1OLmdldFR5cGVPZihFKTtpZihtPWZ1bmN0aW9uKGope3JldHVybiEwPT09KGo9anx8e30pLmJhc2U2NCYmbnVsbD09ai5iaW5hcnkmJihqLmJpbmFyeT0hMCksKGo9amUoaixVKSkuZGF0ZT1qLmRhdGV8fG5ldyBEYXRlLG51bGwhPT1qLmNvbXBy''@;'; put 'put ''ZXNzaW9uJiYoai5jb21wcmVzc2lvbj1qLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCkpLGp9KG0pLG0uY3JlYXRlRm9sZGVycyYmKGFlPWIoaikpJiZ4LmNhbGwodGhpcyxhZSwhMCksbS5kaXJ8fG51bGw9PT1FfHx0eXBlb2YgRT4idSIpbS5iYXNlNjQ9ITEsbS5iaW5hcnk9ITEsRT1udWxs''@;'; put 'put ''O2Vsc2UgaWYoInN0cmluZyI9PT1BKW0uYmluYXJ5JiYhbS5iYXNlNjQmJiEwIT09bS5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcmJihFPU4uc3RyaW5nMmJpbmFyeShFKSk7ZWxzZXtpZihtLmJhc2U2ND0hMSxtLmJpbmFyeT0hMCwhKEF8fEUgaW5zdGFuY2VvZiBxKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlRoZSBkYXRhIG9mICciK2orIicgaXMgaW4gYW4gdW5zdXBwb3J0ZWQgZm9ybWF0ICEiKTsiYXJyYXlidWZmZXIiPT09QSYmKEU9Ti50cmFuc2Zvcm1UbygidWludDhhcnJheSIsRSkpfXZhciB0ZT1uZXcgVGUoaixFLG0pO3JldHVybiB0aGlzLmZpbGVzW2pdPXRlLHRlfSxiPWZ1bmN0aW9u''@;'; put 'put ''KGopeyIvIj09ai5zbGljZSgtMSkmJihqPWouc3Vic3RyaW5nKDAsai5sZW5ndGgtMSkpO3ZhciBFPWoubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gRT4wP2ouc3Vic3RyaW5nKDAsRSk6IiJ9LHg9ZnVuY3Rpb24oaixFKXtyZXR1cm4iLyIhPWouc2xpY2UoLTEpJiYoais9Ii8iKSxFPXR5cGVv''@;'; put 'put ''ZiBFPCJ1IiYmRSx0aGlzLmZpbGVzW2pdfHxwLmNhbGwodGhpcyxqLG51bGwse2RpcjohMCxjcmVhdGVGb2xkZXJzOkV9KSx0aGlzLmZpbGVzW2pdfSxDPWZ1bmN0aW9uKGosRSl7dmFyIEEsbT1uZXcgcTtyZXR1cm4gai5fZGF0YSBpbnN0YW5jZW9mIHE/KG0udW5jb21wcmVzc2VkU2l6ZT1q''@;'; put 'put ''Ll9kYXRhLnVuY29tcHJlc3NlZFNpemUsbS5jcmMzMj1qLl9kYXRhLmNyYzMyLDA9PT1tLnVuY29tcHJlc3NlZFNpemV8fGouZGlyPyhFPVkuU1RPUkUsbS5jb21wcmVzc2VkQ29udGVudD0iIixtLmNyYzMyPTApOmouX2RhdGEuY29tcHJlc3Npb25NZXRob2Q9PT1FLm1hZ2ljP20uY29tcHJl''@;'; put 'put ''c3NlZENvbnRlbnQ9ai5fZGF0YS5nZXRDb21wcmVzc2VkQ29udGVudCgpOihBPWouX2RhdGEuZ2V0Q29udGVudCgpLG0uY29tcHJlc3NlZENvbnRlbnQ9RS5jb21wcmVzcyhOLnRyYW5zZm9ybVRvKEUuY29tcHJlc3NJbnB1dFR5cGUsQSkpKSk6KCghKEE9bWUoaikpfHwwPT09QS5sZW5ndGh8''@;'; put 'put ''fGouZGlyKSYmKEU9WS5TVE9SRSxBPSIiKSxtLnVuY29tcHJlc3NlZFNpemU9QS5sZW5ndGgsbS5jcmMzMj1MKEEpLG0uY29tcHJlc3NlZENvbnRlbnQ9RS5jb21wcmVzcyhOLnRyYW5zZm9ybVRvKEUuY29tcHJlc3NJbnB1dFR5cGUsQSkpKSxtLmNvbXByZXNzZWRTaXplPW0uY29tcHJlc3Nl''@;'; put 'put ''ZENvbnRlbnQubGVuZ3RoLG0uY29tcHJlc3Npb25NZXRob2Q9RS5tYWdpYyxtfSxUPWZ1bmN0aW9uKGosRSxtLEEpe3ZhciB4ZSx2ZSxGZSxPZSx0ZT1OLnRyYW5zZm9ybVRvKCJzdHJpbmciLEoudXRmOGVuY29kZShFLm5hbWUpKSxzZT1FLmNvbW1lbnR8fCIiLHdlPU4udHJhbnNmb3JtVG8o''@;'; put 'put ''InN0cmluZyIsSi51dGY4ZW5jb2RlKHNlKSksVWU9dGUubGVuZ3RoIT09RS5uYW1lLmxlbmd0aCxKZT13ZS5sZW5ndGghPT1zZS5sZW5ndGgsb3Q9RS5vcHRpb25zLFhlPSIiLHplPSIiLERlPSIiO0ZlPUUuX2luaXRpYWxNZXRhZGF0YS5kaXIhPT1FLmRpcj9FLmRpcjpvdC5kaXIseGU9KE9l''@;'; put 'put ''PUUuX2luaXRpYWxNZXRhZGF0YS5kYXRlIT09RS5kYXRlP0UuZGF0ZTpvdC5kYXRlKS5nZXRIb3VycygpLHhlPDw9Nix4ZXw9T2UuZ2V0TWludXRlcygpLHhlPDw9NSx4ZXw9T2UuZ2V0U2Vjb25kcygpLzIsdmU9T2UuZ2V0RnVsbFllYXIoKS0xOTgwLHZlPDw9NCx2ZXw9T2UuZ2V0TW9udGgo''@;'; put 'put ''KSsxLHZlPDw9NSx2ZXw9T2UuZ2V0RGF0ZSgpLFVlJiYoemU9U2UoMSwxKStTZShMKHRlKSw0KSt0ZSxYZSs9InVwIitTZSh6ZS5sZW5ndGgsMikremUpLEplJiYoRGU9U2UoMSwxKStTZSh0aGlzLmNyYzMyKHdlKSw0KSt3ZSxYZSs9InVjIitTZShEZS5sZW5ndGgsMikrRGUpO3ZhciBJZT0i''@;'; put 'put ''IjtyZXR1cm4gSWUrPSJcblwwIixJZSs9VWV8fEplPyJcMFxiIjoiXDBcMCIsSWUrPW0uY29tcHJlc3Npb25NZXRob2QsSWUrPVNlKHhlLDIpLEllKz1TZSh2ZSwyKSxJZSs9U2UobS5jcmMzMiw0KSxJZSs9U2UobS5jb21wcmVzc2VkU2l6ZSw0KSxJZSs9U2UobS51bmNvbXByZXNzZWRTaXpl''@;'; put 'put ''LDQpLEllKz1TZSh0ZS5sZW5ndGgsMiksSWUrPVNlKFhlLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDpLLkxPQ0FMX0ZJTEVfSEVBREVSK0llK3RlK1hlLGRpclJlY29yZDpLLkNFTlRSQUxfRklMRV9IRUFERVIrIlx4MTRcMCIrSWUrU2Uod2UubGVuZ3RoLDIpKyJcMFwwXDBcMCIrKCEwPT09RmU/''@;'; put 'put ''Ilx4MTBcMFwwXDAiOiJcMFwwXDBcMCIpK1NlKEEsNCkrdGUrWGUrd2UsY29tcHJlc3NlZE9iamVjdDptfX0sSD17bG9hZDpmdW5jdGlvbihqLEUpe3Rocm93IG5ldyBFcnJvcigiTG9hZCBtZXRob2QgaXMgbm90IGRlZmluZWQuIElzIHRoZSBmaWxlIGpzemlwLWxvYWQuanMgaW5jbHVkZWQg''@;'; put 'put ''PyIpfSxmaWx0ZXI6ZnVuY3Rpb24oail7dmFyIG0sQSxhZSx0ZSxFPVtdO2ZvcihtIGluIHRoaXMuZmlsZXMpdGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShtKSYmKHRlPW5ldyBUZSgoYWU9dGhpcy5maWxlc1ttXSkubmFtZSxhZS5fZGF0YSxqZShhZS5vcHRpb25zKSksQT1tLnNsaWNlKHRo''@;'; put 'put ''aXMucm9vdC5sZW5ndGgsbS5sZW5ndGgpLG0uc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmaihBLHRlKSYmRS5wdXNoKHRlKSk7cmV0dXJuIEV9LGZpbGU6ZnVuY3Rpb24oaixFLG0pe2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihOLmlzUmVnRXhwKGopKXt2YXIg''@;'; put 'put ''QT1qO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihhZSx0ZSl7cmV0dXJuIXRlLmRpciYmQS50ZXN0KGFlKX0pfXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihhZSx0ZSl7cmV0dXJuIXRlLmRpciYmYWU9PT1qfSlbMF18fG51bGx9cmV0dXJuIHAuY2FsbCh0aGlzLGo9dGhpcy5yb290''@;'; put 'put ''K2osRSxtKSx0aGlzfSxmb2xkZXI6ZnVuY3Rpb24oail7aWYoIWopcmV0dXJuIHRoaXM7aWYoTi5pc1JlZ0V4cChqKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYWUsdGUpe3JldHVybiB0ZS5kaXImJmoudGVzdChhZSl9KTt2YXIgbT14LmNhbGwodGhpcyx0aGlzLnJvb3QraiksQT10''@;'; put 'put ''aGlzLmNsb25lKCk7cmV0dXJuIEEucm9vdD1tLm5hbWUsQX0scmVtb3ZlOmZ1bmN0aW9uKGope3ZhciBFPXRoaXMuZmlsZXNbaj10aGlzLnJvb3Qral07aWYoRXx8KCIvIiE9ai5zbGljZSgtMSkmJihqKz0iLyIpLEU9dGhpcy5maWxlc1tqXSksRSYmIUUuZGlyKWRlbGV0ZSB0aGlzLmZpbGVz''@;'; put 'put ''W2pdO2Vsc2UgZm9yKHZhciBtPXRoaXMuZmlsdGVyKGZ1bmN0aW9uKGFlLHRlKXtyZXR1cm4gdGUubmFtZS5zbGljZSgwLGoubGVuZ3RoKT09PWp9KSxBPTA7QTxtLmxlbmd0aDtBKyspZGVsZXRlIHRoaXMuZmlsZXNbbVtBXS5uYW1lXTtyZXR1cm4gdGhpc30sZ2VuZXJhdGU6ZnVuY3Rpb24o''@;'; put 'put ''ail7aj1qZShqfHx7fSx7YmFzZTY0OiEwLGNvbXByZXNzaW9uOiJTVE9SRSIsdHlwZToiYmFzZTY0Iixjb21tZW50Om51bGx9KSxOLmNoZWNrU3VwcG9ydChqLnR5cGUpO3ZhciBhZSx0ZSxYZSxFPVtdLG09MCxBPTAsc2U9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnV0ZjhlbmNvZGUo''@;'; put 'put ''ai5jb21tZW50fHx0aGlzLmNvbW1lbnR8fCIiKSk7Zm9yKHZhciB3ZSBpbiB0aGlzLmZpbGVzKWlmKHRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkod2UpKXt2YXIgVWU9dGhpcy5maWxlc1t3ZV0sSmU9VWUub3B0aW9ucy5jb21wcmVzc2lvbnx8ai5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgp''@;'; put 'put ''LG90PVlbSmVdO2lmKCFvdCl0aHJvdyBuZXcgRXJyb3IoSmUrIiBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgISIpO3ZhciB4ZT1DLmNhbGwodGhpcyxVZSxvdCksdmU9VC5jYWxsKHRoaXMsd2UsVWUseGUsbSk7bSs9dmUuZmlsZVJlY29yZC5sZW5ndGgreGUuY29tcHJlc3Nl''@;'; put 'put ''ZFNpemUsQSs9dmUuZGlyUmVjb3JkLmxlbmd0aCxFLnB1c2godmUpfVhlPUsuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKyJcMFwwXDBcMCIrU2UoRS5sZW5ndGgsMikrU2UoRS5sZW5ndGgsMikrU2UoQSw0KStTZShtLDQpK1NlKHNlLmxlbmd0aCwyKStzZTt2YXIgemU9ai50eXBlLnRvTG93ZXJD''@;'; put 'put ''YXNlKCk7Zm9yKGFlPSJ1aW50OGFycmF5Ij09PXplfHwiYXJyYXlidWZmZXIiPT09emV8fCJibG9iIj09PXplfHwibm9kZWJ1ZmZlciI9PT16ZT9uZXcgaWUobStBK1hlLmxlbmd0aCk6bmV3IG5lKG0rQStYZS5sZW5ndGgpLHRlPTA7dGU8RS5sZW5ndGg7dGUrKylhZS5hcHBlbmQoRVt0ZV0u''@;'; put 'put ''ZmlsZVJlY29yZCksYWUuYXBwZW5kKEVbdGVdLmNvbXByZXNzZWRPYmplY3QuY29tcHJlc3NlZENvbnRlbnQpO2Zvcih0ZT0wO3RlPEUubGVuZ3RoO3RlKyspYWUuYXBwZW5kKEVbdGVdLmRpclJlY29yZCk7YWUuYXBwZW5kKFhlKTt2YXIgRGU9YWUuZmluYWxpemUoKTtzd2l0Y2goai50eXBl''@;'; put 'put ''LnRvTG93ZXJDYXNlKCkpe2Nhc2UidWludDhhcnJheSI6Y2FzZSJhcnJheWJ1ZmZlciI6Y2FzZSJub2RlYnVmZmVyIjpyZXR1cm4gTi50cmFuc2Zvcm1UbyhqLnR5cGUudG9Mb3dlckNhc2UoKSxEZSk7Y2FzZSJibG9iIjpyZXR1cm4gTi5hcnJheUJ1ZmZlcjJCbG9iKE4udHJhbnNmb3JtVG8o''@;'; put 'put ''ImFycmF5YnVmZmVyIixEZSkpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gai5iYXNlNjQ/Vy5lbmNvZGUoRGUpOkRlO2RlZmF1bHQ6cmV0dXJuIERlfX0sY3JjMzI6ZnVuY3Rpb24oaixFKXtyZXR1cm4gTChqLEUpfSx1dGY4ZW5jb2RlOmZ1bmN0aW9uKGope3JldHVybiBOLnRyYW5zZm9ybVRvKCJz''@;'; put 'put ''dHJpbmciLEoudXRmOGVuY29kZShqKSl9LHV0ZjhkZWNvZGU6ZnVuY3Rpb24oail7cmV0dXJuIEoudXRmOGRlY29kZShqKX19O0YuZXhwb3J0cz1IfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIuL2NyYzMyIjo0LCIuL2RlZmF1bHRz''@;'; put 'put ''Ijo2LCIuL25vZGVCdWZmZXIiOjExLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nV3JpdGVyIjoxNiwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5V3JpdGVyIjoxOSwiLi91dGY4IjoyMCwiLi91dGlscyI6MjF9XSwxNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtPLkxPQ0FM''@;'; put 'put ''X0ZJTEVfSEVBREVSPSJQS1x4MDNceDA0IixPLkNFTlRSQUxfRklMRV9IRUFERVI9IlBLXHgwMVx4MDIiLE8uQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDVceDA2IixPLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLXHgwNlx4MDciLE8uWklQNjRfQ0VOVFJBTF9ESVJF''@;'; put 'put ''Q1RPUllfRU5EPSJQS1x4MDZceDA2IixPLkRBVEFfREVTQ1JJUFRPUj0iUEtceDA3XGIifSx7fV0sMTU6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9kYXRhUmVhZGVyIiksTj1QKCIuL3V0aWxzIik7ZnVuY3Rpb24gTChLLFUpe3RoaXMuZGF0YT1LLFV8fCh0aGlz''@;'; put 'put ''LmRhdGE9Ti5zdHJpbmcyYmluYXJ5KHRoaXMuZGF0YSkpLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShMLnByb3RvdHlwZT1uZXcgeikuYnl0ZUF0PWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmRhdGEuY2hhckNvZGVBdChLKX0sTC5wcm90b3R5cGUubGFzdElu''@;'; put 'put ''ZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihLKX0sTC5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oSyl7dGhpcy5jaGVja09mZnNldChLKTt2YXIgVT10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K0spO3JldHVy''@;'; put 'put ''biB0aGlzLmluZGV4Kz1LLFV9LEYuZXhwb3J0cz1MfSx7Ii4vZGF0YVJlYWRlciI6NSwiLi91dGlscyI6MjF9XSwxNjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIiksTj1mdW5jdGlvbigpe3RoaXMuZGF0YT1bXX07Ti5wcm90b3R5cGU9e2FwcGVuZDpm''@;'; put 'put ''dW5jdGlvbihMKXtMPXoudHJhbnNmb3JtVG8oInN0cmluZyIsTCksdGhpcy5kYXRhLnB1c2goTCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5qb2luKCIiKX19LEYuZXhwb3J0cz1OfSx7Ii4vdXRpbHMiOjIxfV0sMTc6W2Z1bmN0aW9uKFAsRixPKXsoZnVuY3Rpb24o''@;'; put 'put ''eil7InVzZSBzdHJpY3QiO2lmKE8uYmFzZTY0PSEwLE8uYXJyYXk9ITAsTy5zdHJpbmc9ITAsTy5hcnJheWJ1ZmZlcj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSIsTy5ub2RlYnVmZmVyPXR5cGVvZiB6PCJ1IixPLnVpbnQ4YXJyYXk9dHlwZW9mIFVpbnQ4''@;'; put 'put ''QXJyYXk8InUiLHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpTy5ibG9iPSExO2Vsc2V7dmFyIE49bmV3IEFycmF5QnVmZmVyKDApO3RyeXtPLmJsb2I9MD09PW5ldyBCbG9iKFtOXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemV9Y2F0Y2h7dHJ5e3ZhciBLPW5ldyh3aW5kb3cuQmxvYkJ1''@;'; put 'put ''aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7Sy5hcHBlbmQoTiksTy5ibG9iPTA9PT1LLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpLnNpemV9Y2F0Y2h7Ty5ibG9iPSExfX19fSkuY2FsbCh0aGlz''@;'; put 'put ''LHR5cGVvZiBCdWZmZXI8InUiP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTg6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9kYXRhUmVhZGVyIik7ZnVuY3Rpb24gTihMKXtMJiYodGhpcy5kYXRhPUwsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4''@;'; put 'put ''PTApfShOLnByb3RvdHlwZT1uZXcgeikuYnl0ZUF0PWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLmRhdGFbTF19LE4ucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgSz1MLmNoYXJDb2RlQXQoMCksVT1MLmNoYXJDb2RlQXQoMSksVz1MLmNoYXJDb2Rl''@;'; put 'put ''QXQoMiksWT1MLmNoYXJDb2RlQXQoMykscT10aGlzLmxlbmd0aC00O3E+PTA7LS1xKWlmKHRoaXMuZGF0YVtxXT09PUsmJnRoaXMuZGF0YVtxKzFdPT09VSYmdGhpcy5kYXRhW3ErMl09PT1XJiZ0aGlzLmRhdGFbcSszXT09PVkpcmV0dXJuIHE7cmV0dXJuLTF9LE4ucHJvdG90eXBlLnJlYWRE''@;'; put 'put ''YXRhPWZ1bmN0aW9uKEwpe2lmKHRoaXMuY2hlY2tPZmZzZXQoTCksMD09PUwpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciBLPXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrTCk7cmV0dXJuIHRoaXMuaW5kZXgrPUwsS30sRi5leHBvcnRzPU59LHsiLi9kYXRh''@;'; put 'put ''UmVhZGVyIjo1fV0sMTk6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91dGlscyIpLE49ZnVuY3Rpb24oTCl7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KEwpLHRoaXMuaW5kZXg9MH07Ti5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihMKXswIT09TC5sZW5ndGgm''@;'; put 'put ''JihMPXoudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEwpLHRoaXMuZGF0YS5zZXQoTCx0aGlzLmluZGV4KSx0aGlzLmluZGV4Kz1MLmxlbmd0aCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LEYuZXhwb3J0cz1OfSx7Ii4vdXRpbHMiOjIxfV0sMjA6W2Z1bmN0aW9u''@;'; put 'put ''KFAsRixPKXsidXNlIHN0cmljdCI7Zm9yKHZhciB6PVAoIi4vdXRpbHMiKSxOPVAoIi4vc3VwcG9ydCIpLEw9UCgiLi9ub2RlQnVmZmVyIiksSz1uZXcgQXJyYXkoMjU2KSxVPTA7VTwyNTY7VSsrKUtbVV09VT49MjUyPzY6VT49MjQ4PzU6VT49MjQwPzQ6VT49MjI0PzM6VT49MTkyPzI6MTtL''@;'; put 'put ''WzI1NF09S1syNTRdPTE7dmFyIFk9ZnVuY3Rpb24oZWUsSil7dmFyIG5lO2ZvcigoSj1KfHxlZS5sZW5ndGgpPmVlLmxlbmd0aCYmKEo9ZWUubGVuZ3RoKSxuZT1KLTE7bmU+PTAmJjEyOD09KDE5MiZlZVtuZV0pOyluZS0tO3JldHVybiBuZTwwfHwwPT09bmU/SjpuZStLW2VlW25lXV0+Sj9u''@;'; put 'put ''ZTpKfSxxPWZ1bmN0aW9uKGVlKXt2YXIgbmUsaWUsbGUsbWUsX2U9ZWUubGVuZ3RoLFRlPW5ldyBBcnJheSgyKl9lKTtmb3IoaWU9MCxuZT0wO25lPF9lOylpZigobGU9ZWVbbmUrK10pPDEyOClUZVtpZSsrXT1sZTtlbHNlIGlmKChtZT1LW2xlXSk+NClUZVtpZSsrXT02NTUzMyxuZSs9bWUt''@;'; put 'put ''MTtlbHNle2ZvcihsZSY9Mj09PW1lPzMxOjM9PT1tZT8xNTo3O21lPjEmJm5lPF9lOylsZT1sZTw8Nnw2MyZlZVtuZSsrXSxtZS0tO21lPjE/VGVbaWUrK109NjU1MzM6bGU8NjU1MzY/VGVbaWUrK109bGU6KFRlW2llKytdPTU1Mjk2fChsZS09NjU1MzYpPj4xMCYxMDIzLFRlW2llKytdPTU2''@;'; put 'put ''MzIwfDEwMjMmbGUpfXJldHVybiBUZS5sZW5ndGghPT1pZSYmKFRlLnN1YmFycmF5P1RlPVRlLnN1YmFycmF5KDAsaWUpOlRlLmxlbmd0aD1pZSksei5hcHBseUZyb21DaGFyQ29kZShUZSl9O08udXRmOGVuY29kZT1mdW5jdGlvbihKKXtyZXR1cm4gTi5ub2RlYnVmZmVyP0woSiwidXRmLTgi''@;'; put 'put ''KTpmdW5jdGlvbihlZSl7dmFyIEosbmUsaWUsbGUsbWUsX2U9ZWUubGVuZ3RoLFRlPTA7Zm9yKGxlPTA7bGU8X2U7bGUrKyk1NTI5Nj09KDY0NTEyJihuZT1lZS5jaGFyQ29kZUF0KGxlKSkpJiZsZSsxPF9lJiY1NjMyMD09KDY0NTEyJihpZT1lZS5jaGFyQ29kZUF0KGxlKzEpKSkmJihuZT02''@;'; put 'put ''NTUzNisobmUtNTUyOTY8PDEwKSsoaWUtNTYzMjApLGxlKyspLFRlKz1uZTwxMjg/MTpuZTwyMDQ4PzI6bmU8NjU1MzY/Mzo0O2ZvcihKPU4udWludDhhcnJheT9uZXcgVWludDhBcnJheShUZSk6bmV3IEFycmF5KFRlKSxtZT0wLGxlPTA7bWU8VGU7bGUrKyk1NTI5Nj09KDY0NTEyJihuZT1l''@;'; put 'put ''ZS5jaGFyQ29kZUF0KGxlKSkpJiZsZSsxPF9lJiY1NjMyMD09KDY0NTEyJihpZT1lZS5jaGFyQ29kZUF0KGxlKzEpKSkmJihuZT02NTUzNisobmUtNTUyOTY8PDEwKSsoaWUtNTYzMjApLGxlKyspLG5lPDEyOD9KW21lKytdPW5lOm5lPDIwNDg/KEpbbWUrK109MTkyfG5lPj4+NixKW21lKytd''@;'; put 'put ''PTEyOHw2MyZuZSk6bmU8NjU1MzY/KEpbbWUrK109MjI0fG5lPj4+MTIsSlttZSsrXT0xMjh8bmU+Pj42JjYzLEpbbWUrK109MTI4fDYzJm5lKTooSlttZSsrXT0yNDB8bmU+Pj4xOCxKW21lKytdPTEyOHxuZT4+PjEyJjYzLEpbbWUrK109MTI4fG5lPj4+NiY2MyxKW21lKytdPTEyOHw2MyZu''@;'; put 'put ''ZSk7cmV0dXJuIEp9KEopfSxPLnV0ZjhkZWNvZGU9ZnVuY3Rpb24oSil7aWYoTi5ub2RlYnVmZmVyKXJldHVybiB6LnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixKKS50b1N0cmluZygidXRmLTgiKTtmb3IodmFyIG5lPVtdLGllPTAsbGU9KEo9ei50cmFuc2Zvcm1UbyhOLnVpbnQ4YXJyYXk/''@;'; put 'put ''InVpbnQ4YXJyYXkiOiJhcnJheSIsSikpLmxlbmd0aDtpZTxsZTspe3ZhciBfZT1ZKEosTWF0aC5taW4oaWUrNjU1MzYsbGUpKTtuZS5wdXNoKHEoTi51aW50OGFycmF5P0ouc3ViYXJyYXkoaWUsX2UpOkouc2xpY2UoaWUsX2UpKSksaWU9X2V9cmV0dXJuIG5lLmpvaW4oIiIpfX0seyIuL25v''@;'; put 'put ''ZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3LCIuL3V0aWxzIjoyMX1dLDIxOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vc3VwcG9ydCIpLE49UCgiLi9jb21wcmVzc2lvbnMiKSxMPVAoIi4vbm9kZUJ1ZmZlciIpO2Z1bmN0aW9uIEsoZWUpe3JldHVybiBlZX1m''@;'; put 'put ''dW5jdGlvbiBVKGVlLEope2Zvcih2YXIgbmU9MDtuZTxlZS5sZW5ndGg7KytuZSlKW25lXT0yNTUmZWUuY2hhckNvZGVBdChuZSk7cmV0dXJuIEp9ZnVuY3Rpb24gVyhlZSl7dmFyIEo9NjU1MzYsbmU9W10saWU9ZWUubGVuZ3RoLGxlPU8uZ2V0VHlwZU9mKGVlKSxtZT0wLF9lPSEwO3RyeXtz''@;'; put 'put ''d2l0Y2gobGUpe2Nhc2UidWludDhhcnJheSI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDApKTticmVhaztjYXNlIm5vZGVidWZmZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxMKDApKX19Y2F0Y2h7X2U9ITF9aWYoIV9lKXtmb3IodmFy''@;'; put 'put ''IFRlPSIiLFNlPTA7U2U8ZWUubGVuZ3RoO1NlKyspVGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoZWVbU2VdKTtyZXR1cm4gVGV9Zm9yKDttZTxpZSYmSj4xOyl0cnl7bmUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsImFycmF5Ij09PWxlfHwibm9kZWJ1ZmZlciI9PT1sZT9l''@;'; put 'put ''ZS5zbGljZShtZSxNYXRoLm1pbihtZStKLGllKSk6ZWUuc3ViYXJyYXkobWUsTWF0aC5taW4obWUrSixpZSkpKSksbWUrPUp9Y2F0Y2h7Sj1NYXRoLmZsb29yKEovMil9cmV0dXJuIG5lLmpvaW4oIiIpfWZ1bmN0aW9uIFkoZWUsSil7Zm9yKHZhciBuZT0wO25lPGVlLmxlbmd0aDtuZSsrKUpb''@;'; put 'put ''bmVdPWVlW25lXTtyZXR1cm4gSn1PLnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oZWUpe2Zvcih2YXIgSj0iIixuZT0wO25lPGVlLmxlbmd0aDtuZSsrKUorPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmVlLmNoYXJDb2RlQXQobmUpKTtyZXR1cm4gSn0sTy5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0''@;'; put 'put ''aW9uKGVlKXtPLmNoZWNrU3VwcG9ydCgiYmxvYiIpO3RyeXtyZXR1cm4gbmV3IEJsb2IoW2VlXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pfWNhdGNoe3RyeXt2YXIgbmU9bmV3KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1''@;'; put 'put ''aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTtyZXR1cm4gbmUuYXBwZW5kKGVlKSxuZS5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi4iKX19fSxPLmFwcGx5RnJvbUNoYXJDb2RlPVc7dmFy''@;'; put 'put ''IHE9e307cS5zdHJpbmc9e3N0cmluZzpLLGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gVShlZSxuZXcgQXJyYXkoZWUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gcS5zdHJpbmcudWludDhhcnJheShlZSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKGVl''@;'; put 'put ''KXtyZXR1cm4gVShlZSxuZXcgVWludDhBcnJheShlZS5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIFUoZWUsTChlZS5sZW5ndGgpKX19LHEuYXJyYXk9e3N0cmluZzpXLGFycmF5OkssYXJyYXlidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBuZXcgVWludDhBcnJh''@;'; put 'put ''eShlZSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZWUpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gTChlZSl9fSxxLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oZWUpe3JldHVybiBXKG5ldyBVaW50OEFycmF5KGVl''@;'; put 'put ''KSl9LGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gWShuZXcgVWludDhBcnJheShlZSksbmV3IEFycmF5KGVlLmJ5dGVMZW5ndGgpKX0sYXJyYXlidWZmZXI6Syx1aW50OGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZWUpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGVl''@;'; put 'put ''KXtyZXR1cm4gTChuZXcgVWludDhBcnJheShlZSkpfX0scS51aW50OGFycmF5PXtzdHJpbmc6VyxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFkoZWUsbmV3IEFycmF5KGVlLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIGVlLmJ1ZmZlcn0sdWludDhhcnJheTpL''@;'; put 'put ''LG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBMKGVlKX19LHEubm9kZWJ1ZmZlcj17c3RyaW5nOlcsYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBZKGVlLG5ldyBBcnJheShlZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBxLm5vZGVidWZmZXIudWlu''@;'; put 'put ''dDhhcnJheShlZSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gWShlZSxuZXcgVWludDhBcnJheShlZS5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpLfSxPLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKGVlLEope2lmKEp8fChKPSIiKSwhZWUpcmV0dXJuIEo7Ty5jaGVja1N1cHBv''@;'; put 'put ''cnQoZWUpO3ZhciBuZT1PLmdldFR5cGVPZihKKTtyZXR1cm4gcVtuZV1bZWVdKEopfSxPLmdldFR5cGVPZj1mdW5jdGlvbihlZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlZT8ic3RyaW5nIjoiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVlKT8i''@;'; put 'put ''YXJyYXkiOnoubm9kZWJ1ZmZlciYmTC50ZXN0KGVlKT8ibm9kZWJ1ZmZlciI6ei51aW50OGFycmF5JiZlZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/InVpbnQ4YXJyYXkiOnouYXJyYXlidWZmZXImJmVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ImFycmF5YnVmZmVyIjp2b2lkIDB9LE8uY2hl''@;'; put 'put ''Y2tTdXBwb3J0PWZ1bmN0aW9uKGVlKXtpZigheltlZS50b0xvd2VyQ2FzZSgpXSl0aHJvdyBuZXcgRXJyb3IoZWUrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciIpfSxPLk1BWF9WQUxVRV8xNkJJVFM9NjU1MzUsTy5NQVhfVkFMVUVfMzJCSVRTPS0xLE8ucHJldHR5PWZ1bmN0''@;'; put 'put ''aW9uKGVlKXt2YXIgbmUsaWUsSj0iIjtmb3IoaWU9MDtpZTwoZWV8fCIiKS5sZW5ndGg7aWUrKylKKz0iXFx4IisoKG5lPWVlLmNoYXJDb2RlQXQoaWUpKTwxNj8iMCI6IiIpK25lLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBKfSxPLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlv''@;'; put 'put ''bihlZSl7Zm9yKHZhciBKIGluIE4paWYoTi5oYXNPd25Qcm9wZXJ0eShKKSYmTltKXS5tYWdpYz09PWVlKXJldHVybiBOW0pdO3JldHVybiBudWxsfSxPLmlzUmVnRXhwPWZ1bmN0aW9uKGVlKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2Fs''@;'; put 'put ''bChlZSl9fSx7Ii4vY29tcHJlc3Npb25zIjozLCIuL25vZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3fV0sMjI6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdHJpbmdSZWFkZXIiKSxOPVAoIi4vbm9kZUJ1ZmZlclJlYWRlciIpLEw9UCgiLi91aW50OEFycmF5''@;'; put 'put ''UmVhZGVyIiksSz1QKCIuL3V0aWxzIiksVT1QKCIuL3NpZ25hdHVyZSIpLFc9UCgiLi96aXBFbnRyeSIpLFk9UCgiLi9zdXBwb3J0IikscT1QKCIuL29iamVjdCIpO2Z1bmN0aW9uIGVlKEosbmUpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1uZSxKJiZ0aGlzLmxvYWQoSil9ZWUu''@;'; put 'put ''cHJvdG90eXBlPXtjaGVja1NpZ25hdHVyZTpmdW5jdGlvbihKKXt2YXIgbmU9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTtpZihuZSE9PUopdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIG9yIGJ1ZyA6IHVuZXhwZWN0ZWQgc2lnbmF0dXJlICgiK0sucHJldHR5KG5lKSsiLCBleHBl''@;'; put 'put ''Y3RlZCAiK0sucHJldHR5KEopKyIpIil9LHJlYWRCbG9ja0VuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJS''@;'; put 'put ''ZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJl''@;'; put 'put ''YWRJbnQoNCksdGhpcy56aXBDb21tZW50TGVuZ3RoPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy56aXBDb21tZW50PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcodGhpcy56aXBDb21tZW50TGVuZ3RoKSx0aGlzLnppcENvbW1lbnQ9cS51dGY4ZGVjb2RlKHRoaXMuemlwQ29tbWVudCl9LHJl''@;'; put 'put ''YWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnZlcnNpb25NYWRlQnk9dGhpcy5yZWFkZXIucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9dGhpcy5yZWFkZXIucmVh''@;'; put 'put ''ZEludCgyKSx0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRy''@;'; put 'put ''YWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YT17fTtmb3IodmFyIGllLGxl''@;'; put 'put ''LG1lLEo9dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUtNDQ7MDxKOylpZT10aGlzLnJlYWRlci5yZWFkSW50KDIpLGxlPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksbWU9dGhpcy5yZWFkZXIucmVhZFN0cmluZyhsZSksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW2llXT17aWQ6aWUsbGVuZ3Ro''@;'; put 'put ''OmxlLHZhbHVlOm1lfX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yOmZ1bmN0aW9uKCl7aWYodGhpcy5kaXNrV2l0aFppcDY0Q2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPXRoaXMu''@;'; put 'put ''cmVhZGVyLnJlYWRJbnQoOCksdGhpcy5kaXNrc0NvdW50PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrc0NvdW50PjEpdGhyb3cgbmV3IEVycm9yKCJNdWx0aS12b2x1bWVzIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpfSxyZWFkTG9jYWxGaWxlczpmdW5jdGlvbigpe3ZhciBKLG5l''@;'; put 'put ''O2ZvcihKPTA7Sjx0aGlzLmZpbGVzLmxlbmd0aDtKKyspdGhpcy5yZWFkZXIuc2V0SW5kZXgoKG5lPXRoaXMuZmlsZXNbSl0pLmxvY2FsSGVhZGVyT2Zmc2V0KSx0aGlzLmNoZWNrU2lnbmF0dXJlKFUuTE9DQUxfRklMRV9IRUFERVIpLG5lLnJlYWRMb2NhbFBhcnQodGhpcy5yZWFkZXIpLG5l''@;'; put 'put ''LmhhbmRsZVVURjgoKX0scmVhZENlbnRyYWxEaXI6ZnVuY3Rpb24oKXt2YXIgSjtmb3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpPT09VS5DRU5UUkFMX0ZJTEVfSEVBREVSOykoSj1uZXcgVyh7emlwNjQ6dGhp''@;'; put 'put ''cy56aXA2NH0sdGhpcy5sb2FkT3B0aW9ucykpLnJlYWRDZW50cmFsUGFydCh0aGlzLnJlYWRlciksdGhpcy5maWxlcy5wdXNoKEopfSxyZWFkRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dmFyIEo9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoVS5DRU5UUkFMX0RJUkVDVE9SWV9F''@;'; put 'put ''TkQpO2lmKC0xPT09Sil0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KEopLHRoaXMuY2hlY2tTaWduYXR1cmUoVS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVh''@;'; put 'put ''ZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNrTnVtYmVyPT09Sy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09Sy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PUsuTUFYX1ZBTFVFXzE2QklUU3x8''@;'; put 'put ''dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PUsuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PUsuTUFYX1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09Sy5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLC0xPT09KEo9dGhpcy5yZWFk''@;'; put 'put ''ZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoVS5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IiKTt0aGlzLnJlYWRlci5zZXRJ''@;'; put 'put ''bmRleChKKSx0aGlzLmNoZWNrU2lnbmF0dXJlKFUuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKSx0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIp''@;'; put 'put ''LHRoaXMuY2hlY2tTaWduYXR1cmUoVS5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwoKX19LHByZXBhcmVSZWFkZXI6ZnVuY3Rpb24oSil7dmFyIG5lPUsuZ2V0VHlwZU9mKEopO3RoaXMucmVhZGVyPSJzdHJpbmciIT09bmV8fFku''@;'; put 'put ''dWludDhhcnJheT8ibm9kZWJ1ZmZlciI9PT1uZT9uZXcgTihKKTpuZXcgTChLLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixKKSk6bmV3IHooSix0aGlzLmxvYWRPcHRpb25zLm9wdGltaXplZEJpbmFyeVN0cmluZyl9LGxvYWQ6ZnVuY3Rpb24oSil7dGhpcy5wcmVwYXJlUmVhZGVyKEopLHRo''@;'; put 'put ''aXMucmVhZEVuZE9mQ2VudHJhbCgpLHRoaXMucmVhZENlbnRyYWxEaXIoKSx0aGlzLnJlYWRMb2NhbEZpbGVzKCl9fSxGLmV4cG9ydHM9ZWV9LHsiLi9ub2RlQnVmZmVyUmVhZGVyIjoxMiwiLi9vYmplY3QiOjEzLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi9zdXBw''@;'; put 'put ''b3J0IjoxNywiLi91aW50OEFycmF5UmVhZGVyIjoxOCwiLi91dGlscyI6MjEsIi4vemlwRW50cnkiOjIzfV0sMjM6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdHJpbmdSZWFkZXIiKSxOPVAoIi4vdXRpbHMiKSxMPVAoIi4vY29tcHJlc3NlZE9iamVjdCIpLEs9''@;'; put 'put ''UCgiLi9vYmplY3QiKTtmdW5jdGlvbiBVKFcsWSl7dGhpcy5vcHRpb25zPVcsdGhpcy5sb2FkT3B0aW9ucz1ZfVUucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy5iaXRGbGFnKX0sdXNlVVRGODpmdW5jdGlvbigpe3JldHVybiEoMjA0OCZ+dGhpcy5i''@;'; put 'put ''aXRGbGFnKX0scHJlcGFyZUNvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKFcsWSxxKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZWU9Vy5pbmRleDtXLnNldEluZGV4KFkpO3ZhciBKPVcucmVhZERhdGEocSk7cmV0dXJuIFcuc2V0SW5kZXgoZWUpLEp9fSxwcmVwYXJlQ29udGVudDpmdW5jdGlv''@;'; put 'put ''bihXLFkscSxlZSxKKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbmU9Ti50cmFuc2Zvcm1UbyhlZS51bmNvbXByZXNzSW5wdXRUeXBlLHRoaXMuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKSksaWU9ZWUudW5jb21wcmVzcyhuZSk7aWYoaWUubGVuZ3RoIT09Sil0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6''@;'; put 'put ''IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2giKTtyZXR1cm4gaWV9fSxyZWFkTG9jYWxQYXJ0OmZ1bmN0aW9uKFcpe3ZhciBZLHE7aWYoVy5za2lwKDIyKSx0aGlzLmZpbGVOYW1lTGVuZ3RoPVcucmVhZEludCgyKSxxPVcucmVhZEludCgyKSx0aGlzLmZpbGVOYW1lPVcucmVhZFN0''@;'; put 'put ''cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSxXLnNraXAocSksLTE9PXRoaXMuY29tcHJlc3NlZFNpemV8fC0xPT10aGlzLnVuY29tcHJlc3NlZFNpemUpdGhyb3cgbmV3IEVycm9yKCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9ucyBmcm9tIHRo''@;'; put 'put ''ZSBjZW50cmFsIGRpcmVjdG9yeSAoY29tcHJlc3NlZFNpemUgPT0gLTEgfHwgdW5jb21wcmVzc2VkU2l6ZSA9PSAtMSkiKTtpZihudWxsPT09KFk9Ti5maW5kQ29tcHJlc3Npb24odGhpcy5jb21wcmVzc2lvbk1ldGhvZCkpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNvbXBy''@;'; put 'put ''ZXNzaW9uICIrTi5wcmV0dHkodGhpcy5jb21wcmVzc2lvbk1ldGhvZCkrIiB1bmtub3duIChpbm5lciBmaWxlIDogIit0aGlzLmZpbGVOYW1lKyIpIik7aWYodGhpcy5kZWNvbXByZXNzZWQ9bmV3IEwsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3NlZFNpemU9dGhpcy5jb21wcmVzc2VkU2l6''@;'; put 'put ''ZSx0aGlzLmRlY29tcHJlc3NlZC51bmNvbXByZXNzZWRTaXplPXRoaXMudW5jb21wcmVzc2VkU2l6ZSx0aGlzLmRlY29tcHJlc3NlZC5jcmMzMj10aGlzLmNyYzMyLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzaW9uTWV0aG9kPXRoaXMuY29tcHJlc3Npb25NZXRob2QsdGhpcy5kZWNvbXBy''@;'; put 'put ''ZXNzZWQuZ2V0Q29tcHJlc3NlZENvbnRlbnQ9dGhpcy5wcmVwYXJlQ29tcHJlc3NlZENvbnRlbnQoVyxXLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsWSksdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudD10aGlzLnByZXBhcmVDb250ZW50KFcsVy5pbmRleCx0aGlzLmNvbXByZXNzZWRT''@;'; put 'put ''aXplLFksdGhpcy51bmNvbXByZXNzZWRTaXplKSx0aGlzLmxvYWRPcHRpb25zLmNoZWNrQ1JDMzImJih0aGlzLmRlY29tcHJlc3NlZD1OLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQoKSksSy5jcmMzMih0aGlzLmRlY29tcHJlc3NlZCkhPT10aGlz''@;'; put 'put ''LmNyYzMyKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBDUkMzMiBtaXNtYXRjaCIpfSxyZWFkQ2VudHJhbFBhcnQ6ZnVuY3Rpb24oVyl7aWYodGhpcy52ZXJzaW9uTWFkZUJ5PVcucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9Vy5yZWFkSW50KDIpLHRoaXMuYml0''@;'; put 'put ''RmxhZz1XLnJlYWRJbnQoMiksdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1XLnJlYWRTdHJpbmcoMiksdGhpcy5kYXRlPVcucmVhZERhdGUoKSx0aGlzLmNyYzMyPVcucmVhZEludCg0KSx0aGlzLmNvbXByZXNzZWRTaXplPVcucmVhZEludCg0KSx0aGlzLnVuY29tcHJlc3NlZFNpemU9Vy5yZWFk''@;'; put 'put ''SW50KDQpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Vy5yZWFkSW50KDIpLHRoaXMuZXh0cmFGaWVsZHNMZW5ndGg9Vy5yZWFkSW50KDIpLHRoaXMuZmlsZUNvbW1lbnRMZW5ndGg9Vy5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlclN0YXJ0PVcucmVhZEludCgyKSx0aGlzLmludGVybmFsRmlsZUF0''@;'; put 'put ''dHJpYnV0ZXM9Vy5yZWFkSW50KDIpLHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz1XLnJlYWRJbnQoNCksdGhpcy5sb2NhbEhlYWRlck9mZnNldD1XLnJlYWRJbnQoNCksdGhpcy5pc0VuY3J5cHRlZCgpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGVkIHppcCBhcmUgbm90IHN1cHBvcnRl''@;'; put 'put ''ZCIpO3RoaXMuZmlsZU5hbWU9Vy5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLHRoaXMucmVhZEV4dHJhRmllbGRzKFcpLHRoaXMucGFyc2VaSVA2NEV4dHJhRmllbGQoVyksdGhpcy5maWxlQ29tbWVudD1XLnJlYWRTdHJpbmcodGhpcy5maWxlQ29tbWVudExlbmd0aCksdGhpcy5k''@;'; put 'put ''aXI9ISEoMTYmdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzKX0scGFyc2VaSVA2NEV4dHJhRmllbGQ6ZnVuY3Rpb24oVyl7aWYodGhpcy5leHRyYUZpZWxkc1sxXSl7dmFyIFk9bmV3IHoodGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09Ti5NQVhf''@;'; put 'put ''VkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRTaXplPVkucmVhZEludCg4KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9WS5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09Ti5NQVhfVkFMVUVf''@;'; put 'put ''MzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD1ZLnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0YXJ0PT09Ti5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9WS5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihXKXt2YXIgcSxlZSxK''@;'; put 'put ''LFk9Vy5pbmRleDtmb3IodGhpcy5leHRyYUZpZWxkcz10aGlzLmV4dHJhRmllbGRzfHx7fTtXLmluZGV4PFkrdGhpcy5leHRyYUZpZWxkc0xlbmd0aDspcT1XLnJlYWRJbnQoMiksZWU9Vy5yZWFkSW50KDIpLEo9Vy5yZWFkU3RyaW5nKGVlKSx0aGlzLmV4dHJhRmllbGRzW3FdPXtpZDpxLGxl''@;'; put 'put ''bmd0aDplZSx2YWx1ZTpKfX0saGFuZGxlVVRGODpmdW5jdGlvbigpe2lmKHRoaXMudXNlVVRGOCgpKXRoaXMuZmlsZU5hbWU9Sy51dGY4ZGVjb2RlKHRoaXMuZmlsZU5hbWUpLHRoaXMuZmlsZUNvbW1lbnQ9Sy51dGY4ZGVjb2RlKHRoaXMuZmlsZUNvbW1lbnQpO2Vsc2V7dmFyIFc9dGhpcy5m''@;'; put 'put ''aW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoKCk7bnVsbCE9PVcmJih0aGlzLmZpbGVOYW1lPVcpO3ZhciBZPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpO251bGwhPT1ZJiYodGhpcy5maWxlQ29tbWVudD1ZKX19LGZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGg6ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgVz10aGlzLmV4dHJhRmllbGRzWzI4Nzg5XTtpZihXKXt2YXIgWT1uZXcgeihXLnZhbHVlKTtyZXR1cm4gMSE9PVkucmVhZEludCgxKXx8Sy5jcmMzMih0aGlzLmZpbGVOYW1lKSE9PVkucmVhZEludCg0KT9udWxsOksudXRmOGRlY29kZShZLnJlYWRTdHJpbmcoVy5sZW5ndGgtNSkp''@;'; put 'put ''fXJldHVybiBudWxsfSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50OmZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5leHRyYUZpZWxkc1syNTQ2MV07aWYoVyl7dmFyIFk9bmV3IHooVy52YWx1ZSk7cmV0dXJuIDEhPT1ZLnJlYWRJbnQoMSl8fEsuY3JjMzIodGhpcy5maWxlQ29tbWVudCkhPT1Z''@;'; put 'put ''LnJlYWRJbnQoNCk/bnVsbDpLLnV0ZjhkZWNvZGUoWS5yZWFkU3RyaW5nKFcubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH19LEYuZXhwb3J0cz1VfSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9vYmplY3QiOjEzLCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vdXRpbHMiOjIxfV0sMjQ6W2Z1bmN0''@;'; put 'put ''aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIFU9e307KDAsUCgiLi9saWIvdXRpbHMvY29tbW9uIikuYXNzaWduKShVLFAoIi4vbGliL2RlZmxhdGUiKSxQKCIuL2xpYi9pbmZsYXRlIiksUCgiLi9saWIvemxpYi9jb25zdGFudHMiKSksRi5leHBvcnRzPVV9LHsiLi9saWIvZGVmbGF0ZSI6''@;'; put 'put ''MjUsIi4vbGliL2luZmxhdGUiOjI2LCIuL2xpYi91dGlscy9jb21tb24iOjI3LCIuL2xpYi96bGliL2NvbnN0YW50cyI6MzB9XSwyNTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3psaWIvZGVmbGF0ZS5qcyIpLE49UCgiLi91dGlscy9jb21tb24iKSxMPVAoIi4v''@;'; put 'put ''dXRpbHMvc3RyaW5ncyIpLEs9UCgiLi96bGliL21lc3NhZ2VzIiksVT1QKCIuL3psaWIvenN0cmVhbSIpLGxlPWZ1bmN0aW9uKFNlKXt0aGlzLm9wdGlvbnM9Ti5hc3NpZ24oe2xldmVsOi0xLG1ldGhvZDo4LGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRl''@;'; put 'put ''Z3k6MCx0bzoiIn0sU2V8fHt9KTt2YXIgamU9dGhpcy5vcHRpb25zO2plLnJhdyYmamUud2luZG93Qml0cz4wP2plLndpbmRvd0JpdHM9LWplLndpbmRvd0JpdHM6amUuZ3ppcCYmamUud2luZG93Qml0cz4wJiZqZS53aW5kb3dCaXRzPDE2JiYoamUud2luZG93Qml0cys9MTYpLHRoaXMuZXJy''@;'; put 'put ''PTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFUsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBWPXouZGVmbGF0ZUluaXQyKHRoaXMuc3RybSxqZS5sZXZlbCxqZS5tZXRob2QsamUud2luZG93Qml0cyxqZS5tZW1MZXZlbCxqZS5zdHJh''@;'; put 'put ''dGVneSk7aWYoMCE9PVYpdGhyb3cgbmV3IEVycm9yKEtbVl0pO2plLmhlYWRlciYmei5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSxqZS5oZWFkZXIpfTtmdW5jdGlvbiBtZShTZSxqZSl7dmFyIFY9bmV3IGxlKGplKTtpZihWLnB1c2goU2UsITApLFYuZXJyKXRocm93IFYubXNnO3JldHVy''@;'; put 'put ''biBWLnJlc3VsdH1sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihTZSxqZSl7dmFyIGIseCxWPXRoaXMuc3RybSxwPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTt4PWplPT09fn5qZT9qZTohMD09PWplPzQ6MCxWLmlucHV0PSJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''U2U/TC5zdHJpbmcyYnVmKFNlKTpTZSxWLm5leHRfaW49MCxWLmF2YWlsX2luPVYuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1WLmF2YWlsX291dCYmKFYub3V0cHV0PW5ldyBOLkJ1ZjgocCksVi5uZXh0X291dD0wLFYuYXZhaWxfb3V0PXApLDEhPT0oYj16LmRlZmxhdGUoVix4KSkmJjAhPT1i''@;'; put 'put ''KXJldHVybiB0aGlzLm9uRW5kKGIpLHRoaXMuZW5kZWQ9ITAsITE7KDA9PT1WLmF2YWlsX291dHx8MD09PVYuYXZhaWxfaW4mJjQ9PT14KSYmdGhpcy5vbkRhdGEoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/TC5idWYyYmluc3RyaW5nKE4uc2hyaW5rQnVmKFYub3V0cHV0LFYubmV4dF9v''@;'; put 'put ''dXQpKTpOLnNocmlua0J1ZihWLm91dHB1dCxWLm5leHRfb3V0KSl9d2hpbGUoKFYuYXZhaWxfaW4+MHx8MD09PVYuYXZhaWxfb3V0KSYmMSE9PWIpO3JldHVybiA0IT09eHx8KGI9ei5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChiKSx0aGlzLmVuZGVkPSEwLDA9PT1iKX0sbGUu''@;'; put 'put ''cHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihTZSl7dGhpcy5jaHVua3MucHVzaChTZSl9LGxlLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihTZSl7MD09PVNlJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6Ti5mbGF0dGVuQ2h1''@;'; put 'put ''bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9U2UsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sTy5EZWZsYXRlPWxlLE8uZGVmbGF0ZT1tZSxPLmRlZmxhdGVSYXc9ZnVuY3Rpb24gX2UoU2UsamUpe3JldHVybihqZT1qZXx8e30pLnJhdz0hMCxtZShTZSxqZSl9LE8u''@;'; put 'put ''Z3ppcD1mdW5jdGlvbiBUZShTZSxqZSl7cmV0dXJuKGplPWplfHx7fSkuZ3ppcD0hMCxtZShTZSxqZSl9fSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2RlZmxhdGUuanMiOjMyLCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6''@;'; put 'put ''Mzl9XSwyNjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3psaWIvaW5mbGF0ZS5qcyIpLE49UCgiLi91dGlscy9jb21tb24iKSxMPVAoIi4vdXRpbHMvc3RyaW5ncyIpLEs9UCgiLi96bGliL2NvbnN0YW50cyIpLFU9UCgiLi96bGliL21lc3NhZ2VzIiksVz1QKCIu''@;'; put 'put ''L3psaWIvenN0cmVhbSIpLFk9UCgiLi96bGliL2d6aGVhZGVyIikscT1mdW5jdGlvbihuZSl7dGhpcy5vcHRpb25zPU4uYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSxuZXx8e30pO3ZhciBpZT10aGlzLm9wdGlvbnM7aWUucmF3JiZpZS53aW5kb3dCaXRzPj0w''@;'; put 'put ''JiZpZS53aW5kb3dCaXRzPDE2JiYoaWUud2luZG93Qml0cz0taWUud2luZG93Qml0cywwPT09aWUud2luZG93Qml0cyYmKGllLndpbmRvd0JpdHM9LTE1KSksaWUud2luZG93Qml0cz49MCYmaWUud2luZG93Qml0czwxNiYmIShuZSYmbmUud2luZG93Qml0cykmJihpZS53aW5kb3dCaXRzKz0z''@;'; put 'put ''MiksaWUud2luZG93Qml0cz4xNSYmaWUud2luZG93Qml0czw0OCYmKDE1JmllLndpbmRvd0JpdHN8fChpZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFcsdGhpcy5zdHJtLmF2YWlsX291''@;'; put 'put ''dD0wO3ZhciBsZT16LmluZmxhdGVJbml0Mih0aGlzLnN0cm0saWUud2luZG93Qml0cyk7aWYobGUhPT1LLlpfT0spdGhyb3cgbmV3IEVycm9yKFVbbGVdKTt0aGlzLmhlYWRlcj1uZXcgWSx6LmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX07ZnVuY3Rpb24gZWUobmUs''@;'; put 'put ''aWUpe3ZhciBsZT1uZXcgcShpZSk7aWYobGUucHVzaChuZSwhMCksbGUuZXJyKXRocm93IGxlLm1zZztyZXR1cm4gbGUucmVzdWx0fXEucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24obmUsaWUpe3ZhciBfZSxUZSxTZSxqZSxWLGxlPXRoaXMuc3RybSxtZT10aGlzLm9wdGlvbnMuY2h1bmtTaXpl''@;'; put 'put ''O2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7VGU9aWU9PT1+fmllP2llOiEwPT09aWU/Sy5aX0ZJTklTSDpLLlpfTk9fRkxVU0gsbGUuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiBuZT9MLmJpbnN0cmluZzJidWYobmUpOm5lLGxlLm5leHRfaW49MCxsZS5hdmFpbF9pbj1sZS5pbnB1dC5sZW5ndGg7''@;'; put 'put ''ZG97aWYoMD09PWxlLmF2YWlsX291dCYmKGxlLm91dHB1dD1uZXcgTi5CdWY4KG1lKSxsZS5uZXh0X291dD0wLGxlLmF2YWlsX291dD1tZSksKF9lPXouaW5mbGF0ZShsZSxLLlpfTk9fRkxVU0gpKSE9PUsuWl9TVFJFQU1fRU5EJiZfZSE9PUsuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChfZSks''@;'; put 'put ''dGhpcy5lbmRlZD0hMCwhMTtsZS5uZXh0X291dCYmKDA9PT1sZS5hdmFpbF9vdXR8fF9lPT09Sy5aX1NUUkVBTV9FTkR8fDA9PT1sZS5hdmFpbF9pbiYmVGU9PT1LLlpfRklOSVNIKSYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhTZT1MLnV0Zjhib3JkZXIobGUub3V0cHV0LGxlLm5l''@;'; put 'put ''eHRfb3V0KSxqZT1sZS5uZXh0X291dC1TZSxWPUwuYnVmMnN0cmluZyhsZS5vdXRwdXQsU2UpLGxlLm5leHRfb3V0PWplLGxlLmF2YWlsX291dD1tZS1qZSxqZSYmTi5hcnJheVNldChsZS5vdXRwdXQsbGUub3V0cHV0LFNlLGplLDApLHRoaXMub25EYXRhKFYpKTp0aGlzLm9uRGF0YShOLnNo''@;'; put 'put ''cmlua0J1ZihsZS5vdXRwdXQsbGUubmV4dF9vdXQpKSl9d2hpbGUobGUuYXZhaWxfaW4+MCYmX2UhPT1LLlpfU1RSRUFNX0VORCk7cmV0dXJuIF9lPT09Sy5aX1NUUkVBTV9FTkQmJihUZT1LLlpfRklOSVNIKSxUZSE9PUsuWl9GSU5JU0h8fChfZT16LmluZmxhdGVFbmQodGhpcy5zdHJtKSx0''@;'; put 'put ''aGlzLm9uRW5kKF9lKSx0aGlzLmVuZGVkPSEwLF9lPT09Sy5aX09LKX0scS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKG5lKXt0aGlzLmNodW5rcy5wdXNoKG5lKX0scS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24obmUpe25lPT09Sy5aX09LJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10''@;'; put 'put ''aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6Ti5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9bmUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sTy5JbmZsYXRlPXEsTy5pbmZsYXRlPWVlLE8uaW5mbGF0ZVJhdz1mdW5jdGlvbiBK''@;'; put 'put ''KG5lLGllKXtyZXR1cm4oaWU9aWV8fHt9KS5yYXc9ITAsZWUobmUsaWUpfSxPLnVuZ3ppcD1lZX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9jb25zdGFudHMiOjMwLCIuL3psaWIvZ3poZWFkZXIiOjMzLCIuL3psaWIvaW5mbGF0ZS5qcyI6MzUs''@;'; put 'put ''Ii4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1dLDI3OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdHlwZW9mIFVpbnQxNkFycmF5PCJ1IiYmdHlwZW9mIEludDMyQXJyYXk8InUiO08uYXNzaWduPWZ1bmN0''@;'; put 'put ''aW9uKEspe2Zvcih2YXIgVT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7VS5sZW5ndGg7KXt2YXIgVz1VLnNoaWZ0KCk7aWYoVyl7aWYoIm9iamVjdCIhPXR5cGVvZiBXKXRocm93IG5ldyBUeXBlRXJyb3IoVysibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBZ''@;'; put 'put ''IGluIFcpVy5oYXNPd25Qcm9wZXJ0eShZKSYmKEtbWV09V1tZXSl9fXJldHVybiBLfSxPLnNocmlua0J1Zj1mdW5jdGlvbihLLFUpe3JldHVybiBLLmxlbmd0aD09PVU/SzpLLnN1YmFycmF5P0suc3ViYXJyYXkoMCxVKTooSy5sZW5ndGg9VSxLKX07dmFyIE49e2FycmF5U2V0OmZ1bmN0aW9u''@;'; put 'put ''KEssVSxXLFkscSl7aWYoVS5zdWJhcnJheSYmSy5zdWJhcnJheSlLLnNldChVLnN1YmFycmF5KFcsVytZKSxxKTtlbHNlIGZvcih2YXIgZWU9MDtlZTxZO2VlKyspS1txK2VlXT1VW1crZWVdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKEspe3ZhciBVLFcsWSxxLGVlLEo7Zm9yKFk9MCxVPTAs''@;'; put 'put ''Vz1LLmxlbmd0aDtVPFc7VSsrKVkrPUtbVV0ubGVuZ3RoO2ZvcihKPW5ldyBVaW50OEFycmF5KFkpLHE9MCxVPTAsVz1LLmxlbmd0aDtVPFc7VSsrKUouc2V0KGVlPUtbVV0scSkscSs9ZWUubGVuZ3RoO3JldHVybiBKfX0sTD17YXJyYXlTZXQ6ZnVuY3Rpb24oSyxVLFcsWSxxKXtmb3IodmFy''@;'; put 'put ''IGVlPTA7ZWU8WTtlZSsrKUtbcStlZV09VVtXK2VlXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihLKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sSyl9fTtPLnNldFR5cGVkPWZ1bmN0aW9uKEspe0s/KE8uQnVmOD1VaW50OEFycmF5LE8uQnVmMTY9VWludDE2QXJyYXksTy5CdWYzMj1JbnQz''@;'; put 'put ''MkFycmF5LE8uYXNzaWduKE8sTikpOihPLkJ1Zjg9QXJyYXksTy5CdWYxNj1BcnJheSxPLkJ1ZjMyPUFycmF5LE8uYXNzaWduKE8sTCkpfSxPLnNldFR5cGVkKHopfSx7fV0sMjg6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9jb21tb24iKSxOPSEwLEw9ITA7dHJ5''@;'; put 'put ''e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoe049ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7TD0hMX1mb3IodmFyIEs9bmV3IHouQnVmOCgyNTYpLFU9MDtVPDI1NjtVKyspS1tVXT1VPj0yNTI/''@;'; put 'put ''NjpVPj0yNDg/NTpVPj0yNDA/NDpVPj0yMjQ/MzpVPj0xOTI/MjoxO2Z1bmN0aW9uIFcoWSxxKXtpZihxPDY1NTM3JiYoWS5zdWJhcnJheSYmTHx8IVkuc3ViYXJyYXkmJk4pKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsei5zaHJpbmtCdWYoWSxxKSk7Zm9yKHZhciBl''@;'; put 'put ''ZT0iIixKPTA7SjxxO0orKyllZSs9U3RyaW5nLmZyb21DaGFyQ29kZShZW0pdKTtyZXR1cm4gZWV9S1syNTRdPUtbMjU0XT0xLE8uc3RyaW5nMmJ1Zj1mdW5jdGlvbihZKXt2YXIgcSxlZSxKLG5lLGllLGxlPVkubGVuZ3RoLG1lPTA7Zm9yKG5lPTA7bmU8bGU7bmUrKyk1NTI5Nj09KDY0NTEy''@;'; put 'put ''JihlZT1ZLmNoYXJDb2RlQXQobmUpKSkmJm5lKzE8bGUmJjU2MzIwPT0oNjQ1MTImKEo9WS5jaGFyQ29kZUF0KG5lKzEpKSkmJihlZT02NTUzNisoZWUtNTUyOTY8PDEwKSsoSi01NjMyMCksbmUrKyksbWUrPWVlPDEyOD8xOmVlPDIwNDg/MjplZTw2NTUzNj8zOjQ7Zm9yKHE9bmV3IHouQnVm''@;'; put 'put ''OChtZSksaWU9MCxuZT0wO2llPG1lO25lKyspNTUyOTY9PSg2NDUxMiYoZWU9WS5jaGFyQ29kZUF0KG5lKSkpJiZuZSsxPGxlJiY1NjMyMD09KDY0NTEyJihKPVkuY2hhckNvZGVBdChuZSsxKSkpJiYoZWU9NjU1MzYrKGVlLTU1Mjk2PDwxMCkrKEotNTYzMjApLG5lKyspLGVlPDEyOD9xW2ll''@;'; put 'put ''KytdPWVlOmVlPDIwNDg/KHFbaWUrK109MTkyfGVlPj4+NixxW2llKytdPTEyOHw2MyZlZSk6ZWU8NjU1MzY/KHFbaWUrK109MjI0fGVlPj4+MTIscVtpZSsrXT0xMjh8ZWU+Pj42JjYzLHFbaWUrK109MTI4fDYzJmVlKToocVtpZSsrXT0yNDB8ZWU+Pj4xOCxxW2llKytdPTEyOHxlZT4+PjEy''@;'; put 'put ''JjYzLHFbaWUrK109MTI4fGVlPj4+NiY2MyxxW2llKytdPTEyOHw2MyZlZSk7cmV0dXJuIHF9LE8uYnVmMmJpbnN0cmluZz1mdW5jdGlvbihZKXtyZXR1cm4gVyhZLFkubGVuZ3RoKX0sTy5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKFkpe2Zvcih2YXIgcT1uZXcgei5CdWY4KFkubGVuZ3RoKSxl''@;'; put 'put ''ZT0wLEo9cS5sZW5ndGg7ZWU8SjtlZSsrKXFbZWVdPVkuY2hhckNvZGVBdChlZSk7cmV0dXJuIHF9LE8uYnVmMnN0cmluZz1mdW5jdGlvbihZLHEpe3ZhciBlZSxKLG5lLGllLGxlPXF8fFkubGVuZ3RoLG1lPW5ldyBBcnJheSgyKmxlKTtmb3IoSj0wLGVlPTA7ZWU8bGU7KWlmKChuZT1ZW2Vl''@;'; put 'put ''KytdKTwxMjgpbWVbSisrXT1uZTtlbHNlIGlmKChpZT1LW25lXSk+NCltZVtKKytdPTY1NTMzLGVlKz1pZS0xO2Vsc2V7Zm9yKG5lJj0yPT09aWU/MzE6Mz09PWllPzE1Ojc7aWU+MSYmZWU8bGU7KW5lPW5lPDw2fDYzJllbZWUrK10saWUtLTtpZT4xP21lW0orK109NjU1MzM6bmU8NjU1MzY/''@;'; put 'put ''bWVbSisrXT1uZToobWVbSisrXT01NTI5NnwobmUtPTY1NTM2KT4+MTAmMTAyMyxtZVtKKytdPTU2MzIwfDEwMjMmbmUpfXJldHVybiBXKG1lLEopfSxPLnV0Zjhib3JkZXI9ZnVuY3Rpb24oWSxxKXt2YXIgZWU7Zm9yKChxPXF8fFkubGVuZ3RoKT5ZLmxlbmd0aCYmKHE9WS5sZW5ndGgpLGVl''@;'; put 'put ''PXEtMTtlZT49MCYmMTI4PT0oMTkyJllbZWVdKTspZWUtLTtyZXR1cm4gZWU8MHx8MD09PWVlP3E6ZWUrS1tZW2VlXV0+cT9lZTpxfX0seyIuL2NvbW1vbiI6Mjd9XSwyOTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ZnVuY3Rpb24geihOLEwsSyxVKXtmb3IodmFy''@;'; put 'put ''IFc9NjU1MzUmTixZPU4+Pj4xNiY2NTUzNSxxPTA7MCE9PUs7KXtLLT1xPUs+MmUzPzJlMzpLO2Rve1k9WSsoVz1XK0xbVSsrXXwwKXwwfXdoaWxlKC0tcSk7VyU9NjU1MjEsWSU9NjU1MjF9cmV0dXJuIFd8WTw8MTZ9fSx7fV0sMzA6W2Z1bmN0aW9uKFAsRixPKXtGLmV4cG9ydHM9e1pfTk9f''@;'; put 'put ''RkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6''@;'; put 'put ''LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6''@;'; put 'put ''MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSwzMTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgTj1mdW5jdGlvbiB6KCl7Zm9yKHZhciBLLFU9W10sVz0wO1c8MjU2O1crKyl7Sz1XO2Zvcih2YXIgWT0wO1k8ODtZKyspSz0xJks/''@;'; put 'put ''Mzk4ODI5MjM4NF5LPj4+MTpLPj4+MTtVW1ddPUt9cmV0dXJuIFV9KCk7Ri5leHBvcnRzPWZ1bmN0aW9uIEwoSyxVLFcsWSl7dmFyIHE9TixlZT1ZK1c7Sz1+Sztmb3IodmFyIEo9WTtKPGVlO0orKylLPUs+Pj44XnFbMjU1JihLXlVbSl0pXTtyZXR1cm5+S319LHt9XSwzMjpbZnVuY3Rpb24o''@;'; put 'put ''UCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKSxOPVAoIi4vdHJlZXMiKSxMPVAoIi4vYWRsZXIzMiIpLEs9UCgiLi9jcmMzMiIpLFU9UCgiLi9tZXNzYWdlcyIpLFc9MCxuZT0wLGxlPS0yLHg9MixDPTgsQT0yODYsYWU9MzAsdGU9MTksc2U9MipBKzEsd2U9''@;'; put 'put ''MTUsVWU9MyxKZT0yNTgsb3Q9SmUrVWUrMSx2ZT00MixPZT0xMTM7ZnVuY3Rpb24gUWUoV2UsVHQpe3JldHVybiBXZS5tc2c9VVtUdF0sVHR9ZnVuY3Rpb24gdW4oV2Upe3JldHVybihXZTw8MSktKFdlPjQ/OTowKX1mdW5jdGlvbiB5dChXZSl7Zm9yKHZhciBUdD1XZS5sZW5ndGg7LS1UdD49''@;'; put 'put ''MDspV2VbVHRdPTB9ZnVuY3Rpb24gTXQoV2Upe3ZhciBUdD1XZS5zdGF0ZSxucj1UdC5wZW5kaW5nO25yPldlLmF2YWlsX291dCYmKG5yPVdlLmF2YWlsX291dCksMCE9PW5yJiYoei5hcnJheVNldChXZS5vdXRwdXQsVHQucGVuZGluZ19idWYsVHQucGVuZGluZ19vdXQsbnIsV2UubmV4dF9v''@;'; put 'put ''dXQpLFdlLm5leHRfb3V0Kz1ucixUdC5wZW5kaW5nX291dCs9bnIsV2UudG90YWxfb3V0Kz1ucixXZS5hdmFpbF9vdXQtPW5yLFR0LnBlbmRpbmctPW5yLDA9PT1UdC5wZW5kaW5nJiYoVHQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIER0KFdlLFR0KXtOLl90cl9mbHVzaF9ibG9jayhXZSxX''@;'; put 'put ''ZS5ibG9ja19zdGFydD49MD9XZS5ibG9ja19zdGFydDotMSxXZS5zdHJzdGFydC1XZS5ibG9ja19zdGFydCxUdCksV2UuYmxvY2tfc3RhcnQ9V2Uuc3Ryc3RhcnQsTXQoV2Uuc3RybSl9ZnVuY3Rpb24gaXQoV2UsVHQpe1dlLnBlbmRpbmdfYnVmW1dlLnBlbmRpbmcrK109VHR9ZnVuY3Rpb24g''@;'; put 'put ''JGUoV2UsVHQpe1dlLnBlbmRpbmdfYnVmW1dlLnBlbmRpbmcrK109VHQ+Pj44JjI1NSxXZS5wZW5kaW5nX2J1ZltXZS5wZW5kaW5nKytdPTI1NSZUdH1mdW5jdGlvbiB0dChXZSxUdCxucixodCl7dmFyIHh0PVdlLmF2YWlsX2luO3JldHVybiB4dD5odCYmKHh0PWh0KSwwPT09eHQ/MDooV2Uu''@;'; put 'put ''YXZhaWxfaW4tPXh0LHouYXJyYXlTZXQoVHQsV2UuaW5wdXQsV2UubmV4dF9pbix4dCxuciksMT09PVdlLnN0YXRlLndyYXA/V2UuYWRsZXI9TChXZS5hZGxlcixUdCx4dCxucik6Mj09PVdlLnN0YXRlLndyYXAmJihXZS5hZGxlcj1LKFdlLmFkbGVyLFR0LHh0LG5yKSksV2UubmV4dF9pbis9''@;'; put 'put ''eHQsV2UudG90YWxfaW4rPXh0LHh0KX1mdW5jdGlvbiBIZShXZSxUdCl7dmFyIHh0LGpuLG5yPVdlLm1heF9jaGFpbl9sZW5ndGgsaHQ9V2Uuc3Ryc3RhcnQscm49V2UucHJldl9sZW5ndGgsenQ9V2UubmljZV9tYXRjaCxoaT1XZS5zdHJzdGFydD5XZS53X3NpemUtb3Q/V2Uuc3Ryc3RhcnQt''@;'; put 'put ''KFdlLndfc2l6ZS1vdCk6MCxjbj1XZS53aW5kb3csZm49V2Uud19tYXNrLElpPVdlLnByZXYsWHQ9V2Uuc3Ryc3RhcnQrSmUsZW49Y25baHQrcm4tMV0sdWE9Y25baHQrcm5dO1dlLnByZXZfbGVuZ3RoPj1XZS5nb29kX21hdGNoJiYobnI+Pj0yKSx6dD5XZS5sb29rYWhlYWQmJih6dD1XZS5s''@;'; put 'put ''b29rYWhlYWQpO2Rve2lmKGNuWyh4dD1UdCkrcm5dPT09dWEmJmNuW3h0K3JuLTFdPT09ZW4mJmNuW3h0XT09PWNuW2h0XSYmY25bKyt4dF09PT1jbltodCsxXSl7aHQrPTIseHQrKztkb3t9d2hpbGUoY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09''@;'; put 'put ''PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmaHQ8WHQpO2lmKGpuPUplLShYdC1odCksaHQ9WHQtSmUsam4+cm4pe2lmKFdlLm1h''@;'; put 'put ''dGNoX3N0YXJ0PVR0LHJuPWpuLGpuPj16dClicmVhaztlbj1jbltodCtybi0xXSx1YT1jbltodCtybl19fX13aGlsZSgoVHQ9SWlbVHQmZm5dKT5oaSYmMCE9LS1ucik7cmV0dXJuIHJuPD1XZS5sb29rYWhlYWQ/cm46V2UubG9va2FoZWFkfWZ1bmN0aW9uIHV0KFdlKXt2YXIgbnIsaHQseHQs''@;'; put 'put ''am4scm4sVHQ9V2Uud19zaXplO2Rve2lmKGpuPVdlLndpbmRvd19zaXplLVdlLmxvb2thaGVhZC1XZS5zdHJzdGFydCxXZS5zdHJzdGFydD49VHQrKFR0LW90KSl7ei5hcnJheVNldChXZS53aW5kb3csV2Uud2luZG93LFR0LFR0LDApLFdlLm1hdGNoX3N0YXJ0LT1UdCxXZS5zdHJzdGFydC09''@;'; put 'put ''VHQsV2UuYmxvY2tfc3RhcnQtPVR0LG5yPWh0PVdlLmhhc2hfc2l6ZTtkb3t4dD1XZS5oZWFkWy0tbnJdLFdlLmhlYWRbbnJdPXh0Pj1UdD94dC1UdDowfXdoaWxlKC0taHQpO25yPWh0PVR0O2Rve3h0PVdlLnByZXZbLS1ucl0sV2UucHJldltucl09eHQ+PVR0P3h0LVR0OjB9d2hpbGUoLS1o''@;'; put 'put ''dCk7am4rPVR0fWlmKDA9PT1XZS5zdHJtLmF2YWlsX2luKWJyZWFrO2lmKGh0PXR0KFdlLnN0cm0sV2Uud2luZG93LFdlLnN0cnN0YXJ0K1dlLmxvb2thaGVhZCxqbiksV2UubG9va2FoZWFkKz1odCxXZS5sb29rYWhlYWQrV2UuaW5zZXJ0Pj1VZSlmb3IoV2UuaW5zX2g9V2Uud2luZG93W3Ju''@;'; put 'put ''PVdlLnN0cnN0YXJ0LVdlLmluc2VydF0sV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tybisxXSkmV2UuaGFzaF9tYXNrO1dlLmluc2VydCYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbcm4rVWUtMV0pJldlLmhhc2hfbWFz''@;'; put 'put ''ayxXZS5wcmV2W3JuJldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09cm4scm4rKyxXZS5pbnNlcnQtLSwhKFdlLmxvb2thaGVhZCtXZS5pbnNlcnQ8VWUpKTspO313aGlsZShXZS5sb29rYWhlYWQ8b3QmJjAhPT1XZS5zdHJtLmF2YWlsX2luKX1mdW5jdGlv''@;'; put 'put ''biBSdChXZSxUdCl7Zm9yKHZhciBucixodDs7KXtpZihXZS5sb29rYWhlYWQ8b3Qpe2lmKHV0KFdlKSxXZS5sb29rYWhlYWQ8b3QmJlR0PT09VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKG5yPTAsV2UubG9va2FoZWFkPj1VZSYmKFdlLmluc19oPShXZS5pbnNfaDw8''@;'; put 'put ''V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxucj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpLDAhPT1uciYmV2Uuc3Ryc3RhcnQtbnI8PVdl''@;'; put 'put ''Lndfc2l6ZS1vdCYmKFdlLm1hdGNoX2xlbmd0aD1IZShXZSxucikpLFdlLm1hdGNoX2xlbmd0aD49VWUpaWYoaHQ9Ti5fdHJfdGFsbHkoV2UsV2Uuc3Ryc3RhcnQtV2UubWF0Y2hfc3RhcnQsV2UubWF0Y2hfbGVuZ3RoLVVlKSxXZS5sb29rYWhlYWQtPVdlLm1hdGNoX2xlbmd0aCxXZS5tYXRj''@;'; put 'put ''aF9sZW5ndGg8PVdlLm1heF9sYXp5X21hdGNoJiZXZS5sb29rYWhlYWQ+PVVlKXtXZS5tYXRjaF9sZW5ndGgtLTtkb3tXZS5zdHJzdGFydCsrLFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxucj1XZS5w''@;'; put 'put ''cmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnR9d2hpbGUoMCE9LS1XZS5tYXRjaF9sZW5ndGgpO1dlLnN0cnN0YXJ0Kyt9ZWxzZSBXZS5zdHJzdGFydCs9V2UubWF0Y2hfbGVuZ3RoLFdlLm1hdGNoX2xlbmd0''@;'; put 'put ''aD0wLFdlLmluc19oPVdlLndpbmRvd1tXZS5zdHJzdGFydF0sV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCsxXSkmV2UuaGFzaF9tYXNrO2Vsc2UgaHQ9Ti5fdHJfdGFsbHkoV2UsMCxXZS53aW5kb3dbV2Uuc3Ryc3RhcnRdKSxXZS5sb29r''@;'; put 'put ''YWhlYWQtLSxXZS5zdHJzdGFydCsrO2lmKGh0JiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFdlLmluc2VydD1XZS5zdHJzdGFydDxVZS0xP1dlLnN0cnN0YXJ0OlVlLTEsND09PVR0PyhEdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6''@;'; put 'put ''NCk6V2UubGFzdF9saXQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KT8xOjJ9ZnVuY3Rpb24gUHQoV2UsVHQpe2Zvcih2YXIgbnIsaHQseHQ7Oyl7aWYoV2UubG9va2FoZWFkPG90KXtpZih1dChXZSksV2UubG9va2FoZWFkPG90JiZUdD09PVcpcmV0dXJuIDE7aWYoMD09PVdl''@;'; put 'put ''Lmxvb2thaGVhZClicmVha31pZihucj0wLFdlLmxvb2thaGVhZD49VWUmJihXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0K1VlLTFdKSZXZS5oYXNoX21hc2ssbnI9V2UucHJldltXZS5zdHJzdGFydCZXZS53X21hc2tdPVdlLmhlYWRbV2Uu''@;'; put 'put ''aW5zX2hdLFdlLmhlYWRbV2UuaW5zX2hdPVdlLnN0cnN0YXJ0KSxXZS5wcmV2X2xlbmd0aD1XZS5tYXRjaF9sZW5ndGgsV2UucHJldl9tYXRjaD1XZS5tYXRjaF9zdGFydCxXZS5tYXRjaF9sZW5ndGg9VWUtMSwwIT09bnImJldlLnByZXZfbGVuZ3RoPFdlLm1heF9sYXp5X21hdGNoJiZXZS5z''@;'; put 'put ''dHJzdGFydC1ucjw9V2Uud19zaXplLW90JiYoV2UubWF0Y2hfbGVuZ3RoPUhlKFdlLG5yKSxXZS5tYXRjaF9sZW5ndGg8PTUmJigxPT09V2Uuc3RyYXRlZ3l8fFdlLm1hdGNoX2xlbmd0aD09PVVlJiZXZS5zdHJzdGFydC1XZS5tYXRjaF9zdGFydD40MDk2KSYmKFdlLm1hdGNoX2xlbmd0aD1V''@;'; put 'put ''ZS0xKSksV2UucHJldl9sZW5ndGg+PVVlJiZXZS5tYXRjaF9sZW5ndGg8PVdlLnByZXZfbGVuZ3RoKXt4dD1XZS5zdHJzdGFydCtXZS5sb29rYWhlYWQtVWUsaHQ9Ti5fdHJfdGFsbHkoV2UsV2Uuc3Ryc3RhcnQtMS1XZS5wcmV2X21hdGNoLFdlLnByZXZfbGVuZ3RoLVVlKSxXZS5sb29rYWhl''@;'; put 'put ''YWQtPVdlLnByZXZfbGVuZ3RoLTEsV2UucHJldl9sZW5ndGgtPTI7ZG97KytXZS5zdHJzdGFydDw9eHQmJihXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0K1VlLTFdKSZXZS5oYXNoX21hc2ssbnI9V2UucHJldltXZS5zdHJzdGFydCZXZS53''@;'; put 'put ''X21hc2tdPVdlLmhlYWRbV2UuaW5zX2hdLFdlLmhlYWRbV2UuaW5zX2hdPVdlLnN0cnN0YXJ0KX13aGlsZSgwIT0tLVdlLnByZXZfbGVuZ3RoKTtpZihXZS5tYXRjaF9hdmFpbGFibGU9MCxXZS5tYXRjaF9sZW5ndGg9VWUtMSxXZS5zdHJzdGFydCsrLGh0JiYoRHQoV2UsITEpLDA9PT1XZS5z''@;'; put 'put ''dHJtLmF2YWlsX291dCkpcmV0dXJuIDF9ZWxzZSBpZihXZS5tYXRjaF9hdmFpbGFibGUpe2lmKChodD1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydC0xXSkpJiZEdChXZSwhMSksV2Uuc3Ryc3RhcnQrKyxXZS5sb29rYWhlYWQtLSwwPT09V2Uuc3RybS5hdmFpbF9vdXQp''@;'; put 'put ''cmV0dXJuIDF9ZWxzZSBXZS5tYXRjaF9hdmFpbGFibGU9MSxXZS5zdHJzdGFydCsrLFdlLmxvb2thaGVhZC0tfXJldHVybiBXZS5tYXRjaF9hdmFpbGFibGUmJihodD1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydC0xXSksV2UubWF0Y2hfYXZhaWxhYmxlPTApLFdlLmlu''@;'; put 'put ''c2VydD1XZS5zdHJzdGFydDxVZS0xP1dlLnN0cnN0YXJ0OlVlLTEsND09PVR0PyhEdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KT8xOjJ9dmFyIFJpLHNuPWZ1bmN0aW9uKFdlLFR0LG5yLGh0''@;'; put 'put ''LHh0KXt0aGlzLmdvb2RfbGVuZ3RoPVdlLHRoaXMubWF4X2xhenk9VHQsdGhpcy5uaWNlX2xlbmd0aD1ucix0aGlzLm1heF9jaGFpbj1odCx0aGlzLmZ1bmM9eHR9O2Z1bmN0aW9uIGZ0KCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5w''@;'; put 'put ''ZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9Qyx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19t''@;'; put 'put ''YXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tf''@;'; put 'put ''c3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0''@;'; put 'put ''aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgei5CdWYxNigyKnNlKSx0aGlzLmR5bl9kdHJlZT1uZXcgei5CdWYxNigyKigyKmFlKzEpKSx0aGlzLmJs''@;'; put 'put ''X3RyZWU9bmV3IHouQnVmMTYoMiooMip0ZSsxKSkseXQodGhpcy5keW5fbHRyZWUpLHl0KHRoaXMuZHluX2R0cmVlKSx5dCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyB6LkJ1ZjE2KHdl''@;'; put 'put ''KzEpLHRoaXMuaGVhcD1uZXcgei5CdWYxNigyKkErMSkseXQodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IHouQnVmMTYoMipBKzEpLHl0KHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0''@;'; put 'put ''X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIE9yKFdlKXt2YXIgVHQ7cmV0dXJuIFdlJiZXZS5zdGF0ZT8oV2UudG90YWxf''@;'; put 'put ''aW49V2UudG90YWxfb3V0PTAsV2UuZGF0YV90eXBlPXgsKFR0PVdlLnN0YXRlKS5wZW5kaW5nPTAsVHQucGVuZGluZ19vdXQ9MCxUdC53cmFwPDAmJihUdC53cmFwPS1UdC53cmFwKSxUdC5zdGF0dXM9VHQud3JhcD92ZTpPZSxXZS5hZGxlcj0yPT09VHQud3JhcD8wOjEsVHQubGFzdF9mbHVz''@;'; put 'put ''aD1XLE4uX3RyX2luaXQoVHQpLG5lKTpRZShXZSxsZSl9ZnVuY3Rpb24gV3QoV2Upe3ZhciBUdD1PcihXZSk7cmV0dXJuIFR0PT09bmUmJmZ1bmN0aW9uIGhuKFdlKXtXZS53aW5kb3dfc2l6ZT0yKldlLndfc2l6ZSx5dChXZS5oZWFkKSxXZS5tYXhfbGF6eV9tYXRjaD1SaVtXZS5sZXZlbF0u''@;'; put 'put ''bWF4X2xhenksV2UuZ29vZF9tYXRjaD1SaVtXZS5sZXZlbF0uZ29vZF9sZW5ndGgsV2UubmljZV9tYXRjaD1SaVtXZS5sZXZlbF0ubmljZV9sZW5ndGgsV2UubWF4X2NoYWluX2xlbmd0aD1SaVtXZS5sZXZlbF0ubWF4X2NoYWluLFdlLnN0cnN0YXJ0PTAsV2UuYmxvY2tfc3RhcnQ9MCxXZS5s''@;'; put 'put ''b29rYWhlYWQ9MCxXZS5pbnNlcnQ9MCxXZS5tYXRjaF9sZW5ndGg9V2UucHJldl9sZW5ndGg9VWUtMSxXZS5tYXRjaF9hdmFpbGFibGU9MCxXZS5pbnNfaD0wfShXZS5zdGF0ZSksVHR9ZnVuY3Rpb24gUm4oV2UsVHQsbnIsaHQseHQsam4pe2lmKCFXZSlyZXR1cm4gbGU7dmFyIHJuPTE7aWYo''@;'; put 'put ''LTE9PT1UdCYmKFR0PTYpLGh0PDA/KHJuPTAsaHQ9LWh0KTpodD4xNSYmKHJuPTIsaHQtPTE2KSx4dDwxfHx4dD45fHxuciE9PUN8fGh0PDh8fGh0PjE1fHxUdDwwfHxUdD45fHxqbjwwfHxqbj40KXJldHVybiBRZShXZSxsZSk7OD09PWh0JiYoaHQ9OSk7dmFyIHp0PW5ldyBmdDtyZXR1cm4g''@;'; put 'put ''V2Uuc3RhdGU9enQsenQuc3RybT1XZSx6dC53cmFwPXJuLHp0Lmd6aGVhZD1udWxsLHp0LndfYml0cz1odCx6dC53X3NpemU9MTw8enQud19iaXRzLHp0LndfbWFzaz16dC53X3NpemUtMSx6dC5oYXNoX2JpdHM9eHQrNyx6dC5oYXNoX3NpemU9MTw8enQuaGFzaF9iaXRzLHp0Lmhhc2hfbWFz''@;'; put 'put ''az16dC5oYXNoX3NpemUtMSx6dC5oYXNoX3NoaWZ0PX5+KCh6dC5oYXNoX2JpdHMrVWUtMSkvVWUpLHp0LndpbmRvdz1uZXcgei5CdWY4KDIqenQud19zaXplKSx6dC5oZWFkPW5ldyB6LkJ1ZjE2KHp0Lmhhc2hfc2l6ZSksenQucHJldj1uZXcgei5CdWYxNih6dC53X3NpemUpLHp0LmxpdF9i''@;'; put 'put ''dWZzaXplPTE8PHh0KzYsenQucGVuZGluZ19idWZfc2l6ZT00Knp0LmxpdF9idWZzaXplLHp0LnBlbmRpbmdfYnVmPW5ldyB6LkJ1ZjgoenQucGVuZGluZ19idWZfc2l6ZSksenQuZF9idWY9enQubGl0X2J1ZnNpemU+PjEsenQubF9idWY9Myp6dC5saXRfYnVmc2l6ZSx6dC5sZXZlbD1UdCx6''@;'; put 'put ''dC5zdHJhdGVneT1qbix6dC5tZXRob2Q9bnIsV3QoV2UpfVJpPVtuZXcgc24oMCwwLDAsMCxmdW5jdGlvbiBxdChXZSxUdCl7dmFyIG5yPTY1NTM1O2Zvcihucj5XZS5wZW5kaW5nX2J1Zl9zaXplLTUmJihucj1XZS5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKFdlLmxvb2thaGVhZDw9MSl7''@;'; put 'put ''aWYodXQoV2UpLDA9PT1XZS5sb29rYWhlYWQmJlR0PT09VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfVdlLnN0cnN0YXJ0Kz1XZS5sb29rYWhlYWQsV2UubG9va2FoZWFkPTA7dmFyIGh0PVdlLmJsb2NrX3N0YXJ0K25yO2lmKCgwPT09V2Uuc3Ryc3RhcnR8fFdlLnN0cnN0''@;'; put 'put ''YXJ0Pj1odCkmJihXZS5sb29rYWhlYWQ9V2Uuc3Ryc3RhcnQtaHQsV2Uuc3Ryc3RhcnQ9aHQsRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCl8fFdlLnN0cnN0YXJ0LVdlLmJsb2NrX3N0YXJ0Pj1XZS53X3NpemUtb3QmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSly''@;'; put 'put ''ZXR1cm4gMX1yZXR1cm4gV2UuaW5zZXJ0PTAsND09PVR0PyhEdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6KFdlLnN0cnN0YXJ0PldlLmJsb2NrX3N0YXJ0JiZEdChXZSwhMSksMSl9KSxuZXcgc24oNCw0LDgsNCxSdCksbmV3IHNuKDQsNSwxNiw4LFJ0KSxuZXcgc24oNCw2''@;'; put 'put ''LDMyLDMyLFJ0KSxuZXcgc24oNCw0LDE2LDE2LFB0KSxuZXcgc24oOCwxNiwzMiwzMixQdCksbmV3IHNuKDgsMTYsMTI4LDEyOCxQdCksbmV3IHNuKDgsMzIsMTI4LDI1NixQdCksbmV3IHNuKDMyLDEyOCwyNTgsMTAyNCxQdCksbmV3IHNuKDMyLDI1OCwyNTgsNDA5NixQdCldLE8uZGVmbGF0''@;'; put 'put ''ZUluaXQ9ZnVuY3Rpb24gc3QoV2UsVHQpe3JldHVybiBSbihXZSxUdCxDLDE1LDgsMCl9LE8uZGVmbGF0ZUluaXQyPVJuLE8uZGVmbGF0ZVJlc2V0PVd0LE8uZGVmbGF0ZVJlc2V0S2VlcD1PcixPLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24gQXQoV2UsVHQpe3JldHVybiBXZSYmV2Uuc3Rh''@;'; put 'put ''dGUmJjI9PT1XZS5zdGF0ZS53cmFwPyhXZS5zdGF0ZS5nemhlYWQ9VHQsbmUpOmxlfSxPLmRlZmxhdGU9ZnVuY3Rpb24gVXQoV2UsVHQpe3ZhciBucixodCx4dCxqbjtpZighV2V8fCFXZS5zdGF0ZXx8VHQ+NXx8VHQ8MClyZXR1cm4gV2U/UWUoV2UsbGUpOmxlO2lmKGh0PVdlLnN0YXRlLCFX''@;'; put 'put ''ZS5vdXRwdXR8fCFXZS5pbnB1dCYmMCE9PVdlLmF2YWlsX2lufHw2NjY9PT1odC5zdGF0dXMmJjQhPT1UdClyZXR1cm4gUWUoV2UsMD09PVdlLmF2YWlsX291dD8tNTpsZSk7aWYoaHQuc3RybT1XZSxucj1odC5sYXN0X2ZsdXNoLGh0Lmxhc3RfZmx1c2g9VHQsaHQuc3RhdHVzPT09dmUpaWYo''@;'; put 'put ''Mj09PWh0LndyYXApV2UuYWRsZXI9MCxpdChodCwzMSksaXQoaHQsMTM5KSxpdChodCw4KSxodC5nemhlYWQ/KGl0KGh0LChodC5nemhlYWQudGV4dD8xOjApKyhodC5nemhlYWQuaGNyYz8yOjApKyhodC5nemhlYWQuZXh0cmE/NDowKSsoaHQuZ3poZWFkLm5hbWU/ODowKSsoaHQuZ3poZWFk''@;'; put 'put ''LmNvbW1lbnQ/MTY6MCkpLGl0KGh0LDI1NSZodC5nemhlYWQudGltZSksaXQoaHQsaHQuZ3poZWFkLnRpbWU+PjgmMjU1KSxpdChodCxodC5nemhlYWQudGltZT4+MTYmMjU1KSxpdChodCxodC5nemhlYWQudGltZT4+MjQmMjU1KSxpdChodCw5PT09aHQubGV2ZWw/MjpodC5zdHJhdGVneT49''@;'; put 'put ''Mnx8aHQubGV2ZWw8Mj80OjApLGl0KGh0LDI1NSZodC5nemhlYWQub3MpLGh0Lmd6aGVhZC5leHRyYSYmaHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGl0KGh0LDI1NSZodC5nemhlYWQuZXh0cmEubGVuZ3RoKSxpdChodCxodC5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLGh0Lmd6aGVh''@;'; put 'put ''ZC5oY3JjJiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLDApKSxodC5nemluZGV4PTAsaHQuc3RhdHVzPTY5KTooaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsOT09PWh0LmxldmVsPzI6aHQuc3RyYXRlZ3k+''@;'; put 'put ''PTJ8fGh0LmxldmVsPDI/NDowKSxpdChodCwzKSxodC5zdGF0dXM9T2UpO2Vsc2V7dmFyIHJuPUMrKGh0LndfYml0cy04PDw0KTw8ODtybnw9KGh0LnN0cmF0ZWd5Pj0yfHxodC5sZXZlbDwyPzA6aHQubGV2ZWw8Nj8xOjY9PT1odC5sZXZlbD8yOjMpPDw2LDAhPT1odC5zdHJzdGFydCYmKHJu''@;'; put 'put ''fD0zMikscm4rPTMxLXJuJTMxLGh0LnN0YXR1cz1PZSwkZShodCxybiksMCE9PWh0LnN0cnN0YXJ0JiYoJGUoaHQsV2UuYWRsZXI+Pj4xNiksJGUoaHQsNjU1MzUmV2UuYWRsZXIpKSxXZS5hZGxlcj0xfWlmKDY5PT09aHQuc3RhdHVzKWlmKGh0Lmd6aGVhZC5leHRyYSl7Zm9yKHh0PWh0LnBl''@;'; put 'put ''bmRpbmc7aHQuZ3ppbmRleDwoNjU1MzUmaHQuZ3poZWFkLmV4dHJhLmxlbmd0aCkmJihodC5wZW5kaW5nIT09aHQucGVuZGluZ19idWZfc2l6ZXx8KGh0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0''@;'; put 'put ''LHh0KSksTXQoV2UpLHh0PWh0LnBlbmRpbmcsaHQucGVuZGluZyE9PWh0LnBlbmRpbmdfYnVmX3NpemUpKTspaXQoaHQsMjU1Jmh0Lmd6aGVhZC5leHRyYVtodC5nemluZGV4XSksaHQuZ3ppbmRleCsrO2h0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxl''@;'; put 'put ''cixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksaHQuZ3ppbmRleD09PWh0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihodC5nemluZGV4PTAsaHQuc3RhdHVzPTczKX1lbHNlIGh0LnN0YXR1cz03MztpZig3Mz09PWh0LnN0YXR1cylpZihodC5nemhlYWQubmFtZSl7eHQ9aHQucGVu''@;'; put 'put ''ZGluZztkb3tpZihodC5wZW5kaW5nPT09aHQucGVuZGluZ19idWZfc2l6ZSYmKGh0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksTXQoV2UpLHh0PWh0LnBlbmRpbmcsaHQucGVuZGluZz09''@;'; put 'put ''PWh0LnBlbmRpbmdfYnVmX3NpemUpKXtqbj0xO2JyZWFrfWpuPWh0Lmd6aW5kZXg8aHQuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZodC5nemhlYWQubmFtZS5jaGFyQ29kZUF0KGh0Lmd6aW5kZXgrKyk6MCxpdChodCxqbil9d2hpbGUoMCE9PWpuKTtodC5nemhlYWQuaGNyYyYmaHQucGVuZGlu''@;'; put 'put ''Zz54dCYmKFdlLmFkbGVyPUsoV2UuYWRsZXIsaHQucGVuZGluZ19idWYsaHQucGVuZGluZy14dCx4dCkpLDA9PT1qbiYmKGh0Lmd6aW5kZXg9MCxodC5zdGF0dXM9OTEpfWVsc2UgaHQuc3RhdHVzPTkxO2lmKDkxPT09aHQuc3RhdHVzKWlmKGh0Lmd6aGVhZC5jb21tZW50KXt4dD1odC5wZW5k''@;'; put 'put ''aW5nO2Rve2lmKGh0LnBlbmRpbmc9PT1odC5wZW5kaW5nX2J1Zl9zaXplJiYoaHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxNdChXZSkseHQ9aHQucGVuZGluZyxodC5wZW5kaW5nPT09''@;'; put 'put ''aHQucGVuZGluZ19idWZfc2l6ZSkpe2puPTE7YnJlYWt9am49aHQuZ3ppbmRleDxodC5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1Jmh0Lmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoaHQuZ3ppbmRleCsrKTowLGl0KGh0LGpuKX13aGlsZSgwIT09am4pO2h0Lmd6aGVhZC5oY3JjJiZodC5w''@;'; put 'put ''ZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksMD09PWpuJiYoaHQuc3RhdHVzPTEwMyl9ZWxzZSBodC5zdGF0dXM9MTAzO2lmKDEwMz09PWh0LnN0YXR1cyYmKGh0Lmd6aGVhZC5oY3JjPyhodC5wZW5kaW5nKzI+aHQucGVu''@;'; put 'put ''ZGluZ19idWZfc2l6ZSYmTXQoV2UpLGh0LnBlbmRpbmcrMjw9aHQucGVuZGluZ19idWZfc2l6ZSYmKGl0KGh0LDI1NSZXZS5hZGxlciksaXQoaHQsV2UuYWRsZXI+PjgmMjU1KSxXZS5hZGxlcj0wLGh0LnN0YXR1cz1PZSkpOmh0LnN0YXR1cz1PZSksMCE9PWh0LnBlbmRpbmcpe2lmKE10KFdl''@;'; put 'put ''KSwwPT09V2UuYXZhaWxfb3V0KXJldHVybiBodC5sYXN0X2ZsdXNoPS0xLG5lfWVsc2UgaWYoMD09PVdlLmF2YWlsX2luJiZ1bihUdCk8PXVuKG5yKSYmNCE9PVR0KXJldHVybiBRZShXZSwtNSk7aWYoNjY2PT09aHQuc3RhdHVzJiYwIT09V2UuYXZhaWxfaW4pcmV0dXJuIFFlKFdlLC01KTtp''@;'; put 'put ''ZigwIT09V2UuYXZhaWxfaW58fDAhPT1odC5sb29rYWhlYWR8fFR0IT09VyYmNjY2IT09aHQuc3RhdHVzKXt2YXIgaGk9Mj09PWh0LnN0cmF0ZWd5P2Z1bmN0aW9uIFF0KFdlLFR0KXtmb3IodmFyIG5yOzspe2lmKDA9PT1XZS5sb29rYWhlYWQmJih1dChXZSksMD09PVdlLmxvb2thaGVhZCkp''@;'; put 'put ''e2lmKFR0PT09VylyZXR1cm4gMTticmVha31pZihXZS5tYXRjaF9sZW5ndGg9MCxucj1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0KyssbnImJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4g''@;'; put 'put ''MX1yZXR1cm4gV2UuaW5zZXJ0PTAsND09PVR0PyhEdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KT8xOjJ9KGh0LFR0KTozPT09aHQuc3RyYXRlZ3k/ZnVuY3Rpb24gY2koV2UsVHQpe2Zvcih2''@;'; put 'put ''YXIgbnIsaHQseHQsam4scm49V2Uud2luZG93Ozspe2lmKFdlLmxvb2thaGVhZDw9SmUpe2lmKHV0KFdlKSxXZS5sb29rYWhlYWQ8PUplJiZUdD09PVcpcmV0dXJuIDE7aWYoMD09PVdlLmxvb2thaGVhZClicmVha31pZihXZS5tYXRjaF9sZW5ndGg9MCxXZS5sb29rYWhlYWQ+PVVlJiZXZS5z''@;'; put 'put ''dHJzdGFydD4wJiYoaHQ9cm5beHQ9V2Uuc3Ryc3RhcnQtMV0pPT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0pe2puPVdlLnN0cnN0YXJ0K0plO2Rve313aGlsZShodD09PXJuWysreHRdJiZodD09PXJuWysreHRdJiZodD09PXJuWysreHRdJiZodD09PXJuWysreHRd''@;'; put 'put ''JiZodD09PXJuWysreHRdJiZodD09PXJuWysreHRdJiZodD09PXJuWysreHRdJiZodD09PXJuWysreHRdJiZ4dDxqbik7V2UubWF0Y2hfbGVuZ3RoPUplLShqbi14dCksV2UubWF0Y2hfbGVuZ3RoPldlLmxvb2thaGVhZCYmKFdlLm1hdGNoX2xlbmd0aD1XZS5sb29rYWhlYWQpfWlmKFdlLm1h''@;'; put 'put ''dGNoX2xlbmd0aD49VWU/KG5yPU4uX3RyX3RhbGx5KFdlLDEsV2UubWF0Y2hfbGVuZ3RoLVVlKSxXZS5sb29rYWhlYWQtPVdlLm1hdGNoX2xlbmd0aCxXZS5zdHJzdGFydCs9V2UubWF0Y2hfbGVuZ3RoLFdlLm1hdGNoX2xlbmd0aD0wKToobnI9Ti5fdHJfdGFsbHkoV2UsMCxXZS53aW5kb3db''@;'; put 'put ''V2Uuc3Ryc3RhcnRdKSxXZS5sb29rYWhlYWQtLSxXZS5zdHJzdGFydCsrKSxuciYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xp''@;'; put 'put ''dCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn0oaHQsVHQpOlJpW2h0LmxldmVsXS5mdW5jKGh0LFR0KTtpZigoMz09PWhpfHw0PT09aGkpJiYoaHQuc3RhdHVzPTY2NiksMT09PWhpfHwzPT09aGkpcmV0dXJuIDA9PT1XZS5hdmFpbF9vdXQmJihodC5sYXN0X2ZsdXNo''@;'; put 'put ''PS0xKSxuZTtpZigyPT09aGkmJigxPT09VHQ/Ti5fdHJfYWxpZ24oaHQpOjUhPT1UdCYmKE4uX3RyX3N0b3JlZF9ibG9jayhodCwwLDAsITEpLDM9PT1UdCYmKHl0KGh0LmhlYWQpLDA9PT1odC5sb29rYWhlYWQmJihodC5zdHJzdGFydD0wLGh0LmJsb2NrX3N0YXJ0PTAsaHQuaW5zZXJ0PTAp''@;'; put 'put ''KSksTXQoV2UpLDA9PT1XZS5hdmFpbF9vdXQpKXJldHVybiBodC5sYXN0X2ZsdXNoPS0xLG5lfXJldHVybiA0IT09VHQ/bmU6aHQud3JhcDw9MD8xOigyPT09aHQud3JhcD8oaXQoaHQsMjU1JldlLmFkbGVyKSxpdChodCxXZS5hZGxlcj4+OCYyNTUpLGl0KGh0LFdlLmFkbGVyPj4xNiYyNTUp''@;'; put 'put ''LGl0KGh0LFdlLmFkbGVyPj4yNCYyNTUpLGl0KGh0LDI1NSZXZS50b3RhbF9pbiksaXQoaHQsV2UudG90YWxfaW4+PjgmMjU1KSxpdChodCxXZS50b3RhbF9pbj4+MTYmMjU1KSxpdChodCxXZS50b3RhbF9pbj4+MjQmMjU1KSk6KCRlKGh0LFdlLmFkbGVyPj4+MTYpLCRlKGh0LDY1NTM1Jldl''@;'; put 'put ''LmFkbGVyKSksTXQoV2UpLGh0LndyYXA+MCYmKGh0LndyYXA9LWh0LndyYXApLDAhPT1odC5wZW5kaW5nP25lOjEpfSxPLmRlZmxhdGVFbmQ9ZnVuY3Rpb24gcmkoV2Upe3ZhciBUdDtyZXR1cm4gV2UmJldlLnN0YXRlPyhUdD1XZS5zdGF0ZS5zdGF0dXMpIT09dmUmJjY5IT09VHQmJjczIT09''@;'; put 'put ''VHQmJjkxIT09VHQmJjEwMyE9PVR0JiZUdCE9PU9lJiY2NjYhPT1UdD9RZShXZSxsZSk6KFdlLnN0YXRlPW51bGwsVHQ9PT1PZT9RZShXZSwtMyk6bmUpOmxlfSxPLmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3''@;'; put 'put ''LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9tZXNzYWdlcyI6MzcsIi4vdHJlZXMiOjM4fV0sMzM6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ri5leHBvcnRzPWZ1bmN0aW9uIHooKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0''@;'; put 'put ''aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSwzNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ZnVuY3Rpb24oSyxVKXt2YXIgVyxZLHEsZWUsSixu''@;'; put 'put ''ZSxpZSxsZSxtZSxfZSxUZSxTZSxqZSxWLHAsYix4LEMsVCxILGosRSxtLEEsYWU7QT1LLmlucHV0LHE9KFk9Sy5uZXh0X2luKSsoSy5hdmFpbF9pbi01KSxhZT1LLm91dHB1dCxKPShlZT1LLm5leHRfb3V0KS0oVS1LLmF2YWlsX291dCksbmU9ZWUrKEsuYXZhaWxfb3V0LTI1NyksaWU9KFc9''@;'; put 'put ''Sy5zdGF0ZSkuZG1heCxsZT1XLndzaXplLG1lPVcud2hhdmUsX2U9Vy53bmV4dCxUZT1XLndpbmRvdyxTZT1XLmhvbGQsamU9Vy5iaXRzLFY9Vy5sZW5jb2RlLHA9Vy5kaXN0Y29kZSxiPSgxPDxXLmxlbmJpdHMpLTEseD0oMTw8Vy5kaXN0Yml0cyktMTtlOmRve2plPDE1JiYoU2UrPUFbWSsr''@;'; put 'put ''XTw8amUsU2UrPUFbWSsrXTw8KGplKz04KSxqZSs9OCksQz1WW1NlJmJdO3Q6Zm9yKDs7KXtpZihTZT4+Pj1UPUM+Pj4yNCxqZS09VCwwPT0oVD1DPj4+MTYmMjU1KSlhZVtlZSsrXT02NTUzNSZDO2Vsc2V7aWYoISgxNiZUKSl7aWYoNjQmVCl7aWYoMzImVCl7Vy5tb2RlPTEyO2JyZWFrIGV9''@;'; put 'put ''Sy5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsVy5tb2RlPTMwO2JyZWFrIGV9Qz1WWyg2NTUzNSZDKSsoU2UmKDE8PFQpLTEpXTtjb250aW51ZSB0fWZvcihIPTY1NTM1JkMsKFQmPTE1KSYmKGplPFQmJihTZSs9QVtZKytdPDxqZSxqZSs9OCksSCs9U2UmKDE8PFQpLTEsU2U+''@;'; put 'put ''Pj49VCxqZS09VCksamU8MTUmJihTZSs9QVtZKytdPDxqZSxTZSs9QVtZKytdPDwoamUrPTgpLGplKz04KSxDPXBbU2UmeF07Oyl7aWYoU2U+Pj49VD1DPj4+MjQsamUtPVQsMTYmKFQ9Qz4+PjE2JjI1NSkpe2lmKGo9NjU1MzUmQyxqZTwoVCY9MTUpJiYoU2UrPUFbWSsrXTw8amUsKGplKz04''@;'; put 'put ''KTxUJiYoU2UrPUFbWSsrXTw8amUsamUrPTgpKSwoais9U2UmKDE8PFQpLTEpPmllKXtLLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLFcubW9kZT0zMDticmVhayBlfWlmKFNlPj4+PVQsamUtPVQsaj4oVD1lZS1KKSl7aWYoKFQ9ai1UKT5tZSYmVy5zYW5lKXtLLm1zZz0i''@;'; put 'put ''aW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLFcubW9kZT0zMDticmVhayBlfWlmKEU9MCxtPVRlLDA9PT1fZSl7aWYoRSs9bGUtVCxUPEgpe0gtPVQ7ZG97YWVbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO0U9ZWUtaixtPWFlfX1lbHNlIGlmKF9lPFQpe2lmKEUrPWxlK19lLVQsKFQt''@;'; put 'put ''PV9lKTxIKXtILT1UO2Rve2FlW2VlKytdPVRlW0UrK119d2hpbGUoLS1UKTtpZihFPTAsX2U8SCl7SC09VD1fZTtkb3thZVtlZSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1lZS1qLG09YWV9fX1lbHNlIGlmKEUrPV9lLVQsVDxIKXtILT1UO2Rve2FlW2VlKytdPVRlW0UrK119d2hpbGUoLS1U''@;'; put 'put ''KTtFPWVlLWosbT1hZX1mb3IoO0g+MjspYWVbZWUrK109bVtFKytdLGFlW2VlKytdPW1bRSsrXSxhZVtlZSsrXT1tW0UrK10sSC09MztIJiYoYWVbZWUrK109bVtFKytdLEg+MSYmKGFlW2VlKytdPW1bRSsrXSkpfWVsc2V7RT1lZS1qO2Rve2FlW2VlKytdPWFlW0UrK10sYWVbZWUrK109YWVb''@;'; put 'put ''RSsrXSxhZVtlZSsrXT1hZVtFKytdLEgtPTN9d2hpbGUoSD4yKTtIJiYoYWVbZWUrK109YWVbRSsrXSxIPjEmJihhZVtlZSsrXT1hZVtFKytdKSl9YnJlYWt9aWYoNjQmVCl7Sy5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsVy5tb2RlPTMwO2JyZWFrIGV9Qz1wWyg2NTUzNSZDKSsoU2Um''@;'; put 'put ''KDE8PFQpLTEpXX19YnJlYWt9fXdoaWxlKFk8cSYmZWU8bmUpO1NlJj0oMTw8KGplLT0oSD1qZT4+Myk8PDMpKS0xLEsubmV4dF9pbj1ZLT1ILEsubmV4dF9vdXQ9ZWUsSy5hdmFpbF9pbj1ZPHE/cS1ZKzU6NS0oWS1xKSxLLmF2YWlsX291dD1lZTxuZT9uZS1lZSsyNTc6MjU3LShlZS1uZSks''@;'; put 'put ''Vy5ob2xkPVNlLFcuYml0cz1qZX19LHt9XSwzNTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKSxOPVAoIi4vYWRsZXIzMiIpLEw9UCgiLi9jcmMzMiIpLEs9UCgiLi9pbmZmYXN0IiksVT1QKCIuL2luZnRyZWVzIiksaWU9MCxfZT0tMixw''@;'; put 'put ''PTEseXQ9ODUyLE10PTU5MjtmdW5jdGlvbiAkZShBdCl7cmV0dXJuKEF0Pj4+MjQmMjU1KSsoQXQ+Pj44JjY1MjgwKSsoKDY1MjgwJkF0KTw8OCkrKCgyNTUmQXQpPDwyNCl9ZnVuY3Rpb24gdHQoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0h''@;'; put 'put ''MSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlz''@;'; put 'put ''Lmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9''@;'; put 'put ''bnVsbCx0aGlzLmxlbnM9bmV3IHouQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IHouQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gSGUoQXQpe3ZhciBSbjtyZXR1cm4gQXQmJkF0''@;'; put 'put ''LnN0YXRlPyhBdC50b3RhbF9pbj1BdC50b3RhbF9vdXQ9KFJuPUF0LnN0YXRlKS50b3RhbD0wLEF0Lm1zZz0iIixSbi53cmFwJiYoQXQuYWRsZXI9MSZSbi53cmFwKSxSbi5tb2RlPXAsUm4ubGFzdD0wLFJuLmhhdmVkaWN0PTAsUm4uZG1heD0zMjc2OCxSbi5oZWFkPW51bGwsUm4uaG9sZD0w''@;'; put 'put ''LFJuLmJpdHM9MCxSbi5sZW5jb2RlPVJuLmxlbmR5bj1uZXcgei5CdWYzMih5dCksUm4uZGlzdGNvZGU9Um4uZGlzdGR5bj1uZXcgei5CdWYzMihNdCksUm4uc2FuZT0xLFJuLmJhY2s9LTEsaWUpOl9lfWZ1bmN0aW9uIHV0KEF0KXt2YXIgUm47cmV0dXJuIEF0JiZBdC5zdGF0ZT8oKFJuPUF0''@;'; put 'put ''LnN0YXRlKS53c2l6ZT0wLFJuLndoYXZlPTAsUm4ud25leHQ9MCxIZShBdCkpOl9lfWZ1bmN0aW9uIHF0KEF0LFJuKXt2YXIgc3QsVXQ7cmV0dXJuIUF0fHwhQXQuc3RhdGV8fChVdD1BdC5zdGF0ZSxSbjwwPyhzdD0wLFJuPS1Sbik6KHN0PTErKFJuPj40KSxSbjw0OCYmKFJuJj0xNSkpLFJu''@;'; put 'put ''JiYoUm48OHx8Um4+MTUpKT9fZToobnVsbCE9PVV0LndpbmRvdyYmVXQud2JpdHMhPT1SbiYmKFV0LndpbmRvdz1udWxsKSxVdC53cmFwPXN0LFV0LndiaXRzPVJuLHV0KEF0KSl9ZnVuY3Rpb24gUnQoQXQsUm4pe3ZhciBzdCxVdDtyZXR1cm4gQXQ/KFV0PW5ldyB0dCxBdC5zdGF0ZT1VdCxV''@;'; put 'put ''dC53aW5kb3c9bnVsbCwoc3Q9cXQoQXQsUm4pKSE9PWllJiYoQXQuc3RhdGU9bnVsbCksc3QpOl9lfXZhciBRdCxzbixjaT0hMDtmdW5jdGlvbiBSaShBdCl7aWYoY2kpe3ZhciBSbjtmb3IoUXQ9bmV3IHouQnVmMzIoNTEyKSxzbj1uZXcgei5CdWYzMigzMiksUm49MDtSbjwxNDQ7KUF0Lmxl''@;'; put 'put ''bnNbUm4rK109ODtmb3IoO1JuPDI1NjspQXQubGVuc1tSbisrXT05O2Zvcig7Um48MjgwOylBdC5sZW5zW1JuKytdPTc7Zm9yKDtSbjwyODg7KUF0LmxlbnNbUm4rK109ODtmb3IoVSgxLEF0LmxlbnMsMCwyODgsUXQsMCxBdC53b3JrLHtiaXRzOjl9KSxSbj0wO1JuPDMyOylBdC5sZW5zW1Ju''@;'; put 'put ''KytdPTU7VSgyLEF0LmxlbnMsMCwzMixzbiwwLEF0Lndvcmsse2JpdHM6NX0pLGNpPSExfUF0LmxlbmNvZGU9UXQsQXQubGVuYml0cz05LEF0LmRpc3Rjb2RlPXNuLEF0LmRpc3RiaXRzPTV9Ty5pbmZsYXRlUmVzZXQ9dXQsTy5pbmZsYXRlUmVzZXQyPXF0LE8uaW5mbGF0ZVJlc2V0S2VlcD1I''@;'; put 'put ''ZSxPLmluZmxhdGVJbml0PWZ1bmN0aW9uIFB0KEF0KXtyZXR1cm4gUnQoQXQsMTUpfSxPLmluZmxhdGVJbml0Mj1SdCxPLmluZmxhdGU9ZnVuY3Rpb24gZnQoQXQsUm4pe3ZhciBzdCxVdCxyaSxXZSxUdCxucixodCx4dCxqbixybix6dCxoaSxjbixmbixYdCxlbix1YSxFaSx2cixXbiwkaSxl''@;'; put 'put ''aSxWaSxOaSxJaT0wLFFyPW5ldyB6LkJ1ZjgoNCksRGE9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCFBdHx8IUF0LnN0YXRlfHwhQXQub3V0cHV0fHwhQXQuaW5wdXQmJjAhPT1BdC5hdmFpbF9pbilyZXR1cm4gX2U7MTI9PT0oc3Q9QXQuc3Rh''@;'; put 'put ''dGUpLm1vZGUmJihzdC5tb2RlPTEzKSxUdD1BdC5uZXh0X291dCxyaT1BdC5vdXRwdXQsV2U9QXQubmV4dF9pbixVdD1BdC5pbnB1dCx4dD1zdC5ob2xkLGpuPXN0LmJpdHMscm49bnI9QXQuYXZhaWxfaW4senQ9aHQ9QXQuYXZhaWxfb3V0LGVpPWllO2U6Zm9yKDs7KXN3aXRjaChzdC5tb2Rl''@;'; put 'put ''KXtjYXNlIHA6aWYoMD09PXN0LndyYXApe3N0Lm1vZGU9MTM7YnJlYWt9Zm9yKDtqbjwxNjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZigyJnN0LndyYXAmJjM1NjE1PT09eHQpe3N0LmNoZWNrPTAsUXJbMF09MjU1Jnh0LFFyWzFdPXh0Pj4+OCYy''@;'; put 'put ''NTUsc3QuY2hlY2s9TChzdC5jaGVjayxRciwyLDApLHh0PTAsam49MCxzdC5tb2RlPTI7YnJlYWt9aWYoc3QuZmxhZ3M9MCxzdC5oZWFkJiYoc3QuaGVhZC5kb25lPSExKSwhKDEmc3Qud3JhcCl8fCgoKDI1NSZ4dCk8PDgpKyh4dD4+OCkpJTMxKXtBdC5tc2c9ImluY29ycmVjdCBoZWFkZXIg''@;'; put 'put ''Y2hlY2siLHN0Lm1vZGU9MzA7YnJlYWt9aWYoOCE9KDE1Jnh0KSl7QXQubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsc3QubW9kZT0zMDticmVha31pZihqbi09NCwkaT04KygxNSYoeHQ+Pj49NCkpLDA9PT1zdC53Yml0cylzdC53Yml0cz0kaTtlbHNlIGlmKCRpPnN0LndiaXRz''@;'; put 'put ''KXtBdC5tc2c9ImludmFsaWQgd2luZG93IHNpemUiLHN0Lm1vZGU9MzA7YnJlYWt9c3QuZG1heD0xPDwkaSxBdC5hZGxlcj1zdC5jaGVjaz0xLHN0Lm1vZGU9NTEyJnh0PzEwOjEyLHh0PTAsam49MDticmVhaztjYXNlIDI6Zm9yKDtqbjwxNjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQr''@;'; put 'put ''PVV0W1dlKytdPDxqbixqbis9OH1pZihzdC5mbGFncz14dCw4IT0oMjU1JnN0LmZsYWdzKSl7QXQubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsc3QubW9kZT0zMDticmVha31pZig1NzM0NCZzdC5mbGFncyl7QXQubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLHN0Lm1v''@;'; put 'put ''ZGU9MzA7YnJlYWt9c3QuaGVhZCYmKHN0LmhlYWQudGV4dD14dD4+OCYxKSw1MTImc3QuZmxhZ3MmJihRclswXT0yNTUmeHQsUXJbMV09eHQ+Pj44JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDIsMCkpLHh0PTAsam49MCxzdC5tb2RlPTM7Y2FzZSAzOmZvcig7am48MzI7KXtpZigwPT09''@;'; put 'put ''bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3QuaGVhZCYmKHN0LmhlYWQudGltZT14dCksNTEyJnN0LmZsYWdzJiYoUXJbMF09MjU1Jnh0LFFyWzFdPXh0Pj4+OCYyNTUsUXJbMl09eHQ+Pj4xNiYyNTUsUXJbM109eHQ+Pj4yNCYyNTUsc3QuY2hlY2s9TChzdC5jaGVj''@;'; put 'put ''ayxRciw0LDApKSx4dD0wLGpuPTAsc3QubW9kZT00O2Nhc2UgNDpmb3IoO2puPDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN0LmhlYWQmJihzdC5oZWFkLnhmbGFncz0yNTUmeHQsc3QuaGVhZC5vcz14dD4+OCksNTEyJnN0LmZsYWdzJiYoUXJb''@;'; put 'put ''MF09MjU1Jnh0LFFyWzFdPXh0Pj4+OCYyNTUsc3QuY2hlY2s9TChzdC5jaGVjayxRciwyLDApKSx4dD0wLGpuPTAsc3QubW9kZT01O2Nhc2UgNTppZigxMDI0JnN0LmZsYWdzKXtmb3IoO2puPDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN0Lmxl''@;'; put 'put ''bmd0aD14dCxzdC5oZWFkJiYoc3QuaGVhZC5leHRyYV9sZW49eHQpLDUxMiZzdC5mbGFncyYmKFFyWzBdPTI1NSZ4dCxRclsxXT14dD4+PjgmMjU1LHN0LmNoZWNrPUwoc3QuY2hlY2ssUXIsMiwwKSkseHQ9MCxqbj0wfWVsc2Ugc3QuaGVhZCYmKHN0LmhlYWQuZXh0cmE9bnVsbCk7c3QubW9k''@;'; put 'put ''ZT02O2Nhc2UgNjppZigxMDI0JnN0LmZsYWdzJiYoKGhpPXN0Lmxlbmd0aCk+bnImJihoaT1uciksaGkmJihzdC5oZWFkJiYoJGk9c3QuaGVhZC5leHRyYV9sZW4tc3QubGVuZ3RoLHN0LmhlYWQuZXh0cmF8fChzdC5oZWFkLmV4dHJhPW5ldyBBcnJheShzdC5oZWFkLmV4dHJhX2xlbikpLHou''@;'; put 'put ''YXJyYXlTZXQoc3QuaGVhZC5leHRyYSxVdCxXZSxoaSwkaSkpLDUxMiZzdC5mbGFncyYmKHN0LmNoZWNrPUwoc3QuY2hlY2ssVXQsaGksV2UpKSxuci09aGksV2UrPWhpLHN0Lmxlbmd0aC09aGkpLHN0Lmxlbmd0aCkpYnJlYWsgZTtzdC5sZW5ndGg9MCxzdC5tb2RlPTc7Y2FzZSA3OmlmKDIw''@;'; put 'put ''NDgmc3QuZmxhZ3Mpe2lmKDA9PT1ucilicmVhayBlO2hpPTA7ZG97JGk9VXRbV2UraGkrK10sc3QuaGVhZCYmJGkmJnN0Lmxlbmd0aDw2NTUzNiYmKHN0LmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgkaSkpfXdoaWxlKCRpJiZoaTxucik7aWYoNTEyJnN0LmZsYWdzJiYoc3QuY2hl''@;'; put 'put ''Y2s9TChzdC5jaGVjayxVdCxoaSxXZSkpLG5yLT1oaSxXZSs9aGksJGkpYnJlYWsgZX1lbHNlIHN0LmhlYWQmJihzdC5oZWFkLm5hbWU9bnVsbCk7c3QubGVuZ3RoPTAsc3QubW9kZT04O2Nhc2UgODppZig0MDk2JnN0LmZsYWdzKXtpZigwPT09bnIpYnJlYWsgZTtoaT0wO2RveyRpPVV0W1dl''@;'; put 'put ''K2hpKytdLHN0LmhlYWQmJiRpJiZzdC5sZW5ndGg8NjU1MzYmJihzdC5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoJGkpKX13aGlsZSgkaSYmaGk8bnIpO2lmKDUxMiZzdC5mbGFncyYmKHN0LmNoZWNrPUwoc3QuY2hlY2ssVXQsaGksV2UpKSxuci09aGksV2UrPWhpLCRpKWJy''@;'; put 'put ''ZWFrIGV9ZWxzZSBzdC5oZWFkJiYoc3QuaGVhZC5jb21tZW50PW51bGwpO3N0Lm1vZGU9OTtjYXNlIDk6aWYoNTEyJnN0LmZsYWdzKXtmb3IoO2puPDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKHh0IT09KDY1NTM1JnN0LmNoZWNrKSl7QXQu''@;'; put 'put ''bXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixzdC5tb2RlPTMwO2JyZWFrfXh0PTAsam49MH1zdC5oZWFkJiYoc3QuaGVhZC5oY3JjPXN0LmZsYWdzPj45JjEsc3QuaGVhZC5kb25lPSEwKSxBdC5hZGxlcj1zdC5jaGVjaz0wLHN0Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxMDpmb3IoO2puPDMyOyl7''@;'; put 'put ''aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fUF0LmFkbGVyPXN0LmNoZWNrPSRlKHh0KSx4dD0wLGpuPTAsc3QubW9kZT0xMTtjYXNlIDExOmlmKDA9PT1zdC5oYXZlZGljdClyZXR1cm4gQXQubmV4dF9vdXQ9VHQsQXQuYXZhaWxfb3V0PWh0LEF0Lm5leHRf''@;'; put 'put ''aW49V2UsQXQuYXZhaWxfaW49bnIsc3QuaG9sZD14dCxzdC5iaXRzPWpuLDI7QXQuYWRsZXI9c3QuY2hlY2s9MSxzdC5tb2RlPTEyO2Nhc2UgMTI6aWYoNT09PVJufHw2PT09Um4pYnJlYWsgZTtjYXNlIDEzOmlmKHN0Lmxhc3Qpe3h0Pj4+PTcmam4sam4tPTcmam4sc3QubW9kZT0yNzticmVh''@;'; put 'put ''a31mb3IoO2puPDM7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3dpdGNoKHN0Lmxhc3Q9MSZ4dCxqbi09MSwzJih4dD4+Pj0xKSl7Y2FzZSAwOnN0Lm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKFJpKHN0KSxzdC5tb2RlPTIwLDY9PT1Sbil7eHQ+Pj49''@;'; put 'put ''Mixqbi09MjticmVhayBlfWJyZWFrO2Nhc2UgMjpzdC5tb2RlPTE3O2JyZWFrO2Nhc2UgMzpBdC5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsc3QubW9kZT0zMH14dD4+Pj0yLGpuLT0yO2JyZWFrO2Nhc2UgMTQ6Zm9yKHh0Pj4+PTcmam4sam4tPTcmam47am48MzI7KXtpZigwPT09bnIpYnJl''@;'; put 'put ''YWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoKDY1NTM1Jnh0KSE9KHh0Pj4+MTZeNjU1MzUpKXtBdC5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoc3QubGVuZ3RoPTY1NTM1Jnh0LHh0PTAsam49MCxzdC5tb2RlPTE1LDY9''@;'; put 'put ''PT1SbilicmVhayBlO2Nhc2UgMTU6c3QubW9kZT0xNjtjYXNlIDE2OmlmKGhpPXN0Lmxlbmd0aCl7aWYoaGk+bnImJihoaT1uciksaGk+aHQmJihoaT1odCksMD09PWhpKWJyZWFrIGU7ei5hcnJheVNldChyaSxVdCxXZSxoaSxUdCksbnItPWhpLFdlKz1oaSxodC09aGksVHQrPWhpLHN0Lmxl''@;'; put 'put ''bmd0aC09aGk7YnJlYWt9c3QubW9kZT0xMjticmVhaztjYXNlIDE3OmZvcig7am48MTQ7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoc3Qubmxlbj0yNTcrKDMxJnh0KSxqbi09NSxzdC5uZGlzdD0xKygzMSYoeHQ+Pj49NSkpLGpuLT01LHN0Lm5j''@;'; put 'put ''b2RlPTQrKDE1Jih4dD4+Pj01KSkseHQ+Pj49NCxqbi09NCxzdC5ubGVuPjI4Nnx8c3QubmRpc3Q+MzApe0F0Lm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLHN0Lm1vZGU9MzA7YnJlYWt9c3QuaGF2ZT0wLHN0Lm1vZGU9MTg7Y2FzZSAxODpmb3IoO3N0LmhhdmU8''@;'; put 'put ''c3QubmNvZGU7KXtmb3IoO2puPDM7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3QubGVuc1tEYVtzdC5oYXZlKytdXT03Jnh0LHh0Pj4+PTMsam4tPTN9Zm9yKDtzdC5oYXZlPDE5OylzdC5sZW5zW0RhW3N0LmhhdmUrK11dPTA7aWYoc3QubGVuY29k''@;'; put 'put ''ZT1zdC5sZW5keW4sc3QubGVuYml0cz03LGVpPVUoMCxzdC5sZW5zLDAsMTksc3QubGVuY29kZSwwLHN0LndvcmssVmk9e2JpdHM6c3QubGVuYml0c30pLHN0LmxlbmJpdHM9VmkuYml0cyxlaSl7QXQubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLHN0Lm1vZGU9MzA7YnJlYWt9c3Qu''@;'; put 'put ''aGF2ZT0wLHN0Lm1vZGU9MTk7Y2FzZSAxOTpmb3IoO3N0LmhhdmU8c3QubmxlbitzdC5uZGlzdDspe2Zvcig7ZW49KElpPXN0LmxlbmNvZGVbeHQmKDE8PHN0LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSx1YT02NTUzNSZJaSwhKChYdD1JaT4+PjI0KTw9am4pOyl7aWYoMD09PW5yKWJyZWFrIGU7''@;'; put 'put ''bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKHVhPDE2KXh0Pj4+PVh0LGpuLT1YdCxzdC5sZW5zW3N0LmhhdmUrK109dWE7ZWxzZXtpZigxNj09PXVhKXtmb3IoTmk9WHQrMjtqbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZih4dD4+''@;'; put 'put ''Pj1YdCxqbi09WHQsMD09PXN0LmhhdmUpe0F0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsc3QubW9kZT0zMDticmVha30kaT1zdC5sZW5zW3N0LmhhdmUtMV0saGk9MysoMyZ4dCkseHQ+Pj49Mixqbi09Mn1lbHNlIGlmKDE3PT09dWEpe2ZvcihOaT1YdCszO2puPE5pOyl7aWYo''@;'; put 'put ''MD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWpuLT1YdCwkaT0wLGhpPTMrKDcmKHh0Pj4+PVh0KSkseHQ+Pj49Myxqbi09M31lbHNle2ZvcihOaT1YdCs3O2puPE5pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWpuLT1Y''@;'; put 'put ''dCwkaT0wLGhpPTExKygxMjcmKHh0Pj4+PVh0KSkseHQ+Pj49Nyxqbi09N31pZihzdC5oYXZlK2hpPnN0Lm5sZW4rc3QubmRpc3Qpe0F0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsc3QubW9kZT0zMDticmVha31mb3IoO2hpLS07KXN0LmxlbnNbc3QuaGF2ZSsrXT0kaX19aWYo''@;'; put 'put ''MzA9PT1zdC5tb2RlKWJyZWFrO2lmKDA9PT1zdC5sZW5zWzI1Nl0pe0F0Lm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixzdC5tb2RlPTMwO2JyZWFrfWlmKHN0LmxlbmJpdHM9OSxlaT1VKDEsc3QubGVucywwLHN0Lm5sZW4sc3QubGVuY29kZSwwLHN0Lndvcmss''@;'; put 'put ''Vmk9e2JpdHM6c3QubGVuYml0c30pLHN0LmxlbmJpdHM9VmkuYml0cyxlaSl7QXQubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoc3QuZGlzdGJpdHM9NixzdC5kaXN0Y29kZT1zdC5kaXN0ZHluLGVpPVUoMixzdC5sZW5zLHN0Lm5sZW4sc3Qu''@;'; put 'put ''bmRpc3Qsc3QuZGlzdGNvZGUsMCxzdC53b3JrLFZpPXtiaXRzOnN0LmRpc3RiaXRzfSksc3QuZGlzdGJpdHM9VmkuYml0cyxlaSl7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoc3QubW9kZT0yMCw2PT09Um4pYnJlYWsgZTtjYXNlIDIwOnN0Lm1v''@;'; put 'put ''ZGU9MjE7Y2FzZSAyMTppZihucj49NiYmaHQ+PTI1OCl7QXQubmV4dF9vdXQ9VHQsQXQuYXZhaWxfb3V0PWh0LEF0Lm5leHRfaW49V2UsQXQuYXZhaWxfaW49bnIsc3QuaG9sZD14dCxzdC5iaXRzPWpuLEsoQXQsenQpLFR0PUF0Lm5leHRfb3V0LHJpPUF0Lm91dHB1dCxodD1BdC5hdmFpbF9v''@;'; put 'put ''dXQsV2U9QXQubmV4dF9pbixVdD1BdC5pbnB1dCxucj1BdC5hdmFpbF9pbix4dD1zdC5ob2xkLGpuPXN0LmJpdHMsMTI9PT1zdC5tb2RlJiYoc3QuYmFjaz0tMSk7YnJlYWt9Zm9yKHN0LmJhY2s9MDtlbj0oSWk9c3QubGVuY29kZVt4dCYoMTw8c3QubGVuYml0cyktMV0pPj4+MTYmMjU1LHVh''@;'; put 'put ''PTY1NTM1JklpLCEoKFh0PUlpPj4+MjQpPD1qbik7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoZW4mJiEoMjQwJmVuKSl7Zm9yKEVpPVh0LHZyPWVuLFduPXVhO2VuPShJaT1zdC5sZW5jb2RlW1duKygoeHQmKDE8PEVpK3ZyKS0xKT4+RWkpXSk+''@;'; put 'put ''Pj4xNiYyNTUsdWE9NjU1MzUmSWksIShFaSsoWHQ9SWk+Pj4yNCk8PWpuKTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH14dD4+Pj1FaSxqbi09RWksc3QuYmFjays9RWl9aWYoeHQ+Pj49WHQsam4tPVh0LHN0LmJhY2srPVh0LHN0Lmxlbmd0aD11YSww''@;'; put 'put ''PT09ZW4pe3N0Lm1vZGU9MjY7YnJlYWt9aWYoMzImZW4pe3N0LmJhY2s9LTEsc3QubW9kZT0xMjticmVha31pZig2NCZlbil7QXQubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLHN0Lm1vZGU9MzA7YnJlYWt9c3QuZXh0cmE9MTUmZW4sc3QubW9kZT0yMjtjYXNlIDIyOmlmKHN0''@;'; put 'put ''LmV4dHJhKXtmb3IoTmk9c3QuZXh0cmE7am48Tmk7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3QubGVuZ3RoKz14dCYoMTw8c3QuZXh0cmEpLTEseHQ+Pj49c3QuZXh0cmEsam4tPXN0LmV4dHJhLHN0LmJhY2srPXN0LmV4dHJhfXN0Lndhcz1zdC5s''@;'; put 'put ''ZW5ndGgsc3QubW9kZT0yMztjYXNlIDIzOmZvcig7ZW49KElpPXN0LmRpc3Rjb2RlW3h0JigxPDxzdC5kaXN0Yml0cyktMV0pPj4+MTYmMjU1LHVhPTY1NTM1JklpLCEoKFh0PUlpPj4+MjQpPD1qbik7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYo''@;'; put 'put ''ISgyNDAmZW4pKXtmb3IoRWk9WHQsdnI9ZW4sV249dWE7ZW49KElpPXN0LmRpc3Rjb2RlW1duKygoeHQmKDE8PEVpK3ZyKS0xKT4+RWkpXSk+Pj4xNiYyNTUsdWE9NjU1MzUmSWksIShFaSsoWHQ9SWk+Pj4yNCk8PWpuKTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxq''@;'; put 'put ''bixqbis9OH14dD4+Pj1FaSxqbi09RWksc3QuYmFjays9RWl9aWYoeHQ+Pj49WHQsam4tPVh0LHN0LmJhY2srPVh0LDY0JmVuKXtBdC5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsc3QubW9kZT0zMDticmVha31zdC5vZmZzZXQ9dWEsc3QuZXh0cmE9MTUmZW4sc3QubW9kZT0yNDtjYXNl''@;'; put 'put ''IDI0OmlmKHN0LmV4dHJhKXtmb3IoTmk9c3QuZXh0cmE7am48Tmk7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9c3Qub2Zmc2V0Kz14dCYoMTw8c3QuZXh0cmEpLTEseHQ+Pj49c3QuZXh0cmEsam4tPXN0LmV4dHJhLHN0LmJhY2srPXN0LmV4dHJhfWlm''@;'; put 'put ''KHN0Lm9mZnNldD5zdC5kbWF4KXtBdC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixzdC5tb2RlPTMwO2JyZWFrfXN0Lm1vZGU9MjU7Y2FzZSAyNTppZigwPT09aHQpYnJlYWsgZTtpZihzdC5vZmZzZXQ+KGhpPXp0LWh0KSl7aWYoKGhpPXN0Lm9mZnNldC1oaSk+c3Qud2hh''@;'; put 'put ''dmUmJnN0LnNhbmUpe0F0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHN0Lm1vZGU9MzA7YnJlYWt9Y249aGk+c3Qud25leHQ/c3Qud3NpemUtKGhpLT1zdC53bmV4dCk6c3Qud25leHQtaGksaGk+c3QubGVuZ3RoJiYoaGk9c3QubGVuZ3RoKSxmbj1zdC53aW5kb3d9ZWxz''@;'; put 'put ''ZSBmbj1yaSxjbj1UdC1zdC5vZmZzZXQsaGk9c3QubGVuZ3RoO2hpPmh0JiYoaGk9aHQpLGh0LT1oaSxzdC5sZW5ndGgtPWhpO2Rve3JpW1R0KytdPWZuW2NuKytdfXdoaWxlKC0taGkpOzA9PT1zdC5sZW5ndGgmJihzdC5tb2RlPTIxKTticmVhaztjYXNlIDI2OmlmKDA9PT1odClicmVhayBl''@;'; put 'put ''O3JpW1R0KytdPXN0Lmxlbmd0aCxodC0tLHN0Lm1vZGU9MjE7YnJlYWs7Y2FzZSAyNzppZihzdC53cmFwKXtmb3IoO2puPDMyOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dHw9VXRbV2UrK108PGpuLGpuKz04fWlmKEF0LnRvdGFsX291dCs9enQtPWh0LHN0LnRvdGFsKz16dCx6dCYmKEF0''@;'; put 'put ''LmFkbGVyPXN0LmNoZWNrPXN0LmZsYWdzP0woc3QuY2hlY2sscmksenQsVHQtenQpOk4oc3QuY2hlY2sscmksenQsVHQtenQpKSx6dD1odCwoc3QuZmxhZ3M/eHQ6JGUoeHQpKSE9PXN0LmNoZWNrKXtBdC5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixzdC5tb2RlPTMwO2JyZWFrfXh0PTAs''@;'; put 'put ''am49MH1zdC5tb2RlPTI4O2Nhc2UgMjg6aWYoc3Qud3JhcCYmc3QuZmxhZ3Mpe2Zvcig7am48MzI7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoeHQhPT0oNDI5NDk2NzI5NSZzdC50b3RhbCkpe0F0Lm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVj''@;'; put 'put ''ayIsc3QubW9kZT0zMDticmVha314dD0wLGpuPTB9c3QubW9kZT0yOTtjYXNlIDI5OmVpPTE7YnJlYWsgZTtjYXNlIDMwOmVpPS0zO2JyZWFrIGU7Y2FzZSAzMTpyZXR1cm4tNDtkZWZhdWx0OnJldHVybiBfZX1yZXR1cm4gQXQubmV4dF9vdXQ9VHQsQXQuYXZhaWxfb3V0PWh0LEF0Lm5leHRf''@;'; put 'put ''aW49V2UsQXQuYXZhaWxfaW49bnIsc3QuaG9sZD14dCxzdC5iaXRzPWpuLChzdC53c2l6ZXx8enQhPT1BdC5hdmFpbF9vdXQmJnN0Lm1vZGU8MzAmJihzdC5tb2RlPDI3fHw0IT09Um4pKSYmZnVuY3Rpb24gaG4oQXQsUm4sc3QsVXQpe3ZhciByaSxXZT1BdC5zdGF0ZTtyZXR1cm4gbnVsbD09''@;'; put 'put ''PVdlLndpbmRvdyYmKFdlLndzaXplPTE8PFdlLndiaXRzLFdlLnduZXh0PTAsV2Uud2hhdmU9MCxXZS53aW5kb3c9bmV3IHouQnVmOChXZS53c2l6ZSkpLFV0Pj1XZS53c2l6ZT8oei5hcnJheVNldChXZS53aW5kb3csUm4sc3QtV2Uud3NpemUsV2Uud3NpemUsMCksV2Uud25leHQ9MCxXZS53''@;'; put 'put ''aGF2ZT1XZS53c2l6ZSk6KChyaT1XZS53c2l6ZS1XZS53bmV4dCk+VXQmJihyaT1VdCksei5hcnJheVNldChXZS53aW5kb3csUm4sc3QtVXQscmksV2Uud25leHQpLChVdC09cmkpPyh6LmFycmF5U2V0KFdlLndpbmRvdyxSbixzdC1VdCxVdCwwKSxXZS53bmV4dD1VdCxXZS53aGF2ZT1XZS53''@;'; put 'put ''c2l6ZSk6KFdlLnduZXh0Kz1yaSxXZS53bmV4dD09PVdlLndzaXplJiYoV2Uud25leHQ9MCksV2Uud2hhdmU8V2Uud3NpemUmJihXZS53aGF2ZSs9cmkpKSksMH0oQXQsQXQub3V0cHV0LEF0Lm5leHRfb3V0LHp0LUF0LmF2YWlsX291dCk/KHN0Lm1vZGU9MzEsLTQpOih6dC09QXQuYXZhaWxf''@;'; put 'put ''b3V0LEF0LnRvdGFsX2luKz1ybi09QXQuYXZhaWxfaW4sQXQudG90YWxfb3V0Kz16dCxzdC50b3RhbCs9enQsc3Qud3JhcCYmenQmJihBdC5hZGxlcj1zdC5jaGVjaz1zdC5mbGFncz9MKHN0LmNoZWNrLHJpLHp0LEF0Lm5leHRfb3V0LXp0KTpOKHN0LmNoZWNrLHJpLHp0LEF0Lm5leHRfb3V0''@;'; put 'put ''LXp0KSksQXQuZGF0YV90eXBlPXN0LmJpdHMrKHN0Lmxhc3Q/NjQ6MCkrKDEyPT09c3QubW9kZT8xMjg6MCkrKDIwPT09c3QubW9kZXx8MTU9PT1zdC5tb2RlPzI1NjowKSwoMD09PXJuJiYwPT09enR8fDQ9PT1SbikmJmVpPT09aWUmJihlaT0tNSksZWkpfSxPLmluZmxhdGVFbmQ9ZnVuY3Rp''@;'; put 'put ''b24gT3IoQXQpe2lmKCFBdHx8IUF0LnN0YXRlKXJldHVybiBfZTt2YXIgUm49QXQuc3RhdGU7cmV0dXJuIFJuLndpbmRvdyYmKFJuLndpbmRvdz1udWxsKSxBdC5zdGF0ZT1udWxsLGllfSxPLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24gV3QoQXQsUm4pe3ZhciBzdDtyZXR1cm4gQXQmJkF0''@;'; put 'put ''LnN0YXRlJiYyJihzdD1BdC5zdGF0ZSkud3JhcD8oc3QuaGVhZD1SbixSbi5kb25lPSExLGllKTpfZX0sTy5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyNywiLi9hZGxlcjMyIjoyOSwiLi9jcmMzMiI6MzEsIi4v''@;'; put 'put ''aW5mZmFzdCI6MzQsIi4vaW5mdHJlZXMiOjM2fV0sMzY6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi4vdXRpbHMvY29tbW9uIikscT1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2''@;'; put 'put ''MywxOTUsMjI3LDI1OCwwLDBdLGVlPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sSj1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1''@;'; put 'put ''NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sbmU9WzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5''@;'; put 'put ''LDY0LDY0XTtGLmV4cG9ydHM9ZnVuY3Rpb24obGUsbWUsX2UsVGUsU2UsamUsVixwKXt2YXIgc2Usd2UsVWUsSmUsb3QsWGUsSWUsVmUsa2UsYj1wLmJpdHMseD0wLEM9MCxUPTAsSD0wLGo9MCxFPTAsbT0wLEE9MCxhZT0wLHRlPTAseGU9bnVsbCx2ZT0wLHplPW5ldyB6LkJ1ZjE2KDE2KSxE''@;'; put 'put ''ZT1uZXcgei5CdWYxNigxNiksRmU9bnVsbCxPZT0wO2Zvcih4PTA7eDw9MTU7eCsrKXplW3hdPTA7Zm9yKEM9MDtDPFRlO0MrKyl6ZVttZVtfZStDXV0rKztmb3Ioaj1iLEg9MTU7SD49MSYmMD09PXplW0hdO0gtLSk7aWYoaj5IJiYoaj1IKSwwPT09SClyZXR1cm4gU2VbamUrK109MjA5NzE1''@;'; put 'put ''MjAsU2VbamUrK109MjA5NzE1MjAscC5iaXRzPTEsMDtmb3IoVD0xO1Q8SCYmMD09PXplW1RdO1QrKyk7Zm9yKGo8VCYmKGo9VCksQT0xLHg9MTt4PD0xNTt4KyspaWYoQTw8PTEsKEEtPXplW3hdKTwwKXJldHVybi0xO2lmKEE+MCYmKDA9PT1sZXx8MSE9PUgpKXJldHVybi0xO2ZvcihEZVsx''@;'; put 'put ''XT0wLHg9MTt4PDE1O3grKylEZVt4KzFdPURlW3hdK3plW3hdO2ZvcihDPTA7QzxUZTtDKyspMCE9PW1lW19lK0NdJiYoVltEZVttZVtfZStDXV0rK109Qyk7aWYoMD09PWxlPyh4ZT1GZT1WLFhlPTE5KToxPT09bGU/KHhlPXEsdmUtPTI1NyxGZT1lZSxPZS09MjU3LFhlPTI1Nik6KHhlPUos''@;'; put 'put ''RmU9bmUsWGU9LTEpLHRlPTAsQz0wLHg9VCxvdD1qZSxFPWosbT0wLFVlPS0xLEplPShhZT0xPDxqKS0xLDE9PT1sZSYmYWU+ODUyfHwyPT09bGUmJmFlPjU5MilyZXR1cm4gMTtmb3IoOzspe0llPXgtbSxWW0NdPFhlPyhWZT0wLGtlPVZbQ10pOlZbQ10+WGU/KFZlPUZlW09lK1ZbQ11dLGtl''@;'; put 'put ''PXhlW3ZlK1ZbQ11dKTooVmU9OTYsa2U9MCksc2U9MTw8eC1tLFQ9d2U9MTw8RTtkb3tTZVtvdCsodGU+Pm0pKyh3ZS09c2UpXT1JZTw8MjR8VmU8PDE2fGtlfXdoaWxlKDAhPT13ZSk7Zm9yKHNlPTE8PHgtMTt0ZSZzZTspc2U+Pj0xO2lmKDAhPT1zZT8odGUmPXNlLTEsdGUrPXNlKTp0ZT0w''@;'; put 'put ''LEMrKywwPT0tLXplW3hdKXtpZih4PT09SClicmVhazt4PW1lW19lK1ZbQ11dfWlmKHg+aiYmKHRlJkplKSE9PVVlKXtmb3IoMD09PW0mJihtPWopLG90Kz1ULEE9MTw8KEU9eC1tKTtFK208SCYmISgoQS09emVbRSttXSk8PTApOylFKyssQTw8PTE7aWYoYWUrPTE8PEUsMT09PWxlJiZhZT44''@;'; put 'put ''NTJ8fDI9PT1sZSYmYWU+NTkyKXJldHVybiAxO1NlW1VlPXRlJkplXT1qPDwyNHxFPDwxNnxvdC1qZX19cmV0dXJuIDAhPT10ZSYmKFNlW290K3RlXT14LW08PDI0fDY0PDwxNikscC5iaXRzPWosMH19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM3OltmdW5jdGlvbihQLEYsTyl7InVzZSBz''@;'; put 'put ''dHJpY3QiO0YuZXhwb3J0cz17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYi''@;'; put 'put ''OiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9fSx7fV0sMzg6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi4vdXRpbHMvY29tbW9uIik7ZnVuY3Rpb24gVyhmdCl7Zm9yKHZhciBPcj1mdC5sZW5ndGg7LS1Pcj49MDspZnRbT3JdPTB9dmFyIGplPTE1LFY9MTYsSD1bMCww''@;'; put 'put ''LDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxqPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxFPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIs''@;'; put 'put ''Myw3XSxtPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxhZT1uZXcgQXJyYXkoNTc2KTtXKGFlKTt2YXIgdGU9bmV3IEFycmF5KDYwKTtXKHRlKTt2YXIgc2U9bmV3IEFycmF5KDUxMik7VyhzZSk7dmFyIHdlPW5ldyBBcnJheSgyNTYpO1cod2UpO3Zh''@;'; put 'put ''ciBVZT1uZXcgQXJyYXkoMjkpO1coVWUpO3ZhciBKZT1uZXcgQXJyYXkoMzApO1coSmUpO3ZhciB4ZSx2ZSxYZSxvdD1mdW5jdGlvbihmdCxPcixXdCxBdCxSbil7dGhpcy5zdGF0aWNfdHJlZT1mdCx0aGlzLmV4dHJhX2JpdHM9T3IsdGhpcy5leHRyYV9iYXNlPVd0LHRoaXMuZWxlbXM9QXQs''@;'; put 'put ''dGhpcy5tYXhfbGVuZ3RoPVJuLHRoaXMuaGFzX3N0cmVlPWZ0JiZmdC5sZW5ndGh9LHplPWZ1bmN0aW9uKGZ0LE9yKXt0aGlzLmR5bl90cmVlPWZ0LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1Pcn07ZnVuY3Rpb24gRGUoZnQpe3JldHVybiBmdDwyNTY/c2VbZnRdOnNlWzI1Niso''@;'; put 'put ''ZnQ+Pj43KV19ZnVuY3Rpb24gRmUoZnQsT3Ipe2Z0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109MjU1Jk9yLGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109T3I+Pj44JjI1NX1mdW5jdGlvbiBPZShmdCxPcixXdCl7ZnQuYmlfdmFsaWQ+Vi1XdD8oZnQuYmlfYnVmfD1Pcjw8ZnQuYmlf''@;'; put 'put ''dmFsaWQmNjU1MzUsRmUoZnQsZnQuYmlfYnVmKSxmdC5iaV9idWY9T3I+PlYtZnQuYmlfdmFsaWQsZnQuYmlfdmFsaWQrPVd0LVYpOihmdC5iaV9idWZ8PU9yPDxmdC5iaV92YWxpZCY2NTUzNSxmdC5iaV92YWxpZCs9V3QpfWZ1bmN0aW9uIEllKGZ0LE9yLFd0KXtPZShmdCxXdFsyKk9yXSxX''@;'; put 'put ''dFsyKk9yKzFdKX1mdW5jdGlvbiBWZShmdCxPcil7dmFyIFd0PTA7ZG97V3R8PTEmZnQsZnQ+Pj49MSxXdDw8PTF9d2hpbGUoLS1Pcj4wKTtyZXR1cm4gV3Q+Pj4xfWZ1bmN0aW9uIF90KGZ0LE9yLFd0KXt2YXIgc3QsVXQsQXQ9bmV3IEFycmF5KGplKzEpLFJuPTA7Zm9yKHN0PTE7c3Q8PWpl''@;'; put 'put ''O3N0KyspQXRbc3RdPVJuPVJuK1d0W3N0LTFdPDwxO2ZvcihVdD0wO1V0PD1PcjtVdCsrKXt2YXIgcmk9ZnRbMipVdCsxXTswIT09cmkmJihmdFsyKlV0XT1WZShBdFtyaV0rKyxyaSkpfX1mdW5jdGlvbiBRZShmdCl7dmFyIE9yO2ZvcihPcj0wO09yPDI4NjtPcisrKWZ0LmR5bl9sdHJlZVsy''@;'; put 'put ''Kk9yXT0wO2ZvcihPcj0wO09yPDMwO09yKyspZnQuZHluX2R0cmVlWzIqT3JdPTA7Zm9yKE9yPTA7T3I8MTk7T3IrKylmdC5ibF90cmVlWzIqT3JdPTA7ZnQuZHluX2x0cmVlWzUxMl09MSxmdC5vcHRfbGVuPWZ0LnN0YXRpY19sZW49MCxmdC5sYXN0X2xpdD1mdC5tYXRjaGVzPTB9ZnVuY3Rp''@;'; put 'put ''b24gdW4oZnQpe2Z0LmJpX3ZhbGlkPjg/RmUoZnQsZnQuYmlfYnVmKTpmdC5iaV92YWxpZD4wJiYoZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT1mdC5iaV9idWYpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTB9ZnVuY3Rpb24gTXQoZnQsT3IsV3QsQXQpe3ZhciBSbj0yKk9yLHN0PTIq''@;'; put 'put ''V3Q7cmV0dXJuIGZ0W1JuXTxmdFtzdF18fGZ0W1JuXT09PWZ0W3N0XSYmQXRbT3JdPD1BdFtXdF19ZnVuY3Rpb24gRHQoZnQsT3IsV3Qpe2Zvcih2YXIgQXQ9ZnQuaGVhcFtXdF0sUm49V3Q8PDE7Um48PWZ0LmhlYXBfbGVuJiYoUm48ZnQuaGVhcF9sZW4mJk10KE9yLGZ0LmhlYXBbUm4rMV0s''@;'; put 'put ''ZnQuaGVhcFtSbl0sZnQuZGVwdGgpJiZSbisrLCFNdChPcixBdCxmdC5oZWFwW1JuXSxmdC5kZXB0aCkpOylmdC5oZWFwW1d0XT1mdC5oZWFwW1JuXSxXdD1SbixSbjw8PTE7ZnQuaGVhcFtXdF09QXR9ZnVuY3Rpb24gaXQoZnQsT3IsV3Qpe3ZhciBBdCxSbixVdCxyaSxzdD0wO2lmKDAhPT1m''@;'; put 'put ''dC5sYXN0X2xpdClkb3tBdD1mdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKnN0XTw8OHxmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKnN0KzFdLFJuPWZ0LnBlbmRpbmdfYnVmW2Z0LmxfYnVmK3N0XSxzdCsrLDA9PT1BdD9JZShmdCxSbixPcik6KEllKGZ0LChVdD13ZVtSbl0pKzI1NisxLE9y''@;'; put 'put ''KSwwIT09KHJpPUhbVXRdKSYmT2UoZnQsUm4tPVVlW1V0XSxyaSksSWUoZnQsVXQ9RGUoLS1BdCksV3QpLDAhPT0ocmk9altVdF0pJiZPZShmdCxBdC09SmVbVXRdLHJpKSl9d2hpbGUoc3Q8ZnQubGFzdF9saXQpO0llKGZ0LDI1NixPcil9ZnVuY3Rpb24gJGUoZnQsT3Ipe3ZhciBVdCxyaSxU''@;'; put 'put ''dCxXdD1Pci5keW5fdHJlZSxBdD1Pci5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsUm49T3Iuc3RhdF9kZXNjLmhhc19zdHJlZSxzdD1Pci5zdGF0X2Rlc2MuZWxlbXMsV2U9LTE7Zm9yKGZ0LmhlYXBfbGVuPTAsZnQuaGVhcF9tYXg9NTczLFV0PTA7VXQ8c3Q7VXQrKykwIT09V3RbMipVdF0/KGZ0''@;'; put 'put ''LmhlYXBbKytmdC5oZWFwX2xlbl09V2U9VXQsZnQuZGVwdGhbVXRdPTApOld0WzIqVXQrMV09MDtmb3IoO2Z0LmhlYXBfbGVuPDI7KVd0WzIqKFR0PWZ0LmhlYXBbKytmdC5oZWFwX2xlbl09V2U8Mj8rK1dlOjApXT0xLGZ0LmRlcHRoW1R0XT0wLGZ0Lm9wdF9sZW4tLSxSbiYmKGZ0LnN0YXRp''@;'; put 'put ''Y19sZW4tPUF0WzIqVHQrMV0pO2ZvcihPci5tYXhfY29kZT1XZSxVdD1mdC5oZWFwX2xlbj4+MTtVdD49MTtVdC0tKUR0KGZ0LFd0LFV0KTtUdD1zdDtkb3tVdD1mdC5oZWFwWzFdLGZ0LmhlYXBbMV09ZnQuaGVhcFtmdC5oZWFwX2xlbi0tXSxEdChmdCxXdCwxKSxyaT1mdC5oZWFwWzFdLGZ0''@;'; put 'put ''LmhlYXBbLS1mdC5oZWFwX21heF09VXQsZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1yaSxXdFsyKlR0XT1XdFsyKlV0XStXdFsyKnJpXSxmdC5kZXB0aFtUdF09KGZ0LmRlcHRoW1V0XT49ZnQuZGVwdGhbcmldP2Z0LmRlcHRoW1V0XTpmdC5kZXB0aFtyaV0pKzEsV3RbMipVdCsxXT1XdFsyKnJp''@;'; put 'put ''KzFdPVR0LGZ0LmhlYXBbMV09VHQrKyxEdChmdCxXdCwxKX13aGlsZShmdC5oZWFwX2xlbj49Mik7ZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1mdC5oZWFwWzFdLGZ1bmN0aW9uIEFlKGZ0LE9yKXt2YXIgVHQsbnIsaHQseHQsam4scm4sV3Q9T3IuZHluX3RyZWUsQXQ9T3IubWF4X2NvZGUsUm49''@;'; put 'put ''T3Iuc3RhdF9kZXNjLnN0YXRpY190cmVlLHN0PU9yLnN0YXRfZGVzYy5oYXNfc3RyZWUsVXQ9T3Iuc3RhdF9kZXNjLmV4dHJhX2JpdHMscmk9T3Iuc3RhdF9kZXNjLmV4dHJhX2Jhc2UsV2U9T3Iuc3RhdF9kZXNjLm1heF9sZW5ndGgsenQ9MDtmb3IoeHQ9MDt4dDw9amU7eHQrKylmdC5ibF9j''@;'; put 'put ''b3VudFt4dF09MDtmb3IoV3RbMipmdC5oZWFwW2Z0LmhlYXBfbWF4XSsxXT0wLFR0PWZ0LmhlYXBfbWF4KzE7VHQ8NTczO1R0KyspKHh0PVd0WzIqV3RbMioobnI9ZnQuaGVhcFtUdF0pKzFdKzFdKzEpPldlJiYoeHQ9V2UsenQrKyksV3RbMipucisxXT14dCwhKG5yPkF0KSYmKGZ0LmJsX2Nv''@;'; put 'put ''dW50W3h0XSsrLGpuPTAsbnI+PXJpJiYoam49VXRbbnItcmldKSxmdC5vcHRfbGVuKz0ocm49V3RbMipucl0pKih4dCtqbiksc3QmJihmdC5zdGF0aWNfbGVuKz1ybiooUm5bMipucisxXStqbikpKTtpZigwIT09enQpe2Rve2Zvcih4dD1XZS0xOzA9PT1mdC5ibF9jb3VudFt4dF07KXh0LS07''@;'; put 'put ''ZnQuYmxfY291bnRbeHRdLS0sZnQuYmxfY291bnRbeHQrMV0rPTIsZnQuYmxfY291bnRbV2VdLS0senQtPTJ9d2hpbGUoenQ+MCk7Zm9yKHh0PVdlOzAhPT14dDt4dC0tKWZvcihucj1mdC5ibF9jb3VudFt4dF07MCE9PW5yOykhKChodD1mdC5oZWFwWy0tVHRdKT5BdCkmJihXdFsyKmh0KzFd''@;'; put 'put ''IT09eHQmJihmdC5vcHRfbGVuKz0oeHQtV3RbMipodCsxXSkqV3RbMipodF0sV3RbMipodCsxXT14dCksbnItLSl9fShmdCxPciksX3QoV3QsV2UsZnQuYmxfY291bnQpfWZ1bmN0aW9uIHR0KGZ0LE9yLFd0KXt2YXIgQXQsc3QsUm49LTEsVXQ9T3JbMV0scmk9MCxXZT03LFR0PTQ7Zm9yKDA9''@;'; put 'put ''PT1VdCYmKFdlPTEzOCxUdD0zKSxPclsyKihXdCsxKSsxXT02NTUzNSxBdD0wO0F0PD1XdDtBdCsrKXN0PVV0LFV0PU9yWzIqKEF0KzEpKzFdLCEoKytyaTxXZSYmc3Q9PT1VdCkmJihyaTxUdD9mdC5ibF90cmVlWzIqc3RdKz1yaTowIT09c3Q/KHN0IT09Um4mJmZ0LmJsX3RyZWVbMipzdF0r''@;'; put 'put ''KyxmdC5ibF90cmVlWzMyXSsrKTpyaTw9MTA/ZnQuYmxfdHJlZVszNF0rKzpmdC5ibF90cmVlWzM2XSsrLHJpPTAsUm49c3QsMD09PVV0PyhXZT0xMzgsVHQ9Myk6c3Q9PT1VdD8oV2U9NixUdD0zKTooV2U9NyxUdD00KSl9ZnVuY3Rpb24gSGUoZnQsT3IsV3Qpe3ZhciBBdCxzdCxSbj0tMSxV''@;'; put 'put ''dD1PclsxXSxyaT0wLFdlPTcsVHQ9NDtmb3IoMD09PVV0JiYoV2U9MTM4LFR0PTMpLEF0PTA7QXQ8PVd0O0F0KyspaWYoc3Q9VXQsVXQ9T3JbMiooQXQrMSkrMV0sISgrK3JpPFdlJiZzdD09PVV0KSl7aWYocmk8VHQpZG97SWUoZnQsc3QsZnQuYmxfdHJlZSl9d2hpbGUoMCE9LS1yaSk7ZWxz''@;'; put 'put ''ZSAwIT09c3Q/KHN0IT09Um4mJihJZShmdCxzdCxmdC5ibF90cmVlKSxyaS0tKSxJZShmdCwxNixmdC5ibF90cmVlKSxPZShmdCxyaS0zLDIpKTpyaTw9MTA/KEllKGZ0LDE3LGZ0LmJsX3RyZWUpLE9lKGZ0LHJpLTMsMykpOihJZShmdCwxOCxmdC5ibF90cmVlKSxPZShmdCxyaS0xMSw3KSk7''@;'; put 'put ''cmk9MCxSbj1zdCwwPT09VXQ/KFdlPTEzOCxUdD0zKTpzdD09PVV0PyhXZT02LFR0PTMpOihXZT03LFR0PTQpfX12YXIgUHQ9ITE7ZnVuY3Rpb24gUXQoZnQsT3IsV3QsQXQpe09lKGZ0LDArKEF0PzE6MCksMyksZnVuY3Rpb24geXQoZnQsT3IsV3QsQXQpe3VuKGZ0KSxBdCYmKEZlKGZ0LFd0''@;'; put 'put ''KSxGZShmdCx+V3QpKSx6LmFycmF5U2V0KGZ0LnBlbmRpbmdfYnVmLGZ0LndpbmRvdyxPcixXdCxmdC5wZW5kaW5nKSxmdC5wZW5kaW5nKz1XdH0oZnQsT3IsV3QsITApfU8uX3RyX2luaXQ9ZnVuY3Rpb24gY2koZnQpe1B0fHwoZnVuY3Rpb24gbnQoKXt2YXIgZnQsT3IsV3QsQXQsUm4sc3Q9''@;'; put 'put ''bmV3IEFycmF5KGplKzEpO2ZvcihXdD0wLEF0PTA7QXQ8Mjg7QXQrKylmb3IoVWVbQXRdPVd0LGZ0PTA7ZnQ8MTw8SFtBdF07ZnQrKyl3ZVtXdCsrXT1BdDtmb3Iod2VbV3QtMV09QXQsUm49MCxBdD0wO0F0PDE2O0F0KyspZm9yKEplW0F0XT1SbixmdD0wO2Z0PDE8PGpbQXRdO2Z0Kyspc2Vb''@;'; put 'put ''Um4rK109QXQ7Zm9yKFJuPj49NztBdDwzMDtBdCsrKWZvcihKZVtBdF09Um48PDcsZnQ9MDtmdDwxPDxqW0F0XS03O2Z0Kyspc2VbMjU2K1JuKytdPUF0O2ZvcihPcj0wO09yPD1qZTtPcisrKXN0W09yXT0wO2ZvcihmdD0wO2Z0PD0xNDM7KWFlWzIqZnQrMV09OCxmdCsrLHN0WzhdKys7Zm9y''@;'; put 'put ''KDtmdDw9MjU1OylhZVsyKmZ0KzFdPTksZnQrKyxzdFs5XSsrO2Zvcig7ZnQ8PTI3OTspYWVbMipmdCsxXT03LGZ0Kyssc3RbN10rKztmb3IoO2Z0PD0yODc7KWFlWzIqZnQrMV09OCxmdCsrLHN0WzhdKys7Zm9yKF90KGFlLDI4NyxzdCksZnQ9MDtmdDwzMDtmdCsrKXRlWzIqZnQrMV09NSx0''@;'; put 'put ''ZVsyKmZ0XT1WZShmdCw1KTt4ZT1uZXcgb3QoYWUsSCwyNTcsMjg2LGplKSx2ZT1uZXcgb3QodGUsaiwwLDMwLGplKSxYZT1uZXcgb3QobmV3IEFycmF5KDApLEUsMCwxOSw3KX0oKSxQdD0hMCksZnQubF9kZXNjPW5ldyB6ZShmdC5keW5fbHRyZWUseGUpLGZ0LmRfZGVzYz1uZXcgemUoZnQu''@;'; put 'put ''ZHluX2R0cmVlLHZlKSxmdC5ibF9kZXNjPW5ldyB6ZShmdC5ibF90cmVlLFhlKSxmdC5iaV9idWY9MCxmdC5iaV92YWxpZD0wLFFlKGZ0KX0sTy5fdHJfc3RvcmVkX2Jsb2NrPVF0LE8uX3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9uIFJpKGZ0LE9yLFd0LEF0KXt2YXIgUm4sc3QsVXQ9MDtmdC5s''@;'; put 'put ''ZXZlbD4wPygyPT09ZnQuc3RybS5kYXRhX3R5cGUmJihmdC5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbiBSdChmdCl7dmFyIFd0LE9yPTQwOTM2MjQ0NDc7Zm9yKFd0PTA7V3Q8PTMxO1d0KyssT3I+Pj49MSlpZigxJk9yJiYwIT09ZnQuZHluX2x0cmVlWzIqV3RdKXJldHVybiAwO2lmKDAhPT1m''@;'; put 'put ''dC5keW5fbHRyZWVbMThdfHwwIT09ZnQuZHluX2x0cmVlWzIwXXx8MCE9PWZ0LmR5bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKFd0PTMyO1d0PDI1NjtXdCsrKWlmKDAhPT1mdC5keW5fbHRyZWVbMipXdF0pcmV0dXJuIDE7cmV0dXJuIDB9KGZ0KSksJGUoZnQsZnQubF9kZXNjKSwkZShmdCxm''@;'; put 'put ''dC5kX2Rlc2MpLFV0PWZ1bmN0aW9uIHV0KGZ0KXt2YXIgT3I7Zm9yKHR0KGZ0LGZ0LmR5bl9sdHJlZSxmdC5sX2Rlc2MubWF4X2NvZGUpLHR0KGZ0LGZ0LmR5bl9kdHJlZSxmdC5kX2Rlc2MubWF4X2NvZGUpLCRlKGZ0LGZ0LmJsX2Rlc2MpLE9yPTE4O09yPj0zJiYwPT09ZnQuYmxfdHJlZVsy''@;'; put 'put ''Km1bT3JdKzFdO09yLS0pO3JldHVybiBmdC5vcHRfbGVuKz0zKihPcisxKSs1KzUrNCxPcn0oZnQpLChzdD1mdC5zdGF0aWNfbGVuKzMrNz4+PjMpPD0oUm49ZnQub3B0X2xlbiszKzc+Pj4zKSYmKFJuPXN0KSk6Um49c3Q9V3QrNSxXdCs0PD1SbiYmLTEhPT1Pcj9RdChmdCxPcixXdCxBdCk6''@;'; put 'put ''ND09PWZ0LnN0cmF0ZWd5fHxzdD09PVJuPyhPZShmdCwyKyhBdD8xOjApLDMpLGl0KGZ0LGFlLHRlKSk6KE9lKGZ0LDQrKEF0PzE6MCksMyksZnVuY3Rpb24gcXQoZnQsT3IsV3QsQXQpe3ZhciBSbjtmb3IoT2UoZnQsT3ItMjU3LDUpLE9lKGZ0LFd0LTEsNSksT2UoZnQsQXQtNCw0KSxSbj0w''@;'; put 'put ''O1JuPEF0O1JuKyspT2UoZnQsZnQuYmxfdHJlZVsyKm1bUm5dKzFdLDMpO0hlKGZ0LGZ0LmR5bl9sdHJlZSxPci0xKSxIZShmdCxmdC5keW5fZHRyZWUsV3QtMSl9KGZ0LGZ0LmxfZGVzYy5tYXhfY29kZSsxLGZ0LmRfZGVzYy5tYXhfY29kZSsxLFV0KzEpLGl0KGZ0LGZ0LmR5bl9sdHJlZSxm''@;'; put 'put ''dC5keW5fZHRyZWUpKSxRZShmdCksQXQmJnVuKGZ0KX0sTy5fdHJfdGFsbHk9ZnVuY3Rpb24gaG4oZnQsT3IsV3Qpe3JldHVybiBmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKmZ0Lmxhc3RfbGl0XT1Pcj4+PjgmMjU1LGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqZnQubGFzdF9saXQrMV09''@;'; put 'put ''MjU1Jk9yLGZ0LnBlbmRpbmdfYnVmW2Z0LmxfYnVmK2Z0Lmxhc3RfbGl0XT0yNTUmV3QsZnQubGFzdF9saXQrKywwPT09T3I/ZnQuZHluX2x0cmVlWzIqV3RdKys6KGZ0Lm1hdGNoZXMrKyxPci0tLGZ0LmR5bl9sdHJlZVsyKih3ZVtXdF0rMjU2KzEpXSsrLGZ0LmR5bl9kdHJlZVsyKkRlKE9y''@;'; put 'put ''KV0rKyksZnQubGFzdF9saXQ9PT1mdC5saXRfYnVmc2l6ZS0xfSxPLl90cl9hbGlnbj1mdW5jdGlvbiBzbihmdCl7T2UoZnQsMiwzKSxJZShmdCwyNTYsYWUpLGZ1bmN0aW9uIGtlKGZ0KXsxNj09PWZ0LmJpX3ZhbGlkPyhGZShmdCxmdC5iaV9idWYpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlk''@;'; put 'put ''PTApOmZ0LmJpX3ZhbGlkPj04JiYoZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT0yNTUmZnQuYmlfYnVmLGZ0LmJpX2J1Zj4+PTgsZnQuYmlfdmFsaWQtPTgpfShmdCl9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6Mjd9XSwzOTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtGLmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24geigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0''@;'; put 'put ''YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9fSx7fV19LHt9LFs5XSkoOSl9KX0sNjM1Nzg6KHVlLFgseSk9PnshZnVuY3Rpb24gXyh3KXt3LnZlcnNpb249IjEuMjAyMTExMjIuMSI7dmFyIFA9MTIwMCxGPTEyNTI7dHlwZW9mIGNwdGFibGU+InUiJiYodHlwZW9mIGds''@;'; put 'put ''b2JhbDwidSI/Z2xvYmFsLmNwdGFibGU9eSg0MjkyNCk6dHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuY3B0YWJsZT15KDQyOTI0KSkpO2Zvcih2YXIgTz1bODc0LDkzMiw5MzYsOTQ5LDk1MCwxZTRdLHo9MDt6PD04OysreilPLnB1c2goMTI1MCt6KTt2YXIgTj17MDoxMjUyLDE6NjUwMDEs''@;'; put 'put ''Mjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEzMDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LEw9ZnVuY3Rpb24o''@;'; put 'put ''Uyl7LTEhPU8uaW5kZXhPZihTKSYmKEY9TlswXT1TKX0sVT1mdW5jdGlvbihTKXtQPVMsTChTKX07ZnVuY3Rpb24gVygpe1UoMTIwMCksZnVuY3Rpb24gSygpe0woMTI1Mil9KCl9ZnVuY3Rpb24gWShTKXtmb3IodmFyIFI9W10saz0wLEc9Uy5sZW5ndGg7azxHOysraylSW2tdPVMuY2hhckNv''@;'; put 'put ''ZGVBdChrKTtyZXR1cm4gUn12YXIgSj1mdW5jdGlvbihTKXt2YXIgUj1TLmNoYXJDb2RlQXQoMCksaz1TLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09UiYmMjU0PT1rP2Z1bmN0aW9uIHEoUyl7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoPj4xOysraylSW2tdPVN0cmluZy5mcm9tQ2hh''@;'; put 'put ''ckNvZGUoUy5jaGFyQ29kZUF0KDIqaykrKFMuY2hhckNvZGVBdCgyKmsrMSk8PDgpKTtyZXR1cm4gUi5qb2luKCIiKX0oUy5zbGljZSgyKSk6MjU0PT1SJiYyNTU9PWs/ZnVuY3Rpb24gZWUoUyl7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoPj4xOysraylSW2tdPVN0cmluZy5mcm9tQ2hh''@;'; put 'put ''ckNvZGUoUy5jaGFyQ29kZUF0KDIqaysxKSsoUy5jaGFyQ29kZUF0KDIqayk8PDgpKTtyZXR1cm4gUi5qb2luKCIiKX0oUy5zbGljZSgyKSk6NjUyNzk9PVI/Uy5zbGljZSgxKTpTfSxuZT1mdW5jdGlvbihSKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShSKX0saWU9ZnVuY3Rpb24oUil7''@;'; put 'put ''cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoUil9O3R5cGVvZiBjcHRhYmxlPCJ1IiYmKFU9ZnVuY3Rpb24oUyl7UD1TLEwoUyl9LEo9ZnVuY3Rpb24oUyl7cmV0dXJuIDI1NT09PVMuY2hhckNvZGVBdCgwKSYmMjU0PT09Uy5jaGFyQ29kZUF0KDEpP2NwdGFibGUudXRpbHMuZGVjb2RlKDEy''@;'; put 'put ''MDAsWShTLnNsaWNlKDIpKSk6U30sbmU9ZnVuY3Rpb24oUil7cmV0dXJuIDEyMDA9PT1QP1N0cmluZy5mcm9tQ2hhckNvZGUoUik6Y3B0YWJsZS51dGlscy5kZWNvZGUoUCxbMjU1JlIsUj4+OF0pWzBdfSxpZT1mdW5jdGlvbihSKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoRixbUl0p''@;'; put 'put ''WzBdfSk7dmFyIGxlPW51bGwsX2U9ZnVuY3Rpb24oKXt2YXIgUj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO3JldHVybntlbmNvZGU6ZnVuY3Rpb24oayl7Zm9yKHZhciBHPSIiLFE9MCxvZT0wLGdlPTAscGU9MCx5''@;'; put 'put ''ZT0wLFBlPTAsTmU9MCxZZT0wO1llPGsubGVuZ3RoOylwZT0oUT1rLmNoYXJDb2RlQXQoWWUrKykpPj4yLHllPSgzJlEpPDw0fChvZT1rLmNoYXJDb2RlQXQoWWUrKykpPj40LFBlPSgxNSZvZSk8PDJ8KGdlPWsuY2hhckNvZGVBdChZZSsrKSk+PjYsTmU9NjMmZ2UsaXNOYU4ob2UpP1BlPU5l''@;'; put 'put ''PTY0OmlzTmFOKGdlKSYmKE5lPTY0KSxHKz1SLmNoYXJBdChwZSkrUi5jaGFyQXQoeWUpK1IuY2hhckF0KFBlKStSLmNoYXJBdChOZSk7cmV0dXJuIEd9LGRlY29kZTpmdW5jdGlvbihHKXt2YXIgUT0iIix5ZT0wLFBlPTAsTmU9MCxZZT0wO0c9Ry5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIi''@;'; put 'put ''KTtmb3IodmFyIGV0PTA7ZXQ8Ry5sZW5ndGg7KXllPVIuaW5kZXhPZihHLmNoYXJBdChldCsrKSksUGU9Ui5pbmRleE9mKEcuY2hhckF0KGV0KyspKSxRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHllPDwyfFBlPj40KSw2NCE9PShOZT1SLmluZGV4T2YoRy5jaGFyQXQoZXQrKykpKSYmKFErPVN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoKDE1JlBlKTw8NHxOZT4+MikpLDY0IT09KFllPVIuaW5kZXhPZihHLmNoYXJBdChldCsrKSkpJiYoUSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMyZOZSk8PDZ8WWUpKTtyZXR1cm4gUX19fSgpLFRlPXR5cGVvZiBCdWZmZXI8InUiJiZ0eXBlb2YgcHJvY2Vzczwi''@;'; put 'put ''dSImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPCJ1IiYmISFwcm9jZXNzLnZlcnNpb25zLm5vZGUsU2U9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgamU9IUJ1ZmZlci5mcm9tO2lmKCFqZSl0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtqZT0hMH1T''@;'; put 'put ''ZT1qZT9mdW5jdGlvbihTLFIpe3JldHVybiBSP25ldyBCdWZmZXIoUyxSKTpuZXcgQnVmZmVyKFMpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jfHwoQnVmZmVyLmFsbG9jPWZ1bmN0aW9uKFMpe3JldHVybiBuZXcgQnVmZmVyKFMpfSksQnVmZmVyLmFsbG9jVW5zYWZl''@;'; put 'put ''fHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKFMpe3JldHVybiBuZXcgQnVmZmVyKFMpfSl9ZnVuY3Rpb24gVihTKXtyZXR1cm4gVGU/QnVmZmVyLmFsbG9jKFMpOm5ldyBBcnJheShTKX1mdW5jdGlvbiBwKFMpe3JldHVybiBUZT9CdWZmZXIuYWxsb2NVbnNhZmUoUyk6bmV3IEFycmF5''@;'; put 'put ''KFMpfXZhciBiPWZ1bmN0aW9uKFIpe3JldHVybiBUZT9TZShSLCJiaW5hcnkiKTpSLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIDI1NSZrLmNoYXJDb2RlQXQoMCl9KX07ZnVuY3Rpb24geChTKXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXJldHVybiBiKFMpO2Zvcih2YXIg''@;'; put 'put ''Uj1uZXcgQXJyYXlCdWZmZXIoUy5sZW5ndGgpLGs9bmV3IFVpbnQ4QXJyYXkoUiksRz0wO0chPVMubGVuZ3RoOysrRylrW0ddPTI1NSZTLmNoYXJDb2RlQXQoRyk7cmV0dXJuIFJ9ZnVuY3Rpb24gQyhTKXtpZihBcnJheS5pc0FycmF5KFMpKXJldHVybiBTLm1hcChmdW5jdGlvbihHKXtyZXR1''@;'; put 'put ''cm4gU3RyaW5nLmZyb21DaGFyQ29kZShHKX0pLmpvaW4oIiIpO2Zvcih2YXIgUj1bXSxrPTA7azxTLmxlbmd0aDsrK2spUltrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKFNba10pO3JldHVybiBSLmpvaW4oIiIpfWZ1bmN0aW9uIEgoUyl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7aWYoUyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBIKG5ldyBVaW50OEFycmF5KFMpKTtmb3IodmFyIFI9bmV3IEFycmF5KFMubGVuZ3RoKSxrPTA7azxTLmxlbmd0aDsrK2spUltrXT1TW2tdO3JldHVybiBSfXZhciBqPWZ1bmN0aW9uKFMp''@;'; put 'put ''e3ZhciBSPVtdO3JldHVybiBTLmZvckVhY2goZnVuY3Rpb24oayl7QXJyYXkuaXNBcnJheShrKT9SPVIuY29uY2F0KGspOih0eXBlb2YgVWludDhBcnJheTwidSImJmsgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZrIGluc3RhbmNlb2YgQXJyYXlCdWZm''@;'; put 'put ''ZXIpJiYoUj1SLmNvbmNhdChIKGspKSl9KSxSfSxFPS9cdTAwMDAvZyxtPS9bXHUwMDAxLVx1MDAwNl0vZyxBPXt9LGFlPWZ1bmN0aW9uKFIpe2Z1bmN0aW9uIGsobG4pe2Zvcih2YXIgRW49IiIsVW49bG4ubGVuZ3RoLTE7VW4+PTA7KUVuKz1sbi5jaGFyQXQoVW4tLSk7cmV0dXJuIEVufWZ1''@;'; put 'put ''bmN0aW9uIEcobG4sRW4pe2Zvcih2YXIgVW49IiI7VW4ubGVuZ3RoPEVuOylVbis9bG47cmV0dXJuIFVufWZ1bmN0aW9uIFEobG4sRW4pe3ZhciBVbj0iIitsbjtyZXR1cm4gVW4ubGVuZ3RoPj1Fbj9VbjpHKCIwIixFbi1Vbi5sZW5ndGgpK1VufWZ1bmN0aW9uIG9lKGxuLEVuKXt2YXIgVW49''@;'; put 'put ''IiIrbG47cmV0dXJuIFVuLmxlbmd0aD49RW4/VW46RygiICIsRW4tVW4ubGVuZ3RoKStVbn1mdW5jdGlvbiBnZShsbixFbil7dmFyIFVuPSIiK2xuO3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOlVuK0coIiAiLEVuLVVuLmxlbmd0aCl9Ui52ZXJzaW9uPSIxLjIwMjEwNzI2LjEiO3ZhciBQZT1N''@;'; put 'put ''YXRoLnBvdygyLDMyKTtmdW5jdGlvbiBOZShsbixFbil7cmV0dXJuIGxuPlBlfHxsbjwtUGU/ZnVuY3Rpb24gcGUobG4sRW4pe3ZhciBVbj0iIitNYXRoLnJvdW5kKGxuKTtyZXR1cm4gVW4ubGVuZ3RoPj1Fbj9VbjpHKCIwIixFbi1Vbi5sZW5ndGgpK1VufShsbixFbik6ZnVuY3Rpb24geWUo''@;'; put 'put ''bG4sRW4pe3ZhciBVbj0iIitsbjtyZXR1cm4gVW4ubGVuZ3RoPj1Fbj9VbjpHKCIwIixFbi1Vbi5sZW5ndGgpK1VufShNYXRoLnJvdW5kKGxuKSxFbil9ZnVuY3Rpb24gWWUobG4sRW4pe3JldHVybiBsbi5sZW5ndGg+PTcrKEVuPUVufHwwKSYmMTAzPT0oMzJ8bG4uY2hhckNvZGVBdChFbikp''@;'; put 'put ''JiYxMDE9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzEpKSYmMTEwPT0oMzJ8bG4uY2hhckNvZGVBdChFbisyKSkmJjEwMT09KDMyfGxuLmNoYXJDb2RlQXQoRW4rMykpJiYxMTQ9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzQpKSYmOTc9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzUpKSYmMTA4PT0oMzJ8''@;'; put 'put ''bG4uY2hhckNvZGVBdChFbis2KSl9ZnVuY3Rpb24gZXQobG4pe2Zvcih2YXIgRW49W10sVW49T2JqZWN0LmtleXMobG4pLHhpPTA7eGkhPT1Vbi5sZW5ndGg7Kyt4aSlFbltsbltVblt4aV1dXT1Vblt4aV07cmV0dXJuIEVufXZhciBjdD1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRh''@;'; put 'put ''eSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwiV2VkbmVzZGF5Il0sWyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxFdD1bWyJKIiwiSmFuIiwiSmFudWFyeSJdLFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2gi''@;'; put 'put ''XSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1heSIsIk1heSJdLFsiSiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0sWyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVy''@;'; put 'put ''Il0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV07ZnVuY3Rpb24gYXQobG4pe2xuWzBdPSJHZW5lcmFsIixsblsxXT0iMCIsbG5bMl09IjAuMDAiLGxuWzNdPSIjLCMjMCIsbG5bNF09IiMsIyMwLjAwIixsbls5XT0iMCUiLGxuWzEwXT0iMC4wMCUiLGxuWzExXT0iMC4wMEUrMDAiLGxuWzEyXT0i''@;'; put 'put ''IyA/Lz8iLGxuWzEzXT0iIyA/Py8/PyIsbG5bMTRdPSJtL2QveXkiLGxuWzE1XT0iZC1tbW0teXkiLGxuWzE2XT0iZC1tbW0iLGxuWzE3XT0ibW1tLXl5IixsblsxOF09Img6bW0gQU0vUE0iLGxuWzE5XT0iaDptbTpzcyBBTS9QTSIsbG5bMjBdPSJoOm1tIixsblsyMV09Img6bW06c3MiLGxu''@;'; put 'put ''WzIyXT0ibS9kL3l5IGg6bW0iLGxuWzM3XT0iIywjIzAgOygjLCMjMCkiLGxuWzM4XT0iIywjIzAgO1tSZWRdKCMsIyMwKSIsbG5bMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixsbls0MF09IiMsIyMwLjAwO1tSZWRdKCMsIyMwLjAwKSIsbG5bNDVdPSJtbTpzcyIsbG5bNDZdPSJbaF06bW06''@;'; put 'put ''c3MiLGxuWzQ3XT0ibW1zcy4wIixsbls0OF09IiMjMC4wRSswIixsbls0OV09IkAiLGxuWzU2XT0nIlx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggImhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyICInLEZuKGxuKX12YXIgYnQ9e307YXQoYnQpO3ZhciBqdD1bXSxrdD0wO2ZvcihrdD01''@;'; put 'put ''O2t0PD04Oysra3QpanRba3RdPTMyK2t0O2ZvcihrdD0yMztrdDw9MjY7KytrdClqdFtrdF09MDtmb3Ioa3Q9Mjc7a3Q8PTMxOysra3QpanRba3RdPTE0O2ZvcihrdD01MDtrdDw9NTg7KytrdClqdFtrdF09MTQ7Zm9yKGt0PTU5O2t0PD02MjsrK2t0KWp0W2t0XT1rdC01ODtmb3Ioa3Q9Njc7''@;'; put 'put ''a3Q8PTY4Oysra3QpanRba3RdPWt0LTU4O2ZvcihrdD03MjtrdDw9NzU7KytrdClqdFtrdF09a3QtNTg7Zm9yKGt0PTY3O2t0PD02ODsrK2t0KWp0W2t0XT1rdC01Nztmb3Ioa3Q9NzY7a3Q8PTc4Oysra3QpanRba3RdPWt0LTU2O2ZvcihrdD03OTtrdDw9ODE7KytrdClqdFtrdF09a3QtMzQ7''@;'; put 'put ''dmFyIE90PVtdO2Z1bmN0aW9uIEt0KGxuLEVuLFVuKXtmb3IodmFyIHhpPWxuPDA/LTE6MSxvcj1sbip4aSxPaT0wLFNyPTEsUGk9MCxaYT0xLEhpPTAsbWE9MCxEaT1NYXRoLmZsb29yKG9yKTtIaTxFbiYmKFBpPShEaT1NYXRoLmZsb29yKG9yKSkqU3IrT2ksbWE9RGkqSGkrWmEsIShvci1E''@;'; put 'put ''aTw1ZS04KSk7KW9yPTEvKG9yLURpKSxPaT1TcixTcj1QaSxaYT1IaSxIaT1tYTtpZihtYT5FbiYmKEhpPkVuPyhtYT1aYSxQaT1PaSk6KG1hPUhpLFBpPVNyKSksIVVuKXJldHVyblswLHhpKlBpLG1hXTt2YXIgY3M9TWF0aC5mbG9vcih4aSpQaS9tYSk7cmV0dXJuW2NzLHhpKlBpLWNzKm1h''@;'; put 'put ''LG1hXX1mdW5jdGlvbiBUbihsbixFbixVbil7aWYobG4+Mjk1ODQ2NXx8bG48MClyZXR1cm4gbnVsbDt2YXIgeGk9MHxsbixvcj1NYXRoLmZsb29yKDg2NDAwKihsbi14aSkpLE9pPTAsU3I9W10sUGk9e0Q6eGksVDpvcix1Ojg2NDAwKihsbi14aSktb3IseTowLG06MCxkOjAsSDowLE06MCxT''@;'; put 'put ''OjAscTowfTtpZihNYXRoLmFicyhQaS51KTwxZS02JiYoUGkudT0wKSxFbiYmRW4uZGF0ZTE5MDQmJih4aSs9MTQ2MiksUGkudT4uOTk5OSYmKFBpLnU9MCw4NjQwMD09KytvciYmKFBpLlQ9b3I9MCwrK3hpLCsrUGkuRCkpLDYwPT09eGkpU3I9VW4/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjld''@;'; put 'put ''LE9pPTM7ZWxzZSBpZigwPT09eGkpU3I9VW4/WzEzMTcsOCwyOV06WzE5MDAsMSwwXSxPaT02O2Vsc2V7eGk+NjAmJi0teGk7dmFyIFphPW5ldyBEYXRlKDE5MDAsMCwxKTtaYS5zZXREYXRlKFphLmdldERhdGUoKSt4aS0xKSxTcj1bWmEuZ2V0RnVsbFllYXIoKSxaYS5nZXRNb250aCgpKzEs''@;'; put 'put ''WmEuZ2V0RGF0ZSgpXSxPaT1aYS5nZXREYXkoKSx4aTw2MCYmKE9pPShPaSs2KSU3KSxVbiYmKE9pPWZ1bmN0aW9uIHNvKGxuLEVuKXtFblswXS09NTgxO3ZhciBVbj1sbi5nZXREYXkoKTtyZXR1cm4gbG48NjAmJihVbj0oVW4rNiklNyksVW59KFphLFNyKSl9cmV0dXJuIFBpLnk9U3JbMF0s''@;'; put 'put ''UGkubT1TclsxXSxQaS5kPVNyWzJdLFBpLlM9b3IlNjAsb3I9TWF0aC5mbG9vcihvci82MCksUGkuTT1vciU2MCxvcj1NYXRoLmZsb29yKG9yLzYwKSxQaS5IPW9yLFBpLnE9T2ksUGl9T3RbNV09T3RbNjNdPSciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyxPdFs2XT1PdFs2NF09JyIkIiMs''@;'; put 'put ''IyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsT3RbN109T3RbNjVdPSciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyxPdFs4XT1PdFs2Nl09JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsT3RbNDFdPSdfKCogIywjIzBfKTtfKCogXFwoIywjIzBcXCk7Xygq''@;'; put 'put ''ICItIl8pO18oQF8pJyxPdFs0Ml09J18oIiQiKiAjLCMjMF8pO18oIiQiKiBcXCgjLCMjMFxcKTtfKCIkIiogIi0iXyk7XyhAXyknLE90WzQzXT0nXygqICMsIyMwLjAwXyk7XygqIFxcKCMsIyMwLjAwXFwpO18oKiAiLSI/P18pO18oQF8pJyxPdFs0NF09J18oIiQiKiAjLCMjMC4wMF8pO18o''@;'; put 'put ''IiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsUi5wYXJzZV9kYXRlX2NvZGU9VG47dmFyIHJyPW5ldyBEYXRlKDE4OTksMTEsMzEsMCwwLDApLFNuPXJyLmdldFRpbWUoKSxscj1uZXcgRGF0ZSgxOTAwLDIsMSwwLDAsMCk7ZnVuY3Rpb24gWG4obG4sRW4pe3ZhciBV''@;'; put 'put ''bj1sbi5nZXRUaW1lKCk7cmV0dXJuIEVuP1VuLT0xMjYyMzA0ZTU6bG4+PWxyJiYoVW4rPTg2NGU1KSwoVW4tKFNuKzZlNCoobG4uZ2V0VGltZXpvbmVPZmZzZXQoKS1yci5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fXZhciBCbj0iIixmcj17ImVuLXVzIjp7eToieSIsZDoiZCIsIiwi''@;'; put 'put ''OiIsIiwiLiI6Ii4iLGRhdGU6Il8vIn0sImRlLWRlIjp7eToiaiIsZDoidCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8uIn0sIml0LWl0Ijp7eToieSIsZDoiZCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8vIn19LGJyPWZyW0JuLnRvTG93ZXJDYXNlKCldfHxmclsiZW4tdXMiXSxlcj1ldChi''@;'; put 'put ''ciksTWk9IiQiLEZpPSIiLExpPSIsIixrcj0iLiIsVm49Ii8iO2Z1bmN0aW9uIEZuKGxuKXtzd2l0Y2goKEJufHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ6aC10dyI6bG5bMjddPSJbJC00MDRdZS9tL2QiLGxuWzI4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5b''@;'; put 'put ''MjldPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMF09J20iLyJkIi8ieXknLGxuWzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMl09J2hoIlx1NjY0MiJtbSJcdTUyMDYiJyxsblszM109J2hoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3''@;'; put 'put ''OWQyIicsbG5bMzRdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxsblszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNl09IlskLTQwNF1lL20vZCIsbG5bNTBdPSJbJC00MDRd''@;'; put 'put ''ZS9tL2QiLGxuWzUxXT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTJdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxsbls1M109J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJc''@;'; put 'put ''dTc5ZDIiJyxsbls1NF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsbG5bNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3Mi''@;'; put 'put ''XHU3OWQyIicsbG5bNTddPSJbJC00MDRdZS9tL2QiLGxuWzU4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJ6aC1jbiI6bG5bMjddPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzI4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsblsyOV09J20iXHU2''@;'; put 'put ''NzA4ImQiXHU2NWU1IicsbG5bMzBdPSdtIi0iZCItInl5JyxsblszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bMzJdPSdoIlx1NjVmNiJtbSJcdTUyMDYiJyxsblszM109J2giXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNF09J1x1NGUwYVx1NTM0OC9c''@;'; put 'put ''dTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsbG5bMzVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNl09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTBdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzUx''@;'; put 'put ''XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU0XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1NV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2Iics''@;'; put 'put ''bG5bNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsbls1N109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNThdPSdtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2UiamEtanAiOmxuWzI3XT0nWyQtNDExXWdlIi4ibSIu''@;'; put 'put ''ImQnLGxuWzI4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bMjldPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMF09J20iLyJkIi8ieXknLGxuWzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMl09''@;'; put 'put ''J2giXHU2NjQyIm1tIlx1NTIwNiInLGxuWzMzXT0naCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM0XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsblszNV09J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bMzZdPSdbJC00MTFdZ2UiLiJtIi4iZCcsbG5bNTBdPSdbJC00MTFdZ2Ui''@;'; put 'put ''LiJtIi4iZCcsbG5bNTFdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU0XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5b''@;'; put 'put ''NTVdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzU2XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1N109J1skLTQxMV1nZSIuIm0iLiJkJyxsbls1OF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2Uia28ta3IiOmxuWzI3XT0neXl5eSJcdTVl''@;'; put 'put ''NzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsbG5bMjhdPSJtbS1kZCIsbG5bMjldPSJtbS1kZCIsbG5bMzBdPSJtbS1kZC15eSIsbG5bMzFdPSd5eXl5Ilx1YjE0NCIgbW0iXHVjNmQ0IiBkZCJcdWM3N2MiJyxsblszMl09J2giXHVjMmRjIiBtbSJcdWJkODQiJyxsblszM109J2giXHVjMmRj''@;'; put 'put ''IiBtbSJcdWJkODQiIHNzIlx1Y2QwOCInLGxuWzM0XT0ieXl5eS1tbS1kZCIsbG5bMzVdPSJ5eXl5LW1tLWRkIixsblszNl09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGxuWzUwXT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsbG5bNTFdPSJtbS1k''@;'; put 'put ''ZCIsbG5bNTJdPSJ5eXl5LW1tLWRkIixsbls1M109Inl5eXktbW0tZGQiLGxuWzU0XT0ibW0tZGQiLGxuWzU1XT0ieXl5eS1tbS1kZCIsbG5bNTZdPSJ5eXl5LW1tLWRkIixsbls1N109J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGxuWzU4XT0ibW0tZGQiO2JyZWFrO2Nh''@;'; put 'put ''c2UidGgtdGgiOmxuWzU5XT0nInQiMCcsbG5bNjBdPScidCIwLjAwJyxsbls2MV09JyJ0IiMsIyMwJyxsbls2Ml09JyJ0IiMsIyMwLjAwJyxsbls2N109InQwJSIsbG5bNjhdPSJ0MC4wMCUiLGxuWzY5XT0idCMgPy8/Iixsbls3MF09InQjID8/Lz8/Iixsbls3MV09J1x1MGUyNyIvIlx1MGUx''@;'; put 'put ''NCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYicsbG5bNzJdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLGxuWzczXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0Jyxsbls3NF09J1x1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsbG5b''@;'; put 'put ''NzVdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTknLGxuWzc2XT0nXHUwZTBhIjoiXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyxsbls3N109J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYiBcdTBlMGEiOiJcdTBlMTlcdTBlMTknLGxuWzc4XT0nXHUwZTE5XHUw''@;'; put 'put ''ZTE5IjoiXHUwZTE3XHUwZTE3Jyxsbls3OV09J1tcdTBlMGFdXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyxsbls4MF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNy4wJyxsbls4MV09ImQvbS9iYiJ9fVIuX2dlbmVyYWxfaW50PWZ1bmN0aW9uIFppKGxuKXtyZXR1cm4gbG4udG9T''@;'; put 'put ''dHJpbmcoMTApfTt2YXIgeWk9ZnVuY3Rpb24oKXt2YXIgRW49Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC87ZnVuY3Rpb24gVW4oSGkpe3JldHVybi0xPT1IaS5pbmRleE9mKCIuIik/SGk6SGkucmVwbGFjZShFbiwiJDEiKX12YXIgeGk9Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspW0VlXS8s''@;'; put 'put ''b3I9LyhFWystXSkoXGQpJC87cmV0dXJuIGZ1bmN0aW9uKG1hKXt2YXIgRGk9ZnVuY3Rpb24gWmEoSGkpe3ZhciBEaSxtYT1NYXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKEhpKSkqTWF0aC5MT0cxMEUpO3JldHVybiBEaT1tYT49LTQmJm1hPD0tMT9IaS50b1ByZWNpc2lvbigxMCttYSk6''@;'; put 'put ''TWF0aC5hYnMobWEpPD05P2Z1bmN0aW9uIFNyKEhpKXt2YXIgbWE9SGk8MD8xMjoxMSxEaT1VbihIaS50b0ZpeGVkKDEyKSk7cmV0dXJuIERpLmxlbmd0aDw9bWF8fChEaT1IaS50b1ByZWNpc2lvbigxMCkpLmxlbmd0aDw9bWE/RGk6SGkudG9FeHBvbmVudGlhbCg1KX0oSGkpOjEwPT09bWE/''@;'; put 'put ''SGkudG9GaXhlZCgxMCkuc3Vic3RyKDAsMTIpOmZ1bmN0aW9uIFBpKEhpKXt2YXIgbWE9VW4oSGkudG9GaXhlZCgxMSkpO3JldHVybiBtYS5sZW5ndGg+KEhpPDA/MTI6MTEpfHwiMCI9PT1tYXx8Ii0wIj09PW1hP0hpLnRvUHJlY2lzaW9uKDYpOm1hfShIaSksVW4oZnVuY3Rpb24gT2koSGkp''@;'; put 'put ''e3JldHVybi0xPT1IaS5pbmRleE9mKCJFIik/SGk6SGkucmVwbGFjZSh4aSwiJDFFIikucmVwbGFjZShvciwiJDEwJDIiKX0oRGkudG9VcHBlckNhc2UoKSkpfShtYSk7cmV0dXJuIiwiPT09TGkmJiIuIj09PWtyP0RpOkRpLnJlcGxhY2UoL1ssLl0vZyxmdW5jdGlvbihjcyl7cmV0dXJuIiwi''@;'; put 'put ''PT1jcz9MaTprcn0pfX0oKTtmdW5jdGlvbiBfYShsbixFbil7c3dpdGNoKHR5cGVvZiBsbil7Y2FzZSJzdHJpbmciOnJldHVybiBsbjtjYXNlImJvb2xlYW4iOnJldHVybiBsbj8iVFJVRSI6IkZBTFNFIjtjYXNlIm51bWJlciI6cmV0dXJuKDB8bG4pPT09bG4/bG4udG9TdHJpbmcoMTApOnlp''@;'; put 'put ''KGxuKTtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIiI7Y2FzZSJvYmplY3QiOmlmKG51bGw9PWxuKXJldHVybiIiO2lmKGxuIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4geXUoMTQsWG4obG4sRW4mJkVuLmRhdGUxOTA0KSxFbil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBpbiBH''@;'; put 'put ''ZW5lcmFsIGZvcm1hdDogIitsbil9Ui5fZ2VuZXJhbF9udW09eWksUi5fZ2VuZXJhbD1fYTt2YXIgaWE9Ilx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OSIuc3BsaXQoIiIpO2Z1bmN0aW9uIExvKGxuLEVuLFVuLHhpKXt2YXIgWmEs''@;'; put 'put ''b3I9IiIsT2k9MCxTcj0wLFBpPVVuLnksSGk9MDtzd2l0Y2gobG4pe2Nhc2UgOTg6UGk9VW4ueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT1QaSUxMDAsSGk9MjticmVhaztkZWZhdWx0OlphPVBpJTFlNCxIaT00fWJyZWFrO2Nhc2UgMTA5OnN3aXRj''@;'; put 'put ''aChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9VW4ubSxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBFdFtVbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gRXRbVW4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBFdFtVbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3aXRjaChFbi5s''@;'; put 'put ''ZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9VW4uZCxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBjdFtVbi5xXVswXTtkZWZhdWx0OnJldHVybiBjdFtVbi5xXVsxXX1icmVhaztjYXNlIDEwNDpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlphPTErKFVuLkgrMTEpJTEy''@;'; put 'put ''LEhpPUVuLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitFbn1icmVhaztjYXNlIDcyOnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9VW4uSCxIaT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrRW59''@;'; put 'put ''YnJlYWs7Y2FzZSA3Nzpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlphPVVuLk0sSGk9RW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrRW59YnJlYWs7Y2FzZSAxMTU6aWYoInMiIT1FbiYmInNzIiE9RW4mJiIuMCIhPUVuJiYiLjAwIiE9''@;'; put 'put ''RW4mJiIuMDAwIiE9RW4pdGhyb3ciYmFkIHNlY29uZCBmb3JtYXQ6ICIrRW47cmV0dXJuIDAhPT1Vbi51fHwicyIhPUVuJiYic3MiIT1Fbj8oU3I9eGk+PTI/Mz09PXhpPzFlMzoxMDA6MT09PXhpPzEwOjEsKE9pPU1hdGgucm91bmQoU3IqKFVuLlMrVW4udSkpKT49NjAqU3ImJihPaT0wKSwi''@;'; put 'put ''cyI9PT1Fbj8wPT09T2k/IjAiOiIiK09pL1NyOihvcj1RKE9pLDIreGkpLCJzcyI9PT1Fbj9vci5zdWJzdHIoMCwyKToiLiIrb3Iuc3Vic3RyKDIsRW4ubGVuZ3RoLTEpKSk6UShVbi5TLEVuLmxlbmd0aCk7Y2FzZSA5MDpzd2l0Y2goRW4pe2Nhc2UiW2hdIjpjYXNlIltoaF0iOmNhc2UiW1x1''@;'; put 'put ''MGUwYV0iOmNhc2UiW1x1MGUwYVx1MGUwYV0iOlphPTI0KlVuLkQrVW4uSDticmVhaztjYXNlIlttXSI6Y2FzZSJbbW1dIjpjYXNlIltcdTBlMTldIjpjYXNlIltcdTBlMTlcdTBlMTldIjpaYT02MCooMjQqVW4uRCtVbi5IKStVbi5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmNhc2Ui''@;'; put 'put ''W1x1MGUxN10iOmNhc2UiW1x1MGUxN1x1MGUxN10iOlphPTYwKig2MCooMjQqVW4uRCtVbi5IKStVbi5NKStNYXRoLnJvdW5kKFVuLlMrVW4udSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIrRW59SGk9Mz09PUVuLmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6''@;'; put 'put ''WmE9UGksSGk9MTticmVhaztjYXNlIDM2MjM6WmE9VW4uZCxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA0OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9VW4ubSxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBFdFtVbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4g''@;'; put 'put ''RXRbVW4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBFdFtVbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMzYxMTpzd2l0Y2goUGk9VW4ueSs1NDMsRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlphPVBpJTEwMCxIaT0yO2JyZWFrO2RlZmF1bHQ6WmE9UGklMWU0LEhpPTR9YnJlYWs7Y2FzZSAzNTk0Olph''@;'; put 'put ''PVVuLkgsSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwOTpaYT1Vbi5NLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM2MDc6WmE9VW4uUyxIaT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyBsbi50b1N0cmluZygxNil9dmFyIG1hPUhpPjA/UShaYSxIaSk6IiI7cmV0dXJuKDkwPT1s''@;'; put 'put ''bj9Fbi5jaGFyQ29kZUF0KDEpPDM1ODQ6bG48MzU4NCk/bWE6bWEucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihEaSl7cmV0dXJuIGlhWytEaV19KX1mdW5jdGlvbiBPYShsbil7aWYobG4ubGVuZ3RoPD0zKXJldHVybiBsbjtmb3IodmFyIFVuPWxuLmxlbmd0aCUzLHhpPWxuLnN1YnN0cigw''@;'; put 'put ''LFVuKTtVbiE9bG4ubGVuZ3RoO1VuKz0zKXhpKz0oeGkubGVuZ3RoPjA/IiwiOiIiKStsbi5zdWJzdHIoVW4sMyk7cmV0dXJuIHhpfXZhciBobz1mdW5jdGlvbigpe3ZhciBFbj0vJS9nO2Z1bmN0aW9uIG9yKHduLFp0KXt2YXIgbm4seG49d24uaW5kZXhPZigiRSIpLXduLmluZGV4T2YoIi4i''@;'; put 'put ''KS0xO2lmKHduLm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT1adClyZXR1cm4iMC4wRSswIjtpZihadDwwKXJldHVybiItIitvcih3biwtWnQpO3ZhciB6bj13bi5pbmRleE9mKCIuIik7LTE9PT16biYmKHpuPXduLmluZGV4T2YoIkUiKSk7dmFyIHlyPU1hdGguZmxvb3IoTWF0aC5sb2co''@;'; put 'put ''WnQpKk1hdGguTE9HMTBFKSV6bjtpZih5cjwwJiYoeXIrPXpuKSwtMT09PShubj0oWnQvTWF0aC5wb3coMTAseXIpKS50b1ByZWNpc2lvbih4bisxKyh6bit5ciklem4pKS5pbmRleE9mKCJlIikpe3ZhciBXcj1NYXRoLmZsb29yKE1hdGgubG9nKFp0KSpNYXRoLkxPRzEwRSk7Zm9yKC0xPT09''@;'; put 'put ''bm4uaW5kZXhPZigiLiIpP25uPW5uLmNoYXJBdCgwKSsiLiIrbm4uc3Vic3RyKDEpKyJFKyIrKFdyLW5uLmxlbmd0aCt5cik6bm4rPSJFKyIrKFdyLXlyKTsiMC4iPT09bm4uc3Vic3RyKDAsMik7KW5uPShubj1ubi5jaGFyQXQoMCkrbm4uc3Vic3RyKDIsem4pKyIuIitubi5zdWJzdHIoMit6''@;'; put 'put ''bikpLnJlcGxhY2UoL14wKyhbMS05XSkvLCIkMSIpLnJlcGxhY2UoL14wK1wuLywiMC4iKTtubj1ubi5yZXBsYWNlKC9cKy0vLCItIil9bm49bm4ucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxmdW5jdGlvbihvaSxuaSxYaSxVaSl7cmV0dXJuIG5pK1hpK1VpLnN1YnN0cigw''@;'; put 'put ''LCh6bit5ciklem4pKyIuIitVaS5zdWJzdHIoeXIpKyJFIn0pfWVsc2Ugbm49WnQudG9FeHBvbmVudGlhbCh4bik7cmV0dXJuIHduLm1hdGNoKC9FXCswMCQvKSYmbm4ubWF0Y2goL2VbKy1dXGQkLykmJihubj1ubi5zdWJzdHIoMCxubi5sZW5ndGgtMSkrIjAiK25uLmNoYXJBdChubi5sZW5n''@;'; put 'put ''dGgtMSkpLHduLm1hdGNoKC9FXC0vKSYmbm4ubWF0Y2goL2VcKy8pJiYobm49bm4ucmVwbGFjZSgvZVwrLywiZSIpKSxubi5yZXBsYWNlKCJlIiwiRSIpfXZhciBPaT0vIyAoXD8rKSggPylcLyggPykoXGQrKS8sWmE9L14jKjAqXC4oWzAjXSspLyxIaT0vXCkuKlswI10vLG1hPS9cKCMjI1wp''@;'; put 'put ''ICMjI1xcPy0jIyMjLztmdW5jdGlvbiBEaSh3bil7Zm9yKHZhciBubixadD0iIix4bj0wO3huIT13bi5sZW5ndGg7Kyt4bilzd2l0Y2gobm49d24uY2hhckNvZGVBdCh4bikpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2MzpadCs9IiAiO2JyZWFrO2Nhc2UgNDg6WnQrPSIwIjticmVhaztkZWZhdWx0''@;'; put 'put ''Olp0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5uKX1yZXR1cm4gWnR9ZnVuY3Rpb24gY3Mod24sWnQpe3ZhciBubj1NYXRoLnBvdygxMCxadCk7cmV0dXJuIiIrTWF0aC5yb3VuZCh3bipubikvbm59ZnVuY3Rpb24gWW8od24sWnQpe2lmKFp0PjExKXJldHVybiBZbyh3biwxMSkqTWF0aC5wb3co''@;'; put 'put ''MTAsWnQtMTEpO3ZhciBubj13bi1NYXRoLmZsb29yKHduKSx4bj1NYXRoLnBvdygxMCxadCk7cmV0dXJuIFp0PCgiIitNYXRoLnJvdW5kKG5uKnhuKSkubGVuZ3RoPzA6TWF0aC5yb3VuZChubip4bil9ZnVuY3Rpb24gRWwod24sWnQsbm4pe2lmKDQwPT09d24uY2hhckNvZGVBdCgwKSYmIVp0''@;'; put 'put ''Lm1hdGNoKEhpKSl7dmFyIHhuPVp0LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiBubj49MD9FbCgibiIseG4sbm4pOiIoIitFbCgibiIseG4sLW5uKSsiKSJ9aWYoNDQ9PT1adC5jaGFyQ29kZUF0KFp0Lmxlbmd0aC0xKSlyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24geGkod24sWnQsbm4pe2Zvcih2YXIgeG49WnQubGVuZ3RoLTE7NDQ9PT1adC5jaGFyQ29kZUF0KHhuLTEpOyktLXhuO3JldHVybiBobyh3bixadC5zdWJzdHIoMCx4biksbm4vTWF0aC5wb3coMTAsMyooWnQubGVuZ3RoLXhuKSkpfSh3bixadCxubik7aWYoLTEhPT1adC5p''@;'; put 'put ''bmRleE9mKCIlIikpcmV0dXJuIGZ1bmN0aW9uIFVuKHduLFp0LG5uKXt2YXIgeG49WnQucmVwbGFjZShFbiwiIiksem49WnQubGVuZ3RoLXhuLmxlbmd0aDtyZXR1cm4gaG8od24seG4sbm4qTWF0aC5wb3coMTAsMip6bikpK0coIiUiLHpuKX0od24sWnQsbm4pO2lmKC0xIT09WnQuaW5kZXhP''@;'; put 'put ''ZigiRSIpKXJldHVybiBvcihadCxubik7aWYoMzY9PT1adC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitFbCh3bixadC5zdWJzdHIoIiAiPT1adC5jaGFyQXQoMSk/MjoxKSxubik7dmFyIHpuLHlyLFdyLG9pLG5pPU1hdGguYWJzKG5uKSxYaT1ubjwwPyItIjoiIjtpZihadC5tYXRjaCgvXjAw''@;'; put 'put ''KyQvKSlyZXR1cm4gWGkrTmUobmksWnQubGVuZ3RoKTtpZihadC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiIwIj09PSh6bj1OZShubiwwKSkmJih6bj0iIiksem4ubGVuZ3RoPlp0Lmxlbmd0aD96bjpEaShadC5zdWJzdHIoMCxadC5sZW5ndGgtem4ubGVuZ3RoKSkrem47aWYoeXI9WnQubWF0''@;'; put 'put ''Y2goT2kpKXJldHVybiBmdW5jdGlvbiBTcih3bixadCxubil7dmFyIHhuPXBhcnNlSW50KHduWzRdLDEwKSx6bj1NYXRoLnJvdW5kKFp0KnhuKSx5cj1NYXRoLmZsb29yKHpuL3huKSxXcj16bi15cip4bixvaT14bjtyZXR1cm4gbm4rKDA9PT15cj8iIjoiIit5cikrIiAiKygwPT09V3I/Rygi''@;'; put 'put ''ICIsd25bMV0ubGVuZ3RoKzErd25bNF0ubGVuZ3RoKTpvZShXcix3blsxXS5sZW5ndGgpK3duWzJdKyIvIit3blszXStRKG9pLHduWzRdLmxlbmd0aCkpfSh5cixuaSxYaSk7aWYoWnQubWF0Y2goL14jKzArJC8pKXJldHVybiBYaStOZShuaSxadC5sZW5ndGgtWnQuaW5kZXhPZigiMCIpKTtp''@;'; put 'put ''Zih5cj1adC5tYXRjaChaYSkpcmV0dXJuIHpuPWNzKG5uLHlyWzFdLmxlbmd0aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrRGkoeXJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitEaSh5clsxXSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihUbyx4cyl7cmV0dXJuIi4iK3hzK0co''@;'; put 'put ''IjAiLERpKHlyWzFdKS5sZW5ndGgteHMubGVuZ3RoKX0pLC0xIT09WnQuaW5kZXhPZigiMC4iKT96bjp6bi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFp0PVp0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIikseXI9WnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBYaStjcyhuaSx5clsy''@;'; put 'put ''XS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLHlyWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYoeXI9WnQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIFhpK09hKE5lKG5pLDAp''@;'; put 'put ''KTtpZih5cj1adC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gbm48MD8iLSIrRWwod24sWnQsLW5uKTpPYSgiIisoTWF0aC5mbG9vcihubikrZnVuY3Rpb24geGwod24sWnQpe3JldHVybiBadDwoIiIrTWF0aC5yb3VuZCgod24tTWF0aC5mbG9vcih3bikpKk1hdGgucG93KDEw''@;'; put 'put ''LFp0KSkpLmxlbmd0aD8xOjB9KG5uLHlyWzFdLmxlbmd0aCkpKSsiLiIrUShZbyhubix5clsxXS5sZW5ndGgpLHlyWzFdLmxlbmd0aCk7aWYoeXI9WnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIEVsKHduLFp0LnJlcGxhY2UoL14jLCMqLC8sIiIpLG5uKTtpZih5cj1adC5tYXRjaCgvXihb''@;'; put 'put ''MCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gem49ayhFbCh3bixadC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxubikpLFdyPTAsayhrKFp0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oVG8pe3JldHVybiBXcjx6bi5sZW5ndGg/em4uY2hhckF0KFdyKysp''@;'; put 'put ''OiIwIj09PVRvPyIwIjoiIn0pKTtpZihadC5tYXRjaChtYSkpcmV0dXJuIigiKyh6bj1FbCh3biwiIyMjIyMjIyMjIyIsbm4pKS5zdWJzdHIoMCwzKSsiKSAiK3puLnN1YnN0cigzLDMpKyItIit6bi5zdWJzdHIoNik7dmFyIFVpPSIiO2lmKHlyPVp0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8o''@;'; put 'put ''ID8pKFsjMD9dKykvKSlyZXR1cm4gV3I9TWF0aC5taW4oeXJbNF0ubGVuZ3RoLDcpLG9pPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCExKSx6bj0iIitYaSwiICI9PShVaT1obygibiIseXJbMV0sb2lbMV0pKS5jaGFyQXQoVWkubGVuZ3RoLTEpJiYoVWk9VWkuc3Vic3RyKDAsVWkubGVuZ3Ro''@;'; put 'put ''LTEpKyIwIiksem4rPVVpK3lyWzJdKyIvIit5clszXSwoVWk9Z2Uob2lbMl0sV3IpKS5sZW5ndGg8eXJbNF0ubGVuZ3RoJiYoVWk9RGkoeXJbNF0uc3Vic3RyKHlyWzRdLmxlbmd0aC1VaS5sZW5ndGgpKStVaSksem4rPVVpO2lmKHlyPVp0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPyko''@;'; put 'put ''WyMwP10rKS8pKXJldHVybiBXcj1NYXRoLm1pbihNYXRoLm1heCh5clsxXS5sZW5ndGgseXJbNF0ubGVuZ3RoKSw3KSxYaSsoKG9pPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCEwKSlbMF18fChvaVsxXT8iIjoiMCIpKSsiICIrKG9pWzFdP29lKG9pWzFdLFdyKSt5clsyXSsiLyIreXJbM10r''@;'; put 'put ''Z2Uob2lbMl0sV3IpOkcoIiAiLDIqV3IrMSt5clsyXS5sZW5ndGgreXJbM10ubGVuZ3RoKSk7aWYoeXI9WnQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIHpuPU5lKG5uLDApLFp0Lmxlbmd0aDw9em4ubGVuZ3RoP3puOkRpKFp0LnN1YnN0cigwLFp0Lmxlbmd0aC16bi5sZW5ndGgpKSt6bjtp''@;'; put 'put ''Zih5cj1adC5tYXRjaCgvXihbIzA/XSspXC4oWyMwXSspJC8pKXt6bj0iIitubi50b0ZpeGVkKE1hdGgubWluKHlyWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIiksV3I9em4uaW5kZXhPZigiLiIpO3ZhciBubz1adC5pbmRleE9mKCIuIiktV3IsamE9WnQubGVuZ3Ro''@;'; put 'put ''LXpuLmxlbmd0aC1ubztyZXR1cm4gRGkoWnQuc3Vic3RyKDAsbm8pK3puK1p0LnN1YnN0cihadC5sZW5ndGgtamEpKX1pZih5cj1adC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIFdyPVlvKG5uLHlyWzFdLmxlbmd0aCksbm48MD8iLSIrRWwod24sWnQsLW5uKTpPYShmdW5j''@;'; put 'put ''dGlvbiBfdSh3bil7cmV0dXJuIHduPDIxNDc0ODM2NDcmJnduPi0yMTQ3NDgzNjQ4PyIiKyh3bj49MD8wfHduOnduLTF8MCk6IiIrTWF0aC5mbG9vcih3bil9KG5uKSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihUbyl7cmV0dXJuIjAwLCIr''@;'; put 'put ''KFRvLmxlbmd0aDwzP1EoMCwzLVRvLmxlbmd0aCk6IiIpK1RvfSkrIi4iK1EoV3IseXJbMV0ubGVuZ3RoKTtzd2l0Y2goWnQpe2Nhc2UiIyMjLCMjMC4wMCI6cmV0dXJuIEVsKHduLCIjLCMjMC4wMCIsbm4pO2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciB2YT1P''@;'; put 'put ''YShOZShuaSwwKSk7cmV0dXJuIjAiIT09dmE/WGkrdmE6IiI7Y2FzZSIjIyMsIyMjLjAwIjpyZXR1cm4gRWwod24sIiMjIywjIzAuMDAiLG5uKS5yZXBsYWNlKC9eMFwuLywiLiIpO2Nhc2UiIywjIyMuMDAiOnJldHVybiBFbCh3biwiIywjIzAuMDAiLG5uKS5yZXBsYWNlKC9eMFwuLywiLiIp''@;'; put 'put ''fXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK1p0KyJ8Iil9ZnVuY3Rpb24gZ24od24sWnQpe3ZhciBubix4bj13bi5pbmRleE9mKCJFIiktd24uaW5kZXhPZigiLiIpLTE7aWYod24ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVp0KXJldHVybiIwLjBFKzAiO2lm''@;'; put 'put ''KFp0PDApcmV0dXJuIi0iK2duKHduLC1adCk7dmFyIHpuPXduLmluZGV4T2YoIi4iKTstMT09PXpuJiYoem49d24uaW5kZXhPZigiRSIpKTt2YXIgeXI9TWF0aC5mbG9vcihNYXRoLmxvZyhadCkqTWF0aC5MT0cxMEUpJXpuO2lmKHlyPDAmJih5cis9em4pLCEobm49KFp0L01hdGgucG93KDEw''@;'; put 'put ''LHlyKSkudG9QcmVjaXNpb24oeG4rMSsoem4reXIpJXpuKSkubWF0Y2goL1tFZV0vKSl7dmFyIFdyPU1hdGguZmxvb3IoTWF0aC5sb2coWnQpKk1hdGguTE9HMTBFKTstMT09PW5uLmluZGV4T2YoIi4iKT9ubj1ubi5jaGFyQXQoMCkrIi4iK25uLnN1YnN0cigxKSsiRSsiKyhXci1ubi5sZW5n''@;'; put 'put ''dGgreXIpOm5uKz0iRSsiKyhXci15ciksbm49bm4ucmVwbGFjZSgvXCstLywiLSIpfW5uPW5uLnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24ob2ksbmksWGksVWkpe3JldHVybiBuaStYaStVaS5zdWJzdHIoMCwoem4reXIpJXpuKSsiLiIrVWkuc3Vic3RyKHly''@;'; put 'put ''KSsiRSJ9KX1lbHNlIG5uPVp0LnRvRXhwb25lbnRpYWwoeG4pO3JldHVybiB3bi5tYXRjaCgvRVwrMDAkLykmJm5uLm1hdGNoKC9lWystXVxkJC8pJiYobm49bm4uc3Vic3RyKDAsbm4ubGVuZ3RoLTEpKyIwIitubi5jaGFyQXQobm4ubGVuZ3RoLTEpKSx3bi5tYXRjaCgvRVwtLykmJm5uLm1h''@;'; put 'put ''dGNoKC9lXCsvKSYmKG5uPW5uLnJlcGxhY2UoL2VcKy8sImUiKSksbm4ucmVwbGFjZSgiZSIsIkUiKX1mdW5jdGlvbiBrbih3bixadCxubil7aWYoNDA9PT13bi5jaGFyQ29kZUF0KDApJiYhWnQubWF0Y2goSGkpKXt2YXIgeG49WnQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8s''@;'; put 'put ''IiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIG5uPj0wP2tuKCJuIix4bixubik6IigiK2tuKCJuIix4biwtbm4pKyIpIn1pZig0ND09PVp0LmNoYXJDb2RlQXQoWnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBGZih3bixadCxubil7Zm9yKHZhciB4bj1adC5sZW5ndGgtMTs0ND09PVp0''@;'; put 'put ''LmNoYXJDb2RlQXQoeG4tMSk7KS0teG47cmV0dXJuIGhvKHduLFp0LnN1YnN0cigwLHhuKSxubi9NYXRoLnBvdygxMCwzKihadC5sZW5ndGgteG4pKSl9KHduLFp0LG5uKTtpZigtMSE9PVp0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24geWQod24sWnQsbm4pe3ZhciB4bj1adC5yZXBs''@;'; put 'put ''YWNlKEVuLCIiKSx6bj1adC5sZW5ndGgteG4ubGVuZ3RoO3JldHVybiBobyh3bix4bixubipNYXRoLnBvdygxMCwyKnpuKSkrRygiJSIsem4pfSh3bixadCxubik7aWYoLTEhPT1adC5pbmRleE9mKCJFIikpcmV0dXJuIGduKFp0LG5uKTtpZigzNj09PVp0LmNoYXJDb2RlQXQoMCkpcmV0dXJu''@;'; put 'put ''IiQiK2tuKHduLFp0LnN1YnN0cigiICI9PVp0LmNoYXJBdCgxKT8yOjEpLG5uKTt2YXIgem4seXIsV3Isb2ksbmk9TWF0aC5hYnMobm4pLFhpPW5uPDA/Ii0iOiIiO2lmKFp0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBYaStRKG5pLFp0Lmxlbmd0aCk7aWYoWnQubWF0Y2goL15bIz9dKyQvKSly''@;'; put 'put ''ZXR1cm4gem49IiIrbm4sMD09PW5uJiYoem49IiIpLHpuLmxlbmd0aD5adC5sZW5ndGg/em46RGkoWnQuc3Vic3RyKDAsWnQubGVuZ3RoLXpuLmxlbmd0aCkpK3puO2lmKHlyPVp0Lm1hdGNoKE9pKSlyZXR1cm4gZnVuY3Rpb24gUGkod24sWnQsbm4pe3JldHVybiBubisoMD09PVp0PyIiOiIi''@;'; put 'put ''K1p0KStHKCIgIix3blsxXS5sZW5ndGgrMit3bls0XS5sZW5ndGgpfSh5cixuaSxYaSk7aWYoWnQubWF0Y2goL14jKzArJC8pKXJldHVybiBYaStRKG5pLFp0Lmxlbmd0aC1adC5pbmRleE9mKCIwIikpO2lmKHlyPVp0Lm1hdGNoKFphKSlyZXR1cm4gem49KHpuPSgiIitubikucmVwbGFjZSgv''@;'; put 'put ''XihbXlwuXSspJC8sIiQxLiIrRGkoeXJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitEaSh5clsxXSkpKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24oVG8seHMpe3JldHVybiIuIit4cytHKCIwIixEaSh5clsxXSkubGVuZ3RoLXhzLmxlbmd0aCl9KSwtMSE9PVp0LmluZGV4T2YoIjAuIik/''@;'; put 'put ''em46em4ucmVwbGFjZSgvXjBcLi8sIi4iKTtpZihadD1adC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLHlyPVp0Lm1hdGNoKC9eKDAqKVwuKCMqKSQvKSlyZXR1cm4gWGkrKCIiK25pKS5yZXBsYWNlKC9cLihcZCpbMS05XSkwKiQvLCIuJDEiKS5yZXBsYWNlKC9eKC0/XGQqKSQvLCIkMS4i''@;'; put 'put ''KS5yZXBsYWNlKC9eMFwuLyx5clsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKHlyPVp0Lm1hdGNoKC9eI3sxLDN9LCMjMChcLj8pJC8pKXJldHVybiBYaStPYSgiIituaSk7aWYoeXI9WnQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIG5uPDA/Ii0iK2tuKHduLFp0LC1ubik6T2Eo''@;'; put 'put ''IiIrbm4pKyIuIitHKCIwIix5clsxXS5sZW5ndGgpO2lmKHlyPVp0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBrbih3bixadC5yZXBsYWNlKC9eIywjKiwvLCIiKSxubik7aWYoeXI9WnQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIHpuPWsoa24od24sWnQucmVw''@;'; put 'put ''bGFjZSgvW1xcLV0vZywiIiksbm4pKSxXcj0wLGsoayhadC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKFRvKXtyZXR1cm4gV3I8em4ubGVuZ3RoP3puLmNoYXJBdChXcisrKToiMCI9PT1Ubz8iMCI6IiJ9KSk7aWYoWnQubWF0Y2gobWEpKXJldHVybiIoIiso''@;'; put 'put ''em49a24od24sIiMjIyMjIyMjIyMiLG5uKSkuc3Vic3RyKDAsMykrIikgIit6bi5zdWJzdHIoMywzKSsiLSIrem4uc3Vic3RyKDYpO3ZhciBVaT0iIjtpZih5cj1adC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFdyPU1hdGgubWluKHlyWzRdLmxlbmd0aCw3''@;'; put 'put ''KSxvaT1LdChuaSxNYXRoLnBvdygxMCxXciktMSwhMSksem49IiIrWGksIiAiPT0oVWk9aG8oIm4iLHlyWzFdLG9pWzFdKSkuY2hhckF0KFVpLmxlbmd0aC0xKSYmKFVpPVVpLnN1YnN0cigwLFVpLmxlbmd0aC0xKSsiMCIpLHpuKz1VaSt5clsyXSsiLyIreXJbM10sKFVpPWdlKG9pWzJdLFdy''@;'; put 'put ''KSkubGVuZ3RoPHlyWzRdLmxlbmd0aCYmKFVpPURpKHlyWzRdLnN1YnN0cih5cls0XS5sZW5ndGgtVWkubGVuZ3RoKSkrVWkpLHpuKz1VaTtpZih5cj1adC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gV3I9TWF0aC5taW4oTWF0aC5tYXgoeXJbMV0ubGVu''@;'; put 'put ''Z3RoLHlyWzRdLmxlbmd0aCksNyksWGkrKChvaT1LdChuaSxNYXRoLnBvdygxMCxXciktMSwhMCkpWzBdfHwob2lbMV0/IiI6IjAiKSkrIiAiKyhvaVsxXT9vZShvaVsxXSxXcikreXJbMl0rIi8iK3lyWzNdK2dlKG9pWzJdLFdyKTpHKCIgIiwyKldyKzEreXJbMl0ubGVuZ3RoK3lyWzNdLmxl''@;'; put 'put ''bmd0aCkpO2lmKHlyPVp0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBadC5sZW5ndGg8PSh6bj0iIitubikubGVuZ3RoP3puOkRpKFp0LnN1YnN0cigwLFp0Lmxlbmd0aC16bi5sZW5ndGgpKSt6bjtpZih5cj1adC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe3puPSIiK25uLnRvRml4''@;'; put 'put ''ZWQoTWF0aC5taW4oeXJbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxXcj16bi5pbmRleE9mKCIuIik7dmFyIG5vPVp0LmluZGV4T2YoIi4iKS1XcixqYT1adC5sZW5ndGgtem4ubGVuZ3RoLW5vO3JldHVybiBEaShadC5zdWJzdHIoMCxubykrem4rWnQuc3Vic3Ry''@;'; put 'put ''KFp0Lmxlbmd0aC1qYSkpfWlmKHlyPVp0Lm1hdGNoKC9eMDAsMDAwXC4oWyMwXSowKSQvKSlyZXR1cm4gbm48MD8iLSIra24od24sWnQsLW5uKTpPYSgiIitubikucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihUbyl7cmV0dXJuIjAwLCIrKFRv''@;'; put 'put ''Lmxlbmd0aDwzP1EoMCwzLVRvLmxlbmd0aCk6IiIpK1RvfSkrIi4iK1EoMCx5clsxXS5sZW5ndGgpO3ZhciB2YT1PYSgiIituaSk7c3dpdGNoKFp0KXtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjpyZXR1cm4iMCIhPT12YT9YaSt2YToiIjtjYXNlIiMsIzAwIjpyZXR1''@;'; put 'put ''cm4iMDAiIT09KHZhPVEodmEsMikpP1hpK3ZhOiIiO2RlZmF1bHQ6aWYoWnQubWF0Y2goL1wuWzAjP10qJC8pKXJldHVybiBrbih3bixadC5zbGljZSgwLFp0Lmxhc3RJbmRleE9mKCIuIikpLG5uKStEaShadC5zbGljZShadC5sYXN0SW5kZXhPZigiLiIpKSl9dGhyb3cgbmV3IEVycm9yKCJ1''@;'; put 'put ''bnN1cHBvcnRlZCBmb3JtYXQgfCIrWnQrInwiKX1yZXR1cm4gZnVuY3Rpb24oWnQsbm4seG4pe3JldHVybiIwLDAiPT1ubiYmKG5uPSIjLCMwMCIpLCgwfHhuKT09PXhuP2tuKFp0LG5uLHhuKTpFbChadCxubix4bil9fSgpO2Z1bmN0aW9uIEphKGxuKXtmb3IodmFyIEVuPVtdLFVuPSExLHhp''@;'; put 'put ''PTAsb3I9MDt4aTxsbi5sZW5ndGg7Kyt4aSlzd2l0Y2gobG4uY2hhckNvZGVBdCh4aSkpe2Nhc2UgMzQ6VW49IVVuO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisreGk7YnJlYWs7Y2FzZSA1OTpFbltFbi5sZW5ndGhdPWxuLnN1YnN0cihvcix4aS1vciksb3I9eGkrMX1pZihFbltF''@;'; put 'put ''bi5sZW5ndGhdPWxuLnN1YnN0cihvciksITA9PT1Vbil0aHJvdyBuZXcgRXJyb3IoIkZvcm1hdCB8IitsbisifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiBFbn1SLl9zcGxpdD1KYTt2YXIgQmk9L1xbW0hoTW1Tc1x1MEUwQVx1MEUxOVx1MEUxN10qXF0vO2Z1bmN0aW9uIElzKGxu''@;'; put 'put ''KXtmb3IodmFyIEVuPTAsVW49IiIseGk9IiI7RW48bG4ubGVuZ3RoOylzd2l0Y2goVW49bG4uY2hhckF0KEVuKSl7Y2FzZSJHIjpZZShsbixFbikmJihFbis9NiksRW4rKzticmVhaztjYXNlJyInOmZvcig7MzQhPT1sbi5jaGFyQ29kZUF0KCsrRW4pJiZFbjxsbi5sZW5ndGg7KTsrK0VuO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiXFwiOmNhc2UiXyI6RW4rPTI7YnJlYWs7Y2FzZSJAIjorK0VuO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1sbi5jaGFyQXQoRW4rMSl8fCIyIj09PWxuLmNoYXJBdChFbisxKSlyZXR1cm4hMDtjYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6''@;'; put 'put ''Y2FzZSJFIjpjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOnJldHVybiEwO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6aWYoIkEvUCI9PT1sbi5zdWJzdHIoRW4sMykudG9VcHBlckNhc2UoKXx8IkFNL1BNIj09PWxuLnN1YnN0cihF''@;'; put 'put ''biw1KS50b1VwcGVyQ2FzZSgpfHwiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT1sbi5zdWJzdHIoRW4sNSkudG9VcHBlckNhc2UoKSlyZXR1cm4hMDsrK0VuO2JyZWFrO2Nhc2UiWyI6Zm9yKHhpPVVuOyJdIiE9PWxuLmNoYXJBdChFbisrKSYmRW48bG4ubGVuZ3RoOyl4aSs9bG4uY2hh''@;'; put 'put ''ckF0KEVuKTtpZih4aS5tYXRjaChCaSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDtFbjxsbi5sZW5ndGgmJigiMCM/LixFKy0lIi5pbmRleE9mKFVuPWxuLmNoYXJBdCgrK0VuKSk+LTF8fCJcXCI9PVVuJiYiLSI9PWxuLmNoYXJBdChFbisxKSYmIjAjIi5p''@;'; put 'put ''bmRleE9mKGxuLmNoYXJBdChFbisyKSk+LTEpOyk7YnJlYWs7Y2FzZSI/Ijpmb3IoO2xuLmNoYXJBdCgrK0VuKT09PVVuOyk7YnJlYWs7Y2FzZSIqIjorK0VuLCgiICI9PWxuLmNoYXJBdChFbil8fCIqIj09bG4uY2hhckF0KEVuKSkmJisrRW47YnJlYWs7Y2FzZSIoIjpjYXNlIikiOisrRW47''@;'; put 'put ''YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKDtFbjxsbi5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKGxuLmNoYXJBdCgrK0VuKSk+LTE7KTticmVhaztkZWZhdWx0OisrRW59cmV0dXJu''@;'; put 'put ''ITF9ZnVuY3Rpb24gUG4obG4sRW4sVW4seGkpe2Zvcih2YXIgSGksbWEsRGksb3I9W10sT2k9IiIsU3I9MCxQaT0iIixaYT0idCIsY3M9IkgiO1NyPGxuLmxlbmd0aDspc3dpdGNoKFBpPWxuLmNoYXJBdChTcikpe2Nhc2UiRyI6aWYoIVllKGxuLFNyKSl0aHJvdyBuZXcgRXJyb3IoInVucmVj''@;'; put 'put ''b2duaXplZCBjaGFyYWN0ZXIgIitQaSsiIGluICIrbG4pO29yW29yLmxlbmd0aF09e3Q6IkciLHY6IkdlbmVyYWwifSxTcis9NzticmVhaztjYXNlJyInOmZvcihPaT0iIjszNCE9PShEaT1sbi5jaGFyQ29kZUF0KCsrU3IpKSYmU3I8bG4ubGVuZ3RoOylPaSs9U3RyaW5nLmZyb21DaGFyQ29k''@;'; put 'put ''ZShEaSk7b3Jbb3IubGVuZ3RoXT17dDoidCIsdjpPaX0sKytTcjticmVhaztjYXNlIlxcIjp2YXIgWW89bG4uY2hhckF0KCsrU3IpO29yW29yLmxlbmd0aF09e3Q6IigiPT09WW98fCIpIj09PVlvP1lvOiJ0Iix2OllvfSwrK1NyO2JyZWFrO2Nhc2UiXyI6b3Jbb3IubGVuZ3RoXT17dDoidCIs''@;'; put 'put ''djoiICJ9LFNyKz0yO2JyZWFrO2Nhc2UiQCI6b3Jbb3IubGVuZ3RoXT17dDoiVCIsdjpFbn0sKytTcjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09bG4uY2hhckF0KFNyKzEpfHwiMiI9PT1sbi5jaGFyQXQoU3IrMSkpe2lmKG51bGw9PUhpJiZudWxsPT0oSGk9VG4oRW4sVW4sIjIi''@;'; put 'put ''PT09bG4uY2hhckF0KFNyKzEpKSkpcmV0dXJuIiI7b3Jbb3IubGVuZ3RoXT17dDoiWCIsdjpsbi5zdWJzdHIoU3IsMil9LFphPVBpLFNyKz0yO2JyZWFrfWNhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOlBpPVBpLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpj''@;'; put 'put ''YXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3IjppZihFbjwwfHxudWxsPT1IaSYmbnVsbD09KEhpPVRuKEVuLFVuKSkp''@;'; put 'put ''cmV0dXJuIiI7Zm9yKE9pPVBpOysrU3I8bG4ubGVuZ3RoJiZsbi5jaGFyQXQoU3IpLnRvTG93ZXJDYXNlKCk9PT1QaTspT2krPVBpOyJtIj09PVBpJiYiaCI9PT1aYS50b0xvd2VyQ2FzZSgpJiYoUGk9Ik0iKSwiaCI9PT1QaSYmKFBpPWNzKSxvcltvci5sZW5ndGhdPXt0OlBpLHY6T2l9LFph''@;'; put 'put ''PVBpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6dmFyIF91PXt0OlBpLHY6UGl9O2lmKG51bGw9PUhpJiYoSGk9VG4oRW4sVW4pKSwiQS9QIj09PWxuLnN1YnN0cihTciwzKS50b1VwcGVyQ2FzZSgpPyhudWxsIT1IaSYmKF91LnY9SGkuSD49MTI/IlAiOiJBIiksX3UudD0i''@;'; put 'put ''VCIsY3M9ImgiLFNyKz0zKToiQU0vUE0iPT09bG4uc3Vic3RyKFNyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPUhpJiYoX3Uudj1IaS5IPj0xMj8iUE0iOiJBTSIpLF91LnQ9IlQiLFNyKz01LGNzPSJoIik6Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09bG4uc3Vic3RyKFNyLDUpLnRv''@;'; put 'put ''VXBwZXJDYXNlKCk/KG51bGwhPUhpJiYoX3Uudj1IaS5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksX3UudD0iVCIsU3IrPTUsY3M9ImgiKTooX3UudD0idCIsKytTciksbnVsbD09SGkmJiJUIj09PV91LnQpcmV0dXJuIiI7b3Jbb3IubGVuZ3RoXT1fdSxaYT1QaTticmVh''@;'; put 'put ''aztjYXNlIlsiOmZvcihPaT1QaTsiXSIhPT1sbi5jaGFyQXQoU3IrKykmJlNyPGxuLmxlbmd0aDspT2krPWxuLmNoYXJBdChTcik7aWYoIl0iIT09T2kuc2xpY2UoLTEpKXRocm93J3VudGVybWluYXRlZCAiWyIgYmxvY2s6IHwnK09pKyJ8IjtpZihPaS5tYXRjaChCaSkpe2lmKG51bGw9PUhp''@;'; put 'put ''JiZudWxsPT0oSGk9VG4oRW4sVW4pKSlyZXR1cm4iIjtvcltvci5sZW5ndGhdPXt0OiJaIix2Ok9pLnRvTG93ZXJDYXNlKCl9LFphPU9pLmNoYXJBdCgxKX1lbHNlIE9pLmluZGV4T2YoIiQiKT4tMSYmKE9pPShPaS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIixJcyhsbil8''@;'; put 'put ''fChvcltvci5sZW5ndGhdPXt0OiJ0Iix2Ok9pfSkpO2JyZWFrO2Nhc2UiLiI6aWYobnVsbCE9SGkpe2ZvcihPaT1QaTsrK1NyPGxuLmxlbmd0aCYmIjAiPT09KFBpPWxuLmNoYXJBdChTcikpOylPaSs9UGk7b3Jbb3IubGVuZ3RoXT17dDoicyIsdjpPaX07YnJlYWt9Y2FzZSIwIjpjYXNlIiMi''@;'; put 'put ''OmZvcihPaT1QaTsrK1NyPGxuLmxlbmd0aCYmIjAjPy4sRSstJSIuaW5kZXhPZihQaT1sbi5jaGFyQXQoU3IpKT4tMTspT2krPVBpO29yW29yLmxlbmd0aF09e3Q6Im4iLHY6T2l9O2JyZWFrO2Nhc2UiPyI6Zm9yKE9pPVBpO2xuLmNoYXJBdCgrK1NyKT09PVBpOylPaSs9UGk7b3Jbb3IubGVu''@;'; put 'put ''Z3RoXT17dDpQaSx2Ok9pfSxaYT1QaTticmVhaztjYXNlIioiOisrU3IsKCIgIj09bG4uY2hhckF0KFNyKXx8IioiPT1sbi5jaGFyQXQoU3IpKSYmKytTcjticmVhaztjYXNlIigiOmNhc2UiKSI6b3Jbb3IubGVuZ3RoXT17dDoxPT09eGk/InQiOlBpLHY6UGl9LCsrU3I7YnJlYWs7Y2FzZSIx''@;'; put 'put ''IjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKE9pPVBpO1NyPGxuLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YobG4uY2hhckF0KCsrU3IpKT4tMTspT2krPWxuLmNoYXJBdChTcik7b3Jbb3IubGVuZ3RoXT17''@;'; put 'put ''dDoiRCIsdjpPaX07YnJlYWs7Y2FzZSIgIjpvcltvci5sZW5ndGhdPXt0OlBpLHY6UGl9LCsrU3I7YnJlYWs7Y2FzZSIkIjpvcltvci5sZW5ndGhdPXt0OiJ0Iix2Ok1pfSwrK1NyO2JyZWFrO2Nhc2UiLyI6b3Jbb3IubGVuZ3RoXT1vci5sZW5ndGg+MCYmSXMob3Jbb3IubGVuZ3RoLTFdLnYp''@;'; put 'put ''P3t0OiJ0Iix2OlZufTp7dDoidCIsdjoiLyJ9LCsrU3I7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YoUGkpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK1BpKyIgaW4gIits''@;'; put 'put ''bik7b3Jbb3IubGVuZ3RoXT17dDoidCIsdjpQaX0sKytTcn12YXIgeWQsRWw9MCxGZj0wO2ZvcihTcj1vci5sZW5ndGgtMSxaYT0idCI7U3I+PTA7LS1Tcilzd2l0Y2gob3JbU3JdLnQpe2Nhc2UiaCI6Y2FzZSJIIjpvcltTcl0udD1jcyxaYT0iaCIsRWw8MSYmKEVsPTEpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''cyI6KHlkPW9yW1NyXS52Lm1hdGNoKC9cLjArJC8pKSYmKEZmPU1hdGgubWF4KEZmLHlkWzBdLmxlbmd0aC0xKSksRWw8MyYmKEVsPTMpO2Nhc2UiZCI6Y2FzZSJ5IjpjYXNlIk0iOmNhc2UiZSI6WmE9b3JbU3JdLnQ7YnJlYWs7Y2FzZSJtIjoicyI9PT1aYSYmKG9yW1NyXS50PSJNIixFbDwy''@;'; put 'put ''JiYoRWw9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjpFbDwxJiZvcltTcl0udi5tYXRjaCgvW0hoXS8pJiYoRWw9MSksRWw8MiYmb3JbU3JdLnYubWF0Y2goL1tNbV0vKSYmKEVsPTIpLEVsPDMmJm9yW1NyXS52Lm1hdGNoKC9bU3NdLykmJihFbD0zKX1zd2l0Y2goRWwpe2Nhc2Ug''@;'; put 'put ''MDpicmVhaztjYXNlIDE6SGkudT49LjUmJihIaS51PTAsKytIaS5TKSxIaS5TPj02MCYmKEhpLlM9MCwrK0hpLk0pLEhpLk0+PTYwJiYoSGkuTT0wLCsrSGkuSCk7YnJlYWs7Y2FzZSAyOkhpLnU+PS41JiYoSGkudT0wLCsrSGkuUyksSGkuUz49NjAmJihIaS5TPTAsKytIaS5NKX12YXIga24s''@;'; put 'put ''Z249IiI7Zm9yKFNyPTA7U3I8b3IubGVuZ3RoOysrU3Ipc3dpdGNoKG9yW1NyXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJyZWFrO2Nhc2UiWCI6b3JbU3JdLnY9IiIsb3JbU3JdLnQ9IjsiO2JyZWFrO2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJI''@;'; put 'put ''IjpjYXNlIk0iOmNhc2UicyI6Y2FzZSJlIjpjYXNlImIiOmNhc2UiWiI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0IjpjYXNlIlx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6b3JbU3JdLnY9TG8ob3JbU3JdLnQuY2hhckNvZGVBdCgwKSxvcltTcl0udixI''@;'; put 'put ''aSxGZiksb3JbU3JdLnQ9InQiO2JyZWFrO2Nhc2UibiI6Y2FzZSI/Ijpmb3Ioa249U3IrMTtudWxsIT1vcltrbl0mJigiPyI9PT0oUGk9b3Jba25dLnQpfHwiRCI9PT1QaXx8KCIgIj09PVBpfHwidCI9PT1QaSkmJm51bGwhPW9yW2tuKzFdJiYoIj8iPT09b3Jba24rMV0udHx8InQiPT09b3Jb''@;'; put 'put ''a24rMV0udCYmIi8iPT09b3Jba24rMV0udil8fCIoIj09PW9yW1NyXS50JiYoIiAiPT09UGl8fCJuIj09PVBpfHwiKSI9PT1QaSl8fCJ0Ij09PVBpJiYoIi8iPT09b3Jba25dLnZ8fCIgIj09PW9yW2tuXS52JiZudWxsIT1vcltrbisxXSYmIj8iPT1vcltrbisxXS50KSk7KW9yW1NyXS52Kz1v''@;'; put 'put ''cltrbl0udixvcltrbl09e3Y6IiIsdDoiOyJ9LCsra247Z24rPW9yW1NyXS52LFNyPWtuLTE7YnJlYWs7Y2FzZSJHIjpvcltTcl0udD0idCIsb3JbU3JdLnY9X2EoRW4sVW4pfXZhciBadCxubix3bj0iIjtpZihnbi5sZW5ndGg+MCl7NDA9PWduLmNoYXJDb2RlQXQoMCk/KFp0PUVuPDAmJjQ1''@;'; put 'put ''PT09Z24uY2hhckNvZGVBdCgwKT8tRW46RW4sbm49aG8oIm4iLGduLFp0KSk6KG5uPWhvKCJuIixnbixadD1FbjwwJiZ4aT4xPy1FbjpFbiksWnQ8MCYmb3JbMF0mJiJ0Ij09b3JbMF0udCYmKG5uPW5uLnN1YnN0cigxKSxvclswXS52PSItIitvclswXS52KSksa249KG5uPW5uLnJlcGxhY2Uo''@;'; put 'put ''L1ssXC5dL2csZnVuY3Rpb24oV3Ipe3JldHVybiIuIj09V3I/a3I6TGl9KSkubGVuZ3RoLTE7dmFyIHhuPW9yLmxlbmd0aDtmb3IoU3I9MDtTcjxvci5sZW5ndGg7KytTcilpZihudWxsIT1vcltTcl0mJiJ0IiE9b3JbU3JdLnQmJm9yW1NyXS52LmluZGV4T2YoIi4iKT4tMSl7eG49U3I7YnJl''@;'; put 'put ''YWt9dmFyIHpuPW9yLmxlbmd0aDtpZih4bj09PW9yLmxlbmd0aCYmLTE9PT1ubi5pbmRleE9mKCJFIikpe2ZvcihTcj1vci5sZW5ndGgtMTtTcj49MDstLVNyKW51bGw9PW9yW1NyXXx8LTE9PT0ibj8iLmluZGV4T2Yob3JbU3JdLnQpfHwoa24+PW9yW1NyXS52Lmxlbmd0aC0xP29yW1NyXS52''@;'; put 'put ''PW5uLnN1YnN0cigxKyhrbi09b3JbU3JdLnYubGVuZ3RoKSxvcltTcl0udi5sZW5ndGgpOmtuPDA/b3JbU3JdLnY9IiI6KG9yW1NyXS52PW5uLnN1YnN0cigwLGtuKzEpLGtuPS0xKSxvcltTcl0udD0idCIsem49U3IpO2tuPj0wJiZ6bjxvci5sZW5ndGgmJihvclt6bl0udj1ubi5zdWJzdHIo''@;'; put 'put ''MCxrbisxKStvclt6bl0udil9ZWxzZSBpZih4biE9PW9yLmxlbmd0aCYmLTE9PT1ubi5pbmRleE9mKCJFIikpe2Zvcihrbj1ubi5pbmRleE9mKGtyKS0xLFNyPXhuO1NyPj0wOy0tU3IpaWYobnVsbCE9b3JbU3JdJiYtMSE9PSJuPyIuaW5kZXhPZihvcltTcl0udCkpe2ZvcihtYT1vcltTcl0u''@;'; put 'put ''di5pbmRleE9mKCIuIik+LTEmJlNyPT09eG4/b3JbU3JdLnYuaW5kZXhPZigiLiIpLTE6b3JbU3JdLnYubGVuZ3RoLTEsd249b3JbU3JdLnYuc3Vic3RyKG1hKzEpO21hPj0wOy0tbWEpa24+PTAmJigiMCI9PT1vcltTcl0udi5jaGFyQXQobWEpfHwiIyI9PT1vcltTcl0udi5jaGFyQXQobWEp''@;'; put 'put ''KSYmKHduPW5uLmNoYXJBdChrbi0tKSt3bik7b3JbU3JdLnY9d24sb3JbU3JdLnQ9InQiLHpuPVNyfWZvcihrbj49MCYmem48b3IubGVuZ3RoJiYob3Jbem5dLnY9bm4uc3Vic3RyKDAsa24rMSkrb3Jbem5dLnYpLGtuPW5uLmluZGV4T2Yoa3IpKzEsU3I9eG47U3I8b3IubGVuZ3RoOysrU3Ip''@;'; put 'put ''aWYobnVsbCE9b3JbU3JdJiYoLTEhPT0ibj8oIi5pbmRleE9mKG9yW1NyXS50KXx8U3I9PT14bikpe2ZvcihtYT1vcltTcl0udi5pbmRleE9mKGtyKT4tMSYmU3I9PT14bj9vcltTcl0udi5pbmRleE9mKGtyKSsxOjAsd249b3JbU3JdLnYuc3Vic3RyKDAsbWEpO21hPG9yW1NyXS52Lmxlbmd0''@;'; put 'put ''aDsrK21hKWtuPG5uLmxlbmd0aCYmKHduKz1ubi5jaGFyQXQoa24rKykpO29yW1NyXS52PXduLG9yW1NyXS50PSJ0Iix6bj1Tcn19fWZvcihTcj0wO1NyPG9yLmxlbmd0aDsrK1NyKW51bGwhPW9yW1NyXSYmIm4/Ii5pbmRleE9mKG9yW1NyXS50KT4tMSYmKG9yW1NyXS52PWhvKG9yW1NyXS50''@;'; put 'put ''LG9yW1NyXS52LFp0PXhpPjEmJkVuPDAmJlNyPjAmJiItIj09PW9yW1NyLTFdLnY/LUVuOkVuKS5yZXBsYWNlKC9cLi9nLGtyKS5yZXBsYWNlKC8sLyxMaSksb3JbU3JdLnQ9InQiKTt2YXIgeXI9IiI7Zm9yKFNyPTA7U3IhPT1vci5sZW5ndGg7KytTciludWxsIT1vcltTcl0mJih5cis9b3Jb''@;'; put 'put ''U3JdLnYpO3JldHVybiB5cn1SLmlzX2RhdGU9SXMsUi5fZXZhbD1Qbjt2YXIgaHI9L1xbWz08Pl0vLFFsPS9cWyg9fD5bPV0/fDxbPj1dPykoLT9cZCsoPzpcLlxkKik/KVxdLztmdW5jdGlvbiBZbChsbixFbil7aWYobnVsbD09RW4pcmV0dXJuITE7dmFyIFVuPXBhcnNlRmxvYXQoRW5bMl0p''@;'; put 'put ''O3N3aXRjaChFblsxXSl7Y2FzZSI9IjppZihsbj09VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZihsbj5VbilyZXR1cm4hMDticmVhaztjYXNlIjwiOmlmKGxuPFVuKXJldHVybiEwO2JyZWFrO2Nhc2UiPD4iOmlmKGxuIT1VbilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihsbj49VW4p''@;'; put 'put ''cmV0dXJuITA7YnJlYWs7Y2FzZSI8PSI6aWYobG48PVVuKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHl1KGxuLEVuLFVuKXtudWxsPT1VbiYmKFVuPXt9KTt2YXIgeGk9IiI7c3dpdGNoKHR5cGVvZiBsbil7Y2FzZSJzdHJpbmciOnhpPSJtL2QveXkiPT1sbiYmVW4uZGF0ZU5GP1VuLmRh''@;'; put 'put ''dGVORjpsbjticmVhaztjYXNlIm51bWJlciI6bnVsbD09KHhpPTE0PT1sbiYmVW4uZGF0ZU5GP1VuLmRhdGVORjoobnVsbCE9VW4udGFibGU/VW4udGFibGU6YnQpW2xuXSkmJih4aT1Vbi50YWJsZSYmVW4udGFibGVbanRbbG5dXXx8YnRbanRbbG5dXSksbnVsbD09eGkmJih4aT1PdFtsbl18''@;'; put 'put ''fCJHZW5lcmFsIil9aWYoWWUoeGksMCkpcmV0dXJuIF9hKEVuLFVuKTtFbiBpbnN0YW5jZW9mIERhdGUmJihFbj1YbihFbixVbi5kYXRlMTkwNCkpO3ZhciBvcj1mdW5jdGlvbiBHbChsbixFbil7dmFyIFVuPUphKGxuKSx4aT1Vbi5sZW5ndGgsb3I9VW5beGktMV0uaW5kZXhPZigiQCIpO2lm''@;'; put 'put ''KHhpPDQmJm9yPi0xJiYtLXhpLFVuLmxlbmd0aD40KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IitVbi5qb2luKCJ8IikrInwiKTtpZigibnVtYmVyIiE9dHlwZW9mIEVuKXJldHVybls0LDQ9PT1Vbi5sZW5ndGh8fG9yPi0xP1VuW1VuLmxlbmd0aC0x''@;'; put 'put ''XToiQCJdO3N3aXRjaChVbi5sZW5ndGgpe2Nhc2UgMTpVbj1vcj4tMT9bIkdlbmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsVW5bMF1dOltVblswXSxVblswXSxVblswXSwiQCJdO2JyZWFrO2Nhc2UgMjpVbj1vcj4tMT9bVW5bMF0sVW5bMF0sVW5bMF0sVW5bMV1dOltVblswXSxVblsxXSxV''@;'; put 'put ''blswXSwiQCJdO2JyZWFrO2Nhc2UgMzpVbj1vcj4tMT9bVW5bMF0sVW5bMV0sVW5bMF0sVW5bMl1dOltVblswXSxVblsxXSxVblsyXSwiQCJdfXZhciBPaT1Fbj4wP1VuWzBdOkVuPDA/VW5bMV06VW5bMl07aWYoLTE9PT1VblswXS5pbmRleE9mKCJbIikmJi0xPT09VW5bMV0uaW5kZXhPZigi''@;'; put 'put ''WyIpKXJldHVyblt4aSxPaV07aWYobnVsbCE9VW5bMF0ubWF0Y2goaHIpfHxudWxsIT1VblsxXS5tYXRjaChocikpe3ZhciBTcj1VblswXS5tYXRjaChRbCksUGk9VW5bMV0ubWF0Y2goUWwpO3JldHVybiBZbChFbixTcik/W3hpLFVuWzBdXTpZbChFbixQaSk/W3hpLFVuWzFdXTpbeGksVW5b''@;'; put 'put ''bnVsbCE9U3ImJm51bGwhPVBpPzI6MV1dfXJldHVyblt4aSxPaV19KHhpLEVuKTtpZihZZShvclsxXSkpcmV0dXJuIF9hKEVuLFVuKTtpZighMD09PUVuKUVuPSJUUlVFIjtlbHNlIGlmKCExPT09RW4pRW49IkZBTFNFIjtlbHNlIGlmKCIiPT09RW58fG51bGw9PUVuKXJldHVybiIiO3JldHVy''@;'; put 'put ''biBQbihvclsxXSxFbixVbixvclswXSl9ZnVuY3Rpb24gTWwobG4sRW4pe2lmKCJudW1iZXIiIT10eXBlb2YgRW4pe0VuPStFbnx8LTE7Zm9yKHZhciBVbj0wO1VuPDM5MjsrK1VuKWlmKG51bGwhPWJ0W1VuXSl7aWYoYnRbVW5dPT1sbil7RW49VW47YnJlYWt9fWVsc2UgRW48MCYmKEVuPVVu''@;'; put 'put ''KTtFbjwwJiYoRW49MzkxKX1yZXR1cm4gYnRbRW5dPWxuLEVufVIubG9hZD1NbCxSLl90YWJsZT1idCxSLmdldF90YWJsZT1mdW5jdGlvbigpe3JldHVybiBidH0sUi5sb2FkX3RhYmxlPWZ1bmN0aW9uKEVuKXtmb3IodmFyIFVuPTA7MzkyIT1VbjsrK1VuKXZvaWQgMCE9PUVuW1VuXSYmTWwo''@;'; put 'put ''RW5bVW5dLFVuKX0sUi5pbml0X3RhYmxlPWF0LFIuZm9ybWF0PXl1LFIuZ2V0bG9jYWxlPWZ1bmN0aW9uIEJyKCl7cmV0dXJuIEJufHwiZW4tVVMifSxSLnNldGxvY2FsZT1mdW5jdGlvbiBfcihsbil7aWYoZnVuY3Rpb24ganIobG4pe3ZhciBFbj0wO3N3aXRjaCgoQm58fCIiKS50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpKXtjYXNlInpoLXR3IjpjYXNlInpoLWNuIjpjYXNlImphLWpwIjpjYXNlImtvLWtyIjpmb3IoRW49Mjc7RW48PTM2OysrRW4pZGVsZXRlIGxuW0VuXTtmb3IoRW49NTA7RW48PTU4OysrRW4pZGVsZXRlIGxuW0VuXTticmVhaztjYXNlInRoLXRoIjpmb3IoRW49NTk7RW48PTYyOysr''@;'; put 'put ''RW4pZGVsZXRlIGxuW0VuXTtmb3IoRW49Njc7RW48PTgxOysrRW4pZGVsZXRlIGxuW0VuXX19KGJ0KSxCbj1sbixGbihidCksdHlwZW9mIEludGw8InUiKXt2YXIgRW49SW50bC5EYXRlVGltZUZvcm1hdChsbik7aWYoRW4uZm9ybWF0VG9QYXJ0cyl7Zm9yKHZhciBVbj1Fbi5mb3JtYXRUb1Bh''@;'; put 'put ''cnRzKG5ldyBEYXRlKDIwMjAsMCw1LDAsMCwwKSkseGk9MDt4aTw3OysreGkpY3RbeGldWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se3dlZWtkYXk6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNSt4aSwwLDAsMCkpWzBdLnZhbHVlLGN0W3hpXVswXT1JbnRsLkRh''@;'; put 'put ''dGVUaW1lRm9ybWF0KGxuLHt3ZWVrZGF5OiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K3hpLDAsMCwwKSlbMF0udmFsdWU7Zm9yKHZhciBvcj0wO29yPDEyOysrb3IpRXRbb3JdWzJdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se21vbnRoOiJsb25nIn0pLmZvcm1h''@;'; put 'put ''dFRvUGFydHMobmV3IERhdGUoMjAyMCxvciwyLDAsMCwwKSlbMF0udmFsdWUsRXRbb3JdWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se21vbnRoOiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsb3IsMiwwLDAsMCkpWzBdLnZhbHVlLEV0W29yXVswXT1FdFtvcl1bMV0u''@;'; put 'put ''c2xpY2UoMCwxKTtmb3IodmFyIE9pPSIiLFNyPTA7U3I8VW4ubGVuZ3RoOysrU3Ipe3ZhciBQaT1VbltTcl0udmFsdWU7c3dpdGNoKFVuW1NyXS50eXBlKXtjYXNlInllYXIiOk9pKz0yPT1QaS5sZW5ndGg/Inl5IjoieXl5eSI7YnJlYWs7Y2FzZSJtb250aCI6T2krPSIxIj09UGk/Im0iOiIw''@;'; put 'put ''MSI9PVBpPyJtbSI6UGk9PUV0WzBdWzFdPyJtbW0iOlBpPT1FdFswXVsyXT8ibW1tbSI6UGk9PUV0WzBdWzBdPyJtbW1tbSI6Im1tIjticmVhaztjYXNlImRheSI6T2krPSI1Ij09UGk/ImQiOiIwNSI9PVBpPyJkZCI6UGk9PWN0WzBdWzBdPyJkZGQiOlBpPT1jdFswXVsxXT8iZGRkZCI6ImRk''@;'; put 'put ''IjticmVhaztjYXNlImxpdGVyYWwiOk9pKz1QaS5yZXBsYWNlKC8uL2csIlxcJCYiKSwxPT1QaS5sZW5ndGgmJihWbj1QaSl9fShsbi5tYXRjaCgvZW4vaSkmJmxuLm1hdGNoKC91cy9pKXx8IWxuKSYmKE9pPSJtL2QveXkiKSxidFsxNF09T2l9ZWxzZSJqYS1qcCI9PWxuLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkmJihidFsxNF09Inl5eXlcXC9tXFwvZCIpO3ZhciBaYT1JbnRsLk51bWJlckZvcm1hdChsbix7fSkuZm9ybWF0KDEyMzQ1NjcuODkpO1phJiYoTGk9KFphLm1hdGNoKC8xKC4qKTIvKXx8W10pWzFdLGtyPShaYS5tYXRjaCgvNyguKik4Lyl8fFtdKVsxXSl9ZnJbbG4udG9Mb3dlckNhc2Uo''@;'; put 'put ''KV18fChmcltsbi50b0xvd2VyQ2FzZSgpXT17Ii4iOmtyLCIsIjpMaX0pLGVyPWV0KGJyPWZyW2xuLnRvTG93ZXJDYXNlKCldfHxmclsiZW4tdXMiXSl9LFIubm9ybWFsaXplPWZ1bmN0aW9uIFdvKGxuKXtmb3IodmFyIEVuPTAsVW49MCx4aT0iIixvcj0iIixPaT0iIixTcj1ici55fHwieSIs''@;'; put 'put ''UGk9U3IudG9VcHBlckNhc2UoKSxaYT1ici5kfHwiZCIsSGk9WmEudG9VcHBlckNhc2UoKSxtYT1iclsiLiJdLERpPWJyWyIsIl0sY3M9IjAjP0UrLSUiK2JyWyIsIl0rbWE7RW48bG4ubGVuZ3RoOylzd2l0Y2goeGk9bG4uY2hhckF0KEVuKSl7Y2FzZSJHIjpFbisrLE9pKz14aTticmVhaztj''@;'; put 'put ''YXNlJyInOmZvcihPaSs9eGk7MzQhPT0oVW49bG4uY2hhckNvZGVBdCgrK0VuKSkmJkVuPGxuLmxlbmd0aDspT2krPVN0cmluZy5mcm9tQ2hhckNvZGUoVW4pO09pKz0nIicsKytFbjticmVhaztjYXNlIlxcIjpjYXNlIl8iOk9pKz1sbi5zbGljZShFbixFbisyKSxFbis9MjticmVhaztjYXNl''@;'; put 'put ''IkAiOk9pKz14aSwrK0VuO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjorK0VuLE9pKz14aTticmVhaztjYXNlIFNyOmNhc2UgUGk6Y2FzZSBaYTpjYXNlIEhpOk9pKz1lclt4aS50b0xvd2VyQ2FzZSgpXSwrK0VuO2JyZWFrO2Nhc2UiTSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2FzZSJtIjpj''@;'; put 'put ''YXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiQSI6Y2FzZSJhIjpPaSs9eGksKytFbjticmVhaztjYXNlIlsiOmZvcihvcj14aTsiXSIhPT1sbi5jaGFyQXQoRW4rKykmJkVuPGxuLmxlbmd0aDspb3IrPWxuLmNoYXJBdChFbik7T2krPW9yO2JyZWFrO2Nhc2UgRGk6T2krPSci''@;'; put 'put ''Jyt4aSsnIicsKytFbjticmVhaztjYXNlIG1hOmlmKCEoRW48bG4ubGVuZ3RoJiYoY3MuaW5kZXhPZih4aT1sbi5jaGFyQXQoKytFbikpPi0xfHwiXFwiPT14aSYmIi0iPT1sbi5jaGFyQXQoRW4rMSkmJiIwIyIuaW5kZXhPZihsbi5jaGFyQXQoRW4rMikpPi0xKSkpe09pKz0nIicrbWErJyIn''@;'; put 'put ''O2JyZWFrfXhpPW1hLC0tRW47Y2FzZSIwIjpjYXNlIiMiOmZvcihPaSs9ZXJbeGkudG9Mb3dlckNhc2UoKV18fHhpO0VuPGxuLmxlbmd0aCYmKGNzLmluZGV4T2YoeGk9bG4uY2hhckF0KCsrRW4pKT4tMXx8IlxcIj09eGkmJiItIj09bG4uY2hhckF0KEVuKzEpJiYiMCMiLmluZGV4T2YobG4u''@;'; put 'put ''Y2hhckF0KEVuKzIpKT4tMSk7KU9pKz1lclt4aS50b0xvd2VyQ2FzZSgpXXx8eGk7YnJlYWs7Y2FzZSI/Ijpmb3IoT2krPXhpO2xuLmNoYXJBdCgrK0VuKT09PXhpOylPaSs9eGk7YnJlYWs7Y2FzZSIqIjpPaSs9eGksKytFbiwoIiAiPT1sbi5jaGFyQXQoRW4pfHwiKiI9PWxuLmNoYXJBdChF''@;'; put 'put ''bikpJiYoT2krPWxuLmNoYXJBdChFbiksKytFbik7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOk9pKz14aSwrK0VuO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihPaSs9eGk7RW48bG4ubGVuZ3Ro''@;'; put 'put ''JiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihsbi5jaGFyQXQoKytFbikpPi0xOylPaSs9bG4uY2hhckF0KEVuKTticmVhaztkZWZhdWx0Ok9pKz14aSwrK0VufXJldHVybiBPaX0sUi5nZXRjdXJyZW5jeT1mdW5jdGlvbiBuYSgpe3JldHVybiBGaXx8IlVTRCJ9LFIuc2V0Y3VycmVuY3k9ZnVuY3Rp''@;'; put 'put ''b24gY2EobG4pe0ZpPWxuLE1pPXR5cGVvZiBJbnRsPCJ1Ij9JbnRsLk51bWJlckZvcm1hdChCbix7c3R5bGU6ImN1cnJlbmN5IixjdXJyZW5jeURpc3BsYXk6InN5bWJvbCIsY3VycmVuY3k6bG59KS5mb3JtYXQoMCkucmVwbGFjZSgvWzBcLlwsXHNdL2csIiIpOiIkIn19O2FlKEEpO3ZhciB4''@;'; put 'put ''ZSx0ZT17IkdlbmVyYWwgTnVtYmVyIjoiR2VuZXJhbCIsIkdlbmVyYWwgRGF0ZSI6QS5fdGFibGVbMjJdLCJMb25nIERhdGUiOiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOkEuX3RhYmxlWzE1XSwiU2hvcnQgRGF0ZSI6QS5fdGFibGVbMTRdLCJMb25nIFRpbWUiOkEuX3Rh''@;'; put 'put ''YmxlWzE5XSwiTWVkaXVtIFRpbWUiOkEuX3RhYmxlWzE4XSwiU2hvcnQgVGltZSI6QS5fdGFibGVbMjBdLEN1cnJlbmN5OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOkEuX3RhYmxlWzJdLFN0YW5kYXJkOkEuX3RhYmxlWzRdLFBlcmNlbnQ6QS5fdGFibGVb''@;'; put 'put ''MTBdLFNjaWVudGlmaWM6QS5fdGFibGVbMTFdLCJZZXMvTm8iOiciWWVzIjsiWWVzIjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjonIlRydWUiOyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfSxzZT17NTonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjon''@;'; put 'put ''IiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw3OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDIzOiJHZW5lcmFsIiwyNDoiR2VuZXJhbCIsMjU6IkdlbmVyYWwiLDI2OiJHZW5lcmFsIiwyNzoi''@;'; put 'put ''bS9kL3l5IiwyODoibS9kL3l5IiwyOToibS9kL3l5IiwzMDoibS9kL3l5IiwzMToibS9kL3l5IiwzMjoiaDptbTpzcyIsMzM6Img6bW06c3MiLDM0OiJoOm1tOnNzIiwzNToiaDptbTpzcyIsMzY6Im0vZC95eSIsNDE6J18oKiAjLCMjMF8pO18oKiAoIywjIzApO18oKiAiLSJfKTtfKEBfKScs''@;'; put 'put ''NDI6J18oIiQiKiAjLCMjMF8pO18oIiQiKiAoIywjIzApO18oIiQiKiAiLSJfKTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiAoIywjIzAuMDApO18oKiAiLSI/P18pO18oQF8pJyw0NDonXygiJCIqICMsIyMwLjAwXyk7XygiJCIqICgjLCMjMC4wMCk7XygiJCIqICItIj8/Xyk7XyhA''@;'; put 'put ''XyknLDUwOiJtL2QveXkiLDUxOiJtL2QveXkiLDUyOiJtL2QveXkiLDUzOiJtL2QveXkiLDU0OiJtL2QveXkiLDU1OiJtL2QveXkiLDU2OiJtL2QveXkiLDU3OiJtL2QveXkiLDU4OiJtL2QveXkiLDU5OiIwIiw2MDoiMC4wMCIsNjE6IiMsIyMwIiw2MjoiIywjIzAuMDAiLDYzOiciJCIjLCMj''@;'; put 'put ''MF8pO1xcKCIkIiMsIyMwXFwpJyw2NDonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw2NTonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsNjY6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsNjc6IjAlIiw2ODoiMC4wMCUiLDY5OiIjID8vPyIs''@;'; put 'put ''NzA6IiMgPz8vPz8iLDcxOiJtL2QveXkiLDcyOiJtL2QveXkiLDczOiJkLW1tbS15eSIsNzQ6ImQtbW1tIiw3NToibW1tLXl5Iiw3NjoiaDptbSIsNzc6Img6bW06c3MiLDc4OiJtL2QveXkgaDptbSIsNzk6Im1tOnNzIiw4MDoiW2hdOm1tOnNzIiw4MToibW1zcy4wIn0sd2U9L1tkRF0rfFtt''@;'; put 'put ''TV0rfFt5WWVFXSt8W0hoXSt8W1NzXSsvZzshZnVuY3Rpb24oUyl7Uy52ZXJzaW9uPSIxLjIuMCI7dmFyIGs9ZnVuY3Rpb24gUigpe2Zvcih2YXIgcGU9MCx5ZT1uZXcgQXJyYXkoMjU2KSxQZT0wOzI1NiE9UGU7KytQZSl5ZVtQZV09cGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9''@;'; put 'put ''MSYocGU9MSYocGU9MSYocGU9UGUpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBl''@;'; put 'put ''Pj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xO3JldHVybiB0eXBlb2YgSW50MzJBcnJheTwidSI/bmV3IEludDMyQXJyYXkoeWUpOnllfSgpO1MudGFibGU9ayxTLmJzdHI9ZnVuY3Rpb24gRyhwZSx5ZSl7Zm9yKHZhciBQZT1+''@;'; put 'put ''eWUsTmU9cGUubGVuZ3RoLTEsWWU9MDtZZTxOZTspUGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVecGUuY2hhckNvZGVBdChZZSsrKSldKT4+Pjhea1syNTUmKFBlXnBlLmNoYXJDb2RlQXQoWWUrKykpXTtyZXR1cm4gWWU9PT1OZSYmKFBlPVBlPj4+OF5rWzI1NSYoUGVecGUuY2hhckNvZGVBdChZ''@;'; put 'put ''ZSkpXSksflBlfSxTLmJ1Zj1mdW5jdGlvbiBRKHBlLHllKXtpZihwZS5sZW5ndGg+MWU0KXJldHVybiBmdW5jdGlvbiBvZShwZSx5ZSl7Zm9yKHZhciBQZT1+eWUsTmU9cGUubGVuZ3RoLTcsWWU9MDtZZTxOZTspUGU9KFBlPShQZT0oUGU9KFBlPShQZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYo''@;'; put 'put ''UGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUr''@;'; put 'put ''K10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO2Zvcig7WWU8TmUrNzspUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO3JldHVybn5QZX0ocGUseWUpO2Zvcih2YXIgUGU9fnllLE5lPXBlLmxlbmd0aC0zLFllPTA7WWU8TmU7KVBlPShQZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYo''@;'; put 'put ''UGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXTtmb3IoO1llPE5lKzM7KVBlPVBlPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXTtyZXR1cm5+UGV9LFMuc3RyPWZ1bmN0aW9uIGdl''@;'; put 'put ''KHBlLHllKXtmb3IodmFyIGV0LGN0LFBlPX55ZSxOZT0wLFllPXBlLmxlbmd0aDtOZTxZZTspKGV0PXBlLmNoYXJDb2RlQXQoTmUrKykpPDEyOD9QZT1QZT4+Pjhea1syNTUmKFBlXmV0KV06ZXQ8MjA0OD9QZT0oUGU9UGU+Pj44XmtbMjU1JihQZV4oMTkyfGV0Pj42JjMxKSldKT4+Pjhea1sy''@;'; put 'put ''NTUmKFBlXigxMjh8NjMmZXQpKV06ZXQ+PTU1Mjk2JiZldDw1NzM0ND8oZXQ9NjQrKDEwMjMmZXQpLGN0PTEwMjMmcGUuY2hhckNvZGVBdChOZSsrKSxQZT0oUGU9KFBlPShQZT1QZT4+Pjhea1syNTUmKFBlXigyNDB8ZXQ+PjgmNykpXSk+Pj44XmtbMjU1JihQZV4oMTI4fGV0Pj4yJjYzKSld''@;'; put 'put ''KT4+Pjhea1syNTUmKFBlXigxMjh8Y3Q+PjYmMTV8KDMmZXQpPDw0KSldKT4+Pjhea1syNTUmKFBlXigxMjh8NjMmY3QpKV0pOlBlPShQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV4oMjI0fGV0Pj4xMiYxNSkpXSk+Pj44XmtbMjU1JihQZV4oMTI4fGV0Pj42JjYzKSldKT4+Pjhea1syNTUmKFBl''@;'; put 'put ''XigxMjh8NjMmZXQpKV07cmV0dXJuflBlfX0oeGU9e30pO3ZhciBYZSx2ZT1mdW5jdGlvbigpe3ZhciB5ZSxSPXt9O2Z1bmN0aW9uIEcoZ24pe2lmKCIvIj09Z24uY2hhckF0KGduLmxlbmd0aC0xKSlyZXR1cm4tMT09PWduLnNsaWNlKDAsLTEpLmluZGV4T2YoIi8iKT9nbjpHKGduLnNsaWNl''@;'; put 'put ''KDAsLTEpKTt2YXIga249Z24ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWtuP2duOmduLnNsaWNlKDAsa24rMSl9ZnVuY3Rpb24gUShnbil7aWYoIi8iPT1nbi5jaGFyQXQoZ24ubGVuZ3RoLTEpKXJldHVybiBRKGduLnNsaWNlKDAsLTEpKTt2YXIga249Z24ubGFzdEluZGV4T2YoIi8i''@;'; put 'put ''KTtyZXR1cm4tMT09PWtuP2duOmduLnNsaWNlKGtuKzEpfWZ1bmN0aW9uIG9lKGduLGtuKXsic3RyaW5nIj09dHlwZW9mIGtuJiYoa249bmV3IERhdGUoa24pKTt2YXIgd249a24uZ2V0SG91cnMoKTt3bj0od249d248PDZ8a24uZ2V0TWludXRlcygpKTw8NXxrbi5nZXRTZWNvbmRzKCk+Pj4x''@;'; put 'put ''LGduLndyaXRlX3NoaWZ0KDIsd24pO3ZhciBadD1rbi5nZXRGdWxsWWVhcigpLTE5ODA7WnQ9KFp0PVp0PDw0fGtuLmdldE1vbnRoKCkrMSk8PDV8a24uZ2V0RGF0ZSgpLGduLndyaXRlX3NoaWZ0KDIsWnQpfWZ1bmN0aW9uIHBlKGduKXttbihnbiwwKTtmb3IodmFyIGtuPXt9LHduPTA7Z24u''@;'; put 'put ''bDw9Z24ubGVuZ3RoLTQ7KXt2YXIgWnQ9Z24ucmVhZF9zaGlmdCgyKSxubj1nbi5yZWFkX3NoaWZ0KDIpLHhuPWduLmwrbm4sem49e307MjE1ODk9PT1adCYmKDEmKHduPWduLnJlYWRfc2hpZnQoMSkpJiYoem4ubXRpbWU9Z24ucmVhZF9zaGlmdCg0KSksbm4+NSYmKDImd24mJih6bi5hdGlt''@;'; put 'put ''ZT1nbi5yZWFkX3NoaWZ0KDQpKSw0JnduJiYoem4uY3RpbWU9Z24ucmVhZF9zaGlmdCg0KSkpLHpuLm10aW1lJiYoem4ubXQ9bmV3IERhdGUoMWUzKnpuLm10aW1lKSkpLGduLmw9eG4sa25bWnRdPXpufXJldHVybiBrbn1mdW5jdGlvbiBQZSgpe3JldHVybiB5ZXx8KHllPXkoODMzMzcpKX1m''@;'; put 'put ''dW5jdGlvbiBOZShnbixrbil7aWYoODA9PWduWzBdJiY3NT09Z25bMV0pcmV0dXJuIERpKGduLGtuKTtpZihnbi5sZW5ndGg8NTEyKXRocm93IG5ldyBFcnJvcigiQ0ZCIGZpbGUgc2l6ZSAiK2duLmxlbmd0aCsiIDwgNTEyIik7dmFyIHduLG5uLHhuLHpuLHlyLFdyLFp0PTUxMixvaT1bXSxu''@;'; put 'put ''aT1nbi5zbGljZSgwLDUxMik7bW4obmksMCk7dmFyIFhpPWZ1bmN0aW9uIFllKGduKXtpZig4MD09Z25bZ24ubF0mJjc1PT1nbltnbi5sKzFdKXJldHVyblswLDBdO2duLmNoayhNaSwiSGVhZGVyIFNpZ25hdHVyZTogIiksZ24ubCs9MTY7dmFyIGtuPWduLnJlYWRfc2hpZnQoMiwidSIpO3Jl''@;'; put 'put ''dHVybltnbi5yZWFkX3NoaWZ0KDIsInUiKSxrbl19KG5pKTtzd2l0Y2god249WGlbMF0pe2Nhc2UgMzpadD01MTI7YnJlYWs7Y2FzZSA0Olp0PTQwOTY7YnJlYWs7Y2FzZSAwOmlmKDA9PVhpWzFdKXJldHVybiBEaShnbixrbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIk1ham9yIFZlcnNp''@;'; put 'put ''b246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIit3bil9NTEyIT09WnQmJm1uKG5pPWduLnNsaWNlKDAsWnQpLDI4KTt2YXIgVWk9Z24uc2xpY2UoMCxadCk7IWZ1bmN0aW9uIGV0KGduLGtuKXt2YXIgd247c3dpdGNoKGduLmwrPTIsd249Z24ucmVhZF9zaGlmdCgyKSl7Y2FzZSA5OmlmKDMhPWtu''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IHNhdyAiK3duKTticmVhaztjYXNlIDEyOmlmKDQhPWtuKXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCAxMiBzYXcgIit3bik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3Rv''@;'; put 'put ''ciBTaGlmdDogRXhwZWN0ZWQgOSBvciAxMiBzYXcgIit3bil9Z24uY2hrKCIwNjAwIiwiTWluaSBTZWN0b3IgU2hpZnQ6ICIpLGduLmNoaygiMDAwMDAwMDAwMDAwIiwiUmVzZXJ2ZWQ6ICIpfShuaSx3bik7dmFyIG5vPW5pLnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT13biYmMCE9PW5vKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiIyBEaXJlY3RvcnkgU2VjdG9yczogRXhwZWN0ZWQgMCBzYXcgIitubyk7bmkubCs9NCx6bj1uaS5yZWFkX3NoaWZ0KDQsImkiKSxuaS5sKz00LG5pLmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZTogIikseXI9bmkucmVhZF9zaGlmdCg0LCJp''@;'; put 'put ''Iiksbm49bmkucmVhZF9zaGlmdCg0LCJpIiksV3I9bmkucmVhZF9zaGlmdCg0LCJpIikseG49bmkucmVhZF9zaGlmdCg0LCJpIik7Zm9yKHZhciBqYT0tMSx2YT0wO3ZhPDEwOSYmISgoamE9bmkucmVhZF9zaGlmdCg0LCJpIikpPDApOysrdmEpb2lbdmFdPWphO3ZhciBUbz1mdW5jdGlvbiBj''@;'; put 'put ''dChnbixrbil7Zm9yKHZhciB3bj1NYXRoLmNlaWwoZ24ubGVuZ3RoL2tuKS0xLFp0PVtdLG5uPTE7bm48d247KytubiladFtubi0xXT1nbi5zbGljZShubiprbiwobm4rMSkqa24pO3JldHVybiBadFt3bi0xXT1nbi5zbGljZSh3biprbiksWnR9KGduLFp0KTtidChXcix4bixUbyxadCxvaSk7''@;'; put 'put ''dmFyIHhzPWZ1bmN0aW9uIGt0KGduLGtuLHduLFp0KXt2YXIgbm49Z24ubGVuZ3RoLHhuPVtdLHpuPVtdLHlyPVtdLFdyPVtdLG9pPVp0LTEsbmk9MCxYaT0wLFVpPTAsbm89MDtmb3Iobmk9MDtuaTxubjsrK25pKWlmKHlyPVtdLChVaT1uaStrbik+PW5uJiYoVWktPW5uKSwhem5bVWldKXtX''@;'; put 'put ''cj1bXTt2YXIgamE9W107Zm9yKFhpPVVpO1hpPj0wOyl7amFbWGldPSEwLHpuW1hpXT0hMCx5clt5ci5sZW5ndGhdPVhpLFdyLnB1c2goZ25bWGldKTt2YXIgdmE9d25bTWF0aC5mbG9vcig0KlhpL1p0KV07aWYoWnQ8NCsobm89NCpYaSZvaSkpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRh''@;'; put 'put ''cnkgY3Jvc3NlZDogIitYaSsiIDQgIitadCk7aWYoIWduW3ZhXXx8amFbWGk9VnMoZ25bdmFdLG5vKV0pYnJlYWt9eG5bVWldPXtub2Rlczp5cixkYXRhOnkwKFtXcl0pfX1yZXR1cm4geG59KFRvLHpuLG9pLFp0KTt4c1t6bl0ubmFtZT0iIURpcmVjdG9yeSIsbm4+MCYmeXIhPT1lciYmKHhz''@;'; put 'put ''W3lyXS5uYW1lPSIhTWluaUZBVCIpLHhzW29pWzBdXS5uYW1lPSIhRkFUIix4cy5mYXRfYWRkcnM9b2kseHMuc3N6PVp0O3ZhciBjMD1bXSxhMT1bXSxCOD1bXTsoZnVuY3Rpb24gT3QoZ24sa24sd24sWnQsbm4seG4sem4seXIpe2Zvcih2YXIgbm8sV3I9MCxvaT1adC5sZW5ndGg/MjowLG5p''@;'; put 'put ''PWtuW2duXS5kYXRhLFhpPTAsVWk9MDtYaTxuaS5sZW5ndGg7WGkrPTEyOCl7dmFyIGphPW5pLnNsaWNlKFhpLFhpKzEyOCk7bW4oamEsNjQpLFVpPWphLnJlYWRfc2hpZnQoMiksbm89T2woamEsMCxVaS1vaSksWnQucHVzaChubyk7dmFyIHZhPXtuYW1lOm5vLHR5cGU6amEucmVhZF9zaGlm''@;'; put 'put ''dCgxKSxjb2xvcjpqYS5yZWFkX3NoaWZ0KDEpLEw6amEucmVhZF9zaGlmdCg0LCJpIiksUjpqYS5yZWFkX3NoaWZ0KDQsImkiKSxDOmphLnJlYWRfc2hpZnQoNCwiaSIpLGNsc2lkOmphLnJlYWRfc2hpZnQoMTYpLHN0YXRlOmphLnJlYWRfc2hpZnQoNCwiaSIpLHN0YXJ0OjAsc2l6ZTowfTsw''@;'; put 'put ''IT09amEucmVhZF9zaGlmdCgyKStqYS5yZWFkX3NoaWZ0KDIpK2phLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlmdCgyKSYmKHZhLmN0PUt0KGphLGphLmwtOCkpLDAhPT1qYS5yZWFkX3NoaWZ0KDIpK2phLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlmdCgyKStqYS5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''JiYodmEubXQ9S3QoamEsamEubC04KSksdmEuc3RhcnQ9amEucmVhZF9zaGlmdCg0LCJpIiksdmEuc2l6ZT1qYS5yZWFkX3NoaWZ0KDQsImkiKSx2YS5zaXplPDAmJnZhLnN0YXJ0PDAmJih2YS5zaXplPXZhLnR5cGU9MCx2YS5zdGFydD1lcix2YS5uYW1lPSIiKSw1PT09dmEudHlwZT8oV3I9''@;'; put 'put ''dmEuc3RhcnQsbm4+MCYmV3IhPT1lciYmKGtuW1dyXS5uYW1lPSIhU3RyZWFtRGF0YSIpKTp2YS5zaXplPj00MDk2Pyh2YS5zdG9yYWdlPSJmYXQiLHZvaWQgMD09PWtuW3ZhLnN0YXJ0XSYmKGtuW3ZhLnN0YXJ0XT1qdCh3bix2YS5zdGFydCxrbi5mYXRfYWRkcnMsa24uc3N6KSksa25bdmEu''@;'; put 'put ''c3RhcnRdLm5hbWU9dmEubmFtZSx2YS5jb250ZW50PWtuW3ZhLnN0YXJ0XS5kYXRhLnNsaWNlKDAsdmEuc2l6ZSkpOih2YS5zdG9yYWdlPSJtaW5pZmF0Iix2YS5zaXplPDA/dmEuc2l6ZT0wOldyIT09ZXImJnZhLnN0YXJ0IT09ZXImJmtuW1dyXSYmKHZhLmNvbnRlbnQ9YXQodmEsa25bV3Jd''@;'; put 'put ''LmRhdGEsKGtuW3lyXXx8e30pLmRhdGEpKSksdmEuY29udGVudCYmbW4odmEuY29udGVudCwwKSx4bltub109dmEsem4ucHVzaCh2YSl9fSkoem4seHMsVG8sYzAsbm4se30sYTEseXIpLGZ1bmN0aW9uIEV0KGduLGtuLHduKXtmb3IodmFyIFp0PTAsbm49MCx4bj0wLHpuPTAseXI9MCxXcj13''@;'; put 'put ''bi5sZW5ndGgsb2k9W10sbmk9W107WnQ8V3I7KytadClvaVtadF09bmlbWnRdPVp0LGtuW1p0XT13bltadF07Zm9yKDt5cjxuaS5sZW5ndGg7Kyt5cilubj1nbltadD1uaVt5cl1dLkwseG49Z25bWnRdLlIsem49Z25bWnRdLkMsb2lbWnRdPT09WnQmJigtMSE9PW5uJiZvaVtubl0hPT1ubiYm''@;'; put 'put ''KG9pW1p0XT1vaVtubl0pLC0xIT09eG4mJm9pW3huXSE9PXhuJiYob2lbWnRdPW9pW3huXSkpLC0xIT09em4mJihvaVt6bl09WnQpLC0xIT09bm4mJlp0IT1vaVtadF0mJihvaVtubl09b2lbWnRdLG5pLmxhc3RJbmRleE9mKG5uKTx5ciYmbmkucHVzaChubikpLC0xIT09eG4mJlp0IT1vaVta''@;'; put 'put ''dF0mJihvaVt4bl09b2lbWnRdLG5pLmxhc3RJbmRleE9mKHhuKTx5ciYmbmkucHVzaCh4bikpO2ZvcihadD0xO1p0PFdyOysrWnQpb2lbWnRdPT09WnQmJigtMSE9PXhuJiZvaVt4bl0hPT14bj9vaVtadF09b2lbeG5dOi0xIT09bm4mJm9pW25uXSE9PW5uJiYob2lbWnRdPW9pW25uXSkpO2Zv''@;'; put 'put ''cihadD0xO1p0PFdyOysrWnQpaWYoMCE9PWduW1p0XS50eXBlKXtpZigoeXI9WnQpIT1vaVt5cl0pZG97a25bWnRdPWtuW3lyPW9pW3lyXV0rIi8iK2tuW1p0XX13aGlsZSgwIT09eXImJi0xIT09b2lbeXJdJiZ5ciE9b2lbeXJdKTtvaVtadF09LTF9Zm9yKGtuWzBdKz0iLyIsWnQ9MTtadDxX''@;'; put 'put ''cjsrK1p0KTIhPT1nbltadF0udHlwZSYmKGtuW1p0XSs9Ii8iKX0oYTEsQjgsYzApLGMwLnNoaWZ0KCk7dmFyIFg1PXtGaWxlSW5kZXg6YTEsRnVsbFBhdGhzOkI4fTtyZXR1cm4ga24mJmtuLnJhdyYmKFg1LnJhdz17aGVhZGVyOlVpLHNlY3RvcnM6VG99KSxYNX1mdW5jdGlvbiBhdChnbixr''@;'; put 'put ''bix3bil7Zm9yKHZhciBubj1nbi5zaXplLHhuPVtdLHpuPWduLnN0YXJ0O3duJiZubj4wJiZ6bj49MDspeG4ucHVzaChrbi5zbGljZSh6bipicix6bipiciticikpLG5uLT1icix6bj1Wcyh3biw0KnpuKTtyZXR1cm4gMD09PXhuLmxlbmd0aD9ibigwKTpqKHhuKS5zbGljZSgwLGduLnNpemUp''@;'; put 'put ''fWZ1bmN0aW9uIGJ0KGduLGtuLHduLFp0LG5uKXt2YXIgeG49ZXI7aWYoZ249PT1lcil7aWYoMCE9PWtuKXRocm93IG5ldyBFcnJvcigiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigtMSE9PWduKXt2YXIgem49d25bZ25dLHlyPShadD4+PjIpLTE7aWYoIXpu''@;'; put 'put ''KXJldHVybjtmb3IodmFyIFdyPTA7V3I8eXImJih4bj1Wcyh6biw0KldyKSkhPT1lcjsrK1dyKW5uLnB1c2goeG4pO2J0KFZzKHpuLFp0LTQpLGtuLTEsd24sWnQsbm4pfX1mdW5jdGlvbiBqdChnbixrbix3bixadCxubil7dmFyIHhuPVtdLHpuPVtdO25ufHwobm49W10pO3ZhciB5cj1adC0x''@;'; put 'put ''LFdyPTAsb2k9MDtmb3IoV3I9a247V3I+PTA7KXtubltXcl09ITAseG5beG4ubGVuZ3RoXT1Xcix6bi5wdXNoKGduW1dyXSk7dmFyIG5pPXduW01hdGguZmxvb3IoNCpXci9adCldO2lmKFp0PDQrKG9pPTQqV3ImeXIpKXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIr''@;'; put 'put ''V3IrIiA0ICIrWnQpO2lmKCFnbltuaV0pYnJlYWs7V3I9VnMoZ25bbmldLG9pKX1yZXR1cm57bm9kZXM6eG4sZGF0YTp5MChbem5dKX19ZnVuY3Rpb24gS3QoZ24sa24pe3JldHVybiBuZXcgRGF0ZSgxZTMqKHpvKGduLGtuKzQpLzFlNypNYXRoLnBvdygyLDMyKSt6byhnbixrbikvMWU3LTEx''@;'; put 'put ''NjQ0NDczNjAwKSl9ZnVuY3Rpb24gU24oZ24sa24pe3ZhciB3bj1rbnx8e30sWnQ9d24ucm9vdHx8IlJvb3QgRW50cnkiO2lmKGduLkZ1bGxQYXRoc3x8KGduLkZ1bGxQYXRocz1bXSksZ24uRmlsZUluZGV4fHwoZ24uRmlsZUluZGV4PVtdKSxnbi5GdWxsUGF0aHMubGVuZ3RoIT09Z24uRmls''@;'; put 'put ''ZUluZGV4Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImluY29uc2lzdGVudCBDRkIgc3RydWN0dXJlIik7MD09PWduLkZ1bGxQYXRocy5sZW5ndGgmJihnbi5GdWxsUGF0aHNbMF09WnQrIi8iLGduLkZpbGVJbmRleFswXT17bmFtZTpadCx0eXBlOjV9KSx3bi5DTFNJRCYmKGduLkZpbGVJbmRl''@;'; put 'put ''eFswXS5jbHNpZD13bi5DTFNJRCksZnVuY3Rpb24gbHIoZ24pe3ZhciBrbj0iXHgwMVNoMzN0SjUiO2lmKCF2ZS5maW5kKGduLCIvIitrbikpe3ZhciB3bj1ibig0KTt3blswXT01NSx3blsxXT13blszXT01MCx3blsyXT01NCxnbi5GaWxlSW5kZXgucHVzaCh7bmFtZTprbix0eXBlOjIsY29u''@;'; put 'put ''dGVudDp3bixzaXplOjQsTDo2OSxSOjY5LEM6Njl9KSxnbi5GdWxsUGF0aHMucHVzaChnbi5GdWxsUGF0aHNbMF0ra24pLFhuKGduKX19KGduKX1mdW5jdGlvbiBYbihnbixrbil7U24oZ24pO2Zvcih2YXIgd249ITEsWnQ9ITEsbm49Z24uRnVsbFBhdGhzLmxlbmd0aC0xO25uPj0wOy0tbm4p''@;'; put 'put ''e3ZhciB4bj1nbi5GaWxlSW5kZXhbbm5dO3N3aXRjaCh4bi50eXBlKXtjYXNlIDA6WnQ/d249ITA6KGduLkZpbGVJbmRleC5wb3AoKSxnbi5GdWxsUGF0aHMucG9wKCkpO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSA1Olp0PSEwLGlzTmFOKHhuLlIqeG4uTCp4bi5DKSYmKHduPSEwKSx4bi5S''@;'; put 'put ''Pi0xJiZ4bi5MPi0xJiZ4bi5SPT14bi5MJiYod249ITApO2JyZWFrO2RlZmF1bHQ6d249ITB9fWlmKHdufHxrbil7dmFyIHpuPW5ldyBEYXRlKDE5ODcsMSwxOSkseXI9MCxXcj1bXTtmb3Iobm49MDtubjxnbi5GdWxsUGF0aHMubGVuZ3RoOysrbm4pMCE9PWduLkZpbGVJbmRleFtubl0udHlw''@;'; put 'put ''ZSYmV3IucHVzaChbZ24uRnVsbFBhdGhzW25uXSxnbi5GaWxlSW5kZXhbbm5dXSk7Zm9yKG5uPTA7bm48V3IubGVuZ3RoOysrbm4pe3ZhciBvaT1HKFdyW25uXVswXSk7Zm9yKFp0PSExLHlyPTA7eXI8V3IubGVuZ3RoOysreXIpV3JbeXJdWzBdPT09b2kmJihadD0hMCk7WnR8fFdyLnB1c2go''@;'; put 'put ''W29pLHtuYW1lOlEob2kpLnJlcGxhY2UoIi8iLCIiKSx0eXBlOjEsY2xzaWQ6bmEsY3Q6em4sbXQ6em4sY29udGVudDpudWxsfV0pfWZvcihXci5zb3J0KGZ1bmN0aW9uKFVpLG5vKXtyZXR1cm4gZnVuY3Rpb24gayhnbixrbil7Zm9yKHZhciB3bj1nbi5zcGxpdCgiLyIpLFp0PWtuLnNwbGl0''@;'; put 'put ''KCIvIiksbm49MCx4bj0wLHpuPU1hdGgubWluKHduLmxlbmd0aCxadC5sZW5ndGgpO25uPHpuOysrbm4pe2lmKHhuPXduW25uXS5sZW5ndGgtWnRbbm5dLmxlbmd0aClyZXR1cm4geG47aWYod25bbm5dIT1adFtubl0pcmV0dXJuIHduW25uXTxadFtubl0/LTE6MX1yZXR1cm4gd24ubGVuZ3Ro''@;'; put 'put ''LVp0Lmxlbmd0aH0oVWlbMF0sbm9bMF0pfSksZ24uRnVsbFBhdGhzPVtdLGduLkZpbGVJbmRleD1bXSxubj0wO25uPFdyLmxlbmd0aDsrK25uKWduLkZ1bGxQYXRoc1tubl09V3Jbbm5dWzBdLGduLkZpbGVJbmRleFtubl09V3Jbbm5dWzFdO2Zvcihubj0wO25uPFdyLmxlbmd0aDsrK25uKXt2''@;'; put 'put ''YXIgbmk9Z24uRmlsZUluZGV4W25uXSxYaT1nbi5GdWxsUGF0aHNbbm5dO2lmKG5pLm5hbWU9UShYaSkucmVwbGFjZSgiLyIsIiIpLG5pLkw9bmkuUj1uaS5DPS0obmkuY29sb3I9MSksbmkuc2l6ZT1uaS5jb250ZW50P25pLmNvbnRlbnQubGVuZ3RoOjAsbmkuc3RhcnQ9MCxuaS5jbHNpZD1u''@;'; put 'put ''aS5jbHNpZHx8bmEsMD09PW5uKW5pLkM9V3IubGVuZ3RoPjE/MTotMSxuaS5zaXplPTAsbmkudHlwZT01O2Vsc2UgaWYoIi8iPT1YaS5zbGljZSgtMSkpe2Zvcih5cj1ubisxO3lyPFdyLmxlbmd0aCYmRyhnbi5GdWxsUGF0aHNbeXJdKSE9WGk7Kyt5cik7Zm9yKG5pLkM9eXI+PVdyLmxlbmd0''@;'; put 'put ''aD8tMTp5cix5cj1ubisxO3lyPFdyLmxlbmd0aCYmRyhnbi5GdWxsUGF0aHNbeXJdKSE9RyhYaSk7Kyt5cik7bmkuUj15cj49V3IubGVuZ3RoPy0xOnlyLG5pLnR5cGU9MX1lbHNlIEcoZ24uRnVsbFBhdGhzW25uKzFdfHwiIik9PUcoWGkpJiYobmkuUj1ubisxKSxuaS50eXBlPTJ9fX1mdW5j''@;'; put 'put ''dGlvbiBCbihnbixrbil7dmFyIHduPWtufHx7fTtpZihYbihnbiksInppcCI9PXduLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiBZbyhnbixrbil7dmFyIHduPWtufHx7fSxadD1bXSxubj1bXSx4bj1ibigxKSx6bj13bi5jb21wcmVzc2lvbj84OjAseXI9MCxvaT0wLG5pPTAsWGk9MCxVaT0w''@;'; put 'put ''LG5vPWduLkZ1bGxQYXRoc1swXSxqYT1ubyx2YT1nbi5GaWxlSW5kZXhbMF0sVG89W10seHM9MDtmb3Iob2k9MTtvaTxnbi5GdWxsUGF0aHMubGVuZ3RoOysrb2kpaWYoamE9Z24uRnVsbFBhdGhzW29pXS5zbGljZShuby5sZW5ndGgpLCh2YT1nbi5GaWxlSW5kZXhbb2ldKS5zaXplJiZ2YS5j''@;'; put 'put ''b250ZW50JiYiXHgwMVNoMzN0SjUiIT1qYSl7dmFyIHIxPVhpLGMwPWJuKGphLmxlbmd0aCk7Zm9yKG5pPTA7bmk8amEubGVuZ3RoOysrbmkpYzAud3JpdGVfc2hpZnQoMSwxMjcmamEuY2hhckNvZGVBdChuaSkpO2MwPWMwLnNsaWNlKDAsYzAubCksVG9bVWldPXhlLmJ1Zih2YS5jb250ZW50''@;'; put 'put ''LDApO3ZhciBhMT12YS5jb250ZW50Ozg9PXpuJiYoYTE9anIoYTEpKSwoeG49Ym4oMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSx4bi53cml0ZV9zaGlmdCgyLDIwKSx4bi53cml0ZV9zaGlmdCgyLHlyKSx4bi53cml0ZV9zaGlmdCgyLHpuKSx2YS5tdD9vZSh4bix2YS5tdCk6eG4ud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCwwKSx4bi53cml0ZV9zaGlmdCgtNCw4JnlyPzA6VG9bVWldKSx4bi53cml0ZV9zaGlmdCg0LDgmeXI/MDphMS5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDQsOCZ5cj8wOnZhLmNvbnRlbnQubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLGMwLmxlbmd0aCkseG4ud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiwwKSxYaSs9eG4ubGVuZ3RoLFp0LnB1c2goeG4pLFhpKz1jMC5sZW5ndGgsWnQucHVzaChjMCksWGkrPWExLmxlbmd0aCxadC5wdXNoKGExKSw4JnlyJiYoKHhuPWJuKDEyKSkud3JpdGVfc2hpZnQoLTQsVG9bVWldKSx4bi53cml0ZV9zaGlmdCg0LGExLmxlbmd0aCkseG4ud3JpdGVf''@;'; put 'put ''c2hpZnQoNCx2YS5jb250ZW50Lmxlbmd0aCksWGkrPXhuLmwsWnQucHVzaCh4bikpLCh4bj1ibig0NikpLndyaXRlX3NoaWZ0KDQsMzM2MzkyNDgpLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMiwyMCkseG4ud3JpdGVfc2hpZnQoMix5cikseG4ud3JpdGVfc2hpZnQoMix6''@;'; put 'put ''bikseG4ud3JpdGVfc2hpZnQoNCwwKSx4bi53cml0ZV9zaGlmdCgtNCxUb1tVaV0pLHhuLndyaXRlX3NoaWZ0KDQsYTEubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCg0LHZhLmNvbnRlbnQubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLGMwLmxlbmd0aCkseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53''@;'; put 'put ''cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCg0LDApLHhuLndyaXRlX3NoaWZ0KDQscjEpLHhzKz14bi5sLG5uLnB1c2goeG4pLHhzKz1jMC5sZW5ndGgsbm4ucHVzaChjMCksKytVaX1yZXR1cm4oeG49Ym4oMjIp''@;'; put 'put ''KS53cml0ZV9zaGlmdCg0LDEwMTAxMDI1NikseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsVWkpLHhuLndyaXRlX3NoaWZ0KDIsVWkpLHhuLndyaXRlX3NoaWZ0KDQseHMpLHhuLndyaXRlX3NoaWZ0KDQsWGkpLHhuLndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsMCksaihbaihadCksaihubikseG5dKX0oZ24sd24pO3ZhciBadD1mdW5jdGlvbihubyl7Zm9yKHZhciBqYT0wLHZhPTAsVG89MDtUbzxuby5GaWxlSW5kZXgubGVuZ3RoOysrVG8pe3ZhciB4cz1uby5GaWxlSW5kZXhbVG9dO2lmKHhzLmNvbnRlbnQpe3ZhciByMT14cy5jb250ZW50Lmxl''@;'; put 'put ''bmd0aDtyMT4wJiYocjE8NDA5Nj9qYSs9cjErNjM+PjY6dmErPXIxKzUxMT4+OSl9fWZvcih2YXIgYzA9bm8uRnVsbFBhdGhzLmxlbmd0aCszPj4yLEI4PWphKzEyNz4+NyxYNT0oamErNz4+MykrdmErYzArQjgsSjU9WDUrMTI3Pj43LE1lPUo1PD0xMDk/MDpNYXRoLmNlaWwoKEo1LTEwOSkv''@;'; put 'put ''MTI3KTtYNStKNStNZSsxMjc+Pjc+SjU7KU1lPSsrSjU8PTEwOT8wOk1hdGguY2VpbCgoSjUtMTA5KS8xMjcpO3ZhciBoaD1bMSxNZSxKNSxCOCxjMCx2YSxqYSwwXTtyZXR1cm4gbm8uRmlsZUluZGV4WzBdLnNpemU9amE8PDYsaGhbN109KG5vLkZpbGVJbmRleFswXS5zdGFydD1oaFswXSto''@;'; put 'put ''aFsxXStoaFsyXStoaFszXStoaFs0XStoaFs1XSkrKGhoWzZdKzc+PjMpLGhofShnbiksbm49Ym4oWnRbN108PDkpLHhuPTAsem49MDtmb3IoeG49MDt4bjw4OysreG4pbm4ud3JpdGVfc2hpZnQoMSxGaVt4bl0pO2Zvcih4bj0wO3huPDg7Kyt4bilubi53cml0ZV9zaGlmdCgyLDApO2Zvcihu''@;'; put 'put ''bi53cml0ZV9zaGlmdCgyLDYyKSxubi53cml0ZV9zaGlmdCgyLDMpLG5uLndyaXRlX3NoaWZ0KDIsNjU1MzQpLG5uLndyaXRlX3NoaWZ0KDIsOSksbm4ud3JpdGVfc2hpZnQoMiw2KSx4bj0wO3huPDM7Kyt4bilubi53cml0ZV9zaGlmdCgyLDApO2Zvcihubi53cml0ZV9zaGlmdCg0LDApLG5u''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsWnRbMl0pLG5uLndyaXRlX3NoaWZ0KDQsWnRbMF0rWnRbMV0rWnRbMl0rWnRbM10tMSksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDQwOTYpLG5uLndyaXRlX3NoaWZ0KDQsWnRbM10/WnRbMF0rWnRbMV0rWnRbMl0tMTplciksbm4ud3JpdGVf''@;'; put 'put ''c2hpZnQoNCxadFszXSksbm4ud3JpdGVfc2hpZnQoLTQsWnRbMV0/WnRbMF0tMTplciksbm4ud3JpdGVfc2hpZnQoNCxadFsxXSkseG49MDt4bjwxMDk7Kyt4bilubi53cml0ZV9zaGlmdCgtNCx4bjxadFsyXT9adFsxXSt4bjotMSk7aWYoWnRbMV0pZm9yKHpuPTA7em48WnRbMV07Kyt6bil7''@;'; put 'put ''Zm9yKDt4bjwyMzYrMTI3KnpuOysreG4pbm4ud3JpdGVfc2hpZnQoLTQseG48WnRbMl0/WnRbMV0reG46LTEpO25uLndyaXRlX3NoaWZ0KC00LHpuPT09WnRbMV0tMT9lcjp6bisxKX12YXIgeXI9ZnVuY3Rpb24obm8pe2Zvcih6bis9bm87eG48em4tMTsrK3huKW5uLndyaXRlX3NoaWZ0KC00''@;'; put 'put ''LHhuKzEpO25vJiYoKyt4bixubi53cml0ZV9zaGlmdCgtNCxlcikpfTtmb3Ioem49eG49MCx6bis9WnRbMV07eG48em47Kyt4bilubi53cml0ZV9zaGlmdCgtNCxjYS5ESUZTRUNUKTtmb3Ioem4rPVp0WzJdO3huPHpuOysreG4pbm4ud3JpdGVfc2hpZnQoLTQsY2EuRkFUU0VDVCk7eXIoWnRb''@;'; put 'put ''M10pLHlyKFp0WzRdKTtmb3IodmFyIFdyPTAsb2k9MCxuaT1nbi5GaWxlSW5kZXhbMF07V3I8Z24uRmlsZUluZGV4Lmxlbmd0aDsrK1dyKShuaT1nbi5GaWxlSW5kZXhbV3JdKS5jb250ZW50JiYhKChvaT1uaS5jb250ZW50Lmxlbmd0aCk8NDA5NikmJihuaS5zdGFydD16bix5cihvaSs1MTE+''@;'; put 'put ''PjkpKTtmb3IoeXIoWnRbNl0rNz4+Myk7NTExJm5uLmw7KW5uLndyaXRlX3NoaWZ0KC00LGNhLkVORE9GQ0hBSU4pO2Zvcih6bj14bj0wLFdyPTA7V3I8Z24uRmlsZUluZGV4Lmxlbmd0aDsrK1dyKShuaT1nbi5GaWxlSW5kZXhbV3JdKS5jb250ZW50JiYob2k9bmkuY29udGVudC5sZW5ndGgp''@;'; put 'put ''JiYhKG9pPj00MDk2KSYmKG5pLnN0YXJ0PXpuLHlyKG9pKzYzPj42KSk7Zm9yKDs1MTEmbm4ubDspbm4ud3JpdGVfc2hpZnQoLTQsY2EuRU5ET0ZDSEFJTik7Zm9yKHhuPTA7eG48WnRbNF08PDI7Kyt4bil7dmFyIFhpPWduLkZ1bGxQYXRoc1t4bl07aWYoWGkmJjAhPT1YaS5sZW5ndGgpe25p''@;'; put 'put ''PWduLkZpbGVJbmRleFt4bl0sMD09PXhuJiYobmkuc3RhcnQ9bmkuc2l6ZT9uaS5zdGFydC0xOmVyKTt2YXIgVWk9MD09PXhuJiZ3bi5yb290fHxuaS5uYW1lO2lmKG9pPTIqKFVpLmxlbmd0aCsxKSxubi53cml0ZV9zaGlmdCg2NCxVaSwidXRmMTZsZSIpLG5uLndyaXRlX3NoaWZ0KDIsb2kp''@;'; put 'put ''LG5uLndyaXRlX3NoaWZ0KDEsbmkudHlwZSksbm4ud3JpdGVfc2hpZnQoMSxuaS5jb2xvciksbm4ud3JpdGVfc2hpZnQoLTQsbmkuTCksbm4ud3JpdGVfc2hpZnQoLTQsbmkuUiksbm4ud3JpdGVfc2hpZnQoLTQsbmkuQyksbmkuY2xzaWQpbm4ud3JpdGVfc2hpZnQoMTYsbmkuY2xzaWQsImhl''@;'; put 'put ''eCIpO2Vsc2UgZm9yKFdyPTA7V3I8NDsrK1dyKW5uLndyaXRlX3NoaWZ0KDQsMCk7bm4ud3JpdGVfc2hpZnQoNCxuaS5zdGF0ZXx8MCksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0''@;'; put 'put ''ZV9zaGlmdCg0LG5pLnN0YXJ0KSxubi53cml0ZV9zaGlmdCg0LG5pLnNpemUpLG5uLndyaXRlX3NoaWZ0KDQsMCl9ZWxzZXtmb3IoV3I9MDtXcjwxNzsrK1dyKW5uLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKFdyPTA7V3I8MzsrK1dyKW5uLndyaXRlX3NoaWZ0KDQsLTEpO2ZvcihXcj0wO1dyPDEy''@;'; put 'put ''OysrV3Ipbm4ud3JpdGVfc2hpZnQoNCwwKX19Zm9yKHhuPTE7eG48Z24uRmlsZUluZGV4Lmxlbmd0aDsrK3huKWlmKChuaT1nbi5GaWxlSW5kZXhbeG5dKS5zaXplPj00MDk2KXtmb3Iobm4ubD1uaS5zdGFydCsxPDw5LFdyPTA7V3I8bmkuc2l6ZTsrK1dyKW5uLndyaXRlX3NoaWZ0KDEsbmku''@;'; put 'put ''Y29udGVudFtXcl0pO2Zvcig7NTExJldyOysrV3Ipbm4ud3JpdGVfc2hpZnQoMSwwKX1mb3IoeG49MTt4bjxnbi5GaWxlSW5kZXgubGVuZ3RoOysreG4paWYoKG5pPWduLkZpbGVJbmRleFt4bl0pLnNpemU+MCYmbmkuc2l6ZTw0MDk2KXtmb3IoV3I9MDtXcjxuaS5zaXplOysrV3Ipbm4ud3Jp''@;'; put 'put ''dGVfc2hpZnQoMSxuaS5jb250ZW50W1dyXSk7Zm9yKDs2MyZXcjsrK1dyKW5uLndyaXRlX3NoaWZ0KDEsMCl9Zm9yKDtubi5sPG5uLmxlbmd0aDspbm4ud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gbm59Ui52ZXJzaW9uPSIxLjEuNCI7dmFyIEJyLGJyPTY0LGVyPS0yLE1pPSJkMGNmMTFlMGEx''@;'; put 'put ''YjExYWUxIixGaT1bMjA4LDIwNywxNywyMjQsMTYxLDE3NywyNiwyMjVdLG5hPSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsY2E9e01BWFJFR1NFQ1Q6LTYsRElGU0VDVDotNCxGQVRTRUNUOi0zLEVORE9GQ0hBSU46ZXIsRlJFRVNFQ1Q6LTEsSEVBREVSX1NJR05BVFVSRTpN''@;'; put 'put ''aSxIRUFERVJfTUlOT1JfVkVSU0lPTjoiM2UwMCIsTUFYUkVHU0lEOi02LE5PU1RSRUFNOi0xLEhFQURFUl9DTFNJRDpuYSxFbnRyeVR5cGVzOlsidW5rbm93biIsInN0b3JhZ2UiLCJzdHJlYW0iLCJsb2NrYnl0ZXMiLCJwcm9wZXJ0eSIsInJvb3QiXX07ZnVuY3Rpb24ga3IoZ24pe2Zvcih2''@;'; put 'put ''YXIga249bmV3IEFycmF5KGduLmxlbmd0aCksd249MDt3bjxnbi5sZW5ndGg7Kyt3bilrblt3bl09U3RyaW5nLmZyb21DaGFyQ29kZShnblt3bl0pO3JldHVybiBrbi5qb2luKCIiKX1mdW5jdGlvbiBqcihnbil7cmV0dXJuIEJyP0JyLmRlZmxhdGVSYXdTeW5jKGduKTpHbChnbil9Zm9yKHZh''@;'; put 'put ''ciBnbixrbixaaT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0seWk9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNThdLF9hPVsxLDIsMyw0LDUs''@;'; put 'put ''Nyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzddLGlhPXR5cGVvZiBVaW50OEFycmF5PCJ1IixMbz1pYT9uZXcgVWludDhBcnJheSgyNTYpOltdLE9hPTA7T2E8''@;'; put 'put ''MjU2OysrT2EpTG9bT2FdPSh2b2lkIDAsMjU1Jigoa249MTM5NTM2JigoZ249T2EpPDwxfGduPDwxMSl8NTU4MTQ0Jihnbjw8NXxnbjw8MTUpKT4+MTZ8a24+Pjh8a24pKTtmdW5jdGlvbiBobyhnbixrbil7dmFyIHduPUxvWzI1NSZnbl07cmV0dXJuIGtuPD04P3duPj4+OC1rbjood249d248''@;'; put 'put ''PDh8TG9bZ24+PjgmMjU1XSxrbjw9MTY/d24+Pj4xNi1rbjood249d248PDh8TG9bZ24+PjE2JjI1NV0pPj4+MjQta24pfWZ1bmN0aW9uIEphKGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTY/MDpnbltadCsxXTw8OCkpPj4+d24mM31mdW5jdGlvbiBC''@;'; put 'put ''aShnbixrbil7dmFyIHduPTcma24sWnQ9a24+Pj4zO3JldHVybihnbltadF18KHduPD01PzA6Z25bWnQrMV08PDgpKT4+PnduJjd9ZnVuY3Rpb24gUG4oZ24sa24pe3ZhciB3bj03JmtuLFp0PWtuPj4+MztyZXR1cm4oZ25bWnRdfCh3bjw9Mz8wOmduW1p0KzFdPDw4KSk+Pj53biYzMX1mdW5j''@;'; put 'put ''dGlvbiBXbyhnbixrbil7dmFyIHduPTcma24sWnQ9a24+Pj4zO3JldHVybihnbltadF18KHduPD0xPzA6Z25bWnQrMV08PDgpKT4+PnduJjEyN31mdW5jdGlvbiBocihnbixrbix3bil7dmFyIFp0PTcma24sbm49a24+Pj4zLHpuPWduW25uXT4+Plp0O3JldHVybiB3bjw4LVp0fHwoem58PWdu''@;'; put 'put ''W25uKzFdPDw4LVp0LHduPDE2LVp0KXx8KHpufD1nbltubisyXTw8MTYtWnQsd248MjQtWnQpfHwoem58PWduW25uKzNdPDwyNC1adCksem4mKDE8PHduKS0xfWZ1bmN0aW9uIFFsKGduLGtuKXt2YXIgd249Z24ubGVuZ3RoLFp0PTIqd24+a24/Mip3bjprbis1LG5uPTA7aWYod24+PWtuKXJl''@;'; put 'put ''dHVybiBnbjtpZihUZSl7dmFyIHhuPXAoWnQpO2lmKGduLmNvcHkpZ24uY29weSh4bik7ZWxzZSBmb3IoO25uPGduLmxlbmd0aDsrK25uKXhuW25uXT1nbltubl07cmV0dXJuIHhufWlmKGlhKXt2YXIgem49bmV3IFVpbnQ4QXJyYXkoWnQpO2lmKHpuLnNldCl6bi5zZXQoZ24pO2Vsc2UgZm9y''@;'; put 'put ''KDtubjxnbi5sZW5ndGg7Kytubil6bltubl09Z25bbm5dO3JldHVybiB6bn1yZXR1cm4gZ24ubGVuZ3RoPVp0LGdufWZ1bmN0aW9uIFlsKGduKXtmb3IodmFyIGtuPW5ldyBBcnJheShnbiksd249MDt3bjxnbjsrK3duKWtuW3duXT0wO3JldHVybiBrbn12YXIgR2w9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Z249ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24od24sWnQpe2Zvcih2YXIgbm49MDtubjx3bi5sZW5ndGg7KXt2YXIgeG49TWF0aC5taW4oNjU1MzUsd24ubGVuZ3RoLW5uKTtmb3IoWnQud3JpdGVfc2hpZnQoMSwrKG5uK3huPT13bi5sZW5ndGgpKSxadC53cml0ZV9zaGlmdCgyLHhuKSxa''@;'; put 'put ''dC53cml0ZV9zaGlmdCgyLDY1NTM1Jn54bik7eG4tLSA+MDspWnRbWnQubCsrXT13bltubisrXX1yZXR1cm4gWnQubH19KCk7cmV0dXJuIGZ1bmN0aW9uKGtuKXt2YXIgd249Ym4oNTArTWF0aC5mbG9vcigxLjEqa24ubGVuZ3RoKSksWnQ9Z24oa24sd24pO3JldHVybiB3bi5zbGljZSgwLFp0''@;'; put 'put ''KX19KCk7ZnVuY3Rpb24geXUoZ24sa24sd24pe3ZhciBadD0xLG5uPTAseG49MCx6bj0wLHlyPTAsV3I9Z24ubGVuZ3RoLG9pPWlhP25ldyBVaW50MTZBcnJheSgzMik6WWwoMzIpO2Zvcih4bj0wO3huPDMyOysreG4pb2lbeG5dPTA7Zm9yKHhuPVdyO3huPHduOysreG4pZ25beG5dPTA7V3I9''@;'; put 'put ''Z24ubGVuZ3RoO3ZhciBuaT1pYT9uZXcgVWludDE2QXJyYXkoV3IpOllsKFdyKTtmb3IoeG49MDt4bjxXcjsrK3huKW9pW25uPWduW3huXV0rKyxadDxubiYmKFp0PW5uKSxuaVt4bl09MDtmb3Iob2lbMF09MCx4bj0xO3huPD1adDsrK3huKW9pW3huKzE2XT15cj15citvaVt4bi0xXTw8MTtm''@;'; put 'put ''b3IoeG49MDt4bjxXcjsrK3huKTAhPSh5cj1nblt4bl0pJiYobmlbeG5dPW9pW3lyKzE2XSsrKTt2YXIgWGk9MDtmb3IoeG49MDt4bjxXcjsrK3huKWlmKDAhPShYaT1nblt4bl0pKWZvcih5cj1obyhuaVt4bl0sWnQpPj5adC1YaSx6bj0oMTw8WnQrNC1YaSktMTt6bj49MDstLXpuKWtuW3ly''@;'; put 'put ''fHpuPDxYaV09MTUmWGl8eG48PDQ7cmV0dXJuIFp0fXZhciBNbD1pYT9uZXcgVWludDE2QXJyYXkoNTEyKTpZbCg1MTIpLGxuPWlhP25ldyBVaW50MTZBcnJheSgzMik6WWwoMzIpO2lmKCFpYSl7Zm9yKHZhciBFbj0wO0VuPDUxMjsrK0VuKU1sW0VuXT0wO2ZvcihFbj0wO0VuPDMyOysrRW4p''@;'; put 'put ''bG5bRW5dPTB9IWZ1bmN0aW9uKCl7Zm9yKHZhciBnbj1bXSxrbj0wO2tuPDMyO2tuKyspZ24ucHVzaCg1KTt5dShnbixsbiwzMik7dmFyIHduPVtdO2Zvcihrbj0wO2tuPD0xNDM7a24rKyl3bi5wdXNoKDgpO2Zvcig7a248PTI1NTtrbisrKXduLnB1c2goOSk7Zm9yKDtrbjw9Mjc5O2tuKysp''@;'; put 'put ''d24ucHVzaCg3KTtmb3IoO2tuPD0yODc7a24rKyl3bi5wdXNoKDgpO3l1KHduLE1sLDI4OCl9KCk7dmFyIFVuPWlhP25ldyBVaW50MTZBcnJheSgzMjc2OCk6WWwoMzI3NjgpLHhpPWlhP25ldyBVaW50MTZBcnJheSgzMjc2OCk6WWwoMzI3NjgpLG9yPWlhP25ldyBVaW50MTZBcnJheSgxMjgp''@;'; put 'put ''OllsKDEyOCksT2k9MSxTcj0xO2Z1bmN0aW9uIFBpKGduLGtuKXt2YXIgd249UG4oZ24sa24pKzI1NyxadD1Qbihnbixrbis9NSkrMSxubj1mdW5jdGlvbiBJcyhnbixrbil7dmFyIHduPTcma24sWnQ9a24+Pj4zO3JldHVybihnbltadF18KHduPD00PzA6Z25bWnQrMV08PDgpKT4+PnduJjE1''@;'; put 'put ''fShnbixrbis9NSkrNDtrbis9NDtmb3IodmFyIHhuPTAsem49aWE/bmV3IFVpbnQ4QXJyYXkoMTkpOllsKDE5KSx5cj1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sV3I9MSxvaT1pYT9uZXcgVWludDhBcnJheSg4KTpZbCg4KSxuaT1pYT9uZXcgVWludDhBcnJheSg4''@;'; put 'put ''KTpZbCg4KSxYaT16bi5sZW5ndGgsVWk9MDtVaTxubjsrK1VpKXpuW1ppW1VpXV09eG49QmkoZ24sa24pLFdyPHhuJiYoV3I9eG4pLG9pW3huXSsrLGtuKz0zO3ZhciBubz0wO2ZvcihvaVswXT0wLFVpPTE7VWk8PVdyOysrVWkpbmlbVWldPW5vPW5vK29pW1VpLTFdPDwxO2ZvcihVaT0wO1Vp''@;'; put 'put ''PFhpOysrVWkpMCE9KG5vPXpuW1VpXSkmJih5cltVaV09bmlbbm9dKyspO3ZhciBqYT0wO2ZvcihVaT0wO1VpPFhpOysrVWkpaWYoMCE9KGphPXpuW1VpXSkpe25vPUxvW3lyW1VpXV0+PjgtamE7Zm9yKHZhciB2YT0oMTw8Ny1qYSktMTt2YT49MDstLXZhKW9yW25vfHZhPDxqYV09NyZqYXxV''@;'; put 'put ''aTw8M312YXIgVG89W107Zm9yKFdyPTE7VG8ubGVuZ3RoPHduK1p0Oylzd2l0Y2gobm89b3JbV28oZ24sa24pXSxrbis9NyZubyxubz4+Pj0zKXtjYXNlIDE2OmZvcih4bj0zK0phKGduLGtuKSxrbis9Mixubz1Ub1tUby5sZW5ndGgtMV07eG4tLSA+MDspVG8ucHVzaChubyk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAxNzpmb3IoeG49MytCaShnbixrbiksa24rPTM7eG4tLSA+MDspVG8ucHVzaCgwKTticmVhaztjYXNlIDE4OmZvcih4bj0xMStXbyhnbixrbiksa24rPTc7eG4tLSA+MDspVG8ucHVzaCgwKTticmVhaztkZWZhdWx0OlRvLnB1c2gobm8pLFdyPG5vJiYoV3I9bm8pfXZhciB4cz1Uby5zbGlj''@;'; put 'put ''ZSgwLHduKSxyMT1Uby5zbGljZSh3bik7Zm9yKFVpPXduO1VpPDI4NjsrK1VpKXhzW1VpXT0wO2ZvcihVaT1adDtVaTwzMDsrK1VpKXIxW1VpXT0wO3JldHVybiBPaT15dSh4cyxVbiwyODYpLFNyPXl1KHIxLHhpLDMwKSxrbn1mdW5jdGlvbiBIaShnbixrbil7dmFyIFp0PWZ1bmN0aW9uIFph''@;'; put 'put ''KGduLGtuKXtpZigzPT1nblswXSYmISgzJmduWzFdKSlyZXR1cm5bVihrbiksMl07Zm9yKHZhciB3bj0wLFp0PTAsbm49cChrbnx8MTw8MTgpLHhuPTAsem49bm4ubGVuZ3RoPj4+MCx5cj0wLFdyPTA7ISgxJlp0KTspaWYoWnQ9QmkoZ24sd24pLHduKz0zLFp0Pj4+MSlmb3IoWnQ+Pj4xPT0x''@;'; put 'put ''Pyh5cj05LFdyPTUpOih3bj1QaShnbix3bikseXI9T2ksV3I9U3IpLCFrbiYmem48eG4rMzI3NjcmJih6bj0obm49UWwobm4seG4rMzI3NjcpKS5sZW5ndGgpOzspe3ZhciBuaT1ocihnbix3bix5ciksWGk9WnQ+Pj4xPT0xP01sW25pXTpVbltuaV07aWYod24rPTE1JlhpLChYaT4+Pj00KT4+''@;'; put 'put ''PjgmMjU1KXtpZigyNTY9PVhpKWJyZWFrO3ZhciBVaT0oWGktPTI1Nyk8OD8wOlhpLTQ+PjI7VWk+NSYmKFVpPTApO3ZhciBubz14bit5aVtYaV07VWk+MCYmKG5vKz1ocihnbix3bixVaSksd24rPVVpKSxuaT1ocihnbix3bixXciksd24rPTE1JihYaT1adD4+PjE9PTE/bG5bbmldOnhpW25p''@;'; put 'put ''XSk7dmFyIGphPShYaT4+Pj00KTw0PzA6WGktMj4+MSx2YT1fYVtYaV07Zm9yKGphPjAmJih2YSs9aHIoZ24sd24samEpLHduKz1qYSksIWtuJiZ6bjxubyYmKHpuPShubj1RbChubixubykpLmxlbmd0aCk7eG48bm87KW5uW3huXT1ublt4bi12YV0sKyt4bn1lbHNlIG5uW3huKytdPVhpfWVs''@;'; put 'put ''c2V7NyZ3biYmKHduKz04LSg3JnduKSk7dmFyIG9pPWduW3duPj4+M118Z25bMSsod24+Pj4zKV08PDg7aWYod24rPTMyLCFrbiYmem48eG4rb2kmJih6bj0obm49UWwobm4seG4rb2kpKS5sZW5ndGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBnbi5jb3B5KWduLmNvcHkobm4seG4sd24+Pj4zLCh3''@;'; put 'put ''bj4+PjMpK29pKSx4bis9b2ksd24rPTgqb2k7ZWxzZSBmb3IoO29pLS0gPjA7KW5uW3huKytdPWduW3duPj4+M10sd24rPTh9cmV0dXJuW2tuP25uOm5uLnNsaWNlKDAseG4pLHduKzc+Pj4zXX0oZ24uc2xpY2UoZ24ubHx8MCksa24pO3JldHVybiBnbi5sKz1adFsxXSxadFswXX1mdW5jdGlv''@;'; put 'put ''biBtYShnbixrbil7aWYoIWduKXRocm93IG5ldyBFcnJvcihrbik7dHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLmVycm9yKGtuKX1mdW5jdGlvbiBEaShnbixrbil7dmFyIHduPWduO21uKHduLDApO3ZhciB4bj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpbXX07U24oeG4se3Jvb3Q6a24u''@;'; put 'put ''cm9vdH0pO2Zvcih2YXIgem49d24ubGVuZ3RoLTQ7KDgwIT13blt6bl18fDc1IT13blt6bisxXXx8NSE9d25bem4rMl18fDYhPXduW3puKzNdKSYmem4+PTA7KS0tem47d24ubD16bis0LHduLmwrPTQ7dmFyIHlyPXduLnJlYWRfc2hpZnQoMik7d24ubCs9Njt2YXIgV3I9d24ucmVhZF9zaGlm''@;'; put 'put ''dCg0KTtmb3Iod24ubD1Xcix6bj0wO3puPHlyOysrem4pe3duLmwrPTIwO3ZhciBvaT13bi5yZWFkX3NoaWZ0KDQpLG5pPXduLnJlYWRfc2hpZnQoNCksWGk9d24ucmVhZF9zaGlmdCgyKSxVaT13bi5yZWFkX3NoaWZ0KDIpLG5vPXduLnJlYWRfc2hpZnQoMik7d24ubCs9ODt2YXIgamE9d24u''@;'; put 'put ''cmVhZF9zaGlmdCg0KSx2YT1wZSh3bi5zbGljZSh3bi5sK1hpLHduLmwrWGkrVWkpKTt3bi5sKz1YaStVaStubzt2YXIgVG89d24ubDt3bi5sPWphKzQsY3Mod24sb2ksbmkseG4sdmEpLHduLmw9VG99cmV0dXJuIHhufWZ1bmN0aW9uIGNzKGduLGtuLHduLFp0LG5uKXtnbi5sKz0yO3ZhciB4''@;'; put 'put ''bj1nbi5yZWFkX3NoaWZ0KDIpLHpuPWduLnJlYWRfc2hpZnQoMikseXI9ZnVuY3Rpb24gZ2UoZ24pe3ZhciBrbj02NTUzNSZnbi5yZWFkX3NoaWZ0KDIpLHduPTY1NTM1JmduLnJlYWRfc2hpZnQoMiksWnQ9bmV3IERhdGUsbm49MzEmd24seG49MTUmKHduPj4+PTUpO3duPj4+PTQsWnQuc2V0''@;'; put 'put ''TWlsbGlzZWNvbmRzKDApLFp0LnNldEZ1bGxZZWFyKHduKzE5ODApLFp0LnNldE1vbnRoKHhuLTEpLFp0LnNldERhdGUobm4pO3ZhciB6bj0zMSZrbix5cj02MyYoa24+Pj49NSk7cmV0dXJuIFp0LnNldEhvdXJzKGtuPj4+PTYpLFp0LnNldE1pbnV0ZXMoeXIpLFp0LnNldFNlY29uZHMoem48''@;'; put 'put ''PDEpLFp0fShnbik7aWYoODI1NyZ4bil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7Zm9yKHZhciBXcj1nbi5yZWFkX3NoaWZ0KDQpLG9pPWduLnJlYWRfc2hpZnQoNCksbmk9Z24ucmVhZF9zaGlmdCg0KSxYaT1nbi5yZWFkX3NoaWZ0KDIpLFVpPWduLnJl''@;'; put 'put ''YWRfc2hpZnQoMiksbm89IiIsamE9MDtqYTxYaTsrK2phKW5vKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGduW2duLmwrK10pO2lmKFVpKXt2YXIgdmE9cGUoZ24uc2xpY2UoZ24ubCxnbi5sK1VpKSk7KHZhWzIxNTg5XXx8e30pLm10JiYoeXI9dmFbMjE1ODldLm10KSwoKG5ufHx7fSlbMjE1ODld''@;'; put 'put ''fHx7fSkubXQmJih5cj1ublsyMTU4OV0ubXQpfWduLmwrPVVpO3ZhciBUbz1nbi5zbGljZShnbi5sLGduLmwrb2kpO3N3aXRjaCh6bil7Y2FzZSA4OlRvPWZ1bmN0aW9uIEZuKGduLGtuKXtpZighQnIpcmV0dXJuIEhpKGduLGtuKTt2YXIgWnQ9bmV3KDAsQnIuSW5mbGF0ZVJhdyksbm49WnQu''@;'; put 'put ''X3Byb2Nlc3NDaHVuayhnbi5zbGljZShnbi5sKSxadC5fZmluaXNoRmx1c2hGbGFnKTtyZXR1cm4gZ24ubCs9WnQuYnl0ZXNSZWFkLG5ufShnbixuaSk7YnJlYWs7Y2FzZSAwOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgQ29tcHJlc3Npb24gbWV0aG9k''@;'; put 'put ''ICIrem4pfXZhciB4cz0hMTs4JnhuJiYoMTM0Njk1NzYwPT0oV3I9Z24ucmVhZF9zaGlmdCg0KSkmJihXcj1nbi5yZWFkX3NoaWZ0KDQpLHhzPSEwKSxvaT1nbi5yZWFkX3NoaWZ0KDQpLG5pPWduLnJlYWRfc2hpZnQoNCkpLG9pIT1rbiYmbWEoeHMsIkJhZCBjb21wcmVzc2VkIHNpemU6ICIr''@;'; put 'put ''a24rIiAhPSAiK29pKSxuaSE9d24mJm1hKHhzLCJCYWQgdW5jb21wcmVzc2VkIHNpemU6ICIrd24rIiAhPSAiK25pKTt2YXIgcjE9eGUuYnVmKFRvLDApOygwfFdyKSE9KDB8cjEpJiZtYSh4cywiQmFkIENSQzMyIGNoZWNrc3VtOiAiK1dyKyIgIT0gIityMSksX3UoWnQsbm8sVG8se3Vuc2Fm''@;'; put 'put ''ZTohMCxtdDp5cn0pfWZ1bmN0aW9uIF91KGduLGtuLHduLFp0KXt2YXIgbm49WnQmJlp0LnVuc2FmZTtubnx8U24oZ24pO3ZhciB4bj0hbm4mJnZlLmZpbmQoZ24sa24pO2lmKCF4bil7dmFyIHpuPWduLkZ1bGxQYXRoc1swXTtrbi5zbGljZSgwLHpuLmxlbmd0aCk9PXpuP3puPWtuOigiLyIh''@;'; put 'put ''PXpuLnNsaWNlKC0xKSYmKHpuKz0iLyIpLHpuPSh6bitrbikucmVwbGFjZSgiLy8iLCIvIikpLHhuPXtuYW1lOlEoa24pLHR5cGU6Mn0sZ24uRmlsZUluZGV4LnB1c2goeG4pLGduLkZ1bGxQYXRocy5wdXNoKHpuKSxubnx8dmUudXRpbHMuY2ZiX2djKGduKX1yZXR1cm4geG4uY29udGVudD13''@;'; put 'put ''bix4bi5zaXplPXduP3duLmxlbmd0aDowLFp0JiYoWnQuQ0xTSUQmJih4bi5jbHNpZD1adC5DTFNJRCksWnQubXQmJih4bi5tdD1adC5tdCksWnQuY3QmJih4bi5jdD1adC5jdCkpLHhufXJldHVybiBSLmZpbmQ9ZnVuY3Rpb24gZnIoZ24sa24pe3ZhciB3bj1nbi5GdWxsUGF0aHMubWFwKGZ1''@;'; put 'put ''bmN0aW9uKFdyKXtyZXR1cm4gV3IudG9VcHBlckNhc2UoKX0pLFp0PXduLm1hcChmdW5jdGlvbihXcil7dmFyIG9pPVdyLnNwbGl0KCIvIik7cmV0dXJuIG9pW29pLmxlbmd0aC0oIi8iPT1Xci5zbGljZSgtMSk/MjoxKV19KSxubj0hMTs0Nz09PWtuLmNoYXJDb2RlQXQoMCk/KG5uPSEwLGtu''@;'; put 'put ''PXduWzBdLnNsaWNlKDAsLTEpK2tuKTpubj0tMSE9PWtuLmluZGV4T2YoIi8iKTt2YXIgeG49a24udG9VcHBlckNhc2UoKSx6bj0hMD09PW5uP3duLmluZGV4T2YoeG4pOlp0LmluZGV4T2YoeG4pO2lmKC0xIT09em4pcmV0dXJuIGduLkZpbGVJbmRleFt6bl07dmFyIHlyPSF4bi5tYXRjaCht''@;'; put 'put ''KTtmb3IoeG49eG4ucmVwbGFjZShFLCIiKSx5ciYmKHhuPXhuLnJlcGxhY2UobSwiISIpKSx6bj0wO3puPHduLmxlbmd0aDsrK3puKWlmKCh5cj93blt6bl0ucmVwbGFjZShtLCIhIik6d25bem5dKS5yZXBsYWNlKEUsIiIpPT14bnx8KHlyP1p0W3puXS5yZXBsYWNlKG0sIiEiKTpadFt6bl0p''@;'; put 'put ''LnJlcGxhY2UoRSwiIik9PXhuKXJldHVybiBnbi5GaWxlSW5kZXhbem5dO3JldHVybiBudWxsfSxSLnJlYWQ9ZnVuY3Rpb24gcnIoZ24sa24pe3N3aXRjaChrbiYma24udHlwZXx8ImJhc2U2NCIpe2Nhc2UiZmlsZSI6cmV0dXJuIGZ1bmN0aW9uIFRuKGduLGtuKXtyZXR1cm4gUGUoKSxOZSh5''@;'; put 'put ''ZS5yZWFkRmlsZVN5bmMoZ24pLGtuKX0oZ24sa24pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTmUoYihfZS5kZWNvZGUoZ24pKSxrbik7Y2FzZSJiaW5hcnkiOnJldHVybiBOZShiKGduKSxrbil9cmV0dXJuIE5lKGduLGtuKX0sUi5wYXJzZT1OZSxSLndyaXRlPWZ1bmN0aW9uIFZuKGduLGtuKXt2''@;'; put 'put ''YXIgd249Qm4oZ24sa24pO3N3aXRjaChrbiYma24udHlwZSl7Y2FzZSJmaWxlIjpyZXR1cm4gUGUoKSx5ZS53cml0ZUZpbGVTeW5jKGtuLmZpbGVuYW1lLHduKSx3bjtjYXNlImJpbmFyeSI6cmV0dXJuIGtyKHduKTtjYXNlImJhc2U2NCI6cmV0dXJuIF9lLmVuY29kZShrcih3bikpfXJldHVy''@;'; put 'put ''biB3bn0sUi53cml0ZUZpbGU9ZnVuY3Rpb24gTGkoZ24sa24sd24pe1BlKCk7dmFyIFp0PUJuKGduLHduKTt5ZS53cml0ZUZpbGVTeW5jKGtuLFp0KX0sUi51dGlscz17Y2ZiX25ldzpmdW5jdGlvbiB4bChnbil7dmFyIGtuPXt9O3JldHVybiBTbihrbixnbiksa259LGNmYl9hZGQ6X3UsY2Zi''@;'; put 'put ''X2RlbDpmdW5jdGlvbiBFbChnbixrbil7U24oZ24pO3ZhciB3bj12ZS5maW5kKGduLGtuKTtpZih3bilmb3IodmFyIFp0PTA7WnQ8Z24uRmlsZUluZGV4Lmxlbmd0aDsrK1p0KWlmKGduLkZpbGVJbmRleFtadF09PXduKXJldHVybiBnbi5GaWxlSW5kZXguc3BsaWNlKFp0LDEpLGduLkZ1bGxQ''@;'; put 'put ''YXRocy5zcGxpY2UoWnQsMSksITA7cmV0dXJuITF9LGNmYl9tb3Y6ZnVuY3Rpb24gRmYoZ24sa24sd24pe1NuKGduKTt2YXIgWnQ9dmUuZmluZChnbixrbik7aWYoWnQpZm9yKHZhciBubj0wO25uPGduLkZpbGVJbmRleC5sZW5ndGg7KytubilpZihnbi5GaWxlSW5kZXhbbm5dPT1adClyZXR1''@;'; put 'put ''cm4gZ24uRmlsZUluZGV4W25uXS5uYW1lPVEod24pLGduLkZ1bGxQYXRoc1tubl09d24sITA7cmV0dXJuITF9LGNmYl9nYzpmdW5jdGlvbiB5ZChnbil7WG4oZ24sITApfSxSZWFkU2hpZnQ6amwsQ2hlY2tGaWVsZDpfbixwcmVwX2Jsb2I6bW4sYmNvbmNhdDpqLHVzZV96bGliOmZ1bmN0aW9u''@;'; put 'put ''IF9yKGduKXt0cnl7dmFyIHduPW5ldygwLGduLkluZmxhdGVSYXcpO2lmKHduLl9wcm9jZXNzQ2h1bmsobmV3IFVpbnQ4QXJyYXkoWzMsMF0pLHduLl9maW5pc2hGbHVzaEZsYWcpLCF3bi5ieXRlc1JlYWQpdGhyb3cgbmV3IEVycm9yKCJ6bGliIGRvZXMgbm90IGV4cG9zZSBieXRlc1JlYWQi''@;'; put 'put ''KTtCcj1nbn1jYXRjaChadCl7Y29uc29sZS5lcnJvcigiY2Fubm90IHVzZSBuYXRpdmUgemxpYjogIisoWnQubWVzc2FnZXx8WnQpKX19LF9kZWZsYXRlUmF3OkdsLF9pbmZsYXRlUmF3OkhpLGNvbnN0czpjYX0sUn0oKTt0cnl7WGU9eSg4MzMzNyl9Y2F0Y2h7fWZ1bmN0aW9uIHplKFMpe3Jl''@;'; put 'put ''dHVybiJzdHJpbmciPT10eXBlb2YgUz94KFMpOkFycmF5LmlzQXJyYXkoUyk/ZnVuY3Rpb24gVChTKXtpZih0eXBlb2YgVWludDhBcnJheT4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO3JldHVybiBuZXcgVWludDhBcnJheShTKX0oUyk6U31mdW5jdGlvbiBEZShTLFIsayl7''@;'; put 'put ''aWYodHlwZW9mIFhlPCJ1IiYmWGUud3JpdGVGaWxlU3luYylyZXR1cm4gaz9YZS53cml0ZUZpbGVTeW5jKFMsUixrKTpYZS53cml0ZUZpbGVTeW5jKFMsUik7dmFyIEc9InV0ZjgiPT1rP05zKFIpOlI7aWYodHlwZW9mIElFX1NhdmVGaWxlPCJ1IilyZXR1cm4gSUVfU2F2ZUZpbGUoRyxTKTtp''@;'; put 'put ''Zih0eXBlb2YgQmxvYjwidSIpe3ZhciBRPW5ldyBCbG9iKFt6ZShHKV0se3R5cGU6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9KTtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLm1zU2F2ZUJsb2IpcmV0dXJuIG5hdmlnYXRvci5tc1NhdmVCbG9iKFEsUyk7aWYodHlwZW9m''@;'; put 'put ''IHNhdmVBczwidSIpcmV0dXJuIHNhdmVBcyhRLFMpO2lmKHR5cGVvZiBVUkw8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50JiZVUkwuY3JlYXRlT2JqZWN0VVJMKXt2YXIgb2U9VVJMLmNyZWF0ZU9iamVjdFVSTChRKTtpZigib2JqZWN0Ij09dHlwZW9m''@;'; put 'put ''IGNocm9tZSYmImZ1bmN0aW9uIj09dHlwZW9mKGNocm9tZS5kb3dubG9hZHN8fHt9KS5kb3dubG9hZClyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChvZSl9LDZlNCksY2hy''@;'; put 'put ''b21lLmRvd25sb2Fkcy5kb3dubG9hZCh7dXJsOm9lLGZpbGVuYW1lOlMsc2F2ZUFzOiEwfSk7dmFyIGdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZihudWxsIT1nZS5kb3dubG9hZClyZXR1cm4gZ2UuZG93bmxvYWQ9UyxnZS5ocmVmPW9lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp''@;'; put 'put ''bGQoZ2UpLGdlLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChnZSksVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChvZSl9LDZlNCksb2V9fWlmKHR5cGVvZiAkPCJ1IiYm''@;'; put 'put ''dHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9sZGVyPCJ1Iil0cnl7dmFyIHBlPUZpbGUoUyk7cmV0dXJuIHBlLm9wZW4oInciKSxwZS5lbmNvZGluZz0iYmluYXJ5IixBcnJheS5pc0FycmF5KFIpJiYoUj1DKFIpKSxwZS53cml0ZShSKSxwZS5jbG9zZSgpLFJ9Y2F0Y2goeWUpe2lmKCF5ZS5t''@;'; put 'put ''ZXNzYWdlfHwheWUubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyB5ZX10aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzYXZlIGZpbGUgIitTKX1mdW5jdGlvbiBPZShTKXtmb3IodmFyIFI9T2JqZWN0LmtleXMoUyksaz1bXSxHPTA7RzxSLmxlbmd0aDsrK0cpT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsUltHXSkmJmsucHVzaChSW0ddKTtyZXR1cm4ga31mdW5jdGlvbiBJZShTLFIpe2Zvcih2YXIgaz1bXSxHPU9lKFMpLFE9MDtRIT09Ry5sZW5ndGg7KytRKW51bGw9PWtbU1tHW1FdXVtSXV0mJihrW1NbR1tRXV1bUl1dPUdbUV0pO3JldHVybiBrfWZ1''@;'; put 'put ''bmN0aW9uIFZlKFMpe2Zvcih2YXIgUj1bXSxrPU9lKFMpLEc9MDtHIT09ay5sZW5ndGg7KytHKVJbU1trW0ddXV09a1tHXTtyZXR1cm4gUn1mdW5jdGlvbiBrZShTKXtmb3IodmFyIFI9W10saz1PZShTKSxHPTA7RyE9PWsubGVuZ3RoOysrRylSW1Nba1tHXV1dPXBhcnNlSW50KGtbR10sMTAp''@;'; put 'put ''O3JldHVybiBSfXZhciBRZSx1bixfdD1uZXcgRGF0ZSgxODk5LDExLDMwLDAsMCwwKSxudD0wO2Z1bmN0aW9uIHl0KCl7bnQ9X3QuZ2V0VGltZSgpKzZlNCooKG5ldyBEYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpLV90LmdldFRpbWV6b25lT2Zmc2V0KCkpLFFlPWZ1bmN0aW9uKFIsayl7dmFy''@;'; put 'put ''IEc9Ui5nZXRUaW1lKCk7cmV0dXJuIGsmJihHLT0xMjYzMTY4ZTUpLChHLW50KS84NjRlNX0sdW49ZnVuY3Rpb24oUil7dmFyIGs9bmV3IERhdGU7cmV0dXJuIGsuc2V0VGltZSgyNCpSKjYwKjYwKjFlMytudCksa319ZnVuY3Rpb24gaXQoUyl7dmFyIFI9MCxrPTAsRz0hMSxRPVMubWF0Y2go''@;'; put 'put ''L1AoWzAtOVwuXStZKT8oWzAtOVwuXStNKT8oWzAtOVwuXStEKT9UKFswLTlcLl0rSCk/KFswLTlcLl0rTSk/KFswLTlcLl0rUyk/Lyk7aWYoIVEpdGhyb3cgbmV3IEVycm9yKCJ8IitTKyJ8IGlzIG5vdCBhbiBJU084NjAxIER1cmF0aW9uIik7Zm9yKHZhciBvZT0xO29lIT1RLmxlbmd0aDsr''@;'; put 'put ''K29lKWlmKFFbb2VdKXtzd2l0Y2goaz0xLG9lPjMmJihHPSEwKSxRW29lXS5zbGljZShRW29lXS5sZW5ndGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6ICIrUVtvZV0uc2xpY2UoUVtvZV0ubGVuZ3RoLTEpKTtjYXNlIkQiOmsq''@;'; put 'put ''PTI0O2Nhc2UiSCI6ayo9NjA7Y2FzZSJNIjppZighRyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogTSIpO2sqPTYwfVIrPWsqcGFyc2VJbnQoUVtvZV0sMTApfXJldHVybiBSfXl0KCk7dmFyICRlPW5ldyBEYXRlKCIyMDE3LTAyLTE5VDE5OjA2OjA5''@;'; put 'put ''LjAwMFoiKTtpc05hTigkZS5nZXRGdWxsWWVhcigpKSYmKCRlPW5ldyBEYXRlKCIyLzE5LzE3IikpO3ZhciB0dD0yMDE3PT0kZS5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIEhlKFMsUil7dmFyIGs9bmV3IERhdGUoUyk7aWYodHQpcmV0dXJuIFI+MD9rLnNldFRpbWUoay5nZXRUaW1lKCkrNjAq''@;'; put 'put ''ay5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6UjwwJiZrLnNldFRpbWUoay5nZXRUaW1lKCktNjAqay5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyksaztpZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gUztpZigxOTE3PT0kZS5nZXRGdWxsWWVhcigpJiYhaXNOYU4oay5nZXRGdWxsWWVhcigp''@;'; put 'put ''KSl7dmFyIEc9ay5nZXRGdWxsWWVhcigpO3JldHVybiBTLmluZGV4T2YoIiIrRyk+LTF8fGsuc2V0RnVsbFllYXIoay5nZXRGdWxsWWVhcigpKzEwMCksa312YXIgUT1TLm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIiLCIxOSIsIjAiLCIwIiwiMCJdLG9lPW5ldyBEYXRlKCtRWzBdLCtRWzFd''@;'; put 'put ''LTEsK1FbMl0sK1FbM118fDAsK1FbNF18fDAsK1FbNV18fDApO3JldHVybiBTLmluZGV4T2YoIloiKT4tMSYmKG9lPW5ldyBEYXRlKG9lLmdldFRpbWUoKS02MCpvZS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykpLG9lfWZ1bmN0aW9uIHV0KFMpe2Zvcih2YXIgUj0iIixrPTA7ayE9Uy5sZW5n''@;'; put 'put ''dGg7KytrKVIrPVN0cmluZy5mcm9tQ2hhckNvZGUoU1trXSk7cmV0dXJuIFJ9ZnVuY3Rpb24gcXQoUyl7aWYoIm9iamVjdCIhPXR5cGVvZiBTfHxudWxsPT1TKXJldHVybiBTO2lmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShTLmdldFRpbWUoKSk7aWYoQXJyYXkuaXNBcnJh''@;'; put 'put ''eShTKSlyZXR1cm4gZnVuY3Rpb24gUnQoUyl7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoOysrayl7dmFyIEc9U1trXTsib2JqZWN0Ij09dHlwZW9mIEc/UltrXT1xdChHKTpudWxsIT1HJiYoUltrXT1HKX1yZXR1cm4gUn0oUyk7dmFyIFI9e307Zm9yKHZhciBrIGluIFMpT2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsaykmJihSW2tdPXF0KFNba10pKTtyZXR1cm4gUn1mdW5jdGlvbiBQdChTLFIpe2lmKCJvYmplY3QiIT10eXBlb2YgUnx8bnVsbD09UilyZXR1cm4gUztmb3IodmFyIGsgaW4gUilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoUixrKSYmKFNba109cXQoUltrXSkpO3JldHVybiBTfWZ1bmN0aW9uIGNpKFMsUil7Zm9yKHZhciBrPSIiO2subGVuZ3RoPFI7KWsrPVM7cmV0dXJuIGt9ZnVuY3Rpb24gUXQoUyl7dmFyIFI9TnVtYmVyKFMpO2lmKCFpc05hTihSKSlyZXR1cm4gaXNGaW5pdGUoUik/UjpOYU47aWYoIS9c''@;'; put 'put ''ZC8udGVzdChTKSlyZXR1cm4gUjt2YXIgaz0xLEc9Uy5yZXBsYWNlKC8oW1xkXSksKFtcZF0pL2csIiQxJDIiKS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gayo9MTAwLCIifSk7cmV0dXJuIGlzTmFOKFI9TnVtYmVyKEcpKSYmKEc9Ry5yZXBs''@;'; put 'put ''YWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihRLG9lKXtyZXR1cm4gaz0tayxvZX0pLGlzTmFOKFI9TnVtYmVyKEcpKSk/UjpSL2t9ZnVuY3Rpb24gc24oUyl7dmFyIFI9bmV3IERhdGUoUyksaz1uZXcgRGF0ZShOYU4pLEc9Ui5nZXRZZWFyKCksUT1SLmdldE1vbnRoKCksb2U9Ui5nZXREYXRl''@;'; put 'put ''KCk7cmV0dXJuIGlzTmFOKG9lKXx8RzwwfHxHPjgwOTk/azooUT4wfHxvZT4xKSYmMTAxIT1HfHxTLnRvTG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjLyk/UjpTLm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/azpSfWZ1bmN0''@;'; put 'put ''aW9uIFJpKFMsUil7aWYoUiYmUi5yYXcpcmV0dXJue3Q6InMiLHY6U307aWYoIVMpcmV0dXJue3Q6InoifTtpZigiVFJVRSI9PT1TKXJldHVybnt0OiJiIix2OiEwfTtpZigiRkFMU0UiPT09UylyZXR1cm57dDoiYiIsdjohMX07dmFyIGs9IiIsRz1OdW1iZXIoUyk7aWYoaXNGaW5pdGUoRykp''@;'; put 'put ''cmV0dXJue3Q6Im4iLHY6R307aWYoaXNOYU4oRykmJi9cZC8udGVzdChTKSl7dmFyIFE9MSxvZT1TLnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZyxmdW5jdGlvbihldCxjdCxFdCl7cmV0dXJuIGt8fChrPSIjLCMjMCIpLGN0K0V0fSkucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1wuXGQq''@;'; put 'put ''LyxmdW5jdGlvbihldCl7a3x8KGs9IjAiKSxrKz0iLiI7Zm9yKHZhciBjdD0yO2N0PD1ldC5sZW5ndGg7KytjdClrKz0iMCI7cmV0dXJuIGV0fSkucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gUSo9MTAwLGt8fChrPSIwIiksays9IiUiLCIifSk7aWYoIWlzTmFOKEc9TnVtYmVy''@;'; put 'put ''KG9lKSkpcmV0dXJue3Q6Im4iLHY6Ry9RLHo6a307aWYob2U9b2UucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24oZXQsY3Qpe3JldHVybiBRPS1RLGN0fSksIWlzTmFOKEc9TnVtYmVyKG9lKSkpcmV0dXJue3Q6Im4iLHY6Ry9RLHo6KGt8fCIwIikrIl8pOygiKyhrfHwiMCIpKyIpO0Ai''@;'; put 'put ''fX1lOmlmKCFSfHwhUi5yYXdEYXRlcyl7dmFyIGdlPVImJlIuY2VsbERhdGVzLHBlPW5ldyBEYXRlKFMpLFBlPXBlLmdldFllYXIoKSxOZT1wZS5nZXRNb250aCgpLFllPXBlLmdldERhdGUoKTtpZihpc05hTihZZSl8fFBlPDB8fFBlPjgwOTkpYnJlYWsgZTtpZigoTmU+MHx8WWU+MSkmJjEw''@;'; put 'put ''MSE9UGUpcmV0dXJue3Q6Z2U/ImQiOiJuIix2OmdlP3BlOlFlKHBlKSx6OlIuZGF0ZU5GfHxBLl90YWJsZVsxNF19O2lmKFMudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKSlyZXR1cm57dDpnZT8iZCI6Im4iLHY6''@;'; put 'put ''Z2U/cGU6UWUocGUpLHo6Ui5kYXRlTkZ8fEEuX3RhYmxlWzE0XX07aWYoUy5tYXRjaCgvW14tMC05OixcL1xcXS8pKWJyZWFrIGU7cmV0dXJuIHBlfXJldHVybnt0OiJzIix2OlN9fXZhciB6dCxobj01PT0iYWJhY2FiYSIuc3BsaXQoLyg6P2IpL2kpLmxlbmd0aDtmdW5jdGlvbiBXdChTKXty''@;'; put 'put ''ZXR1cm4gbnVsbCE9UyYmIVN9ZnVuY3Rpb24gQXQoUyl7cmV0dXJuIFMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrUy5zbGljZSgxKX1mdW5jdGlvbiBSbihTKXtyZXR1cm4gUz9TLmRhdGE/SihTLmRhdGEpOlMuYXNOb2RlQnVmZmVyJiZUZT9KKFMuYXNOb2RlQnVmZmVyKCkudG9TdHJpbmco''@;'; put 'put ''ImJpbmFyeSIpKTpTLmFzQmluYXJ5P0ooUy5hc0JpbmFyeSgpKTpTLl9kYXRhJiZTLl9kYXRhLmdldENvbnRlbnQ/Sih1dChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChTLl9kYXRhLmdldENvbnRlbnQoKSwwKSkpOlMuY29udGVudCYmUy50eXBlP0oodXQoUy5jb250ZW50KSk6bnVsbDpu''@;'; put 'put ''dWxsfWZ1bmN0aW9uIHN0KFMpe2lmKCFTKXJldHVybiBudWxsO2lmKFMuZGF0YSlyZXR1cm4gWShTLmRhdGEpO2lmKFMuYXNOb2RlQnVmZmVyJiZUZSlyZXR1cm4gUy5hc05vZGVCdWZmZXIoKTtpZihTLl9kYXRhJiZTLl9kYXRhLmdldENvbnRlbnQpe3ZhciBSPVMuX2RhdGEuZ2V0Q29udGVu''@;'; put 'put ''dCgpO3JldHVybiJzdHJpbmciPT10eXBlb2YgUj9ZKFIpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFIpfXJldHVybiBTLmNvbnRlbnQmJlMudHlwZT9TLmNvbnRlbnQ6bnVsbH1mdW5jdGlvbiByaShTLFIpe2Zvcih2YXIgaz1TLkZ1bGxQYXRoc3x8T2UoUy5maWxlcyksRz1SLnRvTG93''@;'; put 'put ''ZXJDYXNlKCksUT1HLnJlcGxhY2UoL1wvL2csIlxcIiksb2U9MDtvZTxrLmxlbmd0aDsrK29lKXt2YXIgZ2U9a1tvZV0udG9Mb3dlckNhc2UoKTtpZihHPT1nZXx8UT09Z2UpcmV0dXJuIFMuZmlsZXNba1tvZV1dfXJldHVybiBudWxsfWZ1bmN0aW9uIFdlKFMsUil7dmFyIGs9cmkoUyxSKTtp''@;'; put 'put ''ZihudWxsPT1rKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZmlsZSAiK1IrIiBpbiB6aXAiKTtyZXR1cm4ga31mdW5jdGlvbiBUdChTLFIsayl7aWYoIWspcmV0dXJuIGZ1bmN0aW9uIFV0KFMpe3JldHVybiBTJiYiLmJpbiI9PT1TLm5hbWUuc2xpY2UoLTQpP3N0KFMpOlJuKFMpfShX''@;'; put 'put ''ZShTLFIpKTtpZighUilyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFR0KFMsUil9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG5yKFMsUixrKXtpZighaylyZXR1cm4gUm4oV2UoUyxSKSk7aWYoIVIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBucihTLFIpfWNhdGNoe3JldHVybiBudWxsfX1m''@;'; put 'put ''dW5jdGlvbiBodChTLFIsayl7aWYoIWspcmV0dXJuIHN0KFdlKFMsUikpO2lmKCFSKXJldHVybiBudWxsO3RyeXtyZXR1cm4gaHQoUyxSKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gam4oUyxSLGspe1MuRnVsbFBhdGhzP3ZlLnV0aWxzLmNmYl9hZGQoUyxSLGspOlMuZmlsZShSLGsp''@;'; put 'put ''fWZ1bmN0aW9uIGhpKCl7cmV0dXJuIHp0P25ldyB6dDp2ZS51dGlscy5jZmJfbmV3KCl9ZnVuY3Rpb24gY24oUyxSKXt2YXIgaztpZih6dClzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6az1uZXcgenQoUyx7YmFzZTY0OiEwfSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2UiYXJyYXkiOms9''@;'; put 'put ''bmV3IHp0KFMse2Jhc2U2NDohMX0pO2JyZWFrO2Nhc2UiYnVmZmVyIjprPW5ldyB6dChTKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfWVsc2Ugc3dpdGNoKFIudHlwZSl7Y2FzZSJiYXNlNjQiOms9dmUucmVhZChTLHt0eXBlOiJi''@;'; put 'put ''YXNlNjQifSk7YnJlYWs7Y2FzZSJiaW5hcnkiOms9dmUucmVhZChTLHt0eXBlOiJiaW5hcnkifSk7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOms9dmUucmVhZChTLHt0eXBlOiJidWZmZXIifSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBl''@;'; put 'put ''ICIrUi50eXBlKX1yZXR1cm4ga31mdW5jdGlvbiBmbihTLFIpe2lmKCIvIj09Uy5jaGFyQXQoMCkpcmV0dXJuIFMuc2xpY2UoMSk7dmFyIGs9Ui5zcGxpdCgiLyIpOyIvIiE9Ui5zbGljZSgtMSkmJmsucG9wKCk7Zm9yKHZhciBHPVMuc3BsaXQoIi8iKTswIT09Ry5sZW5ndGg7KXt2YXIgUT1H''@;'; put 'put ''LnNoaWZ0KCk7Ii4uIj09PVE/ay5wb3AoKToiLiIhPT1RJiZrLnB1c2goUSl9cmV0dXJuIGsuam9pbigiLyIpfXR5cGVvZiBKU1ppcFN5bmM8InUiJiYoenQ9SlNaaXBTeW5jKSx1ZS5leHBvcnRzJiZ0eXBlb2YgenQ+InUiJiYoenQ9eSgzMTc5KSk7dmFyIElpPSc8P3htbCB2ZXJzaW9uPSIx''@;'; put 'put ''LjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+XHJcbicsWHQ9Lyg/OlteIlxzPz5cL10rKVxzKj1ccyooKD86IikoPzpbXiJdKj8pKD86Iil8KD86JykoPzpbXiddKj8pKD86Jyl8KD86W14nIj5cc10rKSkvZyxlbj0vPFtcL1w/XT9bYS16QS1aMC05Ol8tXSsoPzpccytb''@;'; put 'put ''XiJccz8+XC9dK1xzKj1ccyooPzoiW14iXSoifCdbXiddKid8W14nIj5ccz1dKykpKlxzP1tcL1w/XT8+L2c7SWkubWF0Y2goZW4pfHwoZW49LzxbXj5dKj4vZyk7dmFyIHVhPS88XHcqOi8sRWk9LzwoXC8/KVx3KzovO2Z1bmN0aW9uIHZyKFMsUixrKXtmb3IodmFyIEc9e30sUT0wLG9lPTA7''@;'; put 'put ''USE9PVMubGVuZ3RoJiYzMiE9PShvZT1TLmNoYXJDb2RlQXQoUSkpJiYxMCE9PW9lJiYxMyE9PW9lOysrUSk7aWYoUnx8KEdbMF09Uy5zbGljZSgwLFEpKSxRPT09Uy5sZW5ndGgpcmV0dXJuIEc7dmFyIGdlPVMubWF0Y2goWHQpLHBlPTAseWU9IiIsUGU9MCxOZT0iIixZZT0iIixldD0xO2lm''@;'; put 'put ''KGdlKWZvcihQZT0wO1BlIT1nZS5sZW5ndGg7KytQZSl7Zm9yKFllPWdlW1BlXSxvZT0wO29lIT1ZZS5sZW5ndGgmJjYxIT09WWUuY2hhckNvZGVBdChvZSk7KytvZSk7Zm9yKE5lPVllLnNsaWNlKDAsb2UpLnRyaW0oKTszMj09WWUuY2hhckNvZGVBdChvZSsxKTspKytvZTtmb3IoZXQ9MzQ9''@;'; put 'put ''PShRPVllLmNoYXJDb2RlQXQob2UrMSkpfHwzOT09UT8xOjAseWU9WWUuc2xpY2Uob2UrMStldCxZZS5sZW5ndGgtZXQpLHBlPTA7cGUhPU5lLmxlbmd0aCYmNTghPT1OZS5jaGFyQ29kZUF0KHBlKTsrK3BlKTtpZihwZT09PU5lLmxlbmd0aClOZS5pbmRleE9mKCJfIik+MCYmKE5lPU5lLnNs''@;'; put 'put ''aWNlKDAsTmUuaW5kZXhPZigiXyIpKSksR1tOZV09eWUsa3x8KEdbTmUudG9Mb3dlckNhc2UoKV09eWUpO2Vsc2V7dmFyIGN0PSg1PT09cGUmJiJ4bWxucyI9PT1OZS5zbGljZSgwLDUpPyJ4bWxucyI6IiIpK05lLnNsaWNlKHBlKzEpO2lmKEdbY3RdJiYiZXh0Ij09TmUuc2xpY2UocGUtMyxw''@;'; put 'put ''ZSkpY29udGludWU7R1tjdF09eWUsa3x8KEdbY3QudG9Mb3dlckNhc2UoKV09eWUpfX1yZXR1cm4gR31mdW5jdGlvbiBXbihTKXtyZXR1cm4gUy5yZXBsYWNlKEVpLCI8JDEiKX12YXIgJGk9eyImcXVvdDsiOiciJywiJmFwb3M7IjoiJyIsIiZndDsiOiI+IiwiJmx0OyI6IjwiLCImYW1wOyI6''@;'; put 'put ''IiYifSxlaT1WZSgkaSksUXI9ZnVuY3Rpb24oKXt2YXIgUz0vJig/OnF1b3R8YXBvc3xndHxsdHxhbXB8I3g/KFtcZGEtZkEtRl0rKSk7L2dpLFI9L194KFtcZGEtZkEtRl17NH0pXy9naTtyZXR1cm4gZnVuY3Rpb24gayhHKXt2YXIgUT1HKyIiLG9lPVEuaW5kZXhPZigiPCFbQ0RBVEFbIik7''@;'; put 'put ''aWYoLTE9PW9lKXJldHVybiBRLnJlcGxhY2UoUyxmdW5jdGlvbihwZSx5ZSl7cmV0dXJuICRpW3BlXXx8U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh5ZSxwZS5pbmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8cGV9KS5yZXBsYWNlKFIsZnVuY3Rpb24ocGUseWUpe3JldHVybiBTdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKHBhcnNlSW50KHllLDE2KSl9KTt2YXIgZ2U9US5pbmRleE9mKCJdXT4iKTtyZXR1cm4gayhRLnNsaWNlKDAsb2UpKStRLnNsaWNlKG9lKzksZ2UpK2soUS5zbGljZShnZSszKSl9fSgpLFZpPS9bJjw+JyJdL2csTmk9L1tcdTAwMDAtXHUwMDA4XHUwMDBiLVx1MDAxZl0v''@;'; put 'put ''ZyxEYT0vX3hbMC05YS1mQS1GXXs0fV8vZztmdW5jdGlvbiBMcihTKXtyZXR1cm4oUysiIikucmVwbGFjZShEYSwiX3gwMDVGJCYiKS5yZXBsYWNlKFZpLGZ1bmN0aW9uKGspe3JldHVybiBlaVtrXX0pLnJlcGxhY2UoTmksZnVuY3Rpb24oayl7cmV0dXJuIl94IisoIjAwMCIray5jaGFyQ29k''@;'; put 'put ''ZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyJfIn0pfWZ1bmN0aW9uIFdpKFMpe3JldHVybiBMcihTKS5yZXBsYWNlKC9cbi9nLCJfeDAwMGFfIil9ZnVuY3Rpb24gcGEoUyl7cmV0dXJuIExyKFMpLnJlcGxhY2UoLyAvZywiX3gwMDIwXyIpfXZhciBRbj0vW1x1MDAwMC1cdTAwMWZd''@;'; put 'put ''L2c7ZnVuY3Rpb24gbGEoUyl7cmV0dXJuKFMrIiIpLnJlcGxhY2UoVmksZnVuY3Rpb24oayl7cmV0dXJuIGVpW2tdfSkucmVwbGFjZSgvXG4vZywiPGJyLz4iKS5yZXBsYWNlKFFuLGZ1bmN0aW9uKGspe3JldHVybiImI3giKygiMDAwIitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5z''@;'; put 'put ''bGljZSgtNCkrIjsifSl9ZnVuY3Rpb24geWEoUyl7cmV0dXJuKFMrIiIpLnJlcGxhY2UoVmksZnVuY3Rpb24oayl7cmV0dXJuIGVpW2tdfSkucmVwbGFjZShRbixmdW5jdGlvbihrKXtyZXR1cm4iJiN4IitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIjsifSl9''@;'; put 'put ''dmFyIExhPWZ1bmN0aW9uKCl7dmFyIFM9LyYjKFxkKyk7L2c7ZnVuY3Rpb24gUihrLEcpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KEcsMTApKX1yZXR1cm4gZnVuY3Rpb24oRyl7cmV0dXJuIEcucmVwbGFjZShTLFIpfX0oKSxGYT1mdW5jdGlvbigpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihSKXtyZXR1cm4gUi5yZXBsYWNlKC8oXHJcbnxbXHJcbl0pL2csIiYjMTA7Iil9fSgpO2Z1bmN0aW9uIHRpKFMpe3N3aXRjaChTKXtjYXNlIDE6Y2FzZSEwOmNhc2UiMSI6Y2FzZSJ0cnVlIjpjYXNlIlRSVUUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fXZhciBnbz1mdW5jdGlv''@;'; put 'put ''bihSKXtmb3IodmFyIGs9IiIsRz0wLFE9MCxvZT0wLGdlPTAscGU9MCx5ZT0wO0c8Ui5sZW5ndGg7KShRPVIuY2hhckNvZGVBdChHKyspKTwxMjg/ays9U3RyaW5nLmZyb21DaGFyQ29kZShRKToob2U9Ui5jaGFyQ29kZUF0KEcrKyksUT4xOTEmJlE8MjI0PyhwZT0oMzEmUSk8PDYscGV8PTYz''@;'; put 'put ''Jm9lLGsrPVN0cmluZy5mcm9tQ2hhckNvZGUocGUpKTooZ2U9Ui5jaGFyQ29kZUF0KEcrKyksUTwyNDA/ays9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmUSk8PDEyfCg2MyZvZSk8PDZ8NjMmZ2UpOih5ZT0oKDcmUSk8PDE4fCg2MyZvZSk8PDEyfCg2MyZnZSk8PDZ8NjMmKHBlPVIuY2hhckNv''@;'; put 'put ''ZGVBdChHKyspKSktNjU1MzYsays9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoeWU+Pj4xMCYxMDIzKSksays9U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZ5ZSkpKSkpO3JldHVybiBrfSxOcz1mdW5jdGlvbihTKXtmb3IodmFyIFI9W10saz0wLEc9MCxRPTA7azxTLmxlbmd0''@;'; put 'put ''aDspc3dpdGNoKEc9Uy5jaGFyQ29kZUF0KGsrKyksITApe2Nhc2UgRzwxMjg6Ui5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoRykpO2JyZWFrO2Nhc2UgRzwyMDQ4OlIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5MisoRz4+NikpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgr''@;'; put 'put ''KDYzJkcpKSk7YnJlYWs7Y2FzZSBHPj01NTI5NiYmRzw1NzM0NDpHLT01NTI5NixRPVMuY2hhckNvZGVBdChrKyspLTU2MzIwKyhHPDwxMCksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhRPj4xOCY3KSkpLFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsoUT4+MTImNjMp''@;'; put 'put ''KSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhRPj42JjYzKSkpLFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmUSkpKTticmVhaztkZWZhdWx0OlIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoRz4+MTIpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUoMTI4KyhHPj42JjYzKSkpLFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmRykpKX1yZXR1cm4gUi5qb2luKCIiKX07aWYoVGUpe3ZhciBibD1mdW5jdGlvbihSKXt2YXIgRyxRLHllLGs9QnVmZmVyLmFsbG9jKDIqUi5sZW5ndGgpLG9lPTEsZ2U9MCxwZT0wO2ZvcihRPTA7''@;'; put 'put ''UTxSLmxlbmd0aDtRKz1vZSlvZT0xLCh5ZT1SLmNoYXJDb2RlQXQoUSkpPDEyOD9HPXllOnllPDIyND8oRz02NCooMzEmeWUpKyg2MyZSLmNoYXJDb2RlQXQoUSsxKSksb2U9Mik6eWU8MjQwPyhHPTQwOTYqKDE1JnllKSs2NCooNjMmUi5jaGFyQ29kZUF0KFErMSkpKyg2MyZSLmNoYXJDb2Rl''@;'; put 'put ''QXQoUSsyKSksb2U9Myk6KG9lPTQsRz0yNjIxNDQqKDcmeWUpKzQwOTYqKDYzJlIuY2hhckNvZGVBdChRKzEpKSs2NCooNjMmUi5jaGFyQ29kZUF0KFErMikpKyg2MyZSLmNoYXJDb2RlQXQoUSszKSkscGU9NTUyOTYrKChHLT02NTUzNik+Pj4xMCYxMDIzKSxHPTU2MzIwKygxMDIzJkcpKSww''@;'; put 'put ''IT09cGUmJihrW2dlKytdPTI1NSZwZSxrW2dlKytdPXBlPj4+OCxwZT0wKSxrW2dlKytdPUclMjU2LGtbZ2UrK109Rz4+Pjg7cmV0dXJuIGsuc2xpY2UoMCxnZSkudG9TdHJpbmcoInVjczIiKX0scHU9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyI7Z28ocHUpPT1i''@;'; put 'put ''bChwdSkmJihnbz1ibCk7dmFyIExjPWZ1bmN0aW9uKFIpe3JldHVybiBTZShSLCJiaW5hcnkiKS50b1N0cmluZygidXRmOCIpfTtnbyhwdSk9PUxjKHB1KSYmKGdvPUxjKSxOcz1mdW5jdGlvbihTKXtyZXR1cm4gU2UoUywidXRmOCIpLnRvU3RyaW5nKCJiaW5hcnkiKX19dmFyIFMsRDA9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgUz17fTtyZXR1cm4gZnVuY3Rpb24oayxHKXt2YXIgUT1rKyJ8IisoR3x8IiIpO3JldHVybiBTW1FdP1NbUV06U1tRXT1uZXcgUmVnRXhwKCI8KD86XFx3KzopPyIraysnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcr''@;'; put 'put ''Oik/JytrKyI+IixHfHwiIil9fSgpLGlyPShTPVtbIm5ic3AiLCIgIl0sWyJtaWRkb3QiLCJceGI3Il0sWyJxdW90IiwnIiddLFsiYXBvcyIsIiciXSxbImd0IiwiPiJdLFsibHQiLCI8Il0sWyJhbXAiLCImIl1dLm1hcChmdW5jdGlvbihSKXtyZXR1cm5bbmV3IFJlZ0V4cCgiJiIrUlswXSsi''@;'; put 'put ''OyIsImlnIiksUlsxXV19KSxmdW5jdGlvbihrKXtmb3IodmFyIEc9ay5yZXBsYWNlKC9eW1x0XG5cciBdKy8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2Uo''@;'; put 'put ''LzxbXj5dKj4vZywiIiksUT0wO1E8Uy5sZW5ndGg7KytRKUc9Ry5yZXBsYWNlKFNbUV1bMF0sU1tRXVsxXSk7cmV0dXJuIEd9KSx4YT1mdW5jdGlvbigpe3ZhciBTPXt9O3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gdm9pZCAwIT09U1trXT9TW2tdOlNba109bmV3IFJlZ0V4cCgiPCg/OnZ0''@;'; put 'put ''Oik/IitrKyI+KFtcXHNcXFNdKj8pPC8oPzp2dDopPyIraysiPiIsImciKX19KCksdWk9LzxcLz8oPzp2dDopP3ZhcmlhbnQ+L2csVnQ9LzwoPzp2dDopKFtePl0qKT4oW1xzXFNdKik8LztmdW5jdGlvbiBKcihTLFIpe3ZhciBrPXZyKFMpLEc9Uy5tYXRjaCh4YShrLmJhc2VUeXBlKSl8fFtd''@;'; put 'put ''LFE9W107aWYoRy5sZW5ndGghPWsuc2l6ZSl7aWYoUi5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHZlY3RvciBsZW5ndGggIitHLmxlbmd0aCsiICE9ICIray5zaXplKTtyZXR1cm4gUX1yZXR1cm4gRy5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZ2U9b2UucmVwbGFjZSh1aSwi''@;'; put 'put ''IikubWF0Y2goVnQpO2dlJiZRLnB1c2goe3Y6Z28oZ2VbMl0pLHQ6Z2VbMV19KX0pLFF9dmFyIGIwPS8oXlxzfFxzJHxcbikvO2Z1bmN0aW9uIEhhKFMsUil7cmV0dXJuIjwiK1MrKFIubWF0Y2goYjApPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrUisiPC8iK1MrIj4ifWZ1bmN0''@;'; put 'put ''aW9uIEx1KFMpe3JldHVybiBPZShTKS5tYXAoZnVuY3Rpb24oUil7cmV0dXJuIiAiK1IrJz0iJytTW1JdKyciJ30pLmpvaW4oIiIpfWZ1bmN0aW9uIFByKFMsUixrKXtyZXR1cm4iPCIrUysobnVsbCE9az9MdShrKToiIikrKG51bGwhPVI/KFIubWF0Y2goYjApPycgeG1sOnNwYWNlPSJwcmVz''@;'; put 'put ''ZXJ2ZSInOiIiKSsiPiIrUisiPC8iK1M6Ii8iKSsiPiJ9ZnVuY3Rpb24gY2YoUyxSKXt0cnl7cmV0dXJuIFMudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKi8sIiIpfWNhdGNoKGspe2lmKFIpdGhyb3cga31yZXR1cm4iIn12YXIgJGgsS2gsWWk9e2RjOiJodHRwOi8vcHVybC5vcmcvZGMv''@;'; put 'put ''ZWxlbWVudHMvMS4xLyIsZGN0ZXJtczoiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIsZGNtaXR5cGU6Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS8iLG14OiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9tYWMvZXhjZWwvMjAwOC9tYWluIixyOiJodHRwOi8vc2No''@;'; put 'put ''ZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIixzanM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvc2hlZXRqcy9jb3JlLXByb3BlcnRpZXMiLHZ0OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9y''@;'; put 'put ''bWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9kb2NQcm9wc1ZUeXBlcyIseHNpOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIseHNkOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsbWFpbjpbImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3Jt''@;'; put 'put ''YXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20v''@;'; put 'put ''b2ZmaWNlL2V4Y2VsLzIwMDYvMiJdfSx5bD17bzoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIix4OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbCIsc3M6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNwcmVhZHNoZWV0Iixk''@;'; put 'put ''dDoidXVpZDpDMkY0MTAxMC02NUIzLTExZDEtQTI5Ri0wMEFBMDBDMTQ4ODIiLG12OiJodHRwOi8vbWFjVm1sU2NoZW1hVXJpIix2OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIsaHRtbDoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCJ9LHkwPWZ1bmN0aW9uKFMpe2Zv''@;'; put 'put ''cih2YXIgUj1bXSxHPTA7RzxTWzBdLmxlbmd0aDsrK0cpaWYoU1swXVtHXSlmb3IodmFyIFE9MCxvZT1TWzBdW0ddLmxlbmd0aDtRPG9lO1ErPTEwMjQwKVIucHVzaC5hcHBseShSLFNbMF1bR10uc2xpY2UoUSxRKzEwMjQwKSk7cmV0dXJuIFJ9LHI1PXkwLE9sPWZ1bmN0aW9uKFMsUixrKXtm''@;'; put 'put ''b3IodmFyIEc9W10sUT1SO1E8aztRKz0yKUcucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGVvKFMsUSkpKTtyZXR1cm4gRy5qb2luKCIiKS5yZXBsYWNlKEUsIiIpfSx1Zj1PbCxzZD1mdW5jdGlvbihTLFIsayl7Zm9yKHZhciBHPVtdLFE9UjtRPFIrazsrK1EpRy5wdXNoKCgiMCIrU1tRXS50''@;'; put 'put ''b1N0cmluZygxNikpLnNsaWNlKC0yKSk7cmV0dXJuIEcuam9pbigiIil9LGRmPXNkLGsxPWZ1bmN0aW9uKFMsUixrKXtmb3IodmFyIEc9W10sUT1SO1E8aztRKyspRy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoUG8oUyxRKSkpO3JldHVybiBHLmpvaW4oIiIpfSxoZj1rMSxlaD1mdW5jdGlv''@;'; put 'put ''bihTLFIpe3ZhciBrPXpvKFMsUik7cmV0dXJuIGs+MD9rMShTLFIrNCxSKzQray0xKToiIn0sZmY9ZWgsR2g9ZnVuY3Rpb24oUyxSKXt2YXIgaz16byhTLFIpO3JldHVybiBrPjA/azEoUyxSKzQsUis0K2stMSk6IiJ9LE9jPUdoLE5hPWZ1bmN0aW9uKFMsUil7dmFyIGs9Mip6byhTLFIpO3Jl''@;'; put 'put ''dHVybiBrPjA/azEoUyxSKzQsUis0K2stMSk6IiJ9LEQzPU5hOyRoPUtoPWZ1bmN0aW9uKFIsayl7dmFyIEc9em8oUixrKTtyZXR1cm4gRz4wP09sKFIsays0LGsrNCtHKToiIn07dmFyIGFuLHZpLHFoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8oUyxSKTtyZXR1cm4gaz4wP2sxKFMsUis0LFIr''@;'; put 'put ''NCtrKToiIn0sQW49cWg7YW49dmk9ZnVuY3Rpb24oUyxSKXtyZXR1cm4gZnVuY3Rpb24gUWMoUyxSKXtmb3IodmFyIGs9MS0yKihTW1IrN10+Pj43KSxHPSgoMTI3JlNbUis3XSk8PDQpKyhTW1IrNl0+Pj40JjE1KSxRPTE1JlNbUis2XSxvZT01O29lPj0wOy0tb2UpUT0yNTYqUStTW1Irb2Vd''@;'; put 'put ''O3JldHVybiAyMDQ3PT1HPzA9PVE/ayooMS8wKTpOYU46KDA9PUc/Rz0tMTAyMjooRy09MTAyMyxRKz1NYXRoLnBvdygyLDUyKSksaypNYXRoLnBvdygyLEctNTIpKlEpfShTLFIpfTt2YXIgQXI9ZnVuY3Rpb24oUil7cmV0dXJuIEFycmF5LmlzQXJyYXkoUil9O1RlJiYoT2w9ZnVuY3Rpb24o''@;'; put 'put ''UyxSLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUyk/Uy50b1N0cmluZygidXRmMTZsZSIsUixrKS5yZXBsYWNlKEUsIiIpOnVmKFMsUixrKX0sc2Q9ZnVuY3Rpb24oUyxSLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUyk/Uy50b1N0cmluZygiaGV4IixSLFIrayk6ZGYoUyxSLGspfSxl''@;'; put 'put ''aD1mdW5jdGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoUikpcmV0dXJuIGZmKFIsayk7dmFyIEc9Ui5yZWFkVUludDMyTEUoayk7cmV0dXJuIEc+MD9SLnRvU3RyaW5nKCJ1dGY4IixrKzQsays0K0ctMSk6IiJ9LEdoPWZ1bmN0aW9uKFIsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihSKSly''@;'; put 'put ''ZXR1cm4gT2MoUixrKTt2YXIgRz1SLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gRz4wP1IudG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrRy0xKToiIn0sTmE9ZnVuY3Rpb24oUixrKXtpZighQnVmZmVyLmlzQnVmZmVyKFIpKXJldHVybiBEMyhSLGspO3ZhciBHPTIqUi5yZWFkVUludDMyTEUoayk7''@;'; put 'put ''cmV0dXJuIFIudG9TdHJpbmcoInV0ZjE2bGUiLGsrNCxrKzQrRy0xKX0sJGg9ZnVuY3Rpb24oUixrKXtpZighQnVmZmVyLmlzQnVmZmVyKFIpKXJldHVybiBLaChSLGspO3ZhciBHPVIucmVhZFVJbnQzMkxFKGspO3JldHVybiBSLnRvU3RyaW5nKCJ1dGYxNmxlIixrKzQsays0K0cpfSxxaD1m''@;'; put 'put ''dW5jdGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoUikpcmV0dXJuIEFuKFIsayk7dmFyIEc9Ui5yZWFkVUludDMyTEUoayk7cmV0dXJuIFIudG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrRyl9LGsxPWZ1bmN0aW9uKFIsayxHKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFIpP1IudG9TdHJp''@;'; put 'put ''bmcoInV0ZjgiLGssRyk6aGYoUixrLEcpfSx5MD1mdW5jdGlvbihTKXtyZXR1cm4gU1swXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKFNbMF1bMF0pP0J1ZmZlci5jb25jYXQoU1swXSk6cjUoUyl9LGo9ZnVuY3Rpb24oUyl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihTWzBdKT9CdWZmZXIu''@;'; put 'put ''Y29uY2F0KFMpOltdLmNvbmNhdC5hcHBseShbXSxTKX0sYW49ZnVuY3Rpb24oUixrKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFIpP1IucmVhZERvdWJsZUxFKGspOnZpKFIsayl9LEFyPWZ1bmN0aW9uKFIpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUil8fEFycmF5LmlzQXJyYXkoUil9KSx0''@;'; put 'put ''eXBlb2YgY3B0YWJsZTwidSImJihPbD1mdW5jdGlvbihTLFIsayl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsUy5zbGljZShSLGspKS5yZXBsYWNlKEUsIiIpfSxrMT1mdW5jdGlvbihTLFIsayl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLFMuc2xpY2UoUixr''@;'; put 'put ''KSl9LGVoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8oUyxSKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKEYsUy5zbGljZShSKzQsUis0K2stMSkpOiIifSxHaD1mdW5jdGlvbihTLFIpe3ZhciBrPXpvKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZShQLFMuc2xp''@;'; put 'put ''Y2UoUis0LFIrNCtrLTEpKToiIn0sTmE9ZnVuY3Rpb24oUyxSKXt2YXIgaz0yKnpvKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFMuc2xpY2UoUis0LFIrNCtrLTEpKToiIn0sJGg9ZnVuY3Rpb24oUyxSKXt2YXIgaz16byhTLFIpO3JldHVybiBrPjA/Y3B0YWJs''@;'; put 'put ''ZS51dGlscy5kZWNvZGUoMTIwMCxTLnNsaWNlKFIrNCxSKzQraykpOiIifSxxaD1mdW5jdGlvbihTLFIpe3ZhciBrPXpvKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxTLnNsaWNlKFIrNCxSKzQraykpOiIifSk7dmFyIFBvPWZ1bmN0aW9uKFMsUil7cmV0dXJu''@;'; put 'put ''IFNbUl19LGVvPWZ1bmN0aW9uKFMsUil7cmV0dXJuIDI1NipTW1IrMV0rU1tSXX0sb2w9ZnVuY3Rpb24oUyxSKXt2YXIgaz0yNTYqU1tSKzFdK1NbUl07cmV0dXJuIGs8MzI3Njg/azotMSooNjU1MzUtaysxKX0sem89ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSKzNdKigxPDwyNCkrKFNbUisy''@;'; put 'put ''XTw8MTYpKyhTW1IrMV08PDgpK1NbUl19LFZzPWZ1bmN0aW9uKFMsUil7cmV0dXJuIFNbUiszXTw8MjR8U1tSKzJdPDwxNnxTW1IrMV08PDh8U1tSXX0sU3M9ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSXTw8MjR8U1tSKzFdPDwxNnxTW1IrMl08PDh8U1tSKzNdfTtmdW5jdGlvbiBqbChTLFIp''@;'; put 'put ''e3ZhciBHLFEsZ2UscGUseWUsUGUsaz0iIixvZT1bXTtzd2l0Y2goUil7Y2FzZSJkYmNzIjppZihQZT10aGlzLmwsVGUmJkJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlrPXRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKlMpLnRvU3RyaW5nKCJ1dGYxNmxlIik7ZWxzZSBmb3IoeWU9MDt5ZTxTOysr''@;'; put 'put ''eWUpays9U3RyaW5nLmZyb21DaGFyQ29kZShlbyh0aGlzLFBlKSksUGUrPTI7Uyo9MjticmVhaztjYXNlInV0ZjgiOms9azEodGhpcyx0aGlzLmwsdGhpcy5sK1MpO2JyZWFrO2Nhc2UidXRmMTZsZSI6az1PbCh0aGlzLHRoaXMubCx0aGlzLmwrKFMqPTIpKTticmVhaztjYXNlIndzdHIiOmlm''@;'; put 'put ''KCEodHlwZW9mIGNwdGFibGU8InUiKSlyZXR1cm4gamwuY2FsbCh0aGlzLFMsImRiY3MiKTtrPWNwdGFibGUudXRpbHMuZGVjb2RlKFAsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqUykpLFMqPTI7YnJlYWs7Y2FzZSJscHN0ci1hbnNpIjprPWVoKHRoaXMsdGhpcy5sKSxTPTQrem8odGhp''@;'; put 'put ''cyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBzdHItY3AiOms9R2godGhpcyx0aGlzLmwpLFM9NCt6byh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHdzdHIiOms9TmEodGhpcyx0aGlzLmwpLFM9NCsyKnpvKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwcDQiOlM9NCt6byh0aGlzLHRoaXMubCks''@;'; put 'put ''az0kaCh0aGlzLHRoaXMubCksMiZTJiYoUys9Mik7YnJlYWs7Y2FzZSI4bHBwNCI6Uz00K3pvKHRoaXMsdGhpcy5sKSxrPXFoKHRoaXMsdGhpcy5sKSwzJlMmJihTKz00LSgzJlMpKTticmVhaztjYXNlImNzdHIiOmZvcihTPTAsaz0iIjswIT09KGdlPVBvKHRoaXMsdGhpcy5sK1MrKykpOylv''@;'; put 'put ''ZS5wdXNoKG5lKGdlKSk7az1vZS5qb2luKCIiKTticmVhaztjYXNlIl93c3RyIjpmb3IoUz0wLGs9IiI7MCE9PShnZT1lbyh0aGlzLHRoaXMubCtTKSk7KW9lLnB1c2gobmUoZ2UpKSxTKz0yO1MrPTIsaz1vZS5qb2luKCIiKTticmVhaztjYXNlImRiY3MtY29udCI6Zm9yKGs9IiIsUGU9dGhp''@;'; put 'put ''cy5sLHllPTA7eWU8UzsrK3llKXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YoUGUpKXJldHVybiBnZT1Qbyh0aGlzLFBlKSx0aGlzLmw9UGUrMSxwZT1qbC5jYWxsKHRoaXMsUy15ZSxnZT8iZGJjcy1jb250Ijoic2Jjcy1jb250Iiksb2Uuam9pbigiIikrcGU7b2UucHVz''@;'; put 'put ''aChuZShlbyh0aGlzLFBlKSkpLFBlKz0yfWs9b2Uuam9pbigiIiksUyo9MjticmVhaztjYXNlImNwc3RyIjppZih0eXBlb2YgY3B0YWJsZTwidSIpe2s9Y3B0YWJsZS51dGlscy5kZWNvZGUoUCx0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrUykpO2JyZWFrfWNhc2Uic2Jjcy1jb250Ijpmb3Io''@;'; put 'put ''az0iIixQZT10aGlzLmwseWU9MDt5ZSE9UzsrK3llKXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YoUGUpKXJldHVybiBnZT1Qbyh0aGlzLFBlKSx0aGlzLmw9UGUrMSxwZT1qbC5jYWxsKHRoaXMsUy15ZSxnZT8iZGJjcy1jb250Ijoic2Jjcy1jb250Iiksb2Uuam9pbigi''@;'; put 'put ''IikrcGU7b2UucHVzaChuZShQbyh0aGlzLFBlKSkpLFBlKz0xfWs9b2Uuam9pbigiIik7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goUyl7Y2FzZSAxOnJldHVybiBHPVBvKHRoaXMsdGhpcy5sKSx0aGlzLmwrKyxHO2Nhc2UgMjpyZXR1cm4gRz0oImkiPT09Uj9vbDplbykodGhpcyx0aGlzLmwpLHRo''@;'; put 'put ''aXMubCs9MixHO2Nhc2UgNDpjYXNlLTQ6cmV0dXJuImkiIT09UiYmMTI4JnRoaXNbdGhpcy5sKzNdPyhRPXpvKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQsUSk6KEc9KFM+MD9WczpTcykodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxHKTtjYXNlIDg6Y2FzZS04OmlmKCJmIj09PVIpcmV0dXJuIFE9''@;'; put 'put ''OD09Uz9hbih0aGlzLHRoaXMubCk6YW4oW3RoaXNbdGhpcy5sKzddLHRoaXNbdGhpcy5sKzZdLHRoaXNbdGhpcy5sKzVdLHRoaXNbdGhpcy5sKzRdLHRoaXNbdGhpcy5sKzNdLHRoaXNbdGhpcy5sKzJdLHRoaXNbdGhpcy5sKzFdLHRoaXNbdGhpcy5sKzBdXSwwKSx0aGlzLmwrPTgsUTtTPTg7''@;'; put 'put ''Y2FzZSAxNjprPXNkKHRoaXMsdGhpcy5sLFMpfX1yZXR1cm4gdGhpcy5sKz1TLGt9dmFyIEhvPWZ1bmN0aW9uKFMsUixrKXtTW2tdPTI1NSZSLFNbaysxXT1SPj4+OCYyNTUsU1trKzJdPVI+Pj4xNiYyNTUsU1trKzNdPVI+Pj4yNCYyNTV9LGtvPWZ1bmN0aW9uKFMsUixrKXtTW2tdPTI1NSZS''@;'; put 'put ''LFNbaysxXT1SPj44JjI1NSxTW2srMl09Uj4+MTYmMjU1LFNbayszXT1SPj4yNCYyNTV9LFN0PWZ1bmN0aW9uKFMsUixrKXtTW2tdPTI1NSZSLFNbaysxXT1SPj4+OCYyNTV9O2Z1bmN0aW9uIEJ0KFMsUixrKXt2YXIgRz0wLFE9MDtpZigiZGJjcyI9PT1rKXtmb3IoUT0wO1EhPVIubGVuZ3Ro''@;'; put 'put ''OysrUSlTdCh0aGlzLFIuY2hhckNvZGVBdChRKSx0aGlzLmwrMipRKTtHPTIqUi5sZW5ndGh9ZWxzZSBpZigic2JjcyI9PT1rKXtpZih0eXBlb2YgY3B0YWJsZTwidSImJjg3ND09Rilmb3IoUT0wO1EhPVIubGVuZ3RoOysrUSl7dmFyIG9lPWNwdGFibGUudXRpbHMuZW5jb2RlKEYsUi5jaGFy''@;'; put 'put ''QXQoUSkpO3RoaXNbdGhpcy5sK1FdPW9lWzBdfWVsc2UgZm9yKFI9Ui5yZXBsYWNlKC9bXlx4MDAtXHg3Rl0vZywiXyIpLFE9MDtRIT1SLmxlbmd0aDsrK1EpdGhpc1t0aGlzLmwrUV09MjU1JlIuY2hhckNvZGVBdChRKTtHPVIubGVuZ3RofWVsc2V7aWYoImhleCI9PT1rKXtmb3IoO1E8Uzsr''@;'; put 'put ''K1EpdGhpc1t0aGlzLmwrK109cGFyc2VJbnQoUi5zbGljZSgyKlEsMipRKzIpLDE2KXx8MDtyZXR1cm4gdGhpc31pZigidXRmMTZsZSI9PT1rKXt2YXIgZ2U9TWF0aC5taW4odGhpcy5sK1MsdGhpcy5sZW5ndGgpO2ZvcihRPTA7UTxNYXRoLm1pbihSLmxlbmd0aCxTKTsrK1Epe3ZhciBwZT1S''@;'; put 'put ''LmNoYXJDb2RlQXQoUSk7dGhpc1t0aGlzLmwrK109MjU1JnBlLHRoaXNbdGhpcy5sKytdPXBlPj44fWZvcig7dGhpcy5sPGdlOyl0aGlzW3RoaXMubCsrXT0wO3JldHVybiB0aGlzfXN3aXRjaChTKXtjYXNlIDE6Rz0xLHRoaXNbdGhpcy5sXT0yNTUmUjticmVhaztjYXNlIDI6Rz0yLHRoaXNb''@;'; put 'put ''dGhpcy5sXT0yNTUmUix0aGlzW3RoaXMubCsxXT0yNTUmKFI+Pj49OCk7YnJlYWs7Y2FzZSAzOkc9Myx0aGlzW3RoaXMubF09MjU1JlIsdGhpc1t0aGlzLmwrMV09MjU1JihSPj4+PTgpLHRoaXNbdGhpcy5sKzJdPTI1NSYoUj4+Pj04KTticmVhaztjYXNlIDQ6Rz00LEhvKHRoaXMsUix0aGlz''@;'; put 'put ''LmwpO2JyZWFrO2Nhc2UgODppZihHPTgsImYiPT09ayl7IWZ1bmN0aW9uIG41KFMsUixrKXt2YXIgRz0oUjwwfHwxL1I9PS0xLzA/MTowKTw8NyxRPTAsb2U9MCxnZT1HPy1SOlI7aXNGaW5pdGUoZ2UpPzA9PWdlP1E9b2U9MDooUT1NYXRoLmZsb29yKE1hdGgubG9nKGdlKS9NYXRoLkxOMiks''@;'; put 'put ''b2U9Z2UqTWF0aC5wb3coMiw1Mi1RKSxRPD0tMTAyMyYmKCFpc0Zpbml0ZShvZSl8fG9lPE1hdGgucG93KDIsNTIpKT9RPS0xMDIyOihvZS09TWF0aC5wb3coMiw1MiksUSs9MTAyMykpOihRPTIwNDcsb2U9aXNOYU4oUik/MjY5ODU6MCk7Zm9yKHZhciBwZT0wO3BlPD01OysrcGUsb2UvPTI1''@;'; put 'put ''NilTW2srcGVdPTI1NSZvZTtTW2srNl09KDE1JlEpPDw0fDE1Jm9lLFNbays3XT1RPj40fEd9KHRoaXMsUix0aGlzLmwpO2JyZWFrfWNhc2UgMTY6YnJlYWs7Y2FzZS00Okc9NCxrbyh0aGlzLFIsdGhpcy5sKX19cmV0dXJuIHRoaXMubCs9Ryx0aGlzfWZ1bmN0aW9uIF9uKFMsUil7dmFyIGs9''@;'; put 'put ''c2QodGhpcyx0aGlzLmwsUy5sZW5ndGg+PjEpO2lmKGshPT1TKXRocm93IG5ldyBFcnJvcihSKyJFeHBlY3RlZCAiK1MrIiBzYXcgIitrKTt0aGlzLmwrPVMubGVuZ3RoPj4xfWZ1bmN0aW9uIG1uKFMsUil7Uy5sPVIsUy5yZWFkX3NoaWZ0PWpsLFMuY2hrPV9uLFMud3JpdGVfc2hpZnQ9QnR9''@;'; put 'put ''ZnVuY3Rpb24gSW4oUyxSKXtTLmwrPVJ9ZnVuY3Rpb24gYm4oUyl7dmFyIFI9VihTKTtyZXR1cm4gbW4oUiwwKSxSfWZ1bmN0aW9uIHVyKFMsUixrKXtpZihTKXt2YXIgRyxRLG9lO21uKFMsUy5sfHwwKTtmb3IodmFyIGdlPVMubGVuZ3RoLHBlPTAseWU9MDtTLmw8Z2U7KXsxMjgmKHBlPVMu''@;'; put 'put ''cmVhZF9zaGlmdCgxKSkmJihwZT0oMTI3JnBlKSsoKDEyNyZTLnJlYWRfc2hpZnQoMSkpPDw3KSk7dmFyIFBlPUw4W3BlXXx8TDhbNjU1MzVdO2ZvcihvZT0xMjcmKEc9Uy5yZWFkX3NoaWZ0KDEpKSxRPTE7UTw0JiYxMjgmRzsrK1Epb2UrPSgxMjcmKEc9Uy5yZWFkX3NoaWZ0KDEpKSk8PDcq''@;'; put 'put ''UTt5ZT1TLmwrb2U7dmFyIE5lPShQZS5mfHxJbikoUyxvZSxrKTtpZihTLmw9eWUsUihOZSxQZS5uLHBlKSlyZXR1cm59fX1mdW5jdGlvbiBiaSgpe3ZhciBTPVtdLFI9VGU/MjU2OjIwNDgsaz1mdW5jdGlvbihQZSl7dmFyIE5lPWJuKFBlKTtyZXR1cm4gbW4oTmUsMCksTmV9LEc9ayhSKSxR''@;'; put 'put ''PWZ1bmN0aW9uKCl7RyYmKEcubGVuZ3RoPkcubCYmKChHPUcuc2xpY2UoMCxHLmwpKS5sPUcubGVuZ3RoKSxHLmxlbmd0aD4wJiZTLnB1c2goRyksRz1udWxsKX0sb2U9ZnVuY3Rpb24oUGUpe3JldHVybiBHJiZQZTxHLmxlbmd0aC1HLmw/RzooUSgpLEc9ayhNYXRoLm1heChQZSsxLFIpKSl9''@;'; put 'put ''O3JldHVybntuZXh0Om9lLHB1c2g6ZnVuY3Rpb24oUGUpe1EoKSxudWxsPT0oRz1QZSkubCYmKEcubD1HLmxlbmd0aCksb2UoUil9LGVuZDpmdW5jdGlvbigpe3JldHVybiBRKCkseTAoW1NdKX0sX2J1ZnM6U319ZnVuY3Rpb24gRnIoUyxSLGssRyl7dmFyIG9lLFE9K0h6W1JdO2lmKCFpc05h''@;'; put 'put ''TihRKSl7R3x8KEc9TDhbUV0ucHx8KGt8fFtdKS5sZW5ndGh8fDApLG9lPTErKFE+PTEyOD8xOjApKzEsRz49MTI4JiYrK29lLEc+PTE2Mzg0JiYrK29lLEc+PTIwOTcxNTImJisrb2U7dmFyIGdlPVMubmV4dChvZSk7UTw9MTI3P2dlLndyaXRlX3NoaWZ0KDEsUSk6KGdlLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsMTI4KygxMjcmUSkpLGdlLndyaXRlX3NoaWZ0KDEsUT4+NykpO2Zvcih2YXIgcGU9MDs0IT1wZTsrK3BlKXtpZighKEc+PTEyOCkpe2dlLndyaXRlX3NoaWZ0KDEsRyk7YnJlYWt9Z2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZHKSksRz4+PTd9Rz4wJiZBcihrKSYmUy5wdXNoKGspfX1m''@;'; put 'put ''dW5jdGlvbiB0YShTLFIsayl7dmFyIEc9cXQoUyk7aWYoUi5zPyhHLmNSZWwmJihHLmMrPVIucy5jKSxHLnJSZWwmJihHLnIrPVIucy5yKSk6KEcuY1JlbCYmKEcuYys9Ui5jKSxHLnJSZWwmJihHLnIrPVIucikpLCFrfHxrLmJpZmY8MTIpe2Zvcig7Ry5jPj0yNTY7KUcuYy09MjU2O2Zvcig7''@;'; put 'put ''Ry5yPj02NTUzNjspRy5yLT02NTUzNn1yZXR1cm4gR31mdW5jdGlvbiBvYShTLFIsayl7dmFyIEc9cXQoUyk7cmV0dXJuIEcucz10YShHLnMsUi5zLGspLEcuZT10YShHLmUsUi5zLGspLEd9ZnVuY3Rpb24gVmEoUyxSKXtpZihTLmNSZWwmJlMuYzwwKWZvcihTPXF0KFMpO1MuYzwwOylTLmMr''@;'; put 'put ''PVI+OD8xNjM4NDoyNTY7aWYoUy5yUmVsJiZTLnI8MClmb3IoUz1xdChTKTtTLnI8MDspUy5yKz1SPjg/MTA0ODU3NjpSPjU/NjU1MzY6MTYzODQ7aWYoUy5jUmVsJiZTLmM+PShSPjg/MTYzODQ6MjU2KSlmb3IoUz1xdChTKTtTLmM+PShSPjg/MTYzODQ6MjU2KTspUy5jLT1SPjg/MTYzODQ6''@;'; put 'put ''MjU2O2lmKFMuclJlbCYmUy5yPj0xMDQ4NTc2KWZvcihTPXF0KFMpO1Mucj49MTA0ODU3NjspUy5yLT0xMDQ4NTc2O3ZhciBrPXFpKFMpO3JldHVybiFTLmNSZWwmJm51bGwhPVMuY1JlbCYmKGs9ZnVuY3Rpb24gWGgoUyl7cmV0dXJuIFMucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KGsp''@;'; put 'put ''KSwhUy5yUmVsJiZudWxsIT1TLnJSZWwmJihrPWZ1bmN0aW9uIFBjKFMpe3JldHVybiBTLnJlcGxhY2UoLyhbQS1aXXxeKShcZCspJC8sIiQxJCQkMiIpfShrKSksa31mdW5jdGlvbiAkbyhTLFIpe3JldHVybiAwIT1TLnMucnx8Uy5zLnJSZWx8fFMuZS5yIT0oUi5iaWZmPj0xMj8xMDQ4NTc1''@;'; put 'put ''OlIuYmlmZj49OD82NTUzNjoxNjM4NCl8fFMuZS5yUmVsPzAhPVMucy5jfHxTLnMuY1JlbHx8Uy5lLmMhPShSLmJpZmY+PTEyPzE2MzgzOjI1NSl8fFMuZS5jUmVsP1ZhKFMucyxSLmJpZmYpKyI6IitWYShTLmUsUi5iaWZmKTooUy5zLnJSZWw/IiI6IiQiKStqaShTLnMucikrIjoiKyhTLmUu''@;'; put 'put ''clJlbD8iIjoiJCIpK2ppKFMuZS5yKTooUy5zLmNSZWw/IiI6IiQiKStUYShTLnMuYykrIjoiKyhTLmUuY1JlbD8iIjoiJCIpK1RhKFMuZS5jKX12YXIgWGw9e307ZnVuY3Rpb24gX28oUyl7cmV0dXJuIHBhcnNlSW50KGZ1bmN0aW9uIHpsKFMpe3JldHVybiBTLnJlcGxhY2UoL1wkKFxkKykk''@;'; put 'put ''LywiJDEiKX0oUyksMTApLTF9ZnVuY3Rpb24gamkoUyl7cmV0dXJuIiIrKFMrMSl9ZnVuY3Rpb24gQ2EoUyl7Zm9yKHZhciBSPWZ1bmN0aW9uIEcwKFMpe3JldHVybiBTLnJlcGxhY2UoL15cJChbQS1aXSkvLCIkMSIpfShTKSxrPTAsRz0wO0chPT1SLmxlbmd0aDsrK0cpaz0yNiprK1IuY2hh''@;'; put 'put ''ckNvZGVBdChHKS02NDtyZXR1cm4gay0xfWZ1bmN0aW9uIFRhKFMpe2lmKFM8MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY29sdW1uICIrUyk7dmFyIFI9IiI7Zm9yKCsrUztTO1M9TWF0aC5mbG9vcigoUy0xKS8yNikpUj1TdHJpbmcuZnJvbUNoYXJDb2RlKChTLTEpJTI2KzY1KStSO3Jl''@;'; put 'put ''dHVybiBSfWZ1bmN0aW9uIE5vKFMpe2Zvcih2YXIgUj0wLGs9MCxHPTA7RzxTLmxlbmd0aDsrK0cpe3ZhciBRPVMuY2hhckNvZGVBdChHKTtRPj00OCYmUTw9NTc/Uj0xMCpSKyhRLTQ4KTpRPj02NSYmUTw9OTAmJihrPTI2KmsrKFEtNjQpKX1yZXR1cm57YzprLTEscjpSLTF9fWZ1bmN0aW9u''@;'; put 'put ''IHFpKFMpe2Zvcih2YXIgUj1TLmMrMSxrPSIiO1I7Uj0oUi0xKS8yNnwwKWs9U3RyaW5nLmZyb21DaGFyQ29kZSgoUi0xKSUyNis2NSkraztyZXR1cm4gaysoUy5yKzEpfWZ1bmN0aW9uIE1zKFMpe3ZhciBSPVMuaW5kZXhPZigiOiIpO3JldHVybi0xPT1SP3tzOk5vKFMpLGU6Tm8oUyl9Ontz''@;'; put 'put ''Ok5vKFMuc2xpY2UoMCxSKSksZTpObyhTLnNsaWNlKFIrMSkpfX1mdW5jdGlvbiByYShTLFIpe3JldHVybiB0eXBlb2YgUj4idSJ8fCJudW1iZXIiPT10eXBlb2YgUj9yYShTLnMsUy5lKTooInN0cmluZyIhPXR5cGVvZiBTJiYoUz1xaShTKSksInN0cmluZyIhPXR5cGVvZiBSJiYoUj1xaShS''@;'; put 'put ''KSksUz09Uj9TOlMrIjoiK1IpfWZ1bmN0aW9uIG9vKFMpe3ZhciBSPUpTT04ucGFyc2UoJ3sicyI6eyJjIjowLCJyIjowfSwiZSI6eyJjIjowLCJyIjowfX0nKSxrPTAsRz0wLFE9MCxvZT1TLmxlbmd0aDtmb3Ioaz0wO0c8b2UmJiEoKFE9Uy5jaGFyQ29kZUF0KEcpLTY0KTwxfHxRPjI2KTsr''@;'; put 'put ''K0cpaz0yNiprK1E7Zm9yKFIucy5jPS0tayxrPTA7RzxvZSYmISgoUT1TLmNoYXJDb2RlQXQoRyktNDgpPDB8fFE+OSk7KytHKWs9MTAqaytRO2lmKFIucy5yPS0tayxHPT09b2V8fDU4PT09Uy5jaGFyQ29kZUF0KCsrRykpcmV0dXJuIFIuZS5jPVIucy5jLFIuZS5yPVIucy5yLFI7Zm9yKGs9''@;'; put 'put ''MDtHIT1vZSYmISgoUT1TLmNoYXJDb2RlQXQoRyktNjQpPDF8fFE+MjYpOysrRylrPTI2KmsrUTtmb3IoUi5lLmM9LS1rLGs9MDtHIT1vZSYmISgoUT1TLmNoYXJDb2RlQXQoRyktNDgpPDB8fFE+OSk7KytHKWs9MTAqaytRO3JldHVybiBSLmUucj0tLWssUn1mdW5jdGlvbiBhNShTLFIpe3Zh''@;'; put 'put ''ciBrPSJkIj09Uy50JiZSIGluc3RhbmNlb2YgRGF0ZTtpZihudWxsIT1TLnopdHJ5e3JldHVybiBTLnc9QS5mb3JtYXQoUy56LGs/UWUoUik6Uil9Y2F0Y2h7fXRyeXtyZXR1cm4gUy53PUEuZm9ybWF0KChTLlhGfHx7fSkubnVtRm10SWR8fChrPzE0OjApLGs/UWUoUik6Uil9Y2F0Y2h7cmV0''@;'; put 'put ''dXJuIiIrUn19ZnVuY3Rpb24gX2woUyxSLGspe3JldHVybiBudWxsPT1TfHxudWxsPT1TLnR8fCJ6Ij09Uy50PyIiOnZvaWQgMCE9PVMudz9TLnc6KCJkIj09Uy50JiYhUy56JiZrJiZrLmRhdGVORiYmKFMuej1rLmRhdGVORiksImUiPT1TLnQ/TWNbUy52XXx8Uy52OmE1KFMsbnVsbD09Uj9T''@;'; put 'put ''LnY6UikpfWZ1bmN0aW9uIHRoKFMsUil7dmFyIGs9UiYmUi5zaGVldD9SLnNoZWV0OiJTaGVldDEiLEc9e307cmV0dXJuIEdba109Uyx7U2hlZXROYW1lczpba10sU2hlZXRzOkd9fWZ1bmN0aW9uIGY0KFMsUixrKXt2YXIgRz1rfHx7fSxRPVM/QXJyYXkuaXNBcnJheShTKTpHLmRlbnNlO251''@;'; put 'put ''bGwhPWxlJiZudWxsPT1RJiYoUT1sZSk7dmFyIG9lPVN8fChRP1tdOnt9KSxnZT0wLHBlPTA7aWYob2UmJm51bGwhPUcub3JpZ2luKXtpZigibnVtYmVyIj09dHlwZW9mIEcub3JpZ2luKWdlPUcub3JpZ2luO2Vsc2V7dmFyIHllPSJzdHJpbmciPT10eXBlb2YgRy5vcmlnaW4/Tm8oRy5vcmln''@;'; put 'put ''aW4pOkcub3JpZ2luO2dlPXllLnIscGU9eWUuY31vZVsiIXJlZiJdfHwob2VbIiFyZWYiXT0iQTE6QTEiKX12YXIgUGU9e3M6e2M6MWU3LHI6MWU3fSxlOntjOjAscjowfX07aWYob2VbIiFyZWYiXSl7dmFyIE5lPW9vKG9lWyIhcmVmIl0pO1BlLnMuYz1OZS5zLmMsUGUucy5yPU5lLnMucixQ''@;'; put 'put ''ZS5lLmM9TWF0aC5tYXgoUGUuZS5jLE5lLmUuYyksUGUuZS5yPU1hdGgubWF4KFBlLmUucixOZS5lLnIpLC0xPT1nZSYmKFBlLmUucj1nZT1OZS5lLnIrMSl9Zm9yKHZhciBZZT0wO1llIT1SLmxlbmd0aDsrK1llKWlmKFJbWWVdKXtpZighQXJyYXkuaXNBcnJheShSW1llXSkpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJhb2FfdG9fc2hlZXQgZXhwZWN0cyBhbiBhcnJheSBvZiBhcnJheXMiKTtmb3IodmFyIGV0PTA7ZXQhPVJbWWVdLmxlbmd0aDsrK2V0KWlmKCEodHlwZW9mIFJbWWVdW2V0XT4idSIpKXt2YXIgY3Q9e3Y6UltZZV1bZXRdfSxFdD1nZStZZSxhdD1wZStldDtpZihQZS5zLnI+RXQm''@;'; put 'put ''JihQZS5zLnI9RXQpLFBlLnMuYz5hdCYmKFBlLnMuYz1hdCksUGUuZS5yPEV0JiYoUGUuZS5yPUV0KSxQZS5lLmM8YXQmJihQZS5lLmM9YXQpLCFSW1llXVtldF18fCJvYmplY3QiIT10eXBlb2YgUltZZV1bZXRdfHxBcnJheS5pc0FycmF5KFJbWWVdW2V0XSl8fFJbWWVdW2V0XWluc3RhbmNl''@;'; put 'put ''b2YgRGF0ZSlpZihBcnJheS5pc0FycmF5KGN0LnYpJiYoY3QuZj1SW1llXVtldF1bMV0sY3Qudj1jdC52WzBdKSxudWxsPT09Y3QudilpZihjdC5mKWN0LnQ9Im4iO2Vsc2UgaWYoRy5udWxsRXJyb3IpY3QudD0iZSIsY3Qudj0wO2Vsc2V7aWYoIUcuc2hlZXRTdHVicyljb250aW51ZTtjdC50''@;'; put 'put ''PSJ6In1lbHNlIm51bWJlciI9PXR5cGVvZiBjdC52P2N0LnQ9Im4iOiJib29sZWFuIj09dHlwZW9mIGN0LnY/Y3QudD0iYiI6Y3QudiBpbnN0YW5jZW9mIERhdGU/KGN0Lno9Ry5kYXRlTkZ8fEEuX3RhYmxlWzE0XSxHLmNlbGxEYXRlcz8oY3QudD0iZCIsY3Qudz1BLmZvcm1hdChjdC56LFFl''@;'; put 'put ''KGN0LnYpKSk6KGN0LnQ9Im4iLGN0LnY9UWUoY3QudiksY3Qudz1BLmZvcm1hdChjdC56LGN0LnYpKSk6Y3QudD0icyI7ZWxzZSBjdD1SW1llXVtldF07aWYoY3QmJmN0LmgpdHJ5e2N0LlI9bWQuaHRtbF90b19ycyhjdC5oKSxjdC52PSIiO2Zvcih2YXIgYnQ9MDtidDxjdC5SLmxlbmd0aDsr''@;'; put 'put ''K2J0KWN0LnYrPWN0LlJbYnRdLnZ8fCIifWNhdGNoe31pZihRKW9lW0V0XXx8KG9lW0V0XT1bXSksb2VbRXRdW2F0XSYmb2VbRXRdW2F0XS5zJiYoY3Qucz1vZVtFdF1bYXRdLnMpLG9lW0V0XVthdF0mJm9lW0V0XVthdF0ueiYmKGN0Lno9b2VbRXRdW2F0XS56KSxvZVtFdF1bYXRdPWN0O2Vs''@;'; put 'put ''c2V7dmFyIGp0PXFpKHtjOmF0LHI6RXR9KTtvZVtqdF0mJm9lW2p0XS5zJiYoY3Qucz1vZVtqdF0ucyksb2VbanRdJiZvZVtqdF0ueiYmKGN0Lno9b2VbanRdLnopLG9lW2p0XT1jdH19fXJldHVybiBQZS5zLmM8MWU3JiYob2VbIiFyZWYiXT1yYShQZSkpLG9lfWZ1bmN0aW9uIHA0KFMsUil7''@;'; put 'put ''cmV0dXJuIGY0KG51bGwsUyxSKX1mdW5jdGlvbiBLMChTLFIpe3JldHVybiBSfHwoUj1ibig0KSksUi53cml0ZV9zaGlmdCg0LFMpLFJ9ZnVuY3Rpb24gZ3UoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09Uj8iIjpTLnJlYWRfc2hpZnQoUiwiZGJjcyIpfWZ1bmN0aW9uIEZj''@;'; put 'put ''KFMsUil7dmFyIGs9ITE7cmV0dXJuIG51bGw9PVImJihrPSEwLFI9Ym4oNCsyKlMubGVuZ3RoKSksUi53cml0ZV9zaGlmdCg0LFMubGVuZ3RoKSxTLmxlbmd0aD4wJiZSLndyaXRlX3NoaWZ0KDAsUywiZGJjcyIpLGs/Ui5zbGljZSgwLFIubCk6Un1mdW5jdGlvbiBSdyhTKXtyZXR1cm57aWNo''@;'; put 'put ''OlMucmVhZF9zaGlmdCgyKSxpZm50OlMucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gc2woUyxSKXt2YXIgaz1TLmwsRz1TLnJlYWRfc2hpZnQoMSksUT1ndShTKSxvZT1bXSxnZT17dDpRLGg6UX07aWYoMSZHKXtmb3IodmFyIHBlPVMucmVhZF9zaGlmdCg0KSx5ZT0wO3llIT1wZTsrK3llKW9l''@;'; put 'put ''LnB1c2goUncoUykpO2dlLnI9b2V9ZWxzZSBnZS5yPVt7aWNoOjAsaWZudDowfV07cmV0dXJuIFMubD1rK1IsZ2V9IWZ1bmN0aW9uKFMsUil7dmFyIGs7aWYodHlwZW9mIGNyeXB0b0Jyb3dzZXJpZnk8InUiKWs9Y3J5cHRvQnJvd3NlcmlmeTtlbHNlIGlmKHR5cGVvZiBSPCJ1IilrPVI7ZWxz''@;'; put 'put ''ZSB0cnl7az15KDkxNDI2KX1jYXRjaHtrPW51bGx9Uy5yYzQ9ZnVuY3Rpb24oRyxRKXt2YXIgb2U9bmV3IEFycmF5KDI1NiksZ2U9MCxwZT0wLHllPTAsUGU9MDtmb3IocGU9MDsyNTYhPXBlOysrcGUpb2VbcGVdPXBlO2ZvcihwZT0wOzI1NiE9cGU7KytwZSl5ZT15ZStvZVtwZV0rR1twZSVH''@;'; put 'put ''Lmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTUsUGU9b2VbcGVdLG9lW3BlXT1vZVt5ZV0sb2VbeWVdPVBlO3BlPXllPTA7dmFyIE5lPVYoUS5sZW5ndGgpO2ZvcihnZT0wO2dlIT1RLmxlbmd0aDsrK2dlKVBlPW9lW3BlPXBlKzEmMjU1XSxvZVtwZV09b2VbeWU9KHllK29lW3BlXSklMjU2XSxv''@;'; put 'put ''ZVt5ZV09UGUsTmVbZ2VdPVFbZ2VdXm9lW29lW3BlXStvZVt5ZV0mMjU1XTtyZXR1cm4gTmV9LFMubWQ1PWZ1bmN0aW9uKEcpe2lmKCFrKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY3J5cHRvIik7cmV0dXJuIGsuY3JlYXRlSGFzaCgibWQ1IikudXBkYXRlKEJ1ZmZlci5mcm9tKEcp''@;'; put 'put ''KS5kaWdlc3QoImhleCIpfX0oWGwsdHlwZW9mIGNyeXB0bzwidSI/Y3J5cHRvOnZvaWQgMCk7dmFyIEx3PXNsO2Z1bmN0aW9uIEQxKFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gays9Uy5yZWFkX3NoaWZ0KDEpPDwxNixTLmwrKyx7YzpSLGlTdHls''@;'; put 'put ''ZVJlZjprfX1mdW5jdGlvbiB4cihTLFIpe3JldHVybiBudWxsPT1SJiYoUj1ibig4KSksUi53cml0ZV9zaGlmdCgtNCxTLmMpLFIud3JpdGVfc2hpZnQoMyxTLmlTdHlsZVJlZnx8Uy5zKSxSLndyaXRlX3NoaWZ0KDEsMCksUn1mdW5jdGlvbiBKaChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMik7''@;'; put 'put ''cmV0dXJuIFIrPVMucmVhZF9zaGlmdCgxKTw8MTYsUy5sKysse2M6LTEsaVN0eWxlUmVmOlJ9fWZ1bmN0aW9uIGZpKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDQpKSxSLndyaXRlX3NoaWZ0KDMsUy5pU3R5bGVSZWZ8fFMucyksUi53cml0ZV9zaGlmdCgxLDApLFJ9dmFyIG81PWd1LHM1''@;'; put 'put ''PUZjO2Z1bmN0aW9uIHQwKFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PVJ8fDQyOTQ5NjcyOTU9PT1SPyIiOlMucmVhZF9zaGlmdChSLCJkYmNzIil9ZnVuY3Rpb24gcGYoUyxSKXt2YXIgaz0hMTtyZXR1cm4gbnVsbD09UiYmKGs9ITAsUj1ibigxMjcpKSxSLndyaXRlX3No''@;'; put 'put ''aWZ0KDQsUy5sZW5ndGg+MD9TLmxlbmd0aDo0Mjk0OTY3Mjk1KSxTLmxlbmd0aD4wJiZSLndyaXRlX3NoaWZ0KDAsUywiZGJjcyIpLGs/Ui5zbGljZSgwLFIubCk6Un12YXIgbDU9Z3UsZzQ9dDAsYzU9cGY7ZnVuY3Rpb24gSTEoUyl7dmFyIFI9Uy5zbGljZShTLmwsUy5sKzQpLGs9MSZSWzBd''@;'; put 'put ''LEc9MiZSWzBdO1MubCs9NCxSWzBdJj0yNTI7dmFyIFE9MD09PUc/YW4oWzAsMCwwLDAsUlswXSxSWzFdLFJbMl0sUlszXV0sMCk6VnMoUiwwKT4+MjtyZXR1cm4gaz9RLzEwMDpRfWZ1bmN0aW9uIHV2KFMsUil7bnVsbD09UiYmKFI9Ym4oNCkpO3ZhciBrPTAsRz0wLFE9MTAwKlM7aWYoUz09''@;'; put 'put ''KDB8UykmJlM+PS0oMTw8MjkpJiZTPDE8PDI5P0c9MTpRPT0oMHxRKSYmUT49LSgxPDwyOSkmJlE8MTw8MjkmJihHPTEsaz0xKSwhRyl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIFJrTnVtYmVyICIrUyk7Ui53cml0ZV9zaGlmdCgtNCwoKGs/UTpTKTw8MikrKGsrMikpfWZ1bmN0aW9u''@;'; put 'put ''IGxkKFMpe3ZhciBSPXtzOnt9LGU6e319O3JldHVybiBSLnMucj1TLnJlYWRfc2hpZnQoNCksUi5lLnI9Uy5yZWFkX3NoaWZ0KDQpLFIucy5jPVMucmVhZF9zaGlmdCg0KSxSLmUuYz1TLnJlYWRfc2hpZnQoNCksUn12YXIgbXU9bGQsZ2Y9ZnVuY3Rpb24gVDYoUyxSKXtyZXR1cm4gUnx8KFI9''@;'; put 'put ''Ym4oMTYpKSxSLndyaXRlX3NoaWZ0KDQsUy5zLnIpLFIud3JpdGVfc2hpZnQoNCxTLmUuciksUi53cml0ZV9zaGlmdCg0LFMucy5jKSxSLndyaXRlX3NoaWZ0KDQsUy5lLmMpLFJ9O2Z1bmN0aW9uIG4wKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7RzxSOysrRyl7dmFy''@;'; put 'put ''IFE9bXUoUyk7ay5wdXNoKHJhKFEpKX1yZXR1cm4gay5qb2luKCIsIil9ZnVuY3Rpb24gUGwoUyl7aWYoUy5sZW5ndGgtUy5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVuZGVyZmxvdyI7cmV0dXJuIFMucmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24gT3UoUyxSKXtyZXR1cm4oUnx8Ym4o''@;'; put 'put ''OCkpLndyaXRlX3NoaWZ0KDgsUywiZiIpfWZ1bmN0aW9uIFFoKFMpe3ZhciBSPXt9LEc9Uy5yZWFkX3NoaWZ0KDEpPj4+MSxRPVMucmVhZF9zaGlmdCgxKSxvZT1TLnJlYWRfc2hpZnQoMiwiaSIpLGdlPVMucmVhZF9zaGlmdCgxKSxwZT1TLnJlYWRfc2hpZnQoMSkseWU9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDEpO3N3aXRjaChTLmwrKyxHKXtjYXNlIDA6Ui5hdXRvPTE7YnJlYWs7Y2FzZSAxOlIuaW5kZXg9UTt2YXIgUGU9cjBbUV07UGUmJihSLnJnYj1oZChQZSkpO2JyZWFrO2Nhc2UgMjpSLnJnYj1oZChbZ2UscGUseWVdKTticmVhaztjYXNlIDM6Ui50aGVtZT1RfXJldHVybiAwIT1vZSYmKFIu''@;'; put 'put ''dGludD1vZT4wP29lLzMyNzY3Om9lLzMyNzY4KSxSfWZ1bmN0aW9uIG1mKFMsUil7aWYoUnx8KFI9Ym4oOCkpLCFTfHxTLmF1dG8pcmV0dXJuIFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUjtudWxsIT1TLmluZGV4PyhSLndyaXRlX3NoaWZ0KDEsMiksUi53cml0ZV9z''@;'; put 'put ''aGlmdCgxLFMuaW5kZXgpKTpudWxsIT1TLnRoZW1lPyhSLndyaXRlX3NoaWZ0KDEsNiksUi53cml0ZV9zaGlmdCgxLFMudGhlbWUpKTooUi53cml0ZV9zaGlmdCgxLDUpLFIud3JpdGVfc2hpZnQoMSwwKSk7dmFyIGs9Uy50aW50fHwwO2lmKGs+MD9rKj0zMjc2NzprPDAmJihrKj0zMjc2OCks''@;'; put 'put ''Ui53cml0ZV9zaGlmdCgyLGspLFMucmdiJiZudWxsPT1TLnRoZW1lKXt2YXIgRz1TLnJnYnx8IkZGRkZGRiI7Im51bWJlciI9PXR5cGVvZiBHJiYoRz0oIjAwMDAwMCIrRy50b1N0cmluZygxNikpLnNsaWNlKC02KSksUi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEcuc2xpY2UoMCwyKSwxNikp''@;'; put 'put ''LFIud3JpdGVfc2hpZnQoMSxwYXJzZUludChHLnNsaWNlKDIsNCksMTYpKSxSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoRy5zbGljZSg0LDYpLDE2KSksUi53cml0ZV9zaGlmdCgxLDI1NSl9ZWxzZSBSLndyaXRlX3NoaWZ0KDIsMCksUi53cml0ZV9zaGlmdCgxLDApLFIud3JpdGVfc2hpZnQo''@;'; put 'put ''MSwwKTtyZXR1cm4gUn1mdW5jdGlvbiBPdyhTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubCsrLHtmQm9sZDoxJlIsZkl0YWxpYzoyJlIsZlVuZGVybGluZTo0JlIsZlN0cmlrZW91dDo4JlIsZk91dGxpbmU6MTYmUixmU2hhZG93OjMyJlIsZkNvbmRlbnNlOjY0JlIsZkV4dGVu''@;'; put 'put ''ZDoxMjgmUn19ZnVuY3Rpb24gUHcoUyxSKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCk7c3dpdGNoKEcpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5ITUVUQUZJTEUi''@;'; put 'put ''fVtTLnJlYWRfc2hpZnQoNCldfHwiIn1pZihHPjQwMCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENsaXBib2FyZDogIitHLnRvU3RyaW5nKDE2KSk7cmV0dXJuIFMubC09NCxTLnJlYWRfc2hpZnQoMCwxPT1SPyJscHN0ciI6Imxwd3N0ciIpfXZhciBlMj0yLEpsPTMsSTA9MTIsTm49''@;'; put 'put ''ODEsRnc9WzgwLE5uXSxtND17MTp7bjoiQ29kZVBhZ2UiLHQ6ZTJ9LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDpKbH0sNTp7bjoiTGluZUNvdW50Iix0OkpsfSw2OntuOiJQYXJhZ3JhcGhDb3VudCIsdDpK''@;'; put 'put ''bH0sNzp7bjoiU2xpZGVDb3VudCIsdDpKbH0sODp7bjoiTm90ZUNvdW50Iix0OkpsfSw5OntuOiJIaWRkZW5Db3VudCIsdDpKbH0sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6Smx9LDExOntuOiJTY2FsZUNyb3AiLHQ6MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6NDA5NnxJMH0s''@;'; put 'put ''MTM6e246IlRpdGxlc09mUGFydHMiLHQ6NDEyNn0sMTQ6e246Ik1hbmFnZXIiLHQ6ODB9LDE1OntuOiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNoYXJhY3RlckNvdW50Iix0OkpsfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7bjoiSHlw''@;'; put 'put ''ZXJsaW5rc0NoYW5nZWQiLHQ6MTF9LDIzOntuOiJBcHBWZXJzaW9uIix0OkpsLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5OntuOiJW''@;'; put 'put ''ZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sZDU9ezE6e246IkNvZGVQYWdlIix0OmUyfSwyOntuOiJUaXRsZSIsdDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4MH0sNDp7''@;'; put 'put ''bjoiQXV0aG9yIix0OjgwfSw1OntuOiJLZXl3b3JkcyIsdDo4MH0sNjp7bjoiQ29tbWVudHMiLHQ6ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5OntuOiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntuOiJFZGl0VGltZSIsdDo2NH0sMTE6e246Ikxhc3RQ''@;'; put 'put ''cmludGVkIix0OjY0fSwxMjp7bjoiQ3JlYXRlZERhdGUiLHQ6NjR9LDEzOntuOiJNb2RpZmllZERhdGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6Smx9LDE1OntuOiJXb3JkQ291bnQiLHQ6Smx9LDE2OntuOiJDaGFyQ291bnQiLHQ6Smx9LDE3OntuOiJUaHVtYm5haWwiLHQ6NzF9LDE4''@;'; put 'put ''OntuOiJBcHBsaWNhdGlvbiIsdDo4MH0sMTk6e246IkRvY1NlY3VyaXR5Iix0OkpsfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0saDU9SWUobTQsIm4iKSx2Zj1JZShkNSwibiIpLEQ2PXsx''@;'; put 'put ''OiJVUyIsMjoiQ0EiLDM6IiIsNzoiUlUiLDIwOiJFRyIsMzA6IkdSIiwzMToiTkwiLDMyOiJCRSIsMzM6IkZSIiwzNDoiRVMiLDM2OiJIVSIsMzk6IklUIiw0MToiQ0giLDQzOiJBVCIsNDQ6IkdCIiw0NToiREsiLDQ2OiJTRSIsNDc6Ik5PIiw0ODoiUEwiLDQ5OiJERSIsNTI6Ik1YIiw1NToi''@;'; put 'put ''QlIiLDYxOiJBVSIsNjQ6Ik5aIiw2NjoiVEgiLDgxOiJKUCIsODI6IktSIiw4NDoiVk4iLDg2OiJDTiIsOTA6IlRSIiwxMDU6IkpTIiwyMTM6IkRaIiwyMTY6Ik1BIiwyMTg6IkxZIiwzNTE6IlBUIiwzNTQ6IklTIiwzNTg6IkZJIiw0MjA6IkNaIiw4ODY6IlRXIiw5NjE6IkxCIiw5NjI6IkpP''@;'; put 'put ''Iiw5NjM6IlNZIiw5NjQ6IklRIiw5NjU6IktXIiw5NjY6IlNBIiw5NzE6IkFFIiw5NzI6IklMIiw5NzQ6IlFBIiw5ODE6IklSIiw2NTUzNToiVVMifSxodj1bbnVsbCwic29saWQiLCJtZWRpdW1HcmF5IiwiZGFya0dyYXkiLCJsaWdodEdyYXkiLCJkYXJrSG9yaXpvbnRhbCIsImRhcmtWZXJ0''@;'; put 'put ''aWNhbCIsImRhcmtEb3duIiwiZGFya1VwIiwiZGFya0dyaWQiLCJkYXJrVHJlbGxpcyIsImxpZ2h0SG9yaXpvbnRhbCIsImxpZ2h0VmVydGljYWwiLCJsaWdodERvd24iLCJsaWdodFVwIiwibGlnaHRHcmlkIiwibGlnaHRUcmVsbGlzIiwiZ3JheTEyNSIsImdyYXkwNjI1Il07ZnVuY3Rpb24g''@;'; put 'put ''STYoUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKFIpe3JldHVybltSPj4xNiYyNTUsUj4+OCYyNTUsMjU1JlJdfSl9dmFyIHY0PUk2KFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3''@;'; put 'put ''Njk2MCwxNjcxMTkzNSw2NTUzNSw4Mzg4NjA4LDMyNzY4LDEyOCw4NDIxMzc2LDgzODg3MzYsMzI4OTYsMTI2MzIyNTYsODQyMTUwNCwxMDA2NjQzMSwxMDA0MDE2NiwxNjc3NzE2NCwxMzQzNDg3OSw2Njg0Nzc0LDE2NzQ0NTc2LDI2MzE2LDEzNDIxODIzLDEyOCwxNjcxMTkzNSwxNjc3Njk2''@;'; put 'put ''MCw2NTUzNSw4Mzg4NzM2LDgzODg2MDgsMzI4OTYsMjU1LDUyNDc5LDEzNDM0ODc5LDEzNDM0ODI4LDE2Nzc3MTEzLDEwMDc5NDg3LDE2NzUxMDUyLDEzNDA4NzY3LDE2NzY0MDU3LDMzNjg3MDMsMzM5NDc2NCwxMDA3OTIzMiwxNjc2MzkwNCwxNjc1MDg0OCwxNjczNzc5Miw2NzEwOTM3LDk4''@;'; put 'put ''Njg5NTAsMTMxNTgsMzM4MTYwNiwxMzA1NiwzMzU1MzkyLDEwMDQwMDY0LDEwMDQwMTY2LDMzNTU1NDUsMzM1NTQ0MywwLDE2Nzc3MjE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSxyMD1xdCh2NCksSHc9STYoWzEyNjMyMjU2LDk4Njg5NTAsODQyMTUwNCw2NzEwODg2LDMz''@;'; put 'put ''NTU0NDMsMTY3MTE2ODAsMzI3NjgsMTMzNjk0OTcsMTI4LDMzOTQ1NjAsMjYzNjcsMTAwMjcyMTIsMTAwNTMxNzEsMTI4LDMyNzY4LDgzODg2MDgsMzI4OTYsODM4ODczNiw4NDIxMzc2LDEzNjMxNDg4LDE0NTM5OTk0LDEzMDY4ODUwLDEzOTI0MzUyLDk5Njc0OTYsOTE3NTI2Nyw5MTk1MDA4''@;'; put 'put ''LDM2ODM1MzcsMTA2OTI1OCw4ODgwODk5LDc0OTQ2NCwyODkzNDc2LDExNzQ1NzMwLDM3NTAyMDEsMTU1NTk1MDMsMTgzNzk0MSwxMjA4NDM1OSw3NjMyMjUwLDczNjMzMjgsOTUxNDU4OCw4Mjg4NjE3LDMwMzY4MTQsMTExODQ4MTBdKSxNYz17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToi''@;'; put 'put ''I1ZBTFVFISIsMjM6IiNSRUYhIiwyOToiI05BTUU/IiwzNjoiI05VTSEiLDQyOiIjTi9BIiw0MzoiI0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9LFAzPWtlKE1jKSxiND17ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0''@;'; put 'put ''Lm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4V3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmludGxtYWNyb3NoZWV0IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleE1zIjoiVE9ETyIsImFw''@;'; put 'put ''cGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmNvcmUtcHJvcGVydGllcyt4bWwiOiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24v''@;'; put 'put ''dm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sIjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJjdXN0b214bWxwcm9wcyIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmN1c3RvbVByb3BlcnR5IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIjoicGl2b3RzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv''@;'; put 'put ''Y3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0K3htbCI6ImNoYXJ0b2JqcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRjb2xvcnN0''@;'; put 'put ''eWxlK3htbCI6ImNoYXJ0Y29sb3JzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydHN0eWxlK3htbCI6ImNoYXJ0c3R5bGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGV4K3htbCI6ImNoYXJ0ZXhzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNhbGNDaGFp''@;'; put 'put ''biI6ImNhbGNjaGFpbnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jYWxjQ2hhaW4reG1sIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1s''@;'; put 'put ''LnByaW50ZXJTZXR0aW5ncyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYXR0YWNoZWRUb29sYmFycyI6IlRPRE8i''@;'; put 'put ''LCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMiOiJjb25ucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbCI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVy''@;'; put 'put ''bmFsTGluayI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0TWV0YWRhdGEiOiJUT0RPIiwiYXBwbGljYXRpb24v''@;'; put 'put ''dm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXRNZXRhZGF0YSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2''@;'; put 'put ''b3RDYWNoZVJlY29yZHMiOiJwaXZvdHJlY29yZHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1v''@;'; put 'put ''ZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbCI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRz''@;'; put 'put ''aGVldG1sLnF1ZXJ5VGFibGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJU''@;'; put 'put ''T0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxv''@;'; put 'put ''Zyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZVNpbmdsZUNlbGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBs''@;'; put 'put ''aWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxl''@;'; put 'put ''IjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lK3htbCI6InRoZW1lcyIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZU92ZXJyaWRlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZUNhY2hlK3htbCI6IlRPRE8i''@;'; put 'put ''LCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3QiOiJ2YmEiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3RTaWduYXR1cmUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52b2xhdGlsZURlcGVuZGVuY2llcyI6IlRPRE8iLCJhcHBsaWNh''@;'; put 'put ''dGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC52b2xhdGlsZURlcGVuZGVuY2llcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbnRyb2xwcm9wZXJ0aWVzK3htbCI6ImN0cmxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5v''@;'; put 'put ''cGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5tb2RlbCtkYXRhIjoiZGF0YW1vZGVscyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdp''@;'; put 'put ''bmdzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRP''@;'; put 'put ''RE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9E''@;'; put 'put ''TyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCI6InJlbHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0IjoiVE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LGZ2PWZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IFM9e3dvcmtib29rczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiLHhsc206ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsc2I6ImFw''@;'; put 'put ''cGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4iLHhsYW06ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsdHg6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sIn0sc3Ryczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVkU3RyaW5ncyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGFyZWRT''@;'; put 'put ''dHJpbmdzIn0sY29tbWVudHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbW1lbnRzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbW1lbnRzIn0sc2hlZXRzOnt4bHN4OiJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC53b3Jrc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwud29ya3NoZWV0In0sY2hhcnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1l''@;'; put 'put ''bnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNoYXJ0c2hlZXQifSxkaWFsb2dzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5kaWFsb2dzaGVldCt4''@;'; put 'put ''bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5kaWFsb2dzaGVldCJ9LG1hY3Jvczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCJ9LHRhYmxlczp7eGxzeDoiYXBw''@;'; put 'put ''bGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUifSxwaXZvdHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RUYWJsZSJ9LHBpdm90Y2FjaGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hl''@;'; put 'put ''RGVmaW5pdGlvbit4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlRGVmaW5pdGlvbiJ9LHBpdm90cmVjb3Jkczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29y''@;'; put 'put ''ZHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMifSxjb25uczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIix4bHNiOiJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMifSxsaW5rczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayJ9''@;'; put 'put ''LHN0eWxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlcyJ9fTtyZXR1cm4gT2UoUykuZm9yRWFjaChmdW5jdGlvbihSKXtbInhs''@;'; put 'put ''c20iLCJ4bGFtIl0uZm9yRWFjaChmdW5jdGlvbihrKXtTW1JdW2tdfHwoU1tSXVtrXT1TW1JdLnhsc3gpfSl9KSxPZShTKS5mb3JFYWNoKGZ1bmN0aW9uKFIpe09lKFNbUl0pLmZvckVhY2goZnVuY3Rpb24oayl7YjRbU1tSXVtrXV09Un0pfSksU30oKSxwdj1mdW5jdGlvbiBBZShTKXtmb3Io''@;'; put 'put ''dmFyIFI9W10saz1PZShTKSxHPTA7RyE9PWsubGVuZ3RoOysrRyludWxsPT1SW1Nba1tHXV1dJiYoUltTW2tbR11dXT1bXSksUltTW2tbR11dXS5wdXNoKGtbR10pO3JldHVybiBSfShiNCk7WWkuQ1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29u''@;'; put 'put ''dGVudC10eXBlcyI7dmFyIG12PVByKCJUeXBlcyIsbnVsbCx7eG1sbnM6WWkuQ1QsInhtbG5zOnhzZCI6WWkueHNkLCJ4bWxuczp4c2kiOllpLnhzaX0pLFZ3PVtbInhtbCIsImFwcGxpY2F0aW9uL3htbCJdLFsiYmluIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5t''@;'; put 'put ''YWNyb0VuYWJsZWQubWFpbiJdLFsidm1sIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciXSxbImRhdGEiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSJdLFsiYm1wIiwiaW1h''@;'; put 'put ''Z2UvYm1wIl0sWyJwbmciLCJpbWFnZS9wbmciXSxbImdpZiIsImltYWdlL2dpZiJdLFsiZW1mIiwiaW1hZ2UveC1lbWYiXSxbIndtZiIsImltYWdlL3gtd21mIl0sWyJqcGciLCJpbWFnZS9qcGVnIl0sWyJqcGVnIiwiaW1hZ2UvanBlZyJdLFsidGlmIiwiaW1hZ2UvdGlmZiJdLFsidGlmZiIs''@;'; put 'put ''ImltYWdlL3RpZmYiXSxbInBkZiIsImFwcGxpY2F0aW9uL3BkZiJdLFsicmVscyIscHYucmVsc1swXV1dLm1hcChmdW5jdGlvbihTKXtyZXR1cm4gUHIoIkRlZmF1bHQiLG51bGwse0V4dGVuc2lvbjpTWzBdLENvbnRlbnRUeXBlOlNbMV19KX0pLEthPXtXQjoiaHR0cDovL3NjaGVtYXMub3Bl''@;'; put 'put ''bnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJo''@;'; put 'put ''dHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQ''@;'; put 'put ''QVRIOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExp''@;'; put 'put ''bmtQYXRoL3hsUGF0aE1pc3NpbmciLFhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50''@;'; put 'put ''LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b21YbWwiLENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIw''@;'; put 'put ''MDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07ZnVuY3Rpb24gVnIoUyl7dmFyIFI9Uy5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBTLnNsaWNlKDAsUisxKSsiX3JlbHMvIitTLnNsaWNlKFIrMSkrIi5yZWxzIn1mdW5jdGlvbiBiZihTLFIpe3ZhciBrPXsiIWlkIjp7fX07aWYoIVMpcmV0''@;'; put 'put ''dXJuIGs7Ii8iIT09Ui5jaGFyQXQoMCkmJihSPSIvIitSKTt2YXIgRz17fTtyZXR1cm4oUy5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBvZT12cihRKTtpZigiPFJlbGF0aW9uc2hpcCI9PT1vZVswXSl7dmFyIGdlPXt9O2dlLlR5cGU9b2UuVHlwZSxnZS5UYXJnZXQ9''@;'; put 'put ''b2UuVGFyZ2V0LGdlLklkPW9lLklkLGdlLlRhcmdldE1vZGU9b2UuVGFyZ2V0TW9kZTt2YXIgcGU9IkV4dGVybmFsIj09PW9lLlRhcmdldE1vZGU/b2UuVGFyZ2V0OmZuKG9lLlRhcmdldCxSKTtrW3BlXT1nZSxHW29lLklkXT1nZX19KSxrWyIhaWQiXT1HLGt9WWkuUkVMUz0iaHR0cDovL3Nj''@;'; put 'put ''aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzIjt2YXIgZjU9UHIoIlJlbGF0aW9uc2hpcHMiLG51bGwse3htbG5zOllpLlJFTFN9KTtmdW5jdGlvbiBraShTKXt2YXIgUj1bSWksZjVdO3JldHVybiBPZShTWyIhaWQiXSkuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihrKXtSW1IubGVuZ3RoXT1QcigiUmVsYXRpb25zaGlwIixudWxsLFNbIiFpZCJdW2tdKX0pLFIubGVuZ3RoPjImJihSW1IubGVuZ3RoXT0iPC9SZWxhdGlvbnNoaXBzPiIsUlsxXT1SWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxSLmpvaW4oIiIpfXZhciB5ND1bS2EuSExJTkssS2EuWFBBVEgs''@;'; put 'put ''S2EuWE1JU1NdO2Z1bmN0aW9uIEVyKFMsUixrLEcsUSxvZSl7aWYoUXx8KFE9e30pLFNbIiFpZCJdfHwoU1siIWlkIl09e30pLFI8MClmb3IoUj0xO1NbIiFpZCJdWyJySWQiK1JdOysrUik7aWYoUS5JZD0icklkIitSLFEuVHlwZT1HLFEuVGFyZ2V0PWssb2U/US5UYXJnZXRNb2RlPW9lOnk0''@;'; put 'put ''LmluZGV4T2YoUS5UeXBlKT4tMSYmKFEuVGFyZ2V0TW9kZT0iRXh0ZXJuYWwiKSxTWyIhaWQiXVtRLklkXSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZXdyaXRlIHJJZCAiK1IpO3JldHVybiBTWyIhaWQiXVtRLklkXT1RLFNbKCIvIitRLlRhcmdldCkucmVwbGFjZSgiLy8iLCIvIildPVEs''@;'; put 'put ''Un12YXIgbGw9ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiO2Z1bmN0aW9uIGV1KFMsUixrKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicrUysnIj5cbicsJyAgICA8cmRmOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vZG9j''@;'; put 'put ''cy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvJysoa3x8Im9kZiIpKyIjIitSKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX1mdW5jdGlvbiBuMihTLFIpe3JldHVyblsnICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJytTKyciPlxuJywn''@;'; put 'put ''ICAgIDxuczA6aGFzUGFydCB4bWxuczpuczA9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS9wa2cjIiByZGY6cmVzb3VyY2U9IicrUisnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigiIil9dmFyIFI2PWZ1bmN0aW9uKCl7dmFyIFM9''@;'; put 'put ''JzxvZmZpY2U6ZG9jdW1lbnQtbWV0YSB4bWxuczpvZmZpY2U9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIgeG1sbnM6bWV0YT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIgeG1sbnM6ZGM9Imh0dHA6Ly9w''@;'; put 'put ''dXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgb2ZmaWNlOnZlcnNpb249IjEuMiI+PG9mZmljZTptZXRhPjxtZXRhOmdlbmVyYXRvcj5TaGVldEpTICcrdy52ZXJzaW9uKyI8L21ldGE6Z2VuZXJhdG9yPjwvb2ZmaWNl''@;'; put 'put ''Om1ldGE+PC9vZmZpY2U6ZG9jdW1lbnQtbWV0YT4iO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTfX0oKSxSMD1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFz''@;'; put 'put ''dE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIsIlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMi''@;'; put 'put ''XSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRsZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVk''@;'; put 'put ''IiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXTtZaS5DT1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyIsS2EuQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3Bh''@;'; put 'put ''Y2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyI7dmFyIHA1PWZ1bmN0aW9uKCl7Zm9yKHZhciBTPW5ldyBBcnJheShSMC5sZW5ndGgpLFI9MDtSPFIwLmxlbmd0aDsrK1Ipe3ZhciBrPVIwW1JdLEc9Iig/OiIra1swXS5zbGljZSgwLGtbMF0uaW5kZXhP''@;'; put 'put ''ZigiOiIpKSsiOikiK2tbMF0uc2xpY2Uoa1swXS5pbmRleE9mKCI6IikrMSk7U1tSXT1uZXcgUmVnRXhwKCI8IitHKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrRysiPiIpfXJldHVybiBTfSgpO2Z1bmN0aW9uIHZ2KFMpe3ZhciBSPXt9O1M9Z28oUyk7Zm9yKHZhciBrPTA7azxSMC5sZW5ndGg7''@;'; put 'put ''KytrKXt2YXIgRz1SMFtrXSxRPVMubWF0Y2gocDVba10pO251bGwhPVEmJlEubGVuZ3RoPjAmJihSW0dbMV1dPVFyKFFbMV0pKSwiZGF0ZSI9PT1HWzJdJiZSW0dbMV1dJiYoUltHWzFdXT1IZShSW0dbMV1dKSl9cmV0dXJuIFJ9dmFyIGp3PVByKCJjcDpjb3JlUHJvcGVydGllcyIsbnVsbCx7''@;'; put 'put ''InhtbG5zOmNwIjpZaS5DT1JFX1BST1BTLCJ4bWxuczpkYyI6WWkuZGMsInhtbG5zOmRjdGVybXMiOllpLmRjdGVybXMsInhtbG5zOmRjbWl0eXBlIjpZaS5kY21pdHlwZSwieG1sbnM6eHNpIjpZaS54c2l9KTtmdW5jdGlvbiB5ZihTLFIsayxHLFEpe251bGwhPVFbU118fG51bGw9PVJ8fCIi''@;'; put 'put ''PT09Unx8KFFbU109UixSPUxyKFIpLEdbRy5sZW5ndGhdPWs/UHIoUyxSLGspOkhhKFMsUikpfXZhciByaD1bWyJBcHBsaWNhdGlvbiIsIkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJp''@;'; put 'put ''bmciXSxbIkRvY1NlY3VyaXR5IiwiRG9jU2VjdXJpdHkiLCJzdHJpbmciXSxbIk1hbmFnZXIiLCJNYW5hZ2VyIiwic3RyaW5nIl0sWyJIeXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NV''@;'; put 'put ''cFRvRGF0ZSIsIkxpbmtzVXBUb0RhdGUiLCJib29sIl0sWyJTY2FsZUNyb3AiLCJTY2FsZUNyb3AiLCJib29sIl0sWyJIZWFkaW5nUGFpcnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIF80KFMsUixrLEcp''@;'; put 'put ''e3ZhciBRPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgUylRPUpyKFMsRyk7ZWxzZSBmb3IodmFyIG9lPTA7b2U8Uy5sZW5ndGg7KytvZSlRPVEuY29uY2F0KFNbb2VdLm1hcChmdW5jdGlvbihOZSl7cmV0dXJue3Y6TmV9fSkpO3ZhciBnZT0ic3RyaW5nIj09dHlwZW9mIFI/SnIoUixHKS5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oTmUpe3JldHVybiBOZS52fSk6UixwZT0wLHllPTA7aWYoZ2UubGVuZ3RoPjApZm9yKHZhciBQZT0wO1BlIT09US5sZW5ndGg7UGUrPTIpe3N3aXRjaCh5ZT0rUVtQZSsxXS52LFFbUGVdLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2Ui''@;'; put 'put ''XHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRiIjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2MjdcdTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVk''@;'; put 'put ''OVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhlNHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxh''@;'; put 'put ''dm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjprLldvcmtzaGVldHM9eWUsay5TaGVldE5hbWVzPWdlLnNsaWNlKHBlLHBlK3llKTticmVhaztjYXNl''@;'; put 'put ''Ik5hbWVkIFJhbmdlcyI6Y2FzZSJSYW5nb3MgY29uIG5vbWJyZSI6Y2FzZSJcdTU0MGRcdTUyNGRcdTRlZDhcdTMwNGRcdTRlMDBcdTg5YTciOmNhc2UiQmVuYW5udGUgQmVyZWljaGUiOmNhc2UiTmF2bmdpdm5lIG9tclx4ZTVkZXIiOmsuTmFtZWRSYW5nZXM9eWUsay5EZWZpbmVkTmFtZXM9''@;'; put 'put ''Z2Uuc2xpY2UocGUscGUreWUpO2JyZWFrO2Nhc2UiQ2hhcnRzIjpjYXNlIkRpYWdyYW1tZSI6ay5DaGFydHNoZWV0cz15ZSxrLkNoYXJ0TmFtZXM9Z2Uuc2xpY2UocGUscGUreWUpfXBlKz15ZX19WWkuRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNl''@;'; put 'put ''RG9jdW1lbnQvMjAwNi9leHRlbmRlZC1wcm9wZXJ0aWVzIixLYS5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyI7dmFyIEw2PVByKCJQcm9wZXJ0aWVzIixudWxs''@;'; put 'put ''LHt4bWxuczpZaS5FWFRfUFJPUFMsInhtbG5zOnZ0IjpZaS52dH0pO1lpLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIixLYS5DVVNUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbS1wcm9wZXJ0aWVzIjt2YXIgTzY9LzxbXj5dKz5bXjxdKi9nLF92PVByKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczpZaS5DVVNUX1BST1BTLCJ4bWxuczp2dCI6WWkudnR9KTt2YXIgUDY9e1RpdGxl''@;'; put 'put ''OiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixSZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6''@;'; put 'put ''Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3JlYXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29tcGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1''@;'; put 'put ''cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFuZ3VhZ2U6Ikxhbmd1YWdlIn0sRjY9VmUoUDYpO2Z1bmN0aW9uIEYzKFMsUixrKXtTW1I9RjZbUl18fFJdPWt9ZnVuY3Rpb24gSDMoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgx''@;'; put 'put ''ZTMqKGsvMWU3Kk1hdGgucG93KDIsMzIpK1IvMWU3LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIGNkKFMsUixrKXt2YXIgRz1TLmwsUT1TLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihrKWZvcig7Uy5sLUcmMzspKytTLmw7cmV0''@;'; put 'put ''dXJuIFF9ZnVuY3Rpb24gZzUoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gayYmKFMubCs9NC0oRy5sZW5ndGgrMSYzKSYzKSxHfWZ1bmN0aW9uIHd2KFMsUixrKXtyZXR1cm4gMzE9PT1SP2c1KFMpOmNkKFMsMCxrKX1mdW5jdGlvbiBONihTLFIsayl7cmV0''@;'; put 'put ''dXJuIHd2KFMsUiwhMT09PWs/MDo0KX1mdW5jdGlvbiBTdihTKXt2YXIgUj1TLmwsaz13ZihTLE5uKTtyZXR1cm4gMD09U1tTLmxdJiYwPT1TW1MubCsxXSYmUy5sLVImMiYmKFMubCs9MiksW2ssd2YoUyxKbCldfWZ1bmN0aW9uIG01KFMsUil7Zm9yKHZhciBrPVMucmVhZF9zaGlmdCg0KSxH''@;'; put 'put ''PXt9LFE9MDtRIT1rOysrUSl7dmFyIG9lPVMucmVhZF9zaGlmdCg0KSxnZT1TLnJlYWRfc2hpZnQoNCk7R1tvZV09Uy5yZWFkX3NoaWZ0KGdlLDEyMDA9PT1SPyJ1dGYxNmxlIjoidXRmOCIpLnJlcGxhY2UoRSwiIikucmVwbGFjZShtLCIhIiksMTIwMD09PVImJmdlJTImJihTLmwrPTIpfXJl''@;'; put 'put ''dHVybiAzJlMubCYmKFMubD1TLmw+PjM8PDIpLEd9ZnVuY3Rpb24gcTAoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5zbGljZShTLmwsUy5sK1IpO3JldHVybiBTLmwrPVIsKDMmUik+MCYmKFMubCs9NC0oMyZSKSYzKSxrfWZ1bmN0aW9uIHdmKFMsUixrKXt2YXIgUSxHPVMucmVhZF9z''@;'; put 'put ''aGlmdCgyKSxvZT1rfHx7fTtpZihTLmwrPTIsUiE9PUkwJiZHIT09UiYmLTE9PT1Gdy5pbmRleE9mKFIpJiYoNDEyNiE9KDY1NTM0JlIpfHw0MTI2IT0oNjU1MzQmRykpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdHlwZSAiK1IrIiBzYXcgIitHKTtzd2l0Y2goUj09PUkwP0c6Uil7Y2Fz''@;'; put 'put ''ZSAyOnJldHVybiBRPVMucmVhZF9zaGlmdCgyLCJpIiksb2UucmF3fHwoUy5sKz0yKSxRO2Nhc2UgMzpyZXR1cm4gUy5yZWFkX3NoaWZ0KDQsImkiKTtjYXNlIDExOnJldHVybiAwIT09Uy5yZWFkX3NoaWZ0KDQpO2Nhc2UgMTk6cmV0dXJuIFMucmVhZF9zaGlmdCg0KTtjYXNlIDMwOnJldHVy''@;'; put 'put ''biBjZChTLDAsNCkucmVwbGFjZShFLCIiKTtjYXNlIDMxOnJldHVybiBnNShTKTtjYXNlIDY0OnJldHVybiBIMyhTKTtjYXNlIDY1OnJldHVybiBxMChTKTtjYXNlIDcxOnJldHVybiBmdW5jdGlvbiBNdihTKXt2YXIgUj17fTtyZXR1cm4gUi5TaXplPVMucmVhZF9zaGlmdCg0KSxTLmwrPVIu''@;'; put 'put ''U2l6ZSszLShSLlNpemUtMSklNCxSfShTKTtjYXNlIDgwOnJldHVybiBONihTLEcsIW9lLnJhdykucmVwbGFjZShFLCIiKTtjYXNlIDgxOnJldHVybiBmdW5jdGlvbiBDdihTLFIpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiVnRVbmFsaWduZWRTdHJpbmcgbXVzdCBoYXZlIHBvc2l0aXZlIGxl''@;'; put 'put ''bmd0aCIpO3JldHVybiB3dihTLFIsMCl9KFMsRykucmVwbGFjZShFLCIiKTtjYXNlIDQxMDg6cmV0dXJuIGZ1bmN0aW9uIFl3KFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7RzxSLzI7KytHKWsucHVzaChTdihTKSk7cmV0dXJuIGt9KFMpO2Nhc2UgNDEyNjpjYXNlIDQx''@;'; put 'put ''Mjc6cmV0dXJuIDQxMjc9PUc/ZnVuY3Rpb24gTjMoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdLEc9MDtHIT1SOysrRyl7dmFyIFE9Uy5sO2tbR109Uy5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpLnJlcGxhY2UoRSwiIiksUy5sLVEmMiYmKFMubCs9Mil9cmV0dXJuIGt9KFMpOmZ1''@;'; put 'put ''bmN0aW9uIFd3KFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7RyE9UjsrK0cpa1tHXT1TLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKS5yZXBsYWNlKEUsIiIpO3JldHVybiBrfShTKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVj''@;'; put 'put ''b2duaXplZCB0eXBlICIrUisiICIrRyl9fWZ1bmN0aW9uIENmKFMsUil7dmFyIGs9Ym4oNCksRz1ibig0KTtzd2l0Y2goay53cml0ZV9zaGlmdCg0LDgwPT1TPzMxOlMpLFMpe2Nhc2UgMzpHLndyaXRlX3NoaWZ0KC00LFIpO2JyZWFrO2Nhc2UgNTooRz1ibig4KSkud3JpdGVfc2hpZnQoOCxS''@;'; put 'put ''LCJmIik7YnJlYWs7Y2FzZSAxMTpHLndyaXRlX3NoaWZ0KDQsUj8xOjApO2JyZWFrO2Nhc2UgNjQ6Rz1mdW5jdGlvbiBoYyhTKXt2YXIgaz0oInN0cmluZyI9PXR5cGVvZiBTP25ldyBEYXRlKERhdGUucGFyc2UoUykpOlMpLmdldFRpbWUoKS8xZTMrMTE2NDQ0NzM2MDAsRz1rJU1hdGgucG93''@;'; put 'put ''KDIsMzIpLFE9KGstRykvTWF0aC5wb3coMiwzMik7USo9MWU3O3ZhciBvZT0oRyo9MWU3KS9NYXRoLnBvdygyLDMyKXwwO29lPjAmJihHJT1NYXRoLnBvdygyLDMyKSxRKz1vZSk7dmFyIGdlPWJuKDgpO3JldHVybiBnZS53cml0ZV9zaGlmdCg0LEcpLGdlLndyaXRlX3NoaWZ0KDQsUSksZ2V9''@;'; put 'put ''KFIpO2JyZWFrO2Nhc2UgMzE6Y2FzZSA4MDpmb3IoKEc9Ym4oNCsyKihSLmxlbmd0aCsxKSsoUi5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCxSLmxlbmd0aCsxKSxHLndyaXRlX3NoaWZ0KDAsUiwiZGJjcyIpO0cubCE9Ry5sZW5ndGg7KUcud3JpdGVfc2hpZnQoMSwwKTticmVhaztk''@;'; put 'put ''ZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrUysiICIrUil9cmV0dXJuIGooW2ssR10pfWZ1bmN0aW9uIGloKFMsUil7dmFyIGs9Uy5sLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDQpLG9lPVtdLGdlPTAscGU9''@;'; put 'put ''MCx5ZT0tMSxQZT17fTtmb3IoZ2U9MDtnZSE9UTsrK2dlKXt2YXIgTmU9Uy5yZWFkX3NoaWZ0KDQpLFllPVMucmVhZF9zaGlmdCg0KTtvZVtnZV09W05lLFllK2tdfW9lLnNvcnQoZnVuY3Rpb24oa3QsT3Qpe3JldHVybiBrdFsxXS1PdFsxXX0pO3ZhciBldD17fTtmb3IoZ2U9MDtnZSE9UTsr''@;'; put 'put ''K2dlKXtpZihTLmwhPT1vZVtnZV1bMV0pe3ZhciBjdD0hMDtpZihnZT4wJiZSKXN3aXRjaChSW29lW2dlLTFdWzBdXS50KXtjYXNlIDI6Uy5sKzI9PT1vZVtnZV1bMV0mJihTLmwrPTIsY3Q9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OlMubDw9b2VbZ2VdWzFdJiYoUy5sPW9lW2dlXVsx''@;'; put 'put ''XSxjdD0hMSl9aWYoKCFSfHwwPT1nZSkmJlMubDw9b2VbZ2VdWzFdJiYoY3Q9ITEsUy5sPW9lW2dlXVsxXSksY3QpdGhyb3cgbmV3IEVycm9yKCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzICIrb2VbZ2VdWzFdKyIgYXQgIitTLmwrIiA6IitnZSl9aWYoUil7dmFyIEV0PVJbb2VbZ2Vd''@;'; put 'put ''WzBdXTtpZihldFtFdC5uXT13ZihTLEV0LnQse3JhdzohMH0pLCJ2ZXJzaW9uIj09PUV0LnAmJihldFtFdC5uXT1TdHJpbmcoZXRbRXQubl0+PjE2KSsiLiIrKCIwMDAwIitTdHJpbmcoNjU1MzUmZXRbRXQubl0pKS5zbGljZSgtNCkpLCJDb2RlUGFnZSI9PUV0Lm4pc3dpdGNoKGV0W0V0Lm5d''@;'; put 'put ''KXtjYXNlIDA6ZXRbRXQubl09MTI1MjtjYXNlIDg3NDpjYXNlIDkzMjpjYXNlIDkzNjpjYXNlIDk0OTpjYXNlIDk1MDpjYXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2FzZSAxMjU4OmNhc2UgMWU0OmNhc2UgMTIw''@;'; put 'put ''MDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVlMzpjYXNlLTUzNjpjYXNlIDY1MDAxOmNhc2UtNTM1OlUocGU9ZXRbRXQubl0+Pj4wJjY1NTM1KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ29kZVBhZ2U6ICIrZXRbRXQubl0pfX1lbHNlIGlmKDE9PT1v''@;'; put 'put ''ZVtnZV1bMF0pe2lmKHBlPWV0LkNvZGVQYWdlPXdmKFMsZTIpLFUocGUpLC0xIT09eWUpe3ZhciBhdD1TLmw7Uy5sPW9lW3llXVsxXSxQZT1tNShTLHBlKSxTLmw9YXR9fWVsc2UgaWYoMD09PW9lW2dlXVswXSl7aWYoMD09PXBlKXt5ZT1nZSxTLmw9b2VbZ2UrMV1bMV07Y29udGludWV9UGU9''@;'; put 'put ''bTUoUyxwZSl9ZWxzZXt2YXIganQsYnQ9UGVbb2VbZ2VdWzBdXTtzd2l0Y2goU1tTLmxdKXtjYXNlIDY1OlMubCs9NCxqdD1xMChTKTticmVhaztjYXNlIDMwOmNhc2UgMzE6Uy5sKz00LGp0PU42KFMsU1tTLmwtNF0pLnJlcGxhY2UoL1x1MDAwMCskLywiIik7YnJlYWs7Y2FzZSAzOlMubCs9''@;'; put 'put ''NCxqdD1TLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UgMTk6Uy5sKz00LGp0PVMucmVhZF9zaGlmdCg0KTticmVhaztjYXNlIDU6Uy5sKz00LGp0PVMucmVhZF9zaGlmdCg4LCJmIik7YnJlYWs7Y2FzZSAxMTpTLmwrPTQsanQ9dW8oUyw0KTticmVhaztjYXNlIDY0OlMubCs9NCxqdD1I''@;'; put 'put ''ZShIMyhTKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucGFyc2VkIHZhbHVlOiAiK1NbUy5sXSl9ZXRbYnRdPWp0fX1yZXR1cm4gUy5sPWsrRyxldH12YXIgVjY9WyJDb2RlUGFnZSIsIlRodW1ibmFpbCIsIl9QSURfTElOS0JBU0UiLCJfUElEX0hMSU5LUyIsIlN5c3RlbUlk''@;'; put 'put ''ZW50aWZpZXIiLCJGTVRJRCJdLmNvbmNhdChbIldvcmtzaGVldHMiLCJTaGVldE5hbWVzIiwiTmFtZWRSYW5nZXMiLCJEZWZpbmVkTmFtZXMiLCJDaGFydHNoZWV0cyIsIkNoYXJ0TmFtZXMiXSk7ZnVuY3Rpb24gSGMoUyl7c3dpdGNoKHR5cGVvZiBTKXtjYXNlImJvb2xlYW4iOnJldHVybiAx''@;'; put 'put ''MTtjYXNlIm51bWJlciI6cmV0dXJuKDB8Uyk9PVM/Mzo1O2Nhc2Uic3RyaW5nIjpyZXR1cm4gMzE7Y2FzZSJvYmplY3QiOmlmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiA2NH1yZXR1cm4tMX1mdW5jdGlvbiBCNihTLFIsayl7dmFyIEc9Ym4oOCksUT1bXSxvZT1bXSxnZT04LHBlPTAseWU9''@;'; put 'put ''Ym4oOCksUGU9Ym4oOCk7aWYoeWUud3JpdGVfc2hpZnQoNCwyKSx5ZS53cml0ZV9zaGlmdCg0LDEyMDApLFBlLndyaXRlX3NoaWZ0KDQsMSksb2UucHVzaCh5ZSksUS5wdXNoKFBlKSxnZSs9OCt5ZS5sZW5ndGgsIVIpeyhQZT1ibig4KSkud3JpdGVfc2hpZnQoNCwwKSxRLnVuc2hpZnQoUGUp''@;'; put 'put ''O3ZhciBOZT1bYm4oNCldO2ZvcihOZVswXS53cml0ZV9zaGlmdCg0LFMubGVuZ3RoKSxwZT0wO3BlPFMubGVuZ3RoOysrcGUpe3ZhciBZZT1TW3BlXVswXTtmb3IoKHllPWJuKDgrMiooWWUubGVuZ3RoKzEpKyhZZS5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCxwZSsyKSx5ZS53cml0''@;'; put 'put ''ZV9zaGlmdCg0LFllLmxlbmd0aCsxKSx5ZS53cml0ZV9zaGlmdCgwLFllLCJkYmNzIik7eWUubCE9eWUubGVuZ3RoOyl5ZS53cml0ZV9zaGlmdCgxLDApO05lLnB1c2goeWUpfXllPWooTmUpLG9lLnVuc2hpZnQoeWUpLGdlKz04K3llLmxlbmd0aH1mb3IocGU9MDtwZTxTLmxlbmd0aDsrK3Bl''@;'; put 'put ''KWlmKCghUnx8UltTW3BlXVswXV0pJiYhKFY2LmluZGV4T2YoU1twZV1bMF0pPi0xKSYmbnVsbCE9U1twZV1bMV0pe3ZhciBldD1TW3BlXVsxXSxjdD0wO2lmKFIpe3ZhciBFdD1rW2N0PStSW1NbcGVdWzBdXV07aWYoInZlcnNpb24iPT1FdC5wJiYic3RyaW5nIj09dHlwZW9mIGV0KXt2YXIg''@;'; put 'put ''YXQ9ZXQuc3BsaXQoIi4iKTtldD0oK2F0WzBdPDwxNikrKCthdFsxXXx8MCl9eWU9Q2YoRXQudCxldCl9ZWxzZXt2YXIgYnQ9SGMoZXQpOy0xPT1idCYmKGJ0PTMxLGV0PVN0cmluZyhldCkpLHllPUNmKGJ0LGV0KX1vZS5wdXNoKHllKSwoUGU9Ym4oOCkpLndyaXRlX3NoaWZ0KDQsUj9jdDoy''@;'; put 'put ''K3BlKSxRLnB1c2goUGUpLGdlKz04K3llLmxlbmd0aH12YXIganQ9OCoob2UubGVuZ3RoKzEpO2ZvcihwZT0wO3BlPG9lLmxlbmd0aDsrK3BlKVFbcGVdLndyaXRlX3NoaWZ0KDQsanQpLGp0Kz1vZVtwZV0ubGVuZ3RoO3JldHVybiBHLndyaXRlX3NoaWZ0KDQsZ2UpLEcud3JpdGVfc2hpZnQo''@;'; put 'put ''NCxvZS5sZW5ndGgpLGooW0ddLmNvbmNhdChRKS5jb25jYXQob2UpKX1mdW5jdGlvbiBqNihTLFIsayl7dmFyIEc9Uy5jb250ZW50O2lmKCFHKXJldHVybnt9O21uKEcsMCk7dmFyIFEsb2UsZ2UscGUseWU9MDtHLmNoaygiZmVmZiIsIkJ5dGUgT3JkZXI6ICIpLEcucmVhZF9zaGlmdCgyKTt2''@;'; put 'put ''YXIgUGU9Ry5yZWFkX3NoaWZ0KDQpLE5lPUcucmVhZF9zaGlmdCgxNik7aWYoTmUhPT12ZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lEJiZOZSE9PWspdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitOZSk7aWYoMSE9PShRPUcucmVhZF9zaGlmdCg0KSkmJjIhPT1R''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICNTZXRzOiAiK1EpO2lmKG9lPUcucmVhZF9zaGlmdCgxNikscGU9Ry5yZWFkX3NoaWZ0KDQpLDE9PT1RJiZwZSE9PUcubCl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaDogIitwZSsiICE9PSAiK0cubCk7Mj09PVEmJihnZT1H''@;'; put 'put ''LnJlYWRfc2hpZnQoMTYpLHllPUcucmVhZF9zaGlmdCg0KSk7dmFyIEV0LFllPWloKEcsUiksZXQ9e1N5c3RlbUlkZW50aWZpZXI6UGV9O2Zvcih2YXIgY3QgaW4gWWUpZXRbY3RdPVllW2N0XTtpZihldC5GTVRJRD1vZSwxPT09USlyZXR1cm4gZXQ7aWYoeWUtRy5sPT0yJiYoRy5sKz0yKSxH''@;'; put 'put ''LmwhPT15ZSl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaCAyOiAiK0cubCsiICE9PSAiK3llKTt0cnl7RXQ9aWgoRyxudWxsKX1jYXRjaHt9Zm9yKGN0IGluIEV0KWV0W2N0XT1FdFtjdF07cmV0dXJuIGV0LkZNVElEPVtvZSxnZV0sZXR9ZnVuY3Rpb24gemkoUyxSLGssRyxRLG9l''@;'; put 'put ''KXt2YXIgZ2U9Ym4oUT82ODo0OCkscGU9W2dlXTtnZS53cml0ZV9zaGlmdCgyLDY1NTM0KSxnZS53cml0ZV9zaGlmdCgyLDApLGdlLndyaXRlX3NoaWZ0KDQsODQyNDEyNTk5KSxnZS53cml0ZV9zaGlmdCgxNix2ZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lELCJoZXgiKSxnZS53cml0ZV9z''@;'; put 'put ''aGlmdCg0LFE/MjoxKSxnZS53cml0ZV9zaGlmdCgxNixSLCJoZXgiKSxnZS53cml0ZV9zaGlmdCg0LFE/Njg6NDgpO3ZhciB5ZT1CNihTLGssRyk7aWYocGUucHVzaCh5ZSksUSl7dmFyIFBlPUI2KFEsbnVsbCxudWxsKTtnZS53cml0ZV9zaGlmdCgxNixvZSwiaGV4IiksZ2Uud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCw2OCt5ZS5sZW5ndGgpLHBlLnB1c2goUGUpfXJldHVybiBqKHBlKX1mdW5jdGlvbiByMihTLFIpe3JldHVybiBTLnJlYWRfc2hpZnQoUiksbnVsbH1mdW5jdGlvbiB1byhTLFIpe3JldHVybiAxPT09Uy5yZWFkX3NoaWZ0KFIpfWZ1bmN0aW9uIHR1KFMsUil7cmV0dXJuIFJ8fChSPWJu''@;'; put 'put ''KDIpKSxSLndyaXRlX3NoaWZ0KDIsKyEhUyksUn1mdW5jdGlvbiBFYyhTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIsInUiKX1mdW5jdGlvbiBhMChTLFIpe3JldHVybiBSfHwoUj1ibigyKSksUi53cml0ZV9zaGlmdCgyLFMpLFJ9ZnVuY3Rpb24gdzQoUyxSKXtyZXR1cm4gZnVuY3Rpb24geHYo''@;'; put 'put ''UyxSLGspe2Zvcih2YXIgRz1bXSxRPVMubCtSO1MubDxROylHLnB1c2goayhTLFEtUy5sKSk7aWYoUSE9PVMubCl0aHJvdyBuZXcgRXJyb3IoIlNsdXJwIGVycm9yIik7cmV0dXJuIEd9KFMsUixFYyl9ZnVuY3Rpb24gS2koUyxSLGspe3JldHVybiBrfHwoaz1ibigyKSksay53cml0ZV9zaGlm''@;'; put 'put ''dCgxLCJlIj09Uj8rUzorISFTKSxrLndyaXRlX3NoaWZ0KDEsImUiPT1SPzE6MCksa31mdW5jdGlvbiBVYShTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJmsuYmlmZj49MTI/MjoxKSxRPSJzYmNzLWNvbnQiLG9lPVA7ayYmay5iaWZmPj04JiYoUD0xMjAwKSxrJiY4IT1rLmJpZmY/MTI9''@;'; put 'put ''PWsuYmlmZiYmKFE9IndzdHIiKTpTLnJlYWRfc2hpZnQoMSkmJihRPSJkYmNzLWNvbnQiKSxrLmJpZmY+PTImJmsuYmlmZjw9NSYmKFE9ImNwc3RyIik7dmFyIHBlPUc/Uy5yZWFkX3NoaWZ0KEcsUSk6IiI7cmV0dXJuIFA9b2UscGV9ZnVuY3Rpb24gZmMoUyl7dmFyIFI9UDtQPTEyMDA7dmFy''@;'; put 'put ''IHllLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDEpLFE9NCZHLG9lPTgmRyxnZT0xKygxJkcpLHBlPTAsUGU9e307b2UmJihwZT1TLnJlYWRfc2hpZnQoMikpLFEmJih5ZT1TLnJlYWRfc2hpZnQoNCkpO3ZhciBZZT0wPT09az8iIjpTLnJlYWRfc2hpZnQoaywyPT1nZT8iZGJj''@;'; put 'put ''cy1jb250Ijoic2Jjcy1jb250Iik7aWYob2UpZm9yKFBlLl9SPVtdO3BlLS0gPjA7KVBlLl9SLnB1c2goe2lkeDpTLnJlYWRfc2hpZnQoMiksaWZudDpTLnJlYWRfc2hpZnQoMil9KTtyZXR1cm4gUSYmKFMubCs9eWUpLFBlLnQ9WWUsb2V8fChQZS5yPSI8dD4iK1BlLnQrIjwvdD4iKSxQPVIs''@;'; put 'put ''UGV9ZnVuY3Rpb24gTmMoUyxSKXt2YXIgaz1TLlImJlMuUi5sZW5ndGh8fFMucjtTLnImJihTLlI9dzUoUy5yKSk7dmFyIEc9IiIsUT0wO2s/Uy5SLmZvckVhY2goZnVuY3Rpb24oRXQpe1ErKyxHKz1FdC52fHwiIn0pOihHPVMudHx8IiIsUT0xKTt2YXIgb2U9Ym4oMysoUT4xPzI6MCkpO29l''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsRy5sZW5ndGgpLG9lLndyaXRlX3NoaWZ0KDEsMXwoUT4xPzg6MCkpLFE+MSYmb2Uud3JpdGVfc2hpZnQoMixRKTt2YXIgZ2U9Ym4oMipHLmxlbmd0aCk7Z2Uud3JpdGVfc2hpZnQoMipHLmxlbmd0aCxHLCJ1dGYxNmxlIik7dmFyIHBlPVtvZSxnZV07aWYoayl7dmFy''@;'; put 'put ''IHllPWJuKDQqUy5SLmxlbmd0aCksUGU9MDtwZS5wdXNoKHllKTtmb3IodmFyIE5lPTA7TmU8Uy5SLmxlbmd0aDsrK05lKXt2YXIgWWU9Uy5SW05lXTt5ZS53cml0ZV9zaGlmdCgyLFBlKSxQZSs9KFllLnZ8fCIiKS5sZW5ndGg7dmFyIGV0PVllLnM/bDAoUi5jZWxsWGZzLFIuY2VsbFN0eWxl''@;'; put 'put ''WGZzLHt0OiJuIix2OjAsczpZZS5zfSxSKTowLGN0PVIuY2VsbFhmc1tldF0uZm9udElkO3llLndyaXRlX3NoaWZ0KDIsY3Q8ND9jdDpjdCsxKX19cmV0dXJuIGoocGUpfWZ1bmN0aW9uIHJjKFMsUixrKXtpZihrKXtpZihrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1cm4gUy5yZWFkX3NoaWZ0''@;'; put 'put ''KFIsImNwc3RyIik7aWYoay5iaWZmPj0xMilyZXR1cm4gUy5yZWFkX3NoaWZ0KFIsImRiY3MtY29udCIpfXZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5yZWFkX3NoaWZ0KFIsMD09PVE/InNiY3MtY29udCI6ImRiY3MtY29udCIpfWZ1bmN0aW9uIG51KFMsUixrKXt2YXIgRz1TLnJl''@;'; put 'put ''YWRfc2hpZnQoayYmMj09ay5iaWZmPzE6Mik7cmV0dXJuIDA9PT1HPyhTLmwrKywiIik6cmMoUyxHLGspfWZ1bmN0aW9uIFgwKFMsUixrKXtpZihrLmJpZmY+NSlyZXR1cm4gbnUoUywwLGspO3ZhciBHPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PUc/KFMubCsrLCIiKTpTLnJlYWRfc2hp''@;'; put 'put ''ZnQoRyxrLmJpZmY8PTR8fCFTLmxlbnM/ImNwc3RyIjoic2Jjcy1jb250Iil9ZnVuY3Rpb24gY2woUyxSLGspe3JldHVybiBrfHwoaz1ibigzKzIqUy5sZW5ndGgpKSxrLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpLGsud3JpdGVfc2hpZnQoMSwxKSxrLndyaXRlX3NoaWZ0KDMxLFMsInV0ZjE2''@;'; put 'put ''bGUiKSxrfWZ1bmN0aW9uIEM0KFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gUj4wP1MucmVhZF9zaGlmdChSLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKToiIn1mdW5jdGlvbiBvMChTLFIpe1J8fChSPWJuKDYrMipTLmxlbmd0aCkpLFIud3JpdGVfc2hpZnQoNCwxK1MubGVuZ3Ro''@;'; put 'put ''KTtmb3IodmFyIGs9MDtrPFMubGVuZ3RoOysraylSLndyaXRlX3NoaWZ0KDIsUy5jaGFyQ29kZUF0KGspKTtyZXR1cm4gUi53cml0ZV9zaGlmdCgyLDApLFJ9ZnVuY3Rpb24gUzQoUyl7dmFyIFI9Ym4oNTEyKSxrPTAsRz1TLlRhcmdldDsiZmlsZTovLyI9PUcuc2xpY2UoMCw3KSYmKEc9Ry5z''@;'; put 'put ''bGljZSg3KSk7dmFyIFE9Ry5pbmRleE9mKCIjIiksb2U9UT4tMT8zMToyMztzd2l0Y2goRy5jaGFyQXQoMCkpe2Nhc2UiIyI6b2U9Mjg7YnJlYWs7Y2FzZSIuIjpvZSY9LTN9Ui53cml0ZV9zaGlmdCg0LDIpLFIud3JpdGVfc2hpZnQoNCxvZSk7dmFyIGdlPVs4LDY4MTU4MjcsNjYxOTIzNyw0''@;'; put 'put ''ODQ5NzgwLDgzXTtmb3Ioaz0wO2s8Z2UubGVuZ3RoOysraylSLndyaXRlX3NoaWZ0KDQsZ2Vba10pO2lmKDI4PT1vZSlvMChHPUcuc2xpY2UoMSksUik7ZWxzZSBpZigyJm9lKXtmb3IoZ2U9ImUwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgi''@;'; put 'put ''ICIpLGs9MDtrPGdlLmxlbmd0aDsrK2spUi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KGdlW2tdLDE2KSk7dmFyIHBlPVE+LTE/Ry5zbGljZSgwLFEpOkc7Zm9yKFIud3JpdGVfc2hpZnQoNCwyKihwZS5sZW5ndGgrMSkpLGs9MDtrPHBlLmxlbmd0aDsrK2spUi53cml0ZV9zaGlmdCgyLHBlLmNo''@;'; put 'put ''YXJDb2RlQXQoaykpO1Iud3JpdGVfc2hpZnQoMiwwKSw4Jm9lJiZvMChRPi0xP0cuc2xpY2UoUSsxKToiIixSKX1lbHNle2ZvcihnZT0iMDMgMDMgMDAgMDAgMDAgMDAgMDAgMDAgYzAgMDAgMDAgMDAgMDAgMDAgMDAgNDYiLnNwbGl0KCIgIiksaz0wO2s8Z2UubGVuZ3RoOysraylSLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEscGFyc2VJbnQoZ2Vba10sMTYpKTtmb3IodmFyIHllPTA7Ii4uLyI9PUcuc2xpY2UoMyp5ZSwzKnllKzMpfHwiLi5cXCI9PUcuc2xpY2UoMyp5ZSwzKnllKzMpOykrK3llO2ZvcihSLndyaXRlX3NoaWZ0KDIseWUpLFIud3JpdGVfc2hpZnQoNCxHLmxlbmd0aC0zKnllKzEpLGs9''@;'; put 'put ''MDtrPEcubGVuZ3RoLTMqeWU7KytrKVIud3JpdGVfc2hpZnQoMSwyNTUmRy5jaGFyQ29kZUF0KGsrMyp5ZSkpO2ZvcihSLndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlmdCgyLDY1NTM1KSxSLndyaXRlX3NoaWZ0KDIsNTcwMDUpLGs9MDtrPDY7KytrKVIud3JpdGVfc2hpZnQoNCwwKX1y''@;'; put 'put ''ZXR1cm4gUi5zbGljZSgwLFIubCl9ZnVuY3Rpb24gTWYoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gdWQoUyxSKXt2YXIgaz1NZihTKTtyZXR1cm4ga1szXT0wLGt9ZnVuY3Rpb24gdzAo''@;'; put 'put ''Uyl7cmV0dXJue3I6Uy5yZWFkX3NoaWZ0KDIpLGM6Uy5yZWFkX3NoaWZ0KDIpLGl4ZmU6Uy5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBhMihTLFIsayxHKXtyZXR1cm4gR3x8KEc9Ym4oNikpLEcud3JpdGVfc2hpZnQoMixTKSxHLndyaXRlX3NoaWZ0KDIsUiksRy53cml0ZV9zaGlmdCgyLGt8''@;'; put 'put ''fDApLEd9ZnVuY3Rpb24geGYoUyxSLGspe3ZhciBHPWsuYmlmZj44PzQ6MjtyZXR1cm5bUy5yZWFkX3NoaWZ0KEcpLFMucmVhZF9zaGlmdChHLCJpIiksUy5yZWFkX3NoaWZ0KEcsImkiKV19ZnVuY3Rpb24gd28oUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgyKSxJMShTKV19ZnVuY3Rpb24gczIo''@;'; put 'put ''Uyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOlMucmVhZF9zaGlmdCgyKSxyOlJ9LGU6e2M6Uy5yZWFkX3NoaWZ0KDIpLHI6a319fWZ1bmN0aW9uIHZ1KFMsUil7cmV0dXJuIFJ8fChSPWJuKDgpKSxSLndyaXRlX3NoaWZ0KDIsUy5zLnIpLFIu''@;'; put 'put ''d3JpdGVfc2hpZnQoMixTLmUuciksUi53cml0ZV9zaGlmdCgyLFMucy5jKSxSLndyaXRlX3NoaWZ0KDIsUy5lLmMpLFJ9ZnVuY3Rpb24gTTQoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOlMucmVhZF9zaGlmdCgxKSxyOlJ9LGU6e2M6Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDEpLHI6a319fXZhciBnYz1NNDtmdW5jdGlvbiBiNShTKXtTLmwrPTQ7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTEyLFtrLFIsR119ZnVuY3Rpb24gcnUoUyl7Uy5sKz0yLFMubCs9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpfXZhciBFZj17MDpydSw0OnJ1LDU6cnUsNjpydSw3OmZ1bmN0aW9uIEh1KFMpe3JldHVybiBTLmwrPTQsUy5jZj1TLnJlYWRfc2hpZnQoMikse319LDg6cnUsOTpydSwxMDpydSwxMTpydSwxMjpydSwxMzpmdW5jdGlvbiBGdShTKXt2YXIgUj17fTtyZXR1cm4gUy5sKz00LFMu''@;'; put 'put ''bCs9MTYsUi5mU2hhcmVkTm90ZT1TLnJlYWRfc2hpZnQoMiksUy5sKz00LFJ9LDE0OnJ1LDE1OnJ1LDE2OnJ1LDE3OnJ1LDE4OnJ1LDE5OnJ1LDIwOnJ1LDIxOmI1fTtmdW5jdGlvbiBWYyhTLFIpe3ZhciBrPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKGsuQklGRlZlcj1TLnJlYWRfc2hpZnQo''@;'; put 'put ''MiksKFItPTIpPj0yJiYoay5kdD1TLnJlYWRfc2hpZnQoMiksUy5sLT0yKSxrLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZihSPjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVk''@;'; put 'put ''IEJJRkYgVmVyICIray5CSUZGVmVyKX1yZXR1cm4gUy5yZWFkX3NoaWZ0KFIpLGt9ZnVuY3Rpb24geDQoUyxSLGspe3ZhciBHPTE1MzYsUT0xNjtzd2l0Y2goay5ib29rVHlwZSl7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmJyZWFrO2Nhc2UiYmlmZjUiOkc9MTI4MCxRPTg7YnJlYWs7Y2FzZSJi''@;'; put 'put ''aWZmNCI6Rz00LFE9NjticmVhaztjYXNlImJpZmYzIjpHPTMsUT02O2JyZWFrO2Nhc2UiYmlmZjIiOkc9MixRPTQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIEJJRkYgdmVyc2lvbiIpfXZhciBvZT1ibihRKTtyZXR1cm4gb2Uud3JpdGVfc2hpZnQoMixHKSxv''@;'; put 'put ''ZS53cml0ZV9zaGlmdCgyLFIpLFE+NCYmb2Uud3JpdGVfc2hpZnQoMiwyOTI4MiksUT42JiZvZS53cml0ZV9zaGlmdCgyLDE5OTcpLFE+OCYmKG9lLndyaXRlX3NoaWZ0KDIsNDkxNjEpLG9lLndyaXRlX3NoaWZ0KDIsMSksb2Uud3JpdGVfc2hpZnQoMiwxNzk4KSxvZS53cml0ZV9zaGlmdCgy''@;'; put 'put ''LDApKSxvZX1mdW5jdGlvbiBsMihTLFIpe3ZhciBrPSFSfHxSLmJpZmY+PTg/MjoxLEc9Ym4oOCtrKlMubmFtZS5sZW5ndGgpO0cud3JpdGVfc2hpZnQoNCxTLnBvcyksRy53cml0ZV9zaGlmdCgxLFMuaHN8fDApLEcud3JpdGVfc2hpZnQoMSxTLmR0KSxHLndyaXRlX3NoaWZ0KDEsUy5uYW1l''@;'; put 'put ''Lmxlbmd0aCksUi5iaWZmPj04JiZHLndyaXRlX3NoaWZ0KDEsMSksRy53cml0ZV9zaGlmdChrKlMubmFtZS5sZW5ndGgsUy5uYW1lLFIuYmlmZjw4PyJzYmNzIjoidXRmMTZsZSIpO3ZhciBRPUcuc2xpY2UoMCxHLmwpO3JldHVybiBRLmw9Ry5sLFF9ZnVuY3Rpb24gaWkoUyl7cmV0dXJuIFMu''@;'; put 'put ''cmVhZF9zaGlmdCg0KSxtdShTKX1mdW5jdGlvbiBTbyhTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLG4wKFMpfWZ1bmN0aW9uIE51KFMsUixrKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLFhCKFMsMCxrKX1mdW5jdGlvbiBjMihTLFIsayl7dmFyIEc9MDtrJiYyPT1rLmJpZmZ8fChHPVMucmVh''@;'; put 'put ''ZF9zaGlmdCgyKSk7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBrJiYyPT1rLmJpZmYmJihHPTEtKFE+PjE1KSxRJj0zMjc2NyksW3tVbnN5bmNlZDoxJkcsRHlaZXJvOigyJkcpPj4xLEV4QXNjOig0JkcpPj4yLEV4RHNjOig4JkcpPj4zfSxRXX1mdW5jdGlvbiBhVihTLFIsayxHKXt2''@;'; put 'put ''YXIgUT1rJiY1PT1rLmJpZmY7R3x8KEc9Ym4oUT8zK1IubGVuZ3RoOjUrMipSLmxlbmd0aCkpLEcud3JpdGVfc2hpZnQoMixTKSxHLndyaXRlX3NoaWZ0KFE/MToyLFIubGVuZ3RoKSxRfHxHLndyaXRlX3NoaWZ0KDEsMSksRy53cml0ZV9zaGlmdCgoUT8xOjIpKlIubGVuZ3RoLFIsUT8ic2Jj''@;'; put 'put ''cyI6InV0ZjE2bGUiKTt2YXIgb2U9Ry5sZW5ndGg+Ry5sP0cuc2xpY2UoMCxHLmwpOkc7cmV0dXJuIG51bGw9PW9lLmwmJihvZS5sPW9lLmxlbmd0aCksb2V9dmFyIHUyPVgwO2Z1bmN0aW9uIFh3KFMsUixrKXt2YXIgRz1TLmwrUixRPTghPWsuYmlmZiYmay5iaWZmPzI6NCxvZT1TLnJlYWRf''@;'; put 'put ''c2hpZnQoUSksZ2U9Uy5yZWFkX3NoaWZ0KFEpLHBlPVMucmVhZF9zaGlmdCgyKSx5ZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubD1HLHtzOntyOm9lLGM6cGV9LGU6e3I6Z2UsYzp5ZX19fWZ1bmN0aW9uIHk1KFMsUixrLEcpe3ZhciBvZT0ha3x8IWsuYmlmZnx8OD09ay5iaWZmO0d8fChH''@;'; put 'put ''PWJuKGsmJjU9PWsuYmlmZj8xNjoyMCkpLEcud3JpdGVfc2hpZnQoMixvZSYmay5jZWxsU3R5bGVzJiZTLmZvbnRJZCYmKFMuZm9udElkPDQ/Uy5mb250SWQ6Uy5mb250SWQrMSl8fDApO3ZhciBnZT0xO1MucHJvdGVjdGlvbiYmKFMucHJvdGVjdGlvbi5lZGl0YWJsZSYmKGdlJj0tMiksUy5w''@;'; put 'put ''cm90ZWN0aW9uLmhpZGRlbiYmKGdlfD0yKSksUy5zdHlsZT8oRy53cml0ZV9zaGlmdCgyLFMubnVtRm10SWR8fDApLEcud3JpdGVfc2hpZnQoMiw2NTUyNHxnZSkpOihHLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksRy53cml0ZV9zaGlmdCgyLFI8PDR8Z2UpKTt2YXIgcGU9Uy5hbGln''@;'; put 'put ''bm1lbnR8fHt9O2lmKG9lKXt2YXIgeWU9MCxQZT0wO0Q1LmluZGV4T2YocGUuaG9yaXpvbnRhbCk+LTEmJih5ZXw9RDUuaW5kZXhPZihwZS5ob3Jpem9udGFsKSkscGUud3JhcFRleHQmJih5ZXw9OCksdDguaW5kZXhPZihwZS52ZXJ0aWNhbCk+LTE/eWV8PXQ4LmluZGV4T2YocGUudmVydGlj''@;'; put 'put ''YWwpPDw0Om51bGw9PXBlLnZlcnRpY2FsJiYoeWV8PTMyKSxHLndyaXRlX3NoaWZ0KDEseWUpLEcud3JpdGVfc2hpZnQoMSwwKSxwZS5zaHJpbmtUb0ZpdCYmKFBlfD0xNiksRy53cml0ZV9zaGlmdCgyLFBlKTt2YXIgTmU9bnVsbDtudWxsIT1TLmJvcmRlcklkJiYoTmU9ay5Cb3JkZXJzJiZr''@;'; put 'put ''LkJvcmRlcnNbUy5ib3JkZXJJZHx8MF18fHt9KTt2YXIgWWU9MCxldD0wLGN0PTA7TmUmJihudWxsIT1OZS5sZWZ0JiZOZS5sZWZ0LnN0eWxlJiYoWWV8PShjdD1wZC5pbmRleE9mKE5lLmxlZnQuc3R5bGUpKT4tMT9jdDowKSxudWxsIT1OZS5yaWdodCYmTmUucmlnaHQuc3R5bGUmJihZZXw9''@;'; put 'put ''KChjdD1wZC5pbmRleE9mKE5lLnJpZ2h0LnN0eWxlKSk+LTE/Y3Q6MCk8PDQpLG51bGwhPU5lLnRvcCYmTmUudG9wLnN0eWxlJiYoZXR8PShjdD1wZC5pbmRleE9mKE5lLnRvcC5zdHlsZSkpPi0xP2N0OjApLG51bGwhPU5lLmJvdHRvbSYmTmUuYm90dG9tLnN0eWxlJiYoZXR8PSgoY3Q9cGQu''@;'; put 'put ''aW5kZXhPZihOZS5ib3R0b20uc3R5bGUpKT4tMT9jdDowKTw8NCkpLEcud3JpdGVfc2hpZnQoMSxZZSksRy53cml0ZV9zaGlmdCgxLGV0KSxHLndyaXRlX3NoaWZ0KDIsMCksRy53cml0ZV9zaGlmdCgyLDApLEcud3JpdGVfc2hpZnQoMSwwKTt2YXIgRXQ9MCxhdD1rLkZpbGxzJiZrLkZpbGxz''@;'; put 'put ''W1MuZmlsbElkfHwwXXx8e307KGF0LmZnQ29sb3J8fGF0LmJnQ29sb3IpJiYoRXR8PTQpLEcud3JpdGVfc2hpZnQoMSxFdCk7dmFyIGJ0PTA7YnR8PVA0KGF0LmZnQ29sb3IsNjUpLGJ0fD1QNChhdC5iZ0NvbG9yLDY1KTw8NyxHLndyaXRlX3NoaWZ0KDIsYnQpfWVsc2UgRy53cml0ZV9zaGlm''@;'; put 'put ''dCg0LDApLEcud3JpdGVfc2hpZnQoNCwwKSxHLndyaXRlX3NoaWZ0KDIsMCk7cmV0dXJuIEd9ZnVuY3Rpb24gRTQoUyxSLGspe3ZhciBHPXcwKFMpOygyPT1rLmJpZmZ8fDk9PVIpJiYrK1MubDt2YXIgUT1mdW5jdGlvbiBVbChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDE9PT1T''@;'; put 'put ''LnJlYWRfc2hpZnQoMSk/UjoxPT09Un0oUyk7cmV0dXJuIEcudmFsPVEsRy50PSEwPT09UXx8ITE9PT1RPyJiIjoiZSIsR312YXIgSkE9ZnVuY3Rpb24gdjUoUyxSLGspe3JldHVybiAwPT09Uj8iIjpYMChTLDAsayl9O2Z1bmN0aW9uIGVDKFMsUixrKXt2YXIgUSxHPVMucmVhZF9zaGlmdCgy''@;'; put 'put ''KSxvZT17ZkJ1aWx0SW46MSZHLGZXYW50QWR2aXNlOkc+Pj4xJjEsZldhbnRQaWN0Okc+Pj4yJjEsZk9sZTpHPj4+MyYxLGZPbGVMaW5rOkc+Pj40JjEsY2Y6Rz4+PjUmMTAyMyxmSWNvbjpHPj4+MTUmMX07cmV0dXJuIDE0ODQ5PT09ay5zYmNjaCYmKFE9ZnVuY3Rpb24gejYoUyxSLGspe1Mu''@;'; put 'put ''bCs9NDt2YXIgRz1TLmwrKFItPTQpLFE9VWEoUywwLGspLG9lPVMucmVhZF9zaGlmdCgyKTtpZihvZSE9PShHLT1TLmwpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIitHKyIgIT0gIitvZSk7cmV0dXJuIFMubCs9b2UsUX0oUyxSLTIsaykpLG9lLmJv''@;'; put 'put ''ZHk9UXx8Uy5yZWFkX3NoaWZ0KFItMiksInN0cmluZyI9PXR5cGVvZiBRJiYob2UuTmFtZT1RKSxvZX12YXIgY1Y9WyJfeGxubS5Db25zb2xpZGF0ZV9BcmVhIiwiX3hsbm0uQXV0b19PcGVuIiwiX3hsbm0uQXV0b19DbG9zZSIsIl94bG5tLkV4dHJhY3QiLCJfeGxubS5EYXRhYmFzZSIsIl94''@;'; put 'put ''bG5tLkNyaXRlcmlhIiwiX3hsbm0uUHJpbnRfQXJlYSIsIl94bG5tLlByaW50X1RpdGxlcyIsIl94bG5tLlJlY29yZGVyIiwiX3hsbm0uRGF0YV9Gb3JtIiwiX3hsbm0uQXV0b19BY3RpdmF0ZSIsIl94bG5tLkF1dG9fRGVhY3RpdmF0ZSIsIl94bG5tLlNoZWV0X1RpdGxlIiwiX3hsbm0uX0Zp''@;'; put 'put ''bHRlckRhdGFiYXNlIl07ZnVuY3Rpb24gdEMoUyxSLGspe3ZhciBHPVMubCtSLFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgxKSxnZT1TLnJlYWRfc2hpZnQoMSkscGU9Uy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpLHllPTA7KCFrfHxrLmJpZmY+PTUpJiYoNSE9ay5i''@;'; put 'put ''aWZmJiYoUy5sKz0yKSx5ZT1TLnJlYWRfc2hpZnQoMiksNT09ay5iaWZmJiYoUy5sKz0yKSxTLmwrPTQpO3ZhciBQZT1yYyhTLGdlLGspOzMyJlEmJihQZT1jVltQZS5jaGFyQ29kZUF0KDApXSk7dmFyIE5lPUctUy5sO2smJjI9PWsuYmlmZiYmLS1OZTt2YXIgWWU9RyE9Uy5sJiYwIT09cGUm''@;'; put 'put ''Jk5lPjA/ZnVuY3Rpb24gQW5lKFMsUixrLEcpe3ZhciBnZSxRPVMubCtSLG9lPWxoKFMsRyxrKTtyZXR1cm4gUSE9PVMubCYmKGdlPUI0KFMsUS1TLmwsb2UsaykpLFtvZSxnZV19KFMsTmUsayxwZSk6W107cmV0dXJue2NoS2V5Om9lLE5hbWU6UGUsaXRhYjp5ZSxyZ2NlOlllfX1mdW5jdGlv''@;'; put 'put ''biBUdihTLFIsayl7aWYoay5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIG5DKFMsUixrKXszPT1TW1MubCsxXSYmU1tTLmxdKys7dmFyIEc9VWEoUywwLGspO3JldHVybiAzPT1HLmNoYXJDb2RlQXQoMCk/Ry5zbGljZSgxKTpHfShTLDAsayk7Zm9yKHZhciBHPVtdLFE9Uy5sK1Isb2U9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KGsuYmlmZj44PzQ6Mik7MCE9b2UtLTspRy5wdXNoKHhmKFMsMCxrKSk7aWYoUy5sIT1RKXRocm93IG5ldyBFcnJvcigiQmFkIEV4dGVyblNoZWV0OiAiK1MubCsiICE9ICIrUSk7cmV0dXJuIEd9ZnVuY3Rpb24ga3YoUyxSLGspe3ZhciBHPWdjKFMsNik7c3dpdGNoKGsuYmlmZil7''@;'; put 'put ''Y2FzZSAyOlMubCsrLFItPTc7YnJlYWs7Y2FzZSAzOmNhc2UgNDpTLmwrPTIsUi09ODticmVhaztkZWZhdWx0OlMubCs9NixSLT0xMn1yZXR1cm5bRyxjRChTLFIsayldfXZhciBlaz1bXTtmdW5jdGlvbiBmVihTKXt2YXIgUj1ibigyNCksaz1ObyhTWzBdKTtSLndyaXRlX3NoaWZ0KDIsay5y''@;'; put 'put ''KSxSLndyaXRlX3NoaWZ0KDIsay5yKSxSLndyaXRlX3NoaWZ0KDIsay5jKSxSLndyaXRlX3NoaWZ0KDIsay5jKTtmb3IodmFyIEc9ImQwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLFE9MDtRPDE2OysrUSlSLndyaXRlX3NoaWZ0KDEs''@;'; put 'put ''cGFyc2VJbnQoR1tRXSwxNikpO3JldHVybiBqKFtSLFM0KFNbMV0pXSl9ZnVuY3Rpb24gZ1YoUyl7dmFyIFI9U1sxXS5Ub29sdGlwLGs9Ym4oMTArMiooUi5sZW5ndGgrMSkpO2sud3JpdGVfc2hpZnQoMiwyMDQ4KTt2YXIgRz1ObyhTWzBdKTtrLndyaXRlX3NoaWZ0KDIsRy5yKSxrLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsRy5yKSxrLndyaXRlX3NoaWZ0KDIsRy5jKSxrLndyaXRlX3NoaWZ0KDIsRy5jKTtmb3IodmFyIFE9MDtRPFIubGVuZ3RoOysrUSlrLndyaXRlX3NoaWZ0KDIsUi5jaGFyQ29kZUF0KFEpKTtyZXR1cm4gay53cml0ZV9zaGlmdCgyLDApLGt9ZnVuY3Rpb24gckMoUyxSLGspe2lm''@;'; put 'put ''KCFrLmNlbGxTdHlsZXMpcmV0dXJuIEluKFMsUik7dmFyIEc9ayYmay5iaWZmPj0xMj80OjIsUT1TLnJlYWRfc2hpZnQoRyksb2U9Uy5yZWFkX3NoaWZ0KEcpLGdlPVMucmVhZF9zaGlmdChHKSxwZT1TLnJlYWRfc2hpZnQoRykseWU9Uy5yZWFkX3NoaWZ0KDIpOzI9PUcmJihTLmwrPTIpO3Zh''@;'; put 'put ''ciBQZT17czpRLGU6b2UsdzpnZSxpeGZlOnBlLGZsYWdzOnllfTtyZXR1cm4oay5iaWZmPj01fHwhay5iaWZmKSYmKFBlLmxldmVsPXllPj44JjcpLFBlfWVrWzhdPWZ1bmN0aW9uKFMsUil7dmFyIGs9Uy5sK1I7Uy5sKz0xMDt2YXIgRz1TLnJlYWRfc2hpZnQoMik7Uy5sKz00LFMubCs9MixT''@;'; put 'put ''LmwrPTIsUy5sKz0yLFMubCs9NDt2YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubCs9USxTLmw9ayx7Zm10Okd9fTt2YXIgUXRlPXcwLG5rPXc0LE8wPW51O3ZhciBCMz1mdW5jdGlvbigpe3ZhciBTPXsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4''@;'; put 'put ''NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1''@;'; put 'put ''MywwOjIwMTI3LDg6ODY1LDk6NDM3LDEwOjg1MCwxMTo0MzcsMTM6NDM3LDE0Ojg1MCwxNTo0MzcsMTY6ODUwLDE3OjQzNywxODo4NTAsMTk6OTMyLDIwOjg1MCwyMTo0MzcsMjI6ODUwLDIzOjg2NSwyNDo0MzcsMjU6NDM3LDI2Ojg1MCwyNzo0MzcsMjg6ODYzLDI5Ojg1MCwzMTo4NTIsMzQ6''@;'; put 'put ''ODUyLDM1Ojg1MiwzNjo4NjAsMzc6ODUwLDM4Ojg2Niw1NTo4NTAsNjQ6ODUyLDc3OjkzNiw3ODo5NDksNzk6OTUwLDgwOjg3NCw4NzoxMjUyLDg4OjEyNTIsODk6MTI1MiwxMDg6ODYzLDEzNDo3MzcsMTM1Ojg1MiwxMzY6ODU3LDIwNDoxMjU3LDI1NToxNjk2OX0sUj1WZSh7MTo0MzcsMjo4''@;'; put 'put ''NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAw''@;'; put 'put ''MDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyN30pO2Z1bmN0aW9uIFEoeWUsUGUpe3ZhciBOZT1QZXx8e307cmV0dXJuIE5lLmRhdGVORnx8KE5lLmRhdGVORj0ieXl5eW1tZGQiKSxwNChmdW5jdGlvbiBHKHllLFBlKXt2YXIgTmU9W10sWWU9VigxKTtzd2l0''@;'; put 'put ''Y2goUGUudHlwZSl7Y2FzZSJiYXNlNjQiOlllPWIoX2UuZGVjb2RlKHllKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOlllPWIoeWUpO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpZZT15ZX1tbihZZSwwKTt2YXIgZXQ9WWUucmVhZF9zaGlmdCgxKSxjdD0hISgxMzYmZXQpLEV0PSExLGF0''@;'; put 'put ''PSExO3N3aXRjaChldCl7Y2FzZSAyOmNhc2UgMzpjYXNlIDEzMTpjYXNlIDEzOTpjYXNlIDI0NTpicmVhaztjYXNlIDQ4OmNhc2UgNDk6RXQ9ITAsY3Q9ITA7YnJlYWs7Y2FzZSAxNDA6YXQ9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBWZXJzaW9u''@;'; put 'put ''OiAiK2V0LnRvU3RyaW5nKDE2KSl9dmFyIGJ0PTAsanQ9NTIxOzI9PWV0JiYoYnQ9WWUucmVhZF9zaGlmdCgyKSksWWUubCs9MywyIT1ldCYmKGJ0PVllLnJlYWRfc2hpZnQoNCkpLGJ0PjEwNDg1NzYmJihidD0xZTYpLDIhPWV0JiYoanQ9WWUucmVhZF9zaGlmdCgyKSk7dmFyIGt0PVllLnJl''@;'; put 'put ''YWRfc2hpZnQoMiksT3Q9UGUuY29kZXBhZ2V8fDEyNTI7MiE9ZXQmJihZZS5sKz0xNixZZS5yZWFkX3NoaWZ0KDEpLDAhPT1ZZVtZZS5sXSYmKE90PVNbWWVbWWUubF1dKSxZZS5sKz0xLFllLmwrPTIpLGF0JiYoWWUubCs9MzYpO2Zvcih2YXIgS3Q9W10sVG49e30scnI9TWF0aC5taW4oWWUu''@;'; put 'put ''bGVuZ3RoLDI9PWV0PzUyMTpqdC0xMC0oRXQ/MjY0OjApKSxTbj1hdD8zMjoxMTtZZS5sPHJyJiYxMyE9WWVbWWUubF07KXN3aXRjaChUbj17fSxUbi5uYW1lPWNwdGFibGUudXRpbHMuZGVjb2RlKE90LFllLnNsaWNlKFllLmwsWWUubCtTbikpLnJlcGxhY2UoL1tcdTAwMDBcclxuXS4qJC9n''@;'; put 'put ''LCIiKSxZZS5sKz1TbixUbi50eXBlPVN0cmluZy5mcm9tQ2hhckNvZGUoWWUucmVhZF9zaGlmdCgxKSksMiE9ZXQmJiFhdCYmKFRuLm9mZnNldD1ZZS5yZWFkX3NoaWZ0KDQpKSxUbi5sZW49WWUucmVhZF9zaGlmdCgxKSwyPT1ldCYmKFRuLm9mZnNldD1ZZS5yZWFkX3NoaWZ0KDIpKSxUbi5k''@;'; put 'put ''ZWM9WWUucmVhZF9zaGlmdCgxKSxUbi5uYW1lLmxlbmd0aCYmS3QucHVzaChUbiksMiE9ZXQmJihZZS5sKz1hdD8xMzoxNCksVG4udHlwZSl7Y2FzZSJCIjooIUV0fHw4IT1Ubi5sZW4pJiZQZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lwcGluZyAiK1RuLm5hbWUrIjoiK1RuLnR5cGUpO2JyZWFr''@;'; put 'put ''O2Nhc2UiRyI6Y2FzZSJQIjpQZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lwcGluZyAiK1RuLm5hbWUrIjoiK1RuLnR5cGUpO2JyZWFrO2Nhc2UiKyI6Y2FzZSIwIjpjYXNlIkAiOmNhc2UiQyI6Y2FzZSJEIjpjYXNlIkYiOmNhc2UiSSI6Y2FzZSJMIjpjYXNlIk0iOmNhc2UiTiI6Y2FzZSJPIjpj''@;'; put 'put ''YXNlIlQiOmNhc2UiWSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gRmllbGQgVHlwZTogIitUbi50eXBlKX1pZigxMyE9PVllW1llLmxdJiYoWWUubD1qdC0xKSwxMyE9PVllLnJlYWRfc2hpZnQoMSkpdGhyb3cgbmV3IEVycm9yKCJEQkYgVGVybWluYXRvciBub3Qg''@;'; put 'put ''Zm91bmQgIitZZS5sKyIgIitZZVtZZS5sXSk7WWUubD1qdDt2YXIgbHI9MCxYbj0wO2ZvcihOZVswXT1bXSxYbj0wO1huIT1LdC5sZW5ndGg7KytYbilOZVswXVtYbl09S3RbWG5dLm5hbWU7Zm9yKDtidC0tID4wOylpZig0MiE9PVllW1llLmxdKWZvcigrK1llLmwsTmVbKytscl09W10sWG49''@;'; put 'put ''MCxYbj0wO1huIT1LdC5sZW5ndGg7KytYbil7dmFyIEJuPVllLnNsaWNlKFllLmwsWWUubCtLdFtYbl0ubGVuKTtZZS5sKz1LdFtYbl0ubGVuLG1uKEJuLDApO3ZhciBmcj1jcHRhYmxlLnV0aWxzLmRlY29kZShPdCxCbik7c3dpdGNoKEt0W1huXS50eXBlKXtjYXNlIkMiOmZyLnRyaW0oKS5s''@;'; put 'put ''ZW5ndGgmJihOZVtscl1bWG5dPWZyLnJlcGxhY2UoL1xzKyQvLCIiKSk7YnJlYWs7Y2FzZSJEIjpOZVtscl1bWG5dPTg9PT1mci5sZW5ndGg/bmV3IERhdGUoK2ZyLnNsaWNlKDAsNCksK2ZyLnNsaWNlKDQsNiktMSwrZnIuc2xpY2UoNiw4KSk6ZnI7YnJlYWs7Y2FzZSJGIjpOZVtscl1bWG5d''@;'; put 'put ''PXBhcnNlRmxvYXQoZnIudHJpbSgpKTticmVhaztjYXNlIisiOmNhc2UiSSI6TmVbbHJdW1huXT1hdD8yMTQ3NDgzNjQ4XkJuLnJlYWRfc2hpZnQoLTQsImkiKTpCbi5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIkwiOnN3aXRjaChmci50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZ''@;'; put 'put ''IjpjYXNlIlQiOk5lW2xyXVtYbl09ITA7YnJlYWs7Y2FzZSJOIjpjYXNlIkYiOk5lW2xyXVtYbl09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8IitmcisifCIpfWJyZWFrO2Nhc2UiTSI6aWYoIWN0KXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiREJGIFVuZXhwZWN0ZWQgTUVNTyBmb3IgdHlwZSAiK2V0LnRvU3RyaW5nKDE2KSk7TmVbbHJdW1huXT0iIyNNRU1PIyMiKyhhdD9wYXJzZUludChmci50cmltKCksMTApOkJuLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiTiI6KGZyPWZyLnJlcGxhY2UoL1x1MDAw''@;'; put 'put ''MC9nLCIiKS50cmltKCkpJiYiLiIhPWZyJiYoTmVbbHJdW1huXT0rZnJ8fDApO2JyZWFrO2Nhc2UiQCI6TmVbbHJdW1huXT1uZXcgRGF0ZShCbi5yZWFkX3NoaWZ0KC04LCJmIiktNjIxMzU2ODMyZTUpO2JyZWFrO2Nhc2UiVCI6TmVbbHJdW1huXT1uZXcgRGF0ZSg4NjRlNSooQm4ucmVhZF9z''@;'; put 'put ''aGlmdCg0KS0yNDQwNTg4KStCbi5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIlkiOk5lW2xyXVtYbl09Qm4ucmVhZF9zaGlmdCg0LCJpIikvMWU0O2JyZWFrO2Nhc2UiTyI6TmVbbHJdW1huXT0tQm4ucmVhZF9zaGlmdCgtOCwiZiIpO2JyZWFrO2Nhc2UiQiI6aWYoRXQmJjg9PUt0W1huXS5s''@;'; put 'put ''ZW4pe05lW2xyXVtYbl09Qm4ucmVhZF9zaGlmdCg4LCJmIik7YnJlYWt9Y2FzZSJHIjpjYXNlIlAiOkJuLmwrPUt0W1huXS5sZW47YnJlYWs7Y2FzZSIwIjppZigiX051bGxGbGFncyI9PT1LdFtYbl0ubmFtZSlicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVk''@;'; put 'put ''IGRhdGEgdHlwZSAiK0t0W1huXS50eXBlKX19ZWxzZSBZZS5sKz1rdDtpZigyIT1ldCYmWWUubDxZZS5sZW5ndGgmJjI2IT1ZZVtZZS5sKytdKXRocm93IG5ldyBFcnJvcigiREJGIEVPRiBNYXJrZXIgbWlzc2luZyAiKyhZZS5sLTEpKyIgb2YgIitZZS5sZW5ndGgrIiAiK1llW1llLmwtMV0u''@;'; put 'put ''dG9TdHJpbmcoMTYpKTtyZXR1cm4gUGUmJlBlLnNoZWV0Um93cyYmKE5lPU5lLnNsaWNlKDAsUGUuc2hlZXRSb3dzKSksTmV9KHllLE5lKSxOZSl9dmFyIGdlPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dmVyc2lvbnM6WzIsMyw0OCw0OSwxMzEsMTM5LDE0MCwyNDVd''@;'; put 'put ''LHRvX3dvcmtib29rOmZ1bmN0aW9uIG9lKHllLFBlKXt0cnl7cmV0dXJuIHRoKFEoeWUsUGUpLFBlKX1jYXRjaChOZSl7aWYoUGUmJlBlLldURil0aHJvdyBOZX1yZXR1cm57U2hlZXROYW1lczpbXSxTaGVldHM6e319fSx0b19zaGVldDpRLGZyb21fc2hlZXQ6ZnVuY3Rpb24gcGUoeWUsUGUp''@;'; put 'put ''e3ZhciBOZT1QZXx8e307aWYoK05lLmNvZGVwYWdlPj0wJiZVKCtOZS5jb2RlcGFnZSksInN0cmluZyI9PU5lLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBZZT1iaSgpLGV0PUs0KHllLHtoZWFkZXI6MSxyYXc6ITAsY2VsbERhdGVz''@;'; put 'put ''OiEwfSksY3Q9ZXRbMF0sRXQ9ZXQuc2xpY2UoMSksYXQ9MCxidD0wLGp0PTAsa3Q9MTtmb3IoYXQ9MDthdDxjdC5sZW5ndGg7KythdClpZihudWxsIT1hdCl7aWYoKytqdCwibnVtYmVyIj09dHlwZW9mIGN0W2F0XSYmKGN0W2F0XT1jdFthdF0udG9TdHJpbmcoMTApKSwic3RyaW5nIiE9dHlw''@;'; put 'put ''ZW9mIGN0W2F0XSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBJbnZhbGlkIGNvbHVtbiBuYW1lICIrY3RbYXRdKyIgfCIrdHlwZW9mIGN0W2F0XSsifCIpO2lmKGN0LmluZGV4T2YoY3RbYXRdKSE9PWF0KWZvcihidD0wO2J0PDEwMjQ7KytidClpZigtMT09Y3QuaW5kZXhPZihjdFthdF0rIl8iK2J0''@;'; put 'put ''KSl7Y3RbYXRdKz0iXyIrYnQ7YnJlYWt9fXZhciBPdD1vbyh5ZVsiIXJlZiJdKSxLdD1bXTtmb3IoYXQ9MDthdDw9T3QuZS5jLU90LnMuYzsrK2F0KXt2YXIgVG49W107Zm9yKGJ0PTA7YnQ8RXQubGVuZ3RoOysrYnQpbnVsbCE9RXRbYnRdW2F0XSYmVG4ucHVzaChFdFtidF1bYXRdKTtpZigw''@;'; put 'put ''IT1Ubi5sZW5ndGgmJm51bGwhPWN0W2F0XSl7dmFyIHJyPSIiLFNuPSIiO2ZvcihidD0wO2J0PFRuLmxlbmd0aDsrK2J0KXtzd2l0Y2godHlwZW9mIFRuW2J0XSl7Y2FzZSJudW1iZXIiOlNuPSJCIjticmVhaztjYXNlInN0cmluZyI6ZGVmYXVsdDpTbj0iQyI7YnJlYWs7Y2FzZSJib29sZWFu''@;'; put 'put ''IjpTbj0iTCI7YnJlYWs7Y2FzZSJvYmplY3QiOlNuPVRuW2J0XWluc3RhbmNlb2YgRGF0ZT8iRCI6IkMifWlmKCJDIj09KHJyPXJyJiZyciE9U24/IkMiOlNuKSlicmVha31rdCs9Z2VbcnJdfHwwLEt0W2F0XT1ycn1lbHNlIEt0W2F0XT0iPyJ9dmFyIGxyPVllLm5leHQoMzIpO2Zvcihsci53''@;'; put 'put ''cml0ZV9zaGlmdCg0LDMxODkwMjU3NiksbHIud3JpdGVfc2hpZnQoNCxFdC5sZW5ndGgpLGxyLndyaXRlX3NoaWZ0KDIsMjk2KzMyKmp0KSxsci53cml0ZV9zaGlmdCgyLGt0KSxhdD0wO2F0PDQ7KythdClsci53cml0ZV9zaGlmdCg0LDApO2Zvcihsci53cml0ZV9zaGlmdCg0LCgrUltGXXx8''@;'; put 'put ''Myk8PDgpLGF0PTAsYnQ9MDthdDxjdC5sZW5ndGg7KythdClpZihudWxsIT1jdFthdF0pe3ZhciBYbj1ZZS5uZXh0KDMyKSxCbj0oY3RbYXRdLnNsaWNlKC0xMCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiKS5zbGljZSgwLDExKTtYbi53cml0ZV9zaGlmdCgxLEJuLCJzYmNzIiksWG4ud3Jp''@;'; put 'put ''dGVfc2hpZnQoMSwiPyI9PUt0W2F0XT8iQyI6S3RbYXRdLCJzYmNzIiksWG4ud3JpdGVfc2hpZnQoNCxidCksWG4ud3JpdGVfc2hpZnQoMSxnZVtLdFthdF1dfHwwKSxYbi53cml0ZV9zaGlmdCgxLDApLFhuLndyaXRlX3NoaWZ0KDEsMiksWG4ud3JpdGVfc2hpZnQoNCwwKSxYbi53cml0ZV9z''@;'; put 'put ''aGlmdCgxLDApLFhuLndyaXRlX3NoaWZ0KDQsMCksWG4ud3JpdGVfc2hpZnQoNCwwKSxidCs9Z2VbS3RbYXRdXXx8MH12YXIgZnI9WWUubmV4dCgyNjQpO2Zvcihmci53cml0ZV9zaGlmdCg0LDEzKSxhdD0wO2F0PDY1OysrYXQpZnIud3JpdGVfc2hpZnQoNCwwKTtmb3IoYXQ9MDthdDxFdC5s''@;'; put 'put ''ZW5ndGg7KythdCl7dmFyIGJyPVllLm5leHQoa3QpO2Zvcihici53cml0ZV9zaGlmdCgxLDApLGJ0PTA7YnQ8Y3QubGVuZ3RoOysrYnQpaWYobnVsbCE9Y3RbYnRdKXN3aXRjaChLdFtidF0pe2Nhc2UiTCI6YnIud3JpdGVfc2hpZnQoMSxudWxsPT1FdFthdF1bYnRdPzYzOkV0W2F0XVtidF0/''@;'; put 'put ''ODQ6NzApO2JyZWFrO2Nhc2UiQiI6YnIud3JpdGVfc2hpZnQoOCxFdFthdF1bYnRdfHwwLCJmIik7YnJlYWs7Y2FzZSJEIjpFdFthdF1bYnRdPyhici53cml0ZV9zaGlmdCg0LCgiMDAwMCIrRXRbYXRdW2J0XS5nZXRGdWxsWWVhcigpKS5zbGljZSgtNCksInNiY3MiKSxici53cml0ZV9zaGlm''@;'; put 'put ''dCgyLCgiMDAiKyhFdFthdF1bYnRdLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSwic2JjcyIpLGJyLndyaXRlX3NoaWZ0KDIsKCIwMCIrRXRbYXRdW2J0XS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2JjcyIpKTpici53cml0ZV9zaGlmdCg4LCIwMDAwMDAwMCIsInNiY3MiKTticmVhaztjYXNl''@;'; put 'put ''IkMiOnZhciBlcj1TdHJpbmcoRXRbYXRdW2J0XXx8IiIpO2Zvcihici53cml0ZV9zaGlmdCgxLGVyLCJzYmNzIiksanQ9MDtqdDwyNTAtZXIubGVuZ3RoOysranQpYnIud3JpdGVfc2hpZnQoMSwzMil9fXJldHVybiBZZS5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLFllLmVuZCgpfX19KCks''@;'; put 'put ''Y0M9ZnVuY3Rpb24oKXt2YXIgUz17QUE6Ilx4YzAiLEJBOiJceGMxIixDQToiXHhjMiIsREE6MTk1LEhBOiJceGM0IixKQToxOTcsQUU6Ilx4YzgiLEJFOiJceGM5IixDRToiXHhjYSIsSEU6Ilx4Y2IiLEFJOiJceGNjIixCSToiXHhjZCIsQ0k6Ilx4Y2UiLEhJOiJceGNmIixBTzoiXHhkMiIs''@;'; put 'put ''Qk86Ilx4ZDMiLENPOiJceGQ0IixETzoyMTMsSE86Ilx4ZDYiLEFVOiJceGQ5IixCVToiXHhkYSIsQ1U6Ilx4ZGIiLEhVOiJceGRjIixBYToiXHhlMCIsQmE6Ilx4ZTEiLENhOiJceGUyIixEYToyMjcsSGE6Ilx4ZTQiLEphOjIyOSxBZToiXHhlOCIsQmU6Ilx4ZTkiLENlOiJceGVhIixIZToi''@;'; put 'put ''XHhlYiIsQWk6Ilx4ZWMiLEJpOiJceGVkIixDaToiXHhlZSIsSGk6Ilx4ZWYiLEFvOiJceGYyIixCbzoiXHhmMyIsQ286Ilx4ZjQiLERvOjI0NSxIbzoiXHhmNiIsQXU6Ilx4ZjkiLEJ1OiJceGZhIixDdToiXHhmYiIsSHU6Ilx4ZmMiLEtDOiJceGM3IixLYzoiXHhlNyIscToiXHhlNiIsejoi''@;'; put 'put ''XHUwMTUzIixhOiJceGM2IixqOiJcdTAxNTIiLEROOjIwOSxEbjoyNDEsSHk6MjU1LFM6MTY5LGM6MTcwLFI6MTc0LCJCICI6MTgwLDA6MTc2LDE6MTc3LDI6MTc4LDM6MTc5LDU6MTgxLDY6MTgyLDc6MTgzLFE6MTg1LGs6MTg2LGI6MjA4LGk6MjE2LGw6MjIyLHM6MjQwLHk6MjQ4LCIhIjox''@;'; put 'put ''NjEsJyInOjE2MiwiIyI6MTYzLCIoIjoxNjQsIiUiOjE2NSwiJyI6MTY3LCJIICI6MTY4LCIrIjoxNzEsIjsiOjE4NywiPCI6MTg4LCI9IjoxODksIj4iOjE5MCwiPyI6MTkxLCJ7IjoyMjN9LFI9bmV3IFJlZ0V4cCgiXHgxYk4oIitPZShTKS5qb2luKCJ8IikucmVwbGFjZSgvXHxcfFx8Lywi''@;'; put 'put ''fFxcfHwiKS5yZXBsYWNlKC8oWz8oKStdKS9nLCJcXCQxIikrInxcXHwpIiwiZ20iKSxrPWZ1bmN0aW9uKGV0LGN0KXt2YXIgRXQ9U1tjdF07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBFdD9pZShFdCk6RXR9LEc9ZnVuY3Rpb24oZXQsY3QsRXQpe3ZhciBhdD1jdC5jaGFyQ29kZUF0KDApLTMy''@;'; put 'put ''PDw0fEV0LmNoYXJDb2RlQXQoMCktNDg7cmV0dXJuIDU5PT1hdD9ldDppZShhdCl9O2Z1bmN0aW9uIG9lKGV0LGN0KXt2YXIgZnIsRXQ9ZXQuc3BsaXQoL1tcblxyXSsvKSxhdD0tMSxidD0tMSxqdD0wLGt0PTAsT3Q9W10sS3Q9W10sVG49bnVsbCxycj17fSxTbj1bXSxscj1bXSxYbj1bXSxC''@;'; put 'put ''bj0wO2ZvcigrY3QuY29kZXBhZ2U+PTAmJlUoK2N0LmNvZGVwYWdlKTtqdCE9PUV0Lmxlbmd0aDsrK2p0KXtCbj0wO3ZhciBGaSxicj1FdFtqdF0udHJpbSgpLnJlcGxhY2UoL1x4MUIoW1x4MjAtXHgyRl0pKFtceDMwLVx4M0ZdKS9nLEcpLnJlcGxhY2UoUixrKSxlcj1ici5yZXBsYWNlKC87''@;'; put 'put ''Oy9nLCJcMCIpLnNwbGl0KCI7IikubWFwKGZ1bmN0aW9uKFppKXtyZXR1cm4gWmkucmVwbGFjZSgvXHUwMDAwL2csIjsiKX0pO2lmKGJyLmxlbmd0aD4wKXN3aXRjaChlclswXSl7Y2FzZSJJRCI6Y2FzZSJFIjpjYXNlIkIiOmNhc2UiTyI6Y2FzZSJXIjpicmVhaztjYXNlIlAiOiJQIj09ZXJb''@;'; put 'put ''MV0uY2hhckF0KDApJiZLdC5wdXNoKGJyLnNsaWNlKDMpLnJlcGxhY2UoLzs7L2csIjsiKSk7YnJlYWs7Y2FzZSJDIjp2YXIgbmE9ITEsY2E9ITEsTGk9ITEsa3I9ITEsVm49LTEsQnI9LTE7Zm9yKGt0PTE7a3Q8ZXIubGVuZ3RoOysra3Qpc3dpdGNoKGVyW2t0XS5jaGFyQXQoMCkpe2Nhc2Ui''@;'; put 'put ''QSI6Y2FzZSJHIjpicmVhaztjYXNlIlgiOmJ0PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMSxjYT0hMDticmVhaztjYXNlIlkiOmZvcihhdD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTEsY2F8fChidD0wKSxmcj1PdC5sZW5ndGg7ZnI8PWF0OysrZnIpT3RbZnJdPVtdO2JyZWFrO2Nh''@;'; put 'put ''c2UiSyI6JyInPT09KEZpPWVyW2t0XS5zbGljZSgxKSkuY2hhckF0KDApP0ZpPUZpLnNsaWNlKDEsRmkubGVuZ3RoLTEpOiJUUlVFIj09PUZpP0ZpPSEwOiJGQUxTRSI9PT1GaT9GaT0hMTppc05hTihRdChGaSkpP2lzTmFOKHNuKEZpKS5nZXREYXRlKCkpfHwoRmk9SGUoRmkpKTooRmk9UXQo''@;'; put 'put ''RmkpLG51bGwhPT1UbiYmQS5pc19kYXRlKFRuKSYmKEZpPXVuKEZpKSkpLHR5cGVvZiBjcHRhYmxlPCJ1IiYmInN0cmluZyI9PXR5cGVvZiBGaSYmInN0cmluZyIhPShjdHx8e30pLnR5cGUmJihjdHx8e30pLmNvZGVwYWdlJiYoRmk9Y3B0YWJsZS51dGlscy5kZWNvZGUoY3QuY29kZXBhZ2Us''@;'; put 'put ''RmkpKSxuYT0hMDticmVhaztjYXNlIkUiOmtyPSEwO3ZhciBfcj1INShlcltrdF0uc2xpY2UoMSkse3I6YXQsYzpidH0pO090W2F0XVtidF09W090W2F0XVtidF0sX3JdO2JyZWFrO2Nhc2UiUyI6TGk9ITAsT3RbYXRdW2J0XT1bT3RbYXRdW2J0XSwiUzVTIl07YnJlYWs7Y2FzZSJSIjpWbj1w''@;'; put 'put ''YXJzZUludChlcltrdF0uc2xpY2UoMSkpLTE7YnJlYWs7Y2FzZSJDIjpCcj1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTE7YnJlYWs7ZGVmYXVsdDppZihjdCYmY3QuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYnIpfWlmKG5hJiYoT3RbYXRdW2J0XSYmMj09T3Rb''@;'; put 'put ''YXRdW2J0XS5sZW5ndGg/T3RbYXRdW2J0XVswXT1GaTpPdFthdF1bYnRdPUZpLFRuPW51bGwpLExpKXtpZihrcil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGhhdmUgb3duIGZvcm11bGEiKTt2YXIgRm49Vm4+LTEmJk90W1ZuXVtCcl07aWYoIUZufHwhRm5b''@;'; put 'put ''MV0pdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBmaW5kIGJhc2UiKTtPdFthdF1bYnRdWzFdPUdrKEZuWzFdLHtyOmF0LVZuLGM6YnQtQnJ9KX1icmVhaztjYXNlIkYiOnZhciBqcj0wO2ZvcihrdD0xO2t0PGVyLmxlbmd0aDsrK2t0KXN3aXRjaChlcltrdF0u''@;'; put 'put ''Y2hhckF0KDApKXtjYXNlIlgiOmJ0PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMSwrK2pyO2JyZWFrO2Nhc2UiWSI6Zm9yKGF0PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMSxmcj1PdC5sZW5ndGg7ZnI8PWF0OysrZnIpT3RbZnJdPVtdO2JyZWFrO2Nhc2UiTSI6Qm49cGFyc2VJbnQo''@;'; put 'put ''ZXJba3RdLnNsaWNlKDEpKS8yMDticmVhaztjYXNlIkYiOmNhc2UiRyI6Y2FzZSJTIjpjYXNlIkQiOmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjpUbj1LdFtwYXJzZUludChlcltrdF0uc2xpY2UoMSkpXTticmVhaztjYXNlIlciOmZvcihYbj1lcltrdF0uc2xpY2UoMSkuc3BsaXQoIiAiKSxmcj1w''@;'; put 'put ''YXJzZUludChYblswXSwxMCk7ZnI8PXBhcnNlSW50KFhuWzFdLDEwKTsrK2ZyKUJuPXBhcnNlSW50KFhuWzJdLDEwKSxscltmci0xXT0wPT09Qm4/e2hpZGRlbjohMH06e3djaDpCbn0sUTAobHJbZnItMV0pO2JyZWFrO2Nhc2UiQyI6bHJbYnQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0x''@;'; put 'put ''XXx8KGxyW2J0XT17fSk7YnJlYWs7Y2FzZSJSIjpTblthdD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTFdfHwoU25bYXRdPXt9KSxCbj4wPyhTblthdF0uaHB0PUJuLFNuW2F0XS5ocHg9c2goQm4pKTowPT09Qm4mJihTblthdF0uaGlkZGVuPSEwKTticmVhaztkZWZhdWx0OmlmKGN0JiZj''@;'; put 'put ''dC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIiticil9anI8MSYmKFRuPW51bGwpO2JyZWFrO2RlZmF1bHQ6aWYoY3QmJmN0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2JyKX19cmV0dXJuIFNuLmxlbmd0aD4wJiYocnJbIiFyb3dzIl09U24p''@;'; put 'put ''LGxyLmxlbmd0aD4wJiYocnJbIiFjb2xzIl09bHIpLGN0JiZjdC5zaGVldFJvd3MmJihPdD1PdC5zbGljZSgwLGN0LnNoZWV0Um93cykpLFtPdCxycl19ZnVuY3Rpb24gZ2UoZXQsY3Qpe3ZhciBFdD1mdW5jdGlvbiBRKGV0LGN0KXtzd2l0Y2goY3QudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVy''@;'; put 'put ''biBvZShfZS5kZWNvZGUoZXQpLGN0KTtjYXNlImJpbmFyeSI6cmV0dXJuIG9lKGV0LGN0KTtjYXNlImJ1ZmZlciI6cmV0dXJuIG9lKGV0LnRvU3RyaW5nKCJiaW5hcnkiKSxjdCk7Y2FzZSJhcnJheSI6cmV0dXJuIG9lKHV0KGV0KSxjdCl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQg''@;'; put 'put ''dHlwZSAiK2N0LnR5cGUpfShldCxjdCksYnQ9RXRbMV0sanQ9cDQoRXRbMF0sY3QpO3JldHVybiBPZShidCkuZm9yRWFjaChmdW5jdGlvbihrdCl7anRba3RdPWJ0W2t0XX0pLGp0fWZ1bmN0aW9uIHllKGV0LGN0LEV0LGF0KXt2YXIgYnQ9IkM7WSIrKEV0KzEpKyI7WCIrKGF0KzEpKyI7SyI7''@;'; put 'put ''c3dpdGNoKGV0LnQpe2Nhc2UibiI6YnQrPWV0LnZ8fDAsZXQuZiYmIWV0LkYmJihidCs9IjtFIitINChldC5mLHtyOkV0LGM6YXR9KSk7YnJlYWs7Y2FzZSJiIjpidCs9ZXQudj8iVFJVRSI6IkZBTFNFIjticmVhaztjYXNlImUiOmJ0Kz1ldC53fHxldC52O2JyZWFrO2Nhc2UiZCI6YnQrPSci''@;'; put 'put ''JysoZXQud3x8ZXQudikrJyInO2JyZWFrO2Nhc2UicyI6YnQrPSciJytldC52LnJlcGxhY2UoLyIvZywiIikrJyInfXJldHVybiBidH1yZXR1cm4gU1sifCJdPTI1NCx7dG9fd29ya2Jvb2s6ZnVuY3Rpb24gcGUoZXQsY3Qpe3JldHVybiB0aChnZShldCxjdCksY3QpfSx0b19zaGVldDpnZSxm''@;'; put 'put ''cm9tX3NoZWV0OmZ1bmN0aW9uIFllKGV0LGN0KXt2YXIganQsRXQ9WyJJRDtQU2hlZXRKUztOO0UiXSxhdD1bXSxidD1vbyhldFsiIXJlZiJdKSxrdD1BcnJheS5pc0FycmF5KGV0KSxPdD0iXHJcbiI7RXQucHVzaCgiUDtQR2VuZXJhbCIpLEV0LnB1c2goIkY7UDA7REcwRzg7TTI1NSIpLGV0''@;'; put 'put ''WyIhY29scyJdJiZmdW5jdGlvbiBQZShldCxjdCl7Y3QuZm9yRWFjaChmdW5jdGlvbihFdCxhdCl7dmFyIGJ0PSJGO1ciKyhhdCsxKSsiICIrKGF0KzEpKyIgIjtFdC5oaWRkZW4/YnQrPSIwIjooIm51bWJlciI9PXR5cGVvZiBFdC53aWR0aCYmIUV0LndweCYmKEV0LndweD1NNShFdC53aWR0''@;'; put 'put ''aCkpLCJudW1iZXIiPT10eXBlb2YgRXQud3B4JiYhRXQud2NoJiYoRXQud2NoPXg1KEV0LndweCkpLCJudW1iZXIiPT10eXBlb2YgRXQud2NoJiYoYnQrPU1hdGgucm91bmQoRXQud2NoKSkpLCIgIiE9YnQuY2hhckF0KGJ0Lmxlbmd0aC0xKSYmZXQucHVzaChidCl9KX0oRXQsZXRbIiFjb2xz''@;'; put 'put ''Il0pLGV0WyIhcm93cyJdJiZmdW5jdGlvbiBOZShldCxjdCl7Y3QuZm9yRWFjaChmdW5jdGlvbihFdCxhdCl7dmFyIGJ0PSJGOyI7RXQuaGlkZGVuP2J0Kz0iTTA7IjpFdC5ocHQ/YnQrPSJNIisyMCpFdC5ocHQrIjsiOkV0LmhweCYmKGJ0Kz0iTSIrMjAqVTMoRXQuaHB4KSsiOyIpLGJ0Lmxl''@;'; put 'put ''bmd0aD4yJiZldC5wdXNoKGJ0KyJSIisoYXQrMSkpfSl9KEV0LGV0WyIhcm93cyJdKSxFdC5wdXNoKCJCO1kiKyhidC5lLnItYnQucy5yKzEpKyI7WCIrKGJ0LmUuYy1idC5zLmMrMSkrIjtEIitbYnQucy5jLGJ0LnMucixidC5lLmMsYnQuZS5yXS5qb2luKCIgIikpO2Zvcih2YXIgS3Q9YnQu''@;'; put 'put ''cy5yO0t0PD1idC5lLnI7KytLdClmb3IodmFyIFRuPWJ0LnMuYztUbjw9YnQuZS5jOysrVG4pe3ZhciBycj1xaSh7cjpLdCxjOlRufSk7KGp0PWt0PyhldFtLdF18fFtdKVtUbl06ZXRbcnJdKSYmKG51bGwhPWp0LnZ8fGp0LmYmJiFqdC5GKSYmYXQucHVzaCh5ZShqdCwwLEt0LFRuKSl9cmV0''@;'; put 'put ''dXJuIEV0LmpvaW4oT3QpK090K2F0LmpvaW4oT3QpK090KyJFIitPdH19fSgpLER2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUihvZSxnZSl7Zm9yKHZhciBwZT1vZS5zcGxpdCgiXG4iKSx5ZT0tMSxQZT0tMSxOZT0wLFllPVtdO05lIT09cGUubGVuZ3RoOysrTmUpaWYoIkJPVCIhPT1wZVtOZV0u''@;'; put 'put ''dHJpbSgpKXtpZighKHllPDApKXtmb3IodmFyIGV0PXBlW05lXS50cmltKCkuc3BsaXQoIiwiKSxjdD1ldFswXSxFdD1ldFsxXSxhdD1wZVsrK05lXXx8IiI7MSYoYXQubWF0Y2goL1siXS9nKXx8W10pLmxlbmd0aCYmTmU8cGUubGVuZ3RoLTE7KWF0Kz0iXG4iK3BlWysrTmVdO3N3aXRjaChh''@;'; put 'put ''dD1hdC50cmltKCksK2N0KXtjYXNlLTE6aWYoIkJPVCI9PT1hdCl7WWVbKyt5ZV09W10sUGU9MDtjb250aW51ZX1pZigiRU9EIiE9PWF0KXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIERJRiBzcGVjaWFsIGNvbW1hbmQgIithdCk7YnJlYWs7Y2FzZSAwOlllW3llXVtQZV09IlRSVUUi''@;'; put 'put ''PT09YXR8fCJGQUxTRSIhPT1hdCYmKGlzTmFOKFF0KEV0KSk/aXNOYU4oc24oRXQpLmdldERhdGUoKSk/RXQ6SGUoRXQpOlF0KEV0KSksKytQZTticmVhaztjYXNlIDE6KGF0PShhdD1hdC5zbGljZSgxLGF0Lmxlbmd0aC0xKSkucmVwbGFjZSgvIiIvZywnIicpKSYmYXQubWF0Y2goL149Ii4q''@;'; put 'put ''IiQvKSYmKGF0PWF0LnNsaWNlKDIsLTEpKSxZZVt5ZV1bUGUrK109IiIhPT1hdD9hdDpudWxsfWlmKCJFT0QiPT09YXQpYnJlYWt9fWVsc2UgWWVbKyt5ZV09W10sUGU9MDtyZXR1cm4gZ2UmJmdlLnNoZWV0Um93cyYmKFllPVllLnNsaWNlKDAsZ2Uuc2hlZXRSb3dzKSksWWV9ZnVuY3Rpb24g''@;'; put 'put ''ayhvZSxnZSl7cmV0dXJuIHA0KGZ1bmN0aW9uIFMob2UsZ2Upe3N3aXRjaChnZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIFIoX2UuZGVjb2RlKG9lKSxnZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBSKG9lLGdlKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFIob2UudG9TdHJpbmcoImJpbmFyeSIp''@;'; put 'put ''LGdlKTtjYXNlImFycmF5IjpyZXR1cm4gUih1dChvZSksZ2UpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitnZS50eXBlKX0ob2UsZ2UpLGdlKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gRyhvZSxnZSl7cmV0dXJuIHRoKGsob2UsZ2UpLGdlKX0sdG9fc2hlZXQ6''@;'; put 'put ''ayxmcm9tX3NoZWV0OmZ1bmN0aW9uKCl7dmFyIG9lPWZ1bmN0aW9uKHllLFBlLE5lLFllLGV0KXt5ZS5wdXNoKFBlKSx5ZS5wdXNoKE5lKyIsIitZZSkseWUucHVzaCgnIicrZXQucmVwbGFjZSgvIi9nLCciIicpKyciJyl9LGdlPWZ1bmN0aW9uKHllLFBlLE5lLFllKXt5ZS5wdXNoKFBlKyIs''@;'; put 'put ''IitOZSkseWUucHVzaCgxPT1QZT8nIicrWWUucmVwbGFjZSgvIi9nLCciIicpKyciJzpZZSl9O3JldHVybiBmdW5jdGlvbih5ZSl7dmFyIFllLFBlPVtdLE5lPW9vKHllWyIhcmVmIl0pLGV0PUFycmF5LmlzQXJyYXkoeWUpO29lKFBlLCJUQUJMRSIsMCwxLCJzaGVldGpzIiksb2UoUGUsIlZF''@;'; put 'put ''Q1RPUlMiLDAsTmUuZS5yLU5lLnMucisxLCIiKSxvZShQZSwiVFVQTEVTIiwwLE5lLmUuYy1OZS5zLmMrMSwiIiksb2UoUGUsIkRBVEEiLDAsMCwiIik7Zm9yKHZhciBjdD1OZS5zLnI7Y3Q8PU5lLmUucjsrK2N0KXtnZShQZSwtMSwwLCJCT1QiKTtmb3IodmFyIEV0PU5lLnMuYztFdDw9TmUu''@;'; put 'put ''ZS5jOysrRXQpe3ZhciBhdD1xaSh7cjpjdCxjOkV0fSk7aWYoWWU9ZXQ/KHllW2N0XXx8W10pW0V0XTp5ZVthdF0pc3dpdGNoKFllLnQpe2Nhc2UibiI6dmFyIGJ0PVllLnc7IWJ0JiZudWxsIT1ZZS52JiYoYnQ9WWUudiksbnVsbD09YnQ/Z2UoUGUsMSwwLFllLmYmJiFZZS5GPyI9IitZZS5m''@;'; put 'put ''OiIiKTpnZShQZSwwLGJ0LCJWIik7YnJlYWs7Y2FzZSJiIjpnZShQZSwwLFllLnY/MTowLFllLnY/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UicyI6Z2UoUGUsMSwwLGlzTmFOKFllLnYpP1llLnY6Jz0iJytZZS52KyciJyk7YnJlYWs7Y2FzZSJkIjpZZS53fHwoWWUudz1BLmZvcm1hdChZ''@;'; put 'put ''ZS56fHxBLl90YWJsZVsxNF0sUWUoSGUoWWUudikpKSksZ2UoUGUsMCxZZS53LCJWIik7YnJlYWs7ZGVmYXVsdDpnZShQZSwxLDAsIiIpfWVsc2UgZ2UoUGUsMSwwLCIiKX19cmV0dXJuIGdlKFBlLC0xLDAsIkVPRCIpLFBlLmpvaW4oIlxyXG4iKX19KCl9fSgpLEs2PWZ1bmN0aW9uKCl7ZnVu''@;'; put 'put ''Y3Rpb24gUyhZZSl7cmV0dXJuIFllLnJlcGxhY2UoL1xcYi9nLCJcXCIpLnJlcGxhY2UoL1xcYy9nLCI6IikucmVwbGFjZSgvXFxuL2csIlxuIil9ZnVuY3Rpb24gUihZZSl7cmV0dXJuIFllLnJlcGxhY2UoL1xcL2csIlxcYiIpLnJlcGxhY2UoLzovZywiXFxjIikucmVwbGFjZSgvXG4vZywi''@;'; put 'put ''XFxuIil9ZnVuY3Rpb24gRyhZZSxldCl7cmV0dXJuIHA0KGZ1bmN0aW9uIGsoWWUsZXQpe2Zvcih2YXIgY3Q9WWUuc3BsaXQoIlxuIiksRXQ9LTEsYXQ9LTEsYnQ9MCxqdD1bXTtidCE9PWN0Lmxlbmd0aDsrK2J0KXt2YXIga3Q9Y3RbYnRdLnRyaW0oKS5zcGxpdCgiOiIpO2lmKCJjZWxsIj09''@;'; put 'put ''PWt0WzBdKXt2YXIgT3Q9Tm8oa3RbMV0pO2lmKGp0Lmxlbmd0aDw9T3Qucilmb3IoRXQ9anQubGVuZ3RoO0V0PD1PdC5yOysrRXQpanRbRXRdfHwoanRbRXRdPVtdKTtzd2l0Y2goRXQ9T3QucixhdD1PdC5jLGt0WzJdKXtjYXNlInQiOmp0W0V0XVthdF09UyhrdFszXSk7YnJlYWs7Y2FzZSJ2''@;'; put 'put ''IjpqdFtFdF1bYXRdPStrdFszXTticmVhaztjYXNlInZ0ZiI6dmFyIEt0PWt0W2t0Lmxlbmd0aC0xXTtjYXNlInZ0YyI6anRbRXRdW2F0XT0ibmwiPT09a3RbM10/ISEra3RbNF06K2t0WzRdLCJ2dGYiPT1rdFsyXSYmKGp0W0V0XVthdF09W2p0W0V0XVthdF0sS3RdKX19fXJldHVybiBldCYm''@;'; put 'put ''ZXQuc2hlZXRSb3dzJiYoanQ9anQuc2xpY2UoMCxldC5zaGVldFJvd3MpKSxqdH0oWWUsZXQpLGV0KX12YXIgb2U9WyJzb2NpYWxjYWxjOnZlcnNpb246MS41IiwiTUlNRS1WZXJzaW9uOiAxLjAiLCJDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9U29jaWFsQ2FsY1Nw''@;'; put 'put ''cmVhZHNoZWV0Q29udHJvbFNhdmUiXS5qb2luKCJcbiIpLGdlPVsiLS1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSIsIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCJdLmpvaW4oIlxuIikrIlxuIixwZT1bIiMgU29jaWFsQ2FsYyBTcHJlYWRzaGVldCBD''@;'; put 'put ''b250cm9sIFNhdmUiLCJwYXJ0OnNoZWV0Il0uam9pbigiXG4iKSx5ZT0iLS1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZS0tIjtmdW5jdGlvbiBQZShZZSl7aWYoIVllfHwhWWVbIiFyZWYiXSlyZXR1cm4iIjtmb3IodmFyIEV0LGV0PVtdLGN0PVtdLGF0PSIiLGJ0PU1zKFllWyIh''@;'; put 'put ''cmVmIl0pLGp0PUFycmF5LmlzQXJyYXkoWWUpLGt0PWJ0LnMucjtrdDw9YnQuZS5yOysra3QpZm9yKHZhciBPdD1idC5zLmM7T3Q8PWJ0LmUuYzsrK090KWlmKGF0PXFpKHtyOmt0LGM6T3R9KSwoRXQ9anQ/KFllW2t0XXx8W10pW090XTpZZVthdF0pJiZudWxsIT1FdC52JiYieiIhPT1FdC50''@;'; put 'put ''KXtzd2l0Y2goY3Q9WyJjZWxsIixhdCwidCJdLEV0LnQpe2Nhc2UicyI6Y2FzZSJzdHIiOmN0LnB1c2goUihFdC52KSk7YnJlYWs7Y2FzZSJuIjpFdC5mPyhjdFsyXT0idnRmIixjdFszXT0ibiIsY3RbNF09RXQudixjdFs1XT1SKEV0LmYpKTooY3RbMl09InYiLGN0WzNdPUV0LnYpO2JyZWFr''@;'; put 'put ''O2Nhc2UiYiI6Y3RbMl09InZ0IisoRXQuZj8iZiI6ImMiKSxjdFszXT0ibmwiLGN0WzRdPUV0LnY/IjEiOiIwIixjdFs1XT1SKEV0LmZ8fChFdC52PyJUUlVFIjoiRkFMU0UiKSk7YnJlYWs7Y2FzZSJkIjp2YXIgS3Q9UWUoSGUoRXQudikpO2N0WzJdPSJ2dGMiLGN0WzNdPSJuZCIsY3RbNF09''@;'; put 'put ''IiIrS3QsY3RbNV09RXQud3x8QS5mb3JtYXQoRXQuenx8QS5fdGFibGVbMTRdLEt0KTticmVhaztjYXNlImUiOmNvbnRpbnVlfWV0LnB1c2goY3Quam9pbigiOiIpKX1yZXR1cm4gZXQucHVzaCgic2hlZXQ6YzoiKyhidC5lLmMtYnQucy5jKzEpKyI6cjoiKyhidC5lLnItYnQucy5yKzEpKyI6''@;'; put 'put ''dHZmOjEiKSxldC5wdXNoKCJ2YWx1ZWZvcm1hdDoxOnRleHQtd2lraSIpLGV0LmpvaW4oIlxuIil9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIFEoWWUsZXQpe3JldHVybiB0aChHKFllLGV0KSxldCl9LHRvX3NoZWV0OkcsZnJvbV9zaGVldDpmdW5jdGlvbiBOZShZZSl7cmV0dXJuW29l''@;'; put 'put ''LGdlLHBlLGdlLFBlKFllKSx5ZV0uam9pbigiXG4iKX19fSgpLGozPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUyhOZSxZZSxldCxjdCxFdCl7RXQucmF3P1llW2V0XVtjdF09TmU6IiI9PT1OZXx8KFllW2V0XVtjdF09UmkoTmUsRXQpP1JpKE5lLEV0KS52Ok5lKX12YXIgaz17NDQ6IiwiLDk6Ilx0''@;'; put 'put ''Iiw1OToiOyJ9LEc9ezQ0OjMsOToyLDU5OjF9O2Z1bmN0aW9uIFEoTmUpe2Zvcih2YXIgWWU9e30sZXQ9ITEsY3Q9MCxFdD0wO2N0PE5lLmxlbmd0aDsrK2N0KTM0PT0oRXQ9TmUuY2hhckNvZGVBdChjdCkpP2V0PSFldDohZXQmJkV0IGluIGsmJihZZVtFdF09KFllW0V0XXx8MCkrMSk7Zm9y''@;'; put 'put ''KGN0IGluIEV0PVtdLFllKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChZZSxjdCkmJkV0LnB1c2goW1llW2N0XSxjdF0pO2lmKCFFdC5sZW5ndGgpZm9yKGN0IGluIFllPUcpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFllLGN0KSYmRXQucHVzaChb''@;'; put 'put ''WWVbY3RdLGN0XSk7cmV0dXJuIEV0LnNvcnQoZnVuY3Rpb24oYXQsYnQpe3JldHVybiBhdFswXS1idFswXXx8R1thdFsxXV0tR1tidFsxXV19KSxrW0V0LnBvcCgpWzFdXX1mdW5jdGlvbiBnZShOZSxZZSl7cmV0dXJuIVllfHwhWWUuUFJOfHwic2VwPSI9PU5lLnNsaWNlKDAsNCl8fE5lLmlu''@;'; put 'put ''ZGV4T2YoIlx0Iik+PTB8fE5lLmluZGV4T2YoIiwiKT49MHx8TmUuaW5kZXhPZigiOyIpPj0wP2Z1bmN0aW9uIG9lKE5lLFllKXt2YXIgZXQ9WWV8fHt9LGN0PSIiO251bGwhPWxlJiZudWxsPT1ldC5kZW5zZSYmKGV0LmRlbnNlPWxlKTt2YXIgRXQ9ZXQuZGVuc2U/W106e30sYXQ9e3M6e2M6''@;'; put 'put ''MCxyOjB9LGU6e2M6MCxyOjB9fTsic2VwPSI9PU5lLnNsaWNlKDAsNCk/MTM9PU5lLmNoYXJDb2RlQXQoNSkmJjEwPT1OZS5jaGFyQ29kZUF0KDYpPyhjdD1OZS5jaGFyQXQoNCksTmU9TmUuc2xpY2UoNykpOjEzPT1OZS5jaGFyQ29kZUF0KDUpfHwxMD09TmUuY2hhckNvZGVBdCg1KT8oY3Q9''@;'; put 'put ''TmUuY2hhckF0KDQpLE5lPU5lLnNsaWNlKDYpKTpjdD1RKE5lLnNsaWNlKDAsMTAyNCkpOmN0PVEoTmUuc2xpY2UoMCwxMDI0KSk7dmFyIGJ0PTAsanQ9MCxrdD0wLE90PTAsS3Q9MCxUbj1jdC5jaGFyQ29kZUF0KDApLHJyPSExLFNuPTAsbHI9TmUuY2hhckNvZGVBdCgwKTtOZT1OZS5yZXBs''@;'; put 'put ''YWNlKC9cclxuL2dtLCJcbiIpO3ZhciBYbj1udWxsIT1ldC5kYXRlTkY/ZnVuY3Rpb24gVWUoUyl7dmFyIFI9Im51bWJlciI9PXR5cGVvZiBTP0EuX3RhYmxlW1NdOlM7cmV0dXJuIFI9Ui5yZXBsYWNlKHdlLCIoXFxkKykiKSxuZXcgUmVnRXhwKCJeIitSKyIkIil9KGV0LmRhdGVORik6bnVs''@;'; put 'put ''bDtmdW5jdGlvbiBCbigpe3ZhciBmcj1OZS5zbGljZShPdCxLdCksYnI9e307aWYoJyInPT1mci5jaGFyQXQoMCkmJiciJz09ZnIuY2hhckF0KGZyLmxlbmd0aC0xKSYmKGZyPWZyLnNsaWNlKDEsLTEpLnJlcGxhY2UoLyIiL2csJyInKSksMD09PWZyLmxlbmd0aClici50PSJ6IjtlbHNlIGlm''@;'; put 'put ''KGV0LnJhdylici50PSJzIixici52PWZyO2Vsc2UgaWYoMD09PWZyLnRyaW0oKS5sZW5ndGgpYnIudD0icyIsYnIudj1mcjtlbHNlIGlmKDYxPT1mci5jaGFyQ29kZUF0KDApKTM0PT1mci5jaGFyQ29kZUF0KDEpJiYzND09ZnIuY2hhckNvZGVBdChmci5sZW5ndGgtMSk/KGJyLnQ9InMiLGJy''@;'; put 'put ''LnY9ZnIuc2xpY2UoMiwtMSkucmVwbGFjZSgvIiIvZywnIicpKTpmdW5jdGlvbiBobmUoUyl7cmV0dXJuIDEhPVMubGVuZ3RofShmcik/KGJyLnQ9Im4iLGJyLmY9ZnIuc2xpY2UoMSkpOihici50PSJzIixici52PWZyKTtlbHNlIGlmKCJUUlVFIj09ZnIpYnIudD0iYiIsYnIudj0hMDtlbHNl''@;'; put 'put ''IGlmKCJGQUxTRSI9PWZyKWJyLnQ9ImIiLGJyLnY9ITE7ZWxzZSBpZihpc05hTihrdD1RdChmcikpKWlmKCFpc05hTihzbihmcikuZ2V0RGF0ZSgpKXx8WG4mJmZyLm1hdGNoKFhuKSl7YnIuej1ldC5kYXRlTkZ8fEEuX3RhYmxlWzE0XTt2YXIgZXI9MDtYbiYmZnIubWF0Y2goWG4pJiYoZnI9''@;'; put 'put ''ZnVuY3Rpb24gSmUoUyxSLGspe3ZhciBHPS0xLFE9LTEsb2U9LTEsZ2U9LTEscGU9LTEseWU9LTE7KFIubWF0Y2god2UpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihZZSxldCl7dmFyIGN0PXBhcnNlSW50KGtbZXQrMV0sMTApO3N3aXRjaChZZS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2Fz''@;'; put 'put ''ZSJ5IjpHPWN0O2JyZWFrO2Nhc2UiZCI6b2U9Y3Q7YnJlYWs7Y2FzZSJoIjpnZT1jdDticmVhaztjYXNlInMiOnllPWN0O2JyZWFrO2Nhc2UibSI6Z2U+PTA/cGU9Y3Q6UT1jdH19KSx5ZT49MCYmLTE9PXBlJiZRPj0wJiYocGU9USxRPS0xKTt2YXIgUGU9KCIiKyhHPj0wP0c6KG5ldyBEYXRl''@;'; put 'put ''KS5nZXRGdWxsWWVhcigpKSkuc2xpY2UoLTQpKyItIisoIjAwIisoUT49MT9ROjEpKS5zbGljZSgtMikrIi0iKygiMDAiKyhvZT49MT9vZToxKSkuc2xpY2UoLTIpOzc9PVBlLmxlbmd0aCYmKFBlPSIwIitQZSksOD09UGUubGVuZ3RoJiYoUGU9IjIwIitQZSk7dmFyIE5lPSgiMDAiKyhnZT49''@;'; put 'put ''MD9nZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisocGU+PTA/cGU6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKHllPj0wP3llOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PWdlJiYtMT09cGUmJi0xPT15ZT9QZTotMT09RyYmLTE9PVEmJi0xPT1vZT9OZTpQZSsiVCIrTmV9KDAsZXQuZGF0ZU5G''@;'; put 'put ''LGZyLm1hdGNoKFhuKXx8W10pLGVyPTEpLGV0LmNlbGxEYXRlcz8oYnIudD0iZCIsYnIudj1IZShmcixlcikpOihici50PSJuIixici52PVFlKEhlKGZyLGVyKSkpLCExIT09ZXQuY2VsbFRleHQmJihici53PUEuZm9ybWF0KGJyLnosYnIudiBpbnN0YW5jZW9mIERhdGU/UWUoYnIudik6YnIu''@;'; put 'put ''dikpLGV0LmNlbGxORnx8ZGVsZXRlIGJyLnp9ZWxzZSBici50PSJzIixici52PWZyO2Vsc2UgYnIudD0ibiIsITEhPT1ldC5jZWxsVGV4dCYmKGJyLnc9ZnIpLGJyLnY9a3Q7aWYoInoiPT1ici50fHwoZXQuZGVuc2U/KEV0W2J0XXx8KEV0W2J0XT1bXSksRXRbYnRdW2p0XT1icik6RXRbcWko''@;'; put 'put ''e2M6anQscjpidH0pXT1iciksbHI9TmUuY2hhckNvZGVBdChPdD1LdCsxKSxhdC5lLmM8anQmJihhdC5lLmM9anQpLGF0LmUucjxidCYmKGF0LmUucj1idCksU249PVRuKSsranQ7ZWxzZSBpZihqdD0wLCsrYnQsZXQuc2hlZXRSb3dzJiZldC5zaGVldFJvd3M8PWJ0KXJldHVybiEwfWU6Zm9y''@;'; put 'put ''KDtLdDxOZS5sZW5ndGg7KytLdClzd2l0Y2goU249TmUuY2hhckNvZGVBdChLdCkpe2Nhc2UgMzQ6MzQ9PT1sciYmKHJyPSFycik7YnJlYWs7Y2FzZSBUbjpjYXNlIDEwOmNhc2UgMTM6aWYoIXJyJiZCbigpKWJyZWFrIGV9cmV0dXJuIEt0LU90PjAmJkJuKCksRXRbIiFyZWYiXT1yYShhdCks''@;'; put 'put ''RXR9KE5lLFllKTpwNChmdW5jdGlvbiBSKE5lLFllKXt2YXIgZXQ9WWV8fHt9LGN0PVtdO2lmKCFOZXx8MD09PU5lLmxlbmd0aClyZXR1cm4gY3Q7Zm9yKHZhciBFdD1OZS5zcGxpdCgvW1xyXG5dLyksYXQ9RXQubGVuZ3RoLTE7YXQ+PTAmJjA9PT1FdFthdF0ubGVuZ3RoOyktLWF0O2Zvcih2''@;'; put 'put ''YXIgYnQ9MTAsanQ9MCxrdD0wO2t0PD1hdDsrK2t0KS0xPT0oanQ9RXRba3RdLmluZGV4T2YoIiAiKSk/anQ9RXRba3RdLmxlbmd0aDpqdCsrLGJ0PU1hdGgubWF4KGJ0LGp0KTtmb3Ioa3Q9MDtrdDw9YXQ7KytrdCl7Y3Rba3RdPVtdO3ZhciBPdD0wO2ZvcihTKEV0W2t0XS5zbGljZSgwLGJ0''@;'; put 'put ''KS50cmltKCksY3Qsa3QsT3QsZXQpLE90PTE7T3Q8PShFdFtrdF0ubGVuZ3RoLWJ0KS8xMCsxOysrT3QpUyhFdFtrdF0uc2xpY2UoYnQrMTAqKE90LTEpLGJ0KzEwKk90KS50cmltKCksY3Qsa3QsT3QsZXQpfXJldHVybiBldC5zaGVldFJvd3MmJihjdD1jdC5zbGljZSgwLGV0LnNoZWV0Um93''@;'; put 'put ''cykpLGN0fShOZSxZZSksWWUpfWZ1bmN0aW9uIHBlKE5lLFllKXt2YXIgZXQ9IiIsY3Q9InN0cmluZyI9PVllLnR5cGU/WzAsMCwwLDBdOlFTKE5lLFllKTtzd2l0Y2goWWUudHlwZSl7Y2FzZSJiYXNlNjQiOmV0PV9lLmRlY29kZShOZSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5n''@;'; put 'put ''IjpldD1OZTticmVhaztjYXNlImJ1ZmZlciI6ZXQ9NjUwMDE9PVllLmNvZGVwYWdlP05lLnRvU3RyaW5nKCJ1dGY4Iik6WWUuY29kZXBhZ2UmJnR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZShZZS5jb2RlcGFnZSxOZSk6TmUudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFr''@;'; put 'put ''O2Nhc2UiYXJyYXkiOmV0PXV0KE5lKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitZZS50eXBlKX1yZXR1cm4gMjM5PT1jdFswXSYmMTg3PT1jdFsxXSYmMTkxPT1jdFsyXT9ldD1nbyhldC5zbGljZSgzKSk6ImJpbmFyeSI9PVllLnR5cGUmJnR5''@;'; put 'put ''cGVvZiBjcHRhYmxlPCJ1IiYmWWUuY29kZXBhZ2UmJihldD1jcHRhYmxlLnV0aWxzLmRlY29kZShZZS5jb2RlcGFnZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgyODU5MSxldCkpKSwic29jaWFsY2FsYzp2ZXJzaW9uOiI9PWV0LnNsaWNlKDAsMTkpP0s2LnRvX3NoZWV0KCJzdHJpbmciPT1ZZS50''@;'; put 'put ''eXBlP2V0OmdvKGV0KSxZZSk6Z2UoZXQsWWUpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiB5ZShOZSxZZSl7cmV0dXJuIHRoKHBlKE5lLFllKSxZZSl9LHRvX3NoZWV0OnBlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gUGUoTmUpe2Zvcih2YXIgY3QsWWU9W10sZXQ9b28oTmVbIiFyZWYiXSks''@;'; put 'put ''RXQ9QXJyYXkuaXNBcnJheShOZSksYXQ9ZXQucy5yO2F0PD1ldC5lLnI7KythdCl7Zm9yKHZhciBidD1bXSxqdD1ldC5zLmM7anQ8PWV0LmUuYzsrK2p0KXt2YXIga3Q9cWkoe3I6YXQsYzpqdH0pO2lmKChjdD1FdD8oTmVbYXRdfHxbXSlbanRdOk5lW2t0XSkmJm51bGwhPWN0LnYpe2Zvcih2''@;'; put 'put ''YXIgT3Q9KGN0Lnd8fChfbChjdCksY3Qudyl8fCIiKS5zbGljZSgwLDEwKTtPdC5sZW5ndGg8MTA7KU90Kz0iICI7YnQucHVzaChPdCsoMD09PWp0PyIgIjoiIikpfWVsc2UgYnQucHVzaCgiICAgICAgICAgICIpfVllLnB1c2goYnQuam9pbigiIikpfXJldHVybiBZZS5qb2luKCJcbiIpfX19''@;'; put 'put ''KCksSXY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKFZuLEJyLF9yKXtpZihWbil7bW4oVm4sVm4ubHx8MCk7Zm9yKHZhciBGbj1fci5FbnVtfHxMaTtWbi5sPFZuLmxlbmd0aDspe3ZhciBqcj1Wbi5yZWFkX3NoaWZ0KDIpLFppPUZuW2pyXXx8Rm5bNjU1MzVdLHlpPVZuLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''X2E9Vm4ubCt5aSxzbz1aaS5mJiZaaS5mKFZuLHlpLF9yKTtpZihWbi5sPV9hLEJyKHNvLFppLGpyKSlyZXR1cm59fX1mdW5jdGlvbiBrKFZuLEJyKXtpZighVm4pcmV0dXJuIFZuO3ZhciBfcj1Ccnx8e307bnVsbCE9bGUmJm51bGw9PV9yLmRlbnNlJiYoX3IuZGVuc2U9bGUpO3ZhciBGbj1f''@;'; put 'put ''ci5kZW5zZT9bXTp7fSxqcj0iU2hlZXQxIixaaT0wLHlpPXt9LF9hPVtqcl0sc289W10saWE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxMbz1fci5zaGVldFJvd3N8fDA7aWYoMj09Vm5bMl0pX3IuRW51bT1MaSxTKFZuLGZ1bmN0aW9uKEJpLElzLFBuKXtzd2l0Y2goUG4pe2Nhc2UgMDpf''@;'; put 'put ''ci52ZXJzPUJpLEJpPj00MDk2JiYoX3IucXBybz0hMCk7YnJlYWs7Y2FzZSA2OmlhPUJpO2JyZWFrO2Nhc2UgMTU6Y2FzZSA1MTpfci5xcHJvfHwoQmlbMV0udj1CaVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09UG4mJiEoMTEyJn5CaVsyXSkmJigxNSZCaVsy''@;'; put 'put ''XSk+MSYmKDE1JkJpWzJdKTwxNSYmKEJpWzFdLno9X3IuZGF0ZU5GfHxBLl90YWJsZVsxNF0sX3IuY2VsbERhdGVzJiYoQmlbMV0udD0iZCIsQmlbMV0udj11bihCaVsxXS52KSkpO3ZhciBXbz1fci5kZW5zZT8oRm5bQmlbMF0ucl18fFtdKVtCaVswXS5jXTpGbltxaShCaVswXSldO2lmKFdv''@;'; put 'put ''KXtXby50PUJpWzFdLnQsV28udj1CaVsxXS52LG51bGwhPUJpWzFdLnomJihXby56PUJpWzFdLnopLG51bGwhPUJpWzFdLmYmJihXby5mPUJpWzFdLmYpO2JyZWFrfV9yLmRlbnNlPyhGbltCaVswXS5yXXx8KEZuW0JpWzBdLnJdPVtdKSxGbltCaVswXS5yXVtCaVswXS5jXT1CaVsxXSk6Rm5b''@;'; put 'put ''cWkoQmlbMF0pXT1CaVsxXX19LF9yKTtlbHNle2lmKDI2IT1WblsyXSYmMTQhPVZuWzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK1ZuWzJdKTtfci5FbnVtPWtyLDE0PT1WblsyXSYmKF9yLnFwcm89ITAsVm4ubD0wKSxTKFZuLGZ1bmN0aW9uKEJpLElzLFBu''@;'; put 'put ''KXtzd2l0Y2goUG4pe2Nhc2UgMjI6QmlbMV0udj1CaVsxXS52LnNsaWNlKDEpO2Nhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMzc6Y2FzZSAzOTpjYXNlIDQwOmlmKEJpWzNdPlppJiYoRm5bIiFyZWYiXT1yYShpYSkseWlbanJdPUZuLEZuPV9yLmRlbnNlP1tdOnt9LGlhPXtzOntyOjAs''@;'; put 'put ''YzowfSxlOntyOjAsYzowfX0sX2EucHVzaChqcj0iU2hlZXQiKygoWmk9QmlbM10pKzEpKSksTG8+MCYmQmlbMF0ucj49TG8pYnJlYWs7X3IuZGVuc2U/KEZuW0JpWzBdLnJdfHwoRm5bQmlbMF0ucl09W10pLEZuW0JpWzBdLnJdW0JpWzBdLmNdPUJpWzFdKTpGbltxaShCaVswXSldPUJpWzFd''@;'; put 'put ''LGlhLmUuYzxCaVswXS5jJiYoaWEuZS5jPUJpWzBdLmMpLGlhLmUucjxCaVswXS5yJiYoaWEuZS5yPUJpWzBdLnIpO2JyZWFrO2Nhc2UgMjc6QmlbMTRlM10mJihzb1tCaVsxNGUzXVswXV09QmlbMTRlM11bMV0pfX0sX3IpfWlmKEZuWyIhcmVmIl09cmEoaWEpLHlpW2pyXT1Gbiwhc28ubGVu''@;'; put 'put ''Z3RoKXJldHVybntTaGVldE5hbWVzOl9hLFNoZWV0czp5aX07Zm9yKHZhciBPYT17fSxobz1bXSxKYT0wO0phPHNvLmxlbmd0aDsrK0phKXlpW19hW0phXV0mJihoby5wdXNoKHNvW0phXSksT2Fbc29bSmFdXT15aVtfYVtKYV1dKTtyZXR1cm57U2hlZXROYW1lczpobyxTaGVldHM6T2F9fWZ1''@;'; put 'put ''bmN0aW9uIFBlKFZuLEJyLF9yKXt2YXIgRm49W3tjOjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gX3IucXBybyYmMjA3NjghPV9yLnZlcnM/KEZuWzBdLmM9Vm4ucmVhZF9zaGlmdCgxKSxWbi5sKyssRm5bMF0ucj1Wbi5yZWFkX3NoaWZ0KDIpLFZuLmwrPTIpOihGblsyXT1Wbi5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpLEZuWzBdLmM9Vm4ucmVhZF9zaGlmdCgyKSxGblswXS5yPVZuLnJlYWRfc2hpZnQoMikpLEZufWZ1bmN0aW9uIE5lKFZuLEJyLF9yKXt2YXIgRm49Vm4ubCtCcixqcj1QZShWbiwwLF9yKTtpZihqclsxXS50PSJzIiwyMDc2OD09X3IudmVycyl7Vm4ubCsrO3ZhciBaaT1Wbi5y''@;'; put 'put ''ZWFkX3NoaWZ0KDEpO3JldHVybiBqclsxXS52PVZuLnJlYWRfc2hpZnQoWmksInV0ZjgiKSxqcn1yZXR1cm4gX3IucXBybyYmVm4ubCsrLGpyWzFdLnY9Vm4ucmVhZF9zaGlmdChGbi1Wbi5sLCJjc3RyIiksanJ9ZnVuY3Rpb24gWWUoVm4sQnIsX3Ipe3ZhciBGbj1ibig3K19yLmxlbmd0aCk7''@;'; put 'put ''Rm4ud3JpdGVfc2hpZnQoMSwyNTUpLEZuLndyaXRlX3NoaWZ0KDIsQnIpLEZuLndyaXRlX3NoaWZ0KDIsVm4pLEZuLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIganI9MDtqcjxGbi5sZW5ndGg7Kytqcil7dmFyIFppPV9yLmNoYXJDb2RlQXQoanIpO0ZuLndyaXRlX3NoaWZ0KDEsWmk+PTEy''@;'; put 'put ''OD85NTpaaSl9cmV0dXJuIEZuLndyaXRlX3NoaWZ0KDEsMCksRm59ZnVuY3Rpb24gY3QoVm4sQnIsX3Ipe3ZhciBGbj1ibig3KTtyZXR1cm4gRm4ud3JpdGVfc2hpZnQoMSwyNTUpLEZuLndyaXRlX3NoaWZ0KDIsQnIpLEZuLndyaXRlX3NoaWZ0KDIsVm4pLEZuLndyaXRlX3NoaWZ0KDIsX3Is''@;'; put 'put ''ImkiKSxGbn1mdW5jdGlvbiBhdChWbixCcixfcil7dmFyIEZuPWJuKDEzKTtyZXR1cm4gRm4ud3JpdGVfc2hpZnQoMSwyNTUpLEZuLndyaXRlX3NoaWZ0KDIsQnIpLEZuLndyaXRlX3NoaWZ0KDIsVm4pLEZuLndyaXRlX3NoaWZ0KDgsX3IsImYiKSxGbn1mdW5jdGlvbiBqdChWbixCcixfcil7''@;'; put 'put ''dmFyIEZuPTMyNzY4JkJyO3JldHVybiBCcj0oRm4/Vm46MCkrKChCciY9LTMyNzY5KT49ODE5Mj9Cci0xNjM4NDpCciksKEZuPyIiOiIkIikrKF9yP1RhKEJyKTpqaShCcikpfXZhciBPdD17NTE6WyJGQUxTRSIsMF0sNTI6WyJUUlVFIiwwXSw3MDpbIkxFTiIsMV0sODA6WyJTVU0iLDY5XSw4''@;'; put 'put ''MTpbIkFWRVJBR0VBIiw2OV0sODI6WyJDT1VOVEEiLDY5XSw4MzpbIk1JTkEiLDY5XSw4NDpbIk1BWEEiLDY5XSwxMTE6WyJUIiwxXX0sS3Q9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIrIiwiLSIsIioiLCIvIiwiXiIsIj0iLCI8PiIsIjw9IiwiPj0iLCI8IiwiPiIsIiIsIiIsIiIs''@;'; put 'put ''IiIsIiYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXTtmdW5jdGlvbiBycihWbil7dmFyIEJyPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIEJyWzBdLnI9Vm4ucmVhZF9zaGlmdCgyKSxCclszXT1WbltWbi5sKytdLEJyWzBdLmM9Vm5bVm4ubCsrXSxCcn1mdW5jdGlvbiBscihWbixC''@;'; put 'put ''cixfcixGbil7dmFyIGpyPWJuKDYrRm4ubGVuZ3RoKTtqci53cml0ZV9zaGlmdCgyLFZuKSxqci53cml0ZV9zaGlmdCgxLF9yKSxqci53cml0ZV9zaGlmdCgxLEJyKSxqci53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIFppPTA7Wmk8Rm4ubGVuZ3RoOysrWmkpe3ZhciB5aT1Gbi5jaGFyQ29k''@;'; put 'put ''ZUF0KFppKTtqci53cml0ZV9zaGlmdCgxLHlpPj0xMjg/OTU6eWkpfXJldHVybiBqci53cml0ZV9zaGlmdCgxLDApLGpyfWZ1bmN0aW9uIEJuKFZuLEJyKXt2YXIgX3I9cnIoVm4pLEZuPVZuLnJlYWRfc2hpZnQoNCksanI9Vm4ucmVhZF9zaGlmdCg0KSxaaT1Wbi5yZWFkX3NoaWZ0KDIpO2lm''@;'; put 'put ''KDY1NTM1PT1aaSlyZXR1cm4gMD09PUZuJiYzMjIxMjI1NDcyPT09anI/KF9yWzFdLnQ9ImUiLF9yWzFdLnY9MTUpOjA9PT1GbiYmMzQ4OTY2MDkyOD09PWpyPyhfclsxXS50PSJlIixfclsxXS52PTQyKTpfclsxXS52PTAsX3I7dmFyIHlpPTMyNzY4JlppO3JldHVybiBaaT0oMzI3NjcmWmkp''@;'; put 'put ''LTE2NDQ2LF9yWzFdLnY9KDEtMip5aSkqKGpyKk1hdGgucG93KDIsWmkrMzIpK0ZuKk1hdGgucG93KDIsWmkpKSxfcn1mdW5jdGlvbiBmcihWbixCcixfcixGbil7dmFyIGpyPWJuKDE0KTtpZihqci53cml0ZV9zaGlmdCgyLFZuKSxqci53cml0ZV9zaGlmdCgxLF9yKSxqci53cml0ZV9zaGlm''@;'; put 'put ''dCgxLEJyKSwwPT1GbilyZXR1cm4ganIud3JpdGVfc2hpZnQoNCwwKSxqci53cml0ZV9zaGlmdCg0LDApLGpyLndyaXRlX3NoaWZ0KDIsNjU1MzUpLGpyO3ZhciBaaT0wLHlpPTAsc289MDtyZXR1cm4gRm48MCYmKFppPTEsRm49LUZuKSx5aT0wfE1hdGgubG9nMihGbiksMjE0NzQ4MzY0OCYo''@;'; put 'put ''c289KEZuLz1NYXRoLnBvdygyLHlpLTMxKSk+Pj4wKXx8KCsreWksc289KEZuLz0yKT4+PjApLEZuLT1zbyxzb3w9MjE0NzQ4MzY0OCxzbz4+Pj0wLEZuKj1NYXRoLnBvdygyLDMyKSxqci53cml0ZV9zaGlmdCg0LEZuPj4+MCksanIud3JpdGVfc2hpZnQoNCxzbyksanIud3JpdGVfc2hpZnQo''@;'; put 'put ''Mix5aSs9MTYzODMrKFppPzMyNzY4OjApKSxqcn1mdW5jdGlvbiBNaShWbixCcil7dmFyIF9yPXJyKFZuKSxGbj1Wbi5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gX3JbMV0udj1Gbixfcn1mdW5jdGlvbiBjYShWbixCcil7dmFyIF9yPWJuKDUrVm4ubGVuZ3RoKTtfci53cml0ZV9zaGlmdCgy''@;'; put 'put ''LDE0ZTMpLF9yLndyaXRlX3NoaWZ0KDIsQnIpO2Zvcih2YXIgRm49MDtGbjxWbi5sZW5ndGg7KytGbil7dmFyIGpyPVZuLmNoYXJDb2RlQXQoRm4pO19yW19yLmwrK109anI+MTI3Pzk1OmpyfXJldHVybiBfcltfci5sKytdPTAsX3J9dmFyIExpPXswOntuOiJCT0YiLGY6RWN9LDE6e246IkVP''@;'; put 'put ''RiJ9LDI6e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gcGUoVm4pe3ZhciBCcj17czp7YzowLHI6MH0sZTp7YzowLHI6MH19O3JldHVybiBCci5zLmM9Vm4ucmVhZF9zaGlmdCgyKSxCci5z''@;'; put 'put ''LnI9Vm4ucmVhZF9zaGlmdCgyKSxCci5lLmM9Vm4ucmVhZF9zaGlmdCgyKSxCci5lLnI9Vm4ucmVhZF9zaGlmdCgyKSw2NTUzNT09QnIucy5jJiYoQnIucy5jPUJyLmUuYz1Cci5zLnI9QnIuZS5yPTApLEJyfX0sNzp7bjoiV0lORE9XMSJ9LDg6e246IkNPTFcxIn0sOTp7bjoiV0lOVFdPIn0s''@;'; put 'put ''MTA6e246IkNPTFcyIn0sMTE6e246Ik5BTUUifSwxMjp7bjoiQkxBTksifSwxMzp7bjoiSU5URUdFUiIsZjpmdW5jdGlvbiBldChWbixCcixfcil7dmFyIEZuPVBlKFZuLDAsX3IpO3JldHVybiBGblsxXS52PVZuLnJlYWRfc2hpZnQoMiwiaSIpLEZufX0sMTQ6e246Ik5VTUJFUiIsZjpmdW5j''@;'; put 'put ''dGlvbiBFdChWbixCcixfcil7dmFyIEZuPVBlKFZuLDAsX3IpO3JldHVybiBGblsxXS52PVZuLnJlYWRfc2hpZnQoOCwiZiIpLEZufX0sMTU6e246IkxBQkVMIixmOk5lfSwxNjp7bjoiRk9STVVMQSIsZjpmdW5jdGlvbiBidChWbixCcixfcil7dmFyIEZuPVZuLmwrQnIsanI9UGUoVm4sMCxf''@;'; put 'put ''cik7aWYoanJbMV0udj1Wbi5yZWFkX3NoaWZ0KDgsImYiKSxfci5xcHJvKVZuLmw9Rm47ZWxzZXt2YXIgWmk9Vm4ucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gVG4oVm4sQnIpe21uKFZuLDApO2Zvcih2YXIgX3I9W10sRm49MCxqcj0iIixaaT0iIjtWbi5sPFZuLmxlbmd0aDspe3ZhciB5aT1W''@;'; put 'put ''bltWbi5sKytdO3N3aXRjaCh5aSl7Y2FzZSAwOl9yLnB1c2goVm4ucmVhZF9zaGlmdCg4LCJmIikpO2JyZWFrO2Nhc2UgMTpaaT1qdChCclswXS5jLFZuLnJlYWRfc2hpZnQoMiksITApLGpyPWp0KEJyWzBdLnIsVm4ucmVhZF9zaGlmdCgyKSwhMSksX3IucHVzaChaaStqcik7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAyOnZhciBfYT1qdChCclswXS5jLFZuLnJlYWRfc2hpZnQoMiksITApLHNvPWp0KEJyWzBdLnIsVm4ucmVhZF9zaGlmdCgyKSwhMSk7Wmk9anQoQnJbMF0uYyxWbi5yZWFkX3NoaWZ0KDIpLCEwKSxqcj1qdChCclswXS5yLFZuLnJlYWRfc2hpZnQoMiksITEpLF9yLnB1c2goX2Erc28rIjoi''@;'; put 'put ''K1ppK2pyKTticmVhaztjYXNlIDM6aWYoVm4ubDxWbi5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVuZCIpO2JyZWFrO2Nhc2UgNDpfci5wdXNoKCIoIitfci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgNTpfci5wdXNoKFZuLnJlYWRfc2hp''@;'; put 'put ''ZnQoMikpO2JyZWFrO2Nhc2UgNjpmb3IodmFyIGlhPSIiO3lpPVZuW1ZuLmwrK107KWlhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHlpKTtfci5wdXNoKCciJytpYS5yZXBsYWNlKC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6X3IucHVzaCgiLSIrX3IucG9wKCkpO2JyZWFrO2Nhc2UgMjM6''@;'; put 'put ''X3IucHVzaCgiKyIrX3IucG9wKCkpO2JyZWFrO2Nhc2UgMjI6X3IucHVzaCgiTk9UKCIrX3IucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6dmFyIExvPV9yLnBvcCgpLE9hPV9yLnBvcCgpO19yLnB1c2goWyJBTkQiLCJPUiJdW3lpLTIwXSsiKCIrT2ErIiwiK0xvKyIpIik7YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDppZih5aTwzMiYmS3RbeWldKUxvPV9yLnBvcCgpLE9hPV9yLnBvcCgpLF9yLnB1c2goT2ErS3RbeWldK0xvKTtlbHNle2lmKCFPdFt5aV0pcmV0dXJuIHlpPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK3lpLnRvU3RyaW5nKDE2KSk6eWk8PTI0P2Nv''@;'; put 'put ''bnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBvcCAiK3lpLnRvU3RyaW5nKDE2KSk6eWk8PTMwP2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK3lpLnRvU3RyaW5nKDE2KSk6eWk8PTExNT9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2Rl''@;'; put 'put ''ICIreWkudG9TdHJpbmcoMTYpKTpjb25zb2xlLmVycm9yKCJXSzEgdW5yZWNvZ25pemVkIG9wY29kZSAiK3lpLnRvU3RyaW5nKDE2KSk7aWYoNjk9PShGbj1PdFt5aV1bMV0pJiYoRm49Vm5bVm4ubCsrXSksRm4+X3IubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBiYWQg''@;'; put 'put ''Zm9ybXVsYSBwYXJzZSAweCIreWkudG9TdHJpbmcoMTYpKyI6fCIrX3Iuam9pbigifCIpKyJ8Iik7dmFyIGhvPV9yLnNsaWNlKC1Gbik7X3IubGVuZ3RoLT1Gbixfci5wdXNoKE90W3lpXVswXSsiKCIraG8uam9pbigiLCIpKyIpIil9fX0xPT1fci5sZW5ndGg/QnJbMV0uZj0iIitfclswXTpj''@;'; put 'put ''b25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgfCIrX3Iuam9pbigifCIpKyJ8Iil9KShWbi5zbGljZShWbi5sLFZuLmwrWmkpLGpyKSxWbi5sKz1aaX1yZXR1cm4ganJ9fSwyNDp7bjoiVEFCTEUifSwyNTp7bjoiT1JBTkdFIn0sMjY6e246IlBSQU5HRSJ9LDI3OntuOiJTUkFO''@;'; put 'put ''R0UifSwyODp7bjoiRlJBTkdFIn0sMjk6e246IktSQU5HRTEifSwzMjp7bjoiSFJBTkdFIn0sMzU6e246IktSQU5HRTIifSwzNjp7bjoiUFJPVEVDIn0sMzc6e246IkZPT1RFUiJ9LDM4OntuOiJIRUFERVIifSwzOTp7bjoiU0VUVVAifSw0MDp7bjoiTUFSR0lOUyJ9LDQxOntuOiJMQUJFTEZN''@;'; put 'put ''VCJ9LDQyOntuOiJUSVRMRVMifSw0Mzp7bjoiU0hFRVRKUyJ9LDQ1OntuOiJHUkFQSCJ9LDQ2OntuOiJOR1JBUEgifSw0Nzp7bjoiQ0FMQ0NPVU5UIn0sNDg6e246IlVORk9STUFUVEVEIn0sNDk6e246IkNVUlNPUlcxMiJ9LDUwOntuOiJXSU5ET1cifSw1MTp7bjoiU1RSSU5HIixmOk5lfSw1''@;'; put 'put ''NTp7bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElU''@;'; put 'put ''In0sNjg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/''@;'; put 'put ''PyJ9LDEwNTp7bjoiTVJBTkdFUz8/In0sNjU1MzU6e246IiJ9fSxrcj17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJD''@;'; put 'put ''T0xVTU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRN''@;'; put 'put ''QUlOIn0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIFNuKFZuLEJyKXt2YXIgX3I9cnIoVm4pO3Jl''@;'; put 'put ''dHVybiBfclsxXS50PSJzIixfclsxXS52PVZuLnJlYWRfc2hpZnQoQnItNCwiY3N0ciIpLF9yfX0sMjM6e246Ik5VTUJFUjE3IixmOkJufSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gWG4oVm4sQnIpe3ZhciBfcj1ycihWbik7X3JbMV0udj1Wbi5yZWFkX3NoaWZ0KDIpO3ZhciBGbj1f''@;'; put 'put ''clsxXS52Pj4xO2lmKDEmX3JbMV0udilzd2l0Y2goNyZGbil7Y2FzZSAwOkZuPTVlMyooRm4+PjMpO2JyZWFrO2Nhc2UgMTpGbj01MDAqKEZuPj4zKTticmVhaztjYXNlIDI6Rm49KEZuPj4zKS8yMDticmVhaztjYXNlIDM6Rm49KEZuPj4zKS8yMDA7YnJlYWs7Y2FzZSA0OkZuPShGbj4+Mykv''@;'; put 'put ''MmUzO2JyZWFrO2Nhc2UgNTpGbj0oRm4+PjMpLzJlNDticmVhaztjYXNlIDY6Rm49KEZuPj4zKS8xNjticmVhaztjYXNlIDc6Rm49KEZuPj4zKS82NH1yZXR1cm4gX3JbMV0udj1Gbixfcn19LDI1OntuOiJGT1JNVUxBMTkiLGY6ZnVuY3Rpb24gYnIoVm4sQnIpe3ZhciBfcj1CbihWbik7cmV0''@;'; put 'put ''dXJuIFZuLmwrPUJyLTE0LF9yfX0sMjY6e246IkZPUk1VTEExQSJ9LDI3OntuOiJYRk9STUFUIixmOmZ1bmN0aW9uIG5hKFZuLEJyKXtmb3IodmFyIF9yPXt9LEZuPVZuLmwrQnI7Vm4ubDxGbjspe3ZhciBqcj1Wbi5yZWFkX3NoaWZ0KDIpO2lmKDE0ZTM9PWpyKXtmb3IoX3JbanJdPVswLCIi''@;'; put 'put ''XSxfcltqcl1bMF09Vm4ucmVhZF9zaGlmdCgyKTtWbltWbi5sXTspX3JbanJdWzFdKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFZuW1ZuLmxdKSxWbi5sKys7Vm4ubCsrfX1yZXR1cm4gX3J9fSwyODp7bjoiRFRMQUJFTE1JU0MifSwyOTp7bjoiRFRMQUJFTENFTEwifSwzMDp7bjoiR1JBUEhXSU5E''@;'; put 'put ''T1cifSwzMTp7bjoiQ1BBIn0sMzI6e246IkxQTEFVVE8ifSwzMzp7bjoiUVVFUlkifSwzNDp7bjoiSElEREVOU0hFRVQifSwzNTp7bjoiPz8ifSwzNzp7bjoiTlVNQkVSMjUiLGY6ZnVuY3Rpb24gZXIoVm4sQnIpe3ZhciBfcj1ycihWbiksRm49Vm4ucmVhZF9zaGlmdCg0KTtyZXR1cm4gX3Jb''@;'; put 'put ''MV0udj1Gbj4+Nixfcn19LDM4OntuOiI/PyJ9LDM5OntuOiJOVU1CRVIyNyIsZjpNaX0sNDA6e246IkZPUk1VTEEyOCIsZjpmdW5jdGlvbiBGaShWbixCcil7dmFyIF9yPU1pKFZuKTtyZXR1cm4gVm4ubCs9QnItMTAsX3J9fSwxNDI6e246Ij8/In0sMTQ3OntuOiI/PyJ9LDE1MDp7bjoiPz8i''@;'; put 'put ''fSwxNTE6e246Ij8/In0sMTUyOntuOiI/PyJ9LDE1Mzp7bjoiPz8ifSwxNTQ6e246Ij8/In0sMTU1OntuOiI/PyJ9LDE1Njp7bjoiPz8ifSwxNjM6e246Ij8/In0sMTc0OntuOiI/PyJ9LDE3NTp7bjoiPz8ifSwxNzY6e246Ij8/In0sMTc3OntuOiI/PyJ9LDE4NDp7bjoiPz8ifSwxODU6e246''@;'; put 'put ''Ij8/In0sMTg2OntuOiI/PyJ9LDE4Nzp7bjoiPz8ifSwxODg6e246Ij8/In0sMTk1OntuOiI/PyJ9LDIwMTp7bjoiPz8ifSwyMDU6e246Ij8/In0sMjA2OntuOiI/PyJ9LDIwNzp7bjoiPz8ifSwyMDg6e246Ij8/In0sMjU2OntuOiI/PyJ9LDI1OTp7bjoiPz8ifSwyNjA6e246Ij8/In0sMjYx''@;'; put 'put ''OntuOiI/PyJ9LDI2Mjp7bjoiPz8ifSwyNjM6e246Ij8/In0sMjY1OntuOiI/PyJ9LDI2Njp7bjoiPz8ifSwyNjc6e246Ij8/In0sMjY4OntuOiI/PyJ9LDI3MDp7bjoiPz8ifSwyNzE6e246Ij8/In0sMzg0OntuOiI/PyJ9LDM4OTp7bjoiPz8ifSwzOTA6e246Ij8/In0sMzkzOntuOiI/PyJ9''@;'; put 'put ''LDM5Njp7bjoiPz8ifSw1MTI6e246Ij8/In0sNTE0OntuOiI/PyJ9LDUxMzp7bjoiPz8ifSw1MTY6e246Ij8/In0sNTE3OntuOiI/PyJ9LDY0MDp7bjoiPz8ifSw2NDE6e246Ij8/In0sNjQyOntuOiI/PyJ9LDY0Mzp7bjoiPz8ifSw2NDQ6e246Ij8/In0sNjQ1OntuOiI/PyJ9LDY0Njp7bjoi''@;'; put 'put ''Pz8ifSw2NDc6e246Ij8/In0sNjQ4OntuOiI/PyJ9LDY1ODp7bjoiPz8ifSw2NTk6e246Ij8/In0sNjYwOntuOiI/PyJ9LDY2MTp7bjoiPz8ifSw2NjI6e246Ij8/In0sNjY1OntuOiI/PyJ9LDY2Njp7bjoiPz8ifSw3Njg6e246Ij8/In0sNzcyOntuOiI/PyJ9LDE2MDA6e246Ij8/In0sMTYw''@;'; put 'put ''Mjp7bjoiPz8ifSwxNzkzOntuOiI/PyJ9LDE3OTQ6e246Ij8/In0sMTc5NTp7bjoiPz8ifSwxNzk2OntuOiI/PyJ9LDE5MjA6e246Ij8/In0sMjA0ODp7bjoiPz8ifSwyMDQ5OntuOiI/PyJ9LDIwNTI6e246Ij8/In0sMjY4ODp7bjoiPz8ifSwxMDk5ODp7bjoiPz8ifSwxMjg0OTp7bjoiPz8i''@;'; put 'put ''fSwyODIzMzp7bjoiPz8ifSwyODQ4NDp7bjoiPz8ifSw2NTUzNTp7bjoiIn19O3JldHVybntzaGVldF90b193azE6ZnVuY3Rpb24gRyhWbixCcil7dmFyIF9yPUJyfHx7fTtpZigrX3IuY29kZXBhZ2U+PTAmJlUoK19yLmNvZGVwYWdlKSwic3RyaW5nIj09X3IudHlwZSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkNhbm5vdCB3cml0ZSBXSzEgdG8gSlMgc3RyaW5nIik7dmFyIEZuPWJpKCksanI9b28oVm5bIiFyZWYiXSksWmk9QXJyYXkuaXNBcnJheShWbikseWk9W107R2koRm4sMCxmdW5jdGlvbiBvZShWbil7dmFyIEJyPWJuKDIpO3JldHVybiBCci53cml0ZV9zaGlmdCgyLFZuKSxCcn0oMTAz''@;'; put 'put ''MCkpLEdpKEZuLDYsZnVuY3Rpb24geWUoVm4pe3ZhciBCcj1ibig4KTtyZXR1cm4gQnIud3JpdGVfc2hpZnQoMixWbi5zLmMpLEJyLndyaXRlX3NoaWZ0KDIsVm4ucy5yKSxCci53cml0ZV9zaGlmdCgyLFZuLmUuYyksQnIud3JpdGVfc2hpZnQoMixWbi5lLnIpLEJyfShqcikpO2Zvcih2YXIg''@;'; put 'put ''X2E9anIucy5yO19hPD1qci5lLnI7KytfYSlmb3IodmFyIHNvPWppKF9hKSxpYT1qci5zLmM7aWE8PWpyLmUuYzsrK2lhKXtfYT09PWpyLnMuciYmKHlpW2lhXT1UYShpYSkpO3ZhciBPYT1aaT8oVm5bX2FdfHxbXSlbaWFdOlZuW3lpW2lhXStzb107T2EmJiJ6IiE9T2EudCYmKCJuIj09T2Eu''@;'; put 'put ''dD8oMHxPYS52KT09T2EudiYmT2Eudj49LTMyNzY4JiZPYS52PD0zMjc2Nz9HaShGbiwxMyxjdChfYSxpYSxPYS52KSk6R2koRm4sMTQsYXQoX2EsaWEsT2EudikpOkdpKEZuLDE1LFllKF9hLGlhLF9sKE9hKS5zbGljZSgwLDIzOSkpKSl9cmV0dXJuIEdpKEZuLDEpLEZuLmVuZCgpfSxib29r''@;'; put 'put ''X3RvX3drMzpmdW5jdGlvbiBRKFZuLEJyKXt2YXIgX3I9QnJ8fHt9O2lmKCtfci5jb2RlcGFnZT49MCYmVSgrX3IuY29kZXBhZ2UpLCJzdHJpbmciPT1fci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMyB0byBKUyBzdHJpbmciKTt2YXIgRm49YmkoKTtHaShGbiwwLGZ1''@;'; put 'put ''bmN0aW9uIGdlKFZuKXt2YXIgQnI9Ym4oMjYpO0JyLndyaXRlX3NoaWZ0KDIsNDA5NiksQnIud3JpdGVfc2hpZnQoMiw0KSxCci53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgX3I9MCxGbj0wLGpyPTAsWmk9MDtaaTxWbi5TaGVldE5hbWVzLmxlbmd0aDsrK1ppKXt2YXIgX2E9Vm4uU2hlZXRz''@;'; put 'put ''W1ZuLlNoZWV0TmFtZXNbWmldXTtpZihfYSYmX2FbIiFyZWYiXSl7Kytqcjt2YXIgc289TXMoX2FbIiFyZWYiXSk7X3I8c28uZS5yJiYoX3I9c28uZS5yKSxGbjxzby5lLmMmJihGbj1zby5lLmMpfX1yZXR1cm4gQnIud3JpdGVfc2hpZnQoMixfciksQnIud3JpdGVfc2hpZnQoMSxqciksQnIu''@;'; put 'put ''d3JpdGVfc2hpZnQoMSxGbiksQnIud3JpdGVfc2hpZnQoMiwwKSxCci53cml0ZV9zaGlmdCgyLDApLEJyLndyaXRlX3NoaWZ0KDEsMSksQnIud3JpdGVfc2hpZnQoMSwyKSxCci53cml0ZV9zaGlmdCg0LDApLEJyLndyaXRlX3NoaWZ0KDQsMCksQnJ9KFZuKSk7Zm9yKHZhciBqcj0wLFppPTA7''@;'; put 'put ''anI8Vm4uU2hlZXROYW1lcy5sZW5ndGg7KytqcikoVm4uU2hlZXRzW1ZuLlNoZWV0TmFtZXNbanJdXXx8e30pWyIhcmVmIl0mJkdpKEZuLDI3LGNhKFZuLlNoZWV0TmFtZXNbanJdLFppKyspKTt2YXIgeWk9MDtmb3IoanI9MDtqcjxWbi5TaGVldE5hbWVzLmxlbmd0aDsrK2pyKXt2YXIgX2E9''@;'; put 'put ''Vm4uU2hlZXRzW1ZuLlNoZWV0TmFtZXNbanJdXTtpZihfYSYmX2FbIiFyZWYiXSl7Zm9yKHZhciBzbz1vbyhfYVsiIXJlZiJdKSxpYT1BcnJheS5pc0FycmF5KF9hKSxMbz1bXSxPYT1zby5zLnI7T2E8PXNvLmUucjsrK09hKWZvcih2YXIgaG89amkoT2EpLEphPXNvLnMuYztKYTw9c28uZS5j''@;'; put 'put ''OysrSmEpe09hPT09c28ucy5yJiYoTG9bSmFdPVRhKEphKSk7dmFyIElzPWlhPyhfYVtPYV18fFtdKVtKYV06X2FbTG9bSmFdK2hvXTtJcyYmInoiIT1Jcy50JiYoIm4iPT1Jcy50P0dpKEZuLDIzLGZyKE9hLEphLHlpLElzLnYpKTpHaShGbiwyMixscihPYSxKYSx5aSxfbChJcykuc2xpY2Uo''@;'; put 'put ''MCwyMzkpKSkpfSsreWl9fXJldHVybiBHaShGbiwxKSxGbi5lbmQoKX0sdG9fd29ya2Jvb2s6ZnVuY3Rpb24gUihWbixCcil7c3dpdGNoKEJyLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gayhiKF9lLmRlY29kZShWbikpLEJyKTtjYXNlImJpbmFyeSI6cmV0dXJuIGsoYihWbiksQnIpO2Nh''@;'; put 'put ''c2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm4gayhWbixCcil9dGhyb3ciVW5zdXBwb3J0ZWQgdHlwZSAiK0JyLnR5cGV9fX0oKSx3NT1mdW5jdGlvbigpe3ZhciBTPUQwKCJ0IiksUj1EMCgiclByIik7ZnVuY3Rpb24gayhvZSl7dmFyIGdlPW9lLm1hdGNoKFMpO2lmKCFnZSlyZXR1cm57''@;'; put 'put ''dDoicyIsdjoiIn07dmFyIHBlPXt0OiJzIix2OlFyKGdlWzFdKX0seWU9b2UubWF0Y2goUik7cmV0dXJuIHllJiYocGUucz1mdW5jdGlvbiBvayhTKXt2YXIgUj17fSxrPVMubWF0Y2goZW4pLEc9MCxRPSExO2lmKGspZm9yKDtHIT1rLmxlbmd0aDsrK0cpe3ZhciBvZT12cihrW0ddKTtzd2l0''@;'; put 'put ''Y2gob2VbMF0ucmVwbGFjZSgvXHcqOi9nLCIiKSl7Y2FzZSI8Y29uZGVuc2UiOmNhc2UiPGV4dGVuZCI6YnJlYWs7Y2FzZSI8c2hhZG93IjppZighb2UudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+IjpSLnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVh''@;'; put 'put ''aztjYXNlIjxjaGFyc2V0IjppZigiMSI9PW9lLnZhbClicmVhaztSLmNwPU5bcGFyc2VJbnQob2UudmFsLDEwKV07YnJlYWs7Y2FzZSI8b3V0bGluZSI6aWYoIW9lLnZhbClicmVhaztjYXNlIjxvdXRsaW5lPiI6Y2FzZSI8b3V0bGluZS8+IjpSLm91dGxpbmU9MTticmVhaztjYXNlIjwvb3V0''@;'; put 'put ''bGluZT4iOmJyZWFrO2Nhc2UiPHJGb250IjpSLm5hbWU9b2UudmFsO2JyZWFrO2Nhc2UiPHN6IjpSLnN6PW9lLnZhbDticmVhaztjYXNlIjxzdHJpa2UiOmlmKCFvZS52YWwpYnJlYWs7Y2FzZSI8c3RyaWtlPiI6Y2FzZSI8c3RyaWtlLz4iOlIuc3RyaWtlPTE7YnJlYWs7Y2FzZSI8L3N0cmlr''@;'; put 'put ''ZT4iOmJyZWFrO2Nhc2UiPHUiOmlmKCFvZS52YWwpYnJlYWs7c3dpdGNoKG9lLnZhbCl7Y2FzZSJkb3VibGUiOlIudW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpSLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOlIudW5kZXJsaW5lPTM0''@;'; put 'put ''fWNhc2UiPHU+IjpjYXNlIjx1Lz4iOlIudW5kZXJsaW5lfHwoUi51bmRlcmxpbmU9MSk7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxiIjppZigiMCI9PW9lLnZhbClicmVhaztjYXNlIjxiPiI6Y2FzZSI8Yi8+IjpSLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGki''@;'; put 'put ''OmlmKCIwIj09b2UudmFsKWJyZWFrO2Nhc2UiPGk+IjpjYXNlIjxpLz4iOlIuaXRhbGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNlIjxjb2xvciI6b2UucmdiJiYoUi5jb2xvcj17cmdiOjg9PW9lLnJnYi5sZW5ndGg/b2UucmdiLnNsaWNlKDIsOCk6KCIwMDAwMDAiK29lLnJnYiku''@;'; put 'put ''c2xpY2UoLTYpfSk7YnJlYWs7Y2FzZSI8ZmFtaWx5IjpSLmZhbWlseT1vZS52YWw7YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPShvZS52YWx8fCJub25lIikmJihSLnZhbGlnbj1vZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHNjaGVtZSI6Y2FzZSI8ZXh0''@;'; put 'put ''THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoNDchPT1vZVswXS5jaGFyQ29kZUF0KDEpJiYhUSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZv''@;'; put 'put ''cm1hdCAiK29lWzBdKX19cmV0dXJuIFJ9KHllWzFdKSkscGV9dmFyIEc9LzwoPzpcdys6KT9yPi9nLFE9LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiBnZS5yZXBsYWNlKEcsIiIpLnNwbGl0KFEpLm1hcChrKS5maWx0ZXIoZnVuY3Rpb24ocGUpe3JldHVybiBw''@;'; put 'put ''ZS52fSl9fSgpLHdWPXsxOiJzaW5nbGUiLDI6ImRvdWJsZSIsMzM6InNpbmdsZS1hY2NvdW50aW5nIiwzNDoiZG91YmxlLWFjY291bnRpbmcifSxWdT1mdW5jdGlvbigpe3ZhciBSPS8oXHJcbnxcbikvZztmdW5jdGlvbiBHKFEpe3ZhciBvZT1bW10sUS52LFtdXTtyZXR1cm4gUS52PyhRLnMm''@;'; put 'put ''JmZ1bmN0aW9uIGsoUSxvZSxnZSl7dmFyIHBlPVtdO1EudW5kZXJsaW5lJiZwZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiKSxRLnVuZGVybGluZT4xJiZwZS5wdXNoKCJ0ZXh0LXVuZGVybGluZS1zdHlsZToiK3dWW1EudW5kZXJsaW5lXSsiOyIpLFEuc3omJnBlLnB1c2go''@;'; put 'put ''ImZvbnQtc2l6ZToiK1Euc3orInB0OyIpLFEub3V0bGluZSYmcGUucHVzaCgidGV4dC1lZmZlY3Q6IG91dGxpbmU7IiksUS5zaGFkb3cmJnBlLnB1c2goInRleHQtc2hhZG93OiBhdXRvOyIpLFEuY29sb3ImJlEuY29sb3IucmdiJiZwZS5wdXNoKCJjb2xvcjogIyIrUDAoUS5jb2xvci5yZ2Ip''@;'; put 'put ''KyI7Iiksb2UucHVzaCgnPHNwYW4gc3R5bGU9IicrcGUuam9pbigiIikrJyI+JyksUS5ib2xkJiYob2UucHVzaCgiPGI+IiksZ2UucHVzaCgiPC9iPiIpKSxRLml0YWxpYyYmKG9lLnB1c2goIjxpPiIpLGdlLnB1c2goIjwvaT4iKSksUS5zdHJpa2UmJihvZS5wdXNoKCI8cz4iKSxnZS5wdXNo''@;'; put 'put ''KCI8L3M+IikpO3ZhciB5ZT1RLnZhbGlnbnx8IiI7InN1cGVyc2NyaXB0Ij09eWV8fCJzdXBlciI9PXllP3llPSJzdXAiOiJzdWJzY3JpcHQiPT15ZSYmKHllPSJzdWIiKSwiIiE9eWUmJihvZS5wdXNoKCI8Iit5ZSsiPiIpLGdlLnB1c2goIjwvIit5ZSsiPiIpKSxnZS5wdXNoKCI8L3NwYW4+''@;'; put 'put ''Iil9KFEucyxvZVswXSxvZVsyXSksb2VbMF0uam9pbigiIikrb2VbMV0ucmVwbGFjZShSLCI8YnIvPiIpK29lWzJdLmpvaW4oIiIpKToiIn1yZXR1cm4gZnVuY3Rpb24ob2Upe3JldHVybiBvZS5tYXAoRykuam9pbigiIil9fSgpO2Z1bmN0aW9uIFFzKFMpe3JldHVybiBTLm1hcChmdW5jdGlv''@;'; put 'put ''bihrKXtyZXR1cm4gZnVuY3Rpb24gQTQoUyl7dmFyIFI9IiIsaz1bXTtyZXR1cm4gUy5zJiYoUy5zLmJvbGQmJmsucHVzaCgiPGIvPiIpLFMucy5pdGFsaWMmJmsucHVzaCgiPGkvPiIpLFMucy5zdHJpa2UmJmsucHVzaCgiPHN0cmlrZS8+IiksUy5zLnVuZGVybGluZSYmay5wdXNoKCc8dSB2''@;'; put 'put ''YWw9IicrKEE1W1Mucy51bmRlcmxpbmVdfHwic2luZ2xlIikrJyIvPicpLFMucy5jb2xvciYmay5wdXNoKGdkKFMucy5jb2xvcikpLFMucy5zeiYmay5wdXNoKCc8c3ogdmFsPSInK1Mucy5zeisnIi8+JyksUy5zLm5hbWUmJmsucHVzaCgnPHJGb250IHZhbD0iJytTLnMubmFtZSsnIi8+Jyks''@;'; put 'put ''KCJzdXBlciI9PVMucy52YWxpZ258fCJzdWIiPT1TLnMudmFsaWduKSYmay5wdXNoKCc8dmVydEFsaWduIHZhbD0iJytTLnMudmFsaWduKydzY3JpcHQiLz4nKSksay5sZW5ndGgmJihSKz0iPHJQcj4iK2suam9pbigiIikrIjwvclByPiIpLCI8cj4iKyhSKz1QcigidCIsTHIoUy52KSxudWxs''@;'; put 'put ''KSkrIjwvcj4ifShrKX0pLmpvaW4oIiIpfXZhciBDVj0vPCg/Olx3KzopP3RbXj5dKj4oW148XSopPFwvKD86XHcrOik/dD4vZyxTVj0vPCg/Olx3KzopP3JcYltePl0qPi8sTVY9LzwoPzpcdys6KT9yUGguKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3JQaD4vZztmdW5jdGlvbiB1QyhTLFIp''@;'; put 'put ''e3ZhciBrPSFSfHxSLmNlbGxIVE1MLEc9e307cmV0dXJuIFM/KFMubWF0Y2goL15ccyo8KD86XHcrOik/dFtePl0qPi8pPyhHLnQ9UXIoZ28oUy5zbGljZShTLmluZGV4T2YoIj4iKSsxKS5zcGxpdCgvPFwvKD86XHcrOik/dD4vKVswXXx8IiIpKSxHLnI9Z28oUyksayYmKEcuaD1sYShHLnQp''@;'; put 'put ''KSk6Uy5tYXRjaChTVikmJihHLnI9Z28oUyksRy50PVFyKGdvKChTLnJlcGxhY2UoTVYsIiIpLm1hdGNoKENWKXx8W10pLmpvaW4oIiIpLnJlcGxhY2UoZW4sIiIpKSksRy5SPXc1KEcuciksayYmKEcuaD1WdShHLlIpKSksRyk6e3Q6IiJ9fXZhciBzaz0vPCg/Olx3KzopP3NzdChbXj5dKik+''@;'; put 'put ''KFtcc1xTXSopPFwvKD86XHcrOik/c3N0Pi8sbGs9LzwoPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vZyxxNj0vPFwvKD86XHcrOik/KD86c2l8c3N0SXRlbSk+LztLYS5TU1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hp''@;'; put 'put ''cHMvc2hhcmVkU3RyaW5ncyI7dmFyIHhWPS9eXHN8XHMkfFtcdFxuXHJdLztmdW5jdGlvbiBSdihTLFIpe2lmKCFSLmJvb2tTU1QpcmV0dXJuIiI7dmFyIGs9W0lpXTtrW2subGVuZ3RoXT1Qcigic3N0IixudWxsLHt4bWxuczpZaS5tYWluWzBdLGNvdW50OlMuQ291bnQsdW5pcXVlQ291bnQ6''@;'; put 'put ''Uy5VbmlxdWV9KTtmb3IodmFyIEc9MDtHIT1TLmxlbmd0aDsrK0cpaWYobnVsbCE9U1tHXSl7dmFyIFE9U1tHXSxvZT0iPHNpPiI7US5yP29lKz1RLnI6KG9lKz0iPHQiLFEudHx8KFEudD0iIiksUS50Lm1hdGNoKHhWKSYmKG9lKz0nIHhtbDpzcGFjZT0icHJlc2VydmUiJyksb2UrPSI+IitM''@;'; put 'put ''cihRLnQpKyI8L3Q+Iiksa1trLmxlbmd0aF09b2UrPSI8L3NpPiJ9cmV0dXJuIGsubGVuZ3RoPjImJihrW2subGVuZ3RoXT0iPC9zc3Q+IixrWzFdPWtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGsuam9pbigiIil9dmFyIGNrPWZ1bmN0aW9uIEkzKFMsUixrKXt2YXIgRz0xMys0KlMudC5sZW5n''@;'; put 'put ''dGgsUT1TLlImJlMuUi5sZW5ndGh8fFMucjtTLnImJihTLlI9dzUoUy5yKSksUSYmKEcrPTQrNCpTLlIubGVuZ3RoKTt2YXIgb2U9ITE7aWYobnVsbD09ayYmKG9lPSEwLGs9Ym4oRykpLGsud3JpdGVfc2hpZnQoMSxRPzE6MCksRmMoUy50LGspLFEpe2sud3JpdGVfc2hpZnQoNCxTLlIubGVu''@;'; put 'put ''Z3RoKTtmb3IodmFyIGdlPTAscGU9MDtwZTxTLlIubGVuZ3RoOysrcGUpe3ZhciB5ZT1TLlJbcGVdO2sud3JpdGVfc2hpZnQoMixnZSksZ2UrPSh5ZS52fHwiIikubGVuZ3RoO3ZhciBQZT15ZS5zP2wwKFIuY2VsbFhmcyxSLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6eWUuc30sUik6MDtr''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsUi5jZWxsWGZzW1BlXS5mb250SWQpfX1yZXR1cm4gb2U/ay5zbGljZSgwLGsubCk6a307ZnVuY3Rpb24gdWsoUyxSKXt2YXIgaz1iaSgpO0ZyKGssIkJydEJlZ2luU3N0IixmdW5jdGlvbiBkQyhTLFIpe3JldHVybiBSfHwoUj1ibig4KSksUi53cml0ZV9zaGlmdCg0''@;'; put 'put ''LFMuQ291bnQpLFIud3JpdGVfc2hpZnQoNCxTLlVuaXF1ZSksUn0oUykpO2Zvcih2YXIgRz0wO0c8Uy5sZW5ndGg7KytHKUZyKGssIkJydFNTVEl0ZW0iLGNrKFNbR10sUikpO3JldHVybiBGcihrLCJCcnRFbmRTc3QiKSxrLmVuZCgpfWZ1bmN0aW9uIGs0KFMpe2lmKHR5cGVvZiBjcHRhYmxl''@;'; put 'put ''PCJ1IilyZXR1cm4gY3B0YWJsZS51dGlscy5lbmNvZGUoRixTKTtmb3IodmFyIFI9W10saz1TLnNwbGl0KCIiKSxHPTA7RzxrLmxlbmd0aDsrK0cpUltHXT1rW0ddLmNoYXJDb2RlQXQoMCk7cmV0dXJuIFJ9ZnVuY3Rpb24gUDEoUyxSKXt2YXIgaz17fTtyZXR1cm4gay5NYWpvcj1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMiksay5NaW5vcj1TLnJlYWRfc2hpZnQoMiksUj49NCYmKFMubCs9Ui00KSxrfWZ1bmN0aW9uIGhDKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1TLmwrUi00LEc9e30sUT1TLnJlYWRfc2hpZnQoNCksb2U9W107US0tID4wOylvZS5wdXNoKHt0OlMucmVhZF9zaGlmdCg0''@;'; put 'put ''KSx2OlMucmVhZF9zaGlmdCgwLCJscHA0Iil9KTtpZihHLm5hbWU9Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKSxHLmNvbXBzPW9lLFMubCE9ayl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTogIitTLmwrIiAhPSAiK2spO3JldHVybiBHfWZ1bmN0aW9uIElWKFMsUil7dmFy''@;'; put 'put ''IGs9Uy5sK1IsRz17fTtHLkZsYWdzPTYzJlMucmVhZF9zaGlmdCg0KSxTLmwrPTQsRy5BbGdJRD1TLnJlYWRfc2hpZnQoNCk7dmFyIFE9ITE7c3dpdGNoKEcuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4OlE9MzY9PUcuRmxhZ3M7YnJlYWs7Y2FzZSAyNjYyNTpRPTQ9''@;'; put 'put ''PSg1MiZHLkZsYWdzKTticmVhaztjYXNlIDA6UT0xNj09Ry5GbGFnc3x8ND09Ry5GbGFnc3x8MzY9PUcuRmxhZ3M7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG06ICIrRy5BbGdJRH1pZighUSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24g''@;'; put 'put ''RmxhZ3MvQWxnSUQgbWlzbWF0Y2giKTtyZXR1cm4gRy5BbGdJREhhc2g9Uy5yZWFkX3NoaWZ0KDQpLEcuS2V5U2l6ZT1TLnJlYWRfc2hpZnQoNCksRy5Qcm92aWRlclR5cGU9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9OCxHLkNTUE5hbWU9Uy5yZWFkX3NoaWZ0KGstUy5sPj4xLCJ1dGYxNmxlIiks''@;'; put 'put ''Uy5sPWssR31mdW5jdGlvbiBQdihTLFIpe3ZhciBrPXt9LEc9Uy5sK1I7cmV0dXJuIFMubCs9NCxrLlNhbHQ9Uy5zbGljZShTLmwsUy5sKzE2KSxTLmwrPTE2LGsuVmVyaWZpZXI9Uy5zbGljZShTLmwsUy5sKzE2KSxTLmwrPTE2LFMucmVhZF9zaGlmdCg0KSxrLlZlcmlmaWVySGFzaD1TLnNs''@;'; put 'put ''aWNlKFMubCxHKSxTLmw9RyxrfWZ1bmN0aW9uIFJWKFMpe2lmKDM2IT0oNjMmUy5yZWFkX3NoaWZ0KDQpKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb25JbmZvIG1pc21hdGNoIik7dmFyIGs9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybnt0OiJTdGQiLGg6SVYoUyxrKSx2OlB2KFMsUy5sZW5n''@;'; put 'put ''dGgtUy5sKX19ZnVuY3Rpb24gSjYoKXt0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkOiBFQ01BLTM3NiBFeHRlbnNpYmxlIil9ZnVuY3Rpb24gZkMoUyl7dmFyIFI9WyJzYWx0U2l6ZSIsImJsb2NrU2l6ZSIsImtleUJpdHMiLCJoYXNoU2l6ZSIsImNpcGhlckFs''@;'; put 'put ''Z29yaXRobSIsImNpcGhlckNoYWluaW5nIiwiaGFzaEFsZ29yaXRobSIsInNhbHRWYWx1ZSJdO1MubCs9NDt2YXIgaz1TLnJlYWRfc2hpZnQoUy5sZW5ndGgtUy5sLCJ1dGY4IiksRz17fTtyZXR1cm4gay5yZXBsYWNlKGVuLGZ1bmN0aW9uKG9lKXt2YXIgZ2U9dnIob2UpO3N3aXRjaChXbihn''@;'; put 'put ''ZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5cHRpb24iOmNhc2UiPC9lbmNyeXB0aW9uPiI6Y2FzZSI8L2tleUVuY3J5cHRvcnM+IjpjYXNlIjwva2V5RW5jcnlwdG9yPiI6YnJlYWs7Y2FzZSI8a2V5RGF0YSI6Ui5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtHW3BlXT1nZVtwZV19KTticmVh''@;'; put 'put ''aztjYXNlIjxkYXRhSW50ZWdyaXR5IjpHLmVuY3J5cHRlZEhtYWNLZXk9Z2UuZW5jcnlwdGVkSG1hY0tleSxHLmVuY3J5cHRlZEhtYWNWYWx1ZT1nZS5lbmNyeXB0ZWRIbWFjVmFsdWU7YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMiOkcuZW5jcz1bXTti''@;'; put 'put ''cmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOkcudXJpPWdlLnVyaTticmVhaztjYXNlIjxlbmNyeXB0ZWRLZXkiOkcuZW5jcy5wdXNoKGdlKTticmVhaztkZWZhdWx0OnRocm93IGdlWzBdfX0pLEd9ZnVuY3Rpb24gSHYoUyl7dmFyIGssb2UsUj0wLEc9azQoUyksUT1HLmxlbmd0aCsxO2Zvcigo''@;'; put 'put ''az1WKFEpKVswXT1HLmxlbmd0aCxvZT0xO29lIT1ROysrb2Upa1tvZV09R1tvZS0xXTtmb3Iob2U9US0xO29lPj0wOy0tb2UpUj0oKDE2Mzg0JlI/MTowKXxSPDwxJjMyNzY3KV5rW29lXTtyZXR1cm4gNTI4MTFeUn12YXIgcEM9ZnVuY3Rpb24oKXt2YXIgUz1bMTg3LDI1NSwyNTUsMTg2LDI1''@;'; put 'put ''NSwyNTUsMTg1LDEyOCwwLDE5MCwxNSwwLDE5MSwxNSwwXSxSPVs1Nzg0MCw3NDM5LDUyMzgwLDMzOTg0LDQzNjQsMzYwMCw2MTkwMiwxMjYwNiw2MjU4LDU3NjU3LDU0Mjg3LDM0MDQxLDEwMjUyLDQzMzcwLDIwMTYzXSxrPVs0NDc5NiwxOTkyOSwzOTg1OCwxMDA1MywyMDEwNiw0MDIxMiwx''@;'; put 'put ''MDc2MSwzMTU4NSw2MzE3MCw2NDkzMyw2MDI2Nyw1MDkzNSw0MDM5OSwxMTE5OSwxNzc2MywzNTUyNiwxNDUzLDI5MDYsNTgxMiwxMTYyNCwyMzI0OCw4ODUsMTc3MCwzNTQwLDcwODAsMTQxNjAsMjgzMjAsNTY2NDAsNTUzNjksNDExMzksMjA4MDcsNDE2MTQsMjE4MjEsNDM2NDIsMTc2MjEs''@;'; put 'put ''Mjg0ODUsNTY5NzAsNDQzNDEsMTkwMTksMzgwMzgsMTQ2MDUsMjkyMTAsNjAxOTUsNTA3OTEsNDAxNzUsMTA3NTEsMjE1MDIsNDMwMDQsMjQ1MzcsMTgzODcsMzY3NzQsMzk0OSw3ODk4LDE1Nzk2LDMxNTkyLDYzMTg0LDQ3MjAxLDI0ODAzLDQ5NjA2LDM3ODA1LDE0MjAzLDI4NDA2LDU2ODEy''@;'; put 'put ''LDE3ODI0LDM1NjQ4LDE2OTcsMzM5NCw2Nzg4LDEzNTc2LDI3MTUyLDQzNjAxLDE3NTM5LDM1MDc4LDU1NywxMTE0LDIyMjgsNDQ1NiwzMDM4OCw2MDc3Niw1MTk1MywzNDI0Myw3MDc5LDE0MTU4LDI4MzE2LDE0MTI4LDI4MjU2LDU2NTEyLDQzNDI1LDE3MjUxLDM0NTAyLDc1OTcsMTMxMDUs''@;'; put 'put ''MjYyMTAsNTI0MjAsMzUyNDEsODgzLDE3NjYsMzUzMiw0MTI5LDgyNTgsMTY1MTYsMzMwMzIsNDY1Nyw5MzE0LDE4NjI4XSxRPWZ1bmN0aW9uKGdlLHBlKXtyZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiAyNTUmKGdlPj4xfGdlPDw3KX0oZ2VecGUpfTtyZXR1cm4gZnVuY3Rpb24ocGUpe2Zv''@;'; put 'put ''cih2YXIgeWU9azQocGUpLFBlPWZ1bmN0aW9uKGdlKXtmb3IodmFyIHBlPVJbZ2UubGVuZ3RoLTFdLHllPTEwNCxQZT1nZS5sZW5ndGgtMTtQZT49MDstLVBlKWZvcih2YXIgTmU9Z2VbUGVdLFllPTA7NyE9WWU7KytZZSk2NCZOZSYmKHBlXj1rW3llXSksTmUqPTIsLS15ZTtyZXR1cm4gcGV9''@;'; put 'put ''KHllKSxOZT15ZS5sZW5ndGgsWWU9VigxNiksZXQ9MDsxNiE9ZXQ7KytldClZZVtldF09MDt2YXIgYXQ7Zm9yKCEoMSZ+TmUpJiYoWWVbTmVdPVEoU1swXSxQZT4+OCksWWVbLS1OZV09USh5ZVt5ZS5sZW5ndGgtMV0sMjU1JlBlKSk7TmU+MDspWWVbLS1OZV09USh5ZVtOZV0sUGU+PjgpLFll''@;'; put 'put ''Wy0tTmVdPVEoeWVbTmVdLDI1NSZQZSk7Zm9yKE5lPTE1LGF0PTE1LXllLmxlbmd0aDthdD4wOylZZVtOZV09UShTW2F0XSxQZT4+OCksLS1hdCxZZVstLU5lXT1RKHllW05lXSwyNTUmUGUpLC0tTmUsLS1hdDtyZXR1cm4gWWV9fSgpO3ZhciBWdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoUSxv''@;'; put 'put ''ZSl7c3dpdGNoKG9lLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gUihfZS5kZWNvZGUoUSksb2UpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gUihRLG9lKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFIoUS50b1N0cmluZygiYmluYXJ5Iiksb2UpO2Nhc2UiYXJyYXkiOnJldHVybiBSKHV0KFEpLG9lKX10''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrb2UudHlwZSl9ZnVuY3Rpb24gUihRLG9lKXt2YXIgcGU9KG9lfHx7fSkuZGVuc2U/W106e307aWYoIVEubWF0Y2goL1xcdHJvd2QvKSl0aHJvdyBuZXcgRXJyb3IoIlJURiBtaXNzaW5nIHRhYmxlIik7cmV0dXJuIHBlWyIhcmVm''@;'; put 'put ''Il09cmEoe3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSkscGV9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIGsoUSxvZSl7cmV0dXJuIHRoKFMoUSxvZSksb2UpfSx0b19zaGVldDpTLGZyb21fc2hlZXQ6ZnVuY3Rpb24gRyhRKXtmb3IodmFyIHBlLG9lPVsie1xccnRmMVxcYW5zaSJdLGdl''@;'; put 'put ''PW9vKFFbIiFyZWYiXSkseWU9QXJyYXkuaXNBcnJheShRKSxQZT1nZS5zLnI7UGU8PWdlLmUucjsrK1BlKXtvZS5wdXNoKCJcXHRyb3dkXFx0cmF1dG9maXQxIik7Zm9yKHZhciBOZT1nZS5zLmM7TmU8PWdlLmUuYzsrK05lKW9lLnB1c2goIlxcY2VsbHgiKyhOZSsxKSk7Zm9yKG9lLnB1c2go''@;'; put 'put ''IlxccGFyZFxcaW50YmwiKSxOZT1nZS5zLmM7TmU8PWdlLmUuYzsrK05lKXt2YXIgWWU9cWkoe3I6UGUsYzpOZX0pOyhwZT15ZT8oUVtQZV18fFtdKVtOZV06UVtZZV0pJiYobnVsbCE9cGUudnx8cGUuZiYmIXBlLkYpJiYob2UucHVzaCgiICIrKHBlLnd8fChfbChwZSkscGUudykpKSxvZS5w''@;'; put 'put ''dXNoKCJcXGNlbGwiKSl9b2UucHVzaCgiXFxwYXJkXFxpbnRibFxccm93Iil9cmV0dXJuIG9lLmpvaW4oIiIpKyJ9In19fSgpO2Z1bmN0aW9uIEM1KFMpe3ZhciBSPVMuc2xpY2UoIiMiPT09U1swXT8xOjApLnNsaWNlKDAsNik7cmV0dXJuW3BhcnNlSW50KFIuc2xpY2UoMCwyKSwxNikscGFy''@;'; put 'put ''c2VJbnQoUi5zbGljZSgyLDQpLDE2KSxwYXJzZUludChSLnNsaWNlKDQsNiksMTYpXX1mdW5jdGlvbiBoZChTKXtmb3IodmFyIFI9MCxrPTE7MyE9UjsrK1Ipaz0yNTYqaysoU1tSXT4yNTU/MjU1OlNbUl08MD8wOlNbUl0pO3JldHVybiBrLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNs''@;'; put 'put ''aWNlKDEpfWZ1bmN0aW9uIG9oKFMsUil7aWYobnVsbD09UylyZXR1cm4gbnVsbCE9UjtpZihudWxsPT1SKXJldHVybiEwO2lmKDE9PVMuYXV0byYmMT09Ui5hdXRvKXJldHVybiExO2lmKCEhUy5hdXRvIT0hIVIuYXV0b3x8bnVsbD09Uy50aGVtZSE9KG51bGw9PVIudGhlbWUpKXJldHVybiEw''@;'; put 'put ''O2lmKG51bGwhPVMudGhlbWUpcmV0dXJuIFMudGhlbWUhPVIudGhlbWV8fFMudGludCE9Ui50aW50O2lmKG51bGw9PVMucmdiJiZudWxsPT1SLnJnYilyZXR1cm4hMTt2YXIgaz1TLnJnYjsibnVtYmVyIj09dHlwZW9mIGsmJihrPWsudG9TdHJpbmcoMTYpKSxrPWsuc2xpY2UoLTYpO3ZhciBH''@;'; put 'put ''PVIucmdiO3JldHVybiJudW1iZXIiPT10eXBlb2YgRyYmKEc9Ry50b1N0cmluZygxNikpLEc9Ry5zbGljZSgtNiksay50b0xvd2VyQ2FzZSgpIT1HLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gaGsoUyxSKXtyZXR1cm4gbnVsbD09Uz9udWxsIT1SOm51bGw9PVI/bnVsbCE9UzpTLnN0eWxlIT1S''@;'; put 'put ''LnN0eWxlfHxvaChTLmNvbG9yLFIuY29sb3IpfWZ1bmN0aW9uIFM1KFMsUil7aWYoMD09PVIpcmV0dXJuIFM7dmFyIGs9ZnVuY3Rpb24gUFYoUyl7dmFyIFI9U1swXS8yNTUsaz1TWzFdLzI1NSxHPVNbMl0vMjU1LFE9TWF0aC5tYXgoUixrLEcpLG9lPU1hdGgubWluKFIsayxHKSxnZT1RLW9l''@;'; put 'put ''O2lmKDA9PT1nZSlyZXR1cm5bMCwwLFJdO3ZhciB5ZSxwZT0wLFBlPVErb2U7c3dpdGNoKHllPWdlLyhQZT4xPzItUGU6UGUpLFEpe2Nhc2UgUjpwZT0oKGstRykvZ2UrNiklNjticmVhaztjYXNlIGs6cGU9KEctUikvZ2UrMjticmVhaztjYXNlIEc6cGU9KFItaykvZ2UrNH1yZXR1cm5bcGUv''@;'; put 'put ''Nix5ZSxQZS8yXX0oQzUoUykpO3JldHVybiBrWzJdPVI8MD9rWzJdKigxK1IpOjEtKDEta1syXSkqKDEtUiksaGQoZnVuY3Rpb24gZGsoUyl7dmFyIHllLGs9U1sxXSxHPVNbMl0sUT0yKmsqKEc8LjU/RzoxLUcpLG9lPUctUS8yLGdlPVtvZSxvZSxvZV0scGU9NipTWzBdO2lmKDAhPT1rKXN3''@;'; put 'put ''aXRjaCgwfHBlKXtjYXNlIDA6Y2FzZSA2OnllPVEqcGUsZ2VbMF0rPVEsZ2VbMV0rPXllO2JyZWFrO2Nhc2UgMTpnZVswXSs9eWU9USooMi1wZSksZ2VbMV0rPVE7YnJlYWs7Y2FzZSAyOnllPVEqKHBlLTIpLGdlWzFdKz1RLGdlWzJdKz15ZTticmVhaztjYXNlIDM6Z2VbMV0rPXllPVEqKDQt''@;'; put 'put ''cGUpLGdlWzJdKz1RO2JyZWFrO2Nhc2UgNDp5ZT1RKihwZS00KSxnZVsyXSs9USxnZVswXSs9eWU7YnJlYWs7Y2FzZSA1OmdlWzJdKz15ZT1RKig2LXBlKSxnZVswXSs9UX1mb3IodmFyIFBlPTA7MyE9UGU7KytQZSlnZVtQZV09TWF0aC5yb3VuZCgyNTUqZ2VbUGVdKTtyZXR1cm4gZ2V9KGsp''@;'; put 'put ''KX12YXIgZms9NixUYz1maztmdW5jdGlvbiBNNShTKXtyZXR1cm4gTWF0aC5mbG9vcigoUytNYXRoLnJvdW5kKDEyOC9UYykvMjU2KSpUYyl9ZnVuY3Rpb24geDUoUyl7cmV0dXJuIE1hdGguZmxvb3IoKFMtNSkvVGMqMTAwKy41KS8xMDB9ZnVuY3Rpb24ga2YoUyl7cmV0dXJuIE1hdGgucm91''@;'; put 'put ''bmQoKFMqVGMrNSkvVGMqMjU2KS8yNTZ9ZnVuY3Rpb24gUTAoUyl7Uy5iZXN0Rml0JiZkZWxldGUgUy5iZXN0Rml0LFMud2lkdGg/KFMud3B4PU01KFMud2lkdGgpLFMud2NoPXg1KFMud3B4KSxTLk1EVz1UYyk6Uy53cHg/KFMud2NoPXg1KFMud3B4KSxTLndpZHRoPWtmKFMud2NoKSxTLk1E''@;'; put 'put ''Vz1UYyk6Im51bWJlciI9PXR5cGVvZiBTLndjaCYmKFMud2lkdGg9a2YoUy53Y2gpLFMud3B4PU01KFMud2lkdGgpLFMuTURXPVRjKSxTLmN1c3RvbVdpZHRoJiZkZWxldGUgUy5jdXN0b21XaWR0aH12YXIgWXM9OTYsRGY9WXM7ZnVuY3Rpb24gVTMoUyl7cmV0dXJuIDcyKlMvRGZ9ZnVuY3Rp''@;'; put 'put ''b24gc2goUyl7cmV0dXJuIFMqRGYvNzJ9ZnVuY3Rpb24gSWYoUyl7RGY9Uz17b3N4OjcyLHdpbjo5Nix3aW4xMDA6OTYsd2luMTI1OjEyMCx3aW4xNTA6MTQ0fVtTXXx8U3x8WXMsYkM9VDVbU119ZnVuY3Rpb24ganYoUyl7Uy5ocHg/Uy5ocHQ9VTMoUy5ocHgpOlMuaHB0JiYoUy5ocHg9c2go''@;'; put 'put ''Uy5ocHQpKX12YXIgbUM9e05vbmU6Im5vbmUiLFNvbGlkOiJzb2xpZCIsR3JheTUwOiJtZWRpdW1HcmF5IixHcmF5NzU6ImRhcmtHcmF5IixHcmF5MjU6ImxpZ2h0R3JheSIsSG9yelN0cmlwZToiZGFya0hvcml6b250YWwiLFZlcnRTdHJpcGU6ImRhcmtWZXJ0aWNhbCIsUmV2ZXJzZURpYWdT''@;'; put 'put ''dHJpcGU6ImRhcmtEb3duIixEaWFnU3RyaXBlOiJkYXJrVXAiLERpYWdDcm9zczoiZGFya0dyaWQiLFRoaWNrRGlhZ0Nyb3NzOiJkYXJrVHJlbGxpcyIsVGhpbkhvcnpTdHJpcGU6ImxpZ2h0SG9yaXpvbnRhbCIsVGhpblZlcnRTdHJpcGU6ImxpZ2h0VmVydGljYWwiLFRoaW5SZXZlcnNlRGlh''@;'; put 'put ''Z1N0cmlwZToibGlnaHREb3duIixUaGluSG9yekNyb3NzOiJsaWdodEdyaWQifSx2Qz1WZShtQyksUTY9e29yYW5nZToxNjc1MzkyMCxibGFjazowLG5hdnk6MTI4LGJsdWU6MjU1LGdyZWVuOjMyNzY4LHRlYWw6MzI4OTYsbGltZTo2NTI4MCxhcXVhOjY1NTM1LHNpbHZlcjoxMjYzMjI1Nixt''@;'; put 'put ''YXJvb246ODM4ODYwOCxwdXJwbGU6ODM4ODczNixvbGl2ZTo4NDIxMzc2LGdyYXk6ODQyMTUwNCxyZWQ6MTY3MTE2ODAsZnVjaHNpYToxNjcxMTkzNSx5ZWxsb3c6MTY3NzY5NjAsd2hpdGU6MTY3NzcyMTV9O2Z1bmN0aW9uIEU1KFMsUil7aWYoUy5yZXBsYWNlKCIjIiwiIikubWF0Y2goL15b''@;'; put 'put ''MC05YS1mQS1GXXs2fSQvKSlyZXR1cm4gcGFyc2VJbnQoUy5yZXBsYWNlKCIjIiwiIiksMTYpO2lmKFE2W1NdKXJldHVybiBRNltTXTt2YXIgaz1TLm1hdGNoKC9yZ2JcKFxzKihcZCopXHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqXCkvKTtpZihrKXJldHVybigra1sxXTw8MTYpKygra1sy''@;'; put 'put ''XTw8OCkrICtrWzNdO2lmKGs9Uy5tYXRjaCgvcmdiYVwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccyooXGQqKS8pKXJldHVybiAwIT0oa1s0XSYma1s0XS5sZW5ndGg+MCYmK2tbNF18fDApfHwra1sxXT4wfHwra1syXT4wfHwra1szXT4wPygra1sxXTw8MTYpKygra1syXTw8''@;'; put 'put ''OCkrICtrWzNdOlI/LTE6MTY3NzcyMTU7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEhUTUwgY29sb3IgIitTKX12YXIgVDU9e307ZnVuY3Rpb24genYoUyl7Uz1TfHw5Njt2YXIgUj17Q2FsaWJyaTpbXSxBcmlhbDpbXSwiU3Bhcmthc3NlIFJnIjpbXSxcdTViOGJcdTRmNTM6W10sXHU2ZTM4''@;'; put 'put ''XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmOltdLCJDZW50dXJ5IEdvdGhpYyI6W119O3JldHVybiBSLkNhbGlicmlbMTFdPTcsUi5DYWxpYnJpWzEyXT17NzI6Niw5Njo4LDEyMDoxMCwxNDQ6MTJ9W1NdfHw4LFIuQ2FsaWJyaVsxM109MTAsUi5DYWxpYnJpWzE0XT0xMSxSLkNhbGlicmlbMTZd''@;'; put 'put ''PTEyLFIuQ2FsaWJyaVsxOF09MTQsUi5DYWxpYnJpWzIwXT0xNixSLlx1NWI4Ylx1NGY1M1sxMV09OCxSLlx1NmUzOFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZlsxMV09OCxSWyJTcGFya2Fzc2UgUmciXVsxMV09NyxSLkFyaWFsWzEwXT03LFJbIkNlbnR1cnkgR290aGljIl1bMTJdPTksUn1U''@;'; put 'put ''NVs3Ml09enYoNzIpLFQ1Wzk2XT16dig5NiksVDVbMTIwXT16digxMjApLFQ1WzE0NF09enYoMTQ0KTt2YXIgYkM9VDVbOTZdO2Z1bmN0aW9uIHlDKFMpe3JldHVybihiQ1tTLm5hbWV8fFMuRm9udE5hbWVdfHxbXSlbUy5zenx8Uy5TaXplXX1mdW5jdGlvbiBJNChTKXtpZihTKXt2YXIgUj15''@;'; put 'put ''QyhTKTtpZihSKXJldHVybiBUYz1SfXJldHVybiBUYz02fWZ1bmN0aW9uIF9DKFMsUixrKXtyZXR1cm4gaGQoZnVuY3Rpb24gcGsoUyxSLGspe3JldHVybltNYXRoLnJvdW5kKFJbMF0qaytTWzBdKigxLWspKSxNYXRoLnJvdW5kKFJbMV0qaytTWzFdKigxLWspKSxNYXRoLnJvdW5kKFJbMl0q''@;'; put 'put ''aytTWzJdKigxLWspKV19KEM1KCJudW1iZXIiPT10eXBlb2YgUy5yZ2I/KCIwMDAwMCIrUy50b1N0cmluZygxNikpLnNsaWNlKC02KTpTLnJnYiksQzUoIm51bWJlciI9PXR5cGVvZiBSLnJnYj8oIjAwMDAwIitSLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOlIucmdiKSxrKSl9ZnVuY3Rpb24g''@;'; put 'put ''VXYoUyxSLGspe2lmKGspc3dpdGNoKCtTKXtjYXNlIDY0OlM9NjU7YnJlYWs7Y2FzZSA2NTpTPTY0fXZhciBHPVImJlJbK1NdfHxyMFsrU118fEh3WytTLTIwMF07aWYoODE9PStTJiYoRz1yMFsxXSksR3x8KEc9cjBbMV0pLCFHKXRocm93IG5ldyBFcnJvcigiYmFkIElDViBpbmRleCAiK1Mp''@;'; put 'put ''O3JldHVybiBoZChHKX1mdW5jdGlvbiBnayhTLFIsayl7dmFyIEc9e307cmV0dXJuIG51bGwhPVMuaW5kZXhlZCYmKEcuaW5kZXg9cGFyc2VJbnQoUy5pbmRleGVkLDEwKSxHLnJnYj1VdihHLmluZGV4LFIuSW5kZXhlZCkpLG51bGwhPVMudGhlbWUmJihHLnRoZW1lPXBhcnNlSW50KFMudGhl''@;'; put 'put ''bWUsMTApKSxudWxsIT1TLnRpbnQmJihHLnRpbnQ9cGFyc2VGbG9hdChTLnRpbnQpKSxudWxsIT1TLnJnYiYmKEcucmdiPVMucmdiLnNsaWNlKC02KSksbnVsbCE9Ry50aGVtZSYmIUcucmdiJiZrLnRoZW1lRWxlbWVudHMmJihHLnJnYj1TNShrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0cu''@;'; put 'put ''dGhlbWVdLnJnYixHLnRpbnR8fDApLEcucmF3X3JnYj1rLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0cudGhlbWVdLnJnYiksR31mdW5jdGlvbiB3QyhTLFIsayxHKXtSLkJvcmRlcnM9W107dmFyIFE9e30sb2U9e30sZ2U9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihwZSl7dmFyIHllPXZyKHBlKTtzd2l0Y2goV24oeWVbMF0pKXtjYXNlIjxib3JkZXJzIjpjYXNlIjxib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcnM+IjpjYXNlIjwvYm9yZGVyPiI6Y2FzZSI8bGVmdC8+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPC9yaWdodD4iOmNhc2Ui''@;'; put 'put ''PHRvcC8+IjpjYXNlIjwvdG9wPiI6Y2FzZSI8Ym90dG9tLz4iOmNhc2UiPC9ib3R0b20+IjpjYXNlIjxkaWFnb25hbCI6Y2FzZSI8ZGlhZ29uYWw+IjpjYXNlIjxkaWFnb25hbC8+IjpjYXNlIjxob3Jpem9udGFsIjpjYXNlIjxob3Jpem9udGFsPiI6Y2FzZSI8aG9yaXpvbnRhbC8+IjpjYXNl''@;'; put 'put ''Ijx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3Iv''@;'; put 'put ''PiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6UT17fSx5ZS5kaWFnb25hbFVwJiYoUS5kaWFnb25hbFVwPXRpKHllLmRpYWdvbmFsVXAp''@;'; put 'put ''KSx5ZS5kaWFnb25hbERvd24mJihRLmRpYWdvbmFsRG93bj10aSh5ZS5kaWFnb25hbERvd24pKSxSLkJvcmRlcnMucHVzaChRKTticmVhaztjYXNlIjxsZWZ0IjpjYXNlIjxsZWZ0PiI6b2U9US5sZWZ0PXt9LHllLnN0eWxlJiYob2Uuc3R5bGU9eWUuc3R5bGUpO2JyZWFrO2Nhc2UiPHJpZ2h0''@;'; put 'put ''IjpjYXNlIjxyaWdodD4iOm9lPVEucmlnaHQ9e30seWUuc3R5bGUmJihvZS5zdHlsZT15ZS5zdHlsZSk7YnJlYWs7Y2FzZSI8dG9wIjpjYXNlIjx0b3A+IjpvZT1RLnRvcD17fSx5ZS5zdHlsZSYmKG9lLnN0eWxlPXllLnN0eWxlKTticmVhaztjYXNlIjxib3R0b20iOmNhc2UiPGJvdHRvbT4i''@;'; put 'put ''Om9lPVEuYm90dG9tPXt9LHllLnN0eWxlJiYob2Uuc3R5bGU9eWUuc3R5bGUpO2JyZWFrO2Nhc2UiPC9kaWFnb25hbD4iOlEuZGlhZ29uYWw9b2Usb2U9e307YnJlYWs7Y2FzZSI8L2hvcml6b250YWw+IjpRLmhvcml6b250YWw9b2Usb2U9e307YnJlYWs7Y2FzZSI8L3ZlcnRpY2FsPiI6US52''@;'; put 'put ''ZXJ0aWNhbD1vZSxvZT17fTticmVhaztjYXNlIjxjb2xvciI6Y2FzZSI8Y29sb3I+IjpvZS5jb2xvcnx8KG9lLmNvbG9yPXt9KSx5ZS5hdXRvJiYob2UuY29sb3IuYXV0bz10aSh5ZS5hdXRvKSksbnVsbCE9eWUucmdiP29lLmNvbG9yLnJnYj15ZS5yZ2Iuc2xpY2UoLTYpOnllLmluZGV4ZWQ/''@;'; put 'put ''KG9lLmNvbG9yLmluZGV4PXBhcnNlSW50KHllLmluZGV4ZWQsMTApLG9lLmNvbG9yLnJnYj1VdihvZS5jb2xvci5pbmRleCxSLkluZGV4ZWQsITEpKTp5ZS50aGVtZSYmKG9lLmNvbG9yLnRoZW1lPXBhcnNlSW50KHllLnRoZW1lLDEwKSx5ZS50aW50JiYob2UuY29sb3IudGludD1wYXJzZUZs''@;'; put 'put ''b2F0KHllLnRpbnQpKSx5ZS50aGVtZSYmay50aGVtZUVsZW1lbnRzJiZrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYob2UuY29sb3IucmdiPVM1KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbb2UuY29sb3IudGhlbWVdLnJnYixvZS5jb2xvci50aW50fHwwKSkpLCF5ZS5hdXRvJiZudWxs''@;'; put 'put ''PT15ZS5yZ2ImJiF5ZS5pbmRleGVkJiZkZWxldGUgb2UuY29sb3I7YnJlYWs7Y2FzZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIWdlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIreWVbMF0rIiBpbiBib3Jk''@;'; put 'put ''ZXJzIil9fSl9ZnVuY3Rpb24gUjQoUyxSKXt2YXIgaz1bIjwiK1JdO3JldHVybiBTJiZTLnN0eWxlPyhrLnB1c2goJyBzdHlsZT0iJytTLnN0eWxlKyciJyksUy5jb2xvcj8oay5wdXNoKCI+Iiksay5wdXNoKGdkKFMuY29sb3IsITApKSxrLmpvaW4oIiIpKyI8LyIrUisiPiIpOmsuam9pbigi''@;'; put 'put ''IikrIi8+Iik6a1swXSsiLz4ifWZ1bmN0aW9uIEZWKFMsUixrLEcpe1IuRmlsbHM9W107dmFyIFE9e30sb2U9e30sZ2U9ITEscGU9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbih5ZSl7dmFyIFBlPXZyKHllKTtzd2l0Y2goV24oUGVbMF0pKXtjYXNlIjxmaWxscyI6''@;'; put 'put ''Y2FzZSI8ZmlsbHM+IjpjYXNlIjwvZmlsbHM+IjpjYXNlIjwvZmlsbD4iOmNhc2UiPC9ncmFkaWVudEZpbGw+IjpjYXNlIjxiZ0NvbG9yLz4iOmNhc2UiPC9iZ0NvbG9yPiI6Y2FzZSI8ZmdDb2xvci8+IjpjYXNlIjwvZmdDb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNh''@;'; put 'put ''c2UiPHN0b3AvPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZmlsbD4iOmNhc2UiPGZpbGwiOmNhc2UiPGZpbGwvPiI6Ui5GaWxscy5wdXNoKFE9e30pO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbD4iOlEuc3RvcHM9W107YnJlYWs7''@;'; put 'put ''Y2FzZSI8Z3JhZGllbnRGaWxsIjpRLnN0b3BzPVtdLFBlLmRlZ3JlZSYmKFEuYW5nbGU9K1BlLmRlZ3JlZSk7YnJlYWs7Y2FzZSI8cGF0dGVybkZpbGwiOmNhc2UiPHBhdHRlcm5GaWxsPiI6UGUucGF0dGVyblR5cGUmJihRLnBhdHRlcm5UeXBlPVBlLnBhdHRlcm5UeXBlKTticmVhaztjYXNl''@;'; put 'put ''IjxwYXR0ZXJuRmlsbC8+IjpjYXNlIjwvcGF0dGVybkZpbGw+IjppZihnZSl0aHJvdyBuZXcgRXJyb3IoImJhZCBzdG9wIik7YnJlYWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGJnQ29sb3IiOmNhc2UiPGZnQ29sb3IiOnZhciBOZT1XbihQZVswXSkuc2xpY2UoMSk7ImNvbG9yIiE9TmUmJiFRW05l''@;'; put 'put ''XSYmKFFbTmVdPXt9KTt2YXIgWWU9Z2U/b2U6UVtOZV07bnVsbCE9UGUuaW5kZXhlZCYmKFllLmluZGV4PXBhcnNlSW50KFBlLmluZGV4ZWQsMTApLFllLnJnYj1VdihZZS5pbmRleCxSLkluZGV4ZWQpKSxudWxsIT1QZS50aGVtZSYmKFllLnRoZW1lPXBhcnNlSW50KFBlLnRoZW1lLDEwKSks''@;'; put 'put ''bnVsbCE9UGUudGludCYmKFllLnRpbnQ9cGFyc2VGbG9hdChQZS50aW50KSksbnVsbCE9UGUucmdiJiYoWWUucmdiPVBlLnJnYi5zbGljZSgtNikpLG51bGwhPVBlLmF1dG8mJmRlbGV0ZSBRW05lXSxudWxsIT1ZZS50aGVtZSYmIVllLnJnYiYmay50aGVtZUVsZW1lbnRzJiYoWWUucmdiPVM1''@;'; put 'put ''KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbWWUudGhlbWVdLnJnYixZZS50aW50fHwwKSxHLldURiYmKFllLnJhd19yZ2I9ay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtZZS50aGVtZV0ucmdiKSk7YnJlYWs7Y2FzZSI8c3RvcD4iOmdlPSEwLG9lPXt9O2JyZWFrO2Nhc2UiPHN0b3AiOmdl''@;'; put 'put ''PSEwLG9lPXt9LG51bGwhPVBlLnBvc2l0aW9uJiYob2Uudj1wYXJzZUZsb2F0KFBlLnBvc2l0aW9uKSk7YnJlYWs7Y2FzZSI8L3N0b3A+IjpnZT0hMSxRLnN0b3BzLnB1c2gob2UpO2JyZWFrO2Nhc2UiPGV4dCI6cGU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnBlPSExO2JyZWFrO2RlZmF1bHQ6''@;'; put 'put ''aWYoRyYmRy5XVEYmJiFwZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK1BlWzBdKyIgaW4gZmlsbHMiKX19KX1mdW5jdGlvbiBIVihTLFIsayxHKXtSLkZvbnRzPVtdO3ZhciBRPXt9LG9lPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhciBw''@;'; put 'put ''ZT12cihnZSk7c3dpdGNoKFduKHBlWzBdKSl7Y2FzZSI8Zm9udHMiOmNhc2UiPGZvbnRzPiI6Y2FzZSI8L2ZvbnRzPiI6YnJlYWs7Y2FzZSI8Zm9udCI6Y2FzZSI8Zm9udD4iOmlmKCIvPiIhPWdlLnNsaWNlKC0yKSlicmVhaztjYXNlIjwvZm9udD4iOmNhc2UiPGZvbnQvPiI6Ui5Gb250cy5w''@;'; put 'put ''dXNoKFEpLFE9e307YnJlYWs7Y2FzZSI8bmFtZSI6cGUudmFsJiYoUS5uYW1lPWdvKHBlLnZhbCkpO2JyZWFrO2Nhc2UiPG5hbWUvPiI6Y2FzZSI8L25hbWU+IjpicmVhaztjYXNlIjxiIjpRLmJvbGQ9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOmNhc2UiPGI+IjpRLmJv''@;'; put 'put ''bGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOlEuaXRhbGljPXBlLnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8aS8+IjpjYXNlIjxpPiI6US5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPHUiOnN3aXRjaChwZS52YWwpe2Nhc2Uibm9uZSI6US51''@;'; put 'put ''bmRlcmxpbmU9MDticmVhaztjYXNlInNpbmdsZSI6US51bmRlcmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6US51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOlEudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6US51bmRlcmxpbmU9MzR9''@;'; put 'put ''YnJlYWs7Y2FzZSI8dS8+IjpjYXNlIjx1PiI6US51bmRlcmxpbmU9MTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPHN0cmlrZSI6US5zdHJpa2U9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxzdHJpa2UvPiI6US5zdHJpa2U9MTticmVhaztjYXNlIjxvdXRsaW5lIjpRLm91''@;'; put 'put ''dGxpbmU9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxvdXRsaW5lLz4iOlEub3V0bGluZT0xO2JyZWFrO2Nhc2UiPHNoYWRvdyI6US5zaGFkb3c9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6US5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5zZSI6''@;'; put 'put ''US5jb25kZW5zZT1wZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPGNvbmRlbnNlLz4iOlEuY29uZGVuc2U9MTticmVhaztjYXNlIjxleHRlbmQiOlEuZXh0ZW5kPXBlLnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0ZW5kLz4iOlEuZXh0ZW5kPTE7YnJlYWs7Y2FzZSI8c3oi''@;'; put 'put ''OnBlLnZhbCYmKFEuc3o9K3BlLnZhbCk7YnJlYWs7Y2FzZSI8c3ovPiI6Y2FzZSI8L3N6PiI6YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPShwZS52YWx8fCJub25lIikmJihRLnZhbGlnbj1wZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbi8+''@;'; put 'put ''IjpjYXNlIjwvdmVydEFsaWduPiI6YnJlYWs7Y2FzZSI8ZmFtaWx5IjpwZS52YWwmJihRLmZhbWlseT1wYXJzZUludChwZS52YWwsMTApKTticmVhaztjYXNlIjxmYW1pbHkvPiI6Y2FzZSI8L2ZhbWlseT4iOmJyZWFrO2Nhc2UiPHNjaGVtZSI6cGUudmFsJiYoUS5zY2hlbWU9cGUudmFsKTti''@;'; put 'put ''cmVhaztjYXNlIjxzY2hlbWUvPiI6Y2FzZSI8L3NjaGVtZT4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09cGUudmFsKWJyZWFrO3BlLmNvZGVwYWdlPU5bcGFyc2VJbnQocGUudmFsLDEwKV07YnJlYWs7Y2FzZSI8Y29sb3IiOlEuY29sb3J8fChRLmNvbG9yPXt9KSxwZS5hdXRvJiYo''@;'; put 'put ''US5jb2xvci5hdXRvPXRpKHBlLmF1dG8pKSxwZS5yZ2I/US5jb2xvci5yZ2I9cGUucmdiLnNsaWNlKC02KTpwZS5pbmRleGVkPyhRLmNvbG9yLmluZGV4PXBhcnNlSW50KHBlLmluZGV4ZWQsMTApLFEuY29sb3IucmdiPVV2KFEuY29sb3IuaW5kZXgsUi5JbmRleGVkKSk6cGUudGhlbWUmJihR''@;'; put 'put ''LmNvbG9yLnRoZW1lPXBhcnNlSW50KHBlLnRoZW1lLDEwKSxwZS50aW50JiYoUS5jb2xvci50aW50PXBhcnNlRmxvYXQocGUudGludCkpLHBlLnRoZW1lJiZrLnRoZW1lRWxlbWVudHMmJmsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihRLmNvbG9yLnJnYj1TNShrLnRoZW1lRWxlbWVudHMu''@;'; put 'put ''Y2xyU2NoZW1lW1EuY29sb3IudGhlbWVdLnJnYixRLmNvbG9yLnRpbnR8fDApKSk7YnJlYWs7Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6b2U9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpvZT0hMTticmVhaztj''@;'; put 'put ''YXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOm9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpvZT0hMTticmVhaztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhb2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitwZVswXSsiIGlu''@;'; put 'put ''IGZvbnRzIil9fSl9dmFyIEE1PXswOiJub25lIiwxOiJzaW5nbGUiLDI6ImRvdWJsZSIsMzM6InNpbmdsZUFjY291bnRpbmciLDM0OiJkb3VibGVBY2NvdW50aW5nIn0sWjM9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRlcklkIiwieGZJZCJdLFczPVsiYXBwbHlBbGlnbm1l''@;'; put 'put ''bnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIsImFwcGx5Rm9udCIsImFwcGx5TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0aW9uIiwicGl2b3RCdXR0b24iLCJxdW90ZVByZWZpeCJdLEw0PWZ1bmN0aW9uKCl7dmFyIFM9LzwoPzpcdys6KT9mb250KFtePl0qKT5bXFNcc10qPzxcLyg/''@;'; put 'put ''Olx3KzopP2ZvbnQ+LyxSPS88KD86XHcrOik/bnVtRm10KFtePl0qKVwvPi8saz0vPCg/Olx3KzopP2ZpbGwoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbD4vLFE9LzwoPzpcdys6KT9ib3JkZXIoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVyPi87cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKHBlLHllLFBlLE5lKXt2YXIgY3QsRXQsWWU9e30sZXQ9e307cmV0dXJuKGN0PXBlLm1hdGNoKFMpKSYmKEhWKGN0LFllLFBlLE5lKSwoWWUuRm9udHN8fFtdKVswXSYmUHQoZXQsWWUuRm9udHNbMF0pKSwoY3Q9cGUubWF0Y2goUikpJiYoRXQ9dnIoZ28oY3RbMF0pKSxldC56PUV0LmZv''@;'; put 'put ''cm1hdENvZGU/UXIoRXQuZm9ybWF0Q29kZSk6KHllLk51bWJlckZtdHx8W10pWytFdC5udW1GbXRJZF18fCJHZW5lcmFsIiksKGN0PXBlLm1hdGNoKGspKSYmKEZWKGN0LFllLFBlLE5lKSwoWWUuRmlsbHN8fFtdKVswXSYmUHQoZXQsWWUuRmlsbHNbMF0pKSwoY3Q9cGUubWF0Y2goUSkpJiYo''@;'; put 'put ''d0MoY3QsWWUsUGUsTmUpLChZZS5Cb3JkZXJzfHxbXSlbMF0mJlB0KGV0LFllLkJvcmRlcnNbMF0pKSxldH19KCksSmk9LzwoPzpcdys6KT9keGY+W1xTXHNdKj88XC8oPzpcdys6KT9keGY+L2csS3I9LzwoPzpcdys6KT90YWJsZVN0eWxlXGIuKj8+W1xTXHNdKj88XC8oPzpcdys6KT90YWJs''@;'; put 'put ''ZVN0eWxlPi9nO3ZhciBfaz1mdW5jdGlvbigpe3ZhciBSPS88KD86XHcrOik/bnVtRm10cyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9udW1GbXRzPi8saz0vPCg/Olx3KzopP2NlbGxTdHlsZVhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsU3R5bGVYZnM+LyxHPS88KD86''@;'; put 'put ''XHcrOik/Y2VsbFN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsU3R5bGVzPi8sUT0vPCg/Olx3KzopP2NlbGxYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFhmcz4vLG9lPS88KD86XHcrOik/ZmlsbHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zmls''@;'; put 'put ''bHM+LyxnZT0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnRzPi8scGU9LzwoPzpcdys6KT9ib3JkZXJzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcnM+Lyx5ZT0vPCg/Olx3KzopP2luZGV4ZWRDb2xvcnMoW14+XSopPltcU1xzXSo/PFwv''@;'; put 'put ''KD86XHcrOik/aW5kZXhlZENvbG9ycz4vLFBlPS88KD86XHcrOik/dGFibGVTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZXM+LyxOZT0vPCg/Olx3KzopP2R4ZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmcz4vO3JldHVybiBmdW5jdGlvbihldCxj''@;'; put 'put ''dCxFdCl7dmFyIGJ0LGF0PXt9O3JldHVybiBldD8oKGJ0PShldD1ldC5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaCh5ZSkpJiZmdW5jdGlvbiBOVihTLFIsayl7Ui5JbmRleGVkfHwoUi5J''@;'; put 'put ''bmRleGVkPVtdKTt2YXIgRz0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBvZT12cihRKTtzd2l0Y2goV24ob2VbMF0pKXtjYXNlIjxpbmRleGVkQ29sb3JzPiI6Y2FzZSI8aW5kZXhlZENvbG9ycyI6Y2FzZSI8aW5kZXhlZENvbG9ycy8+IjpjYXNlIjwv''@;'; put 'put ''aW5kZXhlZENvbG9ycz4iOmNhc2UiPC9yZ2JDb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHJnYkNvbG9yIjpkZWxldGUgb2VbMF07dmFyIGdlPXBhcnNlSW50KG9lLnJnYi5zbGljZSgtNiksMTYpO1IuSW5kZXhlZC5wdXNo''@;'; put 'put ''KFtnZT4+MTYmMjU1LGdlPj44JjI1NSwyNTUmZ2VdKTticmVhaztjYXNlIjxleHQiOkc9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOkc9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYmIUcpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitvZVswXSsiIGluIGNlbGxTdHlsZXMiKX19''@;'; put 'put ''KX0oYnQsYXQsRXQpLChidD1ldC5tYXRjaChSKSkmJmZ1bmN0aW9uIHZrKFMsUixrKXtSLk51bWJlckZtdD1bXTtmb3IodmFyIEc9T2UoQS5fdGFibGUpLFE9MDtRPEcubGVuZ3RoOysrUSlSLk51bWJlckZtdFtHW1FdXT1BLl90YWJsZVtHW1FdXTt2YXIgb2U9U1swXS5tYXRjaChlbik7aWYo''@;'; put 'put ''b2UpZm9yKFE9MDtRPG9lLmxlbmd0aDsrK1Epe3ZhciBnZT12cihvZVtRXSk7c3dpdGNoKFduKGdlWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2''@;'; put 'put ''YXIgcGU9UXIoZ28oZ2UuZm9ybWF0Q29kZSkpLHllPXBhcnNlSW50KGdlLm51bUZtdElkLDEwKTtpZihSLk51bWJlckZtdFt5ZV09cGUseWU+MCl7aWYoeWU+MzkyKXtmb3IoeWU9MzkyO3llPjYwJiZudWxsIT1SLk51bWJlckZtdFt5ZV07LS15ZSk7Ui5OdW1iZXJGbXRbeWVdPXBlfUEubG9h''@;'; put 'put ''ZChwZSx5ZSl9YnJlYWs7ZGVmYXVsdDppZihrLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2dlWzBdKyIgaW4gbnVtRm10cyIpfX19KGJ0LGF0LEV0KSwoYnQ9ZXQubWF0Y2goZ2UpKSYmSFYoYnQsYXQsY3QsRXQpLChidD1ldC5tYXRjaChvZSkpJiZGVihidCxhdCxjdCxF''@;'; put 'put ''dCksKGJ0PWV0Lm1hdGNoKHBlKSkmJndDKGJ0LGF0LGN0LEV0KSwoYnQ9ZXQubWF0Y2goaykpJiZmdW5jdGlvbiBybmUoUyxSLGspe1IuQ2VsbFN0eWxlWGY9W107dmFyIEcsUT0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZ2U9dnIob2UpLHBlPTA7''@;'; put 'put ''c3dpdGNoKFduKGdlWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlWGZzIjpjYXNlIjxjZWxsU3R5bGVYZnM+IjpjYXNlIjxjZWxsU3R5bGVYZnMvPiI6Y2FzZSI8L2NlbGxTdHlsZVhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3Rl''@;'; put 'put ''Y3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoRz1nZSlbMF0scGU9MDtwZTxaMy5sZW5ndGg7KytwZSlHW1ozW3BlXV0mJihHW1ozW3BlXV09cGFyc2VJbnQoR1taM1twZV1d''@;'; put 'put ''LDEwKSk7Zm9yKHBlPTA7cGU8VzMubGVuZ3RoOysrcGUpR1tXM1twZV1dJiYoR1tXM1twZV1dPXRpKEdbVzNbcGVdXSkpO2lmKFIuTnVtYmVyRm10JiZHLm51bUZtdElkPjM5Milmb3IocGU9MzkyO3BlPjYwOy0tcGUpaWYoUi5OdW1iZXJGbXRbRy5udW1GbXRJZF09PVIuTnVtYmVyRm10W3Bl''@;'; put 'put ''XSl7Ry5udW1GbXRJZD1wZTticmVha31SLkNlbGxTdHlsZVhmLnB1c2goRyk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIHllPXt9O2dlLnZlcnRpY2FsJiYoeWUudmVydGljYWw9Z2UudmVydGljYWwpLGdlLmhvcml6b250YWwmJih5ZS5ob3Jpem9udGFs''@;'; put 'put ''PWdlLmhvcml6b250YWwpLG51bGwhPWdlLnRleHRSb3RhdGlvbiYmKHllLnRleHRSb3RhdGlvbj1nZS50ZXh0Um90YXRpb24pLGdlLmluZGVudCYmKHllLmluZGVudD1nZS5pbmRlbnQpLGdlLndyYXBUZXh0JiYoeWUud3JhcFRleHQ9Z2Uud3JhcFRleHQpLGdlLnNocmlua1RvRml0JiYoeWUu''@;'; put 'put ''c2hyaW5rVG9GaXQ9dGkoZ2Uuc2hyaW5rVG9GaXQpKSxHLmFsaWdubWVudD15ZTticmVhaztjYXNlIjxwcm90ZWN0aW9uIjpHLnByb3RlY3Rpb249e30sdGkoZ2UuaGlkZGVuKSYmKEcucHJvdGVjdGlvbi5oaWRkZW49ITApLG51bGwhPWdlLmxvY2tlZCYmKEcucHJvdGVjdGlvbi5lZGl0YWJs''@;'; put 'put ''ZT0hdGkoZ2UubG9ja2VkKSk7YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZ2VbMF0rIiBpbiBjZWxsU3R5bGVYZnMiKX19KX0oYnQsYXQsRXQp''@;'; put 'put ''LChidD1ldC5tYXRjaChHKSkmJmZ1bmN0aW9uIGFuZShTLFIsayl7Ui5DZWxsU3R5bGVYZnx8KFIuQ2VsbFN0eWxlWGY9W10pO3ZhciBHPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIG9lPXZyKFEpO3N3aXRjaChXbihvZVswXSkpe2Nhc2UiPGNlbGxT''@;'; put 'put ''dHlsZXMiOmNhc2UiPGNlbGxTdHlsZXM+IjpjYXNlIjxjZWxsU3R5bGVzLz4iOmNhc2UiPC9jZWxsU3R5bGVzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2NlbGxTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGNlbGxTdHlsZSI6''@;'; put 'put ''Y2FzZSI8Y2VsbFN0eWxlLz4iOmRlbGV0ZSBvZVswXTt2YXIgZ2U9K29lLnhmSWQ7aWYoUi5DZWxsU3R5bGVYZltnZV0pUi5DZWxsU3R5bGVYZltnZV0uc3R5bGU9Z28ob2UubmFtZSk7ZWxzZSBpZighb2UuYnVpbHRpbklkKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgQ2VsbFN0''@;'; put 'put ''eWxlICIrZ2UpO2JyZWFrO2Nhc2UiPGV4dCI6Rz0hMDticmVhaztjYXNlIjwvZXh0PiI6Rz0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYhRyl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK29lWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShidCxhdCxFdCksKGJ0PWV0Lm1h''@;'; put 'put ''dGNoKFEpKSYmZnVuY3Rpb24gYmsoUyxSLGspe1IuQ2VsbFhmPVtdO3ZhciBHLFE9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihvZSl7dmFyIGdlPXZyKG9lKSxwZT0wO3N3aXRjaChXbihnZVswXSkpe2Nhc2UiPGNlbGxYZnMiOmNhc2UiPGNlbGxYZnM+IjpjYXNl''@;'; put 'put ''IjxjZWxsWGZzLz4iOmNhc2UiPC9jZWxsWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2Fz''@;'; put 'put ''ZSI8eGYvPiI6Zm9yKGRlbGV0ZShHPWdlKVswXSxwZT0wO3BlPFozLmxlbmd0aDsrK3BlKUdbWjNbcGVdXSYmKEdbWjNbcGVdXT1wYXJzZUludChHW1ozW3BlXV0sMTApKTtmb3IocGU9MDtwZTxXMy5sZW5ndGg7KytwZSlHW1czW3BlXV0mJihHW1czW3BlXV09dGkoR1tXM1twZV1dKSk7aWYo''@;'; put 'put ''Ui5OdW1iZXJGbXQmJkcubnVtRm10SWQ+MzkyKWZvcihwZT0zOTI7cGU+NjA7LS1wZSlpZihSLk51bWJlckZtdFtHLm51bUZtdElkXT09Ui5OdW1iZXJGbXRbcGVdKXtHLm51bUZtdElkPXBlO2JyZWFrfVIuQ2VsbFN0eWxlWGYmJkcueGZJZCYmUi5DZWxsU3R5bGVYZltHLnhmSWRdJiZSLkNl''@;'; put 'put ''bGxTdHlsZVhmW0cueGZJZF0uc3R5bGUmJihHLnN0eWxlPVIuQ2VsbFN0eWxlWGZbRy54ZklkXS5zdHlsZSksUi5DZWxsWGYucHVzaChHKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIgeWU9e307Z2UudmVydGljYWwmJih5ZS52ZXJ0aWNhbD1nZS52ZXJ0''@;'; put 'put ''aWNhbCksZ2UuaG9yaXpvbnRhbCYmKHllLmhvcml6b250YWw9Z2UuaG9yaXpvbnRhbCksbnVsbCE9Z2UudGV4dFJvdGF0aW9uJiYoeWUudGV4dFJvdGF0aW9uPWdlLnRleHRSb3RhdGlvbiksZ2UuaW5kZW50JiYoeWUuaW5kZW50PWdlLmluZGVudCksZ2Uud3JhcFRleHQmJih5ZS53cmFwVGV4''@;'; put 'put ''dD10aShnZS53cmFwVGV4dCkpLGdlLnNocmlua1RvRml0JiYoeWUuc2hyaW5rVG9GaXQ9dGkoZ2Uuc2hyaW5rVG9GaXQpKSxHLmFsaWdubWVudD15ZTticmVhaztjYXNlIjxwcm90ZWN0aW9uIjpHLnByb3RlY3Rpb249e30sdGkoZ2UuaGlkZGVuKSYmKEcucHJvdGVjdGlvbi5oaWRkZW49ITAp''@;'; put 'put ''LG51bGwhPWdlLmxvY2tlZCYmKEcucHJvdGVjdGlvbi5lZGl0YWJsZT0hdGkoZ2UubG9ja2VkKSk7YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVs''@;'; put 'put ''dDppZihrJiZrLldURiYmIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitnZVswXSsiIGluIGNlbGxYZnMiKX19KX0oYnQsYXQsRXQpLChidD1ldC5tYXRjaChOZSkpJiZmdW5jdGlvbiB5ayhTLFIsayxHKXtSLkRYRnx8KFIuRFhGPVtdKSwoU1swXS5tYXRjaChKaSl8fFtdKS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKFEpe1IuRFhGLnB1c2goTDQoUSxSLGssRykpfSl9KGJ0LGF0LGN0LEV0KSwoYnQ9ZXQubWF0Y2goUGUpKSYmZnVuY3Rpb24gQlYoUyxSLGssRyl7Ui5UYWJsZXx8KFIuVGFibGU9W10pLChTWzBdLm1hdGNoKEtyKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7Ui5U''@;'; put 'put ''YWJsZS5wdXNoKGZ1bmN0aW9uIFZWKFMsUixrLEcpe3ZhciBRPSExLG9lPXt9O3JldHVybihTLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhciBwZT12cihnZSk7c3dpdGNoKFduKHBlWzBdKSl7Y2FzZSI8dGFibGVTdHlsZT4iOmNhc2UiPHRhYmxlU3R5bGUiOm9lLm5h''@;'; put 'put ''bWU9cGUubmFtZS5yZXBsYWNlKC9eKFRhYmxlfFBpdm90KVN0eWxlLywiIiksb2UucmF3bmFtZT1wZS5uYW1lLG9lLnBpdm90PSFwZS5waXZvdHx8dGkocGUucGl2b3QpLG9lLnRhYmxlPSFwZS50YWJsZXx8dGkocGUudGFibGUpO2JyZWFrO2Nhc2UiPHRhYmxlU3R5bGUvPiI6Y2FzZSI8L3Rh''@;'; put 'put ''YmxlU3R5bGU+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx0YWJsZVN0eWxlRWxlbWVudCI6aWYocGUudHlwZSYmcGUuZHhmSWQpe2lmKCFSLkRYRnx8IVIuRFhGWytwZS5keGZJZF0pdGhyb3cgbmV3IEVycm9yKGdlKyIgY2Fubm90''@;'; put 'put ''IGZpbmQgRFhGIik7b2VbcGUudHlwZV09Ui5EWEZbK3BlLmR4ZklkXX1icmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitwZVswXSsiIGluIHRhYmxl''@;'; put 'put ''U3R5bGUiKX19KSxvZX0oUSxSLDAsRykpfSl9KGJ0LGF0LDAsRXQpLChhdC5Gb250c3x8W10pWzBdJiZJNChhdC5Gb250c1swXSksYXQpOmF0fX0oKSx3az1Qcigic3R5bGVTaGVldCIsbnVsbCx7eG1sbnM6WWkubWFpblswXSwieG1sbnM6dnQiOllpLnZ0fSk7ZnVuY3Rpb24gWnYoUyxSKXt2''@;'; put 'put ''YXIgRyxrPVtJaSx3a107Uy5TU0YmJm51bGwhPShHPWZ1bmN0aW9uIGs1KFMpe3ZhciBSPVsiPG51bUZtdHM+Il07cmV0dXJuW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihrKXtmb3IodmFyIEc9a1swXTtHPD1rWzFdOysrRyludWxsIT1TW0ddJiYo''@;'; put 'put ''UltSLmxlbmd0aF09UHIoIm51bUZtdCIsbnVsbCx7bnVtRm10SWQ6Ryxmb3JtYXRDb2RlOkxyKFNbR10pfSkpfSksMT09PVIubGVuZ3RoPyIiOihSW1IubGVuZ3RoXT0iPC9udW1GbXRzPiIsUlswXT1QcigibnVtRm10cyIsbnVsbCx7Y291bnQ6Ui5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+Iiwi''@;'; put 'put ''PiIpLFIuam9pbigiIikpfShTLlNTRikpJiYoa1trLmxlbmd0aF09Ryksa1trLmxlbmd0aF09ZnVuY3Rpb24gZzIoUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1bIjxmb250PiJdO2suYm9sZCYmRy5wdXNoKCI8Yi8+Iiksay5pdGFsaWMmJkcucHVzaCgi''@;'; put 'put ''PGkvPiIpLGsuc3RyaWtlJiZHLnB1c2goIjxzdHJpa2UvPiIpLGsuc2hhZG93JiZHLnB1c2goIjxzaGFkb3cvPiIpLEE1WytrLnVuZGVybGluZV0mJkcucHVzaCgnPHUgdmFsPSInK0E1WytrLnVuZGVybGluZV0rJyIvPicpLGsuc3omJkcucHVzaCgnPHN6IHZhbD0iJytrLnN6KyciLz4nKSxr''@;'; put 'put ''LmNvbG9yJiZHLnB1c2goZ2Qoay5jb2xvciwhMCkpLGsubmFtZSYmRy5wdXNoKCc8bmFtZSB2YWw9Iicray5uYW1lKyciLz4nKSxrLmZhbWlseSYmRy5wdXNoKCc8ZmFtaWx5IHZhbD0iJytrLmZhbWlseSsnIi8+Jyksay5zY2hlbWUmJkcucHVzaCgnPHNjaGVtZSB2YWw9Iicray5zY2hlbWUr''@;'; put 'put ''JyIvPicpLGsudmFsaWduJiZHLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK2sudmFsaWduKygic3ViIj09ay52YWxpZ258fCJzdXBlciI9PWsudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+JyksUi5wdXNoKEcuam9pbigiIikrIjwvZm9udD4iKX0pLCc8Zm9udHMgY291bnQ9IicrUi5sZW5ndGgr''@;'; put 'put ''JyI+JytSLmpvaW4oIiIpKyI8L2ZvbnRzPiJ9KChTLlN0eWxlc3x8e30pLkZvbnRzfHxbXSksa1trLmxlbmd0aF09ZnVuY3Rpb24gbWsoUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1udWxsO2lmKGsuc3RvcHMmJmsuc3RvcHMubGVuZ3RoKXt2YXIgUT17''@;'; put 'put ''fTtrLmFuZ2xlJiYoUS5kZWdyZWU9TWF0aC5yb3VuZChrLmFuZ2xlKSksRz1rLnN0b3BzLm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIFByKCJzdG9wIixnZChvZSwiY29sb3IiLCEwKSxudWxsIT1vZS52P3twb3NpdGlvbjpvZS52fTp7fSl9KSxSLnB1c2goIjxmaWxsPiIrUHIoImdyYWRpZW50''@;'; put 'put ''RmlsbCIsRy5qb2luKCIiKSxRKSsiPC9maWxsPiIpfWVsc2V7aWYoay5mZ0NvbG9yKXtpZihHPShHfHwiIikrIjxmZ0NvbG9yICIsay5mZ0NvbG9yLnRoZW1lKUcrPSd0aGVtZT0iJytrLmZnQ29sb3IudGhlbWUrJyInKyhrLmZnQ29sb3IudGludD8nIHRpbnQ9Iicray5mZ0NvbG9yLnRpbnQr''@;'; put 'put ''JyInOiIiKSsiLz4iO2Vsc2UgaWYobnVsbCE9ay5mZ0NvbG9yLmluZGV4JiZudWxsPT1rLmZnQ29sb3IucmdiKUcrPSdpbmRleGVkPSInK2suZmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKGsuZmdDb2xvci5hdXRvKUcrPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PWsuZmdDb2xvci5y''@;'; put 'put ''Z2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29sb3IgIitPZShrLmZnQ29sb3IpLmpvaW4oInwiKSk7Rys9J3JnYj0iRkYnK1AwKGsuZmdDb2xvci5yZ2IpKyciLz4nfSJzb2xpZCI9PWsucGF0dGVyblR5cGUmJiFrLmJnQ29sb3ImJihrLmJnQ29sb3I9e2luZGV4OjY0fSl9aWYoay5iZ0NvbG9y''@;'; put 'put ''KWlmKEc9KEd8fCIiKSsiPGJnQ29sb3IgIixrLmJnQ29sb3IudGhlbWUpRys9J3RoZW1lPSInK2suYmdDb2xvci50aGVtZSsnIi8+JztlbHNlIGlmKG51bGwhPWsuYmdDb2xvci5pbmRleCYmbnVsbD09ay5iZ0NvbG9yLnJnYilHKz0naW5kZXhlZD0iJytrLmJnQ29sb3IuaW5kZXgrJyIvPic7''@;'; put 'put ''ZWxzZSBpZihrLmJnQ29sb3IuYXV0bylHKz0nYXV0bz0iMSIvPic7ZWxzZXtpZihudWxsPT1rLmJnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrT2Uoay5iZ0NvbG9yKS5qb2luKCJ8IikpO0crPSdyZ2I9IkZGJytQMChrLmJnQ29sb3IucmdiKSsnIi8+J31SLnB1c2go''@;'; put 'put ''IjxmaWxsPiIrUHIoInBhdHRlcm5GaWxsIixHLHtwYXR0ZXJuVHlwZTprLnBhdHRlcm5UeXBlfSkrIjwvZmlsbD4iKX19KSwnPGZpbGxzIGNvdW50PSInK1IubGVuZ3RoKyciPicrUi5qb2luKCIiKSsiPC9maWxscz4ifSgoUy5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGtbay5sZW5ndGhdPWZ1''@;'; put 'put ''bmN0aW9uIERzKFMpe3ZhciBSPVtdO3JldHVybiBTLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEc9W107Ry5wdXNoKFI0KGsubGVmdCwibGVmdCIpKSxHLnB1c2goUjQoay5yaWdodCwicmlnaHQiKSksRy5wdXNoKFI0KGsudG9wLCJ0b3AiKSksRy5wdXNoKFI0KGsuYm90dG9tLCJib3R0b20i''@;'; put 'put ''KSksRy5wdXNoKFI0KGsuZGlhZ29uYWwsImRpYWdvbmFsIikpLFIucHVzaCgiPGJvcmRlcj4iK0cuam9pbigiIikrIjwvYm9yZGVyPiIpfSksJzxib3JkZXJzIGNvdW50PSInK1IubGVuZ3RoKyciPicrUi5qb2luKCIiKSsiPC9ib3JkZXJzPiJ9KChTLlN0eWxlc3x8e30pLkJvcmRlcnN8fFtd''@;'; put 'put ''KSxrW2subGVuZ3RoXT1mdW5jdGlvbiBpbmUoUyl7dmFyIFI9Wyc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIvPiddO2lmKFMpZm9yKHZhciBrPTE7azxTLmxlbmd0aDsrK2spUi5wdXNoKFByKCJ4ZiIsbnVsbCx7bnVtRm10SWQ6U1trXS5udW1G''@;'; put 'put ''bXRJZHx8MCxmb250SWQ6U1trXS5mb250SWR8fDAsZmlsbElkOlNba10uZmlsbElkfHwwLGJvcmRlcklkOlNba10uYm9yZGVySWR8fDB9KSk7cmV0dXJuJzxjZWxsU3R5bGVYZnMgY291bnQ9IicrUi5sZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2NlbGxTdHlsZVhmcz4ifShSLmNlbGxTdHls''@;'; put 'put ''ZVhmcyksKEc9ZnVuY3Rpb24gbm5lKFMpe3ZhciBSPVtdO3JldHVybiBSW1IubGVuZ3RoXT1QcigiY2VsbFhmcyIsbnVsbCksUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPWsuYWxpZ25tZW50O2RlbGV0ZSBrLmFsaWdubWVudDt2YXIgUT1rLnByb3RlY3Rpb247ZGVsZXRlIGsucHJvdGVj''@;'; put 'put ''dGlvbjt2YXIgb2U9Rz9QcigiYWxpZ25tZW50IixudWxsLEcpOiIiO29lKz1RP1ByKCJwcm90ZWN0aW9uIixudWxsLHtoaWRkZW46US5oaWRkZW4/MTowLGxvY2tlZDpRLmVkaXRhYmxlPzA6MX0pOiIiLFJbUi5sZW5ndGhdPVByKCJ4ZiIsb2V8fG51bGwsayksRyYmKGsuYWxpZ25tZW50PUcp''@;'; put 'put ''LFEmJihrLnByb3RlY3Rpb249USl9KSxSW1IubGVuZ3RoXT0iPC9jZWxsWGZzPiIsMj09PVIubGVuZ3RoPyIiOihSWzBdPVByKCJjZWxsWGZzIixudWxsLHtjb3VudDpSLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksUi5qb2luKCIiKSl9KFIuY2VsbFhmcykpJiYoa1trLmxlbmd0aF09''@;'; put 'put ''Ryksa1trLmxlbmd0aF09ZnVuY3Rpb24gb25lKFMpe3ZhciBSPVsnPGNlbGxTdHlsZSBuYW1lPSJOb3JtYWwiIHhmSWQ9IjAiIGJ1aWx0aW5JZD0iMCIvPiddO2lmKFMpZm9yKHZhciBrPTE7azxTLmxlbmd0aDsrK2spUi5wdXNoKFByKCJjZWxsU3R5bGUiLG51bGwse25hbWU6U1trXS5uYW1l''@;'; put 'put ''LHhmSWQ6a30pKTtyZXR1cm4nPGNlbGxTdHlsZXMgY291bnQ9IicrUi5sZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2NlbGxTdHlsZXM+In0oUi5jZWxsU3R5bGVYZnMpLFMuU3R5bGVzLkRYRnx8KFMuU3R5bGVzLkRYRj1bXSk7dmFyIFE9ZnVuY3Rpb24gZmQoUyxSLGspe3ZhciBHPVsnPHRh''@;'; put 'put ''YmxlU3R5bGVzIGNvdW50PSInKyhTfHxbXSkubGVuZ3RoKyciIGRlZmF1bHRUYWJsZVN0eWxlPSJUYWJsZVN0eWxlTWVkaXVtOSIgZGVmYXVsdFBpdm90U3R5bGU9IlBpdm90U3R5bGVNZWRpdW00IiddO3JldHVybiBTJiZTLmxlbmd0aD8oR1swXSs9Ij4iLFMuZm9yRWFjaChmdW5jdGlvbihR''@;'; put 'put ''KXtHLnB1c2goZnVuY3Rpb24gQ0MoUyxSLGspe3ZhciBHPVtdO1sid2hvbGVUYWJsZSIsImhlYWRlclJvdyIsInRvdGFsUm93IiwiZmlyc3RDb2x1bW4iLCJsYXN0Q29sdW1uIiwiZmlyc3RSb3dTdHJpcGUiLCJzZWNvbmRSb3dTdHJpcGUiLCJmaXJzdENvbHVtblN0cmlwZSIsInNlY29uZENv''@;'; put 'put ''bHVtblN0cmlwZSIsImZpcnN0SGVhZGVyQ2VsbCIsImxhc3RIZWFkZXJDZWxsIiwiZmlyc3RUb3RhbENlbGwiLCJsYXN0VG90YWxDZWxsIiwiZmlyc3RTdWJ0b3RhbENvbHVtbiIsInNlY29uZFN1YnRvdGFsQ29sdW1uIiwidGhpcmRTdWJ0b3RhbENvbHVtbiIsImZpcnN0U3VidG90YWxSb3ci''@;'; put 'put ''LCJzZWNvbmRTdWJ0b3RhbFJvdyIsInRoaXJkU3VidG90YWxSb3ciLCJibGFua1JvdyIsImZpcnN0Q29sdW1uU3ViaGVhZGluZyIsInNlY29uZENvbHVtblN1YmhlYWRpbmciLCJ0aGlyZENvbHVtblN1YmhlYWRpbmciLCJmaXJzdFJvd1N1YmhlYWRpbmciLCJzZWNvbmRSb3dTdWJoZWFkaW5n''@;'; put 'put ''IiwidGhpcmRSb3dTdWJoZWFkaW5nIiwicGFnZUZpZWxkTGFiZWxzIiwicGFnZUZpZWxkVmFsdWVzIl0uZm9yRWFjaChmdW5jdGlvbihvZSl7aWYoU1tvZV0pe3ZhciBnZT1sUyhSLFNbb2VdKTtHLnB1c2goJzx0YWJsZVN0eWxlRWxlbWVudCBkeGZJZD0iJytnZSsnIiB0eXBlPSInK29lKyci''@;'; put 'put ''Lz4nKX19KTt2YXIgUT0nPHRhYmxlU3R5bGUgY291bnQ9IicrRy5sZW5ndGgrJyIgcGl2b3Q9IicrICshIVMucGl2b3QrJyIgbmFtZT0iJytTLm5hbWUrJyInO3JldHVybiBHLmxlbmd0aD9RKyI+IitHLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGU+IjpRKyIvPiJ9KFEsUikpfSksRy5qb2luKCIi''@;'; put 'put ''KSsiPC90YWJsZVN0eWxlcz4iKTpHWzBdKyIvPiJ9KChTLlN0eWxlc3x8e30pLlRhYmxlfHxbXSxTLlN0eWxlcy5EWEYpO3JldHVybiBrW2subGVuZ3RoXT1mdW5jdGlvbiBqVihTLFIpe2lmKCFTLmxlbmd0aClyZXR1cm4nPGR4ZnMgY291bnQ9IjAiLz4nO3ZhciBrPVsnPGR4ZnMgY291bnQ9''@;'; put 'put ''IicrUy5sZW5ndGgrJyI+J107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihHKXtrLnB1c2goZnVuY3Rpb24gZTgoUyxSKXt2YXIgaz17Ym9sZDoiYiIsaXRhbGljOiJpIix2YWxpZ246InZlcnRBbGlnbiJ9LEc9WyI8ZHhmPiJdLFE9W10sb2U9W10sZ2U9W10seWU9W107cmV0dXJuIE9lKFMp''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oTmUpe3N3aXRjaChOZSl7Y2FzZSJib2xkIjpjYXNlIml0YWxpYyI6Y2FzZSJzdHJpa2UiOmNhc2UidW5kZXJsaW5lIjpjYXNlImNvbG9yIjpjYXNlInZhbGlnbiI6Y2FzZSJzeiI6Y2FzZSJuYW1lIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNo''@;'; put 'put ''YXJzZXQiOmNhc2UiZmFtaWx5IjpjYXNlImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6Y2FzZSJzY2hlbWUiOlEucHVzaChOZSk7YnJlYWs7Y2FzZSJiZ0NvbG9yIjpjYXNlImZnQ29sb3IiOmdlLnB1c2goTmUpO2JyZWFrO2Nhc2UieiI6b2UucHVzaChOZSk7YnJlYWs7Y2FzZSJ0b3AiOmNhc2Ui''@;'; put 'put ''Ym90dG9tIjpjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiZGlhZ29uYWwiOmNhc2UidmVydGljYWwiOmNhc2UiaG9yaXpvbnRhbCI6eWUucHVzaChOZSk7YnJlYWs7Y2FzZSJwYXR0ZXJuVHlwZSI6Y2FzZSJkaWFnb25hbERvd24iOmNhc2UiZGlhZ29uYWxVcCI6Y2FzZSJzdG9wcyI6Y2Fz''@;'; put 'put ''ZSJkZWdyZWUiOmJyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkICIrTmUrIiBpbiBEWEYifX0pLFEubGVuZ3RoPjAmJihHLnB1c2goIjxmb250PiIpLFEuZm9yRWFjaChmdW5jdGlvbihOZSl7c3dpdGNoKE5lKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2Fz''@;'; put 'put ''ZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOkcucHVzaCgiPCIrKGtbTmVdfHxOZSkrJyB2YWw9IicrKFNbTmVdPyIxIjoiMCIpKyciLz4nKTticmVhaztjYXNlImNvbG9yIjpHLnB1c2goZ2QoU1tOZV0sTmUsITApKTticmVhaztjYXNlImZhbWls''@;'; put 'put ''eSI6Y2FzZSJuYW1lIjpjYXNlInN6IjpjYXNlInNjaGVtZSI6Ry5wdXNoKCI8Iisoa1tOZV18fE5lKSsnIHZhbD0iJytTW05lXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ1bmRlcmxpbmUiOkcucHVzaCgnPHUgdmFsPSInK0E1W1NbTmVdfHwwXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ2YWxpZ24iOkcucHVz''@;'; put 'put ''aCgnPHZlcnRBbGlnbiB2YWw9IicrUy52YWxpZ24rKCJzdWIiPT1TLnZhbGlnbnx8InN1cGVyIj09Uy52YWxpZ24/InNjcmlwdCI6IiIpKyciLz4nKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrTmUrIiA6IGZvbnQgRFhGIn19KSxHLnB1c2goIjwvZm9udD4iKSksb2UubGVu''@;'; put 'put ''Z3RoPjAmJkcucHVzaCgnPG51bUZtdCBmb3JtYXRDb2RlPSInK0xyKFMueikrJyIgbnVtRm10SWQ9IicrZnVuY3Rpb24gc1MoUyxSKXtpZigibnVtYmVyIj09dHlwZW9mIFMpcmV0dXJuIFM7dmFyIGs9Ui5yZXZzc2ZbUz8/IkdlbmVyYWwiXSxHPTYwO2lmKG51bGw9PWspZm9yKDtHPDM5Mjsr''@;'; put 'put ''K0cpaWYobnVsbD09Ui5zc2ZbR10pcmV0dXJuIEEubG9hZChTLEcpLFIuc3NmW0ddPVMsUi5yZXZzc2ZbU109RyxHO3JldHVybiBrfShTLnosUikrJyIvPicpLGdlLmxlbmd0aD4wJiYoRy5wdXNoKCI8ZmlsbD4iKSxHLnB1c2goIjxwYXR0ZXJuRmlsbCIrKFMucGF0dGVyblR5cGU/JyBwYXR0''@;'; put 'put ''ZXJuVHlwZT0iJytTLnBhdHRlcm5UeXBlKyciPic6Ij4iKSksZ2UuZm9yRWFjaChmdW5jdGlvbihOZSl7c3dpdGNoKE5lKXtjYXNlInBhdHRlcm5UeXBlIjpicmVhaztjYXNlImZnQ29sb3IiOmNhc2UiYmdDb2xvciI6Ry5wdXNoKGdkKFNbTmVdLE5lLCEwKSk7YnJlYWs7ZGVmYXVsdDp0aHJv''@;'; put 'put ''dyJVbnN1cHBvcnRlZCAiK05lKyIgOiBmaWxsIERYRiJ9fSksRy5wdXNoKCI8L3BhdHRlcm5GaWxsPiIpLEcucHVzaCgiPC9maWxsPiIpKSx5ZS5sZW5ndGg+MD8oRy5wdXNoKFsiPGJvcmRlciIsbnVsbCE9Uy5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICshIVMuZGlhZ29uYWxE''@;'; put 'put ''b3duKyciJzoiIixudWxsIT1TLmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISFTLmRpYWdvbmFsVXArJyInOiIiLCI+Il0uam9pbigiIikpLHllLmZvckVhY2goZnVuY3Rpb24oTmUpe0cucHVzaChSNChTW05lXSxOZSkpfSksRy5wdXNoKCI8L2JvcmRlcj4iKSk6KG51bGwhPVMuZGlh''@;'; put 'put ''Z29uYWxEb3dufHxudWxsIT1TLmRpYWdvbmFsVXApJiZHLnB1c2goWyI8Ym9yZGVyIixudWxsIT1TLmRpYWdvbmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysgKyEhUy5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPVMuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIVMuZGlhZ29uYWxV''@;'; put 'put ''cCsnIic6IiIsIi8+Il0uam9pbigiIikpLDE9PUcubGVuZ3RoPyI8ZHhmLz4iOkcuam9pbigiIikrIjwvZHhmPiJ9KEcsUikpfSksay5qb2luKCIiKSsiPC9keGZzPiJ9KFMuU3R5bGVzLkRYRixSKSxrW2subGVuZ3RoXT1RLGsubGVuZ3RoPjImJihrW2subGVuZ3RoXT0iPC9zdHlsZVNoZWV0''@;'; put 'put ''PiIsa1sxXT1rWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxrLmpvaW4oIiIpfWZ1bmN0aW9uIFNDKFMsUixrKXtrfHwoaz1ibig2KzQqUi5sZW5ndGgpKSxrLndyaXRlX3NoaWZ0KDIsUyksRmMoUixrKTt2YXIgRz1rLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6aztyZXR1cm4gbnVsbD09ay5s''@;'; put 'put ''JiYoay5sPWsubGVuZ3RoKSxHfWZ1bmN0aW9uIFpWKFMpe3JldHVybntjb2xvcjpRaChTKSxwb3M6UGwoUyl9fUthLlNUWT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiO3ZhciBNQz1bIm5vbmUiLCJz''@;'; put 'put ''b2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIs''@;'; put 'put ''ImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXSxXVj1WZShNQyksRDU9WyJnZW5lcmFsIiwibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiZmlsbCIsImp1c3RpZnkiLCJjZW50ZXJDb250aW51b3VzIiwiZGlzdHJpYnV0ZWQiXSx0OD1bInRv''@;'; put 'put ''cCIsImNlbnRlciIsImJvdHRvbSIsImp1c3RpZnkiLCJkaXN0cmlidXRlZCJdO2Z1bmN0aW9uIGp1KFMsUixrKXtrfHwoaz1ibigxNikpLGsud3JpdGVfc2hpZnQoMixSfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksay53cml0ZV9zaGlmdCgyLFMuZm9udElkfHwwKSxrLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsUy5maWxsSWR8fDApLGsud3JpdGVfc2hpZnQoMixTLmJvcmRlcklkfHwwKSxrLndyaXRlX3NoaWZ0KDEsUy5hbGlnbm1lbnQmJlMuYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8MCksay53cml0ZV9zaGlmdCgxLFMuYWxpZ25tZW50JiZTLmFsaWdubWVudC5pbmRlbnR8fDAp''@;'; put 'put ''O3ZhciBHPTAsUT0wO2lmKFMuYWxpZ25tZW50KXtpZihTLmFsaWdubWVudC5ob3Jpem9udGFsKXt2YXIgb2U9RDUuaW5kZXhPZihTLmFsaWdubWVudC5ob3Jpem9udGFsKTtvZTwwJiYob2U9MCksR3w9b2V9aWYoUy5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBnZT10OC5pbmRleE9mKFMuYWxp''@;'; put 'put ''Z25tZW50LnZlcnRpY2FsKTtnZTwwJiYoZ2U9MiksR3w9Z2U8PDN9Uy5hbGlnbm1lbnQud3JhcFRleHQmJihHfD02NCksUy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihRfD0xKX1yZXR1cm4gay53cml0ZV9zaGlmdCgxLEcpLGsud3JpdGVfc2hpZnQoMSxRKSxrLndyaXRlX3NoaWZ0KDEsMCks''@;'; put 'put ''ay53cml0ZV9zaGlmdCgxLDApLGt9dmFyIHBkPVsibm9uZSIsInRoaW4iLCJtZWRpdW0iLCJkYXNoZWQiLCJkb3R0ZWQiLCJ0aGljayIsImRvdWJsZSIsImhhaXIiLCJtZWRpdW1EYXNoZWQiLCJkYXNoRG90IiwibWVkaXVtRGFzaERvdCIsImRhc2hEb3REb3QiLCJtZWRpdW1EYXNoRG90RG90''@;'; put 'put ''Iiwic2xhbnREYXNoRG90Il07ZnVuY3Rpb24gSTUoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpO1MubCs9MTt2YXIgaz1RaChTKTtyZXR1cm57c3R5bGU6cGRbUl0sY29sb3I6a319ZnVuY3Rpb24gUjUoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oMTApKSxTJiZTLnN0eWxlJiYiIiE9Uy5zdHlsZSYm''@;'; put 'put ''Im5vbmUiIT1TLnN0eWxlJiYtMSE9PXBkLmluZGV4T2YoUy5zdHlsZSk/KFIud3JpdGVfc2hpZnQoMSxwZC5pbmRleE9mKFMuc3R5bGUpKSxSLndyaXRlX3NoaWZ0KDEsMCksUy5jb2xvcj9tZihTLmNvbG9yLFIpOihSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApKSk6KFIu''@;'; put 'put ''d3JpdGVfc2hpZnQoMSwwKSxSLndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSksUn1mdW5jdGlvbiBTayhTLFIpe3JldHVybiBSfHwoUj1ibig1MikpLFIud3JpdGVfc2hpZnQoNCxTLnhmSWQpLFIud3JpdGVfc2hpZnQoMiwxKSxSLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsK1MuYnVpbHRpbklkKSxSLndyaXRlX3NoaWZ0KDEsMCkscGYoUy5uYW1lfHwiIixSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un1mdW5jdGlvbiBZdihTLFIpeyFSfHwhUi50aGVtZUVsZW1lbnRzfHwhUi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZXx8bnVsbCE9Uy50''@;'; put 'put ''aGVtZSYmKFMucmdiPVM1KFIudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbUy50aGVtZV0ucmdiLFMudGludHx8MCkpfWZ1bmN0aW9uIERrKFMsUil7dmFyIGs9YmkoKTtyZXR1cm4gRnIoaywiQnJ0QmVnaW5TdHlsZVNoZWV0IiksZnVuY3Rpb24gJFYoUyxSKXtpZihSKXt2YXIgaz0wO1tbNSw4''@;'; put 'put ''XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oRyl7Zm9yKHZhciBRPUdbMF07UTw9R1sxXTsrK1EpbnVsbCE9UltRXSYmKytrfSksMCE9ayYmKEZyKFMsIkJydEJlZ2luRm10cyIsSzAoaykpLFtbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oRyl7Zm9yKHZhciBRPUdbMF07UTw9R1sxXTsrK1EpbnVsbCE9UltRXSYmRnIoUywiQnJ0Rm10IixTQyhRLFJbUV0pKX0pLEZyKFMsIkJydEVuZEZtdHMiKSl9fShrLFMuU1NGKSxmdW5jdGlvbiBLVihTLFIpe3ZhciBrPVIubGVuZ3RoOzAhPWsmJihGcihTLCJCcnRCZWdp''@;'; put 'put ''bkZvbnRzIixLMChrKSksUi5mb3JFYWNoKGZ1bmN0aW9uKEcpe0ZyKFMsIkJydEZvbnQiLGZ1bmN0aW9uIFVWKFMsUil7Unx8KFI9Ym4oMTUzKSksUi53cml0ZV9zaGlmdCgyLDIwKlMuc3opLGZ1bmN0aW9uIGR2KFMsUil7Unx8KFI9Ym4oMikpLFIud3JpdGVfc2hpZnQoMSwoUy5pdGFsaWM/''@;'; put 'put ''MjowKXwoUy5zdHJpa2U/ODowKXwoUy5vdXRsaW5lPzE2OjApfChTLnNoYWRvdz8zMjowKXwoUy5jb25kZW5zZT82NDowKXwoUy5leHRlbmQ/MTI4OjApKSxSLndyaXRlX3NoaWZ0KDEsMCl9KFMsUiksUi53cml0ZV9zaGlmdCgyLFMuYm9sZD83MDA6NDAwKTt2YXIgaz0wOyJzdXBlciI9PVMu''@;'; put 'put ''dmFsaWduP2s9MToic3ViIj09Uy52YWxpZ24mJihrPTIpLFIud3JpdGVfc2hpZnQoMixrKSxSLndyaXRlX3NoaWZ0KDEsUy51bmRlcmxpbmV8fDApLFIud3JpdGVfc2hpZnQoMSxTLmZhbWlseXx8MCksUi53cml0ZV9zaGlmdCgxLFMuY2hhcnNldHx8MCksUi53cml0ZV9zaGlmdCgxLDApLG1m''@;'; put 'put ''KFMuY29sb3IsUik7dmFyIEc9MDtyZXR1cm4ibWFqb3IiPT1TLnNjaGVtZSYmKEc9MSksIm1pbm9yIj09Uy5zY2hlbWUmJihHPTIpLFIud3JpdGVfc2hpZnQoMSxHKSxGYyhTLm5hbWUsUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KEcpKX0pLEZyKFMsIkJydEVuZEZvbnRzIikp''@;'; put 'put ''fShrLChTLlN0eWxlc3x8e30pLkZvbnRzfHxbXSksZnVuY3Rpb24gcVYoUyxSKXt2YXIgaz1SLmxlbmd0aDswIT1rJiYoRnIoUywiQnJ0QmVnaW5GaWxscyIsSzAoaykpLFIuZm9yRWFjaChmdW5jdGlvbihHKXtGcihTLCJCcnRGaWxsIixmdW5jdGlvbiBlMShTLFIpe1J8fChSPWJuKDg0KSk7''@;'; put 'put ''dmFyIGs9V1ZbUy5wYXR0ZXJuVHlwZV07bnVsbD09ayYmKGs9NDApLFIud3JpdGVfc2hpZnQoNCxrPStrKTt2YXIgRz0wO2lmKDQwIT1rKWZvcihtZihTLmZnQ29sb3J8fHtpbmRleDo2NH0sUiksbWYoUy5iZ0NvbG9yfHx7aW5kZXg6NjV9LFIpO0c8MTI7KytHKVIud3JpdGVfc2hpZnQoNCww''@;'; put 'put ''KTtlbHNle2Zvcig7Rzw0OysrRylSLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKDtHPDEyOysrRylSLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfShHKSl9KSxGcihTLCJCcnRFbmRGaWxscyIpKX0oaywoUy5TdHlsZXN8fHt9KS5GaWxsc3x8W10p''@;'; put 'put ''LGZ1bmN0aW9uIFhWKFMsUil7dmFyIGs9Ui5sZW5ndGg7MCE9ayYmKEZyKFMsIkJydEJlZ2luQm9yZGVycyIsSzAoaykpLFIuZm9yRWFjaChmdW5jdGlvbihHKXtGcihTLCJCcnRCb3JkZXIiLGZ1bmN0aW9uIENrKFMsUil7cmV0dXJuIFJ8fChSPWJuKDUxKSksUi53cml0ZV9zaGlmdCgxLDAp''@;'; put 'put ''LFI1KFMudG9wLFIpLFI1KFMuYm90dG9tLFIpLFI1KFMubGVmdCxSKSxSNShTLnJpZ2h0LFIpLFI1KG51bGwsUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KEcpKX0pLEZyKFMsIkJydEVuZEJvcmRlcnMiKSl9KGssKFMuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGZ1bmN0aW9u''@;'; put 'put ''IEVrKFMsUil7dmFyIGs9MTtpZihSJiYoaz1SLmxlbmd0aCksRnIoUywiQnJ0QmVnaW5DZWxsU3R5bGVYRnMiLEswKGspKSxGcihTLCJCcnRYRiIsanUoe251bUZtdElkOjAsZm9udElkOjAsZmlsbElkOjAsYm9yZGVySWQ6MH0sNjU1MzUpKSxSKWZvcih2YXIgRz0xO0c8Ui5sZW5ndGg7KytH''@;'; put 'put ''KUZyKFMsIkJydFhGIixqdSh7bnVtRm10SWQ6UltHXS5udW1GbXRJZHx8MCxmb250SWQ6UltHXS5mb250SWR8fDAsZmlsbElkOlJbR10uZmlsbElkfHwwLGJvcmRlcklkOlJbR10uYm9yZGVySWR8fDB9LDY1NTM1KSk7RnIoUywiQnJ0RW5kQ2VsbFN0eWxlWEZzIil9KGssUi5jZWxsU3R5bGVY''@;'; put 'put ''ZnMpLGZ1bmN0aW9uIFRrKFMsUil7RnIoUywiQnJ0QmVnaW5DZWxsWEZzIixLMChSLmxlbmd0aCkpLFIuZm9yRWFjaChmdW5jdGlvbihrKXtGcihTLCJCcnRYRiIsanUoaywwKSl9KSxGcihTLCJCcnRFbmRDZWxsWEZzIil9KGssUi5jZWxsWGZzKSxmdW5jdGlvbiBBayhTLFIpe3ZhciBrPTE7''@;'; put 'put ''aWYoUiYmKGs9Ui5sZW5ndGgpLEZyKFMsIkJydEJlZ2luU3R5bGVzIixLMChrKSksRnIoUywiQnJ0U3R5bGUiLFNrKHt4ZklkOjAsYnVpbHRpbklkOjAsbmFtZToiTm9ybWFsIn0pKSxSKWZvcih2YXIgRz0xO0c8Ui5sZW5ndGg7KytHKUZyKFMsIkJydFN0eWxlIixTayh7eGZJZDpHLGJ1aWx0''@;'; put 'put ''aW5JZDowLG5hbWU6UltHXS5uYW1lfSkpO0ZyKFMsIkJydEVuZFN0eWxlcyIpfShrLFIuY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiBHdihTKXtGcihTLCJCcnRCZWdpbkRYRnMiLEswKDApKSxGcihTLCJCcnRFbmREWEZzIil9KGspLGZ1bmN0aW9uIGtrKFMpe0ZyKFMsIkJydEJlZ2luVGFibGVT''@;'; put 'put ''dHlsZXMiLGZ1bmN0aW9uIE1rKFMsUixrKXt2YXIgRz1ibigyMDUyKTtyZXR1cm4gRy53cml0ZV9zaGlmdCg0LFMpLHBmKFIsRykscGYoayxHKSxHLmxlbmd0aD5HLmw/Ry5zbGljZSgwLEcubCk6R30oMCwiVGFibGVTdHlsZU1lZGl1bTkiLCJQaXZvdFN0eWxlTWVkaXVtNCIpKSxGcihTLCJC''@;'; put 'put ''cnRFbmRUYWJsZVN0eWxlcyIpfShrKSxGcihrLCJCcnRFbmRTdHlsZVNoZWV0Iiksay5lbmQoKX1LYS5USEVNRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSI7dmFyIElrPVsiPC9hOmx0MT4iLCI8L2E6''@;'; put 'put ''ZGsxPiIsIjwvYTpsdDI+IiwiPC9hOmRrMj4iLCI8L2E6YWNjZW50MT4iLCI8L2E6YWNjZW50Mj4iLCI8L2E6YWNjZW50Mz4iLCI8L2E6YWNjZW50ND4iLCI8L2E6YWNjZW50NT4iLCI8L2E6YWNjZW50Nj4iLCI8L2E6aGxpbms+IiwiPC9hOmZvbEhsaW5rPiJdO2Z1bmN0aW9uIFFWKFMsUixr''@;'; put 'put ''KXtSLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lPVtdO3ZhciBHPXt9OyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIG9lPXZyKFEpO3N3aXRjaChvZVswXSl7Y2FzZSI8YTpjbHJTY2hlbWUiOmNhc2UiPC9hOmNsclNjaGVtZT4iOmNhc2UiPC9hOnNyZ2JDbHI+''@;'; put 'put ''IjpjYXNlIjwvYTpzeXNDbHI+IjpicmVhaztjYXNlIjxhOnNyZ2JDbHIiOkcucmdiPW9lLnZhbDticmVhaztjYXNlIjxhOnN5c0NsciI6Ry5yZ2I9b2UubGFzdENscjticmVhaztjYXNlIjxhOmRrMT4iOmNhc2UiPC9hOmRrMT4iOmNhc2UiPGE6bHQxPiI6Y2FzZSI8L2E6bHQxPiI6Y2FzZSI8''@;'; put 'put ''YTpkazI+IjpjYXNlIjwvYTpkazI+IjpjYXNlIjxhOmx0Mj4iOmNhc2UiPC9hOmx0Mj4iOmNhc2UiPGE6YWNjZW50MT4iOmNhc2UiPC9hOmFjY2VudDE+IjpjYXNlIjxhOmFjY2VudDI+IjpjYXNlIjwvYTphY2NlbnQyPiI6Y2FzZSI8YTphY2NlbnQzPiI6Y2FzZSI8L2E6YWNjZW50Mz4iOmNh''@;'; put 'put ''c2UiPGE6YWNjZW50ND4iOmNhc2UiPC9hOmFjY2VudDQ+IjpjYXNlIjxhOmFjY2VudDU+IjpjYXNlIjwvYTphY2NlbnQ1PiI6Y2FzZSI8YTphY2NlbnQ2PiI6Y2FzZSI8L2E6YWNjZW50Nj4iOmNhc2UiPGE6aGxpbms+IjpjYXNlIjwvYTpobGluaz4iOmNhc2UiPGE6Zm9sSGxpbms+IjpjYXNl''@;'; put 'put ''IjwvYTpmb2xIbGluaz4iOiIvIj09PW9lWzBdLmNoYXJBdCgxKT8oUi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtJay5pbmRleE9mKG9lWzBdKV09RyxHPXt9KTpHLm5hbWU9b2VbMF0uc2xpY2UoMyxvZVswXS5sZW5ndGgtMSk7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURil0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlVucmVjb2duaXplZCAiK29lWzBdKyIgaW4gY2xyU2NoZW1lIil9fSl9ZnVuY3Rpb24gZUIoKXt9ZnVuY3Rpb24gdEIoKXt9dmFyIG5CPS88YTpjbHJTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmNsclNjaGVtZT4vLFJrPS88YTpmb250U2NoZW1lKFtePl0qKT5bXHNcU10qPFwv''@;'; put 'put ''YTpmb250U2NoZW1lPi8sc25lPS88YTpmbXRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZtdFNjaGVtZT4vLHJCPS88YTp0aGVtZUVsZW1lbnRzKFtePl0qKT5bXHNcU10qPFwvYTp0aGVtZUVsZW1lbnRzPi87ZnVuY3Rpb24gRUMoUyxSKXtpZighU3x8MD09PVMubGVuZ3RoKXJldHVybiBF''@;'; put 'put ''QyhpQigpKTt2YXIgayxHPXt9O2lmKCEoaz1TLm1hdGNoKHJCKSkpdGhyb3cgbmV3IEVycm9yKCJ0aGVtZUVsZW1lbnRzIG5vdCBmb3VuZCBpbiB0aGVtZSIpO3JldHVybiBmdW5jdGlvbiBMayhTLFIsayl7dmFyIEc7Ui50aGVtZUVsZW1lbnRzPXt9LFtbImNsclNjaGVtZSIsbkIsUVZdLFsi''@;'; put 'put ''Zm9udFNjaGVtZSIsUmssZUJdLFsiZm10U2NoZW1lIixzbmUsdEJdXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKCEoRz1TLm1hdGNoKFFbMV0pKSl0aHJvdyBuZXcgRXJyb3IoUVswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7UVsyXShHLFIsayl9KX0oa1swXSxHLFIpLEcucmF3''@;'; put 'put ''PVMsR31mdW5jdGlvbiBpQihTLFIpe2lmKFImJlIudGhlbWVYTFNYKXJldHVybiBSLnRoZW1lWExTWDtpZihTJiYic3RyaW5nIj09dHlwZW9mIFMucmF3KXJldHVybiBTLnJhdzt2YXIgaz1bSWldO3JldHVybiBrW2subGVuZ3RoXT0nPGE6dGhlbWUgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iIG5hbWU9Ik9mZmljZSBUaGVtZSI+JyxrW2subGVuZ3RoXT0iPGE6dGhlbWVFbGVtZW50cz4iLGtbay5sZW5ndGhdPSc8YTpjbHJTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLGtbay5sZW5ndGhdPSc8YTpkazE+PGE6c3lzQ2xy''@;'; put 'put ''IHZhbD0id2luZG93VGV4dCIgbGFzdENscj0iMDAwMDAwIi8+PC9hOmRrMT4nLGtbay5sZW5ndGhdPSc8YTpsdDE+PGE6c3lzQ2xyIHZhbD0id2luZG93IiBsYXN0Q2xyPSJGRkZGRkYiLz48L2E6bHQxPicsa1trLmxlbmd0aF09JzxhOmRrMj48YTpzcmdiQ2xyIHZhbD0iMUY0OTdEIi8+PC9h''@;'; put 'put ''OmRrMj4nLGtbay5sZW5ndGhdPSc8YTpsdDI+PGE6c3JnYkNsciB2YWw9IkVFRUNFMSIvPjwvYTpsdDI+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50MT48YTpzcmdiQ2xyIHZhbD0iNEY4MUJEIi8+PC9hOmFjY2VudDE+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Mj48YTpzcmdiQ2xyIHZhbD0i''@;'; put 'put ''QzA1MDREIi8+PC9hOmFjY2VudDI+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Mz48YTpzcmdiQ2xyIHZhbD0iOUJCQjU5Ii8+PC9hOmFjY2VudDM+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50ND48YTpzcmdiQ2xyIHZhbD0iODA2NEEyIi8+PC9hOmFjY2VudDQ+JyxrW2subGVuZ3RoXT0nPGE6''@;'; put 'put ''YWNjZW50NT48YTpzcmdiQ2xyIHZhbD0iNEJBQ0M2Ii8+PC9hOmFjY2VudDU+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Nj48YTpzcmdiQ2xyIHZhbD0iRjc5NjQ2Ii8+PC9hOmFjY2VudDY+JyxrW2subGVuZ3RoXT0nPGE6aGxpbms+PGE6c3JnYkNsciB2YWw9IjAwMDBGRiIvPjwvYTpobGlu''@;'; put 'put ''az4nLGtbay5sZW5ndGhdPSc8YTpmb2xIbGluaz48YTpzcmdiQ2xyIHZhbD0iODAwMDgwIi8+PC9hOmZvbEhsaW5rPicsa1trLmxlbmd0aF09IjwvYTpjbHJTY2hlbWU+IixrW2subGVuZ3RoXT0nPGE6Zm9udFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09IjxhOm1ham9yRm9u''@;'; put 'put ''dD4iLGtbay5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2FtYnJpYSIvPicsa1trLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZm''@;'; put 'put ''MmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJc''@;'; put 'put ''dTViOGJcdTRmNTMiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxrW2subGVuZ3Ro''@;'; put 'put ''XT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4n''@;'; put 'put ''LGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJNb29sQm9y''@;'; put 'put ''YW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVw''@;'; put 'put ''aGVtaWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpm''@;'; put 'put ''b250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+Jyxr''@;'; put 'put ''W2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2Vs''@;'; put 'put ''byBFZGVzc2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlw''@;'; put 'put ''ZWZhY2U9IkRva0NoYW1wYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpm''@;'; put 'put ''b250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFl''@;'; put 'put ''biIvPicsa1trLmxlbmd0aF09IjwvYTptYWpvckZvbnQ+IixrW2subGVuZ3RoXT0iPGE6bWlub3JGb250PiIsa1trLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYWxpYnJpIi8+JyxrW2subGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmNzIHR5cGVm''@;'; put 'put ''YWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFj''@;'; put 'put ''ZTBcdWI1MTUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxrW2subGVuZ3RoXT0nPGE6''@;'; put 'put ''Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJBcmlhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iQXJpYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsa1trLmxlbmd0aF09Jzxh''@;'; put 'put ''OmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxrW2subGVuZ3RoXT0n''@;'; put 'put ''PGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJEYXVuUGVuaCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxrW2subGVuZ3Ro''@;'; put 'put ''XT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1p''@;'; put 'put ''Y3Jvc29mdCBZaSBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9u''@;'; put 'put ''dCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxrW2subGVuZ3RoXT0nPGE6''@;'; put 'put ''Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPics''@;'; put 'put ''a1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9''@;'; put 'put ''Ik1vbmdvbGlhbiBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iQXJpYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNj''@;'; put 'put ''cmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLGtbay5sZW5ndGhdPSI8L2E6bWlub3JGb250PiIsa1trLmxlbmd0aF09IjwvYTpmb250U2NoZW1lPiIsa1trLmxlbmd0aF09JzxhOmZtdFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09IjxhOmZpbGxTdHlsZUxzdD4i''@;'; put 'put ''LGtbay5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsa1trLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48''@;'; put 'put ''YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIzNTAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIzNzAw''@;'; put 'put ''MCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjE1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNs''@;'; put 'put ''cj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjEiLz4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5n''@;'; put 'put ''dGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTAwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIxMzAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5s''@;'; put 'put ''ZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0''@;'; put 'put ''PiIsa1trLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjAiLz4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0iPC9hOmZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTpsblN0eWxlTHN0PiIsa1trLmxlbmd0aF09JzxhOmxuIHc9Ijk1''@;'; put 'put ''MjUiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSI5NTAwMCIvPjxhOnNhdE1vZCB2YWw9IjEwNTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9''@;'; put 'put ''InNvbGlkIi8+PC9hOmxuPicsa1trLmxlbmd0aF09JzxhOmxuIHc9IjI1NDAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+''@;'; put 'put ''JyxrW2subGVuZ3RoXT0nPGE6bG4gdz0iMzgxMDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLGtbay5sZW5ndGhdPSI8''@;'; put 'put ''L2E6bG5TdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMDAwMCIgZGly''@;'; put 'put ''PSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzgwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Picsa1trLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsa1tr''@;'; put 'put ''Lmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+''@;'; put 'put ''PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0THN0''@;'; put 'put ''PiIsa1trLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLGtb''@;'; put 'put ''ay5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOnNjZW5lM2Q+PGE6Y2FtZXJhIHByc3Q9Im9ydGhvZ3JhcGhpY0Zyb250Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMCIvPjwvYTpjYW1lcmE+PGE6bGlnaHRSaWcgcmlnPSJ0aHJlZVB0IiBkaXI9InQiPjxh''@;'; put 'put ''OnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIxMjAwMDAwIi8+PC9hOmxpZ2h0UmlnPjwvYTpzY2VuZTNkPicsa1trLmxlbmd0aF09JzxhOnNwM2Q+PGE6YmV2ZWxUIHc9IjYzNTAwIiBoPSIyNTQwMCIvPjwvYTpzcDNkPicsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLGtbay5sZW5n''@;'; put 'put ''dGhdPSI8L2E6ZWZmZWN0U3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPGE6YmdGaWxsU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLGtbay5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9''@;'; put 'put ''IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI0MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09Jzxh''@;'; put 'put ''OmdzIHBvcz0iNDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDUwMDAiLz48YTpzaGFkZSB2YWw9Ijk5MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxh''@;'; put 'put ''OnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjIwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjU1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0''@;'; put 'put ''IGw9IjUwMDAwIiB0PSItODAwMDAiIHI9IjUwMDAwIiBiPSIxODAwMDAiLz48L2E6cGF0aD4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8''@;'; put 'put ''YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iODAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxh''@;'; put 'put ''OnNoYWRlIHZhbD0iMzAwMDAiLz48YTpzYXRNb2QgdmFsPSIyMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9IjUwMDAwIiByPSI1''@;'; put 'put ''MDAwMCIgYj0iNTAwMDAiLz48L2E6cGF0aD4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0iPC9hOmJnRmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjwvYTpmbXRTY2hlbWU+IixrW2subGVuZ3RoXT0iPC9hOnRoZW1lRWxlbWVudHM+IixrW2subGVuZ3RoXT0i''@;'; put 'put ''PGE6b2JqZWN0RGVmYXVsdHM+IixrW2subGVuZ3RoXT0iPGE6c3BEZWY+IixrW2subGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYg''@;'; put 'put ''aWR4PSIzIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJsdDEiLz48L2E6Zm9u''@;'; put 'put ''dFJlZj48L2E6c3R5bGU+JyxrW2subGVuZ3RoXT0iPC9hOnNwRGVmPiIsa1trLmxlbmd0aF09IjxhOmxuRGVmPiIsa1trLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIv''@;'; put 'put ''PjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1l''@;'; put 'put ''Q2xyIHZhbD0idHgxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsa1trLmxlbmd0aF09IjwvYTpsbkRlZj4iLGtbay5sZW5ndGhdPSI8L2E6b2JqZWN0RGVmYXVsdHM+IixrW2subGVuZ3RoXT0iPGE6ZXh0cmFDbHJTY2hlbWVMc3QvPiIsa1trLmxlbmd0aF09IjwvYTp0aGVtZT4iLGsuam9p''@;'; put 'put ''bigiIil9ZnVuY3Rpb24gJHYoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLTQsRz1bUl07c3dpdGNoKFIpe2Nhc2UgNDpjYXNlIDU6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6R1sxXT1mdW5jdGlvbiBUQyhTKXt2YXIgUj17''@;'; put 'put ''fTtzd2l0Y2goUi54Y2xyVHlwZT1TLnJlYWRfc2hpZnQoMiksUi5uVGludFNoYWRlPVMucmVhZF9zaGlmdCgyKSxSLnhjbHJUeXBlKXtjYXNlIDA6Y2FzZSA0OlMubCs9NDticmVhaztjYXNlIDE6Ui54Y2xyVmFsdWU9ZnVuY3Rpb24gb0IoUyxSKXtyZXR1cm4gSW4oUyxSKX0oUyw0KTticmVh''@;'; put 'put ''aztjYXNlIDI6Ui54Y2xyVmFsdWU9TWYoUyk7YnJlYWs7Y2FzZSAzOlIueGNsclZhbHVlPWZ1bmN0aW9uIE9rKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoNCl9KFMpfXJldHVybiBTLmwrPTgsUn0oUyk7YnJlYWs7Y2FzZSA2OkdbMV09ZnVuY3Rpb24gWTMoUyxSKXtyZXR1cm4gSW4oUyxSKX0o''@;'; put 'put ''UyxrKTticmVhaztjYXNlIDE0OmNhc2UgMTU6R1sxXT1TLnJlYWRfc2hpZnQoMT09PWs/MToyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEV4dFByb3AgdHlwZTogIitSKyIgIitrKX1yZXR1cm4gR31mdW5jdGlvbiBQayhTLFIpe1IuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihrKXtzd2l0Y2goa1swXSl7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpicmVhaztjYXNlIDEzOlMuZm9udCYmUy5mb250LmNvbG9yJiZBcnJheS5pc0FycmF5KGtbMV0ueGNsclZhbHVlKSYmKFMu''@;'; put 'put ''Zm9udC5jb2xvci5yZ2I9aGQoa1sxXS54Y2xyVmFsdWUpKX19KX1mdW5jdGlvbiBpbyhTKXtyZXR1cm4gUy85MTQ0MDAqRGZ9ZnVuY3Rpb24gRmsoUyxSKXt2YXIgaz17fTtpZihTLnBvcylrLng9aW8oUy5wb3MueCksay55PWlvKFMucG9zLnkpO2Vsc2V7aWYoIVMuZnJvbSl0aHJvdyJiYWQg''@;'; put 'put ''YW5jaG9yIHN0YXJ0IjtrLnI9Uy5mcm9tLnJ8fDAsay5jPVMuZnJvbS5jfHwwLFMuZnJvbS5jT2ZmJiYoay54PWlvKFMuZnJvbS5jT2ZmKSksUy5mcm9tLnJPZmYmJihrLnk9aW8oUy5mcm9tLnJPZmYpKX1pZihTLmV4dClrLnc9aW8oUy5leHQueCksay5oPWlvKFMuZXh0LnkpO2Vsc2V7aWYo''@;'; put 'put ''IVMudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO2suQz1TLnRvLmMsay5SPVMudG8ucixTLnRvLmNPZmYmJihrLlg9aW8oUy50by5jT2ZmKSksUy50by5yT2ZmJiYoay5ZPWlvKFMudG8uck9mZikpfXJldHVybiBrfWZ1bmN0aW9uIEw1KFMsUil7dmFyIGs9e3g6LTEseTotMSx3Oi0xLGg6LTF9''@;'; put 'put ''O2lmKFMucG9zKWsueD1pbyhTLnBvcy54KSxrLnk9aW8oUy5wb3MueSk7ZWxzZXtpZighUy5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO2sueD1PNShSLFMuZnJvbS5jLCJDIikraW8oUy5mcm9tLmNPZmYpLGsueT1PNShSLFMuZnJvbS5yLCJSIikraW8oUy5mcm9tLnJPZmYpfWlmKFMu''@;'; put 'put ''ZXh0KWsudz1pbyhTLmV4dC54KSxrLmg9aW8oUy5leHQueSk7ZWxzZXtpZighUy50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7ay53PU81KFIsUy50by5jLCJDIikraW8oUy50by5jT2ZmKS1rLngsay5oPU81KFIsUy50by5yLCJSIikraW8oUy50by5yT2ZmKS1rLnl9cmV0dXJuIGt9ZnVuY3Rp''@;'; put 'put ''b24gQUMoUyxSKXt2YXIgaz17cjotMSxjOi0xLHg6LTEseTotMSxSOi0xLEM6LTEsWDotMSxZOi0xfTtzd2l0Y2goUy50eXBlKXtjYXNlInR3b0NlbGxBbmNob3IiOmsucj1TLmZyb20ucixrLnk9aW8oUy5mcm9tLnJPZmYpLGsuUj1TLnRvLnIsay5ZPWlvKFMudG8uck9mZiksay5jPVMuZnJv''@;'; put 'put ''bS5jLGsueD1pbyhTLmZyb20uY09mZiksay5DPVMudG8uYyxrLlg9aW8oUy50by5jT2ZmKTticmVhaztjYXNlIm9uZUNlbGxBbmNob3IiOmsucj1TLmZyb20ucixrLnk9aW8oUy5mcm9tLnJPZmYpO3ZhciBHPVJmKFIsay5yLGsueStpbyhTLmV4dC55KSk7ay5SPUdbMF0say5ZPUdbMV0say5j''@;'; put 'put ''PVMuZnJvbS5jLGsueD1pbyhTLmZyb20uY09mZik7dmFyIFE9RzMoUixrLmMsay54K2lvKFMuZXh0LngpKTtrLkM9UVswXSxrLlg9UVsxXTticmVhaztjYXNlImFic29sdXRlQW5jaG9yIjp2YXIgb2U9UmYoUiwwLGlvKFMucG9zLnkpKTtrLnI9b2VbMF0say55PW9lWzFdO3ZhciBnZT1SZihS''@;'; put 'put ''LGsucixrLnkraW8oUy5leHQueSkpO2suUj1nZVswXSxrLlk9Z2VbMV07dmFyIHBlPVJmKFIsMCxpbyhTLnBvcy54KSk7ay5jPXBlWzBdLGsueD1wZVsxXTt2YXIgeWU9UmYoUixrLmMsay54K2lvKFMuZXh0LngpKTtrLkM9eWVbMF0say5YPXllWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFk''@;'; put 'put ''IGFuY2hvciB0eXBlICIrUy50eXBlfXJldHVybiBrfWZ1bmN0aW9uIEhrKFMsUil7dmFyIGs9Uy50cmltKCkuc3BsaXQoL1xzKixccyovKTtSWyIhcG9zIl09e2M6K2tbMF0seDora1sxXSxyOitrWzJdLHk6K2tbM10sQzora1s0XSxYOitrWzVdLFI6K2tbNl0sWTora1s3XX19ZnVuY3Rpb24g''@;'; put 'put ''bEIoUyxSLGspe3ZhciBHPS0xO2lmKG51bGwhPVMuUnx8bnVsbCE9Uy5DKUc9MDtlbHNle2lmKG51bGw9PVMueHx8bnVsbD09Uy55fHxudWxsPT1TLnd8fG51bGw9PVMuaCl0aHJvdyJjYW5ub3QgcGFyc2UgYW5jaG9yICIrSlNPTi5zdHJpbmdpZnkoUyk7Rz0xKzIqIShTLmN8fFMucil9aWYo''@;'; put 'put ''RyE9Uil7c3dpdGNoKFIpe2Nhc2UgMDpjYXNlIDE6aWYoMyE9RylicmVhazt2YXIgUT1HMyhrLFMuY3x8MCxTLnh8fDApO1MuYz1RWzBdLFMueD1RWzFdO3ZhciBvZT1SZihrLFMucnx8MCxTLnl8fDApO1Mucj1vZVswXSxTLnk9b2VbMV07YnJlYWs7Y2FzZSAzOmlmKDM9PUcpYnJlYWs7dmFy''@;'; put 'put ''IGdlPVMuY3x8MCxwZT1TLnh8fDA7ZGVsZXRlIFMuYyxkZWxldGUgUy54LFMueD0oZ2U/S3YoayxnZSk6MCkrcGU7dmFyIHllPVMucnx8MCxQZT1TLnl8fDA7ZGVsZXRlIFMucixkZWxldGUgUy55LFMueT0oeWU/TzQoayx5ZSk6MCkrUGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252ZXJ0X2Fu''@;'; put 'put ''Y2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK1J9c3dpdGNoKFIpe2Nhc2UgMDppZigwPT1HKWJyZWFrO3ZhciBOZT1HMyhrLFMuY3x8MCwoUy54fHwwKStTLncpO2RlbGV0ZSBTLncsUy5DPU5lWzBdLFMuWD1OZVsxXTt2YXIgWWU9UmYoayxTLnJ8fDAsKFMueXx8MCkrUy5oKTtkZWxldGUgUy5o''@;'; put 'put ''LFMuUj1ZZVswXSxTLlk9WWVbMV07YnJlYWs7Y2FzZSAxOmNhc2UgMzppZigwIT1HKWJyZWFrO3ZhciBldD1TLkN8fDAsY3Q9Uy5YfHwwO2RlbGV0ZSBTLkMsZGVsZXRlIFMuWCxTLnc9S3YoayxldCkrY3QtKFMuYz9LdihrLFMuYyk6MCktKFMueHx8MCk7dmFyIEV0PVMuUnx8MCxhdD1TLll8''@;'; put 'put ''fDA7ZGVsZXRlIFMuUixkZWxldGUgUy5ZLFMuaD1PNChrLEV0KSthdC0oUy5yP080KGssUy5yKTowKS0oUy55fHwwKTticmVhaztkZWZhdWx0OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrUn19fWZ1bmN0aW9uIGNCKFMpe3ZhciBSPVtTLmN8fDAsTWF0aC5yb3Vu''@;'; put 'put ''ZChTLnh8fDApLFMucnx8MCxNYXRoLnJvdW5kKFMueXx8MCldO3JldHVybihSPVIuY29uY2F0KFMuaCYmUy53P1tSWzBdLE1hdGgucm91bmQoUlsxXStTLncpLFJbMl0sTWF0aC5yb3VuZChSWzNdK1MuaCldOltTLkN8fDAsTWF0aC5yb3VuZChTLlh8fDApLFMuUnx8MCxNYXRoLnJvdW5kKFMu''@;'; put 'put ''WXx8MCldKSkuam9pbigiLCAiKX1mdW5jdGlvbiBPNChTLFIpe2lmKCFTKXJldHVybiAwO2Zvcih2YXIgaz0wOy0tUj49MDspe3ZhciBHPSgoU1siIXJvd3MiXXx8W10pW1JdfHx7fSkuaHB4O251bGw9PUcmJihHPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51bGw9''@;'; put 'put ''PUcmJihHPTI0KSxrKz1HfXJldHVybiBrfWZ1bmN0aW9uIEt2KFMsUil7aWYoIVMpcmV0dXJuIDA7Zm9yKHZhciBrPTA7LS1SPj0wOyl7dmFyIEc9KChTWyIhY29scyJdfHxbXSlbUl18fHt9KS53cHg7aWYobnVsbD09RyYmKEc9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndw''@;'; put 'put ''eCksbnVsbD09Ryl7dmFyIFE9e3djaDo4LjQzfTtRMChRKSxTWyIhY29scyJdJiYoU1siIWNvbHMiXVtSXT1RKSxHPVEud3B4fWsrPUd9cmV0dXJuIGt9ZnVuY3Rpb24gTzUoUyxSLGspe3JldHVybiJDIj09az9LdihTLFIpOk80KFMsUil9ZnVuY3Rpb24gUmYoUyxSLGspe3ZhciBHPVtSLGtd''@;'; put 'put ''O2lmKCFTKXJldHVybiBHO2Zvcig7Oyl7dmFyIFE9KFNbIiFyb3dzIl18fFtdKVtHWzBdXXx8e307aWYoUS5oaWRkZW4pKytHWzBdO2Vsc2V7dmFyIG9lPVEuaHB4O2lmKG51bGw9PW9lJiYob2U9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09b2UmJihvZT1z''@;'; put 'put ''aCgxNSkpLEdbMV08b2UpYnJlYWs7R1swXSsrLEdbMV0tPW9lfX1yZXR1cm4gR31mdW5jdGlvbiBHMyhTLFIsayl7dmFyIEc9W1Isa107aWYoIVMpcmV0dXJuIEc7Zm9yKDs7KXt2YXIgUT0oU1siIWNvbHMiXXx8W10pW0dbMF1dfHx7fTtpZihRLmhpZGRlbnx8MD09PVEud3B4KSsrR1swXTtl''@;'; put 'put ''bHNle3ZhciBvZT1RLndweDtpZihudWxsPT1vZSYmKG9lPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PW9lKXt2YXIgZ2U9e3djaDo4LjQzfTtRMChnZSksU1siIWNvbHMiXSYmKFNbIiFjb2xzIl1bR1swXV09Z2UpLG9lPWdlLndweH1pZihHWzFdPG9lKWJy''@;'; put 'put ''ZWFrO0dbMF0rKyxHWzFdLT1vZX19cmV0dXJuIEd9ZnVuY3Rpb24gUDAoUyl7cmV0dXJuKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIFM/Uy50b1N0cmluZygxNik6UykpLnNsaWNlKC02KX1mdW5jdGlvbiBnZChTLFIsayl7dmFyIEc9InN0cmluZyI9PXR5cGVvZiBSPyEhazohIVI7InN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBSJiYoUj0iY29sb3IiKTt2YXIgUT0iPCIrUisiICI7cmV0dXJuIFMuYXV0bz9RKydhdXRvPSIxIi8+JzpTLmluZGV4JiZudWxsPT1TLnJnYj9RKydpbmRleGVkPSInK1MuaW5kZXgrJyIvPic6bnVsbCE9Uy50aGVtZT9RKyd0aGVtZT0iJytTLnRoZW1lKyciJysoUy50''@;'; put 'put ''aW50PycgdGludD0iJytTLnRpbnQrJyInOiIiKSsiLz4iOm51bGwhPVMucmdiP1ErJ3JnYj0iJysoRz8iRkYiOiIiKStQMChTLnJnYikrJyIvPic6USsiLz4ifWZ1bmN0aW9uIFA0KFMsUil7aWYoIVN8fG51bGw9PVMucmdiKXJldHVybiBSO2Zvcih2YXIgaz0oIjAwMDAwMCIrUy5yZ2IudG9T''@;'; put 'put ''dHJpbmcoMTYpKS5zbGljZSgtNiksRz1bay5zbGljZSgwLDIpLGsuc2xpY2UoMiw0KSxrLnNsaWNlKDQsNildLm1hcChmdW5jdGlvbihnZSl7cmV0dXJuIHBhcnNlSW50KGdlLDE2KX0pLFE9MDtRPHIwLmxlbmd0aDsrK1Epe3ZhciBvZT1yMFtRXTtpZihvZVswXT09R1swXSYmb2VbMV09PUdb''@;'; put 'put ''MV0mJm9lWzJdPT1HWzJdKXJldHVybiBRfXJldHVybiByMC5sZW5ndGg8NjQ/KHIwLnB1c2goW0dbMF0sR1sxXSxHWzJdXSkscjAubGVuZ3RoLTEpOlJ9ZnVuY3Rpb24gdDEoUyl7dmFyIFI9WyIiLCIiLCIiXTtpZighUylyZXR1cm5bXTt2YXIgaz0iIixHPVMmJlMucz9mdW5jdGlvbiBxdihT''@;'; put 'put ''KXt2YXIgUj1bIiIsIiJdO2lmKCFTKXJldHVybiBSO2lmKFMuc3omJihSWzBdKz0iJiIrUy5zeixSWzFdPSImMTIiK1JbMV0pLFMubmFtZSYmKFJbMF0rPScmIicrUy5uYW1lKycsUmVndWxhciInLFJbMV09JyYiLSxSZWd1bGFyIicrUlsxXSksUy5ib2xkJiYoUlswXSs9IiZCIixSWzFdPSIm''@;'; put 'put ''QiIrUlsxXSksUy51bmRlcmxpbmUpe3ZhciBrPTI9PVMudW5kZXJsaW5lPyImRSI6IiZVIjtSWzBdKz1rLFJbMV09aytSWzFdfXJldHVybiBTLml0YWxpYyYmKFJbMF0rPSImSSIsUlsxXT0iJkkiK1JbMV0pLFMuY29sb3ImJm51bGwhPVMuY29sb3IucmdiJiYoUlswXSs9IiZLIitQMChTLmNv''@;'; put 'put ''bG9yLnJnYiksUlsxXSs9IiZLMDAwMDAwIiksUy5zdHJpa2UmJihSWzBdKz0iJlMiLFJbMV09IiZTIitSWzFdKSwic3VwZXIiPT1TLnZhbGlnbiYmKFJbMF0rPSImWCIsUlsxXT0iJlgiK1JbMV0pLCJzdWIiPT1TLnZhbGlnbiYmKFJbMF0rPSImWSIsUlsxXT0iJlkiK1JbMV0pLFJ9KFMucyk6''@;'; put 'put ''WyIiLCIiXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFM/W1MsUyxTXTpudWxsIT1TLmZpcnN0fHxudWxsIT1TLmV2ZW58fG51bGwhPVMub2RkPyhudWxsIT1TLm9kZCYmKFJbMF09dDEoUy5vZGQpWzBdKSx2b2lkIDA9PT1TLmZpcnN0JiZSWzBdJiYoUlsxXT1SWzBdKSxudWxsIT1TLmZpcnN0''@;'; put 'put ''JiYoUlsxXT10MShTLmZpcnN0KVswXSksbnVsbCE9Uy5ldmVuJiYoUlsyXT10MShTLmV2ZW4pWzBdKSxSKTpTLmxlZnR8fFMuY2VudGVyfHxTLnJpZ2h0PyhTLmxlZnQmJihrKz0iJkwiK3QxKFMubGVmdClbMF0pLFMuY2VudGVyJiYoays9IiZDIit0MShTLmNlbnRlcilbMF0pLFMucmlnaHQm''@;'; put 'put ''JihrKz0iJlIiK3QxKFMucmlnaHQpWzBdKSxbayxrLGtdKTpudWxsIT1TLnY/W2s9R1swXStTLnYucmVwbGFjZSgvJi9nLCImJiIpK0dbMV0sayxrXTpudWxsIT1TLnc/W2s9R1swXStTLncrR1sxXSxrLGtdOkFycmF5LmlzQXJyYXkoUy5SKT8oUy5SLmZvckVhY2goZnVuY3Rpb24oUSl7ays9''@;'; put 'put ''dDEoUSlbMF19KSxbayxrLGtdKTpbXX12YXIgbjg9ezE6IkxldHRlciIsMzoiVGFibG9pZCIsNToiTGVnYWwiLDc6IkV4ZWN1dGl2ZSIsODoiQTMiLDk6IkE0IiwxMToiQTUiLDEyOiJCNCIsMTM6IkI1IiwxNDoiRm9saW8iLDIwOiJFbnZlbG9wZSIsMzc6Ik1vbmFyY2giLDcwOiJBNiJ9LHVC''@;'; put 'put ''PVZlKG44KTtLYS5DT05OPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2Nvbm5lY3Rpb25zIjt2YXIgaEI9UHIoImV4dGVybmFsTGluayIsbnVsbCx7eG1sbnM6WWkubWFpblswXX0pO0thLklNRz0iaHR0cDovL3Nj''@;'; put 'put ''aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9pbWFnZSIsS2EuRFJBVz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kcmF3aW5nIjt2YXIgcEI9e3Q6InRv''@;'; put 'put ''cCIsY3RyOiJjZW50ZXIiLGI6ImJvdHRvbSIsanVzdDoidG9wIixkaXN0OiJ0b3AifSxQNT17Y3RyOiJjZW50ZXIiLGRpc3Q6ImNlbnRlciIsanVzdDoiY2VudGVyIixqdXN0TG93OiJjZW50ZXIiLGw6ImxlZnQiLHI6InJpZ2h0Iix0aGFpRGlzdDoiY2VudGVyIn07ZnVuY3Rpb24gbUIoKXt2''@;'; put 'put ''YXIgUz1bSWldO3JldHVybiBTLnB1c2goJzx4ZHI6d3NEciB4bWxuczp4ZHI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9zcHJlYWRzaGVldERyYXdpbmciIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5n''@;'; put 'put ''bWwvMjAwNi9tYWluIi8+JyksUy5qb2luKCIiKX1mdW5jdGlvbiBjbmUoUyl7dmFyIGssUj1TWyIhZGF0YSJdO3JldHVybiJiYXNlNjQiPT09U1siIWRhdGF0eXBlIl0/KChrPVIubWF0Y2goL15kYXRhOi4qLC8pKSYmKFI9Ui5zbGljZShrWzBdLmxlbmd0aCkpLF9lLmRlY29kZShSKSk6Un1L''@;'; put 'put ''YS5UQUJMRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90YWJsZSI7dmFyIGJCPS88KD86XHcrOik/c2hhcGUoPzpbXlx3XVtePl0qKT8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3NoYXBlPi9nO2Z1bmN0aW9uIE9D''@;'; put 'put ''KFMsUixrLEcpe3ZhciBRPVsyMTYwMCwyMTYwMF0sb2U9WyJtMCwwbDAiLFFbMV0sUVswXSxRWzFdLFFbMF0sIjB4ZSJdLmpvaW4oIiwiKSxnZT1bUHIoInhtbCIsbnVsbCx7InhtbG5zOnYiOnlsLnYsInhtbG5zOm8iOnlsLm8sInhtbG5zOngiOnlsLngsInhtbG5zOm12Ijp5bC5tdn0pLnJl''@;'; put 'put ''cGxhY2UoL1wvPi8sIj4iKSxQcigibzpzaGFwZWxheW91dCIsUHIoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQifSkseyJ2OmV4dCI6ImVkaXQifSldLHBlPTEwMjQqUyx5ZT1rfHxbXTt5ZS5sZW5ndGg+MCYmZ2UucHVzaChQcigidjpzaGFwZXR5cGUiLFtQcigidjpzdHJva2UiLG51''@;'; put 'put ''bGwse2pvaW5zdHlsZToibWl0ZXIifSksUHIoInY6cGF0aCIsbnVsbCx7c2hhZG93b2s6ImYiLGV4dHJ1c2lvbm9rOiJmIixzdHJva2VvazoiZiIsZmlsbG9rOiJmIiwibzpjb25uZWN0dHlwZSI6InJlY3QifSksUHIoIm86bG9jayIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsc2hhcGV0eXBlOiJ0''@;'; put 'put ''In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAxIixjb29yZHNpemU6US5qb2luKCIsIiksIm86c3B0IjoyMDEscGF0aDpvZX0pKSx5ZS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXsrK3BlLGdlPWdlLmNvbmNhdChmdW5jdGlvbiBpOChTLFIpe3ZhciBrPXtpZDoiX3gwMDAwX3MiK1IsdHlwZToi''@;'; put 'put ''I194MDAwMF90MjAxIixzdHlsZToibXNvLXdyYXAtc3R5bGU6dGlnaHQifTsoIlJhZGlvIj09U1siIXR5cGUiXXx8IkNoZWNrYm94Ij09U1siIXR5cGUiXXx8Ikxpc3QiPT1TWyIhdHlwZSJdfHwiRHJvcCI9PVNbIiF0eXBlIl0pJiYoay5zdHJva2VkPSJmIiksIkxhYmVsIj09U1siIXR5cGUi''@;'; put 'put ''XSYmKGsuZmlsbGVkPSJmIik7dmFyIEc9IiI7Uy50JiZQQ1tTWyIhdHlwZSJdXSYmKEc9UENbU1siIXR5cGUiXV0ucmVwbGFjZSgvIyMjIy8sTHIoUy50KSkpO3ZhciBRPVtdO3JldHVybiBTLm1hY3JvJiZRLnB1c2goSGEoIng6Rm1sYU1hY3JvIixTLm1hY3JvKSksUy5saW5rJiZRLnB1c2go''@;'; put 'put ''SGEoIng6Rm1sYUxpbmsiLFMubGluaykpLFMudmFsJiZRLnB1c2goSGEoIlJhZGlvIj09U1siIXR5cGUiXXx8IkNoZWNrYm94Ij09U1siIXR5cGUiXT8ieDpDaGVja2VkIjoieDpWYWwiLFN0cmluZyhTLnZhbCkpKSxTLnJlZiYmUS5wdXNoKEhhKCJ4OkZtbGFSYW5nZSIsUy5yZWYpKSxTLnNl''@;'; put 'put ''bCYmIkxpc3QiPT1TWyIhdHlwZSJdJiZRLnB1c2goSGEoIng6U2VsVHlwZSIsUy5zZWwpKSxTLm1pbiYmUS5wdXNoKEhhKCJ4Ok1pbiIsU3RyaW5nKFMubWluKSkpLFMubWF4JiZRLnB1c2goSGEoIng6TWF4IixTdHJpbmcoUy5tYXgpKSksUy5zdGVwJiZRLnB1c2goSGEoIng6SW5jIixTdHJp''@;'; put 'put ''bmcoUy5zdGVwKSkpLFMucGFnZSYmUS5wdXNoKEhhKCJ4OlBhZ2UiLFN0cmluZyhTLnBhZ2UpKSksW10uY29uY2F0KFsiPHY6c2hhcGUiK0x1KGspKyI+Il0pLmNvbmNhdChGQ1tTWyIhdHlwZSJdXXx8W10pLmNvbmNhdChbR10pLmNvbmNhdChbJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0i''@;'; put 'put ''JytTWyIhdHlwZSJdKyciPicsSGEoIng6QW5jaG9yIixjQihTWyIhcG9zIl0pKSxIYSgieDpQcmludE9iamVjdCIsIkZhbHNlIildKS5jb25jYXQoUSkuY29uY2F0KHlCW1NbIiF0eXBlIl1dfHxbXSkuY29uY2F0KFsiPC94OkNsaWVudERhdGE+IiwiPC92OnNoYXBlPiJdKX0oTmUscGUpKX0p''@;'; put 'put ''O3ZhciBQZT1SfHxbXTtyZXR1cm4gUGUubGVuZ3RoPjAmJmdlLnB1c2goUHIoInY6c2hhcGV0eXBlIixbUHIoInY6c3Ryb2tlIixudWxsLHtqb2luc3R5bGU6Im1pdGVyIn0pLFByKCJ2OnBhdGgiLG51bGwse2dyYWRpZW50c2hhcGVvazoidCIsIm86Y29ubmVjdHR5cGUiOiJyZWN0In0pXS5q''@;'; put 'put ''b2luKCIiKSx7aWQ6Il94MDAwMF90MjAyIixjb29yZHNpemU6US5qb2luKCIsIiksIm86c3B0IjoyMDIscGF0aDpvZX0pKSxQZS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXsrK3BlLGdlPWdlLmNvbmNhdChmdW5jdGlvbiBKdihTLFIsayl7dmFyIEc9Tm8oU1swXSksUT1TWzFdLmZpbGx8fHt9O1Nb''@;'; put 'put ''MV0ucyYmKFE9e3R5cGU6U1sxXS5zLnBhdHRlcm5UeXBlfHwic29saWQifSxTWzFdLnMuZmdDb2xvciYmKFEuY29sb3IyPVEuY29sb3IxPSIjIitQMChTWzFdLnMuZmdDb2xvci5yZ2IpKSxTWzFdLnMuYmdDb2xvciYmKFEuY29sb3IyPSIjIitQMChTWzFdLnMuYmdDb2xvci5yZ2IpKSk7dmFy''@;'; put 'put ''IG9lPXtjb2xvcjI6US5jb2xvcjJ8fCIjQkVGRjgyIix0eXBlOlEudHlwZXx8ImdyYWRpZW50In07ImdyYWRpZW50Ij09b2UudHlwZSYmKG9lLmFuZ2xlPSItMTgwIik7dmFyIGdlPSJncmFkaWVudCI9PW9lLnR5cGU/UHIoIm86ZmlsbCIsbnVsbCx7dHlwZToiZ3JhZGllbnRVbnNjYWxlZCIs''@;'; put 'put ''InY6ZXh0IjoidmlldyJ9KTpudWxsLHBlPVByKCJ2OmZpbGwiLGdlLG9lKSx5ZT17fTtTWzFdLnNoYWRvdyYmKFNbMV0uc2hhZG93LmNvbG9yJiYoeWUuY29sb3I9U1sxXS5zaGFkb3cuY29sb3IpLFNbMV0uc2hhZG93Lm9uJiYoeWUub249U1sxXS5zaGFkb3cub24pKSx5ZS5vYnNjdXJlZD0i''@;'; put 'put ''dCI7dmFyIFBlPSEwLE5lPSEwLFllPVNbMV1bIiFwb3MiXT9xdChTWzFdWyIhcG9zIl0pOm51bGw7cmV0dXJuIFllJiYoTmU9bnVsbD09WWUuUiYmbnVsbD09WWUuQyYmbnVsbD09WWUuWCYmbnVsbD09WWUuWSxQZT0hWWUuciYmIVllLmMsbEIoWWUsMCxrKSksWyI8djpzaGFwZSIrTHUoe2lk''@;'; put 'put ''OiJfeDAwMDBfcyIrUix0eXBlOiIjX3gwMDAwX3QyMDIiLHN0eWxlOiJwb3NpdGlvbjphYnNvbHV0ZTsgbWFyZ2luLWxlZnQ6ODBwdDttYXJnaW4tdG9wOjVwdDt3aWR0aDoxMDRwdDtoZWlnaHQ6NjRwdDt6LWluZGV4OjEwIisoU1sxXS5oaWRkZW4/Ijt2aXNpYmlsaXR5OmhpZGRlbiI6IiIp''@;'; put 'put ''LGZpbGxjb2xvcjpRLmNvbG9yMXx8IiNFQ0ZBRDQiLHN0cm9rZWNvbG9yOihTWzFdLnN0cm9rZXx8e30pLmNvbG9yfHwiI2VkZWFhMSJ9KSsiPiIscGUsUHIoInY6c2hhZG93IixudWxsLHllKSxQcigidjpwYXRoIixudWxsLHsibzpjb25uZWN0dHlwZSI6Im5vbmUifSksJzx2OnRleHRib3g+''@;'; put 'put ''PGRpdiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48L2Rpdj48L3Y6dGV4dGJveD4nLCc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9Ik5vdGUiPicsUGU/Ijx4Ok1vdmVXaXRoQ2VsbHMvPiI6IiIsTmU/Ijx4OlNpemVXaXRoQ2VsbHMvPiI6IiIsSGEoIng6QW5jaG9yIixZZT9jQihZZSk6U1sx''@;'; put 'put ''XS5yYXdhbmNob3J8fFtHLmMrMSwwLEcucisxLDAsRy5jKzMsMjAsRy5yKzUsMjBdLmpvaW4oIiwiKSksSGEoIng6QXV0b0ZpbGwiLCJGYWxzZSIpLEhhKCJ4OlJvdyIsU3RyaW5nKEcucikpLEhhKCJ4OkNvbHVtbiIsU3RyaW5nKEcuYykpLFNbMV0uaGlkZGVuPyIiOiI8eDpWaXNpYmxlLz4i''@;'; put 'put ''LCI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il19KE5lLHBlLEcpKX0pLGdlLnB1c2goIjwveG1sPiIpLGdlLmpvaW4oIiIpfXZhciB5Qj17QnV0dG9uOlsiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6VGV4dEhBbGlnbj5DZW50ZXI8L3g6VGV4dEhBbGlnbj4iLCI8''@;'; put 'put ''eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiJdLEdCb3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpOb1RocmVlRC8+Il0sTGFiZWw6WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGlu''@;'; put 'put ''ZT5GYWxzZTwveDpBdXRvTGluZT4iXSxSYWRpbzpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+IiwiPHg6Tm9UaHJl''@;'; put 'put ''ZUQvPiJdLENoZWNrYm94OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sRHJvcDpb''@;'; put 'put ''Ijx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4Ok5vVGhyZWVEMi8+IiwiPHg6U2VsVHlwZT5TaW5nbGU8L3g6U2VsVHlwZT4iLCI8eDpEcm9wU3R5bGU+Q29tYm88L3g6RHJvcFN0eWxlPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4''@;'; put 'put ''OkRyb3BMaW5lcz40PC94OkRyb3BMaW5lcz4iXSxMaXN0OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpMQ1Q+Tm9ybWFsPC94OkxDVD4iLCI8eDpWYWw+MDwveDpWYWw+IiwiPHg6TWluPjA8L3g6TWlu''@;'; put 'put ''PiIsIjx4Ok1heD41PC94Ok1heD4iLCI8eDpJbmM+MTwveDpJbmM+IiwiPHg6UGFnZT40PC94OlBhZ2U+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU2Nyb2xsOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6SG9yaXovPiIsIjx4OkR4PjE1PC94OkR4PiJdLFNwaW46WyI8eDpEeD4xNTwveDpEeD4i''@;'; put 'put ''XX0sUEM9e0J1dHRvbjoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxmb250IGZhY2U9J0NhbGlicmknIHNpemU9JzI0MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+''@;'; put 'put ''PC9kaXY+PC92OnRleHRib3g+IixHQm94OiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAw''@;'; put 'put ''MDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixSYWRpbzoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScy''@;'; put 'put ''NjAnIGNvbG9yPSdhdXRvJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsTGFiZWw6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdy''@;'; put 'put ''YW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLENoZWNrYm94OiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxm''@;'; put 'put ''b250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixzaGVldGpzOiJkYWZ1cSJ9LEZDPXtCdXR0b246Wyc8djpmaWxsIGNvbG9yMj0iI2YwZjBmMCBbNjddIiBvOmRldGVjdG1vdXNlY2xpY2s9InQi''@;'; put 'put ''Lz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLEdCb3g6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLERyb3A6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLExpc3Q6Wyc8bzpsb2NrIHY6ZXh0PSJl''@;'; put 'put ''ZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLFNwaW46Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLFNjcm9sbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGFiZWw6Wyc8bzpsb2NrIHY6ZXh0PSJl''@;'; put 'put ''ZGl0IiByb3RhdGlvbj0idCIvPiddLFJhZGlvOlsnPHY6cGF0aCBzaGFkb3dvaz0idCIgc3Ryb2tlb2s9InQiIGZpbGxvaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sQ2hlY2tib3g6Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmls''@;'; put 'put ''bG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxzaGVldGpzOltdfTtmdW5jdGlvbiBCayhTLFIsayxHKXt2YXIgUT17IiFpZCI6e319LG9lPVtQcigieG1sIixudWxsLHsieG1sbnM6diI6eWwudiwieG1sbnM6byI6eWwubywieG1sbnM6eCI6eWwueH0p''@;'; put 'put ''LnJlcGxhY2UoL1wvPi8sIj4iKSxQcigibzpzaGFwZWxheW91dCIsUHIoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQiLGRhdGE6MX0pLHsidjpleHQiOiJlZGl0In0pLCc8djpzaGFwZXR5cGUgaWQ9Il94MDAwMF90NzUiIGNvb3Jkc2l6ZT0iMjE2MDAsMjE2MDAiIG86c3B0PSI3NSIg''@;'; put 'put ''bzpwcmVmZXJyZWxhdGl2ZT0idCIgcGF0aD0ibUA0QDVsQDRAMTFAOUAxMUA5QDV4ZSIgZmlsbGVkPSJmIiBzdHJva2VkPSJmIj4nLCc8djpzdHJva2Ugam9pbnN0eWxlPSJtaXRlciIvPicsIjx2OmZvcm11bGFzPiIsJzx2OmYgZXFuPSJpZiBsaW5lRHJhd24gcGl4ZWxMaW5lV2lkdGggMCIv''@;'; put 'put ''PicsJzx2OmYgZXFuPSJzdW0gQDAgMSAwIi8+JywnPHY6ZiBlcW49InN1bSAwIDAgQDEiLz4nLCc8djpmIGVxbj0icHJvZCBAMiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8''@;'; put 'put ''djpmIGVxbj0ic3VtIEAwIDAgMSIvPicsJzx2OmYgZXFuPSJwcm9kIEA2IDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0ic3VtIEA4IDIxNjAwIDAiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2''@;'; put 'put ''OmYgZXFuPSJzdW0gQDEwIDIxNjAwIDAiLz4nLCI8L3Y6Zm9ybXVsYXM+IiwnPHY6cGF0aCBvOmV4dHJ1c2lvbm9rPSJmIiBncmFkaWVudHNoYXBlb2s9InQiIG86Y29ubmVjdHR5cGU9InJlY3QiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIvPicsIjwvdjpzaGFw''@;'; put 'put ''ZXR5cGU+Il0sZ2U9MTtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24ocGUpe0dbcGVdJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24oeWUpe0dbcGVdW3llXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtp''@;'; put 'put ''ZihBcnJheS5pc0FycmF5KEdbcGVdW3llXVtQZV0pKWZvcih2YXIgTmU9MDtOZTxHW3BlXVt5ZV1bUGVdLmxlbmd0aDsrK05lKWlmKEdbcGVdW3llXVtQZV1bTmVdKXt2YXIgWWU9R1twZV1beWVdW1BlXVtOZV07aWYoInJlbW90ZSI9PVllWyIhZGF0YXR5cGUiXSl0aHJvdyJDYW5ub3QgdXNl''@;'; put 'put ''IGxpbmtlZCBpbWFnZSBpbiBoZWFkZXIgb3IgZm9vdGVyIjtmb3IoO3JpKFMsInhsL21lZGlhL2ltYWdlIitnZSsiLmpwZyIpOykrK2dlO1MuZmlsZSgieGwvbWVkaWEvaW1hZ2UiK2dlKyIuanBnIixjbmUoWWUpLHtiaW5hcnk6ITB9KSxFcihRLC0xLCIuLi9tZWRpYS9pbWFnZSIrZ2UrIi5q''@;'; put 'put ''cGciLEthLklNRyk7dmFyIGV0PSJfeDAwMDBfcyIrKDEwMjUrWWUuX2NudCksY3Q9InBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDowO3otaW5kZXg6IisoWWUuX2NudCsxKSsiOyI7Y3QrPSJ3aWR0aDoiK1llWyIhcG9zIl0udysicHg7IixjdCs9ImhlaWdodDoi''@;'; put 'put ''K1llWyIhcG9zIl0uaCsicHg7Ijt2YXIgRXQ9UGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7Im9kZCIhPT15ZSYmKEV0Kz15ZS50b1VwcGVyQ2FzZSgpKSxHW3BlXVt5ZV1bUGVdLmxlbmd0aD4xJiYoRXQrPU5lKSxvZS5wdXNoKFByKCJ2OnNo''@;'; put 'put ''YXBlIixbJzx2OmltYWdlZGF0YSBvOnJlbGlkPSJySWQnKyhZZS5fY250KzEpKyciIG86dGl0bGU9InNoZWV0anMiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLmpvaW4oIiIpLHtpZDpFdCwibzpzcGlkIjpldCx0eXBlOiIjX3gwMDAwX3Q3NSIsc3R5bGU6Y3R9''@;'; put 'put ''KSl9fSl9KX0pLG9lLnB1c2goIjwveG1sPiIpLFMuZmlsZSgieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIraysiSEYudm1sIixvZS5qb2luKCIiKSksUy5maWxlKCJ4bC9kcmF3aW5ncy9fcmVscy92bWxEcmF3aW5nIitrKyJIRi52bWwucmVscyIsa2koUSkpfUthLkNNTlQ9Imh0dHA6Ly9zY2hl''@;'; put 'put ''bWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29tbWVudHMiO3ZhciBRdj1QcigiY29tbWVudHMiLG51bGwse3htbG5zOllpLm1haW5bMF19KTtmdW5jdGlvbiBIQyhTKXt2YXIgUj1bSWksUXZdLGs9W107cmV0dXJuIFIucHVzaCgiPGF1''@;'; put 'put ''dGhvcnM+IiksUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dbMV0uZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgb2U9THIoUS5hKTtrLmluZGV4T2Yob2UpPi0xfHwoay5wdXNoKG9lKSxSLnB1c2goIjxhdXRob3I+IitvZSsiPC9hdXRob3I+IikpfSl9KSxSLnB1c2goIjwvYXV0aG9ycz4iKSxSLnB1''@;'; put 'put ''c2goIjxjb21tZW50TGlzdD4iKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1IucHVzaCgnPGNvbW1lbnQgcmVmPSInK0dbMF0rJyIgYXV0aG9ySWQ9Iicray5pbmRleE9mKExyKFEuYSkpKyciPjx0ZXh0PicpLFIucHVzaChRLlI/UXMoUS5SKTpIYSgi''@;'; put 'put ''dCIsbnVsbD09US50PyIiOkxyKFEudCkpKSxSLnB1c2goIjwvdGV4dD48L2NvbW1lbnQ+Iil9KX0pLFIucHVzaCgiPC9jb21tZW50TGlzdD4iKSxSLmxlbmd0aD4yJiYoUltSLmxlbmd0aF09IjwvY29tbWVudHM+IixSWzFdPVJbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFIuam9pbigiIil9dmFy''@;'; put 'put ''IHdCPWd1O2Z1bmN0aW9uIE5DKFMpe3ZhciBSPWJpKCksaz1bXTtyZXR1cm4gRnIoUiwiQnJ0QmVnaW5Db21tZW50cyIpLEZyKFIsIkJydEJlZ2luQ29tbWVudEF1dGhvcnMiKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2suaW5kZXhPZihRLmEpPi0x''@;'; put 'put ''fHwoay5wdXNoKFEuYS5zbGljZSgwLDU0KSksRnIoUiwiQnJ0Q29tbWVudEF1dGhvciIsZnVuY3Rpb24gdW5lKFMpe3JldHVybiBGYyhTLnNsaWNlKDAsNTQpKX0oUS5hKSkpfSl9KSxGcihSLCJCcnRFbmRDb21tZW50QXV0aG9ycyIpLEZyKFIsIkJydEJlZ2luQ29tbWVudExpc3QiKSxTLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1EuaWF1dGhvcj1rLmluZGV4T2YoUS5hKTt2YXIgb2U9e3M6Tm8oR1swXSksZTpObyhHWzBdKX07RnIoUiwiQnJ0QmVnaW5Db21tZW50IixmdW5jdGlvbiBfQihTLFIpe3JldHVybiBudWxsPT1SJiYoUj1ibigzNikp''@;'; put 'put ''LFIud3JpdGVfc2hpZnQoNCxTWzFdLmlhdXRob3IpLGdmKFNbMF0sUiksUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApLFJ9KFtvZSxRXSkpLFEudCYmUS50Lmxlbmd0aD4wJiZGcihSLCJCcnRDb21tZW50''@;'; put 'put ''VGV4dCIsZnVuY3Rpb24gbmgoUyxSKXt2YXIgaz0hMTtyZXR1cm4gbnVsbD09UiYmKGs9ITAsUj1ibigyMys0KlMudC5sZW5ndGgpKSxSLndyaXRlX3NoaWZ0KDEsMSksRmMoUy50LFIpLFIud3JpdGVfc2hpZnQoNCwxKSxmdW5jdGlvbiBjdihTLFIpe1J8fChSPWJuKDQpKSxSLndyaXRlX3No''@;'; put 'put ''aWZ0KDIsUy5pY2h8fDApLFIud3JpdGVfc2hpZnQoMixTLmlmbnR8fDApfSh7aWNoOjAsaWZudDowfSxSKSxrP1Iuc2xpY2UoMCxSLmwpOlJ9KFEpKSxGcihSLCJCcnRFbmRDb21tZW50IiksZGVsZXRlIFEuaWF1dGhvcn0pfSksRnIoUiwiQnJ0RW5kQ29tbWVudExpc3QiKSxGcihSLCJCcnRF''@;'; put 'put ''bmRDb21tZW50cyIpLFIuZW5kKCl9dmFyIFVrPSJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3QiLFlrPVsieGxzYiIsInhsc20iLCJ4bGFtIiwiYmlmZjgiLCJ4bGEiXTtLYS5EUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIw''@;'; put 'put ''MDYvcmVsYXRpb25zaGlwcy9kaWFsb2dzaGVldCIsS2EuTVM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bE1hY3Jvc2hlZXQiO3ZhciBINT1mdW5jdGlvbigpe3ZhciBTPS8oXnxbXkEtWmEtel9dKVIoXFs/LT9cZCtcXXxbMS05XVxk''@;'; put 'put ''KnwpQyhcWz8tP1xkK1xdfFsxLTldXGQqfCkoPyFbQS1aYS16MC05X10pL2csUj17cjowLGM6MH07ZnVuY3Rpb24gayhHLFEsb2UsZ2Upe3ZhciBwZT0hMSx5ZT0hMTswPT1vZS5sZW5ndGg/eWU9ITA6IlsiPT1vZS5jaGFyQXQoMCkmJih5ZT0hMCxvZT1vZS5zbGljZSgxLC0xKSksMD09Z2Uu''@;'; put 'put ''bGVuZ3RoP3BlPSEwOiJbIj09Z2UuY2hhckF0KDApJiYocGU9ITAsZ2U9Z2Uuc2xpY2UoMSwtMSkpO3ZhciBQZT1vZS5sZW5ndGg+MD8wfHBhcnNlSW50KG9lLDEwKTowLE5lPWdlLmxlbmd0aD4wPzB8cGFyc2VJbnQoZ2UsMTApOjA7cmV0dXJuIHBlP05lKz1SLmM6LS1OZSx5ZT9QZSs9Ui5y''@;'; put 'put ''Oi0tUGUsUSsocGU/IiI6IiQiKStUYShOZSkrKHllPyIiOiIkIikramkoUGUpfXJldHVybiBmdW5jdGlvbihRLG9lKXtyZXR1cm4gUj1vZSxRLnJlcGxhY2UoUyxrKX19KCksbTI9LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZb''@;'; put 'put ''QS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2csSDQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oUixrKXtyZXR1cm4gUi5yZXBsYWNl''@;'; put 'put ''KG0yLGZ1bmN0aW9uKEcsUSxvZSxnZSxwZSx5ZSl7dmFyIFBlPUNhKGdlKS0ob2U/MDprLmMpLE5lPV9vKHllKS0ocGU/MDprLnIpO3JldHVybiBRKyJSIisoMD09TmU/IiI6cGU/TmUrMToiWyIrTmUrIl0iKSsiQyIrKDA9PVBlPyIiOm9lP1BlKzE6IlsiK1BlKyJdIil9KX19KCk7ZnVuY3Rp''@;'; put 'put ''b24gR2soUyxSKXtyZXR1cm4gUy5yZXBsYWNlKG0yLGZ1bmN0aW9uKGssRyxRLG9lLGdlLHBlKXtyZXR1cm4gRysoIiQiPT1RP1Erb2U6VGEoQ2Eob2UpK1IuYykpKygiJCI9PWdlP2dlK3BlOmppKF9vKHBlKStSLnIpKX0pLnJlcGxhY2UoLyhcZCspOihcZCspL2csZnVuY3Rpb24oayxHLFEp''@;'; put 'put ''e3JldHVybiBqaShfbyhHKStSLnIpKyI6IitqaShfbyhRKStSLnIpfSl9ZnVuY3Rpb24gZG5lKFMsUixrKXt2YXIgUT1NcyhSKS5zLG9lPU5vKGspO3JldHVybiBHayhTLHtyOm9lLnItUS5yLGM6b2UuYy1RLmN9KX1mdW5jdGlvbiBFQihTKXtyZXR1cm4gUy5yZXBsYWNlKC9feGxmblwuL2cs''@;'; put 'put ''IiIpfWZ1bmN0aW9uIGJ1KFMpe1MubCs9MX1mdW5jdGlvbiBONChTLFIpe3ZhciBrPVMucmVhZF9zaGlmdCgxPT1SPzE6Mik7cmV0dXJuWzE2MzgzJmssaz4+MTQmMSxrPj4xNSYxXX1mdW5jdGlvbiBWQyhTLFIsayl7dmFyIEc9MjtpZihrKXtpZihrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1''@;'; put 'put ''cm4gJGsoUyk7MTI9PWsuYmlmZiYmKEc9NCl9dmFyIFE9Uy5yZWFkX3NoaWZ0KEcpLG9lPVMucmVhZF9zaGlmdChHKSxnZT1ONChTLDIpLHBlPU40KFMsMik7cmV0dXJue3M6e3I6USxjOmdlWzBdLGNSZWw6Z2VbMV0sclJlbDpnZVsyXX0sZTp7cjpvZSxjOnBlWzBdLGNSZWw6cGVbMV0sclJl''@;'; put 'put ''bDpwZVsyXX19fWZ1bmN0aW9uICRrKFMpe3ZhciBSPU40KFMsMiksaz1ONChTLDIpLEc9Uy5yZWFkX3NoaWZ0KDEpLFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybntzOntyOlJbMF0sYzpHLGNSZWw6UlsxXSxyUmVsOlJbMl19LGU6e3I6a1swXSxjOlEsY1JlbDprWzFdLHJSZWw6a1syXX19fWZ1''@;'; put 'put ''bmN0aW9uIEtrKFMsUixrKXtpZihrJiZrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1cm4gZnVuY3Rpb24gQUIoUyl7dmFyIFI9TjQoUywyKSxrPVMucmVhZF9zaGlmdCgxKTtyZXR1cm57cjpSWzBdLGM6ayxjUmVsOlJbMV0sclJlbDpSWzJdfX0oUyk7dmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJjEy''@;'; put 'put ''PT1rLmJpZmY/NDoyKSxRPU40KFMsMik7cmV0dXJue3I6RyxjOlFbMF0sY1JlbDpRWzFdLHJSZWw6UVsyXX19ZnVuY3Rpb24gQkMoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntyOlIsYzoyNTUmayxmUXVvdGVkOiEhKDE2Mzg0JmspLGNSZWw6az4+''@;'; put 'put ''MTUsclJlbDprPj4xNX19ZnVuY3Rpb24gZUQoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIFpDKFMsUil7dmFyIGs9W1MucmVhZF9zaGlmdCgxKV07aWYoMTI9PVIpc3dpdGNoKGtbMF0pe2Nhc2UgMjprWzBdPTQ7YnJlYWs7Y2FzZSA0OmtbMF09''@;'; put 'put ''MTY7YnJlYWs7Y2FzZSAwOmtbMF09MTticmVhaztjYXNlIDE6a1swXT0yfXN3aXRjaChrWzBdKXtjYXNlIDQ6a1sxXT11byhTLDEpPyJUUlVFIjoiRkFMU0UiLDEyIT1SJiYoUy5sKz03KTticmVhaztjYXNlIDM3OmNhc2UgMTY6a1sxXT1NY1tTW1MubF1dLFMubCs9MTI9PVI/NDo4O2JyZWFr''@;'; put 'put ''O2Nhc2UgMDpTLmwrPTg7YnJlYWs7Y2FzZSAxOmtbMV09UGwoUyk7YnJlYWs7Y2FzZSAyOmtbMV09WDAoUywwLHtiaWZmOlI+MCYmUjw4PzI6Un0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJCYWQgU2VyQXI6ICIra1swXSl9cmV0dXJuIGt9ZnVuY3Rpb24gaUQoUyxSLGspe2Zv''@;'; put 'put ''cih2YXIgRz1TLnJlYWRfc2hpZnQoMTI9PWsuYmlmZj80OjIpLFE9W10sb2U9MDtvZSE9RzsrK29lKVEucHVzaCgoMTI9PWsuYmlmZj9tdTpzMikoUyw4KSk7cmV0dXJuIFF9ZnVuY3Rpb24gTkIoUyxSLGspe3ZhciBHPTAsUT0wOzEyPT1rLmJpZmY/KEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQpKTooUT0xK1MucmVhZF9zaGlmdCgxKSxHPTErUy5yZWFkX3NoaWZ0KDIpKSxrLmJpZmY+PTImJmsuYmlmZjw4JiYoLS1HLDA9PS0tUSYmKFE9MjU2KSk7Zm9yKHZhciBvZT0wLGdlPVtdO29lIT1HJiYoZ2Vbb2VdPVtdKTsrK29lKWZvcih2YXIgcGU9MDtwZSE9UTsrK3Bl''@;'; put 'put ''KWdlW29lXVtwZV09WkMoUyxrLmJpZmYpO3JldHVybiBnZX1mdW5jdGlvbiBWNShTLFIsayl7cmV0dXJuIFMubCs9MixbQkMoUyldfWZ1bmN0aW9uIFdDKFMpe3JldHVybiBTLmwrPTYsW119dmFyIFdCPVY1LFlCPVdDLEdCPVdDLCRCPVY1O2Z1bmN0aW9uIG9EKFMpe3JldHVybiBTLmwrPTIs''@;'; put 'put ''W0VjKFMpLDEmUy5yZWFkX3NoaWZ0KDIpXX12YXIgWUM9VjUsX25lPW9ELHduZT1XQyxHQz1WNSxDbmU9VjUsU25lPVsiRGF0YSIsIkFsbCIsIkhlYWRlcnMiLCI/PyIsIj9EYXRhMiIsIj8/IiwiP0RhdGFIZWFkZXJzIiwiPz8iLCJUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/RGF0YVRvdGFs''@;'; put 'put ''cyIsIj8/IiwiPz8iLCI/PyIsIj9DdXJyZW50Il0saWI9ezE6e246IlB0Z0V4cCIsZjpmdW5jdGlvbiBQQihTLFIsayl7cmV0dXJuIFMubCsrLGsmJjEyPT1rLmJpZmY/W1MucmVhZF9zaGlmdCg0LCJpIiksMF06W1MucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6''@;'; put 'put ''MildfX0sMjp7bjoiUHRnVGJsIixmOklufSwzOntuOiJQdGdBZGQiLGY6YnV9LDQ6e246IlB0Z1N1YiIsZjpidX0sNTp7bjoiUHRnTXVsIixmOmJ1fSw2OntuOiJQdGdEaXYiLGY6YnV9LDc6e246IlB0Z1Bvd2VyIixmOmJ1fSw4OntuOiJQdGdDb25jYXQiLGY6YnV9LDk6e246IlB0Z0x0Iixm''@;'; put 'put ''OmJ1fSwxMDp7bjoiUHRnTGUiLGY6YnV9LDExOntuOiJQdGdFcSIsZjpidX0sMTI6e246IlB0Z0dlIixmOmJ1fSwxMzp7bjoiUHRnR3QiLGY6YnV9LDE0OntuOiJQdGdOZSIsZjpidX0sMTU6e246IlB0Z0lzZWN0IixmOmJ1fSwxNjp7bjoiUHRnVW5pb24iLGY6YnV9LDE3OntuOiJQdGdSYW5n''@;'; put 'put ''ZSIsZjpidX0sMTg6e246IlB0Z1VwbHVzIixmOmJ1fSwxOTp7bjoiUHRnVW1pbnVzIixmOmJ1fSwyMDp7bjoiUHRnUGVyY2VudCIsZjpidX0sMjE6e246IlB0Z1BhcmVuIixmOmJ1fSwyMjp7bjoiUHRnTWlzc0FyZyIsZjpidX0sMjM6e246IlB0Z1N0ciIsZjpmdW5jdGlvbiBIQihTLFIsayl7''@;'; put 'put ''cmV0dXJuIFMubCsrLFVhKFMsMCxrKX19LDI2OntuOiJQdGdTaGVldCIsZjpmdW5jdGlvbiBFbmUoUyxSLGspe3JldHVybiBTLmwrPTUsUy5sKz0yLFMubCs9Mj09ay5iaWZmPzE6NCxbIlBUR1NIRUVUIl19fSwyNzp7bjoiUHRnRW5kU2hlZXQiLGY6ZnVuY3Rpb24gS0IoUyxSLGspe3JldHVy''@;'; put 'put ''biBTLmwrPTI9PWsuYmlmZj80OjUsWyJQVEdFTkRTSEVFVCJdfX0sMjg6e246IlB0Z0VyciIsZjpmdW5jdGlvbiBVQyhTKXtyZXR1cm4gUy5sKyssTWNbUy5yZWFkX3NoaWZ0KDEpXX19LDI5OntuOiJQdGdCb29sIixmOmZ1bmN0aW9uIE41KFMpe3JldHVybiBTLmwrKywwIT09Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDEpfX0sMzA6e246IlB0Z0ludCIsZjpmdW5jdGlvbiBGQihTKXtyZXR1cm4gUy5sKyssUy5yZWFkX3NoaWZ0KDIpfX0sMzE6e246IlB0Z051bSIsZjpmdW5jdGlvbiBWNChTKXtyZXR1cm4gUy5sKyssUGwoUyl9fSwzMjp7bjoiUHRnQXJyYXkiLGY6ZnVuY3Rpb24gZ25lKFMsUixrKXt2''@;'; put 'put ''YXIgRz0oOTYmU1tTLmwrK10pPj41O3JldHVybiBTLmwrPTI9PWsuYmlmZj82OjEyPT1rLmJpZmY/MTQ6NyxbR119fSwzMzp7bjoiUHRnRnVuYyIsZjpmdW5jdGlvbiBMQihTLFIsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBRPVMucmVhZF9zaGlmdChrJiZrLmJpZmY8PTM/''@;'; put 'put ''MToyKTtyZXR1cm5bZWpbUV0scERbUV0sR119fSwzNDp7bjoiUHRnRnVuY1ZhciIsZjpmdW5jdGlvbiBPQihTLFIsayl7dmFyIEc9U1tTLmwrK10sUT1TLnJlYWRfc2hpZnQoMSksb2U9ayYmay5iaWZmPD0zP1s4OD09Rz8tMTowLFMucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gckQoUyl7cmV0''@;'; put 'put ''dXJuW1NbUy5sKzFdPj43LDMyNzY3JlMucmVhZF9zaGlmdCgyKV19KFMpO3JldHVybltRLCgwPT09b2VbMF0/cEQ6clMpW29lWzFdXV19fSwzNTp7bjoiUHRnTmFtZSIsZjpmdW5jdGlvbiBWQihTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzLG9lPVMucmVhZF9zaGlmdCgha3x8''@;'; put 'put ''ay5iaWZmPj04PzQ6Mik7c3dpdGNoKGsuYmlmZil7Y2FzZSAyOlMubCs9NTticmVhaztjYXNlIDM6Y2FzZSA0OlMubCs9ODticmVhaztjYXNlIDU6Uy5sKz0xMn1yZXR1cm5bRywwLG9lXX19LDM2OntuOiJQdGdSZWYiLGY6ZnVuY3Rpb24gUkIoUyxSLGspe3ZhciBHPSg5NiZTW1MubF0pPj41''@;'; put 'put ''O3JldHVybiBTLmwrPTEsW0csS2soUywwLGspXX19LDM3OntuOiJQdGdBcmVhIixmOmZ1bmN0aW9uIHFrKFMsUixrKXtyZXR1cm5bKDk2JlNbUy5sKytdKT4+NSxWQyhTLDAsayldfX0sMzg6e246IlB0Z01lbUFyZWEiLGY6ZnVuY3Rpb24gYUQoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCgx''@;'; put 'put ''KT4+PjUmMztyZXR1cm4gUy5sKz1rJiYyPT1rLmJpZmY/Mzo0LFtHLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwzOTp7bjoiUHRnTWVtRXJyIixmOklufSw0MDp7bjoiUHRnTWVtTm9NZW0iLGY6SW59LDQxOntuOiJQdGdNZW1GdW5jIixmOmZ1bmN0aW9uIGJuZShTLFIsayl7''@;'; put 'put ''cmV0dXJuW1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sNDI6e246IlB0Z1JlZkVyciIsZjpmdW5jdGlvbiB5bmUoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gUy5sKz00LGsuYmlmZjw4JiZTLmwtLSwxMj09''@;'; put 'put ''ay5iaWZmJiYoUy5sKz0yKSxbR119fSw0Mzp7bjoiUHRnQXJlYUVyciIsZjpmdW5jdGlvbiBKayhTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NTtyZXR1cm4gUy5sKz1rJiZrLmJpZmY+OD8xMjprLmJpZmY8OD82OjgsW0ddfX0sNDQ6e246IlB0Z1JlZk4iLGY6ZnVuY3Rpb24gdEQoUyxS''@;'; put 'put ''LGspe3ZhciBHPSg5NiZTW1MubF0pPj41O1MubCs9MTt2YXIgUT1mdW5jdGlvbiBMZihTLFIsayl7dmFyIEc9ayYmay5iaWZmP2suYmlmZjo4O2lmKEc+PTImJkc8PTUpcmV0dXJuIGZ1bmN0aW9uIGE4KFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgxKSxHPSgzMjc2''@;'; put 'put ''OCZSKT4+MTUsUT0oMTYzODQmUik+PjE0O3JldHVybiBSJj0xNjM4MywxPT1HJiZSPj04MTkyJiYoUi09MTYzODQpLDE9PVEmJms+PTEyOCYmKGstPTI1Nikse3I6UixjOmssY1JlbDpRLHJSZWw6R319KFMpO3ZhciBRPVMucmVhZF9zaGlmdChHPj0xMj80OjIpLG9lPVMucmVhZF9zaGlmdCgy''@;'; put 'put ''KSxnZT0oMTYzODQmb2UpPj4xNCxwZT0oMzI3Njgmb2UpPj4xNTtpZihvZSY9MTYzODMsMT09cGUpZm9yKDtRPjUyNDI4NzspUS09MTA0ODU3NjtpZigxPT1nZSlmb3IoO29lPjgxOTE7KW9lLT0xNjM4NDtyZXR1cm57cjpRLGM6b2UsY1JlbDpnZSxyUmVsOnBlfX0oUywwLGspO3JldHVybltH''@;'; put 'put ''LFFdfX0sNDU6e246IlB0Z0FyZWFOIixmOmZ1bmN0aW9uIHBuZShTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPWZ1bmN0aW9uIFRCKFMsUixrKXtpZihrLmJpZmY8OClyZXR1cm4gJGsoUyk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEyPT1rLmJpZmY/NDoyKSxRPVMucmVhZF9zaGlmdCgx''@;'; put 'put ''Mj09ay5iaWZmPzQ6Miksb2U9TjQoUywyKSxnZT1ONChTLDIpO3JldHVybntzOntyOkcsYzpvZVswXSxjUmVsOm9lWzFdLHJSZWw6b2VbMl19LGU6e3I6USxjOmdlWzBdLGNSZWw6Z2VbMV0sclJlbDpnZVsyXX19fShTLDAsayk7cmV0dXJuW0csUV19fSw0Njp7bjoiUHRnTWVtQXJlYU4iLGY6''@;'; put 'put ''ZnVuY3Rpb24gbmIoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoMildfX0sNDc6e246IlB0Z01lbU5vTWVtTiIsZjpmdW5jdGlvbiByYihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdCgyKV19fSw1Nzp7bjoiUHRnTmFtZVgi''@;'; put 'put ''LGY6ZnVuY3Rpb24gQkIoUyxSLGspe3JldHVybiA1PT1rLmJpZmY/ZnVuY3Rpb24gakIoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzLGs9Uy5yZWFkX3NoaWZ0KDIsImkiKTtTLmwrPTg7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTEyLFtSLGssR119KFMpOltTLnJl''@;'; put 'put ''YWRfc2hpZnQoMSk+Pj41JjMsUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCg0KV19fSw1ODp7bjoiUHRnUmVmM2QiLGY6ZnVuY3Rpb24gbkQoUyxSLGspe3ZhciBHPSg5NiZTW1MubF0pPj41O1MubCs9MTt2YXIgUT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIGsmJjU9PWsuYmlmZiYmKFMu''@;'; put 'put ''bCs9MTIpLFtHLFEsS2soUywwLGspXX19LDU5OntuOiJQdGdBcmVhM2QiLGY6ZnVuY3Rpb24gWGsoUyxSLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjUsUT1TLnJlYWRfc2hpZnQoMiwiaSIpO2lmKGsmJjU9PT1rLmJpZmYpUy5sKz0xMjtyZXR1cm5bRyxRLFZDKFMsMCxrKV19fSw2MDp7bjoi''@;'; put 'put ''UHRnUmVmRXJyM2QiLGY6ZnVuY3Rpb24gbzgoUyxSLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjUsUT1TLnJlYWRfc2hpZnQoMiksb2U9NDtpZihrKXN3aXRjaChrLmJpZmYpe2Nhc2UgNTpvZT0xNTticmVhaztjYXNlIDEyOm9lPTZ9cmV0dXJuIFMubCs9b2UsW0csUV19fSw2MTp7bjoiUHRn''@;'; put 'put ''QXJlYUVycjNkIixmOmZ1bmN0aW9uIGZuZShTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPVMucmVhZF9zaGlmdCgyKSxvZT04O2lmKGspc3dpdGNoKGsuYmlmZil7Y2FzZSA1OlMubCs9MTIsb2U9NjticmVhaztjYXNlIDEyOm9lPTEyfXJldHVybiBTLmwrPW9lLFtHLFFdfX0sMjU1''@;'; put 'put ''Ont9fSxLQz17NjQ6MzIsOTY6MzIsNjU6MzMsOTc6MzMsNjY6MzQsOTg6MzQsNjc6MzUsOTk6MzUsNjg6MzYsMTAwOjM2LDY5OjM3LDEwMTozNyw3MDozOCwxMDI6MzgsNzE6MzksMTAzOjM5LDcyOjQwLDEwNDo0MCw3Mzo0MSwxMDU6NDEsNzQ6NDIsMTA2OjQyLDc1OjQzLDEwNzo0Myw3Njo0''@;'; put 'put ''NCwxMDg6NDQsNzc6NDUsMTA5OjQ1LDc4OjQ2LDExMDo0Niw3OTo0NywxMTE6NDcsODg6MzQsMTIwOjM0LDg5OjU3LDEyMTo1Nyw5MDo1OCwxMjI6NTgsOTE6NTksMTIzOjU5LDkyOjYwLDEyNDo2MCw5Mzo2MSwxMjU6NjF9OyFmdW5jdGlvbigpe2Zvcih2YXIgUyBpbiBLQylpYltTXT1pYltL''@;'; put 'put ''Q1tTXV19KCk7dmFyIHFDPXsxOntuOiJQdGdFbGZMZWwiLGY6b0R9LDI6e246IlB0Z0VsZlJ3IixmOkdDfSwzOntuOiJQdGdFbGZDb2wiLGY6V0J9LDY6e246IlB0Z0VsZlJ3ViIsZjpDbmV9LDc6e246IlB0Z0VsZkNvbFYiLGY6JEJ9LDEwOntuOiJQdGdFbGZSYWRpY2FsIixmOllDfSwxMTp7''@;'; put 'put ''bjoiUHRnRWxmUmFkaWNhbFMiLGY6d25lfSwxMzp7bjoiUHRnRWxmQ29sUyIsZjpZQn0sMTU6e246IlB0Z0VsZkNvbFNWIixmOkdCfSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjpfbmV9LDI1OntuOiJQdGdMaXN0IixmOmZ1bmN0aW9uIE1uZShTKXtTLmwrPTI7dmFyIFI9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTpSLGNvbHR5cGU6MyZrLHJ0OlNuZVtrPj4yJjMxXSxpZHg6RyxjOlEsQzpvZX19fSwyOTp7bjoiUHRnU3hOYW1lIixmOmZ1bmN0''@;'; put 'put ''aW9uIHhuZShTKXtyZXR1cm4gUy5sKz0yLFtTLnJlYWRfc2hpZnQoNCldfX0sMjU1Ont9fSwkMz17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gJEMoUyl7cmV0dXJuIFMubCs9NCxbMCwwXX19LDE6e246IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIGtCKFMsUixrKXt2YXIgRz0yNTUm''@;'; put 'put ''U1tTLmwrMV0/MTowO3JldHVybiBTLmwrPWsmJjI9PWsuYmlmZj8zOjQsW0ddfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uIHZuZShTLFIsayl7dmFyIEc9MjU1JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtHLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSw0Ontu''@;'; put 'put ''OiJQdGdBdHRyQ2hvb3NlIixmOmZ1bmN0aW9uIHpDKFMsUixrKXtTLmwrPTI7Zm9yKHZhciBHPVMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKSxRPVtdLG9lPTA7b2U8PUc7KytvZSlRLnB1c2goUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpKTtyZXR1cm4gUX19LDg6e246IlB0''@;'; put 'put ''Z0F0dHJHb3RvIixmOmZ1bmN0aW9uIG1uZShTLFIsayl7dmFyIEc9MjU1JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtHLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwxNjp7bjoiUHRnQXR0clN1bSIsZjpmdW5jdGlvbiB0YihTLFIsayl7Uy5sKz1rJiYyPT1rLmJpZmY/''@;'; put 'put ''Mzo0fX0sMzI6e246IlB0Z0F0dHJCYXhjZWwiLGY6ZnVuY3Rpb24gakMoUyl7dmFyIFI9MSZTW1MubCsxXTtyZXR1cm4gUy5sKz00LFtSLDFdfX0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiBEQihTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLGVEKFMpfX0sNjU6e246IlB0Z0F0''@;'; put 'put ''dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gSUIoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCgyKSxlRChTKX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gUWsoUyl7dmFyIFI9MjU1JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtSLFMucmVhZF9zaGlmdCgyKV19fSwyNTU6''@;'; put 'put ''e319O2Z1bmN0aW9uIEI0KFMsUixrLEcsUSl7aWYoRy5iaWZmPDgpcmV0dXJuIEluKFMsUik7Zm9yKHZhciBvZT1TLmwrUixnZT1bXSxwZT0wO3BlIT09ay5sZW5ndGg7KytwZSlzd2l0Y2goa1twZV1bMF0pe2Nhc2UiUHRnQXJyYXkiOmtbcGVdWzFdPU5CKFMsMCxHKSxnZS5wdXNoKGtbcGVd''@;'; put 'put ''WzFdKTticmVhaztjYXNlIlB0Z01lbUFyZWEiOmtbcGVdWzJdPWlEKFMsMCxHKSxnZS5wdXNoKGtbcGVdWzJdKTticmVhaztjYXNlIlB0Z0V4cCI6RyYmMTI9PUcuYmlmZiYmKGtbcGVdWzFdWzFdPVMucmVhZF9zaGlmdCg0KSxnZS5wdXNoKGtbcGVdWzFdKSk7YnJlYWs7Y2FzZSJQdGdMaXN0''@;'; put 'put ''IjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOnRocm93IlVuc3VwcG9ydGVkICIra1twZV1bMF19cmV0dXJuIFI9b2UtUy5sLCFRJiYwIT09UiYmZ2UucHVzaChJbihTLFIpKSxnZX1mdW5jdGlvbiBsaChTLFIsayl7Zm9yKHZhciBRLG9l''@;'; put 'put ''LEc9Uy5sK1IsZ2U9W107RyE9Uy5sOylSPUctUy5sLFE9aWJbb2U9U1tTLmxdXSwoMjQ9PT1vZXx8MjU9PT1vZSkmJihRPSgyND09PW9lP3FDOiQzKVtTW1MubCsxXV0pLFEmJlEuZj9nZS5wdXNoKFtRLm4sUS5mKFMsUixrKV0pOkluKFMsUik7cmV0dXJuIGdlfWZ1bmN0aW9uIEYxKFMpe2Zv''@;'; put 'put ''cih2YXIgUj1bXSxrPTA7azxTLmxlbmd0aDsrK2spe2Zvcih2YXIgRz1TW2tdLFE9W10sb2U9MDtvZTxHLmxlbmd0aDsrK29lKXt2YXIgZ2U9R1tvZV07US5wdXNoKGdlPzI9PT1nZVswXT8nIicrZ2VbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJzpnZVsxXToiIil9Ui5wdXNoKFEuam9pbigi''@;'; put 'put ''LCIpKX1yZXR1cm4gUi5qb2luKCI7Iil9JDNbMzNdPSQzWzMyXTt2YXIgY2g9e1B0Z0FkZDoiKyIsUHRnQ29uY2F0OiImIixQdGdEaXY6Ii8iLFB0Z0VxOiI9IixQdGdHZToiPj0iLFB0Z0d0OiI+IixQdGdMZToiPD0iLFB0Z0x0OiI8IixQdGdNdWw6IioiLFB0Z05lOiI8PiIsUHRnUG93ZXI6''@;'; put 'put ''Il4iLFB0Z1N1YjoiLSJ9LHNEPW5ldyBSZWdFeHAoL1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1MzBGRl0vKTtmdW5jdGlvbiBsRChTLFIsayl7aWYoIVMpcmV0dXJuIlNIMzNUSlNFUlIwIjtpZihrLmJpZmY+OCYmKCFTLlhUSXx8IVMuWFRJW1JdKSlyZXR1cm4gUy5TaGVldE5hbWVzW1Jd''@;'; put 'put ''O2lmKCFTLlhUSSlyZXR1cm4iU0gzM1RKU0VSUjYiO3ZhciBHPVMuWFRJW1JdO2lmKGsuYmlmZjw4KXJldHVybiBSPjFlNCYmKFItPTY1NTM2KSxSPDAmJihSPS1SKSwwPT1SPyIiOlMuWFRJW1ItMV07aWYoIUcpcmV0dXJuIlNIMzNUSlNFUlIxIjt2YXIgUT0iIjtpZihrLmJpZmY+OClzd2l0''@;'; put 'put ''Y2goU1tHWzBdXVswXSl7Y2FzZSAzNTc6cmV0dXJuIFE9LTE9PUdbMV0/IiNSRUYiOlMuU2hlZXROYW1lc1tHWzFdXSxHWzFdPT1HWzJdP1E6USsiOiIrUy5TaGVldE5hbWVzW0dbMl1dO2Nhc2UgMzU4OnJldHVybiBudWxsIT1rLlNJRD9TLlNoZWV0TmFtZXNbay5TSURdOiJTSDMzVEpTU0FN''@;'; put 'put ''RSIrU1tHWzBdXVswXTtkZWZhdWx0OnJldHVybiJTSDMzVEpTU1JDIitTW0dbMF1dWzBdfXN3aXRjaChTW0dbMF1dWzBdWzBdKXtjYXNlIDEwMjU6cmV0dXJuIFE9LTE9PUdbMV0/IiNSRUYiOlMuU2hlZXROYW1lc1tHWzFdXXx8IlNIMzNUSlNFUlIzIixHWzFdPT1HWzJdP1E6USsiOiIrUy5T''@;'; put 'put ''aGVldE5hbWVzW0dbMl1dO2Nhc2UgMTQ4NDk6cmV0dXJuIFNbR1swXV0uc2xpY2UoMSkubWFwKGZ1bmN0aW9uKG9lKXtyZXR1cm4gb2UuTmFtZX0pLmpvaW4oIjs7Iik7ZGVmYXVsdDpyZXR1cm4gU1tHWzBdXVswXVszXT8oUT0tMT09R1sxXT8iI1JFRiI6U1tHWzBdXVswXVszXVtHWzFdXXx8''@;'; put 'put ''IlNIMzNUSlNFUlI0IixHWzFdPT1HWzJdP1E6USsiOiIrU1tHWzBdXVswXVszXVtHWzJdXSk6IlNIMzNUSlNFUlIyIn19ZnVuY3Rpb24gcUIoUyxSLGspe3JldHVybiBmdW5jdGlvbiBUbmUoUyxSKXtpZighKFN8fFImJlIuYmlmZjw9NSYmUi5iaWZmPj0yKSl0aHJvdyBuZXcgRXJyb3IoImVt''@;'; put 'put ''cHR5IHNoZWV0IG5hbWUiKTtyZXR1cm4vI1JFRi8udGVzdChTKT9TOnNELnRlc3QoUyk/IiciK1MrIiciOlN9KGxEKFMsUixrKSxrKX1mdW5jdGlvbiBzMChTLFIsayxHLFEsb2Upe3ZhciBQZSxOZSxZZSxFdCxnZT1RJiZRLmJpZmZ8fDgscGU9b2UmJm51bGwhPVI/Ujp7czp7YzowLHI6MH0s''@;'; put 'put ''ZTp7YzowLHI6MH19LHllPVtdLGV0PTAsY3Q9MCxhdD0iIjtpZighU1swXXx8IVNbMF1bMF0pcmV0dXJuIiI7Zm9yKHZhciBidD0tMSxqdD0iIixrdD0wLE90PVNbMF0ubGVuZ3RoO2t0PE90Oysra3Qpe3ZhciBLdD1TWzBdW2t0XTtzd2l0Y2goS3RbMF0pe2Nhc2UiUHRnVW1pbnVzIjp5ZS5w''@;'; put 'put ''dXNoKCItIit5ZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdVcGx1cyI6eWUucHVzaCgiKyIreWUucG9wKCkpO2JyZWFrO2Nhc2UiUHRnUGVyY2VudCI6eWUucHVzaCh5ZS5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEi''@;'; put 'put ''OmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRnTGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2VyIjpjYXNlIlB0Z1N1YiI6aWYoUGU9eWUucG9wKCksTmU9eWUucG9wKCksYnQ+PTApe3N3aXRjaChTWzBdW2J0XVsxXVswXSl7Y2FzZSAw''@;'; put 'put ''Omp0PWNpKCIgIixTWzBdW2J0XVsxXVsxXSk7YnJlYWs7Y2FzZSAxOmp0PWNpKCJcciIsU1swXVtidF1bMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoanQ9IiIsUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitTWzBdW2J0XVsxXVswXSl9TmUrPWp0''@;'; put 'put ''LGJ0PS0xfXllLnB1c2goTmUrY2hbS3RbMF1dK1BlKTticmVhaztjYXNlIlB0Z0lzZWN0IjpQZT15ZS5wb3AoKSxOZT15ZS5wb3AoKSx5ZS5wdXNoKE5lKyIgIitQZSk7YnJlYWs7Y2FzZSJQdGdVbmlvbiI6UGU9eWUucG9wKCksTmU9eWUucG9wKCkseWUucHVzaChOZSsiLCIrUGUpO2JyZWFr''@;'; put 'put ''O2Nhc2UiUHRnUmFuZ2UiOlBlPXllLnBvcCgpLE5lPXllLnBvcCgpLHllLnB1c2goTmUrIjoiK1BlKTticmVhaztjYXNlIlB0Z0F0dHJDaG9vc2UiOmNhc2UiUHRnQXR0ckdvdG8iOmNhc2UiUHRnQXR0cklmIjpjYXNlIlB0Z0F0dHJJZkVycm9yIjpjYXNlIlB0Z0F0dHJCYXhjZWwiOmNhc2Ui''@;'; put 'put ''UHRnQXR0clNlbWkiOmNhc2UiUHRnTWVtQXJlYSI6Y2FzZSJQdGdUYmwiOmNhc2UiUHRnTWVtRXJyIjpjYXNlIlB0Z01lbUFyZWFOIjpjYXNlIlB0Z01lbU5vTWVtTiI6Y2FzZSJQdGdBdHRyTm9vcCI6Y2FzZSJQdGdTaGVldCI6Y2FzZSJQdGdFbmRTaGVldCI6Y2FzZSJQdGdNZW1GdW5jIjpj''@;'; put 'put ''YXNlIlB0Z01lbU5vTWVtIjpicmVhaztjYXNlIlB0Z1JlZiI6WWU9dGEoS3RbMV1bMV0scGUsUSkseWUucHVzaChWYShZZSxnZSkpO2JyZWFrO2Nhc2UiUHRnUmVmTiI6WWU9az90YShLdFsxXVsxXSxrLFEpOkt0WzFdWzFdLHllLnB1c2goVmEoWWUsZ2UpKTticmVhaztjYXNlIlB0Z1JlZjNk''@;'; put 'put ''IjpldD1LdFsxXVsxXSxZZT10YShLdFsxXVsyXSxwZSxRKSxhdD1xQihHLGV0LFEpLHllLnB1c2goYXQrIiEiK1ZhKFllLGdlKSk7YnJlYWs7Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNWYXIiOnZhciBycj1LdFsxXVswXSxTbj1LdFsxXVsxXTtycnx8KHJyPTApO3ZhciBscj0wPT0ocnIm''@;'; put 'put ''PTEyNyk/W106eWUuc2xpY2UoLXJyKTt5ZS5sZW5ndGgtPXJyLCJVc2VyIj09PVNuJiYoU249bHIuc2hpZnQoKSkseWUucHVzaChTbisiKCIrbHIuam9pbigiLCIpKyIpIik7YnJlYWs7Y2FzZSJQdGdCb29sIjp5ZS5wdXNoKEt0WzFdPyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlIlB0Z0lu''@;'; put 'put ''dCI6Y2FzZSJQdGdOdW0iOnllLnB1c2goU3RyaW5nKEt0WzFdKSk7YnJlYWs7Y2FzZSJQdGdTdHIiOnllLnB1c2goJyInK0t0WzFdLnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UiUHRnRXJyIjp5ZS5wdXNoKEt0WzFdKTticmVhaztjYXNlIlB0Z0FyZWFOIjpFdD1vYShLdFsx''@;'; put 'put ''XVsxXSxrP3tzOmt9OnBlLFEpLHllLnB1c2goJG8oRXQsUSkpO2JyZWFrO2Nhc2UiUHRnQXJlYSI6RXQ9b2EoS3RbMV1bMV0scGUsUSkseWUucHVzaCgkbyhFdCxRKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOmV0PUt0WzFdWzFdLEV0PW9hKEt0WzFdWzJdLHBlLFEpLGF0PXFCKEcsZXQsUSks''@;'; put 'put ''eWUucHVzaChhdCsiISIrJG8oRXQsUSkpO2JyZWFrO2Nhc2UiUHRnQXR0clN1bSI6eWUucHVzaCgiU1VNKCIreWUucG9wKCkrIikiKTticmVhaztjYXNlIlB0Z05hbWUiOnZhciBYbj0oRy5uYW1lc3x8W10pWyhjdD1LdFsxXVsyXSktMV18fChHWzBdfHxbXSlbY3RdLEJuPVhuP1huLk5hbWU6''@;'; put 'put ''IlNIMzNUSlNOQU1FIitTdHJpbmcoY3QpO0JuIGluIGFiJiYoQm49YWJbQm5dKSx5ZS5wdXNoKEJuKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgYnIsZnI9S3RbMV1bMV07aWYoY3Q9S3RbMV1bMl0sIShRLmJpZmY8PTUpKXt2YXIgZXI9IiI7aWYoMTQ4NDk9PSgoR1tmcl18fFtdKVswXXx8''@;'; put 'put ''W10pWzBdfHwoMTAyNT09KChHW2ZyXXx8W10pWzBdfHxbXSlbMF0/R1tmcl1bY3RdJiZHW2ZyXVtjdF0uaXRhYj4wJiYoZXI9Ry5TaGVldE5hbWVzW0dbZnJdW2N0XS5pdGFiLTFdKyIhIik6ZXI9Ry5TaGVldE5hbWVzW2N0LTFdKyIhIiksR1tmcl0mJkdbZnJdW2N0XSllcis9R1tmcl1bY3Rd''@;'; put 'put ''Lk5hbWU7ZWxzZSBpZihHWzBdJiZHWzBdW2N0XSllcis9R1swXVtjdF0uTmFtZTtlbHNle3ZhciBGaT0obEQoRyxmcixRKXx8IiIpLnNwbGl0KCI7OyIpO0ZpW2N0LTFdP2VyPUZpW2N0LTFdOmVyKz0iU0gzM1RKU0VSUlgifXllLnB1c2goZXIpO2JyZWFrfWZyPDAmJihmcj0tZnIpLEdbZnJd''@;'; put 'put ''JiYoYnI9R1tmcl1bY3RdKSxicnx8KGJyPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSx5ZS5wdXNoKGJyLk5hbWUpO2JyZWFrO2Nhc2UiUHRnUGFyZW4iOnZhciBuYT0iKCIsY2E9IikiO2lmKGJ0Pj0wKXtzd2l0Y2goanQ9IiIsU1swXVtidF1bMV1bMF0pe2Nhc2UgMjpuYT1jaSgiICIsU1swXVti''@;'; put 'put ''dF1bMV1bMV0pK25hO2JyZWFrO2Nhc2UgMzpuYT1jaSgiXHIiLFNbMF1bYnRdWzFdWzFdKStuYTticmVhaztjYXNlIDQ6Y2E9Y2koIiAiLFNbMF1bYnRdWzFdWzFdKStjYTticmVhaztjYXNlIDU6Y2E9Y2koIlxyIixTWzBdW2J0XVsxXVsxXSkrY2E7YnJlYWs7ZGVmYXVsdDppZihRLldURil0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK1NbMF1bYnRdWzFdWzBdKX1idD0tMX15ZS5wdXNoKG5hK3llLnBvcCgpK2NhKTticmVhaztjYXNlIlB0Z1JlZkVyciI6Y2FzZSJQdGdBcmVhRXJyIjpjYXNlIlB0Z0FyZWFFcnIzZCI6Y2FzZSJQdGdSZWZFcnIz''@;'; put 'put ''ZCI6eWUucHVzaCgiI1JFRiEiKTticmVhaztjYXNlIlB0Z0V4cCI6dmFyIGtyPXtjOmsuYyxyOmsucn07aWYoRy5zaGFyZWRmW3FpKFllPXtjOkt0WzFdWzFdLHI6S3RbMV1bMF19KV0pe3ZhciBWbj1HLnNoYXJlZGZbcWkoWWUpXTt5ZS5wdXNoKHMwKFZuLHBlLGtyLEcsUSkpfWVsc2V7dmFy''@;'; put 'put ''IEJyPSExO2ZvcihQZT0wO1BlIT1HLmFycmF5Zi5sZW5ndGg7KytQZSlpZighKFllLmM8KE5lPUcuYXJyYXlmW1BlXSlbMF0ucy5jfHxZZS5jPk5lWzBdLmUuY3x8WWUucjxOZVswXS5zLnJ8fFllLnI+TmVbMF0uZS5yKSl7eWUucHVzaChzMChOZVsxXSxwZSxrcixHLFEpKSxCcj0hMDticmVh''@;'; put 'put ''a31Ccnx8eWUucHVzaChLdFsxXSl9YnJlYWs7Y2FzZSJQdGdBcnJheSI6eWUucHVzaCgieyIrRjEoS3RbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNhc2UiUHRnQXR0clNwYWNlU2VtaSI6YnQ9a3Q7YnJlYWs7Y2FzZSJQdGdNaXNzQXJnIjp5ZS5wdXNoKCIiKTticmVhaztj''@;'; put 'put ''YXNlIlB0Z0xpc3QiOnllLnB1c2goIlRhYmxlIitLdFsxXS5pZHgrIlsjIitLdFsxXS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNh''@;'; put 'put ''bCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZzIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2Vu''@;'; put 'put ''OiAiK1N0cmluZyhLdCkpfWlmKDMhPVEuYmlmZiYmYnQ+PTAmJi0xPT1bIlB0Z0F0dHJTcGFjZSIsIlB0Z0F0dHJTcGFjZVNlbWkiLCJQdGdBdHRyR290byJdLmluZGV4T2YoU1swXVtrdF1bMF0pKXt2YXIgRm49ITA7c3dpdGNoKChLdD1TWzBdW2J0XSlbMV1bMF0pe2Nhc2UgNDpGbj0hMTtj''@;'; put 'put ''YXNlIDA6anQ9Y2koIiAiLEt0WzFdWzFdKTticmVhaztjYXNlIDU6Rm49ITE7Y2FzZSAxOmp0PWNpKCJcciIsS3RbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoanQ9IiIsUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitLdFsxXVswXSl9eWUucHVz''@;'; put 'put ''aCgoRm4/anQ6IiIpK3llLnBvcCgpKyhGbj8iIjpqdCkpLGJ0PS0xfX1pZih5ZS5sZW5ndGg+MSYmUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJiYWQgZm9ybXVsYSBzdGFjayIpO3JldHVybiB5ZVswXX1mdW5jdGlvbiBjRChTLFIsayl7dmFyIG9lLEc9Uy5sK1IsUT0yPT1rLmJpZmY/MToyLGdl''@;'; put 'put ''PVMucmVhZF9zaGlmdChRKTtpZig2NTUzNT09Z2UpcmV0dXJuW1tdLEluKFMsUi0yKV07dmFyIHBlPWxoKFMsZ2Usayk7cmV0dXJuIFIhPT1nZStRJiYob2U9QjQoUyxSLWdlLVEscGUsaykpLFMubD1HLFtwZSxvZV19ZnVuY3Rpb24gSzMoUyxSLGspe3ZhciBRLEc9Uy5sK1Isb2U9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLGdlPWxoKFMsb2Usayk7cmV0dXJuIDY1NTM1PT1vZT9bW10sSW4oUyxSLTIpXTooUiE9PW9lKzImJihRPUI0KFMsRy1vZS0yLGdlLGspKSxbZ2UsUV0pfWZ1bmN0aW9uIFFDKFMsUixrKXt2YXIgRz1TLmwrUixRPXcwKFMpOzI9PWsuYmlmZiYmKytTLmw7dmFyIG9lPWZ1bmN0''@;'; put 'put ''aW9uIFhDKFMpe3ZhciBSO2lmKDY1NTM1IT09ZW8oUyxTLmwrNikpcmV0dXJuW1BsKFMpLCJuIl07c3dpdGNoKFNbUy5sXSl7Y2FzZSAwOnJldHVybiBTLmwrPTgsWyJTdHJpbmciLCJzIl07Y2FzZSAxOnJldHVybiBSPTE9PT1TW1MubCsyXSxTLmwrPTgsW1IsImIiXTtjYXNlIDI6cmV0dXJu''@;'; put 'put ''IFI9U1tTLmwrMl0sUy5sKz04LFtSLCJlIl07Y2FzZSAzOnJldHVybiBTLmwrPTgsWyIiLCJzIl19cmV0dXJuW119KFMpLGdlPVMucmVhZF9zaGlmdCgxKTsyIT1rLmJpZmYmJihTLnJlYWRfc2hpZnQoMSksay5iaWZmPj01JiZTLnJlYWRfc2hpZnQoNCkpO3ZhciBwZT1mdW5jdGlvbiB1RChT''@;'; put 'put ''LFIsayl7dmFyIG9lLEc9Uy5sK1IsUT0yPT1rLmJpZmY/MToyLGdlPVMucmVhZF9zaGlmdChRKTtpZig2NTUzNT09Z2UpcmV0dXJuW1tdLEluKFMsUi0yKV07dmFyIHBlPWxoKFMsZ2Usayk7cmV0dXJuIFIhPT1nZStRJiYob2U9QjQoUyxSLWdlLVEscGUsaykpLFMubD1HLFtwZSxvZV19KFMs''@;'; put 'put ''Ry1TLmwsayk7cmV0dXJue2NlbGw6USx2YWw6b2VbMF0sZm9ybXVsYTpwZSxzaGFyZWQ6Z2U+PjMmMSx0dDpvZVsxXX19ZnVuY3Rpb24gajQoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPWxoKFMsRyxrKSxvZT1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuW1Esb2U+MD9CNChTLG9lLFEs''@;'; put 'put ''aywhMCk6bnVsbF19dmFyIGVTPWo0LHo0PWo0LGhEPWo0LFhCPWZ1bmN0aW9uIGREKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCksb2U9bGgoUyxHLGspO3JldHVybltvZSxRPjA/QjQoUyxRLG9lLGssITApOm51bGxdfSxmRD1qNCxKQj1qNDtmdW5jdGlv''@;'; put 'put ''biB0UyhTKXtpZigoMHxTKT09UyYmUzxNYXRoLnBvdygyLDE2KSYmUz49MCl7dmFyIFI9Ym4oMTEpO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsMyksUi53cml0ZV9zaGlmdCgxLDMwKSxSLndyaXRlX3NoaWZ0KDIsUyksUi53cml0ZV9zaGlmdCg0LDApLFJ9dmFyIGs9Ym4oMTcpO3JldHVybiBr''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMTEpLGsud3JpdGVfc2hpZnQoMSwzMSksay53cml0ZV9zaGlmdCg4LFMpLGsud3JpdGVfc2hpZnQoNCwwKSxrfWZ1bmN0aW9uIG5TKFMpe3ZhciBSPWJuKDcpO1Iud3JpdGVfc2hpZnQoNCwzKzIqUy5sZW5ndGgpLFIud3JpdGVfc2hpZnQoMSwyMyksUi53cml0ZV9z''@;'; put 'put ''aGlmdCgyLFMubGVuZ3RoKTt2YXIgaz1ibigyKlMubGVuZ3RoKTtrLndyaXRlX3NoaWZ0KDIqUy5sZW5ndGgsUywidXRmMTZsZSIpO3ZhciBHPWJuKDQpO3JldHVybiBHLndyaXRlX3NoaWZ0KDQsMCksaihbUixrLEddKX1mdW5jdGlvbiBVNChTKXtpZihTLm1hdGNoKC9eIyhESVZcLzAhfEdF''@;'; put 'put ''VFRJTkdfREFUQXxOXC9BfE5BTUVcP3xOVUxMIXxOVU0hfFJFRiF8VkFMVUUhKSQvKSlyZXR1cm4gZnVuY3Rpb24gUUIoUyl7dmFyIFI9Ym4oMTApO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsMiksUi53cml0ZV9zaGlmdCgxLDI4KSxSLndyaXRlX3NoaWZ0KDEsUyksUi53cml0ZV9zaGlmdCg0''@;'; put 'put ''LDApLFJ9KCtQM1tTXSk7aWYoUy5tYXRjaCgvXlwkPyg/OltBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXXxbQS1aXXsxLDJ9KVwkPyg/OjEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0p''@;'; put 'put ''JC8pKXJldHVybiBmdW5jdGlvbiBzOChTKXt2YXIgUj1ObyhTKSxrPWJuKDE1KTtyZXR1cm4gay53cml0ZV9zaGlmdCg0LDcpLGsud3JpdGVfc2hpZnQoMSwzNiksay53cml0ZV9zaGlmdCg0LFIuciksay53cml0ZV9zaGlmdCgyLFIuY3woIiQiPT1TLmNoYXJBdCgwKT8wOjEpPDwxNHwoUy5t''@;'; put 'put ''YXRjaCgvXCRcZC8pPzA6MSk8PDE1KSxrLndyaXRlX3NoaWZ0KDQsMCksa30oUyk7aWYoUy5tYXRjaCgvXiIuKiIkLykpcmV0dXJuIG5TKFMpO3Rocm93IkZvcm11bGEgfCIrUysifCBub3Qgc3VwcG9ydGVkIGZvciBYTFNCIn12YXIgclM9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElO''@;'; put 'put ''S1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwxMDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lO''@;'; put 'put ''RE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVBSyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VN''@;'; put 'put ''RU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJE''@;'; put 'put ''QVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9OIiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNM''@;'; put 'put ''RUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1FIiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNU''@;'; put 'put ''LkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVSWS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6''@;'; put 'put ''IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVYVCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRU''@;'; put 'put ''RVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIsOTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJG''@;'; put 'put ''T1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEuRklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5F''@;'; put 'put ''WFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEwOiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQ''@;'; put 'put ''QUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQQk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxF''@;'; put 'put ''VEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlTIiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJG''@;'; put 'put ''UkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VUTElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJE''@;'; put 'put ''QVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQiLDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2''@;'; put 'put ''MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwxNjc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1P''@;'; put 'put ''VkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6''@;'; put 'put ''Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4zRC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZ''@;'; put 'put ''LjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9NT1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9Q''@;'; put 'put ''RVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJBU1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNF''@;'; put 'put ''VC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5ULlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2''@;'; put 'put ''OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIuREFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMi''@;'; put 'put ''LDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJTkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBF''@;'; put 'put ''IiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFVVE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToi''@;'; put 'put ''T04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JLQk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUu''@;'; put 'put ''VE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFkuVE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMw''@;'; put 'put ''MjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIsMzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZ''@;'; put 'put ''IiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElWT1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJP''@;'; put 'put ''UFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BUSU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwz''@;'; put 'put ''MzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJHQUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0''@;'; put 'put ''OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5BREQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQ''@;'; put 'put ''TFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJPUEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5I''@;'; put 'put ''SURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIs''@;'; put 'put ''Mzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToiU1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldP''@;'; put 'put ''UktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIsNDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09M''@;'; put 'put ''VU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFDRVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJ''@;'; put 'put ''RUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9YLlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIs''@;'; put 'put ''NDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5ESUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJ''@;'; put 'put ''TkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVDVC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElP''@;'; put 'put ''TlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9SQkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6''@;'; put 'put ''Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04uU0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZP''@;'; put 'put ''Iiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFUQVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NP''@;'; put 'put ''UlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToiU0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3''@;'; put 'put ''OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFSRUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRF''@;'; put 'put ''TEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lPTlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZP''@;'; put 'put ''VC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LHBEPXswOiJDT1VOVCIsMToiSUYiLDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIs''@;'; put 'put ''OToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIsMTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2''@;'; put 'put ''OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxTRSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRB''@;'; put 'put ''VkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9HRVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1''@;'; put 'put ''ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIs''@;'; put 'put ''NzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNFQVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoi''@;'; put 'put ''U0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVDVElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6''@;'; put 'put ''IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJTRVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIs''@;'; put 'put ''MTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RFIiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEy''@;'; put 'put ''NzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJGUkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRB''@;'; put 'put ''VEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5V''@;'; put 'put ''IiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElB''@;'; put 'put ''TE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoi''@;'; put 'put ''TkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQIiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5X''@;'; put 'put ''T1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5PVEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIs''@;'; put 'put ''MTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VBUkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5C''@;'; put 'put ''IiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRPREFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxM''@;'; put 'put ''IiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5IIiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwy''@;'; put 'put ''Mzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoiSU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VN''@;'; put 'put ''RSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxVQVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVS''@;'; put 'put ''Uk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIsMjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwy''@;'; put 'put ''NzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0UiLDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYi''@;'; put 'put ''LDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9NRElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1E''@;'; put 'put ''SVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9JU1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToi''@;'; put 'put ''U1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBFQVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMx''@;'; put 'put ''ODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1P''@;'; put 'put ''REUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6''@;'; put 'put ''IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxBTksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRB''@;'; put 'put ''VEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklFVy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVS''@;'; put 'put ''QUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJUSEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNP''@;'; put 'put ''VU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFIVFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgy''@;'; put 'put ''OiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklOIiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NU''@;'; put 'put ''MkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6''@;'; put 'put ''IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJT''@;'; put 'put ''UVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5''@;'; put 'put ''OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNFRElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlF''@;'; put 'put ''TEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMiLDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBE''@;'; put 'put ''QVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJP''@;'; put 'put ''RERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpTIiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDcz''@;'; put 'put ''OiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRDT1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4''@;'; put 'put ''NDoiQVZFUkFHRUlGUyJ9LGVqPXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6MiwzMDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1''@;'; put 'put ''OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMs''@;'; put 'put ''MTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMxOjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0''@;'; put 'put ''OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMsMTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEs''@;'; put 'put ''MjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1''@;'; put 'put ''OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMsMzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIs''@;'; put 'put ''MzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUxOjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1''@;'; put 'put ''OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEsNDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEs''@;'; put 'put ''NDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH0sYWI9eyJfeGxmbi5B''@;'; put 'put ''Q09UIjoiQUNPVCIsIl94bGZuLkFDT1RIIjoiQUNPVEgiLCJfeGxmbi5BR0dSRUdBVEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMiOiJBUkFCSUMiLCJfeGxmbi5BVkVSQUdFSUYiOiJBVkVSQUdFSUYiLCJfeGxmbi5BVkVSQUdFSUZTIjoiQVZFUkFHRUlGUyIsIl94bGZuLkJBU0UiOiJC''@;'; put 'put ''QVNFIiwiX3hsZm4uQkVUQS5ESVNUIjoiQkVUQS5ESVNUIiwiX3hsZm4uQkVUQS5JTlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIiwiX3hsZm4uQklOT00uRElTVC5SQU5HRSI6IkJJTk9NLkRJU1QuUkFOR0UiLCJfeGxmbi5CSU5PTS5JTlYiOiJCSU5PTS5J''@;'; put 'put ''TlYiLCJfeGxmbi5CSVRBTkQiOiJCSVRBTkQiLCJfeGxmbi5CSVRMU0hJRlQiOiJCSVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9SIiwiX3hsZm4uQklUUlNISUZUIjoiQklUUlNISUZUIiwiX3hsZm4uQklUWE9SIjoiQklUWE9SIiwiX3hsZm4uQ0VJTElORy5NQVRIIjoiQ0VJTElORy5N''@;'; put 'put ''QVRIIiwiX3hsZm4uQ0VJTElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwiX3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1QiLCJfeGxmbi5DSElTUS5ESVNULlJUIjoiQ0hJU1EuRElTVC5SVCIsIl94bGZuLkNISVNRLklOViI6IkNISVNRLklOViIsIl94bGZuLkNISVNRLklOVi5S''@;'; put 'put ''VCI6IkNISVNRLklOVi5SVCIsIl94bGZuLkNISVNRLlRFU1QiOiJDSElTUS5URVNUIiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJfeGxmbi5DT05DQVQiOiJDT05DQVQiLCJfeGxmbi5DT05GSURFTkNFLk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJfeGxmbi5DT05GSURFTkNFLlQiOiJD''@;'; put 'put ''T05GSURFTkNFLlQiLCJfeGxmbi5DT1QiOiJDT1QiLCJfeGxmbi5DT1RIIjoiQ09USCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMiLCJfeGxmbi5DT1ZBUklBTkNFLlAiOiJDT1ZBUklBTkNFLlAiLCJfeGxmbi5DT1ZBUklBTkNFLlMiOiJDT1ZBUklBTkNFLlMiLCJfeGxmbi5DU0MiOiJD''@;'; put 'put ''U0MiLCJfeGxmbi5DU0NIIjoiQ1NDSCIsIl94bGZuLkRBWVMiOiJEQVlTIiwiX3hsZm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5FQ01BLkNFSUxJTkciOiJFQ01BLkNFSUxJTkciLCJfeGxmbi5FUkYuUFJFQ0lTRSI6IkVSRi5QUkVDSVNFIiwiX3hsZm4uRVJGQy5QUkVDSVNFIjoiRVJG''@;'; put 'put ''Qy5QUkVDSVNFIiwiX3hsZm4uRVhQT04uRElTVCI6IkVYUE9OLkRJU1QiLCJfeGxmbi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJU1QuUlQiOiJGLkRJU1QuUlQiLCJfeGxmbi5GLklOViI6IkYuSU5WIiwiX3hsZm4uRi5JTlYuUlQiOiJGLklOVi5SVCIsIl94bGZuLkYuVEVTVCI6IkYu''@;'; put 'put ''VEVTVCIsIl94bGZuLkZJTFRFUlhNTCI6IkZJTFRFUlhNTCIsIl94bGZuLkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJU0UiLCJfeGxmbi5GT1JFQ0FTVC5FVFMiOiJGT1JFQ0FTVC5FVFMiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuQ09O''@;'; put 'put ''RklOVCI6IkZPUkVDQVNULkVUUy5DT05GSU5UIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNUQVQiOiJGT1JFQ0FTVC5FVFMuU1RBVCIsIl94bGZuLkZPUkVDQVNULkxJTkVBUiI6IkZPUkVD''@;'; put 'put ''QVNULkxJTkVBUiIsIl94bGZuLkZPUk1VTEFURVhUIjoiRk9STVVMQVRFWFQiLCJfeGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FNTUEuRElTVCI6IkdBTU1BLkRJU1QiLCJfeGxmbi5HQU1NQS5JTlYiOiJHQU1NQS5JTlYiLCJfeGxmbi5HQU1NQUxOLlBSRUNJU0UiOiJHQU1NQUxOLlBS''@;'; put 'put ''RUNJU0UiLCJfeGxmbi5HQVVTUyI6IkdBVVNTIiwiX3hsZm4uSFlQR0VPTS5ESVNUIjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJPUiI6IklGRVJST1IiLCJfeGxmbi5JRk5BIjoiSUZOQSIsIl94bGZuLklGUyI6IklGUyIsIl94bGZuLklNQ09TSCI6IklNQ09TSCIsIl94bGZuLklNQ09U''@;'; put 'put ''IjoiSU1DT1QiLCJfeGxmbi5JTUNTQyI6IklNQ1NDIiwiX3hsZm4uSU1DU0NIIjoiSU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIsIl94bGZuLklNU0VDSCI6IklNU0VDSCIsIl94bGZuLklNU0lOSCI6IklNU0lOSCIsIl94bGZuLklNVEFOIjoiSU1UQU4iLCJfeGxmbi5JU0ZPUk1VTEEi''@;'; put 'put ''OiJJU0ZPUk1VTEEiLCJfeGxmbi5JU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIiwiX3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0iLCJfeGxmbi5MT0dOT1JNLkRJU1QiOiJMT0dOT1JNLkRJU1QiLCJfeGxmbi5MT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIiwiX3hsZm4uTUFYSUZTIjoi''@;'; put 'put ''TUFYSUZTIiwiX3hsZm4uTUlOSUZTIjoiTUlOSUZTIiwiX3hsZm4uTU9ERS5NVUxUIjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdMIjoiTU9ERS5TTkdMIiwiX3hsZm4uTVVOSVQiOiJNVU5JVCIsIl94bGZuLk5FR0JJTk9NLkRJU1QiOiJORUdCSU5PTS5ESVNUIiwiX3hsZm4uTkVUV09S''@;'; put 'put ''S0RBWVMuSU5UTCI6Ik5FVFdPUktEQVlTLklOVEwiLCJfeGxmbi5OSUdCSU5PTSI6Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoiTk9STS5ESVNUIiwiX3hsZm4uTk9STS5JTlYiOiJOT1JNLklOViIsIl94bGZuLk5PUk0uUy5ESVNUIjoiTk9STS5TLkRJU1QiLCJfeGxmbi5OT1JNLlMu''@;'; put 'put ''SU5WIjoiTk9STS5TLklOViIsIl94bGZuLk5VTUJFUlZBTFVFIjoiTlVNQkVSVkFMVUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJT04iLCJfeGxmbi5QRVJDRU5USUxFLkVYQyI6IlBFUkNFTlRJTEUuRVhDIiwiX3hsZm4uUEVSQ0VOVElMRS5JTkMiOiJQRVJDRU5USUxFLklOQyIsIl94''@;'; put 'put ''bGZuLlBFUkNFTlRSQU5LLkVYQyI6IlBFUkNFTlRSQU5LLkVYQyIsIl94bGZuLlBFUkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklOQyIsIl94bGZuLlBFUk1VVEFUSU9OQSI6IlBFUk1VVEFUSU9OQSIsIl94bGZuLlBISSI6IlBISSIsIl94bGZuLlBPSVNTT04uRElTVCI6IlBPSVNTT04u''@;'; put 'put ''RElTVCIsIl94bGZuLlFVQVJUSUxFLkVYQyI6IlFVQVJUSUxFLkVYQyIsIl94bGZuLlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIsIl94bGZuLlFVRVJZU1RSSU5HIjoiUVVFUllTVFJJTkciLCJfeGxmbi5SQU5LLkFWRyI6IlJBTksuQVZHIiwiX3hsZm4uUkFOSy5FUSI6IlJBTksuRVEi''@;'; put 'put ''LCJfeGxmbi5SUkkiOiJSUkkiLCJfeGxmbi5TRUMiOiJTRUMiLCJfeGxmbi5TRUNIIjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQiLCJfeGxmbi5TSEVFVFMiOiJTSEVFVFMiLCJfeGxmbi5TS0VXLlAiOiJTS0VXLlAiLCJfeGxmbi5TVERFVi5QIjoiU1RERVYuUCIsIl94bGZuLlNUREVW''@;'; put 'put ''LlMiOiJTVERFVi5TIiwiX3hsZm4uU1VNSUZTIjoiU1VNSUZTIiwiX3hsZm4uU1dJVENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoiVC5ESVNUIiwiX3hsZm4uVC5ESVNULjJUIjoiVC5ESVNULjJUIiwiX3hsZm4uVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiX3hsZm4uVC5JTlYiOiJULklO''@;'; put 'put ''ViIsIl94bGZuLlQuSU5WLjJUIjoiVC5JTlYuMlQiLCJfeGxmbi5ULlRFU1QiOiJULlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRKT0lOIiwiX3hsZm4uVU5JQ0hBUiI6IlVOSUNIQVIiLCJfeGxmbi5VTklDT0RFIjoiVU5JQ09ERSIsIl94bGZuLlZBUi5QIjoiVkFSLlAiLCJfeGxmbi5W''@;'; put 'put ''QVIuUyI6IlZBUi5TIiwiX3hsZm4uV0VCU0VSVklDRSI6IldFQlNFUlZJQ0UiLCJfeGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJU1QiLCJfeGxmbi5XT1JLREFZLklOVEwiOiJXT1JLREFZLklOVEwiLCJfeGxmbi5YT1IiOiJYT1IiLCJfeGxmbi5aLlRFU1QiOiJaLlRFU1QifTtmdW5j''@;'; put 'put ''dGlvbiBpUyhTKXtyZXR1cm4ib2Y6Ij09Uy5zbGljZSgwLDMpJiYoUz1TLnNsaWNlKDMpKSw2MT09Uy5jaGFyQ29kZUF0KDApJiY2MT09KFM9Uy5zbGljZSgxKSkuY2hhckNvZGVBdCgwKSYmKFM9Uy5zbGljZSgxKSksKFM9KFM9KFM9Uy5yZXBsYWNlKC9DT01cLk1JQ1JPU09GVFwuL2csIiIp''@;'; put 'put ''KS5yZXBsYWNlKC9cWygoPzpcLltBLVpdK1swLTldKykoPzo6XC5bQS1aXStbMC05XSspPylcXS9nLGZ1bmN0aW9uKFIsayl7cmV0dXJuIGsucmVwbGFjZSgvXC4vZywiIil9KSkucmVwbGFjZSgvXFsuKCNbQS1aXSpbPyFdKVxdL2csIiQxIikpLnJlcGxhY2UoL1s7fl0vZywiLCIpLnJlcGxh''@;'; put 'put ''Y2UoL1x8L2csIjsiKX1mdW5jdGlvbiBaNChTKXtyZXR1cm4oIm9mOj0iK1MucmVwbGFjZShtMiwiJDFbLiQyJDMkNCQ1XSIpLnJlcGxhY2UoL1xdOlxbL2csIjoiKSkucmVwbGFjZSgvOy9nLCJ8IikucmVwbGFjZSgvLC9nLCI7Iil9ZnVuY3Rpb24gb2IoUyl7dmFyIFI9Uy5zcGxpdCgiOiIp''@;'; put 'put ''O3JldHVybltSWzBdLnNwbGl0KCIuIilbMF0sUlswXS5zcGxpdCgiLiIpWzFdKyhSLmxlbmd0aD4xPyI6IisoUlsxXS5zcGxpdCgiLiIpWzFdfHxSWzFdLnNwbGl0KCIuIilbMF0pOiIiKV19ZnVuY3Rpb24gZ0QoUyl7cmV0dXJuIFMucmVwbGFjZSgvXC4vLCIhIil9dmFyIGw4PXt9LGM4PXt9''@;'; put 'put ''O0thLldTPVsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdO3ZhciBxMz10''@;'; put 'put ''eXBlb2YgTWFwPCJ1IjtmdW5jdGlvbiBhUyhTLFIsayxHKXt2YXIgUT0wLG9lPVMubGVuZ3RoO2lmKEcpe2lmKHEzP0cuaGFzKFIpOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHLFIpKWZvcih2YXIgZ2U9cTM/Ry5nZXQoUik6R1tSXTtRPGdlLmxlbmd0aDsrK1EpaWYo''@;'; put 'put ''U1tnZVtRXV0udD09PVImJighU1tnZVtRXV0uciYmIWt8fFNbZ2VbUV1dLnI9PWspKXJldHVybiBTLkNvdW50KyssZ2VbUV19ZWxzZSBmb3IoO1E8b2U7KytRKWlmKFNbUV0udD09PVImJighU1tRXS5yJiYha3x8U1tRXS5yPT1rKSlyZXR1cm4gUy5Db3VudCsrLFE7cmV0dXJuIFNbb2VdPXt0''@;'; put 'put ''OlIscjprfSxTLkNvdW50KyssUy5VbmlxdWUrKyxHJiYocTM/KEcuaGFzKFIpfHxHLnNldChSLFtdKSxHLmdldChSKS5wdXNoKG9lKSk6KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHLFIpfHwoR1tSXT1bXSksR1tSXS5wdXNoKG9lKSkpLG9lfWZ1bmN0aW9uIHU4KFMs''@;'; put 'put ''Uil7dmFyIGs9e21pbjpTKzEsbWF4OlMrMX0sRz1UYztpZighUilyZXR1cm4gUjt2YXIgUT0tMTtyZXR1cm4gUi5hdXRvJiYoay5iZXN0Rml0PTEsUi5iZXN0d2lkdGgmJihRPVIuYmVzdHdpZHRoKSxkZWxldGUgUi5iZXN0d2lkdGgpLG51bGwhPVIud3B4P1E9eDUoUi53cHgpOm51bGwhPVIu''@;'; put 'put ''d2NoP1E9Ui53Y2g6bnVsbCE9Ui53aWR0aCYmKGsuY3VzdG9tV2lkdGg9MSksUT4tMT8oay53aWR0aD1rZihRKSxrLmN1c3RvbVdpZHRoPTEpOm51bGwhPVIud2lkdGgmJihrLndpZHRoPVIud2lkdGgpLFIuaGlkZGVuJiYoay5oaWRkZW49ITApLGsuYmVzdEZpdCYmZGVsZXRlIGsuY3VzdG9t''@;'; put 'put ''V2lkdGgsVGM9RyxudWxsIT1SLmxldmVsJiYoay5vdXRsaW5lTGV2ZWw9ay5sZXZlbD1SLmxldmVsKSxudWxsIT1SLnN0eWxlJiYoay5zdHlsZT1SLnN0eWxlKSxrfWZ1bmN0aW9uIG9TKFMsUixrKXt2YXIgRz1NcyhTWyIhcmVmIl0pLFE9MCxvZT1TWyIhbWVyZ2VzIl18fFtdLGdlPUFycmF5''@;'; put 'put ''LmlzQXJyYXkoUyk7ZTpmb3IodmFyIHBlPTA7cGU8PUcuZS5yOysrcGUpe2Zvcih2YXIgeWU9MDt5ZTxvZS5sZW5ndGg7Kyt5ZSlpZihvZVt5ZV0ucy5yPD1wZSYmcGU8PW9lW3llXS5lLnImJm9lW3llXS5zLmM8PWsmJms8PW9lW3llXS5lLmMpY29udGludWUgZTt2YXIgUGU9Z2U/KFNbcGVd''@;'; put 'put ''fHxbXSlba106U1txaSh7cjpwZSxjOmt9KV07aWYoUGUpe3ZhciBOZT0xO2lmKFBlLnMmJihOZT15QyhQZS5zKS9iQy5DYWxpYnJpWzEyXXx8MSksUGUudylRPU1hdGgubWF4KFEsUGUudy5sZW5ndGgqTmUpO2Vsc2Ugc3dpdGNoKFBlLnQpe2Nhc2UiYiI6Y2FzZSJlIjpRPU1hdGgubWF4KFEs''@;'; put 'put ''NSpOZSk7YnJlYWs7Y2FzZSJzIjpRPU1hdGgubWF4KFEsUGUudi5sZW5ndGgqTmUqMS4yfDApO2JyZWFrO2Nhc2UibiI6YTUoUGUsUGUudiksUT1NYXRoLm1heChRLFN0cmluZyhQZS53fHxQZS52KS5sZW5ndGgqTmUpO2JyZWFrO2Nhc2UiZCI6UT1NYXRoLm1heChRLDgqTmUpfX19UTwxJiYo''@;'; put 'put ''UT0xKSxSLmJlc3R3aWR0aD1RfWZ1bmN0aW9uIFgzKFMsUil7aWYoUyl7dmFyIGs9Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09UiYmKGs9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1TLmxlZnQmJihTLmxlZnQ9a1swXSksbnVsbD09Uy5yaWdodCYmKFMucmlnaHQ9a1sxXSksbnVsbD09''@;'; put 'put ''Uy50b3AmJihTLnRvcD1rWzJdKSxudWxsPT1TLmJvdHRvbSYmKFMuYm90dG9tPWtbM10pLG51bGw9PVMuaGVhZGVyJiYoUy5oZWFkZXI9a1s0XSksbnVsbD09Uy5mb290ZXImJihTLmZvb3Rlcj1rWzVdKX19ZnVuY3Rpb24gbFMoUyxSKXtmb3IodmFyIGs9T2UoUiksRz0wO0c8Uy5sZW5ndGg7''@;'; put 'put ''KytHKXt2YXIgUT0hMCxvZT1TW0ddO2lmKG9lJiZrLmxlbmd0aD09T2Uob2UpLmxlbmd0aCYmKGsuZm9yRWFjaChmdW5jdGlvbihnZSl7aWYoUSl7aWYobnVsbD09PVJbZ2VdIT0obnVsbD09PW9lW2dlXSkpcmV0dXJuIHZvaWQoUT0hMSk7aWYoIm9iamVjdCI9PXR5cGVvZiBSW2dlXSlpZihb''@;'; put 'put ''ImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5pbmRleE9mKGdlKT4tMSl7aWYob2goUltnZV0sb2VbZ2VdKSlyZXR1cm4gdm9pZChRPSExKX1lbHNle2lmKCEoWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXS5pbmRleE9mKGdlKT4tMSkpcmV0dXJuIHZvaWQoUT0hMSk7aWYoaGso''@;'; put 'put ''UltnZV0sb2VbZ2VdKSlyZXR1cm4gdm9pZChRPSExKX1pZihSW2dlXSE9b2VbZ2VdKXJldHVybiB2b2lkKFE9ITEpfX0pLFEpKXJldHVybiBHfXJldHVybiBTW1MubGVuZ3RoXT1xdChSKSxTLmxlbmd0aC0xfWZ1bmN0aW9uIGwwKFMsUixrLEcpe3ZhciBRPUcucmV2c3NmW251bGwhPWsuej9r''@;'; put 'put ''Lno6IkdlbmVyYWwiXSxvZT02MCxnZT1TLmxlbmd0aDtpZihudWxsPT1RJiZHLnNzZilmb3IoO29lPDM5MjsrK29lKWlmKG51bGw9PUcuc3NmW29lXSl7QS5sb2FkKGsueixvZSksRy5zc2Zbb2VdPWsueixHLnJldnNzZltrLnpdPVE9b2U7YnJlYWt9dmFyIHBlPTAseWU9MCxQZT0wLE5lPTA7''@;'; put 'put ''aWYoRy5jZWxsU3R5bGVzKXtpZihrLnMpe2lmKEcuRm9udHMpe2sucy5jb2xvcnx8KGsucy5jb2xvcj17dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9KTtmb3IodmFyIFllPShrLnMuYm9sZD8xOjApfChrLnMuaXRhbGljPzI6MCl8KGsucy5zdHJpa2U/NDowKXwoay5zLnNoYWRvdz84OjApO3BlPEcu''@;'; put 'put ''Rm9udHMubGVuZ3RoOysrcGUpe3ZhciBldD1HLkZvbnRzW3BlXTtpZihudWxsPT1ldC5mb250aGFzaCYmKGV0LmZvbnRoYXNoPShldC5ib2xkPzE6MCl8KGV0Lml0YWxpYz8yOjApfChldC5zdHJpa2U/NDowKXwoZXQuc2hhZG93Pzg6MCkpLCEoWWUhPWV0LmZvbnRoYXNofHwhIWsucy5jb2xv''@;'; put 'put ''ciE9ISFldC5jb2xvcnx8ay5zLnZhbGlnbiE9ZXQudmFsaWdufHwoay5zLnN6fHxldC5zeikmJihrLnMuc3p8fDEyKSE9KGV0LnN6fHwxMil8fGsucy5uYW1lJiZrLnMubmFtZSE9ZXQubmFtZXx8KGsucy51bmRlcmxpbmV8fDApIT0oZXQudW5kZXJsaW5lfHwwKXx8ay5zLmNvbG9yJiZvaChr''@;'; put 'put ''LnMuY29sb3IsZXQuY29sb3IpKSlicmVha31wZT09Ry5Gb250cy5sZW5ndGgmJihHLkZvbnRzLnB1c2goe3N6Omsucy5zenx8MTIsY29sb3I6ay5zLmNvbG9yfHx7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6ay5zLm5hbWV8fCJDYWxpYnJpIixmYW1pbHk6ay5zLmZhbWlseXx8MixzY2hl''@;'; put 'put ''bWU6ay5zLnNjaGVtZSxib2xkOmsucy5ib2xkLGl0YWxpYzprLnMuaXRhbGljLHN0cmlrZTprLnMuc3RyaWtlLHNoYWRvdzprLnMuc2hhZG93LHZhbGlnbjprLnMudmFsaWduLHVuZGVybGluZTprLnMudW5kZXJsaW5lfSksMT09Ry5Gb250cy5sZW5ndGgmJkk0KEcuRm9udHNbMF0pKX1pZihH''@;'; put 'put ''LkZpbGxzKXtmb3IoO3llPEcuRmlsbHMubGVuZ3RoOysreWUpe3ZhciBjdD1HLkZpbGxzW3llXTtpZighIWsucy5zdG9wcz09ISFjdC5zdG9wcyl7aWYoay5zLnN0b3BzKXtpZihrLnMuYW5nbGUhPWN0LmFuZ2xlKWNvbnRpbnVlO3ZhciBFdD0hMDtpZihrLnMuc3RvcHMuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihrdCxPdCl7b2goa3QsY3Quc3RvcHNbT3RdKSYmKEV0PSExKSxrdC52IT1jdC5zdG9wc1tPdF0udiYmKEV0PSExKX0pLCFFdCljb250aW51ZX1lbHNle2lmKG51bGw9PWsucy5wYXR0ZXJuVHlwZSYmay5zLmZnQ29sb3ImJihrLnMucGF0dGVyblR5cGU9InNvbGlkIiksbnVsbD09ay5z''@;'; put 'put ''LnBhdHRlcm5UeXBlKWJyZWFrO2lmKGsucy5wYXR0ZXJuVHlwZSE9Y3QucGF0dGVyblR5cGV8fG9oKGsucy5mZ0NvbG9yLGN0LmZnQ29sb3IpfHxvaChrLnMuYmdDb2xvcixjdC5iZ0NvbG9yKSljb250aW51ZX1icmVha319aWYoeWU9PUcuRmlsbHMubGVuZ3RoKXt2YXIgYXQ9e307ay5zLnN0''@;'; put 'put ''b3BzPyhudWxsIT1rLnMuYW5nbGUmJihhdC5hbmdsZT1rLnMuYW5nbGUpLGF0LnN0b3BzPVtdLGsucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0KXthdC5zdG9wcy5wdXNoKHF0KGt0KSl9KSk6YXQ9e3BhdHRlcm5UeXBlOmsucy5wYXR0ZXJuVHlwZSxmZ0NvbG9yOmsucy5mZ0NvbG9yLGJn''@;'; put 'put ''Q29sb3I6ay5zLmJnQ29sb3J9LEcuRmlsbHMucHVzaChhdCl9fWlmKEcuQm9yZGVycyl7Zm9yKDtQZTxHLkJvcmRlcnMubGVuZ3RoOysrUGUpe3ZhciBidD1HLkJvcmRlcnNbUGVdLGp0PSJ0b3AiO2lmKGsuc1tqdF0pe2lmKCFidFtqdF18fGsuc1tqdF0uc3R5bGUhPWJ0W2p0XS5zdHlsZXx8''@;'; put 'put ''b2goay5zW2p0XS5jb2xvcixidFtqdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbanRdKWNvbnRpbnVlO2lmKGsuc1tqdD0iYm90dG9tIl0pe2lmKCFidFtqdF18fGsuc1tqdF0uc3R5bGUhPWJ0W2p0XS5zdHlsZXx8b2goay5zW2p0XS5jb2xvcixidFtqdF0uY29sb3IpKWNv''@;'; put 'put ''bnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbanRdKWNvbnRpbnVlO2lmKGsuc1tqdD0ibGVmdCJdKXtpZighYnRbanRdfHxrLnNbanRdLnN0eWxlIT1idFtqdF0uc3R5bGV8fG9oKGsuc1tqdF0uY29sb3IsYnRbanRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W2p0XSljb250aW51''@;'; put 'put ''ZTtpZihrLnNbanQ9InJpZ2h0Il0pe2lmKCFidFtqdF18fGsuc1tqdF0uc3R5bGUhPWJ0W2p0XS5zdHlsZXx8b2goay5zW2p0XS5jb2xvcixidFtqdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbanRdKWNvbnRpbnVlO2JyZWFrfVBlPT1HLkJvcmRlcnMubGVuZ3RoJiZHLkJv''@;'; put 'put ''cmRlcnMucHVzaCh7dG9wOmsucy50b3AmJnF0KGsucy50b3ApfHx2b2lkIDAsYm90dG9tOmsucy5ib3R0b20mJnF0KGsucy5ib3R0b20pfHx2b2lkIDAsbGVmdDprLnMubGVmdCYmcXQoay5zLmxlZnQpfHx2b2lkIDAscmlnaHQ6ay5zLnJpZ2h0JiZxdChrLnMucmlnaHQpfHx2b2lkIDB9KX1p''@;'; put 'put ''ZihSJiZrLnMuc3R5bGUmJiJOb3JtYWwiIT09ay5zLnN0eWxlKXtmb3IoTmU9MTtOZTxSLmxlbmd0aCYmUltOZV0ubmFtZSE9ay5zLnN0eWxlOysrTmUpO05lPT1SLmxlbmd0aCYmUi5wdXNoKHtuYW1lOmsucy5zdHlsZSxudW1GbXRJZDpRLGZvbnRJZDpwZSxmaWxsSWQ6eWUsYm9yZGVySWQ6''@;'; put 'put ''UGV9KX19Zm9yKG9lPTA7b2UhPWdlOysrb2UpaWYoU1tvZV0ubnVtRm10SWQ9PVEmJlNbb2VdLmZvbnRJZD09cGUmJlNbb2VdLmZpbGxJZD09eWUmJlNbb2VdLmJvcmRlcklkPT1QZSYmU1tvZV0ueGZJZD09TmUpe2lmKGsucyYmay5zLmFsaWdubWVudCl7aWYoIVNbb2VdLmFsaWdubWVudClj''@;'; put 'put ''b250aW51ZTtpZihrLnMuYWxpZ25tZW50Lmhvcml6b250YWwhPVNbb2VdLmFsaWdubWVudC5ob3Jpem9udGFsfHxrLnMuYWxpZ25tZW50LnZlcnRpY2FsIT1TW29lXS5hbGlnbm1lbnQudmVydGljYWx8fGsucy5hbGlnbm1lbnQud3JhcFRleHQhPVNbb2VdLmFsaWdubWVudC53cmFwVGV4dHx8''@;'; put 'put ''ay5zLmFsaWdubWVudC5zaHJpbmtUb0ZpdCE9U1tvZV0uYWxpZ25tZW50LnNocmlua1RvRml0fHxrLnMuYWxpZ25tZW50LnRleHRSb3RhdGlvbiE9U1tvZV0uYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8ay5zLmFsaWdubWVudC5pbmRlbnQhPVNbb2VdLmFsaWdubWVudC5pbmRlbnQpY29udGlu''@;'; put 'put ''dWV9ZWxzZSBpZihTW29lXS5hbGlnbm1lbnQpY29udGludWU7aWYoay5zKXtpZighIWsucy5oaWRkZW49PSghU1tvZV0ucHJvdGVjdGlvbnx8IVNbb2VdLnByb3RlY3Rpb24uaGlkZGVuKXx8ISFrLnMuZWRpdGFibGU9PSghU1tvZV0ucHJvdGVjdGlvbnx8IVNbb2VdLnByb3RlY3Rpb24uZWRp''@;'; put 'put ''dGFibGUpKWNvbnRpbnVlfWVsc2UgaWYoU1tvZV0ucHJvdGVjdGlvbiljb250aW51ZTtyZXR1cm4gb2V9fWVsc2UgZm9yKG9lPTA7b2UhPWdlOysrb2UpaWYoU1tvZV0ubnVtRm10SWQ9PT1RKXJldHVybiBvZTtyZXR1cm4gU1tnZV09e251bUZtdElkOlEsZm9udElkOnBlLGZpbGxJZDp5ZSxi''@;'; put 'put ''b3JkZXJJZDpQZSx4ZklkOk5lLGFwcGx5TnVtYmVyRm9ybWF0OjF9LHBlPjAmJihTW2dlXS5hcHBseUZvbnQ9MSkseWU+MCYmKFNbZ2VdLmFwcGx5RmlsbD0xKSxQZT4wJiYoU1tnZV0uYXBwbHlCb3JkZXI9MSksIVImJmsucyYmay5zLnN0eWxlJiYiTm9ybWFsIiE9ay5zLnN0eWxlJiYoU1tn''@;'; put 'put ''ZV0uc3R5bGU9ay5zLnN0eWxlKSxrLnMmJmsucy5hbGlnbm1lbnQmJihTW2dlXS5hbGlnbm1lbnQ9e30sWyJob3Jpem9udGFsIiwidmVydGljYWwiLCJ3cmFwVGV4dCIsInNocmlua1RvRml0IiwiaW5kZW50IiwidGV4dFJvdGF0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihrdCl7bnVsbCE9ay5z''@;'; put 'put ''LmFsaWdubWVudFtrdF0mJihTW2dlXS5hbGlnbm1lbnRba3RdPWsucy5hbGlnbm1lbnRba3RdKX0pKSxrLnMmJmsucy5oaWRkZW4mJihTW2dlXS5wcm90ZWN0aW9ufHwoU1tnZV0ucHJvdGVjdGlvbj17fSksU1tnZV0ucHJvdGVjdGlvbi5oaWRkZW49ITApLGsucyYmay5zLmVkaXRhYmxlJiYo''@;'; put 'put ''U1tnZV0ucHJvdGVjdGlvbnx8KFNbZ2VdLnByb3RlY3Rpb249e30pLFNbZ2VdLnByb3RlY3Rpb24uZWRpdGFibGU9ITApLGdlfWZ1bmN0aW9uIEozKFMsUixrLEcsUSxvZSxnZSxwZSl7ImQiPT09Uy50JiYic3RyaW5nIj09dHlwZW9mIFMudiYmKFMudj1IZShTLnYpKTt0cnl7b2UuY2VsbE5G''@;'; put 'put ''JiYoUy56PUEuX3RhYmxlW1JdKX1jYXRjaChQZSl7aWYob2UuV1RGKXRocm93IFBlfWlmKCghb2V8fCExIT09b2UuY2VsbFRleHQpJiYieiIhPVMudCl0cnl7aWYobnVsbD09QS5fdGFibGVbUl0mJkEubG9hZChzZVtSXXx8IkdlbmVyYWwiLFIpLCJlIj09PVMudClTLnc9Uy53fHxNY1tTLnZd''@;'; put 'put ''O2Vsc2UgaWYoMD09PVIpaWYoIm4iPT09Uy50KVMudz0oMHxTLnYpPT09Uy52P0EuX2dlbmVyYWxfaW50KFMudik6QS5fZ2VuZXJhbF9udW0oUy52KTtlbHNlIGlmKCJkIj09PVMudCl7dmFyIHllPVFlKFMudik7Uy53PSgwfHllKT09PXllP0EuX2dlbmVyYWxfaW50KHllKTpBLl9nZW5lcmFs''@;'; put 'put ''X251bSh5ZSl9ZWxzZXtpZih2b2lkIDA9PT1TLnYpcmV0dXJuIiI7Uy53PUEuX2dlbmVyYWwoUy52LGM4KX1lbHNlIFMudz1BLmZvcm1hdChSLCJkIj09PVMudD9RZShTLnYpOlMudixjOCl9Y2F0Y2goUGUpe2lmKG9lLldURil0aHJvdyBQZX1pZihvZS5jZWxsU3R5bGVzJiZwZSl7aWYoUy5z''@;'; put 'put ''PXt9LG51bGwhPWsmJnBlLkZpbGxzKXRyeXtQdChTLnMscGUuRmlsbHNba10pfWNhdGNoKFBlKXtpZihvZS5XVEYpdGhyb3cgUGV9aWYobnVsbCE9RyYmcGUuRm9udHMpdHJ5e1B0KFMucyxwZS5Gb250c1tHXSl9Y2F0Y2goUGUpe2lmKG9lLldURil0aHJvdyBQZX1pZihudWxsIT1RJiZwZS5C''@;'; put 'put ''b3JkZXJzKXRyeXtQdChTLnMscGUuQm9yZGVyc1tRXSl9Y2F0Y2goUGUpe2lmKG9lLldURil0aHJvdyBQZX19fWZ1bmN0aW9uIG1EKFMsUixrKXtpZihTJiZTWyIhcmVmIl0pe3ZhciBHPW9vKFNbIiFyZWYiXSk7aWYoRy5lLmM8Ry5zLmN8fEcuZS5yPEcucy5yKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''QmFkIHJhbmdlICgiK2srIik6ICIrU1siIXJlZiJdKX19dmFyIGQ4PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLHZEPS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sdVM9LzwoPzpcdzopP2h5''@;'; put 'put ''cGVybGluayBbXj5dKj4vZ20sc2I9LyIoXHcqOlx3KikiLyx0aj0vPCg/Olx3Oik/Y29sXGJbXj5dKltcL10/Pi9nLGJEPS88KD86XHc6KT9jb250cm9sXGJbXj5dKltcL10/Pi9nLG5qPS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmls''@;'; put 'put ''dGVyKT4vZyx5RD0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLF9EPS88KD86XHc6KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8sd0Q9LzwoPzpcdzopP3NoZWV0UHJvdGVjdGlvblxiKD86W14+YS16XVtePl0qKT9cLz4vLENEPS88KD86XHc6KT9zaGVldFByW14+XSoo''@;'; put 'put ''PzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0UHIpPi8sUm89LzwoPzpcdzopP3NoZWV0Vmlld3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRWaWV3cyk+LyxmZT0vPCg/Olx3KzopP2RhdGFWYWxpZGF0aW9uc1tePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxc''@;'; put 'put ''Lyg/Olx3KzopP2RhdGFWYWxpZGF0aW9ucyk+LyxkUz0vPCg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZ1xiW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nKT4vZyxHZT0vPCg/Olx3Oik/c2hlZXRGb3JtYXRQcltePl0qXC8+LyxT''@;'; put 'put ''RD0vPCg/Olx3KzopP3RhYmxlUGFydHMuKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3RhYmxlUGFydHM+LyxNRD0vPCg/Olx3Oik/cGFnZVNldHVwW14+XSpcLz4vLHJqPS88KD86XHc6KT9yb3dCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/cm93QnJlYWtzKT4vLGxi''@;'; put 'put ''PS88KD86XHc6KT9jb2xCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/Y29sQnJlYWtzKT4vLGo1PS88KD86XHc6KT9oZWFkZXJGb290ZXJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/aGVhZGVyRm9vdGVyKT4vLGhTPS88KD86XHc6KT9wcmludE9wdGlv''@;'; put 'put ''bnNcYltePlwvXSpcLz4vO3ZhciBmUz0vPCg/Olx3Oik/dGFibGVQYXJ0XGJbXlwvPl0qW1wvXT8+L2c7ZnVuY3Rpb24gY2IoUyxSLGssRyl7dmFyIFE9dnIoUyk7ay5TaGVldHNbR118fChrLlNoZWV0c1tHXT17fSksUS5jb2RlTmFtZSYmKGsuU2hlZXRzW0ddLkNvZGVOYW1lPVEuY29kZU5h''@;'; put 'put ''bWUpfXZhciBtUz0vPCg/Olx3Oik/dGFiQ29sb3JbXj5dKltcL10/Pi8saWo9LzwoPzpcdzopP3BhZ2VTZXRVcFByW14+XSpbXC9dPz4vLGFqPS88KD86XHc6KT9vdXRsaW5lUHJbXj5dKltcL10/Pi8sVEQ9e2Rpc3BsYXllZDoiYXNEaXNwbGF5ZWQiLGVuZDoiYXRFbmQiLG5vbmU6Im5vbmUi''@;'; put 'put ''fSxBRD1WZShURCksa0Q9e2Rpc3BsYXllZDoiZGlzcGxheWVkIixub25lOiJibGFuayIsZGFzaDoiZGFzaCIsIm4vYSI6Ik5BIn0sREQ9VmUoa0QpLEYwPS88KD86XHc6KT9icmtbXj5dKlwvPi9nLGJTPVsib2JqZWN0cyIsInNjZW5hcmlvcyIsInNlbGVjdExvY2tlZENlbGxzIiwic2VsZWN0''@;'; put 'put ''VW5sb2NrZWRDZWxscyJdLExEPVsiZm9ybWF0Q29sdW1ucyIsImZvcm1hdFJvd3MiLCJmb3JtYXRDZWxscyIsImluc2VydENvbHVtbnMiLCJpbnNlcnRSb3dzIiwiaW5zZXJ0SHlwZXJsaW5rcyIsImRlbGV0ZUNvbHVtbnMiLCJkZWxldGVSb3dzIiwic29ydCIsImF1dG9GaWx0ZXIiLCJwaXZv''@;'; put 'put ''dFRhYmxlcyJdO2Z1bmN0aW9uIFBEKFMpe3ZhciBSPXt9O3JldHVyblsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihrKXtTW2tdJiYoUltrXT1wYXJzZUZsb2F0KFNba10pKX0pLFJ9dmFyIHVoPXtDdXN0b206ImN1c3Rv''@;'; put 'put ''bSIsRGF0ZToiZGF0ZSIsVGltZToidGltZSIsTGVuZ3RoOiJ0ZXh0TGVuZ3RoIixMaXN0OiJsaXN0IixEZWNpbWFsOiJkZWNpbWFsIixXaG9sZToid2hvbGUiLEFueToibm9uZSJ9LF9TPVZlKHVoKSx1Yj17SU46ImJldHdlZW4iLE9UOiJub3RCZXR3ZWVuIixFUToiZXF1YWwiLE5FOiJub3RF''@;'; put 'put ''cXVhbCIsR1Q6ImdyZWF0ZXJUaGFuIixMVDoibGVzc1RoYW4iLEdFOiJncmVhdGVyVGhhbk9yRXF1YWwiLExFOiJsZXNzVGhhbk9yRXF1YWwifSxGRD1WZSh1Yik7ZnVuY3Rpb24gd1MoUyxSLGspe3ZhciBHPVtdLFE9e30sb2U9IiIsZ2U9ITEscGU9MCx5ZT0wO3JldHVybiBTLnJlcGxhY2Uo''@;'; put 'put ''ZW4sZnVuY3Rpb24oUGUsTmUpe3ZhciBZZT12cihQZSk7c3dpdGNoKFduKFllWzBdKSl7Y2FzZSI8ZGF0YVZhbGlkYXRpb25zIjpjYXNlIjxkYXRhVmFsaWRhdGlvbnM+IjpjYXNlIjwvZGF0YVZhbGlkYXRpb25zPiI6YnJlYWs7Y2FzZSI8ZGF0YVZhbGlkYXRpb24iOlE9e3Q6X1NbWWUudHlw''@;'; put 'put ''ZXx8Im5vbmUiXSxyZWY6KG9lPVllLnNxcmVmKT9vZS5pbmRleE9mKCIgIik+LTE/b2U6b28ob2UpOiIifSxZZS5vcGVyYXRvciYmKFEub3A9RkRbWWUub3BlcmF0b3JdKSxRLmJsYW5rPSEhWWUuYWxsb3dCbGFuayYmdGkoWWUuYWxsb3dCbGFuayksKCFZZS5zaG93SW5wdXRNZXNzYWdlfHwh''@;'; put 'put ''dGkoWWUuc2hvd0lucHV0TWVzc2FnZSkpJiYoUS5pbnB1dD0hMSksWWUucHJvbXB0VGl0bGUmJigoUS5pbnB1dHx8KFEuaW5wdXQ9e30pKS50aXRsZT1RcihZZS5wcm9tcHRUaXRsZSkpLFllLnByb21wdCYmKChRLmlucHV0fHwoUS5pbnB1dD17fSkpLm1lc3NhZ2U9UXIoWWUucHJvbXB0KSks''@;'; put 'put ''KCFZZS5zaG93RXJyb3JNZXNzYWdlfHwhdGkoWWUuc2hvd0Vycm9yTWVzc2FnZSkpJiYoUS5lcnJvcj0hMSksWWUuZXJyb3JUaXRsZSYmKChRLmVycm9yfHwoUS5lcnJvcj17fSkpLnRpdGxlPVFyKFllLmVycm9yVGl0bGUpKSxZZS5lcnJvciYmKChRLmVycm9yfHwoUS5lcnJvcj17fSkpLm1l''@;'; put 'put ''c3NhZ2U9UXIoWWUuZXJyb3IpKSxRLmVycm9yP1EuZXJyb3Iuc3R5bGU9WWUuZXJyb3JTdHlsZXx8InN0b3AiOlllLmVycm9yU3R5bGUmJihRLmVycm9yPXtzdHlsZTpZZS5lcnJvclN0eWxlfSksUS50JiZHLnB1c2goUSk7YnJlYWs7Y2FzZSI8ZGF0YVZhbGlkYXRpb24vPiI6Y2FzZSI8L2Rh''@;'; put 'put ''dGFWYWxpZGF0aW9uPiI6YnJlYWs7Y2FzZSI8c3FyZWY+Ijp5ZT1OZStQZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6b2U9Uy5zbGljZSh5ZSxOZSksUS5yZWY9b2U/b2UuaW5kZXhPZigiICIpPi0xP29lOm9vKG9lKToiIjticmVhaztjYXNlIjxmPiI6Y2FzZSI8Zm9ybXVsYTEiOmNh''@;'; put 'put ''c2UiPGZvcm11bGExPiI6Y2FzZSI8Zm9ybXVsYTIiOmNhc2UiPGZvcm11bGEyPiI6cGU9TmUrUGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mb3JtdWxhMT4iOmNhc2UiPC9mb3JtdWxhMj4iOmlmKGspYnJlYWs7Y2FzZSI8L2Y+Ijp2YXIgZXQ9UXIoZ28oUy5zbGljZShwZSxOZSkpKTtzd2l0Y2go''@;'; put 'put ''US50KXtjYXNlIkxpc3QiOmlmKFEubHx8US5mKWJyZWFrO2lmKDM0PT1ldC5jaGFyQ29kZUF0KDApKXtRLmw9ZXQuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6bnVsbD09US5mJiYoUS5mPWV0KTticmVhaztjYXNlIkRhdGUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJM''@;'; put 'put ''ZW5ndGgiOmNhc2UiVGltZSI6Y2FzZSJXaG9sZSI6US5vcHx8KFEub3A9IklOIiksbnVsbD09US52P1Eudj1pc05hTigrZXQpP2V0OitldDooUS5taW49US52LFEubWF4PWlzTmFOKCtldCk/ZXQ6K2V0LGRlbGV0ZSBRLnYpfWJyZWFrO2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2Fz''@;'; put 'put ''ZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6Z2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoUiYmUi5XVEYmJiFnZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK1llWzBdKyIgaW4gZGF0YSB2YWxpZGF0aW9uIil9cmV0dXJuIFBlfSks''@;'; put 'put ''R312YXIgZjg9e0lOOiJjb250YWluc1RleHQiLE9UOiJub3RDb250YWluc1RleHQiLFNUOiJiZWdpbnNXaXRoIixORDoiZW5kc1dpdGgifSxkYj1WZShmOCkseWo9e0xNOiJsYXN0TW9udGgiLExTOiJsYXN0N0RheXMiLExXOiJsYXN0V2VlayIsTk06Im5leHRNb250aCIsTlc6Im5leHRXZWVr''@;'; put 'put ''IixUTToidGhpc01vbnRoIixUVzoidGhpc1dlZWsiLFREOiJ0b2RheSIsVE86InRvbW9ycm93IixZUzoieWVzdGVyZGF5In0sTkQ9VmUoeWopO2Z1bmN0aW9uIHA4KFMpe3ZhciBSPXt9O3JldHVybiBudWxsIT1TLnZhbCYmKGlzTmFOKCtTLnZhbCk/Ui5mPVMudmFsOlIudj0rUy52YWwpLFIu''@;'; put 'put ''dD1TLnR5cGUsUn1mdW5jdGlvbiBXNChTKXtyZXR1cm4gUHIoImNmdm8iLG51bGwse3R5cGU6Uy50LHZhbDpudWxsIT1TLnY/Uy52OkxyKFMuZil9KX1mdW5jdGlvbiB6NShTLFIsayxHKXt2YXIgUT1wOChTKTtyZXR1cm4gUS5jb2xvcj1nayhSLGssRyksUX1mdW5jdGlvbiB2MihTLFIsayxH''@;'; put 'put ''LFEpe3ZhciBvZT0oUy5tYXRjaCgvc3FyZWY9IihbXHc6JCBdKikiLyl8fFtdKVsxXTtyZXR1cm4gZnVuY3Rpb24gQ1MoUyxSLGssRyxRLG9lKXt2YXIgZ2U9ITEscGU9W10seWU9e2Y6W119LFBlPTAsTmU9MCxZZT17Y2Z2b3M6W10sY29sb3JzOltdfSxldD17fSxjdD0tMSxFdD0wLGF0PSIi''@;'; put 'put ''O3JldHVybiBTLnJlcGxhY2UoZW4sZnVuY3Rpb24oYnQsanQpe3ZhciBrdD12cihidCk7c3dpdGNoKFduKGt0WzBdKSl7Y2FzZSI8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIjpjYXNlIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiI6YnJlYWs7Y2FzZSI8Y2ZSdWxlIjpjYXNlIjxjZlJ1bGU+Ijpp''@;'; put 'put ''ZihOZT1qdCxldD1rdCx5ZT17cmVmOlIsZjpbXX0sIWJ0Lm1hdGNoKC9cLz4vKSlicmVhaztjYXNlIjwvY2ZSdWxlPiI6c3dpdGNoKGV0LmR4ZklkJiZRJiZRLkRYRiYmKHllLnM9US5EWEZbK2V0LmR4ZklkXSksZXQudHlwZSl7Y2FzZSJkdXBsaWNhdGVWYWx1ZXMiOnllLnQ9ImR1cCI7YnJl''@;'; put 'put ''YWs7Y2FzZSJ1bmlxdWVWYWx1ZXMiOnllLnQ9InVuaXF1ZSI7YnJlYWs7Y2FzZSJjb250YWluc0JsYW5rcyI6eWUudD0iYmxhbmsiLHllLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0JsYW5rcyI6eWUudD0iYmxhbmsiLHllLnY9ITE7YnJlYWs7Y2FzZSJjb250YWluc0Vycm9ycyI6eWUu''@;'; put 'put ''dD0iZXJyb3IiLHllLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0Vycm9ycyI6eWUudD0iZXJyb3IiLHllLnY9ITE7YnJlYWs7Y2FzZSJjZWxsSXMiOnN3aXRjaChldC5vcGVyYXRvcil7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnMiOmNhc2UiYmVnaW5zV2l0aCI6Y2Fz''@;'; put 'put ''ZSJlbmRzV2l0aCI6aWYoeWUudD0idGV4dCIseWUub3A9ZGJbZXQub3BlcmF0b3JdLG51bGw9PWV0LnRleHQpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIit5ZS5vcCsiIG1pc3NpbmcgdGV4dCIpO3llLnY9ZXQudGV4dCx5ZS5mPXllLmZbMF0sbnVsbD09eWUuZiYmZGVsZXRlIHll''@;'; put 'put ''LmY7YnJlYWs7ZGVmYXVsdDp5ZS50PSJ2YWwiLHllLm9wPUZEW2V0Lm9wZXJhdG9yXSwxPT15ZS5mLmxlbmd0aD9pc05hTigreWUuZlswXSk/eWUuZj15ZS5mWzBdOih5ZS52PSt5ZS5mWzBdLGRlbGV0ZSB5ZS5mKTooeWUubWluPWlzTmFOKCt5ZS5mWzBdKT95ZS5mWzBdOit5ZS5mWzBdLHll''@;'; put 'put ''Lm1heD1pc05hTigreWUuZlsxXSk/eWUuZlsxXToreWUuZlsxXSxkZWxldGUgeWUuZil9YnJlYWs7Y2FzZSJleHByZXNzaW9uIjp5ZS50PSJmb3JtdWxhIix5ZS5mPXllLmZbMF07YnJlYWs7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnNUZXh0IjpjYXNlImJlZ2luc1dpdGgi''@;'; put 'put ''OmNhc2UiZW5kc1dpdGgiOmlmKHllLnQ9InRleHQiLHllLm9wPWRiW2V0LnR5cGVdLG51bGw9PWV0LnRleHQmJnllLmYubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIit5ZS5vcCsiIG1pc3NpbmcgdGV4dCIpO3llLnY9bnVsbCE9ZXQudGV4dD9ldC50ZXh0OnllLmZb''@;'; put 'put ''MV0ubWF0Y2goLyIuKiIvKT95ZS5mWzFdLnNsaWNlKDEsLTEpOnllLmZbMV0seWUuZj15ZS5mWzBdLG51bGw9PXllLmYmJmRlbGV0ZSB5ZS5mO2JyZWFrO2Nhc2UiY29sb3JTY2FsZSI6aWYoeWUudD0ic2NhbGUiLCF5ZS5jb2xvclNjYWxlKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBjb2xv''@;'; put 'put ''clNjYWxlIik7eWUuY21pbj16NSgoWWU9eWUuY29sb3JTY2FsZSkuY2Z2b3NbMF0sWWUuY29sb3JzWzBdLFEsRyksMz09WWUuY2Z2b3MubGVuZ3RoJiYoeWUuY21pZD16NShZZS5jZnZvc1sxXSxZZS5jb2xvcnNbMV0sUSxHKSkseWUuY21heD16NShZZS5jZnZvc1tZZS5jZnZvcy5sZW5ndGgt''@;'; put 'put ''MV0sWWUuY29sb3JzW1llLmNmdm9zLmxlbmd0aC0xXSxRLEcpO2JyZWFrO2Nhc2UiZGF0YUJhciI6aWYoeWUudD0iYmFyIiwheWUuZGF0YUJhcil0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgZGF0YUJhciIpOyhZZT15ZS5kYXRhQmFyKS5jb2xvcnNbMF0mJih5ZS5jb2xvcj1nayhZZS5jb2xv''@;'; put 'put ''cnNbMF0sUSxHKSkseWUuY21pbj1wOChZZS5jZnZvc1swXSkseWUuY21heD1wOChZZS5jZnZvc1sxXSk7YnJlYWs7Y2FzZSJpY29uU2V0IjppZih5ZS50PSJpY29uIiwheWUuaWNvblNldCl0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgaWNvblNldCIpO3llLnRocmVzaD0oWWU9eWUuaWNvblNl''@;'; put 'put ''dCkuY2Z2b3MubWFwKGZ1bmN0aW9uKE90KXtyZXR1cm4gcDgoT3QpfSkseWUudj1ZZS50YWcmJlllLnRhZy5pY29uU2V0fHwiM1RyYWZmaWNMaWdodHMxIix5ZS5yZXY9dGkoWWUudGFnLnJldmVyc2V8fCJmYWxzZSIpLHllLnBjdD10aShZZS50YWcucGVyY2VudHx8InRydWUiKSx5ZS5oaWRk''@;'; put 'put ''ZW49IXRpKFllLnRhZy5zaG93VmFsdWV8fCJ0cnVlIik7YnJlYWs7Y2FzZSJ0aW1lUGVyaW9kIjp5ZS50PSJkYXRlIix5ZS5vcD1ORFtldC50aW1lUGVyaW9kXTticmVhaztjYXNlImFib3ZlQXZlcmFnZSI6eWUudD0iYXZnIix5ZS5vcD0iMCI9PWV0LmFib3ZlQXZlcmFnZT8iTCI6IkciLHll''@;'; put 'put ''Lm9wKz1ldC5zdGREZXY/ZXQuc3RkRGV2OnRpKGV0LmVxdWFsQXZlcmFnZXx8IjAiKT8iRSI6IlQiO2JyZWFrO2Nhc2UidG9wMTAiOnllLnQ9InJhbmsiLHllLm9wPSh0aShldC5ib3R0b218fCIwIik/IkIiOiJUIikrKHRpKGV0LnBlcmNlbnR8fCIwIik/IlAiOiJWIikseWUudj0rZXQucmFu''@;'; put 'put ''azticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkIENGIFR5cGUgIitldC50eXBlfWlmKGRlbGV0ZSB5ZS5jb2xvclNjYWxlLGRlbGV0ZSB5ZS5kYXRhQmFyLGRlbGV0ZSB5ZS5pY29uU2V0LCF5ZS50KXRocm93IGNvbnNvbGUubG9nKFMuc2xpY2UoTmUsanQrYnQubGVuZ3RoKSksImJh''@;'; put 'put ''ZCBDRiBydWxlIjtudWxsIT15ZS5mJiYheWUuZi5sZW5ndGgmJmRlbGV0ZSB5ZS5mLHllLmRlbHx8cGUucHVzaCh5ZSk7YnJlYWs7Y2FzZSI8Zm9ybXVsYSI6Y2FzZSI8Zm9ybXVsYT4iOlBlPWp0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvZm9ybXVsYT4iOnllLmYucHVzaChRcihTLnNsaWNl''@;'; put 'put ''KFBlLGp0KSkpO2JyZWFrO2Nhc2UiPGYiOmNhc2UiPGY+IjpQZT1qdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Y+Ijp5ZS5mLnB1c2goUXIoUy5zbGljZShQZSxqdCkpKTticmVhaztjYXNlIjxzcXJlZj4iOkV0PWp0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+IjphdD1TLnNsaWNl''@;'; put 'put ''KEV0LGp0KSxSPWF0P2F0LmluZGV4T2YoIiAiKT4tMT9hdDpvbyhhdCk6IiIseWUucmVmPVIscGUuZm9yRWFjaChmdW5jdGlvbihPdCl7T3QucmVmPVJ9KTticmVhaztjYXNlIjxjb2xvclNjYWxlIjpjYXNlIjxjb2xvclNjYWxlPiI6Y2FzZSI8ZGF0YUJhciI6Y2FzZSI8ZGF0YUJhcj4iOmNh''@;'; put 'put ''c2UiPGljb25TZXQiOmNhc2UiPGljb25TZXQ+IjpZZT17Y2Z2b3M6W10sY29sb3JzOltdLHRhZzprdH0sUGU9anQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9jb2xvclNjYWxlPiI6eWUuY29sb3JTY2FsZT1ZZTticmVhaztjYXNlIjwvZGF0YUJhcj4iOnllLmRhdGFCYXI9WWU7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8L2ljb25TZXQ+Ijp5ZS5pY29uU2V0PVllO2JyZWFrO2Nhc2UiPGNmdm8iOmNhc2UiPGNmdm8vPiI6WWUuY2Z2b3MucHVzaChrdCk7YnJlYWs7Y2FzZSI8L2Nmdm8+IjpicmVhaztjYXNlIjxjb2xvciI6WWUuY29sb3JzLnB1c2goa3QpO2JyZWFrO2Nhc2UiPC9jb2xvcj4iOmNhc2UiPGV4''@;'; put 'put ''dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6Z2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmdlPSExO2JyZWFrO2Nhc2UiPG5lZ2F0aXZlRmlsbENvbG9yIjpjYXNlIjxheGlzQ29sb3IiOmNhc2UiPGJvcmRlckNvbG9yIjpjYXNlIjxuZWdhdGl2''@;'; put 'put ''ZUJvcmRlckNvbG9yIjpjYXNlIjxjZkljb24iOnllLmRlbD0hMDticmVhaztjYXNlIjxkeGY+IjpnZT0hMCxjdD1qdDticmVhaztjYXNlIjwvZHhmPiI6Z2U9ITEseWUucz1MNChTLnNsaWNlKGN0LGp0K2J0Lmxlbmd0aCksUSxHLGspO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYpe2lmKG9l''@;'; put 'put ''KWJyZWFrO2lmKCFnZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2t0WzBdKyIgaW4gY29uZGZtdCIpfX1yZXR1cm4gYnR9KSxwZX0oUyxvZSxSLGssRyxRKX12YXIgU1M9LzwoPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi9nO2Z1bmN0aW9uIG04KFMsUil7''@;'; put 'put ''dmFyIGs9MCxHPTAsUT0wLG9lPTA7aWYoIVJ8fCFSLkNlbGxYZilyZXR1cm4gbnVsbDt2YXIgZ2U9Ui5DZWxsWGZbU107bnVsbCE9Z2UmJihudWxsIT1nZS5udW1GbXRJZCYmKGs9Z2UubnVtRm10SWQpLG51bGwhPWdlLmZpbGxJZCYmKEc9Z2UuZmlsbElkKSxudWxsIT1nZS5mb250SWQmJihR''@;'; put 'put ''PWdlLmZvbnRJZCksbnVsbCE9Z2UuYm9yZGVySWQmJihvZT1nZS5ib3JkZXJJZCkpO3ZhciBwZT17dDoieiJ9O3RyeXtKMyhwZSxrLEcsUSxvZSx7V1RGOjEsY2VsbFN0eWxlczohMH0sMCxSKX1jYXRjaHt9cmV0dXJuIHBlLnN9ZnVuY3Rpb24gVTUoUyxSLGssRyl7aWYodm9pZCAwPT09Uy52''@;'; put 'put ''JiZ2b2lkIDA9PT1TLmYmJm51bGw9PVMucyYmIVMuY3x8InoiPT09Uy50JiYhUy5jJiYhRy5zaGVldFN0dWJzKXJldHVybiIiO3ZhciBRPSIiLG9lPVMudCxnZT1TLnY7aWYoInoiIT09Uy50KXN3aXRjaChTLnQpe2Nhc2UiYiI6UT1TLnY/IjEiOiIwIjticmVhaztjYXNlIm4iOlE9IiIrUy52''@;'; put 'put ''O2JyZWFrO2Nhc2UiZSI6UT1NY1tTLnZdO2JyZWFrO2Nhc2UiZCI6RyYmRy5jZWxsRGF0ZXM/UT1IZShTLnYsLTEpLnRvSVNPU3RyaW5nKCk6KChTPXF0KFMpKS50PSJuIixRPSIiKyhTLnY9UWUoSGUoUy52KSkpKSx0eXBlb2YgUy56PiJ1IiYmKFMuej1BLl90YWJsZVsxNF0pO2JyZWFrO2Rl''@;'; put 'put ''ZmF1bHQ6UT1TLnZ9dmFyIHBlPSJ6Ij09Uy50PyIiOkhhKCJ2IixMcihRKSkseWU9e3I6Un0sUGU9Rz9sMChHLmNlbGxYZnMsRy5jZWxsU3R5bGVYZnMsUyxHKTowO3N3aXRjaCgwIT09UGUmJih5ZS5zPVBlKSxTLnQpe2Nhc2UibiI6Y2FzZSJ6IjpicmVhaztjYXNlImQiOnllLnQ9ImQiO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiYiI6eWUudD0iYiI7YnJlYWs7Y2FzZSJlIjp5ZS50PSJlIjticmVhaztkZWZhdWx0OmlmKG51bGw9PVMudil7ZGVsZXRlIFMudDticmVha31pZihHJiZHLmJvb2tTU1Qpe3BlPUhhKCJ2IiwiIithUyhHLlN0cmluZ3MsUy52LFMuUj9TLnI9UXMoUy5SKTpudWxsLEcucmV2U3Ry''@;'; put 'put ''aW5ncykpLHllLnQ9InMiO2JyZWFrfUFycmF5LmlzQXJyYXkoUy5SKT8ocGU9Ijxpcz4iK1FzKFMuUikrIjwvaXM+Iix5ZS50PSJpbmxpbmVTdHIiKTp5ZS50PSJzdHIifWlmKFMudCE9b2UmJihTLnQ9b2UsUy52PWdlKSxTLmYpe3ZhciBOZT1TLkYmJlMuRi5zbGljZSgwLFIubGVuZ3RoKT09''@;'; put 'put ''Uj97dDoiYXJyYXkiLHJlZjpTLkZ9Om51bGw7cGU9UHIoImYiLExyKFMuZiksTmUpKyhudWxsIT1TLnY/cGU6IiIpfXJldHVybiBTLmwmJmtbIiFsaW5rcyJdLnB1c2goW1IsUy5sXSksUy5jJiZrWyIhY29tbWVudHMiXS5wdXNoKFtSLFMuY10pLFByKCJjIixwZSx5ZSl9dmFyIHY4PWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIFM9LzwoPzpcdys6KT9jWyBcLz5dLyxSPS88XC8oPzpcdys6KT9yb3c+LyxrPS9yPVsiJ10oW14iJ10qKVsiJ10vLEc9LzwoPzpcdys6KT9pcz4oW1xTXHNdKj8pPFwvKD86XHcrOik/aXM+LyxRPS9yZWY9WyInXShbXiInXSopWyInXS8sb2U9RDAoInYiKSxnZT1EMCgiZiIp''@;'; put 'put ''O3JldHVybiBmdW5jdGlvbih5ZSxQZSxOZSxZZSxldCxjdCxFdCl7Zm9yKHZhciBTbixscixmcixicixMaSxhdD0wLGJ0PSIiLGp0PVtdLGt0PVtdLE90PTAsS3Q9MCxUbj0wLHJyPSIiLFhuPTAsQm49MCxlcj0wLE1pPTAsRmk9MCxuYT0wLGNhPUFycmF5LmlzQXJyYXkoRXQuQ2VsbFhmKSxr''@;'; put 'put ''cj1bXSxWbj1bXSxCcj1BcnJheS5pc0FycmF5KE5lKSxfcj1bXSxGbj17fSxqcj0hMSxaaT15ZS5zcGxpdChSKSx5aT0hIVllLnNoZWV0U3R1YnMsX2E9ISFZZS5jZWxsSFRNTCxzbz0hKCExPT09WWUuY2VsbFRleHQmJiFZZS5jZWxsTkYmJiFZZS5jZWxsU3R5bGVzKSxpYT0wLExvPVppLmxl''@;'; put 'put ''bmd0aDtpYSE9TG87KytpYSl7dmFyIE9hPShidD1aaVtpYV0udHJpbSgpKS5sZW5ndGg7aWYoMCE9PU9hKXt2YXIgaG89MDtlOmZvcihhdD0wO2F0PE9hOysrYXQpc3dpdGNoKGJ0W2F0XSl7Y2FzZSI+IjppZigiLyIhPWJ0W2F0LTFdKXsrK2F0O2JyZWFrIGV9WWUuY2VsbFN0eWxlcyYmbnVs''@;'; put 'put ''bCE9KGxyPXZyKGJ0LnNsaWNlKGhvLGF0KSwhMCkpLnImJnBhcnNlSW50KGxyLnIsMTApJiYoWG49cGFyc2VJbnQobHIuciwxMCksRm49e30sanI9ITEsbHIuaHQmJihqcj0hMCxGbi5ocHQ9cGFyc2VGbG9hdChsci5odCksRm4uaHB4PXNoKEZuLmhwdCkpLGxyLmR5RGVzY2VudCYmKGpyPSEw''@;'; put 'put ''LEZuLmR5RGVzY2VudD1sci5keURlc2NlbnQpLCIxIj09bHIuaGlkZGVuJiYoanI9ITAsRm4uaGlkZGVuPSEwKSxudWxsIT1sci5vdXRsaW5lTGV2ZWwmJihqcj0hMCxGbi5sZXZlbD0rbHIub3V0bGluZUxldmVsKSxsci5zJiZFdCYmRXQuQ2VsbFhmJiYoanI9ITAsRm4ucz1tOChsci5zLEV0''@;'; put 'put ''KSksanImJihfcltYbi0xXT1GbikpO2JyZWFrO2Nhc2UiPCI6aG89YXR9aWYoaG8+PWF0KWJyZWFrO2lmKFhuPW51bGwhPShscj12cihidC5zbGljZShobyxhdCksITApKS5yP3BhcnNlSW50KGxyLnIsMTApOlhuKzEsQm49LTEsIShZZS5zaGVldFJvd3MmJlllLnNoZWV0Um93czxYbikpe1ll''@;'; put 'put ''Lm5vZGltfHwoZXQucy5yPlhuLTEmJihldC5zLnI9WG4tMSksZXQuZS5yPFhuLTEmJihldC5lLnI9WG4tMSkpO3ZhciBKYT17dDoicm93Iixyb3c6W10sUjpYbi0xLGlkeDpQZX07WWUuY2VsbFN0eWxlcyYmKEZuPXt9LGpyPSExLGxyLmh0JiYoanI9ITAsRm4uaHB0PXBhcnNlRmxvYXQobHIu''@;'; put 'put ''aHQpLEZuLmhweD1zaChGbi5ocHQpKSxsci5keURlc2NlbnQmJihqcj0hMCxGbi5keURlc2NlbnQ9bHIuZHlEZXNjZW50KSwiMSI9PWxyLmhpZGRlbiYmKGpyPSEwLEZuLmhpZGRlbj0hMCksbnVsbCE9bHIub3V0bGluZUxldmVsJiYoanI9ITAsRm4ubGV2ZWw9K2xyLm91dGxpbmVMZXZlbCks''@;'; put 'put ''bHIucyYmKGpyPSEwLEZuLnM9bTgobHIucyxFdCkpLGpyJiYoWWUuY2FsbGJhY2s/SmEucHJvcHM9Rm46X3JbWG4tMV09Rm4pKSxqdD1idC5zbGljZShhdCkuc3BsaXQoUyk7Zm9yKHZhciBCaT0wO0JpIT1qdC5sZW5ndGgmJiI8Ij09anRbQmldLnRyaW0oKS5jaGFyQXQoMCk7KytCaSk7Zm9y''@;'; put 'put ''KGp0PWp0LnNsaWNlKEJpKSxhdD0wO2F0IT1qdC5sZW5ndGg7KythdClpZigwIT09KGJ0PWp0W2F0XS50cmltKCkpLmxlbmd0aCl7aWYoa3Q9YnQubWF0Y2goayksT3Q9YXQsS3Q9MCxUbj0wLGJ0PSI8YyAiKygiPCI9PWJ0LnNsaWNlKDAsMSk/Ij4iOiIiKStidCxudWxsIT1rdCYmMj09PWt0''@;'; put 'put ''Lmxlbmd0aCl7Zm9yKE90PTAscnI9a3RbMV0sS3Q9MDtLdCE9cnIubGVuZ3RoJiYhKChUbj1yci5jaGFyQ29kZUF0KEt0KS02NCk8MXx8VG4+MjYpOysrS3QpT3Q9MjYqT3QrVG47Qm49LS1PdH1lbHNlKytCbjtmb3IoS3Q9MDtLdCE9YnQubGVuZ3RoJiY2MiE9PWJ0LmNoYXJDb2RlQXQoS3Qp''@;'; put 'put ''OysrS3QpO2lmKCsrS3QsKGxyPXZyKGJ0LnNsaWNlKDAsS3QpLCEwKSkucnx8KGxyLnI9cWkoe3I6WG4tMSxjOkJufSkpLFNuPXt0OiIifSxudWxsIT0oa3Q9KHJyPWJ0LnNsaWNlKEt0KSkubWF0Y2gob2UpKSYmIiIhPT1rdFsxXSYmKFNuLnY9UXIoa3RbMV0pKSxZZS5jZWxsRm9ybXVsYSl7''@;'; put 'put ''aWYobnVsbCE9KGt0PXJyLm1hdGNoKGdlKSkmJiIiIT09a3RbMV0pe2lmKFNuLmY9UXIoZ28oa3RbMV0pKS5yZXBsYWNlKC9cclxuL2csIlxuIiksWWUueGxmbnx8KFNuLmY9RUIoU24uZikpLGt0WzBdLmluZGV4T2YoJ3Q9ImFycmF5IicpPi0xKVNuLkY9KHJyLm1hdGNoKFEpfHxbXSlbMV0s''@;'; put 'put ''U24uRi5pbmRleE9mKCI6Iik+LTEmJmtyLnB1c2goW29vKFNuLkYpLFNuLkZdKTtlbHNlIGlmKGt0WzBdLmluZGV4T2YoJ3Q9InNoYXJlZCInKT4tMSl7YnI9dnIoa3RbMF0pO3ZhciBJcz1RcihnbyhrdFsxXSkpO1llLnhsZm58fChJcz1FQihJcykpLFZuW3BhcnNlSW50KGJyLnNpLDEwKV09''@;'; put 'put ''W2JyLElzLGxyLnJdfX1lbHNlKGt0PXJyLm1hdGNoKC88ZltePl0qXC8+LykpJiZWblsoYnI9dnIoa3RbMF0pKS5zaV0mJihTbi5mPWRuZShWbltici5zaV1bMV0sVm5bYnIuc2ldWzJdLGxyLnIpKTt2YXIgUG49Tm8obHIucik7Zm9yKEt0PTA7S3Q8a3IubGVuZ3RoOysrS3QpUG4ucj49a3Jb''@;'; put 'put ''S3RdWzBdLnMuciYmUG4ucjw9a3JbS3RdWzBdLmUuciYmUG4uYz49a3JbS3RdWzBdLnMuYyYmUG4uYzw9a3JbS3RdWzBdLmUuYyYmKFNuLkY9a3JbS3RdWzFdKX1pZihudWxsPT1sci50JiZ2b2lkIDA9PT1Tbi52KWlmKFNuLmZ8fFNuLkYpU24udj0wLFNuLnQ9Im4iO2Vsc2V7aWYoIXlpKWNv''@;'; put 'put ''bnRpbnVlO1NuLnQ9InoifWVsc2UgU24udD1sci50fHwibiI7c3dpdGNoKGV0LnMuYz5CbiYmKGV0LnMuYz1CbiksZXQuZS5jPEJuJiYoZXQuZS5jPUJuKSxTbi50KXtjYXNlIm4iOmlmKCIiPT1Tbi52fHxudWxsPT1Tbi52KXtpZigheWkpY29udGludWU7U24udD0ieiJ9ZWxzZSBTbi52PXBh''@;'; put 'put ''cnNlRmxvYXQoU24udik7YnJlYWs7Y2FzZSJzIjppZih0eXBlb2YgU24udj4idSIpe2lmKCF5aSljb250aW51ZTtTbi50PSJ6In1lbHNlIGZyPWw4W3BhcnNlSW50KFNuLnYsMTApXSxTbi52PWZyLnQsU24ucj1mci5yLGZyLlImJihTbi5SPWZyLlIpLF9hJiYoU24uaD1mci5oKTticmVhaztj''@;'; put 'put ''YXNlInN0ciI6U24udD0icyIsU24udj1udWxsIT1Tbi52P2dvKFNuLnYpOiIiLF9hJiYoU24uaD1sYShTbi52KSk7YnJlYWs7Y2FzZSJpbmxpbmVTdHIiOmt0PXJyLm1hdGNoKEcpLFNuLnQ9InMiLG51bGwhPWt0JiYoZnI9dUMoa3RbMV0pKT8oU24udj1mci50LGZyLlImJihTbi5SPWZyLlIp''@;'; put 'put ''LF9hJiYoU24uaD1mci5oKSk6U24udj0iIjticmVhaztjYXNlImIiOlNuLnY9dGkoU24udik7YnJlYWs7Y2FzZSJkIjpZZS5jZWxsRGF0ZXM/U24udj1IZShTbi52LDEpOihTbi52PVFlKEhlKFNuLnYsMSkpLFNuLnQ9Im4iKTticmVhaztjYXNlImUiOiExIT09WWUuY2VsbFRleHQmJihTbi53''@;'; put 'put ''PVNuLnYpLFNuLnY9UDNbU24udl19aWYoc28pe2VyPU1pPUZpPW5hPTAsTGk9bnVsbCxjYSYmdm9pZCAwIT09bHIucyYmbnVsbCE9KExpPUV0LkNlbGxYZltsci5zXSkmJihudWxsIT1MaS5udW1GbXRJZCYmKGVyPUxpLm51bUZtdElkKSxZZS5jZWxsU3R5bGVzJiYobnVsbCE9TGkuZmlsbElk''@;'; put 'put ''JiYoTWk9TGkuZmlsbElkKSxudWxsIT1MaS5mb250SWQmJihGaT1MaS5mb250SWQpLG51bGwhPUxpLmJvcmRlcklkJiYobmE9TGkuYm9yZGVySWQpKSk7dHJ5e0ozKFNuLGVyLE1pLEZpLG5hLFllLDAsRXQpfWNhdGNoe31ZZS5jZWxsU3R5bGVzJiZTbi5zJiYoTGkmJkxpLmFsaWdubWVudCYm''@;'; put 'put ''KFNuLnMuYWxpZ25tZW50PXF0KExpLmFsaWdubWVudCkpLExpJiZMaS5wcm90ZWN0aW9uJiYobnVsbCE9TGkucHJvdGVjdGlvbi5oaWRkZW4mJihTbi5zLmhpZGRlbj1MaS5wcm90ZWN0aW9uLmhpZGRlbiksbnVsbCE9TGkucHJvdGVjdGlvbi5lZGl0YWJsZSYmKFNuLnMuZWRpdGFibGU9TGku''@;'; put 'put ''cHJvdGVjdGlvbi5lZGl0YWJsZSkpLExpJiZMaS5zdHlsZSYmKFNuLnMuc3R5bGU9TGkuc3R5bGUpKSxZZS5jZWxsRGF0ZXMmJmNhJiYibiI9PVNuLnQmJkEuaXNfZGF0ZShBLl90YWJsZVtlcl0pJiYoU24udD0iZCIsU24udj11bihTbi52KSl9dmFyIFdvO1llLm5vZGltJiYoV289Tm8obHIu''@;'; put 'put ''ciksZXQucy5yPldvLnImJihldC5zLnI9V28uciksZXQuZS5yPFdvLnImJihldC5lLnI9V28ucikpLFllLmNhbGxiYWNrPyhXbz1Obyhsci5yKSxKYS5yb3dbV28uY109U24pOkJyPyhOZVsoV289Tm8obHIucikpLnJdfHwoTmVbV28ucl09W10pLE5lW1dvLnJdW1dvLmNdPVNuKTpOZVtsci5y''@;'; put 'put ''XT1Tbn1ZZS5jYWxsYmFjayYmWWUuY2FsbGJhY2soSmEpfX19eWkmJiFZZS5jYWxsYmFjayYmbTgoMCxFdCksX3IubGVuZ3RoPjAmJihOZVsiIXJvd3MiXT1fcil9fSgpLGI4PVByKCJ3b3Jrc2hlZXQiLG51bGwse3htbG5zOllpLm1haW5bMF0sInhtbG5zOnIiOllpLnIsInhtbG5zOngxNGFj''@;'; put 'put ''IjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE0YWMifSk7ZnVu''@;'; put 'put ''Y3Rpb24gVkQoUyxSLGssRyl7dmFyIGdlLFE9W0lpLGI4XSxwZT0iIix5ZT1rLlNoZWV0c1trLlNoZWV0TmFtZXNbU11dO251bGw9PXllJiYoeWU9e30pO3ZhciBQZT15ZVsiIXJlZiJdfHwiQTEiLE5lPW9vKFBlKTtpZihOZS5lLmM+MTYzODN8fE5lLmUucj4xMDQ4NTc1KXtpZihSLldURil0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrUGUrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7TmUuZS5jPU1hdGgubWluKE5lLmUuYywxNjM4MyksTmUuZS5yPU1hdGgubWluKE5lLmUuYywxMDQ4NTc1KSxQZT1yYShOZSl9R3x8KEc9e30pLHllWyIhY29tbWVudHMiXT1b''@;'; put 'put ''XTt2YXIgWWU9W10sZXQ9eWVbIiFwcmludCJdO2lmKGZ1bmN0aW9uIEVEKFMsUixrLEcsUSl7dmFyIG9lPSExLGdlPXt9LHBlPW51bGw7aWYoInhsc3giIT09Ry5ib29rVHlwZSYmUi52YmFyYXcpe3ZhciB5ZT1SLlNoZWV0TmFtZXNba107dHJ5e1IuV29ya2Jvb2smJih5ZT1SLldvcmtib29r''@;'; put 'put ''LlNoZWV0c1trXS5Db2RlTmFtZXx8eWUpfWNhdGNoe31vZT0hMCxnZS5jb2RlTmFtZT1Mcih5ZSl9UyYmU1siIWNvbmRmbXQiXSYmKGdlLmVuYWJsZUZvcm1hdENvbmRpdGlvbnNDYWxjdWxhdGlvbj0iMSIpLFMmJlNbIiF0YWJjb2xvciJdJiYocGU9KHBlfHwiIikrJzx0YWJDb2xvciByZ2I9''@;'; put 'put ''IkZGJytQMChTWyIhdGFiY29sb3IiXS5yZ2IpKyciLz4nKTt2YXIgUGU9ITEsTmU9e307aWYoKCgoU3x8e30pWyIhcHJpbnQiXXx8e30pLnByb3BzfHx7fSkuZml0JiYoUGU9ITAsTmUuZml0VG9QYWdlPTEpLFBlJiYocGU9KHBlfHwiIikrUHIoInBhZ2VTZXRVcFByIixudWxsLE5lKSksUyYm''@;'; put 'put ''U1siIW91dGxpbmUiXSl7dmFyIFllPXtzdW1tYXJ5QmVsb3c6MSxzdW1tYXJ5UmlnaHQ6MX07U1siIW91dGxpbmUiXS5hYm92ZSYmKFllLnN1bW1hcnlCZWxvdz0wKSxTWyIhb3V0bGluZSJdLmxlZnQmJihZZS5zdW1tYXJ5UmlnaHQ9MCkscGU9KHBlfHwiIikrUHIoIm91dGxpbmVQciIsbnVs''@;'; put 'put ''bCxZZSl9IW9lJiYhcGV8fChRW1EubGVuZ3RoXT1Qcigic2hlZXRQciIscGUsZ2UpKX0oeWUsayxTLFIsUSksUVtRLmxlbmd0aF09UHIoImRpbWVuc2lvbiIsbnVsbCx7cmVmOlBlfSksUVtRLmxlbmd0aF09ZnVuY3Rpb24gZzgoUyxSLGssRyl7dmFyIFE9e3dvcmtib29rVmlld0lkOiIwIn07''@;'; put 'put ''aWYoKCgoR3x8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKS5sZW5ndGgpe3ZhciBvZT1HLldvcmtib29rLlZpZXdzLGdlPW9lW2tdfHxvZVswXTtRLnJpZ2h0VG9MZWZ0PWdlLlJUTD8iMSI6IjAiLGdlLnpvb20mJihRLnpvb21TY2FsZT1nZS56b29tKSxudWxsIT1nZS5ncmlkJiYoUS5z''@;'; put 'put ''aG93R3JpZExpbmVzPWdlLmdyaWQpLGdlLnZpZXcmJihRLnZpZXc9Z2Uudmlldyl9bnVsbCE9U1siIWdyaWRsaW5lcyJdJiYoUS5zaG93R3JpZExpbmVzPSEhU1siIWdyaWRsaW5lcyJdKTt2YXIgcGU9IiIseWU9e3I6MCxjOjB9O2lmKFNbIiFzZWwiXSl7aWYoISh5ZT1TWyIhc2VsIl0uY2Vs''@;'; put 'put ''bCkpe2lmKCFTWyIhc2VsIl0ucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO3llPU1zKFNbIiFzZWwiXS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zfSJzdHJpbmciPT10eXBlb2YgeWUmJih5ZT1Obyh5ZSkpfXZhciBO''@;'; put 'put ''ZT1TWyIhZnJlZXplIl0/InN0cmluZyI9PXR5cGVvZiBTWyIhZnJlZXplIl0/Tm8oU1siIWZyZWV6ZSJdKTpTWyIhZnJlZXplIl06e2M6MCxyOjB9O2lmKFNbIiFmcmVlemUiXSl7dmFyIFllPXFpKE5lKSxldD17c3RhdGU6ImZyb3plbiIseFNwbGl0Ok5lLmMseVNwbGl0Ok5lLnIsdG9wTGVm''@;'; put 'put ''dENlbGw6WWV9O1NbIiFzZWwiXSYmKGV0LmFjdGl2ZVBhbmU9KHllLnI+PU5lLnImJk5lLnI+MD8iYm90dG9tIjoidG9wIikrKHllLmM+PU5lLmMmJk5lLmM+MD8iUmlnaHQiOiJMZWZ0IikpLHBlPVByKCJwYW5lIixudWxsLGV0KX1pZihTWyIhc2VsIl0pe3ZhciBjdD17YWN0aXZlQ2VsbDoi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIHllP3llOnFpKHllKX07Y3Quc3FyZWY9U1siIXNlbCJdLnJhbmdlP1NbIiFzZWwiXS5yYW5nZTpjdC5hY3RpdmVDZWxsKyI6IitjdC5hY3RpdmVDZWxsLHBlKz1Qcigic2VsZWN0aW9uIixudWxsLGN0KSxTWyIhZnJlZXplIl0mJihOZS5jPjAmJihjdC5wYW5lPSJ0''@;'; put 'put ''b3BSaWdodCIscGUrPVByKCJzZWxlY3Rpb24iLG51bGwsY3QpKSxOZS5yPjAmJihjdC5wYW5lPSJib3R0b21MZWZ0IixwZSs9UHIoInNlbGVjdGlvbiIsbnVsbCxjdCkpLE5lLmM+MCYmTmUucj4wJiYoY3QucGFuZT0iYm90dG9tUmlnaHQiLHBlKz1Qcigic2VsZWN0aW9uIixudWxsLGN0KSkp''@;'; put 'put ''fXJldHVybiBQcigic2hlZXRWaWV3cyIsUHIoInNoZWV0VmlldyIscGV8fG51bGwsUSkse30pfSh5ZSwwLFMsayksUi5zaGVldEZvcm1hdCl7dmFyIGN0PXtkZWZhdWx0Um93SGVpZ2h0OlIuc2hlZXRGb3JtYXQuZGVmYXVsdFJvd0hlaWdodHx8IjE2IixiYXNlQ29sV2lkdGg6Ui5zaGVldEZv''@;'; put 'put ''cm1hdC5iYXNlQ29sV2lkdGh8fCIxMCJ9O251bGwhPVIuc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93JiYoY3Qub3V0bGluZUxldmVsUm93PVIuc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93KSxRW1EubGVuZ3RoXT1Qcigic2hlZXRGb3JtYXRQciIsbnVsbCxjdCl9ZWxzZSBpZih5ZVsi''@;'; put 'put ''IXNoZWV0Rm9ybWF0Il0pe3ZhciBFdD17fSxhdD0hMTt5ZVsiIXNoZWV0Rm9ybWF0Il0ucm93JiYoeWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQ/KGF0PSEwLEV0LmRlZmF1bHRSb3dIZWlnaHQ9eWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQsRXQuY3VzdG9tSGVpZ2h0PTEpOnllWyIhc2hl''@;'; put 'put ''ZXRGb3JtYXQiXS5yb3cuaHB4PyhhdD0hMCxFdC5kZWZhdWx0Um93SGVpZ2h0PVUzKHllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4KSxFdC5jdXN0b21IZWlnaHQ9MSk6KDA9PT15ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdHx8MD09PXllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4fHx5ZVsi''@;'; put 'put ''IXNoZWV0Rm9ybWF0Il0ucm93LmhpZGRlbikmJihhdD0hMCxFdC5kZWZhdWx0Um93SGVpZ2h0PUV0LmRlZmF1bHRSb3dIZWlnaHR8fDE2LEV0LmN1c3RvbUhlaWdodD0xLEV0Lnplcm9IZWlnaHQ9MSkseWVbIiFzaGVldEZvcm1hdCJdLmR5RGVzY2VudCYmKEV0WyJ4MTRhYzpkeURlc2NlbnQi''@;'; put 'put ''XT15ZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50KSkseWVbIiFzaGVldEZvcm1hdCJdLmNvbCYmKHllWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NofHxRMCh5ZVsiIXNoZWV0Rm9ybWF0Il0uY29sKSxFdC5kZWZhdWx0Q29sV2lkdGg9eWVbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2grNS9UY3x8''@;'; put 'put ''MCxhdD0hMCksbnVsbD09RXQuZGVmYXVsdFJvd0hlaWdodCYmKEV0LmRlZmF1bHRSb3dIZWlnaHQ9MTYpLG51bGw9PUV0LmRlZmF1bHRDb2xXaWR0aCYmKEV0LmRlZmF1bHRDb2xXaWR0aD0xMCksRXQub3V0bGluZUxldmVsUm93PUV0Lm91dGxpbmVMZXZlbFJvd3x8NyxhdCYmKFFbUS5sZW5n''@;'; put 'put ''dGhdPVByKCJzaGVldEZvcm1hdFByIixudWxsLEV0KSl9bnVsbCE9eWVbIiFjb2xzIl0mJnllWyIhY29scyJdLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gcGooUyxSLGspe2Zvcih2YXIgUSxHPVsiPGNvbHM+Il0sb2U9MDtvZSE9Ui5sZW5ndGg7KytvZSlpZihRPVJbb2VdKXtp''@;'; put 'put ''ZihRLmF1dG8mJm9TKFMsUSxvZSksUS5zfHxRLnope3ZhciBnZT17dDoieiJ9O251bGwhPVEucyYmKGdlLnM9US5zKSxudWxsIT1RLnomJihnZS56PVEueiksUS5zdHlsZT1sMChrLmNlbGxYZnMsay5jZWxsU3R5bGVYZnMsZ2Usayl9R1tHLmxlbmd0aF09UHIoImNvbCIsbnVsbCx1OChvZSxR''@;'; put 'put ''KSl9cmV0dXJuIEdbRy5sZW5ndGhdPSI8L2NvbHM+IixHLmpvaW4oIiIpfSh5ZSx5ZVsiIWNvbHMiXSxSKSksUVtnZT1RLmxlbmd0aF09IjxzaGVldERhdGEvPiIseWVbIiFsaW5rcyJdPVtdLG51bGwhPXllWyIhcmVmIl0mJihwZT1mdW5jdGlvbiBNUyhTLFIsayxHKXt2YXIgeWUsYnQsUT1b''@;'; put 'put ''XSxvZT1bXSxnZT1vbyhTWyIhcmVmIl0pLHBlPSIiLFBlPSIiLE5lPVtdLFllPTAsZXQ9MCxjdD1TWyIhcm93cyJdLEV0PUFycmF5LmlzQXJyYXkoUyksYXQ9e3I6UGV9LGp0PS0xO2ZvcihldD1nZS5zLmM7ZXQ8PWdlLmUuYzsrK2V0KU5lW2V0XT1UYShldCk7Zm9yKFllPWdlLnMucjtZZTw9''@;'; put 'put ''Z2UuZS5yOysrWWUpe2ZvcihvZT1bXSxQZT1qaShZZSksZXQ9Z2Uucy5jO2V0PD1nZS5lLmM7KytldCl7eWU9TmVbZXRdK1BlO3ZhciBrdD1FdD8oU1tZZV18fFtdKVtldF06U1t5ZV07dm9pZCAwIT09a3QmJm51bGwhPShwZT1VNShrdCx5ZSxTLFIpKSYmb2UucHVzaChwZSl9KG9lLmxlbmd0''@;'; put 'put ''aD4wfHxjdCYmY3RbWWVdKSYmKGF0PXtyOlBlfSxjdCYmY3RbWWVdJiYoKGJ0PWN0W1llXSkuaGlkZGVuJiYoYXQuaGlkZGVuPTEpLGp0PS0xLGJ0LmhweD9qdD1VMyhidC5ocHgpOmJ0LmhwdCYmKGp0PWJ0LmhwdCksanQ+LTEmJihhdC5odD1qdCxhdC5jdXN0b21IZWlnaHQ9MSksYnQubGV2''@;'; put 'put ''ZWwmJihhdC5vdXRsaW5lTGV2ZWw9YnQubGV2ZWwpLGJ0LmR5RGVzY2VudCYmKGF0WyJ4MTRhYzpkeURlc2NlbnQiXT1idC5keURlc2NlbnQpLGJ0LnMmJihhdC5zPWwwKFIuY2VsbFhmcyxSLmNlbGxTdHlsZVhmcyx7dDoieiIsczpidC5zfSxSKSxhdC5jdXN0b21Gb3JtYXQ9MSkpLFFbUS5s''@;'; put 'put ''ZW5ndGhdPVByKCJyb3ciLG9lLmpvaW4oIiIpLGF0KSl9aWYoY3QpZm9yKDtZZTxjdC5sZW5ndGg7KytZZSljdCYmY3RbWWVdJiYoYXQ9e3I6WWUrMX0sKGJ0PWN0W1llXSkuaGlkZGVuJiYoYXQuaGlkZGVuPTEpLGp0PS0xLGJ0LmhweD9qdD1VMyhidC5ocHgpOmJ0LmhwdCYmKGp0PWJ0Lmhw''@;'; put 'put ''dCksanQ+LTEmJihhdC5odD1qdCxhdC5jdXN0b21IZWlnaHQ9MSksYnQubGV2ZWwmJihhdC5vdXRsaW5lTGV2ZWw9YnQubGV2ZWwpLFFbUS5sZW5ndGhdPVByKCJyb3ciLCIiLGF0KSk7cmV0dXJuIFEuam9pbigiIil9KHllLFIpLHBlLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09cGUpKSxRLmxl''@;'; put 'put ''bmd0aD5nZSsxJiYoUVtRLmxlbmd0aF09Ijwvc2hlZXREYXRhPiIsUVtnZV09UVtnZV0ucmVwbGFjZSgiLz4iLCI+IikpLHllWyIhcHJvdGVjdCJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gZGooUyl7dmFyIFI9e3NoZWV0OjF9O3JldHVybiBiUy5mb3JFYWNoKGZ1bmN0aW9uKGspe251bGwh''@;'; put 'put ''PVNba10mJlNba10mJihSW2tdPSIxIil9KSxMRC5mb3JFYWNoKGZ1bmN0aW9uKGspe251bGwhPVNba10mJiFTW2tdJiYoUltrXT0iMCIpfSksUy5wYXNzd29yZD9SLnBhc3N3b3JkPUh2KFMucGFzc3dvcmQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOlMuZW5jcnlwdGlvbiYmKFIuYWxn''@;'; put 'put ''b3JpdGhtTmFtZT1TLmVuY3J5cHRpb24uYWxnbyxSLmhhc2hWYWx1ZT1TLmVuY3J5cHRpb24uaGFzaCxSLnNhbHRWYWx1ZT1TLmVuY3J5cHRpb24uc2FsdCxSLnNwaW5Db3VudD1TLmVuY3J5cHRpb24uc3BpbiksUHIoInNoZWV0UHJvdGVjdGlvbiIsbnVsbCxSKX0oeWVbIiFwcm90ZWN0Il0p''@;'; put 'put ''KSxudWxsIT15ZVsiIWF1dG9maWx0ZXIiXSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIG1qKFMsUixrLEcpe3ZhciBRPSJzdHJpbmciPT10eXBlb2YgUy5yZWY/Uy5yZWY6cmEoUy5yZWYpO2suV29ya2Jvb2t8fChrLldvcmtib29rPXtTaGVldHM6W119KSxrLldvcmtib29rLk5hbWVzfHwoay5X''@;'; put 'put ''b3JrYm9vay5OYW1lcz1bXSk7dmFyIG9lPWsuV29ya2Jvb2suTmFtZXMsZ2U9TXMoUSk7Z2Uucy5yPT1nZS5lLnImJihnZS5lLnI9TXMoUlsiIXJlZiJdKS5lLnIsUT1yYShnZSkpO2Zvcih2YXIgcGU9MDtwZTxvZS5sZW5ndGg7KytwZSl7dmFyIHllPW9lW3BlXTtpZigiX3hsbm0uX0ZpbHRl''@;'; put 'put ''ckRhdGFiYXNlIj09eWUuTmFtZSYmeWUuU2hlZXQ9PUcpe3llLlJlZj0iJyIray5TaGVldE5hbWVzW0ddKyInISIrUTticmVha319cmV0dXJuIHBlPT1vZS5sZW5ndGgmJm9lLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6RyxSZWY6IiciK2suU2hlZXROYW1lc1tH''@;'; put 'put ''XSsiJyEiK1F9KSxQcigiYXV0b0ZpbHRlciIsbnVsbCx7cmVmOlF9KX0oeWVbIiFhdXRvZmlsdGVyIl0seWUsayxTKSksbnVsbCE9eWVbIiFtZXJnZXMiXSYmeWVbIiFtZXJnZXMiXS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIGdTKFMpe2lmKDA9PT1TLmxlbmd0aClyZXR1cm4i''@;'; put 'put ''Ijtmb3IodmFyIFI9JzxtZXJnZUNlbGxzIGNvdW50PSInK1MubGVuZ3RoKyciPicsaz0wO2shPVMubGVuZ3RoOysraylSKz0nPG1lcmdlQ2VsbCByZWY9IicrcmEoU1trXSkrJyIvPic7cmV0dXJuIFIrIjwvbWVyZ2VDZWxscz4ifSh5ZVsiIW1lcmdlcyJdKSkseWVbIiFjb25kZm10Il0mJihR''@;'; put 'put ''W1EubGVuZ3RoXT1mdW5jdGlvbiB3aihTLFIpe3JldHVybiBTLm1hcChmdW5jdGlvbihrLEcpe3JldHVybiBmdW5jdGlvbiBfaihTLFIsayl7dmFyIEc9Uy5zP2xTKGsuRFhGLFMucyk6LTEsUT0ic3RyaW5nIj09dHlwZW9mIFMucmVmP1MucmVmOnJhKFMucmVmKSxnZT1vbyhRLnJlcGxhY2Uo''@;'; put 'put ''L1xzLiokLywiIikpLnM7Z2UucjwwJiYoZ2Uucj0wKSxnZS5jPDAmJihnZS5jPTApO3ZhciBwZT0iIix5ZT17cHJpb3JpdHk6UisxfTtzd2l0Y2goRz4tMSYmKHllLmR4ZklkPUcpLFMudCl7Y2FzZSJ1bmlxdWUiOnllLnR5cGU9InVuaXF1ZVZhbHVlcyI7YnJlYWs7Y2FzZSJkdXAiOnllLnR5''@;'; put 'put ''cGU9ImR1cGxpY2F0ZVZhbHVlcyI7YnJlYWs7Y2FzZSJibGFuayI6eWUudHlwZT0oUy52PyJjIjoibm90QyIpKyJvbnRhaW5zQmxhbmtzIixwZT0iPGZvcm11bGE+TEVOKFRSSU0oIitxaShnZSkrIikpIisoUy52PyI9IjoiJmd0OyIpKyIwPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJlcnJvciI6''@;'; put 'put ''eWUudHlwZT0oUy52PyJjIjoibm90QyIpKyJvbnRhaW5zRXJyb3JzIjticmVhaztjYXNlImZvcm11bGEiOnllLnR5cGU9ImV4cHJlc3Npb24iLHBlPVByKCJmb3JtdWxhIixMcihTLmYpLHt9KTticmVhaztjYXNlImRhdGUiOnllLnR5cGU9InRpbWVQZXJpb2QiLHllLnRpbWVQZXJpb2Q9eWpb''@;'; put 'put ''Uy5vcF07YnJlYWs7Y2FzZSJ0ZXh0Ijpzd2l0Y2goeWUudHlwZT15ZS5vcGVyYXRvcj1mOFtTLm9wXSx5ZS50ZXh0PVMudixTLm9wKXtjYXNlIklOIjpwZT0nPGZvcm11bGE+Tk9UKElTRVJST1IoU0VBUkNIKCInK0xyKFMudikrJyIsJytxaShnZSkrIikpKTwvZm9ybXVsYT4iO2JyZWFrO2Nh''@;'; put 'put ''c2UiT1QiOnBlPSc8Zm9ybXVsYT5JU0VSUk9SKFNFQVJDSCgiJytMcihTLnYpKyciLCcrcWkoZ2UpKyIpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiU1QiOnBlPSI8Zm9ybXVsYT5MRUZUKCIrcWkoZ2UpKycsTEVOKCInK0xyKFMudikrJyIpKT0iJytMcihTLnYpKyciPC9mb3JtdWxhPic7YnJl''@;'; put 'put ''YWs7Y2FzZSJORCI6cGU9Ijxmb3JtdWxhPlJJR0hUKCIrcWkoZ2UpKycsTEVOKCInK0xyKFMudikrJyIpKT0iJytMcihTLnYpKyciPC9mb3JtdWxhPid9YnJlYWs7Y2FzZSJ2YWwiOnllLnR5cGU9ImNlbGxJcyIseWUub3BlcmF0b3I9dWJbUy5vcF0scGU9bnVsbCE9Uy5taW4/UHIoImZvcm11''@;'; put 'put ''bGEiLExyKFN0cmluZyhTLm1pbikpLHt9KStQcigiZm9ybXVsYSIsTHIoU3RyaW5nKFMubWF4KSkse30pOlByKCJmb3JtdWxhIixMcihudWxsIT1TLnY/U3RyaW5nKCJzdHJpbmciPT10eXBlb2YgUy52PyciJytTLnYucmVwbGFjZSgvIi9nLCciIicpKyciJzpTLnYpOlMuZikse30pO2JyZWFr''@;'; put 'put ''O2Nhc2UiYXZnIjpzd2l0Y2goeWUudHlwZT0iYWJvdmVBdmVyYWdlIix5ZS5hYm92ZUF2ZXJhZ2U9IkwiPT1TLm9wLmNoYXJBdCgwKT8iMCI6IjEiLFMub3AuY2hhckF0KDEpKXtjYXNlIlQiOnllLmVxdWFsQXZlcmFnZT0iMCI7YnJlYWs7Y2FzZSJFIjp5ZS5lcXVhbEF2ZXJhZ2U9IjEiO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6eWUuc3RkRGV2PVMub3AuY2hhckF0KDEpfWJyZWFrO2Nhc2UicmFuayI6eWUudHlwZT0idG9wMTAiLHllLmJvdHRvbT0iQiI9PVMub3AuY2hhckF0KDApPyIxIjoiMCIseWUucGVyY2VudD0iUCI9PVMub3AuY2hhckF0KDEpPyIxIjoiMCIseWUucmFuaz1TLnY7YnJlYWs7''@;'; put 'put ''Y2FzZSJpY29uIjp5ZS50eXBlPSJpY29uU2V0Ijt2YXIgUGU9e2ljb25TZXQ6Uy52LHBlcmNlbnQ6Uy5wY3Q/InRydWUiOiJmYWxzZSJ9O1MucmV2JiYoUGUucmV2ZXJzZT0idHJ1ZSIpLFMuaGlkZGVuJiYoUGUuc2hvd1ZhbHVlPSJmYWxzZSIpLHBlPVByKCJpY29uU2V0IixTLnRocmVzaC5t''@;'; put 'put ''YXAoVzQpLmpvaW4oIiIpLFBlKTticmVhaztjYXNlInNjYWxlIjp5ZS50eXBlPSJjb2xvclNjYWxlIixwZSs9VzQoUy5jbWluKSxTLmNtaWQmJihwZSs9VzQoUy5jbWlkKSkscGUrPVc0KFMuY21heCkscGUrPWdkKFMuY21pbi5jb2xvciksUy5jbWlkJiYocGUrPWdkKFMuY21pZC5jb2xvcikp''@;'; put 'put ''LHBlPVByKCJjb2xvclNjYWxlIixwZSs9Z2QoUy5jbWF4LmNvbG9yKSx7fSk7YnJlYWs7Y2FzZSJiYXIiOnllLnR5cGU9ImRhdGFCYXIiLHBlKz1XNChTLmNtaW4pLHBlKz1XNChTLmNtYXgpLHBlPVByKCJkYXRhQmFyIixwZSs9Z2QoUy5jb2xvcikse30pO2JyZWFrO2RlZmF1bHQ6dGhyb3cg''@;'; put 'put ''Y29uc29sZS5sb2coUyksIkNGIG1pc3NpbmcgdHlwZSAiK1MudH1yZXR1cm4nPGNvbmRpdGlvbmFsRm9ybWF0dGluZyBzcXJlZj0iJytRKyciPicrUHIoImNmUnVsZSIsIiI9PXBlP251bGw6cGUseWUpKyI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4ifShrLEcsUil9KS5qb2luKCIiKX0oeWVb''@;'; put 'put ''IiFjb25kZm10Il0sUikpLHllWyIhdmFsaWRhdGlvbnMiXSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIEhEKFMpe2lmKCFTfHwwPT1TLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFI9W10saz0wLEc9MDtHPFMubGVuZ3RoOysrRyl7dmFyIFE9U1tHXSxvZT11aFtRLnRdO2lmKFEucmVmJiYoInN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBRLnJlZnx8LTEhPVEucmVmLmluZGV4T2YoIiAiKXx8KFEucmVmPW9vKFEucmVmKSxRLnJlZi5zJiYhKFEucmVmLnMuYzwwKSkpKXsrK2s7dmFyIGdlPXt0eXBlOm9lLGFsbG93Qmxhbms6KygwIT1RLmJsYW5rKSxzaG93SW5wdXRNZXNzYWdlOisoMCE9US5pbnB1dCks''@;'; put 'put ''c2hvd0Vycm9yTWVzc2FnZTorKDAhPVEuZXJyb3IpLHNxcmVmOiJzdHJpbmciPT10eXBlb2YgUS5yZWY/US5yZWY6cmEoUS5yZWYpfTtpZihRLmlucHV0JiYoUS5pbnB1dC50aXRsZSYmKGdlLnByb21wdFRpdGxlPVdpKFEuaW5wdXQudGl0bGUpKSxRLmlucHV0Lm1lc3NhZ2UmJihnZS5wcm9t''@;'; put 'put ''cHQ9V2koUS5pbnB1dC5tZXNzYWdlKSkpLFEuZXJyb3ImJihRLmVycm9yLnRpdGxlJiYoZ2UuZXJyb3JUaXRsZT1XaShRLmVycm9yLnRpdGxlKSksUS5lcnJvci5tZXNzYWdlJiYoZ2UuZXJyb3I9V2koUS5lcnJvci5tZXNzYWdlKSksUS5lcnJvci5zdHlsZSYmKGdlLmVycm9yU3R5bGU9US5l''@;'; put 'put ''cnJvci5zdHlsZSkpLCFvZSl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK1EudCk7dmFyIHBlPSIiO3N3aXRjaChRLnQpe2Nhc2UiQW55IjpicmVhaztjYXNlIkxpc3QiOmNhc2UiQ3VzdG9tIjppZihRLmwpe2lmKFEubC5qb2luKCIsIikubGVu''@;'; put 'put ''Z3RoPjI1MCl0aHJvdyBuZXcgRXJyb3IoIkRWIGxlbmd0aCA+IDI1MCB0cmlnZ2VycyBjb3JydXB0aW9uIGVycm9ycyBpbiBFeGNlbC4gIFVzZSBhIGxvb2t1cCB0YWJsZSIpO3BlPSc8Zm9ybXVsYTE+IicrTHIoUS5sLmpvaW4oIiwiKSkrJyI8L2Zvcm11bGExPid9ZWxzZSBwZT0iPGZvcm11''@;'; put 'put ''bGExPiIrTHIoUS5mKSsiPC9mb3JtdWxhMT4iO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJUaW1lIjpjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjppZighdWJbUS5vcF0pdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitRLm9wKyIgZm9yICIr''@;'; put 'put ''US50KTtpZihnZS5vcGVyYXRvcj11YltRLm9wXSxudWxsIT1RLnYpcGU9Ijxmb3JtdWxhMT4iK0xyKFN0cmluZyhRLnYgaW5zdGFuY2VvZiBEYXRlP1FlKFEudik6US52KSkrIjwvZm9ybXVsYTE+IjtlbHNle2lmKG51bGw9PVEubWlufHxudWxsPT1RLm1heCl0aHJvdyBuZXcgRXJyb3IoIkJh''@;'; put 'put ''ZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK1EudCk7cGU9Ijxmb3JtdWxhMT4iK0xyKFN0cmluZyhRLm1pbiBpbnN0YW5jZW9mIERhdGU/UWUoUS5taW4pOlEubWluKSkrIjwvZm9ybXVsYTE+PGZvcm11bGEyPiIrTHIoU3RyaW5nKFEu''@;'; put 'put ''bWF4IGluc3RhbmNlb2YgRGF0ZT9RZShRLm1heCk6US5tYXgpKSsiPC9mb3JtdWxhMj4ifX1SLnB1c2goUHIoImRhdGFWYWxpZGF0aW9uIixwZXx8bnVsbCxnZSkpfX1yZXR1cm4gaz4wPyc8ZGF0YVZhbGlkYXRpb25zIGNvdW50PSInK2srJyI+JytSLmpvaW4oIiIpKyI8L2RhdGFWYWxpZGF0''@;'; put 'put ''aW9ucz4iOiIifSh5ZVsiIXZhbGlkYXRpb25zIl0pKTt2YXIganQsYnQ9LTEsa3Q9LTE7aWYoeWVbIiFsaW5rcyJdLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09IjxoeXBlcmxpbmtzPiIseWVbIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24oU24pe1NuWzFdLlRhcmdldCYmKGp0PXtyZWY6U25b''@;'; put 'put ''MF19LCIjIiE9U25bMV0uVGFyZ2V0LmNoYXJBdCgwKSYmKGt0PUVyKEcsLTEsTHIoU25bMV0uVGFyZ2V0KS5yZXBsYWNlKC8jLiokLywiIiksS2EuSExJTkspLGp0WyJyOmlkIl09InJJZCIra3QpLChidD1TblsxXS5UYXJnZXQuaW5kZXhPZigiIyIpKT4tMSYmKGp0LmxvY2F0aW9uPUxyKFNu''@;'; put 'put ''WzFdLlRhcmdldC5zbGljZShidCsxKSkpLFNuWzFdLlRvb2x0aXAmJihqdC50b29sdGlwPUxyKFNuWzFdLlRvb2x0aXApKSxRW1EubGVuZ3RoXT1QcigiaHlwZXJsaW5rIixudWxsLGp0KSl9KSxRW1EubGVuZ3RoXT0iPC9oeXBlcmxpbmtzPiIpLGRlbGV0ZSB5ZVsiIWxpbmtzIl0sZXQpe3Zh''@;'; put 'put ''ciBPdD1mdW5jdGlvbiBsaihTKXtpZihTLnByb3BzKXt2YXIgUj17fSxrPVMucHJvcHM7cmV0dXJuIGsuZ3JpZGxpbmVzJiYoUi5ncmlkTGluZXM9Ui5ncmlkTGluZXNTZXQ9MSksay5oZWFkaW5ncyYmKFIuaGVhZGluZ3M9MSksay5jZW50ZXJYJiYoUi5ob3Jpem9udGFsQ2VudGVyZWQ9MSks''@;'; put 'put ''ay5jZW50ZXJZJiYoUi52ZXJ0aWNhbENlbnRlcmVkPTEpLFByKCJwcmludE9wdGlvbnMiLG51bGwsUil9cmV0dXJuIiJ9KGV0KTtPdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1PdCl9aWYoKG51bGwhPXllWyIhbWFyZ2lucyJdfHxldCYmZXQubWFyZ2lucykmJihRW1EubGVuZ3RoXT1mdW5jdGlv''@;'; put 'put ''biBmaihTKXtyZXR1cm4gWDMoUyksUHIoInBhZ2VNYXJnaW5zIixudWxsLFMpfSh5ZVsiIW1hcmdpbnMiXXx8ZXQubWFyZ2lucykpLGV0KXt2YXIgS3Q9ZnVuY3Rpb24gUkQoUyl7aWYoUy5wcm9wcyl7dmFyIFI9e30saz1TLnByb3BzO2lmKGsub3JpZW50YXRpb24mJihSLm9yaWVudGF0aW9u''@;'; put 'put ''PWsub3JpZW50YXRpb24pLGsuc2NhbGUmJihSLnNjYWxlPWsuc2NhbGUpLGsuZml0JiYobnVsbCE9ay5maXQuaGVpZ2h0JiYoUi5maXRUb0hlaWdodD1rLmZpdC5oZWlnaHQpLG51bGwhPWsuZml0LndpZHRoJiYoUi5maXRUb1dpZHRoPWsuZml0LndpZHRoKSksay5kcGkmJihSLmhvcml6b250''@;'; put 'put ''YWxEcGk9Ui52ZXJ0aWNhbERwaT1rLmRwaSksbnVsbCE9ay5maXJzdCYmKFIuZmlyc3RQYWdlTnVtYmVyPWsuZmlyc3QsUi51c2VGaXJzdFBhZ2VOdW1iZXI9MSksay5idyYmKFIuYmxhY2tBbmRXaGl0ZT0xKSxrLmRyYWZ0JiYoUi5kcmFmdD0xKSxrLmNvbW1lbnRzJiYoUi5jZWxsQ29tbWVu''@;'; put 'put ''dHM9VERbay5jb21tZW50c118fCJub25lIiksay5lcnJvcnMmJihSLmVycm9ycz1rRFtrLmVycm9yc118fCJub25lIiksay5wYXBlcilzd2l0Y2godHlwZW9mIGsucGFwZXIpe2Nhc2UibnVtYmVyIjpSLnBhcGVyU2l6ZT1rLnBhcGVyO2JyZWFrO2Nhc2Uic3RyaW5nIjp1QltrLnBhcGVyXT9S''@;'; put 'put ''LnBhcGVyU2l6ZT11QltrLnBhcGVyXToray5wYXBlciYmKFIucGFwZXJTaXplPStrLnBhcGVyKTticmVhaztjYXNlIm9iamVjdCI6aWYoIWsucGFwZXIuaGVpZ2h0fHwhay5wYXBlci53aWR0aCl0aHJvdyJDdXN0b20gUGFwZXIgU2l6ZSBtdXN0IGluY2x1ZGUgd2lkdGggYW5kIGhlaWdodCEi''@;'; put 'put ''O1IucGFwZXJIZWlnaHQ9ay5wYXBlci5oZWlnaHQsUi5wYXBlcldpZHRoPWsucGFwZXIud2lkdGh9cmV0dXJuWzEsITAsInRydWUiLCJvdmVyIl0uaW5kZXhPZihrLm9yZGVyKT4tMSYmKFIucGFnZU9yZGVyPSJvdmVyVGhlbkRvd24iKSxQcigicGFnZVNldHVwIixudWxsLFIpfXJldHVybiIi''@;'; put 'put ''fShldCk7S3QubGVuZ3RoJiYoUVtRLmxlbmd0aF09S3QpLEt0PWZ1bmN0aW9uIGJqKFMpe3ZhciBSPVtdLGs9IiIsRz0iIixRPSIiLG9lPSIiLGdlPSIiLHBlPSIiLHllPSIiLFBlPXQxKFMuaGVhZGVyKTtQZS5sZW5ndGgmJihHPVBlWzBdLHBlPVBlWzFdLG9lPVBlWzJdKTt2YXIgTmU9dDEo''@;'; put 'put ''Uy5mb290ZXIpO3JldHVybiBOZS5sZW5ndGgmJihRPU5lWzBdLHllPU5lWzFdLGdlPU5lWzJdKSxHJiZSLnB1c2goIjxvZGRIZWFkZXI+IitMcihHKSsiPC9vZGRIZWFkZXI+IiksUSYmUi5wdXNoKCI8b2RkRm9vdGVyPiIrTHIoUSkrIjwvb2RkRm9vdGVyPiIpLChnZSE9UXx8b2UhPUcpJiYo''@;'; put 'put ''ays9JyBkaWZmZXJlbnRPZGRFdmVuPSIxIicsUi5wdXNoKCI8ZXZlbkhlYWRlcj4iK0xyKG9lKSsiPC9ldmVuSGVhZGVyPiIpLFIucHVzaCgiPGV2ZW5Gb290ZXI+IitMcihnZSkrIjwvZXZlbkZvb3Rlcj4iKSksKHllIT1RfHxwZSE9RykmJihrKz0nIGRpZmZlcmVudEZpcnN0PSIxIicsUi5w''@;'; put 'put ''dXNoKCI8Zmlyc3RIZWFkZXI+IitMcihwZSkrIjwvZmlyc3RIZWFkZXI+IiksUi5wdXNoKCI8Zmlyc3RGb290ZXI+IitMcih5ZSkrIjwvZmlyc3RGb290ZXI+IikpLFIubGVuZ3RoPyI8aGVhZGVyRm9vdGVyIitrKyI+IitSLmpvaW4oIiIpKyI8L2hlYWRlckZvb3Rlcj4iOiIifShldCksS3Qu''@;'; put 'put ''bGVuZ3RoJiYoUVtRLmxlbmd0aF09S3QpfWlmKChudWxsIT15ZVsiIXJvd0JyZWFrcyJdfHxldCYmZXQucm93QnJlYWtzKSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIHVqKFMpe2lmKDA9PVMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUj1bJzxyb3dCcmVha3MgY291bnQ9IicrUy5sZW5ndGgr''@;'; put 'put ''JyIgbWFudWFsQnJlYWtDb3VudD0iJytTLmxlbmd0aCsnIj4nXSxrPTA7azxTLmxlbmd0aDsrK2spUi5wdXNoKCc8YnJrIGlkPSInK1Nba10uUisnIiBtYW49IjEiLz4nKTtyZXR1cm4gUi5qb2luKCIiKSsiPC9yb3dCcmVha3M+In0oeWVbIiFyb3dCcmVha3MiXXx8ZXQucm93QnJlYWtzKSks''@;'; put 'put ''KG51bGwhPXllWyIhY29sQnJlYWtzIl18fGV0JiZldC5jb2xCcmVha3MpJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gdlMoUyl7aWYoMD09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBSPVsnPGNvbEJyZWFrcyBjb3VudD0iJytTLmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK1MubGVu''@;'; put 'put ''Z3RoKyciPiddLGs9MDtrPFMubGVuZ3RoOysraylSLnB1c2goJzxicmsgaWQ9IicrU1trXS5DKyciIG1hbj0iMSIvPicpO3JldHVybiBSLmpvaW4oIiIpKyI8L2NvbEJyZWFrcz4ifSh5ZVsiIWNvbEJyZWFrcyJdfHxldC5jb2xCcmVha3MpKSwoIVJ8fFIuaWdub3JlRUN8fG51bGw9PVIuaWdu''@;'; put 'put ''b3JlRUMpJiYoUVtRLmxlbmd0aF09SGEoImlnbm9yZWRFcnJvcnMiLFByKCJpZ25vcmVkRXJyb3IiLG51bGwse251bWJlclN0b3JlZEFzVGV4dDoxLHNxcmVmOlBlfSkpKSx5ZVsiIWNoYXJ0cyJdJiZZZS5wdXNoLmFwcGx5KFllLHllWyIhY2hhcnRzIl0pLHllWyIhaW1hZ2VzIl0mJlllLnB1''@;'; put 'put ''c2guYXBwbHkoWWUseWVbIiFpbWFnZXMiXSkseWVbIiFzaGFwZXMiXSYmWWUucHVzaC5hcHBseShZZSx5ZVsiIXNoYXBlcyJdKSxZZS5sZW5ndGg+MCYmKGt0PUVyKEcsLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyhTKzEpKyIueG1sIixLYS5EUkFXKSxRW1EubGVuZ3RoXT1QcigiZHJhd2lu''@;'; put 'put ''ZyIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSkseWVbIiFkcmF3aW5nIl09WWUpLCh5ZVsiIWNvbW1lbnRzIl0ubGVuZ3RoPjB8fCh5ZVsiIWNvbnRyb2xzIl18fFtdKS5sZW5ndGg+MCkmJihrdD1FcihHLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoUysxKSsiLnZtbCIsS2EuVk1MKSxR''@;'; put 'put ''W1EubGVuZ3RoXT1QcigibGVnYWN5RHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSkseWVbIiFsZWdhY3kiXT1rdCkseWVbIiFwcmludCJdJiZ5ZVsiIXByaW50Il0uaW1hZ2VzKXt2YXIgVG49eWVbIiFwcmludCJdLmltYWdlcyxycj0wO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihTbil7VG5bU25dJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24obHIpe1RuW1NuXVtscl0mJlsibGVmdCIsInJpZ2h0IiwiY2VudGVyIl0uZm9yRWFjaChmdW5jdGlvbihYbil7aWYoQXJyYXkuaXNBcnJheShUbltTbl1bbHJdW1huXSkpZm9yKHZh''@;'; put 'put ''ciBCbj0wO0JuPFRuW1NuXVtscl1bWG5dLmxlbmd0aDsrK0JuKVRuW1NuXVtscl1bWG5dW0JuXSYmKFRuW1NuXVtscl1bWG5dW0JuXS5fY250PXJyKyspfSl9KX0pLHJyPjAmJihrdD1FcihHLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoUysxKSsiSEYudm1sIixLYS5WTUwpLFFbUS5s''@;'; put 'put ''ZW5ndGhdPVByKCJsZWdhY3lEcmF3aW5nSEYiLG51bGwseyJyOmlkIjoicklkIitrdH0pLHllWyIhbGVnYWN5SEYiXT1rdCl9cmV0dXJuKHllWyIhdGFibGVzIl18fFtdKS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPSc8dGFibGVQYXJ0cyBjb3VudD0iJyt5ZVsiIXRhYmxlcyJdLmxlbmd0aCsn''@;'; put 'put ''Ij4nLHllWyIhdGFibGVzIl0uZm9yRWFjaChmdW5jdGlvbihTbixscil7a3Q9RXIoRywtMSwiLi4vdGFibGVzL3RhYmxlIisoUysxKSsiXyIrbHIrIi54bWwiLEthLlRBQkxFKSxRW1EubGVuZ3RoXT0nPHRhYmxlUGFydCByOmlkPSJySWQnK2t0KyciLz4nfSksUVtRLmxlbmd0aF09IjwvdGFi''@;'; put 'put ''bGVQYXJ0cz4iKSxRLmxlbmd0aD4xJiYoUVtRLmxlbmd0aF09Ijwvd29ya3NoZWV0PiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfWZ1bmN0aW9uIE1qKFMsUixrLEcpe3ZhciBRPWZ1bmN0aW9uIFNqKFMsUixrKXt2YXIgRz1ibigxNDUpLFE9KGtbIiFyb3dzIl18''@;'; put 'put ''fFtdKVtTXXx8e307Ry53cml0ZV9zaGlmdCg0LFMpLEcud3JpdGVfc2hpZnQoNCwwKTt2YXIgb2U9MzIwO1EuaHB4P29lPTIwKlUzKFEuaHB4KTpRLmhwdCYmKG9lPTIwKlEuaHB0KSxHLndyaXRlX3NoaWZ0KDIsb2UpLEcud3JpdGVfc2hpZnQoMSwwKTt2YXIgZ2U9MDtRLmxldmVsJiYoZ2V8''@;'; put 'put ''PVEubGV2ZWwpLFEuaGlkZGVuJiYoZ2V8PTE2KSwoUS5ocHh8fFEuaHB0KSYmKGdlfD0zMiksRy53cml0ZV9zaGlmdCgxLGdlKSxHLndyaXRlX3NoaWZ0KDEsMCk7dmFyIHBlPTAseWU9Ry5sO0cubCs9NDtmb3IodmFyIFBlPXtyOlMsYzowfSxOZT0wO05lPDE2OysrTmUpaWYoIShSLnMuYz5O''@;'; put 'put ''ZSsxPDwxMHx8Ui5lLmM8TmU8PDEwKSl7Zm9yKHZhciBZZT0tMSxldD0tMSxjdD1OZTw8MTA7Y3Q8TmUrMTw8MTA7KytjdClQZS5jPWN0LChBcnJheS5pc0FycmF5KGspPyhrW1BlLnJdfHxbXSlbUGUuY106a1txaShQZSldKSYmKFllPDAmJihZZT1jdCksZXQ9Y3QpO1llPDB8fCgrK3BlLEcu''@;'; put 'put ''d3JpdGVfc2hpZnQoNCxZZSksRy53cml0ZV9zaGlmdCg0LGV0KSl9dmFyIGF0PUcubDtyZXR1cm4gRy5sPXllLEcud3JpdGVfc2hpZnQoNCxwZSksRy5sPWF0LEcubGVuZ3RoPkcubD9HLnNsaWNlKDAsRy5sKTpHfShHLGssUik7KFEubGVuZ3RoPjE3fHwoUlsiIXJvd3MiXXx8W10pW0ddKSYm''@;'; put 'put ''RnIoUywiQnJ0Um93SGRyIixRKX12YXIgeGo9bXUsRWo9Z2Y7ZnVuY3Rpb24gRmooUyl7cmV0dXJuW0poKFMpLFBsKFMpLCJuIl19dmFyIFdEPW11LEM4PWdmLEtEPVsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0scUQ9WyJBbnkiLCJXaG9sZSIsIkRl''@;'; put 'put ''Y2ltYWwiLCJMaXN0IiwiRGF0ZSIsIlRpbWUiLCJMZW5ndGgiLCJDdXN0b20iXSxEUz1bIklOIiwiT1QiLCJFUSIsIk5FIiwiR1QiLCJMVCIsIkdFIiwiTEUiXTtmdW5jdGlvbiBYRChTKXt2YXIgUj1ibig0KSxrPVtSXSxHPXFELmluZGV4T2YoUy50KTtpZihHPDApdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJCYWQgdmFsaWRhdGlvbjogdW5yZWNvZ25pemVkIHR5cGUgIitTLnQpO3ZhciBvZT1EUy5pbmRleE9mKFMub3ApO3N3aXRjaChHKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNzpvZT0wO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PW9lKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbiB0''@;'; put 'put ''eXBlICIrUy5vcCsiIGZvciAiK1MudCl9Ui53cml0ZV9zaGlmdCgxLDB8RyksUi53cml0ZV9zaGlmdCgxLDEpLFIud3JpdGVfc2hpZnQoMSwxMnxvZTw8NCksUi53cml0ZV9zaGlmdCgxLDApLGsucHVzaChmdW5jdGlvbiBSMyhTKXt2YXIgUj1TLnNwbGl0KC9ccyosXHMqLyksaz1ibig0KTtr''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsUi5sZW5ndGgpO3ZhciBHPVtrXTtyZXR1cm4gUi5mb3JFYWNoKGZ1bmN0aW9uKFEpe0cucHVzaChnZihvbyhRKSkpfSksaihHKX0oInN0cmluZyI9PXR5cGVvZiBTLnJlZj9TLnJlZjpyYShTLnJlZikpKTt2YXIgZ2U9Ym4oMTYpO2dlLndyaXRlX3NoaWZ0KDQsNDI5''@;'; put 'put ''NDk2NzI5NSksZ2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxnZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLGdlLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksay5wdXNoKGdlKTt2YXIgcGU9Ym4oOCk7cGUud3JpdGVfc2hpZnQoNCwwKSxwZS53cml0ZV9zaGlmdCg0LDApO3ZhciB5''@;'; put 'put ''ZT0xO3N3aXRjaChTLnQpe2Nhc2UiQW55IjprLnB1c2gocGUpLGsucHVzaChwZSk7YnJlYWs7Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9sZSI6aWYobnVsbCE9Uy52fHxudWxsIT1TLmYpay5wdXNoKCJudW1iZXIiPT10eXBlb2YgUy52P3RTKFMudik6VTQobnVsbD09Uy52''@;'; put 'put ''P1MuZjpTLnYpKTtlbHNle2lmKG51bGw9PVMubWlufHxudWxsPT1TLm1heCl0aHJvdyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK1MudDtrLnB1c2goIm51bWJlciI9PXR5cGVvZiBTLm1pbj90UyhTLm1pbik6VTQo''@;'; put 'put ''Uy5taW4pKSxrLnB1c2goIm51bWJlciI9PXR5cGVvZiBTLm1heD90UyhTLm1heCk6VTQoUy5tYXgpKSx5ZT0yfWJyZWFrO2Nhc2UiTGlzdCI6aWYobnVsbCE9Uy5sKXtrLnB1c2goblMoUy5sLmpvaW4oIiwiKSkpO2JyZWFrfWNhc2UiQ3VzdG9tIjppZigibnVsbCIhPVMuZil7ay5wdXNoKFU0''@;'; put 'put ''KFMuZikpO2JyZWFrfXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYGZgIisoIkxpc3QiPT1TLnQ/IiBvciBgbGAiOiIiKSsiIHJlcXVpcmVkIGZvciBUeXBlICIrUy50O2RlZmF1bHQ6dGhyb3ciWExTQiBkb2VzIG5vdCBzdXBwb3J0IERhdGEgVmFsaWRhdGlvbiB0eXBlICIr''@;'; put 'put ''Uy50fXJldHVybiAxPT15ZSYmay5wdXNoKHBlKSxqKGspfWZ1bmN0aW9uIGV6KFMsUixrLEcsUSxvZSxnZSl7aWYodm9pZCAwPT09Ui52JiZudWxsPT1SLnN8fCJ6Ij09PVIudCYmIVEuc2hlZXRTdHVicylyZXR1cm4hMTt2YXIgcGU9IiI7c3dpdGNoKFIudCl7Y2FzZSJiIjpwZT1SLnY/IjEi''@;'; put 'put ''OiIwIjticmVhaztjYXNlImQiOihSPXF0KFIpKS56PVIuenx8QS5fdGFibGVbMTRdLFIudj1RZShIZShSLnYpKSxSLnQ9Im4iO2JyZWFrO2Nhc2UibiI6Y2FzZSJlIjpwZT0iIitSLnY7YnJlYWs7ZGVmYXVsdDpwZT1SLnZ9dmFyIHllPXtyOmssYzpHfTtzd2l0Y2goeWUucz1sMChRLmNlbGxY''@;'; put 'put ''ZnMsUS5jZWxsU3R5bGVYZnMsUixRKSxSLmwmJm9lWyIhbGlua3MiXS5wdXNoKFtxaSh5ZSksUi5sXSksUi5jJiZvZVsiIWNvbW1lbnRzIl0ucHVzaChbcWkoeWUpLFIuY10pLFIudCl7Y2FzZSJzIjpjYXNlInN0ciI6aWYoUS5ib29rU1NUKXtpZihwZT1hUyhRLlN0cmluZ3MsUi52LFIuUj9S''@;'; put 'put ''LnI9UXMoUi5SKTpudWxsLFEucmV2U3RyaW5ncyksUi5SKWZvcih2YXIgUGU9MDtQZTxSLlIubGVuZ3RoOysrUGUpUi5SW1BlXS5zJiZsMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlIuUltQZV0uc30sUSk7eWUudD0icyIseWUudj1wZSxnZT9GcihTLCJCcnRTaG9y''@;'; put 'put ''dElzc3QiLGZ1bmN0aW9uIGZiKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oOCkpLGZpKFIsayksay53cml0ZV9zaGlmdCg0LFIudiksa30oMCx5ZSkpOkZyKFMsIkJydENlbGxJc3N0IixmdW5jdGlvbiBMaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKSkseHIoUixrKSxr''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsUi52KSxrfSgwLHllKSl9ZWxzZSB5ZS50PSJzdHIiLGdlP0ZyKFMsIkJydFNob3J0U3QiLGZ1bmN0aW9uIHpqKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oOCs0KlMudi5sZW5ndGgpKSxmaShSLGspLEZjKFMudixrKSxrLmxlbmd0aD5rLmw/ay5zbGljZSgw''@;'; put 'put ''LGsubCk6a30oUix5ZSkpOkZyKFMsIkJydENlbGxTdCIsZnVuY3Rpb24gQmooUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibigxMis0KlMudi5sZW5ndGgpKSx4cihSLGspLEZjKFMudixrKSxrLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6a30oUix5ZSkpO3JldHVybiEwO2Nhc2UibiI6''@;'; put 'put ''cmV0dXJuIFIudj09KDB8Ui52KSYmUi52Pi0xZTMmJlIudjwxZTM/Z2U/RnIoUywiQnJ0U2hvcnRSayIsZnVuY3Rpb24gVmooUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig4KSksZmkoUixrKSx1dihTLnYsayksa30oUix5ZSkpOkZyKFMsIkJydENlbGxSayIsZnVuY3Rpb24gTmooUyxS''@;'; put 'put ''LGspe3JldHVybiBudWxsPT1rJiYoaz1ibigxMikpLHhyKFIsayksdXYoUy52LGspLGt9KFIseWUpKTpnZT9GcihTLCJCcnRTaG9ydFJlYWwiLGZ1bmN0aW9uIEluZShTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKSksZmkoUixrKSxPdShTLnYsayksa30oUix5ZSkpOkZyKFMsIkJy''@;'; put 'put ''dENlbGxSZWFsIixmdW5jdGlvbiBQaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDE2KSkseHIoUixrKSxPdShTLnYsayksa30oUix5ZSkpLCEwO2Nhc2UiYiI6cmV0dXJuIHllLnQ9ImIiLGdlP0ZyKFMsIkJydFNob3J0Qm9vbCIsZnVuY3Rpb24geFMoUyxSLGspe3JldHVybiBudWxs''@;'; put 'put ''PT1rJiYoaz1ibig1KSksZmkoUixrKSxrLndyaXRlX3NoaWZ0KDEsUy52PzE6MCksa30oUix5ZSkpOkZyKFMsIkJydENlbGxCb29sIixmdW5jdGlvbiBJaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDkpKSx4cihSLGspLGsud3JpdGVfc2hpZnQoMSxTLnY/MTowKSxrfShSLHllKSks''@;'; put 'put ''ITA7Y2FzZSJlIjpyZXR1cm4geWUudD0iZSIsZ2U/RnIoUywiQnJ0U2hvcnRFcnJvciIsZnVuY3Rpb24gU2woUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig4KSksZmkoUixrKSxrLndyaXRlX3NoaWZ0KDEsUy52KSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgxLDApLGt9''@;'; put 'put ''KFIseWUpKTpGcihTLCJCcnRDZWxsRXJyb3IiLGZ1bmN0aW9uIHk4KFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oOSkpLHhyKFIsayksay53cml0ZV9zaGlmdCgxLFMudiksa30oUix5ZSkpLCEwfXJldHVybiBnZT9GcihTLCJCcnRTaG9ydEJsYW5rIixmdW5jdGlvbiB6RChTLFIsayl7''@;'; put 'put ''cmV0dXJuIG51bGw9PWsmJihrPWJuKDQpKSxmaShSLGspfSgwLHllKSk6RnIoUywiQnJ0Q2VsbEJsYW5rIixmdW5jdGlvbiBBaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDgpKSx4cihSLGspfSgwLHllKSksITB9ZnVuY3Rpb24gVzUoUyxSLGssRyl7dmFyIFE9YmkoKSxvZT1rLlNo''@;'; put 'put ''ZWV0TmFtZXNbU10sZ2U9ay5TaGVldHNbb2VdfHx7fSxwZT1vZTt0cnl7ayYmay5Xb3JrYm9vayYmKHBlPWsuV29ya2Jvb2suU2hlZXRzW1NdLkNvZGVOYW1lfHxwZSl9Y2F0Y2h7fXZhciB5ZT1vbyhnZVsiIXJlZiJdfHwiQTEiKTtpZih5ZS5lLmM+MTYzODN8fHllLmUucj4xMDQ4NTc1KXtp''@;'; put 'put ''ZihSLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKGdlWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6WEZEMTA0ODU3NiIpO3llLmUuYz1NYXRoLm1pbih5ZS5lLmMsMTYzODMpLHllLmUucj1NYXRoLm1pbih5ZS5lLmMsMTA0ODU3NSl9cmV0dXJuIGdlWyIh''@;'; put 'put ''bGlua3MiXT1bXSxnZVsiIWNvbW1lbnRzIl09W10sRnIoUSwiQnJ0QmVnaW5TaGVldCIpLChrLnZiYXJhd3x8Z2VbIiFvdXRsaW5lIl0pJiZGcihRLCJCcnRXc1Byb3AiLGZ1bmN0aW9uIFRqKFMsUixrKXtudWxsPT1rJiYoaz1ibig4NCs0KlMubGVuZ3RoKSk7dmFyIEc9MTkyO1ImJihSLmFi''@;'; put 'put ''b3ZlJiYoRyY9LTY1KSxSLmxlZnQmJihHJj0tMTI5KSksay53cml0ZV9zaGlmdCgxLEcpO2Zvcih2YXIgUT0xO1E8MzsrK1Epay53cml0ZV9zaGlmdCgxLDApO3JldHVybiBtZih7YXV0bzoxfSxrKSxrLndyaXRlX3NoaWZ0KC00LC0xKSxrLndyaXRlX3NoaWZ0KC00LC0xKSxzNShTLGspLGsu''@;'; put 'put ''c2xpY2UoMCxrLmwpfShwZSxnZVsiIW91dGxpbmUiXSkpLEZyKFEsIkJydFdzRGltIixFaih5ZSkpLGZ1bmN0aW9uIGl6KFMsUixrKXtGcihTLCJCcnRCZWdpbldzVmlld3MiKSxGcihTLCJCcnRCZWdpbldzVmlldyIsZnVuY3Rpb24gTTgoUyxSLGspe251bGw9PWsmJihrPWJuKDMwKSk7dmFy''@;'; put 'put ''IEc9OTI0O3JldHVybigoKFJ8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiYoR3w9MzIpLFd0KFNbIiFncmlkbGluZXMiXSkmJihHJj0tNSksV3QoKCgoUnx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5ncmlkKSYmKEcmPS01KSxrLndyaXRlX3NoaWZ0KDIsRyksay53cml0ZV9zaGlmdCg0''@;'; put 'put ''LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDEwMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCg0LDApLGt9KFIsaykpLFJbIiFmcmVlemUiXSYmRnIoUywiQnJ0UGFuZSIsZnVuY3Rpb24gWmooUyl7dmFyIFI9Tm8oU1siIWZyZWV6ZSJdKSxrPWJuKDI5KTtyZXR1cm4gay53cml0ZV9zaGlmdCg4LFIuYywiZiIpLGsud3JpdGVfc2hpZnQoOCxS''@;'; put 'put ''LnIsImYiKSxrLndyaXRlX3NoaWZ0KDQsUi5yKSxrLndyaXRlX3NoaWZ0KDQsUi5jKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCgxLDMpLGt9KFIpKSxSWyIhc2VsIl0mJkZyKFMsIkJydFNlbCIsZnVuY3Rpb24gV2ooUyxSKXt2YXIgaz1ibigzNiksRz1TLmNlbGw7aWYoIUcp''@;'; put 'put ''e2lmKCFTLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtHPXFpKE1zKFMucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkucyl9dmFyIFE9InN0cmluZyI9PXR5cGVvZiBHP05vKEcpOkc7aWYoUil7dmFyIG9lPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgUj9ObyhSKTpSO2sud3JpdGVfc2hpZnQoNCxRLnI+PW9lLnImJlEuYz49b2UuYz8wOlEucj49b2UuciYmUS5jPG9lLmM/MjpRLnI8b2UuciYmUS5jPj1vZS5jPzE6Myl9ZWxzZSBrLndyaXRlX3NoaWZ0KDQsMyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoNCxRLnIpLGsud3JpdGVf''@;'; put 'put ''c2hpZnQoNCxRLmMpLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDQsMSksay53cml0ZV9zaGlmdCg0LFEuciksay53cml0ZV9zaGlmdCg0LFEuciksay53cml0ZV9zaGlmdCg0LFEuYyksay53cml0ZV9zaGlmdCg0LFEuYyksa30oUlsiIXNlbCJdLFJbIiFmcmVlemUiXSkpLEZy''@;'; put 'put ''KFMsIkJydEVuZFdzVmlldyIpLEZyKFMsIkJydEVuZFdzVmlld3MiKX0oUSxnZSxrLldvcmtib29rKSxmdW5jdGlvbiBueihTLFIpeyFSfHwhUlsiIWNvbHMiXXx8KEZyKFMsIkJydEJlZ2luQ29sSW5mb3MiKSxSWyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24oayxHKXtrJiZGcihTLCJCcnRD''@;'; put 'put ''b2xJbmZvIixmdW5jdGlvbiBHaihTLFIsayl7bnVsbD09ayYmKGs9Ym4oMTgpKTt2YXIgRz11OChTLFIpO2sud3JpdGVfc2hpZnQoLTQsUyksay53cml0ZV9zaGlmdCgtNCxTKSxrLndyaXRlX3NoaWZ0KDQsMjU2KihHLndpZHRofHwxMCkpLGsud3JpdGVfc2hpZnQoNCwwKTt2YXIgUT0wO3Jl''@;'; put 'put ''dHVybiBSLmhpZGRlbiYmKFF8PTEpLCJudW1iZXIiPT10eXBlb2YgRy53aWR0aCYmKFF8PTIpLFIubGV2ZWwmJihRfD1SLmxldmVsPDw4KSxrLndyaXRlX3NoaWZ0KDIsUSksa30oRyxrKSl9KSxGcihTLCJCcnRFbmRDb2xJbmZvcyIpKX0oUSxnZSksZnVuY3Rpb24gSkQoUyxSLGssRyl7dmFy''@;'; put 'put ''IFE9b28oUlsiIXJlZiJdfHwiQTEiKSxnZT0iIixwZT1bXTtGcihTLCJCcnRCZWdpblNoZWV0RGF0YSIpO3ZhciB5ZT1BcnJheS5pc0FycmF5KFIpLFBlPVEuZS5yO1JbIiFyb3dzIl0mJihQZT1NYXRoLm1heChRLmUucixSWyIhcm93cyJdLmxlbmd0aC0xKSk7Zm9yKHZhciBOZT1RLnMucjtO''@;'; put 'put ''ZTw9UGU7KytOZSl7Z2U9amkoTmUpLE1qKFMsUixRLE5lKTt2YXIgWWU9ITE7aWYoTmU8PVEuZS5yKWZvcih2YXIgZXQ9US5zLmM7ZXQ8PVEuZS5jOysrZXQpe05lPT09US5zLnImJihwZVtldF09VGEoZXQpKTt2YXIgY3Q9eWU/KFJbTmVdfHxbXSlbZXRdOlJbcGVbZXRdK2dlXTtZZT0hIWN0''@;'; put 'put ''JiZleihTLGN0LE5lLGV0LEcsUixZZSl9fUZyKFMsIkJydEVuZFNoZWV0RGF0YSIpfShRLGdlLDAsUiksZnVuY3Rpb24gT25lKFMsUil7UlsiIXByb3RlY3QiXSYmRnIoUywiQnJ0U2hlZXRQcm90ZWN0aW9uIixmdW5jdGlvbiBtYihTLFIpe3JldHVybiBudWxsPT1SJiYoUj1ibig2NikpLFIu''@;'; put 'put ''d3JpdGVfc2hpZnQoMixTLnBhc3N3b3JkP0h2KFMucGFzc3dvcmQpOjApLFIud3JpdGVfc2hpZnQoNCwxKSxbWyJvYmplY3RzIiwhMV0sWyJzY2VuYXJpb3MiLCExXSxbImZvcm1hdENlbGxzIiwhMF0sWyJmb3JtYXRDb2x1bW5zIiwhMF0sWyJmb3JtYXRSb3dzIiwhMF0sWyJpbnNlcnRDb2x1''@;'; put 'put ''bW5zIiwhMF0sWyJpbnNlcnRSb3dzIiwhMF0sWyJpbnNlcnRIeXBlcmxpbmtzIiwhMF0sWyJkZWxldGVDb2x1bW5zIiwhMF0sWyJkZWxldGVSb3dzIiwhMF0sWyJzZWxlY3RMb2NrZWRDZWxscyIsITFdLFsic29ydCIsITBdLFsiYXV0b0ZpbHRlciIsITBdLFsicGl2b3RUYWJsZXMiLCEwXSxb''@;'; put 'put ''InNlbGVjdFVubG9ja2VkQ2VsbHMiLCExXV0uZm9yRWFjaChmdW5jdGlvbihrKXtSLndyaXRlX3NoaWZ0KDQsa1sxXT9udWxsPT1TW2tbMF1dfHxTW2tbMF1dPzA6MTpudWxsIT1TW2tbMF1dJiZTW2tbMF1dPzA6MSl9KSxSfShSWyIhcHJvdGVjdCJdKSl9KFEsZ2UpLGZ1bmN0aW9uIFFEKFMs''@;'; put 'put ''UixrLEcpe2lmKFJbIiFhdXRvZmlsdGVyIl0pe3ZhciBRPVJbIiFhdXRvZmlsdGVyIl0sb2U9InN0cmluZyI9PXR5cGVvZiBRLnJlZj9RLnJlZjpyYShRLnJlZik7ay5Xb3JrYm9va3x8KGsuV29ya2Jvb2s9e1NoZWV0czpbXX0pLGsuV29ya2Jvb2suTmFtZXN8fChrLldvcmtib29rLk5hbWVz''@;'; put 'put ''PVtdKTt2YXIgZ2U9ay5Xb3JrYm9vay5OYW1lcyxwZT1NcyhvZSk7cGUucy5yPT1wZS5lLnImJihwZS5lLnI9TXMoUlsiIXJlZiJdKS5lLnIsb2U9cmEocGUpKTtmb3IodmFyIHllPTA7eWU8Z2UubGVuZ3RoOysreWUpe3ZhciBQZT1nZVt5ZV07aWYoIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9''@;'; put 'put ''PVBlLk5hbWUmJlBlLlNoZWV0PT1HKXtQZS5SZWY9IiciK2suU2hlZXROYW1lc1tHXSsiJyEiK29lO2JyZWFrfX15ZT09Z2UubGVuZ3RoJiZnZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0OkcsUmVmOiInIitrLlNoZWV0TmFtZXNbR10rIichIitvZX0pLEZyKFMs''@;'; put 'put ''IkJydEJlZ2luQUZpbHRlciIsZ2Yob28ob2UpKSksRnIoUywiQnJ0RW5kQUZpbHRlciIpfX0oUSxnZSxrLFMpLGZ1bmN0aW9uIHR6KFMsUil7IVJ8fCFSWyIhbWVyZ2VzIl18fChGcihTLCJCcnRCZWdpbk1lcmdlQ2VsbHMiLGZ1bmN0aW9uIFlEKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJu''@;'; put 'put ''KDQpKSxSLndyaXRlX3NoaWZ0KDQsUyksUn0oUlsiIW1lcmdlcyJdLmxlbmd0aCkpLFJbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGspe0ZyKFMsIkJydE1lcmdlQ2VsbCIsQzgoaykpfSksRnIoUywiQnJ0RW5kTWVyZ2VDZWxscyIpKX0oUSxnZSksZnVuY3Rpb24gb3ooUyxSKXtpZihS''@;'; put 'put ''KXtGcihTLCJCcnRCZWdpbkRWYWxzIixmdW5jdGlvbiB2YihTLFIpe251bGw9PVImJihSPWJuKDE4KSksUi53cml0ZV9zaGlmdCgyLDApLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgaz0wLEc9MDtHPFMubGVuZ3RoOysr''@;'; put 'put ''RykoKFNbR118fHt9KS5yZWZ8fHt9KS5zJiZTW0ddLnJlZi5zLmM8MHx8KytrO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsayksUn0oUikpO2Zvcih2YXIgaz0wO2s8Ui5sZW5ndGg7KytrKSgoUltrXXx8e30pLnJlZnx8e30pLnMmJlJba10ucmVmLnMuYzwwfHxGcihTLCJCcnREVmFsIixYRChS''@;'; put 'put ''W2tdKSk7RnIoUywiQnJ0RW5kRFZhbHMiKX19KFEsZ2VbIiF2YWxpZGF0aW9ucyJdKSxmdW5jdGlvbiBiYihTLFIsayl7UlsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihHKXtpZihHWzFdLlRhcmdldCl7dmFyIFE9RXIoaywtMSxHWzFdLlRhcmdldC5yZXBsYWNlKC8jLiokLywiIiksS2Eu''@;'; put 'put ''SExJTkspO0ZyKFMsIkJydEhMaW5rIixmdW5jdGlvbiBTOChTLFIpe3ZhciBrPWJuKDUwKzQqKFNbMV0uVGFyZ2V0Lmxlbmd0aCsoU1sxXS5Ub29sdGlwfHwiIikubGVuZ3RoKSk7Z2Yoe3M6Tm8oU1swXSksZTpObyhTWzBdKX0sayksYzUoInJJZCIrUixrKTt2YXIgRz1TWzFdLlRhcmdldC5p''@;'; put 'put ''bmRleE9mKCIjIik7cmV0dXJuIEZjKCgtMT09Rz8iIjpTWzFdLlRhcmdldC5zbGljZShHKzEpKXx8IiIsayksRmMoU1sxXS5Ub29sdGlwfHwiIixrKSxGYygiIixrKSxrLnNsaWNlKDAsay5sKX0oRyxRKSl9fSksZGVsZXRlIFJbIiFsaW5rcyJdfShRLGdlLEcpLGdlWyIhbWFyZ2lucyJdJiZG''@;'; put 'put ''cihRLCJCcnRNYXJnaW5zIixmdW5jdGlvbiBLaihTLFIpe3JldHVybiBudWxsPT1SJiYoUj1ibig0OCkpLFgzKFMpLEtELmZvckVhY2goZnVuY3Rpb24oayl7T3UoU1trXSxSKX0pLFJ9KGdlWyIhbWFyZ2lucyJdKSksKCFSfHxSLmlnbm9yZUVDfHxudWxsPT1SLmlnbm9yZUVDKSYmZnVuY3Rp''@;'; put 'put ''b24gWjUoUyxSKXshUnx8IVJbIiFyZWYiXXx8KEZyKFMsIkJydEJlZ2luQ2VsbElnbm9yZUVDcyIpLEZyKFMsIkJydENlbGxJZ25vcmVFQyIsZnVuY3Rpb24gcWooUyl7dmFyIFI9Ym4oMjQpO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsNCksUi53cml0ZV9zaGlmdCg0LDEpLGdmKFMsUiksUn0o''@;'; put 'put ''b28oUlsiIXJlZiJdKSkpLEZyKFMsIkJydEVuZENlbGxJZ25vcmVFQ3MiKSl9KFEsZ2UpLGZ1bmN0aW9uIHJ6KFMsUixrLEcpe2lmKFJbIiFjb21tZW50cyJdLmxlbmd0aD4wKXt2YXIgUT1FcihHLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoaysxKSsiLnZtbCIsS2EuVk1MKTtGcihT''@;'; put 'put ''LCJCcnRMZWdhY3lEcmF3aW5nIixjNSgicklkIitRKSksUlsiIWxlZ2FjeSJdPVF9fShRLGdlLFMsRyksRnIoUSwiQnJ0RW5kU2hlZXQiKSxRLmVuZCgpfWZ1bmN0aW9uIHg4KFMpe3ZhciBHLFI9W10saz1TLm1hdGNoKC9ePGM6bnVtQ2FjaGU+Lyk7KFMubWF0Y2goLzxjOnB0IGlkeD0iKFxk''@;'; put 'put ''KikiPiguKj8pPFwvYzpwdD4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihvZSl7dmFyIGdlPW9lLm1hdGNoKC88YzpwdCBpZHg9IihcZCo/KSI+PGM6dj4oLiopPFwvYzp2PjxcL2M6cHQ+Lyk7Z2UmJihSWytnZVsxXV09az8rZ2VbMl06Z2VbMl0pfSk7dmFyIFE9UXIoKFMubWF0Y2goLzxj''@;'; put 'put ''OmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oUy5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihvZSl7Rz1vZS5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLFtSLFEsR119S2Eu''@;'; put 'put ''Q0hBUlQ9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnQiLEthLkNIQVJURVg9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMTQvcmVsYXRpb25zaGlwcy9jaGFydEV4Ijt2YXIgbHo9''@;'; put 'put ''LzwoPzpcdys6KT9jaGFydD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y2hhcnQ+LyxSUz0vPCg/Olx3KzopP3Bsb3RBcmVhPihbXHNcU10qPyk8XC8oPzpcdys6KT9wbG90QXJlYT4vLFBuZT0vPCg/Olx3KzopP2xlZ2VuZD4oW1xzXFNdKj8pPFwvKD86XHcrOik/bGVnZW5kPi8sZUk9LzwoPzpc''@;'; put 'put ''dys6KT90aXRsZT4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGl0bGU+LztmdW5jdGlvbiBiMihTLFIsayxHLFEsb2UsZ2UscGUpe3ZhciB5ZT1vZXx8eyIhdHlwZSI6ImNoYXJ0In07aWYoIVMpcmV0dXJuIG9lO2dlJiZnZS5BbmNob3ImJih5ZVsiIXBvcyJdPUw1KGdlLkFuY2hvcixwZSkseWVb''@;'; put 'put ''IiFwb3NUeXBlIl09Z2UuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIikseWVbIiFhYnNwb3MiXT1MNShnZS5BbmNob3IscGUpLHllWyIhcmVscG9zIl09QUMoZ2UuQW5jaG9yLHBlKSkseWVbIiFwbG90Il09W107dmFyIFBlPSIiLE5lPSIiLFllPVMubWF0Y2gobHopO1llPyhQZT1T''@;'; put 'put ''LnNsaWNlKDAsWWUuaW5kZXgpLE5lPVMuc2xpY2UoWWUuaW5kZXgrWWVbMF0ubGVuZ3RoKSk6UGU9TmU9Uzt2YXIgZXQ9W10sY3Q9UGUubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fFMubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fE5lLm1hdGNoKC88YzpsYW5nLio/Pi8pO3JldHVybiBjdCYmKHllWyIh''@;'; put 'put ''bGFuZyJdPSh2cihjdFswXSl8fHt9KS52YWx8fCJlbi1VUyIpLFllJiYoKGV0PVllWzFdLm1hdGNoKGVJKSkmJmZ1bmN0aW9uIHN6KFMsUil7dmFyIGs9IiI7Uy5tYXRjaCgvPGM6cmljaD4vKSYmUy5yZXBsYWNlKC88YTp0PihbXHNcU10qPyk8XC9hOnQ+L2csZnVuY3Rpb24oRyxRKXtrKz1R''@;'; put 'put ''fSksUlsiIXRpdGxlIl09a3x8IkNoYXJ0IFRpdGxlIn0oZXRbMV0seWUpLGZ1bmN0aW9uIEZuZShTLFIpe2lmKFMpe3ZhciBrPTAsRz0wLFE9IkEiLG9lPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19O1MucmVwbGFjZSh0SSxmdW5jdGlvbihnZSxwZSl7dmFyIHllPXt0OnBlLGM6ayx3''@;'; put 'put ''OjAsc2VyOltdfSxQZT1bXSxOZT0oZ2UubWF0Y2goLzxjOnNlci8pfHxbXSkuaW5kZXgsWWU9TmU/Z2Uuc2xpY2UoMCxOZSk6Z2U7InNjYXR0ZXIiPT1wZSYmKFBlPWdlLm1hdGNoKC88YzpzY2F0dGVyU3R5bGUoW15cLz5dKilcLz4vbSkpJiZ2cihQZVswXSksImJhciI9PXBlJiYoUGU9Z2Uu''@;'; put 'put ''bWF0Y2goLzxjOmJhckRpcihbXlwvPl0qKVwvPi9tKSkmJih5ZS5iYXJEaXI9ImJhciI9PXZyKFBlWzBdKS52YWw/ImgiOiJ2IiksKFBlPVllLm1hdGNoKC88Yzpncm91cGluZyhbXlwvPl0qKVwvPi9tKSkmJih5ZS5ncm91cGluZz12cihQZVswXSkudmFsfHwic3RhbmRhcmQiKSwoZ2UubWF0''@;'; put 'put ''Y2goY3opfHxbXSkuZm9yRWFjaChmdW5jdGlvbihjdCl7dmFyIEV0PVtdLGF0PXt9LGJ0PVtdO2lmKGN0Lm1hdGNoKC88Yzp0eD4vKSl7dmFyIGp0PXg4KChjdC5tYXRjaCgvPGM6dHg+KFtcc1xTXSo/KTxcL2M6dHg+Lyl8fFtdKVsxXXx8IiIpfHxbXTtqdFswXSYmanRbMF1bMF0mJihhdC5u''@;'; put 'put ''YW1lPWp0WzBdWzBdKSxqdFsyXSYmKGF0Lm5hbWVyZWY9anRbMl0pfVsieFZhbCIsInlWYWwiLCJjYXQiLCJ2YWwiLCJidWJibGVTaXplIl0uZm9yRWFjaChmdW5jdGlvbihrdCl7dmFyIEt0LE90PWN0Lm1hdGNoKG5ldyBSZWdFeHAoIjxjOiIra3QrIj5bXFxzXFxTXSo/PFxcL2M6IitrdCsi''@;'; put 'put ''PiIsImdtIikpO090JiYoKE90WzBdLm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFRuKXtLdD1Ubi5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLChPdFswXS5tYXRjaCgvPGM6KD86XHcqKUNhY2hlPltcc1xTXSo/PFwvYzooPzpcdyopQ2FjaGU+L2dt''@;'; put 'put ''KXx8W10pLmZvckVhY2goZnVuY3Rpb24oVG4pe3ZhciBycj14OChUbik7b2Uucy5yPW9lLnMuYz0wLG9lLmUuYz1rLFE9VGEoaykscnJbMF0uZm9yRWFjaChmdW5jdGlvbihTbixscil7UltRK2ppKGxyKV09e3Q6Im51bWJlciI9PXR5cGVvZiBTbj8ibiI6InMiLHY6U24sejpyclsxXX0sRz1s''@;'; put 'put ''cn0pLG9lLmUucjxHJiYob2UuZS5yPUcpLCsrayx5ZS53KyssRXQucHVzaChrdCksKHJyWzJdfHxLdCkmJmJ0LnB1c2gocnJbMl18fEt0KSwidmFsIj09a3QmJihhdC56PXJyWzFdfHwiR2VuZXJhbCIpfSkpfSksKFBlPWdlLm1hdGNoKC88YzpzbW9vdGgoW15cLz5dKilcLz4vbSkpJiYoYXQu''@;'; put 'put ''c21vb3RoPW51bGw9PXZyKFBlWzBdKS52YWx8fHRpKHZyKFBlWzBdKS52YWwpKSxhdC5jb2xzPUV0LGF0LnJhbmdlcz1idCx5ZS5zZXIucHVzaChhdCl9KSwiZG91Z2hudXQiPT1wZSYmKFBlPWdlLm1hdGNoKC88Yzpob2xlU2l6ZShbXlwvPl0qKVwvPi9tKSkmJih5ZS5ob2xlPSh2cihQZVsw''@;'; put 'put ''XSkudmFsfHwxMCkvMTAwKSxSWyIhcGxvdCJdLnB1c2goeWUpfSksaz4wJiYoUlsiIXJlZiJdPXJhKG9lKSl9fSgoWWVbMV0ubWF0Y2goUlMpfHxbXSlbMV0seWUpLG51bGwhPShldD1ZZVsxXS5tYXRjaChQbmUpKSYmZnVuY3Rpb24gRW8oUyxSKXt2YXIgaztSWyIhbGVnZW5kIl09e3Bvczoi''@;'; put 'put ''ciJ9LChrPVMubWF0Y2goLzxjOmxlZ2VuZFBvcyhbXlwvPl0qKVwvPi9tKSkmJihSWyIhbGVnZW5kIl0ucG9zPXZyKGtbMF0pLnZhbHx8InIiKX0oZXRbMF0seWUpKSx5ZX12YXIgdEk9LzxjOigoPzphcmVhfGxpbmV8c3RvY2t8cmFkYXJ8c2NhdHRlcnxwaWV8ZG91Z2hudXR8YmFyfG9mUGll''@;'; put 'put ''fHN1cmZhY2V8YnViYmxlKSg/OjNEKT8pQ2hhcnRbXj5dKj4oW1xzXFNdKj8pPFwvYzooPzphcmVhfGxpbmV8c3RvY2t8cmFkYXJ8c2NhdHRlcnxwaWV8ZG91Z2hudXR8YmFyfG9mUGllfHN1cmZhY2V8YnViYmxlKSg/OjNEKT9DaGFydD4vZ20sY3o9LzxjOnNlcj4oW1xzXFNdKj8pPFwvYzpz''@;'; put 'put ''ZXI+L2dtO0thLkNTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0c2hlZXQiO3ZhciBXYT1QcigiY2hhcnRzaGVldCIsbnVsbCx7eG1sbnM6WWkubWFpblswXSwieG1sbnM6ciI6WWkucn0pO2Z1bmN0aW9u''@;'; put 'put ''IExTKFMsUixrLEcpe3ZhciBRPVtJaSxXYV07cmV0dXJuIFEucHVzaCgiPHNoZWV0UHIvPiIpLFEucHVzaCgnPHNoZWV0Vmlld3M+PHNoZWV0VmlldyB6b29tU2NhbGU9IjEwMCIgd29ya2Jvb2tWaWV3SWQ9IjAiIHpvb21Ub0ZpdD0iMSIvPjwvc2hlZXRWaWV3cz4nKSxRW1EubGVuZ3RoXT1Q''@;'; put 'put ''cigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQxIn0pLEVyKEcsLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyhTKzEpKyIueG1sIixLYS5EUkFXKSxRLmxlbmd0aD4yJiYoUVtRLmxlbmd0aF09IjwvY2hhcnRzaGVldD4iLFFbMV09UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5qb2luKCIi''@;'; put 'put ''KX1mdW5jdGlvbiBPUygpe3ZhciBTPWJpKCk7cmV0dXJuIEZyKFMsIkJydEJlZ2luU2hlZXQiKSxGcihTLCJCcnRFbmRTaGVldCIpLFMuZW5kKCl9dmFyIHliPVtbImFsbG93UmVmcmVzaFF1ZXJ5IiwhMSwiYm9vbCJdLFsiYXV0b0NvbXByZXNzUGljdHVyZXMiLCEwLCJib29sIl0sWyJiYWNr''@;'; put 'put ''dXBGaWxlIiwhMSwiYm9vbCJdLFsiY2hlY2tDb21wYXRpYmlsaXR5IiwhMSwiYm9vbCJdLFsiQ29kZU5hbWUiLCIiXSxbImRhdGUxOTA0IiwhMSwiYm9vbCJdLFsiZGVmYXVsdFRoZW1lVmVyc2lvbiIsMCwiaW50Il0sWyJmaWx0ZXJQcml2YWN5IiwhMSwiYm9vbCJdLFsiaGlkZVBpdm90Rmll''@;'; put 'put ''bGRMaXN0IiwhMSwiYm9vbCJdLFsicHJvbXB0ZWRTb2x1dGlvbnMiLCExLCJib29sIl0sWyJwdWJsaXNoSXRlbXMiLCExLCJib29sIl0sWyJyZWZyZXNoQWxsQ29ubmVjdGlvbnMiLCExLCJib29sIl0sWyJzYXZlRXh0ZXJuYWxMaW5rVmFsdWVzIiwhMCwiYm9vbCJdLFsic2hvd0JvcmRlclVu''@;'; put 'put ''c2VsZWN0ZWRUYWJsZXMiLCEwLCJib29sIl0sWyJzaG93SW5rQW5ub3RhdGlvbiIsITAsImJvb2wiXSxbInNob3dPYmplY3RzIiwiYWxsIl0sWyJzaG93UGl2b3RDaGFydEZpbHRlciIsITEsImJvb2wiXSxbInVwZGF0ZUxpbmtzIiwidXNlclNldCJdXSxuST1bWyJhY3RpdmVUYWIiLDAsImlu''@;'; put 'put ''dCJdLFsiYXV0b0ZpbHRlckRhdGVHcm91cGluZyIsITAsImJvb2wiXSxbImZpcnN0U2hlZXQiLDAsImludCJdLFsibWluaW1pemVkIiwhMSwiYm9vbCJdLFsic2hvd0hvcml6b250YWxTY3JvbGwiLCEwLCJib29sIl0sWyJzaG93U2hlZXRUYWJzIiwhMCwiYm9vbCJdLFsic2hvd1ZlcnRpY2Fs''@;'; put 'put ''U2Nyb2xsIiwhMCwiYm9vbCJdLFsidGFiUmF0aW8iLDYwMCwiaW50Il0sWyJ2aXNpYmlsaXR5IiwidmlzaWJsZSJdXSxyST1bXSxmej1bWyJjYWxjQ29tcGxldGVkIiwidHJ1ZSJdLFsiY2FsY01vZGUiLCJhdXRvIl0sWyJjYWxjT25TYXZlIiwidHJ1ZSJdLFsiY29uY3VycmVudENhbGMiLCJ0''@;'; put 'put ''cnVlIl0sWyJmdWxsQ2FsY09uTG9hZCIsImZhbHNlIl0sWyJmdWxsUHJlY2lzaW9uIiwidHJ1ZSJdLFsiaXRlcmF0ZSIsImZhbHNlIl0sWyJpdGVyYXRlQ291bnQiLCIxMDAiXSxbIml0ZXJhdGVEZWx0YSIsIjAuMDAxIl0sWyJyZWZNb2RlIiwiQTEiXV07ZnVuY3Rpb24gaUkoUyxSKXtmb3Io''@;'; put 'put ''dmFyIGs9MDtrIT1TLmxlbmd0aDsrK2spZm9yKHZhciBHPVNba10sUT0wO1EhPVIubGVuZ3RoOysrUSl7dmFyIG9lPVJbUV07aWYobnVsbD09R1tvZVswXV0pR1tvZVswXV09b2VbMV07ZWxzZSBzd2l0Y2gob2VbMl0pe2Nhc2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiBHW29lWzBdXSYmKEdb''@;'; put 'put ''b2VbMF1dPXRpKEdbb2VbMF1dKSk7YnJlYWs7Y2FzZSJpbnQiOiJzdHJpbmciPT10eXBlb2YgR1tvZVswXV0mJihHW29lWzBdXT1wYXJzZUludChHW29lWzBdXSwxMCkpfX19ZnVuY3Rpb24gUTMoUyxSKXtmb3IodmFyIGs9MDtrIT1SLmxlbmd0aDsrK2spe3ZhciBHPVJba107aWYobnVsbD09''@;'; put 'put ''U1tHWzBdXSlTW0dbMF1dPUdbMV07ZWxzZSBzd2l0Y2goR1syXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIFNbR1swXV0mJihTW0dbMF1dPXRpKFNbR1swXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBTW0dbMF1dJiYoU1tHWzBdXT1wYXJzZUludChTW0dbMF1d''@;'; put 'put ''LDEwKSl9fX1mdW5jdGlvbiBQUyhTKXtRMyhTLldCUHJvcHMseWIpLFEzKFMuQ2FsY1ByLGZ6KSxpSShTLldCVmlldyxuSSksaUkoUy5TaGVldHMsckkpLGM4LmRhdGUxOTA0PXRpKFMuV0JQcm9wcy5kYXRlMTkwNCl9dmFyIHB6PSJdWyo/L1xcIi5zcGxpdCgiIik7ZnVuY3Rpb24gX2IoUyxS''@;'; put 'put ''KXtpZihTLmxlbmd0aD4zMSl7aWYoUilyZXR1cm4hMTt0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWVzIGNhbm5vdCBleGNlZWQgMzEgY2hhcnMiKX12YXIgaz0hMDtyZXR1cm4gcHouZm9yRWFjaChmdW5jdGlvbihHKXtpZigtMSE9Uy5pbmRleE9mKEcpKXtpZighUil0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlNoZWV0IG5hbWUgY2Fubm90IGNvbnRhaW4gOiBcXCAvID8gKiBbIF0iKTtrPSExfX0pLGt9dmFyIEU4PS88XHcrOndvcmtib29rLyxzST1Qcigid29ya2Jvb2siLG51bGwse3htbG5zOllpLm1haW5bMF0sInhtbG5zOnIiOllpLnJ9KTtmdW5jdGlvbiBUOChTLFIpe3ZhciBrPVJ8fHt9''@;'; put 'put ''LEc9W0lpXTtHW0cubGVuZ3RoXT1zSTt2YXIgUT1TLldvcmtib29rJiYoUy5Xb3JrYm9vay5OYW1lc3x8W10pLmxlbmd0aD4wO1MuV29ya2Jvb2smJlMuV29ya2Jvb2suTW9kaWZ5JiYoR1tHLmxlbmd0aF09ZnVuY3Rpb24gZXAoUyl7dmFyIFI9e307cmV0dXJuIFMud2FybiYmKFIucmVhZE9u''@;'; put 'put ''bHlSZWNvbW1lbmRlZD0xKSxSLnVzZXJOYW1lPVMudXNlcnx8IlNoZWV0IEpTIixTLmVuY3J5cHRpb24mJihTLmVuY3J5cHRpb24uYWxnbyYmKFIuYWxnb3JpdGhtTmFtZT1TLmVuY3J5cHRpb24uYWxnbyksUy5lbmNyeXB0aW9uLmhhc2gmJihSLmhhc2hWYWx1ZT1TLmVuY3J5cHRpb24uaGFz''@;'; put 'put ''aCksUy5lbmNyeXB0aW9uLnNhbHQmJihSLnNhbHRWYWx1ZT1TLmVuY3J5cHRpb24uc2FsdCksUy5lbmNyeXB0aW9uLnNwaW4mJihSLnNwaW5Db3VudD1TLmVuY3J5cHRpb24uc3BpbikpLFByKCJmaWxlU2hhcmluZyIsbnVsbCxSKX0oUy5Xb3JrYm9vay5Nb2RpZnkpKTt2YXIgb2U9e2NvZGVO''@;'; put 'put ''YW1lOiJUaGlzV29ya2Jvb2sifTtTLldvcmtib29rJiZTLldvcmtib29rLldCUHJvcHMmJih5Yi5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtudWxsIT1TLldvcmtib29rLldCUHJvcHNbUGVbMF1dJiZTLldvcmtib29rLldCUHJvcHNbUGVbMF1dIT1QZVsxXSYmKG9lW1BlWzBdXT1TLldvcmtib29r''@;'; put 'put ''LldCUHJvcHNbUGVbMF1dKX0pLFMuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSYmKG9lLmNvZGVOYW1lPVMuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSxkZWxldGUgb2UuQ29kZU5hbWUpKSxHW0cubGVuZ3RoXT1Qcigid29ya2Jvb2tQciIsbnVsbCxvZSksUy5Xb3JrYm9vayYmUy5Xb3Jr''@;'; put 'put ''Ym9vay5Qcm90ZWN0aW9uJiYoR1tHLmxlbmd0aF09ZnVuY3Rpb24gd2IoUyl7dmFyIFI9e307cmV0dXJuIFMubG9ja1N0cnVjdHVyZSYmKFIubG9ja1N0cnVjdHVyZT0xKSxTLmxvY2tXaW5kb3dzJiYoUi5sb2NrV2luZG93cz0xKSxTLmVuY3J5cHRpb24mJihTLmVuY3J5cHRpb24uYWxnbyYm''@;'; put 'put ''KFIud29ya2Jvb2tBbGdvcml0aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdvKSxTLmVuY3J5cHRpb24uaGFzaCYmKFIud29ya2Jvb2tIYXNoVmFsdWU9Uy5lbmNyeXB0aW9uLmhhc2gpLFMuZW5jcnlwdGlvbi5zYWx0JiYoUi53b3JrYm9va1NhbHRWYWx1ZT1TLmVuY3J5cHRpb24uc2FsdCksUy5l''@;'; put 'put ''bmNyeXB0aW9uLnNwaW4mJihSLndvcmtib29rU3BpbkNvdW50PVMuZW5jcnlwdGlvbi5zcGluKSksUHIoIndvcmtib29rUHJvdGVjdGlvbiIsbnVsbCxSKX0oUy5Xb3JrYm9vay5Qcm90ZWN0aW9uKSk7dmFyIGdlPVMuV29ya2Jvb2smJlMuV29ya2Jvb2suU2hlZXRzfHxbXSxwZT0wO2lmKGdl''@;'; put 'put ''JiZnZVswXSYmZ2VbMF0uSGlkZGVuKXtmb3IoR1tHLmxlbmd0aF09Ijxib29rVmlld3M+IixwZT0wO3BlIT1TLlNoZWV0TmFtZXMubGVuZ3RoJiZnZVtwZV0mJmdlW3BlXS5IaWRkZW47KytwZSk7cGU9PVMuU2hlZXROYW1lcy5sZW5ndGgmJihwZT0wKSxHW0cubGVuZ3RoXT0nPHdvcmtib29r''@;'; put 'put ''VmlldyBmaXJzdFNoZWV0PSInK3BlKyciIGFjdGl2ZVRhYj0iJytwZSsnIi8+JyxHW0cubGVuZ3RoXT0iPC9ib29rVmlld3M+In1mb3IoR1tHLmxlbmd0aF09IjxzaGVldHM+IixwZT0wO3BlIT1TLlNoZWV0TmFtZXMubGVuZ3RoOysrcGUpe3ZhciB5ZT17bmFtZTpMcihTLlNoZWV0TmFtZXNb''@;'; put 'put ''cGVdLnNsaWNlKDAsMzEpKX07aWYoeWUuc2hlZXRJZD0iIisocGUrMSkseWVbInI6aWQiXT0icklkIisocGUrMSksZ2VbcGVdKXN3aXRjaChnZVtwZV0uSGlkZGVuKXtjYXNlIDE6eWUuc3RhdGU9ImhpZGRlbiI7YnJlYWs7Y2FzZSAyOnllLnN0YXRlPSJ2ZXJ5SGlkZGVuIn1HW0cubGVuZ3Ro''@;'; put 'put ''XT1Qcigic2hlZXQiLG51bGwseWUpfXJldHVybiBHW0cubGVuZ3RoXT0iPC9zaGVldHM+IixTLkV4dGVybmFsV0ImJlMuRXh0ZXJuYWxXQi5sZW5ndGgmJihHW0cubGVuZ3RoXT0iPGV4dGVybmFsUmVmZXJlbmNlcz4iLChTLkV4dGVybmFsV0J8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFBlLE5l''@;'; put 'put ''KXt2YXIgWWU9RXIoay53YnJlbHMsLTEsImV4dGVybmFsTGlua3MvZXh0ZXJuYWxMaW5rIisoTmUrMSkrIi54bWwiLEthLlhMSU5LKTtHW0cubGVuZ3RoXT0nPGV4dGVybmFsUmVmZXJlbmNlIHI6aWQ9InJJZCcrWWUrJyIvPid9KSxHW0cubGVuZ3RoXT0iPC9leHRlcm5hbFJlZmVyZW5jZXM+''@;'; put 'put ''IiksUSYmKEdbRy5sZW5ndGhdPSI8ZGVmaW5lZE5hbWVzPiIsUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5OYW1lcyYmUy5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKFBlKXt2YXIgTmU9e25hbWU6UGUuTmFtZX07UGUuQ29tbWVudCYmKE5lLmNvbW1lbnQ9UGUuQ29tbWVudCksbnVs''@;'; put 'put ''bCE9UGUuU2hlZXQmJihOZS5sb2NhbFNoZWV0SWQ9IiIrUGUuU2hlZXQpLFBlLkhpZGRlbiYmKE5lLmhpZGRlbj0iMSIpLFBlLlJlZiYmKEdbRy5sZW5ndGhdPVByKCJkZWZpbmVkTmFtZSIsTHIoUGUuUmVmKSxOZSkpfSksR1tHLmxlbmd0aF09IjwvZGVmaW5lZE5hbWVzPiIpLGsmJmsucGl2''@;'; put 'put ''b3RzJiZrLnBpdm90cy5sZW5ndGg+MCYmKEcucHVzaCgiPHBpdm90Q2FjaGVzPiIpLGsucGl2b3RzLmZvckVhY2goZnVuY3Rpb24oUGUsTmUpe0cucHVzaCgnPHBpdm90Q2FjaGUgY2FjaGVJZD0iJysoTmUrMSkrJyIgcjppZD0icklkJytQZVsyXSsnIi8+Jyl9KSxHLnB1c2goIjwvcGl2b3RD''@;'; put 'put ''YWNoZXM+IikpLEcubGVuZ3RoPjImJihHW0cubGVuZ3RoXT0iPC93b3JrYm9vaz4iLEdbMV09R1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksRy5qb2luKCIiKX1mdW5jdGlvbiBteihTLFIpe3JldHVybiBSfHwoUj1ibigxMjcpKSxSLndyaXRlX3NoaWZ0KDQsUy5IaWRkZW4pLFIud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCxTLmlUYWJJRCksYzUoUy5zdHJSZWxJRCxSKSxGYyhTLm5hbWUuc2xpY2UoMCwzMSksUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9ZnVuY3Rpb24gdHAoUyxSKXt2YXIgaz17fTtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLGsuQXJjaElEPVMucmVhZF9zaGlmdCg0KSxTLmwr''@;'; put 'put ''PVItOCxrfWZ1bmN0aW9uIFNiKFMsUil7dmFyIGs9YmkoKTtyZXR1cm4gRnIoaywiQnJ0QmVnaW5Cb29rIiksRnIoaywiQnJ0RmlsZVZlcnNpb24iLGZ1bmN0aW9uIGNJKFMsUil7Unx8KFI9Ym4oMTI3KSk7Zm9yKHZhciBrPTA7NCE9azsrK2spUi53cml0ZV9zaGlmdCg0LDApO3JldHVybiBG''@;'; put 'put ''YygiU2hlZXRKUyIsUiksRmMody52ZXJzaW9uLFIpLEZjKHcudmVyc2lvbixSKSxGYygiNzI2MiIsUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KCkpLEZyKGssIkJydFdiUHJvcCIsZnVuY3Rpb24gbEkoUyxSKXtSfHwoUj1ibig3MikpO3ZhciBrPTA7cmV0dXJuIFMmJlMuZmls''@;'; put 'put ''dGVyUHJpdmFjeSYmKGt8PTgpLFIud3JpdGVfc2hpZnQoNCxrKSxSLndyaXRlX3NoaWZ0KDQsMCksczUoUyYmUy5Db2RlTmFtZXx8IlRoaXNXb3JrYm9vayIsUiksUi5zbGljZSgwLFIubCl9KFMuV29ya2Jvb2smJlMuV29ya2Jvb2suV0JQcm9wc3x8bnVsbCkpLGZ1bmN0aW9uIHZ6KFMsUil7''@;'; put 'put ''aWYoUi5Xb3JrYm9vayYmUi5Xb3JrYm9vay5TaGVldHMpe2Zvcih2YXIgaz1SLldvcmtib29rLlNoZWV0cyxHPTAsUT0tMSxvZT0tMTtHPGsubGVuZ3RoOysrRykha1tHXXx8IWtbR10uSGlkZGVuJiYtMT09UT9RPUc6MT09a1tHXS5IaWRkZW4mJi0xPT1vZSYmKG9lPUcpO29lPlF8fChGcihT''@;'; put 'put ''LCJCcnRCZWdpbkJvb2tWaWV3cyIpLEZyKFMsIkJydEJvb2tWaWV3IixmdW5jdGlvbiB1SShTLFIpe3JldHVybiBSfHwoUj1ibigyOSkpLFIud3JpdGVfc2hpZnQoLTQsMCksUi53cml0ZV9zaGlmdCgtNCw0NjApLFIud3JpdGVfc2hpZnQoNCwyODgwMCksUi53cml0ZV9zaGlmdCg0LDE3NjAw''@;'; put 'put ''KSxSLndyaXRlX3NoaWZ0KDQsNTAwKSxSLndyaXRlX3NoaWZ0KDQsUyksUi53cml0ZV9zaGlmdCg0LFMpLFIud3JpdGVfc2hpZnQoMSwxMjApLFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfShRKSksRnIoUywiQnJ0RW5kQm9va1ZpZXdzIikpfX0oayxTKSxmdW5jdGlvbiBDYihTLFIp''@;'; put 'put ''e0ZyKFMsIkJydEJlZ2luQnVuZGxlU2hzIik7Zm9yKHZhciBrPTA7ayE9Ui5TaGVldE5hbWVzLmxlbmd0aDsrK2spRnIoUywiQnJ0QnVuZGxlU2giLG16KHtIaWRkZW46Ui5Xb3JrYm9vayYmUi5Xb3JrYm9vay5TaGVldHMmJlIuV29ya2Jvb2suU2hlZXRzW2tdJiZSLldvcmtib29rLlNoZWV0''@;'; put 'put ''c1trXS5IaWRkZW58fDAsaVRhYklEOmsrMSxzdHJSZWxJRDoicklkIisoaysxKSxuYW1lOlIuU2hlZXROYW1lc1trXX0pKTtGcihTLCJCcnRFbmRCdW5kbGVTaHMiKX0oayxTKSxGcihrLCJCcnRFbmRCb29rIiksay5lbmQoKX1mdW5jdGlvbiBkSShTLFIsayxHLFEpe3JldHVybigiLmJpbiI9''@;'; put 'put ''PT1SLnNsaWNlKC00KT9XNTpWRCkoUyxrLEcsUSl9ZnVuY3Rpb24gaEkoUyxSLGssRyxRKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/T1M6TFMpKFMsayxHLFEpfWZ1bmN0aW9uIGZJKFMsUixrKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/dWs6UnYpKFMsayl9ZnVuY3Rpb24g''@;'; put 'put ''QXooUyxSLGspe3JldHVybigiLmJpbiI9PT1SLnNsaWNlKC00KT9OQzpIQykoUyxrKX12YXIgQlM9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkvZyxNYj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1''@;'; put 'put ''bmN0aW9uIEgwKFMsUil7dmFyIGs9Uy5zcGxpdCgvXHMrLyksRz1bXTtpZihSfHwoR1swXT1rWzBdKSwxPT09ay5sZW5ndGgpcmV0dXJuIEc7dmFyIG9lLGdlLHllLFE9Uy5tYXRjaChCUyk7aWYoUSlmb3IoeWU9MDt5ZSE9US5sZW5ndGg7Kyt5ZSktMT09PShnZT0ob2U9UVt5ZV0ubWF0Y2go''@;'; put 'put ''TWIpKVsxXS5pbmRleE9mKCI6IikpP0dbb2VbMV1dPW9lWzJdLnNsaWNlKDEsb2VbMl0ubGVuZ3RoLTEpOkdbInhtbG5zOiI9PT1vZVsxXS5zbGljZSgwLDYpPyJ4bWxucyIrb2VbMV0uc2xpY2UoNik6b2VbMV0uc2xpY2UoZ2UrMSldPW9lWzJdLnNsaWNlKDEsb2VbMl0ubGVuZ3RoLTEpO3Jl''@;'; put 'put ''dHVybiBHfWZ1bmN0aW9uIGpTKFMpe3ZhciBrPXt9O2lmKDE9PT1TLnNwbGl0KC9ccysvKS5sZW5ndGgpcmV0dXJuIGs7dmFyIFEsb2UscGUsRz1TLm1hdGNoKEJTKTtpZihHKWZvcihwZT0wO3BlIT1HLmxlbmd0aDsrK3BlKS0xPT09KG9lPShRPUdbcGVdLm1hdGNoKE1iKSlbMV0uaW5kZXhP''@;'; put 'put ''ZigiOiIpKT9rW1FbMV1dPVFbMl0uc2xpY2UoMSxRWzJdLmxlbmd0aC0xKTprWyJ4bWxuczoiPT09UVsxXS5zbGljZSgwLDYpPyJ4bWxucyIrUVsxXS5zbGljZSg2KTpRWzFdLnNsaWNlKG9lKzEpXT1RWzJdLnNsaWNlKDEsUVsyXS5sZW5ndGgtMSk7cmV0dXJuIGt9ZnVuY3Rpb24ga3ooUyl7''@;'; put 'put ''dmFyIFI9e307aWYoUy5EZWZhdWx0Um93SGVpZ2h0KXt2YXIgaz17aHB4OjQqcGFyc2VJbnQoUy5EZWZhdWx0Um93SGVpZ2h0KS8zfTtqdihrKSxSLnJvdz1rfWlmKFMuRGVmYXVsdENvbFdpZHRoKXt2YXIgRz17d3B4OjQqcGFyc2VJbnQoUy5EZWZhdWx0Q29sV2lkdGgpLzN9O1EwKEcpLFIu''@;'; put 'put ''Y29sPUd9cmV0dXJuIFJ9ZnVuY3Rpb24gSXooUyxSLGssRyl7dmFyIFE9Rztzd2l0Y2goKGtbMF0ubWF0Y2goL2R0OmR0PSIoW1x3Ll0rKSIvKXx8WyIiLCIiXSlbMV0pe2Nhc2UiYm9vbGVhbiI6UT10aShHKTticmVhaztjYXNlImkyIjpjYXNlImludCI6UT1wYXJzZUludChHLDEwKTticmVh''@;'; put 'put ''aztjYXNlInI0IjpjYXNlImZsb2F0IjpRPXBhcnNlRmxvYXQoRyk7YnJlYWs7Y2FzZSJkYXRlIjpjYXNlImRhdGVUaW1lLnR6IjpRPUhlKEcpO2JyZWFrO2Nhc2UiaTgiOmNhc2Uic3RyaW5nIjpjYXNlImZpeGVkIjpjYXNlInV1aWQiOmNhc2UiYmluLmJhc2U2NCI6YnJlYWs7ZGVmYXVsdDp0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImJhZCBjdXN0cHJvcDoiK2tbMF0pfVNbUXIoUildPVF9dmFyIHhiPXswOiJOb25lIiwxOiJTaW5nbGUiLDI6IkRvdWJsZSIsMzM6IlNpbmdsZUFjY291bnRpbmciLDM0OiJEb3VibGVBY2NvdW50aW5nIn0scEk9a2UoeGIpO2Z1bmN0aW9uIFVTKFMsUixrLEcpe2lm''@;'; put 'put ''KEcuY2VsbFN0eWxlcyl7aWYoaz1rLnJlcGxhY2UoL1xzKy9nLCIgIiksUi5JbnRlcmlvcil7dmFyIFE9Ui5JbnRlcmlvcjtRLlBhdHRlcm4mJihRLnBhdHRlcm5UeXBlPW1DW1EuUGF0dGVybl18fFEuUGF0dGVybiksUS5Db2xvciYmUS5Db2xvci5tYXRjaCgvI1swLTlBLUZhLWZdKi8pJiYo''@;'; put 'put ''US5mZ0NvbG9yPXtyZ2I6US5Db2xvci5zbGljZSgxKX0pfSFmdW5jdGlvbiBSeihTKXtTLkJvcmRlcnMmJihTLkJvcmRlcnMuZm9yRWFjaChmdW5jdGlvbihSKXt2YXIgaz1SLlBvc2l0aW9uLnRvTG93ZXJDYXNlKCk7U1trXT17c3R5bGU6WlMoUi5MaW5lU3R5bGUsK1IuV2VpZ2h0KSxjb2xv''@;'; put 'put ''cjp7cmdiOihSLkNvbG9yfHwiIzAwMDAwMCIpLnNsaWNlKDEpfX19KSxkZWxldGUgUy5Cb3JkZXJzKX0oUik7dmFyIGdlLG9lPWsubWF0Y2goLzwoPzpcdys6KT9Gb250XHNbXj5dKj4vKTtvZSYmKHRpKChnZT12cihvZVswXSkpLkJvbGQpJiYoUi5Cb2xkPSEwKSx0aShnZS5JdGFsaWMpJiYo''@;'; put 'put ''Ui5JdGFsaWM9ITApLHRpKGdlLlN0cmlrZVRocm91Z2gpJiYoUi5TdHJpa2U9ITApLGdlLlNpemUmJihSLlNpemU9K2dlLlNpemUpLFIuRm9udE5hbWU9Z2UuRm9udE5hbWU/Z2UuRm9udE5hbWU6IkFyaWFsIixnZS5VbmRlcmxpbmUmJihSLlVuZGVybGluZT1wSVtnZS5VbmRlcmxpbmVdKSxn''@;'; put 'put ''ZS5Db2xvciYmKFIuUkdCPWdlLkNvbG9yLnNsaWNlKC02KSkpLFIuQWxpZ25tZW50JiYoUi5hbGlnbm1lbnQ9e30sUi5BbGlnbm1lbnQuVmVydGljYWwmJihSLmFsaWdubWVudC52ZXJ0aWNhbD1SLkFsaWdubWVudC5WZXJ0aWNhbC50b0xvd2VyQ2FzZSgpKSxSLkFsaWdubWVudC5Ib3Jpem9u''@;'; put 'put ''dGFsJiYoUi5hbGlnbm1lbnQuaG9yaXpvbnRhbD1SLkFsaWdubWVudC5Ib3Jpem9udGFsLnRvTG93ZXJDYXNlKCkpLHRpKFIuQWxpZ25tZW50LldyYXBUZXh0fHwiMCIpP1IuYWxpZ25tZW50LndyYXBUZXh0PSEwOm51bGw9PVIuQWxpZ25tZW50LldyYXBUZXh0JiZkZWxldGUgUi5hbGlnbm1l''@;'; put 'put ''bnQud3JhcFRleHQsdGkoUi5BbGlnbm1lbnQuU2hyaW5rVG9GaXR8fCIwIikmJihSLmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCksK1IuQWxpZ25tZW50LkluZGVudCYmKFIuYWxpZ25tZW50LmluZGVudD0rUi5BbGlnbm1lbnQuSW5kZW50fHwwKSwrUi5BbGlnbm1lbnQuUm90YXRlJiYoUi5h''@;'; put 'put ''bGlnbm1lbnQudGV4dFJvdGF0aW9uPStSLkFsaWdubWVudC5Sb3RhdGV8fDApKX1TW1IuSURdPVIsKCJEZWZhdWx0Ij09Ui5JRHx8Ik5vcm1hbCI9PVIuTmFtZSkmJkk0KFIpfWZ1bmN0aW9uIFpTKFMsUil7c3dpdGNoKFMpe2Nhc2UiTm9uZSI6cmV0dXJuIm5vbmUiO2Nhc2UiRGFzaCI6cmV0''@;'; put 'put ''dXJuImRhc2hlZCI7Y2FzZSJEb3QiOnJldHVybiJkb3R0ZWQiO2Nhc2UiRGFzaERvdCI6cmV0dXJuImRhc2hEb3QiO2Nhc2UiRGFzaERvdERvdCI6cmV0dXJuImRhc2hEb3REb3QiO2Nhc2UiU2xhbnREYXNoRG90IjpyZXR1cm4ic2xhbnREYXNoRG90IjtjYXNlIkRvdWJsZSI6cmV0dXJuImRv''@;'; put 'put ''dWJsZSI7Y2FzZSJDb250aW51b3VzIjpzd2l0Y2goK1J8fDApe2Nhc2UgMDpyZXR1cm4iaGFpciI7Y2FzZSAxOnJldHVybiJ0aGluIjtjYXNlIDI6cmV0dXJuIm1lZGl1bSI7Y2FzZSAzOnJldHVybiJ0aGljayJ9cmV0dXJuInRoaW4ifXJldHVybiBTfWZ1bmN0aW9uIGdJKFMsUixrLEcsUSxv''@;'; put 'put ''ZSxnZSxwZSx5ZSxQZSl7dmFyIE5lPSJHZW5lcmFsIixZZT1HLlN0eWxlSUQsZXQ9e307UGU9UGV8fHt9O3ZhciBjdD1bXSxFdD0wO2Zvcih2b2lkIDA9PT1ZZSYmcGUmJihZZT1wZS5TdHlsZUlEKSx2b2lkIDA9PT1ZZSYmZ2UmJihZZT1nZS5TdHlsZUlEKTt2b2lkIDAhPT1vZVtZZV07KXt2''@;'; put 'put ''YXIgYXQ9b2VbWWVdO2lmKCJHZW5lcmFsIj09TmUmJmF0Lm5mJiYoTmU9b2VbWWVdLm5mKSxhdC5JbnRlcmlvciYmY3QucHVzaChvZVtZZV0uSW50ZXJpb3IpLGF0LmFsaWdubWVudCYmKGV0LmFsaWdubWVudHx8KGV0LmFsaWdubWVudD1xdChhdC5hbGlnbm1lbnQpKSksbnVsbD09ZXQuYm9s''@;'; put 'put ''ZCYmYXQuQm9sZCYmKGV0LmJvbGQ9ITApLG51bGw9PWV0Lml0YWxpYyYmYXQuSXRhbGljJiYoZXQuaXRhbGljPSEwKSxudWxsPT1ldC5zdHJpa2UmJmF0LlN0cmlrZSYmKGV0LnN0cmlrZT0hMCksbnVsbD09ZXQuc3omJmF0LlNpemUmJihldC5zej1hdC5TaXplKSxudWxsPT1ldC5uYW1lJiZh''@;'; put 'put ''dC5Gb250TmFtZSYmKGV0Lm5hbWU9YXQuRm9udE5hbWUpLG51bGw9PWV0LnVuZGVybGluZSYmYXQuVW5kZXJsaW5lJiYoZXQudW5kZXJsaW5lPWF0LlVuZGVybGluZSksbnVsbD09ZXQuY29sb3ImJmF0LlJHQiYmKGV0LmNvbG9yPXtyZ2I6YXQuUkdCfSksWyJ0b3AiLCJib3R0b20iLCJsZWZ0''@;'; put 'put ''IiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKE90KXtudWxsPT1ldFtPdF0mJmF0W090XSYmKGV0W090XT1xdChhdFtPdF0pKX0pLCJEZWZhdWx0Ij09WWUpYnJlYWs7WWU9YXQuUGFyZW50fHwiRGVmYXVsdCJ9ZXQubmFtZXx8KGV0Lm5hbWU9b2UuRGVmYXVsdCYmb2UuRGVmYXVsdC5Gb250''@;'; put 'put ''TmFtZXx8IkFyaWFsIiksZXQuc3p8fChldC5zej1vZS5EZWZhdWx0JiZvZS5EZWZhdWx0LlNpemV8fDEyKTt2YXIgYnQ9IiI7aWYoU3x8Ry5Gb3JtdWxhfHwiU3RyaW5nIj09ay5UeXBlfHwiTnVtYmVyIj09ay5UeXBlKXN3aXRjaChrLlR5cGUpe2Nhc2UiQm9vbGVhbiI6Ry50PSJiIixHLnY9''@;'; put 'put ''dGkoUyk7YnJlYWs7Y2FzZSJTdHJpbmciOkcudD0icyIsYnQ9TGEoUXIoUykpLEcudj1TLmluZGV4T2YoIjwiKT4tMT9RcihSfHxTKS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LFMuaW5kZXhPZigiPCIpPi0xJiYoRy5SPW1kLmh0bWxfdG9fcnMoUXIoUykpKTticmVhaztjYXNlIkRhdGVU''@;'; put 'put ''aW1lIjoiWiIhPVMuc2xpY2UoLTEpJiYoUys9IloiKSxHLnY9KEhlKFMpLW5ldyBEYXRlKERhdGUuVVRDKDE4OTksMTEsMzApKSkvODY0ZTUsRy52IT1HLnY/Ry52PVFyKFMpOkcudjw2MCYmKEcudj1HLnYtMSksKCFOZXx8IkdlbmVyYWwiPT1OZSkmJihOZT0ieXl5eS1tbS1kZCIpO2Nhc2Ui''@;'; put 'put ''TnVtYmVyIjp2b2lkIDA9PT1HLnYmJihHLnY9K1MpLEcudHx8KEcudD0ibiIpO2JyZWFrO2Nhc2UiRXJyb3IiOkcudD0iZSIsRy52PVAzW1NdLCExIT09UGUuY2VsbFRleHQmJihHLnc9Uyk7YnJlYWs7ZGVmYXVsdDoiIj09UyYmIiI9PVI/Ry50PSJ6IjooRy50PSJzIixidD1MYShRcihTKSks''@;'; put 'put ''Ry52PVMuaW5kZXhPZigiPCIpPi0xP1FyKFJ8fFMpLnJlcGxhY2UoLzxbXl0qPz4vZywiIik6YnQsUy5pbmRleE9mKCI8Iik+LTEmJihHLlI9bWQuaHRtbF90b19ycyhRcihTKSkpKX1lbHNlIEcudD0ieiIsZGVsZXRlIEcudjtpZihmdW5jdGlvbiB6UyhTLFIsayl7aWYoInoiIT09Uy50KXtp''@;'; put 'put ''Zigha3x8ITEhPT1rLmNlbGxUZXh0KXRyeXtTLnc9ImUiPT09Uy50P1Mud3x8TWNbUy52XToiR2VuZXJhbCI9PT1SPyJuIj09PVMudD8oMHxTLnYpPT09Uy52P0EuX2dlbmVyYWxfaW50KFMudik6QS5fZ2VuZXJhbF9udW0oUy52KTpBLl9nZW5lcmFsKFMudik6ZnVuY3Rpb24gRHooUyxSKXt2''@;'; put 'put ''YXIgaz10ZVtTXXx8UXIoUyk7cmV0dXJuIkdlbmVyYWwiPT09az9BLl9nZW5lcmFsKFIpOkEuZm9ybWF0KGssUil9KFJ8fCJHZW5lcmFsIixTLnYpfWNhdGNoKG9lKXtpZihrLldURil0aHJvdyBvZX10cnl7dmFyIEc9dGVbUl18fFJ8fCJHZW5lcmFsIjtpZihrLmNlbGxORiYmKFMuej1HKSxr''@;'; put 'put ''LmNlbGxEYXRlcyYmIm4iPT1TLnQmJkEuaXNfZGF0ZShHKSl7dmFyIFE9QS5wYXJzZV9kYXRlX2NvZGUoUy52KTtRJiYoUy50PSJkIixTLnY9bmV3IERhdGUoUS55LFEubS0xLFEuZCxRLkgsUS5NLFEuUyxRLnUpKX19Y2F0Y2gob2Upe2lmKGsuV1RGKXRocm93IG9lfX19KEcsTmUsUGUpLCEx''@;'; put 'put ''IT09UGUuY2VsbEZvcm11bGEpaWYoRy5Gb3JtdWxhKXt2YXIganQ9UXIoRy5Gb3JtdWxhKTs2MT09anQuY2hhckNvZGVBdCgwKSYmKGp0PWp0LnNsaWNlKDEpKSxHLmY9SDUoanQsUSksZGVsZXRlIEcuRm9ybXVsYSwiUkMiPT1HLkFycmF5UmFuZ2U/Ry5GPUg1KCJSQzpSQyIsUSk6Ry5BcnJh''@;'; put 'put ''eVJhbmdlJiYoRy5GPUg1KEcuQXJyYXlSYW5nZSxRKSx5ZS5wdXNoKFtvbyhHLkYpLEcuRl0pKX1lbHNlIGZvcihFdD0wO0V0PHllLmxlbmd0aDsrK0V0KVEucj49eWVbRXRdWzBdLnMuciYmUS5yPD15ZVtFdF1bMF0uZS5yJiZRLmM+PXllW0V0XVswXS5zLmMmJlEuYzw9eWVbRXRdWzBdLmUu''@;'; put 'put ''YyYmKEcuRj15ZVtFdF1bMV0pO2lmKFBlLmNlbGxTdHlsZXMmJihjdC5mb3JFYWNoKGZ1bmN0aW9uKE90KXshZXQucGF0dGVyblR5cGUmJk90LnBhdHRlcm5UeXBlJiYoZXQucGF0dGVyblR5cGU9T3QucGF0dGVyblR5cGUpLCFldC5mZ0NvbG9yJiZPdC5mZ0NvbG9yJiYoZXQuZmdDb2xvcj1P''@;'; put 'put ''dC5mZ0NvbG9yKX0pLEcucz1ldCksdm9pZCAwIT09Ry5TdHlsZUlEJiYoRy5peGZlPUcuU3R5bGVJRCksRy5SJiZHLnMpe3ZhciBrdD1xdChHLnMpO2RlbGV0ZSBrdC5ib2xkLGRlbGV0ZSBrdC5pdGFsaWMsZGVsZXRlIGt0LnVuZGVybGluZSxkZWxldGUga3Quc3RyaWtlLEcuUi5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKE90KXtPdC5zPVB0KHF0KGt0KSxPdC5zKX0pfX1mdW5jdGlvbiBMeihTKXtTLnQ9Uy52fHwiIixTLnQ9Uy50LnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLFMudj1TLnc9Uy5peGZlPXZvaWQgMH1mdW5jdGlvbiBXUyhTKXtpZihUZSYmQnVmZmVy''@;'; put 'put ''LmlzQnVmZmVyKFMpKXJldHVybiBTLnRvU3RyaW5nKCJ1dGY4Iik7aWYoInN0cmluZyI9PXR5cGVvZiBTKXJldHVybiBTO2lmKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmUyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIGdvKEMoSChTKSkpO3Rocm93IG5ldyBFcnJvcigiQmFkIGlucHV0''@;'; put 'put ''IGZvcm1hdDogZXhwZWN0ZWQgQnVmZmVyIG9yIHN0cmluZyIpfXZhciBZNT0vPChcLz8pKFteXHM/PjwhXC86XSo6fCkoW15ccz88PjpcL1xbXSspKD86W1xzPzo8XC9dW14+XSopPz4vZ207ZnVuY3Rpb24gRDgoUyxSKXt2YXIgaz1SfHx7fSxHPUooV1MoUykpOygiYmluYXJ5Ij09ay50eXBl''@;'; put 'put ''fHwiYXJyYXkiPT1rLnR5cGV8fCJiYXNlNjQiPT1rLnR5cGUpJiYoRz10eXBlb2YgY3B0YWJsZTwidSI/Y3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsWShHKSk6Z28oRykpO3ZhciBRPUcuc2xpY2UoMCwxMDI0KS50b0xvd2VyQ2FzZSgpLG9lPSExO2lmKCgxMDIzJlEuaW5kZXhPZigiPiIp''@;'; put 'put ''KT5NYXRoLm1pbigxMDIzJlEuaW5kZXhPZigiLCIpLDEwMjMmUS5pbmRleE9mKCI7IikpKXt2YXIgZ2U9cXQoayk7cmV0dXJuIGdlLnR5cGU9InN0cmluZyIsajMudG9fd29ya2Jvb2soRyxnZSl9aWYoLTE9PVEuaW5kZXhPZigiPD94bWwiKSYmWyJodG1sIiwidGFibGUiLCJoZWFkIiwibWV0''@;'; put 'put ''YSIsInNjcmlwdCIsInN0eWxlIiwiZGl2Il0uZm9yRWFjaChmdW5jdGlvbih5dSl7US5pbmRleE9mKCI8Iit5dSk+PTAmJihvZT0hMCl9KSxvZSlyZXR1cm4gbWQudG9fd29ya2Jvb2soRyxrKTt2YXIgcGUsUGUseWU9W107bnVsbCE9bGUmJm51bGw9PWsuZGVuc2UmJihrLmRlbnNlPWxlKTt2''@;'; put 'put ''YXIga3IsTmU9e30sWWU9W10sZXQ9ay5kZW5zZT9bXTp7fSxjdD0iIixFdD17fSxhdD17fSxidD17fSxqdD1IMCgnPERhdGEgc3M6VHlwZT0iU3RyaW5nIj4nKSxrdD0wLE90PTAsS3Q9MCxUbj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxycj17fSxTbj17fSxscj0iIixYbj0wLEJu''@;'; put 'put ''PVtdLGZyPXt9LGJyPXt9LGVyPTAsTWk9W10sRmk9e30sbmE9W10sY2E9e30sTGk9W10sVm49ITEsQnI9W10sX3I9W10sRm49e30sanI9MCxaaT0wLHlpPXtTaGVldHM6W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9fSxfYT17fTtZNS5sYXN0SW5kZXg9MCxHPUcucmVwbGFjZSgvPCEtLShbXHNc''@;'; put 'put ''U10qPyktLT4vZ20sIiIpO2Zvcih2YXIgc289IiI7cGU9WTUuZXhlYyhHKTspc3dpdGNoKHBlWzNdPShzbz1wZVszXSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJkYXRhIjppZigiZGF0YSI9PXNvKXtpZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXBlWzBdLmNoYXJBdChwZVswXS5sZW5ndGgtMikmJnllLnB1c2goW3BlWzNdLCEwXSk7YnJlYWt9aWYoeWVbeWUubGVuZ3RoLTFdWzFdKWJyZWFrOyIvIj09PXBlWzFdP2dJKEcuc2xpY2Uoa3QscGUuaW5kZXgpLGxy''@;'; put 'put ''LGp0LCJjb21tZW50Ij09eWVbeWUubGVuZ3RoLTFdWzBdP2NhOmF0LHtjOk90LHI6S3R9LHJyLExpW090XSxidCxCcixrKToobHI9IiIsanQ9SDAocGVbMF0pLGt0PXBlLmluZGV4K3BlWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJjZWxsIjppZigiLyI9PT1wZVsxXXx8Ii8+Ij09PXBlWzBdLnNs''@;'; put 'put ''aWNlKC0yKSl7aWYoIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSl7aWYoKGF0PWpTKHBlWzBdKSkuSW5kZXgmJihPdD0rYXQuSW5kZXgtMSksT3Q8VG4ucy5jJiYoVG4ucy5jPU90KSxPdD5Ubi5lLmMmJihUbi5lLmM9T3QpLG5hPVtdLCFrLnNoZWV0U3R1YnMpeysrT3Q7YnJlYWt9Z0koIiIsIiIs''@;'; put 'put ''e30sImNvbW1lbnQiPT15ZVt5ZS5sZW5ndGgtMV1bMF0/Y2E6YXQse2M6T3QscjpLdH0scnIsTGlbT3RdLGJ0LEJyLGspfWlmKG5hLmxlbmd0aD4wJiYoYXQuYz1uYSksKCFrLnNoZWV0Um93c3x8ay5zaGVldFJvd3M+S3QpJiYodm9pZCAwIT09YXQudnx8ay5zaGVldFN0dWJzKSYmKGsuZGVu''@;'; put 'put ''c2U/KGV0W0t0XXx8KGV0W0t0XT1bXSksZXRbS3RdW090XT1hdCk6ZXRbVGEoT3QpK2ppKEt0KV09YXQpLGF0LkhSZWYmJihhdC5sPXtUYXJnZXQ6UXIoYXQuSFJlZil9LGF0LkhSZWZTY3JlZW5UaXAmJihhdC5sLlRvb2x0aXA9YXQuSFJlZlNjcmVlblRpcCksZGVsZXRlIGF0LkhSZWYsZGVs''@;'; put 'put ''ZXRlIGF0LkhSZWZTY3JlZW5UaXApLChhdC5NZXJnZUFjcm9zc3x8YXQuTWVyZ2VEb3duKSYmKGpyPU90KygwfHBhcnNlSW50KGF0Lk1lcmdlQWNyb3NzLDEwKSksWmk9S3QrKDB8cGFyc2VJbnQoYXQuTWVyZ2VEb3duLDEwKSksKGpyPk90fHxaaT5LdCkmJkJuLnB1c2goe3M6e2M6T3QscjpL''@;'; put 'put ''dH0sZTp7YzpqcixyOlppfX0pKSxrLnNoZWV0U3R1YnMpaWYoYXQuTWVyZ2VBY3Jvc3N8fGF0Lk1lcmdlRG93bil7Zm9yKHZhciBpYT1PdDtpYTw9anI7KytpYSlmb3IodmFyIExvPUt0O0xvPD1aaTsrK0xvKShpYT5PdHx8TG8+S3QpJiYoay5kZW5zZT8oZXRbTG9dfHwoZXRbTG9dPVtdKSxl''@;'; put 'put ''dFtMb11baWFdPXt0OiJ6In0pOmV0W1RhKGlhKStqaShMbyldPXt0OiJ6In0pO090PWpyKzF9ZWxzZSsrT3Q7ZWxzZSBhdC5NZXJnZUFjcm9zcz9PdD1qcisxOisrT3R9ZWxzZShhdD1qUyhwZVswXSkpLkluZGV4JiYoT3Q9K2F0LkluZGV4LTEpLE90PFRuLnMuYyYmKFRuLnMuYz1PdCksT3Q+''@;'; put 'put ''VG4uZS5jJiYoVG4uZS5jPU90KSwiLz4iPT09cGVbMF0uc2xpY2UoLTIpJiYrK090LG5hPVtdO2JyZWFrO2Nhc2Uicm93IjoiLyI9PT1wZVsxXXx8Ii8+Ij09PXBlWzBdLnNsaWNlKC0yKT8oS3Q8VG4ucy5yJiYoVG4ucy5yPUt0KSxLdD5Ubi5lLnImJihUbi5lLnI9S3QpLCIvPiI9PT1wZVsw''@;'; put 'put ''XS5zbGljZSgtMikmJihidD1IMChwZVswXSkpLkluZGV4JiYoS3Q9K2J0LkluZGV4LTEpLE90PTAsKytLdCk6KChidD1IMChwZVswXSkpLkluZGV4JiYoS3Q9K2J0LkluZGV4LTEpLEZuPXt9LCgiMCI9PWJ0LkF1dG9GaXRIZWlnaHR8fGJ0LkhlaWdodCkmJihGbi5ocHQ9cGFyc2VGbG9hdChi''@;'; put 'put ''dC5IZWlnaHQpLEZuLmhweD1zaChGbi5ocHQpLF9yW0t0XT1GbiksIjEiPT1idC5IaWRkZW4mJihGbi5oaWRkZW49ITAsX3JbS3RdPUZuKSk7YnJlYWs7Y2FzZSJ3b3Jrc2hlZXQiOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJC''@;'; put 'put ''YWQgc3RhdGU6ICIrUGUuam9pbigifCIpKTtZZS5wdXNoKGN0KSxUbi5zLnI8PVRuLmUuciYmVG4ucy5jPD1Ubi5lLmMmJihldFsiIXJlZiJdPXJhKFRuKSxrLnNoZWV0Um93cyYmay5zaGVldFJvd3M8PVRuLmUuciYmKGV0WyIhZnVsbHJlZiJdPWV0WyIhcmVmIl0sVG4uZS5yPWsuc2hlZXRS''@;'; put 'put ''b3dzLTEsZXRbIiFyZWYiXT1yYShUbikpKSxCbi5sZW5ndGgmJihldFsiIW1lcmdlcyJdPUJuKSxMaS5sZW5ndGg+MCYmKGV0WyIhY29scyJdPUxpKSxfci5sZW5ndGg+MCYmKGV0WyIhcm93cyJdPV9yKSxFdCYmKGV0WyIhc2hlZXRGb3JtYXQiXT1reihFdCkpLE5lW2N0XT1ldH1lbHNlIFRu''@;'; put 'put ''PXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LEt0PU90PTAseWUucHVzaChbcGVbM10sITFdKSxQZT1IMChwZVswXSksY3Q9UXIoUGUuTmFtZSksZXQ9ay5kZW5zZT9bXTp7fSxCbj1bXSxCcj1bXSxfcj1bXSx5aS5TaGVldHMucHVzaChfYT17bmFtZTpjdCxIaWRkZW46MH0pO2JyZWFr''@;'; put 'put ''O2Nhc2UidGFibGUiOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNle2lmKCIvPiI9PXBlWzBdLnNsaWNlKC0yKSlicmVhaztFdD1IMChwZVswXSkseWUucHVzaChbcGVbM10s''@;'; put 'put ''ITFdKSxMaT1bXSxWbj0hMX1icmVhaztjYXNlInN0eWxlIjoiLyI9PT1wZVsxXT9VUyhycixTbixscixrKTooU249SDAocGVbMF0pLGxyPSIiKTticmVhaztjYXNlIm51bWJlcmZvcm1hdCI6U24ubmY9UXIoSDAocGVbMF0pLkZvcm1hdHx8IkdlbmVyYWwiKSx0ZVtTbi5uZl0mJihTbi5uZj10''@;'; put 'put ''ZVtTbi5uZl0pO2Zvcih2YXIgT2E9MDszOTIhPU9hJiZBLl90YWJsZVtPYV0hPVNuLm5mOysrT2EpO2lmKDM5Mj09T2EpZm9yKE9hPTU3OzM5MiE9T2E7KytPYSlpZihudWxsPT1BLl90YWJsZVtPYV0pe0EubG9hZChTbi5uZixPYSk7YnJlYWt9YnJlYWs7Y2FzZSJjb2x1bW4iOmlmKCJ0YWJs''@;'; put 'put ''ZSIhPT15ZVt5ZS5sZW5ndGgtMV1bMF18fCIvIj09PXBlWzFdKWJyZWFrO2lmKChrcj1IMChwZVswXSkpLkhpZGRlbiYmKGtyLmhpZGRlbj0hMCxkZWxldGUga3IuSGlkZGVuKSxrci5XaWR0aD9rci53cHg9NCpwYXJzZUludChrci5XaWR0aCwxMCkvMzora3IuQXV0b0ZpdFdpZHRoJiYoa3Iu''@;'; put 'put ''YXV0bz0xKSwhVm4mJmtyLndweD4xMCl7Vm49ITAsVGM9Zms7Zm9yKHZhciBobz0wO2hvPExpLmxlbmd0aDsrK2hvKUxpW2hvXSYmUTAoTGlbaG9dKX1WbiYmUTAoa3IpLExpW2tyLkluZGV4LTF8fExpLmxlbmd0aF09a3I7Zm9yKHZhciBKYT0wO0phPCtrci5TcGFuOysrSmEpTGlbTGkubGVu''@;'; put 'put ''Z3RoXT1xdChrcik7YnJlYWs7Y2FzZSJuYW1lZHJhbmdlIjppZigiLyI9PT1wZVsxXSlicmVhazt5aS5OYW1lc3x8KHlpLk5hbWVzPVtdKTt2YXIgQmk9dnIocGVbMF0pLElzPXtOYW1lOkJpLk5hbWUsUmVmOkg1KEJpLlJlZmVyc1RvLnNsaWNlKDEpLHtyOjAsYzowfSl9O3lpLlNoZWV0cy5s''@;'; put 'put ''ZW5ndGg+MCYmKElzLlNoZWV0PXlpLlNoZWV0cy5sZW5ndGgtMSkseWkuTmFtZXMucHVzaChJcyk7YnJlYWs7Y2FzZSJuYW1lZGNlbGwiOmNhc2UiYiI6Y2FzZSJpIjpjYXNlInUiOmNhc2UicyI6Y2FzZSJlbSI6Y2FzZSJoMiI6Y2FzZSJoMyI6Y2FzZSJzdWIiOmNhc2Uic3VwIjpjYXNlInNw''@;'; put 'put ''YW4iOmNhc2UicHJvdGVjdGlvbiI6Y2FzZSJwYXJhZ3JhcGhzIjpjYXNlIm5hbWUiOmJyZWFrO2Nhc2UiYWxpZ25tZW50IjppZighay5jZWxsU3R5bGVzfHwiLyI9PT1wZVsxXSlicmVhaztTbi5BbGlnbm1lbnQ9SDAocGVbMF0pO2JyZWFrO2Nhc2UiYm9yZGVycyI6Ii8iIT09cGVbMV0mJihT''@;'; put 'put ''bi5Cb3JkZXJzPVtdKTticmVhaztjYXNlImJvcmRlciI6aWYoIi8iPT09cGVbMV0pYnJlYWs7U24uQm9yZGVyc3x8KFNuLkJvcmRlcnM9W10pLFNuLkJvcmRlcnMucHVzaChIMChwZVswXSkpO2JyZWFrO2Nhc2UiZm9udCI6aWYoIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSl7bHIrPXBlWzBdO2Jy''@;'; put 'put ''ZWFrfSIvIj09PXBlWzFdP2xyKz1HLnNsaWNlKFhuLHBlLmluZGV4K3BlWzBdLmxlbmd0aCk6WG49cGUuaW5kZXg7YnJlYWs7Y2FzZSJpbnRlcmlvciI6aWYoIWsuY2VsbFN0eWxlc3x8Ii8iPT09cGVbMV0pYnJlYWs7U24uSW50ZXJpb3I9SDAocGVbMF0pO2JyZWFrO2Nhc2UiYXV0aG9yIjpj''@;'; put 'put ''YXNlInRpdGxlIjpjYXNlImRlc2NyaXB0aW9uIjpjYXNlImNyZWF0ZWQiOmNhc2Uia2V5d29yZHMiOmNhc2Uic3ViamVjdCI6Y2FzZSJjYXRlZ29yeSI6Y2FzZSJjb21wYW55IjpjYXNlImxhc3RhdXRob3IiOmNhc2UibGFzdHNhdmVkIjpjYXNlImxhc3RwcmludGVkIjpjYXNlInZlcnNpb24i''@;'; put 'put ''OmNhc2UicmV2aXNpb24iOmNhc2UidG90YWx0aW1lIjpjYXNlImh5cGVybGlua2Jhc2UiOmNhc2UibWFuYWdlciI6Y2FzZSJjb250ZW50c3RhdHVzIjpjYXNlImlkZW50aWZpZXIiOmNhc2UibGFuZ3VhZ2UiOmNhc2UiYXBwbmFtZSI6aWYoIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSlicmVhazsi''@;'; put 'put ''LyI9PT1wZVsxXT9GMyhmcixzbyxHLnNsaWNlKGVyLHBlLmluZGV4KSk6ZXI9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2Uic3R5bGVzIjpjYXNlIndvcmtib29rIjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFk''@;'; put 'put ''IHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSB5ZS5wdXNoKFtwZVszXSwhMV0pO2JyZWFrO2Nhc2UiY29tbWVudCI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpO0x6KGNhKSxu''@;'; put 'put ''YS5wdXNoKGNhKX1lbHNlIHllLnB1c2goW3BlWzNdLCExXSksY2E9e2E6KFBlPUgwKHBlWzBdKSkuQXV0aG9yfTticmVhaztjYXNlImF1dG9maWx0ZXIiOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUu''@;'; put 'put ''am9pbigifCIpKX1lbHNlIGlmKCIvIiE9PXBlWzBdLmNoYXJBdChwZVswXS5sZW5ndGgtMikpe3ZhciBQbj1IMChwZVswXSk7ZXRbIiFhdXRvZmlsdGVyIl09e3JlZjpINShQbi5SYW5nZSkucmVwbGFjZSgvXCQvZywiIil9LHllLnB1c2goW3BlWzNdLCEwXSl9YnJlYWs7Y2FzZSJkYXRhdmFs''@;'; put 'put ''aWRhdGlvbiI6aWYoZXRbIiF2YWxpZGF0aW9ucyJdfHwoZXRbIiF2YWxpZGF0aW9ucyJdPVtdKSwiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXBlWzBdLmNoYXJBdChw''@;'; put 'put ''ZVswXS5sZW5ndGgtMikmJnllLnB1c2goW3BlWzNdLCEwXSksRmk9e307YnJlYWs7Y2FzZSJwaXhlbHNwZXJpbmNoIjppZigiLyI9PT1wZVsxXSl7dmFyIFdvPStHLnNsaWNlKGt0LHBlLmluZGV4KTsoNzI9PVdvfHw5Nj09V28pJiZJZihXbyl9ZWxzZSBrdD1wZS5pbmRleCtwZVswXS5sZW5n''@;'; put 'put ''dGg7YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpjYXNlImRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiOmNhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOmNhc2UibmFtZXMiOmNh''@;'; put 'put ''c2UibWFwaW5mbyI6Y2FzZSJwYWdlYnJlYWtzIjpjYXNlInF1ZXJ5dGFibGUiOmNhc2Uic29ydGluZyI6Y2FzZSJzY2hlbWEiOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpjYXNlInNtYXJ0dGFndHlwZSI6Y2FzZSJzbWFydHRhZ3MiOmNhc2UiZXhjZWx3b3JrYm9vayI6Y2FzZSJ3b3Jr''@;'; put 'put ''Ym9va29wdGlvbnMiOmNhc2Uid29ya3NoZWV0b3B0aW9ucyI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UiLyIhPT1wZVswXS5jaGFyQXQocGVbMF0ubGVuZ3RoLTIpJiZ5''@;'; put 'put ''ZS5wdXNoKFtwZVszXSwhMF0pO2JyZWFrO2RlZmF1bHQ6aWYoMD09eWUubGVuZ3RoJiYiZG9jdW1lbnQiPT1wZVszXXx8MD09eWUubGVuZ3RoJiYidW9mIj09cGVbM10pcmV0dXJuIElJKEcsayk7dmFyIGhyPSEwO3N3aXRjaCh5ZVt5ZS5sZW5ndGgtMV1bMF0pe2Nhc2Uib2ZmaWNlZG9jdW1l''@;'; put 'put ''bnRzZXR0aW5ncyI6c3dpdGNoKHBlWzNdKXtjYXNlImFsbG93cG5nIjpjYXNlInJlbW92ZXBlcnNvbmFsaW5mb3JtYXRpb24iOmNhc2UiZG93bmxvYWRjb21wb25lbnRzIjpjYXNlImxvY2F0aW9ub2Zjb21wb25lbnRzIjpjYXNlImNvbG9ycyI6Y2FzZSJjb2xvciI6Y2FzZSJpbmRleCI6Y2Fz''@;'; put 'put ''ZSJyZ2IiOmNhc2UidGFyZ2V0c2NyZWVuc2l6ZSI6Y2FzZSJyZWFkb25seXJlY29tbWVuZGVkIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6c3dpdGNoKHBlWzNdKXtjYXNlInRvb2xiYXIiOmNhc2UiaGlkZW9mZmljZWxvZ28iOmNhc2Uic3ByZWFk''@;'; put 'put ''c2hlZXRhdXRvZml0IjpjYXNlImxhYmVsIjpjYXNlImNhcHRpb24iOmNhc2UibWF4aGVpZ2h0IjpjYXNlIm1heHdpZHRoIjpjYXNlIm5leHRzaGVldG51bWJlciI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlImV4Y2Vsd29ya2Jvb2siOnN3aXRjaChwZVszXSl7Y2FzZSJkYXRlMTkw''@;'; put 'put ''NCI6eWkuV0JQcm9wcy5kYXRlMTkwND0hMDticmVhaztjYXNlIndpbmRvd2hlaWdodCI6Y2FzZSJ3aW5kb3d3aWR0aCI6Y2FzZSJ3aW5kb3d0b3B4IjpjYXNlIndpbmRvd3RvcHkiOmNhc2UidGFicmF0aW8iOmNhc2UicHJvdGVjdHN0cnVjdHVyZSI6Y2FzZSJwcm90ZWN0d2luZG93IjpjYXNl''@;'; put 'put ''InByb3RlY3R3aW5kb3dzIjpjYXNlImFjdGl2ZXNoZWV0IjpjYXNlImRpc3BsYXlpbmtub3RlcyI6Y2FzZSJmaXJzdHZpc2libGVzaGVldCI6Y2FzZSJzdXBib29rIjpjYXNlInNoZWV0bmFtZSI6Y2FzZSJzaGVldGluZGV4IjpjYXNlInNoZWV0aW5kZXhmaXJzdCI6Y2FzZSJzaGVldGluZGV4''@;'; put 'put ''bGFzdCI6Y2FzZSJkbGwiOmNhc2UiYWNjZXB0bGFiZWxzaW5mb3JtdWxhcyI6Y2FzZSJkb25vdHNhdmVsaW5rdmFsdWVzIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJtYXhpdGVyYXRpb25zIjpjYXNlIm1heGNoYW5nZSI6Y2FzZSJwYXRoIjpjYXNlInhjdCI6Y2FzZSJjb3VudCI6Y2FzZSJzZWxl''@;'; put 'put ''Y3RlZHNoZWV0cyI6Y2FzZSJjYWxjdWxhdGlvbiI6Y2FzZSJ1bmNhbGNlZCI6Y2FzZSJzdGFydHVwcHJvbXB0IjpjYXNlImNybiI6Y2FzZSJleHRlcm5uYW1lIjpjYXNlImZvcm11bGEiOmNhc2UiY29sZmlyc3QiOmNhc2UiY29sbGFzdCI6Y2FzZSJ3YW50YWR2aXNlIjpjYXNlImJvb2xlYW4i''@;'; put 'put ''OmNhc2UiZXJyb3IiOmNhc2UidGV4dCI6Y2FzZSJvbGUiOmNhc2Uibm9hdXRvcmVjb3ZlciI6Y2FzZSJwdWJsaXNob2JqZWN0cyI6Y2FzZSJkb25vdGNhbGN1bGF0ZWJlZm9yZXNhdmUiOmNhc2UibnVtYmVyIjpjYXNlInJlZm1vZGVyMWMxIjpjYXNlImVtYmVkc2F2ZXNtYXJ0dGFncyI6YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlIndvcmtib29rb3B0aW9ucyI6c3dpdGNoKHBlWzNdKXtjYXNlIm93Y3ZlcnNpb24iOmNhc2UiaGVpZ2h0IjpjYXNlIndpZHRoIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2Uid29ya3NoZWV0b3B0aW9ucyI6c3dpdGNoKHBlWzNdKXtj''@;'; put 'put ''YXNlInZpc2libGUiOmlmKCIvPiIhPT1wZVswXS5zbGljZSgtMikpaWYoIi8iPT09cGVbMV0pc3dpdGNoKEcuc2xpY2UoZXIscGUuaW5kZXgpKXtjYXNlIlNoZWV0SGlkZGVuIjpfYS5IaWRkZW49MTticmVhaztjYXNlIlNoZWV0VmVyeUhpZGRlbiI6X2EuSGlkZGVuPTJ9ZWxzZSBlcj1wZS5p''@;'; put 'put ''bmRleCtwZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJoZWFkZXIiOmV0WyIhbWFyZ2lucyJdfHxYMyhldFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLGV0WyIhbWFyZ2lucyJdLmhlYWRlcj12cihwZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UiZm9vdGVyIjpldFsiIW1hcmdpbnMiXXx8WDMoZXRbIiFt''@;'; put 'put ''YXJnaW5zIl09e30sInhsbWwiKSxldFsiIW1hcmdpbnMiXS5mb290ZXI9dnIocGVbMF0pLk1hcmdpbjticmVhaztjYXNlInBhZ2VtYXJnaW5zIjp2YXIgUWw9dnIocGVbMF0pO2V0WyIhbWFyZ2lucyJdfHxYMyhldFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLFFsLlRvcCYmKGV0WyIhbWFyZ2lu''@;'; put 'put ''cyJdLnRvcD1RbC5Ub3ApLFFsLkxlZnQmJihldFsiIW1hcmdpbnMiXS5sZWZ0PVFsLkxlZnQpLFFsLlJpZ2h0JiYoZXRbIiFtYXJnaW5zIl0ucmlnaHQ9UWwuUmlnaHQpLFFsLkJvdHRvbSYmKGV0WyIhbWFyZ2lucyJdLmJvdHRvbT1RbC5Cb3R0b20pO2JyZWFrO2Nhc2UiZGlzcGxheXJpZ2h0''@;'; put 'put ''dG9sZWZ0Ijp5aS5WaWV3c3x8KHlpLlZpZXdzPVtdKSx5aS5WaWV3c1swXXx8KHlpLlZpZXdzWzBdPXt9KSx5aS5WaWV3c1swXS5SVEw9ITA7YnJlYWs7Y2FzZSJmcmVlemVwYW5lcyI6Y2FzZSJmcm96ZW5ub3NwbGl0IjpjYXNlImFjdGl2ZXJvdyI6Y2FzZSJhY3RpdmVjb2wiOmNhc2UidG9w''@;'; put 'put ''cm93Ym90dG9tcGFuZSI6Y2FzZSJsZWZ0Y29sdW1ucmlnaHRwYW5lIjpjYXNlInVuc3luY2VkIjpjYXNlInByaW50IjpjYXNlInByaW50ZXJyb3JzIjpjYXNlInBhbmVzIjpjYXNlInNjYWxlIjpjYXNlInBhbmUiOmNhc2UibnVtYmVyIjpjYXNlImxheW91dCI6Y2FzZSJwYWdlc2V0dXAiOmNh''@;'; put 'put ''c2Uic2VsZWN0ZWQiOmNhc2UicHJvdGVjdG9iamVjdHMiOmNhc2UiZW5hYmxlc2VsZWN0aW9uIjpjYXNlInByb3RlY3RzY2VuYXJpb3MiOmNhc2UidmFsaWRwcmludGVyaW5mbyI6Y2FzZSJob3Jpem9udGFscmVzb2x1dGlvbiI6Y2FzZSJ2ZXJ0aWNhbHJlc29sdXRpb24iOmNhc2UibnVtYmVy''@;'; put 'put ''b2Zjb3BpZXMiOmNhc2UiYWN0aXZlcGFuZSI6Y2FzZSJ0b3Byb3d2aXNpYmxlIjpjYXNlImxlZnRjb2x1bW52aXNpYmxlIjpjYXNlImZpdHRvcGFnZSI6Y2FzZSJyYW5nZXNlbGVjdGlvbiI6Y2FzZSJwYXBlcnNpemVpbmRleCI6Y2FzZSJwYWdlbGF5b3V0em9vbSI6Y2FzZSJwYWdlYnJlYWt6''@;'; put 'put ''b29tIjpjYXNlImZpbHRlcm9uIjpjYXNlImZpdHdpZHRoIjpjYXNlImZpdGhlaWdodCI6Y2FzZSJjb21tZW50c2xheW91dCI6Y2FzZSJ6b29tIjpjYXNlImxlZnR0b3JpZ2h0IjpjYXNlImdyaWRsaW5lcyI6Y2FzZSJhbGxvd3NvcnQiOmNhc2UiYWxsb3dmaWx0ZXIiOmNhc2UiYWxsb3dpbnNl''@;'; put 'put ''cnRyb3dzIjpjYXNlImFsbG93ZGVsZXRlcm93cyI6Y2FzZSJhbGxvd2luc2VydGNvbHMiOmNhc2UiYWxsb3dkZWxldGVjb2xzIjpjYXNlImFsbG93aW5zZXJ0aHlwZXJsaW5rcyI6Y2FzZSJhbGxvd2Zvcm1hdGNlbGxzIjpjYXNlImFsbG93c2l6ZWNvbHMiOmNhc2UiYWxsb3dzaXplcm93cyI6''@;'; put 'put ''Y2FzZSJ0YWJjb2xvcmluZGV4IjpjYXNlImRvbm90ZGlzcGxheWhlYWRpbmdzIjpjYXNlInNob3dwYWdlbGF5b3V0em9vbSI6Y2FzZSJibGFja2FuZHdoaXRlIjpjYXNlImRvbm90ZGlzcGxheXplcm9zIjpjYXNlImRpc3BsYXlwYWdlYnJlYWsiOmNhc2Uicm93Y29saGVhZGluZ3MiOmNhc2Ui''@;'; put 'put ''ZG9ub3RkaXNwbGF5b3V0bGluZSI6Y2FzZSJub29yaWVudGF0aW9uIjpjYXNlImFsbG93dXNlcGl2b3R0YWJsZXMiOmNhc2UiemVyb2hlaWdodCI6Y2FzZSJ2aWV3YWJsZXJhbmdlIjpjYXNlInNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0Y29udGVudHMiOmJyZWFrO2Nhc2Uic3BsaXRob3Jpem9u''@;'; put 'put ''dGFsIjpjYXNlInNwbGl0dmVydGljYWwiOmlmKCIvPiIhPT1wZVswXS5zbGljZSgtMikpaWYoIi8iPT1wZVsxXSl7ZXRbIiFmcmVlemUiXXx8KGV0WyIhZnJlZXplIl09IkExIik7dmFyIFlsPU5vKGV0WyIhZnJlZXplIl0pOyJzcGxpdGhvcml6b250YWwiPT1wZVszXT9ZbC5yPStHLnNsaWNl''@;'; put 'put ''KGVyLHBlLmluZGV4KTpZbC5jPStHLnNsaWNlKGVyLHBlLmluZGV4KSxldFsiIWZyZWV6ZSJdPXFpKFlsKX1lbHNlIGVyPXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImRvbm90ZGlzcGxheWdyaWRsaW5lcyI6ZXRbIiFncmlkbGluZXMiXT0hMTticmVhaztjYXNlIm5vc3VtbWFy''@;'; put 'put ''eXJvd3NiZWxvd2RldGFpbCI6ZXRbIiFvdXRsaW5lIl18fChldFsiIW91dGxpbmUiXT17fSksZXRbIiFvdXRsaW5lIl0uYWJvdmU9ITA7YnJlYWs7Y2FzZSJub3N1bW1hcnljb2x1bW5zcmlnaHRkZXRhaWwiOmV0WyIhb3V0bGluZSJdfHwoZXRbIiFvdXRsaW5lIl09e30pLGV0WyIhb3V0bGlu''@;'; put 'put ''ZSJdLmxlZnQ9ITA7YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlInBpdm90dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6c3dpdGNoKHBlWzNdKXtjYXNlImltbWVkaWF0ZWl0ZW1zb25kcm9wIjpjYXNlInNob3dwYWdlbXVsdGlwbGVpdGVtbGFiZWwiOmNhc2UiY29tcGFjdHJvd2luZGVu''@;'; put 'put ''dCI6Y2FzZSJsb2NhdGlvbiI6Y2FzZSJwaXZvdGZpZWxkIjpjYXNlIm9yaWVudGF0aW9uIjpjYXNlImxheW91dGZvcm0iOmNhc2UibGF5b3V0c3VidG90YWxsb2NhdGlvbiI6Y2FzZSJsYXlvdXRjb21wYWN0cm93IjpjYXNlInBvc2l0aW9uIjpjYXNlInBpdm90aXRlbSI6Y2FzZSJkYXRhdHlw''@;'; put 'put ''ZSI6Y2FzZSJkYXRhZmllbGQiOmNhc2Uic291cmNlbmFtZSI6Y2FzZSJwYXJlbnRmaWVsZCI6Y2FzZSJwdGxpbmVpdGVtcyI6Y2FzZSJwdGxpbmVpdGVtIjpjYXNlImNvdW50b2ZzYW1laXRlbXMiOmNhc2UiaXRlbSI6Y2FzZSJpdGVtdHlwZSI6Y2FzZSJwdHNvdXJjZSI6Y2FzZSJjYWNoZWlu''@;'; put 'put ''ZGV4IjpjYXNlImNvbnNvbGlkYXRpb25yZWZlcmVuY2UiOmNhc2UiZmlsZW5hbWUiOmNhc2UicmVmZXJlbmNlIjpjYXNlIm5vY29sdW1uZ3JhbmQiOmNhc2Uibm9yb3dncmFuZCI6Y2FzZSJibGFua2xpbmVhZnRlcml0ZW1zIjpjYXNlImhpZGRlbiI6Y2FzZSJzdWJ0b3RhbCI6Y2FzZSJiYXNl''@;'; put 'put ''ZmllbGQiOmNhc2UibWFwY2hpbGRpdGVtcyI6Y2FzZSJmdW5jdGlvbiI6Y2FzZSJyZWZyZXNob25maWxlb3BlbiI6Y2FzZSJwcmludHNldHRpdGxlcyI6Y2FzZSJtZXJnZWxhYmVscyI6Y2FzZSJkZWZhdWx0dmVyc2lvbiI6Y2FzZSJyZWZyZXNobmFtZSI6Y2FzZSJyZWZyZXNoZGF0ZSI6Y2Fz''@;'; put 'put ''ZSJyZWZyZXNoZGF0ZWNvcHkiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpjYXNlInZlcnNpb25sYXN0dXBkYXRlIjpjYXNlInZlcnNpb251cGRhdGVhYmxlbWluIjpjYXNlInZlcnNpb25yZWZyZXNoYWJsZW1pbiI6Y2FzZSJjYWxjdWxhdGlvbiI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVh''@;'; put 'put ''aztjYXNlInBhZ2VicmVha3MiOnN3aXRjaChwZVszXSl7Y2FzZSJjb2xicmVha3MiOmNhc2UiY29sYnJlYWsiOmNhc2Uicm93YnJlYWtzIjpjYXNlInJvd2JyZWFrIjpjYXNlImNvbHN0YXJ0IjpjYXNlImNvbGVuZCI6Y2FzZSJyb3dlbmQiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2Fz''@;'; put 'put ''ZSJhdXRvZmlsdGVyIjpzd2l0Y2gocGVbM10pe2Nhc2UiYXV0b2ZpbHRlcmNvbHVtbiI6Y2FzZSJhdXRvZmlsdGVyY29uZGl0aW9uIjpjYXNlImF1dG9maWx0ZXJhbmQiOmNhc2UiYXV0b2ZpbHRlcm9yIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UicXVlcnl0YWJsZSI6c3dpdGNo''@;'; put 'put ''KHBlWzNdKXtjYXNlImlkIjpjYXNlImF1dG9mb3JtYXRmb250IjpjYXNlImF1dG9mb3JtYXRwYXR0ZXJuIjpjYXNlInF1ZXJ5c291cmNlIjpjYXNlInF1ZXJ5dHlwZSI6Y2FzZSJlbmFibGVyZWRpcmVjdGlvbnMiOmNhc2UicmVmcmVzaGVkaW54bDkiOmNhc2UidXJsc3RyaW5nIjpjYXNlImh0''@;'; put 'put ''bWx0YWJsZXMiOmNhc2UiY29ubmVjdGlvbiI6Y2FzZSJjb21tYW5kdGV4dCI6Y2FzZSJyZWZyZXNoaW5mbyI6Y2FzZSJub3RpdGxlcyI6Y2FzZSJuZXh0aWQiOmNhc2UiY29sdW1uaW5mbyI6Y2FzZSJvdmVyd3JpdGVjZWxscyI6Y2FzZSJkb25vdHByb21wdGZvcmZpbGUiOmNhc2UidGV4dHdp''@;'; put 'put ''emFyZHNldHRpbmdzIjpjYXNlInNvdXJjZSI6Y2FzZSJudW1iZXIiOmNhc2UiZGVjaW1hbCI6Y2FzZSJ0aG91c2FuZHNlcGFyYXRvciI6Y2FzZSJ0cmFpbGluZ21pbnVzbnVtYmVycyI6Y2FzZSJmb3JtYXRzZXR0aW5ncyI6Y2FzZSJmaWVsZHR5cGUiOmNhc2UiZGVsaW1pdGVycyI6Y2FzZSJ0''@;'; put 'put ''YWIiOmNhc2UiY29tbWEiOmNhc2UiYXV0b2Zvcm1hdG5hbWUiOmNhc2UidmVyc2lvbmxhc3RlZGl0IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjpzd2l0Y2gocGVbM10pe2Nhc2UicmFuZ2UiOkZpLnJlZj1w''@;'; put 'put ''ZTticmVhaztjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpj''@;'; put 'put ''YXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhpZGUiOmNhc2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6Y2FzZSJjZWxscmFu''@;'; put 'put ''Z2VsaXN0IjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2Uic29ydGluZyI6Y2FzZSJjb25kaXRpb25hbGZvcm1hdHRpbmciOnN3aXRjaChwZVszXSl7Y2FzZSJyYW5nZSI6Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNl''@;'; put 'put ''Im9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6''@;'; put 'put ''Y2FzZSJpbnB1dGhpZGUiOmNhc2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlIm1hcGluZm8iOmNhc2Uic2NoZW1hIjpjYXNlImRhdGEi''@;'; put 'put ''OnN3aXRjaChwZVszXSl7Y2FzZSJtYXAiOmNhc2UiZW50cnkiOmNhc2UicmFuZ2UiOmNhc2UieHBhdGgiOmNhc2UiZmllbGQiOmNhc2UieHNkdHlwZSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJhZ2dyZWdhdGUiOmNhc2UiZWxlbWVudHR5cGUiOmNhc2UiYXR0cmlidXRldHlwZSI6Y2FzZSJzY2hl''@;'; put 'put ''bWEiOmNhc2UiZWxlbWVudCI6Y2FzZSJjb21wbGV4dHlwZSI6Y2FzZSJkYXRhdHlwZSI6Y2FzZSJhbGwiOmNhc2UiYXR0cmlidXRlIjpjYXNlImV4dGVuZHMiOmNhc2Uicm93IjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2Uic21hcnR0YWdzIjpicmVhaztkZWZhdWx0OmhyPSExfWlm''@;'; put 'put ''KGhyfHxwZVszXS5tYXRjaCgvIVxbQ0RBVEEvKSlicmVhaztpZigheWVbeWUubGVuZ3RoLTFdWzFdKXRocm93IlVucmVjb2duaXplZCB0YWc6ICIrcGVbM10rInwiK3llLmpvaW4oInwiKTtpZigiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIj09PXllW3llLmxlbmd0aC0xXVswXSl7aWYoIi8+''@;'; put 'put ''Ij09PXBlWzBdLnNsaWNlKC0yKSlicmVhazsiLyI9PT1wZVsxXT9JeihicixzbyxNaSxHLnNsaWNlKGVyLHBlLmluZGV4KSk6KE1pPXBlLGVyPXBlLmluZGV4K3BlWzBdLmxlbmd0aCk7YnJlYWt9aWYoay5XVEYpdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIitwZVszXSsifCIreWUuam9pbigi''@;'; put 'put ''fCIpfXZhciBHbD17fTtyZXR1cm4hay5ib29rU2hlZXRzJiYhay5ib29rUHJvcHMmJihHbC5TaGVldHM9TmUpLEdsLlNoZWV0TmFtZXM9WWUsR2wuV29ya2Jvb2s9eWksR2wuU1NGPUEuZ2V0X3RhYmxlKCksR2wuUHJvcHM9ZnIsR2wuQ3VzdHByb3BzPWJyLEdsLlNoZWV0cyYmR2wuU2hlZXRO''@;'; put 'put ''YW1lcy5mb3JFYWNoKGZ1bmN0aW9uKHl1KXt2YXIgTWw9R2wuU2hlZXRzW3l1XTtNbFsiIW1lcmdlcyJdJiZNbFsiIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24obG4peyJzdHJpbmciPT10eXBlb2YgbG4mJihsbj13LnV0aWxzLmRlY29kZV9yYW5nZShsbikpO3ZhciBFbj13LnV0aWxzLmVu''@;'; put 'put ''Y29kZV9jZWxsKGxuLnMpLFVuPUFycmF5LmlzQXJyYXkoTWwpPyhNbFtsbi5zLnJdfHxbXSlbbG4ucy5jXTpNbFtFbl07VW4mJlVuLnMmJihudWxsIT1Vbi5zLnRvcCYmenUuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKE1sLGxuLHt0b3A6VW4ucy50b3B9KSxudWxsIT1Vbi5zLmJvdHRvbSYmenUu''@;'; put 'put ''c2hlZXRfc2V0X3JhbmdlX3N0eWxlKE1sLGxuLHtib3R0b206VW4ucy5ib3R0b219KSxudWxsIT1Vbi5zLmxlZnQmJnp1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShNbCxsbix7bGVmdDpVbi5zLmxlZnR9KSxudWxsIT1Vbi5zLnJpZ2h0JiZ6dS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoTWwsbG4s''@;'; put 'put ''e3JpZ2h0OlVuLnMucmlnaHR9KSl9KX0pLEdsfWZ1bmN0aW9uIEk4KFMsUil7c3dpdGNoKE5JKFI9Unx8e30pLFIudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gRDgoX2UuZGVjb2RlKFMpLFIpO2Nhc2UiYmluYXJ5IjpjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjpyZXR1cm4g''@;'; put 'put ''RDgoUyxSKTtjYXNlImFycmF5IjpyZXR1cm4gRDgoQyhTKSxSKX19ZnVuY3Rpb24geUkoUyl7cmV0dXJuIFByKCJOYW1lZFJhbmdlIixudWxsLHsic3M6TmFtZSI6Uy5OYW1lLCJzczpSZWZlcnNUbyI6Ij0iK0g0KFMuUmVmLHtyOjAsYzowfSl9KX1mdW5jdGlvbiBObmUoUyxSLGssRyxRLG9l''@;'; put 'put ''LGdlKXtpZighU3x8bnVsbD09Uy52JiZudWxsPT1TLmYmJiFHLnNoZWV0U3R1YnMpcmV0dXJuIiI7dmFyIHBlPXt9O2lmKFMuZiYmKHBlWyJzczpGb3JtdWxhIl09Ij0iK0xyKEg0KFMuZixnZSkpKSxTLkYmJlMuRi5zbGljZSgwLFIubGVuZ3RoKT09Uil7dmFyIHllPU5vKFMuRi5zbGljZShS''@;'; put 'put ''Lmxlbmd0aCsxKSk7cGVbInNzOkFycmF5UmFuZ2UiXT0iUkM6UiIrKHllLnI9PWdlLnI/IiI6IlsiKyh5ZS5yLWdlLnIpKyJdIikrIkMiKyh5ZS5jPT1nZS5jPyIiOiJbIisoeWUuYy1nZS5jKSsiXSIpfWlmKFMubCYmUy5sLlRhcmdldCYmKHBlWyJzczpIUmVmIl09THIoUy5sLlRhcmdldCks''@;'; put 'put ''Uy5sLlRvb2x0aXAmJihwZVsieDpIUmVmU2NyZWVuVGlwIl09THIoUy5sLlRvb2x0aXApKSksa1siIW1lcmdlcyJdKWZvcih2YXIgUGU9a1siIW1lcmdlcyJdLE5lPTA7TmUhPVBlLmxlbmd0aDsrK05lKVBlW05lXS5zLmMhPWdlLmN8fFBlW05lXS5zLnIhPWdlLnJ8fChQZVtOZV0uZS5jPlBl''@;'; put 'put ''W05lXS5zLmMmJihwZVsic3M6TWVyZ2VBY3Jvc3MiXT1QZVtOZV0uZS5jLVBlW05lXS5zLmMpLFBlW05lXS5lLnI+UGVbTmVdLnMuciYmKHBlWyJzczpNZXJnZURvd24iXT1QZVtOZV0uZS5yLVBlW05lXS5zLnIpKTt2YXIgWWU9IiIsZXQ9IiI7c3dpdGNoKFMudCl7Y2FzZSJ6IjppZighRy5z''@;'; put 'put ''aGVldFN0dWJzKXJldHVybiIiO2JyZWFrO2Nhc2UibiI6WWU9Ik51bWJlciIsZXQ9U3RyaW5nKFMudik7YnJlYWs7Y2FzZSJiIjpZZT0iQm9vbGVhbiIsZXQ9Uy52PyIxIjoiMCI7YnJlYWs7Y2FzZSJlIjpZZT0iRXJyb3IiLGV0PU1jW1Mudl07YnJlYWs7Y2FzZSJkIjpZZT0iRGF0ZVRpbWUi''@;'; put 'put ''LGV0PW5ldyBEYXRlKFMudikudG9JU09TdHJpbmcoKSxudWxsPT1TLnomJihTLno9Uy56fHxBLl90YWJsZVsxNF0pO2JyZWFrO2Nhc2UicyI6WWU9IlN0cmluZyIsZXQ9eWEoUy52fHwiIil9dmFyIGN0PWwwKEcuY2VsbFhmcyxudWxsLFMsRyk7cGVbInNzOlN0eWxlSUQiXT0icyIrKDIxK2N0''@;'; put 'put ''KSxwZVsic3M6SW5kZXgiXT1nZS5jKzE7dmFyIEV0PW51bGwhPVMudj9ldDoiIixhdD0ieiI9PVMudD8iIjpTLlI/ZnVuY3Rpb24gRWIoUyl7cmV0dXJuJzxzczpEYXRhIHNzOlR5cGU9IlN0cmluZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPicrUy5tYXAoZnVu''@;'; put 'put ''Y3Rpb24oayl7dmFyIEc9eWEoay52KTtyZXR1cm4gay5zJiYoay5zLmJvbGQmJihHPSI8Qj4iK0crIjwvQj4iKSxrLnMuaXRhbGljJiYoRz0iPEk+IitHKyI8L0k+Iiksay5zLnN0cmlrZSYmKEc9IjxTPiIrRysiPC9TPiIpLGsucy51bmRlcmxpbmUmJihHPSI8VT4iK0crIjwvVT4iKSwic3Vw''@;'; put 'put ''ZXIiPT1rLnMudmFsaWduJiYoRz0iPFN1cD4iK0crIjwvU3VwPiIpLCJzdWIiPT1rLnMudmFsaWduJiYoRz0iPFN1Yj4iK0crIjwvU3ViPiIpLChrLnMubmFtZXx8ay5zLnN6fHxrLnMuY29sb3ImJm51bGwhPWsucy5jb2xvci5yZ2IpJiYoRz1bIjxGb250IixrLnMubmFtZT8nIGh0bWw6RmFj''@;'; put 'put ''ZT0iJytrLnMubmFtZSsnIic6IiIsay5zLnN6PycgaHRtbDpTaXplPSInK2sucy5zeisnIic6IiIsay5zLmNvbG9yPycgaHRtbDpDb2xvcj0iIycrKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIGsucy5jb2xvci5yZ2I/ay5zLmNvbG9yLnJnYi50b1N0cmluZygxNik6ay5zLmNvbG9yLnJn''@;'; put 'put ''YikpLnNsaWNlKC02KSsnIic6IiIsIj4iLEcsIjwvRm9udD4iXS5qb2luKCIiKSkpLEd9KS5qb2luKCIiKSsiPC9EYXRhPiJ9KFMuUik6JzxEYXRhIHNzOlR5cGU9IicrWWUrJyI+JytFdCsiPC9EYXRhPiI7cmV0dXJuKFMuY3x8W10pLmxlbmd0aD4wJiYoYXQrPWZ1bmN0aW9uIHdJKFMpe3Jl''@;'; put 'put ''dHVybiBTLm1hcChmdW5jdGlvbihSKXt2YXIgRz1Qcigic3M6RGF0YSIsRmEoUi50fHwiIikse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0pO3JldHVybiBQcigiQ29tbWVudCIsRyx7InNzOkF1dGhvciI6Ui5hfSl9KS5qb2luKCIiKX0oUy5jKSksUHIoIkNlbGwi''@;'; put 'put ''LGF0LHBlKX1mdW5jdGlvbiBWbmUoUyxSKXt2YXIgaz0nPFJvdyBzczpJbmRleD0iJysoUysxKSsnIic7cmV0dXJuIFImJihSLmhweCYmIVIuaHB0JiYoUi5ocHQ9VTMoUi5ocHgpKSxSLmhwdCYmKGsrPScgc3M6QXV0b0ZpdEhlaWdodD0iMCIgc3M6SGVpZ2h0PSInK1IuaHB0KyciJyksUi5o''@;'; put 'put ''aWRkZW4mJihrKz0nIHNzOkhpZGRlbj0iMSInKSksaysiPiJ9ZnVuY3Rpb24gQ0koUyxSLGspe3ZhciBHPVtdLG9lPWsuU2hlZXRzW2suU2hlZXROYW1lc1tTXV0sZ2U9b2U/ZnVuY3Rpb24gT3ooUyxSLGssRyl7aWYoIVN8fCEoKEd8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIi''@;'; put 'put ''O2Zvcih2YXIgUT1HLldvcmtib29rLk5hbWVzLG9lPVtdLGdlPTA7Z2U8US5sZW5ndGg7KytnZSl7dmFyIHBlPVFbZ2VdO3BlLlNoZWV0PT1rJiYocGUuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8b2UucHVzaCh5SShwZSkpKX1yZXR1cm4gb2Uuam9pbigiIil9KG9lLDAsUyxrKToiIjtyZXR1''@;'; put 'put ''cm4gZ2UubGVuZ3RoPjAmJkcucHVzaCgiPE5hbWVzPiIrZ2UrIjwvTmFtZXM+IiksZ2U9b2U/ZnVuY3Rpb24gUHooUyxSLGssRyl7aWYoIVNbIiFyZWYiXSlyZXR1cm4iIjt2YXIgUT1vbyhTWyIhcmVmIl0pLG9lPVNbIiFtZXJnZXMiXXx8W10sZ2U9MCxwZT1bXTtTWyIhY29scyJdJiZTWyIh''@;'; put 'put ''Y29scyJdLmZvckVhY2goZnVuY3Rpb24oYnQsanQpe1EwKGJ0KTt2YXIga3Q9ISFidC53aWR0aCxPdD11OChqdCxidCksS3Q9eyJzczpJbmRleCI6anQrMX07a3QmJihLdFsic3M6V2lkdGgiXT1NNShPdC53aWR0aCkpLGJ0LmhpZGRlbiYmKEt0WyJzczpIaWRkZW4iXT0iMSIpLHBlLnB1c2go''@;'; put 'put ''UHIoIkNvbHVtbiIsbnVsbCxLdCkpfSk7Zm9yKHZhciB5ZT1BcnJheS5pc0FycmF5KFMpLFBlPVEucy5yO1BlPD1RLmUucjsrK1BlKXtmb3IodmFyIE5lPVtWbmUoUGUsKFNbIiFyb3dzIl18fFtdKVtQZV0pXSxZZT1RLnMuYztZZTw9US5lLmM7KytZZSl7dmFyIGV0PSExO2ZvcihnZT0wO2dl''@;'; put 'put ''IT1vZS5sZW5ndGg7KytnZSlpZighKG9lW2dlXS5zLmM+WWV8fG9lW2dlXS5zLnI+UGV8fG9lW2dlXS5lLmM8WWV8fG9lW2dlXS5lLnI8UGUpKXsob2VbZ2VdLnMuYyE9WWV8fG9lW2dlXS5zLnIhPVBlKSYmKGV0PSEwKTticmVha31pZighZXQpe3ZhciBjdD17cjpQZSxjOlllfSxFdD1xaShj''@;'; put 'put ''dCk7TmUucHVzaChObmUoeWU/KFNbUGVdfHxbXSlbWWVdOlNbRXRdLEV0LFMsUiwwLDAsY3QpKX19TmUucHVzaCgiPC9Sb3c+IiksTmUubGVuZ3RoPjImJnBlLnB1c2goTmUuam9pbigiIikpfXJldHVybiBwZS5qb2luKCIiKX0ob2UsUik6IiIsZ2UubGVuZ3RoPjAmJkcucHVzaCgiPFRhYmxl''@;'; put 'put ''PiIrZ2UrIjwvVGFibGU+IiksRy5wdXNoKGZ1bmN0aW9uIFlTKFMsUixrLEcpe2lmKCFTKXJldHVybiIiO3ZhciBRPVtdO2lmKFNbIiFtYXJnaW5zIl0mJihRLnB1c2goIjxQYWdlU2V0dXA+IiksU1siIW1hcmdpbnMiXS5oZWFkZXImJlEucHVzaChQcigiSGVhZGVyIixudWxsLHsieDpNYXJn''@;'; put 'put ''aW4iOlNbIiFtYXJnaW5zIl0uaGVhZGVyfSkpLFNbIiFtYXJnaW5zIl0uZm9vdGVyJiZRLnB1c2goUHIoIkZvb3RlciIsbnVsbCx7Ing6TWFyZ2luIjpTWyIhbWFyZ2lucyJdLmZvb3Rlcn0pKSxRLnB1c2goUHIoIlBhZ2VNYXJnaW5zIixudWxsLHsieDpCb3R0b20iOlNbIiFtYXJnaW5zIl0u''@;'; put 'put ''Ym90dG9tfHwiMC43NSIsIng6TGVmdCI6U1siIW1hcmdpbnMiXS5sZWZ0fHwiMC43IiwieDpSaWdodCI6U1siIW1hcmdpbnMiXS5yaWdodHx8IjAuNyIsIng6VG9wIjpTWyIhbWFyZ2lucyJdLnRvcHx8IjAuNzUifSkpLFEucHVzaCgiPC9QYWdlU2V0dXA+IikpLEcmJkcuV29ya2Jvb2smJkcu''@;'; put 'put ''V29ya2Jvb2suU2hlZXRzJiZHLldvcmtib29rLlNoZWV0c1trXSlpZihHLldvcmtib29rLlNoZWV0c1trXS5IaWRkZW4pUS5wdXNoKFByKCJWaXNpYmxlIiwxPT1HLldvcmtib29rLlNoZWV0c1trXS5IaWRkZW4/IlNoZWV0SGlkZGVuIjoiU2hlZXRWZXJ5SGlkZGVuIix7fSkpO2Vsc2V7Zm9y''@;'; put 'put ''KHZhciBvZT0wO29lPGsmJighRy5Xb3JrYm9vay5TaGVldHNbb2VdfHxHLldvcmtib29rLlNoZWV0c1tvZV0uSGlkZGVuKTsrK29lKTtvZT09ayYmUS5wdXNoKCI8U2VsZWN0ZWQvPiIpfWlmKCgoKChHfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiZRLnB1c2go''@;'; put 'put ''IjxEaXNwbGF5UmlnaHRUb0xlZnQvPiIpLFd0KFNbIiFncmlkbGluZXMiXSkmJlEucHVzaCgiPERvTm90RGlzcGxheUdyaWRsaW5lcy8+IiksU1siIWZyZWV6ZSJdKXtRLnB1c2goIjxGcmVlemVQYW5lcy8+IiksUS5wdXNoKCI8RnJvemVuTm9TcGxpdC8+Iik7dmFyIGdlPU5vKFNbIiFmcmVl''@;'; put 'put ''emUiXSk7Z2Uucj4wJiYoUS5wdXNoKEhhKCJTcGxpdEhvcml6b250YWwiLCIiK2dlLnIpKSxRLnB1c2goSGEoIlRvcFJvd0JvdHRvbVBhbmUiLCIiK2dlLnIpKSksZ2UuYz4wJiYoUS5wdXNoKEhhKCJTcGxpdFZlcnRpY2FsIiwiIitnZS5jKSksUS5wdXNoKEhhKCJMZWZ0Q29sdW1uUmlnaHRQ''@;'; put 'put ''YW5lIiwiIitnZS5jKSkpfXJldHVybiBTWyIhcHJvdGVjdCJdJiYoUS5wdXNoKEhhKCJQcm90ZWN0Q29udGVudHMiLCJUcnVlIikpLFNbIiFwcm90ZWN0Il0ub2JqZWN0cyYmUS5wdXNoKEhhKCJQcm90ZWN0T2JqZWN0cyIsIlRydWUiKSksU1siIXByb3RlY3QiXS5zY2VuYXJpb3MmJlEucHVz''@;'; put 'put ''aChIYSgiUHJvdGVjdFNjZW5hcmlvcyIsIlRydWUiKSksbnVsbD09U1siIXByb3RlY3QiXS5zZWxlY3RMb2NrZWRDZWxsc3x8U1siIXByb3RlY3QiXS5zZWxlY3RMb2NrZWRDZWxscz9udWxsIT1TWyIhcHJvdGVjdCJdLnNlbGVjdFVubG9ja2VkQ2VsbHMmJiFTWyIhcHJvdGVjdCJdLnNlbGVj''@;'; put 'put ''dFVubG9ja2VkQ2VsbHMmJlEucHVzaChIYSgiRW5hYmxlU2VsZWN0aW9uIiwiVW5sb2NrZWRDZWxscyIpKTpRLnB1c2goSGEoIkVuYWJsZVNlbGVjdGlvbiIsIk5vU2VsZWN0aW9uIikpLFtbImZvcm1hdENlbGxzIiwiQWxsb3dGb3JtYXRDZWxscyJdLFsiZm9ybWF0Q29sdW1ucyIsIkFsbG93''@;'; put 'put ''U2l6ZUNvbHMiXSxbImZvcm1hdFJvd3MiLCJBbGxvd1NpemVSb3dzIl0sWyJpbnNlcnRDb2x1bW5zIiwiQWxsb3dJbnNlcnRDb2xzIl0sWyJpbnNlcnRSb3dzIiwiQWxsb3dJbnNlcnRSb3dzIl0sWyJpbnNlcnRIeXBlcmxpbmtzIiwiQWxsb3dJbnNlcnRIeXBlcmxpbmtzIl0sWyJkZWxldGVD''@;'; put 'put ''b2x1bW5zIiwiQWxsb3dEZWxldGVDb2xzIl0sWyJkZWxldGVSb3dzIiwiQWxsb3dEZWxldGVSb3dzIl0sWyJzb3J0IiwiQWxsb3dTb3J0Il0sWyJhdXRvRmlsdGVyIiwiQWxsb3dGaWx0ZXIiXSxbInBpdm90VGFibGVzIiwiQWxsb3dVc2VQaXZvdFRhYmxlcyJdXS5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KHBlKXtTWyIhcHJvdGVjdCJdW3BlWzBdXSYmUS5wdXNoKCI8IitwZVsxXSsiLz4iKX0pKSwwPT1RLmxlbmd0aD8iIjpQcigiV29ya3NoZWV0T3B0aW9ucyIsUS5qb2luKCIiKSx7eG1sbnM6eWwueH0pfShvZSwwLFMsaykpLEcuam9pbigiIil9ZnVuY3Rpb24gU0koUyxSKXtSfHwoUj17fSks''@;'; put 'put ''Uy5TU0Z8fChTLlNTRj1BLmdldF90YWJsZSgpKSxTLlNTRiYmKGFlKEEpLEEubG9hZF90YWJsZShTLlNTRiksUi5yZXZzc2Y9a2UoUy5TU0YpLFIucmV2c3NmW1MuU1NGWzY1NTM1XV09MCxSLnNzZj1TLlNTRixTLlN0eWxlcz17Rm9udHM6Ui5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZTox''@;'; put 'put ''LHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpSLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpSLkJvcmRlcnM9W3t9XX0sUi5jZWxsWGZzPVtdLFIuY2VsbFN0eWxl''@;'; put 'put ''WGZzPVt7bmFtZToiTm9ybWFsIn1dLGwwKFIuY2VsbFhmcyxudWxsLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSk7dmFyIGs9W107ay5wdXNoKGZ1bmN0aW9uIG1JKFMsUil7dmFyIGs9W107cmV0dXJuIFMuUHJvcHMmJmsucHVzaChmdW5jdGlvbiBadyhTLFIpe3ZhciBrPVtdO3JldHVybiBP''@;'; put 'put ''ZShQNikubWFwKGZ1bmN0aW9uKEcpe2Zvcih2YXIgUT0wO1E8UjAubGVuZ3RoOysrUSlpZihSMFtRXVsxXT09RylyZXR1cm4gUjBbUV07Zm9yKFE9MDtRPHJoLmxlbmd0aDsrK1EpaWYocmhbUV1bMV09PUcpcmV0dXJuIHJoW1FdO3Rocm93IEd9KS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKG51''@;'; put 'put ''bGwhPVNbR1sxXV0pe3ZhciBRPVImJlIuUHJvcHMmJm51bGwhPVIuUHJvcHNbR1sxXV0/Ui5Qcm9wc1tHWzFdXTpTW0dbMV1dOyJkYXRlIj09PUdbMl0mJihRPW5ldyBEYXRlKFEpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiWiIpKSwibnVtYmVyIj09dHlwZW9mIFE/UT1TdHJp''@;'; put 'put ''bmcoUSk6ITA9PT1RfHwhMT09PVE/UT1RPyIxIjoiMCI6USBpbnN0YW5jZW9mIERhdGUmJihRPW5ldyBEYXRlKFEpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiIikpLGsucHVzaChIYShQNltHWzFdXXx8R1sxXSxRKSl9fSksUHIoIkRvY3VtZW50UHJvcGVydGllcyIsay5qb2lu''@;'; put 'put ''KCIiKSx7eG1sbnM6eWwub30pfShTLlByb3BzLFIpKSxTLkN1c3Rwcm9wcyYmay5wdXNoKGZ1bmN0aW9uIEg2KFMsUil7dmFyIGs9WyJXb3Jrc2hlZXRzIiwiU2hlZXROYW1lcyJdLEc9IkN1c3RvbURvY3VtZW50UHJvcGVydGllcyIsUT1bXTtyZXR1cm4gUyYmT2UoUykuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihvZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsb2UpKXtmb3IodmFyIGdlPTA7Z2U8UjAubGVuZ3RoOysrZ2UpaWYob2U9PVIwW2dlXVsxXSlyZXR1cm47Zm9yKGdlPTA7Z2U8cmgubGVuZ3RoOysrZ2UpaWYob2U9PXJoW2dlXVsxXSlyZXR1cm47Zm9y''@;'; put 'put ''KGdlPTA7Z2U8ay5sZW5ndGg7KytnZSlpZihvZT09a1tnZV0pcmV0dXJuO3ZhciBwZT1TW29lXSx5ZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIHBlPyh5ZT0iZmxvYXQiLHBlPVN0cmluZyhwZSkpOiEwPT09cGV8fCExPT09cGU/KHllPSJib29sZWFuIixwZT1wZT8iMSI6IjAiKTpwZT1T''@;'; put 'put ''dHJpbmcocGUpLFEucHVzaChQcihwYShvZSkscGUseyJkdDpkdCI6eWV9KSl9fSksUiYmT2UoUikuZm9yRWFjaChmdW5jdGlvbihvZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFIsb2UpJiYoIVN8fCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoUyxvZSkpKXt2YXIgZ2U9UltvZV0scGU9InN0cmluZyI7Im51bWJlciI9PXR5cGVvZiBnZT8ocGU9ImZsb2F0IixnZT1TdHJpbmcoZ2UpKTohMD09PWdlfHwhMT09PWdlPyhwZT0iYm9vbGVhbiIsZ2U9Z2U/IjEiOiIwIik6Z2UgaW5zdGFuY2VvZiBEYXRlPyhwZT0iZGF0ZVRpbWUudHoi''@;'; put 'put ''LGdlPWdlLnRvSVNPU3RyaW5nKCkpOmdlPVN0cmluZyhnZSksUS5wdXNoKFByKHBhKG9lKSxnZSx7ImR0OmR0IjpwZX0pKX19KSwiPCIrRysnIHhtbG5zPSInK3lsLm8rJyI+JytRLmpvaW4oIiIpKyI8LyIrRysiPiJ9KFMuUHJvcHMsUy5DdXN0cHJvcHMpKSxrLmpvaW4oIiIpfShTLFIpKSxr''@;'; put 'put ''LnB1c2goIiIpLGsucHVzaCgiIiksay5wdXNoKCIiKTtmb3IodmFyIEc9MDtHPFMuU2hlZXROYW1lcy5sZW5ndGg7KytHKWsucHVzaChQcigiV29ya3NoZWV0IixDSShHLFIsUykseyJzczpOYW1lIjpMcihTLlNoZWV0TmFtZXNbR10pfSkpO3JldHVybiBrWzJdPWZ1bmN0aW9uIGJJKFMsUil7''@;'; put 'put ''dmFyIEc9W1snPFN0eWxlIHNzOklEPSJEZWZhdWx0IiBzczpOYW1lPSJOb3JtYWwiPicsJzxBbGlnbm1lbnQgc3M6VmVydGljYWw9IkJvdHRvbSIvPicsIjxCb3JkZXJzLz4iLCc8Rm9udCBzczpGb250TmFtZT0iQ2FsaWJyaSIgeDpGYW1pbHk9IlN3aXNzIiBzczpTaXplPSIxMiIgc3M6Q29s''@;'; put 'put ''b3I9IiMwMDAwMDAiLz4nLCI8SW50ZXJpb3IvPiIsIjxOdW1iZXJGb3JtYXQvPiIsIjxQcm90ZWN0aW9uLz4iLCI8L1N0eWxlPiJdLmpvaW4oIiIpXTtyZXR1cm4gUi5jZWxsWGZzLmZvckVhY2goZnVuY3Rpb24oUSxvZSl7dmFyIGdlPVtdO2lmKFEuYWxpZ25tZW50KXt2YXIgcGU9e307US5h''@;'; put 'put ''bGlnbm1lbnQuc2hyaW5rVG9GaXQmJihwZVsic3M6U2hyaW5rVG9GaXQiXT0iMSIpLFEuYWxpZ25tZW50LndyYXBUZXh0JiYocGVbInNzOldyYXBUZXh0Il09IjEiKSxRLmFsaWdubWVudC52ZXJ0aWNhbCYmKHBlWyJzczpWZXJ0aWNhbCJdPUF0KFEuYWxpZ25tZW50LnZlcnRpY2FsKSksUS5h''@;'; put 'put ''bGlnbm1lbnQuaG9yaXpvbnRhbCYmKHBlWyJzczpIb3Jpem9udGFsIl09QXQoUS5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpLFEuYWxpZ25tZW50LmluZGVudCYmKHBlWyJzczpJbmRlbnQiXT1RLmFsaWdubWVudC5pbmRlbnQpLFEuYWxpZ25tZW50LnRleHRSb3RhdGlvbiYmKHBlWyJzczpSb3Rh''@;'; put 'put ''dGUiXT1RLmFsaWdubWVudC50ZXh0Um90YXRpb24pLGdlLnB1c2goUHIoIkFsaWdubWVudCIsbnVsbCxwZSkpfWU6aWYobnVsbCE9US5mb250SWQpe3ZhciB5ZT1SLkZvbnRzW1EuZm9udElkXTtpZigheWUpYnJlYWsgZTt2YXIgUGU9eyJzczpGb250TmFtZSI6IkNhbGlicmkiLCJzczpTaXpl''@;'; put 'put ''IjoiMTIifSxOZT0hMTt5ZS5ib2xkJiYoTmU9ITAsUGVbInNzOkJvbGQiXT0iMSIpLHllLml0YWxpYyYmKE5lPSEwLFBlWyJzczpJdGFsaWMiXT0iMSIpLHllLnN0cmlrZSYmKE5lPSEwLFBlWyJzczpTdHJpa2VUaHJvdWdoIl09IjEiKSxudWxsIT15ZS51bmRlcmxpbmUmJihOZT0hMCxQZVsi''@;'; put 'put ''c3M6VW5kZXJsaW5lIl09eGJbeWUudW5kZXJsaW5lXXx8KHllLnVuZGVybGluZT8iU2luZ2xlIjoiTm9uZSIpKSxudWxsIT15ZS5zeiYmKE5lPSEwLFBlWyJzczpTaXplIl09eWUuc3opLG51bGwhPXllLm5hbWUmJihOZT0hMCxQZVsic3M6Rm9udE5hbWUiXT15ZS5uYW1lKSx5ZS5jb2xvciYm''@;'; put 'put ''bnVsbCE9eWUuY29sb3IucmdiJiYoTmU9ITAsUGVbInNzOkNvbG9yIl09IiMiKygibnVtYmVyIj09dHlwZW9mIHllLmNvbG9yLnJnYj8iMDAwMDAwIit5ZS5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOnllLmNvbG9yLnJnYikuc2xpY2UoLTYpKSxbInN1YiIsInN1cGVyIl0uaW5kZXhPZih5ZS52''@;'; put 'put ''YWxpZ24pPi0xJiYoUGVbInNzOlZlcnRpY2FsQWxpZ24iXT1BdCh5ZS52YWxpZ24pKyJzY3JpcHQiKSxOZSYmZ2UucHVzaChQcigiRm9udCIsbnVsbCxQZSkpfWU6aWYoUS5maWxsSWQ+MCl7dmFyIFllPVIuRmlsbHNbUS5maWxsSWRdO2lmKCFZZXx8IVllLmZnQ29sb3J8fG51bGw9PVllLmZn''@;'; put 'put ''Q29sb3IucmdiKWJyZWFrIGU7Z2UucHVzaChQcigiSW50ZXJpb3IiLG51bGwseyJzczpQYXR0ZXJuIjp2Q1tZZS5wYXR0ZXJuVHlwZV18fCJTb2xpZCIsInNzOkNvbG9yIjoiIyIrKCJudW1iZXIiPT10eXBlb2YgWWUuZmdDb2xvci5yZ2I/IjAwIitZZS5mZ0NvbG9yLnJnYi50b1N0cmluZygx''@;'; put 'put ''Nik6WWUuZmdDb2xvci5yZ2IpLnNsaWNlKC02KX0pKX1nZS5wdXNoKFByKCJOdW1iZXJGb3JtYXQiLG51bGwseyJzczpGb3JtYXQiOkxyKEEuX3RhYmxlW1EubnVtRm10SWRdKX0pKTt2YXIgZXQ9eyJzczpJRCI6InMiKygyMStvZSl9O1Euc3R5bGUmJihldFsic3M6TmFtZSJdPVEuc3R5bGUp''@;'; put 'put ''LEcucHVzaChQcigiU3R5bGUiLGdlLmpvaW4oIiIpLGV0KSl9KSxQcigiU3R5bGVzIixHLmpvaW4oIiIpKX0oMCxSKSxrWzNdPWZ1bmN0aW9uIF9JKFMpe2lmKCEoKFN8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgUj1TLldvcmtib29rLk5hbWVzLGs9W10sRz0w''@;'; put 'put ''O0c8Ui5sZW5ndGg7KytHKXt2YXIgUT1SW0ddO251bGw9PVEuU2hlZXQmJihRLk5hbWUubWF0Y2goL15feGxmblwuLyl8fGsucHVzaCh5SShRKSkpfXJldHVybiBQcigiTmFtZXMiLGsuam9pbigiIikpfShTKSxJaStQcigiV29ya2Jvb2siLGsuam9pbigiIikse3htbG5zOnlsLnNzLCJ4bWxu''@;'; put 'put ''czpvIjp5bC5vLCJ4bWxuczp4Ijp5bC54LCJ4bWxuczpzcyI6eWwuc3MsInhtbG5zOmR0Ijp5bC5kdCwieG1sbnM6aHRtbCI6eWwuaHRtbH0pfWZ1bmN0aW9uIE1JKFMsUixrLEcpe3ZhciBRPWssb2U9W10sZ2U9Ui5zbGljZShSLmwsUi5sK1EpO2lmKEcmJkcuZW5jJiZHLmVuYy5pbnNpdHUm''@;'; put 'put ''JmdlLmxlbmd0aD4wKXN3aXRjaChTLm4pe2Nhc2UiQk9GIjpjYXNlIkZpbGVQYXNzIjpjYXNlIkZpbGVMb2NrIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJSUkRJbmZvIjpjYXNlIlJSREhlYWQiOmNhc2UiVXNyRXhjbCI6Y2FzZSJFT0YiOkcuZW5jLmluc2l0dShTZSh7bGVuZ3RoOmdlLmxl''@;'; put 'put ''bmd0aH0pLCJza2lwIik7YnJlYWs7Y2FzZSJCb3VuZFNoZWV0OCI6Ry5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6NH0pLCJza2lwIiksZ2U9QnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oZ2Uuc2xpY2UoMCw0KSksQnVmZmVyLmZyb20oRy5lbmMuaW5zaXR1KGdlLnNsaWNlKDQpKSldKTticmVh''@;'; put 'put ''aztkZWZhdWx0OmdlPUcuZW5jLmluc2l0dShnZSl9QXJyYXkuaXNBcnJheShSKSYmIUFycmF5LmlzQXJyYXkoZ2UpJiYoZ2U9QXJyYXkuZnJvbShnZSkpLG9lLnB1c2goZ2UpLFIubCs9UTtmb3IodmFyIHBlPUtTW2VvKFIsUi5sKV0seWU9MDtudWxsIT1wZSYmIkNvbnRpbnVlIj09PXBlLm4u''@;'; put 'put ''c2xpY2UoMCw4KTspUT1lbyhSLFIubCsyKSx5ZT1SLmwrNCxHJiZHLmVuYyYmRy5lbmMuaW5zaXR1JiZHLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDo0fSksInNraXAiKSwiQ29udGludWVGcnQiPT1wZS5uP3llKz00OiJDb250aW51ZUZydCI9PXBlLm4uc2xpY2UoMCwxMSkmJih5ZSs9MTIsRyYm''@;'; put 'put ''Ry5lbmMmJkcuZW5jLmluc2l0dSYmRy5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6OH0pLCJza2lwIikpLGdlPVIuc2xpY2UoeWUsUi5sKzQrUSksRyYmRy5lbmMmJkcuZW5jLmluc2l0dSYmZ2UubGVuZ3RoPjAmJihnZT1HLmVuYy5pbnNpdHUoZ2UpKSxvZS5wdXNoKGdlKSxSLmwrPTQrUSxwZT1L''@;'; put 'put ''U1tlbyhSLFIubCldO3ZhciBQZT1qKG9lKTttbihQZSwwKTt2YXIgTmU9MDtQZS5sZW5zPVtdO2Zvcih2YXIgWWU9MDtZZTxvZS5sZW5ndGg7KytZZSlQZS5sZW5zLnB1c2goTmUpLE5lKz1vZVtZZV0ubGVuZ3RoO2lmKFBlLmxlbmd0aDxrKXRocm93IlhMUyBSZWNvcmQgIisoUyYmUy5ufHwi''@;'; put 'put ''Pz8iKSsiIFRydW5jYXRlZDogIitQZS5sZW5ndGgrIiA8ICIraztyZXR1cm4gUy5mKFBlLFBlLmxlbmd0aCxHKX1mdW5jdGlvbiBkaChTLFIsayl7aWYoInoiIT09Uy50JiZTLlhGKXt2YXIgRz0wO3RyeXtHPVMuenx8Uy5YRi5udW1GbXRJZHx8MCxSLmNlbGxORiYmKFMuej1BLl90YWJsZVtH''@;'; put 'put ''XSl9Y2F0Y2gob2Upe2lmKFIuV1RGKXRocm93IG9lfWlmKCFSfHwhMSE9PVIuY2VsbFRleHQpdHJ5e1Mudz0iZSI9PT1TLnQ/Uy53fHxNY1tTLnZdOjA9PT1HfHwiR2VuZXJhbCI9PUc/Im4iPT09Uy50PygwfFMudik9PT1TLnY/QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShT''@;'; put 'put ''LnYpOkEuX2dlbmVyYWwoUy52KTpBLmZvcm1hdChHLFMudix7ZGF0ZTE5MDQ6ISFrLGRhdGVORjpSJiZSLmRhdGVORn0pfWNhdGNoKG9lKXtpZihSLldURil0aHJvdyBvZX1pZihSLmNlbGxEYXRlcyYmRyYmIm4iPT1TLnQmJkEuaXNfZGF0ZShBLl90YWJsZVtHXXx8U3RyaW5nKEcpKSl7dmFy''@;'; put 'put ''IFE9QS5wYXJzZV9kYXRlX2NvZGUoUy52KTtRJiYoUy50PSJkIixTLnY9bmV3IERhdGUoUS55LFEubS0xLFEuZCxRLkgsUS5NLFEuUyxRLnUpKX19fWZ1bmN0aW9uIFI4KFMsUixrKXtyZXR1cm57djpTLGl4ZmU6Uix0Omt9fXZhciB4ST1mdW5jdGlvbihTLFIsayl7UlsiIW9iamVjdHMiXT1T''@;'; put 'put ''fSxUYj17U0k6ImUwODU5ZmYyZjk0ZjY4MTBhYjkxMDgwMDJiMjdiM2Q5IixEU0k6IjAyZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIixVREk6IjA1ZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIn07ZnVuY3Rpb24gJFMoUyxSKXt2YXIgayxHLFEsb2U7aWYoUnx8KFI9e30p''@;'; put 'put ''LE5JKFIpLFcoKSxSLmNvZGVwYWdlJiZMKFIuY29kZXBhZ2UpLFMuRnVsbFBhdGhzKXtpZih2ZS5maW5kKFMsIi9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2s9dmUuZmluZChTLCIhQ29tcE9iaiIpLEc9dmUuZmluZChTLCIvV29y''@;'; put 'put ''a2Jvb2siKXx8dmUuZmluZChTLCIvQm9vayIpfWVsc2V7c3dpdGNoKFIudHlwZSl7Y2FzZSJiYXNlNjQiOlM9YihfZS5kZWNvZGUoUykpO2JyZWFrO2Nhc2UiYmluYXJ5IjpTPWIoUyk7YnJlYWs7Y2FzZSJidWZmZXIiOmJyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkoUyl8fChTPUFy''@;'; put 'put ''cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFMpKX1tbihTLDApLEc9e2NvbnRlbnQ6U319aWYoayYmZnVuY3Rpb24gR1MoUyl7dmFyIFI9e30saz1TLmNvbnRlbnQ7aWYoay5sPTI4LFIuQW5zaVVzZXJUeXBlPWsucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksUi5BbnNpQ2xpcGJvYXJkRm9y''@;'; put 'put ''bWF0PWZ1bmN0aW9uIF8wKFMpe3JldHVybiBQdyhTLDEpfShrKSxrLmxlbmd0aC1rLmw8PTQpcmV0dXJuIFI7dmFyIEc9ay5yZWFkX3NoaWZ0KDQpO2lmKDA9PUd8fEc+NDB8fChrLmwtPTQsUi5SZXNlcnZlZDE9ay5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSxrLmxlbmd0aC1rLmw8PTQp''@;'; put 'put ''fHwxOTA3NTA1NjUyIT09KEc9ay5yZWFkX3NoaWZ0KDQpKXx8KFIuVW5pY29kZUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBBNihTKXtyZXR1cm4gUHcoUywyKX0oayksMD09KEc9ay5yZWFkX3NoaWZ0KDQpKXx8Rz40MCkpcmV0dXJuIFI7ay5sLT00LFIuUmVzZXJ2ZWQyPWsucmVhZF9zaGlm''@;'; put 'put ''dCgwLCJscHdzdHIiKX0oayksUi5ib29rUHJvcHMmJiFSLmJvb2tTaGVldHMpUT17fTtlbHNle3ZhciBnZT1UZT8iYnVmZmVyIjoiYXJyYXkiO2lmKEcmJkcuY29udGVudClRPWZ1bmN0aW9uIEZ6KFMsUil7dmFyIGs9e29wdHM6e319LEc9e307bnVsbCE9bGUmJm51bGw9PVIuZGVuc2UmJihS''@;'; put 'put ''LmRlbnNlPWxlKTt2YXIgWWUsY3QsYXQsYnQsT3QsS3QsUT1SLmRlbnNlP1tdOnt9LG9lPXt9LGdlPXt9LHBlPW51bGwseWU9W10sUGU9IiIsTmU9e30sZXQ9IiIsanQ9e30sa3Q9W10sVG49W10scnI9W10sU249e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX0sVmlld3M6W3t9XX0s''@;'; put 'put ''bHI9e30sWG49e0ZvbnRzOltdfSxCbj1mdW5jdGlvbihEaSl7cmV0dXJuIERpPDg/cjBbRGldOkRpPDY0JiZycltEaS04XXx8cjBbRGldfSxmcj1mdW5jdGlvbihEaSxjcyl7dmFyIHhsLFlvPURpLlhGLmRhdGE7WW8mJihZby5wYXR0ZXJuVHlwZXx8bnVsbCE9WW8uaWN2Rm9yZSkmJmNzJiZj''@;'; put 'put ''cy5jZWxsU3R5bGVzJiYoRGkucz17fSxEaS5zLnBhdHRlcm5UeXBlPVlvLnBhdHRlcm5UeXBlLERpLlhGLmZvbnQmJlB0KERpLnMsRGkuWEYuZm9udCksWW8uZldyYXAmJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdubWVudD17fSkpLndyYXBUZXh0PSEwKSxZby5mU2hyaW5rVG9GaXQm''@;'; put 'put ''JigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdubWVudD17fSkpLnNocmlua1RvRml0PSEwKSxZby5oYWxpZ24mJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdubWVudD17fSkpLmhvcml6b250YWw9WW8uaGFsaWduKSxZby52YWxpZ24mJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFs''@;'; put 'put ''aWdubWVudD17fSkpLnZlcnRpY2FsPVlvLnZhbGlnbiksWW8uY0luZGVudCYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkuaW5kZW50PVlvLmNJbmRlbnQpLDY0IT1Zby5pY3ZGb3JlJiY2NSE9WW8uaWN2QmFjayYmKCh4bD1oZChCbihZby5pY3ZGb3JlKSkpJiYoRGku''@;'; put 'put ''cy5mZ0NvbG9yPXtyZ2I6eGx9KSwoeGw9aGQoQm4oWW8uaWN2QmFjaykpKSYmKERpLnMuYmdDb2xvcj17cmdiOnhsfSkpLFsiTGVmdCIsIlJpZ2h0IiwiVG9wIiwiQm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbihfdSl7WW9bImRnIitfdV0mJihEaS5zW191LnRvTG93ZXJDYXNlKCldPXtzdHls''@;'; put 'put ''ZTpwZFtZb1siZGciK191XV0sY29sb3I6e3JnYjpoZChCbihZb1siaWN2IitfdV0pKX19KX0pKX0sYnI9ZnVuY3Rpb24oRGksY3MsWW8pe2lmKCEoWmk+MXx8WW8uc2hlZXRSb3dzJiZEaS5yPj1Zby5zaGVldFJvd3MpKXtpZihZby5jZWxsU3R5bGVzJiZjcy5YRiYmY3MuWEYuZGF0YSYmZnIo''@;'; put 'put ''Y3MsWW8pLGRlbGV0ZSBjcy5peGZlLGRlbGV0ZSBjcy5YRixZZT1EaSxldD1xaShEaSksKCFnZXx8IWdlLnN8fCFnZS5lKSYmKGdlPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0pLERpLnI8Z2Uucy5yJiYoZ2Uucy5yPURpLnIpLERpLmM8Z2Uucy5jJiYoZ2Uucy5jPURpLmMpLERpLnIrMT5n''@;'; put 'put ''ZS5lLnImJihnZS5lLnI9RGkucisxKSxEaS5jKzE+Z2UuZS5jJiYoZ2UuZS5jPURpLmMrMSksWW8uY2VsbEZvcm11bGEmJmNzLmYpZm9yKHZhciB4bD0wO3hsPGt0Lmxlbmd0aDsrK3hsKWlmKCEoa3RbeGxdWzBdLnMuYz5EaS5jfHxrdFt4bF1bMF0ucy5yPkRpLnJ8fGt0W3hsXVswXS5lLmM8''@;'; put 'put ''RGkuY3x8a3RbeGxdWzBdLmUucjxEaS5yKSl7Y3MuRj1yYShrdFt4bF1bMF0pLChrdFt4bF1bMF0ucy5jIT1EaS5jfHxrdFt4bF1bMF0ucy5yIT1EaS5yKSYmZGVsZXRlIGNzLmYsY3MuZiYmKGNzLmY9IiIrczAoa3RbeGxdWzFdLGdlLERpLEZuLGVyKSk7YnJlYWt9WW8uZGVuc2U/KFFbRGku''@;'; put 'put ''cl18fChRW0RpLnJdPVtdKSxRW0RpLnJdW0RpLmNdPWNzKTpRW2V0XT1jc319LGVyPXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjpqdCxhcnJheWY6a3QscnJ0YWJpZDpbXSxsYXN0dXNlcjoiIixiaWZmOjgsY29kZXBhZ2U6MCx3aW5sb2NrZWQ6MCxjZWxsU3R5bGVzOiEhUiYm''@;'; put 'put ''ISFSLmNlbGxTdHlsZXMsV1RGOiEhUiYmISFSLnd0Zn07ZXIucGFzc3dvcmQ9Ui5wYXNzd29yZD9SLnBhc3N3b3JkOiJWZWx2ZXRTd2VhdHNob3AiO3ZhciBGaSxNaT1udWxsLG5hPVtdLGNhPVtdLExpPVtdLGtyPVtdLF9yPSExLEZuPVtdO0ZuLlNoZWV0TmFtZXM9ZXIuc25hbWVzLEZuLnNo''@;'; put 'put ''YXJlZGY9ZXIuc2hhcmVkZixGbi5hcnJheWY9ZXIuYXJyYXlmLEZuLm5hbWVzPVtdLEZuLlhUST1bXTt2YXIgaWEsanI9IiIsWmk9MCx5aT0wLF9hPVtdLHNvPVtdO2VyLmNvZGVwYWdlPTEyMDAsVSgxMjAwKTtmb3IodmFyIExvPSExO1MubDxTLmxlbmd0aC0xOyl7dmFyIE9hPVMubCxobz1T''@;'; put 'put ''LnJlYWRfc2hpZnQoMik7aWYoZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZShbMCwwXSksImhlYWRlci0wIiksMD09PWhvJiYiRU9GIj09PWpyKWJyZWFrO3ZhciBKYT1TLmw9PT1TLmxlbmd0aD8wOlMucmVhZF9zaGlmdCgyKTtlciYmZXIuZW5jJiZlci5lbmMu''@;'; put 'put ''aW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDBdKSwibGVuZ3RoLTAiKTt2YXIgQmk9S1NbaG9dO2lmKEJpJiZCaS5mKXtpZihSLmJvb2tTaGVldHMmJiJCb3VuZFNoZWV0OCI9PT1qciYmIkJvdW5kU2hlZXQ4IiE9PUJpLm4pYnJlYWs7aWYoanI9QmkubiwyPT09Qmkucnx8MTI9PUJpLnIp''@;'; put 'put ''e3ZhciBJcz1TLnJlYWRfc2hpZnQoMik7aWYoSmEtPTIsZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZShbMCwwXSkpLCFlci5lbmMmJklzIT09aG8mJigoMjU1JklzKTw8OHxJcz4+OCkhPT1obyl0aHJvdyBuZXcgRXJyb3IoInJ0IG1pc21hdGNoOiAiK0lzKyIh''@;'; put 'put ''PSIraG8pOzEyPT1CaS5yJiYoUy5sKz0xMCxKYS09MTAsZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZShbMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSl9dmFyIFBuPU1JKEJpLFMsSmEsZXIpLFdvPUJpLm47aWYoMD09WmkmJiJCT0YiIT1Xbyljb250aW51ZTtzd2l0''@;'; put 'put ''Y2goV28pe2Nhc2UiRGF0ZTE5MDQiOmsub3B0cy5EYXRlMTkwND1Tbi5XQlByb3BzLmRhdGUxOTA0PVBuO2JyZWFrO2Nhc2UiV3JpdGVQcm90ZWN0IjprLm9wdHMuV3JpdGVQcm90ZWN0PSEwO2JyZWFrO2Nhc2UiRmlsZVBhc3MiOmlmKGVyLmVuY3x8KFMubD0wLFppPTApLGVyLmVuYz1Qbiwh''@;'; put 'put ''Ui5wYXNzd29yZCYmbnVsbD09UG4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PVBuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBzY2hlbWUgdW5zdXBwb3J0ZWQiKTtpZighUG4udmFsaWQpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJQYXNzd29yZCBpcyBpbmNvcnJlY3QiKTticmVhaztjYXNlIldyaXRlQWNjZXNzIjplci5sYXN0dXNlcj1QbjticmVhaztjYXNlIkZpbGVTaGFyaW5nIjpjYXNlIlRlbXBsYXRlIjpjYXNlIkJvb2tCb29sIjpjYXNlIlVzZXNFTEZzIjpjYXNlIk1UUlNldHRpbmdzIjpjYXNlIlVuY2Fs''@;'; put 'put ''Y2VkIjpjYXNlIkV4dFNTVCI6Y2FzZSJCb29rRXh0IjpjYXNlIlJpY2hUZXh0U3RyZWFtIjpjYXNlIkJrSGltIjpjYXNlIkluZGV4IjpjYXNlIlByb3Q0UmV2IjpjYXNlIlByb3Q0UmV2UGFzcyI6YnJlYWs7Y2FzZSJDb2RlUGFnZSI6dmFyIGhyPU51bWJlcihQbik7c3dpdGNoKGhyKXtjYXNl''@;'; put 'put ''IDIxMDEwOmhyPTEyMDA7YnJlYWs7Y2FzZSAzMjc2ODpocj0xZTQ7YnJlYWs7Y2FzZSAzMjc2OTpocj0xMjUyfVUoZXIuY29kZXBhZ2U9aHIpLExvPSEwO2JyZWFrO2Nhc2UiUlJUYWJJZCI6ZXIucnJ0YWJpZD1QbjticmVhaztjYXNlIldpblByb3RlY3QiOmVyLndpbmxvY2tlZD1QbjticmVh''@;'; put 'put ''aztjYXNlIlJlZnJlc2hBbGwiOmNhc2UiQ2FsY0NvdW50IjpjYXNlIkNhbGNEZWx0YSI6Y2FzZSJDYWxjSXRlciI6Y2FzZSJDYWxjTW9kZSI6Y2FzZSJDYWxjUHJlY2lzaW9uIjpjYXNlIkNhbGNTYXZlUmVjYWxjIjprLm9wdHNbV29dPVBuO2JyZWFrO2Nhc2UiQ2FsY1JlZk1vZGUiOmVyLkNh''@;'; put 'put ''bGNSZWZNb2RlPVBuO2JyZWFrO2Nhc2UiRm9yY2VGdWxsQ2FsY3VsYXRpb24iOmsub3B0cy5GdWxsQ2FsYz1QbjticmVhaztjYXNlIldzQm9vbCI6UG4uZkRpYWxvZyYmKFFbIiF0eXBlIl09ImRpYWxvZyIpLFBuLmZCZWxvd3x8KChRWyIhb3V0bGluZSJdfHwoUVsiIW91dGxpbmUiXT17fSkp''@;'; put 'put ''LmFib3ZlPSEwKSxQbi5mUmlnaHR8fCgoUVsiIW91dGxpbmUiXXx8KFFbIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIlhGIjpQbi5mb250PVhuLkZvbnRzW1BuLmlmbnQ8ND9Qbi5pZm50OlBuLmlmbnQtMV0sVG4ucHVzaChQbik7YnJlYWs7Y2FzZSJTdXBCb29rIjpGbi5w''@;'; put 'put ''dXNoKFtQbl0pLEZuW0ZuLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSJFeHRlcm5OYW1lIjpGbltGbi5sZW5ndGgtMV0ucHVzaChQbik7YnJlYWs7Y2FzZSJMYmwiOmlhPXtOYW1lOlBuLk5hbWUsUmVmOnMwKFBuLnJnY2UsZ2UsbnVsbCxGbixlcil9LFBuLml0YWI+MCYmKGlhLlNoZWV0''@;'; put 'put ''PVBuLml0YWItMSksRm4ubmFtZXMucHVzaChpYSksRm5bMF18fChGblswXT1bXSxGblswXS5YVEk9W10pLEZuW0ZuLmxlbmd0aC0xXS5wdXNoKFBuKSwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09UG4uTmFtZSYmUG4uaXRhYj4wJiZQbi5yZ2NlJiZQbi5yZ2NlWzBdJiZQbi5yZ2NlWzBdWzBd''@;'; put 'put ''JiYiUHRnQXJlYTNkIj09UG4ucmdjZVswXVswXVswXSYmKHNvW1BuLml0YWItMV09e3JlZjpyYShQbi5yZ2NlWzBdWzBdWzFdWzJdKX0pO2JyZWFrO2Nhc2UiRXh0ZXJuQ291bnQiOmVyLkV4dGVybkNvdW50PVBuO2JyZWFrO2Nhc2UiRXh0ZXJuU2hlZXQiOjA9PUZuLmxlbmd0aCYmKEZuWzBd''@;'; put 'put ''PVtdLEZuWzBdLlhUST1bXSksRm5bRm4ubGVuZ3RoLTFdLlhUST1GbltGbi5sZW5ndGgtMV0uWFRJLmNvbmNhdChQbiksRm4uWFRJPUZuLlhUSS5jb25jYXQoUG4pO2JyZWFrO2Nhc2UiTmFtZUNtdCI6aWYoZXIuYmlmZjw4KWJyZWFrO251bGwhPWlhJiYoaWEuQ29tbWVudD1QblsxXSk7YnJl''@;'; put 'put ''YWs7Y2FzZSJQcm90ZWN0IjpRWyIhcHJvdGVjdCJdPVBuO2JyZWFrO2Nhc2UiUGFzc3dvcmQiOjAhPT1QbiYmZXIuV1RGJiZjb25zb2xlLmVycm9yKCJQYXNzd29yZCB2ZXJpZmllcjogIitQbik7YnJlYWs7Y2FzZSJCb3VuZFNoZWV0OCI6b2VbUG4ucG9zXT1Qbixlci5zbmFtZXMucHVzaChQ''@;'; put 'put ''bi5uYW1lKTticmVhaztjYXNlIkVPRiI6aWYoUVsiIWdyaWRsaW5lcyJdPSFNaXx8TWkuZ3JpZCxNaT1udWxsLC0tWmkpYnJlYWs7aWYoZ2UuZSl7aWYoZ2UuZS5yPjAmJmdlLmUuYz4wKXtpZihnZS5lLnItLSxnZS5lLmMtLSxRWyIhcmVmIl09cmEoZ2UpLFIuc2hlZXRSb3dzJiZSLnNoZWV0''@;'; put 'put ''Um93czw9Z2UuZS5yKXt2YXIgUWw9Z2UuZS5yO2dlLmUucj1SLnNoZWV0Um93cy0xLFFbIiFmdWxscmVmIl09UVsiIXJlZiJdLFFbIiFyZWYiXT1yYShnZSksZ2UuZS5yPVFsfWdlLmUucisrLGdlLmUuYysrfW5hLmxlbmd0aD4wJiYoUVsiIW1lcmdlcyJdPW5hKSxjYS5sZW5ndGg+MCYmeEko''@;'; put 'put ''Y2EsUSxYbiksTGkubGVuZ3RoPjAmJihRWyIhY29scyJdPUxpKSxrci5sZW5ndGg+MCYmKFFbIiFyb3dzIl09a3IpLFNuLlNoZWV0cy5wdXNoKGxyKX0iIj09PVBlP05lPVE6R1tQZV09USxRPVIuZGVuc2U/W106e307YnJlYWs7Y2FzZSJCT0YiOmlmKDg9PT1lci5iaWZmJiYoZXIuYmlmZj17''@;'; put 'put ''OToyLDUyMTozLDEwMzM6NH1baG9dfHx7NTEyOjIsNzY4OjMsMTAyNDo0LDEyODA6NSwxNTM2OjgsMjoyLDc6Mn1bUG4uQklGRlZlcl18fDgpLGVyLmJpZmZndWVzcz0wPT1Qbi5CSUZGVmVyLDA9PVBuLkJJRkZWZXImJjQwOTY9PVBuLmR0JiYoZXIuYmlmZj01LExvPSEwLFUoZXIuY29kZXBh''@;'; put 'put ''Z2U9Mjg1OTEpKSw4PT1lci5iaWZmJiYwPT1Qbi5CSUZGVmVyJiYxNj09UG4uZHQmJihlci5iaWZmPTIpLFppKyspYnJlYWs7aWYoUT1SLmRlbnNlP1tdOnt9LGVyLmJpZmY8OCYmIUxvJiYoTG89ITAsVShlci5jb2RlcGFnZT1SLmNvZGVwYWdlfHwxMjUyKSksZXIuYmlmZjw1fHwwPT1Qbi5C''@;'; put 'put ''SUZGVmVyJiY0MDk2PT1Qbi5kdCl7IiI9PT1QZSYmKFBlPSJTaGVldDEiKSxnZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O3ZhciBZbD17cG9zOlMubC1KYSxuYW1lOlBlfTtvZVtZbC5wb3NdPVlsLGVyLnNuYW1lcy5wdXNoKFBlKX1lbHNlIFBlPShvZVtPYV18fHtuYW1lOiIifSkubmFt''@;'; put 'put ''ZTszMj09UG4uZHQmJihRWyIhdHlwZSJdPSJjaGFydCIpLDY0PT1Qbi5kdCYmKFFbIiF0eXBlIl09Im1hY3JvIiksbmE9W10sY2E9W10sZXIuYXJyYXlmPWt0PVtdLExpPVtdLGtyPVtdLF9yPSExLGxyPXtIaWRkZW46KG9lW09hXXx8e2hzOjB9KS5ocyxuYW1lOlBlfTticmVhaztjYXNlIk51''@;'; put 'put ''bWJlciI6Y2FzZSJCSUZGMk5VTSI6Y2FzZSJCSUZGMklOVCI6ImNoYXJ0Ij09UVsiIXR5cGUiXSYmKFIuZGVuc2U/KFFbUG4ucl18fFtdKVtQbi5jXTpRW3FpKHtjOlBuLmMscjpQbi5yfSldKSYmKytQbi5jLE90PXtpeGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV18fHt9LHY6UG4udmFsLHQ6''@;'; put 'put ''Im4ifSx5aT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlBuLmMscjpQbi5yfSxPdCxSKTticmVhaztjYXNlIkJvb2xFcnIiOk90PXtpeGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV0sdjpQbi52YWwsdDpQbi50fSx5aT4wJiYoT3Qu''@;'; put 'put ''ej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlBuLmMscjpQbi5yfSxPdCxSKTticmVhaztjYXNlIlJLIjpPdD17aXhmZTpQbi5peGZlLFhGOlRuW1BuLml4ZmVdLHY6UG4ucmtudW0sdDoibiJ9LHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNd''@;'; put 'put ''KSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6UG4uYyxyOlBuLnJ9LE90LFIpO2JyZWFrO2Nhc2UiTXVsUmsiOmZvcih2YXIgR2w9UG4uYztHbDw9UG4uQzsrK0dsKXt2YXIgeXU9UG4ucmtyZWNbR2wtUG4uY11bMF07T3Q9e2l4ZmU6eXUsWEY6VG5beXVdLHY6UG4ucmtyZWNbR2wt''@;'; put 'put ''UG4uY11bMV0sdDoibiJ9LHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6R2wscjpQbi5yfSxPdCxSKX1icmVhaztjYXNlIkZvcm11bGEiOmlmKCJTdHJpbmciPT1Qbi52YWwpe3BlPVBuO2JyZWFrfWlmKChPdD1SOChQbi52YWws''@;'; put 'put ''UG4uY2VsbC5peGZlLFBuLnR0KSkuWEY9VG5bT3QuaXhmZV0sUi5jZWxsRm9ybXVsYSl7dmFyIE1sPVBuLmZvcm11bGE7aWYoTWwmJk1sWzBdJiZNbFswXVswXSYmIlB0Z0V4cCI9PU1sWzBdWzBdWzBdKXt2YXIgbG49TWxbMF1bMF1bMV1bMF0sRW49TWxbMF1bMF1bMV1bMV0sVW49cWkoe3I6''@;'; put 'put ''bG4sYzpFbn0pO2p0W1VuXT9PdC5mPSIiK3MwKFBuLmZvcm11bGEsZ2UsUG4uY2VsbCxGbixlcik6T3QuRj0oKFIuZGVuc2U/KFFbbG5dfHxbXSlbRW5dOlFbVW5dKXx8e30pLkZ9ZWxzZSBPdC5mPSIiK3MwKFBuLmZvcm11bGEsZ2UsUG4uY2VsbCxGbixlcil9eWk+MCYmKE90Lno9X2FbT3Qu''@;'; put 'put ''aXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicihQbi5jZWxsLE90LFIpLHBlPVBuO2JyZWFrO2Nhc2UiU3RyaW5nIjppZighcGUpdGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgcmVjb3JkIGV4cGVjdHMgRm9ybXVsYSIpO3BlLnZhbD1QbiwoT3Q9UjgoUG4scGUuY2VsbC5p''@;'; put 'put ''eGZlLCJzIikpLlhGPVRuW090Lml4ZmVdLFIuY2VsbEZvcm11bGEmJihPdC5mPSIiK3MwKHBlLmZvcm11bGEsZ2UscGUuY2VsbCxGbixlcikpLHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIocGUuY2VsbCxPdCxSKSxwZT1udWxsO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiQXJyYXkiOmt0LnB1c2goUG4pO3ZhciB4aT1xaShQblswXS5zKTtpZihjdD1SLmRlbnNlPyhRW1BuWzBdLnMucl18fFtdKVtQblswXS5zLmNdOlFbeGldLFIuY2VsbEZvcm11bGEmJmN0KXtpZighcGV8fCF4aXx8IWN0KWJyZWFrO2N0LmY9IiIrczAoUG5bMV0sZ2UsUG5bMF0s''@;'; put 'put ''Rm4sZXIpLGN0LkY9cmEoUG5bMF0pfWJyZWFrO2Nhc2UiU2hyRm1sYSI6aWYoIVIuY2VsbEZvcm11bGEpYnJlYWs7aWYoZXQpe2lmKCFwZSlicmVhaztqdFtxaShwZS5jZWxsKV09UG5bMF0sKChjdD1SLmRlbnNlPyhRW3BlLmNlbGwucl18fFtdKVtwZS5jZWxsLmNdOlFbcWkocGUuY2VsbCld''@;'; put 'put ''KXx8e30pLmY9IiIrczAoUG5bMF0sZ2UsWWUsRm4sZXIpfWJyZWFrO2Nhc2UiTGFiZWxTc3QiOk90PVI4KHllW1BuLmlzc3RdLnQsUG4uaXhmZSwicyIpLHllW1BuLmlzc3RdLmgmJihPdC5oPXllW1BuLmlzc3RdLmgpLE90LlhGPVRuW090Lml4ZmVdLHlpPjAmJihPdC56PV9hW090Lml4ZmU+''@;'; put 'put ''PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6UG4uYyxyOlBuLnJ9LE90LFIpLHllW1BuLmlzc3RdLlImJihPdC5SPXllW1BuLmlzc3RdLlIubWFwKGZ1bmN0aW9uKG1hKXt2YXIgRGk9cXQobWEpO3JldHVybiBtYS5zPT1Ybi5Gb250c1swXSYmKERpLnM9T3QucyksRGl9''@;'; put 'put ''KSk7YnJlYWs7Y2FzZSJCbGFuayI6Ui5zaGVldFN0dWJzJiYoT3Q9e2l4ZmU6UG4uaXhmZSxYRjpUbltQbi5peGZlXSx0OiJ6In0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3QsUikpO2JyZWFrO2Nh''@;'; put 'put ''c2UiTXVsQmxhbmsiOmlmKFIuc2hlZXRTdHVicylmb3IodmFyIG9yPVBuLmM7b3I8PVBuLkM7Kytvcil7dmFyIE9pPVBuLml4ZmVbb3ItUG4uY107T3Q9e2l4ZmU6T2ksWEY6VG5bT2ldLHQ6InoifSx5aT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5''@;'; put 'put ''MDQpLGJyKHtjOm9yLHI6UG4ucn0sT3QsUil9YnJlYWs7Y2FzZSJSU3RyaW5nIjpjYXNlIkxhYmVsIjpjYXNlIkJJRkYyU1RSIjooT3Q9UjgoUG4udmFsLFBuLml4ZmUsInMiKSkuWEY9VG5bT3QuaXhmZV0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRh''@;'; put 'put ''dGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3QsUik7YnJlYWs7Y2FzZSJEaW1lbnNpb25zIjoxPT09WmkmJihnZT1Qbik7YnJlYWs7Y2FzZSJTU1QiOih5ZT1QbikuZm9yRWFjaChmdW5jdGlvbihtYSl7bWEuX1I/KG1hLl9SWzBdJiZtYS5fUlswXS5pZHg+MCYmbWEuX1IudW5zaGlmdCh7''@;'; put 'put ''aWR4OjAsaWZudDowfSksbWEuUj1tYS5fUi5tYXAoZnVuY3Rpb24oRGksY3Mpe3JldHVybnt0OiJzIix2Om1hLnQuc2xpY2UoRGkuaWR4LChtYS5fUltjcysxXXx8e30pLmlkeCksczpYbi5Gb250c1tEaS5pZm50PDQ/RGkuaWZudDpEaS5pZm50LTFdfX0pLFIuY2VsbEhUTUwmJihtYS5oPVZ1''@;'; put 'put ''KG1hLlIpKSk6Ui5jZWxsSFRNTCYmKG1hLmg9bGEobWEudCkpLGRlbGV0ZSBtYS5fUn0pO2JyZWFrO2Nhc2UiRm9ybWF0IjppZig0PT1lci5iaWZmKXtfYVt5aSsrXT1QblsxXTtmb3IodmFyIFNyPTA7U3I8eWkrMTYzJiZBLl90YWJsZVtTcl0hPVBuWzFdOysrU3IpO1NyPj0xNjMmJkEubG9h''@;'; put 'put ''ZChQblsxXSx5aSsxNjMpfWVsc2UgQS5sb2FkKFBuWzFdLFBuWzBdKTticmVhaztjYXNlIkJJRkYyRk9STUFUIjpfYVt5aSsrXT1Qbjtmb3IodmFyIFBpPTA7UGk8eWkrMTYzJiZBLl90YWJsZVtQaV0hPVBuOysrUGkpO1BpPj0xNjMmJkEubG9hZChQbix5aSsxNjMpO2JyZWFrO2Nhc2UiTWVy''@;'; put 'put ''Z2VDZWxscyI6bmE9bmEuY29uY2F0KFBuKTticmVhaztjYXNlIk9iaiI6Y2FbUG4uY21vWzBdXT1lci5sYXN0b2JqPVBuO2JyZWFrO2Nhc2UiVHhPIjplci5sYXN0b2JqLlR4Tz1QbjticmVhaztjYXNlIkltRGF0YSI6ZXIubGFzdG9iai5JbURhdGE9UG47YnJlYWs7Y2FzZSJITGluayI6Zm9y''@;'; put 'put ''KGJ0PVBuWzBdLnMucjtidDw9UG5bMF0uZS5yOysrYnQpZm9yKGF0PVBuWzBdLnMuYzthdDw9UG5bMF0uZS5jOysrYXQpKGN0PVIuZGVuc2U/KFFbYnRdfHxbXSlbYXRdOlFbcWkoe2M6YXQscjpidH0pXSkmJihjdC5sPVBuWzFdKTticmVhaztjYXNlIkhMaW5rVG9vbHRpcCI6Zm9yKGJ0PVBu''@;'; put 'put ''WzBdLnMucjtidDw9UG5bMF0uZS5yOysrYnQpZm9yKGF0PVBuWzBdLnMuYzthdDw9UG5bMF0uZS5jOysrYXQpKGN0PVIuZGVuc2U/KFFbYnRdfHxbXSlbYXRdOlFbcWkoe2M6YXQscjpidH0pXSkmJmN0LmwmJihjdC5sLlRvb2x0aXA9UG5bMV0pO2JyZWFrO2Nhc2UiTm90ZSI6aWYoZXIuYmlm''@;'; put 'put ''Zjw9NSYmZXIuYmlmZj49MilicmVhaztjdD1SLmRlbnNlPyhRW1BuWzBdLnJdfHxbXSlbUG5bMF0uY106UVtxaShQblswXSldO3ZhciBaYT1jYVtQblsyXV07Y3R8fChSLmRlbnNlPyhRW1BuWzBdLnJdfHwoUVtQblswXS5yXT1bXSksY3Q9UVtQblswXS5yXVtQblswXS5jXT17dDoieiJ9KTpj''@;'; put 'put ''dD1RW3FpKFBuWzBdKV09e3Q6InoifSxnZS5lLnI9TWF0aC5tYXgoZ2UuZS5yLFBuWzBdLnIpLGdlLnMucj1NYXRoLm1pbihnZS5zLnIsUG5bMF0uciksZ2UuZS5jPU1hdGgubWF4KGdlLmUuYyxQblswXS5jKSxnZS5zLmM9TWF0aC5taW4oZ2Uucy5jLFBuWzBdLmMpKSxjdC5jfHwoY3QuYz1b''@;'; put 'put ''XSksY3QuYy5wdXNoKHthOlBuWzFdLHQ6WmEuVHhPLnR9KTticmVhaztkZWZhdWx0OnN3aXRjaChCaS5uKXtjYXNlIkNscnRDbGllbnQiOmNhc2UiSGVhZGVyIjpjYXNlIkZvb3RlciI6Y2FzZSJIQ2VudGVyIjpjYXNlIlZDZW50ZXIiOmNhc2UiUGxzIjpjYXNlIkdDVyI6Y2FzZSJMSFJlY29y''@;'; put 'put ''ZCI6Y2FzZSJEQkNlbGwiOmNhc2UiRW50RXhVMiI6Y2FzZSJTeFZpZXciOmNhc2UiU3h2ZCI6Y2FzZSJTWFZJIjpjYXNlIlNYVkRFeCI6Y2FzZSJTeEl2ZCI6Y2FzZSJTWFN0cmluZyI6Y2FzZSJTeW5jIjpjYXNlIkFkZGluIjpjYXNlIlNYREkiOmNhc2UiU1hMSSI6Y2FzZSJTWEV4IjpjYXNl''@;'; put 'put ''IlFzaVNYVGFnIjpjYXNlIkZlYXQiOmNhc2UiRmVhdEhkciI6Y2FzZSJGZWF0SGRyMTEiOmNhc2UiRmVhdHVyZTExIjpjYXNlIkZlYXR1cmUxMiI6Y2FzZSJMaXN0MTIiOmNhc2UiUmVjYWxjSWQiOmNhc2UiRHhHQ29sIjpjYXNlIkZiaSI6Y2FzZSJGYmkyIjpjYXNlIkdlbEZyYW1lIjpjYXNl''@;'; put 'put ''IlhGQ1JDIjpjYXNlIlN0eWxlIjpjYXNlIlN0eWxlRXh0IjpjYXNlIlNjZW5hcmlvUHJvdGVjdCI6Y2FzZSJPYmpQcm90ZWN0IjpjYXNlIkNvbmRGbXQxMiI6Y2FzZSJUYWJsZSI6Y2FzZSJUYWJsZVN0eWxlcyI6Y2FzZSJUYWJsZVN0eWxlIjpjYXNlIlRhYmxlU3R5bGVFbGVtZW50IjpjYXNl''@;'; put 'put ''IlNYU3RyZWFtSUQiOmNhc2UiU1hWUyI6Y2FzZSJEQ29uUmVmIjpjYXNlIlNYQWRkbCI6Y2FzZSJEQ29uQmluIjpjYXNlIkRDb25OYW1lIjpjYXNlIlNYUEkiOmNhc2UiU3hGb3JtYXQiOmNhc2UiU3hTZWxlY3QiOmNhc2UiU3hSdWxlIjpjYXNlIlN4RmlsdCI6Y2FzZSJTeEl0bSI6Y2FzZSJT''@;'; put 'put ''eERYRiI6Y2FzZSJTY2VuTWFuIjpjYXNlIkRDb24iOmNhc2UiQ2VsbFdhdGNoIjpjYXNlIlByaW50Um93Q29sIjpjYXNlIlByaW50R3JpZCI6Y2FzZSJQcmludFNpemUiOmNhc2UiWENUIjpjYXNlIkNSTiI6Y2FzZSJTY2wiOmNhc2UiU2hlZXRFeHQiOmNhc2UiU2hlZXRFeHRPcHRpb25hbCI6''@;'; put 'put ''Y2FzZSJPYk5vTWFjcm9zIjpjYXNlIk9iUHJvaiI6Y2FzZSJHVUlEVHlwZUxpYiI6Y2FzZSJXT3B0IjpjYXNlIlBob25ldGljSW5mbyI6Y2FzZSJPbGVPYmplY3RTaXplIjpjYXNlIkRYRiI6Y2FzZSJEWEZOIjpjYXNlIkRYRk4xMiI6Y2FzZSJEWEZOMTJMaXN0IjpjYXNlIkRYRk4xMk5vQ0Ii''@;'; put 'put ''OmNhc2UiRHYiOmNhc2UiRFZhbCI6Y2FzZSJCUkFJIjpjYXNlIlNlcmllcyI6Y2FzZSJTZXJpZXNUZXh0IjpjYXNlIkRDb25uIjpjYXNlIkRiT3JQYXJhbVFyeSI6Y2FzZSJEQlF1ZXJ5RXh0IjpjYXNlIk9sZURiQ29ubiI6Y2FzZSJFeHRTdHJpbmciOmNhc2UiSUZtdFJlY29yZCI6Y2FzZSJD''@;'; put 'put ''b25kRm10IjpjYXNlIkNGIjpjYXNlIkNGMTIiOmNhc2UiQ0ZFeCI6Y2FzZSJFeGNlbDlGaWxlIjpjYXNlIlVuaXRzIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJNbXMiOmNhc2UiSW50ZXJmYWNlRW5kIjpjYXNlIkRTRiI6Y2FzZSJCdWlsdEluRm5Hcm91cENvdW50IjpjYXNlIldpbmRvdzEi''@;'; put 'put ''OmNhc2UiSGlkZU9iaiI6Y2FzZSJHcmlkU2V0IjpjYXNlIkd1dHMiOmNhc2UiVXNlckJWaWV3IjpjYXNlIlVzZXJTVmlld0JlZ2luIjpjYXNlIlVzZXJTVmlld0VuZCI6Y2FzZSJEZWZDb2xXaWR0aCI6Y2FzZSJEZWZhdWx0Um93SGVpZ2h0IjpicmVhaztjYXNlIlhGRXh0IjpQayhUbltQbi5p''@;'; put 'put ''eGZlXSxQbi5leHQpO2JyZWFrO2Nhc2UiQ29sSW5mbyI6aWYoIWVyLmNlbGxTdHlsZXMpYnJlYWs7Zm9yKDtQbi5lPj1Qbi5zOylMaVtQbi5lLS1dPXt3aWR0aDpQbi53LzI1NixsZXZlbDpQbi5sZXZlbHx8MCxoaWRkZW46ISEoMSZQbi5mbGFncyl9LF9yfHwoX3I9ITApLFEwKExpW1BuLmUr''@;'; put 'put ''MV0pO2JyZWFrO2Nhc2UiUm93Ijp2YXIgSGk9e307bnVsbCE9UG4ubGV2ZWwmJihrcltQbi5yXT1IaSxIaS5sZXZlbD1Qbi5sZXZlbCksUG4uaGlkZGVuJiYoa3JbUG4ucl09SGksSGkuaGlkZGVuPSEwKSxQbi5ocHQmJihrcltQbi5yXT1IaSxIaS5ocHQ9UG4uaHB0LEhpLmhweD1zaChQbi5o''@;'; put 'put ''cHQpKSxQbi5peGZlJiYoa3JbUG4ucl09SGksZnIoT3Q9e2l4ZmU6UG4uaXhmZSxYRjpUbltQbi5peGZlXXx8e30sdjowLHQ6Im4ifSxSKSxIaS5zPU90LnMpO2JyZWFrO2Nhc2UiTGVmdE1hcmdpbiI6Y2FzZSJSaWdodE1hcmdpbiI6Y2FzZSJUb3BNYXJnaW4iOmNhc2UiQm90dG9tTWFyZ2lu''@;'; put 'put ''IjpRWyIhbWFyZ2lucyJdfHxYMyhRWyIhbWFyZ2lucyJdPXt9KSxRWyIhbWFyZ2lucyJdW1dvLnNsaWNlKDAsLTYpLnRvTG93ZXJDYXNlKCldPVBuO2JyZWFrO2Nhc2UiU2VsZWN0aW9uIjpRWyIhc2VsIl09UG47YnJlYWs7Y2FzZSJTZXR1cCI6UVsiIW1hcmdpbnMiXXx8WDMoUVsiIW1hcmdp''@;'; put 'put ''bnMiXT17fSksUVsiIW1hcmdpbnMiXS5oZWFkZXI9UG4uaGVhZGVyLFFbIiFtYXJnaW5zIl0uZm9vdGVyPVBuLmZvb3RlcjticmVhaztjYXNlIldpbmRvdzIiOlBuLlJUTCYmKFNuLlZpZXdzWzBdLlJUTD0hMCksTWk9UG47YnJlYWs7Y2FzZSJDb3VudHJ5IjpLdD1QbjticmVhaztjYXNlIkZv''@;'; put 'put ''bnQiOlBuLmljdiYmQm4oUG4uaWN2KSYmKFBuLmNvbG9yPXtyZ2I6aGQoQm4oUG4uaWN2KSl9KSxkZWxldGUgUG4uaWN2LDA9PVhuLkZvbnRzLmxlbmd0aCYmSTQoUG4pLFhuLkZvbnRzLnB1c2goUG4pO2JyZWFrO2Nhc2UiUGFsZXR0ZSI6cnI9UG47YnJlYWs7Y2FzZSJUaGVtZSI6Rmk9UG47''@;'; put 'put ''YnJlYWs7Y2FzZSJDb2RlTmFtZSI6UGU/bHIuQ29kZU5hbWU9UG58fGxyLm5hbWU6U24uV0JQcm9wcy5Db2RlTmFtZT1Qbnx8IlRoaXNXb3JrYm9vayI7YnJlYWs7Y2FzZSJQYW5lIjooTWl8fHt9KS5mcm96ZW4mJihRWyIhZnJlZXplIl09cWkoe3I6UG4ueXx8MCxjOlBuLnh8fDB9KSk7YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDpzd2l0Y2goQmkubil7Y2FzZSJEYXQiOmNhc2UiQmVnaW4iOmNhc2UiRW5kIjpjYXNlIlN0YXJ0QmxvY2siOmNhc2UiRW5kQmxvY2siOmNhc2UiRnJhbWUiOmNhc2UiQXJlYSI6Y2FzZSJBeGlzIjpjYXNlIkF4aXNMaW5lIjpjYXNlIlRpY2siOmNhc2UiQXhlc1VzZWQiOmNh''@;'; put 'put ''c2UiQ3J0TGF5b3V0MTIiOmNhc2UiQ3J0TGF5b3V0MTJBIjpjYXNlIkNydExpbmsiOmNhc2UiQ3J0TGluZSI6Y2FzZSJDcnRNbEZydCI6Y2FzZSJDcnRNbEZydENvbnRpbnVlIjpjYXNlIkxpbmVGb3JtYXQiOmNhc2UiQXJlYUZvcm1hdCI6Y2FzZSJDaGFydCI6Y2FzZSJDaGFydDNkIjpjYXNl''@;'; put 'put ''IkNoYXJ0M0RCYXJTaGFwZSI6Y2FzZSJDaGFydEZvcm1hdCI6Y2FzZSJDaGFydEZydEluZm8iOmNhc2UiUGxvdEFyZWEiOmNhc2UiUGxvdEdyb3d0aCI6Y2FzZSJTZXJpZXNMaXN0IjpjYXNlIlNlclBhcmVudCI6Y2FzZSJTZXJBdXhUcmVuZCI6Y2FzZSJEYXRhRm9ybWF0IjpjYXNlIlNlclRv''@;'; put 'put ''Q3J0IjpjYXNlIkZvbnRYIjpjYXNlIkNhdFNlclJhbmdlIjpjYXNlIkF4Y0V4dCI6Y2FzZSJTZXJGbXQiOmNhc2UiU2h0UHJvcHMiOmNhc2UiRGVmYXVsdFRleHQiOmNhc2UiVGV4dCI6Y2FzZSJDYXRMYWIiOmNhc2UiRGF0YUxhYkV4dENvbnRlbnRzIjpjYXNlIkxlZ2VuZCI6Y2FzZSJMZWdl''@;'; put 'put ''bmRFeGNlcHRpb24iOmNhc2UiUGllIjpjYXNlIlNjYXR0ZXIiOmNhc2UiUGllRm9ybWF0IjpjYXNlIk1hcmtlckZvcm1hdCI6Y2FzZSJTdGFydE9iamVjdCI6Y2FzZSJFbmRPYmplY3QiOmNhc2UiQWxSdW5zIjpjYXNlIk9iamVjdExpbmsiOmNhc2UiU0lJbmRleCI6Y2FzZSJBdHRhY2hlZExh''@;'; put 'put ''YmVsIjpjYXNlIllNdWx0IjpjYXNlIkxpbmUiOmNhc2UiQmFyIjpjYXNlIlN1cmYiOmNhc2UiQXhpc1BhcmVudCI6Y2FzZSJQb3MiOmNhc2UiVmFsdWVSYW5nZSI6Y2FzZSJTWFZpZXdFeDkiOmNhc2UiU1hWaWV3TGluayI6Y2FzZSJQaXZvdENoYXJ0Qml0cyI6Y2FzZSJTQmFzZVJlZiI6Y2Fz''@;'; put 'put ''ZSJUZXh0UHJvcHNTdHJlYW0iOmNhc2UiTG5FeHQiOmNhc2UiTWtyRXh0IjpjYXNlIkNydENvb3B0IjpjYXNlIlFzaSI6Y2FzZSJRc2lmIjpjYXNlIlFzaXIiOmNhc2UiUXNpU1hUYWciOmNhc2UiVHh0UXJ5IjpjYXNlIkZpbHRlck1vZGUiOmNhc2UiQXV0b0ZpbHRlciI6Y2FzZSJBdXRvRmls''@;'; put 'put ''dGVySW5mbyI6Y2FzZSJBdXRvRmlsdGVyMTIiOmNhc2UiRHJvcERvd25PYmpJZHMiOmNhc2UiU29ydCI6Y2FzZSJTb3J0RGF0YSI6Y2FzZSJTaGFwZVByb3BzU3RyZWFtIjpjYXNlIk1zb0RyYXdpbmciOmNhc2UiTXNvRHJhd2luZ0dyb3VwIjpjYXNlIk1zb0RyYXdpbmdTZWxlY3Rpb24iOmNh''@;'; put 'put ''c2UiV2ViUHViIjpjYXNlIkF1dG9XZWJQdWIiOmNhc2UiSGVhZGVyRm9vdGVyIjpjYXNlIkhGUGljdHVyZSI6Y2FzZSJQTFYiOmNhc2UiSG9yaXpvbnRhbFBhZ2VCcmVha3MiOmNhc2UiVmVydGljYWxQYWdlQnJlYWtzIjpjYXNlIkJhY2t1cCI6Y2FzZSJDb21wcmVzc1BpY3R1cmVzIjpjYXNl''@;'; put 'put ''IkNvbXBhdDEyIjpjYXNlIkNvbnRpbnVlIjpjYXNlIkNvbnRpbnVlRnJ0MTIiOmNhc2UiRnJ0Rm9udExpc3QiOmNhc2UiRnJ0V3JhcHBlciI6YnJlYWs7ZGVmYXVsdDpzd2l0Y2goQmkubil7Y2FzZSJUYWJJZENvbmYiOmNhc2UiUmFkYXIiOmNhc2UiUmFkYXJBcmVhIjpjYXNlIkRyb3BCYXIi''@;'; put 'put ''OmNhc2UiSW50bCI6Y2FzZSJDb29yZExpc3QiOmNhc2UiU2VyQXV4RXJyQmFyIjpjYXNlIkJJRkYyRk9OVENMUiI6Y2FzZSJCSUZGMkZNVENOVCI6Y2FzZSJCSUZGMkZPTlRYVFJBIjpjYXNlIkJJRkYyWEYiOmNhc2UiQklGRjNYRiI6Y2FzZSJCSUZGNFhGIjpjYXNlIkJJRkYyWEZJTkRFWCI6''@;'; put 'put ''Y2FzZSJCSUZGNEZNVENOVCI6Y2FzZSJCSUZGMlJPVyI6Y2FzZSJCSUZGMldJTkRPVzIiOmNhc2UiU0NFTkFSSU8iOmNhc2UiRENvbkJpbiI6Y2FzZSJQaWNGIjpjYXNlIkRhdGFMYWJFeHQiOmNhc2UiTGVsIjpjYXNlIkJvcFBvcCI6Y2FzZSJCb3BQb3BDdXN0b20iOmNhc2UiUmVhbFRpbWVE''@;'; put 'put ''YXRhIjpjYXNlIk5hbWUiOmNhc2UiTEhOR3JhcGgiOmNhc2UiRm5Hcm91cE5hbWUiOmNhc2UiQWRkTWVudSI6Y2FzZSJMUHIiOmNhc2UiTGlzdE9iaiI6Y2FzZSJMaXN0RmllbGQiOmNhc2UiUlJTb3J0IjpjYXNlIkJpZ05hbWUiOmNhc2UiVG9vbGJhckhkciI6Y2FzZSJUb29sYmFyRW5kIjpj''@;'; put 'put ''YXNlIkRERU9iak5hbWUiOmNhc2UiRlJUQXJjaElkJCI6YnJlYWs7ZGVmYXVsdDppZihSLldURil0aHJvdyJVbnJlY29nbml6ZWQgUmVjb3JkICIrQmkubn19fX19ZWxzZSBTLmwrPUphLGVyJiZlci5lbmMmJmVyLmVuYy5pbnNpdHUmJmVyLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDpKYX0pKX1y''@;'; put 'put ''ZXR1cm4gay5TaGVldE5hbWVzPU9lKG9lKS5zb3J0KGZ1bmN0aW9uKG1hLERpKXtyZXR1cm4gTnVtYmVyKG1hKS1OdW1iZXIoRGkpfSkubWFwKGZ1bmN0aW9uKG1hKXtyZXR1cm4gb2VbbWFdLm5hbWV9KSxSLmJvb2tTaGVldHN8fChrLlNoZWV0cz1HKSwhay5TaGVldE5hbWVzLmxlbmd0aCYm''@;'; put 'put ''TmVbIiFyZWYiXT8oay5TaGVldE5hbWVzLnB1c2goIlNoZWV0MSIpLGsuU2hlZXRzJiYoay5TaGVldHMuU2hlZXQxPU5lKSk6ay5QcmVhbWJsZT1OZSxrLlNoZWV0cyYmc28uZm9yRWFjaChmdW5jdGlvbihtYSxEaSl7ay5TaGVldHNbay5TaGVldE5hbWVzW0RpXV1bIiFhdXRvZmlsdGVyIl09''@;'; put 'put ''bWF9KSxrLlN0cmluZ3M9eWUsay5TU0Y9QS5nZXRfdGFibGUoKSxlci5lbmMmJihrLkVuY3J5cHRpb249ZXIuZW5jKSxGaSYmKGsuVGhlbWVzPUZpKSxrLk1ldGFkYXRhPXt9LHZvaWQgMCE9PUt0JiYoay5NZXRhZGF0YS5Db3VudHJ5PUt0KSxGbi5uYW1lcy5sZW5ndGg+MCYmKFNuLk5hbWVz''@;'; put 'put ''PUZuLm5hbWVzKSxrLldvcmtib29rPVNuLGt9KEcuY29udGVudCxSKTtlbHNlIGlmKChvZT12ZS5maW5kKFMsIlBlcmZlY3RPZmZpY2VfTUFJTiIpKSYmb2UuY29udGVudClRPUl2LnRvX3dvcmtib29rKG9lLmNvbnRlbnQsKFIudHlwZT1nZSxSKSk7ZWxzZXtpZighKG9lPXZlLmZpbmQoUywi''@;'; put 'put ''TmF0aXZlQ29udGVudF9NQUlOIikpfHwhb2UuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIFdvcmtib29rIHN0cmVhbSIpO1E9SXYudG9fd29ya2Jvb2sob2UuY29udGVudCwoUi50eXBlPWdlLFIpKX1SLmJvb2tWQkEmJlMuRnVsbFBhdGhzJiZ2ZS5maW5kKFMsIi9fVkJB''@;'; put 'put ''X1BST0pFQ1RfQ1VSL1ZCQS9kaXIiKSYmKFEudmJhcmF3PWZ1bmN0aW9uIFprKFMpe3ZhciBSPXZlLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSk7cmV0dXJuIFMuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oayxHKXtpZigiLyIhPT1rLnNsaWNlKC0xKSYmay5tYXRjaCgvX1ZCQV9QUk9K''@;'; put 'put ''RUNUX0NVUi8pKXt2YXIgUT1rLnJlcGxhY2UoL15bXlwvXSovLCJSIikucmVwbGFjZSgvXC9fVkJBX1BST0pFQ1RfQ1VSXHUwMDAwKi8sIiIpO3ZlLnV0aWxzLmNmYl9hZGQoUixRLFMuRmlsZUluZGV4W0ddLmNvbnRlbnQpfX0pLHZlLndyaXRlKFIpfShTKSl9dmFyIHBlPXt9O3JldHVybiBT''@;'; put 'put ''LkZ1bGxQYXRocyYmZnVuY3Rpb24gQm5lKFMsUixrKXt2YXIgRz12ZS5maW5kKFMsIiFEb2N1bWVudFN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKEcmJkcuc2l6ZT4wKXRyeXt2YXIgUT1qNihHLG00LFRiLkRTSSk7Zm9yKHZhciBvZSBpbiBRKVJbb2VdPVFbb2VdfWNhdGNoKFBlKXtpZihrLldU''@;'; put 'put ''Ril0aHJvdyBQZX12YXIgZ2U9dmUuZmluZChTLCIhU3VtbWFyeUluZm9ybWF0aW9uIik7aWYoZ2UmJmdlLnNpemU+MCl0cnl7dmFyIHBlPWo2KGdlLGQ1LFRiLlNJKTtmb3IodmFyIHllIGluIHBlKW51bGw9PVJbeWVdJiYoUlt5ZV09cGVbeWVdKX1jYXRjaChQZSl7aWYoay5XVEYpdGhyb3cg''@;'; put 'put ''UGV9Ui5IZWFkaW5nUGFpcnMmJlIuVGl0bGVzT2ZQYXJ0cyYmKF80KFIuSGVhZGluZ1BhaXJzLFIuVGl0bGVzT2ZQYXJ0cyxSLGspLGRlbGV0ZSBSLkhlYWRpbmdQYWlycyxkZWxldGUgUi5UaXRsZXNPZlBhcnRzKX0oUyxwZSxSKSxRLlByb3BzPVEuQ3VzdHByb3BzPXBlLFIuYm9va0ZpbGVz''@;'; put 'put ''JiYoUS5jZmI9UyksUX12YXIgTDg9ezA6e246IkJydFJvd0hkciIsZjpmdW5jdGlvbiBCRChTLFIpe3ZhciBrPXt9LEc9Uy5sK1I7ay5yPVMucmVhZF9zaGlmdCg0KSxTLmwrPTQ7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9MTt2YXIgb2U9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLmw9''@;'; put 'put ''Ryw3Jm9lJiYoay5sZXZlbD03Jm9lKSwxNiZvZSYmKGsuaGlkZGVuPSEwKSwzMiZvZSYmKGsuaHB0PVEvMjApLGt9fSwxOntuOiJCcnRDZWxsQmxhbmsiLGY6ZnVuY3Rpb24gRG5lKFMpe3JldHVybltEMShTKV19fSwyOntuOiJCcnRDZWxsUmsiLGY6ZnVuY3Rpb24gSGooUyl7cmV0dXJuW0Qx''@;'; put 'put ''KFMpLEkxKFMpLCJuIl19fSwzOntuOiJCcnRDZWxsRXJyb3IiLGY6ZnVuY3Rpb24gWkQoUyl7cmV0dXJuW0QxKFMpLFMucmVhZF9zaGlmdCgxKSwiZSJdfX0sNDp7bjoiQnJ0Q2VsbEJvb2wiLGY6ZnVuY3Rpb24gRGooUyl7cmV0dXJuW0QxKFMpLFMucmVhZF9zaGlmdCgxKSwiYiJdfX0sNTp7''@;'; put 'put ''bjoiQnJ0Q2VsbFJlYWwiLGY6ZnVuY3Rpb24gRVMoUyl7cmV0dXJuW0QxKFMpLFBsKFMpLCJuIl19fSw2OntuOiJCcnRDZWxsU3QiLGY6ZnVuY3Rpb24gTG5lKFMpe3JldHVybltEMShTKSxndShTKSwic3RyIl19fSw3OntuOiJCcnRDZWxsSXNzdCIsZjpmdW5jdGlvbiBSaihTKXtyZXR1cm5b''@;'; put 'put ''RDEoUyksUy5yZWFkX3NoaWZ0KDQpLCJzIl19fSw4OntuOiJCcnRGbWxhU3RyaW5nIixmOmZ1bmN0aW9uIHBiKFMsUixrKXt2YXIgRz1TLmwrUixRPUQxKFMpO1Eucj1rWyIhcm93Il07dmFyIGdlPVtRLGd1KFMpLCJzdHIiXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPXo0KFMs''@;'; put 'put ''Ry1TLmwsayk7Z2VbM109czAocGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4gZ2V9fSw5OntuOiJCcnRGbWxhTnVtIixmOmZ1bmN0aW9uIEFTKFMsUixrKXt2YXIgRz1TLmwrUixRPUQxKFMpO1Eucj1rWyIhcm93Il07dmFyIGdlPVtRLFBsKFMpLCJuIl07aWYoay5j''@;'; put 'put ''ZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT16NChTLEctUy5sLGspO2dlWzNdPXMwKHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUc7cmV0dXJuIGdlfX0sMTA6e246IkJydEZtbGFCb29sIixmOmZ1bmN0aW9uIFRTKFMsUixrKXt2YXIgRz1TLmwrUixRPUQxKFMpO1Eucj1rWyIh''@;'; put 'put ''cm93Il07dmFyIGdlPVtRLFMucmVhZF9zaGlmdCgxKSwiYiJdO2lmKGsuY2VsbEZvcm11bGEpe1MubCs9Mjt2YXIgcGU9ejQoUyxHLVMubCxrKTtnZVszXT1zMChwZSxudWxsLFEsay5zdXBib29rcyxrKX1lbHNlIFMubD1HO3JldHVybiBnZX19LDExOntuOiJCcnRGbWxhRXJyb3IiLGY6ZnVu''@;'; put 'put ''Y3Rpb24gdzgoUyxSLGspe3ZhciBHPVMubCtSLFE9RDEoUyk7US5yPWtbIiFyb3ciXTt2YXIgZ2U9W1EsUy5yZWFkX3NoaWZ0KDEpLCJlIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT16NChTLEctUy5sLGspO2dlWzNdPXMwKHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2Ug''@;'; put 'put ''Uy5sPUc7cmV0dXJuIGdlfX0sMTI6e246IkJydFNob3J0QmxhbmsiLGY6ZnVuY3Rpb24ga2ooUyl7cmV0dXJuW0poKFMpXX19LDEzOntuOiJCcnRTaG9ydFJrIixmOmZ1bmN0aW9uIFJuZShTKXtyZXR1cm5bSmgoUyksSTEoUyksIm4iXX19LDE0OntuOiJCcnRTaG9ydEVycm9yIixmOmZ1bmN0''@;'; put 'put ''aW9uIF84KFMpe3JldHVybltKaChTKSxTLnJlYWRfc2hpZnQoMSksImUiXX19LDE1OntuOiJCcnRTaG9ydEJvb2wiLGY6ZnVuY3Rpb24gVUQoUyl7cmV0dXJuW0poKFMpLFMucmVhZF9zaGlmdCgxKSwiYiJdfX0sMTY6e246IkJydFNob3J0UmVhbCIsZjpGan0sMTc6e246IkJydFNob3J0U3Qi''@;'; put 'put ''LGY6ZnVuY3Rpb24gamooUyl7cmV0dXJuW0poKFMpLGd1KFMpLCJzdHIiXX19LDE4OntuOiJCcnRTaG9ydElzc3QiLGY6ZnVuY3Rpb24gT2ooUyl7cmV0dXJuW0poKFMpLFMucmVhZF9zaGlmdCg0KSwicyJdfX0sMTk6e246IkJydFNTVEl0ZW0iLGY6c2x9LDIwOntuOiJCcnRQQ0RJTWlzc2lu''@;'; put 'put ''ZyJ9LDIxOntuOiJCcnRQQ0RJTnVtYmVyIn0sMjI6e246IkJydFBDRElCb29sZWFuIn0sMjM6e246IkJydFBDRElFcnJvciJ9LDI0OntuOiJCcnRQQ0RJU3RyaW5nIn0sMjU6e246IkJydFBDRElEYXRldGltZSJ9LDI2OntuOiJCcnRQQ0RJSW5kZXgifSwyNzp7bjoiQnJ0UENESUFNaXNzaW5n''@;'; put 'put ''In0sMjg6e246IkJydFBDRElBTnVtYmVyIn0sMjk6e246IkJydFBDRElBQm9vbGVhbiJ9LDMwOntuOiJCcnRQQ0RJQUVycm9yIn0sMzE6e246IkJydFBDRElBU3RyaW5nIn0sMzI6e246IkJydFBDRElBRGF0ZXRpbWUifSwzMzp7bjoiQnJ0UENSUmVjb3JkIn0sMzQ6e246IkJydFBDUlJlY29y''@;'; put 'put ''ZER0In0sMzU6e246IkJydEZSVEJlZ2luIn0sMzY6e246IkJydEZSVEVuZCJ9LDM3OntuOiJCcnRBQ0JlZ2luIn0sMzg6e246IkJydEFDRW5kIn0sMzk6e246IkJydE5hbWUiLGY6ZnVuY3Rpb24gQTgoUyxSLGspe3ZhciBHPVMubCtSO1MubCs9NCxTLmwrPTE7dmFyIFE9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLG9lPWw1KFMpLGdlPWZEKFMsMCxrKSxwZT10MChTKTtTLmw9Rzt2YXIgeWU9e05hbWU6b2UsUHRnOmdlfTtyZXR1cm4gUTwyNjg0MzU0NTUmJih5ZS5TaGVldD1RKSxwZSYmKHllLkNvbW1lbnQ9cGUpLHllfX0sNDA6e246IkJydEluZGV4Um93QmxvY2sifSw0Mjp7bjoiQnJ0SW5kZXhC''@;'; put 'put ''bG9jayJ9LDQzOntuOiJCcnRGb250IixmOmZ1bmN0aW9uIHpWKFMsUixrKXt2YXIgRz17fTtHLnN6PVMucmVhZF9zaGlmdCgyKS8yMDt2YXIgUT1PdyhTKTtzd2l0Y2goUS5mQm9sZCYmKEcuYm9sZD0xKSxRLmZJdGFsaWMmJihHLml0YWxpYz0xKSxRLmZVbmRlcmxpbmUmJihHLnVuZGVybGlu''@;'; put 'put ''ZT0xKSxRLmZDb25kZW5zZSYmKEcuY29uZGVuc2U9MSksUS5mRXh0ZW5kJiYoRy5leHRlbmQ9MSksUS5mU2hhZG93JiYoRy5zaGFkb3c9MSksUS5mT3V0bGluZSYmKEcub3V0bGluZT0xKSxRLmZTdHJpa2VvdXQmJihHLnN0cmlrZT0xKSw3MDA9PT1TLnJlYWRfc2hpZnQoMikmJihHLmJvbGQ9''@;'; put 'put ''MSksUy5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6Ry52YWxpZ249InN1cGVyIjticmVhaztjYXNlIDI6Ry52YWxpZ249InN1YiJ9dmFyIGdlPVMucmVhZF9zaGlmdCgxKTswIT1nZSYmKEcudW5kZXJsaW5lPWdlKTt2YXIgcGU9Uy5yZWFkX3NoaWZ0KDEpO3BlPjAmJihHLmZhbWlseT1wZSk7dmFy''@;'; put 'put ''IHllPVMucmVhZF9zaGlmdCgxKTtzd2l0Y2goeWU+MCYmKEcuY2hhcnNldD15ZSksUy5sKyssRy5jb2xvcj1RaChTKSxTLnJlYWRfc2hpZnQoMSkpe2Nhc2UgMTpHLnNjaGVtZT0ibWFqb3IiO2JyZWFrO2Nhc2UgMjpHLnNjaGVtZT0ibWlub3IifXJldHVybiBHLm5hbWU9Z3UoUyksR319LDQ0''@;'; put 'put ''OntuOiJCcnRGbXQiLGY6ZnVuY3Rpb24gV3YoUyxSKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDIpLGd1KFMpXX19LDQ1OntuOiJCcnRGaWxsIixmOmZ1bmN0aW9uIFlWKFMsUil7dmFyIGs9Uy5sK1IsRz17fSxRPVMucmVhZF9zaGlmdCg0KTtpZig0MCE9USl7Ry5wYXR0ZXJuVHlwZT1NQ1tRXTt2''@;'; put 'put ''YXIgb2U9UWgoUyk7NjQhPW9lLmluZGV4JiYoRy5mZ0NvbG9yPW9lKTt2YXIgZ2U9UWgoUyk7NjUhPWdlLmluZGV4JiYoRy5iZ0NvbG9yPWdlKX1lbHNle1MubCs9MTYsUy5yZWFkX3NoaWZ0KDQpLFBsKFMpLFBsKFMpLFBsKFMpLFBsKFMpLFBsKFMpO2Zvcih2YXIgcGU9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLHllPVtdLFBlPTA7UGU8cGU7KytQZSl5ZS5wdXNoKFpWKFMpKX1yZXR1cm4gUy5sPWssR319LDQ2OntuOiJCcnRCb3JkZXIiLGY6ZnVuY3Rpb24gR1YoUyl7dmFyIFI9e307Uy5yZWFkX3NoaWZ0KDEpO3ZhciBrPUk1KFMpOyJub25lIiE9ay5zdHlsZSYmKFIudG9wPWspO3ZhciBHPUk1''@;'; put 'put ''KFMpOyJub25lIiE9Ry5zdHlsZSYmKFIuYm90dG9tPUcpO3ZhciBRPUk1KFMpOyJub25lIiE9US5zdHlsZSYmKFIubGVmdD1RKTt2YXIgb2U9STUoUyk7Im5vbmUiIT1vZS5zdHlsZSYmKFIucmlnaHQ9b2UpO3ZhciBnZT1JNShTKTtyZXR1cm4ibm9uZSIhPWdlLnN0eWxlJiYoUi5kaWFnPWdl''@;'; put 'put ''KSxSfX0sNDc6e246IkJydFhGIixmOmZ1bmN0aW9uIHhDKFMsUil7dmFyIGs9Uy5sK1IsRz17fSxRPVMucmVhZF9zaGlmdCgyKSxvZT1TLnJlYWRfc2hpZnQoMiksZ2U9Uy5yZWFkX3NoaWZ0KDIpLHBlPVMucmVhZF9zaGlmdCgyKSx5ZT1TLnJlYWRfc2hpZnQoMiksUGU9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDEpO1MucmVhZF9zaGlmdCgxKTt2YXIgTmU9Uy5yZWFkX3NoaWZ0KDIpLFllPVMucmVhZF9zaGlmdCgxKTtTLmw9ayxHLnhmSWQ9USxHLm51bUZtdElkPW9lLEcuZm9udElkPWdlLEcuZmlsbElkPXBlLEcuYm9yZGVySWQ9eWUsMSZZZSYmMCE9Ry5udW1GbXRJZCYmKEcuYXBwbHlOdW1iZXJG''@;'; put 'put ''b3JtYXQ9ITApLEcuYWxpZ25tZW50PXt9LFBlPjAmJihHLmFsaWdubWVudC50ZXh0Um90YXRpb249UGUpO3ZhciBldD0hMTtyZXR1cm4gNyZOZSYmKGV0PSEwLEcuYWxpZ25tZW50Lmhvcml6b250YWw9RDVbNyZOZV0pLEcuYWxpZ25tZW50LnZlcnRpY2FsPXQ4W05lPj4+MyY3XSxHLmFsaWdu''@;'; put 'put ''bWVudC52ZXJ0aWNhbCYmKGV0PSEwKSxOZT4+PjYmMSYmKEcuYWxpZ25tZW50LndyYXBUZXh0PSEwKSxOZT4+PjgmMSYmKEcuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSxldHx8ZGVsZXRlIEcuYWxpZ25tZW50LDQmWWUmJmV0JiYoRy5hcHBseUFsaWdubWVudD0hMCksR319LDQ4OntuOiJC''@;'; put 'put ''cnRTdHlsZSJ9LDQ5OntuOiJCcnRDZWxsTWV0YSJ9LDUwOntuOiJCcnRWYWx1ZU1ldGEifSw1MTp7bjoiQnJ0TWRiIn0sNTI6e246IkJydEJlZ2luRm1kIn0sNTM6e246IkJydEVuZEZtZCJ9LDU0OntuOiJCcnRCZWdpbk1keCJ9LDU1OntuOiJCcnRFbmRNZHgifSw1Njp7bjoiQnJ0QmVnaW5N''@;'; put 'put ''ZHhUdXBsZSJ9LDU3OntuOiJCcnRFbmRNZHhUdXBsZSJ9LDU4OntuOiJCcnRNZHhNYnJJc3RyIn0sNTk6e246IkJydFN0ciJ9LDYwOntuOiJCcnRDb2xJbmZvIixmOnJDfSw2Mjp7bjoiQnJ0Q2VsbFJTdHJpbmcifSw2Mzp7bjoiQnJ0Q2FsY0NoYWluSXRlbSQiLGY6ZnVuY3Rpb24gcjgoUyl7''@;'; put 'put ''dmFyIFI9e307Ui5pPVMucmVhZF9zaGlmdCg0KTt2YXIgaz17fTtrLnI9Uy5yZWFkX3NoaWZ0KDQpLGsuYz1TLnJlYWRfc2hpZnQoNCksUi5yPXFpKGspO3ZhciBHPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMiZHJiYoUi5sPSIxIiksOCZHJiYoUi5hPSIxIiksUn19LDY0OntuOiJCcnREVmFs''@;'; put 'put ''IixmOmZ1bmN0aW9uIFhqKFMsUixrKXt2YXIgRz1TLmwrUixRPVMucmVhZF9zaGlmdCg0KSxvZT1uMChTKSxnZT10MChTKSxwZT10MChTKSx5ZT10MChTKSxQZT10MChTKSxOZT1oRChTLFIsayksWWU9Uy5sPEc/aEQoUyxSLGspOm51bGwsZXQ9MTUmUSxjdD17dDpxRFtldF0sc3FyZng6b2Us''@;'; put 'put ''czpbZ2UscGUseWUsUGVdfTtyZXR1cm4gTmUmJihjdC5mMT1OZSksWWUmJihjdC5mMj1ZZSksMD09ZXR8fDM9PWV0fHw3PT1ldHx8KGN0Lm9wPURTW1E+PjIwJjE1XSksY3R9fSw2NTp7bjoiQnJ0U3h2Y2VsbE51bSJ9LDY2OntuOiJCcnRTeHZjZWxsU3RyIn0sNjc6e246IkJydFN4dmNlbGxC''@;'; put 'put ''b29sIn0sNjg6e246IkJydFN4dmNlbGxFcnIifSw2OTp7bjoiQnJ0U3h2Y2VsbERhdGUifSw3MDp7bjoiQnJ0U3h2Y2VsbE5pbCJ9LDEyODp7bjoiQnJ0RmlsZVZlcnNpb24ifSwxMjk6e246IkJydEJlZ2luU2hlZXQifSwxMzA6e246IkJydEVuZFNoZWV0In0sMTMxOntuOiJCcnRCZWdpbkJv''@;'; put 'put ''b2siLGY6SW4scDowfSwxMzI6e246IkJydEVuZEJvb2sifSwxMzM6e246IkJydEJlZ2luV3NWaWV3cyJ9LDEzNDp7bjoiQnJ0RW5kV3NWaWV3cyJ9LDEzNTp7bjoiQnJ0QmVnaW5Cb29rVmlld3MifSwxMzY6e246IkJydEVuZEJvb2tWaWV3cyJ9LDEzNzp7bjoiQnJ0QmVnaW5Xc1ZpZXciLGY6''@;'; put 'put ''ZnVuY3Rpb24ga1MoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTI4LHtSVEw6MzImUixncmlkOiEhKDQmUil9fX0sMTM4OntuOiJCcnRFbmRXc1ZpZXcifSwxMzk6e246IkJydEJlZ2luQ3NWaWV3cyJ9LDE0MDp7bjoiQnJ0RW5kQ3NWaWV3cyJ9LDE0MTp7bjoiQnJ0QmVn''@;'; put 'put ''aW5Dc1ZpZXcifSwxNDI6e246IkJydEVuZENzVmlldyJ9LDE0Mzp7bjoiQnJ0QmVnaW5CdW5kbGVTaHMifSwxNDQ6e246IkJydEVuZEJ1bmRsZVNocyJ9LDE0NTp7bjoiQnJ0QmVnaW5TaGVldERhdGEifSwxNDY6e246IkJydEVuZFNoZWV0RGF0YSJ9LDE0Nzp7bjoiQnJ0V3NQcm9wIixmOmZ1''@;'; put 'put ''bmN0aW9uIGhiKFMsUil7dmFyIGs9e30sRz1TW1MubF07cmV0dXJuKytTLmwsay5hYm92ZT0hKDY0JkcpLGsubGVmdD0hKDEyOCZHKSxTLmwrPTE4LGsubmFtZT1vNShTLFItMTkpLGt9fSwxNDg6e246IkJydFdzRGltIixmOnhqLHA6MTZ9LDE1MTp7bjoiQnJ0UGFuZSIsZjpmdW5jdGlvbiBH''@;'; put 'put ''RChTLFIpe3ZhciBrPVMubCtSO1BsKFMpLFBsKFMpO3ZhciBHPVMucmVhZF9zaGlmdCg0LCJpIiksUT1TLnJlYWRfc2hpZnQoNCwiaSIpO2lmKFMucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoMSksayE9Uy5sKXRocm93IG5ldyBFcnJvcigiQmFkIEJydFBhbmU6ICIraysiICE9ICIrUy5s''@;'; put 'put ''KTtyZXR1cm5bcWkoe3I6RyxjOlF9KV19fSwxNTI6e246IkJydFNlbCIsZjpmdW5jdGlvbiAkRChTLFIpe3JldHVybiBTLnJlYWRfc2hpZnQoNCkse2NlbGw6cWkoe3I6Uy5yZWFkX3NoaWZ0KDQpLGM6Uy5yZWFkX3NoaWZ0KDQpfSl9fX0sMTUzOntuOiJCcnRXYlByb3AiLGY6ZnVuY3Rpb24g''@;'; put 'put ''TlMoUyxSKXt2YXIgaz17fSxHPVMucmVhZF9zaGlmdCg0KTtrLmRlZmF1bHRUaGVtZVZlcnNpb249Uy5yZWFkX3NoaWZ0KDQpO3ZhciBRPVI+OD9ndShTKToiIjtyZXR1cm4gUS5sZW5ndGg+MCYmKGsuQ29kZU5hbWU9USksay5hdXRvQ29tcHJlc3NQaWN0dXJlcz0hISg2NTUzNiZHKSxrLmJh''@;'; put 'put ''Y2t1cEZpbGU9ISEoNjQmRyksay5jaGVja0NvbXBhdGliaWxpdHk9ISEoNDA5NiZHKSxrLmRhdGUxOTA0PSEhKDEmRyksay5maWx0ZXJQcml2YWN5PSEhKDgmRyksay5oaWRlUGl2b3RGaWVsZExpc3Q9ISEoMTAyNCZHKSxrLnByb21wdGVkU29sdXRpb25zPSEhKDE2JkcpLGsucHVibGlzaEl0''@;'; put 'put ''ZW1zPSEhKDIwNDgmRyksay5yZWZyZXNoQWxsQ29ubmVjdGlvbnM9ISEoMjYyMTQ0JkcpLGsuc2F2ZUV4dGVybmFsTGlua1ZhbHVlcz0hISgxMjgmRyksay5zaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcz0hISg0JkcpLGsuc2hvd0lua0Fubm90YXRpb249ISEoMzImRyksay5zaG93T2JqZWN0''@;'; put 'put ''cz1bImFsbCIsInBsYWNlaG9sZGVycyIsIm5vbmUiXVtHPj4xMyYzXSxrLnNob3dQaXZvdENoYXJ0RmlsdGVyPSEhKDMyNzY4JkcpLGsudXBkYXRlTGlua3M9WyJ1c2VyU2V0IiwibmV2ZXIiLCJhbHdheXMiXVtHPj44JjNdLGt9fSwxNTQ6e246IkJydFdiRmFjdG9pZCJ9LDE1NTp7bjoiQnJ0''@;'; put 'put ''RmlsZVJlY292ZXIifSwxNTY6e246IkJydEJ1bmRsZVNoIixmOmZ1bmN0aW9uIGd6KFMsUil7dmFyIGs9e307cmV0dXJuIGsuSGlkZGVuPVMucmVhZF9zaGlmdCg0KSxrLmlUYWJJRD1TLnJlYWRfc2hpZnQoNCksay5zdHJSZWxJRD1nNChTLFItOCksay5uYW1lPWd1KFMpLGt9fSwxNTc6e246''@;'; put 'put ''IkJydENhbGNQcm9wIn0sMTU4OntuOiJCcnRCb29rVmlldyJ9LDE1OTp7bjoiQnJ0QmVnaW5Tc3QiLGY6ZnVuY3Rpb24gTHYoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoNCldfX0sMTYwOntuOiJCcnRFbmRTc3QifSwxNjE6e246IkJydEJlZ2luQUZpbHRlciIsZjpt''@;'; put 'put ''dX0sMTYyOntuOiJCcnRFbmRBRmlsdGVyIn0sMTYzOntuOiJCcnRCZWdpbkZpbHRlckNvbHVtbiJ9LDE2NDp7bjoiQnJ0RW5kRmlsdGVyQ29sdW1uIn0sMTY1OntuOiJCcnRCZWdpbkZpbHRlcnMifSwxNjY6e246IkJydEVuZEZpbHRlcnMifSwxNjc6e246IkJydEZpbHRlciJ9LDE2ODp7bjoi''@;'; put 'put ''QnJ0Q29sb3JGaWx0ZXIifSwxNjk6e246IkJydEljb25GaWx0ZXIifSwxNzA6e246IkJydFRvcDEwRmlsdGVyIn0sMTcxOntuOiJCcnREeW5hbWljRmlsdGVyIn0sMTcyOntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMifSwxNzM6e246IkJydEVuZEN1c3RvbUZpbHRlcnMifSwxNzQ6e246IkJy''@;'; put 'put ''dEN1c3RvbUZpbHRlciJ9LDE3NTp7bjoiQnJ0QUZpbHRlckRhdGVHcm91cEl0ZW0ifSwxNzY6e246IkJydE1lcmdlQ2VsbCIsZjpXRH0sMTc3OntuOiJCcnRCZWdpbk1lcmdlQ2VsbHMifSwxNzg6e246IkJydEVuZE1lcmdlQ2VsbHMifSwxNzk6e246IkJydEJlZ2luUGl2b3RDYWNoZURlZiJ9''@;'; put 'put ''LDE4MDp7bjoiQnJ0RW5kUGl2b3RDYWNoZURlZiJ9LDE4MTp7bjoiQnJ0QmVnaW5QQ0RGaWVsZHMifSwxODI6e246IkJydEVuZFBDREZpZWxkcyJ9LDE4Mzp7bjoiQnJ0QmVnaW5QQ0RGaWVsZCJ9LDE4NDp7bjoiQnJ0RW5kUENERmllbGQifSwxODU6e246IkJydEJlZ2luUENEU291cmNlIn0s''@;'; put 'put ''MTg2OntuOiJCcnRFbmRQQ0RTb3VyY2UifSwxODc6e246IkJydEJlZ2luUENEU1JhbmdlIn0sMTg4OntuOiJCcnRFbmRQQ0RTUmFuZ2UifSwxODk6e246IkJydEJlZ2luUENERkF0YmwifSwxOTA6e246IkJydEVuZFBDREZBdGJsIn0sMTkxOntuOiJCcnRCZWdpblBDRElSdW4ifSwxOTI6e246''@;'; put 'put ''IkJydEVuZFBDRElSdW4ifSwxOTM6e246IkJydEJlZ2luUGl2b3RDYWNoZVJlY29yZHMifSwxOTQ6e246IkJydEVuZFBpdm90Q2FjaGVSZWNvcmRzIn0sMTk1OntuOiJCcnRCZWdpblBDREhpZXJhcmNoaWVzIn0sMTk2OntuOiJCcnRFbmRQQ0RIaWVyYXJjaGllcyJ9LDE5Nzp7bjoiQnJ0QmVn''@;'; put 'put ''aW5QQ0RIaWVyYXJjaHkifSwxOTg6e246IkJydEVuZFBDREhpZXJhcmNoeSJ9LDE5OTp7bjoiQnJ0QmVnaW5QQ0RIRmllbGRzVXNhZ2UifSwyMDA6e246IkJydEVuZFBDREhGaWVsZHNVc2FnZSJ9LDIwMTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9uIn0sMjAyOntuOiJCcnRFbmRFeHRDb25u''@;'; put 'put ''ZWN0aW9uIn0sMjAzOntuOiJCcnRCZWdpbkVDRGJQcm9wcyJ9LDIwNDp7bjoiQnJ0RW5kRUNEYlByb3BzIn0sMjA1OntuOiJCcnRCZWdpbkVDT2xhcFByb3BzIn0sMjA2OntuOiJCcnRFbmRFQ09sYXBQcm9wcyJ9LDIwNzp7bjoiQnJ0QmVnaW5QQ0RTQ29uc29sIn0sMjA4OntuOiJCcnRFbmRQ''@;'; put 'put ''Q0RTQ29uc29sIn0sMjA5OntuOiJCcnRCZWdpblBDRFNDUGFnZXMifSwyMTA6e246IkJydEVuZFBDRFNDUGFnZXMifSwyMTE6e246IkJydEJlZ2luUENEU0NQYWdlIn0sMjEyOntuOiJCcnRFbmRQQ0RTQ1BhZ2UifSwyMTM6e246IkJydEJlZ2luUENEU0NQSXRlbSJ9LDIxNDp7bjoiQnJ0RW5k''@;'; put 'put ''UENEU0NQSXRlbSJ9LDIxNTp7bjoiQnJ0QmVnaW5QQ0RTQ1NldHMifSwyMTY6e246IkJydEVuZFBDRFNDU2V0cyJ9LDIxNzp7bjoiQnJ0QmVnaW5QQ0RTQ1NldCJ9LDIxODp7bjoiQnJ0RW5kUENEU0NTZXQifSwyMTk6e246IkJydEJlZ2luUENERkdyb3VwIn0sMjIwOntuOiJCcnRFbmRQQ0RG''@;'; put 'put ''R3JvdXAifSwyMjE6e246IkJydEJlZ2luUENERkdJdGVtcyJ9LDIyMjp7bjoiQnJ0RW5kUENERkdJdGVtcyJ9LDIyMzp7bjoiQnJ0QmVnaW5QQ0RGR1JhbmdlIn0sMjI0OntuOiJCcnRFbmRQQ0RGR1JhbmdlIn0sMjI1OntuOiJCcnRCZWdpblBDREZHRGlzY3JldGUifSwyMjY6e246IkJydEVu''@;'; put 'put ''ZFBDREZHRGlzY3JldGUifSwyMjc6e246IkJydEJlZ2luUENEU0RUdXBsZUNhY2hlIn0sMjI4OntuOiJCcnRFbmRQQ0RTRFR1cGxlQ2FjaGUifSwyMjk6e246IkJydEJlZ2luUENEU0RUQ0VudHJpZXMifSwyMzA6e246IkJydEVuZFBDRFNEVENFbnRyaWVzIn0sMjMxOntuOiJCcnRCZWdpblBD''@;'; put 'put ''RFNEVENFTWVtYmVycyJ9LDIzMjp7bjoiQnJ0RW5kUENEU0RUQ0VNZW1iZXJzIn0sMjMzOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVyIn0sMjM0OntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlciJ9LDIzNTp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcmllcyJ9LDIzNjp7bjoiQnJ0RW5kUENEU0RU''@;'; put 'put ''Q1F1ZXJpZXMifSwyMzc6e246IkJydEJlZ2luUENEU0RUQ1F1ZXJ5In0sMjM4OntuOiJCcnRFbmRQQ0RTRFRDUXVlcnkifSwyMzk6e246IkJydEJlZ2luUENEU0RUQ1NldHMifSwyNDA6e246IkJydEVuZFBDRFNEVENTZXRzIn0sMjQxOntuOiJCcnRCZWdpblBDRFNEVENTZXQifSwyNDI6e246''@;'; put 'put ''IkJydEVuZFBDRFNEVENTZXQifSwyNDM6e246IkJydEJlZ2luUENEQ2FsY0l0ZW1zIn0sMjQ0OntuOiJCcnRFbmRQQ0RDYWxjSXRlbXMifSwyNDU6e246IkJydEJlZ2luUENEQ2FsY0l0ZW0ifSwyNDY6e246IkJydEVuZFBDRENhbGNJdGVtIn0sMjQ3OntuOiJCcnRCZWdpblBSdWxlIn0sMjQ4''@;'; put 'put ''OntuOiJCcnRFbmRQUnVsZSJ9LDI0OTp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMifSwyNTA6e246IkJydEVuZFBSRmlsdGVycyJ9LDI1MTp7bjoiQnJ0QmVnaW5QUkZpbHRlciJ9LDI1Mjp7bjoiQnJ0RW5kUFJGaWx0ZXIifSwyNTM6e246IkJydEJlZ2luUE5hbWVzIn0sMjU0OntuOiJCcnRFbmRQ''@;'; put 'put ''TmFtZXMifSwyNTU6e246IkJydEJlZ2luUE5hbWUifSwyNTY6e246IkJydEVuZFBOYW1lIn0sMjU3OntuOiJCcnRCZWdpblBOUGFpcnMifSwyNTg6e246IkJydEVuZFBOUGFpcnMifSwyNTk6e246IkJydEJlZ2luUE5QYWlyIn0sMjYwOntuOiJCcnRFbmRQTlBhaXIifSwyNjE6e246IkJydEJl''@;'; put 'put ''Z2luRUNXZWJQcm9wcyJ9LDI2Mjp7bjoiQnJ0RW5kRUNXZWJQcm9wcyJ9LDI2Mzp7bjoiQnJ0QmVnaW5FY1dwVGFibGVzIn0sMjY0OntuOiJCcnRFbmRFQ1dQVGFibGVzIn0sMjY1OntuOiJCcnRCZWdpbkVDUGFyYW1zIn0sMjY2OntuOiJCcnRFbmRFQ1BhcmFtcyJ9LDI2Nzp7bjoiQnJ0QmVn''@;'; put 'put ''aW5FQ1BhcmFtIn0sMjY4OntuOiJCcnRFbmRFQ1BhcmFtIn0sMjY5OntuOiJCcnRCZWdpblBDREtQSXMifSwyNzA6e246IkJydEVuZFBDREtQSXMifSwyNzE6e246IkJydEJlZ2luUENES1BJIn0sMjcyOntuOiJCcnRFbmRQQ0RLUEkifSwyNzM6e246IkJydEJlZ2luRGltcyJ9LDI3NDp7bjoi''@;'; put 'put ''QnJ0RW5kRGltcyJ9LDI3NTp7bjoiQnJ0QmVnaW5EaW0ifSwyNzY6e246IkJydEVuZERpbSJ9LDI3Nzp7bjoiQnJ0SW5kZXhQYXJ0RW5kIn0sMjc4OntuOiJCcnRCZWdpblN0eWxlU2hlZXQifSwyNzk6e246IkJydEVuZFN0eWxlU2hlZXQifSwyODA6e246IkJydEJlZ2luU1hWaWV3In0sMjgx''@;'; put 'put ''OntuOiJCcnRFbmRTWFZJIn0sMjgyOntuOiJCcnRCZWdpblNYVkkifSwyODM6e246IkJydEJlZ2luU1hWSXMifSwyODQ6e246IkJydEVuZFNYVklzIn0sMjg1OntuOiJCcnRCZWdpblNYVkQifSwyODY6e246IkJydEVuZFNYVkQifSwyODc6e246IkJydEJlZ2luU1hWRHMifSwyODg6e246IkJy''@;'; put 'put ''dEVuZFNYVkRzIn0sMjg5OntuOiJCcnRCZWdpblNYUEkifSwyOTA6e246IkJydEVuZFNYUEkifSwyOTE6e246IkJydEJlZ2luU1hQSXMifSwyOTI6e246IkJydEVuZFNYUElzIn0sMjkzOntuOiJCcnRCZWdpblNYREkifSwyOTQ6e246IkJydEVuZFNYREkifSwyOTU6e246IkJydEJlZ2luU1hE''@;'; put 'put ''SXMifSwyOTY6e246IkJydEVuZFNYRElzIn0sMjk3OntuOiJCcnRCZWdpblNYTEkifSwyOTg6e246IkJydEVuZFNYTEkifSwyOTk6e246IkJydEJlZ2luU1hMSVJ3cyJ9LDMwMDp7bjoiQnJ0RW5kU1hMSVJ3cyJ9LDMwMTp7bjoiQnJ0QmVnaW5TWExJQ29scyJ9LDMwMjp7bjoiQnJ0RW5kU1hM''@;'; put 'put ''SUNvbHMifSwzMDM6e246IkJydEJlZ2luU1hGb3JtYXQifSwzMDQ6e246IkJydEVuZFNYRm9ybWF0In0sMzA1OntuOiJCcnRCZWdpblNYRm9ybWF0cyJ9LDMwNjp7bjoiQnJ0RW5kU3hGb3JtYXRzIn0sMzA3OntuOiJCcnRCZWdpblN4U2VsZWN0In0sMzA4OntuOiJCcnRFbmRTeFNlbGVjdCJ9''@;'; put 'put ''LDMwOTp7bjoiQnJ0QmVnaW5JU1hWRFJ3cyJ9LDMxMDp7bjoiQnJ0RW5kSVNYVkRSd3MifSwzMTE6e246IkJydEJlZ2luSVNYVkRDb2xzIn0sMzEyOntuOiJCcnRFbmRJU1hWRENvbHMifSwzMTM6e246IkJydEVuZFNYTG9jYXRpb24ifSwzMTQ6e246IkJydEJlZ2luU1hMb2NhdGlvbiJ9LDMx''@;'; put 'put ''NTp7bjoiQnJ0RW5kU1hWaWV3In0sMzE2OntuOiJCcnRCZWdpblNYVEhzIn0sMzE3OntuOiJCcnRFbmRTWFRIcyJ9LDMxODp7bjoiQnJ0QmVnaW5TWFRIIn0sMzE5OntuOiJCcnRFbmRTWFRIIn0sMzIwOntuOiJCcnRCZWdpbklTWFRIUndzIn0sMzIxOntuOiJCcnRFbmRJU1hUSFJ3cyJ9LDMy''@;'; put 'put ''Mjp7bjoiQnJ0QmVnaW5JU1hUSENvbHMifSwzMjM6e246IkJydEVuZElTWFRIQ29scyJ9LDMyNDp7bjoiQnJ0QmVnaW5TWFRETVBTIn0sMzI1OntuOiJCcnRFbmRTWFRETVBzIn0sMzI2OntuOiJCcnRCZWdpblNYVERNUCJ9LDMyNzp7bjoiQnJ0RW5kU1hURE1QIn0sMzI4OntuOiJCcnRCZWdp''@;'; put 'put ''blNYVEhJdGVtcyJ9LDMyOTp7bjoiQnJ0RW5kU1hUSEl0ZW1zIn0sMzMwOntuOiJCcnRCZWdpblNYVEhJdGVtIn0sMzMxOntuOiJCcnRFbmRTWFRISXRlbSJ9LDMzMjp7bjoiQnJ0QmVnaW5NZXRhZGF0YSJ9LDMzMzp7bjoiQnJ0RW5kTWV0YWRhdGEifSwzMzQ6e246IkJydEJlZ2luRXNtZHRp''@;'; put 'put ''bmZvIn0sMzM1OntuOiJCcnRNZHRpbmZvIn0sMzM2OntuOiJCcnRFbmRFc21kdGluZm8ifSwzMzc6e246IkJydEJlZ2luRXNtZGIifSwzMzg6e246IkJydEVuZEVzbWRiIn0sMzM5OntuOiJCcnRCZWdpbkVzZm1kIn0sMzQwOntuOiJCcnRFbmRFc2ZtZCJ9LDM0MTp7bjoiQnJ0QmVnaW5TaW5n''@;'; put 'put ''bGVDZWxscyJ9LDM0Mjp7bjoiQnJ0RW5kU2luZ2xlQ2VsbHMifSwzNDM6e246IkJydEJlZ2luTGlzdCJ9LDM0NDp7bjoiQnJ0RW5kTGlzdCJ9LDM0NTp7bjoiQnJ0QmVnaW5MaXN0Q29scyJ9LDM0Njp7bjoiQnJ0RW5kTGlzdENvbHMifSwzNDc6e246IkJydEJlZ2luTGlzdENvbCJ9LDM0ODp7''@;'; put 'put ''bjoiQnJ0RW5kTGlzdENvbCJ9LDM0OTp7bjoiQnJ0QmVnaW5MaXN0WG1sQ1ByIn0sMzUwOntuOiJCcnRFbmRMaXN0WG1sQ1ByIn0sMzUxOntuOiJCcnRMaXN0Q0NGbWxhIn0sMzUyOntuOiJCcnRMaXN0VHJGbWxhIn0sMzUzOntuOiJCcnRCZWdpbkV4dGVybmFscyJ9LDM1NDp7bjoiQnJ0RW5k''@;'; put 'put ''RXh0ZXJuYWxzIn0sMzU1OntuOiJCcnRTdXBCb29rU3JjIixmOmc0fSwzNTc6e246IkJydFN1cFNlbGYifSwzNTg6e246IkJydFN1cFNhbWUifSwzNTk6e246IkJydFN1cFRhYnMifSwzNjA6e246IkJydEJlZ2luU3VwQm9vayJ9LDM2MTp7bjoiQnJ0UGxhY2Vob2xkZXJOYW1lIn0sMzYyOntu''@;'; put 'put ''OiJCcnRFeHRlcm5TaGVldCIsZjpUdn0sMzYzOntuOiJCcnRFeHRlcm5UYWJsZVN0YXJ0In0sMzY0OntuOiJCcnRFeHRlcm5UYWJsZUVuZCJ9LDM2Njp7bjoiQnJ0RXh0ZXJuUm93SGRyIn0sMzY3OntuOiJCcnRFeHRlcm5DZWxsQmxhbmsifSwzNjg6e246IkJydEV4dGVybkNlbGxSZWFsIn0s''@;'; put 'put ''MzY5OntuOiJCcnRFeHRlcm5DZWxsQm9vbCJ9LDM3MDp7bjoiQnJ0RXh0ZXJuQ2VsbEVycm9yIn0sMzcxOntuOiJCcnRFeHRlcm5DZWxsU3RyaW5nIn0sMzcyOntuOiJCcnRCZWdpbkVzbWR4In0sMzczOntuOiJCcnRFbmRFc21keCJ9LDM3NDp7bjoiQnJ0QmVnaW5NZHhTZXQifSwzNzU6e246''@;'; put 'put ''IkJydEVuZE1keFNldCJ9LDM3Njp7bjoiQnJ0QmVnaW5NZHhNYnJQcm9wIn0sMzc3OntuOiJCcnRFbmRNZHhNYnJQcm9wIn0sMzc4OntuOiJCcnRCZWdpbk1keEtQSSJ9LDM3OTp7bjoiQnJ0RW5kTWR4S1BJIn0sMzgwOntuOiJCcnRCZWdpbkVzc3RyIn0sMzgxOntuOiJCcnRFbmRFc3N0ciJ9''@;'; put 'put ''LDM4Mjp7bjoiQnJ0QmVnaW5QUkZJdGVtIn0sMzgzOntuOiJCcnRFbmRQUkZJdGVtIn0sMzg0OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRHMifSwzODU6e246IkJydEVuZFBpdm90Q2FjaGVJRHMifSwzODY6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEIn0sMzg3OntuOiJCcnRFbmRQaXZvdENh''@;'; put 'put ''Y2hlSUQifSwzODg6e246IkJydEJlZ2luSVNYVklzIn0sMzg5OntuOiJCcnRFbmRJU1hWSXMifSwzOTA6e246IkJydEJlZ2luQ29sSW5mb3MifSwzOTE6e246IkJydEVuZENvbEluZm9zIn0sMzkyOntuOiJCcnRCZWdpblJ3QnJrIn0sMzkzOntuOiJCcnRFbmRSd0JyayJ9LDM5NDp7bjoiQnJ0''@;'; put 'put ''QmVnaW5Db2xCcmsifSwzOTU6e246IkJydEVuZENvbEJyayJ9LDM5Njp7bjoiQnJ0QnJrIn0sMzk3OntuOiJCcnRVc2VyQm9va1ZpZXcifSwzOTg6e246IkJydEluZm8ifSwzOTk6e246IkJydENVc3IifSw0MDA6e246IkJydFVzciJ9LDQwMTp7bjoiQnJ0QmVnaW5Vc2VycyJ9LDQwMzp7bjoi''@;'; put 'put ''QnJ0RU9GIn0sNDA0OntuOiJCcnRVQ1IifSw0MDU6e246IkJydFJSSW5zRGVsIn0sNDA2OntuOiJCcnRSUkVuZEluc0RlbCJ9LDQwNzp7bjoiQnJ0UlJNb3ZlIn0sNDA4OntuOiJCcnRSUkVuZE1vdmUifSw0MDk6e246IkJydFJSQ2hnQ2VsbCJ9LDQxMDp7bjoiQnJ0UlJFbmRDaGdDZWxsIn0s''@;'; put 'put ''NDExOntuOiJCcnRSUkhlYWRlciJ9LDQxMjp7bjoiQnJ0UlJVc2VyVmlldyJ9LDQxMzp7bjoiQnJ0UlJSZW5TaGVldCJ9LDQxNDp7bjoiQnJ0UlJJbnNlcnRTaCJ9LDQxNTp7bjoiQnJ0UlJEZWZOYW1lIn0sNDE2OntuOiJCcnRSUk5vdGUifSw0MTc6e246IkJydFJSQ29uZmxpY3QifSw0MTg6''@;'; put 'put ''e246IkJydFJSVFFTSUYifSw0MTk6e246IkJydFJSRm9ybWF0In0sNDIwOntuOiJCcnRSUkVuZEZvcm1hdCJ9LDQyMTp7bjoiQnJ0UlJBdXRvRm10In0sNDIyOntuOiJCcnRCZWdpblVzZXJTaFZpZXdzIn0sNDIzOntuOiJCcnRCZWdpblVzZXJTaFZpZXcifSw0MjQ6e246IkJydEVuZFVzZXJT''@;'; put 'put ''aFZpZXcifSw0MjU6e246IkJydEVuZFVzZXJTaFZpZXdzIn0sNDI2OntuOiJCcnRBcnJGbWxhIixmOmZ1bmN0aW9uIGdiKFMsUixrKXt2YXIgRz1TLmwrUixRPWxkKFMpLG9lPVMucmVhZF9zaGlmdCgxKSxnZT1bUV07aWYoZ2VbMl09b2Usay5jZWxsRm9ybXVsYSl7dmFyIHBlPWVTKFMsRy1T''@;'; put 'put ''Lmwsayk7Z2VbMV09cGV9ZWxzZSBTLmw9RztyZXR1cm4gZ2V9fSw0Mjc6e246IkJydFNockZtbGEiLGY6ZnVuY3Rpb24gWWooUyxSLGspe3ZhciBHPVMubCtSLG9lPVttdShTLDE2KV07aWYoay5jZWxsRm9ybXVsYSl7dmFyIGdlPUpCKFMsRy1TLmwsayk7b2VbMV09Z2UsUy5sPUd9ZWxzZSBT''@;'; put 'put ''Lmw9RztyZXR1cm4gb2V9fSw0Mjg6e246IkJydFRhYmxlIn0sNDI5OntuOiJCcnRCZWdpbkV4dENvbm5lY3Rpb25zIn0sNDMwOntuOiJCcnRFbmRFeHRDb25uZWN0aW9ucyJ9LDQzMTp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtcyJ9LDQzMjp7bjoiQnJ0RW5kUENEQ2FsY01lbXMifSw0MzM6e246''@;'; put 'put ''IkJydEJlZ2luUENEQ2FsY01lbSJ9LDQzNDp7bjoiQnJ0RW5kUENEQ2FsY01lbSJ9LDQzNTp7bjoiQnJ0QmVnaW5QQ0RIR0xldmVscyJ9LDQzNjp7bjoiQnJ0RW5kUENESEdMZXZlbHMifSw0Mzc6e246IkJydEJlZ2luUENESEdMZXZlbCJ9LDQzODp7bjoiQnJ0RW5kUENESEdMZXZlbCJ9LDQz''@;'; put 'put ''OTp7bjoiQnJ0QmVnaW5QQ0RIR0xHcm91cHMifSw0NDA6e246IkJydEVuZFBDREhHTEdyb3VwcyJ9LDQ0MTp7bjoiQnJ0QmVnaW5QQ0RIR0xHcm91cCJ9LDQ0Mjp7bjoiQnJ0RW5kUENESEdMR3JvdXAifSw0NDM6e246IkJydEJlZ2luUENESEdMR01lbWJlcnMifSw0NDQ6e246IkJydEVuZFBD''@;'; put 'put ''REhHTEdNZW1iZXJzIn0sNDQ1OntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXIifSw0NDY6e246IkJydEVuZFBDREhHTEdNZW1iZXIifSw0NDc6e246IkJydEJlZ2luUVNJIn0sNDQ4OntuOiJCcnRFbmRRU0kifSw0NDk6e246IkJydEJlZ2luUVNJUiJ9LDQ1MDp7bjoiQnJ0RW5kUVNJUiJ9LDQ1''@;'; put 'put ''MTp7bjoiQnJ0QmVnaW5EZWxldGVkTmFtZXMifSw0NTI6e246IkJydEVuZERlbGV0ZWROYW1lcyJ9LDQ1Mzp7bjoiQnJ0QmVnaW5EZWxldGVkTmFtZSJ9LDQ1NDp7bjoiQnJ0RW5kRGVsZXRlZE5hbWUifSw0NTU6e246IkJydEJlZ2luUVNJRnMifSw0NTY6e246IkJydEVuZFFTSUZzIn0sNDU3''@;'; put 'put ''OntuOiJCcnRCZWdpblFTSUYifSw0NTg6e246IkJydEVuZFFTSUYifSw0NTk6e246IkJydEJlZ2luQXV0b1NvcnRTY29wZSJ9LDQ2MDp7bjoiQnJ0RW5kQXV0b1NvcnRTY29wZSJ9LDQ2MTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmcifSw0NjI6e246IkJydEVuZENvbmRpdGlv''@;'; put 'put ''bmFsRm9ybWF0dGluZyJ9LDQ2Mzp7bjoiQnJ0QmVnaW5DRlJ1bGUifSw0NjQ6e246IkJydEVuZENGUnVsZSJ9LDQ2NTp7bjoiQnJ0QmVnaW5JY29uU2V0In0sNDY2OntuOiJCcnRFbmRJY29uU2V0In0sNDY3OntuOiJCcnRCZWdpbkRhdGFiYXIifSw0Njg6e246IkJydEVuZERhdGFiYXIifSw0''@;'; put 'put ''Njk6e246IkJydEJlZ2luQ29sb3JTY2FsZSJ9LDQ3MDp7bjoiQnJ0RW5kQ29sb3JTY2FsZSJ9LDQ3MTp7bjoiQnJ0Q0ZWTyJ9LDQ3Mjp7bjoiQnJ0RXh0ZXJuVmFsdWVNZXRhIn0sNDczOntuOiJCcnRCZWdpbkNvbG9yUGFsZXR0ZSJ9LDQ3NDp7bjoiQnJ0RW5kQ29sb3JQYWxldHRlIn0sNDc1''@;'; put 'put ''OntuOiJCcnRJbmRleGVkQ29sb3IifSw0NzY6e246IkJydE1hcmdpbnMiLGY6ZnVuY3Rpb24gJGooUyl7dmFyIFI9e307cmV0dXJuIEtELmZvckVhY2goZnVuY3Rpb24oayl7UltrXT1QbChTKX0pLFJ9fSw0Nzc6e246IkJydFByaW50T3B0aW9ucyJ9LDQ3ODp7bjoiQnJ0UGFnZVNldHVwIn0s''@;'; put 'put ''NDc5OntuOiJCcnRCZWdpbkhlYWRlckZvb3RlciJ9LDQ4MDp7bjoiQnJ0RW5kSGVhZGVyRm9vdGVyIn0sNDgxOntuOiJCcnRCZWdpblNYQ3J0Rm9ybWF0In0sNDgyOntuOiJCcnRFbmRTWENydEZvcm1hdCJ9LDQ4Mzp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdHMifSw0ODQ6e246IkJydEVuZFNY''@;'; put 'put ''Q3J0Rm9ybWF0cyJ9LDQ4NTp7bjoiQnJ0V3NGbXRJbmZvIixmOmZ1bmN0aW9uIGpEKFMpe3ZhciBSPXt9LGs9e30sRz17fSxRPVMucmVhZF9zaGlmdCg0KSxvZT1TLnJlYWRfc2hpZnQoMik7Ry53Y2g9UTw9NjU1MzY/US8yNTY6b2U7dmFyIGdlPVMucmVhZF9zaGlmdCgyKTtrLmhwdD1nZS8y''@;'; put 'put ''MDt2YXIgcGU9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiAyJnBlJiYoay5oaWRkZW49ITApLDQmcGUmJihSLnRvcHRoaWNrPSEwKSw4JnBlJiYoUi5ib3R0aGljaz0hMCksUi5yb3dvdXRsaW5lPVMucmVhZF9zaGlmdCgxKSxSLmNvbG91dGxpbmU9Uy5yZWFkX3NoaWZ0KDEpLGp2KGspLFIucm93''@;'; put 'put ''PWssUTAoRyksUi5jb2w9RyxSfX0sNDg2OntuOiJCcnRCZWdpbk1ncyJ9LDQ4Nzp7bjoiQnJ0RW5kTUdzIn0sNDg4OntuOiJCcnRCZWdpbk1HTWFwcyJ9LDQ4OTp7bjoiQnJ0RW5kTUdNYXBzIn0sNDkwOntuOiJCcnRCZWdpbk1HIn0sNDkxOntuOiJCcnRFbmRNRyJ9LDQ5Mjp7bjoiQnJ0QmVn''@;'; put 'put ''aW5NYXAifSw0OTM6e246IkJydEVuZE1hcCJ9LDQ5NDp7bjoiQnJ0SExpbmsiLGY6ZnVuY3Rpb24gVWooUyxSKXt2YXIgaz1TLmwrUixHPW11KFMsMTYpLFE9dDAoUyksb2U9Z3UoUyksZ2U9Z3UoUykscGU9Z3UoUyk7Uy5sPWs7dmFyIHllPXtyZng6RyxyZWxJZDpRLGxvYzpvZSxkaXNwbGF5''@;'; put 'put ''OnBlfTtyZXR1cm4gZ2UmJih5ZS5Ub29sdGlwPWdlKSx5ZX19LDQ5NTp7bjoiQnJ0QmVnaW5EQ29uIn0sNDk2OntuOiJCcnRFbmREQ29uIn0sNDk3OntuOiJCcnRCZWdpbkRSZWZzIn0sNDk4OntuOiJCcnRFbmREUmVmcyJ9LDQ5OTp7bjoiQnJ0RFJlZiJ9LDUwMDp7bjoiQnJ0QmVnaW5TY2Vu''@;'; put 'put ''TWFuIn0sNTAxOntuOiJCcnRFbmRTY2VuTWFuIn0sNTAyOntuOiJCcnRCZWdpblNjdCJ9LDUwMzp7bjoiQnJ0RW5kU2N0In0sNTA0OntuOiJCcnRTbGMifSw1MDU6e246IkJydEJlZ2luRFhGcyJ9LDUwNjp7bjoiQnJ0RW5kRFhGcyJ9LDUwNzp7bjoiQnJ0RFhGIn0sNTA4OntuOiJCcnRCZWdp''@;'; put 'put ''blRhYmxlU3R5bGVzIn0sNTA5OntuOiJCcnRFbmRUYWJsZVN0eWxlcyJ9LDUxMDp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlIn0sNTExOntuOiJCcnRFbmRUYWJsZVN0eWxlIn0sNTEyOntuOiJCcnRUYWJsZVN0eWxlRWxlbWVudCJ9LDUxMzp7bjoiQnJ0VGFibGVTdHlsZUNsaWVudCJ9LDUxNDp7''@;'; put 'put ''bjoiQnJ0QmVnaW5Wb2xEZXBzIn0sNTE1OntuOiJCcnRFbmRWb2xEZXBzIn0sNTE2OntuOiJCcnRCZWdpblZvbFR5cGUifSw1MTc6e246IkJydEVuZFZvbFR5cGUifSw1MTg6e246IkJydEJlZ2luVm9sTWFpbiJ9LDUxOTp7bjoiQnJ0RW5kVm9sTWFpbiJ9LDUyMDp7bjoiQnJ0QmVnaW5Wb2xU''@;'; put 'put ''b3BpYyJ9LDUyMTp7bjoiQnJ0RW5kVm9sVG9waWMifSw1MjI6e246IkJydFZvbFN1YnRvcGljIn0sNTIzOntuOiJCcnRWb2xSZWYifSw1MjQ6e246IkJydFZvbE51bSJ9LDUyNTp7bjoiQnJ0Vm9sRXJyIn0sNTI2OntuOiJCcnRWb2xTdHIifSw1Mjc6e246IkJydFZvbEJvb2wifSw1Mjg6e246''@;'; put 'put ''IkJydEJlZ2luQ2FsY0NoYWluJCJ9LDUyOTp7bjoiQnJ0RW5kQ2FsY0NoYWluJCJ9LDUzMDp7bjoiQnJ0QmVnaW5Tb3J0U3RhdGUifSw1MzE6e246IkJydEVuZFNvcnRTdGF0ZSJ9LDUzMjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZCJ9LDUzMzp7bjoiQnJ0RW5kU29ydENvbmQifSw1MzQ6e246IkJy''@;'; put 'put ''dEJvb2tQcm90ZWN0aW9uIn0sNTM1OntuOiJCcnRTaGVldFByb3RlY3Rpb24ifSw1MzY6e246IkJydFJhbmdlUHJvdGVjdGlvbiJ9LDUzNzp7bjoiQnJ0UGhvbmV0aWNJbmZvIn0sNTM4OntuOiJCcnRCZWdpbkVDVHh0V2l6In0sNTM5OntuOiJCcnRFbmRFQ1R4dFdpeiJ9LDU0MDp7bjoiQnJ0''@;'; put 'put ''QmVnaW5FQ1RXRmxkSW5mb0xzdCJ9LDU0MTp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QifSw1NDI6e246IkJydEJlZ2luRUNUd0ZsZEluZm8ifSw1NDg6e246IkJydEZpbGVTaGFyaW5nIn0sNTQ5OntuOiJCcnRPbGVTaXplIn0sNTUwOntuOiJCcnREcmF3aW5nIixmOmc0fSw1NTE6e246IkJy''@;'; put 'put ''dExlZ2FjeURyYXdpbmcifSw1NTI6e246IkJydExlZ2FjeURyYXdpbmdIRiJ9LDU1Mzp7bjoiQnJ0V2ViT3B0In0sNTU0OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW1zIn0sNTU1OntuOiJCcnRFbmRXZWJQdWJJdGVtcyJ9LDU1Njp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtIn0sNTU3OntuOiJCcnRF''@;'; put 'put ''bmRXZWJQdWJJdGVtIn0sNTU4OntuOiJCcnRCZWdpblNYQ29uZEZtdCJ9LDU1OTp7bjoiQnJ0RW5kU1hDb25kRm10In0sNTYwOntuOiJCcnRCZWdpblNYQ29uZEZtdHMifSw1NjE6e246IkJydEVuZFNYQ29uZEZtdHMifSw1NjI6e246IkJydEJrSGltIn0sNTY0OntuOiJCcnRDb2xvciJ9LDU2''@;'; put 'put ''NTp7bjoiQnJ0QmVnaW5JbmRleGVkQ29sb3JzIn0sNTY2OntuOiJCcnRFbmRJbmRleGVkQ29sb3JzIn0sNTY5OntuOiJCcnRCZWdpbk1SVUNvbG9ycyJ9LDU3MDp7bjoiQnJ0RW5kTVJVQ29sb3JzIn0sNTcyOntuOiJCcnRNUlVDb2xvciJ9LDU3Mzp7bjoiQnJ0QmVnaW5EVmFscyJ9LDU3NDp7''@;'; put 'put ''bjoiQnJ0RW5kRFZhbHMifSw1Nzc6e246IkJydFN1cE5hbWVTdGFydCJ9LDU3ODp7bjoiQnJ0U3VwTmFtZVZhbHVlU3RhcnQifSw1Nzk6e246IkJydFN1cE5hbWVWYWx1ZUVuZCJ9LDU4MDp7bjoiQnJ0U3VwTmFtZU51bSJ9LDU4MTp7bjoiQnJ0U3VwTmFtZUVyciJ9LDU4Mjp7bjoiQnJ0U3Vw''@;'; put 'put ''TmFtZVN0In0sNTgzOntuOiJCcnRTdXBOYW1lTmlsIn0sNTg0OntuOiJCcnRTdXBOYW1lQm9vbCJ9LDU4NTp7bjoiQnJ0U3VwTmFtZUZtbGEifSw1ODY6e246IkJydFN1cE5hbWVCaXRzIn0sNTg3OntuOiJCcnRTdXBOYW1lRW5kIn0sNTg4OntuOiJCcnRFbmRTdXBCb29rIn0sNTg5OntuOiJC''@;'; put 'put ''cnRDZWxsU21hcnRUYWdQcm9wZXJ0eSJ9LDU5MDp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWcifSw1OTE6e246IkJydEVuZENlbGxTbWFydFRhZyJ9LDU5Mjp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWdzIn0sNTkzOntuOiJCcnRFbmRDZWxsU21hcnRUYWdzIn0sNTk0OntuOiJCcnRCZWdpblNt''@;'; put 'put ''YXJ0VGFncyJ9LDU5NTp7bjoiQnJ0RW5kU21hcnRUYWdzIn0sNTk2OntuOiJCcnRTbWFydFRhZ1R5cGUifSw1OTc6e246IkJydEJlZ2luU21hcnRUYWdUeXBlcyJ9LDU5ODp7bjoiQnJ0RW5kU21hcnRUYWdUeXBlcyJ9LDU5OTp7bjoiQnJ0QmVnaW5TWEZpbHRlcnMifSw2MDA6e246IkJydEVu''@;'; put 'put ''ZFNYRmlsdGVycyJ9LDYwMTp7bjoiQnJ0QmVnaW5TWEZJTFRFUiJ9LDYwMjp7bjoiQnJ0RW5kU1hGaWx0ZXIifSw2MDM6e246IkJydEJlZ2luRmlsbHMifSw2MDQ6e246IkJydEVuZEZpbGxzIn0sNjA1OntuOiJCcnRCZWdpbkNlbGxXYXRjaGVzIn0sNjA2OntuOiJCcnRFbmRDZWxsV2F0Y2hl''@;'; put 'put ''cyJ9LDYwNzp7bjoiQnJ0Q2VsbFdhdGNoIn0sNjA4OntuOiJCcnRCZWdpbkNSRXJycyJ9LDYwOTp7bjoiQnJ0RW5kQ1JFcnJzIn0sNjEwOntuOiJCcnRDcmFzaFJlY0VyciJ9LDYxMTp7bjoiQnJ0QmVnaW5Gb250cyJ9LDYxMjp7bjoiQnJ0RW5kRm9udHMifSw2MTM6e246IkJydEJlZ2luQm9y''@;'; put 'put ''ZGVycyJ9LDYxNDp7bjoiQnJ0RW5kQm9yZGVycyJ9LDYxNTp7bjoiQnJ0QmVnaW5GbXRzIn0sNjE2OntuOiJCcnRFbmRGbXRzIn0sNjE3OntuOiJCcnRCZWdpbkNlbGxYRnMifSw2MTg6e246IkJydEVuZENlbGxYRnMifSw2MTk6e246IkJydEJlZ2luU3R5bGVzIn0sNjIwOntuOiJCcnRFbmRT''@;'; put 'put ''dHlsZXMifSw2MjU6e246IkJydEJpZ05hbWUifSw2MjY6e246IkJydEJlZ2luQ2VsbFN0eWxlWEZzIn0sNjI3OntuOiJCcnRFbmRDZWxsU3R5bGVYRnMifSw2Mjg6e246IkJydEJlZ2luQ29tbWVudHMifSw2Mjk6e246IkJydEVuZENvbW1lbnRzIn0sNjMwOntuOiJCcnRCZWdpbkNvbW1lbnRB''@;'; put 'put ''dXRob3JzIn0sNjMxOntuOiJCcnRFbmRDb21tZW50QXV0aG9ycyJ9LDYzMjp7bjoiQnJ0Q29tbWVudEF1dGhvciIsZjp3Qn0sNjMzOntuOiJCcnRCZWdpbkNvbW1lbnRMaXN0In0sNjM0OntuOiJCcnRFbmRDb21tZW50TGlzdCJ9LDYzNTp7bjoiQnJ0QmVnaW5Db21tZW50IixmOmZ1bmN0aW9u''@;'; put 'put ''IEY1KFMpe3ZhciBSPXt9O1IuaWF1dGhvcj1TLnJlYWRfc2hpZnQoNCk7dmFyIGs9bXUoUywxNik7cmV0dXJuIFIucmZ4PWsucyxSLnJlZj1xaShrLnMpLFMubCs9MTYsUn19LDYzNjp7bjoiQnJ0RW5kQ29tbWVudCJ9LDYzNzp7bjoiQnJ0Q29tbWVudFRleHQiLGY6THd9LDYzODp7bjoiQnJ0''@;'; put 'put ''QmVnaW5PbGVPYmplY3RzIn0sNjM5OntuOiJCcnRPbGVPYmplY3QifSw2NDA6e246IkJydEVuZE9sZU9iamVjdHMifSw2NDE6e246IkJydEJlZ2luU3hydWxlcyJ9LDY0Mjp7bjoiQnJ0RW5kU3hSdWxlcyJ9LDY0Mzp7bjoiQnJ0QmVnaW5BY3RpdmVYQ29udHJvbHMifSw2NDQ6e246IkJydEFj''@;'; put 'put ''dGl2ZVgifSw2NDU6e246IkJydEVuZEFjdGl2ZVhDb250cm9scyJ9LDY0Njp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnNTb3J0QnkifSw2NDg6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDcyJ9LDY0OTp7bjoiQnJ0Q2VsbElnbm9yZUVDIn0sNjUwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNz''@;'; put 'put ''In0sNjUxOntuOiJCcnRDc1Byb3AiLGY6ZnVuY3Rpb24gZHooUyxSKXtyZXR1cm4gUy5sKz0xMCx7bmFtZTpndShTKX19fSw2NTI6e246IkJydENzUGFnZVNldHVwIn0sNjUzOntuOiJCcnRCZWdpblVzZXJDc1ZpZXdzIn0sNjU0OntuOiJCcnRFbmRVc2VyQ3NWaWV3cyJ9LDY1NTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5Vc2VyQ3NWaWV3In0sNjU2OntuOiJCcnRFbmRVc2VyQ3NWaWV3In0sNjU3OntuOiJCcnRCZWdpblBjZFNGQ0lFbnRyaWVzIn0sNjU4OntuOiJCcnRFbmRQQ0RTRkNJRW50cmllcyJ9LDY1OTp7bjoiQnJ0UENEU0ZDSUVudHJ5In0sNjYwOntuOiJCcnRCZWdpbkxpc3RQYXJ0cyJ9LDY2''@;'; put 'put ''MTp7bjoiQnJ0TGlzdFBhcnQifSw2NjI6e246IkJydEVuZExpc3RQYXJ0cyJ9LDY2Mzp7bjoiQnJ0U2hlZXRDYWxjUHJvcCJ9LDY2NDp7bjoiQnJ0QmVnaW5Gbkdyb3VwIn0sNjY1OntuOiJCcnRGbkdyb3VwIn0sNjY2OntuOiJCcnRFbmRGbkdyb3VwIn0sNjY3OntuOiJCcnRTdXBBZGRpbiJ9''@;'; put 'put ''LDY2ODp7bjoiQnJ0U1hURE1QT3JkZXIifSw2Njk6e246IkJydENzUHJvdGVjdGlvbiJ9LDY3MTp7bjoiQnJ0QmVnaW5Xc1NvcnRNYXAifSw2NzI6e246IkJydEVuZFdzU29ydE1hcCJ9LDY3Mzp7bjoiQnJ0QmVnaW5SUlNvcnQifSw2NzQ6e246IkJydEVuZFJSU29ydCJ9LDY3NTp7bjoiQnJ0''@;'; put 'put ''UlJTb3J0SXRlbSJ9LDY3Njp7bjoiQnJ0RmlsZVNoYXJpbmdJc28ifSw2Nzc6e246IkJydEJvb2tQcm90ZWN0aW9uSXNvIn0sNjc4OntuOiJCcnRTaGVldFByb3RlY3Rpb25Jc28ifSw2Nzk6e246IkJydENzUHJvdGVjdGlvbklzbyJ9LDY4MDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvIn0s''@;'; put 'put ''NjgxOntuOiJCcnREVmFsTGlzdCJ9LDEwMjQ6e246IkJydFJ3RGVzY2VudCJ9LDEwMjU6e246IkJydEtub3duRm9udHMifSwxMDI2OntuOiJCcnRCZWdpblNYVHVwbGVTZXQifSwxMDI3OntuOiJCcnRFbmRTWFR1cGxlU2V0In0sMTAyODp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0SGVhZGVyIn0s''@;'; put 'put ''MTAyOTp7bjoiQnJ0RW5kU1hUdXBsZVNldEhlYWRlciJ9LDEwMzA6e246IkJydFNYVHVwbGVTZXRIZWFkZXJJdGVtIn0sMTAzMTp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0RGF0YSJ9LDEwMzI6e246IkJydEVuZFNYVHVwbGVTZXREYXRhIn0sMTAzMzp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0Um93''@;'; put 'put ''In0sMTAzNDp7bjoiQnJ0RW5kU1hUdXBsZVNldFJvdyJ9LDEwMzU6e246IkJydFNYVHVwbGVTZXRSb3dJdGVtIn0sMTAzNjp7bjoiQnJ0TmFtZUV4dCJ9LDEwMzc6e246IkJydFBDREgxNCJ9LDEwMzg6e246IkJydEJlZ2luUENEQ2FsY01lbTE0In0sMTAzOTp7bjoiQnJ0RW5kUENEQ2FsY01l''@;'; put 'put ''bTE0In0sMTA0MDp7bjoiQnJ0U1hUSDE0In0sMTA0MTp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cCJ9LDEwNDI6e246IkJydEVuZFNwYXJrbGluZUdyb3VwIn0sMTA0Mzp7bjoiQnJ0U3BhcmtsaW5lIn0sMTA0NDp7bjoiQnJ0U1hESTE0In0sMTA0NTp7bjoiQnJ0V3NGbXRJbmZvRXgxNCJ9''@;'; put 'put ''LDEwNDY6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ3OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDg6e246IkJydEJlZ2luQ0ZSdWxlMTQifSwxMDQ5OntuOiJCcnRFbmRDRlJ1bGUxNCJ9LDEwNTA6e246IkJydENGVk8xNCJ9LDEwNTE6''@;'; put 'put ''e246IkJydEJlZ2luRGF0YWJhcjE0In0sMTA1Mjp7bjoiQnJ0QmVnaW5JY29uU2V0MTQifSwxMDUzOntuOiJCcnREVmFsMTQiLGY6ZnVuY3Rpb24gSVMoUyxSLGspe3ZhciBHPWZ1bmN0aW9uIGRuKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT17fTtyZXR1cm4gMSZHJiYoUS5yZWZz''@;'; put 'put ''PWZ1bmN0aW9uIHFuKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXTtSLS0gPjA7KWsucHVzaChpaShTKSk7cmV0dXJuIGt9KFMpKSwyJkcmJihRLnNxcmVmcz1mdW5jdGlvbiBJYShTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9W107Ui0tID4wOylrLnB1c2goU28oUykp''@;'; put 'put ''O3JldHVybiBrfShTKSksNCZHJiYoUS5mb3JtdWxhcz1mdW5jdGlvbiBmcyhTLFIsayl7Zm9yKHZhciBHPVMucmVhZF9zaGlmdCg0KSxRPVtdO0ctLSA+MDspUS5wdXNoKE51KFMsMCxrKSk7cmV0dXJuIFF9KFMsMCxrKSksOCZHJiYoUS5yZWxJRD1mdW5jdGlvbiBsdihTKXt2YXIgUj1TLnJl''@;'; put 'put ''YWRfc2hpZnQoMik7cmV0dXJuIDA9PT1SPyIiOlMucmVhZF9zaGlmdChSLCJ1dGYxNmxlIil9KFMpKSxRfShTLDAsayksUT1TLnJlYWRfc2hpZnQoNCksb2U9dDAoUyksZ2U9dDAoUykscGU9dDAoUykseWU9dDAoUyksUGU9KEcuZm9ybXVsYXN8fFtdKVswXSxOZT0oRy5mb3JtdWxhc3x8W10p''@;'; put 'put ''WzFdLFllPTE1JlEsZXQ9e3Q6cURbWWVdLHNxcmZ4Okcuc3FyZWZzWzBdLHM6W29lLGdlLHBlLHllXX07cmV0dXJuIFBlJiYoZXQuZjE9UGUpLE5lJiYoZXQuZjI9TmUpLDA9PVllfHwzPT1ZZXx8Nz09WWV8fChldC5vcD1EU1tRPj4yMCYxNV0pLGV0fX0sMTA1NDp7bjoiQnJ0QmVnaW5EVmFs''@;'; put 'put ''czE0In0sMTA1NTp7bjoiQnJ0Q29sb3IxNCJ9LDEwNTY6e246IkJydEJlZ2luU3BhcmtsaW5lcyJ9LDEwNTc6e246IkJydEVuZFNwYXJrbGluZXMifSwxMDU4OntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwcyJ9LDEwNTk6e246IkJydEVuZFNwYXJrbGluZUdyb3VwcyJ9LDEwNjE6e246IkJy''@;'; put 'put ''dFNYVkQxNCJ9LDEwNjI6e246IkJydEJlZ2luU1hWaWV3MTQifSwxMDYzOntuOiJCcnRFbmRTWFZpZXcxNCJ9LDEwNjQ6e246IkJydEJlZ2luU1hWaWV3MTYifSwxMDY1OntuOiJCcnRFbmRTWFZpZXcxNiJ9LDEwNjY6e246IkJydEJlZ2luUENEMTQifSwxMDY3OntuOiJCcnRFbmRQQ0QxNCJ9''@;'; put 'put ''LDEwNjg6e246IkJydEJlZ2luRXh0Q29ubjE0In0sMTA2OTp7bjoiQnJ0RW5kRXh0Q29ubjE0In0sMTA3MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEcyJ9LDEwNzE6e246IkJydEVuZFNsaWNlckNhY2hlSURzIn0sMTA3Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEIn0sMTA3Mzp7bjoi''@;'; put 'put ''QnJ0RW5kU2xpY2VyQ2FjaGVJRCJ9LDEwNzU6e246IkJydEJlZ2luU2xpY2VyQ2FjaGUifSwxMDc2OntuOiJCcnRFbmRTbGljZXJDYWNoZSJ9LDEwNzc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVEZWYifSwxMDc4OntuOiJCcnRFbmRTbGljZXJDYWNoZURlZiJ9LDEwNzk6e246IkJydEJlZ2lu''@;'; put 'put ''U2xpY2Vyc0V4In0sMTA4MDp7bjoiQnJ0RW5kU2xpY2Vyc0V4In0sMTA4MTp7bjoiQnJ0QmVnaW5TbGljZXJFeCJ9LDEwODI6e246IkJydEVuZFNsaWNlckV4In0sMTA4Mzp7bjoiQnJ0QmVnaW5TbGljZXIifSwxMDg0OntuOiJCcnRFbmRTbGljZXIifSwxMDg1OntuOiJCcnRTbGljZXJDYWNo''@;'; put 'put ''ZVBpdm90VGFibGVzIn0sMTA4Njp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4Nzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODg6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA4OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbHNE''@;'; put 'put ''YXRhIn0sMTA5MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTE6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTQ6''@;'; put 'put ''e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5NTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5Njp7bjoiQnJ0U2xpY2VyQ2FjaGVPbGFwSXRlbSJ9LDEwOTc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTA5ODp7bjoiQnJ0U2xpY2VyQ2Fj''@;'; put 'put ''aGVTZWxlY3Rpb24ifSwxMDk5OntuOiJCcnRFbmRTbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMTAwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAyOntuOiJCcnRTbGljZXJDYWNoZU5hdGl2ZUl0ZW0ifSwxMTAz''@;'; put 'put ''OntuOiJCcnRSYW5nZVByb3RlY3Rpb24xNCJ9LDExMDQ6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbzE0In0sMTEwNTp7bjoiQnJ0Q2VsbElnbm9yZUVDMTQifSwxMTExOntuOiJCcnRMaXN0MTQifSwxMTEyOntuOiJCcnRDRkljb24ifSwxMTEzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bp''@;'; put 'put ''dm90Q2FjaGVJRHMifSwxMTE0OntuOiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNTp7bjoiQnJ0QmVnaW5TbGljZXJzIn0sMTExNjp7bjoiQnJ0RW5kU2xpY2VycyJ9LDExMTc6e246IkJydFdiUHJvcDE0In0sMTExODp7bjoiQnJ0QmVnaW5TWEVkaXQifSwxMTE5Ontu''@;'; put 'put ''OiJCcnRFbmRTWEVkaXQifSwxMTIwOntuOiJCcnRCZWdpblNYRWRpdHMifSwxMTIxOntuOiJCcnRFbmRTWEVkaXRzIn0sMTEyMjp7bjoiQnJ0QmVnaW5TWENoYW5nZSJ9LDExMjM6e246IkJydEVuZFNYQ2hhbmdlIn0sMTEyNDp7bjoiQnJ0QmVnaW5TWENoYW5nZXMifSwxMTI1OntuOiJCcnRF''@;'; put 'put ''bmRTWENoYW5nZXMifSwxMTI2OntuOiJCcnRTWFR1cGxlSXRlbXMifSwxMTI4OntuOiJCcnRCZWdpblNsaWNlclN0eWxlIn0sMTEyOTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGUifSwxMTMwOntuOiJCcnRTbGljZXJTdHlsZUVsZW1lbnQifSwxMTMxOntuOiJCcnRCZWdpblN0eWxlU2hlZXRFeHQx''@;'; put 'put ''NCJ9LDExMzI6e246IkJydEVuZFN0eWxlU2hlZXRFeHQxNCJ9LDExMzM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmdzIn0s''@;'; put 'put ''MTEzNjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzc6e246IkJydEJlZ2luUENEQ2FsY01lbUV4dCJ9LDExMzg6e246IkJydEVuZFBDRENhbGNNZW1FeHQifSwxMTM5OntuOiJCcnRCZWdpblBDRENhbGNNZW1zRXh0In0sMTE0MDp7bjoiQnJ0RW5kUENEQ2FsY01lbXNF''@;'; put 'put ''eHQifSwxMTQxOntuOiJCcnRQQ0RGaWVsZDE0In0sMTE0Mjp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZXMifSwxMTQzOntuOiJCcnRFbmRTbGljZXJTdHlsZXMifSwxMTQ0OntuOiJCcnRCZWdpblNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ1OntuOiJCcnRFbmRTbGljZXJTdHlsZUVsZW1lbnRz''@;'; put 'put ''In0sMTE0Njp7bjoiQnJ0Q0ZSdWxlRXh0In0sMTE0Nzp7bjoiQnJ0QmVnaW5TWENvbmRGbXQxNCJ9LDExNDg6e246IkJydEVuZFNYQ29uZEZtdDE0In0sMTE0OTp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzMTQifSwxMTUwOntuOiJCcnRFbmRTWENvbmRGbXRzMTQifSwxMTUyOntuOiJCcnRCZWdp''@;'; put 'put ''blNvcnRDb25kMTQifSwxMTUzOntuOiJCcnRFbmRTb3J0Q29uZDE0In0sMTE1NDp7bjoiQnJ0RW5kRFZhbHMxNCJ9LDExNTU6e246IkJydEVuZEljb25TZXQxNCJ9LDExNTY6e246IkJydEVuZERhdGFiYXIxNCJ9LDExNTc6e246IkJydEJlZ2luQ29sb3JTY2FsZTE0In0sMTE1ODp7bjoiQnJ0''@;'; put 'put ''RW5kQ29sb3JTY2FsZTE0In0sMTE1OTp7bjoiQnJ0QmVnaW5TeHJ1bGVzMTQifSwxMTYwOntuOiJCcnRFbmRTeHJ1bGVzMTQifSwxMTYxOntuOiJCcnRCZWdpblBSdWxlMTQifSwxMTYyOntuOiJCcnRFbmRQUnVsZTE0In0sMTE2Mzp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMxNCJ9LDExNjQ6e246''@;'; put 'put ''IkJydEVuZFBSRmlsdGVyczE0In0sMTE2NTp7bjoiQnJ0QmVnaW5QUkZpbHRlcjE0In0sMTE2Njp7bjoiQnJ0RW5kUFJGaWx0ZXIxNCJ9LDExNjc6e246IkJydEJlZ2luUFJGSXRlbTE0In0sMTE2ODp7bjoiQnJ0RW5kUFJGSXRlbTE0In0sMTE2OTp7bjoiQnJ0QmVnaW5DZWxsSWdub3JlRUNz''@;'; put 'put ''MTQifSwxMTcwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzMTQifSwxMTcxOntuOiJCcnREeGYxNCJ9LDExNzI6e246IkJydEJlZ2luRHhGMTRzIn0sMTE3Mzp7bjoiQnJ0RW5kRHhmMTRzIn0sMTE3Nzp7bjoiQnJ0RmlsdGVyMTQifSwxMTc4OntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMxNCJ9''@;'; put 'put ''LDExODA6e246IkJydEN1c3RvbUZpbHRlcjE0In0sMTE4MTp7bjoiQnJ0SWNvbkZpbHRlcjE0In0sMTE4Mjp7bjoiQnJ0UGl2b3RDYWNoZUNvbm5lY3Rpb25OYW1lIn0sMjA0ODp7bjoiQnJ0QmVnaW5EZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA0OTp7bjoiQnJ0RW5kRGVjb3VwbGVkUGl2''@;'; put 'put ''b3RDYWNoZUlEcyJ9LDIwNTA6e246IkJydERlY291cGxlZFBpdm90Q2FjaGVJRCJ9LDIwNTE6e246IkJydEJlZ2luUGl2b3RUYWJsZVJlZnMifSwyMDUyOntuOiJCcnRFbmRQaXZvdFRhYmxlUmVmcyJ9LDIwNTM6e246IkJydFBpdm90VGFibGVSZWYifSwyMDU0OntuOiJCcnRTbGljZXJDYWNo''@;'; put 'put ''ZUJvb2tQaXZvdFRhYmxlcyJ9LDIwNTU6e246IkJydEJlZ2luU3h2Y2VsbHMifSwyMDU2OntuOiJCcnRFbmRTeHZjZWxscyJ9LDIwNTc6e246IkJydEJlZ2luU3hSb3cifSwyMDU4OntuOiJCcnRFbmRTeFJvdyJ9LDIwNjA6e246IkJydFBjZENhbGNNZW0xNSJ9LDIwNjc6e246IkJydFFzaTE1''@;'; put 'put ''In0sMjA2ODp7bjoiQnJ0QmVnaW5XZWJFeHRlbnNpb25zIn0sMjA2OTp7bjoiQnJ0RW5kV2ViRXh0ZW5zaW9ucyJ9LDIwNzA6e246IkJydFdlYkV4dGVuc2lvbiJ9LDIwNzE6e246IkJydEFic1BhdGgxNSJ9LDIwNzI6e246IkJydEJlZ2luUGl2b3RUYWJsZVVJU2V0dGluZ3MifSwyMDczOntu''@;'; put 'put ''OiJCcnRFbmRQaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzU6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRHMifSwyMDc2OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSUQifSwyMDc3OntuOiJCcnRCZWdpblRhYmxlU2xpY2VyQ2FjaGUifSwyMDc4OntuOiJCcnRFbmRUYWJsZVNsaWNlckNhY2hl''@;'; put 'put ''In0sMjA3OTp7bjoiQnJ0U3hGaWx0ZXIxNSJ9LDIwODA6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgxOntuOiJCcnRFbmRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODI6e246IkJydFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSUQifSwyMDgzOntu''@;'; put 'put ''OiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRHMifSwyMDg0OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSURzIn0sMjA4NTp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSUQifSwyMDg2OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSUQifSwyMDg3OntuOiJCcnRCZWdpblRpbWVsaW5lc0V4In0sMjA4''@;'; put 'put ''ODp7bjoiQnJ0RW5kVGltZWxpbmVzRXgifSwyMDg5OntuOiJCcnRCZWdpblRpbWVsaW5lRXgifSwyMDkwOntuOiJCcnRFbmRUaW1lbGluZUV4In0sMjA5MTp7bjoiQnJ0V29ya0Jvb2tQcjE1In0sMjA5Mjp7bjoiQnJ0UENESDE1In0sMjA5Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlIn0s''@;'; put 'put ''MjA5NDp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZSJ9LDIwOTU6e246IkJydFRpbWVsaW5lU3R5bGVFbGVtZW50In0sMjA5Njp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTc6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0sMjA5ODp7bjoiQnJ0QmVn''@;'; put 'put ''aW5UaW1lbGluZVN0eWxlcyJ9LDIwOTk6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzIn0sMjEwMDp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAxOntuOiJCcnRFbmRUaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAyOntuOiJCcnREeGYxNSJ9LDIxMDM6e246IkJydEJl''@;'; put 'put ''Z2luRHhmczE1In0sMjEwNDp7bjoiYnJ0RW5kRHhmczE1In0sMjEwNTp7bjoiQnJ0U2xpY2VyQ2FjaGVIaWRlSXRlbXNXaXRoTm9EYXRhIn0sMjEwNjp7bjoiQnJ0QmVnaW5JdGVtVW5pcXVlTmFtZXMifSwyMTA3OntuOiJCcnRFbmRJdGVtVW5pcXVlTmFtZXMifSwyMTA4OntuOiJCcnRJdGVt''@;'; put 'put ''VW5pcXVlTmFtZSJ9LDIxMDk6e246IkJydEJlZ2luRXh0Q29ubjE1In0sMjExMDp7bjoiQnJ0RW5kRXh0Q29ubjE1In0sMjExMTp7bjoiQnJ0QmVnaW5PbGVkYlByMTUifSwyMTEyOntuOiJCcnRFbmRPbGVkYlByMTUifSwyMTEzOntuOiJCcnRCZWdpbkRhdGFGZWVkUHIxNSJ9LDIxMTQ6e246''@;'; put 'put ''IkJydEVuZERhdGFGZWVkUHIxNSJ9LDIxMTU6e246IkJydFRleHRQcjE1In0sMjExNjp7bjoiQnJ0UmFuZ2VQcjE1In0sMjExNzp7bjoiQnJ0RGJDb21tYW5kMTUifSwyMTE4OntuOiJCcnRCZWdpbkRiVGFibGVzMTUifSwyMTE5OntuOiJCcnRFbmREYlRhYmxlczE1In0sMjEyMDp7bjoiQnJ0''@;'; put 'put ''RGJUYWJsZTE1In0sMjEyMTp7bjoiQnJ0QmVnaW5EYXRhTW9kZWwifSwyMTIyOntuOiJCcnRFbmREYXRhTW9kZWwifSwyMTIzOntuOiJCcnRCZWdpbk1vZGVsVGFibGVzIn0sMjEyNDp7bjoiQnJ0RW5kTW9kZWxUYWJsZXMifSwyMTI1OntuOiJCcnRNb2RlbFRhYmxlIn0sMjEyNjp7bjoiQnJ0''@;'; put 'put ''QmVnaW5Nb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI3OntuOiJCcnRFbmRNb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI4OntuOiJCcnRNb2RlbFJlbGF0aW9uc2hpcCJ9LDIxMjk6e246IkJydEJlZ2luRUNUeHRXaXoxNSJ9LDIxMzA6e246IkJydEVuZEVDVHh0V2l6MTUifSwyMTMxOntuOiJCcnRC''@;'; put 'put ''ZWdpbkVDVFdGbGRJbmZvTHN0MTUifSwyMTMyOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdDE1In0sMjEzMzp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mbzE1In0sMjEzNDp7bjoiQnJ0RmllbGRMaXN0QWN0aXZlSXRlbSJ9LDIxMzU6e246IkJydFBpdm90Q2FjaGVJZFZlcnNpb24ifSwyMTM2Ontu''@;'; put 'put ''OiJCcnRTWERJMTUifSwyMTM3OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzg6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzk6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQwOntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGluZyJ9LDIxNDE6''@;'; put 'put ''e246IkJydE1vZGVsVGltZUdyb3VwaW5nQ2FsY0NvbCJ9LDMwNzI6e246IkJydFVpZCJ9LDMwNzM6e246IkJydFJldmlzaW9uUHRyIn0sNTA5NTp7bjoiQnJ0QmVnaW5DYWxjRmVhdHVyZXMifSw1MDk2OntuOiJCcnRFbmRDYWxjRmVhdHVyZXMifSw1MDk3OntuOiJCcnRDYWxjRmVhdHVyZSJ9''@;'; put 'put ''LDY1NTM1OntuOiIifX0sSHo9SWUoTDgsIm4iKTtIei5CcnRGUlRBcmNoSUQkPTE2O3ZhciBLUz17Njp7bjoiRm9ybXVsYSIsZjpRQ30sMTA6e246IkVPRiIsZjpyMn0sMTI6e246IkNhbGNDb3VudCIsZjpFY30sMTM6e246IkNhbGNNb2RlIixmOkVjfSwxNDp7bjoiQ2FsY1ByZWNpc2lvbiIs''@;'; put 'put ''Zjp1b30sMTU6e246IkNhbGNSZWZNb2RlIixmOnVvfSwxNjp7bjoiQ2FsY0RlbHRhIixmOlBsfSwxNzp7bjoiQ2FsY0l0ZXIiLGY6dW99LDE4OntuOiJQcm90ZWN0IixmOnVvfSwxOTp7bjoiUGFzc3dvcmQiLGY6RWN9LDIwOntuOiJIZWFkZXIiLGY6SkF9LDIxOntuOiJGb290ZXIiLGY6SkF9''@;'; put 'put ''LDIzOntuOiJFeHRlcm5TaGVldCIsZjpUdn0sMjQ6e246IkxibCIsZjp0Q30sMjU6e246IldpblByb3RlY3QiLGY6dW99LDI2OntuOiJWZXJ0aWNhbFBhZ2VCcmVha3MifSwyNzp7bjoiSG9yaXpvbnRhbFBhZ2VCcmVha3MifSwyODp7bjoiTm90ZSIsZjpmdW5jdGlvbiBRQShTLFIsayl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIENvKFMsUixrKXtpZighKGsuYmlmZjw4KSl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKSxnZT1TLnJlYWRfc2hpZnQoMikscGU9WDAoUywwLGspO3JldHVybiBrLmJpZmY8OCYmUy5yZWFkX3NoaWZ0KDEpLFt7''@;'; put 'put ''cjpHLGM6UX0scGUsZ2Usb2VdfX0oUywwLGspfX0sMjk6e246IlNlbGVjdGlvbiIsZjpmdW5jdGlvbiBUZihTLFIsayl7cmV0dXJuIGsmJmsuYmlmZjw1PyhTLmwrPVIse2NlbGw6e3I6MCxjOjB9fSk6KFMucmVhZF9zaGlmdCgxKSx7Y2VsbDpxaSh7cjpTLnJlYWRfc2hpZnQoMiksYzpTLnJl''@;'; put 'put ''YWRfc2hpZnQoMil9KX0pfX0sMzQ6e246IkRhdGUxOTA0IixmOnVvfSwzNTp7bjoiRXh0ZXJuTmFtZSIsZjplQ30sMzg6e246IkxlZnRNYXJnaW4iLGY6UGx9LDM5OntuOiJSaWdodE1hcmdpbiIsZjpQbH0sNDA6e246IlRvcE1hcmdpbiIsZjpQbH0sNDE6e246IkJvdHRvbU1hcmdpbiIsZjpQ''@;'; put 'put ''bH0sNDI6e246IlByaW50Um93Q29sIixmOnVvfSw0Mzp7bjoiUHJpbnRHcmlkIixmOnVvfSw0Nzp7bjoiRmlsZVBhc3MiLGY6ZnVuY3Rpb24gZ0MoUyxSLGspe2lmKGsuZW5jKXJldHVybiBrLmVuYzt2YXIgRz17VHlwZTprLmJpZmY+PTg/Uy5yZWFkX3NoaWZ0KDIpOjB9O3JldHVybiBHLlR5''@;'; put 'put ''cGU/ZnVuY3Rpb24gTnYoUyxSLGssRyl7dmFyIFE9R3x8e307aWYoUS5JbmZvPVMucmVhZF9zaGlmdCgyKSxTLmwtPTIsMT09PVEuSW5mbyl7aWYoUS5EYXRhPWZ1bmN0aW9uIHRuZShTKXt2YXIgUj17fSxrPVIuRW5jcnlwdGlvblZlcnNpb25JbmZvPVAxKFMsNCk7aWYoMSE9ay5NYWpvcnx8''@;'; put 'put ''MSE9ay5NaW5vcil0aHJvdyJ1bnJlY29nbml6ZWQgdmVyc2lvbiBjb2RlICIray5NYWpvcisiIDogIitrLk1pbm9yO3JldHVybiBSLlNhbHQ9Uy5yZWFkX3NoaWZ0KDE2KSxSLkVuY3J5cHRlZFZlcmlmaWVyPVMucmVhZF9zaGlmdCgxNiksUi5FbmNyeXB0ZWRWZXJpZmllckhhc2g9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDE2KSxSfShTKSxrLnBhc3N3b3JkJiZ0eXBlb2YgRzQ8InUiKXt2YXIgb2U9RzQoay5wYXNzd29yZCxRLkRhdGEuU2FsdCwiMDAwMDAwMDAiKSxnZT1TZShRLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXIrUS5EYXRhLkVuY3J5cHRlZFZlcmlmaWVySGFzaCwiaGV4IikscGU9WGwucmM0''@;'; put 'put ''KFNlKG9lLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IiksZ2UpO0cudmFsaWQ9WGwubWQ1KHBlLnNsaWNlKDAsMTYpKT09QnVmZmVyLmZyb20ocGUuc2xpY2UoMTYpKS50b1N0cmluZygiaGV4IiksUS5EYXRhLktleT1vZSxHLmluc2l0dT1mdW5jdGlvbiBxeihTLFIpe3ZhciBrPW5ldyBBcnJh''@;'; put 'put ''eSgyNTYpLEc9MCxRPTAsb2U9MCxnZT0wO2Z1bmN0aW9uIHBlKGV0KXtmb3IoRz0wLFE9MCxvZT0wLGdlPTAsUT0wOzI1NiE9UTsrK1Epa1tRXT1RO2ZvcihvZT0wLFE9MDsyNTYhPVE7KytRKXt0cnl7b2U9b2Ura1tRXStldFtRJWV0Lmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTV9Y2F0Y2go''@;'; put 'put ''Y3Qpe3Rocm93IGNvbnNvbGUubG9nKFEsZXRbUSVldC5sZW5ndGhdKSxjdH1nZT1rW1FdLGtbUV09a1tvZV0sa1tvZV09Z2V9UT1vZT0wfWZ1bmN0aW9uIHllKGV0KXt2YXIgY3Q9VihldC5sZW5ndGgpO2ZvcihHPTA7RyE9ZXQubGVuZ3RoOysrRylnZT1rW1E9USsxJjI1NV0sa1tRXT1rW29l''@;'; put 'put ''PShvZStrW1FdKSUyNTZdLGtbb2VdPWdlLGN0W0ddPWV0W0ddXmtba1tRXStrW29lXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShjdCl9dmFyIFBlPVMuS2V5LE5lPTA7cGUoU2UoUGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIFllPTA7cmV0dXJuIGZ1bmN0aW9uKGV0KXtpZihZ''@;'; put 'put ''ZStldC5sZW5ndGg8MTAyNClyZXR1cm4gWWUrPWV0Lmxlbmd0aCx5ZShldCk7dmFyIGF0PTAsYnQ9U2UoZXQuc2xpY2UoYXQsYXQrKEV0PTEwMjQtWWUpKSk7YXQrPUV0LFllPTA7dmFyIGp0PXllKGJ0KTtmb3IoYXQ9PWV0Lmxlbmd0aCYmKCsrTmUsUGU9RzQoUixTLlNhbHQsRjgoTmUpKSxw''@;'; put 'put ''ZShTZShQZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSk7YXQ8ZXQubGVuZ3RoOyl7KytOZSxQZT1HNChSLFMuU2FsdCxGOChOZSkpLHBlKEJ1ZmZlci5mcm9tKFBlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBFdD1NYXRoLm1pbigxMDI0LGV0Lmxlbmd0aC1hdCk7YnQ9U2Uo''@;'; put 'put ''ZXQuc2xpY2UoYXQsYXQrRXQpKSxhdCs9RXQsWWU9RXQsanQ9QnVmZmVyLmNvbmNhdChbanQseWUoYnQpXSl9cmV0dXJuIGp0fX0oUS5EYXRhLGsucGFzc3dvcmQpfX1lbHNlIGlmKFEuRGF0YT1mdW5jdGlvbiBGdihTLFIpe3ZhciBrPXt9LEc9ay5FbmNyeXB0aW9uVmVyc2lvbkluZm89UDEo''@;'; put 'put ''Uyw0KTtpZihSLT00LDIhPUcuTWlub3IpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWlub3IgdmVyc2lvbiBjb2RlOiAiK0cuTWlub3IpO2lmKEcuTWFqb3I+NHx8Ry5NYWpvcjwyKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1ham9yIHZlcnNpb24gY29kZTogIitHLk1h''@;'; put 'put ''am9yKTtrLkZsYWdzPVMucmVhZF9zaGlmdCg0KSxSLT00O3ZhciBRPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gUi09NCxrLkVuY3J5cHRpb25IZWFkZXI9SVYoUyxRKSxrLkVuY3J5cHRpb25WZXJpZmllcj1QdihTLFItPVEpLGt9KFMsUiksUS5EYXRhJiZRLkRhdGEuRW5jcnlwdGlvbkhlYWRl''@;'; put 'put ''ciYmMjY2MjU9PT1RLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5BbGdJRCYmay5wYXNzd29yZCYmdHlwZW9mICQ0PCJ1Iil7dmFyIHllPSQ0KGsucGFzc3dvcmQsUS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LnRvU3RyaW5nKCJoZXgiKSwiMDAwMDAwMDAiKSxQZT1RLkRhdGEuRW5jcnlw''@;'; put 'put ''dGlvbkhlYWRlci5LZXlTaXplPj4+Mzs1PT1QZXx8UGU8eWUubGVuZ3RoJiYoeWU9eWUuc2xpY2UoMCxQZSkpO3ZhciBOZT1TZShRLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVyLnRvU3RyaW5nKCJoZXgiKStRLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVySGFzaC50''@;'; put 'put ''b1N0cmluZygiaGV4IiksImhleCIpLFllPVhsLnJjNCh5ZS50b1N0cmluZygiYmluYXJ5IiksTmUpO0cudmFsaWQ9bWMoWWUuc2xpY2UoMCxQZSksIlNIQTEiKS50b1N0cmluZygiaGV4Iik9PVllLnNsaWNlKFBlKS50b1N0cmluZygiaGV4IiksUS5EYXRhLktleT15ZSxHLnZhbGlkJiYoRy5p''@;'; put 'put ''bnNpdHU9ZnVuY3Rpb24gdHJlKFMsUil7dmFyIGs9bmV3IEFycmF5KDI1NiksRz0wLFE9MCxvZT0wLGdlPTAscGU9Uy5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zO2Z1bmN0aW9uIHllKGN0KXtmb3IoY3Q9QnVmZmVyLmZyb20oY3Quc2xpY2UoMCxwZSkpLEc9MCxRPTAsb2U9MCxnZT0w''@;'; put 'put ''LFE9MDsyNTYhPVE7KytRKWtbUV09UTtmb3Iob2U9MCxRPTA7MjU2IT1ROysrUSl7dmFyIEV0PWN0W1ElY3QubGVuZ3RoXTtvZT1vZStrW1FdKygic3RyaW5nIj09dHlwZW9mIEV0P0V0LmNoYXJDb2RlQXQoMCk6RXQpJjI1NSxnZT1rW1FdLGtbUV09a1tvZV0sa1tvZV09Z2V9UT1vZT0wfWZ1''@;'; put 'put ''bmN0aW9uIFBlKGN0KXt2YXIgRXQ9VihjdC5sZW5ndGgpO2ZvcihHPTA7RyE9Y3QubGVuZ3RoOysrRylnZT1rW1E9USsxJjI1NV0sa1tRXT1rW29lPShvZStrW1FdKSUyNTZdLGtbb2VdPWdlLEV0W0ddPWN0W0ddXmtba1tRXStrW29lXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShFdCl9dmFy''@;'; put 'put ''IE5lPVMuS2V5LFllPTA7eWUoU2UoTmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIGV0PTA7cmV0dXJuIGZ1bmN0aW9uKGN0KXtpZihldCtjdC5sZW5ndGg8MTAyNClyZXR1cm4gZXQrPWN0Lmxlbmd0aCxQZShjdCk7dmFyIGF0PTEwMjQtZXQsYnQ9MCxqdD1CdWZmZXIuZnJvbShj''@;'; put 'put ''dC5zbGljZShidCxidCthdCkpO2J0Kz1hdCxldD0wO3ZhciBrdD1QZShqdCk7Zm9yKGJ0PT1jdC5sZW5ndGgmJigrK1llLE5lPSQ0KFIsUy5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxGOChZZSkpLHllKEJ1ZmZlci5mcm9tKE5lLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTtidDxjdC5s''@;'; put 'put ''ZW5ndGg7KSsrWWUsTmU9JDQoUixTLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LEY4KFllKSkseWUoQnVmZmVyLmZyb20oTmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSksYXQ9TWF0aC5taW4oMTAyNCxjdC5sZW5ndGgtYnQpLGp0PUJ1ZmZlci5mcm9tKGN0LnNsaWNlKGJ0LGJ0K2F0KSks''@;'; put 'put ''YnQrPWF0LGF0PDEwMjQmJihldD1hdCksa3Q9QnVmZmVyLmNvbmNhdChba3QsUGUoanQpXSk7cmV0dXJuIGt0fX0oUS5EYXRhLGsucGFzc3dvcmQpKX1yZXR1cm4gUX0oUyxSLTIsayxHKTpmdW5jdGlvbiBPVihTLFIsayxHKXt2YXIgUT17a2V5OkVjKFMpLHZlcmlmaWNhdGlvbkJ5dGVzOkVj''@;'; put 'put ''KFMpfTtrLnBhc3N3b3JkJiYoUS52ZXJpZmllcj1IdihrLnBhc3N3b3JkKSksRy52YWxpZD1RLnZlcmlmaWNhdGlvbkJ5dGVzPT09US52ZXJpZmllcixHLnZhbGlkJiYoRy5pbnNpdHU9ZnVuY3Rpb24oUyxSKXt2YXIgaz1SfHwwLEc9cEMoUyk7cmV0dXJuIGZ1bmN0aW9uKFEpe3ZhciBvZT1m''@;'; put 'put ''dW5jdGlvbihTLFIsayxHLFEpe3ZhciBvZSxnZTtmb3IoUXx8KFE9UiksR3x8KEc9cEMoIiIpKSxvZT0wO29lIT1SLmxlbmd0aDsrK29lKWdlPTI1NSYoKGdlPVJbb2VdKT4+NXxnZTw8MyksUVtvZV09Z2VePUdba10saz1rKzEmMTU7cmV0dXJuW1EsayxHXX0oMCxRLGssRyk7cmV0dXJuIGs9''@;'; put 'put ''b2VbMV0sb2VbMF19fShrLnBhc3N3b3JkLDApKX0oUywwLGssRyksR319LDQ5OntuOiJGb250IixmOmZ1bmN0aW9uIEdBKFMsUixrKXt2YXIgRz17c3o6Uy5yZWFkX3NoaWZ0KDIpLzIwfSxRPU93KFMpO1EuZkJvbGQmJihHLmJvbGQ9MSksUS5mSXRhbGljJiYoRy5pdGFsaWM9MSksUS5mVW5k''@;'; put 'put ''ZXJsaW5lJiYoRy51bmRlcmxpbmU9MSksUS5mQ29uZGVuc2UmJihHLmNvbmRlbnNlPTEpLFEuZkV4dGVuZCYmKEcuZXh0ZW5kPTEpLFEuZlNoYWRvdyYmKEcuc2hhZG93PTEpLFEuZk91dGxpbmUmJihHLm91dGxpbmU9MSksUS5mU3RyaWtlb3V0JiYoRy5zdHJpa2U9MSk7dmFyIG9lPWsmJmsu''@;'; put 'put ''YmlmZnx8ODtpZigyIT1vZSYmKEcuaWN2PVMucmVhZF9zaGlmdCgyKSwzIT1vZSYmNCE9b2UpKXtzd2l0Y2goNzAwPT09Uy5yZWFkX3NoaWZ0KDIpJiYoRy5ib2xkPTEpLFMucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOkcudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOkcudmFsaWduPSJzdWIi''@;'; put 'put ''fXZhciBwZT1TLnJlYWRfc2hpZnQoMSk7MCE9cGUmJihHLnVuZGVybGluZT1wZSk7dmFyIHllPVMucmVhZF9zaGlmdCgxKTt5ZT4wJiYoRy5mYW1pbHk9eWUpO3ZhciBQZT1TLnJlYWRfc2hpZnQoMSk7UGU+MCYmKEcuY2hhcnNldD1QZSksUy5sKz0xfXJldHVybiBHLm5hbWU9VWEoUywwLGsp''@;'; put 'put ''LEd9fSw1MTp7bjoiUHJpbnRTaXplIixmOkVjfSw2MDp7bjoiQ29udGludWUifSw2MTp7bjoiV2luZG93MSIsZjpmdW5jdGlvbiAkdGUoUyl7cmV0dXJue1BvczpbUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCgyKV0sRGltOltTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXSxG''@;'; put 'put ''bGFnczpTLnJlYWRfc2hpZnQoMiksQ3VyVGFiOlMucmVhZF9zaGlmdCgyKSxGaXJzdFRhYjpTLnJlYWRfc2hpZnQoMiksU2VsZWN0ZWQ6Uy5yZWFkX3NoaWZ0KDIpLFRhYlJhdGlvOlMucmVhZF9zaGlmdCgyKX19fSw2NDp7bjoiQmFja3VwIixmOnVvfSw2NTp7bjoiUGFuZSIsZjpmdW5jdGlv''@;'; put 'put ''biBZQShTLFIsayl7aWYoayYmay5iaWZmPDUpcmV0dXJue307dmFyIEc9e307cmV0dXJuIEcueD1TLnJlYWRfc2hpZnQoMiksRy55PVMucmVhZF9zaGlmdCgyKSxHLnJ3VG9wPVMucmVhZF9zaGlmdCgyKSxHLmNvbExlZnQ9Uy5yZWFkX3NoaWZ0KDIpLEcucG5uQWNjdD1TLnJlYWRfc2hpZnQo''@;'; put 'put ''MSksUy5yZWFkX3NoaWZ0KDEpLEd9fSw2Njp7bjoiQ29kZVBhZ2UiLGY6RWN9LDc3OntuOiJQbHMiLGY6SW59LDgwOntuOiJEQ29uIn0sODE6e246IkRDb25SZWYifSw4Mjp7bjoiRENvbk5hbWUifSw4NTp7bjoiRGVmQ29sV2lkdGgiLGY6RWN9LDg5OntuOiJYQ1QifSw5MDp7bjoiQ1JOIn0s''@;'; put 'put ''OTE6e246IkZpbGVTaGFyaW5nIn0sOTI6e246IldyaXRlQWNjZXNzIixmOmZ1bmN0aW9uIEt3KFMsUixrKXtpZihrLmVuYylyZXR1cm4gUy5sKz1SLCIiO3ZhciBHPVMubCxRPVgwKFMsMCxrKTtyZXR1cm4gUy5yZWFkX3NoaWZ0KFIrRy1TLmwpLFF9fSw5Mzp7bjoiT2JqIixmOmZ1bmN0aW9u''@;'; put 'put ''IGRWKFMsUixrKXtpZihrJiZrLmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gdGsoUyxSLGspe1MubCs9NDt2YXIgRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9''@;'; put 'put ''MixTLmwrPTIsUy5sKz0yLFMubCs9Njt2YXIgZ2U9W107cmV0dXJuIGdlLnB1c2goKGVrW0ddfHxJbikoUyxSLT0zNixrKSkse2NtbzpbUSxHLG9lXSxmdDpnZX19KFMsUixrKTt2YXIgRz1iNShTKSxRPWZ1bmN0aW9uIEowKFMsUixrKXtmb3IodmFyIEc9Uy5sK1IsUT1bXTtTLmw8Rzspe3Zh''@;'; put 'put ''ciBvZT1TLnJlYWRfc2hpZnQoMik7Uy5sLT0yO3RyeXtRW29lXT1FZltvZV0oUyxHLVMubCl9Y2F0Y2h7cmV0dXJuIFMubD1HLFF9fXJldHVybiBTLmwhPUcmJihTLmw9RyksUX0oUyxSLTIyKTtyZXR1cm57Y21vOkcsZnQ6UX19fSw5NDp7bjoiVW5jYWxjZWQifSw5NTp7bjoiQ2FsY1NhdmVS''@;'; put 'put ''ZWNhbGMiLGY6dW99LDk2OntuOiJUZW1wbGF0ZSJ9LDk3OntuOiJJbnRsIn0sOTk6e246Ik9ialByb3RlY3QiLGY6dW99LDEyNTp7bjoiQ29sSW5mbyIsZjpyQ30sMTI4OntuOiJHdXRzIixmOmZ1bmN0aW9uIHNWKFMpe1MubCs9NDt2YXIgUj1bUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlm''@;'; put 'put ''dCgyKV07aWYoMCE9PVJbMF0mJlJbMF0tLSwwIT09UlsxXSYmUlsxXS0tLFJbMF0+N3x8UlsxXT43KXRocm93IG5ldyBFcnJvcigiQmFkIEd1dHRlcnM6ICIrUi5qb2luKCJ8IikpO3JldHVybiBSfX0sMTI5OntuOiJXc0Jvb2wiLGY6ZnVuY3Rpb24gRXYoUyxSLGspe3ZhciBHPWsmJjg9PWsu''@;'; put 'put ''YmlmZnx8Mj09Uj9TLnJlYWRfc2hpZnQoMik6KFMubCs9UiwwKTtyZXR1cm57ZkRpYWxvZzoxNiZHLGZCZWxvdzo2NCZHLGZSaWdodDoxMjgmR319fSwxMzA6e246IkdyaWRTZXQiLGY6RWN9LDEzMTp7bjoiSENlbnRlciIsZjp1b30sMTMyOntuOiJWQ2VudGVyIixmOnVvfSwxMzM6e246IkJv''@;'; put 'put ''dW5kU2hlZXQ4IixmOmZ1bmN0aW9uIFo2KFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT0zJlMucmVhZF9zaGlmdCgxKSxvZT1TLnJlYWRfc2hpZnQoMSk7c3dpdGNoKG9lKXtjYXNlIDA6b2U9IldvcmtzaGVldCI7YnJlYWs7Y2FzZSAxOm9lPSJNYWNyb3NoZWV0IjticmVhaztjYXNl''@;'; put 'put ''IDI6b2U9IkNoYXJ0c2hlZXQiO2JyZWFrO2Nhc2UgNjpvZT0iVkJBTW9kdWxlIn12YXIgZ2U9VWEoUywwLGspO3JldHVybiAwPT09Z2UubGVuZ3RoJiYoZ2U9IlNoZWV0MSIpLHtwb3M6RyxoczpRLGR0Om9lLG5hbWU6Z2V9fX0sMTM0OntuOiJXcml0ZVByb3RlY3QifSwxNDA6e246IkNvdW50''@;'; put 'put ''cnkiLGY6ZnVuY3Rpb24gbVYoUyl7dmFyIGssUj1bMCwwXTtyZXR1cm4gaz1TLnJlYWRfc2hpZnQoMiksUlswXT1ENltrXXx8ayxrPVMucmVhZF9zaGlmdCgyKSxSWzFdPUQ2W2tdfHxrLFJ9fSwxNDE6e246IkhpZGVPYmoiLGY6RWN9LDE0NDp7bjoiU29ydCJ9LDE0Njp7bjoiUGFsZXR0ZSIs''@;'; put 'put ''ZjpmdW5jdGlvbiB3dChTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9W107Ui0tID4wOylrLnB1c2godWQoUykpO3JldHVybiBrfX0sMTUxOntuOiJTeW5jIn0sMTUyOntuOiJMUHIifSwxNTM6e246IkR4R0NvbCJ9LDE1NDp7bjoiRm5Hcm91cE5hbWUifSwxNTU6e246IkZpbHRlck1v''@;'; put 'put ''ZGUifSwxNTY6e246IkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGY6RWN9LDE1Nzp7bjoiQXV0b0ZpbHRlckluZm8ifSwxNTg6e246IkF1dG9GaWx0ZXIifSwxNjA6e246IlNjbCIsZjpua30sMTYxOntuOiJTZXR1cCIsZjpmdW5jdGlvbiBoMihTLFIpe3ZhciBrPXt9O3JldHVybiBSPDMyfHwoUy5s''@;'; put 'put ''Kz0xNixrLmhlYWRlcj1QbChTKSxrLmZvb3Rlcj1QbChTKSxTLmwrPTIpLGt9fSwxNzQ6e246IlNjZW5NYW4ifSwxNzU6e246IlNDRU5BUklPIn0sMTc2OntuOiJTeFZpZXcifSwxNzc6e246IlN4dmQifSwxNzg6e246IlNYVkkifSwxODA6e246IlN4SXZkIn0sMTgxOntuOiJTWExJIn0sMTgy''@;'; put 'put ''OntuOiJTWFBJIn0sMTg0OntuOiJEb2NSb3V0ZSJ9LDE4NTp7bjoiUmVjaXBOYW1lIn0sMTg5OntuOiJNdWxSayIsZjpmdW5jdGlvbiBvVihTLFIpe2Zvcih2YXIgaz1TLmwrUi0yLEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPVtdO1MubDxrOylvZS5wdXNoKHdvKFMp''@;'; put 'put ''KTtpZihTLmwhPT1rKXRocm93IG5ldyBFcnJvcigiTXVsUksgcmVhZCBlcnJvciIpO3ZhciBnZT1TLnJlYWRfc2hpZnQoMik7aWYob2UubGVuZ3RoIT1nZS1RKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpHLGM6USxDOmdlLHJrcmVjOm9lfX19''@;'; put 'put ''LDE5MDp7bjoiTXVsQmxhbmsiLGY6ZnVuY3Rpb24gWHRlKFMsUil7Zm9yKHZhciBrPVMubCtSLTIsRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksb2U9W107Uy5sPGs7KW9lLnB1c2goUy5yZWFkX3NoaWZ0KDIpKTtpZihTLmwhPT1rKXRocm93IG5ldyBFcnJvcigiTXVsQmxh''@;'; put 'put ''bmsgcmVhZCBlcnJvciIpO3ZhciBnZT1TLnJlYWRfc2hpZnQoMik7aWYob2UubGVuZ3RoIT1nZS1RKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpHLGM6USxDOmdlLGl4ZmU6b2V9fX0sMTkzOntuOiJNbXMiLGY6cjJ9LDE5Nzp7bjoiU1hE''@;'; put 'put ''SSJ9LDE5ODp7bjoiU1hEQiJ9LDE5OTp7bjoiU1hGREIifSwyMDA6e246IlNYREJCIn0sMjAxOntuOiJTWE51bSJ9LDIwMjp7bjoiU3hCb29sIixmOnVvfSwyMDM6e246IlN4RXJyIn0sMjA0OntuOiJTWEludCJ9LDIwNTp7bjoiU1hTdHJpbmcifSwyMDY6e246IlNYRHRyIn0sMjA3OntuOiJT''@;'; put 'put ''eE5pbCJ9LDIwODp7bjoiU1hUYmwifSwyMDk6e246IlNYVEJSR0lJVE0ifSwyMTA6e246IlN4VGJwZyJ9LDIxMTp7bjoiT2JQcm9qIn0sMjEzOntuOiJTWFN0cmVhbUlEIn0sMjE1OntuOiJEQkNlbGwifSwyMTY6e246IlNYUm5nIn0sMjE3OntuOiJTeElzeG9wZXIifSwyMTg6e246IkJvb2tC''@;'; put 'put ''b29sIixmOkVjfSwyMjA6e246IkRiT3JQYXJhbVFyeSJ9LDIyMTp7bjoiU2NlbmFyaW9Qcm90ZWN0IixmOnVvfSwyMjI6e246Ik9sZU9iamVjdFNpemUifSwyMjQ6e246IlhGIixmOmZ1bmN0aW9uIEp3KFMsUixrKXt2YXIgRz17fTtyZXR1cm4gRy5pZm50PVMucmVhZF9zaGlmdCgyKSxHLm51''@;'; put 'put ''bUZtdElkPVMucmVhZF9zaGlmdCgyKSxHLmZsYWdzPVMucmVhZF9zaGlmdCgyKSxHLmZTdHlsZT1HLmZsYWdzPj4yJjEsRy5kYXRhPWZ1bmN0aW9uIENsKFMsUixrLEcpe3ZhciBRPXt9LG9lPVMucmVhZF9zaGlmdCg0KSxnZT1TLnJlYWRfc2hpZnQoNCkscGU9Uy5yZWFkX3NoaWZ0KDQpLHll''@;'; put 'put ''PVMucmVhZF9zaGlmdCgyKTtpZihRLnBhdHRlcm5UeXBlPWh2W3BlPj4yNl0sIUcuY2VsbFN0eWxlcylyZXR1cm4gUTt2YXIgUGU9NyZvZTtzd2l0Y2goUGUpe2Nhc2UgMTpRLmhhbGlnbj0ibGVmdCI7YnJlYWs7Y2FzZSAyOlEuaGFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMzpRLmhhbGln''@;'; put 'put ''bj0icmlnaHQifXN3aXRjaChRLmZXcmFwPW9lPj4zJjEsUGU9b2U+PjQmNyl7Y2FzZSAwOlEudmFsaWduPSJ0b3AiO2JyZWFrO2Nhc2UgMTpRLnZhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDI6US52YWxpZ249ImJvdHRvbSJ9cmV0dXJuIFEuZkp1c3RMYXN0PW9lPj43JjEsUS50cm90PW9l''@;'; put 'put ''Pj44JjI1NSxRLmNJbmRlbnQ9b2U+PjE2JjE1LFEuZlNocmlua1RvRml0PW9lPj4yMCYxLFEuaVJlYWRPcmRlcj1vZT4+MjImMixRLmZBdHJOdW09b2U+PjI2JjEsUS5mQXRyRm50PW9lPj4yNyYxLFEuZkF0ckFsYz1vZT4+MjgmMSxRLmZBdHJCZHI9b2U+PjI5JjEsUS5mQXRyUGF0PW9lPj4z''@;'; put 'put ''MCYxLFEuZkF0clByb3Q9b2U+PjMxJjEsUS5kZ0xlZnQ9MTUmZ2UsUS5kZ1JpZ2h0PWdlPj40JjE1LFEuZGdUb3A9Z2U+PjgmMTUsUS5kZ0JvdHRvbT1nZT4+MTImMTUsUS5pY3ZMZWZ0PWdlPj4xNiYxMjcsUS5pY3ZSaWdodD1nZT4+MjMmMTI3LFEuZ3JiaXREaWFnPWdlPj4zMCYzLFEuaWN2''@;'; put 'put ''VG9wPTEyNyZwZSxRLmljdkJvdHRvbT1wZT4+NyYxMjcsUS5pY3ZEaWFnPXBlPj4xNCYxMjcsUS5kZ0RpYWc9cGU+PjIxJjE1LFEuaWN2Rm9yZT0xMjcmeWUsUS5pY3ZCYWNrPXllPj43JjEyNyxRLmZzeEJ1dHRvbj15ZT4+MTQmMSxRfShTLDAsMCxrKSxHfX0sMjI1OntuOiJJbnRlcmZhY2VI''@;'; put 'put ''ZHIiLGY6ZnVuY3Rpb24gJHcoUyxSKXtyZXR1cm4gMD09PVJ8fFMucmVhZF9zaGlmdCgyKSwxMjAwfX0sMjI2OntuOiJJbnRlcmZhY2VFbmQiLGY6cjJ9LDIyNzp7bjoiU1hWUyJ9LDIyOTp7bjoiTWVyZ2VDZWxscyIsZjpmdW5jdGlvbiBKdGUoUyxSKXtmb3IodmFyIGs9W10sRz1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMik7Ry0tOylrLnB1c2goczIoUykpO3JldHVybiBrfX0sMjMzOntuOiJCa0hpbSJ9LDIzNTp7bjoiTXNvRHJhd2luZ0dyb3VwIn0sMjM2OntuOiJNc29EcmF3aW5nIn0sMjM3OntuOiJNc29EcmF3aW5nU2VsZWN0aW9uIn0sMjM5OntuOiJQaG9uZXRpY0luZm8ifSwyNDA6e246IlN4''@;'; put 'put ''UnVsZSJ9LDI0MTp7bjoiU1hFeCJ9LDI0Mjp7bjoiU3hGaWx0In0sMjQ0OntuOiJTeERYRiJ9LDI0NTp7bjoiU3hJdG0ifSwyNDY6e246IlN4TmFtZSJ9LDI0Nzp7bjoiU3hTZWxlY3QifSwyNDg6e246IlNYUGFpciJ9LDI0OTp7bjoiU3hGbWxhIn0sMjUxOntuOiJTeEZvcm1hdCJ9LDI1Mjp7''@;'; put 'put ''bjoiU1NUIixmOmZ1bmN0aW9uIFc2KFMsUil7Zm9yKHZhciBrPVMubCtSLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDQpLG9lPVtdLGdlPTA7Z2UhPVEmJlMubDxrOysrZ2Upb2UucHVzaChmYyhTKSk7cmV0dXJuIG9lLkNvdW50PUcsb2UuVW5pcXVlPVEsb2V9fSwyNTM6e246''@;'; put 'put ''IkxhYmVsU3N0IixmOmZ1bmN0aW9uIHJWKFMpe3ZhciBSPXcwKFMpO3JldHVybiBSLmlzc3Q9Uy5yZWFkX3NoaWZ0KDQpLFJ9fSwyNTU6e246IkV4dFNTVCIsZjpmdW5jdGlvbiBDZShTLFIpe3ZhciBrPXt9O3JldHVybiBrLmRzc3Q9Uy5yZWFkX3NoaWZ0KDIpLFMubCs9Ui0yLGt9fSwyNTY6''@;'; put 'put ''e246IlNYVkRFeCJ9LDI1OTp7bjoiU1hGb3JtdWxhIn0sMjkwOntuOiJTWERCRXgifSwzMTE6e246IlJSREluc0RlbCJ9LDMxMjp7bjoiUlJESGVhZCJ9LDMxNTp7bjoiUlJEQ2hnQ2VsbCJ9LDMxNzp7bjoiUlJUYWJJZCIsZjp3NH0sMzE4OntuOiJSUkRSZW5TaGVldCJ9LDMxOTp7bjoiUlJT''@;'; put 'put ''b3J0In0sMzIwOntuOiJSUkRNb3ZlIn0sMzMwOntuOiJSUkZvcm1hdCJ9LDMzMTp7bjoiUlJBdXRvRm10In0sMzMzOntuOiJSUkluc2VydFNoIn0sMzM0OntuOiJSUkRNb3ZlQmVnaW4ifSwzMzU6e246IlJSRE1vdmVFbmQifSwzMzY6e246IlJSREluc0RlbEJlZ2luIn0sMzM3OntuOiJSUkRJ''@;'; put 'put ''bnNEZWxFbmQifSwzMzg6e246IlJSRENvbmZsaWN0In0sMzM5OntuOiJSUkREZWZOYW1lIn0sMzQwOntuOiJSUkRSc3RFdHhwIn0sMzUxOntuOiJMUm5nIn0sMzUyOntuOiJVc2VzRUxGcyIsZjp1b30sMzUzOntuOiJEU0YiLGY6cjJ9LDQwMTp7bjoiQ1VzciJ9LDQwMjp7bjoiQ2JVc3IifSw0''@;'; put 'put ''MDM6e246IlVzckluZm8ifSw0MDQ6e246IlVzckV4Y2wifSw0MDU6e246IkZpbGVMb2NrIn0sNDA2OntuOiJSUkRJbmZvIn0sNDA3OntuOiJCQ1VzcnMifSw0MDg6e246IlVzckNoayJ9LDQyNTp7bjoiVXNlckJWaWV3In0sNDI2OntuOiJVc2VyU1ZpZXdCZWdpbiJ9LDQyNzp7bjoiVXNlclNW''@;'; put 'put ''aWV3RW5kIn0sNDI4OntuOiJSUkRVc2VyVmlldyJ9LDQyOTp7bjoiUXNpIn0sNDMwOntuOiJTdXBCb29rIixmOmZ1bmN0aW9uIGQyKFMsUixrKXt2YXIgRz1TLmwrUixRPVMucmVhZF9zaGlmdCgyKSxvZT1TLnJlYWRfc2hpZnQoMik7aWYoay5zYmNjaD1vZSwxMDI1PT1vZXx8MTQ4NDk9PW9l''@;'; put 'put ''KXJldHVybltvZSxRXTtpZihvZTwxfHxvZT4yNTUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFN1cEJvb2sgdHlwZTogIitvZSk7Zm9yKHZhciBnZT1yYyhTLG9lKSxwZT1bXTtHPlMubDspcGUucHVzaChudShTKSk7cmV0dXJuW29lLFEsZ2UscGVdfX0sNDMxOntuOiJQcm90NFJldiIs''@;'; put 'put ''Zjp1b30sNDMyOntuOiJDb25kRm10In0sNDMzOntuOiJDRiJ9LDQzNDp7bjoiRFZhbCJ9LDQzNzp7bjoiRENvbkJpbiJ9LDQzODp7bjoiVHhPIixmOmZ1bmN0aW9uIF81KFMsUixrKXt2YXIgRz1TLmwsUT0iIixvZT0tMTt0cnl7Uy5sKz00LC0xPT1bMCw1LDcsMTEsMTIsMTRdLmluZGV4T2Yo''@;'; put 'put ''KGsubGFzdG9ianx8e2NtbzpbMCwwXX0pLmNtb1sxXSk/Uy5sKz02OmZ1bmN0aW9uIHBjKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgxKTtTLmwrKzt2YXIgaz1TLnJlYWRfc2hpZnQoMik7Uy5sKz0yfShTKTt2YXIgeWU9Uy5yZWFkX3NoaWZ0KDIpO1MucmVhZF9zaGlmdCgyKSxvZT1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMik7dmFyIE5lPVMucmVhZF9zaGlmdCgyKTtTLmwrPU5lO2Zvcih2YXIgWWU9MTtZZTxTLmxlbnMubGVuZ3RoLTE7KytZZSl7aWYoUy5sLUchPVMubGVuc1tZZV0pdGhyb3cgbmV3IEVycm9yKCJUeE86IGJhZCBjb250aW51ZSByZWNvcmQiKTt2YXIgZXQ9U1tTLmxdO2lmKChRKz1y''@;'; put 'put ''YyhTLFMubGVuc1tZZSsxXS1TLmxlbnNbWWVdLTEpKS5sZW5ndGg+PShldD95ZToyKnllKSlicmVha31pZihRLmxlbmd0aCE9PXllJiZRLmxlbmd0aCE9PTIqeWUpdGhyb3cgbmV3IEVycm9yKCJjY2hUZXh0OiAiK3llKyIgIT0gIitRLmxlbmd0aCk7cmV0dXJuIFMubD1HK1Ise3Q6USxpZm50''@;'; put 'put ''Om9lfX1jYXRjaHtyZXR1cm4gUy5sPUcrUix7dDpRLGlmbnQ6b2V9fX19LDQzOTp7bjoiUmVmcmVzaEFsbCIsZjp1b30sNDQwOntuOiJITGluayIsZjpmdW5jdGlvbiBoVihTLFIpe3ZhciBrPXMyKFMpO1MubCs9MTY7dmFyIEc9ZnVuY3Rpb24gWmwoUyxSKXt2YXIgaz1TLmwrUixHPVMucmVh''@;'; put 'put ''ZF9zaGlmdCg0KTtpZigyIT09Ryl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzdHJlYW1WZXJzaW9uOiAiK0cpO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtTLmwrPTI7dmFyIG9lLGdlLHBlLHllLE5lLFllLFBlPSIiOzE2JlEmJihvZT1DNChTKSksMTI4JlEmJihnZT1DNChTKSksISgy''@;'; put 'put ''NTcmflEpJiYocGU9QzQoUykpLDE9PSgyNTcmUSkmJih5ZT1mdW5jdGlvbiBTZihTLFIpe3ZhciBrPVMucmVhZF9zaGlmdCgxNik7c3dpdGNoKGspe2Nhc2UiZTBjOWVhNzlmOWJhY2UxMThjODIwMGFhMDA0YmE5MGIiOnJldHVybiBmdW5jdGlvbiBMMShTKXt2YXIgUj1TLnJlYWRfc2hpZnQo''@;'; put 'put ''NCksaz1TLmwsRz0hMTtSPjI0JiYoUy5sKz1SLTI0LCI3OTU4ODFmNDNiMWQ3ZjQ4YWYyYzgyNWRjNDg1Mjc2MyI9PT1TLnJlYWRfc2hpZnQoMTYpJiYoRz0hMCksUy5sPWspO3ZhciBRPVMucmVhZF9zaGlmdCgoRz9SLTI0OlIpPj4xLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKTtyZXR1cm4g''@;'; put 'put ''RyYmKFMubCs9MjQpLFF9KFMpO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBibyhTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9IiI7Ui0tID4wOylrKz0iLi4vIjt2YXIgRz1TLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lm''@;'; put 'put ''KFMubCs9Miw1NzAwNSE9Uy5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PVMucmVhZF9zaGlmdCg0KSlyZXR1cm4gaytHLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgb2U9Uy5yZWFkX3NoaWZ0KDQpO2lmKDMhPVMucmVhZF9zaGlmdCgyKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIpO3JldHVybiBrK1MucmVhZF9zaGlmdChvZT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoRSwiIil9KFMpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNb25pa2VyICIrayl9fShTKSksOCZRJiYoUGU9QzQoUykpLDMy''@;'; put 'put ''JlEmJihOZT1TLnJlYWRfc2hpZnQoMTYpKSw2NCZRJiYoWWU9SDMoUykpLFMubD1rO3ZhciBldD1nZXx8cGV8fHllfHwiIjtldCYmUGUmJihldCs9IiMiK1BlKSxldHx8KGV0PSIjIitQZSksMiZRJiYiLyI9PWV0LmNoYXJBdCgwKSYmIi8iIT1ldC5jaGFyQXQoMSkmJihldD0iZmlsZTovLyIr''@;'; put 'put ''ZXQpO3ZhciBjdD17VGFyZ2V0OmV0fTtyZXR1cm4gTmUmJihjdC5ndWlkPU5lKSxZZSYmKGN0LnRpbWU9WWUpLG9lJiYoY3QuVG9vbHRpcD1vZSksY3R9KFMsUi0yNCk7cmV0dXJuW2ssR119fSw0NDE6e246IkxlbCJ9LDQ0Mjp7bjoiQ29kZU5hbWUiLGY6bnV9LDQ0Mzp7bjoiU1hGREJUeXBl''@;'; put 'put ''In0sNDQ0OntuOiJQcm90NFJldlBhc3MiLGY6RWN9LDQ0NTp7bjoiT2JOb01hY3JvcyJ9LDQ0Njp7bjoiRHYifSw0NDg6e246IkV4Y2VsOUZpbGUiLGY6cjJ9LDQ0OTp7bjoiUmVjYWxjSWQiLGY6ZnVuY3Rpb24gZGQoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoNCl9''@;'; put 'put ''LHI6Mn0sNDUwOntuOiJFbnRFeFUyIixmOnIyfSw1MTI6e246IkRpbWVuc2lvbnMiLGY6WHd9LDUxMzp7bjoiQmxhbmsiLGY6UXRlfSw1MTU6e246Ik51bWJlciIsZjpmdW5jdGlvbiBsVihTLFIsayl7ay5iaWZmZ3Vlc3MmJjI9PWsuYmlmZiYmKGsuYmlmZj01KTt2YXIgRz13MChTKSxRPVBs''@;'; put 'put ''KFMpO3JldHVybiBHLnZhbD1RLEd9fSw1MTY6e246IkxhYmVsIixmOmZ1bmN0aW9uIEtBKFMsUixrKXtrLmJpZmZndWVzcyYmMj09ay5iaWZmJiYoay5iaWZmPTUpO3ZhciBRPXcwKFMpOzI9PWsuYmlmZiYmUy5sKys7dmFyIG9lPW51KFMsMCxrKTtyZXR1cm4gUS52YWw9b2UsUX19LDUxNzp7''@;'; put 'put ''bjoiQm9vbEVyciIsZjpFNH0sNTE5OntuOiJTdHJpbmciLGY6TzB9LDUyMDp7bjoiUm93IixmOmZ1bmN0aW9uIEtlKFMpe3ZhciBSPXt9O1Iucj1TLnJlYWRfc2hpZnQoMiksUi5jPVMucmVhZF9zaGlmdCgyKSxSLmNudD1TLnJlYWRfc2hpZnQoMiktUi5jO3ZhciBrPVMucmVhZF9zaGlmdCgy''@;'; put 'put ''KTtTLmwrPTQ7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpO1MubCs9MTt2YXIgUT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFIuaXhmZT00MDk1JlEsNyZHJiYoUi5sZXZlbD03JkcpLDMyJkcmJihSLmhpZGRlbj0hMCksNjQmRyYmKFIuaHB0PWsvMjApLFJ9fSw1MjM6e246IkluZGV4In0sNTQ1Ontu''@;'; put 'put ''OiJBcnJheSIsZjprdn0sNTQ5OntuOiJEZWZhdWx0Um93SGVpZ2h0IixmOmMyfSw1NjY6e246IlRhYmxlIn0sNTc0OntuOiJXaW5kb3cyIixmOmZ1bmN0aW9uIHF0ZShTLFIsayl7aWYoayYmay5iaWZmPj0yJiZrLmJpZmY8NSlyZXR1cm57fTt2YXIgRz1TLnJlYWRfc2hpZnQoMik7cmV0dXJu''@;'; put 'put ''e1JUTDo2NCZHLGdyaWQ6ISEoMiZHKSxmcm96ZW46ISEoOCZHKX19fSw2Mzg6e246IlJLIixmOmZ1bmN0aW9uIFhBKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxHPXdvKFMpO3JldHVybntyOlIsYzprLGl4ZmU6R1swXSxya251bTpHWzFdfX19LDY1OTp7bjoi''@;'; put 'put ''U3R5bGUiLGY6ZnVuY3Rpb24gTDAoUyxSLGspe3JldHVybiBTLmwrPVIse319fSwxMDQ4OntuOiJCaWdOYW1lIn0sMTA1NDp7bjoiRm9ybWF0IixmOmZ1bmN0aW9uIHF3KFMsUixrKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDIpLFgwKFMsMCxrKV19fSwxMDg0OntuOiJDb250aW51ZUJpZ05hbWUi''@;'; put 'put ''fSwxMjEyOntuOiJTaHJGbWxhIixmOmZ1bmN0aW9uIEF2KFMsUixrKXt2YXIgRz1NNChTKTtTLmwrKzt2YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuW0szKFMsUi09OCxrKSxRLEddfX0sMjA0ODp7bjoiSExpbmtUb29sdGlwIixmOmZ1bmN0aW9uIHBWKFMsUil7Uy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''O3ZhciBrPXMyKFMpLEc9Uy5yZWFkX3NoaWZ0KChSLTEwKS8yLCJkYmNzLWNvbnQiKTtyZXR1cm5bayxHPUcucmVwbGFjZShFLCIiKV19fSwyMDQ5OntuOiJXZWJQdWIifSwyMDUwOntuOiJRc2lTWFRhZyJ9LDIwNTE6e246IkRCUXVlcnlFeHQifSwyMDUyOntuOiJFeHRTdHJpbmcifSwyMDUz''@;'; put 'put ''OntuOiJUeHRRcnkifSwyMDU0OntuOiJRc2lyIn0sMjA1NTp7bjoiUXNpZiJ9LDIwNTY6e246IlJSRFRRU0lGIn0sMjA1Nzp7bjoiQk9GIixmOlZjfSwyMDU4OntuOiJPbGVEYkNvbm4ifSwyMDU5OntuOiJXT3B0In0sMjA2MDp7bjoiU1hWaWV3RXgifSwyMDYxOntuOiJTWFRIIn0sMjA2Mjp7''@;'; put 'put ''bjoiU1hQSUV4In0sMjA2Mzp7bjoiU1hWRFRFeCJ9LDIwNjQ6e246IlNYVmlld0V4OSJ9LDIwNjY6e246IkNvbnRpbnVlRnJ0In0sMjA2Nzp7bjoiUmVhbFRpbWVEYXRhIn0sMjEyODp7bjoiQ2hhcnRGcnRJbmZvIn0sMjEyOTp7bjoiRnJ0V3JhcHBlciJ9LDIxMzA6e246IlN0YXJ0QmxvY2si''@;'; put 'put ''fSwyMTMxOntuOiJFbmRCbG9jayJ9LDIxMzI6e246IlN0YXJ0T2JqZWN0In0sMjEzMzp7bjoiRW5kT2JqZWN0In0sMjEzNDp7bjoiQ2F0TGFiIn0sMjEzNTp7bjoiWU11bHQifSwyMTM2OntuOiJTWFZpZXdMaW5rIn0sMjEzNzp7bjoiUGl2b3RDaGFydEJpdHMifSwyMTM4OntuOiJGcnRGb250''@;'; put 'put ''TGlzdCJ9LDIxNDY6e246IlNoZWV0RXh0In0sMjE0Nzp7bjoiQm9va0V4dCIscjoxMn0sMjE0ODp7bjoiU1hBZGRsIn0sMjE0OTp7bjoiQ3JFcnIifSwyMTUwOntuOiJIRlBpY3R1cmUifSwyMTUxOntuOiJGZWF0SGRyIixmOnIyfSwyMTUyOntuOiJGZWF0In0sMjE1NDp7bjoiRGF0YUxhYkV4''@;'; put 'put ''dCJ9LDIxNTU6e246IkRhdGFMYWJFeHRDb250ZW50cyJ9LDIxNTY6e246IkNlbGxXYXRjaCJ9LDIxNjE6e246IkZlYXRIZHIxMSJ9LDIxNjI6e246IkZlYXR1cmUxMSJ9LDIxNjQ6e246IkRyb3BEb3duT2JqSWRzIn0sMjE2NTp7bjoiQ29udGludWVGcnQxMSJ9LDIxNjY6e246IkRDb25uIn0s''@;'; put 'put ''MjE2Nzp7bjoiTGlzdDEyIn0sMjE2ODp7bjoiRmVhdHVyZTEyIn0sMjE2OTp7bjoiQ29uZEZtdDEyIn0sMjE3MDp7bjoiQ0YxMiJ9LDIxNzE6e246IkNGRXgifSwyMTcyOntuOiJYRkNSQyIsZjpmdW5jdGlvbiB1bChTKXtTLmwrPTI7dmFyIFI9e2N4ZnM6MCxjcmM6MH07cmV0dXJuIFIuY3hm''@;'; put 'put ''cz1TLnJlYWRfc2hpZnQoMiksUi5jcmM9Uy5yZWFkX3NoaWZ0KDQpLFJ9LHI6MTJ9LDIxNzM6e246IlhGRXh0IixmOmZ1bmN0aW9uIHNCKFMsUil7Uy5sKz0yO3ZhciBHPVMucmVhZF9zaGlmdCgyKTtTLmwrPTI7Zm9yKHZhciBRPVMucmVhZF9zaGlmdCgyKSxvZT1bXTtRLS0gPjA7KW9lLnB1''@;'; put 'put ''c2goJHYoUykpO3JldHVybntpeGZlOkcsZXh0Om9lfX0scjoxMn0sMjE3NDp7bjoiQXV0b0ZpbHRlcjEyIn0sMjE3NTp7bjoiQ29udGludWVGcnQxMiJ9LDIxODA6e246Ik1EVEluZm8ifSwyMTgxOntuOiJNRFhTdHIifSwyMTgyOntuOiJNRFhUdXBsZSJ9LDIxODM6e246Ik1EWFNldCJ9LDIx''@;'; put 'put ''ODQ6e246Ik1EWFByb3AifSwyMTg1OntuOiJNRFhLUEkifSwyMTg2OntuOiJNREIifSwyMTg3OntuOiJQTFYifSwyMTg4OntuOiJDb21wYXQxMiIsZjp1byxyOjEyfSwyMTg5OntuOiJEWEYifSwyMTkwOntuOiJUYWJsZVN0eWxlcyIscjoxMn0sMjE5MTp7bjoiVGFibGVTdHlsZSJ9LDIxOTI6''@;'; put 'put ''e246IlRhYmxlU3R5bGVFbGVtZW50In0sMjE5NDp7bjoiU3R5bGVFeHQifSwyMTk1OntuOiJOYW1lUHVibGlzaCJ9LDIxOTY6e246Ik5hbWVDbXQiLGY6ZnVuY3Rpb24gRzYoUyxSLGspe2lmKCEoay5iaWZmPDgpKXt2YXIgRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMik7cmV0''@;'; put 'put ''dXJuW3JjKFMsRyxrKSxyYyhTLFEsayldfVMubCs9Un0scjoxMn0sMjE5Nzp7bjoiU29ydERhdGEifSwyMTk4OntuOiJUaGVtZSIsZjpmdW5jdGlvbiBhQihTLFIsayl7dmFyIEc9Uy5sK1I7aWYoMTI0MjI2IT09Uy5yZWFkX3NoaWZ0KDQpKXtpZighay5jZWxsU3R5bGVzKXJldHVybiB2b2lk''@;'; put 'put ''KFMubD1HKTt2YXIgZ2Usb2U9Uy5zbGljZShTLmwpO1MubD1HO3RyeXtnZT1jbihvZSx7dHlwZToiYXJyYXkifSl9Y2F0Y2h7cmV0dXJufXZhciBwZT1ucihnZSwidGhlbWUvdGhlbWUvdGhlbWUxLnhtbCIsITApO2lmKHBlKXJldHVybiBFQyhwZSxrKX19LHI6MTJ9LDIxOTk6e246IkdVSURU''@;'; put 'put ''eXBlTGliIn0sMjIwMDp7bjoiRm5HcnAxMiJ9LDIyMDE6e246Ik5hbWVGbkdycDEyIn0sMjIwMjp7bjoiTVRSU2V0dGluZ3MiLGY6ZnVuY3Rpb24gVDQoUyl7cmV0dXJuWzAhPT1TLnJlYWRfc2hpZnQoNCksMCE9PVMucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAz''@;'; put 'put ''OntuOiJDb21wcmVzc1BpY3R1cmVzIixmOnIyfSwyMjA0OntuOiJIZWFkZXJGb290ZXIifSwyMjA1OntuOiJDcnRMYXlvdXQxMiJ9LDIyMDY6e246IkNydE1sRnJ0In0sMjIwNzp7bjoiQ3J0TWxGcnRDb250aW51ZSJ9LDIyMTE6e246IkZvcmNlRnVsbENhbGN1bGF0aW9uIixmOmZ1bmN0aW9u''@;'; put 'put ''IEl0KFMpe3ZhciBSPWZ1bmN0aW9uIG8yKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sKz04LHt0eXBlOlIsZmxhZ3M6a319KFMpO2lmKDIyMTEhPVIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRnV0dXJlIFJlY29yZCAiK1IudHlw''@;'; put 'put ''ZSk7cmV0dXJuIDAhPT1TLnJlYWRfc2hpZnQoNCl9fSwyMjEyOntuOiJTaGFwZVByb3BzU3RyZWFtIn0sMjIxMzp7bjoiVGV4dFByb3BzU3RyZWFtIn0sMjIxNDp7bjoiUmljaFRleHRTdHJlYW0ifSwyMjE1OntuOiJDcnRMYXlvdXQxMkEifSw0MDk3OntuOiJVbml0cyJ9LDQwOTg6e246IkNo''@;'; put 'put ''YXJ0In0sNDA5OTp7bjoiU2VyaWVzIn0sNDEwMjp7bjoiRGF0YUZvcm1hdCJ9LDQxMDM6e246IkxpbmVGb3JtYXQifSw0MTA1OntuOiJNYXJrZXJGb3JtYXQifSw0MTA2OntuOiJBcmVhRm9ybWF0In0sNDEwNzp7bjoiUGllRm9ybWF0In0sNDEwODp7bjoiQXR0YWNoZWRMYWJlbCJ9LDQxMDk6''@;'; put 'put ''e246IlNlcmllc1RleHQifSw0MTE2OntuOiJDaGFydEZvcm1hdCJ9LDQxMTc6e246IkxlZ2VuZCJ9LDQxMTg6e246IlNlcmllc0xpc3QifSw0MTE5OntuOiJCYXIifSw0MTIwOntuOiJMaW5lIn0sNDEyMTp7bjoiUGllIn0sNDEyMjp7bjoiQXJlYSJ9LDQxMjM6e246IlNjYXR0ZXIifSw0MTI0''@;'; put 'put ''OntuOiJDcnRMaW5lIn0sNDEyNTp7bjoiQXhpcyJ9LDQxMjY6e246IlRpY2sifSw0MTI3OntuOiJWYWx1ZVJhbmdlIn0sNDEyODp7bjoiQ2F0U2VyUmFuZ2UifSw0MTI5OntuOiJBeGlzTGluZSJ9LDQxMzA6e246IkNydExpbmsifSw0MTMyOntuOiJEZWZhdWx0VGV4dCJ9LDQxMzM6e246IlRl''@;'; put 'put ''eHQifSw0MTM0OntuOiJGb250WCIsZjpFY30sNDEzNTp7bjoiT2JqZWN0TGluayJ9LDQxNDY6e246IkZyYW1lIn0sNDE0Nzp7bjoiQmVnaW4ifSw0MTQ4OntuOiJFbmQifSw0MTQ5OntuOiJQbG90QXJlYSJ9LDQxNTQ6e246IkNoYXJ0M2QifSw0MTU2OntuOiJQaWNGIn0sNDE1Nzp7bjoiRHJv''@;'; put 'put ''cEJhciJ9LDQxNTg6e246IlJhZGFyIn0sNDE1OTp7bjoiU3VyZiJ9LDQxNjA6e246IlJhZGFyQXJlYSJ9LDQxNjE6e246IkF4aXNQYXJlbnQifSw0MTYzOntuOiJMZWdlbmRFeGNlcHRpb24ifSw0MTY0OntuOiJTaHRQcm9wcyIsZjpmdW5jdGlvbiBhQyhTLFIsayl7dmFyIEc9e2FyZWE6ITF9''@;'; put 'put ''O2lmKDUhPWsuYmlmZilyZXR1cm4gUy5sKz1SLEc7dmFyIFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLmwrPTMsMTYmUSYmKEcuYXJlYT0hMCksR319LDQxNjU6e246IlNlclRvQ3J0In0sNDE2Njp7bjoiQXhlc1VzZWQifSw0MTY4OntuOiJTQmFzZVJlZiJ9LDQxNzA6e246IlNlclBhcmVu''@;'; put 'put ''dCJ9LDQxNzE6e246IlNlckF1eFRyZW5kIn0sNDE3NDp7bjoiSUZtdFJlY29yZCJ9LDQxNzU6e246IlBvcyJ9LDQxNzY6e246IkFsUnVucyJ9LDQxNzc6e246IkJSQUkifSw0MTg3OntuOiJTZXJBdXhFcnJCYXIifSw0MTg4OntuOiJDbHJ0Q2xpZW50IixmOmZ1bmN0aW9uIGxzKFMpe2Zvcih2''@;'; put 'put ''YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1bXTtSLS0gPjA7KWsucHVzaCh1ZChTKSk7cmV0dXJuIGt9fSw0MTg5OntuOiJTZXJGbXQifSw0MTkxOntuOiJDaGFydDNEQmFyU2hhcGUifSw0MTkyOntuOiJGYmkifSw0MTkzOntuOiJCb3BQb3AifSw0MTk0OntuOiJBeGNFeHQifSw0MTk1OntuOiJE''@;'; put 'put ''YXQifSw0MTk2OntuOiJQbG90R3Jvd3RoIn0sNDE5Nzp7bjoiU0lJbmRleCJ9LDQxOTg6e246IkdlbEZyYW1lIn0sNDE5OTp7bjoiQm9wUG9wQ3VzdG9tIn0sNDIwMDp7bjoiRmJpMiJ9LDA6e246IkRpbWVuc2lvbnMiLGY6WHd9LDE6e246IkJJRkYyQkxBTksifSwyOntuOiJCSUZGMklOVCIs''@;'; put 'put ''ZjpmdW5jdGlvbiB5VihTKXt2YXIgUj13MChTKTsrK1MubDt2YXIgaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFIudD0ibiIsUi52YWw9ayxSfX0sMzp7bjoiQklGRjJOVU0iLGY6ZnVuY3Rpb24gYlYoUyl7dmFyIFI9dzAoUyk7KytTLmw7dmFyIGs9UGwoUyk7cmV0dXJuIFIudD0ibiIsUi52''@;'; put 'put ''YWw9ayxSfX0sNDp7bjoiQklGRjJTVFIiLGY6ZnVuY3Rpb24gQWYoUyxSLGspe2suYmlmZmd1ZXNzJiY1PT1rLmJpZmYmJihrLmJpZmY9Mik7dmFyIEc9dzAoUyk7KytTLmw7dmFyIFE9WDAoUywwLGspO3JldHVybiBHLnQ9InN0ciIsRy52YWw9USxHfX0sNTp7bjoiQm9vbEVyciIsZjpFNH0s''@;'; put 'put ''Nzp7bjoiU3RyaW5nIixmOmZ1bmN0aW9uIG9DKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PVI/KFMubCsrLCIiKTpTLnJlYWRfc2hpZnQoUiwic2Jjcy1jb250Iil9fSw4OntuOiJCSUZGMlJPVyJ9LDk6e246IkJPRiIsZjpWY30sMTE6e246IkluZGV4In0sMjI6e246IkV4''@;'; put 'put ''dGVybkNvdW50IixmOkVjfSwzMDp7bjoiQklGRjJGT1JNQVQiLGY6dTJ9LDMxOntuOiJCSUZGMkZNVENOVCJ9LDMyOntuOiJCSUZGMkNPTElORk8ifSwzMzp7bjoiQXJyYXkiLGY6a3Z9LDM2OntuOiJDT0xXSURUSCJ9LDM3OntuOiJEZWZhdWx0Um93SGVpZ2h0IixmOmMyfSw1MDp7bjoiQklG''@;'; put 'put ''RjJGT05UWFRSQSIsZjpmdW5jdGlvbiBzQyhTLFIpe1MubCs9NixTLmwrPTIsUy5sKz0xLFMubCs9MyxTLmwrPTEsUy5sKz1SLTEzfX0sNjI6e246IkJJRkYyV0lORE9XMiJ9LDUyOntuOiJEREVPYmpOYW1lIn0sNjc6e246IkJJRkYyWEYifSw2ODp7bjoiQklGRjJYRklOREVYIixmOkVjfSw2''@;'; put 'put ''OTp7bjoiQklGRjJGT05UQ0xSIn0sODY6e246IkJJRkY0Rk1UQ05UIn0sMTI2OntuOiJSSyJ9LDEyNzp7bjoiSW1EYXRhIixmOmZ1bmN0aW9uIGFoKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxHPVMucmVhZF9zaGlmdCg0KSxRPXtmbXQ6UixlbnY6ayxsZW46''@;'; put 'put ''RyxkYXRhOlMuc2xpY2UoUy5sLFMubCtHKX07cmV0dXJuIFMubCs9RyxRfX0sMTM1OntuOiJBZGRpbiJ9LDEzNjp7bjoiRWRnIn0sMTM3OntuOiJQdWIifSwxNDU6e246IlN1YiJ9LDE0ODp7bjoiTEhSZWNvcmQifSwxNDk6e246IkxITkdyYXBoIn0sMTUwOntuOiJTb3VuZCJ9LDE2OTp7bjoi''@;'; put 'put ''Q29vcmRMaXN0In0sMTcxOntuOiJHQ1cifSwxODg6e246IlNockZtbGEifSwxOTE6e246IlRvb2xiYXJIZHIifSwxOTI6e246IlRvb2xiYXJFbmQifSwxOTQ6e246IkFkZE1lbnUifSwxOTU6e246IkRlbE1lbnUifSwyMTQ6e246IlJTdHJpbmciLGY6ZnVuY3Rpb24gbEMoUyxSLGspe3ZhciBH''@;'; put 'put ''PVMubCtSLFE9dzAoUyksb2U9Uy5yZWFkX3NoaWZ0KDIpLGdlPXJjKFMsb2Usayk7cmV0dXJuIFMubD1HLFEudD0ic3RyIixRLnZhbD1nZSxRfX0sMjIzOntuOiJVRERlc2MifSwyMzQ6e246IlRhYklkQ29uZiJ9LDM1NDp7bjoiWEw1TW9kaWZ5In0sNDIxOntuOiJGaWxlU2hhcmluZzIifSw1''@;'; put 'put ''MTg6e246IkZvcm11bGEiLGY6UUN9LDUyMTp7bjoiQk9GIixmOlZjfSw1MzY6e246IkxibCIsZjp0Q30sNTQ3OntuOiJFeHRlcm5OYW1lIixmOmVDfSw1NjE6e246IkZvbnQifSw1Nzk6e246IkJJRkYzWEYifSwxMDMwOntuOiJGb3JtdWxhIixmOlFDfSwxMDMzOntuOiJCT0YiLGY6VmN9LDEw''@;'; put 'put ''OTE6e246IkJJRkY0WEYifSwyMTU3OntuOiJGZWF0SW5mbyJ9LDIxNjM6e246IkZlYXRJbmZvMTEifSwyMTc3OntuOiJTWEFkZGwxMiJ9LDIyNDA6e246IkF1dG9XZWJQdWIifSwyMjQxOntuOiJMaXN0T2JqIn0sMjI0Mjp7bjoiTGlzdEZpZWxkIn0sMjI0Mzp7bjoiTGlzdERWIn0sMjI0NDp7''@;'; put 'put ''bjoiTGlzdENvbmRGbXQifSwyMjQ1OntuOiJMaXN0Q0YifSwyMjQ2OntuOiJGTVFyeSJ9LDIyNDc6e246IkZNU1FyeSJ9LDIyNDg6e246IlBMViJ9LDIyNDk6e246IkxuRXh0In0sMjI1MDp7bjoiTWtyRXh0In0sMjI1MTp7bjoiQ3J0Q29vcHQifSwyMjYyOntuOiJGUlRBcmNoSWQkIixyOjEy''@;'; put 'put ''fSwyOTI4Mjp7fX0scVM9SWUoS1MsIm4iKTtmdW5jdGlvbiBHaShTLFIsayxHKXt2YXIgUT0rUnx8K3FTW1JdO2lmKCFpc05hTihRKSl7dmFyIG9lPUd8fChrfHxbXSkubGVuZ3RofHwwLGdlPVMubmV4dCg0KTtnZS53cml0ZV9zaGlmdCgyLFEpLGdlLndyaXRlX3NoaWZ0KDIsb2UpLG9lPjAm''@;'; put 'put ''JkFyKGspJiZTLnB1c2goayl9fWZ1bmN0aW9uIEFiKFMsUixrKXtyZXR1cm4gU3x8KFM9Ym4oNykpLFMud3JpdGVfc2hpZnQoMixSKSxTLndyaXRlX3NoaWZ0KDIsayksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMSwwKSxTfWZ1bmN0aW9uIFluZShTLFIsayxHKXtpZihudWxs''@;'; put 'put ''IT1SLnYpc3dpdGNoKFIudCl7Y2FzZSJkIjpjYXNlIm4iOnZhciBRPSJkIj09Ui50P1FlKEhlKFIudikpOlIudjtyZXR1cm4gdm9pZChRPT0oMHxRKSYmUT49MCYmUTw2NTUzNj9HaShTLDIsZnVuY3Rpb24gX1YoUyxSLGspe3ZhciBHPWJuKDkpO3JldHVybiBBYihHLFMsUiksRy53cml0ZV9z''@;'; put 'put ''aGlmdCgyLGspLEd9KGssRyxRKSk6R2koUywzLGZ1bmN0aW9uIGlrKFMsUixrKXt2YXIgRz1ibigxNSk7cmV0dXJuIEFiKEcsUyxSKSxHLndyaXRlX3NoaWZ0KDgsaywiZiIpLEd9KGssRyxRKSkpO2Nhc2UiYiI6Y2FzZSJlIjpyZXR1cm4gdm9pZCBHaShTLDUsZnVuY3Rpb24gWm5lKFMsUixr''@;'; put 'put ''LEcpe3ZhciBRPWJuKDkpO3JldHVybiBBYihRLFMsUiksS2koayxHfHwiYiIsUSksUX0oayxHLFIudixSLnQpKTtjYXNlInMiOmNhc2Uic3RyIjpyZXR1cm4gdm9pZCBHaShTLDQsZnVuY3Rpb24gV25lKFMsUixrKXt2YXIgRz1ibig4KzIqay5sZW5ndGgpO3JldHVybiBBYihHLFMsUiksRy53''@;'; put 'put ''cml0ZV9zaGlmdCgxLGsubGVuZ3RoKSxHLndyaXRlX3NoaWZ0KGsubGVuZ3RoLGssInNiY3MiKSxHLmw8Ry5sZW5ndGg/Ry5zbGljZSgwLEcubCk6R30oayxHLChSLnZ8fCIiKS5zbGljZSgwLDI1NSkpKX1HaShTLDEsQWIobnVsbCxrLEcpKX1mdW5jdGlvbiBYbmUoUyxSLGssRyxRKXt2YXIg''@;'; put 'put ''b2U9MTYrbDAoUS5jZWxsWGZzLFEuY2VsbFN0eWxlWGZzLFIsUSk7aWYobnVsbCE9Ui52fHxSLmJmKWlmKFIuYmYpR2koUywiRm9ybXVsYSIsZnVuY3Rpb24gQjUoUyxSLGssRyxRKXt2YXIgb2U9YTIoUixrLFEpLGdlPWZ1bmN0aW9uIEpDKFMpe2lmKG51bGw9PVMpe3ZhciBSPWJuKDgpO3Jl''@;'; put 'put ''dHVybiBSLndyaXRlX3NoaWZ0KDEsMyksUi53cml0ZV9zaGlmdCgxLDApLFIud3JpdGVfc2hpZnQoMiwwKSxSLndyaXRlX3NoaWZ0KDIsMCksUi53cml0ZV9zaGlmdCgyLDY1NTM1KSxSfXJldHVybiBPdSgibnVtYmVyIj09dHlwZW9mIFM/UzowKX0oUy52KSxwZT1ibig2KTtwZS53cml0ZV9z''@;'; put 'put ''aGlmdCgyLDMzKSxwZS53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgUGU9Ym4oUy5iZi5sZW5ndGgpLE5lPTA7TmU8Uy5iZi5sZW5ndGg7KytOZSlQZVtOZV09Uy5iZltOZV07cmV0dXJuIGooW29lLGdlLHBlLFBlXSl9KFIsayxHLDAsb2UpKTtlbHNlIHN3aXRjaChSLnQpe2Nhc2UiZCI6Y2Fz''@;'; put 'put ''ZSJuIjpHaShTLCJOdW1iZXIiLGZ1bmN0aW9uIFF3KFMsUixrLEcpe3ZhciBRPWJuKDE0KTtyZXR1cm4gYTIoUyxSLEcsUSksT3UoayxRKSxRfShrLEcsImQiPT1SLnQ/UWUoSGUoUi52KSk6Ui52LG9lKSk7YnJlYWs7Y2FzZSJiIjpjYXNlImUiOkdpKFMsNTE3LGZ1bmN0aW9uIE8xKFMsUixr''@;'; put 'put ''LEcsUSxvZSl7dmFyIGdlPWJuKDgpO3JldHVybiBhMihTLFIsRyxnZSksS2koayxvZSxnZSksZ2V9KGssRyxSLnYsb2UsMCxSLnQpKTticmVhaztjYXNlInMiOmNhc2Uic3RyIjppZihRLmJvb2tTU1Qpe3ZhciBwZT1hUyhRLlN0cmluZ3MsUi52LFIuUj9SLnI9UXMoUi5SKTpudWxsLFEucmV2''@;'; put 'put ''U3RyaW5ncyk7aWYoUi5SKWZvcih2YXIgeWU9MDt5ZTxSLlIubGVuZ3RoOysreWUpUi5SW3llXS5zJiZsMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlIuUlt5ZV0uc30sUSk7R2koUywiTGFiZWxTc3QiLGZ1bmN0aW9uICRBKFMsUixrLEcpe3ZhciBRPWJuKDEwKTty''@;'; put 'put ''ZXR1cm4gYTIoUyxSLEcsUSksUS53cml0ZV9zaGlmdCg0LGspLFF9KGssRyxwZSxvZSkpfWVsc2UgR2koUywiTGFiZWwiLGZ1bmN0aW9uIGlWKFMsUixrLEcsUSl7dmFyIG9lPSFRfHw4PT1RLmJpZmYsZ2U9Ym4oK29lKzgrKDErb2UpKmsubGVuZ3RoKTtyZXR1cm4gYTIoUyxSLEcsZ2UpLGdl''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsay5sZW5ndGgpLG9lJiZnZS53cml0ZV9zaGlmdCgxLDEpLGdlLndyaXRlX3NoaWZ0KCgxK29lKSprLmxlbmd0aCxrLG9lPyJ1dGYxNmxlIjoic2JjcyIpLGdlfShrLEcsKFIudnx8IiIpLnNsaWNlKDAsMjU1KSxvZSxRKSk7YnJlYWs7ZGVmYXVsdDpHaShTLCJCbGFu''@;'; put 'put ''ayIsYTIoayxHLG9lKSl9ZWxzZSBHaShTLCJCbGFuayIsYTIoayxHLG9lKSl9ZnVuY3Rpb24gRUkoUyxSLGspe3ZhciBOZSxHPWJpKCksUT1rLlNoZWV0TmFtZXNbU10sb2U9ay5TaGVldHNbUV18fHt9LGdlPShrfHx7fSkuV29ya2Jvb2t8fHt9LHBlPShnZS5TaGVldHN8fFtdKVtTXXx8e30s''@;'; put 'put ''eWU9QXJyYXkuaXNBcnJheShvZSksUGU9OD09Ui5iaWZmLFllPSIiLGV0PVtdLGN0PW9vKG9lWyIhcmVmIl18fCJBMSIpLEV0PVBlPzY1NTM2OjE2Mzg0O2lmKGN0LmUuYz4yNTV8fGN0LmUucj49RXQpe2lmKFIuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisob2VbIiFyZWYiXXx8IkEx''@;'; put 'put ''IikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7Y3QuZS5jPU1hdGgubWluKGN0LmUuYywyNTUpLGN0LmUucj1NYXRoLm1pbihjdC5lLmMsRXQtMSl9R2koRywyMDU3LHg0KDAsMTYsUikpLEdpKEcsIkNhbGNNb2RlIixhMCgxKSksR2koRywiQ2FsY0NvdW50IixhMCgxMDAp''@;'; put 'put ''KSxHaShHLCJDYWxjUmVmTW9kZSIsdHUoITApKSxHaShHLCJDYWxjSXRlciIsdHUoITEpKSxHaShHLCJDYWxjRGVsdGEiLE91KC4wMDEpKSxHaShHLCJDYWxjU2F2ZVJlY2FsYyIsdHUoITApKSxHaShHLCJQcmludFJvd0NvbCIsdHUoITEpKSxHaShHLCJQcmludEdyaWQiLHR1KCExKSksR2ko''@;'; put 'put ''RywiR3JpZFNldCIsYTAoMSkpLEdpKEcsIkd1dHMiLGZ1bmN0aW9uIFk2KFMpe3ZhciBSPWJuKDgpO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCgyLFNbMF0/U1swXSsxOjApLFIud3JpdGVfc2hpZnQoMixTWzFdP1NbMV0rMTowKSxSfShbMCwwXSkpLEdpKEcsIkhD''@;'; put 'put ''ZW50ZXIiLHR1KCExKSksR2koRywiVkNlbnRlciIsdHUoITEpKTt2YXIgYXQ9b2VbIiFwcmludCJdJiZvZVsiIXByaW50Il0ubWFyZ2luc3x8b2VbIiFtYXJnaW5zIl07YXQmJihudWxsIT1hdC5sZWZ0JiZHaShHLCJMZWZ0TWFyZ2luIixPdShhdC5sZWZ0KSksbnVsbCE9YXQucmlnaHQmJkdp''@;'; put 'put ''KEcsIlJpZ2h0TWFyZ2luIixPdShhdC5yaWdodCkpLG51bGwhPWF0LnRvcCYmR2koRywiVG9wTWFyZ2luIixPdShhdC50b3ApKSxudWxsIT1hdC5ib3R0b20mJkdpKEcsIkJvdHRvbU1hcmdpbiIsT3UoYXQuYm90dG9tKSksKG51bGwhPWF0LmhlYWRlcnx8bnVsbCE9YXQuZm9vdGVyKSYmR2ko''@;'; put 'put ''RywiU2V0dXAiLGZ1bmN0aW9uIGlDKFMsUil7dmFyIGs9Ym4oMzQpLEc9ITEsUT03MDtyZXR1cm4ibGFuZHNjYXBlIj09KFIucHJvcHN8fHt9KS5vcmllbnRhdGlvbiYmKEc9ITAsUSY9LTY3KSxHJiYoUSY9LTUpLGsud3JpdGVfc2hpZnQoMiwxKSxrLndyaXRlX3NoaWZ0KDIsMTAwKSxrLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDEsUSksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMiw2MDApLGsud3JpdGVfc2hpZnQoMiw2MDApLE91KG51bGw9PVMuaGVhZGVyPy41OlMuaGVhZGVyLGsp''@;'; put 'put ''LE91KG51bGw9PVMuZm9vdGVyPy41OlMuZm9vdGVyLGspLGsud3JpdGVfc2hpZnQoMiwxKSxrfShhdCxvZVsiIXByaW50Il18fHt9KSkpLFBlJiZmdW5jdGlvbiBWeihTLFIsayl7aWYoUil7dmFyIEc9MDtSLmZvckVhY2goZnVuY3Rpb24oUSxvZSl7KytHPD0yNTYmJlEmJihRLmF1dG8mJm9T''@;'; put 'put ''KGssUSxvZSksR2koUywiQ29sSW5mbyIsZnVuY3Rpb24gJDYoUyxSKXt2YXIgaz1ibigxMik7ay53cml0ZV9zaGlmdCgyLFIpLGsud3JpdGVfc2hpZnQoMixSKSxrLndyaXRlX3NoaWZ0KDIsMjU2KlMud2lkdGgpLGsud3JpdGVfc2hpZnQoMiwwKTt2YXIgRz0wO3JldHVybiBTLmhpZGRlbiYm''@;'; put 'put ''KEd8PTEpLGsud3JpdGVfc2hpZnQoMSxHKSxrLndyaXRlX3NoaWZ0KDEsRz1TLmxldmVsfHwwKSxrLndyaXRlX3NoaWZ0KDIsMCksa30odTgob2UsUSksb2UpKSl9KX19KEcsb2VbIiFjb2xzIl0sb2UpLEdpKEcsIkRpbWVuc2lvbnMiLGZ1bmN0aW9uIHFBKFMsUil7dmFyIGs9OCE9Ui5iaWZm''@;'; put 'put ''JiZSLmJpZmY/Mjo0LEc9Ym4oMiprKzYpO3JldHVybiBHLndyaXRlX3NoaWZ0KGssUy5zLnIpLEcud3JpdGVfc2hpZnQoayxTLmUucisxKSxHLndyaXRlX3NoaWZ0KDIsUy5zLmMpLEcud3JpdGVfc2hpZnQoMixTLmUuYysxKSxHLndyaXRlX3NoaWZ0KDIsMCksR30oY3QsUikpLFBlJiYob2Vb''@;'; put 'put ''IiFsaW5rcyJdPVtdKSxvZVsiIXJvd3MiXSYmUGUmJm9lWyIhcm93cyJdLmZvckVhY2goZnVuY3Rpb24oS3QsVG4pe2Zvcih2YXIgcnI9amkoVG4pLFNuPTI1Nixscj0wLFhuPUt0LnM/MTYrbDAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpLdC5zfSxSKTowLEJuPWN0''@;'; put 'put ''LnMuYztCbjw9Y3QuZS5jOysrQm4pKHllPyhvZVtUbl18fFtdKVtCbl06b2VbZXRbQm5dK3JyXSkmJihCbjxTbiYmKFNuPUJuKSxCbj5sciYmKGxyPUJuKSk7bHI8U24mJihTbj1scj0wKSxHaShHLCJSb3ciLGZ1bmN0aW9uIG10KFMsUixrKXt2YXIgRz1ibigxNik7Ry53cml0ZV9zaGlmdCgy''@;'; put 'put ''LFIpLEcud3JpdGVfc2hpZnQoMixrWzBdKSxHLndyaXRlX3NoaWZ0KDIsa1sxXSsxKSxHLndyaXRlX3NoaWZ0KDIsMjAqUy5ocHR8fDIwKlUzKFMuaHB4KXx8MzMwKSxHLndyaXRlX3NoaWZ0KDQsMCk7dmFyIFE9MDtyZXR1cm4gUXw9MHxTLmxldmVsLFMuaGlkZGVuJiYoUXw9MzIpLFF8PTY0''@;'; put 'put ''LGtbMl0mJihRfD0xMjgpLEcud3JpdGVfc2hpZnQoMSxRKSxHLndyaXRlX3NoaWZ0KDEsMSksRy53cml0ZV9zaGlmdCgyLGtbMl18fDApLEd9KEt0LFRuLFtTbixscixYbl0pKX0pO2Zvcih2YXIgYnQ9Y3Qucy5yO2J0PD1jdC5lLnI7KytidCl7WWU9amkoYnQpO2Zvcih2YXIganQ9Y3Qucy5j''@;'; put 'put ''O2p0PD1jdC5lLmM7KytqdCl7YnQ9PT1jdC5zLnImJihldFtqdF09VGEoanQpKSxOZT1ldFtqdF0rWWU7dmFyIGt0PXllPyhvZVtidF18fFtdKVtqdF06b2VbTmVdO2t0JiYoWG5lKEcsa3QsYnQsanQsUiksUGUmJmt0LmwmJm9lWyIhbGlua3MiXS5wdXNoKFtOZSxrdC5sXSkpfX12YXIgT3Q9''@;'; put 'put ''cGUuQ29kZU5hbWV8fHBlLm5hbWV8fFE7cmV0dXJuKFBlfHw1PT1SLmJpZmYmJm9lWyIhZnJlZXplIl0pJiZHaShHLCJXaW5kb3cyIixmdW5jdGlvbiB0VihTLFIsayxHKXt2YXIgUT1HJiZHLmJpZmZ8fDgsb2U9Ym4oOD09UT8xODoxMCksZ2U9MTcxODtyZXR1cm4gaz4wJiYoZ2UmPS01MTMp''@;'; put 'put ''LFd0KFJbIiFncmlkbGluZXMiXSkmJihnZSY9LTMpLFJbIiFmcmVlemUiXSYmKGdlfD04KSxTJiZTLlJUTCYmKGdlfD02NCksNT09USYmKGdlPTQ0Niksb2Uud3JpdGVfc2hpZnQoMixnZSksOD09UT8ob2Uud3JpdGVfc2hpZnQoNCwwKSxvZS53cml0ZV9zaGlmdCg0LDY0KSxvZS53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDApLG9lLndyaXRlX3NoaWZ0KDQsMCkpOihvZS53cml0ZV9zaGlmdCg0LDApLG9lLndyaXRlX3NoaWZ0KDQsMCkpLG9lfSgoZ2UuVmlld3N8fFtdKVswXSxvZSxTKSksKFBlfHw1PT1SLmJpZmYpJiZvZVsiIWZyZWV6ZSJdJiZHaShHLCJQYW5lIixmdW5jdGlvbiB3bChTKXsic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIFMmJihTPU5vKFMpKTt2YXIgUj1ibigxMCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoMixTLmMpLFIud3JpdGVfc2hpZnQoMixTLnIpLFIud3JpdGVfc2hpZnQoMixTLnIpLFIud3JpdGVfc2hpZnQoMixTLmMpLFIud3JpdGVfc2hpZnQoMSwzKSxSLndyaXRlX3NoaWZ0KDEs''@;'; put 'put ''MCksUn0ob2VbIiFmcmVlemUiXSkpLFBlJiZvZVsiIXNlbCJdJiZHaShHLCJTZWxlY3Rpb24iLGZ1bmN0aW9uIHJrKFMsUil7dmFyIGs9Ym4oMTUpLEc9Uy5jZWxsO2lmKCFHKXtpZighUy5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJh''@;'; put 'put ''bmdlIik7Rz1xaShNcyhTLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZhciBRPSJzdHJpbmciPT10eXBlb2YgRz9ObyhHKTpHO2lmKFIpe3ZhciBvZT0ic3RyaW5nIj09dHlwZW9mIFI/Tm8oUik6UjtrLndyaXRlX3NoaWZ0KDEsUS5yPj1vZS5yJiZRLmM+PW9lLmM/MDpRLnI+PW9l''@;'; put 'put ''LnImJlEuYzxvZS5jPzI6US5yPG9lLnImJlEuYz49b2UuYz8xOjMpfWVsc2Ugay53cml0ZV9zaGlmdCgxLDMpO3JldHVybiBrLndyaXRlX3NoaWZ0KDIsUS5yKSxrLndyaXRlX3NoaWZ0KDIsUS5jKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDEpLGZ1bmN0aW9uIFYzKFMs''@;'; put 'put ''Uil7Unx8KFI9Ym4oNikpLFIud3JpdGVfc2hpZnQoMixTLnM/Uy5zLnI6Uy5yKSxSLndyaXRlX3NoaWZ0KDIsUy5lP1MuZS5yOlMuciksUi53cml0ZV9zaGlmdCgxLFMucz9TLnMuYzpTLmMpLFIud3JpdGVfc2hpZnQoMSxTLmU/Uy5lLmM6Uy5jKX0oe3M6USxlOlF9LGspLGt9KG9lWyIhc2Vs''@;'; put 'put ''Il0sb2VbIiFmcmVlemUiXSkpLFBlJiYob2VbIiFtZXJnZXMiXXx8W10pLmxlbmd0aCYmR2koRywiTWVyZ2VDZWxscyIsZnVuY3Rpb24gdVYoUyl7dmFyIFI9Ym4oMis4KlMubGVuZ3RoKTtSLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKXZ1KFNb''@;'; put 'put ''a10sUik7cmV0dXJuIFJ9KG9lWyIhbWVyZ2VzIl0pKSxQZSYmZnVuY3Rpb24gTzgoUyxSKXtmb3IodmFyIGs9MDtrPFJbIiFsaW5rcyJdLmxlbmd0aDsrK2spe3ZhciBHPVJbIiFsaW5rcyJdW2tdO0dpKFMsIkhMaW5rIixmVihHKSksR1sxXS5Ub29sdGlwJiZHaShTLCJITGlua1Rvb2x0aXAi''@;'; put 'put ''LGdWKEcpKX1kZWxldGUgUlsiIWxpbmtzIl19KEcsb2UpLEdpKEcsIkNvZGVOYW1lIixjbChPdCkpLFBlJiZmdW5jdGlvbiBOeihTLFIpe3ZhciBrPWJuKDE5KTtrLndyaXRlX3NoaWZ0KDQsMjE1MSksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsMyksay53cml0ZV9zaGlmdCgxLDEpLGsud3JpdGVfc2hpZnQoNCwwKSxHaShTLCJGZWF0SGRyIixrKSwoaz1ibigzOSkpLndyaXRlX3NoaWZ0KDQsMjE1Miksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMyksay53cml0ZV9zaGlmdCgx''@;'; put 'put ''LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMSksay53cml0ZV9zaGlmdCg0LDQpLGsud3JpdGVfc2hpZnQoMiwwKSx2dShvbyhSWyIhcmVmIl18fCJBMSIpLGspLGsud3JpdGVfc2hpZnQoNCw0KSxHaShTLCJGZWF0IixrKX0oRyxvZSksR2koRywiRU9GIiksRy5lbmQo''@;'; put 'put ''KX1mdW5jdGlvbiBCeihTLFIsayl7dmFyIEc9YmkoKSxRPShTfHx7fSkuV29ya2Jvb2t8fHt9LG9lPVEuU2hlZXRzfHxbXSxnZT1RLldCUHJvcHN8fHt9LHBlPTg9PWsuYmlmZix5ZT01PT1rLmJpZmY7R2koRywyMDU3LHg0KDAsNSxrKSksInhsYSI9PWsuYm9va1R5cGUmJkdpKEcsIkFkZGlu''@;'; put 'put ''IiksR2koRywiSW50ZXJmYWNlSGRyIixwZT9hMCgxMjAwKTpudWxsKSxHaShHLCJNbXMiLGZ1bmN0aW9uIEd3KFMsUil7Unx8KFI9Ym4oUykpO2Zvcih2YXIgaz0wO2s8UzsrK2spUi53cml0ZV9zaGlmdCgxLDApO3JldHVybiBSfSgyKSkseWUmJkdpKEcsIlRvb2xiYXJIZHIiKSx5ZSYmR2ko''@;'; put 'put ''RywiVG9vbGJhckVuZCIpLEdpKEcsIkludGVyZmFjZUVuZCIpLEdpKEcsIldyaXRlQWNjZXNzIixmdW5jdGlvbiBVNihTLFIpe3ZhciBrPSFSfHw4PT1SLmJpZmYsRz1ibihrPzExMjo1NCk7Zm9yKEcud3JpdGVfc2hpZnQoOD09Ui5iaWZmPzI6MSw3KSxrJiZHLndyaXRlX3NoaWZ0KDEsMCks''@;'; put 'put ''Ry53cml0ZV9zaGlmdCg0LDg1OTAwNzA1OSksRy53cml0ZV9zaGlmdCg0LDU0NTg1NDh8KGs/MDo1MzY4NzA5MTIpKTtHLmw8Ry5sZW5ndGg7KUcud3JpdGVfc2hpZnQoMSxrPzA6MzIpO3JldHVybiBHfSgwLGspKSxHaShHLCJDb2RlUGFnZSIsYTAocGU/MTIwMDoxMjUyKSkscGUmJkdpKEcs''@;'; put 'put ''IkRTRiIsYTAoMCkpLHBlJiZHaShHLCJFeGNlbDlGaWxlIiksR2koRywiUlJUYWJJZCIsZnVuY3Rpb24gdlYoUyl7Zm9yKHZhciBSPWJuKDIqUyksaz0wO2s8UzsrK2spUi53cml0ZV9zaGlmdCgyLGsrMSk7cmV0dXJuIFJ9KFMuU2hlZXROYW1lcy5sZW5ndGgpKSxwZSYmUy52YmFyYXcmJkdp''@;'; put 'put ''KEcsIk9iUHJvaiIpLHBlJiZTLnZiYXJhdyYmR2koRywiQ29kZU5hbWUiLGNsKGdlLkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIikpLEdpKEcsIkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGEwKDE3KSksR2koRywiV2luUHJvdGVjdCIsdHUoITEpKSxHaShHLCJQcm90ZWN0Iix0dSghMSkpLEdpKEcs''@;'; put 'put ''IlBhc3N3b3JkIixhMCgwKSkscGUmJkdpKEcsIlByb3Q0UmV2Iix0dSghMSkpLHBlJiZHaShHLCJQcm90NFJldlBhc3MiLGEwKDApKSxHaShHLCJXaW5kb3cxIixmdW5jdGlvbiBLdGUoKXt2YXIgUz1ibigxOCk7cmV0dXJuIFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMCks''@;'; put 'put ''Uy53cml0ZV9zaGlmdCgyLDI5MjgwKSxTLndyaXRlX3NoaWZ0KDIsMTc2MDApLFMud3JpdGVfc2hpZnQoMiw1NiksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMSksUy53cml0ZV9zaGlmdCgyLDUwMCksU30oKSksR2koRywiQmFja3VwIix0''@;'; put 'put ''dSghMSkpLEdpKEcsIkhpZGVPYmoiLGEwKDApKSxHaShHLCJEYXRlMTkwNCIsdHUoInRydWUiPT1mdW5jdGlvbiBGUyhTKXtyZXR1cm4gUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5XQlByb3BzJiZ0aShTLldvcmtib29rLldCUHJvcHMuZGF0ZTE5MDQpPyJ0cnVlIjoiZmFsc2UifShTKSkpLEdp''@;'; put 'put ''KEcsIkNhbGNQcmVjaXNpb24iLHR1KCEwKSkscGUmJkdpKEcsIlJlZnJlc2hBbGwiLHR1KCExKSksR2koRywiQm9va0Jvb2wiLGEwKDApKSxyMD1JNihbMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4''@;'; put 'put ''MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzVdKSxmdW5jdGlvbiBLbmUoUyxSLGspeygoKFJ8fHt9KS5TdHlsZXN8fHt9KS5Gb250c3x8W3tzejoxMixjb2xvcjp7dGhlbWU6MX0sbmFtZToiQXJpYWwiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0pLmZvckVhY2goZnVuY3Rpb24oRyl7''@;'; put 'put ''R2koUywiRm9udCIsZnVuY3Rpb24gblYoUyxSKXt2YXIgaz1TLm5hbWV8fCJBcmlhbCIsRz1SJiY1PT1SLmJpZmYsb2U9Ym4oRz8xNStrLmxlbmd0aDoxNisyKmsubGVuZ3RoKTtvZS53cml0ZV9zaGlmdCgyLDIwKihTLnN6fHwxMikpO3ZhciBnZT0wO3JldHVybiBTLmJvbGQmJihnZXw9MSks''@;'; put 'put ''Uy5pdGFsaWMmJihnZXw9MiksUy5zdHJpa2UmJihnZXw9OCksUy5zaGFkb3cmJihnZXw9MzIpLG9lLndyaXRlX3NoaWZ0KDEsZ2UpLG9lLndyaXRlX3NoaWZ0KDEsMCksb2Uud3JpdGVfc2hpZnQoMixTLmNvbG9yP1A0KFMuY29sb3IsNjQpOjY0KSxvZS53cml0ZV9zaGlmdCgyLFMuYm9sZD83''@;'; put 'put ''MDA6NDAwKSxvZS53cml0ZV9zaGlmdCgyLCJzdXBlciI9PVMudmFsaWduPzE6InN1YiI9PVMudmFsaWduPzI6MCksb2Uud3JpdGVfc2hpZnQoMSxTLnVuZGVybGluZXx8MCksb2Uud3JpdGVfc2hpZnQoMSxvZS5mYW1pbHl8fDApLG9lLndyaXRlX3NoaWZ0KDEsb2UuY2hhcnNldHx8MCksb2Uu''@;'; put 'put ''d3JpdGVfc2hpZnQoMSwwKSxvZS53cml0ZV9zaGlmdCgxLGsubGVuZ3RoKSxHfHxvZS53cml0ZV9zaGlmdCgxLDEpLG9lLndyaXRlX3NoaWZ0KChHPzE6Mikqay5sZW5ndGgsayxHPyJzYmNzIjoidXRmMTZsZSIpLG9lfShHLGspKX0pfShHLFMsayksZnVuY3Rpb24gcW5lKFMsUixrKXtSJiZb''@;'; put 'put ''WzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2Zvcih2YXIgUT1HWzBdO1E8PUdbMV07KytRKW51bGwhPVJbUV0mJkdpKFMsIkZvcm1hdCIsYVYoUSxSW1FdLGspKX0pfShHLFMuU1NGLGspLGZ1bmN0aW9uIEc1KFMsUil7Zm9yKHZhciBrPTA7azwx''@;'; put 'put ''NjsrK2spR2koUywiWEYiLHk1KHtudW1GbXRJZDowLHN0eWxlOiEwfSwwLFIpKTtSLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihHKXtHaShTLCJYRiIseTUoRywwLFIpKX0pfShHLGspLEdpKEcsIlBhbGV0dGUiLGZ1bmN0aW9uIEN0KFMpe3ZhciBSPWJuKDIyNik7Ui53cml0ZV9zaGlmdCgy''@;'; put 'put ''LDU2KTtmb3IodmFyIGs9MDtrPDU2Oysrayl7dmFyIEc9U1trKzhdfHx2NFtrKzhdO1Iud3JpdGVfc2hpZnQoMSxHWzBdKSxSLndyaXRlX3NoaWZ0KDEsR1sxXSksUi53cml0ZV9zaGlmdCgxLEdbMl0pLFIud3JpdGVfc2hpZnQoMSwwKX1yZXR1cm4gUn0ocjApKSxyMD1xdCh2NCkscGUmJkdp''@;'; put 'put ''KEcsIlVzZXNFTEZzIix0dSghMSkpO3ZhciBOZT1HLmVuZCgpLFllPWJpKCk7cGUmJkdpKFllLCJDb3VudHJ5IixmdW5jdGlvbiBkaShTKXtyZXR1cm4gU3x8KFM9Ym4oNCkpLFMud3JpdGVfc2hpZnQoMiwxKSxTLndyaXRlX3NoaWZ0KDIsMSksU30oKSkscGUmJmsuU3RyaW5ncyYmZnVuY3Rp''@;'; put 'put ''b24gVW5lKFMsUixrLEcpe3ZhciBRPUd8fChrfHxbXSkubGVuZ3RofHwwO2lmKFE8PTgyMjQpcmV0dXJuIEdpKFMsUixrLFEpO3ZhciBvZT0rUnx8K3FTW1JdO2lmKCFpc05hTihvZSkpe2Zvcih2YXIgZ2U9ay5wYXJ0c3x8W10scGU9MCx5ZT0wLFBlPTA7UGUrKGdlW3BlXXx8ODIyNCk8PTgy''@;'; put 'put ''MjQ7KVBlKz1nZVtwZV18fDgyMjQscGUrKzt2YXIgTmU9Uy5uZXh0KDQpO2ZvcihOZS53cml0ZV9zaGlmdCgyLG9lKSxOZS53cml0ZV9zaGlmdCgyLFBlKSxTLnB1c2goay5zbGljZSh5ZSx5ZStQZSkpLHllKz1QZTt5ZTxROyl7Zm9yKChOZT1TLm5leHQoNCkpLndyaXRlX3NoaWZ0KDIsNjAp''@;'; put 'put ''LFBlPTA7UGUrKGdlW3BlXXx8ODIyNCk8PTgyMjQ7KVBlKz1nZVtwZV18fDgyMjQscGUrKztOZS53cml0ZV9zaGlmdCgyLFBlKSxTLnB1c2goay5zbGljZSh5ZSx5ZStQZSkpLHllKz1QZX19fShZZSwiU1NUIixmdW5jdGlvbiBtcyhTLFIpe3ZhciBrPWJuKDgpO2sud3JpdGVfc2hpZnQoNCxT''@;'; put 'put ''LkNvdW50KSxrLndyaXRlX3NoaWZ0KDQsUy5VbmlxdWUpO2Zvcih2YXIgRz1bXSxRPTA7UTxTLmxlbmd0aDsrK1EpR1tRXT1OYyhTW1FdLFIpO3ZhciBvZT1qKFtrXS5jb25jYXQoRykpO3JldHVybiBvZS5wYXJ0cz1bay5sZW5ndGhdLmNvbmNhdChHLm1hcChmdW5jdGlvbihnZSl7cmV0dXJu''@;'; put 'put ''IGdlLmxlbmd0aH0pKSxvZX0oay5TdHJpbmdzLGspKSxHaShZZSwiRU9GIik7dmFyIGV0PVllLmVuZCgpLGN0PWJpKCksRXQ9MCxhdD0wO2ZvcihhdD0wO2F0PFMuU2hlZXROYW1lcy5sZW5ndGg7KythdClFdCs9KHBlPzEyOjExKSsocGU/MjoxKSpTLlNoZWV0TmFtZXNbYXRdLmxlbmd0aDt2''@;'; put 'put ''YXIgYnQ9TmUubGVuZ3RoK0V0K2V0Lmxlbmd0aDtmb3IoYXQ9MDthdDxTLlNoZWV0TmFtZXMubGVuZ3RoOysrYXQpR2koY3QsIkJvdW5kU2hlZXQ4IixsMih7cG9zOmJ0LGhzOihvZVthdF18fHt9KS5IaWRkZW58fDAsZHQ6MCxuYW1lOlMuU2hlZXROYW1lc1thdF19LGspKSxidCs9UlthdF0u''@;'; put 'put ''bGVuZ3RoO3ZhciBrdD1jdC5lbmQoKTtpZihFdCE9a3QubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQlM4ICIrRXQrIiAhPSAiK2t0Lmxlbmd0aCk7dmFyIE90PVtdO3JldHVybiBOZS5sZW5ndGgmJk90LnB1c2goTmUpLGt0Lmxlbmd0aCYmT3QucHVzaChrdCksZXQubGVuZ3RoJiZPdC5wdXNo''@;'; put 'put ''KGV0KSx5MChbT3RdKX1mdW5jdGlvbiBUSShTLFIpe3ZhciBrPVJ8fHt9O3N3aXRjaChrLmJpZmZ8fDIpe2Nhc2UgODpjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uIEpuZShTLFIpe3ZhciBrPVJ8fHt9LEc9W107SWYoUiYmUi5QUEl8fDk2KSxTJiYhUy5TU0YmJihTLlNTRj1BLmdldF90YWJsZSgp''@;'; put 'put ''KSxTJiZTLlNTRiYmKGFlKEEpLEEubG9hZF90YWJsZShTLlNTRiksay5yZXZzc2Y9a2UoUy5TU0YpLGsucmV2c3NmW1MuU1NGWzY1NTM1XV09MCxrLnNzZj1TLlNTRiksUy5TdHlsZXM9e0ZvbnRzOmsuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNh''@;'; put 'put ''bGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6ay5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6ay5Cb3JkZXJzPVt7fV0sRFhGOmsuRFhGPVMuU3R5bGVzJiZTLlN0eWxlcy5EWEZ8fFtdfSxJNChrLkZvbnRz''@;'; put 'put ''WzBdKSxrLlN0cmluZ3M9W10say5TdHJpbmdzLkNvdW50PTAsay5TdHJpbmdzLlVuaXF1ZT0wLHEzP2sucmV2U3RyaW5ncz1uZXcgTWFwOihrLnJldlN0cmluZ3M9e30say5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgay5yZXZTdHJpbmdzLmZvbyksUGYoayksay5jZWxsWGZzPVtdLGsuY2Vs''@;'; put 'put ''bFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLGwwKGsuY2VsbFhmcyxrLmNlbGxTdHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSksUy5Qcm9wc3x8KFMuUHJvcHM9e30pO2Zvcih2YXIgUT0wO1E8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK1EpR1tHLmxlbmd0aF09RUkoUSxrLFMpO3Jl''@;'; put 'put ''dHVybiBHLnVuc2hpZnQoQnooUyxHLGspKSx5MChbR10pfShTLFIpO2Nhc2UgNDpjYXNlIDM6Y2FzZSAyOnJldHVybiBmdW5jdGlvbiAkbmUoUyxSKXt2YXIgaz1SfHx7fTtudWxsIT1sZSYmbnVsbD09ay5kZW5zZSYmKGsuZGVuc2U9bGUpO2Zvcih2YXIgRz1iaSgpLFE9MCxvZT0wO29lPFMu''@;'; put 'put ''U2hlZXROYW1lcy5sZW5ndGg7KytvZSlTLlNoZWV0TmFtZXNbb2VdPT1rLnNoZWV0JiYoUT1vZSk7aWYoMD09USYmay5zaGVldCYmUy5TaGVldE5hbWVzWzBdIT1rLnNoZWV0KXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK2suc2hlZXQpO3JldHVybiBHaShHLDQ9PWsuYmlm''@;'; put 'put ''Zj8xMDMzOjM9PWsuYmlmZj81MjE6OSx4NCgwLDE2LGspKSxmdW5jdGlvbiBHbmUoUyxSLGssRyl7dmFyIGdlLFE9QXJyYXkuaXNBcnJheShSKSxvZT1vbyhSWyIhcmVmIl18fCJBMSIpLHBlPSIiLHllPVtdO2lmKG9lLmUuYz4yNTV8fG9lLmUucj4xNjM4Myl7aWYoRy5XVEYpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJSYW5nZSAiKyhSWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6SVYxNjM4NCIpO29lLmUuYz1NYXRoLm1pbihvZS5lLmMsMjU1KSxvZS5lLnI9TWF0aC5taW4ob2UuZS5jLDE2MzgzKSxnZT1yYShvZSl9Zm9yKHZhciBQZT1vZS5zLnI7UGU8PW9lLmUu''@;'; put 'put ''cjsrK1BlKXtwZT1qaShQZSk7Zm9yKHZhciBOZT1vZS5zLmM7TmU8PW9lLmUuYzsrK05lKXtQZT09PW9lLnMuciYmKHllW05lXT1UYShOZSkpLGdlPXllW05lXStwZTt2YXIgWWU9UT8oUltQZV18fFtdKVtOZV06UltnZV07WWUmJlluZShTLFllLFBlLE5lKX19fShHLFMuU2hlZXRzW1MuU2hl''@;'; put 'put ''ZXROYW1lc1tRXV0sMCxrKSxHaShHLDEwKSxHLmVuZCgpfShTLFIpfXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIray5ib29rVHlwZSsiIGZvciBCSUZGIil9dmFyIG1kPWZ1bmN0aW9uKCl7dmFyIFM9e2NlbnRlckNvbnRpbnVvdXM6ImNlbnRlciIsanVzdGlmeToibGVmdCJ9O2Z1''@;'; put 'put ''bmN0aW9uIGsoWWUsZXQpe3ZhciBjdD1ldHx8e307bnVsbCE9bGUmJm51bGw9PWN0LmRlbnNlJiYoY3QuZGVuc2U9bGUpO3ZhciBFdD1jdC5kZW5zZT9bXTp7fSxhdD0oWWU9WWUucmVwbGFjZSgvPCEtLS4qPy0tPi9nLCIiKSkubWF0Y2goLzx0YWJsZS9pKTtpZighYXQpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJJbnZhbGlkIEhUTUw6IGNvdWxkIG5vdCBmaW5kIDx0YWJsZT4iKTt2YXIgYnQ9WWUubWF0Y2goLzxcL3RhYmxlL2kpLGp0PWF0LmluZGV4LGt0PWJ0JiZidC5pbmRleHx8WWUubGVuZ3RoLE90PWZ1bmN0aW9uIGZ0KFMsUixrKXtpZihobnx8InN0cmluZyI9PXR5cGVvZiBSKXJldHVy''@;'; put 'put ''biBTLnNwbGl0KFIpO2Zvcih2YXIgRz1TLnNwbGl0KFIpLFE9W0dbMF1dLG9lPTE7b2U8Ry5sZW5ndGg7KytvZSlRLnB1c2goayksUS5wdXNoKEdbb2VdKTtyZXR1cm4gUX0oWWUuc2xpY2UoanQsa3QpLC8oOj88dHJbXj5dKj4pL2ksIjx0cj4iKSxLdD0tMSxUbj0wLHJyPTAsU249MCxscj17''@;'; put 'put ''czp7cjoxZTcsYzoxZTd9LGU6e3I6MCxjOjB9fSxYbj1bXTtmb3IoanQ9MDtqdDxPdC5sZW5ndGg7KytqdCl7dmFyIEJuPU90W2p0XS50cmltKCksZnI9Qm4uc2xpY2UoMCwzKS50b0xvd2VyQ2FzZSgpO2lmKCI8dHIiIT1mcil7aWYoIjx0ZCI9PWZyfHwiPHRoIj09ZnIpe3ZhciBicj1Cbi5z''@;'; put 'put ''cGxpdCgvPFwvdFtkaF0+L2kpO2ZvcihrdD0wO2t0PGJyLmxlbmd0aDsrK2t0KXt2YXIgZXI9YnJba3RdLnRyaW0oKTtpZihlci5tYXRjaCgvPHRbZGhdL2kpKXtmb3IodmFyIE1pPWVyLEZpPTA7IjwiPT1NaS5jaGFyQXQoMCkmJihGaT1NaS5pbmRleE9mKCI+IikpPi0xOylNaT1NaS5zbGlj''@;'; put 'put ''ZShGaSsxKTtmb3IodmFyIG5hPTA7bmE8WG4ubGVuZ3RoOysrbmEpe3ZhciBjYT1YbltuYV07Y2Eucy5jPT1UbiYmY2Eucy5yPEt0JiZLdDw9Y2EuZS5yJiYoVG49Y2EuZS5jKzEsbmE9LTEpfXZhciBMaT12cihlci5zbGljZSgwLGVyLmluZGV4T2YoIj4iKSkpO1NuPUxpLmNvbHNwYW4/K0xp''@;'; put 'put ''LmNvbHNwYW46MSwoKHJyPStMaS5yb3dzcGFuKT4xfHxTbj4xKSYmWG4ucHVzaCh7czp7cjpLdCxjOlRufSxlOntyOkt0Kyhycnx8MSktMSxjOlRuK1NuLTF9fSk7dmFyIGtyPUxpLnR8fExpWyJkYXRhLXQiXXx8IiI7aWYoIU1pLmxlbmd0aCl7VG4rPVNuO2NvbnRpbnVlfWlmKE1pPWlyKE1p''@;'; put 'put ''KSxsci5zLnI+S3QmJihsci5zLnI9S3QpLGxyLmUucjxLdCYmKGxyLmUucj1LdCksbHIucy5jPlRuJiYobHIucy5jPVRuKSxsci5lLmM8VG4mJihsci5lLmM9VG4pLE1pLmxlbmd0aCl7dmFyIFZuPXt0OiJzIix2Ok1pfTtjdC5yYXd8fCFNaS50cmltKCkubGVuZ3RofHwicyI9PWtyfHwoVm49''@;'; put 'put ''UmkoTWksY3QpKSxjdC5kZW5zZT8oRXRbS3RdfHwoRXRbS3RdPVtdKSxFdFtLdF1bVG5dPVZuKTpFdFtxaSh7cjpLdCxjOlRufSldPVZuLFRuKz1Tbn19fX19ZWxzZXtpZigrK0t0LGN0LnNoZWV0Um93cyYmY3Quc2hlZXRSb3dzPD1LdCl7LS1LdDticmVha31Ubj0wfX1yZXR1cm4gRXRbIiFy''@;'; put 'put ''ZWYiXT1yYShsciksWG4ubGVuZ3RoJiYoRXRbIiFtZXJnZXMiXT1YbiksRXR9ZnVuY3Rpb24gUShZZSxldCxjdCxFdCxhdCxidCl7dmFyIE90LGp0PVllWyIhbWVyZ2VzIl18fFtdLGt0PVtdLEt0PXtzdHlsZTpbXX0sVG49ITE7ZnVuY3Rpb24gcnIoaWEsTG8sT2Epe3ZhciBobz0iIixKYT0w''@;'; put 'put ''O2lmKE90W2lhXSlzd2l0Y2goT3RbaWFdLnN0eWxlKXtjYXNlInRoaW4iOmNhc2UiaGFpciI6aG89InNvbGlkIixKYT0xO2JyZWFrO2Nhc2UibWVkaXVtIjpobz0ic29saWQiLEphPTI7YnJlYWs7Y2FzZSJ0aGljayI6aG89InNvbGlkIixKYT0zO2JyZWFrO2Nhc2UiZG91YmxlIjpobz0iZG91''@;'; put 'put ''YmxlIixKYT0zO2JyZWFrO2Nhc2UiZG90dGVkIjpjYXNlImRhc2hEb3REb3QiOmhvPSJkb3R0ZWQiLEphPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoRG90RG90Ijpobz0iZG90dGVkIixKYT0yO2JyZWFrO2Nhc2UiZGFzaGVkIjpjYXNlImRhc2hEb3QiOmNhc2Uic2xhbnREYXNoRG90Ijpobz0i''@;'; put 'put ''ZGFzaGVkIixKYT0xO2JyZWFrO2Nhc2UibWVkaXVtRGFzaGVkIjpjYXNlIm1lZGl1bURhc2hEb3QiOmhvPSJkYXNoZWQiLEphPTJ9ZTppZigwPT1KYSl7c3dpdGNoKGlhKXtjYXNlInRvcCI6LS1MbzticmVhaztjYXNlImxlZnQiOi0tT2E7YnJlYWs7Y2FzZSJib3R0b20iOisrTG87YnJlYWs7''@;'; put 'put ''Y2FzZSJyaWdodCI6KytPYX12YXIgQmk9TG8+PTAmJk9hPj0wP0V0LmRlbnNlPyhZZVtMb118fFtdKVtPYV06WWVbcWkoe3I6TG8sYzpPYX0pXTpudWxsO2lmKEJpKXtpZihCaS5zJiZCaS5zW3t0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AiLGxlZnQ6InJpZ2h0IixyaWdodDoibGVmdCJ9W2lh''@;'; put 'put ''XV0pYnJlYWsgZTtCaS5zJiZCaS5zLmZnQ29sb3ImJihKYT0xKX1PdC5mZ0NvbG9yJiYoSmE9MSksIUJpJiZUbiYmMD09SmEmJihKYT0xKX0wIT1KYSYmSmEmJihLdC5zdHlsZS5wdXNoKCJib3JkZXItIitpYSsiLXN0eWxlOiIrKGhvfHwidHJhbnNwYXJlbnQiKSksS3Quc3R5bGUucHVzaCgi''@;'; put 'put ''Ym9yZGVyLSIraWErIi13aWR0aDoiK0phKyJweCIpLCIiPT1obz9LdC5zdHlsZS5wdXNoKCJib3JkZXItIitpYSsiLWNvbG9yOiB0cmFuc3BhcmVudCIpOk90W2lhXS5jb2xvciYmT3RbaWFdLmNvbG9yLnJnYiYmS3Quc3R5bGUucHVzaCgiYm9yZGVyLSIraWErIi1jb2xvcjojIitQMChPdFtp''@;'; put 'put ''YV0uY29sb3IucmdiKSkpfWZvcih2YXIgU249ZXQucy5jO1NuPD1ldC5lLmM7KytTbil7Zm9yKHZhciBscj0wLFhuPTAsQm49MDtCbjxqdC5sZW5ndGg7KytCbilpZighKGp0W0JuXS5zLnI+Y3R8fGp0W0JuXS5zLmM+U258fGp0W0JuXS5lLnI8Y3R8fGp0W0JuXS5lLmM8U24pKXtpZihqdFtC''@;'; put 'put ''bl0ucy5yPGN0fHxqdFtCbl0ucy5jPFNuKXtscj0tMTticmVha31scj1qdFtCbl0uZS5yLWp0W0JuXS5zLnIrMSxYbj1qdFtCbl0uZS5jLWp0W0JuXS5zLmMrMTticmVha31pZighKGxyPDApKXt2YXIgZnI9cWkoe3I6Y3QsYzpTbn0pLGJyPUV0LmRlbnNlPyhZZVtjdF18fFtdKVtTbl06WWVb''@;'; put 'put ''ZnJdO2JyP1RuPSExOihUbj0hMCxicj17dDoieiIsczp7fX0pO3ZhciBlcj0ieiI9PWJyLnQ/IiI6YnIuaHx8bGEoYnIud3x8KF9sKGJyKSxici53KXx8IiIpO2lmKEt0PXtzdHlsZTpbXX0sT3Q9YnIucyl7dmFyIE1pPTE7aWYoKCJzdXBlciI9PU90LnZhbGlnbnx8InN1YiI9PU90LnZhbGln''@;'; put 'put ''bikmJihNaT0uODMsZXI9UHIoInNwYW4iLGVyLHtzdHlsZToidmVydGljYWwtYWxpZ246ICIrT3QudmFsaWdufSkpLEt0LnN0eWxlLnB1c2goImZvbnQtd2VpZ2h0OiIrKE90LmJvbGQ/NzAwOjQwMCkpLE90Lml0YWxpYyYmS3Quc3R5bGUucHVzaCgiZm9udC1zdHlsZTogaXRhbGljIiksKE90''@;'; put 'put ''LnVuZGVybGluZXx8T3Quc3RyaWtlKSYmS3Quc3R5bGUucHVzaCgidGV4dC1kZWNvcmF0aW9uOiIrKE90LnVuZGVybGluZT8iIHVuZGVybGluZSI6IiIpKyhPdC5zdHJpa2U/IiBsaW5lLXRocm91Z2giOiIiKSksT3QuY29sb3ImJk90LmNvbG9yLnJnYiYmS3Quc3R5bGUucHVzaCgiY29sb3I6''@;'; put 'put ''ICMiK1AwKE90LmNvbG9yLnJnYikpLE90Lm5hbWUmJkt0LnN0eWxlLnB1c2goImZvbnQtZmFtaWx5OiIrT3QubmFtZSsiLCBzYW5zLXNlcmlmIiksT3Quc3omJkt0LnN0eWxlLnB1c2goImZvbnQtc2l6ZToiK090LnN6Kk1pKyJwdCIpLG51bGwhPT1PdC5wYXR0ZXJuVHlwZSYmT3QuZmdDb2xv''@;'; put 'put ''ciYmT3QuZmdDb2xvci5yZ2ImJkt0LnN0eWxlLnB1c2goImJhY2tncm91bmQtY29sb3I6ICMiK1AwKE90LmZnQ29sb3IucmdiKSksWyJ0b3AiLCJsZWZ0Il0uZm9yRWFjaChmdW5jdGlvbihpYSl7cnIoaWEsY3QsU24pfSksbHI+MXx8WG4+MSl7dmFyIEZpPXFpKHtyOmN0K2xyLTEsYzpTbitY''@;'; put 'put ''bi0xfSksbmE9RXQuZGVuc2U/KFllW2N0K2xyLTFdfHxbXSlbU24rWG4tMV06WWVbRmldLExpPU90O090PW5hJiZuYS5zfHxPdCxbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihpYSl7cnIoaWEsY3QsU24pfSksT3Q9TGl9ZWxzZVsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKGlhKXtycihpYSxjdCxTbil9KTtpZihPdC5hbGlnbm1lbnQpe2lmKE90LmFsaWdubWVudC5ob3Jpem9udGFsP0t0LnN0eWxlLnB1c2goInRleHQtYWxpZ246ICIrKFNbT3QuYWxpZ25tZW50Lmhvcml6b250YWxdfHxPdC5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpOiJuIj09YnIu''@;'; put 'put ''dCYmS3Quc3R5bGUucHVzaCgidGV4dC1hbGlnbjogcmlnaHQiKSxPdC5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBrcj1PdC5hbGlnbm1lbnQudmVydGljYWw7S3Quc3R5bGUucHVzaCgidmVydGljYWwtYWxpZ246ICIrKCJjZW50ZXIiPT1rcj8ibWlkZGxlIjprcikpfWlmKE90LmFsaWdubWVu''@;'; put 'put ''dC53cmFwVGV4dClLdC5zdHlsZS5wdXNoKCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXAiKTtlbHNle3ZhciBWbj1FdC5kZW5zZT8oWWVbY3RdfHxbXSlbU24rMV06WWVbcWkoe3I6Y3QsYzpTbisxfSldO1ZuJiYieiIhPVZuLnQmJkt0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIp''@;'; put 'put ''fX1lbHNlIm4iPT1ici50JiZLdC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIpO3ZhciBCcj0oKFllWyIhY29scyJdfHxbXSlbU25dfHx7fSkud3B4O251bGw9PUJyJiYoQnI9KChZZVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpfXZhciBfcj0wO2lmKFhuPD0xJiZs''@;'; put 'put ''cjw9MSYmKF9yPSgoWWVbIiFjb2xzIl18fFtdKVtTbl18fHt9KS53cHgpJiZLdC5zdHlsZS5wdXNoKCJ3aWR0aDogIitfcisicHgiKSxZZVsiIWNvbmRmbXQiXSYmb2UoYnIsY3QsU24sWWVbIiFjb25kZm10Il0sS3Quc3R5bGUsWWUpLDA9PUt0LnN0eWxlLmxlbmd0aD9kZWxldGUgS3Quc3R5''@;'; put 'put ''bGU6S3Quc3R5bGU9S3Quc3R5bGUuam9pbigiOyIpLEV0LmNzcyl7dmFyIEZuPWF0LmluZGV4T2YoS3Quc3R5bGUpOy0xPT1GbiYmKGF0LnB1c2goS3Quc3R5bGUpLEZuPWF0Lmxlbmd0aC0xKSxkZWxldGUgS3Quc3R5bGUsS3QuY2xhc3M9InNqcyIrKGJ0fHwiIikrIi0iK0ZufWxyPjEmJihL''@;'; put 'put ''dC5yb3dzcGFuPWxyKSxYbj4xJiYoS3QuY29sc3Bhbj1YbiksRXQuZWRpdGFibGU/ZXI9JzxzcGFuIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+JytlcisiPC9zcGFuPiI6YnImJihLdFsiZGF0YS10Il09YnImJmJyLnR8fCJ6IixudWxsIT1ici52JiYoS3RbImRhdGEtdiJdPWJyLnYpLG51bGwh''@;'; put 'put ''PWJyLnomJihLdFsiZGF0YS16Il09YnIueikpLEt0LmlkPShFdC5pZHx8InNqcyIpKyItIitmcixrdC5wdXNoKFByKCJ0ZCIsZXIsS3QpKX19dmFyIFppLGpyPXtzdHlsZTpbXX07KFppPVllWyIhc2hlZXRGb3JtYXQiXSkmJlppLnJvdyYmKGp2KFppLnJvdyksWmkucm93LmhweCYmKGpyLnN0''@;'; put 'put ''eWxlLnB1c2goWyJoZWlnaHQiLFppLnJvdy5ocHgrInB4Il0pLGpyLmhlaWdodD1NYXRoLnJvdW5kKFppLnJvdy5ocHgpKSk7dmFyIHlpPVllWyIhcm93cyJdO2lmKHlpJiZ5aVtjdF0pe3ZhciBfYT15aVtjdF07X2EuaHB4JiYoanIuc3R5bGUucHVzaChbImhlaWdodCIsK19hLmhweCsicHgi''@;'; put 'put ''XSksanIuaGVpZ2h0PU1hdGgucm91bmQoX2EuaHB4KSksX2EuaGlkZGVuJiZqci5zdHlsZS5wdXNoKFsiZGlzcGxheSIsIm5vbmUiXSl9dmFyIHNvPVtdO3JldHVybiBqci5zdHlsZT1qci5zdHlsZS5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKGlhKXtyZXR1cm4hKHNvLmluZGV4T2YoaWFb''@;'; put 'put ''MF0pPi0xfHwoc28ucHVzaChpYVswXSksMCkpfSkubWFwKGZ1bmN0aW9uKGlhKXtyZXR1cm4gaWFbMF0rIjoiK2lhWzFdfSksMD09anIuc3R5bGUubGVuZ3RoP2RlbGV0ZSBqci5zdHlsZTpqci5zdHlsZT1qci5zdHlsZS5qb2luKCI7IiksUHIoInRyIixrdC5qb2luKCIiKSxqcil9ZnVuY3Rp''@;'; put 'put ''b24gb2UoWWUsZXQsY3QsRXQsYXQsYnQpe0V0LmZvckVhY2goZnVuY3Rpb24oanQpe2lmKGp0Ll9yZWZ8fChqdC5fcmVmPSJzdHJpbmciPT10eXBlb2YganQucmVmP01zKGp0LnJlZik6anQucmVmKSwhKGp0Ll9yZWYucy5jPmN0fHxqdC5fcmVmLmUuYzxjdHx8anQuX3JlZi5zLnI+ZXR8fGp0''@;'; put 'put ''Ll9yZWYuZS5yPGV0fHwic2NhbGUiIT09anQudCkpe2lmKCJuIiE9WWUudClyZXR1cm47dmFyIGt0O2lmKG51bGw9PWp0Ll9taW4pe2p0Ll92YWx1ZXM9W107Zm9yKHZhciBPdD1qdC5fcmVmLnMucjtPdDw9anQuX3JlZi5lLnI7KytPdClmb3IodmFyIEt0PWp0Ll9yZWYucy5jO0t0PD1qdC5f''@;'; put 'put ''cmVmLmUuYzsrK0t0KXt2YXIgVG49QXJyYXkuaXNBcnJheShidCk/KGJ0W090XXx8W10pW0t0XTpidFtxaSh7cjpPdCxjOkt0fSldO1RuJiYibiI9PVRuLnQmJmp0Ll92YWx1ZXMucHVzaChUbi52KX1pZihqdC5fdmFsdWVzLnNvcnQoZnVuY3Rpb24ocnIsU24pe3JldHVybiByci1Tbn0pLGp0''@;'; put 'put ''Ll9taW49anQuX3ZhbHVlc1swXSxqdC5fbWF4PWp0Ll92YWx1ZXMuc2xpY2UoLTEpWzBdLGp0Ll9iYW5kPWp0Ll9tYXgtanQuX21pbixqdC5jbWlkKXtzd2l0Y2goanQuY21pZC50KXtjYXNlIm51bSI6anQuX21pZD1qdC5jbWlkLnY7YnJlYWs7Y2FzZSJwZXJjZW50IjpqdC5fbWlkPWp0LmNt''@;'; put 'put ''aWQudi8xMDAqanQuX2JhbmQranQuX21pbjticmVhaztjYXNlInBlcmNlbnRpbGUiOmp0Ll9taWQ9ZnVuY3Rpb24gT3IoUyxSKXtpZigwPT1SKXJldHVybiBTWzBdO2lmKDEwMD09UilyZXR1cm4gU1tTLmxlbmd0aC0xXTt2YXIgRz1SLzEwMCooUy5sZW5ndGgtMSksUT1HLU1hdGguZmxvb3Io''@;'; put 'put ''Ryk7cmV0dXJuIFEqU1tNYXRoLmNlaWwoRyldKygxLVEpKlNbTWF0aC5mbG9vcihHKV19KGp0Ll92YWx1ZXMsanQuY21pZC52KX1qdC5fYmFuZGg9anQuX21heC1qdC5fbWlkLGp0Ll9iYW5kbD1qdC5fbWlkLWp0Ll9taW59fShrdD1qdC5jbWlkP1llLnY+PWp0Ll9taWQ/X0MoanQuY21pZC5j''@;'; put 'put ''b2xvcixqdC5jbWF4LmNvbG9yLChZZS52LWp0Ll9taWQpL2p0Ll9iYW5kaCk6X0MoanQuY21pbi5jb2xvcixqdC5jbWlkLmNvbG9yLChZZS52LWp0Ll9taW4pL2p0Ll9iYW5kbCk6X0MoanQuY21pbi5jb2xvcixqdC5jbWF4LmNvbG9yLChZZS52LWp0Ll9taW4pL2p0Ll9iYW5kKSkmJmF0LnB1''@;'; put 'put ''c2goImJhY2tncm91bmQtY29sb3I6ICMiK2t0KX19KX1mdW5jdGlvbiBnZShZZSxldCl7dmFyIGN0PXtzcGFuOmV0fHwxLHN0eWxlOiIifSxFdD1bXTtyZXR1cm4gWWUmJlllLndweCYmKGN0LndpZHRoPU1hdGgucm91bmQoNCpZZS53cHgvMyksRXQucHVzaCgid2lkdGg6IisoWWUud3B4fHww''@;'; put 'put ''KSsicHgiKSksRXQubGVuZ3RoPjAmJihjdC5zdHlsZT1FdC5qb2luKCI7IikpLFByKCJjb2wiLG51bGwsY3QpfWZ1bmN0aW9uIHBlKFllLGV0LGN0KXt2YXIgRXQ9e2JvcmRlcjowLGNlbGxwYWRkaW5nOjAsY2VsbHNwYWNpbmc6MCxzdHlsZTpbImJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZSIs''@;'; put 'put ''InRhYmxlLWxheW91dDpmaXhlZCJdLmpvaW4oIjsiKX07Y3QmJmN0LmlkJiYoRXQuaWQ9Y3QuaWQpO3ZhciBhdD1ZZVsiIWNvbHMiXSxidD1ZZVsiIXNoZWV0Rm9ybWF0Il07aWYoWWUmJmF0KXtmb3IodmFyIGp0PTAsT3Q9ZXQucy5jO090PD1ldC5lLmM7KytPdCl7dmFyIEt0PWF0W090XTtq''@;'; put 'put ''dCs9S3QmJkt0LndweD9LdC53cHg6YnQmJmJ0LmNvbCYmYnQuY29sLndweD9idC5jb2wud3B4OjUzfUV0LnN0eWxlKz0iO3dpZHRoOiIranQrInB4In12YXIgcnIsVG49WyI8dGFibGUiK0x1KEV0KSsiPiJdO2lmKFRuLnB1c2goIjxzdHlsZT50ZCB7IHBhZGRpbmctdG9wOiAxcHg7IHBhZGRp''@;'; put 'put ''bmctcmlnaHQ6MXB4OyBwYWRkaW5nLWxlZnQ6MXB4OyB0ZXh0LWFsaWduOmdlbmVyYWw7IHZlcnRpY2FsLWFsaWduOmJvdHRvbTsgYm9yZGVyOjFweCBzb2xpZDsgYm9yZGVyLWNvbG9yOiIrKGN0JiZjdC5ncmlkY29sb3I/Y3QuZ3JpZGNvbG9yOld0KFllWyIhZ3JpZGxpbmVzIl0pPyJ0cmFu''@;'; put 'put ''c3BhcmVudCI6ImJsYWNrIikrIjsgd2hpdGUtc3BhY2U6bm93cmFwOyB0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTwvc3R5bGU+IiksVG4ucHVzaCgnPGNvbGdyb3VwIHNwYW49IicrKGV0LmUuYy1ldC5zLmMrMSkrJyI+JyksYXQpe2Zvcih2YXIgU249ZXQucy5jO1NuPE1hdGgubWluKGF0Lmxl''@;'; put 'put ''bmd0aCxldC5lLmMrMSk7KytTbikhKHJyPWF0W1NuXSkmJmJ0JiZidC5jb2wmJihycj1idC5jb2wpLHJyfHwocnI9e3dweDo1M30pLFRuLnB1c2goZ2UocnIsMSkpO2V0LmUuYy1ldC5zLmMrMT5hdC5sZW5ndGgmJihycj1udWxsLGJ0JiZidC5jb2wmJihycj1idC5jb2wpLHJyfHwocnI9e3dw''@;'; put 'put ''eDo1M30pLFRuLnB1c2goZ2UocnIsZXQuZS5jLWV0LnMuYysxLWF0Lmxlbmd0aCkpKX1lbHNlIHJyPW51bGwsYnQmJmJ0LmNvbCYmKHJyPWJ0LmNvbCkscnJ8fChycj17d3B4OjUzfSksVG4ucHVzaChnZShycixldC5lLmMtZXQucy5jKzEpKTtyZXR1cm4gVG4ucHVzaCgiPC9jb2xncm91cD4i''@;'; put 'put ''KSxUbi5qb2luKCIiKX12YXIgeWU9JzxodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+PHRpdGxlPlNoZWV0SlMgVGFibGUgRXhwb3J0PC90aXRsZT48L2hlYWQ+PGJvZHk+JyxQZT0iPC9ib2R5PjwvaHRtbD4iO3JldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBHKFllLGV0KXty''@;'; put 'put ''ZXR1cm4gdGgoayhZZSxldCksZXQpfSx0b19zaGVldDprLF9yb3c6USxCRUdJTjp5ZSxFTkQ6UGUsX3ByZWFtYmxlOnBlLGh0bWxfdG9fcnM6ZnVuY3Rpb24gUihZZSl7dmFyIGV0PVtdLGN0PXt9LEV0PTA7cmV0dXJuIFllLnJlcGxhY2UoLzwoXC8/KShbXlxzPz4hXC86XSo6fCkoW15ccz8+''@;'; put 'put ''OlwvXSspW14+XSo+L2dtLGZ1bmN0aW9uKGF0LGJ0LGp0LGt0LE90KXt2YXIgVG49V24odnIoYXQpWzBdKS5yZXBsYWNlKC9bPFwvPl0vZywiIikscnI9WWUuc2xpY2UoRXQsT3QpLnJlcGxhY2UoL1xzL2csIiAiKTtzd2l0Y2gocnIubGVuZ3RoPjAmJihldC5wdXNoKHt0OiJzIix2OnJyLHM6''@;'; put 'put ''Y3R9KSxjdD1xdChjdCkpLFRuLnRvTG93ZXJDYXNlKCkpe2Nhc2UiYiI6Ii8iIT1idD9jdC5ib2xkPSEwOmRlbGV0ZSBjdC5ib2xkO2JyZWFrO2Nhc2UiaSI6Ii8iIT1idD9jdC5pdGFsaWM9ITA6ZGVsZXRlIGN0Lml0YWxpYzticmVhaztjYXNlInUiOiIvIiE9YnQ/Y3QudW5kZXJsaW5lPTE6''@;'; put 'put ''ZGVsZXRlIGN0LnVuZGVybGluZTticmVhaztjYXNlInMiOiIvIiE9YnQ/Y3Quc3RyaWtlPSEwOmRlbGV0ZSBjdC5zdHJpa2V9cmV0dXJuIEV0PU90K2F0Lmxlbmd0aCxhdH0pLGV0fSxmcm9tX3NoZWV0OmZ1bmN0aW9uIE5lKFllLGV0KXt2YXIgY3Q9ZXR8fHt9LGF0PW51bGwhPWN0LmZvb3Rl''@;'; put 'put ''cj9jdC5mb290ZXI6UGUsYnQ9W251bGwhPWN0LmhlYWRlcj9jdC5oZWFkZXI6eWUsIiJdLGp0PVtdLGt0PShuZXcgRGF0ZSkudmFsdWVPZigpO1llfHwoWWU9e30pLFllWyIhcmVmIl18fChZZVsiIXJlZiJdPSJBMTpBMSIpO3ZhciBPdD1NcyhZZVsiIXJlZiJdKTtpZihjdC5kZW5zZT1BcnJh''@;'; put 'put ''eS5pc0FycmF5KFllKSxjdC5za2lwZW5kKXt2YXIgS3Q9T3QuZS5yO2U6Zm9yKDtLdD49T3Qucy5yOy0tS3QpZm9yKHZhciBUbj1PdC5lLmM7VG4+PU90LnMuYzstLVRuKWlmKG51bGwhPSgoY3QuZGVuc2U/KFllW0t0XXx8W10pW1RuXTpZZVtxaSh7cjpLdCxjOlRufSldKXx8e30pLnYpYnJl''@;'; put 'put ''YWsgZTtPdC5lLnI9S3Q7dmFyIHJyPU90LmUuYztlOmZvcig7cnI+PU90LnMuYzstLXJyKWZvcih2YXIgU249T3QuZS5yO1NuPj1PdC5zLnI7LS1TbilpZihudWxsIT0oKGN0LmRlbnNlPyhZZVtTbl18fFtdKVtycl06WWVbcWkoe3I6U24sYzpycn0pXSl8fHt9KS52KWJyZWFrIGU7T3QuZS5j''@;'; put 'put ''PXJyfWJ0LnB1c2gocGUoWWUsT3QsY3QpKTtmb3IodmFyIGxyPU90LnMucjtscjw9T3QuZS5yOysrbHIpYnQucHVzaChRKFllLE90LGxyLGN0LGp0LGt0KSk7cmV0dXJuIGJ0LnB1c2goIjwvdGFibGU+IithdCksY3QuY3NzJiYoYnRbMV09IjxzdHlsZT5cbiIranQubWFwKGZ1bmN0aW9uKFhu''@;'; put 'put ''LEJuKXtyZXR1cm4iLnNqcyIra3QrIi0iK0JuKyIgeyIrWG4rIn0ifSkuam9pbigiXG4iKSsiPC9zdHlsZT4iKSxidC5qb2luKCIiKX19fSgpO2Z1bmN0aW9uIEFJKFMsUixrKXt2YXIgRz17fTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZT4idSIpcmV0dXJuIEc7dmFyIFE9Z2V0Q29tcHV0''@;'; put 'put ''ZWRTdHlsZShTKTtpZigoNzAwPT1RWyJmb250LXdlaWdodCJdfHwiYm9sZCI9PVFbImZvbnQtd2VpZ2h0Il0pJiYoRy5ib2xkPSEwKSwoUVsiZm9udC1zdHlsZSJdfHwiIikubWF0Y2goL2l0YWxpYy8pJiYoRy5pdGFsaWM9ITApLChRWyJ0ZXh0LWRlY29yYXRpb24iXXx8IiIpLm1hdGNoKC91''@;'; put 'put ''bmRlcmxpbmUvKSYmKEcudW5kZXJsaW5lPTEpLChRWyJ0ZXh0LWRlY29yYXRpb24iXXx8IiIpLm1hdGNoKC9saW5lLXRocm91Z2gvKSYmKEcuc3RyaWtlPTEpLHBhcnNlSW50KFFbImZvbnQtc2l6ZSJdKSYmKEcuc3o9cGFyc2VGbG9hdChRWyJmb250LXNpemUiXSkqKFFbImZvbnQtc2l6ZSJd''@;'; put 'put ''Lm1hdGNoKC9weC8pPzMvNDoxKSksUVsiZm9udC1mYW1pbHkiXSYmKEcubmFtZT1RWyJmb250LWZhbWlseSJdLnNwbGl0KCIsIilbMF0ucmVwbGFjZSgvXHMqIlxzKi9nLCIiKSksUS5jb2xvcil7dmFyIG9lPUU1KFEuY29sb3IudG9Mb3dlckNhc2UoKSwhMCk7b2U+PTAmJihHLmNvbG9yPXty''@;'; put 'put ''Z2I6b2V9KX1zd2l0Y2goUVsidGV4dC10cmFuc2Zvcm0iXSYmKEcudGV4dF90cmFuc2Zvcm09UVsidGV4dC10cmFuc2Zvcm0iXS50b0xvd2VyQ2FzZSgpKSwibm9uZSIhPShRWyJ0ZXh0LXNoYWRvdyJdfHwibm9uZSIpJiYoRy5zaGFkb3c9ITApLFFbInRleHQtYWxpZ24iXSl7Y2FzZSJjZW50''@;'; put 'put ''ZXIiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJjZW50ZXIifTticmVhaztjYXNlInJpZ2h0IjpHLmFsaWdubWVudD17aG9yaXpvbnRhbDoicmlnaHQifTticmVhaztjYXNlImxlZnQiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJsZWZ0In07YnJlYWs7Y2FzZSJqdXN0aWZ5IjpHLmFsaWdu''@;'; put 'put ''bWVudD17aG9yaXpvbnRhbDoianVzdGlmeSJ9fXN3aXRjaChRWyJ2ZXJ0aWNhbC1hbGlnbiJdKXtjYXNlInRvcCI6Y2FzZSJtaWRkbGUiOmNhc2UiYm90dG9tIjpHLmFsaWdubWVudHx8KEcuYWxpZ25tZW50PXt9KSxHLmFsaWdubWVudC52ZXJ0aWNhbD1RWyJ2ZXJ0aWNhbC1hbGlnbiJdLCJt''@;'; put 'put ''aWRkbGUiPT1HLmFsaWdubWVudC52ZXJ0aWNhbCYmKEcuYWxpZ25tZW50LnZlcnRpY2FsPSJjZW50ZXIiKTticmVhaztjYXNlInN1YiI6Y2FzZSJzdXBlciI6Ry52YWxpZ249UVsidmVydGljYWwtYWxpZ24iXSxHLnN6JiYoRy5zei89LjgzKX12YXIgZ2U9UiYmZ2V0Q29tcHV0ZWRTdHlsZShS''@;'; put 'put ''KTtyZXR1cm4gZ2UmJmsmJlImJlsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIHllPXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3BlLnNsaWNlKDEpLFBlPWdlWyJib3JkZXItIitwZSsiLXN0eWxlIl07aWYoKCJub25lIj09UGV8fCFQ''@;'; put 'put ''ZSkmJihQZT1nZVsiYm9yZGVyIit5ZSsiU3R5bGUiXSksIm5vbmUiIT1QZSYmUGUpe3ZhciBOZT1wYXJzZUludChnZVsiYm9yZGVyLSIrcGUrIi13aWR0aCJdfHxnZVsiYm9yZGVyIit5ZSsiV2lkdGgiXSwxMCksWWU9InRoaW4iO2lmKE5lPjApe3N3aXRjaChQZSl7Y2FzZSJkb3VibGUiOlll''@;'; put 'put ''PSJkb3VibGUiO2JyZWFrO2Nhc2UiZGFzaGVkIjpZZT1OZT49Mj8ibWVkaXVtRGFzaGVkIjoiZGFzaGVkIjticmVhaztjYXNlImRvdHRlZCI6WWU9TmU+PTI/Im1lZGl1bURhc2hEb3REb3QiOiJkb3R0ZWQiO2JyZWFrO2Nhc2Uic29saWQiOlllPU5lPj0zPyJ0aGljayI6TmU+PTI/Im1lZGl1''@;'; put 'put ''bSI6InRoaW4ifWlmKEdbcGVdPXtzdHlsZTpZZX0sZ2VbImJvcmRlci0iK3BlKyItY29sb3IiXXx8Z2VbImJvcmRlciIreWUrIkNvbG9yIl0pe3ZhciBldD1FNSgoZ2VbImJvcmRlci0iK3BlKyItY29sb3IiXXx8Z2VbImJvcmRlciIreWUrIkNvbG9yIl0pLnRvTG93ZXJDYXNlKCksITApO2V0''@;'; put 'put ''Pj0wJiYoR1twZV0uY29sb3I9e3JnYjpldH0pfX19fSksR31mdW5jdGlvbiBESShTLFIsayl7dmFyIEc9Uy5jaGlsZE5vZGVzO2lmKDE9PVMubm9kZVR5cGUpc3dpdGNoKFMudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtjYXNlInAiOlIubGVuZ3RoPjAmJlIucHVzaCh7dDoidCIsdjoiXG4iLHM6''@;'; put 'put ''a30pO2JyZWFrO2Nhc2Uic2VsZWN0IjpyZXR1cm4gZnVuY3Rpb24ga0koUyxSLGspe1IucHVzaCh7dDoidCIsdjpTLmNoaWxkcmVuW1Muc2VsZWN0ZWRJbmRleF0uaW5uZXJUZXh0LHM6a30pfShTLFIsayl9aWYoRy5sZW5ndGg+MCl7dmFyIFE9QUkoUyxudWxsLCExKTtrJiYoay51bmRlcmxp''@;'; put 'put ''bmUmJihRLnVuZGVybGluZT1rLnVuZGVybGluZSksay5zdHJpa2UmJihRLnN0cmlrZT1rLnN0cmlrZSkpO2Zvcih2YXIgb2U9MDtvZTxHLmxlbmd0aDsrK29lKXt0cnl7aWYoR1tvZV0uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKWNvbnRpbnVlfWNhdGNoe31ESShHW29lXSxSLFEpfWRl''@;'; put 'put ''bGV0ZSBRLnRleHRfdHJhbnNmb3JtfWVsc2UgaWYoMz09Uy5ub2RlVHlwZSl7dmFyIGdlPXt0OiJ0Iix2OlMubm9kZVZhbHVlLnJlcGxhY2UoL15bXG4gXSsvLCIgIikucmVwbGFjZSgvW1xuIF0rJC8sIiAiKSxzOmt9O3N3aXRjaChrLnRleHRfdHJhbnNmb3JtKXtjYXNlInVwcGVyY2FzZSI6''@;'; put 'put ''Z2Uudj1nZS52LnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOmdlLnY9Z2Uudi50b0xvd2VyQ2FzZSgpfShSLmxlbmd0aD4wfHxnZS52JiYiICIhPWdlLnYpJiZSLnB1c2goZ2UpfWVsc2UgMT09Uy5ub2RlVHlwZSYmImJyIj09PVMudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZS''@;'; put 'put ''LnB1c2goe3Q6InQiLHY6IlxuIixzOmt9KX1mdW5jdGlvbiBEYihTLFIsayxHLFEpe3ZhciBnZSxvZT1TLmlubmVySFRNTDtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSIpc3dpdGNoKGdlPWdldENvbXB1dGVkU3R5bGUoUyksKGdlWyJ3aGl0ZS1zcGFjZSJdfHwiIikubWF0Y2goL3By''@;'; put 'put ''ZS8pJiYob2U9b2UucmVwbGFjZSgvXG4vZywiPGJyLz4iKSksKGdlWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOm9lPW9lLnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOm9lPW9lLnRvTG93ZXJDYXNlKCl9dmFyIHBlPWZ1''@;'; put 'put ''bmN0aW9uIGtiKFMsUixrLEcpe3ZhciBRPXt0OiJzIix2OlJ9LG9lPSIiO2lmKFMpe2s9Uy5nZXRBdHRyaWJ1dGUoImRhdGEtdCIpfHxTLmdldEF0dHJpYnV0ZSgidCIpO3ZhciBnZT1TLmdldEF0dHJpYnV0ZSgiZGF0YS12Iil8fFMuZ2V0QXR0cmlidXRlKCJ2Iik7aWYobnVsbCE9KG9lPVMu''@;'; put 'put ''Z2V0QXR0cmlidXRlKCJkYXRhLXoiKXx8Uy5nZXRBdHRyaWJ1dGUoInoiKSkmJihRLno9b2UpLG51bGwhPWsmJm51bGwhPWdlKXJldHVybiBRLnQ9ayxRLnY9Z2UsUX1yZXR1cm4gbnVsbCE9UiYmKDA9PVIubGVuZ3RoP1EudD1rfHwieiI6Ry5yYXd8fCFSLnRyaW0oKS5sZW5ndGh8fCJzIj09''@;'; put 'put ''a3x8KFE9UmkoUixHKSkpLG9lJiYoUS56PW9lKSxRfShTLGlyKG9lKSxrLFEpO2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1IiYmKHBlLnM9QUkoUyxSLFEuYm9yZGVycyksZGVsZXRlIHBlLnMudGV4dF90cmFuc2Zvcm0sUy5jaGlsZE5vZGVzLmxlbmd0aD4xfHwxPT1TLmNoaWxkTm9k''@;'; put 'put ''ZXMubGVuZ3RoJiYzIT1TLmNoaWxkTm9kZXNbMF0ubm9kZVR5cGUpKXN3aXRjaChESShTLHBlLlI9W10sbnVsbCkscGUuUiYmcGUuUltwZS5SLmxlbmd0aC0xXSYmIlxuIj09cGUuUltwZS5SLmxlbmd0aC0xXS52JiZwZS5SLmxlbmd0aC0tLChnZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNlIjpwZS5SLmZvckVhY2goZnVuY3Rpb24oZXQpe2V0LnY9ZXQudi50b1VwcGVyQ2FzZSgpfSk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOnBlLlIuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQudj1ldC52LnRvTG93ZXJDYXNlKCl9KX1pZigicyI9PXBl''@;'; put 'put ''LnQpe3ZhciB5ZT1wZS52Lm1hdGNoKC9cbi8pOyF5ZSYmcGUuUiYmcGUuUi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXsic3RyaW5nIj09dHlwZW9mIGV0LnYmJmV0LnYubWF0Y2goL1xuLykmJih5ZT0hMCl9KSwicyI9PXBlLnQmJnllJiYocGUuc3x8KHBlLnM9e30pLHBlLnMuYWxpZ25tZW50fHwo''@;'; put 'put ''cGUucy5hbGlnbm1lbnQ9e30pLHBlLnMuYWxpZ25tZW50LndyYXBUZXh0PSEwKX1pZihSKXt2YXIgUGU9IiIsTmU9Ui5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQSIpO2lmKE5lJiZOZS5sZW5ndGgpZm9yKHZhciBZZT0wO1llPE5lLmxlbmd0aCYmKCFOZVtZZV0uaGFzQXR0cmlidXRlKCJocmVm''@;'; put 'put ''Iil8fCIjIj09KFBlPU5lW1llXS5nZXRBdHRyaWJ1dGUoImhyZWYiKSkuY2hhckF0KDApKTsrK1llKTtQZSYmIiMiIT1QZS5jaGFyQXQoMCkmJihwZS5sPXtUYXJnZXQ6UGV9KX1yZXR1cm4gcGV9ZnVuY3Rpb24gSWIoUyxSLGspe3ZhciBRLEc9Ui5yb3dzO2lmKCFHKXtpZihrJiZudWxsIT1r''@;'; put 'put ''Lm9yaWdpbil0aHJvdyJVbnN1cHBvcnRlZCBvcmlnaW4gd2hlbiAiK1IudGFnTmFtZSsiIGlzIG5vdCBhIFRBQkxFIjtyZXR1cm4gZnVuY3Rpb24gUW5lKFMsUixrKXtrPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoa3x8e30pKTt2YXIgb2U9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTtT''@;'; put 'put ''WyIhbWVyZ2VzIl18fChTWyIhbWVyZ2VzIl09W10pO2Zvcih2YXIgcGUsZ2U9Ui5jaGlsZHJlbix5ZT0wLFBlPTA7UGU8Z2UubGVuZ3RoOysrUGUpe3ZhciBldCxOZT1nZVtQZV0sWWU9IiI7dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9ldD1nZXRDb21wdXRlZFN0eWxlOk5lLm93''@;'; put 'put ''bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBOZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihldD1OZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe31pZighZXR8fCJub25lIiE9''@;'; put 'put ''ZXQoTmUpLmRpc3BsYXkpc3dpdGNoKE5lLnRhZ05hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJUQUJMRSI6eWU9LTEsU1siIXJlZiJdJiYoay5vcmlnaW49LTEpLEliKFMsTmUsayk7YnJlYWs7Y2FzZSJCUiI6Y2FzZSJIUiI6eWU9LTEsU1siIXJlZiJdPygrKyhvZT1NcyhTWyIhcmVmIl0pKS5l''@;'; put 'put ''LnIsU1siIXJlZiJdPXJhKG9lKSk6U1siIXJlZiJdPSJBMTpBMSI7YnJlYWs7Y2FzZSJESVYiOmNhc2UiUCI6Y2FzZSJIMSI6Y2FzZSJIMiI6Y2FzZSJIMyI6Y2FzZSJINCI6Y2FzZSJINSI6Y2FzZSJINiI6eWU9LTEscGU9RGIoTmUsbnVsbCwiIiwwLGspLFNbIiFyZWYiXT8oay5vcmlnaW49''@;'; put 'put ''LTEsZjQoUyxbW3BlXV0saykpOihTWyIhcmVmIl09IkExIixBcnJheS5pc0FycmF5KFMpPyhTWzBdfHwoU1swXT1bXSksU1swXVswXT1wZSk6Uy5BMT1wZSksU1siIXJvd3MiXXx8KFNbIiFyb3dzIl09W10pLGV0JiYob2U9TXMoU1siIXJlZiJdKSwoWWU9ZXQoTmUpLmhlaWdodCkmJiJhdXRv''@;'; put 'put ''IiE9WWUmJihTWyIhcm93cyJdW29lLmUucl09e2hwdDpwYXJzZUludChZZSwxMCl9KSk7YnJlYWs7Y2FzZSJTUEFOIjpjYXNlIkEiOmNhc2UiQiI6Y2FzZSJFTSI6Y2FzZSJJIjpjYXNlIkZPTlQiOmNhc2UiUyI6Y2FzZSJTVUIiOmNhc2UiU1VQIjpjYXNlIlUiOnBlPURiKE5lLG51bGwsIiIs''@;'; put 'put ''MCxrKSxTWyIhcmVmIl18fChTWyIhcmVmIl09IkExOkExIiksZjQoUyxbW3BlXV0se29yaWdpbjpxaSh7cjooeWU8MD8xOjApKyhvZT1NcyhTWyIhcmVmIl0pKS5lLnIsYzorK3llfSl9KTticmVhaztjYXNlIkRMIjpjYXNlIlVMIjpjYXNlIk9MIjp5ZT0tMSxjb25zb2xlLmVycm9yKCJIVE1M''@;'; put 'put ''IENvbnZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBsaXN0IGVsZW1lbnQgIitOZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpO2JyZWFrO2RlZmF1bHQ6eWU9LTEsY29uc29sZS5lcnJvcigiU2tpcHBpbmcgIitOZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpfX1yZXR1cm4gU30oUyxSLGspfXRyeXt0''@;'; put 'put ''eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSI/UT1nZXRDb21wdXRlZFN0eWxlOlIub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIFIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoUT1SLm93bmVyRG9jdW1lbnQuZGVmYXVs''@;'; put 'put ''dFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7fXZhciBvZT1rfHx7fTtudWxsIT1sZSYmKG9lLmRlbnNlPWxlKTt2YXIgZ2U9MCxwZT0wO2lmKG51bGwhPW9lLm9yaWdpbilpZigibnVtYmVyIj09dHlwZW9mIG9lLm9yaWdpbilnZT1vZS5vcmlnaW47ZWxzZXt2YXIgeWU9InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBvZS5vcmlnaW4/Tm8ob2Uub3JpZ2luKTpvZS5vcmlnaW47Z2U9eWUucixwZT15ZS5jfXZhciBQZT1NYXRoLm1pbihvZS5zaGVldFJvd3N8fDFlNyxHLmxlbmd0aCksTmU9e3M6e3I6MCxjOjB9LGU6e3I6Z2UsYzpwZX19O2lmKFNbIiFyZWYiXSl7dmFyIFllPU1zKFNbIiFyZWYi''@;'; put 'put ''XSk7TmUucy5yPU1hdGgubWluKE5lLnMucixZZS5zLnIpLE5lLnMuYz1NYXRoLm1pbihOZS5zLmMsWWUucy5jKSxOZS5lLnI9TWF0aC5tYXgoTmUuZS5yLFllLmUuciksTmUuZS5jPU1hdGgubWF4KE5lLmUuYyxZZS5lLmMpLC0xPT1nZSYmKE5lLmUucj1nZT1ZZS5lLnIrMSl9dmFyIGV0PVtd''@;'; put 'put ''LGN0PTAsRXQ9U1siIXJvd3MiXXx8KFNbIiFyb3dzIl09W10pLGF0PTAsYnQ9MCxqdD0wLGt0PTAsT3Q9MCxLdD0wO2ZvcihTWyIhY29scyJdfHwoU1siIWNvbHMiXT1bXSk7YXQ8Ry5sZW5ndGgmJmJ0PFBlOysrYXQpe2Zvcih2YXIgVG49R1thdF0scnI9VG4ucGFyZW50RWxlbWVudDsiVEFC''@;'; put 'put ''TEUiIT1yci50YWdOYW1lLnRvVXBwZXJDYXNlKCk7KXJyPXJyLnBhcmVudEVsZW1lbnQ7aWYocnI9PVIpe2U6aWYodHlwZW9mIFE8InUiKXt2YXIgU249UShUbik7aWYobnVsbD09U24pYnJlYWsgZTtpZihTbi5zdHlsZXx8KFNuLnN0eWxlPXt9KSxvZS5kaXNwbGF5JiYibm9uZSI9PShTbi5k''@;'; put 'put ''aXNwbGF5fHxTbi5zdHlsZS5kaXNwbGF5KSljb250aW51ZTsibm9uZSI9PShTbi5kaXNwbGF5fHxTbi5zdHlsZS5kaXNwbGF5KSYmKChFdFtidF18fChFdFtidF09e30pKS5oaWRkZW49ITApfXZhciBscj1Ubi5jZWxscztmb3IoanQ9a3Q9MDtqdDxsci5sZW5ndGg7KytqdCl7dmFyIFhuPWxy''@;'; put 'put ''W2p0XSxCbj1udWxsO2lmKCEodHlwZW9mIFE8InUiJiYobnVsbD09Qm4mJihCbj1RKFhuKSksQm4uc3R5bGV8fChCbi5zdHlsZT17fSksb2UuZGlzcGxheSYmbnVsbCE9Qm4mJiJub25lIj09KEJuLmRpc3BsYXl8fEJuLnN0eWxlLmRpc3BsYXkpKSkpe2ZvcihLdD0rWG4uZ2V0QXR0cmlidXRl''@;'; put 'put ''KCJjb2xzcGFuIil8fDEsY3Q9MDtjdDxldC5sZW5ndGg7KytjdCl7dmFyIGZyPWV0W2N0XTtmci5zLmM9PWt0K3BlJiZmci5zLnI8YnQrZ2UmJmJ0K2dlPD1mci5lLnImJihrdD1mci5lLmMrMS1wZSxjdD0tMSl9KChPdD0rWG4uZ2V0QXR0cmlidXRlKCJyb3dzcGFuIil8fDEpPjF8fEt0PjEp''@;'; put 'put ''JiZldC5wdXNoKHtzOntyOmJ0K2dlLGM6a3QrcGV9LGU6e3I6YnQrZ2UrKE90fHwxKS0xLGM6a3QrcGUrKEt0fHwxKS0xfX0pO3ZhciBicj1Ybi5nZXRBdHRyaWJ1dGUoInQiKXx8IiIsZXI9WG4uZ2V0QXR0cmlidXRlKCJiZ2NvbG9yIik7ZTppZih0eXBlb2YgUTwidSIpe2lmKG51bGw9PUJu''@;'; put 'put ''JiYoQm49UShYbikpLG51bGw9PUJuKWJyZWFrIGU7aWYoQm4uc3R5bGV8fChCbi5zdHlsZT17fSksMT09S3QmJkJuLndpZHRoJiYoU1siIWNvbHMiXVtrdCtwZV09U1siIWNvbHMiXVtrdCtwZV18fHt9LEJuLndpZHRoLm1hdGNoKC9weC8pP1NbIiFjb2xzIl1ba3QrcGVdLndweD1NYXRoLm1h''@;'; put 'put ''eChwYXJzZUludChCbi53aWR0aCwxMCkrNSxTWyIhY29scyJdW2t0K3BlXS53cHh8fDApOkJuLndpZHRoLm1hdGNoKC9wdC8pJiYoU1siIWNvbHMiXVtrdCtwZV0ud3B4PU1hdGgubWF4KDQqcGFyc2VJbnQoQm4ud2lkdGgsMTApLzMrNSxTWyIhY29scyJdW2t0K3BlXS53cHh8fDApKSksT3Q8''@;'; put 'put ''PTEpe0V0W2J0K2dlXXx8KEV0W2J0K2dlXT17fSk7dmFyIE1pPUJuLmhlaWdodDsoTWk9TWkubWF0Y2goL3B0Lyk/c2gocGFyc2VJbnQoTWksMTApKTpwYXJzZUludChNaSwxMCkpPihFdFtidCtnZV0uaHB4fHxzaChFdFtidCtnZV0uaHB0KXx8MCkmJihkZWxldGUgRXRbYnQrZ2VdLmhwdCxF''@;'; put 'put ''dFtidCtnZV0uaHB4PU1pKX19dmFyIEZpPVhuO2lmKFhuLmZpcnN0RWxlbWVudENoaWxkJiYxPT1Ybi5jaGlsZHJlbi5sZW5ndGgmJiJzcGFuIj09WG4uZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zm9yKHZhciBuYT0wLGNhPVhuLmNoaWxkTm9kZXMsTGk9MDtM''@;'; put 'put ''aTxjYS5sZW5ndGg7KytMaSkzPT1jYVtMaV0ubm9kZVR5cGUmJisrbmE7MD09bmEmJihYbj1Ybi5maXJzdEVsZW1lbnRDaGlsZCl9dmFyIGtyPURiKFhuLEZpLGJyLDAsb2UpO2lmKEJuKXt2YXIgVm49UShYbik7aWYoVm4mJiFWbi5zdHlsZSYmKFZuLnN0eWxlPXt9KSwoVm4mJlZuWyJiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yIl18fEJuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pJiYoa3Iuc3x8KGtyLnM9e30pLCFrci5zLmZnQ29sb3IpKXRyeXt2YXIgQnI9Vm4mJlZuWyJiYWNrZ3JvdW5kLWNvbG9yIl18fEJuWyJiYWNrZ3JvdW5kLWNvbG9yIl07QnIubWF0Y2goL3JnYmFbKF1ccyowLipbKV0vaSkm''@;'; put 'put ''JihCcj1CblsiYmFja2dyb3VuZC1jb2xvciJdKTt2YXIgX3I9RTUoQnIudG9Mb3dlckNhc2UoKSwhMCk7X3I+PTAmJihrci5zLmZnQ29sb3I9e3JnYjpfcn0pfWNhdGNoe31zd2l0Y2goQm5bInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UibWlkZGxlIjpjYXNlImJhc2VsaW5lIjprci5zfHwoa3Iu''@;'; put 'put ''cz17fSksa3Iucy5hbGlnbm1lbnR8fChrci5zLmFsaWdubWVudD17fSksa3Iucy5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciJ9fWlmKGVyJiYoa3Iuc3x8KGtyLnM9e30pLCFrci5zLmZnQ29sb3IpKXRyeXt2YXIgRm49RTUoZXIudG9Mb3dlckNhc2UoKSwhMCk7Rm4+PTAmJihrci5zLmZn''@;'; put 'put ''Q29sb3I9e3JnYjpGbn0pfWNhdGNoe31pZihvZS5kZW5zZT8oU1tidCtnZV18fChTW2J0K2dlXT1bXSksU1tidCtnZV1ba3QrcGVdPWtyKTpTW3FpKHtjOmt0K3BlLHI6YnQrZ2V9KV09a3IsT3Q+MXx8S3Q+MSlmb3IodmFyIGpyPWJ0O2pyPGJ0K090OysranIpZm9yKHZhciBaaT1rdDtaaTxr''@;'; put 'put ''dCtLdDsrK1ppKWJ0PT1qciYma3Q9PVppfHwob2UuZGVuc2U/KFNbanIrZ2VdfHwoU1tqcitnZV09W10pLFNbanIrZ2VdW1ppK3BlXT17dDoieiIsczpxdChrci5zfHx7fSl9KTpTW3FpKHtjOlppK3BlLHI6anIrZ2V9KV09e3Q6InoiLHM6cXQoa3Iuc3x8e30pfSk7TmUuZS5jPGt0K3BlJiYo''@;'; put 'put ''TmUuZS5jPWt0K3BlKSxrdCs9S3R9fSsrYnR9fWlmKGV0Lmxlbmd0aCYmKFNbIiFtZXJnZXMiXT0oU1siIW1lcmdlcyJdfHxbXSkuY29uY2F0KGV0KSksTmUuZS5yPU1hdGgubWF4KE5lLmUucixidC0xK2dlKSxTWyIhcmVmIl09cmEoTmUpLGJ0Pj1QZSYmKFNbIiFmdWxscmVmIl09cmEoKE5l''@;'; put 'put ''LmUucj1HLmxlbmd0aC1hdCtidC0xK2dlLE5lKSkpLG9lLmJvcmRlcnMpZm9yKGJ0PU5lLnMucjtidDw9TmUuZS5yOysrYnQpZm9yKGt0PU5lLnMuYztrdDw9TmUuZS5jOysra3QpaWYoIW9lLmRlbnNlKXt2YXIgeWk9U1txaSh7cjpidCxjOmt0fSldO2lmKCF5aXx8IXlpLnMpY29udGludWU7''@;'; put 'put ''aWYoYnQ+MCl7dmFyIF9hPVNbcWkoe3I6YnQtMSxjOmt0fSldO19hJiZfYS5zJiZfYS5zLmJvdHRvbSYmZGVsZXRlIHlpLnMudG9wfWlmKGt0PjApe3ZhciBzbz1TW3FpKHtyOmJ0LGM6a3QtMX0pXTtzbyYmc28ucyYmc28ucy5ib3R0b20mJmRlbGV0ZSB5aS5zLmxlZnR9fXJldHVybiBTfWZ1''@;'; put 'put ''bmN0aW9uIGp6KFMsUil7cmV0dXJuIEliKChSfHx7fSkuZGVuc2U/W106e30sUyxSKX12YXIgWFM9ZnVuY3Rpb24oKXt2YXIgUz1mdW5jdGlvbihHLFEsb2Upe3ZhciBnZT1HLnJlcGxhY2UoL1tcdFxyXG5dL2csIiAiKS50cmltKCkucmVwbGFjZSgvICsvZywiICIpLnJlcGxhY2UoLzx0ZXh0''@;'; put 'put ''OnNcLz4vZywiICIpLnJlcGxhY2UoLzx0ZXh0OnMgdGV4dDpjPSIoXGQrKSJcLz4vZyxmdW5jdGlvbihOZSxZZSl7cmV0dXJuIEFycmF5KHBhcnNlSW50KFllLDEwKSsxKS5qb2luKCIgIil9KS5yZXBsYWNlKC88dGV4dDp0YWJbXj5dKlwvPi9nLCJcdCIpLnJlcGxhY2UoLzx0ZXh0OmxpbmUt''@;'; put 'put ''YnJlYWtcLz4vZywiXG4iKSxwZT1RcihnZS5yZXBsYWNlKC88W14+XSo+L2csIiIpKSx5ZT1bXSxQZT0wO3JldHVybiBnZS5yZXBsYWNlKC8oPHRleHQ6c3Bhbi4qPz4pKC4qPyk8W1wvXXRleHQ6c3Bhbj4vZyxmdW5jdGlvbihOZSxZZSxldCxjdCl7Y3QhPVBlJiZ5ZS5wdXNoKHt0OiJzIix2''@;'; put 'put ''OlFyKGdlLnNsaWNlKFBlLGN0KSl9KTt2YXIgRXQ9e3Q6InMiLHY6UXIoZXQpfSxhdD12cihZZSlbInN0eWxlLW5hbWUiXTtyZXR1cm4gYXQmJm9lW2F0XSYmKEV0LnM9cXQob2VbYXRdKSkseWUucHVzaChFdCksUGU9Y3QrTmUubGVuZ3RoLCIifSksUGU8Z2UubGVuZ3RoJiZ5ZS5wdXNoKHt0''@;'; put 'put ''OiJzIix2OlFyKGdlLnNsaWNlKFBlKSl9KSxbcGUseWVdfSxSPXtkYXk6WyJkIiwiZGQiXSxtb250aDpbIm0iLCJtbSJdLHllYXI6WyJ5IiwieXkiXSxob3VyczpbImgiLCJoaCJdLG1pbnV0ZXM6WyJtIiwibW0iXSxzZWNvbmRzOlsicyIsInNzIl0sImFtLXBtIjpbIkEvUCIsIkFNL1BNIl0s''@;'; put 'put ''ImRheS1vZi13ZWVrIjpbImRkZCIsImRkZGQiXSxlcmE6WyJlIiwiZWUiXSxxdWFydGVyOlsiXFxRbSIsJ21cXCJ0aCBxdWFydGVyIiddfSxrPWZ1bmN0aW9uKEcsUSl7dmFyIG9lPXZyKEcuc2xpY2UoMCxHLmluZGV4T2YoIj4iKSkpLGdlPUcuc2xpY2UoRy5pbmRleE9mKCI+IikrMSkscGU9''@;'; put 'put ''e25hbWU6b2UubmFtZSxmYW1pbHk6b2UuZmFtaWx5fTtbWyJwYXJlbnQiLCJwYXJlbnQtc3R5bGUtbmFtZSJdLFsiZGF0YW5hbWUiLCJkYXRhLXN0eWxlLW5hbWUiXSxbIm1wbmFtZSIsIm1hc3Rlci1wYWdlLW5hbWUiXV0uZm9yRWFjaChmdW5jdGlvbihQZSl7b2VbUGVbMV1dJiYocGVbUGVb''@;'; put 'put ''MF1dPW9lW1BlWzFdXSl9KTt2YXIgeWU9e307Z2UucmVwbGFjZShlbixmdW5jdGlvbihQZSl7dmFyIE5lPXZyKFBlKTtpZigiPHN0eWxlOnRleHQtcHJvcGVydGllcyI9PT1OZVswXSl7aWYoTmVbImZvbnQtd2VpZ2h0Il0mJih5ZS5ib2xkPSsoImJvbGQiPT1OZVsiZm9udC13ZWlnaHQiXXx8''@;'; put 'put ''IjcwMCI9PU5lWyJmb250LXdlaWdodCJdKSksKCJpdGFsaWMiPT1OZVsiZm9udC1zdHlsZSJdfHwib2JsaXF1ZSI9PU5lWyJmb250LXN0eWxlIl0pJiYoeWUuaXRhbGljPTEpLCJub25lIiE9KE5lWyJ0ZXh0LXVuZGVybGluZS1zdHlsZSJdfHwibm9uZSIpP3llLnVuZGVybGluZT0iZG91Ymxl''@;'; put 'put ''Ij09TmVbInRleHQtdW5kZXJsaW5lLXR5cGUiXT8yOjE6KE5lWyJ0ZXh0LXVuZGVybGluZS1zdHlsZSJdfHwibm9uZSI9PU5lWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0pJiYoeWUudW5kZXJsaW5lPTApLChOZVsiZm9udC1zaXplIl18fCIiKS5tYXRjaCgvcHQkLykmJih5ZS5zej0rTmVbImZv''@;'; put 'put ''bnQtc2l6ZSJdLnJlcGxhY2UoInB0IiwiIikpLCJub25lIiE9KE5lWyJ0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdfHwibm9uZSIpJiYoeWUuc3RyaWtlPTEpLE5lWyJmb250LW5hbWUiXSYmKHllLm5hbWU9TmVbImZvbnQtbmFtZSJdKSxOZS5jb2xvcil7dmFyIFllPUU1KE5lLmNvbG9yLCEw''@;'; put 'put ''KTtZZT49MCYmKHllLmNvbG9yPVllKX1zd2l0Y2goTmVbInRleHQtcG9zaXRpb24iXSl7Y2FzZSJzdXBlciI6eWUudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSJzdWIiOnllLnZhbGlnbj0ic3ViIjticmVhaztkZWZhdWx0OihOZVsidGV4dC1wb3NpdGlvbiJdfHwiIikubWF0Y2goLyUvKSYm''@;'; put 'put ''KHllLnZhbGlnbj0iLSI9PU5lWyJ0ZXh0LXBvc2l0aW9uIl0uY2hhckF0KDApPyJzdWIiOiJzdXBlciIpfSJub25lIiE9KE5lWyJ0ZXh0LXNoYWRvdyJdfHwibm9uZSIpJiYoeWUuc2hhZG93PTEpfXJldHVybiIifSksUVtvZS5uYW1lXT15ZX07cmV0dXJuIGZ1bmN0aW9uKFEsb2Upe3ZhciBn''@;'; put 'put ''ZT1vZXx8e307bnVsbCE9bGUmJm51bGw9PWdlLmRlbnNlJiYoZ2UuZGVuc2U9bGUpO3ZhciBQZSxOZSxFdCxhdCxPdCxLdCxwZT1XUyhRKSx5ZT1bXSxZZT17bmFtZToiIn0sZXQ9IiIsY3Q9MCxidD17fSxqdD1bXSxrdD1nZS5kZW5zZT9bXTp7fSxUbj17dmFsdWU6IiJ9LHJyPSIiLFNuPTAs''@;'; put 'put ''WG49W10sQm49LTEsZnI9LTEsYnI9e3M6e3I6MWU2LGM6MWU3fSxlOntyOjAsYzowfX0sZXI9MCxNaT17fSxGaT1bXSxuYT17fSxjYT0wLExpPTAsa3I9W10sVm49MSxCcj0xLF9yPVtdLEZuPXtOYW1lczpbXX0sanI9e30sWmk9WyIiLCIiXSx5aT1bXSxfYT17fSxzbz17fSxpYT0wLExvPSIi''@;'; put 'put ''LE9hPTAsaG89ITEsSmE9ITEsQmk9MDtmb3IoWTUubGFzdEluZGV4PTAscGU9cGUucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpLnJlcGxhY2UoLzwhRE9DVFlQRVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKTtPdD1ZNS5leGVjKHBlKTspc3dpdGNoKE90WzNdPU90WzNdLnJlcGxh''@;'; put 'put ''Y2UoL18uKiQvLCIiKSl7Y2FzZSJ0YWJsZSI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOiIvIj09PU90WzFdPyhrdFsiIXJlZiJdPWJyLmUuYz49YnIucy5jJiZici5lLnI+PWJyLnMucj9yYShicik6IkExOkExIixnZS5zaGVldFJvd3M+MCYmZ2Uuc2hlZXRSb3dzPD1ici5lLnImJihrdFsi''@;'; put 'put ''IWZ1bGxyZWYiXT1rdFsiIXJlZiJdLGJyLmUucj1nZS5zaGVldFJvd3MtMSxrdFsiIXJlZiJdPXJhKGJyKSksRmkubGVuZ3RoJiYoa3RbIiFtZXJnZXMiXT1GaSksa3IubGVuZ3RoJiYoa3RbIiFyb3dzIl09a3IpLEV0Lm5hbWU9RXQuXHU1NDBkXHU3OWYwfHxFdC5uYW1lLHR5cGVvZiBKU09O''@;'; put 'put ''PCJ1IiYmSlNPTi5zdHJpbmdpZnkoRXQpLGp0LnB1c2goRXQubmFtZSksYnRbRXQubmFtZV09a3QsSmE9ITEpOiIvIiE9PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJihFdD12cihPdFswXSwhMSksQm49ZnI9LTEsYnIucy5yPWJyLnMuYz0xZTcsYnIuZS5yPWJyLmUuYz0wLGt0PWdl''@;'; put 'put ''LmRlbnNlP1tdOnt9LEZpPVtdLGtyPVtdLEphPSEwKTticmVhaztjYXNlInRhYmxlLXJvdy1ncm91cCI6Ii8iPT09T3RbMV0/LS1lcjorK2VyO2JyZWFrO2Nhc2UidGFibGUtcm93IjpjYXNlIlx1ODg0YyI6aWYoIi8iPT09T3RbMV0pe0JuKz1WbixWbj0xO2JyZWFrfWlmKChhdD12cihPdFsw''@;'; put 'put ''XSwhMSkpLlx1ODg0Y1x1NTNmNz9Cbj1hdC5cdTg4NGNcdTUzZjctMTotMT09Qm4mJihCbj0wKSwoVm49K2F0WyJudW1iZXItcm93cy1yZXBlYXRlZCJdfHwxKTwxMClmb3IoQmk9MDtCaTxWbjsrK0JpKWVyPjAmJihrcltCbitCaV09e2xldmVsOmVyfSk7ZnI9LTE7YnJlYWs7Y2FzZSJjb3Zl''@;'; put 'put ''cmVkLXRhYmxlLWNlbGwiOiIvIiE9PU90WzFdJiYrK2ZyLGdlLnNoZWV0U3R1YnMmJihnZS5kZW5zZT8oa3RbQm5dfHwoa3RbQm5dPVtdKSxrdFtCbl1bZnJdPXt0OiJ6In0pOmt0W3FpKHtyOkJuLGM6ZnJ9KV09e3Q6InoifSkscnI9IiIsWG49W107YnJlYWs7Y2FzZSJ0YWJsZS1jZWxsIjpj''@;'; put 'put ''YXNlIlx1NjU3MFx1NjM2ZSI6aWYoIi8iPT09T3RbMF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSkrK2ZyLFRuPXZyKE90WzBdLCExKSxCcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxLdD17dDoieiIsdjpudWxsfSxUbi5mb3JtdWxhJiYwIT1nZS5j''@;'; put 'put ''ZWxsRm9ybXVsYSYmKEt0LmY9aVMoUXIoVG4uZm9ybXVsYSkpKSwic3RyaW5nIj09KFRuLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8VG5bInZhbHVlLXR5cGUiXSkmJihLdC50PSJzIixLdC52PVFyKFRuWyJzdHJpbmctdmFsdWUiXXx8IiIpLGdlLmRlbnNlPyhrdFtCbl18fChrdFtCbl09''@;'; put 'put ''W10pLGt0W0JuXVtmcl09S3QpOmt0W3FpKHtyOkJuLGM6ZnJ9KV09S3QpLGZyKz1Cci0xO2Vsc2UgaWYoIi8iIT09T3RbMV0pe0JyPTE7dmFyIElzPVZuP0JuK1ZuLTE6Qm47aWYoKytmcj5ici5lLmMmJihici5lLmM9ZnIpLGZyPGJyLnMuYyYmKGJyLnMuYz1mciksQm48YnIucy5yJiYoYnIu''@;'; put 'put ''cy5yPUJuKSxJcz5ici5lLnImJihici5lLnI9SXMpLHlpPVtdLF9hPXt9LEt0PXt0OihUbj12cihPdFswXSwhMSkpLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8VG5bInZhbHVlLXR5cGUiXSx2Om51bGx9LGdlLmNlbGxGb3JtdWxhKWlmKFRuLmZvcm11bGEmJihUbi5mb3JtdWxhPVFyKFRu''@;'; put 'put ''LmZvcm11bGEpKSxUblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSYmVG5bIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0mJihjYT1wYXJzZUludChUblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsTGk9cGFyc2VJbnQoVG5bIm51bWJlci1tYXRyaXgt''@;'; put 'put ''Y29sdW1ucy1zcGFubmVkIl0sMTApfHwwLEt0LkY9cmEobmE9e3M6e3I6Qm4sYzpmcn0sZTp7cjpCbitjYS0xLGM6ZnIrTGktMX19KSxfci5wdXNoKFtuYSxLdC5GXSkpLFRuLmZvcm11bGEpS3QuZj1pUyhUbi5mb3JtdWxhKTtlbHNlIGZvcihCaT0wO0JpPF9yLmxlbmd0aDsrK0JpKUJuPj1f''@;'; put 'put ''cltCaV1bMF0ucy5yJiZCbjw9X3JbQmldWzBdLmUuciYmZnI+PV9yW0JpXVswXS5zLmMmJmZyPD1fcltCaV1bMF0uZS5jJiYoS3QuRj1fcltCaV1bMV0pO3N3aXRjaCgoVG5bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXXx8VG5bIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJihjYT1wYXJzZUlu''@;'; put 'put ''dChUblsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxMaT1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxGaS5wdXNoKG5hPXtzOntyOkJuLGM6ZnJ9LGU6e3I6Qm4rY2EtMSxjOmZyK0xpLTF9fSkpLFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJd''@;'; put 'put ''JiYoQnI9cGFyc2VJbnQoVG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0sMTApKSxLdC50KXtjYXNlImJvb2xlYW4iOkt0LnQ9ImIiLEt0LnY9dGkoVG5bImJvb2xlYW4tdmFsdWUiXSk7YnJlYWs7Y2FzZSJmbG9hdCI6Y2FzZSJwZXJjZW50YWdlIjpjYXNlImN1cnJlbmN5IjpLdC50PSJu''@;'; put 'put ''IixLdC52PXBhcnNlRmxvYXQoVG4udmFsdWUpO2JyZWFrO2Nhc2UiZGF0ZSI6S3QudD0iZCIsS3Qudj1IZShUblsiZGF0ZS12YWx1ZSJdKSxnZS5jZWxsRGF0ZXN8fChLdC50PSJuIixLdC52PVFlKEt0LnYpKSxLdC56PSJtL2QveXkiO2JyZWFrO2Nhc2UidGltZSI6S3QudD0ibiIsS3Qudj1p''@;'; put 'put ''dChUblsidGltZS12YWx1ZSJdKS84NjQwMCxnZS5jZWxsRGF0ZXMmJihLdC50PSJkIixLdC52PXVuKEt0LnYpKSxLdC56PSJISDpNTTpTUyI7YnJlYWs7Y2FzZSJudW1iZXIiOkt0LnQ9Im4iLEt0LnY9cGFyc2VGbG9hdChUbi5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6aWYoInN0cmluZyIhPT1LdC50JiYidGV4dCIhPT1LdC50JiZLdC50KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAiK0t0LnQpO0t0LnQ9InMiLG51bGwhPVRuWyJzdHJpbmctdmFsdWUiXSYmKHJyPVFyKFRuWyJzdHJpbmctdmFsdWUiXSksWG49W10pfX1lbHNl''@;'; put 'put ''e2lmKGhvPSExLCJzIj09PUt0LnQmJihLdC52PXJyfHwiIixYbi5sZW5ndGgmJihLdC5SPVhuKSxobz0wPT1TbiksanIuVGFyZ2V0JiYoS3QubD1qcikseWkubGVuZ3RoPjAmJihLdC5jPXlpLHlpPVtdKSxyciYmITEhPT1nZS5jZWxsVGV4dCYmKEt0Lnc9cnIpLGhvJiYoS3QudD0ieiIsZGVs''@;'; put 'put ''ZXRlIEt0LnYpLGdlLmNlbGxIVE1MJiYoS3QuaD1LdC5SP1Z1KEt0LlIpOmxhKCIiK0t0LnYpKSwoIWhvfHxnZS5zaGVldFN0dWJzKSYmIShnZS5zaGVldFJvd3MmJmdlLnNoZWV0Um93czw9Qm4pKWZvcih2YXIgUG49MDtQbjxWbjsrK1BuKXtpZihCcj1wYXJzZUludChUblsibnVtYmVyLWNv''@;'; put 'put ''bHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxnZS5kZW5zZSlmb3Ioa3RbQm4rUG5dfHwoa3RbQm4rUG5dPVtdKSxrdFtCbitQbl1bZnJdPTA9PVBuP0t0OnF0KEt0KTstLUJyPjA7KWt0W0JuK1BuXVtmcitCcl09cXQoS3QpO2Vsc2UgZm9yKGt0W3FpKHtyOkJuK1BuLGM6ZnJ9KV09S3Q7LS1C''@;'; put 'put ''cj4wOylrdFtxaSh7cjpCbitQbixjOmZyK0JyfSldPXF0KEt0KTtici5lLmM8PWZyJiYoYnIuZS5jPWZyKX1mcis9KEJyPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLEJyPTAsS3Q9e30scnI9IiIsWG49W119anI9e307YnJlYWs7Y2FzZSJkb2N1''@;'; put 'put ''bWVudCI6Y2FzZSJkb2N1bWVudC1jb250ZW50IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzY1x1NjU4N1x1Njg2MyI6Y2FzZSJzcHJlYWRzaGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1h''@;'; put 'put ''c3Rlci1zdHlsZXMiOmlmKCIvIj09PU90WzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09T3RbM10pdGhyb3ciQmFkIHN0YXRlOiAiK1BlfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtPdFszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYo''@;'; put 'put ''Ii8iPT09T3RbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1PdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrUGU7X2EudD1ycixYbi5sZW5ndGgmJihfYS5SPVhuKSxfYS5hPUxvLHlpLnB1c2goX2EpfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtPdFsz''@;'; put 'put ''XSwhMV0pO0xvPSIiLE9hPTAscnI9IiIsU249MCxYbj1bXTticmVhaztjYXNlImNyZWF0b3IiOiIvIj09PU90WzFdP0xvPXBlLnNsaWNlKE9hLE90LmluZGV4KTpPYT1PdC5pbmRleCtPdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJtZXRhIjpjYXNlIlx1NTE0M1x1NjU3MFx1NjM2ZSI6Y2FzZSJz''@;'; put 'put ''ZXR0aW5ncyI6Y2FzZSJjb25maWctaXRlbS1zZXQiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLWluZGV4ZWQiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLWVudHJ5IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1uYW1lZCI6Y2FzZSJzaGFwZXMiOmNhc2UiZnJhbWUiOmNhc2UidGV4dC1ib3giOmNhc2UiaW1h''@;'; put 'put ''Z2UiOmNhc2UiZGF0YS1waWxvdC10YWJsZXMiOmNhc2UibGlzdC1zdHlsZSI6Y2FzZSJmb3JtIjpjYXNlImRkZS1saW5rcyI6Y2FzZSJldmVudC1saXN0ZW5lcnMiOmNhc2UiY2hhcnQiOmlmKCIvIj09PU90WzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09T3RbM10pdGhyb3ciQmFkIHN0YXRl''@;'; put 'put ''OiAiK1BlfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtPdFszXSwhMV0pO3JyPSIiLFNuPTAsWG49W107YnJlYWs7Y2FzZSJzY2llbnRpZmljLW51bWJlciI6Y2FzZSJjdXJyZW5jeS1zeW1ib2wiOmNhc2UiY3VycmVuY3ktc3R5bGUiOmNhc2Uic2Ny''@;'; put 'put ''aXB0IjpjYXNlImxpYnJhcmllcyI6Y2FzZSJhdXRvbWF0aWMtc3R5bGVzIjpjYXNlImRlZmF1bHQtc3R5bGUiOmNhc2UicGFnZS1sYXlvdXQiOmNhc2UibWFwIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJwYXJhZ3JhcGgtcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1wcm9wZXJ0aWVzIjpjYXNlInRh''@;'; put 'put ''YmxlLWNvbHVtbi1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXJvdy1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLWNlbGwtcHJvcGVydGllcyI6Y2FzZSJmcmFjdGlvbiI6Y2FzZSJib29sZWFuLXN0eWxlIjpjYXNlImJvb2xlYW4iOmNhc2UidGV4dC1zdHlsZSI6Y2FzZSJ0ZXh0LWNvbnRlbnQiOmNh''@;'; put 'put ''c2UidGV4dC1wcm9wZXJ0aWVzIjpjYXNlImVtYmVkZGVkLXRleHQiOmNhc2UiYm9keSI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2MiOmNhc2UiZm9ybXMiOmNhc2UidGFibGUtY29sdW1uIjpjYXNlInRhYmxlLWhlYWRlci1yb3dzIjpjYXNlInRhYmxlLXJvd3MiOmNhc2UidGFibGUt''@;'; put 'put ''Y29sdW1uLWdyb3VwIjpjYXNlInRhYmxlLWhlYWRlci1jb2x1bW5zIjpjYXNlInRhYmxlLWNvbHVtbnMiOmNhc2UibnVsbC1kYXRlIjpjYXNlImdyYXBoaWMtcHJvcGVydGllcyI6Y2FzZSJjYWxjdWxhdGlvbi1zZXR0aW5ncyI6Y2FzZSJuYW1lZC1leHByZXNzaW9ucyI6Y2FzZSJsYWJlbC1y''@;'; put 'put ''YW5nZSI6Y2FzZSJsYWJlbC1yYW5nZXMiOmNhc2UibmFtZWQtZXhwcmVzc2lvbiI6Y2FzZSJzb3J0IjpjYXNlInNvcnQtYnkiOmNhc2Uic29ydC1ncm91cHMiOmNhc2UidGFiIjpjYXNlImxpbmUtYnJlYWsiOmNhc2Uic3BhbiI6Y2FzZSJzIjpjYXNlImRhdGUiOmNhc2Uib2JqZWN0IjpjYXNl''@;'; put 'put ''InRpdGxlIjpjYXNlIlx1NjgwN1x1OTg5OCI6Y2FzZSJkZXNjIjpjYXNlImJpbmFyeS1kYXRhIjpjYXNlInRhYmxlLXNvdXJjZSI6Y2FzZSJzY2VuYXJpbyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UiY29udGVudC12YWxpZGF0aW9ucyI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb24iOmNhc2UiaGVs''@;'; put 'put ''cC1tZXNzYWdlIjpjYXNlImVycm9yLW1lc3NhZ2UiOmNhc2UiZGF0YWJhc2UtcmFuZ2VzIjpjYXNlImZpbHRlciI6Y2FzZSJmaWx0ZXItYW5kIjpjYXNlImZpbHRlci1vciI6Y2FzZSJmaWx0ZXItY29uZGl0aW9uIjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUtYnVsbGV0IjpjYXNlImxpc3QtbGV2''@;'; put 'put ''ZWwtc3R5bGUtbnVtYmVyIjpjYXNlImxpc3QtbGV2ZWwtcHJvcGVydGllcyI6Y2FzZSJzZW5kZXItZmlyc3RuYW1lIjpjYXNlInNlbmRlci1sYXN0bmFtZSI6Y2FzZSJzZW5kZXItaW5pdGlhbHMiOmNhc2Uic2VuZGVyLXRpdGxlIjpjYXNlInNlbmRlci1wb3NpdGlvbiI6Y2FzZSJzZW5kZXIt''@;'; put 'put ''ZW1haWwiOmNhc2Uic2VuZGVyLXBob25lLXByaXZhdGUiOmNhc2Uic2VuZGVyLWZheCI6Y2FzZSJzZW5kZXItY29tcGFueSI6Y2FzZSJzZW5kZXItcGhvbmUtd29yayI6Y2FzZSJzZW5kZXItc3RyZWV0IjpjYXNlInNlbmRlci1jaXR5IjpjYXNlInNlbmRlci1wb3N0YWwtY29kZSI6Y2FzZSJz''@;'; put 'put ''ZW5kZXItY291bnRyeSI6Y2FzZSJzZW5kZXItc3RhdGUtb3ItcHJvdmluY2UiOmNhc2UiYXV0aG9yLW5hbWUiOmNhc2UiYXV0aG9yLWluaXRpYWxzIjpjYXNlImNoYXB0ZXIiOmNhc2UiZmlsZS1uYW1lIjpjYXNlInRlbXBsYXRlLW5hbWUiOmNhc2Uic2hlZXQtbmFtZSI6Y2FzZSJldmVudC1s''@;'; put 'put ''aXN0ZW5lciI6Y2FzZSJpbml0aWFsLWNyZWF0b3IiOmNhc2UiY3JlYXRpb24tZGF0ZSI6Y2FzZSJwcmludC1kYXRlIjpjYXNlImdlbmVyYXRvciI6Y2FzZSJkb2N1bWVudC1zdGF0aXN0aWMiOmNhc2UidXNlci1kZWZpbmVkIjpjYXNlImVkaXRpbmctZHVyYXRpb24iOmNhc2UiZWRpdGluZy1j''@;'; put 'put ''eWNsZXMiOmNhc2UiY29uZmlnLWl0ZW0iOmNhc2UicGFnZS1udW1iZXIiOmNhc2UicGFnZS1jb3VudCI6Y2FzZSJ0aW1lIjpjYXNlImNlbGwtcmFuZ2Utc291cmNlIjpjYXNlImRldGVjdGl2ZSI6Y2FzZSJvcGVyYXRpb24iOmNhc2UiaGlnaGxpZ2h0ZWQtcmFuZ2UiOmNhc2UiZGF0YS1waWxv''@;'; put 'put ''dC10YWJsZSI6Y2FzZSJzb3VyY2UtY2VsbC1yYW5nZSI6Y2FzZSJzb3VyY2Utc2VydmljZSI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkIjpjYXNlImRhdGEtcGlsb3QtbGV2ZWwiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbHMiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbCI6Y2FzZSJkYXRhLXBp''@;'; put 'put ''bG90LW1lbWJlcnMiOmNhc2UiZGF0YS1waWxvdC1tZW1iZXIiOmNhc2UiZGF0YS1waWxvdC1kaXNwbGF5LWluZm8iOmNhc2UiZGF0YS1waWxvdC1zb3J0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1sYXlvdXQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkLXJlZmVyZW5jZSI6Y2FzZSJkYXRh''@;'; put 'put ''LXBpbG90LWdyb3VwcyI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAtbWVtYmVyIjpjYXNlInJlY3QiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbHMiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbCI6Y2FzZSJkZGUtbGluayI6Y2FzZSJkZGUtc291cmNlIjpj''@;'; put 'put ''YXNlInByb3BlcnRpZXMiOmNhc2UicHJvcGVydHkiOmNhc2UidGFibGUtcHJvdGVjdGlvbiI6Y2FzZSJkYXRhLXBpbG90LWdyYW5kLXRvdGFsIjpjYXNlIm9mZmljZS1kb2N1bWVudC1jb21tb24tYXR0cnMiOmJyZWFrO2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlInBlcmNlbnRhZ2Utc3R5bGUi''@;'; put 'put ''OmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjppZigiLyI9PT1PdFsxXSl7aWYoTWlbWWUubmFtZV09ZXQsKFBlPXllLnBvcCgpKVswXSE9PU90WzNdKXRocm93IkJhZCBzdGF0ZTogIitQZX1lbHNlIi8iIT09T3RbMF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSYmKGV0PSIiLFll''@;'; put 'put ''PXZyKE90WzBdLCExKSx5ZS5wdXNoKFtPdFszXSwhMF0pKTticmVhaztjYXNlInN0eWxlIjoiLz4iPT09T3RbMF0uc2xpY2UoLTIpP2soT3RbMF0sc28pOiIvIj09T3RbMV0/ayhwZS5zbGljZShpYSxPdC5pbmRleCtPdFswXS5sZW5ndGgpLHNvKTppYT1PdC5pbmRleDticmVhaztjYXNlIm51''@;'; put 'put ''bWJlciI6Y2FzZSJkYXkiOmNhc2UibW9udGgiOmNhc2UieWVhciI6Y2FzZSJlcmEiOmNhc2UiZGF5LW9mLXdlZWsiOmNhc2Uid2Vlay1vZi15ZWFyIjpjYXNlInF1YXJ0ZXIiOmNhc2UiaG91cnMiOmNhc2UibWludXRlcyI6Y2FzZSJzZWNvbmRzIjpjYXNlImFtLXBtIjpzd2l0Y2goeWVbeWUu''@;'; put 'put ''bGVuZ3RoLTFdWzBdKXtjYXNlInRpbWUtc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6TmU9dnIoT3RbMF0sITEpLGV0Kz1SW090WzNdXVsibG9uZyI9PT1OZS5zdHlsZT8xOjBdfWJyZWFrO2Nhc2UidGV4dCI6aWYoIi8+Ij09PU90WzBdLnNsaWNlKC0yKSlicmVhaztpZigiLyI9PT1PdFsxXSlz''@;'; put 'put ''d2l0Y2goeWVbeWUubGVuZ3RoLTFdWzBdKXtjYXNlIm51bWJlci1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmV0Kz1wZS5zbGljZShjdCxPdC5pbmRleCl9ZWxzZSBjdD1PdC5pbmRleCtPdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6Wmk9b2Io''@;'; put 'put ''KE5lPXZyKE90WzBdLCExKSlbImNlbGwtcmFuZ2UtYWRkcmVzcyJdKTt2YXIgV289e05hbWU6TmUubmFtZSxSZWY6WmlbMF0rIiEiK1ppWzFdfTtKYSYmKFdvLlNoZWV0PWp0Lmxlbmd0aCksRm4uTmFtZXMucHVzaChXbyk7YnJlYWs7Y2FzZSJwIjpjYXNlIlx1NjU4N1x1NjcyY1x1NGUzMiI6''@;'; put 'put ''aWYoWyJtYXN0ZXItc3R5bGVzIl0uaW5kZXhPZih5ZVt5ZS5sZW5ndGgtMV1bMF0pPi0xKWJyZWFrO2lmKCIvIiE9PU90WzFdfHxUbiYmVG5bInN0cmluZy12YWx1ZSJdKXZyKE90WzBdLCExKSxTbj1PdC5pbmRleCtPdFswXS5sZW5ndGg7ZWxzZXt2YXIgaHI9UyhwZS5zbGljZShTbixPdC5p''@;'; put 'put ''bmRleCksMCxzbyk7cnI9KHJyLmxlbmd0aD4wP3JyKyJcbiI6IiIpK2hyWzBdLFhuPWhyWzFdfWJyZWFrO2Nhc2UiZGF0YWJhc2UtcmFuZ2UiOmlmKCIvIj09PU90WzFdKWJyZWFrO3RyeXtidFsoWmk9b2IodnIoT3RbMF0pWyJ0YXJnZXQtcmFuZ2UtYWRkcmVzcyJdKSlbMF1dWyIhYXV0b2Zp''@;'; put 'put ''bHRlciJdPXtyZWY6WmlbMV19fWNhdGNoe31icmVhaztjYXNlImEiOmlmKCIvIiE9PU90WzFdKXtpZighKGpyPXZyKE90WzBdLCExKSkuaHJlZilicmVhaztqci5UYXJnZXQ9UXIoanIuaHJlZiksZGVsZXRlIGpyLmhyZWYsIiMiPT1qci5UYXJnZXQuY2hhckF0KDApJiZqci5UYXJnZXQuaW5k''@;'; put 'put ''ZXhPZigiLiIpPi0xPyhaaT1vYihqci5UYXJnZXQuc2xpY2UoMSkpLGpyLlRhcmdldD0iIyIrWmlbMF0rIiEiK1ppWzFdKTpqci5UYXJnZXQubWF0Y2goL15cLlwuW1xcXC9dLykmJihqci5UYXJnZXQ9anIuVGFyZ2V0LnNsaWNlKDMpKX1icmVhaztkZWZhdWx0OnN3aXRjaChPdFsyXSl7Y2Fz''@;'; put 'put ''ZSJkYzoiOmNhc2UiY2FsY2V4dDoiOmNhc2UibG9leHQ6IjpjYXNlIm9vbzoiOmNhc2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxlOiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6IjpjYXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6''@;'; put 'put ''aWYoZ2UuV1RGKXRocm93IG5ldyBFcnJvcihPdCl9fXZhciBRbD17U2hlZXRzOmJ0LFNoZWV0TmFtZXM6anQsV29ya2Jvb2s6Rm59O3JldHVybiBnZS5ib29rU2hlZXRzJiZkZWxldGUgUWwuU2hlZXRzLFFsfX0oKTtmdW5jdGlvbiBJSShTLFIpe3JldHVybiBYUyhTLFIpfXZhciBVej1mdW5j''@;'; put 'put ''dGlvbigpe3ZhciBTPVsiICA8b2ZmaWNlOm1hc3Rlci1zdHlsZXM+IiwnICAgIDxzdHlsZTptYXN0ZXItcGFnZSBzdHlsZTpuYW1lPSJtcDEiIHN0eWxlOnBhZ2UtbGF5b3V0LW5hbWU9Im1wMSI+JywiICAgICAgPHN0eWxlOmhlYWRlci8+IiwnICAgICAgPHN0eWxlOmhlYWRlci1sZWZ0IHN0''@;'; put 'put ''eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgICAgPHN0eWxlOmZvb3Rlci8+IiwnICAgICAgPHN0eWxlOmZvb3Rlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgIDwvc3R5bGU6bWFzdGVyLXBhZ2U+IiwiICA8L29mZmljZTptYXN0ZXItc3R5bGVzPiJdLmpvaW4oIlxuIiks''@;'; put 'put ''Uj0iPG9mZmljZTpkb2N1bWVudC1zdHlsZXMgIitMdSh7InhtbG5zOm9mZmljZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjAiLCJ4''@;'; put 'put ''bWxuczpzdHlsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4dCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1''@;'; put 'put ''bWVudDp4bWxuczpkcmF3aW5nOjEuMCIsInhtbG5zOmZvIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp4c2wtZm8tY29tcGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJs''@;'; put 'put ''Lm9yZy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6bnVtYmVyIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4''@;'; put 'put ''bWxuczpvZiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2Y6MS4yIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSkrIj5cbiIrUysiXG48L29mZmljZTpkb2N1bWVudC1zdHlsZXM+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSWkrUn19KCksUDg9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgUz1mdW5jdGlvbihwZSx5ZSl7cmV0dXJuIExyKHBlKS5yZXBsYWNlKC8gICsvZyxmdW5jdGlvbihQZSl7cmV0dXJuJzx0ZXh0OnMgdGV4dDpjPSInK1BlLmxlbmd0aCsnIi8+J30pLnJlcGxhY2UoL1x0L2csIjx0ZXh0OnRhYi8+IikucmVwbGFjZSgvXG4vZyx5ZT8iPHRleHQ6bGlu''@;'; put 'put ''ZS1icmVhay8+IjoiPC90ZXh0OnA+PHRleHQ6cD4iKS5yZXBsYWNlKC9eIC8sIjx0ZXh0OnMvPiIpLnJlcGxhY2UoLyAkLywiPHRleHQ6cy8+Iil9LFI9ZnVuY3Rpb24ocGUpe3JldHVybiBwZS5tYXAoZnVuY3Rpb24oeWUpe3ZhciBQZT0iIjtyZXR1cm4gbnVsbCE9eWUub2RzJiYoUGUrPScg''@;'; put 'put ''dGV4dDpzdHlsZS1uYW1lPSJUJyt5ZS5vZHMrJyInKSx5ZS52PyI8dGV4dDpzcGFuIitQZSsiPiIrUyh5ZS52LCEwKSsiPC90ZXh0OnNwYW4+IjoiIn0pLmpvaW4oIiIpfSxrPSIgICAgICAgICAgPHRhYmxlOnRhYmxlLWNlbGwgLz5cbiIsUT1mdW5jdGlvbihwZSx5ZSxQZSl7dmFyIE5lPVtd''@;'; put 'put ''O05lLnB1c2goJyAgICAgIDx0YWJsZTp0YWJsZSB0YWJsZTpuYW1lPSInK0xyKHllLlNoZWV0TmFtZXNbUGVdKSsnIiB0YWJsZTpzdHlsZS1uYW1lPSJ0YTEiPlxuJyk7dmFyIFllPTAsZXQ9MCxjdD1NcyhwZVsiIXJlZiJdfHwiQTEiKSxFdD1wZVsiIW1lcmdlcyJdfHxbXSxhdD0wLGJ0PUFy''@;'; put 'put ''cmF5LmlzQXJyYXkocGUpO2lmKHBlWyIhY29scyJdKWZvcihldD0wO2V0PD1jdC5lLmM7KytldClOZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1jb2x1bW4iKyhwZVsiIWNvbHMiXVtldF0/JyB0YWJsZTpzdHlsZS1uYW1lPSJjbycrcGVbIiFjb2xzIl1bZXRdLm9kcysnIic6IiIpKyI+''@;'; put 'put ''PC90YWJsZTp0YWJsZS1jb2x1bW4+XG4iKTt2YXIga3Q9cGVbIiFyb3dzIl18fFtdO2ZvcihZZT0wO1llPGN0LnMucjsrK1llKU5lLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKGt0W1llXT8nIHRhYmxlOnN0eWxlLW5hbWU9InJvJytrdFtZZV0ub2RzKyciJzoiIikrIj48L3Rh''@;'; put 'put ''YmxlOnRhYmxlLXJvdz5cbiIpO2Zvcig7WWU8PWN0LmUucjsrK1llKXtmb3IoTmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93Iisoa3RbWWVdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK2t0W1llXS5vZHMrJyInOiIiKSsiPlxuIiksZXQ9MDtldDxjdC5zLmM7KytldClOZS5wdXNo''@;'; put 'put ''KGspO2Zvcig7ZXQ8PWN0LmUuYzsrK2V0KXt2YXIgT3Q9ITEsS3Q9e30sVG49IiI7Zm9yKGF0PTA7YXQhPUV0Lmxlbmd0aDsrK2F0KWlmKCEoRXRbYXRdLnMuYz5ldHx8RXRbYXRdLnMucj5ZZXx8RXRbYXRdLmUuYzxldHx8RXRbYXRdLmUucjxZZSkpeyhFdFthdF0ucy5jIT1ldHx8RXRbYXRd''@;'; put 'put ''LnMuciE9WWUpJiYoT3Q9ITApLEt0WyJ0YWJsZTpudW1iZXItY29sdW1ucy1zcGFubmVkIl09RXRbYXRdLmUuYy1FdFthdF0ucy5jKzEsS3RbInRhYmxlOm51bWJlci1yb3dzLXNwYW5uZWQiXT1FdFthdF0uZS5yLUV0W2F0XS5zLnIrMTticmVha31pZihPdClOZS5wdXNoKCIgICAgICAgICAg''@;'; put 'put ''PHRhYmxlOmNvdmVyZWQtdGFibGUtY2VsbC8+XG4iKTtlbHNle3ZhciBycj1xaSh7cjpZZSxjOmV0fSksU249YnQ/KHBlW1llXXx8W10pW2V0XTpwZVtycl07aWYoU24mJlNuLmYmJihLdFsidGFibGU6Zm9ybXVsYSJdPUxyKFo0KFNuLmYpKSxTbi5GJiZTbi5GLnNsaWNlKDAscnIubGVuZ3Ro''@;'; put 'put ''KT09cnIpKXt2YXIgbHI9TXMoU24uRik7S3RbInRhYmxlOm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl09bHIuZS5jLWxyLnMuYysxLEt0WyJ0YWJsZTpudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdPWxyLmUuci1sci5zLnIrMX1pZihTbil7c3dpdGNoKFNuLnQpe2Nhc2UiYiI6''@;'; put 'put ''VG49U24udj8iVFJVRSI6IkZBTFNFIixLdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iYm9vbGVhbiIsS3RbIm9mZmljZTpib29sZWFuLXZhbHVlIl09U24udj8idHJ1ZSI6ImZhbHNlIjticmVhaztjYXNlIm4iOlRuPVNuLnd8fFN0cmluZyhTbi52fHwwKSxLdFsib2ZmaWNlOnZhbHVlLXR5cGUi''@;'; put 'put ''XT0iZmxvYXQiLEt0WyJvZmZpY2U6dmFsdWUiXT1Tbi52fHwwO2JyZWFrO2Nhc2UicyI6Y2FzZSJzdHIiOlRuPVNuLnYsS3RbIm9mZmljZTp2YWx1ZS10eXBlIl09InN0cmluZyI7YnJlYWs7Y2FzZSJkIjpUbj1Tbi53fHxIZShTbi52KS50b0lTT1N0cmluZygpLEt0WyJvZmZpY2U6dmFsdWUt''@;'; put 'put ''dHlwZSJdPSJkYXRlIixLdFsib2ZmaWNlOmRhdGUtdmFsdWUiXT1IZShTbi52KS50b0lTT1N0cmluZygpLEt0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlMSI7YnJlYWs7ZGVmYXVsdDpOZS5wdXNoKGspO2NvbnRpbnVlfW51bGwhPVNuLm9kcyYmIUt0WyJ0YWJsZTpzdHlsZS1uYW1lIl0mJihL''@;'; put 'put ''dFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZSIrU24ub2RzKTt2YXIgWG49IVNuLlJ8fFNuLmwmJlNuLmwuVGFyZ2V0P1MoVG4pOlIoU24uUik7aWYoU24ubCYmU24ubC5UYXJnZXQpe3ZhciBCbj1Tbi5sLlRhcmdldDsiIyIhPShCbj0iIyI9PUJuLmNoYXJBdCgwKT8iIyIrZ0QoQm4uc2xpY2Uo''@;'; put 'put ''MSkpOkJuKS5jaGFyQXQoMCkmJiFCbi5tYXRjaCgvXlx3KzovKSYmKEJuPSIuLi8iK0JuKSxYbj1QcigidGV4dDphIixYbix7InhsaW5rOmhyZWYiOkJuLnJlcGxhY2UoLyYvZywiJmFtcDsiKX0pfU5lLnB1c2goIiAgICAgICAgICAiK1ByKCJ0YWJsZTp0YWJsZS1jZWxsIixQcigidGV4dDpw''@;'; put 'put ''IixYbix7fSksS3QpKyJcbiIpfWVsc2UgTmUucHVzaChrKX19TmUucHVzaCgiICAgICAgICA8L3RhYmxlOnRhYmxlLXJvdz5cbiIpfXJldHVybiBOZS5wdXNoKCIgICAgICA8L3RhYmxlOnRhYmxlPlxuIiksTmUuam9pbigiIil9LG9lPXtjZW50ZXI6ImNlbnRlciIsbGVmdDoic3RhcnQiLHJp''@;'; put 'put ''Z2h0OiJlbmQifTtyZXR1cm4gZnVuY3Rpb24oeWUsUGUpe3ZhciBOZT1bSWldLFllPUx1KHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50''@;'; put 'put ''OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2Fz''@;'; put 'put ''aXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInht''@;'; put 'put ''bG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczptZXRhIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0''@;'; put 'put ''eWxlOjEuMCIsInhtbG5zOnByZXNlbnRhdGlvbiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6cHJlc2VudGF0aW9uOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6''@;'; put 'put ''Y2hhcnQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNoYXJ0OjEuMCIsInhtbG5zOmRyM2QiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyM2Q6MS4wIiwieG1sbnM6bWF0aCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRo''@;'; put 'put ''TUwiLCJ4bWxuczpmb3JtIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpmb3JtOjEuMCIsInhtbG5zOnNjcmlwdCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c2NyaXB0OjEuMCIsInhtbG5zOm9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9y''@;'; put 'put ''Zy8yMDA0L29mZmljZSIsInhtbG5zOm9vb3ciOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC93cml0ZXIiLCJ4bWxuczpvb29jIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvY2FsYyIsInhtbG5zOmRvbSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIsInhtbG5z''@;'; put 'put ''Onhmb3JtcyI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDIveGZvcm1zIiwieG1sbnM6eHNkIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIsInhtbG5zOnNoZWV0IjoidXJuOm9h''@;'; put 'put ''c2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDpzaDMzdGpzOjEuMCIsInhtbG5zOnJwdCI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA1L3JlcG9ydCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJ4bWxuczp4aHRtbCI6Imh0dHA6''@;'; put 'put ''Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJ4bWxuczpncmRkbCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvZy9kYXRhLXZpZXcjIiwieG1sbnM6dGFibGVvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwOS90YWJsZSIsInhtbG5zOmRyYXdvb28iOiJodHRwOi8vb3Blbm9mZmljZS5v''@;'; put 'put ''cmcvMjAxMC9kcmF3IiwieG1sbnM6Y2FsY2V4dCI6InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpjYWxjOnhtbG5zOmNhbGNleHQ6MS4wIiwieG1sbnM6bG9leHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6b2Zm''@;'; put 'put ''aWNlOnhtbG5zOmxvZXh0OjEuMCIsInhtbG5zOmZpZWxkIjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9vby1tcy1pbnRlcm9wOnhtbG5zOmZpZWxkOjEuMCIsInhtbG5zOmZvcm14IjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9veG1sLW9kZi1pbnRl''@;'; put 'put ''cm9wOnhtbG5zOmZvcm06MS4wIiwieG1sbnM6Y3NzM3QiOiJodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRleHQvIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSksZXQ9THUoeyJ4bWxuczpjb25maWciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNvbmZpZzoxLjAi''@;'; put 'put ''LCJvZmZpY2U6bWltZXR5cGUiOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0In0pOyJmb2RzIj09UGUuYm9va1R5cGU/KE5lLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQiK1llK2V0KyI+XG4iKSxOZS5wdXNoKFI2KCkucmVwbGFjZSgvb2ZmaWNlOmRvY3Vt''@;'; put 'put ''ZW50LW1ldGEvZywib2ZmaWNlOm1ldGEiKSkpOk5lLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQtY29udGVudCIrWWUrIj5cbiIpLGZ1bmN0aW9uKHBlLHllKXt2YXIgUGU9W10sTmU9e307UGUucHVzaCgiIDxvZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpLFBlLnB1c2goJyAgPG51bWJlcjpk''@;'; put 'put ''YXRlLXN0eWxlIHN0eWxlOm5hbWU9Ik4zNyIgbnVtYmVyOmF1dG9tYXRpYy1vcmRlcj0idHJ1ZSI+XG4nKSxQZS5wdXNoKCcgICA8bnVtYmVyOm1vbnRoIG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksUGUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksUGUucHVz''@;'; put 'put ''aCgnICAgPG51bWJlcjpkYXkgbnVtYmVyOnN0eWxlPSJsb25nIi8+XG4nKSxQZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4iKSxQZS5wdXNoKCIgICA8bnVtYmVyOnllYXIvPlxuIiksUGUucHVzaCgiICA8L251bWJlcjpkYXRlLXN0eWxlPlxuIik7dmFyIFllPTA7''@;'; put 'put ''eWUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oYXQpe3JldHVybiB5ZS5TaGVldHNbYXRdfSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYoYXQmJmF0WyIhY29scyJdKWZvcih2YXIgYnQ9MDtidDxhdFsiIWNvbHMiXS5sZW5ndGg7KytidClpZihhdFsiIWNvbHMiXVtidF0pe3ZhciBqdD1hdFsi''@;'; put 'put ''IWNvbHMiXVtidF07aWYobnVsbD09anQud2lkdGgmJm51bGw9PWp0LndweCYmbnVsbD09anQud2NoKWNvbnRpbnVlO1EwKGp0KSxqdC5vZHM9WWU7dmFyIGt0PWF0WyIhY29scyJdW2J0XS53cHgrInB4IjtQZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJjbycrWWUrJyIgc3R5''@;'; put 'put ''bGU6ZmFtaWx5PSJ0YWJsZS1jb2x1bW4iPlxuJyksUGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6Y29sdW1uLXdpZHRoPSInK2t0KyciLz5cbicpLFBlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrWWV9''@;'; put 'put ''fSk7dmFyIGV0PTA7eWUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oYXQpe3JldHVybiB5ZS5TaGVldHNbYXRdfSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYoYXQmJmF0WyIhcm93cyJdKWZvcih2YXIgYnQ9MDtidDxhdFsiIXJvd3MiXS5sZW5ndGg7KytidClpZihhdFsiIXJvd3MiXVtidF0p''@;'; put 'put ''e2F0WyIhcm93cyJdW2J0XS5vZHM9ZXQ7dmFyIGp0PWF0WyIhcm93cyJdW2J0XS5ocHgrInB4IjtQZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJybycrZXQrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1yb3ciPlxuJyksUGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXJvdy1wcm9w''@;'; put 'put ''ZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6cm93LWhlaWdodD0iJytqdCsnIi8+XG4nKSxQZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK2V0fX0pLFBlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InRhMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZSIgc3R5''@;'; put 'put ''bGU6bWFzdGVyLXBhZ2UtbmFtZT0ibXAxIj5cbicpLFBlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1wcm9wZXJ0aWVzIHRhYmxlOmRpc3BsYXk9InRydWUiIHN0eWxlOndyaXRpbmctbW9kZT0ibHItdGIiLz5cbicpLFBlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLFBlLnB1c2goJyAgPHN0''@;'; put 'put ''eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNlMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jZWxsIiBzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZT0iRGVmYXVsdCIgc3R5bGU6ZGF0YS1zdHlsZS1uYW1lPSJOMzciLz5cbicpO3ZhciBjdD0yO2V0PTAseWUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oYXQp''@;'; put 'put ''e3JldHVybiB5ZS5TaGVldHNbYXRdfSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYoYXQpZm9yKHZhciBidD0wLGp0PTAsa3Q9TXMoYXRbIiFyZWYiXSksT3Q9QXJyYXkuaXNBcnJheShhdCk7YnQ8PWt0LmUucjsrK2J0KWZvcihqdD0wO2p0PD1rdC5lLmM7KytqdCl7dmFyIEt0PXFpKHtyOmJ0''@;'; put 'put ''LGM6anR9KSxUbj1PdD8oYXRbYnRdfHxbXSlbanRdOmF0W0t0XTtpZihUbiYmKFRuLnN8fFRuLlIpKXt2YXIgcnI9W107VG4ucyYmcnIucHVzaChbVG4sITBdKSxUbi5SJiZUbi5SLmZvckVhY2goZnVuY3Rpb24oU24pe1NuJiZTbi5zJiZyci5wdXNoKFtTbiwhMV0pfSkscnIuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihTbil7dmFyIGxyPVNuWzBdLFhuPWxyLnMsQm49IiIsZnI9eyJzdHlsZTpuYW1lIjooU25bMV0/ImNlIjoiVCIpK2N0LCJzdHlsZTpmYW1pbHkiOlNuWzFdPyJ0YWJsZS1jZWxsIjoidGV4dCJ9O1NuWzFdJiYoZnJbInN0eWxlOnBhcmVudC1zdHlsZS1uYW1lIl09IkRlZmF1bHQi''@;'; put 'put ''LGZyWyJzdHlsZTpkYXRhLXN0eWxlLW5hbWUiXT0iTjAiKTt2YXIgYnI9e30sZXI9ITEsTWk9e30sRmk9ITEsbmE9e30sY2E9ITE7aWYoWG4uY29sb3ImJihNaVsiZm86Y29sb3IiXT0iIyIrUDAoWG4uY29sb3IucmdiKSxGaT0hMCksWG4uc3omJihNaVsiZm86Zm9udC1zaXplIl09WG4uc3or''@;'; put 'put ''InB0IixGaT0hMCksWG4uYm9sZCYmKE1pWyJmbzpmb250LXdlaWdodCJdPSJib2xkIixGaT0hMCksWG4uaXRhbGljJiYoTWlbImZvOmZvbnQtc3R5bGUiXT0iaXRhbGljIixGaT0hMCksWG4ubmFtZSYmKE5lW1huLm5hbWVdfHwoTmVbWG4ubmFtZV09WG4ubmFtZS5tYXRjaCgvIC8pPyImYXBv''@;'; put 'put ''czsiK1huLm5hbWUrIiZhcG9zOyI6WG4ubmFtZSksTWlbInN0eWxlOmZvbnQtbmFtZSJdPVhuLm5hbWUsRmk9ITApLFhuLnN0cmlrZSYmKE1pWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdPSJzb2xpZCIsTWlbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXR5cGUiXT0ic2luZ2xl''@;'; put 'put ''IixGaT0hMCksWG4udW5kZXJsaW5lJiYoTWlbInN0eWxlOnRleHQtdW5kZXJsaW5lLXN0eWxlIl09InNvbGlkIixNaVsic3R5bGU6dGV4dC11bmRlcmxpbmUtd2lkdGgiXT0iYXV0byIsTWlbInN0eWxlOnRleHQtdW5kZXJsaW5lLWNvbG9yIl09ImZvbnQtY29sb3IiLEZpPSEwKSxTblsxXSl7''@;'; put 'put ''aWYoWG4uYWxpZ25tZW50KXt2YXIgTGk9WG4uYWxpZ25tZW50O0xpLndyYXBUZXh0JiYoYnJbImZvOndyYXAtb3B0aW9uIl09IndyYXAiLGVyPSEwKSxMaS52ZXJ0aWNhbCYmKGJyWyJzdHlsZTp2ZXJ0aWNhbC1hbGlnbiJdPSJjZW50ZXIiPT1MaS52ZXJ0aWNhbD8ibWlkZGxlIjpMaS52ZXJ0''@;'; put 'put ''aWNhbCxlcj0hMCksb2VbTGkuaG9yaXpvbnRhbF0mJihuYVsiZm86dGV4dC1hbGlnbiJdPW9lW0xpLmhvcml6b250YWxdLGNhPSEwKX1Ybi5mZ0NvbG9yJiYoYnJbImZvOmJhY2tncm91bmQtY29sb3IiXT0iIyIrUDAoWG4uZmdDb2xvci5yZ2IpLGVyPSEwKX1lciYmKEJuKz1Qcigic3R5bGU6''@;'; put 'put ''dGFibGUtY2VsbC1wcm9wZXJ0aWVzIixudWxsLGJyKSksRmkmJihCbis9UHIoInN0eWxlOnRleHQtcHJvcGVydGllcyIsbnVsbCxNaSkpLGNhJiYoQm4rPVByKCJzdHlsZTpwYXJhZ3JhcGgtcHJvcGVydGllcyIsbnVsbCxuYSkpLFBlLnB1c2goIiAgIitQcigic3R5bGU6c3R5bGUiLEJuLGZy''@;'; put 'put ''KSsiXG4iKSxsci5vZHM9Y3QsKytjdH0pfX19KSxQZS5wdXNoKCIgPC9vZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpO3ZhciBFdD0iIDxvZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIitPZShOZSkubWFwKGZ1bmN0aW9uKGF0KXtyZXR1cm4nICA8c3R5bGU6Zm9udC1mYWNlIHN0eWxlOm5h''@;'; put 'put ''bWU9IicrYXQrJyIgc3ZnOmZvbnQtZmFtaWx5PSInK05lW2F0XSsnIi8+XG4nfSkuam9pbigiIikrIiA8L29mZmljZTpmb250LWZhY2UtZGVjbHM+XG4iO3BlLnB1c2goRXQpLHBlLnB1c2goUGUuam9pbigiIikpfShOZSx5ZSksTmUucHVzaCgiICA8b2ZmaWNlOmJvZHk+XG4iKSxOZS5wdXNo''@;'; put 'put ''KCIgICAgPG9mZmljZTpzcHJlYWRzaGVldD5cbiIpO2Zvcih2YXIgY3Q9MDtjdCE9eWUuU2hlZXROYW1lcy5sZW5ndGg7KytjdClOZS5wdXNoKFEoeWUuU2hlZXRzW3llLlNoZWV0TmFtZXNbY3RdXSx5ZSxjdCkpO3JldHVybiBOZS5wdXNoKCIgICAgPC9vZmZpY2U6c3ByZWFkc2hlZXQ+XG4i''@;'; put 'put ''KSxOZS5wdXNoKCIgIDwvb2ZmaWNlOmJvZHk+XG4iKSxOZS5wdXNoKCJmb2RzIj09UGUuYm9va1R5cGU/Ijwvb2ZmaWNlOmRvY3VtZW50PiI6Ijwvb2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQ+IiksTmUuam9pbigiIil9fSgpO2Z1bmN0aW9uIFJJKFMsUil7aWYoImZvZHMiPT1SLmJvb2tUeXBl''@;'; put 'put ''KXJldHVybiBQOChTLFIpO3ZhciBrPWhpKCksRz0iIixRPVtdLG9lPVtdO3JldHVybiBqbihrLEc9Im1pbWV0eXBlIiwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIpLGpuKGssRz0iY29udGVudC54bWwiLFA4KFMsUikpLFEucHVzaChbRywidGV4dC94''@;'; put 'put ''bWwiXSksb2UucHVzaChbRywiQ29udGVudEZpbGUiXSksam4oayxHPSJzdHlsZXMueG1sIixVeihTLFIpKSxRLnB1c2goW0csInRleHQveG1sIl0pLG9lLnB1c2goW0csIlN0eWxlc0ZpbGUiXSksam4oayxHPSJtZXRhLnhtbCIsSWkrUjYoKSksUS5wdXNoKFtHLCJ0ZXh0L3htbCJdKSxvZS5w''@;'; put 'put ''dXNoKFtHLCJNZXRhZGF0YUZpbGUiXSksam4oayxHPSJtYW5pZmVzdC5yZGYiLGZ1bmN0aW9uIFB1KFMpe3ZhciBSPVtJaV07Ui5wdXNoKCc8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPlxuJyk7Zm9yKHZhciBrPTA7ayE9''@;'; put 'put ''Uy5sZW5ndGg7KytrKVIucHVzaChldShTW2tdWzBdLFNba11bMV0pKSxSLnB1c2gobjIoIiIsU1trXVswXSkpO3JldHVybiBSLnB1c2goZXUoIiIsIkRvY3VtZW50IiwicGtnIikpLFIucHVzaCgiPC9yZGY6UkRGPiIpLFIuam9pbigiIil9KG9lKSksUS5wdXNoKFtHLCJhcHBsaWNhdGlvbi9y''@;'; put 'put ''ZGYreG1sIl0pLGpuKGssRz0iTUVUQS1JTkYvbWFuaWZlc3QueG1sIixmdW5jdGlvbiB4YyhTKXt2YXIgUj1bSWldO1IucHVzaCgnPG1hbmlmZXN0Om1hbmlmZXN0IHhtbG5zOm1hbmlmZXN0PSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1hbmlmZXN0OjEuMCIgbWFu''@;'; put 'put ''aWZlc3Q6dmVyc2lvbj0iMS4yIj5cbicpLFIucHVzaCgnICA8bWFuaWZlc3Q6ZmlsZS1lbnRyeSBtYW5pZmVzdDpmdWxsLXBhdGg9Ii8iIG1hbmlmZXN0OnZlcnNpb249IjEuMiIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRz''@;'; put 'put ''aGVldCIvPlxuJyk7Zm9yKHZhciBrPTA7azxTLmxlbmd0aDsrK2spUi5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iJytTW2tdWzBdKyciIG1hbmlmZXN0Om1lZGlhLXR5cGU9IicrU1trXVsxXSsnIi8+XG4nKTtyZXR1cm4gUi5wdXNoKCI8L21hbmlm''@;'; put 'put ''ZXN0Om1hbmlmZXN0PiIpLFIuam9pbigiIil9KFEpKSxrfWZ1bmN0aW9uIE9mKFMpe3JldHVybiBmdW5jdGlvbihrLEcpe3ZhciBRPWZ1bmN0aW9uIFp6KFMsUil7aWYoIVIpcmV0dXJuIDA7dmFyIGs9Uy5TaGVldE5hbWVzLmluZGV4T2YoUik7aWYoLTE9PWspdGhyb3cgbmV3IEVycm9yKCJT''@;'; put 'put ''aGVldCBub3QgZm91bmQ6ICIrUik7cmV0dXJuIGt9KGssRy5zaGVldCk7cmV0dXJuIFMuZnJvbV9zaGVldChrLlNoZWV0c1trLlNoZWV0TmFtZXNbUV1dLEcsayl9fXZhciBXej1PZihtZCksWXo9T2Yoe2Zyb21fc2hlZXQ6QzB9KSxHej1PZih0eXBlb2YgY0M8InUiP2NDOnt9KSx2ZD1PZih0''@;'; put 'put ''eXBlb2YgRHY8InUiP0R2Ont9KSxMST1PZih0eXBlb2YgajM8InUiP2ozOnt9KSxPST1PZih0eXBlb2YgVnY8InUiP1Z2Ont9KSwkej1PZih7ZnJvbV9zaGVldDpqSX0pLGVyZT1PZih0eXBlb2YgQjM8InUiP0IzOnt9KSxQST1PZih0eXBlb2YgSzY8InUiP0s2Ont9KSxXbD15KDkxNDI2KXx8''@;'; put 'put ''dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jcnlwdG9Ccm93c2VyaWZ5O2lmKCFXbCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGNyeXB0byBleHRlbnNpb25zISIpO3ZhciBucD17U0hBNTEyOiJzaGE1MTIiLFNIQTI1Njoic2hhMjU2IixTSEEzODQ6InNoYTM4NCIsU0hBMToic2hh''@;'; put 'put ''MSIsTUQ1OiJtZDUiLE1ENDoibWQ0IixNRDI6Im1kMiJ9O2Z1bmN0aW9uIG1jKFMsUil7c3dpdGNoKFI9KFJ8fCIiKS5yZXBsYWNlKC8tL2csIiIpKXtjYXNlIlNIQS01MTIiOmNhc2UiU0hBNTEyIjpyZXR1cm4gbmV3IFdsLmNyZWF0ZUhhc2goInNoYTUxMiIpLnVwZGF0ZShTKS5kaWdlc3Qo''@;'; put 'put ''KTtjYXNlIlNIQS0xIjpjYXNlIlNIQTEiOnJldHVybiBuZXcgV2wuY3JlYXRlSGFzaCgic2hhMSIpLnVwZGF0ZShTKS5kaWdlc3QoKTtjYXNlIk1EMiI6cmV0dXJuIG5ldyBXbC5jcmVhdGVIYXNoKCJtZDIiKS51cGRhdGUoUykuZGlnZXN0KCk7ZGVmYXVsdDppZihucFtSXSlyZXR1cm4gbmV3''@;'; put 'put ''IFdsLmNyZWF0ZUhhc2gobnBbUl0pLnVwZGF0ZShTKS5kaWdlc3QoKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtICIrUil9fWZ1bmN0aW9uIFk0KFMsUixrKXtpZigicmMyIj09ayl0aHJvdyJVbnN1cHBvcnRlZCBSQzIiO3ZhciBHPVdsLmNyZWF0ZURlY2lw''@;'; put 'put ''aGVyaXYoa3x8ImFlcy0yNTYtY2JjIixTLFIpO3JldHVybiBHLnNldEF1dG9QYWRkaW5nKCExKSxHfWZ1bmN0aW9uIEY4KFMpe3JldHVyblsoIjAwIisoMjU1JlMpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhTPj4+OCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAi''@;'; put 'put ''KyhTPj4+MTYmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoUz4+PjI0JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMildLmpvaW4oIiIpfXZhciBHND1mdW5jdGlvbihTLFIsayl7Zm9yKHZhciBHPSJzdHJpbmciPT10eXBlb2YgUj9CdWZmZXIuZnJvbShSLCJoZXgiKTpS''@;'; put 'put ''LFE9InN0cmluZyI9PXR5cGVvZiBTP0J1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUykpOlMsb2U9InN0cmluZyI9PXR5cGVvZiBrP0J1ZmZlci5mcm9tKGssImhleCIpOmssZ2U9bWMoUSwiTUQ1IikscGU9QnVmZmVyLmNvbmNhdChbZ2Uuc2xpY2UoMCw1KSxHXSkseWU9''@;'; put 'put ''MDt5ZTw0OysreWUpcGU9QnVmZmVyLmNvbmNhdChbcGUscGVdKTt2YXIgUGU9bWMocGUsIk1ENSIpO3JldHVybihtYyhCdWZmZXIuY29uY2F0KFtQZS5zbGljZSgwLDUpLG9lXSksIk1ENSIpLnRvU3RyaW5nKCJoZXgiKSsiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKS5zbGlj''@;'; put 'put ''ZSgwLDMyKX0sJDQ9ZnVuY3Rpb24oUyxSLGspe3ZhciBHPSJzdHJpbmciPT10eXBlb2YgUj9CdWZmZXIuZnJvbShSLCJoZXgiKTpSLFE9InN0cmluZyI9PXR5cGVvZiBTP0J1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUykpOlMsb2U9InN0cmluZyI9PXR5cGVvZiBrP0J1''@;'; put 'put ''ZmZlci5mcm9tKGssImhleCIpOmssZ2U9bWMoQnVmZmVyLmNvbmNhdChbRyxRXSksIlNIQTEiKTtyZXR1cm4gbWMoQnVmZmVyLmNvbmNhdChbZ2Usb2VdKSwiU0hBMSIpfSxYej1mdW5jdGlvbigpe2Z1bmN0aW9uIFIoKXt9Ui5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oYXQpe3RoaXMuX2k9''@;'; put 'put ''MDt2YXIgYnQ9dGhpcy5fYnVpbGQoYXQsIiIpO3JldHVybiIiPT09YnQ/IiI6Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4nK2J0fSxSLnByb3RvdHlwZS5fYnVpbGQ9ZnVuY3Rpb24oYXQsYnQpe2lmKHRoaXMuX2krKyUxZTY9PTAmJih0''@;'; put 'put ''aGlzLl9jPWJ0WzBdKSxudWxsPT1hdHx8Im9iamVjdCIhPXR5cGVvZiBhdCYmImZ1bmN0aW9uIiE9dHlwZW9mIGF0KW51bGwhPWF0JiYoYnQrPWZ1bmN0aW9uIFMoYXQsYnQpe3JldHVybiBudWxsPT1hdHx8KGF0PWF0LnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2Uo''@;'; put 'put ''LzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLGJ0JiYoYXQ9YXQucmVwbGFjZSgvIi9nLCImcXVvdDsiKSkpLGF0fShhdCkpO2Vsc2V7aWYoIWF0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJYTUwgbm9kZSBkb2VzIG5vdCBoYXZlIG5hbWU6ICIrSlNPTi5zdHJpbmdpZnkoYXQpKTti''@;'; put 'put ''dCs9IjwiK2F0Lm5hbWU7dmFyIGp0PXRoaXM7YnQrPWF0LmF0dHJpYnV0ZXMmJkx1KGF0LmF0dHJpYnV0ZXMpfHwiIixBcnJheS5pc0FycmF5KGF0LmNoaWxkcmVuKSYmMCE9YXQuY2hpbGRyZW4ubGVuZ3RoPyhidCs9Ij4iLGF0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oa3Qpe2J0PWp0''@;'; put 'put ''Ll9idWlsZChrdCxidCl9KSxidCs9IjwvIithdC5uYW1lKyI+Iik6YnQrPSIvPiJ9cmV0dXJuIGJ0fTt2YXIgaz1CdWZmZXIuZnJvbShbNCwwLDQsMCw2NCwwLDAsMF0pLG9lPXtkYXRhSW50ZWdyaXR5OntobWFjS2V5OkJ1ZmZlci5mcm9tKFs5NSwxNzgsMTczLDEsMTIsMTg1LDIyNSwyNDZd''@;'; put 'put ''KSxobWFjVmFsdWU6QnVmZmVyLmZyb20oWzE2MCwxMDMsMTI3LDIsMTc4LDQ0LDEzMiw1MV0pfSxrZXk6QnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSksdmVyaWZpZXJIYXNoOntpbnB1dDpCdWZmZXIuZnJvbShbMjU0LDE2NywyMTAsMTE4LDU5LDc1LDE1OCwx''@;'; put 'put ''MjFdKSx2YWx1ZTpCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwxMDksNDgsOTcsNTIsNzhdKX19O2Z1bmN0aW9uIGdlKGF0LGJ0LGp0LGt0LE90LEt0KXt2YXIgVG49YnQudG9Mb3dlckNhc2UoKSsiLSIrOCprdC5sZW5ndGg7aWYoIkNoYWluaW5nTW9kZUNCQyIhPT1qdCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVua25vd24gY2lwaGVyIGNoYWluaW5nOiAiK2p0KTt2YXIgcnI9V2xbYXQ/ImNyZWF0ZUNpcGhlcml2IjoiY3JlYXRlRGVjaXBoZXJpdiJdKFRuKz0iLWNiYyIsa3QsT3QpO3JyLnNldEF1dG9QYWRkaW5nKCExKTt2YXIgU249cnIudXBkYXRlKEt0KSxscj1bU25dO3RyeXt2YXIgWG49''@;'; put 'put ''cnIuZmluYWwoKTtsci5wdXNoKFhuKX1jYXRjaHt9cmV0dXJuIEJ1ZmZlci5jb25jYXQobHIpfWZ1bmN0aW9uIHBlKGF0KXthdD1hdC50b0xvd2VyQ2FzZSgpO3ZhciBidD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtpZihXbC5nZXRIYXNoZXMoKS5pbmRleE9mKGF0KTwwKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0gIithdCk7dmFyIGt0PVdsLmNyZWF0ZUhhc2goYXQpO3JldHVybiBrdC51cGRhdGUoQnVmZmVyLmNvbmNhdChidCkpLGt0LmRpZ2VzdCgpfWZ1bmN0aW9uIHllKGF0LGJ0LGp0LGt0KXsibnVtYmVyIj09dHlwZW9mIGt0JiYoa3Q9''@;'; put 'put ''UGUoa3QpKTt2YXIgT3Q9cGUoYXQsYnQsa3QpO2lmKE90Lmxlbmd0aDxqdCl7dmFyIEt0PUJ1ZmZlci5hbGxvYyhqdCw1NCk7T3QuY29weShLdCksT3Q9S3R9ZWxzZSBPdC5sZW5ndGg+anQmJihPdD1PdC5zbGljZSgwLGp0KSk7cmV0dXJuIE90fWZ1bmN0aW9uIFBlKGF0LGJ0KXt2YXIganQ9''@;'; put 'put ''QnVmZmVyLmFsbG9jKGJ0fHw0KTtyZXR1cm4ganQud3JpdGVVSW50MzJMRShhdCwwKSxqdH1mdW5jdGlvbiBOZShhdCxidCxqdCxrdCxPdCxLdCl7Zm9yKHZhciBycj1wZShidCxqdCxCdWZmZXIuZnJvbShhdCwidXRmMTZsZSIpKSxTbj0wO1NuPGt0O1NuKyspcnI9cGUoYnQsUGUoU24pLHJy''@;'; put 'put ''KTt2YXIgWG49T3QvODtpZigocnI9cGUoYnQscnIsS3QpKS5sZW5ndGg8WG4pe3ZhciBCbj1CdWZmZXIuYWxsb2MoWG4sNTQpO3JyLmNvcHkoQm4pLHJyPUJufWVsc2UgcnIubGVuZ3RoPlhuJiYocnI9cnIuc2xpY2UoMCxYbikpO3JldHVybiBycn1yZXR1cm4gV2wucmFuZG9tQnl0ZXN8fChX''@;'; put 'put ''bC5yYW5kb21CeXRlcz1mdW5jdGlvbihhdCl7Zm9yKHZhciBidD1CdWZmZXIuYWxsb2MoYXQpLGp0PTA7anQ8YXQ7KytqdClidFtqdF09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7cmV0dXJuIGJ0fSksZnVuY3Rpb24gRXQoYXQsYnQpe2lmKCJzdHJpbmciPT10eXBlb2YgYXQpcmV0''@;'; put 'put ''dXJuIEV0KEJ1ZmZlci5mcm9tKGF0LCJiaW5hcnkiKSxidCk7dmFyIGp0PVdsLnJhbmRvbUJ5dGVzKDMyKSxrdD17cGFja2FnZTp7Y2lwaGVyQWxnb3JpdGhtOiJBRVMiLGNpcGhlckNoYWluaW5nOiJDaGFpbmluZ01vZGVDQkMiLHNhbHRWYWx1ZTpXbC5yYW5kb21CeXRlcygxNiksaGFzaEFs''@;'; put 'put ''Z29yaXRobToiU0hBNTEyIixoYXNoU2l6ZTo2NCxibG9ja1NpemU6MTYsa2V5Qml0czo4Kmp0Lmxlbmd0aH0sa2V5OntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOldsLnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGht''@;'; put 'put ''OiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixzcGluQ291bnQ6MSxrZXlCaXRzOjI1Nn19LE90PWZ1bmN0aW9uIFllKGF0LGJ0LGp0LGt0LE90LEt0LFRuLHJyKXtmb3IodmFyIFNuPVtdLGxyPWF0PzA6OCxYbj0wLEJuPTAsZnI9MDtmcjxyci5sZW5ndGg7KXsoZnI9KEJuPWZy''@;'; put 'put ''KSs0MDk2KT5yci5sZW5ndGgmJihmcj1yci5sZW5ndGgpO3ZhciBicj1yci5zbGljZShCbitscixmcitsciksZXI9YnIubGVuZ3RoJU90O2VyJiYoYnI9QnVmZmVyLmNvbmNhdChbYnIsQnVmZmVyLmFsbG9jKE90LWVyKV0pKTt2YXIgRmk9Z2UoYXQsYnQsanQsVG4seWUoa3QsS3QsT3QsWG4p''@;'; put 'put ''LGJyKTtTbi5wdXNoKEZpKSxYbisrfXZhciBuYT1CdWZmZXIuY29uY2F0KFNuKTtpZihhdCluYT1CdWZmZXIuY29uY2F0KFtQZShyci5sZW5ndGgsOCksbmFdKTtlbHNle3ZhciBjYT1yci5yZWFkVUludDMyTEUoMCk7bmE9bmEuc2xpY2UoMCxjYSl9cmV0dXJuIG5hfSghMCxrdC5wYWNrYWdl''@;'; put 'put ''LmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLmJsb2NrU2l6ZSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxqdCxhdCksS3Q9V2wucmFuZG9tQnl0ZXMoNjQpLFRuPXllKGt0LnBhY2thZ2UuaGFzaEFsZ29y''@;'; put 'put ''aXRobSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxrdC5wYWNrYWdlLmJsb2NrU2l6ZSxvZS5kYXRhSW50ZWdyaXR5LmhtYWNLZXkpLHJyPWdlKCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsanQsVG4sS3QpLFNuPWZ1bmN0aW9uIGV0KGF0LGJ0''@;'; put 'put ''KXthdD1hdC50b0xvd2VyQ2FzZSgpO3ZhciBqdD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtpZihXbC5nZXRIYXNoZXMoKS5pbmRleE9mKGF0KTwwKXRocm93IG5ldyBFcnJvcigiSE1BQyBhbGdvcml0aG0gJyIrYXQrIicgbm90IHN1cHBvcnRlZCEiKTt2YXIgT3Q9V2wuY3JlYXRlSG1h''@;'; put 'put ''YyhhdCxidCk7cmV0dXJuIE90LnVwZGF0ZShCdWZmZXIuY29uY2F0KGp0KSksT3QuZGlnZXN0KCl9KGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxLdCxPdCksbHI9eWUoa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLGt0LnBhY2thZ2UuYmxvY2tTaXplLG9l''@;'; put 'put ''LmRhdGFJbnRlZ3JpdHkuaG1hY1ZhbHVlKSxYbj1nZSghMCxrdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGp0LGxyLFNuKTtrdC5kYXRhSW50ZWdyaXR5PXtlbmNyeXB0ZWRIbWFjS2V5OnJyLGVuY3J5cHRlZEhtYWNWYWx1ZTpYbn07dmFyIEJu''@;'; put 'put ''PU5lKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxvZS5rZXkpO2t0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZT1nZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxCbixr''@;'; put 'put ''dC5rZXkuc2FsdFZhbHVlLGp0KTt2YXIgZnI9V2wucmFuZG9tQnl0ZXMoMTYpLGJyPU5lKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxvZS52ZXJpZmllckhhc2guaW5wdXQpO2t0LmtleS5lbmNyeXB0ZWRW''@;'; put 'put ''ZXJpZmllckhhc2hJbnB1dD1nZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxicixrdC5rZXkuc2FsdFZhbHVlLGZyKTt2YXIgZXI9cGUoa3Qua2V5Lmhhc2hBbGdvcml0aG0sZnIpLE1pPU5lKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5z''@;'; put 'put ''YWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxvZS52ZXJpZmllckhhc2gudmFsdWUpO2t0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZT1nZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxNaSxrdC5rZXkuc2FsdFZh''@;'; put 'put ''bHVlLGVyKTt2YXIgRmk9ZnVuY3Rpb24gY3QoYXQpe3ZhciBidD17bmFtZToiZW5jcnlwdGlvbiIsYXR0cmlidXRlczp7eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvZW5jcnlwdGlvbiIsInhtbG5zOnAiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQu''@;'; put 'put ''Y29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCIsInhtbG5zOmMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9jZXJ0aWZpY2F0ZSJ9LGNoaWxkcmVuOlt7bmFtZToia2V5RGF0YSIsYXR0cmlidXRlczp7c2FsdFNpemU6''@;'; put 'put ''YXQucGFja2FnZS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTphdC5wYWNrYWdlLmJsb2NrU2l6ZSxrZXlCaXRzOmF0LnBhY2thZ2Uua2V5Qml0cyxoYXNoU2l6ZTphdC5wYWNrYWdlLmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTphdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxjaXBoZXJD''@;'; put 'put ''aGFpbmluZzphdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGhhc2hBbGdvcml0aG06YXQucGFja2FnZS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTphdC5wYWNrYWdlLnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToiZGF0YUludGVncml0eSIsYXR0cmlidXRlczp7ZW5jcnlw''@;'; put 'put ''dGVkSG1hY0tleTphdC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNLZXkudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEhtYWNWYWx1ZTphdC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToia2V5RW5jcnlwdG9ycyIsY2hp''@;'; put 'put ''bGRyZW46W3tuYW1lOiJrZXlFbmNyeXB0b3IiLGF0dHJpYnV0ZXM6e3VyaToiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQifSxjaGlsZHJlbjpbe25hbWU6InA6ZW5jcnlwdGVkS2V5IixhdHRyaWJ1dGVzOntzcGluQ291bnQ6''@;'; put 'put ''YXQua2V5LnNwaW5Db3VudCxzYWx0U2l6ZTphdC5rZXkuc2FsdFZhbHVlLmxlbmd0aCxibG9ja1NpemU6YXQua2V5LmJsb2NrU2l6ZSxrZXlCaXRzOmF0LmtleS5rZXlCaXRzLGhhc2hTaXplOmF0LmtleS5oYXNoU2l6ZSxjaXBoZXJBbGdvcml0aG06YXQua2V5LmNpcGhlckFsZ29yaXRobSxj''@;'; put 'put ''aXBoZXJDaGFpbmluZzphdC5rZXkuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRobTphdC5rZXkuaGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6YXQua2V5LnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ6YXQua2V5LmVuY3J5cHRlZFZlcmlm''@;'; put 'put ''aWVySGFzaElucHV0LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZTphdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWUudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEtleVZhbHVlOmF0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZS50b1N0cmluZygi''@;'; put 'put ''YmFzZTY0Iil9fV19XX1dfSxrdD0obmV3IFIpLmJ1aWxkKGJ0KTtyZXR1cm4gQnVmZmVyLmNvbmNhdChbayxCdWZmZXIuZnJvbShrdCwidXRmOCIpXSl9KGt0KSxuYT12ZS51dGlscy5jZmJfbmV3KCk7cmV0dXJuIHZlLnV0aWxzLmNmYl9hZGQobmEsIkVuY3J5cHRpb25JbmZvIixGaSksdmUu''@;'; put 'put ''dXRpbHMuY2ZiX2FkZChuYSwiRW5jcnlwdGVkUGFja2FnZSIsT3QpLG5hfX0oKTtmdW5jdGlvbiBISShTKXtyZXR1cm4gZnVuY3Rpb24oayl7Zm9yKHZhciBHPTA7RyE9Uy5sZW5ndGg7KytHKXt2YXIgUT1TW0ddO3ZvaWQgMD09PWtbUVswXV0mJihrW1FbMF1dPVFbMV0pLCJuIj09PVFbMl0m''@;'; put 'put ''JihrW1FbMF1dPU51bWJlcihrW1FbMF1dKSl9fX12YXIgTkk9ZnVuY3Rpb24oUyl7SEkoW1siY2VsbE5GIiwhMV0sWyJjZWxsSFRNTCIsITBdLFsiY2VsbEZvcm11bGEiLCEwXSxbImNlbGxTdHlsZXMiLCExXSxbImNlbGxUZXh0IiwhMF0sWyJjZWxsRGF0ZXMiLCExXSxbInNoZWV0U3R1YnMi''@;'; put 'put ''LCExXSxbInNoZWV0Um93cyIsMCwibiJdLFsiYm9va0RlcHMiLCExXSxbImJvb2tTaGVldHMiLCExXSxbImJvb2tQcm9wcyIsITFdLFsiYm9va0ZpbGVzIiwhMV0sWyJib29rVkJBIiwhMV0sWyJwYXNzd29yZCIsIiJdLFsiV1RGIiwhMV1dKShTKSxTLmJvb2tJbWFnZXMmJihTLmNlbGxTdHls''@;'; put 'put ''ZXM9ITApfSxQZj1ISShbWyJjZWxsRGF0ZXMiLCExXSxbImJvb2tTU1QiLCExXSxbImJvb2tUeXBlIiwieGxzeCJdLFsiY29tcHJlc3Npb24iLCExXSxbIldURiIsITFdXSk7ZnVuY3Rpb24gbnJlKFMpe3JldHVybiBLYS5XUy5pbmRleE9mKFMpPi0xPyJzaGVldCI6S2EuQ1MmJlM9PUthLkNT''@;'; put 'put ''PyJjaGFydCI6S2EuRFMmJlM9PUthLkRTPyJkaWFsb2ciOkthLk1TJiZTPT1LYS5NUz8ibWFjcm8iOlMmJlMubGVuZ3RoP1M6InNoZWV0In12YXIgUGI9W107ZnVuY3Rpb24geTIoUyxSLGssRyxRLG9lLGdlLHBlLHllLFBlLE5lLFllKXt0cnl7b2VbR109YmYobnIoUyxrLCEwKSxSKTt2YXIg''@;'; put 'put ''Y3QsZXQ9VHQoUyxSKTtzd2l0Y2gocGUpe2Nhc2Uic2hlZXQiOmN0PWZ1bmN0aW9uIGJ6KFMsUixrLEcsUSxvZSxnZSxwZSl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rpb24gUWooUyxSLGssRyxRLG9lLGdlKXtpZighUylyZXR1cm4gUzt2YXIgcGU9Unx8e307R3x8KEc9eyIh''@;'; put 'put ''aWQiOnt9fSksbnVsbCE9bGUmJm51bGw9PXBlLmRlbnNlJiYocGUuZGVuc2U9bGUpO3ZhciBQZSxFdCxhdCxidCxqdCxrdCxPdCxLdCxUbixycix5ZT1wZS5kZW5zZT9bXTp7fSxOZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxZZT1bXSxldD0hMSxjdD0hMSxTbj1bXTtwZS5iaWZm''@;'; put 'put ''PTEyLHBlWyIhcm93Il09MDt2YXIgbHI9MCxYbj0hMSxCbj1bXSxmcj17fSxicj1wZS5zdXBib29rc3x8US5zdXBib29rc3x8W1tdXTtpZihici5zaGFyZWRmPWZyLGJyLmFycmF5Zj1Cbixici5TaGVldE5hbWVzPVEuU2hlZXROYW1lc3x8US5TaGVldHMubWFwKGZ1bmN0aW9uKExpKXtyZXR1''@;'; put 'put ''cm4gTGkubmFtZX0pLCFwZS5zdXBib29rcyYmKHBlLnN1cGJvb2tzPWJyLFEuTmFtZXMpKWZvcih2YXIgZXI9MDtlcjxRLk5hbWVzLmxlbmd0aDsrK2VyKWJyWzBdW2VyKzFdPVEuTmFtZXNbZXJdO3ZhciBNaT1bXSxGaT1bXSxuYT0hMTtpZihMOFsxNl09e246IkJydFNob3J0UmVhbCIsZjpG''@;'; put 'put ''an0sdXIoUyxmdW5jdGlvbihrcixWbixCcil7aWYoIWN0KXN3aXRjaChCcil7Y2FzZSAxNDg6UGU9a3I7YnJlYWs7Y2FzZSAwOkV0PWtyLHBlLnNoZWV0Um93cyYmcGUuc2hlZXRSb3dzPD1FdC5yJiYoY3Q9ITApLFRuPWppKGp0PUV0LnIpLHBlWyIhcm93Il09RXQuciwoa3IuaGlkZGVufHxr''@;'; put 'put ''ci5ocHR8fG51bGwhPWtyLmxldmVsKSYmKGtyLmhwdCYmKGtyLmhweD1zaChrci5ocHQpKSxGaVtrci5yXT1rcik7YnJlYWs7Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzpjYXNlIDE0OmNhc2Ug''@;'; put 'put ''MTU6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6c3dpdGNoKGF0PXt0OmtyWzJdfSxrclsyXSl7Y2FzZSJuIjphdC52PWtyWzFdO2JyZWFrO2Nhc2UicyI6YXQudj0oS3Q9bDhba3JbMV1dKS50LHBlLmNlbGxTdHlsZXMmJihhdC5SPWZ1bmN0aW9uIEVWKFMsUil7aWYoUy5SKXJldHVybiBTLlI7''@;'; put 'put ''aWYoUiYmUi5Gb250cyYmKDEhPVMuci5sZW5ndGh8fDAhPVMuclswXS5pY2gpKXtTLlI9W107dmFyIGs9MCxHPVMucltrXSxRPVMucltrKzFdO2ZvcihHLmljaD4wJiZTLlIucHVzaCh7dDoicyIsdjpTLnQuc2xpY2UoMCxHLmljaCl9KTtrPFMuci5sZW5ndGgtMTsrK2spUy5SLnB1c2goe3Q6''@;'; put 'put ''InMiLHY6Uy50LnNsaWNlKChHPVMucltrXSkuaWNoLChRPVMucltrKzFdKS5pY2gpLHM6Ui5Gb250c1tHLmlmbnRdfSk7cmV0dXJuIFMuUi5wdXNoKHt0OiJzIix2OlMudC5zbGljZSgoUXx8RykuaWNoKSxzOlIuRm9udHNbKFF8fEcpLmlmbnRdfSksUy5SfX0oS3QsZ2UpKTticmVhaztjYXNl''@;'; put 'put ''ImIiOmF0LnY9ISFrclsxXTticmVhaztjYXNlImUiOmF0LnY9a3JbMV0sITEhPT1wZS5jZWxsVGV4dCYmKGF0Lnc9TWNbYXQudl0pO2JyZWFrO2Nhc2Uic3RyIjphdC50PSJzIixhdC52PWtyWzFdfWlmKChidD1nZS5DZWxsWGZba3JbMF0uaVN0eWxlUmVmXSkmJkozKGF0LGJ0Lm51bUZtdElk''@;'; put 'put ''LGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQscGUsMCxnZSkscGUuY2VsbFN0eWxlcyYmYXQucyYmYnQuYWxpZ25tZW50JiYoYXQucy5hbGlnbm1lbnQ9cXQoYnQuYWxpZ25tZW50KSksa3Q9LTE9PWtyWzBdLmM/a3QrMTprclswXS5jLHBlLmRlbnNlPyh5ZVtqdF18fCh5ZVtqdF09''@;'; put 'put ''W10pLHllW2p0XVtrdF09YXQpOnllW1RhKGt0KStUbl09YXQscGUuY2VsbEZvcm11bGEpe2ZvcihYbj0hMSxscj0wO2xyPEJuLmxlbmd0aDsrK2xyKXt2YXIgX3I9Qm5bbHJdO0V0LnI+PV9yWzBdLnMuciYmRXQucjw9X3JbMF0uZS5yJiZrdD49X3JbMF0ucy5jJiZrdDw9X3JbMF0uZS5jJiYo''@;'; put 'put ''YXQuRj1yYShfclswXSksWG49ITApfSFYbiYma3IubGVuZ3RoPjMmJihhdC5mPWtyWzNdKX1pZihOZS5zLnI+RXQuciYmKE5lLnMucj1FdC5yKSxOZS5zLmM+a3QmJihOZS5zLmM9a3QpLE5lLmUucjxFdC5yJiYoTmUuZS5yPUV0LnIpLE5lLmUuYzxrdCYmKE5lLmUuYz1rdCkscGUuY2VsbERh''@;'; put 'put ''dGVzJiZidCYmIm4iPT1hdC50JiZBLmlzX2RhdGUoQS5fdGFibGVbYnQubnVtRm10SWRdKSl7dmFyIEZuPUEucGFyc2VfZGF0ZV9jb2RlKGF0LnYpO0ZuJiYoYXQudD0iZCIsYXQudj1uZXcgRGF0ZShGbi55LEZuLm0tMSxGbi5kLEZuLkgsRm4uTSxGbi5TLEZuLnUpKX1icmVhaztjYXNlIDE6''@;'; put 'put ''Y2FzZSAxMjppZighcGUuc2hlZXRTdHVic3x8ZXQpYnJlYWs7YXQ9e3Q6InoiLHY6dm9pZCAwfSxrdD0tMT09a3JbMF0uYz9rdCsxOmtyWzBdLmMsKGJ0PWdlLkNlbGxYZltrclswXS5pU3R5bGVSZWZdKSYmSjMoYXQsYnQubnVtRm10SWQsYnQuZmlsbElkLGJ0LmZvbnRJZCxidC5ib3JkZXJJ''@;'; put 'put ''ZCxwZSwwLGdlKSxwZS5jZWxsU3R5bGVzJiZhdC5zJiZidC5hbGlnbm1lbnQmJihhdC5zLmFsaWdubWVudD1xdChidC5hbGlnbm1lbnQpKSxwZS5kZW5zZT8oeWVbanRdfHwoeWVbanRdPVtdKSx5ZVtqdF1ba3RdPWF0KTp5ZVtUYShrdCkrVG5dPWF0LE5lLnMucj5FdC5yJiYoTmUucy5yPUV0''@;'; put 'put ''LnIpLE5lLnMuYz5rdCYmKE5lLnMuYz1rdCksTmUuZS5yPEV0LnImJihOZS5lLnI9RXQuciksTmUuZS5jPGt0JiYoTmUuZS5jPWt0KTticmVhaztjYXNlIDE3NjpTbi5wdXNoKGtyKTticmVhaztjYXNlIDQ5NDp2YXIganI9R1siIWlkIl1ba3IucmVsSWRdO2Zvcihqcj8oa3IuVGFyZ2V0PWpy''@;'; put 'put ''LlRhcmdldCxrci5sb2MmJihrci5UYXJnZXQrPSIjIitrci5sb2MpLGtyLlJlbD1qcik6IiI9PWtyLnJlbElkJiYoa3IuVGFyZ2V0PSIjIitrci5sb2MpLGp0PWtyLnJmeC5zLnI7anQ8PWtyLnJmeC5lLnI7KytqdClmb3Ioa3Q9a3IucmZ4LnMuYztrdDw9a3IucmZ4LmUuYzsrK2t0KXBlLmRl''@;'; put 'put ''bnNlPyh5ZVtqdF18fCh5ZVtqdF09W10pLHllW2p0XVtrdF18fCh5ZVtqdF1ba3RdPXt0OiJ6Iix2OnZvaWQgMH0pLHllW2p0XVtrdF0ubD1rcik6KE90PXFpKHtjOmt0LHI6anR9KSx5ZVtPdF18fCh5ZVtPdF09e3Q6InoiLHY6dm9pZCAwfSkseWVbT3RdLmw9a3IpO2JyZWFrO2Nhc2UgNDI2''@;'; put 'put ''OmlmKCFwZS5jZWxsRm9ybXVsYSlicmVhaztCbi5wdXNoKGtyKSwocnI9cGUuZGVuc2U/eWVbanRdW2t0XTp5ZVtUYShrdCkrVG5dKS5mPXMwKGtyWzFdLE5lLHtyOkV0LnIsYzprdH0sYnIscGUpLHJyLkY9cmEoa3JbMF0pO2JyZWFrO2Nhc2UgNDI3OmlmKCFwZS5jZWxsRm9ybXVsYSlicmVh''@;'; put 'put ''aztmcltxaShrclswXS5zKV09a3JbMV0sKHJyPXBlLmRlbnNlP3llW2p0XVtrdF06eWVbVGEoa3QpK1RuXSkuZj1zMChrclsxXSxOZSx7cjpFdC5yLGM6a3R9LGJyLHBlKTticmVhaztjYXNlIDYwOmlmKCFwZS5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7a3IuZT49a3IuczspTWlba3IuZS0tXT17''@;'; put 'put ''d2lkdGg6a3Iudy8yNTYsaGlkZGVuOiEhKDEma3IuZmxhZ3MpLGxldmVsOmtyLmxldmVsfSxuYXx8KG5hPSEwKSxRMChNaVtrci5lKzFdKTticmVhaztjYXNlIDE2MTp5ZVsiIWF1dG9maWx0ZXIiXT17cmVmOnJhKGtyKX07YnJlYWs7Y2FzZSA0NzY6eWVbIiFtYXJnaW5zIl09a3I7YnJlYWs7''@;'; put 'put ''Y2FzZSAxNDc6US5TaGVldHNba118fChRLlNoZWV0c1trXT17fSksa3IubmFtZSYmKFEuU2hlZXRzW2tdLkNvZGVOYW1lPWtyLm5hbWUpLChrci5hYm92ZXx8a3IubGVmdCkmJih5ZVsiIW91dGxpbmUiXT17YWJvdmU6a3IuYWJvdmUsbGVmdDprci5sZWZ0fSk7YnJlYWs7Y2FzZSAxMzc6US5W''@;'; put 'put ''aWV3c3x8KFEuVmlld3M9W3t9XSksUS5WaWV3c1swXXx8KFEuVmlld3NbMF09e30pLGtyLlJUTCYmKFEuVmlld3NbMF0uUlRMPSEwKSxrci5ncmlkfHwoUS5WaWV3c1swXS5ncmlkPSExLHllWyIhZ3JpZGxpbmVzIl09ITEpO2JyZWFrO2Nhc2UgNDg1OnllWyIhc2hlZXRGb3JtYXQiXT1rcjti''@;'; put 'put ''cmVhaztjYXNlIDY0OmNhc2UgMTA1MzohZnVuY3Rpb24gSmooUyxSLGssRyl7aWYoUil7dmFyIFE9e3JlZjpSLnNxcmZ4LHQ6Ui50fTtSLm9wJiYoUS5vcD1SLm9wKTt2YXIgb2U9IiIsZ2U9IiIscGU9Ui5zcXJmeD8ic3RyaW5nIj09dHlwZW9mIFIuc3FyZng/b28oUi5zcXJmeC5zcGxpdCgi''@;'; put 'put ''LCIpWzBdKTpSLnNxcmZ4Om51bGw7aWYoUi5mMSYmKG9lPXMwKFIuZjEscGUsbnVsbCxrLEcsITApKSxSLmYyJiYoZ2U9czAoUi5mMixwZSxudWxsLGssRywhMCkpLFIub3AmJlsiSU4iLCJPVCJdLmluZGV4T2YoUi5vcCk+PS0xKVEubWluPW9lLFEubWF4PWdlO2Vsc2UgaWYoUi5vcClRLnY9''@;'; put 'put ''b2U7ZWxzZSB0cnl7c3dpdGNoKFIudCl7Y2FzZSJMaXN0IjppZigiUHRnU3RyIj09PVIuZjFbMF1bMF1bMF0mJjE9PVIuZjFbMF0ubGVuZ3RoKXtRLmw9Ui5mMVswXVswXVsxXS5zcGxpdCgiLCIpO2JyZWFrfWNhc2UiQ3VzdG9tIjpRLmY9b2V9fWNhdGNoe31TWyIhdmFsaWRhdGlvbnMiXXx8''@;'; put 'put ''KFNbIiF2YWxpZGF0aW9ucyJdPVtdKSxTWyIhdmFsaWRhdGlvbnMiXS5wdXNoKFEpfX0oeWUsa3IsYnIscGUpO2JyZWFrO2Nhc2UgMTUxOnllWyIhZnJlZXplIl09a3JbMF07YnJlYWs7Y2FzZSAxNTI6eWVbIiFzZWwiXT1rcjticmVhaztjYXNlIDE3NTpjYXNlIDY0NDpjYXNlIDYyNTpjYXNl''@;'; put 'put ''IDU2MjpjYXNlIDM5NjpjYXNlIDExMTI6Y2FzZSAxMTQ2OmNhc2UgNDcxOmNhc2UgMTA1MDpjYXNlIDY0OTpjYXNlIDExMDU6Y2FzZSA0OTpjYXNlIDU4OTpjYXNlIDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAxNjg6Y2FzZSAxNzQ6Y2FzZSAxMTgwOmNhc2UgNDk5OmNhc2UgNTA3OmNh''@;'; put 'put ''c2UgNTUwOmNhc2UgMTcxOmNhc2UgMTY3OmNhc2UgMTE3NzpjYXNlIDE2OTpjYXNlIDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2FzZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1MzY6Y2FzZSAxMTAzOmNhc2UgNjgwOmNhc2UgMTEwNDpjYXNlIDEwMjQ6''@;'; put 'put ''Y2FzZSA2NjM6Y2FzZSA1MzU6Y2FzZSA2Nzg6Y2FzZSA1MDQ6Y2FzZSAxMDQzOmNhc2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpjYXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTpldD0hMDticmVhaztjYXNlIDM2OmV0PSExO2JyZWFrO2Nhc2UgMzc6WWUucHVzaChW''@;'; put 'put ''biksZXQ9ITA7YnJlYWs7Y2FzZSAzODpZZS5wb3AoKSxldD0hMTticmVhaztkZWZhdWx0OmlmKCEoKFZufHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoVm58fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFldHx8cGUuV1RGJiYiQnJ0QUNCZWdpbiIhPVllW1llLmxlbmd0aC0xXSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0JyKyIgIitWbil9fSxwZSksZGVsZXRlIHBlLnN1cGJvb2tzLGRlbGV0ZSBwZVsiIXJvdyJdLCF5ZVsiIXJlZiJdJiYoTmUucy5yPDJlNnx8UGUmJihQZS5lLnI+MHx8UGUuZS5jPjB8fFBlLnMucj4wfHxQZS5zLmM+MCkpJiYoeWVb''@;'; put 'put ''IiFyZWYiXT1yYShQZXx8TmUpKSxwZS5zaGVldFJvd3MmJnllWyIhcmVmIl0pe3ZhciBjYT1vbyh5ZVsiIXJlZiJdKTtwZS5zaGVldFJvd3M8PStjYS5lLnImJihjYS5lLnI9cGUuc2hlZXRSb3dzLTEsY2EuZS5yPk5lLmUuciYmKGNhLmUucj1OZS5lLnIpLGNhLmUucjxjYS5zLnImJihjYS5z''@;'; put 'put ''LnI9Y2EuZS5yKSxjYS5lLmM+TmUuZS5jJiYoY2EuZS5jPU5lLmUuYyksY2EuZS5jPGNhLnMuYyYmKGNhLnMuYz1jYS5lLmMpLHllWyIhZnVsbHJlZiJdPXllWyIhcmVmIl0seWVbIiFyZWYiXT1yYShjYSkpfXJldHVybiBTbi5sZW5ndGg+MCYmKHllWyIhbWVyZ2VzIl09U24pLE1pLmxlbmd0''@;'; put 'put ''aD4wJiYoeWVbIiFjb2xzIl09TWkpLEZpLmxlbmd0aD4wJiYoeWVbIiFyb3dzIl09RmkpLHllfShTLEcsayxRLG9lLDAscGUpOmZ1bmN0aW9uIGg4KFMsUixrLEcsUSxvZSxnZSl7aWYoIVMpcmV0dXJuIFM7R3x8KEc9eyIhaWQiOnt9fSksbnVsbCE9bGUmJm51bGw9PVIuZGVuc2UmJihSLmRl''@;'; put 'put ''bnNlPWxlKTt2YXIgcGU9Ui5kZW5zZT9bXTp7fSx5ZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxQZT0iIixOZT0iIixZZT1TLm1hdGNoKHZEKTtZZT8oUGU9Uy5zbGljZSgwLFllLmluZGV4KSxOZT1TLnNsaWNlKFllLmluZGV4K1llWzBdLmxlbmd0aCkpOlBlPU5lPVM7dmFyIGV0''@;'; put 'put ''PU5lLmxhc3RJbmRleE9mKCJleHRMc3QiKSxFdD0oLTE9PWV0fHxOZS5zbGljZShldCksUGUubWF0Y2goX0QpKTtFdD9jYihFdFswXSwwLFEsayk6KEV0PVBlLm1hdGNoKENEKSkmJmZ1bmN0aW9uIG9qKFMsUixrLEcsUSxvZSxnZSl7Y2IoUy5zbGljZSgwLFMuaW5kZXhPZigiPiIpKSwwLEcs''@;'; put 'put ''USk7dmFyIHBlPVIubWF0Y2gobVMpO2lmKHBlKXt2YXIgUGU9Z2sodnIocGVbMF0pLG9lLGdlKTtrWyIhdGFiY29sb3IiXT1QZX1pZigocGU9Ui5tYXRjaChpaikpJiZ2cihwZVswXSkuZml0VG9QYWdlJiYoa1siIXByaW50Il18fChrWyIhcHJpbnQiXT17fSksa1siIXByaW50Il0ucHJvcHN8''@;'; put 'put ''fChrWyIhcHJpbnQiXS5wcm9wcz17fSksa1siIXByaW50Il0ucHJvcHMuZml0fHwoa1siIXByaW50Il0ucHJvcHMuZml0PXt9KSxudWxsPT1rWyIhcHJpbnQiXS5wcm9wcy5maXQuaGVpZ2h0JiYoa1siIXByaW50Il0ucHJvcHMuZml0LmhlaWdodD0xKSxudWxsPT1rWyIhcHJpbnQiXS5wcm9w''@;'; put 'put ''cy5maXQud2lkdGgmJihrWyIhcHJpbnQiXS5wcm9wcy5maXQud2lkdGg9MSkpLHBlPVIubWF0Y2goYWopKXtrWyIhb3V0bGluZSJdPXt9O3ZhciBZZT12cihwZVswXSk7WWUuc3VtbWFyeUJlbG93JiYoa1siIW91dGxpbmUiXS5hYm92ZT0hdGkoWWUuc3VtbWFyeUJlbG93KSksWWUuc3VtbWFy''@;'; put 'put ''eVJpZ2h0JiYoa1siIW91dGxpbmUiXS5sZWZ0PSF0aShZZS5zdW1tYXJ5UmlnaHQpKX19KEV0WzBdLEV0WzFdfHwiIixwZSxRLGssZ2Usb2UpO3ZhciBhdD0oUGUubWF0Y2goLzwoPzpcdyo6KT9kaW1lbnNpb24vKXx8e2luZGV4Oi0xfSkuaW5kZXg7aWYoYXQ+MCl7dmFyIGJ0PVBlLnNsaWNl''@;'; put 'put ''KGF0LGF0KzUwKS5tYXRjaChzYik7YnQmJighUnx8IVIubm9kaW0pJiZmdW5jdGlvbiBjUyhTLFIpe3ZhciBrPW9vKFIpO2sucy5yPD1rLmUuciYmay5zLmM8PWsuZS5jJiZrLnMucj49MCYmay5zLmM+PTAmJihTWyIhcmVmIl09cmEoaykpfShwZSxidFsxXSl9dmFyIGp0PVBlLm1hdGNoKFJv''@;'; put 'put ''KTtqdCYmanRbMV0mJmZ1bmN0aW9uIENqKFMsUixrLEcpe2suVmlld3N8fChrLlZpZXdzPVt7fV0pO3ZhciBRPTA7Uy5yZXBsYWNlKFNTLGZ1bmN0aW9uKG9lLGdlKXt2YXIgcGU9dnIob2UpO2lmKGsuVmlld3NbR118fChrLlZpZXdzW0ddPXt9KSx0aShwZS5yaWdodFRvTGVmdCkmJihrLlZp''@;'; put 'put ''ZXdzW0ddLlJUTD0hMCkscGUuc2hvd0dyaWRMaW5lcyYmKGsuVmlld3NbR10uZ3JpZD10aShwZS5zaG93R3JpZExpbmVzKSxudWxsPT1SWyIhZ3JpZGxpbmVzIl0mJihSWyIhZ3JpZGxpbmVzIl09dGkocGUuc2hvd0dyaWRMaW5lcykpKSwrcGUuem9vbVNjYWxlJiYoay5WaWV3c1tHXS56b29t''@;'; put 'put ''PStwZS56b29tU2NhbGUpLHBlLnZpZXcmJihrLlZpZXdzW0ddLnZpZXc9cGUudmlldyksMT09KytRJiYiLz4iIT1vZS5zbGljZSgtMikpe3ZhciB5ZT1TLnNsaWNlKGdlK29lLmxlbmd0aCksUGU9eWUubWF0Y2goLzxcLyg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9cLz8+Lyk7''@;'; put 'put ''aWYoIVBlKXJldHVybiIiO3ZhciBOZT0oeWU9eWUuc2xpY2UoMCxQZS5pbmRleCkpLm1hdGNoKC88KD86XHc6KT9wYW5lKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoTmUpe3ZhciBZZT12cihOZVswXSk7ImZyb3plbiI9PVllLnN0YXRlP1JbIiFmcmVlemUiXT1UYSgrWWUueFNwbGl0fHww''@;'; put 'put ''KStqaSgrWWUueVNwbGl0fHwwKTpZZS50b3BMZWZ0Q2VsbCYmKFJbIiFmcmVlemUiXT1ZZS50b3BMZWZ0Q2VsbCl9dmFyIGV0PXllLm1hdGNoKC88KD86XHc6KT9zZWxlY3Rpb24oPzpbXj5hLXpdW14+XSopP1wvPz4vKTtpZihldCl7dmFyIGN0PXZyKGV0WzBdKTtpZihjdC5hY3RpdmVDZWxs''@;'; put 'put ''JiYoUlsiIXNlbCJdPXtjZWxsOmN0LmFjdGl2ZUNlbGx9KSxjdC5zcXJlZil7dmFyIEV0PWN0LnNxcmVmLnJlcGxhY2UoL1xzLiokLywiIik7UlsiIXNlbCJdfHwoUlsiIXNlbCJdPXtjZWxsOnFpKE1zKEV0KS5zKX0pLFJbIiFzZWwiXS5yYW5nZT1jdC5zcXJlZn19fXJldHVybiIifSl9KGp0''@;'; put 'put ''WzFdLHBlLFEsayk7dmFyIGt0PVBlLm1hdGNoKEdlKSxPdD1bXTtpZihSLmNlbGxTdHlsZXMpe3ZhciBLdD1QZS5tYXRjaCh0aik7S3QmJmZ1bmN0aW9uIHlTKFMsUixrKXtmb3IodmFyIEc9ITEsUT0wO1EhPVIubGVuZ3RoOysrUSl7dmFyIG9lPXZyKFJbUV0sITApO29lLmhpZGRlbiYmKG9l''@;'; put 'put ''LmhpZGRlbj10aShvZS5oaWRkZW4pKTt2YXIgZ2U9cGFyc2VJbnQob2UubWluLDEwKS0xLHBlPXBhcnNlSW50KG9lLm1heCwxMCktMTtmb3Iob2Uub3V0bGluZUxldmVsJiYob2UubGV2ZWw9K29lLm91dGxpbmVMZXZlbHx8MCksZGVsZXRlIG9lLm1pbixkZWxldGUgb2UubWF4LG9lLndpZHRo''@;'; put 'put ''PStvZS53aWR0aCwhRyYmb2Uud2lkdGgmJihHPSEwKSxRMChvZSksb2Uuc3R5bGUmJihvZS5zPW04KG9lLnN0eWxlLGspKTtnZTw9cGU7KVNbZ2UrK109cXQob2UpfX0oT3QsS3QsZ2UpfWlmKFllJiZ2OChZZVsxXSxrLHBlLFIseWUsb2UsZ2UpLFIuY2FsbGJhY2spcmV0dXJuIHBlO3ZhciBU''@;'; put 'put ''bj1OZS5tYXRjaCh3RCk7VG4mJihwZVsiIXByb3RlY3QiXT1mdW5jdGlvbiBoaihTKXt2YXIgUj12cihTLCEwLCEwKSxrPXt9O2lmKHRpKFIuc2hlZXQpKXJldHVybiBiUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe2tbR109bnVsbCE9UltHXSYmdGkoUltHXSl9KSxMRC5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KEcpe2tbR109bnVsbD09UltHXXx8dGkoUltHXSl9KSxSLmFsZ29yaXRobU5hbWUmJihrLmVuY3J5cHRpb249e2FsZ286Ui5hbGdvcml0aG1OYW1lLGhhc2g6Ui5oYXNoVmFsdWUsc2FsdDpSLnNhbHRWYWx1ZSxzcGluOitSLnNwaW5Db3VudHx8MWU1fSksa30oVG5bMF0pKTt2YXIgcnI9TmUu''@;'; put 'put ''bWF0Y2gobmopO3JyJiYocGVbIiFhdXRvZmlsdGVyIl09ZnVuY3Rpb24gZ2ooUyl7cmV0dXJue3JlZjooUy5tYXRjaCgvcmVmPSIoW14iXSopIi8pfHxbXSlbMV19fShyclswXSkpO3ZhciBTbj1bXSxscj1OZS5tYXRjaChkOCk7aWYobHIpZm9yKGF0PTA7YXQhPWxyLmxlbmd0aDsrK2F0KVNu''@;'; put 'put ''W2F0XT1vbyhsclthdF0uc2xpY2UobHJbYXRdLmluZGV4T2YoJyInKSsxKSk7dmFyIFhuPSgtMT09ZXQ/TmU6TmUuc2xpY2UoMCxldCkpLm1hdGNoKGRTKTtYbiYmKHBlWyIhY29uZGZtdCJdPVtdLmNvbmNhdC5hcHBseShbXSxYbi5tYXAoZnVuY3Rpb24oVm4pe3JldHVybiB2MihWbixSLG9l''@;'; put 'put ''LGdlKX0pKSksZXQ+LTEmJihYbj1OZS5zbGljZShldCkubWF0Y2goZFMpKSYmKHBlWyIhY29uZGZtdCJdfHwocGVbIiFjb25kZm10Il09W10pLHBlWyIhY29uZGZtdCJdPXBlWyIhY29uZGZtdCJdLmNvbmNhdC5hcHBseShwZVsiIWNvbmRmbXQiXSxYbi5tYXAoZnVuY3Rpb24oVm4pe3JldHVy''@;'; put 'put ''biB2MihWbixSLG9lLGdlLCEwKX0pKSk7dmFyIEJuPSgtMT09ZXQ/TmU6TmUuc2xpY2UoMCxldCkpLm1hdGNoKGZlKTtCbiYmKHBlWyIhdmFsaWRhdGlvbnMiXT13UyhCblswXSxSKSksZXQ+LTEmJihCbj1OZS5zbGljZShldCkubWF0Y2goZmUpKSYmKHBlWyIhdmFsaWRhdGlvbnMiXXx8KHBl''@;'; put 'put ''WyIhdmFsaWRhdGlvbnMiXT1bXSkscGVbIiF2YWxpZGF0aW9ucyJdPXBlWyIhdmFsaWRhdGlvbnMiXS5jb25jYXQod1MoQm5bMF0sUiwhMCkpKTt2YXIgZnI9TmUubWF0Y2godVMpO2ZyJiZmdW5jdGlvbiBPRChTLFIsayl7Zm9yKHZhciBHPUFycmF5LmlzQXJyYXkoUyksUT0wO1EhPVIubGVu''@;'; put 'put ''Z3RoOysrUSl7dmFyIG9lPXZyKGdvKFJbUV0pLCEwKTtpZighb2UucmVmKXJldHVybjt2YXIgZ2U9KChrfHx7fSlbIiFpZCJdfHxbXSlbb2UuaWRdO2dlPyhvZS5UYXJnZXQ9Z2UuVGFyZ2V0LG9lLmxvY2F0aW9uJiYob2UuVGFyZ2V0Kz0iIyIrUXIob2UubG9jYXRpb24pKSk6KG9lLlRhcmdl''@;'; put 'put ''dD0iIyIrUXIob2UubG9jYXRpb24pLGdlPXtUYXJnZXQ6b2UuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLG9lLlJlbD1nZSxvZS50b29sdGlwJiYob2UuVG9vbHRpcD1vZS50b29sdGlwLGRlbGV0ZSBvZS50b29sdGlwKTtmb3IodmFyIHBlPW9vKG9lLnJlZikseWU9cGUucy5yO3ll''@;'; put 'put ''PD1wZS5lLnI7Kyt5ZSlmb3IodmFyIFBlPXBlLnMuYztQZTw9cGUuZS5jOysrUGUpe3ZhciBOZT1xaSh7YzpQZSxyOnllfSk7Rz8oU1t5ZV18fChTW3llXT1bXSksU1t5ZV1bUGVdfHwoU1t5ZV1bUGVdPXt0OiJ6Iix2OnZvaWQgMH0pLFNbeWVdW1BlXS5sPW9lKTooU1tOZV18fChTW05lXT17''@;'; put 'put ''dDoieiIsdjp2b2lkIDB9KSxTW05lXS5sPW9lKX19fShwZSxmcixHKTt2YXIgYnI9TmUubWF0Y2goaFMpO2JyJiZmdW5jdGlvbiBzaihTLFIpe3ZhciBrPXZyKFMsITEsITApO1JbIiFwcmludCJdfHwoUlsiIXByaW50Il09e30pLFJbIiFwcmludCJdLnByb3BzfHwoUlsiIXByaW50Il0ucHJv''@;'; put 'put ''cHM9e30pO3ZhciBHPVJbIiFwcmludCJdLnByb3BzO2suZ3JpZExpbmVzJiYoRy5ncmlkbGluZXM9dGkoay5ncmlkTGluZXMpKSxudWxsIT1rLmhvcml6b250YWxDZW50ZXJlZCYmKEcuY2VudGVyWD10aShrLmhvcml6b250YWxDZW50ZXJlZCkpLG51bGwhPWsudmVydGljYWxDZW50ZXJlZCYm''@;'; put 'put ''KEcuY2VudGVyWT10aShrLnZlcnRpY2FsQ2VudGVyZWQpKX0oYnJbMF0scGUpO3ZhciBlcj1OZS5tYXRjaCh5RCk7ZXImJigocGVbIiFwcmludCJdfHwocGVbIiFwcmludCJdPXt9KSkubWFyZ2lucz1wZVsiIW1hcmdpbnMiXT1QRCh2cihlclswXSkpKTt2YXIgTWk9TmUubWF0Y2goTUQpO01p''@;'; put 'put ''JiZmdW5jdGlvbiBJRChTLFIpe3ZhciBrPXZyKFMsITEsITApO2RlbGV0ZSBrLmlkLGRlbGV0ZSBrWzBdLFJbIiFwcmludCJdfHwoUlsiIXByaW50Il09e30pLFJbIiFwcmludCJdLnByb3BzfHwoUlsiIXByaW50Il0ucHJvcHM9e30pO3ZhciBHPVJbIiFwcmludCJdLnByb3BzO2sub3JpZW50''@;'; put 'put ''YXRpb24mJihHLm9yaWVudGF0aW9uPWsub3JpZW50YXRpb24pLGsuc2NhbGUmJihHLnNjYWxlPStrLnNjYWxlKSwray5maXRUb0hlaWdodD49MCYmKChHLmZpdHx8KEcuZml0PXt9KSkuaGVpZ2h0PStrLmZpdFRvSGVpZ2h0KSwray5maXRUb1dpZHRoPj0wJiYoKEcuZml0fHwoRy5maXQ9e30p''@;'; put 'put ''KS53aWR0aD0ray5maXRUb1dpZHRoKSxrLnBhcGVySGVpZ2h0JiZrLnBhcGVyV2lkdGg/Ry5wYXBlcj17d2lkdGg6ay5wYXBlcldpZHRoLGhlaWdodDprLnBhcGVySGVpZ2h0fTprLnBhcGVyU2l6ZSYmKEcucGFwZXI9bjhbRy5wYXBlcj0ray5wYXBlclNpemVdfHxHLnBhcGVyKSxrLmhvcml6''@;'; put 'put ''b250YWxEcGk/Ry5kcGk9K2suaG9yaXpvbnRhbERwaTprLnZlcnRpY2FsRHBpJiYoRy5kcGk9K2sudmVydGljYWxEcGkpLCJhdXRvbWF0aWMiIT0oay5maXJzdFBhZ2VOdW1iZXJ8fCJhdXRvbWF0aWMiKSYmKEcuZmlyc3Q9K2suZmlyc3RQYWdlTnVtYmVyKSx0aShrLmJsYWNrQW5kV2hpdGUp''@;'; put 'put ''JiYoRy5idz0hMCksdGkoay5kcmFmdCkmJihHLmRyYWZ0PSEwKSwib3ZlclRoZW5Eb3duIj09ay5wYWdlT3JkZXImJihHLm9yZGVyPSJvdmVyIiksQURbay5jZWxsQ29tbWVudHNdJiYoRy5jb21tZW50cz1BRFtrLmNlbGxDb21tZW50c10pLEREW2suZXJyb3JzXSYmKEcuZXJyb3JzPUREW2su''@;'; put 'put ''ZXJyb3JzXSl9KE1pWzBdLHBlKTt2YXIgRmk9TmUubWF0Y2goajUpO0ZpJiZmdW5jdGlvbiB2aihTLFIpe2lmKFJbIiFwcmludCJdfHwoUlsiIXByaW50Il09e30pLFNbMV0pe3ZhciBrPSIiLEc9MDtTWzFdLnJlcGxhY2UoZW4sZnVuY3Rpb24oUSxvZSl7aWYoIi8iIT1RLmNoYXJBdCgxKSlr''@;'; put 'put ''PVEuc2xpY2UoMSwtMSksRz1vZStRLmxlbmd0aDtlbHNlIGlmKGspe3ZhciBnZT1rLm1hdGNoKC9IZWFkZXIvKT8iaGVhZGVyIjoiZm9vdGVyIixwZT1rLnJlcGxhY2UoL0hlYWRlcnxGb290ZXIvLCIiKTtrPSIiLFJbIiFwcmludCJdW2dlXXx8KFJbIiFwcmludCJdW2dlXT17fSksUlsiIXBy''@;'; put 'put ''aW50Il1bZ2VdW3BlXT1RcihnbyhTWzFdLnNsaWNlKEcsb2UpKSl9fSl9fShGaSxwZSk7dmFyIG5hPU5lLm1hdGNoKHJqKTtuYSYmKChwZVsiIXByaW50Il18fChwZVsiIXByaW50Il09e30pKS5yb3dCcmVha3M9cGVbIiFyb3dCcmVha3MiXT1mdW5jdGlvbiBjaihTKXt2YXIgUj1bXTtyZXR1''@;'; put 'put ''cm4oUy5tYXRjaChGMCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPXZyKGspO1IucHVzaCh7UjorRy5pZH0pfSksUn0obmFbMF0pKTt2YXIgY2E9TmUubWF0Y2gobGIpO2NhJiYoKHBlWyIhcHJpbnQiXXx8KHBlWyIhcHJpbnQiXT17fSkpLmNvbEJyZWFrcz1wZVsiIWNvbEJyZWFr''@;'; put 'put ''cyJdPWZ1bmN0aW9uIGtuZShTKXt2YXIgUj1bXTtyZXR1cm4oUy5tYXRjaChGMCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPXZyKGspO1IucHVzaCh7QzorRy5pZH0pfSksUn0oY2FbMF0pKTt2YXIgTGk9W107aWYoKExpPU5lLm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8p''@;'; put 'put ''KSYmKHBlWyIhcmVsIl09TGlbMV0pLChMaT1OZS5tYXRjaCgvbGVnYWN5RHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihwZVsiIWxlZ3JlbCJdPUxpWzFdKSwoTGk9TmUubWF0Y2goYkQpKSYmKHBlWyIhY3RybGlkIl09TGkubWFwKGZ1bmN0aW9uKFZuKXtyZXR1cm4gdnIoVm4pfSkpLChMaT1O''@;'; put 'put ''ZS5tYXRjaChTRCkpJiZmdW5jdGlvbiBwUyhTLFIpe1NbIiF0YWJsZXJlZnMiXXx8KFNbIiF0YWJsZXJlZnMiXT1bXSksKFIubWF0Y2goZlMpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihrKXtTWyIhdGFibGVyZWZzIl0ucHVzaCh2cihrKS5pZCl9KX0ocGUsTGlbMV0pLFImJlIubm9kaW0mJih5''@;'; put 'put ''ZS5zLmM9eWUucy5yPTApLCFwZVsiIXJlZiJdJiZ5ZS5lLmM+PXllLnMuYyYmeWUuZS5yPj15ZS5zLnImJihwZVsiIXJlZiJdPXJhKHllKSksUi5zaGVldFJvd3M+MCYmcGVbIiFyZWYiXSl7dmFyIGtyPW9vKHBlWyIhcmVmIl0pO1Iuc2hlZXRSb3dzPD0ra3IuZS5yJiYoa3IuZS5yPVIuc2hl''@;'; put 'put ''ZXRSb3dzLTEsa3IuZS5yPnllLmUuciYmKGtyLmUucj15ZS5lLnIpLGtyLmUucjxrci5zLnImJihrci5zLnI9a3IuZS5yKSxrci5lLmM+eWUuZS5jJiYoa3IuZS5jPXllLmUuYyksa3IuZS5jPGtyLnMuYyYmKGtyLnMuYz1rci5lLmMpLHBlWyIhZnVsbHJlZiJdPXBlWyIhcmVmIl0scGVbIiFy''@;'; put 'put ''ZWYiXT1yYShrcikpfXJldHVybiBrdCYmKHBlWyIhc2hlZXRGb3JtYXQiXT1mdW5jdGlvbiB4RChTKXt2YXIgUj17fSxrPXt9LEc9ITEsUT17fSxvZT0hMTtyZXR1cm4gUy5kZWZhdWx0Um93SGVpZ2h0JiYoRz0hMCxrLmhwdD1wYXJzZUZsb2F0KFMuZGVmYXVsdFJvd0hlaWdodCkpLFMuemVy''@;'; put 'put ''b0hlaWdodCYmKEc9ITAsay5oaWRkZW49dGkoUy56ZXJvSGVpZ2h0KSksUy5iYXNlQ29sV2lkdGg/KG9lPSEwLFEud2NoPXBhcnNlRmxvYXQoUy5iYXNlQ29sV2lkdGgpKTpTLmRlZmF1bHRDb2xXaWR0aCYmKG9lPSEwLFEud2NoPXBhcnNlRmxvYXQoUy5kZWZhdWx0Q29sV2lkdGgpLTUvVGMp''@;'; put 'put ''LFMub3V0bGluZUxldmVsQ29sJiYoUi5jb2xvdXRsaW5lPXBhcnNlSW50KFMub3V0bGluZUxldmVsQ29sKSksUy5vdXRsaW5lTGV2ZWxSb3cmJihSLnJvd291dGxpbmU9cGFyc2VJbnQoUy5vdXRsaW5lTGV2ZWxSb3cpKSxTLnRoaWNrQm90dG9tJiYoUi5ib3R0aGljaz10aShTLnRoaWNrQm90''@;'; put 'put ''dG9tKSksUy50aGlja1RvcCYmKFIudG9wdGhpY2s9dGkoUy50aGlja1RvcCkpLFMuZHlEZXNjZW50JiYoUi5keURlc2NlbnQ9cGFyc2VGbG9hdChTLmR5RGVzY2VudCkpLEcmJihqdihrKSxSLnJvdz1rKSxvZSYmKFEwKFEpLFIuY29sPVEpLFJ9KHZyKGt0WzBdKSkpLE90Lmxlbmd0aD4wJiYo''@;'; put 'put ''cGVbIiFjb2xzIl09T3QpLFNuLmxlbmd0aD4wJiYocGVbIiFtZXJnZXMiXT1TbiksR1siIWlkIl1bcGVbIiFyZWwiXV0mJihwZVsiIWRyYXdlbCJdPUdbIiFpZCJdW3BlWyIhcmVsIl1dKSxHWyIhaWQiXVtwZVsiIWxlZ3JlbCJdXSYmKHBlWyIhbGVnZHJhd2VsIl09R1siIWlkIl1bcGVbIiFs''@;'; put 'put ''ZWdyZWwiXV0pLChwZVsiIWN0cmxpZCJdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihWbil7Vm4ucmVsPUdbIiFpZCJdW1ZuLmlkXX0pLG51bGw9PXBlWyIhZ3JpZGxpbmVzIl0mJihwZVsiIWdyaWRsaW5lcyJdPSEwKSxwZX0oUyxHLGssUSxvZSxnZSxwZSl9KGV0LFIsUSx5ZSxvZVtHXSxQZSxO''@;'; put 'put ''ZSxZZSk7YnJlYWs7Y2FzZSJjaGFydCI6Y3Q9ZnVuY3Rpb24geXooUyxSLGssRyxRLG9lLGdlLHBlKXtyZXR1cm4iLmJpbiI9PT1SLnNsaWNlKC00KT9mdW5jdGlvbiBoeihTLFIsayxHLFEpe2lmKCFTKXJldHVybiBTO0d8fChHPXsiIWlkIjp7fX0pO3ZhciBvZT17IiF0eXBlIjoiY2hhcnQi''@;'; put 'put ''LCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sZ2U9W10scGU9ITE7cmV0dXJuIHVyKFMsZnVuY3Rpb24oUGUsTmUsWWUpe3N3aXRjaChZZSl7Y2FzZSA1NTA6b2VbIiFyZWwiXT1QZTticmVhaztjYXNlIDY1MTpRLlNoZWV0c1trXXx8KFEuU2hlZXRzW2tdPXt9KSxQZS5uYW1lJiYoUS5TaGVl''@;'; put 'put ''dHNba10uQ29kZU5hbWU9UGUubmFtZSk7YnJlYWs7Y2FzZSA1NjI6Y2FzZSA2NTI6Y2FzZSA2Njk6Y2FzZSA2Nzk6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA0NzY6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgMzU6cGU9ITA7YnJlYWs7Y2FzZSAzNjpwZT0hMTticmVhaztjYXNlIDM3OmdlLnB1c2go''@;'; put 'put ''TmUpO2JyZWFrO2Nhc2UgMzg6Z2UucG9wKCk7YnJlYWs7ZGVmYXVsdDppZigoTmV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApZ2UucHVzaChOZSk7ZWxzZSBpZigoTmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKWdlLnBvcCgpO2Vsc2UgaWYoIXBlfHxSLldURil0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''ZXhwZWN0ZWQgcmVjb3JkICIrWWUrIiAiK05lKX19LFIpLEdbIiFpZCJdW29lWyIhcmVsIl1dJiYob2VbIiFkcmF3ZWwiXT1HWyIhaWQiXVtvZVsiIXJlbCJdXSksb2V9KFMsRyxrLFEsb2UpOmZ1bmN0aW9uIHV6KFMsUixrLEcsUSl7aWYoIVMpcmV0dXJuIFM7R3x8KEc9eyIhaWQiOnt9fSk7''@;'; put 'put ''dmFyIGdlLG9lPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSxwZT1TLm1hdGNoKF9EKTtwZSYmY2IocGVbMF0sMCxRLGspO3ZhciB5ZT1TLm1hdGNoKHlEKTtyZXR1cm4geWUmJihvZVsiIW1hcmdpbnMiXT1QRCh2cih5ZVswXSkpKSwoZ2U9Uy5tYXRjaCgvZHJh''@;'; put 'put ''d2luZyByOmlkPSIoLio/KSIvKSkmJihvZVsiIXJlbCJdPWdlWzFdKSxHWyIhaWQiXVtvZVsiIXJlbCJdXSYmKG9lWyIhZHJhd2VsIl09R1siIWlkIl1bb2VbIiFyZWwiXV0pLG9lfShTLDAsayxRLG9lKX0oZXQsUixRLHllLG9lW0ddLFBlKTticmVhaztjYXNlIm1hY3JvIjpjdD1mdW5jdGlv''@;'; put 'put ''biBfeihTLFIsayxHLFEsb2UsZ2UscGUpe3JldHVybiBSLnNsaWNlKC00KSx7IiF0eXBlIjoibWFjcm8ifX0oMCxSKTticmVhaztjYXNlImRpYWxvZyI6Y3Q9ZnVuY3Rpb24gd3ooUyxSLGssRyxRLG9lLGdlLHBlKXtyZXR1cm4gUi5zbGljZSgtNCkseyIhdHlwZSI6ImRpYWxvZyJ9fSgwLFIp''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc2hlZXQgdHlwZSAiK3BlKX1pZih5ZS5jYWxsYmFjaylyZXR1cm47Z2VbR109Y3QsZnVuY3Rpb24gSnooUyxSLGssRyxRLG9lLGdlLHBlKXtpZihTJiZTWyIhZHJhd2VsIl0pe3ZhciB5ZT1mbihTWyIhZHJhd2Vs''@;'; put 'put ''Il0uVGFyZ2V0LEcpLFBlPVZyKHllKSxOZT1mdW5jdGlvbiBMQyhTLFIsayxHLFEpe3ZhciBvZT17Y2hhcnRzOltdLGltYWdlczpbXSxzaGFwZXM6W119O2lmKCFTKXJldHVybiBvZTt2YXIgZ2U9UXx8e307cmV0dXJuKFMubWF0Y2goLzxbXjxdKj8oYWJzb2x1dGVBbmNob3J8b25lQ2VsbEFu''@;'; put 'put ''Y2hvcnx0d29DZWxsQW5jaG9yKS4qPyhhYnNvbHV0ZUFuY2hvcnxvbmVDZWxsQW5jaG9yfHR3b0NlbGxBbmNob3IpLio/Pi9nKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciB5ZT0iIixQZT17dHlwZToiIn0sTmU9e30sWWU9ITAsZXQ9ITEsY3Q9ITEsRXQ9ITEsYXQ9e3M6e319LGJ0''@;'; put 'put ''PS0xLGp0PVtdLGt0PVtdLE90PXtzOnthbGlnbm1lbnQ6e2hvcml6b250YWw6ImNlbnRlciIsdmVydGljYWw6ImNlbnRlciJ9fX0sS3Q9IiIsVG49LTEsU249e307cGUucmVwbGFjZShlbixmdW5jdGlvbihscixYbil7anQ9bnVsbDt2YXIgQm49dnIobHIpLGZyPVduKEJuWzBdKS5yZXBsYWNl''@;'; put 'put ''KC9bXC9dPz4kLywiIik7c3dpdGNoKGZyKXtjYXNlIjxjbGllbnREYXRhIjpicmVhaztjYXNlIjxhYnNvbHV0ZUFuY2hvciI6Y2FzZSI8b25lQ2VsbEFuY2hvciI6Y2FzZSI8dHdvQ2VsbEFuY2hvciI6UGUudHlwZT1XbihCblswXSkucmVwbGFjZSgvWzw+XS9nLCIiKTticmVhaztjYXNlIjwv''@;'; put 'put ''YWJzb2x1dGVBbmNob3IiOmNhc2UiPC9vbmVDZWxsQW5jaG9yIjpjYXNlIjwvdHdvQ2VsbEFuY2hvciI6YnJlYWs7Y2FzZSI8cG9zIjpQZS5wb3M9e3g6K0JuLngseTorQm4ueX07YnJlYWs7Y2FzZSI8ZXh0IjpZZSYmKFBlLmV4dD17eDorQm4uY3gseTorQm4uY3l9KTticmVhaztjYXNlIjxm''@;'; put 'put ''cm9tIjpjYXNlIjx0byI6TmU9e307YnJlYWs7Y2FzZSI8L2Zyb20iOlllJiYoUGUuZnJvbT1OZSk7YnJlYWs7Y2FzZSI8L3RvIjpZZSYmKFBlLnRvPU5lKTticmVhaztjYXNlIjxjb2wiOmNhc2UiPGNvbE9mZiI6Y2FzZSI8cm93IjpjYXNlIjxyb3dPZmYiOmJ0PVhuK2xyLmxlbmd0aDticmVh''@;'; put 'put ''aztjYXNlIjwvY29sIjpOZS5jPStwZS5zbGljZShidCxYbik7YnJlYWs7Y2FzZSI8L2NvbE9mZiI6TmUuY09mZj0rcGUuc2xpY2UoYnQsWG4pO2JyZWFrO2Nhc2UiPC9yb3ciOk5lLnI9K3BlLnNsaWNlKGJ0LFhuKTticmVhaztjYXNlIjwvcm93T2ZmIjpOZS5yT2ZmPStwZS5zbGljZShidCxY''@;'; put 'put ''bik7YnJlYWs7Y2FzZSI8c3AiOnllPSJzaGFwZSIsT3QuQW5jaG9yPVBlLG9lLnNoYXBlcy5wdXNoKE90KSxZZT0hMTticmVhaztjYXNlIjwvc3AiOlllPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWNGcmFtZSI6eWU9ImdyYXBoaWMiLFllPSExO2JyZWFrO2Nhc2UiPC9ncmFwaGljRnJhbWUiOlll''@;'; put 'put ''PSEwO2JyZWFrO2Nhc2UiPHBpYyI6eWU9InBpY3R1cmUiLFllPSExO2JyZWFrO2Nhc2UiPC9waWMiOlllPSEwO2JyZWFrO2Nhc2UiPGdycFNwIjp5ZT0iZ3JvdXBzaGFwZSIsWWU9ITE7YnJlYWs7Y2FzZSI8L2dycFNwIjpZZT0hMDticmVhaztjYXNlIjxncmFwaGljIjpjYXNlIjwvZ3JhcGhp''@;'; put 'put ''YyI6Y2FzZSI8eGZybSI6Y2FzZSI8L3hmcm0iOmNhc2UiPG9mZiI6YnJlYWs7Y2FzZSI8Z3JhcGhpY0RhdGEiOmV0PSEwO2JyZWFrO2Nhc2UiPC9ncmFwaGljRGF0YSI6ZXQ9ITE7YnJlYWs7Y2FzZSI8YmxpcEZpbGwiOmV0PSEwO2JyZWFrO2Nhc2UiPC9ibGlwRmlsbCI6ZXQ9ITE7YnJlYWs7''@;'; put 'put ''Y2FzZSI8L2JsaXAiOmJyZWFrO2Nhc2UiPHNyY1JlY3QiOmV0PSEwO2JyZWFrO2Nhc2UiPC9zcmNSZWN0IjpldD0hMTticmVhaztjYXNlIjxub0ZpbGwiOmlmKGN0KWJyZWFrOyI8c3BQciI9PWt0LnNsaWNlKC0xKVswXSYmKE90LnMuZmdDb2xvcj1udWxsKTticmVhaztjYXNlIjwvc29saWRG''@;'; put 'put ''aWxsIjppZihjdHx8RXQpYnJlYWs7IjxzcFByIj09a3Quc2xpY2UoLTIpWzBdP090LnMuZmdDb2xvcj1TbjoiPHJQciI9PWt0LnNsaWNlKC0yKVswXSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoYXQucy5jb2xvcj1TbiksU249e30sRXQ9ITE7YnJlYWs7Y2FzZSI8cHJzdEdlb20iOiJz''@;'; put 'put ''aGFwZSI9PXllJiYoT3RbIiFzaGFwZSJdPUJuLnByc3QpO2JyZWFrO2Nhc2UiPC9wcnN0R2VvbSI6Y2FzZSI8YXZMc3QiOmJyZWFrO2Nhc2UiPHR4Qm9keSI6ZXQ9ITAsT3QuUj1bXTticmVhaztjYXNlIjwvdHhCb2R5IjpldD0hMTticmVhaztjYXNlIjxib2R5UHIiOk90LnMuYWxpZ25tZW50''@;'; put 'put ''LnZlcnRpY2FsPXBCW0JuLmFuY2hvcnx8InQiXXx8InRvcCI7YnJlYWs7Y2FzZSI8bHN0U3R5bGUiOmJyZWFrO2Nhc2UiPHQiOlRuPVhuK2xyLmxlbmd0aDticmVhaztjYXNlIjxiciI6Y2FzZSI8YnIvPiI6S3QrPSJcbiI7YnJlYWs7Y2FzZSI8L3QiOkt0Kz1wZS5zbGljZShUbixYbik7YnJl''@;'; put 'put ''YWs7Y2FzZSI8cFByIjpPdC5zLmFsaWdubWVudC5ob3Jpem9udGFsfHwoT3Qucy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1QNVtCbi5hbGdufHwibCJdfHwibGVmdCIpLGt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGF0LnMuYWxpZ25tZW50Lmhvcml6b250YWw9UDVbQm4uYWxnbnx8ImwiXXx8''@;'; put 'put ''ImxlZnQiKTticmVhaztjYXNlIjxyUHIiOkJuLnN6JiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihPdC5zLnN6PWF0LnMuc3o9K0JuLnN6LzEwMCk7YnJlYWs7Y2FzZSI8cCI6S3Q9IiIsYXQ9e3Q6InMiLHY6IiIsczp7YWxpZ25tZW50Ont9fX07YnJlYWs7Y2FzZSI8L3AiOiJzaGFwZSI9''@;'; put 'put ''PXllJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihPdC52PShPdC52fHwiIikrS3QsYXQudj1LdCxPdC5SLnB1c2goYXQpKTticmVhaztjYXNlIjxsYXRpbiI6Qm4udHlwZWZhY2UmJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGF0LnMubmFtZT1Cbi50eXBlZmFjZSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8c3R5bGUiOmV0PSEwLGN0PSEwO2JyZWFrO2Nhc2UiPC9zdHlsZSI6ZXQ9ITEsY3Q9ITE7YnJlYWs7Y2FzZSI8bG5SZWYiOmNhc2UiPGZpbGxSZWYiOmNhc2UiPGVmZmVjdFJlZiI6Y2FzZSI8Zm9udFJlZiI6YnJlYWs7Y2FzZSI8L2ZpbGxSZWYiOiFjdCYmInNoYXBlIj09eWUmJihPdC5z''@;'; put 'put ''LmZnQ29sb3I9U24pLFNuPXt9O2JyZWFrO2Nhc2UiPC9mb250UmVmIjohY3QmJiJzaGFwZSI9PXllJiYoT3Qucy5jb2xvcj1TbiksU249e307YnJlYWs7Y2FzZSI8c2NoZW1lQ2xyIjp2YXIgYnI9e2JnMToibHQxIixiZzI6Imx0MiIsdHgxOiJkazEiLHR4MjoiZGsyIn1bQm4udmFsXXx8Qm4u''@;'; put 'put ''dmFsLGVyPSgoRy50aGVtZUVsZW1lbnRzfHx7fSkuY2xyU2NoZW1lfHxbXSkuZmluZChmdW5jdGlvbihGaSl7cmV0dXJuIEZpLm5hbWU9PWJyfSk7ZXI/U24ucmdiPWVyLnJnYjpFdD0hMDticmVhaztjYXNlIjxzY3JnYkNsciI6RXQ9ITA7YnJlYWs7Y2FzZSI8c3JnYkNsciI6U24ucmdiPUJu''@;'; put 'put ''LnZhbC5zbGljZSgtNik7YnJlYWs7Y2FzZSI8aHNsQ2xyIjpjYXNlIjxzeXNDbHIiOmNhc2UiPHByc3RDbHIiOkV0PSEwO2JyZWFrO2Nhc2UiPGNoYXJ0IjpqdD1vZS5jaGFydHM7dmFyIE1pPUJuLmlkO2Nhc2UiPGJsaXAiOmp0fHwoanQ9b2UuaW1hZ2VzLE1pPUJuLmVtYmVkKSxqdC5wdXNo''@;'; put 'put ''KHtBbmNob3I6UGUsVGFyZ2V0OihSWyIhaWQiXVtNaV18fHt9KS5UYXJnZXR9KSxCbi5saW5rJiYoanRbanQubGVuZ3RoLTFdLkxpbms9KFJbIiFpZCJdW0JuLmxpbmtdfHx7fSkuVGFyZ2V0KTticmVhaztjYXNlIjxncnBTcFByIjpldD0hMDticmVhaztjYXNlIjwvZ3JwU3BQciI6ZXQ9ITE7''@;'; put 'put ''YnJlYWs7Y2FzZSI8bnZHcnBTcFByIjpldD0hMDticmVhaztjYXNlIjwvbnZHcnBTcFByIjpldD0hMTticmVhaztjYXNlIjxzcFByIjpldD0hMDticmVhaztjYXNlIjwvc3BQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8c3RyZXRjaCI6Y2FzZSI8L3N0cmV0Y2giOmNhc2UiPGZpbGxSZWN0IjpjYXNl''@;'; put 'put ''IjxudkdyYXBoaWNGcmFtZVByIjpjYXNlIjwvbnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8Y052R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9jTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8Z3JhcGhpY0ZyYW1lTG9ja3MiOmNhc2UiPG52UGljUHIiOmNhc2UiPC9udlBpY1ByIjpjYXNlIjxjTnZQaWNQ''@;'; put 'put ''ciI6Y2FzZSI8L2NOdlBpY1ByIjpjYXNlIjxwaWNMb2NrcyI6Y2FzZSI8Y052R3JwU3BQciI6Y2FzZSI8L2NOdkdycFNwUHIiOmNhc2UiPGdycFNwTG9ja3MiOmNhc2UiPG52U3BQciI6Y2FzZSI8L252U3BQciI6Y2FzZSI8Y052U3BQciI6Y2FzZSI8L2NOdlNwUHIiOmNhc2UiPHNwTG9ja3Mi''@;'; put 'put ''OmJyZWFrO2Nhc2UiPGNOdlByIjpldD0hMDticmVhaztjYXNlIjwvY052UHIiOmV0PSExO2JyZWFrO2Nhc2UiPGN4blNwIjpldD0hMDticmVhaztjYXNlIjwvY3huU3AiOmV0PSExO2JyZWFrO2Nhc2UiPGNOdkN4blNwUHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9jTnZDeG5TcFByIjpldD0hMTti''@;'; put 'put ''cmVhaztjYXNlIjxudkN4blNwUHIiOmNhc2UiPC9udkN4blNwUHIiOmJyZWFrO2Nhc2UiPGV4dExzdCI6ZXQ9ITAsY3Q9ITA7YnJlYWs7Y2FzZSI8L2V4dExzdCI6ZXQ9ITEsY3Q9ITE7YnJlYWs7Y2FzZSI8L2V4dCI6YnJlYWs7ZGVmYXVsdDppZihnZSYmZ2UuV1RGJiYhZXQpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJ1bnJlY29nbml6ZWQgIitCblswXSsiIGluIGRyYXdpbmciKX1yZXR1cm4iPC8iPT1mci5zbGljZSgwLDIpP2t0LnBvcCgpOiIvPiIhPWxyLnNsaWNlKGxyLmxlbmd0aC0yKSYma3QucHVzaChmciksIiJ9KX0pLG9lfShucihrLHllLCEwKSxiZihucihrLFBlLCEwKSx5ZSksMCxw''@;'; put 'put ''ZSxRKTtpZihOZSl7aWYoTmUuY2hhcnRzKWZvcih2YXIgWWU9MDtZZTxOZS5jaGFydHMubGVuZ3RoOysrWWUpe3ZhciBldD1OZS5jaGFydHNbWWVdLGN0PWZuKGV0LlRhcmdldCx5ZSksRXQ9VnIoY3QpLGF0PSJjaGFydCI9PVImJjA9PVllLGJ0PWIyKG5yKGssY3QsITApLDAsMCxiZihucihr''@;'; put 'put ''LEV0LCEwKSxjdCksMCxhdD9TOm51bGwsZXQsYXQ/bnVsbDpTKTthdHx8KFNbIiFjaGFydHMiXXx8KFNbIiFjaGFydHMiXT1bXSksU1siIWNoYXJ0cyJdLnB1c2goYnQpKX1pZihRLmJvb2tJbWFnZXMmJk5lLmltYWdlcylmb3IodmFyIGp0PTA7anQ8TmUuaW1hZ2VzLmxlbmd0aDsrK2p0KXt2''@;'; put 'put ''YXIga3Q9TmUuaW1hZ2VzW2p0XSxPdD17IiF0eXBlIjoiaW1hZ2UiLCIhcG9zIjpGayhrdC5BbmNob3IpLCIhcG9zVHlwZSI6a3QuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksIiFhYnNwb3MiOkw1KGt0LkFuY2hvcixTKSwiIXJlbHBvcyI6QUMoa3QuQW5jaG9yLFMpfTtpZihr''@;'; put 'put ''dC5UYXJnZXQmJihPdFsiIXBhdGgiXT1mbihrdC5UYXJnZXQseWUpLE90WyIhZGF0YSJdPVR0KGssT3RbIiFwYXRoIl0pLE90WyIhZGF0YXR5cGUiXT0ic3RyaW5nIj09dHlwZW9mIE90WyIhZGF0YSJdPyJiaW5hcnkiOiJidWZmZXIiKSxrdC5MaW5rJiYoT3RbIiFkYXRhdHlwZSJdfHwoT3Rb''@;'; put 'put ''IiFkYXRhdHlwZSJdPSJyZW1vdGUiKSxPdFsiIWxpbmsiXT1rdC5MaW5rKSwhT3RbIiFkYXRhdHlwZSJdKXRocm93IkltYWdlIGRhdGEgY2Fubm90IGJlIGZvdW5kIjtTWyIhaW1hZ2VzIl18fChTWyIhaW1hZ2VzIl09W10pLFNbIiFpbWFnZXMiXS5wdXNoKE90KX12YXIgS3QsVG47aWYoTmUu''@;'; put 'put ''c2hhcGVzKWZvcih2YXIgU249MDtTbjxOZS5zaGFwZXMubGVuZ3RoOysrU24pVG49eyIhdHlwZSI6InNoYXBlIiwiIXBvcyI6TDUoKEt0PU5lLnNoYXBlc1tTbl0pLkFuY2hvcixTKSwiIXBvc1R5cGUiOkt0LkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjpMNShL''@;'; put 'put ''dC5BbmNob3IsUyksIiFyZWxwb3MiOkFDKEt0LkFuY2hvcixTKX0sWyJ2IiwiIXNoYXBlIiwicyIsIlIiXS5mb3JFYWNoKHJyKSxTWyIhc2hhcGVzIl18fChTWyIhc2hhcGVzIl09W10pLFNbIiFzaGFwZXMiXS5wdXNoKFRuKX19ZnVuY3Rpb24gcnIobHIpe0t0W2xyXSYmKFRuW2xyXT1LdFts''@;'; put 'put ''cl0pfX0oY3QscGUsUyxSLHllLDAsMCxOZSk7dmFyIEV0PVtdO3JldHVybiBvZSYmb2VbR10mJk9lKG9lW0ddKS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXtpZihvZVtHXVthdF0uVHlwZT09S2EuQ01OVCl7dmFyIGJ0PWZuKG9lW0ddW2F0XS5UYXJnZXQsUik7aWYoIShFdD1mdW5jdGlvbiB4eihT''@;'; put 'put ''LFIsayl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rpb24gZWIoUyxSKXt2YXIgaz1bXSxHPVtdLFE9e30sb2U9ITE7cmV0dXJuIHVyKFMsZnVuY3Rpb24ocGUseWUsUGUpe3N3aXRjaChQZSl7Y2FzZSA2MzI6Ry5wdXNoKHBlKTticmVhaztjYXNlIDYzNTpRPXBlO2JyZWFrO2Nh''@;'; put 'put ''c2UgNjM3OlEudD1wZS50LFEuaD1wZS5oLFEucj1wZS5yO2JyZWFrO2Nhc2UgNjM2OmlmKFEuYXV0aG9yPUdbUS5pYXV0aG9yXSxkZWxldGUgUS5pYXV0aG9yLFIuc2hlZXRSb3dzJiZRLnJmeCYmUi5zaGVldFJvd3M8PVEucmZ4LnIpYnJlYWs7US50fHwoUS50PSIiKSxkZWxldGUgUS5yZngs''@;'; put 'put ''ay5wdXNoKFEpO2JyZWFrO2Nhc2UgMzA3MjpjYXNlIDM3OmNhc2UgMzg6YnJlYWs7Y2FzZSAzNTpvZT0hMDticmVhaztjYXNlIDM2Om9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoeWV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKCh5ZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIW9l''@;'; put 'put ''fHxSLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1BlKyIgIit5ZSl9fSksa30oUyxrKTpmdW5jdGlvbiB6ayhTLFIpe2lmKFMubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIGs9W10sRz1bXSxRPVMubWF0Y2goLzwoPzpcdys6''@;'; put 'put ''KT9hdXRob3JzPihbXHNcU10qKTxcLyg/Olx3KzopP2F1dGhvcnM+Lyk7USYmUVsxXSYmUVsxXS5zcGxpdCgvPFwvXHcqOj9hdXRob3I+LykuZm9yRWFjaChmdW5jdGlvbihnZSl7aWYoIiIhPT1nZSYmIiIhPT1nZS50cmltKCkpe3ZhciBwZT1nZS5tYXRjaCgvPCg/Olx3KzopP2F1dGhvclte''@;'; put 'put ''Pl0qPiguKikvKTtwZSYmay5wdXNoKHBlWzFdKX19KTt2YXIgb2U9Uy5tYXRjaCgvPCg/Olx3KzopP2NvbW1lbnRMaXN0PihbXHNcU10qKTxcLyg/Olx3KzopP2NvbW1lbnRMaXN0Pi8pO3JldHVybiBvZSYmb2VbMV0mJm9lWzFdLnNwbGl0KC88XC9cdyo6P2NvbW1lbnQ+LykuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihnZSl7aWYoIiIhPT1nZSYmIiIhPT1nZS50cmltKCkpe3ZhciBwZT1nZS5tYXRjaCgvPCg/Olx3KzopP2NvbW1lbnRbXj5dKj4vKTtpZihwZSl7dmFyIHllPXZyKHBlWzBdKSxQZT17YXV0aG9yOnllLmF1dGhvcklkJiZrW3llLmF1dGhvcklkXXx8InNoZWV0anNnaG9zdCIscmVm''@;'; put 'put ''OnllLnJlZixndWlkOnllLmd1aWR9LE5lPU5vKHllLnJlZik7aWYoIShSLnNoZWV0Um93cyYmUi5zaGVldFJvd3M8PU5lLnIpKXt2YXIgWWU9Z2UubWF0Y2goLzwoPzpcdys6KT90ZXh0PihbXHNcU10qKTxcLyg/Olx3KzopP3RleHQ+LyksZXQ9ISFZZSYmISFZZVsxXSYmdUMoWWVbMV0pfHx7''@;'; put 'put ''cjoiIix0OiIiLGg6IiJ9O1BlLnI9ZXQuciwiPHQ+PC90PiI9PWV0LnImJihldC50PWV0Lmg9IiIpLFBlLnQ9KGV0LnR8fCIiKS5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSxSLmNlbGxIVE1MJiYoUGUuaD1ldC5oKSxHLnB1c2goUGUpfX19fSksR30oUyxrKX0o''@;'; put 'put ''VHQoUyxidCwhMCksYnQseWUpKXx8IUV0Lmxlbmd0aClyZXR1cm47IWZ1bmN0aW9uIGprKFMsUil7dmFyIEcsaz1BcnJheS5pc0FycmF5KFMpO1IuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgb2U9Tm8oUS5yZWYpO2lmKGs/KFNbb2Uucl18fChTW29lLnJdPVtdKSxHPVNbb2Uucl1bb2UuY10p''@;'; put 'put ''Okc9U1tRLnJlZl0sIUcpe0c9e3Q6InoifSxrP1Nbb2Uucl1bb2UuY109RzpTW1EucmVmXT1HO3ZhciBnZT1vbyhTWyIhcmVmIl18fCJCRFdHTzEwMDAwMDE6QTEiKTtnZS5zLnI+b2UuciYmKGdlLnMucj1vZS5yKSxnZS5lLnI8b2UuciYmKGdlLmUucj1vZS5yKSxnZS5zLmM+b2UuYyYmKGdl''@;'; put 'put ''LnMuYz1vZS5jKSxnZS5lLmM8b2UuYyYmKGdlLmUuYz1vZS5jKTt2YXIgcGU9cmEoZ2UpO3BlIT09U1siIXJlZiJdJiYoU1siIXJlZiJdPXBlKX1HLmN8fChHLmM9W10pO3ZhciB5ZT17YTpRLmF1dGhvcix0OlEudCxyOlEucn07eWUuciYmInN0cmluZyI9PXR5cGVvZiB5ZS5yJiYoeWUuUj13''@;'; put 'put ''NSh5ZS5yKSksUS5oJiYoeWUuaD1RLmgpLEcuYy5wdXNoKHllKX0pfShjdCxFdCl9fSksZnVuY3Rpb24gSlMoUyxSLGssRyxRLG9lLGdlKXshU3x8IVNbIiF0YWJsZXJlZnMiXXx8IWt8fCFrWyIhaWQiXXx8KFNbIiF0YWJsZXMiXT1bXSxTWyIhdGFibGVyZWZzIl0uZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihwZSl7dmFyIHllPWtbIiFpZCJdW3BlXTtpZih5ZSYmeWUuVGFyZ2V0KXt2YXIgUGU9Zm4oeWUuVGFyZ2V0LEcpOyFmdW5jdGlvbiB2QihTLFIsayxHLFEpe3ZhciBvZT17c3R5bGU6e30saGVhZGVyOjB9LGdlPSExO1MucmVwbGFjZShlbixmdW5jdGlvbihwZSl7dmFyIHllPXZyKHBlKTtz''@;'; put 'put ''d2l0Y2goV24oeWVbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjwvdGFibGU+IjpjYXNlIjwvYXV0b0ZpbHRlcj4iOmNhc2UiPHNvcnRTdGF0ZSI6Y2FzZSI8c29ydFN0YXRlPiI6Y2FzZSI8L3NvcnRTdGF0ZT4iOmNhc2UiPC90YWJsZUNvbHVtbnMiOmNhc2UiPC90YWJsZUNvbHVtbnM+IjpjYXNl''@;'; put 'put ''IjwvdGFibGVDb2x1bW4+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYT4iOmNhc2UiPGNhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhIjpjYXNlIjwvY2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjx0b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVsYSI6Y2Fz''@;'; put 'put ''ZSI8L3RvdGFsc1Jvd0Zvcm11bGE+IjpjYXNlIjx4bWxDb2x1bW5Qcj4iOmNhc2UiPHhtbENvbHVtblByIjpjYXNlIjwveG1sQ29sdW1uUHI+IjpjYXNlIjxzb3J0Q29uZGl0aW9uPiI6Y2FzZSI8c29ydENvbmRpdGlvbiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0''@;'; put 'put ''THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nhc2UiPHRhYmxlIjp5ZS5yZWYmJihvZS5yZWY9eWUucmVmKSx5ZS5uYW1lP29lLm5hbWU9eWUubmFtZTp5ZS5kaXNwbGF5TmFtZSYmKG9lLm5hbWU9eWUuZGlzcGxheU5hbWUpLG51bGwhPXllLmhlYWRlcnJvd2NvdW50JiYxIT0reWUuaGVh''@;'; put 'put ''ZGVycm93Y291bnQ/b2UuaGVhZGVyPSt5ZS5oZWFkZXJyb3djb3VudDpudWxsPT15ZS5oZWFkZXJyb3djb3VudCYmKG9lLmhlYWRlcj0xKTticmVhaztjYXNlIjxhdXRvRmlsdGVyIjpjYXNlIjxhdXRvRmlsdGVyPiI6b2UuZmlsdGVyPSEwO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1ucyI6Y2Fz''@;'; put 'put ''ZSI8dGFibGVDb2x1bW5zPiI6b2UuY29scz1bXTticmVhaztjYXNlIjx0YWJsZVN0eWxlSW5mbyI6eWUuc2hvd1Jvd1N0cmlwZXMmJihvZS5zdHlsZS5yb3dzdHJpcGU9dGkoeWUuc2hvd1Jvd1N0cmlwZXMpKSx5ZS5zaG93Q29sdW1uU3RyaXBlcyYmKG9lLnN0eWxlLmNvbHN0cmlwZT10aSh5''@;'; put 'put ''ZS5zaG93Q29sdW1uU3RyaXBlcykpLHllLnNob3dGaXJzdENvbHVtbiYmKG9lLnN0eWxlLmNvbGZpcnN0PXRpKHllLnNob3dGaXJzdENvbHVtbikpLHllLnNob3dMYXN0Q29sdW1uJiYob2Uuc3R5bGUuY29sbGFzdD10aSh5ZS5zaG93TGFzdENvbHVtbikpLHllLm5hbWUmJihvZS5zdHlsZS5u''@;'; put 'put ''YW1lPXllLm5hbWUucmVwbGFjZSgvXlRhYmxlU3R5bGUvLCIiKSk7YnJlYWs7Y2FzZSI8dGFibGVDb2x1bW4iOmNhc2UiPHRhYmxlQ29sdW1uPiI6b2UuY29scy5wdXNoKHtpZDoreWUuaWQsbmFtZTp5ZS5uYW1lfSk7YnJlYWs7Y2FzZSI8ZmlsdGVyQ29sdW1uPiI6Y2FzZSI8ZmlsdGVyQ29s''@;'; put 'put ''dW1uIjpjYXNlIjxjdXN0b21GaWx0ZXJzIjpjYXNlIjxjdXN0b21GaWx0ZXJzPiI6Y2FzZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZmlsdGVyQ29sdW1uPiI6Y2FzZSI8L2N1c3RvbUZpbHRlcnM+IjpjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZighZ2UmJlEuV1RGKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIreWVbMF0rIiBpbiB0YWJsZSIpfXJldHVybiBwZX0pLG9lLmZpbHRlcnx8KG9lLmZpbHRlcj0hMSksb2Uuc3R5bGUubmFtZSYmIW9lLnN0eWxlLm5hbWUubWF0Y2goL14oTGlnaHR8TWVkaXVtfERhcmspXGQrJC8pJiZrLlRhYmxlJiZrLlRh''@;'; put 'put ''YmxlLmZvckVhY2goZnVuY3Rpb24ocGUpeyhwZS5uYW1lPT1vZS5zdHlsZS5uYW1lfHxwZS5yYXduYW1lPT1vZS5zdHlsZS5uYW1lKSYmKG9lLnN0eWxlLnJhdz1xdChwZSkpfSksUlsiIXRhYmxlcyJdLnB1c2gob2UpfShUdChSLFBlLCEwKSxTLFEsMCxnZSl9fSksZGVsZXRlIFNbIiF0YWJs''@;'; put 'put ''ZXJlZnMiXSl9KGN0LFMsb2VbR10sUixZZSwwLHllKSx0eXBlb2YgcGFyc2Vfc2hlZXRfcGl2b3Q8InUiJiZQYi5wdXNoKFtjdCxTLG9lW0ddLFIse1NoZWV0czpnZX0sWWUseWVdKSxmdW5jdGlvbiBReihTLFIsayxHLFEsb2UsZ2UscGUpe2lmKFMmJlNbIiFsZWdkcmF3ZWwiXSl7dmFyIHll''@;'; put 'put ''PWZuKFNbIiFsZWdkcmF3ZWwiXS5UYXJnZXQsRyksUGU9bnIoayx5ZSwhMCk7UGUmJmZ1bmN0aW9uIFh2KFMsUixrKXt2YXIgRz0wOyhTLm1hdGNoKGJCKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIGp0LGt0LE90LEt0LFRuLHJyLFNuLGxyLG9lPSIiLGdlPSEwLHBlPSIiLHllPS0x''@;'; put 'put ''LFBlPXt9LE5lPXt9LFllPXt9LGV0PS0xLGN0PS0xLEV0PSIiLGF0PSIiLGJ0PSIiLFhuPSExLEJuPSExO3N3aXRjaChRLnJlcGxhY2UoZW4sZnVuY3Rpb24oZXIsTWkpe3ZhciBGaT12cihlcik7c3dpdGNoKFduKEZpWzBdKSl7Y2FzZSI8c2hhcGUiOkZpLmZpbGxjb2xvciYmKFBlLmNvbG9y''@;'; put 'put ''MT1GaS5maWxsY29sb3IpLEZpLnN0cm9rZWNvbG9yJiYoWWUuY29sb3I9Rmkuc3Ryb2tlY29sb3IpO2JyZWFrO2Nhc2UiPGZpbGwiOmNhc2UiPGZpbGw+IjoiPHY6ZmlsbCI9PUZpWzBdJiYoRmkuY29sb3IyJiYoUGUuY29sb3IyPUZpLmNvbG9yMiksRmkudHlwZSYmKFBlLnR5cGU9RmkudHlw''@;'; put 'put ''ZSkpO2JyZWFrO2Nhc2UiPC9maWxsPiI6Y2FzZSI8bG9jayI6Y2FzZSI8bG9jay8+IjpicmVhaztjYXNlIjxzaGFkb3ciOkZpLmNvbG9yJiYoTmUuY29sb3I9RmkuY29sb3IpLEZpLm9uJiYoTmUub249Rmkub24pO2JyZWFrO2Nhc2UiPENsaWVudERhdGEiOkZpLk9iamVjdFR5cGUmJihvZT1G''@;'; put 'put ''aS5PYmplY3RUeXBlKTticmVhaztjYXNlIjxWaXNpYmxlIjpjYXNlIjxWaXNpYmxlLz4iOmdlPSExO2JyZWFrO2Nhc2UiPEFuY2hvciI6Y2FzZSI8QW5jaG9yPiI6Y2FzZSI8Um93IjpjYXNlIjxSb3c+IjpjYXNlIjxDb2x1bW4iOmNhc2UiPENvbHVtbj4iOmNhc2UiPEZtbGFNYWNybyI6Y2Fz''@;'; put 'put ''ZSI8Rm1sYU1hY3JvPiI6Y2FzZSI8Rm1sYUxpbmsiOmNhc2UiPEZtbGFMaW5rPiI6Y2FzZSI8Rm1sYVJhbmdlIjpjYXNlIjxGbWxhUmFuZ2U+IjpjYXNlIjxTZWxUeXBlIjpjYXNlIjxTZWxUeXBlPiI6Y2FzZSI8VmFsIjpjYXNlIjxWYWw+IjpjYXNlIjxNaW4iOmNhc2UiPE1pbj4iOmNhc2Ui''@;'; put 'put ''PE1heCI6Y2FzZSI8TWF4PiI6Y2FzZSI8SW5jIjpjYXNlIjxJbmM+IjpjYXNlIjxQYWdlIjpjYXNlIjxQYWdlPiI6Y2FzZSI8Q2hlY2tlZCI6Y2FzZSI8Q2hlY2tlZD4iOmNhc2UiPHRleHRib3giOmNhc2UiPHRleHRib3g+Ijp5ZT1NaStlci5sZW5ndGg7YnJlYWs7Y2FzZSI8L0FuY2hvcj4i''@;'; put 'put ''OnBlPVEuc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvUm93PiI6ZXQ9K1Euc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvQ29sdW1uPiI6Y3Q9K1Euc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYU1hY3JvPiI6RXQ9US5zbGljZSh5ZSxNaSkudHJp''@;'; put 'put ''bSgpO2JyZWFrO2Nhc2UiPC9GbWxhTGluaz4iOmF0PVEuc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYVJhbmdlPiI6U249US5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9TZWxUeXBlPiI6bHI9US5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9W''@;'; put 'put ''YWw+IjpqdD0rUS5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9NaW4+IjprdD0rUS5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9NYXg+IjpPdD0rUS5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9JbmM+IjpLdD0rUS5zbGljZSh5ZSxNaSkudHJpbSgp''@;'; put 'put ''O2JyZWFrO2Nhc2UiPC9QYWdlPiI6VG49K1Euc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvQ2hlY2tlZD4iOnJyPStRLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L3RleHRib3g+IjpidD1RLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8TW92ZVdpdGhD''@;'; put 'put ''ZWxscy8+IjpjYXNlIjxNb3ZlV2l0aENlbGxzPiI6WG49ITA7YnJlYWs7Y2FzZSI8U2l6ZVdpdGhDZWxscy8+IjpjYXNlIjxTaXplV2l0aENlbGxzPiI6Qm49ITB9cmV0dXJuIiJ9KSxvZSl7Y2FzZSJOb3RlIjp2YXIgZnI9enUuc2hlZXRfZ2V0X2NlbGwoUixldD49MCYmY3Q+PTA/cWkoe3I6''@;'; put 'put ''ZXQsYzpjdH0pOmtbR10ucmVmKTtmci5jJiYoZnIuYy5oaWRkZW49Z2UscGUmJihmci5jLnJhd2FuY2hvcj1wZSxIayhwZSxmci5jKSxsQihmci5jWyIhcG9zIl0sMiohIVhuKyEhQm4sUikpLFBlLmNvbG9yMSYmKGZyLmMuZmlsbD1QZSksTmUuY29sb3ImJihmci5jLnNoYWRvdz1OZSksWWUu''@;'; put 'put ''Y29sb3ImJihmci5jLnN0cm9rZT1ZZSkpLCsrRzticmVhaztjYXNlIkJ1dHRvbiI6Y2FzZSJHQm94IjpjYXNlIkRyb3AiOmNhc2UiTGFiZWwiOmNhc2UiQ2hlY2tib3giOmNhc2UiU2Nyb2xsIjpjYXNlIkxpc3QiOmNhc2UiUmFkaW8iOmNhc2UiU3BpbiI6Y2FzZSJFZGl0IjpSWyIhY29udHJv''@;'; put 'put ''bHMiXXx8KFJbIiFjb250cm9scyJdPVtdKTt2YXIgYnI9eyIhdHlwZSI6b2V9O3BlJiZIayhwZSxiciksRXQmJihici5tYWNybz1FdC5yZXBsYWNlKCJbMF0hIiwiIikpLGF0JiYoYnIubGluaz1hdCksIlNjcm9sbCI9PW9lfHwiU3BpbiI9PW9lPyhudWxsPT1qdCYmKGp0PTApLG51bGw9PWt0''@;'; put 'put ''JiYoa3Q9MCksbnVsbD09T3QmJihPdD0zZTQpLG51bGw9PUt0JiYoS3Q9MSksIlNjcm9sbCI9PW9lJiZudWxsPT1UbiYmKFRuPTEwKSk6IlJhZGlvIj09b2V8fCJDaGVja2JveCI9PW9lPyhudWxsPT1yciYmKHJyPTApLGp0PXJyKTooIkxpc3QiPT1vZXx8IkRyb3AiPT1vZSkmJihudWxsIT1T''@;'; put 'put ''biYmKGJyLnJlZj1TbiksbnVsbD09bHImJihscj0iU2luZ2xlIiksIkxpc3QiPT1vZSYmKGJyLnNlbD1scikpLG51bGwhPWp0JiYoYnIudmFsPWp0KSxudWxsIT1rdCYmKGJyLm1pbj1rdCksbnVsbCE9T3QmJihici5tYXg9T3QpLG51bGwhPUt0JiYoYnIuc3RlcD1LdCksbnVsbCE9VG4mJihi''@;'; put 'put ''ci5wYWdlPVRuKSxidCYmKGJyLnQ9YnQucmVwbGFjZSgvXHMqPFtcc1xTXSo/PlxzKi9nLCIiKSksUlsiIWNvbnRyb2xzIl0ucHVzaChicil9fSl9KGdvKFBlKSxTLHBlfHxbXSksU1siIUxEUCJdPXllLFNbIiFjdHJsaWQiXSYmU1siIWN0cmxpZCJdLmZvckVhY2goZnVuY3Rpb24oTmUpe2lm''@;'; put 'put ''KE5lLnJlbCYmTmUucmVsLlRhcmdldCl7dmFyIFllPWZuKE5lLnJlbC5UYXJnZXQsRyk7TmUucGF0aD1ZZSxkZWxldGUgTmUucmVsfX0pfX0oY3QsMCxTLFIsMCwwLDAsRXQpLGN0fWNhdGNoKGF0KXtpZih5ZS5XVEYpdGhyb3cgYXR9fWZ1bmN0aW9uIEFjKFMpe3JldHVybiIvIj09Uy5jaGFy''@;'; put 'put ''QXQoMCk/Uy5zbGljZSgxKTpTfXZhciBCYz1mdW5jdGlvbigpe307ZnVuY3Rpb24gcnAoUyxSKXtpZihQYj1bXSxOSShSPVJ8fHt9KSxyaShTLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKXx8cmkoUywib2JqZWN0ZGF0YS54bWwiKSlyZXR1cm4gZnVuY3Rpb24gd2EoUyxSKXtSPVJ8fHt9LHJp''@;'; put 'put ''KFMsIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpJiZmdW5jdGlvbiBWbyhTLFIpe2Zvcih2YXIgRyxRLGs9V1MoUyk7Rz1ZNS5leGVjKGspOylzd2l0Y2goR1szXSl7Y2FzZSJtYW5pZmVzdCI6YnJlYWs7Y2FzZSJmaWxlLWVudHJ5IjppZigiLyI9PShRPXZyKEdbMF0sITEpKS5wYXRoJiZRLnR5''@;'; put 'put ''cGUhPT1sbCl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgT3BlbkRvY3VtZW50IGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7YnJlYWs7Y2FzZSJlbmNyeXB0aW9uLWRhdGEiOmNhc2UiYWxnb3JpdGhtIjpjYXNlInN0YXJ0LWtleS1nZW5lcmF0aW9uIjpjYXNlImtleS1kZXJpdmF0aW9uIjp0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE9EUyBFbmNyeXB0aW9uIik7ZGVmYXVsdDppZihSJiZSLldURil0aHJvdyBHfX0oVHQoUywiTUVUQS1JTkYvbWFuaWZlc3QueG1sIiksUik7dmFyIGs9bnIoUywiY29udGVudC54bWwiKTtpZighayl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgY29udGVu''@;'; put 'put ''dC54bWwgaW4gT0RTIC8gVU9GIGZpbGUiKTt2YXIgRz1YUyhnbyhrKSxSKTtyZXR1cm4gcmkoUywibWV0YS54bWwiKSYmKEcuUHJvcHM9dnYoVHQoUywibWV0YS54bWwiKSkpLEd9KFMsUik7aWYocmkoUywiSW5kZXgvRG9jdW1lbnQuaXdhIikpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRl''@;'; put 'put ''ZCBOVU1CRVJTIGZpbGUiKTt2YXIgb2UsZ2Usaz1mdW5jdGlvbiB4dChTKXtmb3IodmFyIFI9Uy5GdWxsUGF0aHN8fE9lKFMuZmlsZXMpLGs9W10sRz0wO0c8Ui5sZW5ndGg7KytHKSIvIiE9UltHXS5zbGljZSgtMSkmJmsucHVzaChSW0ddKTtyZXR1cm4gay5zb3J0KCl9KFMpLEc9ZnVuY3Rp''@;'; put 'put ''b24gTncoUyl7dmFyIFI9e3dvcmtib29rczpbXSxzaGVldHM6W10sY2hhcnRzOltdLGRpYWxvZ3M6W10sbWFjcm9zOltdLHJlbHM6W10sc3RyczpbXSxjb21tZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10s''@;'; put 'put ''Y2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10scGl2b3RzOltdLHBpdm90Y2FjaGVzOltdLHBpdm90cmVjb3JkczpbXSxkYXRhbW9kZWxzOltdLGNoYXJ0b2JqczpbXSxjaGFydHN0eWxlczpbXSxjaGFydGNvbG9yczpbXSxjaGFydGV4czpbXSx0YWJsZXM6W10sY29ubnM6W10sY3Ry''@;'; put 'put ''bHByb3BzOltdLGN1c3RvbXhtbHByb3BzOltdLFRPRE86W10seG1sbnM6IiJ9O2lmKCFTfHwhUy5tYXRjaClyZXR1cm4gUjt2YXIgaz17fTtpZigoUy5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3ZhciBRPXZyKEcpO3N3aXRjaChRWzBdLnJlcGxhY2UodWEsIjwiKSl7Y2Fz''@;'; put 'put ''ZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOlIueG1sbnM9UVsieG1sbnMiKyhRWzBdLm1hdGNoKC88KFx3Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjprW1EuRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCldPVEuQ29udGVudFR5cGU7YnJlYWs7Y2FzZSI8T3ZlcnJp''@;'; put 'put ''ZGUiOnZvaWQgMCE9PVJbYjRbUS5Db250ZW50VHlwZV1dJiZSW2I0W1EuQ29udGVudFR5cGVdXS5wdXNoKFEuUGFydE5hbWUpfX0pLFIueG1sbnMhPT1ZaS5DVCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gTmFtZXNwYWNlOiAiK1IueG1sbnMpO3JldHVybiBSLmNhbGNjaGFpbj1SLmNhbGNj''@;'; put 'put ''aGFpbnMubGVuZ3RoPjA/Ui5jYWxjY2hhaW5zWzBdOiIiLFIuc3N0PVIuc3Rycy5sZW5ndGg+MD9SLnN0cnNbMF06IiIsUi5zdHlsZT1SLnN0eWxlcy5sZW5ndGg+MD9SLnN0eWxlc1swXToiIixSLmNvbm49Ui5jb25ucy5sZW5ndGg+MD9SLmNvbm5zWzBdOiIiLFIuZGVmYXVsdHM9ayxkZWxl''@;'; put 'put ''dGUgUi5jYWxjY2hhaW5zLFJ9KG5yKFMsIltDb250ZW50X1R5cGVzXS54bWwiKSksUT0hMTtpZigwPT09Ry53b3JrYm9va3MubGVuZ3RoJiZUdChTLGdlPSJ4bC93b3JrYm9vay54bWwiLCEwKSYmRy53b3JrYm9va3MucHVzaChnZSksMD09PUcud29ya2Jvb2tzLmxlbmd0aCl7aWYoIVR0KFMs''@;'; put 'put ''Z2U9InhsL3dvcmtib29rLmJpbiIsITApKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgd29ya2Jvb2siKTtHLndvcmtib29rcy5wdXNoKGdlKSxRPSEwfSJiaW4iPT1HLndvcmtib29rc1swXS5zbGljZSgtMykmJihRPSEwKTt2YXIgcGU9e30seWU9e307aWYoIVIuYm9va1NoZWV0''@;'; put 'put ''cyYmIVIuYm9va1Byb3BzKXtpZihsOD1bXSxHLnNzdCl0cnl7bDg9ZnVuY3Rpb24gTXooUyxSLGspe3JldHVybiIuYmluIj09PVIuc2xpY2UoLTQpP2Z1bmN0aW9uIE92KFMsUil7dmFyIGs9W10sRz0hMTtyZXR1cm4gdXIoUyxmdW5jdGlvbihvZSxnZSxwZSl7c3dpdGNoKHBlKXtjYXNlIDE1''@;'; put 'put ''OTprLkNvdW50PW9lWzBdLGsuVW5pcXVlPW9lWzFdO2JyZWFrO2Nhc2UgMTk6ay5wdXNoKG9lKTticmVhaztjYXNlIDE2MDpyZXR1cm4hMDtjYXNlIDM1Okc9ITA7YnJlYWs7Y2FzZSAzNjpHPSExO2JyZWFrO2RlZmF1bHQ6aWYoZ2UuaW5kZXhPZigiQmVnaW4iKT4wfHxnZS5pbmRleE9mKCJF''@;'; put 'put ''bmQiKSwhR3x8Ui5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK3BlKyIgIitnZSl9fSksa30oUyxrKTpmdW5jdGlvbiBmMihTLFIpe3ZhciBrPVtdLEc9IiI7aWYoIVMpcmV0dXJuIGs7dmFyIFE9Uy5tYXRjaChzayk7aWYoUSl7Rz1RWzJdLnJlcGxhY2UobGssIiIp''@;'; put 'put ''LnNwbGl0KHE2KTtmb3IodmFyIG9lPTA7b2UhPUcubGVuZ3RoOysrb2Upe3ZhciBnZT11QyhHW29lXS50cmltKCksUik7bnVsbCE9Z2UmJihrW2subGVuZ3RoXT1nZSl9UT12cihRWzFdKSxrLkNvdW50PVEuY291bnQsay5VbmlxdWU9US51bmlxdWVDb3VudH1yZXR1cm4ga30oUyxrKX0oVHQo''@;'; put 'put ''UyxBYyhHLnNzdCkpLEcuc3N0LFIpfWNhdGNoKF9yKXtpZihSLldURil0aHJvdyBfcn1SLmNlbGxTdHlsZXMmJkcudGhlbWVzLmxlbmd0aCYmKHBlPWZ1bmN0aW9uIFN6KFMsUixrKXtyZXR1cm4gRUMoUyxrKX0obnIoUyxHLnRoZW1lc1swXS5yZXBsYWNlKC9eXC8vLCIiKSwhMCl8fCIiLDAs''@;'; put 'put ''UikpLEcuc3R5bGUmJih5ZT1mdW5jdGlvbiBDeihTLFIsayxHKXtyZXR1cm4iLmJpbiI9PT1SLnNsaWNlKC00KT9mdW5jdGlvbiB4ayhTLFIsayl7dmFyIEc9e051bWJlckZtdDpbXX07Zm9yKHZhciBRIGluIEEuX3RhYmxlKUcuTnVtYmVyRm10W1FdPUEuX3RhYmxlW1FdO0cuQ2VsbFhmPVtd''@;'; put 'put ''LEcuRm9udHM9W10sRy5GaWxscz1bXSxHLkJvcmRlcnM9W107dmFyIG9lPVtdLGdlPSExO3JldHVybiB1cihTLGZ1bmN0aW9uKHllLFBlLE5lKXtzd2l0Y2goTmUpe2Nhc2UgNDQ6Ry5OdW1iZXJGbXRbeWVbMF1dPXllWzFdLEEubG9hZCh5ZVsxXSx5ZVswXSk7YnJlYWs7Y2FzZSA0MzpZdih5''@;'; put 'put ''ZS5jb2xvcixSKSxHLkZvbnRzLnB1c2goeWUpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ4OmNhc2UgNTA3OmNhc2UgNTcyOmNhc2UgNDc1OmNhc2UgMTE3MTpjYXNlIDIxMDI6Y2FzZSAxMTMwOmNhc2UgNTEyOmNhc2UgMjA5NTpjYXNlIDMwNzI6YnJlYWs7Y2FzZSA0NTp5ZS5mZ0NvbG9yJiZZ''@;'; put 'put ''dih5ZS5mZ0NvbG9yLFIpLHllLmJnQ29sb3ImJll2KHllLmJnQ29sb3IsUiksRy5GaWxscy5wdXNoKHllKTticmVhaztjYXNlIDQ2OlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiZGlhZyJdLmZvckVhY2goZnVuY3Rpb24oWWUpe3llW1llXSYmeWVbWWVdLmNvbG9yJiZZdih5ZVtZ''@;'; put 'put ''ZV0uY29sb3IsUil9KSxHLkJvcmRlcnMucHVzaCh5ZSk7YnJlYWs7Y2FzZSA0NzoiQnJ0QmVnaW5DZWxsWEZzIj09b2Vbb2UubGVuZ3RoLTFdJiZHLkNlbGxYZi5wdXNoKHllKTticmVhaztjYXNlIDM1OmdlPSEwO2JyZWFrO2Nhc2UgMzY6Z2U9ITE7YnJlYWs7Y2FzZSAzNzpvZS5wdXNoKFBl''@;'; put 'put ''KSxnZT0hMDticmVhaztjYXNlIDM4Om9lLnBvcCgpLGdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoKFBlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKW9lLnB1c2goUGUpO2Vsc2UgaWYoKFBlfHwiIikuaW5kZXhPZigiRW5kIik+MClvZS5wb3AoKTtlbHNlIGlmKCFnZXx8ay5XVEYmJiJCcnRBQ0Jl''@;'; put 'put ''Z2luIiE9b2Vbb2UubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitOZSsiICIrUGUpfX0pLChHLkZvbnRzfHxbXSlbMF0mJkk0KEcuRm9udHNbMF0pLEd9KFMsayxHKTpfayhTLGssRyl9KFR0KFMsQWMoRy5zdHlsZSkpLEcuc3R5bGUscGUsUikpfXZhciBQ''@;'; put 'put ''ZT1HLmxpbmtzLm1hcChmdW5jdGlvbihfcil7dHJ5e3ZhciBGbj1iZihucihTLFZyKEFjKF9yKSkpLF9yKTtyZXR1cm4gZnVuY3Rpb24gRXooUyxSLGssRyl7cmV0dXJuIi5iaW4iPT09ay5zbGljZSgtNCk/ZnVuY3Rpb24gVmsoUyxSLGssRyl7aWYoIVMpcmV0dXJuIFM7dmFyIFE9R3x8e30s''@;'; put 'put ''b2U9ITE7dXIoUyxmdW5jdGlvbih5ZSxQZSxOZSl7c3dpdGNoKE5lKXtjYXNlIDM1OTpjYXNlIDM2MzpjYXNlIDM2NDpjYXNlIDM2NjpjYXNlIDM2NzpjYXNlIDM2ODpjYXNlIDM2OTpjYXNlIDM3MDpjYXNlIDM3MTpjYXNlIDQ3MjpjYXNlIDU3NzpjYXNlIDU3ODpjYXNlIDU3OTpjYXNlIDU4''@;'; put 'put ''MDpjYXNlIDU4MTpjYXNlIDU4MjpjYXNlIDU4MzpjYXNlIDU4NDpjYXNlIDU4NTpjYXNlIDU4NjpjYXNlIDU4NzpicmVhaztjYXNlIDM1Om9lPSEwO2JyZWFrO2Nhc2UgMzY6b2U9ITE7YnJlYWs7ZGVmYXVsdDppZighKChQZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKFBlfHwiIiku''@;'; put 'put ''aW5kZXhPZigiRW5kIik+MCkmJighb2V8fFEuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrTmUudG9TdHJpbmcoMTYpKyIgIitQZSl9fSxRKX0oUywwLDAsRyk6ZnVuY3Rpb24gTmsoUyxSLGssRyl7dmFyIFE9R3x8e30sb2U9e1NoZWV0TmFtZXM6W10sU2hlZXRz''@;'; put 'put ''Ont9fSxwZT0hMSx5ZT17fSxQZT0tMSxOZT0tMSxZZT17czp7cjowLGM6MH0sZTp7cjotMSxjOi0xfX0sZXQ9e30sY3Q9MDtyZXR1cm4oU3x8IiIpLnJlcGxhY2UoZW4sZnVuY3Rpb24oRXQsYXQpe3ZhciBidD12cihFdCk7c3dpdGNoKFduKGJ0WzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZXh0''@;'; put 'put ''ZXJuYWxMaW5rIjpjYXNlIjwvZXh0ZXJuYWxMaW5rPiI6Y2FzZSI8L2V4dGVybmFsQm9vaz4iOmNhc2UiPHNoZWV0TmFtZXMiOmNhc2UiPHNoZWV0TmFtZXM+IjpjYXNlIjwvc2hlZXROYW1lcz4iOmNhc2UiPHNoZWV0RGF0YVNldD4iOmNhc2UiPHNoZWV0RGF0YVNldC8+IjpjYXNlIjwvc2hl''@;'; put 'put ''ZXREYXRhU2V0PiI6Y2FzZSI8L3Jvdz4iOmJyZWFrO2Nhc2UiPGV4dGVybmFsQm9vayI6Y2FzZSI8ZXh0ZXJuYWxCb29rPiI6b2UuVGFyZ2V0PVJbIiFpZCJdW2J0LmlkXS5UYXJnZXQsb2UuTWlzc2luZz1SWyIhaWQiXVtidC5pZF0uVHlwZT09S2EuWE1JU1M7YnJlYWs7Y2FzZSI8c2hlZXRO''@;'; put 'put ''YW1lIjpvZS5TaGVldE5hbWVzLnB1c2goUXIoZ28oYnQudmFsKSkpO2JyZWFrO2Nhc2UiPHNoZWV0RGF0YSI6eWU9e30sb2UuU2hlZXRzW29lLlNoZWV0TmFtZXNbYnQuc2hlZXRJZF1dPXRpKGJ0LnJlZnJlc2hFcnJvcnx8IjAiKT9udWxsOnllO2JyZWFrO2Nhc2UiPC9zaGVldERhdGE+IjpZ''@;'; put 'put ''ZS5lLmM+PTAmJih5ZVsiIXJlZiJdPXJhKFllKSk7YnJlYWs7Y2FzZSI8cm93IjpjYXNlIjxyb3c+IjpidC5yP1BlPXBhcnNlSW50KGJ0LnIsMTApLTE6UGUrKyxOZT0tMTticmVhaztjYXNlIjxjZWxsIjpjYXNlIjxjZWxsPiI6YnQucj9OZT1ObyhidC5yKS5jOisrTmUsZXQudD1idC50fHwi''@;'; put 'put ''biIsInN0ciI9PWV0LnQmJihldC50PSJzIik7YnJlYWs7Y2FzZSI8L2NlbGw+IjpZZS5lLnI8UGUmJihZZS5lLnI9UGUpLFllLmUuYzxOZSYmKFllLmUuYz1OZSkseWVbcWkoe3I6UGUsYzpOZX0pXT1ldCxldD17fTticmVhaztjYXNlIjx2IjpjYXNlIjx2PiI6Y3Q9RXQubGVuZ3RoK2F0O2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPC92PiI6dmFyIGp0PVFyKFMuc2xpY2UoY3QsYXQpKTtldC52PSJuIj09ZXQudD9wYXJzZUZsb2F0KGp0KTpqdDticmVhaztjYXNlIjx2Lz4iOmV0LnY9IiI7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6cGU9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOnBlPSEx''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6aWYoIXBlJiZRLldURil0aHJvdyJ1bnJlY29nbml6ZWQgIitidFswXSsiIGluIGV4dGVybmFsIGxpbmsifX0pLG9lfShTLFIsMCxHKX0oVHQoUyxBYyhfcikpLEZuLF9yLFIpfWNhdGNoe319KSxOZT1mdW5jdGlvbiBrOChTLFIsayl7cmV0dXJuIi5iaW4iPT09Ui5z''@;'; put 'put ''bGljZSgtNCk/ZnVuY3Rpb24gSG5lKFMsUil7dmFyIGs9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sRz1bXSxRPSExO1J8fChSPXt9KSxSLmJpZmY9MTI7dmFyIG9lPVtdLGdlPVtbXV07cmV0dXJuIGdlLlNoZWV0TmFt''@;'; put 'put ''ZXM9W10sZ2UuWFRJPVtdLEw4WzE2XT17bjoiQnJ0RlJUQXJjaElEJCIsZjp0cH0sdXIoUyxmdW5jdGlvbih5ZSxQZSxOZSl7c3dpdGNoKE5lKXtjYXNlIDE1NjpnZS5TaGVldE5hbWVzLnB1c2goeWUubmFtZSksay5TaGVldHMucHVzaCh5ZSk7YnJlYWs7Y2FzZSAxNTM6ay5XQlByb3BzPXll''@;'; put 'put ''O2JyZWFrO2Nhc2UgMzk6bnVsbCE9eWUuU2hlZXQmJihSLlNJRD15ZS5TaGVldCkseWUuUmVmPXMwKHllLlB0ZyxudWxsLG51bGwsZ2UsUiksZGVsZXRlIFIuU0lELGRlbGV0ZSB5ZS5QdGcsb2UucHVzaCh5ZSk7YnJlYWs7Y2FzZSAxMDM2OmNhc2UgMzYxOmNhc2UgMjA3MTpjYXNlIDE1ODpj''@;'; put 'put ''YXNlIDE0MzpjYXNlIDY2NDpjYXNlIDM1MzpjYXNlIDMwNzI6Y2FzZSAzMDczOmNhc2UgNTM0OmNhc2UgNjc3OmNhc2UgMTU3OmNhc2UgNjEwOmNhc2UgMjA1MDpjYXNlIDE1NTpjYXNlIDU0ODpjYXNlIDY3NjpjYXNlIDEyODpjYXNlIDY2NTpjYXNlIDIxMjg6Y2FzZSAyMTI1OmNhc2UgNTQ5''@;'; put 'put ''OmNhc2UgMjA1MzpjYXNlIDU5NjpjYXNlIDIwNzY6Y2FzZSAyMDc1OmNhc2UgMjA4MjpjYXNlIDM5NzpjYXNlIDE1NDpjYXNlIDExMTc6Y2FzZSA1NTM6Y2FzZSAyMDkxOmNhc2UgMTY6YnJlYWs7Y2FzZSAzNTc6Y2FzZSAzNTg6Y2FzZSAzNTU6Y2FzZSA2Njc6Z2VbMF0ubGVuZ3RoP2dlLnB1''@;'; put 'put ''c2goW05lLHllXSk6Z2VbMF09W05lLHllXSxnZVtnZS5sZW5ndGgtMV0uWFRJPVtdO2JyZWFrO2Nhc2UgMzYyOjA9PT1nZS5sZW5ndGgmJihnZVswXT1bXSxnZVswXS5YVEk9W10pLGdlW2dlLmxlbmd0aC0xXS5YVEk9Z2VbZ2UubGVuZ3RoLTFdLlhUSS5jb25jYXQoeWUpLGdlLlhUST1nZS5Y''@;'; put 'put ''VEkuY29uY2F0KHllKTticmVhaztjYXNlIDM1OmNhc2UgMzc6Ry5wdXNoKFBlKSxRPSEwO2JyZWFrO2Nhc2UgMzY6Y2FzZSAzODpHLnBvcCgpLFE9ITE7YnJlYWs7ZGVmYXVsdDppZighKChQZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKFBlfHwiIikuaW5kZXhPZigiRW5kIik+MCkm''@;'; put 'put ''JighUXx8Ui5XVEYmJiJCcnRBQ0JlZ2luIiE9R1tHLmxlbmd0aC0xXSYmIkJydEZSVEJlZ2luIiE9R1tHLmxlbmd0aC0xXSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK05lKyIgIitQZSl9fSxSKSxQUyhrKSxrLk5hbWVzPW9lLGsuc3VwYm9va3M9Z2Usa30oUyxrKTpm''@;'; put 'put ''dW5jdGlvbiBIUyhTLFIpe2lmKCFTKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgZmlsZSIpO3ZhciBrPXtBcHBWZXJzaW9uOnt9LFdCUHJvcHM6e30sV0JWaWV3OltdLFNoZWV0czpbXSxDYWxjUHI6e30sTmFtZXM6W10sRXh0ZXJuOltdLHhtbG5zOiIifSxHPSExLFE9InhtbG5z''@;'; put 'put ''IixvZT17fSxnZT0wO2lmKFMucmVwbGFjZShlbixmdW5jdGlvbih5ZSxQZSl7dmFyIE5lPXZyKHllKTtzd2l0Y2goV24oTmVbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjwvd29ya2Jvb2s+IjpjYXNlIjxmaWxlVmVyc2lvbi8+IjpjYXNlIjwvZmlsZVZlcnNpb24+IjpjYXNlIjxmaWxlU2hhcmlu''@;'; put 'put ''Zy8+IjpjYXNlIjwvd29ya2Jvb2tQcj4iOmNhc2UiPHdvcmtib29rUHJvdGVjdGlvbi8+IjpjYXNlIjxib29rVmlld3MiOmNhc2UiPGJvb2tWaWV3cz4iOmNhc2UiPC9ib29rVmlld3M+IjpjYXNlIjwvd29ya2Jvb2tWaWV3PiI6Y2FzZSI8c2hlZXRzIjpjYXNlIjxzaGVldHM+IjpjYXNlIjwv''@;'; put 'put ''c2hlZXRzPiI6Y2FzZSI8L3NoZWV0PiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMiOmNhc2UiPGZ1bmN0aW9uR3JvdXBzLz4iOmNhc2UiPGZ1bmN0aW9uR3JvdXAiOmNhc2UiPGV4dGVybmFsUmVmZXJlbmNlcyI6Y2FzZSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iOmNhc2UiPGV4dGVybmFsUmVmZXJl''@;'; put 'put ''bmNlcz4iOmNhc2UiPGRlZmluZWROYW1lcy8+IjpjYXNlIjxkZWZpbmVkTmFtZS8+IjpjYXNlIjwvY2FsY1ByPiI6Y2FzZSI8b2xlU2l6ZSI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cyI6''@;'; put 'put ''Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3IjpjYXNlIjwvY3VzdG9tV29ya2Jvb2tWaWV3PiI6Y2FzZSI8cGl2b3RDYWNoZXM+IjpjYXNlIjwvcGl2b3RDYWNoZXM+IjpjYXNlIjxwaXZvdENhY2hlcyI6Y2FzZSI8cGl2b3RDYWNoZSI6Y2FzZSI8c21hcnRUYWdQciI6Y2FzZSI8c21hcnRUYWdQ''@;'; put 'put ''ci8+IjpjYXNlIjxzbWFydFRhZ1R5cGVzIjpjYXNlIjxzbWFydFRhZ1R5cGVzPiI6Y2FzZSI8L3NtYXJ0VGFnVHlwZXM+IjpjYXNlIjxzbWFydFRhZ1R5cGUiOmNhc2UiPHdlYlB1Ymxpc2hpbmciOmNhc2UiPHdlYlB1Ymxpc2hpbmcvPiI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIiOmNhc2UiPGZp''@;'; put 'put ''bGVSZWNvdmVyeVByLz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHMiOmNhc2UiPC93ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3QiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNh''@;'; put 'put ''c2UiPGV4dExzdC8+IjpjYXNlIjxBcmNoSUQiOmNhc2UiPHJldmlzaW9uUHRyIjpicmVhaztjYXNlIjx3b3JrYm9vayI6eWUubWF0Y2goRTgpJiYoUT0ieG1sbnMiK3llLm1hdGNoKC88KFx3Kyk6LylbMV0pLGsueG1sbnM9TmVbUV07YnJlYWs7Y2FzZSI8ZmlsZVZlcnNpb24iOmRlbGV0ZSBO''@;'; put 'put ''ZVswXSxrLkFwcFZlcnNpb249TmU7YnJlYWs7Y2FzZSI8ZmlsZVNoYXJpbmciOmsuTW9kaWZ5PXt1c2VyOk5lLnVzZXJOYW1lLHdhcm46dGkoTmUucmVhZE9ubHlSZWNvbW1lbmRlZHx8ImZhbHNlIil9LChOZS5hbGdvcml0aG1OYW1lfHxOZS5oYXNoVmFsdWV8fE5lLnNhbHRWYWx1ZXx8TmUu''@;'; put 'put ''c3BpbkNvdW50KSYmKGsuTW9kaWZ5LmVuY3J5cHRpb249e2FsZ286TmUuYWxnb3JpdGhtTmFtZSxoYXNoOk5lLmhhc2hWYWx1ZSxzYWx0Ok5lLnNhbHRWYWx1ZSxzcGluOitOZS5zcGluQ291bnR8fDFlNX0pO2JyZWFrO2Nhc2UiPHdvcmtib29rUHIiOmNhc2UiPHdvcmtib29rUHIvPiI6eWIu''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihldCl7aWYobnVsbCE9TmVbZXRbMF1dKXN3aXRjaChldFsyXSl7Y2FzZSJib29sIjprLldCUHJvcHNbZXRbMF1dPXRpKE5lW2V0WzBdXSk7YnJlYWs7Y2FzZSJpbnQiOmsuV0JQcm9wc1tldFswXV09cGFyc2VJbnQoTmVbZXRbMF1dLDEwKTticmVhaztkZWZhdWx0''@;'; put 'put ''OmsuV0JQcm9wc1tldFswXV09TmVbZXRbMF1dfX0pLE5lLmNvZGVOYW1lJiYoay5XQlByb3BzLkNvZGVOYW1lPWdvKE5lLmNvZGVOYW1lKSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uIjp2YXIgWWU9ay5Qcm90ZWN0aW9ufHx7fTtZZS5sb2NrU3RydWN0dXJlPXRpKE5lLmxvY2tT''@;'; put 'put ''dHJ1Y3R1cmV8fCJmYWxzZSIpLFllLmxvY2tXaW5kb3dzPXRpKE5lLmxvY2tXaW5kb3dzfHwiZmFsc2UiKSxOZS53b3JrYm9va0FsZ29yaXRobU5hbWUmJihZZS5lbmNyeXB0aW9uPXthbGdvOk5lLndvcmtib29rQWxnb3JpdGhtTmFtZSxoYXNoOk5lLndvcmtib29rSGFzaFZhbHVlLHNhbHQ6''@;'; put 'put ''TmUud29ya2Jvb2tTYWx0VmFsdWUsc3BpbjorTmUud29ya2Jvb2tTcGluQ291bnR8fDFlNX0pLGsuUHJvdGVjdGlvbj1ZZTticmVhaztjYXNlIjx3b3JrYm9va1ZpZXciOmNhc2UiPHdvcmtib29rVmlldy8+IjpkZWxldGUgTmVbMF0say5XQlZpZXcucHVzaChOZSk7YnJlYWs7Y2FzZSI8c2hl''@;'; put 'put ''ZXQiOnN3aXRjaChOZS5zdGF0ZSl7Y2FzZSJoaWRkZW4iOk5lLkhpZGRlbj0xO2JyZWFrO2Nhc2UidmVyeUhpZGRlbiI6TmUuSGlkZGVuPTI7YnJlYWs7ZGVmYXVsdDpOZS5IaWRkZW49MH1kZWxldGUgTmUuc3RhdGUsTmUubmFtZT1RcihnbyhOZS5uYW1lKSksZGVsZXRlIE5lWzBdLGsuU2hl''@;'; put 'put ''ZXRzLnB1c2goTmUpO2JyZWFrO2Nhc2UiPGV4dGVybmFsUmVmZXJlbmNlIjprLkV4dGVybi5wdXNoKE5lLmlkKTticmVhaztjYXNlIjxkZWZpbmVkTmFtZXM+IjpjYXNlIjxkZWZpbmVkTmFtZXMiOmNhc2UiPGV4dCI6Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8QWx0ZXJuYXRlQ29u''@;'; put 'put ''dGVudD4iOkc9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOmNhc2UiPC9leHQ+IjpjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOkc9ITE7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWUiOihvZT17fSkuTmFtZT1nbyhOZS5uYW1lKSxOZS5jb21tZW50JiYob2UuQ29tbWVudD1OZS5jb21t''@;'; put 'put ''ZW50KSxOZS5sb2NhbFNoZWV0SWQmJihvZS5TaGVldD0rTmUubG9jYWxTaGVldElkKSx0aShOZS5oaWRkZW58fCIwIikmJihvZS5IaWRkZW49ITApLGdlPVBlK3llLmxlbmd0aDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWU+IjpvZS5SZWY9UXIoZ28oUy5zbGljZShnZSxQZSkpKSxrLk5hbWVz''@;'; put 'put ''LnB1c2gob2UpO2JyZWFrO2Nhc2UiPGNhbGNQciI6Y2FzZSI8Y2FsY1ByLz4iOmRlbGV0ZSBOZVswXSxrLkNhbGNQcj1OZTticmVhaztkZWZhdWx0OmlmKCFHJiZSLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK05lWzBdKyIgaW4gd29ya2Jvb2siKX1yZXR1cm4geWV9KSwt''@;'; put 'put ''MT09PVlpLm1haW4uaW5kZXhPZihrLnhtbG5zKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gTmFtZXNwYWNlOiAiK2sueG1sbnMpO3JldHVybiBQUyhrKSxrfShTLGspfShUdChTLEFjKEcud29ya2Jvb2tzWzBdKSksRy53b3JrYm9va3NbMF0sUiksWWU9e30sZXQ9IiI7Ry5jb3JlcHJvcHMu''@;'; put 'put ''bGVuZ3RoJiYoKGV0PVR0KFMsQWMoRy5jb3JlcHJvcHNbMF0pLCEwKSkmJihZZT12dihldCkpLDAhPT1HLmV4dHByb3BzLmxlbmd0aCYmKGV0PVR0KFMsQWMoRy5leHRwcm9wc1swXSksITApKSYmZnVuY3Rpb24gV0EoUyxSLGspe3ZhciBHPXt9O1J8fChSPXt9KSxTPWdvKFMpLHJoLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oUSl7dmFyIG9lPShTLm1hdGNoKEQwKFFbMF0pKXx8W10pWzFdO3N3aXRjaChRWzJdKXtjYXNlInN0cmluZyI6b2UmJihSW1FbMV1dPVFyKG9lKSk7YnJlYWs7Y2FzZSJib29sIjpSW1FbMV1dPSJ0cnVlIj09PW9lO2JyZWFrO2Nhc2UicmF3Ijp2YXIgZ2U9Uy5tYXRjaChu''@;'; put 'put ''ZXcgUmVnRXhwKCI8IitRWzBdKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrUVswXSsiPiIpKTtnZSYmZ2UubGVuZ3RoPjAmJihHW1FbMV1dPWdlWzFdKX19KSxHLkhlYWRpbmdQYWlycyYmRy5UaXRsZXNPZlBhcnRzJiZfNChHLkhlYWRpbmdQYWlycyxHLlRpdGxlc09mUGFydHMsUixrKX0oZXQs''@;'; put 'put ''WWUsUikpO3ZhciBjdD17fTsoIVIuYm9va1NoZWV0c3x8Ui5ib29rUHJvcHMpJiYwIT09Ry5jdXN0cHJvcHMubGVuZ3RoJiYoZXQ9bnIoUyxBYyhHLmN1c3Rwcm9wc1swXSksITApKSYmKGN0PWZ1bmN0aW9uIHl2KFMsUil7dmFyIGs9e30sRz0iIixRPVMubWF0Y2goTzYpO2lmKFEpZm9yKHZh''@;'; put 'put ''ciBvZT0wO29lIT1RLmxlbmd0aDsrK29lKXt2YXIgZ2U9UVtvZV0scGU9dnIoZ2UpO3N3aXRjaChwZVswXSl7Y2FzZSI8P3htbCI6Y2FzZSI8UHJvcGVydGllcyI6YnJlYWs7Y2FzZSI8cHJvcGVydHkiOkc9UXIocGUubmFtZSk7YnJlYWs7Y2FzZSI8L3Byb3BlcnR5PiI6Rz1udWxsO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6aWYoMD09PWdlLmluZGV4T2YoIjx2dDoiKSl7dmFyIHllPWdlLnNwbGl0KCI+IiksUGU9eWVbMF0uc2xpY2UoNCksTmU9eWVbMV07c3dpdGNoKFBlKXtjYXNlImxwc3RyIjpjYXNlImJzdHIiOmNhc2UibHB3c3RyIjpjYXNlImN5IjpjYXNlImVycm9yIjprW0ddPVFyKE5lKTti''@;'; put 'put ''cmVhaztjYXNlImJvb2wiOmtbR109dGkoTmUpO2JyZWFrO2Nhc2UiaTEiOmNhc2UiaTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOmtbR109cGFyc2VJbnQoTmUsMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UicjgiOmNhc2UiZGVjaW1hbCI6a1tHXT1wYXJzZUZsb2F0''@;'; put 'put ''KE5lKTticmVhaztjYXNlImZpbGV0aW1lIjpjYXNlImRhdGUiOmtbR109SGUoTmUpO2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1QZS5zbGljZSgtMSkpYnJlYWs7Ui5XVEYmJnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJVbmV4cGVjdGVkIixnZSxQZSx5ZSl9fWVsc2UgaWYoIjwv''@;'; put 'put ''IiE9PWdlLnNsaWNlKDAsMikmJlIuV1RGKXRocm93IG5ldyBFcnJvcihnZSl9fXJldHVybiBrfShldCxSKSk7dmFyIEV0PXt9O2lmKChSLmJvb2tTaGVldHN8fFIuYm9va1Byb3BzKSYmKE5lLlNoZWV0cz9vZT1OZS5TaGVldHMubWFwKGZ1bmN0aW9uKEZuKXtyZXR1cm4gRm4ubmFtZX0pOlll''@;'; put 'put ''LldvcmtzaGVldHMmJlllLlNoZWV0TmFtZXMubGVuZ3RoPjAmJihvZT1ZZS5TaGVldE5hbWVzKSxSLmJvb2tQcm9wcyYmKEV0LlByb3BzPVllLEV0LkN1c3Rwcm9wcz1jdCksUi5ib29rU2hlZXRzJiZ0eXBlb2Ygb2U8InUiJiYoRXQuU2hlZXROYW1lcz1vZSksUi5ib29rU2hlZXRzP0V0LlNo''@;'; put 'put ''ZWV0TmFtZXM6Ui5ib29rUHJvcHMpKXJldHVybiBFdDtvZT17fTt2YXIgYXQ9e307Ui5ib29rRGVwcyYmRy5jYWxjY2hhaW4mJihhdD1mdW5jdGlvbiBEbyhTLFIsayl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rpb24gZEIoUyxSLGspe3ZhciBHPVtdO3JldHVybiB1cihTLGZ1''@;'; put 'put ''bmN0aW9uKGdlLHBlLHllKXtpZig2Mz09PXllKUcucHVzaChnZSk7ZWxzZSBpZighKChwZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MHx8KHBlfHwiIikuaW5kZXhPZigiRW5kIik+MCkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK3llKyIgIitwZSl9KSxHfShTKTpmdW5j''@;'; put 'put ''dGlvbiBJQyhTKXt2YXIgUj1bXTtpZighUylyZXR1cm4gUjt2YXIgaz0xO3JldHVybihTLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oRyl7dmFyIFE9dnIoRyk7c3dpdGNoKFFbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8''@;'; put 'put ''L2NhbGNDaGFpbj4iOmJyZWFrO2Nhc2UiPGMiOmRlbGV0ZSBRWzBdLFEuaT9rPVEuaTpRLmk9ayxSLnB1c2goUSl9fSksUn0oUyl9KFR0KFMsQWMoRy5jYWxjY2hhaW4pKSxHLmNhbGNjaGFpbikpO3ZhciBrdCxPdCxidD0wLGp0PXt9LEt0PU5lLlNoZWV0cztZZS5Xb3Jrc2hlZXRzPUt0Lmxl''@;'; put 'put ''bmd0aCxZZS5TaGVldE5hbWVzPVtdO2Zvcih2YXIgVG49MDtUbiE9S3QubGVuZ3RoOysrVG4pWWUuU2hlZXROYW1lc1tUbl09S3RbVG5dLm5hbWU7dmFyIHJyPVE/ImJpbiI6InhtbCIsU249Ry53b3JrYm9va3NbMF0ubGFzdEluZGV4T2YoIi8iKSxscj0oRy53b3JrYm9va3NbMF0uc2xpY2Uo''@;'; put 'put ''MCxTbisxKSsiX3JlbHMvIitHLndvcmtib29rc1swXS5zbGljZShTbisxKSsiLnJlbHMiKS5yZXBsYWNlKC9eXC8vLCIiKTtyaShTLGxyKXx8KGxyPSJ4bC9fcmVscy93b3JrYm9vay4iK3JyKyIucmVscyIpO3ZhciBYbj1iZihucihTLGxyLCEwKSxsciksQm49WG4sZnI9W107WG4mJihOZSYm''@;'; put 'put ''TmUuRXh0ZXJuJiZOZS5FeHRlcm4ubGVuZ3RoJiZOZS5FeHRlcm4uZm9yRWFjaChmdW5jdGlvbihfcixGbil7dmFyIFppPSgiL3hsLyIrWG5bIiFpZCJdW19yXS5UYXJnZXQpLnJlcGxhY2UoL1tcL11bXC9dL2csIi8iKSx5aT1HLmxpbmtzLmluZGV4T2YoWmkpO3lpPi0xJiYoZnJbRm5dPVBl''@;'; put 'put ''W3lpXSl9KSxOZSYmZGVsZXRlIE5lLkV4dGVybiksWG4mJihYbj1mdW5jdGlvbiBPYihTLFIpe2lmKCFTKXJldHVybiAwO3RyeXtTPVIubWFwKGZ1bmN0aW9uKEcpe3JldHVybiBHLmlkfHwoRy5pZD1HLnN0clJlbElEKSxbRy5uYW1lLFNbIiFpZCJdW0cuaWRdLlRhcmdldCxucmUoU1siIWlk''@;'; put 'put ''Il1bRy5pZF0uVHlwZSldfSl9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIFMmJjAhPT1TLmxlbmd0aD9TOm51bGx9KFhuLE5lLlNoZWV0cykpO3ZhciBicj1yaShTLCJ4bC93b3Jrc2hlZXRzL3NoZWV0LnhtbCIpPzE6MCxlcj1bXSxNaT1bXTtlOmZvcihidD0wO2J0IT1ZZS5Xb3Jrc2hlZXRz''@;'; put 'put ''OysrYnQpe3ZhciBGaT0ic2hlZXQiO2lmKFhuJiZYbltidF0/KGt0PSJ4bC8iK1huW2J0XVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxyaShTLGt0KXx8KGt0PVhuW2J0XVsxXSkscmkoUyxrdCl8fChrdD1sci5yZXBsYWNlKC9fcmVsc1wvLiokLywiIikrWG5bYnRdWzFdKSxGaT1Yblti''@;'; put 'put ''dF1bMl0pOmt0PShrdD0ieGwvd29ya3NoZWV0cy9zaGVldCIrKGJ0KzEtYnIpKyIuIitycikucmVwbGFjZSgvc2hlZXQwXC4vLCJzaGVldC4iKSxPdD1rdC5yZXBsYWNlKC9eKC4qKShcLykoW15cL10qKSQvLCIkMS9fcmVscy8kMy5yZWxzIiksZXIucHVzaChrdCksUiYmbnVsbCE9Ui5zaGVl''@;'; put 'put ''dHMpc3dpdGNoKHR5cGVvZiBSLnNoZWV0cyl7Y2FzZSJudW1iZXIiOmlmKGJ0IT1SLnNoZWV0cyljb250aW51ZSBlO2JyZWFrO2Nhc2Uic3RyaW5nIjppZihZZS5TaGVldE5hbWVzW2J0XS50b0xvd2VyQ2FzZSgpIT1SLnNoZWV0cy50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlIGU7YnJlYWs7ZGVm''@;'; put 'put ''YXVsdDppZihBcnJheS5pc0FycmF5JiZBcnJheS5pc0FycmF5KFIuc2hlZXRzKSl7Zm9yKHZhciBuYT0wLGNhPTA7Y2EhPVIuc2hlZXRzLmxlbmd0aDsrK2NhKSJudW1iZXIiPT10eXBlb2YgUi5zaGVldHNbY2FdJiZSLnNoZWV0c1tjYV09PWJ0JiYobmE9MSksInN0cmluZyI9PXR5cGVvZiBS''@;'; put 'put ''LnNoZWV0c1tjYV0mJlIuc2hlZXRzW2NhXS50b0xvd2VyQ2FzZSgpPT1ZZS5TaGVldE5hbWVzW2J0XS50b0xvd2VyQ2FzZSgpJiYobmE9MSk7aWYoIW5hKWNvbnRpbnVlIGV9fWlmKCFSLnNraXBQYXJzZSl7dmFyIExpPXkyKFMsa3QsT3QsWWUuU2hlZXROYW1lc1tidF0sYnQsanQsb2UsRmks''@;'; put 'put ''UixOZSxwZSx5ZSk7TGkmJkxpWyIhTERQIl0mJihNaVtidF09TGlbIiFMRFAiXSxkZWxldGUgTGlbIiFMRFAiXSl9fWlmKHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSIpZm9yKGJ0PTA7YnQ8UGIubGVuZ3RoOysrYnQpcGFyc2Vfc2hlZXRfcGl2b3QuYXBwbHkobnVsbCxQYltidF0pO2lm''@;'; put 'put ''KEV0PXtEaXJlY3Rvcnk6RyxXb3JrYm9vazpOZSxQcm9wczpZZSxDdXN0cHJvcHM6Y3QsRGVwczphdCxTaGVldHM6b2UsU2hlZXROYW1lczpZZS5TaGVldE5hbWVzLFN0cmluZ3M6bDgsU3R5bGVzOnllLFRoZW1lczpwZSxTU0Y6QS5nZXRfdGFibGUoKX0sIVIuc2tpcFBhcnNlKXtpZihmdW5j''@;'; put 'put ''dGlvbiBrQyhTKXshU3x8IVMuV29ya2Jvb2t8fCFTLldvcmtib29rLk5hbWVzfHxTLldvcmtib29rLk5hbWVzLmZvckVhY2goZnVuY3Rpb24oUil7aWYoUi5OYW1lJiYiX3hsbm0uIj09Ui5OYW1lLnNsaWNlKDAsNikmJigiX3hsbm0uUHJpbnRfQXJlYSI9PVIuTmFtZXx8Il94bG5tLlByaW50''@;'; put 'put ''X1RpdGxlcyI9PVIuTmFtZSkpe3ZhciBrPVMuU2hlZXRzW1MuU2hlZXROYW1lc1tSLlNoZWV0XV07aWYoayl7a1siIXByaW50Il18fChrWyIhcHJpbnQiXT17fSksa1siIXByaW50Il0ucHJvcHN8fChrWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIEc9a1siIXByaW50Il0sUT1SLlJlZjtpZigi''@;'; put 'put ''X3hsbm0uUHJpbnRfQXJlYSI9PVIuTmFtZSl7US5pbmRleE9mKCIhIik+LTEmJihRPVEuc2xpY2UoUS5pbmRleE9mKCIhIikrMSkpO3ZhciBvZT1vbyhRPVEucmVwbGFjZSgvWyRdL2csIiIpKTtHLmFyZWE9b2V9ZWxzZSJfeGxubS5QcmludF9UaXRsZXMiPT1SLk5hbWUmJihHLnRpdGxlcz17''@;'; put 'put ''czp7cjotMSxjOi0xfSxlOntyOi0xLGM6LTF9fSxRLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihnZSl7dmFyIHllPU1zKGdlLnNsaWNlKGdlLmluZGV4T2YoIiEiKSsxKS5yZXBsYWNlKC9bJF0vZywiIikpO3llLnMuYz4tMSYmKEcudGl0bGVzLnMuYz15ZS5zLmMpLHllLmUuYz4tMSYm''@;'; put 'put ''KEcudGl0bGVzLmUuYz15ZS5lLmMpLHllLnMucj4tMSYmKEcudGl0bGVzLnMucj15ZS5zLnIpLHllLmUucj4tMSYmKEcudGl0bGVzLmUucj15ZS5lLnIpfSkpfX19KX0oRXQpLFImJlIuYm9va0ZpbGVzJiYoRXQua2V5cz1rLEV0LmZpbGVzPVMuZmlsZXMpLFImJlIuYm9va1ZCQSYmKEcudmJh''@;'; put 'put ''Lmxlbmd0aD4wP0V0LnZiYXJhdz1UdChTLEFjKEcudmJhWzBdKSwhMCk6Ry5kZWZhdWx0cyYmRy5kZWZhdWx0cy5iaW49PT1VayYmKEV0LnZiYXJhdz1UdChTLCJ4bC92YmFQcm9qZWN0LmJpbiIsITApKSksQm4mJkJuWyIhaWQiXSl7Zm9yKHZhciBrcj1bXSxWbj0xO1ZuPD0xMDI0OysrVm4p''@;'; put 'put ''Qm5bIiFpZCJdWyJySWQiK1ZuXSYmQm5bIiFpZCJdWyJySWQiK1ZuXS5UeXBlJiYvY3VzdG9tWG1sJC8udGVzdChCblsiIWlkIl1bInJJZCIrVm5dLlR5cGUpJiZrci5wdXNoKGZuKEJuWyIhaWQiXVsicklkIitWbl0uVGFyZ2V0LEcud29ya2Jvb2tzWzBdKSk7a3IubGVuZ3RoPjAmJihFdC5D''@;'; put 'put ''dXN0b21YTUw9W10sa3IuZm9yRWFjaChmdW5jdGlvbihfcil7dmFyIEZuPXtkYXRhOm5yKFMsQWMoX3IpKX0sanI9VnIoX3IpO3RyeXt2YXIgWmk9YmYobnIoUyxBYyhqciksITApLGpyKTtpZihaaSlmb3IodmFyIHlpPTE7eWk8PTEwMjQ7Kyt5aSlaaVsiIWlkIl1bInJJZCIreWldJiZaaVsi''@;'; put 'put ''IWlkIl1bInJJZCIreWldLlR5cGUmJi9jdXN0b21YbWxQcm9wcyQvLnRlc3QoWmlbIiFpZCJdWyJySWQiK3lpXS5UeXBlKSYmKEZuLnByb3BzPW5yKFMsQWMoZm4oWmlbIiFpZCJdWyJySWQiK3lpXS5UYXJnZXQsX3IpKSkpfWNhdGNoe31FdC5DdXN0b21YTUwucHVzaChGbil9KSl9dmFyIEJy''@;'; put 'put ''PWh0KFMsInhsL21vZGVsL2l0ZW0uZGF0YSIsITApO0JyJiYoRXQubW9kZWw9QnIpLEcuY29ubiYmKEV0LmNvbm49VHQoUyxBYyhHLmNvbm4pLCEwKSksZnIubGVuZ3RoJiYoRXQuRXh0ZXJuYWxXQj1mciksTmUmJihOZS5QUEk9RGYpfXJldHVybiBSLnRlbXBsYXRlJiYoRXQuX3dzcGF0aHM9''@;'; put 'put ''ZXIsRXQuX3N0eXBhdGg9QWMoRy5zdHlsZXx8IiIpLEV0Ll93YnBhdGg9QWMoRy53b3JrYm9va3NbMF18fCJ4bC93b3JrYm9vay54bWwiKSxFdC5fdm1scGF0aHM9TWksRXQuX3dicmVsc3BhdGg9bHIsRXQuX2N0PW5yKFMsIltDb250ZW50X1R5cGVzXS54bWwiKSxFdC5maWxlcz1TLmZpbGVz''@;'; put 'put ''LEJjKEV0LFMsUikpLEV0fWZ1bmN0aW9uIEZiKFMsUil7dmFyIGs9Unx8e307ay5wYXNzd29yZHx8KGsucGFzc3dvcmQ9IlZlbHZldFN3ZWF0c2hvcCIpO3ZhciBHPSJXb3JrYm9vayIsUT12ZS5maW5kKFMsRyk7dHJ5e2lmKCEoUT12ZS5maW5kKFMsRz0iLyFEYXRhU3BhY2VzL1ZlcnNpb24i''@;'; put 'put ''KSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrRyk7aWYoZnVuY3Rpb24gVFYoUyl7dmFyIFI9e307Ui5pZD1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLFIuUj1QMShTLDQpLFIuVT1QMShTLDQpLFIuVz1QMShTLDQpfShRLmNv''@;'; put 'put ''bnRlbnQpLCEoUT12ZS5maW5kKFMsRz0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IVEuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitHKTt2YXIgb2U9ZnVuY3Rpb24gQVYoUyl7dmFyIFI9W107Uy5sKz00O2Zvcih2YXIg''@;'; put 'put ''az1TLnJlYWRfc2hpZnQoNCk7ay0tID4wOylSLnB1c2goaEMoUykpO3JldHVybiBSfShRLmNvbnRlbnQpO2lmKDEhPT1vZS5sZW5ndGh8fDEhPT1vZVswXS5jb21wcy5sZW5ndGh8fDAhPT1vZVswXS5jb21wc1swXS50fHwiU3Ryb25nRW5jcnlwdGlvbkRhdGFTcGFjZSIhPT1vZVswXS5uYW1l''@;'; put 'put ''fHwiRW5jcnlwdGVkUGFja2FnZSIhPT1vZVswXS5jb21wc1swXS52KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrRyk7aWYoIShRPXZlLmZpbmQoUyxHPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikp''@;'; put 'put ''fHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0cpO3ZhciBnZT1mdW5jdGlvbiBrVihTKXt2YXIgUj1bXTtTLmwrPTQ7Zm9yKHZhciBrPVMucmVhZF9zaGlmdCg0KTtrLS0gPjA7KVIucHVzaChTLnJlYWRfc2hpZnQoMCwibHBw''@;'; put 'put ''NCIpKTtyZXR1cm4gUn0oUS5jb250ZW50KTtpZigxIT1nZS5sZW5ndGh8fCJTdHJvbmdFbmNyeXB0aW9uVHJhbnNmb3JtIiE9Z2VbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitHKTtpZighKFE9dmUuZmluZChTLEc9Ii8hRGF0YVNwYWNlcy9UcmFu''@;'; put 'put ''c2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrRyk7IWZ1bmN0aW9uIGVuZShTKXt2YXIgUj1mdW5jdGlvbiBEVihTKXt2YXIgUj17fTtyZXR1''@;'; put 'put ''cm4gUy5yZWFkX3NoaWZ0KDQpLFMubCs9NCxSLmlkPVMucmVhZF9zaGlmdCgwLCJscHA0IiksUi5uYW1lPVMucmVhZF9zaGlmdCgwLCJscHA0IiksUi5SPVAxKFMsNCksUi5VPVAxKFMsNCksUi5XPVAxKFMsNCksUn0oUyk7aWYoUi5lbmFtZT1TLnJlYWRfc2hpZnQoMCwiOGxwcDQiKSxSLmJs''@;'; put 'put ''a3N6PVMucmVhZF9zaGlmdCg0KSxSLmNtb2RlPVMucmVhZF9zaGlmdCg0KSw0IT1TLnJlYWRfc2hpZnQoNCkpdGhyb3cgbmV3IEVycm9yKCJCYWQgIVByaW1hcnkgcmVjb3JkIik7cmV0dXJuIFJ9KFEuY29udGVudCl9Y2F0Y2h7fWlmKCEoUT12ZS5maW5kKFMsRz0iL0VuY3J5cHRpb25JbmZv''@;'; put 'put ''IikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0cpO3ZhciBwZT1mdW5jdGlvbiBYNihTKXt2YXIgUj1QMShTKTtzd2l0Y2goUi5NaW5vcil7Y2FzZSAyOnJldHVybltSLk1pbm9yLFJWKFMpXTtjYXNlIDM6cmV0dXJuW1Iu''@;'; put 'put ''TWlub3IsSjYoKV07Y2FzZSA0OnJldHVybltSLk1pbm9yLGZDKFMpXX10aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIHVucmVjb2duaXplZCBWZXJzaW9uOiAiK1IuTWlub3IpfShRLmNvbnRlbnQpO2lmKCEoUT12ZS5maW5kKFMsRz0iL0VuY3J5cHRlZFBhY2thZ2Ui''@;'; put 'put ''KSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrRyk7aWYoND09cGVbMF0pcmV0dXJuIGZ1bmN0aW9uIExiKFMsUixrLEcpe3ZhciBRPXZlLnV0aWxzLnByZXBfYmxvYjtpZigiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNv''@;'; put 'put ''bS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQiIT1TLnVyaSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEVDTUEtMzc2IEFnaWxlIFVSSSAiK1MudXJpKTt2YXIgb2U9Uy5lbmNzWzBdLGdlPW9lLmhhc2hBbGdvcml0aG0scGU9ImFlcy0yNTYtY2JjIix5ZT1CdWZmZXIu''@;'; put 'put ''ZnJvbShvZS5zYWx0VmFsdWUsImJhc2U2NCIpLFBlPUJ1ZmZlci5mcm9tKFMuc2FsdFZhbHVlLCJiYXNlNjQiKSxOZT0rb2UuYmxvY2tTaXplLFllPStvZS5rZXlCaXRzPj4zLGV0PW1jKEJ1ZmZlci5jb25jYXQoW3llLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsaykp''@;'; put 'put ''XSksZ2UpLGN0PUJ1ZmZlci5hbGxvYyg0KTtRKGN0LDApO2Zvcih2YXIgRXQ9MDtFdDxvZS5zcGluQ291bnQ7KytFdCljdC5sPTAsY3Qud3JpdGVfc2hpZnQoNCxFdCksZXQ9bWMoQnVmZmVyLmNvbmNhdChbY3QsZXRdKSxnZSk7dmFyIGF0PWZ1bmN0aW9uKGJyLGVyLE1pLEZpKXt2YXIgbmE9''@;'; put 'put ''bWMoQnVmZmVyLmNvbmNhdChbYnIsQnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSldKSxGaSksY2E9bmEubGVuZ3RoPj1NaT9uYS5zbGljZSgwLE1pKTpCdWZmZXIuYWxsb2MoTWkpO2lmKG5hLmxlbmd0aDxNaSl7Zm9yKHZhciBMaT0wO0xpPG5hLmxlbmd0aDsr''@;'; put 'put ''K0xpKWNhW0xpXT1uYVtMaV07Zm9yKDtMaTxNaTsrK0xpKWNhW0xpXT01NH1yZXR1cm4gY2F9KGV0LDAsWWUsZ2UpO3N3aXRjaChvZS5jaXBoZXJBbGdvcml0aG0pe2Nhc2UiQUVTIjppZigiQ2hhaW5pbmdNb2RlQ0JDIiE9b2UuY2lwaGVyQ2hhaW5pbmcpdGhyb3cgbmV3IEVycm9yKCJVbnN1''@;'; put 'put ''cHBvcnRlZCBjaXBoZXIgY2hhaW5pbmcgIitvZS5jaXBoZXJDaGFpbmluZyk7cGU9ImFlcy0iK29lLmtleUJpdHMrIi1jYmMiO2JyZWFrO2Nhc2UiUkMyIjpwZT0icmMyIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2lwaGVyIGFsZ28gIitvZS5jaXBoZXJB''@;'; put 'put ''bGdvcml0aG0pfXllPWZ1bmN0aW9uKGZyKXtmb3IodmFyIGJyPUJ1ZmZlci5hbGxvYyhOZSksZXI9MDtlcjxOZTsrK2VyKWJyW2VyXT1lcjxmci5sZW5ndGg/ZnJbZXJdOjU0O3JldHVybiBicn0oeWUpO3ZhciBidD1CdWZmZXIuZnJvbShvZS5lbmNyeXB0ZWRLZXlWYWx1ZSwiYmFzZTY0Iiks''@;'; put 'put ''anQ9WTQoYXQseWUscGUpLnVwZGF0ZShidCksa3Q9WTQobWMoQnVmZmVyLmNvbmNhdChbZXQsQnVmZmVyLmZyb20oWzIxNSwxNzAsMTUsMTA5LDQ4LDk3LDUyLDc4XSldKSxnZSkuc2xpY2UoMCxZZSkseWUscGUpLnVwZGF0ZShCdWZmZXIuZnJvbShvZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hW''@;'; put 'put ''YWx1ZSwiYmFzZTY0IikpLE90PW1jKFk0KG1jKEJ1ZmZlci5jb25jYXQoW2V0LEJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pXSksZ2UpLnNsaWNlKDAsWWUpLHllLHBlKS51cGRhdGUoQnVmZmVyLmZyb20ob2UuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQs''@;'; put 'put ''ImJhc2U2NCIpKSxnZSksS3Q9K29lLmhhc2hTaXplfHxNYXRoLm1pbihrdC5sZW5ndGgsT3QubGVuZ3RoKTtpZigwIT1rdC5zbGljZSgwLEt0KS5jb21wYXJlKE90LnNsaWNlKDAsS3QpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO1EoUiwwKTt2YXIgVG49Ui5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpO1IubCs9NDt2YXIgcnI9W10sU249QnVmZmVyLmNvbmNhdChbUGUsQnVmZmVyLmFsbG9jKDQpXSk7Zm9yKFEoU24pLEV0PTA7Ui5sPFIubGVuZ3RoOylTbi5sPXllLmxlbmd0aCxTbi53cml0ZV9zaGlmdCg0LEV0KSxyci5wdXNoKFk0KGp0LG1jKEJ1ZmZlci5mcm9tKFNuKSxn''@;'; put 'put ''ZSkuc2xpY2UoMCwxNikscGUpLnVwZGF0ZShCdWZmZXIuZnJvbShSLnNsaWNlKFIubCxSLmwrNDA5NikpKSksUi5sKz00MDk2LCsrRXQ7dmFyIFhuPUJ1ZmZlci5jb25jYXQocnIpLnNsaWNlKDAsVG4pLEJuPXF0KEcpO3JldHVybiBCbi50eXBlPSJidWZmZXIiLCQ1KFhuLEJuKX0ocGVbMV0s''@;'; put 'put ''US5jb250ZW50LGsucGFzc3dvcmR8fCIiLGspO2lmKDI9PXBlWzBdKXJldHVybiBmdW5jdGlvbiBGSShTLFIsayxHKXt2YXIgUT12ZS51dGlscy5wcmVwX2Jsb2I7aWYoIlN0ZCIhPT1TLnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpO3ZhciBv''@;'; put 'put ''ZT1TLnYuU2FsdCxnZT1TLnYuVmVyaWZpZXIscGU9Uy52LlZlcmlmaWVySGFzaDtpZigzNiE9Uy5oLkZsYWdzKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgU3RhbmRhcmQgRW5jcnlwdGlvbiBiYWQgRmxhZ3MiKTt2YXIgeWU9MCxQZT0iIjtzd2l0Y2goUy5oLkFsZ0lEKXtjYXNlIDI2MTI2''@;'; put 'put ''OnllPTEyOCxQZT0iYWVzLTEyOC1lY2IiO2JyZWFrO2Nhc2UgMjYxMjc6eWU9MTk2LFBlPSJhZXMtMTkyLWVjYiI7YnJlYWs7Y2FzZSAyNjEyODp5ZT0yNTYsUGU9ImFlcy0yNTYtZWNiIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5''@;'; put 'put ''cHRpb24iKX1pZigzMjc3MiE9Uy5oLkFsZ0lESGFzaCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7aWYoUy5oLktleVNpemUhPXllKXRocm93IG5ldyBFcnJvcigiQWxnSUQvS2V5U2l6ZSBtaXNtYXRjaCIpO2lmKDI0IT1TLmguUHJvdmlkZXJU''@;'; put 'put ''eXBlKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgdW5zdXBwb3J0ZWQgUHJvdmlkZXJUeXBlICIrUy5oLlByb3ZpZGVyVHlwZSk7aWYoIk1pY3Jvc29mdCBFbmhhbmNlZCBSU0EgYW5kIEFFUyBDcnlwdG9ncmFwaGljIFByb3ZpZGVyIiE9PVMuaC5DU1BOYW1lLnNsaWNlKDAsNTMpKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ3J5cHRvIFByb3ZpZGVyICIrUy5oLkNTUE5hbWUpO3ZhciBZZT0iU0hBLTEiLGV0PXllPj4zLGN0PW1jKEJ1ZmZlci5jb25jYXQoW29lLGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsayldKSxZZSksRXQ9QnVmZmVyLmFsbG9jKDQpO1EoRXQsMCk7''@;'; put 'put ''Zm9yKHZhciBhdD0wO2F0PDVlNDsrK2F0KUV0Lmw9MCxFdC53cml0ZV9zaGlmdCg0LGF0KSxjdD1tYyhCdWZmZXIuY29uY2F0KFtFdCxjdF0pLFllKTtFdC5sPTAsRXQud3JpdGVfc2hpZnQoNCwwKTt2YXIgcnIsU24sbHIsWG4sQm4sanQ9KFhuPShscj1mdW5jdGlvbihicixlcixNaSl7Zm9y''@;'; put 'put ''KHZhciBGaT1CdWZmZXIuYWxsb2MoNjQpLG5hPTA7bmE8RmkubGVuZ3RoOysrbmEpRmlbbmFdPWJyO2ZvcihuYT0wO25hPGVyLmxlbmd0aDsrK25hKUZpW25hXV49ZXJbbmFdO3JldHVybiBtYyhGaSxNaSl9KSg1NCxycj1tYyhCdWZmZXIuY29uY2F0KFtjdCxFdF0pLFllKSxTbj1ZZSksQm49''@;'; put 'put ''bHIoOTIscnIsU24pLEJ1ZmZlci5jb25jYXQoW1huLEJuXSkuc2xpY2UoMCxldCkpO2lmKFk0KGp0LEJ1ZmZlci5hbGxvYygwKSxQZSkudXBkYXRlKHBlKS5zbGljZSgwLDIwKS5jb21wYXJlKG1jKFk0KGp0LEJ1ZmZlci5hbGxvYygwKSxQZSkudXBkYXRlKGdlKSxZZSkpKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7UShSLDApO3ZhciBrdD1SLnJlYWRfc2hpZnQoNCk7Ui5sKz00O3ZhciBPdD1bXTtmb3IoYXQ9MDtSLmw8Ui5sZW5ndGg7KU90LnB1c2goWTQoanQsQnVmZmVyLmFsbG9jKDApLFBlKS51cGRhdGUoUi5zbGljZShSLmwsUi5sKzQwOTYpKSksUi5s''@;'; put 'put ''Kz00MDk2LCsrYXQ7cmV0dXJuICQ1KEJ1ZmZlci5jb25jYXQoT3QpLnNsaWNlKDAsa3QpLEcpfShwZVsxXSxRLmNvbnRlbnQsay5wYXNzd29yZHx8IiIsayk7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpfXZhciBiZD1mdW5jdGlvbigpe307ZnVuY3Rpb24g''@;'; put 'put ''SDgoUyxSKXtpZihSLnRlbXBsYXRlKXJldHVybiBiZChTLFIpO2lmKCJvZHMiPT1SLmJvb2tUeXBlKXJldHVybiBSSShTLFIpO0lmKFImJlIuUFBJfHw5NiksUyYmIVMuU1NGJiYoUy5TU0Y9QS5nZXRfdGFibGUoKSksUyYmUy5TU0YmJihhZShBKSxBLmxvYWRfdGFibGUoUy5TU0YpLFIucmV2''@;'; put 'put ''c3NmPWtlKFMuU1NGKSxSLnJldnNzZltTLlNTRls2NTUzNV1dPTAsUi5zc2Y9Uy5TU0YpLFMuU3R5bGVzPXtGb250czpSLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOlIuRmls''@;'; put 'put ''bHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOlIuQm9yZGVycz1be31dLERYRjpSLkRYRj1TLlN0eWxlcyYmUy5TdHlsZXMuRFhGfHxbXSxUYWJsZTpSLlRhYmxlPVMuU3R5bGVzJiZTLlN0eWxlcy5UYWJsZXx8W119LFIub3ZlcnJpZGVN''@;'; put 'put ''RFc/VGM9Ui5vdmVycmlkZU1EVzpJNChSLkZvbnRzWzBdKSxSLnJlbHM9e30sUi53YnJlbHM9e30sUi5TdHJpbmdzPVtdLFIuU3RyaW5ncy5Db3VudD0wLFIuU3RyaW5ncy5VbmlxdWU9MCxxMz9SLnJldlN0cmluZ3M9bmV3IE1hcDooUi5yZXZTdHJpbmdzPXt9LFIucmV2U3RyaW5ncy5mb289''@;'; put 'put ''W10sZGVsZXRlIFIucmV2U3RyaW5ncy5mb28pO3ZhciBrPSJ4bHNiIj09Ui5ib29rVHlwZT8iYmluIjoieG1sIixHPVlrLmluZGV4T2YoUi5ib29rVHlwZSk+LTEsUT17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltd''@;'; put 'put ''LGNvbW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6''@;'; put 'put ''W10sY2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07UGYoUj1SfHx7fSk7dmFyIG9lPWhpKCksZ2U9IiIscGU9MDtpZihS''@;'; put 'put ''LmNlbGxYZnM9W10sUi5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sbDAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSxTLlByb3BzfHwoUy5Qcm9wcz17fSksam4ob2UsZ2U9ImRvY1Byb3BzL2NvcmUueG1sIixmdW5jdGlvbiB6dyhTLFIp''@;'; put 'put ''e3ZhciBrPVJ8fHt9LEc9W0lpLGp3XSxRPXt9O2lmKCFTJiYhay5Qcm9wcylyZXR1cm4gRy5qb2luKCIiKTtTJiYobnVsbCE9Uy5DcmVhdGVkRGF0ZSYmeWYoImRjdGVybXM6Y3JlYXRlZCIsInN0cmluZyI9PXR5cGVvZiBTLkNyZWF0ZWREYXRlP1MuQ3JlYXRlZERhdGU6Y2YoUy5DcmVhdGVk''@;'; put 'put ''RGF0ZSxrLldURikseyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sRyxRKSxudWxsIT1TLk1vZGlmaWVkRGF0ZSYmeWYoImRjdGVybXM6bW9kaWZpZWQiLCJzdHJpbmciPT10eXBlb2YgUy5Nb2RpZmllZERhdGU/Uy5Nb2RpZmllZERhdGU6Y2YoUy5Nb2RpZmllZERhdGUsay5XVEYpLHsi''@;'; put 'put ''eHNpOnR5cGUiOiJkY3Rlcm1zOlczQ0RURiJ9LEcsUSkpO2Zvcih2YXIgb2U9MDtvZSE9UjAubGVuZ3RoOysrb2Upe3ZhciBnZT1SMFtvZV0scGU9ay5Qcm9wcyYmbnVsbCE9ay5Qcm9wc1tnZVsxXV0/ay5Qcm9wc1tnZVsxXV06Uz9TW2dlWzFdXTpudWxsOyEwPT09cGU/cGU9IjEiOiExPT09''@;'; put 'put ''cGU/cGU9IjAiOiJudW1iZXIiPT10eXBlb2YgcGUmJihwZT1TdHJpbmcocGUpKSxudWxsIT1wZSYmeWYoZ2VbMF0scGUsbnVsbCxHLFEpfXJldHVybiBHLmxlbmd0aD4yJiYoR1tHLmxlbmd0aF09IjwvY3A6Y29yZVByb3BlcnRpZXM+IixHWzFdPUdbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEcu''@;'; put 'put ''am9pbigiIil9KFMuUHJvcHMsUikpLFEuY29yZXByb3BzLnB1c2goZ2UpLEVyKFIucmVscywyLGdlLEthLkNPUkVfUFJPUFMpLGdlPSJkb2NQcm9wcy9hcHAueG1sIiwhUy5Qcm9wc3x8IVMuUHJvcHMuU2hlZXROYW1lcylpZihTLldvcmtib29rJiZTLldvcmtib29rLlNoZWV0cyl7Zm9yKHZh''@;'; put 'put ''ciB5ZT1bXSxQZT0wO1BlPFMuU2hlZXROYW1lcy5sZW5ndGg7KytQZSkyIT0oUy5Xb3JrYm9vay5TaGVldHNbUGVdfHx7fSkuSGlkZGVuJiZ5ZS5wdXNoKFMuU2hlZXROYW1lc1tQZV0pO1MuUHJvcHMuU2hlZXROYW1lcz15ZX1lbHNlIFMuUHJvcHMuU2hlZXROYW1lcz1TLlNoZWV0TmFtZXM7''@;'; put 'put ''Uy5Qcm9wcy5Xb3Jrc2hlZXRzPVMuUHJvcHMuU2hlZXROYW1lcy5sZW5ndGgsam4ob2UsZ2UsZnVuY3Rpb24gVXcoUyl7dmFyIFI9W10saz1QcjtyZXR1cm4gU3x8KFM9e30pLFMuQXBwbGljYXRpb249IlNoZWV0SlMiLFJbUi5sZW5ndGhdPUlpLFJbUi5sZW5ndGhdPUw2LHJoLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oRyl7aWYodm9pZCAwIT09U1tHWzFdXSl7dmFyIFE7c3dpdGNoKEdbMl0pe2Nhc2Uic3RyaW5nIjpRPUxyKFN0cmluZyhTW0dbMV1dKSk7YnJlYWs7Y2FzZSJib29sIjpRPVNbR1sxXV0/InRydWUiOiJmYWxzZSJ9dm9pZCAwIT09USYmKFJbUi5sZW5ndGhdPWsoR1swXSxRKSl9''@;'; put 'put ''fSksUltSLmxlbmd0aF09aygiSGVhZGluZ1BhaXJzIixrKCJ2dDp2ZWN0b3IiLGsoInZ0OnZhcmlhbnQiLCI8dnQ6bHBzdHI+V29ya3NoZWV0czwvdnQ6bHBzdHI+IikraygidnQ6dmFyaWFudCIsaygidnQ6aTQiLFN0cmluZyhTLldvcmtzaGVldHMpKSkse3NpemU6MixiYXNlVHlwZToidmFy''@;'; put 'put ''aWFudCJ9KSksUltSLmxlbmd0aF09aygiVGl0bGVzT2ZQYXJ0cyIsaygidnQ6dmVjdG9yIixTLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKEcpe3JldHVybiI8dnQ6bHBzdHI+IitMcihHKSsiPC92dDpscHN0cj4ifSkuam9pbigiIikse3NpemU6Uy5Xb3Jrc2hlZXRzLGJhc2VUeXBlOiJscHN0''@;'; put 'put ''ciJ9KSksUi5sZW5ndGg+MiYmKFJbUi5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixSWzFdPVJbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFIuam9pbigiIil9KFMuUHJvcHMpKSxRLmV4dHByb3BzLnB1c2goZ2UpLEVyKFIucmVscywzLGdlLEthLkVYVF9QUk9QUyksUy5DdXN0cHJvcHMhPT1TLlBy''@;'; put 'put ''b3BzJiZPZShTLkN1c3Rwcm9wc3x8e30pLmxlbmd0aD4wJiYoam4ob2UsZ2U9ImRvY1Byb3BzL2N1c3RvbS54bWwiLGZ1bmN0aW9uIF9mKFMpe3ZhciBSPVtJaSxfdl07aWYoIVMpcmV0dXJuIFIuam9pbigiIik7dmFyIGs9MTtyZXR1cm4gT2UoUykuZm9yRWFjaChmdW5jdGlvbihRKXsrK2ss''@;'; put 'put ''UltSLmxlbmd0aF09UHIoInByb3BlcnR5IixmdW5jdGlvbiBDcyhTLFIpe3N3aXRjaCh0eXBlb2YgUyl7Y2FzZSJzdHJpbmciOnZhciBrPVByKCJ2dDpscHdzdHIiLExyKFMpKTtyZXR1cm4gUiYmKGs9ay5yZXBsYWNlKC8mcXVvdDsvZywiX3gwMDIyXyIpKSxrO2Nhc2UibnVtYmVyIjpyZXR1''@;'; put 'put ''cm4gUHIoKDB8Uyk9PVM/InZ0Omk0IjoidnQ6cjgiLExyKFN0cmluZyhTKSkpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIFByKCJ2dDpib29sIixTPyJ0cnVlIjoiZmFsc2UiKX1pZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gUHIoInZ0OmZpbGV0aW1lIixjZihTKSk7dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbmFibGUgdG8gc2VyaWFsaXplICIrUyl9KFNbUV0sITApLHtmbXRpZDoie0Q1Q0RENTA1LTJFOUMtMTAxQi05Mzk3LTA4MDAyQjJDRjlBRX0iLHBpZDprLG5hbWU6THIoUSl9KX0pLFIubGVuZ3RoPjImJihSW1IubGVuZ3RoXT0iPC9Qcm9wZXJ0aWVzPiIsUlsxXT1SWzFdLnJlcGxhY2Uo''@;'; put 'put ''Ii8+IiwiPiIpKSxSLmpvaW4oIiIpfShTLkN1c3Rwcm9wcykpLFEuY3VzdHByb3BzLnB1c2goZ2UpLEVyKFIucmVscyw0LGdlLEthLkNVU1RfUFJPUFMpKTt2YXIgTmU9W10sWWU9W107ZnVuY3Rpb24gZXQoVG4scnIpe1llLnB1c2goW3BlLTEscnIsVG5dKX1mdW5jdGlvbiBjdChUbil7TmUu''@;'; put 'put ''cHVzaChbcGUtMSxUbl0pLEVyKEV0LC0xLCIuLi9waXZvdFRhYmxlcy9waXZvdFRhYmxlIitOZS5sZW5ndGgrIi4iK2ssS2EuUElWT1QpfWZvcihwZT0xO3BlPD1TLlNoZWV0TmFtZXMubGVuZ3RoOysrcGUpe3ZhciBFdD17IiFpZCI6e319LGF0PVMuU2hlZXRzW1MuU2hlZXROYW1lc1twZS0x''@;'; put 'put ''XV0sYnQ9KGF0fHx7fSlbIiF0eXBlIl18fCJzaGVldCI7c3dpdGNoKGJ0KXtjYXNlImNoYXJ0IjppZih0eXBlb2Ygd3JpdGVfZHJhd2luZ188InUiKXtqbihvZSxnZT0ieGwvY2hhcnRzaGVldHMvc2hlZXQiK3BlKyIuIitrLGhJKHBlLTEsZ2UsUixTLEV0KSksUS5jaGFydHMucHVzaChnZSks''@;'; put 'put ''RXIoUi53YnJlbHMsLTEsImNoYXJ0c2hlZXRzL3NoZWV0IitwZSsiLiIrayxLYS5DUyk7YnJlYWt9ZGVmYXVsdDpqbihvZSxnZT0ieGwvd29ya3NoZWV0cy9zaGVldCIrcGUrIi4iK2ssZEkocGUtMSxnZSxSLFMsRXQpKSxRLnNoZWV0cy5wdXNoKGdlKSxFcihSLndicmVscywtMSwid29ya3No''@;'; put 'put ''ZWV0cy9zaGVldCIrcGUrIi4iK2ssS2EuV1NbMF0pfWlmKGF0KXsiY2hhcnQiPT1idCYmIWF0WyIhcG9zIl0mJihhdFsiIXBvcyJdPXt4OjAseTowLHc6OTAwLGg6NjAwfSk7dmFyIGp0PWF0WyIhY29tbWVudHMiXSxrdD0hMTtpZihqdCYmanQubGVuZ3RoPjApe3ZhciBPdD0ieGwvY29tbWVu''@;'; put 'put ''dHMiK3BlKyIuIitrO2puKG9lLE90LEF6KGp0LE90LFIpKSxRLmNvbW1lbnRzLnB1c2goT3QpLEVyKEV0LC0xLCIuLi9jb21tZW50cyIrcGUrIi4iK2ssS2EuQ01OVCksa3Q9ITB9KGF0WyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wJiYoa3Q9ITApLGF0WyIhbGVnYWN5Il0mJmt0JiZqbihv''@;'; put 'put ''ZSwieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIrcGUrIi52bWwiLE9DKHBlLGF0WyIhY29tbWVudHMiXSxhdFsiIWNvbnRyb2xzIl0sYXQpKSxhdFsiIWxlZ2FjeUhGIl0mJkJrKG9lLDAscGUsYXRbIiFwcmludCJdLmltYWdlcyk7dmFyIEt0PSgiY2hhcnQiPT1hdFsiIXR5cGUiXT9bYXRdOmF0''@;'; put 'put ''WyIhY2hhcnRzIl18fFtdKS5jb25jYXQoKGF0WyIhaW1hZ2VzIl18fFtdKS5tYXAoZnVuY3Rpb24oVG4pe3JldHVybiBUblsiIXR5cGUiXXx8KFRuWyIhdHlwZSJdPSJpbWFnZSIpLFRufSkpLmNvbmNhdCgoYXRbIiFzaGFwZXMiXXx8W10pLm1hcChmdW5jdGlvbihUbil7cmV0dXJuIFRuWyIh''@;'; put 'put ''dHlwZSJdfHwoVG5bIiF0eXBlIl09InNoYXBlIiksVG59KSk7S3QmJkt0Lmxlbmd0aCYmKHR5cGVvZiB3cml0ZV9kcmF3aW5nXzwidSI/d3JpdGVfZHJhd2luZ18ob2UsUSxwZSxhdCxLdCk6KGpuKG9lLCJ4bC9kcmF3aW5ncy9kcmF3aW5nIitwZSsiLnhtbCIsbUIoKSksUS5kcmF3aW5ncy5w''@;'; put 'put ''dXNoKCJ4bC9kcmF3aW5ncy9kcmF3aW5nIitwZSsiLnhtbCIpKSksZGVsZXRlIGF0WyIhY29tbWVudHMiXSxkZWxldGUgYXRbIiFsZWdhY3kiXSxkZWxldGUgYXRbIiFsZWdhY3lIRiJdfWF0JiZhdFsiIXBpdm90cyJdJiYieG1sIj09ayYmdHlwZW9mIHdyaXRlX3Bpdm90X3htbDwidSImJmF0''@;'; put 'put ''WyIhcGl2b3RzIl0uZm9yRWFjaChjdCksRXRbIiFpZCJdLnJJZDEmJmpuKG9lLFZyKGdlKSxraShFdCkpLGF0JiZhdFsiIXRhYmxlcyJdJiYieG1sIj09ayYmYXRbIiF0YWJsZXMiXS5mb3JFYWNoKGV0KX1yZXR1cm4gbnVsbCE9Ui5TdHJpbmdzJiZSLlN0cmluZ3MubGVuZ3RoPjAmJihqbihv''@;'; put 'put ''ZSxnZT0ieGwvc2hhcmVkU3RyaW5ncy4iK2ssZkkoUi5TdHJpbmdzLGdlLFIpKSxRLnN0cnMucHVzaChnZSksRXIoUi53YnJlbHMsLTEsInNoYXJlZFN0cmluZ3MuIitrLEthLlNTVCkpLCJ4bWwiPT1rJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmd3JpdGVfcGl2b3RfeG1sKE5lLFMs''@;'; put 'put ''b2UsUSxSKSwieG1sIj09ayYmZnVuY3Rpb24gRjQoUyxSLGssRyl7Uy5mb3JFYWNoKGZ1bmN0aW9uKFEsb2Upe3ZhciBnZT1SLlNoZWV0c1tSLlNoZWV0TmFtZXNbUVswXV1dLHBlPSJ4bC90YWJsZXMvdGFibGUiKyhRWzBdKzEpKyJfIitRWzFdKyIueG1sIjtHLnRhYmxlcy5wdXNoKHBlKTt2''@;'; put 'put ''YXIgeWU9UVsyXS5yZWZ8fGdlWyIhcmVmIl07InN0cmluZyIhPXR5cGVvZiB5ZSYmKHllPXJhKHllKSk7dmFyIFBlPW9vKHllKSxOZT1RWzJdLm5hbWV8fCJzanN0YmxfIitRWzBdKyJfIitRWzFdLFllPVtJaV0sZXQ9IVd0KFFbMl0uaGVhZGVyKSxjdD1ldCYmIVd0KFFbMl0uZmlsdGVyKTtZ''@;'; put 'put ''ZS5wdXNoKCc8dGFibGUgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIgaWQ9IicrKG9lKzEpKyciIG5hbWU9IicrTHIoTmUpKyciIGRpc3BsYXlOYW1lPSInK0xyKE5lKSsnIiByZWY9IicreWUrJyIgJysobnVsbCE9UVsy''@;'; put 'put ''XS5oZWFkZXImJjEhPVFbMl0uaGVhZGVyPydoZWFkZXJSb3dDb3VudD0iJysoUVsyXS5oZWFkZXJ8fDApKyciICc6IiIpKyI+IiksY3QmJlllLnB1c2goJzxhdXRvRmlsdGVyIHJlZj0iJyt5ZSsnIi8+JyksWWUucHVzaCgnPHRhYmxlQ29sdW1ucyBjb3VudD0iJysoUGUuZS5jLVBlLnMuYysx''@;'; put 'put ''KSsnIj4nKTtmb3IodmFyIEV0PVtdLGF0PVBlLnMuYzthdDw9UGUuZS5jOysrYXQpaWYoZXQpe2Zvcih2YXIgYnQ9cWkoe3I6UGUucy5yLGM6YXR9KSxqdD1nZVtidF0sa3Q9UVsyXS5jb2xzJiZRWzJdLmNvbHNbYXQtUGUucy5jXSYmUVsyXS5jb2xzW2F0LVBlLnMuY10ubmFtZXx8anQmJihq''@;'; put 'put ''dC53fHxqdC52KXx8IkNvbHVtbiAiKyhhdC1QZS5zLmMrMSksT3Q9a3QsS3Q9MTtFdC5pbmRleE9mKE90KT4tMSYmKytLdDwxNjM4NDspT3Q9a3QrS3Q7aWYoT3QhPWt0KXRocm93InRhYmxlIGNvbHVtbnMgIithdCsiIGFuZCAiKyhFdC5pbmRleE9mKGt0KStQZS5zLmMpKyIgaGF2ZSB0aGUg''@;'; put 'put ''c2FtZSBoZWFkZXIgJyIra3QrIic7IHRyeSBzZXR0aW5nIGNlbGwgIitidCsiIHRvICciK090KyInIjtFdC5wdXNoKE90KSxZZS5wdXNoKCc8dGFibGVDb2x1bW4gaWQ9IicrKFFbMl0uY29scyYmUVsyXS5jb2xzW2F0LVBlLnMuY10mJm51bGwhPVFbMl0uY29sc1thdC1QZS5zLmNdLmlkP1Fb''@;'; put 'put ''Ml0uY29sc1thdC1QZS5zLmNdLmlkOmF0LVBlLnMuYysxKSsnIiBuYW1lPSInK0xyKE90KSsnIi8+Jyl9ZWxzZSBZZS5wdXNoKFFbMl0uY29scyYmUVsyXS5jb2xzW2F0LVBlLnMuY10/Jzx0YWJsZUNvbHVtbiBpZD0iJytRWzJdLmNvbHNbYXQtUGUucy5jXS5pZCsnIiBuYW1lPSInK1FbMl0u''@;'; put 'put ''Y29sc1thdC1QZS5zLmNdLm5hbWUrJyIvPic6Jzx0YWJsZUNvbHVtbiBpZD0iJysoYXQtUGUucy5jKzEpKyciIHVuaXF1ZU5hbWU9IicrKGF0LVBlLnMuYysxKSsnIiBuYW1lPSInKyhhdC1QZS5zLmMrMSkrJyIvPicpO1llLnB1c2goIjwvdGFibGVDb2x1bW5zPiIpO3ZhciBycj0rKCExIT09''@;'; put 'put ''KFFbMl0uc3R5bGV8fHt9KS5yb3dzdHJpcGUpLFNuPSshIShRWzJdLnN0eWxlfHx7fSkuY29sc3RyaXBlLGxyPSshIShRWzJdLnN0eWxlfHx7fSkuY29sZmlyc3QsWG49KyEhKFFbMl0uc3R5bGV8fHt9KS5jb2xsYXN0LEJuPShRWzJdLnN0eWxlfHx7fSkubmFtZXx8Ik1lZGl1bTkiO0JuPUJu''@;'; put 'put ''Lm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKT8iVGFibGVTdHlsZSIrQm46Qm4sWWUucHVzaCgnPHRhYmxlU3R5bGVJbmZvIG5hbWU9IicrQm4rJyIgc2hvd0ZpcnN0Q29sdW1uPSInK2xyKyciIHNob3dMYXN0Q29sdW1uPSInK1huKyciIHNob3dSb3dTdHJpcGVzPSInK3JyKyci''@;'; put 'put ''IHNob3dDb2x1bW5TdHJpcGVzPSInK1NuKyciLz4nKSxZZS5wdXNoKCI8L3RhYmxlPiIpLGpuKGsscGUsWWUuam9pbigiIikpfSl9KFllLFMsb2UsUSksInhtbCI9PWsmJihTLkV4dGVybmFsV0J8fFtdKS5sZW5ndGgmJmZ1bmN0aW9uIFJDKFMsUixrKXtrLmxpbmtzfHwoay5saW5rcz1bXSks''@;'; put 'put ''Uy5FeHRlcm5hbFdCJiZTLkV4dGVybmFsV0IuZm9yRWFjaChmdW5jdGlvbihHLFEpe3ZhciBvZT0iL3hsL2V4dGVybmFsTGlua3MvX3JlbHMvZXh0ZXJuYWxMaW5rIisoUSsxKSsiLnhtbC5yZWxzIixnZT17fTtFcihnZSwtMSxHLlRhcmdldCxHLk1pc3Npbmc/S2EuWE1JU1M6S2EuWFBBVEgp''@;'; put 'put ''LGpuKFIsQWMob2UpLGtpKGdlKSk7dmFyIHBlPSIveGwvZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhRKzEpKyIueG1sIjtrLmxpbmtzLnB1c2gocGUpLGpuKFIsQWMocGUpLGZ1bmN0aW9uIGZCKFMpe3ZhciBSPVtJaSxoQl07cmV0dXJuKFMuU2hlZXROYW1lc3x8W10pLmxlbmd0aCYm''@;'; put 'put ''KFIucHVzaCgnPGV4dGVybmFsQm9vayB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiByOmlkPSJySWQxIj4nKSxSLnB1c2goIjxzaGVldE5hbWVzPiIpLFMuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKGspe1IucHVzaCgnPHNoZWV0TmFtZSB2YWw9IicrTHIoaykrJyIvPicpfSksUi5wdXNoKCI8L3NoZWV0TmFtZXM+IiksUi5wdXNoKCI8c2hlZXREYXRhU2V0PiIpLFMuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGssRyl7dmFyIFE9Uy5TaGVldHNba10sb2U9e3NoZWV0SWQ6R30s''@;'; put 'put ''Z2U9bnVsbDtpZihudWxsPT1RKW9lLnJlZnJlc2hFcnJvcj0xO2Vsc2UgaWYoUVsiIXJlZiJdKXt2YXIgcGU9TXMoUVsiIXJlZiJdKTtnZT0iIjtmb3IodmFyIHllPXBlLnMucjt5ZTw9cGUuZS5yOysreWUpe2Zvcih2YXIgUGU9IiIsTmU9cGUucy5jO05lPD1wZS5lLmM7KytOZSl7dmFyIFll''@;'; put 'put ''PXFpKHtyOnllLGM6TmV9KTtRW1llXSYmKFBlfHwoUGU9Jzxyb3cgcj0iJysoeWUrMSkrJyI+JyksUGUrPSc8Y2VsbCByPSInK1llKyciJysoUVtZZV0udD8nIHQ9IicrUVtZZV0udCsnIic6IiIpKyI+PHY+IitMcihRW1llXS52KSsiPC92PjwvY2VsbD4iKX1QZSYmKGdlKz1QZSsiPC9yb3c+''@;'; put 'put ''Iil9fVIucHVzaChQcigic2hlZXREYXRhIixnZSxvZSkpfSksUi5wdXNoKCI8L3NoZWV0RGF0YVNldD4iKSxSLnB1c2goIjwvZXh0ZXJuYWxCb29rPiIpKSxSLmxlbmd0aD4yJiYoUltSLmxlbmd0aF09IjwvZXh0ZXJuYWxMaW5rPiIsUlsxXT1SWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxSLmpv''@;'; put 'put ''aW4oIiIpfShHKSl9KX0oUyxvZSxRKSwieG1sIj09ayYmZnVuY3Rpb24gREMoUyl7dmFyIFIsaztTLldvcmtib29rfHwoUy5Xb3JrYm9vaz17TmFtZXM6W119KSxTLldvcmtib29rLk5hbWVzfHwoUy5Xb3JrYm9vay5OYW1lcz1bXSk7Zm9yKHZhciBHPVMuV29ya2Jvb2suTmFtZXMsUT0wO1E8''@;'; put 'put ''Uy5TaGVldE5hbWVzLmxlbmd0aDsrK1Epe3ZhciBvZT1TLlNoZWV0TmFtZXNbUV0sZ2U9Uy5TaGVldHNbb2VdO2lmKGdlJiZnZVsiIXByaW50Il0pe3ZhciBwZT0iJyIrb2UrIichIix5ZT1nZVsiIXByaW50Il07aWYoeWUpe3ZhciBQZT0hKFI9eWUuYXJlYSksTmU9IShrPXllLnRpdGxlcyks''@;'; put 'put ''WWU9Uj8ic3RyaW5nIj09dHlwZW9mIFI/UjpyYShSKToiIjtpZihSJiYoRy5mb3JFYWNoKGZ1bmN0aW9uKGN0KXtjdC5TaGVldD09USYmIVBlJiYiX3hsbm0uUHJpbnRfQXJlYSI9PWN0Lk5hbWUmJihQZT0hMCxjdC5SZWY9cGUrWWUpfSksUGV8fEcucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRf''@;'; put 'put ''QXJlYSIsUmVmOnBlK1llLFNoZWV0OlF9KSksayl7dmFyIGV0PSIiO2sucy5jPi0xJiZrLmUuYz4tMSYmKGV0Kz1wZStUYShrLnMuYykrIjoiK1RhKGsuZS5jKSsiLCIpLGsucy5yPi0xJiZrLmUucj4tMSYmKGV0Kz1wZStqaShrLnMucikrIjoiK2ppKGsuZS5yKSsiLCIpLGV0PWV0LnNsaWNl''@;'; put 'put ''KDAsLTEpLEcuZm9yRWFjaChmdW5jdGlvbihjdCl7Y3QuU2hlZXQ9PVEmJiFOZSYmIl94bG5tLlByaW50X1RpdGxlcyI9PWN0Lk5hbWUmJihQZT0hMCxjdC5SZWY9ZXQpfSksTmV8fEcucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfVGl0bGVzIixSZWY6ZXQsU2hlZXQ6UX0pfX19fX0oUyksam4o''@;'; put 'put ''b2UsZ2U9InhsL3dvcmtib29rLiIrayxmdW5jdGlvbiBUeihTLFIsayl7cmV0dXJuKCIuYmluIj09PVIuc2xpY2UoLTQpP1NiOlQ4KShTLGspfShTLGdlLFIpKSxRLndvcmtib29rcy5wdXNoKGdlKSxFcihSLnJlbHMsMSxnZSxLYS5XQiksam4ob2UsZ2U9InhsL3RoZW1lL3RoZW1lMS54bWwi''@;'; put 'put ''LGlCKFMuVGhlbWVzLFIpKSxRLnRoZW1lcy5wdXNoKGdlKSxFcihSLndicmVscywtMSwidGhlbWUvdGhlbWUxLnhtbCIsS2EuVEhFTUUpLGpuKG9lLGdlPSJ4bC9zdHlsZXMuIitrLGZ1bmN0aW9uIFZTKFMsUixrKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/RGs6WnYpKFMsayl9KFMs''@;'; put 'put ''Z2UsUikpLFEuc3R5bGVzLnB1c2goZ2UpLEVyKFIud2JyZWxzLC0xLCJzdHlsZXMuIitrLEthLlNUWSksUy52YmFyYXcmJkcmJihqbihvZSxnZT0ieGwvdmJhUHJvamVjdC5iaW4iLFMudmJhcmF3KSxRLnZiYS5wdXNoKGdlKSxFcihSLndicmVscywtMSwidmJhUHJvamVjdC5iaW4iLEthLlZC''@;'; put 'put ''QSkpLFMubW9kZWwmJlMubW9kZWwubGVuZ3RoJiYoam4ob2UsInhsL21vZGVsL2l0ZW0uZGF0YSIsUy5tb2RlbCksRXIoUi53YnJlbHMsLTEsIm1vZGVsL2l0ZW0uZGF0YSIsS2EuUFdSUEQpKSxTLmNvbm4mJihqbihvZSwieGwvY29ubmVjdGlvbnMueG1sIixTLmNvbm4pLFEuY29ubnMucHVz''@;'; put 'put ''aCgiL3hsL2Nvbm5lY3Rpb25zLnhtbCIpLEVyKFIud2JyZWxzLC0xLCJjb25uZWN0aW9ucy54bWwiLEthLkNPTk4pKSxTLkN1c3RvbVhNTCYmUy5DdXN0b21YTUwuZm9yRWFjaChmdW5jdGlvbihUbixycil7aWYoam4ob2UsImN1c3RvbVhtbC9pdGVtIisocnIrMSkrIi54bWwiLFRuLmRhdGEp''@;'; put 'put ''LEVyKFIud2JyZWxzLC0xLCIuLi9jdXN0b21YbWwvaXRlbSIrKHJyKzEpKyIueG1sIixLYS5DWE1MKSxUbi5wcm9wcyl7am4ob2UsImN1c3RvbVhtbC9pdGVtUHJvcHMiKyhycisxKSsiLnhtbCIsVG4ucHJvcHMpLFEuY3VzdG9teG1scHJvcHMucHVzaCgiL2N1c3RvbVhtbC9pdGVtUHJvcHMi''@;'; put 'put ''KyhycisxKSsiLnhtbCIpO3ZhciBTbj17fTtFcihTbiwtMSwiaXRlbVByb3BzIisocnIrMSkrIi54bWwiLEthLkNYTUxQKSxqbihvZSwiY3VzdG9tWG1sL19yZWxzL2l0ZW0iKyhycisxKSsiLnhtbC5yZWxzIixraShTbikpfX0pLGpuKG9lLCJbQ29udGVudF9UeXBlc10ueG1sIixmdW5jdGlv''@;'; put 'put ''biBCdyhTLFIsayl7dmFyIFEsRz1bXTtrfHwoR1tHLmxlbmd0aF09SWksR1tHLmxlbmd0aF09bXYsRz1HLmNvbmNhdChWdykpO3ZhciBvZT1mdW5jdGlvbih5ZSl7U1t5ZV0mJlNbeWVdLmxlbmd0aD4wJiYoR1tHLmxlbmd0aF09UHIoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT0o''@;'; put 'put ''UT1TW3llXVswXSlbMF0/IiI6Ii8iKStRLENvbnRlbnRUeXBlOmZ2W3llXVtSLmJvb2tUeXBlfHwieGxzeCJdfSkpfSxnZT1mdW5jdGlvbih5ZSl7KFNbeWVdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihQZSl7R1tHLmxlbmd0aF09UHIoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1Q''@;'; put 'put ''ZVswXT8iIjoiLyIpK1BlLENvbnRlbnRUeXBlOmZ2W3llXVtSLmJvb2tUeXBlfHwieGxzeCJdfSl9KX0scGU9ZnVuY3Rpb24oeWUpeyhTW3llXXx8W10pLmZvckVhY2goZnVuY3Rpb24oUGUpe0dbRy5sZW5ndGhdPVByKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09UGVbMF0/IiI6''@;'; put 'put ''Ii8iKStQZSxDb250ZW50VHlwZTpwdlt5ZV1bMF19KX0pfTtyZXR1cm4gb2UoIndvcmtib29rcyIpLGdlKCJzaGVldHMiKSxnZSgiY2hhcnRzIikscGUoInRoZW1lcyIpLFsic3RycyIsInN0eWxlcyIsImNvbm5zIl0uZm9yRWFjaChvZSksWyJjb3JlcHJvcHMiLCJleHRwcm9wcyIsImN1c3Rw''@;'; put 'put ''cm9wcyJdLmZvckVhY2gocGUpLHBlKCJ2YmEiKSxwZSgiY29tbWVudHMiKSxwZSgiZHJhd2luZ3MiKSxnZSgidGFibGVzIiksZ2UoInBpdm90cyIpLGdlKCJwaXZvdGNhY2hlcyIpLGdlKCJwaXZvdHJlY29yZHMiKSxwZSgiZGF0YW1vZGVscyIpLHBlKCJjdHJscHJvcHMiKSxwZSgiY2hhcnRv''@;'; put 'put ''YmpzIikscGUoImNoYXJ0c3R5bGVzIikscGUoImNoYXJ0Y29sb3JzIikscGUoImNoYXJ0ZXhzIiksZ2UoImxpbmtzIikscGUoImN1c3RvbXhtbHByb3BzIiksIWsmJkcubGVuZ3RoPjImJihHW0cubGVuZ3RoXT0iPC9UeXBlcz4iLEdbMV09R1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksRy5qb2lu''@;'; put 'put ''KCIiKX0oUSxSKSksam4ob2UsIl9yZWxzLy5yZWxzIixraShSLnJlbHMpKSxqbihvZSwieGwvX3JlbHMvd29ya2Jvb2suIitrKyIucmVscyIsa2koUi53YnJlbHMpKSxkZWxldGUgUi5Gb250cyxkZWxldGUgUi5GaWxscyxkZWxldGUgUi5Cb3JkZXJzLGRlbGV0ZSBSLnJldnNzZixkZWxldGUg''@;'; put 'put ''Ui5zc2Ysb2V9ZnVuY3Rpb24gUVMoUyxSKXt2YXIgaz0iIjtzd2l0Y2goKFJ8fHt9KS50eXBlfHwiYmFzZTY0Iil7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybltTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN11dO2Nhc2UiYmFzZTY0IjprPV9lLmRlY29kZShT''@;'; put 'put ''LnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFyeSI6az1TO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyhSJiZSLnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW2suY2hhckNvZGVBdCgwKSxrLmNoYXJDb2RlQXQoMSksay5jaGFyQ29kZUF0''@;'; put 'put ''KDIpLGsuY2hhckNvZGVBdCgzKSxrLmNoYXJDb2RlQXQoNCksay5jaGFyQ29kZUF0KDUpLGsuY2hhckNvZGVBdCg2KSxrLmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIGVNKFMsUil7dmFyIGs9MDtlOmZvcig7azxTLmxlbmd0aDspc3dpdGNoKFMuY2hhckNvZGVBdChrKSl7Y2FzZSAxMDpjYXNl''@;'; put 'put ''IDEzOmNhc2UgMzI6KytrO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIEk4KFMuc2xpY2UoayksUik7ZGVmYXVsdDpicmVhayBlfXJldHVybiBqMy50b193b3JrYm9vayhTLFIpfWZ1bmN0aW9uIEhiKFMsUixrLEcpe3JldHVybiBHPyhrLnR5cGU9InN0cmluZyIsajMudG9fd29ya2Jvb2soUyxrKSk6''@;'; put 'put ''ajMudG9fd29ya2Jvb2soUixrKX1mdW5jdGlvbiAkNShTLFIpe3ZhciBrPUEuZ2V0bG9jYWxlKCk7YWUoQSksQS5zZXRsb2NhbGUoayksVygpO3ZhciBHPVJ8fHt9O2lmKHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJlMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gJDUobmV3IFVpbnQ4''@;'; put 'put ''QXJyYXkoUyksKChHPXF0KEcpKS50eXBlPSJhcnJheSIsRykpO3ZhciBvZSxRPVMsZ2U9ITE7aWYoSWYoRGY9Ry5QUEl8fFlzKSxHLmNlbGxTdHlsZXMmJihHLmNlbGxORj0hMCxHLnNoZWV0U3R1YnM9ITApLGM4PXt9LEcuZGF0ZU5GJiYoYzguZGF0ZU5GPUcuZGF0ZU5GKSxHLnR5cGV8fChH''@;'; put 'put ''LnR5cGU9VGUmJkJ1ZmZlci5pc0J1ZmZlcihTKT8iYnVmZmVyIjoiYmFzZTY0IiksImZpbGUiPT1HLnR5cGUmJihHLnR5cGU9VGU/ImJ1ZmZlciI6ImJpbmFyeSIsUT1mdW5jdGlvbiBGZShTKXtpZih0eXBlb2YgWGU8InUiKXJldHVybiBYZS5yZWFkRmlsZVN5bmMoUyk7aWYodHlwZW9mICQ8''@;'; put 'put ''InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBGb2xkZXI8InUiKXRyeXt2YXIgUj1GaWxlKFMpO1Iub3BlbigiciIpLFIuZW5jb2Rpbmc9ImJpbmFyeSI7dmFyIGs9Ui5yZWFkKCk7cmV0dXJuIFIuY2xvc2UoKSxrfWNhdGNoKEcpe2lmKCFHLm1lc3NhZ2V8fCFHLm1lc3NhZ2UubWF0Y2go''@;'; put 'put ''L29uc3RydWN0LykpdGhyb3cgR310aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBhY2Nlc3MgZmlsZSAiK1MpfShTKSksInN0cmluZyI9PUcudHlwZSYmKGdlPSEwLEcudHlwZT0iYmluYXJ5IixHLmNvZGVwYWdlPTY1MDAxLFE9ZnVuY3Rpb24gamMoUyl7cmV0dXJuIFMubWF0Y2goL1teXHgwMC1c''@;'; put 'put ''eDdGXS8pP05zKFMpOlN9KFMpKSwiYXJyYXkiPT1HLnR5cGUmJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmUyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSIpe3ZhciBwZT1uZXcgQXJyYXlCdWZmZXIoMykseWU9bmV3IFVpbnQ4QXJyYXkocGUpO2lmKHllLmZv''@;'; put 'put ''bz0iYmFyIiwheWUuZm9vKXJldHVybihHPXF0KEcpKS50eXBlPSJhcnJheSIsJDUoSChRKSxHKX1zd2l0Y2goKG9lPVFTKFEsRykpWzBdKXtjYXNlIDIwODppZigyMDc9PT1vZVsxXSYmMTc9PT1vZVsyXSYmMjI0PT09b2VbM10mJjE2MT09PW9lWzRdJiYxNzc9PT1vZVs1XSYmMjY9PT1vZVs2''@;'; put 'put ''XSYmMjI1PT09b2VbN10pcmV0dXJuIGZ1bmN0aW9uIGd0KFMsUil7cmV0dXJuIHZlLmZpbmQoUywiRW5jcnlwdGVkUGFja2FnZSIpP0ZiKFMsUik6JFMoUyxSKX0odmUucmVhZChRLEcpLEcpO2JyZWFrO2Nhc2UgOTppZihvZVsxXTw9OClyZXR1cm4gJFMoUSxHKTticmVhaztjYXNlIDYwOnJl''@;'; put 'put ''dHVybiBJOChRLEcpO2Nhc2UgNzM6aWYoNzM9PT1vZVsxXSYmNDI9PT1vZVsyXSYmMD09PW9lWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJbWFnZSBGaWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1vZVsxXSlyZXR1cm4gZnVuY3Rpb24gYWsoUyxSKXt2YXIgaz1SfHx7fSxH''@;'; put 'put ''PSEhay5XVEY7ay5XVEY9ITA7dHJ5e3ZhciBRPWNDLnRvX3dvcmtib29rKFMsayk7cmV0dXJuIGsuV1RGPUcsUX1jYXRjaChvZSl7aWYoay5XVEY9Rywhb2UubWVzc2FnZS5tYXRjaCgvU1lMSyBiYWQgcmVjb3JkIElELykmJkcpdGhyb3cgb2U7cmV0dXJuIGozLnRvX3dvcmtib29rKFMsUil9''@;'; put 'put ''fShRLEcpO2JyZWFrO2Nhc2UgODQ6aWYoNjU9PT1vZVsxXSYmNjY9PT1vZVsyXSYmNzY9PT1vZVszXSlyZXR1cm4gRHYudG9fd29ya2Jvb2soUSxHKTticmVhaztjYXNlIDgwOnJldHVybiA3NT09PW9lWzFdJiZvZVsyXTw5JiZvZVszXTw5P2Z1bmN0aW9uIFZJKFMsUil7dmFyIEc9UyxRPVJ8''@;'; put 'put ''fHt9O3JldHVybiBRLnR5cGV8fChRLnR5cGU9VGUmJkJ1ZmZlci5pc0J1ZmZlcihTKT8iYnVmZmVyIjoiYmFzZTY0IikscnAoY24oRyxRKSxRKX0oUSxHKTpIYihTLFEsRyxnZSk7Y2FzZSAyMzk6cmV0dXJuIDYwPT09b2VbM10/STgoUSxHKTpIYihTLFEsRyxnZSk7Y2FzZSAyNTU6aWYoMjU0''@;'; put 'put ''PT09b2VbMV0pcmV0dXJuIGZ1bmN0aW9uIHRVKFMsUil7dmFyIGs9UztyZXR1cm4iYmFzZTY0Ij09Ui50eXBlJiYoaz1fZS5kZWNvZGUoaykpLGs9Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxrLnNsaWNlKDIpLCJzdHIiKSxSLnR5cGU9ImJpbmFyeSIsZU0oayxSKX0oUSxHKTticmVhaztj''@;'; put 'put ''YXNlIDA6aWYoMD09PW9lWzFdJiZvZVsyXT49MiYmMD09PW9lWzNdKXJldHVybiBJdi50b193b3JrYm9vayhRLEcpO2JyZWFrO2Nhc2UgMzpjYXNlIDEzMTpjYXNlIDEzOTpjYXNlIDE0MDpyZXR1cm4gQjMudG9fd29ya2Jvb2soUSxHKTtjYXNlIDEyMzppZig5Mj09PW9lWzFdJiYxMTQ9PT1v''@;'; put 'put ''ZVsyXSYmMTE2PT09b2VbM10pcmV0dXJuIFZ2LnRvX3dvcmtib29rKFEsRyk7YnJlYWs7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIGZ1bmN0aW9uIGVVKFMsUil7dmFyIGs9IiIsRz1RUyhTLFIpO3N3aXRjaChSLnR5cGUpe2Nhc2UiYmFzZTY0IjprPV9lLmRlY29kZShTKTticmVh''@;'; put 'put ''aztjYXNlImJpbmFyeSI6az1TO2JyZWFrO2Nhc2UiYnVmZmVyIjprPVMudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOms9dXQoUyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUi50eXBlKX1yZXR1cm4gMjM5PT1HWzBdJiYx''@;'; put 'put ''ODc9PUdbMV0mJjE5MT09R1syXSYmKGs9Z28oaykpLGVNKGssUil9KFEsRyl9cmV0dXJuIEIzLnZlcnNpb25zLmluZGV4T2Yob2VbMF0pPi0xJiZvZVsyXTw9MTImJm9lWzNdPD0zMT9CMy50b193b3JrYm9vayhRLEcpOkhiKFMsUSxHLGdlKX1mdW5jdGlvbiBrYyhTLFIpe3ZhciBrPVJ8fHt9''@;'; put 'put ''O3JldHVybiBrLnR5cGU9ImZpbGUiLCQ1KFMsayl9ZnVuY3Rpb24gSzUoUyxSKXtzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6Y2FzZSJiaW5hcnkiOmJyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpSLnR5cGU9IiI7YnJlYWs7Y2FzZSJmaWxlIjpyZXR1cm4gRGUoUi5maWxlLHZl''@;'; put 'put ''LndyaXRlKFMse3R5cGU6VGU/ImJ1ZmZlciI6IiJ9KSk7Y2FzZSJzdHJpbmciOnRocm93IG5ldyBFcnJvcigiJ3N0cmluZycgb3V0cHV0IHR5cGUgaW52YWxpZCBmb3IgJyIrUi5ib29rVHlwZSsiJyBmaWxlcyIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAi''@;'; put 'put ''K1IudHlwZSl9cmV0dXJuIHZlLndyaXRlKFMsUil9ZnVuY3Rpb24gbjEoUyxSLGspe2t8fChrPSIiKTt2YXIgRz1rK1M7c3dpdGNoKFIudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBfZS5lbmNvZGUoTnMoRykpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gTnMoRyk7Y2FzZSJzdHJpbmciOnJldHVy''@;'; put 'put ''biBTO2Nhc2UiZmlsZSI6cmV0dXJuIERlKFIuZmlsZSxHLCJ1dGY4Iik7Y2FzZSJidWZmZXIiOnJldHVybiBUZT9TZShHLCJ1dGY4Iik6bjEoRyx7dHlwZToiYmluYXJ5In0pLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oUSl7cmV0dXJuIFEuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfWZ1bmN0aW9uIHRNKFMsUil7c3dpdGNoKFIudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6Zm9yKHZhciBrPSIiLEc9MDtHPFMubGVuZ3RoOysrRylrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFNbR10pO3Jl''@;'; put 'put ''dHVybiJiYXNlNjQiPT1SLnR5cGU/X2UuZW5jb2RlKGspOiJzdHJpbmciPT1SLnR5cGU/Z28oayk6aztjYXNlImZpbGUiOnJldHVybiBEZShSLmZpbGUsUyk7Y2FzZSJidWZmZXIiOnJldHVybiBTO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9''@;'; put 'put ''fWZ1bmN0aW9uIE44KFMsUil7VygpLGZ1bmN0aW9uIG9JKFMpe2lmKCFTfHwhUy5TaGVldE5hbWVzfHwhUy5TaGVldHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFdvcmtib29rIik7aWYoIVMuU2hlZXROYW1lcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJXb3JrYm9vayBpcyBlbXB0eSIp''@;'; put 'put ''OyFmdW5jdGlvbiBhSShTLFIsayl7Uy5mb3JFYWNoKGZ1bmN0aW9uKEcsUSl7X2IoRyk7Zm9yKHZhciBvZT0wO29lPFE7KytvZSlpZihHPT1TW29lXSl0aHJvdyBuZXcgRXJyb3IoIkR1cGxpY2F0ZSBTaGVldCBOYW1lOiAiK0cpO2lmKGspe3ZhciBnZT1SJiZSW1FdJiZSW1FdLkNvZGVOYW1l''@;'; put 'put ''fHxHO2lmKDk1PT1nZS5jaGFyQ29kZUF0KDApJiZnZS5sZW5ndGg+MjIpdGhyb3cgbmV3IEVycm9yKCJCYWQgQ29kZSBOYW1lOiBXb3Jrc2hlZXQiK2dlKX19KX0oUy5TaGVldE5hbWVzLFMuV29ya2Jvb2smJlMuV29ya2Jvb2suU2hlZXRzfHxbXSwhIVMudmJhcmF3KTtmb3IodmFyIGs9MDtr''@;'; put 'put ''PFMuU2hlZXROYW1lcy5sZW5ndGg7KytrKW1EKFMuU2hlZXRzW1MuU2hlZXROYW1lc1trXV0sMCxrKX0oUyk7dmFyIGs9Unx8e307aWYoay5jZWxsU3R5bGVzJiYoay5jZWxsTkY9ITAsay5zaGVldFN0dWJzPSEwKSwiYXJyYXkiPT1rLnR5cGUpe2sudHlwZT0iYmluYXJ5Ijt2YXIgRz1OOChT''@;'; put 'put ''LGspO3JldHVybiBrLnR5cGU9ImFycmF5Iix4KEcpfXN3aXRjaChrLmJvb2tUeXBlfHwieGxzYiIpe2Nhc2UieG1sIjpjYXNlInhsbWwiOnJldHVybiBuMShTSShTLGspLGspO2Nhc2Uic2xrIjpjYXNlInN5bGsiOnJldHVybiBuMShHeihTLGspLGspO2Nhc2UiaHRtIjpjYXNlImh0bWwiOnJl''@;'; put 'put ''dHVybiBuMShXeihTLGspLGspO2Nhc2UidHh0IjpyZXR1cm4gZnVuY3Rpb24gVmIoUyxSKXtzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIF9lLmVuY29kZShTKTtjYXNlImJpbmFyeSI6Y2FzZSJzdHJpbmciOnJldHVybiBTO2Nhc2UiZmlsZSI6cmV0dXJuIERlKFIuZmlsZSxT''@;'; put 'put ''LCJiaW5hcnkiKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFRlP1NlKFMsImJpbmFyeSIpOlMuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gay5jaGFyQ29kZUF0KDApfSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9KCR6KFMsayksayk7Y2FzZSJj''@;'; put 'put ''c3YiOnJldHVybiBuMShZeihTLGspLGssIlx1ZmVmZiIpO2Nhc2UiZGlmIjpyZXR1cm4gbjEodmQoUyxrKSxrKTtjYXNlImRiZiI6cmV0dXJuIHRNKGVyZShTLGspLGspO2Nhc2UicHJuIjpyZXR1cm4gbjEoTEkoUyxrKSxrKTtjYXNlInJ0ZiI6cmV0dXJuIG4xKE9JKFMsayksayk7Y2FzZSJl''@;'; put 'put ''dGgiOnJldHVybiBuMShQSShTLGspLGspO2Nhc2UiZm9kcyI6cmV0dXJuIG4xKFJJKFMsayksayk7Y2FzZSJiaWZmMiI6ay5iaWZmfHwoay5iaWZmPTIpO2Nhc2UiYmlmZjMiOmsuYmlmZnx8KGsuYmlmZj0zKTtjYXNlImJpZmY0IjpyZXR1cm4gay5iaWZmfHwoay5iaWZmPTQpLHRNKFRJKFMs''@;'; put 'put ''ayksayk7Y2FzZSJiaWZmNSI6ay5iaWZmfHwoay5iaWZmPTUpO2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpjYXNlInhscyI6cmV0dXJuIGsuYmlmZnx8KGsuYmlmZj04KSxmdW5jdGlvbiBOYihTLFIpe3ZhciBrPVJ8fHt9O3JldHVybiBLNShmdW5jdGlvbiB6bmUoUyxSKXt2YXIgaz1SfHx7fSxH''@;'; put 'put ''PXZlLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSksUT0iL1dvcmtib29rIjtzd2l0Y2goay5ib29rVHlwZXx8InhscyIpe2Nhc2UieGxzIjprLmJvb2tUeXBlPSJiaWZmOCI7Y2FzZSJ4bGEiOmsuYm9va1R5cGV8fChrLmJvb2tUeXBlPSJ4bGEiKTtjYXNlImJpZmY4IjpRPSIvV29ya2Jvb2si''@;'; put 'put ''LGsuYmlmZj04O2JyZWFrO2Nhc2UiYmlmZjUiOlE9Ii9Cb29rIixrLmJpZmY9NTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIray5ib29rVHlwZSsiIGZvciBYTFMgQ0ZCIil9cmV0dXJuIHZlLnV0aWxzLmNmYl9hZGQoRyxRLFRJKFMsaykpLDg9PWsuYmlm''@;'; put 'put ''ZiYmKFMuUHJvcHN8fFMuQ3VzdHByb3BzKSYmZnVuY3Rpb24gam5lKFMsUil7dmFyIGdlLGs9W10sRz1bXSxRPVtdLG9lPTA7aWYoUy5Qcm9wcylmb3IoZ2U9T2UoUy5Qcm9wcyksb2U9MDtvZTxnZS5sZW5ndGg7KytvZSkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGg1''@;'; put 'put ''LGdlW29lXSk/azpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmYsZ2Vbb2VdKT9HOlEpLnB1c2goW2dlW29lXSxTLlByb3BzW2dlW29lXV1dKTtpZihTLkN1c3Rwcm9wcylmb3IoZ2U9T2UoUy5DdXN0cHJvcHMpLG9lPTA7b2U8Z2UubGVuZ3RoOysrb2UpT2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMuUHJvcHN8fHt9LGdlW29lXSl8fChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaDUsZ2Vbb2VdKT9rOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2ZixnZVtvZV0pP0c6USkucHVzaChbZ2Vbb2Vd''@;'; put 'put ''LFMuQ3VzdHByb3BzW2dlW29lXV1dKTt2YXIgcGU9W107Zm9yKG9lPTA7b2U8US5sZW5ndGg7KytvZSlWNi5pbmRleE9mKFFbb2VdWzBdKT4tMXx8bnVsbCE9UVtvZV1bMV0mJnBlLnB1c2goUVtvZV0pO0cubGVuZ3RoJiZ2ZS51dGlscy5jZmJfYWRkKFIsIi9ceDA1U3VtbWFyeUluZm9ybWF0''@;'; put 'put ''aW9uIix6aShHLFRiLlNJLHZmLGQ1KSksKGsubGVuZ3RofHxwZS5sZW5ndGgpJiZ2ZS51dGlscy5jZmJfYWRkKFIsIi9ceDA1RG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iLHppKGssVGIuRFNJLGg1LG00LHBlLmxlbmd0aD9wZTpudWxsLFRiLlVESSkpfShTLEcpLDg9PWsuYmlmZiYmUy52''@;'; put 'put ''YmFyYXcmJmZ1bmN0aW9uIFdrKFMsUil7Ui5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihrLEcpe2lmKDAhPUcpe3ZhciBRPWsucmVwbGFjZSgvW15cL10qW1wvXS8sIi9fVkJBX1BST0pFQ1RfQ1VSLyIpOyIvIiE9PVEuc2xpY2UoLTEpJiZ2ZS51dGlscy5jZmJfYWRkKFMsUSxSLkZpbGVJ''@;'; put 'put ''bmRleFtHXS5jb250ZW50KX19KX0oRyx2ZS5yZWFkKFMudmJhcmF3LHt0eXBlOiJzdHJpbmciPT10eXBlb2YgUy52YmFyYXc/ImJpbmFyeSI6ImJ1ZmZlciJ9KSksR30oUyxrKSxrKX0oUyxrKTtjYXNlInhsc3giOmNhc2UieGxzbSI6Y2FzZSJ4bGFtIjpjYXNlInhsc2IiOmNhc2Uib2RzIjpy''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gcTUoUyxSKXt2YXIgaz1SfHx7fSxHPUg4KFMsayksUT17fTtpZihrLmNvbXByZXNzaW9uJiYoUS5jb21wcmVzc2lvbj0iREVGTEFURSIpLGsucGFzc3dvcmQpUS50eXBlPVRlPyJub2RlYnVmZmVyIjoic3RyaW5nIjtlbHNlIHN3aXRjaChrLnR5cGUpe2Nhc2UiYmFz''@;'; put 'put ''ZTY0IjpRLnR5cGU9ImJhc2U2NCI7YnJlYWs7Y2FzZSJiaW5hcnkiOlEudHlwZT0ic3RyaW5nIjticmVhaztjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnIitrLmJvb2tUeXBlKyInIGZpbGVzIik7Y2FzZSJidWZmZXIiOmNh''@;'; put 'put ''c2UiZmlsZSI6US50eXBlPVRlPyJub2RlYnVmZmVyIjoic3RyaW5nIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitrLnR5cGUpfXZhciBvZT1HLkZ1bGxQYXRocz92ZS53cml0ZShHLHtmaWxlVHlwZToiemlwIix0eXBlOntub2RlYnVmZmVyOiJi''@;'; put 'put ''dWZmZXIiLHN0cmluZzoiYmluYXJ5In1bUS50eXBlXXx8US50eXBlfSk6Ry5nZW5lcmF0ZShRKTtyZXR1cm4gay5wYXNzd29yZCYmdHlwZW9mIFh6PCJ1Ij9LNShYeihvZSxrLnBhc3N3b3JkKSxrKToiZmlsZSI9PT1rLnR5cGU/RGUoay5maWxlLG9lKToic3RyaW5nIj09ay50eXBlP2dvKG9l''@;'; put 'put ''KTpvZX0oUyxrKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGJvb2tUeXBlIHwiK2suYm9va1R5cGUrInwiKX19ZnVuY3Rpb24gbk0oUyl7aWYoIVMuYm9va1R5cGUpe3ZhciBrPVMuZmlsZS5zbGljZShTLmZpbGUubGFzdEluZGV4T2YoIi4iKSkudG9Mb3dlckNhc2Uo''@;'; put 'put ''KTtrLm1hdGNoKC9eXC5bYS16XSskLykmJihTLmJvb2tUeXBlPWsuc2xpY2UoMSkpLFMuYm9va1R5cGU9e3hsczoiYmlmZjgiLGh0bToiaHRtbCIsc2xrOiJzeWxrIixzb2NpYWxjYWxjOiJldGgiLFNoMzN0SlM6IldURiJ9W1MuYm9va1R5cGVdfHxTLmJvb2tUeXBlfX1mdW5jdGlvbiBWOChT''@;'; put 'put ''LFIsayl7dmFyIEc9a3x8e307cmV0dXJuIEcudHlwZT0iZmlsZSIsRy5maWxlPVIsbk0oRyksTjgoUyxHKX1mdW5jdGlvbiBpTShTLFIsayxHLFEsb2UsZ2UscGUpe3ZhciB5ZT1qaShrKSxQZT1wZS5kZWZ2YWwsTmU9cGUucmF3LFllPSEwLGV0PTE9PT1RP1tdOnt9O2lmKDEhPT1RKWlmKE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV0LCJfX3Jvd051bV9fIix7dmFsdWU6ayxlbnVtZXJhYmxlOiExfSl9Y2F0Y2h7ZXQuX19yb3dOdW1fXz1rfWVsc2UgZXQuX19yb3dOdW1fXz1rO2lmKCFnZXx8U1trXSlmb3IodmFyIGN0PVIucy5jO2N0PD1S''@;'; put 'put ''LmUuYzsrK2N0KXt2YXIgRXQ9Z2U/U1trXVtjdF06U1tHW2N0XSt5ZV07aWYodm9pZCAwIT09RXQmJnZvaWQgMCE9PUV0LnQpe3ZhciBhdD1FdC52O3N3aXRjaChFdC50KXtjYXNlInoiOmlmKG51bGw9PWF0KWJyZWFrO2NvbnRpbnVlO2Nhc2UiZSI6YXQ9MD09YXQ/bnVsbDp2b2lkIDA7YnJl''@;'; put 'put ''YWs7Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5cGUgIitFdC50KX1pZihudWxsIT1vZVtjdF0pe2lmKG51bGw9PWF0KWlmKCJlIj09RXQudCYmbnVsbD09PWF0KWV0W29lW2N0XV09bnVsbDtlbHNl''@;'; put 'put ''IGlmKHZvaWQgMCE9PVBlKWV0W29lW2N0XV09UGU7ZWxzZXtpZighTmV8fG51bGwhPT1hdCljb250aW51ZTtldFtvZVtjdF1dPW51bGx9ZWxzZSBldFtvZVtjdF1dPU5lP2F0Ol9sKEV0LGF0LHBlKTtudWxsIT1hdCYmKFllPSExKX19ZWxzZXtpZih2b2lkIDA9PT1QZSljb250aW51ZTtudWxs''@;'; put 'put ''IT1vZVtjdF0mJihldFtvZVtjdF1dPVBlKX19cmV0dXJue3JvdzpldCxpc2VtcHR5OlllfX1mdW5jdGlvbiBLNChTLFIpe2lmKG51bGw9PVN8fG51bGw9PVNbIiFyZWYiXSlyZXR1cm5bXTt2YXIgaz17dDoibiIsdjowfSxHPTAsUT0xLG9lPVtdLGdlPTAscGU9IiIseWU9SlNPTi5wYXJzZSgn''@;'; put 'put ''eyJzIjp7InIiOjAsImMiOjB9LCJlIjp7InIiOjAsImMiOjB9fScpLFBlPVJ8fHt9LE5lPW51bGwhPVBlLnJhbmdlP1BlLnJhbmdlOlNbIiFyZWYiXTtzd2l0Y2goMT09PVBlLmhlYWRlcj9HPTE6IkEiPT09UGUuaGVhZGVyP0c9MjpBcnJheS5pc0FycmF5KFBlLmhlYWRlcik/Rz0zOm51bGw9''@;'; put 'put ''PVBlLmhlYWRlciYmKEc9MCksdHlwZW9mIE5lKXtjYXNlInN0cmluZyI6eWU9b28oTmUpO2JyZWFrO2Nhc2UibnVtYmVyIjooeWU9b28oU1siIXJlZiJdKSkucy5yPU5lO2JyZWFrO2RlZmF1bHQ6eWU9TmV9Rz4wJiYoUT0wKTt2YXIgWWU9amkoeWUucy5yKSxldD1bXSxjdD1bXSxFdD0wLGF0''@;'; put 'put ''PTAsYnQ9QXJyYXkuaXNBcnJheShTKSxqdD15ZS5zLnIsa3Q9MCxPdD0wO2ZvcihidCYmIVNbanRdJiYoU1tqdF09W10pLGt0PXllLnMuYztrdDw9eWUuZS5jOysra3Qpc3dpdGNoKGV0W2t0XT1UYShrdCksaz1idD9TW2p0XVtrdF06U1tldFtrdF0rWWVdLEcpe2Nhc2UgMTpvZVtrdF09a3Qt''@;'; put 'put ''eWUucy5jO2JyZWFrO2Nhc2UgMjpvZVtrdF09ZXRba3RdO2JyZWFrO2Nhc2UgMzpvZVtrdF09UGUuaGVhZGVyW2t0LXllLnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09ayYmKGs9SlNPTi5wYXJzZSgneyJ3IjogIl9fRU1QVFkiLCAidCI6ICJzIn0nKSkscGU9Z2U9X2woayxudWxsLFBl''@;'; put 'put ''KSxhdD0wLE90PTA7T3Q8b2UubGVuZ3RoOysrT3Qpb2VbT3RdPT1wZSYmKHBlPWdlKyJfIisgKythdCk7b2Vba3RdPXBlfWZvcihqdD15ZS5zLnIrUTtqdDw9eWUuZS5yOysranQpe3ZhciBLdD1pTShTLHllLGp0LGV0LEcsb2UsYnQsUGUpOyghMT09PUt0LmlzZW1wdHl8fCgxPT09Rz8hMSE9''@;'; put 'put ''PVBlLmJsYW5rcm93czpQZS5ibGFua3Jvd3MpKSYmKGN0W0V0KytdPUt0LnJvdyl9cmV0dXJuIGN0Lmxlbmd0aD1FdCxjdH12YXIgXzI9LyIvZztmdW5jdGlvbiBCSShTLFIsayxHLFEsb2UsZ2UscGUpe2Zvcih2YXIgeWU9ITAsUGU9W10sTmU9IiIsWWU9amkoayksZXQ9Ui5zLmM7ZXQ8PVIu''@;'; put 'put ''ZS5jOysrZXQpaWYoR1tldF0pe3ZhciBjdD1wZS5kZW5zZT8oU1trXXx8W10pW2V0XTpTW0dbZXRdK1llXTtpZihudWxsPT1jdClOZT0iIjtlbHNlIGlmKG51bGwhPWN0LnYpe3llPSExLE5lPSIiK19sKGN0LG51bGwscGUpO2Zvcih2YXIgRXQ9MCxhdD0wO0V0IT09TmUubGVuZ3RoOysrRXQp''@;'; put 'put ''aWYoKGF0PU5lLmNoYXJDb2RlQXQoRXQpKT09PVF8fGF0PT09b2V8fDM0PT09YXQpe05lPSciJytOZS5yZXBsYWNlKF8yLCciIicpKyciJzticmVha30iSUQiPT1OZSYmKE5lPSciSUQiJyl9ZWxzZSBudWxsPT1jdC5mfHxjdC5GP05lPSIiOih5ZT0hMSwoTmU9Ij0iK2N0LmYpLmluZGV4T2Yo''@;'; put 'put ''IiwiKT49MCYmKE5lPSciJytOZS5yZXBsYWNlKF8yLCciIicpKyciJykpO1BlLnB1c2goTmUpfXJldHVybiExPT09cGUuYmxhbmtyb3dzJiZ5ZT9udWxsOlBlLmpvaW4oZ2UpfWZ1bmN0aW9uIEMwKFMsUil7dmFyIGs9W10sRz1SPz97fTtpZihudWxsPT1TfHxudWxsPT1TWyIhcmVmIl0pcmV0''@;'; put 'put ''dXJuIiI7dmFyIFE9b28oU1siIXJlZiJdKSxvZT12b2lkIDAhPT1HLkZTP0cuRlM6IiwiLGdlPW9lLmNoYXJDb2RlQXQoMCkscGU9dm9pZCAwIT09Ry5SUz9HLlJTOiJcbiIseWU9cGUuY2hhckNvZGVBdCgwKSxQZT1uZXcgUmVnRXhwKCgifCI9PW9lPyJcXHwiOm9lKSsiKyQiKSxOZT0iIixZ''@;'; put 'put ''ZT1bXTtHLmRlbnNlPUFycmF5LmlzQXJyYXkoUyk7Zm9yKHZhciBldD1HLnNraXBIaWRkZW4mJlNbIiFjb2xzIl18fFtdLGN0PUcuc2tpcEhpZGRlbiYmU1siIXJvd3MiXXx8W10sRXQ9US5zLmM7RXQ8PVEuZS5jOysrRXQpKGV0W0V0XXx8e30pLmhpZGRlbnx8KFllW0V0XT1UYShFdCkpO2Zv''@;'; put 'put ''cih2YXIgYXQ9US5zLnI7YXQ8PVEuZS5yOysrYXQpKGN0W2F0XXx8e30pLmhpZGRlbnx8bnVsbCE9KE5lPUJJKFMsUSxhdCxZZSxnZSx5ZSxvZSxHKSkmJihHLnN0cmlwJiYoTmU9TmUucmVwbGFjZShQZSwiIikpLGsucHVzaChOZStwZSkpO3JldHVybiBkZWxldGUgRy5kZW5zZSxrLmpvaW4o''@;'; put 'put ''IiIpfWZ1bmN0aW9uIGpJKFMsUil7Unx8KFI9e30pLFIuRlM9Ilx0IixSLlJTPSJcbiI7dmFyIGs9QzAoUyxSKTtyZXR1cm4gdHlwZW9mIGNwdGFibGU+InUifHwic3RyaW5nIj09Ui50eXBlP2s6Ilx4ZmZceGZlIitjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLGssInN0ciIpfWZ1bmN0aW9u''@;'; put 'put ''IGFNKFMpe3ZhciBrLFI9IiIsRz0iIjtpZihudWxsPT1TfHxudWxsPT1TWyIhcmVmIl0pcmV0dXJuW107dmFyIHBlLFE9b28oU1siIXJlZiJdKSxvZT0iIixnZT1bXSx5ZT1bXSxQZT1BcnJheS5pc0FycmF5KFMpO2ZvcihwZT1RLnMuYztwZTw9US5lLmM7KytwZSlnZVtwZV09VGEocGUpO2Zv''@;'; put 'put ''cih2YXIgTmU9US5zLnI7TmU8PVEuZS5yOysrTmUpZm9yKG9lPWppKE5lKSxwZT1RLnMuYztwZTw9US5lLmM7KytwZSlpZihSPWdlW3BlXStvZSxHPSIiLHZvaWQgMCE9PShrPVBlPyhTW05lXXx8W10pW3BlXTpTW1JdKSl7aWYobnVsbCE9ay5GKXtpZihSPWsuRiwhay5mKWNvbnRpbnVlO0c9''@;'; put 'put ''ay5mLC0xPT1SLmluZGV4T2YoIjoiKSYmKFI9UisiOiIrUil9aWYobnVsbCE9ay5mKUc9ay5mO2Vsc2V7aWYoInoiPT1rLnQpY29udGludWU7aWYoIm4iPT1rLnQmJm51bGwhPWsudilHPSIiK2sudjtlbHNlIGlmKCJiIj09ay50KUc9ay52PyJUUlVFIjoiRkFMU0UiO2Vsc2UgaWYodm9pZCAw''@;'; put 'put ''IT09ay53KUc9IiciK2sudztlbHNle2lmKHZvaWQgMD09PWsudiljb250aW51ZTtHPSJzIj09ay50PyInIitrLnY6IiIray52fX15ZVt5ZS5sZW5ndGhdPVIrIj0iK0d9cmV0dXJuIHllfWZ1bmN0aW9uIEJiKFMsUixrKXt2YXIgRz1rfHx7fSxRPSshRy5za2lwSGVhZGVyLG9lPVN8fHt9LGdl''@;'; put 'put ''PTAscGU9MDtpZihvZSYmbnVsbCE9Ry5vcmlnaW4paWYoIm51bWJlciI9PXR5cGVvZiBHLm9yaWdpbilnZT1HLm9yaWdpbjtlbHNle3ZhciB5ZT0ic3RyaW5nIj09dHlwZW9mIEcub3JpZ2luP05vKEcub3JpZ2luKTpHLm9yaWdpbjtnZT15ZS5yLHBlPXllLmN9dmFyIFBlLE5lPUpTT04ucGFy''@;'; put 'put ''c2UoJ3sicyI6IHsiYyI6MCwgInIiOjB9LCAiZSI6IHsiYyI6MCwgInIiOjB9fScpO2lmKE5lLmUuYz1wZSxOZS5lLnI9Z2UrUi5sZW5ndGgtMStRLG9lWyIhcmVmIl0pe3ZhciBZZT1vbyhvZVsiIXJlZiJdKTtOZS5lLmM9TWF0aC5tYXgoTmUuZS5jLFllLmUuYyksTmUuZS5yPU1hdGgubWF4''@;'; put 'put ''KE5lLmUucixZZS5lLnIpLC0xPT1nZSYmKE5lLmUucj0oZ2U9WWUuZS5yKzEpK1IubGVuZ3RoLTErUSl9ZWxzZS0xPT1nZSYmKGdlPTAsTmUuZS5yPVIubGVuZ3RoLTErUSk7dmFyIGV0PUcuaGVhZGVyfHxbXSxjdD0wO1IuZm9yRWFjaChmdW5jdGlvbihhdCxidCl7T2UoYXQpLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oanQpey0xPT0oY3Q9ZXQuaW5kZXhPZihqdCkpJiYoZXRbY3Q9ZXQubGVuZ3RoXT1qdCk7dmFyIGt0PWF0W2p0XSxPdD0ieiIsS3Q9IiIsVG49cWkoe2M6cGUrY3QscjpnZStidCtRfSk7aWYoUGU9enUuc2hlZXRfZ2V0X2NlbGwob2UsVG4pLCFrdHx8Im9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBrdHx8a3QgaW5zdGFuY2VvZiBEYXRlKXtpZigibnVtYmVyIj09dHlwZW9mIGt0P090PSJuIjoiYm9vbGVhbiI9PXR5cGVvZiBrdD9PdD0iYiI6InN0cmluZyI9PXR5cGVvZiBrdD9PdD0icyI6a3QgaW5zdGFuY2VvZiBEYXRlPyhPdD0iZCIsRy5jZWxsRGF0ZXN8fChPdD0ibiIsa3Q9UWUo''@;'; put 'put ''a3QpKSxLdD1QZS56JiZBLmlzX2RhdGUoUGUueik/UGUuejpHLmRhdGVORnx8QS5fdGFibGVbMTRdKTpudWxsPT09a3QmJkcubnVsbEVycm9yJiYoT3Q9ImUiLGt0PTApLFBlPyhQZS50PU90LFBlLnY9a3QsZGVsZXRlIFBlLncsZGVsZXRlIFBlLlIsS3QmJihQZS56PUt0KSk6b2VbVG5dPVBl''@;'; put 'put ''PXt0Ok90LHY6a3R9LEt0JiYoUGUuej1LdCksUGUmJlBlLmgpdHJ5e2lmKFBlLlI9bWQuaHRtbF90b19ycyhQZS5oKSwhUGUudil7UGUudj0iIjtmb3IodmFyIHJyPTA7cnI8UGUuUi5sZW5ndGg7KytycilQZS52Kz1QZS5SW3JyXS52fHwiIn19Y2F0Y2h7fX1lbHNlIG9lW1RuXT1rdH0pfSks''@;'; put 'put ''TmUuZS5jPU1hdGgubWF4KE5lLmUuYyxwZStldC5sZW5ndGgtMSk7dmFyIEV0PWppKGdlKTtpZihRKWZvcihjdD0wO2N0PGV0Lmxlbmd0aDsrK2N0KW9lW1RhKGN0K3BlKStFdF09e3Q6InMiLHY6ZXRbY3RdfTtyZXR1cm4gb2VbIiFyZWYiXT1yYShOZSksb2V9dmFyIHp1PXtlbmNvZGVfY29s''@;'; put 'put ''OlRhLGVuY29kZV9yb3c6amksZW5jb2RlX2NlbGw6cWksZW5jb2RlX3JhbmdlOnJhLGRlY29kZV9jb2w6Q2EsZGVjb2RlX3JvdzpfbyxzcGxpdF9jZWxsOmZ1bmN0aW9uICQwKFMpe3JldHVybiBTLnJlcGxhY2UoLyhcJD9bQS1aXSopKFwkP1xkKikvLCIkMSwkMiIpLnNwbGl0KCIsIil9LGRl''@;'; put 'put ''Y29kZV9jZWxsOk5vLGRlY29kZV9yYW5nZTpNcyxmb3JtYXRfY2VsbDpfbCxnZXRfZm9ybXVsYWU6YU0sbWFrZV9jc3Y6QzAsbWFrZV9qc29uOks0LG1ha2VfZm9ybXVsYWU6YU0saHRtbF90b19yczptZC5odG1sX3RvX3JzLHNoZWV0X2FkZF9hb2E6ZjQsc2hlZXRfYWRkX2pzb246QmIsc2hl''@;'; put 'put ''ZXRfYWRkX2RvbTpJYixhb2FfdG9fc2hlZXQ6cDQsanNvbl90b19zaGVldDpmdW5jdGlvbiB6SShTLFIpe3JldHVybiBCYihudWxsLFMsUil9LHRhYmxlX3RvX3NoZWV0Omp6LHRhYmxlX3RvX2Jvb2s6ZnVuY3Rpb24genooUyxSKXtyZXR1cm4gdGgoanooUyxSKSxSKX0sc2hlZXRfdG9fY3N2''@;'; put 'put ''OkMwLHNoZWV0X3RvX3R4dDpqSSxzaGVldF90b19qc29uOks0LHNoZWV0X3RvX2h0bWw6bWQuZnJvbV9zaGVldCxzaGVldF90b19mb3JtdWxhZTphTSxzaGVldF90b19yb3dfb2JqZWN0X2FycmF5Oks0fTtmdW5jdGlvbiBVSShTLFIsayxHLFEpe3ZhciBvZTtpZihTLnN0eWxlJiYhKFMuX3Jh''@;'; put 'put ''bmdlJiYob2U9InN0cmluZyI9PXR5cGVvZiBTLl9yYW5nZT93LnV0aWxzLmRlY29kZV9yYW5nZShTLl9yYW5nZSk6Uy5fcmFuZ2Usay5jPm9lLmUuY3x8ay5jPG9lLnMuY3x8ay5yPm9lLmUucnx8ay5yPG9lLnMucikpJiZvZSl7dmFyIGdlPVMuc3R5bGUuc3R5bGU7aWYoZ2Upe2dlLndob2xl''@;'; put 'put ''VGFibGUmJnp1LmFwcGx5X3N0eWxlX2RlbHRhKEcsZ2Uud2hvbGVUYWJsZSk7ZTppZihnZS5oZWFkZXJSb3cpaWYoUSl7aWYoay5yIT1vZS5zLnIpYnJlYWsgZTtXdChTLnN0eWxlLmNvbGhlYWQpfHx6dS5hcHBseV9zdHlsZV9kZWx0YShHLGdlLmhlYWRlclJvdyl9ZWxzZXtpZihrLnIhPW9l''@;'; put 'put ''LnMucilicmVhayBlO1d0KFMuaGVhZGVyKXx8enUuYXBwbHlfc3R5bGVfZGVsdGEoRyxnZS5oZWFkZXJSb3cpfX19fXp1LnRlc3RfcGFzc3dvcmQ9ZnVuY3Rpb24gS3ooUyxSKXt2YXIgaz1CdWZmZXIuZnJvbShTLnNhbHQsImJhc2U2NCIpLEc9Uy5hbGdvLFE9bWMoQnVmZmVyLmNvbmNhdChb''@;'; put 'put ''ayxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFIpKV0pLEcpLG9lPUJ1ZmZlci5hbGxvYyg0KTttbihvZSwwKTtmb3IodmFyIGdlPTA7Z2U8Uy5zcGluOysrZ2Upb2UubD0wLG9lLndyaXRlX3NoaWZ0KDQsZ2UpLFE9bWMoQnVmZmVyLmNvbmNhdChbUSxvZV0pLEcpO3Zh''@;'; put 'put ''ciBwZT1CdWZmZXIuZnJvbShTLmhhc2gsImJhc2U2NCIpO3JldHVybiAwPT1RLmNvbXBhcmUocGUpfSx6dS5oYXNoX3Bhc3N3b3JkPWZ1bmN0aW9uIFJiKFMpe3ZhciBSPXthbGdvOiJTSEEtNTEyIixzYWx0OiJVMmhsWlhSS1V5NWpiMjB2ZUd4emVBPT0iLHNwaW46MWUzfSxrPUJ1ZmZlci5m''@;'; put 'put ''cm9tKFIuc2FsdCwiYmFzZTY0IiksRz1SLmFsZ28sUT1tYyhCdWZmZXIuY29uY2F0KFtrLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUykpXSksRyksb2U9QnVmZmVyLmFsbG9jKDQpO21uKG9lLDApO2Zvcih2YXIgZ2U9MDtnZTxSLnNwaW47KytnZSlvZS5sPTAsb2Uu''@;'; put 'put ''d3JpdGVfc2hpZnQoNCxnZSksUT1tYyhCdWZmZXIuY29uY2F0KFtRLG9lXSksRyk7cmV0dXJuIFIuaGFzaD1RLnRvU3RyaW5nKCJiYXNlNjQiKSxSfSx6dS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGU9ZnVuY3Rpb24oUyxSLGspe2lmKGspe3ZhciBHPSJzdHJpbmciPT10eXBlb2YgUj9vbyhSKTpS''@;'; put 'put ''O251bGwhPUcuciYmbnVsbCE9Ry5jJiYoRz17czpHLGU6R30pO3ZhciBwZSxRPUcucy5yLG9lPTAsZ2U9IiIseWU9TXMoU1siIXJlZiJdfHwiQTEiKTt5ZS5zLnI+Ry5zLnImJih5ZS5zLnI9Ry5zLnIpLHllLnMuYz5HLnMuYyYmKHllLnMuYz1HLnMuYykseWUuZS5yPEcuZS5yJiYoeWUuZS5y''@;'; put 'put ''PUcuZS5yKSx5ZS5lLmM8Ry5lLmMmJih5ZS5lLmM9Ry5lLmMpLFNbIiFyZWYiXT1yYSh5ZSk7Zm9yKHZhciBOZT1BcnJheS5pc0FycmF5KFMpO1E8PUcuZS5yOysrUSlmb3Iob2U9Ry5zLmM7b2U8PUcuZS5jOysrb2UpTmU/KFNbUV18fChTW1FdPVtdKSxTW1FdW29lXXx8KFNbUV1bb2VdPXt0''@;'; put 'put ''OiJ6In0pLHBlPVNbUV1bb2VdKTooU1tnZT1xaSh7cjpRLGM6b2V9KV18fChTW2dlXT17dDoieiJ9KSxwZT1TW2dlXSkscGUuc3x8KHBlLnM9e30pLE9iamVjdC5rZXlzKGspLmZvckVhY2goUGUpLHBlLnMucGF0dGVyblR5cGUmJiFwZS5zLmZnQ29sb3ImJihkZWxldGUgcGUucy5wYXR0ZXJu''@;'; put 'put ''VHlwZSxkZWxldGUgcGUucy5iZ0NvbG9yKSwocGUucy5mZ0NvbG9yfHxwZS5zLmJnQ29sb3IpJiYibm9uZSI9PShwZS5zLnBhdHRlcm5UeXBlfHwibm9uZSIpJiYocGUucy5wYXR0ZXJuVHlwZT0ic29saWQiKTtpZihRPUcucy5yLGsudG9wfHxudWxsPT09ay50b3ApZm9yKG9lPUcucy5jO29l''@;'; put 'put ''PD1HLmUuYzsrK29lKXtpZihOZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVtvZV19ZWxzZSBnZT1xaSh7cjpRLGM6b2V9KSxwZT1TW2dlXTtwZSYmKG51bGw9PT1rLnRvcD9kZWxldGUgcGUucy50b3A6cGUucy50b3A9cXQoay50b3ApKX1pZihRPUcuZS5yLGsuYm90dG9tfHxudWxsPT09''@;'; put 'put ''ay5ib3R0b20pZm9yKG9lPUcucy5jO29lPD1HLmUuYzsrK29lKXtpZihOZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVtvZV19ZWxzZSBnZT1xaSh7cjpRLGM6b2V9KSxwZT1TW2dlXTtwZSYmKG51bGw9PT1rLmJvdHRvbT9kZWxldGUgcGUucy5ib3R0b206cGUucy5ib3R0b209cXQoay5i''@;'; put 'put ''b3R0b20pKX1pZihvZT1HLnMuYyxrLmxlZnR8fG51bGw9PT1rLmxlZnQpZm9yKFE9Ry5zLnI7UTw9Ry5lLnI7KytRKXtpZihOZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVtvZV19ZWxzZSBnZT1xaSh7cjpRLGM6b2V9KSxwZT1TW2dlXTtwZSYmKG51bGw9PT1rLmxlZnQ/ZGVsZXRlIHBl''@;'; put 'put ''LnMubGVmdDpwZS5zLmxlZnQ9cXQoay5sZWZ0KSl9aWYob2U9Ry5lLmMsay5yaWdodHx8bnVsbD09PWsucmlnaHQpZm9yKFE9Ry5zLnI7UTw9Ry5lLnI7KytRKXtpZihOZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVtvZV19ZWxzZSBnZT1xaSh7cjpRLGM6b2V9KSxwZT1TW2dlXTtwZSYm''@;'; put 'put ''KG51bGw9PT1rLnJpZ2h0P2RlbGV0ZSBwZS5zLnJpZ2h0OnBlLnMucmlnaHQ9cXQoay5yaWdodCkpfX1mdW5jdGlvbiBQZShZZSl7aWYoInRvcCIhPVllJiYiYm90dG9tIiE9WWUmJiJsZWZ0IiE9WWUmJiJyaWdodCIhPVllKXtpZigieiI9PVllKXJldHVybiB2b2lkKHBlLno9ay56KTtpZigi''@;'; put 'put ''YWxpZ25tZW50Ij09WWUpcmV0dXJuIHZvaWQocGUuc1tZZV0/T2JqZWN0LmtleXMoa1tZZV0pLmZvckVhY2goZnVuY3Rpb24oZXQpe3BlLnNbWWVdW2V0XT1rW1llXVtldF19KTpwZS5zW1llXT1xdChrW1llXSkpO2lmKCJpbmNvbCI9PVllKXJldHVybiBvZT5HLnMuYyYmKG51bGw9PT1rLmxl''@;'; put 'put ''ZnQ/ZGVsZXRlIHBlLnMubGVmdDpwZS5zLmxlZnQ9Im9iamVjdCI9PXR5cGVvZiBrW1llXT9xdChrW1llXSk6a1tZZV0pLHZvaWQob2U8Ry5lLmMmJihudWxsPT09ay5yaWdodD9kZWxldGUgcGUucy5yaWdodDpwZS5zLnJpZ2h0PSJvYmplY3QiPT10eXBlb2Yga1tZZV0/cXQoa1tZZV0pOmtb''@;'; put 'put ''WWVdKSk7aWYoImlucm93Ij09WWUpcmV0dXJuIFE+Ry5zLnImJihudWxsPT09ay50b3A/ZGVsZXRlIHBlLnMudG9wOnBlLnMudG9wPSJvYmplY3QiPT10eXBlb2Yga1tZZV0/cXQoa1tZZV0pOmtbWWVdKSx2b2lkKFE8Ry5lLnImJihudWxsPT09ay5ib3R0b20/ZGVsZXRlIHBlLnMuYm90dG9t''@;'; put 'put ''OnBlLnMuYm90dG9tPSJvYmplY3QiPT10eXBlb2Yga1tZZV0/cXQoa1tZZV0pOmtbWWVdKSk7bnVsbD09PWtbWWVdP2RlbGV0ZSBwZS5zW1llXTpwZS5zW1llXT1rW1llXSYmQXJyYXkuaXNBcnJheShrW1llXSk/a1tZZV0uc2xpY2UoKS5tYXAoZnVuY3Rpb24oZXQpe3JldHVybiJvYmplY3Qi''@;'; put 'put ''PT10eXBlb2YgZXQ/cXQoZXQpOmV0fSk6Im9iamVjdCI9PXR5cGVvZiBrW1llXT9xdChrW1llXSk6a1tZZV19fX0senUuYXBwbHlfc3R5bGVfZGVsdGE9ZnVuY3Rpb24oUyxSKXtbInN6IiwiYm9sZCIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZSIsIm5hbWUiLCJ2YWxpZ24iXS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKGspe3ZhciBHPWs7ImJnQ29sb3IiPT1rP0c9ImZnQ29sb3IiOiJmZ0NvbG9yIj09ayYmKEc9ImJnQ29sb3IiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixrKSYmKG51bGw9PT1SW2tdP2RlbGV0ZSBTW0ddOm51bGwhPVJba10mJihTW0ddPVJb''@;'; put 'put ''a10pKX0pLFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiYWxpZ25tZW50IiwicHJvdGVjdGlvbiIsImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5mb3JFYWNoKGZ1bmN0aW9uKGspe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSLGspJiYobnVsbD09PVJb''@;'; put 'put ''a10/ZGVsZXRlIFNba106bnVsbCE9UltrXSYmKFNba109cXQoUltrXSkpKX0pfSx6dS5nZXRfY29tcHV0ZWRfc3R5bGU9ZnVuY3Rpb24oUyxSKXsic3RyaW5nIj09dHlwZW9mIFImJihSPXcudXRpbHMuZGVjb2RlX2NlbGwoUikpO3ZhciBrPUFycmF5LmlzQXJyYXkoUyk/KFNbUi5yXXx8W10p''@;'; put 'put ''W1IuY106U1t3LnV0aWxzLmVuY29kZV9jZWxsKFIpXSxHPXF0KGsmJmsuc3x8e30pO3JldHVybiBTWyIhdGFibGVzIl0mJlNbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1VJKFEsMCxSLEcpfSksU1siIXBpdm90cyJdJiZTWyIhcGl2b3RzIl0uZm9yRWFjaChmdW5jdGlvbihRKXtV''@;'; put 'put ''SShRLDAsUixHLCEwKX0pLEd9O3ZhciB6Yj17fTt6dS5jZWxsX2FycmF5X3RvX2Nzdl9yb3c9ZnVuY3Rpb24oUyxSKXt2YXIgaz1SPz97fSxHPXZvaWQgMCE9PWsuRlM/ay5GUzoiLCIsUT1HLmNoYXJDb2RlQXQoMCksb2U9dm9pZCAwIT09ay5SUz9rLlJTOiJcbiIsZ2U9b2UuY2hhckNvZGVB''@;'; put 'put ''dCgwKSxwZT16YltHXXx8KHpiW0ddPW5ldyBSZWdFeHAoKCJ8Ij09Rz8iXFx8IjpHKSsiKyQiKSkseWU9ZnVuY3Rpb24gamIoUyxSLGssRyxRKXtmb3IodmFyIG9lPSEwLGdlPVtdLHBlPSIiLHllPTA7eWU8PVMubGVuZ3RoLTE7Kyt5ZSl7dmFyIFBlPVNbeWVdO2lmKG51bGw9PVBlKXBlPSIi''@;'; put 'put ''O2Vsc2UgaWYobnVsbCE9UGUudil7b2U9ITEscGU9IiIrX2woUGUsbnVsbCxRKTtmb3IodmFyIE5lPTAsWWU9MDtOZSE9PXBlLmxlbmd0aDsrK05lKWlmKChZZT1wZS5jaGFyQ29kZUF0KE5lKSk9PT1SfHxZZT09PWt8fDM0PT09WWUpe3BlPSciJytwZS5yZXBsYWNlKF8yLCciIicpKyciJzti''@;'; put 'put ''cmVha30iSUQiPT1wZSYmKHBlPSciSUQiJyl9ZWxzZSBudWxsPT1QZS5mfHxQZS5GP3BlPSIiOihvZT0hMSwocGU9Ij0iK1BlLmYpLmluZGV4T2YoIiwiKT49MCYmKHBlPSciJytwZS5yZXBsYWNlKF8yLCciIicpKyciJykpO2dlLnB1c2gocGUpfXJldHVybiExPT09US5ibGFua3Jvd3MmJm9l''@;'; put 'put ''P251bGw6Z2Uuam9pbihHKX0oUyxRLGdlLEcsayk7cmV0dXJuIGsuc3RyaXAmJih5ZT15ZS5yZXBsYWNlKHBlLCIiKSkseWUrb2V9LGZ1bmN0aW9uKFMpe2Z1bmN0aW9uIGsob2UsZ2UscGUpe3JldHVybiBudWxsIT1vZVtnZV0/b2VbZ2VdOm9lW2dlXT1wZX1mdW5jdGlvbiBHKG9lLGdlLHBl''@;'; put 'put ''KXtpZigic3RyaW5nIj09dHlwZW9mIGdlKXtpZihBcnJheS5pc0FycmF5KG9lKSl7dmFyIHllPU5vKGdlKTtyZXR1cm4gb2VbeWUucl18fChvZVt5ZS5yXT1bXSksb2VbeWUucl1beWUuY118fChvZVt5ZS5yXVt5ZS5jXT17dDoieiJ9KX1yZXR1cm4gb2VbZ2VdfHwob2VbZ2VdPXt0OiJ6In0p''@;'; put 'put ''fXJldHVybiBHKG9lLHFpKCJudW1iZXIiIT10eXBlb2YgZ2U/Z2U6e3I6Z2UsYzpwZXx8MH0pKX1TLmNvbnN0cz1TLmNvbnN0c3x8e30sUy5zaGVldF9nZXRfY2VsbD1HLFMuYm9va19uZXc9ZnVuY3Rpb24oKXtyZXR1cm57U2hlZXROYW1lczpbXSxTaGVldHM6e319fSxTLmJvb2tfYXBwZW5k''@;'; put 'put ''X3NoZWV0PWZ1bmN0aW9uKG9lLGdlLHBlKXtpZighcGUpZm9yKHZhciB5ZT0xO3llPD02NTUzNSYmLTEhPW9lLlNoZWV0TmFtZXMuaW5kZXhPZihwZT0iU2hlZXQiK3llKTsrK3llKTtpZihfYihwZSksb2UuU2hlZXROYW1lcy5pbmRleE9mKHBlKT49MCl0aHJvdyBuZXcgRXJyb3IoIldvcmtz''@;'; put 'put ''aGVldCB3aXRoIG5hbWUgfCIrcGUrInwgYWxyZWFkeSBleGlzdHMhIik7b2UuU2hlZXROYW1lcy5wdXNoKHBlKSxvZS5TaGVldHNbcGVdPWdlfSxTLmJvb2tfc2V0X3NoZWV0X3Zpc2liaWxpdHk9ZnVuY3Rpb24ob2UsZ2UscGUpe2sob2UsIldvcmtib29rIix7fSksayhvZS5Xb3JrYm9vaywi''@;'; put 'put ''U2hlZXRzIixbXSk7dmFyIHllPWZ1bmN0aW9uIFEob2UsZ2Upe2lmKCJudW1iZXIiPT10eXBlb2YgZ2Upe2lmKGdlPj0wJiZvZS5TaGVldE5hbWVzLmxlbmd0aD5nZSlyZXR1cm4gZ2U7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCAjICIrZ2UpfWlmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgZ2Upe3ZhciBwZT1vZS5TaGVldE5hbWVzLmluZGV4T2YoZ2UpO2lmKHBlPi0xKXJldHVybiBwZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IG5hbWUgfCIrZ2UrInwiKX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IHwiK2dlKyJ8Iil9KG9lLGdlKTtz''@;'; put 'put ''d2l0Y2goayhvZS5Xb3JrYm9vay5TaGVldHMseWUse30pLHBlKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFkIHNoZWV0IHZpc2liaWxpdHkgc2V0dGluZyAiK3BlKX1vZS5Xb3JrYm9vay5TaGVldHNbeWVdLkhpZGRlbj1wZX0sZnVuY3Rp''@;'; put 'put ''b24gUihvZSl7b2UuZm9yRWFjaChmdW5jdGlvbihnZSl7Uy5jb25zdHNbZ2VbMF1dPWdlWzFdfSl9KFtbIlNIRUVUX1ZJU0lCTEUiLDBdLFsiU0hFRVRfSElEREVOIiwxXSxbIlNIRUVUX1ZFUllfSElEREVOIiwyXV0pLFMuY2VsbF9zZXRfbnVtYmVyX2Zvcm1hdD1mdW5jdGlvbihvZSxnZSl7''@;'; put 'put ''cmV0dXJuIG9lLno9Z2Usb2V9LFMuY2VsbF9zZXRfaHlwZXJsaW5rPWZ1bmN0aW9uKG9lLGdlLHBlKXtyZXR1cm4gZ2U/KG9lLmw9e1RhcmdldDpnZX0scGUmJihvZS5sLlRvb2x0aXA9cGUpLG9lLnN8fChvZS5zPXt9KSxvZS5zLmNvbG9yPXt0aGVtZToxMH0pOihkZWxldGUgb2UubCxvZS5z''@;'; put 'put ''JiZvZS5zLmNvbG9yJiYxMD09b2Uucy5jb2xvci50aGVtZSYmZGVsZXRlIG9lLnMuY29sb3IpLG9lfSxTLmNlbGxfc2V0X2ludGVybmFsX2xpbms9ZnVuY3Rpb24ob2UsZ2UscGUpe3JldHVybiBTLmNlbGxfc2V0X2h5cGVybGluayhvZSwiIyIrZ2UscGUpfSxTLmNlbGxfYWRkX2NvbW1lbnQ9''@;'; put 'put ''ZnVuY3Rpb24ob2UsZ2UscGUpe29lLmN8fChvZS5jPVtdKSxvZS5jLnB1c2goe3Q6Z2UsYTpwZXx8IlNoZWV0SlMifSl9LFMuc2hlZXRfc2V0X2FycmF5X2Zvcm11bGE9ZnVuY3Rpb24ob2UsZ2UscGUpe2Zvcih2YXIgeWU9InN0cmluZyIhPXR5cGVvZiBnZT9nZTpvbyhnZSksUGU9InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBnZT9nZTpyYShnZSksTmU9eWUucy5yO05lPD15ZS5lLnI7KytOZSlmb3IodmFyIFllPXllLnMuYztZZTw9eWUuZS5jOysrWWUpe3ZhciBldD1HKG9lLE5lLFllKTtldC50PSJuIixldC5GPVBlLGRlbGV0ZSBldC52LE5lPT15ZS5zLnImJlllPT15ZS5zLmMmJihldC5mPXBl''@;'; put 'put ''KX1yZXR1cm4gb2V9fSh6dSksVGUmJmZ1bmN0aW9uKCl7dmFyIFM9eSg3MDQ1KS5SZWFkYWJsZTt3LnN0cmVhbT17dG9fanNvbjpmdW5jdGlvbihRLG9lKXt2YXIgZ2U9Uyh7b2JqZWN0TW9kZTohMH0pO2lmKG51bGw9PVF8fG51bGw9PVFbIiFyZWYiXSlyZXR1cm4gZ2UucHVzaChudWxsKSxn''@;'; put 'put ''ZTt2YXIgcGU9e3Q6Im4iLHY6MH0seWU9MCxQZT0xLE5lPVtdLFllPTAsZXQ9IiIsY3Q9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxFdD1vZXx8e30sYXQ9bnVsbCE9RXQucmFuZ2U/RXQucmFuZ2U6UVsiIXJlZiJdO3N3aXRjaCgxPT09RXQuaGVhZGVyP3llPTE6IkEiPT09RXQuaGVhZGVy''@;'; put 'put ''P3llPTI6QXJyYXkuaXNBcnJheShFdC5oZWFkZXIpJiYoeWU9MyksdHlwZW9mIGF0KXtjYXNlInN0cmluZyI6Y3Q9b28oYXQpO2JyZWFrO2Nhc2UibnVtYmVyIjooY3Q9b28oUVsiIXJlZiJdKSkucy5yPWF0O2JyZWFrO2RlZmF1bHQ6Y3Q9YXR9eWU+MCYmKFBlPTApO3ZhciBidD1qaShjdC5z''@;'; put 'put ''LnIpLGp0PVtdLGt0PTAsT3Q9QXJyYXkuaXNBcnJheShRKSxLdD1jdC5zLnIsVG49MCxycj0wO2ZvcihPdCYmIVFbS3RdJiYoUVtLdF09W10pLFRuPWN0LnMuYztUbjw9Y3QuZS5jOysrVG4pc3dpdGNoKGp0W1RuXT1UYShUbikscGU9T3Q/UVtLdF1bVG5dOlFbanRbVG5dK2J0XSx5ZSl7Y2Fz''@;'; put 'put ''ZSAxOk5lW1RuXT1Ubi1jdC5zLmM7YnJlYWs7Y2FzZSAyOk5lW1RuXT1qdFtUbl07YnJlYWs7Y2FzZSAzOk5lW1RuXT1FdC5oZWFkZXJbVG4tY3Qucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT1wZSYmKHBlPXt3OiJfX0VNUFRZIix0OiJzIn0pLGV0PVllPV9sKHBlLG51bGwsRXQpLGt0''@;'; put 'put ''PTAscnI9MDtycjxOZS5sZW5ndGg7KytycilOZVtycl09PWV0JiYoZXQ9WWUrIl8iKyArK2t0KTtOZVtUbl09ZXR9cmV0dXJuIEt0PWN0LnMucitQZSxnZS5fcmVhZD1mdW5jdGlvbigpe2lmKEt0PmN0LmUucilyZXR1cm4gZ2UucHVzaChudWxsKTtmb3IoO0t0PD1jdC5lLnI7KXt2YXIgU249''@;'; put 'put ''aU0oUSxjdCxLdCxqdCx5ZSxOZSxPdCxFdCk7aWYoKytLdCwhMT09PVNuLmlzZW1wdHl8fCgxPT09eWU/ITEhPT1FdC5ibGFua3Jvd3M6RXQuYmxhbmtyb3dzKSl7Z2UucHVzaChTbi5yb3cpO2JyZWFrfX19LGdlfSx0b19odG1sOmZ1bmN0aW9uKFEsb2Upe3ZhciBnZT1TKCkscGU9b2V8fHt9''@;'; put 'put ''LFBlPW51bGwhPXBlLmZvb3Rlcj9wZS5mb290ZXI6bWQuRU5EO2dlLnB1c2gobnVsbCE9cGUuaGVhZGVyP3BlLmhlYWRlcjptZC5CRUdJTik7dmFyIE5lPU1zKFFbIiFyZWYiXSk7cGUuZGVuc2U9QXJyYXkuaXNBcnJheShRKSxnZS5wdXNoKG1kLl9wcmVhbWJsZShRLE5lLHBlKSk7dmFyIFll''@;'; put 'put ''PU5lLnMucixldD0hMSxjdD1bXTtyZXR1cm4gZ2UuX3JlYWQ9ZnVuY3Rpb24oKXtpZihZZT5OZS5lLnIpcmV0dXJuIGV0fHwoZXQ9ITAsZ2UucHVzaCgiPC90YWJsZT4iK1BlKSksZ2UucHVzaChudWxsKTtmb3IoO1llPD1OZS5lLnI7KXtnZS5wdXNoKG1kLl9yb3coUSxOZSxZZSxwZSxjdCwi''@;'; put 'put ''IikpLCsrWWU7YnJlYWt9fSxnZX0sdG9fY3N2OmZ1bmN0aW9uKFEsb2Upe3ZhciBnZT1TKCkscGU9b2U/P3t9O2lmKG51bGw9PVF8fG51bGw9PVFbIiFyZWYiXSlyZXR1cm4gZ2UucHVzaChudWxsKSxnZTt2YXIgeWU9b28oUVsiIXJlZiJdKSxQZT12b2lkIDAhPT1wZS5GUz9wZS5GUzoiLCIs''@;'; put 'put ''TmU9UGUuY2hhckNvZGVBdCgwKSxZZT12b2lkIDAhPT1wZS5SUz9wZS5SUzoiXG4iLGV0PVllLmNoYXJDb2RlQXQoMCksY3Q9bmV3IFJlZ0V4cCgoInwiPT1QZT8iXFx8IjpQZSkrIiskIiksRXQ9IiIsYXQ9W107cGUuZGVuc2U9QXJyYXkuaXNBcnJheShRKTtmb3IodmFyIGJ0PXBlLnNraXBI''@;'; put 'put ''aWRkZW4mJlFbIiFjb2xzIl18fFtdLGp0PXBlLnNraXBIaWRkZW4mJlFbIiFyb3dzIl18fFtdLGt0PXllLnMuYztrdDw9eWUuZS5jOysra3QpKGJ0W2t0XXx8e30pLmhpZGRlbnx8KGF0W2t0XT1UYShrdCkpO3ZhciBPdD15ZS5zLnIsS3Q9ITE7cmV0dXJuIGdlLl9yZWFkPWZ1bmN0aW9uKCl7''@;'; put 'put ''aWYoIUt0KXJldHVybiBLdD0hMCxnZS5wdXNoKCJcdWZlZmYiKTtmb3IoO090PD15ZS5lLnI7KWlmKCsrT3QsIShqdFtPdC0xXXx8e30pLmhpZGRlbiYmbnVsbCE9KEV0PUJJKFEseWUsT3QtMSxhdCxOZSxldCxQZSxwZSkpKXtwZS5zdHJpcCYmKEV0PUV0LnJlcGxhY2UoY3QsIiIpKSxnZS5w''@;'; put 'put ''dXNoKEV0K1llKTticmVha31yZXR1cm4gT3Q+eWUuZS5yP2dlLnB1c2gobnVsbCk6dm9pZCAwfSxnZX19fSgpLHcucGFyc2VfeGxzY2ZiPSRTLHcucGFyc2VfemlwPXJwLHcucmVhZD0kNSx3LnJlYWRGaWxlPWtjLHcucmVhZEZpbGVTeW5jPWtjLHcud3JpdGU9Tjgsdy53cml0ZUZpbGU9Vjgs''@;'; put 'put ''dy53cml0ZUZpbGVTeW5jPVY4LHcud3JpdGVGaWxlQXN5bmM9ZnVuY3Rpb24gck0oUyxSLGssRyl7dmFyIFE9a3x8e307US50eXBlPSJmaWxlIixRLmZpbGU9UyxuTShRKSxRLnR5cGU9ImJ1ZmZlciI7dmFyIG9lPUc7cmV0dXJuIG9lIGluc3RhbmNlb2YgRnVuY3Rpb258fChvZT1rKSxYZS53''@;'; put 'put ''cml0ZUZpbGUoUyxOOChSLFEpLG9lKX0sdy5zZXRfZGF0ZV9zdHlsZT1mdW5jdGlvbiBEdChTKXtzd2l0Y2goUyl7Y2FzZSAwOnl0KCk7YnJlYWs7Y2FzZSAxOiFmdW5jdGlvbiBNdCgpe3ZhciBTPW5ldyBEYXRlO250PV90LmdldFRpbWUoKSs2ZTQqKFMuZ2V0VGltZXpvbmVPZmZzZXQoKS1f''@;'; put 'put ''dC5nZXRUaW1lem9uZU9mZnNldCgpKTt2YXIgUj1TLmdldFRpbWV6b25lT2Zmc2V0KCk7UWU9ZnVuY3Rpb24oRyxRKXt2YXIgb2U9Ry5nZXRUaW1lKCk7cmV0dXJuIFEmJihvZS09MTI2MzE2OGU1KSwob2UtKF90LmdldFRpbWUoKSs2ZTQqKEcuZ2V0VGltZXpvbmVPZmZzZXQoKS1fdC5nZXRU''@;'; put 'put ''aW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fSx1bj1mdW5jdGlvbihHKXt2YXIgUT1uZXcgRGF0ZTtyZXR1cm4gUS5zZXRUaW1lKDI0KkcqNjAqNjAqMWUzK250KSxRLmdldFRpbWV6b25lT2Zmc2V0KCkhPT1SJiZRLnNldFRpbWUoUS5nZXRUaW1lKCkrNmU0KihRLmdldFRpbWV6b25lT2Zmc2V0''@;'; put 'put ''KCktUikpLFF9fSgpfX0sdy51dGlscz16dSx3LlNTRj1BLHR5cGVvZiB2ZTwidSImJih3LkNGQj12ZSl9KFgpfSw0OTYwOToodWUsWCx5KT0+e3ZhciBJPVg7SS5iaWdudW09eSg5Njg2NyksSS5kZWZpbmU9eSgxNjYyNikuZGVmaW5lLEkuYmFzZT15KDE1MDY2KSxJLmNvbnN0YW50cz15KDQ3''@;'; put 'put ''NzQwKSxJLmRlY29kZXJzPXkoOTE1NTgpLEkuZW5jb2RlcnM9eSgyMjcxNCl9LDE2NjI2Oih1ZSxYLHkpPT57dmFyIEk9eSg0OTYwOSksXz15KDcxOTkzKTtmdW5jdGlvbiBCKHcsUCl7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PVAsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fVgu''@;'; put 'put ''ZGVmaW5lPWZ1bmN0aW9uKFAsRil7cmV0dXJuIG5ldyBCKFAsRil9LEIucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihQKXt2YXIgRjt0cnl7Rj15KDg2NjEpLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFt''@;'; put 'put ''ZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7Rj1mdW5jdGlvbih6KXt0aGlzLl9pbml0TmFtZWQoeil9fXJldHVybiBfKEYsUCksRi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbih6KXtQLmNhbGwodGhpcyx6KX0sbmV3IEYodGhpcyl9LEIucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0''@;'; put 'put ''aW9uKFApe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KFA9UHx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmRlY29kZXJzW1BdKSksdGhpcy5kZWNvZGVyc1tQXX0sQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRixPKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fZ2V0RGVjb2RlcihGKS5kZWNvZGUoUCxPKX0sQi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoUD1QfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW1BdPXRoaXMuX2NyZWF0ZU5hbWVkKEkuZW5jb2Rl''@;'; put 'put ''cnNbUF0pKSx0aGlzLmVuY29kZXJzW1BdfSxCLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEYpLmVuY29kZShQLE8pfX0sOTcyOTA6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoMTUwNjYpLlJlcG9ydGVyLGc9eSg4MzgzOCku''@;'; put 'put ''QnVmZmVyO2Z1bmN0aW9uIEIoUCxGKXtfLmNhbGwodGhpcyxGKSxnLmlzQnVmZmVyKFApPyh0aGlzLmJhc2U9UCx0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPVAubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rpb24gdyhQLEYpe2lmKEFycmF5LmlzQXJyYXko''@;'; put 'put ''UCkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPVAubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPIGluc3RhbmNlb2Ygd3x8KE89bmV3IHcoTyxGKSksdGhpcy5sZW5ndGgrPU8ubGVuZ3RoLE99LHRoaXMpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBQKXtpZighKDA8PVAmJlA8PTI1NSkpcmV0''@;'; put 'put ''dXJuIEYuZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgUCl0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9Zy5ieXRlTGVuZ3RoKFApO2Vsc2V7aWYoIWcuaXNCdWZmZXIoUCkpcmV0''@;'; put 'put ''dXJuIEYuZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIFApO3RoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1QLmxlbmd0aH19SShCLF8pLFgudD1CLEIucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOl8ucHJvdG90eXBl''@;'; put 'put ''LnNhdmUuY2FsbCh0aGlzKX19LEIucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oRil7dmFyIE89bmV3IEIodGhpcy5iYXNlKTtyZXR1cm4gTy5vZmZzZXQ9Ri5vZmZzZXQsTy5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9Ri5vZmZzZXQsXy5wcm90b3R5cGUucmVzdG9yZS5jYWxs''@;'; put 'put ''KHRoaXMsRi5yZXBvcnRlciksT30sQi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxCLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5y''@;'; put 'put ''ZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcihGfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIil9LEIucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oRixPKXtpZighKHRoaXMub2Zmc2V0K0Y8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihPfHwiRGVjb2RlckJ1ZmZl''@;'; put 'put ''ciBvdmVycnVuIik7dmFyIHo9bmV3IEIodGhpcy5iYXNlKTtyZXR1cm4gei5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLHoub2Zmc2V0PXRoaXMub2Zmc2V0LHoubGVuZ3RoPXRoaXMub2Zmc2V0K0YsdGhpcy5vZmZzZXQrPUYsen0sQi5wcm90b3R5cGUucmF3PWZ1bmN0aW9u''@;'; put 'put ''KEYpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UoRj9GLm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LFguZD13LHcucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oRixPKXtyZXR1cm4gRnx8KEY9bmV3IGcodGhpcy5sZW5ndGgpKSxPfHwoTz0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJh''@;'; put 'put ''eS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbih6KXt6LmpvaW4oRixPKSxPKz16Lmxlbmd0aH0pOigibnVtYmVyIj09dHlwZW9mIHRoaXMudmFsdWU/RltPXT10aGlzLnZhbHVlOiJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZT9GLndyaXRlKHRoaXMu''@;'; put 'put ''dmFsdWUsTyk6Zy5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KEYsTyksTys9dGhpcy5sZW5ndGgpKSxGfX0sMTUwNjY6KHVlLFgseSk9Pnt2YXIgST1YO0kuUmVwb3J0ZXI9eSg4NTY5NykuYSxJLkRlY29kZXJCdWZmZXI9eSg5NzI5MCkudCxJLkVuY29kZXJCdWZmZXI9''@;'; put 'put ''eSg5NzI5MCkuZCxJLk5vZGU9eSgzNDMyMCl9LDM0MzIwOih1ZSxYLHkpPT57dmFyIEk9eSgxNTA2NikuUmVwb3J0ZXIsXz15KDE1MDY2KS5FbmNvZGVyQnVmZmVyLGc9eSgxNTA2NikuRGVjb2RlckJ1ZmZlcixCPXkoMzkyMTApLHc9WyJzZXEiLCJzZXFvZiIsInNldCIsInNldG9mIiwib2Jq''@;'; put 'put ''aWQiLCJib29sIiwiZ2VudGltZSIsInV0Y3RpbWUiLCJudWxsXyIsImVudW0iLCJpbnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1wc3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdyYXBoc3RyIiwiaWE1c3RyIiwiaXNvNjQ2c3RyIiwibnVtc3RyIiwib2N0c3RyIiwicHJpbnRzdHIiLCJ0NjFz''@;'; put 'put ''dHIiLCJ1bmlzdHIiLCJ1dGY4c3RyIiwidmlkZW9zdHIiXSxQPVsia2V5Iiwib2JqIiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNlIiwiYW55IiwiY29udGFpbnMiXS5jb25jYXQodyk7ZnVuY3Rpb24gTyhOLEwpe3ZhciBLPXt9O3RoaXMuX2Jh''@;'; put 'put ''c2VTdGF0ZT1LLEsuZW5jPU4sSy5wYXJlbnQ9THx8bnVsbCxLLmNoaWxkcmVuPW51bGwsSy50YWc9bnVsbCxLLmFyZ3M9bnVsbCxLLnJldmVyc2VBcmdzPW51bGwsSy5jaG9pY2U9bnVsbCxLLm9wdGlvbmFsPSExLEsuYW55PSExLEsub2JqPSExLEsudXNlPW51bGwsSy51c2VEZWNvZGVyPW51''@;'; put 'put ''bGwsSy5rZXk9bnVsbCxLLmRlZmF1bHQ9bnVsbCxLLmV4cGxpY2l0PW51bGwsSy5pbXBsaWNpdD1udWxsLEsuY29udGFpbnM9bnVsbCxLLnBhcmVudHx8KEsuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX11ZS5leHBvcnRzPU87dmFyIHo9WyJlbmMiLCJwYXJlbnQiLCJjaGlsZHJlbiIsInRh''@;'; put 'put ''ZyIsImFyZ3MiLCJyZXZlcnNlQXJncyIsImNob2ljZSIsIm9wdGlvbmFsIiwiYW55Iiwib2JqIiwidXNlIiwiYWx0ZXJlZFVzZSIsImtleSIsImRlZmF1bHQiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiY29udGFpbnMiXTtPLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBMPXRoaXMu''@;'; put 'put ''X2Jhc2VTdGF0ZSxLPXt9O3ouZm9yRWFjaChmdW5jdGlvbihXKXtLW1ddPUxbV119KTt2YXIgVT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihLLnBhcmVudCk7cmV0dXJuIFUuX2Jhc2VTdGF0ZT1LLFV9LE8ucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlO1Au''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihLKXt0aGlzW0tdPWZ1bmN0aW9uKCl7dmFyIFc9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIEwuY2hpbGRyZW4ucHVzaChXKSxXW0tdLmFwcGx5KFcsYXJndW1lbnRzKX19LHRoaXMpfSxPLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihMKXt2YXIg''@;'; put 'put ''Sz10aGlzLl9iYXNlU3RhdGU7QihudWxsPT09Sy5wYXJlbnQpLEwuY2FsbCh0aGlzKSxLLmNoaWxkcmVuPUsuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBVLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksQi5lcXVhbChLLmNoaWxkcmVuLmxlbmd0aCwxLCJSb290''@;'; put 'put ''IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQiKX0sTy5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFU9TC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTtMPUwuZmlsdGVy''@;'; put 'put ''KGZ1bmN0aW9uKFcpe3JldHVybiEoVyBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpfSx0aGlzKSwwIT09VS5sZW5ndGgmJihCKG51bGw9PT1LLmNoaWxkcmVuKSxLLmNoaWxkcmVuPVUsVS5mb3JFYWNoKGZ1bmN0aW9uKFcpe1cuX2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAh''@;'; put 'put ''PT1MLmxlbmd0aCYmKEIobnVsbD09PUsuYXJncyksSy5hcmdzPUwsSy5yZXZlcnNlQXJncz1MLm1hcChmdW5jdGlvbihXKXtpZigib2JqZWN0IiE9dHlwZW9mIFd8fFcuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIFc7dmFyIFk9e307cmV0dXJuIE9iamVjdC5rZXlzKFcpLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24ocSl7cT09KDB8cSkmJihxfD0wKSxZW1dbcV1dPXF9KSxZfSkpfSxbIl9wZWVrVGFnIiwiX2RlY29kZVRhZyIsIl91c2UiLCJfZGVjb2RlU3RyIiwiX2RlY29kZU9iamlkIiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVsbCIsIl9kZWNvZGVJbnQiLCJfZGVjb2RlQm9vbCIsIl9k''@;'; put 'put ''ZWNvZGVMaXN0IiwiX2VuY29kZUNvbXBvc2l0ZSIsIl9lbmNvZGVTdHIiLCJfZW5jb2RlT2JqaWQiLCJfZW5jb2RlVGltZSIsIl9lbmNvZGVOdWxsIiwiX2VuY29kZUludCIsIl9lbmNvZGVCb29sIl0uZm9yRWFjaChmdW5jdGlvbihOKXtPLnByb3RvdHlwZVtOXT1mdW5jdGlvbigpe3Rocm93''@;'; put 'put ''IG5ldyBFcnJvcihOKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIit0aGlzLl9iYXNlU3RhdGUuZW5jKX19KSx3LmZvckVhY2goZnVuY3Rpb24oTil7Ty5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt2YXIgSz10aGlzLl9iYXNlU3RhdGUsVT1BcnJheS5wcm90b3R5cGUuc2xpY2Uu''@;'; put 'put ''Y2FsbChhcmd1bWVudHMpO3JldHVybiBCKG51bGw9PT1LLnRhZyksSy50YWc9Tix0aGlzLl91c2VBcmdzKFUpLHRoaXN9fSksTy5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKEwpe0IoTCk7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLnVzZSksSy51c2U9TCx0aGlzfSxP''@;'; put 'put ''LnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUub3B0aW9uYWw9ITAsdGhpc30sTy5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5kZWZhdWx0KSxLLmRlZmF1bHQ9TCxLLm9w''@;'; put 'put ''dGlvbmFsPSEwLHRoaXN9LE8ucHJvdG90eXBlLmV4cGxpY2l0PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5leHBsaWNpdCYmbnVsbD09PUsuaW1wbGljaXQpLEsuZXhwbGljaXQ9TCx0aGlzfSxPLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlv''@;'; put 'put ''bihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuZXhwbGljaXQmJm51bGw9PT1LLmltcGxpY2l0KSxLLmltcGxpY2l0PUwsdGhpc30sTy5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlLEs9QXJyYXkucHJvdG90eXBlLnNsaWNl''@;'; put 'put ''LmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gTC5vYmo9ITAsMCE9PUsubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKEspLHRoaXN9LE8ucHJvdG90eXBlLmtleT1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsua2V5KSxLLmtleT1MLHRoaXN9LE8ucHJvdG90''@;'; put 'put ''eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUuYW55PSEwLHRoaXN9LE8ucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuY2hvaWNlKSxLLmNob2ljZT1MLHRoaXMuX3VzZUFyZ3MoT2JqZWN0''@;'; put 'put ''LmtleXMoTCkubWFwKGZ1bmN0aW9uKFUpe3JldHVybiBMW1VdfSkpLHRoaXN9LE8ucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy51c2UpLEsuY29udGFpbnM9TCx0aGlzfSxPLnByb3RvdHlwZS5fZGVjb2RlPWZ1''@;'; put 'put ''bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1VLnBhcmVudClyZXR1cm4gTC53cmFwUmVzdWx0KFUuY2hpbGRyZW5bMF0uX2RlY29kZShMLEspKTt2YXIgbmUsVz1VLmRlZmF1bHQsWT0hMCxxPW51bGw7aWYobnVsbCE9PVUua2V5JiYocT1MLmVudGVyS2V5KFUu''@;'; put 'put ''a2V5KSksVS5vcHRpb25hbCl7dmFyIGVlPW51bGw7aWYobnVsbCE9PVUuZXhwbGljaXQ/ZWU9VS5leHBsaWNpdDpudWxsIT09VS5pbXBsaWNpdD9lZT1VLmltcGxpY2l0Om51bGwhPT1VLnRhZyYmKGVlPVUudGFnKSxudWxsIT09ZWV8fFUuYW55KXtpZihZPXRoaXMuX3BlZWtUYWcoTCxlZSxV''@;'; put 'put ''LmFueSksTC5pc0Vycm9yKFkpKXJldHVybiBZfWVsc2V7dmFyIEo9TC5zYXZlKCk7dHJ5e251bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFnLEwsSyk6dGhpcy5fZGVjb2RlQ2hvaWNlKEwsSyksWT0hMH1jYXRjaHtZPSExfUwucmVzdG9yZShKKX19aWYoVS5vYmomJlkm''@;'; put 'put ''JihuZT1MLmVudGVyT2JqZWN0KCkpLFkpe2lmKG51bGwhPT1VLmV4cGxpY2l0KXt2YXIgaWU9dGhpcy5fZGVjb2RlVGFnKEwsVS5leHBsaWNpdCk7aWYoTC5pc0Vycm9yKGllKSlyZXR1cm4gaWU7TD1pZX12YXIgbGU9TC5vZmZzZXQ7aWYobnVsbD09PVUudXNlJiZudWxsPT09VS5jaG9pY2Up''@;'; put 'put ''e1UuYW55JiYoSj1MLnNhdmUoKSk7dmFyIG1lPXRoaXMuX2RlY29kZVRhZyhMLG51bGwhPT1VLmltcGxpY2l0P1UuaW1wbGljaXQ6VS50YWcsVS5hbnkpO2lmKEwuaXNFcnJvcihtZSkpcmV0dXJuIG1lO1UuYW55P1c9TC5yYXcoSik6TD1tZX1pZihLJiZLLnRyYWNrJiZudWxsIT09VS50YWcm''@;'; put 'put ''JksudHJhY2soTC5wYXRoKCksbGUsTC5sZW5ndGgsInRhZ2dlZCIpLEsmJksudHJhY2smJm51bGwhPT1VLnRhZyYmSy50cmFjayhMLnBhdGgoKSxMLm9mZnNldCxMLmxlbmd0aCwiY29udGVudCIpLFUuYW55fHwoVz1udWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRhZyxM''@;'; put 'put ''LEspOnRoaXMuX2RlY29kZUNob2ljZShMLEspKSxMLmlzRXJyb3IoVykpcmV0dXJuIFc7aWYoIVUuYW55JiZudWxsPT09VS5jaG9pY2UmJm51bGwhPT1VLmNoaWxkcmVuJiZVLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oU2Upe1NlLl9kZWNvZGUoTCxLKX0pLFUuY29udGFpbnMmJigib2N0''@;'; put 'put ''c3RyIj09PVUudGFnfHwiYml0c3RyIj09PVUudGFnKSl7dmFyIF9lPW5ldyBnKFcpO1c9dGhpcy5fZ2V0VXNlKFUuY29udGFpbnMsTC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoX2UsSyl9fXJldHVybiBVLm9iaiYmWSYmKFc9TC5sZWF2ZU9iamVjdChuZSkpLG51bGw9PT1VLmtleXx8''@;'; put 'put ''bnVsbD09PVcmJiEwIT09WT9udWxsIT09cSYmTC5leGl0S2V5KHEpOkwubGVhdmVLZXkocSxVLmtleSxXKSxXfSxPLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09THx8InNldCI9PT1MP251bGw6InNl''@;'; put 'put ''cW9mIj09PUx8fCJzZXRvZiI9PT1MP3RoaXMuX2RlY29kZUxpc3QoSyxMLFcuYXJnc1swXSxVKTovc3RyJC8udGVzdChMKT90aGlzLl9kZWNvZGVTdHIoSyxMLFUpOiJvYmppZCI9PT1MJiZXLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoSyxXLmFyZ3NbMF0sVy5hcmdzWzFdLFUpOiJvYmppZCI9''@;'; put 'put ''PT1MP3RoaXMuX2RlY29kZU9iamlkKEssbnVsbCxudWxsLFUpOiJnZW50aW1lIj09PUx8fCJ1dGN0aW1lIj09PUw/dGhpcy5fZGVjb2RlVGltZShLLEwsVSk6Im51bGxfIj09PUw/dGhpcy5fZGVjb2RlTnVsbChLLFUpOiJib29sIj09PUw/dGhpcy5fZGVjb2RlQm9vbChLLFUpOiJvYmpEZXNj''@;'; put 'put ''Ij09PUw/dGhpcy5fZGVjb2RlU3RyKEssTCxVKToiaW50Ij09PUx8fCJlbnVtIj09PUw/dGhpcy5fZGVjb2RlSW50KEssVy5hcmdzJiZXLmFyZ3NbMF0sVSk6bnVsbCE9PVcudXNlP3RoaXMuX2dldFVzZShXLnVzZSxLLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShLLFUpOksuZXJyb3Io''@;'; put 'put ''InVua25vd24gdGFnOiAiK0wpfSxPLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBVLnVzZURlY29kZXI9dGhpcy5fdXNlKEwsSyksQihudWxsPT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxVLnVzZURlY29kZXI9''@;'; put 'put ''VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sVS5pbXBsaWNpdCE9PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoVS51c2VEZWNvZGVyPVUudXNlRGVjb2Rlci5jbG9uZSgpLFUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PVUuaW1wbGljaXQpLFUu''@;'; put 'put ''dXNlRGVjb2Rlcn0sTy5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZSxXPW51bGwsWT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoVS5jaG9pY2UpLnNvbWUoZnVuY3Rpb24ocSl7dmFyIGVlPUwuc2F2ZSgpLEo9VS5jaG9pY2VbcV07dHJ5''@;'; put 'put ''e3ZhciBuZT1KLl9kZWNvZGUoTCxLKTtpZihMLmlzRXJyb3IobmUpKXJldHVybiExO1c9e3R5cGU6cSx2YWx1ZTpuZX0sWT0hMH1jYXRjaHtyZXR1cm4gTC5yZXN0b3JlKGVlKSwhMX1yZXR1cm4hMH0sdGhpcyksWT9XOkwuZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSxPLnByb3RvdHlw''@;'; put 'put ''ZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihMKXtyZXR1cm4gbmV3IF8oTCx0aGlzLnJlcG9ydGVyKX0sTy5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1XLmRlZmF1bHR8fFcuZGVmYXVsdCE9PUwpe3ZhciBZ''@;'; put 'put ''PXRoaXMuX2VuY29kZVZhbHVlKEwsSyxVKTtpZih2b2lkIDAhPT1ZJiYhdGhpcy5fc2tpcERlZmF1bHQoWSxLLFUpKXJldHVybiBZfX0sTy5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcucGFyZW50KXJldHVy''@;'; put 'put ''biBXLmNoaWxkcmVuWzBdLl9lbmNvZGUoTCxLfHxuZXcgSSk7dmFyIEo9bnVsbDtpZih0aGlzLnJlcG9ydGVyPUssVy5vcHRpb25hbCYmdm9pZCAwPT09TCl7aWYobnVsbD09PVcuZGVmYXVsdClyZXR1cm47TD1XLmRlZmF1bHR9dmFyIFk9bnVsbCxxPSExO2lmKFcuYW55KUo9dGhpcy5fY3Jl''@;'; put 'put ''YXRlRW5jb2RlckJ1ZmZlcihMKTtlbHNlIGlmKFcuY2hvaWNlKUo9dGhpcy5fZW5jb2RlQ2hvaWNlKEwsSyk7ZWxzZSBpZihXLmNvbnRhaW5zKVk9dGhpcy5fZ2V0VXNlKFcuY29udGFpbnMsVSkuX2VuY29kZShMLEspLHE9ITA7ZWxzZSBpZihXLmNoaWxkcmVuKVk9Vy5jaGlsZHJlbi5tYXAo''@;'; put 'put ''ZnVuY3Rpb24obGUpe2lmKCJudWxsXyI9PT1sZS5fYmFzZVN0YXRlLnRhZylyZXR1cm4gbGUuX2VuY29kZShudWxsLEssTCk7aWYobnVsbD09PWxlLl9iYXNlU3RhdGUua2V5KXJldHVybiBLLmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO3ZhciBtZT1LLmVudGVyS2V5KGxlLl9i''@;'; put 'put ''YXNlU3RhdGUua2V5KTtpZigib2JqZWN0IiE9dHlwZW9mIEwpcmV0dXJuIEsuZXJyb3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdCIpO3ZhciBfZT1sZS5fZW5jb2RlKExbbGUuX2Jhc2VTdGF0ZS5rZXldLEssTCk7cmV0dXJuIEsubGVhdmVLZXkobWUpLF9lfSx0''@;'; put 'put ''aGlzKS5maWx0ZXIoZnVuY3Rpb24obGUpe3JldHVybiBsZX0pLFk9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihZKTtlbHNlIGlmKCJzZXFvZiI9PT1XLnRhZ3x8InNldG9mIj09PVcudGFnKXtpZighVy5hcmdzfHwxIT09Vy5hcmdzLmxlbmd0aClyZXR1cm4gSy5lcnJvcigiVG9vIG1hbnkg''@;'; put 'put ''YXJncyBmb3IgOiAiK1cudGFnKTtpZighQXJyYXkuaXNBcnJheShMKSlyZXR1cm4gSy5lcnJvcigic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheSIpO3ZhciBlZT10aGlzLmNsb25lKCk7ZWUuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLFk9dGhpcy5fY3JlYXRlRW5jb2RlckJ1''@;'; put 'put ''ZmZlcihMLm1hcChmdW5jdGlvbihsZSl7cmV0dXJuIHRoaXMuX2dldFVzZSh0aGlzLl9iYXNlU3RhdGUuYXJnc1swXSxMKS5fZW5jb2RlKGxlLEspfSxlZSkpfWVsc2UgbnVsbCE9PVcudXNlP0o9dGhpcy5fZ2V0VXNlKFcudXNlLFUpLl9lbmNvZGUoTCxLKTooWT10aGlzLl9lbmNvZGVQcmlt''@;'; put 'put ''aXRpdmUoVy50YWcsTCkscT0hMCk7aWYoIVcuYW55JiZudWxsPT09Vy5jaG9pY2Upe3ZhciBuZT1udWxsIT09Vy5pbXBsaWNpdD9XLmltcGxpY2l0OlcudGFnLGllPW51bGw9PT1XLmltcGxpY2l0PyJ1bml2ZXJzYWwiOiJjb250ZXh0IjtudWxsPT09bmU/bnVsbD09PVcudXNlJiZLLmVycm9y''@;'; put 'put ''KCJUYWcgY291bGQgYmUgb21pdHRlZCBvbmx5IGZvciAudXNlKCkiKTpudWxsPT09Vy51c2UmJihKPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShuZSxxLGllLFkpKX1yZXR1cm4gbnVsbCE9PVcuZXhwbGljaXQmJihKPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShXLmV4cGxpY2l0LCExLCJjb250ZXh0''@;'; put 'put ''IixKKSksSn0sTy5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZSxXPVUuY2hvaWNlW0wudHlwZV07cmV0dXJuIFd8fEIoITEsTC50eXBlKyIgbm90IGZvdW5kIGluICIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoVS5jaG9pY2Up''@;'; put 'put ''KSksVy5fZW5jb2RlKEwudmFsdWUsSyl9LE8ucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QoTCkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLEwpO2lmKCJvYmppZCI9PT1MJiZVLmFyZ3MpcmV0dXJu''@;'; put 'put ''IHRoaXMuX2VuY29kZU9iamlkKEssVS5yZXZlcnNlQXJnc1swXSxVLmFyZ3NbMV0pO2lmKCJvYmppZCI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChLLG51bGwsbnVsbCk7aWYoImdlbnRpbWUiPT09THx8InV0Y3RpbWUiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShLLEwpO2lm''@;'; put 'put ''KCJudWxsXyI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7aWYoImludCI9PT1MfHwiZW51bSI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVJbnQoSyxVLmFyZ3MmJlUucmV2ZXJzZUFyZ3NbMF0pO2lmKCJib29sIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woSyk7aWYoIm9iakRl''@;'; put 'put ''c2MiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKEssTCk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB0YWc6ICIrTCl9LE8ucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbihMKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KEwpfSxPLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5j''@;'; put 'put ''dGlvbihMKXtyZXR1cm4vXltBLVphLXowLTkgJ1woXClcKyxcLVwuXC86PVw/XSokLy50ZXN0KEwpfX0sODU2OTc6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKTtmdW5jdGlvbiBfKEIpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpCfHx7fSxlcnJvcnM6''@;'; put 'put ''W119fWZ1bmN0aW9uIGcoQix3KXt0aGlzLnBhdGg9Qix0aGlzLnJldGhyb3codyl9WC5hPV8sXy5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih3KXtyZXR1cm4gdyBpbnN0YW5jZW9mIGd9LF8ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlO3Jl''@;'; put 'put ''dHVybntvYmo6dy5vYmoscGF0aExlbjp3LnBhdGgubGVuZ3RofX0sXy5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO1Aub2JqPXcub2JqLFAucGF0aD1QLnBhdGguc2xpY2UoMCx3LnBhdGhMZW4pfSxfLnByb3RvdHlwZS5lbnRlcktleT1m''@;'; put 'put ''dW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2godyl9LF8ucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtQLnBhdGg9UC5wYXRoLnNsaWNlKDAsdy0xKX0sXy5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rp''@;'; put 'put ''b24odyxQLEYpe3ZhciBPPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHcpLG51bGwhPT1PLm9iaiYmKE8ub2JqW1BdPUYpfSxfLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LF8ucHJvdG90eXBlLmVu''@;'; put 'put ''dGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxQPXcub2JqO3JldHVybiB3Lm9iaj17fSxQfSxfLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlLEY9UC5vYmo7cmV0dXJuIFAub2JqPXcsRn0sXy5w''@;'; put 'put ''cm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odyl7dmFyIFAsRj10aGlzLl9yZXBvcnRlclN0YXRlLE89dyBpbnN0YW5jZW9mIGc7aWYoUD1PP3c6bmV3IGcoRi5wYXRoLm1hcChmdW5jdGlvbih6KXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoeikrIl0ifSkuam9pbigiIiksdy5tZXNzYWdlfHx3''@;'; put 'put ''LHcuc3RhY2spLCFGLm9wdGlvbnMucGFydGlhbCl0aHJvdyBQO3JldHVybiBPfHxGLmVycm9ycy5wdXNoKFApLFB9LF8ucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gUC5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlz''@;'; put 'put ''LmlzRXJyb3Iodyk/bnVsbDp3LGVycm9yczpQLmVycm9yc306d30sSShnLEVycm9yKSxnLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHcpe2lmKHRoaXMubWVzc2FnZT13KyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5j''@;'; put 'put ''YXB0dXJlU3RhY2tUcmFjZSh0aGlzLGcpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChQKXt0aGlzLnN0YWNrPVAuc3RhY2t9cmV0dXJuIHRoaXN9fSwzNjI4MzoodWUsWCx5KT0+e3ZhciBJPXkoNDc3NDApO1gudGFnQ2xhc3M9ezA6InVuaXZl''@;'; put 'put ''cnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxYLnRhZ0NsYXNzQnlOYW1lPUkuX3JldmVyc2UoWC50YWdDbGFzcyksWC50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJv''@;'; put 'put ''YmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIz''@;'; put 'put ''OiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LFgudGFnQnlOYW1lPUkuX3JldmVyc2UoWC50YWcpfSw0Nzc0MDoodWUsWCx5KT0+e3ZhciBJPVg7SS5fcmV2''@;'; put 'put ''ZXJzZT1mdW5jdGlvbihnKXt2YXIgQj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZykuZm9yRWFjaChmdW5jdGlvbih3KXsoMHx3KT09dyYmKHd8PTApLEJbZ1t3XV09d30pLEJ9LEkuZGVyPXkoMzYyODMpfSw1NTk0MToodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSg0OTYwOSksZz1fLmJh''@;'; put 'put ''c2UsQj1fLmJpZ251bSx3PV8uY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBQKE4pe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1OLm5hbWUsdGhpcy5lbnRpdHk9Tix0aGlzLnRyZWU9bmV3IEYsdGhpcy50cmVlLl9pbml0KE4uYm9keSl9ZnVuY3Rpb24gRihOKXtnLk5vZGUuY2FsbCh0aGlzLCJk''@;'; put 'put ''ZXIiLE4pfWZ1bmN0aW9uIE8oTixMKXt2YXIgSz1OLnJlYWRVSW50OChMKTtpZihOLmlzRXJyb3IoSykpcmV0dXJuIEs7dmFyIFU9dy50YWdDbGFzc1tLPj42XSxXPSEoMzImSyk7aWYoMzEmfkspSyY9MzE7ZWxzZXt2YXIgWT1LO2ZvcihLPTA7ISgxMjgmflkpOyl7aWYoWT1OLnJlYWRVSW50''@;'; put 'put ''OChMKSxOLmlzRXJyb3IoWSkpcmV0dXJuIFk7Szw8PTcsS3w9MTI3Jll9fXJldHVybntjbHM6VSxwcmltaXRpdmU6Vyx0YWc6Syx0YWdTdHI6dy50YWdbS119fWZ1bmN0aW9uIHooTixMLEspe3ZhciBVPU4ucmVhZFVJbnQ4KEspO2lmKE4uaXNFcnJvcihVKSlyZXR1cm4gVTtpZighTCYmMTI4''@;'; put 'put ''PT09VSlyZXR1cm4gbnVsbDtpZighKDEyOCZVKSlyZXR1cm4gVTt2YXIgVz0xMjcmVTtpZihXPjQpcmV0dXJuIE4uZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtVPTA7Zm9yKHZhciBZPTA7WTxXO1krKyl7VTw8PTg7dmFyIHE9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9y''@;'; put 'put ''KHEpKXJldHVybiBxO1V8PXF9cmV0dXJuIFV9dWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihMLEspe3JldHVybiBMIGluc3RhbmNlb2YgZy5EZWNvZGVyQnVmZmVyfHwoTD1uZXcgZy5EZWNvZGVyQnVmZmVyKEwsSykpLHRoaXMudHJlZS5fZGVjb2RlKEwsSyl9LEko''@;'; put 'put ''RixnLk5vZGUpLEYucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKEwsSyxVKXtpZihMLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgVz1MLnNhdmUoKSxZPU8oTCwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytLKyciJyk7cmV0dXJuIEwuaXNFcnJvcihZKT9ZOihMLnJlc3RvcmUoVyksWS50YWc9''@;'; put 'put ''PT1LfHxZLnRhZ1N0cj09PUt8fFkudGFnU3RyKyJvZiI9PT1LfHxVKX0sRi5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihMLEssVSl7dmFyIFc9TyhMLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytLKyciJyk7aWYoTC5pc0Vycm9yKFcpKXJldHVybiBXO3ZhciBZPXooTCxXLnBy''@;'; put 'put ''aW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrSysnIicpO2lmKEwuaXNFcnJvcihZKSlyZXR1cm4gWTtpZighVSYmVy50YWchPT1LJiZXLnRhZ1N0ciE9PUsmJlcudGFnU3RyKyJvZiIhPT1LKXJldHVybiBMLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytLKyciJyk7''@;'; put 'put ''aWYoVy5wcmltaXRpdmV8fG51bGwhPT1ZKXJldHVybiBMLnNraXAoWSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0srJyInKTt2YXIgcT1MLnNhdmUoKSxlZT10aGlzLl9za2lwVW50aWxFbmQoTCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogIicrdGhpcy50''@;'; put 'put ''YWcrJyInKTtyZXR1cm4gTC5pc0Vycm9yKGVlKT9lZTooWT1MLm9mZnNldC1xLm9mZnNldCxMLnJlc3RvcmUocSksTC5za2lwKFksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytLKyciJykpfSxGLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKEwsSyl7Zm9yKDs7KXt2YXIg''@;'; put 'put ''VT1PKEwsSyk7aWYoTC5pc0Vycm9yKFUpKXJldHVybiBVO3ZhciBZLFc9eihMLFUucHJpbWl0aXZlLEspO2lmKEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZihZPVUucHJpbWl0aXZlfHxudWxsIT09Vz9MLnNraXAoVyk6dGhpcy5fc2tpcFVudGlsRW5kKEwsSyksTC5pc0Vycm9yKFkpKXJldHVy''@;'; put 'put ''biBZO2lmKCJlbmQiPT09VS50YWdTdHIpYnJlYWt9fSxGLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihMLEssVSxXKXtmb3IodmFyIFk9W107IUwuaXNFbXB0eSgpOyl7dmFyIHE9dGhpcy5fcGVla1RhZyhMLCJlbmQiKTtpZihMLmlzRXJyb3IocSkpcmV0dXJuIHE7dmFyIGVlPVUu''@;'; put 'put ''ZGVjb2RlKEwsImRlciIsVyk7aWYoTC5pc0Vycm9yKGVlKSYmcSlicmVhaztZLnB1c2goZWUpfXJldHVybiBZfSxGLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKEwsSyl7aWYoImJpdHN0ciI9PT1LKXt2YXIgVT1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoVSk/VTp7dW51''@;'; put 'put ''c2VkOlUsZGF0YTpMLnJhdygpfX1pZigiYm1wc3RyIj09PUspe3ZhciBXPUwucmF3KCk7aWYoVy5sZW5ndGglMj09MSlyZXR1cm4gTC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtmb3IodmFyIFk9IiIscT0wO3E8Vy5sZW5ndGgvMjtx''@;'; put 'put ''KyspWSs9U3RyaW5nLmZyb21DaGFyQ29kZShXLnJlYWRVSW50MTZCRSgyKnEpKTtyZXR1cm4gWX1pZigibnVtc3RyIj09PUspe3ZhciBlZT1MLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihlZSk/ZWU6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5''@;'; put 'put ''cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1LKXJldHVybiBMLnJhdygpO2lmKCJvYmpEZXNjIj09PUspcmV0dXJuIEwucmF3KCk7aWYoInByaW50c3RyIj09PUspe3ZhciBKPUwucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lz''@;'; put 'put ''UHJpbnRzdHIoSik/SjpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KEspP0wucmF3KCkudG9TdHJpbmcoKTpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitLKyIgdW5z''@;'; put 'put ''dXBwb3J0ZWQiKX0sRi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKEwsSyxVKXtmb3IodmFyIFcsWT1bXSxxPTA7IUwuaXNFbXB0eSgpOyl7dmFyIGVlPUwucmVhZFVJbnQ4KCk7cTw8PTcscXw9MTI3JmVlLDEyOCZlZXx8KFkucHVzaChxKSxxPTApfWlmKDEyOCZlZSYmWS5wdXNo''@;'; put 'put ''KHEpLFc9VT9ZOltZWzBdLzQwfDAsWVswXSU0MF0uY29uY2F0KFkuc2xpY2UoMSkpLEspe3ZhciBpZT1LW1cuam9pbigiICIpXTt2b2lkIDA9PT1pZSYmKGllPUtbVy5qb2luKCIuIildKSx2b2lkIDAhPT1pZSYmKFc9aWUpfXJldHVybiBXfSxGLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5j''@;'; put 'put ''dGlvbihMLEspe3ZhciBVPUwucmF3KCkudG9TdHJpbmcoKTtpZigiZ2VudGltZSI9PT1LKXZhciBXPTB8VS5zbGljZSgwLDQpLFk9MHxVLnNsaWNlKDQsNikscT0wfFUuc2xpY2UoNiw4KSxlZT0wfFUuc2xpY2UoOCwxMCksSj0wfFUuc2xpY2UoMTAsMTIpLG5lPTB8VS5zbGljZSgxMiwxNCk7''@;'; put 'put ''ZWxzZXtpZigidXRjdGltZSIhPT1LKXJldHVybiBMLmVycm9yKCJEZWNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Vz0wfFUuc2xpY2UoMCwyKSxZPTB8VS5zbGljZSgyLDQpLHE9MHxVLnNsaWNlKDQsNiksZWU9MHxVLnNsaWNlKDYsOCksSj0wfFUuc2xpY2UoOCwx''@;'; put 'put ''MCksbmU9MHxVLnNsaWNlKDEwLDEyKSxXPVc8NzA/MmUzK1c6MTkwMCtXfXJldHVybiBEYXRlLlVUQyhXLFktMSxxLGVlLEosbmUsMCl9LEYucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKEwpe3JldHVybiBudWxsfSxGLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbihMKXt2''@;'; put 'put ''YXIgSz1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoSyk/SzowIT09S30sRi5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihMLEspe3ZhciBVPUwucmF3KCksVz1uZXcgQihVKTtyZXR1cm4gSyYmKFc9S1tXLnRvU3RyaW5nKDEwKV18fFcpLFd9LEYucHJvdG90eXBlLl91c2U9''@;'; put 'put ''ZnVuY3Rpb24oTCxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTCYmKEw9TChLKSksTC5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDkxNTU4Oih1ZSxYLHkpPT57dmFyIEk9WDtJLmRlcj15KDU1OTQxKSxJLnBlbT15KDU5MzE2KX0sNTkzMTY6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkz''@;'; put 'put ''KSxfPXkoODM4MzgpLkJ1ZmZlcixnPXkoNTU5NDEpO2Z1bmN0aW9uIEIodyl7Zy5jYWxsKHRoaXMsdyksdGhpcy5lbmM9InBlbSJ9SShCLGcpLHVlLmV4cG9ydHM9QixCLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oUCxGKXtmb3IodmFyIE89UC50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0r''@;'; put 'put ''L2cpLHo9Ri5sYWJlbC50b1VwcGVyQ2FzZSgpLE49L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLEw9LTEsSz0tMSxVPTA7VTxPLmxlbmd0aDtVKyspe3ZhciBXPU9bVV0ubWF0Y2goTik7aWYobnVsbCE9PVcmJldbMl09PT16KXtpZigtMSE9PUwpe2lmKCJFTkQiIT09V1sxXSli''@;'; put 'put ''cmVhaztLPVU7YnJlYWt9aWYoIkJFR0lOIiE9PVdbMV0pYnJlYWs7TD1VfX1pZigtMT09PUx8fC0xPT09Syl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIreik7dmFyIFk9Ty5zbGljZShMKzEsSykuam9pbigiIik7WS5yZXBsYWNlKC9bXmEtejAtOVwrXC89''@;'; put 'put ''XSsvZ2ksIiIpO3ZhciBxPW5ldyBfKFksImJhc2U2NCIpO3JldHVybiBnLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLHEsRil9fSw3MjE5MzoodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSg4MzgzOCkuQnVmZmVyLGc9eSg0OTYwOSksQj1nLmJhc2Usdz1nLmNvbnN0YW50cy5kZXI7''@;'; put 'put ''ZnVuY3Rpb24gUChOKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Ti5uYW1lLHRoaXMuZW50aXR5PU4sdGhpcy50cmVlPW5ldyBGLHRoaXMudHJlZS5faW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7Qi5Ob2RlLmNhbGwodGhpcywiZGVyIixOKX1mdW5jdGlvbiBPKE4pe3JldHVybiBOPDEw''@;'; put 'put ''PyIwIitOOk59dWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihMLEspe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShMLEspLmpvaW4oKX0sSShGLEIuTm9kZSksRi5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihMLEssVSxXKXt2YXIgSixZPWZ1bmN0''@;'; put 'put ''aW9uIHooTixMLEssVSl7dmFyIFc7aWYoInNlcW9mIj09PU4/Tj0ic2VxIjoic2V0b2YiPT09TiYmKE49InNldCIpLHcudGFnQnlOYW1lLmhhc093blByb3BlcnR5KE4pKVc9dy50YWdCeU5hbWVbTl07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIE58fCgwfE4pIT09TilyZXR1cm4gVS5lcnJv''@;'; put 'put ''cigiVW5rbm93biB0YWc6ICIrTik7Vz1OfXJldHVybiBXPj0zMT9VLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooTHx8KFd8PTMyKSxXfD13LnRhZ0NsYXNzQnlOYW1lW0t8fCJ1bml2ZXJzYWwiXTw8Nil9KEwsSyxVLHRoaXMucmVwb3J0ZXIpO2lmKFcu''@;'; put 'put ''bGVuZ3RoPDEyOClyZXR1cm4oSj1uZXcgXygyKSlbMF09WSxKWzFdPVcubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osV10pO2Zvcih2YXIgcT0xLGVlPVcubGVuZ3RoO2VlPj0yNTY7ZWU+Pj04KXErKzsoSj1uZXcgXygyK3EpKVswXT1ZLEpbMV09MTI4fHEsZWU9MStxO2Zv''@;'; put 'put ''cih2YXIgbmU9Vy5sZW5ndGg7bmU+MDtlZS0tLG5lPj49OClKW2VlXT0yNTUmbmU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osV10pfSxGLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEwsSyl7aWYoImJpdHN0ciI9PT1LKXJldHVybiB0aGlzLl9jcmVhdGVFbmNv''@;'; put 'put ''ZGVyQnVmZmVyKFswfEwudW51c2VkLEwuZGF0YV0pO2lmKCJibXBzdHIiPT09Syl7Zm9yKHZhciBVPW5ldyBfKDIqTC5sZW5ndGgpLFc9MDtXPEwubGVuZ3RoO1crKylVLndyaXRlVUludDE2QkUoTC5jaGFyQ29kZUF0KFcpLDIqVyk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIo''@;'; put 'put ''VSl9cmV0dXJuIm51bXN0ciI9PT1LP3RoaXMuX2lzTnVtc3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIi''@;'; put 'put ''PT09Sz90aGlzLl9pc1ByaW50c3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRz''@;'; put 'put ''LCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChLKXx8Im9iakRlc2MiPT09Sz90aGlzLl9jcmVhdGVF''@;'; put 'put ''bmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTCxLLFUpe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRoaXMu''@;'; put 'put ''cmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtMPUtbTF0uc3BsaXQoL1tcc1wu''@;'; put 'put ''XSsvZyk7Zm9yKHZhciBXPTA7VzxMLmxlbmd0aDtXKyspTFtXXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoTCkpZm9yKEw9TC5zbGljZSgpLFc9MDtXPEwubGVuZ3RoO1crKylMW1ddfD0wO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgp''@;'; put 'put ''IHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoTCkpO2lmKCFVKXtpZihMWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7TC5zcGxpY2UoMCwyLDQwKkxbMF0rTFsxXSl9''@;'; put 'put ''dmFyIFk9MDtmb3IoVz0wO1c8TC5sZW5ndGg7VysrKXt2YXIgcT1MW1ddO2ZvcihZKys7cT49MTI4O3E+Pj03KVkrK312YXIgZWU9bmV3IF8oWSksSj1lZS5sZW5ndGgtMTtmb3IoVz1MLmxlbmd0aC0xO1c+PTA7Vy0tKWZvcihlZVtKLS1dPTEyNyYocT1MW1ddKTsocT4+PTcpPjA7KWVlW0ot''@;'; put 'put ''LV09MTI4fDEyNyZxO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGVlKX0sRi5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oTCxLKXt2YXIgVSxXPW5ldyBEYXRlKEwpO3JldHVybiJnZW50aW1lIj09PUs/VT1bTyhXLmdldEZ1bGxZZWFyKCkpLE8oVy5nZXRVVENNb250''@;'; put 'put ''aCgpKzEpLE8oVy5nZXRVVENEYXRlKCkpLE8oVy5nZXRVVENIb3VycygpKSxPKFcuZ2V0VVRDTWludXRlcygpKSxPKFcuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PUs/VT1bTyhXLmdldEZ1bGxZZWFyKCklMTAwKSxPKFcuZ2V0VVRDTW9udGgoKSsxKSxPKFcu''@;'; put 'put ''Z2V0VVRDRGF0ZSgpKSxPKFcuZ2V0VVRDSG91cnMoKSksTyhXLmdldFVUQ01pbnV0ZXMoKSksTyhXLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2Rl''@;'; put 'put ''U3RyKFUsIm9jdHN0ciIpfSxGLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sRi5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihMLEspe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRo''@;'; put 'put ''aXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoTCkp''@;'; put 'put ''O0w9S1tMXX1pZigibnVtYmVyIiE9dHlwZW9mIEwmJiFfLmlzQnVmZmVyKEwpKXt2YXIgVT1MLnRvQXJyYXkoKTshTC5zaWduJiYxMjgmVVswXSYmVS51bnNoaWZ0KDApLEw9bmV3IF8oVSl9aWYoXy5pc0J1ZmZlcihMKSl7dmFyIFc9TC5sZW5ndGg7MD09PUwubGVuZ3RoJiZXKys7dmFyIHE9''@;'; put 'put ''bmV3IF8oVyk7cmV0dXJuIEwuY29weShxKSwwPT09TC5sZW5ndGgmJihxWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocSl9aWYoTDwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk7aWYoTDwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIo''@;'; put 'put ''WzAsTF0pO1c9MTtmb3IodmFyIFk9TDtZPj0yNTY7WT4+PTgpVysrO2ZvcihZPShxPW5ldyBBcnJheShXKSkubGVuZ3RoLTE7WT49MDtZLS0pcVtZXT0yNTUmTCxMPj49ODtyZXR1cm4gMTI4JnFbMF0mJnEudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBfKHEpKX0s''@;'; put 'put ''Ri5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTD8yNTU6MCl9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTCxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTCYmKEw9TChLKSksTC5fZ2V0RW5jb2RlcigiZGVy''@;'; put 'put ''IikudHJlZX0sRi5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKEwsSyxVKXt2YXIgWSxXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5kZWZhdWx0KXJldHVybiExO3ZhciBxPUwuam9pbigpO2lmKHZvaWQgMD09PVcuZGVmYXVsdEJ1ZmZlciYmKFcuZGVmYXVsdEJ1ZmZlcj10''@;'; put 'put ''aGlzLl9lbmNvZGVWYWx1ZShXLmRlZmF1bHQsSyxVKS5qb2luKCkpLHEubGVuZ3RoIT09Vy5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoWT0wO1k8cS5sZW5ndGg7WSsrKWlmKHFbWV0hPT1XLmRlZmF1bHRCdWZmZXJbWV0pcmV0dXJuITE7cmV0dXJuITB9fSwyMjcxNDoodWUs''@;'; put 'put ''WCx5KT0+e3ZhciBJPVg7SS5kZXI9eSg3MjE5MyksSS5wZW09eSgyNDgxNil9LDI0ODE2Oih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5MyksXz15KDcyMTkzKTtmdW5jdGlvbiBnKEIpe18uY2FsbCh0aGlzLEIpLHRoaXMuZW5jPSJwZW0ifUkoZyxfKSx1ZS5leHBvcnRzPWcsZy5wcm90b3R5cGUu''@;'; put 'put ''ZW5jb2RlPWZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBPPV8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdykudG9TdHJpbmcoImJhc2U2NCIpLHo9WyItLS0tLUJFR0lOICIrUC5sYWJlbCsiLS0tLS0iXSxOPTA7TjxPLmxlbmd0aDtOKz02NCl6LnB1c2goTy5zbGljZShOLE4rNjQpKTtyZXR1''@;'; put 'put ''cm4gei5wdXNoKCItLS0tLUVORCAiK1AubGFiZWwrIi0tLS0tIiksei5qb2luKCJcbiIpfX0sOTY4Njc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIp''@;'; put 'put ''fWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8u''@;'; put 'put ''Qk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg3ODk4MikuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYm''@;'; put 'put ''Yjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxU''@;'; put 'put ''O0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53''@;'; put 'put ''b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgp''@;'; put 'put ''e2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0o''@;'; put 'put ''cD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5''@;'; put 'put ''KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcx''@;'; put 'put ''MDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJh''@;'; put 'put ''eSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgv''@;'; put 'put ''MyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0Mt''@;'; put 'put ''MV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8''@;'; put 'put ''OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWls''@;'; put 'put ''KChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0''@;'; put 'put ''aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4''@;'; put 'put ''PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1U''@;'; put 'put ''L2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7''@;'; put 'put ''dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHAp''@;'; put 'put ''e3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9u''@;'; put 'put ''ZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhp''@;'; put 'put ''cy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIs''@;'; put 'put ''IjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEy''@;'; put 'put ''NSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYy''@;'; put 'put ''NSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgr''@;'; put 'put ''cC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0''@;'; put 'put ''aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAw''@;'; put 'put ''IT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7''@;'; put 'put ''dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50''@;'; put 'put ''b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDsh''@;'; put 'put ''YWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXToz''@;'; put 'put ''PT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpw''@;'; put 'put ''fSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5j''@;'; put 'put ''dGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2ly''@;'; put 'put ''ZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxq''@;'; put 'put ''W21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5''@;'; put 'put ''cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90''@;'; put 'put ''b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zv''@;'; put 'put ''cih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3Ro''@;'; put 'put ''KCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhp''@;'; put 'put ''cy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5l''@;'; put 'put ''Zz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0''@;'; put 'put ''aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5p''@;'; put 'put ''dW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5s''@;'; put 'put ''ZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNs''@;'; put 'put ''b25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24o''@;'; put 'put ''cCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tD''@;'; put 'put ''XT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9y''@;'; put 'put ''KHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMm''@;'; put 'put ''fnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1''@;'; put 'put ''bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09''@;'; put 'put ''cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09''@;'; put 'put ''NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0''@;'; put 'put ''aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdh''@;'; put 'put ''dGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+''@;'; put 'put ''cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigp''@;'; put 'put ''fWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53''@;'; put 'put ''b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3Ro''@;'; put 'put ''O2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlz''@;'; put 'put ''Lmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14''@;'; put 'put ''LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZl''@;'; put 'put ''Pj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEz''@;'; put 'put ''LHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0w''@;'; put 'put ''fFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2''@;'; put 'put ''ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8''@;'; put 'put ''MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1t''@;'; put 'put ''K01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVs''@;'; put 'put ''KERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxm''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11''@;'; put 'put ''bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUs''@;'; put 'put ''V3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8''@;'; put 'put ''MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGgu''@;'; put 'put ''aW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''c3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGgu''@;'; put 'put ''aW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUs''@;'; put 'put ''V2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8''@;'; put 'put ''MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGgu''@;'; put 'put ''aW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1tK01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUs''@;'; put 'put ''c3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11''@;'; put 'put ''bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2Us''@;'; put 'put ''V3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmltdWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1t''@;'; put 'put ''K01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVs''@;'; put 'put ''KHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxm''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8''@;'; put 'put ''MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01h''@;'; put 'put ''dGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''emUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxm''@;'; put 'put ''bil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9Njcx''@;'; put 'put ''MDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''UWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChP''@;'; put 'put ''ZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmlt''@;'; put 'put ''dWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09''@;'; put 'put ''KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''eXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''JGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChu''@;'; put 'put ''dCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmlt''@;'; put 'put ''dWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09''@;'; put 'put ''KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''eXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxm''@;'; put 'put ''bil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9Njcx''@;'; put 'put ''MDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8''@;'; put 'put ''MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1t''@;'; put 'put ''K01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVs''@;'; put 'put ''KHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDAp''@;'; put 'put ''Kyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZd''@;'; put 'put ''PUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxU''@;'; put 'put ''bz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5u''@;'; put 'put ''ZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20r''@;'; put 'put ''Kyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1''@;'; put 'put ''cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0Mr''@;'; put 'put ''KyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBl''@;'; put 'put ''LnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtq''@;'; put 'put ''PDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNb''@;'; put 'put ''YWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5n''@;'; put 'put ''dWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8y''@;'; put 'put ''O0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5k''@;'; put 'put ''KHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5''@;'; put 'put ''MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0w''@;'; put 'put ''O3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMp''@;'; put 'put ''LEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixI''@;'; put 'put ''LEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxD''@;'; put 'put ''KSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9''@;'; put 'put ''ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5''@;'; put 'put ''KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0''@;'; put 'put ''KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0''@;'; put 'put ''aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PXA/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Lm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxl''@;'; put 'put ''bmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVu''@;'; put 'put ''Z3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9''@;'; put 'put ''NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5s''@;'; put 'put ''ZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigo''@;'; put 'put ''cC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3Io''@;'; put 'put ''dGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0''@;'; put 'put ''aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1''@;'; put 'put ''bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0w''@;'; put 'put ''KTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9''@;'; put 'put ''PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2Jd''@;'; put 'put ''Pj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jk''@;'; put 'put ''c1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhp''@;'; put 'put ''cy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5s''@;'; put 'put ''ZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRo''@;'; put 'put ''aXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tU''@;'; put 'put ''XSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYt''@;'; put 'put ''dGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3Ro''@;'; put 'put ''KTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCoo''@;'; put 'put ''MHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSks''@;'; put 'put ''Qy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXty''@;'; put 'put ''ZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1I''@;'; put 'put ''Lm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/''@;'; put 'put ''e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSks''@;'; put 'put ''bW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSly''@;'; put 'put ''ZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYu''@;'; put 'put ''aWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rp''@;'; put 'put ''b24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIg''@;'; put 'put ''Qz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTsh''@;'; put 'put ''KGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29y''@;'; put 'put ''ZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihI''@;'; put 'put ''KSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25l''@;'; put 'put ''KCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjAp''@;'; put 'put ''Zm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hy''@;'; put 'put ''bigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1''@;'; put 'put ''cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zv''@;'; put 'put ''cig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihD''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53''@;'; put 'put ''b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJl''@;'; put 'put ''dHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0''@;'; put 'put ''aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1w''@;'; put 'put ''PzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7''@;'; put 'put ''dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlz''@;'; put 'put ''Lmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0s''@;'; put 'put ''dy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9y''@;'; put 'put ''Y2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFk''@;'; put 'put ''ZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElT''@;'; put 'put ''dWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwo''@;'; put 'put ''dGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJ''@;'; put 'put ''U3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5y''@;'; put 'put ''ZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBp''@;'; put 'put ''ZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAw''@;'; put 'put ''MDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFu''@;'; put 'put ''IDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gamUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRo''@;'; put 'put ''aXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMu''@;'; put 'put ''bWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9''@;'; put 'put ''cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0x''@;'; put 'put ''KTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhp''@;'; put 'put ''cy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1sw''@;'; put 'put ''XT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5s''@;'; put 'put ''ZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNb''@;'; put 'put ''eF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGll''@;'; put 'put ''KSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1i''@;'; put 'put ''KSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1pl''@;'; put 'put ''cm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7''@;'; put 'put ''dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRo''@;'; put 'put ''aXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikp''@;'; put 'put ''fSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigy''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJu''@;'; put 'put ''KDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0''@;'; put 'put ''ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUu''@;'; put 'put ''cmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChi''@;'; put 'put ''KX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zv''@;'; put 'put ''cih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUt''@;'; put 'put ''LSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0''@;'; put 'put ''VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3''@;'; put 'put ''IGplKHApfSxCKGplLFNlKSxqZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0''@;'; put 'put ''dXJuIGIucmVkPW51bGwsYn0samUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1h''@;'; put 'put ''c2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5''@;'; put 'put ''cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14''@;'; put 'put ''LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''Lmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sNTUxODg6KHVlLFgpPT57IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Zvcih2YXIgeT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xt''@;'; put 'put ''bm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsST1uZXcgVWludDhBcnJheSgyNTYpLF89MDtfPDY0O18rKylJW3kuY2hhckNvZGVBdChfKV09XztYLmw9ZnVuY3Rpb24oZyl7dmFyIHcsQj1uZXcgVWludDhBcnJheShnKSxQPUIubGVuZ3RoLEY9IiI7Zm9yKHc9MDt3PFA7dys9MylGKz15W0Jb''@;'; put 'put ''d10+PjJdLEYrPXlbKDMmQlt3XSk8PDR8Qlt3KzFdPj40XSxGKz15WygxNSZCW3crMV0pPDwyfEJbdysyXT4+Nl0sRis9eVs2MyZCW3crMl1dO3JldHVybiBQJTM9PTI/Rj1GLnN1YnN0cmluZygwLEYubGVuZ3RoLTEpKyI9IjpQJTM9PTEmJihGPUYuc3Vic3RyaW5nKDAsRi5sZW5ndGgtMikr''@;'; put 'put ''Ij09IiksRn0sWC5EPWZ1bmN0aW9uKGcpe3ZhciBQLE8seixOLEwsQj0uNzUqZy5sZW5ndGgsdz1nLmxlbmd0aCxGPTA7Ij0iPT09Z1tnLmxlbmd0aC0xXSYmKEItLSwiPSI9PT1nW2cubGVuZ3RoLTJdJiZCLS0pO3ZhciBLPW5ldyBBcnJheUJ1ZmZlcihCKSxVPW5ldyBVaW50OEFycmF5KEsp''@;'; put 'put ''O2ZvcihQPTA7UDx3O1ArPTQpTz1JW2cuY2hhckNvZGVBdChQKV0sej1JW2cuY2hhckNvZGVBdChQKzEpXSxOPUlbZy5jaGFyQ29kZUF0KFArMildLEw9SVtnLmNoYXJDb2RlQXQoUCszKV0sVVtGKytdPU88PDJ8ej4+NCxVW0YrK109KDE1JnopPDw0fE4+PjIsVVtGKytdPSgzJk4pPDw2fDYz''@;'; put 'put ''Jkw7cmV0dXJuIEt9fSgpfSwxMzk4MToodWUsWCk9PnsidXNlIHN0cmljdCI7WC5ieXRlTGVuZ3RoPWZ1bmN0aW9uIEYoVSl7dmFyIFc9UChVKSxxPVdbMV07cmV0dXJuIDMqKFdbMF0rcSkvNC1xfSxYLnRvQnl0ZUFycmF5PWZ1bmN0aW9uIHooVSl7dmFyIFcsbGUsWT1QKFUpLHE9WVswXSxl''@;'; put 'put ''ZT1ZWzFdLEo9bmV3IF8oZnVuY3Rpb24gTyhVLFcsWSl7cmV0dXJuIDMqKFcrWSkvNC1ZfSgwLHEsZWUpKSxuZT0wLGllPWVlPjA/cS00OnE7Zm9yKGxlPTA7bGU8aWU7bGUrPTQpVz1JW1UuY2hhckNvZGVBdChsZSldPDwxOHxJW1UuY2hhckNvZGVBdChsZSsxKV08PDEyfElbVS5jaGFyQ29k''@;'; put 'put ''ZUF0KGxlKzIpXTw8NnxJW1UuY2hhckNvZGVBdChsZSszKV0sSltuZSsrXT1XPj4xNiYyNTUsSltuZSsrXT1XPj44JjI1NSxKW25lKytdPTI1NSZXO3JldHVybiAyPT09ZWUmJihXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDJ8SVtVLmNoYXJDb2RlQXQobGUrMSldPj40LEpbbmUrK109MjU1Jlcp''@;'; put 'put ''LDE9PT1lZSYmKFc9SVtVLmNoYXJDb2RlQXQobGUpXTw8MTB8SVtVLmNoYXJDb2RlQXQobGUrMSldPDw0fElbVS5jaGFyQ29kZUF0KGxlKzIpXT4+MixKW25lKytdPVc+PjgmMjU1LEpbbmUrK109MjU1JlcpLEp9LFguZnJvbUJ5dGVBcnJheT1mdW5jdGlvbiBLKFUpe2Zvcih2YXIgVyxZPVUu''@;'; put 'put ''bGVuZ3RoLHE9WSUzLGVlPVtdLEo9MTYzODMsbmU9MCxpZT1ZLXE7bmU8aWU7bmUrPUopZWUucHVzaChMKFUsbmUsbmUrSj5pZT9pZTpuZStKKSk7cmV0dXJuIDE9PT1xP2VlLnB1c2goeVsoVz1VW1ktMV0pPj4yXSt5W1c8PDQmNjNdKyI9PSIpOjI9PT1xJiZlZS5wdXNoKHlbKFc9KFVbWS0y''@;'; put 'put ''XTw8OCkrVVtZLTFdKT4+MTBdK3lbVz4+NCY2M10reVtXPDwyJjYzXSsiPSIpLGVlLmpvaW4oIiIpfTtmb3IodmFyIHk9W10sST1bXSxfPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5OkFycmF5LGc9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFy''@;'; put 'put ''c3R1dnd4eXowMTIzNDU2Nzg5Ky8iLEI9MDtCPDY0OysrQil5W0JdPWdbQl0sSVtnLmNoYXJDb2RlQXQoQildPUI7ZnVuY3Rpb24gUChVKXt2YXIgVz1VLmxlbmd0aDtpZihXJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9m''@;'; put 'put ''IDQiKTt2YXIgWT1VLmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PVkmJihZPVcpLFtZLFk9PT1XPzA6NC1ZJTRdfWZ1bmN0aW9uIE4oVSl7cmV0dXJuIHlbVT4+MTgmNjNdK3lbVT4+MTImNjNdK3lbVT4+NiY2M10reVs2MyZVXX1mdW5jdGlvbiBMKFUsVyxZKXtmb3IodmFyIGVlPVtdLEo9VztK''@;'; put 'put ''PFk7Sis9MyllZS5wdXNoKE4oKFVbSl08PDE2JjE2NzExNjgwKSsoVVtKKzFdPDw4JjY1MjgwKSsoMjU1JlVbSisyXSkpKTtyZXR1cm4gZWUuam9pbigiIil9SVs0NV09NjIsSVs5NV09NjN9LDkxNzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv''@;'; put 'put ''biBnKHgsQyl7aWYoIXgpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQih4LEMpe3guc3VwZXJfPUM7dmFyIFQ9ZnVuY3Rpb24oKXt9O1QucHJvdG90eXBlPUMucHJvdG90eXBlLHgucHJvdG90eXBlPW5ldyBULHgucHJvdG90eXBlLmNvbnN0cnVjdG9y''@;'; put 'put ''PXh9ZnVuY3Rpb24gdyh4LEMsVCl7aWYody5pc0JOKHgpKXJldHVybiB4O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT14JiYoKCJsZSI9PT1DfHwiYmUiPT09QykmJihUPUMsQz0xMCksdGhpcy5faW5pdCh4fHwwLEN8''@;'; put 'put ''fDEwLFR8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDQ3NzkwKS5CdWZmZXJ9Y2F0Y2h7''@;'; put 'put ''fWZ1bmN0aW9uIEYoeCxDKXt2YXIgVD14LmNoYXJDb2RlQXQoQyk7cmV0dXJuIFQ+PTQ4JiZUPD01Nz9ULTQ4OlQ+PTY1JiZUPD03MD9ULTU1OlQ+PTk3JiZUPD0xMDI/VC04Nzp2b2lkIGcoITEsIkludmFsaWQgY2hhcmFjdGVyIGluICIreCl9ZnVuY3Rpb24gTyh4LEMsVCl7dmFyIEg9Rih4''@;'; put 'put ''LFQpO3JldHVybiBULTE+PUMmJihIfD1GKHgsVC0xKTw8NCksSH1mdW5jdGlvbiB6KHgsQyxULEgpe2Zvcih2YXIgaj0wLEU9MCxtPU1hdGgubWluKHgubGVuZ3RoLFQpLEE9QztBPG07QSsrKXt2YXIgYWU9eC5jaGFyQ29kZUF0KEEpLTQ4O2oqPUgsRT1hZT49NDk/YWUtNDkrMTA6YWU+PTE3''@;'; put 'put ''P2FlLTE3KzEwOmFlLGcoYWU+PTAmJkU8SCwiSW52YWxpZCBjaGFyYWN0ZXIiKSxqKz1FfXJldHVybiBqfWZ1bmN0aW9uIE4oeCxDKXt4LndvcmRzPUMud29yZHMseC5sZW5ndGg9Qy5sZW5ndGgseC5uZWdhdGl2ZT1DLm5lZ2F0aXZlLHgucmVkPUMucmVkfWlmKHcuaXNCTj1mdW5jdGlvbihD''@;'; put 'put ''KXtyZXR1cm4gQyBpbnN0YW5jZW9mIHd8fG51bGwhPT1DJiYib2JqZWN0Ij09dHlwZW9mIEMmJkMuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KEMud29yZHMpfSx3Lm1heD1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKT4wP0M6VH0sdy5taW49''@;'; put 'put ''ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5jbXAoVCk8MD9DOlR9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEMsVCxIKXtpZigibnVtYmVyIj09dHlwZW9mIEMpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoQyxULEgpO2lmKCJvYmplY3QiPT10eXBlb2YgQylyZXR1cm4gdGhpcy5faW5pdEFy''@;'; put 'put ''cmF5KEMsVCxIKTsiaGV4Ij09PVQmJihUPTE2KSxnKFQ9PT0oMHxUKSYmVD49MiYmVDw9MzYpO3ZhciBqPTA7Ii0iPT09KEM9Qy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihqKyssdGhpcy5uZWdhdGl2ZT0xKSxqPEMubGVuZ3RoJiYoMTY9PT1UP3RoaXMuX3BhcnNlSGV4''@;'; put 'put ''KEMsaixIKToodGhpcy5fcGFyc2VCYXNlKEMsVCxqKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsSCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oQyxULEgpe0M8MCYmKHRoaXMubmVnYXRpdmU9MSxDPS1DKSxDPDY3MTA4ODY0Pyh0aGlz''@;'; put 'put ''LndvcmRzPVs2NzEwODg2MyZDXSx0aGlzLmxlbmd0aD0xKTpDPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcoQzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZDLEMvNjcx''@;'; put 'put ''MDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxULEgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKEMsVCxIKXtpZihnKCJudW1iZXIiPT10eXBlb2YgQy5sZW5ndGgpLEMubGVuZ3RoPD0wKXJl''@;'; put 'put ''dHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKEMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGo9MDtqPHRoaXMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPTA7dmFyIEUsbSxBPTA7''@;'; put 'put ''aWYoImJlIj09PUgpZm9yKGo9Qy5sZW5ndGgtMSxFPTA7aj49MDtqLT0zKXRoaXMud29yZHNbRV18PShtPUNbal18Q1tqLTFdPDw4fENbai0yXTw8MTYpPDxBJjY3MTA4ODYzLHRoaXMud29yZHNbRSsxXT1tPj4+MjYtQSY2NzEwODg2MywoQSs9MjQpPj0yNiYmKEEtPTI2LEUrKyk7ZWxzZSBp''@;'; put 'put ''ZigibGUiPT09SClmb3Ioaj0wLEU9MDtqPEMubGVuZ3RoO2orPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tqXXxDW2orMV08PDh8Q1tqKzJdPDwxNik8PEEmNjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKEMsVCxIKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKEMubGVuZ3RoLVQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGo9MDtqPHRoaXMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pd''@;'; put 'put ''PTA7dmFyIEEsRT0wLG09MDtpZigiYmUiPT09SClmb3Ioaj1DLmxlbmd0aC0xO2o+PVQ7ai09MilBPU8oQyxULGopPDxFLHRoaXMud29yZHNbbV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODtlbHNlIGZvcihqPShDLmxlbmd0aC1UKSUy''@;'; put 'put ''PT0wP1QrMTpUO2o8Qy5sZW5ndGg7ais9MilBPU8oQyxULGopPDxFLHRoaXMud29yZHNbbV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODt0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKEMsVCxIKXt0''@;'; put 'put ''aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgaj0wLEU9MTtFPD02NzEwODg2MztFKj1UKWorKztqLS0sRT1FL1R8MDtmb3IodmFyIG09Qy5sZW5ndGgtSCxBPW0laixhZT1NYXRoLm1pbihtLG0tQSkrSCx0ZT0wLHNlPUg7c2U8YWU7c2UrPWopdGU9eihDLHNlLHNlK2osVCks''@;'; put 'put ''dGhpcy5pbXVsbihFKSx0aGlzLndvcmRzWzBdK3RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXRlOnRoaXMuX2lhZGRuKHRlKTtpZigwIT09QSl7dmFyIHdlPTE7Zm9yKHRlPXooQyxzZSxDLmxlbmd0aCxUKSxzZT0wO3NlPEE7c2UrKyl3ZSo9VDt0aGlzLmltdWxuKHdlKSx0aGlzLndvcmRz''@;'; put 'put ''WzBdK3RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXRlOnRoaXMuX2lhZGRuKHRlKX10aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKEMpe0Mud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylDLndvcmRzW1Rd''@;'; put 'put ''PXRoaXMud29yZHNbVF07Qy5sZW5ndGg9dGhpcy5sZW5ndGgsQy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLEMucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbihDKXtOKEMsdGhpcyl9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHcobnVsbCk7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29weShDKSxDfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8QzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEm''@;'; put 'put ''JjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCks''@;'; put 'put ''dGhpc30sdHlwZW9mIFN5bWJvbDwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yKXRyeXt3LnByb3RvdHlwZVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1MfWNhdGNoe3cucHJvdG90eXBlLmluc3BlY3Q9TH1lbHNlIHcucHJvdG90eXBlLmluc3Bl''@;'; put 'put ''Y3Q9TDtmdW5jdGlvbiBMKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9dmFyIEs9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1''@;'; put 'put ''LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxXPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcx''@;'; put 'put ''LDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2Mjkx''@;'; put 'put ''NTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKHgsQyxUKXtULm5lZ2F0aXZlPUMubmVnYXRpdmVeeC5uZWdhdGl2ZTt2YXIgSD14Lmxlbmd0aCtDLmxlbmd0aHwwO1QubGVuZ3RoPUgsSD1ILTF8MDt2YXIgaj0wfHgud29yZHNbMF0s''@;'; put 'put ''RT0wfEMud29yZHNbMF0sbT1qKkUsYWU9bS82NzEwODg2NHwwO1Qud29yZHNbMF09NjcxMDg4NjMmbTtmb3IodmFyIHRlPTE7dGU8SDt0ZSsrKXtmb3IodmFyIHNlPWFlPj4+MjYsd2U9NjcxMDg4NjMmYWUsVWU9TWF0aC5taW4odGUsQy5sZW5ndGgtMSksSmU9TWF0aC5tYXgoMCx0ZS14Lmxl''@;'; put 'put ''bmd0aCsxKTtKZTw9VWU7SmUrKylzZSs9KG09KGo9MHx4LndvcmRzW3RlLUplfDBdKSooRT0wfEMud29yZHNbSmVdKSt3ZSkvNjcxMDg4NjR8MCx3ZT02NzEwODg2MyZtO1Qud29yZHNbdGVdPTB8d2UsYWU9MHxzZX1yZXR1cm4gMCE9PWFlP1Qud29yZHNbdGVdPTB8YWU6VC5sZW5ndGgtLSxU''@;'; put 'put ''Ll9zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKEMsVCl7dmFyIEg7aWYoVD0wfFR8fDEsMTY9PT0oQz1DfHwxMCl8fCJoZXgiPT09Qyl7SD0iIjtmb3IodmFyIGo9MCxFPTAsbT0wO208dGhpcy5sZW5ndGg7bSsrKXt2YXIgQT10aGlzLndvcmRzW21dLGFlPSgxNjc3NzIx''@;'; put 'put ''NSYoQTw8anxFKSkudG9TdHJpbmcoMTYpO0U9QT4+PjI0LWomMTY3NzcyMTUsKGorPTIpPj0yNiYmKGotPTI2LG0tLSksSD0wIT09RXx8bSE9PXRoaXMubGVuZ3RoLTE/S1s2LWFlLmxlbmd0aF0rYWUrSDphZStIfWZvcigwIT09RSYmKEg9RS50b1N0cmluZygxNikrSCk7SC5sZW5ndGglVCE9''@;'; put 'put ''MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWlmKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpe3ZhciB0ZT1VW0NdLHNlPVdbQ107SD0iIjt2YXIgd2U9dGhpcy5jbG9uZSgpO2Zvcih3ZS5uZWdhdGl2ZT0wOyF3ZS5pc1plcm8oKTspe3ZhciBVZT13ZS5t''@;'; put 'put ''b2RybihzZSkudG9TdHJpbmcoQyk7SD0od2U9d2UuaWRpdm4oc2UpKS5pc1plcm8oKT9VZStIOktbdGUtVWUubGVuZ3RoXStVZStIfWZvcih0aGlzLmlzWmVybygpJiYoSD0iMCIrSCk7SC5sZW5ndGglVCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxI''@;'; put 'put ''fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Qys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10''@;'; put 'put ''aGlzLndvcmRzWzJdP0MrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tQzpDfSx3LnByb3RvdHlwZS50b0pTT049''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNiwyKX0sUCYmKHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoUCxDLFQpfSksdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLnRvQXJyYXlM''@;'; put 'put ''aWtlKEFycmF5LEMsVCl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKEMsVCxIKXt0aGlzLl9zdHJpcCgpO3ZhciBqPXRoaXMuYnl0ZUxlbmd0aCgpLEU9SHx8TWF0aC5tYXgoMSxqKTtnKGo8PUUsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKEU+''@;'; put 'put ''MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIik7dmFyIG09ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5hbGxvY1Vuc2FmZT9DLmFsbG9jVW5zYWZlKFQpOm5ldyBDKFQpfShDLEUpO3JldHVybiB0aGlzWyJfdG9BcnJheUxpa2UiKygibGUiPT09VD8iTEUiOiJCRSIpXShtLGopLG19LHcu''@;'; put 'put ''cHJvdG90eXBlLl90b0FycmF5TGlrZUxFPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPTAsaj0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18ajtDW0grK109MjU1JkEsSDxDLmxlbmd0aCYmKENbSCsrXT1BPj44JjI1NSksSDxDLmxlbmd0aCYmKENb''@;'; put 'put ''SCsrXT1BPj4xNiYyNTUpLDY9PT1tPyhIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjI0JjI1NSksaj0wLG09MCk6KGo9QT4+PjI0LG0rPTIpfWlmKEg8Qy5sZW5ndGgpZm9yKENbSCsrXT1qO0g8Qy5sZW5ndGg7KUNbSCsrXT0wfSx3LnByb3RvdHlwZS5fdG9BcnJheUxpa2VCRT1mdW5jdGlvbihD''@;'; put 'put ''LFQpe2Zvcih2YXIgSD1DLmxlbmd0aC0xLGo9MCxFPTAsbT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIgQT10aGlzLndvcmRzW0VdPDxtfGo7Q1tILS1dPTI1NSZBLEg+PTAmJihDW0gtLV09QT4+OCYyNTUpLEg+PTAmJihDW0gtLV09QT4+MTYmMjU1KSw2PT09bT8oSD49MCYmKENbSC0tXT1B''@;'; put 'put ''Pj4yNCYyNTUpLGo9MCxtPTApOihqPUE+Pj4yNCxtKz0yKX1pZihIPj0wKWZvcihDW0gtLV09ajtIPj0wOylDW0gtLV09MH0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKEMpe3JldHVybiAzMi1NYXRoLmNsejMyKEMpfTpmdW5jdGlvbihDKXt2YXIgVD1DLEg9''@;'; put 'put ''MDtyZXR1cm4gVD49NDA5NiYmKEgrPTEzLFQ+Pj49MTMpLFQ+PTY0JiYoSCs9NyxUPj4+PTcpLFQ+PTgmJihIKz00LFQ+Pj49NCksVD49MiYmKEgrPTIsVD4+Pj0yKSxIK1R9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihDKXtpZigwPT09QylyZXR1cm4gMjY7dmFyIFQ9QyxIPTA7''@;'; put 'put ''cmV0dXJuIDgxOTEmVHx8KEgrPTEzLFQ+Pj49MTMpLDEyNyZUfHwoSCs9NyxUPj4+PTcpLDE1JlR8fChIKz00LFQ+Pj49NCksMyZUfHwoSCs9MixUPj4+PTIpLDEmVHx8SCsrLEh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBUPXRoaXMuX2NvdW50Qml0cyh0aGlzLndv''@;'; put 'put ''cmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK1R9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIEM9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRo''@;'; put 'put ''aXMud29yZHNbVF0pO2lmKEMrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBDfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oQyl7cmV0dXJuIDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oQykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy50ZXN0bihDLTEpP3RoaXMubm90bihDKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05l''@;'; put 'put ''Zz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRo''@;'; put 'put ''aXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oQyl7Zm9yKDt0aGlzLmxlbmd0aDxDLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgVD0wO1Q8Qy5sZW5ndGg7VCsrKXRoaXMud29yZHNbVF09dGhpcy53b3Jkc1tUXXxDLndvcmRzW1RdO3JldHVybiB0aGlz''@;'; put 'put ''Ll9zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1b3IoQyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKEMp''@;'; put 'put ''OkMuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoQyk6Qy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKEMpe3ZhciBUO1Q9dGhpcy5s''@;'; put 'put ''ZW5ndGg+Qy5sZW5ndGg/Qzp0aGlzO2Zvcih2YXIgSD0wO0g8VC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZDLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ULmxlbmd0aCx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKEMpe3JldHVy''@;'; put 'put ''biBnKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChDKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChDKTpDLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKEMpOkMuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oQyl7dmFyIFQsSDt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oVD10aGlzLEg9Qyk6KFQ9QyxIPXRo''@;'; put 'put ''aXMpO2Zvcih2YXIgaj0wO2o8SC5sZW5ndGg7aisrKXRoaXMud29yZHNbal09VC53b3Jkc1tqXV5ILndvcmRzW2pdO2lmKHRoaXMhPT1UKWZvcig7ajxULmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1ULndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1ULmxlbmd0aCx0aGlzLl9zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKEMpe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihDKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihDKTpDLmNs''@;'; put 'put ''b25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKEMpOkMuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIEMmJkM+PTApO3ZhciBUPTB8TWF0aC5jZWlsKEMvMjYpLEg9QyUyNjt0aGlzLl9leHBhbmQoVCksSD4wJiZULS07Zm9yKHZhciBqPTA7ajxUO2orKyl0aGlzLndvcmRzW2pdPTY3MTA4ODYzJn50aGlzLndvcmRzW2pdO3JldHVybiBIPjAmJih0aGlzLndvcmRzW2pdPX50aGlzLndvcmRz''@;'; put 'put ''W2pdJjY3MTA4ODYzPj4yNi1IKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oQyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oQyxUKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIEg9Qy8yNnww''@;'; put 'put ''LGo9QyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1UP3RoaXMud29yZHNbSF18MTw8ajp0aGlzLndvcmRzW0hdJn4oMTw8aiksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihDKXt2YXIgVCxILGo7aWYoMCE9PXRoaXMubmVnYXRpdmUm''@;'; put 'put ''JjA9PT1DLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsVD10aGlzLmlzdWIoQyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZSlyZXR1cm4gQy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLEMubmVn''@;'; put 'put ''YXRpdmU9MSxULl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPkMubGVuZ3RoPyhIPXRoaXMsaj1DKTooSD1DLGo9dGhpcyk7Zm9yKHZhciBFPTAsbT0wO208ai5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1ttXSkrKDB8ai53b3Jkc1ttXSkrRSksRT1UPj4+''@;'; put 'put ''MjY7Zm9yKDswIT09RSYmbTxILmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT02NzEwODg2MyYoVD0oMHxILndvcmRzW21dKStFKSxFPVQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09RSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1FLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihIIT09''@;'; put 'put ''dGhpcylmb3IoO208SC5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09SC53b3Jkc1ttXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEMpe3ZhciBUO3JldHVybiAwIT09Qy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCxUPXRoaXMuc3ViKEMp''@;'; put 'put ''LEMubmVnYXRpdmVePTEsVCk6MD09PUMubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsVD1DLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsVCk6dGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoQyk6Qy5jbG9uZSgpLmlhZGQodGhpcyl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oQyl7aWYoMCE9PUMubmVnYXRpdmUpe0MubmVnYXRpdmU9MDt2YXIgVD10aGlzLmlhZGQoQyk7cmV0dXJuIEMubmVnYXRpdmU9MSxULl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5p''@;'; put 'put ''YWRkKEMpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBqLEUsSD10aGlzLmNtcChDKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhqPXRoaXMsRT1DKTooaj1DLEU9dGhpcyk7Zm9yKHZh''@;'; put 'put ''ciBtPTAsQT0wO0E8RS5sZW5ndGg7QSsrKW09KFQ9KDB8ai53b3Jkc1tBXSktKDB8RS53b3Jkc1tBXSkrbSk+PjI2LHRoaXMud29yZHNbQV09NjcxMDg4NjMmVDtmb3IoOzAhPT1tJiZBPGoubGVuZ3RoO0ErKyltPShUPSgwfGoud29yZHNbQV0pK20pPj4yNix0aGlzLndvcmRzW0FdPTY3MTA4''@;'; put 'put ''ODYzJlQ7aWYoMD09PW0mJkE8ai5sZW5ndGgmJmohPT10aGlzKWZvcig7QTxqLmxlbmd0aDtBKyspdGhpcy53b3Jkc1tBXT1qLndvcmRzW0FdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxBKSxqIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5fc3RyaXAo''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihDKX07dmFyIEo9ZnVuY3Rpb24oQyxULEgpe3ZhciBhZSx0ZSxzZSxqPUMud29yZHMsRT1ULndvcmRzLG09SC53b3JkcyxBPTAsd2U9MHxqWzBdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0w''@;'; put 'put ''fGpbMV0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8alsyXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxqWzNdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfGpbNF0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8als1XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxqWzZd''@;'; put 'put ''LHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfGpbN10saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8als4XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxqWzldLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfEVbMF0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8RVsxXSxobj04''@;'; put 'put ''MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxFWzJdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfEVbM10sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8RVs0XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxFWzVdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfEVbNl0scm49ODE5MSZq''@;'; put 'put ''bix6dD1qbj4+PjEzLGhpPTB8RVs3XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxFWzhdLFh0PTgxOTEmSWksZW49SWk+Pj4xMyx1YT0wfEVbOV0sRWk9ODE5MSZ1YSx2cj11YT4+PjEzO0gubmVnYXRpdmU9Qy5uZWdhdGl2ZV5ULm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBXbj0oQSso''@;'; put 'put ''YWU9TWF0aC5pbXVsKFVlLFF0KSl8MCkrKCg4MTkxJih0ZT0odGU9TWF0aC5pbXVsKFVlLHNuKSkrTWF0aC5pbXVsKEplLFF0KXwwKSk8PDEzKXwwO0E9KChzZT1NYXRoLmltdWwoSmUsc24pKSsodGU+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLGFlPU1hdGguaW11bCh4ZSxR''@;'; put 'put ''dCksdGU9KHRlPU1hdGguaW11bCh4ZSxzbikpK01hdGguaW11bCh2ZSxRdCl8MCxzZT1NYXRoLmltdWwodmUsc24pO3ZhciAkaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLGhuKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCkp''@;'; put 'put ''PDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLGZ0KXwwKSsodGU+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLGFlPU1hdGguaW11bCh6ZSxRdCksdGU9KHRlPU1hdGguaW11bCh6ZSxzbikpK01hdGguaW11bChEZSxRdCl8MCxzZT1NYXRoLmltdWwoRGUsc24pLGFlPWFl''@;'; put 'put ''K01hdGguaW11bCh4ZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKHZlLGZ0KXwwO3ZhciBlaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLFd0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUs''@;'; put 'put ''QXQpfDApK01hdGguaW11bChKZSxXdCl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLEF0KXwwKSsodGU+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLGFlPU1hdGguaW11bChPZSxRdCksdGU9KHRlPU1hdGguaW11bChPZSxzbikpK01hdGguaW11bChJZSxRdCl8''@;'; put 'put ''MCxzZT1NYXRoLmltdWwoSWUsc24pLGFlPWFlK01hdGguaW11bCh6ZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKERlLGZ0KXwwLGFlPWFlK01hdGguaW11bCh4ZSxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVs''@;'; put 'put ''KHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLEF0KXwwO3ZhciBRcj0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLHN0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCkpPDwxMyl8MDtBPSgo''@;'; put 'put ''c2U9c2UrTWF0aC5pbXVsKEplLFV0KXwwKSsodGU+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLGFlPU1hdGguaW11bChrZSxRdCksdGU9KHRlPU1hdGguaW11bChrZSxzbikpK01hdGguaW11bChBZSxRdCl8MCxzZT1NYXRoLmltdWwoQWUsc24pLGFlPWFlK01hdGguaW11bChP''@;'; put 'put ''ZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKEllLGZ0KXwwLGFlPWFlK01hdGguaW11bCh6ZSxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsc2U9c2UrTWF0''@;'; put 'put ''aC5pbXVsKERlLEF0KXwwLGFlPWFlK01hdGguaW11bCh4ZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLFV0KXwwO3ZhciBWaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLFdlKXwwKXwwKSsoKDgxOTEmKHRl''@;'; put 'put ''PSh0ZT10ZStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLFR0KXwwKSsodGU+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLGFlPU1hdGguaW11bChudCxRdCksdGU9KHRlPU1hdGguaW11bChudCxz''@;'; put 'put ''bikpK01hdGguaW11bChRZSxRdCl8MCxzZT1NYXRoLmltdWwoUWUsc24pLGFlPWFlK01hdGguaW11bChrZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKEFlLGZ0KXwwLGFlPWFlK01hdGguaW11bChPZSxXdCl8''@;'; put 'put ''MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKEllLEF0KXwwLGFlPWFlK01hdGguaW11bCh6ZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsc2U9c2UrTWF0aC5pbXVs''@;'; put 'put ''KERlLFV0KXwwLGFlPWFlK01hdGguaW11bCh4ZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLFR0KXwwO3ZhciBOaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLGh0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10''@;'; put 'put ''ZStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLHh0KXwwKSsodGU+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLGFlPU1hdGguaW11bCh5dCxRdCksdGU9KHRlPU1hdGguaW11bCh5dCxzbikpK01h''@;'; put 'put ''dGguaW11bChNdCxRdCl8MCxzZT1NYXRoLmltdWwoTXQsc24pLGFlPWFlK01hdGguaW11bChudCxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKFFlLGZ0KXwwLGFlPWFlK01hdGguaW11bChrZSxXdCl8MCx0ZT0o''@;'; put 'put ''dGU9dGUrTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLEF0KXwwLGFlPWFlK01hdGguaW11bChPZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKEllLFV0''@;'; put 'put ''KXwwLGFlPWFlK01hdGguaW11bCh6ZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKERlLFR0KXwwLGFlPWFlK01hdGguaW11bCh4ZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwodmUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLHh0KXwwO3ZhciBEYT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLHJuKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEpl''@;'; put 'put ''LHp0KXwwKSsodGU+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChpdCxRdCksdGU9KHRlPU1hdGguaW11bChpdCxzbikpK01hdGguaW11bCgkZSxRdCl8MCxzZT1NYXRoLmltdWwoJGUsc24pLGFlPWFlK01hdGguaW11bCh5dCxobil8MCx0ZT0odGU9dGUr''@;'; put 'put ''TWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKE10LGZ0KXwwLGFlPWFlK01hdGguaW11bChudCxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLEF0KXwwLGFl''@;'; put 'put ''PWFlK01hdGguaW11bChrZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLFV0KXwwLGFlPWFlK01hdGguaW11bChPZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUs''@;'; put 'put ''V2UpfDAsc2U9c2UrTWF0aC5pbXVsKEllLFR0KXwwLGFlPWFlK01hdGguaW11bCh6ZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKERlLHh0KXwwLGFlPWFlK01hdGguaW11bCh4ZSxybil8MCx0ZT0odGU9dGUr''@;'; put 'put ''TWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKHZlLHp0KXwwO3ZhciBMcj0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLGNuKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCkpPDwx''@;'; put 'put ''Myl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLGZuKXwwKSsodGU+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLGFlPU1hdGguaW11bChIZSxRdCksdGU9KHRlPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxzZT1NYXRoLmltdWwodXQsc24pLGFlPWFlK01h''@;'; put 'put ''dGguaW11bChpdCxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKCRlLGZ0KXwwLGFlPWFlK01hdGguaW11bCh5dCxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAs''@;'; put 'put ''c2U9c2UrTWF0aC5pbXVsKE10LEF0KXwwLGFlPWFlK01hdGguaW11bChudCxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLFV0KXwwLGFlPWFlK01hdGguaW11bChrZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5p''@;'; put 'put ''bXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLFR0KXwwLGFlPWFlK01hdGguaW11bChPZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKEllLHh0KXwwLGFlPWFlK01h''@;'; put 'put ''dGguaW11bCh6ZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKERlLHp0KXwwLGFlPWFlK01hdGguaW11bCh4ZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAs''@;'; put 'put ''c2U9c2UrTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBXaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLGVuKXwwKSsodGU+''@;'; put 'put ''Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxRdCksdGU9KHRlPU1hdGguaW11bChSdCxzbikpK01hdGguaW11bChQdCxRdCl8MCxzZT1NYXRoLmltdWwoUHQsc24pLGFlPWFlK01hdGguaW11bChIZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhl''@;'; put 'put ''LGZ0KXwwKStNYXRoLmltdWwodXQsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKHV0LGZ0KXwwLGFlPWFlK01hdGguaW11bChpdCxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKCRlLEF0KXwwLGFlPWFlK01hdGguaW11''@;'; put 'put ''bCh5dCxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKE10LFV0KXwwLGFlPWFlK01hdGguaW11bChudCxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsc2U9c2Ur''@;'; put 'put ''TWF0aC5pbXVsKFFlLFR0KXwwLGFlPWFlK01hdGguaW11bChrZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLHh0KXwwLGFlPWFlK01hdGguaW11bChPZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9l''@;'; put 'put ''LHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKEllLHp0KXwwLGFlPWFlK01hdGguaW11bCh6ZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKERlLGZuKXwwLGFlPWFlK01hdGguaW11''@;'; put 'put ''bCh4ZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLGVuKXwwO3ZhciBwYT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsdnIpfDApK01h''@;'; put 'put ''dGguaW11bChKZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLHZyKXwwKSsodGU+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxobiksdGU9KHRlPU1hdGguaW11bChSdCxmdCkpK01hdGguaW11bChQdCxobil8MCxzZT1NYXRo''@;'; put 'put ''LmltdWwoUHQsZnQpLGFlPWFlK01hdGguaW11bChIZSxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLEF0KXwwKStNYXRoLmltdWwodXQsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LEF0KXwwLGFlPWFlK01hdGguaW11bChpdCxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LFV0KXww''@;'; put 'put ''KStNYXRoLmltdWwoJGUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKCRlLFV0KXwwLGFlPWFlK01hdGguaW11bCh5dCxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKE10LFR0KXwwLGFlPWFlK01hdGguaW11bChudCxo''@;'; put 'put ''dCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLHh0KXwwLGFlPWFlK01hdGguaW11bChrZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsc2U9c2UrTWF0aC5p''@;'; put 'put ''bXVsKEFlLHp0KXwwLGFlPWFlK01hdGguaW11bChPZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKEllLGZuKXwwLGFlPWFlK01hdGguaW11bCh6ZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHplLGVuKXww''@;'; put 'put ''KStNYXRoLmltdWwoRGUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKERlLGVuKXwwO3ZhciBRbj0oQSsoYWU9YWUrTWF0aC5pbXVsKHhlLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoeGUsdnIpfDApK01hdGguaW11bCh2ZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0''@;'; put 'put ''aC5pbXVsKHZlLHZyKXwwKSsodGU+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxXdCksdGU9KHRlPU1hdGguaW11bChSdCxBdCkpK01hdGguaW11bChQdCxXdCl8MCxzZT1NYXRoLmltdWwoUHQsQXQpLGFlPWFlK01hdGguaW11bChIZSxzdCl8MCx0''@;'; put 'put ''ZT0odGU9dGUrTWF0aC5pbXVsKEhlLFV0KXwwKStNYXRoLmltdWwodXQsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LFV0KXwwLGFlPWFlK01hdGguaW11bChpdCxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKCRl''@;'; put 'put ''LFR0KXwwLGFlPWFlK01hdGguaW11bCh5dCxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKE10LHh0KXwwLGFlPWFlK01hdGguaW11bChudCxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LHp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoUWUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKFFlLHp0KXwwLGFlPWFlK01hdGguaW11bChrZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKEFlLGZuKXwwLGFlPWFlK01hdGguaW11bChPZSxYdCl8MCx0''@;'; put 'put ''ZT0odGU9dGUrTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKEllLGVuKXwwO3ZhciBsYT0oQSsoYWU9YWUrTWF0aC5pbXVsKHplLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoemUsdnIpfDApK01hdGguaW11bChEZSxF''@;'; put 'put ''aSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKERlLHZyKXwwKSsodGU+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxzdCksdGU9KHRlPU1hdGguaW11bChSdCxVdCkpK01hdGguaW11bChQdCxzdCl8MCxzZT1NYXRoLmltdWwoUHQsVXQp''@;'; put 'put ''LGFlPWFlK01hdGguaW11bChIZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLFR0KXwwKStNYXRoLmltdWwodXQsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LFR0KXwwLGFlPWFlK01hdGguaW11bChpdCxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''JGUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKCRlLHh0KXwwLGFlPWFlK01hdGguaW11bCh5dCxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsc2U9c2UrTWF0aC5pbXVsKE10LHp0KXwwLGFlPWFlK01hdGguaW11bChudCxjbil8MCx0ZT0odGU9''@;'; put 'put ''dGUrTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKFFlLGZuKXwwLGFlPWFlK01hdGguaW11bChrZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLGVuKXww''@;'; put 'put ''O3ZhciB5YT0oQSsoYWU9YWUrTWF0aC5pbXVsKE9lLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoT2UsdnIpfDApK01hdGguaW11bChJZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEllLHZyKXwwKSsodGU+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEm''@;'; put 'put ''PTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxXZSksdGU9KHRlPU1hdGguaW11bChSdCxUdCkpK01hdGguaW11bChQdCxXZSl8MCxzZT1NYXRoLmltdWwoUHQsVHQpLGFlPWFlK01hdGguaW11bChIZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLHh0KXwwKStNYXRoLmltdWwodXQsaHQp''@;'; put 'put ''fDAsc2U9c2UrTWF0aC5pbXVsKHV0LHh0KXwwLGFlPWFlK01hdGguaW11bChpdCxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKCRlLHp0KXwwLGFlPWFlK01hdGguaW11bCh5dCxjbil8MCx0ZT0odGU9dGUrTWF0''@;'; put 'put ''aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsc2U9c2UrTWF0aC5pbXVsKE10LGZuKXwwLGFlPWFlK01hdGguaW11bChudCxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLGVuKXwwO3ZhciBM''@;'; put 'put ''YT0oQSsoYWU9YWUrTWF0aC5pbXVsKGtlLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsdnIpfDApK01hdGguaW11bChBZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEFlLHZyKXwwKSsodGU+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4''@;'; put 'put ''ODYzLGFlPU1hdGguaW11bChSdCxodCksdGU9KHRlPU1hdGguaW11bChSdCx4dCkpK01hdGguaW11bChQdCxodCl8MCxzZT1NYXRoLmltdWwoUHQseHQpLGFlPWFlK01hdGguaW11bChIZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLHp0KXwwKStNYXRoLmltdWwodXQscm4pfDAsc2U9''@;'; put 'put ''c2UrTWF0aC5pbXVsKHV0LHp0KXwwLGFlPWFlK01hdGguaW11bChpdCxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKCRlLGZuKXwwLGFlPWFlK01hdGguaW11bCh5dCxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVs''@;'; put 'put ''KHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKE10LGVuKXwwO3ZhciBGYT0oQSsoYWU9YWUrTWF0aC5pbXVsKG50LEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwobnQsdnIpfDApK01hdGguaW11bChRZSxFaSl8MCkpPDwxMyl8MDtBPSgo''@;'; put 'put ''c2U9c2UrTWF0aC5pbXVsKFFlLHZyKXwwKSsodGU+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxybiksdGU9KHRlPU1hdGguaW11bChSdCx6dCkpK01hdGguaW11bChQdCxybil8MCxzZT1NYXRoLmltdWwoUHQsenQpLGFlPWFlK01hdGguaW11bChI''@;'; put 'put ''ZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLGZuKXwwKStNYXRoLmltdWwodXQsY24pfDAsc2U9c2UrTWF0aC5pbXVsKHV0LGZuKXwwLGFlPWFlK01hdGguaW11bChpdCxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDAsc2U9c2UrTWF0''@;'; put 'put ''aC5pbXVsKCRlLGVuKXwwO3ZhciB0aT0oQSsoYWU9YWUrTWF0aC5pbXVsKHl0LEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsdnIpfDApK01hdGguaW11bChNdCxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKE10LHZyKXwwKSsodGU+Pj4xMyl8MCkr''@;'; put 'put ''KHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxjbiksdGU9KHRlPU1hdGguaW11bChSdCxmbikpK01hdGguaW11bChQdCxjbil8MCxzZT1NYXRoLmltdWwoUHQsZm4pLGFlPWFlK01hdGguaW11bChIZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLGVuKXwwKStN''@;'; put 'put ''YXRoLmltdWwodXQsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LGVuKXwwO3ZhciBnbz0oQSsoYWU9YWUrTWF0aC5pbXVsKGl0LEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsdnIpfDApK01hdGguaW11bCgkZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5p''@;'; put 'put ''bXVsKCRlLHZyKXwwKSsodGU+Pj4xMyl8MCkrKGdvPj4+MjYpfDAsZ28mPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxYdCksdGU9KHRlPU1hdGguaW11bChSdCxlbikpK01hdGguaW11bChQdCxYdCl8MCxzZT1NYXRoLmltdWwoUHQsZW4pO3ZhciBOcz0oQSsoYWU9YWUrTWF0aC5pbXVsKEhl''@;'; put 'put ''LEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsdnIpfDApK01hdGguaW11bCh1dCxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKHV0LHZyKXwwKSsodGU+Pj4xMyl8MCkrKE5zPj4+MjYpfDAsTnMmPTY3MTA4ODYzO3ZhciBibD0oQSsoYWU9TWF0aC5p''@;'; put 'put ''bXVsKFJ0LEVpKSl8MCkrKCg4MTkxJih0ZT0odGU9TWF0aC5pbXVsKFJ0LHZyKSkrTWF0aC5pbXVsKFB0LEVpKXwwKSk8PDEzKXwwO3JldHVybiBBPSgoc2U9TWF0aC5pbXVsKFB0LHZyKSkrKHRlPj4+MTMpfDApKyhibD4+PjI2KXwwLGJsJj02NzEwODg2MyxtWzBdPVduLG1bMV09JGksbVsy''@;'; put 'put ''XT1laSxtWzNdPVFyLG1bNF09VmksbVs1XT1OaSxtWzZdPURhLG1bN109THIsbVs4XT1XaSxtWzldPXBhLG1bMTBdPVFuLG1bMTFdPWxhLG1bMTJdPXlhLG1bMTNdPUxhLG1bMTRdPUZhLG1bMTVdPXRpLG1bMTZdPWdvLG1bMTddPU5zLG1bMThdPWJsLDAhPT1BJiYobVsxOV09QSxILmxlbmd0''@;'; put 'put ''aCsrKSxIfTtmdW5jdGlvbiBuZSh4LEMsVCl7VC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXngubmVnYXRpdmUsVC5sZW5ndGg9eC5sZW5ndGgrQy5sZW5ndGg7Zm9yKHZhciBIPTAsaj0wLEU9MDtFPFQubGVuZ3RoLTE7RSsrKXt2YXIgbT1qO2o9MDtmb3IodmFyIEE9NjcxMDg4NjMmSCxhZT1NYXRo''@;'; put 'put ''Lm1pbihFLEMubGVuZ3RoLTEpLHRlPU1hdGgubWF4KDAsRS14Lmxlbmd0aCsxKTt0ZTw9YWU7dGUrKyl7dmFyIEplPSgwfHgud29yZHNbRS10ZV0pKigwfEMud29yZHNbdGVdKSxvdD02NzEwODg2MyZKZTtBPTY3MTA4ODYzJihvdD1vdCtBfDApLGorPShtPShtPW0rKEplLzY3MTA4ODY0fDAp''@;'; put 'put ''fDApKyhvdD4+PjI2KXwwKT4+PjI2LG0mPTY3MTA4ODYzfVQud29yZHNbRV09QSxIPW0sbT1qfXJldHVybiAwIT09SD9ULndvcmRzW0VdPUg6VC5sZW5ndGgtLSxULl9zdHJpcCgpfWZ1bmN0aW9uIGllKHgsQyxUKXtyZXR1cm4gbmUoeCxDLFQpfWZ1bmN0aW9uIGxlKHgsQyl7dGhpcy54PXgs''@;'; put 'put ''dGhpcy55PUN9TWF0aC5pbXVsfHwoSj1lZSksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oQyxUKXt2YXIgaj10aGlzLmxlbmd0aCtDLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1DLmxlbmd0aD9KKHRoaXMsQyxUKTpqPDYzP2VlKHRoaXMsQyxUKTpqPDEwMjQ/bmUo''@;'; put 'put ''dGhpcyxDLFQpOmllKHRoaXMsQyxUKX0sbGUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPW5ldyBBcnJheShDKSxIPXcucHJvdG90eXBlLl9jb3VudEJpdHMoQyktMSxqPTA7ajxDO2orKylUW2pdPXRoaXMucmV2QmluKGosSCxDKTtyZXR1cm4gVH0sbGUucHJvdG90''@;'; put 'put ''eXBlLnJldkJpbj1mdW5jdGlvbihDLFQsSCl7aWYoMD09PUN8fEM9PT1ILTEpcmV0dXJuIEM7Zm9yKHZhciBqPTAsRT0wO0U8VDtFKyspanw9KDEmQyk8PFQtRS0xLEM+Pj0xO3JldHVybiBqfSxsZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihDLFQsSCxqLEUsbSl7Zm9yKHZhciBBPTA7''@;'; put 'put ''QTxtO0ErKylqW0FdPVRbQ1tBXV0sRVtBXT1IW0NbQV1dfSxsZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKEMsVCxILGosRSxtKXt0aGlzLnBlcm11dGUobSxDLFQsSCxqLEUpO2Zvcih2YXIgQT0xO0E8RTtBPDw9MSlmb3IodmFyIGFlPUE8PDEsdGU9TWF0aC5jb3MoMipNYXRoLlBJ''@;'; put 'put ''L2FlKSxzZT1NYXRoLnNpbigyKk1hdGguUEkvYWUpLHdlPTA7d2U8RTt3ZSs9YWUpZm9yKHZhciBVZT10ZSxKZT1zZSxvdD0wO290PEE7b3QrKyl7dmFyIHhlPUhbd2Urb3RdLHZlPWpbd2Urb3RdLFhlPUhbd2Urb3QrQV0semU9alt3ZStvdCtBXSxEZT1VZSpYZS1KZSp6ZTt6ZT1VZSp6ZStK''@;'; put 'put ''ZSpYZSxIW3dlK290XT14ZSsoWGU9RGUpLGpbd2Urb3RdPXZlK3plLEhbd2Urb3QrQV09eGUtWGUsalt3ZStvdCtBXT12ZS16ZSxvdCE9PWFlJiYoRGU9dGUqVWUtc2UqSmUsSmU9dGUqSmUrc2UqVWUsVWU9RGUpfX0sbGUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKEMsVCl7dmFy''@;'; put 'put ''IEg9MXxNYXRoLm1heChULEMpLGo9MSZILEU9MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSlFKys7cmV0dXJuIDE8PEUrMStqfSxsZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKEMsVCxIKXtpZighKEg8PTEpKWZvcih2YXIgaj0wO2o8SC8yO2orKyl7dmFyIEU9Q1tqXTtDW2pdPUNbSC1q''@;'; put 'put ''LTFdLENbSC1qLTFdPUUsRT1UW2pdLFRbal09LVRbSC1qLTFdLFRbSC1qLTFdPS1FfX0sbGUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD0wLGo9MDtqPFQvMjtqKyspe3ZhciBFPTgxOTIqTWF0aC5yb3VuZChDWzIqaisxXS9UKStNYXRoLnJvdW5kKENb''@;'; put 'put ''MipqXS9UKStIO0Nbal09NjcxMDg4NjMmRSxIPUU8NjcxMDg4NjQ/MDpFLzY3MTA4ODY0fDB9cmV0dXJuIEN9LGxlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKEMsVCxILGope2Zvcih2YXIgRT0wLG09MDttPFQ7bSsrKUhbMiptXT04MTkxJihFKz0wfENbbV0pLEhbMiptKzFdPTgx''@;'; put 'put ''OTEmKEU+Pj49MTMpLEU+Pj49MTM7Zm9yKG09MipUO208ajsrK20pSFttXT0wO2coMD09PUUpLGcoISgtODE5MiZFKSl9LGxlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyksSD0wO0g8QztIKyspVFtIXT0wO3JldHVybiBUfSxsZS5wcm90b3R5cGUu''@;'; put 'put ''bXVscD1mdW5jdGlvbihDLFQsSCl7dmFyIGo9Mip0aGlzLmd1ZXNzTGVuMTNiKEMubGVuZ3RoLFQubGVuZ3RoKSxFPXRoaXMubWFrZVJCVChqKSxtPXRoaXMuc3R1YihqKSxBPW5ldyBBcnJheShqKSxhZT1uZXcgQXJyYXkoaiksdGU9bmV3IEFycmF5KGopLHNlPW5ldyBBcnJheShqKSx3ZT1u''@;'; put 'put ''ZXcgQXJyYXkoaiksVWU9bmV3IEFycmF5KGopLEplPUgud29yZHM7SmUubGVuZ3RoPWosdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsQSxqKSx0aGlzLmNvbnZlcnQxM2IoVC53b3JkcyxULmxlbmd0aCxzZSxqKSx0aGlzLnRyYW5zZm9ybShBLG0sYWUsdGUsaixFKSx0aGlzLnRy''@;'; put 'put ''YW5zZm9ybShzZSxtLHdlLFVlLGosRSk7Zm9yKHZhciBvdD0wO290PGo7b3QrKyl7dmFyIHhlPWFlW290XSp3ZVtvdF0tdGVbb3RdKlVlW290XTt0ZVtvdF09YWVbb3RdKlVlW290XSt0ZVtvdF0qd2Vbb3RdLGFlW290XT14ZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoYWUsdGUsaiksdGhpcy50''@;'; put 'put ''cmFuc2Zvcm0oYWUsdGUsSmUsbSxqLEUpLHRoaXMuY29uanVnYXRlKEplLG0saiksdGhpcy5ub3JtYWxpemUxM2IoSmUsaiksSC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUsSC5sZW5ndGg9Qy5sZW5ndGgrVC5sZW5ndGgsSC5fc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0''@;'; put 'put ''aW9uKEMpe3ZhciBUPW5ldyB3KG51bGwpO3JldHVybiBULndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtDLmxlbmd0aCksdGhpcy5tdWxUbyhDLFQpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKEMpe3ZhciBUPW5ldyB3KG51bGwpO3JldHVybiBULndvcmRzPW5ldyBBcnJheSh0aGlz''@;'; put 'put ''Lmxlbmd0aCtDLmxlbmd0aCksaWUodGhpcyxDLFQpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oQyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''QyksZyhDPDY3MTA4ODY0KTtmb3IodmFyIEg9MCxqPTA7ajx0aGlzLmxlbmd0aDtqKyspe3ZhciBFPSgwfHRoaXMud29yZHNbal0pKkMsbT0oNjcxMDg4NjMmRSkrKDY3MTA4ODYzJkgpO0g+Pj0yNixIKz1FLzY3MTA4ODY0fDAsSCs9bT4+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmbX1y''@;'; put 'put ''ZXR1cm4gMCE9PUgmJih0aGlzLndvcmRzW2pdPUgsdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PUM/MTp0aGlzLmxlbmd0aCxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihDKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyl7dmFyIFQ9ZnVuY3Rpb24gcSh4KXtmb3IodmFyIEM9bmV3IEFy''@;'; put 'put ''cmF5KHguYml0TGVuZ3RoKCkpLFQ9MDtUPEMubGVuZ3RoO1QrKylDW1RdPXgud29yZHNbVC8yNnwwXT4+PlQlMjYmMTtyZXR1cm4gQ30oQyk7aWYoMD09PVQubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIEg9dGhpcyxqPTA7ajxULmxlbmd0aCYmMD09PVRbal07aisrLEg9SC5zcXIo''@;'; put 'put ''KSk7aWYoKytqPFQubGVuZ3RoKWZvcih2YXIgRT1ILnNxcigpO2o8VC5sZW5ndGg7aisrLEU9RS5zcXIoKSkwIT09VFtqXSYmKEg9SC5tdWwoRSkpO3JldHVybiBIfSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBFLFQ9QyUy''@;'; put 'put ''NixIPShDLVQpLzI2LGo9NjcxMDg4NjM+Pj4yNi1UPDwyNi1UO2lmKDAhPT1UKXt2YXIgbT0wO2ZvcihFPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV0majt0aGlzLndvcmRzW0VdPSgwfHRoaXMud29yZHNbRV0pLUE8PFR8bSxtPUE+Pj4yNi1UfW0mJih0aGlzLndv''@;'; put 'put ''cmRzW0VdPW0sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihFPXRoaXMubGVuZ3RoLTE7RT49MDtFLS0pdGhpcy53b3Jkc1tFK0hdPXRoaXMud29yZHNbRV07Zm9yKEU9MDtFPEg7RSsrKXRoaXMud29yZHNbRV09MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuaXNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oQyxULEgpe3ZhciBqO2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKSxqPVQ/KFQtVCUyNikvMjY6MDt2YXIgRT1D''@;'; put 'put ''JTI2LG09TWF0aC5taW4oKEMtRSkvMjYsdGhpcy5sZW5ndGgpLEE9NjcxMDg4NjNeNjcxMDg4NjM+Pj5FPDxFLGFlPUg7aWYoai09bSxqPU1hdGgubWF4KDAsaiksYWUpe2Zvcih2YXIgdGU9MDt0ZTxtO3RlKyspYWUud29yZHNbdGVdPXRoaXMud29yZHNbdGVdO2FlLmxlbmd0aD1tfWlmKDAh''@;'; put 'put ''PT1tKWlmKHRoaXMubGVuZ3RoPm0pZm9yKHRoaXMubGVuZ3RoLT1tLHRlPTA7dGU8dGhpcy5sZW5ndGg7dGUrKyl0aGlzLndvcmRzW3RlXT10aGlzLndvcmRzW3RlK21dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHNlPTA7Zm9yKHRlPXRoaXMubGVuZ3RoLTE7dGU+''@;'; put 'put ''PTAmJigwIT09c2V8fHRlPj1qKTt0ZS0tKXt2YXIgd2U9MHx0aGlzLndvcmRzW3RlXTt0aGlzLndvcmRzW3RlXT1zZTw8MjYtRXx3ZT4+PkUsc2U9d2UmQX1yZXR1cm4gYWUmJjAhPT1zZSYmKGFlLndvcmRzW2FlLmxlbmd0aCsrXT1zZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1sw''@;'; put 'put ''XT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKEMsVCxIKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oQyxULEgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aXNobG4oQyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oQyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKEMpe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaXVzaHJuKEMpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9QyUyNixIPShDLVQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxUKSl9LHcucHJvdG90eXBl''@;'; put 'put ''LmltYXNrbj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9QyUyNixIPShDLVQpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09''@;'; put 'put ''VCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1UJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxUKSx0aGlzLl9zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pbWFza24oQyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKEMpe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3MTA4ODY0KSxDPDA/dGhpcy5pc3VibigtQyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9Qz8o''@;'; put 'put ''dGhpcy53b3Jkc1swXT1DLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKEMpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oQyl7dGhpcy53b3Jk''@;'; put 'put ''c1swXSs9Qztmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1RdPj02NzEwODg2NDtUKyspdGhpcy53b3Jkc1tUXS09NjcxMDg4NjQsVD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tUKzFdPTE6dGhpcy53b3Jkc1tUKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgu''@;'; put 'put ''bWF4KHRoaXMubGVuZ3RoLFQrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oQyl7aWYoZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2NzEwODg2NCksQzwwKXJldHVybiB0aGlzLmlhZGRuKC1DKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''LHRoaXMuaWFkZG4oQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09QywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgm''@;'; put 'put ''JnRoaXMud29yZHNbVF08MDtUKyspdGhpcy53b3Jkc1tUXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tUKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oQyl9LHcucHJvdG90eXBlLnN1Ym49ZnVu''@;'; put 'put ''Y3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihDKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9p''@;'; put 'put ''c2hsbnN1Ym11bD1mdW5jdGlvbihDLFQsSCl7dmFyIEU7dGhpcy5fZXhwYW5kKEMubGVuZ3RoK0gpO3ZhciBtLEE9MDtmb3IoRT0wO0U8Qy5sZW5ndGg7RSsrKXttPSgwfHRoaXMud29yZHNbRStIXSkrQTt2YXIgYWU9KDB8Qy53b3Jkc1tFXSkqVDtBPSgobS09NjcxMDg4NjMmYWUpPj4yNikt''@;'; put 'put ''KGFlLzY3MTA4ODY0fDApLHRoaXMud29yZHNbRStIXT02NzEwODg2MyZtfWZvcig7RTx0aGlzLmxlbmd0aC1IO0UrKylBPShtPSgwfHRoaXMud29yZHNbRStIXSkrQSk+PjI2LHRoaXMud29yZHNbRStIXT02NzEwODg2MyZtO2lmKDA9PT1BKXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihnKC0x''@;'; put 'put ''PT09QSksQT0wLEU9MDtFPHRoaXMubGVuZ3RoO0UrKylBPShtPS0oMHx0aGlzLndvcmRzW0VdKStBKT4+MjYsdGhpcy53b3Jkc1tFXT02NzEwODg2MyZtO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oQyxUKXt2YXIg''@;'; put 'put ''SCxqPXRoaXMuY2xvbmUoKSxFPUMsbT0wfEUud29yZHNbRS5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKG0pKSYmKEU9RS51c2hsbihIKSxqLml1c2hsbihIKSxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXSk7dmFyIHRlLGFlPWoubGVuZ3RoLUUubGVuZ3RoO2lmKCJtb2QiIT09''@;'; put 'put ''VCl7KHRlPW5ldyB3KG51bGwpKS5sZW5ndGg9YWUrMSx0ZS53b3Jkcz1uZXcgQXJyYXkodGUubGVuZ3RoKTtmb3IodmFyIHNlPTA7c2U8dGUubGVuZ3RoO3NlKyspdGUud29yZHNbc2VdPTB9dmFyIHdlPWouY2xvbmUoKS5faXNobG5zdWJtdWwoRSwxLGFlKTswPT09d2UubmVnYXRpdmUmJihq''@;'; put 'put ''PXdlLHRlJiYodGUud29yZHNbYWVdPTEpKTtmb3IodmFyIFVlPWFlLTE7VWU+PTA7VWUtLSl7dmFyIEplPTY3MTA4ODY0KigwfGoud29yZHNbRS5sZW5ndGgrVWVdKSsoMHxqLndvcmRzW0UubGVuZ3RoK1VlLTFdKTtmb3IoSmU9TWF0aC5taW4oSmUvbXwwLDY3MTA4ODYzKSxqLl9pc2hsbnN1''@;'; put 'put ''Ym11bChFLEplLFVlKTswIT09ai5uZWdhdGl2ZTspSmUtLSxqLm5lZ2F0aXZlPTAsai5faXNobG5zdWJtdWwoRSwxLFVlKSxqLmlzWmVybygpfHwoai5uZWdhdGl2ZV49MSk7dGUmJih0ZS53b3Jkc1tVZV09SmUpfXJldHVybiB0ZSYmdGUuX3N0cmlwKCksai5fc3RyaXAoKSwiZGl2IiE9PVQm''@;'; put 'put ''JjAhPT1IJiZqLml1c2hybihIKSx7ZGl2OnRlfHxudWxsLG1vZDpqfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKEMsVCxIKXtyZXR1cm4gZyghQy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1D''@;'; put 'put ''Lm5lZ2F0aXZlPyhtPXRoaXMubmVnKCkuZGl2bW9kKEMsVCksIm1vZCIhPT1UJiYoaj1tLmRpdi5uZWcoKSksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxIJiYwIT09RS5uZWdhdGl2ZSYmRS5pYWRkKEMpKSx7ZGl2OmosbW9kOkV9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRp''@;'; put 'put ''dmU/KG09dGhpcy5kaXZtb2QoQy5uZWcoKSxUKSwibW9kIiE9PVQmJihqPW0uZGl2Lm5lZygpKSx7ZGl2OmosbW9kOm0ubW9kfSk6dGhpcy5uZWdhdGl2ZSZDLm5lZ2F0aXZlPyhtPXRoaXMubmVnKCkuZGl2bW9kKEMubmVnKCksVCksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxIJiYwIT09''@;'; put 'put ''RS5uZWdhdGl2ZSYmRS5pc3ViKEMpKSx7ZGl2Om0uZGl2LG1vZDpFfSk6Qy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKEMpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PUMubGVuZ3RoPyJkaXYiPT09VD97ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1v''@;'; put 'put ''ZCI9PT1UP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RybihDLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihDLFQpO3ZhciBqLEUsbX0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0''@;'; put 'put ''aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2QiLCEw''@;'; put 'put ''KS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKEMpe3ZhciBUPXRoaXMuZGl2bW9kKEMpO2lmKFQubW9kLmlzWmVybygpKXJldHVybiBULmRpdjt2YXIgSD0wIT09VC5kaXYubmVnYXRpdmU/VC5tb2QuaXN1YihDKTpULm1vZCxqPUMudXNocm4oMSksRT1DLmFuZGxuKDEpLG09''@;'; put 'put ''SC5jbXAoaik7cmV0dXJuIG08MHx8MT09PUUmJjA9PT1tP1QuZGl2OjAhPT1ULmRpdi5uZWdhdGl2ZT9ULmRpdi5pc3VibigxKTpULmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzKTtmb3IodmFyIEg9''@;'; put 'put ''KDE8PDI2KSVDLGo9MCxFPXRoaXMubGVuZ3RoLTE7RT49MDtFLS0paj0oSCpqKygwfHRoaXMud29yZHNbRV0pKSVDO3JldHVybiBUPy1qOmp9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubW9kcm4oQyl9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKEMpe3Zh''@;'; put 'put ''ciBUPUM8MDtUJiYoQz0tQyksZyhDPD02NzEwODg2Myk7Zm9yKHZhciBIPTAsaj10aGlzLmxlbmd0aC0xO2o+PTA7ai0tKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSs2NzEwODg2NCpIO3RoaXMud29yZHNbal09RS9DfDAsSD1FJUN9cmV0dXJuIHRoaXMuX3N0cmlwKCksVD90aGlzLmluZWco''@;'; put 'put ''KTp0aGlzfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oQyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdhdGl2ZSksZyghQy5pc1plcm8oKSk7dmFyIFQ9dGhpcyxIPUMuY2xvbmUoKTtUPTAhPT1ULm5lZ2F0''@;'; put 'put ''aXZlP1QudW1vZChDKTpULmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLEU9bmV3IHcoMCksbT1uZXcgdygwKSxBPW5ldyB3KDEpLGFlPTA7VC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspVC5pdXNocm4oMSksSC5pdXNocm4oMSksKythZTtmb3IodmFyIHRlPUguY2xvbmUoKSxzZT1ULmNsb25l''@;'; put 'put ''KCk7IVQuaXNaZXJvKCk7KXtmb3IodmFyIHdlPTAsVWU9MTshKFQud29yZHNbMF0mVWUpJiZ3ZTwyNjsrK3dlLFVlPDw9MSk7aWYod2U+MClmb3IoVC5pdXNocm4od2UpO3dlLS0gPjA7KShqLmlzT2RkKCl8fEUuaXNPZGQoKSkmJihqLmlhZGQodGUpLEUuaXN1YihzZSkpLGouaXVzaHJuKDEp''@;'; put 'put ''LEUuaXVzaHJuKDEpO2Zvcih2YXIgSmU9MCxvdD0xOyEoSC53b3Jkc1swXSZvdCkmJkplPDI2OysrSmUsb3Q8PD0xKTtpZihKZT4wKWZvcihILml1c2hybihKZSk7SmUtLSA+MDspKG0uaXNPZGQoKXx8QS5pc09kZCgpKSYmKG0uaWFkZCh0ZSksQS5pc3ViKHNlKSksbS5pdXNocm4oMSksQS5p''@;'; put 'put ''dXNocm4oMSk7VC5jbXAoSCk+PTA/KFQuaXN1YihIKSxqLmlzdWIobSksRS5pc3ViKEEpKTooSC5pc3ViKFQpLG0uaXN1YihqKSxBLmlzdWIoRSkpfXJldHVybnthOm0sYjpBLGdjZDpILml1c2hsbihhZSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdhdGl2''@;'; put 'put ''ZSksZyghQy5pc1plcm8oKSk7dmFyIHdlLFQ9dGhpcyxIPUMuY2xvbmUoKTtUPTAhPT1ULm5lZ2F0aXZlP1QudW1vZChDKTpULmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLEU9bmV3IHcoMCksbT1ILmNsb25lKCk7VC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBBPTAsYWU9''@;'; put 'put ''MTshKFQud29yZHNbMF0mYWUpJiZBPDI2OysrQSxhZTw8PTEpO2lmKEE+MClmb3IoVC5pdXNocm4oQSk7QS0tID4wOylqLmlzT2RkKCkmJmouaWFkZChtKSxqLml1c2hybigxKTtmb3IodmFyIHRlPTAsc2U9MTshKEgud29yZHNbMF0mc2UpJiZ0ZTwyNjsrK3RlLHNlPDw9MSk7aWYodGU+MClm''@;'; put 'put ''b3IoSC5pdXNocm4odGUpO3RlLS0gPjA7KUUuaXNPZGQoKSYmRS5pYWRkKG0pLEUuaXVzaHJuKDEpO1QuY21wKEgpPj0wPyhULmlzdWIoSCksai5pc3ViKEUpKTooSC5pc3ViKFQpLEUuaXN1YihqKSl9cmV0dXJuKHdlPTA9PT1ULmNtcG4oMSk/ajpFKS5jbXBuKDApPDAmJndlLmlhZGQoQyks''@;'; put 'put ''d2V9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihDKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBDLmFicygpO2lmKEMuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIFQ9dGhpcy5jbG9uZSgpLEg9Qy5jbG9uZSgpO1QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBqPTA7''@;'; put 'put ''VC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtqKyspVC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO1QuaXNFdmVuKCk7KVQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIEU9VC5jbXAoSCk7aWYoRTwwKXt2YXIgbT1UO1Q9SCxIPW19ZWxzZSBpZigw''@;'; put 'put ''PT09RXx8MD09PUguY21wbigxKSlicmVhaztULmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKGopfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmVnY2QoQykuYS51bW9kKEMpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jk''@;'; put 'put ''c1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMud29yZHNbMF0mQ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IEMpO3ZhciBUPUMlMjYsSD0oQy1UKS8yNixqPTE8PFQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PWosdGhpcztmb3IodmFyIEU9aixtPUg7MCE9PUUmJm08dGhpcy5sZW5ndGg7bSsrKXt2YXIgQT0wfHRoaXMud29yZHNbbV07RT0o''@;'; put 'put ''QSs9RSk+Pj4yNix0aGlzLndvcmRzW21dPUEmPTY3MTA4ODYzfXJldHVybiAwIT09RSYmKHRoaXMud29yZHNbbV09RSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5w''@;'; put 'put ''cm90b3R5cGUuY21wbj1mdW5jdGlvbihDKXt2YXIgSCxUPUM8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlQpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle1QmJihDPS1DKSxnKEM8PTY3MTA4''@;'; put 'put ''ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBqPTB8dGhpcy53b3Jkc1swXTtIPWo9PT1DPzA6ajxDPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKEMpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSly''@;'; put 'put ''ZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIDE7dmFyIFQ9dGhpcy51Y21wKEMpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1UOlR9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oQyl7aWYodGhpcy5sZW5ndGg+Qy5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IDE7aWYodGhpcy5sZW5ndGg8Qy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBUPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgaj0wfHRoaXMud29yZHNbSF0sRT0wfEMud29yZHNbSF07aWYoaiE9PUUpe2o8RT9UPS0xOmo+RSYmKFQ9MSk7YnJlYWt9fXJldHVybiBUfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5ndG49ZnVuY3Rpb24oQyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKEMpe3JldHVybiAxPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKT49MH0sdy5wcm90b3R5cGUuZ3Rl''@;'; put 'put ''PWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcChDKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKEMpe3JldHVybi0xPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wKEMpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9u''@;'; put 'put ''KEMpe3JldHVybiB0aGlzLmNtcG4oQyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXAoQyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oQyl7cmV0dXJu''@;'; put 'put ''IDA9PT10aGlzLmNtcChDKX0sdy5yZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBwKEMpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJy''@;'; put 'put ''ZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEMuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChDKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0''@;'; put 'put ''IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5yZWQ9Qyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVk''@;'; put 'put ''dWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChDKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElBZGQ9''@;'; put 'put ''ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFNo''@;'; put 'put ''bD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEMpLHRoaXMucmVkLm11bCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm''@;'; put 'put ''eTIodGhpcyxDKSx0aGlzLnJlZC5pbXVsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92''@;'; put 'put ''ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkJiYhQy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsQyl9O3ZhciBtZT17''@;'; put 'put ''azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIF9lKHgsQyl7dGhpcy5uYW1lPXgsdGhpcy5wPW5ldyB3KEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlz''@;'; put 'put ''LnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBUZSgpe19lLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gU2UoKXtfZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGplKCl7X2UuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBWKCl7''@;'; put 'put ''X2UuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBwKHgpe2lmKCJzdHJpbmciPT10eXBlb2YgeCl7dmFyIEM9dy5fcHJpbWUoeCk7dGhpcy5tPUMucCx0aGlzLnBy''@;'; put 'put ''aW1lPUN9ZWxzZSBnKHguZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gYih4KXtwLmNhbGwodGhpcyx4KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5z''@;'; put 'put ''aGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5k''@;'; put 'put ''aXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfV9lLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHcobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4v''@;'; put 'put ''MTMpKSxDfSxfZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihDKXt2YXIgSCxUPUM7ZG97dGhpcy5zcGxpdChULHRoaXMudG1wKSxIPShUPShUPXRoaXMuaW11bEsoVCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIGo9SDx0aGlzLm4/LTE6VC51''@;'; put 'put ''Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1qPyhULndvcmRzWzBdPTAsVC5sZW5ndGg9MSk6aj4wP1QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVQuc3RyaXA/VC5zdHJpcCgpOlQuX3N0cmlwKCksVH0sX2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Qy5pdXNocm4odGhpcy5uLDAsVCl9''@;'; put 'put ''LF9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtyZXR1cm4gQy5pbXVsKHRoaXMuayl9LEIoVGUsX2UpLFRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD00MTk0MzAzLGo9TWF0aC5taW4oQy5sZW5ndGgsOSksRT0wO0U8ajtFKyspVC53b3Jkc1tFXT1DLndv''@;'; put 'put ''cmRzW0VdO2lmKFQubGVuZ3RoPWosQy5sZW5ndGg8PTkpcmV0dXJuIEMud29yZHNbMF09MCx2b2lkKEMubGVuZ3RoPTEpO3ZhciBtPUMud29yZHNbOV07Zm9yKFQud29yZHNbVC5sZW5ndGgrK109bSZILEU9MTA7RTxDLmxlbmd0aDtFKyspe3ZhciBBPTB8Qy53b3Jkc1tFXTtDLndvcmRzW0Ut''@;'; put 'put ''MTBdPShBJkgpPDw0fG0+Pj4yMixtPUF9Qy53b3Jkc1tFLTEwXT1tPj4+PTIyLEMubGVuZ3RoLT0wPT09bSYmQy5sZW5ndGg+MTA/MTA6OX0sVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe0Mud29yZHNbQy5sZW5ndGhdPTAsQy53b3Jkc1tDLmxlbmd0aCsxXT0wLEMubGVuZ3RoKz0y''@;'; put 'put ''O2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl7dmFyIGo9MHxDLndvcmRzW0hdO0Mud29yZHNbSF09NjcxMDg4NjMmKFQrPTk3NypqKSxUPTY0KmorKFQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiYoQy5sZW5ndGgtLSwwPT09Qy53b3Jkc1tDLmxl''@;'; put 'put ''bmd0aC0xXSYmQy5sZW5ndGgtLSksQ30sQihTZSxfZSksQihqZSxfZSksQihWLF9lKSxWLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspe3ZhciBqPTE5KigwfEMud29yZHNbSF0pK1QsRT02NzEwODg2MyZqO2o+Pj49MjYsQy53b3Jk''@;'; put 'put ''c1tIXT1FLFQ9an1yZXR1cm4gMCE9PVQmJihDLndvcmRzW0MubGVuZ3RoKytdPVQpLEN9LHcuX3ByaW1lPWZ1bmN0aW9uKEMpe2lmKG1lW0NdKXJldHVybiBtZVtDXTt2YXIgVDtpZigiazI1NiI9PT1DKVQ9bmV3IFRlO2Vsc2UgaWYoInAyMjQiPT09QylUPW5ldyBTZTtlbHNlIGlmKCJwMTky''@;'; put 'put ''Ij09PUMpVD1uZXcgamU7ZWxzZXtpZigicDI1NTE5IiE9PUMpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrQyk7VD1uZXcgVn1yZXR1cm4gbWVbQ109VCxUfSxwLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHBvc2l0aXZlcyIpLGcoQy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0scC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oQyxUKXtnKCEoQy5uZWdhdGl2ZXxULm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKEMucmVkJiZD''@;'; put 'put ''LnJlZD09PVQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHAucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKEMpLl9mb3JjZVJlZCh0aGlzKTooTihDLEMudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0''@;'; put 'put ''aGlzKSksQyl9LHAucHJvdG90eXBlLm5lZz1mdW5jdGlvbihDKXtyZXR1cm4gQy5pc1plcm8oKT9DLmNsb25lKCk6dGhpcy5tLnN1YihDKS5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLmFkZChUKTtyZXR1''@;'; put 'put ''cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5pYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSxw''@;'; put 'put ''LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5zdWIoVCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxU''@;'; put 'put ''KTt2YXIgSD1DLmlzdWIoVCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSxwLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShDKSx0aGlzLmltb2QoQy51c2hsbihUKSl9LHAucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyxUKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fdmVyaWZ5MihDLFQpLHRoaXMuaW1vZChDLmltdWwoVCkpfSxwLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihDLFQpLHRoaXMuaW1vZChDLm11bChUKSl9LHAucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aW11bChDLEMuY2xvbmUoKSl9LHAucHJvdG90eXBlLnNxcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5tdWwoQyxDKX0scC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihDKXtpZihDLmlzWmVybygpKXJldHVybiBDLmNsb25lKCk7dmFyIFQ9dGhpcy5tLmFuZGxuKDMpO2lmKGcoVCUyPT0xKSwz''@;'; put 'put ''PT09VCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhDLEgpfWZvcih2YXIgaj10aGlzLm0uc3VibigxKSxFPTA7IWouaXNaZXJvKCkmJjA9PT1qLmFuZGxuKDEpOylFKyssai5pdXNocm4oMSk7Zyghai5pc1plcm8oKSk7dmFyIG09bmV3IHco''@;'; put 'put ''MSkudG9SZWQodGhpcyksQT1tLnJlZE5lZygpLGFlPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx0ZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHRlPW5ldyB3KDIqdGUqdGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh0ZSxhZSkuY21wKEEpOyl0ZS5yZWRJQWRkKEEpO2Zvcih2YXIgc2U9''@;'; put 'put ''dGhpcy5wb3codGUsaiksd2U9dGhpcy5wb3coQyxqLmFkZG4oMSkuaXVzaHJuKDEpKSxVZT10aGlzLnBvdyhDLGopLEplPUU7MCE9PVVlLmNtcChtKTspe2Zvcih2YXIgb3Q9VWUseGU9MDswIT09b3QuY21wKG0pO3hlKyspb3Q9b3QucmVkU3FyKCk7Zyh4ZTxKZSk7dmFyIHZlPXRoaXMucG93''@;'; put 'put ''KHNlLG5ldyB3KDEpLml1c2hsbihKZS14ZS0xKSk7d2U9d2UucmVkTXVsKHZlKSxzZT12ZS5yZWRTcXIoKSxVZT1VZS5yZWRNdWwoc2UpLEplPXhlfXJldHVybiB3ZX0scC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXt2YXIgVD1DLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09VC5uZWdh''@;'; put 'put ''dGl2ZT8oVC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChUKS5yZWROZWcoKSk6dGhpcy5pbW9kKFQpfSxwLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyxUKXtpZihULmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09VC5jbXBuKDEpKXJldHVybiBDLmNsb25lKCk7dmFy''@;'; put 'put ''IGo9bmV3IEFycmF5KDE2KTtqWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGpbMV09Qztmb3IodmFyIEU9MjtFPGoubGVuZ3RoO0UrKylqW0VdPXRoaXMubXVsKGpbRS0xXSxDKTt2YXIgbT1qWzBdLEE9MCxhZT0wLHRlPVQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT10ZSYmKHRlPTI2KSxFPVQu''@;'; put 'put ''bGVuZ3RoLTE7RT49MDtFLS0pe2Zvcih2YXIgc2U9VC53b3Jkc1tFXSx3ZT10ZS0xO3dlPj0wO3dlLS0pe3ZhciBVZT1zZT4+d2UmMTttIT09alswXSYmKG09dGhpcy5zcXIobSkpLDAhPT1VZXx8MCE9PUE/KEE8PD0xLEF8PVVlLCg0PT0rK2FlfHwwPT09RSYmMD09PXdlKSYmKG09dGhpcy5t''@;'; put 'put ''dWwobSxqW0FdKSxhZT0wLEE9MCkpOmFlPTB9dGU9MjZ9cmV0dXJuIG19LHAucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihDKXt2YXIgVD1DLnVtb2QodGhpcy5tKTtyZXR1cm4gVD09PUM/VC5jbG9uZSgpOlR9LHAucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKEMpe3ZhciBU''@;'; put 'put ''PUMuY2xvbmUoKTtyZXR1cm4gVC5yZWQ9bnVsbCxUfSx3Lm1vbnQ9ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBiKEMpfSxCKGIscCksYi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltb2QoQy51c2hsbih0aGlzLnNoaWZ0KSl9LGIucHJvdG90eXBlLmNvbnZl''@;'; put 'put ''cnRGcm9tPWZ1bmN0aW9uKEMpe3ZhciBUPXRoaXMuaW1vZChDLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gVC5yZWQ9bnVsbCxUfSxiLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gQy53b3Jkc1swXT0wLEMubGVuZ3RoPTEsQzt2''@;'; put 'put ''YXIgSD1DLmltdWwoVCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0aGlzLm0pPj0wP209RS5pc3ViKHRoaXMubSk6RS5jbXBu''@;'; put 'put ''KDApPDAmJihtPUUuaWFkZCh0aGlzLm0pKSxtLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPUMubXVsKFQpLGo9SC5tYXNrbih0aGlzLnNo''@;'; put 'put ''aWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksRT1ILmlzdWIoaikuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhpcy5tKSksbS5fZm9y''@;'; put 'put ''Y2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW1vZChDLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSwzNTI5NDoodWUsWCx5KT0+e3ZhciBJO2Z1bmN0aW9uIF8oQil7''@;'; put 'put ''dGhpcy5yYW5kPUJ9aWYodWUuZXhwb3J0cz1mdW5jdGlvbih3KXtyZXR1cm4gSXx8KEk9bmV3IF8obnVsbCkpLEkuZ2VuZXJhdGUodyl9LHVlLmV4cG9ydHMuUmFuZD1fLF8ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yYW5kKHcpfSxfLnByb3RvdHlwZS5f''@;'; put 'put ''cmFuZD1mdW5jdGlvbih3KXtpZih0aGlzLnJhbmQuZ2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyh3KTtmb3IodmFyIFA9bmV3IFVpbnQ4QXJyYXkodyksRj0wO0Y8UC5sZW5ndGg7RisrKVBbRl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gUH0sIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7dmFyIFA9bmV3IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhQKSxQfTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1z''@;'; put 'put ''Q3J5cHRvLmdldFJhbmRvbVZhbHVlcz9fLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgUD1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoUCksUH06Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihfLnByb3RvdHlwZS5fcmFuZD1m''@;'; put 'put ''dW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7dmFyIGc9eSg5MTQyNik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGcucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7Xy5wcm90b3R5cGUuX3JhbmQ9ZnVu''@;'; put 'put ''Y3Rpb24odyl7cmV0dXJuIGcucmFuZG9tQnl0ZXModyl9fWNhdGNoe319LDEyMzc1Oih1ZSxYLHkpPT57dmFyIEk9eSgyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIF8oTyl7SS5pc0J1ZmZlcihPKXx8KE89SS5mcm9tKE8pKTtmb3IodmFyIHo9Ty5sZW5ndGgvNHwwLE49bmV3IEFycmF5KHopLEw9''@;'; put 'put ''MDtMPHo7TCsrKU5bTF09Ty5yZWFkVUludDMyQkUoNCpMKTtyZXR1cm4gTn1mdW5jdGlvbiBnKE8pe2Zvcig7MDxPLmxlbmd0aDtPKyspT1swXT0wfWZ1bmN0aW9uIEIoTyx6LE4sTCxLKXtmb3IodmFyIGxlLG1lLF9lLFRlLFU9TlswXSxXPU5bMV0sWT1OWzJdLHE9TlszXSxlZT1PWzBdXnpb''@;'; put 'put ''MF0sSj1PWzFdXnpbMV0sbmU9T1syXV56WzJdLGllPU9bM11eelszXSxTZT00LGplPTE7amU8SztqZSsrKWxlPVVbZWU+Pj4yNF1eV1tKPj4+MTYmMjU1XV5ZW25lPj4+OCYyNTVdXnFbMjU1JmllXV56W1NlKytdLG1lPVVbSj4+PjI0XV5XW25lPj4+MTYmMjU1XV5ZW2llPj4+OCYyNTVdXnFb''@;'; put 'put ''MjU1JmVlXV56W1NlKytdLF9lPVVbbmU+Pj4yNF1eV1tpZT4+PjE2JjI1NV1eWVtlZT4+PjgmMjU1XV5xWzI1NSZKXV56W1NlKytdLFRlPVVbaWU+Pj4yNF1eV1tlZT4+PjE2JjI1NV1eWVtKPj4+OCYyNTVdXnFbMjU1Jm5lXV56W1NlKytdLGVlPWxlLEo9bWUsbmU9X2UsaWU9VGU7cmV0dXJu''@;'; put 'put ''IGxlPShMW2VlPj4+MjRdPDwyNHxMW0o+Pj4xNiYyNTVdPDwxNnxMW25lPj4+OCYyNTVdPDw4fExbMjU1JmllXSleeltTZSsrXSxtZT0oTFtKPj4+MjRdPDwyNHxMW25lPj4+MTYmMjU1XTw8MTZ8TFtpZT4+PjgmMjU1XTw8OHxMWzI1NSZlZV0pXnpbU2UrK10sX2U9KExbbmU+Pj4yNF08PDI0''@;'; put 'put ''fExbaWU+Pj4xNiYyNTVdPDwxNnxMW2VlPj4+OCYyNTVdPDw4fExbMjU1JkpdKV56W1NlKytdLFRlPShMW2llPj4+MjRdPDwyNHxMW2VlPj4+MTYmMjU1XTw8MTZ8TFtKPj4+OCYyNTVdPDw4fExbMjU1Jm5lXSleeltTZSsrXSxbbGU+Pj49MCxtZT4+Pj0wLF9lPj4+PTAsVGU+Pj49MF19dmFy''@;'; put 'put ''IHc9WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLFA9ZnVuY3Rpb24oKXtmb3IodmFyIE89bmV3IEFycmF5KDI1Niksej0wO3o8MjU2O3orKylPW3pdPXo8MTI4P3o8PDE6ejw8MV4yODM7Zm9yKHZhciBOPVtdLEw9W10sSz1bW10sW10sW10sW11dLFU9W1tdLFtdLFtdLFtdXSxXPTAs''@;'; put 'put ''WT0wLHE9MDtxPDI1NjsrK3Epe3ZhciBlZT1ZXlk8PDFeWTw8Ml5ZPDwzXlk8PDQ7TltXXT1lZT1lZT4+PjheMjU1JmVlXjk5LExbZWVdPVc7dmFyIEo9T1tXXSxuZT1PW0pdLGllPU9bbmVdLGxlPTI1NypPW2VlXV4xNjg0MzAwOCplZTtLWzBdW1ddPWxlPDwyNHxsZT4+PjgsS1sxXVtXXT1s''@;'; put 'put ''ZTw8MTZ8bGU+Pj4xNixLWzJdW1ddPWxlPDw4fGxlPj4+MjQsS1szXVtXXT1sZSxVWzBdW2VlXT0obGU9MTY4NDMwMDkqaWVeNjU1MzcqbmVeMjU3KkpeMTY4NDMwMDgqVyk8PDI0fGxlPj4+OCxVWzFdW2VlXT1sZTw8MTZ8bGU+Pj4xNixVWzJdW2VlXT1sZTw8OHxsZT4+PjI0LFVbM11bZWVd''@;'; put 'put ''PWxlLDA9PT1XP1c9WT0xOihXPUpeT1tPW09baWVeSl1dXSxZXj1PW09bWV1dKX1yZXR1cm57U0JPWDpOLElOVl9TQk9YOkwsU1VCX01JWDpLLElOVl9TVUJfTUlYOlV9fSgpO2Z1bmN0aW9uIEYoTyl7dGhpcy5fa2V5PV8oTyksdGhpcy5fcmVzZXQoKX1GLmJsb2NrU2l6ZT0xNixGLmtleVNp''@;'; put 'put ''emU9MzIsRi5wcm90b3R5cGUuYmxvY2tTaXplPUYuYmxvY2tTaXplLEYucHJvdG90eXBlLmtleVNpemU9Ri5rZXlTaXplLEYucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgTz10aGlzLl9rZXksej1PLmxlbmd0aCxOPXorNixMPTQqKE4rMSksSz1bXSxVPTA7VTx6O1UrKylL''@;'; put 'put ''W1VdPU9bVV07Zm9yKFU9ejtVPEw7VSsrKXt2YXIgVz1LW1UtMV07VSV6PT0wPyhXPVAuU0JPWFsoVz1XPDw4fFc+Pj4yNCk+Pj4yNF08PDI0fFAuU0JPWFtXPj4+MTYmMjU1XTw8MTZ8UC5TQk9YW1c+Pj44JjI1NV08PDh8UC5TQk9YWzI1NSZXXSxXXj13W1UvenwwXTw8MjQpOno+NiYmVSV6''@;'; put 'put ''PT00JiYoVz1QLlNCT1hbVz4+PjI0XTw8MjR8UC5TQk9YW1c+Pj4xNiYyNTVdPDwxNnxQLlNCT1hbVz4+PjgmMjU1XTw8OHxQLlNCT1hbMjU1JlddKSxLW1VdPUtbVS16XV5XfWZvcih2YXIgWT1bXSxxPTA7cTxMO3ErKyl7dmFyIGVlPUwtcSxKPUtbZWUtKHElND8wOjQpXTtZW3FdPXE8NHx8''@;'; put 'put ''ZWU8PTQ/SjpQLklOVl9TVUJfTUlYWzBdW1AuU0JPWFtKPj4+MjRdXV5QLklOVl9TVUJfTUlYWzFdW1AuU0JPWFtKPj4+MTYmMjU1XV1eUC5JTlZfU1VCX01JWFsyXVtQLlNCT1hbSj4+PjgmMjU1XV1eUC5JTlZfU1VCX01JWFszXVtQLlNCT1hbMjU1JkpdXX10aGlzLl9uUm91bmRzPU4sdGhp''@;'; put 'put ''cy5fa2V5U2NoZWR1bGU9Syx0aGlzLl9pbnZLZXlTY2hlZHVsZT1ZfSxGLnByb3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oTyl7cmV0dXJuIEIoTz1fKE8pLHRoaXMuX2tleVNjaGVkdWxlLFAuU1VCX01JWCxQLlNCT1gsdGhpcy5fblJvdW5kcyl9LEYucHJvdG90eXBlLmVuY3J5''@;'; put 'put ''cHRCbG9jaz1mdW5jdGlvbihPKXt2YXIgej10aGlzLmVuY3J5cHRCbG9ja1JhdyhPKSxOPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBOLndyaXRlVUludDMyQkUoelswXSwwKSxOLndyaXRlVUludDMyQkUoelsxXSw0KSxOLndyaXRlVUludDMyQkUoelsyXSw4KSxOLndyaXRlVUludDMyQkUo''@;'; put 'put ''elszXSwxMiksTn0sRi5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKE8pe3ZhciB6PShPPV8oTykpWzFdO09bMV09T1szXSxPWzNdPXo7dmFyIE49QihPLHRoaXMuX2ludktleVNjaGVkdWxlLFAuSU5WX1NVQl9NSVgsUC5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxMPUkuYWxsb2NV''@;'; put 'put ''bnNhZmUoMTYpO3JldHVybiBMLndyaXRlVUludDMyQkUoTlswXSwwKSxMLndyaXRlVUludDMyQkUoTlszXSw0KSxMLndyaXRlVUludDMyQkUoTlsyXSw4KSxMLndyaXRlVUludDMyQkUoTlsxXSwxMiksTH0sRi5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtnKHRoaXMuX2tleVNjaGVkdWxl''@;'; put 'put ''KSxnKHRoaXMuX2ludktleVNjaGVkdWxlKSxnKHRoaXMuX2tleSl9LHVlLmV4cG9ydHMuQUVTPUZ9LDE5MzA3Oih1ZSxYLHkpPT57dmFyIEk9eSgxMjM3NSksXz15KDI3MDU0KS5CdWZmZXIsZz15KDMyNDcpLEI9eSg3MTk5Myksdz15KDg1OTE3KSxQPXkoMTM1NDYpLEY9eSg5NTcyNSk7ZnVu''@;'; put 'put ''Y3Rpb24gTihMLEssVSxXKXtnLmNhbGwodGhpcyk7dmFyIFk9Xy5hbGxvYyg0LDApO3RoaXMuX2NpcGhlcj1uZXcgSS5BRVMoSyk7dmFyIHE9dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhZKTt0aGlzLl9naGFzaD1uZXcgdyhxKSxVPWZ1bmN0aW9uIHooTCxLLFUpe2lmKDEyPT09Sy5sZW5n''@;'; put 'put ''dGgpcmV0dXJuIEwuX2ZpbklEPV8uY29uY2F0KFtLLF8uZnJvbShbMCwwLDAsMV0pXSksXy5jb25jYXQoW0ssXy5mcm9tKFswLDAsMCwyXSldKTt2YXIgVz1uZXcgdyhVKSxZPUsubGVuZ3RoLHE9WSUxNjtXLnVwZGF0ZShLKSxxJiZXLnVwZGF0ZShfLmFsbG9jKHE9MTYtcSwwKSksVy51cGRh''@;'; put 'put ''dGUoXy5hbGxvYyg4LDApKTt2YXIgZWU9OCpZLEo9Xy5hbGxvYyg4KTtKLndyaXRlVUludEJFKGVlLDAsOCksVy51cGRhdGUoSiksTC5fZmluSUQ9Vy5zdGF0ZTt2YXIgbmU9Xy5mcm9tKEwuX2ZpbklEKTtyZXR1cm4gRihuZSksbmV9KHRoaXMsVSxxKSx0aGlzLl9wcmV2PV8uZnJvbShVKSx0''@;'; put 'put ''aGlzLl9jYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1XLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPUwsdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1CKE4sZyksTi5wcm90b3R5''@;'; put 'put ''cGUuX3VwZGF0ZT1mdW5jdGlvbihMKXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgSz0xNi10aGlzLl9hbGVuJTE2O0s8MTYmJihLPV8uYWxsb2MoSywwKSx0aGlzLl9naGFzaC51cGRhdGUoSykpfXRoaXMuX2NhbGxlZD0hMDt2YXIgVT10aGlzLl9tb2RlLmVuY3J5cHQodGhp''@;'; put 'put ''cyxMKTtyZXR1cm4gdGhpcy5fZ2hhc2gudXBkYXRlKHRoaXMuX2RlY3J5cHQ/TDpVKSx0aGlzLl9sZW4rPUwubGVuZ3RoLFV9LE4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQg''@;'; put 'put ''c3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dmFyIEw9UCh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiBPKEwsSyl7''@;'; put 'put ''dmFyIFU9MDtMLmxlbmd0aCE9PUsubGVuZ3RoJiZVKys7Zm9yKHZhciBXPU1hdGgubWluKEwubGVuZ3RoLEsubGVuZ3RoKSxZPTA7WTxXOysrWSlVKz1MW1ldXktbWV07cmV0dXJuIFV9KEwsdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFi''@;'; put 'put ''bGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt0aGlzLl9hdXRoVGFnPUwsdGhpcy5fY2lwaGVyLnNjcnViKCl9LE4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwhXy5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVt''@;'; put 'put ''cHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LE4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oSyl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBp''@;'; put 'put ''biB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2F1dGhUYWc9S30sTi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKEspe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0''@;'; put 'put ''ZShLKSx0aGlzLl9hbGVuKz1LLmxlbmd0aH0sdWUuZXhwb3J0cz1OfSw0MzM4ODoodWUsWCx5KT0+e3ZhciBJPXkoMzUwKSxfPXkoNjAxMDIpLGc9eSgzMjE5KTtYLmNyZWF0ZUNpcGhlcj1YLkNpcGhlcj1JLmNyZWF0ZUNpcGhlcixYLmNyZWF0ZUNpcGhlcml2PVguQ2lwaGVyaXY9SS5jcmVh''@;'; put 'put ''dGVDaXBoZXJpdixYLmNyZWF0ZURlY2lwaGVyPVguRGVjaXBoZXI9Xy5jcmVhdGVEZWNpcGhlcixYLmNyZWF0ZURlY2lwaGVyaXY9WC5EZWNpcGhlcml2PV8uY3JlYXRlRGVjaXBoZXJpdixYLmxpc3RDaXBoZXJzPVguZ2V0Q2lwaGVycz1mdW5jdGlvbiBCKCl7cmV0dXJuIE9iamVjdC5rZXlz''@;'; put 'put ''KGcpfX0sNjAxMDI6KHVlLFgseSk9Pnt2YXIgST15KDE5MzA3KSxfPXkoMjcwNTQpLkJ1ZmZlcixnPXkoNjA1MDMpLEI9eSg5MTgyMSksdz15KDMyNDcpLFA9eSgxMjM3NSksRj15KDE4MjExKTtmdW5jdGlvbiB6KFcsWSxxKXt3LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IE4sdGhpcy5f''@;'; put 'put ''bGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhZKSx0aGlzLl9wcmV2PV8uZnJvbShxKSx0aGlzLl9tb2RlPVcsdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24gTigpe3RoaXMuY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBLKFcsWSxxKXt2YXIgZWU9Z1tXLnRv''@;'; put 'put ''TG93ZXJDYXNlKCldO2lmKCFlZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIHEmJihxPV8uZnJvbShxKSksIkdDTSIhPT1lZS5tb2RlJiZxLmxlbmd0aCE9PWVlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYg''@;'; put 'put ''bGVuZ3RoICIrcS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgWSYmKFk9Xy5mcm9tKFkpKSxZLmxlbmd0aCE9PWVlLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK1kubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PWVlLnR5cGU/bmV3IEIoZWUubW9k''@;'; put 'put ''dWxlLFkscSwhMCk6ImF1dGgiPT09ZWUudHlwZT9uZXcgSShlZS5tb2R1bGUsWSxxLCEwKTpuZXcgeihlZS5tb2R1bGUsWSxxKX15KDcxOTkzKSh6LHcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVyl7dGhpcy5fY2FjaGUuYWRkKFcpO2Zvcih2YXIgWSxxLGVlPVtdO1k9dGhpcy5f''@;'; put 'put ''Y2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspcT10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxZKSxlZS5wdXNoKHEpO3JldHVybiBfLmNvbmNhdChlZSl9LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRp''@;'; put 'put ''bmcpcmV0dXJuIGZ1bmN0aW9uIEwoVyl7dmFyIFk9V1sxNV07aWYoWTwxfHxZPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgcT0tMTsrK3E8WTspaWYoV1txKygxNi1ZKV0hPT1ZKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQg''@;'; put 'put ''ZGF0YSIpO2lmKDE2IT09WSlyZXR1cm4gVy5zbGljZSgwLDE2LVkpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxXKSk7aWYoVyl0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihX''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFXLHRoaXN9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihXKXt0aGlzLmNhY2hlPV8uY29uY2F0KFt0aGlzLmNhY2hlLFddKX0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFcpe3ZhciBZO2lmKFcpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2''@;'; put 'put ''KXJldHVybiBZPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxZfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBZPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxZO3Jl''@;'; put 'put ''dHVybiBudWxsfSxOLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxYLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIFUoVyxZKXt2YXIgcT1nW1cudG9Mb3dlckNhc2UoKV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''aW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoWSwhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhXLGVlLmtleSxlZS5pdil9LFguY3JlYXRlRGVjaXBoZXJpdj1LfSwzNTA6KHVlLFgseSk9Pnt2YXIgST15KDYwNTAzKSxfPXkoMTkzMDcpLGc9eSgyNzA1NCkuQnVmZmVyLEI9eSg5MTgyMSks''@;'; put 'put ''dz15KDMyNDcpLFA9eSgxMjM3NSksRj15KDE4MjExKTtmdW5jdGlvbiB6KFcsWSxxKXt3LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IEwsdGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhZKSx0aGlzLl9wcmV2PWcuZnJvbShxKSx0aGlzLl9tb2RlPVcsdGhpcy5fYXV0b3BhZGRpbmc9ITB9eSg3''@;'; put 'put ''MTk5Mykoeix3KSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFcpe3RoaXMuX2NhY2hlLmFkZChXKTtmb3IodmFyIFkscSxlZT1bXTtZPXRoaXMuX2NhY2hlLmdldCgpOylxPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFkpLGVlLnB1c2gocSk7cmV0dXJuIGcuY29uY2F0KGVlKX07dmFy''@;'; put 'put ''IE49Zy5hbGxvYygxNiwxNik7ZnVuY3Rpb24gTCgpe3RoaXMuY2FjaGU9Zy5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBLKFcsWSxxKXt2YXIgZWU9SVtXLnRvTG93ZXJDYXNlKCldO2lmKCFlZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIFkmJihZPWcuZnJvbShZKSksWS5sZW5ndGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitZLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1nLmZyb20ocSkpLCJHQ00iIT09ZWUubW9kZSYmcS5sZW5ndGghPT1lZS5p''@;'; put 'put ''dil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3EubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PWVlLnR5cGU/bmV3IEIoZWUubW9kdWxlLFkscSk6ImF1dGgiPT09ZWUudHlwZT9uZXcgXyhlZS5tb2R1bGUsWSxxKTpuZXcgeihlZS5tb2R1bGUsWSxxKX16LnByb3Rv''@;'; put 'put ''dHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVz10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBXPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFcpLHRoaXMuX2NpcGhlci5zY3J1YigpLFc7aWYoIVcuZXF1YWxzKE4pKXRocm93IHRoaXMuX2NpcGhlci5z''@;'; put 'put ''Y3J1YigpLG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LHoucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFcpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVcsdGhpc30sTC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFcpe3RoaXMuY2Fj''@;'; put 'put ''aGU9Zy5jb25jYXQoW3RoaXMuY2FjaGUsV10pfSxMLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIFc9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxXfXJldHVybiBudWxsfSxM''@;'; put 'put ''LnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgVz0xNi10aGlzLmNhY2hlLmxlbmd0aCxZPWcuYWxsb2NVbnNhZmUoVykscT0tMTsrK3E8VzspWS53cml0ZVVJbnQ4KFcscSk7cmV0dXJuIGcuY29uY2F0KFt0aGlzLmNhY2hlLFldKX0sWC5jcmVhdGVDaXBoZXJpdj1LLFguY3Jl''@;'; put 'put ''YXRlQ2lwaGVyPWZ1bmN0aW9uIFUoVyxZKXt2YXIgcT1JW1cudG9Mb3dlckNhc2UoKV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoWSwhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhXLGVlLmtleSxlZS5pdil9fSw4NTkxNzoodWUsWCx5''@;'; put 'put ''KT0+e3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcixfPUkuYWxsb2MoMTYsMCk7ZnVuY3Rpb24gQihQKXt2YXIgRj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gRi53cml0ZVVJbnQzMkJFKFBbMF0+Pj4wLDApLEYud3JpdGVVSW50MzJCRShQWzFdPj4+MCw0KSxGLndyaXRlVUludDMyQkUoUFsyXT4+''@;'; put 'put ''PjAsOCksRi53cml0ZVVJbnQzMkJFKFBbM10+Pj4wLDEyKSxGfWZ1bmN0aW9uIHcoUCl7dGhpcy5oPVAsdGhpcy5zdGF0ZT1JLmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9SS5hbGxvY1Vuc2FmZSgwKX13LnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihQKXtmb3IodmFyIEY9LTE7KytGPFAubGVu''@;'; put 'put ''Z3RoOyl0aGlzLnN0YXRlW0ZdXj1QW0ZdO3RoaXMuX211bHRpcGx5KCl9LHcucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgTyxOLFA9ZnVuY3Rpb24gZyhQKXtyZXR1cm5bUC5yZWFkVUludDMyQkUoMCksUC5yZWFkVUludDMyQkUoNCksUC5yZWFkVUludDMyQkUoOCks''@;'; put 'put ''UC5yZWFkVUludDMyQkUoMTIpXX0odGhpcy5oKSxGPVswLDAsMCwwXSxMPS0xOysrTDwxMjg7KXtmb3IoISEodGhpcy5zdGF0ZVt+fihMLzgpXSYxPDw3LUwlOCkmJihGWzBdXj1QWzBdLEZbMV1ePVBbMV0sRlsyXV49UFsyXSxGWzNdXj1QWzNdKSxOPSEhKDEmUFszXSksTz0zO08+MDtPLS0p''@;'; put 'put ''UFtPXT1QW09dPj4+MXwoMSZQW08tMV0pPDwzMTtQWzBdPVBbMF0+Pj4xLE4mJihQWzBdPVBbMF1eMjI1PDwyNCl9dGhpcy5zdGF0ZT1CKEYpfSx3LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oUCl7dGhpcy5jYWNoZT1JLmNvbmNhdChbdGhpcy5jYWNoZSxQXSk7Zm9yKHZhciBGO3RoaXMu''@;'; put 'put ''Y2FjaGUubGVuZ3RoPj0xNjspRj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChGKX0sdy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oUCxGKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goSS5jb25j''@;'; put 'put ''YXQoW3RoaXMuY2FjaGUsX10sMTYpKSx0aGlzLmdoYXNoKEIoWzAsUCwwLEZdKSksdGhpcy5zdGF0ZX0sdWUuZXhwb3J0cz13fSw5NTcyNTp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24gWCh5KXtmb3IodmFyIF8sST15Lmxlbmd0aDtJLS07KXtpZigyNTUhPT0oXz15LnJlYWRVSW50OChJKSkp''@;'; put 'put ''e18rKyx5LndyaXRlVUludDgoXyxJKTticmVha315LndyaXRlVUludDgoMCxJKX19fSwzNDEzMzoodWUsWCx5KT0+e3ZhciBJPXkoMTM1NDYpO1guZW5jcnlwdD1mdW5jdGlvbihfLGcpe3ZhciBCPUkoZyxfLl9wcmV2KTtyZXR1cm4gXy5fcHJldj1fLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIp''@;'; put 'put ''LF8uX3ByZXZ9LFguZGVjcnlwdD1mdW5jdGlvbihfLGcpe3ZhciBCPV8uX3ByZXY7Xy5fcHJldj1nO3ZhciB3PV8uX2NpcGhlci5kZWNyeXB0QmxvY2soZyk7cmV0dXJuIEkodyxCKX19LDE3MDkwOih1ZSxYLHkpPT57dmFyIEk9eSgyNzA1NCkuQnVmZmVyLF89eSgxMzU0Nik7ZnVuY3Rpb24g''@;'; put 'put ''ZyhCLHcsUCl7dmFyIEY9dy5sZW5ndGgsTz1fKHcsQi5fY2FjaGUpO3JldHVybiBCLl9jYWNoZT1CLl9jYWNoZS5zbGljZShGKSxCLl9wcmV2PUkuY29uY2F0KFtCLl9wcmV2LFA/dzpPXSksT31YLmVuY3J5cHQ9ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgTyxGPUkuYWxsb2NVbnNhZmUoMCk7''@;'; put 'put ''dy5sZW5ndGg7KXtpZigwPT09Qi5fY2FjaGUubGVuZ3RoJiYoQi5fY2FjaGU9Qi5fY2lwaGVyLmVuY3J5cHRCbG9jayhCLl9wcmV2KSxCLl9wcmV2PUkuYWxsb2NVbnNhZmUoMCkpLCEoQi5fY2FjaGUubGVuZ3RoPD13Lmxlbmd0aCkpe0Y9SS5jb25jYXQoW0YsZyhCLHcsUCldKTticmVha31G''@;'; put 'put ''PUkuY29uY2F0KFtGLGcoQix3LnNsaWNlKDAsTz1CLl9jYWNoZS5sZW5ndGgpLFApXSksdz13LnNsaWNlKE8pfXJldHVybiBGfX0sNzEwMzk6KHVlLFgseSk9Pnt2YXIgST15KDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gXyhCLHcsUCl7Zm9yKHZhciBMLEssTz0tMSxOPTA7KytPPDg7KU4rPSgx''@;'; put 'put ''MjgmKEs9Qi5fY2lwaGVyLmVuY3J5cHRCbG9jayhCLl9wcmV2KVswXV4oTD13JjE8PDctTz8xMjg6MCkpKT4+TyU4LEIuX3ByZXY9ZyhCLl9wcmV2LFA/TDpLKTtyZXR1cm4gTn1mdW5jdGlvbiBnKEIsdyl7dmFyIFA9Qi5sZW5ndGgsRj0tMSxPPUkuYWxsb2NVbnNhZmUoQi5sZW5ndGgpO2Zv''@;'; put 'put ''cihCPUkuY29uY2F0KFtCLEkuZnJvbShbd10pXSk7KytGPFA7KU9bRl09QltGXTw8MXxCW0YrMV0+Pjc7cmV0dXJuIE99WC5lbmNyeXB0PWZ1bmN0aW9uKEIsdyxQKXtmb3IodmFyIEY9dy5sZW5ndGgsTz1JLmFsbG9jVW5zYWZlKEYpLHo9LTE7Kyt6PEY7KU9bel09XyhCLHdbel0sUCk7cmV0''@;'; put 'put ''dXJuIE99fSw3MjU3NjoodWUsWCx5KT0+e3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBfKGcsQix3KXt2YXIgRj1nLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGcuX3ByZXYpWzBdXkI7cmV0dXJuIGcuX3ByZXY9SS5jb25jYXQoW2cuX3ByZXYuc2xpY2UoMSksSS5mcm9tKFt3P0I6Rl0p''@;'; put 'put ''XSksRn1YLmVuY3J5cHQ9ZnVuY3Rpb24oZyxCLHcpe2Zvcih2YXIgUD1CLmxlbmd0aCxGPUkuYWxsb2NVbnNhZmUoUCksTz0tMTsrK088UDspRltPXT1fKGcsQltPXSx3KTtyZXR1cm4gRn19LDcwMzM2Oih1ZSxYLHkpPT57dmFyIEk9eSgxMzU0NiksXz15KDI3MDU0KS5CdWZmZXIsZz15KDk1''@;'; put 'put ''NzI1KTtmdW5jdGlvbiBCKFApe3ZhciBGPVAuX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoUC5fcHJldik7cmV0dXJuIGcoUC5fcHJldiksRn1YLmVuY3J5cHQ9ZnVuY3Rpb24oUCxGKXt2YXIgTz1NYXRoLmNlaWwoRi5sZW5ndGgvMTYpLHo9UC5fY2FjaGUubGVuZ3RoO1AuX2NhY2hlPV8uY29u''@;'; put 'put ''Y2F0KFtQLl9jYWNoZSxfLmFsbG9jVW5zYWZlKDE2Kk8pXSk7Zm9yKHZhciBOPTA7TjxPO04rKyl7dmFyIEw9QihQKSxLPXorMTYqTjtQLl9jYWNoZS53cml0ZVVJbnQzMkJFKExbMF0sSyswKSxQLl9jYWNoZS53cml0ZVVJbnQzMkJFKExbMV0sSys0KSxQLl9jYWNoZS53cml0ZVVJbnQzMkJF''@;'; put 'put ''KExbMl0sSys4KSxQLl9jYWNoZS53cml0ZVVJbnQzMkJFKExbM10sSysxMil9dmFyIFU9UC5fY2FjaGUuc2xpY2UoMCxGLmxlbmd0aCk7cmV0dXJuIFAuX2NhY2hlPVAuX2NhY2hlLnNsaWNlKEYubGVuZ3RoKSxJKEYsVSl9fSwzNzUxMzoodWUsWCk9PntYLmVuY3J5cHQ9ZnVuY3Rpb24oeSxJ''@;'; put 'put ''KXtyZXR1cm4geS5fY2lwaGVyLmVuY3J5cHRCbG9jayhJKX0sWC5kZWNyeXB0PWZ1bmN0aW9uKHksSSl7cmV0dXJuIHkuX2NpcGhlci5kZWNyeXB0QmxvY2soSSl9fSw2MDUwMzoodWUsWCx5KT0+e3ZhciBJPXtFQ0I6eSgzNzUxMyksQ0JDOnkoMzQxMzMpLENGQjp5KDE3MDkwKSxDRkI4Onko''@;'; put 'put ''NzI1NzYpLENGQjE6eSg3MTAzOSksT0ZCOnkoNDY4NTQpLENUUjp5KDcwMzM2KSxHQ006eSg3MDMzNil9LF89eSgzMjE5KTtmb3IodmFyIGcgaW4gXylfW2ddLm1vZHVsZT1JW19bZ10ubW9kZV07dWUuZXhwb3J0cz1ffSw0Njg1NDoodWUsWCx5KT0+e3ZhciBJPXkoMTM1NDYpO2Z1bmN0aW9u''@;'; put 'put ''IF8oZyl7cmV0dXJuIGcuX3ByZXY9Zy5fY2lwaGVyLmVuY3J5cHRCbG9jayhnLl9wcmV2KSxnLl9wcmV2fVguZW5jcnlwdD1mdW5jdGlvbihnLEIpe2Zvcig7Zy5fY2FjaGUubGVuZ3RoPEIubGVuZ3RoOylnLl9jYWNoZT1CdWZmZXIuY29uY2F0KFtnLl9jYWNoZSxfKGcpXSk7dmFyIHc9Zy5f''@;'; put 'put ''Y2FjaGUuc2xpY2UoMCxCLmxlbmd0aCk7cmV0dXJuIGcuX2NhY2hlPWcuX2NhY2hlLnNsaWNlKEIubGVuZ3RoKSxJKEIsdyl9fSw5MTgyMToodWUsWCx5KT0+e3ZhciBJPXkoMTIzNzUpLF89eSgyNzA1NCkuQnVmZmVyLGc9eSgzMjQ3KTtmdW5jdGlvbiB3KFAsRixPLHope2cuY2FsbCh0aGlz''@;'; put 'put ''KSx0aGlzLl9jaXBoZXI9bmV3IEkuQUVTKEYpLHRoaXMuX3ByZXY9Xy5mcm9tKE8pLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PXosdGhpcy5fbW9kZT1QfXkoNzE5OTMpKHcsZyksdy5wcm90b3R5cGUu''@;'; put 'put ''X3VwZGF0ZT1mdW5jdGlvbihQKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsUCx0aGlzLl9kZWNyeXB0KX0sdy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LHVlLmV4cG9ydHM9d30sODg4NjI6KHVlLFgseSk9Pnt2YXIgST15KDM5Nzk5''@;'; put 'put ''KSxfPXkoNDMzODgpLGc9eSg2MDUwMyksQj15KDU5NTcxKSx3PXkoMTgyMTEpO2Z1bmN0aW9uIE8oTCxLLFUpe2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pcmV0dXJuIF8uY3JlYXRlQ2lwaGVyaXYoTCxLLFUpO2lmKEJbTF0pcmV0dXJuIG5ldyBJKHtrZXk6SyxpdjpVLG1vZGU6TH0pO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIHooTCxLLFUpe2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pcmV0dXJuIF8uY3JlYXRlRGVjaXBoZXJpdihMLEssVSk7aWYoQltMXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlUsbW9kZTpMLGRlY3J5cHQ6''@;'; put 'put ''ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1YLmNyZWF0ZUNpcGhlcj1YLkNpcGhlcj1mdW5jdGlvbiBQKEwsSyl7dmFyIFUsVztpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKVU9Z1tMXS5rZXksVz1nW0xdLml2O2Vsc2V7aWYoIUJbTF0pdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7VT04KkJbTF0ua2V5LFc9QltMXS5pdn12YXIgWT13KEssITEsVSxXKTtyZXR1cm4gTyhMLFkua2V5LFkuaXYpfSxYLmNyZWF0ZUNpcGhlcml2PVguQ2lwaGVyaXY9TyxYLmNyZWF0ZURlY2lwaGVyPVguRGVjaXBoZXI9ZnVuY3Rpb24g''@;'; put 'put ''RihMLEspe3ZhciBVLFc7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlVPWdbTF0ua2V5LFc9Z1tMXS5pdjtlbHNle2lmKCFCW0xdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1U9OCpCW0xdLmtleSxXPUJbTF0uaXZ9dmFyIFk9dyhLLCExLFUsVyk7cmV0dXJu''@;'; put 'put ''IHooTCxZLmtleSxZLml2KX0sWC5jcmVhdGVEZWNpcGhlcml2PVguRGVjaXBoZXJpdj16LFgubGlzdENpcGhlcnM9WC5nZXRDaXBoZXJzPWZ1bmN0aW9uIE4oKXtyZXR1cm4gT2JqZWN0LmtleXMoQikuY29uY2F0KF8uZ2V0Q2lwaGVycygpKX19LDM5Nzk5Oih1ZSxYLHkpPT57dmFyIEk9eSgz''@;'; put 'put ''MjQ3KSxfPXkoNzE1NDkpLGc9eSg3MTk5MyksQj15KDI3MDU0KS5CdWZmZXIsdz17ImRlcy1lZGUzLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5FREUpLCJkZXMtZWRlMyI6Xy5FREUsImRlcy1lZGUtY2JjIjpfLkNCQy5pbnN0YW50aWF0ZShfLkVERSksImRlcy1lZGUiOl8uRURFLCJkZXMt''@;'; put 'put ''Y2JjIjpfLkNCQy5pbnN0YW50aWF0ZShfLkRFUyksImRlcy1lY2IiOl8uREVTfTtmdW5jdGlvbiBQKEYpe0kuY2FsbCh0aGlzKTt2YXIgTixPPUYubW9kZS50b0xvd2VyQ2FzZSgpLHo9d1tPXTtOPUYuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciBMPUYua2V5O0IuaXNCdWZmZXIo''@;'; put 'put ''TCl8fChMPUIuZnJvbShMKSksKCJkZXMtZWRlIj09PU98fCJkZXMtZWRlLWNiYyI9PT1PKSYmKEw9Qi5jb25jYXQoW0wsTC5zbGljZSgwLDgpXSkpO3ZhciBLPUYuaXY7Qi5pc0J1ZmZlcihLKXx8KEs9Qi5mcm9tKEspKSx0aGlzLl9kZXM9ei5jcmVhdGUoe2tleTpMLGl2OkssdHlwZTpOfSl9''@;'; put 'put ''dy5kZXM9d1siZGVzLWNiYyJdLHcuZGVzMz13WyJkZXMtZWRlMy1jYmMiXSx1ZS5leHBvcnRzPVAsZyhQLEkpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7cmV0dXJuIEIuZnJvbSh0aGlzLl9kZXMudXBkYXRlKEYpKX0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIEIuZnJvbSh0aGlzLl9kZXMuZmluYWwoKSl9fSw1OTU3MToodWUsWCk9PntYWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LFhbImRlcy1jYmMiXT1YLmRlcz17a2V5OjgsaXY6OH0sWFsiZGVzLWVkZTMtY2JjIl09WC5kZXMzPXtrZXk6MjQsaXY6OH0sWFsiZGVzLWVkZTMiXT17a2V5OjI0''@;'; put 'put ''LGl2OjB9LFhbImRlcy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxYWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0sMTQxMDU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MTcpLF89eSgzMzQyKSxnPXkoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBCKEYpe3ZhciB6LE89Ri5tb2R1''@;'; put 'put ''bHVzLmJ5dGVMZW5ndGgoKTtkb3t6PW5ldyBJKF8oTykpfXdoaWxlKHouY21wKEYubW9kdWx1cyk+PTB8fCF6LnVtb2QoRi5wcmltZTEpfHwhei51bW9kKEYucHJpbWUyKSk7cmV0dXJuIHp9ZnVuY3Rpb24gUChGLE8pe3ZhciB6PWZ1bmN0aW9uIHcoRil7dmFyIE89QihGKTtyZXR1cm57Ymxp''@;'; put 'put ''bmRlcjpPLnRvUmVkKEkubW9udChGLm1vZHVsdXMpKS5yZWRQb3cobmV3IEkoRi5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKSx1bmJsaW5kZXI6Ty5pbnZtKEYubW9kdWx1cyl9fShPKSxOPU8ubW9kdWx1cy5ieXRlTGVuZ3RoKCksTD1uZXcgSShGKS5tdWwoei5ibGluZGVyKS51bW9kKE8u''@;'; put 'put ''bW9kdWx1cyksSz1MLnRvUmVkKEkubW9udChPLnByaW1lMSkpLFU9TC50b1JlZChJLm1vbnQoTy5wcmltZTIpKSxXPU8uY29lZmZpY2llbnQsWT1PLnByaW1lMSxxPU8ucHJpbWUyLGVlPUsucmVkUG93KE8uZXhwb25lbnQxKS5mcm9tUmVkKCksSj1VLnJlZFBvdyhPLmV4cG9uZW50MikuZnJv''@;'; put 'put ''bVJlZCgpLG5lPWVlLmlzdWIoSikuaW11bChXKS51bW9kKFkpLmltdWwocSk7cmV0dXJuIEouaWFkZChuZSkuaW11bCh6LnVuYmxpbmRlcikudW1vZChPLm1vZHVsdXMpLnRvQXJyYXlMaWtlKGcsImJlIixOKX1QLmdldHI9Qix1ZS5leHBvcnRzPVB9LDk5NTYwOih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3VlLmV4cG9ydHM9eSg2Mjk1MSl9LDc5MTQzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcixfPXkoNjcyMTEpLGc9eSg1OTQyKSxCPXkoNzE5OTMpLHc9eSg0MzE1MCksUD15KDc0NzU0KSxGPXkoNjI5NTEpO2Z1bmN0aW9uIE8oSyl7Zy5Xcml0''@;'; put 'put ''YWJsZS5jYWxsKHRoaXMpO3ZhciBVPUZbS107aWYoIVUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaFR5cGU9VS5oYXNoLHRoaXMuX2hhc2g9XyhVLmhhc2gpLHRoaXMuX3RhZz1VLmlkLHRoaXMuX3NpZ25UeXBlPVUuc2lnbn1mdW5jdGlvbiB6''@;'; put 'put ''KEspe2cuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgVT1GW0tdO2lmKCFVKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2g9XyhVLmhhc2gpLHRoaXMuX3RhZz1VLmlkLHRoaXMuX3NpZ25UeXBlPVUuc2lnbn1mdW5jdGlvbiBOKEspe3JldHVybiBu''@;'; put 'put ''ZXcgTyhLKX1mdW5jdGlvbiBMKEspe3JldHVybiBuZXcgeihLKX1PYmplY3Qua2V5cyhGKS5mb3JFYWNoKGZ1bmN0aW9uKEspe0ZbS10uaWQ9SS5mcm9tKEZbS10uaWQsImhleCIpLEZbSy50b0xvd2VyQ2FzZSgpXT1GW0tdfSksQihPLGcuV3JpdGFibGUpLE8ucHJvdG90eXBlLl93cml0ZT1m''@;'; put 'put ''dW5jdGlvbihVLFcsWSl7dGhpcy5faGFzaC51cGRhdGUoVSksWSgpfSxPLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVSxXKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBVP0kuZnJvbShVLFcpOlUpLHRoaXN9LE8ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24o''@;'; put 'put ''VSxXKXt0aGlzLmVuZCgpO3ZhciBZPXRoaXMuX2hhc2guZGlnZXN0KCkscT13KFksVSx0aGlzLl9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpO3JldHVybiBXP3EudG9TdHJpbmcoVyk6cX0sQih6LGcuV3JpdGFibGUpLHoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihVLFcs''@;'; put 'put ''WSl7dGhpcy5faGFzaC51cGRhdGUoVSksWSgpfSx6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVSxXKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBVP0kuZnJvbShVLFcpOlUpLHRoaXN9LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihVLFcsWSl7dmFy''@;'; put 'put ''IHE9InN0cmluZyI9PXR5cGVvZiBXP0kuZnJvbShXLFkpOlc7dGhpcy5lbmQoKTt2YXIgZWU9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gUChxLGVlLFUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sdWUuZXhwb3J0cz17U2lnbjpOLFZlcmlmeTpMLGNyZWF0ZVNpZ246TixjcmVhdGVW''@;'; put 'put ''ZXJpZnk6TH19LDQzMTUwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcixfPXkoNTY0MzIpLGc9eSgxNDEwNSksQj15KDkwNTE4KS5lYyx3PXkoOTE3KSxQPXkoNjU2NjcpLEY9eSg2NDU4OSk7ZnVuY3Rpb24gVShKLG5lLGllLGxlKXtpZigoSj1JLmZyb20o''@;'; put 'put ''Si50b0FycmF5KCkpKS5sZW5ndGg8bmUuYnl0ZUxlbmd0aCgpKXt2YXIgbWU9SS5hbGxvYyhuZS5ieXRlTGVuZ3RoKCktSi5sZW5ndGgpO0o9SS5jb25jYXQoW21lLEpdKX12YXIgX2U9aWUubGVuZ3RoLFRlPWZ1bmN0aW9uIFkoSixuZSl7Sj0oSj1XKEosbmUpKS5tb2QobmUpO3ZhciBpZT1J''@;'; put 'put ''LmZyb20oSi50b0FycmF5KCkpO2lmKGllLmxlbmd0aDxuZS5ieXRlTGVuZ3RoKCkpe3ZhciBsZT1JLmFsbG9jKG5lLmJ5dGVMZW5ndGgoKS1pZS5sZW5ndGgpO2llPUkuY29uY2F0KFtsZSxpZV0pfXJldHVybiBpZX0oaWUsbmUpLFNlPUkuYWxsb2MoX2UpO1NlLmZpbGwoMSk7dmFyIGplPUku''@;'; put 'put ''YWxsb2MoX2UpO3JldHVybiBqZT1fKGxlLGplKS51cGRhdGUoU2UpLnVwZGF0ZShJLmZyb20oWzBdKSkudXBkYXRlKEopLnVwZGF0ZShUZSkuZGlnZXN0KCksU2U9XyhsZSxqZSkudXBkYXRlKFNlKS5kaWdlc3QoKSx7azpqZT1fKGxlLGplKS51cGRhdGUoU2UpLnVwZGF0ZShJLmZyb20oWzFd''@;'; put 'put ''KSkudXBkYXRlKEopLnVwZGF0ZShUZSkuZGlnZXN0KCksdjpTZT1fKGxlLGplKS51cGRhdGUoU2UpLmRpZ2VzdCgpfX1mdW5jdGlvbiBXKEosbmUpe3ZhciBpZT1uZXcgdyhKKSxsZT0oSi5sZW5ndGg8PDMpLW5lLmJpdExlbmd0aCgpO3JldHVybiBsZT4wJiZpZS5pc2hybihsZSksaWV9ZnVu''@;'; put 'put ''Y3Rpb24gcShKLG5lLGllKXt2YXIgbGUsbWU7ZG97Zm9yKGxlPUkuYWxsb2MoMCk7OCpsZS5sZW5ndGg8Si5iaXRMZW5ndGgoKTspbmUudj1fKGllLG5lLmspLnVwZGF0ZShuZS52KS5kaWdlc3QoKSxsZT1JLmNvbmNhdChbbGUsbmUudl0pO21lPVcobGUsSiksbmUuaz1fKGllLG5lLmspLnVw''@;'; put 'put ''ZGF0ZShuZS52KS51cGRhdGUoSS5mcm9tKFswXSkpLmRpZ2VzdCgpLG5lLnY9XyhpZSxuZS5rKS51cGRhdGUobmUudikuZGlnZXN0KCl9d2hpbGUoLTEhPT1tZS5jbXAoSikpO3JldHVybiBtZX1mdW5jdGlvbiBlZShKLG5lLGllLGxlKXtyZXR1cm4gSi50b1JlZCh3Lm1vbnQoaWUpKS5yZWRQ''@;'; put 'put ''b3cobmUpLmZyb21SZWQoKS5tb2QobGUpfXVlLmV4cG9ydHM9ZnVuY3Rpb24geihKLG5lLGllLGxlLG1lKXt2YXIgX2U9UChuZSk7aWYoX2UuY3VydmUpe2lmKCJlY2RzYSIhPT1sZSYmImVjZHNhL3JzYSIhPT1sZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gTihKLG5lKXt2YXIgaWU9RltuZS5jdXJ2ZS5qb2luKCIuIildO2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIituZS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBfZT1uZXcgQihpZSkua2V5RnJvbVByaXZhdGUobmUucHJpdmF0ZUtleSkuc2lnbihK''@;'; put 'put ''KTtyZXR1cm4gSS5mcm9tKF9lLnRvREVSKCkpfShKLF9lKX1pZigiZHNhIj09PV9lLnR5cGUpe2lmKCJkc2EiIT09bGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEwoSixuZSxpZSl7Zm9yKHZhciBqZSxsZT1uZS5wYXJhbXMucHJp''@;'; put 'put ''dl9rZXksbWU9bmUucGFyYW1zLnAsX2U9bmUucGFyYW1zLnEsVGU9bmUucGFyYW1zLmcsU2U9bmV3IHcoMCksVj1XKEosX2UpLm1vZChfZSkscD0hMSxiPVUobGUsX2UsSixpZSk7ITE9PT1wOylTZT1lZShUZSxqZT1xKF9lLGIsaWUpLG1lLF9lKSwwPT09KHA9amUuaW52bShfZSkuaW11bChW''@;'; put 'put ''LmFkZChsZS5tdWwoU2UpKSkubW9kKF9lKSkuY21wbigwKSYmKHA9ITEsU2U9bmV3IHcoMCkpO3JldHVybiBmdW5jdGlvbiBLKEosbmUpe0o9Si50b0FycmF5KCksbmU9bmUudG9BcnJheSgpLDEyOCZKWzBdJiYoSj1bMF0uY29uY2F0KEopKSwxMjgmbmVbMF0mJihuZT1bMF0uY29uY2F0KG5l''@;'; put 'put ''KSk7dmFyIGxlPVs0OCxKLmxlbmd0aCtuZS5sZW5ndGgrNCwyLEoubGVuZ3RoXTtyZXR1cm4gbGU9bGUuY29uY2F0KEosWzIsbmUubGVuZ3RoXSxuZSksSS5mcm9tKGxlKX0oU2UscCl9KEosX2UsaWUpfWlmKCJyc2EiIT09bGUmJiJlY2RzYS9yc2EiIT09bGUpdGhyb3cgbmV3IEVycm9yKCJ3''@;'; put 'put ''cm9uZyBwcml2YXRlIGtleSB0eXBlIik7aWYodm9pZCAwIT09bmUucGFkZGluZyYmMSE9PW5lLnBhZGRpbmcpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIG9yIHVuc3VwcG9ydGVkIHBhZGRpbmcgbW9kZSIpO0o9SS5jb25jYXQoW21lLEpdKTtmb3IodmFyIFRlPV9lLm1vZHVsdXMuYnl0ZUxl''@;'; put 'put ''bmd0aCgpLFNlPVswLDFdO0oubGVuZ3RoK1NlLmxlbmd0aCsxPFRlOylTZS5wdXNoKDI1NSk7U2UucHVzaCgwKTtmb3IodmFyIGplPS0xOysramU8Si5sZW5ndGg7KVNlLnB1c2goSltqZV0pO3JldHVybiBnKFNlLF9lKX0sdWUuZXhwb3J0cy5nZXRLZXk9VSx1ZS5leHBvcnRzLm1ha2VLZXk9''@;'; put 'put ''cX0sNzQ3NTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyNzA1NCkuQnVmZmVyLF89eSg5MTcpLGc9eSg5MDUxOCkuZWMsQj15KDY1NjY3KSx3PXkoNjQ1ODkpO2Z1bmN0aW9uIHooTixMKXtpZihOLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lm''@;'; put 'put ''KE4uY21wKEwpPj0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX11ZS5leHBvcnRzPWZ1bmN0aW9uIFAoTixMLEssVSxXKXt2YXIgWT1CKEspO2lmKCJlYyI9PT1ZLnR5cGUpe2lmKCJlY2RzYSIhPT1VJiYiZWNkc2EvcnNhIiE9PVUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJs''@;'; put 'put ''aWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gRihOLEwsSyl7dmFyIFU9d1tLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYoIVUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrSy5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcg''@;'; put 'put ''ZyhVKS52ZXJpZnkoTCxOLEsuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oTixMLFkpfWlmKCJkc2EiPT09WS50eXBlKXtpZigiZHNhIiE9PVUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTyhOLEwsSyl7dmFyIFU9Sy5kYXRh''@;'; put 'put ''LnAsVz1LLmRhdGEucSxZPUsuZGF0YS5nLHE9Sy5kYXRhLnB1Yl9rZXksZWU9Qi5zaWduYXR1cmUuZGVjb2RlKE4sImRlciIpLEo9ZWUucyxuZT1lZS5yO3ooSixXKSx6KG5lLFcpO3ZhciBpZT1fLm1vbnQoVSksbGU9Si5pbnZtKFcpO3JldHVybiAwPT09WS50b1JlZChpZSkucmVkUG93KG5l''@;'; put 'put ''dyBfKEwpLm11bChsZSkubW9kKFcpKS5mcm9tUmVkKCkubXVsKHEudG9SZWQoaWUpLnJlZFBvdyhuZS5tdWwobGUpLm1vZChXKSkuZnJvbVJlZCgpKS5tb2QoVSkubW9kKFcpLmNtcChuZSl9KE4sTCxZKX1pZigicnNhIiE9PVUmJiJlY2RzYS9yc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndy''@;'; put 'put ''b25nIHB1YmxpYyBrZXkgdHlwZSIpO0w9SS5jb25jYXQoW1csTF0pO2Zvcih2YXIgcT1ZLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGVlPVsxXSxKPTA7TC5sZW5ndGgrZWUubGVuZ3RoKzI8cTspZWUucHVzaCgyNTUpLEorPTE7ZWUucHVzaCgwKTtmb3IodmFyIG5lPS0xOysrbmU8TC5sZW5ndGg7''@;'; put 'put ''KWVlLnB1c2goTFtuZV0pO2VlPUkuZnJvbShlZSk7dmFyIGllPV8ubW9udChZLm1vZHVsdXMpO049KE49bmV3IF8oTikudG9SZWQoaWUpKS5yZWRQb3cobmV3IF8oWS5wdWJsaWNFeHBvbmVudCkpLE49SS5mcm9tKE4uZnJvbVJlZCgpLnRvQXJyYXkoKSk7dmFyIGxlPUo8OD8xOjA7Zm9yKHE9''@;'; put 'put ''TWF0aC5taW4oTi5sZW5ndGgsZWUubGVuZ3RoKSxOLmxlbmd0aCE9PWVlLmxlbmd0aCYmKGxlPTEpLG5lPS0xOysrbmU8cTspbGV8PU5bbmVdXmVlW25lXTtyZXR1cm4gMD09PWxlfX0sMTM1NDY6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7Zm9yKHZhciBfPU1hdGgubWluKHkubGVu''@;'; put 'put ''Z3RoLEkubGVuZ3RoKSxnPW5ldyBCdWZmZXIoXyksQj0wO0I8XzsrK0IpZ1tCXT15W0JdXklbQl07cmV0dXJuIGd9fSw4MzgzODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDEzOTgxKSxfPXkoMjIwMjApLGc9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO1guQnVmZmVyPUYsWC5TbG93QnVmZmVyPWZ1bmN0aW9uIEooSWUpe3JldHVybitJZSE9SWUmJihJZT0wKSxGLmFsbG9jKCtJZSl9LFguSU5TUEVDVF9NQVhfQllURVM9NTA7dmFy''@;'; put 'put ''IEI9MjE0NzQ4MzY0NztmdW5jdGlvbiBQKEllKXtpZihJZT5CKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrSWUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciBWZT1uZXcgVWludDhBcnJheShJZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihW''@;'; put 'put ''ZSxGLnByb3RvdHlwZSksVmV9ZnVuY3Rpb24gRihJZSxWZSxrZSl7aWYoIm51bWJlciI9PXR5cGVvZiBJZSl7aWYoInN0cmluZyI9PXR5cGVvZiBWZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlw''@;'; put 'put ''ZSBudW1iZXInKTtyZXR1cm4gTChJZSl9cmV0dXJuIE8oSWUsVmUsa2UpfWZ1bmN0aW9uIE8oSWUsVmUsa2Upe2lmKCJzdHJpbmciPT10eXBlb2YgSWUpcmV0dXJuIGZ1bmN0aW9uIEsoSWUsVmUpe2lmKCgic3RyaW5nIiE9dHlwZW9mIFZlfHwiIj09PVZlKSYmKFZlPSJ1dGY4IiksIUYuaXNF''@;'; put 'put ''bmNvZGluZyhWZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitWZSk7dmFyIGtlPTB8bmUoSWUsVmUpLEFlPVAoa2UpLF90PUFlLndyaXRlKEllLFZlKTtyZXR1cm4gX3QhPT1rZSYmKEFlPUFlLnNsaWNlKDAsX3QpKSxBZX0oSWUsVmUpO2lmKEFycmF5QnVmZmVy''@;'; put 'put ''LmlzVmlldyhJZSkpcmV0dXJuIGZ1bmN0aW9uIFcoSWUpe2lmKERlKEllLFVpbnQ4QXJyYXkpKXt2YXIgVmU9bmV3IFVpbnQ4QXJyYXkoSWUpO3JldHVybiBZKFZlLmJ1ZmZlcixWZS5ieXRlT2Zmc2V0LFZlLmJ5dGVMZW5ndGgpfXJldHVybiBVKEllKX0oSWUpO2lmKG51bGw9PUllKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIEllKTtpZihEZShJZSxBcnJheUJ1ZmZlcil8fEll''@;'; put 'put ''JiZEZShJZS5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoRGUoSWUsU2hhcmVkQXJyYXlCdWZmZXIpfHxJZSYmRGUoSWUuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIFkoSWUsVmUsa2UpO2lmKCJudW1iZXIiPT10eXBlb2YgSWUp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIEFlPUllLnZhbHVlT2YmJkllLnZhbHVlT2YoKTtpZihudWxsIT1BZSYmQWUhPT1JZSlyZXR1cm4gRi5mcm9tKEFlLFZl''@;'; put 'put ''LGtlKTt2YXIgX3Q9ZnVuY3Rpb24gcShJZSl7aWYoRi5pc0J1ZmZlcihJZSkpe3ZhciBWZT0wfGVlKEllLmxlbmd0aCksa2U9UChWZSk7cmV0dXJuIDA9PT1rZS5sZW5ndGh8fEllLmNvcHkoa2UsMCwwLFZlKSxrZX1yZXR1cm4gdm9pZCAwIT09SWUubGVuZ3RoPyJudW1iZXIiIT10eXBlb2Yg''@;'; put 'put ''SWUubGVuZ3RofHxGZShJZS5sZW5ndGgpP1AoMCk6VShJZSk6IkJ1ZmZlciI9PT1JZS50eXBlJiZBcnJheS5pc0FycmF5KEllLmRhdGEpP1UoSWUuZGF0YSk6dm9pZCAwfShJZSk7aWYoX3QpcmV0dXJuIF90O2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUm''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBJZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBGLmZyb20oSWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksVmUsa2UpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywg''@;'; put 'put ''QnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIEllKX1mdW5jdGlvbiB6KEllKXtpZigibnVtYmVyIiE9dHlwZW9mIEllKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5''@;'; put 'put ''cGUgbnVtYmVyJyk7aWYoSWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK0llKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBMKEllKXtyZXR1cm4geihJZSksUChJZTwwPzA6MHxlZShJZSkpfWZ1bmN0aW9uIFUoSWUpe2Zvcih2YXIgVmU9''@;'; put 'put ''SWUubGVuZ3RoPDA/MDowfGVlKEllLmxlbmd0aCksa2U9UChWZSksQWU9MDtBZTxWZTtBZSs9MSlrZVtBZV09MjU1JkllW0FlXTtyZXR1cm4ga2V9ZnVuY3Rpb24gWShJZSxWZSxrZSl7aWYoVmU8MHx8SWUuYnl0ZUxlbmd0aDxWZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMg''@;'; put 'put ''b3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoSWUuYnl0ZUxlbmd0aDxWZSsoa2V8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgQWU7cmV0dXJuIEFlPXZvaWQgMD09PVZlJiZ2b2lkIDA9PT1rZT9uZXcgVWlu''@;'; put 'put ''dDhBcnJheShJZSk6dm9pZCAwPT09a2U/bmV3IFVpbnQ4QXJyYXkoSWUsVmUpOm5ldyBVaW50OEFycmF5KEllLFZlLGtlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoQWUsRi5wcm90b3R5cGUpLEFlfWZ1bmN0aW9uIGVlKEllKXtpZihJZT49Qil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1w''@;'; put 'put ''dCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrQi50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfEllfWZ1bmN0aW9uIG5lKEllLFZlKXtpZihGLmlzQnVmZmVyKEllKSlyZXR1cm4gSWUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhJ''@;'; put 'put ''ZSl8fERlKEllLEFycmF5QnVmZmVyKSlyZXR1cm4gSWUuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIEllKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVj''@;'; put 'put ''ZWl2ZWQgdHlwZSAnK3R5cGVvZiBJZSk7dmFyIGtlPUllLmxlbmd0aCxBZT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFBZSYmMD09PWtlKXJldHVybiAwO2Zvcih2YXIgX3Q9ITE7Oylzd2l0Y2goVmUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJp''@;'; put 'put ''bmFyeSI6cmV0dXJuIGtlO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIG90KEllKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKmtlO2Nhc2UiaGV4IjpyZXR1cm4ga2U+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1''@;'; put 'put ''cm4gWGUoSWUpLmxlbmd0aDtkZWZhdWx0OmlmKF90KXJldHVybiBBZT8tMTpvdChJZSkubGVuZ3RoO1ZlPSgiIitWZSkudG9Mb3dlckNhc2UoKSxfdD0hMH19ZnVuY3Rpb24gaWUoSWUsVmUsa2Upe3ZhciBBZT0hMTtpZigodm9pZCAwPT09VmV8fFZlPDApJiYoVmU9MCksVmU+dGhpcy5sZW5n''@;'; put 'put ''dGh8fCgodm9pZCAwPT09a2V8fGtlPnRoaXMubGVuZ3RoKSYmKGtlPXRoaXMubGVuZ3RoKSxrZTw9MCl8fChrZT4+Pj0wKTw9KFZlPj4+PTApKXJldHVybiIiO2ZvcihJZXx8KEllPSJ1dGY4Iik7Oylzd2l0Y2goSWUpe2Nhc2UiaGV4IjpyZXR1cm4gRSh0aGlzLFZlLGtlKTtjYXNlInV0Zjgi''@;'; put 'put ''OmNhc2UidXRmLTgiOnJldHVybiB4KHRoaXMsVmUsa2UpO2Nhc2UiYXNjaWkiOnJldHVybiBIKHRoaXMsVmUsa2UpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGoodGhpcyxWZSxrZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBiKHRoaXMsVmUsa2UpO2Nhc2UidWNzMiI6Y2FzZSJ1''@;'; put 'put ''Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gbSh0aGlzLFZlLGtlKTtkZWZhdWx0OmlmKEFlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSWUpO0llPShJZSsiIikudG9Mb3dlckNhc2UoKSxBZT0hMH19ZnVuY3Rpb24gbGUoSWUsVmUs''@;'; put 'put ''a2Upe3ZhciBBZT1JZVtWZV07SWVbVmVdPUllW2tlXSxJZVtrZV09QWV9ZnVuY3Rpb24gbWUoSWUsVmUsa2UsQWUsX3Qpe2lmKDA9PT1JZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBrZT8oQWU9a2Usa2U9MCk6a2U+MjE0NzQ4MzY0Nz9rZT0yMTQ3NDgzNjQ3OmtlPC0y''@;'; put 'put ''MTQ3NDgzNjQ4JiYoa2U9LTIxNDc0ODM2NDgpLEZlKGtlPStrZSkmJihrZT1fdD8wOkllLmxlbmd0aC0xKSxrZTwwJiYoa2U9SWUubGVuZ3RoK2tlKSxrZT49SWUubGVuZ3RoKXtpZihfdClyZXR1cm4tMTtrZT1JZS5sZW5ndGgtMX1lbHNlIGlmKGtlPDApe2lmKCFfdClyZXR1cm4tMTtrZT0w''@;'; put 'put ''fWlmKCJzdHJpbmciPT10eXBlb2YgVmUmJihWZT1GLmZyb20oVmUsQWUpKSxGLmlzQnVmZmVyKFZlKSlyZXR1cm4gMD09PVZlLmxlbmd0aD8tMTpfZShJZSxWZSxrZSxBZSxfdCk7aWYoIm51bWJlciI9PXR5cGVvZiBWZSlyZXR1cm4gVmUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhB''@;'; put 'put ''cnJheS5wcm90b3R5cGUuaW5kZXhPZj9fdD9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoSWUsVmUsa2UpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoSWUsVmUsa2UpOl9lKEllLFtWZV0sa2UsQWUsX3QpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBt''@;'; put 'put ''dXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIF9lKEllLFZlLGtlLEFlLF90KXt2YXIgTXQsbnQ9MSxRZT1JZS5sZW5ndGgsdW49VmUubGVuZ3RoO2lmKHZvaWQgMCE9PUFlJiYoInVjczIiPT09KEFlPVN0cmluZyhBZSkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9''@;'; put 'put ''PT1BZXx8InV0ZjE2bGUiPT09QWV8fCJ1dGYtMTZsZSI9PT1BZSkpe2lmKEllLmxlbmd0aDwyfHxWZS5sZW5ndGg8MilyZXR1cm4tMTtudD0yLFFlLz0yLHVuLz0yLGtlLz0yfWZ1bmN0aW9uIHl0KHR0LEhlKXtyZXR1cm4gMT09PW50P3R0W0hlXTp0dC5yZWFkVUludDE2QkUoSGUqbnQpfWlm''@;'; put 'put ''KF90KXt2YXIgRHQ9LTE7Zm9yKE10PWtlO010PFFlO010KyspaWYoeXQoSWUsTXQpPT09eXQoVmUsLTE9PT1EdD8wOk10LUR0KSl7aWYoLTE9PT1EdCYmKER0PU10KSxNdC1EdCsxPT09dW4pcmV0dXJuIER0Km50fWVsc2UtMSE9PUR0JiYoTXQtPU10LUR0KSxEdD0tMX1lbHNlIGZvcihrZSt1''@;'; put 'put ''bj5RZSYmKGtlPVFlLXVuKSxNdD1rZTtNdD49MDtNdC0tKXtmb3IodmFyIGl0PSEwLCRlPTA7JGU8dW47JGUrKylpZih5dChJZSxNdCskZSkhPT15dChWZSwkZSkpe2l0PSExO2JyZWFrfWlmKGl0KXJldHVybiBNdH1yZXR1cm4tMX1mdW5jdGlvbiBUZShJZSxWZSxrZSxBZSl7a2U9TnVtYmVy''@;'; put 'put ''KGtlKXx8MDt2YXIgX3Q9SWUubGVuZ3RoLWtlO0FlPyhBZT1OdW1iZXIoQWUpKT5fdCYmKEFlPV90KTpBZT1fdDt2YXIgbnQ9VmUubGVuZ3RoO0FlPm50LzImJihBZT1udC8yKTtmb3IodmFyIFFlPTA7UWU8QWU7KytRZSl7dmFyIHVuPXBhcnNlSW50KFZlLnN1YnN0cigyKlFlLDIpLDE2KTtp''@;'; put 'put ''ZihGZSh1bikpcmV0dXJuIFFlO0llW2tlK1FlXT11bn1yZXR1cm4gUWV9ZnVuY3Rpb24gU2UoSWUsVmUsa2UsQWUpe3JldHVybiB6ZShvdChWZSxJZS5sZW5ndGgta2UpLEllLGtlLEFlKX1mdW5jdGlvbiBqZShJZSxWZSxrZSxBZSl7cmV0dXJuIHplKGZ1bmN0aW9uIHhlKEllKXtmb3IodmFy''@;'; put 'put ''IFZlPVtdLGtlPTA7a2U8SWUubGVuZ3RoOysra2UpVmUucHVzaCgyNTUmSWUuY2hhckNvZGVBdChrZSkpO3JldHVybiBWZX0oVmUpLEllLGtlLEFlKX1mdW5jdGlvbiBWKEllLFZlLGtlLEFlKXtyZXR1cm4gemUoWGUoVmUpLEllLGtlLEFlKX1mdW5jdGlvbiBwKEllLFZlLGtlLEFlKXtyZXR1''@;'; put 'put ''cm4gemUoZnVuY3Rpb24gdmUoSWUsVmUpe2Zvcih2YXIga2UsQWUsbnQ9W10sUWU9MDtRZTxJZS5sZW5ndGgmJiEoKFZlLT0yKTwwKTsrK1FlKUFlPShrZT1JZS5jaGFyQ29kZUF0KFFlKSk+PjgsbnQucHVzaChrZSUyNTYpLG50LnB1c2goQWUpO3JldHVybiBudH0oVmUsSWUubGVuZ3RoLWtl''@;'; put 'put ''KSxJZSxrZSxBZSl9ZnVuY3Rpb24gYihJZSxWZSxrZSl7cmV0dXJuIEkuZnJvbUJ5dGVBcnJheSgwPT09VmUmJmtlPT09SWUubGVuZ3RoP0llOkllLnNsaWNlKFZlLGtlKSl9ZnVuY3Rpb24geChJZSxWZSxrZSl7a2U9TWF0aC5taW4oSWUubGVuZ3RoLGtlKTtmb3IodmFyIEFlPVtdLF90PVZl''@;'; put 'put ''O190PGtlOyl7dmFyIHl0LE10LER0LGl0LG50PUllW190XSxRZT1udWxsLHVuPW50PjIzOT80Om50PjIyMz8zOm50PjE5MT8yOjE7aWYoX3QrdW48PWtlKXN3aXRjaCh1bil7Y2FzZSAxOm50PDEyOCYmKFFlPW50KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJih5dD1JZVtfdCsxXSkpJiYoaXQ9''@;'; put 'put ''KDMxJm50KTw8Nnw2MyZ5dCk+MTI3JiYoUWU9aXQpO2JyZWFrO2Nhc2UgMzpNdD1JZVtfdCsyXSwxMjg9PSgxOTImKHl0PUllW190KzFdKSkmJjEyOD09KDE5MiZNdCkmJihpdD0oMTUmbnQpPDwxMnwoNjMmeXQpPDw2fDYzJk10KT4yMDQ3JiYoaXQ8NTUyOTZ8fGl0PjU3MzQzKSYmKFFlPWl0''@;'; put 'put ''KTticmVhaztjYXNlIDQ6TXQ9SWVbX3QrMl0sRHQ9SWVbX3QrM10sMTI4PT0oMTkyJih5dD1JZVtfdCsxXSkpJiYxMjg9PSgxOTImTXQpJiYxMjg9PSgxOTImRHQpJiYoaXQ9KDE1Jm50KTw8MTh8KDYzJnl0KTw8MTJ8KDYzJk10KTw8Nnw2MyZEdCk+NjU1MzUmJml0PDExMTQxMTImJihRZT1p''@;'; put 'put ''dCl9bnVsbD09PVFlPyhRZT02NTUzMyx1bj0xKTpRZT42NTUzNSYmKEFlLnB1c2goKFFlLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSxRZT01NjMyMHwxMDIzJlFlKSxBZS5wdXNoKFFlKSxfdCs9dW59cmV0dXJuIGZ1bmN0aW9uIFQoSWUpe3ZhciBWZT1JZS5sZW5ndGg7aWYoVmU8PUMpcmV0''@;'; put 'put ''dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLEllKTtmb3IodmFyIGtlPSIiLEFlPTA7QWU8VmU7KWtlKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxJZS5zbGljZShBZSxBZSs9QykpO3JldHVybiBrZX0oQWUpfVgua01heExlbmd0aD1CLCEoRi5UWVBFRF9B''@;'; put 'put ''UlJBWV9TVVBQT1JUPWZ1bmN0aW9uIHcoKXt0cnl7dmFyIEllPW5ldyBVaW50OEFycmF5KDEpLFZlPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKFZlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoSWUs''@;'; put 'put ''VmUpLDQyPT09SWUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIGNvbnNvbGU8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNo''@;'; put 'put ''IGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKEYu''@;'; put 'put ''aXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihGLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksRi5wb29sU2l6''@;'; put 'put ''ZT04MTkyLEYuZnJvbT1mdW5jdGlvbihJZSxWZSxrZSl7cmV0dXJuIE8oSWUsVmUsa2UpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoRi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihGLFVpbnQ4QXJyYXkpLEYuYWxsb2M9ZnVuY3Rpb24oSWUs''@;'; put 'put ''VmUsa2Upe3JldHVybiBmdW5jdGlvbiBOKEllLFZlLGtlKXtyZXR1cm4geihJZSksSWU8PTA/UChJZSk6dm9pZCAwIT09VmU/InN0cmluZyI9PXR5cGVvZiBrZT9QKEllKS5maWxsKFZlLGtlKTpQKEllKS5maWxsKFZlKTpQKEllKX0oSWUsVmUsa2UpfSxGLmFsbG9jVW5zYWZlPWZ1bmN0aW9u''@;'; put 'put ''KEllKXtyZXR1cm4gTChJZSl9LEYuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKEllKXtyZXR1cm4gTChJZSl9LEYuaXNCdWZmZXI9ZnVuY3Rpb24oVmUpe3JldHVybiBudWxsIT1WZSYmITA9PT1WZS5faXNCdWZmZXImJlZlIT09Ri5wcm90b3R5cGV9LEYuY29tcGFyZT1mdW5jdGlvbihWZSxr''@;'; put 'put ''ZSl7aWYoRGUoVmUsVWludDhBcnJheSkmJihWZT1GLmZyb20oVmUsVmUub2Zmc2V0LFZlLmJ5dGVMZW5ndGgpKSxEZShrZSxVaW50OEFycmF5KSYmKGtlPUYuZnJvbShrZSxrZS5vZmZzZXQsa2UuYnl0ZUxlbmd0aCkpLCFGLmlzQnVmZmVyKFZlKXx8IUYuaXNCdWZmZXIoa2UpKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKFZlPT09a2UpcmV0dXJuIDA7Zm9yKHZhciBBZT1WZS5sZW5ndGgsX3Q9a2UubGVuZ3RoLG50PTAsUWU9TWF0aC5taW4oQWUsX3QpO250''@;'; put 'put ''PFFlOysrbnQpaWYoVmVbbnRdIT09a2VbbnRdKXtBZT1WZVtudF0sX3Q9a2VbbnRdO2JyZWFrfXJldHVybiBBZTxfdD8tMTpfdDxBZT8xOjB9LEYuaXNFbmNvZGluZz1mdW5jdGlvbihWZSl7c3dpdGNoKFN0cmluZyhWZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2Fz''@;'; put 'put ''ZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxGLmNvbmNhdD1mdW5jdGlvbihWZSxrZSl7''@;'; put 'put ''aWYoIUFycmF5LmlzQXJyYXkoVmUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09VmUubGVuZ3RoKXJldHVybiBGLmFsbG9jKDApO3ZhciBBZTtpZih2b2lkIDA9PT1rZSlmb3Ioa2U9MCxBZT0wO0FlPFZl''@;'; put 'put ''Lmxlbmd0aDsrK0FlKWtlKz1WZVtBZV0ubGVuZ3RoO3ZhciBfdD1GLmFsbG9jVW5zYWZlKGtlKSxudD0wO2ZvcihBZT0wO0FlPFZlLmxlbmd0aDsrK0FlKXt2YXIgUWU9VmVbQWVdO2lmKERlKFFlLFVpbnQ4QXJyYXkpKW50K1FlLmxlbmd0aD5fdC5sZW5ndGg/Ri5mcm9tKFFlKS5jb3B5KF90''@;'; put 'put ''LG50KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChfdCxRZSxudCk7ZWxzZXtpZighRi5pc0J1ZmZlcihRZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO1FlLmNvcHkoX3QsbnQpfW50Kz1RZS5sZW5ndGh9''@;'; put 'put ''cmV0dXJuIF90fSxGLmJ5dGVMZW5ndGg9bmUsRi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLEYucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBWZT10aGlzLmxlbmd0aDtpZihWZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUg''@;'; put 'put ''b2YgMTYtYml0cyIpO2Zvcih2YXIga2U9MDtrZTxWZTtrZSs9MilsZSh0aGlzLGtlLGtlKzEpO3JldHVybiB0aGlzfSxGLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgVmU9dGhpcy5sZW5ndGg7aWYoVmUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVz''@;'; put 'put ''dCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIGtlPTA7a2U8VmU7a2UrPTQpbGUodGhpcyxrZSxrZSszKSxsZSh0aGlzLGtlKzEsa2UrMik7cmV0dXJuIHRoaXN9LEYucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBWZT10aGlzLmxlbmd0aDtpZihWZSU4IT0wKXRo''@;'; put 'put ''cm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIga2U9MDtrZTxWZTtrZSs9OClsZSh0aGlzLGtlLGtlKzcpLGxlKHRoaXMsa2UrMSxrZSs2KSxsZSh0aGlzLGtlKzIsa2UrNSksbGUodGhpcyxrZSszLGtlKzQpO3Jl''@;'; put 'put ''dHVybiB0aGlzfSxGLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1GLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBWZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PVZlPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP3godGhpcywwLFZlKTppZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9''@;'; put 'put ''LEYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihWZSl7aWYoIUYuaXNCdWZmZXIoVmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PVZlfHwwPT09Ri5jb21wYXJlKHRoaXMsVmUpfSxGLnByb3RvdHlwZS5pbnNwZWN0PWZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIFZlPSIiLGtlPVguSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIFZlPXRoaXMudG9TdHJpbmcoImhleCIsMCxrZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5rZSYmKFZlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK1ZlKyI+In0sZyYmKEYu''@;'; put 'put ''cHJvdG90eXBlW2ddPUYucHJvdG90eXBlLmluc3BlY3QpLEYucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oVmUsa2UsQWUsX3QsbnQpe2lmKERlKFZlLFVpbnQ4QXJyYXkpJiYoVmU9Ri5mcm9tKFZlLFZlLm9mZnNldCxWZS5ieXRlTGVuZ3RoKSksIUYuaXNCdWZmZXIoVmUpKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFZlKTtpZih2b2lkIDA9PT1rZSYmKGtlPTApLHZvaWQgMD09PUFlJiYoQWU9VmU/VmUubGVuZ3RoOjApLHZvaWQg''@;'; put 'put ''MD09PV90JiYoX3Q9MCksdm9pZCAwPT09bnQmJihudD10aGlzLmxlbmd0aCksa2U8MHx8QWU+VmUubGVuZ3RofHxfdDwwfHxudD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoX3Q+PW50JiZrZT49QWUpcmV0dXJuIDA7aWYoX3Q+PW50''@;'; put 'put ''KXJldHVybi0xO2lmKGtlPj1BZSlyZXR1cm4gMTtpZih0aGlzPT09VmUpcmV0dXJuIDA7Zm9yKHZhciBRZT0obnQ+Pj49MCktKF90Pj4+PTApLHVuPShBZT4+Pj0wKS0oa2U+Pj49MCkseXQ9TWF0aC5taW4oUWUsdW4pLE10PXRoaXMuc2xpY2UoX3QsbnQpLER0PVZlLnNsaWNlKGtlLEFlKSxp''@;'; put 'put ''dD0wO2l0PHl0OysraXQpaWYoTXRbaXRdIT09RHRbaXRdKXtRZT1NdFtpdF0sdW49RHRbaXRdO2JyZWFrfXJldHVybiBRZTx1bj8tMTp1bjxRZT8xOjB9LEYucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihWZSxrZSxBZSl9LEYu''@;'; put 'put ''cHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBtZSh0aGlzLFZlLGtlLEFlLCEwKX0sRi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBtZSh0aGlzLFZlLGtlLEFlLCExKX0sRi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24o''@;'; put 'put ''VmUsa2UsQWUsX3Qpe2lmKHZvaWQgMD09PWtlKV90PSJ1dGY4IixBZT10aGlzLmxlbmd0aCxrZT0wO2Vsc2UgaWYodm9pZCAwPT09QWUmJiJzdHJpbmciPT10eXBlb2Yga2UpX3Q9a2UsQWU9dGhpcy5sZW5ndGgsa2U9MDtlbHNle2lmKCFpc0Zpbml0ZShrZSkpdGhyb3cgbmV3IEVycm9yKCJC''@;'; put 'put ''dWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2tlPj4+PTAsaXNGaW5pdGUoQWUpPyhBZT4+Pj0wLHZvaWQgMD09PV90JiYoX3Q9InV0ZjgiKSk6KF90PUFlLEFlPXZvaWQgMCl9dmFyIG50PXRoaXMubGVuZ3Ro''@;'; put 'put ''LWtlO2lmKCh2b2lkIDA9PT1BZXx8QWU+bnQpJiYoQWU9bnQpLFZlLmxlbmd0aD4wJiYoQWU8MHx8a2U8MCl8fGtlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO190fHwoX3Q9InV0ZjgiKTtmb3IodmFy''@;'; put 'put ''IFFlPSExOzspc3dpdGNoKF90KXtjYXNlImhleCI6cmV0dXJuIFRlKHRoaXMsVmUsa2UsQWUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFNlKHRoaXMsVmUsa2UsQWUpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGplKHRoaXMsVmUsa2UsQWUp''@;'; put 'put ''O2Nhc2UiYmFzZTY0IjpyZXR1cm4gVih0aGlzLFZlLGtlLEFlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHAodGhpcyxWZSxrZSxBZSk7ZGVmYXVsdDppZihRZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5n''@;'; put 'put ''OiAiK190KTtfdD0oIiIrX3QpLnRvTG93ZXJDYXNlKCksUWU9ITB9fSxGLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBDPTQwOTY7ZnVuY3Rpb24g''@;'; put 'put ''SChJZSxWZSxrZSl7dmFyIEFlPSIiO2tlPU1hdGgubWluKEllLmxlbmd0aCxrZSk7Zm9yKHZhciBfdD1WZTtfdDxrZTsrK190KUFlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZJZVtfdF0pO3JldHVybiBBZX1mdW5jdGlvbiBqKEllLFZlLGtlKXt2YXIgQWU9IiI7a2U9TWF0aC5taW4oSWUu''@;'; put 'put ''bGVuZ3RoLGtlKTtmb3IodmFyIF90PVZlO190PGtlOysrX3QpQWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoSWVbX3RdKTtyZXR1cm4gQWV9ZnVuY3Rpb24gRShJZSxWZSxrZSl7dmFyIEFlPUllLmxlbmd0aDsoIVZlfHxWZTwwKSYmKFZlPTApLCgha2V8fGtlPDB8fGtlPkFlKSYmKGtlPUFlKTtm''@;'; put 'put ''b3IodmFyIF90PSIiLG50PVZlO250PGtlOysrbnQpX3QrPU9lW0llW250XV07cmV0dXJuIF90fWZ1bmN0aW9uIG0oSWUsVmUsa2Upe2Zvcih2YXIgQWU9SWUuc2xpY2UoVmUsa2UpLF90PSIiLG50PTA7bnQ8QWUubGVuZ3RoLTE7bnQrPTIpX3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoQWVbbnRd''@;'; put 'put ''KzI1NipBZVtudCsxXSk7cmV0dXJuIF90fWZ1bmN0aW9uIEEoSWUsVmUsa2Upe2lmKEllJTEhPTB8fEllPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKEllK1ZlPmtlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBi''@;'; put 'put ''dWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gYWUoSWUsVmUsa2UsQWUsX3QsbnQpe2lmKCFGLmlzQnVmZmVyKEllKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoVmU+X3R8fFZlPG50KXRocm93IG5ldyBSYW5nZUVy''@;'; put 'put ''cm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihrZStBZT5JZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHRlKEllLFZlLGtlLEFlLF90LG50KXtpZihrZStBZT5JZS5sZW5ndGgpdGhyb3cgbmV3IFJh''@;'; put 'put ''bmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKGtlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHNlKEllLFZlLGtlLEFlLF90KXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsX3R8fHRlKEllLDAsa2UsNCksXy53cml0ZShJZSxWZSxr''@;'; put 'put ''ZSxBZSwyMyw0KSxrZSs0fWZ1bmN0aW9uIHdlKEllLFZlLGtlLEFlLF90KXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsX3R8fHRlKEllLDAsa2UsOCksXy53cml0ZShJZSxWZSxrZSxBZSw1Miw4KSxrZSs4fUYucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKFZlLGtlKXt2YXIgQWU9dGhpcy5sZW5n''@;'; put 'put ''dGg7KFZlPX5+VmUpPDA/KFZlKz1BZSk8MCYmKFZlPTApOlZlPkFlJiYoVmU9QWUpLChrZT12b2lkIDA9PT1rZT9BZTp+fmtlKTwwPyhrZSs9QWUpPDAmJihrZT0wKTprZT5BZSYmKGtlPUFlKSxrZTxWZSYmKGtlPVZlKTt2YXIgX3Q9dGhpcy5zdWJhcnJheShWZSxrZSk7cmV0dXJuIE9iamVj''@;'; put 'put ''dC5zZXRQcm90b3R5cGVPZihfdCxGLnByb3RvdHlwZSksX3R9LEYucHJvdG90eXBlLnJlYWRVaW50TEU9Ri5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihWZSxrZSxBZSl7VmU+Pj49MCxrZT4+Pj0wLEFlfHxBKFZlLGtlLHRoaXMubGVuZ3RoKTtmb3IodmFyIF90PXRoaXNbVmVdLG50''@;'; put 'put ''PTEsUWU9MDsrK1FlPGtlJiYobnQqPTI1Nik7KV90Kz10aGlzW1ZlK1FlXSpudDtyZXR1cm4gX3R9LEYucHJvdG90eXBlLnJlYWRVaW50QkU9Ri5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihWZSxrZSxBZSl7VmU+Pj49MCxrZT4+Pj0wLEFlfHxBKFZlLGtlLHRoaXMubGVuZ3RoKTtm''@;'; put 'put ''b3IodmFyIF90PXRoaXNbVmUrLS1rZV0sbnQ9MTtrZT4wJiYobnQqPTI1Nik7KV90Kz10aGlzW1ZlKy0ta2VdKm50O3JldHVybiBfdH0sRi5wcm90b3R5cGUucmVhZFVpbnQ4PUYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsMSx0''@;'; put 'put ''aGlzLmxlbmd0aCksdGhpc1tWZV19LEYucHJvdG90eXBlLnJlYWRVaW50MTZMRT1GLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDIsdGhpcy5sZW5ndGgpLHRoaXNbVmVdfHRoaXNbVmUrMV08PDh9LEYucHJvdG90eXBlLnJl''@;'; put 'put ''YWRVaW50MTZCRT1GLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDIsdGhpcy5sZW5ndGgpLHRoaXNbVmVdPDw4fHRoaXNbVmUrMV19LEYucHJvdG90eXBlLnJlYWRVaW50MzJMRT1GLnByb3RvdHlwZS5yZWFkVUludDMyTEU9''@;'; put 'put ''ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW1ZlXXx0aGlzW1ZlKzFdPDw4fHRoaXNbVmUrMl08PDE2KSsxNjc3NzIxNip0aGlzW1ZlKzNdfSxGLnByb3RvdHlwZS5yZWFkVWludDMyQkU9Ri5wcm90b3R5cGUucmVhZFVJbnQzMkJF''@;'; put 'put ''PWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW1ZlXSsodGhpc1tWZSsxXTw8MTZ8dGhpc1tWZSsyXTw8OHx0aGlzW1ZlKzNdKX0sRi5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKFZlLGtlLEFlKXtWZT4+Pj0w''@;'; put 'put ''LGtlPj4+PTAsQWV8fEEoVmUsa2UsdGhpcy5sZW5ndGgpO2Zvcih2YXIgX3Q9dGhpc1tWZV0sbnQ9MSxRZT0wOysrUWU8a2UmJihudCo9MjU2KTspX3QrPXRoaXNbVmUrUWVdKm50O3JldHVybiBfdD49KG50Kj0xMjgpJiYoX3QtPU1hdGgucG93KDIsOCprZSkpLF90fSxGLnByb3RvdHlwZS5y''@;'; put 'put ''ZWFkSW50QkU9ZnVuY3Rpb24oVmUsa2UsQWUpe1ZlPj4+PTAsa2U+Pj49MCxBZXx8QShWZSxrZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBfdD1rZSxudD0xLFFlPXRoaXNbVmUrLS1fdF07X3Q+MCYmKG50Kj0yNTYpOylRZSs9dGhpc1tWZSstLV90XSpudDtyZXR1cm4gUWU+PShudCo9MTI4KSYm''@;'; put 'put ''KFFlLT1NYXRoLnBvdygyLDgqa2UpKSxRZX0sRi5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW1ZlXT8tMSooMjU1LXRoaXNbVmVdKzEpOnRoaXNbVmVdfSxGLnByb3RvdHlwZS5yZWFkSW50''@;'; put 'put ''MTZMRT1mdW5jdGlvbihWZSxrZSl7VmU+Pj49MCxrZXx8QShWZSwyLHRoaXMubGVuZ3RoKTt2YXIgQWU9dGhpc1tWZV18dGhpc1tWZSsxXTw8ODtyZXR1cm4gMzI3NjgmQWU/NDI5NDkwMTc2MHxBZTpBZX0sRi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oVmUsa2Upe1ZlPj4+PTAs''@;'; put 'put ''a2V8fEEoVmUsMix0aGlzLmxlbmd0aCk7dmFyIEFlPXRoaXNbVmUrMV18dGhpc1tWZV08PDg7cmV0dXJuIDMyNzY4JkFlPzQyOTQ5MDE3NjB8QWU6QWV9LEYucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSw0LHRoaXMubGVuZ3Ro''@;'; put 'put ''KSx0aGlzW1ZlXXx0aGlzW1ZlKzFdPDw4fHRoaXNbVmUrMl08PDE2fHRoaXNbVmUrM108PDI0fSxGLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsNCx0aGlzLmxlbmd0aCksdGhpc1tWZV08PDI0fHRoaXNbVmUrMV08PDE2fHRo''@;'; put 'put ''aXNbVmUrMl08PDh8dGhpc1tWZSszXX0sRi5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLF8ucmVhZCh0aGlzLFZlLCEwLDIzLDQpfSxGLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihWZSxr''@;'; put 'put ''ZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsNCx0aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsVmUsITEsMjMsNCl9LEYucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsOCx0aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsVmUsITAs''@;'; put 'put ''NTIsOCl9LEYucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsOCx0aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsVmUsITEsNTIsOCl9LEYucHJvdG90eXBlLndyaXRlVWludExFPUYucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0''@;'; put 'put ''aW9uKFZlLGtlLEFlLF90KXtWZT0rVmUsa2U+Pj49MCxBZT4+Pj0wLF90fHxhZSh0aGlzLFZlLGtlLEFlLE1hdGgucG93KDIsOCpBZSktMSwwKTt2YXIgUWU9MSx1bj0wO2Zvcih0aGlzW2tlXT0yNTUmVmU7Kyt1bjxBZSYmKFFlKj0yNTYpOyl0aGlzW2tlK3VuXT1WZS9RZSYyNTU7cmV0dXJu''@;'; put 'put ''IGtlK0FlfSxGLnByb3RvdHlwZS53cml0ZVVpbnRCRT1GLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihWZSxrZSxBZSxfdCl7VmU9K1ZlLGtlPj4+PTAsQWU+Pj49MCxfdHx8YWUodGhpcyxWZSxrZSxBZSxNYXRoLnBvdygyLDgqQWUpLTEsMCk7dmFyIFFlPUFlLTEsdW49MTtmb3Io''@;'; put 'put ''dGhpc1trZStRZV09MjU1JlZlOy0tUWU+PTAmJih1bio9MjU2KTspdGhpc1trZStRZV09VmUvdW4mMjU1O3JldHVybiBrZStBZX0sRi5wcm90b3R5cGUud3JpdGVVaW50OD1GLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8''@;'; put 'put ''fGFlKHRoaXMsVmUsa2UsMSwyNTUsMCksdGhpc1trZV09MjU1JlZlLGtlKzF9LEYucHJvdG90eXBlLndyaXRlVWludDE2TEU9Ri5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDIsNjU1MzUs''@;'; put 'put ''MCksdGhpc1trZV09MjU1JlZlLHRoaXNba2UrMV09VmU+Pj44LGtlKzJ9LEYucHJvdG90eXBlLndyaXRlVWludDE2QkU9Ri5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDIsNjU1MzUsMCks''@;'; put 'put ''dGhpc1trZV09VmU+Pj44LHRoaXNba2UrMV09MjU1JlZlLGtlKzJ9LEYucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ri5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDQsNDI5NDk2NzI5NSww''@;'; put 'put ''KSx0aGlzW2tlKzNdPVZlPj4+MjQsdGhpc1trZSsyXT1WZT4+PjE2LHRoaXNba2UrMV09VmU+Pj44LHRoaXNba2VdPTI1NSZWZSxrZSs0fSxGLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFPUYucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUs''@;'; put 'put ''a2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1trZV09VmU+Pj4yNCx0aGlzW2tlKzFdPVZlPj4+MTYsdGhpc1trZSsyXT1WZT4+PjgsdGhpc1trZSszXT0yNTUmVmUsa2UrNH0sRi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihWZSxrZSxBZSxfdCl7''@;'; put 'put ''aWYoVmU9K1ZlLGtlPj4+PTAsIV90KXt2YXIgbnQ9TWF0aC5wb3coMiw4KkFlLTEpO2FlKHRoaXMsVmUsa2UsQWUsbnQtMSwtbnQpfXZhciBRZT0wLHVuPTEseXQ9MDtmb3IodGhpc1trZV09MjU1JlZlOysrUWU8QWUmJih1bio9MjU2KTspVmU8MCYmMD09PXl0JiYwIT09dGhpc1trZStRZS0x''@;'; put 'put ''XSYmKHl0PTEpLHRoaXNba2UrUWVdPShWZS91bnwwKS15dCYyNTU7cmV0dXJuIGtlK0FlfSxGLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtpZihWZT0rVmUsa2U+Pj49MCwhX3Qpe3ZhciBudD1NYXRoLnBvdygyLDgqQWUtMSk7YWUodGhpcyxWZSxrZSxBZSxu''@;'; put 'put ''dC0xLC1udCl9dmFyIFFlPUFlLTEsdW49MSx5dD0wO2Zvcih0aGlzW2tlK1FlXT0yNTUmVmU7LS1RZT49MCYmKHVuKj0yNTYpOylWZTwwJiYwPT09eXQmJjAhPT10aGlzW2tlK1FlKzFdJiYoeXQ9MSksdGhpc1trZStRZV09KFZlL3VufDApLXl0JjI1NTtyZXR1cm4ga2UrQWV9LEYucHJvdG90''@;'; put 'put ''eXBlLndyaXRlSW50OD1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDEsMTI3LC0xMjgpLFZlPDAmJihWZT0yNTUrVmUrMSksdGhpc1trZV09MjU1JlZlLGtlKzF9LEYucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihWZSxr''@;'; put 'put ''ZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2tlXT0yNTUmVmUsdGhpc1trZSsxXT1WZT4+Pjgsa2UrMn0sRi5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+''@;'; put 'put ''PTAsQWV8fGFlKHRoaXMsVmUsa2UsMiwzMjc2NywtMzI3NjgpLHRoaXNba2VdPVZlPj4+OCx0aGlzW2tlKzFdPTI1NSZWZSxrZSsyfSxGLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSw0LDIx''@;'; put 'put ''NDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNba2VdPTI1NSZWZSx0aGlzW2tlKzFdPVZlPj4+OCx0aGlzW2tlKzJdPVZlPj4+MTYsdGhpc1trZSszXT1WZT4+PjI0LGtlKzR9LEYucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0w''@;'; put 'put ''LEFlfHxhZSh0aGlzLFZlLGtlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksVmU8MCYmKFZlPTQyOTQ5NjcyOTUrVmUrMSksdGhpc1trZV09VmU+Pj4yNCx0aGlzW2tlKzFdPVZlPj4+MTYsdGhpc1trZSsyXT1WZT4+PjgsdGhpc1trZSszXT0yNTUmVmUsa2UrNH0sRi5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVGbG9hdExFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gc2UodGhpcyxWZSxrZSwhMCxBZSl9LEYucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIHNlKHRoaXMsVmUsa2UsITEsQWUpfSxGLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9u''@;'; put 'put ''KFZlLGtlLEFlKXtyZXR1cm4gd2UodGhpcyxWZSxrZSwhMCxBZSl9LEYucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiB3ZSh0aGlzLFZlLGtlLCExLEFlKX0sRi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihWZSxrZSxBZSxfdCl7aWYoIUYuaXNCdWZm''@;'; put 'put ''ZXIoVmUpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKEFlfHwoQWU9MCksIV90JiYwIT09X3QmJihfdD10aGlzLmxlbmd0aCksa2U+PVZlLmxlbmd0aCYmKGtlPVZlLmxlbmd0aCksa2V8fChrZT0wKSxfdD4wJiZfdDxBZSYmKF90PUFlKSxf''@;'; put 'put ''dD09PUFlfHwwPT09VmUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoa2U8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKEFlPDB8fEFlPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9m''@;'; put 'put ''IHJhbmdlIik7aWYoX3Q8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtfdD50aGlzLmxlbmd0aCYmKF90PXRoaXMubGVuZ3RoKSxWZS5sZW5ndGgta2U8X3QtQWUmJihfdD1WZS5sZW5ndGgta2UrQWUpO3ZhciBudD1fdC1BZTtyZXR1cm4gdGhpcz09''@;'; put 'put ''PVZlJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4oa2UsQWUsX3QpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFZlLHRoaXMuc3ViYXJyYXkoQWUsX3QpLGtlKSxudH0sRi5wcm90b3R5cGUuZmlsbD1mdW5j''@;'; put 'put ''dGlvbihWZSxrZSxBZSxfdCl7aWYoInN0cmluZyI9PXR5cGVvZiBWZSl7aWYoInN0cmluZyI9PXR5cGVvZiBrZT8oX3Q9a2Usa2U9MCxBZT10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBBZSYmKF90PUFlLEFlPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1fdCYmInN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiBfdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBfdCYmIUYuaXNFbmNvZGluZyhfdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitfdCk7aWYoMT09PVZlLmxlbmd0aCl7dmFyIG50''@;'; put 'put ''PVZlLmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PV90JiZudDwxMjh8fCJsYXRpbjEiPT09X3QpJiYoVmU9bnQpfX1lbHNlIm51bWJlciI9PXR5cGVvZiBWZT9WZSY9MjU1OiJib29sZWFuIj09dHlwZW9mIFZlJiYoVmU9TnVtYmVyKFZlKSk7aWYoa2U8MHx8dGhpcy5sZW5ndGg8a2V8fHRoaXMu''@;'; put 'put ''bGVuZ3RoPEFlKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihBZTw9a2UpcmV0dXJuIHRoaXM7dmFyIFFlO2lmKGtlPj4+PTAsQWU9dm9pZCAwPT09QWU/dGhpcy5sZW5ndGg6QWU+Pj4wLFZlfHwoVmU9MCksIm51bWJlciI9PXR5cGVvZiBWZSlmb3IoUWU9''@;'; put 'put ''a2U7UWU8QWU7KytRZSl0aGlzW1FlXT1WZTtlbHNle3ZhciB1bj1GLmlzQnVmZmVyKFZlKT9WZTpGLmZyb20oVmUsX3QpLHl0PXVuLmxlbmd0aDtpZigwPT09eXQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK1ZlKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSIn''@;'; put 'put ''KTtmb3IoUWU9MDtRZTxBZS1rZTsrK1FlKXRoaXNbUWUra2VdPXVuW1FlJXl0XX1yZXR1cm4gdGhpc307dmFyIFVlPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gb3QoSWUsVmUpe1ZlPVZlfHwxLzA7Zm9yKHZhciBrZSxBZT1JZS5sZW5ndGgsX3Q9bnVsbCxudD1bXSxRZT0wO1FlPEFl''@;'; put 'put ''OysrUWUpe2lmKChrZT1JZS5jaGFyQ29kZUF0KFFlKSk+NTUyOTUmJmtlPDU3MzQ0KXtpZighX3Qpe2lmKGtlPjU2MzE5KXsoVmUtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihRZSsxPT09QWUpeyhWZS09Myk+LTEmJm50LnB1c2goMjM5LDE5MSwxODkpO2NvbnRp''@;'; put 'put ''bnVlfV90PWtlO2NvbnRpbnVlfWlmKGtlPDU2MzIwKXsoVmUtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KSxfdD1rZTtjb250aW51ZX1rZT02NTUzNisoX3QtNTUyOTY8PDEwfGtlLTU2MzIwKX1lbHNlIF90JiYoVmUtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KTtpZihfdD1udWxs''@;'; put 'put ''LGtlPDEyOCl7aWYoKFZlLT0xKTwwKWJyZWFrO250LnB1c2goa2UpfWVsc2UgaWYoa2U8MjA0OCl7aWYoKFZlLT0yKTwwKWJyZWFrO250LnB1c2goa2U+PjZ8MTkyLDYzJmtlfDEyOCl9ZWxzZSBpZihrZTw2NTUzNil7aWYoKFZlLT0zKTwwKWJyZWFrO250LnB1c2goa2U+PjEyfDIyNCxrZT4+''@;'; put 'put ''NiY2M3wxMjgsNjMma2V8MTI4KX1lbHNle2lmKCEoa2U8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoVmUtPTQpPDApYnJlYWs7bnQucHVzaChrZT4+MTh8MjQwLGtlPj4xMiY2M3wxMjgsa2U+PjYmNjN8MTI4LDYzJmtlfDEyOCl9fXJldHVybiBu''@;'; put 'put ''dH1mdW5jdGlvbiBYZShJZSl7cmV0dXJuIEkudG9CeXRlQXJyYXkoZnVuY3Rpb24gSmUoSWUpe2lmKChJZT0oSWU9SWUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoVWUsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO0llLmxlbmd0aCU0IT0wOylJZSs9Ij0iO3JldHVybiBJZX0o''@;'; put 'put ''SWUpKX1mdW5jdGlvbiB6ZShJZSxWZSxrZSxBZSl7Zm9yKHZhciBfdD0wO190PEFlJiYhKF90K2tlPj1WZS5sZW5ndGh8fF90Pj1JZS5sZW5ndGgpOysrX3QpVmVbX3Qra2VdPUllW190XTtyZXR1cm4gX3R9ZnVuY3Rpb24gRGUoSWUsVmUpe3JldHVybiBJZSBpbnN0YW5jZW9mIFZlfHxudWxs''@;'; put 'put ''IT1JZSYmbnVsbCE9SWUuY29uc3RydWN0b3ImJm51bGwhPUllLmNvbnN0cnVjdG9yLm5hbWUmJkllLmNvbnN0cnVjdG9yLm5hbWU9PT1WZS5uYW1lfWZ1bmN0aW9uIEZlKEllKXtyZXR1cm4gSWUhPUllfXZhciBPZT1mdW5jdGlvbigpe2Zvcih2YXIgSWU9IjAxMjM0NTY3ODlhYmNkZWYiLFZl''@;'; put 'put ''PW5ldyBBcnJheSgyNTYpLGtlPTA7a2U8MTY7KytrZSlmb3IodmFyIEFlPTE2KmtlLF90PTA7X3Q8MTY7KytfdClWZVtBZStfdF09SWVba2VdK0llW190XTtyZXR1cm4gVmV9KCl9LDMyNDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyNzA1NCkuQnVmZmVyLF89eSg3MDQ1KS5U''@;'; put 'put ''cmFuc2Zvcm0sZz15KDc4NDU0KS5JO2Z1bmN0aW9uIHcoeil7Xy5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiB6LHRoaXMuaGFzaE1vZGU/dGhpc1t6XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5h''@;'; put 'put ''bCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH15KDcxOTkzKSh3LF8pO3ZhciBQPXR5cGVvZiBVaW50OEFycmF5PCJ1IixGPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50''@;'; put 'put ''OEFycmF5PCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3JiYoSS5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLlRZUEVEX0FSUkFZX1NVUFBPUlQpO3cucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih6LE4sTCl7dmFyIEs9ZnVuY3Rpb24gTyh6LE4pe2lmKHogaW5zdGFuY2VvZiBJ''@;'; put 'put ''KXJldHVybiB6O2lmKCJzdHJpbmciPT10eXBlb2YgeilyZXR1cm4gSS5mcm9tKHosTik7aWYoRiYmQXJyYXlCdWZmZXIuaXNWaWV3KHopKXtpZigwPT09ei5ieXRlTGVuZ3RoKXJldHVybiBJLmFsbG9jKDApO3ZhciBMPUkuZnJvbSh6LmJ1ZmZlcix6LmJ5dGVPZmZzZXQsei5ieXRlTGVuZ3Ro''@;'; put 'put ''KTtpZihMLmJ5dGVMZW5ndGg9PT16LmJ5dGVMZW5ndGgpcmV0dXJuIEx9aWYoUCYmeiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuaXNCdWZmZXIoeikmJnouY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB6LmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZ6LmNvbnN0cnVjdG9yLmlzQnVm''@;'; put 'put ''ZmVyKHopKXJldHVybiBJLmZyb20oeik7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEJ1ZmZlciwgVHlwZWRBcnJheSwgb3IgRGF0YVZpZXcuJyl9KHosTiksVT10aGlzLl91cGRhdGUoSyk7''@;'; put 'put ''cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooTCYmKFU9dGhpcy5fdG9TdHJpbmcoVSxMKSksVSl9LHcucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSx3LnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1''@;'; put 'put ''dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHosTixMKXt2YXIgSzt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoeik6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh6KSl9Y2F0Y2go''@;'; put 'put ''VSl7Sz1VfWZpbmFsbHl7TChLKX19LHcucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih6KXt2YXIgTjt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaChMKXtOPUx9eihOKX0sdy5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy5fX2ZpbmFs''@;'; put 'put ''KCl8fEkuYWxsb2MoMCk7cmV0dXJuIHomJihOPXRoaXMuX3RvU3RyaW5nKE4seiwhMCkpLE59LHcucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih6LE4sTCl7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGcoTiksdGhpcy5fZW5jb2Rpbmc9TiksdGhpcy5fZW5jb2Rp''@;'; put 'put ''bmchPT1OKXRocm93IG5ldyBFcnJvcigiY2FuXHUyMDE5dCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIEs9dGhpcy5fZGVjb2Rlci53cml0ZSh6KTtyZXR1cm4gTCYmKEsrPXRoaXMuX2RlY29kZXIuZW5kKCkpLEt9LHVlLmV4cG9ydHM9d30sMjc2Mzc6KHVlLFgseSk9PntmdW5jdGlvbiBZKHEp''@;'; put 'put ''e3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocSl9WC5pc0FycmF5PWZ1bmN0aW9uIEkocSl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShxKToiW29iamVjdCBBcnJheV0iPT09WShxKX0sWC5pc0Jvb2xlYW49ZnVuY3Rpb24gXyhxKXtyZXR1cm4iYm9v''@;'; put 'put ''bGVhbiI9PXR5cGVvZiBxfSxYLmlzTnVsbD1mdW5jdGlvbiBnKHEpe3JldHVybiBudWxsPT09cX0sWC5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiBCKHEpe3JldHVybiBudWxsPT1xfSxYLmlzTnVtYmVyPWZ1bmN0aW9uIHcocSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBxfSxYLmlzU3Ry''@;'; put 'put ''aW5nPWZ1bmN0aW9uIFAocSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBxfSxYLmlzU3ltYm9sPWZ1bmN0aW9uIEYocSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxfSxYLmlzVW5kZWZpbmVkPWZ1bmN0aW9uIE8ocSl7cmV0dXJuIHZvaWQgMD09PXF9LFguaXNSZWdFeHA9ZnVuY3Rpb24geihx''@;'; put 'put ''KXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PVkocSl9LFguaXNPYmplY3Q9ZnVuY3Rpb24gTihxKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHEmJm51bGwhPT1xfSxYLmlzRGF0ZT1mdW5jdGlvbiBMKHEpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PVkocSl9LFguaXNFcnJvcj1mdW5jdGlv''@;'; put 'put ''biBLKHEpe3JldHVybiJbb2JqZWN0IEVycm9yXSI9PT1ZKHEpfHxxIGluc3RhbmNlb2YgRXJyb3J9LFguaXNGdW5jdGlvbj1mdW5jdGlvbiBVKHEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBxfSxYLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIFcocSl7cmV0dXJuIG51bGw9PT1xfHwiYm9vbGVh''@;'; put 'put ''biI9PXR5cGVvZiBxfHwibnVtYmVyIj09dHlwZW9mIHF8fCJzdHJpbmciPT10eXBlb2YgcXx8InN5bWJvbCI9PXR5cGVvZiBxfHx0eXBlb2YgcT4idSJ9LFguaXNCdWZmZXI9eSg4MzgzOCkuQnVmZmVyLmlzQnVmZmVyfSw4NzMwMzoodWUsWCx5KT0+e3ZhciBJPXkoOTA1MTgpLF89eSg4OTYw''@;'; put 'put ''Nik7dWUuZXhwb3J0cz1mdW5jdGlvbihGKXtyZXR1cm4gbmV3IEIoRil9O3ZhciBnPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2IixieXRlTGVuZ3Ro''@;'; put 'put ''OjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0''@;'; put 'put ''aW9uIEIoUCl7dGhpcy5jdXJ2ZVR5cGU9Z1tQXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOlB9KSx0aGlzLmN1cnZlPW5ldyBJLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gdyhQLEYsTyl7QXJyYXkuaXNBcnJheShQKXx8''@;'; put 'put ''KFA9UC50b0FycmF5KCkpO3ZhciB6PW5ldyBCdWZmZXIoUCk7aWYoTyYmei5sZW5ndGg8Tyl7dmFyIE49bmV3IEJ1ZmZlcihPLXoubGVuZ3RoKTtOLmZpbGwoMCksej1CdWZmZXIuY29uY2F0KFtOLHpdKX1yZXR1cm4gRj96LnRvU3RyaW5nKEYpOnp9Zy5wMjI0PWcuc2VjcDIyNHIxLGcucDI1''@;'; put 'put ''Nj1nLnNlY3AyNTZyMT1nLnByaW1lMjU2djEsZy5wMTkyPWcuc2VjcDE5MnIxPWcucHJpbWUxOTJ2MSxnLnAzODQ9Zy5zZWNwMzg0cjEsZy5wNTIxPWcuc2VjcDUyMXIxLEIucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihQLEYpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5n''@;'; put 'put ''ZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoUCxGKX0sQi5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIEY9Rnx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihQKXx8KFA9bmV3IEJ1ZmZlcihQLEYpKSx3KHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhQ''@;'; put 'put ''KS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLE8sdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LEIucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihQLEYpe3ZhciBPPXRoaXMua2V5cy5nZXRQdWJsaWMoImNvbXByZXNzZWQiPT09RiwhMCk7''@;'; put 'put ''cmV0dXJuImh5YnJpZCI9PT1GJiYoT1swXT1PW08ubGVuZ3RoLTFdJTI/Nzo2KSx3KE8sUCl9LEIucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oUCl7cmV0dXJuIHcodGhpcy5rZXlzLmdldFByaXZhdGUoKSxQKX0sQi5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKFAs''@;'; put 'put ''Ril7cmV0dXJuIEY9Rnx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihQKXx8KFA9bmV3IEJ1ZmZlcihQLEYpKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhQKSx0aGlzfSxCLnByb3RvdHlwZS5zZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFAsRil7Rj1GfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFAp''@;'; put 'put ''fHwoUD1uZXcgQnVmZmVyKFAsRikpO3ZhciBPPW5ldyBfKFApO3JldHVybiBPPU8udG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoTyksdGhpc319LDg5NjA2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEks''@;'; put 'put ''Xyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIs''@;'; put 'put ''Vi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxw''@;'; put 'put ''PTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVy''@;'; put 'put ''OnkoNzc5NjUpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1G''@;'; put 'put ''KFYsYi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0s''@;'; put 'put ''dy5taW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5f''@;'; put 'put ''aW5pdEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3Bh''@;'; put 'put ''cnNlSGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0''@;'; put 'put ''Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZw''@;'; put 'put ''LHAvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3Ro''@;'; put 'put ''PD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQs''@;'; put 'put ''SCxqPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7''@;'; put 'put ''ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29y''@;'; put 'put ''ZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3Ro''@;'; put 'put ''LWIpJTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIs''@;'; put 'put ''eCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMu''@;'; put 'put ''aW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2''@;'; put 'put ''ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3Au''@;'; put 'put ''bGVuZ3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9y''@;'; put 'put ''KDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5f''@;'; put 'put ''bm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1S''@;'; put 'put ''OiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYs''@;'; put 'put ''Niw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3''@;'; put 'put ''NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUs''@;'; put 'put ''NjA0NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndv''@;'; put 'put ''cmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSoo''@;'; put 'put ''VD0wfHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8''@;'; put 'put ''Ynx8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihD''@;'; put 'put ''LT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkm''@;'; put 'put ''JnA+PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0''@;'; put 'put ''aF0rdGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+''@;'; put 'put ''MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihw''@;'; put 'put ''LGIpe3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFy''@;'; put 'put ''IEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAo''@;'; put 'put ''VCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxu''@;'; put 'put ''KDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMp''@;'; put 'put ''LGI+PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEy''@;'; put 'put ''NyZifHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRo''@;'; put 'put ''aXMubGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFr''@;'; put 'put ''fXJldHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4o''@;'; put 'put ''MSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7''@;'; put 'put ''Zm9yKDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''dW9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7''@;'; put 'put ''eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRo''@;'; put 'put ''aXMuaXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVu''@;'; put 'put ''Z3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlz''@;'; put 'put ''LndvcmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYp''@;'; put 'put ''LHg9cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlz''@;'; put 'put ''LndvcmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''LGI9dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxl''@;'; put 'put ''bmd0aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29y''@;'; put 'put ''ZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hd''@;'; put 'put ''PXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1w''@;'; put 'put ''Lm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24o''@;'; put 'put ''KTt2YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29y''@;'; put 'put ''ZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylm''@;'; put 'put ''b3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSx4ZT04''@;'; put 'put ''MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLHplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sT2U9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1''@;'; put 'put ''bixNdD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9''@;'; put 'put ''Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+''@;'; put 'put ''MTMsaGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5p''@;'; put 'put ''bXVsKHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2''@;'; put 'put ''KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxSdCksbT0obT1NYXRoLmltdWwoeGUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHplLFJ0KSxtPShtPU1hdGguaW11bCh6ZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bCh4ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''dmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChPZSxSdCksbT0obT1NYXRoLmltdWwoT2UsUHQp''@;'; put 'put ''KStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoemUsUXQpfDAsbT0obT1tK01hdGguaW11bCh6ZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1F''@;'; put 'put ''K01hdGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChr''@;'; put 'put ''ZSxSdCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoT2UsUXQpfDAsbT0obT1tK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01h''@;'; put 'put ''dGguaW11bCh6ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFd0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwodGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8''@;'; put 'put ''MCxBPU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKE9lLGhuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZnQpfDApK01h''@;'; put 'put ''dGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoemUsV3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHhlLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1F''@;'; put 'put ''K01hdGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5''@;'; put 'put ''dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFd0KXwwLG09KG09bStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoemUsc3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bCh4ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''dmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQp''@;'; put 'put ''KStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''T2Usc3QpfDAsbT0obT1tK01hdGguaW11bChPZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bCh6ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxU''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGh0KXwwLG09KG09bStNYXRoLmltdWwoeGUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''JGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChu''@;'; put 'put ''dCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFdlKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoT2UsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoemUsaHQpfDAsbT0obT1tK01hdGguaW11bCh6ZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2''@;'; put 'put ''KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDAp''@;'; put 'put ''K01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChPZSxodCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKE9lLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHplLHJuKXwwLG09KG09bStNYXRoLmltdWwoemUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoeGUsY24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1F''@;'; put 'put ''K01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE9lLHJuKXwwLG09KG09bStNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoemUsY24pfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bCh6ZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKHhlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01h''@;'; put 'put ''dGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChB''@;'; put 'put ''ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE9lLGNuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bCh6ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHpl''@;'; put 'put ''LGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKE9lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01h''@;'; put 'put ''dGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChB''@;'; put 'put ''ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1F''@;'; put 'put ''K01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2''@;'; put 'put ''KXwwLHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhl''@;'; put 'put ''LGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZp''@;'; put 'put ''LEhbOF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVs''@;'; put 'put ''cChWLHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0''@;'; put 'put ''aGlzLHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3Io''@;'; put 'put ''dmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9''@;'; put 'put ''SCsoc2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJU''@;'; put 'put ''PWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEp''@;'; put 'put ''cmV0dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBl''@;'; put 'put ''LnRyYW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2''@;'; put 'put ''YXIgdGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSx4ZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKnhlO3hlPXRlKnhlK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUreGUseFthZSt3ZStqXT1VZS1v''@;'; put 'put ''dCxDW2FlK3dlK2pdPUplLXhlLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4g''@;'; put 'put ''MTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBl''@;'; put 'put ''Lm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9''@;'; put 'put ''LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTky''@;'; put 'put ''JlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxU''@;'; put 'put ''PXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAu''@;'; put 'put ''d29yZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2Vd''@;'; put 'put ''KnRlW3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9''@;'; put 'put ''cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhw''@;'; put 'put ''LGIpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVs''@;'; put 'put ''VG8ocCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZi''@;'; put 'put ''KTtiPj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1wPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1m''@;'; put 'put ''dW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4g''@;'; put 'put ''bmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5''@;'; put 'put ''cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7''@;'; put 'put ''dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4''@;'; put 'put ''O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgp''@;'; put 'put ''e3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09''@;'; put 'put ''MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0''@;'; put 'put ''aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEp''@;'; put 'put ''LDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJv''@;'; put 'put ''dG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhp''@;'; put 'put ''cy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNr''@;'; put 'put ''bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisx''@;'; put 'put ''XSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxz''@;'; put 'put ''ZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFk''@;'; put 'put ''ZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpi''@;'; put 'put ''O2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVy''@;'; put 'put ''biB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3Jk''@;'; put 'put ''RGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgt''@;'; put 'put ''VC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVn''@;'; put 'put ''YXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lz''@;'; put 'put ''aGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYm''@;'; put 'put ''MCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5u''@;'; put 'put ''ZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZl''@;'; put 'put ''PyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQu''@;'; put 'put ''bmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2Qi''@;'; put 'put ''PT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1v''@;'; put 'put ''ZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNt''@;'; put 'put ''cChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5n''@;'; put 'put ''dGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4''@;'; put 'put ''NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlz''@;'; put 'put ''WmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVz''@;'; put 'put ''aHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2Rk''@;'; put 'put ''KCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYo''@;'; put 'put ''SC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBl''@;'; put 'put ''Ll9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4o''@;'; put 'put ''MSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkm''@;'; put 'put ''Jm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQp''@;'; put 'put ''LmNtcG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgu''@;'; put 'put ''bmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3Zh''@;'; put 'put ''ciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlv''@;'; put 'put ''bihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3Zh''@;'; put 'put ''ciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''JjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxz''@;'; put 'put ''ZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMu''@;'; put 'put ''bGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2Jy''@;'; put 'put ''ZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4o''@;'; put 'put ''cCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIp''@;'; put 'put ''LGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJl''@;'; put 'put ''cnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwi''@;'; put 'put ''QWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxw''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwi''@;'; put 'put ''cmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhp''@;'; put 'put ''cyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwi''@;'; put 'put ''cmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlz''@;'; put 'put ''KSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRo''@;'; put 'put ''aXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl''@;'; put 'put ''ZC5wb3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRo''@;'; put 'put ''aXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2ll''@;'; put 'put ''LmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3By''@;'; put 'put ''aW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgo''@;'; put 'put ''KSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMu''@;'; put 'put ''cmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9''@;'; put 'put ''bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRo''@;'; put 'put ''aXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9u''@;'; put 'put ''KHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSks''@;'; put 'put ''VD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3Zh''@;'; put 'put ''ciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jk''@;'; put 'put ''c1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYo''@;'; put 'put ''cC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkr''@;'; put 'put ''YixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIy''@;'; put 'put ''NCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7Zygw''@;'; put 'put ''PT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlz''@;'; put 'put ''KTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5''@;'; put 'put ''MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlz''@;'; put 'put ''Lm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1''@;'; put 'put ''bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNl''@;'; put 'put ''LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90''@;'; put 'put ''eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2''@;'; put 'put ''YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1''@;'; put 'put ''c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChq''@;'; put 'put ''KTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigp''@;'; put 'put ''O2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRo''@;'; put 'put ''aXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBu''@;'; put 'put ''KDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2Zv''@;'; put 'put ''cigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9''@;'; put 'put ''PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1''@;'; put 'put ''bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkp''@;'; put 'put ''fSxqZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jk''@;'; put 'put ''c1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9''@;'; put 'put ''VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11''@;'; put 'put ''bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9''@;'; put 'put ''VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDY3MjExOih1ZSxYLHkp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzE5OTMpLF89eSgzNDcyNSksZz15KDM2NjM2KSxCPXkoMjU0NDMpLHc9eSgzMjQ3KTtmdW5jdGlvbiBQKEYpe3cuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPUZ9SShQLHcpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7dGhp''@;'; put 'put ''cy5faGFzaC51cGRhdGUoRil9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiJtZDUiPT09KE89Ty50b0xvd2VyQ2FzZSgpKT9uZXcgXzoicm1kMTYwIj09PU98fCJyaXBlbWQxNjAi''@;'; put 'put ''PT09Tz9uZXcgZzpuZXcgUChCKE8pKX19LDgzNDA3Oih1ZSxYLHkpPT57dmFyIEk9eSgzNDcyNSk7dWUuZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4obmV3IEkpLnVwZGF0ZShfKS5kaWdlc3QoKX19LDU2NDMyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzE5OTMpLF89eSg5''@;'; put 'put ''MDUwOSksZz15KDMyNDcpLEI9eSgyNzA1NCkuQnVmZmVyLHc9eSg4MzQwNyksUD15KDM2NjM2KSxGPXkoMjU0NDMpLE89Qi5hbGxvYygxMjgpO2Z1bmN0aW9uIHooTixMKXtnLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBMJiYoTD1CLmZyb20oTCkpO3ZhciBLPSJzaGE1''@;'; put 'put ''MTIiPT09Tnx8InNoYTM4NCI9PT1OPzEyODo2NDt0aGlzLl9hbGc9Tix0aGlzLl9rZXk9TCxMLmxlbmd0aD5LP0w9KCJybWQxNjAiPT09Tj9uZXcgUDpGKE4pKS51cGRhdGUoTCkuZGlnZXN0KCk6TC5sZW5ndGg8SyYmKEw9Qi5jb25jYXQoW0wsT10sSykpO2Zvcih2YXIgVz10aGlzLl9pcGFk''@;'; put 'put ''PUIuYWxsb2NVbnNhZmUoSyksWT10aGlzLl9vcGFkPUIuYWxsb2NVbnNhZmUoSykscT0wO3E8SztxKyspV1txXT01NF5MW3FdLFlbcV09OTJeTFtxXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09Tj9uZXcgUDpGKE4pLHRoaXMuX2hhc2gudXBkYXRlKFcpfUkoeixnKSx6LnByb3RvdHlwZS5fdXBk''@;'; put 'put ''YXRlPWZ1bmN0aW9uKE4pe3RoaXMuX2hhc2gudXBkYXRlKE4pfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgUDpGKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRh''@;'; put 'put ''dGUoTikuZGlnZXN0KCl9LHVlLmV4cG9ydHM9ZnVuY3Rpb24oTCxLKXtyZXR1cm4icm1kMTYwIj09PShMPUwudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09TD9uZXcgeigicm1kMTYwIixLKToibWQ1Ij09PUw/bmV3IF8odyxLKTpuZXcgeihMLEspfX0sOTA1MDk6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9eSg3MTk5MyksXz15KDI3MDU0KS5CdWZmZXIsZz15KDMyNDcpLEI9Xy5hbGxvYygxMjgpLHc9NjQ7ZnVuY3Rpb24gUChGLE8pe2cuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIE8mJihPPV8uZnJvbShPKSksdGhpcy5fYWxnPUYsdGhpcy5f''@;'; put 'put ''a2V5PU8sTy5sZW5ndGg+dz9PPUYoTyk6Ty5sZW5ndGg8dyYmKE89Xy5jb25jYXQoW08sQl0sdykpO2Zvcih2YXIgej10aGlzLl9pcGFkPV8uYWxsb2NVbnNhZmUodyksTj10aGlzLl9vcGFkPV8uYWxsb2NVbnNhZmUodyksTD0wO0w8dztMKyspeltMXT01NF5PW0xdLE5bTF09OTJeT1tMXTt0''@;'; put 'put ''aGlzLl9oYXNoPVt6XX1JKFAsZyksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt0aGlzLl9oYXNoLnB1c2goRil9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBGPXRoaXMuX2FsZyhfLmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyhfLmNvbmNh''@;'; put 'put ''dChbdGhpcy5fb3BhZCxGXSkpfSx1ZS5leHBvcnRzPVB9LDkxNDI2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO1gucmFuZG9tQnl0ZXM9WC5ybmc9WC5wc2V1ZG9SYW5kb21CeXRlcz1YLnBybmc9eSgzMzQyKSxYLmNyZWF0ZUhhc2g9WC5IYXNoPXkoNjcyMTEpLFguY3JlYXRlSG1hYz1YLkht''@;'; put 'put ''YWM9eSg1NjQzMik7dmFyIEk9eSg5OTU2MCksXz1PYmplY3Qua2V5cyhJKSxnPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChfKTtYLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBnfTt2YXIgQj15KDkzMzk3KTtY''@;'; put 'put ''LnBia2RmMj1CLnBia2RmMixYLnBia2RmMlN5bmM9Qi5wYmtkZjJTeW5jO3ZhciB3PXkoODg4NjIpO1guQ2lwaGVyPXcuQ2lwaGVyLFguY3JlYXRlQ2lwaGVyPXcuY3JlYXRlQ2lwaGVyLFguQ2lwaGVyaXY9dy5DaXBoZXJpdixYLmNyZWF0ZUNpcGhlcml2PXcuY3JlYXRlQ2lwaGVyaXYsWC5E''@;'; put 'put ''ZWNpcGhlcj13LkRlY2lwaGVyLFguY3JlYXRlRGVjaXBoZXI9dy5jcmVhdGVEZWNpcGhlcixYLkRlY2lwaGVyaXY9dy5EZWNpcGhlcml2LFguY3JlYXRlRGVjaXBoZXJpdj13LmNyZWF0ZURlY2lwaGVyaXYsWC5nZXRDaXBoZXJzPXcuZ2V0Q2lwaGVycyxYLmxpc3RDaXBoZXJzPXcubGlzdENp''@;'; put 'put ''cGhlcnM7dmFyIFA9eSg0Mzc3KTtYLkRpZmZpZUhlbGxtYW5Hcm91cD1QLkRpZmZpZUhlbGxtYW5Hcm91cCxYLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1QLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxYLmdldERpZmZpZUhlbGxtYW49UC5nZXREaWZmaWVIZWxsbWFuLFguY3JlYXRlRGlm''@;'; put 'put ''ZmllSGVsbG1hbj1QLmNyZWF0ZURpZmZpZUhlbGxtYW4sWC5EaWZmaWVIZWxsbWFuPVAuRGlmZmllSGVsbG1hbjt2YXIgRj15KDc5MTQzKTtYLmNyZWF0ZVNpZ249Ri5jcmVhdGVTaWduLFguU2lnbj1GLlNpZ24sWC5jcmVhdGVWZXJpZnk9Ri5jcmVhdGVWZXJpZnksWC5WZXJpZnk9Ri5WZXJp''@;'; put 'put ''ZnksWC5jcmVhdGVFQ0RIPXkoODczMDMpO3ZhciBPPXkoNTI5NjUpO1gucHVibGljRW5jcnlwdD1PLnB1YmxpY0VuY3J5cHQsWC5wcml2YXRlRW5jcnlwdD1PLnByaXZhdGVFbmNyeXB0LFgucHVibGljRGVjcnlwdD1PLnB1YmxpY0RlY3J5cHQsWC5wcml2YXRlRGVjcnlwdD1PLnByaXZhdGVE''@;'; put 'put ''ZWNyeXB0O3ZhciB6PXkoOTY4Mik7WC5yYW5kb21GaWxsPXoucmFuZG9tRmlsbCxYLnJhbmRvbUZpbGxTeW5jPXoucmFuZG9tRmlsbFN5bmMsWC5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBs''@;'; put 'put ''ZW1lbnRlZCB5ZXRcbndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzXG5odHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSIpfSxYLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RP''@;'; put 'put ''X0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5''@;'; put 'put ''MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LDE3NjU2OmZ1bmN0aW9uKHVlLFgseSl7dmFyIEk7dWUuZXhwb3J0''@;'; put 'put ''cz0oST1JfHxmdW5jdGlvbihfLGcpe3ZhciBCO2lmKHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvJiYoQj13aW5kb3cuY3J5cHRvKSx0eXBlb2Ygc2VsZjwidSImJnNlbGYuY3J5cHRvJiYoQj1zZWxmLmNyeXB0byksdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzLmNy''@;'; put 'put ''eXB0byYmKEI9Z2xvYmFsVGhpcy5jcnlwdG8pLCFCJiZ0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1zQ3J5cHRvJiYoQj13aW5kb3cubXNDcnlwdG8pLCFCJiZ0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsLmNyeXB0byYmKEI9Z2xvYmFsLmNyeXB0byksIUIpdHJ5e0I9eSg5MTQyNil9Y2F0''@;'; put 'put ''Y2h7fXZhciB3PWZ1bmN0aW9uKCl7aWYoQil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEIuZ2V0UmFuZG9tVmFsdWVzKXRyeXtyZXR1cm4gQi5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIEIucmFuZG9tQnl0ZXMpdHJ5''@;'; put 'put ''e3JldHVybiBCLnJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkxFKCl9Y2F0Y2h7fX10aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBjcnlwdG8gbW9kdWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9tIG51bWJlci4iKX0sUD1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1''@;'; put 'put ''bmN0aW9uIEooKXt9cmV0dXJuIGZ1bmN0aW9uKG5lKXt2YXIgaWU7cmV0dXJuIEoucHJvdG90eXBlPW5lLGllPW5ldyBKLEoucHJvdG90eXBlPW51bGwsaWV9fSgpLEY9e30sTz1GLmxpYj17fSx6PU8uQmFzZT1mdW5jdGlvbigpe3JldHVybntleHRlbmQ6ZnVuY3Rpb24oSil7dmFyIG5lPVAo''@;'; put 'put ''dGhpcyk7cmV0dXJuIEomJm5lLm1peEluKEopLCghbmUuaGFzT3duUHJvcGVydHkoImluaXQiKXx8dGhpcy5pbml0PT09bmUuaW5pdCkmJihuZS5pbml0PWZ1bmN0aW9uKCl7bmUuJHN1cGVyLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksbmUuaW5pdC5wcm90b3R5cGU9bmUsbmUuJHN1''@;'; put 'put ''cGVyPXRoaXMsbmV9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBKPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIEouaW5pdC5hcHBseShKLGFyZ3VtZW50cyksSn0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oSil7Zm9yKHZhciBuZSBpbiBKKUouaGFzT3duUHJvcGVydHkobmUpJiYodGhp''@;'; put 'put ''c1tuZV09SltuZV0pO0ouaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJih0aGlzLnRvU3RyaW5nPUoudG9TdHJpbmcpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19fSgpLE49Ty5Xb3JkQXJyYXk9ei5leHRlbmQoe2luaXQ6ZnVu''@;'; put 'put ''Y3Rpb24oSixuZSl7Sj10aGlzLndvcmRzPUp8fFtdLHRoaXMuc2lnQnl0ZXM9bnVsbCE9bmU/bmU6NCpKLmxlbmd0aH0sdG9TdHJpbmc6ZnVuY3Rpb24oSil7cmV0dXJuKEp8fEspLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKEope3ZhciBuZT10aGlzLndvcmRzLGllPUoud29y''@;'; put 'put ''ZHMsbGU9dGhpcy5zaWdCeXRlcyxtZT1KLnNpZ0J5dGVzO2lmKHRoaXMuY2xhbXAoKSxsZSU0KWZvcih2YXIgX2U9MDtfZTxtZTtfZSsrKW5lW2xlK19lPj4+Ml18PShpZVtfZT4+PjJdPj4+MjQtX2UlNCo4JjI1NSk8PDI0LShsZStfZSklNCo4O2Vsc2UgZm9yKHZhciBTZT0wO1NlPG1lO1Nl''@;'; put 'put ''Kz00KW5lW2xlK1NlPj4+Ml09aWVbU2U+Pj4yXTtyZXR1cm4gdGhpcy5zaWdCeXRlcys9bWUsdGhpc30sY2xhbXA6ZnVuY3Rpb24oKXt2YXIgSj10aGlzLndvcmRzLG5lPXRoaXMuc2lnQnl0ZXM7SltuZT4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1uZSU0KjgsSi5sZW5ndGg9Xy5jZWlsKG5lLzQp''@;'; put 'put ''fSxjbG9uZTpmdW5jdGlvbigpe3ZhciBKPXouY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gSi53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApLEp9LHJhbmRvbTpmdW5jdGlvbihKKXtmb3IodmFyIG5lPVtdLGllPTA7aWU8SjtpZSs9NCluZS5wdXNoKHcoKSk7cmV0dXJuIG5ldyBOLmluaXQobmUs''@;'; put 'put ''Sil9fSksTD1GLmVuYz17fSxLPUwuSGV4PXtzdHJpbmdpZnk6ZnVuY3Rpb24oSil7Zm9yKHZhciBuZT1KLndvcmRzLGllPUouc2lnQnl0ZXMsbGU9W10sbWU9MDttZTxpZTttZSsrKXt2YXIgX2U9bmVbbWU+Pj4yXT4+PjI0LW1lJTQqOCYyNTU7bGUucHVzaCgoX2U+Pj40KS50b1N0cmluZygx''@;'; put 'put ''NikpLGxlLnB1c2goKDE1Jl9lKS50b1N0cmluZygxNikpfXJldHVybiBsZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oSil7Zm9yKHZhciBuZT1KLmxlbmd0aCxpZT1bXSxsZT0wO2xlPG5lO2xlKz0yKWllW2xlPj4+M118PXBhcnNlSW50KEouc3Vic3RyKGxlLDIpLDE2KTw8MjQtbGUlOCo0''@;'; put 'put ''O3JldHVybiBuZXcgTi5pbml0KGllLG5lLzIpfX0sVT1MLkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKEope2Zvcih2YXIgbmU9Si53b3JkcyxpZT1KLnNpZ0J5dGVzLGxlPVtdLG1lPTA7bWU8aWU7bWUrKylsZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobmVbbWU+Pj4yXT4+PjI0LW1l''@;'; put 'put ''JTQqOCYyNTUpKTtyZXR1cm4gbGUuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKEope2Zvcih2YXIgbmU9Si5sZW5ndGgsaWU9W10sbGU9MDtsZTxuZTtsZSsrKWllW2xlPj4+Ml18PSgyNTUmSi5jaGFyQ29kZUF0KGxlKSk8PDI0LWxlJTQqODtyZXR1cm4gbmV3IE4uaW5pdChpZSxuZSl9fSxX''@;'; put 'put ''PUwuVXRmOD17c3RyaW5naWZ5OmZ1bmN0aW9uKEope3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShVLnN0cmluZ2lmeShKKSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIFVURi04IGRhdGEiKX19LHBhcnNlOmZ1bmN0aW9uKEope3JldHVybiBVLnBhcnNl''@;'; put 'put ''KHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKKSkpfX0sWT1PLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09ei5leHRlbmQoe3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgTi5pbml0LHRoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbihKKXsic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIEomJihKPVcucGFyc2UoSikpLHRoaXMuX2RhdGEuY29uY2F0KEopLHRoaXMuX25EYXRhQnl0ZXMrPUouc2lnQnl0ZXN9LF9wcm9jZXNzOmZ1bmN0aW9uKEope3ZhciBuZSxpZT10aGlzLl9kYXRhLGxlPWllLndvcmRzLG1lPWllLnNpZ0J5dGVzLF9lPXRoaXMuYmxvY2tTaXplLFNlPW1l''@;'; put 'put ''Lyg0Kl9lKSxqZT0oU2U9Sj9fLmNlaWwoU2UpOl8ubWF4KCgwfFNlKS10aGlzLl9taW5CdWZmZXJTaXplLDApKSpfZSxWPV8ubWluKDQqamUsbWUpO2lmKGplKXtmb3IodmFyIHA9MDtwPGplO3ArPV9lKXRoaXMuX2RvUHJvY2Vzc0Jsb2NrKGxlLHApO25lPWxlLnNwbGljZSgwLGplKSxpZS5z''@;'; put 'put ''aWdCeXRlcy09Vn1yZXR1cm4gbmV3IE4uaW5pdChuZSxWKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgSj16LmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIEouX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpLEp9LF9taW5CdWZmZXJTaXplOjB9KSxlZT0oTy5IYXNoZXI9WS5leHRlbmQoe2NmZzp6LmV4''@;'; put 'put ''dGVuZCgpLGluaXQ6ZnVuY3Rpb24oSil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKEopLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtZLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oSil7cmV0dXJuIHRoaXMuX2FwcGVuZChKKSx0aGlz''@;'; put 'put ''Ll9wcm9jZXNzKCksdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oSil7cmV0dXJuIEomJnRoaXMuX2FwcGVuZChKKSx0aGlzLl9kb0ZpbmFsaXplKCl9LGJsb2NrU2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihuZSxpZSl7cmV0dXJuIG5ldyBKLmluaXQo''@;'; put 'put ''aWUpLmZpbmFsaXplKG5lKX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihuZSxpZSl7cmV0dXJuIG5ldyBlZS5ITUFDLmluaXQoSixpZSkuZmluYWxpemUobmUpfX19KSxGLmFsZ289e30pO3JldHVybiBGfShNYXRoKSxJKX0sNzg4NTU6ZnVuY3Rpb24o''@;'; put 'put ''dWUsWCx5KXt2YXIgSTt1ZS5leHBvcnRzPShJPXkoMTc2NTYpLGZ1bmN0aW9uKF8pe3ZhciBnPUksQj1nLmxpYix3PUIuV29yZEFycmF5LFA9Qi5IYXNoZXIsRj1nLmFsZ28sTz1bXTshZnVuY3Rpb24oKXtmb3IodmFyIFc9MDtXPDY0O1crKylPW1ddPTQyOTQ5NjcyOTYqXy5hYnMoXy5zaW4o''@;'; put 'put ''VysxKSl8MH0oKTt2YXIgej1GLk1ENT1QLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB3LmluaXQoWzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oVyxZKXtmb3IodmFyIHE9MDtx''@;'; put 'put ''PDE2O3ErKyl7dmFyIGVlPVkrcSxKPVdbZWVdO1dbZWVdPTE2NzExOTM1JihKPDw4fEo+Pj4yNCl8NDI3ODI1NTM2MCYoSjw8MjR8Sj4+PjgpfXZhciBuZT10aGlzLl9oYXNoLndvcmRzLGllPVdbWSswXSxsZT1XW1krMV0sbWU9V1tZKzJdLF9lPVdbWSszXSxUZT1XW1krNF0sU2U9V1tZKzVd''@;'; put 'put ''LGplPVdbWSs2XSxWPVdbWSs3XSxwPVdbWSs4XSxiPVdbWSs5XSx4PVdbWSsxMF0sQz1XW1krMTFdLFQ9V1tZKzEyXSxIPVdbWSsxM10saj1XW1krMTRdLEU9V1tZKzE1XSxtPW5lWzBdLEE9bmVbMV0sYWU9bmVbMl0sdGU9bmVbM107bT1OKG0sQSxhZSx0ZSxpZSw3LE9bMF0pLHRlPU4odGUs''@;'; put 'put ''bSxBLGFlLGxlLDEyLE9bMV0pLGFlPU4oYWUsdGUsbSxBLG1lLDE3LE9bMl0pLEE9TihBLGFlLHRlLG0sX2UsMjIsT1szXSksbT1OKG0sQSxhZSx0ZSxUZSw3LE9bNF0pLHRlPU4odGUsbSxBLGFlLFNlLDEyLE9bNV0pLGFlPU4oYWUsdGUsbSxBLGplLDE3LE9bNl0pLEE9TihBLGFlLHRlLG0s''@;'; put 'put ''ViwyMixPWzddKSxtPU4obSxBLGFlLHRlLHAsNyxPWzhdKSx0ZT1OKHRlLG0sQSxhZSxiLDEyLE9bOV0pLGFlPU4oYWUsdGUsbSxBLHgsMTcsT1sxMF0pLEE9TihBLGFlLHRlLG0sQywyMixPWzExXSksbT1OKG0sQSxhZSx0ZSxULDcsT1sxMl0pLHRlPU4odGUsbSxBLGFlLEgsMTIsT1sxM10p''@;'; put 'put ''LGFlPU4oYWUsdGUsbSxBLGosMTcsT1sxNF0pLG09TChtLEE9TihBLGFlLHRlLG0sRSwyMixPWzE1XSksYWUsdGUsbGUsNSxPWzE2XSksdGU9TCh0ZSxtLEEsYWUsamUsOSxPWzE3XSksYWU9TChhZSx0ZSxtLEEsQywxNCxPWzE4XSksQT1MKEEsYWUsdGUsbSxpZSwyMCxPWzE5XSksbT1MKG0s''@;'; put 'put ''QSxhZSx0ZSxTZSw1LE9bMjBdKSx0ZT1MKHRlLG0sQSxhZSx4LDksT1syMV0pLGFlPUwoYWUsdGUsbSxBLEUsMTQsT1syMl0pLEE9TChBLGFlLHRlLG0sVGUsMjAsT1syM10pLG09TChtLEEsYWUsdGUsYiw1LE9bMjRdKSx0ZT1MKHRlLG0sQSxhZSxqLDksT1syNV0pLGFlPUwoYWUsdGUsbSxB''@;'; put 'put ''LF9lLDE0LE9bMjZdKSxBPUwoQSxhZSx0ZSxtLHAsMjAsT1syN10pLG09TChtLEEsYWUsdGUsSCw1LE9bMjhdKSx0ZT1MKHRlLG0sQSxhZSxtZSw5LE9bMjldKSxhZT1MKGFlLHRlLG0sQSxWLDE0LE9bMzBdKSxtPUsobSxBPUwoQSxhZSx0ZSxtLFQsMjAsT1szMV0pLGFlLHRlLFNlLDQsT1sz''@;'; put 'put ''Ml0pLHRlPUsodGUsbSxBLGFlLHAsMTEsT1szM10pLGFlPUsoYWUsdGUsbSxBLEMsMTYsT1szNF0pLEE9SyhBLGFlLHRlLG0saiwyMyxPWzM1XSksbT1LKG0sQSxhZSx0ZSxsZSw0LE9bMzZdKSx0ZT1LKHRlLG0sQSxhZSxUZSwxMSxPWzM3XSksYWU9SyhhZSx0ZSxtLEEsViwxNixPWzM4XSks''@;'; put 'put ''QT1LKEEsYWUsdGUsbSx4LDIzLE9bMzldKSxtPUsobSxBLGFlLHRlLEgsNCxPWzQwXSksdGU9Syh0ZSxtLEEsYWUsaWUsMTEsT1s0MV0pLGFlPUsoYWUsdGUsbSxBLF9lLDE2LE9bNDJdKSxBPUsoQSxhZSx0ZSxtLGplLDIzLE9bNDNdKSxtPUsobSxBLGFlLHRlLGIsNCxPWzQ0XSksdGU9Syh0''@;'; put 'put ''ZSxtLEEsYWUsVCwxMSxPWzQ1XSksYWU9SyhhZSx0ZSxtLEEsRSwxNixPWzQ2XSksbT1VKG0sQT1LKEEsYWUsdGUsbSxtZSwyMyxPWzQ3XSksYWUsdGUsaWUsNixPWzQ4XSksdGU9VSh0ZSxtLEEsYWUsViwxMCxPWzQ5XSksYWU9VShhZSx0ZSxtLEEsaiwxNSxPWzUwXSksQT1VKEEsYWUsdGUs''@;'; put 'put ''bSxTZSwyMSxPWzUxXSksbT1VKG0sQSxhZSx0ZSxULDYsT1s1Ml0pLHRlPVUodGUsbSxBLGFlLF9lLDEwLE9bNTNdKSxhZT1VKGFlLHRlLG0sQSx4LDE1LE9bNTRdKSxBPVUoQSxhZSx0ZSxtLGxlLDIxLE9bNTVdKSxtPVUobSxBLGFlLHRlLHAsNixPWzU2XSksdGU9VSh0ZSxtLEEsYWUsRSwx''@;'; put 'put ''MCxPWzU3XSksYWU9VShhZSx0ZSxtLEEsamUsMTUsT1s1OF0pLEE9VShBLGFlLHRlLG0sSCwyMSxPWzU5XSksbT1VKG0sQSxhZSx0ZSxUZSw2LE9bNjBdKSx0ZT1VKHRlLG0sQSxhZSxDLDEwLE9bNjFdKSxhZT1VKGFlLHRlLG0sQSxtZSwxNSxPWzYyXSksQT1VKEEsYWUsdGUsbSxiLDIxLE9b''@;'; put 'put ''NjNdKSxuZVswXT1uZVswXSttfDAsbmVbMV09bmVbMV0rQXwwLG5lWzJdPW5lWzJdK2FlfDAsbmVbM109bmVbM10rdGV8MH0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgVz10aGlzLl9kYXRhLFk9Vy53b3JkcyxxPTgqdGhpcy5fbkRhdGFCeXRlcyxlZT04Klcuc2lnQnl0ZXM7WVtlZT4+''@;'; put 'put ''PjVdfD0xMjg8PDI0LWVlJTMyO3ZhciBKPV8uZmxvb3IocS80Mjk0OTY3Mjk2KSxuZT1xO1lbMTUrKGVlKzY0Pj4+OTw8NCldPTE2NzExOTM1JihKPDw4fEo+Pj4yNCl8NDI3ODI1NTM2MCYoSjw8MjR8Sj4+PjgpLFlbMTQrKGVlKzY0Pj4+OTw8NCldPTE2NzExOTM1JihuZTw8OHxuZT4+PjI0''@;'; put 'put ''KXw0Mjc4MjU1MzYwJihuZTw8MjR8bmU+Pj44KSxXLnNpZ0J5dGVzPTQqKFkubGVuZ3RoKzEpLHRoaXMuX3Byb2Nlc3MoKTtmb3IodmFyIGllPXRoaXMuX2hhc2gsbGU9aWUud29yZHMsbWU9MDttZTw0O21lKyspe3ZhciBfZT1sZVttZV07bGVbbWVdPTE2NzExOTM1JihfZTw8OHxfZT4+PjI0''@;'; put 'put ''KXw0Mjc4MjU1MzYwJihfZTw8MjR8X2U+Pj44KX1yZXR1cm4gaWV9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFc9UC5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBXLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKSxXfX0pO2Z1bmN0aW9uIE4oVyxZLHEsZWUsSixuZSxpZSl7dmFyIGxlPVcrKFkmcXx+''@;'; put 'put ''WSZlZSkrSitpZTtyZXR1cm4obGU8PG5lfGxlPj4+MzItbmUpK1l9ZnVuY3Rpb24gTChXLFkscSxlZSxKLG5lLGllKXt2YXIgbGU9VysoWSZlZXxxJn5lZSkrSitpZTtyZXR1cm4obGU8PG5lfGxlPj4+MzItbmUpK1l9ZnVuY3Rpb24gSyhXLFkscSxlZSxKLG5lLGllKXt2YXIgbGU9VysoWV5x''@;'; put 'put ''XmVlKStKK2llO3JldHVybihsZTw8bmV8bGU+Pj4zMi1uZSkrWX1mdW5jdGlvbiBVKFcsWSxxLGVlLEosbmUsaWUpe3ZhciBsZT1XKyhxXihZfH5lZSkpK0oraWU7cmV0dXJuKGxlPDxuZXxsZT4+PjMyLW5lKStZfWcuTUQ1PVAuX2NyZWF0ZUhlbHBlcih6KSxnLkhtYWNNRDU9UC5fY3JlYXRl''@;'; put 'put ''SG1hY0hlbHBlcih6KX0oTWF0aCksSS5NRDUpfSw3MTU0OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtYLnV0aWxzPXkoODU2NzEpLFguQ2lwaGVyPXkoMTAyMTkpLFguREVTPXkoNjQxNjYpLFguQ0JDPXkoODg4MDApLFguRURFPXkoNjIxMjIpfSw4ODgwMDoodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST15KDM5MjEwKSxfPXkoNzE5OTMpLGc9e307ZnVuY3Rpb24gQihQKXtJLmVxdWFsKFAubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBGPTA7Rjx0aGlzLml2Lmxlbmd0aDtGKyspdGhpcy5pdltGXT1QW0ZdfVguaW5z''@;'; put 'put ''dGFudGlhdGU9ZnVuY3Rpb24gdyhQKXtmdW5jdGlvbiBGKEwpe1AuY2FsbCh0aGlzLEwpLHRoaXMuX2NiY0luaXQoKX1fKEYsUCk7Zm9yKHZhciBPPU9iamVjdC5rZXlzKGcpLHo9MDt6PE8ubGVuZ3RoO3orKyl7dmFyIE49T1t6XTtGLnByb3RvdHlwZVtOXT1nW05dfXJldHVybiBGLmNyZWF0''@;'; put 'put ''ZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IEYoSyl9LEZ9LGcuX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgQih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPUZ9LGcuX3VwZGF0ZT1mdW5jdGlvbihGLE8seixOKXt2YXIgSz10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90''@;'; put 'put ''b3R5cGUsVT10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKVVbV11ePUZbTytXXTtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxVLDAseixOKSxXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspVVtXXT16W04r''@;'; put 'put ''V119ZWxzZXtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxGLE8seixOKSxXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspeltOK1ddXj1VW1ddO2ZvcihXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspVVtXXT1GW08rV119fX0sMTAyMTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzOTIx''@;'; put 'put ''MCk7ZnVuY3Rpb24gXyhnKXt0aGlzLm9wdGlvbnM9Zyx0aGlzLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMucGFkZGluZz0hMSE9PWcu''@;'; put 'put ''cGFkZGluZ311ZS5leHBvcnRzPV8sXy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LF8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihCKXtyZXR1cm4gMD09PUIubGVuZ3RoP1tdOiJkZWNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl91cGRhdGVEZWNyeXB0KEIpOnRoaXMuX3VwZGF0ZUVu''@;'; put 'put ''Y3J5cHQoQil9LF8ucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rpb24oQix3KXtmb3IodmFyIFA9TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLEIubGVuZ3RoLXcpLEY9MDtGPFA7RisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmK0ZdPUJbdytGXTtyZXR1cm4g''@;'; put 'put ''dGhpcy5idWZmZXJPZmYrPVAsUH0sXy5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKEIsdyl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEIsdyksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0sXy5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQ9ZnVuY3Rp''@;'; put 'put ''b24oQil7dmFyIHc9MCxQPTAsTz1uZXcgQXJyYXkoKCh0aGlzLmJ1ZmZlck9mZitCLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCkqdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKHcrPXRoaXMuX2J1ZmZlcihCLHcpLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5idWZmZXIubGVu''@;'; put 'put ''Z3RoJiYoUCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQKSkpO2Zvcih2YXIgej1CLmxlbmd0aC0oQi5sZW5ndGgtdykldGhpcy5ibG9ja1NpemU7dzx6O3crPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShCLHcsTyxQKSxQKz10aGlzLmJsb2NrU2l6ZTtmb3IoO3c8Qi5sZW5ndGg7dysrLHRo''@;'; put 'put ''aXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPUJbd107cmV0dXJuIE99LF8ucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKEIpe2Zvcih2YXIgdz0wLFA9MCxGPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrQi5sZW5ndGgpL3RoaXMuYmxvY2tTaXpl''@;'; put 'put ''KS0xLE89bmV3IEFycmF5KEYqdGhpcy5ibG9ja1NpemUpO0Y+MDtGLS0pdys9dGhpcy5fYnVmZmVyKEIsdyksUCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQKTtyZXR1cm4gdys9dGhpcy5fYnVmZmVyKEIsdyksT30sXy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oQil7dmFyIHcsUDtyZXR1cm4g''@;'; put 'put ''QiYmKHc9dGhpcy51cGRhdGUoQikpLFA9ImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLHc/dy5jb25jYXQoUCk6UH0sXy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihCLHcpe2lmKDA9PT13KXJldHVybiExO2Zvcig7dzxCLmxl''@;'; put 'put ''bmd0aDspQlt3KytdPTA7cmV0dXJuITB9LF8ucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgQj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUo''@;'; put 'put ''dGhpcy5idWZmZXIsMCxCLDApLEJ9LF8ucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihCKXtyZXR1cm4gQn0sXy5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe0kuZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNyeXB0''@;'; put 'put ''Iik7dmFyIEI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIoQiwwKSx0aGlzLl91bnBhZChCKX19LDY0MTY2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzkyMTApLF89eSg3MTk5MyksZz15KDg1NjcxKSxCPXkoMTAyMTkpO2Z1bmN0''@;'; put 'put ''aW9uIHcoKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gUChPKXtCLmNhbGwodGhpcyxPKTt2YXIgej1uZXcgdzt0aGlzLl9kZXNTdGF0ZT16LHRoaXMuZGVyaXZlS2V5cyh6LE8ua2V5KX1fKFAsQiksdWUuZXhwb3J0cz1QLFAuY3JlYXRlPWZ1bmN0aW9u''@;'; put 'put ''KHope3JldHVybiBuZXcgUCh6KX07dmFyIEY9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO1AucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oeixOKXt6LmtleXM9bmV3IEFycmF5KDMyKSxJLmVxdWFsKE4ubGVuZ3RoLHRoaXMuYmxvY2tTaXplLCJJbnZhbGlkIGtleSBs''@;'; put 'put ''ZW5ndGgiKTt2YXIgTD1nLnJlYWRVSW50MzJCRShOLDApLEs9Zy5yZWFkVUludDMyQkUoTiw0KTtnLnBjMShMLEssei50bXAsMCksTD16LnRtcFswXSxLPXoudG1wWzFdO2Zvcih2YXIgVT0wO1U8ei5rZXlzLmxlbmd0aDtVKz0yKXt2YXIgVz1GW1U+Pj4xXTtMPWcucjI4c2hsKEwsVyksSz1n''@;'; put 'put ''LnIyOHNobChLLFcpLGcucGMyKEwsSyx6LmtleXMsVSl9fSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHosTixMLEspe3ZhciBVPXRoaXMuX2Rlc1N0YXRlLFc9Zy5yZWFkVUludDMyQkUoeixOKSxZPWcucmVhZFVJbnQzMkJFKHosTis0KTtnLmlwKFcsWSxVLnRtcCwwKSxXPVUudG1w''@;'; put 'put ''WzBdLFk9VS50bXBbMV0sImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQoVSxXLFksVS50bXAsMCk6dGhpcy5fZGVjcnlwdChVLFcsWSxVLnRtcCwwKSxZPVUudG1wWzFdLGcud3JpdGVVSW50MzJCRShMLFc9VS50bXBbMF0sSyksZy53cml0ZVVJbnQzMkJFKEwsWSxLKzQpfSxQ''@;'; put 'put ''LnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKHosTil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuITE7Zm9yKHZhciBMPXoubGVuZ3RoLU4sSz1OO0s8ei5sZW5ndGg7SysrKXpbS109TDtyZXR1cm4hMH0sUC5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKHope2lmKCExPT09dGhpcy5wYWRk''@;'; put 'put ''aW5nKXJldHVybiB6O2Zvcih2YXIgTj16W3oubGVuZ3RoLTFdLEw9ei5sZW5ndGgtTjtMPHoubGVuZ3RoO0wrKylJLmVxdWFsKHpbTF0sTik7cmV0dXJuIHouc2xpY2UoMCx6Lmxlbmd0aC1OKX0sUC5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oeixOLEwsSyxVKXtmb3IodmFyIFc9TixZ''@;'; put 'put ''PUwscT0wO3E8ei5rZXlzLmxlbmd0aDtxKz0yKXt2YXIgZWU9ei5rZXlzW3FdLEo9ei5rZXlzW3ErMV07Zy5leHBhbmQoWSx6LnRtcCwwKTt2YXIgbmU9Zy5zdWJzdGl0dXRlKGVlXj16LnRtcFswXSxKXj16LnRtcFsxXSksbGU9WTtZPShXXmcucGVybXV0ZShuZSkpPj4+MCxXPWxlfWcucmlw''@;'; put 'put ''KFksVyxLLFUpfSxQLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbih6LE4sTCxLLFUpe2Zvcih2YXIgVz1MLFk9TixxPXoua2V5cy5sZW5ndGgtMjtxPj0wO3EtPTIpe3ZhciBlZT16LmtleXNbcV0sSj16LmtleXNbcSsxXTtnLmV4cGFuZChXLHoudG1wLDApO3ZhciBuZT1nLnN1YnN0aXR1''@;'; put 'put ''dGUoZWVePXoudG1wWzBdLEpePXoudG1wWzFdKSxsZT1XO1c9KFleZy5wZXJtdXRlKG5lKSk+Pj4wLFk9bGV9Zy5yaXAoVyxZLEssVSl9fSw2MjEyMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM5MjEwKSxfPXkoNzE5OTMpLGc9eSgxMDIxOSksQj15KDY0MTY2KTtmdW5jdGlv''@;'; put 'put ''biB3KEYsTyl7SS5lcXVhbChPLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIHo9Ty5zbGljZSgwLDgpLE49Ty5zbGljZSg4LDE2KSxMPU8uc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1GP1tCLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Onp9KSxC''@;'; put 'put ''LmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Ok59KSxCLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okx9KV06W0IuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6TH0pLEIuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6Tn0pLEIuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6en0p''@;'; put 'put ''XX1mdW5jdGlvbiBQKEYpe2cuY2FsbCh0aGlzLEYpO3ZhciBPPW5ldyB3KHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1PfV8oUCxnKSx1ZS5leHBvcnRzPVAsUC5jcmVhdGU9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyBQKE8pfSxQLnByb3RvdHlwZS5fdXBkYXRl''@;'; put 'put ''PWZ1bmN0aW9uKE8seixOLEwpe3ZhciBLPXRoaXMuX2VkZVN0YXRlO0suY2lwaGVyc1swXS5fdXBkYXRlKE8seixOLEwpLEsuY2lwaGVyc1sxXS5fdXBkYXRlKE4sTCxOLEwpLEsuY2lwaGVyc1syXS5fdXBkYXRlKE4sTCxOLEwpfSxQLnByb3RvdHlwZS5fcGFkPUIucHJvdG90eXBlLl9wYWQs''@;'; put 'put ''UC5wcm90b3R5cGUuX3VucGFkPUIucHJvdG90eXBlLl91bnBhZH0sODU2NzE6KHVlLFgpPT57InVzZSBzdHJpY3QiO1gucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEIsdyl7cmV0dXJuKEJbMCt3XTw8MjR8QlsxK3ddPDwxNnxCWzIrd108PDh8QlszK3ddKT4+PjB9LFgud3JpdGVVSW50MzJCRT1m''@;'; put 'put ''dW5jdGlvbihCLHcsUCl7QlswK1BdPXc+Pj4yNCxCWzErUF09dz4+PjE2JjI1NSxCWzIrUF09dz4+PjgmMjU1LEJbMytQXT0yNTUmd30sWC5pcD1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj02O04+PTA7Ti09Mil7Zm9yKHZhciBMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD13''@;'; put 'put ''Pj4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KU88PD0xLE98PUI+Pj5MK04mMX1mb3IoTj02O04+PTA7Ti09Mil7Zm9yKEw9MTtMPD0yNTtMKz04KXo8PD0xLHp8PXc+Pj5MK04mMTtmb3IoTD0xO0w8PTI1O0wrPTgpejw8PTEsenw9Qj4+PkwrTiYxfVBbRiswXT1PPj4+MCxQW0YrMV09ej4+''@;'; put 'put ''PjB9LFgucmlwPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTA7Tjw0O04rKylmb3IodmFyIEw9MjQ7TD49MDtMLT04KU88PD0xLE98PXc+Pj5MK04mMSxPPDw9MSxPfD1CPj4+TCtOJjE7Zm9yKE49NDtOPDg7TisrKWZvcihMPTI0O0w+PTA7TC09OCl6PDw9MSx6fD13Pj4+''@;'; put 'put ''TCtOJjEsejw8PTEsenw9Qj4+PkwrTiYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LFgucGMxPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTc7Tj49NTtOLS0pe2Zvcih2YXIgTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04''@;'; put 'put ''KU88PD0xLE98PUI+PkwrTiYxfWZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD13Pj5MK04mMTtmb3IoTj0xO048PTM7TisrKXtmb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEsenw9dz4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KXo8PD0xLHp8PUI+PkwrTiYxfWZvcihMPTA7TDw9MjQ7TCs9''@;'; put 'put ''OCl6PDw9MSx6fD1CPj5MK04mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxYLnIyOHNobD1mdW5jdGlvbihCLHcpe3JldHVybiBCPDx3JjI2ODQzNTQ1NXxCPj4+Mjgtd307dmFyIHk9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEs''@;'; put 'put ''OCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07WC5wYzI9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49eS5sZW5ndGg+Pj4xLEw9MDtMPE47TCsrKU88PD0xLE98PUI+Pj55W0xdJjE7Zm9yKEw9''@;'; put 'put ''TjtMPHkubGVuZ3RoO0wrKyl6PDw9MSx6fD13Pj4+eVtMXSYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LFguZXhwYW5kPWZ1bmN0aW9uKEIsdyxQKXt2YXIgRj0wLE89MDtGPSgxJkIpPDw1fEI+Pj4yNztmb3IodmFyIHo9MjM7ej49MTU7ei09NClGPDw9NixGfD1CPj4+eiY2Mztmb3Io''@;'; put 'put ''ej0xMTt6Pj0zO3otPTQpT3w9Qj4+PnomNjMsTzw8PTY7T3w9KDMxJkIpPDwxfEI+Pj4zMSx3W1ArMF09Rj4+PjAsd1tQKzFdPU8+Pj4wfTt2YXIgST1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQs''@;'; put 'put ''MTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAs''@;'; put 'put ''MTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDks''@;'; put 'put ''Myw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1''@;'; put 'put ''LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAs''@;'; put 'put ''NSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwx''@;'; put 'put ''MSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywx''@;'; put 'put ''LDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtYLnN1YnN0aXR1dGU9ZnVu''@;'; put 'put ''Y3Rpb24oQix3KXtmb3IodmFyIFA9MCxGPTA7Rjw0O0YrKylQPDw9NCxQfD1JWzY0KkYrKEI+Pj4xOC02KkYmNjMpXTtmb3IoRj0wO0Y8NDtGKyspUDw8PTQsUHw9SVsyNTYrNjQqRisodz4+PjE4LTYqRiY2MyldO3JldHVybiBQPj4+MH07dmFyIF89WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwz''@;'; put 'put ''MSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO1gucGVybXV0ZT1mdW5jdGlvbihCKXtmb3IodmFyIHc9MCxQPTA7UDxfLmxlbmd0aDtQKyspdzw8PTEsd3w9Qj4+Pl9bUF0mMTtyZXR1cm4gdz4+PjB9LFgucGFkU3BsaXQ9ZnVu''@;'; put 'put ''Y3Rpb24oQix3LFApe2Zvcih2YXIgRj1CLnRvU3RyaW5nKDIpO0YubGVuZ3RoPHc7KUY9IjAiK0Y7Zm9yKHZhciBPPVtdLHo9MDt6PHc7eis9UClPLnB1c2goRi5zbGljZSh6LHorUCkpO3JldHVybiBPLmpvaW4oIiAiKX19LDQzNzc6KHVlLFgseSk9Pnt2YXIgST15KDEyNzI3KSxfPXkoMjMy''@;'; put 'put ''NDEpLGc9eSg5NDU5Myksdz17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O1guRGlmZmllSGVsbG1hbkdyb3VwPVguY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPVguZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbiBCKEYpe3ZhciBPPW5ldyBCdWZmZXIoX1tGXS5wcmltZSwiaGV4Iiksej1u''@;'; put 'put ''ZXcgQnVmZmVyKF9bRl0uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IGcoTyx6KX0sWC5jcmVhdGVEaWZmaWVIZWxsbWFuPVguRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBQKEYsTyx6LE4pe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoTyl8fHZvaWQgMD09PXdbT10/UChGLCJiaW5hcnkiLE8seik6KE89''@;'; put 'put ''T3x8ImJpbmFyeSIsTj1OfHwiYmluYXJ5Iix6PXp8fG5ldyBCdWZmZXIoWzJdKSxCdWZmZXIuaXNCdWZmZXIoeil8fCh6PW5ldyBCdWZmZXIoeixOKSksIm51bWJlciI9PXR5cGVvZiBGP25ldyBnKEkoRix6KSx6LCEwKTooQnVmZmVyLmlzQnVmZmVyKEYpfHwoRj1uZXcgQnVmZmVyKEYsTykp''@;'; put 'put ''LG5ldyBnKEYseiwhMCkpKX19LDk0NTkzOih1ZSxYLHkpPT57dmFyIEk9eSgzODI4MCksZz1uZXcoeSg1MzQ1OSkpLEI9bmV3IEkoMjQpLHc9bmV3IEkoMTEpLFA9bmV3IEkoMTApLEY9bmV3IEkoMyksTz1uZXcgSSg3KSx6PXkoMTI3MjcpLE49eSgzMzQyKTtmdW5jdGlvbiBMKGVlLEope3Jl''@;'; put 'put ''dHVybiBKPUp8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoZWUpfHwoZWU9bmV3IEJ1ZmZlcihlZSxKKSksdGhpcy5fcHViPW5ldyBJKGVlKSx0aGlzfWZ1bmN0aW9uIEsoZWUsSil7cmV0dXJuIEo9Snx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihlZSl8fChlZT1uZXcgQnVmZmVyKGVlLEopKSx0''@;'; put 'put ''aGlzLl9wcml2PW5ldyBJKGVlKSx0aGlzfXVlLmV4cG9ydHM9WTt2YXIgVT17fTtmdW5jdGlvbiBZKGVlLEosbmUpe3RoaXMuc2V0R2VuZXJhdG9yKEopLHRoaXMuX19wcmltZT1uZXcgSShlZSksdGhpcy5fcHJpbWU9SS5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49ZWUubGVu''@;'; put 'put ''Z3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxuZT8odGhpcy5zZXRQdWJsaWNLZXk9TCx0aGlzLnNldFByaXZhdGVLZXk9Syk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gcShlZSxKKXt2YXIgbmU9bmV3IEJ1ZmZlcihlZS50''@;'; put 'put ''b0FycmF5KCkpO3JldHVybiBKP25lLnRvU3RyaW5nKEopOm5lfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJp''@;'; put 'put ''bWVDb2RlPWZ1bmN0aW9uIFcoZWUsSil7dmFyIG5lPUoudG9TdHJpbmcoImhleCIpLGllPVtuZSxlZS50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihpZSBpbiBVKXJldHVybiBVW2llXTt2YXIgbWUsbGU9MDtpZihlZS5pc0V2ZW4oKXx8IXouc2ltcGxlU2lldmV8fCF6LmZlcm1hdFRlc3Qo''@;'; put 'put ''ZWUpfHwhZy50ZXN0KGVlKSlyZXR1cm4gbGUrPTEsVVtpZV09bGUrPSIwMiI9PT1uZXx8IjA1Ij09PW5lPzg6NCxsZTtzd2l0Y2goZy50ZXN0KGVlLnNocm4oMSkpfHwobGUrPTIpLG5lKXtjYXNlIjAyIjplZS5tb2QoQikuY21wKHcpJiYobGUrPTgpO2JyZWFrO2Nhc2UiMDUiOihtZT1lZS5t''@;'; put 'put ''b2QoUCkpLmNtcChGKSYmbWUuY21wKE8pJiYobGUrPTgpO2JyZWFrO2RlZmF1bHQ6bGUrPTR9cmV0dXJuIFVbaWVdPWxlLGxlfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxZLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IEkoTih0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LFkucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVu''@;'; put 'put ''Y3Rpb24oZWUpe3ZhciBKPShlZT0oZWU9bmV3IEkoZWUpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksbmU9bmV3IEJ1ZmZlcihKLnRvQXJyYXkoKSksaWU9dGhpcy5nZXRQcmltZSgpO2lmKG5lLmxlbmd0aDxpZS5sZW5ndGgpe3ZhciBsZT1uZXcg''@;'; put 'put ''QnVmZmVyKGllLmxlbmd0aC1uZS5sZW5ndGgpO2xlLmZpbGwoMCksbmU9QnVmZmVyLmNvbmNhdChbbGUsbmVdKX1yZXR1cm4gbmV9LFkucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihKKXtyZXR1cm4gcSh0aGlzLl9wdWIsSil9LFkucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVu''@;'; put 'put ''Y3Rpb24oSil7cmV0dXJuIHEodGhpcy5fcHJpdixKKX0sWS5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oZWUpe3JldHVybiBxKHRoaXMuX19wcmltZSxlZSl9LFkucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihlZSl7cmV0dXJuIHEodGhpcy5fZ2VuLGVlKX0sWS5wcm90b3R5''@;'; put 'put ''cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKGVlLEope3JldHVybiBKPUp8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoZWUpfHwoZWU9bmV3IEJ1ZmZlcihlZSxKKSksdGhpcy5fX2dlbj1lZSx0aGlzLl9nZW49bmV3IEkoZWUpLHRoaXN9fSwxMjcyNzoodWUsWCx5KT0+e3ZhciBJPXkoMzM0Mik7''@;'; put 'put ''dWUuZXhwb3J0cz1sZSxsZS5zaW1wbGVTaWV2ZT1uZSxsZS5mZXJtYXRUZXN0PWllO3ZhciBfPXkoMzgyODApLGc9bmV3IF8oMjQpLHc9bmV3KHkoNTM0NTkpKSxQPW5ldyBfKDEpLEY9bmV3IF8oMiksTz1uZXcgXyg1KSxMPShuZXcgXygxNiksbmV3IF8oOCksbmV3IF8oMTApKSxLPW5ldyBf''@;'; put 'put ''KDMpLFc9KG5ldyBfKDcpLG5ldyBfKDExKSksWT1uZXcgXyg0KSxlZT0obmV3IF8oMTIpLG51bGwpO2Z1bmN0aW9uIG5lKG1lKXtmb3IodmFyIF9lPWZ1bmN0aW9uIEooKXtpZihudWxsIT09ZWUpcmV0dXJuIGVlO3ZhciBfZT1bXTtfZVswXT0yO2Zvcih2YXIgVGU9MSxTZT0zO1NlPDEwNDg1''@;'; put 'put ''NzY7U2UrPTIpe2Zvcih2YXIgamU9TWF0aC5jZWlsKE1hdGguc3FydChTZSkpLFY9MDtWPFRlJiZfZVtWXTw9amUmJlNlJV9lW1ZdIT0wO1YrKyk7VGUhPT1WJiZfZVtWXTw9amV8fChfZVtUZSsrXT1TZSl9cmV0dXJuIGVlPV9lLF9lfSgpLFRlPTA7VGU8X2UubGVuZ3RoO1RlKyspaWYoMD09''@;'; put 'put ''PW1lLm1vZG4oX2VbVGVdKSlyZXR1cm4gMD09PW1lLmNtcG4oX2VbVGVdKTtyZXR1cm4hMH1mdW5jdGlvbiBpZShtZSl7dmFyIF9lPV8ubW9udChtZSk7cmV0dXJuIDA9PT1GLnRvUmVkKF9lKS5yZWRQb3cobWUuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gbGUobWUsX2Up''@;'; put 'put ''e2lmKG1lPDE2KXJldHVybiBuZXcgXygyPT09X2V8fDU9PT1fZT9bMTQwLDEyM106WzE0MCwzOV0pO19lPW5ldyBfKF9lKTtmb3IodmFyIFRlLFNlOzspe2ZvcihUZT1uZXcgXyhJKE1hdGguY2VpbChtZS84KSkpO1RlLmJpdExlbmd0aCgpPm1lOylUZS5pc2hybigxKTtpZihUZS5pc0V2ZW4o''@;'; put 'put ''KSYmVGUuaWFkZChQKSxUZS50ZXN0bigxKXx8VGUuaWFkZChGKSxfZS5jbXAoRikpe2lmKCFfZS5jbXAoTykpZm9yKDtUZS5tb2QoTCkuY21wKEspOylUZS5pYWRkKFkpfWVsc2UgZm9yKDtUZS5tb2QoZykuY21wKFcpOylUZS5pYWRkKFkpO2lmKG5lKFNlPVRlLnNocm4oMSkpJiZuZShUZSkm''@;'; put 'put ''JmllKFNlKSYmaWUoVGUpJiZ3LnRlc3QoU2UpJiZ3LnRlc3QoVGUpKXJldHVybiBUZX19fSwzODI4MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9''@;'; put 'put ''ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRp''@;'; put 'put ''dmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5C''@;'; put 'put ''Tj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDY2MDg5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZi''@;'; put 'put ''PD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7''@;'; put 'put ''SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndv''@;'; put 'put ''cmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7''@;'; put 'put ''aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShw''@;'; put 'put ''PXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXko''@;'; put 'put ''KSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEw''@;'; put 'put ''ODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5''@;'; put 'put ''KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8z''@;'; put 'put ''KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0x''@;'; put 'put ''XTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4''@;'; put 'put ''fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwo''@;'; put 'put ''KHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRo''@;'; put 'put ''aXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/''@;'; put 'put ''KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQv''@;'; put 'put ''YnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2''@;'; put 'put ''YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25l''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1m''@;'; put 'put ''dW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlz''@;'; put 'put ''LndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwi''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1''@;'; put 'put ''LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1''@;'; put 'put ''LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtw''@;'; put 'put ''Lmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRo''@;'; put 'put ''Lm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAh''@;'; put 'put ''PT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2''@;'; put 'put ''YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRv''@;'; put 'put ''U3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFh''@;'; put 'put ''ZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9''@;'; put 'put ''PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9''@;'; put 'put ''LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJl''@;'; put 'put ''ZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpb''@;'; put 'put ''bV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlw''@;'; put 'put ''ZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3Rv''@;'; put 'put ''dHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9y''@;'; put 'put ''KHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgo''@;'; put 'put ''KS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlz''@;'; put 'put ''Lm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVn''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3Ro''@;'; put 'put ''O2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1''@;'; put 'put ''b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxl''@;'; put 'put ''bmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xv''@;'; put 'put ''bmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihw''@;'; put 'put ''KXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0Nd''@;'; put 'put ''PWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3Io''@;'; put 'put ''dGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+''@;'; put 'put ''dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVu''@;'; put 'put ''Y3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1w''@;'; put 'put ''Lm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02''@;'; put 'put ''NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRo''@;'; put 'put ''aXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0''@;'; put 'put ''aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5w''@;'; put 'put ''Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9''@;'; put 'put ''aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndv''@;'; put 'put ''cmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7''@;'; put 'put ''aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMu''@;'; put 'put ''bGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgu''@;'; put 'put ''d29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+''@;'; put 'put ''Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMs''@;'; put 'put ''cXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8''@;'; put 'put ''VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZl''@;'; put 'put ''PXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSso''@;'; put 'put ''dWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwo''@;'; put 'put ''RGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVs''@;'; put 'put ''KHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxX''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''RGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxz''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMp''@;'; put 'put ''fDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxX''@;'; put 'put ''ZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''QWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxz''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVs''@;'; put 'put ''KHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxX''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwo''@;'; put 'put ''dXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2UsaHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6''@;'; put 'put ''ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZu''@;'; put 'put ''KXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEw''@;'; put 'put ''ODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChR''@;'; put 'put ''ZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9l''@;'; put 'put ''LHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11''@;'; put 'put ''bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0o''@;'; put 'put ''bT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5''@;'; put 'put ''dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''cGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgk''@;'; put 'put ''ZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50''@;'; put 'put ''LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11''@;'; put 'put ''bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0o''@;'; put 'put ''bT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5''@;'; put 'put ''dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZu''@;'; put 'put ''KXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEw''@;'; put 'put ''ODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwo''@;'; put 'put ''dXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMp''@;'; put 'put ''fDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09''@;'; put 'put ''TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRv''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5l''@;'; put 'put ''Z2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsr''@;'; put 'put ''KXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVy''@;'; put 'put ''biAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7Qysr''@;'; put 'put ''KWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUu''@;'; put 'put ''cGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8''@;'; put 'put ''PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1th''@;'; put 'put ''ZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1''@;'; put 'put ''ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7''@;'; put 'put ''QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQo''@;'; put 'put ''cFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkx''@;'; put 'put ''JihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7''@;'; put 'put ''cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyks''@;'; put 'put ''QT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgs''@;'; put 'put ''RSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMp''@;'; put 'put ''LHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1m''@;'; put 'put ''dW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXko''@;'; put 'put ''dGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQp''@;'; put 'put ''O2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRo''@;'; put 'put ''aXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09cD8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVu''@;'; put 'put ''Z3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5n''@;'; put 'put ''dGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02''@;'; put 'put ''NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxl''@;'; put 'put ''bmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChw''@;'; put 'put ''LVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0''@;'; put 'put ''aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRo''@;'; put 'put ''aXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''c2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTAp''@;'; put 'put ''O3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09''@;'; put 'put ''YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''LHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+''@;'; put 'put ''PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5j''@;'; put 'put ''dGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRz''@;'; put 'put ''WzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlz''@;'; put 'put ''LndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxl''@;'; put 'put ''bmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhp''@;'; put 'put ''cy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1Rd''@;'; put 'put ''KStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10''@;'; put 'put ''aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgp''@;'; put 'put ''O2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0Kigw''@;'; put 'put ''fEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxD''@;'; put 'put ''LmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3Jl''@;'; put 'put ''dHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgu''@;'; put 'put ''bW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97''@;'; put 'put ''ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxt''@;'; put 'put ''b2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJl''@;'; put 'put ''dHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5p''@;'; put 'put ''YWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlv''@;'; put 'put ''bihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBD''@;'; put 'put ''PW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEo''@;'; put 'put ''Yi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jk''@;'; put 'put ''c1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgp''@;'; put 'put ''LFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUo''@;'; put 'put ''KTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClm''@;'; put 'put ''b3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJu''@;'; put 'put ''KDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVy''@;'; put 'put ''biBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9y''@;'; put 'put ''KDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndv''@;'; put 'put ''cmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0''@;'; put 'put ''dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRo''@;'; put 'put ''aXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/''@;'; put 'put ''MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2''@;'; put 'put ''YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMu''@;'; put 'put ''bGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3''@;'; put 'put ''LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3Jj''@;'; put 'put ''ZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRk''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1''@;'; put 'put ''Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0''@;'; put 'put ''aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElT''@;'; put 'put ''cXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp''@;'; put 'put ''LHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl''@;'; put 'put ''ZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGll''@;'; put 'put ''KFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAw''@;'; put 'put ''MDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4g''@;'; put 'put ''MSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBqZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhp''@;'; put 'put ''cy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5t''@;'; put 'put ''aW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1w''@;'; put 'put ''O2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEp''@;'; put 'put ''OkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlz''@;'; put 'put ''LmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBd''@;'; put 'put ''PTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxl''@;'; put 'put ''bmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4''@;'; put 'put ''XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUp''@;'; put 'put ''LFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIp''@;'; put 'put ''LHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''Iil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVy''@;'; put 'put ''bygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhp''@;'; put 'put ''cyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2''@;'; put 'put ''YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhp''@;'; put 'put ''cy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9''@;'; put 'put ''LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIp''@;'; put 'put ''O3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4o''@;'; put 'put ''MSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRl''@;'; put 'put ''PXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5y''@;'; put 'put ''ZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIp''@;'; put 'put ''fSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9y''@;'; put 'put ''KHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0t''@;'; put 'put ''KXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRU''@;'; put 'put ''bz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcg''@;'; put 'put ''amUocCl9LEIoamUsU2UpLGplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0samUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1''@;'; put 'put ''cm4gYi5yZWQ9bnVsbCxifSxqZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFz''@;'; put 'put ''a24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlw''@;'; put 'put ''ZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXgu''@;'; put 'put ''aXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw5MDUxODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1YO0kudmVyc2lvbj15KDE2MzYpLnJFLEkudXRpbHM9eSgzMTM2KSxJLnJhbmQ9eSgzNTI5NCks''@;'; put 'put ''SS5jdXJ2ZT15KDg3MjkpLEkuY3VydmVzPXkoMjM0MDEpLEkuZWM9eSgyOTA0MiksSS5lZGRzYT15KDgzMDQ1KX0sOTg4Mjg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4ODcyMyksXz15KDMxMzYpLGc9Xy5nZXROQUYsQj1fLmdldEpTRix3PV8uYXNzZXJ0O2Z1bmN0aW9uIFAo''@;'; put 'put ''Tyx6KXt0aGlzLnR5cGU9Tyx0aGlzLnA9bmV3IEkoei5wLDE2KSx0aGlzLnJlZD16LnByaW1lP0kucmVkKHoucHJpbWUpOkkubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgSSgwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IEkoMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5l''@;'; put 'put ''dyBJKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49ei5uJiZuZXcgSSh6Lm4sMTYpLHRoaXMuZz16LmcmJnRoaXMucG9pbnRGcm9tSlNPTih6Lmcsei5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJh''@;'; put 'put ''eSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIE49dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IU58fE4uY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0''@;'; put 'put ''aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gRihPLHope3RoaXMuY3VydmU9Tyx0aGlzLnR5cGU9eix0aGlzLnByZWNvbXB1dGVkPW51bGx9dWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVt''@;'; put 'put ''ZW50ZWQiKX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxQLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oeixOKXt3KHoucHJlY29tcHV0ZWQpO3ZhciBMPXouX2dldERvdWJsZXMoKSxLPWcoTiwxLHRo''@;'; put 'put ''aXMuX2JpdExlbmd0aCksVT0oMTw8TC5zdGVwKzEpLShMLnN0ZXAlMj09MD8yOjEpO1UvPTM7dmFyIFkscSxXPVtdO2ZvcihZPTA7WTxLLmxlbmd0aDtZKz1MLnN0ZXApe3E9MDtmb3IodmFyIGVlPVkrTC5zdGVwLTE7ZWU+PVk7ZWUtLSlxPShxPDwxKStLW2VlXTtXLnB1c2gocSl9Zm9yKHZh''@;'; put 'put ''ciBKPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxuZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksaWU9VTtpZT4wO2llLS0pe2ZvcihZPTA7WTxXLmxlbmd0aDtZKyspKHE9V1tZXSk9PT1pZT9uZT1uZS5taXhlZEFkZChMLnBvaW50c1tZXSk6cT09PS1pZSYmKG5lPW5lLm1peGVk''@;'; put 'put ''QWRkKEwucG9pbnRzW1ldLm5lZygpKSk7Sj1KLmFkZChuZSl9cmV0dXJuIEoudG9QKCl9LFAucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKHosTil7Zm9yKHZhciBMPTQsSz16Ll9nZXROQUZQb2ludHMoTCksVT1LLnBvaW50cyxXPWcoTixMPUsud25kLHRoaXMuX2JpdExlbmd0aCksWT10''@;'; put 'put ''aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkscT1XLmxlbmd0aC0xO3E+PTA7cS0tKXtmb3IodmFyIGVlPTA7cT49MCYmMD09PVdbcV07cS0tKWVlKys7aWYocT49MCYmZWUrKyxZPVkuZGJscChlZSkscTwwKWJyZWFrO3ZhciBKPVdbcV07dygwIT09SiksWT0iYWZmaW5lIj09PXoudHlwZT9Z''@;'; put 'put ''Lm1peGVkQWRkKEo+MD9VW0otMT4+MV06VVstSi0xPj4xXS5uZWcoKSk6WS5hZGQoSj4wP1VbSi0xPj4xXTpVWy1KLTE+PjFdLm5lZygpKX1yZXR1cm4iYWZmaW5lIj09PXoudHlwZT9ZLnRvUCgpOll9LFAucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKHosTixMLEssVSl7dmFyIEos''@;'; put 'put ''bmUsaWUsVz10aGlzLl93bmFmVDEsWT10aGlzLl93bmFmVDIscT10aGlzLl93bmFmVDMsZWU9MDtmb3IoSj0wO0o8SztKKyspe3ZhciBsZT0oaWU9TltKXSkuX2dldE5BRlBvaW50cyh6KTtXW0pdPWxlLnduZCxZW0pdPWxlLnBvaW50c31mb3IoSj1LLTE7Sj49MTtKLT0yKXt2YXIgbWU9Si0x''@;'; put 'put ''LF9lPUo7aWYoMT09PVdbbWVdJiYxPT09V1tfZV0pe3ZhciBUZT1bTlttZV0sbnVsbCxudWxsLE5bX2VdXTswPT09TlttZV0ueS5jbXAoTltfZV0ueSk/KFRlWzFdPU5bbWVdLmFkZChOW19lXSksVGVbMl09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0ubmVnKCkpKTowPT09TlttZV0ueS5j''@;'; put 'put ''bXAoTltfZV0ueS5yZWROZWcoKSk/KFRlWzFdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdKSxUZVsyXT1OW21lXS5hZGQoTltfZV0ubmVnKCkpKTooVGVbMV09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0pLFRlWzJdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdLm5lZygpKSk7dmFy''@;'; put 'put ''IFNlPVstMywtMSwtNSwtNywwLDcsNSwxLDNdLGplPUIoTFttZV0sTFtfZV0pO2ZvcihlZT1NYXRoLm1heChqZVswXS5sZW5ndGgsZWUpLHFbbWVdPW5ldyBBcnJheShlZSkscVtfZV09bmV3IEFycmF5KGVlKSxuZT0wO25lPGVlO25lKyspcVttZV1bbmVdPVNlWzMqKDErKDB8amVbMF1bbmVd''@;'; put 'put ''KSkrKDErKDB8amVbMV1bbmVdKSldLHFbX2VdW25lXT0wLFlbbWVdPVRlfWVsc2UgcVttZV09ZyhMW21lXSxXW21lXSx0aGlzLl9iaXRMZW5ndGgpLHFbX2VdPWcoTFtfZV0sV1tfZV0sdGhpcy5fYml0TGVuZ3RoKSxlZT1NYXRoLm1heChxW21lXS5sZW5ndGgsZWUpLGVlPU1hdGgubWF4KHFb''@;'; put 'put ''X2VdLmxlbmd0aCxlZSl9dmFyIGI9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHg9dGhpcy5fd25hZlQ0O2ZvcihKPWVlO0o+PTA7Si0tKXtmb3IodmFyIEM9MDtKPj0wOyl7dmFyIFQ9ITA7Zm9yKG5lPTA7bmU8SztuZSsrKXhbbmVdPTB8cVtuZV1bSl0sMCE9PXhbbmVdJiYoVD0hMSk7''@;'; put 'put ''aWYoIVQpYnJlYWs7QysrLEotLX1pZihKPj0wJiZDKyssYj1iLmRibHAoQyksSjwwKWJyZWFrO2ZvcihuZT0wO25lPEs7bmUrKyl7dmFyIEg9eFtuZV07MCE9PUgmJihIPjA/aWU9WVtuZV1bSC0xPj4xXTpIPDAmJihpZT1ZW25lXVstSC0xPj4xXS5uZWcoKSksYj0iYWZmaW5lIj09PWllLnR5''@;'; put 'put ''cGU/Yi5taXhlZEFkZChpZSk6Yi5hZGQoaWUpKX19Zm9yKEo9MDtKPEs7SisrKVlbSl09bnVsbDtyZXR1cm4gVT9iOmIudG9QKCl9LFAuQmFzZVBvaW50PUYsRi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxGLnByb3RvdHlwZS52''@;'; put 'put ''YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxQLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih6LE4pe3o9Xy50b0FycmF5KHosTik7dmFyIEw9dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PXpbMF18fDY9PT16WzBdfHw3PT09elsw''@;'; put 'put ''XSkmJnoubGVuZ3RoLTE9PTIqTClyZXR1cm4gNj09PXpbMF0/dyh6W3oubGVuZ3RoLTFdJTI9PTApOjc9PT16WzBdJiZ3KHpbei5sZW5ndGgtMV0lMj09MSksdGhpcy5wb2ludCh6LnNsaWNlKDEsMStMKSx6LnNsaWNlKDErTCwxKzIqTCkpO2lmKCgyPT09elswXXx8Mz09PXpbMF0pJiZ6Lmxl''@;'; put 'put ''bmd0aC0xPT09TClyZXR1cm4gdGhpcy5wb2ludEZyb21YKHouc2xpY2UoMSwxK0wpLDM9PT16WzBdKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9pbnQgZm9ybWF0Iil9LEYucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuZW5jb2RlKHosITAp''@;'; put 'put ''fSxGLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKHope3ZhciBOPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCksTD10aGlzLmdldFgoKS50b0FycmF5KCJiZSIsTik7cmV0dXJuIHo/W3RoaXMuZ2V0WSgpLmlzRXZlbigpPzI6M10uY29uY2F0KEwpOls0XS5jb25jYXQoTCx0aGlzLmdldFko''@;'; put 'put ''KS50b0FycmF5KCJiZSIsTikpfSxGLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oeixOKXtyZXR1cm4gXy5lbmNvZGUodGhpcy5fZW5jb2RlKE4pLHopfSxGLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKHope2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIE49e2Rv''@;'; put 'put ''dWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBOLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksTi5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCx6KSxOLmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9Tix0aGlzfSxGLnByb3RvdHlwZS5faGFzRG91''@;'; put 'put ''Ymxlcz1mdW5jdGlvbih6KXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgTj10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFOJiZOLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgoei5iaXRMZW5ndGgoKSsxKS9OLnN0ZXApfSxGLnByb3RvdHlwZS5fZ2V0RG91Ymxl''@;'; put 'put ''cz1mdW5jdGlvbih6LE4pe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgTD1bdGhpc10sSz10aGlzLFU9MDtVPE47VSs9eil7Zm9yKHZhciBXPTA7Vzx6O1crKylLPUsuZGJsKCk7TC5w''@;'; put 'put ''dXNoKEspfXJldHVybntzdGVwOnoscG9pbnRzOkx9fSxGLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKHope2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIE49W3RoaXNdLEw9KDE8PHop''@;'; put 'put ''LTEsSz0xPT09TD9udWxsOnRoaXMuZGJsKCksVT0xO1U8TDtVKyspTltVXT1OW1UtMV0uYWRkKEspO3JldHVybnt3bmQ6eixwb2ludHM6Tn19LEYucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LEYucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oeil7Zm9yKHZhciBO''@;'; put 'put ''PXRoaXMsTD0wO0w8ejtMKyspTj1OLmRibCgpO3JldHVybiBOfX0sNTU1Mzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMTM2KSxfPXkoODg3MjMpLGc9eSg3MTk5MyksQj15KDk4ODI4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAoTyl7dGhpcy50d2lzdGVkPTEhPSgwfE8uYSks''@;'; put 'put ''dGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxPLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxCLmNhbGwodGhpcywiZWR3YXJkcyIsTyksdGhpcy5hPW5ldyBfKE8uYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3''@;'; put 'put ''IF8oTy5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBfKE8uZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHcoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSks''@;'; put 'put ''dGhpcy5vbmVDPTE9PSgwfE8uYyl9ZnVuY3Rpb24gRihPLHosTixMLEspe0IuQmFzZVBvaW50LmNhbGwodGhpcyxPLCJwcm9qZWN0aXZlIiksbnVsbD09PXomJm51bGw9PT1OJiZudWxsPT09TD8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRo''@;'; put 'put ''aXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBfKHosMTYpLHRoaXMueT1uZXcgXyhOLDE2KSx0aGlzLno9TD9uZXcgXyhMLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9SyYmbmV3IF8oSywxNiksdGhpcy54LnJlZHx8KHRoaXMu''@;'; put 'put ''eD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlz''@;'; put 'put ''LnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZElu''@;'; put 'put ''dm0oKSkpKSl9ZyhQLEIpLHVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5tT25lQT96LnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoeil9LFAucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLm9uZUM/ejp0aGlzLmMucmVk''@;'; put 'put ''TXVsKHopfSxQLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oeixOLEwsSyl7cmV0dXJuIHRoaXMucG9pbnQoeixOLEwsSyl9LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIEw9ei5yZWRT''@;'; put 'put ''cXIoKSxLPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoTCkpLFU9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKEwpKSxXPUsucmVkTXVsKFUucmVkSW52bSgpKSxZPVcucmVkU3FydCgpO2lmKDAhPT1ZLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhp''@;'; put 'put ''cy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgcT1ZLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihOJiYhcXx8IU4mJnEpJiYoWT1ZLnJlZE5lZygpKSx0aGlzLnBvaW50KHosWSl9LFAucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oeixOKXsoej1uZXcg''@;'; put 'put ''Xyh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIEw9ei5yZWRTcXIoKSxLPUwucmVkU3ViKHRoaXMuYzIpLFU9TC5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksVz1LLnJlZE11bChVLnJlZEludm0oKSk7aWYoMD09PVcuY21wKHRoaXMu''@;'; put 'put ''emVybykpe2lmKE4pdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHopfXZhciBZPVcucmVkU3FydCgpO2lmKDAhPT1ZLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9p''@;'; put 'put ''bnQiKTtyZXR1cm4gWS5mcm9tUmVkKCkuaXNPZGQoKSE9PU4mJihZPVkucmVkTmVnKCkpLHRoaXMucG9pbnQoWSx6KX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oeil7aWYoei5pc0luZmluaXR5KCkpcmV0dXJuITA7ei5ub3JtYWxpemUoKTt2YXIgTj16LngucmVkU3FyKCksTD16''@;'; put 'put ''LnkucmVkU3FyKCksSz1OLnJlZE11bCh0aGlzLmEpLnJlZEFkZChMKSxVPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKE4pLnJlZE11bChMKSkpO3JldHVybiAwPT09Sy5jbXAoVSl9LGcoRixCLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnRGcm9tSlNP''@;'; put 'put ''Tj1mdW5jdGlvbih6KXtyZXR1cm4gRi5mcm9tSlNPTih0aGlzLHopfSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gbmV3IEYodGhpcyx6LE4sTCxLKX0sRi5mcm9tSlNPTj1mdW5jdGlvbih6LE4pe3JldHVybiBuZXcgRih6LE5bMF0sTlsxXSxOWzJdKX0sRi5w''@;'; put 'put ''cm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6''@;'; put 'put ''OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5j''@;'; put 'put ''KSl9LEYucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkU3FyKCksTj10aGlzLnkucmVkU3FyKCksTD10aGlzLnoucmVkU3FyKCk7TD1MLnJlZElBZGQoTCk7dmFyIEs9dGhpcy5jdXJ2ZS5fbXVsQSh6KSxVPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIo''@;'; put 'put ''KS5yZWRJU3ViKHopLnJlZElTdWIoTiksVz1LLnJlZEFkZChOKSxZPVcucmVkU3ViKEwpLHE9Sy5yZWRTdWIoTiksZWU9VS5yZWRNdWwoWSksSj1XLnJlZE11bChxKSxuZT1VLnJlZE11bChxKSxpZT1ZLnJlZE11bChXKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChlZSxKLGllLG5lKX0sRi5w''@;'; put 'put ''cm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgSyxVLFcsWSxxLGVlLHo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLE49dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIEo9KFk9dGhpcy5jdXJ2ZS5fbXVsQShO''@;'; put 'put ''KSkucmVkQWRkKEwpO3RoaXMuek9uZT8oSz16LnJlZFN1YihOKS5yZWRTdWIoTCkucmVkTXVsKEoucmVkU3ViKHRoaXMuY3VydmUudHdvKSksVT1KLnJlZE11bChZLnJlZFN1YihMKSksVz1KLnJlZFNxcigpLnJlZFN1YihKKS5yZWRTdWIoSikpOihxPXRoaXMuei5yZWRTcXIoKSxlZT1KLnJl''@;'; put 'put ''ZFN1YihxKS5yZWRJU3ViKHEpLEs9ei5yZWRTdWIoTikucmVkSVN1YihMKS5yZWRNdWwoZWUpLFU9Si5yZWRNdWwoWS5yZWRTdWIoTCkpLFc9Si5yZWRNdWwoZWUpKX1lbHNlIFk9Ti5yZWRBZGQoTCkscT10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksZWU9WS5yZWRTdWIocSku''@;'; put 'put ''cmVkU3ViKHEpLEs9dGhpcy5jdXJ2ZS5fbXVsQyh6LnJlZElTdWIoWSkpLnJlZE11bChlZSksVT10aGlzLmN1cnZlLl9tdWxDKFkpLnJlZE11bChOLnJlZElTdWIoTCkpLFc9WS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSxXKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEYucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bCh6LnkucmVkU3Vi''@;'; put 'put ''KHoueCkpLEw9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bCh6LnkucmVkQWRkKHoueCkpLEs9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoei50KSxVPXRoaXMuei5yZWRNdWwoei56LnJlZEFkZCh6LnopKSxXPUwucmVkU3ViKE4pLFk9VS5yZWRTdWIoSykscT1VLnJl''@;'; put 'put ''ZEFkZChLKSxlZT1MLnJlZEFkZChOKSxKPVcucmVkTXVsKFkpLG5lPXEucmVkTXVsKGVlKSxpZT1XLnJlZE11bChlZSksbGU9WS5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSixuZSxsZSxpZSl9LEYucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKHope3ZhciBuZSxpZSxO''@;'; put 'put ''PXRoaXMuei5yZWRNdWwoei56KSxMPU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKHoueCksVT10aGlzLnkucmVkTXVsKHoueSksVz10aGlzLmN1cnZlLmQucmVkTXVsKEspLnJlZE11bChVKSxZPUwucmVkU3ViKFcpLHE9TC5yZWRBZGQoVyksZWU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJl''@;'; put 'put ''ZE11bCh6LngucmVkQWRkKHoueSkpLnJlZElTdWIoSykucmVkSVN1YihVKSxKPU4ucmVkTXVsKFkpLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8obmU9Ti5yZWRNdWwocSkucmVkTXVsKFUucmVkU3ViKHRoaXMuY3VydmUuX211bEEoSykpKSxpZT1ZLnJlZE11bChxKSk6''@;'; put 'put ''KG5lPU4ucmVkTXVsKHEpLnJlZE11bChVLnJlZFN1YihLKSksaWU9dGhpcy5jdXJ2ZS5fbXVsQyhZKS5yZWRNdWwocSkpLHRoaXMuY3VydmUucG9pbnQoSixuZSxpZSl9LEYucHJvdG90eXBlLmFkZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/ejp6LmlzSW5maW5pdHko''@;'; put 'put ''KT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKHopOnRoaXMuX3Byb2pBZGQoeil9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5faGFzRG91Ymxlcyh6KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHopOnRoaXMuY3VydmUuX3duYWZN''@;'; put 'put ''dWwodGhpcyx6KX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKHosTixMKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LExdLDIsITEpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHosTixMKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFk''@;'; put 'put ''ZCgxLFt0aGlzLE5dLFt6LExdLDIsITApfSxGLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHo9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoeiksdGhpcy55PXRoaXMueS5yZWRNdWwoeiksdGhp''@;'; put 'put ''cy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoeikpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlz''@;'; put 'put ''LnQucmVkTmVnKCkpfSxGLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBl''@;'; put 'put ''LmVxPWZ1bmN0aW9uKHope3JldHVybiB0aGlzPT09enx8MD09PXRoaXMuZ2V0WCgpLmNtcCh6LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoei5nZXRZKCkpfSxGLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oeil7dmFyIE49ei50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRo''@;'; put 'put ''aXMueik7aWYoMD09PXRoaXMueC5jbXAoTikpcmV0dXJuITA7Zm9yKHZhciBMPXouY2xvbmUoKSxLPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihMLmlhZGQodGhpcy5jdXJ2ZS5uKSxMLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKE4ucmVkSUFkZChLKSww''@;'; put 'put ''PT09dGhpcy54LmNtcChOKSlyZXR1cm4hMH19LEYucHJvdG90eXBlLnRvUD1GLnByb3RvdHlwZS5ub3JtYWxpemUsRi5wcm90b3R5cGUubWl4ZWRBZGQ9Ri5wcm90b3R5cGUuYWRkfSw4NzI5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPVg7SS5iYXNlPXkoOTg4MjgpLEkuc2hvcnQ9''@;'; put 'put ''eSg2ODA3NSksSS5tb250PXkoNjQ5NDcpLEkuZWR3YXJkcz15KDU1NTM3KX0sNjQ5NDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4ODcyMyksXz15KDcxOTkzKSxnPXkoOTg4MjgpLEI9eSgzMTM2KTtmdW5jdGlvbiB3KEYpe2cuY2FsbCh0aGlzLCJtb250IixGKSx0aGlzLmE9''@;'; put 'put ''bmV3IEkoRi5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBJKEYuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IEkoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgSSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRN''@;'; put 'put ''dWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIFAoRixPLHope2cuQmFzZVBvaW50LmNhbGwodGhpcyxGLCJwcm9qZWN0aXZlIiksbnVsbD09PU8mJm51bGw9PT16Pyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgSShP''@;'; put 'put ''LDE2KSx0aGlzLno9bmV3IEkoeiwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX1fKHcsZyksdWUuZXhwb3J0cz13LHcucHJvdG90eXBlLnZhbGlkYXRl''@;'; put 'put ''PWZ1bmN0aW9uKE8pe3ZhciB6PU8ubm9ybWFsaXplKCkueCxOPXoucmVkU3FyKCksTD1OLnJlZE11bCh6KS5yZWRBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHopO3JldHVybiAwPT09TC5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKEwpfSxfKFAsZy5CYXNlUG9pbnQpLHcucHJvdG90eXBl''@;'; put 'put ''LmRlY29kZVBvaW50PWZ1bmN0aW9uKE8seil7cmV0dXJuIHRoaXMucG9pbnQoQi50b0FycmF5KE8seiksMSl9LHcucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKE8seil7cmV0dXJuIG5ldyBQKHRoaXMsTyx6KX0sdy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihPKXtyZXR1cm4g''@;'; put 'put ''UC5mcm9tSlNPTih0aGlzLE8pfSxQLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxQLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sUC5mcm9tSlNPTj1mdW5jdGlv''@;'; put 'put ''bihPLHope3JldHVybiBuZXcgUChPLHpbMF0selsxXXx8Ty5vbmUpfSxQLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwy''@;'; put 'put ''KSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LFAucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxQLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkQWRkKHRoaXMueikucmVk''@;'; put 'put ''U3FyKCksTD10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCksSz16LnJlZFN1YihMKSxVPXoucmVkTXVsKEwpLFc9Sy5yZWRNdWwoTC5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKEspKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVSxXKX0sUC5wcm90b3R5cGUuYWRkPWZ1bmN0''@;'; put 'put ''aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihPLHope3ZhciBOPXRoaXMueC5yZWRBZGQodGhpcy56KSxMPXRoaXMueC5yZWRTdWIodGhpcy56KSxLPU8ueC5yZWRBZGQoTy56KSxX''@;'; put 'put ''PU8ueC5yZWRTdWIoTy56KS5yZWRNdWwoTiksWT1LLnJlZE11bChMKSxxPXouei5yZWRNdWwoVy5yZWRBZGQoWSkucmVkU3FyKCkpLGVlPXoueC5yZWRNdWwoVy5yZWRJU3ViKFkpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChxLGVlKX0sUC5wcm90b3R5cGUubXVsPWZ1bmN0''@;'; put 'put ''aW9uKE8pe2Zvcih2YXIgej1PLmNsb25lKCksTj10aGlzLEw9dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLFU9W107MCE9PXouY21wbigwKTt6Lml1c2hybigxKSlVLnB1c2goei5hbmRsbigxKSk7Zm9yKHZhciBXPVUubGVuZ3RoLTE7Vz49MDtXLS0pMD09PVVbV10/KE49Ti5kaWZmQWRk''@;'; put 'put ''KEwsdGhpcyksTD1MLmRibCgpKTooTD1OLmRpZmZBZGQoTCx0aGlzKSxOPU4uZGJsKCkpO3JldHVybiBMfSxQLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5qdW1sQWRk''@;'; put 'put ''PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTyl7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAoTy5nZXRYKCkpfSxQLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LFAucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sNjgwNzU6KHVlLFgseSk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9eSgzMTM2KSxfPXkoODg3MjMpLGc9eSg3MTk5MyksQj15KDk4ODI4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAoeil7Qi5jYWxsKHRoaXMsInNob3J0Iix6KSx0aGlzLmE9bmV3IF8oei5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBfKHouYiwxNikudG9S''@;'; put 'put ''ZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhp''@;'; put 'put ''c20oeiksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gRih6LE4sTCxLKXtCLkJhc2VQb2ludC5jYWxsKHRoaXMseiwiYWZmaW5lIiksbnVsbD09PU4mJm51bGw9PT1MPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0''@;'; put 'put ''aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgXyhOLDE2KSx0aGlzLnk9bmV3IF8oTCwxNiksSyYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5y''@;'; put 'put ''ZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBPKHosTixMLEspe0IuQmFzZVBvaW50LmNhbGwodGhpcyx6LCJqYWNvYmlhbiIpLG51bGw9PT1OJiZudWxsPT09TCYmbnVsbD09PUs/KHRoaXMueD10aGlz''@;'; put 'put ''LmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBfKDApKToodGhpcy54PW5ldyBfKE4sMTYpLHRoaXMueT1uZXcgXyhMLDE2KSx0aGlzLno9bmV3IF8oSywxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55''@;'; put 'put ''LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1nKFAsQiksdWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLl9nZXRF''@;'; put 'put ''bmRvbW9ycGhpc209ZnVuY3Rpb24oTil7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIEwsSztpZihOLmJldGEpTD1uZXcgXyhOLmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBVPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnAp''@;'; put 'put ''O0w9KEw9VVswXS5jbXAoVVsxXSk8MD9VWzBdOlVbMV0pLnRvUmVkKHRoaXMucmVkKX1pZihOLmxhbWJkYSlLPW5ldyBfKE4ubGFtYmRhLDE2KTtlbHNle3ZhciBXPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKFdbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChM''@;'; put 'put ''KSk/Sz1XWzBdOncoMD09PXRoaXMuZy5tdWwoSz1XWzFdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTCkpKX1yZXR1cm57YmV0YTpMLGxhbWJkYTpLLGJhc2lzOk4uYmFzaXM/Ti5iYXNpcy5tYXAoZnVuY3Rpb24ocSl7cmV0dXJue2E6bmV3IF8ocS5hLDE2KSxiOm5ldyBfKHEuYiwxNil9fSk6''@;'; put 'put ''dGhpcy5fZ2V0RW5kb0Jhc2lzKEspfX19LFAucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24oTil7dmFyIEw9Tj09PXRoaXMucD90aGlzLnJlZDpfLm1vbnQoTiksSz1uZXcgXygyKS50b1JlZChMKS5yZWRJbnZtKCksVT1LLnJlZE5lZygpLFc9bmV3IF8oMykudG9SZWQoTCkucmVk''@;'; put 'put ''TmVnKCkucmVkU3FydCgpLnJlZE11bChLKTtyZXR1cm5bVS5yZWRBZGQoVykuZnJvbVJlZCgpLFUucmVkU3ViKFcpLmZyb21SZWQoKV19LFAucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24oTil7Zm9yKHZhciBKLG5lLGllLGxlLG1lLF9lLFRlLGplLFYsTD10aGlzLm4udXNocm4o''@;'; put 'put ''TWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLEs9TixVPXRoaXMubi5jbG9uZSgpLFc9bmV3IF8oMSksWT1uZXcgXygwKSxxPW5ldyBfKDApLGVlPW5ldyBfKDEpLFNlPTA7MCE9PUsuY21wbigwKTspe3ZhciBwPVUuZGl2KEspO2plPVUuc3ViKHAubXVsKEspKSxWPXEuc3ViKHAu''@;'; put 'put ''bXVsKFcpKTt2YXIgYj1lZS5zdWIocC5tdWwoWSkpO2lmKCFpZSYmamUuY21wKEwpPDApSj1UZS5uZWcoKSxuZT1XLGllPWplLm5lZygpLGxlPVY7ZWxzZSBpZihpZSYmMj09KytTZSlicmVhaztUZT1qZSxVPUssSz1qZSxxPVcsVz1WLGVlPVksWT1ifW1lPWplLm5lZygpLF9lPVY7dmFyIHg9''@;'; put 'put ''aWUuc3FyKCkuYWRkKGxlLnNxcigpKTtyZXR1cm4gbWUuc3FyKCkuYWRkKF9lLnNxcigpKS5jbXAoeCk+PTAmJihtZT1KLF9lPW5lKSxpZS5uZWdhdGl2ZSYmKGllPWllLm5lZygpLGxlPWxlLm5lZygpKSxtZS5uZWdhdGl2ZSYmKG1lPW1lLm5lZygpLF9lPV9lLm5lZygpKSxbe2E6aWUsYjps''@;'; put 'put ''ZX0se2E6bWUsYjpfZX1dfSxQLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuZW5kby5iYXNpcyxLPUxbMF0sVT1MWzFdLFc9VS5iLm11bChOKS5kaXZSb3VuZCh0aGlzLm4pLFk9Sy5iLm5lZygpLm11bChOKS5kaXZSb3VuZCh0aGlzLm4pLHE9Vy5tdWwoSy5h''@;'; put 'put ''KSxlZT1ZLm11bChVLmEpLEo9Vy5tdWwoSy5iKSxuZT1ZLm11bChVLmIpO3JldHVybntrMTpOLnN1YihxKS5zdWIoZWUpLGsyOkouYWRkKG5lKS5uZWcoKX19LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oTixMKXsoTj1uZXcgXyhOLDE2KSkucmVkfHwoTj1OLnRvUmVkKHRoaXMu''@;'; put 'put ''cmVkKSk7dmFyIEs9Ti5yZWRTcXIoKS5yZWRNdWwoTikucmVkSUFkZChOLnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksVT1LLnJlZFNxcnQoKTtpZigwIT09VS5yZWRTcXIoKS5yZWRTdWIoSykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7''@;'; put 'put ''dmFyIFc9VS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oTCYmIVd8fCFMJiZXKSYmKFU9VS5yZWROZWcoKSksdGhpcy5wb2ludChOLFUpfSxQLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihOKXtpZihOLmluZilyZXR1cm4hMDt2YXIgTD1OLngsSz1OLnksVT10aGlzLmEucmVkTXVsKEwp''@;'; put 'put ''LFc9TC5yZWRTcXIoKS5yZWRNdWwoTCkucmVkSUFkZChVKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1LLnJlZFNxcigpLnJlZElTdWIoVykuY21wbigwKX0sUC5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXtmb3IodmFyIFU9dGhpcy5fZW5kb1duYWZUMSxX''@;'; put 'put ''PXRoaXMuX2VuZG9XbmFmVDIsWT0wO1k8Ti5sZW5ndGg7WSsrKXt2YXIgcT10aGlzLl9lbmRvU3BsaXQoTFtZXSksZWU9TltZXSxKPWVlLl9nZXRCZXRhKCk7cS5rMS5uZWdhdGl2ZSYmKHEuazEuaW5lZygpLGVlPWVlLm5lZyghMCkpLHEuazIubmVnYXRpdmUmJihxLmsyLmluZWcoKSxKPUou''@;'; put 'put ''bmVnKCEwKSksVVsyKlldPWVlLFVbMipZKzFdPUosV1syKlldPXEuazEsV1syKlkrMV09cS5rMn1mb3IodmFyIG5lPXRoaXMuX3duYWZNdWxBZGQoMSxVLFcsMipZLEspLGllPTA7aWU8MipZO2llKyspVVtpZV09bnVsbCxXW2llXT1udWxsO3JldHVybiBuZX0sZyhGLEIuQmFzZVBvaW50KSxQ''@;'; put 'put ''LnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihOLEwsSyl7cmV0dXJuIG5ldyBGKHRoaXMsTixMLEspfSxQLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKE4sTCl7cmV0dXJuIEYuZnJvbUpTT04odGhpcyxOLEwpfSxGLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRo''@;'; put 'put ''aXMuY3VydmUuZW5kbyl7dmFyIE49dGhpcy5wcmVjb21wdXRlZDtpZihOJiZOLmJldGEpcmV0dXJuIE4uYmV0YTt2YXIgTD10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoTil7dmFyIEs9dGhpcy5jdXJ2ZSxVPWZ1bmN0aW9u''@;'; put 'put ''KFcpe3JldHVybiBLLnBvaW50KFcueC5yZWRNdWwoSy5lbmRvLmJldGEpLFcueSl9O04uYmV0YT1MLEwucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6Ti5uYWYmJnt3bmQ6Ti5uYWYud25kLHBvaW50czpOLm5hZi5wb2ludHMubWFwKFUpfSxkb3VibGVzOk4uZG91YmxlcyYme3N0ZXA6Ti5k''@;'; put 'put ''b3VibGVzLnN0ZXAscG9pbnRzOk4uZG91Ymxlcy5wb2ludHMubWFwKFUpfX19cmV0dXJuIEx9fSxGLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1''@;'; put 'put ''dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlz''@;'; put 'put ''LnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxGLmZyb21KU09OPWZ1bmN0aW9uKE4sTCxLKXsic3RyaW5nIj09dHlwZW9mIEwmJihMPUpTT04ucGFyc2UoTCkpO3ZhciBVPU4ucG9pbnQoTFswXSxMWzFdLEspO2lmKCFMWzJdKXJldHVybiBVO2Z1''@;'; put 'put ''bmN0aW9uIFcocSl7cmV0dXJuIE4ucG9pbnQocVswXSxxWzFdLEspfXZhciBZPUxbMl07cmV0dXJuIFUucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOlkuZG91YmxlcyYme3N0ZXA6WS5kb3VibGVzLnN0ZXAscG9pbnRzOltVXS5jb25jYXQoWS5kb3VibGVzLnBvaW50cy5tYXAoVykp''@;'; put 'put ''fSxuYWY6WS5uYWYmJnt3bmQ6WS5uYWYud25kLHBvaW50czpbVV0uY29uY2F0KFkubmFmLnBvaW50cy5tYXAoVykpfX0sVX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAi''@;'; put 'put ''K3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxGLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTil7aWYodGhpcy5p''@;'; put 'put ''bmYpcmV0dXJuIE47aWYoTi5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShOKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKE4pKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoTi54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2lu''@;'; put 'put ''dChudWxsLG51bGwpO3ZhciBMPXRoaXMueS5yZWRTdWIoTi55KTswIT09TC5jbXBuKDApJiYoTD1MLnJlZE11bCh0aGlzLngucmVkU3ViKE4ueCkucmVkSW52bSgpKSk7dmFyIEs9TC5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihOLngpLFU9TC5yZWRNdWwodGhpcy54LnJlZFN1''@;'; put 'put ''YihLKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSl9LEYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBOPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09Ti5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZl''@;'; put 'put ''LnBvaW50KG51bGwsbnVsbCk7dmFyIEw9dGhpcy5jdXJ2ZS5hLEs9dGhpcy54LnJlZFNxcigpLFU9Ti5yZWRJbnZtKCksVz1LLnJlZEFkZChLKS5yZWRJQWRkKEspLnJlZElBZGQoTCkucmVkTXVsKFUpLFk9Vy5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSkscT1XLnJl''@;'; put 'put ''ZE11bCh0aGlzLngucmVkU3ViKFkpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWSxxKX0sRi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5m''@;'; put 'put ''cm9tUmVkKCl9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbihOKXtyZXR1cm4gTj1uZXcgXyhOLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hhc0RvdWJsZXMoTik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxOKTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5k''@;'; put 'put ''b1duYWZNdWxBZGQoW3RoaXNdLFtOXSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLE4pfSxGLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oTixMLEspe3ZhciBVPVt0aGlzLExdLFc9W04sS107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChVLFcp''@;'; put 'put ''OnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxVLFcsMil9LEYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oTixMLEspe3ZhciBVPVt0aGlzLExdLFc9W04sS107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChVLFcsITApOnRoaXMuY3VydmUuX3du''@;'; put 'put ''YWZNdWxBZGQoMSxVLFcsMiwhMCl9LEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzPT09Tnx8dGhpcy5pbmY9PT1OLmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcChOLngpJiYwPT09dGhpcy55LmNtcChOLnkpKX0sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKE4p''@;'; put 'put ''e2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYoTiYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIEs9dGhpcy5wcmVjb21wdXRlZCxVPWZ1bmN0aW9uKFcpe3JldHVybiBXLm5lZygpfTtMLnByZWNvbXB1dGVkPXtu''@;'; put 'put ''YWY6Sy5uYWYmJnt3bmQ6Sy5uYWYud25kLHBvaW50czpLLm5hZi5wb2ludHMubWFwKFUpfSxkb3VibGVzOksuZG91YmxlcyYme3N0ZXA6Sy5kb3VibGVzLnN0ZXAscG9pbnRzOksuZG91Ymxlcy5wb2ludHMubWFwKFUpfX19cmV0dXJuIEx9LEYucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmluZj90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSl9LGcoTyxCLkJhc2VQb2ludCksUC5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKE4sTCxLKXtyZXR1cm4gbmV3IE8odGhp''@;'; put 'put ''cyxOLEwsSyl9LE8ucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIE49dGhpcy56LnJlZEludm0oKSxMPU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKEwpLFU9dGhpcy55LnJlZE11bChM''@;'; put 'put ''KS5yZWRNdWwoTik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSyxVKX0sTy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sTy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaXNJ''@;'; put 'put ''bmZpbml0eSgpKXJldHVybiBOO2lmKE4uaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBMPU4uei5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxVPXRoaXMueC5yZWRNdWwoTCksVz1OLngucmVkTXVsKEspLFk9dGhpcy55LnJlZE11bChMLnJlZE11bChOLnopKSxxPU4ueS5yZWRNdWwo''@;'; put 'put ''Sy5yZWRNdWwodGhpcy56KSksZWU9VS5yZWRTdWIoVyksSj1ZLnJlZFN1YihxKTtpZigwPT09ZWUuY21wbigwKSlyZXR1cm4gMCE9PUouY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgbmU9ZWUucmVkU3FyKCksaWU9bmUucmVkTXVsKGVl''@;'; put 'put ''KSxsZT1VLnJlZE11bChuZSksbWU9Si5yZWRTcXIoKS5yZWRJQWRkKGllKS5yZWRJU3ViKGxlKS5yZWRJU3ViKGxlKSxfZT1KLnJlZE11bChsZS5yZWRJU3ViKG1lKSkucmVkSVN1YihZLnJlZE11bChpZSkpLFRlPXRoaXMuei5yZWRNdWwoTi56KS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1''@;'; put 'put ''cnZlLmpwb2ludChtZSxfZSxUZSl9LE8ucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBOLnRvSigpO2lmKE4uaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPXRoaXMueCxVPU4ueC5yZWRNdWwo''@;'; put 'put ''TCksVz10aGlzLnksWT1OLnkucmVkTXVsKEwpLnJlZE11bCh0aGlzLnopLHE9Sy5yZWRTdWIoVSksZWU9Vy5yZWRTdWIoWSk7aWYoMD09PXEuY21wbigwKSlyZXR1cm4gMCE9PWVlLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIEo9cS5y''@;'; put 'put ''ZWRTcXIoKSxuZT1KLnJlZE11bChxKSxpZT1LLnJlZE11bChKKSxsZT1lZS5yZWRTcXIoKS5yZWRJQWRkKG5lKS5yZWRJU3ViKGllKS5yZWRJU3ViKGllKSxtZT1lZS5yZWRNdWwoaWUucmVkSVN1YihsZSkpLnJlZElTdWIoVy5yZWRNdWwobmUpKSxfZT10aGlzLnoucmVkTXVsKHEpO3JldHVy''@;'; put 'put ''biB0aGlzLmN1cnZlLmpwb2ludChsZSxtZSxfZSl9LE8ucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oTil7aWYoMD09PU4pcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIU4pcmV0dXJuIHRoaXMuZGJsKCk7dmFyIEw7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8''@;'; put 'put ''dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciBLPXRoaXM7Zm9yKEw9MDtMPE47TCsrKUs9Sy5kYmwoKTtyZXR1cm4gS312YXIgVT10aGlzLmN1cnZlLmEsVz10aGlzLmN1cnZlLnRpbnYsWT10aGlzLngscT10aGlzLnksZWU9dGhpcy56LEo9ZWUucmVkU3FyKCkucmVkU3FyKCksbmU9cS5yZWRBZGQo''@;'; put 'put ''cSk7Zm9yKEw9MDtMPE47TCsrKXt2YXIgaWU9WS5yZWRTcXIoKSxsZT1uZS5yZWRTcXIoKSxtZT1sZS5yZWRTcXIoKSxfZT1pZS5yZWRBZGQoaWUpLnJlZElBZGQoaWUpLnJlZElBZGQoVS5yZWRNdWwoSikpLFRlPVkucmVkTXVsKGxlKSxTZT1fZS5yZWRTcXIoKS5yZWRJU3ViKFRlLnJlZEFk''@;'; put 'put ''ZChUZSkpLGplPVRlLnJlZElTdWIoU2UpLFY9X2UucmVkTXVsKGplKTtWPVYucmVkSUFkZChWKS5yZWRJU3ViKG1lKTt2YXIgcD1uZS5yZWRNdWwoZWUpO0wrMTxOJiYoSj1KLnJlZE11bChtZSkpLFk9U2UsZWU9cCxuZT1WfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChZLG5lLnJlZE11bChX''@;'; put 'put ''KSxlZSl9LE8ucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LE8ucHJvdG90eXBlLl96ZXJvRGJs''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIE4sTCxLO2lmKHRoaXMuek9uZSl7dmFyIFU9dGhpcy54LnJlZFNxcigpLFc9dGhpcy55LnJlZFNxcigpLFk9Vy5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoVykucmVkU3FyKCkucmVkSVN1YihVKS5yZWRJU3ViKFkpO3E9cS5yZWRJQWRkKHEpO3ZhciBlZT1VLnJl''@;'; put 'put ''ZEFkZChVKS5yZWRJQWRkKFUpLEo9ZWUucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHEpLG5lPVkucmVkSUFkZChZKTtuZT0obmU9bmUucmVkSUFkZChuZSkpLnJlZElBZGQobmUpLE49SixMPWVlLnJlZE11bChxLnJlZElTdWIoSikpLnJlZElTdWIobmUpLEs9dGhpcy55LnJlZEFkZCh0''@;'; put 'put ''aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMueC5yZWRTcXIoKSxsZT10aGlzLnkucmVkU3FyKCksbWU9bGUucmVkU3FyKCksX2U9dGhpcy54LnJlZEFkZChsZSkucmVkU3FyKCkucmVkSVN1YihpZSkucmVkSVN1YihtZSk7X2U9X2UucmVkSUFkZChfZSk7dmFyIFRlPWllLnJlZEFkZChpZSkucmVk''@;'; put 'put ''SUFkZChpZSksU2U9VGUucmVkU3FyKCksamU9bWUucmVkSUFkZChtZSk7amU9KGplPWplLnJlZElBZGQoamUpKS5yZWRJQWRkKGplKSxOPVNlLnJlZElTdWIoX2UpLnJlZElTdWIoX2UpLEw9VGUucmVkTXVsKF9lLnJlZElTdWIoTikpLnJlZElTdWIoamUpLEs9KEs9dGhpcy55LnJlZE11bCh0''@;'; put 'put ''aGlzLnopKS5yZWRJQWRkKEspfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChOLEwsSyl9LE8ucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBOLEwsSztpZih0aGlzLnpPbmUpe3ZhciBVPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxZPVcucmVkU3FyKCkscT10''@;'; put 'put ''aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElTdWIoVSkucmVkSVN1YihZKTtxPXEucmVkSUFkZChxKTt2YXIgZWU9VS5yZWRBZGQoVSkucmVkSUFkZChVKS5yZWRJQWRkKHRoaXMuY3VydmUuYSksSj1lZS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIocSk7Tj1KO3ZhciBuZT1ZLnJl''@;'; put 'put ''ZElBZGQoWSk7bmU9KG5lPW5lLnJlZElBZGQobmUpKS5yZWRJQWRkKG5lKSxMPWVlLnJlZE11bChxLnJlZElTdWIoSikpLnJlZElTdWIobmUpLEs9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMuei5yZWRTcXIoKSxsZT10aGlzLnkucmVkU3FyKCksbWU9dGhpcy54LnJl''@;'; put 'put ''ZE11bChsZSksX2U9dGhpcy54LnJlZFN1YihpZSkucmVkTXVsKHRoaXMueC5yZWRBZGQoaWUpKTtfZT1fZS5yZWRBZGQoX2UpLnJlZElBZGQoX2UpO3ZhciBUZT1tZS5yZWRJQWRkKG1lKSxTZT0oVGU9VGUucmVkSUFkZChUZSkpLnJlZEFkZChUZSk7Tj1fZS5yZWRTcXIoKS5yZWRJU3ViKFNl''@;'; put 'put ''KSxLPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGxlKS5yZWRJU3ViKGllKTt2YXIgamU9bGUucmVkU3FyKCk7amU9KGplPShqZT1qZS5yZWRJQWRkKGplKSkucmVkSUFkZChqZSkpLnJlZElBZGQoamUpLEw9X2UucmVkTXVsKFRlLnJlZElTdWIoTikpLnJlZElTdWIo''@;'; put 'put ''amUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChOLEwsSyl9LE8ucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLmN1cnZlLmEsTD10aGlzLngsSz10aGlzLnksVT10aGlzLnosVz1VLnJlZFNxcigpLnJlZFNxcigpLFk9TC5yZWRTcXIoKSxxPUsucmVkU3FyKCksZWU9WS5y''@;'; put 'put ''ZWRBZGQoWSkucmVkSUFkZChZKS5yZWRJQWRkKE4ucmVkTXVsKFcpKSxKPUwucmVkQWRkKEwpLG5lPShKPUoucmVkSUFkZChKKSkucmVkTXVsKHEpLGllPWVlLnJlZFNxcigpLnJlZElTdWIobmUucmVkQWRkKG5lKSksbGU9bmUucmVkSVN1YihpZSksbWU9cS5yZWRTcXIoKTttZT0obWU9KG1l''@;'; put 'put ''PW1lLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSk7dmFyIF9lPWVlLnJlZE11bChsZSkucmVkSVN1YihtZSksVGU9Sy5yZWRBZGQoSykucmVkTXVsKFUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChpZSxfZSxUZSl9LE8ucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtp''@;'; put 'put ''ZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIE49dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpLEs9dGhpcy56LnJlZFNxcigpLFU9TC5yZWRTcXIoKSxXPU4ucmVkQWRkKE4pLnJlZElBZGQoTiksWT1XLnJlZFNxcigpLHE9dGhpcy54''@;'; put 'put ''LnJlZEFkZChMKS5yZWRTcXIoKS5yZWRJU3ViKE4pLnJlZElTdWIoVSksZWU9KHE9KHE9KHE9cS5yZWRJQWRkKHEpKS5yZWRBZGQocSkucmVkSUFkZChxKSkucmVkSVN1YihZKSkucmVkU3FyKCksSj1VLnJlZElBZGQoVSk7Sj0oSj0oSj1KLnJlZElBZGQoSikpLnJlZElBZGQoSikpLnJlZElB''@;'; put 'put ''ZGQoSik7dmFyIG5lPVcucmVkSUFkZChxKS5yZWRTcXIoKS5yZWRJU3ViKFkpLnJlZElTdWIoZWUpLnJlZElTdWIoSiksaWU9TC5yZWRNdWwobmUpO2llPShpZT1pZS5yZWRJQWRkKGllKSkucmVkSUFkZChpZSk7dmFyIGxlPXRoaXMueC5yZWRNdWwoZWUpLnJlZElTdWIoaWUpO2xlPShsZT1s''@;'; put 'put ''ZS5yZWRJQWRkKGxlKSkucmVkSUFkZChsZSk7dmFyIG1lPXRoaXMueS5yZWRNdWwobmUucmVkTXVsKEoucmVkSVN1YihuZSkpLnJlZElTdWIocS5yZWRNdWwoZWUpKSk7bWU9KG1lPShtZT1tZS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSkpLnJlZElBZGQobWUpO3ZhciBfZT10aGlzLnoucmVk''@;'; put 'put ''QWRkKHEpLnJlZFNxcigpLnJlZElTdWIoSykucmVkSVN1YihlZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGxlLG1lLF9lKX0sTy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE4sTCl7cmV0dXJuIE49bmV3IF8oTixMKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsTil9LE8ucHJvdG90eXBl''@;'; put 'put ''LmVxPWZ1bmN0aW9uKE4pe2lmKCJhZmZpbmUiPT09Ti50eXBlKXJldHVybiB0aGlzLmVxKE4udG9KKCkpO2lmKHRoaXM9PT1OKXJldHVybiEwO3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPU4uei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChLKS5yZWRJU3ViKE4ueC5yZWRNdWwoTCkp''@;'; put 'put ''LmNtcG4oMCkpcmV0dXJuITE7dmFyIFU9TC5yZWRNdWwodGhpcy56KSxXPUsucmVkTXVsKE4ueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKFcpLnJlZElTdWIoTi55LnJlZE11bChVKSkuY21wbigwKX0sTy5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuei5yZWRT''@;'; put 'put ''cXIoKSxLPU4udG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChMKTtpZigwPT09dGhpcy54LmNtcChLKSlyZXR1cm4hMDtmb3IodmFyIFU9Ti5jbG9uZSgpLFc9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChMKTs7KXtpZihVLmlhZGQodGhpcy5jdXJ2ZS5uKSxVLmNtcCh0aGlzLmN1cnZlLnAp''@;'; put 'put ''Pj0wKXJldHVybiExO2lmKEsucmVkSUFkZChXKSwwPT09dGhpcy54LmNtcChLKSlyZXR1cm4hMH19LE8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0''@;'; put 'put ''cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxPLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDIzNDAxOih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBPLEk9WCxfPXkoNTI1MjkpLGc9eSg4NzI5KSx3PXkoMzEzNikuYXNzZXJ0O2Z1bmN0aW9uIFAoeil7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09ei50eXBlP25ldyBnLnNob3J0KHopOiJlZHdhcmRzIj09PXoudHlwZT9uZXcgZy5lZHdhcmRzKHopOm5ldyBnLm1vbnQoeiksdGhpcy5nPXRo''@;'; put 'put ''aXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD16Lmhhc2gsdyh0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLHcodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5jdGlvbiBGKHosTil7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KEkseix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIEw9bmV3IFAoTik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOkx9KSxMfX0pfUku''@;'; put 'put ''UHJlc2V0Q3VydmU9UCxGKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMi''@;'; put 'put ''LGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgwZSBiMDMwOTBmNiA3Y2Jm''@;'; put 'put ''MjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxGKCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0Iixu''@;'; put 'put ''OiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMSIsImJkMzc2Mzg4''@;'; put 'put ''IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0Il19KSxGKCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YiIsbjoiZmZmZmZm''@;'; put 'put ''ZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTYi''@;'; put 'put ''LCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksRigicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZm''@;'; put 'put ''ZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOl8uc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1''@;'; put 'put ''MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLEYoInA1MjEiLHt0eXBlOiJz''@;'; put 'put ''aG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMi''@;'; put 'put ''LGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwIixuOiIwMDAw''@;'; put 'put ''MDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOSIsaGFzaDpfLnNoYTUxMixn''@;'; put 'put ''UmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NiIs''@;'; put 'put ''IjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwIl19KSxGKCJjdXJ2''@;'; put 'put ''ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRl''@;'; put 'put ''ZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiOSJdfSksRigiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVk''@;'; put 'put ''M2VkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4Il19''@;'; put 'put ''KTt0cnl7Tz15KDUxNDE2KX1jYXRjaHtPPXZvaWQgMH1GKCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpfLnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixs''@;'; put 'put ''YW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRj''@;'; put 'put ''YTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1''@;'; put 'put ''NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4IixPXX0pfSwyOTA0MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg4NzIzKSxfPXkoMzM1NTYpLGc9eSgzMTM2KSxCPXkoMjM0MDEpLHc9eSgzNTI5NCksUD1nLmFzc2VydCxGPXkoNjA1NDEp''@;'; put 'put ''LE89eSg0MDQ4NCk7ZnVuY3Rpb24geihOKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooTik7InN0cmluZyI9PXR5cGVvZiBOJiYoUChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQixOKSwiVW5rbm93biBjdXJ2ZSAiK04pLE49QltOXSksTiBpbnN0''@;'; put 'put ''YW5jZW9mIEIuUHJlc2V0Q3VydmUmJihOPXtjdXJ2ZTpOfSksdGhpcy5jdXJ2ZT1OLmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9Ti5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKE4uY3Vy''@;'; put 'put ''dmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9Ti5oYXNofHxOLmN1cnZlLmhhc2h9dWUuZXhwb3J0cz16LHoucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyBGKHRoaXMsTCl9LHoucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKEwsSyl7cmV0dXJu''@;'; put 'put ''IEYuZnJvbVByaXZhdGUodGhpcyxMLEspfSx6LnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEYuZnJvbVB1YmxpYyh0aGlzLEwsSyl9LHoucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oTCl7THx8KEw9e30pO2Zvcih2YXIgSz1uZXcgXyh7aGFzaDp0''@;'; put 'put ''aGlzLmhhc2gscGVyczpMLnBlcnMscGVyc0VuYzpMLnBlcnNFbmN8fCJ1dGY4IixlbnRyb3B5OkwuZW50cm9weXx8dyh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOkwuZW50cm9weSYmTC5lbnRyb3B5RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLFU9dGhp''@;'; put 'put ''cy5uLmJ5dGVMZW5ndGgoKSxXPXRoaXMubi5zdWIobmV3IEkoMikpOzspe3ZhciBZPW5ldyBJKEsuZ2VuZXJhdGUoVSkpO2lmKCEoWS5jbXAoVyk+MCkpcmV0dXJuIFkuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShZKX19LHoucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihM''@;'; put 'put ''LEssVSl7dmFyIFc7aWYoSS5pc0JOKEwpfHwibnVtYmVyIj09dHlwZW9mIEwpVz0oTD1uZXcgSShMLDE2KSkuYnl0ZUxlbmd0aCgpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBMKVc9TC5sZW5ndGgsTD1uZXcgSShMLDE2KTtlbHNle3ZhciBZPUwudG9TdHJpbmcoKTtXPVkubGVuZ3RoKzE+''@;'; put 'put ''Pj4xLEw9bmV3IEkoWSwxNil9Im51bWJlciIhPXR5cGVvZiBVJiYoVT04KlcpO3ZhciBxPVUtdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBxPjAmJihMPUwudXNocm4ocSkpLCFLJiZMLmNtcCh0aGlzLm4pPj0wP0wuc3ViKHRoaXMubik6TH0sei5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihM''@;'; put 'put ''LEssVSxXKXtpZigib2JqZWN0Ij09dHlwZW9mIFUmJihXPVUsVT1udWxsKSxXfHwoVz17fSksInN0cmluZyIhPXR5cGVvZiBMJiYibnVtYmVyIiE9dHlwZW9mIEwmJiFJLmlzQk4oTCkpe1AoIm9iamVjdCI9PXR5cGVvZiBMJiZMJiYibnVtYmVyIj09dHlwZW9mIEwubGVuZ3RoLCJFeHBlY3Rl''@;'; put 'put ''ZCBtZXNzYWdlIHRvIGJlIGFuIGFycmF5LWxpa2UsIGEgaGV4IHN0cmluZywgb3IgYSBCTiBpbnN0YW5jZSIpLFAoTC5sZW5ndGg+Pj4wPT09TC5sZW5ndGgpO2Zvcih2YXIgWT0wO1k8TC5sZW5ndGg7WSsrKVAoKDI1NSZMW1ldKT09PUxbWV0pfUs9dGhpcy5rZXlGcm9tUHJpdmF0ZShLLFUp''@;'; put 'put ''LEw9dGhpcy5fdHJ1bmNhdGVUb04oTCwhMSxXLm1zZ0JpdExlbmd0aCksUCghTC5pc05lZygpLCJDYW4gbm90IHNpZ24gYSBuZWdhdGl2ZSBtZXNzYWdlIik7dmFyIHE9dGhpcy5uLmJ5dGVMZW5ndGgoKSxlZT1LLmdldFByaXZhdGUoKS50b0FycmF5KCJiZSIscSksSj1MLnRvQXJyYXkoImJl''@;'; put 'put ''IixxKTtQKG5ldyBJKEopLmVxKEwpLCJDYW4gbm90IHNpZ24gbWVzc2FnZSIpO2Zvcih2YXIgbmU9bmV3IF8oe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6ZWUsbm9uY2U6SixwZXJzOlcucGVycyxwZXJzRW5jOlcucGVyc0VuY3x8InV0ZjgifSksaWU9dGhpcy5uLnN1YihuZXcgSSgxKSksbGU9''@;'; put 'put ''MDs7bGUrKyl7dmFyIG1lPVcuaz9XLmsobGUpOm5ldyBJKG5lLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKChtZT10aGlzLl90cnVuY2F0ZVRvTihtZSwhMCkpLmNtcG4oMSk8PTB8fG1lLmNtcChpZSk+PTApKXt2YXIgX2U9dGhpcy5nLm11bChtZSk7aWYoIV9lLmlzSW5m''@;'; put 'put ''aW5pdHkoKSl7dmFyIFRlPV9lLmdldFgoKSxTZT1UZS51bW9kKHRoaXMubik7aWYoMCE9PVNlLmNtcG4oMCkpe3ZhciBqZT1tZS5pbnZtKHRoaXMubikubXVsKFNlLm11bChLLmdldFByaXZhdGUoKSkuaWFkZChMKSk7aWYoMCE9PShqZT1qZS51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBW''@;'; put 'put ''PShfZS5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09VGUuY21wKFNlKT8yOjApO3JldHVybiBXLmNhbm9uaWNhbCYmamUuY21wKHRoaXMubmgpPjAmJihqZT10aGlzLm4uc3ViKGplKSxWXj0xKSxuZXcgTyh7cjpTZSxzOmplLHJlY292ZXJ5UGFyYW06Vn0pfX19fX19LHoucHJvdG90eXBlLnZl''@;'; put 'put ''cmlmeT1mdW5jdGlvbihMLEssVSxXLFkpe1l8fChZPXt9KSxMPXRoaXMuX3RydW5jYXRlVG9OKEwsITEsWS5tc2dCaXRMZW5ndGgpLFU9dGhpcy5rZXlGcm9tUHVibGljKFUsVyk7dmFyIHE9KEs9bmV3IE8oSywiaGV4IikpLnIsZWU9Sy5zO2lmKHEuY21wbigxKTwwfHxxLmNtcCh0aGlzLm4p''@;'; put 'put ''Pj0wfHxlZS5jbXBuKDEpPDB8fGVlLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBsZSxKPWVlLmludm0odGhpcy5uKSxuZT1KLm11bChMKS51bW9kKHRoaXMubiksaWU9Si5tdWwocSkudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShsZT10aGlzLmcu''@;'; put 'put ''am11bEFkZChuZSxVLmdldFB1YmxpYygpLGllKSkuaXNJbmZpbml0eSgpJiZsZS5lcVhUb1AocSk6IShsZT10aGlzLmcubXVsQWRkKG5lLFUuZ2V0UHVibGljKCksaWUpKS5pc0luZmluaXR5KCkmJjA9PT1sZS5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChxKX0sei5wcm90b3R5cGUucmVjb3Zl''@;'; put 'put ''clB1YktleT1mdW5jdGlvbihOLEwsSyxVKXtQKCgzJkspPT09SywiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLEw9bmV3IE8oTCxVKTt2YXIgVz10aGlzLm4sWT1uZXcgSShOKSxxPUwucixlZT1MLnMsSj0xJkssbmU9Sz4+MTtpZihxLmNtcCh0aGlzLmN1cnZl''@;'; put 'put ''LnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmbmUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtxPXRoaXMuY3VydmUucG9pbnRGcm9tWChuZT9xLmFkZCh0aGlzLmN1cnZlLm4pOnEsSik7dmFyIGllPUwuci5pbnZtKFcpLGxlPVcuc3Vi''@;'; put 'put ''KFkpLm11bChpZSkudW1vZChXKSxtZT1lZS5tdWwoaWUpLnVtb2QoVyk7cmV0dXJuIHRoaXMuZy5tdWxBZGQobGUscSxtZSl9LHoucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oTixMLEssVSl7aWYobnVsbCE9PShMPW5ldyBPKEwsVSkpLnJlY292ZXJ5UGFyYW0pcmV0''@;'; put 'put ''dXJuIEwucmVjb3ZlcnlQYXJhbTtmb3IodmFyIFc9MDtXPDQ7VysrKXt2YXIgWTt0cnl7WT10aGlzLnJlY292ZXJQdWJLZXkoTixMLFcpfWNhdGNoe2NvbnRpbnVlfWlmKFkuZXEoSykpcmV0dXJuIFd9dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0''@;'; put 'put ''b3IiKX19LDYwNTQxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODg3MjMpLGc9eSgzMTM2KS5hc3NlcnQ7ZnVuY3Rpb24gQih3LFApe3RoaXMuZWM9dyx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLFAucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShQLnByaXYsUC5wcml2''@;'; put 'put ''RW5jKSxQLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKFAucHViLFAucHViRW5jKX11ZS5leHBvcnRzPUIsQi5mcm9tUHVibGljPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihQLHtwdWI6RixwdWJFbmM6T30pfSxCLmZyb21Qcml2YXRlPWZ1bmN0aW9uKFAs''@;'; put 'put ''RixPKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihQLHtwcml2OkYscHJpdkVuYzpPfSl9LEIucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gUC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVi''@;'; put 'put ''bGljIGtleSJ9OlAudmFsaWRhdGUoKT9QLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBv''@;'; put 'put ''aW50In19LEIucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihQLEYpe3JldHVybiJzdHJpbmciPT10eXBlb2YgUCYmKEY9UCxQPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxGP3RoaXMucHViLmVuY29kZShGLFApOnRoaXMucHVifSxCLnBy''@;'; put 'put ''b3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKFApe3JldHVybiJoZXgiPT09UD90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxCLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihQLEYpe3RoaXMucHJpdj1uZXcgSShQLEZ8fDE2KSx0aGlzLnByaXY9dGhpcy5w''@;'; put 'put ''cml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sQi5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbihQLEYpe2lmKFAueHx8UC55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9nKFAueCwiTmVlZCB4IGNvb3JkaW5hdGUiKTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUu''@;'; put 'put ''dHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmZyhQLngmJlAueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChQLngsUC55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChQLEYp''@;'; put 'put ''fSxCLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oUCl7cmV0dXJuIFAudmFsaWRhdGUoKXx8ZyhQLnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksUC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LEIucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0''@;'; put 'put ''aGlzLmVjLnNpZ24oUCx0aGlzLEYsTyl9LEIucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KFAsRix0aGlzLHZvaWQgMCxPKX0sQi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYm''@;'; put 'put ''dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LDQwNDg0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODg3MjMpLF89eSgzMTM2KSxnPV8uYXNzZXJ0O2Z1bmN0aW9uIEIoeixOKXtpZih6IGluc3Rh''@;'; put 'put ''bmNlb2YgQilyZXR1cm4gejt0aGlzLl9pbXBvcnRERVIoeixOKXx8KGcoei5yJiZ6LnMsIlNpZ25hdHVyZSB3aXRob3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgSSh6LnIsMTYpLHRoaXMucz1uZXcgSSh6LnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT16LnJlY292ZXJ5UGFyYW0/''@;'; put 'put ''bnVsbDp6LnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIHcoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gUCh6LE4pe3ZhciBMPXpbTi5wbGFjZSsrXTtpZighKDEyOCZMKSlyZXR1cm4gTDt2YXIgSz0xNSZMO2lmKDA9PT1LfHxLPjR8fDA9PT16W04ucGxhY2VdKXJldHVybiExO2Zvcih2YXIgVT0w''@;'; put 'put ''LFc9MCxZPU4ucGxhY2U7VzxLO1crKyxZKyspVTw8PTgsVXw9eltZXSxVPj4+PTA7cmV0dXJuIShVPD0xMjcpJiYoTi5wbGFjZT1ZLFUpfWZ1bmN0aW9uIEYoeil7Zm9yKHZhciBOPTAsTD16Lmxlbmd0aC0xOyF6W05dJiYhKDEyOCZ6W04rMV0pJiZOPEw7KU4rKztyZXR1cm4gMD09PU4/ejp6''@;'; put 'put ''LnNsaWNlKE4pfWZ1bmN0aW9uIE8oeixOKXtpZihOPDEyOCl6LnB1c2goTik7ZWxzZXt2YXIgTD0xKyhNYXRoLmxvZyhOKS9NYXRoLkxOMj4+PjMpO2Zvcih6LnB1c2goMTI4fEwpOy0tTDspei5wdXNoKE4+Pj4oTDw8MykmMjU1KTt6LnB1c2goTil9fXVlLmV4cG9ydHM9QixCLnByb3RvdHlw''@;'; put 'put ''ZS5faW1wb3J0REVSPWZ1bmN0aW9uKE4sTCl7Tj1fLnRvQXJyYXkoTixMKTt2YXIgSz1uZXcgdztpZig0OCE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgVT1QKE4sSyk7aWYoITE9PT1VfHxVK0sucGxhY2UhPT1OLmxlbmd0aHx8MiE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgVz1Q''@;'; put 'put ''KE4sSyk7aWYoITE9PT1XfHwxMjgmTltLLnBsYWNlXSlyZXR1cm4hMTt2YXIgWT1OLnNsaWNlKEsucGxhY2UsVytLLnBsYWNlKTtpZihLLnBsYWNlKz1XLDIhPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIHE9UChOLEspO2lmKCExPT09cXx8Ti5sZW5ndGghPT1xK0sucGxhY2V8fDEyOCZO''@;'; put 'put ''W0sucGxhY2VdKXJldHVybiExO3ZhciBlZT1OLnNsaWNlKEsucGxhY2UscStLLnBsYWNlKTtpZigwPT09WVswXSl7aWYoISgxMjgmWVsxXSkpcmV0dXJuITE7WT1ZLnNsaWNlKDEpfWlmKDA9PT1lZVswXSl7aWYoISgxMjgmZWVbMV0pKXJldHVybiExO2VlPWVlLnNsaWNlKDEpfXJldHVybiB0''@;'; put 'put ''aGlzLnI9bmV3IEkoWSksdGhpcy5zPW5ldyBJKGVlKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sQi5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24oTil7dmFyIEw9dGhpcy5yLnRvQXJyYXkoKSxLPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZMWzBdJiYoTD1bMF0uY29uY2F0KEwpKSwx''@;'; put 'put ''MjgmS1swXSYmKEs9WzBdLmNvbmNhdChLKSksTD1GKEwpLEs9RihLKTshKEtbMF18fDEyOCZLWzFdKTspSz1LLnNsaWNlKDEpO3ZhciBVPVsyXTtPKFUsTC5sZW5ndGgpLChVPVUuY29uY2F0KEwpKS5wdXNoKDIpLE8oVSxLLmxlbmd0aCk7dmFyIFc9VS5jb25jYXQoSyksWT1bNDhdO3JldHVy''@;'; put 'put ''biBPKFksVy5sZW5ndGgpLFk9WS5jb25jYXQoVyksXy5lbmNvZGUoWSxOKX19LDgzMDQ1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTI1MjkpLF89eSgyMzQwMSksZz15KDMxMzYpLEI9Zy5hc3NlcnQsdz1nLnBhcnNlQnl0ZXMsUD15KDg3MjIyKSxGPXkoNTQ1MSk7ZnVuY3Rp''@;'; put 'put ''b24gTyh6KXtpZihCKCJlZDI1NTE5Ij09PXosIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8oeik7dGhpcy5jdXJ2ZT16PV9bel0uY3VydmUsdGhpcy5nPXouZyx0aGlzLmcucHJlY29tcHV0ZSh6Lm4uYml0TGVuZ3Ro''@;'; put 'put ''KCkrMSksdGhpcy5wb2ludENsYXNzPXoucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbCh6Lm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPUkuc2hhNTEyfXVlLmV4cG9ydHM9TyxPLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKE4sTCl7Tj13KE4pO3Zh''@;'; put 'put ''ciBLPXRoaXMua2V5RnJvbVNlY3JldChMKSxVPXRoaXMuaGFzaEludChLLm1lc3NhZ2VQcmVmaXgoKSxOKSxXPXRoaXMuZy5tdWwoVSksWT10aGlzLmVuY29kZVBvaW50KFcpLHE9dGhpcy5oYXNoSW50KFksSy5wdWJCeXRlcygpLE4pLm11bChLLnByaXYoKSksZWU9VS5hZGQocSkudW1vZCh0''@;'; put 'put ''aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6VyxTOmVlLFJlbmNvZGVkOll9KX0sTy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKE4sTCxLKXtpZihOPXcoTiksKEw9dGhpcy5tYWtlU2lnbmF0dXJlKEwpKS5TKCkuZ3RlKEwuZWRkc2EuY3VydmUubil8fEwuUygp''@;'; put 'put ''LmlzTmVnKCkpcmV0dXJuITE7dmFyIFU9dGhpcy5rZXlGcm9tUHVibGljKEspLFc9dGhpcy5oYXNoSW50KEwuUmVuY29kZWQoKSxVLnB1YkJ5dGVzKCksTiksWT10aGlzLmcubXVsKEwuUygpKTtyZXR1cm4gTC5SKCkuYWRkKFUucHViKCkubXVsKFcpKS5lcShZKX0sTy5wcm90b3R5cGUuaGFz''@;'; put 'put ''aEludD1mdW5jdGlvbigpe2Zvcih2YXIgTj10aGlzLmhhc2goKSxMPTA7TDxhcmd1bWVudHMubGVuZ3RoO0wrKylOLnVwZGF0ZShhcmd1bWVudHNbTF0pO3JldHVybiBnLmludEZyb21MRShOLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LE8ucHJvdG90eXBlLmtleUZyb21QdWJsaWM9''@;'; put 'put ''ZnVuY3Rpb24oTil7cmV0dXJuIFAuZnJvbVB1YmxpYyh0aGlzLE4pfSxPLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKE4pe3JldHVybiBQLmZyb21TZWNyZXQodGhpcyxOKX0sTy5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9m''@;'; put 'put ''IEY/TjpuZXcgRih0aGlzLE4pfSxPLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTD1OLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIExbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9Ti5nZXRYKCkuaXNPZGQoKT8xMjg6MCxMfSxP''@;'; put 'put ''LnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTD0oTj1nLnBhcnNlQnl0ZXMoTikpLmxlbmd0aC0xLEs9Ti5zbGljZSgwLEwpLmNvbmNhdCgtMTI5Jk5bTF0pLFU9ISEoMTI4Jk5bTF0pLFc9Zy5pbnRGcm9tTEUoSyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShX''@;'; put 'put ''LFUpfSxPLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIE4udG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxPLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIGcuaW50RnJvbUxFKE4pfSxPLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0''@;'; put 'put ''aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sODcyMjI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMTM2KSxfPUkuYXNzZXJ0LGc9SS5wYXJzZUJ5dGVzLEI9SS5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiB3KFAsRil7dGhpcy5lZGRzYT1QLHRo''@;'; put 'put ''aXMuX3NlY3JldD1nKEYuc2VjcmV0KSxQLmlzUG9pbnQoRi5wdWIpP3RoaXMuX3B1Yj1GLnB1Yjp0aGlzLl9wdWJCeXRlcz1nKEYucHViKX13LmZyb21QdWJsaWM9ZnVuY3Rpb24oRixPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIHc/TzpuZXcgdyhGLHtwdWI6T30pfSx3LmZyb21TZWNyZXQ9ZnVu''@;'; put 'put ''Y3Rpb24oRixPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIHc/TzpuZXcgdyhGLHtzZWNyZXQ6T30pfSx3LnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxCKHcsInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRo''@;'; put 'put ''aXMucHViKCkpfSksQih3LCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSksQih3LCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5l''@;'; put 'put ''ZGRzYSxPPXRoaXMuaGFzaCgpLHo9Ri5lbmNvZGluZ0xlbmd0aC0xLE49Ty5zbGljZSgwLEYuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBOWzBdJj0yNDgsTlt6XSY9MTI3LE5bel18PTY0LE59KSxCKHcsInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMu''@;'; put 'put ''cHJpdkJ5dGVzKCkpfSksQih3LCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxCKHcsIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5j''@;'; put 'put ''b2RpbmdMZW5ndGgpfSksdy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihGKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKEYsdGhpcyl9LHcucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihGLE8pe3JldHVybiB0aGlzLmVk''@;'; put 'put ''ZHNhLnZlcmlmeShGLE8sdGhpcyl9LHcucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihGKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSxJLmVuY29kZSh0aGlzLnNlY3JldCgpLEYpfSx3LnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oRil7''@;'; put 'put ''cmV0dXJuIEkuZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxGKX0sdWUuZXhwb3J0cz13fSw1NDUxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODg3MjMpLF89eSgzMTM2KSxnPV8uYXNzZXJ0LEI9Xy5jYWNoZWRQcm9wZXJ0eSx3PV8ucGFyc2VCeXRlcztmdW5jdGlvbiBQKEYsTyl7''@;'; put 'put ''dGhpcy5lZGRzYT1GLCJvYmplY3QiIT10eXBlb2YgTyYmKE89dyhPKSksQXJyYXkuaXNBcnJheShPKSYmKGcoTy5sZW5ndGg9PT0yKkYuZW5jb2RpbmdMZW5ndGgsIlNpZ25hdHVyZSBoYXMgaW52YWxpZCBzaXplIiksTz17UjpPLnNsaWNlKDAsRi5lbmNvZGluZ0xlbmd0aCksUzpPLnNsaWNl''@;'; put 'put ''KEYuZW5jb2RpbmdMZW5ndGgpfSksZyhPLlImJk8uUywiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTIiksRi5pc1BvaW50KE8uUikmJih0aGlzLl9SPU8uUiksTy5TIGluc3RhbmNlb2YgSSYmKHRoaXMuX1M9Ty5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KE8uUik/Ty5SOk8uUmVu''@;'; put 'put ''Y29kZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNBcnJheShPLlMpP08uUzpPLlNlbmNvZGVkfUIoUCwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLEIoUCwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQ''@;'; put 'put ''b2ludCh0aGlzLlJlbmNvZGVkKCkpfSksQihQLCJSZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxCKFAsIlNlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxQLnByb3Rv''@;'; put 'put ''dHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sUC5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gXy5lbmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LHVlLmV4cG9ydHM9''@;'; put 'put ''UH0sNTE0MTY6dWU9Pnt1ZS5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNm''@;'; put 'put ''MGJlMWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1''@;'; put 'put ''OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0''@;'; put 'put ''NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMi''@;'; put 'put ''LCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4''@;'; put 'put ''MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRh''@;'; put 'put ''ZTFkZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFi''@;'; put 'put ''MWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2''@;'; put 'put ''YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEz''@;'; put 'put ''NTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5''@;'; put 'put ''OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEi''@;'; put 'put ''XSxbIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQx''@;'; put 'put ''M2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBl''@;'; put 'put ''NzQyZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2''@;'; put 'put ''Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJi''@;'; put 'put ''ZWQ0Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2Rl''@;'; put 'put ''MGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4''@;'; put 'put ''ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQi''@;'; put 'put ''LCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRl''@;'; put 'put ''ZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3''@;'; put 'put ''ZjIzY2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUx''@;'; put 'put ''ZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1''@;'; put 'put ''MDE0MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZh''@;'; put 'put ''NDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1''@;'; put 'put ''NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEi''@;'; put 'put ''XSxbIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4''@;'; put 'put ''MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1''@;'; put 'put ''MDUzMjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFh''@;'; put 'put ''OWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgz''@;'; put 'put ''ZTIwZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBj''@;'; put 'put ''ODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEy''@;'; put 'put ''YWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYi''@;'; put 'put ''LCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBl''@;'; put 'put ''NjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIz''@;'; put 'put ''ODVhMmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBh''@;'; put 'put ''MDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVj''@;'; put 'put ''YjA5ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEz''@;'; put 'put ''YTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2''@;'; put 'put ''ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxb''@;'; put 'put ''ImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0''@;'; put 'put ''MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0''@;'; put 'put ''MzAwYmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2''@;'; put 'put ''Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNi''@;'; put 'put ''MzhjZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZm''@;'; put 'put ''MGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTli''@;'; put 'put ''MWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIs''@;'; put 'put ''IjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0''@;'; put 'put ''ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5''@;'; put 'put ''ZmFmNjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2''@;'; put 'put ''MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1''@;'; put 'put ''ODhjYWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNh''@;'; put 'put ''MzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNi''@;'; put 'put ''ZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxb''@;'; put 'put ''ImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEw''@;'; put 'put ''MTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhi''@;'; put 'put ''ODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMi''@;'; put 'put ''LCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYz''@;'; put 'put ''YjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5''@;'; put 'put ''Yzk1M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1''@;'; put 'put ''YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2''@;'; put 'put ''ODc2NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMw''@;'; put 'put ''Mzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIz''@;'; put 'put ''YjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0s''@;'; put 'put ''WyI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBi''@;'; put 'put ''ZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4''@;'; put 'put ''N2QyMmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhi''@;'; put 'put ''M2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFl''@;'; put 'put ''N2FkZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFi''@;'; put 'put ''NDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBl''@;'; put 'put ''OWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIs''@;'; put 'put ''ImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2''@;'; put 'put ''NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5''@;'; put 'put ''NDljOWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0''@;'; put 'put ''NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2Rl''@;'; put 'put ''YmNiYTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5Yjgy''@;'; put 'put ''MjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTli''@;'; put 'put ''Nzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxb''@;'; put 'put ''Ijc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4''@;'; put 'put ''YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFk''@;'; put 'put ''OWI5ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0''@;'; put 'put ''NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3''@;'; put 'put ''YjhjNDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2''@;'; put 'put ''NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUy''@;'; put 'put ''ZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3''@;'; put 'put ''NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5''@;'; put 'put ''YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFm''@;'; put 'put ''NTczM2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEz''@;'; put 'put ''ODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1''@;'; put 'put ''NzAzMjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1''@;'; put 'put ''NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2''@;'; put 'put ''MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxb''@;'; put 'put ''IjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQz''@;'; put 'put ''YjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlk''@;'; put 'put ''MDcxNzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0''@;'; put 'put ''MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODVi''@;'; put 'put ''ZDgwZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZi''@;'; put 'put ''NTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5''@;'; put 'put ''MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1''@;'; put 'put ''ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQy''@;'; put 'put ''NTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMx''@;'; put 'put ''YzhjMWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5''@;'; put 'put ''NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVh''@;'; put 'put ''OTZjNGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4''@;'; put 'put ''M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2''@;'; put 'put ''NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4''@;'; put 'put ''NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUy''@;'; put 'put ''ZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVm''@;'; put 'put ''MmY2NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEy''@;'; put 'put ''OWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0''@;'; put 'put ''N2E5MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2Vj''@;'; put 'put ''MWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3''@;'; put 'put ''OGE3YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0''@;'; put 'put ''MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIy''@;'; put 'put ''YzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEz''@;'; put 'put ''Il0sWyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1''@;'; put 'put ''NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUz''@;'; put 'put ''NDUwZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVh''@;'; put 'put ''NjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdi''@;'; put 'put ''ZTRjNTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0''@;'; put 'put ''YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2Rk''@;'; put 'put ''NGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMi''@;'; put 'put ''LCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBm''@;'; put 'put ''OTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUz''@;'; put 'put ''MWM3NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFh''@;'; put 'put ''MTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJk''@;'; put 'put ''MzRjODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3''@;'; put 'put ''YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDll''@;'; put 'put ''ZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJd''@;'; put 'put ''LFsiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5''@;'; put 'put ''MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2''@;'; put 'put ''N2MxMWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZk''@;'; put 'put ''ZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2''@;'; put 'put ''OTM4MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdi''@;'; put 'put ''MDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0''@;'; put 'put ''MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgw''@;'; put 'put ''IiwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhl''@;'; put 'put ''Y2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdm''@;'; put 'put ''NDYzMDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2''@;'; put 'put ''Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2Ix''@;'; put 'put ''NGZkNmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQx''@;'; put 'put ''ZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4''@;'; put 'put ''MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJd''@;'; put 'put ''LFsiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2''@;'; put 'put ''YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRh''@;'; put 'put ''NGJmNWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2Vk''@;'; put 'put ''ZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1''@;'; put 'put ''ODJmYzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIw''@;'; put 'put ''MDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZl''@;'; put 'put ''ODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMi''@;'; put 'put ''LCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0''@;'; put 'put ''ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0''@;'; put 'put ''ZDEyNWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3''@;'; put 'put ''YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2Qy''@;'; put 'put ''ZDBlZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRm''@;'; put 'put ''NmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3''@;'; put 'put ''YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJd''@;'; put 'put ''LFsiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0Yzgy''@;'; put 'put ''NWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0''@;'; put 'put ''NmY5NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSwzMTM2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPVgsXz15KDg4NzIzKSxnPXkoMzkyMTApLEI9eSgyMTgzMik7SS5hc3NlcnQ9ZyxJ''@;'; put 'put ''LnRvQXJyYXk9Qi50b0FycmF5LEkuemVybzI9Qi56ZXJvMixJLnRvSGV4PUIudG9IZXgsSS5lbmNvZGU9Qi5lbmNvZGUsSS5nZXROQUY9ZnVuY3Rpb24gdyhOLEwsSyl7dmFyIFcsVT1uZXcgQXJyYXkoTWF0aC5tYXgoTi5iaXRMZW5ndGgoKSxLKSsxKTtmb3IoVz0wO1c8VS5sZW5ndGg7Vys9''@;'; put 'put ''MSlVW1ddPTA7dmFyIFk9MTw8TCsxLHE9Ti5jbG9uZSgpO2ZvcihXPTA7VzxVLmxlbmd0aDtXKyspe3ZhciBlZSxKPXEuYW5kbG4oWS0xKTtxLmlzT2RkKCk/cS5pc3VibihlZT1KPihZPj4xKS0xPyhZPj4xKS1KOkopOmVlPTAsVVtXXT1lZSxxLml1c2hybigxKX1yZXR1cm4gVX0sSS5nZXRK''@;'; put 'put ''U0Y9ZnVuY3Rpb24gUChOLEwpe3ZhciBLPVtbXSxbXV07Tj1OLmNsb25lKCksTD1MLmNsb25lKCk7Zm9yKHZhciBZLFU9MCxXPTA7Ti5jbXBuKC1VKT4wfHxMLmNtcG4oLVcpPjA7KXt2YXIgSixuZSxxPU4uYW5kbG4oMykrVSYzLGVlPUwuYW5kbG4oMykrVyYzOzM9PT1xJiYocT0tMSksMz09''@;'; put 'put ''PWVlJiYoZWU9LTEpLEo9MSZxPzMhPShZPU4uYW5kbG4oNykrVSY3KSYmNSE9PVl8fDIhPT1lZT9xOi1xOjAsS1swXS5wdXNoKEopLG5lPTEmZWU/MyE9KFk9TC5hbmRsbig3KStXJjcpJiY1IT09WXx8MiE9PXE/ZWU6LWVlOjAsS1sxXS5wdXNoKG5lKSwyKlU9PT1KKzEmJihVPTEtVSksMipX''@;'; put 'put ''PT09bmUrMSYmKFc9MS1XKSxOLml1c2hybigxKSxMLml1c2hybigxKX1yZXR1cm4gS30sSS5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBGKE4sTCxLKXt2YXIgVT0iXyIrTDtOLnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW1VdP3RoaXNbVV06dGhpc1tVXT1L''@;'; put 'put ''LmNhbGwodGhpcyl9fSxJLnBhcnNlQnl0ZXM9ZnVuY3Rpb24gTyhOKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE4/SS50b0FycmF5KE4sImhleCIpOk59LEkuaW50RnJvbUxFPWZ1bmN0aW9uIHooTil7cmV0dXJuIG5ldyBfKE4sImhleCIsImxlIil9fSw4ODcyMzpmdW5jdGlvbih1ZSxYLHkp''@;'; put 'put ''eyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJv''@;'; put 'put ''dG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUi''@;'; put 'put ''PT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/''@;'; put 'put ''d2luZG93LkJ1ZmZlcjp5KDc5MzY4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4g''@;'; put 'put ''Yi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4g''@;'; put 'put ''Q313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5j''@;'; put 'put ''bXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHAp''@;'; put 'put ''cmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2''@;'; put 'put ''PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0t''@;'; put 'put ''cCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jk''@;'; put 'put ''cz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVu''@;'; put 'put ''Z3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jk''@;'; put 'put ''c1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYm''@;'; put 'put ''JihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGot''@;'; put 'put ''PTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3Ro''@;'; put 'put ''O0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZv''@;'; put 'put ''cihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9''@;'; put 'put ''ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxB''@;'; put 'put ''LEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRz''@;'; put 'put ''WzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhp''@;'; put 'put ''cy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1''@;'; put 'put ''bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07''@;'; put 'put ''cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRo''@;'; put 'put ''aXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3''@;'; put 'put ''LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2''@;'; put 'put ''LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1''@;'; put 'put ''NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3''@;'; put 'put ''MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29y''@;'; put 'put ''ZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7''@;'; put 'put ''dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwo''@;'; put 'put ''Qys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9''@;'; put 'put ''aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4''@;'; put 'put ''Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50''@;'; put 'put ''b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFd''@;'; put 'put ''OnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZm''@;'; put 'put ''ZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUi''@;'; put 'put ''PT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7''@;'; put 'put ''bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4''@;'; put 'put ''Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0x''@;'; put 'put ''MyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7''@;'; put 'put ''cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14''@;'; put 'put ''LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlu''@;'; put 'put ''b3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9y''@;'; put 'put ''PWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlz''@;'; put 'put ''O2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAu''@;'; put 'put ''bmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxl''@;'; put 'put ''bmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJv''@;'; put 'put ''dG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1h''@;'; put 'put ''dGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhp''@;'; put 'put ''cy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhw''@;'; put 'put ''YW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhp''@;'; put 'put ''cy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3Ro''@;'; put 'put ''O0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKysp''@;'; put 'put ''dGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5u''@;'; put 'put ''ZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlv''@;'; put 'put ''bihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRo''@;'; put 'put ''aXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKysp''@;'; put 'put ''SD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0''@;'; put 'put ''aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxv''@;'; put 'put ''dD0wfENbMl0seGU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSx6ZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLE9lPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxD''@;'; put 'put ''WzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxo''@;'; put 'put ''bj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5''@;'; put 'put ''MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVs''@;'; put 'put ''KEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsUnQpLG09KG09TWF0aC5pbXVsKHhlLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGgu''@;'; put 'put ''aW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDAp''@;'; put 'put ''KyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bCh6ZSxSdCksbT0obT1NYXRoLmltdWwoemUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoeGUsUXQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxzbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUs''@;'; put 'put ''V3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoT2UsUnQpLG09KG09TWF0''@;'; put 'put ''aC5pbXVsKE9lLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKHplLFF0KXwwLG09KG09bStNYXRoLmltdWwoemUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4p''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2''@;'; put 'put ''YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMs''@;'; put 'put ''RT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE9lLFF0KXwwLG09KG09bStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEll''@;'; put 'put ''LHNuKXwwLEU9RStNYXRoLmltdWwoemUsaG4pfDAsbT0obT1tK01hdGguaW11bCh6ZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bCh4ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwodmUsV3Qp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRo''@;'; put 'put ''LmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChPZSxobil8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KE9lLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHplLFd0KXwwLG09KG09bStNYXRoLmltdWwoemUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsc3Qp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bCh4ZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2''@;'; put 'put ''YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMs''@;'; put 'put ''RT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFl''@;'; put 'put ''LHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChPZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLEF0KXwwKStNYXRoLmltdWwoSWUsV3Qp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHplLHN0KXwwLG09KG09bStNYXRoLmltdWwoemUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoeGUsV2UpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUs''@;'; put 'put ''cm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0''@;'; put 'put ''aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4p''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKE9lLHN0KXwwLG09KG09bStNYXRoLmltdWwoT2UsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoemUsV2UpfDAsbT0obT1tK01hdGguaW11bCh6ZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGgu''@;'; put 'put ''aW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDAp''@;'; put 'put ''KyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChPZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHplLGh0KXwwLG09KG09bStNYXRoLmltdWwoemUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KERlLHh0KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''Y24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGgu''@;'; put 'put ''aW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoT2Us''@;'; put 'put ''aHQpfDAsbT0obT1tK01hdGguaW11bChPZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bCh6ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKHhlLGNuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQs''@;'; put 'put ''c3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChPZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHplLGNuKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoemUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bCh4ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMp''@;'; put 'put ''fDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQs''@;'; put 'put ''c3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChPZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoemUsWHQpfDApfDApKygoODE5MSYobT0obT1t''@;'; put 'put ''K01hdGguaW11bCh6ZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVs''@;'; put 'put ''KHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChPZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMp''@;'; put 'put ''fDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQs''@;'; put 'put ''aHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXww''@;'; put 'put ''KStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQs''@;'; put 'put ''Y24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGgu''@;'; put 'put ''aW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDAp''@;'; put 'put ''KyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPSht''@;'; put 'put ''PU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhb''@;'; put 'put ''Nl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1''@;'; put 'put ''cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09''@;'; put 'put ''PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFy''@;'; put 'put ''IEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStq''@;'; put 'put ''fDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90''@;'; put 'put ''b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9''@;'; put 'put ''PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1d''@;'; put 'put ''fSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8''@;'; put 'put ''VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0seGU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSp4ZTt4ZT10ZSp4ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK3hlLHhb''@;'; put 'put ''YWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS14ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49''@;'; put 'put ''MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9''@;'; put 'put ''fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2''@;'; put 'put ''NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09''@;'; put 'put ''PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0''@;'; put 'put ''aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMu''@;'; put 'put ''Y29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2Vd''@;'; put 'put ''KmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxD''@;'; put 'put ''KSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgp''@;'; put 'put ''LHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZD''@;'; put 'put ''KSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09cD8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90''@;'; put 'put ''eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJu''@;'; put 'put ''IHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhp''@;'; put 'put ''cy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tU''@;'; put 'put ''XTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1''@;'; put 'put ''bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyks''@;'; put 'put ''RSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlz''@;'; put 'put ''LndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tF''@;'; put 'put ''Lmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90''@;'; put 'put ''b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlz''@;'; put 'put ''aHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVu''@;'; put 'put ''Z3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBw''@;'; put 'put ''b3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5w''@;'; put 'put ''cm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0''@;'; put 'put ''aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lm''@;'; put 'put ''KDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8''@;'; put 'put ''cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtp''@;'; put 'put ''ZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIg''@;'; put 'put ''bSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEs''@;'; put 'put ''RSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3''@;'; put 'put ''MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAo''@;'; put 'put ''KSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYw''@;'; put 'put ''IT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5l''@;'; put 'put ''ZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1v''@;'; put 'put ''ZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUu''@;'; put 'put ''ZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChw''@;'; put 'put ''LCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFu''@;'; put 'put ''ZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9''@;'; put 'put ''MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29y''@;'; put 'put ''ZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdh''@;'; put 'put ''dGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1''@;'; put 'put ''c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNP''@;'; put 'put ''ZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8''@;'; put 'put ''ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9''@;'; put 'put ''fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNs''@;'; put 'put ''b25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4''@;'; put 'put ''LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1i''@;'; put 'put ''LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2Iu''@;'; put 'put ''bmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAo''@;'; put 'put ''eCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''c0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUu''@;'; put 'put ''YmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5s''@;'; put 'put ''ZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09''@;'; put 'put ''PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVu''@;'; put 'put ''Z3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYo''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlv''@;'; put 'put ''bihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6''@;'; put 'put ''Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhp''@;'; put 'put ''cy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHAp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0''@;'; put 'put ''aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9u''@;'; put 'put ''bHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''ZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''LnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu''@;'; put 'put ''X3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlz''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEo''@;'; put 'put ''dGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3''@;'; put 'put ''KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVu''@;'; put 'put ''Y3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBW''@;'; put 'put ''KXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBqZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlz''@;'; put 'put ''Lm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRo''@;'; put 'put ''aXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3Jl''@;'; put 'put ''dHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3Ro''@;'; put 'put ''KCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5z''@;'; put 'put ''cGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWlu''@;'; put 'put ''KHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5s''@;'; put 'put ''ZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVu''@;'; put 'put ''Z3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1tw''@;'; put 'put ''Lmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5Kigw''@;'; put 'put ''fHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxl''@;'; put 'put ''O2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1''@;'; put 'put ''bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZl''@;'; put 'put ''KSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIp''@;'; put 'put ''e3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1''@;'; put 'put ''cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90''@;'; put 'put ''b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAu''@;'; put 'put ''dXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChi''@;'; put 'put ''KSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVy''@;'; put 'put ''biBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxu''@;'; put 'put ''KDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5w''@;'; put 'put ''b3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3''@;'; put 'put ''ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIg''@;'; put 'put ''Yj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7''@;'; put 'put ''aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRM''@;'; put 'put ''ZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0r''@;'; put 'put ''K0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5j''@;'; put 'put ''b252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgamUocCl9LEIoamUsU2UpLGplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxu''@;'; put 'put ''KHRoaXMuc2hpZnQpKX0samUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSxqZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkp''@;'; put 'put ''cmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAo''@;'; put 'put ''dGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhp''@;'; put 'put ''cyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5j''@;'; put 'put ''bXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw0''@;'; put 'put ''NDM1Njp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxYPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwseT1YJiYiZnVuY3Rpb24iPT10eXBlb2YgWC5hcHBseT9YLmFwcGx5OmZ1bmN0aW9uKGllLGxlLG1lKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwo''@;'; put 'put ''aWUsbGUsbWUpfTtJPVgmJiJmdW5jdGlvbiI9PXR5cGVvZiBYLm93bktleXM/WC5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oaWUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5''@;'; put 'put ''bWJvbHMoaWUpKX06ZnVuY3Rpb24oaWUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpZSl9O3ZhciBnPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oaWUpe3JldHVybiBpZSE9aWV9O2Z1bmN0aW9uIEIoKXtCLmluaXQuY2FsbCh0aGlzKX11ZS5leHBvcnRzPUIsdWUuZXhwb3J0''@;'; put 'put ''cy5vbmNlPWZ1bmN0aW9uIHEobmUsaWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihsZSxtZSl7ZnVuY3Rpb24gX2UoU2Upe25lLnJlbW92ZUxpc3RlbmVyKGllLFRlKSxtZShTZSl9ZnVuY3Rpb24gVGUoKXsiZnVuY3Rpb24iPT10eXBlb2YgbmUucmVtb3ZlTGlzdGVuZXImJm5lLnJl''@;'; put 'put ''bW92ZUxpc3RlbmVyKCJlcnJvciIsX2UpLGxlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9SihuZSxpZSxUZSx7b25jZTohMH0pLCJlcnJvciIhPT1pZSYmZnVuY3Rpb24gZWUobmUsaWUsbGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBuZS5vbiYmSihuZSwiZXJyb3IiLGllLGxlKX0obmUsX2Us''@;'; put 'put ''e29uY2U6ITB9KX0pfSxCLkV2ZW50RW1pdHRlcj1CLEIucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLEIucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLEIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciB3PTEwO2Z1bmN0aW9uIFAobmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBu''@;'; put 'put ''ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbmUpfWZ1bmN0aW9uIEYobmUpe3JldHVybiB2b2lkIDA9PT1uZS5fbWF4TGlzdGVuZXJzP0IuZGVmYXVsdE1heExpc3Rl''@;'; put 'put ''bmVyczpuZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIE8obmUsaWUsbGUsbWUpe3ZhciBfZSxUZSxTZTtpZihQKGxlKSx2b2lkIDA9PT0oVGU9bmUuX2V2ZW50cyk/KFRlPW5lLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxuZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PVRlLm5ld0xp''@;'; put 'put ''c3RlbmVyJiYobmUuZW1pdCgibmV3TGlzdGVuZXIiLGllLGxlLmxpc3RlbmVyP2xlLmxpc3RlbmVyOmxlKSxUZT1uZS5fZXZlbnRzKSxTZT1UZVtpZV0pLHZvaWQgMD09PVNlKVNlPVRlW2llXT1sZSwrK25lLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBTZT9TZT1U''@;'; put 'put ''ZVtpZV09bWU/W2xlLFNlXTpbU2UsbGVdOm1lP1NlLnVuc2hpZnQobGUpOlNlLnB1c2gobGUpLChfZT1GKG5lKSk+MCYmU2UubGVuZ3RoPl9lJiYhU2Uud2FybmVkKXtTZS53YXJuZWQ9ITA7dmFyIGplPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVj''@;'; put 'put ''dGVkLiAiK1NlLmxlbmd0aCsiICIrU3RyaW5nKGllKSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtqZS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLGplLmVtaXR0ZXI9bmUsamUudHlwZT1pZSxq''@;'; put 'put ''ZS5jb3VudD1TZS5sZW5ndGgsZnVuY3Rpb24gXyhuZSl7Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4obmUpfShqZSl9cmV0dXJuIG5lfWZ1bmN0aW9uIHooKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMu''@;'; put 'put ''d3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIE4obmUsaWUsbGUpe3ZhciBtZT17ZmlyZWQ6ITEsd3JhcEZuOnZv''@;'; put 'put ''aWQgMCx0YXJnZXQ6bmUsdHlwZTppZSxsaXN0ZW5lcjpsZX0sX2U9ei5iaW5kKG1lKTtyZXR1cm4gX2UubGlzdGVuZXI9bGUsbWUud3JhcEZuPV9lLF9lfWZ1bmN0aW9uIEwobmUsaWUsbGUpe3ZhciBtZT1uZS5fZXZlbnRzO2lmKHZvaWQgMD09PW1lKXJldHVybltdO3ZhciBfZT1tZVtpZV07''@;'; put 'put ''cmV0dXJuIHZvaWQgMD09PV9lP1tdOiJmdW5jdGlvbiI9PXR5cGVvZiBfZT9sZT9bX2UubGlzdGVuZXJ8fF9lXTpbX2VdOmxlP2Z1bmN0aW9uIFkobmUpe2Zvcih2YXIgaWU9bmV3IEFycmF5KG5lLmxlbmd0aCksbGU9MDtsZTxpZS5sZW5ndGg7KytsZSlpZVtsZV09bmVbbGVdLmxpc3RlbmVy''@;'; put 'put ''fHxuZVtsZV07cmV0dXJuIGllfShfZSk6VShfZSxfZS5sZW5ndGgpfWZ1bmN0aW9uIEsobmUpe3ZhciBpZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aWUpe3ZhciBsZT1pZVtuZV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGxlKXJldHVybiAxO2lmKHZvaWQgMCE9PWxlKXJldHVybiBsZS5s''@;'; put 'put ''ZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gVShuZSxpZSl7Zm9yKHZhciBsZT1uZXcgQXJyYXkoaWUpLG1lPTA7bWU8aWU7KyttZSlsZVttZV09bmVbbWVdO3JldHVybiBsZX1mdW5jdGlvbiBKKG5lLGllLGxlLG1lKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbmUub24pbWUub25jZT9uZS5vbmNl''@;'; put 'put ''KGllLGxlKTpuZS5vbihpZSxsZSk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbmUuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2Yg''@;'; put 'put ''bmUpO25lLmFkZEV2ZW50TGlzdGVuZXIoaWUsZnVuY3Rpb24gX2UoVGUpe21lLm9uY2UmJm5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoaWUsX2UpLGxlKFRlKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQiwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd9LHNldDpmdW5jdGlvbihuZSl7aWYoIm51bWJlciIhPXR5cGVvZiBuZXx8bmU8MHx8ZyhuZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZl''@;'; put 'put ''IG51bWJlci4gUmVjZWl2ZWQgJytuZSsiLiIpO3c9bmV9fSksQi5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCks''@;'; put 'put ''dGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxCLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe2lmKCJudW1iZXIiIT10eXBlb2YgaWV8fGllPDB8fGcoaWUpKXRocm93IG5ldyBSYW5nZUVycm9y''@;'; put 'put ''KCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcraWUrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPWllLHRoaXN9LEIucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBGKHRoaXMpfSxCLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGllKXtmb3IodmFyIGxlPVtdLG1lPTE7bWU8YXJndW1lbnRzLmxlbmd0aDttZSsrKWxlLnB1c2goYXJndW1lbnRzW21lXSk7dmFyIF9lPSJlcnJvciI9PT1pZSxUZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09VGUpX2U9''@;'; put 'put ''X2UmJnZvaWQgMD09PVRlLmVycm9yO2Vsc2UgaWYoIV9lKXJldHVybiExO2lmKF9lKXt2YXIgU2U7aWYobGUubGVuZ3RoPjAmJihTZT1sZVswXSksU2UgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBTZTt2YXIgamU9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisoU2U/IiAoIitTZS5tZXNz''@;'; put 'put ''YWdlKyIpIjoiIikpO3Rocm93IGplLmNvbnRleHQ9U2UsamV9dmFyIFY9VGVbaWVdO2lmKHZvaWQgMD09PVYpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFYpeShWLHRoaXMsbGUpO2Vsc2V7dmFyIHA9Vi5sZW5ndGgsYj1VKFYscCk7Zm9yKG1lPTA7bWU8cDsrK21lKXkoYlttZV0s''@;'; put 'put ''dGhpcyxsZSl9cmV0dXJuITB9LEIucHJvdG90eXBlLm9uPUIucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGllLGxlKXtyZXR1cm4gTyh0aGlzLGllLGxlLCExKX0sQi5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGllLGxlKXtyZXR1cm4gTyh0aGlzLGllLGxlLCEw''@;'; put 'put ''KX0sQi5wcm90b3R5cGUub25jZT1mdW5jdGlvbihpZSxsZSl7cmV0dXJuIFAobGUpLHRoaXMub24oaWUsTih0aGlzLGllLGxlKSksdGhpc30sQi5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihpZSxsZSl7cmV0dXJuIFAobGUpLHRoaXMucHJlcGVuZExpc3RlbmVyKGll''@;'; put 'put ''LE4odGhpcyxpZSxsZSkpLHRoaXN9LEIucHJvdG90eXBlLm9mZj1CLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihpZSxsZSl7dmFyIG1lLF9lLFRlLFNlLGplO2lmKFAobGUpLHZvaWQgMD09PShfZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PShtZT1f''@;'; put 'put ''ZVtpZV0pKXJldHVybiB0aGlzO2lmKG1lPT09bGV8fG1lLmxpc3RlbmVyPT09bGUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIF9lW2llXSxfZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIs''@;'; put 'put ''aWUsbWUubGlzdGVuZXJ8fGxlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgbWUpe2ZvcihUZT0tMSxTZT1tZS5sZW5ndGgtMTtTZT49MDtTZS0tKWlmKG1lW1NlXT09PWxlfHxtZVtTZV0ubGlzdGVuZXI9PT1sZSl7amU9bWVbU2VdLmxpc3RlbmVyLFRlPVNlO2JyZWFrfWlmKFRlPDAp''@;'; put 'put ''cmV0dXJuIHRoaXM7MD09PVRlP21lLnNoaWZ0KCk6ZnVuY3Rpb24gVyhuZSxpZSl7Zm9yKDtpZSsxPG5lLmxlbmd0aDtpZSsrKW5lW2llXT1uZVtpZSsxXTtuZS5wb3AoKX0obWUsVGUpLDE9PT1tZS5sZW5ndGgmJihfZVtpZV09bWVbMF0pLHZvaWQgMCE9PV9lLnJlbW92ZUxpc3RlbmVyJiZ0''@;'; put 'put ''aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixpZSxqZXx8bGUpfXJldHVybiB0aGlzfSxCLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe3ZhciBsZSxtZSxfZTtpZih2b2lkIDA9PT0obWU9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1tZS5y''@;'; put 'put ''ZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PW1lW2llXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUo''@;'; put 'put ''bnVsbCk6ZGVsZXRlIG1lW2llXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIFNlLFRlPU9iamVjdC5rZXlzKG1lKTtmb3IoX2U9MDtfZTxUZS5sZW5ndGg7KytfZSkicmVtb3ZlTGlzdGVuZXIiIT09KFNlPVRlW19lXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFNlKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZihsZT1tZVtpZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoaWUsbGUp''@;'; put 'put ''O2Vsc2UgaWYodm9pZCAwIT09bGUpZm9yKF9lPWxlLmxlbmd0aC0xO19lPj0wO19lLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihpZSxsZVtfZV0pO3JldHVybiB0aGlzfSxCLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe3JldHVybiBMKHRoaXMsaWUsITApfSxCLnByb3RvdHlwZS5y''@;'; put 'put ''YXdMaXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe3JldHVybiBMKHRoaXMsaWUsITEpfSxCLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24obmUsaWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuZS5saXN0ZW5lckNvdW50P25lLmxpc3RlbmVyQ291bnQoaWUpOksuY2FsbChuZSxpZSl9LEIucHJvdG90''@;'; put 'put ''eXBlLmxpc3RlbmVyQ291bnQ9SyxCLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/SSh0aGlzLl9ldmVudHMpOltdfX0sMTgyMTE6KHVlLFgseSk9Pnt2YXIgST15KDI3MDU0KS5CdWZmZXIsXz15KDM0NzI1KTt1ZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uIGcoQix3LFAsRil7aWYoSS5pc0J1ZmZlcihCKXx8KEI9SS5mcm9tKEIsImJpbmFyeSIpKSx3JiYoSS5pc0J1ZmZlcih3KXx8KHc9SS5mcm9tKHcsImJpbmFyeSIpKSw4IT09dy5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4''@;'; put 'put ''IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBPPVAvOCx6PUkuYWxsb2MoTyksTj1JLmFsbG9jKEZ8fDApLEw9SS5hbGxvYygwKTtPPjB8fEY+MDspe3ZhciBLPW5ldyBfO0sudXBkYXRlKEwpLEsudXBkYXRlKEIpLHcmJksudXBkYXRlKHcpLEw9Sy5kaWdlc3QoKTt2YXIgVT0wO2lmKE8+MCl7dmFy''@;'; put 'put ''IFc9ei5sZW5ndGgtTztVPU1hdGgubWluKE8sTC5sZW5ndGgpLEwuY29weSh6LFcsMCxVKSxPLT1VfWlmKFU8TC5sZW5ndGgmJkY+MCl7dmFyIFk9Ti5sZW5ndGgtRixxPU1hdGgubWluKEYsTC5sZW5ndGgtVSk7TC5jb3B5KE4sWSxVLFUrcSksRi09cX19cmV0dXJuIEwuZmlsbCgwKSx7a2V5''@;'; put 'put ''OnosaXY6Tn19fSwxMzY4NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI3MDU0KS5CdWZmZXIsXz15KDcwNDUpLlRyYW5zZm9ybTtmdW5jdGlvbiBCKE8pe18uY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz1JLmFsbG9jVW5zYWZlKE8pLHRoaXMuX2Jsb2NrU2l6ZT1PLHRoaXMuX2Js''@;'; put 'put ''b2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9eSg3MTk5MykoQixfKSxCLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKE8seixOKXt2YXIgTD1udWxsO3RyeXt0aGlzLnVwZGF0ZShPLHopfWNhdGNoKEspe0w9S31OKEwpfSxCLnByb3Rv''@;'; put 'put ''dHlwZS5fZmx1c2g9ZnVuY3Rpb24oTyl7dmFyIHo9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKE4pe3o9Tn1PKHopfTt2YXIgdz10eXBlb2YgVWludDhBcnJheTwidSIsUD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5''@;'; put 'put ''QnVmZmVyLmlzVmlldyYmKEkucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5UWVBFRF9BUlJBWV9TVVBQT1JUKTtCLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTyx6KXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQi''@;'; put 'put ''KTtPPWZ1bmN0aW9uIEYoTyx6KXtpZihPIGluc3RhbmNlb2YgSSlyZXR1cm4gTztpZigic3RyaW5nIj09dHlwZW9mIE8pcmV0dXJuIEkuZnJvbShPLHopO2lmKFAmJkFycmF5QnVmZmVyLmlzVmlldyhPKSl7aWYoMD09PU8uYnl0ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTt2YXIgTj1JLmZy''@;'; put 'put ''b20oTy5idWZmZXIsTy5ieXRlT2Zmc2V0LE8uYnl0ZUxlbmd0aCk7aWYoTi5ieXRlTGVuZ3RoPT09Ty5ieXRlTGVuZ3RoKXJldHVybiBOfWlmKHcmJk8gaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLmlzQnVmZmVyKE8pJiZPLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5jb25z''@;'; put 'put ''dHJ1Y3Rvci5pc0J1ZmZlciYmTy5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihPKSlyZXR1cm4gSS5mcm9tKE8pO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9y''@;'; put 'put ''IERhdGFWaWV3LicpfShPLHopO2Zvcih2YXIgTj10aGlzLl9ibG9jayxMPTA7dGhpcy5fYmxvY2tPZmZzZXQrTy5sZW5ndGgtTD49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBLPXRoaXMuX2Jsb2NrT2Zmc2V0O0s8dGhpcy5fYmxvY2tTaXplOylOW0srK109T1tMKytdO3RoaXMuX3VwZGF0''@;'; put 'put ''ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtMPE8ubGVuZ3RoOylOW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPU9bTCsrXTtmb3IodmFyIFU9MCxXPTgqTy5sZW5ndGg7Vz4wOysrVSl0aGlzLl9sZW5ndGhbVV0rPVcsKFc9dGhpcy5fbGVuZ3RoW1VdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMu''@;'; put 'put ''X2xlbmd0aFtVXS09NDI5NDk2NzI5NipXKTtyZXR1cm4gdGhpc30sQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sQi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKE8pe2lmKHRoaXMuX2ZpbmFsaXpl''@;'; put 'put ''ZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgej10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1PJiYoej16LnRvU3RyaW5nKE8pKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBOPTA7''@;'; put 'put ''Tjw0OysrTil0aGlzLl9sZW5ndGhbTl09MDtyZXR1cm4gen0sQi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sdWUuZXhwb3J0cz1CfSw1MjUyOToodWUsWCx5KT0+e3ZhciBJPVg7SS51dGlscz15KDY4''@;'; put 'put ''MjgzKSxJLmNvbW1vbj15KDEyOTAxKSxJLnNoYT15KDc4NTI4KSxJLnJpcGVtZD15KDE1MjgzKSxJLmhtYWM9eSgzNzE2MyksSS5zaGExPUkuc2hhLnNoYTEsSS5zaGEyNTY9SS5zaGEuc2hhMjU2LEkuc2hhMjI0PUkuc2hhLnNoYTIyNCxJLnNoYTM4ND1JLnNoYS5zaGEzODQsSS5zaGE1MTI9''@;'; put 'put ''SS5zaGEuc2hhNTEyLEkucmlwZW1kMTYwPUkucmlwZW1kLnJpcGVtZDE2MH0sMTI5MDE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2ODI4MyksXz15KDM5MjEwKTtmdW5jdGlvbiBnKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6''@;'; put 'put ''ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5l''@;'; put 'put ''bmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1YLkJsb2NrSGFzaD1nLGcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LFApe2lmKHc9SS50b0FycmF5KHcsUCksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGlu''@;'; put 'put ''Zz90aGlzLnBlbmRpbmcuY29uY2F0KHcpOncsdGhpcy5wZW5kaW5nVG90YWwrPXcubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEY9KHc9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz13LnNsaWNlKHcubGVuZ3RoLUYs''@;'; put 'put ''dy5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHc9SS5qb2luMzIodywwLHcubGVuZ3RoLUYsdGhpcy5lbmRpYW4pO2Zvcih2YXIgTz0wO088dy5sZW5ndGg7Tys9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodyxPLE8rdGhpcy5fZGVsdGEz''@;'; put 'put ''Mil9cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLF8obnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHcpfSxnLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5wZW5kaW5n''@;'; put 'put ''VG90YWwsUD10aGlzLl9kZWx0YTgsRj1QLSh3K3RoaXMucGFkTGVuZ3RoKSVQLE89bmV3IEFycmF5KEYrdGhpcy5wYWRMZW5ndGgpO09bMF09MTI4O2Zvcih2YXIgej0xO3o8Rjt6KyspT1t6XT0wO2lmKHc8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgTj04O048dGhpcy5wYWRM''@;'; put 'put ''ZW5ndGg7TisrKU9beisrXT0wO09beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT13Pj4+MjQmMjU1LE9beisrXT13Pj4+MTYmMjU1LE9beisrXT13Pj4+OCYyNTUsT1t6KytdPTI1NSZ3fWVsc2UgZm9yKE9beisrXT0yNTUmdyxPW3orK109dz4+PjgmMjU1LE9beisr''@;'; put 'put ''XT13Pj4+MTYmMjU1LE9beisrXT13Pj4+MjQmMjU1LE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE49ODtOPHRoaXMucGFkTGVuZ3RoO04rKylPW3orK109MDtyZXR1cm4gT319LDM3MTYzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjgyODMpLF89eSgzOTIx''@;'; put 'put ''MCk7ZnVuY3Rpb24gZyhCLHcsUCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnKEIsdyxQKTt0aGlzLkhhc2g9Qix0aGlzLmJsb2NrU2l6ZT1CLmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1CLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRo''@;'; put 'put ''aXMuX2luaXQoSS50b0FycmF5KHcsUCkpfXVlLmV4cG9ydHM9ZyxnLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih3KXt3Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHc9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KS5kaWdlc3QoKSksXyh3Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2''@;'; put 'put ''YXIgUD13Lmxlbmd0aDtQPHRoaXMuYmxvY2tTaXplO1ArKyl3LnB1c2goMCk7Zm9yKFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpLFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRo''@;'; put 'put ''aXMuSGFzaCkudXBkYXRlKHcpfSxnLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodyxQKSx0aGlzfSxnLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkp''@;'; put 'put ''LHRoaXMub3V0ZXIuZGlnZXN0KHcpfX0sMTUyODM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2ODI4MyksXz15KDEyOTAxKSxnPUkucm90bDMyLEI9SS5zdW0zMix3PUkuc3VtMzJfMyxQPUkuc3VtMzJfNCxGPV8uQmxvY2tIYXNoO2Z1bmN0aW9uIE8oKXtpZighKHRoaXMgaW5z''@;'; put 'put ''dGFuY2VvZiBPKSlyZXR1cm4gbmV3IE87Ri5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIHoocSxlZSxKLG5lKXtyZXR1cm4gcTw9MTU/ZWVeSl5uZTpx''@;'; put 'put ''PD0zMT9lZSZKfH5lZSZuZTpxPD00Nz8oZWV8fkopXm5lOnE8PTYzP2VlJm5lfEomfm5lOmVlXihKfH5uZSl9ZnVuY3Rpb24gTChxKXtyZXR1cm4gcTw9MTU/MTM1MjgyOTkyNjpxPD0zMT8xNTQ4NjAzNjg0OnE8PTQ3PzE4MzYwNzI2OTE6cTw9NjM/MjA1Mzk5NDIxNzowfUkuaW5oZXJpdHMo''@;'; put 'put ''TyxGKSxYLnJpcGVtZDE2MD1PLE8uYmxvY2tTaXplPTUxMixPLm91dFNpemU9MTYwLE8uaG1hY1N0cmVuZ3RoPTE5MixPLnBhZExlbmd0aD02NCxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGVlLEope2Zvcih2YXIgbmU9dGhpcy5oWzBdLGllPXRoaXMuaFsxXSxsZT10aGlzLmhbMl0s''@;'; put 'put ''bWU9dGhpcy5oWzNdLF9lPXRoaXMuaFs0XSxUZT1uZSxTZT1pZSxqZT1sZSxWPW1lLHA9X2UsYj0wO2I8ODA7YisrKXt2YXIgeD1CKGcoUChuZSx6KGIsaWUsbGUsbWUpLGVlW0tbYl0rSl0sKHE9Yik8PTE1PzA6cTw9MzE/MTUxODUwMDI0OTpxPD00Nz8xODU5Nzc1MzkzOnE8PTYzPzI0MDA5''@;'; put 'put ''NTk3MDg6Mjg0MDg1MzgzOCksV1tiXSksX2UpO25lPV9lLF9lPW1lLG1lPWcobGUsMTApLGxlPWllLGllPXgseD1CKGcoUChUZSx6KDc5LWIsU2UsamUsViksZWVbVVtiXStKXSxMKGIpKSxZW2JdKSxwKSxUZT1wLHA9VixWPWcoamUsMTApLGplPVNlLFNlPXh9dmFyIHE7eD13KHRoaXMuaFsx''@;'; put 'put ''XSxsZSxWKSx0aGlzLmhbMV09dyh0aGlzLmhbMl0sbWUscCksdGhpcy5oWzJdPXcodGhpcy5oWzNdLF9lLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbNF0sbmUsU2UpLHRoaXMuaFs0XT13KHRoaXMuaFswXSxpZSxqZSksdGhpcy5oWzBdPXh9LE8ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24o''@;'; put 'put ''ZWUpe3JldHVybiJoZXgiPT09ZWU/SS50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6SS5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBLPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwx''@;'; put 'put ''NCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLFU9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1''@;'; put 'put ''LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sVz1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwx''@;'; put 'put ''MywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywx''@;'; put 'put ''NCwxMSw4LDUsNl0sWT1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDks''@;'; put 'put ''MTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDc4NTI4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO1guc2hhMT15KDMzNDY4KSxYLnNoYTIyND15KDU1NjMpLFguc2hhMjU2PXkoMjcxMzgpLFguc2hhMzg0PXkoOTM4OTgpLFguc2hhNTEyPXkoMTA4''@;'; put 'put ''MjcpfSwzMzQ2ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY4MjgzKSxfPXkoMTI5MDEpLGc9eSg5NTU0MiksQj1JLnJvdGwzMix3PUkuc3VtMzIsUD1JLnN1bTMyXzUsRj1nLmZ0XzEsTz1fLkJsb2NrSGFzaCx6PVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwz''@;'; put 'put ''Mzk1NDY5NzgyXTtmdW5jdGlvbiBOKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTikpcmV0dXJuIG5ldyBOO08uY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX1JLmluaGVy''@;'; put 'put ''aXRzKE4sTyksdWUuZXhwb3J0cz1OLE4uYmxvY2tTaXplPTUxMixOLm91dFNpemU9MTYwLE4uaG1hY1N0cmVuZ3RoPTgwLE4ucGFkTGVuZ3RoPTY0LE4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSyxVKXtmb3IodmFyIFc9dGhpcy5XLFk9MDtZPDE2O1krKylXW1ldPUtbVStZXTtmb3Io''@;'; put 'put ''O1k8Vy5sZW5ndGg7WSsrKVdbWV09QihXW1ktM11eV1tZLThdXldbWS0xNF1eV1tZLTE2XSwxKTt2YXIgcT10aGlzLmhbMF0sZWU9dGhpcy5oWzFdLEo9dGhpcy5oWzJdLG5lPXRoaXMuaFszXSxpZT10aGlzLmhbNF07Zm9yKFk9MDtZPFcubGVuZ3RoO1krKyl7dmFyIGxlPX5+KFkvMjApLG1l''@;'; put 'put ''PVAoQihxLDUpLEYobGUsZWUsSixuZSksaWUsV1tZXSx6W2xlXSk7aWU9bmUsbmU9SixKPUIoZWUsMzApLGVlPXEscT1tZX10aGlzLmhbMF09dyh0aGlzLmhbMF0scSksdGhpcy5oWzFdPXcodGhpcy5oWzFdLGVlKSx0aGlzLmhbMl09dyh0aGlzLmhbMl0sSiksdGhpcy5oWzNdPXcodGhpcy5o''@;'; put 'put ''WzNdLG5lKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0saWUpfSxOLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEspe3JldHVybiJoZXgiPT09Sz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDU1NjM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEk9eSg2ODI4MyksXz15KDI3MTM4KTtmdW5jdGlvbiBnKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnO18uY2FsbCh0aGlzKSx0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2''@;'; put 'put ''ODM5LDMyMDQwNzU0MjhdfUkuaW5oZXJpdHMoZyxfKSx1ZS5leHBvcnRzPWcsZy5ibG9ja1NpemU9NTEyLGcub3V0U2l6ZT0yMjQsZy5obWFjU3RyZW5ndGg9MTkyLGcucGFkTGVuZ3RoPTY0LGcucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuImhleCI9PT13P0kudG9IZXgz''@;'; put 'put ''Mih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKX19LDI3MTM4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjgyODMpLF89eSgxMjkwMSksZz15KDk1NTQyKSxCPXkoMzkyMTApLHc9SS5zdW0zMixQPUkuc3VtMzJfNCxG''@;'; put 'put ''PUkuc3VtMzJfNSxPPWcuY2gzMix6PWcubWFqMzIsTj1nLnMwXzI1NixMPWcuczFfMjU2LEs9Zy5nMF8yNTYsVT1nLmcxXzI1NixXPV8uQmxvY2tIYXNoLFk9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0''@;'; put 'put ''OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1''@;'; put 'put ''NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYx''@;'; put 'put ''MDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEz''@;'; put 'put ''MjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gcSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBu''@;'; put 'put ''ZXcgcTtXLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPVksdGhpcy5XPW5ldyBBcnJheSg2NCl9SS5pbmhlcml0cyhxLFcpLHVlLmV4''@;'; put 'put ''cG9ydHM9cSxxLmJsb2NrU2l6ZT01MTIscS5vdXRTaXplPTI1NixxLmhtYWNTdHJlbmd0aD0xOTIscS5wYWRMZW5ndGg9NjQscS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihKLG5lKXtmb3IodmFyIGllPXRoaXMuVyxsZT0wO2xlPDE2O2xlKyspaWVbbGVdPUpbbmUrbGVdO2Zvcig7bGU8''@;'; put 'put ''aWUubGVuZ3RoO2xlKyspaWVbbGVdPVAoVShpZVtsZS0yXSksaWVbbGUtN10sSyhpZVtsZS0xNV0pLGllW2xlLTE2XSk7dmFyIG1lPXRoaXMuaFswXSxfZT10aGlzLmhbMV0sVGU9dGhpcy5oWzJdLFNlPXRoaXMuaFszXSxqZT10aGlzLmhbNF0sVj10aGlzLmhbNV0scD10aGlzLmhbNl0sYj10''@;'; put 'put ''aGlzLmhbN107Zm9yKEIodGhpcy5rLmxlbmd0aD09PWllLmxlbmd0aCksbGU9MDtsZTxpZS5sZW5ndGg7bGUrKyl7dmFyIHg9RihiLEwoamUpLE8oamUsVixwKSx0aGlzLmtbbGVdLGllW2xlXSksQz13KE4obWUpLHoobWUsX2UsVGUpKTtiPXAscD1WLFY9amUsamU9dyhTZSx4KSxTZT1UZSxU''@;'; put 'put ''ZT1fZSxfZT1tZSxtZT13KHgsQyl9dGhpcy5oWzBdPXcodGhpcy5oWzBdLG1lKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sX2UpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxUZSksdGhpcy5oWzNdPXcodGhpcy5oWzNdLFNlKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0samUpLHRoaXMuaFs1XT13KHRo''@;'; put 'put ''aXMuaFs1XSxWKSx0aGlzLmhbNl09dyh0aGlzLmhbNl0scCksdGhpcy5oWzddPXcodGhpcy5oWzddLGIpfSxxLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEope3JldHVybiJoZXgiPT09Sj9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDkzODk4''@;'; put 'put ''Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjgyODMpLF89eSgxMDgyNyk7ZnVuY3Rpb24gZygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZztfLmNhbGwodGhpcyksdGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMs''@;'; put 'put ''MjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2MjgxMywzMjA0MDc1NDI4XX1JLmluaGVyaXRzKGcsXyksdWUuZXhwb3J0cz1nLGcuYmxv''@;'; put 'put ''Y2tTaXplPTEwMjQsZy5vdXRTaXplPTM4NCxnLmhtYWNTdHJlbmd0aD0xOTIsZy5wYWRMZW5ndGg9MTI4LGcucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuImhleCI9PT13P0kudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpOkkuc3BsaXQzMih0aGlzLmguc2xp''@;'; put 'put ''Y2UoMCwxMiksImJpZyIpfX0sMTA4Mjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2ODI4MyksXz15KDEyOTAxKSxnPXkoMzkyMTApLEI9SS5yb3RyNjRfaGksdz1JLnJvdHI2NF9sbyxQPUkuc2hyNjRfaGksRj1JLnNocjY0X2xvLE89SS5zdW02NCx6PUkuc3VtNjRfaGksTj1J''@;'; put 'put ''LnN1bTY0X2xvLEw9SS5zdW02NF80X2hpLEs9SS5zdW02NF80X2xvLFU9SS5zdW02NF81X2hpLFc9SS5zdW02NF81X2xvLFk9Xy5CbG9ja0hhc2gscT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIx''@;'; put 'put ''NzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4''@;'; put 'put ''ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3''@;'; put 'put ''Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwy''@;'; put 'put ''NTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1''@;'; put 'put ''NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0''@;'; put 'put ''MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwx''@;'; put 'put ''MzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0''@;'; put 'put ''MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4''@;'; put 'put ''MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4''@;'; put 'put ''NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0''@;'; put 'put ''aW9uIGVlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZWUpKXJldHVybiBuZXcgZWU7WS5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMx''@;'; put 'put ''MTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXEsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIEooeCxDLFQsSCxqKXt2YXIgRT14JlRefngmajtyZXR1cm4gRTwwJiYoRSs9NDI5''@;'; put 'put ''NDk2NzI5NiksRX1mdW5jdGlvbiBuZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXn5DJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gaWUoeCxDLFQsSCxqKXt2YXIgRT14JlReeCZqXlQmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBsZSh4''@;'; put 'put ''LEMsVCxILGosRSl7dmFyIG09QyZIXkMmRV5IJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gbWUoeCxDKXt2YXIgRT1CKHgsQywyOCleQihDLHgsMileQihDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gX2UoeCxDKXt2YXIgRT13''@;'; put 'put ''KHgsQywyOCledyhDLHgsMiledyhDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gVGUoeCxDKXt2YXIgRT1CKHgsQywxNCleQih4LEMsMTgpXkIoQyx4LDkpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFNlKHgsQyl7dmFyIEU9dyh4''@;'; put 'put ''LEMsMTQpXncoeCxDLDE4KV53KEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBqZSh4LEMpe3ZhciBFPUIoeCxDLDEpXkIoeCxDLDgpXlAoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFYoeCxDKXt2YXIgRT13KHgsQywx''@;'; put 'put ''KV53KHgsQyw4KV5GKHgsQyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBwKHgsQyl7dmFyIEU9Qih4LEMsMTkpXkIoQyx4LDI5KV5QKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBiKHgsQyl7dmFyIEU9dyh4LEMsMTkpXnco''@;'; put 'put ''Qyx4LDI5KV5GKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1JLmluaGVyaXRzKGVlLFkpLHVlLmV4cG9ydHM9ZWUsZWUuYmxvY2tTaXplPTEwMjQsZWUub3V0U2l6ZT01MTIsZWUuaG1hY1N0cmVuZ3RoPTE5MixlZS5wYWRMZW5ndGg9MTI4LGVlLnByb3RvdHlwZS5fcHJl''@;'; put 'put ''cGFyZUJsb2NrPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPXRoaXMuVyxqPTA7ajwzMjtqKyspSFtqXT1DW1Qral07Zm9yKDtqPEgubGVuZ3RoO2orPTIpe3ZhciBFPXAoSFtqLTRdLEhbai0zXSksbT1iKEhbai00XSxIW2otM10pLEE9SFtqLTE0XSxhZT1IW2otMTNdLHRlPWplKEhbai0zMF0s''@;'; put 'put ''SFtqLTI5XSksc2U9VihIW2otMzBdLEhbai0yOV0pLHdlPUhbai0zMl0sVWU9SFtqLTMxXTtIW2pdPUwoRSxtLEEsYWUsdGUsc2Usd2UsVWUpLEhbaisxXT1LKEUsbSxBLGFlLHRlLHNlLHdlLFVlKX19LGVlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEMsVCl7dGhpcy5fcHJlcGFyZUJs''@;'; put 'put ''b2NrKEMsVCk7dmFyIEg9dGhpcy5XLGo9dGhpcy5oWzBdLEU9dGhpcy5oWzFdLG09dGhpcy5oWzJdLEE9dGhpcy5oWzNdLGFlPXRoaXMuaFs0XSx0ZT10aGlzLmhbNV0sc2U9dGhpcy5oWzZdLHdlPXRoaXMuaFs3XSxVZT10aGlzLmhbOF0sSmU9dGhpcy5oWzldLG90PXRoaXMuaFsxMF0seGU9''@;'; put 'put ''dGhpcy5oWzExXSx2ZT10aGlzLmhbMTJdLFhlPXRoaXMuaFsxM10semU9dGhpcy5oWzE0XSxEZT10aGlzLmhbMTVdO2codGhpcy5rLmxlbmd0aD09PUgubGVuZ3RoKTtmb3IodmFyIEZlPTA7RmU8SC5sZW5ndGg7RmUrPTIpe3ZhciBPZT16ZSxJZT1EZSxWZT1UZShVZSxKZSksa2U9U2UoVWUs''@;'; put 'put ''SmUpLEFlPUooVWUsMCxvdCwwLHZlKSxfdD1uZSgwLEplLDAseGUsMCxYZSksbnQ9dGhpcy5rW0ZlXSxRZT10aGlzLmtbRmUrMV0sdW49SFtGZV0seXQ9SFtGZSsxXSxNdD1VKE9lLEllLFZlLGtlLEFlLF90LG50LFFlLHVuLHl0KSxEdD1XKE9lLEllLFZlLGtlLEFlLF90LG50LFFlLHVuLHl0''@;'; put 'put ''KTtPZT1tZShqLEUpLEllPV9lKGosRSksVmU9aWUoaiwwLG0sMCxhZSksa2U9bGUoMCxFLDAsQSwwLHRlKTt2YXIgaXQ9eihPZSxJZSxWZSxrZSksJGU9TihPZSxJZSxWZSxrZSk7emU9dmUsRGU9WGUsdmU9b3QsWGU9eGUsb3Q9VWUseGU9SmUsVWU9eihzZSx3ZSxNdCxEdCksSmU9Tih3ZSx3''@;'; put 'put ''ZSxNdCxEdCksc2U9YWUsd2U9dGUsYWU9bSx0ZT1BLG09aixBPUUsaj16KE10LER0LGl0LCRlKSxFPU4oTXQsRHQsaXQsJGUpfU8odGhpcy5oLDAsaixFKSxPKHRoaXMuaCwyLG0sQSksTyh0aGlzLmgsNCxhZSx0ZSksTyh0aGlzLmgsNixzZSx3ZSksTyh0aGlzLmgsOCxVZSxKZSksTyh0aGlz''@;'; put 'put ''LmgsMTAsb3QseGUpLE8odGhpcy5oLDEyLHZlLFhlKSxPKHRoaXMuaCwxNCx6ZSxEZSl9LGVlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEMpe3JldHVybiJoZXgiPT09Qz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDk1NTQyOih1ZSxYLHkp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBfPXkoNjgyODMpLnJvdHIzMjtmdW5jdGlvbiBCKEwsSyxVKXtyZXR1cm4gTCZLXn5MJlV9ZnVuY3Rpb24gdyhMLEssVSl7cmV0dXJuIEwmS15MJlVeSyZVfWZ1bmN0aW9uIFAoTCxLLFUpe3JldHVybiBMXkteVX1YLmZ0XzE9ZnVuY3Rpb24gZyhMLEssVSxX''@;'; put 'put ''KXtyZXR1cm4gMD09PUw/QihLLFUsVyk6MT09PUx8fDM9PT1MP1AoSyxVLFcpOjI9PT1MP3coSyxVLFcpOnZvaWQgMH0sWC5jaDMyPUIsWC5tYWozMj13LFgucDMyPVAsWC5zMF8yNTY9ZnVuY3Rpb24gRihMKXtyZXR1cm4gXyhMLDIpXl8oTCwxMyleXyhMLDIyKX0sWC5zMV8yNTY9ZnVuY3Rp''@;'; put 'put ''b24gTyhMKXtyZXR1cm4gXyhMLDYpXl8oTCwxMSleXyhMLDI1KX0sWC5nMF8yNTY9ZnVuY3Rpb24geihMKXtyZXR1cm4gXyhMLDcpXl8oTCwxOCleTD4+PjN9LFguZzFfMjU2PWZ1bmN0aW9uIE4oTCl7cmV0dXJuIF8oTCwxNyleXyhMLDE5KV5MPj4+MTB9fSw2ODI4MzoodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDM5MjEwKSxfPXkoNzE5OTMpO2Z1bmN0aW9uIGcoYix4KXtyZXR1cm4hKDU1Mjk2IT0oNjQ1MTImYi5jaGFyQ29kZUF0KHgpKXx8eDwwfHx4KzE+PWIubGVuZ3RoKSYmNTYzMjA9PSg2NDUxMiZiLmNoYXJDb2RlQXQoeCsxKSl9ZnVuY3Rpb24gUChiKXtyZXR1''@;'; put 'put ''cm4oYj4+PjI0fGI+Pj44JjY1MjgwfGI8PDgmMTY3MTE2ODB8KDI1NSZiKTw8MjQpPj4+MH1mdW5jdGlvbiBPKGIpe3JldHVybiAxPT09Yi5sZW5ndGg/IjAiK2I6Yn1mdW5jdGlvbiB6KGIpe3JldHVybiA3PT09Yi5sZW5ndGg/IjAiK2I6Nj09PWIubGVuZ3RoPyIwMCIrYjo1PT09Yi5sZW5n''@;'; put 'put ''dGg/IjAwMCIrYjo0PT09Yi5sZW5ndGg/IjAwMDAiK2I6Mz09PWIubGVuZ3RoPyIwMDAwMCIrYjoyPT09Yi5sZW5ndGg/IjAwMDAwMCIrYjoxPT09Yi5sZW5ndGg/IjAwMDAwMDAiK2I6Yn1YLmluaGVyaXRzPV8sWC50b0FycmF5PWZ1bmN0aW9uIEIoYix4KXtpZihBcnJheS5pc0FycmF5KGIp''@;'; put 'put ''KXJldHVybiBiLnNsaWNlKCk7aWYoIWIpcmV0dXJuW107dmFyIEM9W107aWYoInN0cmluZyI9PXR5cGVvZiBiKWlmKHgpe2lmKCJoZXgiPT09eClmb3IoKGI9Yi5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihiPSIwIitiKSxIPTA7SDxiLmxlbmd0aDtIKz0yKUMu''@;'; put 'put ''cHVzaChwYXJzZUludChiW0hdK2JbSCsxXSwxNikpfWVsc2UgZm9yKHZhciBUPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgaj1iLmNoYXJDb2RlQXQoSCk7ajwxMjg/Q1tUKytdPWo6ajwyMDQ4PyhDW1QrK109aj4+NnwxOTIsQ1tUKytdPTYzJmp8MTI4KTpnKGIsSCk/KGo9NjU1MzYrKCgx''@;'; put 'put ''MDIzJmopPDwxMCkrKDEwMjMmYi5jaGFyQ29kZUF0KCsrSCkpLENbVCsrXT1qPj4xOHwyNDAsQ1tUKytdPWo+PjEyJjYzfDEyOCxDW1QrK109aj4+NiY2M3wxMjgsQ1tUKytdPTYzJmp8MTI4KTooQ1tUKytdPWo+PjEyfDIyNCxDW1QrK109aj4+NiY2M3wxMjgsQ1tUKytdPTYzJmp8MTI4KX1l''@;'; put 'put ''bHNlIGZvcihIPTA7SDxiLmxlbmd0aDtIKyspQ1tIXT0wfGJbSF07cmV0dXJuIEN9LFgudG9IZXg9ZnVuY3Rpb24gdyhiKXtmb3IodmFyIHg9IiIsQz0wO0M8Yi5sZW5ndGg7QysrKXgrPU8oYltDXS50b1N0cmluZygxNikpO3JldHVybiB4fSxYLmh0b25sPVAsWC50b0hleDMyPWZ1bmN0aW9u''@;'; put 'put ''IEYoYix4KXtmb3IodmFyIEM9IiIsVD0wO1Q8Yi5sZW5ndGg7VCsrKXt2YXIgSD1iW1RdOyJsaXR0bGUiPT09eCYmKEg9UChIKSksQys9eihILnRvU3RyaW5nKDE2KSl9cmV0dXJuIEN9LFguemVybzI9TyxYLnplcm84PXosWC5qb2luMzI9ZnVuY3Rpb24gTihiLHgsQyxUKXt2YXIgSD1DLXg7''@;'; put 'put ''SShIJTQ9PTApO2Zvcih2YXIgaj1uZXcgQXJyYXkoSC80KSxFPTAsbT14O0U8ai5sZW5ndGg7RSsrLG0rPTQpaltFXT0oImJpZyI9PT1UP2JbbV08PDI0fGJbbSsxXTw8MTZ8YlttKzJdPDw4fGJbbSszXTpiW20rM108PDI0fGJbbSsyXTw8MTZ8YlttKzFdPDw4fGJbbV0pPj4+MDtyZXR1cm4g''@;'; put 'put ''an0sWC5zcGxpdDMyPWZ1bmN0aW9uIEwoYix4KXtmb3IodmFyIEM9bmV3IEFycmF5KDQqYi5sZW5ndGgpLFQ9MCxIPTA7VDxiLmxlbmd0aDtUKyssSCs9NCl7dmFyIGo9YltUXTsiYmlnIj09PXg/KENbSF09aj4+PjI0LENbSCsxXT1qPj4+MTYmMjU1LENbSCsyXT1qPj4+OCYyNTUsQ1tIKzNd''@;'; put 'put ''PTI1NSZqKTooQ1tIKzNdPWo+Pj4yNCxDW0grMl09aj4+PjE2JjI1NSxDW0grMV09aj4+PjgmMjU1LENbSF09MjU1JmopfXJldHVybiBDfSxYLnJvdHIzMj1mdW5jdGlvbiBLKGIseCl7cmV0dXJuIGI+Pj54fGI8PDMyLXh9LFgucm90bDMyPWZ1bmN0aW9uIFUoYix4KXtyZXR1cm4gYjw8eHxi''@;'; put 'put ''Pj4+MzIteH0sWC5zdW0zMj1mdW5jdGlvbiBXKGIseCl7cmV0dXJuIGIreD4+PjB9LFguc3VtMzJfMz1mdW5jdGlvbiBZKGIseCxDKXtyZXR1cm4gYit4K0M+Pj4wfSxYLnN1bTMyXzQ9ZnVuY3Rpb24gcShiLHgsQyxUKXtyZXR1cm4gYit4K0MrVD4+PjB9LFguc3VtMzJfNT1mdW5jdGlvbiBl''@;'; put 'put ''ZShiLHgsQyxULEgpe3JldHVybiBiK3grQytUK0g+Pj4wfSxYLnN1bTY0PWZ1bmN0aW9uIEooYix4LEMsVCl7dmFyIEU9VCtiW3grMV0+Pj4wO2JbeF09KEU8VD8xOjApK0MrYlt4XT4+PjAsYlt4KzFdPUV9LFguc3VtNjRfaGk9ZnVuY3Rpb24gbmUoYix4LEMsVCl7cmV0dXJuKHgrVD4+PjA8''@;'; put 'put ''eD8xOjApK2IrQz4+PjB9LFguc3VtNjRfbG89ZnVuY3Rpb24gaWUoYix4LEMsVCl7cmV0dXJuIHgrVD4+PjB9LFguc3VtNjRfNF9oaT1mdW5jdGlvbiBsZShiLHgsQyxULEgsaixFLG0pe3ZhciBBPTAsYWU9eDtyZXR1cm4gQSs9KGFlPWFlK1Q+Pj4wKTx4PzE6MCxBKz0oYWU9YWUraj4+PjAp''@;'; put 'put ''PGo/MTowLGIrQytIK0UrKEErPShhZT1hZSttPj4+MCk8bT8xOjApPj4+MH0sWC5zdW02NF80X2xvPWZ1bmN0aW9uIG1lKGIseCxDLFQsSCxqLEUsbSl7cmV0dXJuIHgrVCtqK20+Pj4wfSxYLnN1bTY0XzVfaGk9ZnVuY3Rpb24gX2UoYix4LEMsVCxILGosRSxtLEEsYWUpe3ZhciB0ZT0wLHNl''@;'; put 'put ''PXg7cmV0dXJuIHRlKz0oc2U9c2UrVD4+PjApPHg/MTowLHRlKz0oc2U9c2Uraj4+PjApPGo/MTowLHRlKz0oc2U9c2UrbT4+PjApPG0/MTowLGIrQytIK0UrQSsodGUrPShzZT1zZSthZT4+PjApPGFlPzE6MCk+Pj4wfSxYLnN1bTY0XzVfbG89ZnVuY3Rpb24gVGUoYix4LEMsVCxILGosRSxt''@;'; put 'put ''LEEsYWUpe3JldHVybiB4K1QraittK2FlPj4+MH0sWC5yb3RyNjRfaGk9ZnVuY3Rpb24gU2UoYix4LEMpe3JldHVybih4PDwzMi1DfGI+Pj5DKT4+PjB9LFgucm90cjY0X2xvPWZ1bmN0aW9uIGplKGIseCxDKXtyZXR1cm4oYjw8MzItQ3x4Pj4+Qyk+Pj4wfSxYLnNocjY0X2hpPWZ1bmN0aW9u''@;'; put 'put ''IFYoYix4LEMpe3JldHVybiBiPj4+Q30sWC5zaHI2NF9sbz1mdW5jdGlvbiBwKGIseCxDKXtyZXR1cm4oYjw8MzItQ3x4Pj4+Qyk+Pj4wfX0sMzM1NTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1MjUyOSksXz15KDIxODMyKSxnPXkoMzkyMTApO2Z1bmN0aW9uIEIodyl7aWYo''@;'; put 'put ''ISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBCKHcpO3RoaXMuaGFzaD13Lmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhdy5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT13Lm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5n''@;'; put 'put ''dGgsdGhpcy5fcmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBQPV8udG9BcnJheSh3LmVudHJvcHksdy5lbnRyb3B5RW5jfHwiaGV4IiksRj1fLnRvQXJyYXkody5ub25jZSx3Lm5vbmNlRW5jfHwiaGV4IiksTz1fLnRvQXJy''@;'; put 'put ''YXkody5wZXJzLHcucGVyc0VuY3x8ImhleCIpO2coUC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoUCxGLE8pfXVlLmV4cG9ydHM9QixCLnByb3RvdHlwZS5faW5p''@;'; put 'put ''dD1mdW5jdGlvbihQLEYsTyl7dmFyIHo9UC5jb25jYXQoRikuY29uY2F0KE8pO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIE49MDtOPHRoaXMuVi5sZW5ndGg7TisrKXRoaXMuS1tOXT0wLHRoaXMuVltOXT0x''@;'; put 'put ''O3RoaXMuX3VwZGF0ZSh6KSx0aGlzLl9yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sQi5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihQ''@;'; put 'put ''KXt2YXIgRj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7UCYmKEY9Ri51cGRhdGUoUCkpLHRoaXMuSz1GLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksUCYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMu''@;'; put 'put ''VikudXBkYXRlKFsxXSkudXBkYXRlKFApLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxCLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oUCxGLE8seil7InN0cmluZyIhPXR5cGVvZiBGJiYoej1PLE89RixGPW51bGwpLFA9Xy50b0FycmF5''@;'; put 'put ''KFAsRiksTz1fLnRvQXJyYXkoTyx6KSxnKFAubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUoUC5jb25jYXQoT3x8W10pKSx0aGlzLl9yZXNlZWQ9MX0sQi5wcm90''@;'; put 'put ''b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oUCxGLE8seil7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIEYmJih6PU8sTz1GLEY9bnVsbCksTyYmKE89Xy50b0FycmF5KE8senx8''@;'; put 'put ''ImhleCIpLHRoaXMuX3VwZGF0ZShPKSk7Zm9yKHZhciBOPVtdO04ubGVuZ3RoPFA7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksTj1OLmNvbmNhdCh0aGlzLlYpO3ZhciBMPU4uc2xpY2UoMCxQKTtyZXR1cm4gdGhpcy5fdXBkYXRlKE8pLHRoaXMuX3Jlc2Vl''@;'; put 'put ''ZCsrLF8uZW5jb2RlKEwsRil9fSw5MzY5NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDkzODA3KS5CdWZmZXI7WC5fZGJjcz16O2Zvcih2YXIgXz0tMSxnPS0yLEI9LTEwLHc9LTFlMyxQPW5ldyBBcnJheSgyNTYpLE89MDtPPDI1NjtPKyspUFtPXT1fO2Z1bmN0aW9uIHooVSxX''@;'; put 'put ''KXtpZih0aGlzLmVuY29kaW5nTmFtZT1VLmVuY29kaW5nTmFtZSwhVSl0aHJvdyBuZXcgRXJyb3IoIkRCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuIik7aWYoIVUudGFibGUpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyAnIit0aGlzLmVuY29kaW5nTmFtZSsiJyBoYXMg''@;'; put 'put ''bm8gZGF0YS4iKTt2YXIgWT1VLnRhYmxlKCk7dGhpcy5kZWNvZGVUYWJsZXM9W10sdGhpcy5kZWNvZGVUYWJsZXNbMF09UC5zbGljZSgwKSx0aGlzLmRlY29kZVRhYmxlU2VxPVtdO2Zvcih2YXIgcT0wO3E8WS5sZW5ndGg7cSsrKXRoaXMuX2FkZERlY29kZUNodW5rKFlbcV0pO3RoaXMuZGVm''@;'; put 'put ''YXVsdENoYXJVbmljb2RlPVcuZGVmYXVsdENoYXJVbmljb2RlLHRoaXMuZW5jb2RlVGFibGU9W10sdGhpcy5lbmNvZGVUYWJsZVNlcT1bXTt2YXIgZWU9e307aWYoVS5lbmNvZGVTa2lwVmFscylmb3IocT0wO3E8VS5lbmNvZGVTa2lwVmFscy5sZW5ndGg7cSsrKXt2YXIgSj1VLmVuY29kZVNr''@;'; put 'put ''aXBWYWxzW3FdO2lmKCJudW1iZXIiPT10eXBlb2YgSillZVtKXT0hMDtlbHNlIGZvcih2YXIgbmU9Si5mcm9tO25lPD1KLnRvO25lKyspZWVbbmVdPSEwfWlmKHRoaXMuX2ZpbGxFbmNvZGVUYWJsZSgwLDAsZWUpLFUuZW5jb2RlQWRkKWZvcih2YXIgaWUgaW4gVS5lbmNvZGVBZGQpT2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUuZW5jb2RlQWRkLGllKSYmdGhpcy5fc2V0RW5jb2RlQ2hhcihpZS5jaGFyQ29kZUF0KDApLFUuZW5jb2RlQWRkW2llXSk7aWYodGhpcy5kZWZDaGFyU0I9dGhpcy5lbmNvZGVUYWJsZVswXVtXLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5j''@;'; put 'put ''aGFyQ29kZUF0KDApXSx0aGlzLmRlZkNoYXJTQj09PV8mJih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdWyI/Il0pLHRoaXMuZGVmQ2hhclNCPT09XyYmKHRoaXMuZGVmQ2hhclNCPTYzKSwiZnVuY3Rpb24iPT10eXBlb2YgVS5nYjE4MDMwKXt0aGlzLmdiMTgwMzA9VS5nYjE4''@;'; put 'put ''MDMwKCk7dmFyIGxlPXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCxtZT10aGlzLmRlY29kZVRhYmxlc1tsZV09UC5zbGljZSgwKSxfZT10aGlzLmRlY29kZVRhYmxlcy5sZW5ndGgsVGU9dGhpcy5kZWNvZGVUYWJsZXNbX2VdPVAuc2xpY2UoMCk7Zm9yKHE9MTI5O3E8PTI1NDtxKyspe3ZhciBq''@;'; put 'put ''ZT10aGlzLmRlY29kZVRhYmxlc1t3LXRoaXMuZGVjb2RlVGFibGVzWzBdW3FdXTtmb3IobmU9NDg7bmU8PTU3O25lKyspamVbbmVdPXctbGV9Zm9yKHE9MTI5O3E8PTI1NDtxKyspbWVbcV09dy1fZTtmb3IocT00ODtxPD01NztxKyspVGVbcV09Z319ZnVuY3Rpb24gTihVLFcpe3RoaXMubGVh''@;'; put 'put ''ZFN1cnJvZ2F0ZT0tMSx0aGlzLnNlcU9iaj12b2lkIDAsdGhpcy5lbmNvZGVUYWJsZT1XLmVuY29kZVRhYmxlLHRoaXMuZW5jb2RlVGFibGVTZXE9Vy5lbmNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZT1XLmRlZkNoYXJTQix0aGlzLmdiMTgwMzA9Vy5nYjE4MDMwfWZ1''@;'; put 'put ''bmN0aW9uIEwoVSxXKXt0aGlzLm5vZGVJZHg9MCx0aGlzLnByZXZCdWY9SS5hbGxvYygwKSx0aGlzLmRlY29kZVRhYmxlcz1XLmRlY29kZVRhYmxlcyx0aGlzLmRlY29kZVRhYmxlU2VxPVcuZGVjb2RlVGFibGVTZXEsdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9Vy5kZWZhdWx0Q2hhclVuaWNv''@;'; put 'put ''ZGUsdGhpcy5nYjE4MDMwPVcuZ2IxODAzMH1mdW5jdGlvbiBLKFUsVyl7aWYoVVswXT5XKXJldHVybi0xO2Zvcih2YXIgWT0wLHE9VS5sZW5ndGg7WTxxLTE7KXt2YXIgZWU9WStNYXRoLmZsb29yKChxLVkrMSkvMik7VVtlZV08PVc/WT1lZTpxPWVlfXJldHVybiBZfXoucHJvdG90eXBlLmVu''@;'; put 'put ''Y29kZXI9Tix6LnByb3RvdHlwZS5kZWNvZGVyPUwsei5wcm90b3R5cGUuX2dldERlY29kZVRyaWVOb2RlPWZ1bmN0aW9uKFUpe2Zvcih2YXIgVz1bXTtVPjA7VT4+PTgpVy5wdXNoKDI1NSZVKTswPT1XLmxlbmd0aCYmVy5wdXNoKDApO2Zvcih2YXIgWT10aGlzLmRlY29kZVRhYmxlc1swXSxx''@;'; put 'put ''PVcubGVuZ3RoLTE7cT4wO3EtLSl7dmFyIGVlPVlbV1txXV07aWYoZWU9PV8pWVtXW3FdXT13LXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCx0aGlzLmRlY29kZVRhYmxlcy5wdXNoKFk9UC5zbGljZSgwKSk7ZWxzZXtpZighKGVlPD13KSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJ3cml0ZSBieXRl''@;'; put 'put ''IGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiwgYWRkcjogIitVLnRvU3RyaW5nKDE2KSk7WT10aGlzLmRlY29kZVRhYmxlc1t3LWVlXX19cmV0dXJuIFl9LHoucHJvdG90eXBlLl9hZGREZWNvZGVDaHVuaz1mdW5jdGlvbihVKXt2YXIgVz1wYXJzZUludChVWzBdLDE2KSxZPXRoaXMuX2dldERl''@;'; put 'put ''Y29kZVRyaWVOb2RlKFcpO1cmPTI1NTtmb3IodmFyIHE9MTtxPFUubGVuZ3RoO3ErKyl7dmFyIGVlPVVbcV07aWYoInN0cmluZyI9PXR5cGVvZiBlZSlmb3IodmFyIEo9MDtKPGVlLmxlbmd0aDspe3ZhciBuZT1lZS5jaGFyQ29kZUF0KEorKyk7aWYoNTUyOTY8PW5lJiZuZTw1NjMyMCl7dmFy''@;'; put 'put ''IGllPWVlLmNoYXJDb2RlQXQoSisrKTtpZighKDU2MzIwPD1pZSYmaWU8NTczNDQpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHN1cnJvZ2F0ZSBwYWlyIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBjaHVuayAiK1VbMF0pO1lbVysrXT02NTUzNisxMDI0KihuZS01NTI5NikrKGll''@;'; put 'put ''LTU2MzIwKX1lbHNlIGlmKDQwODA8bmUmJm5lPD00MDk1KXtmb3IodmFyIGxlPTQwOTUtbmUrMixtZT1bXSxfZT0wO19lPGxlO19lKyspbWUucHVzaChlZS5jaGFyQ29kZUF0KEorKykpO1lbVysrXT1CLXRoaXMuZGVjb2RlVGFibGVTZXEubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVTZXEucHVz''@;'; put 'put ''aChtZSl9ZWxzZSBZW1crK109bmV9ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIGVlKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHR5cGUgJyIrdHlwZW9mIGVlKyInIGdpdmVuIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBjaHVuayAiK1VbMF0pO3ZhciBUZT1ZW1ctMV0rMTtmb3Io''@;'; put 'put ''Sj0wO0o8ZWU7SisrKVlbVysrXT1UZSsrfX1pZihXPjI1NSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBjaHVuayBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgYWRkciAiK1VbMF0rIjogdG9vIGxvbmciK1cpfSx6LnByb3RvdHlwZS5fZ2V0RW5jb2RlQnVja2V0PWZ1bmN0aW9uKFUp''@;'; put 'put ''e3ZhciBXPVU+Pjg7cmV0dXJuIHZvaWQgMD09PXRoaXMuZW5jb2RlVGFibGVbV10mJih0aGlzLmVuY29kZVRhYmxlW1ddPVAuc2xpY2UoMCkpLHRoaXMuZW5jb2RlVGFibGVbV119LHoucHJvdG90eXBlLl9zZXRFbmNvZGVDaGFyPWZ1bmN0aW9uKFUsVyl7dmFyIFk9dGhpcy5fZ2V0RW5jb2Rl''@;'; put 'put ''QnVja2V0KFUpLHE9MjU1JlU7WVtxXTw9Qj90aGlzLmVuY29kZVRhYmxlU2VxW0ItWVtxXV1bLTFdPVc6WVtxXT09XyYmKFlbcV09Vyl9LHoucHJvdG90eXBlLl9zZXRFbmNvZGVTZXF1ZW5jZT1mdW5jdGlvbihVLFcpe3ZhciBKLFk9VVswXSxxPXRoaXMuX2dldEVuY29kZUJ1Y2tldChZKSxl''@;'; put 'put ''ZT0yNTUmWTtxW2VlXTw9Qj9KPXRoaXMuZW5jb2RlVGFibGVTZXFbQi1xW2VlXV06KEo9e30scVtlZV0hPT1fJiYoSlstMV09cVtlZV0pLHFbZWVdPUItdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGgsdGhpcy5lbmNvZGVUYWJsZVNlcS5wdXNoKEopKTtmb3IodmFyIG5lPTE7bmU8VS5sZW5n''@;'; put 'put ''dGgtMTtuZSsrKXt2YXIgaWU9SltZXTsib2JqZWN0Ij09dHlwZW9mIGllP0o9aWU6KEo9SltZXT17fSx2b2lkIDAhPT1pZSYmKEpbLTFdPWllKSl9SltZPVVbVS5sZW5ndGgtMV1dPVd9LHoucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGU9ZnVuY3Rpb24oVSxXLFkpe2Zvcih2YXIgcT10aGlz''@;'; put 'put ''LmRlY29kZVRhYmxlc1tVXSxlZT0wO2VlPDI1NjtlZSsrKXt2YXIgSj1xW2VlXSxuZT1XK2VlO1lbbmVdfHwoSj49MD90aGlzLl9zZXRFbmNvZGVDaGFyKEosbmUpOko8PXc/dGhpcy5fZmlsbEVuY29kZVRhYmxlKHctSixuZTw8OCxZKTpKPD1CJiZ0aGlzLl9zZXRFbmNvZGVTZXF1ZW5jZSh0''@;'; put 'put ''aGlzLmRlY29kZVRhYmxlU2VxW0ItSl0sbmUpKX19LE4ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFUpe2Zvcih2YXIgVz1JLmFsbG9jKFUubGVuZ3RoKih0aGlzLmdiMTgwMzA/NDozKSksWT10aGlzLmxlYWRTdXJyb2dhdGUscT10aGlzLnNlcU9iaixlZT0tMSxKPTAsbmU9MDs7KXtpZigt''@;'; put 'put ''MT09PWVlKXtpZihKPT1VLmxlbmd0aClicmVhazt2YXIgaWU9VS5jaGFyQ29kZUF0KEorKyl9ZWxzZSBpZT1lZSxlZT0tMTtpZig1NTI5Njw9aWUmJmllPDU3MzQ0KWlmKGllPDU2MzIwKXtpZigtMT09PVkpe1k9aWU7Y29udGludWV9WT1pZSxpZT1ffWVsc2UtMSE9PVk/KGllPTY1NTM2KzEw''@;'; put 'put ''MjQqKFktNTUyOTYpKyhpZS01NjMyMCksWT0tMSk6aWU9XztlbHNlLTEhPT1ZJiYoZWU9aWUsaWU9XyxZPS0xKTt2YXIgbGU9XztpZih2b2lkIDAhPT1xJiZpZSE9Xyl7dmFyIG1lPXFbaWVdO2lmKCJvYmplY3QiPT10eXBlb2YgbWUpe3E9bWU7Y29udGludWV9Im51bWJlciI9PXR5cGVvZiBt''@;'; put 'put ''ZT9sZT1tZTpudWxsPT1tZSYmdm9pZCAwIT09KG1lPXFbLTFdKSYmKGxlPW1lLGVlPWllKSxxPXZvaWQgMH1lbHNlIGlmKGllPj0wKXt2YXIgX2U9dGhpcy5lbmNvZGVUYWJsZVtpZT4+OF07aWYodm9pZCAwIT09X2UmJihsZT1fZVsyNTUmaWVdKSxsZTw9Qil7cT10aGlzLmVuY29kZVRhYmxl''@;'; put 'put ''U2VxW0ItbGVdO2NvbnRpbnVlfWlmKGxlPT1fJiZ0aGlzLmdiMTgwMzApe3ZhciBUZT1LKHRoaXMuZ2IxODAzMC51Q2hhcnMsaWUpO2lmKC0xIT1UZSl7bGU9dGhpcy5nYjE4MDMwLmdiQ2hhcnNbVGVdKyhpZS10aGlzLmdiMTgwMzAudUNoYXJzW1RlXSksV1tuZSsrXT0xMjkrTWF0aC5mbG9v''@;'; put 'put ''cihsZS8xMjYwMCksbGUlPTEyNjAwLFdbbmUrK109NDgrTWF0aC5mbG9vcihsZS8xMjYwKSxsZSU9MTI2MCxXW25lKytdPTEyOStNYXRoLmZsb29yKGxlLzEwKSxXW25lKytdPTQ4KyhsZSU9MTApO2NvbnRpbnVlfX19bGU9PT1fJiYobGU9dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUpLGxl''@;'; put 'put ''PDI1Nj9XW25lKytdPWxlOmxlPDY1NTM2PyhXW25lKytdPWxlPj44LFdbbmUrK109MjU1JmxlKTooV1tuZSsrXT1sZT4+MTYsV1tuZSsrXT1sZT4+OCYyNTUsV1tuZSsrXT0yNTUmbGUpfXJldHVybiB0aGlzLnNlcU9iaj1xLHRoaXMubGVhZFN1cnJvZ2F0ZT1ZLFcuc2xpY2UoMCxuZSl9LE4u''@;'; put 'put ''cHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKC0xIT09dGhpcy5sZWFkU3Vycm9nYXRlfHx2b2lkIDAhPT10aGlzLnNlcU9iail7dmFyIFU9SS5hbGxvYygxMCksVz0wO2lmKHRoaXMuc2VxT2JqKXt2YXIgWT10aGlzLnNlcU9ialstMV07dm9pZCAwIT09WSYmKFk8MjU2P1VbVysrXT1ZOihV''@;'; put 'put ''W1crK109WT4+OCxVW1crK109MjU1JlkpKSx0aGlzLnNlcU9iaj12b2lkIDB9cmV0dXJuLTEhPT10aGlzLmxlYWRTdXJyb2dhdGUmJihVW1crK109dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUsdGhpcy5sZWFkU3Vycm9nYXRlPS0xKSxVLnNsaWNlKDAsVyl9fSxOLnByb3RvdHlwZS5maW5k''@;'; put 'put ''SWR4PUssTC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oVSl7dmFyIFc9SS5hbGxvYygyKlUubGVuZ3RoKSxZPXRoaXMubm9kZUlkeCxxPXRoaXMucHJldkJ1ZixlZT10aGlzLnByZXZCdWYubGVuZ3RoLEo9LXRoaXMucHJldkJ1Zi5sZW5ndGg7ZWU+MCYmKHE9SS5jb25jYXQoW3EsVS5zbGlj''@;'; put 'put ''ZSgwLDEwKV0pKTtmb3IodmFyIGllPTAsbGU9MDtpZTxVLmxlbmd0aDtpZSsrKXt2YXIgbmUsbWU9aWU+PTA/VVtpZV06cVtpZStlZV07aWYoISgobmU9dGhpcy5kZWNvZGVUYWJsZXNbWV1bbWVdKT49MCkpaWYobmU9PT1fKWllPUosbmU9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUuY2hhckNv''@;'; put 'put ''ZGVBdCgwKTtlbHNlIGlmKG5lPT09Zyl7dmFyIF9lPUo+PTA/VS5zbGljZShKLGllKzEpOnEuc2xpY2UoSitlZSxpZSsxK2VlKSxUZT0xMjYwMCooX2VbMF0tMTI5KSsxMjYwKihfZVsxXS00OCkrMTAqKF9lWzJdLTEyOSkrKF9lWzNdLTQ4KSxTZT1LKHRoaXMuZ2IxODAzMC5nYkNoYXJzLFRl''@;'; put 'put ''KTtuZT10aGlzLmdiMTgwMzAudUNoYXJzW1NlXStUZS10aGlzLmdiMTgwMzAuZ2JDaGFyc1tTZV19ZWxzZXtpZihuZTw9dyl7WT13LW5lO2NvbnRpbnVlfWlmKCEobmU8PUIpKXRocm93IG5ldyBFcnJvcigiaWNvbnYtbGl0ZSBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCBkZWNvZGluZyB0YWJs''@;'; put 'put ''ZSB2YWx1ZSAiK25lKyIgYXQgIitZKyIvIittZSk7Zm9yKHZhciBqZT10aGlzLmRlY29kZVRhYmxlU2VxW0ItbmVdLFY9MDtWPGplLmxlbmd0aC0xO1YrKylXW2xlKytdPTI1NSYobmU9amVbVl0pLFdbbGUrK109bmU+Pjg7bmU9amVbamUubGVuZ3RoLTFdfWlmKG5lPjY1NTM1KXtuZS09NjU1''@;'; put 'put ''MzY7dmFyIHA9NTUyOTYrTWF0aC5mbG9vcihuZS8xMDI0KTtXW2xlKytdPTI1NSZwLFdbbGUrK109cD4+OCxuZT01NjMyMCtuZSUxMDI0fVdbbGUrK109MjU1Jm5lLFdbbGUrK109bmU+PjgsWT0wLEo9aWUrMX1yZXR1cm4gdGhpcy5ub2RlSWR4PVksdGhpcy5wcmV2QnVmPUo+PTA/VS5zbGlj''@;'; put 'put ''ZShKKTpxLnNsaWNlKEorZWUpLFcuc2xpY2UoMCxsZSkudG9TdHJpbmcoInVjczIiKX0sTC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciBVPSIiO3RoaXMucHJldkJ1Zi5sZW5ndGg+MDspe1UrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlO3ZhciBXPXRoaXMucHJldkJ1Zi5zbGlj''@;'; put 'put ''ZSgxKTt0aGlzLnByZXZCdWY9SS5hbGxvYygwKSx0aGlzLm5vZGVJZHg9MCxXLmxlbmd0aD4wJiYoVSs9dGhpcy53cml0ZShXKSl9cmV0dXJuIHRoaXMubm9kZUlkeD0wLFV9fSw0NTI3ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXtzaGlmdGppczp7dHlwZToiX2RiY3Mi''@;'; put 'put ''LHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHkoNDA2NzkpfSxlbmNvZGVBZGQ6eyJceGE1Ijo5MiwiXHUyMDNlIjoxMjZ9LGVuY29kZVNraXBWYWxzOlt7ZnJvbTo2MDczNix0bzo2MzgwOH1dfSxjc3NoaWZ0amlzOiJzaGlmdGppcyIsbXNrYW5qaToic2hpZnRqaXMiLHNqaXM6InNoaWZ0amlz''@;'; put 'put ''Iix3aW5kb3dzMzFqOiJzaGlmdGppcyIsbXMzMWo6InNoaWZ0amlzIix4c2ppczoic2hpZnRqaXMiLHdpbmRvd3M5MzI6InNoaWZ0amlzIixtczkzMjoic2hpZnRqaXMiLDkzMjoic2hpZnRqaXMiLGNwOTMyOiJzaGlmdGppcyIsZXVjanA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB5KDU2NDA2KX0sZW5jb2RlQWRkOnsiXHhhNSI6OTIsIlx1MjAzZSI6MTI2fX0sZ2IyMzEyOiJjcDkzNiIsZ2IyMzEyODA6ImNwOTM2IixnYjIzMTIxOTgwOiJjcDkzNiIsY3NnYjIzMTI6ImNwOTM2Iixjc2lzbzU4Z2IyMzEyODA6ImNwOTM2IixldWNjbjoiY3A5MzYiLHdpbmRv''@;'; put 'put ''d3M5MzY6ImNwOTM2IixtczkzNjoiY3A5MzYiLDkzNjoiY3A5MzYiLGNwOTM2Ont0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4geSg3NDQ4OCl9fSxnYms6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiB5KDc0NDg4KS5jb25jYXQoeSg1NTkxNCkpfX0s''@;'; put 'put ''eGdiazoiZ2JrIixpc29pcjU4OiJnYmsiLGdiMTgwMzA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiB5KDc0NDg4KS5jb25jYXQoeSg1NTkxNCkpfSxnYjE4MDMwOmZ1bmN0aW9uKCl7cmV0dXJuIHkoOTkxMjkpfSxlbmNvZGVTa2lwVmFsczpbMTI4XSxlbmNvZGVBZGQ6''@;'; put 'put ''eyJcdTIwYWMiOjQxNjk5fX0sY2hpbmVzZToiZ2IxODAzMCIsd2luZG93czk0OToiY3A5NDkiLG1zOTQ5OiJjcDk0OSIsOTQ5OiJjcDk0OSIsY3A5NDk6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiB5KDIxMTY2KX19LGNzZXVja3I6ImNwOTQ5Iixjc2tzYzU2MDExOTg3''@;'; put 'put ''OiJjcDk0OSIsZXVja3I6ImNwOTQ5Iixpc29pcjE0OToiY3A5NDkiLGtvcmVhbjoiY3A5NDkiLGtzYzU2MDExOTg3OiJjcDk0OSIsa3NjNTYwMTE5ODk6ImNwOTQ5Iixrc2M1NjAxOiJjcDk0OSIsd2luZG93czk1MDoiY3A5NTAiLG1zOTUwOiJjcDk1MCIsOTUwOiJjcDk1MCIsY3A5NTA6e3R5''@;'; put 'put ''cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiB5KDcyMzI0KX19LGJpZzU6ImJpZzVoa3NjcyIsYmlnNWhrc2NzOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4geSg3MjMyNCkuY29uY2F0KHkoNDMyNjcpKX0sZW5jb2RlU2tpcFZhbHM6WzQxNjc2XX0sY25i''@;'; put 'put ''aWc1OiJiaWc1aGtzY3MiLGNzYmlnNToiYmlnNWhrc2NzIix4eGJpZzU6ImJpZzVoa3NjcyJ9fSw3Mjg5MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIEk9W3koMzc2NDApLHkoMzUwODkpLHkoNzE3NSkseSg5NzQ3KSx5KDU4Njc3KSx5KDc2MjMpLHkoMzAxODcpLHkoOTM2OTQp''@;'; put 'put ''LHkoNDUyNzgpXSxfPTA7XzxJLmxlbmd0aDtfKyspe3ZhciBnPUlbX107Zm9yKHZhciBCIGluIGcpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGcsQikmJihYW0JdPWdbQl0pfX0sMzc2NDA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzgwNykuQnVmZmVy''@;'; put 'put ''O2Z1bmN0aW9uIF8oeixOKXt0aGlzLmVuYz16LmVuY29kaW5nTmFtZSx0aGlzLmJvbUF3YXJlPXouYm9tQXdhcmUsImJhc2U2NCI9PT10aGlzLmVuYz90aGlzLmVuY29kZXI9UDoiY2VzdTgiPT09dGhpcy5lbmMmJih0aGlzLmVuYz0idXRmOCIsdGhpcy5lbmNvZGVyPUYsIlx1ezFmNGE5fSIh''@;'; put 'put ''PT1JLmZyb20oImVkYTBiZGVkYjJhOSIsImhleCIpLnRvU3RyaW5nKCkmJih0aGlzLmRlY29kZXI9Tyx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1OLmRlZmF1bHRDaGFyVW5pY29kZSkpfXVlLmV4cG9ydHM9e3V0Zjg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LGNlc3U4Ont0eXBl''@;'; put 'put ''OiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1bmljb2RlMTF1dGY4OiJ1dGY4Iix1Y3MyOnt0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1dGYxNmxlOiJ1Y3MyIixiaW5hcnk6e3R5cGU6Il9pbnRlcm5hbCJ9LGJhc2U2NDp7dHlwZToiX2ludGVybmFsIn0saGV4Ont0eXBlOiJfaW50''@;'; put 'put ''ZXJuYWwifSxfaW50ZXJuYWw6X30sXy5wcm90b3R5cGUuZW5jb2Rlcj13LF8ucHJvdG90eXBlLmRlY29kZXI9Qjt2YXIgZz15KDc4NDU0KS5JO2Z1bmN0aW9uIEIoeixOKXtnLmNhbGwodGhpcyxOLmVuYyl9ZnVuY3Rpb24gdyh6LE4pe3RoaXMuZW5jPU4uZW5jfWZ1bmN0aW9uIFAoeixOKXt0''@;'; put 'put ''aGlzLnByZXZTdHI9IiJ9ZnVuY3Rpb24gRih6LE4pe31mdW5jdGlvbiBPKHosTil7dGhpcy5hY2M9MCx0aGlzLmNvbnRCeXRlcz0wLHRoaXMuYWNjQnl0ZXM9MCx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1OLmRlZmF1bHRDaGFyVW5pY29kZX1nLnByb3RvdHlwZS5lbmR8fChnLnByb3RvdHlw''@;'; put 'put ''ZS5lbmQ9ZnVuY3Rpb24oKXt9KSxCLnByb3RvdHlwZT1nLnByb3RvdHlwZSx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtyZXR1cm4gSS5mcm9tKHosdGhpcy5lbmMpfSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LFAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope3ZhciBO''@;'; put 'put ''PSh6PXRoaXMucHJldlN0cit6KS5sZW5ndGgtei5sZW5ndGglNDtyZXR1cm4gdGhpcy5wcmV2U3RyPXouc2xpY2UoTiksej16LnNsaWNlKDAsTiksSS5mcm9tKHosImJhc2U2NCIpfSxQLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gSS5mcm9tKHRoaXMucHJldlN0ciwiYmFzZTY0''@;'; put 'put ''Iil9LEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj1JLmFsbG9jKDMqei5sZW5ndGgpLEw9MCxLPTA7Szx6Lmxlbmd0aDtLKyspe3ZhciBVPXouY2hhckNvZGVBdChLKTtVPDEyOD9OW0wrK109VTpVPDIwNDg/KE5bTCsrXT0xOTIrKFU+Pj42KSxOW0wrK109MTI4Kyg2''@;'; put 'put ''MyZVKSk6KE5bTCsrXT0yMjQrKFU+Pj4xMiksTltMKytdPTEyOCsoVT4+PjYmNjMpLE5bTCsrXT0xMjgrKDYzJlUpKX1yZXR1cm4gTi5zbGljZSgwLEwpfSxGLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LE8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj10aGlzLmFj''@;'; put 'put ''YyxMPXRoaXMuY29udEJ5dGVzLEs9dGhpcy5hY2NCeXRlcyxVPSIiLFc9MDtXPHoubGVuZ3RoO1crKyl7dmFyIFk9eltXXTsxMjghPSgxOTImWSk/KEw+MCYmKFUrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLEw9MCksWTwxMjg/VSs9U3RyaW5nLmZyb21DaGFyQ29kZShZKTpZPDIyND8oTj0z''@;'; put 'put ''MSZZLEw9MSxLPTEpOlk8MjQwPyhOPTE1JlksTD0yLEs9MSk6VSs9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUpOkw+MD8oTj1OPDw2fDYzJlksSysrLDA9PS0tTCYmKFUrPTI9PT1LJiZOPDEyOCYmTj4wfHwzPT09SyYmTjwyMDQ4P3RoaXMuZGVmYXVsdENoYXJVbmljb2RlOlN0cmluZy5mcm9t''@;'; put 'put ''Q2hhckNvZGUoTikpKTpVKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZX1yZXR1cm4gdGhpcy5hY2M9Tix0aGlzLmNvbnRCeXRlcz1MLHRoaXMuYWNjQnl0ZXM9SyxVfSxPLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgej0wO3JldHVybiB0aGlzLmNvbnRCeXRlcz4wJiYoeis9dGhpcy5k''@;'; put 'put ''ZWZhdWx0Q2hhclVuaWNvZGUpLHp9fSw1ODY3NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gXyh3LFApe2lmKCF3KXRocm93IG5ldyBFcnJvcigiU0JDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtpZighdy5jaGFy''@;'; put 'put ''c3x8MTI4IT09dy5jaGFycy5sZW5ndGgmJjI1NiE9PXcuY2hhcnMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgJyIrdy50eXBlKyInIGhhcyBpbmNvcnJlY3QgJ2NoYXJzJyAobXVzdCBiZSBvZiBsZW4gMTI4IG9yIDI1NikiKTtpZigxMjg9PT13LmNoYXJzLmxlbmd0aCl7Zm9y''@;'; put 'put ''KHZhciBGPSIiLE89MDtPPDEyODtPKyspRis9U3RyaW5nLmZyb21DaGFyQ29kZShPKTt3LmNoYXJzPUYrdy5jaGFyc310aGlzLmRlY29kZUJ1Zj1JLmZyb20ody5jaGFycywidWNzMiIpO3ZhciB6PUkuYWxsb2MoNjU1MzYsUC5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUuY2hhckNvZGVBdCgwKSk7''@;'; put 'put ''Zm9yKE89MDtPPHcuY2hhcnMubGVuZ3RoO08rKyl6W3cuY2hhcnMuY2hhckNvZGVBdChPKV09Tzt0aGlzLmVuY29kZUJ1Zj16fWZ1bmN0aW9uIGcodyxQKXt0aGlzLmVuY29kZUJ1Zj1QLmVuY29kZUJ1Zn1mdW5jdGlvbiBCKHcsUCl7dGhpcy5kZWNvZGVCdWY9UC5kZWNvZGVCdWZ9WC5fc2Jj''@;'; put 'put ''cz1fLF8ucHJvdG90eXBlLmVuY29kZXI9ZyxfLnByb3RvdHlwZS5kZWNvZGVyPUIsZy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odyl7Zm9yKHZhciBQPUkuYWxsb2Mody5sZW5ndGgpLEY9MDtGPHcubGVuZ3RoO0YrKylQW0ZdPXRoaXMuZW5jb2RlQnVmW3cuY2hhckNvZGVBdChGKV07cmV0''@;'; put 'put ''dXJuIFB9LGcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sQi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odyl7Zm9yKHZhciBQPXRoaXMuZGVjb2RlQnVmLEY9SS5hbGxvYygyKncubGVuZ3RoKSxPPTAsej0wLE49MDtOPHcubGVuZ3RoO04rKylGW3o9MipOXT1QW089Mip3W05dXSxGW3or''@;'; put 'put ''MV09UFtPKzFdO3JldHVybiBGLnRvU3RyaW5nKCJ1Y3MyIil9LEIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe319LDMwMTg3OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ezQzNzoiY3A0MzciLDczNzoiY3A3MzciLDc3NToiY3A3NzUiLDg1MDoiY3A4NTAiLDg1MjoiY3A4NTIiLDg1''@;'; put 'put ''NToiY3A4NTUiLDg1NjoiY3A4NTYiLDg1NzoiY3A4NTciLDg1ODoiY3A4NTgiLDg2MDoiY3A4NjAiLDg2MToiY3A4NjEiLDg2MjoiY3A4NjIiLDg2MzoiY3A4NjMiLDg2NDoiY3A4NjQiLDg2NToiY3A4NjUiLDg2NjoiY3A4NjYiLDg2OToiY3A4NjkiLDg3NDoid2luZG93czg3NCIsOTIyOiJj''@;'; put 'put ''cDkyMiIsMTA0NjoiY3AxMDQ2IiwxMTI0OiJjcDExMjQiLDExMjU6ImNwMTEyNSIsMTEyOToiY3AxMTI5IiwxMTMzOiJjcDExMzMiLDExNjE6ImNwMTE2MSIsMTE2MjoiY3AxMTYyIiwxMTYzOiJjcDExNjMiLDEyNTA6IndpbmRvd3MxMjUwIiwxMjUxOiJ3aW5kb3dzMTI1MSIsMTI1Mjoid2lu''@;'; put 'put ''ZG93czEyNTIiLDEyNTM6IndpbmRvd3MxMjUzIiwxMjU0OiJ3aW5kb3dzMTI1NCIsMTI1NToid2luZG93czEyNTUiLDEyNTY6IndpbmRvd3MxMjU2IiwxMjU3OiJ3aW5kb3dzMTI1NyIsMTI1ODoid2luZG93czEyNTgiLDI4NTkxOiJpc284ODU5MSIsMjg1OTI6Imlzbzg4NTkyIiwyODU5Mzoi''@;'; put 'put ''aXNvODg1OTMiLDI4NTk0OiJpc284ODU5NCIsMjg1OTU6Imlzbzg4NTk1IiwyODU5NjoiaXNvODg1OTYiLDI4NTk3OiJpc284ODU5NyIsMjg1OTg6Imlzbzg4NTk4IiwyODU5OToiaXNvODg1OTkiLDI4NjAwOiJpc284ODU5MTAiLDI4NjAxOiJpc284ODU5MTEiLDI4NjAzOiJpc284ODU5MTMi''@;'; put 'put ''LDI4NjA0OiJpc284ODU5MTQiLDI4NjA1OiJpc284ODU5MTUiLDI4NjA2OiJpc284ODU5MTYiLHdpbmRvd3M4NzQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUw''@;'; put 'put ''OFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1''@;'; put 'put ''MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUz''@;'; put 'put ''Zlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1''@;'; put 'put ''MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LHdpbjg3NDoid2luZG93czg3NCIsY3A4NzQ6IndpbmRvd3M4NzQiLHdpbmRvd3MxMjUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1''@;'; put 'put ''MDE2MFx1MjAzOVx1MDE1YVx1MDE2NFx1MDE3ZFx1MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAyZDhcdTAxNDFceGE0XHUwMTA0XHhh''@;'; put 'put ''Nlx4YTdceGE4XHhhOVx1MDE1ZVx4YWJceGFjXHhhZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1MDE0Mlx4YjRceGI1XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVmXHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAx''@;'; put 'put ''MGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhl''@;'; put 'put ''OVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSx3aW4xMjUwOiJ3aW5kb3dzMTI1MCIsY3AxMjUwOiJ3aW5kb3dzMTI1MCIsd2luZG93''@;'; put 'put ''czEyNTE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEz''@;'; put 'put ''XHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1XHhi''@;'; put 'put ''Nlx4YjdcdTA0NTFcdTIxMTZcdTA0NTRceGJiXHUwNDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIy''@;'; put 'put ''XHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUw''@;'; put 'put ''NDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sd2luMTI1MToid2luZG93czEyNTEiLGNwMTI1MToid2luZG93czEyNTEiLHdpbmRvd3MxMjUyOnt0''@;'; put 'put ''eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1''@;'; put 'put ''MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhi''@;'; put 'put ''ZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2''@;'; put 'put ''XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHdpbjEyNTI6IndpbmRvd3MxMjUyIixjcDEyNTI6IndpbmRvd3MxMjUyIix3aW5kb3dzMTI1Mzp7dHlwZToi''@;'; put 'put ''X3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRc''@;'; put 'put ''dTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwMzg1XHUwMzg2XHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhiNVx4YjZceGI3XHUwMzg4XHUwMzg5XHUwMzhh''@;'; put 'put ''XHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZc''@;'; put 'put ''dTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAz''@;'; put 'put ''YzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQifSx3aW4xMjUzOiJ3aW5kb3dzMTI1MyIsY3AxMjUzOiJ3aW5kb3dzMTI1MyIsd2luZG93czEyNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFj''@;'; put 'put ''XHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUw''@;'; put 'put ''MTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMz''@;'; put 'put ''XHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhl''@;'; put 'put ''Ylx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIn0sd2luMTI1NDoid2luZG93czEyNTQiLGNwMTI1NDoid2luZG93czEyNTQiLHdpbmRvd3MxMjU1Ont0eXBlOiJfc2JjcyIsY2hhcnM6''@;'; put 'put ''Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1''@;'; put 'put ''MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBc''@;'; put 'put ''dTA1YjFcdTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdTA1YmFcdTA1YmJcdTA1YmNcdTA1YmRcdTA1YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdc''@;'; put 'put ''dTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQifSx3aW4xMjU1OiJ3aW5kb3dzMTI1NSIsY3AxMjU1OiJ3aW5kb3dzMTI1NSIsd2luZG93czEyNTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHUwNjdlXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUy''@;'; put 'put ''MDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwNjc5XHUyMDM5XHUwMTUyXHUwNjg2XHUwNjk4XHUwNjg4XHUwNmFmXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUyMDNhXHUwMTUzXHUyMDBjXHUyMDBkXHUwNmJhXHhhMFx1MDYwY1x4''@;'; put 'put ''YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHUwNmJlXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1MDZjMVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYy''@;'; put 'put ''Nlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNceGUwXHUwNjQ0XHhlMlx1''@;'; put 'put ''MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx4ZTdceGU4XHhlOVx4ZWFceGViXHUwNjQ5XHUwNjRhXHhlZVx4ZWZcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZiXHhmY1x1MjAwZVx1MjAwZlx1MDZkMiJ9LHdpbjEyNTY6IndpbmRv''@;'; put 'put ''d3MxMjU2IixjcDEyNTY6IndpbmRvd3MxMjU2Iix3aW5kb3dzMTI1Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAx''@;'; put 'put ''OFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIy''@;'; put 'put ''XHhiM1x4YjRceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhk''@;'; put 'put ''M1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0''@;'; put 'put ''XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTAyZDkifSx3aW4xMjU3OiJ3aW5kb3dzMTI1NyIsY3AxMjU3OiJ3aW5kb3dzMTI1NyIsd2luZG93czEyNTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZk''@;'; put 'put ''XHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0''@;'; put 'put ''XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhl''@;'; put 'put ''YVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LHdpbjEyNTg6IndpbmRvd3MxMjU4IixjcDEyNTg6IndpbmRvd3MxMjU4Iixpc284ODU5MTp7dHlwZToiX3NiY3Mi''@;'; put 'put ''LGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZc''@;'; put 'put ''eGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4''@;'; put 'put ''ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhm''@;'; put 'put ''OVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGNwMjg1OTE6Imlzbzg4NTkxIixpc284ODU5Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1''@;'; put 'put ''XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAyZDhcdTAxNDFceGE0XHUwMTNkXHUwMTVhXHhhN1x4YThcdTAxNjBcdTAxNWVcdTAxNjRcdTAxNzlceGFkXHUwMTdkXHUwMTdiXHhiMFx1MDEwNVx1MDJkYlx1MDE0Mlx4YjRcdTAxM2VcdTAxNWJc''@;'; put 'put ''dTAyYzdceGI4XHUwMTYxXHUwMTVmXHUwMTY1XHUwMTdhXHUwMmRkXHUwMTdlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4''@;'; put 'put ''ZDZceGQ3XHUwMTU4XHUwMTZlXHhkYVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhm''@;'; put 'put ''N1x1MDE1OVx1MDE2Zlx4ZmFcdTAxNzFceGZjXHhmZFx1MDE2M1x1MDJkOSJ9LGNwMjg1OTI6Imlzbzg4NTkyIixpc284ODU5Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4''@;'; put 'put ''OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMjZcdTAyZDhceGEzXHhhNFx1ZmZmZFx1MDEyNFx4YTdceGE4XHUwMTMwXHUwMTVlXHUwMTFlXHUwMTM0XHhhZFx1ZmZmZFx1MDE3Ylx4YjBcdTAxMjdceGIyXHhiM1x4YjRc''@;'; put 'put ''eGI1XHUwMTI1XHhiN1x4YjhcdTAxMzFcdTAxNWZcdTAxMWZcdTAxMzVceGJkXHVmZmZkXHUwMTdjXHhjMFx4YzFceGMyXHVmZmZkXHhjNFx1MDEwYVx1MDEwOFx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1ZmZmZFx4ZDFceGQyXHhkM1x4ZDRcdTAxMjBceGQ2XHhkN1x1''@;'; put 'put ''MDExY1x4ZDlceGRhXHhkYlx4ZGNcdTAxNmNcdTAxNWNceGRmXHhlMFx4ZTFceGUyXHVmZmZkXHhlNFx1MDEwYlx1MDEwOVx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1ZmZmZFx4ZjFceGYyXHhmM1x4ZjRcdTAxMjFceGY2XHhmN1x1MDExZFx4ZjlceGZhXHhmYlx4ZmNc''@;'; put 'put ''dTAxNmRcdTAxNWRcdTAyZDkifSxjcDI4NTkzOiJpc284ODU5MyIsaXNvODg1OTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3''@;'; put 'put ''XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTM4XHUwMTU2XHhhNFx1MDEyOFx1MDEzYlx4YTdceGE4XHUwMTYwXHUwMTEyXHUwMTIyXHUwMTY2XHhhZFx1MDE3ZFx4YWZceGIwXHUwMTA1XHUwMmRiXHUwMTU3XHhiNFx1MDEyOVx1MDEzY1x1MDJjN1x4Yjhc''@;'; put 'put ''dTAxNjFcdTAxMTNcdTAxMjNcdTAxNjdcdTAxNGFcdTAxN2VcdTAxNGJcdTAxMDBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZcdTAxMmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHUwMTJhXHUwMTEwXHUwMTQ1XHUwMTRjXHUwMTM2XHhkNFx4ZDVceGQ2XHhkN1x4ZDhcdTAx''@;'; put 'put ''NzJceGRhXHhkYlx4ZGNcdTAxNjhcdTAxNmFceGRmXHUwMTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx1MDEyYlx1MDExMVx1MDE0Nlx1MDE0ZFx1MDEzN1x4ZjRceGY1XHhmNlx4ZjdceGY4XHUwMTczXHhmYVx4ZmJc''@;'; put 'put ''eGZjXHUwMTY5XHUwMTZiXHUwMmQ5In0sY3AyODU5NDoiaXNvODg1OTQiLGlzbzg4NTk1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2''@;'; put 'put ''XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQwM1x1MDQwNFx1MDQwNVx1MDQwNlx1MDQwN1x1MDQwOFx1MDQwOVx1MDQwYVx1MDQwYlx1MDQwY1x4YWRcdTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVc''@;'; put 'put ''dTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0''@;'; put 'put ''MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNc''@;'; put 'put ''dTA0NGRcdTA0NGVcdTA0NGZcdTIxMTZcdTA0NTFcdTA0NTJcdTA0NTNcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NWFcdTA0NWJcdTA0NWNceGE3XHUwNDVlXHUwNDVmIn0sY3AyODU5NToiaXNvODg1OTUiLGlzbzg4NTk2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4''@;'; put 'put ''ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA2MGNceGFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFiXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFmXHVmZmZkXHUwNjIxXHUwNjIy''@;'; put 'put ''XHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUwNjUxXHUwNjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sY3AyODU5NjoiaXNvODg1OTYiLGlzbzg4NTk3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJc''@;'; put 'put ''eDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MjAxOFx1MjAxOVx4YTNcdTIwYWNcdTIwYWZceGE2XHhhN1x4YThceGE5XHUwMzdhXHhhYlx4YWNceGFkXHVmZmZkXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx1MDM4NVx1MDM4Nlx4''@;'; put 'put ''YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNh''@;'; put 'put ''M1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1''@;'; put 'put ''MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCJ9LGNwMjg1OTc6Imlzbzg4NTk3Iixpc284ODU5ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJc''@;'; put 'put ''eDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFi''@;'; put 'put ''XHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxN1x1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1''@;'; put 'put ''MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCJ9LGNwMjg1OTg6Imlzbzg4NTk4Iixpc284ODU5''@;'; put 'put ''OTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4''@;'; put 'put ''YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhj''@;'; put 'put ''Y1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYz''@;'; put 'put ''XHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiJ9LGNwMjg1OTk6Imlzbzg4NTk5Iixpc284ODU5MTA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhl''@;'; put 'put ''XHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTEyXHUwMTIyXHUwMTJhXHUwMTI4XHUwMTM2XHhhN1x1MDEzYlx1MDExMFx1MDE2MFx1MDE2Nlx1MDE3ZFx4YWRcdTAxNmFcdTAxNGFceGIwXHUw''@;'; put 'put ''MTA1XHUwMTEzXHUwMTIzXHUwMTJiXHUwMTI5XHUwMTM3XHhiN1x1MDEzY1x1MDExMVx1MDE2MVx1MDE2N1x1MDE3ZVx1MjAxNVx1MDE2Ylx1MDE0Ylx1MDEwMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx1MDEyZVx1MDEwY1x4YzlcdTAxMThceGNiXHUwMTE2XHhjZFx4Y2VceGNmXHhkMFx1''@;'; put 'put ''MDE0NVx1MDE0Y1x4ZDNceGQ0XHhkNVx4ZDZcdTAxNjhceGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHUwMTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx4ZWZceGYwXHUwMTQ2XHUwMTRkXHhmM1x4ZjRc''@;'; put 'put ''eGY1XHhmNlx1MDE2OVx4ZjhcdTAxNzNceGZhXHhmYlx4ZmNceGZkXHhmZVx1MDEzOCJ9LGNwMjg2MDA6Imlzbzg4NTkxMCIsaXNvODg1OTExOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4''@;'; put 'put ''OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUx''@;'; put 'put ''MFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1''@;'; put 'put ''MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0''@;'; put 'put ''N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg2MDE6Imlzbzg4NTkx''@;'; put 'put ''MSIsaXNvODg1OTEzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhh''@;'; put 'put ''MFx1MjAxZFx4YTJceGEzXHhhNFx1MjAxZVx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNcdTIwMWNceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4''@;'; put 'put ''YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUw''@;'; put 'put ''MTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTIwMTkifSxjcDI4NjAz''@;'; put 'put ''OiJpc284ODU5MTMiLGlzbzg4NTkxNDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRc''@;'; put 'put ''eDllXHg5Zlx4YTBcdTFlMDJcdTFlMDNceGEzXHUwMTBhXHUwMTBiXHUxZTBhXHhhN1x1MWU4MFx4YTlcdTFlODJcdTFlMGJcdTFlZjJceGFkXHhhZVx1MDE3OFx1MWUxZVx1MWUxZlx1MDEyMFx1MDEyMVx1MWU0MFx1MWU0MVx4YjZcdTFlNTZcdTFlODFcdTFlNTdcdTFlODNcdTFlNjBcdTFl''@;'; put 'put ''ZjNcdTFlODRcdTFlODVcdTFlNjFceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTc0XHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHUxZTZhXHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTc2XHhkZlx4ZTBceGUxXHhl''@;'; put 'put ''Mlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNzVceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZcdTFlNmJceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRcdTAxNzdceGZmIn0sY3AyODYwNDoiaXNvODg1OTE0Iixpc284ODU5MTU6e3R5cGU6Il9z''@;'; put 'put ''YmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHUyMGFjXHhh''@;'; put 'put ''NVx1MDE2MFx4YTdcdTAxNjFceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3ZFx4YjVceGI2XHhiN1x1MDE3ZVx4YjlceGJhXHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4''@;'; put 'put ''Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhm''@;'; put 'put ''NFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sY3AyODYwNToiaXNvODg1OTE1Iixpc284ODU5MTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4''@;'; put 'put ''OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTA1XHUwMTQxXHUyMGFjXHUyMDFlXHUwMTYwXHhhN1x1MDE2MVx4YTlcdTAyMThceGFiXHUwMTc5XHhhZFx1MDE3YVx1MDE3Ylx4YjBceGIxXHUwMTBjXHUw''@;'; put 'put ''MTQyXHUwMTdkXHUyMDFkXHhiNlx4YjdcdTAxN2VcdTAxMGRcdTAyMTlceGJiXHUwMTUyXHUwMTUzXHUwMTc4XHUwMTdjXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx1MDEwNlx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMTBcdTAxNDNceGQyXHhkM1x4ZDRcdTAx''@;'; put 'put ''NTBceGQ2XHUwMTVhXHUwMTcwXHhkOVx4ZGFceGRiXHhkY1x1MDExOFx1MDIxYVx4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHUwMTA3XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExMVx1MDE0NFx4ZjJceGYzXHhmNFx1MDE1MVx4ZjZcdTAxNWJcdTAxNzFc''@;'; put 'put ''eGY5XHhmYVx4ZmJceGZjXHUwMTE5XHUwMjFiXHhmZiJ9LGNwMjg2MDY6Imlzbzg4NTkxNiIsY3A0Mzc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2''@;'; put 'put ''XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUy''@;'; put 'put ''NTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5''@;'; put 'put ''XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlc''@;'; put 'put ''dTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm00Mzc6ImNwNDM3Iixjc2libTQzNzoiY3A0MzciLGNwNzM3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDM5MVx1MDM5Mlx1MDM5M1x1''@;'; put 'put ''MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNi''@;'; put 'put ''N1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1''@;'; put 'put ''MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1''@;'; put 'put ''Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4Zlx4''@;'; put 'put ''YjFcdTIyNjVcdTIyNjRcdTAzYWFcdTAzYWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTczNzoiY3A3MzciLGNzaWJtNzM3OiJjcDczNyIsY3A3NzU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwMTA2XHhmY1x4ZTlcdTAxMDFceGU0XHUw''@;'; put 'put ''MTIzXHhlNVx1MDEwN1x1MDE0Mlx1MDExM1x1MDE1Nlx1MDE1N1x1MDEyYlx1MDE3OVx4YzRceGM1XHhjOVx4ZTZceGM2XHUwMTRkXHhmNlx1MDEyMlx4YTJcdTAxNWFcdTAxNWJceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdceGE0XHUwMTAwXHUwMTJhXHhmM1x1MDE3Ylx1MDE3Y1x1MDE3YVx1''@;'; put 'put ''MjAxZFx4YTZceGE5XHhhZVx4YWNceGJkXHhiY1x1MDE0MVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUwMTA0XHUwMTBjXHUwMTE4XHUwMTE2XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTJlXHUwMTYwXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUy''@;'; put 'put ''NTAwXHUyNTNjXHUwMTcyXHUwMTZhXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUwMTdkXHUwMTA1XHUwMTBkXHUwMTE5XHUwMTE3XHUwMTJmXHUwMTYxXHUwMTczXHUwMTZiXHUwMTdlXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgw''@;'; put 'put ''XHhkM1x4ZGZcdTAxNGNcdTAxNDNceGY1XHhkNVx4YjVcdTAxNDRcdTAxMzZcdTAxMzdcdTAxM2JcdTAxM2NcdTAxNDZcdTAxMTJcdTAxNDVcdTIwMTlceGFkXHhiMVx1MjAxY1x4YmVceGI2XHhhN1x4ZjdcdTIwMWVceGIwXHUyMjE5XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm03''@;'; put 'put ''NzU6ImNwNzc1Iixjc2libTc3NToiY3A3NzUiLGNwODUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4''@;'; put 'put ''ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUy''@;'; put 'put ''NTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1''@;'; put 'put ''MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1MDoiY3A4NTAiLGNzaWJtODUwOiJj''@;'; put 'put ''cDg1MCIsY3A4NTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRcdTAxNmZcdTAxMDdceGU3XHUwMTQyXHhlYlx1MDE1MFx1MDE1MVx4ZWVcdTAxNzlceGM0XHUwMTA2XHhjOVx1MDEzOVx1MDEzYVx4ZjRceGY2XHUwMTNkXHUwMTNlXHUwMTVhXHUwMTViXHhkNlx4''@;'; put 'put ''ZGNcdTAxNjRcdTAxNjVcdTAxNDFceGQ3XHUwMTBkXHhlMVx4ZWRceGYzXHhmYVx1MDEwNFx1MDEwNVx1MDE3ZFx1MDE3ZVx1MDExOFx1MDExOVx4YWNcdTAxN2FcdTAxMGNcdTAxNWZceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHUwMTFhXHUwMTVlXHUy''@;'; put 'put ''NTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTdiXHUwMTdjXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTAyXHUwMTAzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDExMVx1MDExMFx1MDEwZVx4Y2JcdTAxMGZcdTAx''@;'; put 'put ''NDdceGNkXHhjZVx1MDExYlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDE2Mlx1MDE2ZVx1MjU4MFx4ZDNceGRmXHhkNFx1MDE0M1x1MDE0NFx1MDE0OFx1MDE2MFx1MDE2MVx1MDE1NFx4ZGFcdTAxNTVcdTAxNzBceGZkXHhkZFx1MDE2M1x4YjRceGFkXHUwMmRkXHUwMmRiXHUwMmM3XHUw''@;'; put 'put ''MmQ4XHhhN1x4ZjdceGI4XHhiMFx4YThcdTAyZDlcdTAxNzFcdTAxNThcdTAxNTlcdTI1YTBceGEwIn0saWJtODUyOiJjcDg1MiIsY3NpYm04NTI6ImNwODUyIixjcDg1NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0NTJcdTA0MDJcdTA0NTNcdTA0MDNcdTA0NTFcdTA0MDFcdTA0NTRcdTA0''@;'; put 'put ''MDRcdTA0NTVcdTA0MDVcdTA0NTZcdTA0MDZcdTA0NTdcdTA0MDdcdTA0NThcdTA0MDhcdTA0NTlcdTA0MDlcdTA0NWFcdTA0MGFcdTA0NWJcdTA0MGJcdTA0NWNcdTA0MGNcdTA0NWVcdTA0MGVcdTA0NWZcdTA0MGZcdTA0NGVcdTA0MmVcdTA0NGFcdTA0MmFcdTA0MzBcdTA0MTBcdTA0MzFc''@;'; put 'put ''dTA0MTFcdTA0NDZcdTA0MjZcdTA0MzRcdTA0MTRcdTA0MzVcdTA0MTVcdTA0NDRcdTA0MjRcdTA0MzNcdTA0MTNceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDQ0NVx1MDQyNVx1MDQzOFx1MDQxOFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDQzOVx1MDQxOVx1''@;'; put 'put ''MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDQzYVx1MDQxYVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTA0M2JcdTA0MWJcdTA0M2NcdTA0MWNcdTA0M2RcdTA0MWRcdTA0M2VcdTA0MWVcdTA0M2ZcdTI1MThcdTI1MGNc''@;'; put 'put ''dTI1ODhcdTI1ODRcdTA0MWZcdTA0NGZcdTI1ODBcdTA0MmZcdTA0NDBcdTA0MjBcdTA0NDFcdTA0MjFcdTA0NDJcdTA0MjJcdTA0NDNcdTA0MjNcdTA0MzZcdTA0MTZcdTA0MzJcdTA0MTJcdTA0NGNcdTA0MmNcdTIxMTZceGFkXHUwNDRiXHUwNDJiXHUwNDM3XHUwNDE3XHUwNDQ4XHUwNDI4''@;'; put 'put ''XHUwNDRkXHUwNDJkXHUwNDQ5XHUwNDI5XHUwNDQ3XHUwNDI3XHhhN1x1MjVhMFx4YTAifSxpYm04NTU6ImNwODU1Iixjc2libTg1NToiY3A4NTUiLGNwODU2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVk''@;'; put 'put ''OFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx4YTNcdWZmZmRceGQ3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhZVx4YWNceGJkXHhiY1x1ZmZmZFx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUy''@;'; put 'put ''NTFjXHUyNTAwXHUyNTNjXHVmZmZkXHVmZmZkXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZcdWZmZmRcdTI1''@;'; put 'put ''ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGI1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGli''@;'; put 'put ''bTg1NjoiY3A4NTYiLGNzaWJtODU2OiJjcDg1NiIsY3A4NTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2''@;'; put 'put ''XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1''@;'; put 'put ''ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1''@;'; put 'put ''ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU3OiJjcDg1''@;'; put 'put ''NyIsY3NpYm04NTc6ImNwODU3IixjcDg1ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4''@;'; put 'put ''ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUx''@;'; put 'put ''NFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUyMGFjXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQz''@;'; put 'put ''XHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTg6ImNwODU4Iixjc2libTg1ODoiY3A4NTgiLGNw''@;'; put 'put ''ODYwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGUzXHhlMFx4YzFceGU3XHhlYVx4Y2FceGU4XHhjZFx4ZDRceGVjXHhjM1x4YzJceGM5XHhjMFx4YzhceGY0XHhmNVx4ZjJceGRhXHhmOVx4Y2NceGQ1XHhkY1x4YTJceGEzXHhkOVx1MjBhN1x4ZDNceGUxXHhlZFx4''@;'; put 'put ''ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGQyXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUy''@;'; put 'put ''NTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThj''@;'; put 'put ''XHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUy''@;'; put 'put ''MjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjA6ImNwODYwIixjc2libTg2MDoiY3A4NjAiLGNwODYxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0''@;'; put 'put ''XHhmNlx4ZmVceGZiXHhkZFx4ZmRceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1''@;'; put 'put ''Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1''@;'; put 'put ''MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUy''@;'; put 'put ''MjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYxOiJjcDg2MSIsY3NpYm04NjE6ImNwODYxIixjcDg2Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBcdTA1ZDFcdTA1''@;'; put 'put ''ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFceGEyXHhhM1x4YTVcdTIwYTdc''@;'; put 'put ''dTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1''@;'; put 'put ''MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNc''@;'; put 'put ''dTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4''@;'; put 'put ''XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MjoiY3A4NjIiLGNzaWJtODYyOiJjcDg2MiIsY3A4NjM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4YzJceGUwXHhiNlx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MjAxN1x4YzBc''@;'; put 'put ''eGE3XHhjOVx4YzhceGNhXHhmNFx4Y2JceGNmXHhmYlx4ZjlceGE0XHhkNFx4ZGNceGEyXHhhM1x4ZDlceGRiXHUwMTkyXHhhNlx4YjRceGYzXHhmYVx4YThceGI4XHhiM1x4YWZceGNlXHUyMzEwXHhhY1x4YmRceGJjXHhiZVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0''@;'; put 'put ''XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUy''@;'; put 'put ''NTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIy''@;'; put 'put ''MWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjM6ImNwODYzIixjc2libTg2MzoiY3A4NjMiLGNwODY0Ont0eXBlOiJfc2JjcyIsY2hhcnM6''@;'; put 'put ''IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJFx1MDY2YSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpL''@;'; put 'put ''TE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGIwXHhiN1x1MjIxOVx1MjIxYVx1MjU5Mlx1MjUwMFx1MjUwMlx1MjUzY1x1MjUyNFx1MjUyY1x1MjUxY1x1MjUzNFx1MjUxMFx1MjUwY1x1MjUxNFx1MjUxOFx1MDNiMlx1MjIxZVx1MDNj''@;'; put 'put ''Nlx4YjFceGJkXHhiY1x1MjI0OFx4YWJceGJiXHVmZWY3XHVmZWY4XHVmZmZkXHVmZmZkXHVmZWZiXHVmZWZjXHVmZmZkXHhhMFx4YWRcdWZlODJceGEzXHhhNFx1ZmU4NFx1ZmZmZFx1ZmZmZFx1ZmU4ZVx1ZmU4Zlx1ZmU5NVx1ZmU5OVx1MDYwY1x1ZmU5ZFx1ZmVhMVx1ZmVhNVx1MDY2MFx1''@;'; put 'put ''MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1ZmVkMVx1MDYxYlx1ZmViMVx1ZmViNVx1ZmViOVx1MDYxZlx4YTJcdWZlODBcdWZlODFcdWZlODNcdWZlODVcdWZlY2FcdWZlOGJcdWZlOGRcdWZlOTFcdWZlOTNcdWZlOTdcdWZlOWJcdWZlOWZc''@;'; put 'put ''dWZlYTNcdWZlYTdcdWZlYTlcdWZlYWJcdWZlYWRcdWZlYWZcdWZlYjNcdWZlYjdcdWZlYmJcdWZlYmZcdWZlYzFcdWZlYzVcdWZlY2JcdWZlY2ZceGE2XHhhY1x4ZjdceGQ3XHVmZWM5XHUwNjQwXHVmZWQzXHVmZWQ3XHVmZWRiXHVmZWRmXHVmZWUzXHVmZWU3XHVmZWViXHVmZWVkXHVmZWVm''@;'; put 'put ''XHVmZWYzXHVmZWJkXHVmZWNjXHVmZWNlXHVmZWNkXHVmZWUxXHVmZTdkXHUwNjUxXHVmZWU1XHVmZWU5XHVmZWVjXHVmZWYwXHVmZWYyXHVmZWQwXHVmZWQ1XHVmZWY1XHVmZWY2XHVmZWRkXHVmZWQ5XHVmZWYxXHUyNWEwXHVmZmZkIn0saWJtODY0OiJjcDg2NCIsY3NpYm04NjQ6ImNwODY0''@;'; put 'put ''IixjcDg2NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUx''@;'; put 'put ''XHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YTRcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRc''@;'; put 'put ''dTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1''@;'; put 'put ''ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIx''@;'; put 'put ''OVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2NToiY3A4NjUiLGNzaWJtODY1OiJjcDg2NSIsY3A4NjY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFi''@;'; put 'put ''XHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUw''@;'; put 'put ''NDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJj''@;'; put 'put ''XHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUy''@;'; put 'put ''NTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4''@;'; put 'put ''YjdcdTIyMWFcdTIxMTZceGE0XHUyNWEwXHhhMCJ9LGlibTg2NjoiY3A4NjYiLGNzaWJtODY2OiJjcDg2NiIsY3A4Njk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzg2XHVmZmZkXHhiN1x4YWNceGE2XHUyMDE4XHUyMDE5XHUw''@;'; put 'put ''Mzg4XHUyMDE1XHUwMzg5XHUwMzhhXHUwM2FhXHUwMzhjXHVmZmZkXHVmZmZkXHUwMzhlXHUwM2FiXHhhOVx1MDM4Zlx4YjJceGIzXHUwM2FjXHhhM1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNjYVx1MDM5MFx1MDNjY1x1MDNjZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1''@;'; put 'put ''MDM5N1x4YmRcdTAzOThcdTAzOTlceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDM5ZVx1MDM5Zlx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDNh''@;'; put 'put ''MFx1MDNhMVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDNiNFx1MDNiNVx1MjU4MFx1MDNiNlx1MDNiN1x1''@;'; put 'put ''MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDM4NFx4YWRceGIxXHUwM2M1XHUwM2M2XHUwM2M3XHhhN1x1MDNjOFx1MDM4NVx4YjBceGE4XHUwM2M5XHUwM2NiXHUwM2IwXHUwM2NlXHUyNWEwXHhh''@;'; put 'put ''MCJ9LGlibTg2OToiY3A4NjkiLGNzaWJtODY5OiJjcDg2OSIsY3A5MjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4''@;'; put 'put ''OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVcdTIwM2VceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFc''@;'; put 'put ''eGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDE2MFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRcdTAxN2RceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4''@;'; put 'put ''ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDE2MVx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRcdTAxN2VceGZmIn0saWJtOTIyOiJjcDkyMiIsY3NpYm05MjI6ImNwOTIyIixjcDEwNDY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZTg4XHhkN1x4''@;'; put 'put ''ZjdcdWY4ZjZcdWY4ZjVcdWY4ZjRcdWY4ZjdcdWZlNzFceDg4XHUyNWEwXHUyNTAyXHUyNTAwXHUyNTEwXHUyNTBjXHUyNTE0XHUyNTE4XHVmZTc5XHVmZTdiXHVmZTdkXHVmZTdmXHVmZTc3XHVmZThhXHVmZWYwXHVmZWYzXHVmZWYyXHVmZWNlXHVmZWNmXHVmZWQwXHVmZWY2XHVmZWY4XHVm''@;'; put 'put ''ZWZhXHVmZWZjXHhhMFx1ZjhmYVx1ZjhmOVx1ZjhmOFx4YTRcdWY4ZmJcdWZlOGJcdWZlOTFcdWZlOTdcdWZlOWJcdWZlOWZcdWZlYTNcdTA2MGNceGFkXHVmZWE3XHVmZWIzXHUwNjYwXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHVmZWI3''@;'; put 'put ''XHUwNjFiXHVmZWJiXHVmZWJmXHVmZWNhXHUwNjFmXHVmZWNiXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUw''@;'; put 'put ''NjM2XHUwNjM3XHVmZWM3XHUwNjM5XHUwNjNhXHVmZWNjXHVmZTgyXHVmZTg0XHVmZThlXHVmZWQzXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUwNjUx''@;'; put 'put ''XHUwNjUyXHVmZWQ3XHVmZWRiXHVmZWRmXHVmOGZjXHVmZWY1XHVmZWY3XHVmZWY5XHVmZWZiXHVmZWUzXHVmZWU3XHVmZWVjXHVmZWU5XHVmZmZkIn0saWJtMTA0NjoiY3AxMDQ2Iixjc2libTEwNDY6ImNwMTA0NiIsY3AxMTI0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4''@;'; put 'put ''ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQ5MFx1MDQwNFx1MDQwNVx1MDQwNlx1MDQwN1x1MDQw''@;'; put 'put ''OFx1MDQwOVx1MDQwYVx1MDQwYlx1MDQwY1x4YWRcdTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0''@;'; put 'put ''MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2Zc''@;'; put 'put ''dTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTIxMTZcdTA0NTFcdTA0NTJcdTA0OTFcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NWFcdTA0''@;'; put 'put ''NWJcdTA0NWNceGE3XHUwNDVlXHUwNDVmIn0saWJtMTEyNDoiY3AxMTI0Iixjc2libTExMjQ6ImNwMTEyNCIsY3AxMTI1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1''@;'; put 'put ''MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQz''@;'; put 'put ''N1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1''@;'; put 'put ''MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5''@;'; put 'put ''MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQ5MFx1MDQ5MVx1MDQwNFx1MDQ1NFx1MDQwNlx1MDQ1Nlx1MDQwN1x1MDQ1N1x4''@;'; put 'put ''YjdcdTIyMWFcdTIxMTZceGE0XHUyNWEwXHhhMCJ9LGlibTExMjU6ImNwMTEyNSIsY3NpYm0xMTI1OiJjcDExMjUiLGNwMTEyOTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4''@;'; put 'put ''OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHUwMTUzXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxNzhceGI1XHhiNlx4YjdcdTAxNTJc''@;'; put 'put ''eGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAz''@;'; put 'put ''XHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSxpYm0xMTI5OiJjcDExMjki''@;'; put 'put ''LGNzaWJtMTEyOToiY3AxMTI5IixjcDExMzM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNc''@;'; put 'put ''eDlkXHg5ZVx4OWZceGEwXHUwZTgxXHUwZTgyXHUwZTg0XHUwZTg3XHUwZTg4XHUwZWFhXHUwZThhXHUwZThkXHUwZTk0XHUwZTk1XHUwZTk2XHUwZTk3XHUwZTk5XHUwZTlhXHUwZTliXHUwZTljXHUwZTlkXHUwZTllXHUwZTlmXHUwZWExXHUwZWEyXHUwZWEzXHUwZWE1XHUwZWE3XHUwZWFi''@;'; put 'put ''XHUwZWFkXHUwZWFlXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWFmXHUwZWIwXHUwZWIyXHUwZWIzXHUwZWI0XHUwZWI1XHUwZWI2XHUwZWI3XHUwZWI4XHUwZWI5XHUwZWJjXHUwZWIxXHUwZWJiXHUwZWJkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWMwXHUwZWMxXHUwZWMyXHUwZWMzXHUwZWM0XHUw''@;'; put 'put ''ZWM4XHUwZWM5XHUwZWNhXHUwZWNiXHUwZWNjXHUwZWNkXHUwZWM2XHVmZmZkXHUwZWRjXHUwZWRkXHUyMGFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWQw''@;'; put 'put ''XHUwZWQxXHUwZWQyXHUwZWQzXHUwZWQ0XHUwZWQ1XHUwZWQ2XHUwZWQ3XHUwZWQ4XHUwZWQ5XHVmZmZkXHVmZmZkXHhhMlx4YWNceGE2XHVmZmZkIn0saWJtMTEzMzoiY3AxMTMzIixjc2libTExMzM6ImNwMTEzMyIsY3AxMTYxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1MGU0OFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1''@;'; put 'put ''MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUz''@;'; put 'put ''NFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1MGU0OVx1MGU0YVx1MGU0Ylx1MjBhY1x1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1''@;'; put 'put ''MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx4YTJceGFjXHhhNlx4YTAifSxpYm0xMTYxOiJjcDExNjEiLGNzaWJtMTE2MToiY3AxMTYxIixjcDExNjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHg4MVx4''@;'; put 'put ''ODJceDgzXHg4NFx1MjAyNlx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUw''@;'; put 'put ''ZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIw''@;'; put 'put ''XHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3''@;'; put 'put ''XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saWJtMTE2MjoiY3AxMTYyIixjc2libTExNjI6ImNwMTE2MiIsY3AxMTYzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4''@;'; put 'put ''OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1MjBhY1x4YTVceGE2XHhhN1x1MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUw''@;'; put 'put ''MTc4XHhiNVx4YjZceGI3XHUwMTUyXHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4''@;'; put 'put ''ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJc''@;'; put 'put ''eGZmIn0saWJtMTE2MzoiY3AxMTYzIixjc2libTExNjM6ImNwMTE2MyIsbWFjY3JvYXRpYW46e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4''@;'; put 'put ''ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHUwMTYwXHUyMTIyXHhiNFx4YThcdTIyNjBcdTAxN2RceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MjIwNlx4YjVcdTIyMDJcdTIyMTFcdTIyMGZc''@;'; put 'put ''dTAxNjFcdTIyMmJceGFhXHhiYVx1MjEyNlx1MDE3ZVx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTAxMDZceGFiXHUwMTBjXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MDExMFx1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdWZm''@;'; put 'put ''ZmRceGE5XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx4YzZceGJiXHUyMDEzXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJcdTAxMDdceGMxXHUwMTBkXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1MDExMVx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwM2MwXHhj''@;'; put 'put ''Ylx1MDJkYVx4YjhceGNhXHhlNlx1MDJjNyJ9LG1hY2N5cmlsbGljOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1''@;'; put 'put ''MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNc''@;'; put 'put ''dTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0''@;'; put 'put ''NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUw''@;'; put 'put ''NDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCJ9LG1hY2dyZWVrOnt0eXBlOiJfc2JjcyIs''@;'; put 'put ''Y2hhcnM6Ilx4YzRceGI5XHhiMlx4YzlceGIzXHhkNlx4ZGNcdTAzODVceGUwXHhlMlx4ZTRcdTAzODRceGE4XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGEzXHUyMTIyXHhlZVx4ZWZcdTIwMjJceGJkXHUyMDMwXHhmNFx4ZjZceGE2XHhhZFx4ZjlceGZiXHhmY1x1MjAyMFx1MDM5M1x1MDM5NFx1''@;'; put 'put ''MDM5OFx1MDM5Ylx1MDM5ZVx1MDNhMFx4ZGZceGFlXHhhOVx1MDNhM1x1MDNhYVx4YTdcdTIyNjBceGIwXHUwMzg3XHUwMzkxXHhiMVx1MjI2NFx1MjI2NVx4YTVcdTAzOTJcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOTlcdTAzOWFcdTAzOWNcdTAzYTZcdTAzYWJcdTAzYThcdTAzYTlcdTAzYWNc''@;'; put 'put ''dTAzOWRceGFjXHUwMzlmXHUwM2ExXHUyMjQ4XHUwM2E0XHhhYlx4YmJcdTIwMjZceGEwXHUwM2E1XHUwM2E3XHUwMzg2XHUwMzg4XHUwMTUzXHUyMDEzXHUyMDE1XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDNhZFx1MDNhZVx1MDNhZlx1''@;'; put 'put ''MDNjY1x1MDM4Zlx1MDNjZFx1MDNiMVx1MDNiMlx1MDNjOFx1MDNiNFx1MDNiNVx1MDNjNlx1MDNiM1x1MDNiN1x1MDNiOVx1MDNiZVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZlx1MDNjMFx1MDNjZVx1MDNjMVx1MDNjM1x1MDNjNFx1MDNiOFx1MDNjOVx1MDNjMlx1MDNjN1x1MDNj''@;'; put 'put ''NVx1MDNiNlx1MDNjYVx1MDNjYlx1MDM5MFx1MDNiMFx1ZmZmZCJ9LG1hY2ljZWxhbmQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFc''@;'; put 'put ''eGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJi''@;'; put 'put ''XHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhh''@;'; put 'put ''NFx4ZDBceGYwXHhkZVx4ZmVceGZkXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRi''@;'; put 'put ''XHUwMmM3In0sbWFjcm9tYW46e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4''@;'; put 'put ''ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFc''@;'; put 'put ''eGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIx''@;'; put 'put ''XHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjcm9tYW5pYTp7''@;'; put 'put ''dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhh''@;'; put 'put ''M1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBcdTAxMDJcdTAxNWVcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx1MDEwM1x1MDE1Zlx4YmZceGExXHhhY1x1MjIxYVx1''@;'; put 'put ''MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1MDE2Mlx1MDE2M1x1MjAyMVx4YjdcdTIwMWFc''@;'; put 'put ''dTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3RoYWk6e3R5cGU6Il9zYmNzIixj''@;'; put 'put ''aGFyczoiXHhhYlx4YmJcdTIwMjZcdWY4OGNcdWY4OGZcdWY4OTJcdWY4OTVcdWY4OThcdWY4OGJcdWY4OGVcdWY4OTFcdWY4OTRcdWY4OTdcdTIwMWNcdTIwMWRcdWY4OTlcdWZmZmRcdTIwMjJcdWY4ODRcdWY4ODlcdWY4ODVcdWY4ODZcdWY4ODdcdWY4ODhcdWY4OGFcdWY4OGRcdWY4OTBc''@;'; put 'put ''dWY4OTNcdWY4OTZcdTIwMThcdTIwMTlcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2''@;'; put 'put ''XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUw''@;'; put 'put ''ZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZWZmXHUyMDBiXHUyMDEzXHUyMDE0XHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRk''@;'; put 'put ''XHUyMTIyXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHhhZVx4YTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxtYWN0dXJraXNoOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4''@;'; put 'put ''ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2''@;'; put 'put ''MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1''@;'; put 'put ''MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUwMTFlXHUwMTFmXHUwMTMwXHUwMTMxXHUwMTVlXHUwMTVmXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNc''@;'; put 'put ''eGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1ZmZmZFx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjdWtyYWluZTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZc''@;'; put 'put ''dTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHUwNDkw''@;'; put 'put ''XHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MDQ5MVx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1''@;'; put 'put ''OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAx''@;'; put 'put ''XHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUw''@;'; put 'put ''NDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCJ9LGtvaThyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1''@;'; put 'put ''MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUy''@;'; put 'put ''NTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1''@;'; put 'put ''MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQx''@;'; put 'put ''NFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9''@;'; put 'put ''LGtvaTh1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIx''@;'; put 'put ''YVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUwNDU0XHUyNTU0XHUwNDU2XHUwNDU3XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUwNDkxXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAx''@;'; put 'put ''XHUwNDA0XHUyNTYzXHUwNDA2XHUwNDA3XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUwNDkwXHUyNTZjXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQz''@;'; put 'put ''ZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1''@;'; put 'put ''MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaThydTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1''@;'; put 'put ''MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJc''@;'; put 'put ''eGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MDQ1NFx1MjU1NFx1MDQ1Nlx1MDQ1N1x1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MDQ5MVx1MDQ1ZVx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2N1x1''@;'; put 'put ''MjU2OFx1MjU2OVx1MjU2YVx1MDQ5MFx1MDQwZVx4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNc''@;'; put 'put ''dTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0''@;'; put 'put ''MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4dDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0OWJcdTA0OTNcdTIwMWFcdTA0OTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFc''@;'; put 'put ''dWZmZmRcdTIwMzBcdTA0YjNcdTIwMzlcdTA0YjJcdTA0YjdcdTA0YjZcdWZmZmRcdTA0OWFcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0ZWZcdTA0ZWVcdTA0''@;'; put 'put ''NTFceGE0XHUwNGUzXHhhNlx4YTdcdWZmZmRcdWZmZmRcdWZmZmRceGFiXHhhY1x4YWRceGFlXHVmZmZkXHhiMFx4YjFceGIyXHUwNDAxXHVmZmZkXHUwNGUyXHhiNlx4YjdcdWZmZmRcdTIxMTZcdWZmZmRceGJiXHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0''@;'; put 'put ''Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1''@;'; put 'put ''MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQx''@;'; put 'put ''N1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGFybXNjaWk4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThc''@;'; put 'put ''eDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx1MDU4N1x1MDU4OSkoXHhiYlx4YWJcdTIwMTQuXHUwNTVkLC1cdTA1OGFcdTIwMjZcdTA1NWNcdTA1NWJcdTA1NWVcdTA1MzFcdTA1NjFcdTA1MzJcdTA1NjJcdTA1MzNcdTA1NjNcdTA1MzRcdTA1NjRcdTA1MzVcdTA1NjVc''@;'; put 'put ''dTA1MzZcdTA1NjZcdTA1MzdcdTA1NjdcdTA1MzhcdTA1NjhcdTA1MzlcdTA1NjlcdTA1M2FcdTA1NmFcdTA1M2JcdTA1NmJcdTA1M2NcdTA1NmNcdTA1M2RcdTA1NmRcdTA1M2VcdTA1NmVcdTA1M2ZcdTA1NmZcdTA1NDBcdTA1NzBcdTA1NDFcdTA1NzFcdTA1NDJcdTA1NzJcdTA1NDNcdTA1''@;'; put 'put ''NzNcdTA1NDRcdTA1NzRcdTA1NDVcdTA1NzVcdTA1NDZcdTA1NzZcdTA1NDdcdTA1NzdcdTA1NDhcdTA1NzhcdTA1NDlcdTA1NzlcdTA1NGFcdTA1N2FcdTA1NGJcdTA1N2JcdTA1NGNcdTA1N2NcdTA1NGRcdTA1N2RcdTA1NGVcdTA1N2VcdTA1NGZcdTA1N2ZcdTA1NTBcdTA1ODBcdTA1NTFc''@;'; put 'put ''dTA1ODFcdTA1NTJcdTA1ODJcdTA1NTNcdTA1ODNcdTA1NTRcdTA1ODRcdTA1NTVcdTA1ODVcdTA1NTZcdTA1ODZcdTA1NWFcdWZmZmQifSxyazEwNDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUy''@;'; put 'put ''MDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDlhXHUwNGJhXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDliXHUwNGJiXHUwNDVmXHhhMFx1MDRiMFx1MDRiMVx1MDRkOFx4YTRcdTA0''@;'; put 'put ''ZThceGE2XHhhN1x1MDQwMVx4YTlcdTA0OTJceGFiXHhhY1x4YWRceGFlXHUwNGFlXHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0ZTlceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0OTNceGJiXHUwNGQ5XHUwNGEyXHUwNGEzXHUwNGFmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUw''@;'; put 'put ''NDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMw''@;'; put 'put ''XHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUw''@;'; put 'put ''NDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sdGN2bjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4ZGFcdTFlZTRceDAzXHUxZWVhXHUxZWVjXHUxZWVlXHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx1MWVlOFx1MWVmMFx1MWVmMlx1MWVmNlx1MWVmOFx4ZGRcdTFlZjRceDE4XHgxOVx4MWFc''@;'; put 'put ''eDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjMFx1MWVhMlx4YzNceGMxXHUxZWEwXHUxZWI2XHUxZWFjXHhjOFx1MWVi''@;'; put 'put ''YVx1MWViY1x4YzlcdTFlYjhcdTFlYzZceGNjXHUxZWM4XHUwMTI4XHhjZFx1MWVjYVx4ZDJcdTFlY2VceGQ1XHhkM1x1MWVjY1x1MWVkOFx1MWVkY1x1MWVkZVx1MWVlMFx1MWVkYVx1MWVlMlx4ZDlcdTFlZTZcdTAxNjhceGEwXHUwMTAyXHhjMlx4Y2FceGQ0XHUwMWEwXHUwMWFmXHUwMTEw''@;'; put 'put ''XHUwMTAzXHhlMlx4ZWFceGY0XHUwMWExXHUwMWIwXHUwMTExXHUxZWIwXHUwMzAwXHUwMzA5XHUwMzAzXHUwMzAxXHUwMzIzXHhlMFx1MWVhM1x4ZTNceGUxXHUxZWExXHUxZWIyXHUxZWIxXHUxZWIzXHUxZWI1XHUxZWFmXHUxZWI0XHUxZWFlXHUxZWE2XHUxZWE4XHUxZWFhXHUxZWE0XHUx''@;'; put 'put ''ZWMwXHUxZWI3XHUxZWE3XHUxZWE5XHUxZWFiXHUxZWE1XHUxZWFkXHhlOFx1MWVjMlx1MWViYlx1MWViZFx4ZTlcdTFlYjlcdTFlYzFcdTFlYzNcdTFlYzVcdTFlYmZcdTFlYzdceGVjXHUxZWM5XHUxZWM0XHUxZWJlXHUxZWQyXHUwMTI5XHhlZFx1MWVjYlx4ZjJcdTFlZDRcdTFlY2ZceGY1''@;'; put 'put ''XHhmM1x1MWVjZFx1MWVkM1x1MWVkNVx1MWVkN1x1MWVkMVx1MWVkOVx1MWVkZFx1MWVkZlx1MWVlMVx1MWVkYlx1MWVlM1x4ZjlcdTFlZDZcdTFlZTdcdTAxNjlceGZhXHUxZWU1XHUxZWViXHUxZWVkXHUxZWVmXHUxZWU5XHUxZWYxXHUxZWYzXHUxZWY3XHUxZWY5XHhmZFx1MWVmNVx1MWVk''@;'; put 'put ''MCJ9LGdlb3JnaWFuYWNhZGVteTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIw''@;'; put 'put ''MTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNceDlkXHg5ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJc''@;'; put 'put ''eGJjXHhiZFx4YmVceGJmXHUxMGQwXHUxMGQxXHUxMGQyXHUxMGQzXHUxMGQ0XHUxMGQ1XHUxMGQ2XHUxMGQ3XHUxMGQ4XHUxMGQ5XHUxMGRhXHUxMGRiXHUxMGRjXHUxMGRkXHUxMGRlXHUxMGRmXHUxMGUwXHUxMGUxXHUxMGUyXHUxMGUzXHUxMGU0XHUxMGU1XHUxMGU2XHUxMGU3XHUxMGU4''@;'; put 'put ''XHUxMGU5XHUxMGVhXHUxMGViXHUxMGVjXHUxMGVkXHUxMGVlXHUxMGVmXHUxMGYwXHUxMGYxXHUxMGYyXHUxMGYzXHUxMGY0XHUxMGY1XHUxMGY2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFc''@;'; put 'put ''eGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGdlb3JnaWFucHM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUy''@;'; put 'put ''MDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4''@;'; put 'put ''XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx1MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBkNlx1MTBmMVx1MTBkN1x1MTBkOFx1MTBkOVx1MTBkYVx1MTBkYlx1MTBkY1x1MTBmMlx1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1MTBlMVx1MTBlMlx1MTBmM1x1MTBl''@;'; put 'put ''M1x1MTBlNFx1MTBlNVx1MTBlNlx1MTBlN1x1MTBlOFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1MTBmNFx1MTBlZlx1MTBmMFx1MTBmNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4''@;'; put 'put ''ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0scHQxNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDk2XHUwNDkyXHUwNGVlXHUwNDkzXHUyMDFlXHUyMDI2XHUwNGI2XHUwNGFlXHUwNGIyXHUwNGFmXHUwNGEwXHUwNGUyXHUwNGEyXHUwNDlhXHUwNGJhXHUwNGI4XHUwNDk3XHUy''@;'; put 'put ''MDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNGIzXHUwNGI3XHUwNGExXHUwNGUzXHUwNGEzXHUwNDliXHUwNGJiXHUwNGI5XHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx1MDRlOFx1MDQ5OFx1MDRiMFx4YTdcdTA0MDFceGE5XHUwNGQ4XHhhYlx4YWNcdTA0ZWZceGFl''@;'; put 'put ''XHUwNDljXHhiMFx1MDRiMVx1MDQwNlx1MDQ1Nlx1MDQ5OVx1MDRlOVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNGQ5XHhiYlx1MDQ1OFx1MDRhYVx1MDRhYlx1MDQ5ZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQx''@;'; put 'put ''Ylx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1''@;'; put 'put ''MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHZpc2NpaTp7dHlwZToi''@;'; put 'put ''X3NiY3MiLGNoYXJzOiJcMFx4MDFcdTFlYjJceDAzXHgwNFx1MWViNFx1MWVhYVx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNcdTFlZjZceDE1XHgxNlx4MTdceDE4XHUxZWY4XHgxYVx4MWJceDFjXHgxZFx1MWVmNFx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3''@;'; put 'put ''ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MWVhMFx1MWVhZVx1MWViMFx1MWViNlx1MWVhNFx1MWVhNlx1MWVhOFx1MWVhY1x1MWViY1x1MWViOFx1MWViZVx1MWVjMFx1MWVjMlx1MWVjNFx1MWVj''@;'; put 'put ''Nlx1MWVkMFx1MWVkMlx1MWVkNFx1MWVkNlx1MWVkOFx1MWVlMlx1MWVkYVx1MWVkY1x1MWVkZVx1MWVjYVx1MWVjZVx1MWVjY1x1MWVjOFx1MWVlNlx1MDE2OFx1MWVlNFx1MWVmMlx4ZDVcdTFlYWZcdTFlYjFcdTFlYjdcdTFlYTVcdTFlYTdcdTFlYTlcdTFlYWRcdTFlYmRcdTFlYjlcdTFl''@;'; put 'put ''YmZcdTFlYzFcdTFlYzNcdTFlYzVcdTFlYzdcdTFlZDFcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZTBcdTAxYTBcdTFlZDlcdTFlZGRcdTFlZGZcdTFlY2JcdTFlZjBcdTFlZThcdTFlZWFcdTFlZWNcdTAxYTFcdTFlZGJcdTAxYWZceGMwXHhjMVx4YzJceGMzXHUxZWEyXHUwMTAyXHUxZWIzXHUx''@;'; put 'put ''ZWI1XHhjOFx4YzlceGNhXHUxZWJhXHhjY1x4Y2RcdTAxMjhcdTFlZjNcdTAxMTBcdTFlZTlceGQyXHhkM1x4ZDRcdTFlYTFcdTFlZjdcdTFlZWJcdTFlZWRceGQ5XHhkYVx1MWVmOVx1MWVmNVx4ZGRcdTFlZTFcdTAxYjBceGUwXHhlMVx4ZTJceGUzXHUxZWEzXHUwMTAzXHUxZWVmXHUxZWFi''@;'; put 'put ''XHhlOFx4ZTlceGVhXHUxZWJiXHhlY1x4ZWRcdTAxMjlcdTFlYzlcdTAxMTFcdTFlZjFceGYyXHhmM1x4ZjRceGY1XHUxZWNmXHUxZWNkXHUxZWU1XHhmOVx4ZmFcdTAxNjlcdTFlZTdceGZkXHUxZWUzXHUxZWVlIn0saXNvNjQ2Y246e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4''@;'; put 'put ''MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiNceGE1JSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla''@;'; put 'put ''W1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlzbzY0Nmpw''@;'; put 'put ''Ont0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7''@;'; put 'put ''PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltceGE1XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGhwcm9tYW44Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4''@;'; put 'put ''OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YzBceGMyXHhjOFx4Y2FceGNiXHhjZVx4Y2ZceGI0XHUwMmNiXHUwMmM2XHhhOFx1MDJkY1x4ZDlceGRiXHUyMGE0XHhhZlx4ZGRceGZkXHhiMFx4YzdceGU3XHhkMVx4ZjFceGExXHhiZlx4YTRceGEzXHhhNVx4YTdcdTAxOTJceGEyXHhlMlx4ZWFc''@;'; put 'put ''eGY0XHhmYlx4ZTFceGU5XHhmM1x4ZmFceGUwXHhlOFx4ZjJceGY5XHhlNFx4ZWJceGY2XHhmY1x4YzVceGVlXHhkOFx4YzZceGU1XHhlZFx4ZjhceGU2XHhjNFx4ZWNceGQ2XHhkY1x4YzlceGVmXHhkZlx4ZDRceGMxXHhjM1x4ZTNceGQwXHhmMFx4Y2RceGNjXHhkM1x4ZDJceGQ1XHhmNVx1''@;'; put 'put ''MDE2MFx1MDE2MVx4ZGFcdTAxNzhceGZmXHhkZVx4ZmVceGI3XHhiNVx4YjZceGJlXHUyMDE0XHhiY1x4YmRceGFhXHhiYVx4YWJcdTI1YTBceGJiXHhiMVx1ZmZmZCJ9LG1hY2ludG9zaDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBc''@;'; put 'put ''eGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1''@;'; put 'put ''MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNc''@;'; put 'put ''dTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQy''@;'; put 'put ''XHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxhc2NpaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSx0aXM2MjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5''@;'; put 'put ''XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUw''@;'; put 'put ''ZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQw''@;'; put 'put ''XHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn19fSw3NjIzOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ezEwMDI5OiJtYWNjZW50ZXVybyIsbWFjY2VudGV1cm86e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx1MDEwMFx1MDEwMVx4YzlcdTAxMDRceGQ2XHhkY1x4ZTFcdTAxMDVcdTAxMGNc''@;'; put 'put ''eGU0XHUwMTBkXHUwMTA2XHUwMTA3XHhlOVx1MDE3OVx1MDE3YVx1MDEwZVx4ZWRcdTAxMGZcdTAxMTJcdTAxMTNcdTAxMTZceGYzXHUwMTE3XHhmNFx4ZjZceGY1XHhmYVx1MDExYVx1MDExYlx4ZmNcdTIwMjBceGIwXHUwMTE4XHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIy''@;'; put 'put ''XHUwMTE5XHhhOFx1MjI2MFx1MDEyM1x1MDEyZVx1MDEyZlx1MDEyYVx1MjI2NFx1MjI2NVx1MDEyYlx1MDEzNlx1MjIwMlx1MjIxMVx1MDE0Mlx1MDEzYlx1MDEzY1x1MDEzZFx1MDEzZVx1MDEzOVx1MDEzYVx1MDE0NVx1MDE0Nlx1MDE0M1x4YWNcdTIyMWFcdTAxNDRcdTAxNDdcdTIyMDZc''@;'; put 'put ''eGFiXHhiYlx1MjAyNlx4YTBcdTAxNDhcdTAxNTBceGQ1XHUwMTUxXHUwMTRjXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx1MDE0ZFx1MDE1NFx1MDE1NVx1MDE1OFx1MjAzOVx1MjAzYVx1MDE1OVx1MDE1Nlx1MDE1N1x1MDE2MFx1MjAxYVx1MjAxZVx1''@;'; put 'put ''MDE2MVx1MDE1YVx1MDE1Ylx4YzFcdTAxNjRcdTAxNjVceGNkXHUwMTdkXHUwMTdlXHUwMTZhXHhkM1x4ZDRcdTAxNmJcdTAxNmVceGRhXHUwMTZmXHUwMTcwXHUwMTcxXHUwMTcyXHUwMTczXHhkZFx4ZmRcdTAxMzdcdTAxN2JcdTAxNDFcdTAxN2NcdTAxMjJcdTAyYzcifSw4MDg6ImNwODA4''@;'; put 'put ''IixpYm04MDg6ImNwODA4IixjcDgwODp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNc''@;'; put 'put ''dTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0''@;'; put 'put ''M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1Njlc''@;'; put 'put ''dTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0''@;'; put 'put ''NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx1MjBhY1x1MjVhMFx4YTAifSxtaWs6e3R5cGU6Il9zYmNz''@;'; put 'put ''IixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5''@;'; put 'put ''XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUw''@;'; put 'put ''NDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTYzXHUyNTUxXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTEwXHUyNTkx''@;'; put 'put ''XHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyMTE2XHhhN1x1MjU1N1x1MjU1ZFx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUw''@;'; put 'put ''M2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0sY3A3MjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceGU5XHhlMlx4ODRceGUwXHg4Nlx4ZTdceGVh''@;'; put 'put ''XHhlYlx4ZThceGVmXHhlZVx4OGRceDhlXHg4Zlx4OTBcdTA2NTFcdTA2NTJceGY0XHhhNFx1MDY0MFx4ZmJceGY5XHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHhhM1x1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYz''@;'; put 'put ''MFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAw''@;'; put 'put ''XHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUw''@;'; put 'put ''NjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQxXHhiNVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MjI2MVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdm''@;'; put 'put ''XHhiMlx1MjVhMFx4YTAifSxhc2NpaThiaXQ6ImFzY2lpIix1c2FzY2lpOiJhc2NpaSIsYW5zaXgzNDoiYXNjaWkiLGFuc2l4MzQxOTY4OiJhc2NpaSIsYW5zaXgzNDE5ODY6ImFzY2lpIixjc2FzY2lpOiJhc2NpaSIsY3AzNjc6ImFzY2lpIixpYm0zNjc6ImFzY2lpIixpc29pcjY6ImFzY2lp''@;'; put 'put ''Iixpc282NDZ1czoiYXNjaWkiLGlzbzY0NmlydjoiYXNjaWkiLHVzOiJhc2NpaSIsbGF0aW4xOiJpc284ODU5MSIsbGF0aW4yOiJpc284ODU5MiIsbGF0aW4zOiJpc284ODU5MyIsbGF0aW40OiJpc284ODU5NCIsbGF0aW41OiJpc284ODU5OSIsbGF0aW42OiJpc284ODU5MTAiLGxhdGluNzoi''@;'; put 'put ''aXNvODg1OTEzIixsYXRpbjg6Imlzbzg4NTkxNCIsbGF0aW45OiJpc284ODU5MTUiLGxhdGluMTA6Imlzbzg4NTkxNiIsY3Npc29sYXRpbjE6Imlzbzg4NTkxIixjc2lzb2xhdGluMjoiaXNvODg1OTIiLGNzaXNvbGF0aW4zOiJpc284ODU5MyIsY3Npc29sYXRpbjQ6Imlzbzg4NTk0Iixjc2lz''@;'; put 'put ''b2xhdGluY3lyaWxsaWM6Imlzbzg4NTk1Iixjc2lzb2xhdGluYXJhYmljOiJpc284ODU5NiIsY3Npc29sYXRpbmdyZWVrOiJpc284ODU5NyIsY3Npc29sYXRpbmhlYnJldzoiaXNvODg1OTgiLGNzaXNvbGF0aW41OiJpc284ODU5OSIsY3Npc29sYXRpbjY6Imlzbzg4NTkxMCIsbDE6Imlzbzg4''@;'; put 'put ''NTkxIixsMjoiaXNvODg1OTIiLGwzOiJpc284ODU5MyIsbDQ6Imlzbzg4NTk0IixsNToiaXNvODg1OTkiLGw2OiJpc284ODU5MTAiLGw3OiJpc284ODU5MTMiLGw4OiJpc284ODU5MTQiLGw5OiJpc284ODU5MTUiLGwxMDoiaXNvODg1OTE2Iixpc29pcjE0OiJpc282NDZqcCIsaXNvaXI1Nzoi''@;'; put 'put ''aXNvNjQ2Y24iLGlzb2lyMTAwOiJpc284ODU5MSIsaXNvaXIxMDE6Imlzbzg4NTkyIixpc29pcjEwOToiaXNvODg1OTMiLGlzb2lyMTEwOiJpc284ODU5NCIsaXNvaXIxNDQ6Imlzbzg4NTk1Iixpc29pcjEyNzoiaXNvODg1OTYiLGlzb2lyMTI2OiJpc284ODU5NyIsaXNvaXIxMzg6Imlzbzg4''@;'; put 'put ''NTk4Iixpc29pcjE0ODoiaXNvODg1OTkiLGlzb2lyMTU3OiJpc284ODU5MTAiLGlzb2lyMTY2OiJ0aXM2MjAiLGlzb2lyMTc5OiJpc284ODU5MTMiLGlzb2lyMTk5OiJpc284ODU5MTQiLGlzb2lyMjAzOiJpc284ODU5MTUiLGlzb2lyMjI2OiJpc284ODU5MTYiLGNwODE5OiJpc284ODU5MSIs''@;'; put 'put ''aWJtODE5OiJpc284ODU5MSIsY3lyaWxsaWM6Imlzbzg4NTk1IixhcmFiaWM6Imlzbzg4NTk2IixhcmFiaWM4OiJpc284ODU5NiIsZWNtYTExNDoiaXNvODg1OTYiLGFzbW83MDg6Imlzbzg4NTk2IixncmVlazoiaXNvODg1OTciLGdyZWVrODoiaXNvODg1OTciLGVjbWExMTg6Imlzbzg4NTk3''@;'; put 'put ''IixlbG90OTI4OiJpc284ODU5NyIsaGVicmV3OiJpc284ODU5OCIsaGVicmV3ODoiaXNvODg1OTgiLHR1cmtpc2g6Imlzbzg4NTk5Iix0dXJraXNoODoiaXNvODg1OTkiLHRoYWk6Imlzbzg4NTkxMSIsdGhhaTg6Imlzbzg4NTkxMSIsY2VsdGljOiJpc284ODU5MTQiLGNlbHRpYzg6Imlzbzg4''@;'; put 'put ''NTkxNCIsaXNvY2VsdGljOiJpc284ODU5MTQiLHRpczYyMDA6InRpczYyMCIsdGlzNjIwMjUyOTE6InRpczYyMCIsdGlzNjIwMjUzMzA6InRpczYyMCIsMWU0OiJtYWNyb21hbiIsMTAwMDY6Im1hY2dyZWVrIiwxMDAwNzoibWFjY3lyaWxsaWMiLDEwMDc5OiJtYWNpY2VsYW5kIiwxMDA4MToi''@;'; put 'put ''bWFjdHVya2lzaCIsY3NwYzhjb2RlcGFnZTQzNzoiY3A0MzciLGNzcGM3NzViYWx0aWM6ImNwNzc1Iixjc3BjODUwbXVsdGlsaW5ndWFsOiJjcDg1MCIsY3NwY3A4NTI6ImNwODUyIixjc3BjODYybGF0aW5oZWJyZXc6ImNwODYyIixjcGdyOiJjcDg2OSIsbXNlZToiY3AxMjUwIixtc2N5cmw6''@;'; put 'put ''ImNwMTI1MSIsbXNhbnNpOiJjcDEyNTIiLG1zZ3JlZWs6ImNwMTI1MyIsbXN0dXJrOiJjcDEyNTQiLG1zaGVicjoiY3AxMjU1Iixtc2FyYWI6ImNwMTI1NiIsd2luYmFsdHJpbToiY3AxMjU3IixjcDIwODY2OiJrb2k4ciIsMjA4NjY6ImtvaThyIixpYm04Nzg6ImtvaThyIixjc2tvaThyOiJr''@;'; put 'put ''b2k4ciIsY3AyMTg2Njoia29pOHUiLDIxODY2OiJrb2k4dSIsaWJtMTE2ODoia29pOHUiLHN0cmsxMDQ4MjAwMjoicmsxMDQ4Iix0Y3ZuNTcxMjoidGN2biIsdGN2bjU3MTIxOiJ0Y3ZuIixnYjE5ODg4MDoiaXNvNjQ2Y24iLGNuOiJpc282NDZjbiIsY3Npc28xNGppc2M2MjIwcm86ImlzbzY0''@;'; put 'put ''NmpwIixqaXNjNjIyMDE5NjlybzoiaXNvNjQ2anAiLGpwOiJpc282NDZqcCIsY3NocHJvbWFuODoiaHByb21hbjgiLHI4OiJocHJvbWFuOCIscm9tYW44OiJocHJvbWFuOCIseHJvbWFuODoiaHByb21hbjgiLGlibTEwNTE6Imhwcm9tYW44IixtYWM6Im1hY2ludG9zaCIsY3NtYWNpbnRvc2g6''@;'; put 'put ''Im1hY2ludG9zaCJ9fSw3MTc1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBfKCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gQigpe3RoaXMub3ZlcmZsb3dCeXRlPS0xfWZ1bmN0aW9uIHcoeixOKXt0aGlzLmljb252PU59ZnVuY3Rpb24g''@;'; put 'put ''UCh6LE4pe3ZvaWQgMD09PSh6PXp8fHt9KS5hZGRCT00mJih6LmFkZEJPTT0hMCksdGhpcy5lbmNvZGVyPU4uaWNvbnYuZ2V0RW5jb2RlcigidXRmLTE2bGUiLHopfWZ1bmN0aW9uIEYoeixOKXt0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmluaXRpYWxCeXRlcz1bXSx0aGlzLmluaXRpYWxCeXRl''@;'; put 'put ''c0xlbj0wLHRoaXMub3B0aW9ucz16fHx7fSx0aGlzLmljb252PU4uaWNvbnZ9ZnVuY3Rpb24gTyh6LE4pe3ZhciBMPU58fCJ1dGYtMTZsZSI7aWYoei5sZW5ndGg+PTIpaWYoMjU0PT16WzBdJiYyNTU9PXpbMV0pTD0idXRmLTE2YmUiO2Vsc2UgaWYoMjU1PT16WzBdJiYyNTQ9PXpbMV0pTD0i''@;'; put 'put ''dXRmLTE2bGUiO2Vsc2V7Zm9yKHZhciBLPTAsVT0wLFc9TWF0aC5taW4oei5sZW5ndGgtei5sZW5ndGglMiw2NCksWT0wO1k8VztZKz0yKTA9PT16W1ldJiYwIT09eltZKzFdJiZVKyssMCE9PXpbWV0mJjA9PT16W1krMV0mJksrKztVPks/TD0idXRmLTE2YmUiOlU8SyYmKEw9InV0Zi0xNmxl''@;'; put 'put ''Iil9cmV0dXJuIEx9WC51dGYxNmJlPV8sXy5wcm90b3R5cGUuZW5jb2Rlcj1nLF8ucHJvdG90eXBlLmRlY29kZXI9QixfLnByb3RvdHlwZS5ib21Bd2FyZT0hMCxnLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtmb3IodmFyIE49SS5mcm9tKHosInVjczIiKSxMPTA7TDxOLmxlbmd0aDtM''@;'; put 'put ''Kz0yKXt2YXIgSz1OW0xdO05bTF09TltMKzFdLE5bTCsxXT1LfXJldHVybiBOfSxnLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LEIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2lmKDA9PXoubGVuZ3RoKXJldHVybiIiO3ZhciBOPUkuYWxsb2Moei5sZW5ndGgrMSksTD0wLEs9MDtm''@;'; put 'put ''b3IoLTEhPT10aGlzLm92ZXJmbG93Qnl0ZSYmKE5bMF09elswXSxOWzFdPXRoaXMub3ZlcmZsb3dCeXRlLEw9MSxLPTIpO0w8ei5sZW5ndGgtMTtMKz0yLEsrPTIpTltLXT16W0wrMV0sTltLKzFdPXpbTF07cmV0dXJuIHRoaXMub3ZlcmZsb3dCeXRlPUw9PXoubGVuZ3RoLTE/elt6Lmxlbmd0''@;'; put 'put ''aC0xXTotMSxOLnNsaWNlKDAsSykudG9TdHJpbmcoInVjczIiKX0sQi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxYLnV0ZjE2PXcsdy5wcm90b3R5cGUuZW5jb2Rlcj1QLHcucHJvdG90eXBlLmRlY29kZXI9RixQLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5l''@;'; put 'put ''bmNvZGVyLndyaXRlKHopfSxQLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxGLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtpZighdGhpcy5kZWNvZGVyKXtpZih0aGlzLmluaXRpYWxCeXRlcy5wdXNoKHopLHRoaXMuaW5pdGlhbEJ5dGVz''@;'; put 'put ''TGVuKz16Lmxlbmd0aCx0aGlzLmluaXRpYWxCeXRlc0xlbjwxNilyZXR1cm4iIjt2YXIgTj1PKHo9SS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoTix0aGlzLm9wdGlvbnMp''@;'; put 'put ''LHRoaXMuaW5pdGlhbEJ5dGVzLmxlbmd0aD10aGlzLmluaXRpYWxCeXRlc0xlbj0wfXJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoeil9LEYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKCF0aGlzLmRlY29kZXIpe3ZhciB6PUkuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxOPU8oeix0''@;'; put 'put ''aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKE4sdGhpcy5vcHRpb25zKTt2YXIgTD10aGlzLmRlY29kZXIud3JpdGUoeiksSz10aGlzLmRlY29kZXIuZW5kKCk7cmV0dXJuIEs/TCtLOkx9cmV0dXJuIHRoaXMuZGVjb2Rlci5l''@;'; put 'put ''bmQoKX19LDM1MDg5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBfKHosTil7dGhpcy5pY29udj1OLHRoaXMuYm9tQXdhcmU9ITAsdGhpcy5pc0xFPXouaXNMRX1mdW5jdGlvbiBnKHosTil7dGhpcy5pc0xFPU4uaXNMRSx0aGlzLmhpZ2hT''@;'; put 'put ''dXJyb2dhdGU9MH1mdW5jdGlvbiBCKHosTil7dGhpcy5pc0xFPU4uaXNMRSx0aGlzLmJhZENoYXI9Ti5pY29udi5kZWZhdWx0Q2hhclVuaWNvZGUuY2hhckNvZGVBdCgwKSx0aGlzLm92ZXJmbG93PW51bGx9ZnVuY3Rpb24gdyh6LE4pe3RoaXMuaWNvbnY9Tn1mdW5jdGlvbiBQKHosTil7dm9p''@;'; put 'put ''ZCAwPT09KHo9enx8e30pLmFkZEJPTSYmKHouYWRkQk9NPSEwKSx0aGlzLmVuY29kZXI9Ti5pY29udi5nZXRFbmNvZGVyKHouZGVmYXVsdEVuY29kaW5nfHwidXRmLTMybGUiLHopfWZ1bmN0aW9uIEYoeixOKXt0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmluaXRpYWxCeXRlcz1bXSx0aGlzLmlu''@;'; put 'put ''aXRpYWxCeXRlc0xlbj0wLHRoaXMub3B0aW9ucz16fHx7fSx0aGlzLmljb252PU4uaWNvbnZ9ZnVuY3Rpb24gTyh6LE4pe3ZhciBMPU58fCJ1dGYtMzJsZSI7aWYoei5sZW5ndGg+PTQpaWYoNjUyNzk9PT16LnJlYWRVSW50MzJCRSgwKSlMPSJ1dGYtMzJiZSI7ZWxzZSBpZig2NTI3OT09PXou''@;'; put 'put ''cmVhZFVJbnQzMkxFKDApKUw9InV0Zi0zMmxlIjtlbHNle2Zvcih2YXIgSz0wLFU9MCxXPTAsWT0wLHE9TWF0aC5taW4oei5sZW5ndGgtei5sZW5ndGglNCwxMjgpLGVlPTA7ZWU8cTtlZSs9NCl7dmFyIEo9eltlZV0sbmU9eltlZSsxXSxpZT16W2VlKzJdLGxlPXpbZWUrM107KDAhPT1KfHxu''@;'; put 'put ''ZT4xNikmJisrVSwoMCE9PWxlfHxpZT4xNikmJisrSywwPT09SiYmMD09PW5lJiYwPT09aWUmJjAhPT1sZSYmWSsrLDAhPT1KJiYwPT09bmUmJjA9PT1pZSYmMD09PWxlJiZXKyt9VTxLP0w9InV0Zi0zMmJlIjpLPFUmJihMPSJ1dGYtMzJsZSIpLFk+Vz9MPSJ1dGYtMzJiZSI6WTxXJiYoTD0i''@;'; put 'put ''dXRmLTMybGUiKX1yZXR1cm4gTH1YLl91dGYzMj1fLFgudXRmMzJsZT17dHlwZToiX3V0ZjMyIixpc0xFOiEwfSxYLnV0ZjMyYmU9e3R5cGU6Il91dGYzMiIsaXNMRTohMX0sWC51Y3M0bGU9InV0ZjMybGUiLFgudWNzNGJlPSJ1dGYzMmJlIixfLnByb3RvdHlwZS5lbmNvZGVyPWcsXy5wcm90''@;'; put 'put ''b3R5cGUuZGVjb2Rlcj1CLGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj1JLmZyb20oeiwidWNzMiIpLEw9SS5hbGxvYygyKk4ubGVuZ3RoKSxLPXRoaXMuaXNMRT9MLndyaXRlVUludDMyTEU6TC53cml0ZVVJbnQzMkJFLFU9MCxXPTA7VzxOLmxlbmd0aDtXKz0yKXt2''@;'; put 'put ''YXIgWT1OLnJlYWRVSW50MTZMRShXKSxxPTU1Mjk2PD1ZJiZZPDU2MzIwO2lmKHRoaXMuaGlnaFN1cnJvZ2F0ZSl7aWYoIXEmJjU2MzIwPD1ZJiZZPDU3MzQ0KXtLLmNhbGwoTCw2NTUzNisodGhpcy5oaWdoU3Vycm9nYXRlLTU1Mjk2PDwxMHxZLTU2MzIwKSxVKSxVKz00LHRoaXMuaGlnaFN1''@;'; put 'put ''cnJvZ2F0ZT0wO2NvbnRpbnVlfUsuY2FsbChMLHRoaXMuaGlnaFN1cnJvZ2F0ZSxVKSxVKz00fXE/dGhpcy5oaWdoU3Vycm9nYXRlPVk6KEsuY2FsbChMLFksVSksVSs9NCx0aGlzLmhpZ2hTdXJyb2dhdGU9MCl9cmV0dXJuIFU8TC5sZW5ndGgmJihMPUwuc2xpY2UoMCxVKSksTH0sZy5wcm90''@;'; put 'put ''b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5oaWdoU3Vycm9nYXRlKXt2YXIgej1JLmFsbG9jKDQpO3JldHVybiB0aGlzLmlzTEU/ei53cml0ZVVJbnQzMkxFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwwKTp6LndyaXRlVUludDMyQkUodGhpcy5oaWdoU3Vycm9nYXRlLDApLHRoaXMuaGlnaFN1''@;'; put 'put ''cnJvZ2F0ZT0wLHp9fSxCLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtpZigwPT09ei5sZW5ndGgpcmV0dXJuIiI7dGhpcy5vdmVyZmxvdyYmKHo9SS5jb25jYXQoW3RoaXMub3ZlcmZsb3csel0pKTt2YXIgTj16Lmxlbmd0aC16Lmxlbmd0aCU0O3oubGVuZ3RoIT09Tj8odGhpcy5vdmVy''@;'; put 'put ''Zmxvdz16LnNsaWNlKE4pLHo9ei5zbGljZSgwLE4pKTp0aGlzLm92ZXJmbG93PW51bGw7Zm9yKHZhciBMPUkuYWxsb2MoTiksSz0wLFU9MDtVPE47VSs9NCl7dmFyIFc9dGhpcy5pc0xFP3oucmVhZFVJbnQzMkxFKFUpOnoucmVhZFVJbnQzMkJFKFUpO2lmKFc8NjU1MzYpTC53cml0ZVVJbnQx''@;'; put 'put ''NkxFKFcsSyksSys9MjtlbHNlIGlmKFc+MTExNDExMSlMLndyaXRlVUludDE2TEUodGhpcy5iYWRDaGFyLEspLEsrPTI7ZWxzZXt2YXIgcT01NjMyMCsoMTAyMyYoVy09NjU1MzYpKTtMLndyaXRlVUludDE2TEUoNTUyOTZ8Vz4+MTAsSyksTC53cml0ZVVJbnQxNkxFKHEsSys9MiksSys9Mn19''@;'; put 'put ''cmV0dXJuIEwuc2xpY2UoMCxLKS50b1N0cmluZygidWNzMiIpfSxCLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt0aGlzLm92ZXJmbG93PW51bGx9LFgudXRmMzI9dyxYLnVjczQ9dyx3LnByb3RvdHlwZS5lbmNvZGVyPVAsdy5wcm90b3R5cGUuZGVjb2Rlcj1GLFAucHJvdG90eXBlLndyaXRl''@;'; put 'put ''PWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmVuY29kZXIud3JpdGUoeil9LFAucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2lmKCF0aGlzLmRlY29kZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVz''@;'; put 'put ''LnB1c2goeiksdGhpcy5pbml0aWFsQnl0ZXNMZW4rPXoubGVuZ3RoLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPDMyKXJldHVybiIiO3ZhciBMPU8oSS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252Lmdl''@;'; put 'put ''dERlY29kZXIoTCx0aGlzLm9wdGlvbnMpLHRoaXMuaW5pdGlhbEJ5dGVzLmxlbmd0aD10aGlzLmluaXRpYWxCeXRlc0xlbj0wfXJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoeil9LEYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKCF0aGlzLmRlY29kZXIpe3ZhciB6PUkuY29uY2F0KHRo''@;'; put 'put ''aXMuaW5pdGlhbEJ5dGVzKSxOPU8oeix0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKE4sdGhpcy5vcHRpb25zKTt2YXIgTD10aGlzLmRlY29kZXIud3JpdGUoeiksSz10aGlzLmRlY29kZXIuZW5kKCk7cmV0dXJuIEs/TCtL''@;'; put 'put ''Okx9cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19LDk3NDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIF8ocSxlZSl7dGhpcy5pY29udj1lZX1YLnV0Zjc9XyxYLnVuaWNvZGUxMXV0Zjc9InV0ZjciLF8ucHJvdG90eXBlLmVuY29kZXI9''@;'; put 'put ''QixfLnByb3RvdHlwZS5kZWNvZGVyPXcsXy5wcm90b3R5cGUuYm9tQXdhcmU9ITA7dmFyIGc9L1teQS1aYS16MC05J1woXCksLVwuXC86XD8gXG5cclx0XSsvZztmdW5jdGlvbiBCKHEsZWUpe3RoaXMuaWNvbnY9ZWUuaWNvbnZ9ZnVuY3Rpb24gdyhxLGVlKXt0aGlzLmljb252PWVlLmljb252''@;'; put 'put ''LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn1CLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxKXtyZXR1cm4gSS5mcm9tKHEucmVwbGFjZShnLGZ1bmN0aW9uKGVlKXtyZXR1cm4iKyIrKCIrIj09PWVlPyIiOnRoaXMuaWNvbnYuZW5jb2RlKGVlLCJ1dGYxNi1iZSIpLnRv''@;'; put 'put ''U3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC89KyQvLCIiKSkrIi0ifS5iaW5kKHRoaXMpKSl9LEIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe307Zm9yKHZhciBQPS9bQS1aYS16MC05XC8rXS8sRj1bXSxPPTA7TzwyNTY7TysrKUZbT109UC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoTykp''@;'; put 'put ''O3ZhciBOPTQ1O2Z1bmN0aW9uIEsocSxlZSl7dGhpcy5pY29udj1lZX1mdW5jdGlvbiBVKHEsZWUpe3RoaXMuaWNvbnY9ZWUuaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPUkuYWxsb2MoNiksdGhpcy5iYXNlNjRBY2N1bUlkeD0wfWZ1bmN0aW9uIFcocSxlZSl7dGhp''@;'; put 'put ''cy5pY29udj1lZS5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiJ9dy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBlZT0iIixKPTAsbmU9dGhpcy5pbkJhc2U2NCxpZT10aGlzLmJhc2U2NEFjY3VtLGxlPTA7bGU8cS5sZW5ndGg7bGUrKylpZihu''@;'; put 'put ''ZSl7aWYoIUZbcVtsZV1dKXtpZihsZT09SiYmcVtsZV09PU4pZWUrPSIrIjtlbHNle3ZhciBtZT1pZStxLnNsaWNlKEosbGUpLnRvU3RyaW5nKCk7ZWUrPXRoaXMuaWNvbnYuZGVjb2RlKEkuZnJvbShtZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9cVtsZV0hPU4mJmxlLS0sSj1sZSsxLG5lPSEx''@;'; put 'put ''LGllPSIifX1lbHNlIDQzPT1xW2xlXSYmKGVlKz10aGlzLmljb252LmRlY29kZShxLnNsaWNlKEosbGUpLCJhc2NpaSIpLEo9bGUrMSxuZT0hMCk7aWYobmUpe3ZhciBfZT0obWU9aWUrcS5zbGljZShKKS50b1N0cmluZygpKS5sZW5ndGgtbWUubGVuZ3RoJTg7aWU9bWUuc2xpY2UoX2UpLG1l''@;'; put 'put ''PW1lLnNsaWNlKDAsX2UpLGVlKz10aGlzLmljb252LmRlY29kZShJLmZyb20obWUsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfWVsc2UgZWUrPXRoaXMuaWNvbnYuZGVjb2RlKHEuc2xpY2UoSiksImFzY2lpIik7cmV0dXJuIHRoaXMuaW5CYXNlNjQ9bmUsdGhpcy5iYXNlNjRBY2N1bT1pZSxlZX0s''@;'; put 'put ''dy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIHE9IiI7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJnRoaXMuYmFzZTY0QWNjdW0ubGVuZ3RoPjAmJihxPXRoaXMuaWNvbnYuZGVjb2RlKEkuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCJiYXNlNjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2''@;'; put 'put ''ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLHF9LFgudXRmN2ltYXA9SyxLLnByb3RvdHlwZS5lbmNvZGVyPVUsSy5wcm90b3R5cGUuZGVjb2Rlcj1XLEsucHJvdG90eXBlLmJvbUF3YXJlPSEwLFUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9dGhpcy5pbkJhc2U2NCxK''@;'; put 'put ''PXRoaXMuYmFzZTY0QWNjdW0sbmU9dGhpcy5iYXNlNjRBY2N1bUlkeCxpZT1JLmFsbG9jKDUqcS5sZW5ndGgrMTApLGxlPTAsbWU9MDttZTxxLmxlbmd0aDttZSsrKXt2YXIgX2U9cS5jaGFyQ29kZUF0KG1lKTszMjw9X2UmJl9lPD0xMjY/KGVlJiYobmU+MCYmKGxlKz1pZS53cml0ZShKLnNs''@;'; put 'put ''aWNlKDAsbmUpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksbGUpLG5lPTApLGllW2xlKytdPU4sZWU9ITEpLGVlfHwoaWVbbGUrK109X2UsMzg9PT1fZSYmKGllW2xlKytdPU4pKSk6KGVlfHwoaWVbbGUrK109MzgsZWU9ITApLGVlJiYo''@;'; put 'put ''SltuZSsrXT1fZT4+OCxKW25lKytdPTI1NSZfZSxuZT09Si5sZW5ndGgmJihsZSs9aWUud3JpdGUoSi50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLGxlKSxuZT0wKSkpfXJldHVybiB0aGlzLmluQmFzZTY0PWVlLHRoaXMuYmFzZTY0QWNjdW1JZHg9bmUsaWUuc2xpY2Uo''@;'; put 'put ''MCxsZSl9LFUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBxPUkuYWxsb2MoMTApLGVlPTA7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJih0aGlzLmJhc2U2NEFjY3VtSWR4PjAmJihlZSs9cS53cml0ZSh0aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAsdGhpcy5iYXNlNjRBY2N1bUlkeCkudG9T''@;'; put 'put ''dHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKS5yZXBsYWNlKC89KyQvLCIiKSxlZSksdGhpcy5iYXNlNjRBY2N1bUlkeD0wKSxxW2VlKytdPU4sdGhpcy5pbkJhc2U2ND0hMSkscS5zbGljZSgwLGVlKX07dmFyIFk9Ri5zbGljZSgpO1lbNDRdPSEwLFcucHJvdG90eXBlLndyaXRl''@;'; put 'put ''PWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9IiIsSj0wLG5lPXRoaXMuaW5CYXNlNjQsaWU9dGhpcy5iYXNlNjRBY2N1bSxsZT0wO2xlPHEubGVuZ3RoO2xlKyspaWYobmUpe2lmKCFZW3FbbGVdXSl7aWYobGU9PUomJnFbbGVdPT1OKWVlKz0iJiI7ZWxzZXt2YXIgbWU9aWUrcS5zbGljZShKLGxl''@;'; put 'put ''KS50b1N0cmluZygpLnJlcGxhY2UoLywvZywiLyIpO2VlKz10aGlzLmljb252LmRlY29kZShJLmZyb20obWUsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfXFbbGVdIT1OJiZsZS0tLEo9bGUrMSxuZT0hMSxpZT0iIn19ZWxzZSAzOD09cVtsZV0mJihlZSs9dGhpcy5pY29udi5kZWNvZGUocS5zbGlj''@;'; put 'put ''ZShKLGxlKSwiYXNjaWkiKSxKPWxlKzEsbmU9ITApO2lmKG5lKXt2YXIgX2U9KG1lPWllK3Euc2xpY2UoSikudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKSkubGVuZ3RoLW1lLmxlbmd0aCU4O2llPW1lLnNsaWNlKF9lKSxtZT1tZS5zbGljZSgwLF9lKSxlZSs9dGhpcy5pY29udi5kZWNv''@;'; put 'put ''ZGUoSS5mcm9tKG1lLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1lbHNlIGVlKz10aGlzLmljb252LmRlY29kZShxLnNsaWNlKEopLCJhc2NpaSIpO3JldHVybiB0aGlzLmluQmFzZTY0PW5lLHRoaXMuYmFzZTY0QWNjdW09aWUsZWV9LFcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBxPSIi''@;'; put 'put ''O3JldHVybiB0aGlzLmluQmFzZTY0JiZ0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aD4wJiYocT10aGlzLmljb252LmRlY29kZShJLmZyb20odGhpcy5iYXNlNjRBY2N1bSwiYmFzZTY0IiksInV0ZjE2LWJlIikpLHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIixxfX0sMjk0MjI6''@;'; put 'put ''KHVlLFgpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxCKXt0aGlzLmVuY29kZXI9Zyx0aGlzLmFkZEJPTT0hMH1mdW5jdGlvbiBfKGcsQil7dGhpcy5kZWNvZGVyPWcsdGhpcy5wYXNzPSExLHRoaXMub3B0aW9ucz1CfHx7fX1YLlByZXBlbmRCT009SSxJLnByb3RvdHlwZS53cml0ZT1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5hZGRCT00mJihnPSJcdWZlZmYiK2csdGhpcy5hZGRCT009ITEpLHRoaXMuZW5jb2Rlci53cml0ZShnKX0sSS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sWC5TdHJpcEJPTT1fLF8ucHJvdG90eXBlLndy''@;'; put 'put ''aXRlPWZ1bmN0aW9uKGcpe3ZhciBCPXRoaXMuZGVjb2Rlci53cml0ZShnKTtyZXR1cm4gdGhpcy5wYXNzfHwhQnx8KCJcdWZlZmYiPT09QlswXSYmKEI9Qi5zbGljZSgxKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vcHRpb25zLnN0cmlwQk9NJiZ0aGlzLm9wdGlvbnMuc3RyaXBCT00oKSks''@;'; put 'put ''dGhpcy5wYXNzPSEwKSxCfSxfLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sOTQyNDg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzgwNykuQnVmZmVyLF89eSgyOTQyMiksZz11ZS5leHBvcnRzO2cuZW5jb2RpbmdzPW51bGws''@;'; put 'put ''Zy5kZWZhdWx0Q2hhclVuaWNvZGU9Ilx1ZmZmZCIsZy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU9Ij8iLGcuZW5jb2RlPWZ1bmN0aW9uKEYsTyx6KXtGPSIiKyhGfHwiIik7dmFyIE49Zy5nZXRFbmNvZGVyKE8seiksTD1OLndyaXRlKEYpLEs9Ti5lbmQoKTtyZXR1cm4gSyYmSy5sZW5ndGg+MD9J''@;'; put 'put ''LmNvbmNhdChbTCxLXSk6TH0sZy5kZWNvZGU9ZnVuY3Rpb24oRixPLHopeyJzdHJpbmciPT10eXBlb2YgRiYmKGcuc2tpcERlY29kZVdhcm5pbmd8fChjb25zb2xlLmVycm9yKCJJY29udi1saXRlIHdhcm5pbmc6IGRlY29kZSgpLWluZyBzdHJpbmdzIGlzIGRlcHJlY2F0ZWQuIFJlZmVyIHRv''@;'; put 'put ''IGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9Vc2UtQnVmZmVycy13aGVuLWRlY29kaW5nIiksZy5za2lwRGVjb2RlV2FybmluZz0hMCksRj1JLmZyb20oIiIrKEZ8fCIiKSwiYmluYXJ5IikpO3ZhciBOPWcuZ2V0RGVjb2RlcihPLHopLEw9Ti53cml0ZShG''@;'; put 'put ''KSxLPU4uZW5kKCk7cmV0dXJuIEs/TCtLOkx9LGcuZW5jb2RpbmdFeGlzdHM9ZnVuY3Rpb24oRil7dHJ5e3JldHVybiBnLmdldENvZGVjKEYpLCEwfWNhdGNoe3JldHVybiExfX0sZy50b0VuY29kaW5nPWcuZW5jb2RlLGcuZnJvbUVuY29kaW5nPWcuZGVjb2RlLGcuX2NvZGVjRGF0YUNhY2hl''@;'; put 'put ''PXt9LGcuZ2V0Q29kZWM9ZnVuY3Rpb24oRil7Zy5lbmNvZGluZ3N8fChnLmVuY29kaW5ncz15KDcyODkzKSk7Zm9yKHZhciBPPWcuX2Nhbm9uaWNhbGl6ZUVuY29kaW5nKEYpLHo9e307Oyl7dmFyIE49Zy5fY29kZWNEYXRhQ2FjaGVbT107aWYoTilyZXR1cm4gTjt2YXIgTD1nLmVuY29kaW5n''@;'; put 'put ''c1tPXTtzd2l0Y2godHlwZW9mIEwpe2Nhc2Uic3RyaW5nIjpPPUw7YnJlYWs7Y2FzZSJvYmplY3QiOmZvcih2YXIgSyBpbiBMKXpbS109TFtLXTt6LmVuY29kaW5nTmFtZXx8KHouZW5jb2RpbmdOYW1lPU8pLE89TC50eXBlO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnJldHVybiB6LmVuY29kaW5n''@;'; put 'put ''TmFtZXx8KHouZW5jb2RpbmdOYW1lPU8pLE49bmV3IEwoeixnKSxnLl9jb2RlY0RhdGFDYWNoZVt6LmVuY29kaW5nTmFtZV09TixOO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyBub3QgcmVjb2duaXplZDogJyIrRisiJyAoc2VhcmNoZWQgYXM6ICciK08rIicpIil9fX0sZy5f''@;'; put 'put ''Y2Fub25pY2FsaXplRW5jb2Rpbmc9ZnVuY3Rpb24oUCl7cmV0dXJuKCIiK1ApLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvOlxkezR9JHxbXjAtOWEtel0vZywiIil9LGcuZ2V0RW5jb2Rlcj1mdW5jdGlvbihGLE8pe3ZhciB6PWcuZ2V0Q29kZWMoRiksTj1uZXcgei5lbmNvZGVyKE8seik7cmV0''@;'; put 'put ''dXJuIHouYm9tQXdhcmUmJk8mJk8uYWRkQk9NJiYoTj1uZXcgXy5QcmVwZW5kQk9NKE4sTykpLE59LGcuZ2V0RGVjb2Rlcj1mdW5jdGlvbihGLE8pe3ZhciB6PWcuZ2V0Q29kZWMoRiksTj1uZXcgei5kZWNvZGVyKE8seik7cmV0dXJuIHouYm9tQXdhcmUmJiEoTyYmITE9PT1PLnN0cmlwQk9N''@;'; put 'put ''KSYmKE49bmV3IF8uU3RyaXBCT00oTixPKSksTn07dmFyIEI9dHlwZW9mIHByb2Nlc3M8InUiJiZwcm9jZXNzLnZlcnNpb25zJiZwcm9jZXNzLnZlcnNpb25zLm5vZGU7aWYoQil7dmFyIHc9Qi5zcGxpdCgiLiIpLm1hcChOdW1iZXIpOyh3WzBdPjB8fHdbMV0+PTEwKSYmeSg2MTA5MykoZyks''@;'; put 'put ''eSgxNTc5MSkoZyl9fSwyMjAyMDoodWUsWCk9PntYLnJlYWQ9ZnVuY3Rpb24oeSxJLF8sZyxCKXt2YXIgdyxQLEY9OCpCLWctMSxPPSgxPDxGKS0xLHo9Tz4+MSxOPS03LEw9Xz9CLTE6MCxLPV8/LTE6MSxVPXlbSStMXTtmb3IoTCs9Syx3PVUmKDE8PC1OKS0xLFU+Pj0tTixOKz1GO04+MDt3''@;'; put 'put ''PTI1Nip3K3lbSStMXSxMKz1LLE4tPTgpO2ZvcihQPXcmKDE8PC1OKS0xLHc+Pj0tTixOKz1nO04+MDtQPTI1NipQK3lbSStMXSxMKz1LLE4tPTgpO2lmKDA9PT13KXc9MS16O2Vsc2V7aWYodz09PU8pcmV0dXJuIFA/TmFOOjEvMCooVT8tMToxKTtQKz1NYXRoLnBvdygyLGcpLHctPXp9cmV0''@;'; put 'put ''dXJuKFU/LTE6MSkqUCpNYXRoLnBvdygyLHctZyl9LFgud3JpdGU9ZnVuY3Rpb24oeSxJLF8sZyxCLHcpe3ZhciBQLEYsTyx6PTgqdy1CLTEsTj0oMTw8eiktMSxMPU4+PjEsSz0yMz09PUI/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLFU9Zz8wOnctMSxXPWc/MTotMSxZPUk8''@;'; put 'put ''MHx8MD09PUkmJjEvSTwwPzE6MDtmb3IoST1NYXRoLmFicyhJKSxpc05hTihJKXx8ST09PTEvMD8oRj1pc05hTihJKT8xOjAsUD1OKTooUD1NYXRoLmZsb29yKE1hdGgubG9nKEkpL01hdGguTE4yKSxJKihPPU1hdGgucG93KDIsLVApKTwxJiYoUC0tLE8qPTIpLChJKz1QK0w+PTE/Sy9POksq''@;'; put 'put ''TWF0aC5wb3coMiwxLUwpKSpPPj0yJiYoUCsrLE8vPTIpLFArTD49Tj8oRj0wLFA9Tik6UCtMPj0xPyhGPShJKk8tMSkqTWF0aC5wb3coMixCKSxQKz1MKTooRj1JKk1hdGgucG93KDIsTC0xKSpNYXRoLnBvdygyLEIpLFA9MCkpO0I+PTg7eVtfK1VdPTI1NSZGLFUrPVcsRi89MjU2LEItPTgp''@;'; put 'put ''O2ZvcihQPVA8PEJ8Rix6Kz1CO3o+MDt5W18rVV09MjU1JlAsVSs9VyxQLz0yNTYsei09OCk7eVtfK1UtV118PTEyOCpZfX0sNzE5OTM6dWU9Pnt1ZS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHksSSl7SSYmKHkuc3VwZXJfPUkseS5wcm90b3R5''@;'; put 'put ''cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnksZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTpmdW5jdGlvbih5LEkpe2lmKEkpe3kuc3VwZXJfPUk7dmFyIF89ZnVuY3Rpb24oKXt9O18ucHJvdG90eXBlPUkucHJv''@;'; put 'put ''dG90eXBlLHkucHJvdG90eXBlPW5ldyBfLHkucHJvdG90eXBlLmNvbnN0cnVjdG9yPXl9fX0sMjAwNTM6dWU9Pnt2YXIgWD17fS50b1N0cmluZzt1ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHkpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PVguY2FsbCh5KX19LDM0NzI1Oih1''@;'; put 'put ''ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzE5OTMpLF89eSgxMzY4NiksZz15KDI3MDU0KS5CdWZmZXIsQj1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIHcoKXtfLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMx''@;'; put 'put ''MDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gUChMLEspe3JldHVybiBMPDxLfEw+Pj4zMi1LfWZ1bmN0aW9uIEYoTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKEsmVXx+SyZXKStZK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIE8oTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKEsmV3xV''@;'; put 'put ''Jn5XKStZK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIHooTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKEteVV5XKStZK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIE4oTCxLLFUsVyxZLHEsZWUpe3JldHVybiBQKEwrKFVeKEt8flcpKStZK3F8MCxlZSkrS3wwfUkodyxfKSx3LnByb3RvdHlwZS5fdXBk''@;'; put 'put ''YXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBMPUIsSz0wO0s8MTY7KytLKUxbS109dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpLKTt2YXIgVT10aGlzLl9hLFc9dGhpcy5fYixZPXRoaXMuX2MscT10aGlzLl9kO1U9RihVLFcsWSxxLExbMF0sMzYxNDA5MDM2MCw3KSxxPUYocSxVLFcsWSxMWzFd''@;'; put 'put ''LDM5MDU0MDI3MTAsMTIpLFk9RihZLHEsVSxXLExbMl0sNjA2MTA1ODE5LDE3KSxXPUYoVyxZLHEsVSxMWzNdLDMyNTA0NDE5NjYsMjIpLFU9RihVLFcsWSxxLExbNF0sNDExODU0ODM5OSw3KSxxPUYocSxVLFcsWSxMWzVdLDEyMDAwODA0MjYsMTIpLFk9RihZLHEsVSxXLExbNl0sMjgyMTcz''@;'; put 'put ''NTk1NSwxNyksVz1GKFcsWSxxLFUsTFs3XSw0MjQ5MjYxMzEzLDIyKSxVPUYoVSxXLFkscSxMWzhdLDE3NzAwMzU0MTYsNykscT1GKHEsVSxXLFksTFs5XSwyMzM2NTUyODc5LDEyKSxZPUYoWSxxLFUsVyxMWzEwXSw0Mjk0OTI1MjMzLDE3KSxXPUYoVyxZLHEsVSxMWzExXSwyMzA0NTYzMTM0''@;'; put 'put ''LDIyKSxVPUYoVSxXLFkscSxMWzEyXSwxODA0NjAzNjgyLDcpLHE9RihxLFUsVyxZLExbMTNdLDQyNTQ2MjYxOTUsMTIpLFk9RihZLHEsVSxXLExbMTRdLDI3OTI5NjUwMDYsMTcpLFU9TyhVLFc9RihXLFkscSxVLExbMTVdLDEyMzY1MzUzMjksMjIpLFkscSxMWzFdLDQxMjkxNzA3ODYsNSks''@;'; put 'put ''cT1PKHEsVSxXLFksTFs2XSwzMjI1NDY1NjY0LDkpLFk9TyhZLHEsVSxXLExbMTFdLDY0MzcxNzcxMywxNCksVz1PKFcsWSxxLFUsTFswXSwzOTIxMDY5OTk0LDIwKSxVPU8oVSxXLFkscSxMWzVdLDM1OTM0MDg2MDUsNSkscT1PKHEsVSxXLFksTFsxMF0sMzgwMTYwODMsOSksWT1PKFkscSxV''@;'; put 'put ''LFcsTFsxNV0sMzYzNDQ4ODk2MSwxNCksVz1PKFcsWSxxLFUsTFs0XSwzODg5NDI5NDQ4LDIwKSxVPU8oVSxXLFkscSxMWzldLDU2ODQ0NjQzOCw1KSxxPU8ocSxVLFcsWSxMWzE0XSwzMjc1MTYzNjA2LDkpLFk9TyhZLHEsVSxXLExbM10sNDEwNzYwMzMzNSwxNCksVz1PKFcsWSxxLFUsTFs4''@;'; put 'put ''XSwxMTYzNTMxNTAxLDIwKSxVPU8oVSxXLFkscSxMWzEzXSwyODUwMjg1ODI5LDUpLHE9TyhxLFUsVyxZLExbMl0sNDI0MzU2MzUxMiw5KSxZPU8oWSxxLFUsVyxMWzddLDE3MzUzMjg0NzMsMTQpLFU9eihVLFc9TyhXLFkscSxVLExbMTJdLDIzNjgzNTk1NjIsMjApLFkscSxMWzVdLDQyOTQ1''@;'; put 'put ''ODg3MzgsNCkscT16KHEsVSxXLFksTFs4XSwyMjcyMzkyODMzLDExKSxZPXooWSxxLFUsVyxMWzExXSwxODM5MDMwNTYyLDE2KSxXPXooVyxZLHEsVSxMWzE0XSw0MjU5NjU3NzQwLDIzKSxVPXooVSxXLFkscSxMWzFdLDI3NjM5NzUyMzYsNCkscT16KHEsVSxXLFksTFs0XSwxMjcyODkzMzUz''@;'; put 'put ''LDExKSxZPXooWSxxLFUsVyxMWzddLDQxMzk0Njk2NjQsMTYpLFc9eihXLFkscSxVLExbMTBdLDMyMDAyMzY2NTYsMjMpLFU9eihVLFcsWSxxLExbMTNdLDY4MTI3OTE3NCw0KSxxPXoocSxVLFcsWSxMWzBdLDM5MzY0MzAwNzQsMTEpLFk9eihZLHEsVSxXLExbM10sMzU3MjQ0NTMxNywxNiks''@;'; put 'put ''Vz16KFcsWSxxLFUsTFs2XSw3NjAyOTE4OSwyMyksVT16KFUsVyxZLHEsTFs5XSwzNjU0NjAyODA5LDQpLHE9eihxLFUsVyxZLExbMTJdLDM4NzMxNTE0NjEsMTEpLFk9eihZLHEsVSxXLExbMTVdLDUzMDc0MjUyMCwxNiksVT1OKFUsVz16KFcsWSxxLFUsTFsyXSwzMjk5NjI4NjQ1LDIzKSxZ''@;'; put 'put ''LHEsTFswXSw0MDk2MzM2NDUyLDYpLHE9TihxLFUsVyxZLExbN10sMTEyNjg5MTQxNSwxMCksWT1OKFkscSxVLFcsTFsxNF0sMjg3ODYxMjM5MSwxNSksVz1OKFcsWSxxLFUsTFs1XSw0MjM3NTMzMjQxLDIxKSxVPU4oVSxXLFkscSxMWzEyXSwxNzAwNDg1NTcxLDYpLHE9TihxLFUsVyxZLExb''@;'; put 'put ''M10sMjM5OTk4MDY5MCwxMCksWT1OKFkscSxVLFcsTFsxMF0sNDI5MzkxNTc3MywxNSksVz1OKFcsWSxxLFUsTFsxXSwyMjQwMDQ0NDk3LDIxKSxVPU4oVSxXLFkscSxMWzhdLDE4NzMzMTMzNTksNikscT1OKHEsVSxXLFksTFsxNV0sNDI2NDM1NTU1MiwxMCksWT1OKFkscSxVLFcsTFs2XSwy''@;'; put 'put ''NzM0NzY4OTE2LDE1KSxXPU4oVyxZLHEsVSxMWzEzXSwxMzA5MTUxNjQ5LDIxKSxVPU4oVSxXLFkscSxMWzRdLDQxNDk0NDQyMjYsNikscT1OKHEsVSxXLFksTFsxMV0sMzE3NDc1NjkxNywxMCksWT1OKFkscSxVLFcsTFsyXSw3MTg3ODcyNTksMTUpLFc9TihXLFkscSxVLExbOV0sMzk1MTQ4''@;'; put 'put ''MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK1V8MCx0aGlzLl9iPXRoaXMuX2IrV3wwLHRoaXMuX2M9dGhpcy5fYytZfDAsdGhpcy5fZD10aGlzLl9kK3F8MH0sdy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9i''@;'; put 'put ''bG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMu''@;'; put 'put ''X2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBMPWcuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEwud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksTC53cml0''@;'; put 'put ''ZUludDMyTEUodGhpcy5fYyw4KSxMLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxMfSx1ZS5leHBvcnRzPXd9LDUzNDU5Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzIyMyksXz15KDM1Mjk0KTtmdW5jdGlvbiBnKEIpe3RoaXMucmFuZD1CfHxuZXcgXy5SYW5kfXVlLmV4cG9ydHM9ZyxnLmNyZWF0''@;'; put 'put ''ZT1mdW5jdGlvbih3KXtyZXR1cm4gbmV3IGcodyl9LGcucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24odyl7dmFyIFA9dy5iaXRMZW5ndGgoKSxGPU1hdGguY2VpbChQLzgpO2Rve3ZhciBPPW5ldyBJKHRoaXMucmFuZC5nZW5lcmF0ZShGKSl9d2hpbGUoTy5jbXAodyk+PTApO3JldHVy''@;'; put 'put ''biBPfSxnLnByb3RvdHlwZS5fcmFuZHJhbmdlPWZ1bmN0aW9uKHcsUCl7dmFyIEY9UC5zdWIodyk7cmV0dXJuIHcuYWRkKHRoaXMuX3JhbmRiZWxvdyhGKSl9LGcucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24odyxQLEYpe3ZhciBPPXcuYml0TGVuZ3RoKCksej1JLm1vbnQodyksTj1uZXcgSSgx''@;'; put 'put ''KS50b1JlZCh6KTtQfHwoUD1NYXRoLm1heCgxLE8vNDh8MCkpO2Zvcih2YXIgTD13LnN1Ym4oMSksSz0wOyFMLnRlc3RuKEspO0srKyk7Zm9yKHZhciBVPXcuc2hybihLKSxXPUwudG9SZWQoeik7UD4wO1AtLSl7dmFyIHE9dGhpcy5fcmFuZHJhbmdlKG5ldyBJKDIpLEwpO0YmJkYocSk7dmFy''@;'; put 'put ''IGVlPXEudG9SZWQoeikucmVkUG93KFUpO2lmKDAhPT1lZS5jbXAoTikmJjAhPT1lZS5jbXAoVykpe2Zvcih2YXIgSj0xO0o8SztKKyspe2lmKDA9PT0oZWU9ZWUucmVkU3FyKCkpLmNtcChOKSlyZXR1cm4hMTtpZigwPT09ZWUuY21wKFcpKWJyZWFrfWlmKEo9PT1LKXJldHVybiExfX1yZXR1''@;'; put 'put ''cm4hMH0sZy5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbih3LFApe3ZhciBGPXcuYml0TGVuZ3RoKCksTz1JLm1vbnQodyksej1uZXcgSSgxKS50b1JlZChPKTtQfHwoUD1NYXRoLm1heCgxLEYvNDh8MCkpO2Zvcih2YXIgTj13LnN1Ym4oMSksTD0wOyFOLnRlc3RuKEwpO0wrKyk7Zm9y''@;'; put 'put ''KHZhciBLPXcuc2hybihMKSxVPU4udG9SZWQoTyk7UD4wO1AtLSl7dmFyIFc9dGhpcy5fcmFuZHJhbmdlKG5ldyBJKDIpLE4pLFk9dy5nY2QoVyk7aWYoMCE9PVkuY21wbigxKSlyZXR1cm4gWTt2YXIgcT1XLnRvUmVkKE8pLnJlZFBvdyhLKTtpZigwIT09cS5jbXAoeikmJjAhPT1xLmNtcChV''@;'; put 'put ''KSl7Zm9yKHZhciBlZT0xO2VlPEw7ZWUrKyl7aWYoMD09PShxPXEucmVkU3FyKCkpLmNtcCh6KSlyZXR1cm4gcS5mcm9tUmVkKCkuc3VibigxKS5nY2Qodyk7aWYoMD09PXEuY21wKFUpKWJyZWFrfWlmKGVlPT09TClyZXR1cm4ocT1xLnJlZFNxcigpKS5mcm9tUmVkKCkuc3VibigxKS5nY2Qo''@;'; put 'put ''dyl9fXJldHVybiExfX0sNTcyMjM6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0''@;'; put 'put ''aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhp''@;'; put 'put ''cy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Yg''@;'; put 'put ''d2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg2NDY4OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1m''@;'; put 'put ''dW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9''@;'; put 'put ''aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53''@;'; put 'put ''b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5p''@;'; put 'put ''dE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYm''@;'; put 'put ''KEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5j''@;'; put 'put ''dGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0''@;'; put 'put ''aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zv''@;'; put 'put ''cih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jk''@;'; put 'put ''c1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1Qr''@;'; put 'put ''MV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0''@;'; put 'put ''aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0''@;'; put 'put ''aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7''@;'; put 'put ''dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgu''@;'; put 'put ''bWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8''@;'; put 'put ''ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFy''@;'; put 'put ''IGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0''@;'; put 'put ''aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlz''@;'; put 'put ''LndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5w''@;'; put 'put ''cm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAi''@;'; put 'put ''XSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwx''@;'; put 'put ''ZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwy''@;'; put 'put ''NDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxW''@;'; put 'put ''LndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5s''@;'; put 'put ''ZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAo''@;'; put 'put ''KX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xU''@;'; put 'put ''KSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDty''@;'; put 'put ''ZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmlu''@;'; put 'put ''ZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxk''@;'; put 'put ''IGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1''@;'; put 'put ''MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5''@;'; put 'put ''LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5n''@;'; put 'put ''dGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7''@;'; put 'put ''bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0''@;'; put 'put ''aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVy''@;'; put 'put ''biAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5f''@;'; put 'put ''Y291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9''@;'; put 'put ''dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhp''@;'; put 'put ''cy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29y''@;'; put 'put ''ZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhp''@;'; put 'put ''cy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihw''@;'; put 'put ''KXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5w''@;'; put 'put ''cm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlz''@;'; put 'put ''LHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0''@;'; put 'put ''aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUo''@;'; put 'put ''KS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtn''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNb''@;'; put 'put ''Q109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTAp''@;'; put 'put ''O3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5p''@;'; put 'put ''c3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tI''@;'; put 'put ''XSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7''@;'; put 'put ''ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxi''@;'; put 'put ''PXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgp''@;'; put 'put ''LmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9''@;'; put 'put ''dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndv''@;'; put 'put ''cmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSks''@;'; put 'put ''dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+''@;'; put 'put ''PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLHhlPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10semU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxPZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxf''@;'; put 'put ''dD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxU''@;'; put 'put ''WzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxo''@;'; put 'put ''dD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFy''@;'; put 'put ''IHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVl''@;'; put 'put ''LFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLFJ0KSxtPShtPU1hdGguaW11bCh4ZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxR''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoemUsUnQpLG09KG09TWF0aC5pbXVsKHplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHhlLFF0KXwwLG09KG09bStNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''SmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24m''@;'; put 'put ''PTY3MTA4ODYzLEU9TWF0aC5pbXVsKE9lLFJ0KSxtPShtPU1hdGguaW11bChPZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bCh6ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkr''@;'; put 'put ''KG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChPZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLHNuKXww''@;'; put 'put ''KStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKHplLGhuKXwwLG09KG09bStNYXRoLmltdWwoemUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoeGUsV3QpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGor''@;'; put 'put ''KEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmlt''@;'; put 'put ''dWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoT2UsaG4pfDAsbT0obT1tK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bCh6ZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHN0KXwwLG09KG09bStNYXRoLmltdWwoeGUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkr''@;'; put 'put ''KG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXww''@;'; put 'put ''KStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoT2UsV3QpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChPZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bCh6ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHhlLFdlKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''SmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkm''@;'; put 'put ''PTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChPZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE9lLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHplLFdlKXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoemUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsaHQpfDAsbT0obT1tK01hdGguaW11bCh4ZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxy''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''TXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxz''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoT2UsV2UpfDAsbT0obT1tK01hdGguaW11bChPZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bCh6ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHplLHh0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxo''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE9lLGh0KXwwLG09KG09bStNYXRoLmltdWwoT2UseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoemUscm4pfDAsbT0obT1tK01hdGguaW11bCh6ZSx6dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bCh4ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoT2Uscm4pfDAsbT0obT1tK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSWUsenQpfDAsRT1FK01hdGguaW11bCh6ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoeGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh4ZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoT2UsY24pfDAsbT0obT1tK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoemUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhl''@;'; put 'put ''LHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoT2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChPZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxj''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGor''@;'; put 'put ''KEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShq''@;'; put 'put ''KyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09''@;'; put 'put ''RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4''@;'; put 'put ''Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5s''@;'; put 'put ''ZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3Io''@;'; put 'put ''dmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1tt''@;'; put 'put ''XSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJp''@;'; put 'put ''cCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5w''@;'; put 'put ''cm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIg''@;'; put 'put ''aj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5Q''@;'; put 'put ''SS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLHhlPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqeGU7eGU9dGUqeGUrc2Uqb3Qs''@;'; put 'put ''eFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZSt4ZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUteGUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5t''@;'; put 'put ''YXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFd''@;'; put 'put ''PVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtD''@;'; put 'put ''XT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxU''@;'; put 'put ''Pj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAs''@;'; put 'put ''Yix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcg''@;'; put 'put ''QXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQp''@;'; put 'put ''O2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29u''@;'; put 'put ''anVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIu''@;'; put 'put ''d29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcu''@;'; put 'put ''cHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3Zh''@;'; put 'put ''ciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5n''@;'; put 'put ''dGg9MD09PXA/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2''@;'; put 'put ''fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9''@;'; put 'put ''VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0w''@;'; put 'put ''O2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7''@;'; put 'put ''VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSks''@;'; put 'put ''dGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2''@;'; put 'put ''Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRo''@;'; put 'put ''aXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+''@;'; put 'put ''PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNo''@;'; put 'put ''cm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2''@;'; put 'put ''YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRo''@;'; put 'put ''aXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2''@;'; put 'put ''M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2''@;'; put 'put ''NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCks''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQs''@;'; put 'put ''Yj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2''@;'; put 'put ''NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08''@;'; put 'put ''MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtU''@;'; put 'put ''Kyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hd''@;'; put 'put ''KStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1''@;'; put 'put ''cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1''@;'; put 'put ''c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0Fd''@;'; put 'put ''PTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxl''@;'; put 'put ''bmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRz''@;'; put 'put ''W3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2''@;'; put 'put ''Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHAp''@;'; put 'put ''KSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2''@;'; put 'put ''bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJk''@;'; put 'put ''aXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMu''@;'; put 'put ''X3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUu''@;'; put 'put ''dW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2Iu''@;'; put 'put ''bW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7''@;'; put 'put ''ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlz''@;'; put 'put ''Lmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcg''@;'; put 'put ''dygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYo''@;'; put 'put ''YWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClm''@;'; put 'put ''b3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1''@;'; put 'put ''YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgp''@;'; put 'put ''O2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlh''@;'; put 'put ''ZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6''@;'; put 'put ''KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFi''@;'; put 'put ''cygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3Io''@;'; put 'put ''O3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1D''@;'; put 'put ''LHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5w''@;'; put 'put ''cm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''JiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8''@;'; put 'put ''LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNb''@;'; put 'put ''eF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAo''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVx''@;'; put 'put ''bj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGco''@;'; put 'put ''IXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5w''@;'; put 'put ''cm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRk''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElT''@;'; put 'put ''dWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu''@;'; put 'put ''cmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0''@;'; put 'put ''KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJy''@;'; put 'put ''ZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0''@;'; put 'put ''aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5''@;'; put 'put ''MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIp''@;'; put 'put ''fWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24g''@;'; put 'put ''amUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIo''@;'; put 'put ''KSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBl''@;'; put 'put ''Ll90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhp''@;'; put 'put ''cy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9i''@;'; put 'put ''LnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtm''@;'; put 'put ''b3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90''@;'; put 'put ''b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQq''@;'; put 'put ''QysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZh''@;'; put 'put ''ciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtwXSlyZXR1''@;'; put 'put ''cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVy''@;'; put 'put ''biBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1''@;'; put 'put ''bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQo''@;'; put 'put ''dGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3Ro''@;'; put 'put ''aXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4Lmlh''@;'; put 'put ''ZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIp''@;'; put 'put ''e3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBl''@;'; put 'put ''LnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5t''@;'; put 'put ''LnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3Io''@;'; put 'put ''bT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zv''@;'; put 'put ''cih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBh''@;'; put 'put ''ZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIu''@;'; put 'put ''aXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwo''@;'; put 'put ''Q1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3Fy''@;'; put 'put ''KEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0''@;'; put 'put ''dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IGplKHApfSxCKGplLFNlKSxqZS5wcm90b3R5cGUuY29udmVydFRv''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LGplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0samUucHJvdG90eXBlLmltdWw9ZnVu''@;'; put 'put ''Y3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMp''@;'; put 'put ''Lml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5p''@;'; put 'put ''c1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4g''@;'; put 'put ''VC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LGplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sMzkyMTA6dWU9PntmdW5jdGlvbiBYKHksSSl7aWYoIXkpdGhyb3cgbmV3IEVycm9yKEl8fCJBc3NlcnRpb24gZmFpbGVkIil9dWUuZXhwb3J0cz1YLFguZXF1YWw9ZnVuY3Rpb24oSSxfLGcpe2lmKEkhPV8pdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkOiAiK0krIiAhPSAiK18pfX0sMjE4MzI6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciB5PVg7ZnVuY3Rpb24gXyhCKXtyZXR1cm4gMT09PUIubGVuZ3RoPyIwIitCOkJ9ZnVuY3Rpb24gZyhCKXtmb3IodmFyIHc9IiIsUD0wO1A8Qi5sZW5ndGg7UCsr''@;'; put 'put ''KXcrPV8oQltQXS50b1N0cmluZygxNikpO3JldHVybiB3fXkudG9BcnJheT1mdW5jdGlvbiBJKEIsdyl7aWYoQXJyYXkuaXNBcnJheShCKSlyZXR1cm4gQi5zbGljZSgpO2lmKCFCKXJldHVybltdO3ZhciBQPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgQil7Zm9yKHZhciBGPTA7RjxCLmxlbmd0''@;'; put 'put ''aDtGKyspUFtGXT0wfEJbRl07cmV0dXJuIFB9aWYoImhleCI9PT13KWZvcigoQj1CLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKEI9IjAiK0IpLEY9MDtGPEIubGVuZ3RoO0YrPTIpUC5wdXNoKHBhcnNlSW50KEJbRl0rQltGKzFdLDE2KSk7ZWxzZSBmb3IoRj0w''@;'; put 'put ''O0Y8Qi5sZW5ndGg7RisrKXt2YXIgTz1CLmNoYXJDb2RlQXQoRiksej1PPj44LE49MjU1Jk87ej9QLnB1c2goeixOKTpQLnB1c2goTil9cmV0dXJuIFB9LHkuemVybzI9Xyx5LnRvSGV4PWcseS5lbmNvZGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4iaGV4Ij09PVA/Zyh3KTp3fX0sMTE1NDQ6ZnVu''@;'; put 'put ''Y3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJhZiIse21vbnRoczoiSmFudWFyaWVfRmVicnVhcmllX01hYXJ0X0FwcmlsX01laV9KdW5pZV9KdWxpZV9BdWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlciIuc3Bs''@;'; put 'put ''aXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NcnRfQXByX01laV9KdW5fSnVsX0F1Z19TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlNvbmRhZ19NYWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1Nob3J0OiJTb25fTWFhX0Rpbl9Xb2VfRG9uX1ZyeV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01hX0RpX1dvX0RvX1ZyX1NhIi5zcGxpdCgiXyIpLG1lcmlkaWVtUGFyc2U6L3ZtfG5tL2ksaXNQTTpmdW5jdGlvbihnKXtyZXR1cm4vXm5tJC9pLnRlc3QoZyl9LG1lcmlk''@;'; put 'put ''aWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMj93PyJ2bSI6IlZNIjp3PyJubSI6Ik5NIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRk''@;'; put 'put ''LCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVmFuZGFnIG9tXSBMVCIsbmV4dERheToiW01ceGY0cmUgb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbR2lzdGVyIG9tXSBMVCIsbGFzdFdlZWs6IltMYWFzXSBkZGRkIFtvbV0gTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9vciAlcyIscGFzdDoiJXMgZ2VsZWRlIixzOiInbiBwYWFyIHNla29uZGVzIixzczoiJWQgc2Vrb25kZXMiLG06IiduIG1pbnV1dCIsbW06IiVkIG1pbnV0ZSIsaDoiJ24gdXVyIixoaDoiJWQgdXJlIixkOiInbiBkYWciLGRkOiIl''@;'; put 'put ''ZCBkYWUiLE06IiduIG1hYW5kIixNTToiJWQgbWFhbmRlIix5OiInbiBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4gZysoMT09PWd8fDg9PT1nfHxnPj0yMD8ic3RlIjoiZGUiKX0s''@;'; put 'put ''d2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNTIxNTU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPWZ1bmN0aW9uKEYpe3JldHVybiAwPT09Rj8wOjE9PT1GPzE6Mj09PUY/MjpGJTEwMD49MyYmRiUxMDA8PTEwPzM6RiUxMDA+PTExPzQ6''@;'; put 'put ''NX0sZz17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFc''@;'; put 'put ''dTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5''@;'; put 'put ''Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2''@;'; put 'put ''MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUw''@;'; put 'put ''NjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYi''@;'; put 'put ''LCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2''@;'; put 'put ''NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3''@;'; put 'put ''XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1''@;'; put 'put ''MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1''@;'; put 'put ''MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwi''@;'; put 'put ''JWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LEI9ZnVuY3Rpb24oRil7cmV0dXJuIGZ1bmN0aW9uKE8seixOLEwpe3ZhciBLPV8oTyksVT1nW0ZdW18oTyldO3JldHVy''@;'; put 'put ''biAyPT09SyYmKFU9VVt6PzA6MV0pLFUucmVwbGFjZSgvJWQvaSxPKX19LHc9WyJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGEiLCJcdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFc''@;'; put 'put ''dTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGEiLCJcdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDYiLCJcdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjkiLCJcdTA2MjNcdTA2NDhcdTA2MmEiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2''@;'; put 'put ''NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgiYXItZHoiLHttb250aHM6dyxtb250aHNTaG9ydDp3LHdlZWtkYXlzOiJc''@;'; put 'put ''dTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2Mjdc''@;'; put 'put ''dTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1''@;'; put 'put ''MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJh''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9c''@;'; put 'put ''dTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKEYpe3JldHVybiJcdTA2NDUiPT09Rn0sbWVyaWRpZW06ZnVuY3Rp''@;'; put 'put ''b24oRixPLHope3JldHVybiBGPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1''@;'; put 'put ''MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0''@;'; put 'put ''RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOkIoInMiKSxzczpCKCJzIiksbTpCKCJtIiksbW06QigibSIpLGg6QigiaCIpLGhoOkIoImgiKSxkOkIoImQiKSxkZDpCKCJkIiksTTpC''@;'; put 'put ''KCJNIiksTU06QigiTSIpLHk6QigieSIpLHl5OkIoInkiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihGKXtyZXR1cm4gRi5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0oeSg5NzU4NikpfSw1MzU4MzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNl''@;'; put 'put ''IHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImFyLWt3Iix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRf''@;'; put 'put ''XHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2''@;'; put 'put ''MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9c''@;'; put 'put ''dTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2''@;'; put 'put ''MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYy''@;'; put 'put ''M1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmFcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2''@;'; put 'put ''NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjdcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjJhXHUwNjQ2XHUwNjRh''@;'; put 'put ''XHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZ''@;'; put 'put ''IixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0g''@;'; put 'put ''TFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5''@;'; put 'put ''XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2''@;'; put 'put ''MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2''@;'; put 'put ''MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQg''@;'; put 'put ''XHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzowLGRveToxMn19''@;'; put 'put ''KX0oeSg5NzU4NikpfSw0MTYzODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6IjEiLDI6IjIiLDM6IjMiLDQ6IjQiLDU6IjUiLDY6IjYiLDc6IjciLDg6IjgiLDk6IjkiLDA6IjAifSxnPWZ1bmN0aW9uKE8pe3JldHVybiAwPT09Tz8wOjE9PT1P''@;'; put 'put ''PzE6Mj09PU8/MjpPJTEwMD49MyYmTyUxMDA8PTEwPzM6TyUxMDA+PTExPzQ6NX0sQj17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1''@;'; put 'put ''MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUw''@;'; put 'put ''NjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYy''@;'; put 'put ''ZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRh''@;'; put 'put ''XHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1''@;'; put 'put ''MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUw''@;'; put 'put ''NjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2''@;'; put 'put ''NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUw''@;'; put 'put ''NjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3''@;'; put 'put ''XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2''@;'; put 'put ''MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LHc9ZnVuY3Rpb24oTyl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKHosTixMLEspe3ZhciBVPWcoeiksVz1CW09dW2coeildO3JldHVybiAyPT09VSYmKFc9V1tOPzA6MV0pLFcucmVwbGFjZSgvJWQvaSx6KX19LFA9WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzEiLCJc''@;'; put 'put ''dTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2MjNcdTA2M2Fc''@;'; put 'put ''dTA2MzNcdTA2MzdcdTA2MzMiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2''@;'; put 'put ''MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgiYXItbHkiLHttb250aHM6UCxtb250aHNTaG9ydDpQLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0''@;'; put 'put ''NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIx''@;'; put 'put ''X1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQ''@;'; put 'put ''YXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNl''@;'; put 'put ''Oi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKE8pe3JldHVybiJcdTA2NDUiPT09T30sbWVyaWRpZW06ZnVuY3Rpb24oTyx6LE4pe3JldHVybiBPPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2''@;'; put 'put ''MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRk''@;'; put 'put ''ZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2Vlazoi''@;'; put 'put ''ZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOncoInMiKSxz''@;'; put 'put ''czp3KCJzIiksbTp3KCJtIiksbW06dygibSIpLGg6dygiaCIpLGhoOncoImgiKSxkOncoImQiKSxkZDp3KCJkIiksTTp3KCJNIiksTU06dygiTSIpLHk6dygieSIpLHl5OncoInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oTyl7cmV0dXJuIE8ucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZv''@;'; put 'put ''cm1hdDpmdW5jdGlvbihPKXtyZXR1cm4gTy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKHope3JldHVybiBfW3pdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfSh5KDk3NTg2KSl9LDg3ODIzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYXItbWEiLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9c''@;'; put 'put ''dTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYy''@;'; put 'put ''OFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1''@;'; put 'put ''MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYz''@;'; put 'put ''NFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIz''@;'; put 'put ''XHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0''@;'; put 'put ''NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmJcdTA2NDZcdTA2NGFc''@;'; put 'put ''dTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVki''@;'; put 'put ''LExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBM''@;'; put 'put ''VCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2Mjld''@;'; put 'put ''IExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYy''@;'; put 'put ''OV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYy''@;'; put 'put ''Zlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBc''@;'; put 'put ''dTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9''@;'; put 'put ''KHkoOTc1ODYpKX0sNzcxMjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2Njki''@;'; put 'put ''LDA6Ilx1MDY2MCJ9LGc9eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn07SS5kZWZpbmVMb2NhbGUoImFy''@;'; put 'put ''LXBzIix7bW9udGhzOiJcdTA2NDNcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhX1x1MDYzNFx1MDYyOFx1MDYyN1x1MDYzN19cdTA2MjJcdTA2MzBcdTA2MjdcdTA2MzFfXHUwNjQ2XHUwNjRhXHUwNjMzXHUwNjI3XHUwNjQ2X1x1''@;'; put 'put ''MDYyM1x1MDY0YVx1MDY1MVx1MDYyN1x1MDYzMV9cdTA2MmRcdTA2MzJcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDZfXHUwNjJhXHUwNjQ1XHUwNjUxXHUwNjQ4XHUwNjMyX1x1MDYyMlx1MDYyOF9cdTA2MjNcdTA2NGFcdTA2NDRcdTA2NDhcdTA2NDRfXHUwNjJhXHUwNjM0XHUwNjMxXHUwNjRh''@;'; put 'put ''IFx1MDYyN1x1MDY0NFx1MDYyM1x1MDY0OFx1MDY1MVx1MDY0NF9cdTA2MmFcdTA2MzRcdTA2MzFcdTA2NGFcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhX1x1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MjNcdTA2NDhcdTA2''@;'; put 'put ''NTFcdTA2NDQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0M1x1MDY2Ml9cdTA2MzRcdTA2MjhcdTA2MjdcdTA2MzdfXHUwNjIyXHUwNjMwXHUwNjI3XHUwNjMxX1x1MDY0Nlx1MDY0YVx1MDYzM1x1MDYyN1x1MDY0Nl9cdTA2MjNcdTA2NGFcdTA2NTFcdTA2MjdcdTA2MzFfXHUwNjJk''@;'; put 'put ''XHUwNjMyXHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2X1x1MDYyYVx1MDY0NVx1MDY1MVx1MDY0OFx1MDYzMl9cdTA2MjJcdTA2MjhfXHUwNjIzXHUwNjRhXHUwNjQ0XHUwNjQ4XHUwNjQ0X1x1MDYyYVx1MDY2MV9cdTA2MmFcdTA2NjJfXHUwNjQzXHUwNjYxIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''OiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2''@;'; put 'put ''MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYy''@;'; put 'put ''NVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUw''@;'; put 'put ''NjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZ''@;'; put 'put ''WVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuIlx1MDY0NSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LFAs''@;'; put 'put ''Ril7cmV0dXJuIHc8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUw''@;'; put 'put ''NjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNc''@;'; put 'put ''dTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxy''@;'; put 'put ''ZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUw''@;'; put 'put ''NjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0''@;'; put 'put ''NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUw''@;'; put 'put ''NjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSkuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKS5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXSg/IVtcdTA2MmFcdTA2NDNdKS9nLGZ1bmN0aW9uKFApe3JldHVy''@;'; put 'put ''biBnW1BdfSkuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntk''@;'; put 'put ''b3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw3ODI2MTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUw''@;'; put 'put ''NjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LGc9eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn07SS5k''@;'; put 'put ''ZWZpbmVMb2NhbGUoImFyLXNhIix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3''@;'; put 'put ''XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhfXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2''@;'; put 'put ''NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1''@;'; put 'put ''MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYy''@;'; put 'put ''M1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzM19cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2''@;'; put 'put ''MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0''@;'; put 'put ''NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0''@;'; put 'put ''NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDpt''@;'; put 'put ''bSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjQ1''@;'; put 'put ''Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1''@;'; put 'put ''MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5''@;'; put 'put ''XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2''@;'; put 'put ''MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Iixt''@;'; put 'put ''OiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1Iixk''@;'; put 'put ''ZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0''@;'; put 'put ''aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3Jl''@;'; put 'put ''dHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw1NjcwMzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2Nh''@;'; put 'put ''bGUoImFyLXRuIix7bW9udGhzOiJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1''@;'; put 'put ''MDY0OFx1MDYyN1x1MDY0Nl9cdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQx''@;'; put 'put ''XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2''@;'; put 'put ''MzNfXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDZfXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2Mjhc''@;'; put 'put ''dTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1''@;'; put 'put ''MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVc''@;'; put 'put ''dTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1''@;'; put 'put ''MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46''@;'; put 'put ''Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQg''@;'; put 'put ''TU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRE''@;'; put 'put ''YXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFz''@;'; put 'put ''dERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJc''@;'; put 'put ''dTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUw''@;'; put 'put ''NjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2''@;'; put 'put ''KSl9LDMzMTA4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUw''@;'; put 'put ''NjYwIn0sZz17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxCPWZ1bmN0aW9uKHope3JldHVybiAwPT09''@;'; put 'put ''ej8wOjE9PT16PzE6Mj09PXo/Mjp6JTEwMD49MyYmeiUxMDA8PTEwPzM6eiUxMDA+PTExPzQ6NX0sdz17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0''@;'; put 'put ''OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3''@;'; put 'put ''XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1''@;'; put 'put ''MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUw''@;'; put 'put ''NjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYy''@;'; put 'put ''ZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQg''@;'; put 'put ''XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJc''@;'; put 'put ''dTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0''@;'; put 'put ''XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUw''@;'; put 'put ''NjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2Mjdc''@;'; put 'put ''dTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LFA9ZnVuY3Rpb24oeil7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKE4sTCxLLFUpe3ZhciBXPUIoTiksWT13W3pdW0IoTildO3JldHVybiAyPT09VyYmKFk9WVtMPzA6MV0pLFkucmVwbGFjZSgvJWQvaSxOKX19LEY9WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFc''@;'; put 'put ''dTA2MzEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2''@;'; put 'put ''MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzMiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNc''@;'; put 'put ''dTA2NDVcdTA2MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgiYXIiLHttb250aHM6Rixtb250aHNTaG9ydDpGLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYy''@;'; put 'put ''Ylx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2''@;'; put 'put ''NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3''@;'; put 'put ''XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGll''@;'; put 'put ''bVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHope3JldHVybiJcdTA2NDUiPT09en0sbWVyaWRpZW06ZnVuY3Rpb24oeixOLEwpe3JldHVybiB6PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0''@;'; put 'put ''NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdl''@;'; put 'put ''ZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0''@;'; put 'put ''V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOlAo''@;'; put 'put ''InMiKSxzczpQKCJzIiksbTpQKCJtIiksbW06UCgibSIpLGg6UCgiaCIpLGhoOlAoImgiKSxkOlAoImQiKSxkZDpQKCJkIiksTTpQKCJNIiksTU06UCgiTSIpLHk6UCgieSIpLHl5OlAoInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1''@;'; put 'put ''MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihOKXtyZXR1cm4gZ1tOXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihOKXtyZXR1cm4g''@;'; put 'put ''X1tOXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oeSg5NzU4NikpfSw0NjUwODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ii1pbmNpIiw1OiItaW5jaSIsODoiLWluY2kiLDcwOiItaW5jaSIsODA6''@;'; put 'put ''Ii1pbmNpIiwyOiItbmNpIiw3OiItbmNpIiwyMDoiLW5jaSIsNTA6Ii1uY2kiLDM6Ii1ceGZjbmNceGZjIiw0OiItXHhmY25jXHhmYyIsMTAwOiItXHhmY25jXHhmYyIsNjoiLW5jXHUwMTMxIiw5OiItdW5jdSIsMTA6Ii11bmN1IiwzMDoiLXVuY3UiLDYwOiItXHUwMTMxbmNcdTAxMzEiLDkw''@;'; put 'put ''OiItXHUwMTMxbmNcdTAxMzEifTtJLmRlZmluZUxvY2FsZSgiYXoiLHttb250aHM6InlhbnZhcl9mZXZyYWxfbWFydF9hcHJlbF9tYXlfaXl1bl9peXVsX2F2cXVzdF9zZW50eWFicl9va3R5YWJyX25veWFicl9kZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inlhbl9mZXZfbWFyX2Fw''@;'; put 'put ''cl9tYXlfaXluX2l5bF9hdnFfc2VuX29rdF9ub3lfZGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJCYXphcl9CYXphciBlcnRcdTAyNTlzaV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5IGF4XHUwMTVmYW1cdTAxMzFfXHhjN1x1MDI1OXJcdTAxNWZcdTAyNTluYlx1MDI1OV9DXHhm''@;'; put 'put ''Y21cdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9DXHhmY21cdTAyNTlfXHUwMTVlXHUwMjU5bmJcdTAyNTkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQmF6X0J6RV9ceGM3QXhfXHhjN1x1MDI1OXJfQ0F4X0NceGZjbV9cdTAxNWVcdTAyNTluIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJC''@;'; put 'put ''el9CRV9ceGM3QV9ceGM3XHUwMjU5X0NBX0NceGZjX1x1MDE1ZVx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZ''@;'; put 'put ''WVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FhdF0gTFQiLG5leHREYXk6IltzYWJhaCBzYWF0XSBMVCIsbmV4dFdlZWs6IltnXHUwMjU5bFx1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBM''@;'; put 'put ''VCIsbGFzdERheToiW2RceGZjblx1MDI1OW5dIExUIixsYXN0V2VlazoiW2tlXHhlN1x1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29ucmEiLHBhc3Q6IiVzIFx1MDI1OXZ2XHUwMjU5bCIsczoi''@;'; put 'put ''YmlyIG5lXHhlN1x1MDI1OSBzYW5peVx1MDI1OSIsc3M6IiVkIHNhbml5XHUwMjU5IixtOiJiaXIgZFx1MDI1OXFpcVx1MDI1OSIsbW06IiVkIGRcdTAyNTlxaXFcdTAyNTkiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsTToiYmlyIGF5''@;'; put 'put ''IixNTToiJWQgYXkiLHk6ImJpciBpbCIseXk6IiVkIGlsIn0sbWVyaWRpZW1QYXJzZTovZ2VjXHUwMjU5fHNcdTAyNTloXHUwMjU5cnxnXHhmY25kXHhmY3p8YXhcdTAxNWZhbS8saXNQTTpmdW5jdGlvbihCKXtyZXR1cm4vXihnXHhmY25kXHhmY3p8YXhcdTAxNWZhbSkkLy50ZXN0KEIpfSxt''@;'; put 'put ''ZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEI8ND8iZ2VjXHUwMjU5IjpCPDEyPyJzXHUwMjU5aFx1MDI1OXIiOkI8MTc/ImdceGZjbmRceGZjeiI6ImF4XHUwMTVmYW0ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTAxMzFuY1x1MDEzMXxpbmNpfG5jaXxceGZj''@;'; put 'put ''bmNceGZjfG5jXHUwMTMxfHVuY3UpLyxvcmRpbmFsOmZ1bmN0aW9uKEIpe2lmKDA9PT1CKXJldHVybiBCKyItXHUwMTMxbmNcdTAxMzEiO3ZhciB3PUIlMTA7cmV0dXJuIEIrKF9bd118fF9bQiUxMDAtd118fF9bQj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3''@;'; put 'put ''NTg2KSl9LDE2NzY2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKHcsUCxGKXtyZXR1cm4ibSI9PT1GP1A/Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1''@;'; put 'put ''Nlx1MDQzZFx1MDQ0MyI6ImgiPT09Rj9QPyJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0MzAiOiJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NDMiOncrIiAiK2Z1bmN0aW9uIF8odyxQKXt2YXIgRj13LnNwbGl0KCJfIik7cmV0dXJuIFAl''@;'; put 'put ''MTA9PTEmJlAlMTAwIT0xMT9GWzBdOlAlMTA+PTImJlAlMTA8PTQmJihQJTEwMDwxMHx8UCUxMDA+PTIwKT9GWzFdOkZbMl19KHtzczpQPyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRi''@;'; put 'put ''X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0M19cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0Iixt''@;'; put 'put ''bTpQPyJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0MzBfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQz''@;'; put 'put ''ZFx1MDQ0M19cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIixoaDpQPyJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0MzBfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUw''@;'; put 'put ''NDU2XHUwNDNkXHUwNDRiX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZCI6Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0M19cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3''@;'; put 'put ''XHUwNDU2XHUwNDNkIixkZDoiXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ1Nl9cdTA0MzRcdTA0MzdcdTA0NTFcdTA0M2QiLE1NOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRi''@;'; put 'put ''X1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQzMFx1MDQ1ZSIseXk6Ilx1MDQzM1x1MDQzZVx1MDQzNF9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDNlXHUwNDVlIn1bRl0sK3cpfUkuZGVmaW5lTG9jYWxlKCJiZSIse21vbnRoczp7Zm9y''@;'; put 'put ''bWF0OiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDMwXHUwNDMzXHUwNDMwX1x1MDQ0MVx1MDQzMFx1MDQzYVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFc''@;'; put 'put ''dTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDVlXHUwNDNkXHUwNDRmX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NTZcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDM2XHUwNDNkXHUwNDU2''@;'; put 'put ''XHUwNDVlXHUwNDNkXHUwNDRmX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzZFx1MDQ0Zl9cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0NGJcdTA0NDdcdTA0M2RcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyXHUwNDMwXHUwNDNm''@;'; put 'put ''XHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNlx1MDQzZFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDRiX1x1MDQ0MVx1MDQz''@;'; put 'put ''MFx1MDQzYVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYV9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0''@;'; put 'put ''Y19cdTA0M2JcdTA0NTZcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0''@;'; put 'put ''NGJcdTA0NDdcdTA0M2RcdTA0NTZcdTA0M2FfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyXHUwNDMwXHUwNDNmXHUwNDMwXHUwNDM0X1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNlx1MDQzMFx1MDQzZFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1''@;'; put 'put ''MDQzNF9cdTA0M2JcdTA0NGVcdTA0NDJfXHUwNDQxXHUwNDMwXHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MV9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyX1x1MDQzYlx1MDQ1Nlx1MDQzZl9cdTA0MzZcdTA0M2RcdTA0NTZcdTA0MzJfXHUw''@;'; put 'put ''NDMyXHUwNDM1XHUwNDQwX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Ml9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntmb3JtYXQ6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQ0ZV9c''@;'; put 'put ''dTA0M2ZcdTA0MzBcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0MzBcdTA0M2FfXHUwNDMwXHUwNDVlXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzBcdTA0NDZcdTA0MzJc''@;'; put 'put ''dTA0MzVcdTA0NDBfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDQzX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNm''@;'; put 'put ''XHUwNDMwXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDMwXHUwNDNhX1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzBcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDMwXHUwNDQ2XHUwNDMyXHUwNDM1''@;'; put 'put ''XHUwNDQwX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQzMF9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L1xbID9bXHUwNDIzXHUwNDQzXHUwNDVlXSA/KD86XHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUw''@;'; put 'put ''NDNiXHUwNDQzXHUwNDRlfFx1MDQzZFx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzZlx1MDQzZFx1MDQ0M1x1MDQ0ZSk/ID9cXSA/ZGRkZC99LHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMwXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDZf''@;'; put 'put ''XHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzBcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9y''@;'; put 'put ''bWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4sIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBcdTA0MzMuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb''@;'; put 'put ''XHUwNDIxXHUwNDUxXHUwNDNkXHUwNDNkXHUwNDRmIFx1MDQ1ZV0gTFQiLG5leHREYXk6IltcdTA0MTdcdTA0MzBcdTA0NWVcdTA0NDJcdTA0NDBcdTA0MzAgXHUwNDVlXSBMVCIsbGFzdERheToiW1x1MDQyM1x1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCBcdTA0NWVdIExUIixuZXh0V2Vlazpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiJbXHUwNDIzXSBkZGRkIFtcdTA0NWVdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJbXHUwNDIzIFx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0M1x1''@;'; put 'put ''MDQ0ZV0gZGRkZCBbXHUwNDVlXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDRiXSBkZGRkIFtcdTA0NWVdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzZlx1MDQ0''@;'; put 'put ''MFx1MDQzMFx1MDQzNyAlcyIscGFzdDoiJXMgXHUwNDQyXHUwNDMwXHUwNDNjXHUwNDQzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2FcdTA0MzBcdTA0M2JcdTA0NGNcdTA0M2FcdTA0NTYgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOmcsbW06ZyxoOmcsaGg6ZyxkOiJc''@;'; put 'put ''dTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOmcsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2IixNTTpnLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNCIseXk6Z30sbWVyaWRpZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRifFx1MDQ0MFx1MDQzMFx1MDQzZFx1''@;'; put 'put ''MDQ1Nlx1MDQ0Nlx1MDQ0YnxcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDMwXHUwNDQwXHUwNDMwLyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzApJC8udGVzdCh3''@;'; put 'put ''KX0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ0YiI6dzwxMj8iXHUwNDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRiIjp3PDE3PyJcdTA0MzRcdTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0''@;'; put 'put ''NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NTZ8XHUwNDRifFx1MDQzM1x1MDQzMCkvLG9yZGluYWw6ZnVuY3Rpb24odyxQKXtzd2l0Y2goUCl7Y2FzZSJNIjpjYXNlImQiOmNhc2UiREREIjpjYXNlInciOmNhc2UiVyI6cmV0dXJuIHclMTAhPTImJncl''@;'; put 'put ''MTAhPTN8fHclMTAwPT0xMnx8dyUxMDA9PTEzP3crIi1cdTA0NGIiOncrIi1cdTA0NTYiO2Nhc2UiRCI6cmV0dXJuIHcrIi1cdTA0MzNcdTA0MzAiO2RlZmF1bHQ6cmV0dXJuIHd9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSwyODU2NDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5j''@;'; put 'put ''dGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImJnIix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0''@;'; put 'put ''MzBcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZlx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQzMlx1''@;'; put 'put ''MDQ0MFx1MDQzOF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0M2VcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNkXHUwNDNlXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOCIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDQzX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDRlXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM19c''@;'; put 'put ''dTA0NDFcdTA0MzVcdTA0M2ZfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQzNV9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRc''@;'; put 'put ''dTA0MzVcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQ0Zlx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NGFcdTA0NDBcdTA0NDJcdTA0NGFcdTA0M2FfXHUwNDNm''@;'; put 'put ''XHUwNDM1XHUwNDQyXHUwNDRhXHUwNDNhX1x1MDQ0MVx1MDQ0YVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzVcdTA0MzRfXHUwNDNmXHUwNDNlXHUwNDNkX1x1MDQzMlx1MDQ0Mlx1MDQzZV9cdTA0NDFcdTA0NDBcdTA0NGZf''@;'; put 'put ''XHUwNDQ3XHUwNDM1XHUwNDQyX1x1MDQzZlx1MDQzNVx1MDQ0Ml9cdTA0NDFcdTA0NGFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0''@;'; put 'put ''MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb''@;'; put 'put ''XHUwNDE0XHUwNDNkXHUwNDM1XHUwNDQxIFx1MDQzMl0gTFQiLG5leHREYXk6IltcdTA0MjNcdTA0NDJcdTA0NDBcdTA0MzUgXHUwNDMyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQzMl0gTFQiLGxhc3REYXk6IltcdTA0MTJcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAgXHUwNDMyXSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDY6cmV0dXJuIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0MzBcdTA0M2JcdTA0MzBcdTA0NDJcdTA0MzBdIGRkZGQgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpy''@;'; put 'put ''ZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQzYlx1MDQzOFx1MDQ0Zl0gZGRkZCBbXHUwNDMyXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzQgJXMiLHBhc3Q6Ilx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQz''@;'; put 'put ''NFx1MDQzOCAlcyIsczoiXHUwNDNkXHUwNDRmXHUwNDNhXHUwNDNlXHUwNDNiXHUwNDNhXHUwNDNlIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsbToiXHUwNDNjXHUw''@;'; put 'put ''NDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDM4IixoOiJcdTA0NDdcdTA0MzBcdTA0NDEiLGhoOiIlZCBcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzAiLGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZCIsZGQ6IiVkIFx1MDQz''@;'; put 'put ''NFx1MDQzNVx1MDQzZFx1MDQzMCIsdzoiXHUwNDQxXHUwNDM1XHUwNDM0XHUwNDNjXHUwNDM4XHUwNDQ2XHUwNDMwIix3dzoiJWQgXHUwNDQxXHUwNDM1XHUwNDM0XHUwNDNjXHUwNDM4XHUwNDQ2XHUwNDM4IixNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDYiLE1NOiIlZCBcdTA0''@;'; put 'put ''M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCIseXk6IiVkIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzNVx1MDQz''@;'; put 'put ''MnxcdTA0MzVcdTA0M2R8XHUwNDQyXHUwNDM4fFx1MDQzMlx1MDQzOHxcdTA0NDBcdTA0Mzh8XHUwNDNjXHUwNDM4KS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwLHc9ZyUxMDA7cmV0dXJuIDA9PT1nP2crIi1cdTA0MzVcdTA0MzIiOjA9PT13P2crIi1cdTA0MzVcdTA0M2QiOnc+''@;'; put 'put ''MTAmJnc8MjA/ZysiLVx1MDQ0Mlx1MDQzOCI6MT09PUI/ZysiLVx1MDQzMlx1MDQzOCI6Mj09PUI/ZysiLVx1MDQ0MFx1MDQzOCI6Nz09PUJ8fDg9PT1CP2crIi1cdTA0M2NcdTA0MzgiOmcrIi1cdTA0NDJcdTA0MzgifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw5NzQ2Mjpm''@;'; put 'put ''dW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImJtIix7bW9udGhzOiJaYW53dXlla2Fsb19GZXd1cnV5ZWthbG9fTWFyaXNpa2Fsb19Bd2lyaWxpa2Fsb19NXHUwMjVia2Fsb19adXdcdTAyNWJua2Fsb19adWx1eWVrYWxvX1V0aWthbG9f''@;'; put 'put ''U1x1MDI1YnRhbmJ1cnVrYWxvX1x1MDI1NGt1dFx1MDI1NGJ1cnVrYWxvX05vd2FuYnVydWthbG9fRGVzYW5idXJ1a2FsbyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiWmFuX0Zld19NYXJfQXdpX01cdTAyNWJfWnV3X1p1bF9VdGlfU1x1MDI1YnRfXHUwMjU0a3VfTm93X0RlcyIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5czoiS2FyaV9OdFx1MDI1Ym5cdTAyNWJuX1RhcmF0YV9BcmFiYV9BbGFtaXNhX0p1bWFfU2liaXJpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikthcl9OdFx1MDI1Yl9UYXJfQXJhX0FsYV9KdW1fU2liIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJLYV9OdF9UYV9B''@;'; put 'put ''cl9BbF9KdV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIixMTEw6Ik1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbFx1MDI1YnJcdTAyNWJdIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkIE1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbFx1MDI1YnJcdTAyNWJdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltCaSBsXHUwMjViclx1MDI1Yl0gTFQiLG5leHREYXk6IltTaW5pIGxcdTAyNWJyXHUwMjViXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2RvbiBsXHUwMjVi''@;'; put 'put ''clx1MDI1Yl0gTFQiLGxhc3REYXk6IltLdW51IGxcdTAyNWJyXHUwMjViXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3RcdTAyNWJtXHUwMjVibmVuIGxcdTAyNWJyXHUwMjViXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMga1x1MDI1NG5cdTAyNTQiLHBhc3Q6ImEg''@;'; put 'put ''Ylx1MDI1YiAlcyBiXHUwMjU0IixzOiJzYW5nYSBkYW1hIGRhbWEiLHNzOiJzZWtvbmRpICVkIixtOiJtaW5pdGkga2VsZW4iLG1tOiJtaW5pdGkgJWQiLGg6ImxcdTAyNWJyXHUwMjViIGtlbGVuIixoaDoibFx1MDI1YnJcdTAyNWIgJWQiLGQ6InRpbGUga2VsZW4iLGRkOiJ0aWxlICVkIixN''@;'; put 'put ''OiJrYWxvIGtlbGVuIixNTToia2FsbyAlZCIseToic2FuIGtlbGVuIix5eToic2FuICVkIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNDM0Mzg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA5ZTciLDI6Ilx1MDllOCIs''@;'; put 'put ''MzoiXHUwOWU5Iiw0OiJcdTA5ZWEiLDU6Ilx1MDllYiIsNjoiXHUwOWVjIiw3OiJcdTA5ZWQiLDg6Ilx1MDllZSIsOToiXHUwOWVmIiwwOiJcdTA5ZTYifSxnPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUwOWVhIjoiNCIsIlx1MDllYiI6IjUiLCJcdTA5ZWMi''@;'; put 'put ''OiI2IiwiXHUwOWVkIjoiNyIsIlx1MDllZSI6IjgiLCJcdTA5ZWYiOiI5IiwiXHUwOWU2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJibi1iZCIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1''@;'; put 'put ''MDliMFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3''@;'; put 'put ''X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiXHUwOWFjXHUwOWIwX1x1MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDlj''@;'; put 'put ''ZFx1MDlhY1x1MDliMF9cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMV9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUw''@;'; put 'put ''OWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFh''@;'; put 'put ''XHUwOWNkXHUwOTlmX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYl9cdTA5YThcdTA5YWRcdTA5YzdfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5YjBcdTA5YWNcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFl''@;'; put 'put ''XHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJl''@;'; put 'put ''XHUwOWIwX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMFx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVc''@;'; put 'put ''dTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWlu''@;'; put 'put ''OiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0''@;'; put 'put ''KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMVFM6IkEgaDptbTpzcyBcdTA5YjhcdTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIs''@;'; put 'put ''TExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZcdTA5OTdcdTA5YmVcdTA5YWVcdTA5YzBcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixuZXh0V2Vlazoi''@;'; put 'put ''ZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5OTdcdTA5YTRcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixsYXN0V2VlazoiW1x1MDk5N1x1MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDlhYVx1MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2''@;'; put 'put ''XHUwOTk3XHUwOWM3IixzOiJcdTA5OTVcdTA5ZGZcdTA5YzdcdTA5OTUgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixtOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJm''@;'; put 'put ''XHUwOWE4XHUwOWJmXHUwOTlmIixtbToiJWQgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixoOiJcdTA5OGZcdTA5OTUgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixoaDoiJWQgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUw''@;'; put 'put ''OWE2XHUwOWJmXHUwOWE4IixkZDoiJWQgXHUwOWE2XHUwOWJmXHUwOWE4IixNOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJlXHUwOWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5OiJcdTA5OGZcdTA5OTUgXHUwOWFjXHUwOTliXHUwOWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUw''@;'; put 'put ''OWIwIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDllN1x1MDllOFx1MDllOVx1MDllYVx1MDllYlx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVy''@;'; put 'put ''biB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOWIwXHUwOWJlXHUwOWE0fFx1MDlhZFx1MDljYlx1MDliMHxcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwfFx1MDlhY1x1MDli''@;'; put 'put ''Zlx1MDk5NVx1MDliZVx1MDliMnxcdTA5YjhcdTA5YThcdTA5Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmV8XHUwOWIwXHUwOWJlXHUwOWE0LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwOWIwXHUwOWJlXHUwOWE0Ij09PVA/dzw0P3c6dysx''@;'; put 'put ''MjoiXHUwOWFkXHUwOWNiXHUwOWIwIj09PVB8fCJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiPT09UD93OiJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiPT09UD93Pj0zP3c6dysxMjoiXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIj09PVB8fCJcdTA5YjhcdTA5YThcdTA5''@;'; put 'put ''Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmUiPT09UD93KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6dzw2PyJcdTA5YWRcdTA5Y2JcdTA5YjAiOnc8MTI/Ilx1MDliOFx1MDk5NVx1MDliZVx1MDliMiI6dzwxNT8i''@;'; put 'put ''XHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIjp3PDE4PyJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiOnc8MjA/Ilx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZSI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5''@;'; put 'put ''KDk3NTg2KSl9LDE3MTA3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIsNzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIs''@;'; put 'put ''MDoiXHUwOWU2In0sZz17Ilx1MDllNyI6IjEiLCJcdTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIsIlx1MDllNiI6IjAifTtJLmRlZmluZUxvY2FsZSgiYm4i''@;'; put 'put ''LHttb250aHM6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1''@;'; put 'put ''MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmXHUwOWM3XHUwOWFlXHUwOWNk''@;'; put 'put ''XHUwOWFjXHUwOWIwX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYlx1MDlhY1x1MDliMF9cdTA5YThcdTA5YWRcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwIi5zcGxpdCgiXyIpLG1vbnRo''@;'; put 'put ''c1Nob3J0OiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1''@;'; put 'put ''MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zl9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JfXHUwOWE4XHUwOWFkXHUwOWM3X1x1MDlhMVx1MDliZlx1MDli''@;'; put 'put ''OFx1MDljNyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwOWIwXHUwOWFjXHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliOFx1MDljYlx1MDlhZVx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMx''@;'; put 'put ''XHUwOWE3XHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmXHUwOWFj''@;'; put 'put ''XHUwOWJlXHUwOWIwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFc''@;'; put 'put ''dTA5YTRcdTA5YmZfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUw''@;'; put 'put ''OWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOV9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTFRTOiJBIGg6bW06c3MgXHUwOWI4XHUwOWFl''@;'; put 'put ''XHUwOWRmIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5ODZc''@;'; put 'put ''dTA5OWNdIExUIixuZXh0RGF5OiJbXHUwOTg2XHUwOTk3XHUwOWJlXHUwOWFlXHUwOWMwXHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTk3XHUwOWE0XHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbGFzdFdlZWs6IltcdTA5OTdcdTA5YTRd''@;'; put 'put ''IGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5YWFcdTA5YjBcdTA5YzciLHBhc3Q6IiVzIFx1MDk4Nlx1MDk5N1x1MDljNyIsczoiXHUwOTk1XHUwOWRmXHUwOWM3XHUwOTk1IFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1''@;'; put 'put ''MDlhMSIsc3M6IiVkIFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsbToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsbW06IiVkIFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsaDoiXHUwOThmXHUwOTk1IFx1MDk5''@;'; put 'put ''OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsaGg6IiVkIFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsZDoiXHUwOThmXHUwOTk1IFx1MDlhNlx1MDliZlx1MDlhOCIsZGQ6IiVkIFx1MDlhNlx1MDliZlx1MDlhOCIsTToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZVx1MDliOCIs''@;'; put 'put ''TU06IiVkIFx1MDlhZVx1MDliZVx1MDliOCIseToiXHUwOThmXHUwOTk1IFx1MDlhY1x1MDk5Ylx1MDliMCIseXk6IiVkIFx1MDlhY1x1MDk5Ylx1MDliMCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA5ZTdcdTA5ZThcdTA5ZTlcdTA5ZWFcdTA5ZWJcdTA5''@;'; put 'put ''ZWNcdTA5ZWRcdTA5ZWVcdTA5ZWZcdTA5ZTZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDliMFx1MDliZVx1MDlhNHxc''@;'; put 'put ''dTA5YjhcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwfFx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMnxcdTA5YjBcdTA5YmVcdTA5YTQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTA5YjBcdTA5''@;'; put 'put ''YmVcdTA5YTQiPT09UCYmdz49NHx8Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI9PT1QJiZ3PDV8fCJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiPT09UD93KzEyOnd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTA5YjBcdTA5YmVcdTA5YTQi''@;'; put 'put ''Onc8MTA/Ilx1MDliOFx1MDk5NVx1MDliZVx1MDliMiI6dzwxNz8iXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIjp3PDIwPyJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiOiJcdTA5YjBcdTA5YmVcdTA5YTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw5''@;'; put 'put ''MDA0OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwZjIxIiwyOiJcdTBmMjIiLDM6Ilx1MGYyMyIsNDoiXHUwZjI0Iiw1OiJcdTBmMjUiLDY6Ilx1MGYyNiIsNzoiXHUwZjI3Iiw4OiJcdTBmMjgiLDk6Ilx1MGYyOSIsMDoiXHUwZjIwIn0s''@;'; put 'put ''Zz17Ilx1MGYyMSI6IjEiLCJcdTBmMjIiOiIyIiwiXHUwZjIzIjoiMyIsIlx1MGYyNCI6IjQiLCJcdTBmMjUiOiI1IiwiXHUwZjI2IjoiNiIsIlx1MGYyNyI6IjciLCJcdTBmMjgiOiI4IiwiXHUwZjI5IjoiOSIsIlx1MGYyMCI6IjAifTtJLmRlZmluZUxvY2FsZSgiYm8iLHttb250aHM6Ilx1''@;'; put 'put ''MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1MVx1MGY0NFx1MGYwYlx1MGY1NFx1MGY3Y19cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUw''@;'; put 'put ''ZjY2XHUwZjc0XHUwZjU4XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY1ZVx1MGY3Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNjNcdTBmOTRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUw''@;'; put 'put ''ZjU2XHUwZjBiXHUwZjUxXHUwZmIyXHUwZjc0XHUwZjQyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNjJcdTBmOTJcdTBm''@;'; put 'put ''YjFcdTBmNTFcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQyXHUwZjc0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBm''@;'; put 'put ''NTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjQyXHUwZjQ5XHUwZjcyXHUwZjY2XHUwZjBiXHUwZjU0Ii5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBmNWZcdTBmYjNcdTBmMGIxX1x1MGY1Zlx1MGZiM1x1MGYwYjJfXHUwZjVmXHUwZmIzXHUwZjBiM19cdTBmNWZcdTBmYjNcdTBmMGI0X1x1MGY1Zlx1MGZiM1x1MGYwYjVfXHUwZjVmXHUwZmIzXHUwZjBiNl9cdTBmNWZcdTBmYjNcdTBmMGI3X1x1MGY1''@;'; put 'put ''Zlx1MGZiM1x1MGYwYjhfXHUwZjVmXHUwZmIzXHUwZjBiOV9cdTBmNWZcdTBmYjNcdTBmMGIxMF9cdTBmNWZcdTBmYjNcdTBmMGIxMV9cdTBmNWZcdTBmYjNcdTBmMGIxMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydFJlZ2V4Oi9eKFx1MGY1Zlx1MGZiM1x1MGYwYlxkezEsMn0pLyxtb250aHNQ''@;'; put 'put ''YXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1OFx1''@;'; put 'put ''MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2Mlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU1XHUwZjc0XHUwZjYyXHUwZjBiXHUwZjU2XHUwZjc0X1x1''@;'; put 'put ''MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZjQ5XHUwZjcy''@;'; put 'put ''XHUwZjBiXHUwZjU4XHUwZjBiX1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYl9cdTBmNThcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTFcdTBmNThcdTBmNjJcdTBmMGJfXHUwZjYzXHUwZmI3XHUwZjQyXHUwZjBiXHUwZjU0XHUwZjBiX1x1MGY1NVx1MGY3NFx1MGY2Mlx1MGYwYlx1MGY1''@;'; put 'put ''Nlx1MGY3NF9cdTBmNTRcdTBmMGJcdTBmNjZcdTBmNDRcdTBmNjZcdTBmMGJfXHUwZjY2XHUwZmE0XHUwZjdhXHUwZjUzXHUwZjBiXHUwZjU0XHUwZjBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBmNDlcdTBmNzJfXHUwZjVmXHUwZmIzX1x1MGY1OFx1MGY3Mlx1MGY0Ml9cdTBmNjNc''@;'; put 'put ''dTBmYjdcdTBmNDJfXHUwZjU1XHUwZjc0XHUwZjYyX1x1MGY2Nlx1MGY0NFx1MGY2Nl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTMiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZjUxXHUwZjcyXHUwZjBiXHUwZjYyXHUwZjcyXHUwZjQ0XSBMVCIsbmV4dERheToiW1x1MGY2Nlx1MGY0NFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGY1''@;'; put 'put ''M10gTFQiLG5leHRXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjYyXHUwZjk3XHUwZjdhXHUwZjY2XHUwZjBiXHUwZjU4XSwgTFQiLGxhc3REYXk6IltcdTBmNDFcdTBmMGJcdTBmNjZcdTBmNDRdIExUIixsYXN0V2Vlazoi''@;'; put 'put ''W1x1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NVx1MGZiMlx1MGY0Mlx1MGYwYlx1MGY1OFx1MGY1MFx1MGY2MFx1MGYwYlx1MGY1OF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGY2M1x1MGYwYiIscGFzdDoiJXMgXHUwZjY2''@;'; put 'put ''XHUwZjk0XHUwZjUzXHUwZjBiXHUwZjYzIixzOiJcdTBmNjNcdTBmNThcdTBmMGJcdTBmNjZcdTBmNDQiLHNzOiIlZCBcdTBmNjZcdTBmOTBcdTBmNjJcdTBmMGJcdTBmNDZcdTBmMGQiLG06Ilx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY1OFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1''@;'; put 'put ''MGY0MiIsbW06IiVkIFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY1OCIsaDoiXHUwZjQ2XHUwZjc0XHUwZjBiXHUwZjVhXHUwZjdjXHUwZjUxXHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixoaDoiJWQgXHUwZjQ2XHUwZjc0XHUwZjBiXHUwZjVhXHUwZjdjXHUwZjUxIixkOiJc''@;'; put 'put ''dTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGRkOiIlZCBcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGIiLE06Ilx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsTU06IiVkIFx1MGY1Zlx1MGZiM1x1MGYw''@;'; put 'put ''Ylx1MGY1NiIseToiXHUwZjYzXHUwZjdjXHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIix5eToiJWQgXHUwZjYzXHUwZjdjIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGYyMVx1MGYyMlx1MGYyM1x1MGYyNFx1MGYyNVx1MGYyNlx1MGYyN1x1MGYy''@;'; put 'put ''OFx1MGYyOVx1MGYyMF0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUw''@;'; put 'put ''ZjdjfFx1MGY1ZVx1MGY3Y1x1MGY0Mlx1MGY2Nlx1MGYwYlx1MGY0MFx1MGY2NnxcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDR8XHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyfFx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1''@;'; put 'put ''MGY3Yy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyI9PT1QJiZ3Pj00fHwiXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQyXHUwZjc0XHUwZjQ0Ij09PVAmJnc8NXx8Ilx1MGY1''@;'; put 'put ''MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MiI9PT1QP3crMTI6d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyI6dzwxMD8iXHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUw''@;'; put 'put ''ZjQwXHUwZjY2Ijp3PDE3PyJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiOnc8MjA/Ilx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MiI6Ilx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyJ9LHdlZWs6e2RvdzowLGRv''@;'; put 'put ''eTo2fX0pfSh5KDk3NTg2KSl9LDUwOTI3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKFkscSxlZSl7cmV0dXJuIFkrIiAiK2Z1bmN0aW9uIHcoWSxxKXtyZXR1cm4gMj09PXE/ZnVuY3Rpb24gUChZKXt2YXIgcT17bToidiIsYjoidiIsZDoi''@;'; put 'put ''eiJ9O3JldHVybiB2b2lkIDA9PT1xW1kuY2hhckF0KDApXT9ZOnFbWS5jaGFyQXQoMCldK1kuc3Vic3RyaW5nKDEpfShZKTpZfSh7bW06Im11bnV0ZW5uIixNTToibWl6IixkZDoiZGV2ZXpoIn1bZWVdLFkpfWZ1bmN0aW9uIEIoWSl7cmV0dXJuIFk+OT9CKFklMTApOll9dmFyIEY9Wy9eZ2Vu''@;'; put 'put ''L2ksL15jW1x1MDJiY1wnXWh3ZS9pLC9ebWV1L2ksL15lYnIvaSwvXm1hZS9pLC9eKG1lenxldmUpL2ksL15nb3UvaSwvXmVvcy9pLC9eZ3dlL2ksL15oZXIvaSwvXmR1L2ksL15rZXIvaV0sTz0vXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58''@;'; put 'put ''Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dXxnZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksVT1bL15TdS9pLC9eTHUvaSwvXk1lKFtecl18JCkvaSwvXk1lci9pLC9eWWEvaSwvXkd3L2ksL15TYS9pXTtJLmRlZmlu''@;'; put 'put ''ZUxvY2FsZSgiYnIiLHttb250aHM6IkdlbnZlcl9DXHUwMmJjaHdldnJlcl9NZXVyemhfRWJyZWxfTWFlX01lemhldmVuX0dvdWVyZV9Fb3N0X0d3ZW5nb2xvX0hlcmVfRHVfS2VyenUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikdlbl9DXHUwMmJjaHdlX01ldV9FYnJfTWFlX0V2ZV9Hb3Vf''@;'; put 'put ''RW9zX0d3ZV9IZXJfRHVfS2VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdWxfTHVuX01ldXJ6aF9NZXJjXHUwMmJjaGVyX1lhb3VfR3dlbmVyX1NhZG9ybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTHVuX01ldV9NZXJfWWFvX0d3ZV9TYWQiLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46IlN1X0x1X01lX01lcl9ZYV9Hd19TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlOlUsZnVsbFdlZWtkYXlzUGFyc2U6Wy9ec3VsL2ksL15sdW4vaSwvXm1ldXJ6aC9pLC9ebWVyY1tcdTAyYmNcJ11oZXIvaSwvXnlhb3UvaSwvXmd3ZW5lci9pLC9ec2Fkb3JuL2ldLHNob3J0V2Vla2Rh''@;'; put 'put ''eXNQYXJzZTpbL15TdWwvaSwvXkx1bi9pLC9eTWV1L2ksL15NZXIvaSwvXllhby9pLC9eR3dlL2ksL15TYWQvaV0sbWluV2Vla2RheXNQYXJzZTpVLG1vbnRoc1JlZ2V4Ok8sbW9udGhzU2hvcnRSZWdleDpPLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGdlbnZlcnxjW1x1MDJiY1wnXWh3ZXZyZXJ8''@;'; put 'put ''bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZ2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLG1vbnRoc1BhcnNlOkYs''@;'; put 'put ''bG9uZ01vbnRoc1BhcnNlOkYsc2hvcnRNb250aHNQYXJzZTpGLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFthIHZpel0gTU1NTSBZWVlZIixMTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQg''@;'; put 'put ''W2Egdml6XSBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hpeml2IGRhXSBMVCIsbmV4dERheToiW1dhcmNcdTAyYmNob2F6aCBkYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtkYV0gTFQiLGxhc3REYXk6IltEZWNcdTAyYmNoIGRhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3Bh''@;'; put 'put ''c2V0IGRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiYS1iZW5uICVzIixwYXN0OiIlcyBcdTAyYmN6byIsczoidW4gbmViZXVkIHNlZ29uZGVubm9ceGY5IixzczoiJWQgZWlsZW5uIixtOiJ1ciB2dW51dGVubiIsbW06XyxoOiJ1biBldXIiLGhoOiIlZCBldXIi''@;'; put 'put ''LGQ6InVuIGRldmV6aCIsZGQ6XyxNOiJ1ciBtaXoiLE1NOl8seToidXIgYmxvYXoiLHl5OmZ1bmN0aW9uIGcoWSl7c3dpdGNoKEIoWSkpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDk6cmV0dXJuIFkrIiBibG9heiI7ZGVmYXVsdDpyZXR1cm4gWSsiIHZsb2F6In19fSxkYXlP''@;'; put 'put ''Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGFceGYxfHZldCkvLG9yZGluYWw6ZnVuY3Rpb24oWSl7cmV0dXJuIFkrKDE9PT1ZPyJhXHhmMSI6InZldCIpfSx3ZWVrOntkb3c6MSxkb3k6NH0sbWVyaWRpZW1QYXJzZTovYS5tLnxnLm0uLyxpc1BNOmZ1bmN0aW9uKFkpe3JldHVybiJnLm0u''@;'; put 'put ''Ij09PVl9LG1lcmlkaWVtOmZ1bmN0aW9uKFkscSxlZSl7cmV0dXJuIFk8MTI/ImEubS4iOiJnLm0uIn19KX0oeSg5NzU4NikpfSw4Nzc2ODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyh3LFAsRil7dmFyIE89dysiICI7c3dpdGNoKEYpe2Nh''@;'; put 'put ''c2Uic3MiOnJldHVybiBPKygxPT09dz8ic2VrdW5kYSI6Mj09PXd8fDM9PT13fHw0PT09dz8ic2VrdW5kZSI6InNla3VuZGkiKTtjYXNlIm1tIjpyZXR1cm4gTysoMT09PXc/Im1pbnV0YSI6Mj09PXd8fDM9PT13fHw0PT09dz8ibWludXRlIjoibWludXRhIik7Y2FzZSJoIjpyZXR1cm4iamVk''@;'; put 'put ''YW4gc2F0IjtjYXNlImhoIjpyZXR1cm4gTysoMT09PXc/InNhdCI6Mj09PXd8fDM9PT13fHw0PT09dz8ic2F0YSI6InNhdGkiKTtjYXNlImRkIjpyZXR1cm4gTysoMT09PXc/ImRhbiI6ImRhbmEiKTtjYXNlIk1NIjpyZXR1cm4gTysoMT09PXc/Im1qZXNlYyI6Mj09PXd8fDM9PT13fHw0PT09''@;'; put 'put ''dz8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gTysoMT09PXc/ImdvZGluYSI6Mj09PXd8fDM9PT13fHw0PT09dz8iZ29kaW5lIjoiZ29kaW5hIil9fUkuZGVmaW5lTG9jYWxlKCJicyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuaV9qdWxp''@;'; put 'put ''X2F1Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVr''@;'; put 'put ''ZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9w''@;'; put 'put ''b191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwg''@;'; put 'put ''RC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJu''@;'; put 'put ''Ilt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRj''@;'; put 'put ''aCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOnJldHVybiJbcHJvXHUwMTYxbHVdIGRkZGQgW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcm9cdTAxNjFsaV0gZGRkZCBbdV0g''@;'; put 'put ''TFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6ZyxtOmZ1bmN0aW9uIF8odyxQLEYsTyl7aWYoIm0iPT09RilyZXR1cm4gUD8iamVkbmEgbWludXRhIjpPPyJqZWRudSBtaW51dHUiOiJqZWRu''@;'; put 'put ''ZSBtaW51dGUifSxtbTpnLGg6ZyxoaDpnLGQ6ImRhbiIsZGQ6ZyxNOiJtamVzZWMiLE1NOmcseToiZ29kaW51Iix5eTpnfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNTYyOTE6ZnVuY3Rp''@;'; put 'put ''b24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJjYSIse21vbnRoczp7c3RhbmRhbG9uZToiZ2VuZXJfZmVicmVyX21hclx4ZTdfYWJyaWxfbWFpZ19qdW55X2p1bGlvbF9hZ29zdF9zZXRlbWJyZV9vY3R1YnJlX25vdmVtYnJlX2Rlc2VtYnJlIi5z''@;'; put 'put ''cGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuZXJfZGUgZmVicmVyX2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlnX2RlIGp1bnlfZGUganVsaW9sX2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3R1YnJlX2RlIG5vdmVtYnJlX2RlIGRlc2VtYnJlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8o''@;'; put 'put ''XHMpK01NTU0vfSxtb250aHNTaG9ydDoiZ2VuLl9mZWJyLl9tYXJceGU3X2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGl1bWVuZ2VfZGlsbHVuc19kaW1hcnRzX2RpbWVjcmVzX2Rp''@;'; put 'put ''am91c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kdC5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kdF9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0Rh''@;'; put 'put ''dGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxsOiJEIE1NTSBZWVlZLCBIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBb''@;'; put 'put ''ZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlthdnVpIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2Rl''@;'; put 'put ''bVx4ZTAgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYWhpciBhICIrKDEhPT10''@;'; put 'put ''aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc3NhdCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkJ2FxdVx4ZWQg''@;'; put 'put ''JXMiLHBhc3Q6ImZhICVzIixzOiJ1bnMgc2Vnb25zIixzczoiJWQgc2Vnb25zIixtOiJ1biBtaW51dCIsbW06IiVkIG1pbnV0cyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JlcyIsZDoidW4gZGlhIixkZDoiJWQgZGllcyIsTToidW4gbWVzIixNTToiJWQgbWVzb3MiLHk6InVuIGFueSIseXk6''@;'; put 'put ''IiVkIGFueXMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHJ8bnx0fFx4ZTh8YSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXt2YXIgdz0xPT09Zz8iciI6Mj09PWc/Im4iOjM9PT1nPyJyIjo0PT09Zz8idCI6Ilx4ZTgiO3JldHVybigidyI9PT1CfHwiVyI9PT1CKSYmKHc9ImEi''@;'; put 'put ''KSxnK3d9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDg1MzAxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17c3RhbmRhbG9uZToibGVkZW5fXHhmYW5vcl9iXHUwMTU5ZXplbl9kdWJlbl9rdlx1MDExYnRlbl9cdTAxMGRlcnZlbl9c''@;'; put 'put ''dTAxMGRlcnZlbmVjX3NycGVuX3pceGUxXHUwMTU5XHhlZF9cdTAxNTlceGVkamVuX2xpc3RvcGFkX3Byb3NpbmVjIi5zcGxpdCgiXyIpLGZvcm1hdDoibGVkbmFfXHhmYW5vcmFfYlx1MDE1OWV6bmFfZHVibmFfa3ZcdTAxMWJ0bmFfXHUwMTBkZXJ2bmFfXHUwMTBkZXJ2ZW5jZV9zcnBuYV96''@;'; put 'put ''XHhlMVx1MDE1OVx4ZWRfXHUwMTU5XHhlZGpuYV9saXN0b3BhZHVfcHJvc2luY2UiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0REP1tvLl0/KFxbW15cW1xdXSpcXXxccykrTU1NTS99LGc9ImxlZF9ceGZhbm9fYlx1MDE1OWVfZHViX2t2XHUwMTFiX1x1MDEwZHZuX1x1MDEwZHZjX3NycF96XHhl''@;'; put 'put ''MVx1MDE1OV9cdTAxNTlceGVkal9saXNfcHJvIi5zcGxpdCgiXyIpLEI9Wy9ebGVkL2ksL15ceGZhbm8vaSwvXmJcdTAxNTllL2ksL15kdWIvaSwvXmt2XHUwMTFiL2ksL14oXHUwMTBkdm58XHUwMTBkZXJ2ZW4kfFx1MDEwZGVydm5hKS9pLC9eKFx1MDEwZHZjfFx1MDEwZGVydmVuZWN8XHUw''@;'; put 'put ''MTBkZXJ2ZW5jZSkvaSwvXnNycC9pLC9eelx4ZTFcdTAxNTkvaSwvXlx1MDE1OVx4ZWRqL2ksL15saXMvaSwvXnByby9pXSx3PS9eKGxlZGVufFx4ZmFub3J8Ylx1MDE1OWV6ZW58ZHViZW58a3ZcdTAxMWJ0ZW58XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVufFx1MDEw''@;'; put 'put ''ZGVydm5hfHNycGVufHpceGUxXHUwMTU5XHhlZHxcdTAxNTlceGVkamVufGxpc3RvcGFkfHByb3NpbmVjfGxlZHxceGZhbm98Ylx1MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pO2Z1bmN0aW9uIFAoeil7''@;'; put 'put ''cmV0dXJuIHo+MSYmejw1JiYxIT1+fih6LzEwKX1mdW5jdGlvbiBGKHosTixMLEspe3ZhciBVPXorIiAiO3N3aXRjaChMKXtjYXNlInMiOnJldHVybiBOfHxLPyJwXHhlMXIgc2VrdW5kIjoicFx4ZTFyIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIE58fEs/VSsoUCh6KT8ic2VrdW5keSI6''@;'; put 'put ''InNla3VuZCIpOlUrInNla3VuZGFtaSI7Y2FzZSJtIjpyZXR1cm4gTj8ibWludXRhIjpLPyJtaW51dHUiOiJtaW51dG91IjtjYXNlIm1tIjpyZXR1cm4gTnx8Sz9VKyhQKHopPyJtaW51dHkiOiJtaW51dCIpOlUrIm1pbnV0YW1pIjtjYXNlImgiOnJldHVybiBOPyJob2RpbmEiOks/ImhvZGlu''@;'; put 'put ''dSI6ImhvZGlub3UiO2Nhc2UiaGgiOnJldHVybiBOfHxLP1UrKFAoeik/ImhvZGlueSI6ImhvZGluIik6VSsiaG9kaW5hbWkiO2Nhc2UiZCI6cmV0dXJuIE58fEs/ImRlbiI6ImRuZW0iO2Nhc2UiZGQiOnJldHVybiBOfHxLP1UrKFAoeik/ImRueSI6ImRuXHhlZCIpOlUrImRueSI7Y2FzZSJN''@;'; put 'put ''IjpyZXR1cm4gTnx8Sz8ibVx1MDExYnNceGVkYyI6Im1cdTAxMWJzXHhlZGNlbSI7Y2FzZSJNTSI6cmV0dXJuIE58fEs/VSsoUCh6KT8ibVx1MDExYnNceGVkY2UiOiJtXHUwMTFic1x4ZWRjXHUwMTZmIik6VSsibVx1MDExYnNceGVkY2kiO2Nhc2UieSI6cmV0dXJuIE58fEs/InJvayI6InJv''@;'; put 'put ''a2VtIjtjYXNlInl5IjpyZXR1cm4gTnx8Sz9VKyhQKHopPyJyb2t5IjoibGV0Iik6VSsibGV0eSJ9fUkuZGVmaW5lTG9jYWxlKCJjcyIse21vbnRoczpfLG1vbnRoc1Nob3J0OmcsbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14obGVkZW58bGVk''@;'; put 'put ''bmF8XHhmYW5vcmF8XHhmYW5vcnxiXHUwMTU5ZXplbnxiXHUwMTU5ZXpuYXxkdWJlbnxkdWJuYXxrdlx1MDExYnRlbnxrdlx1MDExYnRuYXxcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVuY2V8XHUwMTBkZXJ2ZW58XHUwMTBkZXJ2bmF8c3JwZW58c3JwbmF8elx4ZTFcdTAxNTlceGVkfFx1MDE1''@;'; put 'put ''OVx4ZWRqZW58XHUwMTU5XHhlZGpuYXxsaXN0b3BhZHV8bGlzdG9wYWR8cHJvc2luZWN8cHJvc2luY2UpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihsZWR8XHhmYW5vfGJcdTAxNTllfGR1Ynxrdlx1MDExYnxcdTAxMGR2bnxcdTAxMGR2Y3xzcnB8elx4ZTFcdTAxNTl8XHUwMTU5XHhl''@;'; put 'put ''ZGp8bGlzfHBybykvaSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5czoibmVkXHUwMTFibGVfcG9uZFx1MDExYmxceGVkX1x4ZmF0ZXJceGZkX3N0XHUwMTU5ZWRhX1x1MDEwZHR2cnRla19wXHhlMXRla19zb2JvdGEiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNTaG9ydDoibmVfcG9fXHhmYXRfc3RfXHUwMTBkdF9wXHhlMV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fXHhmYXRfc3RfXHUwMTBkdF9wXHhlMV9zbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQu''@;'; put 'put ''TU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgSDptbSIsbDoiRC4gTS4gWVlZWSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZG5lcyB2XSBMVCIsbmV4dERheToiW3pceGVkdHJhIHZdIExUIixuZXh0V2Vlazpm''@;'; put 'put ''dW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2IG5lZFx1MDExYmxpIHZdIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbdl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ZlIHN0XHUwMTU5ZWR1IHZdIExUIjtjYXNlIDQ6cmV0dXJuIlt2ZSBcdTAxMGR0''@;'; put 'put ''dnJ0ZWsgdl0gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcFx4ZTF0ZWsgdl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Ygc29ib3R1IHZdIExUIn19LGxhc3REYXk6Ilt2XHUwMTBkZXJhIHZdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlttaW51''@;'; put 'put ''bG91IG5lZFx1MDExYmxpIHZdIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbbWludWxceGU5XSBkZGRkIFt2XSBMVCI7Y2FzZSAzOnJldHVybiJbbWludWxvdSBzdFx1MDE1OWVkdSB2XSBMVCI7Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW21pbnVsXHhmZF0gZGRkZCBbdl0gTFQiO2Nhc2UgNjpy''@;'; put 'put ''ZXR1cm4iW21pbnVsb3Ugc29ib3R1IHZdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwXHUwMTU5ZWQgJXMiLHM6RixzczpGLG06RixtbTpGLGg6RixoaDpGLGQ6RixkZDpGLE06RixNTTpGLHk6Rix5eTpGfSxkYXlPZk1vbnRoT3JkaW5h''@;'; put 'put ''bFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNjY2NjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJjdiIse21vbnRoczoiXHUwNDNhXHUwNGQxXHUwNDQwXHUw''@;'; put 'put ''NDNiXHUwNDMwXHUwNDQ3X1x1MDQzZFx1MDQzMFx1MDQ0MFx1MDRkMVx1MDQ0MV9cdTA0M2ZcdTA0NDNcdTA0NDhfXHUwNDMwXHUwNDNhXHUwNDMwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0YWJcdTA0ZDdcdTA0NDBcdTA0NDJcdTA0M2NcdTA0MzVfXHUwNDQzXHUwNDQyXHUwNGQxX1x1MDRh''@;'; put 'put ''Ylx1MDQ0M1x1MDQ0MFx1MDQzYlx1MDQzMF9cdTA0MzBcdTA0MzJcdTA0ZDFcdTA0M2RfXHUwNDRlXHUwNDNmXHUwNDMwX1x1MDQ0N1x1MDRmM1x1MDQzYV9cdTA0NDBcdTA0MzBcdTA0NDhcdTA0NDJcdTA0MzBcdTA0MzIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQzYVx1MDRkMVx1''@;'; put 'put ''MDQ0MF9cdTA0M2RcdTA0MzBcdTA0NDBfXHUwNDNmXHUwNDQzXHUwNDQ4X1x1MDQzMFx1MDQzYVx1MDQzMF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNGFiXHUwNGQ3XHUwNDQwX1x1MDQ0M1x1MDQ0Mlx1MDRkMV9cdTA0YWJcdTA0NDNcdTA0NDBfXHUwNDMwXHUwNDMyXHUwNDNkX1x1MDQ0ZVx1''@;'; put 'put ''MDQzZlx1MDQzMF9cdTA0NDdcdTA0ZjNcdTA0M2FfXHUwNDQwXHUwNDMwXHUwNDQ4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MzJcdTA0NGJcdTA0NDBcdTA0NDFcdTA0MzBcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDQyXHUwNDQzXHUwNDNkXHUwNDQyXHUw''@;'; put 'put ''NDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0Ylx1MDQ0Mlx1MDQzYlx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NGVcdTA0M2RcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDNhXHUwNGQ3XHUwNGFiXHUwNDNkXHUwNDM1XHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhXHUw''@;'; put 'put ''NDQzXHUwNDNkX1x1MDQ0ZFx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NDhcdTA0ZDFcdTA0M2NcdTA0MzBcdTA0NDJcdTA0M2FcdTA0NDNcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDMyXHUwNDRiXHUwNDQwX1x1MDQ0Mlx1MDQ0M1x1MDQz''@;'; put 'put ''ZF9cdTA0NGJcdTA0NDJcdTA0M2JfXHUwNDRlXHUwNDNkX1x1MDQzYVx1MDRkN1x1MDRhYl9cdTA0NGRcdTA0NDBcdTA0M2RfXHUwNDQ4XHUwNGQxXHUwNDNjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzJcdTA0NDBfXHUwNDQyXHUwNDNkX1x1MDQ0Ylx1MDQ0Ml9cdTA0NGVcdTA0''@;'; put 'put ''M2RfXHUwNDNhXHUwNGFiX1x1MDQ0ZFx1MDQ0MF9cdTA0NDhcdTA0M2MiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IllZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQz''@;'; put 'put ''XHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddIixMTEw6IllZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdc''@;'; put 'put ''dTA0NDhcdTA0ZDddLCBISDptbSIsTExMTDoiZGRkZCwgWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10sIEhIOm1tIn0sY2FsZW5kYXI6e3Nh''@;'; put 'put ''bWVEYXk6IltcdTA0MWZcdTA0MzBcdTA0NGZcdTA0M2RdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixuZXh0RGF5OiJbXHUwNDJiXHUwNDQwXHUwNDMwXHUwNDNkXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1''@;'; put 'put ''XSIsbGFzdERheToiW1x1MDRkNlx1MDQzZFx1MDQzNVx1MDQ0MF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLG5leHRXZWVrOiJbXHUwNGFhXHUwNDM4XHUwNDQyXHUwNDM1XHUwNDQxXSBkZGRkIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVc''@;'; put 'put ''dTA0NDJcdTA0NDBcdTA0MzVdIixsYXN0V2VlazoiW1x1MDQxOFx1MDQ0MFx1MDQ0Mlx1MDQzZFx1MDRkN10gZGRkZCBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gZysoL1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiQvaS5leGVjKGcpPyJcdTA0NDBcdTA0MzVcdTA0M2QiOi9cdTA0YWJcdTA0NDNcdTA0M2IkL2kuZXhlYyhnKT8iXHUwNDQyXHUwNDMwXHUwNDNkIjoiXHUwNDQwXHUwNDMwXHUwNDNkIil9LHBhc3Q6IiVzIFx1MDQzYVx1''@;'; put 'put ''MDQzMFx1MDQ0Zlx1MDQzYlx1MDQzYlx1MDQzMCIsczoiXHUwNDNmXHUwNGQ3XHUwNDQwLVx1MDQzOFx1MDQzYSBcdTA0YWJcdTA0MzVcdTA0M2FcdTA0M2FcdTA0NDNcdTA0M2RcdTA0NDIiLHNzOiIlZCBcdTA0YWJcdTA0MzVcdTA0M2FcdTA0M2FcdTA0NDNcdTA0M2RcdTA0NDIiLG06Ilx1''@;'; put 'put ''MDQzZlx1MDRkN1x1MDQ0MCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGg6Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzVcdTA0''@;'; put 'put ''NDVcdTA0MzVcdTA0NDIiLGQ6Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0M2FcdTA0NDNcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0NDNcdTA0M2QiLE06Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDUiLE1NOiIlZCBcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDUi''@;'; put 'put ''LHk6Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0YWJcdTA0NDNcdTA0M2IiLHl5OiIlZCBcdTA0YWJcdTA0NDNcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LVx1MDQzY1x1MDRkN1x1MDQ0OC8sb3JkaW5hbDoiJWQtXHUwNDNjXHUwNGQ3XHUwNDQ4Iix3ZWVrOntkb3c6''@;'; put 'put ''MSxkb3k6N319KX0oeSg5NzU4NikpfSw1NTE2MzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImN5Iix7bW9udGhzOiJJb25hd3JfQ2h3ZWZyb3JfTWF3cnRoX0VicmlsbF9NYWlfTWVoZWZpbl9Hb3JmZmVubmFmX0F3c3RfTWVkaV9I''@;'; put 'put ''eWRyZWZfVGFjaHdlZGRfUmhhZ2Z5ciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSW9uX0Nod2VfTWF3X0Vicl9NYWlfTWVoX0dvcl9Bd3NfTWVkX0h5ZF9UYWNoX1JoYWciLnNwbGl0KCJfIiksd2Vla2RheXM6IkR5ZGQgU3VsX0R5ZGQgTGx1bl9EeWRkIE1hd3J0aF9EeWRkIE1lcmNoZXJf''@;'; put 'put ''RHlkZCBJYXVfRHlkZCBHd2VuZXJfRHlkZCBTYWR3cm4iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VsX0xsdW5fTWF3X01lcl9JYXVfR3dlX1NhZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTGxfTWFfTWVfSWFfR3dfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0''@;'; put 'put ''OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hlZGRpdyBhbV0g''@;'; put 'put ''TFQiLG5leHREYXk6IltZZm9yeSBhbV0gTFQiLG5leHRXZWVrOiJkZGRkIFthbV0gTFQiLGxhc3REYXk6IltEZG9lIGFtXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rpd2V0aGFmIGFtXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibWV3biAlcyIscGFzdDoiJXMgeW4g''@;'; put 'put ''XHhmNGwiLHM6InljaHlkaWcgZWlsaWFkYXUiLHNzOiIlZCBlaWxpYWQiLG06Im11bnVkIixtbToiJWQgbXVudWQiLGg6ImF3ciIsaGg6IiVkIGF3ciIsZDoiZGl3cm5vZCIsZGQ6IiVkIGRpd3Jub2QiLE06Im1pcyIsTU06IiVkIG1pcyIseToiYmx3eWRkeW4iLHl5OiIlZCBmbHluZWRkIn0s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShmZWR8YWlufGFmfGlsfHlkZHxlZHxlZykvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIHc9IiI7cmV0dXJuIGc+MjA/dz00MD09PWd8fDUwPT09Z3x8NjA9PT1nfHw4MD09PWd8fDEwMD09PWc/ImZlZCI6ImFpbiI6Zz4wJiYodz1bIiIs''@;'; put 'put ''ImFmIiwiaWwiLCJ5ZGQiLCJ5ZGQiLCJlZCIsImVkIiwiZWQiLCJmZWQiLCJmZWQiLCJmZWQiLCJlZyIsImZlZCIsImVnIiwiZWciLCJmZWQiLCJlZyIsImVnIiwiZmVkIiwiZWciLCJmZWQiXVtnXSksZyt3fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw4NzM2MDpmdW5jdGlv''@;'; put 'put ''bih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImRhIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0c19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InNceGY4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjhyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNc''@;'; put 'put ''eGY4bl9tYW5fdGlyX29uc190b3JfZnJlX2xceGY4ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4ZjhfbWFfdGlfb25fdG9fZnJfbFx4ZjgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0g''@;'; put 'put ''WVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgW2QuXSBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2kgZGFnIGtsLl0gTFQiLG5leHREYXk6IltpIG1vcmdlbiBrbC5dIExUIixuZXh0V2VlazoicFx4ZTUgZGRkZCBba2wuXSBM''@;'; put 'put ''VCIsbGFzdERheToiW2kgZ1x4ZTVyIGtsLl0gTFQiLGxhc3RXZWVrOiJbaV0gZGRkZFtzIGtsLl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiIlcyBzaWRlbiIsczoiZlx4ZTUgc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZXQgbWlu''@;'; put 'put ''dXQiLG1tOiIlZCBtaW51dHRlciIsaDoiZW4gdGltZSIsaGg6IiVkIHRpbWVyIixkOiJlbiBkYWciLGRkOiIlZCBkYWdlIixNOiJlbiBtXHhlNW5lZCIsTU06IiVkIG1ceGU1bmVkZXIiLHk6ImV0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9''@;'; put 'put ''XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNDMyNDg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQix3LFAsRil7dmFyIE89e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJl''@;'; put 'put ''aW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W0IrIiBUYWdlIixCKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W0IrIiBNb25hdGUiLEIrIiBNb25h''@;'; put 'put ''dGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltCKyIgSmFocmUiLEIrIiBKYWhyZW4iXX07cmV0dXJuIHc/T1tQXVswXTpPW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJkZS1hdCIse21vbnRoczoiSlx4ZTRubmVyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxp''@;'; put 'put ''X0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSlx4ZTRuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEw''@;'; put 'put ''LHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0Rv''@;'; put 'put ''X0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZ''@;'; put 'put ''IEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2Vlazoi''@;'; put 'put ''W2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOl8sbW06IiVkIE1pbnV0ZW4iLGg6XyxoaDoiJWQgU3R1bmRlbiIsZDpfLGRkOl8sdzpf''@;'; put 'put ''LHd3OiIlZCBXb2NoZW4iLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODMyMjI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O2Z1bmN0aW9uIF8oQix3LFAsRil7dmFyIE89e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W0IrIiBUYWdlIixCKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVp''@;'; put 'put ''bmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W0IrIiBNb25hdGUiLEIrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltCKyIgSmFocmUiLEIrIiBKYWhyZW4iXX07cmV0dXJuIHc/T1tQXVswXTpPW1BdWzFdfUkuZGVmaW5lTG9j''@;'; put 'put ''YWxlKCJkZS1jaCIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9K''@;'; put 'put ''dWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb19Nb19E''@;'; put 'put ''aV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZ''@;'; put 'put ''WVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1d''@;'; put 'put ''IExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4i''@;'; put 'put ''LG06XyxtbToiJWQgTWludXRlbiIsaDpfLGhoOiIlZCBTdHVuZGVuIixkOl8sZGQ6Xyx3Ol8sd3c6IiVkIFdvY2hlbiIsTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4''@;'; put 'put ''NikpfSw0NTkzMjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCxGKXt2YXIgTz17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5l''@;'; put 'put ''bSBUYWciXSxkZDpbQisiIFRhZ2UiLEIrIiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbQisiIE1vbmF0ZSIsQisiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W0IrIiBKYWhy''@;'; put 'put ''ZSIsQisiIEphaHJlbiJdfTtyZXR1cm4gdz9PW1BdWzBdOk9bUF1bMV19SS5kZWZpbmVMb2NhbGUoImRlIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTVx4ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdf''@;'; put 'put ''RnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVs''@;'; put 'put ''c2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Imlu''@;'; put 'put ''ICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06XyxtbToiJWQgTWludXRlbiIsaDpfLGhoOiIlZCBTdHVuZGVuIixkOl8sZGQ6Xyx3Ol8sd3c6IiVkIFdvY2hlbiIsTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFy''@;'; put 'put ''c2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2NDA1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz1bIlx1MDc5Nlx1MDdhY1x1MDc4Mlx1MDdhYVx1MDc4N1x1MDdhNlx1MDc4M1x1MDdh''@;'; put 'put ''OSIsIlx1MDc4YVx1MDdhY1x1MDc4NFx1MDdiMFx1MDc4M1x1MDdhYVx1MDc4N1x1MDdhNlx1MDc4M1x1MDdhOSIsIlx1MDc4OVx1MDdhN1x1MDc4M1x1MDdhOFx1MDc5N1x1MDdhYSIsIlx1MDc4N1x1MDdhZFx1MDc5NVx1MDdiMFx1MDc4M1x1MDdhOVx1MDc4ZFx1MDdhYSIsIlx1MDc4OVx1''@;'; put 'put ''MDdhZCIsIlx1MDc5Nlx1MDdhYlx1MDc4Mlx1MDdiMCIsIlx1MDc5Nlx1MDdhYVx1MDc4ZFx1MDdhNlx1MDc4N1x1MDdhOCIsIlx1MDc4N1x1MDdhZlx1MDc4ZVx1MDdhNlx1MDc5MFx1MDdiMFx1MDc5M1x1MDdhYSIsIlx1MDc5MFx1MDdhY1x1MDc5NVx1MDdiMFx1MDc5M1x1MDdhY1x1MDc4''@;'; put 'put ''OVx1MDdiMFx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSIsIlx1MDc4N1x1MDdhZVx1MDc4Nlx1MDdiMFx1MDc5M1x1MDdhZlx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSIsIlx1MDc4Mlx1MDdhZVx1MDc4OFx1MDdhY1x1MDc4OVx1MDdiMFx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSIsIlx1MDc5''@;'; put 'put ''MVx1MDdhOFx1MDc5MFx1MDdhY1x1MDc4OVx1MDdiMFx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSJdLGc9WyJcdTA3ODdcdTA3YTdcdTA3OGJcdTA3YThcdTA3ODdcdTA3YjBcdTA3OGNcdTA3YTYiLCJcdTA3ODBcdTA3YWZcdTA3ODlcdTA3YTYiLCJcdTA3ODdcdTA3YTZcdTA3ODJcdTA3YjBc''@;'; put 'put ''dTA3OGVcdTA3YTdcdTA3ODNcdTA3YTYiLCJcdTA3ODRcdTA3YWFcdTA3OGJcdTA3YTYiLCJcdTA3ODRcdTA3YWFcdTA3ODNcdTA3YTdcdTA3OTBcdTA3YjBcdTA3OGFcdTA3YTZcdTA3OGNcdTA3YTgiLCJcdTA3ODBcdTA3YWFcdTA3ODZcdTA3YWFcdTA3ODNcdTA3YWEiLCJcdTA3ODBcdTA3''@;'; put 'put ''YWVcdTA3ODJcdTA3YThcdTA3ODBcdTA3YThcdTA3ODNcdTA3YWEiXTtJLmRlZmluZUxvY2FsZSgiZHYiLHttb250aHM6Xyxtb250aHNTaG9ydDpfLHdlZWtkYXlzOmcsd2Vla2RheXNTaG9ydDpnLHdlZWtkYXlzTWluOiJcdTA3ODdcdTA3YTdcdTA3OGJcdTA3YThfXHUwNzgwXHUwN2FmXHUw''@;'; put 'put ''Nzg5XHUwN2E2X1x1MDc4N1x1MDdhNlx1MDc4Mlx1MDdiMF9cdTA3ODRcdTA3YWFcdTA3OGJcdTA3YTZfXHUwNzg0XHUwN2FhXHUwNzgzXHUwN2E3X1x1MDc4MFx1MDdhYVx1MDc4Nlx1MDdhYV9cdTA3ODBcdTA3YWVcdTA3ODJcdTA3YTgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xU''@;'; put 'put ''OiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDc4OVx1MDc4NnxcdTA3ODlcdTA3OGEvLGlzUE06ZnVuY3Rpb24o''@;'; put 'put ''dyl7cmV0dXJuIlx1MDc4OVx1MDc4YSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MDc4OVx1MDc4NiI6Ilx1MDc4OVx1MDc4YSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNzg5XHUwN2E4XHUwNzg3XHUwN2E2XHUwNzhiXHUwN2FhXSBMVCIsbmV4dERh''@;'; put 'put ''eToiW1x1MDc4OVx1MDdhN1x1MDc4Ylx1MDdhNlx1MDc4OVx1MDdhN10gTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJbXHUwNzg3XHUwN2E4XHUwNzg3XHUwN2IwXHUwNzk0XHUwN2FjXSBMVCIsbGFzdFdlZWs6IltcdTA3OGFcdTA3YTdcdTA3ODdcdTA3YThcdTA3OGNcdTA3YWFc''@;'; put 'put ''dTA3ODhcdTA3YThdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDc4Y1x1MDdhY1x1MDc4M1x1MDdhZFx1MDc4ZVx1MDdhNlx1MDc4N1x1MDdhOCAlcyIscGFzdDoiXHUwNzg2XHUwN2FhXHUwNzgzXHUwN2E4XHUwNzgyXHUwN2IwICVzIixzOiJcdTA3''@;'; put 'put ''OTBcdTA3YThcdTA3ODZcdTA3YWFcdTA3ODJcdTA3YjBcdTA3OGNcdTA3YWFcdTA3ODZcdTA3YWVcdTA3ODVcdTA3YWNcdTA3ODdcdTA3YjAiLHNzOiJkJSBcdTA3OTBcdTA3YThcdTA3ODZcdTA3YWFcdTA3ODJcdTA3YjBcdTA3OGNcdTA3YWEiLG06Ilx1MDc4OVx1MDdhOFx1MDc4Mlx1MDdh''@;'; put 'put ''OFx1MDc5M1x1MDdhY1x1MDc4N1x1MDdiMCIsbW06Ilx1MDc4OVx1MDdhOFx1MDc4Mlx1MDdhOFx1MDc5M1x1MDdhYSAlZCIsaDoiXHUwNzhlXHUwN2E2XHUwNzkxXHUwN2E4XHUwNzg3XHUwN2E4XHUwNzgzXHUwN2FjXHUwNzg3XHUwN2IwIixoaDoiXHUwNzhlXHUwN2E2XHUwNzkxXHUwN2E4''@;'; put 'put ''XHUwNzg3XHUwN2E4XHUwNzgzXHUwN2FhICVkIixkOiJcdTA3OGJcdTA3YWFcdTA3ODhcdTA3YTZcdTA3ODBcdTA3YWNcdTA3ODdcdTA3YjAiLGRkOiJcdTA3OGJcdTA3YWFcdTA3ODhcdTA3YTZcdTA3OTBcdTA3YjAgJWQiLE06Ilx1MDc4OVx1MDdhNlx1MDc4MFx1MDdhY1x1MDc4N1x1MDdi''@;'; put 'put ''MCIsTU06Ilx1MDc4OVx1MDdhNlx1MDc5MFx1MDdiMCAlZCIseToiXHUwNzg3XHUwN2E2XHUwNzgwXHUwN2E2XHUwNzgzXHUwN2FjXHUwNzg3XHUwN2IwIix5eToiXHUwNzg3XHUwN2E2XHUwNzgwXHUwN2E2XHUwNzgzXHUwN2FhICVkIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcu''@;'; put 'put ''cmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nyxkb3k6MTJ9fSl9KHkoOTc1ODYpKX0sNjA3MTg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0ku''@;'; put 'put ''ZGVmaW5lTG9jYWxlKCJlbCIse21vbnRoc05vbWluYXRpdmVFbDoiXHUwMzk5XHUwM2IxXHUwM2JkXHUwM2JmXHUwM2M1XHUwM2FjXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDNhNlx1MDNiNVx1MDNiMlx1MDNjMVx1MDNiZlx1MDNjNVx1MDNhY1x1MDNjMVx1MDNiOVx1MDNiZlx1MDNj''@;'; put 'put ''Ml9cdTAzOWNcdTAzYWNcdTAzYzFcdTAzYzRcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2MwXHUwM2MxXHUwM2FmXHUwM2JiXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAzY2RcdTAzYmRcdTAzYjlcdTAzYmZcdTAz''@;'; put 'put ''YzJfXHUwMzk5XHUwM2JmXHUwM2NkXHUwM2JiXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5MVx1MDNjZFx1MDNiM1x1MDNiZlx1MDNjNVx1MDNjM1x1MDNjNFx1MDNiZlx1MDNjMl9cdTAzYTNcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAz''@;'; put 'put ''YzJfXHUwMzlmXHUwM2JhXHUwM2M0XHUwM2NlXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5ZFx1MDNiZlx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTRcdTAzYjVcdTAzYmFcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAz''@;'; put 'put ''YmZcdTAzYzIiLnNwbGl0KCJfIiksbW9udGhzR2VuaXRpdmVFbDoiXHUwMzk5XHUwM2IxXHUwM2JkXHUwM2JmXHUwM2M1XHUwM2IxXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDNhNlx1MDNiNVx1MDNiMlx1MDNjMVx1MDNiZlx1MDNjNVx1MDNiMVx1MDNjMVx1MDNhZlx1MDNiZlx1MDNj''@;'; put 'put ''NV9cdTAzOWNcdTAzYjFcdTAzYzFcdTAzYzRcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2MwXHUwM2MxXHUwM2I5XHUwM2JiXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1MDM5MFx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmRcdTAzYWZcdTAzYmZcdTAz''@;'; put 'put ''YzVfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JiXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5MVx1MDNjNVx1MDNiM1x1MDNiZlx1MDNjZFx1MDNjM1x1MDNjNFx1MDNiZlx1MDNjNV9cdTAzYTNcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAz''@;'; put 'put ''YzVfXHUwMzlmXHUwM2JhXHUwM2M0XHUwM2M5XHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5ZFx1MDNiZlx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTRcdTAzYjVcdTAzYmFcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAz''@;'; put 'put ''YmZcdTAzYzUiLnNwbGl0KCJfIiksbW9udGhzOmZ1bmN0aW9uKEIsdyl7cmV0dXJuIEI/InN0cmluZyI9PXR5cGVvZiB3JiYvRC8udGVzdCh3LnN1YnN0cmluZygwLHcuaW5kZXhPZigiTU1NTSIpKSk/dGhpcy5fbW9udGhzR2VuaXRpdmVFbFtCLm1vbnRoKCldOnRoaXMuX21vbnRoc05vbWlu''@;'; put 'put ''YXRpdmVFbFtCLm1vbnRoKCldOnRoaXMuX21vbnRoc05vbWluYXRpdmVFbH0sbW9udGhzU2hvcnQ6Ilx1MDM5OVx1MDNiMVx1MDNiZF9cdTAzYTZcdTAzYjVcdTAzYjJfXHUwMzljXHUwM2IxXHUwM2MxX1x1MDM5MVx1MDNjMFx1MDNjMV9cdTAzOWNcdTAzYjFcdTAzY2FfXHUwMzk5XHUwM2Jm''@;'; put 'put ''XHUwM2M1XHUwM2JkX1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiYl9cdTAzOTFcdTAzYzVcdTAzYjNfXHUwM2EzXHUwM2I1XHUwM2MwX1x1MDM5Zlx1MDNiYVx1MDNjNF9cdTAzOWRcdTAzYmZcdTAzYjVfXHUwMzk0XHUwM2I1XHUwM2JhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTAzOWFcdTAz''@;'; put 'put ''YzVcdTAzYzFcdTAzYjlcdTAzYjFcdTAzYmFcdTAzYWVfXHUwMzk0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2FkXHUwM2MxXHUwM2IxX1x1MDNhNFx1MDNjMVx1MDNhZlx1MDNjNFx1MDNiN19cdTAzYTRcdTAzYjVcdTAzYzRcdTAzYWNcdTAzYzFcdTAzYzRcdTAzYjdfXHUwM2EwXHUwM2FkXHUw''@;'; put 'put ''M2JjXHUwM2MwXHUwM2M0XHUwM2I3X1x1MDNhMFx1MDNiMVx1MDNjMVx1MDNiMVx1MDNjM1x1MDNiYVx1MDNiNVx1MDNjNVx1MDNhZV9cdTAzYTNcdTAzYWNcdTAzYjJcdTAzYjJcdTAzYjFcdTAzYzRcdTAzYmYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwMzlhXHUwM2M1XHUwM2Mx''@;'; put 'put ''X1x1MDM5NFx1MDNiNVx1MDNjNV9cdTAzYTRcdTAzYzFcdTAzYjlfXHUwM2E0XHUwM2I1XHUwM2M0X1x1MDNhMFx1MDNiNVx1MDNiY19cdTAzYTBcdTAzYjFcdTAzYzFfXHUwM2EzXHUwM2IxXHUwM2IyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTAzOWFcdTAzYzVfXHUwMzk0XHUwM2I1''@;'; put 'put ''X1x1MDNhNFx1MDNjMV9cdTAzYTRcdTAzYjVfXHUwM2EwXHUwM2I1X1x1MDNhMFx1MDNiMV9cdTAzYTNcdTAzYjEiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPjExP1A/Ilx1MDNiY1x1MDNiYyI6Ilx1MDM5Y1x1MDM5YyI6UD8iXHUwM2MwXHUwM2JjIjoi''@;'; put 'put ''XHUwM2EwXHUwMzljIn0saXNQTTpmdW5jdGlvbihCKXtyZXR1cm4iXHUwM2JjIj09PShCKyIiKS50b0xvd2VyQ2FzZSgpWzBdfSxtZXJpZGllbVBhcnNlOi9bXHUwM2EwXHUwMzljXVwuP1x1MDM5Yz9cLj8vaSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6''@;'; put 'put ''IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyRWw6e3NhbWVEYXk6IltcdTAzYTNcdTAzYWVcdTAzYmNcdTAzYjVcdTAzYzFcdTAzYjEge31dIExUIixuZXh0RGF5OiJb''@;'; put 'put ''XHUwMzkxXHUwM2NkXHUwM2MxXHUwM2I5XHUwM2JmIHt9XSBMVCIsbmV4dFdlZWs6ImRkZGQgW3t9XSBMVCIsbGFzdERheToiW1x1MDNhN1x1MDNiOFx1MDNiNVx1MDNjMiB7fV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDY9PT10aGlzLmRheSgpPyJbXHUwM2M0XHUwM2JmIFx1''@;'; put 'put ''MDNjMFx1MDNjMVx1MDNiZlx1MDNiN1x1MDNiM1x1MDNiZlx1MDNjZFx1MDNiY1x1MDNiNVx1MDNiZFx1MDNiZl0gZGRkZCBbe31dIExUIjoiW1x1MDNjNFx1MDNiN1x1MDNiZCBcdTAzYzBcdTAzYzFcdTAzYmZcdTAzYjdcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYmNcdTAzYjVcdTAzYmRcdTAz''@;'; put 'put ''YjddIGRkZGQgW3t9XSBMVCJ9LHNhbWVFbHNlOiJMIn0sY2FsZW5kYXI6ZnVuY3Rpb24oQix3KXt2YXIgUD10aGlzLl9jYWxlbmRhckVsW0JdLEY9dyYmdy5ob3VycygpO3JldHVybiBmdW5jdGlvbiBfKEIpe3JldHVybiB0eXBlb2YgRnVuY3Rpb248InUiJiZCIGluc3RhbmNlb2YgRnVuY3Rp''@;'; put 'put ''b258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQil9KFApJiYoUD1QLmFwcGx5KHcpKSxQLnJlcGxhY2UoInt9IixGJTEyPT0xPyJcdTAzYzNcdTAzYzRcdTAzYjciOiJcdTAzYzNcdTAzYzRcdTAzYjlcdTAzYzIiKX0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6Ilx1MDNjM1x1MDNiNSAlcyIscGFzdDoiJXMgXHUwM2MwXHUwM2MxXHUwM2I5XHUwM2JkIixzOiJcdTAzYmJcdTAzYWZcdTAzYjNcdTAzYjEgXHUwM2I0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2I1XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixz''@;'; put 'put ''czoiJWQgXHUwM2I0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2I1XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixtOiJcdTAzYWRcdTAzYmRcdTAzYjEgXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2NjIixtbToiJWQgXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0''@;'; put 'put ''XHUwM2FjIixoOiJcdTAzYmNcdTAzYWZcdTAzYjEgXHUwM2NlXHUwM2MxXHUwM2IxIixoaDoiJWQgXHUwM2NlXHUwM2MxXHUwM2I1XHUwM2MyIixkOiJcdTAzYmNcdTAzYWZcdTAzYjEgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2IxIixkZDoiJWQgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2I1XHUw''@;'; put 'put ''M2MyIixNOiJcdTAzYWRcdTAzYmRcdTAzYjFcdTAzYzIgXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2IxXHUwM2MyIixNTToiJWQgXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2I1XHUwM2MyIix5OiJcdTAzYWRcdTAzYmRcdTAzYjFcdTAzYzIgXHUwM2M3XHUwM2MxXHUwM2NjXHUwM2JkXHUwM2JmXHUw''@;'; put 'put ''M2MyIix5eToiJWQgXHUwM2M3XHUwM2MxXHUwM2NjXHUwM2JkXHUwM2I5XHUwM2IxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MDNiNy8sb3JkaW5hbDoiJWRcdTAzYjciLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDM2MzE5OmZ1bmN0aW9uKHVlLFgseSl7''@;'; put 'put ''IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4tYXUiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9u''@;'; put 'put ''X1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1N''@;'; put 'put ''TSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0''@;'; put 'put ''V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVk''@;'; put 'put ''IGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1''@;'; put 'put ''cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzowLGRveTo0fX0pfSh5KDk3NTg2KSl9LDgwNTk3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgi''@;'; put 'put ''ZW4tY2EiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09j''@;'; put 'put ''dF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiWVlZWS1NTS1ERCIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkg''@;'; put 'put ''aDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6Ikwi''@;'; put 'put ''fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9u''@;'; put 'put ''dGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0Ijoy''@;'; put 'put ''PT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9fSl9KHkoOTc1ODYpKX0sNTE4MDA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1nYiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5''@;'; put 'put ''X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRu''@;'; put 'put ''ZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJI''@;'; put 'put ''SDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRd''@;'; put 'put ''IExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNz''@;'; put 'put ''OiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFy''@;'; put 'put ''c2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw4MDc6''@;'; put 'put ''ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1pZSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3Bs''@;'; put 'put ''aXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZ''@;'; put 'put ''WVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkg''@;'; put 'put ''YXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4g''@;'; put 'put ''aG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFy''@;'; put 'put ''IEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDk1OTYwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRl''@;'; put 'put ''ZmluZUxvY2FsZSgiZW4taWwiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1''@;'; put 'put ''bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1N''@;'; put 'put ''IFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToi''@;'; put 'put ''YSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09Qj8i''@;'; put 'put ''c3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgiKX19KX0oeSg5NzU4NikpfSw4NDQxODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWluIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5l''@;'; put 'put ''X0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5''@;'; put 'put ''X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7''@;'; put 'put ''TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9t''@;'; put 'put ''b3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNl''@;'; put 'put ''Y29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhP''@;'; put 'put ''cmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4''@;'; put 'put ''NikpfSw0Njg2NTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLW56Iix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0Rl''@;'; put 'put ''Y2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVki''@;'; put 'put ''LExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0''@;'; put 'put ''RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVk''@;'; put 'put ''IG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwzMjY0NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLXNnIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01h''@;'; put 'put ''cl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9G''@;'; put 'put ''cmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExM''@;'; put 'put ''TEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQg''@;'; put 'put ''W2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIs''@;'; put 'put ''ZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAv''@;'; put 'put ''MTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDYxOTMxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW8iLHttb250aHM6ImphbnVh''@;'; put 'put ''cm9fZmVicnVhcm9fbWFydG9fYXByaWxvX21ham9fanVuaW9fanVsaW9fYVx1MDE2ZGd1c3RvX3NlcHRlbWJyb19va3RvYnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcnRfYXByX21hal9qdW5fanVsX2FcdTAxNmRnX3NlcHRfb2t0X25v''@;'; put 'put ''dl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRpbWFuXHUwMTA5b19sdW5kb19tYXJkb19tZXJrcmVkb19cdTAxMzVhXHUwMTZkZG9fdmVuZHJlZG9fc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbV9sdW5fbWFyZF9tZXJrX1x1MDEzNWFcdTAxNmRfdmVuX3NhYiIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfXHUwMTM1YV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSIsTExMOiJbbGFdIERbLWFuIGRl''@;'; put 'put ''XSBNTU1NLCBZWVlZIEhIOm1tIixMTExMOiJkZGRkW25dLCBbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIFtsYV0gRFstYW4gZGVdIE1NTSwgWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1thcF1cLnRcLm0vaSxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJw''@;'; put 'put ''Ij09PWcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZz4xMT93PyJwLnQubS4iOiJQLlQuTS4iOnc/ImEudC5tLiI6IkEuVC5NLiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9kaWFcdTAxNmQgamVdIExUIixuZXh0RGF5OiJbTW9yZ2Fc''@;'; put 'put ''dTAxNmQgamVdIExUIixuZXh0V2VlazoiZGRkZFtuIGplXSBMVCIsbGFzdERheToiW0hpZXJhXHUwMTZkIGplXSBMVCIsbGFzdFdlZWs6IltwYXNpbnRhbl0gZGRkZFtuIGplXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicG9zdCAlcyIscGFzdDoiYW50YVx1MDE2''@;'; put 'put ''ZCAlcyIsczoia2Vsa2FqIHNla3VuZG9qIixzczoiJWQgc2VrdW5kb2oiLG06InVudSBtaW51dG8iLG1tOiIlZCBtaW51dG9qIixoOiJ1bnUgaG9ybyIsaGg6IiVkIGhvcm9qIixkOiJ1bnUgdGFnbyIsZGQ6IiVkIHRhZ29qIixNOiJ1bnUgbW9uYXRvIixNTToiJWQgbW9uYXRvaiIseToidW51''@;'; put 'put ''IGphcm8iLHl5OiIlZCBqYXJvaiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1hLyxvcmRpbmFsOiIlZGEiLHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDQxODA1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iZW5lLl9m''@;'; put 'put ''ZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksQj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwv''@;'; put 'put ''Xm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98''@;'; put 'put ''ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtJLmRlZmluZUxvY2FsZSgiZXMtZG8iLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2Vw''@;'; put 'put ''dGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250''@;'; put 'put ''aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1h''@;'; put 'put ''eVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5l''@;'; put 'put ''c19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2Vlazpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2Vs''@;'; put 'put ''XSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06''@;'; put 'put ''IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9u''@;'; put 'put ''dGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDgzNDQ1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5f''@;'; put 'put ''anVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksQj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwv''@;'; put 'put ''XmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5''@;'; put 'put ''XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtJLmRlZmluZUxvY2FsZSgiZXMtbXgiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJy''@;'; put 'put ''ZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xm''@;'; put 'put ''ZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wu''@;'; put 'put ''P3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIs''@;'; put 'put ''TFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''Iltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEh''@;'; put 'put ''PT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5o''@;'; put 'put ''b3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVk''@;'; put 'put ''IGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3Jk''@;'; put 'put ''aW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MCxkb3k6NH0saW52YWxpZERhdGU6IkZlY2hhIGludlx4ZTFsaWRhIn0pfSh5KDk3NTg2KSl9LDgxNTE2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5f''@;'; put 'put ''anVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksQj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwv''@;'; put 'put ''XmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5''@;'; put 'put ''XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtJLmRlZmluZUxvY2FsZSgiZXMtdXMiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJy''@;'; put 'put ''ZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xm''@;'; put 'put ''ZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wu''@;'; put 'put ''P3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBB''@;'; put 'put ''IixMVFM6Img6bW06c3MgQSIsTDoiTU0vREQvWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFth''@;'; put 'put ''IGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEh''@;'; put 'put ''PT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3Jh''@;'; put 'put ''IixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1c''@;'; put 'put ''eGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDQ2Njc5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3Yu''@;'; put 'put ''X2RpYy4iLnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksQj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwv''@;'; put 'put ''Xm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/''@;'; put 'put ''fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtJLmRlZmluZUxvY2FsZSgiZXMiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9u''@;'; put 'put ''dGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVu''@;'; put 'put ''aW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNc''@;'; put 'put ''Lj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21h''@;'; put 'put ''ci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZ''@;'; put 'put ''IixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJz''@;'; put 'put ''KCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBM''@;'; put 'put ''VCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1l''@;'; put 'put ''RWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIl''@;'; put 'put ''ZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxk''@;'; put 'put ''b3k6NH0saW52YWxpZERhdGU6IkZlY2hhIGludlx4ZTFsaWRhIn0pfSh5KDk3NTg2KSl9LDg4MTUwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEIsdyxQLEYpe3ZhciBPPXtzOlsibVx4ZjVuZSBzZWt1bmRpIiwibVx4ZjVuaSBzZWt1bmQi''@;'; put 'put ''LCJwYWFyIHNla3VuZGl0Il0sc3M6W0IrInNla3VuZGkiLEIrInNla3VuZGl0Il0sbTpbIlx4ZmNoZSBtaW51dGkiLCJceGZja3MgbWludXQiXSxtbTpbQisiIG1pbnV0aSIsQisiIG1pbnV0aXQiXSxoOlsiXHhmY2hlIHR1bm5pIiwidHVuZCBhZWdhIiwiXHhmY2tzIHR1bmQiXSxoaDpbQisi''@;'; put 'put ''IHR1bm5pIixCKyIgdHVuZGkiXSxkOlsiXHhmY2hlIHBceGU0ZXZhIiwiXHhmY2tzIHBceGU0ZXYiXSxNOlsia3V1IGFqYSIsImt1dSBhZWdhIiwiXHhmY2tzIGt1dSJdLE1NOltCKyIga3V1IixCKyIga3V1ZCJdLHk6WyJceGZjaGUgYWFzdGEiLCJhYXN0YSIsIlx4ZmNrcyBhYXN0YSJdLHl5''@;'; put 'put ''OltCKyIgYWFzdGEiLEIrIiBhYXN0YXQiXX07cmV0dXJuIHc/T1tQXVsyXT9PW1BdWzJdOk9bUF1bMV06Rj9PW1BdWzBdOk9bUF1bMV19SS5kZWZpbmVMb2NhbGUoImV0Iix7bW9udGhzOiJqYWFudWFyX3ZlZWJydWFyX21ceGU0cnRzX2FwcmlsbF9tYWlfanV1bmlfanV1bGlfYXVndXN0X3Nl''@;'; put 'put ''cHRlbWJlcl9va3Rvb2Jlcl9ub3ZlbWJlcl9kZXRzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphYW5fdmVlYnJfbVx4ZTRydHNfYXByX21haV9qdXVuaV9qdXVsaV9hdWdfc2VwdF9va3Rfbm92X2RldHMiLnNwbGl0KCJfIiksd2Vla2RheXM6InBceGZjaGFwXHhlNGV2X2VzbWFz''@;'; put 'put ''cFx4ZTRldl90ZWlzaXBceGU0ZXZfa29sbWFwXHhlNGV2X25lbGphcFx4ZTRldl9yZWVkZV9sYXVwXHhlNGV2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlBfRV9UX0tfTl9SX0wiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlBfRV9UX0tfTl9SX0wiLnNwbGl0KCJfIiksbG9uZ0RhdGVG''@;'; put 'put ''b3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUXHhlNG5hLF0gTFQiLG5leHREYXk6IltI''@;'; put 'put ''b21tZSxdIExUIixuZXh0V2VlazoiW0pceGU0cmdtaW5lXSBkZGRkIExUIixsYXN0RGF5OiJbRWlsZSxdIExUIixsYXN0V2VlazoiW0VlbG1pbmVdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHBceGU0cmFzdCIscGFzdDoiJXMgdGFnYXNpIixzOl8s''@;'; put 'put ''c3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6IiVkIHBceGU0ZXZhIixNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDgwNzU3OmZ1bmN0aW9uKHVlLFgs''@;'; put 'put ''eSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZXUiLHttb250aHM6InVydGFycmlsYV9vdHNhaWxhX21hcnR4b2FfYXBpcmlsYV9tYWlhdHphX2VrYWluYV91enRhaWxhX2FidXp0dWFfaXJhaWxhX3VycmlhX2F6YXJvYV9hYmVuZHVhIi5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1Nob3J0OiJ1cnQuX290cy5fbWFyLl9hcGkuX21haS5fZWthLl91enQuX2FidS5faXJhLl91cnIuX2F6YS5fYWJlLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJpZ2FuZGVhX2FzdGVsZWhlbmFfYXN0ZWFydGVhX2FzdGVhemtlbmFfb3N0ZWd1bmFfb3N0''@;'; put 'put ''aXJhbGFfbGFydW5iYXRhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImlnLl9hbC5fYXIuX2F6Ll9vZy5fb2wuX2xyLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiaWdfYWxfYXJfYXpfb2dfb2xfbHIiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSIsTExMOiJZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbSIsTExMTDoiZGRkZCwgWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0iLGw6IllZWVktTS1EIixs''@;'; put 'put ''bDoiWVlZWVtrb10gTU1NIERbYV0iLGxsbDoiWVlZWVtrb10gTU1NIERbYV0gSEg6bW0iLGxsbGw6ImRkZCwgWVlZWVtrb10gTU1NIERbYV0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2dhdXJdIExUW2V0YW5dIixuZXh0RGF5OiJbYmloYXJdIExUW2V0YW5dIixuZXh0V2VlazoiZGRk''@;'; put 'put ''ZCBMVFtldGFuXSIsbGFzdERheToiW2F0em9dIExUW2V0YW5dIixsYXN0V2VlazoiW2F1cnJla29dIGRkZGQgTFRbZXRhbl0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGJhcnJ1IixwYXN0OiJkdWVsYSAlcyIsczoic2VndW5kbyBiYXR6dWsiLHNzOiIlZCBzZWd1''@;'; put 'put ''bmRvIixtOiJtaW51dHUgYmF0IixtbToiJWQgbWludXR1IixoOiJvcmR1IGJhdCIsaGg6IiVkIG9yZHUiLGQ6ImVndW4gYmF0IixkZDoiJWQgZWd1biIsTToiaGlsYWJldGUgYmF0IixNTToiJWQgaGlsYWJldGUiLHk6InVydGUgYmF0Iix5eToiJWQgdXJ0ZSJ9LGRheU9mTW9udGhPcmRpbmFs''@;'; put 'put ''UGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw2NTc0MjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDZmMSIsMjoiXHUwNmYyIiwzOiJcdTA2ZjMiLDQ6Ilx1MDZmNCIs''@;'; put 'put ''NToiXHUwNmY1Iiw2OiJcdTA2ZjYiLDc6Ilx1MDZmNyIsODoiXHUwNmY4Iiw5OiJcdTA2ZjkiLDA6Ilx1MDZmMCJ9LGc9eyJcdTA2ZjEiOiIxIiwiXHUwNmYyIjoiMiIsIlx1MDZmMyI6IjMiLCJcdTA2ZjQiOiI0IiwiXHUwNmY1IjoiNSIsIlx1MDZmNiI6IjYiLCJcdTA2ZjciOiI3IiwiXHUw''@;'; put 'put ''NmY4IjoiOCIsIlx1MDZmOSI6IjkiLCJcdTA2ZjAiOiIwIn07SS5kZWZpbmVMb2NhbGUoImZhIix7bW9udGhzOiJcdTA2OThcdTA2MjdcdTA2NDZcdTA2NDhcdTA2Y2NcdTA2NDdfXHUwNjQxXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ3X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjJc''@;'; put 'put ''dTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDRfXHUwNjQ1XHUwNjQ3X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDY0Nl9cdTA2OThcdTA2NDhcdTA2MjZcdTA2Y2NcdTA2NDdfXHUwNjI3XHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDY3ZVx1MDYyYVx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjdcdTA2''@;'; put 'put ''YTlcdTA2MmFcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYzM1x1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjk4XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNmNjXHUwNjQ3X1x1MDY0MVx1''@;'; put 'put ''MDY0OFx1MDYzMVx1MDZjY1x1MDY0N19cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIyXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ0X1x1MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNmNjXHUwNjQ3X1x1MDYyN1x1MDY0OFx1MDYy''@;'; put 'put ''YV9cdTA2MzNcdTA2N2VcdTA2MmFcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXM6Ilx1MDZjY1x1MDZhOVx1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmZcdTA2NDhcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjMzXHUwNjQ3XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY4Nlx1MDY0N1x1MDYyN1x1MDYzMVx1MDYzNFx1MDY0''@;'; put 'put ''Nlx1MDYyOFx1MDY0N19cdTA2N2VcdTA2NDZcdTA2MmNcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjQ3X1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2Y2NcdTA2YTlcdTIwMGNcdTA2MzRc''@;'; put 'put ''dTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUwNjQ4XHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYzM1x1MDY0N1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjdlXHUwNjQ2XHUwNjJj''@;'; put 'put ''XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDY0N19cdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDciLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDZjY19cdTA2MmZfXHUwNjMzX1x1MDY4Nl9cdTA2N2VfXHUwNjJjX1x1MDYzNCIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFy''@;'; put 'put ''c2U6L1x1MDY0Mlx1MDYyOFx1MDY0NCBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxfFx1MDYyOFx1MDYzOVx1MDYyZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxLyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybi9cdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1''@;'; put 'put ''MDYzOFx1MDY0N1x1MDYzMS8udGVzdCh3KX0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyPyJcdTA2NDJcdTA2MjhcdTA2NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMSI6Ilx1MDYyOFx1MDYzOVx1MDYyZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUw''@;'; put 'put ''NjMxIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDVcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbmV4dERheToiW1x1MDY0MVx1MDYzMVx1MDYyZlx1MDYyNyBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixuZXh0V2VlazoiZGRk''@;'; put 'put ''ZCBbXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbGFzdERheToiW1x1MDYyZlx1MDZjY1x1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjdlXHUwNmNjXHUwNjM0XSBbXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJh''@;'; put 'put ''XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjJmXHUwNjMxICVzIixwYXN0OiIlcyBcdTA2N2VcdTA2Y2NcdTA2MzQiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2Y2NcdTA2NDciLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2''@;'; put 'put ''NDZcdTA2Y2NcdTA2NDciLG06Ilx1MDZjY1x1MDZhOSBcdTA2MmZcdTA2NDJcdTA2Y2NcdTA2NDJcdTA2NDciLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2Y2NcdTA2NDJcdTA2NDciLGg6Ilx1MDZjY1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmEiLGhoOiIlZCBcdTA2MzNcdTA2Mjdc''@;'; put 'put ''dTA2MzlcdTA2MmEiLGQ6Ilx1MDZjY1x1MDZhOSBcdTA2MzFcdTA2NDhcdTA2MzIiLGRkOiIlZCBcdTA2MzFcdTA2NDhcdTA2MzIiLE06Ilx1MDZjY1x1MDZhOSBcdTA2NDVcdTA2MjdcdTA2NDciLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDciLHk6Ilx1MDZjY1x1MDZhOSBcdTA2MzNcdTA2''@;'; put 'put ''MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwNmYwLVx1MDZmOV0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24o''@;'; put 'put ''dyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTA2NDUvLG9yZGluYWw6IiVkXHUwNjQ1Iix3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KHkoOTc1ODYp''@;'; put 'put ''KX0sMzM5NTg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGpceGU0IHZpaXNpIGt1dXNpIHNlaXRzZW1ceGU0biBrYWhkZWtzYW4geWhkZWtzXHhlNG4iLnNwbGl0KCIgIiksZz1bIm5vbGxhIiwieWhk''@;'; put 'put ''ZW4iLCJrYWhkZW4iLCJrb2xtZW4iLCJuZWxqXHhlNG4iLCJ2aWlkZW4iLCJrdXVkZW4iLF9bN10sX1s4XSxfWzldXTtmdW5jdGlvbiBCKEYsTyx6LE4pe3ZhciBMPSIiO3N3aXRjaCh6KXtjYXNlInMiOnJldHVybiBOPyJtdXV0YW1hbiBzZWt1bm5pbiI6Im11dXRhbWEgc2VrdW50aSI7Y2Fz''@;'; put 'put ''ZSJzcyI6TD1OPyJzZWt1bm5pbiI6InNla3VudGlhIjticmVhaztjYXNlIm0iOnJldHVybiBOPyJtaW51dXRpbiI6Im1pbnV1dHRpIjtjYXNlIm1tIjpMPU4/Im1pbnV1dGluIjoibWludXV0dGlhIjticmVhaztjYXNlImgiOnJldHVybiBOPyJ0dW5uaW4iOiJ0dW50aSI7Y2FzZSJoaCI6TD1O''@;'; put 'put ''PyJ0dW5uaW4iOiJ0dW50aWEiO2JyZWFrO2Nhc2UiZCI6cmV0dXJuIE4/InBceGU0aXZceGU0biI6InBceGU0aXZceGU0IjtjYXNlImRkIjpMPU4/InBceGU0aXZceGU0biI6InBceGU0aXZceGU0XHhlNCI7YnJlYWs7Y2FzZSJNIjpyZXR1cm4gTj8ia3V1a2F1ZGVuIjoia3V1a2F1c2kiO2Nh''@;'; put 'put ''c2UiTU0iOkw9Tj8ia3V1a2F1ZGVuIjoia3V1a2F1dHRhIjticmVhaztjYXNlInkiOnJldHVybiBOPyJ2dW9kZW4iOiJ2dW9zaSI7Y2FzZSJ5eSI6TD1OPyJ2dW9kZW4iOiJ2dW90dGEifXJldHVybiBmdW5jdGlvbiB3KEYsTyl7cmV0dXJuIEY8MTA/Tz9nW0ZdOl9bRl06Rn0oRixOKSsiICIr''@;'; put 'put ''TH1JLmRlZmluZUxvY2FsZSgiZmkiLHttb250aHM6InRhbW1pa3V1X2hlbG1pa3V1X21hYWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXNceGU0a3V1X2hlaW5ceGU0a3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0''@;'; put 'put ''OiJ0YW1taV9oZWxtaV9tYWFsaXNfaHVodGlfdG91a29fa2VzXHhlNF9oZWluXHhlNF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFp''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tYV90aV9rZV90b19wZV9sYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC5NTS5ZWVlZIixM''@;'; put 'put ''TDoiRG8gTU1NTVt0YV0gWVlZWSIsTExMOiJEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsTExMTDoiZGRkZCwgRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0iLGw6IkQuTS5ZWVlZIixsbDoiRG8gTU1NIFlZWVkiLGxsbDoiRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIixsbGxs''@;'; put 'put ''OiJkZGQsIERvIE1NTSBZWVlZLCBba2xvXSBISC5tbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdFx4ZTRuXHhlNFx4ZTRuXSBba2xvXSBMVCIsbmV4dERheToiW2h1b21lbm5hXSBba2xvXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsb10gTFQiLGxhc3REYXk6IltlaWxlbl0gW2tsb10gTFQiLGxh''@;'; put 'put ''c3RXZWVrOiJbdmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNFx4ZTRzdFx4ZTQiLHBhc3Q6IiVzIHNpdHRlbiIsczpCLHNzOkIsbTpCLG1tOkIsaDpCLGhoOkIsZDpCLGRkOkIsTTpCLE1NOkIseTpCLHl5OkJ9LGRh''@;'; put 'put ''eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw0NjcyMDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImZpbCIse21vbnRoczoiRW5lcm9f''@;'; put 'put ''UGVicmVyb19NYXJzb19BYnJpbF9NYXlvX0h1bnlvX0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0RpcyIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5czoiTGluZ2dvX0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfTHVfTWFfTWlfSHVfQmlf''@;'; put 'put ''U2FiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6Ik1NL0QvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURh''@;'; put 'put ''eToiTFQgW25nYXlvbmcgYXJhd10iLG5leHREYXk6IltCdWthcyBuZ10gTFQiLG5leHRXZWVrOiJMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCIsbGFzdERheToiTFQgW2thaGFwb25dIixsYXN0V2VlazoiTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToic2EgbG9vYiBuZyAlcyIscGFzdDoiJXMgYW5nIG5ha2FsaXBhcyIsczoiaWxhbmcgc2VndW5kbyIsc3M6IiVkIHNlZ3VuZG8iLG06ImlzYW5nIG1pbnV0byIsbW06IiVkIG1pbnV0byIsaDoiaXNhbmcgb3JhcyIsaGg6IiVkIG9yYXMiLGQ6ImlzYW5nIGFyYXciLGRkOiIl''@;'; put 'put ''ZCBhcmF3IixNOiJpc2FuZyBidXdhbiIsTU06IiVkIGJ1d2FuIix5OiJpc2FuZyB0YW9uIix5eToiJWQgdGFvbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24oZyl7cmV0dXJuIGd9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDk4''@;'; put 'put ''MzUyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZm8iLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnNfYXByXHhlZGxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNw''@;'; put 'put ''bGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbmFkYWd1cl90XHhmZHNkYWd1cl9taWt1ZGFndXJfaFx4ZjNzZGFndXJfZnJceGVkZ2dqYWRhZ3Vy''@;'; put 'put ''X2xleWdhcmRhZ3VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1bl9tXHhlMW5fdFx4ZmRzX21pa19oXHhmM3NfZnJceGVkX2xleSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3VfbVx4ZTFfdFx4ZmRfbWlfaFx4ZjNfZnJfbGUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xU''@;'; put 'put ''OiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0sIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x4Y2QgZGFnIGtsLl0gTFQiLG5leHREYXk6IltceGNk''@;'; put 'put ''IG1vcmdpbiBrbC5dIExUIixuZXh0V2VlazoiZGRkZCBba2wuXSBMVCIsbGFzdERheToiW1x4Y2QgZ2pceGUxciBrbC5dIExUIixsYXN0V2VlazoiW3NceGVkXHhmMHN0dV0gZGRkZCBba2xdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ1bSAlcyIscGFzdDoiJXMg''@;'; put 'put ''c1x4ZWRceGYwYW5pIixzOiJmXHhlMSBzZWt1bmQiLHNzOiIlZCBzZWt1bmRpciIsbToiZWluIG1pbnV0dHVyIixtbToiJWQgbWludXR0aXIiLGg6ImVpbiB0XHhlZG1pIixoaDoiJWQgdFx4ZWRtYXIiLGQ6ImVpbiBkYWd1ciIsZGQ6IiVkIGRhZ2FyIixNOiJlaW4gbVx4ZTFuYVx4ZjB1ciIs''@;'; put 'put ''TU06IiVkIG1ceGUxbmFceGYwaXIiLHk6ImVpdHQgXHhlMXIiLHl5OiIlZCBceGUxciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw0MjA5NjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlv''@;'; put 'put ''bihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImZyLWNhIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3Nh''@;'; put 'put ''bWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xU''@;'; put 'put ''OiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5''@;'; put 'put ''OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVz''@;'; put 'put ''IixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6''@;'; put 'put ''IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gZysoMT09PWc/ImVyIjoiZSIpO2Nhc2UidyI6''@;'; put 'put ''Y2FzZSJXIjpyZXR1cm4gZysoMT09PWc/InJlIjoiZSIpfX19KX0oeSg5NzU4NikpfSw5NTc1OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImZyLWNoIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlf''@;'; put 'put ''anVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRk''@;'; put 'put ''ZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJl''@;'; put 'put ''IixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7ZGVm''@;'; put 'put ''YXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gZysoMT09PWc/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZysoMT09PWc/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNDA1OTpmdW5jdGlvbih1''@;'; put 'put ''ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIEI9LyhqYW52XC4/fGZceGU5dnJcLj98bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb1x4ZmJ0fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkXHhlOWNcLj98amFudmllcnxmXHhlOXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1''@;'; put 'put ''aW58anVpbGxldHxhb1x4ZmJ0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGRceGU5Y2VtYnJlKS9pLHc9Wy9eamFudi9pLC9eZlx4ZTl2ci9pLC9ebWFycy9pLC9eYXZyL2ksL15tYWkvaSwvXmp1aW4vaSwvXmp1aWwvaSwvXmFvXHhmYnQvaSwvXnNlcHQvaSwvXm9jdC9pLC9ebm92L2ks''@;'; put 'put ''L15kXHhlOWMvaV07SS5kZWZpbmVMb2NhbGUoImZyIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYu''@;'; put 'put ''X2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4OkIsbW9udGhzU2hvcnRSZWdleDpCLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnZpZXJ8Zlx4ZTl2cmllcnxtYXJzfGF2cmlsfG1h''@;'; put 'put ''aXxqdWlufGp1aWxsZXR8YW9ceGZidHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkXHhlOWNlbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi8oamFudlwuP3xmXHhlOXZyXC4/fG1hcnN8YXZyXC4/fG1haXxqdWlufGp1aWxcLj98YW9ceGZidHxzZXB0XC4/fG9jdFwuP3xub3Zc''@;'; put 'put ''Lj98ZFx4ZTljXC4/KS9pLG1vbnRoc1BhcnNlOncsbG9uZ01vbnRoc1BhcnNlOncsc2hvcnRNb250aHNQYXJzZTp3LHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4u''@;'; put 'put ''X21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExM''@;'; put 'put ''OiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBd''@;'; put 'put ''IExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIs''@;'; put 'put ''bToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIix3OiJ1bmUgc2VtYWluZSIsd3c6IiVkIHNlbWFpbmVzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMi''@;'; put 'put ''fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfCkvLG9yZGluYWw6ZnVuY3Rpb24oRixPKXtzd2l0Y2goTyl7Y2FzZSJEIjpyZXR1cm4gRisoMT09PUY/ImVyIjoiIik7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIEYrKDE9PT1GPyJl''@;'; put 'put ''ciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIEYrKDE9PT1GPyJyZSI6ImUiKX19LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDE1OTU4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFuLl9mZWIuX21ydC5fYXByLl9tYWlf''@;'; put 'put ''anVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxnPSJqYW5fZmViX21ydF9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKTtJLmRlZmluZUxvY2FsZSgiZnkiLHttb250aHM6Imphbm5ld2FyaXNfZmVicmV3YXJpc19tYWFy''@;'; put 'put ''dF9hcHJpbF9tYWFpZV9qdW55X2p1bHlfYXVndXN0dXNfc2VwdGltYmVyX29rdG9iZXJfbm92aW1iZXJfZGVzaW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24odyxQKXtyZXR1cm4gdz8vLU1NTS0vLnRlc3QoUCk/Z1t3Lm1vbnRoKCldOl9bdy5tb250aCgpXTpffSxtb250''@;'; put 'put ''aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzbmVpbl9tb2FuZGVpX3RpaXNkZWlfd29hbnNkZWlfdG9uZ2Vyc2RlaV9mcmVlZF9zbmVvbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNpX01v''@;'; put 'put ''X1RpX1dvX1RvX0ZyX1NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1N''@;'; put 'put ''IFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hqb2VkIG9tXSBMVCIsbmV4dERheToiW21vYXJuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2p1c3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbXHhmNGZyXHhmYm5lXSBkZGRkIFtvbV0gTFQiLHNhbWVF''@;'; put 'put ''bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9lciAlcyIscGFzdDoiJXMgbHluIixzOiJpbiBwZWFyIHNla29uZGVuIixzczoiJWQgc2Vrb25kZW4iLG06ImllbiBtaW5ceGZhdCIsbW06IiVkIG1pbnV0ZW4iLGg6ImllbiBvZXJlIixoaDoiJWQgb2VyZW4iLGQ6ImllbiBkZWkiLGRk''@;'; put 'put ''OiIlZCBkYWdlbiIsTToiaWVuIG1vYW5uZSIsTU06IiVkIG1vYW5uZW4iLHk6ImllbiBqaWVyIix5eToiJWQgamllcnJlbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbih3KXtyZXR1cm4gdysoMT09PXd8fDg9PT13fHx3Pj0yMD8i''@;'; put 'put ''c3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sOTQxNDM6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJnYSIse21vbnRoczpbIkVhblx4ZTFpciIsIkZlYWJocmEiLCJNXHhlMXJ0YSIsIkFpYnJlXHhl''@;'; put 'put ''MW4iLCJCZWFsdGFpbmUiLCJNZWl0aGVhbWgiLCJJXHhmYWlsIiwiTFx4ZmFuYXNhIiwiTWVceGUxbiBGXHhmM21oYWlyIiwiRGVpcmVhZGggRlx4ZjNtaGFpciIsIlNhbWhhaW4iLCJOb2xsYWlnIl0sbW9udGhzU2hvcnQ6WyJFYW4iLCJGZWFiaCIsIk1ceGUxcnQiLCJBaWIiLCJCZWFsIiwi''@;'; put 'put ''TWVpdGgiLCJJXHhmYWlsIiwiTFx4ZmFuIiwiTS5GLiIsIkQuRi4iLCJTYW1oIiwiTm9sbCJdLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6WyJEXHhlOSBEb21obmFpZ2giLCJEXHhlOSBMdWFpbiIsIkRceGU5IE1ceGUxaXJ0IiwiRFx4ZTkgQ1x4ZTlhZGFvaW4iLCJEXHhlOWFyZGFv''@;'; put 'put ''aW4iLCJEXHhlOSBoQW9pbmUiLCJEXHhlOSBTYXRoYWlybiJdLHdlZWtkYXlzU2hvcnQ6WyJEb21oIiwiTHVhbiIsIk1ceGUxaXJ0IiwiQ1x4ZTlhZCIsIkRceGU5YXIiLCJBb2luZSIsIlNhdGgiXSx3ZWVrZGF5c01pbjpbIkRvIiwiTHUiLCJNXHhlMSIsIkNceGU5IiwiRFx4ZTkiLCJBIiwi''@;'; put 'put ''U2EiXSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJbm5pdSBhZ10g''@;'; put 'put ''TFQiLG5leHREYXk6IltBbVx4ZTFyYWNoIGFnXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FnXSBMVCIsbGFzdERheToiW0lublx4ZTkgYWddIExUIixsYXN0V2VlazoiZGRkZCBbc2VvIGNhaXRlXSBbYWddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpICVzIixwYXN0''@;'; put 'put ''OiIlcyBceGYzIHNoaW4iLHM6ImNceGZhcGxhIHNvaWNpbmQiLHNzOiIlZCBzb2ljaW5kIixtOiJuXHhmM2ltXHhlOWFkIixtbToiJWQgblx4ZjNpbVx4ZTlhZCIsaDoidWFpciBhbiBjaGxvaWciLGhoOiIlZCB1YWlyIGFuIGNobG9pZyIsZDoibFx4ZTEiLGRkOiIlZCBsXHhlMSIsTToibVx4''@;'; put 'put ''ZWQiLE1NOiIlZCBtXHhlZG9ubmEiLHk6ImJsaWFpbiIseXk6IiVkIGJsaWFpbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oTyl7cmV0dXJuIE8rKDE9PT1PPyJkIjpPJTEwPT0yPyJuYSI6Im1oIil9LHdlZWs6e2RvdzoxLGRv''@;'; put 'put ''eTo0fX0pfSh5KDk3NTg2KSl9LDY3MDI4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZ2QiLHttb250aHM6WyJBbSBGYW9pbGxlYWNoIiwiQW4gR2VhcnJhbiIsIkFtIE1ceGUwcnQiLCJBbiBHaWJsZWFuIiwiQW4gQ1x4ZThpdGVh''@;'; put 'put ''biIsIkFuIHQtXHhkMmdtaGlvcyIsIkFuIHQtSXVjaGFyIiwiQW4gTFx4ZjluYXN0YWwiLCJBbiB0LVN1bHRhaW4iLCJBbiBEXHhlMG1oYWlyIiwiQW4gdC1TYW1oYWluIiwiQW4gRFx4ZjliaGxhY2hkIl0sbW9udGhzU2hvcnQ6WyJGYW9pIiwiR2VhciIsIk1ceGUwcnQiLCJHaWJsIiwiQ1x4''@;'; put 'put ''ZThpdCIsIlx4ZDJnbWgiLCJJdWNoIiwiTFx4ZjluIiwiU3VsdCIsIkRceGUwbWgiLCJTYW1oIiwiRFx4ZjliaCJdLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6WyJEaWRceGYybWhuYWljaCIsIkRpbHVhaW4iLCJEaW1ceGUwaXJ0IiwiRGljaWFkYWluIiwiRGlhcmRhb2luIiwiRGlo''@;'; put 'put ''YW9pbmUiLCJEaXNhdGhhaXJuZSJdLHdlZWtkYXlzU2hvcnQ6WyJEaWQiLCJEaWwiLCJEaW0iLCJEaWMiLCJEaWEiLCJEaWgiLCJEaXMiXSx3ZWVrZGF5c01pbjpbIkRceGYyIiwiTHUiLCJNXHhlMCIsIkNpIiwiQXIiLCJIYSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRT''@;'; put 'put ''OiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQW4tZGl1Z2ggYWlnXSBMVCIsbmV4dERheToiW0EtbVx4ZTBpcmVhY2ggYWln''@;'; put 'put ''XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FpZ10gTFQiLGxhc3REYXk6IltBbi1kXHhlOCBhaWddIExUIixsYXN0V2VlazoiZGRkZCBbc2VvIGNoYWlkaF0gW2FpZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImFubiBhbiAlcyIscGFzdDoiYmhvIGNoaW9ubiAlcyIs''@;'; put 'put ''czoiYmVhZ2FuIGRpb2dhbiIsc3M6IiVkIGRpb2dhbiIsbToibWlvbmFpZCIsbW06IiVkIG1pb25haWRlYW4iLGg6InVhaXIiLGhoOiIlZCB1YWlyZWFuIixkOiJsYXRoYSIsZGQ6IiVkIGxhdGhhIixNOiJtXHhlY29zIixNTToiJWQgbVx4ZWNvc2FuIix5OiJibGlhZGhuYSIseXk6IiVkIGJs''@;'; put 'put ''aWFkaG5hIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShkfG5hfG1oKS8sb3JkaW5hbDpmdW5jdGlvbihPKXtyZXR1cm4gTysoMT09PU8/ImQiOk8lMTA9PTI/Im5hIjoibWgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODA0Mjg6ZnVuY3Rpb24odWUsWCx5''@;'; put 'put ''KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJnbCIse21vbnRoczoieGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlvX3h1XHhmMW9feHVsbG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGVjZW1icm8iLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''U2hvcnQ6Inhhbi5fZmViLl9tYXIuX2Fici5fbWFpLl94dVx4ZjEuX3h1bC5fYWdvLl9zZXQuX291dC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRvbWluZ29fbHVuc19tYXJ0ZXNfbVx4ZTlyY29yZXNfeG92ZXNfdmVucmVzX3NceGUxYmFk''@;'; put 'put ''byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9tXHhlOXIuX3hvdi5fdmVuLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tXHhlOV94b192ZV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVG''@;'; put 'put ''b3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4iW2hveGUgIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJceGUxIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFceGUxICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4iZGRkZCBbIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJhIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltvbnRlICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTEiOiJhIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbb10gZGRk''@;'; put 'put ''ZCBbcGFzYWRvICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihnKXtyZXR1cm4gMD09PWcuaW5kZXhPZigidW4iKT8ibiIrZzoiZW4gIitnfSxwYXN0OiJoYWkgJXMiLHM6InVucyBzZWd1''@;'; put 'put ''bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmhhIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFubyIseXk6IiVkIGFub3MifSxkYXlP''@;'; put 'put ''Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw3Njg2MTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCxGKXt2YXIgTz17czpbIlx1''@;'; put 'put ''MDkyNVx1MDk0Ylx1MDkyMVx1MDkyZlx1MDkzZSBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjFcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLCJcdTA5MjVcdTA5NGJcdTA5MjFcdTA5NDcgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxIl0sc3M6W0IrIiBcdTA5MzhcdTA5NDVc''@;'; put 'put ''dTA5MTVcdTA5MDJcdTA5MjFcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLEIrIiBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxtOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5''@;'; put 'put ''M2ZcdTA5MjhcdTA5NDJcdTA5MWYiXSxtbTpbQisiIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsQisiIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkwMiJdLGg6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTNl''@;'; put 'put ''XHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMCJdLGhoOltCKyIgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixCKyIgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTAyIl0sZDpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5M2VcdTA5''@;'; put 'put ''MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTQwXHUwOTM4Il0sZGQ6W0IrIiBcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLEIrIiBcdTA5MjZcdTA5NDBcdTA5MzgiXSxNOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1''@;'; put 'put ''MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGIiXSxNTTpbQisiIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyOFx1MDk0MCIsQisiIFx1MDkyZVx1''@;'; put 'put ''MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0NyJdLHk6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOCJdLHl5OltCKyIgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4''@;'; put 'put ''XHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixCKyIgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTAyIl19O3JldHVybiBGP09bUF1bMF06T1tQXVsxXX1JLmRlZmluZUxvY2FsZSgiZ29tLWRldmEiLHttb250aHM6e3N0YW5kYWxvbmU6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0''@;'; put 'put ''N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MFx1MDkzMl9cdTA5MmVcdTA5''@;'; put 'put ''NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkyZl9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1''@;'; put 'put ''MDkzMF9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLGZvcm1hdDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMw''@;'; put 'put ''XHUwOTQwXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MFx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFcdTA5M2VcdTA5MWFcdTA5NGRc''@;'; put 'put ''dTA5MmZcdTA5M2VfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwXHUwOTMyXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyZVx1MDk0N1x1MDkyZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MWNcdTA5NDJcdTA5MjhcdTA5M2VcdTA5MWFcdTA5NGRc''@;'; put 'put ''dTA5MmZcdTA5M2VfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTJmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJc''@;'; put 'put ''dTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1''@;'; put 'put ''MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2UiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJcdTA5''@;'; put 'put ''MWNcdTA5M2VcdTA5MjhcdTA5NDcuX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MC5fXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5''@;'; put 'put ''NDFcdTA5MzIuX1x1MDkxMVx1MDkxNy5fXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyLl9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMi5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUw''@;'; put 'put ''OTAyLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MDZcdTA5MmZcdTA5MjRcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM1x1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5Mjdc''@;'; put 'put ''dTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTNmXHUwOTMwXHUwOTQ3XHUwOTM4XHUwOTRkXHUwOTI0XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDdcdTA5MjhcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiXHUwOTA2XHUwOTJmXHUwOTI0Ll9cdTA5MzhcdTA5NGJcdTA5MmUuX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMy5fXHUwOTJjXHUwOTQxXHUwOTI3Ll9cdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDdcdTA5MzhcdTA5NGRcdTA5MjQuX1x1MDkzOFx1MDk0MVx1MDkxNVx1''@;'; put 'put ''MDk0ZFx1MDkzMC5fXHUwOTM2XHUwOTQ3XHUwOTI4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTA2X1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0N19cdTA5MzhcdTA5NDFfXHUwOTM2XHUwOTQ3Ii5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTFRTOiJBIGg6bW06c3MgW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLEw6IkRELU1NLVlZWVkiLExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLExMTEw6ImRkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsbGxsbDoiZGRkLCBEIE1N''@;'; put 'put ''TSBZWVlZLCBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkyZlx1MDkxY10gTFQiLG5leHREYXk6IltcdTA5MmJcdTA5M2VcdTA5MzJcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MDJdIExUIixuZXh0V2Vl''@;'; put 'put ''azoiW1x1MDkyYlx1MDk0MVx1MDkyMVx1MDkzMlx1MDk0Yl0gZGRkZFssXSBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzZVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJiXHUwOTNlXHUwOTFmXHUwOTMyXHUwOTRiXSBkZGRkWyxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7''@;'; put 'put ''ZnV0dXJlOiIlcyIscGFzdDoiJXMgXHUwOTA2XHUwOTI2XHUwOTQwXHUwOTAyIixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTA5MzVcdTA5NDdcdTA5MzApLyxvcmRpbmFsOmZ1''@;'; put 'put ''bmN0aW9uKEIsdyl7cmV0dXJuIkQiPT09dz9CKyJcdTA5MzVcdTA5NDdcdTA5MzAiOkJ9LHdlZWs6e2RvdzowLGRveTozfSxtZXJpZGllbVBhcnNlOi9cdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDB8XHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyfFx1MDkyNlx1MDkyOFx1MDky''@;'; put 'put ''YVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMnxcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDcvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihCLHcpe3JldHVybiAxMj09PUImJihCPTApLCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAiPT09dz9CPDQ/QjpCKzEyOiJcdTA5MzhcdTA5MTVcdTA5''@;'; put 'put ''M2VcdTA5MzNcdTA5NDBcdTA5MDIiPT09dz9COiJcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiPT09dz9CPjEyP0I6QisxMjoiXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3Ij09PXc/QisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsdyxQKXty''@;'; put 'put ''ZXR1cm4gQjw0PyJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAiOkI8MTI/Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMiI6QjwxNj8iXHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyIjpCPDIwPyJcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5''@;'; put 'put ''NDciOiJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAifX0pfSh5KDk3NTg2KSl9LDU3NzE4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEIsdyxQLEYpe3ZhciBPPXtzOlsidGhvZGRlYSBzZWtvbmRhbW5pIiwidGhvZGRlIHNla29uZCJdLHNz''@;'; put 'put ''OltCKyIgc2Vrb25kYW1uaSIsQisiIHNla29uZCJdLG06WyJla2EgbWludGFuIiwiZWsgbWludXQiXSxtbTpbQisiIG1pbnRhbW5pIixCKyIgbWludGFtIl0saDpbImVrYSB2b3JhbiIsImVrIHZvciJdLGhoOltCKyIgdm9yYW1uaSIsQisiIHZvcmFtIl0sZDpbImVrYSBkaXNhbiIsImVrIGRp''@;'; put 'put ''cyJdLGRkOltCKyIgZGlzYW1uaSIsQisiIGRpcyJdLE06WyJla2EgbWhvaW5lYW4iLCJlayBtaG9pbm8iXSxNTTpbQisiIG1ob2luZWFtbmkiLEIrIiBtaG9pbmUiXSx5OlsiZWthIHZvcnNhbiIsImVrIHZvcm9zIl0seXk6W0IrIiB2b3JzYW1uaSIsQisiIHZvcnNhbSJdfTtyZXR1cm4gRj9P''@;'; put 'put ''W1BdWzBdOk9bUF1bMV19SS5kZWZpbmVMb2NhbGUoImdvbS1sYXRuIix7bW9udGhzOntzdGFuZGFsb25lOiJKYW5lcl9GZWJyZXJfTWFyc19BYnJpbF9NYWlfSnVuX0p1bGFpX0Fnb3N0X1NldGVtYnJfT3R1YnJfTm92ZW1icl9EZXplbWJyIi5zcGxpdCgiXyIpLGZvcm1hdDoiSmFuZXJhY2hl''@;'; put 'put ''YV9GZWJyZXJhY2hlYV9NYXJzYWNoZWFfQWJyaWxhY2hlYV9NYWlhY2hlYV9KdW5hY2hlYV9KdWxhaWFjaGVhX0Fnb3N0YWNoZWFfU2V0ZW1icmFjaGVhX090dWJyYWNoZWFfTm92ZW1icmFjaGVhX0RlemVtYnJhY2hlYSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovTU1NTShccykrRFtvRF0/L30s''@;'; put 'put ''bW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NYXJzX0Fici5fTWFpX0p1bl9KdWwuX0Fnby5fU2V0Ll9PdHUuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJBaXRhcl9Tb21hcl9Nb25nbGxhcl9CdWRodmFyX0JpcmVzdGFyX1N1a3Jhcl9Tb24ndmFy''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFpdC5fU29tLl9Nb24uX0J1ZC5fQnJlLl9TdWsuX1Nvbi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFpX1NtX01vX0J1X0JyX1N1X1NuIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEg''@;'; put 'put ''aDptbSBbdmF6dGFdIixMVFM6IkEgaDptbTpzcyBbdmF6dGFdIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgQSBoOm1tIFt2YXp0YV0iLExMTEw6ImRkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBbdmF6dGFdIixsbGxsOiJkZGQsIEQgTU1NIFlZ''@;'; put 'put ''WVksIEEgaDptbSBbdmF6dGFdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBaXpdIExUIixuZXh0RGF5OiJbRmFsZWFtXSBMVCIsbmV4dFdlZWs6IltGdWRkbG9dIGRkZGRbLF0gTFQiLGxhc3REYXk6IltLYWxdIExUIixsYXN0V2VlazoiW0ZhdHRsb10gZGRkZFssXSBMVCIsc2FtZUVsc2U6Ikwi''@;'; put 'put ''fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBhc3Q6IiVzIGFkaW0iLHM6XyxzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6XyxkZDpfLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyKS8sb3JkaW5hbDpmdW5jdGlvbihCLHcpe3JldHVybiJE''@;'; put 'put ''Ij09PXc/QisiZXIiOkJ9LHdlZWs6e2RvdzowLGRveTozfSxtZXJpZGllbVBhcnNlOi9yYXRpfHNva2FsbGltfGRvbnBhcmFtfHNhbmplLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oQix3KXtyZXR1cm4gMTI9PT1CJiYoQj0wKSwicmF0aSI9PT13P0I8ND9COkIrMTI6InNva2FsbGltIj09PXc/''@;'; put 'put ''QjoiZG9ucGFyYW0iPT09dz9CPjEyP0I6QisxMjoic2FuamUiPT09dz9CKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPDQ/InJhdGkiOkI8MTI/InNva2FsbGltIjpCPDE2PyJkb25wYXJhbSI6QjwyMD8ic2FuamUiOiJyYXRpIn19KX0oeSg5NzU4NikpfSwy''@;'; put 'put ''NjgyNzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MGFlNyIsMjoiXHUwYWU4IiwzOiJcdTBhZTkiLDQ6Ilx1MGFlYSIsNToiXHUwYWViIiw2OiJcdTBhZWMiLDc6Ilx1MGFlZCIsODoiXHUwYWVlIiw5OiJcdTBhZWYiLDA6Ilx1MGFlNiJ9''@;'; put 'put ''LGc9eyJcdTBhZTciOiIxIiwiXHUwYWU4IjoiMiIsIlx1MGFlOSI6IjMiLCJcdTBhZWEiOiI0IiwiXHUwYWViIjoiNSIsIlx1MGFlYyI6IjYiLCJcdTBhZWQiOiI3IiwiXHUwYWVlIjoiOCIsIlx1MGFlZiI6IjkiLCJcdTBhZTYiOiIwIn07SS5kZWZpbmVMb2NhbGUoImd1Iix7bW9udGhzOiJc''@;'; put 'put ''dTBhOWNcdTBhYmVcdTBhYThcdTBhY2RcdTBhYWZcdTBhYzFcdTBhODZcdTBhYjBcdTBhYzBfXHUwYWFiXHUwYWM3XHUwYWFjXHUwYWNkXHUwYWIwXHUwYWMxXHUwYTg2XHUwYWIwXHUwYWMwX1x1MGFhZVx1MGFiZVx1MGFiMFx1MGFjZFx1MGE5YV9cdTBhOGZcdTBhYWFcdTBhY2RcdTBhYjBc''@;'; put 'put ''dTBhYmZcdTBhYjJfXHUwYWFlXHUwYWM3X1x1MGE5Y1x1MGFjMlx1MGFhOF9cdTBhOWNcdTBhYzFcdTBhYjJcdTBhYmVcdTBhODhfXHUwYTkxXHUwYTk3XHUwYWI4XHUwYWNkXHUwYTlmX1x1MGFiOFx1MGFhYVx1MGFjZFx1MGE5Zlx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMF9cdTBh''@;'; put 'put ''OTFcdTBhOTVcdTBhY2RcdTBhOWZcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYWE4XHUwYWI1XHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGFhMVx1MGFiZlx1MGFiOFx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYTljXHUw''@;'; put 'put ''YWJlXHUwYWE4XHUwYWNkXHUwYWFmXHUwYWMxLl9cdTBhYWJcdTBhYzdcdTBhYWNcdTBhY2RcdTBhYjBcdTBhYzEuX1x1MGFhZVx1MGFiZVx1MGFiMFx1MGFjZFx1MGE5YV9cdTBhOGZcdTBhYWFcdTBhY2RcdTBhYjBcdTBhYmYuX1x1MGFhZVx1MGFjN19cdTBhOWNcdTBhYzJcdTBhYThfXHUw''@;'; put 'put ''YTljXHUwYWMxXHUwYWIyXHUwYWJlLl9cdTBhOTFcdTBhOTcuX1x1MGFiOFx1MGFhYVx1MGFjZFx1MGE5Zlx1MGFjNy5fXHUwYTkxXHUwYTk1XHUwYWNkXHUwYTlmXHUwYWNkLl9cdTBhYThcdTBhYjVcdTBhYzcuX1x1MGFhMVx1MGFiZlx1MGFiOFx1MGFjNy4iLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''UGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwYWIwXHUwYWI1XHUwYWJmXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiOFx1MGFjYlx1MGFhZVx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYWVcdTBhODJcdTBhOTdcdTBhYjNcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWFjXHUwYWMxXHUwYWE3XHUwYWNk''@;'; put 'put ''XHUwYWI1XHUwYWJlXHUwYWIwX1x1MGE5N1x1MGFjMVx1MGFiMFx1MGFjMVx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjZcdTBhYzFcdTBhOTVcdTBhY2RcdTBhYjBcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI2XHUwYWE4XHUwYWJmXHUwYWI1XHUwYWJlXHUwYWIwIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6Ilx1MGFiMFx1MGFiNVx1MGFiZl9cdTBhYjhcdTBhY2JcdTBhYWVfXHUwYWFlXHUwYTgyXHUwYTk3XHUwYWIzX1x1MGFhY1x1MGFjMVx1MGFhN1x1MGFjZF9cdTBhOTdcdTBhYzFcdTBhYjBcdTBhYzFfXHUwYWI2XHUwYWMxXHUwYTk1XHUwYWNkXHUwYWIwX1x1MGFiNlx1MGFh''@;'; put 'put ''OFx1MGFiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwYWIwX1x1MGFiOFx1MGFjYl9cdTBhYWVcdTBhODJfXHUwYWFjXHUwYWMxX1x1MGE5N1x1MGFjMV9cdTBhYjZcdTBhYzFfXHUwYWI2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MGFiNVx1MGFiZVx1''@;'; put 'put ''MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTFRTOiJBIGg6bW06c3MgXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZc''@;'; put 'put ''dTBhYzciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBhODZcdTBhOWNdIExUIixuZXh0RGF5OiJbXHUwYTk1XHUwYWJlXHUwYWIyXHUwYWM3XSBMVCIsbmV4dFdlZWs6''@;'; put 'put ''ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYTk3XHUwYTg3XHUwYTk1XHUwYWJlXHUwYWIyXHUwYWM3XSBMVCIsbGFzdFdlZWs6IltcdTBhYWFcdTBhYmVcdTBhOWJcdTBhYjJcdTBhYmVdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBhYWVcdTBh''@;'; put 'put ''YmUiLHBhc3Q6IiVzIFx1MGFhYVx1MGFiOVx1MGFjN1x1MGFiMlx1MGFiZSIsczoiXHUwYTg1XHUwYWFlXHUwYWMxXHUwYTk1IFx1MGFhYVx1MGFiM1x1MGFjYiIsc3M6IiVkIFx1MGFiOFx1MGFjN1x1MGE5NVx1MGE4Mlx1MGFhMSIsbToiXHUwYThmXHUwYTk1IFx1MGFhZVx1MGFiZlx1MGFh''@;'; put 'put ''OFx1MGFiZlx1MGE5ZiIsbW06IiVkIFx1MGFhZVx1MGFiZlx1MGFhOFx1MGFiZlx1MGE5ZiIsaDoiXHUwYThmXHUwYTk1IFx1MGE5NVx1MGFiMlx1MGFiZVx1MGE5NSIsaGg6IiVkIFx1MGE5NVx1MGFiMlx1MGFiZVx1MGE5NSIsZDoiXHUwYThmXHUwYTk1IFx1MGFhNlx1MGFiZlx1MGFiNVx1''@;'; put 'put ''MGFiOCIsZGQ6IiVkIFx1MGFhNlx1MGFiZlx1MGFiNVx1MGFiOCIsTToiXHUwYThmXHUwYTk1IFx1MGFhZVx1MGFiOVx1MGFiZlx1MGFhOFx1MGFjYiIsTU06IiVkIFx1MGFhZVx1MGFiOVx1MGFiZlx1MGFhOFx1MGFjYiIseToiXHUwYThmXHUwYTk1IFx1MGFiNVx1MGFiMFx1MGFjZFx1MGFi''@;'; put 'put ''NyIseXk6IiVkIFx1MGFiNVx1MGFiMFx1MGFjZFx1MGFiNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBhZTdcdTBhZThcdTBhZTlcdTBhZWFcdTBhZWJcdTBhZWNcdTBhZWRcdTBhZWVcdTBhZWZcdTBhZTZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19''@;'; put 'put ''KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGFiMFx1MGFiZVx1MGFhNHxcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjB8XHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwfFx1MGFi''@;'; put 'put ''OFx1MGFiZVx1MGE4Mlx1MGE5Yy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGFiMFx1MGFiZVx1MGFhNCI9PT1QP3c8ND93OncrMTI6Ilx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMCI9PT1QP3c6Ilx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMCI9''@;'; put 'put ''PT1QP3c+PTEwP3c6dysxMjoiXHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljIj09PVA/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTBhYjBcdTBhYmVcdTBhYTQiOnc8MTA/Ilx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMCI6dzwxNz8iXHUwYWFjXHUw''@;'; put 'put ''YWFhXHUwYWNiXHUwYWIwIjp3PDIwPyJcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMiOiJcdTBhYjBcdTBhYmVcdTBhYTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSwyMTkzNjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2Nh''@;'; put 'put ''bGUoImhlIix7bW9udGhzOiJcdTA1ZDlcdTA1ZTBcdTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWQ1XHUwNWQwXHUwNWU4X1x1MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZDlcdTA1ZGNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVk''@;'; put 'put ''NVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1ZDlfXHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWQ1XHUwNWUxXHUwNWQ4X1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVkZVx1MDVkMVx1MDVlOF9cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZDhcdTA1ZDVcdTA1ZDFcdTA1ZThfXHUwNWUwXHUw''@;'; put 'put ''NWQ1XHUwNWQxXHUwNWRlXHUwNWQxXHUwNWU4X1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVkMVx1MDVlOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNWQ5XHUwNWUwXHUwNWQ1XHUwNWYzX1x1MDVlNFx1MDVkMVx1MDVlOFx1MDVmM19cdTA1ZGVcdTA1ZThcdTA1ZTVfXHUwNWQwXHUwNWU0''@;'; put 'put ''XHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVkMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWRjXHUwNWQ5X1x1MDVkMFx1MDVkNVx1MDVkMlx1MDVmM19cdTA1ZTFcdTA1ZTRcdTA1ZDhcdTA1ZjNfXHUwNWQwXHUwNWQ1XHUwNWU3XHUwNWYzX1x1MDVlMFx1''@;'; put 'put ''MDVkNVx1MDVkMVx1MDVmM19cdTA1ZDNcdTA1ZTZcdTA1ZGVcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDVlOFx1MDVkMFx1MDVlOVx1MDVkNVx1MDVkZl9cdTA1ZTlcdTA1ZTBcdTA1ZDlfXHUwNWU5XHUwNWRjXHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOFx1MDVkMVx1MDVkOVx1''@;'; put 'put ''MDVlMlx1MDVkOV9cdTA1ZDdcdTA1ZGVcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOVx1MDVkMVx1MDVlYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1ZDBcdTA1ZjNfXHUwNWQxXHUwNWYzX1x1MDVkMlx1MDVmM19cdTA1ZDNcdTA1ZjNf''@;'; put 'put ''XHUwNWQ0XHUwNWYzX1x1MDVkNVx1MDVmM19cdTA1ZTlcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDVkMF9cdTA1ZDFfXHUwNWQyX1x1MDVkM19cdTA1ZDRfXHUwNWQ1X1x1MDVlOSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNz''@;'; put 'put ''IixMOiJERC9NTS9ZWVlZIixMTDoiRCBbXHUwNWQxXU1NTU0gWVlZWSIsTExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFtcdTA1ZDFdTU1NTSBZWVlZIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIs''@;'; put 'put ''bGxsbDoiZGRkLCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1ZDRcdTA1ZDlcdTA1ZDVcdTA1ZGQgXHUwNWQxXHUwNWJlXUxUIixuZXh0RGF5OiJbXHUwNWRlXHUwNWQ3XHUwNWU4IFx1MDVkMVx1MDViZV1MVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDVkMVx1MDVl''@;'; put 'put ''OVx1MDVlMlx1MDVkNF0gTFQiLGxhc3REYXk6IltcdTA1ZDBcdTA1ZWFcdTA1ZGVcdTA1ZDVcdTA1ZGMgXHUwNWQxXHUwNWJlXUxUIixsYXN0V2VlazoiW1x1MDVkMVx1MDVkOVx1MDVkNVx1MDVkZF0gZGRkZCBbXHUwNWQ0XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ1XHUwNWRmIFx1MDVkMVx1''@;'; put 'put ''MDVlOVx1MDVlMlx1MDVkNF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDVkMVx1MDVlMlx1MDVkNVx1MDVkMyAlcyIscGFzdDoiXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5ICVzIixzOiJcdTA1ZGVcdTA1ZTFcdTA1ZTRcdTA1ZTggXHUwNWU5XHUwNWUwXHUw''@;'; put 'put ''NWQ5XHUwNWQ1XHUwNWVhIixzczoiJWQgXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWQ1XHUwNWVhIixtOiJcdTA1ZDNcdTA1ZTdcdTA1ZDQiLG1tOiIlZCBcdTA1ZDNcdTA1ZTdcdTA1ZDVcdTA1ZWEiLGg6Ilx1MDVlOVx1MDVlMlx1MDVkNCIsaGg6ZnVuY3Rpb24oZyl7cmV0dXJuIDI9PT1nPyJc''@;'; put 'put ''dTA1ZTlcdTA1ZTJcdTA1ZWFcdTA1ZDlcdTA1ZDlcdTA1ZGQiOmcrIiBcdTA1ZTlcdTA1ZTJcdTA1ZDVcdTA1ZWEifSxkOiJcdTA1ZDlcdTA1ZDVcdTA1ZGQiLGRkOmZ1bmN0aW9uKGcpe3JldHVybiAyPT09Zz8iXHUwNWQ5XHUwNWQ1XHUwNWRlXHUwNWQ5XHUwNWQ5XHUwNWRkIjpnKyIgXHUw''@;'; put 'put ''NWQ5XHUwNWRlXHUwNWQ5XHUwNWRkIn0sTToiXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5IixNTTpmdW5jdGlvbihnKXtyZXR1cm4gMj09PWc/Ilx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVkOVx1MDVkZCI6ZysiIFx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVk''@;'; put 'put ''ZCJ9LHk6Ilx1MDVlOVx1MDVlMFx1MDVkNCIseXk6ZnVuY3Rpb24oZyl7cmV0dXJuIDI9PT1nPyJcdTA1ZTlcdTA1ZTBcdTA1ZWFcdTA1ZDlcdTA1ZDlcdTA1ZGQiOmclMTA9PTAmJjEwIT09Zz9nKyIgXHUwNWU5XHUwNWUwXHUwNWQ0IjpnKyIgXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWRkIn19''@;'; put 'put ''LG1lcmlkaWVtUGFyc2U6L1x1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNnxcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkfFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVk''@;'; put 'put ''OSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTh8XHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxL2ksaXNQTTpm''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4vXihcdTA1ZDBcdTA1ZDdcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxKSQvLnRlc3QoZyl9LG1lcmlkaWVtOmZ1bmN0''@;'; put 'put ''aW9uKGcsQix3KXtyZXR1cm4gZzw1PyJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4IjpnPDEwPyJcdTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOmc8MTI/dz8nXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNic6Ilx1MDVk''@;'; put 'put ''Y1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOmc8MTg/dz8nXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNic6Ilx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1''@;'; put 'put ''ZGQiOiJcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEifX0pfSh5KDk3NTg2KSl9LDMxMzMyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2''@;'; put 'put ''YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sZz17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoi''@;'; put 'put ''OSIsIlx1MDk2NiI6IjAifSxCPVsvXlx1MDkxY1x1MDkyOC9pLC9eXHUwOTJiXHUwOTNjXHUwOTMwfFx1MDkyYlx1MDkzMC9pLC9eXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhL2ksL15cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDgvaSwvXlx1MDkyZVx1MDkwOC9pLC9eXHUw''@;'; put 'put ''OTFjXHUwOTQyXHUwOTI4L2ksL15cdTA5MWNcdTA5NDFcdTA5MzIvaSwvXlx1MDkwNVx1MDkxNy9pLC9eXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyfFx1MDkzOFx1MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzV8XHUwOTI4XHUw''@;'; put 'put ''OTM1XHUwOTAyL2ksL15cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJ8XHUwOTI2XHUwOTNmXHUwOTM4L2ldO0kuZGVmaW5lTG9jYWxlKCJoaSIse21vbnRoczp7Zm9ybWF0OiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQw''@;'; put 'put ''X1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0X1x1''@;'; put 'put ''MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMCIu''@;'; put 'put ''c3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJfXHUwOTJlXHUwOTA4''@;'; put 'put ''X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0X1x1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzBfXHUw''@;'; put 'put ''OTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkyOC5fXHUwOTJiXHUwOTNjXHUwOTMwLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUw''@;'; put 'put ''OTJhXHUwOTRkXHUwOTMwXHUwOTQ4Ll9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMi5fXHUwOTA1XHUwOTE3Ll9cdTA5MzhcdTA5M2ZcdTA5MjQuX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi5fXHUwOTI4XHUwOTM1Ll9cdTA5MjZcdTA5''@;'; put 'put ''M2ZcdTA5MzguIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5MzBcdTA5MzVcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5''@;'; put 'put ''MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiXHUwOTMwXHUwOTM1XHUwOTNmX1x1MDkzOFx1MDk0Ylx1MDkyZV9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJfXHUwOTJjXHUwOTQxXHUwOTI3X1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Ml9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBfXHUwOTM2XHUwOTI4XHUw''@;'; put 'put ''OTNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MzBfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTE3XHUwOTQxX1x1MDkzNlx1MDk0MV9cdTA5MzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3''@;'; put 'put ''IixMVFM6IkEgaDptbTpzcyBcdTA5MmNcdTA5MWNcdTA5NDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDci''@;'; put 'put ''fSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5MzAvaSwvXlx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15c''@;'; put 'put ''dTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1MDkyOC9pLC9eXHUwOTFjXHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzUvaSwvXlx1MDkyNlx1MDkz''@;'; put 'put ''Zlx1MDkzOC9pXSxtb250aHNSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1''@;'; put 'put ''MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4''@;'; put 'put ''fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUw''@;'; put 'put ''OTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVc''@;'; put 'put ''Lj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFj''@;'; put 'put ''XHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUw''@;'; put 'put ''OTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUw''@;'; put 'put ''OTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVc''@;'; put 'put ''dTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkz''@;'; put 'put ''OFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQw''@;'; put 'put ''P3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOD98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUw''@;'; put 'put ''OTI0P3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyND9cLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1''@;'; put 'put ''MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUw''@;'; put 'put ''OTMwPykvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJc''@;'; put 'put ''dTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLGNhbGVuZGFyOntzYW1lRGF5OiJbXHUw''@;'; put 'put ''OTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkxNVx1MDkzMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJhXHUwOTNmXHUwOTFiXHUwOTMyXHUwOTQ3XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2''@;'; put 'put ''ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOTJlXHUwOTQ3XHUwOTAyIixwYXN0OiIlcyBcdTA5MmFcdTA5MzlcdTA5MzJcdTA5NDciLHM6Ilx1MDkxNVx1MDk0MVx1MDkxYiBcdTA5MzlcdTA5NDAgXHUwOTE1XHUwOTRkXHUwOTM3XHUwOTIzIixzczoiJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAy''@;'; put 'put ''XHUwOTIxIixtOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixtbToiJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixoOiJcdTA5MGZcdTA5MTUgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTNlIixoaDoiJWQgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTQ3IixkOiJcdTA5''@;'; put 'put ''MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTI4IixkZDoiJWQgXHUwOTI2XHUwOTNmXHUwOTI4IixNOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTM5XHUwOTQwXHUwOTI4XHUwOTQ3IixNTToiJWQgXHUwOTJlXHUwOTM5XHUwOTQwXHUwOTI4XHUwOTQ3Iix5OiJcdTA5MGZcdTA5MTUgXHUwOTM1''@;'; put 'put ''XHUwOTMwXHUwOTRkXHUwOTM3Iix5eToiJWQgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3In0scHJlcGFyc2U6ZnVuY3Rpb24oRil7cmV0dXJuIEYucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlv''@;'; put 'put ''bihPKXtyZXR1cm4gZ1tPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKEYpe3JldHVybiBGLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIF9bT119KX0sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0fFx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOXxcdTA5MjZcdTA5NGJc''@;'; put 'put ''dTA5MmFcdTA5MzlcdTA5MzB8XHUwOTM2XHUwOTNlXHUwOTJlLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oRixPKXtyZXR1cm4gMTI9PT1GJiYoRj0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0Ij09PU8/Rjw0P0Y6RisxMjoiXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5Ij09PU8/RjoiXHUwOTI2XHUw''@;'; put 'put ''OTRiXHUwOTJhXHUwOTM5XHUwOTMwIj09PU8/Rj49MTA/RjpGKzEyOiJcdTA5MzZcdTA5M2VcdTA5MmUiPT09Tz9GKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oRixPLHope3JldHVybiBGPDQ/Ilx1MDkzMFx1MDkzZVx1MDkyNCI6RjwxMD8iXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5''@;'; put 'put ''IjpGPDE3PyJcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzAiOkY8MjA/Ilx1MDkzNlx1MDkzZVx1MDkyZSI6Ilx1MDkzMFx1MDkzZVx1MDkyNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDkxOTU3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtmdW5jdGlvbiBfKEIsdyxQKXt2YXIgRj1CKyIgIjtzd2l0Y2goUCl7Y2FzZSJzcyI6cmV0dXJuIEYrKDE9PT1CPyJzZWt1bmRhIjoyPT09Qnx8Mz09PUJ8fDQ9PT1CPyJzZWt1bmRlIjoic2VrdW5kaSIpO2Nhc2UibSI6cmV0dXJuIHc/ImplZG5hIG1pbnV0YSI6ImplZG5lIG1pbnV0''@;'; put 'put ''ZSI7Y2FzZSJtbSI6cmV0dXJuIEYrKDE9PT1CPyJtaW51dGEiOjI9PT1CfHwzPT09Qnx8ND09PUI/Im1pbnV0ZSI6Im1pbnV0YSIpO2Nhc2UiaCI6cmV0dXJuIHc/ImplZGFuIHNhdCI6ImplZG5vZyBzYXRhIjtjYXNlImhoIjpyZXR1cm4gRisoMT09PUI/InNhdCI6Mj09PUJ8fDM9PT1CfHw0''@;'; put 'put ''PT09Qj8ic2F0YSI6InNhdGkiKTtjYXNlImRkIjpyZXR1cm4gRisoMT09PUI/ImRhbiI6ImRhbmEiKTtjYXNlIk1NIjpyZXR1cm4gRisoMT09PUI/Im1qZXNlYyI6Mj09PUJ8fDM9PT1CfHw0PT09Qj8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gRisoMT09PUI/ImdvZGlu''@;'; put 'put ''YSI6Mj09PUJ8fDM9PT1CfHw0PT09Qj8iZ29kaW5lIjoiZ29kaW5hIil9fUkuZGVmaW5lTG9jYWxlKCJociIse21vbnRoczp7Zm9ybWF0OiJzaWplXHUwMTBkbmphX3ZlbGphXHUwMTBkZV9vXHUwMTdldWprYV90cmF2bmphX3N2aWJuamFfbGlwbmphX3NycG5qYV9rb2xvdm96YV9ydWpuYV9s''@;'; put 'put ''aXN0b3BhZGFfc3R1ZGVub2dhX3Byb3NpbmNhIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNpamVcdTAxMGRhbmpfdmVsamFcdTAxMGRhX29cdTAxN2V1amFrX3RyYXZhbmpfc3ZpYmFual9saXBhbmpfc3JwYW5qX2tvbG92b3pfcnVqYW5fbGlzdG9wYWRfc3R1ZGVuaV9wcm9zaW5hYyIuc3Bs''@;'; put 'put ''aXQoIl8iKX0sbW9udGhzU2hvcnQ6InNpai5fdmVsai5fb1x1MDE3ZXUuX3RyYS5fc3ZpLl9saXAuX3NycC5fa29sLl9ydWouX2xpcy5fc3R1Ll9wcm8uIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRh''@;'; put 'put ''X1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NIFlZWVkiLExMTDoiRG8gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIERvIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Iltk''@;'; put 'put ''YW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0g''@;'; put 'put ''W3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbcHJvXHUwMTYxbHVd''@;'; put 'put ''IFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIltwcm9cdTAxNjFsdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvXHUwMTYxbGldIGRkZGQg''@;'; put 'put ''W3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDoiZGFuIixkZDpfLE06Im1qZXNlYyIsTU06Xyx5OiJnb2RpbnUiLHl5Ol99LGRheU9mTW9udGhP''@;'; put 'put ''cmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw0ODkyODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89InZhc1x4ZTFybmFwIGhceGU5dGZcdTAxNTFuIGtlZGRlbiBzemVy''@;'; put 'put ''ZFx4ZTFuIGNzXHhmY3RceGY2cnRceGY2a1x4ZjZuIHBceGU5bnRla2VuIHN6b21iYXRvbiIuc3BsaXQoIiAiKTtmdW5jdGlvbiBnKFAsRixPLHope3ZhciBOPVA7c3dpdGNoKE8pe2Nhc2UicyI6cmV0dXJuIHp8fEY/Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmMiOiJuXHhlOWhceGUxbnkg''@;'; put 'put ''bVx4ZTFzb2RwZXJjZSI7Y2FzZSJzcyI6cmV0dXJuIE4rKHp8fEYpPyIgbVx4ZTFzb2RwZXJjIjoiIG1ceGUxc29kcGVyY2UiO2Nhc2UibSI6cmV0dXJuImVneSIrKHp8fEY/IiBwZXJjIjoiIHBlcmNlIik7Y2FzZSJtbSI6cmV0dXJuIE4rKHp8fEY/IiBwZXJjIjoiIHBlcmNlIik7Y2FzZSJo''@;'; put 'put ''IjpyZXR1cm4iZWd5Iisoenx8Rj8iIFx4ZjNyYSI6IiBceGYzclx4ZTFqYSIpO2Nhc2UiaGgiOnJldHVybiBOKyh6fHxGPyIgXHhmM3JhIjoiIFx4ZjNyXHhlMWphIik7Y2FzZSJkIjpyZXR1cm4iZWd5Iisoenx8Rj8iIG5hcCI6IiBuYXBqYSIpO2Nhc2UiZGQiOnJldHVybiBOKyh6fHxGPyIg''@;'; put 'put ''bmFwIjoiIG5hcGphIik7Y2FzZSJNIjpyZXR1cm4iZWd5Iisoenx8Rj8iIGhceGYzbmFwIjoiIGhceGYzbmFwamEiKTtjYXNlIk1NIjpyZXR1cm4gTisoenx8Rj8iIGhceGYzbmFwIjoiIGhceGYzbmFwamEiKTtjYXNlInkiOnJldHVybiJlZ3kiKyh6fHxGPyIgXHhlOXYiOiIgXHhlOXZlIik7''@;'; put 'put ''Y2FzZSJ5eSI6cmV0dXJuIE4rKHp8fEY/IiBceGU5diI6IiBceGU5dmUiKX1yZXR1cm4iIn1mdW5jdGlvbiBCKFApe3JldHVybihQPyIiOiJbbVx4ZmFsdF0gIikrIlsiK19bdGhpcy5kYXkoKV0rIl0gTFRbLWtvcl0ifUkuZGVmaW5lTG9jYWxlKCJodSIse21vbnRoczoiamFudVx4ZTFyX2Zl''@;'; put 'put ''YnJ1XHhlMXJfbVx4ZTFyY2l1c19ceGUxcHJpbGlzX21ceGUxanVzX2pceGZhbml1c19qXHhmYWxpdXNfYXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0XHhmM2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21ceGUxcmMuX1x4ZTFwci5fbVx4''@;'; put 'put ''ZTFqLl9qXHhmYW4uX2pceGZhbC5fYXVnLl9zemVwdC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoidmFzXHhlMXJuYXBfaFx4ZTl0Zlx1MDE1MV9rZWRkX3N6ZXJkYV9jc1x4ZmN0XHhmNnJ0XHhmNmtfcFx4ZTludGVrX3N6b21iYXQi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoidmFzX2hceGU5dF9rZWRkX3N6ZV9jc1x4ZmN0X3BceGU5bl9zem8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InZfaF9rX3N6ZV9jc19wX3N6byIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoi''@;'; put 'put ''WVlZWS5NTS5ERC4iLExMOiJZWVlZLiBNTU1NIEQuIixMTEw6IllZWVkuIE1NTU0gRC4gSDptbSIsTExMTDoiWVlZWS4gTU1NTSBELiwgZGRkZCBIOm1tIn0sbWVyaWRpZW1QYXJzZTovZGV8ZHUvaSxpc1BNOmZ1bmN0aW9uKFApe3JldHVybiJ1Ij09PVAuY2hhckF0KDEpLnRvTG93ZXJDYXNl''@;'; put 'put ''KCl9LG1lcmlkaWVtOmZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gUDwxMj8hMD09PU8/ImRlIjoiREUiOiEwPT09Tz8iZHUiOiJEVSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbWFdIExUWy1rb3JdIixuZXh0RGF5OiJbaG9sbmFwXSBMVFsta29yXSIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''Qi5jYWxsKHRoaXMsITApfSxsYXN0RGF5OiJbdGVnbmFwXSBMVFsta29yXSIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gQi5jYWxsKHRoaXMsITEpfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBtXHhmYWx2YSIscGFzdDoiJXMiLHM6ZyxzczpnLG06ZyxtbTpn''@;'; put 'put ''LGg6ZyxoaDpnLGQ6ZyxkZDpnLE06ZyxNTTpnLHk6Zyx5eTpnfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNTYyMTU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO0kuZGVmaW5lTG9jYWxlKCJoeS1hbSIse21vbnRoczp7Zm9ybWF0OiJcdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwXHUwNTZiX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3''@;'; put 'put ''Zlx1MDU2Yl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNcdTA1NmJfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RcdTA1''@;'; put 'put ''NmJfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkXHUwNTZiX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1''@;'; put 'put ''ODBcdTA1NmJfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2YiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA1NzBcdTA1NzhcdTA1''@;'; put 'put ''ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3Zl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkX1x1MDU3MFx1''@;'; put 'put ''MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZF9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9c''@;'; put 'put ''dTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MCIuc3BsaXQo''@;'; put 'put ''Il8iKX0sbW9udGhzU2hvcnQ6Ilx1MDU3MFx1MDU3Nlx1MDU3ZV9cdTA1ODNcdTA1N2ZcdTA1ODBfXHUwNTc0XHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3YVx1MDU4MF9cdTA1NzRcdTA1NzVcdTA1N2RfXHUwNTcwXHUwNTc2XHUwNTdkX1x1MDU3MFx1MDU2Y1x1MDU3ZF9cdTA1ODVcdTA1NjNc''@;'; put 'put ''dTA1N2RfXHUwNTdkXHUwNTdhXHUwNTdmX1x1MDU3MFx1MDU2Zlx1MDU3Zl9cdTA1NzZcdTA1NzRcdTA1NjJfXHUwNTY0XHUwNTZmXHUwNTdmIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA1NmZcdTA1NmJcdTA1ODBcdTA1NjFcdTA1NmZcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTZmXHUwNTc4''@;'; put 'put ''XHUwNTgyXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzlcdTA1NzhcdTA1ODBcdTA1NjVcdTA1ODRcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTcwXHUwNTZi''@;'; put 'put ''XHUwNTc2XHUwNTYzXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Mlx1MDU2MVx1MDU2OV9cdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjFcdTA1NjkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNTZmXHUwNTgwXHUwNTZmX1x1MDU2NVx1''@;'; put 'put ''MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1ODRfXHUwNTc5XHUwNTgwXHUwNTg0X1x1MDU3MFx1MDU3Nlx1MDU2M19cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJfXHUwNTc3XHUwNTYyXHUwNTY5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA1NmZcdTA1ODBcdTA1NmZfXHUwNTY1XHUw''@;'; put 'put ''NTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIs''@;'; put 'put ''TDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDU2OS4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDU2OS4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1NjFcdTA1NzVcdTA1N2RcdTA1ODVcdTA1ODBd''@;'; put 'put ''IExUIixuZXh0RGF5OiJbXHUwNTdlXHUwNTYxXHUwNTcyXHUwNTY4XSBMVCIsbGFzdERheToiW1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW1x1MDU4NVx1MDU4MFx1MDU2OCBcdTA1NmFcdTA1NjFcdTA1NzRcdTA1NjhdIExU''@;'; put 'put ''In0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW1x1MDU2MVx1MDU3Nlx1MDU4MVx1MDU2MVx1MDU2ZV0gZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA1NzBc''@;'; put 'put ''dTA1NjVcdTA1N2ZcdTA1NzgiLHBhc3Q6IiVzIFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3YiIsczoiXHUwNTc0XHUwNTZiIFx1MDU4NFx1MDU2MVx1MDU3Nlx1MDU2YiBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLHNzOiIlZCBcdTA1N2VcdTA1NjFc''@;'; put 'put ''dTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLG06Ilx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsbW06IiVkIFx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsaDoiXHUwNTZhXHUwNTYxXHUwNTc0IixoaDoiJWQgXHUwNTZhXHUwNTYxXHUwNTc0IixkOiJcdTA1ODVcdTA1ODAi''@;'; put 'put ''LGRkOiIlZCBcdTA1ODVcdTA1ODAiLE06Ilx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIsTU06IiVkIFx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIseToiXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIix5eToiJWQgXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIn0sbWVyaWRpZW1QYXJzZTovXHUw''@;'; put 'put ''NTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxfFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MXxcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjF8XHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUw''@;'; put 'put ''NTc1XHUwNTYxXHUwNTc2Lyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybi9eKFx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYpJC8udGVzdChnKX0sbWVyaWRpZW06ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIGc8ND8iXHUwNTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxIjpnPDEyPyJcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2VcdTA1NzhcdTA1N2ZcdTA1N2VcdTA1NjEiOmc8MTc/Ilx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MSI6''@;'; put 'put ''Ilx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3NiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn18XGR7MSwyfS0oXHUwNTZiXHUwNTc2fFx1MDU4MFx1MDU2NCkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJEREQiOmNh''@;'; put 'put ''c2UidyI6Y2FzZSJXIjpjYXNlIkRERG8iOnJldHVybiAxPT09Zz9nKyItXHUwNTZiXHUwNTc2IjpnKyItXHUwNTgwXHUwNTY0IjtkZWZhdWx0OnJldHVybiBnfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNTg2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaWQiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJf''@;'; put 'put ''TWVpX0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmluX1NlbGFzYV9SYWJ1X0thbWlzX0p1bWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYiIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQg''@;'; put 'put ''TU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJwYWdpIj09PUI/Zzoic2lhbmciPT09Qj9nPj0xMT9nOmcrMTI6InNvcmUiPT09Qnx8Im1h''@;'; put 'put ''bGFtIj09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMT8icGFnaSI6ZzwxNT8ic2lhbmciOmc8MTk/InNvcmUiOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbQmVzb2sgcHVrdWxdIExU''@;'; put 'put ''IixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsYWx1IHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGFsdSIsczoiYmViZXJh''@;'; put 'put ''cGEgZGV0aWsiLHNzOiIlZCBkZXRpayIsbToic2VtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MCxkb3k6''@;'; put 'put ''Nn19KX0oeSg5NzU4NikpfSw5MDIxMTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyh3KXtyZXR1cm4gdyUxMDA9PTExfHx3JTEwIT0xfWZ1bmN0aW9uIGcodyxQLEYsTyl7dmFyIHo9dysiICI7c3dpdGNoKEYpe2Nhc2UicyI6cmV0dXJuIFB8''@;'; put 'put ''fE8/Im5va2tyYXIgc2VrXHhmYW5kdXIiOiJub2trcnVtIHNla1x4ZmFuZHVtIjtjYXNlInNzIjpyZXR1cm4gXyh3KT96KyhQfHxPPyJzZWtceGZhbmR1ciI6InNla1x4ZmFuZHVtIik6eisic2VrXHhmYW5kYSI7Y2FzZSJtIjpyZXR1cm4gUD8ibVx4ZWRuXHhmYXRhIjoibVx4ZWRuXHhmYXR1''@;'; put 'put ''IjtjYXNlIm1tIjpyZXR1cm4gXyh3KT96KyhQfHxPPyJtXHhlZG5ceGZhdHVyIjoibVx4ZWRuXHhmYXR1bSIpOlA/eisibVx4ZWRuXHhmYXRhIjp6KyJtXHhlZG5ceGZhdHUiO2Nhc2UiaGgiOnJldHVybiBfKHcpP3orKFB8fE8/ImtsdWtrdXN0dW5kaXIiOiJrbHVra3VzdHVuZHVtIik6eisi''@;'; put 'put ''a2x1a2t1c3R1bmQiO2Nhc2UiZCI6cmV0dXJuIFA/ImRhZ3VyIjpPPyJkYWciOiJkZWdpIjtjYXNlImRkIjpyZXR1cm4gXyh3KT9QP3orImRhZ2FyIjp6KyhPPyJkYWdhIjoiZFx4ZjZndW0iKTpQP3orImRhZ3VyIjp6KyhPPyJkYWciOiJkZWdpIik7Y2FzZSJNIjpyZXR1cm4gUD8ibVx4ZTFu''@;'; put 'put ''dVx4ZjB1ciI6Tz8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51XHhmMGkiO2Nhc2UiTU0iOnJldHVybiBfKHcpP1A/eisibVx4ZTFudVx4ZjBpciI6eisoTz8ibVx4ZTFudVx4ZjBpIjoibVx4ZTFudVx4ZjB1bSIpOlA/eisibVx4ZTFudVx4ZjB1ciI6eisoTz8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51''@;'; put 'put ''XHhmMGkiKTtjYXNlInkiOnJldHVybiBQfHxPPyJceGUxciI6Ilx4ZTFyaSI7Y2FzZSJ5eSI6cmV0dXJuIF8odyk/eisoUHx8Tz8iXHhlMXIiOiJceGUxcnVtIik6eisoUHx8Tz8iXHhlMXIiOiJceGUxcmkiKX19SS5kZWZpbmVMb2NhbGUoImlzIix7bW9udGhzOiJqYW5ceGZhYXJfZmViclx4''@;'; put 'put ''ZmFhcl9tYXJzX2Fwclx4ZWRsX21hXHhlZF9qXHhmYW5ceGVkX2pceGZhbFx4ZWRfXHhlMWdceGZhc3Rfc2VwdGVtYmVyX29rdFx4ZjNiZXJfblx4ZjN2ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYVx4ZWRfalx4ZmFuX2pceGZhbF9c''@;'; put 'put ''eGUxZ1x4ZmFfc2VwX29rdF9uXHhmM3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbnVkYWd1cl9ceGZlcmlceGYwanVkYWd1cl9taVx4ZjB2aWt1ZGFndXJfZmltbXR1ZGFndXJfZlx4ZjZzdHVkYWd1cl9sYXVnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1Nob3J0OiJzdW5fbVx4ZTFuX1x4ZmVyaV9taVx4ZjBfZmltX2ZceGY2c19sYXUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01ceGUxX1x4ZGVyX01pX0ZpX0ZceGY2X0xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5Z''@;'; put 'put ''WVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhlZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4ZTEgbW9yZ3VuIGtsLl0gTFQiLG5leHRX''@;'; put 'put ''ZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbXHhlZCBnXHhlNnIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBhc3RhXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlZnRpciAlcyIscGFzdDoiZnlyaXIgJXMgc1x4ZWRceGYwYW4i''@;'; put 'put ''LHM6ZyxzczpnLG06ZyxtbTpnLGg6ImtsdWtrdXN0dW5kIixoaDpnLGQ6ZyxkZDpnLE06ZyxNTTpnLHk6Zyx5eTpnfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMjIzNDA6ZnVuY3Rpb24o''@;'; put 'put ''dWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJpdC1jaCIse21vbnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVuZXJkXHhlY19zYWJhdG8iLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZ''@;'; put 'put ''IixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW09nZ2kgYWxsZV0gTFQiLG5leHREYXk6IltEb21hbmkgYWxsZV0gTFQiLG5leHRXZWVrOiJkZGRkIFthbGxlXSBMVCIsbGFz''@;'; put 'put ''dERheToiW0llcmkgYWxsZV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpPyJbbGEgc2NvcnNhXSBkZGRkIFthbGxlXSBMVCI6IltsbyBzY29yc29dIGRkZGQgW2FsbGVdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4oL15bMC05XS4rJC8udGVzdChnKT8idHJhIjoiaW4iKSsiICIrZ30scGFzdDoiJXMgZmEiLHM6ImFsY3VuaSBzZWNvbmRpIixzczoiJWQgc2Vjb25kaSIsbToidW4gbWludXRvIixtbToiJWQgbWludXRpIixoOiJ1bidvcmEiLGhoOiIlZCBvcmUiLGQ6InVuIGdpb3JubyIs''@;'; put 'put ''ZGQ6IiVkIGdpb3JuaSIsTToidW4gbWVzZSIsTU06IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIlZCBhbm5pIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNzAxNzA6ZnVuY3Rp''@;'; put 'put ''b24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJpdCIse21vbnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVuZXJkXHhlY19zYWJhdG8iLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZ''@;'; put 'put ''IixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbT2dnaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJs''@;'; put 'put ''bCciKSsiXUxUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbRG9tYW5pIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAi''@;'; put 'put ''OjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbSWVyaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMu''@;'; put 'put ''ZGF5KCk/IltMYSBzY29yc2FdIGRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQiOiJbTG8gc2NvcnNvXSBkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0s''@;'; put 'put ''c2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToidHJhICVzIixwYXN0OiIlcyBmYSIsczoiYWxjdW5pIHNlY29uZGkiLHNzOiIlZCBzZWNvbmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6InVuJ29yYSIsaGg6IiVkIG9yZSIsZDoidW4gZ2lvcm5vIixkZDoiJWQg''@;'; put 'put ''Z2lvcm5pIix3OiJ1bmEgc2V0dGltYW5hIix3dzoiJWQgc2V0dGltYW5lIixNOiJ1biBtZXNlIixNTToiJWQgbWVzaSIseToidW4gYW5ubyIseXk6IiVkIGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''NH19KX0oeSg5NzU4NikpfSwzOTc3MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImphIix7ZXJhczpbe3NpbmNlOiIyMDE5LTA1LTAxIixvZmZzZXQ6MSxuYW1lOiJcdTRlZTRcdTU0OGMiLG5hcnJvdzoiXHUzMmZmIixhYmJyOiJS''@;'; put 'put ''In0se3NpbmNlOiIxOTg5LTAxLTA4Iix1bnRpbDoiMjAxOS0wNC0zMCIsb2Zmc2V0OjEsbmFtZToiXHU1ZTczXHU2MjEwIixuYXJyb3c6Ilx1MzM3YiIsYWJicjoiSCJ9LHtzaW5jZToiMTkyNi0xMi0yNSIsdW50aWw6IjE5ODktMDEtMDciLG9mZnNldDoxLG5hbWU6Ilx1NjYyZFx1NTQ4YyIs''@;'; put 'put ''bmFycm93OiJcdTMzN2MiLGFiYnI6IlMifSx7c2luY2U6IjE5MTItMDctMzAiLHVudGlsOiIxOTI2LTEyLTI0IixvZmZzZXQ6MSxuYW1lOiJcdTU5MjdcdTZiNjMiLG5hcnJvdzoiXHUzMzdkIixhYmJyOiJUIn0se3NpbmNlOiIxODczLTAxLTAxIix1bnRpbDoiMTkxMi0wNy0yOSIsb2Zmc2V0''@;'; put 'put ''OjYsbmFtZToiXHU2NjBlXHU2Y2JiIixuYXJyb3c6Ilx1MzM3ZSIsYWJicjoiTSJ9LHtzaW5jZToiMDAwMS0wMS0wMSIsdW50aWw6IjE4NzMtMTItMzEiLG9mZnNldDoxLG5hbWU6Ilx1ODk3Zlx1NjZhNiIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTItMzEiLHVudGls''@;'; put 'put ''Oi0xLzAsb2Zmc2V0OjEsbmFtZToiXHU3ZDAwXHU1MTQzXHU1MjRkIixuYXJyb3c6IkJDIixhYmJyOiJCQyJ9XSxlcmFZZWFyT3JkaW5hbFJlZ2V4Oi8oXHU1MTQzfFxkKylcdTVlNzQvLGVyYVllYXJPcmRpbmFsUGFyc2U6ZnVuY3Rpb24oZyxCKXtyZXR1cm4iXHU1MTQzIj09PUJbMV0/MTpw''@;'; put 'put ''YXJzZUludChCWzFdfHxnLDEwKX0sbW9udGhzOiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2''@;'; put 'put ''NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjVlNVx1NjZkY1x1NjVlNV9cdTY3MDhcdTY2ZGNcdTY1ZTVfXHU3MDZiXHU2NmRjXHU2NWU1''@;'; put 'put ''X1x1NmMzNFx1NjZkY1x1NjVlNV9cdTY3MjhcdTY2ZGNcdTY1ZTVfXHU5MWQxXHU2NmRjXHU2NWU1X1x1NTcxZlx1NjZkY1x1NjVlNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTY1ZTVfXHU2NzA4X1x1NzA2Yl9cdTZjMzRfXHU2NzI4X1x1OTFkMV9cdTU3MWYiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46Ilx1NjVlNV9cdTY3MDhfXHU3MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQxX1x1NTcxZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6''@;'; put 'put ''IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IGRkZGQgSEg6bW0iLGw6IllZWVkvTU0vREQiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZ''@;'; put 'put ''WVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUoZGRkKSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTM0OFx1NTI0ZHxcdTUzNDhcdTVmOGMvaSxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJcdTUzNDhcdTVmOGMiPT09Z30sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyPyJcdTUz''@;'; put 'put ''NDhcdTUyNGQiOiJcdTUzNDhcdTVmOGMifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NjVlNV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTY1ZTVdIExUIixuZXh0V2VlazpmdW5jdGlvbihnKXtyZXR1cm4gZy53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1Njc2NVx1OTAzMV1kZGRkIExU''@;'; put 'put ''IjoiZGRkZCBMVCJ9LGxhc3REYXk6IltcdTY2MjhcdTY1ZTVdIExUIixsYXN0V2VlazpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1nLndlZWsoKT8iW1x1NTE0OFx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov''@;'; put 'put ''XGR7MSwyfVx1NjVlNS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlInkiOnJldHVybiAxPT09Zz8iXHU1MTQzXHU1ZTc0IjpnKyJcdTVlNzQiO2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGcrIlx1NjVlNSI7ZGVmYXVsdDpyZXR1cm4gZ319LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOiIlc1x1NWY4YyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NjU3MFx1NzlkMiIsc3M6IiVkXHU3OWQyIixtOiIxXHU1MjA2IixtbToiJWRcdTUyMDYiLGg6IjFcdTY2NDJcdTk1OTMiLGhoOiIlZFx1NjY0Mlx1OTU5MyIsZDoiMVx1NjVlNSIsZGQ6IiVkXHU2NWU1IixNOiIx''@;'; put 'put ''XHUzMGY2XHU2NzA4IixNTToiJWRcdTMwZjZcdTY3MDgiLHk6IjFcdTVlNzQiLHl5OiIlZFx1NWU3NCJ9fSl9KHkoOTc1ODYpKX0sNzM4NzU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJqdiIse21vbnRoczoiSmFudWFyaV9GZWJy''@;'; put 'put ''dWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm9wZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzOiJNaW5nZ3VfU2VuZW5fU2Vsb3NvX1JlYnVfS2VtaXNfSmVtdXdhaF9TZXB0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1NlbF9SZWJfS2VtX0plbV9TZXAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1NuX1NsX1JiX0ttX0ptX1NwIi5zcGxpdCgiXyIpLGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZW5qaW5n''@;'; put 'put ''fHNpeWFuZ3xzb250ZW58bmRhbHUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJlbmppbmciPT09Qj9nOiJzaXlhbmciPT09Qj9nPj0xMT9nOmcrMTI6InNvbnRlbiI9PT1CfHwibmRhbHUiPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rp''@;'; put 'put ''b24oZyxCLHcpe3JldHVybiBnPDExPyJlbmppbmciOmc8MTU/InNpeWFuZyI6ZzwxOT8ic29udGVuIjoibmRhbHUifSxjYWxlbmRhcjp7c2FtZURheToiW0RpbnRlbiBwdW5pa28gcHVrdWxdIExUIixuZXh0RGF5OiJbTWJlbmphbmcgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxd''@;'; put 'put ''IExUIixsYXN0RGF5OiJbS2FsYSB3aW5naSBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtrZXBlbmdrZXIgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ3b250ZW4gaW5nICVzIixwYXN0OiIlcyBpbmdrYW5nIGtlcGVuZ2tlciIsczoic2F3ZXRhd2lz''@;'; put 'put ''IGRldGlrIixzczoiJWQgZGV0aWsiLG06InNldHVuZ2dhbCBtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZXR1bmdnYWwgamFtIixoaDoiJWQgamFtIixkOiJzZWRpbnRlbiIsZGQ6IiVkIGRpbnRlbiIsTToic2V3dWxhbiIsTU06IiVkIHd1bGFuIix5OiJzZXRhdW4iLHl5OiIlZCB0YXVuIn0s''@;'; put 'put ''d2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNzk0OTk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJrYSIse21vbnRoczoiXHUxMGQ4XHUxMGQwXHUxMGRjXHUxMGQ1XHUxMGQwXHUxMGUwXHUxMGQ4X1x1MTBkN1x1MTBk''@;'; put 'put ''NFx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkNVx1MTBkMFx1MTBkYVx1MTBkOF9cdTEwZGJcdTEwZDBcdTEwZTBcdTEwZTJcdTEwZDhfXHUxMGQwXHUxMGRlXHUxMGUwXHUxMGQ4XHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNcdTEw''@;'; put 'put ''ZDhcdTEwZTFcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRhXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkMFx1MTBkMlx1MTBkNVx1MTBkOFx1MTBlMVx1MTBlMlx1MTBkZF9cdTEwZTFcdTEwZDRcdTEwZTVcdTEwZTJcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRkXHUx''@;'; put 'put ''MGU1XHUxMGUyXHUxMGRkXHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkY1x1MTBkZFx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZDNcdTEwZDRcdTEwZDlcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDgiLnNwbGl0KCJfIiksbW9u''@;'; put 'put ''dGhzU2hvcnQ6Ilx1MTBkOFx1MTBkMFx1MTBkY19cdTEwZDdcdTEwZDRcdTEwZDFfXHUxMGRiXHUxMGQwXHUxMGUwX1x1MTBkMFx1MTBkZVx1MTBlMF9cdTEwZGJcdTEwZDBcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjX1x1MTBkOFx1MTBkNVx1MTBkYV9cdTEwZDBcdTEwZDJcdTEwZDVfXHUx''@;'; put 'put ''MGUxXHUxMGQ0XHUxMGU1X1x1MTBkZFx1MTBlNVx1MTBlMl9cdTEwZGNcdTEwZGRcdTEwZDRfXHUxMGQzXHUxMGQ0XHUxMGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntzdGFuZGFsb25lOiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUx''@;'; put 'put ''MGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUx''@;'; put 'put ''MGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBkOF9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDgiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBc''@;'; put 'put ''dTEwZTFfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFf''@;'; put 'put ''XHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBlMV9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTEiLnNwbGl0KCJfIiksaXNGb3Jt''@;'; put 'put ''YXQ6LyhcdTEwZWNcdTEwZDhcdTEwZGNcdTEwZDB8XHUxMGU4XHUxMGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQyKS99LHdlZWtkYXlzU2hvcnQ6Ilx1MTBkOVx1MTBkNVx1MTBkOF9cdTEwZGRcdTEwZTBcdTEwZThfXHUxMGUxXHUxMGQwXHUxMGRiX1x1MTBkZFx1MTBkN1x1MTBlZV9cdTEw''@;'; put 'put ''ZWVcdTEwZTNcdTEwZDdfXHUxMGRlXHUxMGQwXHUxMGUwX1x1MTBlOFx1MTBkMFx1MTBkMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMGQ5XHUxMGQ1X1x1MTBkZFx1MTBlMF9cdTEwZTFcdTEwZDBfXHUxMGRkXHUxMGQ3X1x1MTBlZVx1MTBlM19cdTEwZGVcdTEwZDBfXHUxMGU4XHUx''@;'; put 'put ''MGQwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToi''@;'; put 'put ''W1x1MTBkM1x1MTBlNlx1MTBkNFx1MTBlMV0gTFRbLVx1MTBkNlx1MTBkNF0iLG5leHREYXk6IltcdTEwZWVcdTEwZDVcdTEwZDBcdTEwZGFdIExUWy1cdTEwZDZcdTEwZDRdIixsYXN0RGF5OiJbXHUxMGQyXHUxMGUzXHUxMGU4XHUxMGQ4XHUxMGRjXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4''@;'; put 'put ''dFdlZWs6IltcdTEwZThcdTEwZDRcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZDJdIGRkZGQgTFRbLVx1MTBkNlx1MTBkNF0iLGxhc3RXZWVrOiJbXHUxMGVjXHUxMGQ4XHUxMGRjXHUxMGQwXSBkZGRkIExULVx1MTBkNlx1MTBkNCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpm''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gZy5yZXBsYWNlKC8oXHUxMGVjXHUxMGQwXHUxMGRifFx1MTBlY1x1MTBlM1x1MTBkN3xcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDd8XHUxMGVjXHUxMGQ0XHUxMGRhfFx1MTBkM1x1MTBlNnxcdTEwZDdcdTEwZDUpKFx1MTBkOHxcdTEwZDQpLyxmdW5jdGlvbihC''@;'; put 'put ''LHcsUCl7cmV0dXJuIlx1MTBkOCI9PT1QP3crIlx1MTBlOFx1MTBkOCI6dytQKyJcdTEwZThcdTEwZDgifSl9LHBhc3Q6ZnVuY3Rpb24oZyl7cmV0dXJuLyhcdTEwZWNcdTEwZDBcdTEwZGJcdTEwZDh8XHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1''@;'; put 'put ''MTBkOHxcdTEwZDNcdTEwZTZcdTEwZDR8XHUxMGQ3XHUxMGQ1XHUxMGQ0KS8udGVzdChnKT9nLnJlcGxhY2UoLyhcdTEwZDh8XHUxMGQ0KSQvLCJcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6L1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOC8udGVzdChnKT9nLnJlcGxhY2UoL1x1''@;'; put 'put ''MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCQvLCJcdTEwZWNcdTEwZGFcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6Z30sczoiXHUxMGUwXHUxMGQwXHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGRjXHUxMGQ4XHUxMGRiXHUxMGQ0IFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsc3M6IiVk''@;'; put 'put ''IFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsbToiXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixtbToiJWQgXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixoOiJcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGhoOiIlZCBcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGQ6''@;'; put 'put ''Ilx1MTBkM1x1MTBlNlx1MTBkNCIsZGQ6IiVkIFx1MTBkM1x1MTBlNlx1MTBkNCIsTToiXHUxMGQ3XHUxMGQ1XHUxMGQ0IixNTToiJWQgXHUxMGQ3XHUxMGQ1XHUxMGQ0Iix5OiJcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgiLHl5OiIlZCBcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgifSxkYXlP''@;'; put 'put ''Zk1vbnRoT3JkaW5hbFBhcnNlOi8wfDEtXHUxMGRhXHUxMGQ4fFx1MTBkYlx1MTBkNC1cZHsxLDJ9fFxkezEsMn0tXHUxMGQ0LyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3JldHVybiAwPT09Zz9nOjE9PT1nP2crIi1cdTEwZGFcdTEwZDgiOmc8MjB8fGc8PTEwMCYmZyUyMD09MHx8ZyUxMDA9PTA/''@;'; put 'put ''Ilx1MTBkYlx1MTBkNC0iK2c6ZysiLVx1MTBkNCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDkzNTczOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MDoiLVx1MDQ0OFx1MDQ1NiIsMToiLVx1MDQ0OFx1MDQ1NiIsMjoiLVx1MDQ0''@;'; put 'put ''OFx1MDQ1NiIsMzoiLVx1MDQ0OFx1MDQ1NiIsNDoiLVx1MDQ0OFx1MDQ1NiIsNToiLVx1MDQ0OFx1MDQ1NiIsNjoiLVx1MDQ0OFx1MDQ0YiIsNzoiLVx1MDQ0OFx1MDQ1NiIsODoiLVx1MDQ0OFx1MDQ1NiIsOToiLVx1MDQ0OFx1MDQ0YiIsMTA6Ii1cdTA0NDhcdTA0NGIiLDIwOiItXHUwNDQ4''@;'; put 'put ''XHUwNDRiIiwzMDoiLVx1MDQ0OFx1MDQ0YiIsNDA6Ii1cdTA0NDhcdTA0NGIiLDUwOiItXHUwNDQ4XHUwNDU2Iiw2MDoiLVx1MDQ0OFx1MDQ0YiIsNzA6Ii1cdTA0NDhcdTA0NTYiLDgwOiItXHUwNDQ4XHUwNDU2Iiw5MDoiLVx1MDQ0OFx1MDQ0YiIsMTAwOiItXHUwNDQ4XHUwNDU2In07SS5k''@;'; put 'put ''ZWZpbmVMb2NhbGUoImtrIix7bW9udGhzOiJcdTA0OWJcdTA0MzBcdTA0YTNcdTA0NDJcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDliXHUwNDNmXHUwNDMwXHUwNDNkX1x1MDQzZFx1MDQzMFx1MDQ0M1x1MDQ0MFx1MDQ0Ylx1MDQzN19cdTA0NDFcdTA0ZDlcdTA0NDNcdTA0NTZcdTA0NDBfXHUw''@;'; put 'put ''NDNjXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQ0M1x1MDQ0MVx1MDQ0Ylx1MDQzY19cdTA0NDhcdTA0NTZcdTA0M2JcdTA0MzRcdTA0MzVfXHUwNDQyXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDM3X1x1MDQ5Ylx1MDQ0Ylx1MDQ0MFx1MDQzYVx1MDRhZlx1MDQzOVx1''@;'; put 'put ''MDQzNVx1MDQzYV9cdTA0OWJcdTA0MzBcdTA0MzdcdTA0MzBcdTA0M2RfXHUwNDliXHUwNDMwXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDMwX1x1MDQzNlx1MDQzNVx1MDQzYlx1MDQ0Mlx1MDQzZVx1MDQ5Ylx1MDQ0MVx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDli''@;'; put 'put ''XHUwNDMwXHUwNGEzX1x1MDQzMFx1MDQ5Ylx1MDQzZl9cdTA0M2RcdTA0MzBcdTA0NDNfXHUwNDQxXHUwNGQ5XHUwNDQzX1x1MDQzY1x1MDQzMFx1MDQzY19cdTA0M2NcdTA0MzBcdTA0NDNfXHUwNDQ4XHUwNDU2XHUwNDNiX1x1MDQ0Mlx1MDQzMFx1MDQzY19cdTA0OWJcdTA0NGJcdTA0NDBf''@;'; put 'put ''XHUwNDliXHUwNDMwXHUwNDM3X1x1MDQ5Ylx1MDQzMFx1MDQ0MF9cdTA0MzZcdTA0MzVcdTA0M2IiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzNlx1MDQzNVx1MDQzYVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzRcdTA0YWZcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2Rc''@;'; put 'put ''dTA0MzFcdTA0NTZfXHUwNDQxXHUwNDM1XHUwNDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQ0MVx1MDRkOVx1MDQ0MFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDM2''@;'; put 'put ''XHUwNGIxXHUwNDNjXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1NiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzZcdTA0MzVcdTA0M2FfXHUwNDM0XHUwNGFmXHUwNDM5X1x1MDQ0MVx1MDQzNVx1MDQzOV9cdTA0NDFcdTA0ZDlcdTA0NDBfXHUwNDMxXHUwNDM1''@;'; put 'put ''XHUwNDM5X1x1MDQzNlx1MDRiMVx1MDQzY19cdTA0NDFcdTA0MzVcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzNlx1MDQzYV9cdTA0MzRcdTA0MzlfXHUwNDQxXHUwNDM5X1x1MDQ0MVx1MDQ0MF9cdTA0MzFcdTA0MzlfXHUwNDM2XHUwNDNjX1x1MDQ0MVx1MDQzZCIuc3Bs''@;'; put 'put ''aXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFc''@;'; put 'put ''dTA0YWZcdTA0MzNcdTA0NTZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbmV4dERheToiW1x1MDQxNVx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMw''@;'; put 'put ''XHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDQzNVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0''@;'; put 'put ''M2RcdTA0NGJcdTA0YTNdIGRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQ1Nlx1MDQ0OFx1MDQ1Nlx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDMxXHUwNGIxXHUwNDQwXHUw''@;'; put 'put ''NDRiXHUwNDNkIixzOiJcdTA0MzFcdTA0NTZcdTA0NDBcdTA0M2RcdTA0MzVcdTA0NDhcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUw''@;'; put 'put ''NDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixkOiJc''@;'; put 'put ''dTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNkIixNOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5''@;'; put 'put ''eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQ4XHUwNDU2fFx1MDQ0OFx1MDQ0YikvLG9yZGluYWw6ZnVuY3Rpb24oQil7cmV0dXJuIEIrKF9bQl18fF9bQiUxMF18fF9bQj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2Rvdzox''@;'; put 'put ''LGRveTo3fX0pfSh5KDk3NTg2KSl9LDY4ODA3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUxN2UxIiwyOiJcdTE3ZTIiLDM6Ilx1MTdlMyIsNDoiXHUxN2U0Iiw1OiJcdTE3ZTUiLDY6Ilx1MTdlNiIsNzoiXHUxN2U3Iiw4OiJcdTE3ZTgi''@;'; put 'put ''LDk6Ilx1MTdlOSIsMDoiXHUxN2UwIn0sZz17Ilx1MTdlMSI6IjEiLCJcdTE3ZTIiOiIyIiwiXHUxN2UzIjoiMyIsIlx1MTdlNCI6IjQiLCJcdTE3ZTUiOiI1IiwiXHUxN2U2IjoiNiIsIlx1MTdlNyI6IjciLCJcdTE3ZTgiOiI4IiwiXHUxN2U5IjoiOSIsIlx1MTdlMCI6IjAifTtJLmRlZmlu''@;'; put 'put ''ZUxvY2FsZSgia20iLHttb250aHM6Ilx1MTc5OFx1MTc4MFx1MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3OTdcdTE3YzhfXHUxNzk4XHUxN2I4XHUxNzkzXHUxN2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4''@;'; put 'put ''XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUxN2I2X1x1MTc4MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZcdTE3YjhcdTE3YTBcdTE3YjZfXHUxNzgwXHUxNzg5XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3''@;'; put 'put ''ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBcdTE3YjZfXHUxNzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTE3OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1MTdiOFx1MTc5M1x1''@;'; put 'put ''MTdiNl9cdTE3OThcdTE3YzFcdTE3OWZcdTE3YjZfXHUxN2E3XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdiN1x1MTc5MFx1MTdiYlx1MTc5M1x1MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2X1x1MTc4MFx1MTc4''@;'; put 'put ''OVx1MTdkMlx1MTc4OVx1MTdiNl9cdTE3OGZcdTE3YmJcdTE3OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUxN2QyXHUxNzg2XHUxN2I3XHUxNzgwXHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxN2EyXHUxN2I2XHUxNzkxXHUxN2I3''@;'; put 'put ''XHUxNzhmXHUxN2QyXHUxNzk5X1x1MTc4NVx1MTdkMFx1MTc5M1x1MTdkMlx1MTc5MV9cdTE3YTJcdTE3ODRcdTE3ZDJcdTE3ODJcdTE3YjZcdTE3OWFfXHUxNzk2XHUxN2JiXHUxNzkyX1x1MTc5Nlx1MTdkMlx1MTc5YVx1MTdhMFx1MTc5Zlx1MTdkMlx1MTc5NFx1MTc4Zlx1MTdiN1x1MTdj''@;'; put 'put ''ZF9cdTE3OWZcdTE3YmJcdTE3ODBcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2M1XHUxNzlhXHUxN2NkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c01pbjoiXHUxN2EyXHUxN2I2X1x1MTc4NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YmJfXHUxNzlmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNz''@;'; put 'put ''IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwfFx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4''@;'; put 'put ''NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwIjoiXHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzNcdTE3OTNcdTE3YzFcdTE3YzcgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbmV4dERheToiW1x1MTc5Zlx1MTdkMlx1MTdhMlx1MTdjMlx1MTc4MCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExU''@;'; put 'put ''IixuZXh0V2VlazoiZGRkZCBbXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbGFzdERheToiW1x1MTc5OFx1MTdkMlx1MTc5Zlx1MTdiN1x1MTc5Ylx1MTc5OFx1MTdiN1x1MTc4OSBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0V2VlazoiZGRkZCBbXHUxNzlmXHUxNzk0''@;'; put 'put ''XHUxN2QyXHUxNzhmXHUxN2I2XHUxN2EwXHUxN2NkXHUxNzk4XHUxN2JiXHUxNzkzXSBbXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTE3OTFcdTE3YzBcdTE3OGYiLHBhc3Q6IiVzXHUxNzk4XHUxN2JiXHUxNzkz''@;'; put 'put ''IixzOiJcdTE3OTRcdTE3YzlcdTE3YmJcdTE3OTNcdTE3ZDJcdTE3OThcdTE3YjZcdTE3OTNcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLHNzOiIlZCBcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLG06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5M1x1''@;'; put 'put ''MTdiNlx1MTc5MVx1MTdiOCIsbW06IiVkIFx1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsaDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0IixoaDoiJWQgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0IixkOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTBcdTE3ZDJc''@;'; put 'put ''dTE3ODRcdTE3YzMiLGRkOiIlZCBcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzMiLE06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc4MVx1MTdjMiIsTU06IiVkIFx1MTc4MVx1MTdjMiIseToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2Iix5eToiJWQgXHUx''@;'; put 'put ''Nzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXHUxNzkxXHUxN2I4XGR7MSwyfS8sb3JkaW5hbDoiXHUxNzkxXHUxN2I4JWQiLHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTE3ZTFcdTE3ZTJcdTE3ZTNcdTE3ZTRc''@;'; put 'put ''dTE3ZTVcdTE3ZTZcdTE3ZTdcdTE3ZThcdTE3ZTlcdTE3ZTBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3''@;'; put 'put ''NTg2KSl9LDY1MDgyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwY2U3IiwyOiJcdTBjZTgiLDM6Ilx1MGNlOSIsNDoiXHUwY2VhIiw1OiJcdTBjZWIiLDY6Ilx1MGNlYyIsNzoiXHUwY2VkIiw4OiJcdTBjZWUiLDk6Ilx1MGNlZiIsMDoi''@;'; put 'put ''XHUwY2U2In0sZz17Ilx1MGNlNyI6IjEiLCJcdTBjZTgiOiIyIiwiXHUwY2U5IjoiMyIsIlx1MGNlYSI6IjQiLCJcdTBjZWIiOiI1IiwiXHUwY2VjIjoiNiIsIlx1MGNlZCI6IjciLCJcdTBjZWUiOiI4IiwiXHUwY2VmIjoiOSIsIlx1MGNlNiI6IjAifTtJLmRlZmluZUxvY2FsZSgia24iLHtt''@;'; put 'put ''b250aHM6Ilx1MGM5Y1x1MGNhOFx1MGNiNVx1MGNiMFx1MGNiZl9cdTBjYWJcdTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYjBcdTBjYmZfXHUwY2FlXHUwY2JlXHUwY2IwXHUwY2NkXHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNjZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNj''@;'; put 'put ''ZF9cdTBjYWVcdTBjYzZcdTBjZDVfXHUwYzljXHUwY2MyXHUwY2E4XHUwY2NkX1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBjOTdcdTBjYjhcdTBjY2RcdTBjOWZcdTBjY2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUwYzlmXHUwY2M2XHUwYzgyXHUwY2FjXHUw''@;'; put 'put ''Y2IwXHUwY2NkX1x1MGM4NVx1MGM5NVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYThcdTBjYjVcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkIi5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBjOWNcdTBjYThfXHUwY2FiXHUwY2M2XHUwY2FjXHUwY2NkXHUwY2IwX1x1MGNhZVx1MGNiZVx1MGNiMFx1MGNjZFx1MGM5YVx1MGNjZF9cdTBjOGZcdTBjYWFcdTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJcdTBjY2RfXHUwY2FlXHUwY2M2XHUwY2Q1''@;'; put 'put ''X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNjZF9cdTBjOWNcdTBjYzFcdTBjYjJcdTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUwY2I4XHUwY2NkXHUwYzlmXHUwY2NkX1x1MGNiOFx1MGNjNlx1MGNhYVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGM4Ml9cdTBjODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBj''@;'; put 'put ''YzZcdTBjYzJcdTBjZDVfXHUwY2E4XHUwY2I1XHUwY2M2XHUwYzgyX1x1MGNhMVx1MGNiZlx1MGNiOFx1MGNjNlx1MGM4MiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I4XHUw''@;'; put 'put ''Y2M2XHUwY2MyXHUwY2Q1XHUwY2FlXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNhZVx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYWNcdTBjYzFcdTBjYTdcdTBjYjVcdTBjYmVcdTBjYjBfXHUwYzk3XHUwY2MxXHUwY2IwXHUwY2MxXHUwY2I1XHUwY2JlXHUwY2IwX1x1''@;'; put 'put ''MGNiNlx1MGNjMVx1MGM5NVx1MGNjZFx1MGNiMFx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjZcdTBjYThcdTBjYmZcdTBjYjVcdTBjYmVcdTBjYjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwY2FkXHUwY2JlXHUwY2E4XHUwY2MxX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNVx1MGNh''@;'; put 'put ''ZV9cdTBjYWVcdTBjODJcdTBjOTdcdTBjYjNfXHUwY2FjXHUwY2MxXHUwY2E3X1x1MGM5N1x1MGNjMVx1MGNiMFx1MGNjMV9cdTBjYjZcdTBjYzFcdTBjOTVcdTBjY2RcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBjYWRcdTBjYmVfXHUwY2I4''@;'; put 'put ''XHUwY2M2XHUwY2MyXHUwY2Q1X1x1MGNhZVx1MGM4Ml9cdTBjYWNcdTBjYzFfXHUwYzk3XHUwY2MxX1x1MGNiNlx1MGNjMV9cdTBjYjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVki''@;'; put 'put ''LExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzg3XHUwYzgyXHUwY2E2XHUwY2MxXSBMVCIsbmV4dERheToiW1x1MGNhOFx1MGNiZVx1MGNiM1x1MGNjNl0gTFQiLG5leHRXZWVrOiJkZGRk''@;'; put 'put ''LCBMVCIsbGFzdERheToiW1x1MGNhOFx1MGNiZlx1MGNhOFx1MGNjZFx1MGNhOFx1MGNjNl0gTFQiLGxhc3RXZWVrOiJbXHUwYzk1XHUwY2M2XHUwY2MyXHUwY2E4XHUwY2M2XHUwY2FmXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwY2E4XHUw''@;'; put 'put ''YzgyXHUwY2E0XHUwY2IwIixwYXN0OiIlcyBcdTBjYjlcdTBjYmZcdTBjODJcdTBjYTZcdTBjYzYiLHM6Ilx1MGM5NVx1MGNjNlx1MGNiMlx1MGNiNVx1MGNjMSBcdTBjOTVcdTBjY2RcdTBjYjdcdTBjYTNcdTBjOTdcdTBjYjNcdTBjYzEiLHNzOiIlZCBcdTBjYjhcdTBjYzZcdTBjOTVcdTBj''@;'; put 'put ''YzZcdTBjODJcdTBjYTFcdTBjYzFcdTBjOTdcdTBjYjNcdTBjYzEiLG06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLG1tOiIlZCBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLGg6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNj''@;'; put 'put ''MSBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGhoOiIlZCBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGQ6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYTZcdTBjYmZcdTBjYTgiLGRkOiIlZCBcdTBjYTZcdTBjYmZcdTBjYTgiLE06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBc''@;'; put 'put ''dTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLE1NOiIlZCBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLHk6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjciLHl5OiIlZCBcdTBjYjVcdTBjYjBcdTBjY2RcdTBj''@;'; put 'put ''YjcifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwY2U3XHUwY2U4XHUwY2U5XHUwY2VhXHUwY2ViXHUwY2VjXHUwY2VkXHUwY2VlXHUwY2VmXHUwY2U2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJu''@;'; put 'put ''IHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmZ8XHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2fFx1MGNhZVx1MGNhN1x1MGNjZFx1''@;'; put 'put ''MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOHxcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYiPT09UD93PDQ/dzp3KzEyOiJcdTBjYWNc''@;'; put 'put ''dTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiPT09UD93OiJcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTgiPT09UD93Pj0xMD93OncrMTI6Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNiI9PT1QP3crMTI6dm9pZCAwfSxtZXJp''@;'; put 'put ''ZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIjp3PDEwPyJcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiOnc8MTc/Ilx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1''@;'; put 'put ''MGNiOVx1MGNjZFx1MGNhOCI6dzwyMD8iXHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2IjoiXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTBjYThcdTBjYzZcdTBjZDUpLyxvcmRpbmFsOmZ1bmN0aW9uKHcpe3Jl''@;'; put 'put ''dHVybiB3KyJcdTBjYThcdTBjYzZcdTBjZDUifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSwyMDEzNzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImtvIix7bW9udGhzOiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80''@;'; put 'put ''XHVjNmQ0XzVcdWM2ZDRfNlx1YzZkNF83XHVjNmQ0XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1YzZkNF8yXHVjNmQ0XzNcdWM2ZDRfNFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0Xzlc''@;'; put 'put ''dWM2ZDRfMTBcdWM2ZDRfMTFcdWM2ZDRfMTJcdWM2ZDQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1Yzc3Y1x1YzY5NFx1Yzc3Y19cdWM2ZDRcdWM2OTRcdWM3N2NfXHVkNjU0XHVjNjk0XHVjNzdjX1x1YzIxOFx1YzY5NFx1Yzc3Y19cdWJhYTlcdWM2OTRcdWM3N2NfXHVhZTA4XHVjNjk0XHVj''@;'; put 'put ''NzdjX1x1ZDFhMFx1YzY5NFx1Yzc3YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdWM3N2NfXHVjNmQ0X1x1ZDY1NF9cdWMyMThfXHViYWE5X1x1YWUwOF9cdWQxYTAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVhZTA4''@;'; put 'put ''X1x1ZDFhMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MiLExMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgQSBoOm1tIixMTExMOiJZWVlZXHViMTQ0IE1N''@;'; put 'put ''TU0gRFx1Yzc3YyBkZGRkIEEgaDptbSIsbDoiWVlZWS5NTS5ERC4iLGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyIsbGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6bW0iLGxsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6Ilx1YzYyNFx1YjI5OCBMVCIsbmV4dERheToiXHViMGI0XHVjNzdjIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiXHVjNWI0XHVjODFjIExUIixsYXN0V2VlazoiXHVjOWMwXHViMDljXHVjOGZjIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6''@;'; put 'put ''IiVzIFx1ZDZjNCIscGFzdDoiJXMgXHVjODA0IixzOiJcdWJhODcgXHVjZDA4IixzczoiJWRcdWNkMDgiLG06IjFcdWJkODQiLG1tOiIlZFx1YmQ4NCIsaDoiXHVkNTVjIFx1YzJkY1x1YWMwNCIsaGg6IiVkXHVjMmRjXHVhYzA0IixkOiJcdWQ1NThcdWI4ZTgiLGRkOiIlZFx1Yzc3YyIsTToi''@;'; put 'put ''XHVkNTVjIFx1YjJlYyIsTU06IiVkXHViMmVjIix5OiJcdWM3N2MgXHViMTQ0Iix5eToiJWRcdWIxNDQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1Yzc3Y3xcdWM2ZDR8XHVjOGZjKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlImQiOmNhc2UiRCI6''@;'; put 'put ''Y2FzZSJEREQiOnJldHVybiBnKyJcdWM3N2MiO2Nhc2UiTSI6cmV0dXJuIGcrIlx1YzZkNCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBnKyJcdWM4ZmMiO2RlZmF1bHQ6cmV0dXJuIGd9fSxtZXJpZGllbVBhcnNlOi9cdWM2MjRcdWM4MDR8XHVjNjI0XHVkNmM0Lyxpc1BNOmZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiJcdWM2MjRcdWQ2YzQiPT09Z30sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyPyJcdWM2MjRcdWM4MDQiOiJcdWM2MjRcdWQ2YzQifX0pfSh5KDk3NTg2KSl9LDYzNzQ0OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlv''@;'; put 'put ''biBfKHcsUCxGLE8pe3ZhciB6PXtzOlsiXHhlN2VuZCBzYW5ceGVleWUiLCJceGU3ZW5kIHNhblx4ZWV5ZXlhbiJdLHNzOlt3KyIgc2FuXHhlZXllIix3KyIgc2FuXHhlZXlleWFuIl0sbTpbImRlcVx4ZWVxZXllayIsImRlcVx4ZWVxZXlla1x4ZWEiXSxtbTpbdysiIGRlcVx4ZWVxZSIsdysi''@;'; put 'put ''IGRlcVx4ZWVxZXlhbiJdLGg6WyJzYWV0ZWsiLCJzYWV0ZWtceGVhIl0saGg6W3crIiBzYWV0Iix3KyIgc2FldGFuIl0sZDpbInJvamVrIiwicm9qZWtceGVhIl0sZGQ6W3crIiByb2oiLHcrIiByb2phbiJdLHc6WyJoZWZ0ZXllayIsImhlZnRleWVrXHhlYSJdLHd3Olt3KyIgaGVmdGUiLHcr''@;'; put 'put ''IiBoZWZ0ZXlhbiJdLE06WyJtZWhlayIsIm1laGVrXHhlYSJdLE1NOlt3KyIgbWVoIix3KyIgbWVoYW4iXSx5Olsic2FsZWsiLCJzYWxla1x4ZWEiXSx5eTpbdysiIHNhbCIsdysiIHNhbGFuIl19O3JldHVybiBQP3pbRl1bMF06eltGXVsxXX1JLmRlZmluZUxvY2FsZSgia3Uta21yIix7bW9u''@;'; put 'put ''dGhzOiJSXHhlYWJlbmRhbl9TaWJhdF9BZGFyX05ceGVlc2FuX0d1bGFuX0hlelx4ZWVyYW5fVFx4ZWVybWVoX1RlYmF4X1x4Y2Vsb25fQ290bWVoX01pamRhcl9CZXJmYW5iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlJceGVhYl9TaWJfQWRhX05ceGVlc19HdWxfSGV6X1RceGVlcl9U''@;'; put 'put ''ZWJfXHhjZWxvX0NvdF9NaWpfQmVyIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Illla1x1MDE1ZmVtX0R1XHUwMTVmZW1fU1x4ZWFcdTAxNWZlbV9ceGM3YXJcdTAxNWZlbV9QXHhlYW5jXHUwMTVmZW1fXHhjZW5fXHUwMTVlZW1ceGVlIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6Illla19EdV9TXHhlYV9ceGM3YXJfUFx4ZWFuX1x4Y2VuX1x1MDE1ZWVtIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJZZV9EdV9TXHhlYV9ceGM3YV9QXHhlYV9ceGNlbl9cdTAxNWVlIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwx''@;'; put 'put ''Mj9GPyJibiI6IkJOIjpGPyJwbiI6IlBOIn0sbWVyaWRpZW1QYXJzZTovYm58Qk58cG58UE4vLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NW2FdIFlZWVlbYW5dIixMTEw6IkRvIE1NTU1bYV0gWVlZWVthbl0gSEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGQsIERvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0iLGxsOiJEbyBNTU1bLl0gWVlZWVthbl0iLGxsbDoiRG8gTU1NWy5dIFlZWVlbYW5dIEhIOm1tIixsbGxsOiJkZGRbLl0sIERvIE1NTVsuXSBZWVlZW2FuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhjZXJv''@;'; put 'put ''IGRpIHNhZXRdIExUIFtkZV0iLG5leHREYXk6IltTaWJceGVhIGRpIHNhZXRdIExUIFtkZV0iLG5leHRXZWVrOiJkZGRkIFtkaSBzYWV0XSBMVCBbZGVdIixsYXN0RGF5OiJbRHVoIGRpIHNhZXRdIExUIFtkZV0iLGxhc3RXZWVrOiJkZGRkW2EgYm9yXHhlZSBkaSBzYWV0XSBMVCBbZGVdIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkaSAlcyBkZSIscGFzdDoiYmVyXHhlZSAlcyIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8sdzpfLHd3Ol8sTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oPzp5XHhl''@;'; put 'put ''YXxceGVhfFwuKS8sb3JkaW5hbDpmdW5jdGlvbih3LFApe3ZhciBGPVAudG9Mb3dlckNhc2UoKTtyZXR1cm4gRi5pbmNsdWRlcygidyIpfHxGLmluY2x1ZGVzKCJtIik/dysiLiI6dytmdW5jdGlvbiBnKHcpe3ZhciBQPSh3PSIiK3cpLnN1YnN0cmluZyh3Lmxlbmd0aC0xKSxGPXcubGVuZ3Ro''@;'; put 'put ''PjE/dy5zdWJzdHJpbmcody5sZW5ndGgtMik6IiI7cmV0dXJuIDEyPT1GfHwxMz09Rnx8IjIiIT1QJiYiMyIhPVAmJiI1MCIhPUYmJiI3MCIhPVAmJiI4MCIhPVA/Ilx4ZWEiOiJ5XHhlYSJ9KHcpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw3MDExMTpmdW5jdGlvbih1ZSxY''@;'; put 'put ''LHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LGc9eyJcdTA2NjEiOiIxIiwi''@;'; put 'put ''XHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn0sQj1bIlx1MDZhOVx1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2MmZc''@;'; put 'put ''dTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUiLCJcdTA2MzRcdTA2NDhcdTA2MjhcdTA2MjdcdTA2MmEiLCJcdTA2MjZcdTA2MjdcdTA2MzJcdTA2MjdcdTA2MzEiLCJcdTA2NDZcdTA2Y2NcdTA2MzNcdTA2MjdcdTA2NDYiLCJcdTA2MjZcdTA2MjdcdTA2Y2NcdTA2MjdcdTA2MzEiLCJcdTA2MmRc''@;'; put 'put ''dTA2NDhcdTA2MzJcdTA2ZDVcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MmFcdTA2ZDVcdTA2NDVcdTA2NDVcdTA2NDhcdTA2MzIiLCJcdTA2MjZcdTA2MjdcdTA2MjgiLCJcdTA2MjZcdTA2ZDVcdTA2Y2NcdTA2NDRcdTA2NDhcdTA2NDhcdTA2NDQiLCJcdTA2MmFcdTA2MzRcdTA2''@;'; put 'put ''MzFcdTA2Y2NcdTA2NDZcdTA2Y2MgXHUwNmNjXHUwNmQ1XHUwNjQzXHUwNmQ1XHUwNjQ1IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDYyZlx1MDY0OFx1MDY0OFx1MDZkNVx1MDY0NSIsIlx1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2''@;'; put 'put ''Y2NcdTA2ZDVcdTA2YTlcdTA2ZDVcdTA2NDUiXTtJLmRlZmluZUxvY2FsZSgia3UiLHttb250aHM6Qixtb250aHNTaG9ydDpCLHdlZWtkYXlzOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjJmXHUwNjQ4XHUw''@;'; put 'put ''NjQ4XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYzM1x1MDZjZVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2ODZcdTA2NDhcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIw''@;'; put 'put ''MGNfXHUwNjdlXHUwNmNlXHUwNjQ2XHUwNjJjXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY0N1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0Nlx1MDZjY19cdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGMiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjg2XHUwNjQ4XHUwNjI3XHUwNjMx''@;'; put 'put ''XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY3ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2NDdcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJmX1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDY0N19cdTA2MzQiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGN8XHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjLyxp''@;'; put 'put ''c1BNOmZ1bmN0aW9uKFApe3JldHVybi9cdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGMvLnRlc3QoUCl9LG1lcmlkaWVtOmZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gUDwxMj8iXHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjIjoiXHUwNjI2''@;'; put 'put ''XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjZcdTA2NDdcdTIwMGNcdTA2NDVcdTA2MzFcdTA2YzYgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dERheToiW1x1MDYyOFx1MDY0''@;'; put 'put ''N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdERheToiW1x1MDYyZlx1MDY0''@;'; put 'put ''OFx1MDZjZVx1MDY0Nlx1MDZjZSBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy''@;'; put 'put ''ZToiXHUwNjQ0XHUwNjQ3XHUyMDBjICVzIixwYXN0OiIlcyIsczoiXHUwNjg2XHUwNjQ3XHUyMDBjXHUwNjQ2XHUwNjJmIFx1MDY4Nlx1MDYzMVx1MDY0M1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyIsc3M6Ilx1MDY4Nlx1MDYzMVx1MDY0M1x1MDY0N1x1MjAwYyAlZCIs''@;'; put 'put ''bToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsbW06IiVkIFx1MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsaDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1''@;'; put 'put ''MDY0NVx1MDZjZVx1MDYzMSIsaGg6IiVkIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMSIsZDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY5NVx1MDZjNlx1MDY5OCIsZGQ6IiVkIFx1MDY5NVx1MDZjNlx1MDY5OCIsTToiXHUwNmNjXHUwNjQ3XHUyMDBj''@;'; put 'put ''XHUwNjQzIFx1MDY0NVx1MDYyN1x1MDY0Nlx1MDZhZiIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDY0Nlx1MDZhZiIseToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDYzM1x1MDYyN1x1MDZiNSIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDZiNSJ9LHByZXBhcnNlOmZ1bmN0aW9uKFApe3Jl''@;'; put 'put ''dHVybiBQLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oRil7cmV0dXJuIGdbRl19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKFApe3JldHVybiBQLnJl''@;'; put 'put ''cGxhY2UoL1xkL2csZnVuY3Rpb24oRil7cmV0dXJuIF9bRl19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KHkoOTc1ODYpKX0sOTkxODc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXswOiItXHUwNDQ3XHUw''@;'; put 'put ''NGFmIiwxOiItXHUwNDQ3XHUwNDM4IiwyOiItXHUwNDQ3XHUwNDM4IiwzOiItXHUwNDQ3XHUwNGFmIiw0OiItXHUwNDQ3XHUwNGFmIiw1OiItXHUwNDQ3XHUwNDM4Iiw2OiItXHUwNDQ3XHUwNDRiIiw3OiItXHUwNDQ3XHUwNDM4Iiw4OiItXHUwNDQ3XHUwNDM4Iiw5OiItXHUwNDQ3XHUwNDQz''@;'; put 'put ''IiwxMDoiLVx1MDQ0N1x1MDQ0MyIsMjA6Ii1cdTA0NDdcdTA0NGIiLDMwOiItXHUwNDQ3XHUwNDQzIiw0MDoiLVx1MDQ0N1x1MDQ0YiIsNTA6Ii1cdTA0NDdcdTA0YWYiLDYwOiItXHUwNDQ3XHUwNDRiIiw3MDoiLVx1MDQ0N1x1MDQzOCIsODA6Ii1cdTA0NDdcdTA0MzgiLDkwOiItXHUwNDQ3''@;'; put 'put ''XHUwNDQzIiwxMDA6Ii1cdTA0NDdcdTA0YWYifTtJLmRlZmluZUxvY2FsZSgia3kiLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQ0Y19cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1''@;'; put 'put ''MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQy''@;'; put 'put ''XHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDRjIi5zcGxpdCgiXyIpLG1vbnRo''@;'; put 'put ''c1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMw''@;'; put 'put ''XHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDE2XHUwNDM1XHUwNDNhXHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQx''@;'; put 'put ''NFx1MDRhZlx1MDQzOVx1MDQ0OFx1MDRlOVx1MDQzY1x1MDQzMVx1MDRhZl9cdTA0MjhcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDI4XHUwNDMwXHUwNDQwXHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxMVx1MDQzNVx1MDQzOVx1MDQ0''@;'; put 'put ''OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDE4XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxNlx1MDQzNVx1MDQzYV9cdTA0MTRcdTA0YWZcdTA0MzlfXHUwNDI4XHUwNDM1''@;'; put 'put ''XHUwNDM5X1x1MDQyOFx1MDQzMFx1MDQ0MF9cdTA0MTFcdTA0MzVcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQxOFx1MDQ0OFx1MDQzNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDE2XHUwNDNhX1x1MDQxNFx1MDQzOV9cdTA0MjhcdTA0MzlfXHUwNDI4XHUwNDQwX1x1MDQx''@;'; put 'put ''MVx1MDQzOV9cdTA0MTZcdTA0M2NfXHUwNDE4XHUwNDQ4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZ''@;'; put 'put ''WVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDRhZlx1MDQzM1x1MDRhZlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDM1XHUwNGEzIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLG5l''@;'; put 'put ''eHRXZWVrOiJkZGRkIFtcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDRkXHUwNDRkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDQyXHUwNDNhXHUwNGU5XHUwNDNkIFx1MDQzMFx1''@;'; put 'put ''MDQzZlx1MDQ0Mlx1MDQzMFx1MDQzZFx1MDQ0Ylx1MDQzZF0gZGRkZCBbXHUwNDNhXHUwNGFmXHUwNDNkXHUwNGFmXSBbXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDM4XHUwNDQ3XHUwNDM4XHUwNDNkXHUw''@;'; put 'put ''NDM0XHUwNDM1IixwYXN0OiIlcyBcdTA0M2NcdTA0NDNcdTA0NDBcdTA0NDNcdTA0M2QiLHM6Ilx1MDQzMVx1MDQzOFx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQzNSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0''@;'; put 'put ''NDNcdTA0M2RcdTA0MzQiLG06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2NcdTA0YWZcdTA0M2RcdTA0ZTlcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0YWZcdTA0M2RcdTA0ZTlcdTA0NDIiLGg6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDIiLGhoOiIlZCBc''@;'; put 'put ''dTA0NDFcdTA0MzBcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0YWZcdTA0M2QiLE06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzBcdTA0MzkiLE1NOiIlZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQzMVx1MDQz''@;'; put 'put ''OFx1MDQ0MCBcdTA0MzZcdTA0NGJcdTA0M2IiLHl5OiIlZCBcdTA0MzZcdTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDdcdTA0Mzh8XHUwNDQ3XHUwNDRifFx1MDQ0N1x1MDRhZnxcdTA0NDdcdTA0NDMpLyxvcmRpbmFsOmZ1bmN0aW9uKEIpe3Jl''@;'; put 'put ''dHVybiBCKyhfW0JdfHxfW0IlMTBdfHxfW0I+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSwzNTk2OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhGLE8seixOKXt2YXIgTD17bTpbImVuZyBNaW51''@;'; put 'put ''dHQiLCJlbmdlciBNaW51dHQiXSxoOlsiZW5nIFN0b25uIiwiZW5nZXIgU3Rvbm4iXSxkOlsiZWVuIERhZyIsImVuZ2VtIERhZyJdLE06WyJlZSBNb3VudCIsImVuZ2VtIE1vdW50Il0seTpbImVlIEpvZXIiLCJlbmdlbSBKb2VyIl19O3JldHVybiBPP0xbel1bMF06TFt6XVsxXX1mdW5jdGlv''@;'; put 'put ''biB3KEYpe2lmKEY9cGFyc2VJbnQoRiwxMCksaXNOYU4oRikpcmV0dXJuITE7aWYoRjwwKXJldHVybiEwO2lmKEY8MTApcmV0dXJuIDQ8PUYmJkY8PTc7aWYoRjwxMDApe3ZhciBPPUYlMTA7cmV0dXJuIHcoMD09PU8/Ri8xMDpPKX1pZihGPDFlNCl7Zm9yKDtGPj0xMDspRi89MTA7cmV0dXJu''@;'; put 'put ''IHcoRil9cmV0dXJuIHcoRi89MWUzKX1JLmRlZmluZUxvY2FsZSgibGIiLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0ZXJ6X0Ficlx4ZWJsbF9NZWVfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9y''@;'; put 'put ''dDoiSmFuLl9GZWJyLl9NcnouX0Fici5fTWVlX0p1bi5fSnVsLl9BdWcuX1NlcHQuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm5kZWdfTVx4ZTlpbmRlZ19EXHhlYm5zY2hkZWdfTVx4ZWJ0dHdvY2hfRG9ubmVzY2hkZWdfRnJl''@;'; put 'put ''aWRlZ19TYW1zY2hkZWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01ceGU5Ll9EXHhlYi5fTVx4ZWIuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19NXHhlOV9EXHhlYl9NXHhlYl9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6''@;'; put 'put ''ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIFtBdWVyXSIsTFRTOiJIOm1tOnNzIFtBdWVyXSIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSJ9LGNhbGVu''@;'; put 'put ''ZGFyOntzYW1lRGF5OiJbSGF1dCB1bV0gTFQiLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbTXVlciB1bV0gTFQiLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQiLGxhc3REYXk6IltHXHhlYnNjaHRlciB1bV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMjpj''@;'; put 'put ''YXNlIDQ6cmV0dXJuIltMZXNjaHRlbl0gZGRkZCBbdW1dIExUIjtkZWZhdWx0OnJldHVybiJbTGVzY2h0ZV0gZGRkZCBbdW1dIExUIn19fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbiBnKEYpe3JldHVybiB3KEYuc3Vic3RyKDAsRi5pbmRleE9mKCIgIikpKT8iYSAiK0Y6ImFuICIr''@;'; put 'put ''Rn0scGFzdDpmdW5jdGlvbiBCKEYpe3JldHVybiB3KEYuc3Vic3RyKDAsRi5pbmRleE9mKCIgIikpKT8idmlydSAiK0Y6InZpcnVuICIrRn0sczoiZSBwdWVyIFNla29ubmVuIixzczoiJWQgU2Vrb25uZW4iLG06XyxtbToiJWQgTWludXR0ZW4iLGg6XyxoaDoiJWQgU3Rvbm5lbiIsZDpfLGRk''@;'; put 'put ''OiIlZCBEZWVnIixNOl8sTU06IiVkIE1ceGU5aW50Iix5Ol8seXk6IiVkIEpvZXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMzM1MjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24o''@;'; put 'put ''SSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJsbyIse21vbnRoczoiXHUwZWExXHUwZWIxXHUwZTg3XHUwZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGViOFx1MGVhMVx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1''@;'; put 'put ''MGU5ZVx1MGViNlx1MGU5NFx1MGVhYVx1MGViMFx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjRcdTBlOTZcdTBlYjhcdTBlOTlcdTBlYjJfXHUwZTgxXHUwZWNkXHUwZWE1XHUwZWIwXHUwZTgxXHUwZWJiXHUwZTk0X1x1MGVhYVx1MGViNFx1MGU4N1x1MGVhYlx1MGViMl9cdTBlODFcdTBlYjFc''@;'; put 'put ''dTBlOTlcdTBlOGRcdTBlYjJfXHUwZTk1XHUwZWI4XHUwZWE1XHUwZWIyX1x1MGU5ZVx1MGViMFx1MGU4OFx1MGViNFx1MGU4MV9cdTBlOTdcdTBlYjFcdTBlOTlcdTBlYTdcdTBlYjIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGVhMVx1MGViMVx1MGU4N1x1MGU4MVx1MGVhZFx1MGU5''@;'; put 'put ''OV9cdTBlODFcdTBlYjhcdTBlYTFcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI1XHUwZTk5XHUwZWIyX1x1MGVjMFx1MGVhMVx1MGVhYVx1MGViMl9cdTBlOWVcdTBlYjZcdTBlOTRcdTBlYWFcdTBlYjBcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI0XHUwZTk2XHUwZWI4XHUwZTk5XHUwZWIyX1x1''@;'; put 'put ''MGU4MVx1MGVjZFx1MGVhNVx1MGViMFx1MGU4MVx1MGViYlx1MGU5NF9cdTBlYWFcdTBlYjRcdTBlODdcdTBlYWJcdTBlYjJfXHUwZTgxXHUwZWIxXHUwZTk5XHUwZThkXHUwZWIyX1x1MGU5NVx1MGViOFx1MGVhNVx1MGViMl9cdTBlOWVcdTBlYjBcdTBlODhcdTBlYjRcdTBlODFfXHUwZTk3''@;'; put 'put ''XHUwZWIxXHUwZTk5XHUwZWE3XHUwZWIyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBlYWRcdTBlYjJcdTBlOTdcdTBlYjRcdTBlOTRfXHUwZTg4XHUwZWIxXHUwZTk5X1x1MGVhZFx1MGViMVx1MGU4N1x1MGU4NFx1MGViMlx1MGU5OV9cdTBlOWVcdTBlYjhcdTBlOTRfXHUwZTllXHUwZWIw''@;'; put 'put ''XHUwZWFiXHUwZWIxXHUwZTk0X1x1MGVhYVx1MGViOFx1MGU4MV9cdTBlYzBcdTBlYWFcdTBlYmJcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZTk3XHUwZWI0XHUwZTk0X1x1MGU4OFx1MGViMVx1MGU5OV9cdTBlYWRcdTBlYjFcdTBlODdcdTBlODRcdTBlYjJcdTBlOTlf''@;'; put 'put ''XHUwZTllXHUwZWI4XHUwZTk0X1x1MGU5ZVx1MGViMFx1MGVhYlx1MGViMVx1MGU5NF9cdTBlYWFcdTBlYjhcdTBlODFfXHUwZWMwXHUwZWFhXHUwZWJiXHUwZWIyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBlOTdfXHUwZTg4X1x1MGVhZFx1MGU4NF9cdTBlOWVfXHUwZTllXHUwZWFi''@;'; put 'put ''X1x1MGVhYVx1MGU4MV9cdTBlYWEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiXHUwZWE3''@;'; put 'put ''XHUwZWIxXHUwZTk5ZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMFx1MGU4YVx1MGViYlx1MGVjOVx1MGViMnxcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODcvLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJuIlx1''@;'; put 'put ''MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4NyI9PT1nfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTI/Ilx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMFx1MGU4YVx1MGViYlx1MGVjOVx1MGViMiI6Ilx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4''@;'; put 'put ''NyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZWExXHUwZWI3XHUwZWM5XHUwZTk5XHUwZWI1XHUwZWM5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbmV4dERheToiW1x1MGVhMVx1MGViN1x1MGVjOVx1MGVhZFx1MGViN1x1MGVjOFx1MGU5OVx1MGVjMFx1MGVhN1x1MGVhNVx1MGVi''@;'; put 'put ''Ml0gTFQiLG5leHRXZWVrOiJbXHUwZWE3XHUwZWIxXHUwZTk5XWRkZGRbXHUwZWRjXHUwZWM5XHUwZWIyXHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbGFzdERheToiW1x1MGVhMVx1MGViN1x1MGVjOVx1MGVhN1x1MGViMlx1MGU5OVx1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVh''@;'; put 'put ''N1x1MGVhNVx1MGViMl0gTFQiLGxhc3RXZWVrOiJbXHUwZWE3XHUwZWIxXHUwZTk5XWRkZGRbXHUwZWMxXHUwZWE1XHUwZWM5XHUwZWE3XHUwZTk5XHUwZWI1XHUwZWM5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUw''@;'; put 'put ''ZWFkXHUwZWI1XHUwZTgxICVzIixwYXN0OiIlc1x1MGU5Y1x1MGVjOFx1MGViMlx1MGU5OVx1MGVhMVx1MGViMiIsczoiXHUwZTlhXHUwZWNkXHUwZWM4XHUwZWMwXHUwZTk3XHUwZWJiXHUwZWM4XHUwZWIyXHUwZWMzXHUwZTk0XHUwZWE3XHUwZWI0XHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1''@;'; put 'put ''IixzczoiJWQgXHUwZWE3XHUwZWI0XHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixtOiIxIFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsbW06IiVkIFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsaDoiMSBcdTBlOGFcdTBlYmJcdTBlYzhcdTBlYTdcdTBlYzJcdTBlYTFcdTBlODciLGhoOiIl''@;'; put 'put ''ZCBcdTBlOGFcdTBlYmJcdTBlYzhcdTBlYTdcdTBlYzJcdTBlYTFcdTBlODciLGQ6IjEgXHUwZWExXHUwZWI3XHUwZWM5IixkZDoiJWQgXHUwZWExXHUwZWI3XHUwZWM5IixNOiIxIFx1MGVjMFx1MGU5NFx1MGViN1x1MGVhZFx1MGU5OSIsTU06IiVkIFx1MGVjMFx1MGU5NFx1MGViN1x1MGVh''@;'; put 'put ''ZFx1MGU5OSIseToiMSBcdTBlOWJcdTBlYjUiLHl5OiIlZCBcdTBlOWJcdTBlYjUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8oXHUwZTk3XHUwZWI1XHUwZWM4KVxkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24oZyl7cmV0dXJuIlx1MGU5N1x1MGViNVx1MGVjOCIrZ319KX0oeSg5NzU4Nikp''@;'; put 'put ''fSw5MDQxMTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89e3NzOiJzZWt1bmRcdTAxMTdfc2VrdW5kXHUwMTdlaVx1MDE3M19zZWt1bmRlcyIsbToibWludXRcdTAxMTdfbWludXRcdTAxMTdzX21pbnV0XHUwMTE5IixtbToibWludXRcdTAxMTdzX21p''@;'; put 'put ''bnVcdTAxMGRpXHUwMTczX21pbnV0ZXMiLGg6InZhbGFuZGFfdmFsYW5kb3NfdmFsYW5kXHUwMTA1IixoaDoidmFsYW5kb3NfdmFsYW5kXHUwMTczX3ZhbGFuZGFzIixkOiJkaWVuYV9kaWVub3NfZGllblx1MDEwNSIsZGQ6ImRpZW5vc19kaWVuXHUwMTczX2RpZW5hcyIsTToibVx1MDExN251''@;'; put 'put ''b19tXHUwMTE3bmVzaW9fbVx1MDExN25lc1x1MDEyZiIsTU06Im1cdTAxMTduZXNpYWlfbVx1MDExN25lc2lcdTAxNzNfbVx1MDExN25lc2l1cyIseToibWV0YWlfbWV0XHUwMTczX21ldHVzIix5eToibWV0YWlfbWV0XHUwMTczX21ldHVzIn07ZnVuY3Rpb24gQih6LE4sTCxLKXtyZXR1cm4g''@;'; put 'put ''Tj9QKEwpWzBdOks/UChMKVsxXTpQKEwpWzJdfWZ1bmN0aW9uIHcoeil7cmV0dXJuIHolMTA9PTB8fHo+MTAmJno8MjB9ZnVuY3Rpb24gUCh6KXtyZXR1cm4gX1t6XS5zcGxpdCgiXyIpfWZ1bmN0aW9uIEYoeixOLEwsSyl7dmFyIFU9eisiICI7cmV0dXJuIDE9PT16P1UrQigwLE4sTFswXSxL''@;'; put 'put ''KTpOP1UrKHcoeik/UChMKVsxXTpQKEwpWzBdKTpLP1UrUChMKVsxXTpVKyh3KHopP1AoTClbMV06UChMKVsyXSl9SS5kZWZpbmVMb2NhbGUoImx0Iix7bW9udGhzOntmb3JtYXQ6InNhdXNpb192YXNhcmlvX2tvdm9fYmFsYW5kXHUwMTdlaW9fZ2VndVx1MDE3ZVx1MDExN3NfYmlyXHUwMTdl''@;'; put 'put ''ZWxpb19saWVwb3NfcnVncGpcdTAxNmJcdTAxMGRpb19ydWdzXHUwMTE3am9fc3BhbGlvX2xhcGtyaVx1MDEwZGlvX2dydW9kXHUwMTdlaW8iLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2F1c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2VndVx1MDE3ZVx1MDExN19iaXJcdTAxN2VlbGlz''@;'; put 'put ''X2xpZXBhX3J1Z3BqXHUwMTZidGlzX3J1Z3NcdTAxMTdqaXNfc3BhbGlzX2xhcGtyaXRpc19ncnVvZGlzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NP3xNTU1NPyhcW1teXFtcXV0qXF18XHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJzYXVfdmFz''@;'; put 'put ''X2tvdl9iYWxfZ2VnX2Jpcl9saWVfcmdwX3Jnc19zcGFfbGFwX2dyZCIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiJzZWttYWRpZW5cdTAxMmZfcGlybWFkaWVuXHUwMTJmX2FudHJhZGllblx1MDEyZl90cmVcdTAxMGRpYWRpZW5cdTAxMmZfa2V0dmlydGFkaWVuXHUwMTJmX3Blbmt0''@;'; put 'put ''YWRpZW5cdTAxMmZfXHUwMTYxZVx1MDE2MXRhZGllblx1MDEyZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzZWttYWRpZW5pc19waXJtYWRpZW5pc19hbnRyYWRpZW5pc190cmVcdTAxMGRpYWRpZW5pc19rZXR2aXJ0YWRpZW5pc19wZW5rdGFkaWVuaXNfXHUwMTYxZVx1MDE2MXRhZGllbmlz''@;'; put 'put ''Ii5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9kZGRkIEhIOm1tL30sd2Vla2RheXNTaG9ydDoiU2VrX1Bpcl9BbnRfVHJlX0tldF9QZW5fXHUwMTYwZVx1MDE2MSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU19QX0FfVF9LX1BuX1x1MDE2MCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6''@;'; put 'put ''ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsTExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXSIsTExMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGRkLCBI''@;'; put 'put ''SDptbSBbdmFsLl0iLGw6IllZWVktTU0tREQiLGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0iLGxsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0iLGxsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkLCBISDptbSBbdmFsLl0ifSxjYWxlbmRhcjp7c2FtZURheToi''@;'; put 'put ''W1x1MDE2MGlhbmRpZW5dIExUIixuZXh0RGF5OiJbUnl0b2pdIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW1Zha2FyXSBMVCIsbGFzdFdlZWs6IltQcmFcdTAxMTdqdXNcdTAxMmZdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvICVzIixw''@;'; put 'put ''YXN0OiJwcmllXHUwMTYxICVzIixzOmZ1bmN0aW9uIGcoeixOLEwsSyl7cmV0dXJuIE4/ImtlbGlvcyBzZWt1bmRcdTAxMTdzIjpLPyJrZWxpXHUwMTczIHNla3VuZFx1MDE3ZWlcdTAxNzMiOiJrZWxpYXMgc2VrdW5kZXMifSxzczpGLG06QixtbTpGLGg6QixoaDpGLGQ6QixkZDpGLE06QixN''@;'; put 'put ''TTpGLHk6Qix5eTpGfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LW9qaS8sb3JkaW5hbDpmdW5jdGlvbih6KXtyZXR1cm4geisiLW9qaSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDMyNjIxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgXz17c3M6InNla3VuZGVzX3Nla3VuZFx1MDExM21fc2VrdW5kZV9zZWt1bmRlcyIuc3BsaXQoIl8iKSxtOiJtaW5cdTAxNmJ0ZXNfbWluXHUwMTZidFx1MDExM21fbWluXHUwMTZidGVfbWluXHUwMTZidGVzIi5zcGxpdCgiXyIpLG1tOiJtaW5cdTAxNmJ0ZXNfbWluXHUwMTZi''@;'; put 'put ''dFx1MDExM21fbWluXHUwMTZidGVfbWluXHUwMTZidGVzIi5zcGxpdCgiXyIpLGg6InN0dW5kYXNfc3R1bmRcdTAxMDFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgiXyIpLGhoOiJzdHVuZGFzX3N0dW5kXHUwMTAxbV9zdHVuZGFfc3R1bmRhcyIuc3BsaXQoIl8iKSxkOiJkaWVuYXNfZGllblx1''@;'; put 'put ''MDEwMW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIpLGRkOiJkaWVuYXNfZGllblx1MDEwMW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIpLE06Im1cdTAxMTNuZVx1MDE2MWFfbVx1MDExM25lXHUwMTYxaWVtX21cdTAxMTNuZXNpc19tXHUwMTEzbmVcdTAxNjFpIi5zcGxpdCgiXyIpLE1NOiJt''@;'; put 'put ''XHUwMTEzbmVcdTAxNjFhX21cdTAxMTNuZVx1MDE2MWllbV9tXHUwMTEzbmVzaXNfbVx1MDExM25lXHUwMTYxaSIuc3BsaXQoIl8iKSx5OiJnYWRhX2dhZGllbV9nYWRzX2dhZGkiLnNwbGl0KCJfIikseXk6ImdhZGFfZ2FkaWVtX2dhZHNfZ2FkaSIuc3BsaXQoIl8iKX07ZnVuY3Rpb24gZyhP''@;'; put 'put ''LHosTil7cmV0dXJuIE4/eiUxMD09MSYmeiUxMDAhPTExP09bMl06T1szXTp6JTEwPT0xJiZ6JTEwMCE9MTE/T1swXTpPWzFdfWZ1bmN0aW9uIEIoTyx6LE4pe3JldHVybiBPKyIgIitnKF9bTl0sTyx6KX1mdW5jdGlvbiB3KE8seixOKXtyZXR1cm4gZyhfW05dLE8seil9SS5kZWZpbmVMb2Nh''@;'; put 'put ''bGUoImx2Iix7bW9udGhzOiJqYW52XHUwMTAxcmlzX2ZlYnJ1XHUwMTAxcmlzX21hcnRzX2Fwclx1MDEyYmxpc19tYWlqc19qXHUwMTZibmlqc19qXHUwMTZibGlqc19hdWd1c3RzX3NlcHRlbWJyaXNfb2t0b2JyaXNfbm92ZW1icmlzX2RlY2VtYnJpcyIuc3BsaXQoIl8iKSxtb250aHNTaG9y''@;'; put 'put ''dDoiamFuX2ZlYl9tYXJfYXByX21haV9qXHUwMTZibl9qXHUwMTZibF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdlx1MDExM3RkaWVuYV9waXJtZGllbmFfb3RyZGllbmFfdHJlXHUwMTYxZGllbmFfY2V0dXJ0ZGllbmFfcGlla3RkaWVuYV9zZXN0ZGllbmEi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3ZfUF9PX1RfQ19Qa19TIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdl9QX09fVF9DX1BrX1MiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRE''@;'; put 'put ''Lk1NLllZWVkuIixMTDoiWVlZWS4gW2dhZGFdIEQuIE1NTU0iLExMTDoiWVlZWS4gW2dhZGFdIEQuIE1NTU0sIEhIOm1tIixMTExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgZGRkZCwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDE2MG9kaWVuIHB1bGtzdGVuXSBMVCIsbmV4dERh''@;'; put 'put ''eToiW1JcdTAxMmJ0IHB1bGtzdGVuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1bGtzdGVuXSBMVCIsbGFzdERheToiW1Zha2FyIHB1bGtzdGVuXSBMVCIsbGFzdFdlZWs6IltQYWdcdTAxMDFqdVx1MDE2MVx1MDEwMV0gZGRkZCBbcHVsa3N0ZW5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOiJwXHUwMTEzYyAlcyIscGFzdDoicGlybXMgJXMiLHM6ZnVuY3Rpb24gUChPLHope3JldHVybiB6PyJkYVx1MDE3ZWFzIHNla3VuZGVzIjoiZGFcdTAxN2VcdTAxMDFtIHNla3VuZFx1MDExM20ifSxzczpCLG06dyxtbTpCLGg6dyxoaDpCLGQ6dyxkZDpCLE06dyxNTTpC''@;'; put 'put ''LHk6dyx5eTpCfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODU4Njk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXt3b3Jkczp7c3M6WyJzZWt1''@;'; put 'put ''bmQiLCJzZWt1bmRhIiwic2VrdW5kaSJdLG06WyJqZWRhbiBtaW51dCIsImplZG5vZyBtaW51dGEiXSxtbTpbIm1pbnV0IiwibWludXRhIiwibWludXRhIl0saDpbImplZGFuIHNhdCIsImplZG5vZyBzYXRhIl0saGg6WyJzYXQiLCJzYXRhIiwic2F0aSJdLGRkOlsiZGFuIiwiZGFuYSIsImRh''@;'; put 'put ''bmEiXSxNTTpbIm1qZXNlYyIsIm1qZXNlY2EiLCJtamVzZWNpIl0seXk6WyJnb2RpbmEiLCJnb2RpbmUiLCJnb2RpbmEiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihCLHcpe3JldHVybiAxPT09Qj93WzBdOkI+PTImJkI8PTQ/d1sxXTp3WzJdfSx0cmFuc2xhdGU6ZnVuY3Rp''@;'; put 'put ''b24oQix3LFApe3ZhciBGPV8ud29yZHNbUF07cmV0dXJuIDE9PT1QLmxlbmd0aD93P0ZbMF06RlsxXTpCKyIgIitfLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UoQixGKX19O0kuZGVmaW5lTG9jYWxlKCJtZSIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9h''@;'; put 'put ''dmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6''@;'; put 'put ''Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRf''@;'; put 'put ''c3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1N''@;'; put 'put ''TU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3NqdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3Vd''@;'; put 'put ''IFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZSB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bIltw''@;'; put 'put ''cm9cdTAxNjFsZV0gW25lZGplbGplXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcG9uZWRqZWxqa2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFt1dG9ya2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3NyaWplZGVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtcdTAxMGRldHZydGth''@;'; put 'put ''XSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcGV0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIl1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoibmVrb2xpa28gc2VrdW5k''@;'; put 'put ''aSIsc3M6Xy50cmFuc2xhdGUsbTpfLnRyYW5zbGF0ZSxtbTpfLnRyYW5zbGF0ZSxoOl8udHJhbnNsYXRlLGhoOl8udHJhbnNsYXRlLGQ6ImRhbiIsZGQ6Xy50cmFuc2xhdGUsTToibWplc2VjIixNTTpfLnRyYW5zbGF0ZSx5OiJnb2RpbnUiLHl5Ol8udHJhbnNsYXRlfSxkYXlPZk1vbnRoT3Jk''@;'; put 'put ''aW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sMzU4ODE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJtaSIse21vbnRoczoiS29oaS10XHUwMTAxdGVfSHVp''@;'; put 'put ''LXRhbmd1cnVfUG91dFx1MDE2Yi10ZS1yYW5naV9QYWVuZ2Etd2hcdTAxMDF3aFx1MDEwMV9IYXJhdHVhX1BpcGlyaV9IXHUwMTRkbmdvaW5nb2lfSGVyZS10dXJpLWtcdTAxNGRrXHUwMTAxX01haHVydV9XaGlyaW5nYS1cdTAxMDEtbnVrdV9XaGlyaW5nYS1cdTAxMDEtcmFuZ2lfSGFraWhl''@;'; put 'put ''YSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiS29oaV9IdWlfUG91X1BhZV9IYXJhX1BpcGlfSFx1MDE0ZG5nb2lfSGVyZV9NYWh1X1doaS1udV9XaGktcmFfSGFraSIuc3BsaXQoIl8iKSxtb250aHNSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwzfS9pLG1vbnRo''@;'; put 'put ''c1N0cmljdFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU2hvcnRSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwzfS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStc''@;'; put 'put ''LT8pezEsMn0vaSx3ZWVrZGF5czoiUlx1MDEwMXRhcHVfTWFuZV9UXHUwMTZicmVpX1dlbmVyZWlfVFx1MDEwMWl0ZV9QYXJhaXJlX0hcdTAxMDF0YXJlaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJUYV9NYV9UXHUwMTZiX1dlX1RcdTAxMDFpX1BhX0hcdTAxMDEiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46IlRhX01hX1RcdTAxNmJfV2VfVFx1MDEwMWlfUGFfSFx1MDEwMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW2ldIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbaV0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2kgdGVpZSBtYWhhbmEsIGldIExUIixuZXh0RGF5OiJbYXBvcG8gaV0gTFQiLG5leHRXZWVrOiJkZGRkIFtpXSBMVCIsbGFzdERheToiW2luYW5haGkgaV0gTFQiLGxhc3RXZWVrOiJkZGRkIFt3''@;'; put 'put ''aGFrYW11dHVuZ2EgaV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Imkgcm90byBpICVzIixwYXN0OiIlcyBpIG11YSIsczoidGUgaFx1MDExM2tvbmEgcnVhcnVhIixzczoiJWQgaFx1MDExM2tvbmEiLG06ImhlIG1lbmV0aSIsbW06IiVkIG1lbmV0aSIsaDoidGUg''@;'; put 'put ''aGFvcmEiLGhoOiIlZCBoYW9yYSIsZDoiaGUgcmEiLGRkOiIlZCByYSIsTToiaGUgbWFyYW1hIixNTToiJWQgbWFyYW1hIix5OiJoZSB0YXUiLHl5OiIlZCB0YXUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''NH19KX0oeSg5NzU4NikpfSw5MjM5MTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm1rIix7bW9udGhzOiJcdTA0NThcdTA0MzBcdTA0M2RcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUw''@;'; put 'put ''NDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZFx1MDQzOF9cdTA0NThcdTA0NDNcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMz''@;'; put 'put ''XHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZlx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0M2VcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNkXHUwNDNlXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4''@;'; put 'put ''X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDU4XHUwNDMwXHUwNDNkX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1''@;'; put 'put ''MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2ZfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQzNV9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQz''@;'; put 'put ''ZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzMF9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQz''@;'; put 'put ''MF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NDBcdTA0NDJcdTA0M2VcdTA0M2FfXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzMFx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzVcdTA0MzRf''@;'; put 'put ''XHUwNDNmXHUwNDNlXHUwNDNkX1x1MDQzMlx1MDQ0Mlx1MDQzZV9cdTA0NDFcdTA0NDBcdTA0MzVfXHUwNDQ3XHUwNDM1XHUwNDQyX1x1MDQzZlx1MDQzNVx1MDQ0Ml9cdTA0NDFcdTA0MzBcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZGVfXHUwNDNmb19cdTA0MzJcdTA0''@;'; put 'put ''NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQzNV9cdTA0M2ZcdTA0MzVfXHUwNDQxYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRk''@;'; put 'put ''ZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDE0XHUwNDM1XHUwNDNkXHUwNDM1XHUwNDQxIFx1MDQzMlx1MDQzZV0gTFQiLG5leHREYXk6IltcdTA0MjNcdTA0NDJcdTA0NDBcdTA0MzUgXHUwNDMyXHUwNDNlXSBMVCIsbmV4dFdlZWs6IltcdTA0MTJcdTA0''@;'; put 'put ''M2VdIGRkZGQgW1x1MDQzMlx1MDQzZV0gTFQiLGxhc3REYXk6IltcdTA0MTJcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAgXHUwNDMyXHUwNDNlXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDY6cmV0dXJuIltcdTA0MThcdTA0''@;'; put 'put ''MzdcdTA0M2NcdTA0MzhcdTA0M2RcdTA0MzBcdTA0NDJcdTA0MzBcdTA0NDJcdTA0MzBdIGRkZGQgW1x1MDQzMlx1MDQzZV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW1x1MDQxOFx1MDQzN1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQ0Mlx1MDQzOFx1MDQz''@;'; put 'put ''ZVx1MDQ0Ml0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MzdcdTA0MzAgJXMiLHBhc3Q6Ilx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzNCAlcyIsczoiXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDNlXHUwNDNiXHUwNDNhXHUw''@;'; put 'put ''NDQzIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsbToiXHUwNDM1XHUwNDM0XHUwNDNkXHUwNDMwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIs''@;'; put 'put ''bW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzOCIsaDoiXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNkIFx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6IiVkIFx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMCIsZDoiXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNkIFx1MDQzNFx1MDQz''@;'; put 'put ''NVx1MDQzZCIsZGQ6IiVkIFx1MDQzNFx1MDQzNVx1MDQzZFx1MDQzMCIsTToiXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsTU06IiVkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzOCIseToiXHUwNDM1XHUwNDM0XHUw''@;'; put 'put ''NDNkXHUwNDMwIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCIseXk6IiVkIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzNVx1MDQzMnxcdTA0MzVcdTA0M2R8XHUwNDQyXHUwNDM4''@;'; put 'put ''fFx1MDQzMlx1MDQzOHxcdTA0NDBcdTA0Mzh8XHUwNDNjXHUwNDM4KS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwLHc9ZyUxMDA7cmV0dXJuIDA9PT1nP2crIi1cdTA0MzVcdTA0MzIiOjA9PT13P2crIi1cdTA0MzVcdTA0M2QiOnc+MTAmJnc8MjA/ZysiLVx1MDQ0Mlx1MDQzOCI6''@;'; put 'put ''MT09PUI/ZysiLVx1MDQzMlx1MDQzOCI6Mj09PUI/ZysiLVx1MDQ0MFx1MDQzOCI6Nz09PUJ8fDg9PT1CP2crIi1cdTA0M2NcdTA0MzgiOmcrIi1cdTA0NDJcdTA0MzgifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSwyMTEyNjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJ''@;'; put 'put ''KXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm1sIix7bW9udGhzOiJcdTBkMWNcdTBkMjhcdTBkNDFcdTBkMzVcdTBkMzBcdTBkM2ZfXHUwZDJiXHUwZDQ2XHUwZDJjXHUwZDRkXHUwZDMwXHUwZDQxXHUwZDM1XHUwZDMwXHUwZDNmX1x1MGQyZVx1MGQzZVx1MGQ3Y1x1MGQxYVx1MGQ0''@;'; put 'put ''ZFx1MGQxYVx1MGQ0ZF9cdTBkMGZcdTBkMmFcdTBkNGRcdTBkMzBcdTBkM2ZcdTBkN2RfXHUwZDJlXHUwZDQ3XHUwZDJmXHUwZDRkX1x1MGQxY1x1MGQ0Mlx1MGQ3YV9cdTBkMWNcdTBkNDJcdTBkMzJcdTBkNDhfXHUwZDEzXHUwZDE3XHUwZDM4XHUwZDRkXHUwZDMxXHUwZDRkXHUwZDMxXHUw''@;'; put 'put ''ZDRkX1x1MGQzOFx1MGQ0Nlx1MGQyYVx1MGQ0ZFx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQwMlx1MGQyY1x1MGQ3Y19cdTBkMTJcdTBkMTVcdTBkNGRcdTBkMWZcdTBkNGJcdTBkMmNcdTBkN2NfXHUwZDI4XHUwZDM1XHUwZDAyXHUwZDJjXHUwZDdjX1x1MGQyMVx1MGQzZlx1MGQzOFx1MGQwMlx1''@;'; put 'put ''MGQyY1x1MGQ3YyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZDFjXHUwZDI4XHUwZDQxLl9cdTBkMmJcdTBkNDZcdTBkMmNcdTBkNGRcdTBkMzBcdTBkNDEuX1x1MGQyZVx1MGQzZVx1MGQ3Yy5fXHUwZDBmXHUwZDJhXHUwZDRkXHUwZDMwXHUwZDNmLl9cdTBkMmVcdTBkNDdcdTBkMmZc''@;'; put 'put ''dTBkNGRfXHUwZDFjXHUwZDQyXHUwZDdhX1x1MGQxY1x1MGQ0Mlx1MGQzMlx1MGQ0OC5fXHUwZDEzXHUwZDE3Ll9cdTBkMzhcdTBkNDZcdTBkMmFcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzEuX1x1MGQxMlx1MGQxNVx1MGQ0ZFx1MGQxZlx1MGQ0Yi5fXHUwZDI4XHUwZDM1XHUwZDAyLl9cdTBk''@;'; put 'put ''MjFcdTBkM2ZcdTBkMzhcdTBkMDIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGQxZVx1MGQzZVx1MGQyZlx1MGQzMVx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMjRcdTBkM2ZcdTBkMTlcdTBkNGRcdTBkMTVcdTBkMzNcdTBkM2VcdTBkMzRcdTBk''@;'; put 'put ''NGRcdTBkMWFfXHUwZDFhXHUwZDRhXHUwZDM1XHUwZDRkXHUwZDM1XHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQyY1x1MGQ0MVx1MGQyN1x1MGQyOFx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VcdTBkMzRcdTBkM2VcdTBkMzRcdTBkNGRcdTBk''@;'; put 'put ''MWFfXHUwZDM1XHUwZDQ2XHUwZDMzXHUwZDRkXHUwZDMzXHUwZDNmXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNlx1MGQyOFx1MGQzZlx1MGQyZlx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBkMWVcdTBkM2VcdTBkMmZc''@;'; put 'put ''dTBkN2NfXHUwZDI0XHUwZDNmXHUwZDE5XHUwZDRkXHUwZDE1XHUwZDdlX1x1MGQxYVx1MGQ0YVx1MGQzNVx1MGQ0ZFx1MGQzNV9cdTBkMmNcdTBkNDFcdTBkMjdcdTBkN2JfXHUwZDM1XHUwZDRkXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDAyX1x1MGQzNVx1MGQ0Nlx1MGQzM1x1MGQ0ZFx1MGQz''@;'; put 'put ''M1x1MGQzZl9cdTBkMzZcdTBkMjhcdTBkM2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGQxZVx1MGQzZV9cdTBkMjRcdTBkM2ZfXHUwZDFhXHUwZDRhX1x1MGQyY1x1MGQ0MV9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VfXHUwZDM1XHUwZDQ2X1x1MGQzNiIuc3BsaXQoIl8iKSxsb25n''@;'; put 'put ''RGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSAtXHUwZDI4XHUwZDQxIixMVFM6IkEgaDptbTpzcyAtXHUwZDI4XHUwZDQxIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSAtXHUwZDI4XHUwZDQxIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwg''@;'; put 'put ''QSBoOm1tIC1cdTBkMjhcdTBkNDEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGQwN1x1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0ZF0gTFQiLG5leHREYXk6IltcdTBkMjhcdTBkM2VcdTBkMzNcdTBkNDZdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBkMDdcdTBkMjhcdTBk''@;'; put 'put ''NGRcdTBkMjhcdTBkMzJcdTBkNDZdIExUIixsYXN0V2VlazoiW1x1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZV0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZVx1MGQ0''@;'; put 'put ''ZCIscGFzdDoiJXMgXHUwZDJlXHUwZDQxXHUwZDdiXHUwZDJhXHUwZDRkIixzOiJcdTBkMDVcdTBkN2RcdTBkMmEgXHUwZDI4XHUwZDNmXHUwZDJlXHUwZDNmXHUwZDM3XHUwZDE5XHUwZDRkXHUwZDE5XHUwZDdlIixzczoiJWQgXHUwZDM4XHUwZDQ2XHUwZDE1XHUwZDRkXHUwZDE1XHUwZDdi''@;'; put 'put ''XHUwZDIxXHUwZDRkIixtOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDJlXHUwZDNmXHUwZDI4XHUwZDNmXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDRkIixtbToiJWQgXHUwZDJlXHUwZDNmXHUwZDI4XHUwZDNmXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDRkIixoOiJcdTBkMTJcdTBkMzBcdTBkNDEg''@;'; put 'put ''XHUwZDJlXHUwZDIzXHUwZDNmXHUwZDE1XHUwZDRkXHUwZDE1XHUwZDQyXHUwZDdjIixoaDoiJWQgXHUwZDJlXHUwZDIzXHUwZDNmXHUwZDE1XHUwZDRkXHUwZDE1XHUwZDQyXHUwZDdjIixkOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDI2XHUwZDNmXHUwZDM1XHUwZDM4XHUwZDAyIixkZDoi''@;'; put 'put ''JWQgXHUwZDI2XHUwZDNmXHUwZDM1XHUwZDM4XHUwZDAyIixNOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDJlXHUwZDNlXHUwZDM4XHUwZDAyIixNTToiJWQgXHUwZDJlXHUwZDNlXHUwZDM4XHUwZDAyIix5OiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDM1XHUwZDdjXHUwZDM3XHUwZDAyIix5''@;'; put 'put ''eToiJWQgXHUwZDM1XHUwZDdjXHUwZDM3XHUwZDAyIn0sbWVyaWRpZW1QYXJzZTovXHUwZDMwXHUwZDNlXHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmfFx1MGQzMFx1MGQzZVx1MGQzNVx1MGQzZlx1MGQzMlx1MGQ0NnxcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0XHUwZDNm''@;'; put 'put ''XHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkfFx1MGQzNVx1MGQ0OFx1MGQxNVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMnxcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YvaSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1n''@;'; put 'put ''JiYoZz0wKSwiXHUwZDMwXHUwZDNlXHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmIj09PUImJmc+PTR8fCJcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIj09PUJ8fCJcdTBkMzVcdTBkNDhcdTBkMTVcdTBkNDFcdTBkMjhc''@;'; put 'put ''dTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDIiPT09Qj9nKzEyOmd9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzw0PyJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YiOmc8MTI/Ilx1MGQzMFx1MGQzZVx1MGQzNVx1MGQzZlx1MGQzMlx1MGQ0NiI6Zzwx''@;'; put 'put ''Nz8iXHUwZDA5XHUwZDFhXHUwZDRkXHUwZDFhIFx1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZVx1MGQ0ZCI6ZzwyMD8iXHUwZDM1XHUwZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyIjoiXHUwZDMwXHUwZDNlXHUwZDI0XHUwZDRk''@;'; put 'put ''XHUwZDMwXHUwZDNmIn19KX0oeSg5NzU4NikpfSw0NDg5MjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCxGKXtzd2l0Y2goUCl7Y2FzZSJzIjpyZXR1cm4gdz8iXHUwNDQ1XHUwNDRkXHUwNDM0XHUwNDQ1XHUwNDRkXHUwNDNkIFx1''@;'; put 'put ''MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0NVx1MDQ0ZFx1MDQzNFx1MDQ0NVx1MDQ0ZFx1MDQzZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJcdTA0M2QiO2Nhc2Uic3MiOnJldHVybiBCKyh3PyIgXHUwNDQxXHUwNDM1XHUwNDNh''@;'; put 'put ''XHUwNDQzXHUwNDNkXHUwNDM0IjoiIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Ylx1MDQzZCIpO2Nhc2UibSI6Y2FzZSJtbSI6cmV0dXJuIEIrKHc/IiBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiOiIgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUw''@;'; put 'put ''NDQyXHUwNDRiXHUwNDNkIik7Y2FzZSJoIjpjYXNlImhoIjpyZXR1cm4gQisodz8iIFx1MDQ0Nlx1MDQzMFx1MDQzMyI6IiBcdTA0NDZcdTA0MzBcdTA0MzNcdTA0MzhcdTA0MzlcdTA0M2QiKTtjYXNlImQiOmNhc2UiZGQiOnJldHVybiBCKyh3PyIgXHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQw''@;'; put 'put ''IjoiIFx1MDRlOVx1MDQzNFx1MDQ0MFx1MDQzOFx1MDQzOVx1MDQzZCIpO2Nhc2UiTSI6Y2FzZSJNTSI6cmV0dXJuIEIrKHc/IiBcdTA0NDFcdTA0MzBcdTA0NDAiOiIgXHUwNDQxXHUwNDMwXHUwNDQwXHUwNDRiXHUwNDNkIik7Y2FzZSJ5IjpjYXNlInl5IjpyZXR1cm4gQisodz8iIFx1MDQz''@;'; put 'put ''Nlx1MDQzOFx1MDQzYiI6IiBcdTA0MzZcdTA0MzhcdTA0M2JcdTA0MzhcdTA0MzlcdTA0M2QiKTtkZWZhdWx0OnJldHVybiBCfX1JLmRlZmluZUxvY2FsZSgibW4iLHttb250aHM6Ilx1MDQxZFx1MDQ0ZFx1MDQzM1x1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFc''@;'; put 'put ''dTA0MzBcdTA0NDBfXHUwNDI1XHUwNDNlXHUwNDUxXHUwNDQwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTNcdTA0NDNcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQx''@;'; put 'put ''XHUwNDMwXHUwNDQwX1x1MDQxNFx1MDRlOVx1MDQ0MFx1MDRlOVx1MDQzMlx1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDIyXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQz''@;'; put 'put ''MFx1MDQ0MF9cdTA0MTdcdTA0NDNcdTA0NDBcdTA0MzNcdTA0MzBcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxNFx1MDQzZVx1MDQzYlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0''@;'; put 'put ''NDBfXHUwNDFkXHUwNDMwXHUwNDM5XHUwNDNjXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTVcdTA0NDFcdTA0MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxMFx1MDQ0MFx1''@;'; put 'put ''MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDEwXHUwNDQwXHUwNDMyXHUwNDMwXHUwNDNkIFx1MDQzZFx1MDQ0ZFx1MDQzM1x1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBc''@;'; put 'put ''dTA0NDBfXHUwNDEwXHUwNDQwXHUwNDMyXHUwNDMwXHUwNDNkIFx1MDQ0NVx1MDQzZVx1MDQ1MVx1MDQ0MFx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjEgXHUwNDQxXHUwNDMwXHUwNDQwXzIg''@;'; put 'put ''XHUwNDQxXHUwNDMwXHUwNDQwXzMgXHUwNDQxXHUwNDMwXHUwNDQwXzQgXHUwNDQxXHUwNDMwXHUwNDQwXzUgXHUwNDQxXHUwNDMwXHUwNDQwXzYgXHUwNDQxXHUwNDMwXHUwNDQwXzcgXHUwNDQxXHUwNDMwXHUwNDQwXzggXHUwNDQxXHUwNDMwXHUwNDQwXzkgXHUwNDQxXHUwNDMwXHUwNDQw''@;'; put 'put ''XzEwIFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMSBcdTA0NDFcdTA0MzBcdTA0NDBfMTIgXHUwNDQxXHUwNDMwXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDQxZFx1MDQ0Zlx1MDQzY19cdTA0MTRcdTA0MzBcdTA0MzJcdTA0MzBcdTA0MzBfXHUwNDFj''@;'; put 'put ''XHUwNDRmXHUwNDMzXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQxYlx1MDQ0NVx1MDQzMFx1MDQzM1x1MDQzMlx1MDQzMF9cdTA0MWZcdTA0YWZcdTA0NDBcdTA0NGRcdTA0MzJfXHUwNDExXHUwNDMwXHUwNDMwXHUwNDQxXHUwNDMwXHUwNDNkX1x1MDQxMVx1MDQ0Zlx1MDQzY1x1MDQzMVx1MDQz''@;'; put 'put ''MCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MWRcdTA0NGZcdTA0M2NfXHUwNDE0XHUwNDMwXHUwNDMyX1x1MDQxY1x1MDQ0Zlx1MDQzM19cdTA0MWJcdTA0NDVcdTA0MzBfXHUwNDFmXHUwNGFmXHUwNDQwX1x1MDQxMVx1MDQzMFx1MDQzMF9cdTA0MTFcdTA0NGZcdTA0M2MiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQxZFx1MDQ0Zl9cdTA0MTRcdTA0MzBfXHUwNDFjXHUwNDRmX1x1MDQxYlx1MDQ0NV9cdTA0MWZcdTA0YWZfXHUwNDExXHUwNDMwX1x1MDQxMVx1MDQ0ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xU''@;'; put 'put ''OiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVkgXHUwNDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCIsTExMOiJZWVlZIFx1MDQzZVx1MDQzZFx1MDQ0YiBNTU1NXHUwNDRiXHUwNDNkIEQgSEg6bW0iLExMTEw6ImRkZGQsIFlZWVkgXHUwNDNl''@;'; put 'put ''XHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDRhZVx1MDRlOHxcdTA0YWVcdTA0MjUvaSxpc1BNOmZ1bmN0aW9uKEIpe3JldHVybiJcdTA0YWVcdTA0MjUiPT09Qn0sbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPDEyPyJc''@;'; put 'put ''dTA0YWVcdTA0ZTgiOiJcdTA0YWVcdTA0MjUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDRlOFx1MDQzZFx1MDRlOVx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MF0gTFQiLG5leHREYXk6IltcdTA0MWNcdTA0MzBcdTA0NDBcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDhdIExUIixuZXh0V2Vlazoi''@;'; put 'put ''W1x1MDQxOFx1MDQ0MFx1MDQ0ZFx1MDQ0NV0gZGRkZCBMVCIsbGFzdERheToiW1x1MDRlOFx1MDQ0N1x1MDQzOFx1MDQzM1x1MDQzNFx1MDRlOVx1MDQ0MF0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDNkXHUwNDMzXHUwNGU5XHUwNDQwXHUwNDQxXHUwNGU5XHUwNDNkXSBkZGRkIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA0MzRcdTA0MzBcdTA0NDBcdTA0MzBcdTA0MzAiLHBhc3Q6IiVzIFx1MDRlOVx1MDQzY1x1MDQzZFx1MDRlOSIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8sTTpfLE1NOl8seTpfLHl5Ol99LGRheU9m''@;'; put 'put ''TW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0gXHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwLyxvcmRpbmFsOmZ1bmN0aW9uKEIsdyl7c3dpdGNoKHcpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIEIrIiBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAiO2RlZmF1bHQ6cmV0dXJuIEJ9''@;'; put 'put ''fX0pfSh5KDk3NTg2KSl9LDU5MDgwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1''@;'; put 'put ''MDk2ZiIsMDoiXHUwOTY2In0sZz17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifTtmdW5jdGlvbiBCKFAs''@;'; put 'put ''RixPLHope3ZhciBOPSIiO2lmKEYpc3dpdGNoKE8pe2Nhc2UicyI6Tj0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNiI7YnJlYWs7Y2FzZSJzcyI6Tj0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2IjticmVhaztjYXNlIm0i''@;'; put 'put ''Ok49Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWYiO2JyZWFrO2Nhc2UibW0iOk49IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDk0NyI7YnJlYWs7Y2FzZSJoIjpOPSJcdTA5MGZcdTA5MTUgXHUwOTI0XHUwOTNlXHUwOTM4IjticmVhaztj''@;'; put 'put ''YXNlImhoIjpOPSIlZCBcdTA5MjRcdTA5M2VcdTA5MzgiO2JyZWFrO2Nhc2UiZCI6Tj0iXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOCI7YnJlYWs7Y2FzZSJkZCI6Tj0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4IjticmVhaztjYXNlIk0iOk49Ilx1MDkwZlx1MDkx''@;'; put 'put ''NSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiO2JyZWFrO2Nhc2UiTU0iOk49IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0NyI7YnJlYWs7Y2FzZSJ5IjpOPSJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3IjticmVhaztjYXNlInl5IjpOPSIlZCBc''@;'; put 'put ''dTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5NDcifWVsc2Ugc3dpdGNoKE8pe2Nhc2UicyI6Tj0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJzcyI6Tj0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1''@;'; put 'put ''XHUwOTAyXHUwOTI2XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIm0iOk49Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWZcdTA5M2UiO2JyZWFrO2Nhc2UibW0iOk49IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDkzZVx1MDkwMiI7''@;'; put 'put ''YnJlYWs7Y2FzZSJoIjpOPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI0XHUwOTNlXHUwOTM4XHUwOTNlIjticmVhaztjYXNlImhoIjpOPSIlZCBcdTA5MjRcdTA5M2VcdTA5MzhcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiZCI6Tj0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1MDkzZlx1''@;'; put 'put ''MDkzNVx1MDkzOFx1MDkzZSI7YnJlYWs7Y2FzZSJkZCI6Tj0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIk0iOk49Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2UiO2JyZWFrO2Nh''@;'; put 'put ''c2UiTU0iOk49IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJ5IjpOPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3XHUwOTNlIjticmVhaztjYXNlInl5IjpOPSIlZCBcdTA5MzVcdTA5MzBc''@;'; put 'put ''dTA5NGRcdTA5MzdcdTA5M2VcdTA5MDIifXJldHVybiBOLnJlcGxhY2UoLyVkL2ksUCl9SS5kZWZpbmVMb2NhbGUoIm1yIix7bW9udGhzOiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQx''@;'; put 'put ''XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2ZcdTA5MzJfXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5NDhfXHUwOTExXHUwOTE3XHUw''@;'; put 'put ''OTM4XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1''@;'; put 'put ''MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS5fXHUw''@;'; put 'put ''OTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmLl9cdTA5MmVcdTA5NDcuX1x1MDkxY1x1MDk0Mlx1MDkyOC5fXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTQ4Ll9cdTA5MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFm''@;'; put 'put ''XHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDIuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1''@;'; put 'put ''MDkzOFx1MDk0Ylx1MDkyZVx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZc''@;'; put 'put ''dTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1MDkzZl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUw''@;'; put 'put ''OTMzX1x1MDkyY1x1MDk0MVx1MDkyN19cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUw''@;'; put 'put ''OTQxX1x1MDkxN1x1MDk0MV9cdTA5MzZcdTA5NDFfXHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTFRTOiJBIGg6bW06c3MgXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMOiJERC9NTS9Z''@;'; put 'put ''WVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIn0sY2FsZW5kYXI6e3NhbWVEYXk6Iltc''@;'; put 'put ''dTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTA5XHUwOTI2XHUwOTRkXHUwOTJmXHUwOTNlXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmVcdTA5M2VcdTA5MTdcdTA5NDBcdTA5MzJdIGRkZGQs''@;'; put 'put ''IExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MDkyZVx1MDkyN1x1MDk0ZFx1MDkyZlx1MDk0NyIscGFzdDoiJXNcdTA5MmFcdTA5NDJcdTA5MzBcdTA5NGRcdTA5MzVcdTA5NDAiLHM6QixzczpCLG06QixtbTpCLGg6QixoaDpCLGQ6QixkZDpCLE06QixNTTpC''@;'; put 'put ''LHk6Qix5eTpCfSxwcmVwYXJzZTpmdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKEYpe3JldHVybiBnW0ZdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oUCl7''@;'; put 'put ''cmV0dXJuIFAucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihGKXtyZXR1cm4gX1tGXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5NDd8XHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwfFx1MDkyNlx1MDk0MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MHxc''@;'; put 'put ''dTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDB8XHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oUCxGKXtyZXR1cm4gMTI9PT1QJiYoUD0wKSwiXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUwOTQ3''@;'; put 'put ''Ij09PUZ8fCJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiPT09Rj9QOiJcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDAiPT09Rnx8Ilx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI9PT1GfHwiXHUwOTMwXHUwOTNlXHUwOTI0''@;'; put 'put ''XHUwOTRkXHUwOTMwXHUwOTQwIj09PUY/UD49MTI/UDpQKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oUCxGLE8pe3JldHVybiBQPj0wJiZQPDY/Ilx1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0NyI6UDwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIjpQPDE3PyJc''@;'; put 'put ''dTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDAiOlA8MjA/Ilx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9''@;'; put 'put ''LDI1OTUwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibXMtbXkiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJB''@;'; put 'put ''aGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwicGFnaSI9''@;'; put 'put ''PT1CP2c6InRlbmdhaGFyaSI9PT1CP2c+PTExP2c6ZysxMjoicGV0YW5nIj09PUJ8fCJtYWxhbSI9PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTE/InBhZ2kiOmc8MTU/InRlbmdhaGFyaSI6ZzwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRh''@;'; put 'put ''cjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJl''@;'; put 'put ''bGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4i''@;'; put 'put ''LE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNzAzOTk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJtcyIse21vbnRoczoiSmFudWFyaV9GZWJy''@;'; put 'put ''dWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi''@;'; put 'put ''QWhhZF9Jc25pbl9TZWxhc2FfUmFidV9LaGFtaXNfSnVtYWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWhfSXNfU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVG''@;'; put 'put ''b3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHRlbmdhaGFy''@;'; put 'put ''aXxwZXRhbmd8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJwYWdpIj09PUI/ZzoidGVuZ2FoYXJpIj09PUI/Zz49MTE/ZzpnKzEyOiJwZXRhbmciPT09Qnx8Im1hbGFtIj09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGcs''@;'; put 'put ''Qix3KXtyZXR1cm4gZzwxMT8icGFnaSI6ZzwxNT8idGVuZ2FoYXJpIjpnPDE5PyJwZXRhbmciOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbRXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6''@;'; put 'put ''IltLZWxtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZXBhcyBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbGFtICVzIixwYXN0OiIlcyB5YW5nIGxlcGFzIixzOiJiZWJlcmFwYSBzYWF0IixzczoiJWQgc2FhdCIsbToic2VtaW5pdCIs''@;'; put 'put ''bW06IiVkIG1pbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw3OTkwMjpmdW5jdGlvbih1ZSxY''@;'; put 'put ''LHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm10Iix7bW9udGhzOiJKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV9cdTAxMjB1bmp1X0x1bGp1X0F3d2lzc3VfU2V0dGVtYnJ1X090dHVicnVfTm92ZW1icnVfRGlcdTAxMGJlbWJydSIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHNTaG9ydDoiSmFuX0ZyYV9NYXJfQXByX01lal9cdTAxMjB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpXHUwMTBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJJbC1cdTAxMjZhZGRfSXQtVG5lam5fSXQtVGxpZXRhX0wtRXJiZ1x1MDEyN2FfSWwtXHUwMTI2YW1pc19JbC1cdTAxMjBp''@;'; put 'put ''bWdcdTAxMjdhX0lzLVNpYnQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwMTI2YWRfVG5lX1RsaV9FcmJfXHUwMTI2YW1fXHUwMTIwaW1fU2liIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTAxMjZhX1RuX1RsX0VyX1x1MDEyNmFfXHUwMTIwaV9TaSIuc3BsaXQoIl8iKSxsb25n''@;'; put 'put ''RGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJbGx1bSBmaWwtXUxUIixuZXh0''@;'; put 'put ''RGF5OiJbR1x1MDEyN2FkYSBmaWwtXUxUIixuZXh0V2VlazoiZGRkZCBbZmlsLV1MVCIsbGFzdERheToiW0lsLWJpZXJhXHUwMTI3IGZpbC1dTFQiLGxhc3RXZWVrOiJkZGRkIFtsaSBnXHUwMTI3YWRkYV0gW2ZpbC1dTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImZc''@;'; put 'put ''dTIwMTkgJXMiLHBhc3Q6IiVzIGlsdSIsczoiZnRpdCBzZWtvbmRpIixzczoiJWQgc2Vrb25kaSIsbToibWludXRhIixtbToiJWQgbWludXRpIixoOiJzaWVnXHUwMTI3YSIsaGg6IiVkIHNpZWdcdTAxMjdhdCIsZDoiXHUwMTIxdXJuYXRhIixkZDoiJWQgXHUwMTIxcmFuZXQiLE06InhhaGFy''@;'; put 'put ''IixNTToiJWQgeGh1ciIseToic2VuYSIseXk6IiVkIHNuaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDcyOTg1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgXz17MToiXHUxMDQxIiwyOiJcdTEwNDIiLDM6Ilx1MTA0MyIsNDoiXHUxMDQ0Iiw1OiJcdTEwNDUiLDY6Ilx1MTA0NiIsNzoiXHUxMDQ3Iiw4OiJcdTEwNDgiLDk6Ilx1MTA0OSIsMDoiXHUxMDQwIn0sZz17Ilx1MTA0MSI6IjEiLCJcdTEwNDIiOiIyIiwiXHUxMDQzIjoi''@;'; put 'put ''MyIsIlx1MTA0NCI6IjQiLCJcdTEwNDUiOiI1IiwiXHUxMDQ2IjoiNiIsIlx1MTA0NyI6IjciLCJcdTEwNDgiOiI4IiwiXHUxMDQ5IjoiOSIsIlx1MTA0MCI6IjAifTtJLmRlZmluZUxvY2FsZSgibXkiLHttb250aHM6Ilx1MTAwN1x1MTAxNFx1MTAzYVx1MTAxNFx1MTAxZFx1MTAyYlx1MTAx''@;'; put 'put ''Ylx1MTAyZV9cdTEwMTZcdTEwMzFcdTEwMTZcdTEwMzFcdTEwMmNcdTEwM2FcdTEwMWRcdTEwMmJcdTEwMWJcdTEwMmVfXHUxMDE5XHUxMDEwXHUxMDNhX1x1MTAyN1x1MTAxNVx1MTAzY1x1MTAyZV9cdTEwMTlcdTEwMzFfXHUxMDA3XHUxMDNkXHUxMDE0XHUxMDNhX1x1MTAwN1x1MTAzMFx1''@;'; put 'put ''MTAxY1x1MTAyZFx1MTAyZlx1MTAwNFx1MTAzYV9cdTEwMWVcdTEwM2NcdTEwMDJcdTEwMmZcdTEwMTBcdTEwM2FfXHUxMDA1XHUxMDAwXHUxMDNhXHUxMDEwXHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjX1x1MTAyMVx1MTAzMVx1MTAyY1x1MTAwMFx1MTAzYVx1MTAxMFx1MTAyZFx1MTAyZlx1''@;'; put 'put ''MTAxOFx1MTAyY19cdTEwMTRcdTEwMmRcdTEwMmZcdTEwMWRcdTEwMDRcdTEwM2FcdTEwMThcdTEwMmNfXHUxMDEyXHUxMDJlXHUxMDA3XHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTEwMDdcdTEwMTRcdTEwM2FfXHUxMDE2XHUxMDMxX1x1MTAx''@;'; put 'put ''OVx1MTAxMFx1MTAzYV9cdTEwMTVcdTEwM2NcdTEwMmVfXHUxMDE5XHUxMDMxX1x1MTAwN1x1MTAzZFx1MTAxNFx1MTAzYV9cdTEwMWNcdTEwMmRcdTEwMmZcdTEwMDRcdTEwM2FfXHUxMDFlXHUxMDNjX1x1MTAwNVx1MTAwMFx1MTAzYV9cdTEwMjFcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2Ff''@;'; put 'put ''XHUxMDE0XHUxMDJkXHUxMDJmX1x1MTAxMlx1MTAyZSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxMDEwXHUxMDE0XHUxMDA0XHUxMDNhXHUxMDM5XHUxMDAyXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxMFx1MTAxNFx1MTAwNFx1MTAzYVx1MTAzOVx1MTAxY1x1MTAyY19cdTEwMjFcdTEwMDRc''@;'; put 'put ''dTEwM2FcdTEwMzlcdTEwMDJcdTEwMmJfXHUxMDE3XHUxMDJmXHUxMDEyXHUxMDM5XHUxMDEzXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY1x1MTAxZVx1MTAxNVx1MTAxMFx1MTAzMVx1MTAzOF9cdTEwMWVcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDA1''@;'; put 'put ''XHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMWNcdTEwMmNfXHUxMDAyXHUxMDJiX1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDFlXHUxMDMxXHUxMDJjX1x1MTAxNFx1MTAzMSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c01pbjoiXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxY1x1MTAyY19cdTEwMDJcdTEwMmJfXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY19cdTEwMWVcdTEwMzFcdTEwMmNfXHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6''@;'; put 'put ''bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxMDFhXHUxMDE0XHUxMDMxLl0gTFQgW1x1MTAxOVx1MTAzZVx1''@;'; put 'put ''MTAyY10iLG5leHREYXk6IltcdTEwMTlcdTEwMTRcdTEwMDBcdTEwM2FcdTEwMTZcdTEwM2NcdTEwMTRcdTEwM2FdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixuZXh0V2VlazoiZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbGFzdERheToiW1x1MTAxOVx1MTAxNFx1MTAzMS5cdTEw''@;'; put 'put ''MDBdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixsYXN0V2VlazoiW1x1MTAxNVx1MTAzY1x1MTAyZVx1MTAzOFx1MTAwMVx1MTAzMlx1MTAzN1x1MTAxZVx1MTAzMVx1MTAyY10gZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy''@;'; put 'put ''ZToiXHUxMDFjXHUxMDJjXHUxMDE5XHUxMDBhXHUxMDNhXHUxMDM3ICVzIFx1MTAxOVx1MTAzZVx1MTAyYyIscGFzdDoiXHUxMDFjXHUxMDNkXHUxMDE0XHUxMDNhXHUxMDAxXHUxMDMyXHUxMDM3XHUxMDFlXHUxMDMxXHUxMDJjICVzIFx1MTAwMCIsczoiXHUxMDA1XHUxMDAwXHUxMDM5XHUx''@;'; put 'put ''MDAwXHUxMDE0XHUxMDNhLlx1MTAyMVx1MTAxNFx1MTAwYVx1MTAzYVx1MTAzOFx1MTAwNFx1MTAxYVx1MTAzYSIsc3M6IiVkIFx1MTAwNVx1MTAwMFx1MTAzOVx1MTAwMFx1MTAxNFx1MTAzN1x1MTAzYSIsbToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUx''@;'; put 'put ''MDNhIixtbToiJWQgXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUxMDNhIixoOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGhoOiIlZCBcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGQ6Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxYlx1MTAwMFx1MTAzYSIs''@;'; put 'put ''ZGQ6IiVkIFx1MTAxYlx1MTAwMFx1MTAzYSIsTToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDFjIixNTToiJWQgXHUxMDFjIix5OiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EiLHl5OiIlZCBcdTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EifSxwcmVwYXJzZTpmdW5j''@;'; put 'put ''dGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUxMDQxXHUxMDQyXHUxMDQzXHUxMDQ0XHUxMDQ1XHUxMDQ2XHUxMDQ3XHUxMDQ4XHUxMDQ5XHUxMDQwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxm''@;'; put 'put ''dW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2Nzg1OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm5iIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21h''@;'; put 'put ''aV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsd2Vla2RheXM6InNceGY4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjhyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNceGY4Ll9tYS5fdGkuX29uLl90by5fZnIuX2xceGY4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4Zjhf''@;'; put 'put ''bWFfdGlfb25fdG9fZnJfbFx4ZjgiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6Iltmb3Jy''@;'; put 'put ''aWdlXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6Im5vZW4gc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZXR0IG1pbnV0dCIsbW06IiVkIG1pbnV0dGVyIixoOiJceGU5biB0aW1lIixoaDoi''@;'; put 'put ''JWQgdGltZXIiLGQ6Ilx4ZTluIGRhZyIsZGQ6IiVkIGRhZ2VyIix3OiJceGU5biB1a2UiLHd3OiIlZCB1a2VyIixNOiJceGU5biBtXHhlNW5lZCIsTU06IiVkIG1ceGU1bmVkZXIiLHk6ImV0dCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwu''@;'; put 'put ''LyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDEzNjQyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1''@;'; put 'put ''MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sZz17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZm''@;'; put 'put ''IjoiOSIsIlx1MDk2NiI6IjAifTtJLmRlZmluZUxvY2FsZSgibmUiLHttb250aHM6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFh''@;'; put 'put ''X1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZlx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQxXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzdcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmXHUw''@;'; put 'put ''OTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MmRcdTA5NDdcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUw''@;'; put 'put ''OTMwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5MjguX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZi5fXHUwOTJlXHUwOTA4X1x1MDkxY1x1''@;'; put 'put ''MDk0MVx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDguX1x1MDkwNVx1MDkxNy5fXHUwOTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmLl9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkyZFx1MDk0Ny5fXHUwOTIxXHUwOTNmXHUwOTM4''@;'; put 'put ''XHUwOTQ3LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MDZcdTA5MDdcdTA5MjRcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkxOVx1MDk0ZFx1MDkxN1x1MDkzMlx1MDkyY1x1MDkz''@;'; put 'put ''ZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNmXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MmNcdTA5''@;'; put 'put ''M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTA2XHUwOTA3XHUwOTI0Ll9cdTA5MzhcdTA5NGJcdTA5MmUuX1x1MDkyZVx1MDkxOVx1MDk0ZFx1MDkxN1x1MDkzMi5fXHUwOTJjXHUwOTQxXHUwOTI3Ll9cdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2YuX1x1MDkzNlx1MDk0''@;'; put 'put ''MVx1MDkxNVx1MDk0ZFx1MDkzMC5fXHUwOTM2XHUwOTI4XHUwOTNmLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTA2Ll9cdTA5MzhcdTA5NGIuX1x1MDkyZVx1MDkwMi5fXHUwOTJjXHUwOTQxLl9cdTA5MmNcdTA5M2YuX1x1MDkzNlx1MDk0MS5fXHUwOTM2LiIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBXHUwOTE1XHUwOTRiIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMVFM6IkFcdTA5MTVcdTA5NGIgaDptbTpzcyBcdTA5MmNcdTA5MWNcdTA5NDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSwgQVx1MDkxNVx1MDk0YiBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEFcdTA5MTVcdTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDcifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwOTY3XHUw''@;'; put 'put ''OTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBh''@;'; put 'put ''cnNlOi9cdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2Z8XHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4fFx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YnxcdTA5MzhcdTA5M2VcdTA5MDFcdTA5MWQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcm''@;'; put 'put ''Jih3PTApLCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2YiPT09UD93PDQ/dzp3KzEyOiJcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5MjgiPT09UD93OiJcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGIiPT09UD93Pj0xMD93OncrMTI6Ilx1MDkzOFx1MDkzZVx1MDkwMVx1''@;'; put 'put ''MDkxZCI9PT1QP3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8Mz8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIjp3PDEyPyJcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5MjgiOnc8MTY/Ilx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0''@;'; put 'put ''YiI6dzwyMD8iXHUwOTM4XHUwOTNlXHUwOTAxXHUwOTFkIjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTJkXHUwOTRiXHUwOTMyXHUwOTNmXSBMVCIsbmV4dFdlZWs6IltcdTA5MDZcdTA5MDlc''@;'; put 'put ''dTA5MDFcdTA5MjZcdTA5NGJdIGRkZGRbLF0gTFQiLGxhc3REYXk6IltcdTA5MzlcdTA5M2ZcdTA5MWNcdTA5NGJdIExUIixsYXN0V2VlazoiW1x1MDkxN1x1MDkwZlx1MDkxNVx1MDk0Yl0gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTA5MmVc''@;'; put 'put ''dTA5M2UiLHBhc3Q6IiVzIFx1MDkwNVx1MDkxN1x1MDkzZVx1MDkyMVx1MDkzZiIsczoiXHUwOTE1XHUwOTQ3XHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkzN1x1MDkyMyIsc3M6IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDk0N1x1MDkyM1x1MDk0ZFx1MDkyMSIsbToiXHUwOTBmXHUw''@;'; put 'put ''OTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0N1x1MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0N1x1MDkxZiIsaDoiXHUwOTBmXHUwOTE1IFx1MDkxOFx1MDkyM1x1MDk0ZFx1MDkxZlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkyM1x1MDk0ZFx1MDkxZlx1MDkzZSIsZDoi''@;'; put 'put ''XHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkyOCIsZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIsTToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSIsTU06IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSIseToiXHUwOTBmXHUwOTE1IFx1''@;'; put 'put ''MDkyY1x1MDkzMFx1MDk0ZFx1MDkzNyIseXk6IiVkIFx1MDkyY1x1MDkzMFx1MDk0ZFx1MDkzNyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDk5ODc1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFuLl9mZWIuX21ydC5fYXBy''@;'; put 'put ''Ll9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxnPSJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxCPVsvXmphbi9pLC9eZmViL2ksL14obWFhcnR8bXJ0XC4/KSQvaSwvXmFwci9pLC9e''@;'; put 'put ''bWVpJC9pLC9eanVuW2kuXT8kL2ksL15qdWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLHc9L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJl''@;'; put 'put ''cnxqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUoIm5sLWJlIix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2Vw''@;'; put 'put ''dGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNT''@;'; put 'put ''dHJpY3RSZWdleDovXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oamFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fG1laXxqdVtu''@;'; put 'put ''bF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5czoiem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZyIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InpvX21hX2RpX3dvX2RvX3ZyX3phIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6''@;'; put 'put ''IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3ZhbmRhYWcgb21dIExUIixuZXh0RGF5OiJbbW9yZ2VuIG9tXSBMVCIsbmV4dFdl''@;'; put 'put ''ZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2dpc3RlcmVuIG9tXSBMVCIsbGFzdFdlZWs6IlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3ZlciAlcyIscGFzdDoiJXMgZ2VsZWRlbiIsczoiZWVuIHBhYXIgc2Vjb25kZW4i''@;'; put 'put ''LHNzOiIlZCBzZWNvbmRlbiIsbToiXHhlOVx4ZTluIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6Ilx4ZTlceGU5biB1dXIiLGhoOiIlZCB1dXIiLGQ6Ilx4ZTlceGU5biBkYWciLGRkOiIlZCBkYWdlbiIsTToiXHhlOVx4ZTluIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiXHhlOVx4ZTlu''@;'; put 'put ''IGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKEYpe3JldHVybiBGKygxPT09Rnx8OD09PUZ8fEY+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2NTQ0MTpm''@;'; put 'put ''dW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89Imphbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksZz0iamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25v''@;'; put 'put ''dl9kZWMiLnNwbGl0KCJfIiksQj1bL15qYW4vaSwvXmZlYi9pLC9eKG1hYXJ0fG1ydFwuPykkL2ksL15hcHIvaSwvXm1laSQvaSwvXmp1bltpLl0/JC9pLC9eanVsW2kuXT8kL2ksL15hdWcvaSwvXnNlcC9pLC9eb2t0L2ksL15ub3YvaSwvXmRlYy9pXSx3PS9eKGphbnVhcml8ZmVicnVhcml8''@;'; put 'put ''bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pO0kuZGVmaW5lTG9jYWxlKCJubCIs''@;'; put 'put ''e21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEYsTyl7cmV0dXJuIEY/Ly1NTU0tLy50ZXN0KE8pP2dbRi5t''@;'; put 'put ''b250aCgpXTpfW0YubW9udGgoKV06X30sbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikv''@;'; put 'put ''aSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xtZWl8anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2Rh''@;'; put 'put ''eXM6InpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ6b19tYV9kaV93b19kb192cl96YSIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6Ilt2YW5kYWFnIG9tXSBMVCIsbmV4dERheToiW21vcmdlbiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltnaXN0ZXJlbiBvbV0gTFQiLGxhc3RXZWVrOiJbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRp''@;'; put 'put ''dmVUaW1lOntmdXR1cmU6Im92ZXIgJXMiLHBhc3Q6IiVzIGdlbGVkZW4iLHM6ImVlbiBwYWFyIHNlY29uZGVuIixzczoiJWQgc2Vjb25kZW4iLG06Ilx4ZTlceGU5biBtaW51dXQiLG1tOiIlZCBtaW51dGVuIixoOiJceGU5XHhlOW4gdXVyIixoaDoiJWQgdXVyIixkOiJceGU5XHhlOW4gZGFn''@;'; put 'put ''IixkZDoiJWQgZGFnZW4iLHc6Ilx4ZTlceGU5biB3ZWVrIix3dzoiJWQgd2VrZW4iLE06Ilx4ZTlceGU5biBtYWFuZCIsTU06IiVkIG1hYW5kZW4iLHk6Ilx4ZTlceGU5biBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5h''@;'; put 'put ''bDpmdW5jdGlvbihGKXtyZXR1cm4gRisoMT09PUZ8fDg9PT1GfHxGPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODEzMTE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJubiIse21vbnRo''@;'; put 'put ''czoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5f''@;'; put 'put ''ZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzdW5kYWdfbVx4ZTVuZGFnX3R5c2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbGF1cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdS5fbVx4ZTUuX3R5Ll9vbi5fdG8uX2ZyLl9sYXUuIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tXHhlNV90eV9vbl90b19mcl9sYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1N''@;'; put 'put ''IFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0kgZGFnIGtsb2trYV0gTFQiLG5leHREYXk6IltJIG1vcmdvbiBrbG9ra2FdIExUIixuZXh0V2VlazoiZGRkZCBba2xva2thXSBMVCIsbGFzdERheToiW0kg''@;'; put 'put ''Z1x4ZTVyIGtsb2trYV0gTFQiLGxhc3RXZWVrOiJbRlx4ZjhyZWdceGU1YW5kZV0gZGRkZCBba2xva2thXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGFuIixzOiJub2tyZSBzZWt1bmQiLHNzOiIlZCBzZWt1bmQiLG06ImVpdCBt''@;'; put 'put ''aW51dHQiLG1tOiIlZCBtaW51dHQiLGg6ImVpbiB0aW1lIixoaDoiJWQgdGltYXIiLGQ6ImVpbiBkYWciLGRkOiIlZCBkYWdhciIsdzoiZWkgdmVrZSIsd3c6IiVkIHZla2VyIixNOiJlaW4gbVx4ZTVuYWQiLE1NOiIlZCBtXHhlNW5hZGVyIix5OiJlaXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9''@;'; put 'put ''LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw3MjU2NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm9jLWxuYyIse21vbnRoczp7''@;'; put 'put ''c3RhbmRhbG9uZToiZ2VuaVx4ZThyX2ZlYnJpXHhlOHJfbWFyXHhlN19hYnJpbF9tYWlfanVuaF9qdWxoZXRfYWdvc3Rfc2V0ZW1icmVfb2N0XHhmMmJyZV9ub3ZlbWJyZV9kZWNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmlceGU4cl9kZSBmZWJyaVx4ZThyX2RlIG1hclx4ZTdf''@;'; put 'put ''ZCdhYnJpbF9kZSBtYWlfZGUganVuaF9kZSBqdWxoZXRfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdFx4ZjJicmVfZGUgbm92ZW1icmVfZGUgZGVjZW1icmUiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhccykrTU1NTS99LG1vbnRoc1Nob3J0OiJnZW4uX2ZlYnIuX21hclx4ZTdfYWJy''@;'; put 'put ''Ll9tYWlfanVuaF9qdWxoLl9hZ28uX3NldC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltZW5nZV9kaWx1bnNfZGltYXJzX2RpbVx4ZThjcmVzX2Rpalx4ZjJ1c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNTaG9ydDoiZGcuX2RsLl9kbS5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kbV9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01N''@;'; put 'put ''L1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tIixsbGw6IkQgTU1NIFlZWVksIEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVksIEg6bW0i''@;'; put 'put ''fSxjYWxlbmRhcjp7c2FtZURheToiW3VceGU4aSBhXSBMVCIsbmV4dERheToiW2RlbWFuIGFdIExUIixuZXh0V2VlazoiZGRkZCBbYV0gTFQiLGxhc3REYXk6IltpXHhlOHIgYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNzYXQgYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntm''@;'; put 'put ''dXR1cmU6ImQnYXF1XHhlZCAlcyIscGFzdDoiZmEgJXMiLHM6InVuYXMgc2Vnb25kYXMiLHNzOiIlZCBzZWdvbmRhcyIsbToidW5hIG1pbnV0YSIsbW06IiVkIG1pbnV0YXMiLGg6InVuYSBvcmEiLGhoOiIlZCBvcmFzIixkOiJ1biBqb3JuIixkZDoiJWQgam9ybnMiLE06InVuIG1lcyIsTU06''@;'; put 'put ''IiVkIG1lc2VzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0ocnxufHR8XHhlOHxhKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3ZhciB3PTE9PT1nPyJyIjoyPT09Zz8ibiI6Mz09PWc/InIiOjQ9PT1nPyJ0IjoiXHhlOCI7cmV0dXJuKCJ3''@;'; put 'put ''Ij09PUJ8fCJXIj09PUIpJiYodz0iYSIpLGcrd30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNTY5NjI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBhNjciLDI6Ilx1MGE2OCIsMzoiXHUwYTY5Iiw0OiJcdTBhNmEiLDU6''@;'; put 'put ''Ilx1MGE2YiIsNjoiXHUwYTZjIiw3OiJcdTBhNmQiLDg6Ilx1MGE2ZSIsOToiXHUwYTZmIiwwOiJcdTBhNjYifSxnPXsiXHUwYTY3IjoiMSIsIlx1MGE2OCI6IjIiLCJcdTBhNjkiOiIzIiwiXHUwYTZhIjoiNCIsIlx1MGE2YiI6IjUiLCJcdTBhNmMiOiI2IiwiXHUwYTZkIjoiNyIsIlx1MGE2''@;'; put 'put ''ZSI6IjgiLCJcdTBhNmYiOiI5IiwiXHUwYTY2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJwYS1pbiIse21vbnRoczoiXHUwYTFjXHUwYTI4XHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyYlx1MGEzY1x1MGEzMFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmVcdTBhM2VcdTBhMzBcdTBhMWFfXHUwYTA1''@;'; put 'put ''XHUwYTJhXHUwYTRkXHUwYTMwXHUwYTQ4XHUwYTMyX1x1MGEyZVx1MGEwOF9cdTBhMWNcdTBhNDJcdTBhMjhfXHUwYTFjXHUwYTQxXHUwYTMyXHUwYTNlXHUwYTA4X1x1MGEwNVx1MGExN1x1MGEzOFx1MGEyNF9cdTBhMzhcdTBhMjRcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTA1XHUwYTE1XHUw''@;'; put 'put ''YTI0XHUwYTQyXHUwYTJjXHUwYTMwX1x1MGEyOFx1MGEzNVx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMjZcdTBhMzhcdTBhNzBcdTBhMmNcdTBhMzAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGExY1x1MGEyOFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmJcdTBhM2NcdTBhMzBcdTBhMzVc''@;'; put 'put ''dTBhMzBcdTBhNDBfXHUwYTJlXHUwYTNlXHUwYTMwXHUwYTFhX1x1MGEwNVx1MGEyYVx1MGE0ZFx1MGEzMFx1MGE0OFx1MGEzMl9cdTBhMmVcdTBhMDhfXHUwYTFjXHUwYTQyXHUwYTI4X1x1MGExY1x1MGE0MVx1MGEzMlx1MGEzZVx1MGEwOF9cdTBhMDVcdTBhMTdcdTBhMzhcdTBhMjRfXHUw''@;'; put 'put ''YTM4XHUwYTI0XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEwNVx1MGExNVx1MGEyNFx1MGE0Mlx1MGEyY1x1MGEzMF9cdTBhMjhcdTBhMzVcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTI2XHUwYTM4XHUwYTcwXHUwYTJjXHUwYTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBhMTBcdTBhMjRcdTBh''@;'; put 'put ''MzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTRiXHUwYTJlXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMlx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMmNcdTBhNDFcdTBhMjdcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM1XHUwYTQwXHUwYTMwXHUwYTM1XHUwYTNlXHUw''@;'; put 'put ''YTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGE3MVx1MGExNVx1MGEzMFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDBcdTBhMWFcdTBhMzBcdTBhMzVcdTBhM2VcdTBhMzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYTEwXHUwYTI0X1x1MGEzOFx1MGE0''@;'; put 'put ''Ylx1MGEyZV9cdTBhMmVcdTBhNzBcdTBhMTdcdTBhMzJfXHUwYTJjXHUwYTQxXHUwYTI3X1x1MGEzNVx1MGE0MFx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhNDFcdTBhMTVcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTI4XHUwYTQwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBhMTBcdTBhMjRf''@;'; put 'put ''XHUwYTM4XHUwYTRiXHUwYTJlX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMl9cdTBhMmNcdTBhNDFcdTBhMjdfXHUwYTM1XHUwYTQwXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGExNVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6''@;'; put 'put ''e0xUOiJBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3IixMVFM6IkEgaDptbTpzcyBcdTBhMzVcdTBhMWNcdTBhNDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZ''@;'; put 'put ''WVksIEEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGEwNVx1MGExY10gTFQiLG5leHREYXk6IltcdTBhMTVcdTBhMzJdIExUIixuZXh0V2VlazoiW1x1MGEwNVx1MGExN1x1MGEzMlx1MGEzZV0gZGRkZCwgTFQiLGxhc3REYXk6IltcdTBhMTVcdTBh''@;'; put 'put ''MzJdIExUIixsYXN0V2VlazoiW1x1MGEyYVx1MGEzZlx1MGExYlx1MGEzMlx1MGE0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGEzNVx1MGEzZlx1MGE3MVx1MGExYSIscGFzdDoiJXMgXHUwYTJhXHUwYTNmXHUwYTFiXHUwYTMyXHUwYTQ3''@;'; put 'put ''IixzOiJcdTBhMTVcdTBhNDFcdTBhMWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixzczoiJWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixtOiJcdTBhMDdcdTBhMTUgXHUwYTJlXHUwYTNmXHUwYTcwXHUwYTFmIixtbToiJWQgXHUwYTJlXHUwYTNmXHUwYTcwXHUw''@;'; put 'put ''YTFmIixoOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTNlIixoaDoiJWQgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTQ3IixkOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTI2XHUwYTNmXHUwYTI4IixkZDoiJWQgXHUwYTI2XHUwYTNmXHUwYTI4IixNOiJcdTBhMDdc''@;'; put 'put ''dTBhNzFcdTBhMTUgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTNlIixNTToiJWQgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTQ3Iix5OiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTM4XHUwYTNlXHUwYTMyIix5eToiJWQgXHUwYTM4XHUwYTNlXHUwYTMyIn0scHJlcGFyc2U6ZnVu''@;'; put 'put ''Y3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGE2N1x1MGE2OFx1MGE2OVx1MGE2YVx1MGE2Ylx1MGE2Y1x1MGE2ZFx1MGE2ZVx1MGE2Zlx1MGE2Nl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2cs''@;'; put 'put ''ZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwYTMwXHUwYTNlXHUwYTI0fFx1MGEzOFx1MGEzNVx1MGE0N1x1MGEzMHxcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzB8XHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJlLyxtZXJpZGllbUhvdXI6ZnVu''@;'; put 'put ''Y3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwYTMwXHUwYTNlXHUwYTI0Ij09PVA/dzw0P3c6dysxMjoiXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwIj09PVA/dzoiXHUwYTI2XHUwYTQxXHUwYTJhXHUwYTM5XHUwYTNmXHUwYTMwIj09PVA/dz49MTA/dzp3KzEyOiJcdTBhMzhc''@;'; put 'put ''dTBhM2NcdTBhM2VcdTBhMmUiPT09UD93KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MGEzMFx1MGEzZVx1MGEyNCI6dzwxMD8iXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwIjp3PDE3PyJcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBh''@;'; put 'put ''MzAiOnc8MjA/Ilx1MGEzOFx1MGEzY1x1MGEzZVx1MGEyZSI6Ilx1MGEzMFx1MGEzZVx1MGEyNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDYxMDYzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0ic3R5Y3plXHUwMTQ0X2x1dHlf''@;'; put 'put ''bWFyemVjX2t3aWVjaWVcdTAxNDRfbWFqX2N6ZXJ3aWVjX2xpcGllY19zaWVycGllXHUwMTQ0X3dyemVzaWVcdTAxNDRfcGFcdTAxN2Fkemllcm5pa19saXN0b3BhZF9ncnVkemllXHUwMTQ0Ii5zcGxpdCgiXyIpLGc9InN0eWN6bmlhX2x1dGVnb19tYXJjYV9rd2lldG5pYV9tYWphX2N6ZXJ3''@;'; put 'put ''Y2FfbGlwY2Ffc2llcnBuaWFfd3J6ZVx1MDE1Ym5pYV9wYVx1MDE3YWR6aWVybmlrYV9saXN0b3BhZGFfZ3J1ZG5pYSIuc3BsaXQoIl8iKSxCPVsvXnN0eS9pLC9ebHV0L2ksL15tYXIvaSwvXmt3aS9pLC9ebWFqL2ksL15jemUvaSwvXmxpcC9pLC9ec2llL2ksL153cnovaSwvXnBhXHUwMTdh''@;'; put 'put ''L2ksL15saXMvaSwvXmdydS9pXTtmdW5jdGlvbiB3KE8pe3JldHVybiBPJTEwPDUmJk8lMTA+MSYmfn4oTy8xMCklMTAhPTF9ZnVuY3Rpb24gUChPLHosTil7dmFyIEw9TysiICI7c3dpdGNoKE4pe2Nhc2Uic3MiOnJldHVybiBMKyh3KE8pPyJzZWt1bmR5Ijoic2VrdW5kIik7Y2FzZSJtIjpy''@;'; put 'put ''ZXR1cm4gej8ibWludXRhIjoibWludXRcdTAxMTkiO2Nhc2UibW0iOnJldHVybiBMKyh3KE8pPyJtaW51dHkiOiJtaW51dCIpO2Nhc2UiaCI6cmV0dXJuIHo/ImdvZHppbmEiOiJnb2R6aW5cdTAxMTkiO2Nhc2UiaGgiOnJldHVybiBMKyh3KE8pPyJnb2R6aW55IjoiZ29kemluIik7Y2FzZSJ3''@;'; put 'put ''dyI6cmV0dXJuIEwrKHcoTyk/InR5Z29kbmllIjoidHlnb2RuaSIpO2Nhc2UiTU0iOnJldHVybiBMKyh3KE8pPyJtaWVzaVx1MDEwNWNlIjoibWllc2lcdTAxMTljeSIpO2Nhc2UieXkiOnJldHVybiBMKyh3KE8pPyJsYXRhIjoibGF0Iil9fUkuZGVmaW5lTG9jYWxlKCJwbCIse21vbnRoczpm''@;'; put 'put ''dW5jdGlvbihPLHope3JldHVybiBPPy9EIE1NTU0vLnRlc3Qoeik/Z1tPLm1vbnRoKCldOl9bTy5tb250aCgpXTpffSxtb250aHNTaG9ydDoic3R5X2x1dF9tYXJfa3dpX21hal9jemVfbGlwX3NpZV93cnpfcGFcdTAxN2FfbGlzX2dydSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZTpCLGxvbmdN''@;'; put 'put ''b250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5czoibmllZHppZWxhX3BvbmllZHppYVx1MDE0MmVrX3d0b3Jla19cdTAxNWJyb2RhX2N6d2FydGVrX3BpXHUwMTA1dGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZHpfcG9uX3d0X1x1MDE1YnJfY3p3''@;'; put 'put ''X3B0X3NvYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTmRfUG5fV3RfXHUwMTVhcl9Del9QdF9TbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltEemlcdTAxNWIgb10gTFQiLG5leHREYXk6IltKdXRybyBvXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbVyBuaWVkemllbFx1MDEx''@;'; put 'put ''OSBvXSBMVCI7Y2FzZSAyOnJldHVybiJbV2Ugd3RvcmVrIG9dIExUIjtjYXNlIDM6cmV0dXJuIltXIFx1MDE1YnJvZFx1MDExOSBvXSBMVCI7Y2FzZSA2OnJldHVybiJbVyBzb2JvdFx1MDExOSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1ddIGRkZGQgW29dIExUIn19LGxhc3REYXk6IltXY3pv''@;'; put 'put ''cmFqIG9dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUgbmllZHppZWxcdTAxMTkgb10gTFQiO2Nhc2UgMzpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBcdTAxNWJyb2RcdTAxMTkgb10gTFQiO2Nh''@;'; put 'put ''c2UgNjpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBzb2JvdFx1MDExOSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1cgemVzelx1MDE0MnldIGRkZGQgW29dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiIlcyB0ZW11IixzOiJraWxrYSBz''@;'; put 'put ''ZWt1bmQiLHNzOlAsbTpQLG1tOlAsaDpQLGhoOlAsZDoiMSBkemllXHUwMTQ0IixkZDoiJWQgZG5pIix3OiJ0eWR6aWVcdTAxNDQiLHd3OlAsTToibWllc2lcdTAxMDVjIixNTTpQLHk6InJvayIseXk6UH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4i''@;'; put 'put ''LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDk3NDc2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgicHQtYnIiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVsaG9f''@;'; put 'put ''YWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyXHhl''@;'; put 'put ''N2EtZmVpcmFfcXVhcnRhLWZlaXJhX3F1aW50YS1mZWlyYV9zZXh0YS1mZWlyYV9zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX3NlZ190ZXJfcXVhX3F1aV9zZXhfc1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb18yXHhhYV8zXHhhYV80XHhhYV81XHhh''@;'; put 'put ''YV82XHhhYV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW1x4ZTBz''@;'; put 'put ''XSBISDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFtceGUwc10gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvamUgXHhlMHNdIExUIixuZXh0RGF5OiJbQW1hbmhceGUzIFx4ZTBzXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBzXSBMVCIsbGFzdERheToiW09u''@;'; put 'put ''dGVtIFx4ZTBzXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCl8fDY9PT10aGlzLmRheSgpPyJbXHhkYWx0aW1vXSBkZGRkIFtceGUwc10gTFQiOiJbXHhkYWx0aW1hXSBkZGRkIFtceGUwc10gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiJlbSAlcyIscGFzdDoiaFx4ZTEgJXMiLHM6InBvdWNvcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1bSBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bWEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1bSBkaWEiLGRkOiIlZCBkaWFzIixNOiJ1bSBtXHhlYXMiLE1NOiIl''@;'; put 'put ''ZCBtZXNlcyIseToidW0gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLGludmFsaWREYXRlOiJEYXRhIGludlx4ZTFsaWRhIn0pfSh5KDk3NTg2KSl9LDc4NzE5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9u''@;'; put 'put ''KEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgicHQiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imph''@;'; put 'put ''bl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEb21pbmdvX1NlZ3VuZGEtZmVpcmFfVGVyXHhlN2EtZmVpcmFfUXVhcnRhLWZlaXJhX1F1aW50YS1mZWlyYV9TZXh0YS1mZWlyYV9TXHhlMWJhZG8iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiRG9tX1NlZ19UZXJfUXVhX1F1aV9TZXhfU1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb18yXHhhYV8zXHhhYV80XHhhYV81XHhhYV82XHhhYV9TXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJI''@;'; put 'put ''SDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9qZSBc''@;'; put 'put ''eGUwc10gTFQiLG5leHREYXk6IltBbWFuaFx4ZTMgXHhlMHNdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMHNdIExUIixsYXN0RGF5OiJbT250ZW0gXHhlMHNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKXx8Nj09PXRoaXMuZGF5KCk/IltceGRhbHRpbW9d''@;'; put 'put ''IGRkZGQgW1x4ZTBzXSBMVCI6IltceGRhbHRpbWFdIGRkZGQgW1x4ZTBzXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVtICVzIixwYXN0OiJoXHhlMSAlcyIsczoic2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW0gbWludXRvIixtbToiJWQgbWludXRv''@;'; put 'put ''cyIsaDoidW1hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW0gZGlhIixkZDoiJWQgZGlhcyIsdzoidW1hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVtIG1ceGVhcyIsTU06IiVkIG1lc2VzIix5OiJ1bSBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7''@;'; put 'put ''MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNTEwMDQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQix3LFApe3ZhciBPPSIgIjtyZXR1cm4oQiUxMDA+PTIwfHxCPj0xMDAmJkIl''@;'; put 'put ''MTAwPT0wKSYmKE89IiBkZSAiKSxCK08re3NzOiJzZWN1bmRlIixtbToibWludXRlIixoaDoib3JlIixkZDoiemlsZSIsd3c6InNcdTAxMDNwdFx1MDEwM21ceGUybmkiLE1NOiJsdW5pIix5eToiYW5pIn1bUF19SS5kZWZpbmVMb2NhbGUoInJvIix7bW9udGhzOiJpYW51YXJpZV9mZWJydWFy''@;'; put 'put ''aWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJpYW4uX2ZlYi5fbWFydC5fYXByLl9tYWlfaXVuLl9pdWwuX2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2Rl''@;'; put 'put ''Yy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZHVtaW5pY1x1MDEwM19sdW5pX21hclx1MDIxYmlfbWllcmN1cmlfam9pX3ZpbmVyaV9zXHhlMm1iXHUwMTAzdFx1MDEwMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEdW1fTHVuX01hcl9NaWVfSm9pX1Zp''@;'; put 'put ''bl9TXHhlMm0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkR1X0x1X01hX01pX0pvX1ZpX1NceGUyIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIs''@;'; put 'put ''TExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXppIGxhXSBMVCIsbmV4dERheToiW21ceGUyaW5lIGxhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2xhXSBMVCIsbGFzdERheToiW2llcmkgbGFdIExUIixsYXN0V2VlazoiW2Zvc3RhXSBkZGRkIFtsYV0g''@;'; put 'put ''TFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBlc3RlICVzIixwYXN0OiIlcyBceGVlbiB1cm1cdTAxMDMiLHM6ImNceGUydGV2YSBzZWN1bmRlIixzczpfLG06InVuIG1pbnV0IixtbTpfLGg6Im8gb3JcdTAxMDMiLGhoOl8sZDoibyB6aSIsZGQ6Xyx3OiJvIHNcdTAx''@;'; put 'put ''MDNwdFx1MDEwM21ceGUyblx1MDEwMyIsd3c6XyxNOiJvIGx1blx1MDEwMyIsTU06Xyx5OiJ1biBhbiIseXk6X30sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNTEzMjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoUCxGLE8p''@;'; put 'put ''e3JldHVybiJtIj09PU8/Rj8iXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIjoiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDQzIjpQKyIgIitmdW5jdGlvbiBfKFAsRil7dmFyIE89UC5zcGxpdCgiXyIpO3JldHVybiBGJTEwPT0xJiZGJTEwMCE9MTE/T1sw''@;'; put 'put ''XTpGJTEwPj0yJiZGJTEwPD00JiYoRiUxMDA8MTB8fEYlMTAwPj0yMCk/T1sxXTpPWzJdfSh7c3M6Rj8iXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2Fc''@;'; put 'put ''dTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06Rj8iXHUwNDNjXHUwNDM4XHUw''@;'; put 'put ''NDNkXHUwNDQzXHUwNDQyXHUwNDMwX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0Yl9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NDNfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDRi''@;'; put 'put ''X1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MV9cdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzBfXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDNlXHUwNDMyIixkZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ0Zl9cdTA0''@;'; put 'put ''MzRcdTA0M2RcdTA0MzVcdTA0MzkiLHd3OiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDM4X1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0YyIsTU06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0''@;'; put 'put ''Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0MzBfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDM1XHUwNDMyIix5eToiXHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzMF9cdTA0M2JcdTA0MzVcdTA0NDIifVtPXSwrUCl9''@;'; put 'put ''dmFyIEI9Wy9eXHUwNDRmXHUwNDNkXHUwNDMyL2ksL15cdTA0NDRcdTA0MzVcdTA0MzIvaSwvXlx1MDQzY1x1MDQzMFx1MDQ0MC9pLC9eXHUwNDMwXHUwNDNmXHUwNDQwL2ksL15cdTA0M2NcdTA0MzBbXHUwNDM5XHUwNDRmXS9pLC9eXHUwNDM4XHUwNDRlXHUwNDNkL2ksL15cdTA0MzhcdTA0''@;'; put 'put ''NGVcdTA0M2IvaSwvXlx1MDQzMFx1MDQzMlx1MDQzMy9pLC9eXHUwNDQxXHUwNDM1XHUwNDNkL2ksL15cdTA0M2VcdTA0M2FcdTA0NDIvaSwvXlx1MDQzZFx1MDQzZVx1MDQ0Zi9pLC9eXHUwNDM0XHUwNDM1XHUwNDNhL2ldO0kuZGVmaW5lTG9jYWxlKCJydSIse21vbnRoczp7Zm9ybWF0OiJc''@;'; put 'put ''dTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGZfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRmX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMF9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNjXHUwNDMwXHUwNDRm''@;'; put 'put ''X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGZfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0''@;'; put 'put ''NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGNfXHUw''@;'; put 'put ''NDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2Jc''@;'; put 'put ''dTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQw''@;'; put 'put ''XHUwNDRjX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0MC5fXHUwNDMwXHUwNDNmXHUw''@;'; put 'put ''NDQwLl9cdTA0M2NcdTA0MzBcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Zl9cdTA0MzBcdTA0MzJcdTA0MzMuX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mi5fXHUwNDNlXHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzEu''@;'; put 'put ''X1x1MDQzNFx1MDQzNVx1MDQzYS4iLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0''@;'; put 'put ''NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyLl9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMS5fXHUwNDM0XHUwNDM1XHUwNDNhLiIuc3BsaXQoIl8iKX0s''@;'; put 'put ''d2Vla2RheXM6e3N0YW5kYWxvbmU6Ilx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUw''@;'; put 'put ''NDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDMwX1x1MDQ0MVx1MDQ0M1x1''@;'; put 'put ''MDQzMVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGNc''@;'; put 'put ''dTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4''@;'; put 'put ''XHUwNDQ2XHUwNDQzX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MTJcdTA0MzJdID8oPzpcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0NDNcdTA0NGV8XHUwNDQxXHUwNDNiXHUwNDM1XHUw''@;'; put 'put ''NDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDQzXHUwNDRlfFx1MDQ0ZFx1MDQ0Mlx1MDQ0Myk/ID9dID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDMyXHUwNDQxX1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQx''@;'; put 'put ''XHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzJcdTA0NDFfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6''@;'; put 'put ''QixzaG9ydE1vbnRoc1BhcnNlOkIsbW9udGhzUmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDRmXHUwNDNkXHUwNDMyXC4/fFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQ0NFx1MDQz''@;'; put 'put ''NVx1MDQzMlx1MDQ0MD9cLj98XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0M2NcdTA0MzBcdTA0NDBcLj98XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDMwXHUwNDNmXHUwNDQwXC4/fFx1MDQzY1x1MDQzMFtcdTA0MzlcdTA0NGZd''@;'; put 'put ''fFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFwuP3xcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2JcLj98XHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwP3xcdTA0MzBcdTA0''@;'; put 'put ''MzJcdTA0MzNcLj98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wuP3xcdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2VcdTA0M2FcdTA0''@;'; put 'put ''NDJcLj98XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxP1wuP3xcdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0MzRcdTA0MzVcdTA0M2FcLj8pL2ksbW9udGhzU2hv''@;'; put 'put ''cnRSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NGZcdTA0M2RcdTA0MzJcLj98XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwP1wuP3xcdTA0M2Nc''@;'; put 'put ''dTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzY1x1MDQzMFx1MDQ0MFwuP3xcdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzBcdTA0M2ZcdTA0NDBcLj98XHUwNDNjXHUwNDMwW1x1MDQzOVx1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkW1x1MDQ0''@;'; put 'put ''Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkXC4/fFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzYlwuP3xcdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzA/fFx1MDQzMFx1MDQzMlx1MDQzM1wuP3xcdTA0NDFcdTA0MzVc''@;'; put 'put ''dTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDI/XC4/fFx1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZVx1MDQzYVx1MDQ0MlwuP3xcdTA0M2RcdTA0M2VcdTA0NGZc''@;'; put 'put ''dTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzE/XC4/fFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzNFx1MDQzNVx1MDQzYVwuPykvaSxtb250aHNTdHJpY3RSZWdleDovXihcdTA0NGZcdTA0M2Rc''@;'; put 'put ''dTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRmXHUwNDRjXXxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQz''@;'; put 'put ''Y1x1MDQzMFtcdTA0NGZcdTA0MzldfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGZcdTA0NGNdfFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMD98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUw''@;'; put 'put ''NDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1''@;'; put 'put ''MDQ0Y10pL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcLnxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDA/XC58XHUwNDNjXHUwNDMwXHUwNDQwW1x1MDQ0Mi5dfFx1MDQzMFx1MDQzZlx1MDQ0MFwufFx1MDQzY1x1MDQzMFtcdTA0NGZcdTA0MzldfFx1MDQz''@;'; put 'put ''OFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGYuXXxcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmLl18XHUwNDMwXHUwNDMyXHUwNDMzXC58XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wufFx1MDQzZVx1MDQzYVx1MDQ0MlwufFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMT9cLnxcdTA0''@;'; put 'put ''MzRcdTA0MzVcdTA0M2FcLikvaSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiwgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDMzLiwg''@;'; put 'put ''SDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDIxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDRmLCBcdTA0MzJdIExUIixuZXh0RGF5OiJbXHUwNDE3XHUwNDMwXHUwNDMyXHUwNDQyXHUwNDQwXHUwNDMwLCBcdTA0MzJdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3''@;'; put 'put ''XHUwNDM1XHUwNDQwXHUwNDMwLCBcdTA0MzJdIExUIixuZXh0V2VlazpmdW5jdGlvbihQKXtpZihQLndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5kYXkoKT8iW1x1MDQxMlx1MDQzZV0gZGRkZCwgW1x1MDQzMl0gTFQiOiJbXHUwNDEyXSBkZGRkLCBbXHUwNDMyXSBMVCI7''@;'; put 'put ''c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzVcdTA0MzVdIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2Jc''@;'; put 'put ''dTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzhcdTA0MzldIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0NDNcdTA0NGVdIGRkZGQsIFtcdTA0''@;'; put 'put ''MzJdIExUIn19LGxhc3RXZWVrOmZ1bmN0aW9uKFApe2lmKFAud2VlaygpPT09dGhpcy53ZWVrKCkpcmV0dXJuIDI9PT10aGlzLmRheSgpPyJbXHUwNDEyXHUwNDNlXSBkZGRkLCBbXHUwNDMyXSBMVCI6IltcdTA0MTJdIGRkZGQsIFtcdTA0MzJdIExUIjtzd2l0Y2godGhpcy5kYXkoKSl7Y2Fz''@;'; put 'put ''ZSAwOnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzNV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0Ylx1MDQzOV0gZGRk''@;'; put 'put ''ZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0M1x1MDQ0ZV0gZGRkZCwgW1x1MDQzMl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDQ3XHUwNDM1''@;'; put 'put ''XHUwNDQwXHUwNDM1XHUwNDM3ICVzIixwYXN0OiIlcyBcdTA0M2RcdTA0MzBcdTA0MzdcdTA0MzBcdTA0MzQiLHM6Ilx1MDQzZFx1MDQzNVx1MDQ0MVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOmcs''@;'; put 'put ''bTpnLG1tOmcsaDoiXHUwNDQ3XHUwNDMwXHUwNDQxIixoaDpnLGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6Zyx3OiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGYiLHd3OmcsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2IixNTTpnLHk6Ilx1MDQz''@;'; put 'put ''M1x1MDQzZVx1MDQzNCIseXk6Z30sbWVyaWRpZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDM4fFx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMHxcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwL2ksaXNQTTpmdW5jdGlvbihQKXtyZXR1''@;'; put 'put ''cm4vXihcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwKSQvLnRlc3QoUCl9LG1lcmlkaWVtOmZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gUDw0PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0MzgiOlA8MTI/Ilx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQz''@;'; put 'put ''MCI6UDwxNz8iXHUwNDM0XHUwNDNkXHUwNDRmIjoiXHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM5fFx1MDQzM1x1MDQzZXxcdTA0NGYpLyxvcmRpbmFsOmZ1bmN0aW9uKFAsRil7c3dpdGNoKEYpe2Nh''@;'; put 'put ''c2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6cmV0dXJuIFArIi1cdTA0MzkiO2Nhc2UiRCI6cmV0dXJuIFArIi1cdTA0MzNcdTA0M2UiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gUCsiLVx1MDQ0ZiI7ZGVmYXVsdDpyZXR1cm4gUH19LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDcy''@;'; put 'put ''NjA4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz1bIlx1MDYyY1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0MVx1MDY0YVx1MDYyOFx1MDYzMVx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIsIlx1MDYy''@;'; put 'put ''N1x1MDY3ZVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyNlx1MDY0YSIsIlx1MDYyY1x1MDY0OFx1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0NFx1MDYyN1x1MDYyMVx1MDY1MCIsIlx1MDYyMlx1MDZhZlx1MDYzM1x1MDY3ZCIsIlx1MDYzM1x1MDY0YVx1MDY3ZVx1MDY3ZFx1MDY0''@;'; put 'put ''NVx1MDYyOFx1MDYzMSIsIlx1MDYyMlx1MDZhYVx1MDY3ZFx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDY4YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLGc9WyJcdTA2MjJcdTA2ODZcdTA2MzEiLCJcdTA2MzNcdTA2NDhcdTA2NDVc''@;'; put 'put ''dTA2MzEiLCJcdTA2MjdcdTA2YjFcdTA2MjdcdTA2MzFcdTA2NDgiLCJcdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzkiLCJcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzMiLCJcdTA2MmNcdTA2NDVcdTA2MzkiLCJcdTA2ODdcdTA2NDZcdTA2ODdcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgic2QiLHtt''@;'; put 'put ''b250aHM6Xyxtb250aHNTaG9ydDpfLHdlZWtkYXlzOmcsd2Vla2RheXNTaG9ydDpnLHdlZWtkYXlzTWluOmcsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkXHUwNjBjIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1XHUwNjI4XHUwNjJkfFx1MDYzNFx1MDYyN1x1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjM0XHUwNjI3XHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1''@;'; put 'put ''cm4gdzwxMj8iXHUwNjM1XHUwNjI4XHUwNjJkIjoiXHUwNjM0XHUwNjI3XHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2ODRdIExUIixuZXh0RGF5OiJbXHUwNjMzXHUwNjgwXHUwNjI3XHUwNmJiXHUwNjRhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYyN1x1MDZiM1x1''@;'; put 'put ''MDY0YVx1MDY0NiBcdTA2NDdcdTA2NDFcdTA2MmFcdTA2NGEgXHUwNjJhXHUwNjRhXSBMVCIsbGFzdERheToiW1x1MDZhYVx1MDYyN1x1MDY0NFx1MDY0N1x1MDY0N10gTFQiLGxhc3RXZWVrOiJbXHUwNmFmXHUwNjMyXHUwNjMxXHUwNjRhXHUwNjQ0IFx1MDY0N1x1MDY0MVx1MDYyYVx1MDY0''@;'; put 'put ''YV0gZGRkZCBbXHUwNjJhXHUwNjRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjdlXHUwNjQ4XHUwNjIxIixwYXN0OiIlcyBcdTA2MjdcdTA2YjMiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZcdTA2OGEiLHNz''@;'; put 'put ''OiIlZCBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZcdTA2OGEiLG06Ilx1MDY0N1x1MDZhYSBcdTA2NDVcdTA2NDZcdTA2N2QiLG1tOiIlZCBcdTA2NDVcdTA2NDZcdTA2N2QiLGg6Ilx1MDY0N1x1MDZhYSBcdTA2YWFcdTA2NDRcdTA2MjdcdTA2YWEiLGhoOiIlZCBcdTA2YWFcdTA2NDRcdTA2''@;'; put 'put ''MjdcdTA2YWEiLGQ6Ilx1MDY0N1x1MDZhYSBcdTA2OGZcdTA2NGFcdTA2NDZcdTA2NDdcdTA2NDYiLGRkOiIlZCBcdTA2OGZcdTA2NGFcdTA2NDZcdTA2NDdcdTA2NDYiLE06Ilx1MDY0N1x1MDZhYSBcdTA2NDVcdTA2NDdcdTA2NGFcdTA2NDZcdTA2NDgiLE1NOiIlZCBcdTA2NDVcdTA2NDdc''@;'; put 'put ''dTA2NGFcdTA2NDZcdTA2MjciLHk6Ilx1MDY0N1x1MDZhYSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVy''@;'; put 'put ''biB3LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDEzOTExOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgic2UiLHttb250aHM6Im9cdTAxMTFcdTAxMTFhamFnZW1ceGUxbm51''@;'; put 'put ''X2d1b3Z2YW1ceGUxbm51X25qdWtcdTAxMGRhbVx4ZTFubnVfY3VvXHUwMTRib21ceGUxbm51X21pZXNzZW1ceGUxbm51X2dlYXNzZW1ceGUxbm51X3N1b2lkbmVtXHhlMW5udV9ib3JnZW1ceGUxbm51X1x1MDEwZGFrXHUwMTBkYW1ceGUxbm51X2dvbGdnb3RtXHhlMW5udV9za1x4ZTFibWFt''@;'; put 'put ''XHhlMW5udV9qdW92bGFtXHhlMW5udSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoib1x1MDExMVx1MDExMWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9ib3JnX1x1MDEwZGFrXHUwMTBkX2dvbGdfc2tceGUxYl9qdW92Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzb3RuYWJlYWl2aV92''@;'; put 'put ''dW9zc1x4ZTFyZ2FfbWFcdTAxNGJcdTAxNGJlYlx4ZTFyZ2FfZ2Fza2F2YWhra3VfZHVvcmFzdGF0X2JlYXJqYWRhdF9sXHhlMXZ2YXJkYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic290bl92dW9zX21hXHUwMTRiX2dhc2tfZHVvcl9iZWFyX2xceGUxdiIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoic192X21fZ19kX2JfTCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiTU1NTSBELiBbYi5dIFlZWVkiLExMTDoiTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0iLExMTEw6ImRkZGQsIE1N''@;'; put 'put ''TU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltvdG5lIHRpXSBMVCIsbmV4dERheToiW2lodHRpbiB0aV0gTFQiLG5leHRXZWVrOiJkZGRkIFt0aV0gTFQiLGxhc3REYXk6Iltpa3RlIHRpXSBMVCIsbGFzdFdlZWs6IltvdmRkaXRdIGRkZGQgW3RpXSBM''@;'; put 'put ''VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgZ2VhXHUwMTdlZXMiLHBhc3Q6Im1hXHUwMTRiaXQgJXMiLHM6Im1vYWRkZSBzZWt1bmRkYXQiLHNzOiIlZCBzZWt1bmRkYXQiLG06Im9rdGEgbWludWh0YSIsbW06IiVkIG1pbnVodGF0IixoOiJva3RhIGRpaW1tdSIs''@;'; put 'put ''aGg6IiVkIGRpaW1tdXQiLGQ6Im9rdGEgYmVhaXZpIixkZDoiJWQgYmVhaXZ2aXQiLE06Im9rdGEgbVx4ZTFubnUiLE1NOiIlZCBtXHhlMW51dCIseToib2t0YSBqYWhraSIseXk6IiVkIGphZ2l0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdl''@;'; put 'put ''ZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDI1MTQ3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgic2kiLHttb250aHM6Ilx1MGRhMlx1MGRiMVx1MGRjMFx1MGRjZlx1MGRiYlx1MGRkMl9cdTBkYjRcdTBkZDlcdTBkYjZc''@;'; put 'put ''dTBkYmJcdTBkYzBcdTBkY2ZcdTBkYmJcdTBkZDJfXHUwZGI4XHUwZGNmXHUwZGJiXHUwZGNhXHUwZGFkXHUwZGQ0X1x1MGQ4NVx1MGRiNFx1MGRjYVx1MjAwZFx1MGRiYlx1MGRkYVx1MGRiZFx1MGRjYV9cdTBkYjhcdTBkZDBcdTBkYmFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGIxXHUwZGQy''@;'; put 'put ''X1x1MGRhMlx1MGRkNlx1MGRiZFx1MGRkMl9cdTBkODVcdTBkOWNcdTBkZGRcdTBkYzNcdTBkY2FcdTBkYWRcdTBkZDRfXHUwZGMzXHUwZGQwXHUwZGI0XHUwZGNhXHUwZGFkXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhX1x1MGQ5NFx1MGQ5YVx1MGRjYVx1MGRhZFx1MGRk''@;'; put 'put ''ZFx1MGRiNlx1MGRiYlx1MGRjYV9cdTBkYjFcdTBkZGNcdTBkYzBcdTBkZDBcdTBkYjhcdTBkY2FcdTBkYjZcdTBkYmJcdTBkY2FfXHUwZGFmXHUwZGQ5XHUwZGMzXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBkYTJcdTBk''@;'; put 'put ''YjFfXHUwZGI0XHUwZGQ5XHUwZGI2X1x1MGRiOFx1MGRjZlx1MGRiYlx1MGRjYV9cdTBkODVcdTBkYjRcdTBkY2FfXHUwZGI4XHUwZGQwXHUwZGJhXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiMVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYmRcdTBkZDJfXHUwZDg1XHUwZDljXHUwZGRkX1x1MGRj''@;'; put 'put ''M1x1MGRkMFx1MGRiNFx1MGRjYV9cdTBkOTRcdTBkOWFcdTBkY2FfXHUwZGIxXHUwZGRjXHUwZGMwXHUwZGQwX1x1MGRhZlx1MGRkOVx1MGRjM1x1MGRkMCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwZDg5XHUwZGJiXHUwZGQyXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRiM1x1MGRkNFx1MGRh''@;'; put 'put ''Zlx1MGRjZl9cdTBkODVcdTBkOWZcdTBkYzRcdTBkYmJcdTBkZDRcdTBkYzBcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUwZGI2XHUwZGFmXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYlx1MGRjNFx1MGRjM1x1MGRjYVx1MGRiNFx1MGRhZFx1MGRkMlx1MGRiMVx1MGRj''@;'; put 'put ''YVx1MGRhZlx1MGRjZl9cdTBkYzNcdTBkZDJcdTBkOWFcdTBkZDRcdTBkYmJcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUwZGMzXHUwZGQ5XHUwZGIxXHUwZGMzXHUwZGQ0XHUwZGJiXHUwZGNmXHUwZGFmXHUwZGNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGQ4OVx1MGRiYlx1MGRkMl9c''@;'; put 'put ''dTBkYzNcdTBkYjNcdTBkZDRfXHUwZDg1XHUwZDlmX1x1MGRiNlx1MGRhZlx1MGRjZl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJcdTBkYzRfXHUwZGMzXHUwZGQyXHUwZDlhXHUwZGQ0X1x1MGRjM1x1MGRkOVx1MGRiMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZDg5X1x1MGRjM19c''@;'; put 'put ''dTBkODVfXHUwZGI2X1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYl9cdTBkYzNcdTBkZDJfXHUwZGMzXHUwZGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6ImEgaDptbSIsTFRTOiJhIGg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZ''@;'; put 'put ''IE1NTU0gRCIsTExMOiJZWVlZIE1NTU0gRCwgYSBoOm1tIixMTExMOiJZWVlZIE1NTU0gRCBbXHUwZGMwXHUwZGQwXHUwZGIxXHUwZGQyXSBkZGRkLCBhIGg6bW06c3MifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGQ4NVx1MGRhZl0gTFRbXHUwZGE3XSIsbmV4dERheToiW1x1MGRjNFx1MGRk''@;'; put 'put ''OVx1MGRhN10gTFRbXHUwZGE3XSIsbmV4dFdlZWs6ImRkZGQgTFRbXHUwZGE3XSIsbGFzdERheToiW1x1MGQ4YVx1MGRiYVx1MGRkYV0gTFRbXHUwZGE3XSIsbGFzdFdlZWs6IltcdTBkYjRcdTBkYzNcdTBkZDRcdTBkOWNcdTBkZDJcdTBkYmFdIGRkZGQgTFRbXHUwZGE3XSIsc2FtZUVsc2U6''@;'; put 'put ''IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTBkOWFcdTBkZDJcdTBkYjFcdTBkY2EiLHBhc3Q6IiVzXHUwZDlhXHUwZGE3IFx1MGRiNFx1MGRkOVx1MGRiYiIsczoiXHUwZGFkXHUwZGFkXHUwZGNhXHUwZGI0XHUwZGJiIFx1MGQ5YVx1MGRkMlx1MGRjNFx1MGRkMlx1MGRiNFx1MGRi''@;'; put 'put ''YSIsc3M6Ilx1MGRhZFx1MGRhZFx1MGRjYVx1MGRiNFx1MGRiYiAlZCIsbToiXHUwZGI4XHUwZGQyXHUwZGIxXHUwZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0XHUwZGMwIixtbToiXHUwZGI4XHUwZGQyXHUwZGIxXHUwZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0ICVkIixoOiJcdTBk''@;'; put 'put ''YjRcdTBkZDBcdTBkYmEiLGhoOiJcdTBkYjRcdTBkZDBcdTBkYmEgJWQiLGQ6Ilx1MGRhZlx1MGRkMlx1MGRiMVx1MGRiYSIsZGQ6Ilx1MGRhZlx1MGRkMlx1MGRiMSAlZCIsTToiXHUwZGI4XHUwZGNmXHUwZGMzXHUwZGJhIixNTToiXHUwZGI4XHUwZGNmXHUwZGMzICVkIix5OiJcdTBkYzBc''@;'; put 'put ''dTBkYzNcdTBkYmIiLHl5OiJcdTBkYzBcdTBkYzNcdTBkYmIgJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9IFx1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMi8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4gZysiIFx1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMiJ9LG1lcmlkaWVt''@;'; put 'put ''UGFyc2U6L1x1MGRiNFx1MGRkOVx1MGRiYiBcdTBkYzBcdTBkYmJcdTBkZDR8XHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNHxcdTBkYjRcdTBkZDkuXHUwZGMwfFx1MGRiNC5cdTBkYzAuLyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJcdTBkYjQuXHUwZGMwLiI9PT1nfHwi''@;'; put 'put ''XHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNCI9PT1nfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc+MTE/dz8iXHUwZGI0Llx1MGRjMC4iOiJcdTBkYjRcdTBkYzNcdTBkY2EgXHUwZGMwXHUwZGJiXHUwZGQ0Ijp3PyJcdTBkYjRcdTBkZDkuXHUwZGMwLiI6''@;'; put 'put ''Ilx1MGRiNFx1MGRkOVx1MGRiYiBcdTBkYzBcdTBkYmJcdTBkZDQifX0pfSh5KDk3NTg2KSl9LDIzNzQxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbWFyZWNfYXByXHhlZGxfbVx4ZTFqX2pceGZhbl9qXHhm''@;'; put 'put ''YWxfYXVndXN0X3NlcHRlbWJlcl9va3RceGYzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLGc9Imphbl9mZWJfbWFyX2Fwcl9tXHhlMWpfalx4ZmFuX2pceGZhbF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpO2Z1bmN0aW9uIEIoRil7cmV0dXJuIEY+MSYmRjw1fWZ1''@;'; put 'put ''bmN0aW9uIHcoRixPLHosTil7dmFyIEw9RisiICI7c3dpdGNoKHope2Nhc2UicyI6cmV0dXJuIE98fE4/InBceGUxciBzZWtceGZhbmQiOiJwXHhlMXIgc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gT3x8Tj9MKyhCKEYpPyJzZWt1bmR5Ijoic2VrXHhmYW5kIik6TCsic2VrdW5kYW1pIjtj''@;'; put 'put ''YXNlIm0iOnJldHVybiBPPyJtaW5ceGZhdGEiOk4/Im1pblx4ZmF0dSI6Im1pblx4ZmF0b3UiO2Nhc2UibW0iOnJldHVybiBPfHxOP0wrKEIoRik/Im1pblx4ZmF0eSI6Im1pblx4ZmF0Iik6TCsibWluXHhmYXRhbWkiO2Nhc2UiaCI6cmV0dXJuIE8/ImhvZGluYSI6Tj8iaG9kaW51IjoiaG9k''@;'; put 'put ''aW5vdSI7Y2FzZSJoaCI6cmV0dXJuIE98fE4/TCsoQihGKT8iaG9kaW55IjoiaG9kXHhlZG4iKTpMKyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4gT3x8Tj8iZGVcdTAxNDgiOiJkXHUwMTQ4b20iO2Nhc2UiZGQiOnJldHVybiBPfHxOP0wrKEIoRik/ImRuaSI6ImRuXHhlZCIpOkwrImRcdTAx''@;'; put 'put ''NDhhbWkiO2Nhc2UiTSI6cmV0dXJuIE98fE4/Im1lc2lhYyI6Im1lc2lhY29tIjtjYXNlIk1NIjpyZXR1cm4gT3x8Tj9MKyhCKEYpPyJtZXNpYWNlIjoibWVzaWFjb3YiKTpMKyJtZXNpYWNtaSI7Y2FzZSJ5IjpyZXR1cm4gT3x8Tj8icm9rIjoicm9rb20iO2Nhc2UieXkiOnJldHVybiBPfHxO''@;'; put 'put ''P0wrKEIoRik/InJva3kiOiJyb2tvdiIpOkwrInJva21pIn19SS5kZWZpbmVMb2NhbGUoInNrIix7bW9udGhzOl8sbW9udGhzU2hvcnQ6Zyx3ZWVrZGF5czoibmVkZVx1MDEzZWFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV9cdTAxNjF0dnJ0b2tfcGlhdG9rX3NvYm90YSIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1Nob3J0OiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4g''@;'; put 'put ''TU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIG9dIExUIixuZXh0RGF5OiJbemFqdHJhIG9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNl''@;'; put 'put ''IDA6cmV0dXJuIlt2IG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW3Ygc3RyZWR1IG9dIExUIjtjYXNlIDQ6cmV0dXJuIlt2byBcdTAxNjF0dnJ0b2sgb10gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcGlhdG9rIG9d''@;'; put 'put ''IExUIjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90dSBvXSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSBvXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxceGZhIG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOmNh''@;'; put 'put ''c2UgNDpjYXNlIDU6cmV0dXJuIlttaW51bFx4ZmRdIGRkZGQgW29dIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bFx4ZmEgc3RyZWR1IG9dIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bFx4ZmEgc29ib3R1IG9dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVz''@;'; put 'put ''IixwYXN0OiJwcmVkICVzIixzOncsc3M6dyxtOncsbW06dyxoOncsaGg6dyxkOncsZGQ6dyxNOncsTU06dyx5OncseXk6d30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDkzZTM6ZnVuY3Rp''@;'; put 'put ''b24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQix3LFAsRil7dmFyIE89QisiICI7c3dpdGNoKFApe2Nhc2UicyI6cmV0dXJuIHd8fEY/Im5la2FqIHNla3VuZCI6Im5la2FqIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIE8rKDE9PT1CP3c/InNla3Vu''@;'; put 'put ''ZG8iOiJzZWt1bmRpIjoyPT09Qj93fHxGPyJzZWt1bmRpIjoic2VrdW5kYWgiOkI8NT93fHxGPyJzZWt1bmRlIjoic2VrdW5kYWgiOiJzZWt1bmQiKTtjYXNlIm0iOnJldHVybiB3PyJlbmEgbWludXRhIjoiZW5vIG1pbnV0byI7Y2FzZSJtbSI6cmV0dXJuIE8rKDE9PT1CP3c/Im1pbnV0YSI6''@;'; put 'put ''Im1pbnV0byI6Mj09PUI/d3x8Rj8ibWludXRpIjoibWludXRhbWEiOkI8NT93fHxGPyJtaW51dGUiOiJtaW51dGFtaSI6d3x8Rj8ibWludXQiOiJtaW51dGFtaSIpO2Nhc2UiaCI6cmV0dXJuIHc/ImVuYSB1cmEiOiJlbm8gdXJvIjtjYXNlImhoIjpyZXR1cm4gTysoMT09PUI/dz8idXJhIjoi''@;'; put 'put ''dXJvIjoyPT09Qj93fHxGPyJ1cmkiOiJ1cmFtYSI6Qjw1P3d8fEY/InVyZSI6InVyYW1pIjp3fHxGPyJ1ciI6InVyYW1pIik7Y2FzZSJkIjpyZXR1cm4gd3x8Rj8iZW4gZGFuIjoiZW5pbSBkbmVtIjtjYXNlImRkIjpyZXR1cm4gTysoMT09PUI/d3x8Rj8iZGFuIjoiZG5lbSI6Mj09PUI/d3x8''@;'; put 'put ''Rj8iZG5pIjoiZG5ldm9tYSI6d3x8Rj8iZG5pIjoiZG5ldmkiKTtjYXNlIk0iOnJldHVybiB3fHxGPyJlbiBtZXNlYyI6ImVuaW0gbWVzZWNlbSI7Y2FzZSJNTSI6cmV0dXJuIE8rKDE9PT1CP3d8fEY/Im1lc2VjIjoibWVzZWNlbSI6Mj09PUI/d3x8Rj8ibWVzZWNhIjoibWVzZWNlbWEiOkI8''@;'; put 'put ''NT93fHxGPyJtZXNlY2UiOiJtZXNlY2kiOnd8fEY/Im1lc2VjZXYiOiJtZXNlY2kiKTtjYXNlInkiOnJldHVybiB3fHxGPyJlbm8gbGV0byI6ImVuaW0gbGV0b20iO2Nhc2UieXkiOnJldHVybiBPKygxPT09Qj93fHxGPyJsZXRvIjoibGV0b20iOjI9PT1CP3d8fEY/ImxldGkiOiJsZXRvbWEi''@;'; put 'put ''OkI8NT93fHxGPyJsZXRhIjoibGV0aSI6d3x8Rj8ibGV0IjoibGV0aSIpfX1JLmRlZmluZUxvY2FsZSgic2wiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcmVjX2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0''@;'; put 'put ''KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGVsamFfcG9uZWRlbGpla190b3Jla19zcmVkYV9cdTAxMGRldHJ0ZWtf''@;'; put 'put ''cGV0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl90b3IuX3NyZS5fXHUwMTBkZXQuX3BldC5fc29iLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdG9fc3JfXHUwMTBkZV9wZV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAs''@;'; put 'put ''bG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELiBNTS4gWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmVzIG9iXSBMVCIs''@;'; put 'put ''bmV4dERheToiW2p1dHJpIG9iXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdl0gW25lZGVsam9dIFtvYl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ZdIFtzcmVkb10gW29iXSBMVCI7Y2FzZSA2OnJldHVybiJbdl0gW3NvYm90b10gW29i''@;'; put 'put ''XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdl0gZGRkZCBbb2JdIExUIn19LGxhc3REYXk6Ilt2XHUwMTBkZXJhaiBvYl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtuZWRl''@;'; put 'put ''bGpvXSBbb2JdIExUIjtjYXNlIDM6cmV0dXJuIltwcmVqXHUwMTYxbmpvXSBbc3JlZG9dIFtvYl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtzb2JvdG9dIFtvYl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3ByZWpcdTAxNjFuamldIGRkZGQg''@;'; put 'put ''W29iXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTAxMGRleiAlcyIscGFzdDoicHJlZCAlcyIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8sTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8s''@;'; put 'put ''b3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw2MDQ1MTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInNxIix7bW9udGhzOiJKYW5hcl9TaGt1cnRfTWFyc19QcmlsbF9NYWpfUWVyc2hvcl9Lb3Jy''@;'; put 'put ''aWtfR3VzaHRfU2h0YXRvcl9UZXRvcl9OXHhlYm50b3JfRGhqZXRvciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX1Noa19NYXJfUHJpX01hal9RZXJfS29yX0d1c19TaHRfVGV0X05ceGVibl9EaGoiLnNwbGl0KCJfIiksd2Vla2RheXM6IkUgRGllbF9FIEhceGViblx4ZWJfRSBNYXJ0''@;'; put 'put ''XHhlYl9FIE1ceGVicmt1clx4ZWJfRSBFbmp0ZV9FIFByZW10ZV9FIFNodHVuXHhlYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEaWVfSFx4ZWJuX01hcl9NXHhlYnJfRW5qX1ByZV9TaHQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRfSF9NYV9NXHhlYl9FX1BfU2giLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLG1lcmlkaWVtUGFyc2U6L1BEfE1ELyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJNIj09PWcuY2hhckF0KDApfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTI/IlBEIjoiTUQifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixM''@;'; put 'put ''VFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltTb3Qgblx4ZWJdIExUIixuZXh0RGF5OiJbTmVzXHhlYnIgblx4ZWJdIExU''@;'; put 'put ''IixuZXh0V2VlazoiZGRkZCBbblx4ZWJdIExUIixsYXN0RGF5OiJbRGplIG5ceGViXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Uga2FsdWFyIG5ceGViXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiblx4ZWIgJXMiLHBhc3Q6IiVzIG1ceGViIHBhclx4ZWIiLHM6ImRp''@;'; put 'put ''c2Egc2Vrb25kYSIsc3M6IiVkIHNla29uZGEiLG06Im5qXHhlYiBtaW51dFx4ZWIiLG1tOiIlZCBtaW51dGEiLGg6Im5qXHhlYiBvclx4ZWIiLGhoOiIlZCBvclx4ZWIiLGQ6Im5qXHhlYiBkaXRceGViIixkZDoiJWQgZGl0XHhlYiIsTToibmpceGViIG11YWoiLE1NOiIlZCBtdWFqIix5OiJu''@;'; put 'put ''alx4ZWIgdml0Iix5eToiJWQgdml0ZSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw0MDkwNTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89e3dv''@;'; put 'put ''cmRzOntzczpbIlx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMCIsIlx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzNSIsIlx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCJdLG06WyJcdTA0NThcdTA0MzVcdTA0''@;'; put 'put ''MzRcdTA0MzBcdTA0M2QgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCJdLG1tOlsiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIiwiXHUw''@;'; put 'put ''NDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIiwiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIl0saDpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0NDIiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0''@;'; put 'put ''MzMgXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDMwIl0saGg6WyJcdTA0NDFcdTA0MzBcdTA0NDIiLCJcdTA0NDFcdTA0MzBcdTA0NDJcdTA0MzAiLCJcdTA0NDFcdTA0MzBcdTA0NDJcdTA0MzgiXSxkOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzNFx1MDQzMFx1MDQzZCIs''@;'; put 'put ''Ilx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzAiXSxkZDpbIlx1MDQzNFx1MDQzMFx1MDQzZCIsIlx1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMCIsIlx1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMCJdLE06WyJcdTA0NThcdTA0MzVcdTA0''@;'; put 'put ''MzRcdTA0MzBcdTA0M2QgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCJdLE1NOlsiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IiwiXHUw''@;'; put 'put ''NDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDMwIiwiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDM4Il0seTpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQ0MyBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiLCJcdTA0NThcdTA0MzVcdTA0''@;'; put 'put ''MzRcdTA0M2RcdTA0MzUgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM1Il0seXk6WyJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiLCJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzUiLCJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0''@;'; put 'put ''M2RcdTA0MzAiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihCLHcpe3JldHVybiBCJTEwPj0xJiZCJTEwPD00JiYoQiUxMDA8MTB8fEIlMTAwPj0yMCk/QiUxMD09MT93WzBdOndbMV06d1syXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKEIsdyxQLEYpe3ZhciB6LE89Xy53b3Jkc1tQ''@;'; put 'put ''XTtyZXR1cm4gMT09PVAubGVuZ3RoPyJ5Ij09PVAmJnc/Ilx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzMCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOkZ8fHc/T1swXTpPWzFdOih6PV8uY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShCLE8pLCJ5eSI9PT1QJiZ3JiYi''@;'; put 'put ''XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIj09PXo/QisiIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCI6QisiICIreil9fTtJLmRlZmluZUxvY2FsZSgic3ItY3lybCIse21vbnRoczoiXHUwNDU4XHUwNDMwXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQw''@;'; put 'put ''X1x1MDQ0NFx1MDQzNVx1MDQzMVx1MDQ0MFx1MDQ0M1x1MDQzMFx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1''@;'; put 'put ''MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDBfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNlXHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzZFx1MDQzZVx1MDQzMlx1MDQzNVx1MDQzY1x1MDQzMVx1''@;'; put 'put ''MDQzMFx1MDQ0MF9cdTA0MzRcdTA0MzVcdTA0NDZcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ1OFx1MDQzMFx1MDQzZC5fXHUwNDQ0XHUwNDM1XHUwNDMxLl9cdTA0M2NcdTA0MzBcdTA0NDAuX1x1MDQzMFx1MDQzZlx1MDQ0MC5f''@;'; put 'put ''XHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZF9cdTA0NThcdTA0NDNcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzLl9cdTA0NDFcdTA0MzVcdTA0M2YuX1x1MDQzZVx1MDQzYVx1MDQ0Mi5fXHUwNDNkXHUwNDNlXHUwNDMyLl9cdTA0MzRcdTA0MzVcdTA0NDYuIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzMF9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0MzBcdTA0M2FfXHUwNDQzXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1''@;'; put 'put ''MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NDBcdTA0NDJcdTA0MzBcdTA0M2FfXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1Nob3J0OiJcdTA0M2RcdTA0MzVcdTA0MzQuX1x1MDQzZlx1MDQzZVx1MDQzZC5fXHUwNDQzXHUwNDQyXHUwNDNlLl9cdTA0NDFcdTA0NDBcdTA0MzUuX1x1MDQ0N1x1MDQzNVx1MDQ0Mi5fXHUwNDNmXHUwNDM1XHUwNDQyLl9cdTA0NDFcdTA0NDNcdTA0MzEuIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzTWluOiJcdTA0M2RcdTA0MzVfXHUwNDNmXHUwNDNlX1x1MDQ0M1x1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDM1X1x1MDQzZlx1MDQzNV9cdTA0NDFcdTA0NDMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJI''@;'; put 'put ''Om1tOnNzIixMOiJELiBNLiBZWVlZLiIsTEw6IkQuIE1NTU0gWVlZWS4iLExMTDoiRC4gTU1NTSBZWVlZLiBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMFx1MDQ0MSBcdTA0NDNdIExUIixu''@;'; put 'put ''ZXh0RGF5OiJbXHUwNDQxXHUwNDQzXHUwNDQyXHUwNDQwXHUwNDMwIFx1MDQ0M10gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQ0M10gW1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQ0M10gW1x1MDQ0M10gTFQi''@;'; put 'put ''O2Nhc2UgMzpyZXR1cm4iW1x1MDQ0M10gW1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M10gW1x1MDQ0M10gTFQiO2Nhc2UgNjpyZXR1cm4iW1x1MDQ0M10gW1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0M10gW1x1MDQ0M10gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0''@;'; put 'put ''OmNhc2UgNTpyZXR1cm4iW1x1MDQ0M10gZGRkZCBbXHUwNDQzXSBMVCJ9fSxsYXN0RGF5OiJbXHUwNDU4XHUwNDQzXHUwNDQ3XHUwNDM1IFx1MDQ0M10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDNk''@;'; put 'put ''XHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDM1XSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1''@;'; put 'put ''MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzM10gW1x1MDQ0M1x1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzYVx1MDQzMF0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM1''@;'; put 'put ''XSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NDBcdTA0NDJcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1''@;'; put 'put ''MDQzM10gW1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQzYVx1MDQzMF0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDM1XSBbXHUwNDQzXSBMVCJdW3RoaXMuZGF5KCldfSxzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MzdcdTA0MzAgJXMiLHBhc3Q6Ilx1MDQzZlx1MDQ0MFx1MDQzNSAlcyIsczoiXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDNlXHUwNDNiXHUwNDM4XHUwNDNhXHUwNDNlIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1''@;'; put 'put ''MDQzOCIsc3M6Xy50cmFuc2xhdGUsbTpfLnRyYW5zbGF0ZSxtbTpfLnRyYW5zbGF0ZSxoOl8udHJhbnNsYXRlLGhoOl8udHJhbnNsYXRlLGQ6Xy50cmFuc2xhdGUsZGQ6Xy50cmFuc2xhdGUsTTpfLnRyYW5zbGF0ZSxNTTpfLnRyYW5zbGF0ZSx5Ol8udHJhbnNsYXRlLHl5Ol8udHJhbnNsYXRl''@;'; put 'put ''fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNTUwNDY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXt3b3Jkczp7c3M6WyJzZWt1bmRhIiwic2Vr''@;'; put 'put ''dW5kZSIsInNla3VuZGkiXSxtOlsiamVkYW4gbWludXQiLCJqZWRub2cgbWludXRhIl0sbW06WyJtaW51dCIsIm1pbnV0YSIsIm1pbnV0YSJdLGg6WyJqZWRhbiBzYXQiLCJqZWRub2cgc2F0YSJdLGhoOlsic2F0Iiwic2F0YSIsInNhdGkiXSxkOlsiamVkYW4gZGFuIiwiamVkbm9nIGRhbmEi''@;'; put 'put ''XSxkZDpbImRhbiIsImRhbmEiLCJkYW5hIl0sTTpbImplZGFuIG1lc2VjIiwiamVkbm9nIG1lc2VjYSJdLE1NOlsibWVzZWMiLCJtZXNlY2EiLCJtZXNlY2kiXSx5OlsiamVkbnUgZ29kaW51IiwiamVkbmUgZ29kaW5lIl0seXk6WyJnb2RpbnUiLCJnb2RpbmUiLCJnb2RpbmEiXX0sY29ycmVj''@;'; put 'put ''dEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihCLHcpe3JldHVybiBCJTEwPj0xJiZCJTEwPD00JiYoQiUxMDA8MTB8fEIlMTAwPj0yMCk/QiUxMD09MT93WzBdOndbMV06d1syXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKEIsdyxQLEYpe3ZhciB6LE89Xy53b3Jkc1tQXTtyZXR1cm4gMT09PVAubGVu''@;'; put 'put ''Z3RoPyJ5Ij09PVAmJnc/ImplZG5hIGdvZGluYSI6Rnx8dz9PWzBdOk9bMV06KHo9Xy5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKEIsTyksInl5Ij09PVAmJncmJiJnb2RpbnUiPT09ej9CKyIgZ29kaW5hIjpCKyIgIit6KX19O0kuZGVmaW5lTG9jYWxlKCJzciIse21vbnRoczoiamFudWFyX2Zl''@;'; put 'put ''YnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIp''@;'; put 'put ''LG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGVsamFfcG9uZWRlbGpha191dG9yYWtfc3JlZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JlLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0g''@;'; put 'put ''WVlZWS4gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZLiBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkZWxq''@;'; put 'put ''dV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JlZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlIHVdIExUIixsYXN0''@;'; put 'put ''V2VlazpmdW5jdGlvbigpe3JldHVyblsiW3Byb1x1MDE2MWxlXSBbbmVkZWxqZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BvbmVkZWxqa2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFt1dG9ya2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3NyZWRlXSBbdV0gTFQiLCJbcHJvXHUw''@;'; put 'put ''MTYxbG9nXSBbXHUwMTBkZXR2cnRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BldGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCJdW3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJlICVz''@;'; put 'put ''IixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczpfLnRyYW5zbGF0ZSxtOl8udHJhbnNsYXRlLG1tOl8udHJhbnNsYXRlLGg6Xy50cmFuc2xhdGUsaGg6Xy50cmFuc2xhdGUsZDpfLnRyYW5zbGF0ZSxkZDpfLnRyYW5zbGF0ZSxNOl8udHJhbnNsYXRlLE1NOl8udHJhbnNsYXRlLHk6Xy50cmFuc2xh''@;'; put 'put ''dGUseXk6Xy50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw4NTc2NTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUo''@;'; put 'put ''InNzIix7bW9udGhzOiJCaGltYmlkdndhbmVfSW5kbG92YW5hX0luZGxvdidsZW5raHVsdV9NYWJhc2FfSW5raHdla2h3ZXRpX0luaGxhYmFfS2hvbHdhbmVfSW5nY2lfSW55b25pX0ltcGhhbGFfTHdldGlfSW5nb25nb25pIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJCaGlfSW5hX0ludV9N''@;'; put 'put ''YWJfSW5rX0luaF9LaG9fSWdjX0lueV9JbXBfTHdlX0lnbyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTGlzb250Zm9fVW1zb21idWx1a29fTGVzaWJpbGlfTGVzaXRzYXRmdV9MZXNpbmVfTGVzaWhsYW51X1VtZ2NpYmVsbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaXNfVW1iX0xzYl9M''@;'; put 'put ''ZXNfTHNpX0xzaF9VbWciLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX1VzX0xiX0x0X0xzX0xoX1VnIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbTmFtdWhsYSBuZ2FdIExUIixuZXh0RGF5OiJbS3VzYXNhIG5nYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtuZ2FdIExUIixsYXN0RGF5OiJbSXRv''@;'; put 'put ''bG8gbmdhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xlbGlwaGVsaWxlXSBbbmdhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibmdhICVzIixwYXN0OiJ3ZW50ZWthIG5nYSAlcyIsczoiZW1penV6d2FuYSBsb21jYW5lIixzczoiJWQgbXp1endhbmEiLG06InVtenV6''@;'; put 'put ''dSIsbW06IiVkIGVtaXp1enUiLGg6ImxpaG9yYSIsaGg6IiVkIGVtYWhvcmEiLGQ6ImxpbGFuZ2EiLGRkOiIlZCBlbWFsYW5nYSIsTToiaW55YW5nYSIsTU06IiVkIHRpbnlhbmdhIix5OiJ1bW55YWthIix5eToiJWQgaW1pbnlha2EifSxtZXJpZGllbVBhcnNlOi9la3VzZW5pfGVtaW5pfGVu''@;'; put 'put ''dHNhbWJhbWF8ZWJ1c3VrdS8sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDExPyJla3VzZW5pIjpnPDE1PyJlbWluaSI6ZzwxOT8iZW50c2FtYmFtYSI6ImVidXN1a3UifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiZWt1c2VuaSI9''@;'; put 'put ''PT1CP2c6ImVtaW5pIj09PUI/Zz49MTE/ZzpnKzEyOiJlbnRzYW1iYW1hIj09PUJ8fCJlYnVzdWt1Ij09PUI/MD09PWc/MDpnKzEyOnZvaWQgMH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDoiJWQiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDk5''@;'; put 'put ''MjkwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgic3YiLHttb250aHM6ImphbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNw''@;'; put 'put ''bGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzXHhmNm5kYWdfbVx4ZTVuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjZyZGFnIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6InNceGY2bl9tXHhlNW5fdGlzX29uc190b3JfZnJlX2xceGY2ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4ZjZfbVx4ZTVfdGlfb25fdG9fZnJfbFx4ZjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZ''@;'; put 'put ''WS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJ''@;'; put 'put ''ZGFnXSBMVCIsbmV4dERheToiW0ltb3Jnb25dIExUIixsYXN0RGF5OiJbSWdceGU1cl0gTFQiLG5leHRXZWVrOiJbUFx4ZTVdIGRkZGQgTFQiLGxhc3RXZWVrOiJbSV0gZGRkZFtzXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6ImZceGY2ciAl''@;'; put 'put ''cyBzZWRhbiIsczoiblx4ZTVncmEgc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZW4gbWludXQiLG1tOiIlZCBtaW51dGVyIixoOiJlbiB0aW1tZSIsaGg6IiVkIHRpbW1hciIsZDoiZW4gZGFnIixkZDoiJWQgZGFnYXIiLE06ImVuIG1ceGU1bmFkIixNTToiJWQgbVx4ZTVuYWRlciIs''@;'; put 'put ''eToiZXR0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFw6ZXxcOmEpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8iOmUiOjE9PT1CfHwyPT09Qj8iOmEiOiI6ZSIpfSx3ZWVrOntk''@;'; put 'put ''b3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw1MzQ0OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInN3Iix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hY2hpX0FwcmlsaV9NZWlfSnVuaV9KdWxhaV9BZ29zdGlfU2VwdGVtYmFf''@;'; put 'put ''T2t0b2JhX05vdmVtYmFfRGVzZW1iYSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX0Fnb19TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikp1bWFwaWxpX0p1bWF0YXR1X0p1bWFubmVfSnVtYXRhbm9fQWxoYW1pc2lfSWp1''@;'; put 'put ''bWFhX0p1bWFtb3NpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkpwbF9KdGF0X0pubmVfSnRhbl9BbGhfSWptX0ptb3MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkoyX0ozX0o0X0o1X0FsX0lqX0oxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6ImhoOm1tIEEiLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2xlbyBzYWFdIExUIixuZXh0RGF5OiJba2Vz''@;'; put 'put ''aG8gc2FhXSBMVCIsbmV4dFdlZWs6Ilt3aWtpIGlqYXlvXSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2phbmFdIExUIixsYXN0V2VlazoiW3dpa2kgaWxpeW9waXRhXSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgYmFhZGF5ZSIscGFz''@;'; put 'put ''dDoidG9rZWEgJXMiLHM6ImhpdmkgcHVuZGUiLHNzOiJzZWt1bmRlICVkIixtOiJkYWtpa2EgbW9qYSIsbW06ImRha2lrYSAlZCIsaDoic2FhIGxpbW9qYSIsaGg6Im1hc2FhICVkIixkOiJzaWt1IG1vamEiLGRkOiJzaWt1ICVkIixNOiJtd2V6aSBtbW9qYSIsTU06Im1pZXppICVkIix5OiJt''@;'; put 'put ''d2FrYSBtbW9qYSIseXk6Im1pYWthICVkIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNzI2ODg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBiZTciLDI6Ilx1MGJlOCIsMzoiXHUwYmU5Iiw0OiJcdTBiZWEiLDU6Ilx1''@;'; put 'put ''MGJlYiIsNjoiXHUwYmVjIiw3OiJcdTBiZWQiLDg6Ilx1MGJlZSIsOToiXHUwYmVmIiwwOiJcdTBiZTYifSxnPXsiXHUwYmU3IjoiMSIsIlx1MGJlOCI6IjIiLCJcdTBiZTkiOiIzIiwiXHUwYmVhIjoiNCIsIlx1MGJlYiI6IjUiLCJcdTBiZWMiOiI2IiwiXHUwYmVkIjoiNyIsIlx1MGJlZSI6''@;'; put 'put ''IjgiLCJcdTBiZWYiOiI5IiwiXHUwYmU2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJ0YSIse21vbnRoczoiXHUwYjljXHUwYmE5XHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhYVx1MGJiZlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWVcdTBiYmVcdTBiYjBcdTBiY2Rc''@;'; put 'put ''dTBiOWFcdTBiY2RfXHUwYjhmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmIyXHUwYmNkX1x1MGJhZVx1MGJjN19cdTBiOWNcdTBiYzJcdTBiYTlcdTBiY2RfXHUwYjljXHUwYmMyXHUwYmIyXHUwYmM4X1x1MGI4Nlx1MGI5NVx1MGJiOFx1MGJjZFx1MGI5Zlx1MGJjZF9cdTBiOWFcdTBiYzZcdTBi''@;'; put 'put ''YWFcdTBiY2RcdTBiOWZcdTBiYzZcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjg1XHUwYjk1XHUwYmNkXHUwYjlmXHUwYmM3XHUwYmJlXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGJhOFx1MGJiNVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiOWZcdTBiYmZcdTBi''@;'; put 'put ''OWFcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2QiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGI5Y1x1MGJhOVx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWFcdTBiYmZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFlXHUwYmJlXHUwYmIwXHUwYmNkXHUw''@;'; put 'put ''YjlhXHUwYmNkX1x1MGI4Zlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiMlx1MGJjZF9cdTBiYWVcdTBiYzdfXHUwYjljXHUwYmMyXHUwYmE5XHUwYmNkX1x1MGI5Y1x1MGJjMlx1MGJiMlx1MGJjOF9cdTBiODZcdTBiOTVcdTBiYjhcdTBiY2RcdTBiOWZcdTBiY2RfXHUwYjlhXHUwYmM2XHUwYmFh''@;'; put 'put ''XHUwYmNkXHUwYjlmXHUwYmM2XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI4NVx1MGI5NVx1MGJjZFx1MGI5Zlx1MGJjN1x1MGJiZVx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiYThcdTBiYjVcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjlmXHUwYmJmXHUwYjlh''@;'; put 'put ''XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBiOWVcdTBiYmVcdTBiYWZcdTBiYmZcdTBiYjFcdTBiY2RcdTBiYjFcdTBiYzFcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmE0XHUwYmJmXHUwYjk5XHUw''@;'; put 'put ''YmNkXHUwYjk1XHUwYjlmXHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGI5YVx1MGJjNlx1MGJiNVx1MGJjZFx1MGJiNVx1MGJiZVx1MGJhZlx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYWFcdTBiYzFcdTBiYTRcdTBiYTlcdTBiY2RcdTBi''@;'; put 'put ''OTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmI1XHUwYmJmXHUwYmFmXHUwYmJlXHUwYmI0XHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJiNVx1MGJjNlx1MGJiM1x1MGJjZFx1MGJiM1x1MGJiZlx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJi''@;'; put 'put ''NFx1MGJhZVx1MGJjOF9cdTBiOWFcdTBiYTlcdTBiYmZcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzgiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYjllXHUwYmJlXHUwYmFmXHUwYmJmXHUwYmIxXHUwYmMxX1x1MGJhNFx1MGJiZlx1MGI5OVx1MGJjZFx1''@;'; put 'put ''MGI5NVx1MGJiM1x1MGJjZF9cdTBiOWFcdTBiYzZcdTBiYjVcdTBiY2RcdTBiYjVcdTBiYmVcdTBiYWZcdTBiY2RfXHUwYmFhXHUwYmMxXHUwYmE0XHUwYmE5XHUwYmNkX1x1MGJiNVx1MGJiZlx1MGJhZlx1MGJiZVx1MGJiNFx1MGJhOVx1MGJjZF9cdTBiYjVcdTBiYzZcdTBiYjNcdTBiY2Rc''@;'; put 'put ''dTBiYjNcdTBiYmZfXHUwYjlhXHUwYmE5XHUwYmJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBiOWVcdTBiYmVfXHUwYmE0XHUwYmJmX1x1MGI5YVx1MGJjNl9cdTBiYWFcdTBiYzFfXHUwYmI1XHUwYmJmX1x1MGJiNVx1MGJjNl9cdTBiOWEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3Jt''@;'; put 'put ''YXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBiODdcdTBiYTlcdTBiY2RcdTBiYjFc''@;'; put 'put ''dTBiYzFdIExUIixuZXh0RGF5OiJbXHUwYmE4XHUwYmJlXHUwYmIzXHUwYmM4XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYmE4XHUwYmM3XHUwYmIxXHUwYmNkXHUwYmIxXHUwYmMxXSBMVCIsbGFzdFdlZWs6IltcdTBiOTVcdTBiOWZcdTBiYThcdTBiY2RcdTBiYTQg''@;'; put 'put ''XHUwYmI1XHUwYmJlXHUwYmIwXHUwYmFlXHUwYmNkXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYjg3XHUwYmIyXHUwYmNkIixwYXN0OiIlcyBcdTBiYWVcdTBiYzFcdTBiYTlcdTBiY2QiLHM6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiOWFc''@;'; put 'put ''dTBiYmZcdTBiYjIgXHUwYmI1XHUwYmJmXHUwYmE4XHUwYmJlXHUwYjlmXHUwYmJmXHUwYjk1XHUwYmIzXHUwYmNkIixzczoiJWQgXHUwYmI1XHUwYmJmXHUwYmE4XHUwYmJlXHUwYjlmXHUwYmJmXHUwYjk1XHUwYmIzXHUwYmNkIixtOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmE4XHUwYmJm''@;'; put 'put ''XHUwYmFlXHUwYmJmXHUwYjlmXHUwYmFlXHUwYmNkIixtbToiJWQgXHUwYmE4XHUwYmJmXHUwYmFlXHUwYmJmXHUwYjlmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkIixoOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmFlXHUwYmEzXHUwYmJmIFx1MGJhOFx1MGJjN1x1MGJiMFx1MGJh''@;'; put 'put ''ZVx1MGJjZCIsaGg6IiVkIFx1MGJhZVx1MGJhM1x1MGJiZiBcdTBiYThcdTBiYzdcdTBiYjBcdTBiYWVcdTBiY2QiLGQ6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYThcdTBiYmVcdTBiYjNcdTBiY2QiLGRkOiIlZCBcdTBiYThcdTBiYmVcdTBiOWZcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2Qi''@;'; put 'put ''LE06Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYWVcdTBiYmVcdTBiYTRcdTBiYWVcdTBiY2QiLE1NOiIlZCBcdTBiYWVcdTBiYmVcdTBiYTRcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2QiLHk6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYjVcdTBiYjBcdTBiYzFcdTBiOWZcdTBiYWVc''@;'; put 'put ''dTBiY2QiLHl5OiIlZCBcdTBiODZcdTBiYTNcdTBiY2RcdTBiOWZcdTBiYzFcdTBiOTVcdTBiYjNcdTBiY2QifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwYmI1XHUwYmE0XHUwYmMxLyxvcmRpbmFsOmZ1bmN0aW9uKHcpe3JldHVybiB3KyJcdTBiYjVcdTBiYTRcdTBiYzEi''@;'; put 'put ''fSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwYmU3XHUwYmU4XHUwYmU5XHUwYmVhXHUwYmViXHUwYmVjXHUwYmVkXHUwYmVlXHUwYmVmXHUwYmU2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcu''@;'; put 'put ''cmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2R8XHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4fFx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOHxcdTBiYThcdTBiYTNcdTBiY2RcdTBi''@;'; put 'put ''YWFcdTBiOTVcdTBiYjJcdTBiY2R8XHUwYjhlXHUwYmIxXHUwYmNkXHUwYmFhXHUwYmJlXHUwYjlmXHUwYmMxfFx1MGJhZVx1MGJiZVx1MGJiMlx1MGJjOC8sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDI/IiBcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QiOnc8Nj8i''@;'; put 'put ''IFx1MGJiNVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJjOCI6dzwxMD8iIFx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOCI6dzwxND8iIFx1MGJhOFx1MGJhM1x1MGJjZFx1MGJhYVx1MGI5NVx1MGJiMlx1MGJjZCI6dzwxOD8iIFx1MGI4ZVx1MGJiMVx1MGJjZFx1MGJhYVx1MGJiZVx1MGI5Zlx1MGJj''@;'; put 'put ''MSI6dzwyMj8iIFx1MGJhZVx1MGJiZVx1MGJiMlx1MGJjOCI6IiBcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIj09PVA/dzwyP3c6dysx''@;'; put 'put ''MjoiXHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4Ij09PVB8fCJcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzgiPT09UHx8Ilx1MGJhOFx1MGJhM1x1MGJjZFx1MGJhYVx1MGI5NVx1MGJiMlx1MGJjZCI9PT1QJiZ3Pj0xMD93OncrMTJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2''@;'; put 'put ''KSl9LDMyMDYwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidGUiLHttb250aHM6Ilx1MGMxY1x1MGMyOFx1MGMzNVx1MGMzMFx1MGMzZl9cdTBjMmJcdTBjM2ZcdTBjMmNcdTBjNGRcdTBjMzBcdTBjMzVcdTBjMzBcdTBjM2ZfXHUw''@;'; put 'put ''YzJlXHUwYzNlXHUwYzMwXHUwYzRkXHUwYzFhXHUwYzNmX1x1MGMwZlx1MGMyYVx1MGM0ZFx1MGMzMFx1MGMzZlx1MGMzMlx1MGM0ZF9cdTBjMmVcdTBjNDdfXHUwYzFjXHUwYzQyXHUwYzI4XHUwYzRkX1x1MGMxY1x1MGM0MVx1MGMzMlx1MGM0OF9cdTBjMDZcdTBjMTdcdTBjMzhcdTBjNGRc''@;'; put 'put ''dTBjMWZcdTBjNDFfXHUwYzM4XHUwYzQ2XHUwYzJhXHUwYzRkXHUwYzFmXHUwYzQ2XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRkX1x1MGMwNVx1MGMxNVx1MGM0ZFx1MGMxZlx1MGM0Ylx1MGMyY1x1MGMzMFx1MGM0ZF9cdTBjMjhcdTBjMzVcdTBjMDJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzIx''@;'; put 'put ''XHUwYzNmXHUwYzM4XHUwYzQ2XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBjMWNcdTBjMjguX1x1MGMyYlx1MGMzZlx1MGMyY1x1MGM0ZFx1MGMzMC5fXHUwYzJlXHUwYzNlXHUwYzMwXHUwYzRkXHUwYzFhXHUwYzNmX1x1MGMwZlx1MGMyYVx1''@;'; put 'put ''MGM0ZFx1MGMzMFx1MGMzZi5fXHUwYzJlXHUwYzQ3X1x1MGMxY1x1MGM0Mlx1MGMyOFx1MGM0ZF9cdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDhfXHUwYzA2XHUwYzE3Ll9cdTBjMzhcdTBjNDZcdTBjMmFcdTBjNGQuX1x1MGMwNVx1MGMxNVx1MGM0ZFx1MGMxZlx1MGM0Yi5fXHUwYzI4XHUwYzM1''@;'; put 'put ''Ll9cdTBjMjFcdTBjM2ZcdTBjMzhcdTBjNDYuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGMwNlx1MGMyNlx1MGMzZlx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMzhcdTBjNGJcdTBjMmVcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzJlXHUw''@;'; put 'put ''YzAyXHUwYzE3XHUwYzMzXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMyY1x1MGM0MVx1MGMyN1x1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMTdcdTBjNDFcdTBjMzBcdTBjNDFcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM2XHUwYzQxXHUwYzE1XHUwYzRkXHUwYzMwXHUw''@;'; put 'put ''YzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMzNlx1MGMyOFx1MGMzZlx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBjMDZcdTBjMjZcdTBjM2ZfXHUwYzM4XHUwYzRiXHUwYzJlX1x1MGMyZVx1MGMwMlx1MGMxN1x1MGMzM19cdTBjMmNcdTBj''@;'; put 'put ''NDFcdTBjMjdfXHUwYzE3XHUwYzQxXHUwYzMwXHUwYzQxX1x1MGMzNlx1MGM0MVx1MGMxNVx1MGM0ZFx1MGMzMF9cdTBjMzZcdTBjMjhcdTBjM2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGMwNl9cdTBjMzhcdTBjNGJfXHUwYzJlXHUwYzAyX1x1MGMyY1x1MGM0MV9cdTBjMTdcdTBj''@;'; put 'put ''NDFfXHUwYzM2XHUwYzQxX1x1MGMzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBo''@;'; put 'put ''Om1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBjMjhcdTBjNDdcdTBjMjFcdTBjNDFdIExUIixuZXh0RGF5OiJbXHUwYzMwXHUwYzQ3XHUwYzJhXHUwYzQxXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYzI4XHUwYzNmXHUwYzI4XHUwYzRkXHUwYzI4XSBMVCIsbGFz''@;'; put 'put ''dFdlZWs6IltcdTBjMTdcdTBjMjRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBjMzJcdTBjNGIiLHBhc3Q6IiVzIFx1MGMxNVx1MGM0ZFx1MGMzMFx1MGMzZlx1MGMyNFx1MGMwMiIsczoiXHUwYzE1XHUwYzRhXHUwYzI4XHUwYzRkXHUwYzI4''@;'; put 'put ''XHUwYzNmIFx1MGMxNVx1MGM0ZFx1MGMzN1x1MGMyM1x1MGMzZVx1MGMzMlx1MGM0MSIsc3M6IiVkIFx1MGMzOFx1MGM0Nlx1MGMxNVx1MGMyOFx1MGM0ZFx1MGMzMlx1MGM0MSIsbToiXHUwYzEyXHUwYzE1IFx1MGMyOFx1MGMzZlx1MGMyZVx1MGMzZlx1MGMzN1x1MGMwMiIsbW06IiVkIFx1''@;'; put 'put ''MGMyOFx1MGMzZlx1MGMyZVx1MGMzZlx1MGMzN1x1MGMzZVx1MGMzMlx1MGM0MSIsaDoiXHUwYzEyXHUwYzE1IFx1MGMxN1x1MGMwMlx1MGMxZiIsaGg6IiVkIFx1MGMxN1x1MGMwMlx1MGMxZlx1MGMzMlx1MGM0MSIsZDoiXHUwYzEyXHUwYzE1IFx1MGMzMFx1MGM0Ylx1MGMxY1x1MGM0MSIs''@;'; put 'put ''ZGQ6IiVkIFx1MGMzMFx1MGM0Ylx1MGMxY1x1MGM0MVx1MGMzMlx1MGM0MSIsTToiXHUwYzEyXHUwYzE1IFx1MGMyOFx1MGM0Nlx1MGMzMiIsTU06IiVkIFx1MGMyOFx1MGM0Nlx1MGMzMlx1MGMzMlx1MGM0MSIseToiXHUwYzEyXHUwYzE1IFx1MGMzOFx1MGMwMlx1MGMzNVx1MGMyNFx1MGM0''@;'; put 'put ''ZFx1MGMzOFx1MGMzMFx1MGMwMiIseXk6IiVkIFx1MGMzOFx1MGMwMlx1MGMzNVx1MGMyNFx1MGM0ZFx1MGMzOFx1MGMzMFx1MGMzZVx1MGMzMlx1MGM0MSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTBjMzUvLG9yZGluYWw6IiVkXHUwYzM1IixtZXJpZGllbVBhcnNlOi9c''@;'; put 'put ''dTBjMzBcdTBjM2VcdTBjMjRcdTBjNGRcdTBjMzBcdTBjM2Z8XHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyfFx1MGMyZVx1MGMyN1x1MGM0ZFx1MGMyZlx1MGMzZVx1MGMzOVx1MGM0ZFx1MGMyOFx1MGMwMnxcdTBjMzhcdTBjM2VcdTBjMmZcdTBjMDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBjMDIv''@;'; put 'put ''LG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJcdTBjMzBcdTBjM2VcdTBjMjRcdTBjNGRcdTBjMzBcdTBjM2YiPT09Qj9nPDQ/ZzpnKzEyOiJcdTBjMDlcdTBjMjZcdTBjMmZcdTBjMDIiPT09Qj9nOiJcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBj''@;'; put 'put ''M2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDIiPT09Qj9nPj0xMD9nOmcrMTI6Ilx1MGMzOFx1MGMzZVx1MGMyZlx1MGMwMlx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMwMiI9PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8ND8iXHUwYzMwXHUwYzNlXHUw''@;'; put 'put ''YzI0XHUwYzRkXHUwYzMwXHUwYzNmIjpnPDEwPyJcdTBjMDlcdTBjMjZcdTBjMmZcdTBjMDIiOmc8MTc/Ilx1MGMyZVx1MGMyN1x1MGM0ZFx1MGMyZlx1MGMzZVx1MGMzOVx1MGM0ZFx1MGMyOFx1MGMwMiI6ZzwyMD8iXHUwYzM4XHUwYzNlXHUwYzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMw''@;'; put 'put ''XHUwYzAyIjoiXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sOTMyOTA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ0ZXQiLHttb250aHM6IkphbmVp''@;'; put 'put ''cnVfRmV2ZXJlaXJ1X01hcnN1X0FicmlsX01haXVfSnVceGYxdV9KdWxsdV9BZ3VzdHVfU2V0ZW1icnVfT3V0dWJydV9Ob3ZlbWJydV9EZXplbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXoiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXM6IkRvbWluZ3VfU2VndW5kYV9UZXJzYV9LdWFydGFfS2ludGFfU2VzdGFfU2FiYWR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRvbV9TZWdfVGVyc19LdWFfS2ludF9TZXN0X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRG9fU2VnX1RlX0t1X0tpX1Nl''@;'; put 'put ''c19TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6''@;'; put 'put ''IltPaGluIGloYV0gTFQiLG5leHREYXk6IltBYmFuIGloYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtpaGFdIExUIixsYXN0RGF5OiJbSG9yaXNlaWsgaWhhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbWFuYSBrb3R1a10gW2loYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6ImloYSAlcyIscGFzdDoiJXMgbGl1YmEiLHM6InNlZ3VuZHUgYmFsdW4iLHNzOiJzZWd1bmR1ICVkIixtOiJtaW51dHUgaWRhIixtbToibWludXR1ICVkIixoOiJvcmFzIGlkYSIsaGg6Im9yYXMgJWQiLGQ6Imxvcm9uIGlkYSIsZGQ6Imxvcm9uICVkIixNOiJmdWxhbiBpZGEiLE1NOiJm''@;'; put 'put ''dWxhbiAlZCIseToidGluYW4gaWRhIix5eToidGluYW4gJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09Qj8ic3QiOjI9PT1CPyJu''@;'; put 'put ''ZCI6Mz09PUI/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODI5NDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezA6Ii1cdTA0NDNcdTA0M2MiLDE6Ii1cdTA0NDNcdTA0M2MiLDI6Ii1cdTA0NGVcdTA0M2MiLDM6''@;'; put 'put ''Ii1cdTA0NGVcdTA0M2MiLDQ6Ii1cdTA0NDNcdTA0M2MiLDU6Ii1cdTA0NDNcdTA0M2MiLDY6Ii1cdTA0NDNcdTA0M2MiLDc6Ii1cdTA0NDNcdTA0M2MiLDg6Ii1cdTA0NDNcdTA0M2MiLDk6Ii1cdTA0NDNcdTA0M2MiLDEwOiItXHUwNDQzXHUwNDNjIiwxMjoiLVx1MDQ0M1x1MDQzYyIsMTM6''@;'; put 'put ''Ii1cdTA0NDNcdTA0M2MiLDIwOiItXHUwNDQzXHUwNDNjIiwzMDoiLVx1MDQ0ZVx1MDQzYyIsNDA6Ii1cdTA0NDNcdTA0M2MiLDUwOiItXHUwNDQzXHUwNDNjIiw2MDoiLVx1MDQ0M1x1MDQzYyIsNzA6Ii1cdTA0NDNcdTA0M2MiLDgwOiItXHUwNDQzXHUwNDNjIiw5MDoiLVx1MDQ0M1x1MDQz''@;'; put 'put ''YyIsMTAwOiItXHUwNDQzXHUwNDNjIn07SS5kZWZpbmVMb2NhbGUoInRnIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQy''@;'; put 'put ''XHUwNDM4X1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYlx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0MzlcdTA0MzhfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzhfXHUw''@;'; put 'put ''NDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUw''@;'; put 'put ''NDM4Ii5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYl9cdTA0M2NcdTA0MzBc''@;'; put 'put ''dTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0''@;'; put 'put ''M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQw''@;'; put 'put ''X1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXM6Ilx1MDQ0Zlx1MDQzYVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0MzRcdTA0NDNcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDQxXHUwNDM1XHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQ0OFx1''@;'; put 'put ''MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0YjdcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNGI3XHUwNDQzXHUwNDNjXHUwNDRhXHUwNDMwX1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0''@;'; put 'put ''OiJcdTA0NGZcdTA0NDhcdTA0MzFfXHUwNDM0XHUwNDQ4XHUwNDMxX1x1MDQ0MVx1MDQ0OFx1MDQzMV9cdTA0NDdcdTA0NDhcdTA0MzFfXHUwNDNmXHUwNDQ4XHUwNDMxX1x1MDRiN1x1MDQ0M1x1MDQzY19cdTA0NDhcdTA0M2RcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQ0''@;'; put 'put ''Zlx1MDQ0OF9cdTA0MzRcdTA0NDhfXHUwNDQxXHUwNDQ4X1x1MDQ0N1x1MDQ0OF9cdTA0M2ZcdTA0NDhfXHUwNGI3XHUwNDNjX1x1MDQ0OFx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MThcdTA0M2NcdTA0NDBcdTA0ZWZcdTA0MzcgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbmV4dERheToiW1x1MDQy''@;'; put 'put ''NFx1MDQzMFx1MDQ0MFx1MDQzNFx1MDQzZSBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixsYXN0RGF5OiJbXHUwNDE0XHUwNDM4XHUwNDQwXHUwNGVmXHUwNDM3IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLG5leHRXZWVrOiJkZGRkW1x1MDQzOF0gW1x1''@;'; put 'put ''MDRiM1x1MDQzMFx1MDQ0NFx1MDQ0Mlx1MDQzMFx1MDQzOCBcdTA0M2VcdTA0NGZcdTA0M2RcdTA0MzRcdTA0MzAgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbGFzdFdlZWs6ImRkZGRbXHUwNDM4XSBbXHUwNGIzXHUwNDMwXHUwNDQ0XHUwNDQyXHUwNDMwXHUwNDM4IFx1''@;'; put 'put ''MDQzM1x1MDQ0M1x1MDQzN1x1MDQzMFx1MDQ0OFx1MDQ0Mlx1MDQzMCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MzFcdTA0MzBcdTA0NGFcdTA0MzRcdTA0MzggJXMiLHBhc3Q6IiVzIFx1MDQzZlx1''@;'; put 'put ''MDQzNVx1MDQ0OCIsczoiXHUwNDRmXHUwNDNhXHUwNDQ3XHUwNDMwXHUwNDNkXHUwNDM0IFx1MDQ0MVx1MDQzZVx1MDQzZFx1MDQzOFx1MDQ0ZiIsbToiXHUwNDRmXHUwNDNhIFx1MDQzNFx1MDQzMFx1MDQ5Ylx1MDQzOFx1MDQ5Ylx1MDQzMCIsbW06IiVkIFx1MDQzNFx1MDQzMFx1MDQ5Ylx1''@;'; put 'put ''MDQzOFx1MDQ5Ylx1MDQzMCIsaDoiXHUwNDRmXHUwNDNhIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsZDoiXHUwNDRmXHUwNDNhIFx1MDQ0MFx1MDRlZlx1MDQzNyIsZGQ6IiVkIFx1MDQ0MFx1MDRlZlx1MDQzNyIsTToiXHUwNDRm''@;'; put 'put ''XHUwNDNhIFx1MDQzY1x1MDQzZVx1MDRiMyIsTU06IiVkIFx1MDQzY1x1MDQzZVx1MDRiMyIseToiXHUwNDRmXHUwNDNhIFx1MDQ0MVx1MDQzZVx1MDQzYiIseXk6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzYiJ9LG1lcmlkaWVtUGFyc2U6L1x1MDQ0OFx1MDQzMFx1MDQzMXxcdTA0NDFcdTA0NDNc''@;'; put 'put ''dTA0MzFcdTA0YjN8XHUwNDQwXHUwNGVmXHUwNDM3fFx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKEIsdyl7cmV0dXJuIDEyPT09QiYmKEI9MCksIlx1MDQ0OFx1MDQzMFx1MDQzMSI9PT13P0I8ND9COkIrMTI6Ilx1MDQ0MVx1MDQ0M1x1MDQz''@;'; put 'put ''MVx1MDRiMyI9PT13P0I6Ilx1MDQ0MFx1MDRlZlx1MDQzNyI9PT13P0I+PTExP0I6QisxMjoiXHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzIj09PXc/QisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsdyxQKXtyZXR1cm4gQjw0PyJcdTA0NDhcdTA0MzBcdTA0MzEiOkI8MTE/''@;'; put 'put ''Ilx1MDQ0MVx1MDQ0M1x1MDQzMVx1MDRiMyI6QjwxNj8iXHUwNDQwXHUwNGVmXHUwNDM3IjpCPDE5PyJcdTA0MzFcdTA0MzVcdTA0MzNcdTA0M2VcdTA0YjMiOiJcdTA0NDhcdTA0MzBcdTA0MzEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDNcdTA0M2N8XHUwNDRl''@;'; put 'put ''XHUwNDNjKS8sb3JkaW5hbDpmdW5jdGlvbihCKXtyZXR1cm4gQisoX1tCXXx8X1tCJTEwXXx8X1tCPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sMTIzMTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVM''@;'; put 'put ''b2NhbGUoInRoIix7bW9udGhzOiJcdTBlMjFcdTBlMDFcdTBlMjNcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTAxXHUwZTM4XHUwZTIxXHUwZTIwXHUwZTMyXHUwZTFlXHUwZTMxXHUwZTE5XHUwZTE4XHUwZTRjX1x1MGUyMVx1MGUzNVx1MGUxOVx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlNDBcdTBl''@;'; put 'put ''MjFcdTBlMjlcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTFlXHUwZTI0XHUwZTI5XHUwZTIwXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUyMVx1MGUzNFx1MGUxNlx1MGUzOFx1MGUxOVx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMDFcdTBlMjNcdTBlMDFcdTBlMGVcdTBlMzJcdTBlMDRcdTBlMjFfXHUw''@;'; put 'put ''ZTJhXHUwZTM0XHUwZTA3XHUwZTJiXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUwMVx1MGUzMVx1MGUxOVx1MGUyMlx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMTVcdTBlMzhcdTBlMjVcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTFlXHUwZTI0XHUwZTI4XHUwZTA4XHUwZTM0XHUwZTAxXHUwZTMyXHUw''@;'; put 'put ''ZTIyXHUwZTE5X1x1MGUxOFx1MGUzMVx1MGUxOVx1MGUyN1x1MGUzMlx1MGUwNFx1MGUyMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZTIxLlx1MGUwNC5fXHUwZTAxLlx1MGUxZS5fXHUwZTIxXHUwZTM1Llx1MGUwNC5fXHUwZTQwXHUwZTIxLlx1MGUyMi5fXHUwZTFlLlx1MGUwNC5f''@;'; put 'put ''XHUwZTIxXHUwZTM0Llx1MGUyMi5fXHUwZTAxLlx1MGUwNC5fXHUwZTJhLlx1MGUwNC5fXHUwZTAxLlx1MGUyMi5fXHUwZTE1Llx1MGUwNC5fXHUwZTFlLlx1MGUyMi5fXHUwZTE4Llx1MGUwNC4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZTJkXHUwZTMy''@;'; put 'put ''XHUwZTE3XHUwZTM0XHUwZTE1XHUwZTIyXHUwZTRjX1x1MGUwOFx1MGUzMVx1MGUxOVx1MGUxN1x1MGUyM1x1MGU0Y19cdTBlMmRcdTBlMzFcdTBlMDdcdTBlMDRcdTBlMzJcdTBlMjNfXHUwZTFlXHUwZTM4XHUwZTE4X1x1MGUxZVx1MGUyNFx1MGUyYlx1MGUzMVx1MGUyYVx1MGUxYVx1MGUx''@;'; put 'put ''NFx1MGUzNV9cdTBlMjhcdTBlMzhcdTBlMDFcdTBlMjNcdTBlNGNfXHUwZTQwXHUwZTJhXHUwZTMyXHUwZTIzXHUwZTRjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGUyZFx1MGUzMlx1MGUxN1x1MGUzNFx1MGUxNVx1MGUyMlx1MGU0Y19cdTBlMDhcdTBlMzFcdTBlMTlcdTBlMTdc''@;'; put 'put ''dTBlMjNcdTBlNGNfXHUwZTJkXHUwZTMxXHUwZTA3XHUwZTA0XHUwZTMyXHUwZTIzX1x1MGUxZVx1MGUzOFx1MGUxOF9cdTBlMWVcdTBlMjRcdTBlMmJcdTBlMzFcdTBlMmFfXHUwZTI4XHUwZTM4XHUwZTAxXHUwZTIzXHUwZTRjX1x1MGU0MFx1MGUyYVx1MGUzMlx1MGUyM1x1MGU0YyIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZTJkXHUwZTMyLl9cdTBlMDguX1x1MGUyZC5fXHUwZTFlLl9cdTBlMWVcdTBlMjQuX1x1MGUyOC5fXHUwZTJhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6''@;'; put 'put ''IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzIgSDptbSIsTExMTDoiXHUwZTI3XHUwZTMxXHUwZTE5ZGRkZFx1MGUxN1x1MGUzNVx1MGU0OCBEIE1NTU0gWVlZWSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzIgSDpt''@;'; put 'put ''bSJ9LG1lcmlkaWVtUGFyc2U6L1x1MGUwMVx1MGU0OFx1MGUyZFx1MGUxOVx1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwN3xcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDcvLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''Ilx1MGUyYlx1MGUyNVx1MGUzMVx1MGUwN1x1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwNyI9PT1nfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTI/Ilx1MGUwMVx1MGU0OFx1MGUyZFx1MGUxOVx1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUw''@;'; put 'put ''NyI6Ilx1MGUyYlx1MGUyNVx1MGUzMVx1MGUwN1x1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwNyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZTI3XHUwZTMxXHUwZTE5XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLG5leHREYXk6Iltc''@;'; put 'put ''dTBlMWVcdTBlMjNcdTBlMzhcdTBlNDhcdTBlMDdcdTBlMTlcdTBlMzVcdTBlNDkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBMVCIsbmV4dFdlZWs6ImRkZGRbXHUwZTJiXHUwZTE5XHUwZTQ5XHUwZTMyIFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLGxhc3REYXk6IltcdTBlNDBc''@;'; put 'put ''dTBlMjFcdTBlMzdcdTBlNDhcdTBlMmRcdTBlMjdcdTBlMzJcdTBlMTlcdTBlMTlcdTBlMzVcdTBlNDkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBMVCIsbGFzdFdlZWs6IltcdTBlMjdcdTBlMzFcdTBlMTldZGRkZFtcdTBlMTdcdTBlMzVcdTBlNDhcdTBlNDFcdTBlMjVcdTBlNDlcdTBl''@;'; put 'put ''MjcgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwZTJkXHUwZTM1XHUwZTAxICVzIixwYXN0OiIlc1x1MGUxN1x1MGUzNVx1MGU0OFx1MGU0MVx1MGUyNVx1MGU0OVx1MGUyNyIsczoiXHUwZTQ0XHUwZTIxXHUwZTQ4''@;'; put 'put ''XHUwZTAxXHUwZTM1XHUwZTQ4XHUwZTI3XHUwZTM0XHUwZTE5XHUwZTMyXHUwZTE3XHUwZTM1IixzczoiJWQgXHUwZTI3XHUwZTM0XHUwZTE5XHUwZTMyXHUwZTE3XHUwZTM1IixtOiIxIFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsbW06IiVkIFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIs''@;'; put 'put ''aDoiMSBcdTBlMGFcdTBlMzFcdTBlNDhcdTBlMjdcdTBlNDJcdTBlMjFcdTBlMDciLGhoOiIlZCBcdTBlMGFcdTBlMzFcdTBlNDhcdTBlMjdcdTBlNDJcdTBlMjFcdTBlMDciLGQ6IjEgXHUwZTI3XHUwZTMxXHUwZTE5IixkZDoiJWQgXHUwZTI3XHUwZTMxXHUwZTE5Iix3OiIxIFx1MGUyYVx1''@;'; put 'put ''MGUzMVx1MGUxYlx1MGUxNFx1MGUzMlx1MGUyYlx1MGU0YyIsd3c6IiVkIFx1MGUyYVx1MGUzMVx1MGUxYlx1MGUxNFx1MGUzMlx1MGUyYlx1MGU0YyIsTToiMSBcdTBlNDBcdTBlMTRcdTBlMzdcdTBlMmRcdTBlMTkiLE1NOiIlZCBcdTBlNDBcdTBlMTRcdTBlMzdcdTBlMmRcdTBlMTkiLHk6''@;'; put 'put ''IjEgXHUwZTFiXHUwZTM1Iix5eToiJWQgXHUwZTFiXHUwZTM1In19KX0oeSg5NzU4NikpfSwzNzQ2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiJ2luamkiLDU6IidpbmppIiw4OiInaW5qaSIsNzA6IidpbmppIiw4MDoiJ2luamkiLDI6Iidu''@;'; put 'put ''amkiLDc6IiduamkiLDIwOiInbmppIiw1MDoiJ25qaSIsMzoiJ1x4ZmNuamkiLDQ6IidceGZjbmppIiwxMDA6IidceGZjbmppIiw2OiInbmp5Iiw5OiIndW5qeSIsMTA6Iid1bmp5IiwzMDoiJ3VuankiLDYwOiIneW5qeSIsOTA6Iid5bmp5In07SS5kZWZpbmVMb2NhbGUoInRrIix7bW9udGhz''@;'; put 'put ''OiJceGRkYW53YXJfRmV3cmFsX01hcnRfQXByZWxfTWFceGZkX0lceGZkdW5fSVx4ZmR1bF9Bd2d1c3RfU2VudFx4ZmRhYnJfT2t0XHhmZGFicl9Ob1x4ZmRhYnJfRGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJceGRkYW5fRmV3X01hcl9BcHJfTWFceGZkX0lceGZkbl9JXHhmZGxf''@;'; put 'put ''QXdnX1Nlbl9Pa3RfTm9ceGZkX0RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHhkZGVrXHUwMTVmZW5iZV9EdVx1MDE1ZmVuYmVfU2lcdTAxNWZlbmJlX1x4Yzdhclx1MDE1ZmVuYmVfUGVuXHUwMTVmZW5iZV9Bbm5hX1x1MDE1ZWVuYmUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHhk''@;'; put 'put ''ZGVrX0R1XHUwMTVmX1NpXHUwMTVmX1x4Yzdhcl9QZW5fQW5uX1x1MDE1ZWVuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJceGRka19EXHUwMTVmX1NcdTAxNWZfXHhjN3JfUG5fQW5fXHUwMTVlbiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNz''@;'; put 'put ''IixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWdhdF0gTFQiLG5leHREYXk6IltlcnRpciBzYWdhdF0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJbaW5kaWtpXSBkZGRkIFtzYWdhdF0gTFQiLGxhc3REYXk6IltkXHhmY1x4ZmRuXSBMVCIsbGFzdFdlZWs6IltnZVx4ZTdlbl0gZGRkZCBbc2FnYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb1x1MDE0OCIscGFzdDoiJXMgXHhmNlx1MDE0OCIsczoi''@;'; put 'put ''Ymlyblx4ZTRceGU3ZSBzZWt1bnQiLG06ImJpciBtaW51dCIsbW06IiVkIG1pbnV0IixoOiJiaXIgc2FnYXQiLGhoOiIlZCBzYWdhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsTToiYmlyIGFceGZkIixNTToiJWQgYVx4ZmQiLHk6ImJpciBceGZkeWwiLHl5OiIlZCBceGZkeWwi''@;'; put 'put ''fSxvcmRpbmFsOmZ1bmN0aW9uKEIsdyl7c3dpdGNoKHcpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRvIjpjYXNlIkREIjpyZXR1cm4gQjtkZWZhdWx0OmlmKDA9PT1CKXJldHVybiBCKyIndW5qeSI7dmFyIFA9QiUxMDtyZXR1cm4gQisoX1tQXXx8X1tCJTEwMC1QXXx8X1tCPj0xMDA/MTAwOm51''@;'; put 'put ''bGxdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDQ5MDQwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidGwtcGgiLHttb250aHM6IkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19B''@;'; put 'put ''Z29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJr''@;'; put 'put ''dWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX0x1X01hX01pX0h1X0JpX1NhYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI''@;'; put 'put ''Om1tIixMVFM6IkhIOm1tOnNzIixMOiJNTS9EL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IkxUIFtuZ2F5b25nIGFyYXddIixuZXh0RGF5OiJbQnVrYXMg''@;'; put 'put ''bmddIExUIixuZXh0V2VlazoiTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQiLGxhc3REYXk6IkxUIFtrYWhhcG9uXSIsbGFzdFdlZWs6IkxUIFtub29uZyBuYWthcmFhbmddIGRkZGQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InNhIGxvb2IgbmcgJXMiLHBhc3Q6IiVzIGFu''@;'; put 'put ''ZyBuYWthbGlwYXMiLHM6ImlsYW5nIHNlZ3VuZG8iLHNzOiIlZCBzZWd1bmRvIixtOiJpc2FuZyBtaW51dG8iLG1tOiIlZCBtaW51dG8iLGg6ImlzYW5nIG9yYXMiLGhoOiIlZCBvcmFzIixkOiJpc2FuZyBhcmF3IixkZDoiJWQgYXJhdyIsTToiaXNhbmcgYnV3YW4iLE1NOiIlZCBidXdhbiIs''@;'; put 'put ''eToiaXNhbmcgdGFvbiIseXk6IiVkIHRhb24ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3JldHVybiBnfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwxNzE4NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIF89InBhZ2hfd2FcdTIwMTlfY2hhXHUyMDE5X3dlal9sb1NfdmFnaF9qYXZfU29jaF9jaG9yZ2hfSHV0Ii5zcGxpdCgiXyIpO2Z1bmN0aW9uIHcoTyx6LE4sTCl7dmFyIEs9ZnVuY3Rpb24gUChPKXt2YXIgej1NYXRoLmZsb29yKE8lMWUzLzEwMCksTj1NYXRoLmZsb29y''@;'; put 'put ''KE8lMTAwLzEwKSxMPU8lMTAsSz0iIjtyZXR1cm4gej4wJiYoSys9X1t6XSsidmF0bGgiKSxOPjAmJihLKz0oIiIhPT1LPyIgIjoiIikrX1tOXSsibWFIIiksTD4wJiYoSys9KCIiIT09Sz8iICI6IiIpK19bTF0pLCIiPT09Sz8icGFnaCI6S30oTyk7c3dpdGNoKE4pe2Nhc2Uic3MiOnJldHVy''@;'; put 'put ''biBLKyIgbHVwIjtjYXNlIm1tIjpyZXR1cm4gSysiIHR1cCI7Y2FzZSJoaCI6cmV0dXJuIEsrIiByZXAiO2Nhc2UiZGQiOnJldHVybiBLKyIgamFqIjtjYXNlIk1NIjpyZXR1cm4gSysiIGphciI7Y2FzZSJ5eSI6cmV0dXJuIEsrIiBESVMifX1JLmRlZmluZUxvY2FsZSgidGxoIix7bW9udGhz''@;'; put 'put ''OiJ0ZXJhXHUyMDE5IGphciB3YVx1MjAxOV90ZXJhXHUyMDE5IGphciBjaGFcdTIwMTlfdGVyYVx1MjAxOSBqYXIgd2VqX3RlcmFcdTIwMTkgamFyIGxvU190ZXJhXHUyMDE5IGphciB2YWdoX3RlcmFcdTIwMTkgamFyIGphdl90ZXJhXHUyMDE5IGphciBTb2NoX3RlcmFcdTIwMTkgamFyIGNo''@;'; put 'put ''b3JnaF90ZXJhXHUyMDE5IGphciBIdXRfdGVyYVx1MjAxOSBqYXIgd2FcdTIwMTltYUhfdGVyYVx1MjAxOSBqYXIgd2FcdTIwMTltYUggd2FcdTIwMTlfdGVyYVx1MjAxOSBqYXIgd2FcdTIwMTltYUggY2hhXHUyMDE5Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYXIgd2FcdTIwMTlfamFy''@;'; put 'put ''IGNoYVx1MjAxOV9qYXIgd2VqX2phciBsb1NfamFyIHZhZ2hfamFyIGphdl9qYXIgU29jaF9qYXIgY2hvcmdoX2phciBIdXRfamFyIHdhXHUyMDE5bWFIX2phciB3YVx1MjAxOW1hSCB3YVx1MjAxOV9qYXIgd2FcdTIwMTltYUggY2hhXHUyMDE5Ii5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsd2Vla2RheXM6Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzTWluOiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoi''@;'; put 'put ''RCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltEYUhqYWpdIExUIixuZXh0RGF5OiJbd2FcdTIwMTlsZVNdIExUIixuZXh0V2VlazoiTExMIixsYXN0RGF5OiJbd2FcdTIwMTlIdVx1MjAxOV0gTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJMTEwiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24gZyhPKXt2YXIgej1PO3JldHVybi0xIT09Ty5pbmRleE9mKCJqYWoiKT96LnNsaWNlKDAsLTMpKyJsZVMiOi0xIT09Ty5pbmRleE9mKCJqYXIiKT96LnNsaWNlKDAsLTMpKyJ3YVEiOi0xIT09Ty5pbmRl''@;'; put 'put ''eE9mKCJESVMiKT96LnNsaWNlKDAsLTMpKyJuZW0iOnorIiBwSXEifSxwYXN0OmZ1bmN0aW9uIEIoTyl7dmFyIHo9TztyZXR1cm4tMSE9PU8uaW5kZXhPZigiamFqIik/ei5zbGljZSgwLC0zKSsiSHVcdTIwMTkiOi0xIT09Ty5pbmRleE9mKCJqYXIiKT96LnNsaWNlKDAsLTMpKyJ3ZW4iOi0x''@;'; put 'put ''IT09Ty5pbmRleE9mKCJESVMiKT96LnNsaWNlKDAsLTMpKyJiZW4iOnorIiByZXQifSxzOiJwdVMgbHVwIixzczp3LG06IndhXHUyMDE5IHR1cCIsbW06dyxoOiJ3YVx1MjAxOSByZXAiLGhoOncsZDoid2FcdTIwMTkgamFqIixkZDp3LE06IndhXHUyMDE5IGphciIsTU06dyx5OiJ3YVx1MjAx''@;'; put 'put ''OSBESVMiLHl5Ond9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2MDE1MzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6IidpbmNpIiw1OiIn''@;'; put 'put ''aW5jaSIsODoiJ2luY2kiLDcwOiInaW5jaSIsODA6IidpbmNpIiwyOiInbmNpIiw3OiInbmNpIiwyMDoiJ25jaSIsNTA6IiduY2kiLDM6IidceGZjbmNceGZjIiw0OiInXHhmY25jXHhmYyIsMTAwOiInXHhmY25jXHhmYyIsNjoiJ25jXHUwMTMxIiw5OiIndW5jdSIsMTA6Iid1bmN1IiwzMDoi''@;'; put 'put ''J3VuY3UiLDYwOiInXHUwMTMxbmNcdTAxMzEiLDkwOiInXHUwMTMxbmNcdTAxMzEifTtJLmRlZmluZUxvY2FsZSgidHIiLHttb250aHM6Ik9jYWtfXHUwMTVldWJhdF9NYXJ0X05pc2FuX01heVx1MDEzMXNfSGF6aXJhbl9UZW1tdXpfQVx1MDExZnVzdG9zX0V5bFx4ZmNsX0VraW1fS2FzXHUw''@;'; put 'put ''MTMxbV9BcmFsXHUwMTMxayIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiT2NhX1x1MDE1ZXViX01hcl9OaXNfTWF5X0hhel9UZW1fQVx1MDExZnVfRXlsX0VraV9LYXNfQXJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJQYXphcl9QYXphcnRlc2lfU2FsXHUwMTMxX1x4Yzdhclx1MDE1ZmFtYmFf''@;'; put 'put ''UGVyXHUwMTVmZW1iZV9DdW1hX0N1bWFydGVzaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQYXpfUHp0X1NhbF9ceGM3YXJfUGVyX0N1bV9DbXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlB6X1B0X1NhX1x4YzdhX1BlX0N1X0N0Ii5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9u''@;'; put 'put ''KEIsdyxQKXtyZXR1cm4gQjwxMj9QPyJceGY2XHhmNiI6Ilx4ZDZceGQ2IjpQPyJceGY2cyI6Ilx4ZDZTIn0sbWVyaWRpZW1QYXJzZTovXHhmNlx4ZjZ8XHhkNlx4ZDZ8XHhmNnN8XHhkNlMvLGlzUE06ZnVuY3Rpb24oQil7cmV0dXJuIlx4ZjZzIj09PUJ8fCJceGQ2UyI9PT1CfSxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWF0XSBMVCIsbmV4''@;'; put 'put ''dERheToiW3lhclx1MDEzMW4gc2FhdF0gTFQiLG5leHRXZWVrOiJbZ2VsZWNla10gZGRkZCBbc2FhdF0gTFQiLGxhc3REYXk6IltkXHhmY25dIExUIixsYXN0V2VlazoiW2dlXHhlN2VuXSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29u''@;'; put 'put ''cmEiLHBhc3Q6IiVzIFx4ZjZuY2UiLHM6ImJpcmthXHhlNyBzYW5peWUiLHNzOiIlZCBzYW5peWUiLG06ImJpciBkYWtpa2EiLG1tOiIlZCBkYWtpa2EiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsdzoiYmlyIGhhZnRhIix3dzoiJWQg''@;'; put 'put ''aGFmdGEiLE06ImJpciBheSIsTU06IiVkIGF5Iix5OiJiaXIgeVx1MDEzMWwiLHl5OiIlZCB5XHUwMTMxbCJ9LG9yZGluYWw6ZnVuY3Rpb24oQix3KXtzd2l0Y2godyl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiRG8iOmNhc2UiREQiOnJldHVybiBCO2RlZmF1bHQ6aWYoMD09PUIpcmV0dXJuIEIr''@;'; put 'put ''IidcdTAxMzFuY1x1MDEzMSI7dmFyIFA9QiUxMDtyZXR1cm4gQisoX1tQXXx8X1tCJTEwMC1QXXx8X1tCPj0xMDA/MTAwOm51bGxdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDg4NTIxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5j''@;'; put 'put ''dGlvbiBnKEIsdyxQLEYpe3ZhciBPPXtzOlsidmllbnNhcyBzZWN1bmRzIiwiJ2llbnNhcyBzZWN1bmRzIl0sc3M6W0IrIiBzZWN1bmRzIixCKyIgc2VjdW5kcyJdLG06WyInbiBtXHhlZHV0IiwiJ2llbnMgbVx4ZWR1dCJdLG1tOltCKyIgbVx4ZWR1dHMiLEIrIiBtXHhlZHV0cyJdLGg6WyIn''@;'; put 'put ''biBceGZlb3JhIiwiJ2llbnNhIFx4ZmVvcmEiXSxoaDpbQisiIFx4ZmVvcmFzIixCKyIgXHhmZW9yYXMiXSxkOlsiJ24geml1YSIsIidpZW5zYSB6aXVhIl0sZGQ6W0IrIiB6aXVhcyIsQisiIHppdWFzIl0sTTpbIiduIG1lcyIsIidpZW5zIG1lcyJdLE1NOltCKyIgbWVzZW4iLEIrIiBtZXNl''@;'; put 'put ''biJdLHk6WyInbiBhciIsIidpZW5zIGFyIl0seXk6W0IrIiBhcnMiLEIrIiBhcnMiXX07cmV0dXJuIEZ8fHc/T1tQXVswXTpPW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJ0emwiLHttb250aHM6IkphbnVhcl9GZXZyYWdsaF9NYXJceGU3X0F2clx4ZWZ1X01haV9HXHhmY25fSnVsaWFfR3VzY2h0''@;'; put 'put ''X1NldGVtdmFyX0xpc3RvcFx4ZTR0c19Ob2VtdmFyX1plY2VtdmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmV2X01hcl9BdnJfTWFpX0dceGZjbl9KdWxfR3VzX1NldF9MaXNfTm9lX1plYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU1x4ZmFsYWRpX0xceGZhbmVceGU3aV9NYWl0''@;'; put 'put ''emlfTVx4ZTFyY3VyaV9YaFx4ZmFhZGlfVmlceGU5bmVyXHhlN2lfU1x4ZTF0dXJpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNceGZhbF9MXHhmYW5fTWFpX01ceGUxcl9YaFx4ZmFfVmlceGU5X1NceGUxdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU1x4ZmFfTFx4ZmFfTWFfTVx4''@;'; put 'put ''ZTFfWGhfVmlfU1x4ZTEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gW2RhbGxhc10gWVlZWSIsTExMOiJELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0iLExMTEw6ImRkZGQsIFtsaV0gRC4g''@;'; put 'put ''TU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZFwnb3xkXCdhL2ksaXNQTTpmdW5jdGlvbihCKXtyZXR1cm4iZCdvIj09PUIudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPjExP1A/ImQnbyI6IkQnTyI6UD8iZCdhIjoiRCdB''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6IltveGhpIFx4ZTBdIExUIixuZXh0RGF5OiJbZGVtXHhlMCBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbaWVpcmkgXHhlMF0gTFQiLGxhc3RXZWVrOiJbc1x4ZmNyIGVsXSBkZGRkIFtsYXN0ZXUgXHhlMF0gTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9zcHJlaSAlcyIscGFzdDoiamElcyIsczpnLHNzOmcsbTpnLG1tOmcsaDpnLGhoOmcsZDpnLGRkOmcsTTpnLE1NOmcseTpnLHl5Omd9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVr''@;'; put 'put ''Ontkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwyMjIzNDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInR6bS1sYXRuIix7bW9udGhzOiJpbm5heXJfYnJcdTAyZTRheXJcdTAyZTRfbWFyXHUwMmU0c1x1MDJlNF9pYnJpcl9tYXl5''@;'; put 'put ''d195d255d195d2x5d3pfXHUwMjYzd1x1MDE2MXRfXHUwMTYxd3RhbmJpcl9rdFx1MDJlNHdiclx1MDJlNF9ud3dhbmJpcl9kd2puYmlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJpbm5heXJfYnJcdTAyZTRheXJcdTAyZTRfbWFyXHUwMmU0c1x1MDJlNF9pYnJpcl9tYXl5d195d255d195''@;'; put 'put ''d2x5d3pfXHUwMjYzd1x1MDE2MXRfXHUwMTYxd3RhbmJpcl9rdFx1MDJlNHdiclx1MDJlNF9ud3dhbmJpcl9kd2puYmlyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''U2hvcnQ6ImFzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2lcdTFlMGR5YXMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImFzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2lcdTFlMGR5YXMiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6''@;'; put 'put ''e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilthc2RraCBnXSBMVCIsbmV4dERheToiW2Fza2EgZ10g''@;'; put 'put ''TFQiLG5leHRXZWVrOiJkZGRkIFtnXSBMVCIsbGFzdERheToiW2Fzc2FudCBnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2ddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWRraCBzIHlhbiAlcyIscGFzdDoieWFuICVzIixzOiJpbWlrIixzczoiJWQgaW1payIsbToi''@;'; put 'put ''bWludVx1MWUwZCIsbW06IiVkIG1pbnVcdTFlMGQiLGg6InNhXHUwMjViYSIsaGg6IiVkIHRhc3NhXHUwMjViaW4iLGQ6ImFzcyIsZGQ6IiVkIG9zc2FuIixNOiJheW93ciIsTU06IiVkIGl5eWlybiIseToiYXNnYXMiLHl5OiIlZCBpc2dhc24ifSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KHko''@;'; put 'put ''OTc1ODYpKX0sMTgwMTA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ0em0iLHttb250aHM6Ilx1MmQ0OVx1MmQ0Zlx1MmQ0Zlx1MmQzMFx1MmQ2Mlx1MmQ1NF9cdTJkMzFcdTJkNTVcdTJkMzBcdTJkNjJcdTJkNTVfXHUyZDRlXHUy''@;'; put 'put ''ZDMwXHUyZDU1XHUyZDVhX1x1MmQ0OVx1MmQzMVx1MmQ1NFx1MmQ0OVx1MmQ1NF9cdTJkNGVcdTJkMzBcdTJkNjJcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRmXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0ZFx1MmQ2Mlx1MmQ1M1x1MmQ2M19cdTJkNTZcdTJkNTNcdTJkNWJc''@;'; put 'put ''dTJkNWNfXHUyZDViXHUyZDUzXHUyZDVjXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzZFx1MmQ1Zlx1MmQ1M1x1MmQzMVx1MmQ1NV9cdTJkNGZcdTJkNTNcdTJkNjFcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDM3XHUyZDUzXHUyZDRhXHUyZDRmXHUyZDMx''@;'; put 'put ''XHUyZDQ5XHUyZDU0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTJkNDlcdTJkNGZcdTJkNGZcdTJkMzBcdTJkNjJcdTJkNTRfXHUyZDMxXHUyZDU1XHUyZDMwXHUyZDYyXHUyZDU1X1x1MmQ0ZVx1MmQzMFx1MmQ1NVx1MmQ1YV9cdTJkNDlcdTJkMzFcdTJkNTRcdTJkNDlcdTJkNTRfXHUy''@;'; put 'put ''ZDRlXHUyZDMwXHUyZDYyXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0Zlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGRcdTJkNjJcdTJkNTNcdTJkNjNfXHUyZDU2XHUyZDUzXHUyZDViXHUyZDVjX1x1MmQ1Ylx1MmQ1M1x1MmQ1Y1x1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1''@;'; put 'put ''MmQ1NF9cdTJkM2RcdTJkNWZcdTJkNTNcdTJkMzFcdTJkNTVfXHUyZDRmXHUyZDUzXHUyZDYxXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzN1x1MmQ1M1x1MmQ0YVx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUyZDMwXHUyZDU5XHUy''@;'; put 'put ''ZDMwXHUyZDRlXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ2Mlx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDU0XHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlc''@;'; put 'put ''dTJkNDlcdTJkNGVcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDM5XHUyZDYyXHUyZDMwXHUyZDU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNjJcdTJkNGZcdTJkMzBcdTJk''@;'; put 'put ''NTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1''@;'; put 'put ''MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUyZDMwXHUyZDU5XHUyZDMwXHUyZDRlXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ2Mlx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNk''@;'; put 'put ''XHUyZDU0XHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGVcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDM5XHUyZDYyXHUyZDMwXHUyZDU5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntM''@;'; put 'put ''VDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUyZDMwXHUyZDU5XHUyZDM3XHUyZDQ1IFx1MmQzNF0g''@;'; put 'put ''TFQiLG5leHREYXk6IltcdTJkMzBcdTJkNTlcdTJkM2RcdTJkMzAgXHUyZDM0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MmQzNF0gTFQiLGxhc3REYXk6IltcdTJkMzBcdTJkNWFcdTJkMzBcdTJkNGZcdTJkNWMgXHUyZDM0XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MmQzNF0gTFQiLHNhbWVF''@;'; put 'put ''bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MmQzN1x1MmQzMFx1MmQzN1x1MmQ0NSBcdTJkNTkgXHUyZDYyXHUyZDMwXHUyZDRmICVzIixwYXN0OiJcdTJkNjJcdTJkMzBcdTJkNGYgJXMiLHM6Ilx1MmQ0OVx1MmQ0ZVx1MmQ0OVx1MmQzZCIsc3M6IiVkIFx1MmQ0OVx1MmQ0ZVx1''@;'; put 'put ''MmQ0OVx1MmQzZCIsbToiXHUyZDRlXHUyZDQ5XHUyZDRmXHUyZDUzXHUyZDNhIixtbToiJWQgXHUyZDRlXHUyZDQ5XHUyZDRmXHUyZDUzXHUyZDNhIixoOiJcdTJkNTlcdTJkMzBcdTJkNDRcdTJkMzAiLGhoOiIlZCBcdTJkNWNcdTJkMzBcdTJkNTlcdTJkNTlcdTJkMzBcdTJkNDRcdTJkNDlc''@;'; put 'put ''dTJkNGYiLGQ6Ilx1MmQzMFx1MmQ1OVx1MmQ1OSIsZGQ6IiVkIG9cdTJkNTlcdTJkNTlcdTJkMzBcdTJkNGYiLE06Ilx1MmQzMFx1MmQ2Mm9cdTJkNTNcdTJkNTQiLE1NOiIlZCBcdTJkNDlcdTJkNjJcdTJkNjJcdTJkNDlcdTJkNTRcdTJkNGYiLHk6Ilx1MmQzMFx1MmQ1OVx1MmQzM1x1MmQz''@;'; put 'put ''MFx1MmQ1OSIseXk6IiVkIFx1MmQ0OVx1MmQ1OVx1MmQzM1x1MmQzMFx1MmQ1OVx1MmQ0ZiJ9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oeSg5NzU4NikpfSw2MzM0OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInVnLWNuIix7bW9u''@;'; put 'put ''dGhzOiJcdTA2NGFcdTA2MjdcdTA2NDZcdTA2Y2JcdTA2MjdcdTA2MzFfXHUwNjQxXHUwNmQwXHUwNmNiXHUwNjMxXHUwNjI3XHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyYV9cdTA2MjZcdTA2MjdcdTA2N2VcdTA2MzFcdTA2ZDBcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYy''@;'; put 'put ''Nlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0Nl9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDRfXHUwNjI2XHUwNjI3XHUwNmNiXHUwNjNhXHUwNmM3XHUwNjMzXHUwNjJhX1x1MDYzM1x1MDZkMFx1MDY0Nlx1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MjZcdTA2YzZcdTA2''@;'; put 'put ''NDNcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjRhXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyZlx1MDZkMFx1MDY0M1x1MDYyN1x1MDYyOFx1MDY0OVx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjI3XHUwNjQ2XHUw''@;'; put 'put ''NmNiXHUwNjI3XHUwNjMxX1x1MDY0MVx1MDZkMFx1MDZjYlx1MDYzMVx1MDYyN1x1MDY0NF9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MmFfXHUwNjI2XHUwNjI3XHUwNjdlXHUwNjMxXHUwNmQwXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDZf''@;'; put 'put ''XHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ0X1x1MDYyNlx1MDYyN1x1MDZjYlx1MDYzYVx1MDZjN1x1MDYzM1x1MDYyYV9cdTA2MzNcdTA2ZDBcdTA2NDZcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjI2XHUwNmM2XHUwNjQzXHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5''@;'; put 'put ''XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0YVx1MDYyN1x1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MmZcdTA2ZDBcdTA2NDNcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDY0YVx1MDZkNVx1MDY0M1x1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9c''@;'; put 'put ''dTA2MmZcdTA2YzhcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjMzXHUwNmQ1XHUwNjRhXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDY4Nlx1MDYyN1x1MDYzMVx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2N2VcdTA2ZDVcdTA2NGFcdTA2MzRc''@;'; put 'put ''dTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjJjXHUwNmM4XHUwNjQ1XHUwNmQ1X1x1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2NGFcdTA2ZDVfXHUwNjJmXHUwNmM4X1x1MDYzM1x1MDZkNV9cdTA2ODZcdTA2MjdfXHUwNjdl''@;'; put 'put ''XHUwNmQ1X1x1MDYyY1x1MDZjOF9cdTA2MzRcdTA2ZDUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDY0YVx1MDZkNV9cdTA2MmZcdTA2YzhfXHUwNjMzXHUwNmQ1X1x1MDY4Nlx1MDYyN19cdTA2N2VcdTA2ZDVfXHUwNjJjXHUwNmM4X1x1MDYzNFx1MDZkNSIuc3BsaXQoIl8iKSxsb25n''@;'; put 'put ''RGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWS1cdTA2NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5IixMTEw6IllZWVktXHUw''@;'; put 'put ''NjRhXHUwNjQ5XHUwNjQ0XHUwNjQ5TS1cdTA2MjZcdTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OVx1MDYwYyBISDptbSIsTExMTDoiZGRkZFx1MDYwYyBZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUwNjI2XHUwNjI3XHUwNjRh''@;'; put 'put ''XHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDlcdTA2MGMgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2NGFcdTA2ZDBcdTA2MzFcdTA2NDlcdTA2NDUgXHUwNjQzXHUwNmQwXHUwNjg2XHUwNmQ1fFx1MDYzM1x1MDZkNVx1MDZiZVx1MDZkNVx1MDYzMXxcdTA2''@;'; put 'put ''ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2fFx1MDY4Nlx1MDZjOFx1MDYzNHxcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2fFx1MDY0M1x1MDZkNVx1''@;'; put 'put ''MDY4Ni8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksIlx1MDY0YVx1MDZkMFx1MDYzMVx1MDY0OVx1MDY0NSBcdTA2NDNcdTA2ZDBcdTA2ODZcdTA2ZDUiPT09Qnx8Ilx1MDYzM1x1MDZkNVx1MDZiZVx1MDZkNVx1MDYzMSI9PT1CfHwiXHUwNjg2XHUw''@;'; put 'put ''NmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NiI9PT1CP2c6Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiPT09Qnx8Ilx1MDY0M1x1MDZkNVx1MDY4NiI9PT1C''@;'; put 'put ''P2crMTI6Zz49MTE/ZzpnKzEyfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7dmFyIFA9MTAwKmcrQjtyZXR1cm4gUDw2MDA/Ilx1MDY0YVx1MDZkMFx1MDYzMVx1MDY0OVx1MDY0NSBcdTA2NDNcdTA2ZDBcdTA2ODZcdTA2ZDUiOlA8OTAwPyJcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2''@;'; put 'put ''MzEiOlA8MTEzMD8iXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NiI6UDwxMjMwPyJcdTA2ODZcdTA2YzhcdTA2MzQiOlA8MTgwMD8iXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZk''@;'; put 'put ''MFx1MDY0YVx1MDY0OVx1MDY0NiI6Ilx1MDY0M1x1MDZkNVx1MDY4NiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI4XHUwNmM4XHUwNmFmXHUwNmM4XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLG5leHREYXk6IltcdTA2MjZcdTA2ZDVcdTA2MmFcdTA2ZDUg''@;'; put 'put ''XHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhXSBMVCIsbmV4dFdlZWs6IltcdTA2NDNcdTA2ZDBcdTA2NDRcdTA2ZDVcdTA2MzFcdTA2NDNcdTA2NDldIGRkZGQgW1x1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2MmFcdTA2YzZcdTA2NDZcdTA2''@;'; put 'put ''YzhcdTA2YWZcdTA2YzhcdTA2NDZdIExUIixsYXN0V2VlazoiW1x1MDYyNlx1MDYyN1x1MDY0NFx1MDYyZlx1MDY0OVx1MDY0Nlx1MDY0Mlx1MDY0OV0gZGRkZCBbXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi''@;'; put 'put ''JXMgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2IixwYXN0OiIlcyBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiLHM6Ilx1MDY0Nlx1MDZkNVx1MDY4Nlx1MDY4Nlx1MDZkNSBcdTA2MzNcdTA2ZDBcdTA2NDNcdTA2NDhcdTA2NDZcdTA2MmEiLHNzOiIlZCBcdTA2MzNcdTA2''@;'; put 'put ''ZDBcdTA2NDNcdTA2NDhcdTA2NDZcdTA2MmEiLG06Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2NDVcdTA2NDlcdTA2NDZcdTA2YzdcdTA2MmEiLG1tOiIlZCBcdTA2NDVcdTA2NDlcdTA2NDZcdTA2YzdcdTA2MmEiLGg6Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2''@;'; put 'put ''ZDVcdTA2MmEiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmEiLGQ6Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2NDNcdTA2YzhcdTA2NDYiLGRkOiIlZCBcdTA2NDNcdTA2YzhcdTA2NDYiLE06Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2MjZcdTA2MjdcdTA2NGEiLE1NOiIl''@;'; put 'put ''ZCBcdTA2MjZcdTA2MjdcdTA2NGEiLHk6Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2NGFcdTA2NDlcdTA2NDQiLHl5OiIlZCBcdTA2NGFcdTA2NDlcdTA2NDQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDl8LVx1MDYyNlx1MDYyN1x1''@;'; put 'put ''MDY0YXwtXHUwNmJlXHUwNmQ1XHUwNjdlXHUwNjJhXHUwNmQ1KS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyItXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGcrIi1cdTA2''@;'; put 'put ''YmVcdTA2ZDVcdTA2N2VcdTA2MmFcdTA2ZDUiO2RlZmF1bHQ6cmV0dXJuIGd9fSxwcmVwYXJzZTpmdW5jdGlvbihnKXtyZXR1cm4gZy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGcpe3JldHVybiBnLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rv''@;'; put 'put ''dzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDY4NDc5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKEYsTyx6KXtyZXR1cm4ibSI9PT16P08/Ilx1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzMCI6Ilx1MDQ0NVx1MDQz''@;'; put 'put ''Mlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQ0MyI6ImgiPT09ej9PPyJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiOkYrIiAiK2Z1bmN0aW9uIF8oRixPKXt2YXIgej1GLnNwbGl0KCJfIik7cmV0''@;'; put 'put ''dXJuIE8lMTA9PTEmJk8lMTAwIT0xMT96WzBdOk8lMTA+PTImJk8lMTA8PTQmJihPJTEwMDwxMHx8TyUxMDA+PTIwKT96WzFdOnpbMl19KHtzczpPPyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0''@;'; put 'put ''XHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0M19cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzhfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUw''@;'; put 'put ''NDM0IixtbTpPPyJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzBfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZCI6Ilx1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQz''@;'; put 'put ''OFx1MDQzZFx1MDQ0M19cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzhfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkIixoaDpPPyJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzBfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUw''@;'; put 'put ''NDNkXHUwNDM4X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZCI6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0M19cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzhfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkIixkZDoiXHUwNDM0XHUwNDM1''@;'; put 'put ''XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ1Nl9cdTA0MzRcdTA0M2RcdTA0NTZcdTA0MzIiLE1NOiJcdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NGNfXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDU2X1x1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0''@;'; put 'put ''Nlx1MDQ1Nlx1MDQzMiIseXk6Ilx1MDQ0MFx1MDQ1Nlx1MDQzYV9cdTA0NDBcdTA0M2VcdTA0M2FcdTA0MzhfXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDU2XHUwNDMyIn1bel0sK0YpfWZ1bmN0aW9uIHcoRil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEYrIlx1MDQzZSIrKDExPT09dGhpcy5o''@;'; put 'put ''b3VycygpPyJcdTA0MzEiOiIiKSsiXSBMVCJ9fUkuZGVmaW5lTG9jYWxlKCJ1ayIse21vbnRoczp7Zm9ybWF0OiJcdTA0NDFcdTA0NTZcdTA0NDdcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDNlXHUwNDMzXHUwNDNlX1x1MDQzMVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzN1x1''@;'; put 'put ''MDQzZFx1MDQ0Zl9cdTA0M2FcdTA0MzJcdTA0NTZcdTA0NDJcdTA0M2RcdTA0NGZfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDNkXHUwNDRmX1x1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMlx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0MzhcdTA0M2ZcdTA0M2RcdTA0NGZfXHUwNDQxXHUwNDM1''@;'; put 'put ''XHUwNDQwXHUwNDNmXHUwNDNkXHUwNDRmX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzZFx1MDQ0Zl9cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDNlXHUwNDNmXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQz''@;'; put 'put ''M1x1MDQ0MFx1MDQ0M1x1MDQzNFx1MDQzZFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NDFcdTA0NTZcdTA0NDdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDM4XHUwNDM5X1x1MDQzMVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzN1x1MDQzNVx1MDQz''@;'; put 'put ''ZFx1MDQ0Y19cdTA0M2FcdTA0MzJcdTA0NTZcdTA0NDJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0MzhcdTA0M2ZcdTA0MzVcdTA0''@;'; put 'put ''M2RcdTA0NGNfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDM4XHUwNDQxXHUw''@;'; put 'put ''NDQyXHUwNDNlXHUwNDNmXHUwNDMwXHUwNDM0X1x1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0MVx1MDQ1Nlx1MDQ0N19cdTA0M2JcdTA0NGVcdTA0NDJfXHUwNDMxXHUwNDM1XHUwNDQwX1x1MDQzYVx1MDQz''@;'; put 'put ''Mlx1MDQ1Nlx1MDQ0Ml9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJfXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMyX1x1MDQzYlx1MDQzOFx1MDQzZl9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0M2ZfXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzNlx1MDQzZVx1MDQzMlx1MDQ0Ml9cdTA0M2JcdTA0Mzhc''@;'; put 'put ''dTA0NDFcdTA0NDJfXHUwNDMzXHUwNDQwXHUwNDQzXHUwNDM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOmZ1bmN0aW9uIEIoRixPKXt2YXIgej17bm9taW5hdGl2ZToiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1''@;'; put 'put ''Nlx1MDQzYlx1MDQzZVx1MDQzYV9cdTA0MzJcdTA0NTZcdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2VcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTIwMTlcdTA0NGZcdTA0''@;'; put 'put ''NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NGZfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLGFjY3VzYXRpdmU6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ0ZV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0''@;'; put 'put ''M2JcdTA0M2VcdTA0M2FfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUw''@;'; put 'put ''NDNkXHUwNDM4XHUwNDQ2XHUwNDRlX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxnZW5pdGl2ZToiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDU2X1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQz''@;'; put 'put ''YVx1MDQzMF9cdTA0MzJcdTA0NTZcdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2FcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4X1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzM1x1MDQzMF9cdTA0M2ZcdTIwMTlcdTA0NGZcdTA0''@;'; put 'put ''NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NTZfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDM4Ii5zcGxpdCgiXyIpfTtyZXR1cm4hMD09PUY/ei5ub21pbmF0aXZlLnNsaWNlKDEsNykuY29uY2F0KHoubm9taW5hdGl2ZS5zbGljZSgwLDEpKTpGP3pbLyhcW1tcdTA0MTJcdTA0''@;'; put 'put ''MzJcdTA0MjNcdTA0NDNdXF0pID9kZGRkLy50ZXN0KE8pPyJhY2N1c2F0aXZlIjovXFs/KD86XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDNlXHUwNDU3fFx1MDQzZFx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzZlx1MDQzZFx1MDQzZVx1MDQ1Nyk/ID9cXSA/ZGRkZC8u''@;'; put 'put ''dGVzdChPKT8iZ2VuaXRpdmUiOiJub21pbmF0aXZlIl1bRi5kYXkoKV06ei5ub21pbmF0aXZlfSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNz''@;'; put 'put ''IixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNDQwLiIsTExMOiJEIE1NTU0gWVlZWSBcdTA0NDAuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDQwLiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTp3KCJbXHUwNDIxXHUwNDRjXHUwNDNlXHUwNDMzXHUw''@;'; put 'put ''NDNlXHUwNDM0XHUwNDNkXHUwNDU2ICIpLG5leHREYXk6dygiW1x1MDQxN1x1MDQzMFx1MDQzMlx1MDQ0Mlx1MDQ0MFx1MDQzMCAiKSxsYXN0RGF5OncoIltcdTA0MTJcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAgIiksbmV4dFdlZWs6dygiW1x1MDQyM10gZGRkZCBbIiksbGFzdFdlZWs6ZnVu''@;'; put 'put ''Y3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiB3KCJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDNlXHUwNDU3XSBkZGRkIFsiKS5jYWxsKHRoaXMpO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiB3KCJbXHUw''@;'; put 'put ''NDFjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDNlXHUwNDMzXHUwNDNlXSBkZGRkIFsiKS5jYWxsKHRoaXMpfX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiIlcyBcdTA0NDJcdTA0M2VcdTA0M2NcdTA0NDMiLHM6Ilx1MDQz''@;'; put 'put ''NFx1MDQzNVx1MDQzYVx1MDQ1Nlx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQzMCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOmcsbTpnLG1tOmcsaDoiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIixoaDpnLGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1''@;'; put 'put ''MDQ0YyIsZGQ6ZyxNOiJcdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NGMiLE1NOmcseToiXHUwNDQwXHUwNDU2XHUwNDNhIix5eTpnfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0NTZ8XHUwNDQwXHUwNDMwXHUwNDNkXHUwNDNhXHUwNDQzfFx1MDQzNFx1''@;'; put 'put ''MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAvLGlzUE06ZnVuY3Rpb24oRil7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCkkLy50ZXN0KEYpfSxtZXJpZGllbTpmdW5jdGlvbihGLE8s''@;'; put 'put ''eil7cmV0dXJuIEY8ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDU2IjpGPDEyPyJcdTA0NDBcdTA0MzBcdTA0M2RcdTA0M2FcdTA0NDMiOkY8MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9udGhPcmRpbmFsUGFy''@;'; put 'put ''c2U6L1xkezEsMn0tKFx1MDQzOXxcdTA0MzNcdTA0M2UpLyxvcmRpbmFsOmZ1bmN0aW9uKEYsTyl7c3dpdGNoKE8pe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBGKyItXHUwNDM5IjtjYXNlIkQiOnJldHVybiBGKyItXHUwNDMzXHUwNDNlIjtkZWZh''@;'; put 'put ''dWx0OnJldHVybiBGfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNDMwMjQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPVsiXHUwNjJjXHUwNjQ2XHUwNjQ4XHUwNjMxXHUwNmNjIiwiXHUwNjQxXHUwNjMxXHUwNjQ4XHUwNjMxXHUw''@;'; put 'put ''NmNjIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjg2IiwiXHUwNjI3XHUwNjdlXHUwNjMxXHUwNmNjXHUwNjQ0IiwiXHUwNjQ1XHUwNjI2XHUwNmNjIiwiXHUwNjJjXHUwNjQ4XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4XHUwNjQ0XHUwNjI3XHUwNjI2XHUwNmNjIiwiXHUwNjI3XHUwNmFmXHUwNjMz''@;'; put 'put ''XHUwNjJhIiwiXHUwNjMzXHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl0sZz1bIlx1MDYyN1x1MDYyYVx1''@;'; put 'put ''MDY0OFx1MDYyN1x1MDYzMSIsIlx1MDY3ZVx1MDZjY1x1MDYzMSIsIlx1MDY0NVx1MDY0Nlx1MDZhZlx1MDY0NCIsIlx1MDYyOFx1MDYyZlx1MDZiZSIsIlx1MDYyY1x1MDY0NVx1MDYzOVx1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDYyY1x1MDY0NVx1MDYzOVx1MDZjMSIsIlx1MDZjMVx1MDY0''@;'; put 'put ''MVx1MDYyYVx1MDZjMSJdO0kuZGVmaW5lTG9jYWxlKCJ1ciIse21vbnRoczpfLG1vbnRoc1Nob3J0Ol8sd2Vla2RheXM6Zyx3ZWVrZGF5c1Nob3J0Omcsd2Vla2RheXNNaW46Zyxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBN''@;'; put 'put ''TU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGRcdTA2MGMgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzVcdTA2MjhcdTA2MmR8XHUwNjM0XHUwNjI3XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTA2MzRcdTA2MjdcdTA2''@;'; put 'put ''NDUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyPyJcdTA2MzVcdTA2MjhcdTA2MmQiOiJcdTA2MzRcdTA2MjdcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyMlx1MDYyYyBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUw''@;'; put 'put ''NmE5XHUwNjQ0IFx1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNmFmXHUwNjMwXHUwNjM0XHUwNjJhXHUwNmMxIFx1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MjhcdTA2NDhcdTA2NDJc''@;'; put 'put ''dTA2MmFdIExUIixsYXN0V2VlazoiW1x1MDZhZlx1MDYzMFx1MDYzNFx1MDYyYVx1MDZjMV0gZGRkZCBbXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjI4XHUwNjM5XHUwNjJmIixwYXN0OiIlcyBcdTA2NDJc''@;'; put 'put ''dTA2MjhcdTA2NDQiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MzNcdTA2Y2NcdTA2YTlcdTA2NDZcdTA2ODgiLHNzOiIlZCBcdTA2MzNcdTA2Y2NcdTA2YTlcdTA2NDZcdTA2ODgiLG06Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2NDVcdTA2NDZcdTA2NzkiLG1tOiIlZCBcdTA2NDVcdTA2''@;'; put 'put ''NDZcdTA2NzkiLGg6Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2YWZcdTA2YmVcdTA2NDZcdTA2NzlcdTA2YzEiLGhoOiIlZCBcdTA2YWZcdTA2YmVcdTA2NDZcdTA2NzlcdTA2ZDIiLGQ6Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2MmZcdTA2NDYiLGRkOiIlZCBcdTA2MmZcdTA2NDYiLE06Ilx1''@;'; put 'put ''MDYyN1x1MDZjY1x1MDZhOSBcdTA2NDVcdTA2MjdcdTA2YzEiLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2YzEiLHk6Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5y''@;'; put 'put ''ZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDcyMzc2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRl''@;'; put 'put ''ZmluZUxvY2FsZSgidXotbGF0biIse21vbnRoczoiWWFudmFyX0ZldnJhbF9NYXJ0X0FwcmVsX01heV9JeXVuX0l5dWxfQXZndXN0X1NlbnRhYnJfT2t0YWJyX05veWFicl9EZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Illhbl9GZXZfTWFyX0Fwcl9NYXlfSXl1bl9JeXVsX0F2Z19T''@;'; put 'put ''ZW5fT2t0X05veV9EZWsiLnNwbGl0KCJfIiksd2Vla2RheXM6Illha3NoYW5iYV9EdXNoYW5iYV9TZXNoYW5iYV9DaG9yc2hhbmJhX1BheXNoYW5iYV9KdW1hX1NoYW5iYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJZYWtfRHVzaF9TZXNoX0Nob3JfUGF5X0p1bV9TaGFuIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzTWluOiJZYV9EdV9TZV9DaG9fUGFfSnVfU2hhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiRCBNTU1NIFlZ''@;'; put 'put ''WVksIGRkZGQgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0J1Z3VuIHNvYXRdIExUIFtkYV0iLG5leHREYXk6IltFcnRhZ2FdIExUIFtkYV0iLG5leHRXZWVrOiJkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0iLGxhc3REYXk6IltLZWNoYSBzb2F0XSBMVCBbZGFdIixsYXN0V2VlazoiW08n''@;'; put 'put ''dGdhbl0gZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJZYXFpbiAlcyBpY2hpZGEiLHBhc3Q6IkJpciBuZWNoYSAlcyBvbGRpbiIsczoic29uaXlhIixzczoiJWQgc29uaXlhIixtOiJiaXIgZGFxaXFhIixtbToiJWQgZGFxaXFh''@;'; put 'put ''IixoOiJiaXIgc29hdCIsaGg6IiVkIHNvYXQiLGQ6ImJpciBrdW4iLGRkOiIlZCBrdW4iLE06ImJpciBveSIsTU06IiVkIG95Iix5OiJiaXIgeWlsIix5eToiJWQgeWlsIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sMTk4MDA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24o''@;'; put 'put ''SSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ1eiIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUw''@;'; put 'put ''NDNiX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRm''@;'; put 'put ''XHUwNDMxXHUwNDQwX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMl9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1''@;'; put 'put ''MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNkX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUw''@;'; put 'put ''NDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MmZcdTA0M2FcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDE0XHUwNDQzXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQyMVx1MDQzNVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MjdcdTA0''@;'; put 'put ''M2VcdTA0NDBcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDFmXHUwNDMwXHUwNDM5XHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxNlx1MDQ0M1x1MDQzY1x1MDQzMF9cdTA0MjhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNT''@;'; put 'put ''aG9ydDoiXHUwNDJmXHUwNDNhXHUwNDQ4X1x1MDQxNFx1MDQ0M1x1MDQ0OF9cdTA0MjFcdTA0MzVcdTA0NDhfXHUwNDI3XHUwNDNlXHUwNDQwX1x1MDQxZlx1MDQzMFx1MDQzOV9cdTA0MTZcdTA0NDNcdTA0M2NfXHUwNDI4XHUwNDMwXHUwNDNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJc''@;'; put 'put ''dTA0MmZcdTA0M2FfXHUwNDE0XHUwNDQzX1x1MDQyMVx1MDQzNV9cdTA0MjdcdTA0M2VfXHUwNDFmXHUwNDMwX1x1MDQxNlx1MDQ0M19cdTA0MjhcdTA0MzAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQg''@;'; put 'put ''TU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJEIE1NTU0gWVlZWSwgZGRkZCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDExXHUwNDQzXHUwNDMzXHUwNDQzXHUwNDNkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLG5l''@;'; put 'put ''eHREYXk6IltcdTA0MmRcdTA0NDBcdTA0NDJcdTA0MzBcdTA0MzNcdTA0MzBdIExUIFtcdTA0MzRcdTA0MzBdIixuZXh0V2VlazoiZGRkZCBbXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM4IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLGxhc3REYXk6IltcdTA0''@;'; put 'put ''MWFcdTA0MzVcdTA0NDdcdTA0MzAgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsbGFzdFdlZWs6IltcdTA0MjNcdTA0NDJcdTA0MzNcdTA0MzBcdTA0M2RdIGRkZGQgW1x1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzOCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJd''@;'; put 'put ''IExUIFtcdTA0MzRcdTA0MzBdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MmZcdTA0M2FcdTA0MzhcdTA0M2QgJXMgXHUwNDM4XHUwNDQ3XHUwNDM4XHUwNDM0XHUwNDMwIixwYXN0OiJcdTA0MTFcdTA0MzhcdTA0NDAgXHUwNDNkXHUwNDM1XHUwNDQ3XHUwNDMw''@;'; put 'put ''ICVzIFx1MDQzZVx1MDQzYlx1MDQzNFx1MDQzOFx1MDQzZCIsczoiXHUwNDQ0XHUwNDQzXHUwNDQwXHUwNDQxXHUwNDMwXHUwNDQyIixzczoiJWQgXHUwNDQ0XHUwNDQzXHUwNDQwXHUwNDQxXHUwNDMwXHUwNDQyIixtOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDM0XHUwNDMwXHUwNDNhXHUw''@;'; put 'put ''NDM4XHUwNDNhXHUwNDMwIixtbToiJWQgXHUwNDM0XHUwNDMwXHUwNDNhXHUwNDM4XHUwNDNhXHUwNDMwIixoOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0MzhcdTA0NDAg''@;'; put 'put ''XHUwNDNhXHUwNDQzXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNDQzXHUwNDNkIixNOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNlXHUwNDM5IixNTToiJWQgXHUwNDNlXHUwNDM5Iix5OiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDM5XHUwNDM4XHUwNDNiIix5eToiJWQgXHUwNDM5XHUwNDM4''@;'; put 'put ''XHUwNDNiIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sODkzNjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ2aSIse21vbnRoczoidGhceGUxbmcgMV90aFx4ZTFuZyAyX3RoXHhlMW5nIDNfdGhceGUxbmcgNF90''@;'; put 'put ''aFx4ZTFuZyA1X3RoXHhlMW5nIDZfdGhceGUxbmcgN190aFx4ZTFuZyA4X3RoXHhlMW5nIDlfdGhceGUxbmcgMTBfdGhceGUxbmcgMTFfdGhceGUxbmcgMTIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlRoZyAwMV9UaGcgMDJfVGhnIDAzX1RoZyAwNF9UaGcgMDVfVGhnIDA2X1RoZyAwN19U''@;'; put 'put ''aGcgMDhfVGhnIDA5X1RoZyAxMF9UaGcgMTFfVGhnIDEyIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImNoXHUxZWU3IG5oXHUxZWFkdF90aFx1MWVlOSBoYWlfdGhcdTFlZTkgYmFfdGhcdTFlZTkgdFx1MDFiMF90aFx1MWVlOSBuXHUwMTAzbV90aFx1MWVlOSBz''@;'; put 'put ''XHhlMXVfdGhcdTFlZTkgYlx1MWVhM3kiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQ05fVDJfVDNfVDRfVDVfVDZfVDciLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkNOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxtZXJpZGllbVBhcnNl''@;'; put 'put ''Oi9zYXxjaC9pLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJuL15jaCQvaS50ZXN0KGcpfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTI/dz8ic2EiOiJTQSI6dz8iY2giOiJDSCJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZ''@;'; put 'put ''WVkiLExMOiJEIE1NTU0gW25cdTAxMDNtXSBZWVlZIixMTEw6IkQgTU1NTSBbblx1MDEwM21dIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBbblx1MDEwM21dIFlZWVkgSEg6bW0iLGw6IkREL00vWVlZWSIsbGw6IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxs''@;'; put 'put ''bDoiZGRkLCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIXHhmNG0gbmF5IGxceGZhY10gTFQiLG5leHREYXk6IltOZ1x4ZTB5IG1haSBsXHhmYWNdIExUIixuZXh0V2VlazoiZGRkZCBbdHVcdTFlYTduIHRcdTFlZGJpIGxceGZhY10gTFQiLGxhc3REYXk6IltIXHhm''@;'; put 'put ''NG0gcXVhIGxceGZhY10gTFQiLGxhc3RXZWVrOiJkZGRkIFt0dVx1MWVhN24gdHJcdTAxYjBcdTFlZGJjIGxceGZhY10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHRcdTFlZGJpIixwYXN0OiIlcyB0clx1MDFiMFx1MWVkYmMiLHM6InZceGUwaSBnaVx4ZTJ5''@;'; put 'put ''IixzczoiJWQgZ2lceGUyeSIsbToibVx1MWVkOXQgcGhceGZhdCIsbW06IiVkIHBoXHhmYXQiLGg6Im1cdTFlZDl0IGdpXHUxZWRkIixoaDoiJWQgZ2lcdTFlZGQiLGQ6Im1cdTFlZDl0IG5nXHhlMHkiLGRkOiIlZCBuZ1x4ZTB5Iix3OiJtXHUxZWQ5dCB0dVx1MWVhN24iLHd3OiIlZCB0dVx1''@;'; put 'put ''MWVhN24iLE06Im1cdTFlZDl0IHRoXHhlMW5nIixNTToiJWQgdGhceGUxbmciLHk6Im1cdTFlZDl0IG5cdTAxMDNtIix5eToiJWQgblx1MDEwM20ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3JldHVybiBnfSx3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''NH19KX0oeSg5NzU4NikpfSw2OTcwMjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIngtcHNldWRvIix7bW9udGhzOiJKflx4ZTFceGYxXHhmYVx4ZTF+clx4ZmRfRn5ceGU5YnJceGZhflx4ZTFyXHhmZF9+TVx4ZTFyY35oX1x4YzFw''@;'; put 'put ''fnJceGVkbF9+TVx4ZTFceGZkX35KXHhmYVx4ZjFceGU5fl9KXHhmYWx+XHhmZF9ceGMxXHhmYX5nXHhmYXN0fl9TXHhlOXB+dFx4ZTltYn5ceGU5cl9ceGQzfmN0XHhmM2J+XHhlOXJfXHhkMX5ceGYzdlx4ZTltfmJceGU5cl9+RFx4ZTljXHhlOX5tYlx4ZTlyIi5zcGxpdCgiXyIpLG1vbnRo''@;'; put 'put ''c1Nob3J0OiJKflx4ZTFceGYxX35GXHhlOWJffk1ceGUxcl9+XHhjMXByX35NXHhlMVx4ZmRffkpceGZhXHhmMV9+Slx4ZmFsX35ceGMxXHhmYWdfflNceGU5cF9+XHhkM2N0X35ceGQxXHhmM3ZffkRceGU5YyIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTflx4''@;'; put 'put ''ZmFceGYxZFx4ZTF+XHhmZF9NXHhmM35ceGYxZFx4ZTFceGZkfl9UXHhmYVx4ZTl+c2RceGUxXHhmZH5fV1x4ZTlkflx4ZjFceGU5c2R+XHhlMVx4ZmRfVH5oXHhmYXJzfmRceGUxXHhmZF9+RnJceGVkZH5ceGUxXHhmZF9Tflx4ZTF0XHhmYXJ+ZFx4ZTFceGZkIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6IlN+XHhmYVx4ZjFffk1ceGYzXHhmMV9+VFx4ZmFceGU5X35XXHhlOWRfflRoXHhmYV9+RnJceGVkX35TXHhlMXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN+XHhmYV9NXHhmM35fVFx4ZmFffldceGU5X1R+aF9Gcn5fU1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJz''@;'; put 'put ''ZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1R+XHhmM2RceGUxflx4ZmQgXHhl''@;'; put 'put ''MXRdIExUIixuZXh0RGF5OiJbVH5ceGYzbVx4ZjN+cnJceGYzfncgXHhlMXRdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMXRdIExUIixsYXN0RGF5OiJbXHhkZH5ceGU5c3R+XHhlOXJkXHhlMX5ceGZkIFx4ZTF0XSBMVCIsbGFzdFdlZWs6IltMflx4ZTFzdF0gZGRkZCBbXHhlMXRdIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJceGVkflx4ZjEgJXMiLHBhc3Q6IiVzIFx4ZTF+Z1x4ZjMiLHM6Ilx4ZTEgfmZceGU5dyB+c1x4ZTljXHhmM35ceGYxZHMiLHNzOiIlZCBzflx4ZTljXHhmM1x4ZjF+ZHMiLG06Ilx4ZTEgfm1ceGVkXHhmMX5ceGZhdFx4ZTkiLG1t''@;'; put 'put ''OiIlZCBtflx4ZWRceGYxXHhmYX50XHhlOXMiLGg6Ilx4ZTF+XHhmMSBoXHhmM35ceGZhciIsaGg6IiVkIGh+XHhmM1x4ZmFycyIsZDoiXHhlMSB+ZFx4ZTFceGZkIixkZDoiJWQgZH5ceGUxXHhmZHMiLE06Ilx4ZTEgfm1ceGYzXHhmMX50aCIsTU06IiVkIG1+XHhmM1x4ZjF0fmhzIix5OiJc''@;'; put 'put ''eGUxIH5ceGZkXHhlOVx4ZTFyIix5eToiJWQgXHhmZH5ceGU5XHhlMXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0Ijoy''@;'; put 'put ''PT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDcyNjU1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgieW8iLHttb250aHM6IlNcdTFlYjlcdTAzMDFyXHUxZWI5XHUwMzAx''@;'; put 'put ''X0VcdTAzMDByZVx1MDMwMGxlXHUwMzAwX1x1MWViOHJcdTFlYjlcdTAzMDBuYVx1MDMwMF9JXHUwMzAwZ2JlXHUwMzAxX0VcdTAzMDBiaWJpX09cdTAzMDBrdVx1MDMwMGR1X0FnXHUxZWI5bW9fT1x1MDMwMGd1XHUwMzAxbl9Pd2V3ZV9cdTFlY2NcdTAzMDB3YVx1MDMwMHJhXHUwMzAwX0Jl''@;'; put 'put ''XHUwMzAxbHVcdTAzMDFfXHUxZWNjXHUwMzAwcFx1MWViOVx1MDMwMFx1MDMwMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiU1x1MWViOVx1MDMwMXJfRVx1MDMwMHJsX1x1MWViOHJuX0lcdTAzMDBnYl9FXHUwMzAwYmlfT1x1MDMwMGt1XHUwMzAwX0FnXHUxZWI5X09cdTAzMDBndVx1MDMw''@;'; put 'put ''MV9Pd2VfXHUxZWNjXHUwMzAwd2FcdTAzMDBfQmVcdTAzMDFsX1x1MWVjY1x1MDMwMHBcdTFlYjlcdTAzMDBcdTAzMDAiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFcdTAzMDBpXHUwMzAwa3VcdTAzMDFfQWplXHUwMzAxX0lcdTAzMDBzXHUxZWI5XHUwMzAxZ3VuX1x1MWVjY2pcdTFlY2RcdTAz''@;'; put 'put ''MDFydVx1MDMwMV9cdTFlY2NqXHUxZWNkXHUwMzAxYlx1MWVjZF9cdTFlYjh0aVx1MDMwMF9BXHUwMzAwYmFcdTAzMDFtXHUxZWI5XHUwMzAxdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQVx1MDMwMGlcdTAzMDBrX0FqZVx1MDMwMV9JXHUwMzAwc1x1MWViOVx1MDMwMV9cdTFlY2Nq''@;'; put 'put ''cl9cdTFlY2NqYl9cdTFlYjh0aVx1MDMwMF9BXHUwMzAwYmFcdTAzMDEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFcdTAzMDBpXHUwMzAwX0FqX0lcdTAzMDBzX1x1MWVjY3JfXHUxZWNjYl9cdTFlYjh0X0FcdTAzMDBiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBB''@;'; put 'put ''IixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPXHUwMzAwbmlcdTAzMDAgbmldIExUIixuZXh0RGF5OiJbXHUx''@;'; put 'put ''ZWNjXHUwMzAwbGEgbmldIExUIixuZXh0V2VlazoiZGRkZCBbXHUxZWNjc1x1MWViOVx1MDMwMCB0b1x1MDMwMW4nYlx1MWVjZF0gW25pXSBMVCIsbGFzdERheToiW0FcdTAzMDBuYSBuaV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTFlY2NzXHUxZWI5XHUwMzAwIHRvXHUwMzAxbFx1MWVjZFx1''@;'; put 'put ''MDMwMV0gW25pXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibmlcdTAzMDEgJXMiLHBhc3Q6IiVzIGtcdTFlY2RqYVx1MDMwMSIsczoiaVx1MDMwMHNcdTFlYjlqdVx1MDMwMSBhYXlhXHUwMzAxIGRpZSIsc3M6ImFheWFcdTAzMDEgJWQiLG06ImlcdTAzMDBzXHUx''@;'; put 'put ''ZWI5anVcdTAzMDEga2FuIixtbToiaVx1MDMwMHNcdTFlYjlqdVx1MDMwMSAlZCIsaDoid2FcdTAzMDFrYXRpIGthbiIsaGg6IndhXHUwMzAxa2F0aSAlZCIsZDoiXHUxZWNkalx1MWVjZFx1MDMwMSBrYW4iLGRkOiJcdTFlY2RqXHUxZWNkXHUwMzAxICVkIixNOiJvc3VcdTAzMDAga2FuIixN''@;'; put 'put ''TToib3N1XHUwMzAwICVkIix5OiJcdTFlY2RkdVx1MDMwMW4ga2FuIix5eToiXHUxZWNkZHVcdTAzMDFuICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXHUxZWNkalx1MWVjZFx1MDMwMVxzXGR7MSwyfS8sb3JkaW5hbDoiXHUxZWNkalx1MWVjZFx1MDMwMSAlZCIsd2Vlazp7ZG93OjEs''@;'; put 'put ''ZG95OjR9fSl9KHkoOTc1ODYpKX0sNTc1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiemgtY24iLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhf''@;'; put 'put ''XHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3''@;'; put 'put ''MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYx''@;'; put 'put ''Zlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1NTQ2OFx1NjVlNV9cdTU0NjhcdTRlMDBfXHU1NDY4XHU0ZThjX1x1NTQ2OFx1NGUwOV9cdTU0NjhcdTU2ZGJfXHU1NDY4XHU0ZTk0X1x1NTQ2OFx1''@;'; put 'put ''NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1''@;'; put 'put ''NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1QWhcdTcwYjltbVx1NTIwNiIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZEFoXHU3MGI5bW1cdTUyMDYiLGw6IllZWVkvTS9EIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlc''@;'; put 'put ''dTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTFjY1x1NjY2OHxcdTY1ZTlcdTRlMGF8XHU0ZTBhXHU1MzQ4fFx1NGUyZFx1NTM0OHxcdTRlMGJcdTUzNDh8XHU2NjVhXHU0ZTBhLyxt''@;'; put 'put ''ZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiXHU1MWNjXHU2NjY4Ij09PUJ8fCJcdTY1ZTlcdTRlMGEiPT09Qnx8Ilx1NGUwYVx1NTM0OCI9PT1CP2c6Ilx1NGUwYlx1NTM0OCI9PT1CfHwiXHU2NjVhXHU0ZTBhIj09PUI/ZysxMjpnPj0xMT9nOmcrMTJ9''@;'; put 'put ''LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXt2YXIgUD0xMDAqZytCO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDExMzA/Ilx1NGUwYVx1NTM0OCI6UDwxMjMwPyJcdTRlMmRcdTUzNDgiOlA8MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0''@;'; put 'put ''ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldTFQiLG5leHREYXk6IltcdTY2MGVcdTU5MjldTFQiLG5leHRXZWVrOmZ1bmN0aW9uKGcpe3JldHVybiBnLndlZWsoKSE9PXRoaXMud2VlaygpPyJbXHU0ZTBiXWRkZExUIjoiW1x1NjcyY11kZGRMVCJ9LGxhc3REYXk6Iltc''@;'; put 'put ''dTY2MjhcdTU5MjldTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndlZWsoKSE9PWcud2VlaygpPyJbXHU0ZTBhXWRkZExUIjoiW1x1NjcyY11kZGRMVCJ9LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1NTQ2''@;'; put 'put ''OCkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZysiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBnKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZysiXHU1NDY4IjtkZWZhdWx0OnJldHVybiBnfX0scmVsYXRp''@;'; put 'put ''dmVUaW1lOntmdXR1cmU6IiVzXHU1NDBlIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1MWUwXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQ5ZiIsbW06IiVkIFx1NTIwNlx1OTQ5ZiIsaDoiMSBcdTVjMGZcdTY1ZjYiLGhoOiIlZCBcdTVjMGZcdTY1ZjYiLGQ6IjEgXHU1OTI5''@;'; put 'put ''IixkZDoiJWQgXHU1OTI5Iix3OiIxIFx1NTQ2OCIsd3c6IiVkIFx1NTQ2OCIsTToiMSBcdTRlMmFcdTY3MDgiLE1NOiIlZCBcdTRlMmFcdTY3MDgiLHk6IjEgXHU1ZTc0Iix5eToiJWQgXHU1ZTc0In0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMTgzNTE6ZnVuY3Rpb24odWUs''@;'; put 'put ''WCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ6aC1oayIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1Njcw''@;'; put 'put ''OF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4X1x1NTM0MVx1NGUwMFx1NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEw''@;'; put 'put ''XHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2''@;'; put 'put ''MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHU5MDMxXHU2NWU1X1x1OTAzMVx1NGUwMF9cdTkwMzFcdTRlOGNfXHU5MDMxXHU0ZTA5X1x1OTAzMVx1NTZkYl9cdTkwMzFcdTRlOTRfXHU5MDMxXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVf''@;'; put 'put ''XHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRiX1x1NGU5NF9cdTUxNmQiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERc''@;'; put 'put ''dTY1ZTUgSEg6bW0iLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0iLGw6IllZWVkvTS9EIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1''@;'; put 'put ''ZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTFjY1x1NjY2OHxcdTY1ZTlcdTRlMGF8XHU0ZTBhXHU1MzQ4fFx1NGUyZFx1NTM0OHxcdTRlMGJcdTUzNDh8XHU2NjVhXHU0ZTBhLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiXHU1MWNjXHU2''@;'; put 'put ''NjY4Ij09PUJ8fCJcdTY1ZTlcdTRlMGEiPT09Qnx8Ilx1NGUwYVx1NTM0OCI9PT1CP2c6Ilx1NGUyZFx1NTM0OCI9PT1CP2c+PTExP2c6ZysxMjoiXHU0ZTBiXHU1MzQ4Ij09PUJ8fCJcdTY2NWFcdTRlMGEiPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3ZhciBQ''@;'; put 'put ''PTEwMCpnK0I7cmV0dXJuIFA8NjAwPyJcdTUxY2NcdTY2NjgiOlA8OTAwPyJcdTY1ZTlcdTRlMGEiOlA8MTIwMD8iXHU0ZTBhXHU1MzQ4IjoxMjAwPT09UD8iXHU0ZTJkXHU1MzQ4IjpQPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0''@;'; put 'put ''ZWNhXHU1OTI5XUxUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XUxUIixuZXh0V2VlazoiW1x1NGUwYl1kZGRkTFQiLGxhc3REYXk6IltcdTY2MjhcdTU5MjldTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGRMVCIsc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9''@;'; put 'put ''KFx1NjVlNXxcdTY3MDh8XHU5MDMxKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIGcrIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBnKyJcdTkwMzEiO2RlZmF1''@;'; put 'put ''bHQ6cmV0dXJuIGd9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTVmOGMiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTVlN2VcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDE4IixtbToiJWQgXHU1MjA2XHU5NDE4IixoOiIxIFx1NWMwZlx1NjY0MiIsaGg6IiVkIFx1NWMw''@;'; put 'put ''Zlx1NjY0MiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLE06IjEgXHU1MDBiXHU2NzA4IixNTToiJWQgXHU1MDBiXHU2NzA4Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3NCJ9fSl9KHkoOTc1ODYpKX0sNTE2MjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO0kuZGVmaW5lTG9jYWxlKCJ6aC1tbyIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4''@;'; put 'put ''X1x1NTM0MVx1NGUwMFx1NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiXHU5MDMxXHU2NWU1X1x1OTAzMVx1NGUwMF9cdTkwMzFcdTRlOGNfXHU5MDMxXHU0ZTA5X1x1OTAzMVx1NTZkYl9cdTkwMzFcdTRlOTRfXHU5MDMxXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRi''@;'; put 'put ''X1x1NGU5NF9cdTUxNmQiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLExMTEw6IllZWVlcdTVl''@;'; put 'put ''NzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0iLGw6IkQvTS9ZWVlZIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6''@;'; put 'put ''L1x1NTFjY1x1NjY2OHxcdTY1ZTlcdTRlMGF8XHU0ZTBhXHU1MzQ4fFx1NGUyZFx1NTM0OHxcdTRlMGJcdTUzNDh8XHU2NjVhXHU0ZTBhLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiXHU1MWNjXHU2NjY4Ij09PUJ8fCJcdTY1ZTlcdTRlMGEiPT09''@;'; put 'put ''Qnx8Ilx1NGUwYVx1NTM0OCI9PT1CP2c6Ilx1NGUyZFx1NTM0OCI9PT1CP2c+PTExP2c6ZysxMjoiXHU0ZTBiXHU1MzQ4Ij09PUJ8fCJcdTY2NWFcdTRlMGEiPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3ZhciBQPTEwMCpnK0I7cmV0dXJuIFA8NjAwPyJcdTUx''@;'; put 'put ''Y2NcdTY2NjgiOlA8OTAwPyJcdTY1ZTlcdTRlMGEiOlA8MTEzMD8iXHU0ZTBhXHU1MzQ4IjpQPDEyMzA/Ilx1NGUyZFx1NTM0OCI6UDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV0gTFQiLG5leHREYXk6IltcdTY2''@;'; put 'put ''MGVcdTU5MjldIExUIixuZXh0V2VlazoiW1x1NGUwYl1kZGRkIExUIixsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XSBMVCIsbGFzdFdlZWs6IltcdTRlMGFdZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1NjVlNXxcdTY3MDh8XHU5MDMxKS8s''@;'; put 'put ''b3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIGcrIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBnKyJcdTkwMzEiO2RlZmF1bHQ6cmV0dXJuIGd9fSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToiJXNcdTUxNjciLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTVlN2VcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDE4IixtbToiJWQgXHU1MjA2XHU5NDE4IixoOiIxIFx1NWMwZlx1NjY0MiIsaGg6IiVkIFx1NWMwZlx1NjY0MiIsZDoiMSBcdTU5MjkiLGRk''@;'; put 'put ''OiIlZCBcdTU5MjkiLE06IjEgXHU1MDBiXHU2NzA4IixNTToiJWQgXHU1MDBiXHU2NzA4Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3NCJ9fSl9KHkoOTc1ODYpKX0sODg4NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInpoLXR3''@;'; put 'put ''Iix7bW9udGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0''@;'; put 'put ''MVx1NGU4Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYx''@;'; put 'put ''Zlx1NjcxZlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTkwMzFcdTY1''@;'; put 'put ''ZTVfXHU5MDMxXHU0ZTAwX1x1OTAzMVx1NGU4Y19cdTkwMzFcdTRlMDlfXHU5MDMxXHU1NmRiX1x1OTAzMVx1NGU5NF9cdTkwMzFcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8i''@;'; put 'put ''KSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDpt''@;'; put 'put ''bSIsbDoiWVlZWS9NL0QiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUw''@;'; put 'put ''YXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJcdTUxY2NcdTY2NjgiPT09Qnx8Ilx1NjVlOVx1NGUwYSI9PT1CfHwiXHU0ZTBhXHU1MzQ4Ij09PUI/Zzoi''@;'; put 'put ''XHU0ZTJkXHU1MzQ4Ij09PUI/Zz49MTE/ZzpnKzEyOiJcdTRlMGJcdTUzNDgiPT09Qnx8Ilx1NjY1YVx1NGUwYSI9PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7dmFyIFA9MTAwKmcrQjtyZXR1cm4gUDw2MDA/Ilx1NTFjY1x1NjY2OCI6UDw5MDA/Ilx1NjVlOVx1''@;'; put 'put ''NGUwYSI6UDwxMTMwPyJcdTRlMGFcdTUzNDgiOlA8MTIzMD8iXHU0ZTJkXHU1MzQ4IjpQPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV0gTFQiLG5leHRXZWVrOiJb''@;'; put 'put ''XHU0ZTBiXWRkZGQgTFQiLGxhc3REYXk6IltcdTY2MjhcdTU5MjldIExUIixsYXN0V2VlazoiW1x1NGUwYV1kZGRkIExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTkwMzEpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dp''@;'; put 'put ''dGNoKEIpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGcrIlx1NjVlNSI7Y2FzZSJNIjpyZXR1cm4gZysiXHU2NzA4IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGcrIlx1OTAzMSI7ZGVmYXVsdDpyZXR1cm4gZ319LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NWY4YyIscGFz''@;'; put 'put ''dDoiJXNcdTUyNGQiLHM6Ilx1NWU3ZVx1NzlkMiIsc3M6IiVkIFx1NzlkMiIsbToiMSBcdTUyMDZcdTk0MTgiLG1tOiIlZCBcdTUyMDZcdTk0MTgiLGg6IjEgXHU1YzBmXHU2NjQyIixoaDoiJWQgXHU1YzBmXHU2NjQyIixkOiIxIFx1NTkyOSIsZGQ6IiVkIFx1NTkyOSIsTToiMSBcdTUwMGJc''@;'; put 'put ''dTY3MDgiLE1NOiIlZCBcdTUwMGJcdTY3MDgiLHk6IjEgXHU1ZTc0Iix5eToiJWQgXHU1ZTc0In19KX0oeSg5NzU4NikpfSw5NzU4NjpmdW5jdGlvbih1ZSxYLHkpeyh1ZT15Lm5tZCh1ZSkpLmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIEkscTtmdW5jdGlvbiBfKCl7cmV0''@;'; put 'put ''dXJuIEkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIEIoQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIEFycmF5fHwiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKX1mdW5jdGlvbiB3KENlKXtyZXR1cm4gbnVsbCE9Q2UmJiJbb2JqZWN0''@;'; put 'put ''IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKX1mdW5jdGlvbiBQKENlLEtlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKENlLEtlKX1mdW5jdGlvbiBGKENlKXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1''@;'; put 'put ''cm4gMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKENlKS5sZW5ndGg7dmFyIEtlO2ZvcihLZSBpbiBDZSlpZihQKENlLEtlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBPKENlKXtyZXR1cm4gdm9pZCAwPT09Q2V9ZnVuY3Rpb24geihDZSl7cmV0dXJuIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBDZXx8IltvYmplY3QgTnVtYmVyXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ2UpfWZ1bmN0aW9uIE4oQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIERhdGV8fCJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSl9ZnVuY3Rpb24g''@;'; put 'put ''TChDZSxLZSl7dmFyIEl0LG10PVtdLGRuPUNlLmxlbmd0aDtmb3IoSXQ9MDtJdDxkbjsrK0l0KW10LnB1c2goS2UoQ2VbSXRdLEl0KSk7cmV0dXJuIG10fWZ1bmN0aW9uIEsoQ2UsS2Upe2Zvcih2YXIgbXQgaW4gS2UpUChLZSxtdCkmJihDZVttdF09S2VbbXRdKTtyZXR1cm4gUChLZSwidG9T''@;'; put 'put ''dHJpbmciKSYmKENlLnRvU3RyaW5nPUtlLnRvU3RyaW5nKSxQKEtlLCJ2YWx1ZU9mIikmJihDZS52YWx1ZU9mPUtlLnZhbHVlT2YpLENlfWZ1bmN0aW9uIFUoQ2UsS2UsbXQsSXQpe3JldHVybiBjdihDZSxLZSxtdCxJdCwhMCkudXRjKCl9ZnVuY3Rpb24gWShDZSl7cmV0dXJuIG51bGw9PUNl''@;'; put 'put ''Ll9wZiYmKENlLl9wZj17ZW1wdHk6ITEsdW51c2VkVG9rZW5zOltdLHVudXNlZElucHV0OltdLG92ZXJmbG93Oi0yLGNoYXJzTGVmdE92ZXI6MCxudWxsSW5wdXQ6ITEsaW52YWxpZEVyYTpudWxsLGludmFsaWRNb250aDpudWxsLGludmFsaWRGb3JtYXQ6ITEsdXNlckludmFsaWRhdGVkOiEx''@;'; put 'put ''LGlzbzohMSxwYXJzZWREYXRlUGFydHM6W10sZXJhOm51bGwsbWVyaWRpZW06bnVsbCxyZmMyODIyOiExLHdlZWtkYXlNaXNtYXRjaDohMX0pLENlLl9wZn1mdW5jdGlvbiBlZShDZSl7dmFyIEtlPW51bGwsbXQ9ITEsSXQ9Q2UuX2QmJiFpc05hTihDZS5fZC5nZXRUaW1lKCkpO3JldHVybiBJ''@;'; put 'put ''dCYmKEtlPVkoQ2UpLG10PXEuY2FsbChLZS5wYXJzZWREYXRlUGFydHMsZnVuY3Rpb24oZG4pe3JldHVybiBudWxsIT1kbn0pLEl0PUtlLm92ZXJmbG93PDAmJiFLZS5lbXB0eSYmIUtlLmludmFsaWRFcmEmJiFLZS5pbnZhbGlkTW9udGgmJiFLZS5pbnZhbGlkV2Vla2RheSYmIUtlLndlZWtk''@;'; put 'put ''YXlNaXNtYXRjaCYmIUtlLm51bGxJbnB1dCYmIUtlLmludmFsaWRGb3JtYXQmJiFLZS51c2VySW52YWxpZGF0ZWQmJighS2UubWVyaWRpZW18fEtlLm1lcmlkaWVtJiZtdCksQ2UuX3N0cmljdCYmKEl0PUl0JiYwPT09S2UuY2hhcnNMZWZ0T3ZlciYmMD09PUtlLnVudXNlZFRva2Vucy5sZW5n''@;'; put 'put ''dGgmJnZvaWQgMD09PUtlLmJpZ0hvdXIpKSxudWxsIT1PYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0Zyb3plbihDZSk/SXQ6KENlLl9pc1ZhbGlkPUl0LENlLl9pc1ZhbGlkKX1mdW5jdGlvbiBKKENlKXt2YXIgS2U9VShOYU4pO3JldHVybiBudWxsIT1DZT9LKFkoS2UpLENlKTpZKEtlKS51''@;'; put 'put ''c2VySW52YWxpZGF0ZWQ9ITAsS2V9cT1BcnJheS5wcm90b3R5cGUuc29tZT9BcnJheS5wcm90b3R5cGUuc29tZTpmdW5jdGlvbihDZSl7dmFyIEl0LEtlPU9iamVjdCh0aGlzKSxtdD1LZS5sZW5ndGg+Pj4wO2ZvcihJdD0wO0l0PG10O0l0KyspaWYoSXQgaW4gS2UmJkNlLmNhbGwodGhpcyxL''@;'; put 'put ''ZVtJdF0sSXQsS2UpKXJldHVybiEwO3JldHVybiExfTt2YXIgbmU9Xy5tb21lbnRQcm9wZXJ0aWVzPVtdLGllPSExO2Z1bmN0aW9uIGxlKENlLEtlKXt2YXIgbXQsSXQsZG4scW49bmUubGVuZ3RoO2lmKE8oS2UuX2lzQU1vbWVudE9iamVjdCl8fChDZS5faXNBTW9tZW50T2JqZWN0PUtlLl9p''@;'; put 'put ''c0FNb21lbnRPYmplY3QpLE8oS2UuX2kpfHwoQ2UuX2k9S2UuX2kpLE8oS2UuX2YpfHwoQ2UuX2Y9S2UuX2YpLE8oS2UuX2wpfHwoQ2UuX2w9S2UuX2wpLE8oS2UuX3N0cmljdCl8fChDZS5fc3RyaWN0PUtlLl9zdHJpY3QpLE8oS2UuX3R6bSl8fChDZS5fdHptPUtlLl90em0pLE8oS2UuX2lz''@;'; put 'put ''VVRDKXx8KENlLl9pc1VUQz1LZS5faXNVVEMpLE8oS2UuX29mZnNldCl8fChDZS5fb2Zmc2V0PUtlLl9vZmZzZXQpLE8oS2UuX3BmKXx8KENlLl9wZj1ZKEtlKSksTyhLZS5fbG9jYWxlKXx8KENlLl9sb2NhbGU9S2UuX2xvY2FsZSkscW4+MClmb3IobXQ9MDttdDxxbjttdCsrKU8oZG49S2Vb''@;'; put 'put ''SXQ9bmVbbXRdXSl8fChDZVtJdF09ZG4pO3JldHVybiBDZX1mdW5jdGlvbiBtZShDZSl7bGUodGhpcyxDZSksdGhpcy5fZD1uZXcgRGF0ZShudWxsIT1DZS5fZD9DZS5fZC5nZXRUaW1lKCk6TmFOKSx0aGlzLmlzVmFsaWQoKXx8KHRoaXMuX2Q9bmV3IERhdGUoTmFOKSksITE9PT1pZSYmKGll''@;'; put 'put ''PSEwLF8udXBkYXRlT2Zmc2V0KHRoaXMpLGllPSExKX1mdW5jdGlvbiBfZShDZSl7cmV0dXJuIENlIGluc3RhbmNlb2YgbWV8fG51bGwhPUNlJiZudWxsIT1DZS5faXNBTW9tZW50T2JqZWN0fWZ1bmN0aW9uIFRlKENlKXshMT09PV8uc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzJiZ0eXBl''@;'; put 'put ''b2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJEZXByZWNhdGlvbiB3YXJuaW5nOiAiK0NlKX1mdW5jdGlvbiBTZShDZSxLZSl7dmFyIG10PSEwO3JldHVybiBLKGZ1bmN0aW9uKCl7aWYobnVsbCE9Xy5kZXByZWNhdGlvbkhhbmRsZXImJl8uZGVwcmVjYXRpb25I''@;'; put 'put ''YW5kbGVyKG51bGwsQ2UpLG10KXt2YXIgZG4scW4saWksSXQ9W10sSWE9YXJndW1lbnRzLmxlbmd0aDtmb3IocW49MDtxbjxJYTtxbisrKXtpZihkbj0iIiwib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1txbl0pe2ZvcihpaSBpbiBkbis9IlxuWyIrcW4rIl0gIixhcmd1bWVudHNbMF0pUChh''@;'; put 'put ''cmd1bWVudHNbMF0saWkpJiYoZG4rPWlpKyI6ICIrYXJndW1lbnRzWzBdW2lpXSsiLCAiKTtkbj1kbi5zbGljZSgwLC0yKX1lbHNlIGRuPWFyZ3VtZW50c1txbl07SXQucHVzaChkbil9VGUoQ2UrIlxuQXJndW1lbnRzOiAiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEl0KS5qb2luKCIi''@;'; put 'put ''KSsiXG4iKyhuZXcgRXJyb3IpLnN0YWNrKSxtdD0hMX1yZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxLZSl9dmFyIFQsamU9e307ZnVuY3Rpb24gVihDZSxLZSl7bnVsbCE9Xy5kZXByZWNhdGlvbkhhbmRsZXImJl8uZGVwcmVjYXRpb25IYW5kbGVyKENlLEtlKSxqZVtDZV18fChU''@;'; put 'put ''ZShLZSksamVbQ2VdPSEwKX1mdW5jdGlvbiBwKENlKXtyZXR1cm4gdHlwZW9mIEZ1bmN0aW9uPCJ1IiYmQ2UgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSl9ZnVuY3Rpb24geChDZSxLZSl7dmFyIEl0''@;'; put 'put ''LG10PUsoe30sQ2UpO2ZvcihJdCBpbiBLZSlQKEtlLEl0KSYmKHcoQ2VbSXRdKSYmdyhLZVtJdF0pPyhtdFtJdF09e30sSyhtdFtJdF0sQ2VbSXRdKSxLKG10W0l0XSxLZVtJdF0pKTpudWxsIT1LZVtJdF0/bXRbSXRdPUtlW0l0XTpkZWxldGUgbXRbSXRdKTtmb3IoSXQgaW4gQ2UpUChDZSxJ''@;'; put 'put ''dCkmJiFQKEtlLEl0KSYmdyhDZVtJdF0pJiYobXRbSXRdPUsoe30sbXRbSXRdKSk7cmV0dXJuIG10fWZ1bmN0aW9uIEMoQ2Upe251bGwhPUNlJiZ0aGlzLnNldChDZSl9Xy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3M9ITEsXy5kZXByZWNhdGlvbkhhbmRsZXI9bnVsbCxUPU9iamVjdC5r''@;'; put 'put ''ZXlzP09iamVjdC5rZXlzOmZ1bmN0aW9uKENlKXt2YXIgS2UsbXQ9W107Zm9yKEtlIGluIENlKVAoQ2UsS2UpJiZtdC5wdXNoKEtlKTtyZXR1cm4gbXR9O2Z1bmN0aW9uIEUoQ2UsS2UsbXQpe3ZhciBJdD0iIitNYXRoLmFicyhDZSk7cmV0dXJuKENlPj0wP210PyIrIjoiIjoiLSIpK01hdGgu''@;'; put 'put ''cG93KDEwLE1hdGgubWF4KDAsS2UtSXQubGVuZ3RoKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkrSXR9dmFyIG09LyhcW1teXFtdKlxdKXwoXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZ''@;'; put 'put ''WXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csQT0vKFxbW15cW10qXF0pfChcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxhZT17fSx0ZT17fTtmdW5jdGlv''@;'; put 'put ''biBzZShDZSxLZSxtdCxJdCl7dmFyIGRuPUl0OyJzdHJpbmciPT10eXBlb2YgSXQmJihkbj1mdW5jdGlvbigpe3JldHVybiB0aGlzW0l0XSgpfSksQ2UmJih0ZVtDZV09ZG4pLEtlJiYodGVbS2VbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIEUoZG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLEtlWzFd''@;'; put 'put ''LEtlWzJdKX0pLG10JiYodGVbbXRdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoZG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLENlKX0pfWZ1bmN0aW9uIHdlKENlKXtyZXR1cm4gQ2UubWF0Y2goL1xbW1xzXFNdLyk/Q2UucmVwbGFjZSgvXlxbfFxdJC9nLCIi''@;'; put 'put ''KTpDZS5yZXBsYWNlKC9cXC9nLCIiKX1mdW5jdGlvbiBKZShDZSxLZSl7cmV0dXJuIENlLmlzVmFsaWQoKT8oS2U9b3QoS2UsQ2UubG9jYWxlRGF0YSgpKSxhZVtLZV09YWVbS2VdfHxmdW5jdGlvbiBVZShDZSl7dmFyIG10LEl0LEtlPUNlLm1hdGNoKG0pO2ZvcihtdD0wLEl0PUtlLmxlbmd0''@;'; put 'put ''aDttdDxJdDttdCsrKUtlW210XT10ZVtLZVttdF1dP3RlW0tlW210XV06d2UoS2VbbXRdKTtyZXR1cm4gZnVuY3Rpb24oZG4pe3ZhciBpaSxxbj0iIjtmb3IoaWk9MDtpaTxJdDtpaSsrKXFuKz1wKEtlW2lpXSk/S2VbaWldLmNhbGwoZG4sQ2UpOktlW2lpXTtyZXR1cm4gcW59fShLZSksYWVb''@;'; put 'put ''S2VdKENlKSk6Q2UubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9ZnVuY3Rpb24gb3QoQ2UsS2Upe3ZhciBtdD01O2Z1bmN0aW9uIEl0KGRuKXtyZXR1cm4gS2UubG9uZ0RhdGVGb3JtYXQoZG4pfHxkbn1mb3IoQS5sYXN0SW5kZXg9MDttdD49MCYmQS50ZXN0KENlKTspQ2U9Q2UucmVwbGFj''@;'; put 'put ''ZShBLEl0KSxBLmxhc3RJbmRleD0wLG10LT0xO3JldHVybiBDZX12YXIgQWU9e0Q6ImRhdGUiLGRhdGVzOiJkYXRlIixkYXRlOiJkYXRlIixkOiJkYXkiLGRheXM6ImRheSIsZGF5OiJkYXkiLGU6IndlZWtkYXkiLHdlZWtkYXlzOiJ3ZWVrZGF5Iix3ZWVrZGF5OiJ3ZWVrZGF5IixFOiJpc29X''@;'; put 'put ''ZWVrZGF5Iixpc293ZWVrZGF5czoiaXNvV2Vla2RheSIsaXNvd2Vla2RheToiaXNvV2Vla2RheSIsREREOiJkYXlPZlllYXIiLGRheW9meWVhcnM6ImRheU9mWWVhciIsZGF5b2Z5ZWFyOiJkYXlPZlllYXIiLGg6ImhvdXIiLGhvdXJzOiJob3VyIixob3VyOiJob3VyIixtczoibWlsbGlzZWNv''@;'; put 'put ''bmQiLG1pbGxpc2Vjb25kczoibWlsbGlzZWNvbmQiLG1pbGxpc2Vjb25kOiJtaWxsaXNlY29uZCIsbToibWludXRlIixtaW51dGVzOiJtaW51dGUiLG1pbnV0ZToibWludXRlIixNOiJtb250aCIsbW9udGhzOiJtb250aCIsbW9udGg6Im1vbnRoIixROiJxdWFydGVyIixxdWFydGVyczoicXVh''@;'; put 'put ''cnRlciIscXVhcnRlcjoicXVhcnRlciIsczoic2Vjb25kIixzZWNvbmRzOiJzZWNvbmQiLHNlY29uZDoic2Vjb25kIixnZzoid2Vla1llYXIiLHdlZWt5ZWFyczoid2Vla1llYXIiLHdlZWt5ZWFyOiJ3ZWVrWWVhciIsR0c6Imlzb1dlZWtZZWFyIixpc293ZWVreWVhcnM6Imlzb1dlZWtZZWFy''@;'; put 'put ''Iixpc293ZWVreWVhcjoiaXNvV2Vla1llYXIiLHc6IndlZWsiLHdlZWtzOiJ3ZWVrIix3ZWVrOiJ3ZWVrIixXOiJpc29XZWVrIixpc293ZWVrczoiaXNvV2VlayIsaXNvd2VlazoiaXNvV2VlayIseToieWVhciIseWVhcnM6InllYXIiLHllYXI6InllYXIifTtmdW5jdGlvbiBfdChDZSl7cmV0''@;'; put 'put ''dXJuInN0cmluZyI9PXR5cGVvZiBDZT9BZVtDZV18fEFlW0NlLnRvTG93ZXJDYXNlKCldOnZvaWQgMH1mdW5jdGlvbiBudChDZSl7dmFyIG10LEl0LEtlPXt9O2ZvcihJdCBpbiBDZSlQKENlLEl0KSYmKG10PV90KEl0KSkmJihLZVttdF09Q2VbSXRdKTtyZXR1cm4gS2V9dmFyIFFlPXtkYXRl''@;'; put 'put ''OjksZGF5OjExLHdlZWtkYXk6MTEsaXNvV2Vla2RheToxMSxkYXlPZlllYXI6NCxob3VyOjEzLG1pbGxpc2Vjb25kOjE2LG1pbnV0ZToxNCxtb250aDo4LHF1YXJ0ZXI6NyxzZWNvbmQ6MTUsd2Vla1llYXI6MSxpc29XZWVrWWVhcjoxLHdlZWs6NSxpc29XZWVrOjUseWVhcjoxfTt2YXIgQXQs''@;'; put 'put ''eXQ9L1xkLyxNdD0vXGRcZC8sRHQ9L1xkezN9LyxpdD0vXGR7NH0vLCRlPS9bKy1dP1xkezZ9Lyx0dD0vXGRcZD8vLEhlPS9cZFxkXGRcZD8vLHV0PS9cZFxkXGRcZFxkXGQ/LyxxdD0vXGR7MSwzfS8sUnQ9L1xkezEsNH0vLFB0PS9bKy1dP1xkezEsNn0vLGNpPS9cZCsvLFF0PS9bKy1dP1xk''@;'; put 'put ''Ky8sc249L1p8WystXVxkXGQ6P1xkXGQvZ2ksUmk9L1p8WystXVxkXGQoPzo6P1xkXGQpPy9naSxmdD0vWzAtOV17MCwyNTZ9WydhLXpcdTAwQTAtXHUwNUZGXHUwNzAwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRjA3XHVGRjEwLVx1RkZFRl17MSwyNTZ9fFtcdTA2MDAtXHUwNkZG''@;'; put 'put ''XC9dezEsMjU2fShccyo/W1x1MDYwMC1cdTA2RkZdezEsMjU2fSl7MSwyfS9pLE9yPS9eWzEtOV1cZD8vLFd0PS9eKFsxLTldXGR8XGQpLztmdW5jdGlvbiBSbihDZSxLZSxtdCl7QXRbQ2VdPXAoS2UpP0tlOmZ1bmN0aW9uKEl0LGRuKXtyZXR1cm4gSXQmJm10P210OktlfX1mdW5jdGlvbiBz''@;'; put 'put ''dChDZSxLZSl7cmV0dXJuIFAoQXQsQ2UpP0F0W0NlXShLZS5fc3RyaWN0LEtlLl9sb2NhbGUpOm5ldyBSZWdFeHAoZnVuY3Rpb24gVXQoQ2Upe3JldHVybiByaShDZS5yZXBsYWNlKCJcXCIsIiIpLnJlcGxhY2UoL1xcKFxbKXxcXChcXSl8XFsoW15cXVxbXSopXF18XFwoLikvZyxmdW5jdGlv''@;'; put 'put ''bihLZSxtdCxJdCxkbixxbil7cmV0dXJuIG10fHxJdHx8ZG58fHFufSkpfShDZSkpfWZ1bmN0aW9uIHJpKENlKXtyZXR1cm4gQ2UucmVwbGFjZSgvWy1cL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKX1mdW5jdGlvbiBXZShDZSl7cmV0dXJuIENlPDA/TWF0aC5jZWlsKENlKXx8MDpNYXRo''@;'; put 'put ''LmZsb29yKENlKX1mdW5jdGlvbiBUdChDZSl7dmFyIEtlPStDZSxtdD0wO3JldHVybiAwIT09S2UmJmlzRmluaXRlKEtlKSYmKG10PVdlKEtlKSksbXR9QXQ9e307dmFyIG5yPXt9O2Z1bmN0aW9uIGh0KENlLEtlKXt2YXIgbXQsZG4sSXQ9S2U7Zm9yKCJzdHJpbmciPT10eXBlb2YgQ2UmJihD''@;'; put 'put ''ZT1bQ2VdKSx6KEtlKSYmKEl0PWZ1bmN0aW9uKHFuLGlpKXtpaVtLZV09VHQocW4pfSksZG49Q2UubGVuZ3RoLG10PTA7bXQ8ZG47bXQrKylucltDZVttdF1dPUl0fWZ1bmN0aW9uIHh0KENlLEtlKXtodChDZSxmdW5jdGlvbihtdCxJdCxkbixxbil7ZG4uX3c9ZG4uX3d8fHt9LEtlKG10LGRu''@;'; put 'put ''Ll93LGRuLHFuKX0pfWZ1bmN0aW9uIGpuKENlLEtlLG10KXtudWxsIT1LZSYmUChucixDZSkmJm5yW0NlXShLZSxtdC5fYSxtdCxDZSl9ZnVuY3Rpb24gcm4oQ2Upe3JldHVybiBDZSU0PT0wJiZDZSUxMDAhPTB8fENlJTQwMD09MH12YXIgenQ9MCxoaT0xLGNuPTIsZm49MyxJaT00LFh0PTUs''@;'; put 'put ''ZW49Nix1YT03LEVpPTg7ZnVuY3Rpb24gdnIoQ2Upe3JldHVybiBybihDZSk/MzY2OjM2NX1zZSgiWSIsMCwwLGZ1bmN0aW9uKCl7dmFyIENlPXRoaXMueWVhcigpO3JldHVybiBDZTw9OTk5OT9FKENlLDQpOiIrIitDZX0pLHNlKDAsWyJZWSIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LnllYXIoKSUxMDB9KSxzZSgwLFsiWVlZWSIsNF0sMCwieWVhciIpLHNlKDAsWyJZWVlZWSIsNV0sMCwieWVhciIpLHNlKDAsWyJZWVlZWVkiLDYsITBdLDAsInllYXIiKSxSbigiWSIsUXQpLFJuKCJZWSIsdHQsTXQpLFJuKCJZWVlZIixSdCxpdCksUm4oIllZWVlZIixQdCwkZSksUm4oIllZ''@;'; put 'put ''WVlZWSIsUHQsJGUpLGh0KFsiWVlZWVkiLCJZWVlZWVkiXSx6dCksaHQoIllZWVkiLGZ1bmN0aW9uKENlLEtlKXtLZVt6dF09Mj09PUNlLmxlbmd0aD9fLnBhcnNlVHdvRGlnaXRZZWFyKENlKTpUdChDZSl9KSxodCgiWVkiLGZ1bmN0aW9uKENlLEtlKXtLZVt6dF09Xy5wYXJzZVR3b0RpZ2l0''@;'; put 'put ''WWVhcihDZSl9KSxodCgiWSIsZnVuY3Rpb24oQ2UsS2Upe0tlW3p0XT1wYXJzZUludChDZSwxMCl9KSxfLnBhcnNlVHdvRGlnaXRZZWFyPWZ1bmN0aW9uKENlKXtyZXR1cm4gVHQoQ2UpKyhUdChDZSk+Njg/MTkwMDoyZTMpfTt2YXIgV2ksV249ZWkoIkZ1bGxZZWFyIiwhMCk7ZnVuY3Rpb24g''@;'; put 'put ''ZWkoQ2UsS2Upe3JldHVybiBmdW5jdGlvbihtdCl7cmV0dXJuIG51bGwhPW10PyhWaSh0aGlzLENlLG10KSxfLnVwZGF0ZU9mZnNldCh0aGlzLEtlKSx0aGlzKTpRcih0aGlzLENlKX19ZnVuY3Rpb24gUXIoQ2UsS2Upe2lmKCFDZS5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgbXQ9Q2UuX2Qs''@;'; put 'put ''SXQ9Q2UuX2lzVVRDO3N3aXRjaChLZSl7Y2FzZSJNaWxsaXNlY29uZHMiOnJldHVybiBJdD9tdC5nZXRVVENNaWxsaXNlY29uZHMoKTptdC5nZXRNaWxsaXNlY29uZHMoKTtjYXNlIlNlY29uZHMiOnJldHVybiBJdD9tdC5nZXRVVENTZWNvbmRzKCk6bXQuZ2V0U2Vjb25kcygpO2Nhc2UiTWlu''@;'; put 'put ''dXRlcyI6cmV0dXJuIEl0P210LmdldFVUQ01pbnV0ZXMoKTptdC5nZXRNaW51dGVzKCk7Y2FzZSJIb3VycyI6cmV0dXJuIEl0P210LmdldFVUQ0hvdXJzKCk6bXQuZ2V0SG91cnMoKTtjYXNlIkRhdGUiOnJldHVybiBJdD9tdC5nZXRVVENEYXRlKCk6bXQuZ2V0RGF0ZSgpO2Nhc2UiRGF5Ijpy''@;'; put 'put ''ZXR1cm4gSXQ/bXQuZ2V0VVRDRGF5KCk6bXQuZ2V0RGF5KCk7Y2FzZSJNb250aCI6cmV0dXJuIEl0P210LmdldFVUQ01vbnRoKCk6bXQuZ2V0TW9udGgoKTtjYXNlIkZ1bGxZZWFyIjpyZXR1cm4gSXQ/bXQuZ2V0VVRDRnVsbFllYXIoKTptdC5nZXRGdWxsWWVhcigpO2RlZmF1bHQ6cmV0dXJu''@;'; put 'put ''IE5hTn19ZnVuY3Rpb24gVmkoQ2UsS2UsbXQpe3ZhciBJdCxkbixxbixpaSxJYTtpZihDZS5pc1ZhbGlkKCkmJiFpc05hTihtdCkpe3N3aXRjaChJdD1DZS5fZCxkbj1DZS5faXNVVEMsS2Upe2Nhc2UiTWlsbGlzZWNvbmRzIjpyZXR1cm4gdm9pZChkbj9JdC5zZXRVVENNaWxsaXNlY29uZHMo''@;'; put 'put ''bXQpOkl0LnNldE1pbGxpc2Vjb25kcyhtdCkpO2Nhc2UiU2Vjb25kcyI6cmV0dXJuIHZvaWQoZG4/SXQuc2V0VVRDU2Vjb25kcyhtdCk6SXQuc2V0U2Vjb25kcyhtdCkpO2Nhc2UiTWludXRlcyI6cmV0dXJuIHZvaWQoZG4/SXQuc2V0VVRDTWludXRlcyhtdCk6SXQuc2V0TWludXRlcyhtdCkp''@;'; put 'put ''O2Nhc2UiSG91cnMiOnJldHVybiB2b2lkKGRuP0l0LnNldFVUQ0hvdXJzKG10KTpJdC5zZXRIb3VycyhtdCkpO2Nhc2UiRGF0ZSI6cmV0dXJuIHZvaWQoZG4/SXQuc2V0VVRDRGF0ZShtdCk6SXQuc2V0RGF0ZShtdCkpO2Nhc2UiRnVsbFllYXIiOmJyZWFrO2RlZmF1bHQ6cmV0dXJufXFuPW10''@;'; put 'put ''LGlpPUNlLm1vbnRoKCksSWE9MjkhPT0oSWE9Q2UuZGF0ZSgpKXx8MSE9PWlpfHxybihxbik/SWE6MjgsZG4/SXQuc2V0VVRDRnVsbFllYXIocW4saWksSWEpOkl0LnNldEZ1bGxZZWFyKHFuLGlpLElhKX19ZnVuY3Rpb24gcGEoQ2UsS2Upe2lmKGlzTmFOKENlKXx8aXNOYU4oS2UpKXJldHVy''@;'; put 'put ''biBOYU47dmFyIG10PWZ1bmN0aW9uIExyKENlLEtlKXtyZXR1cm4oQ2UlS2UrS2UpJUtlfShLZSwxMik7cmV0dXJuIENlKz0oS2UtbXQpLzEyLDE9PT1tdD9ybihDZSk/Mjk6Mjg6MzEtbXQlNyUyfVdpPUFycmF5LnByb3RvdHlwZS5pbmRleE9mP0FycmF5LnByb3RvdHlwZS5pbmRleE9mOmZ1''@;'; put 'put ''bmN0aW9uKENlKXt2YXIgS2U7Zm9yKEtlPTA7S2U8dGhpcy5sZW5ndGg7KytLZSlpZih0aGlzW0tlXT09PUNlKXJldHVybiBLZTtyZXR1cm4tMX0sc2UoIk0iLFsiTU0iLDJdLCJNbyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb250aCgpKzF9KSxzZSgiTU1NIiwwLDAsZnVuY3Rpb24oQ2Up''@;'; put 'put ''e3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLENlKX0pLHNlKCJNTU1NIiwwLDAsZnVuY3Rpb24oQ2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyxDZSl9KSxSbigiTSIsdHQsT3IpLFJuKCJNTSIsdHQsTXQpLFJuKCJNTU0iLGZ1bmN0aW9u''@;'; put 'put ''KENlLEtlKXtyZXR1cm4gS2UubW9udGhzU2hvcnRSZWdleChDZSl9KSxSbigiTU1NTSIsZnVuY3Rpb24oQ2UsS2Upe3JldHVybiBLZS5tb250aHNSZWdleChDZSl9KSxodChbIk0iLCJNTSJdLGZ1bmN0aW9uKENlLEtlKXtLZVtoaV09VHQoQ2UpLTF9KSxodChbIk1NTSIsIk1NTU0iXSxmdW5j''@;'; put 'put ''dGlvbihDZSxLZSxtdCxJdCl7dmFyIGRuPW10Ll9sb2NhbGUubW9udGhzUGFyc2UoQ2UsSXQsbXQuX3N0cmljdCk7bnVsbCE9ZG4/S2VbaGldPWRuOlkobXQpLmludmFsaWRNb250aD1DZX0pO3ZhciBRbj0iSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3Vz''@;'; put 'put ''dF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxsYT0iSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIikseWE9L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/LyxMYT1mdCxGYT1mdDtmdW5j''@;'; put 'put ''dGlvbiBOcyhDZSxLZSxtdCl7dmFyIEl0LGRuLHFuLGlpPUNlLnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX21vbnRoc1BhcnNlKWZvcih0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSxJdD0wO0l0PDEy''@;'; put 'put ''OysrSXQpcW49VShbMmUzLEl0XSksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtJdF09dGhpcy5tb250aHNTaG9ydChxbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl9sb25nTW9udGhzUGFyc2VbSXRdPXRoaXMubW9udGhzKHFuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBt''@;'; put 'put ''dD8iTU1NIj09PUtlPy0xIT09KGRuPVdpLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxpaSkpP2RuOm51bGw6LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsaWkpKT9kbjpudWxsOiJNTU0iPT09S2U/LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1Bh''@;'; put 'put ''cnNlLGlpKSl8fC0xIT09KGRuPVdpLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLGlpKSk/ZG46bnVsbDotMSE9PShkbj1XaS5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxpaSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsaWkpKT9kbjpudWxsfWZ1bmN0''@;'; put 'put ''aW9uIHB1KENlLEtlKXtpZighQ2UuaXNWYWxpZCgpKXJldHVybiBDZTtpZigic3RyaW5nIj09dHlwZW9mIEtlKWlmKC9eXGQrJC8udGVzdChLZSkpS2U9VHQoS2UpO2Vsc2UgaWYoIXooS2U9Q2UubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKEtlKSkpcmV0dXJuIENlO3ZhciBtdD1LZSxJdD1D''@;'; put 'put ''ZS5kYXRlKCk7cmV0dXJuIEl0PUl0PDI5P0l0Ok1hdGgubWluKEl0LHBhKENlLnllYXIoKSxtdCkpLENlLl9pc1VUQz9DZS5fZC5zZXRVVENNb250aChtdCxJdCk6Q2UuX2Quc2V0TW9udGgobXQsSXQpLENlfWZ1bmN0aW9uIExjKENlKXtyZXR1cm4gbnVsbCE9Q2U/KHB1KHRoaXMsQ2UpLF8u''@;'; put 'put ''dXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMpOlFyKHRoaXMsIk1vbnRoIil9ZnVuY3Rpb24gdWkoKXtmdW5jdGlvbiBDZShTbyxmcyl7cmV0dXJuIGZzLmxlbmd0aC1Tby5sZW5ndGh9dmFyIGRuLHFuLGlpLElhLEtlPVtdLG10PVtdLEl0PVtdO2Zvcihkbj0wO2RuPDEyO2RuKyspcW49VShb''@;'; put 'put ''MmUzLGRuXSksaWk9cmkodGhpcy5tb250aHNTaG9ydChxbiwiIikpLElhPXJpKHRoaXMubW9udGhzKHFuLCIiKSksS2UucHVzaChpaSksbXQucHVzaChJYSksSXQucHVzaChJYSksSXQucHVzaChpaSk7S2Uuc29ydChDZSksbXQuc29ydChDZSksSXQuc29ydChDZSksdGhpcy5fbW9udGhzUmVn''@;'; put 'put ''ZXg9bmV3IFJlZ0V4cCgiXigiK0l0LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFJlZ2V4PXRoaXMuX21vbnRoc1JlZ2V4LHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIittdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRTdHJp''@;'; put 'put ''Y3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrS2Uuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFZ0KENlLEtlLG10LEl0LGRuLHFuLGlpKXt2YXIgSWE7cmV0dXJuIENlPDEwMCYmQ2U+PTA/KElhPW5ldyBEYXRlKENlKzQwMCxLZSxtdCxJdCxkbixxbixpaSksaXNGaW5pdGUoSWEuZ2V0RnVs''@;'; put 'put ''bFllYXIoKSkmJklhLnNldEZ1bGxZZWFyKENlKSk6SWE9bmV3IERhdGUoQ2UsS2UsbXQsSXQsZG4scW4saWkpLElhfWZ1bmN0aW9uIEpyKENlKXt2YXIgS2UsbXQ7cmV0dXJuIENlPDEwMCYmQ2U+PTA/KChtdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKVswXT1DZSs0''@;'; put 'put ''MDAsS2U9bmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCxtdCkpLGlzRmluaXRlKEtlLmdldFVUQ0Z1bGxZZWFyKCkpJiZLZS5zZXRVVENGdWxsWWVhcihDZSkpOktlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsYXJndW1lbnRzKSksS2V9ZnVuY3Rpb24gYjAoQ2UsS2UsbXQpe3Zh''@;'; put 'put ''ciBJdD03K0tlLW10O3JldHVybi0oNytKcihDZSwwLEl0KS5nZXRVVENEYXkoKS1LZSklNytJdC0xfWZ1bmN0aW9uIEhhKENlLEtlLG10LEl0LGRuKXt2YXIgU28sZnMsSWE9MSs3KihLZS0xKSsoNyttdC1JdCklNytiMChDZSxJdCxkbik7cmV0dXJuIElhPD0wP2ZzPXZyKFNvPUNlLTEpK0lh''@;'; put 'put ''OklhPnZyKENlKT8oU289Q2UrMSxmcz1JYS12cihDZSkpOihTbz1DZSxmcz1JYSkse3llYXI6U28sZGF5T2ZZZWFyOmZzfX1mdW5jdGlvbiBMdShDZSxLZSxtdCl7dmFyIHFuLGlpLEl0PWIwKENlLnllYXIoKSxLZSxtdCksZG49TWF0aC5mbG9vcigoQ2UuZGF5T2ZZZWFyKCktSXQtMSkvNykr''@;'; put 'put ''MTtyZXR1cm4gZG48MT9xbj1kbitQcihpaT1DZS55ZWFyKCktMSxLZSxtdCk6ZG4+UHIoQ2UueWVhcigpLEtlLG10KT8ocW49ZG4tUHIoQ2UueWVhcigpLEtlLG10KSxpaT1DZS55ZWFyKCkrMSk6KGlpPUNlLnllYXIoKSxxbj1kbikse3dlZWs6cW4seWVhcjppaX19ZnVuY3Rpb24gUHIoQ2Us''@;'; put 'put ''S2UsbXQpe3ZhciBJdD1iMChDZSxLZSxtdCksZG49YjAoQ2UrMSxLZSxtdCk7cmV0dXJuKHZyKENlKS1JdCtkbikvN31zZSgidyIsWyJ3dyIsMl0sIndvIiwid2VlayIpLHNlKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIiksUm4oInciLHR0LE9yKSxSbigid3ciLHR0LE10KSxSbigiVyIs''@;'; put 'put ''dHQsT3IpLFJuKCJXVyIsdHQsTXQpLHh0KFsidyIsInd3IiwiVyIsIldXIl0sZnVuY3Rpb24oQ2UsS2UsbXQsSXQpe0tlW0l0LnN1YnN0cigwLDEpXT1UdChDZSl9KTtmdW5jdGlvbiB5MChDZSxLZSl7cmV0dXJuIENlLnNsaWNlKEtlLDcpLmNvbmNhdChDZS5zbGljZSgwLEtlKSl9c2UoImQi''@;'; put 'put ''LDAsImRvIiwiZGF5Iiksc2UoImRkIiwwLDAsZnVuY3Rpb24oQ2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLENlKX0pLHNlKCJkZGQiLDAsMCxmdW5jdGlvbihDZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcyxDZSl9KSxz''@;'; put 'put ''ZSgiZGRkZCIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcyxDZSl9KSxzZSgiZSIsMCwwLCJ3ZWVrZGF5Iiksc2UoIkUiLDAsMCwiaXNvV2Vla2RheSIpLFJuKCJkIix0dCksUm4oImUiLHR0KSxSbigiRSIsdHQpLFJuKCJkZCIsZnVuY3Rp''@;'; put 'put ''b24oQ2UsS2Upe3JldHVybiBLZS53ZWVrZGF5c01pblJlZ2V4KENlKX0pLFJuKCJkZGQiLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4gS2Uud2Vla2RheXNTaG9ydFJlZ2V4KENlKX0pLFJuKCJkZGRkIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIEtlLndlZWtkYXlzUmVnZXgoQ2UpfSkseHQoWyJk''@;'; put 'put ''ZCIsImRkZCIsImRkZGQiXSxmdW5jdGlvbihDZSxLZSxtdCxJdCl7dmFyIGRuPW10Ll9sb2NhbGUud2Vla2RheXNQYXJzZShDZSxJdCxtdC5fc3RyaWN0KTtudWxsIT1kbj9LZS5kPWRuOlkobXQpLmludmFsaWRXZWVrZGF5PUNlfSkseHQoWyJkIiwiZSIsIkUiXSxmdW5jdGlvbihDZSxLZSxt''@;'; put 'put ''dCxJdCl7S2VbSXRdPVR0KENlKX0pO3ZhciByNT0iU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksT2w9IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx1Zj0iU3VfTW9fVHVfV2VfVGhfRnJf''@;'; put 'put ''U2EiLnNwbGl0KCJfIiksc2Q9ZnQsZGY9ZnQsazE9ZnQ7ZnVuY3Rpb24gR2goQ2UsS2UsbXQpe3ZhciBJdCxkbixxbixpaT1DZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl93ZWVrZGF5c1BhcnNlKWZvcih0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQ''@;'; put 'put ''YXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLEl0PTA7SXQ8NzsrK0l0KXFuPVUoWzJlMywxXSkuZGF5KEl0KSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW0l0XT10aGlzLndlZWtkYXlzTWluKHFuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJz''@;'; put 'put ''ZVtJdF09dGhpcy53ZWVrZGF5c1Nob3J0KHFuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3dlZWtkYXlzUGFyc2VbSXRdPXRoaXMud2Vla2RheXMocW4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG10PyJkZGRkIj09PUtlPy0xIT09KGRuPVdpLmNhbGwodGhpcy5fd2Vl''@;'; put 'put ''a2RheXNQYXJzZSxpaSkpP2RuOm51bGw6ImRkZCI9PT1LZT8tMSE9PShkbj1XaS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxpaSkpP2RuOm51bGw6LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLGlpKSk/ZG46bnVsbDoiZGRkZCI9PT1LZT8tMSE9PShkbj1X''@;'; put 'put ''aS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLGlpKSk/ZG46bnVsbDoiZGRkIj09PUtlPy0xIT09KGRuPVdpLmNhbGwodGhp''@;'; put 'put ''cy5fc2hvcnRXZWVrZGF5c1BhcnNlLGlpKSl8fC0xIT09KGRuPVdpLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxpaSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsaWkpKT9kbjpudWxsOi0xIT09KGRuPVdpLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxp''@;'; put 'put ''aSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsaWkpKT9kbjpudWxsfWZ1bmN0aW9uIGFuKCl7ZnVuY3Rpb24gQ2UoTnUsZGQpe3JldHVybiBkZC5sZW5ndGgtTnUubGVuZ3RofXZh''@;'; put 'put ''ciBxbixpaSxJYSxTbyxmcyxLZT1bXSxtdD1bXSxJdD1bXSxkbj1bXTtmb3IocW49MDtxbjw3O3FuKyspaWk9VShbMmUzLDFdKS5kYXkocW4pLElhPXJpKHRoaXMud2Vla2RheXNNaW4oaWksIiIpKSxTbz1yaSh0aGlzLndlZWtkYXlzU2hvcnQoaWksIiIpKSxmcz1yaSh0aGlzLndlZWtkYXlz''@;'; put 'put ''KGlpLCIiKSksS2UucHVzaChJYSksbXQucHVzaChTbyksSXQucHVzaChmcyksZG4ucHVzaChJYSksZG4ucHVzaChTbyksZG4ucHVzaChmcyk7S2Uuc29ydChDZSksbXQuc29ydChDZSksSXQuc29ydChDZSksZG4uc29ydChDZSksdGhpcy5fd2Vla2RheXNSZWdleD1uZXcgUmVnRXhwKCJeKCIr''@;'; put 'put ''ZG4uam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitJdC5qb2luKCJ8Iikr''@;'; put 'put ''IikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIittdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrS2Uuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHZpKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24gUG8oQ2UsS2Upe3NlKENlLDAsMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksS2UpfSl9ZnVuY3Rpb24gZW8oQ2UsS2Upe3JldHVybiBLZS5fbWVyaWRp''@;'; put 'put ''ZW1QYXJzZX1zZSgiSCIsWyJISCIsMl0sMCwiaG91ciIpLHNlKCJoIixbImhoIiwyXSwwLHZpKSxzZSgiayIsWyJrayIsMl0sMCxmdW5jdGlvbiBBcigpe3JldHVybiB0aGlzLmhvdXJzKCl8fDI0fSksc2UoImhtbSIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdmkuYXBwbHkodGhpcykrRSh0''@;'; put 'put ''aGlzLm1pbnV0ZXMoKSwyKX0pLHNlKCJobW1zcyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdmkuYXBwbHkodGhpcykrRSh0aGlzLm1pbnV0ZXMoKSwyKStFKHRoaXMuc2Vjb25kcygpLDIpfSksc2UoIkhtbSIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK0UodGhpcy5t''@;'; put 'put ''aW51dGVzKCksMil9KSxzZSgiSG1tc3MiLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStFKHRoaXMubWludXRlcygpLDIpK0UodGhpcy5zZWNvbmRzKCksMil9KSxQbygiYSIsITApLFBvKCJBIiwhMSksUm4oImEiLGVvKSxSbigiQSIsZW8pLFJuKCJIIix0dCxXdCksUm4o''@;'; put 'put ''ImgiLHR0LE9yKSxSbigiayIsdHQsT3IpLFJuKCJISCIsdHQsTXQpLFJuKCJoaCIsdHQsTXQpLFJuKCJrayIsdHQsTXQpLFJuKCJobW0iLEhlKSxSbigiaG1tc3MiLHV0KSxSbigiSG1tIixIZSksUm4oIkhtbXNzIix1dCksaHQoWyJIIiwiSEgiXSxmbiksaHQoWyJrIiwia2siXSxmdW5jdGlv''@;'; put 'put ''bihDZSxLZSxtdCl7dmFyIEl0PVR0KENlKTtLZVtmbl09MjQ9PT1JdD8wOkl0fSksaHQoWyJhIiwiQSJdLGZ1bmN0aW9uKENlLEtlLG10KXttdC5faXNQbT1tdC5fbG9jYWxlLmlzUE0oQ2UpLG10Ll9tZXJpZGllbT1DZX0pLGh0KFsiaCIsImhoIl0sZnVuY3Rpb24oQ2UsS2UsbXQpe0tlW2Zu''@;'; put 'put ''XT1UdChDZSksWShtdCkuYmlnSG91cj0hMH0pLGh0KCJobW0iLGZ1bmN0aW9uKENlLEtlLG10KXt2YXIgSXQ9Q2UubGVuZ3RoLTI7S2VbZm5dPVR0KENlLnN1YnN0cigwLEl0KSksS2VbSWldPVR0KENlLnN1YnN0cihJdCkpLFkobXQpLmJpZ0hvdXI9ITB9KSxodCgiaG1tc3MiLGZ1bmN0aW9u''@;'; put 'put ''KENlLEtlLG10KXt2YXIgSXQ9Q2UubGVuZ3RoLTQsZG49Q2UubGVuZ3RoLTI7S2VbZm5dPVR0KENlLnN1YnN0cigwLEl0KSksS2VbSWldPVR0KENlLnN1YnN0cihJdCwyKSksS2VbWHRdPVR0KENlLnN1YnN0cihkbikpLFkobXQpLmJpZ0hvdXI9ITB9KSxodCgiSG1tIixmdW5jdGlvbihDZSxL''@;'; put 'put ''ZSxtdCl7dmFyIEl0PUNlLmxlbmd0aC0yO0tlW2ZuXT1UdChDZS5zdWJzdHIoMCxJdCkpLEtlW0lpXT1UdChDZS5zdWJzdHIoSXQpKX0pLGh0KCJIbW1zcyIsZnVuY3Rpb24oQ2UsS2UsbXQpe3ZhciBJdD1DZS5sZW5ndGgtNCxkbj1DZS5sZW5ndGgtMjtLZVtmbl09VHQoQ2Uuc3Vic3RyKDAs''@;'; put 'put ''SXQpKSxLZVtJaV09VHQoQ2Uuc3Vic3RyKEl0LDIpKSxLZVtYdF09VHQoQ2Uuc3Vic3RyKGRuKSl9KTt2YXIgVnM9ZWkoIkhvdXJzIiwhMCk7dmFyIFN0LGpsPXtjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRk''@;'; put 'put ''ZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LGxvbmdEYXRlRm9ybWF0OntMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExM''@;'; put 'put ''OiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0saW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSIsb3JkaW5hbDoiJWQiLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoi''@;'; put 'put ''JXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsdzoiYSB3ZWVrIix3dzoiJWQgd2Vla3MiLE06ImEgbW9udGgiLE1NOiIlZCBt''@;'; put 'put ''b250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sbW9udGhzOlFuLG1vbnRoc1Nob3J0OmxhLHdlZWs6e2RvdzowLGRveTo2fSx3ZWVrZGF5czpyNSx3ZWVrZGF5c01pbjp1Zix3ZWVrZGF5c1Nob3J0Ok9sLG1lcmlkaWVtUGFyc2U6L1thcF1cLj9tP1wuPy9pfSxIbz17fSxrbz17fTtm''@;'; put 'put ''dW5jdGlvbiBCdChDZSxLZSl7dmFyIG10LEl0PU1hdGgubWluKENlLmxlbmd0aCxLZS5sZW5ndGgpO2ZvcihtdD0wO210PEl0O210Kz0xKWlmKENlW210XSE9PUtlW210XSlyZXR1cm4gbXQ7cmV0dXJuIEl0fWZ1bmN0aW9uIF9uKENlKXtyZXR1cm4gQ2UmJkNlLnRvTG93ZXJDYXNlKCkucmVw''@;'; put 'put ''bGFjZSgiXyIsIi0iKX1mdW5jdGlvbiBibihDZSl7dmFyIEtlPW51bGw7aWYodm9pZCAwPT09SG9bQ2VdJiZ1ZSYmdWUuZXhwb3J0cyYmZnVuY3Rpb24gSW4oQ2Upe3JldHVybiEoIUNlfHwhQ2UubWF0Y2goIl5bXi9cXFxcXSokIikpfShDZSkpdHJ5e0tlPVN0Ll9hYmJyLHkoMzUzNTgpKCIu''@;'; put 'put ''LyIrQ2UpLHVyKEtlKX1jYXRjaHtIb1tDZV09bnVsbH1yZXR1cm4gSG9bQ2VdfWZ1bmN0aW9uIHVyKENlLEtlKXt2YXIgbXQ7cmV0dXJuIENlJiYoKG10PU8oS2UpP3RhKENlKTpiaShDZSxLZSkpP1N0PW10OnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4o''@;'; put 'put ''IkxvY2FsZSAiK0NlKyIgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PyIpKSxTdC5fYWJicn1mdW5jdGlvbiBiaShDZSxLZSl7aWYobnVsbCE9PUtlKXt2YXIgbXQsSXQ9amw7aWYoS2UuYWJicj1DZSxudWxsIT1Ib1tDZV0pVigiZGVmaW5lTG9jYWxlT3ZlcnJpZGUiLCJ1''@;'; put 'put ''c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSBhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgU2VlIGh0''@;'; put 'put ''dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4iKSxJdD1Ib1tDZV0uX2NvbmZpZztlbHNlIGlmKG51bGwhPUtlLnBhcmVudExvY2FsZSlpZihudWxsIT1Ib1tLZS5wYXJlbnRMb2NhbGVdKUl0PUhvW0tlLnBhcmVudExvY2Fs''@;'; put 'put ''ZV0uX2NvbmZpZztlbHNle2lmKG51bGw9PShtdD1ibihLZS5wYXJlbnRMb2NhbGUpKSlyZXR1cm4ga29bS2UucGFyZW50TG9jYWxlXXx8KGtvW0tlLnBhcmVudExvY2FsZV09W10pLGtvW0tlLnBhcmVudExvY2FsZV0ucHVzaCh7bmFtZTpDZSxjb25maWc6S2V9KSxudWxsO0l0PW10Ll9jb25m''@;'; put 'put ''aWd9cmV0dXJuIEhvW0NlXT1uZXcgQyh4KEl0LEtlKSksa29bQ2VdJiZrb1tDZV0uZm9yRWFjaChmdW5jdGlvbihkbil7YmkoZG4ubmFtZSxkbi5jb25maWcpfSksdXIoQ2UpLEhvW0NlXX1yZXR1cm4gZGVsZXRlIEhvW0NlXSxudWxsfWZ1bmN0aW9uIHRhKENlKXt2YXIgS2U7aWYoQ2UmJkNl''@;'; put 'put ''Ll9sb2NhbGUmJkNlLl9sb2NhbGUuX2FiYnImJihDZT1DZS5fbG9jYWxlLl9hYmJyKSwhQ2UpcmV0dXJuIFN0O2lmKCFCKENlKSl7aWYoS2U9Ym4oQ2UpKXJldHVybiBLZTtDZT1bQ2VdfXJldHVybiBmdW5jdGlvbiBtbihDZSl7Zm9yKHZhciBtdCxJdCxkbixxbixLZT0wO0tlPENlLmxlbmd0''@;'; put 'put ''aDspe2ZvcihtdD0ocW49X24oQ2VbS2VdKS5zcGxpdCgiLSIpKS5sZW5ndGgsSXQ9KEl0PV9uKENlW0tlKzFdKSk/SXQuc3BsaXQoIi0iKTpudWxsO210PjA7KXtpZihkbj1ibihxbi5zbGljZSgwLG10KS5qb2luKCItIikpKXJldHVybiBkbjtpZihJdCYmSXQubGVuZ3RoPj1tdCYmQnQocW4s''@;'; put 'put ''SXQpPj1tdC0xKWJyZWFrO210LS19S2UrK31yZXR1cm4gU3R9KENlKX1mdW5jdGlvbiBWYShDZSl7dmFyIEtlLG10PUNlLl9hO3JldHVybiBtdCYmLTI9PT1ZKENlKS5vdmVyZmxvdyYmKEtlPW10W2hpXTwwfHxtdFtoaV0+MTE/aGk6bXRbY25dPDF8fG10W2NuXT5wYShtdFt6dF0sbXRbaGld''@;'; put 'put ''KT9jbjptdFtmbl08MHx8bXRbZm5dPjI0fHwyND09PW10W2ZuXSYmKDAhPT1tdFtJaV18fDAhPT1tdFtYdF18fDAhPT1tdFtlbl0pP2ZuOm10W0lpXTwwfHxtdFtJaV0+NTk/SWk6bXRbWHRdPDB8fG10W1h0XT41OT9YdDptdFtlbl08MHx8bXRbZW5dPjk5OT9lbjotMSxZKENlKS5fb3ZlcmZs''@;'; put 'put ''b3dEYXlPZlllYXImJihLZTx6dHx8S2U+Y24pJiYoS2U9Y24pLFkoQ2UpLl9vdmVyZmxvd1dlZWtzJiYtMT09PUtlJiYoS2U9dWEpLFkoQ2UpLl9vdmVyZmxvd1dlZWtkYXkmJi0xPT09S2UmJihLZT1FaSksWShDZSkub3ZlcmZsb3c9S2UpLENlfXZhciAkbz0vXlxzKigoPzpbKy1dXGR7Nn18''@;'; put 'put ''XGR7NH0pLSg/OlxkXGQtXGRcZHxXXGRcZC1cZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OjpcZFxkKD86OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbKy1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sWGw9L15ccyooKD86WystXVxkezZ9fFxkezR9KSg/OlxkXGRcZFxk''@;'; put 'put ''fFdcZFxkXGR8V1xkXGR8XGRcZFxkfFxkXGR8KSkoPzooVHwgKShcZFxkKD86XGRcZCg/OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbKy1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sdG89L1p8WystXVxkXGQoPzo6P1xkXGQpPy8sX289W1siWVlZWVlZLU1NLUREIiwvWystXVxkezZ9LVxk''@;'; put 'put ''XGQtXGRcZC9dLFsiWVlZWS1NTS1ERCIsL1xkezR9LVxkXGQtXGRcZC9dLFsiR0dHRy1bV11XVy1FIiwvXGR7NH0tV1xkXGQtXGQvXSxbIkdHR0ctW1ddV1ciLC9cZHs0fS1XXGRcZC8sITFdLFsiWVlZWS1EREQiLC9cZHs0fS1cZHszfS9dLFsiWVlZWS1NTSIsL1xkezR9LVxkXGQvLCExXSxb''@;'; put 'put ''IllZWVlZWU1NREQiLC9bKy1dXGR7MTB9L10sWyJZWVlZTU1ERCIsL1xkezh9L10sWyJHR0dHW1ddV1dFIiwvXGR7NH1XXGR7M30vXSxbIkdHR0dbV11XVyIsL1xkezR9V1xkezJ9LywhMV0sWyJZWVlZREREIiwvXGR7N30vXSxbIllZWVlNTSIsL1xkezZ9LywhMV0sWyJZWVlZIiwvXGR7NH0v''@;'; put 'put ''LCExXV0samk9W1siSEg6bW06c3MuU1NTUyIsL1xkXGQ6XGRcZDpcZFxkXC5cZCsvXSxbIkhIOm1tOnNzLFNTU1MiLC9cZFxkOlxkXGQ6XGRcZCxcZCsvXSxbIkhIOm1tOnNzIiwvXGRcZDpcZFxkOlxkXGQvXSxbIkhIOm1tIiwvXGRcZDpcZFxkL10sWyJISG1tc3MuU1NTUyIsL1xkXGRcZFxk''@;'; put 'put ''XGRcZFwuXGQrL10sWyJISG1tc3MsU1NTUyIsL1xkXGRcZFxkXGRcZCxcZCsvXSxbIkhIbW1zcyIsL1xkXGRcZFxkXGRcZC9dLFsiSEhtbSIsL1xkXGRcZFxkL10sWyJISCIsL1xkXGQvXV0sUGM9L15cLz9EYXRlXCgoLT9cZCspL2ksemw9L14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8''@;'; put 'put ''U3VuKSw/XHMpPyhcZHsxLDJ9KVxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxzKFxkezIsNH0pXHMoXGRcZCk6KFxkXGQpKD86OihcZFxkKSk/XHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cZHs0fSkpJC8sQ2E9e1VUOjAs''@;'; put 'put ''R01UOjAsRURUOi0yNDAsRVNUOi0zMDAsQ0RUOi0zMDAsQ1NUOi0zNjAsTURUOi0zNjAsTVNUOi00MjAsUERUOi00MjAsUFNUOi00ODB9O2Z1bmN0aW9uIFRhKENlKXt2YXIgS2UsbXQscW4saWksSWEsU28sSXQ9Q2UuX2ksZG49JG8uZXhlYyhJdCl8fFhsLmV4ZWMoSXQpLGZzPV9vLmxlbmd0''@;'; put 'put ''aCxOdT1qaS5sZW5ndGg7aWYoZG4pe2ZvcihZKENlKS5pc289ITAsS2U9MCxtdD1mcztLZTxtdDtLZSsrKWlmKF9vW0tlXVsxXS5leGVjKGRuWzFdKSl7aWk9X29bS2VdWzBdLHFuPSExIT09X29bS2VdWzJdO2JyZWFrfWlmKG51bGw9PWlpKXJldHVybiB2b2lkKENlLl9pc1ZhbGlkPSExKTtp''@;'; put 'put ''ZihkblszXSl7Zm9yKEtlPTAsbXQ9TnU7S2U8bXQ7S2UrKylpZihqaVtLZV1bMV0uZXhlYyhkblszXSkpe0lhPShkblsyXXx8IiAiKStqaVtLZV1bMF07YnJlYWt9aWYobnVsbD09SWEpcmV0dXJuIHZvaWQoQ2UuX2lzVmFsaWQ9ITEpfWlmKCFxbiYmbnVsbCE9SWEpcmV0dXJuIHZvaWQoQ2Uu''@;'; put 'put ''X2lzVmFsaWQ9ITEpO2lmKGRuWzRdKXtpZighdG8uZXhlYyhkbls0XSkpcmV0dXJuIHZvaWQoQ2UuX2lzVmFsaWQ9ITEpO1NvPSJaIn1DZS5fZj1paSsoSWF8fCIiKSsoU298fCIiKSxmNChDZSl9ZWxzZSBDZS5faXNWYWxpZD0hMX1mdW5jdGlvbiBHMChDZSl7dmFyIEtlPXBhcnNlSW50KENl''@;'; put 'put ''LDEwKTtyZXR1cm4gS2U8PTQ5PzJlMytLZTpLZTw9OTk5PzE5MDArS2U6S2V9ZnVuY3Rpb24gTXMoQ2Upe3ZhciBtdCxLZT16bC5leGVjKGZ1bmN0aW9uICQwKENlKXtyZXR1cm4gQ2UucmVwbGFjZSgvXChbXigpXSpcKXxbXG5cdF0vZywiICIpLnJlcGxhY2UoLyhcc1xzKykvZywiICIpLnJl''@;'; put 'put ''cGxhY2UoL15cc1xzKi8sIiIpLnJlcGxhY2UoL1xzXHMqJC8sIiIpfShDZS5faSkpO2lmKEtlKXtpZihtdD1mdW5jdGlvbiBYaChDZSxLZSxtdCxJdCxkbixxbil7dmFyIGlpPVtHMChDZSksbGEuaW5kZXhPZihLZSkscGFyc2VJbnQobXQsMTApLHBhcnNlSW50KEl0LDEwKSxwYXJzZUludChk''@;'; put 'put ''biwxMCldO3JldHVybiBxbiYmaWkucHVzaChwYXJzZUludChxbiwxMCkpLGlpfShLZVs0XSxLZVszXSxLZVsyXSxLZVs1XSxLZVs2XSxLZVs3XSksIWZ1bmN0aW9uIE5vKENlLEtlLG10KXtyZXR1cm4hQ2V8fE9sLmluZGV4T2YoQ2UpPT09bmV3IERhdGUoS2VbMF0sS2VbMV0sS2VbMl0pLmdl''@;'; put 'put ''dERheSgpfHwoWShtdCkud2Vla2RheU1pc21hdGNoPSEwLG10Ll9pc1ZhbGlkPSExLCExKX0oS2VbMV0sbXQsQ2UpKXJldHVybjtDZS5fYT1tdCxDZS5fdHptPWZ1bmN0aW9uIHFpKENlLEtlLG10KXtpZihDZSlyZXR1cm4gQ2FbQ2VdO2lmKEtlKXJldHVybiAwO3ZhciBJdD1wYXJzZUludCht''@;'; put 'put ''dCwxMCksZG49SXQlMTAwO3JldHVybihJdC1kbikvMTAwKjYwK2RufShLZVs4XSxLZVs5XSxLZVsxMF0pLENlLl9kPUpyLmFwcGx5KG51bGwsQ2UuX2EpLENlLl9kLnNldFVUQ01pbnV0ZXMoQ2UuX2QuZ2V0VVRDTWludXRlcygpLUNlLl90em0pLFkoQ2UpLnJmYzI4MjI9ITB9ZWxzZSBDZS5f''@;'; put 'put ''aXNWYWxpZD0hMX1mdW5jdGlvbiBvbyhDZSxLZSxtdCl7cmV0dXJuIENlPz9LZT8/bXR9ZnVuY3Rpb24gX2woQ2Upe3ZhciBLZSxtdCxkbixxbixpaSxJdD1bXTtpZighQ2UuX2Qpe2Zvcihkbj1mdW5jdGlvbiBhNShDZSl7dmFyIEtlPW5ldyBEYXRlKF8ubm93KCkpO3JldHVybiBDZS5fdXNl''@;'; put 'put ''VVRDP1tLZS5nZXRVVENGdWxsWWVhcigpLEtlLmdldFVUQ01vbnRoKCksS2UuZ2V0VVRDRGF0ZSgpXTpbS2UuZ2V0RnVsbFllYXIoKSxLZS5nZXRNb250aCgpLEtlLmdldERhdGUoKV19KENlKSxDZS5fdyYmbnVsbD09Q2UuX2FbY25dJiZudWxsPT1DZS5fYVtoaV0mJmZ1bmN0aW9uIHRoKENl''@;'; put 'put ''KXt2YXIgS2UsbXQsSXQsZG4scW4saWksSWEsU28sZnM7bnVsbCE9KEtlPUNlLl93KS5HR3x8bnVsbCE9S2UuV3x8bnVsbCE9S2UuRT8ocW49MSxpaT00LG10PW9vKEtlLkdHLENlLl9hW3p0XSxMdShzbCgpLDEsNCkueWVhciksSXQ9b28oS2UuVywxKSwoKGRuPW9vKEtlLkUsMSkpPDF8fGRu''@;'; put 'put ''PjcpJiYoU289ITApKToocW49Q2UuX2xvY2FsZS5fd2Vlay5kb3csaWk9Q2UuX2xvY2FsZS5fd2Vlay5kb3ksZnM9THUoc2woKSxxbixpaSksbXQ9b28oS2UuZ2csQ2UuX2FbenRdLGZzLnllYXIpLEl0PW9vKEtlLncsZnMud2VlayksbnVsbCE9S2UuZD8oKGRuPUtlLmQpPDB8fGRuPjYpJiYo''@;'; put 'put ''U289ITApOm51bGwhPUtlLmU/KGRuPUtlLmUrcW4sKEtlLmU8MHx8S2UuZT42KSYmKFNvPSEwKSk6ZG49cW4pLEl0PDF8fEl0PlByKG10LHFuLGlpKT9ZKENlKS5fb3ZlcmZsb3dXZWVrcz0hMDpudWxsIT1Tbz9ZKENlKS5fb3ZlcmZsb3dXZWVrZGF5PSEwOihJYT1IYShtdCxJdCxkbixxbixp''@;'; put 'put ''aSksQ2UuX2FbenRdPUlhLnllYXIsQ2UuX2RheU9mWWVhcj1JYS5kYXlPZlllYXIpfShDZSksbnVsbCE9Q2UuX2RheU9mWWVhciYmKGlpPW9vKENlLl9hW3p0XSxkblt6dF0pLChDZS5fZGF5T2ZZZWFyPnZyKGlpKXx8MD09PUNlLl9kYXlPZlllYXIpJiYoWShDZSkuX292ZXJmbG93RGF5T2ZZ''@;'; put 'put ''ZWFyPSEwKSxtdD1KcihpaSwwLENlLl9kYXlPZlllYXIpLENlLl9hW2hpXT1tdC5nZXRVVENNb250aCgpLENlLl9hW2NuXT1tdC5nZXRVVENEYXRlKCkpLEtlPTA7S2U8MyYmbnVsbD09Q2UuX2FbS2VdOysrS2UpQ2UuX2FbS2VdPUl0W0tlXT1kbltLZV07Zm9yKDtLZTw3O0tlKyspQ2UuX2Fb''@;'; put 'put ''S2VdPUl0W0tlXT1udWxsPT1DZS5fYVtLZV0/Mj09PUtlPzE6MDpDZS5fYVtLZV07MjQ9PT1DZS5fYVtmbl0mJjA9PT1DZS5fYVtJaV0mJjA9PT1DZS5fYVtYdF0mJjA9PT1DZS5fYVtlbl0mJihDZS5fbmV4dERheT0hMCxDZS5fYVtmbl09MCksQ2UuX2Q9KENlLl91c2VVVEM/SnI6VnQpLmFw''@;'; put 'put ''cGx5KG51bGwsSXQpLHFuPUNlLl91c2VVVEM/Q2UuX2QuZ2V0VVRDRGF5KCk6Q2UuX2QuZ2V0RGF5KCksbnVsbCE9Q2UuX3R6bSYmQ2UuX2Quc2V0VVRDTWludXRlcyhDZS5fZC5nZXRVVENNaW51dGVzKCktQ2UuX3R6bSksQ2UuX25leHREYXkmJihDZS5fYVtmbl09MjQpLENlLl93JiZ0eXBl''@;'; put 'put ''b2YgQ2UuX3cuZDwidSImJkNlLl93LmQhPT1xbiYmKFkoQ2UpLndlZWtkYXlNaXNtYXRjaD0hMCl9fWZ1bmN0aW9uIGY0KENlKXtpZihDZS5fZiE9PV8uSVNPXzg2MDEpaWYoQ2UuX2YhPT1fLlJGQ18yODIyKXtDZS5fYT1bXSxZKENlKS5lbXB0eT0hMDt2YXIgbXQsSXQsZG4scW4saWksZnMs''@;'; put 'put ''TnUsS2U9IiIrQ2UuX2ksSWE9S2UubGVuZ3RoLFNvPTA7Zm9yKE51PShkbj1vdChDZS5fZixDZS5fbG9jYWxlKS5tYXRjaChtKXx8W10pLmxlbmd0aCxtdD0wO210PE51O210KyspKEl0PShLZS5tYXRjaChzdChxbj1kblttdF0sQ2UpKXx8W10pWzBdKSYmKChpaT1LZS5zdWJzdHIoMCxLZS5p''@;'; put 'put ''bmRleE9mKEl0KSkpLmxlbmd0aD4wJiZZKENlKS51bnVzZWRJbnB1dC5wdXNoKGlpKSxLZT1LZS5zbGljZShLZS5pbmRleE9mKEl0KStJdC5sZW5ndGgpLFNvKz1JdC5sZW5ndGgpLHRlW3FuXT8oSXQ/WShDZSkuZW1wdHk9ITE6WShDZSkudW51c2VkVG9rZW5zLnB1c2gocW4pLGpuKHFuLEl0''@;'; put 'put ''LENlKSk6Q2UuX3N0cmljdCYmIUl0JiZZKENlKS51bnVzZWRUb2tlbnMucHVzaChxbik7WShDZSkuY2hhcnNMZWZ0T3Zlcj1JYS1TbyxLZS5sZW5ndGg+MCYmWShDZSkudW51c2VkSW5wdXQucHVzaChLZSksQ2UuX2FbZm5dPD0xMiYmITA9PT1ZKENlKS5iaWdIb3VyJiZDZS5fYVtmbl0+MCYm''@;'; put 'put ''KFkoQ2UpLmJpZ0hvdXI9dm9pZCAwKSxZKENlKS5wYXJzZWREYXRlUGFydHM9Q2UuX2Euc2xpY2UoMCksWShDZSkubWVyaWRpZW09Q2UuX21lcmlkaWVtLENlLl9hW2ZuXT1mdW5jdGlvbiBwNChDZSxLZSxtdCl7dmFyIEl0O3JldHVybiBudWxsPT1tdD9LZTpudWxsIT1DZS5tZXJpZGllbUhv''@;'; put 'put ''dXI/Q2UubWVyaWRpZW1Ib3VyKEtlLG10KToobnVsbCE9Q2UuaXNQTSYmKChJdD1DZS5pc1BNKG10KSkmJktlPDEyJiYoS2UrPTEyKSwhSXQmJjEyPT09S2UmJihLZT0wKSksS2UpfShDZS5fbG9jYWxlLENlLl9hW2ZuXSxDZS5fbWVyaWRpZW0pLG51bGwhPT0oZnM9WShDZSkuZXJhKSYmKENl''@;'; put 'put ''Ll9hW3p0XT1DZS5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihmcyxDZS5fYVt6dF0pKSxfbChDZSksVmEoQ2UpfWVsc2UgTXMoQ2UpO2Vsc2UgVGEoQ2UpfWZ1bmN0aW9uIGx2KENlKXt2YXIgS2U9Q2UuX2ksbXQ9Q2UuX2Y7cmV0dXJuIENlLl9sb2NhbGU9Q2UuX2xvY2FsZXx8dGEoQ2UuX2wp''@;'; put 'put ''LG51bGw9PT1LZXx8dm9pZCAwPT09bXQmJiIiPT09S2U/Sih7bnVsbElucHV0OiEwfSk6KCJzdHJpbmciPT10eXBlb2YgS2UmJihDZS5faT1LZT1DZS5fbG9jYWxlLnByZXBhcnNlKEtlKSksX2UoS2UpP25ldyBtZShWYShLZSkpOihOKEtlKT9DZS5fZD1LZTpCKG10KT9mdW5jdGlvbiBLMChD''@;'; put 'put ''ZSl7dmFyIEtlLG10LEl0LGRuLHFuLGlpLElhPSExLFNvPUNlLl9mLmxlbmd0aDtpZigwPT09U28pcmV0dXJuIFkoQ2UpLmludmFsaWRGb3JtYXQ9ITAsdm9pZChDZS5fZD1uZXcgRGF0ZShOYU4pKTtmb3IoZG49MDtkbjxTbztkbisrKXFuPTAsaWk9ITEsS2U9bGUoe30sQ2UpLG51bGwhPUNl''@;'; put 'put ''Ll91c2VVVEMmJihLZS5fdXNlVVRDPUNlLl91c2VVVEMpLEtlLl9mPUNlLl9mW2RuXSxmNChLZSksZWUoS2UpJiYoaWk9ITApLHFuKz1ZKEtlKS5jaGFyc0xlZnRPdmVyLHFuKz0xMCpZKEtlKS51bnVzZWRUb2tlbnMubGVuZ3RoLFkoS2UpLnNjb3JlPXFuLElhP3FuPEl0JiYoSXQ9cW4sbXQ9''@;'; put 'put ''S2UpOihudWxsPT1JdHx8cW48SXR8fGlpKSYmKEl0PXFuLG10PUtlLGlpJiYoSWE9ITApKTtLKENlLG10fHxLZSl9KENlKTptdD9mNChDZSk6ZnVuY3Rpb24gUncoQ2Upe3ZhciBLZT1DZS5faTtPKEtlKT9DZS5fZD1uZXcgRGF0ZShfLm5vdygpKTpOKEtlKT9DZS5fZD1uZXcgRGF0ZShLZS52''@;'; put 'put ''YWx1ZU9mKCkpOiJzdHJpbmciPT10eXBlb2YgS2U/ZnVuY3Rpb24gcmEoQ2Upe3ZhciBLZT1QYy5leGVjKENlLl9pKTtudWxsPT09S2U/KFRhKENlKSwhMT09PUNlLl9pc1ZhbGlkJiYoZGVsZXRlIENlLl9pc1ZhbGlkLE1zKENlKSwhMT09PUNlLl9pc1ZhbGlkJiYoZGVsZXRlIENlLl9pc1Zh''@;'; put 'put ''bGlkLENlLl9zdHJpY3Q/Q2UuX2lzVmFsaWQ9ITE6Xy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhDZSkpKSk6Q2UuX2Q9bmV3IERhdGUoK0tlWzFdKX0oQ2UpOkIoS2UpPyhDZS5fYT1MKEtlLnNsaWNlKDApLGZ1bmN0aW9uKG10KXtyZXR1cm4gcGFyc2VJbnQobXQsMTApfSksX2woQ2UpKTp3''@;'; put 'put ''KEtlKT9mdW5jdGlvbiBndShDZSl7aWYoIUNlLl9kKXt2YXIgS2U9bnQoQ2UuX2kpO0NlLl9hPUwoW0tlLnllYXIsS2UubW9udGgsdm9pZCAwPT09S2UuZGF5P0tlLmRhdGU6S2UuZGF5LEtlLmhvdXIsS2UubWludXRlLEtlLnNlY29uZCxLZS5taWxsaXNlY29uZF0sZnVuY3Rpb24oSXQpe3Jl''@;'; put 'put ''dHVybiBJdCYmcGFyc2VJbnQoSXQsMTApfSksX2woQ2UpfX0oQ2UpOnooS2UpP0NlLl9kPW5ldyBEYXRlKEtlKTpfLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKENlKX0oQ2UpLGVlKENlKXx8KENlLl9kPW51bGwpLENlKSl9ZnVuY3Rpb24gY3YoQ2UsS2UsbXQsSXQsZG4pe3ZhciBxbj17fTty''@;'; put 'put ''ZXR1cm4oITA9PT1LZXx8ITE9PT1LZSkmJihJdD1LZSxLZT12b2lkIDApLCghMD09PW10fHwhMT09PW10KSYmKEl0PW10LG10PXZvaWQgMCksKHcoQ2UpJiZGKENlKXx8QihDZSkmJjA9PT1DZS5sZW5ndGgpJiYoQ2U9dm9pZCAwKSxxbi5faXNBTW9tZW50T2JqZWN0PSEwLHFuLl91c2VVVEM9''@;'; put 'put ''cW4uX2lzVVRDPWRuLHFuLl9sPW10LHFuLl9pPUNlLHFuLl9mPUtlLHFuLl9zdHJpY3Q9SXQsZnVuY3Rpb24gRmMoQ2Upe3ZhciBLZT1uZXcgbWUoVmEobHYoQ2UpKSk7cmV0dXJuIEtlLl9uZXh0RGF5JiYoS2UuYWRkKDEsImQiKSxLZS5fbmV4dERheT12b2lkIDApLEtlfShxbil9ZnVuY3Rp''@;'; put 'put ''b24gc2woQ2UsS2UsbXQsSXQpe3JldHVybiBjdihDZSxLZSxtdCxJdCwhMSl9Xy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1TZSgidmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFj''@;'; put 'put ''ayB0byBqcyBEYXRlKCksIHdoaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dh''@;'; put 'put ''cm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uIixmdW5jdGlvbihDZSl7Q2UuX2Q9bmV3IERhdGUoQ2UuX2krKENlLl91c2VVVEM/IiBVVEMiOiIiKSl9KSxfLklTT184NjAxPWZ1bmN0aW9uKCl7fSxfLlJGQ18yODIyPWZ1bmN0aW9uKCl7fTt2YXIgSTM9U2UoIm1vbWVudCgpLm1pbiBp''@;'; put 'put ''cyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIixmdW5jdGlvbigpe3ZhciBDZT1zbC5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZDZS5pc1ZhbGlkKCk/''@;'; put 'put ''Q2U8dGhpcz90aGlzOkNlOkooKX0pLEx3PVNlKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24oKXt2YXIgQ2U9c2wuYXBwbHkobnVsbCxhcmd1''@;'; put 'put ''bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmQ2UuaXNWYWxpZCgpP0NlPnRoaXM/dGhpczpDZTpKKCl9KTtmdW5jdGlvbiBuaChDZSxLZSl7dmFyIG10LEl0O2lmKDE9PT1LZS5sZW5ndGgmJkIoS2VbMF0pJiYoS2U9S2VbMF0pLCFLZS5sZW5ndGgpcmV0dXJuIHNsKCk7Zm9yKG10PUtl''@;'; put 'put ''WzBdLEl0PTE7SXQ8S2UubGVuZ3RoOysrSXQpKCFLZVtJdF0uaXNWYWxpZCgpfHxLZVtJdF1bQ2VdKG10KSkmJihtdD1LZVtJdF0pO3JldHVybiBtdH12YXIgZmk9WyJ5ZWFyIiwicXVhcnRlciIsIm1vbnRoIiwid2VlayIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNl''@;'; put 'put ''Y29uZCJdO2Z1bmN0aW9uIHBmKENlKXt2YXIgS2U9bnQoQ2UpLG10PUtlLnllYXJ8fDAsSXQ9S2UucXVhcnRlcnx8MCxkbj1LZS5tb250aHx8MCxxbj1LZS53ZWVrfHxLZS5pc29XZWVrfHwwLGlpPUtlLmRheXx8MCxJYT1LZS5ob3VyfHwwLFNvPUtlLm1pbnV0ZXx8MCxmcz1LZS5zZWNvbmR8''@;'; put 'put ''fDAsTnU9S2UubWlsbGlzZWNvbmR8fDA7dGhpcy5faXNWYWxpZD1mdW5jdGlvbiBvNShDZSl7dmFyIEtlLEl0LG10PSExLGRuPWZpLmxlbmd0aDtmb3IoS2UgaW4gQ2UpaWYoUChDZSxLZSkmJigtMT09PVdpLmNhbGwoZmksS2UpfHxudWxsIT1DZVtLZV0mJmlzTmFOKENlW0tlXSkpKXJldHVy''@;'; put 'put ''biExO2ZvcihJdD0wO0l0PGRuOysrSXQpaWYoQ2VbZmlbSXRdXSl7aWYobXQpcmV0dXJuITE7cGFyc2VGbG9hdChDZVtmaVtJdF1dKSE9PVR0KENlW2ZpW0l0XV0pJiYobXQ9ITApfXJldHVybiEwfShLZSksdGhpcy5fbWlsbGlzZWNvbmRzPStOdSsxZTMqZnMrNmU0KlNvKzFlMypJYSo2MCo2''@;'; put 'put ''MCx0aGlzLl9kYXlzPStpaSs3KnFuLHRoaXMuX21vbnRocz0rZG4rMypJdCsxMiptdCx0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2FsZT10YSgpLHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIGw1KENlKXtyZXR1cm4gQ2UgaW5zdGFuY2VvZiBwZn1mdW5jdGlvbiBnNChDZSl7cmV0dXJuIENlPDA/''@;'; put 'put ''LTEqTWF0aC5yb3VuZCgtMSpDZSk6TWF0aC5yb3VuZChDZSl9ZnVuY3Rpb24gSTEoQ2UsS2Upe3NlKENlLDAsMCxmdW5jdGlvbigpe3ZhciBtdD10aGlzLnV0Y09mZnNldCgpLEl0PSIrIjtyZXR1cm4gbXQ8MCYmKG10PS1tdCxJdD0iLSIpLEl0K0Uofn4obXQvNjApLDIpK0tlK0Uofn5tdCU2''@;'; put 'put ''MCwyKX0pfUkxKCJaIiwiOiIpLEkxKCJaWiIsIiIpLFJuKCJaIixSaSksUm4oIlpaIixSaSksaHQoWyJaIiwiWloiXSxmdW5jdGlvbihDZSxLZSxtdCl7bXQuX3VzZVVUQz0hMCxtdC5fdHptPWxkKFJpLENlKX0pO3ZhciB1dj0vKFtcK1wtXXxcZFxkKS9naTtmdW5jdGlvbiBsZChDZSxLZSl7''@;'; put 'put ''dmFyIGRuLHFuLG10PShLZXx8IiIpLm1hdGNoKENlKTtyZXR1cm4gbnVsbD09PW10P251bGw6MD09PShxbj02MCooZG49KChtdFttdC5sZW5ndGgtMV18fFtdKSsiIikubWF0Y2godXYpfHxbIi0iLDAsMF0pWzFdK1R0KGRuWzJdKSk/MDoiKyI9PT1kblswXT9xbjotcW59ZnVuY3Rpb24gVDYo''@;'; put 'put ''Q2UsS2Upe3ZhciBtdCxJdDtyZXR1cm4gS2UuX2lzVVRDPyhtdD1LZS5jbG9uZSgpLEl0PShfZShDZSl8fE4oQ2UpP0NlLnZhbHVlT2YoKTpzbChDZSkudmFsdWVPZigpKS1tdC52YWx1ZU9mKCksbXQuX2Quc2V0VGltZShtdC5fZC52YWx1ZU9mKCkrSXQpLF8udXBkYXRlT2Zmc2V0KG10LCEx''@;'; put 'put ''KSxtdCk6c2woQ2UpLmxvY2FsKCl9ZnVuY3Rpb24gbXUoQ2Upe3JldHVybi1NYXRoLnJvdW5kKENlLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpfWZ1bmN0aW9uIF8wKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXR9Xy51cGRhdGVPZmZzZXQ9''@;'; put 'put ''ZnVuY3Rpb24oKXt9O3ZhciBBNj0vXigtfFwrKT8oPzooXGQqKVsuIF0pPyhcZCspOihcZCspKD86OihcZCspKFwuXGQqKT8pPyQvLGUyPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05''@;'; put 'put ''LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztmdW5jdGlvbiBKbChDZSxLZSl7dmFyIGRuLHFuLGlpLG10PUNlLEl0PW51bGw7cmV0dXJuIGw1KENlKT9tdD17bXM6Q2UuX21pbGxpc2Vjb25kcyxk''@;'; put 'put ''OkNlLl9kYXlzLE06Q2UuX21vbnRoc306eihDZSl8fCFpc05hTigrQ2UpPyhtdD17fSxLZT9tdFtLZV09K0NlOm10Lm1pbGxpc2Vjb25kcz0rQ2UpOihJdD1BNi5leGVjKENlKSk/KGRuPSItIj09PUl0WzFdPy0xOjEsbXQ9e3k6MCxkOlR0KEl0W2NuXSkqZG4saDpUdChJdFtmbl0pKmRuLG06''@;'; put 'put ''VHQoSXRbSWldKSpkbixzOlR0KEl0W1h0XSkqZG4sbXM6VHQoZzQoMWUzKkl0W2VuXSkpKmRufSk6KEl0PWUyLmV4ZWMoQ2UpKT9tdD17eTpSMShJdFsyXSxkbj0iLSI9PT1JdFsxXT8tMToxKSxNOlIxKEl0WzNdLGRuKSx3OlIxKEl0WzRdLGRuKSxkOlIxKEl0WzVdLGRuKSxoOlIxKEl0WzZd''@;'; put 'put ''LGRuKSxtOlIxKEl0WzddLGRuKSxzOlIxKEl0WzhdLGRuKX06bnVsbD09bXQ/bXQ9e306Im9iamVjdCI9PXR5cGVvZiBtdCYmKCJmcm9tImluIG10fHwidG8iaW4gbXQpJiYoaWk9ZnVuY3Rpb24gdHMoQ2UsS2Upe3ZhciBtdDtyZXR1cm4gQ2UuaXNWYWxpZCgpJiZLZS5pc1ZhbGlkKCk/KEtl''@;'; put 'put ''PVQ2KEtlLENlKSxDZS5pc0JlZm9yZShLZSk/bXQ9STAoQ2UsS2UpOigobXQ9STAoS2UsQ2UpKS5taWxsaXNlY29uZHM9LW10Lm1pbGxpc2Vjb25kcyxtdC5tb250aHM9LW10Lm1vbnRocyksbXQpOnttaWxsaXNlY29uZHM6MCxtb250aHM6MH19KHNsKG10LmZyb20pLHNsKG10LnRvKSksKG10''@;'; put 'put ''PXt9KS5tcz1paS5taWxsaXNlY29uZHMsbXQuTT1paS5tb250aHMpLHFuPW5ldyBwZihtdCksbDUoQ2UpJiZQKENlLCJfbG9jYWxlIikmJihxbi5fbG9jYWxlPUNlLl9sb2NhbGUpLGw1KENlKSYmUChDZSwiX2lzVmFsaWQiKSYmKHFuLl9pc1ZhbGlkPUNlLl9pc1ZhbGlkKSxxbn1mdW5jdGlv''@;'; put 'put ''biBSMShDZSxLZSl7dmFyIG10PUNlJiZwYXJzZUZsb2F0KENlLnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihtdCk/MDptdCkqS2V9ZnVuY3Rpb24gSTAoQ2UsS2Upe3ZhciBtdD17fTtyZXR1cm4gbXQubW9udGhzPUtlLm1vbnRoKCktQ2UubW9udGgoKSsxMiooS2UueWVhcigpLUNl''@;'; put 'put ''LnllYXIoKSksQ2UuY2xvbmUoKS5hZGQobXQubW9udGhzLCJNIikuaXNBZnRlcihLZSkmJi0tbXQubW9udGhzLG10Lm1pbGxpc2Vjb25kcz0rS2UtK0NlLmNsb25lKCkuYWRkKG10Lm1vbnRocywiTSIpLG10fWZ1bmN0aW9uIHQyKENlLEtlKXtyZXR1cm4gZnVuY3Rpb24obXQsSXQpe3ZhciBx''@;'; put 'put ''bjtyZXR1cm4gbnVsbCE9PUl0JiYhaXNOYU4oK0l0KSYmKFYoS2UsIm1vbWVudCgpLiIrS2UrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK0tlKyIobnVtYmVyLCBwZXJpb2QpLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93''@;'; put 'put ''YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uIikscW49bXQsbXQ9SXQsSXQ9cW4pLEwzKHRoaXMsSmwobXQsSXQpLENlKSx0aGlzfX1mdW5jdGlvbiBMMyhDZSxLZSxtdCxJdCl7dmFyIGRuPUtlLl9taWxsaXNlY29uZHMscW49ZzQoS2UuX2RheXMpLGlpPWc0KEtl''@;'; put 'put ''Ll9tb250aHMpO0NlLmlzVmFsaWQoKSYmKEl0PUl0Pz8hMCxpaSYmcHUoQ2UsUXIoQ2UsIk1vbnRoIikraWkqbXQpLHFuJiZWaShDZSwiRGF0ZSIsUXIoQ2UsIkRhdGUiKStxbiptdCksZG4mJkNlLl9kLnNldFRpbWUoQ2UuX2QudmFsdWVPZigpK2RuKm10KSxJdCYmXy51cGRhdGVPZmZzZXQo''@;'; put 'put ''Q2UscW58fGlpKSl9SmwuZm49cGYucHJvdG90eXBlLEpsLmludmFsaWQ9ZnVuY3Rpb24gdDAoKXtyZXR1cm4gSmwoTmFOKX07dmFyIGs2PXQyKDEsImFkZCIpLHU1PXQyKC0xLCJzdWJ0cmFjdCIpO2Z1bmN0aW9uIE8zKENlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIENlfHxDZSBpbnN0YW5j''@;'; put 'put ''ZW9mIFN0cmluZ31mdW5jdGlvbiBKcyhDZSl7cmV0dXJuIF9lKENlKXx8TihDZSl8fE8zKENlKXx8eihDZSl8fGZ1bmN0aW9uIEZ3KENlKXt2YXIgS2U9QihDZSksbXQ9ITE7cmV0dXJuIEtlJiYobXQ9MD09PUNlLmZpbHRlcihmdW5jdGlvbihJdCl7cmV0dXJuIXooSXQpJiZPMyhDZSl9KS5s''@;'; put 'put ''ZW5ndGgpLEtlJiZtdH0oQ2UpfHxmdW5jdGlvbiBObihDZSl7dmFyIGRuLEtlPXcoQ2UpJiYhRihDZSksbXQ9ITEsSXQ9WyJ5ZWFycyIsInllYXIiLCJ5IiwibW9udGhzIiwibW9udGgiLCJNIiwiZGF5cyIsImRheSIsImQiLCJkYXRlcyIsImRhdGUiLCJEIiwiaG91cnMiLCJob3VyIiwiaCIs''@;'; put 'put ''Im1pbnV0ZXMiLCJtaW51dGUiLCJtIiwic2Vjb25kcyIsInNlY29uZCIsInMiLCJtaWxsaXNlY29uZHMiLCJtaWxsaXNlY29uZCIsIm1zIl0saWk9SXQubGVuZ3RoO2Zvcihkbj0wO2RuPGlpO2RuKz0xKW10PW10fHxQKENlLEl0W2RuXSk7cmV0dXJuIEtlJiZtdH0oQ2UpfHxudWxsPT1DZX1m''@;'; put 'put ''dW5jdGlvbiBQMyhDZSxLZSl7aWYoQ2UuZGF0ZSgpPEtlLmRhdGUoKSlyZXR1cm4tUDMoS2UsQ2UpO3ZhciBtdD0xMiooS2UueWVhcigpLUNlLnllYXIoKSkrKEtlLm1vbnRoKCktQ2UubW9udGgoKSksSXQ9Q2UuY2xvbmUoKS5hZGQobXQsIm1vbnRocyIpO3JldHVybi0obXQrKEtlLUl0PDA/''@;'; put 'put ''KEtlLUl0KS8oSXQtQ2UuY2xvbmUoKS5hZGQobXQtMSwibW9udGhzIikpOihLZS1JdCkvKENlLmNsb25lKCkuYWRkKG10KzEsIm1vbnRocyIpLUl0KSkpfHwwfWZ1bmN0aW9uIEthKENlKXt2YXIgS2U7cmV0dXJuIHZvaWQgMD09PUNlP3RoaXMuX2xvY2FsZS5fYWJicjoobnVsbCE9KEtlPXRh''@;'; put 'put ''KENlKSkmJih0aGlzLl9sb2NhbGU9S2UpLHRoaXMpfV8uZGVmYXVsdEZvcm1hdD0iWVlZWS1NTS1ERFRISDptbTpzc1oiLF8uZGVmYXVsdEZvcm1hdFV0Yz0iWVlZWS1NTS1ERFRISDptbTpzc1taXSI7dmFyIFZyPVNlKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwg''@;'; put 'put ''dXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsZnVuY3Rpb24oQ2Upe3JldHVybiB2b2lkIDA9PT1DZT90aGlzLmxvY2FsZURhdGEoKTp0aGlzLmxvY2Fs''@;'; put 'put ''ZShDZSl9KTtmdW5jdGlvbiBiZigpe3JldHVybiB0aGlzLl9sb2NhbGV9dmFyIGtpPTZlNCx5ND02MCpraSxFcj0zNTA2MzI4Knk0O2Z1bmN0aW9uIGxsKENlLEtlKXtyZXR1cm4oQ2UlS2UrS2UpJUtlfWZ1bmN0aW9uIFZvKENlLEtlLG10KXtyZXR1cm4gQ2U8MTAwJiZDZT49MD9uZXcgRGF0''@;'; put 'put ''ZShDZSs0MDAsS2UsbXQpLUVyOm5ldyBEYXRlKENlLEtlLG10KS52YWx1ZU9mKCl9ZnVuY3Rpb24geGMoQ2UsS2UsbXQpe3JldHVybiBDZTwxMDAmJkNlPj0wP0RhdGUuVVRDKENlKzQwMCxLZSxtdCktRXI6RGF0ZS5VVEMoQ2UsS2UsbXQpfWZ1bmN0aW9uIEYzKENlLEtlKXtyZXR1cm4gS2Uu''@;'; put 'put ''ZXJhc0FiYnJSZWdleChDZSl9ZnVuY3Rpb24gaGMoKXt2YXIgZG4scW4saWksSWEsU28sQ2U9W10sS2U9W10sbXQ9W10sSXQ9W10sZnM9dGhpcy5lcmFzKCk7Zm9yKGRuPTAscW49ZnMubGVuZ3RoO2RuPHFuOysrZG4paWk9cmkoZnNbZG5dLm5hbWUpLElhPXJpKGZzW2RuXS5hYmJyKSxTbz1y''@;'; put 'put ''aShmc1tkbl0ubmFycm93KSxLZS5wdXNoKGlpKSxDZS5wdXNoKElhKSxtdC5wdXNoKFNvKSxJdC5wdXNoKGlpKSxJdC5wdXNoKElhKSxJdC5wdXNoKFNvKTt0aGlzLl9lcmFzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0l0LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9lcmFzTmFtZVJlZ2V4PW5l''@;'; put 'put ''dyBSZWdFeHAoIl4oIitLZS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fZXJhc0FiYnJSZWdleD1uZXcgUmVnRXhwKCJeKCIrQ2Uuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX2VyYXNOYXJyb3dSZWdleD1uZXcgUmVnRXhwKCJeKCIrbXQuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIGNk''@;'; put 'put ''KENlLEtlKXtzZSgwLFtDZSxDZS5sZW5ndGhdLDAsS2UpfWZ1bmN0aW9uIFN2KENlLEtlLG10LEl0LGRuKXt2YXIgcW47cmV0dXJuIG51bGw9PUNlP0x1KHRoaXMsSXQsZG4pLnllYXI6KEtlPihxbj1QcihDZSxJdCxkbikpJiYoS2U9cW4pLFl3LmNhbGwodGhpcyxDZSxLZSxtdCxJdCxkbikp''@;'; put 'put ''fWZ1bmN0aW9uIFl3KENlLEtlLG10LEl0LGRuKXt2YXIgcW49SGEoQ2UsS2UsbXQsSXQsZG4pLGlpPUpyKHFuLnllYXIsMCxxbi5kYXlPZlllYXIpO3JldHVybiB0aGlzLnllYXIoaWkuZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChpaS5nZXRVVENNb250aCgpKSx0aGlzLmRhdGUoaWku''@;'; put 'put ''Z2V0VVRDRGF0ZSgpKSx0aGlzfXNlKCJOIiwwLDAsImVyYUFiYnIiKSxzZSgiTk4iLDAsMCwiZXJhQWJiciIpLHNlKCJOTk4iLDAsMCwiZXJhQWJiciIpLHNlKCJOTk5OIiwwLDAsImVyYU5hbWUiKSxzZSgiTk5OTk4iLDAsMCwiZXJhTmFycm93Iiksc2UoInkiLFsieSIsMV0sInlvIiwiZXJh''@;'; put 'put ''WWVhciIpLHNlKCJ5IixbInl5IiwyXSwwLCJlcmFZZWFyIiksc2UoInkiLFsieXl5IiwzXSwwLCJlcmFZZWFyIiksc2UoInkiLFsieXl5eSIsNF0sMCwiZXJhWWVhciIpLFJuKCJOIixGMyksUm4oIk5OIixGMyksUm4oIk5OTiIsRjMpLFJuKCJOTk5OIixmdW5jdGlvbiBadyhDZSxLZSl7cmV0''@;'; put 'put ''dXJuIEtlLmVyYXNOYW1lUmVnZXgoQ2UpfSksUm4oIk5OTk5OIixmdW5jdGlvbiBINihDZSxLZSl7cmV0dXJuIEtlLmVyYXNOYXJyb3dSZWdleChDZSl9KSxodChbIk4iLCJOTiIsIk5OTiIsIk5OTk4iLCJOTk5OTiJdLGZ1bmN0aW9uKENlLEtlLG10LEl0KXt2YXIgZG49bXQuX2xvY2FsZS5l''@;'; put 'put ''cmFzUGFyc2UoQ2UsSXQsbXQuX3N0cmljdCk7ZG4/WShtdCkuZXJhPWRuOlkobXQpLmludmFsaWRFcmE9Q2V9KSxSbigieSIsY2kpLFJuKCJ5eSIsY2kpLFJuKCJ5eXkiLGNpKSxSbigieXl5eSIsY2kpLFJuKCJ5byIsZnVuY3Rpb24gSDMoQ2UsS2Upe3JldHVybiBLZS5fZXJhWWVhck9yZGlu''@;'; put 'put ''YWxSZWdleHx8Y2l9KSxodChbInkiLCJ5eSIsInl5eSIsInl5eXkiXSx6dCksaHQoWyJ5byJdLGZ1bmN0aW9uKENlLEtlLG10LEl0KXt2YXIgZG47bXQuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCYmKGRuPUNlLm1hdGNoKG10Ll9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpKSxL''@;'; put 'put ''ZVt6dF09bXQuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlP210Ll9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShDZSxkbik6cGFyc2VJbnQoQ2UsMTApfSksc2UoMCxbImdnIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2Vla1llYXIoKSUxMDB9KSxzZSgwLFsiR0ciLDJdLDAs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpJTEwMH0pLGNkKCJnZ2dnIiwid2Vla1llYXIiKSxjZCgiZ2dnZ2ciLCJ3ZWVrWWVhciIpLGNkKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxjZCgiR0dHR0ciLCJpc29XZWVrWWVhciIpLFJuKCJHIixRdCksUm4oImciLFF0KSxSbigi''@;'; put 'put ''R0ciLHR0LE10KSxSbigiZ2ciLHR0LE10KSxSbigiR0dHRyIsUnQsaXQpLFJuKCJnZ2dnIixSdCxpdCksUm4oIkdHR0dHIixQdCwkZSksUm4oImdnZ2dnIixQdCwkZSkseHQoWyJnZ2dnIiwiZ2dnZ2ciLCJHR0dHIiwiR0dHR0ciXSxmdW5jdGlvbihDZSxLZSxtdCxJdCl7S2VbSXQuc3Vic3Ry''@;'; put 'put ''KDAsMildPVR0KENlKX0pLHh0KFsiZ2ciLCJHRyJdLGZ1bmN0aW9uKENlLEtlLG10LEl0KXtLZVtJdF09Xy5wYXJzZVR3b0RpZ2l0WWVhcihDZSl9KSxzZSgiUSIsMCwiUW8iLCJxdWFydGVyIiksUm4oIlEiLHl0KSxodCgiUSIsZnVuY3Rpb24oQ2UsS2Upe0tlW2hpXT0zKihUdChDZSktMSl9''@;'; put 'put ''KSxzZSgiRCIsWyJERCIsMl0sIkRvIiwiZGF0ZSIpLFJuKCJEIix0dCxPciksUm4oIkREIix0dCxNdCksUm4oIkRvIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIENlP0tlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHxLZS5fb3JkaW5hbFBhcnNlOktlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNl''@;'; put 'put ''TGVuaWVudH0pLGh0KFsiRCIsIkREIl0sY24pLGh0KCJEbyIsZnVuY3Rpb24oQ2UsS2Upe0tlW2NuXT1UdChDZS5tYXRjaCh0dClbMF0pfSk7dmFyIHEwPWVpKCJEYXRlIiwhMCk7c2UoIkRERCIsWyJEREREIiwzXSwiREREbyIsImRheU9mWWVhciIpLFJuKCJEREQiLHF0KSxSbigiRERERCIs''@;'; put 'put ''RHQpLGh0KFsiREREIiwiRERERCJdLGZ1bmN0aW9uKENlLEtlLG10KXttdC5fZGF5T2ZZZWFyPVR0KENlKX0pLHNlKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxSbigibSIsdHQsV3QpLFJuKCJtbSIsdHQsTXQpLGh0KFsibSIsIm1tIl0sSWkpO3ZhciB3Zj1laSgiTWludXRlcyIsITEpO3Nl''@;'; put 'put ''KCJzIixbInNzIiwyXSwwLCJzZWNvbmQiKSxSbigicyIsdHQsV3QpLFJuKCJzcyIsdHQsTXQpLGh0KFsicyIsInNzIl0sWHQpO3ZhciBpaCxWNixDZj1laSgiU2Vjb25kcyIsITEpO2ZvcihzZSgiUyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwMCl9KSxz''@;'; put 'put ''ZSgwLFsiU1MiLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSksc2UoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxzZSgwLFsiU1NTUyIsNF0sMCxmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1Mi''@;'; put 'put ''LDVdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMTAwKnRoaXMubWlsbGlzZWNvbmQoKX0pLHNlKDAsWyJTU1NTU1MiLDZdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWUzKnRoaXMubWlsbGlzZWNvbmQoKX0pLHNlKDAsWyJTU1NTU1NTIiw3XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxp''@;'; put 'put ''c2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTU1MiLDhdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU1KnRoaXMubWlsbGlzZWNvbmQoKX0pLHNlKDAsWyJTU1NTU1NTU1MiLDldLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU2KnRoaXMubWlsbGlzZWNvbmQoKX0pLFJuKCJTIixxdCx5dCksUm4oIlNTIixx''@;'; put 'put ''dCxNdCksUm4oIlNTUyIscXQsRHQpLGloPSJTU1NTIjtpaC5sZW5ndGg8PTk7aWgrPSJTIilSbihpaCxjaSk7ZnVuY3Rpb24gSGMoQ2UsS2Upe0tlW2VuXT1UdCgxZTMqKCIwLiIrQ2UpKX1mb3IoaWg9IlMiO2loLmxlbmd0aDw9OTtpaCs9IlMiKWh0KGloLEhjKTtWNj1laSgiTWlsbGlzZWNv''@;'; put 'put ''bmRzIiwhMSksc2UoInoiLDAsMCwiem9uZUFiYnIiKSxzZSgienoiLDAsMCwiem9uZU5hbWUiKTt2YXIgemk9bWUucHJvdG90eXBlO2Z1bmN0aW9uIHh2KENlKXtyZXR1cm4gQ2V9emkuYWRkPWs2LHppLmNhbGVuZGFyPWZ1bmN0aW9uIGg1KENlLEtlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYm''@;'; put 'put ''KGFyZ3VtZW50c1swXT9Kcyhhcmd1bWVudHNbMF0pPyhDZT1hcmd1bWVudHNbMF0sS2U9dm9pZCAwKTpmdW5jdGlvbiBtNChDZSl7dmFyIGRuLEtlPXcoQ2UpJiYhRihDZSksbXQ9ITEsSXQ9WyJzYW1lRGF5IiwibmV4dERheSIsImxhc3REYXkiLCJuZXh0V2VlayIsImxhc3RXZWVrIiwic2Ft''@;'; put 'put ''ZUVsc2UiXTtmb3IoZG49MDtkbjxJdC5sZW5ndGg7ZG4rPTEpbXQ9bXR8fFAoQ2UsSXRbZG5dKTtyZXR1cm4gS2UmJm10fShhcmd1bWVudHNbMF0pJiYoS2U9YXJndW1lbnRzWzBdLENlPXZvaWQgMCk6KENlPXZvaWQgMCxLZT12b2lkIDApKTt2YXIgbXQ9Q2V8fHNsKCksSXQ9VDYobXQsdGhp''@;'; put 'put ''cykuc3RhcnRPZigiZGF5IiksZG49Xy5jYWxlbmRhckZvcm1hdCh0aGlzLEl0KXx8InNhbWVFbHNlIixxbj1LZSYmKHAoS2VbZG5dKT9LZVtkbl0uY2FsbCh0aGlzLG10KTpLZVtkbl0pO3JldHVybiB0aGlzLmZvcm1hdChxbnx8dGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZG4sdGhpcyxz''@;'; put 'put ''bChtdCkpKX0semkuY2xvbmU9ZnVuY3Rpb24gdmYoKXtyZXR1cm4gbmV3IG1lKHRoaXMpfSx6aS5kaWZmPWZ1bmN0aW9uIE1jKENlLEtlLG10KXt2YXIgSXQsZG4scW47aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47aWYoIShJdD1UNihDZSx0aGlzKSkuaXNWYWxpZCgpKXJldHVybiBO''@;'; put 'put ''YU47c3dpdGNoKGRuPTZlNCooSXQudXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSksS2U9X3QoS2UpKXtjYXNlInllYXIiOnFuPVAzKHRoaXMsSXQpLzEyO2JyZWFrO2Nhc2UibW9udGgiOnFuPVAzKHRoaXMsSXQpO2JyZWFrO2Nhc2UicXVhcnRlciI6cW49UDModGhpcyxJdCkvMzticmVh''@;'; put 'put ''aztjYXNlInNlY29uZCI6cW49KHRoaXMtSXQpLzFlMzticmVhaztjYXNlIm1pbnV0ZSI6cW49KHRoaXMtSXQpLzZlNDticmVhaztjYXNlImhvdXIiOnFuPSh0aGlzLUl0KS8zNmU1O2JyZWFrO2Nhc2UiZGF5Ijpxbj0odGhpcy1JdC1kbikvODY0ZTU7YnJlYWs7Y2FzZSJ3ZWVrIjpxbj0odGhp''@;'; put 'put ''cy1JdC1kbikvNjA0OGU1O2JyZWFrO2RlZmF1bHQ6cW49dGhpcy1JdH1yZXR1cm4gbXQ/cW46V2UocW4pfSx6aS5lbmRPZj1mdW5jdGlvbiBuMihDZSl7dmFyIEtlLG10O2lmKHZvaWQgMD09PShDZT1fdChDZSkpfHwibWlsbGlzZWNvbmQiPT09Q2V8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4g''@;'; put 'put ''dGhpcztzd2l0Y2gobXQ9dGhpcy5faXNVVEM/eGM6Vm8sQ2Upe2Nhc2UieWVhciI6S2U9bXQodGhpcy55ZWFyKCkrMSwwLDEpLTE7YnJlYWs7Y2FzZSJxdWFydGVyIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMrMywxKS0xO2JyZWFrO2Nhc2UibW9udGgi''@;'; put 'put ''OktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSsxLDEpLTE7YnJlYWs7Y2FzZSJ3ZWVrIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkrNyktMTticmVhaztjYXNlImlzb1dlZWsiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9u''@;'; put 'put ''dGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkrNyktMTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlImhvdXIiOktlPXRoaXMuX2QudmFsdWVPZigpLEtlKz15NC1s''@;'; put 'put ''bChLZSsodGhpcy5faXNVVEM/MDp0aGlzLnV0Y09mZnNldCgpKmtpKSx5NCktMTticmVhaztjYXNlIm1pbnV0ZSI6S2U9dGhpcy5fZC52YWx1ZU9mKCksS2UrPWtpLWxsKEtlLGtpKS0xO2JyZWFrO2Nhc2Uic2Vjb25kIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZSs9MWUzLWxsKEtlLDFlMykt''@;'; put 'put ''MX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKEtlKSxfLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSx6aS5mb3JtYXQ9ZnVuY3Rpb24gZ3YoQ2Upe0NlfHwoQ2U9dGhpcy5pc1V0YygpP18uZGVmYXVsdEZvcm1hdFV0YzpfLmRlZmF1bHRGb3JtYXQpO3ZhciBLZT1KZSh0aGlzLENlKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChLZSl9LHppLmZyb209ZnVuY3Rpb24gTncoQ2UsS2Upe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF9lKENlKSYmQ2UuaXNWYWxpZCgpfHxzbChDZSkuaXNWYWxpZCgpKT9KbCh7dG86dGhpcyxmcm9tOkNlfSkubG9jYWxlKHRoaXMubG9j''@;'; put 'put ''YWxlKCkpLmh1bWFuaXplKCFLZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0semkuZnJvbU5vdz1mdW5jdGlvbiBtdihDZSl7cmV0dXJuIHRoaXMuZnJvbShzbCgpLENlKX0semkudG89ZnVuY3Rpb24gVncoQ2UsS2Upe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF9lKENlKSYm''@;'; put 'put ''Q2UuaXNWYWxpZCgpfHxzbChDZSkuaXNWYWxpZCgpKT9KbCh7ZnJvbTp0aGlzLHRvOkNlfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFLZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0semkudG9Ob3c9ZnVuY3Rpb24gQncoQ2Upe3JldHVybiB0aGlzLnRvKHNs''@;'; put 'put ''KCksQ2UpfSx6aS5nZXQ9ZnVuY3Rpb24gTmkoQ2Upe3JldHVybiBwKHRoaXNbQ2U9X3QoQ2UpXSk/dGhpc1tDZV0oKTp0aGlzfSx6aS5pbnZhbGlkQXQ9ZnVuY3Rpb24gcmgoKXtyZXR1cm4gWSh0aGlzKS5vdmVyZmxvd30semkuaXNBZnRlcj1mdW5jdGlvbiBENihDZSxLZSl7dmFyIG10PV9l''@;'; put 'put ''KENlKT9DZTpzbChDZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFtdC5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShLZT1fdChLZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPm10LnZhbHVlT2YoKTptdC52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0YXJ0T2YoS2Up''@;'; put 'put ''LnZhbHVlT2YoKSl9LHppLmlzQmVmb3JlPWZ1bmN0aW9uIGh2KENlLEtlKXt2YXIgbXQ9X2UoQ2UpP0NlOnNsKENlKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IW10LmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KEtlPV90KEtlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9m''@;'; put 'put ''KCk8bXQudmFsdWVPZigpOnRoaXMuY2xvbmUoKS5lbmRPZihLZSkudmFsdWVPZigpPG10LnZhbHVlT2YoKSl9LHppLmlzQmV0d2Vlbj1mdW5jdGlvbiBJNihDZSxLZSxtdCxJdCl7dmFyIGRuPV9lKENlKT9DZTpzbChDZSkscW49X2UoS2UpP0tlOnNsKEtlKTtyZXR1cm4hISh0aGlzLmlzVmFs''@;'; put 'put ''aWQoKSYmZG4uaXNWYWxpZCgpJiZxbi5pc1ZhbGlkKCkpJiYoIigiPT09KEl0PUl0fHwiKCkiKVswXT90aGlzLmlzQWZ0ZXIoZG4sbXQpOiF0aGlzLmlzQmVmb3JlKGRuLG10KSkmJigiKSI9PT1JdFsxXT90aGlzLmlzQmVmb3JlKHFuLG10KTohdGhpcy5pc0FmdGVyKHFuLG10KSl9LHppLmlz''@;'; put 'put ''U2FtZT1mdW5jdGlvbiB2NChDZSxLZSl7dmFyIEl0LG10PV9lKENlKT9DZTpzbChDZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFtdC5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShLZT1fdChLZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPT09bXQudmFsdWVPZigp''@;'; put 'put ''OihJdD1tdC52YWx1ZU9mKCksdGhpcy5jbG9uZSgpLnN0YXJ0T2YoS2UpLnZhbHVlT2YoKTw9SXQmJkl0PD10aGlzLmNsb25lKCkuZW5kT2YoS2UpLnZhbHVlT2YoKSkpfSx6aS5pc1NhbWVPckFmdGVyPWZ1bmN0aW9uIHIwKENlLEtlKXtyZXR1cm4gdGhpcy5pc1NhbWUoQ2UsS2UpfHx0aGlz''@;'; put 'put ''LmlzQWZ0ZXIoQ2UsS2UpfSx6aS5pc1NhbWVPckJlZm9yZT1mdW5jdGlvbiBIdyhDZSxLZSl7cmV0dXJuIHRoaXMuaXNTYW1lKENlLEtlKXx8dGhpcy5pc0JlZm9yZShDZSxLZSl9LHppLmlzVmFsaWQ9ZnVuY3Rpb24geWYoKXtyZXR1cm4gZWUodGhpcyl9LHppLmxhbmc9VnIsemkubG9jYWxl''@;'; put 'put ''PUthLHppLmxvY2FsZURhdGE9YmYsemkubWF4PUx3LHppLm1pbj1JMyx6aS5wYXJzaW5nRmxhZ3M9ZnVuY3Rpb24gencoKXtyZXR1cm4gSyh7fSxZKHRoaXMpKX0semkuc2V0PWZ1bmN0aW9uIERhKENlLEtlKXtpZigib2JqZWN0Ij09dHlwZW9mIENlKXt2YXIgSXQsbXQ9ZnVuY3Rpb24gdW4o''@;'; put 'put ''Q2Upe3ZhciBtdCxLZT1bXTtmb3IobXQgaW4gQ2UpUChDZSxtdCkmJktlLnB1c2goe3VuaXQ6bXQscHJpb3JpdHk6UWVbbXRdfSk7cmV0dXJuIEtlLnNvcnQoZnVuY3Rpb24oSXQsZG4pe3JldHVybiBJdC5wcmlvcml0eS1kbi5wcmlvcml0eX0pLEtlfShDZT1udChDZSkpLGRuPW10Lmxlbmd0''@;'; put 'put ''aDtmb3IoSXQ9MDtJdDxkbjtJdCsrKXRoaXNbbXRbSXRdLnVuaXRdKENlW210W0l0XS51bml0XSl9ZWxzZSBpZihwKHRoaXNbQ2U9X3QoQ2UpXSkpcmV0dXJuIHRoaXNbQ2VdKEtlKTtyZXR1cm4gdGhpc30semkuc3RhcnRPZj1mdW5jdGlvbiBldShDZSl7dmFyIEtlLG10O2lmKHZvaWQgMD09''@;'; put 'put ''PShDZT1fdChDZSkpfHwibWlsbGlzZWNvbmQiPT09Q2V8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcztzd2l0Y2gobXQ9dGhpcy5faXNVVEM/eGM6Vm8sQ2Upe2Nhc2UieWVhciI6S2U9bXQodGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOktlPW10KHRoaXMueWVhcigp''@;'; put 'put ''LHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMywxKTticmVhaztjYXNlIm1vbnRoIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksMSk7YnJlYWs7Y2FzZSJ3ZWVrIjpLZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFr''@;'; put 'put ''O2Nhc2UiaXNvV2VlayI6S2U9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSk7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6S2U9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKTticmVhaztjYXNlImhv''@;'; put 'put ''dXIiOktlPXRoaXMuX2QudmFsdWVPZigpLEtlLT1sbChLZSsodGhpcy5faXNVVEM/MDp0aGlzLnV0Y09mZnNldCgpKmtpKSx5NCk7YnJlYWs7Y2FzZSJtaW51dGUiOktlPXRoaXMuX2QudmFsdWVPZigpLEtlLT1sbChLZSxraSk7YnJlYWs7Y2FzZSJzZWNvbmQiOktlPXRoaXMuX2QudmFsdWVP''@;'; put 'put ''ZigpLEtlLT1sbChLZSwxZTMpfXJldHVybiB0aGlzLl9kLnNldFRpbWUoS2UpLF8udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LHppLnN1YnRyYWN0PXU1LHppLnRvQXJyYXk9ZnVuY3Rpb24gcDUoKXt2YXIgQ2U9dGhpcztyZXR1cm5bQ2UueWVhcigpLENlLm1vbnRoKCksQ2UuZGF0ZSgp''@;'; put 'put ''LENlLmhvdXIoKSxDZS5taW51dGUoKSxDZS5zZWNvbmQoKSxDZS5taWxsaXNlY29uZCgpXX0semkudG9PYmplY3Q9ZnVuY3Rpb24gdnYoKXt2YXIgQ2U9dGhpcztyZXR1cm57eWVhcnM6Q2UueWVhcigpLG1vbnRoczpDZS5tb250aCgpLGRhdGU6Q2UuZGF0ZSgpLGhvdXJzOkNlLmhvdXJzKCks''@;'; put 'put ''bWludXRlczpDZS5taW51dGVzKCksc2Vjb25kczpDZS5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOkNlLm1pbGxpc2Vjb25kcygpfX0semkudG9EYXRlPWZ1bmN0aW9uIFIwKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0semkudG9JU09TdHJpbmc9ZnVuY3Rpb24gZnYoQ2Upe2lm''@;'; put 'put ''KCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2YXIgS2U9ITAhPT1DZSxtdD1LZT90aGlzLmNsb25lKCkudXRjKCk6dGhpcztyZXR1cm4gbXQueWVhcigpPDB8fG10LnllYXIoKT45OTk5P0plKG10LEtlPyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERb''@;'; put 'put ''VF1ISDptbTpzcy5TU1NaIik6cChEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyk/S2U/dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpOm5ldyBEYXRlKHRoaXMudmFsdWVPZigpKzYwKnRoaXMudXRjT2Zmc2V0KCkqMWUzKS50b0lTT1N0cmluZygpLnJlcGxhY2UoIloiLEplKG10LCJaIikp''@;'; put 'put ''OkplKG10LEtlPyJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX0semkuaW5zcGVjdD1mdW5jdGlvbiBwdigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgbXQs''@;'; put 'put ''SXQsQ2U9Im1vbWVudCIsS2U9IiI7cmV0dXJuIHRoaXMuaXNMb2NhbCgpfHwoQ2U9MD09PXRoaXMudXRjT2Zmc2V0KCk/Im1vbWVudC51dGMiOiJtb21lbnQucGFyc2Vab25lIixLZT0iWiIpLG10PSJbIitDZSsnKCJdJyxJdD0wPD10aGlzLnllYXIoKSYmdGhpcy55ZWFyKCk8PTk5OTk/IllZ''@;'; put 'put ''WVkiOiJZWVlZWVkiLHRoaXMuZm9ybWF0KG10K0l0KyItTU0tRERbVF1ISDptbTpzcy5TU1MiK0tlKydbIildJyl9LHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wuZm9yJiYoemlbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4iTW9tZW50PCIrdGhpcy5mb3JtYXQoKSsiPiJ9KSx6aS50b0pTT049ZnVuY3Rpb24gancoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LHppLnRvU3RyaW5nPWZ1bmN0aW9uIGI0KCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9y''@;'; put 'put ''bWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfSx6aS51bml4PWZ1bmN0aW9uIFI2KCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0semkudmFsdWVPZj1mdW5jdGlvbiBQdSgpe3JldHVybiB0aGlzLl9kLnZhbHVlT2YoKS02ZTQqKHRoaXMuX29m''@;'; put 'put ''ZnNldHx8MCl9LHppLmNyZWF0aW9uRGF0YT1mdW5jdGlvbiBidigpe3JldHVybntpbnB1dDp0aGlzLl9pLGZvcm1hdDp0aGlzLl9mLGxvY2FsZTp0aGlzLl9sb2NhbGUsaXNVVEM6dGhpcy5faXNVVEMsc3RyaWN0OnRoaXMuX3N0cmljdH19LHppLmVyYU5hbWU9ZnVuY3Rpb24gVXcoKXt2YXIg''@;'; put 'put ''Q2UsS2UsbXQsSXQ9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihDZT0wLEtlPUl0Lmxlbmd0aDtDZTxLZTsrK0NlKWlmKG10PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksSXRbQ2VdLnNpbmNlPD1tdCYmbXQ8PUl0W0NlXS51bnRpbHx8SXRbQ2VdLnVudGlsPD1t''@;'; put 'put ''dCYmbXQ8PUl0W0NlXS5zaW5jZSlyZXR1cm4gSXRbQ2VdLm5hbWU7cmV0dXJuIiJ9LHppLmVyYU5hcnJvdz1mdW5jdGlvbiBPNigpe3ZhciBDZSxLZSxtdCxJdD10aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKENlPTAsS2U9SXQubGVuZ3RoO0NlPEtlOysrQ2UpaWYobXQ9dGhpcy5jbG9u''@;'; put 'put ''ZSgpLnN0YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxJdFtDZV0uc2luY2U8PW10JiZtdDw9SXRbQ2VdLnVudGlsfHxJdFtDZV0udW50aWw8PW10JiZtdDw9SXRbQ2VdLnNpbmNlKXJldHVybiBJdFtDZV0ubmFycm93O3JldHVybiIifSx6aS5lcmFBYmJyPWZ1bmN0aW9uIHl2KCl7dmFyIENlLEtl''@;'; put 'put ''LG10LEl0PXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoQ2U9MCxLZT1JdC5sZW5ndGg7Q2U8S2U7KytDZSlpZihtdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLEl0W0NlXS5zaW5jZTw9bXQmJm10PD1JdFtDZV0udW50aWx8fEl0W0NlXS51bnRpbDw9bXQmJm10''@;'; put 'put ''PD1JdFtDZV0uc2luY2UpcmV0dXJuIEl0W0NlXS5hYmJyO3JldHVybiIifSx6aS5lcmFZZWFyPWZ1bmN0aW9uIF92KCl7dmFyIENlLEtlLG10LEl0LGRuPXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoQ2U9MCxLZT1kbi5sZW5ndGg7Q2U8S2U7KytDZSlpZihtdD1kbltDZV0uc2luY2U8''@;'; put 'put ''PWRuW0NlXS51bnRpbD8xOi0xLEl0PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksZG5bQ2VdLnNpbmNlPD1JdCYmSXQ8PWRuW0NlXS51bnRpbHx8ZG5bQ2VdLnVudGlsPD1JdCYmSXQ8PWRuW0NlXS5zaW5jZSlyZXR1cm4odGhpcy55ZWFyKCktXyhkbltDZV0uc2luY2Up''@;'; put 'put ''LnllYXIoKSkqbXQrZG5bQ2VdLm9mZnNldDtyZXR1cm4gdGhpcy55ZWFyKCl9LHppLnllYXI9V24semkuaXNMZWFwWWVhcj1mdW5jdGlvbiAkaSgpe3JldHVybiBybih0aGlzLnllYXIoKSl9LHppLndlZWtZZWFyPWZ1bmN0aW9uIGc1KENlKXtyZXR1cm4gU3YuY2FsbCh0aGlzLENlLHRoaXMu''@;'; put 'put ''d2VlaygpLHRoaXMud2Vla2RheSgpK3RoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0semkuaXNvV2Vla1llYXI9ZnVuY3Rpb24gd3YoQ2Upe3JldHVybiBTdi5jYWxsKHRoaXMsQ2UsdGhp''@;'; put 'put ''cy5pc29XZWVrKCksdGhpcy5pc29XZWVrZGF5KCksMSw0KX0semkucXVhcnRlcj16aS5xdWFydGVycz1mdW5jdGlvbiBtNShDZSl7cmV0dXJuIG51bGw9PUNlP01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgoMyooQ2UtMSkrdGhpcy5tb250aCgpJTMpfSx6aS5tb250''@;'; put 'put ''aD1MYyx6aS5kYXlzSW5Nb250aD1mdW5jdGlvbiBEMCgpe3JldHVybiBwYSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkpfSx6aS53ZWVrPXppLndlZWtzPWZ1bmN0aW9uIFlpKENlKXt2YXIgS2U9dGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtyZXR1cm4gbnVsbD09Q2U/S2U6dGhpcy5h''@;'; put 'put ''ZGQoNyooQ2UtS2UpLCJkIil9LHppLmlzb1dlZWs9emkuaXNvV2Vla3M9ZnVuY3Rpb24geWwoQ2Upe3ZhciBLZT1MdSh0aGlzLDEsNCkud2VlaztyZXR1cm4gbnVsbD09Q2U/S2U6dGhpcy5hZGQoNyooQ2UtS2UpLCJkIil9LHppLndlZWtzSW5ZZWFyPWZ1bmN0aW9uIE4zKCl7dmFyIENlPXRo''@;'; put 'put ''aXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBQcih0aGlzLnllYXIoKSxDZS5kb3csQ2UuZG95KX0semkud2Vla3NJbldlZWtZZWFyPWZ1bmN0aW9uIFd3KCl7dmFyIENlPXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBQcih0aGlzLndlZWtZZWFyKCksQ2UuZG93LENlLmRveSl9''@;'; put 'put ''LHppLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9uIE42KCl7cmV0dXJuIFByKHRoaXMueWVhcigpLDEsNCl9LHppLmlzb1dlZWtzSW5JU09XZWVrWWVhcj1mdW5jdGlvbiBDdigpe3JldHVybiBQcih0aGlzLmlzb1dlZWtZZWFyKCksMSw0KX0semkuZGF0ZT1xMCx6aS5kYXk9emkuZGF5cz1mdW5j''@;'; put 'put ''dGlvbiBOYShDZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1DZT90aGlzOk5hTjt2YXIgS2U9UXIodGhpcywiRGF5Iik7cmV0dXJuIG51bGwhPUNlPyhDZT1mdW5jdGlvbiBRYyhDZSxLZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBDZT9DZTppc05hTihDZSk/Im51bWJlciI9''@;'; put 'put ''PXR5cGVvZihDZT1LZS53ZWVrZGF5c1BhcnNlKENlKSk/Q2U6bnVsbDpwYXJzZUludChDZSwxMCl9KENlLHRoaXMubG9jYWxlRGF0YSgpKSx0aGlzLmFkZChDZS1LZSwiZCIpKTpLZX0semkud2Vla2RheT1mdW5jdGlvbiBEMyhDZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1D''@;'; put 'put ''ZT90aGlzOk5hTjt2YXIgS2U9KHRoaXMuZGF5KCkrNy10aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpJTc7cmV0dXJuIG51bGw9PUNlP0tlOnRoaXMuYWRkKENlLUtlLCJkIil9LHppLmlzb1dlZWtkYXk9ZnVuY3Rpb24gJGgoQ2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9''@;'; put 'put ''Q2U/dGhpczpOYU47aWYobnVsbCE9Q2Upe3ZhciBLZT1mdW5jdGlvbiBuNShDZSxLZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBDZT9LZS53ZWVrZGF5c1BhcnNlKENlKSU3fHw3OmlzTmFOKENlKT9udWxsOkNlfShDZSx0aGlzLmxvY2FsZURhdGEoKSk7cmV0dXJuIHRoaXMuZGF5KHRoaXMu''@;'; put 'put ''ZGF5KCklNz9LZTpLZS03KX1yZXR1cm4gdGhpcy5kYXkoKXx8N30semkuZGF5T2ZZZWFyPWZ1bmN0aW9uIE12KENlKXt2YXIgS2U9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLXRoaXMuY2xvbmUoKS5zdGFydE9mKCJ5ZWFyIikpLzg2NGU1KSsxO3JldHVybiBudWxs''@;'; put 'put ''PT1DZT9LZTp0aGlzLmFkZChDZS1LZSwiZCIpfSx6aS5ob3VyPXppLmhvdXJzPVZzLHppLm1pbnV0ZT16aS5taW51dGVzPXdmLHppLnNlY29uZD16aS5zZWNvbmRzPUNmLHppLm1pbGxpc2Vjb25kPXppLm1pbGxpc2Vjb25kcz1WNix6aS51dGNPZmZzZXQ9ZnVuY3Rpb24gZ2YoQ2UsS2UsbXQp''@;'; put 'put ''e3ZhciBkbixJdD10aGlzLl9vZmZzZXR8fDA7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1DZT90aGlzOk5hTjtpZihudWxsIT1DZSl7aWYoInN0cmluZyI9PXR5cGVvZiBDZSl7aWYobnVsbD09PShDZT1sZChSaSxDZSkpKXJldHVybiB0aGlzfWVsc2UgTWF0aC5hYnMoQ2UpPDE2''@;'; put 'put ''JiYhbXQmJihDZSo9NjApO3JldHVybiF0aGlzLl9pc1VUQyYmS2UmJihkbj1tdSh0aGlzKSksdGhpcy5fb2Zmc2V0PUNlLHRoaXMuX2lzVVRDPSEwLG51bGwhPWRuJiZ0aGlzLmFkZChkbiwibSIpLEl0IT09Q2UmJighS2V8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/TDModGhpcyxKbChDZS1J''@;'; put 'put ''dCwibSIpLDEsITEpOnRoaXMuX2NoYW5nZUluUHJvZ3Jlc3N8fCh0aGlzLl9jaGFuZ2VJblByb2dyZXNzPSEwLF8udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9bnVsbCkpLHRoaXN9cmV0dXJuIHRoaXMuX2lzVVRDP0l0Om11KHRoaXMpfSx6aS51dGM9ZnVu''@;'; put 'put ''Y3Rpb24gUjMoQ2Upe3JldHVybiB0aGlzLnV0Y09mZnNldCgwLENlKX0semkubG9jYWw9ZnVuY3Rpb24gUGwoQ2Upe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsQ2UpLHRoaXMuX2lzVVRDPSExLENlJiZ0aGlzLnN1YnRyYWN0KG11KHRoaXMpLCJtIikpLHRoaXN9LHpp''@;'; put 'put ''LnBhcnNlWm9uZT1mdW5jdGlvbiBPdSgpe2lmKG51bGwhPXRoaXMuX3R6bSl0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sITEsITApO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9pKXt2YXIgQ2U9bGQoc24sdGhpcy5faSk7bnVsbCE9Q2U/dGhpcy51dGNPZmZzZXQoQ2UpOnRoaXMu''@;'; put 'put ''dXRjT2Zmc2V0KDAsITApfXJldHVybiB0aGlzfSx6aS5oYXNBbGlnbmVkSG91ck9mZnNldD1mdW5jdGlvbiBRaChDZSl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKENlPUNlP3NsKENlKS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLUNlKSU2MD09MCl9LHppLmlzRFNUPWZ1bmN0''@;'; put 'put ''aW9uIG1mKCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpfHx0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKX0semkuaXNMb2NhbD1mdW5jdGlvbiBkdigpe3JldHVybiEhdGhpcy5pc1ZhbGlk''@;'; put 'put ''KCkmJiF0aGlzLl9pc1VUQ30semkuaXNVdGNPZmZzZXQ9ZnVuY3Rpb24gUHcoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQ30semkuaXNVdGM9XzAsemkuaXNVVEM9XzAsemkuem9uZUFiYnI9ZnVuY3Rpb24gQjYoKXtyZXR1cm4gdGhpcy5faXNVVEM/IlVUQyI6IiJ9LHpp''@;'; put 'put ''LnpvbmVOYW1lPWZ1bmN0aW9uIGo2KCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSI6IiJ9LHppLmRhdGVzPVNlKCJkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLiIscTApLHppLm1vbnRocz1TZSgibW9udGhzIGFj''@;'; put 'put ''Y2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkIixMYyksemkueWVhcnM9U2UoInllYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQiLFduKSx6aS56b25lPVNlKCJtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51''@;'; put 'put ''dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLyIsZnVuY3Rpb24gbjAoQ2UsS2Upe3JldHVybiBudWxsIT1DZT8oInN0cmluZyIhPXR5cGVvZiBDZSYmKENlPS1DZSksdGhpcy51dGNPZmZzZXQoQ2UsS2UpLHRoaXMpOi10aGlzLnV0''@;'; put 'put ''Y09mZnNldCgpfSksemkuaXNEU1RTaGlmdGVkPVNlKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIixmdW5jdGlvbiBPdygpe2lmKCFPKHRoaXMuX2lz''@;'; put 'put ''RFNUU2hpZnRlZCkpcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDt2YXIgS2UsQ2U9e307cmV0dXJuIGxlKENlLHRoaXMpLChDZT1sdihDZSkpLl9hPyhLZT1DZS5faXNVVEM/VShDZS5fYSk6c2woQ2UuX2EpLHRoaXMuX2lzRFNUU2hpZnRlZD10aGlzLmlzVmFsaWQoKSYmZnVuY3Rpb24gYzUo''@;'; put 'put ''Q2UsS2UsbXQpe3ZhciBpaSxJdD1NYXRoLm1pbihDZS5sZW5ndGgsS2UubGVuZ3RoKSxkbj1NYXRoLmFicyhDZS5sZW5ndGgtS2UubGVuZ3RoKSxxbj0wO2ZvcihpaT0wO2lpPEl0O2lpKyspKG10JiZDZVtpaV0hPT1LZVtpaV18fCFtdCYmVHQoQ2VbaWldKSE9PVR0KEtlW2lpXSkpJiZxbisr''@;'; put 'put ''O3JldHVybiBxbitkbn0oQ2UuX2EsS2UudG9BcnJheSgpKT4wKTp0aGlzLl9pc0RTVFNoaWZ0ZWQ9ITEsdGhpcy5faXNEU1RTaGlmdGVkfSk7dmFyIHVvPUMucHJvdG90eXBlO2Z1bmN0aW9uIHR1KENlLEtlLG10LEl0KXt2YXIgZG49dGEoKSxxbj1VKCkuc2V0KEl0LEtlKTtyZXR1cm4gZG5b''@;'; put 'put ''bXRdKHFuLENlKX1mdW5jdGlvbiBFYyhDZSxLZSxtdCl7aWYoeihDZSkmJihLZT1DZSxDZT12b2lkIDApLENlPUNlfHwiIixudWxsIT1LZSlyZXR1cm4gdHUoQ2UsS2UsbXQsIm1vbnRoIik7dmFyIEl0LGRuPVtdO2ZvcihJdD0wO0l0PDEyO0l0KyspZG5bSXRdPXR1KENlLEl0LG10LCJtb250''@;'; put 'put ''aCIpO3JldHVybiBkbn1mdW5jdGlvbiBhMChDZSxLZSxtdCxJdCl7ImJvb2xlYW4iPT10eXBlb2YgQ2U/KHooS2UpJiYobXQ9S2UsS2U9dm9pZCAwKSxLZT1LZXx8IiIpOihtdD1LZT1DZSxDZT0hMSx6KEtlKSYmKG10PUtlLEtlPXZvaWQgMCksS2U9S2V8fCIiKTt2YXIgaWksZG49dGEoKSxx''@;'; put 'put ''bj1DZT9kbi5fd2Vlay5kb3c6MCxJYT1bXTtpZihudWxsIT1tdClyZXR1cm4gdHUoS2UsKG10K3FuKSU3LEl0LCJkYXkiKTtmb3IoaWk9MDtpaTw3O2lpKyspSWFbaWldPXR1KEtlLChpaStxbiklNyxJdCwiZGF5Iik7cmV0dXJuIElhfXVvLmNhbGVuZGFyPWZ1bmN0aW9uIGooQ2UsS2UsbXQp''@;'; put 'put ''e3ZhciBJdD10aGlzLl9jYWxlbmRhcltDZV18fHRoaXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBwKEl0KT9JdC5jYWxsKEtlLG10KTpJdH0sdW8ubG9uZ0RhdGVGb3JtYXQ9ZnVuY3Rpb24gdmUoQ2Upe3ZhciBLZT10aGlzLl9sb25nRGF0ZUZvcm1hdFtDZV0sbXQ9dGhpcy5fbG9uZ0Rh''@;'; put 'put ''dGVGb3JtYXRbQ2UudG9VcHBlckNhc2UoKV07cmV0dXJuIEtlfHwhbXQ/S2U6KHRoaXMuX2xvbmdEYXRlRm9ybWF0W0NlXT1tdC5tYXRjaChtKS5tYXAoZnVuY3Rpb24oSXQpe3JldHVybiJNTU1NIj09PUl0fHwiTU0iPT09SXR8fCJERCI9PT1JdHx8ImRkZGQiPT09SXQ/SXQuc2xpY2UoMSk6''@;'; put 'put ''SXR9KS5qb2luKCIiKSx0aGlzLl9sb25nRGF0ZUZvcm1hdFtDZV0pfSx1by5pbnZhbGlkRGF0ZT1mdW5jdGlvbiB6ZSgpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0sdW8ub3JkaW5hbD1mdW5jdGlvbiBPZShDZSl7cmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgiJWQiLENlKX0sdW8u''@;'; put 'put ''cHJlcGFyc2U9eHYsdW8ucG9zdGZvcm1hdD14dix1by5yZWxhdGl2ZVRpbWU9ZnVuY3Rpb24gVmUoQ2UsS2UsbXQsSXQpe3ZhciBkbj10aGlzLl9yZWxhdGl2ZVRpbWVbbXRdO3JldHVybiBwKGRuKT9kbihDZSxLZSxtdCxJdCk6ZG4ucmVwbGFjZSgvJWQvaSxDZSl9LHVvLnBhc3RGdXR1cmU9''@;'; put 'put ''ZnVuY3Rpb24ga2UoQ2UsS2Upe3ZhciBtdD10aGlzLl9yZWxhdGl2ZVRpbWVbQ2U+MD8iZnV0dXJlIjoicGFzdCJdO3JldHVybiBwKG10KT9tdChLZSk6bXQucmVwbGFjZSgvJXMvaSxLZSl9LHVvLnNldD1mdW5jdGlvbiBiKENlKXt2YXIgS2UsbXQ7Zm9yKG10IGluIENlKVAoQ2UsbXQpJiYo''@;'; put 'put ''cChLZT1DZVttdF0pP3RoaXNbbXRdPUtlOnRoaXNbIl8iK210XT1LZSk7dGhpcy5fY29uZmlnPUNlLHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50PW5ldyBSZWdFeHAoKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlfHx0aGlzLl9vcmRpbmFsUGFyc2Uuc291''@;'; put 'put ''cmNlKSsifCIrL1xkezEsMn0vLnNvdXJjZSl9LHVvLmVyYXM9ZnVuY3Rpb24gXzQoQ2UsS2Upe3ZhciBtdCxJdCxkbixxbj10aGlzLl9lcmFzfHx0YSgiZW4iKS5fZXJhcztmb3IobXQ9MCxJdD1xbi5sZW5ndGg7bXQ8SXQ7KyttdClzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBxblttdF0uc2lu''@;'; put 'put ''Y2UmJihkbj1fKHFuW210XS5zaW5jZSkuc3RhcnRPZigiZGF5IikscW5bbXRdLnNpbmNlPWRuLnZhbHVlT2YoKSksdHlwZW9mIHFuW210XS51bnRpbCl7Y2FzZSJ1bmRlZmluZWQiOnFuW210XS51bnRpbD0xLzA7YnJlYWs7Y2FzZSJzdHJpbmciOmRuPV8ocW5bbXRdLnVudGlsKS5zdGFydE9m''@;'; put 'put ''KCJkYXkiKS52YWx1ZU9mKCkscW5bbXRdLnVudGlsPWRuLnZhbHVlT2YoKX1yZXR1cm4gcW59LHVvLmVyYXNQYXJzZT1mdW5jdGlvbiBXQShDZSxLZSxtdCl7dmFyIEl0LGRuLGlpLElhLFNvLHFuPXRoaXMuZXJhcygpO2ZvcihDZT1DZS50b1VwcGVyQ2FzZSgpLEl0PTAsZG49cW4ubGVuZ3Ro''@;'; put 'put ''O0l0PGRuOysrSXQpaWYoaWk9cW5bSXRdLm5hbWUudG9VcHBlckNhc2UoKSxJYT1xbltJdF0uYWJici50b1VwcGVyQ2FzZSgpLFNvPXFuW0l0XS5uYXJyb3cudG9VcHBlckNhc2UoKSxtdClzd2l0Y2goS2Upe2Nhc2UiTiI6Y2FzZSJOTiI6Y2FzZSJOTk4iOmlmKElhPT09Q2UpcmV0dXJuIHFu''@;'; put 'put ''W0l0XTticmVhaztjYXNlIk5OTk4iOmlmKGlpPT09Q2UpcmV0dXJuIHFuW0l0XTticmVhaztjYXNlIk5OTk5OIjppZihTbz09PUNlKXJldHVybiBxbltJdF19ZWxzZSBpZihbaWksSWEsU29dLmluZGV4T2YoQ2UpPj0wKXJldHVybiBxbltJdF19LHVvLmVyYXNDb252ZXJ0WWVhcj1mdW5jdGlv''@;'; put 'put ''biBMNihDZSxLZSl7dmFyIG10PUNlLnNpbmNlPD1DZS51bnRpbD8xOi0xO3JldHVybiB2b2lkIDA9PT1LZT9fKENlLnNpbmNlKS55ZWFyKCk6XyhDZS5zaW5jZSkueWVhcigpKyhLZS1DZS5vZmZzZXQpKm10fSx1by5lcmFzQWJiclJlZ2V4PWZ1bmN0aW9uIFA2KENlKXtyZXR1cm4gUCh0aGlz''@;'; put 'put ''LCJfZXJhc0FiYnJSZWdleCIpfHxoYy5jYWxsKHRoaXMpLENlP3RoaXMuX2VyYXNBYmJyUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSx1by5lcmFzTmFtZVJlZ2V4PWZ1bmN0aW9uIF9mKENlKXtyZXR1cm4gUCh0aGlzLCJfZXJhc05hbWVSZWdleCIpfHxoYy5jYWxsKHRoaXMpLENlP3RoaXMuX2Vy''@;'; put 'put ''YXNOYW1lUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSx1by5lcmFzTmFycm93UmVnZXg9ZnVuY3Rpb24gRjYoQ2Upe3JldHVybiBQKHRoaXMsIl9lcmFzTmFycm93UmVnZXgiKXx8aGMuY2FsbCh0aGlzKSxDZT90aGlzLl9lcmFzTmFycm93UmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSx1by5tb250aHM9''@;'; put 'put ''ZnVuY3Rpb24gdGkoQ2UsS2Upe3JldHVybiBDZT9CKHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzW0NlLm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHx5YSkudGVzdChLZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVtDZS5tb250aCgpXTpCKHRoaXMuX21v''@;'; put 'put ''bnRocyk/dGhpcy5fbW9udGhzOnRoaXMuX21vbnRocy5zdGFuZGFsb25lfSx1by5tb250aHNTaG9ydD1mdW5jdGlvbiBnbyhDZSxLZSl7cmV0dXJuIENlP0IodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0W0NlLm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W3lhLnRlc3Qo''@;'; put 'put ''S2UpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bQ2UubW9udGgoKV06Qih0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnQ6dGhpcy5fbW9udGhzU2hvcnQuc3RhbmRhbG9uZX0sdW8ubW9udGhzUGFyc2U9ZnVuY3Rpb24gYmwoQ2UsS2UsbXQpe3ZhciBJdCxkbixxbjtpZih0aGlz''@;'; put 'put ''Ll9tb250aHNQYXJzZUV4YWN0KXJldHVybiBOcy5jYWxsKHRoaXMsQ2UsS2UsbXQpO2Zvcih0aGlzLl9tb250aHNQYXJzZXx8KHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdKSxJdD0wO0l0PDEyO0l0Kyspe2lm''@;'; put 'put ''KGRuPVUoWzJlMyxJdF0pLG10JiYhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW0l0XSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtJdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHMoZG4sIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW0l0XT1uZXcg''@;'; put 'put ''UmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KGRuLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIikpLCFtdCYmIXRoaXMuX21vbnRoc1BhcnNlW0l0XSYmKHFuPSJeIit0aGlzLm1vbnRocyhkbiwiIikrInxeIit0aGlzLm1vbnRoc1Nob3J0KGRuLCIiKSx0aGlzLl9tb250aHNQYXJzZVtJ''@;'; put 'put ''dF09bmV3IFJlZ0V4cChxbi5yZXBsYWNlKCIuIiwiIiksImkiKSksbXQmJiJNTU1NIj09PUtlJiZ0aGlzLl9sb25nTW9udGhzUGFyc2VbSXRdLnRlc3QoQ2UpKXJldHVybiBJdDtpZihtdCYmIk1NTSI9PT1LZSYmdGhpcy5fc2hvcnRNb250aHNQYXJzZVtJdF0udGVzdChDZSkpcmV0dXJuIEl0''@;'; put 'put ''O2lmKCFtdCYmdGhpcy5fbW9udGhzUGFyc2VbSXRdLnRlc3QoQ2UpKXJldHVybiBJdH19LHVvLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uIHhhKENlKXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oUCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8dWkuY2FsbCh0aGlzKSxDZT90aGlzLl9tb250''@;'; put 'put ''aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCk6KFAodGhpcywiX21vbnRoc1JlZ2V4Iil8fCh0aGlzLl9tb250aHNSZWdleD1GYSksdGhpcy5fbW9udGhzU3RyaWN0UmVnZXgmJkNlP3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0sdW8ubW9udGhzU2hv''@;'; put 'put ''cnRSZWdleD1mdW5jdGlvbiBpcihDZSl7cmV0dXJuIHRoaXMuX21vbnRoc1BhcnNlRXhhY3Q/KFAodGhpcywiX21vbnRoc1JlZ2V4Iil8fHVpLmNhbGwodGhpcyksQ2U/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KTooUCh0aGlzLCJfbW9udGhz''@;'; put 'put ''U2hvcnRSZWdleCIpfHwodGhpcy5fbW9udGhzU2hvcnRSZWdleD1MYSksdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCYmQ2U/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX0sdW8ud2Vlaz1mdW5jdGlvbiBvZChDZSl7cmV0dXJuIEx1KENl''@;'; put 'put ''LHRoaXMuX3dlZWsuZG93LHRoaXMuX3dlZWsuZG95KS53ZWVrfSx1by5maXJzdERheU9mWWVhcj1mdW5jdGlvbiBDcygpe3JldHVybiB0aGlzLl93ZWVrLmRveX0sdW8uZmlyc3REYXlPZldlZWs9ZnVuY3Rpb24gY2YoKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3d9LHVvLndlZWtkYXlzPWZ1bmN0''@;'; put 'put ''aW9uIGhmKENlLEtlKXt2YXIgbXQ9Qih0aGlzLl93ZWVrZGF5cyk/dGhpcy5fd2Vla2RheXM6dGhpcy5fd2Vla2RheXNbQ2UmJiEwIT09Q2UmJnRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoS2UpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl07cmV0dXJuITA9PT1DZT95MChtdCx0aGlzLl93''@;'; put 'put ''ZWVrLmRvdyk6Q2U/bXRbQ2UuZGF5KCldOm10fSx1by53ZWVrZGF5c01pbj1mdW5jdGlvbiBmZihDZSl7cmV0dXJuITA9PT1DZT95MCh0aGlzLl93ZWVrZGF5c01pbix0aGlzLl93ZWVrLmRvdyk6Q2U/dGhpcy5fd2Vla2RheXNNaW5bQ2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSx1by53''@;'; put 'put ''ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uIGVoKENlKXtyZXR1cm4hMD09PUNlP3kwKHRoaXMuX3dlZWtkYXlzU2hvcnQsdGhpcy5fd2Vlay5kb3cpOkNlP3RoaXMuX3dlZWtkYXlzU2hvcnRbQ2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzU2hvcnR9LHVvLndlZWtkYXlzUGFyc2U9ZnVuY3Rpb24gT2Mo''@;'; put 'put ''Q2UsS2UsbXQpe3ZhciBJdCxkbixxbjtpZih0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpcmV0dXJuIEdoLmNhbGwodGhpcyxDZSxLZSxtdCk7Zm9yKHRoaXMuX3dlZWtkYXlzUGFyc2V8fCh0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hv''@;'; put 'put ''cnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlPVtdKSxJdD0wO0l0PDc7SXQrKyl7aWYoZG49VShbMmUzLDFdKS5kYXkoSXQpLG10JiYhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbSXRdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbSXRdPW5ldyBSZWdFeHAoIl4i''@;'; put 'put ''K3RoaXMud2Vla2RheXMoZG4sIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW0l0XT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hvcnQoZG4sIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fbWluV2Vla2Rh''@;'; put 'put ''eXNQYXJzZVtJdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c01pbihkbiwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtJdF18fChxbj0iXiIrdGhpcy53ZWVrZGF5cyhkbiwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQoZG4sIiIp''@;'; put 'put ''KyJ8XiIrdGhpcy53ZWVrZGF5c01pbihkbiwiIiksdGhpcy5fd2Vla2RheXNQYXJzZVtJdF09bmV3IFJlZ0V4cChxbi5yZXBsYWNlKCIuIiwiIiksImkiKSksbXQmJiJkZGRkIj09PUtlJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtJdF0udGVzdChDZSkpcmV0dXJuIEl0O2lmKG10JiYiZGRk''@;'; put 'put ''Ij09PUtlJiZ0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbSXRdLnRlc3QoQ2UpKXJldHVybiBJdDtpZihtdCYmImRkIj09PUtlJiZ0aGlzLl9taW5XZWVrZGF5c1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXQ7aWYoIW10JiZ0aGlzLl93ZWVrZGF5c1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1''@;'; put 'put ''cm4gSXR9fSx1by53ZWVrZGF5c1JlZ2V4PWZ1bmN0aW9uIEtoKENlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhQKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fGFuLmNhbGwodGhpcyksQ2U/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KToo''@;'; put 'put ''UCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHwodGhpcy5fd2Vla2RheXNSZWdleD1zZCksdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCYmQ2U/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KX0sdW8ud2Vla2RheXNTaG9ydFJlZ2V4PWZ1bmN0aW9uIHFoKENl''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhQKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fGFuLmNhbGwodGhpcyksQ2U/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCk6KFAodGhpcywiX3dlZWtkYXlzU2hvcnRSZWdleCIp''@;'; put 'put ''fHwodGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PWRmKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgmJkNlP3RoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpfSx1by53ZWVrZGF5c01pblJlZ2V4PWZ1bmN0aW9uIEFuKENlKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhQKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fGFuLmNhbGwodGhpcyksQ2U/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KTooUCh0aGlzLCJfd2Vla2RheXNNaW5SZWdleCIpfHwodGhpcy5fd2Vl''@;'; put 'put ''a2RheXNNaW5SZWdleD1rMSksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCYmQ2U/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KX0sdW8uaXNQTT1mdW5jdGlvbiBvbChDZSl7cmV0dXJuInAiPT09KENlKyIiKS50b0xvd2VyQ2FzZSgpLmNo''@;'; put 'put ''YXJBdCgwKX0sdW8ubWVyaWRpZW09ZnVuY3Rpb24gU3MoQ2UsS2UsbXQpe3JldHVybiBDZT4xMT9tdD8icG0iOiJQTSI6bXQ/ImFtIjoiQU0ifSx1cigiZW4iLHtlcmFzOlt7c2luY2U6IjAwMDEtMDEtMDEiLHVudGlsOjEvMCxvZmZzZXQ6MSxuYW1lOiJBbm5vIERvbWluaSIsbmFycm93OiJB''@;'; put 'put ''RCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTItMzEiLHVudGlsOi0xLzAsb2Zmc2V0OjEsbmFtZToiQmVmb3JlIENocmlzdCIsbmFycm93OiJCQyIsYWJicjoiQkMifV0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24oQ2Up''@;'; put 'put ''e3ZhciBLZT1DZSUxMDtyZXR1cm4gQ2UrKDE9PT1UdChDZSUxMDAvMTApPyJ0aCI6MT09PUtlPyJzdCI6Mj09PUtlPyJuZCI6Mz09PUtlPyJyZCI6InRoIil9fSksXy5sYW5nPVNlKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsdXIpLF8u''@;'; put 'put ''bGFuZ0RhdGE9U2UoIm1vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4iLHRhKTt2YXIgTmM9TWF0aC5hYnM7ZnVuY3Rpb24gbnUoQ2UsS2UsbXQsSXQpe3ZhciBkbj1KbChLZSxtdCk7cmV0dXJuIENlLl9taWxsaXNlY29uZHMrPUl0''@;'; put 'put ''KmRuLl9taWxsaXNlY29uZHMsQ2UuX2RheXMrPUl0KmRuLl9kYXlzLENlLl9tb250aHMrPUl0KmRuLl9tb250aHMsQ2UuX2J1YmJsZSgpfWZ1bmN0aW9uIHBjKENlKXtyZXR1cm4gQ2U8MD9NYXRoLmZsb29yKENlKTpNYXRoLmNlaWwoQ2UpfWZ1bmN0aW9uIGJvKENlKXtyZXR1cm4gNDgwMCpD''@;'; put 'put ''ZS8xNDYwOTd9ZnVuY3Rpb24gU2YoQ2Upe3JldHVybiAxNDYwOTcqQ2UvNDgwMH1mdW5jdGlvbiBvMChDZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXMoQ2UpfX12YXIgWmw9bzAoIm1zIiksUzQ9bzAoInMiKSxNZj1vMCgibSIpLHVkPW8wKCJoIiksdzA9bzAoImQiKSxhMj1v''@;'; put 'put ''MCgidyIpLG8yPW8wKCJNIiksdjU9bzAoIlEiKSx4Zj1vMCgieSIpLHdvPVpsO2Z1bmN0aW9uIHZ1KENlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5fZGF0YVtDZV06TmFOfX12YXIgTTQ9dnUoIm1pbGxpc2Vjb25kcyIpLFYzPXZ1KCJzZWNvbmRzIiks''@;'; put 'put ''Z2M9dnUoIm1pbnV0ZXMiKSxiNT12dSgiaG91cnMiKSxGdT12dSgiZGF5cyIpLEh1PXZ1KCJtb250aHMiKSxydT12dSgieWVhcnMiKTt2YXIgSjA9TWF0aC5yb3VuZCxWYz17c3M6NDQsczo0NSxtOjQ1LGg6MjIsZDoyNix3Om51bGwsTToxMX07ZnVuY3Rpb24geDQoQ2UsS2UsbXQsSXQsZG4p''@;'; put 'put ''e3JldHVybiBkbi5yZWxhdGl2ZVRpbWUoS2V8fDEsISFtdCxDZSxJdCl9dmFyIFo2PU1hdGguYWJzO2Z1bmN0aW9uIGwyKENlKXtyZXR1cm4oQ2U+MCktKENlPDApfHwrQ2V9ZnVuY3Rpb24gVzYoKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWRE''@;'; put 'put ''YXRlKCk7dmFyIEl0LGRuLHFuLGlpLFNvLGZzLE51LGRkLENlPVo2KHRoaXMuX21pbGxpc2Vjb25kcykvMWUzLEtlPVo2KHRoaXMuX2RheXMpLG10PVo2KHRoaXMuX21vbnRocyksSWE9dGhpcy5hc1NlY29uZHMoKTtyZXR1cm4gSWE/KEl0PVdlKENlLzYwKSxkbj1XZShJdC82MCksQ2UlPTYw''@;'; put 'put ''LEl0JT02MCxxbj1XZShtdC8xMiksbXQlPTEyLGlpPUNlP0NlLnRvRml4ZWQoMykucmVwbGFjZSgvXC4/MCskLywiIik6IiIsU289SWE8MD8iLSI6IiIsZnM9bDIodGhpcy5fbW9udGhzKSE9PWwyKElhKT8iLSI6IiIsTnU9bDIodGhpcy5fZGF5cykhPT1sMihJYSk/Ii0iOiIiLGRkPWwyKHRo''@;'; put 'put ''aXMuX21pbGxpc2Vjb25kcykhPT1sMihJYSk/Ii0iOiIiLFNvKyJQIisocW4/ZnMrcW4rIlkiOiIiKSsobXQ/ZnMrbXQrIk0iOiIiKSsoS2U/TnUrS2UrIkQiOiIiKSsoZG58fEl0fHxDZT8iVCI6IiIpKyhkbj9kZCtkbisiSCI6IiIpKyhJdD9kZCtJdCsiTSI6IiIpKyhDZT9kZCtpaSsiUyI6''@;'; put 'put ''IiIpKToiUDBEIn12YXIgbXM9cGYucHJvdG90eXBlO3JldHVybiBtcy5pc1ZhbGlkPWZ1bmN0aW9uIHM1KCl7cmV0dXJuIHRoaXMuX2lzVmFsaWR9LG1zLmFicz1mdW5jdGlvbiByYygpe3ZhciBDZT10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9TmModGhpcy5fbWlsbGlz''@;'; put 'put ''ZWNvbmRzKSx0aGlzLl9kYXlzPU5jKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1OYyh0aGlzLl9tb250aHMpLENlLm1pbGxpc2Vjb25kcz1OYyhDZS5taWxsaXNlY29uZHMpLENlLnNlY29uZHM9TmMoQ2Uuc2Vjb25kcyksQ2UubWludXRlcz1OYyhDZS5taW51dGVzKSxDZS5ob3Vycz1OYyhD''@;'; put 'put ''ZS5ob3VycyksQ2UubW9udGhzPU5jKENlLm1vbnRocyksQ2UueWVhcnM9TmMoQ2UueWVhcnMpLHRoaXN9LG1zLmFkZD1mdW5jdGlvbiBYMChDZSxLZSl7cmV0dXJuIG51KHRoaXMsQ2UsS2UsMSl9LG1zLnN1YnRyYWN0PWZ1bmN0aW9uIGNsKENlLEtlKXtyZXR1cm4gbnUodGhpcyxDZSxLZSwt''@;'; put 'put ''MSl9LG1zLmFzPWZ1bmN0aW9uIEM0KENlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgS2UsbXQsSXQ9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9PT0oQ2U9X3QoQ2UpKXx8InF1YXJ0ZXIiPT09Q2V8fCJ5ZWFyIj09PUNlKXN3aXRjaChLZT10aGlzLl9kYXlzK0l0''@;'; put 'put ''Lzg2NGU1LG10PXRoaXMuX21vbnRocytibyhLZSksQ2Upe2Nhc2UibW9udGgiOnJldHVybiBtdDtjYXNlInF1YXJ0ZXIiOnJldHVybiBtdC8zO2Nhc2UieWVhciI6cmV0dXJuIG10LzEyfWVsc2Ugc3dpdGNoKEtlPXRoaXMuX2RheXMrTWF0aC5yb3VuZChTZih0aGlzLl9tb250aHMpKSxDZSl7''@;'; put 'put ''Y2FzZSJ3ZWVrIjpyZXR1cm4gS2UvNytJdC82MDQ4ZTU7Y2FzZSJkYXkiOnJldHVybiBLZStJdC84NjRlNTtjYXNlImhvdXIiOnJldHVybiAyNCpLZStJdC8zNmU1O2Nhc2UibWludXRlIjpyZXR1cm4gMTQ0MCpLZStJdC82ZTQ7Y2FzZSJzZWNvbmQiOnJldHVybiA4NjQwMCpLZStJdC8xZTM7''@;'; put 'put ''Y2FzZSJtaWxsaXNlY29uZCI6cmV0dXJuIE1hdGguZmxvb3IoODY0ZTUqS2UpK0l0O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIitDZSl9fSxtcy5hc01pbGxpc2Vjb25kcz1abCxtcy5hc1NlY29uZHM9UzQsbXMuYXNNaW51dGVzPU1mLG1zLmFzSG91cnM9dWQsbXMu''@;'; put 'put ''YXNEYXlzPXcwLG1zLmFzV2Vla3M9YTIsbXMuYXNNb250aHM9bzIsbXMuYXNRdWFydGVycz12NSxtcy5hc1llYXJzPXhmLG1zLnZhbHVlT2Y9d28sbXMuX2J1YmJsZT1mdW5jdGlvbiBMMSgpe3ZhciBkbixxbixpaSxJYSxTbyxDZT10aGlzLl9taWxsaXNlY29uZHMsS2U9dGhpcy5fZGF5cyxt''@;'; put 'put ''dD10aGlzLl9tb250aHMsSXQ9dGhpcy5fZGF0YTtyZXR1cm4gQ2U+PTAmJktlPj0wJiZtdD49MHx8Q2U8PTAmJktlPD0wJiZtdDw9MHx8KENlKz04NjRlNSpwYyhTZihtdCkrS2UpLEtlPTAsbXQ9MCksSXQubWlsbGlzZWNvbmRzPUNlJTFlMyxkbj1XZShDZS8xZTMpLEl0LnNlY29uZHM9ZG4l''@;'; put 'put ''NjAscW49V2UoZG4vNjApLEl0Lm1pbnV0ZXM9cW4lNjAsaWk9V2UocW4vNjApLEl0LmhvdXJzPWlpJTI0LEtlKz1XZShpaS8yNCksbXQrPVNvPVdlKGJvKEtlKSksS2UtPXBjKFNmKFNvKSksSWE9V2UobXQvMTIpLG10JT0xMixJdC5kYXlzPUtlLEl0Lm1vbnRocz1tdCxJdC55ZWFycz1JYSx0''@;'; put 'put ''aGlzfSxtcy5jbG9uZT1mdW5jdGlvbiB6Nigpe3JldHVybiBKbCh0aGlzKX0sbXMuZ2V0PWZ1bmN0aW9uIHMyKENlKXtyZXR1cm4gQ2U9X3QoQ2UpLHRoaXMuaXNWYWxpZCgpP3RoaXNbQ2UrInMiXSgpOk5hTn0sbXMubWlsbGlzZWNvbmRzPU00LG1zLnNlY29uZHM9VjMsbXMubWludXRlcz1n''@;'; put 'put ''Yyxtcy5ob3Vycz1iNSxtcy5kYXlzPUZ1LG1zLndlZWtzPWZ1bmN0aW9uIEVmKCl7cmV0dXJuIFdlKHRoaXMuZGF5cygpLzcpfSxtcy5tb250aHM9SHUsbXMueWVhcnM9cnUsbXMuaHVtYW5pemU9ZnVuY3Rpb24gRXYoQ2UsS2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2Nh''@;'; put 'put ''bGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgZG4scW4sbXQ9ITEsSXQ9VmM7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBDZSYmKEtlPUNlLENlPSExKSwiYm9vbGVhbiI9PXR5cGVvZiBDZSYmKG10PUNlKSwib2JqZWN0Ij09dHlwZW9mIEtlJiYoSXQ9T2JqZWN0LmFzc2lnbih7fSxWYyxLZSks''@;'; put 'put ''bnVsbCE9S2UucyYmbnVsbD09S2Uuc3MmJihJdC5zcz1LZS5zLTEpKSxxbj1mdW5jdGlvbiAkdyhDZSxLZSxtdCxJdCl7dmFyIGRuPUpsKENlKS5hYnMoKSxxbj1KMChkbi5hcygicyIpKSxpaT1KMChkbi5hcygibSIpKSxJYT1KMChkbi5hcygiaCIpKSxTbz1KMChkbi5hcygiZCIpKSxmcz1K''@;'; put 'put ''MChkbi5hcygiTSIpKSxOdT1KMChkbi5hcygidyIpKSxkZD1KMChkbi5hcygieSIpKSxjMj1xbjw9bXQuc3MmJlsicyIscW5dfHxxbjxtdC5zJiZbInNzIixxbl18fGlpPD0xJiZbIm0iXXx8aWk8bXQubSYmWyJtbSIsaWldfHxJYTw9MSYmWyJoIl18fElhPG10LmgmJlsiaGgiLElhXXx8U288''@;'; put 'put ''PTEmJlsiZCJdfHxTbzxtdC5kJiZbImRkIixTb107cmV0dXJuIG51bGwhPW10LncmJihjMj1jMnx8TnU8PTEmJlsidyJdfHxOdTxtdC53JiZbInd3IixOdV0pLChjMj1jMnx8ZnM8PTEmJlsiTSJdfHxmczxtdC5NJiZbIk1NIixmc118fGRkPD0xJiZbInkiXXx8WyJ5eSIsZGRdKVsyXT1LZSxj''@;'; put 'put ''MlszXT0rQ2U+MCxjMls0XT1JdCx4NC5hcHBseShudWxsLGMyKX0odGhpcywhbXQsSXQsZG49dGhpcy5sb2NhbGVEYXRhKCkpLG10JiYocW49ZG4ucGFzdEZ1dHVyZSgrdGhpcyxxbikpLGRuLnBvc3Rmb3JtYXQocW4pfSxtcy50b0lTT1N0cmluZz1XNixtcy50b1N0cmluZz1XNixtcy50b0pT''@;'; put 'put ''T049VzYsbXMubG9jYWxlPUthLG1zLmxvY2FsZURhdGE9YmYsbXMudG9Jc29TdHJpbmc9U2UoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixXNiksbXMubGFuZz1WcixzZSgiWCIsMCww''@;'; put 'put ''LCJ1bml4Iiksc2UoIngiLDAsMCwidmFsdWVPZiIpLFJuKCJ4IixRdCksUm4oIlgiLC9bKy1dP1xkKyhcLlxkezEsM30pPy8pLGh0KCJYIixmdW5jdGlvbihDZSxLZSxtdCl7bXQuX2Q9bmV3IERhdGUoMWUzKnBhcnNlRmxvYXQoQ2UpKX0pLGh0KCJ4IixmdW5jdGlvbihDZSxLZSxtdCl7bXQu''@;'; put 'put ''X2Q9bmV3IERhdGUoVHQoQ2UpKX0pLF8udmVyc2lvbj0iMi4zMC4xIixmdW5jdGlvbiBnKENlKXtJPUNlfShzbCksXy5mbj16aSxfLm1pbj1mdW5jdGlvbiBEMSgpe3JldHVybiBuaCgiaXNCZWZvcmUiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX0sXy5tYXg9ZnVuY3Rpb24geHIoKXty''@;'; put 'put ''ZXR1cm4gbmgoImlzQWZ0ZXIiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX0sXy5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3c/RGF0ZS5ub3coKTorbmV3IERhdGV9LF8udXRjPVUsXy51bml4PWZ1bmN0aW9uIHIyKENlKXtyZXR1cm4gc2woMWUzKkNlKX0sXy5tb250aHM9ZnVu''@;'; put 'put ''Y3Rpb24gdzQoQ2UsS2Upe3JldHVybiBFYyhDZSxLZSwibW9udGhzIil9LF8uaXNEYXRlPU4sXy5sb2NhbGU9dXIsXy5pbnZhbGlkPUosXy5kdXJhdGlvbj1KbCxfLmlzTW9tZW50PV9lLF8ud2Vla2RheXM9ZnVuY3Rpb24gS2koQ2UsS2UsbXQpe3JldHVybiBhMChDZSxLZSxtdCwid2Vla2Rh''@;'; put 'put ''eXMiKX0sXy5wYXJzZVpvbmU9ZnVuY3Rpb24gR3coKXtyZXR1cm4gc2wuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfSxfLmxvY2FsZURhdGE9dGEsXy5pc0R1cmF0aW9uPWw1LF8ubW9udGhzU2hvcnQ9ZnVuY3Rpb24gVWwoQ2UsS2Upe3JldHVybiBFYyhDZSxLZSwibW9udGhz''@;'; put 'put ''U2hvcnQiKX0sXy53ZWVrZGF5c01pbj1mdW5jdGlvbiBmYyhDZSxLZSxtdCl7cmV0dXJuIGEwKENlLEtlLG10LCJ3ZWVrZGF5c01pbiIpfSxfLmRlZmluZUxvY2FsZT1iaSxfLnVwZGF0ZUxvY2FsZT1mdW5jdGlvbiBGcihDZSxLZSl7aWYobnVsbCE9S2Upe3ZhciBtdCxJdCxkbj1qbDtudWxs''@;'; put 'put ''IT1Ib1tDZV0mJm51bGwhPUhvW0NlXS5wYXJlbnRMb2NhbGU/SG9bQ2VdLnNldCh4KEhvW0NlXS5fY29uZmlnLEtlKSk6KG51bGwhPShJdD1ibihDZSkpJiYoZG49SXQuX2NvbmZpZyksS2U9eChkbixLZSksbnVsbD09SXQmJihLZS5hYmJyPUNlKSwobXQ9bmV3IEMoS2UpKS5wYXJlbnRMb2Nh''@;'; put 'put ''bGU9SG9bQ2VdLEhvW0NlXT1tdCksdXIoQ2UpfWVsc2UgbnVsbCE9SG9bQ2VdJiYobnVsbCE9SG9bQ2VdLnBhcmVudExvY2FsZT8oSG9bQ2VdPUhvW0NlXS5wYXJlbnRMb2NhbGUsQ2U9PT11cigpJiZ1cihDZSkpOm51bGwhPUhvW0NlXSYmZGVsZXRlIEhvW0NlXSk7cmV0dXJuIEhvW0NlXX0s''@;'; put 'put ''Xy5sb2NhbGVzPWZ1bmN0aW9uIG9hKCl7cmV0dXJuIFQoSG8pfSxfLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24gVWEoQ2UsS2UsbXQpe3JldHVybiBhMChDZSxLZSxtdCwid2Vla2RheXNTaG9ydCIpfSxfLm5vcm1hbGl6ZVVuaXRzPV90LF8ucmVsYXRpdmVUaW1lUm91bmRpbmc9ZnVuY3Rpb24g''@;'; put 'put ''S3coQ2Upe3JldHVybiB2b2lkIDA9PT1DZT9KMDoiZnVuY3Rpb24iPT10eXBlb2YgQ2UmJihKMD1DZSwhMCl9LF8ucmVsYXRpdmVUaW1lVGhyZXNob2xkPWZ1bmN0aW9uIFU2KENlLEtlKXtyZXR1cm4gdm9pZCAwIT09VmNbQ2VdJiYodm9pZCAwPT09S2U/VmNbQ2VdOihWY1tDZV09S2UsInMi''@;'; put 'put ''PT09Q2UmJihWYy5zcz1LZS0xKSwhMCkpfSxfLmNhbGVuZGFyRm9ybWF0PWZ1bmN0aW9uIGQ1KENlLEtlKXt2YXIgbXQ9Q2UuZGlmZihLZSwiZGF5cyIsITApO3JldHVybiBtdDwtNj8ic2FtZUVsc2UiOm10PC0xPyJsYXN0V2VlayI6bXQ8MD8ibGFzdERheSI6bXQ8MT8ic2FtZURheSI6bXQ8''@;'; put 'put ''Mj8ibmV4dERheSI6bXQ8Nz8ibmV4dFdlZWsiOiJzYW1lRWxzZSJ9LF8ucHJvdG90eXBlPXppLF8uSFRNTDVfRk1UPXtEQVRFVElNRV9MT0NBTDoiWVlZWS1NTS1ERFRISDptbSIsREFURVRJTUVfTE9DQUxfU0VDT05EUzoiWVlZWS1NTS1ERFRISDptbTpzcyIsREFURVRJTUVfTE9DQUxfTVM6''@;'; put 'put ''IllZWVktTU0tRERUSEg6bW06c3MuU1NTIixEQVRFOiJZWVlZLU1NLUREIixUSU1FOiJISDptbSIsVElNRV9TRUNPTkRTOiJISDptbTpzcyIsVElNRV9NUzoiSEg6bW06c3MuU1NTIixXRUVLOiJHR0dHLVtXXVdXIixNT05USDoiWVlZWS1NTSJ9LF99KCl9LDc4Mzc1OmZ1bmN0aW9uKHVlKXt1''@;'; put 'put ''ZS5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3R5cGVvZiBnbG9iYWxUaGlzPCJ1Inx8dHlwZW9mIHdpbmRvdzwidSJ8fHR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWw7dmFyIHk9e30sST17ZXhwb3J0czp7fX07SS5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0''@;'; put 'put ''Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiYmciLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0''@;'; put 'put ''MTgiLG1pbGxpb246Ilx1MDQxMCIsYmlsbGlvbjoiTSIsdHJpbGxpb246IlQifSxvcmRpbmFsOigpPT4iLiIsY3VycmVuY3k6e3N5bWJvbDoiXHUwNDNiXHUwNDMyLiIsY29kZToiQkdOIn19KTt2YXIgXz1JLmV4cG9ydHMsZz17ZXhwb3J0czp7fX07Zy5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0''@;'; put 'put ''KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiY3MtQ1oiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiXHhhMCIsZGVjaW1hbDoiLCJ9LGFiYnJldmlh''@;'; put 'put ''dGlvbnM6e3Rob3VzYW5kOiJ0aXMuIixtaWxsaW9uOiJtaWwuIixiaWxsaW9uOiJtbGQuIix0cmlsbGlvbjoiYmlsLiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LHNwYWNlU2VwYXJhdGVkOiEwLGN1cnJlbmN5OntzeW1ib2w6IktcdTAxMGQiLHBvc2l0aW9uOiJwb3N0Zml4Iixj''@;'; put 'put ''b2RlOiJDWksifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLHNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdp''@;'; put 'put ''dHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVu''@;'; put 'put ''Y3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSk7dmFyIEI9Zy5leHBvcnRzLHc9e2V4cG9ydHM6e319OyFmdW5j''@;'; put 'put ''dGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImRhLURLIixkZWxpbWl0ZXJzOnt0''@;'; put 'put ''aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoibWlvIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLHBvc2l0aW9uOiJwb3N0Zml4''@;'; put 'put ''Iixjb2RlOiJES0sifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHcpO3ZhciBQPXcuZXhwb3J0cyxGPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJkZS1BVCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIs''@;'; put 'put ''In0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixjb2RlOiJFVVIifX0pfShGKTt2YXIgTz1GLmV4cG9ydHMsej17ZXhw''@;'; put 'put ''b3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZGUtQ0gi''@;'; put 'put ''LGRlbGltaXRlcnM6e3Rob3VzYW5kczoiXHUyMDE5IixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixw''@;'; put 'put ''b3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ0hGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxh''@;'; put 'put ''dmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0s''@;'; put 'put ''ZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oeik7dmFyIE49ei5leHBvcnRzLEw9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1''@;'; put 'put ''aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImRlLURFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZp''@;'; put 'put ''YXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoiTWkiLGJpbGxpb246Ik1hIix0cmlsbGlvbjoiQmkifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIi''@;'; put 'put ''fSxjdXJyZW5jeUZvcm1hdDp7dG90YWxMZW5ndGg6NCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNz''@;'; put 'put ''YToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0''@;'; put 'put ''aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oTCk7dmFyIEs9TC5leHBvcnRzLFU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blBy''@;'; put 'put ''b3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImRlLUxJIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiciLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQi''@;'; put 'put ''fSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJDSEYifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlz''@;'; put 'put ''c2E6MH19fSl9KFUpO3ZhciBXPVUuZXhwb3J0cyxZPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/''@;'; put 'put ''VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlbCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDNjNyIsbWlsbGlvbjoiXHUwM2I1IixiaWxsaW9uOiJcdTAzYjQiLHRyaWxsaW9uOiJcdTAzYzQifSxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLGNvZGU6IkVVUiJ9fSl9KFkpO3ZhciBxPVkuZXhwb3J0cyxlZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1''@;'; put 'put ''bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZW4tQVUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9u''@;'; put 'put ''OiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0IjoyPT09SnI/Im5kIjozPT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4''@;'; put 'put ''Iixjb2RlOiJBVUQifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0''@;'; put 'put ''OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGVlKTt2YXIgSj1lZS5leHBvcnRzLG5lPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlbi1HQiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246''@;'; put 'put ''ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09fn4oVnQlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTMiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkdC''@;'; put 'put ''UCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiExLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITEsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMSxh''@;'; put 'put ''dmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZDohMSxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0s''@;'; put 'put ''ZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZDohMSxtYW50aXNzYTowfX19KX0obmUpO3ZhciBpZT1uZS5leHBvcnRzLGxlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlbi1JRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJi''@;'; put 'put ''cmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09fn4oVnQlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJl''@;'; put 'put ''bmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InByZWZpeCIsY29kZToiRVVSIn19KX0obGUpO3ZhciBtZT1sZS5leHBvcnRzLF9lPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlbi1OWiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJp''@;'; put 'put ''bGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09fn4oVnQlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6''@;'; put 'put ''Ik5aRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDoh''@;'; put 'put ''MCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJl''@;'; put 'put ''bmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oX2UpO3ZhciBUZT1fZS5leHBvcnRzLFNlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlbi1aQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRy''@;'; put 'put ''aWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09fn4oVnQlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6IlIiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlpBUiJ9LGN1cnJl''@;'; put 'put ''bmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEw''@;'; put 'put ''fSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2Fu''@;'; put 'put ''ZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oU2UpO3ZhciBqZT1TZS5leHBvcnRzLFY9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLUFSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0s''@;'; put 'put ''b3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJBUlMi''@;'; put 'put ''fSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZl''@;'; put 'put ''cmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1''@;'; put 'put ''bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFYpO3ZhciBwPVYuZXhwb3J0cyxiPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWko''@;'; put 'put ''VnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1DTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0''@;'; put 'put ''aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5v''@;'; put 'put ''IjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJDTFAifSxjdXJyZW5jeUZvcm1hdDp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6''@;'; put 'put ''ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGIpO3ZhciB4PWIuZXhwb3J0cyxDPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1DTyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJi''@;'; put 'put ''cmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09''@;'; put 'put ''SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3Vy''@;'; put 'put ''RGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1''@;'; put 'put ''cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShDKTt2YXIgVD1DLmV4cG9ydHMsSD17ZXhwb3J0czp7''@;'; put 'put ''fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtQ1IiLGRlbGlt''@;'; put 'put ''aXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8i''@;'; put 'put ''Ojc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGExIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ1JDIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShIKTt2YXIgaj1ILmV4cG9ydHMsRT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtRVMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxv''@;'; put 'put ''cmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToi''@;'; put 'put ''RVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEw''@;'; put 'put ''LGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEw''@;'; put 'put ''fSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShFKTt2YXIgbT1FLmV4cG9ydHMsQT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''IHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtTVgiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJl''@;'; put 'put ''dmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFZ0KXtsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZv''@;'; put 'put ''Ijo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiTVhOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91''@;'; put 'put ''ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9D''@;'; put 'put ''dXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oQSk7dmFyIGFlPUEuZXhwb3J0cyx0ZT17ZXhwb3J0''@;'; put 'put ''czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtTkkiLGRl''@;'; put 'put ''bGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8i''@;'; put 'put ''ZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiQyQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6Ik5JTyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNw''@;'; put 'put ''YWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2Fu''@;'; put 'put ''ZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0odGUpO3ZhciBzZT10ZS5leHBvcnRzLHdlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1QRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9''@;'; put 'put ''LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiJTLy4iLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlBF''@;'; put 'put ''TiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxh''@;'; put 'put ''dmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0s''@;'; put 'put ''ZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0od2UpO3ZhciBVZT13ZS5leHBvcnRzLEplPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1QUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJi''@;'; put 'put ''cmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09''@;'; put 'put ''SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJVU0QifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJh''@;'; put 'put ''Z2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVs''@;'; put 'put ''bFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEplKTt2YXIgb3Q9''@;'; put 'put ''SmUuZXhwb3J0cyx4ZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHts''@;'; put 'put ''YW5ndWFnZVRhZzoiZXMtU1YiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8''@;'; put 'put ''fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiU1ZDIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRv''@;'; put 'put ''dGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3Vy''@;'; put 'put ''cmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNl''@;'; put 'put ''U2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh4ZSk7dmFyIHZlPXhlLmV4cG9ydHMsWGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3Qu''@;'; put 'put ''cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImV0LUVFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidHVoIixtaWxsaW9uOiJtbG4iLGJp''@;'; put 'put ''bGxpb246Im1sZCIsdHJpbGxpb246InRybCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0''@;'; put 'put ''LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50''@;'; put 'put ''aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDoh''@;'; put 'put ''MCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oWGUpO3ZhciB6ZT1YZS5leHBvcnRzLERlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJmYS1JUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiJcdTA2MGMiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNjQ3XHUwNjMyXHUwNjI3XHUwNjMxIixt''@;'; put 'put ''aWxsaW9uOiJcdTA2NDVcdTA2Y2NcdTA2NDRcdTA2Y2NcdTA2NDhcdTA2NDYiLGJpbGxpb246Ilx1MDY0NVx1MDZjY1x1MDY0NFx1MDZjY1x1MDYyN1x1MDYzMVx1MDYyZiIsdHJpbGxpb246Ilx1MDYyYVx1MDYzMVx1MDZjY1x1MDY0NFx1MDZjY1x1MDY0OFx1MDY0NiJ9LG9yZGluYWw6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4iXHUwNjI3XHUwNjQ1In0sY3VycmVuY3k6e3N5bWJvbDoiXHVmZGZjIixjb2RlOiJJUlIifX0pfShEZSk7dmFyIEZlPURlLmV4cG9ydHMsT2U9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZW''@;'; put 'put ''dC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImZpLUZJIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoi''@;'; put 'put ''ayIsbWlsbGlvbjoiTSIsYmlsbGlvbjoiRyIsdHJpbGxpb246IlQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJj''@;'; put 'put ''dXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KE9lKTt2YXIgSWU9T2UuZXhwb3J0cyxWZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZmlsLVBIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmls''@;'; put 'put ''bGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT1+fihWdCUxMDAvMTApPyJ0aCI6MT09PUpyPyJzdCI6Mj09PUpyPyJuZCI6Mz09PUpyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGIxIixjb2RlOiJQSFAifX0pfShWZSk7''@;'; put 'put ''dmFyIGtlPVZlLmV4cG9ydHMsQWU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0''@;'; put 'put ''OlZ0fSh7bGFuZ3VhZ2VUYWc6ImZyLUNBIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoiTSIsYmlsbGlvbjoiRyIsdHJpbGxpb246IlQifSxvcmRpbmFsOlZ0PT4xPT09VnQ/ImVyIjoiXHhlOG1lIixz''@;'; put 'put ''cGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRp''@;'; put 'put ''Z2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oQWUpO3ZhciBfdD1BZS5leHBvcnRzLG50PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVy''@;'; put 'put ''biBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJmci1DSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhv''@;'; put 'put ''dXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+MT09PVZ0PyJlciI6Ilx4ZThtZSIsY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ0hGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291''@;'; put 'put ''dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVu''@;'; put 'put ''Y3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShudCk7dmFyIFFlPW50LmV4cG9ydHMsdW49e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxl''@;'; put 'put ''JiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImZyLUZSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoi''@;'; put 'put ''TSIsYmlsbGlvbjoiTXJkIix0cmlsbGlvbjoiYmlsbGlvbiJ9LG9yZGluYWw6VnQ9PjE9PT1WdD8iZXIiOiJceGU4bWUiLGJ5dGVzOntiaW5hcnlTdWZmaXhlczpbIm8iLCJLaW8iLCJNaW8iLCJHaW8iLCJUaW8iLCJQaW8iLCJFaW8iLCJaaW8iLCJZaW8iXSxkZWNpbWFsU3VmZml4ZXM6WyJv''@;'; put 'put ''IiwiS28iLCJNbyIsIkdvIiwiVG8iLCJQbyIsIkVvIiwiWm8iLCJZbyJdfSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRl''@;'; put 'put ''ZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHVuKTt2YXIgeXQ9dW4uZXhwb3J0cyxNdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku''@;'; put 'put ''Y2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiaGUtSUwiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA1ZDBcdTA1ZGNcdTA1ZTMiLG1pbGxpb246Ilx1MDVkZVx1MDVkOVx1MDVk''@;'; put 'put ''Y1x1MDVkOVx1MDVkNVx1MDVkZiIsYmlsbGlvbjoiXHUwNWRlXHUwNWQ5XHUwNWRjXHUwNWQ5XHUwNWQwXHUwNWU4XHUwNWQzIix0cmlsbGlvbjoiXHUwNWQ4XHUwNWU4XHUwNWQ5XHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWRmIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFhIixwb3NpdGlvbjoi''@;'; put 'put ''cHJlZml4Iixjb2RlOiJJTFMifSxvcmRpbmFsOigpPT4iIixjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3Rv''@;'; put 'put ''dGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21h''@;'; put 'put ''bnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KE10KTt2YXIgRHQ9TXQuZXhwb3J0cyxpdD17ZXhwb3J0czp7fX07IWZ1''@;'; put 'put ''bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiaHUtSFUiLGRlbGltaXRlcnM6''@;'; put 'put ''e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJFIixtaWxsaW9uOiJNIixiaWxsaW9uOiJNcmQiLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiRnQiLHBvc2l0aW9uOiJwb3N0Zml4''@;'; put 'put ''Iixjb2RlOiJIVUYifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGl0KTt2YXIgJGU9aXQuZXhwb3J0cyx0dD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiaWQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoi''@;'; put 'put ''LCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJyIixtaWxsaW9uOiJqIixiaWxsaW9uOiJtIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IlJwIixjb2RlOiJJRFIifX0pfSh0dCk7dmFyIEhlPXR0LmV4cG9ydHMsdXQ9e2V4''@;'; put 'put ''cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Iml0LUNI''@;'; put 'put ''IixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiciLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlsYSIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHhiMCJ9LGN1cnJlbmN5OntzeW1ib2w6IkNI''@;'; put 'put ''RiIsY29kZToiQ0hGIn19KX0odXQpO3ZhciBxdD11dC5leHBvcnRzLFJ0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0''@;'; put 'put ''LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJpdC1JVCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1pbGEiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIlx4YmEifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRl''@;'; put 'put ''ZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2Fu''@;'; put 'put ''ZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6''@;'; put 'put ''MH19fSl9KFJ0KTt2YXIgUHQ9UnQuZXhwb3J0cyxjaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIp''@;'; put 'put ''P1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiamEtSlAiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoiXHU1MzQxXHU1MTA0Iix0cmlsbGlvbjoi''@;'; put 'put ''XHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhNSIscG9zaXRpb246InByZWZpeCIsY29kZToiSlBZIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdv''@;'; put 'put ''RGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShjaSk7dmFyIFF0PWNpLmV4cG9ydHMsc249e2V4cG9ydHM6e319''@;'; put 'put ''OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImtvLUtSIixkZWxpbWl0''@;'; put 'put ''ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHVjYzljIixtaWxsaW9uOiJcdWJjMzFcdWI5Y2MiLGJpbGxpb246Ilx1YzJlZFx1YzViNSIsdHJpbGxpb246Ilx1Yzc3Y1x1Yzg3MCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9''@;'; put 'put ''LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhOSIsY29kZToiS1BXIn19KX0oc24pO3ZhciBSaT1zbi5leHBvcnRzLGhuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJsdi1MViIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InRcdTAxNmJrc3QuIixtaWxsaW9uOiJtaWxqLiIs''@;'; put 'put ''YmlsbGlvbjoibWxqcmQuIix0cmlsbGlvbjoidHJpbGouIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFs''@;'; put 'put ''TGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVu''@;'; put 'put ''Y3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShobik7dmFyIGZ0PWhuLmV4cG9ydHMsT3I9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJv''@;'; put 'put ''dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Im5iLU5PIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoiTSIsYmlsbGlvbjoi''@;'; put 'put ''bWQiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDooKT0+IiIsY3VycmVuY3k6e3N5bWJvbDoia3IiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJOT0sifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlz''@;'; put 'put ''c2E6MH19fSl9KE9yKTt2YXIgV3Q9T3IuZXhwb3J0cyxBdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVs''@;'; put 'put ''dCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoibmIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1pYSIsdHJpbGxpb246ImIifSxvcmRpbmFsOmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJrciIsY29kZToiTk9LIn19KX0oQXQpO3ZhciBSbj1BdC5leHBvcnRzLHN0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJubC1CRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1sbiIsYmlsbGlv''@;'; put 'put ''bjoibWxkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDA7cmV0dXJuIDAhPT1WdCYmSnI8PTF8fDg9PT1Kcnx8SnI+PTIwPyJzdGUiOiJkZSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5''@;'; put 'put ''Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0''@;'; put 'put ''OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHN0KTt2YXIgVXQ9c3QuZXhwb3J0cyxyaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoibmwtTkwiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbG4i''@;'; put 'put ''LGJpbGxpb246Im1yZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTAwO3JldHVybiAwIT09VnQmJkpyPD0xfHw4PT09SnJ8fEpyPj0yMD8ic3RlIjoiZGUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkVVUiJ9LGN1''@;'; put 'put ''cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdl''@;'; put 'put ''OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdp''@;'; put 'put ''dGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0ocmkpO3ZhciBXZT1yaS5leHBvcnRzLFR0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWko''@;'; put 'put ''VnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJubiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9u''@;'; put 'put ''czp7dGhvdXNhbmQ6InQiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWlhIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixjb2RlOiJOT0sifX0pfShUdCk7dmFyIG5yPVR0LmV4cG9ydHMsaHQ9e2V4cG9ydHM6e319OyFm''@;'; put 'put ''dW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InBsLVBMIixkZWxpbWl0ZXJz''@;'; put 'put ''Ont0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidHlzLiIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOigpPT4iLiIsY3VycmVuY3k6e3N5bWJvbDoiIHpcdTAxNDIiLHBvc2l0aW9uOiJwb3N0Zml4''@;'; put 'put ''Iixjb2RlOiJQTE4ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGh0KTt2YXIgeHQ9aHQuZXhwb3J0cyxqbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoicHQtQlIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1h''@;'; put 'put ''bDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWwiLG1pbGxpb246Im1pbGhceGY1ZXMiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJceGJhIn0sY3VycmVuY3k6e3N5bWJvbDoiUiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkJS''@;'; put 'put ''TCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNp''@;'; put 'put ''bWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0''@;'; put 'put ''OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGpuKTt2YXIgcm49am4uZXhwb3J0cyx6dD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9f''@;'; put 'put ''ZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoicHQtUFQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixt''@;'; put 'put ''aWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0''@;'; put 'put ''b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHp0KTt2YXIgaGk9enQuZXhwb3J0cyxjbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku''@;'; put 'put ''Y2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoicm8tUk8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWkiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxu''@;'; put 'put ''In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiIGxlaSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlJPTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRo''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50''@;'; put 'put ''aXNzYTowfX19KX0oY24pO3ZhciBmbj1jbi5leHBvcnRzLElpPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZh''@;'; put 'put ''dWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJyby1STyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1paSIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiIgbGVpIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiUk9OIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5j''@;'; put 'put ''eTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0''@;'; put 'put ''ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShJ''@;'; put 'put ''aSk7dmFyIFh0PUlpLmV4cG9ydHMsZW49e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZh''@;'; put 'put ''dWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InJ1LVJVIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJiIix0cmlsbGlvbjoi''@;'; put 'put ''dCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MDQ0MFx1MDQ0M1x1MDQzMS4iLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJSVUIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0p''@;'; put 'put ''fShlbik7dmFyIHVhPWVuLmV4cG9ydHMsRWk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5k''@;'; put 'put ''ZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InJ1LVVBIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJiIix0cmlsbGlv''@;'; put 'put ''bjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiNCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlVBSCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2''@;'; put 'put ''ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0s''@;'; put 'put ''ZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEVpKTt2YXIg''@;'; put 'put ''dnI9RWkuZXhwb3J0cyxXbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9''@;'; put 'put ''KHtsYW5ndWFnZVRhZzoic2stU0siLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiXHhhMCIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0aXMuIixtaWxsaW9uOiJtaWwuIixiaWxsaW9uOiJtbGQuIix0cmlsbGlvbjoiYmlsLiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4iLiJ9LHNwYWNlU2VwYXJhdGVkOiEwLGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVk''@;'; put 'put ''Q3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTow''@;'; put 'put ''fX19KX0oV24pO3ZhciAkaT1Xbi5leHBvcnRzLGVpPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/''@;'; put 'put ''VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJzbCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InRpcy4iLG1pbGxpb246Im1pbC4iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixjb2RlOiJFVVIifX0pfShlaSk7dmFyIFFyPWVpLmV4cG9ydHMsVmk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3Qu''@;'; put 'put ''cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InNyLUN5cmwtUlMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0NDJcdTA0NGJcdTA0''@;'; put 'put ''NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6IlJTRCIsY29kZToiUlNEIn19KX0oVmkpO3ZhciBOaT1WaS5leHBvcnRzLERhPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIs''@;'; put 'put ''eGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJzdi1TRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRz''@;'; put 'put ''OiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Ik0iLGJpbGxpb246Im1kIix0cmlsbGlvbjoidG1kIn0sb3JkaW5hbDooKT0+IiIsY3VycmVuY3k6e3N5bWJvbDoia3IiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJTRUsifSxjdXJyZW5jeUZv''@;'; put 'put ''cm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoi''@;'; put 'put ''Y3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNw''@;'; put 'put ''YWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShEYSk7dmFyIExyPURhLmV4cG9ydHMsV2k9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmpl''@;'; put 'put ''Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InRoLVRIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwZTFlXHUwZTMxXHUwZTE5''@;'; put 'put ''IixtaWxsaW9uOiJcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkiLGJpbGxpb246Ilx1MGUxZVx1MGUzMVx1MGUxOVx1MGUyNVx1MGU0OVx1MGUzMlx1MGUxOSIsdHJpbGxpb246Ilx1MGUyNVx1MGU0OVx1MGUzMlx1MGUxOVx1MGUyNVx1MGU0OVx1MGUzMlx1MGUxOSJ9LG9yZGluYWw6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MGUzZiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlRIQiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2Zv''@;'; put 'put ''dXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05v''@;'; put 'put ''Q3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFdpKTt2YXIgcGE9V2kuZXhwb3J0cyxRbj17ZXhw''@;'; put 'put ''b3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uKCl7Y29uc3QgVnQ9ezE6IidpbmNpIiw1OiInaW5jaSIsODoiJ2luY2kiLDcwOiInaW5jaSIsODA6IidpbmNpIiwyOiInbmNpIiw3OiInbmNpIiwyMDoiJ25jaSIsNTA6IiduY2kiLDM6IidceGZjbmNceGZjIiw0''@;'; put 'put ''OiInXHhmY25jXHhmYyIsMTAwOiInXHhmY25jXHhmYyIsNjoiJ25jXHUwMTMxIiw5OiIndW5jdSIsMTA6Iid1bmN1IiwzMDoiJ3VuY3UiLDQwOiInXHUwMTMxbmNcdTAxMzEiLDYwOiInXHUwMTMxbmNcdTAxMzEiLDkwOiInXHUwMTMxbmNcdTAxMzEifTtyZXR1cm4gZnVuY3Rpb24gdWkoSnIp''@;'; put 'put ''e3JldHVybiBKciYmSnIuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEpyLCJkZWZhdWx0Iik/SnIuZGVmYXVsdDpKcn0oe2xhbmd1YWdlVGFnOiJ0ci1UUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9u''@;'; put 'put ''czp7dGhvdXNhbmQ6ImJpbiIsbWlsbGlvbjoibWlseW9uIixiaWxsaW9uOiJtaWx5YXIiLHRyaWxsaW9uOiJ0cmlseW9uIn0sb3JkaW5hbDpKcj0+e2lmKDA9PT1KcilyZXR1cm4iJ1x1MDEzMW5jXHUwMTMxIjtsZXQgYjA9SnIlMTA7cmV0dXJuIFZ0W2IwXXx8VnRbSnIlMTAwLWIwXXx8VnRb''@;'; put 'put ''SnI+PTEwMD8xMDA6bnVsbF19LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiYSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlRSWSJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVu''@;'; put 'put ''Y3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0o''@;'; put 'put ''KX0oUW4pO3ZhciBsYT1Rbi5leHBvcnRzLHlhPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQu''@;'; put 'put ''ZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJ1ay1VQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQzOFx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiXHUwNDNjXHUw''@;'; put 'put ''NDNiXHUwNDQwXHUwNDM0Iix0cmlsbGlvbjoiXHUwNDMxXHUwNDNiXHUwNDNkIn0sb3JkaW5hbDooKT0+IiIsY3VycmVuY3k6e3N5bWJvbDoiXHUyMGI0Iixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVUFIIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVu''@;'; put 'put ''Z3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVk''@;'; put 'put ''OiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MCxtYW50aXNzYTowfX19KX0oeWEpO3ZhciBMYT15YS5leHBvcnRzLEZhPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0''@;'; put 'put ''LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJ6aC1DTiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU0ZTA3IixiaWxsaW9uOiJcdTUzNDFcdTRlYmYi''@;'; put 'put ''LHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJceGE1Iixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJDTlkifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJl''@;'; put 'put ''bmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShGYSk7dmFyIHRpPUZhLmV4cG9ydHMsZ289e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4''@;'; put 'put ''YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InpoLU1PIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6''@;'; put 'put ''IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTg0MmMiLGJpbGxpb246Ilx1NTM0MVx1NTEwNCIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ik1P''@;'; put 'put ''UCIsY29kZToiTU9QIn19KX0oZ28pO3ZhciBOcz1nby5leHBvcnRzLGJsPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0''@;'; put 'put ''LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJ6aC1TRyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU0ZTA3IixiaWxsaW9uOiJcdTUzNDFcdTRlYmYi''@;'; put 'put ''LHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixjb2RlOiJTR0QifX0pfShibCk7dmFyIHB1PWJsLmV4cG9ydHMsTGM9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShW''@;'; put 'put ''dCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InpoLVRXIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRp''@;'; put 'put ''b25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTg0MmMiLGJpbGxpb246Ilx1NTM0MVx1NTEwNCIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHU3YjJjIn0sY3VycmVuY3k6e3N5bWJvbDoiTlQkIixjb2RlOiJUV0QifX0pfShMYyk7''@;'; put 'put ''dmFyIEQwPUxjLmV4cG9ydHM7cmV0dXJuIGZ1bmN0aW9uKGlyKXtpci5iZz1fLGlyWyJjcy1DWiJdPUIsaXJbImRhLURLIl09UCxpclsiZGUtQVQiXT1PLGlyWyJkZS1DSCJdPU4saXJbImRlLURFIl09SyxpclsiZGUtTEkiXT1XLGlyLmVsPXEsaXJbImVuLUFVIl09SixpclsiZW4tR0IiXT1p''@;'; put 'put ''ZSxpclsiZW4tSUUiXT1tZSxpclsiZW4tTloiXT1UZSxpclsiZW4tWkEiXT1qZSxpclsiZXMtQVIiXT1wLGlyWyJlcy1DTCJdPXgsaXJbImVzLUNPIl09VCxpclsiZXMtQ1IiXT1qLGlyWyJlcy1FUyJdPW0saXJbImVzLU1YIl09YWUsaXJbImVzLU5JIl09c2UsaXJbImVzLVBFIl09VWUsaXJb''@;'; put 'put ''ImVzLVBSIl09b3QsaXJbImVzLVNWIl09dmUsaXJbImV0LUVFIl09emUsaXJbImZhLUlSIl09RmUsaXJbImZpLUZJIl09SWUsaXJbImZpbC1QSCJdPWtlLGlyWyJmci1DQSJdPV90LGlyWyJmci1DSCJdPVFlLGlyWyJmci1GUiJdPXl0LGlyWyJoZS1JTCJdPUR0LGlyWyJodS1IVSJdPSRlLGly''@;'; put 'put ''LmlkPUhlLGlyWyJpdC1DSCJdPXF0LGlyWyJpdC1JVCJdPVB0LGlyWyJqYS1KUCJdPVF0LGlyWyJrby1LUiJdPVJpLGlyWyJsdi1MViJdPWZ0LGlyWyJuYi1OTyJdPVd0LGlyLm5iPVJuLGlyWyJubC1CRSJdPVV0LGlyWyJubC1OTCJdPVdlLGlyLm5uPW5yLGlyWyJwbC1QTCJdPXh0LGlyWyJw''@;'; put 'put ''dC1CUiJdPXJuLGlyWyJwdC1QVCJdPWhpLGlyWyJyby1STyJdPWZuLGlyLnJvPVh0LGlyWyJydS1SVSJdPXVhLGlyWyJydS1VQSJdPXZyLGlyWyJzay1TSyJdPSRpLGlyLnNsPVFyLGlyWyJzci1DeXJsLVJTIl09TmksaXJbInN2LVNFIl09THIsaXJbInRoLVRIIl09cGEsaXJbInRyLVRSIl09''@;'; put 'put ''bGEsaXJbInVrLVVBIl09TGEsaXJbInpoLUNOIl09dGksaXJbInpoLU1PIl09TnMsaXJbInpoLVNHIl09cHUsaXJbInpoLVRXIl09RDB9KHkpLGZ1bmN0aW9uIFgoaXIpe3JldHVybiBpciYmaXIuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlyLCJk''@;'; put 'put ''ZWZhdWx0Iik/aXIuZGVmYXVsdDppcn0oeSl9KCl9LDgzMTM4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDk2MDkpO1guY2VydGlmaWNhdGU9eSg5NDc3Mik7dmFyIF89SS5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXko''@;'; put 'put ''InZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMu''@;'; put 'put ''a2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkpfSk7WC5SU0FQcml2YXRlS2V5PV87dmFyIGc9SS5kZWZpbmUoIlJTQVB1YmxpY0tleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtl''@;'; put 'put ''eSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpKX0pO1guUlNBUHVibGljS2V5PWc7dmFyIEI9SS5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCks''@;'; put 'put ''dGhpcy5rZXkoIm5vbmUiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCkpLm9w''@;'; put 'put ''dGlvbmFsKCkpfSksdz1JLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pO1guUHVibGljS2V5PXc7dmFyIFA9SS5k''@;'; put 'put ''ZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtYLlByaXZhdGVLZXk9UDt2YXIg''@;'; put 'put ''Rj1JLmRlZmluZSgiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJkZWNyeXB0Iikuc2VxKCkub2JqKHRoaXMua2V5KCJrZGUiKS5z''@;'; put 'put ''ZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgia2RlcGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJzYWx0Iikub2N0c3RyKCksdGhpcy5rZXkoIml0ZXJzIikuaW50KCkpKSx0aGlzLmtleSgiY2lwaGVyIikuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvIikub2Jq''@;'; put 'put ''aWQoKSx0aGlzLmtleSgiaXYiKS5vY3RzdHIoKSkpKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtYLkVuY3J5cHRlZFByaXZhdGVLZXk9Rjt2YXIgTz1JLmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgi''@;'; put 'put ''dmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7WC5EU0FQcml2YXRlS2V5PU8sWC5EU0FwYXJhbT1JLmRl''@;'; put 'put ''ZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciB6PUkuZGVmaW5lKCJFQ1BhcmFtZXRlcnMiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KSxOPUkuZGVmaW5lKCJFQ1ByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5z''@;'; put 'put ''ZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUtleSIpLm9jdHN0cigpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoeiksdGhpcy5rZXkoInB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSku''@;'; put 'put ''Yml0c3RyKCkpfSk7WC5FQ1ByaXZhdGVLZXk9TixYLnNpZ25hdHVyZT1JLmRlZmluZSgic2lnbmF0dXJlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJyIikuaW50KCksdGhpcy5rZXkoInMiKS5pbnQoKSl9KX0sOTQ3NzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEk9eSg0OTYwOSksXz1JLmRlZmluZSgiVGltZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSksZz1JLmRlZmluZSgiQXR0cmlidXRlVHlwZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2Jq''@;'; put 'put ''KHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgidmFsdWUiKS5hbnkoKSl9KSxCPUkuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIiku''@;'; put 'put ''b3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCkpfSksdz1JLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tl''@;'; put 'put ''eSIpLmJpdHN0cigpKX0pLFA9SS5kZWZpbmUoIlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihnKX0pLEY9SS5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2YoUCl9KSxPPUkuZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3Ro''@;'; put 'put ''aXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShGKX0pfSksej1JLmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShfKSx0aGlzLmtleSgibm90QWZ0ZXIiKS51c2UoXykpfSksTj1JLmRlZmluZSgiRXh0ZW5z''@;'; put 'put ''aW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxMPUkuZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24o''@;'; put 'put ''KXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoQiksdGhpcy5rZXkoImlzc3VlciIpLnVzZShPKSx0aGlzLmtleSgidmFs''@;'; put 'put ''aWRpdHkiKS51c2UoeiksdGhpcy5rZXkoInN1YmplY3QiKS51c2UoTyksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKHcpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJ''@;'; put 'put ''RCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihOKS5vcHRpb25hbCgpKX0pLEs9SS5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2Vy''@;'; put 'put ''dGlmaWNhdGUiKS51c2UoTCksdGhpcy5rZXkoInNpZ25hdHVyZUFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTt1ZS5leHBvcnRzPUt9LDg5NDcyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPS9Qcm9jLVR5cGU6IDQsRU5DUllQ''@;'; put 'put ''VEVEW1xuXHJdK0RFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylbXG5ccl0rKFswLTlBLXpcblxyKy89XSspW1xuXHJdKy9tLF89L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLS9tLGc9L14tLS0tLUJFR0lOICgo''@;'; put 'put ''PzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLShbMC05QS16XG5ccisvPV0rKS0tLS0tRU5EIFwxLS0tLS0kL20sQj15KDE4MjExKSx3PXkoNDMzODgpLFA9eSgyNzA1NCkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRixPKXt2YXIgTCx6PUYudG9TdHJpbmcoKSxOPXoubWF0Y2goSSk7''@;'; put 'put ''aWYoTil7dmFyIFU9ImFlcyIrTlsxXSxXPVAuZnJvbShOWzJdLCJoZXgiKSxZPVAuZnJvbShOWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0IikscT1CKE8sVy5zbGljZSgwLDgpLHBhcnNlSW50KE5bMV0sMTApKS5rZXksZWU9W10sSj13LmNyZWF0ZURlY2lwaGVyaXYoVSxxLFcp''@;'; put 'put ''O2VlLnB1c2goSi51cGRhdGUoWSkpLGVlLnB1c2goSi5maW5hbCgpKSxMPVAuY29uY2F0KGVlKX1lbHNle3ZhciBLPXoubWF0Y2goZyk7TD1QLmZyb20oS1syXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpfXJldHVybnt0YWc6ei5tYXRjaChfKVsxXSxkYXRhOkx9fX0sNjU2Njc6''@;'; put 'put ''KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4MzEzOCksXz15KDE1NTc5KSxnPXkoODk0NzIpLEI9eSg0MzM4OCksdz15KDkzMzk3KSxQPXkoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBPKHope3ZhciBOOyJvYmplY3QiPT10eXBlb2YgeiYmIVAuaXNCdWZmZXIoeikmJihOPXoucGFz''@;'; put 'put ''c3BocmFzZSx6PXoua2V5KSwic3RyaW5nIj09dHlwZW9mIHomJih6PVAuZnJvbSh6KSk7dmFyIFcsWSxMPWcoeixOKSxLPUwudGFnLFU9TC5kYXRhO3N3aXRjaChLKXtjYXNlIkNFUlRJRklDQVRFIjpZPUkuY2VydGlmaWNhdGUuZGVjb2RlKFUsImRlciIpLnRic0NlcnRpZmljYXRlLnN1Ympl''@;'; put 'put ''Y3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKFl8fChZPUkuUHVibGljS2V5LmRlY29kZShVLCJkZXIiKSksVz1ZLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2Rl''@;'; put 'put ''KFkuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gWS5zdWJqZWN0UHJpdmF0ZUtleT1ZLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOll9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBZLmFsZ29yaXRobS5w''@;'; put 'put ''YXJhbXMucHViX2tleT1JLkRTQXBhcmFtLmRlY29kZShZLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpZLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1cpfWNhc2UiRU5DUllQVEVEIFBSSVZB''@;'; put 'put ''VEUgS0VZIjpVPWZ1bmN0aW9uIEYoeixOKXt2YXIgTD16LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxLPXBhcnNlSW50KHouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxVPV9bei5hbGdvcml0aG0uZGVjcnlwdC5jaXBo''@;'; put 'put ''ZXIuYWxnby5qb2luKCIuIildLFc9ei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsWT16LnN1YmplY3RQcml2YXRlS2V5LHE9cGFyc2VJbnQoVS5zcGxpdCgiLSIpWzFdLDEwKS84LGVlPXcucGJrZGYyU3luYyhOLEwsSyxxLCJzaGExIiksSj1CLmNyZWF0ZURlY2lwaGVyaXYoVSxlZSxX''@;'; put 'put ''KSxuZT1bXTtyZXR1cm4gbmUucHVzaChKLnVwZGF0ZShZKSksbmUucHVzaChKLmZpbmFsKCkpLFAuY29uY2F0KG5lKX0oVT1JLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpLE4pO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChXPShZPUkuUHJpdmF0ZUtleS5kZWNvZGUoVSwi''@;'; put 'put ''ZGVyIikpLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm57Y3VydmU6WS5hbGdv''@;'; put 'put ''cml0aG0uY3VydmUscHJpdmF0ZUtleTpJLkVDUHJpdmF0ZUtleS5kZWNvZGUoWS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFkuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1JLkRTQXBhcmFtLmRlY29kZShZLnN1''@;'; put 'put ''YmplY3RQcml2YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6WS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitXKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFUsImRlciIp''@;'; put 'put ''O2Nhc2UiUlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOkkuRFNBUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIil9O2Nhc2UiRUMgUFJJVkFURSBLRVkiOnJl''@;'; put 'put ''dHVybntjdXJ2ZTooVT1JLkVDUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIikpLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpVLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrSyl9fU8uc2lnbmF0dXJlPUkuc2lnbmF0dXJlLHVlLmV4''@;'; put 'put ''cG9ydHM9T30sOTMzOTc6KHVlLFgseSk9PntYLnBia2RmMj15KDgyNjg1KSxYLnBia2RmMlN5bmM9eSg1OTExMSl9LDgyNjg1Oih1ZSxYLHkpPT57dmFyIFAsTCxJPXkoMjcwNTQpLkJ1ZmZlcixfPXkoODYxMTEpLGc9eSg0NTM5MiksQj15KDU5MTExKSx3PXkoNzY2NDMpLEY9Z2xvYmFsLmNy''@;'; put 'put ''eXB0byYmZ2xvYmFsLmNyeXB0by5zdWJ0bGUsTz17c2hhOiJTSEEtMSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4NCI6IlNIQS0zODQiLCJzaGEtNTEyIjoiU0hBLTUxMiIs''@;'; put 'put ''c2hhNTEyOiJTSEEtNTEyIn0sej1bXTtmdW5jdGlvbiBLKCl7cmV0dXJuIEx8fChMPWdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy5uZXh0VGljaz9nbG9iYWwucHJvY2Vzcy5uZXh0VGljazpnbG9iYWwucXVldWVNaWNyb3Rhc2s/Z2xvYmFsLnF1ZXVlTWljcm90YXNrOmdsb2JhbC5z''@;'; put 'put ''ZXRJbW1lZGlhdGU/Z2xvYmFsLnNldEltbWVkaWF0ZTpnbG9iYWwuc2V0VGltZW91dCl9ZnVuY3Rpb24gVShZLHEsZWUsSixuZSl7cmV0dXJuIEYuaW1wb3J0S2V5KCJyYXciLFkse25hbWU6IlBCS0RGMiJ9LCExLFsiZGVyaXZlQml0cyJdKS50aGVuKGZ1bmN0aW9uKGllKXtyZXR1cm4gRi5k''@;'; put 'put ''ZXJpdmVCaXRzKHtuYW1lOiJQQktERjIiLHNhbHQ6cSxpdGVyYXRpb25zOmVlLGhhc2g6e25hbWU6bmV9fSxpZSxKPDwzKX0pLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBJLmZyb20oaWUpfSl9dWUuZXhwb3J0cz1mdW5jdGlvbihZLHEsZWUsSixuZSxpZSl7ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IG5lJiYoaWU9bmUsbmU9dm9pZCAwKTt2YXIgbGU9T1sobmU9bmV8fCJzaGExIikudG9Mb3dlckNhc2UoKV07aWYobGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBnbG9iYWwuUHJvbWlzZSl7aWYoXyhlZSxKKSxZPXcoWSxnLCJQYXNzd29yZCIpLHE9dyhxLGcsIlNhbHQiKSwiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgaWUpdGhyb3cgbmV3IEVycm9yKCJObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjIiKTshZnVuY3Rpb24gVyhZLHEpe1kudGhlbihmdW5jdGlvbihlZSl7SygpKGZ1bmN0aW9uKCl7cShudWxsLGVlKX0pfSxmdW5jdGlvbihlZSl7SygpKGZ1bmN0aW9uKCl7cShlZSl9KX0pfShm''@;'; put 'put ''dW5jdGlvbiBOKFkpe2lmKGdsb2JhbC5wcm9jZXNzJiYhZ2xvYmFsLnByb2Nlc3MuYnJvd3Nlcnx8IUZ8fCFGLmltcG9ydEtleXx8IUYuZGVyaXZlQml0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtpZih2b2lkIDAhPT16W1ldKXJldHVybiB6W1ldO3ZhciBxPVUoUD1QfHxJLmFsbG9j''@;'; put 'put ''KDgpLFAsMTAsMTI4LFkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4geltZXT1xLHF9KGxlKS50aGVuKGZ1bmN0aW9uKG1lKXtyZXR1cm4gbWU/VShZLHEsZWUsSixsZSk6QihZLHEsZWUsSixuZSl9KSxpZSl9ZWxzZSBLKCko''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgbWU7dHJ5e21lPUIoWSxxLGVlLEosbmUpfWNhdGNoKF9lKXtyZXR1cm4gaWUoX2UpfWllKG51bGwsbWUpfSl9fSw0NTM5Mjp1ZT0+e3ZhciBYO1g9Z2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLmJyb3dzZXI/InV0Zi04IjpnbG9iYWwucHJvY2VzcyYmZ2xv''@;'; put 'put ''YmFsLnByb2Nlc3MudmVyc2lvbj9wYXJzZUludChwcm9jZXNzLnZlcnNpb24uc3BsaXQoIi4iKVswXS5zbGljZSgxKSwxMCk+PTY/InV0Zi04IjoiYmluYXJ5IjoidXRmLTgiLHVlLmV4cG9ydHM9WH0sODYxMTE6dWU9Pnt2YXIgWD1NYXRoLnBvdygyLDMwKS0xO3VlLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24oeSxJKXtpZigibnVtYmVyIiE9dHlwZW9mIHkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZih5PDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlvbnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIEkpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''S2V5IGxlbmd0aCBub3QgYSBudW1iZXIiKTtpZihJPDB8fEk+WHx8SSE9SSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0sNTkxMTE6KHVlLFgseSk9Pnt2YXIgST15KDgzNDA3KSxfPXkoMzY2MzYpLGc9eSgyNTQ0MyksQj15KDI3MDU0KS5CdWZmZXIsdz15KDg2MTEx''@;'; put 'put ''KSxQPXkoNDUzOTIpLEY9eSg3NjY0MyksTz1CLmFsbG9jKDEyOCksej17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJtZDE2MDoyMCxyaXBlbWQxNjA6MjB9O2Z1bmN0aW9uIE4oVSxXLFkpe3ZhciBxPWZ1bmN0aW9uIEwoVSl7cmV0dXJu''@;'; put 'put ''InJtZDE2MCI9PT1VfHwicmlwZW1kMTYwIj09PVU/ZnVuY3Rpb24gWShxKXtyZXR1cm4obmV3IF8pLnVwZGF0ZShxKS5kaWdlc3QoKX06Im1kNSI9PT1VP0k6ZnVuY3Rpb24gVyhxKXtyZXR1cm4gZyhVKS51cGRhdGUocSkuZGlnZXN0KCl9fShVKSxlZT0ic2hhNTEyIj09PVV8fCJzaGEzODQi''@;'; put 'put ''PT09VT8xMjg6NjQ7Vy5sZW5ndGg+ZWU/Vz1xKFcpOlcubGVuZ3RoPGVlJiYoVz1CLmNvbmNhdChbVyxPXSxlZSkpO2Zvcih2YXIgSj1CLmFsbG9jVW5zYWZlKGVlK3pbVV0pLG5lPUIuYWxsb2NVbnNhZmUoZWUreltVXSksaWU9MDtpZTxlZTtpZSsrKUpbaWVdPTU0XldbaWVdLG5lW2llXT05''@;'; put 'put ''Ml5XW2llXTt2YXIgbGU9Qi5hbGxvY1Vuc2FmZShlZStZKzQpO0ouY29weShsZSwwLDAsZWUpLHRoaXMuaXBhZDE9bGUsdGhpcy5pcGFkMj1KLHRoaXMub3BhZD1uZSx0aGlzLmFsZz1VLHRoaXMuYmxvY2tzaXplPWVlLHRoaXMuaGFzaD1xLHRoaXMuc2l6ZT16W1VdfU4ucHJvdG90eXBlLnJ1''@;'; put 'put ''bj1mdW5jdGlvbihVLFcpe3JldHVybiBVLmNvcHkoVyx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKFcpLmNvcHkodGhpcy5vcGFkLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2godGhpcy5vcGFkKX0sdWUuZXhwb3J0cz1mdW5jdGlvbiBLKFUsVyxZLHEsZWUpe3coWSxxKTt2YXIgSj1uZXcg''@;'; put 'put ''TihlZT1lZXx8InNoYTEiLFU9RihVLFAsIlBhc3N3b3JkIiksKFc9RihXLFAsIlNhbHQiKSkubGVuZ3RoKSxuZT1CLmFsbG9jVW5zYWZlKHEpLGllPUIuYWxsb2NVbnNhZmUoVy5sZW5ndGgrNCk7Vy5jb3B5KGllLDAsMCxXLmxlbmd0aCk7Zm9yKHZhciBsZT0wLG1lPXpbZWVdLF9lPU1hdGgu''@;'; put 'put ''Y2VpbChxL21lKSxUZT0xO1RlPD1fZTtUZSsrKXtpZS53cml0ZVVJbnQzMkJFKFRlLFcubGVuZ3RoKTtmb3IodmFyIFNlPUoucnVuKGllLEouaXBhZDEpLGplPVNlLFY9MTtWPFk7VisrKXtqZT1KLnJ1bihqZSxKLmlwYWQyKTtmb3IodmFyIHA9MDtwPG1lO3ArKylTZVtwXV49amVbcF19U2Uu''@;'; put 'put ''Y29weShuZSxsZSksbGUrPW1lfXJldHVybiBuZX19LDc2NjQzOih1ZSxYLHkpPT57dmFyIEk9eSgyNzA1NCkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnLEIpe2lmKEkuaXNCdWZmZXIoXykpcmV0dXJuIF87aWYoInN0cmluZyI9PXR5cGVvZiBfKXJldHVybiBJLmZyb20oXyxnKTtp''@;'; put 'put ''ZihBcnJheUJ1ZmZlci5pc1ZpZXcoXykpcmV0dXJuIEkuZnJvbShfLmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVFcnJvcihCKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0sOTY1Njp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRz''@;'; put 'put ''PXR5cGVvZiBwcm9jZXNzPiJ1Inx8IXByb2Nlc3MudmVyc2lvbnx8MD09PXByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCJ2MC4iKXx8MD09PXByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCJ2MS4iKSYmMCE9PXByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCJ2MS44LiIpP3tuZXh0VGljazpmdW5jdGlv''@;'; put 'put ''biBYKHksSSxfLGcpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB5KXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYWxsYmFjayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIHcsUCxCPWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKEIpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIHByb2Nlc3Mu''@;'; put 'put ''bmV4dFRpY2soeSk7Y2FzZSAyOnJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7eS5jYWxsKG51bGwsSSl9KTtjYXNlIDM6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXt5LmNhbGwobnVsbCxJLF8pfSk7Y2FzZSA0OnJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1''@;'; put 'put ''bmN0aW9uKCl7eS5jYWxsKG51bGwsSSxfLGcpfSk7ZGVmYXVsdDpmb3Iodz1uZXcgQXJyYXkoQi0xKSxQPTA7UDx3Lmxlbmd0aDspd1tQKytdPWFyZ3VtZW50c1tQXTtyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe3kuYXBwbHkobnVsbCx3KX0pfX19OnByb2Nlc3N9LDUyOTY1''@;'; put 'put ''Oih1ZSxYLHkpPT57WC5wdWJsaWNFbmNyeXB0PXkoODcyNjcpLFgucHJpdmF0ZURlY3J5cHQ9eSg5ODYxMyksWC5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbihfLGcpe3JldHVybiBYLnB1YmxpY0VuY3J5cHQoXyxnLCEwKX0sWC5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKF8sZyl7cmV0dXJuIFgu''@;'; put 'put ''cHJpdmF0ZURlY3J5cHQoXyxnLCEwKX19LDMwNzE1Oih1ZSxYLHkpPT57dmFyIEk9eSg2NzIxMSksXz15KDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gZyhCKXt2YXIgdz1fLmFsbG9jVW5zYWZlKDQpO3JldHVybiB3LndyaXRlVUludDMyQkUoQiwwKSx3fXVlLmV4cG9ydHM9ZnVuY3Rpb24oQix3''@;'; put 'put ''KXtmb3IodmFyIE8sUD1fLmFsbG9jKDApLEY9MDtQLmxlbmd0aDx3OylPPWcoRisrKSxQPV8uY29uY2F0KFtQLEkoInNoYTEiKS51cGRhdGUoQikudXBkYXRlKE8pLmRpZ2VzdCgpXSk7cmV0dXJuIFAuc2xpY2UoMCx3KX19LDE2NTA4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5w''@;'; put 'put ''cm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEw''@;'; put 'put ''KSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnko''@;'; put 'put ''NTEwNjkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYs''@;'; put 'put ''Yi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5t''@;'; put 'put ''aW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5p''@;'; put 'put ''dEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNl''@;'; put 'put ''SGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0''@;'; put 'put ''aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAv''@;'; put 'put ''NjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0w''@;'; put 'put ''KXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxq''@;'; put 'put ''PTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxz''@;'; put 'put ''ZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNb''@;'; put 'put ''Q109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIp''@;'; put 'put ''JTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7''@;'; put 'put ''dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11''@;'; put 'put ''bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90''@;'; put 'put ''aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVu''@;'; put 'put ''Z3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0''@;'; put 'put ''aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9y''@;'; put 'put ''bVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAi''@;'; put 'put ''OiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1''@;'; put 'put ''LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3Nzcy''@;'; put 'put ''MTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0''@;'; put 'put ''NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRz''@;'; put 'put ''WzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0w''@;'; put 'put ''fHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8''@;'; put 'put ''MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0y''@;'; put 'put ''NixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+''@;'; put 'put ''PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0r''@;'; put 'put ''dGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYm''@;'; put 'put ''ZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIp''@;'; put 'put ''e3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9''@;'; put 'put ''dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCks''@;'; put 'put ''QT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1''@;'; put 'put ''NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+''@;'; put 'put ''PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZi''@;'; put 'put ''fHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMu''@;'; put 'put ''bGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJl''@;'; put 'put ''dHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6''@;'; put 'put ''dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9y''@;'; put 'put ''KDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9y''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxi''@;'; put 'put ''Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMu''@;'; put 'put ''aXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3Ro''@;'; put 'put ''P3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndv''@;'; put 'put ''cmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBn''@;'; put 'put ''KCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9''@;'; put 'put ''cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndv''@;'; put 'put ''cmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9''@;'; put 'put ''dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0''@;'; put 'put ''aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNb''@;'; put 'put ''SF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgu''@;'; put 'put ''d29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5l''@;'; put 'put ''Z2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2''@;'; put 'put ''YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNb''@;'; put 'put ''al0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3Io''@;'; put 'put ''O2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSx4ZT04MTkx''@;'; put 'put ''Jm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLHplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sT2U9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixN''@;'; put 'put ''dD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+''@;'; put 'put ''Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMs''@;'; put 'put ''aGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVs''@;'; put 'put ''KHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRo''@;'; put 'put ''LmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXww''@;'; put 'put ''LEVpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxSdCksbT0obT1NYXRoLmltdWwoeGUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZy''@;'; put 'put ''Pj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHplLFJ0KSxtPShtPU1hdGguaW11bCh6ZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bCh4ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwodmUs''@;'; put 'put ''UXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChPZSxSdCksbT0obT1NYXRoLmltdWwoT2UsUHQpKStN''@;'; put 'put ''YXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoemUsUXQpfDAsbT0obT1tK01hdGguaW11bCh6ZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHhlLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxS''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoT2UsUXQpfDAsbT0obT1tK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh6ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHhlLFd0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''dGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxB''@;'; put 'put ''PU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKE9lLGhuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZnQpfDApK01hdGgu''@;'; put 'put ''aW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoemUsV3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxzdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHhlLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxS''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFd0KXwwLG09KG09bStNYXRoLmltdWwoT2UsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KEllLEF0KXwwLEU9RStNYXRoLmltdWwoemUsc3QpfDAsbT0obT1tK01hdGguaW11bCh6ZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bCh4ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwodmUs''@;'; put 'put ''V2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStN''@;'; put 'put ''YXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoT2Us''@;'; put 'put ''c3QpfDAsbT0obT1tK01hdGguaW11bChPZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bCh6ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKHhlLGh0KXwwLG09KG09bStNYXRoLmltdWwoeGUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5p''@;'; put 'put ''Pj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUs''@;'; put 'put ''UXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxB''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE9lLFdlKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoT2UsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoemUsaHQpfDAsbT0obT1tK01hdGguaW11bCh6ZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXww''@;'; put 'put ''LERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01h''@;'; put 'put ''dGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChPZSxodCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKE9lLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHplLHJuKXwwLG09KG09bStNYXRoLmltdWwoemUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''eGUsY24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxY''@;'; put 'put ''dCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01h''@;'; put 'put ''dGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''QWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE9lLHJuKXwwLG09KG09bStNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoemUsY24pfDAsbT0obT1tK01hdGguaW11bCh6''@;'; put 'put ''ZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKHhlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''bnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKE9lLGNuKXwwLG09KG09bStNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bCh6ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHplLGVu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRo''@;'; put 'put ''LmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''TXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChr''@;'; put 'put ''ZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKE9lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''bnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxY''@;'; put 'put ''dCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01h''@;'; put 'put ''dGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXww''@;'; put 'put ''LHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExh''@;'; put 'put ''Pj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''aXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVu''@;'; put 'put ''KSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhb''@;'; put 'put ''OF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChW''@;'; put 'put ''LHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlz''@;'; put 'put ''LHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFy''@;'; put 'put ''IGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCso''@;'; put 'put ''c2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1''@;'; put 'put ''bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0''@;'; put 'put ''dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRy''@;'; put 'put ''YW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIg''@;'; put 'put ''dGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSx4ZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKnhlO3hlPXRlKnhlK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUreGUseFthZSt3ZStqXT1VZS1vdCxD''@;'; put 'put ''W2FlK3dlK2pdPUplLXhlLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8''@;'; put 'put ''VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5v''@;'; put 'put ''cm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEou''@;'; put 'put ''cHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQp''@;'; put 'put ''KX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRo''@;'; put 'put ''aXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29y''@;'; put 'put ''ZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRl''@;'; put 'put ''W3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5u''@;'; put 'put ''ZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8o''@;'; put 'put ''cCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTti''@;'; put 'put ''Pj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1wPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5j''@;'; put 'put ''dGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3''@;'; put 'put ''IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUu''@;'; put 'put ''aXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhp''@;'; put 'put ''cy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1Qr''@;'; put 'put ''Kyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3Zh''@;'; put 'put ''ciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDtt''@;'; put 'put ''PEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlz''@;'; put 'put ''Lmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9''@;'; put 'put ''PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53''@;'; put 'put ''b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5n''@;'; put 'put ''dGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lh''@;'; put 'put ''ZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsr''@;'; put 'put ''O3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBm''@;'; put 'put ''b3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4o''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9''@;'; put 'put ''KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5s''@;'; put 'put ''ZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRp''@;'; put 'put ''dmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxu''@;'; put 'put ''c3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9''@;'; put 'put ''PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdh''@;'; put 'put ''dGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhI''@;'; put 'put ''PXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVn''@;'; put 'put ''YXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09''@;'; put 'put ''Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0s''@;'; put 'put ''dy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChD''@;'; put 'put ''KTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgt''@;'; put 'put ''MTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQq''@;'; put 'put ''Yjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVy''@;'; put 'put ''bygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJu''@;'; put 'put ''KDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkp''@;'; put 'put ''JiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5p''@;'; put 'put ''YWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9p''@;'; put 'put ''bnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+''@;'; put 'put ''MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08''@;'; put 'put ''MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNt''@;'; put 'put ''cG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVn''@;'; put 'put ''YXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBI''@;'; put 'put ''PWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihw''@;'; put 'put ''KXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBq''@;'; put 'put ''PTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9''@;'; put 'put ''PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXti''@;'; put 'put ''JiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVu''@;'; put 'put ''Z3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFr''@;'; put 'put ''fX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+''@;'; put 'put ''PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVx''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGco''@;'; put 'put ''MD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMg''@;'; put 'put ''aW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxy''@;'; put 'put ''ZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVk''@;'; put 'put ''U3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxw''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVk''@;'; put 'put ''TXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5y''@;'; put 'put ''ZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMu''@;'; put 'put ''cmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5w''@;'; put 'put ''b3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMu''@;'; put 'put ''bikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNh''@;'; put 'put ''bGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1l''@;'; put 'put ''KFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0''@;'; put 'put ''aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmlu''@;'; put 'put ''di5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3''@;'; put 'put ''IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMu''@;'; put 'put ''bik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0w''@;'; put 'put ''O1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBq''@;'; put 'put ''PTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1tw''@;'; put 'put ''Lmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5s''@;'; put 'put ''ZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixU''@;'; put 'put ''PTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9''@;'; put 'put ''PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09''@;'; put 'put ''cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpw''@;'; put 'put ''LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5Mihw''@;'; put 'put ''LGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0p''@;'; put 'put ''Pj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnBy''@;'; put 'put ''b3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBl''@;'; put 'put ''LmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIg''@;'; put 'put ''Yj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hy''@;'; put 'put ''bigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTsp''@;'; put 'put ''bS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2co''@;'; put 'put ''VWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMu''@;'; put 'put ''bSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEp''@;'; put 'put ''KXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2Zvcigw''@;'; put 'put ''PT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1h''@;'; put 'put ''ZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0''@;'; put 'put ''aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBqZShwKX0sQihqZSxTZSksamUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSxq''@;'; put 'put ''ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LGplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1sw''@;'; put 'put ''XT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5p''@;'; put 'put ''c3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0samUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChi''@;'; put 'put ''KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5p''@;'; put 'put ''YWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxqZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDk4NjEzOih1ZSxYLHkpPT57''@;'; put 'put ''dmFyIEk9eSg2NTY2NyksXz15KDMwNzE1KSxnPXkoMzcxOTYpLEI9eSgxNjUwOCksdz15KDE0MTA1KSxQPXkoNjcyMTEpLEY9eSgxMDU2OCksTz15KDI3MDU0KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbihVLFcsWSl7dmFyIHE7cT1VLnBhZGRpbmc/VS5wYWRkaW5nOlk/MTo0O3ZhciBu''@;'; put 'put ''ZSxlZT1JKFUpLEo9ZWUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoVy5sZW5ndGg+Snx8bmV3IEIoVykuY21wKGVlLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO25lPVk/RihuZXcgQihXKSxlZSk6dyhXLGVlKTt2YXIgaWU9Ty5hbGxvYyhKLW5lLmxl''@;'; put 'put ''bmd0aCk7aWYobmU9Ty5jb25jYXQoW2llLG5lXSxKKSw0PT09cSlyZXR1cm4gZnVuY3Rpb24geihLLFUpe3ZhciBXPUsubW9kdWx1cy5ieXRlTGVuZ3RoKCksWT1QKCJzaGExIikudXBkYXRlKE8uYWxsb2MoMCkpLmRpZ2VzdCgpLHE9WS5sZW5ndGg7aWYoMCE9PVVbMF0pdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJkZWNyeXB0aW9uIGVycm9yIik7dmFyIGVlPVUuc2xpY2UoMSxxKzEpLEo9VS5zbGljZShxKzEpLG5lPWcoZWUsXyhKLHEpKSxpZT1nKEosXyhuZSxXLXEtMSkpO2lmKGZ1bmN0aW9uIEwoSyxVKXtLPU8uZnJvbShLKSxVPU8uZnJvbShVKTt2YXIgVz0wLFk9Sy5sZW5ndGg7Sy5sZW5n''@;'; put 'put ''dGghPT1VLmxlbmd0aCYmKFcrKyxZPU1hdGgubWluKEsubGVuZ3RoLFUubGVuZ3RoKSk7Zm9yKHZhciBxPS0xOysrcTxZOylXKz1LW3FdXlVbcV07cmV0dXJuIFd9KFksaWUuc2xpY2UoMCxxKSkpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7Zm9yKHZhciBsZT1xOzA9PT1p''@;'; put 'put ''ZVtsZV07KWxlKys7aWYoMSE9PWllW2xlKytdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBpZS5zbGljZShsZSl9KGVlLG5lKTtpZigxPT09cSlyZXR1cm4gZnVuY3Rpb24gTihLLFUsVyl7Zm9yKHZhciBZPVUuc2xpY2UoMCwyKSxxPTIsZWU9MDswIT09VVtx''@;'; put 'put ''KytdOylpZihxPj1VLmxlbmd0aCl7ZWUrKzticmVha312YXIgSj1VLnNsaWNlKDIscS0xKTtpZigoIjAwMDIiIT09WS50b1N0cmluZygiaGV4IikmJiFXfHwiMDAwMSIhPT1ZLnRvU3RyaW5nKCJoZXgiKSYmVykmJmVlKyssSi5sZW5ndGg8OCYmZWUrKyxlZSl0aHJvdyBuZXcgRXJyb3IoImRl''@;'; put 'put ''Y3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gVS5zbGljZShxKX0oMCxuZSxZKTtpZigzPT09cSlyZXR1cm4gbmU7dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKX19LDg3MjY3Oih1ZSxYLHkpPT57dmFyIEk9eSg2NTY2NyksXz15KDMzNDIpLGc9eSg2NzIxMSksQj15KDMwNzE1KSx3''@;'; put 'put ''PXkoMzcxOTYpLFA9eSgxNjUwOCksRj15KDEwNTY4KSxPPXkoMTQxMDUpLHo9eSgyNzA1NCkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oVyxZLHEpe3ZhciBlZTtlZT1XLnBhZGRpbmc/Vy5wYWRkaW5nOnE/MTo0O3ZhciBuZSxKPUkoVyk7aWYoND09PWVlKW5lPWZ1bmN0aW9uIE4oVSxX''@;'; put 'put ''KXt2YXIgWT1VLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHE9Vy5sZW5ndGgsZWU9Zygic2hhMSIpLnVwZGF0ZSh6LmFsbG9jKDApKS5kaWdlc3QoKSxKPWVlLmxlbmd0aCxuZT0yKko7aWYocT5ZLW5lLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIGllPXouYWxsb2Mo''@;'; put 'put ''WS1xLW5lLTIpLGxlPVktSi0xLG1lPV8oSiksX2U9dyh6LmNvbmNhdChbZWUsaWUsei5hbGxvYygxLDEpLFddLGxlKSxCKG1lLGxlKSksVGU9dyhtZSxCKF9lLEopKTtyZXR1cm4gbmV3IFAoei5jb25jYXQoW3ouYWxsb2MoMSksVGUsX2VdLFkpKX0oSixZKTtlbHNlIGlmKDE9PT1lZSluZT1m''@;'; put 'put ''dW5jdGlvbiBMKFUsVyxZKXt2YXIgSixxPVcubGVuZ3RoLGVlPVUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYocT5lZS0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gSj1ZP3ouYWxsb2MoZWUtcS0zLDI1NSk6ZnVuY3Rpb24gSyhVKXtmb3IodmFyIEosVz16''@;'; put 'put ''LmFsbG9jVW5zYWZlKFUpLFk9MCxxPV8oMipVKSxlZT0wO1k8VTspZWU9PT1xLmxlbmd0aCYmKHE9XygyKlUpLGVlPTApLChKPXFbZWUrK10pJiYoV1tZKytdPUopO3JldHVybiBXfShlZS1xLTMpLG5ldyBQKHouY29uY2F0KFt6LmZyb20oWzAsWT8xOjJdKSxKLHouYWxsb2MoMSksV10sZWUp''@;'; put 'put ''KX0oSixZLHEpO2Vsc2V7aWYoMyE9PWVlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIik7aWYoKG5lPW5ldyBQKFkpKS5jbXAoSi5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9PKG5lLEopOkYobmUsSil9''@;'; put 'put ''fSwxMDU2ODoodWUsWCx5KT0+e3ZhciBJPXkoMTY1MDgpLF89eSgyNzA1NCkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCLHcpe3JldHVybiBfLmZyb20oQi50b1JlZChJLm1vbnQody5tb2R1bHVzKSkucmVkUG93KG5ldyBJKHcucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9B''@;'; put 'put ''cnJheSgpKX19LDM3MTk2OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbih5LEkpe2Zvcih2YXIgXz15Lmxlbmd0aCxnPS0xOysrZzxfOyl5W2ddXj1JW2ddO3JldHVybiB5fX0sMzM0MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST02NTUzNixCPXkoMjcwNTQpLkJ1ZmZlcix3PWdsb2Jh''@;'; put 'put ''bC5jcnlwdG98fGdsb2JhbC5tc0NyeXB0bzt1ZS5leHBvcnRzPXcmJncuZ2V0UmFuZG9tVmFsdWVzP2Z1bmN0aW9uIFAoRixPKXtpZihGPjQyOTQ5NjcyOTUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgej1CLmFsbG9jVW5zYWZl''@;'; put 'put ''KEYpO2lmKEY+MClpZihGPkkpZm9yKHZhciBOPTA7TjxGO04rPUkpdy5nZXRSYW5kb21WYWx1ZXMoei5zbGljZShOLE4rSSkpO2Vsc2Ugdy5nZXRSYW5kb21WYWx1ZXMoeik7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE8/cHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe08obnVsbCx6KX0p''@;'; put 'put ''Onp9OmZ1bmN0aW9uIGcoKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9fSw5NjgyOih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoKXt0aHJvdyBuZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgXz15KDI3MDU0''@;'; put 'put ''KSxnPXkoMzM0MiksQj1fLkJ1ZmZlcix3PV8ua01heExlbmd0aCxQPWdsb2JhbC5jcnlwdG98fGdsb2JhbC5tc0NyeXB0byxGPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24gTyhVLFcpe2lmKCJudW1iZXIiIT10eXBlb2YgVXx8VSE9VSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVz''@;'; put 'put ''dCBiZSBhIG51bWJlciIpO2lmKFU+Rnx8VTwwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYoVT53fHxVPlcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiB6KFUsVyxZKXtpZigibnVtYmVyIiE9dHlw''@;'; put 'put ''ZW9mIFV8fFUhPVUpdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVT5GfHxVPDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgdWludDMyIik7aWYoVStXPll8fFU+dyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFs''@;'; put 'put ''bCIpfWZ1bmN0aW9uIEwoVSxXLFkscSl7aWYocHJvY2Vzcy5icm93c2VyKXt2YXIgSj1uZXcgVWludDhBcnJheShVLmJ1ZmZlcixXLFkpO3JldHVybiBQLmdldFJhbmRvbVZhbHVlcyhKKSxxP3ZvaWQgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe3EobnVsbCxVKX0pOlV9aWYoIXEpcmV0''@;'; put 'put ''dXJuIGcoWSkuY29weShVLFcpLFU7ZyhZLGZ1bmN0aW9uKGllLGxlKXtpZihpZSlyZXR1cm4gcShpZSk7bGUuY29weShVLFcpLHEobnVsbCxVKX0pfVAmJlAuZ2V0UmFuZG9tVmFsdWVzfHwhcHJvY2Vzcy5icm93c2VyPyhYLnJhbmRvbUZpbGw9ZnVuY3Rpb24gTihVLFcsWSxxKXtpZighKEIu''@;'; put 'put ''aXNCdWZmZXIoVSl8fFUgaW5zdGFuY2VvZiBnbG9iYWwuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFcpcT1XLFc9MCxZPVUubGVuZ3RoO2Vsc2UgaWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFkpcT1ZLFk9VS5sZW5ndGgtVztlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBxKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIE8oVyxVLmxlbmd0aCkseihZLFcsVS5sZW5ndGgpLEwoVSxX''@;'; put 'put ''LFkscSl9LFgucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24gSyhVLFcsWSl7aWYodHlwZW9mIFc+InUiJiYoVz0wKSwhKEIuaXNCdWZmZXIoVSl8fFUgaW5zdGFuY2VvZiBnbG9iYWwuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZl''@;'; put 'put ''ciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIE8oVyxVLmxlbmd0aCksdm9pZCAwPT09WSYmKFk9VS5sZW5ndGgtVykseihZLFcsVS5sZW5ndGgpLEwoVSxXLFkpfSk6KFgucmFuZG9tRmlsbD1JLFgucmFuZG9tRmlsbFN5bmM9SSl9LDc0MDc1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXkoOTY1NiksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oSyl7dmFyIFU9W107Zm9yKHZhciBXIGluIEspVS5wdXNoKFcpO3JldHVybiBVfTt1ZS5leHBvcnRzPXo7dmFyIGc9T2JqZWN0LmNyZWF0ZSh5KDI3NjM3KSk7Zy5pbmhlcml0cz15KDcxOTkzKTt2YXIgQj15KDE5NjA5KSx3PXkoNDc4''@;'; put 'put ''NDkpO2cuaW5oZXJpdHMoeixCKTtmb3IodmFyIFA9Xyh3LnByb3RvdHlwZSksRj0wO0Y8UC5sZW5ndGg7RisrKXt2YXIgTz1QW0ZdO3oucHJvdG90eXBlW09dfHwoei5wcm90b3R5cGVbT109dy5wcm90b3R5cGVbT10pfWZ1bmN0aW9uIHooSyl7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0''@;'; put 'put ''dXJuIG5ldyB6KEspO0IuY2FsbCh0aGlzLEspLHcuY2FsbCh0aGlzLEspLEsmJiExPT09Sy5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLEsmJiExPT09Sy53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxLJiYhMT09PUsuYWxsb3dIYWxmT3Bl''@;'; put 'put ''biYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdGhpcy5vbmNlKCJlbmQiLE4pfWZ1bmN0aW9uIE4oKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fEkubmV4dFRpY2soTCx0aGlzKX1mdW5jdGlvbiBMKEspe0suZW5kKCl9T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KHoucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oSyl7dm9pZCAwPT09''@;'; put 'put ''dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUssdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syl9fSksei5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oSyxVKXt0aGlzLnB1c2go''@;'; put 'put ''bnVsbCksdGhpcy5lbmQoKSxJLm5leHRUaWNrKFUsSyl9fSwxODgyMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWc7dmFyIEk9eSgyOTA5KSxfPU9iamVjdC5jcmVhdGUoeSgyNzYzNykpO2Z1bmN0aW9uIGcoQil7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5l''@;'; put 'put ''dyBnKEIpO0kuY2FsbCh0aGlzLEIpfV8uaW5oZXJpdHM9eSg3MTk5MyksXy5pbmhlcml0cyhnLEkpLGcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oQix3LFApe1AobnVsbCxCKX19LDE5NjA5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTY1Nik7dWUuZXhwb3J0cz1p''@;'; put 'put ''ZTt2YXIgZyxfPXkoMjAwNTMpO2llLlJlYWRhYmxlU3RhdGU9bmUseSg0NDM1Nik7dmFyIHc9ZnVuY3Rpb24oeGUsdmUpe3JldHVybiB4ZS5saXN0ZW5lcnModmUpLmxlbmd0aH0sUD15KDE4MzQyKSxGPXkoMjY1NSkuQnVmZmVyLE89KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Yg''@;'; put 'put ''d2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxMPU9iamVjdC5jcmVhdGUoeSgyNzYzNykpO0wuaW5oZXJpdHM9eSg3MTk5Myk7dmFyIEs9eSg3OTgzOCksVT12b2lkIDA7VT1LJiZLLmRlYnVnbG9nP0suZGVidWdsb2co''@;'; put 'put ''InN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgcSxXPXkoMjc4MDkpLFk9eSgyMTUwOSk7TC5pbmhlcml0cyhpZSxQKTt2YXIgZWU9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gbmUoeGUsdmUpe3ZhciBYZT12ZSBpbnN0YW5jZW9mKGc9Z3x8''@;'; put 'put ''eSg3NDA3NSkpO3RoaXMub2JqZWN0TW9kZT0hISh4ZT14ZXx8e30pLm9iamVjdE1vZGUsWGUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXhlLnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIHplPXhlLmhpZ2hXYXRlck1hcmssRGU9eGUucmVhZGFibGVIaWdoV2F0ZXJNYXJr''@;'; put 'put ''O3RoaXMuaGlnaFdhdGVyTWFyaz16ZXx8MD09PXplP3plOlhlJiYoRGV8fDA9PT1EZSk/RGU6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5idWZmZXI9bmV3IFcsdGhpcy5sZW5ndGg9MCx0aGlz''@;'; put 'put ''LnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRh''@;'; put 'put ''YmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPXhlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhp''@;'; put 'put ''cy5lbmNvZGluZz1udWxsLHhlLmVuY29kaW5nJiYocXx8KHE9eSg3ODQ1NCkuSSksdGhpcy5kZWNvZGVyPW5ldyBxKHhlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPXhlLmVuY29kaW5nKX1mdW5jdGlvbiBpZSh4ZSl7aWYoZz1nfHx5KDc0MDc1KSwhKHRoaXMgaW5zdGFuY2VvZiBpZSkpcmV0''@;'; put 'put ''dXJuIG5ldyBpZSh4ZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgbmUoeGUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCx4ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS5yZWFkJiYodGhpcy5fcmVhZD14ZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgeGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ry''@;'; put 'put ''b3k9eGUuZGVzdHJveSkpLFAuY2FsbCh0aGlzKX1mdW5jdGlvbiBsZSh4ZSx2ZSxYZSx6ZSxEZSl7dmFyIE9lLEZlPXhlLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09dmU/KEZlLnJlYWRpbmc9ITEsZnVuY3Rpb24gcCh4ZSx2ZSl7aWYoIXZlLmVuZGVkKXtpZih2ZS5kZWNvZGVyKXt2''@;'; put 'put ''YXIgWGU9dmUuZGVjb2Rlci5lbmQoKTtYZSYmWGUubGVuZ3RoJiYodmUuYnVmZmVyLnB1c2goWGUpLHZlLmxlbmd0aCs9dmUub2JqZWN0TW9kZT8xOlhlLmxlbmd0aCl9dmUuZW5kZWQ9ITAsYih4ZSl9fSh4ZSxGZSkpOihEZXx8KE9lPWZ1bmN0aW9uIF9lKHhlLHZlKXt2YXIgWGU7cmV0dXJu''@;'; put 'put ''IWZ1bmN0aW9uIE4oeGUpe3JldHVybiBGLmlzQnVmZmVyKHhlKXx8eGUgaW5zdGFuY2VvZiBPfSh2ZSkmJiJzdHJpbmciIT10eXBlb2YgdmUmJnZvaWQgMCE9PXZlJiYheGUub2JqZWN0TW9kZSYmKFhlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSks''@;'; put 'put ''WGV9KEZlLHZlKSksT2U/eGUuZW1pdCgiZXJyb3IiLE9lKTpGZS5vYmplY3RNb2RlfHx2ZSYmdmUubGVuZ3RoPjA/KCJzdHJpbmciIT10eXBlb2YgdmUmJiFGZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodmUpIT09Ri5wcm90b3R5cGUmJih2ZT1mdW5jdGlvbiB6KHhlKXty''@;'; put 'put ''ZXR1cm4gRi5mcm9tKHhlKX0odmUpKSx6ZT9GZS5lbmRFbWl0dGVkP3hlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOm1lKHhlLEZlLHZlLCEwKTpGZS5lbmRlZD94ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVz''@;'; put 'put ''aCgpIGFmdGVyIEVPRiIpKTooRmUucmVhZGluZz0hMSxGZS5kZWNvZGVyJiYhWGU/KHZlPUZlLmRlY29kZXIud3JpdGUodmUpLEZlLm9iamVjdE1vZGV8fDAhPT12ZS5sZW5ndGg/bWUoeGUsRmUsdmUsITEpOkMoeGUsRmUpKTptZSh4ZSxGZSx2ZSwhMSkpKTp6ZXx8KEZlLnJlYWRpbmc9ITEp''@;'; put 'put ''KSxmdW5jdGlvbiBUZSh4ZSl7cmV0dXJuIXhlLmVuZGVkJiYoeGUubmVlZFJlYWRhYmxlfHx4ZS5sZW5ndGg8eGUuaGlnaFdhdGVyTWFya3x8MD09PXhlLmxlbmd0aCl9KEZlKX1mdW5jdGlvbiBtZSh4ZSx2ZSxYZSx6ZSl7dmUuZmxvd2luZyYmMD09PXZlLmxlbmd0aCYmIXZlLnN5bmM/KHhl''@;'; put 'put ''LmVtaXQoImRhdGEiLFhlKSx4ZS5yZWFkKDApKToodmUubGVuZ3RoKz12ZS5vYmplY3RNb2RlPzE6WGUubGVuZ3RoLHplP3ZlLmJ1ZmZlci51bnNoaWZ0KFhlKTp2ZS5idWZmZXIucHVzaChYZSksdmUubmVlZFJlYWRhYmxlJiZiKHhlKSksQyh4ZSx2ZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KGllLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oeGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLmRlc3Ryb3llZD14ZSl9fSksaWUucHJvdG90eXBlLmRlc3Ryb3k9WS5kZXN0cm95LGllLnByb3RvdHlwZS5fdW5kZXN0cm95PVkudW5kZXN0cm95LGllLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih4ZSx2ZSl7dGhpcy5wdXNoKG51bGwpLHZlKHhlKX0saWUucHJvdG90eXBlLnB1''@;'; put 'put ''c2g9ZnVuY3Rpb24oeGUsdmUpe3ZhciB6ZSxYZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBYZS5vYmplY3RNb2RlP3plPSEwOiJzdHJpbmciPT10eXBlb2YgeGUmJigodmU9dmV8fFhlLmRlZmF1bHRFbmNvZGluZykhPT1YZS5lbmNvZGluZyYmKHhlPUYuZnJvbSh4ZSx2ZSksdmU9IiIp''@;'; put 'put ''LHplPSEwKSxsZSh0aGlzLHhlLHZlLCExLHplKX0saWUucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oeGUpe3JldHVybiBsZSh0aGlzLHhlLG51bGwsITAsITEpfSxpZS5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2lu''@;'; put 'put ''Z30saWUucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKHhlKXtyZXR1cm4gcXx8KHE9eSg3ODQ1NCkuSSksdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPW5ldyBxKHhlKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXhlLHRoaXN9O2Z1bmN0aW9uIFYoeGUsdmUpe3JldHVy''@;'; put 'put ''biB4ZTw9MHx8MD09PXZlLmxlbmd0aCYmdmUuZW5kZWQ/MDp2ZS5vYmplY3RNb2RlPzE6eGUhPXhlP3ZlLmZsb3dpbmcmJnZlLmxlbmd0aD92ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDp2ZS5sZW5ndGg6KHhlPnZlLmhpZ2hXYXRlck1hcmsmJih2ZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9u''@;'; put 'put ''IGplKHhlKXtyZXR1cm4geGU+PTgzODg2MDg/eGU9ODM4ODYwODooeGUtLSx4ZXw9eGU+Pj4xLHhlfD14ZT4+PjIseGV8PXhlPj4+NCx4ZXw9eGU+Pj44LHhlfD14ZT4+PjE2LHhlKyspLHhlfSh4ZSkpLHhlPD12ZS5sZW5ndGg/eGU6dmUuZW5kZWQ/dmUubGVuZ3RoOih2ZS5uZWVkUmVhZGFi''@;'; put 'put ''bGU9ITAsMCkpfWZ1bmN0aW9uIGIoeGUpe3ZhciB2ZT14ZS5fcmVhZGFibGVTdGF0ZTt2ZS5uZWVkUmVhZGFibGU9ITEsdmUuZW1pdHRlZFJlYWRhYmxlfHwoVSgiZW1pdFJlYWRhYmxlIix2ZS5mbG93aW5nKSx2ZS5lbWl0dGVkUmVhZGFibGU9ITAsdmUuc3luYz9JLm5leHRUaWNrKHgseGUp''@;'; put 'put ''OngoeGUpKX1mdW5jdGlvbiB4KHhlKXtVKCJlbWl0IHJlYWRhYmxlIikseGUuZW1pdCgicmVhZGFibGUiKSxBKHhlKX1mdW5jdGlvbiBDKHhlLHZlKXt2ZS5yZWFkaW5nTW9yZXx8KHZlLnJlYWRpbmdNb3JlPSEwLEkubmV4dFRpY2soVCx4ZSx2ZSkpfWZ1bmN0aW9uIFQoeGUsdmUpe2Zvcih2''@;'; put 'put ''YXIgWGU9dmUubGVuZ3RoOyF2ZS5yZWFkaW5nJiYhdmUuZmxvd2luZyYmIXZlLmVuZGVkJiZ2ZS5sZW5ndGg8dmUuaGlnaFdhdGVyTWFyayYmKFUoIm1heWJlUmVhZE1vcmUgcmVhZCAwIikseGUucmVhZCgwKSxYZSE9PXZlLmxlbmd0aCk7KVhlPXZlLmxlbmd0aDt2ZS5yZWFkaW5nTW9yZT0h''@;'; put 'put ''MX1mdW5jdGlvbiBqKHhlKXtVKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSx4ZS5yZWFkKDApfWZ1bmN0aW9uIG0oeGUsdmUpe3ZlLnJlYWRpbmd8fChVKCJyZXN1bWUgcmVhZCAwIikseGUucmVhZCgwKSksdmUucmVzdW1lU2NoZWR1bGVkPSExLHZlLmF3YWl0RHJhaW49MCx4ZS5lbWl0''@;'; put 'put ''KCJyZXN1bWUiKSxBKHhlKSx2ZS5mbG93aW5nJiYhdmUucmVhZGluZyYmeGUucmVhZCgwKX1mdW5jdGlvbiBBKHhlKXt2YXIgdmU9eGUuX3JlYWRhYmxlU3RhdGU7Zm9yKFUoImZsb3ciLHZlLmZsb3dpbmcpO3ZlLmZsb3dpbmcmJm51bGwhPT14ZS5yZWFkKCk7KTt9ZnVuY3Rpb24gYWUoeGUs''@;'; put 'put ''dmUpe3JldHVybiAwPT09dmUubGVuZ3RoP251bGw6KHZlLm9iamVjdE1vZGU/WGU9dmUuYnVmZmVyLnNoaWZ0KCk6IXhlfHx4ZT49dmUubGVuZ3RoPyhYZT12ZS5kZWNvZGVyP3ZlLmJ1ZmZlci5qb2luKCIiKToxPT09dmUuYnVmZmVyLmxlbmd0aD92ZS5idWZmZXIuaGVhZC5kYXRhOnZlLmJ1''@;'; put 'put ''ZmZlci5jb25jYXQodmUubGVuZ3RoKSx2ZS5idWZmZXIuY2xlYXIoKSk6WGU9ZnVuY3Rpb24gdGUoeGUsdmUsWGUpe3ZhciB6ZTtyZXR1cm4geGU8dmUuaGVhZC5kYXRhLmxlbmd0aD8oemU9dmUuaGVhZC5kYXRhLnNsaWNlKDAseGUpLHZlLmhlYWQuZGF0YT12ZS5oZWFkLmRhdGEuc2xpY2Uo''@;'; put 'put ''eGUpKTp6ZT14ZT09PXZlLmhlYWQuZGF0YS5sZW5ndGg/dmUuc2hpZnQoKTpYZT9mdW5jdGlvbiBzZSh4ZSx2ZSl7dmFyIFhlPXZlLmhlYWQsemU9MSxEZT1YZS5kYXRhO2Zvcih4ZS09RGUubGVuZ3RoO1hlPVhlLm5leHQ7KXt2YXIgRmU9WGUuZGF0YSxPZT14ZT5GZS5sZW5ndGg/RmUubGVu''@;'; put 'put ''Z3RoOnhlO2lmKERlKz1PZT09PUZlLmxlbmd0aD9GZTpGZS5zbGljZSgwLHhlKSwwPT0oeGUtPU9lKSl7T2U9PT1GZS5sZW5ndGg/KCsremUsdmUuaGVhZD1YZS5uZXh0P1hlLm5leHQ6dmUudGFpbD1udWxsKToodmUuaGVhZD1YZSxYZS5kYXRhPUZlLnNsaWNlKE9lKSk7YnJlYWt9Kyt6ZX1y''@;'; put 'put ''ZXR1cm4gdmUubGVuZ3RoLT16ZSxEZX0oeGUsdmUpOmZ1bmN0aW9uIHdlKHhlLHZlKXt2YXIgWGU9Ri5hbGxvY1Vuc2FmZSh4ZSksemU9dmUuaGVhZCxEZT0xO2Zvcih6ZS5kYXRhLmNvcHkoWGUpLHhlLT16ZS5kYXRhLmxlbmd0aDt6ZT16ZS5uZXh0Oyl7dmFyIEZlPXplLmRhdGEsT2U9eGU+''@;'; put 'put ''RmUubGVuZ3RoP0ZlLmxlbmd0aDp4ZTtpZihGZS5jb3B5KFhlLFhlLmxlbmd0aC14ZSwwLE9lKSwwPT0oeGUtPU9lKSl7T2U9PT1GZS5sZW5ndGg/KCsrRGUsdmUuaGVhZD16ZS5uZXh0P3plLm5leHQ6dmUudGFpbD1udWxsKToodmUuaGVhZD16ZSx6ZS5kYXRhPUZlLnNsaWNlKE9lKSk7YnJl''@;'; put 'put ''YWt9KytEZX1yZXR1cm4gdmUubGVuZ3RoLT1EZSxYZX0oeGUsdmUpLHplfSh4ZSx2ZS5idWZmZXIsdmUuZGVjb2RlciksWGUpO3ZhciBYZX1mdW5jdGlvbiBVZSh4ZSl7dmFyIHZlPXhlLl9yZWFkYWJsZVN0YXRlO2lmKHZlLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignImVuZFJlYWRhYmxl''@;'; put 'put ''KCkiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7dmUuZW5kRW1pdHRlZHx8KHZlLmVuZGVkPSEwLEkubmV4dFRpY2soSmUsdmUseGUpKX1mdW5jdGlvbiBKZSh4ZSx2ZSl7IXhlLmVuZEVtaXR0ZWQmJjA9PT14ZS5sZW5ndGgmJih4ZS5lbmRFbWl0dGVkPSEwLHZlLnJlYWRhYmxlPSEx''@;'; put 'put ''LHZlLmVtaXQoImVuZCIpKX1mdW5jdGlvbiBvdCh4ZSx2ZSl7Zm9yKHZhciBYZT0wLHplPXhlLmxlbmd0aDtYZTx6ZTtYZSsrKWlmKHhlW1hlXT09PXZlKXJldHVybiBYZTtyZXR1cm4tMX1pZS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbih4ZSl7VSgicmVhZCIseGUpLHhlPXBhcnNlSW50KHhl''@;'; put 'put ''LDEwKTt2YXIgdmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxYZT14ZTtpZigwIT09eGUmJih2ZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT14ZSYmdmUubmVlZFJlYWRhYmxlJiYodmUubGVuZ3RoPj12ZS5oaWdoV2F0ZXJNYXJrfHx2ZS5lbmRlZCkpcmV0dXJuIFUoInJlYWQ6IGVtaXRSZWFkYWJs''@;'; put 'put ''ZSIsdmUubGVuZ3RoLHZlLmVuZGVkKSwwPT09dmUubGVuZ3RoJiZ2ZS5lbmRlZD9VZSh0aGlzKTpiKHRoaXMpLG51bGw7aWYoMD09PSh4ZT1WKHhlLHZlKSkmJnZlLmVuZGVkKXJldHVybiAwPT09dmUubGVuZ3RoJiZVZSh0aGlzKSxudWxsO3ZhciBEZSx6ZT12ZS5uZWVkUmVhZGFibGU7cmV0''@;'; put 'put ''dXJuIFUoIm5lZWQgcmVhZGFibGUiLHplKSwoMD09PXZlLmxlbmd0aHx8dmUubGVuZ3RoLXhlPHZlLmhpZ2hXYXRlck1hcmspJiZVKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsemU9ITApLHZlLmVuZGVkfHx2ZS5yZWFkaW5nP1UoInJlYWRpbmcgb3IgZW5kZWQiLHplPSExKTp6ZSYm''@;'; put 'put ''KFUoImRvIHJlYWQiKSx2ZS5yZWFkaW5nPSEwLHZlLnN5bmM9ITAsMD09PXZlLmxlbmd0aCYmKHZlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZCh2ZS5oaWdoV2F0ZXJNYXJrKSx2ZS5zeW5jPSExLHZlLnJlYWRpbmd8fCh4ZT1WKFhlLHZlKSkpLG51bGw9PT0oRGU9eGU+MD9hZSh4ZSx2''@;'; put 'put ''ZSk6bnVsbCk/KHZlLm5lZWRSZWFkYWJsZT0hMCx4ZT0wKTp2ZS5sZW5ndGgtPXhlLDA9PT12ZS5sZW5ndGgmJih2ZS5lbmRlZHx8KHZlLm5lZWRSZWFkYWJsZT0hMCksWGUhPT14ZSYmdmUuZW5kZWQmJlVlKHRoaXMpKSxudWxsIT09RGUmJnRoaXMuZW1pdCgiZGF0YSIsRGUpLERlfSxpZS5w''@;'; put 'put ''cm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oeGUpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LGllLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKHhlLHZlKXt2YXIgWGU9dGhpcyx6ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaCh6''@;'; put 'put ''ZS5waXBlc0NvdW50KXtjYXNlIDA6emUucGlwZXM9eGU7YnJlYWs7Y2FzZSAxOnplLnBpcGVzPVt6ZS5waXBlcyx4ZV07YnJlYWs7ZGVmYXVsdDp6ZS5waXBlcy5wdXNoKHhlKX16ZS5waXBlc0NvdW50Kz0xLFUoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsemUucGlwZXNDb3VudCx2ZSk7dmFy''@;'; put 'put ''IEZlPXZlJiYhMT09PXZlLmVuZHx8eGU9PT1wcm9jZXNzLnN0ZG91dHx8eGU9PT1wcm9jZXNzLnN0ZGVycj9NdDpJZTtmdW5jdGlvbiBJZSgpe1UoIm9uZW5kIikseGUuZW5kKCl9emUuZW5kRW1pdHRlZD9JLm5leHRUaWNrKEZlKTpYZS5vbmNlKCJlbmQiLEZlKSx4ZS5vbigidW5waXBlIixm''@;'; put 'put ''dW5jdGlvbiBPZShEdCxpdCl7VSgib251bnBpcGUiKSxEdD09PVhlJiZpdCYmITE9PT1pdC5oYXNVbnBpcGVkJiYoaXQuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiBBZSgpe1UoImNsZWFudXAiKSx4ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHVuKSx4ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNo''@;'; put 'put ''Iix5dCkseGUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixWZSkseGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixRZSkseGUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsT2UpLFhlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEllKSxYZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixNdCksWGUucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoImRhdGEiLG50KSxrZT0hMCx6ZS5hd2FpdERyYWluJiYoIXhlLl93cml0YWJsZVN0YXRlfHx4ZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZWZSgpfSgpKX0pO3ZhciBWZT1mdW5jdGlvbiBIKHhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdmU9eGUuX3JlYWRhYmxlU3RhdGU7''@;'; put 'put ''VSgicGlwZU9uRHJhaW4iLHZlLmF3YWl0RHJhaW4pLHZlLmF3YWl0RHJhaW4mJnZlLmF3YWl0RHJhaW4tLSwwPT09dmUuYXdhaXREcmFpbiYmdyh4ZSwiZGF0YSIpJiYodmUuZmxvd2luZz0hMCxBKHhlKSl9fShYZSk7eGUub24oImRyYWluIixWZSk7dmFyIGtlPSExLF90PSExO2Z1bmN0aW9u''@;'; put 'put ''IG50KER0KXtVKCJvbmRhdGEiKSxfdD0hMSwhMT09PXhlLndyaXRlKER0KSYmIV90JiYoKDE9PT16ZS5waXBlc0NvdW50JiZ6ZS5waXBlcz09PXhlfHx6ZS5waXBlc0NvdW50PjEmJi0xIT09b3QoemUucGlwZXMseGUpKSYmIWtlJiYoVSgiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIix6''@;'; put 'put ''ZS5hd2FpdERyYWluKSx6ZS5hd2FpdERyYWluKyssX3Q9ITApLFhlLnBhdXNlKCkpfWZ1bmN0aW9uIFFlKER0KXtVKCJvbmVycm9yIixEdCksTXQoKSx4ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFFlKSwwPT09dyh4ZSwiZXJyb3IiKSYmeGUuZW1pdCgiZXJyb3IiLER0KX1mdW5jdGlvbiB1''@;'; put 'put ''bigpe3hlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHl0KSxNdCgpfWZ1bmN0aW9uIHl0KCl7VSgib25maW5pc2giKSx4ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHVuKSxNdCgpfWZ1bmN0aW9uIE10KCl7VSgidW5waXBlIiksWGUudW5waXBlKHhlKX1yZXR1cm4gWGUub24oImRhdGEiLG50''@;'; put 'put ''KSxmdW5jdGlvbiBKKHhlLHZlLFhlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgeGUucHJlcGVuZExpc3RlbmVyKXJldHVybiB4ZS5wcmVwZW5kTGlzdGVuZXIodmUsWGUpO3hlLl9ldmVudHMmJnhlLl9ldmVudHNbdmVdP18oeGUuX2V2ZW50c1t2ZV0pP3hlLl9ldmVudHNbdmVdLnVuc2hpZnQo''@;'; put 'put ''WGUpOnhlLl9ldmVudHNbdmVdPVtYZSx4ZS5fZXZlbnRzW3ZlXV06eGUub24odmUsWGUpfSh4ZSwiZXJyb3IiLFFlKSx4ZS5vbmNlKCJjbG9zZSIsdW4pLHhlLm9uY2UoImZpbmlzaCIseXQpLHhlLmVtaXQoInBpcGUiLFhlKSx6ZS5mbG93aW5nfHwoVSgicGlwZSByZXN1bWUiKSxYZS5yZXN1''@;'; put 'put ''bWUoKSkseGV9LGllLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oeGUpe3ZhciB2ZT10aGlzLl9yZWFkYWJsZVN0YXRlLFhlPXtoYXNVbnBpcGVkOiExfTtpZigwPT09dmUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09dmUucGlwZXNDb3VudClyZXR1cm4geGUmJnhlIT09dmUucGlw''@;'; put 'put ''ZXN8fCh4ZXx8KHhlPXZlLnBpcGVzKSx2ZS5waXBlcz1udWxsLHZlLnBpcGVzQ291bnQ9MCx2ZS5mbG93aW5nPSExLHhlJiZ4ZS5lbWl0KCJ1bnBpcGUiLHRoaXMsWGUpKSx0aGlzO2lmKCF4ZSl7dmFyIHplPXZlLnBpcGVzLERlPXZlLnBpcGVzQ291bnQ7dmUucGlwZXM9bnVsbCx2ZS5waXBl''@;'; put 'put ''c0NvdW50PTAsdmUuZmxvd2luZz0hMTtmb3IodmFyIEZlPTA7RmU8RGU7RmUrKyl6ZVtGZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIE9lPW90KHZlLnBpcGVzLHhlKTtyZXR1cm4tMT09PU9lfHwodmUucGlwZXMuc3BsaWNlKE9lLDEpLHZl''@;'; put 'put ''LnBpcGVzQ291bnQtPTEsMT09PXZlLnBpcGVzQ291bnQmJih2ZS5waXBlcz12ZS5waXBlc1swXSkseGUuZW1pdCgidW5waXBlIix0aGlzLFhlKSksdGhpc30saWUucHJvdG90eXBlLmFkZExpc3RlbmVyPWllLnByb3RvdHlwZS5vbj1mdW5jdGlvbih4ZSx2ZSl7dmFyIFhlPVAucHJvdG90eXBl''@;'; put 'put ''Lm9uLmNhbGwodGhpcyx4ZSx2ZSk7aWYoImRhdGEiPT09eGUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09eGUpe3ZhciB6ZT10aGlzLl9yZWFkYWJsZVN0YXRlOyF6ZS5lbmRFbWl0dGVkJiYhemUucmVhZGFibGVM''@;'; put 'put ''aXN0ZW5pbmcmJih6ZS5yZWFkYWJsZUxpc3RlbmluZz16ZS5uZWVkUmVhZGFibGU9ITAsemUuZW1pdHRlZFJlYWRhYmxlPSExLHplLnJlYWRpbmc/emUubGVuZ3RoJiZiKHRoaXMpOkkubmV4dFRpY2soaix0aGlzKSl9cmV0dXJuIFhlfSxpZS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIHhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHhlLmZsb3dpbmd8fChVKCJyZXN1bWUiKSx4ZS5mbG93aW5nPSEwLGZ1bmN0aW9uIEUoeGUsdmUpe3ZlLnJlc3VtZVNjaGVkdWxlZHx8KHZlLnJlc3VtZVNjaGVkdWxlZD0hMCxJLm5leHRUaWNrKG0seGUsdmUpKX0odGhpcyx4ZSkp''@;'; put 'put ''LHRoaXN9LGllLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBVKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihVKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUu''@;'; put 'put ''Zmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXN9LGllLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHhlKXt2YXIgdmU9dGhpcyxYZT10aGlzLl9yZWFkYWJsZVN0YXRlLHplPSExO2Zvcih2YXIgRGUgaW4geGUub24oImVuZCIsZnVuY3Rpb24oKXtpZihVKCJ3cmFwcGVkIGVuZCIp''@;'; put 'put ''LFhlLmRlY29kZXImJiFYZS5lbmRlZCl7dmFyIE9lPVhlLmRlY29kZXIuZW5kKCk7T2UmJk9lLmxlbmd0aCYmdmUucHVzaChPZSl9dmUucHVzaChudWxsKX0pLHhlLm9uKCJkYXRhIixmdW5jdGlvbihPZSl7VSgid3JhcHBlZCBkYXRhIiksWGUuZGVjb2RlciYmKE9lPVhlLmRlY29kZXIud3Jp''@;'; put 'put ''dGUoT2UpKSxYZS5vYmplY3RNb2RlJiZudWxsPT1PZXx8IShYZS5vYmplY3RNb2RlfHxPZSYmT2UubGVuZ3RoKXx8dmUucHVzaChPZSl8fCh6ZT0hMCx4ZS5wYXVzZSgpKX0pLHhlKXZvaWQgMD09PXRoaXNbRGVdJiYiZnVuY3Rpb24iPT10eXBlb2YgeGVbRGVdJiYodGhpc1tEZV09ZnVuY3Rp''@;'; put 'put ''b24oT2Upe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB4ZVtPZV0uYXBwbHkoeGUsYXJndW1lbnRzKX19KERlKSk7Zm9yKHZhciBGZT0wO0ZlPGVlLmxlbmd0aDtGZSsrKXhlLm9uKGVlW0ZlXSx0aGlzLmVtaXQuYmluZCh0aGlzLGVlW0ZlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9u''@;'; put 'put ''KE9lKXtVKCJ3cmFwcGVkIF9yZWFkIixPZSksemUmJih6ZT0hMSx4ZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpZS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxpZS5fZnJvbUxpc3Q9YWV9LDI5MDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1CO3ZhciBJPXkoNzQwNzUpLF89T2JqZWN0LmNyZWF0ZSh5KDI3NjM3KSk7ZnVuY3Rpb24gZyhGLE8pe3ZhciB6PXRoaXMuX3RyYW5zZm9ybVN0''@;'; put 'put ''YXRlO3oudHJhbnNmb3JtaW5nPSExO3ZhciBOPXoud3JpdGVjYjtpZighTilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJ3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7ei53cml0ZWNodW5rPW51bGwsei53cml0ZWNiPW51bGwsbnVsbCE9TyYmdGhp''@;'; put 'put ''cy5wdXNoKE8pLE4oRik7dmFyIEw9dGhpcy5fcmVhZGFibGVTdGF0ZTtMLnJlYWRpbmc9ITEsKEwubmVlZFJlYWRhYmxlfHxMLmxlbmd0aDxMLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEwuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gQihGKXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSly''@;'; put 'put ''ZXR1cm4gbmV3IEIoRik7SS5jYWxsKHRoaXMsRiksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOmcuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEYmJigiZnVuY3Rpb24iPT10eXBlb2YgRi50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09Ri50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBGLmZsdXNoJiYodGhpcy5fZmx1''@;'; put 'put ''c2g9Ri5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsdyl9ZnVuY3Rpb24gdygpe3ZhciBGPXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKE8seil7UChGLE8seil9KTpQKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBQKEYsTyx6KXtp''@;'; put 'put ''ZihPKXJldHVybiBGLmVtaXQoImVycm9yIixPKTtpZihudWxsIT16JiZGLnB1c2goeiksRi5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZihGLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zv''@;'; put 'put ''cm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nIik7cmV0dXJuIEYucHVzaChudWxsKX1fLmluaGVyaXRzPXkoNzE5OTMpLF8uaW5oZXJpdHMoQixJKSxCLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYsTyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsSS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsRixPKX0sQi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihGLE8seil7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LEIu''@;'; put 'put ''cHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihGLE8seil7dmFyIE49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoTi53cml0ZWNiPXosTi53cml0ZWNodW5rPUYsTi53cml0ZWVuY29kaW5nPU8sIU4udHJhbnNmb3JtaW5nKXt2YXIgTD10aGlzLl9yZWFkYWJsZVN0YXRlOyhOLm5lZWRUcmFuc2Zv''@;'; put 'put ''cm18fEwubmVlZFJlYWRhYmxlfHxMLmxlbmd0aDxMLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEwuaGlnaFdhdGVyTWFyayl9fSxCLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihGKXt2YXIgTz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09Ty53cml0ZWNodW5rJiZPLndyaXRlY2Im''@;'; put 'put ''JiFPLnRyYW5zZm9ybWluZz8oTy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKE8ud3JpdGVjaHVuayxPLndyaXRlZW5jb2RpbmcsTy5hZnRlclRyYW5zZm9ybSkpOk8ubmVlZFRyYW5zZm9ybT0hMH0sQi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRixPKXt2YXIgej10aGlz''@;'; put 'put ''O0kucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxGLGZ1bmN0aW9uKE4pe08oTiksei5lbWl0KCJjbG9zZSIpfSl9fSw0Nzg0OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk2NTYpO2Z1bmN0aW9uIGcoRSl7dmFyIG09dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5''@;'; put 'put ''PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gaihFLG0sQSl7dmFyIGFlPUUuZW50cnk7Zm9yKEUuZW50cnk9bnVsbDthZTspe3ZhciB0ZT1hZS5jYWxsYmFjazttLnBlbmRpbmdjYi0tLHRlKEEpLGFlPWFlLm5leHR9bS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1FfSht''@;'; put 'put ''LEUpfX11ZS5leHBvcnRzPWVlO3ZhciB3LEI9IXByb2Nlc3MuYnJvd3NlciYmWyJ2MC4xMCIsInYwLjkuIl0uaW5kZXhPZihwcm9jZXNzLnZlcnNpb24uc2xpY2UoMCw1KSk+LTE/c2V0SW1tZWRpYXRlOkkubmV4dFRpY2s7ZWUuV3JpdGFibGVTdGF0ZT1ZO3ZhciBQPU9iamVjdC5jcmVhdGUo''@;'; put 'put ''eSgyNzYzNykpO1AuaW5oZXJpdHM9eSg3MTk5Myk7dmFyIHEsRj17ZGVwcmVjYXRlOnkoMzM5OCl9LE89eSgxODM0Miksej15KDI2NTUpLkJ1ZmZlcixOPSh0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5V''@;'; put 'put ''aW50OEFycmF5fHxmdW5jdGlvbigpe30sVT15KDIxNTA5KTtmdW5jdGlvbiBXKCl7fWZ1bmN0aW9uIFkoRSxtKXt3PXd8fHkoNzQwNzUpO3ZhciBBPW0gaW5zdGFuY2VvZiB3O3RoaXMub2JqZWN0TW9kZT0hIShFPUV8fHt9KS5vYmplY3RNb2RlLEEmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5v''@;'; put 'put ''YmplY3RNb2RlfHwhIUUud3JpdGFibGVPYmplY3RNb2RlKTt2YXIgYWU9RS5oaWdoV2F0ZXJNYXJrLHRlPUUud3JpdGFibGVIaWdoV2F0ZXJNYXJrO3RoaXMuaGlnaFdhdGVyTWFyaz1hZXx8MD09PWFlP2FlOkEmJih0ZXx8MD09PXRlKT90ZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhp''@;'; put 'put ''cy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmlu''@;'; put 'put ''Z3M9ISghMT09PUUuZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9RS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndy''@;'; put 'put ''aXRlPWZ1bmN0aW9uKFVlKXshZnVuY3Rpb24gU2UoRSxtKXt2YXIgQT1FLl93cml0YWJsZVN0YXRlLGFlPUEuc3luYyx0ZT1BLndyaXRlY2I7aWYoZnVuY3Rpb24gVGUoRSl7RS53cml0aW5nPSExLEUud3JpdGVjYj1udWxsLEUubGVuZ3RoLT1FLndyaXRlbGVuLEUud3JpdGVsZW49MH0oQSks''@;'; put 'put ''bSkhZnVuY3Rpb24gX2UoRSxtLEEsYWUsdGUpey0tbS5wZW5kaW5nY2IsQT8oSS5uZXh0VGljayh0ZSxhZSksSS5uZXh0VGljayhULEUsbSksRS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsRS5lbWl0KCJlcnJvciIsYWUpKToodGUoYWUpLEUuX3dyaXRhYmxlU3RhdGUuZXJyb3JF''@;'; put 'put ''bWl0dGVkPSEwLEUuZW1pdCgiZXJyb3IiLGFlKSxUKEUsbSkpfShFLEEsYWUsbSx0ZSk7ZWxzZXt2YXIgc2U9YihBKTshc2UmJiFBLmNvcmtlZCYmIUEuYnVmZmVyUHJvY2Vzc2luZyYmQS5idWZmZXJlZFJlcXVlc3QmJnAoRSxBKSxhZT9CKGplLEUsQSxzZSx0ZSk6amUoRSxBLHNlLHRlKX19''@;'; put 'put ''KG0sVWUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZm''@;'; put 'put ''ZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBnKHRoaXMpfWZ1bmN0aW9uIGVlKEUpe2lmKHc9d3x8eSg3NDA3NSksIShxLmNhbGwoZWUsdGhpcyl8fHRoaXMgaW5zdGFuY2VvZiB3KSlyZXR1cm4gbmV3IGVlKEUpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3''@;'; put 'put ''IFkoRSx0aGlzKSx0aGlzLndyaXRhYmxlPSEwLEUmJigiZnVuY3Rpb24iPT10eXBlb2YgRS53cml0ZSYmKHRoaXMuX3dyaXRlPUUud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBFLndyaXRldiYmKHRoaXMuX3dyaXRldj1FLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIEUuZGVzdHJveSYm''@;'; put 'put ''KHRoaXMuX2Rlc3Ryb3k9RS5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgRS5maW5hbCYmKHRoaXMuX2ZpbmFsPUUuZmluYWwpKSxPLmNhbGwodGhpcyl9ZnVuY3Rpb24gbWUoRSxtLEEsYWUsdGUsc2Usd2Upe20ud3JpdGVsZW49YWUsbS53cml0ZWNiPXdlLG0ud3JpdGluZz0hMCxtLnN5''@;'; put 'put ''bmM9ITAsQT9FLl93cml0ZXYodGUsbS5vbndyaXRlKTpFLl93cml0ZSh0ZSxzZSxtLm9ud3JpdGUpLG0uc3luYz0hMX1mdW5jdGlvbiBqZShFLG0sQSxhZSl7QXx8ZnVuY3Rpb24gVihFLG0pezA9PT1tLmxlbmd0aCYmbS5uZWVkRHJhaW4mJihtLm5lZWREcmFpbj0hMSxFLmVtaXQoImRyYWlu''@;'; put 'put ''IikpfShFLG0pLG0ucGVuZGluZ2NiLS0sYWUoKSxUKEUsbSl9ZnVuY3Rpb24gcChFLG0pe20uYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgQT1tLmJ1ZmZlcmVkUmVxdWVzdDtpZihFLl93cml0ZXYmJkEmJkEubmV4dCl7dmFyIHRlPW5ldyBBcnJheShtLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxz''@;'; put 'put ''ZT1tLmNvcmtlZFJlcXVlc3RzRnJlZTtzZS5lbnRyeT1BO2Zvcih2YXIgd2U9MCxVZT0hMDtBOyl0ZVt3ZV09QSxBLmlzQnVmfHwoVWU9ITEpLEE9QS5uZXh0LHdlKz0xO3RlLmFsbEJ1ZmZlcnM9VWUsbWUoRSxtLCEwLG0ubGVuZ3RoLHRlLCIiLHNlLmZpbmlzaCksbS5wZW5kaW5nY2IrKyxt''@;'; put 'put ''Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxzZS5uZXh0PyhtLmNvcmtlZFJlcXVlc3RzRnJlZT1zZS5uZXh0LHNlLm5leHQ9bnVsbCk6bS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGcobSksbS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtBOyl7dmFyIEplPUEuY2h1bms7aWYo''@;'; put 'put ''bWUoRSxtLCExLG0ub2JqZWN0TW9kZT8xOkplLmxlbmd0aCxKZSxBLmVuY29kaW5nLEEuY2FsbGJhY2spLEE9QS5uZXh0LG0uYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSxtLndyaXRpbmcpYnJlYWt9bnVsbD09PUEmJihtLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9bS5idWZmZXJlZFJlcXVl''@;'; put 'put ''c3Q9QSxtLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gYihFKXtyZXR1cm4gRS5lbmRpbmcmJjA9PT1FLmxlbmd0aCYmbnVsbD09PUUuYnVmZmVyZWRSZXF1ZXN0JiYhRS5maW5pc2hlZCYmIUUud3JpdGluZ31mdW5jdGlvbiB4KEUsbSl7RS5fZmluYWwoZnVuY3Rpb24oQSl7bS5wZW5k''@;'; put 'put ''aW5nY2ItLSxBJiZFLmVtaXQoImVycm9yIixBKSxtLnByZWZpbmlzaGVkPSEwLEUuZW1pdCgicHJlZmluaXNoIiksVChFLG0pfSl9ZnVuY3Rpb24gVChFLG0pe3ZhciBBPWIobSk7cmV0dXJuIEEmJihmdW5jdGlvbiBDKEUsbSl7IW0ucHJlZmluaXNoZWQmJiFtLmZpbmFsQ2FsbGVkJiYoImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIEUuX2ZpbmFsPyhtLnBlbmRpbmdjYisrLG0uZmluYWxDYWxsZWQ9ITAsSS5uZXh0VGljayh4LEUsbSkpOihtLnByZWZpbmlzaGVkPSEwLEUuZW1pdCgicHJlZmluaXNoIikpKX0oRSxtKSwwPT09bS5wZW5kaW5nY2ImJihtLmZpbmlzaGVkPSEwLEUuZW1pdCgiZmlu''@;'; put 'put ''aXNoIikpKSxBfVAuaW5oZXJpdHMoZWUsTyksWS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBtPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LEE9W107bTspQS5wdXNoKG0pLG09bS5uZXh0O3JldHVybiBBfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''WS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpGLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1j''@;'; put 'put ''YXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhxPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShlZSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKEUpe3JldHVybiEhcS5jYWxsKHRoaXMsRSl8fHRoaXM9PT1lZSYmRSYmRS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFl9fSkpOnE9ZnVuY3Rpb24oRSl7cmV0dXJuIEUgaW5zdGFuY2VvZiB0aGlz''@;'; put 'put ''fSxlZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX0sZWUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEUsbSxBKXt2YXIgYWU9dGhpcy5fd3JpdGFibGVTdGF0ZSx0ZT0hMSxzZT0hYWUu''@;'; put 'put ''b2JqZWN0TW9kZSYmZnVuY3Rpb24gSyhFKXtyZXR1cm4gei5pc0J1ZmZlcihFKXx8RSBpbnN0YW5jZW9mIE59KEUpO3JldHVybiBzZSYmIXouaXNCdWZmZXIoRSkmJihFPWZ1bmN0aW9uIEwoRSl7cmV0dXJuIHouZnJvbShFKX0oRSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBtJiYoQT1tLG09bnVs''@;'; put 'put ''bCksc2U/bT0iYnVmZmVyIjptfHwobT1hZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBBJiYoQT1XKSxhZS5lbmRlZD9mdW5jdGlvbiBKKEUsbSl7dmFyIEE9bmV3IEVycm9yKCJ3cml0ZSBhZnRlciBlbmQiKTtFLmVtaXQoImVycm9yIixBKSxJLm5leHRUaWNrKG0sQSl9''@;'; put 'put ''KHRoaXMsQSk6KHNlfHxmdW5jdGlvbiBuZShFLG0sQSxhZSl7dmFyIHRlPSEwLHNlPSExO3JldHVybiBudWxsPT09QT9zZT1uZXcgVHlwZUVycm9yKCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIpOiJzdHJpbmciIT10eXBlb2YgQSYmdm9pZCAwIT09QSYmIW0ub2JqZWN0''@;'; put 'put ''TW9kZSYmKHNlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksc2UmJihFLmVtaXQoImVycm9yIixzZSksSS5uZXh0VGljayhhZSxzZSksdGU9ITEpLHRlfSh0aGlzLGFlLEUsQSkpJiYoYWUucGVuZGluZ2NiKyssdGU9ZnVuY3Rpb24gbGUoRSxtLEEs''@;'; put 'put ''YWUsdGUsc2Upe2lmKCFBKXt2YXIgd2U9ZnVuY3Rpb24gaWUoRSxtLEEpe3JldHVybiFFLm9iamVjdE1vZGUmJiExIT09RS5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIG0mJihtPXouZnJvbShtLEEpKSxtfShtLGFlLHRlKTthZSE9PXdlJiYoQT0hMCx0ZT0iYnVmZmVyIixhZT13''@;'; put 'put ''ZSl9dmFyIFVlPW0ub2JqZWN0TW9kZT8xOmFlLmxlbmd0aDttLmxlbmd0aCs9VWU7dmFyIEplPW0ubGVuZ3RoPG0uaGlnaFdhdGVyTWFyaztpZihKZXx8KG0ubmVlZERyYWluPSEwKSxtLndyaXRpbmd8fG0uY29ya2VkKXt2YXIgb3Q9bS5sYXN0QnVmZmVyZWRSZXF1ZXN0O20ubGFzdEJ1ZmZl''@;'; put 'put ''cmVkUmVxdWVzdD17Y2h1bms6YWUsZW5jb2Rpbmc6dGUsaXNCdWY6QSxjYWxsYmFjazpzZSxuZXh0Om51bGx9LG90P290Lm5leHQ9bS5sYXN0QnVmZmVyZWRSZXF1ZXN0Om0uYnVmZmVyZWRSZXF1ZXN0PW0ubGFzdEJ1ZmZlcmVkUmVxdWVzdCxtLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVs''@;'; put 'put ''c2UgbWUoRSxtLCExLFVlLGFlLHRlLHNlKTtyZXR1cm4gSmV9KHRoaXMsYWUsc2UsRSxtLEEpKSx0ZX0sZWUucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxlZS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5fd3Jp''@;'; put 'put ''dGFibGVTdGF0ZTtFLmNvcmtlZCYmKEUuY29ya2VkLS0sIUUud3JpdGluZyYmIUUuY29ya2VkJiYhRS5idWZmZXJQcm9jZXNzaW5nJiZFLmJ1ZmZlcmVkUmVxdWVzdCYmcCh0aGlzLEUpKX0sZWUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihtKXtpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIG0mJihtPW0udG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigobSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPW0sdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGVlLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLGVlLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oRSxtLEEpe0EobmV3IEVycm9yKCJfd3JpdGUoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LGVlLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsZWUu''@;'; put 'put ''cHJvdG90eXBlLmVuZD1mdW5jdGlvbihFLG0sQSl7dmFyIGFlPXRoaXMuX3dyaXRhYmxlU3RhdGU7ImZ1bmN0aW9uIj09dHlwZW9mIEU/KEE9RSxFPW51bGwsbT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgbSYmKEE9bSxtPW51bGwpLG51bGwhPUUmJnRoaXMud3JpdGUoRSxtKSxhZS5jb3Jr''@;'; put 'put ''ZWQmJihhZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxhZS5lbmRpbmd8fGZ1bmN0aW9uIEgoRSxtLEEpe20uZW5kaW5nPSEwLFQoRSxtKSxBJiYobS5maW5pc2hlZD9JLm5leHRUaWNrKEEpOkUub25jZSgiZmluaXNoIixBKSksbS5lbmRlZD0hMCxFLndyaXRhYmxlPSExfSh0aGlzLGFlLEEp''@;'; put 'put ''fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZWUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihFKXt0aGlzLl93cml0YWJsZVN0''@;'; put 'put ''YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9RSl9fSksZWUucHJvdG90eXBlLmRlc3Ryb3k9VS5kZXN0cm95LGVlLnByb3RvdHlwZS5fdW5kZXN0cm95PVUudW5kZXN0cm95LGVlLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihFLG0pe3RoaXMuZW5kKCksbShFKX19LDI3''@;'; put 'put ''ODA5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBfPXkoMjY1NSkuQnVmZmVyLGc9eSgxNTM0MCk7ZnVuY3Rpb24gQih3LFAsRil7dy5jb3B5KFAsRil9dWUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoKXsoZnVuY3Rpb24gSSh3LFApe2lmKCEodyBpbnN0YW5jZW9mIFApKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyx3KSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiB3LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYpe3ZhciBPPXtkYXRhOkYsbmV4dDpu''@;'; put 'put ''dWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PU86dGhpcy5oZWFkPU8sdGhpcy50YWlsPU8sKyt0aGlzLmxlbmd0aH0sdy5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihGKXt2YXIgTz17ZGF0YTpGLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9''@;'; put 'put ''TyksdGhpcy5oZWFkPU8sKyt0aGlzLmxlbmd0aH0sdy5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBGPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0t''@;'; put 'put ''dGhpcy5sZW5ndGgsRn19LHcucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LHcucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oRil7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgTz10aGlzLmhlYWQsej0i''@;'; put 'put ''IitPLmRhdGE7Tz1PLm5leHQ7KXorPUYrTy5kYXRhO3JldHVybiB6fSx3LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oRil7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBfLmFsbG9jKDApO2Zvcih2YXIgTz1fLmFsbG9jVW5zYWZlKEY+Pj4wKSx6PXRoaXMuaGVhZCxOPTA7ejspQih6LmRh''@;'; put 'put ''dGEsTyxOKSxOKz16LmRhdGEubGVuZ3RoLHo9ei5uZXh0O3JldHVybiBPfSx3fSgpLGcmJmcuaW5zcGVjdCYmZy5pbnNwZWN0LmN1c3RvbSYmKHVlLmV4cG9ydHMucHJvdG90eXBlW2cuaW5zcGVjdC5jdXN0b21dPWZ1bmN0aW9uKCl7dmFyIHc9Zy5pbnNwZWN0KHtsZW5ndGg6dGhpcy5sZW5n''@;'; put 'put ''dGh9KTtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKyIgIit3fSl9LDIxNTA5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTY1Nik7ZnVuY3Rpb24gQih3LFApe3cuZW1pdCgiZXJyb3IiLFApfXVlLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24gXyh3LFApe3ZhciBGPXRo''@;'; put 'put ''aXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oUD9QKHcpOncmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUu''@;'; put 'put ''ZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsSS5uZXh0VGljayhCLHRoaXMsdykpOkkubmV4dFRpY2soQix0aGlzLHcpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93''@;'; put 'put ''cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3kod3x8bnVsbCxmdW5jdGlvbihOKXshUCYmTj9GLl93cml0YWJsZVN0YXRlP0YuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwoRi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0''@;'; put 'put ''ZWQ9ITAsSS5uZXh0VGljayhCLEYsTikpOkkubmV4dFRpY2soQixGLE4pOlAmJlAoTil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uIGcoKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5n''@;'; put 'put ''PSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9fX0sMTgzNDI6''@;'; put 'put ''KHVlLFgseSk9Pnt1ZS5leHBvcnRzPXkoNDQzNTYpLkV2ZW50RW1pdHRlcn0sMjY1NToodWUsWCx5KT0+e3ZhciBJPXkoODM4MzgpLF89SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlvbiBCKHcsUCxGKXtyZXR1cm4gXyh3LFAsRil9Xy5m''@;'; put 'put ''cm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz91ZS5leHBvcnRzPUk6KGcoSSxYKSxYLkJ1ZmZlcj1CKSxnKF8sQiksQi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVz''@;'; put 'put ''dCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LEIuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIE89Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIEY/Ty5maWxsKFAsRik6Ty5maWxsKFApOk8uZmlsbCgwKSxPfSxCLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LEIuYWxs''@;'; put 'put ''b2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDU5NDI6KHVlLFgseSk9PnsoWD11ZS5leHBvcnRzPXkoMTk2MDkpKS5TdHJl''@;'; put 'put ''YW09WCxYLlJlYWRhYmxlPVgsWC5Xcml0YWJsZT15KDQ3ODQ5KSxYLkR1cGxleD15KDc0MDc1KSxYLlRyYW5zZm9ybT15KDI5MDkpLFguUGFzc1Rocm91Z2g9eSgxODgyMyl9LDM2NjM2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODM4MzgpLkJ1ZmZlcixfPXkoNzE5OTMpLGc9''@;'; put 'put ''eSgxMzY4NiksQj1uZXcgQXJyYXkoMTYpLHc9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywz''@;'; put 'put ''LDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sUD1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCww''@;'; put 'put ''LDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxGPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEy''@;'; put 'put ''LDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxPPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYs''@;'; put 'put ''OSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXSx6PVsw''@;'; put 'put ''LDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDI4NDA4NTM4MzhdLE49WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQyMTcsMF07ZnVuY3Rpb24gTCgpe2cuY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRo''@;'; put 'put ''aXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjB9ZnVuY3Rpb24gSyhKLG5lKXtyZXR1cm4gSjw8bmV8Sj4+PjMyLW5lfWZ1bmN0aW9uIFUoSixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisobmVeaWVebGUpK19lK1RlfDAsU2UpK21l''@;'; put 'put ''fDB9ZnVuY3Rpb24gVyhKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhuZSZpZXx+bmUmbGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gWShKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKygobmV8fmllKV5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlv''@;'; put 'put ''biBxKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKG5lJmxlfGllJn5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBlZShKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhuZV4oaWV8fmxlKSkrX2UrVGV8MCxTZSkrbWV8MH1fKEwsZyksTC5wcm90b3R5''@;'; put 'put ''cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgSj1CLG5lPTA7bmU8MTY7KytuZSlKW25lXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0Km5lKTtmb3IodmFyIGllPTB8dGhpcy5fYSxsZT0wfHRoaXMuX2IsbWU9MHx0aGlzLl9jLF9lPTB8dGhpcy5fZCxUZT0wfHRoaXMuX2UsU2U9MHx0''@;'; put 'put ''aGlzLl9hLGplPTB8dGhpcy5fYixWPTB8dGhpcy5fYyxwPTB8dGhpcy5fZCxiPTB8dGhpcy5fZSx4PTA7eDw4MDt4Kz0xKXt2YXIgQyxUO3g8MTY/KEM9VShpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbMF0sRlt4XSksVD1lZShTZSxqZSxWLHAsYixKW1BbeF1dLE5bMF0sT1t4XSkpOng8MzI/''@;'; put 'put ''KEM9VyhpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbMV0sRlt4XSksVD1xKFNlLGplLFYscCxiLEpbUFt4XV0sTlsxXSxPW3hdKSk6eDw0OD8oQz1ZKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selsyXSxGW3hdKSxUPVkoU2UsamUsVixwLGIsSltQW3hdXSxOWzJdLE9beF0pKTp4PDY0PyhDPXEo''@;'; put 'put ''aWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzNdLEZbeF0pLFQ9VyhTZSxqZSxWLHAsYixKW1BbeF1dLE5bM10sT1t4XSkpOihDPWVlKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0sels0XSxGW3hdKSxUPVUoU2UsamUsVixwLGIsSltQW3hdXSxOWzRdLE9beF0pKSxpZT1UZSxUZT1fZSxfZT1LKG1l''@;'; put 'put ''LDEwKSxtZT1sZSxsZT1DLFNlPWIsYj1wLHA9SyhWLDEwKSxWPWplLGplPVR9dmFyIEg9dGhpcy5fYittZStwfDA7dGhpcy5fYj10aGlzLl9jK19lK2J8MCx0aGlzLl9jPXRoaXMuX2QrVGUrU2V8MCx0aGlzLl9kPXRoaXMuX2UraWUramV8MCx0aGlzLl9lPXRoaXMuX2ErbGUrVnwwLHRoaXMu''@;'; put 'put ''X2E9SH0sTC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tP''@;'; put 'put ''ZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBKPUku''@;'; put 'put ''YWxsb2M/SS5hbGxvYygyMCk6bmV3IEkoMjApO3JldHVybiBKLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEoud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksSi53cml0ZUludDMyTEUodGhpcy5fYyw4KSxKLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxKLndyaXRlSW50MzJMRSh0aGlzLl9lLDE2''@;'; put 'put ''KSxKfSx1ZS5leHBvcnRzPUx9LDI3MDU0Oih1ZSxYLHkpPT57dmFyIEk9eSg4MzgzOCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNh''@;'; put 'put ''ZmUmJl8uYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLFgpLFguQnVmZmVyPUIpLEIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXy5wcm90b3R5cGUpLGcoXyxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz1fKHcpO3JldHVybiB2''@;'; put 'put ''b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1''@;'; put 'put ''cm4gXyh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sOTM4MDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEIsST15KDgzODM4KSxfPUkuQnVmZmVyLGc9e307Zm9yKEIgaW4gSSlJLmhhc093blByb3BlcnR5KEIpJiYoIlNsb3dCdWZmZXIiPT09Qnx8IkJ1ZmZlciI9PT1CfHwoZ1tCXT1JW0JdKSk7dmFyIHc9Zy5CdWZmZXI9e307Zm9yKEIgaW4gXylfLmhhc093blByb3BlcnR5KEIpJiYoImFs''@;'; put 'put ''bG9jVW5zYWZlIj09PUJ8fCJhbGxvY1Vuc2FmZVNsb3ciPT09Qnx8KHdbQl09X1tCXSkpO2lmKGcuQnVmZmVyLnByb3RvdHlwZT1fLnByb3RvdHlwZSwoIXcuZnJvbXx8dy5mcm9tPT09VWludDhBcnJheS5mcm9tKSYmKHcuZnJvbT1mdW5jdGlvbihQLEYsTyl7aWYoIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBQKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFApO2lmKFAmJnR5cGVvZiBQLmxlbmd0aD4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50''@;'; put 'put ''IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgUCk7cmV0dXJuIF8oUCxGLE8pfSksdy5hbGxvY3x8KHcuYWxsb2M9ZnVuY3Rpb24oUCxGLE8pe2lmKCJudW1i''@;'; put 'put ''ZXIiIT10eXBlb2YgUCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgUCk7aWYoUDwwfHxQPj0yKigxPDwzMCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytQKyci''@;'; put 'put ''IGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgej1fKFApO3JldHVybiBGJiYwIT09Ri5sZW5ndGg/InN0cmluZyI9PXR5cGVvZiBPP3ouZmlsbChGLE8pOnouZmlsbChGKTp6LmZpbGwoMCksen0pLCFnLmtTdHJpbmdNYXhMZW5ndGgpdHJ5e2cua1N0cmluZ01heExlbmd0aD1w''@;'; put 'put ''cm9jZXNzLmJpbmRpbmcoImJ1ZmZlciIpLmtTdHJpbmdNYXhMZW5ndGh9Y2F0Y2h7fWcuY29uc3RhbnRzfHwoZy5jb25zdGFudHM9e01BWF9MRU5HVEg6Zy5rTWF4TGVuZ3RofSxnLmtTdHJpbmdNYXhMZW5ndGgmJihnLmNvbnN0YW50cy5NQVhfU1RSSU5HX0xFTkdUSD1nLmtTdHJpbmdNYXhM''@;'; put 'put ''ZW5ndGgpKSx1ZS5leHBvcnRzPWd9LDk4MDgzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTshZnVuY3Rpb24oKXt2YXIgXz1YfHx7fTt2b2lkIDAhPT0oST1mdW5jdGlvbigpe3JldHVybiBffS5hcHBseShYLFtdKSkmJih1ZS5leHBvcnRzPUkpLF8uZGVmYXVsdD1fO3ZhciBnPSJodHRw''@;'; put 'put ''Oi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsdz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEY9L3VybFwoWyInXT8oLis/KVsiJ10/XCkvLE89e3dvZmYyOiJmb250L3dvZmYyIix3b2ZmOiJmb250L3dvZmYiLG90ZjoiYXBwbGljYXRpb24veC1mb250LW9wZW50eXBlIix0dGY6ImFw''@;'; put 'put ''cGxpY2F0aW9uL3gtZm9udC10dGYiLGVvdDoiYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QiLHNmbnQ6ImFwcGxpY2F0aW9uL2ZvbnQtc2ZudCIsc3ZnOiJpbWFnZS9zdmcreG1sIn0sej1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fHxiIGluc3RhbmNl''@;'; put 'put ''b2YgU1ZHRWxlbWVudH0sTj1mdW5jdGlvbihiKXtpZigheihiKSl0aHJvdyBuZXcgRXJyb3IoImFuIEhUTUxFbGVtZW50IG9yIFNWR0VsZW1lbnQgaXMgcmVxdWlyZWQ7IGdvdCAiK2IpfSxMPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih4LEMpe3ooYik/eChiKTpD''@;'; put 'put ''KG5ldyBFcnJvcigiYW4gSFRNTEVsZW1lbnQgb3IgU1ZHRWxlbWVudCBpcyByZXF1aXJlZDsgZ290ICIrYikpfSl9LFU9ZnVuY3Rpb24oYil7dmFyIHg9T2JqZWN0LmtleXMoTykuZmlsdGVyKGZ1bmN0aW9uKEMpe3JldHVybiBiLmluZGV4T2YoIi4iK0MpPjB9KS5tYXAoZnVuY3Rpb24oQyl7''@;'; put 'put ''cmV0dXJuIE9bQ119KTtyZXR1cm4geD94WzBdOihjb25zb2xlLmVycm9yKCJVbmtub3duIGZvbnQgZm9ybWF0IGZvciAiK2IrIi4gRm9udHMgbWF5IG5vdCBiZSB3b3JraW5nIGNvcnJlY3RseS4iKSwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIil9LFk9ZnVuY3Rpb24oYix4LEMpe3ZhciBU''@;'; put 'put ''PWIudmlld0JveCYmYi52aWV3Qm94LmJhc2VWYWwmJmIudmlld0JveC5iYXNlVmFsW0NdfHxudWxsIT09eC5nZXRBdHRyaWJ1dGUoQykmJiF4LmdldEF0dHJpYnV0ZShDKS5tYXRjaCgvJSQvKSYmcGFyc2VJbnQoeC5nZXRBdHRyaWJ1dGUoQykpfHxiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp''@;'; put 'put ''W0NdfHxwYXJzZUludCh4LnN0eWxlW0NdKXx8cGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZShDKSk7cmV0dXJuIHR5cGVvZiBUPiJ1Inx8bnVsbD09PVR8fGlzTmFOKHBhcnNlRmxvYXQoVCkpPzA6VH0sSj1mdW5jdGlvbihiKXtmb3IodmFyIHg9''@;'; put 'put ''d2luZG93LmF0b2IoYi5zcGxpdCgiLCIpWzFdKSxDPWIuc3BsaXQoIiwiKVswXS5zcGxpdCgiOiIpWzFdLnNwbGl0KCI7IilbMF0sVD1uZXcgQXJyYXlCdWZmZXIoeC5sZW5ndGgpLEg9bmV3IFVpbnQ4QXJyYXkoVCksaj0wO2o8eC5sZW5ndGg7aisrKUhbal09eC5jaGFyQ29kZUF0KGopO3Jl''@;'; put 'put ''dHVybiBuZXcgQmxvYihbVF0se3R5cGU6Q30pfSxtZT17fSxUZT1udWxsLGplPWZ1bmN0aW9uKGIseCl7dmFyIEM9eHx8e30sVD1DLnNlbGVjdG9yUmVtYXAsSD1DLm1vZGlmeVN0eWxlLEU9Qy5mb250cyxtPUMuZXhjbHVkZVVudXNlZENzcyxBPUMubW9kaWZ5Q3NzfHxmdW5jdGlvbih3ZSxV''@;'; put 'put ''ZSl7cmV0dXJuKFQ/VCh3ZSk6d2UpKyJ7IisoSD9IKFVlKTpVZSkrIn1cbiJ9LGFlPVtdLHRlPXR5cGVvZiBFPiJ1IixzZT1FfHxbXTtyZXR1cm4oVGV8fChUZT1BcnJheS5mcm9tKGRvY3VtZW50LnN0eWxlU2hlZXRzKS5tYXAoZnVuY3Rpb24oYil7dHJ5e3JldHVybntydWxlczpiLmNzc1J1''@;'; put 'put ''bGVzLGhyZWY6Yi5ocmVmfX1jYXRjaCh4KXtyZXR1cm4gY29uc29sZS53YXJuKCJTdHlsZXNoZWV0IGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICIrYi5ocmVmLHgpLHt9fX0pKSkuZm9yRWFjaChmdW5jdGlvbih3ZSl7dmFyIFVlPXdlLnJ1bGVzLEplPXdlLmhyZWY7VWUmJkFycmF5LmZyb20oVWUp''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24ob3Qpe2lmKHR5cGVvZiBvdC5zdHlsZTwidSIpaWYoZnVuY3Rpb24oYix4KXtpZih4KXRyeXtyZXR1cm4gYi5xdWVyeVNlbGVjdG9yKHgpfHxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKHgpfWNhdGNoKEMpe2NvbnNvbGUud2Fybign''@;'; put 'put ''SW52YWxpZCBDU1Mgc2VsZWN0b3IgIicreCsnIicsQyl9fShiLG90LnNlbGVjdG9yVGV4dCkpYWUucHVzaChBKG90LnNlbGVjdG9yVGV4dCxvdC5zdHlsZS5jc3NUZXh0KSk7ZWxzZSBpZih0ZSYmb3QuY3NzVGV4dC5tYXRjaCgvXkBmb250LWZhY2UvKSl7dmFyIHhlPWZ1bmN0aW9uKGIseCl7''@;'; put 'put ''dmFyIEM9Yi5jc3NUZXh0Lm1hdGNoKEYpLFQ9QyYmQ1sxXXx8IiI7aWYoVCYmIVQubWF0Y2goL15kYXRhOi8pJiYiYWJvdXQ6YmxhbmsiIT09VCl7dmFyIEg9VC5zdGFydHNXaXRoKCIuLi8iKT94KyIvLi4vIitUOlQuc3RhcnRzV2l0aCgiLi8iKT94KyIvLiIrVDpUO3JldHVybnt0ZXh0OmIu''@;'; put 'put ''Y3NzVGV4dCxmb3JtYXQ6VShIKSx1cmw6SH19fShvdCxKZSk7eGUmJnNlLnB1c2goeGUpfWVsc2UgbXx8YWUucHVzaChvdC5jc3NUZXh0KX0pfSksZnVuY3Rpb24oYil7cmV0dXJuIFByb21pc2UuYWxsKGIubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihDLFQp''@;'; put 'put ''e2lmKG1lW3gudXJsXSlyZXR1cm4gQyhtZVt4LnVybF0pO3ZhciBIPW5ldyBYTUxIdHRwUmVxdWVzdDtILmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7dmFyIGo9ZnVuY3Rpb24oYil7Zm9yKHZhciB4PSIiLEM9bmV3IFVpbnQ4QXJyYXkoYiksVD0wO1Q8Qy5ieXRlTGVuZ3Ro''@;'; put 'put ''O1QrKyl4Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKENbVF0pO3JldHVybiB3aW5kb3cuYnRvYSh4KX0oSC5yZXNwb25zZSksRT14LnRleHQucmVwbGFjZShGLCd1cmwoImRhdGE6Jyt4LmZvcm1hdCsiO2Jhc2U2NCwiK2orJyIpJykrIlxuIjttZVt4LnVybF09RSxDKEUpfSksSC5hZGRFdmVudExp''@;'; put 'put ''c3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oail7Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gbG9hZCBmb250IGZyb206ICIreC51cmwsaiksbWVbeC51cmxdPW51bGwsQyhudWxsKX0pLEguYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGZ1bmN0aW9uKGope2NvbnNvbGUud2FybigiQWJvcnRlZCBs''@;'; put 'put ''b2FkaW5nIGZvbnQgZnJvbTogIit4LnVybCxqKSxDKG51bGwpfSksSC5vcGVuKCJHRVQiLHgudXJsKSxILnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLEguc2VuZCgpfSl9KSkudGhlbihmdW5jdGlvbih4KXtyZXR1cm4geC5maWx0ZXIoZnVuY3Rpb24oQyl7cmV0dXJuIEN9KS5qb2luKCIi''@;'; put 'put ''KX0pfShzZSkudGhlbihmdW5jdGlvbih3ZSl7cmV0dXJuIGFlLmpvaW4oIlxuIikrd2V9KX0sVj1mdW5jdGlvbigpe2lmKCFuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmISgiZG93bmxvYWQiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSlyZXR1cm57cG9wdXA6d2luZG93Lm9w''@;'; put 'put ''ZW4oKX19O18ucHJlcGFyZVN2Zz1mdW5jdGlvbihwLGIseCl7TihwKTt2YXIgQz1ifHx7fSxUPUMubGVmdCxIPXZvaWQgMD09PVQ/MDpULGo9Qy50b3AsRT12b2lkIDA9PT1qPzA6aixtPUMud2lkdGgsQT1DLmhlaWdodCxhZT1DLnNjYWxlLHRlPXZvaWQgMD09PWFlPzE6YWUsc2U9Qy5yZXNw''@;'; put 'put ''b25zaXZlLHdlPXZvaWQgMCE9PXNlJiZzZSxVZT1DLmV4Y2x1ZGVDc3MsSmU9dm9pZCAwIT09VWUmJlVlO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShiLnF1ZXJ5U2VsZWN0b3JBbGwoImltYWdlIikpLm1hcChmdW5jdGlvbih4KXt2YXIgQz14Lmdl''@;'; put 'put ''dEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwiaHJlZiIpfHx4LmdldEF0dHJpYnV0ZSgiaHJlZiIpO3JldHVybiBDPyhmdW5jdGlvbihiKXtyZXR1cm4gYiYmMD09PWIubGFzdEluZGV4T2YoImh0dHAiLDApJiYtMT09PWIubGFzdEluZGV4T2Yod2luZG93Lmxv''@;'; put 'put ''Y2F0aW9uLmhvc3QpfShDKSYmKEMrPSgtMT09PUMuaW5kZXhPZigiPyIpPyI/IjoiJiIpKyJ0PSIrKG5ldyBEYXRlKS52YWx1ZU9mKCkpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKFQsSCl7dmFyIGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksRT1uZXcgSW1hZ2U7RS5jcm9zc09y''@;'; put 'put ''aWdpbj0iYW5vbnltb3VzIixFLnNyYz1DLEUub25lcnJvcj1mdW5jdGlvbigpe3JldHVybiBIKG5ldyBFcnJvcigiQ291bGQgbm90IGxvYWQgIitDKSl9LEUub25sb2FkPWZ1bmN0aW9uKCl7ai53aWR0aD1FLndpZHRoLGouaGVpZ2h0PUUuaGVpZ2h0LGouZ2V0Q29udGV4dCgiMmQiKS5kcmF3''@;'; put 'put ''SW1hZ2UoRSwwLDApLHguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJocmVmIixqLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIikpLFQoITApfX0pKTpQcm9taXNlLnJlc29sdmUobnVsbCl9KSl9KHApLnRoZW4oZnVuY3Rpb24oKXt2YXIgb3Q9cC5jbG9uZU5v''@;'; put 'put ''ZGUoITApO290LnN0eWxlLmJhY2tncm91bmRDb2xvcj0oYnx8e30pLmJhY2tncm91bmRDb2xvcnx8cC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7dmFyIHhlPWZ1bmN0aW9uKGIseCxDLFQpe2lmKCJzdmciPT09Yi50YWdOYW1lKXJldHVybnt3aWR0aDpDfHxZKGIseCwid2lkdGgiKSxoZWlnaHQ6''@;'; put 'put ''VHx8WShiLHgsImhlaWdodCIpfTtpZihiLmdldEJCb3gpe3ZhciBIPWIuZ2V0QkJveCgpO3JldHVybnt3aWR0aDpILngrSC53aWR0aCxoZWlnaHQ6SC55K0guaGVpZ2h0fX19KHAsb3QsbSxBKSx2ZT14ZS53aWR0aCxYZT14ZS5oZWlnaHQ7aWYoInN2ZyIhPT1wLnRhZ05hbWUpe2lmKCFwLmdl''@;'; put 'put ''dEJCb3gpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiQXR0ZW1wdGVkIHRvIHJlbmRlciBub24tU1ZHIGVsZW1lbnQiLHApO251bGwhPW90LmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikmJm90LnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixvdC5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIp''@;'; put 'put ''LnJlcGxhY2UoL3RyYW5zbGF0ZVwoLio/XCkvLCIiKSk7dmFyIHplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTt6ZS5hcHBlbmRDaGlsZChvdCksb3Q9emV9aWYob3Quc2V0QXR0cmlidXRlKCJ2ZXJzaW9uIiwiMS4xIiksb3Qu''@;'; put 'put ''c2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbSCxFLHZlLFhlXS5qb2luKCIgIikpLG90LmdldEF0dHJpYnV0ZSgieG1sbnMiKXx8b3Quc2V0QXR0cmlidXRlTlMoZywieG1sbnMiLHcpLG90LmdldEF0dHJpYnV0ZSgieG1sbnM6eGxpbmsiKXx8b3Quc2V0QXR0cmlidXRlTlMoZywieG1sbnM6eGxp''@;'; put 'put ''bmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksd2U/KG90LnJlbW92ZUF0dHJpYnV0ZSgid2lkdGgiKSxvdC5yZW1vdmVBdHRyaWJ1dGUoImhlaWdodCIpLG90LnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSk6KG90LnNldEF0dHJp''@;'; put 'put ''YnV0ZSgid2lkdGgiLHZlKnRlKSxvdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsWGUqdGUpKSxBcnJheS5mcm9tKG90LnF1ZXJ5U2VsZWN0b3JBbGwoImZvcmVpZ25PYmplY3QgPiAqIikpLmZvckVhY2goZnVuY3Rpb24oT2Upe09lLnNldEF0dHJpYnV0ZU5TKGcsInhtbG5zIiwic3ZnIj09PU9l''@;'; put 'put ''LnRhZ05hbWU/dzoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpfSksIUplKXJldHVybiBqZShwLGIpLnRoZW4oZnVuY3Rpb24oT2Upe3ZhciBJZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO0llLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvY3NzIiksSWUuaW5uZXJI''@;'; put 'put ''VE1MPSI8IVtDREFUQVtcbiIrT2UrIlxuXV0+Ijt2YXIgVmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGVmcyIpO1ZlLmFwcGVuZENoaWxkKEllKSxvdC5pbnNlcnRCZWZvcmUoVmUsb3QuZmlyc3RDaGlsZCk7dmFyIGtlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2tlLmFwcGVu''@;'; put 'put ''ZENoaWxkKG90KTt2YXIgQWU9a2UuaW5uZXJIVE1MLnJlcGxhY2UoL05TXGQrOmhyZWYvZ2ksJ3htbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmJyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHgpcmV0dXJue3NyYzpBZSx3aWR0aDp2ZSxoZWlnaHQ6''@;'; put 'put ''WGV9O3goQWUsdmUsWGUpfSk7dmFyIERlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0RlLmFwcGVuZENoaWxkKG90KTt2YXIgRmU9RGUuaW5uZXJIVE1MO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB4KXJldHVybntzcmM6RmUsd2lkdGg6dmUsaGVpZ2h0OlhlfTt4KEZlLHZlLFhlKX0p''@;'; put 'put ''fSxfLnN2Z0FzRGF0YVVyaT1mdW5jdGlvbihwLGIseCl7cmV0dXJuIE4ocCksXy5wcmVwYXJlU3ZnKHAsYikudGhlbihmdW5jdGlvbihDKXt2YXIgSD1DLndpZHRoLGo9Qy5oZWlnaHQsRT0iZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiK3dpbmRvdy5idG9hKGZ1bmN0aW9uKGIpe3JldHVy''@;'; put 'put ''biBkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGIpLnJlcGxhY2UoLyUoWzAtOUEtRl17Mn0pL2csZnVuY3Rpb24oeCxDKXt2YXIgVD1TdHJpbmcuZnJvbUNoYXJDb2RlKCIweCIrQyk7cmV0dXJuIiUiPT09VD8iJTI1IjpUfSkpfSgnPD94bWwgdmVyc2lvbj0iMS4wIiBz''@;'; put 'put ''dGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgWzwhRU5USVRZIG5ic3AgIiYjMTYwOyI+XT4nK0Muc3JjKSk7cmV0dXJuImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHgmJngoRSxILGopLEV9KX0sXy5zdmdBc1BuZ1VyaT1mdW5jdGlvbihwLGIseCl7TihwKTt2YXIgQz1ifHx7fSxUPUMuZW5jb2RlclR5cGUsSD12b2lkIDA9PT1UPyJpbWFnZS9wbmciOlQsaj1DLmVuY29kZXJPcHRpb25zLEU9dm9pZCAwPT09aj8uODpqLG09Qy5jYW52ZyxB''@;'; put 'put ''PWZ1bmN0aW9uKHRlKXt2YXIgc2U9dGUuc3JjLHdlPXRlLndpZHRoLFVlPXRlLmhlaWdodCxKZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxvdD1KZS5nZXRDb250ZXh0KCIyZCIpLHhlPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO0plLndpZHRoPXdlKnhlLEplLmhlaWdo''@;'; put 'put ''dD1VZSp4ZSxKZS5zdHlsZS53aWR0aD1KZS53aWR0aCsicHgiLEplLnN0eWxlLmhlaWdodD1KZS5oZWlnaHQrInB4IixvdC5zZXRUcmFuc2Zvcm0oeGUsMCwwLHhlLDAsMCksbT9tKEplLHNlKTpvdC5kcmF3SW1hZ2Uoc2UsMCwwKTt2YXIgdmU9dm9pZCAwO3RyeXt2ZT1KZS50b0RhdGFVUkwo''@;'; put 'put ''SCxFKX1jYXRjaChYZSl7aWYodHlwZW9mIFNlY3VyaXR5RXJyb3I8InUiJiZYZSBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3J8fCJTZWN1cml0eUVycm9yIj09PVhlLm5hbWUpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiUmVuZGVyZWQgU1ZHIGltYWdlcyBjYW5ub3QgYmUgZG93bmxvYWRl''@;'; put 'put ''ZCBpbiB0aGlzIGJyb3dzZXIuIik7dGhyb3cgWGV9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHgmJngodmUsSmUud2lkdGgsSmUuaGVpZ2h0KSxQcm9taXNlLnJlc29sdmUodmUpfTtyZXR1cm4gbT9fLnByZXBhcmVTdmcocCxiKS50aGVuKEEpOl8uc3ZnQXNEYXRhVXJpKHAsYikudGhlbihm''@;'; put 'put ''dW5jdGlvbihhZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHRlLHNlKXt2YXIgd2U9bmV3IEltYWdlO3dlLm9ubG9hZD1mdW5jdGlvbigpe3JldHVybiB0ZShBKHtzcmM6d2Usd2lkdGg6d2Uud2lkdGgsaGVpZ2h0OndlLmhlaWdodH0pKX0sd2Uub25lcnJvcj1mdW5jdGlvbigpe3Nl''@;'; put 'put ''KCJUaGVyZSB3YXMgYW4gZXJyb3IgbG9hZGluZyB0aGUgZGF0YSBVUkkgYXMgYW4gaW1hZ2Ugb24gdGhlIGZvbGxvd2luZyBTVkdcbiIrd2luZG93LmF0b2IoYWUuc2xpY2UoMjYpKSsiT3BlbiB0aGUgZm9sbG93aW5nIGxpbmsgdG8gc2VlIGJyb3dzZXIncyBkaWFnbm9zaXNcbiIrYWUpfSx3''@;'; put 'put ''ZS5zcmM9YWV9KX0pfSxfLmRvd25sb2FkPWZ1bmN0aW9uKHAsYix4KXtpZihuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiluYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihKKGIpLHApO2Vsc2V7dmFyIEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2lmKCJkb3dubG9hZCJpbiBDKXtD''@;'; put 'put ''LmRvd25sb2FkPXAsQy5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKEMpO3RyeXt2YXIgVD1KKGIpLEg9VVJMLmNyZWF0ZU9iamVjdFVSTChUKTtDLmhyZWY9SCxDLm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIFVSTC5yZXZva2VPYmplY3RVUkwoSCl9KX19Y2F0Y2goail7Y29uc29sZS5lcnJvcihqKSxjb25zb2xlLndhcm4oIkVycm9yIHdoaWxlIGdldHRpbmcgb2JqZWN0IFVSTC4gRmFsbGluZyBiYWNrIHRvIHN0cmluZyBVUkwuIiksQy5ocmVmPWJ9Qy5jbGljaygpLGRv''@;'; put 'put ''Y3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoQyl9ZWxzZSB4JiZ4LnBvcHVwJiYoeC5wb3B1cC5kb2N1bWVudC50aXRsZT1wLHgucG9wdXAubG9jYXRpb24ucmVwbGFjZShiKSl9fSxfLnNhdmVTdmc9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPVYoKTtyZXR1cm4gTChwKS50aGVuKGZ1bmN0aW9uKFQp''@;'; put 'put ''e3JldHVybiBfLnN2Z0FzRGF0YVVyaShULHh8fHt9KX0pLnRoZW4oZnVuY3Rpb24oVCl7cmV0dXJuIF8uZG93bmxvYWQoYixULEMpfSl9LF8uc2F2ZVN2Z0FzUG5nPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz1WKCk7cmV0dXJuIEwocCkudGhlbihmdW5jdGlvbihUKXtyZXR1cm4gXy5zdmdBc1Bu''@;'; put 'put ''Z1VyaShULHh8fHt9KX0pLnRoZW4oZnVuY3Rpb24oVCl7cmV0dXJuIF8uZG93bmxvYWQoYixULEMpfSl9fSgpfSw3MDQ2MzoodWUsWCx5KT0+e3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBfKGcsQil7dGhpcy5fYmxvY2s9SS5hbGxvYyhnKSx0aGlzLl9maW5hbFNpemU9Qix0aGlz''@;'; put 'put ''Ll9ibG9ja1NpemU9Zyx0aGlzLl9sZW49MH1fLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZyxCKXsic3RyaW5nIj09dHlwZW9mIGcmJihnPUkuZnJvbShnLEI9Qnx8InV0ZjgiKSk7Zm9yKHZhciB3PXRoaXMuX2Jsb2NrLFA9dGhpcy5fYmxvY2tTaXplLEY9Zy5sZW5ndGgsTz10aGlzLl9s''@;'; put 'put ''ZW4sej0wO3o8Rjspe2Zvcih2YXIgTj1PJVAsTD1NYXRoLm1pbihGLXosUC1OKSxLPTA7SzxMO0srKyl3W04rS109Z1t6K0tdO3orPUwsKE8rPUwpJVA9PTAmJnRoaXMuX3VwZGF0ZSh3KX1yZXR1cm4gdGhpcy5fbGVuKz1GLHRoaXN9LF8ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihnKXt2''@;'; put 'put ''YXIgQj10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Jsb2NrW0JdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsQisxKSxCPj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciB3PTgqdGhpcy5fbGVuO2lmKHc8''@;'; put 'put ''PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSh3LHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciBQPSg0Mjk0OTY3Mjk1JncpPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKCh3LVApLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndy''@;'; put 'put ''aXRlVUludDMyQkUoUCx0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgTz10aGlzLl9oYXNoKCk7cmV0dXJuIGc/Ty50b1N0cmluZyhnKTpPfSxfLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3Qg''@;'; put 'put ''YmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0sdWUuZXhwb3J0cz1ffSwyNTQ0MzoodWUsWCx5KT0+e3ZhciBJPXVlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7Zz1nLnRvTG93ZXJDYXNlKCk7dmFyIEI9SVtnXTtpZighQil0aHJvdyBuZXcgRXJyb3IoZysiIGlzIG5vdCBzdXBwb3J0ZWQgKHdl''@;'; put 'put ''IGFjY2VwdCBwdWxsIHJlcXVlc3RzKSIpO3JldHVybiBuZXcgQn07SS5zaGE9eSg0ODU4NSksSS5zaGExPXkoMjEyNzApLEkuc2hhMjI0PXkoNDI3MDkpLEkuc2hhMjU2PXkoMzIxNDgpLEkuc2hhMzg0PXkoNTE4NTYpLEkuc2hhNTEyPXkoMzEyMSl9LDQ4NTg1Oih1ZSxYLHkpPT57dmFyIEk9''@;'; put 'put ''eSg3MTk5MyksXz15KDcwNDYzKSxnPXkoMjcwNTQpLkJ1ZmZlcixCPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9u''@;'; put 'put ''IEYoTil7cmV0dXJuIE48PDV8Tj4+PjI3fWZ1bmN0aW9uIE8oTil7cmV0dXJuIE48PDMwfE4+Pj4yfWZ1bmN0aW9uIHooTixMLEssVSl7cmV0dXJuIDA9PT1OP0wmS3x+TCZVOjI9PT1OP0wmS3xMJlV8SyZVOkxeS15VfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4pe2Zvcih2YXIgTD10aGlzLl93LEs9MHx0aGlzLl9hLFU9''@;'; put 'put ''MHx0aGlzLl9iLFc9MHx0aGlzLl9jLFk9MHx0aGlzLl9kLHE9MHx0aGlzLl9lLGVlPTA7ZWU8MTY7KytlZSlMW2VlXT1OLnJlYWRJbnQzMkJFKDQqZWUpO2Zvcig7ZWU8ODA7KytlZSlMW2VlXT1MW2VlLTNdXkxbZWUtOF1eTFtlZS0xNF1eTFtlZS0xNl07Zm9yKHZhciBKPTA7Sjw4MDsrK0op''@;'; put 'put ''e3ZhciBuZT1+fihKLzIwKSxpZT1GKEspK3oobmUsVSxXLFkpK3ErTFtKXStCW25lXXwwO3E9WSxZPVcsVz1PKFUpLFU9SyxLPWllfXRoaXMuX2E9Syt0aGlzLl9hfDAsdGhpcy5fYj1VK3RoaXMuX2J8MCx0aGlzLl9jPVcrdGhpcy5fY3wwLHRoaXMuX2Q9WSt0aGlzLl9kfDAsdGhpcy5fZT1x''@;'; put 'put ''K3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTj1nLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTi53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTi53cml0ZUlu''@;'; put 'put ''dDMyQkUoMHx0aGlzLl9kLDEyKSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLE59LHVlLmV4cG9ydHM9UH0sMjEyNzA6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoNzA0NjMpLGc9eSgyNzA1NCkuQnVmZmVyLEI9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwt''@;'; put 'put ''ODk5NDk3NTE0XSx3PW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihMKXtyZXR1cm4gTDw8MXxMPj4+MzF9ZnVuY3Rpb24gTyhMKXtyZXR1cm4gTDw8NXxMPj4+Mjd9ZnVuY3Rpb24geihMKXtyZXR1''@;'; put 'put ''cm4gTDw8MzB8TD4+PjJ9ZnVuY3Rpb24gTihMLEssVSxXKXtyZXR1cm4gMD09PUw/SyZVfH5LJlc6Mj09PUw/SyZVfEsmV3xVJlc6S15VXld9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlz''@;'; put 'put ''Ll9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTCl7Zm9yKHZhciBLPXRoaXMuX3csVT0wfHRoaXMuX2EsVz0wfHRoaXMuX2IsWT0wfHRoaXMuX2MscT0wfHRoaXMuX2QsZWU9MHx0aGlz''@;'; put 'put ''Ll9lLEo9MDtKPDE2OysrSilLW0pdPUwucmVhZEludDMyQkUoNCpKKTtmb3IoO0o8ODA7KytKKUtbSl09RihLW0otM11eS1tKLThdXktbSi0xNF1eS1tKLTE2XSk7Zm9yKHZhciBuZT0wO25lPDgwOysrbmUpe3ZhciBpZT1+fihuZS8yMCksbGU9TyhVKStOKGllLFcsWSxxKStlZStLW25lXStC''@;'; put 'put ''W2llXXwwO2VlPXEscT1ZLFk9eihXKSxXPVUsVT1sZX10aGlzLl9hPVUrdGhpcy5fYXwwLHRoaXMuX2I9Vyt0aGlzLl9ifDAsdGhpcy5fYz1ZK3RoaXMuX2N8MCx0aGlzLl9kPXErdGhpcy5fZHwwLHRoaXMuX2U9ZWUrdGhpcy5fZXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBMPWcuYWxsb2NVbnNhZmUoMjApO3JldHVybiBMLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5f''@;'; put 'put ''ZSwxNiksTH0sdWUuZXhwb3J0cz1QfSw0MjcwOToodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSgzMjE0OCksZz15KDcwNDYzKSxCPXkoMjcwNTQpLkJ1ZmZlcix3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxnLmNhbGwodGhpcyw2NCw1Nil9''@;'; put 'put ''SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5''@;'; put 'put ''NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRj1CLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gRi53cml0ZUludDMyQkUodGhpcy5fYSwwKSxGLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLEYud3JpdGVJbnQzMkJFKHRoaXMu''@;'; put 'put ''X2MsOCksRi53cml0ZUludDMyQkUodGhpcy5fZCwxMiksRi53cml0ZUludDMyQkUodGhpcy5fZSwxNiksRi53cml0ZUludDMyQkUodGhpcy5fZiwyMCksRi53cml0ZUludDMyQkUodGhpcy5fZywyNCksRn0sdWUuZXhwb3J0cz1QfSwzMjE0ODoodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89''@;'; put 'put ''eSg3MDQ2MyksZz15KDI3MDU0KS5CdWZmZXIsQj1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3''@;'; put 'put ''ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3''@;'; put 'put ''MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMz''@;'; put 'put ''NDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0''@;'; put 'put ''NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSx3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihVLFcsWSl7cmV0dXJuIFleVSYoV15ZKX1m''@;'; put 'put ''dW5jdGlvbiBPKFUsVyxZKXtyZXR1cm4gVSZXfFkmKFV8Vyl9ZnVuY3Rpb24geihVKXtyZXR1cm4oVT4+PjJ8VTw8MzApXihVPj4+MTN8VTw8MTkpXihVPj4+MjJ8VTw8MTApfWZ1bmN0aW9uIE4oVSl7cmV0dXJuKFU+Pj42fFU8PDI2KV4oVT4+PjExfFU8PDIxKV4oVT4+PjI1fFU8PDcpfWZ1''@;'; put 'put ''bmN0aW9uIEwoVSl7cmV0dXJuKFU+Pj43fFU8PDI1KV4oVT4+PjE4fFU8PDE0KV5VPj4+M31mdW5jdGlvbiBLKFUpe3JldHVybihVPj4+MTd8VTw8MTUpXihVPj4+MTl8VTw8MTMpXlU+Pj4xMH1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3Nzkw''@;'; put 'put ''MzM3MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1m''@;'; put 'put ''dW5jdGlvbihVKXtmb3IodmFyIFc9dGhpcy5fdyxZPTB8dGhpcy5fYSxxPTB8dGhpcy5fYixlZT0wfHRoaXMuX2MsSj0wfHRoaXMuX2QsbmU9MHx0aGlzLl9lLGllPTB8dGhpcy5fZixsZT0wfHRoaXMuX2csbWU9MHx0aGlzLl9oLF9lPTA7X2U8MTY7KytfZSlXW19lXT1VLnJlYWRJbnQzMkJF''@;'; put 'put ''KDQqX2UpO2Zvcig7X2U8NjQ7KytfZSlXW19lXT1LKFdbX2UtMl0pK1dbX2UtN10rTChXW19lLTE1XSkrV1tfZS0xNl18MDtmb3IodmFyIFRlPTA7VGU8NjQ7KytUZSl7dmFyIFNlPW1lK04obmUpK0YobmUsaWUsbGUpK0JbVGVdK1dbVGVdfDAsamU9eihZKStPKFkscSxlZSl8MDttZT1sZSxs''@;'; put 'put ''ZT1pZSxpZT1uZSxuZT1KK1NlfDAsSj1lZSxlZT1xLHE9WSxZPVNlK2plfDB9dGhpcy5fYT1ZK3RoaXMuX2F8MCx0aGlzLl9iPXErdGhpcy5fYnwwLHRoaXMuX2M9ZWUrdGhpcy5fY3wwLHRoaXMuX2Q9Sit0aGlzLl9kfDAsdGhpcy5fZT1uZSt0aGlzLl9lfDAsdGhpcy5fZj1pZSt0aGlzLl9m''@;'; put 'put ''fDAsdGhpcy5fZz1sZSt0aGlzLl9nfDAsdGhpcy5faD1tZSt0aGlzLl9ofDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFU9Zy5hbGxvY1Vuc2FmZSgzMik7cmV0dXJuIFUud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksVS53cml0ZUludDMyQkUodGhpcy5fYiw0KSxVLndyaXRl''@;'; put 'put ''SW50MzJCRSh0aGlzLl9jLDgpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLFUud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLFV9LHVlLmV4cG9y''@;'; put 'put ''dHM9UH0sNTE4NTY6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoMzEyMSksZz15KDcwNDYzKSxCPXkoMjcwNTQpLkJ1ZmZlcix3PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsZy5jYWxsKHRoaXMsMTI4LDExMil9SShQLF8pLFAucHJvdG90''@;'; put 'put ''eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1''@;'; put 'put ''LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5f''@;'; put 'put ''aGw9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBGPUIuYWxsb2NVbnNhZmUoNDgpO2Z1bmN0aW9uIE8oeixOLEwpe0Yud3JpdGVJbnQzMkJFKHosTCksRi53cml0ZUludDMyQkUoTixMKzQpfXJldHVybiBPKHRoaXMuX2FoLHRoaXMuX2FsLDApLE8o''@;'; put 'put ''dGhpcy5fYmgsdGhpcy5fYmwsOCksTyh0aGlzLl9jaCx0aGlzLl9jbCwxNiksTyh0aGlzLl9kaCx0aGlzLl9kbCwyNCksTyh0aGlzLl9laCx0aGlzLl9lbCwzMiksTyh0aGlzLl9maCx0aGlzLl9mbCw0MCksRn0sdWUuZXhwb3J0cz1QfSwzMTIxOih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5Myks''@;'; put 'put ''Xz15KDcwNDYzKSxnPXkoMjcwNTQpLkJ1ZmZlcixCPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1''@;'; put 'put ''MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMz''@;'; put 'put ''NjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIs''@;'; put 'put ''MTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwz''@;'; put 'put ''NTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUy''@;'; put 'put ''NzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4''@;'; put 'put ''MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4''@;'; put 'put ''MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3''@;'; put 'put ''NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMw''@;'; put 'put ''MjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYw''@;'; put 'put ''MDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0''@;'; put 'put ''aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIEYocSxlZSxKKXtyZXR1cm4gSl5xJihlZV5KKX1mdW5jdGlvbiBPKHEsZWUsSil7cmV0dXJuIHEmZWV8SiYocXxlZSl9ZnVuY3Rpb24geihxLGVlKXtyZXR1cm4ocT4+PjI4fGVlPDw0KV4oZWU+Pj4yfHE8PDMwKV4oZWU+Pj43fHE8PDI1KX1mdW5jdGlv''@;'; put 'put ''biBOKHEsZWUpe3JldHVybihxPj4+MTR8ZWU8PDE4KV4ocT4+PjE4fGVlPDwxNCleKGVlPj4+OXxxPDwyMyl9ZnVuY3Rpb24gTChxLGVlKXtyZXR1cm4ocT4+PjF8ZWU8PDMxKV4ocT4+Pjh8ZWU8PDI0KV5xPj4+N31mdW5jdGlvbiBLKHEsZWUpe3JldHVybihxPj4+MXxlZTw8MzEpXihxPj4+''@;'; put 'put ''OHxlZTw8MjQpXihxPj4+N3xlZTw8MjUpfWZ1bmN0aW9uIFUocSxlZSl7cmV0dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fHE8PDMpXnE+Pj42fWZ1bmN0aW9uIFcocSxlZSl7cmV0dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fHE8PDMpXihxPj4+NnxlZTw8MjYpfWZ1bmN0aW9uIFko''@;'; put 'put ''cSxlZSl7cmV0dXJuIHE+Pj4wPGVlPj4+MD8xOjB9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5''@;'; put 'put ''ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3''@;'; put 'put ''LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9dGhpcy5fdyxKPTB8dGhpcy5fYWgsbmU9MHx0aGlzLl9iaCxpZT0wfHRoaXMuX2NoLGxlPTB8dGhp''@;'; put 'put ''cy5fZGgsbWU9MHx0aGlzLl9laCxfZT0wfHRoaXMuX2ZoLFRlPTB8dGhpcy5fZ2gsU2U9MHx0aGlzLl9oaCxqZT0wfHRoaXMuX2FsLFY9MHx0aGlzLl9ibCxwPTB8dGhpcy5fY2wsYj0wfHRoaXMuX2RsLHg9MHx0aGlzLl9lbCxDPTB8dGhpcy5fZmwsVD0wfHRoaXMuX2dsLEg9MHx0aGlzLl9o''@;'; put 'put ''bCxqPTA7ajwzMjtqKz0yKWVlW2pdPXEucmVhZEludDMyQkUoNCpqKSxlZVtqKzFdPXEucmVhZEludDMyQkUoNCpqKzQpO2Zvcig7ajwxNjA7ais9Mil7dmFyIEU9ZWVbai0zMF0sbT1lZVtqLTMwKzFdLEE9TChFLG0pLGFlPUsobSxFKSx0ZT1VKEU9ZWVbai00XSxtPWVlW2otNCsxXSksc2U9''@;'; put 'put ''VyhtLEUpLEplPWVlW2otMzJdLG90PWVlW2otMzIrMV0seGU9YWUrZWVbai0xNCsxXXwwLHZlPUErZWVbai0xNF0rWSh4ZSxhZSl8MDt2ZT0odmU9dmUrdGUrWSh4ZT14ZStzZXwwLHNlKXwwKStKZStZKHhlPXhlK290fDAsb3QpfDAsZWVbal09dmUsZWVbaisxXT14ZX1mb3IodmFyIFhlPTA7''@;'; put 'put ''WGU8MTYwO1hlKz0yKXt2ZT1lZVtYZV0seGU9ZWVbWGUrMV07dmFyIHplPU8oSixuZSxpZSksRGU9TyhqZSxWLHApLEZlPXooSixqZSksT2U9eihqZSxKKSxJZT1OKG1lLHgpLFZlPU4oeCxtZSksa2U9QltYZV0sQWU9QltYZSsxXSxfdD1GKG1lLF9lLFRlKSxudD1GKHgsQyxUKSxRZT1IK1Zl''@;'; put 'put ''fDAsdW49U2UrSWUrWShRZSxIKXwwO3VuPSh1bj0odW49dW4rX3QrWShRZT1RZStudHwwLG50KXwwKStrZStZKFFlPVFlK0FlfDAsQWUpfDApK3ZlK1koUWU9UWUreGV8MCx4ZSl8MDt2YXIgeXQ9T2UrRGV8MCxNdD1GZSt6ZStZKHl0LE9lKXwwO1NlPVRlLEg9VCxUZT1fZSxUPUMsX2U9bWUs''@;'; put 'put ''Qz14LG1lPWxlK3VuK1koeD1iK1FlfDAsYil8MCxsZT1pZSxiPXAsaWU9bmUscD1WLG5lPUosVj1qZSxKPXVuK010K1koamU9UWUreXR8MCxRZSl8MH10aGlzLl9hbD10aGlzLl9hbCtqZXwwLHRoaXMuX2JsPXRoaXMuX2JsK1Z8MCx0aGlzLl9jbD10aGlzLl9jbCtwfDAsdGhpcy5fZGw9dGhp''@;'; put 'put ''cy5fZGwrYnwwLHRoaXMuX2VsPXRoaXMuX2VsK3h8MCx0aGlzLl9mbD10aGlzLl9mbCtDfDAsdGhpcy5fZ2w9dGhpcy5fZ2wrVHwwLHRoaXMuX2hsPXRoaXMuX2hsK0h8MCx0aGlzLl9haD10aGlzLl9haCtKK1kodGhpcy5fYWwsamUpfDAsdGhpcy5fYmg9dGhpcy5fYmgrbmUrWSh0aGlzLl9i''@;'; put 'put ''bCxWKXwwLHRoaXMuX2NoPXRoaXMuX2NoK2llK1kodGhpcy5fY2wscCl8MCx0aGlzLl9kaD10aGlzLl9kaCtsZStZKHRoaXMuX2RsLGIpfDAsdGhpcy5fZWg9dGhpcy5fZWgrbWUrWSh0aGlzLl9lbCx4KXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK19lK1kodGhpcy5fZmwsQyl8MCx0aGlzLl9naD10''@;'; put 'put ''aGlzLl9naCtUZStZKHRoaXMuX2dsLFQpfDAsdGhpcy5faGg9dGhpcy5faGgrU2UrWSh0aGlzLl9obCxIKXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBxPWcuYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIGVlKEosbmUsaWUpe3Eud3JpdGVJbnQzMkJFKEosaWUpLHEud3Jp''@;'; put 'put ''dGVJbnQzMkJFKG5lLGllKzQpfXJldHVybiBlZSh0aGlzLl9haCx0aGlzLl9hbCwwKSxlZSh0aGlzLl9iaCx0aGlzLl9ibCw4KSxlZSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksZWUodGhpcy5fZGgsdGhpcy5fZGwsMjQpLGVlKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxlZSh0aGlzLl9maCx0aGlz''@;'; put 'put ''Ll9mbCw0MCksZWUodGhpcy5fZ2gsdGhpcy5fZ2wsNDgpLGVlKHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxxfSx1ZS5leHBvcnRzPVB9LDcwNDU6KHVlLFgseSk9Pnt1ZS5leHBvcnRzPWc7dmFyIEk9eSg0NDM1NikuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIGcoKXtJLmNhbGwodGhpcyl9eSg3MTk5''@;'; put 'put ''MykoZyxJKSxnLlJlYWRhYmxlPXkoNjEwOTIpLGcuV3JpdGFibGU9eSgxNTQ5MiksZy5EdXBsZXg9eSgxMDMwKSxnLlRyYW5zZm9ybT15KDQzNDEwKSxnLlBhc3NUaHJvdWdoPXkoODM4MjQpLGcuZmluaXNoZWQ9eSg1Nzg1NCksZy5waXBlbGluZT15KDY4NDYpLGcuU3RyZWFtPWcsZy5wcm90''@;'; put 'put ''b3R5cGUucGlwZT1mdW5jdGlvbihCLHcpe3ZhciBQPXRoaXM7ZnVuY3Rpb24gRihXKXtCLndyaXRhYmxlJiYhMT09PUIud3JpdGUoVykmJlAucGF1c2UmJlAucGF1c2UoKX1mdW5jdGlvbiBPKCl7UC5yZWFkYWJsZSYmUC5yZXN1bWUmJlAucmVzdW1lKCl9UC5vbigiZGF0YSIsRiksQi5vbigi''@;'; put 'put ''ZHJhaW4iLE8pLCFCLl9pc1N0ZGlvJiYoIXd8fCExIT09dy5lbmQpJiYoUC5vbigiZW5kIixOKSxQLm9uKCJjbG9zZSIsTCkpO3ZhciB6PSExO2Z1bmN0aW9uIE4oKXt6fHwoej0hMCxCLmVuZCgpKX1mdW5jdGlvbiBMKCl7enx8KHo9ITAsImZ1bmN0aW9uIj09dHlwZW9mIEIuZGVzdHJveSYm''@;'; put 'put ''Qi5kZXN0cm95KCkpfWZ1bmN0aW9uIEsoVyl7aWYoVSgpLDA9PT1JLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyBXfWZ1bmN0aW9uIFUoKXtQLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixGKSxCLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsTyksUC5yZW1vdmVMaXN0ZW5lcigiZW5k''@;'; put 'put ''IixOKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsTCksUC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEspLEIucmVtb3ZlTGlzdGVuZXIoImVycm9yIixLKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFUpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVKSxCLnJlbW92ZUxpc3RlbmVyKCJjbG9z''@;'; put 'put ''ZSIsVSl9cmV0dXJuIFAub24oImVycm9yIixLKSxCLm9uKCJlcnJvciIsSyksUC5vbigiZW5kIixVKSxQLm9uKCJjbG9zZSIsVSksQi5vbigiY2xvc2UiLFUpLEIuZW1pdCgicGlwZSIsUCksQn19LDMwNDY0OnVlPT57InVzZSBzdHJpY3QiO3ZhciB5PXt9O2Z1bmN0aW9uIEkoUCxGLE8pe098''@;'; put 'put ''fChPPUVycm9yKTt2YXIgTj1mdW5jdGlvbihMKXtmdW5jdGlvbiBLKFUsVyxZKXtyZXR1cm4gTC5jYWxsKHRoaXMsZnVuY3Rpb24geihMLEssVSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBGP0Y6RihMLEssVSl9KFUsVyxZKSl8fHRoaXN9cmV0dXJuIGZ1bmN0aW9uIFgoUCxGKXtQLnByb3Rv''@;'; put 'put ''dHlwZT1PYmplY3QuY3JlYXRlKEYucHJvdG90eXBlKSxQLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QLFAuX19wcm90b19fPUZ9KEssTCksS30oTyk7Ti5wcm90b3R5cGUubmFtZT1PLm5hbWUsTi5wcm90b3R5cGUuY29kZT1QLHlbUF09Tn1mdW5jdGlvbiBfKFAsRil7aWYoQXJyYXkuaXNBcnJh''@;'; put 'put ''eShQKSl7dmFyIE89UC5sZW5ndGg7cmV0dXJuIFA9UC5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIFN0cmluZyh6KX0pLE8+Mj8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUC5zbGljZSgwLE8tMSkuam9pbigiLCAiKSwiLCBvciAiKStQW08tMV06Mj09PU8/Im9uZSBvZiAiLmNvbmNh''@;'; put 'put ''dChGLCIgIikuY29uY2F0KFBbMF0sIiBvciAiKS5jb25jYXQoUFsxXSk6Im9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSl9cmV0dXJuIm9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoU3RyaW5nKFApKX1JKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKFAsRil7cmV0dXJu''@;'; put 'put ''J1RoZSB2YWx1ZSAiJytGKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytQKyciJ30sVHlwZUVycm9yKSxJKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oUCxGLE8pe3ZhciB6LE47aWYoInN0cmluZyI9PXR5cGVvZiBGJiZmdW5jdGlvbiBnKFAsRixPKXtyZXR1cm4gUC5zdWJz''@;'; put 'put ''dHIoIU98fE88MD8wOitPLEYubGVuZ3RoKT09PUZ9KEYsIm5vdCAiKT8oej0ibXVzdCBub3QgYmUiLEY9Ri5yZXBsYWNlKC9ebm90IC8sIiIpKTp6PSJtdXN0IGJlIixmdW5jdGlvbiBCKFAsRixPKXtyZXR1cm4odm9pZCAwPT09T3x8Tz5QLmxlbmd0aCkmJihPPVAubGVuZ3RoKSxQLnN1YnN0''@;'; put 'put ''cmluZyhPLUYubGVuZ3RoLE8pPT09Rn0oUCwiIGFyZ3VtZW50IikpTj0iVGhlICIuY29uY2F0KFAsIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdChfKEYsInR5cGUiKSk7ZWxzZXt2YXIgTD1mdW5jdGlvbiB3KFAsRixPKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIE8mJihPPTApLCEoTytGLmxl''@;'; put 'put ''bmd0aD5QLmxlbmd0aCkmJi0xIT09UC5pbmRleE9mKEYsTyl9KFAsIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7Tj0nVGhlICInLmNvbmNhdChQLCciICcpLmNvbmNhdChMLCIgIikuY29uY2F0KHosIiAiKS5jb25jYXQoXyhGLCJ0eXBlIikpfXJldHVybiBOKyIuIFJlY2VpdmVkIHR5cGUg''@;'; put 'put ''Ii5jb25jYXQodHlwZW9mIE8pfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLEkoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIixmdW5jdGlvbihQKXtyZXR1cm4iVGhlICIrUCsiIG1ldGhvZCBpcyBub3QgaW1w''@;'; put 'put ''bGVtZW50ZWQifSksSSgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxJKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24oUCl7cmV0dXJuIkNhbm5vdCBjYWxsICIrUCsiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSksSSgiRVJSX01V''@;'; put 'put ''TFRJUExFX0NBTExCQUNLIiwiQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIiksSSgiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxJKCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVuZCIpLEkoIkVSUl9T''@;'; put 'put ''VFJFQU1fTlVMTF9WQUxVRVMiLCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIsVHlwZUVycm9yKSxJKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oUCl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrUH0sVHlwZUVycm9yKSxJKCJFUlJfU1RSRUFNX1VOU0hJ''@;'; put 'put ''RlRfQUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSx1ZS5leHBvcnRzLkY9eX0sMTAzMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oTil7dmFyIEw9W107Zm9yKHZhciBLIGluIE4pTC5wdXNoKEsp''@;'; put 'put ''O3JldHVybiBMfTt1ZS5leHBvcnRzPUY7dmFyIF89eSg2MTA5MiksZz15KDE1NDkyKTt5KDcxOTkzKShGLF8pO2Zvcih2YXIgQj1JKGcucHJvdG90eXBlKSx3PTA7dzxCLmxlbmd0aDt3Kyspe3ZhciBQPUJbd107Ri5wcm90b3R5cGVbUF18fChGLnByb3RvdHlwZVtQXT1nLnByb3RvdHlwZVtQ''@;'; put 'put ''XSl9ZnVuY3Rpb24gRihOKXtpZighKHRoaXMgaW5zdGFuY2VvZiBGKSlyZXR1cm4gbmV3IEYoTik7Xy5jYWxsKHRoaXMsTiksZy5jYWxsKHRoaXMsTiksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLE4mJighMT09PU4ucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PU4ud3JpdGFibGUm''@;'; put 'put ''Jih0aGlzLndyaXRhYmxlPSExKSwhMT09PU4uYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsTykpKX1mdW5jdGlvbiBPKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8cHJvY2Vzcy5uZXh0VGljayh6LHRoaXMpfWZ1bmN0aW9uIHooTil7''@;'; put 'put ''Ti5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5w''@;'; put 'put ''cm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIndyaXRhYmxlTGVu''@;'; put 'put ''Z3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10''@;'; put 'put ''aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihMKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9''@;'; put 'put ''PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9TCx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1MKX19KX0sODM4MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1fO3ZhciBJPXkoNDM0MTApO2Z1bmN0aW9uIF8oZyl7''@;'; put 'put ''aWYoISh0aGlzIGluc3RhbmNlb2YgXykpcmV0dXJuIG5ldyBfKGcpO0kuY2FsbCh0aGlzLGcpfXkoNzE5OTMpKF8sSSksXy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihnLEIsdyl7dyhudWxsLGcpfX0sNjEwOTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk7dWUuZXhwb3J0''@;'; put 'put ''cz1WLFYuUmVhZGFibGVTdGF0ZT1qZSx5KDQ0MzU2KTt2YXIgTixnPWZ1bmN0aW9uKEZlLE9lKXtyZXR1cm4gRmUubGlzdGVuZXJzKE9lKS5sZW5ndGh9LEI9eSgxMjYwMSksdz15KDgzODM4KS5CdWZmZXIsUD0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dp''@;'; put 'put ''bmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LHo9eSg3NzE5OSk7Tj16JiZ6LmRlYnVnbG9nP3ouZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgaWUsbGUsbWUsTD15KDc1MjI1KSxLPXkoODgxNTIpLFc9eSgyMjgyNykuZ2V0''@;'; put 'put ''SGlnaFdhdGVyTWFyayxZPXkoMzA0NjQpLkYscT1ZLkVSUl9JTlZBTElEX0FSR19UWVBFLGVlPVkuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixKPVkuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsbmU9WS5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UO3koNzE5OTMpKFYs''@;'; put 'put ''Qik7dmFyIF9lPUsuZXJyb3JPckRlc3Ryb3ksVGU9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gamUoRGUsRmUsT2Upe0k9SXx8eSgxMDMwKSwiYm9vbGVhbiIhPXR5cGVvZiBPZSYmKE9lPUZlIGluc3RhbmNlb2YgSSksdGhpcy5vYmplY3RN''@;'; put 'put ''b2RlPSEhKERlPURlfHx7fSkub2JqZWN0TW9kZSxPZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhRGUucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Vyh0aGlzLERlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLE9lKSx0aGlzLmJ1ZmZlcj1uZXcg''@;'; put 'put ''TCx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJl''@;'; put 'put ''YWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1EZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIURlLmF1dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMu''@;'; put 'put ''ZGVmYXVsdEVuY29kaW5nPURlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLERlLmVuY29kaW5nJiYoaWV8fChpZT15KDc4NDU0KS5JKSx0aGlzLmRlY29kZXI9''@;'; put 'put ''bmV3IGllKERlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPURlLmVuY29kaW5nKX1mdW5jdGlvbiBWKERlKXtpZihJPUl8fHkoMTAzMCksISh0aGlzIGluc3RhbmNlb2YgVikpcmV0dXJuIG5ldyBWKERlKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBqZShEZSx0aGlzLHRoaXMgaW5zdGFuY2Vv''@;'; put 'put ''ZiBJKSx0aGlzLnJlYWRhYmxlPSEwLERlJiYoImZ1bmN0aW9uIj09dHlwZW9mIERlLnJlYWQmJih0aGlzLl9yZWFkPURlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBEZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1EZS5kZXN0cm95KSksQi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHAoRGUsRmUs''@;'; put 'put ''T2UsSWUsVmUpe04oInJlYWRhYmxlQWRkQ2h1bmsiLEZlKTt2YXIgQWUsa2U9RGUuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PUZlKWtlLnJlYWRpbmc9ITEsZnVuY3Rpb24gaihEZSxGZSl7aWYoTigib25Fb2ZDaHVuayIpLCFGZS5lbmRlZCl7aWYoRmUuZGVjb2Rlcil7dmFyIE9lPUZlLmRl''@;'; put 'put ''Y29kZXIuZW5kKCk7T2UmJk9lLmxlbmd0aCYmKEZlLmJ1ZmZlci5wdXNoKE9lKSxGZS5sZW5ndGgrPUZlLm9iamVjdE1vZGU/MTpPZS5sZW5ndGgpfUZlLmVuZGVkPSEwLEZlLnN5bmM/RShEZSk6KEZlLm5lZWRSZWFkYWJsZT0hMSxGZS5lbWl0dGVkUmVhZGFibGV8fChGZS5lbWl0dGVkUmVh''@;'; put 'put ''ZGFibGU9ITAsbShEZSkpKX19KERlLGtlKTtlbHNlIGlmKFZlfHwoQWU9ZnVuY3Rpb24geChEZSxGZSl7dmFyIE9lO3JldHVybiFmdW5jdGlvbiBPKERlKXtyZXR1cm4gdy5pc0J1ZmZlcihEZSl8fERlIGluc3RhbmNlb2YgUH0oRmUpJiYic3RyaW5nIiE9dHlwZW9mIEZlJiZ2b2lkIDAhPT1G''@;'; put 'put ''ZSYmIURlLm9iamVjdE1vZGUmJihPZT1uZXcgcSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJheSJdLEZlKSksT2V9KGtlLEZlKSksQWUpX2UoRGUsQWUpO2Vsc2UgaWYoa2Uub2JqZWN0TW9kZXx8RmUmJkZlLmxlbmd0aD4wKWlmKCJzdHJpbmciIT10eXBlb2YgRmUmJiFr''@;'; put 'put ''ZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoRmUpIT09dy5wcm90b3R5cGUmJihGZT1mdW5jdGlvbiBGKERlKXtyZXR1cm4gdy5mcm9tKERlKX0oRmUpKSxJZSlrZS5lbmRFbWl0dGVkP19lKERlLG5ldyBuZSk6YihEZSxrZSxGZSwhMCk7ZWxzZSBpZihrZS5lbmRlZClfZShE''@;'; put 'put ''ZSxuZXcgZWUpO2Vsc2V7aWYoa2UuZGVzdHJveWVkKXJldHVybiExO2tlLnJlYWRpbmc9ITEsa2UuZGVjb2RlciYmIU9lPyhGZT1rZS5kZWNvZGVyLndyaXRlKEZlKSxrZS5vYmplY3RNb2RlfHwwIT09RmUubGVuZ3RoP2IoRGUsa2UsRmUsITEpOkEoRGUsa2UpKTpiKERlLGtlLEZlLCExKX1l''@;'; put 'put ''bHNlIEllfHwoa2UucmVhZGluZz0hMSxBKERlLGtlKSk7cmV0dXJuIWtlLmVuZGVkJiYoa2UubGVuZ3RoPGtlLmhpZ2hXYXRlck1hcmt8fDA9PT1rZS5sZW5ndGgpfWZ1bmN0aW9uIGIoRGUsRmUsT2UsSWUpe0ZlLmZsb3dpbmcmJjA9PT1GZS5sZW5ndGgmJiFGZS5zeW5jPyhGZS5hd2FpdERy''@;'; put 'put ''YWluPTAsRGUuZW1pdCgiZGF0YSIsT2UpKTooRmUubGVuZ3RoKz1GZS5vYmplY3RNb2RlPzE6T2UubGVuZ3RoLEllP0ZlLmJ1ZmZlci51bnNoaWZ0KE9lKTpGZS5idWZmZXIucHVzaChPZSksRmUubmVlZFJlYWRhYmxlJiZFKERlKSksQShEZSxGZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KFYu''@;'; put 'put ''cHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEZlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9RmUpfX0pLFYucHJvdG90eXBlLmRlc3Ryb3k9Sy5kZXN0cm95LFYucHJvdG90eXBlLl91bmRlc3Ryb3k9Sy51bmRlc3Ryb3ksVi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRGUsRmUpe0ZlKERlKX0sVi5wcm90b3R5cGUucHVzaD1mdW5jdGlv''@;'; put 'put ''bihEZSxGZSl7dmFyIEllLE9lPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIE9lLm9iamVjdE1vZGU/SWU9ITA6InN0cmluZyI9PXR5cGVvZiBEZSYmKChGZT1GZXx8T2UuZGVmYXVsdEVuY29kaW5nKSE9PU9lLmVuY29kaW5nJiYoRGU9dy5mcm9tKERlLEZlKSxGZT0iIiksSWU9ITApLHAo''@;'; put 'put ''dGhpcyxEZSxGZSwhMSxJZSl9LFYucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oRGUpe3JldHVybiBwKHRoaXMsRGUsbnVsbCwhMCwhMSl9LFYucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LFYucHJvdG90eXBl''@;'; put 'put ''LnNldEVuY29kaW5nPWZ1bmN0aW9uKERlKXtpZXx8KGllPXkoNzg0NTQpLkkpO3ZhciBGZT1uZXcgaWUoRGUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1GZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3Io''@;'; put 'put ''dmFyIE9lPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQsSWU9IiI7bnVsbCE9PU9lOylJZSs9RmUud3JpdGUoT2UuZGF0YSksT2U9T2UubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PUllJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZl''@;'; put 'put ''ci5wdXNoKEllKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aD1JZS5sZW5ndGgsdGhpc307dmFyIEM9MTA3Mzc0MTgyNDtmdW5jdGlvbiBIKERlLEZlKXtyZXR1cm4gRGU8PTB8fDA9PT1GZS5sZW5ndGgmJkZlLmVuZGVkPzA6RmUub2JqZWN0TW9kZT8xOkRlIT1EZT9GZS5mbG93aW5nJiZG''@;'; put 'put ''ZS5sZW5ndGg/RmUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6RmUubGVuZ3RoOihEZT5GZS5oaWdoV2F0ZXJNYXJrJiYoRmUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiBUKERlKXtyZXR1cm4gRGU+PUM/RGU9QzooRGUtLSxEZXw9RGU+Pj4xLERlfD1EZT4+PjIsRGV8PURlPj4+NCxEZXw9RGU+''@;'; put 'put ''Pj44LERlfD1EZT4+PjE2LERlKyspLERlfShEZSkpLERlPD1GZS5sZW5ndGg/RGU6RmUuZW5kZWQ/RmUubGVuZ3RoOihGZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIEUoRGUpe3ZhciBGZT1EZS5fcmVhZGFibGVTdGF0ZTtOKCJlbWl0UmVhZGFibGUiLEZlLm5lZWRSZWFkYWJsZSxG''@;'; put 'put ''ZS5lbWl0dGVkUmVhZGFibGUpLEZlLm5lZWRSZWFkYWJsZT0hMSxGZS5lbWl0dGVkUmVhZGFibGV8fChOKCJlbWl0UmVhZGFibGUiLEZlLmZsb3dpbmcpLEZlLmVtaXR0ZWRSZWFkYWJsZT0hMCxwcm9jZXNzLm5leHRUaWNrKG0sRGUpKX1mdW5jdGlvbiBtKERlKXt2YXIgRmU9RGUuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGU7TigiZW1pdFJlYWRhYmxlXyIsRmUuZGVzdHJveWVkLEZlLmxlbmd0aCxGZS5lbmRlZCksIUZlLmRlc3Ryb3llZCYmKEZlLmxlbmd0aHx8RmUuZW5kZWQpJiYoRGUuZW1pdCgicmVhZGFibGUiKSxGZS5lbWl0dGVkUmVhZGFibGU9ITEpLEZlLm5lZWRSZWFkYWJsZT0hRmUuZmxv''@;'; put 'put ''d2luZyYmIUZlLmVuZGVkJiZGZS5sZW5ndGg8PUZlLmhpZ2hXYXRlck1hcmssb3QoRGUpfWZ1bmN0aW9uIEEoRGUsRmUpe0ZlLnJlYWRpbmdNb3JlfHwoRmUucmVhZGluZ01vcmU9ITAscHJvY2Vzcy5uZXh0VGljayhhZSxEZSxGZSkpfWZ1bmN0aW9uIGFlKERlLEZlKXtmb3IoOyFGZS5yZWFk''@;'; put 'put ''aW5nJiYhRmUuZW5kZWQmJihGZS5sZW5ndGg8RmUuaGlnaFdhdGVyTWFya3x8RmUuZmxvd2luZyYmMD09PUZlLmxlbmd0aCk7KXt2YXIgT2U9RmUubGVuZ3RoO2lmKE4oIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksRGUucmVhZCgwKSxPZT09PUZlLmxlbmd0aClicmVha31GZS5yZWFkaW5nTW9y''@;'; put 'put ''ZT0hMX1mdW5jdGlvbiBzZShEZSl7dmFyIEZlPURlLl9yZWFkYWJsZVN0YXRlO0ZlLnJlYWRhYmxlTGlzdGVuaW5nPURlLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxGZS5yZXN1bWVTY2hlZHVsZWQmJiFGZS5wYXVzZWQ/RmUuZmxvd2luZz0hMDpEZS5saXN0ZW5lckNvdW50KCJkYXRh''@;'; put 'put ''Iik+MCYmRGUucmVzdW1lKCl9ZnVuY3Rpb24gd2UoRGUpe04oInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLERlLnJlYWQoMCl9ZnVuY3Rpb24gSmUoRGUsRmUpe04oInJlc3VtZSIsRmUucmVhZGluZyksRmUucmVhZGluZ3x8RGUucmVhZCgwKSxGZS5yZXN1bWVTY2hlZHVsZWQ9ITEsRGUu''@;'; put 'put ''ZW1pdCgicmVzdW1lIiksb3QoRGUpLEZlLmZsb3dpbmcmJiFGZS5yZWFkaW5nJiZEZS5yZWFkKDApfWZ1bmN0aW9uIG90KERlKXt2YXIgRmU9RGUuX3JlYWRhYmxlU3RhdGU7Zm9yKE4oImZsb3ciLEZlLmZsb3dpbmcpO0ZlLmZsb3dpbmcmJm51bGwhPT1EZS5yZWFkKCk7KTt9ZnVuY3Rpb24g''@;'; put 'put ''eGUoRGUsRmUpe3JldHVybiAwPT09RmUubGVuZ3RoP251bGw6KEZlLm9iamVjdE1vZGU/T2U9RmUuYnVmZmVyLnNoaWZ0KCk6IURlfHxEZT49RmUubGVuZ3RoPyhPZT1GZS5kZWNvZGVyP0ZlLmJ1ZmZlci5qb2luKCIiKToxPT09RmUuYnVmZmVyLmxlbmd0aD9GZS5idWZmZXIuZmlyc3QoKTpG''@;'; put 'put ''ZS5idWZmZXIuY29uY2F0KEZlLmxlbmd0aCksRmUuYnVmZmVyLmNsZWFyKCkpOk9lPUZlLmJ1ZmZlci5jb25zdW1lKERlLEZlLmRlY29kZXIpLE9lKTt2YXIgT2V9ZnVuY3Rpb24gdmUoRGUpe3ZhciBGZT1EZS5fcmVhZGFibGVTdGF0ZTtOKCJlbmRSZWFkYWJsZSIsRmUuZW5kRW1pdHRlZCks''@;'; put 'put ''RmUuZW5kRW1pdHRlZHx8KEZlLmVuZGVkPSEwLHByb2Nlc3MubmV4dFRpY2soWGUsRmUsRGUpKX1mdW5jdGlvbiBYZShEZSxGZSl7aWYoTigiZW5kUmVhZGFibGVOVCIsRGUuZW5kRW1pdHRlZCxEZS5sZW5ndGgpLCFEZS5lbmRFbWl0dGVkJiYwPT09RGUubGVuZ3RoJiYoRGUuZW5kRW1pdHRl''@;'; put 'put ''ZD0hMCxGZS5yZWFkYWJsZT0hMSxGZS5lbWl0KCJlbmQiKSxEZS5hdXRvRGVzdHJveSkpe3ZhciBPZT1GZS5fd3JpdGFibGVTdGF0ZTsoIU9lfHxPZS5hdXRvRGVzdHJveSYmT2UuZmluaXNoZWQpJiZGZS5kZXN0cm95KCl9fWZ1bmN0aW9uIHplKERlLEZlKXtmb3IodmFyIE9lPTAsSWU9RGUu''@;'; put 'put ''bGVuZ3RoO09lPEllO09lKyspaWYoRGVbT2VdPT09RmUpcmV0dXJuIE9lO3JldHVybi0xfVYucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oRGUpe04oInJlYWQiLERlKSxEZT1wYXJzZUludChEZSwxMCk7dmFyIEZlPXRoaXMuX3JlYWRhYmxlU3RhdGUsT2U9RGU7aWYoMCE9PURlJiYoRmUuZW1p''@;'; put 'put ''dHRlZFJlYWRhYmxlPSExKSwwPT09RGUmJkZlLm5lZWRSZWFkYWJsZSYmKCgwIT09RmUuaGlnaFdhdGVyTWFyaz9GZS5sZW5ndGg+PUZlLmhpZ2hXYXRlck1hcms6RmUubGVuZ3RoPjApfHxGZS5lbmRlZCkpcmV0dXJuIE4oInJlYWQ6IGVtaXRSZWFkYWJsZSIsRmUubGVuZ3RoLEZlLmVuZGVk''@;'; put 'put ''KSwwPT09RmUubGVuZ3RoJiZGZS5lbmRlZD92ZSh0aGlzKTpFKHRoaXMpLG51bGw7aWYoMD09PShEZT1IKERlLEZlKSkmJkZlLmVuZGVkKXJldHVybiAwPT09RmUubGVuZ3RoJiZ2ZSh0aGlzKSxudWxsO3ZhciBWZSxJZT1GZS5uZWVkUmVhZGFibGU7cmV0dXJuIE4oIm5lZWQgcmVhZGFibGUi''@;'; put 'put ''LEllKSwoMD09PUZlLmxlbmd0aHx8RmUubGVuZ3RoLURlPEZlLmhpZ2hXYXRlck1hcmspJiZOKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsSWU9ITApLEZlLmVuZGVkfHxGZS5yZWFkaW5nP04oInJlYWRpbmcgb3IgZW5kZWQiLEllPSExKTpJZSYmKE4oImRvIHJlYWQiKSxGZS5yZWFk''@;'; put 'put ''aW5nPSEwLEZlLnN5bmM9ITAsMD09PUZlLmxlbmd0aCYmKEZlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChGZS5oaWdoV2F0ZXJNYXJrKSxGZS5zeW5jPSExLEZlLnJlYWRpbmd8fChEZT1IKE9lLEZlKSkpLG51bGw9PT0oVmU9RGU+MD94ZShEZSxGZSk6bnVsbCk/KEZlLm5lZWRSZWFk''@;'; put 'put ''YWJsZT1GZS5sZW5ndGg8PUZlLmhpZ2hXYXRlck1hcmssRGU9MCk6KEZlLmxlbmd0aC09RGUsRmUuYXdhaXREcmFpbj0wKSwwPT09RmUubGVuZ3RoJiYoRmUuZW5kZWR8fChGZS5uZWVkUmVhZGFibGU9ITApLE9lIT09RGUmJkZlLmVuZGVkJiZ2ZSh0aGlzKSksbnVsbCE9PVZlJiZ0aGlzLmVt''@;'; put 'put ''aXQoImRhdGEiLFZlKSxWZX0sVi5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oRGUpe19lKHRoaXMsbmV3IEooIl9yZWFkKCkiKSl9LFYucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oRGUsRmUpe3ZhciBPZT10aGlzLEllPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKEllLnBpcGVzQ291bnQp''@;'; put 'put ''e2Nhc2UgMDpJZS5waXBlcz1EZTticmVhaztjYXNlIDE6SWUucGlwZXM9W0llLnBpcGVzLERlXTticmVhaztkZWZhdWx0OkllLnBpcGVzLnB1c2goRGUpfUllLnBpcGVzQ291bnQrPTEsTigicGlwZSBjb3VudD0lZCBvcHRzPSVqIixJZS5waXBlc0NvdW50LEZlKTt2YXIga2U9RmUmJiExPT09''@;'; put 'put ''RmUuZW5kfHxEZT09PXByb2Nlc3Muc3Rkb3V0fHxEZT09PXByb2Nlc3Muc3RkZXJyPyRlOl90O2Z1bmN0aW9uIF90KCl7Tigib25lbmQiKSxEZS5lbmQoKX1JZS5lbmRFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2soa2UpOk9lLm9uY2UoImVuZCIsa2UpLERlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9u''@;'; put 'put ''IEFlKHR0LEhlKXtOKCJvbnVucGlwZSIpLHR0PT09T2UmJkhlJiYhMT09PUhlLmhhc1VucGlwZWQmJihIZS5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIHVuKCl7TigiY2xlYW51cCIpLERlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsRHQpLERlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGl0KSxE''@;'; put 'put ''ZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLG50KSxEZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLE10KSxEZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixBZSksT2UucmVtb3ZlTGlzdGVuZXIoImVuZCIsX3QpLE9lLnJlbW92ZUxpc3RlbmVyKCJlbmQiLCRlKSxPZS5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''ZGF0YSIseXQpLFFlPSEwLEllLmF3YWl0RHJhaW4mJighRGUuX3dyaXRhYmxlU3RhdGV8fERlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJm50KCl9KCkpfSk7dmFyIG50PWZ1bmN0aW9uIHRlKERlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgT2U9RGUuX3JlYWRhYmxlU3RhdGU7TigicGlw''@;'; put 'put ''ZU9uRHJhaW4iLE9lLmF3YWl0RHJhaW4pLE9lLmF3YWl0RHJhaW4mJk9lLmF3YWl0RHJhaW4tLSwwPT09T2UuYXdhaXREcmFpbiYmZyhEZSwiZGF0YSIpJiYoT2UuZmxvd2luZz0hMCxvdChEZSkpfX0oT2UpO0RlLm9uKCJkcmFpbiIsbnQpO3ZhciBRZT0hMTtmdW5jdGlvbiB5dCh0dCl7Tigi''@;'; put 'put ''b25kYXRhIik7dmFyIEhlPURlLndyaXRlKHR0KTtOKCJkZXN0LndyaXRlIixIZSksITE9PT1IZSYmKCgxPT09SWUucGlwZXNDb3VudCYmSWUucGlwZXM9PT1EZXx8SWUucGlwZXNDb3VudD4xJiYtMSE9PXplKEllLnBpcGVzLERlKSkmJiFRZSYmKE4oImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBw''@;'; put 'put ''YXVzZSIsSWUuYXdhaXREcmFpbiksSWUuYXdhaXREcmFpbisrKSxPZS5wYXVzZSgpKX1mdW5jdGlvbiBNdCh0dCl7Tigib25lcnJvciIsdHQpLCRlKCksRGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixNdCksMD09PWcoRGUsImVycm9yIikmJl9lKERlLHR0KX1mdW5jdGlvbiBEdCgpe0RlLnJl''@;'; put 'put ''bW92ZUxpc3RlbmVyKCJmaW5pc2giLGl0KSwkZSgpfWZ1bmN0aW9uIGl0KCl7Tigib25maW5pc2giKSxEZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLER0KSwkZSgpfWZ1bmN0aW9uICRlKCl7TigidW5waXBlIiksT2UudW5waXBlKERlKX1yZXR1cm4gT2Uub24oImRhdGEiLHl0KSxmdW5jdGlv''@;'; put 'put ''biBTZShEZSxGZSxPZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIERlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gRGUucHJlcGVuZExpc3RlbmVyKEZlLE9lKTtEZS5fZXZlbnRzJiZEZS5fZXZlbnRzW0ZlXT9BcnJheS5pc0FycmF5KERlLl9ldmVudHNbRmVdKT9EZS5fZXZlbnRzW0ZlXS51bnNo''@;'; put 'put ''aWZ0KE9lKTpEZS5fZXZlbnRzW0ZlXT1bT2UsRGUuX2V2ZW50c1tGZV1dOkRlLm9uKEZlLE9lKX0oRGUsImVycm9yIixNdCksRGUub25jZSgiY2xvc2UiLER0KSxEZS5vbmNlKCJmaW5pc2giLGl0KSxEZS5lbWl0KCJwaXBlIixPZSksSWUuZmxvd2luZ3x8KE4oInBpcGUgcmVzdW1lIiksT2Uu''@;'; put 'put ''cmVzdW1lKCkpLERlfSxWLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oRGUpe3ZhciBGZT10aGlzLl9yZWFkYWJsZVN0YXRlLE9lPXtoYXNVbnBpcGVkOiExfTtpZigwPT09RmUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09RmUucGlwZXNDb3VudClyZXR1cm4gRGUmJkRlIT09RmUu''@;'; put 'put ''cGlwZXN8fChEZXx8KERlPUZlLnBpcGVzKSxGZS5waXBlcz1udWxsLEZlLnBpcGVzQ291bnQ9MCxGZS5mbG93aW5nPSExLERlJiZEZS5lbWl0KCJ1bnBpcGUiLHRoaXMsT2UpKSx0aGlzO2lmKCFEZSl7dmFyIEllPUZlLnBpcGVzLFZlPUZlLnBpcGVzQ291bnQ7RmUucGlwZXM9bnVsbCxGZS5w''@;'; put 'put ''aXBlc0NvdW50PTAsRmUuZmxvd2luZz0hMTtmb3IodmFyIGtlPTA7a2U8VmU7a2UrKylJZVtrZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIEFlPXplKEZlLnBpcGVzLERlKTtyZXR1cm4tMT09PUFlfHwoRmUucGlwZXMuc3BsaWNlKEFlLDEp''@;'; put 'put ''LEZlLnBpcGVzQ291bnQtPTEsMT09PUZlLnBpcGVzQ291bnQmJihGZS5waXBlcz1GZS5waXBlc1swXSksRGUuZW1pdCgidW5waXBlIix0aGlzLE9lKSksdGhpc30sVi5wcm90b3R5cGUuYWRkTGlzdGVuZXI9Vi5wcm90b3R5cGUub249ZnVuY3Rpb24oRGUsRmUpe3ZhciBPZT1CLnByb3RvdHlw''@;'; put 'put ''ZS5vbi5jYWxsKHRoaXMsRGUsRmUpLEllPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuImRhdGEiPT09RGU/KEllLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09SWUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKSk6InJlYWRhYmxlIj09PURl''@;'; put 'put ''JiYhSWUuZW5kRW1pdHRlZCYmIUllLnJlYWRhYmxlTGlzdGVuaW5nJiYoSWUucmVhZGFibGVMaXN0ZW5pbmc9SWUubmVlZFJlYWRhYmxlPSEwLEllLmZsb3dpbmc9ITEsSWUuZW1pdHRlZFJlYWRhYmxlPSExLE4oIm9uIHJlYWRhYmxlIixJZS5sZW5ndGgsSWUucmVhZGluZyksSWUubGVuZ3Ro''@;'; put 'put ''P0UodGhpcyk6SWUucmVhZGluZ3x8cHJvY2Vzcy5uZXh0VGljayh3ZSx0aGlzKSksT2V9LFYucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKERlLEZlKXt2YXIgT2U9Qi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLERlLEZlKTtyZXR1cm4icmVhZGFibGUiPT09''@;'; put 'put ''RGUmJnByb2Nlc3MubmV4dFRpY2soc2UsdGhpcyksT2V9LFYucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihEZSl7dmFyIEZlPUIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuKCJyZWFkYWJsZSI9PT1EZXx8dm9p''@;'; put 'put ''ZCAwPT09RGUpJiZwcm9jZXNzLm5leHRUaWNrKHNlLHRoaXMpLEZlfSxWLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgRGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gRGUuZmxvd2luZ3x8KE4oInJlc3VtZSIpLERlLmZsb3dpbmc9IURlLnJlYWRhYmxlTGlzdGVuaW5nLGZ1''@;'; put 'put ''bmN0aW9uIFVlKERlLEZlKXtGZS5yZXN1bWVTY2hlZHVsZWR8fChGZS5yZXN1bWVTY2hlZHVsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhKZSxEZSxGZSkpfSh0aGlzLERlKSksRGUucGF1c2VkPSExLHRoaXN9LFYucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIE4oImNhbGwgcGF1''@;'; put 'put ''c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKE4oInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVz''@;'; put 'put ''ZWQ9ITAsdGhpc30sVi5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihEZSl7dmFyIEZlPXRoaXMsT2U9dGhpcy5fcmVhZGFibGVTdGF0ZSxJZT0hMTtmb3IodmFyIFZlIGluIERlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoTigid3JhcHBlZCBlbmQiKSxPZS5kZWNvZGVyJiYhT2UuZW5kZWQpe3Zh''@;'; put 'put ''ciBBZT1PZS5kZWNvZGVyLmVuZCgpO0FlJiZBZS5sZW5ndGgmJkZlLnB1c2goQWUpfUZlLnB1c2gobnVsbCl9KSxEZS5vbigiZGF0YSIsZnVuY3Rpb24oQWUpe04oIndyYXBwZWQgZGF0YSIpLE9lLmRlY29kZXImJihBZT1PZS5kZWNvZGVyLndyaXRlKEFlKSksT2Uub2JqZWN0TW9kZSYmbnVs''@;'; put 'put ''bD09QWV8fCEoT2Uub2JqZWN0TW9kZXx8QWUmJkFlLmxlbmd0aCl8fEZlLnB1c2goQWUpfHwoSWU9ITAsRGUucGF1c2UoKSl9KSxEZSl2b2lkIDA9PT10aGlzW1ZlXSYmImZ1bmN0aW9uIj09dHlwZW9mIERlW1ZlXSYmKHRoaXNbVmVdPWZ1bmN0aW9uKF90KXtyZXR1cm4gZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gRGVbX3RdLmFwcGx5KERlLGFyZ3VtZW50cyl9fShWZSkpO2Zvcih2YXIga2U9MDtrZTxUZS5sZW5ndGg7a2UrKylEZS5vbihUZVtrZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxUZVtrZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihBZSl7Tigid3JhcHBlZCBfcmVhZCIsQWUp''@;'; put 'put ''LEllJiYoSWU9ITEsRGUucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVi5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWxlJiYobGU9eSgxMjY4MykpLGxlKHRoaXMpfSksT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KFYucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZl''@;'; put 'put ''ciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oRmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9RmUpfX0pLFYuX2Zyb21MaXN0PXhlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlw''@;'; put 'put ''ZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVi5mcm9tPWZ1bmN0aW9uKERlLEZlKXtyZXR1cm4gdm9pZCAwPT09bWUmJihtZT15KDQ3''@;'; put 'put ''NzY1KSksbWUoVixEZSxGZSl9KX0sNDM0MTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1PO3ZhciBJPXkoMzA0NjQpLkYsXz1JLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGc9SS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssQj1JLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9U''@;'; put 'put ''UkFOU0ZPUk1JTkcsdz1JLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxQPXkoMTAzMCk7ZnVuY3Rpb24gRihMLEspe3ZhciBVPXRoaXMuX3RyYW5zZm9ybVN0YXRlO1UudHJhbnNmb3JtaW5nPSExO3ZhciBXPVUud3JpdGVjYjtpZihudWxsPT09VylyZXR1cm4gdGhpcy5lbWl0KCJlcnJv''@;'; put 'put ''ciIsbmV3IGcpO1Uud3JpdGVjaHVuaz1udWxsLFUud3JpdGVjYj1udWxsLG51bGwhPUsmJnRoaXMucHVzaChLKSxXKEwpO3ZhciBZPXRoaXMuX3JlYWRhYmxlU3RhdGU7WS5yZWFkaW5nPSExLChZLm5lZWRSZWFkYWJsZXx8WS5sZW5ndGg8WS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChZ''@;'; put 'put ''LmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIE8oTCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPKEwpO1AuY2FsbCh0aGlzLEwpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpGLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6''@;'; put 'put ''ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxMJiYoImZ1bmN0aW9uIj09dHlwZW9mIEwudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNm''@;'; put 'put ''b3JtPUwudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgTC5mbHVzaCYmKHRoaXMuX2ZsdXNoPUwuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHopfWZ1bmN0aW9uIHooKXt2YXIgTD10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZS5kZXN0cm95ZWQ/Tih0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goZnVuY3Rpb24oSyxVKXtOKEwsSyxVKX0pfWZ1bmN0aW9uIE4oTCxLLFUpe2lmKEspcmV0dXJuIEwuZW1pdCgiZXJyb3IiLEspO2lmKG51bGwhPVUmJkwucHVzaChVKSxMLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJv''@;'; put 'put ''dyBuZXcgdztpZihMLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEI7cmV0dXJuIEwucHVzaChudWxsKX15KDcxOTkzKShPLFApLE8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxQ''@;'; put 'put ''LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxMLEspfSxPLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEwsSyxVKXtVKG5ldyBfKCJfdHJhbnNmb3JtKCkiKSl9LE8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoVy53''@;'; put 'put ''cml0ZWNiPVUsVy53cml0ZWNodW5rPUwsVy53cml0ZWVuY29kaW5nPUssIVcudHJhbnNmb3JtaW5nKXt2YXIgWT10aGlzLl9yZWFkYWJsZVN0YXRlOyhXLm5lZWRUcmFuc2Zvcm18fFkubmVlZFJlYWRhYmxlfHxZLmxlbmd0aDxZLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKFkuaGlnaFdh''@;'; put 'put ''dGVyTWFyayl9fSxPLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09Sy53cml0ZWNodW5rfHxLLnRyYW5zZm9ybWluZz9LLm5lZWRUcmFuc2Zvcm09ITA6KEsudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShLLndyaXRl''@;'; put 'put ''Y2h1bmssSy53cml0ZWVuY29kaW5nLEsuYWZ0ZXJUcmFuc2Zvcm0pKX0sTy5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oTCxLKXtQLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsTCxmdW5jdGlvbihVKXtLKFUpfSl9fSwxNTQ5MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5j''@;'; put 'put ''dGlvbiBfKG90KXt2YXIgeGU9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gSmUob3QseGUsdmUpe3ZhciBYZT1vdC5lbnRyeTtmb3Iob3QuZW50cnk9bnVsbDtYZTspe3ZhciB6ZT1YZS5jYWxsYmFjazt4ZS5wZW5k''@;'; put 'put ''aW5nY2ItLSx6ZSh2ZSksWGU9WGUubmV4dH14ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1vdH0oeGUsb3QpfX12YXIgZzt1ZS5leHBvcnRzPWplLGplLldyaXRhYmxlU3RhdGU9VGU7dmFyIFNlLEI9e2RlcHJlY2F0ZTp5KDMzOTgpfSx3PXkoMTI2MDEpLFA9eSg4MzgzOCkuQnVmZmVyLEY9''@;'; put 'put ''KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxOPXkoODgxNTIpLEs9eSgyMjgyNykuZ2V0SGlnaFdhdGVyTWFyayxVPXkoMzA0NjQpLkYsVz1VLkVSUl9JTlZB''@;'; put 'put ''TElEX0FSR19UWVBFLFk9VS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxxPVUuRVJSX01VTFRJUExFX0NBTExCQUNLLGVlPVUuRVJSX1NUUkVBTV9DQU5OT1RfUElQRSxKPVUuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsbmU9VS5FUlJfU1RSRUFNX05VTExfVkFMVUVTLGllPVUuRVJSX1NUUkVB''@;'; put 'put ''TV9XUklURV9BRlRFUl9FTkQsbGU9VS5FUlJfVU5LTk9XTl9FTkNPRElORyxtZT1OLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIF9lKCl7fWZ1bmN0aW9uIFRlKG90LHhlLHZlKXtnPWd8fHkoMTAzMCksImJvb2xlYW4iIT10eXBlb2YgdmUmJih2ZT14ZSBpbnN0YW5jZW9mIGcpLHRoaXMub2Jq''@;'; put 'put ''ZWN0TW9kZT0hIShvdD1vdHx8e30pLm9iamVjdE1vZGUsdmUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIW90LndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPUsodGhpcyxvdCwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix2ZSksdGhpcy5maW5hbENh''@;'; put 'put ''bGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1vdC5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1vdC5kZWZhdWx0''@;'; put 'put ''RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKHplKXshZnVuY3Rpb24gaihvdCx4ZSl7dmFyIHZlPW90Ll93cml0YWJsZVN0''@;'; put 'put ''YXRlLFhlPXZlLnN5bmMsemU9dmUud3JpdGVjYjtpZigiZnVuY3Rpb24iIT10eXBlb2YgemUpdGhyb3cgbmV3IHE7aWYoZnVuY3Rpb24gSChvdCl7b3Qud3JpdGluZz0hMSxvdC53cml0ZWNiPW51bGwsb3QubGVuZ3RoLT1vdC53cml0ZWxlbixvdC53cml0ZWxlbj0wfSh2ZSkseGUpIWZ1bmN0''@;'; put 'put ''aW9uIFQob3QseGUsdmUsWGUsemUpey0teGUucGVuZGluZ2NiLHZlPyhwcm9jZXNzLm5leHRUaWNrKHplLFhlKSxwcm9jZXNzLm5leHRUaWNrKHdlLG90LHhlKSxvdC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbWUob3QsWGUpKTooemUoWGUpLG90Ll93cml0YWJsZVN0YXRlLmVy''@;'; put 'put ''cm9yRW1pdHRlZD0hMCxtZShvdCxYZSksd2Uob3QseGUpKX0ob3QsdmUsWGUseGUsemUpO2Vsc2V7dmFyIERlPWFlKHZlKXx8b3QuZGVzdHJveWVkOyFEZSYmIXZlLmNvcmtlZCYmIXZlLmJ1ZmZlclByb2Nlc3NpbmcmJnZlLmJ1ZmZlcmVkUmVxdWVzdCYmQShvdCx2ZSksWGU/cHJvY2Vzcy5u''@;'; put 'put ''ZXh0VGljayhFLG90LHZlLERlLHplKTpFKG90LHZlLERlLHplKX19KHhlLHplKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZp''@;'; put 'put ''bmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSExIT09b3QuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFvdC5hdXRvRGVzdHJveSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IF8odGhpcyl9ZnVu''@;'; put 'put ''Y3Rpb24gamUob3Qpe3ZhciB4ZT10aGlzIGluc3RhbmNlb2YoZz1nfHx5KDEwMzApKTtpZigheGUmJiFTZS5jYWxsKGplLHRoaXMpKXJldHVybiBuZXcgamUob3QpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IFRlKG90LHRoaXMseGUpLHRoaXMud3JpdGFibGU9ITAsb3QmJigiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2Ygb3Qud3JpdGUmJih0aGlzLl93cml0ZT1vdC53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIG90LndyaXRldiYmKHRoaXMuX3dyaXRldj1vdC53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBvdC5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1vdC5kZXN0cm95KSwiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2Ygb3QuZmluYWwmJih0aGlzLl9maW5hbD1vdC5maW5hbCkpLHcuY2FsbCh0aGlzKX1mdW5jdGlvbiBDKG90LHhlLHZlLFhlLHplLERlLEZlKXt4ZS53cml0ZWxlbj1YZSx4ZS53cml0ZWNiPUZlLHhlLndyaXRpbmc9ITAseGUuc3luYz0hMCx4ZS5kZXN0cm95ZWQ/eGUub253cml0''@;'; put 'put ''ZShuZXcgSigid3JpdGUiKSk6dmU/b3QuX3dyaXRldih6ZSx4ZS5vbndyaXRlKTpvdC5fd3JpdGUoemUsRGUseGUub253cml0ZSkseGUuc3luYz0hMX1mdW5jdGlvbiBFKG90LHhlLHZlLFhlKXt2ZXx8ZnVuY3Rpb24gbShvdCx4ZSl7MD09PXhlLmxlbmd0aCYmeGUubmVlZERyYWluJiYoeGUu''@;'; put 'put ''bmVlZERyYWluPSExLG90LmVtaXQoImRyYWluIikpfShvdCx4ZSkseGUucGVuZGluZ2NiLS0sWGUoKSx3ZShvdCx4ZSl9ZnVuY3Rpb24gQShvdCx4ZSl7eGUuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgdmU9eGUuYnVmZmVyZWRSZXF1ZXN0O2lmKG90Ll93cml0ZXYmJnZlJiZ2ZS5uZXh0KXt2''@;'; put 'put ''YXIgemU9bmV3IEFycmF5KHhlLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxEZT14ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7RGUuZW50cnk9dmU7Zm9yKHZhciBGZT0wLE9lPSEwO3ZlOyl6ZVtGZV09dmUsdmUuaXNCdWZ8fChPZT0hMSksdmU9dmUubmV4dCxGZSs9MTt6ZS5hbGxCdWZmZXJzPU9lLEMo''@;'; put 'put ''b3QseGUsITAseGUubGVuZ3RoLHplLCIiLERlLmZpbmlzaCkseGUucGVuZGluZ2NiKysseGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLERlLm5leHQ/KHhlLmNvcmtlZFJlcXVlc3RzRnJlZT1EZS5uZXh0LERlLm5leHQ9bnVsbCk6eGUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBfKHhlKSx4''@;'; put 'put ''ZS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDt2ZTspe3ZhciBJZT12ZS5jaHVuaztpZihDKG90LHhlLCExLHhlLm9iamVjdE1vZGU/MTpJZS5sZW5ndGgsSWUsdmUuZW5jb2RpbmcsdmUuY2FsbGJhY2spLHZlPXZlLm5leHQseGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSx4ZS53''@;'; put 'put ''cml0aW5nKWJyZWFrfW51bGw9PT12ZSYmKHhlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9eGUuYnVmZmVyZWRSZXF1ZXN0PXZlLHhlLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gYWUob3Qpe3JldHVybiBvdC5lbmRpbmcmJjA9PT1vdC5sZW5ndGgmJm51bGw9PT1vdC5idWZmZXJl''@;'; put 'put ''ZFJlcXVlc3QmJiFvdC5maW5pc2hlZCYmIW90LndyaXRpbmd9ZnVuY3Rpb24gdGUob3QseGUpe290Ll9maW5hbChmdW5jdGlvbih2ZSl7eGUucGVuZGluZ2NiLS0sdmUmJm1lKG90LHZlKSx4ZS5wcmVmaW5pc2hlZD0hMCxvdC5lbWl0KCJwcmVmaW5pc2giKSx3ZShvdCx4ZSl9KX1mdW5jdGlv''@;'; put 'put ''biB3ZShvdCx4ZSl7dmFyIHZlPWFlKHhlKTtpZih2ZSYmKGZ1bmN0aW9uIHNlKG90LHhlKXsheGUucHJlZmluaXNoZWQmJiF4ZS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiIhPXR5cGVvZiBvdC5fZmluYWx8fHhlLmRlc3Ryb3llZD8oeGUucHJlZmluaXNoZWQ9ITAsb3QuZW1pdCgicHJlZmlu''@;'; put 'put ''aXNoIikpOih4ZS5wZW5kaW5nY2IrKyx4ZS5maW5hbENhbGxlZD0hMCxwcm9jZXNzLm5leHRUaWNrKHRlLG90LHhlKSkpfShvdCx4ZSksMD09PXhlLnBlbmRpbmdjYiYmKHhlLmZpbmlzaGVkPSEwLG90LmVtaXQoImZpbmlzaCIpLHhlLmF1dG9EZXN0cm95KSkpe3ZhciBYZT1vdC5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZTsoIVhlfHxYZS5hdXRvRGVzdHJveSYmWGUuZW5kRW1pdHRlZCkmJm90LmRlc3Ryb3koKX1yZXR1cm4gdmV9eSg3MTk5MykoamUsdyksVGUucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgeGU9dGhpcy5idWZmZXJlZFJlcXVlc3QsdmU9W107eGU7KXZlLnB1''@;'; put 'put ''c2goeGUpLHhlPXhlLm5leHQ7cmV0dXJuIHZlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoVGUucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6Qi5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBp''@;'; put 'put ''cyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3lt''@;'; put 'put ''Ym9sLmhhc0luc3RhbmNlXT8oU2U9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGplLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oeGUpe3JldHVybiEhU2UuY2FsbCh0aGlzLHhlKXx8dGhpcz09PWplJiZ4ZSYm''@;'; put 'put ''eGUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBUZX19KSk6U2U9ZnVuY3Rpb24oeGUpe3JldHVybiB4ZSBpbnN0YW5jZW9mIHRoaXN9LGplLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7bWUodGhpcyxuZXcgZWUpfSxqZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ob3QseGUsdmUpe3Zh''@;'; put 'put ''ciBYZT10aGlzLl93cml0YWJsZVN0YXRlLHplPSExLERlPSFYZS5vYmplY3RNb2RlJiZmdW5jdGlvbiB6KG90KXtyZXR1cm4gUC5pc0J1ZmZlcihvdCl8fG90IGluc3RhbmNlb2YgRn0ob3QpO3JldHVybiBEZSYmIVAuaXNCdWZmZXIob3QpJiYob3Q9ZnVuY3Rpb24gTyhvdCl7cmV0dXJuIFAu''@;'; put 'put ''ZnJvbShvdCl9KG90KSksImZ1bmN0aW9uIj09dHlwZW9mIHhlJiYodmU9eGUseGU9bnVsbCksRGU/eGU9ImJ1ZmZlciI6eGV8fCh4ZT1YZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiB2ZSYmKHZlPV9lKSxYZS5lbmRpbmc/ZnVuY3Rpb24gVihvdCx4ZSl7dmFyIHZlPW5l''@;'; put 'put ''dyBpZTttZShvdCx2ZSkscHJvY2Vzcy5uZXh0VGljayh4ZSx2ZSl9KHRoaXMsdmUpOihEZXx8ZnVuY3Rpb24gcChvdCx4ZSx2ZSxYZSl7dmFyIHplO3JldHVybiBudWxsPT09dmU/emU9bmV3IG5lOiJzdHJpbmciIT10eXBlb2YgdmUmJiF4ZS5vYmplY3RNb2RlJiYoemU9bmV3IFcoImNodW5r''@;'; put 'put ''IixbInN0cmluZyIsIkJ1ZmZlciJdLHZlKSksIXplfHwobWUob3QsemUpLHByb2Nlc3MubmV4dFRpY2soWGUsemUpLCExKX0odGhpcyxYZSxvdCx2ZSkpJiYoWGUucGVuZGluZ2NiKyssemU9ZnVuY3Rpb24geChvdCx4ZSx2ZSxYZSx6ZSxEZSl7aWYoIXZlKXt2YXIgRmU9ZnVuY3Rpb24gYihv''@;'; put 'put ''dCx4ZSx2ZSl7cmV0dXJuIW90Lm9iamVjdE1vZGUmJiExIT09b3QuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiB4ZSYmKHhlPVAuZnJvbSh4ZSx2ZSkpLHhlfSh4ZSxYZSx6ZSk7WGUhPT1GZSYmKHZlPSEwLHplPSJidWZmZXIiLFhlPUZlKX12YXIgT2U9eGUub2JqZWN0TW9kZT8x''@;'; put 'put ''OlhlLmxlbmd0aDt4ZS5sZW5ndGgrPU9lO3ZhciBJZT14ZS5sZW5ndGg8eGUuaGlnaFdhdGVyTWFyaztpZihJZXx8KHhlLm5lZWREcmFpbj0hMCkseGUud3JpdGluZ3x8eGUuY29ya2VkKXt2YXIgVmU9eGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDt4ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVu''@;'; put 'put ''azpYZSxlbmNvZGluZzp6ZSxpc0J1Zjp2ZSxjYWxsYmFjazpEZSxuZXh0Om51bGx9LFZlP1ZlLm5leHQ9eGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDp4ZS5idWZmZXJlZFJlcXVlc3Q9eGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCx4ZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIEMob3QseGUs''@;'; put 'put ''ITEsT2UsWGUsemUsRGUpO3JldHVybiBJZX0odGhpcyxYZSxEZSxvdCx4ZSx2ZSkpLHplfSxqZS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LGplLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgb3Q9dGhpcy5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZTtvdC5jb3JrZWQmJihvdC5jb3JrZWQtLSwhb3Qud3JpdGluZyYmIW90LmNvcmtlZCYmIW90LmJ1ZmZlclByb2Nlc3NpbmcmJm90LmJ1ZmZlcmVkUmVxdWVzdCYmQSh0aGlzLG90KSl9LGplLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oeGUpe2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgeGUmJih4ZT14ZS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh4ZSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRo''@;'; put 'put ''cm93IG5ldyBsZSh4ZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXhlLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqZS5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3Jp''@;'; put 'put ''dGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoamUucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhp''@;'; put 'put ''Z2hXYXRlck1hcmt9fSksamUucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihvdCx4ZSx2ZSl7dmUobmV3IFkoIl93cml0ZSgpIikpfSxqZS5wcm90b3R5cGUuX3dyaXRldj1udWxsLGplLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24ob3QseGUsdmUpe3ZhciBYZT10aGlzLl93cml0YWJsZVN0YXRl''@;'; put 'put ''O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvdD8odmU9b3Qsb3Q9bnVsbCx4ZT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgeGUmJih2ZT14ZSx4ZT1udWxsKSxudWxsIT1vdCYmdGhpcy53cml0ZShvdCx4ZSksWGUuY29ya2VkJiYoWGUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksWGUuZW5k''@;'; put 'put ''aW5nfHxmdW5jdGlvbiBVZShvdCx4ZSx2ZSl7eGUuZW5kaW5nPSEwLHdlKG90LHhlKSx2ZSYmKHhlLmZpbmlzaGVkP3Byb2Nlc3MubmV4dFRpY2sodmUpOm90Lm9uY2UoImZpbmlzaCIsdmUpKSx4ZS5lbmRlZD0hMCxvdC53cml0YWJsZT0hMX0odGhpcyxYZSx2ZSksdGhpc30sT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGplLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoamUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJh''@;'; put 'put ''YmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHhlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9eGUpfX0p''@;'; put 'put ''LGplLnByb3RvdHlwZS5kZXN0cm95PU4uZGVzdHJveSxqZS5wcm90b3R5cGUuX3VuZGVzdHJveT1OLnVuZGVzdHJveSxqZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24ob3QseGUpe3hlKG90KX19LDEyNjgzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJO2Z1bmN0aW9uIF8oaWUs''@;'; put 'put ''bGUsbWUpe3JldHVybiBsZT1mdW5jdGlvbiBnKGllKXt2YXIgbGU9ZnVuY3Rpb24gQihpZSxsZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBpZXx8bnVsbD09PWllKXJldHVybiBpZTt2YXIgbWU9aWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1tZSl7dmFyIF9lPW1lLmNhbGwoaWUs''@;'; put 'put ''bGV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBfZSlyZXR1cm4gX2U7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sZT9TdHJpbmc6TnVtYmVyKShpZSl9KGllLCJzdHJp''@;'; put 'put ''bmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGxlP2xlOlN0cmluZyhsZSl9KGxlKSxsZSBpbiBpZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoaWUsbGUse3ZhbHVlOm1lLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6aWVbbGVdPW1lLGllfXZhciB3PXkoNTc4''@;'; put 'put ''NTQpLFA9U3ltYm9sKCJsYXN0UmVzb2x2ZSIpLEY9U3ltYm9sKCJsYXN0UmVqZWN0IiksTz1TeW1ib2woImVycm9yIiksej1TeW1ib2woImVuZGVkIiksTj1TeW1ib2woImxhc3RQcm9taXNlIiksTD1TeW1ib2woImhhbmRsZVByb21pc2UiKSxLPVN5bWJvbCgic3RyZWFtIik7ZnVuY3Rpb24g''@;'; put 'put ''VShpZSxsZSl7cmV0dXJue3ZhbHVlOmllLGRvbmU6bGV9fWZ1bmN0aW9uIFcoaWUpe3ZhciBsZT1pZVtQXTtpZihudWxsIT09bGUpe3ZhciBtZT1pZVtLXS5yZWFkKCk7bnVsbCE9PW1lJiYoaWVbTl09bnVsbCxpZVtQXT1udWxsLGllW0ZdPW51bGwsbGUoVShtZSwhMSkpKX19ZnVuY3Rpb24g''@;'; put 'put ''WShpZSl7cHJvY2Vzcy5uZXh0VGljayhXLGllKX12YXIgZWU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksSj1PYmplY3Quc2V0UHJvdG90eXBlT2YoKF8oST17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW0tdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIGxlPXRoaXMsbWU9dGhp''@;'; put 'put ''c1tPXTtpZihudWxsIT09bWUpcmV0dXJuIFByb21pc2UucmVqZWN0KG1lKTtpZih0aGlzW3pdKXJldHVybiBQcm9taXNlLnJlc29sdmUoVSh2b2lkIDAsITApKTtpZih0aGlzW0tdLmRlc3Ryb3llZClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oamUsVil7cHJvY2Vzcy5uZXh0VGljayhm''@;'; put 'put ''dW5jdGlvbigpe2xlW09dP1YobGVbT10pOmplKFUodm9pZCAwLCEwKSl9KX0pO3ZhciBUZSxfZT10aGlzW05dO2lmKF9lKVRlPW5ldyBQcm9taXNlKGZ1bmN0aW9uIHEoaWUsbGUpe3JldHVybiBmdW5jdGlvbihtZSxfZSl7aWUudGhlbihmdW5jdGlvbigpe2xlW3pdP21lKFUodm9pZCAwLCEw''@;'; put 'put ''KSk6bGVbTF0obWUsX2UpfSxfZSl9fShfZSx0aGlzKSk7ZWxzZXt2YXIgU2U9dGhpc1tLXS5yZWFkKCk7aWYobnVsbCE9PVNlKXJldHVybiBQcm9taXNlLnJlc29sdmUoVShTZSwhMSkpO1RlPW5ldyBQcm9taXNlKHRoaXNbTF0pfXJldHVybiB0aGlzW05dPVRlLFRlfX0sU3ltYm9sLmFzeW5j''@;'; put 'put ''SXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLF8oSSwicmV0dXJuIixmdW5jdGlvbigpe3ZhciBsZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihtZSxfZSl7bGVbS10uZGVzdHJveShudWxsLGZ1bmN0aW9uKFRlKXtUZT9fZShUZSk6bWUoVSh2b2lkIDAsITApKX0p''@;'; put 'put ''fSl9KSxJKSxlZSk7dWUuZXhwb3J0cz1mdW5jdGlvbihsZSl7dmFyIG1lLF9lPU9iamVjdC5jcmVhdGUoSiwoXyhtZT17fSxLLHt2YWx1ZTpsZSx3cml0YWJsZTohMH0pLF8obWUsUCx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLF8obWUsRix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLF8o''@;'; put 'put ''bWUsTyx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLF8obWUseix7dmFsdWU6bGUuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLF8obWUsTCx7dmFsdWU6ZnVuY3Rpb24oU2UsamUpe3ZhciBWPV9lW0tdLnJlYWQoKTtWPyhfZVtOXT1udWxsLF9lW1BdPW51bGwsX2Vb''@;'; put 'put ''Rl09bnVsbCxTZShVKFYsITEpKSk6KF9lW1BdPVNlLF9lW0ZdPWplKX0sd3JpdGFibGU6ITB9KSxtZSkpO3JldHVybiBfZVtOXT1udWxsLHcobGUsZnVuY3Rpb24oVGUpe2lmKFRlJiYiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiIT09VGUuY29kZSl7dmFyIFNlPV9lW0ZdO3JldHVybiBu''@;'; put 'put ''dWxsIT09U2UmJihfZVtOXT1udWxsLF9lW1BdPW51bGwsX2VbRl09bnVsbCxTZShUZSkpLHZvaWQoX2VbT109VGUpfXZhciBqZT1fZVtQXTtudWxsIT09amUmJihfZVtOXT1udWxsLF9lW1BdPW51bGwsX2VbRl09bnVsbCxqZShVKHZvaWQgMCwhMCkpKSxfZVt6XT0hMH0pLGxlLm9uKCJyZWFk''@;'; put 'put ''YWJsZSIsWS5iaW5kKG51bGwsX2UpKSxfZX19LDc1MjI1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoWSxxKXt2YXIgZWU9T2JqZWN0LmtleXMoWSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIEo9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhZ''@;'; put 'put ''KTtxJiYoSj1KLmZpbHRlcihmdW5jdGlvbihuZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoWSxuZSkuZW51bWVyYWJsZX0pKSxlZS5wdXNoLmFwcGx5KGVlLEopfXJldHVybiBlZX1mdW5jdGlvbiBfKFkpe2Zvcih2YXIgcT0xO3E8YXJndW1lbnRzLmxlbmd0aDtx''@;'; put 'put ''Kyspe3ZhciBlZT1udWxsIT1hcmd1bWVudHNbcV0/YXJndW1lbnRzW3FdOnt9O3ElMj9JKE9iamVjdChlZSksITApLmZvckVhY2goZnVuY3Rpb24oSil7ZyhZLEosZWVbSl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWSxPYmpl''@;'; put 'put ''Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlZSkpOkkoT2JqZWN0KGVlKSkuZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWSxKLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWUsSikpfSl9cmV0dXJuIFl9ZnVuY3Rpb24gZyhZLHEsZWUpe3Jl''@;'; put 'put ''dHVybihxPUYocSkpaW4gWT9PYmplY3QuZGVmaW5lUHJvcGVydHkoWSxxLHt2YWx1ZTplZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOllbcV09ZWUsWX1mdW5jdGlvbiB3KFkscSl7Zm9yKHZhciBlZT0wO2VlPHEubGVuZ3RoO2VlKyspe3ZhciBKPXFbZWVd''@;'; put 'put ''O0ouZW51bWVyYWJsZT1KLmVudW1lcmFibGV8fCExLEouY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBKJiYoSi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFksRihKLmtleSksSil9fWZ1bmN0aW9uIEYoWSl7dmFyIHE9ZnVuY3Rpb24gTyhZLHEpe2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgWXx8bnVsbD09PVkpcmV0dXJuIFk7dmFyIGVlPVlbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lZSl7dmFyIEo9ZWUuY2FsbChZLHF8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiBKO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp''@;'; put 'put ''dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09cT9TdHJpbmc6TnVtYmVyKShZKX0oWSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxP3E6U3RyaW5nKHEpfXZhciBOPXkoODM4MzgpLkJ1ZmZlcixLPXkoNjM3NzkpLmluc3BlY3Qs''@;'; put 'put ''VT1LJiZLLmN1c3RvbXx8Imluc3BlY3QiO2Z1bmN0aW9uIFcoWSxxLGVlKXtOLnByb3RvdHlwZS5jb3B5LmNhbGwoWSxxLGVlKX11ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gWSgpeyhmdW5jdGlvbiBCKFkscSl7aWYoIShZIGluc3RhbmNlb2YgcSkpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLFkpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIGZ1bmN0aW9uIFAoWSxxLGVlKXtxJiZ3KFkucHJvdG90eXBlLHEpLGVlJiZ3KFksZWUpLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShZLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShZLFt7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9e2RhdGE6ZWUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PUo6dGhpcy5oZWFkPUosdGhpcy50YWlsPUosKyt0aGlzLmxlbmd0''@;'; put 'put ''aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj17ZGF0YTplZSxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPUopLHRoaXMuaGVhZD1KLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09''@;'; put 'put ''dGhpcy5sZW5ndGgpe3ZhciBlZT10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLGVlfX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRh''@;'; put 'put ''aWw9bnVsbCx0aGlzLmxlbmd0aD0wfX0se2tleToiam9pbiIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIEo9dGhpcy5oZWFkLG5lPSIiK0ouZGF0YTtKPUoubmV4dDspbmUrPWVlK0ouZGF0YTtyZXR1cm4gbmV9fSx7a2V5OiJjb25jYXQi''@;'; put 'put ''LHZhbHVlOmZ1bmN0aW9uKGVlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIE4uYWxsb2MoMCk7Zm9yKHZhciBKPU4uYWxsb2NVbnNhZmUoZWU+Pj4wKSxuZT10aGlzLmhlYWQsaWU9MDtuZTspVyhuZS5kYXRhLEosaWUpLGllKz1uZS5kYXRhLmxlbmd0aCxuZT1uZS5uZXh0O3JldHVybiBK''@;'; put 'put ''fX0se2tleToiY29uc3VtZSIsdmFsdWU6ZnVuY3Rpb24oZWUsSil7dmFyIG5lO3JldHVybiBlZTx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KG5lPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsZWUpLHRoaXMuaGVhZC5kYXRhPXRoaXMuaGVhZC5kYXRhLnNsaWNlKGVlKSk6bmU9ZWU9PT10aGlzLmhl''@;'; put 'put ''YWQuZGF0YS5sZW5ndGg/dGhpcy5zaGlmdCgpOko/dGhpcy5fZ2V0U3RyaW5nKGVlKTp0aGlzLl9nZXRCdWZmZXIoZWUpLG5lfX0se2tleToiZmlyc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfX0se2tleToiX2dldFN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZWUp''@;'; put 'put ''e3ZhciBKPXRoaXMuaGVhZCxuZT0xLGllPUouZGF0YTtmb3IoZWUtPWllLmxlbmd0aDtKPUoubmV4dDspe3ZhciBsZT1KLmRhdGEsbWU9ZWU+bGUubGVuZ3RoP2xlLmxlbmd0aDplZTtpZihpZSs9bWU9PT1sZS5sZW5ndGg/bGU6bGUuc2xpY2UoMCxlZSksMD09KGVlLT1tZSkpe21lPT09bGUu''@;'; put 'put ''bGVuZ3RoPygrK25lLHRoaXMuaGVhZD1KLm5leHQ/Si5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPUosSi5kYXRhPWxlLnNsaWNlKG1lKSk7YnJlYWt9KytuZX1yZXR1cm4gdGhpcy5sZW5ndGgtPW5lLGllfX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZWUpe3Zh''@;'; put 'put ''ciBKPU4uYWxsb2NVbnNhZmUoZWUpLG5lPXRoaXMuaGVhZCxpZT0xO2ZvcihuZS5kYXRhLmNvcHkoSiksZWUtPW5lLmRhdGEubGVuZ3RoO25lPW5lLm5leHQ7KXt2YXIgbGU9bmUuZGF0YSxtZT1lZT5sZS5sZW5ndGg/bGUubGVuZ3RoOmVlO2lmKGxlLmNvcHkoSixKLmxlbmd0aC1lZSwwLG1l''@;'; put 'put ''KSwwPT0oZWUtPW1lKSl7bWU9PT1sZS5sZW5ndGg/KCsraWUsdGhpcy5oZWFkPW5lLm5leHQ/bmUubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1uZSxuZS5kYXRhPWxlLnNsaWNlKG1lKSk7YnJlYWt9KytpZX1yZXR1cm4gdGhpcy5sZW5ndGgtPWllLEp9fSx7a2V5OlUsdmFsdWU6''@;'; put 'put ''ZnVuY3Rpb24oZWUsSil7cmV0dXJuIEsodGhpcyxfKF8oe30sSikse30se2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSksWX0oKX0sODgxNTI6dWU9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24geSh3LFApe2codyxQKSxJKHcpfWZ1bmN0aW9uIEkodyl7dy5fd3JpdGFibGVTdGF0ZSYm''@;'; put 'put ''IXcuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHx3Ll9yZWFkYWJsZVN0YXRlJiYhdy5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHcuZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBnKHcsUCl7dy5lbWl0KCJlcnJvciIsUCl9dWUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBYKHcsUCl7dmFy''@;'; put 'put ''IEY9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhQP1Aodyk6dyYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKGcsdGhpcyx3KSk6cHJvY2Vzcy5uZXh0VGljayhnLHRoaXMsdykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0''@;'; put 'put ''cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxudWxsLGZ1bmN0aW9uKE4peyFQJiZOP0YuX3dyaXRhYmxlU3RhdGU/Ri5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/cHJvY2Vzcy5uZXh0''@;'; put 'put ''VGljayhJLEYpOihGLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKHksRixOKSk6cHJvY2Vzcy5uZXh0VGljayh5LEYsTik6UD8ocHJvY2Vzcy5uZXh0VGljayhJLEYpLFAoTikpOnByb2Nlc3MubmV4dFRpY2soSSxGKX0pLHRoaXMpfSx1bmRlc3Ryb3k6''@;'; put 'put ''ZnVuY3Rpb24gXygpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24gQih3LFApe3ZhciBGPXcuX3JlYWRhYmxlU3RhdGUsTz13Ll93cml0YWJsZVN0YXRlO0YmJkYu''@;'; put 'put ''YXV0b0Rlc3Ryb3l8fE8mJk8uYXV0b0Rlc3Ryb3k/dy5kZXN0cm95KFApOncuZW1pdCgiZXJyb3IiLFApfX19LDU3ODU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzA0NjQpLkYuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gZygpe311ZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uIHcoUCxGLE8pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGKXJldHVybiB3KFAsbnVsbCxGKTtGfHwoRj17fSksTz1mdW5jdGlvbiBfKFApe3ZhciBGPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFGKXtGPSEwO2Zvcih2YXIgTz1hcmd1bWVudHMubGVuZ3RoLHo9bmV3IEFycmF5KE8p''@;'; put 'put ''LE49MDtOPE87TisrKXpbTl09YXJndW1lbnRzW05dO1AuYXBwbHkodGhpcyx6KX19fShPfHxnKTt2YXIgej1GLnJlYWRhYmxlfHwhMSE9PUYucmVhZGFibGUmJlAucmVhZGFibGUsTj1GLndyaXRhYmxlfHwhMSE9PUYud3JpdGFibGUmJlAud3JpdGFibGUsTD1mdW5jdGlvbigpe1Aud3JpdGFi''@;'; put 'put ''bGV8fFUoKX0sSz1QLl93cml0YWJsZVN0YXRlJiZQLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLFU9ZnVuY3Rpb24oKXtOPSExLEs9ITAsenx8Ty5jYWxsKFApfSxXPVAuX3JlYWRhYmxlU3RhdGUmJlAuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxZPWZ1bmN0aW9uKCl7ej0hMSxXPSEwLE58''@;'; put 'put ''fE8uY2FsbChQKX0scT1mdW5jdGlvbihpZSl7Ty5jYWxsKFAsaWUpfSxlZT1mdW5jdGlvbigpe3ZhciBpZTtyZXR1cm4geiYmIVc/KCghUC5fcmVhZGFibGVTdGF0ZXx8IVAuX3JlYWRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEkpLE8uY2FsbChQLGllKSk6TiYmIUs/KCghUC5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZXx8IVAuX3dyaXRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEkpLE8uY2FsbChQLGllKSk6dm9pZCAwfSxKPWZ1bmN0aW9uKCl7UC5yZXEub24oImZpbmlzaCIsVSl9O3JldHVybiBmdW5jdGlvbiBCKFApe3JldHVybiBQLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFAu''@;'; put 'put ''YWJvcnR9KFApPyhQLm9uKCJjb21wbGV0ZSIsVSksUC5vbigiYWJvcnQiLGVlKSxQLnJlcT9KKCk6UC5vbigicmVxdWVzdCIsSikpOk4mJiFQLl93cml0YWJsZVN0YXRlJiYoUC5vbigiZW5kIixMKSxQLm9uKCJjbG9zZSIsTCkpLFAub24oImVuZCIsWSksUC5vbigiZmluaXNoIixVKSwhMSE9''@;'; put 'put ''PUYuZXJyb3ImJlAub24oImVycm9yIixxKSxQLm9uKCJjbG9zZSIsZWUpLGZ1bmN0aW9uKCl7UC5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLFUpLFAucmVtb3ZlTGlzdGVuZXIoImFib3J0IixlZSksUC5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsSiksUC5yZXEmJlAucmVxLnJlbW92ZUxp''@;'; put 'put ''c3RlbmVyKCJmaW5pc2giLFUpLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsTCksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEwpLFAucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsVSksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixZKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscSksUC5yZW1vdmVM''@;'; put 'put ''aXN0ZW5lcigiY2xvc2UiLGVlKX19fSw0Nzc2NTp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sNjg0NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxnPXkoMzA0''@;'; put 'put ''NjQpLkYsQj1nLkVSUl9NSVNTSU5HX0FSR1Msdz1nLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIFAoVSl7aWYoVSl0aHJvdyBVfWZ1bmN0aW9uIHooVSl7VSgpfWZ1bmN0aW9uIE4oVSxXKXtyZXR1cm4gVS5waXBlKFcpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gSygpe2Zvcih2YXIgVT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLFc9bmV3IEFycmF5KFUpLFk9MDtZPFU7WSsrKVdbWV09YXJndW1lbnRzW1ldO3ZhciBxPWZ1bmN0aW9uIEwoVSl7cmV0dXJuIFUubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgVVtVLmxlbmd0aC0xXT9VLnBvcCgpOlB9KFcpO2lmKEFycmF5LmlzQXJyYXkoV1sw''@;'; put 'put ''XSkmJihXPVdbMF0pLFcubGVuZ3RoPDIpdGhyb3cgbmV3IEIoInN0cmVhbXMiKTt2YXIgZWUsSj1XLm1hcChmdW5jdGlvbihuZSxpZSl7dmFyIGxlPWllPFcubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uIE8oVSxXLFkscSl7cT1mdW5jdGlvbiBfKFUpe3ZhciBXPSExO3JldHVybiBmdW5jdGlv''@;'; put 'put ''bigpe1d8fChXPSEwLFUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX0ocSk7dmFyIGVlPSExO1Uub24oImNsb3NlIixmdW5jdGlvbigpe2VlPSEwfSksdm9pZCAwPT09SSYmKEk9eSg1Nzg1NCkpLEkoVSx7cmVhZGFibGU6Vyx3cml0YWJsZTpZfSxmdW5jdGlvbihuZSl7aWYobmUpcmV0dXJu''@;'; put 'put ''IHEobmUpO2VlPSEwLHEoKX0pO3ZhciBKPSExO3JldHVybiBmdW5jdGlvbihuZSl7aWYoIWVlJiYhSil7aWYoSj0hMCxmdW5jdGlvbiBGKFUpe3JldHVybiBVLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFUuYWJvcnR9KFUpKXJldHVybiBVLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIFUuZGVzdHJveSlyZXR1cm4gVS5kZXN0cm95KCk7cShuZXx8bmV3IHcoInBpcGUiKSl9fX0obmUsbGUsaWU+MCxmdW5jdGlvbihfZSl7ZWV8fChlZT1fZSksX2UmJkouZm9yRWFjaCh6KSwhbGUmJihKLmZvckVhY2goeikscShlZSkpfSl9KTtyZXR1cm4gVy5yZWR1Y2UoTil9fSwy''@;'; put 'put ''MjgyNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMwNDY0KS5GLkVSUl9JTlZBTElEX09QVF9WQUxVRTt1ZS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uIGcoQix3LFAsRil7dmFyIE89ZnVuY3Rpb24gXyhCLHcsUCl7cmV0dXJuIG51bGwhPUIuaGlnaFdhdGVy''@;'; put 'put ''TWFyaz9CLmhpZ2hXYXRlck1hcms6dz9CW1BdOm51bGx9KHcsRixQKTtpZihudWxsIT1PKXtpZighaXNGaW5pdGUoTyl8fE1hdGguZmxvb3IoTykhPT1PfHxPPDApdGhyb3cgbmV3IEkoRj9QOiJoaWdoV2F0ZXJNYXJrIixPKTtyZXR1cm4gTWF0aC5mbG9vcihPKX1yZXR1cm4gQi5vYmplY3RN''@;'; put 'put ''b2RlPzE2OjE2Mzg0fX19LDEyNjAxOih1ZSxYLHkpPT57dWUuZXhwb3J0cz15KDQ0MzU2KS5FdmVudEVtaXR0ZXJ9LDc4NDU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTQyNzIpLkJ1ZmZlcixfPUkuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oSil7c3dpdGNoKChKPSIiK0opJiZK''@;'; put 'put ''LnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0''@;'; put 'put ''OnJldHVybiExfX07ZnVuY3Rpb24gdyhKKXt2YXIgbmU7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24gQihKKXt2YXIgbmU9ZnVuY3Rpb24gZyhKKXtpZighSilyZXR1cm4idXRmOCI7Zm9yKHZhciBuZTs7KXN3aXRjaChKKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4''@;'; put 'put ''IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gSjtkZWZhdWx0Omlm''@;'; put 'put ''KG5lKXJldHVybjtKPSgiIitKKS50b0xvd2VyQ2FzZSgpLG5lPSEwfX0oSik7aWYoInN0cmluZyIhPXR5cGVvZiBuZSYmKEkuaXNFbmNvZGluZz09PV98fCFfKEopKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSik7cmV0dXJuIG5lfHxKfShKKSx0aGlzLmVuY29kaW5n''@;'; put 'put ''KXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1LLHRoaXMuZW5kPVUsbmU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9eixuZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9Vyx0aGlzLmVuZD1ZLG5lPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1xLHZv''@;'; put 'put ''aWQodGhpcy5lbmQ9ZWUpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9SS5hbGxvY1Vuc2FmZShuZSl9ZnVuY3Rpb24gUChKKXtyZXR1cm4gSjw9MTI3PzA6Sj4+NT09Nj8yOko+PjQ9PTE0PzM6Sj4+Mz09MzA/NDpKPj42PT0yPy0xOi0yfWZ1bmN0aW9u''@;'; put 'put ''IHooSil7dmFyIG5lPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsaWU9ZnVuY3Rpb24gTyhKLG5lLGllKXtpZigxMjghPSgxOTImbmVbMF0pKXJldHVybiBKLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4xJiZuZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJm5lWzFdKSly''@;'; put 'put ''ZXR1cm4gSi5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MiYmbmUubGVuZ3RoPjImJjEyOCE9KDE5MiZuZVsyXSkpcmV0dXJuIEoubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMsSik7cmV0dXJuIHZvaWQgMCE9PWllP2llOnRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoPyhKLmNv''@;'; put 'put ''cHkodGhpcy5sYXN0Q2hhcixuZSwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KEouY29weSh0aGlzLmxhc3RDaGFyLG5lLDAsSi5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09Si5sZW5ndGgpKX1mdW5j''@;'; put 'put ''dGlvbiBLKEosbmUpe2lmKChKLmxlbmd0aC1uZSklMj09MCl7dmFyIGllPUoudG9TdHJpbmcoInV0ZjE2bGUiLG5lKTtpZihpZSl7dmFyIGxlPWllLmNoYXJDb2RlQXQoaWUubGVuZ3RoLTEpO2lmKGxlPj01NTI5NiYmbGU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0''@;'; put 'put ''VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdLGllLnNsaWNlKDAsLTEpfXJldHVybiBpZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFd''@;'; put 'put ''LEoudG9TdHJpbmcoInV0ZjE2bGUiLG5lLEoubGVuZ3RoLTEpfWZ1bmN0aW9uIFUoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlz''@;'; put 'put ''Lmxhc3ROZWVkKTpuZX1mdW5jdGlvbiBXKEosbmUpe3ZhciBpZT0oSi5sZW5ndGgtbmUpJTM7cmV0dXJuIDA9PT1pZT9KLnRvU3RyaW5nKCJiYXNlNjQiLG5lKToodGhpcy5sYXN0TmVlZD0zLWllLHRoaXMubGFzdFRvdGFsPTMsMT09PWllP3RoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0x''@;'; put 'put ''XToodGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSksSi50b1N0cmluZygiYmFzZTY0IixuZSxKLmxlbmd0aC1pZSkpfWZ1bmN0aW9uIFkoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMu''@;'; put 'put ''bGFzdE5lZWQ/bmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6bmV9ZnVuY3Rpb24gcShKKXtyZXR1cm4gSi50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBlZShKKXtyZXR1cm4gSiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIn1Y''@;'; put 'put ''Lkk9dyx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihKKXtpZigwPT09Si5sZW5ndGgpcmV0dXJuIiI7dmFyIG5lLGllO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShuZT10aGlzLmZpbGxMYXN0KEopKSlyZXR1cm4iIjtpZT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1l''@;'; put 'put ''bHNlIGllPTA7cmV0dXJuIGllPEoubGVuZ3RoP25lP25lK3RoaXMudGV4dChKLGllKTp0aGlzLnRleHQoSixpZSk6bmV8fCIifSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24gTChKKXt2YXIgbmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9uZSsi''@;'; put 'put ''XHVmZmZkIjpuZX0sdy5wcm90b3R5cGUudGV4dD1mdW5jdGlvbiBOKEosbmUpe3ZhciBpZT1mdW5jdGlvbiBGKEosbmUsaWUpe3ZhciBsZT1uZS5sZW5ndGgtMTtpZihsZTxpZSlyZXR1cm4gMDt2YXIgbWU9UChuZVtsZV0pO3JldHVybiBtZT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMSks''@;'; put 'put ''bWUpOi0tbGU8aWV8fC0yPT09bWU/MDoobWU9UChuZVtsZV0pKT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMiksbWUpOi0tbGU8aWV8fC0yPT09bWU/MDoobWU9UChuZVtsZV0pKT49MD8obWU+MCYmKDI9PT1tZT9tZT0wOkoubGFzdE5lZWQ9bWUtMyksbWUpOjB9KHRoaXMsSixuZSk7aWYo''@;'; put 'put ''IXRoaXMubGFzdE5lZWQpcmV0dXJuIEoudG9TdHJpbmcoInV0ZjgiLG5lKTt0aGlzLmxhc3RUb3RhbD1pZTt2YXIgbGU9Si5sZW5ndGgtKGllLXRoaXMubGFzdE5lZWQpO3JldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhciwwLGxlKSxKLnRvU3RyaW5nKCJ1dGY4IixuZSxsZSl9LHcucHJvdG90''@;'; put 'put ''eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKEope2lmKHRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoKXJldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAs''@;'; put 'put ''dGhpcy5sYXN0VG90YWwpO0ouY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxKLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09Si5sZW5ndGh9fSw1NDI3MjoodWUsWCx5KT0+e3ZhciBJPXkoODM4MzgpLF89SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zv''@;'; put 'put ''cih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlvbiBCKHcsUCxGKXtyZXR1cm4gXyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz91ZS5leHBvcnRzPUk6KGcoSSxYKSxYLkJ1ZmZlcj1CKSxnKF8sQiksQi5mcm9tPWZ1bmN0aW9uKHcs''@;'; put 'put ''UCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LEIuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJB''@;'; put 'put ''cmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIE89Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ty5maWxsKFAsRik6Ty5maWxsKFApOk8uZmlsbCgwKSxPfSxCLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LEIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEku''@;'; put 'put ''U2xvd0J1ZmZlcih3KX19LDc4NzU1Oih1ZSxYLHkpPT57dmFyIEk9eSg2NDMxOCk7dWUuZXhwb3J0cz17VGV4dEVuY29kZXI6SS5UZXh0RW5jb2RlcixUZXh0RGVjb2RlcjpJLlRleHREZWNvZGVyfX0sNjc5NTE6ZnVuY3Rpb24odWUpeyFmdW5jdGlvbihYKXsidXNlIHN0cmljdCI7dWUuZXhw''@;'; put 'put ''b3J0cyYmKHVlLmV4cG9ydHM9WCksWFsiZW5jb2RpbmctaW5kZXhlcyJdPXtiaWc1OltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNzM5MiwxOTUwNiwxNzkyMywxNzgzMCwx''@;'; put 'put ''Nzc4NCwxNjAzNTksMTk4MzEsMTc4NDMsMTYyOTkzLDE5NjgyLDE2MzAxMywxNTI1MywxODIzMCwxODI0NCwxOTUyNywxOTUyMCwxNDgxNTksMTQ0OTE5LDE2MDU5NCwxNTkzNzEsMTU5OTU0LDE5NTQzLDE3Mjg4MSwxODI1NSwxNzg4MiwxOTU4OSwxNjI5MjQsMTk3MTksMTkxMDgsMTgwODEs''@;'; put 'put ''MTU4NDk5LDI5MjIxLDE1NDE5NiwxMzc4MjcsMTQ2OTUwLDE0NzI5NywyNjE4OSwyMjI2NyxudWxsLDMyMTQ5LDIyODEzLDE2Njg0MSwxNTg2MCwzODcwOCwxNjI3OTksMjM1MTUsMTM4NTkwLDIzMjA0LDEzODYxLDE3MTY5NiwyMzI0OSwyMzQ3OSwyMzgwNCwyNjQ3OCwzNDE5NSwxNzAzMDks''@;'; put 'put ''Mjk3OTMsMjk4NTMsMTQ0NTMsMTM4NTc5LDE0NTA1NCwxNTU2ODEsMTYxMDgsMTUzODIyLDE1MDkzLDMxNDg0LDQwODU1LDE0NzgwOSwxNjYxNTcsMTQzODUwLDEzMzc3MCwxNDM5NjYsMTcxNjIsMzM5MjQsNDA4NTQsMzc5MzUsMTg3MzYsMzQzMjMsMjI2NzgsMzg3MzAsMzc0MDAsMzExODQs''@;'; put 'put ''MzEyODIsMjYyMDgsMjcxNzcsMzQ5NzMsMjk3NzIsMzE2ODUsMjY0OTgsMzEyNzYsMjEwNzEsMzY5MzQsMTM1NDIsMjk2MzYsMTU1MDY1LDI5ODk0LDQwOTAzLDIyNDUxLDE4NzM1LDIxNTgwLDE2Njg5LDE0NTAzOCwyMjU1MiwzMTM0NiwxNjI2NjEsMzU3MjcsMTgwOTQsMTU5MzY4LDE2NzY5''@;'; put 'put ''LDE1NTAzMywzMTY2MiwxNDA0NzYsNDA5MDQsMTQwNDgxLDE0MDQ4OSwxNDA0OTIsNDA5MDUsMzQwNTIsMTQ0ODI3LDE2NTY0LDQwOTA2LDE3NjMzLDE3NTYxNSwyNTI4MSwyODc4Miw0MDkwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEyNzM2LDEyNzM3LDEyNzM4LDEyNzM5LDEyNzQwLDEzMTM0MCwxMjc0MSwxMzEyODEsMTMxMjc3LDEyNzQyLDEy''@;'; put 'put ''NzQzLDEzMTI3NSwxMzkyNDAsMTI3NDQsMTMxMjc0LDEyNzQ1LDEyNzQ2LDEyNzQ3LDEyNzQ4LDEzMTM0MiwxMjc0OSwxMjc1MCwyNTYsMTkzLDQ2MSwxOTIsMjc0LDIwMSwyODIsMjAwLDMzMiwyMTEsNDY1LDIxMCxudWxsLDc4NzAsbnVsbCw3ODcyLDIwMiwyNTcsMjI1LDQ2MiwyMjQsNTkz''@;'; put 'put ''LDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLG51bGwsNzg3MSxudWxsLDc4NzMsMjM0LDYwOSw5MTc4LDkxNzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTcyOTY5LDEzNTQ5MyxudWxsLDI1ODY2LG51bGwsbnVsbCwyMDAyOSwyODM4MSw0MDI3MCwzNzM0MyxudWxsLG51bGwsMTYxNTg5LDI1NzQ1LDIwMjUwLDIwMjY0LDIwMzkyLDIwODIyLDIwODUyLDIwODky''@;'; put 'put ''LDIwOTY0LDIxMTUzLDIxMTYwLDIxMzA3LDIxMzI2LDIxNDU3LDIxNDY0LDIyMjQyLDIyNzY4LDIyNzg4LDIyNzkxLDIyODM0LDIyODM2LDIzMzk4LDIzNDU0LDIzNDU1LDIzNzA2LDI0MTk4LDI0NjM1LDI1OTkzLDI2NjIyLDI2NjI4LDI2NzI1LDI3OTgyLDI4ODYwLDMwMDA1LDMyNDIwLDMy''@;'; put 'put ''NDI4LDMyNDQyLDMyNDU1LDMyNDYzLDMyNDc5LDMyNTE4LDMyNTY3LDMzNDAyLDMzNDg3LDMzNjQ3LDM1MjcwLDM1Nzc0LDM1ODEwLDM2NzEwLDM2NzExLDM2NzE4LDI5NzEzLDMxOTk2LDMyMjA1LDI2OTUwLDMxNDMzLDIxMDMxLG51bGwsbnVsbCxudWxsLG51bGwsMzcyNjAsMzA5MDQsMzcy''@;'; put 'put ''MTQsMzI5NTYsbnVsbCwzNjEwNywzMzAxNCwxMzM2MDcsbnVsbCxudWxsLDMyOTI3LDQwNjQ3LDE5NjYxLDQwMzkzLDQwNDYwLDE5NTE4LDE3MTUxMCwxNTk3NTgsNDA0NTgsMTcyMzM5LDEzNzYxLG51bGwsMjgzMTQsMzMzNDIsMjk5NzcsbnVsbCwxODcwNSwzOTUzMiwzOTU2Nyw0MDg1Nywz''@;'; put 'put ''MTExMSwxNjQ5NzIsMTM4Njk4LDEzMjU2MCwxNDIwNTQsMjAwMDQsMjAwOTcsMjAwOTYsMjAxMDMsMjAxNTksMjAyMDMsMjAyNzksMTMzODgsMjA0MTMsMTU5NDQsMjA0ODMsMjA2MTYsMTM0MzcsMTM0NTksMTM0NzcsMjA4NzAsMjI3ODksMjA5NTUsMjA5ODgsMjA5OTcsMjAxMDUsMjExMTMs''@;'; put 'put ''MjExMzYsMjEyODcsMTM3NjcsMjE0MTcsMTM2NDksMjE0MjQsMTM2NTEsMjE0NDIsMjE1MzksMTM2NzcsMTM2ODIsMTM5NTMsMjE2NTEsMjE2NjcsMjE2ODQsMjE2ODksMjE3MTIsMjE3NDMsMjE3ODQsMjE3OTUsMjE4MDAsMTM3MjAsMjE4MjMsMTM3MzMsMTM3NTksMjE5NzUsMTM3NjUsMTYz''@;'; put 'put ''MjA0LDIxNzk3LG51bGwsMTM0MjEwLDEzNDQyMSwxNTE4NTEsMjE5MDQsMTQyNTM0LDE0ODI4LDEzMTkwNSwzNjQyMiwxNTA5NjgsMTY5MTg5LDE2NDY3LDE2NDAzMCwzMDU4NiwxNDIzOTIsMTQ5MDAsMTgzODksMTY0MTg5LDE1ODE5NCwxNTEwMTgsMjU4MjEsMTM0NTI0LDEzNTA5MiwxMzQz''@;'; put 'put ''NTcsMTM1NDEyLDI1NzQxLDM2NDc4LDEzNDgwNiwxMzQxNTUsMTM1MDEyLDE0MjUwNSwxNjQ0MzgsMTQ4NjkxLG51bGwsMTM0NDcwLDE3MDU3MywxNjQwNzMsMTg0MjAsMTUxMjA3LDE0MjUzMCwzOTYwMiwxNDk1MSwxNjk0NjAsMTYzNjUsMTM1NzQsMTUyMjYzLDE2OTk0MCwxNjE5OTIsMTQy''@;'; put 'put ''NjYwLDQwMzAyLDM4OTMzLG51bGwsMTczNjksMTU1ODEzLDI1NzgwLDIxNzMxLDE0MjY2OCwxNDIyODIsMTM1Mjg3LDE0ODQzLDEzNTI3OSwxNTc0MDIsMTU3NDYyLDE2MjIwOCwyNTgzNCwxNTE2MzQsMTM0MjExLDM2NDU2LDEzOTY4MSwxNjY3MzIsMTMyOTEzLG51bGwsMTg0NDMsMTMxNDk3''@;'; put 'put ''LDE2Mzc4LDIyNjQzLDE0MjczMyxudWxsLDE0ODkzNiwxMzIzNDgsMTU1Nzk5LDEzNDk4OCwxMzQ1NTAsMjE4ODEsMTY1NzEsMTczMzgsbnVsbCwxOTEyNCwxNDE5MjYsMTM1MzI1LDMzMTk0LDM5MTU3LDEzNDU1NiwyNTQ2NSwxNDg0NiwxNDExNzMsMzYyODgsMjIxNzcsMjU3MjQsMTU5Mzks''@;'; put 'put ''bnVsbCwxNzM1NjksMTM0NjY1LDE0MjAzMSwxNDI1MzcsbnVsbCwxMzUzNjgsMTQ1ODU4LDE0NzM4LDE0ODU0LDE2NDUwNywxMzY4OCwxNTUyMDksMTM5NDYzLDIyMDk4LDEzNDk2MSwxNDI1MTQsMTY5NzYwLDEzNTAwLDI3NzA5LDE1MTA5OSxudWxsLG51bGwsMTYxMTQwLDE0Mjk4NywxMzk3''@;'; put 'put ''ODQsMTczNjU5LDE2NzExNywxMzQ3NzgsMTM0MTk2LDE1NzcyNCwzMjY1OSwxMzUzNzUsMTQxMzE1LDE0MTYyNSwxMzgxOSwxNTIwMzUsMTM0Nzk2LDEzNTA1MywxMzQ4MjYsMTYyNzUsMTM0OTYwLDEzNDQ3MSwxMzU1MDMsMTM0NzMyLG51bGwsMTM0ODI3LDEzNDA1NywxMzQ0NzIsMTM1MzYw''@;'; put 'put ''LDEzNTQ4NSwxNjM3NywxNDA5NTAsMjU2NTAsMTM1MDg1LDE0NDM3MiwxNjEzMzcsMTQyMjg2LDEzNDUyNiwxMzQ1MjcsMTQyNDE3LDE0MjQyMSwxNDg3MiwxMzQ4MDgsMTM1MzY3LDEzNDk1OCwxNzM2MTgsMTU4NTQ0LDE2NzEyMiwxNjczMjEsMTY3MTE0LDM4MzE0LDIxNzA4LDMzNDc2LDIx''@;'; put 'put ''OTQ1LG51bGwsMTcxNzE1LDM5OTc0LDM5NjA2LDE2MTYzMCwxNDI4MzAsMjg5OTIsMzMxMzMsMzMwMDQsMjM1ODAsMTU3MDQyLDMzMDc2LDE0MjMxLDIxMzQzLDE2NDAyOSwzNzMwMiwxMzQ5MDYsMTM0NjcxLDEzNDc3NSwxMzQ5MDcsMTM3ODksMTUxMDE5LDEzODMzLDEzNDM1OCwyMjE5MSwx''@;'; put 'put ''NDEyMzcsMTM1MzY5LDEzNDY3MiwxMzQ3NzYsMTM1Mjg4LDEzNTQ5NiwxNjQzNTksMTM2Mjc3LDEzNDc3NywxNTExMjAsMTQyNzU2LDIzMTI0LDEzNTE5NywxMzUxOTgsMTM1NDEzLDEzNTQxNCwyMjQyOCwxMzQ2NzMsMTYxNDI4LDE2NDU1NywxMzUwOTMsMTM0Nzc5LDE1MTkzNCwxNDA4Mywx''@;'; put 'put ''MzUwOTQsMTM1NTUyLDE1MjI4MCwxNzI3MzMsMTQ5OTc4LDEzNzI3NCwxNDc4MzEsMTY0NDc2LDIyNjgxLDIxMDk2LDEzODUwLDE1MzQwNSwzMTY2NiwyMzQwMCwxODQzMiwxOTI0NCw0MDc0MywxODkxOSwzOTk2NywzOTgyMSwxNTQ0ODQsMTQzNjc3LDIyMDExLDEzODEwLDIyMTUzLDIwMDA4''@;'; put 'put ''LDIyNzg2LDEzODE3NywxOTQ2ODAsMzg3MzcsMTMxMjA2LDIwMDU5LDIwMTU1LDEzNjMwLDIzNTg3LDI0NDAxLDI0NTE2LDE0NTg2LDI1MTY0LDI1OTA5LDI3NTE0LDI3NzAxLDI3NzA2LDI4NzgwLDI5MjI3LDIwMDEyLDI5MzU3LDE0OTczNywzMjU5NCwzMTAzNSwzMTk5MywzMjU5NSwxNTYy''@;'; put 'put ''NjYsMTM1MDUsbnVsbCwxNTY0OTEsMzI3NzAsMzI4OTYsMTU3MjAyLDE1ODAzMywyMTM0MSwzNDkxNiwzNTI2NSwxNjE5NzAsMzU3NDQsMzYxMjUsMzgwMjEsMzgyNjQsMzgyNzEsMzgzNzYsMTY3NDM5LDM4ODg2LDM5MDI5LDM5MTE4LDM5MTM0LDM5MjY3LDE3ZTQsNDAwNjAsNDA0NzksNDA2''@;'; put 'put ''NDQsMjc1MDMsNjM3NTEsMjAwMjMsMTMxMjA3LDM4NDI5LDI1MTQzLDM4MDUwLG51bGwsMjA1MzksMjgxNTgsMTcxMTIzLDQwODcwLDE1ODE3LDM0OTU5LDE0Nzc5MCwyODc5MSwyMzc5NywxOTIzMiwxNTIwMTMsMTM2NTcsMTU0OTI4LDI0ODY2LDE2NjQ1MCwzNjc3NSwzNzM2NiwyOTA3Mywy''@;'; put 'put ''NjM5MywyOTYyNiwxNDQwMDEsMTcyMjk1LDE1NDk5LDEzNzYwMCwxOTIxNiwzMDk0OCwyOTY5OCwyMDkxMCwxNjU2NDcsMTYzOTMsMjcyMzUsMTcyNzMwLDE2OTMxLDM0MzE5LDEzMzc0MywzMTI3NCwxNzAzMTEsMTY2NjM0LDM4NzQxLDI4NzQ5LDIxMjg0LDEzOTM5MCwzNzg3NiwzMDQyNSwx''@;'; put 'put ''NjYzNzEsNDA4NzEsMzA2ODUsMjAxMzEsMjA0NjQsMjA2NjgsMjAwMTUsMjAyNDcsNDA4NzIsMjE1NTYsMzIxMzksMjI2NzQsMjI3MzYsMTM4Njc4LDI0MjEwLDI0MjE3LDI0NTE0LDE0MTA3NCwyNTk5NSwxNDQzNzcsMjY5MDUsMjcyMDMsMTQ2NTMxLDI3OTAzLG51bGwsMjkxODQsMTQ4NzQx''@;'; put 'put ''LDI5NTgwLDE2MDkxLDE1MDAzNSwyMzMxNywyOTg4MSwzNTcxNSwxNTQ3ODgsMTUzMjM3LDMxMzc5LDMxNzI0LDMxOTM5LDMyMzY0LDMzNTI4LDM0MTk5LDQwODczLDM0OTYwLDQwODc0LDM2NTM3LDQwODc1LDM2ODE1LDM0MTQzLDM5MzkyLDM3NDA5LDQwODc2LDE2NzM1MywxMzYyNTUsMTY0''@;'; put 'put ''OTcsMTcwNTgsMjMwNjYsbnVsbCxudWxsLG51bGwsMzkwMTYsMjY0NzUsMTcwMTQsMjIzMzMsbnVsbCwzNDI2MiwxNDk4ODMsMzM0NzEsMTYwMDEzLDE5NTg1LDE1OTA5MiwyMzkzMSwxNTg0ODUsMTU5Njc4LDQwODc3LDQwODc4LDIzNDQ2LDQwODc5LDI2MzQzLDMyMzQ3LDI4MjQ3LDMxMTc4''@;'; put 'put ''LDE1NzUyLDE3NjAzLDE0Mzk1OCwxNDEyMDYsMTczMDYsMTc3MTgsbnVsbCwyMzc2NSwxNDYyMDIsMzU1NzcsMjM2NzIsMTU2MzQsMTQ0NzIxLDIzOTI4LDQwODgyLDI5MDE1LDE3NzUyLDE0NzY5MiwxMzg3ODcsMTk1NzUsMTQ3MTIsMTMzODYsMTMxNDkyLDE1ODc4NSwzNTUzMiwyMDQwNCwx''@;'; put 'put ''MzE2NDEsMjI5NzUsMzMxMzIsMzg5OTgsMTcwMjM0LDI0Mzc5LDEzNDA0NyxudWxsLDEzOTcxMywxNjYyNTMsMTY2NDIsMTgxMDcsMTY4MDU3LDE2MTM1LDQwODgzLDE3MjQ2OSwxNjYzMiwxNDI5NCwxODE2NywxNTg3OTAsMTY3NjQsMTY1NTU0LDE2MDc2NywxNzc3MywxNDU0OCwxNTI3MzAs''@;'; put 'put ''MTc3NjEsMTc2OTEsMTk4NDksMTk1NzksMTk4MzAsMTc4OTgsMTYzMjgsMTUwMjg3LDEzOTIxLDE3NjMwLDE3NTk3LDE2ODc3LDIzODcwLDIzODgwLDIzODk0LDE1ODY4LDE0MzUxLDIzOTcyLDIzOTkzLDE0MzY4LDE0MzkyLDI0MTMwLDI0MjUzLDI0MzU3LDI0NDUxLDE0NjAwLDE0NjEyLDE0''@;'; put 'put ''NjU1LDE0NjY5LDI0NzkxLDI0ODkzLDIzNzgxLDE0NzI5LDI1MDE1LDI1MDE3LDI1MDM5LDE0Nzc2LDI1MTMyLDI1MjMyLDI1MzE3LDI1MzY4LDE0ODQwLDIyMTkzLDE0ODUxLDI1NTcwLDI1NTk1LDI1NjA3LDI1NjkwLDE0OTIzLDI1NzkyLDIzODI5LDIyMDQ5LDQwODYzLDE0OTk5LDI1OTkw''@;'; put 'put ''LDE1MDM3LDI2MTExLDI2MTk1LDE1MDkwLDI2MjU4LDE1MTM4LDI2MzkwLDE1MTcwLDI2NTMyLDI2NjI0LDE1MTkyLDI2Njk4LDI2NzU2LDE1MjE4LDE1MjE3LDE1MjI3LDI2ODg5LDI2OTQ3LDI5Mjc2LDI2OTgwLDI3MDM5LDI3MDEzLDE1MjkyLDI3MDk0LDE1MzI1LDI3MjM3LDI3MjUyLDI3''@;'; put 'put ''MjQ5LDI3MjY2LDE1MzQwLDI3Mjg5LDE1MzQ2LDI3MzA3LDI3MzE3LDI3MzQ4LDI3MzgyLDI3NTIxLDI3NTg1LDI3NjI2LDI3NzY1LDI3ODE4LDE1NTYzLDI3OTA2LDI3OTEwLDI3OTQyLDI4MDMzLDE1NTk5LDI4MDY4LDI4MDgxLDI4MTgxLDI4MTg0LDI4MjAxLDI4Mjk0LDE2NjMzNiwyODM0''@;'; put 'put ''NywyODM4NiwyODM3OCw0MDgzMSwyODM5MiwyODM5MywyODQ1MiwyODQ2OCwxNTY4NiwxNDcyNjUsMjg1NDUsMjg2MDYsMTU3MjIsMTU3MzMsMjkxMTEsMjM3MDUsMTU3NTQsMjg3MTYsMTU3NjEsMjg3NTIsMjg3NTYsMjg3ODMsMjg3OTksMjg4MDksMTMxODc3LDE3MzQ1LDEzODA5LDEzNDg3''@;'; put 'put ''MiwxNDcxNTksMjI0NjIsMTU5NDQzLDI4OTkwLDE1MzU2OCwxMzkwMiwyNzA0MiwxNjY4ODksMjM0MTIsMzEzMDUsMTUzODI1LDE2OTE3NywzMTMzMywzMTM1NywxNTQwMjgsMzE0MTksMzE0MDgsMzE0MjYsMzE0MjcsMjkxMzcsMTU2ODEzLDE2ODQyLDMxNDUwLDMxNDUzLDMxNDY2LDE2ODc5''@;'; put 'put ''LDIxNjgyLDE1NDYyNSwzMTQ5OSwzMTU3MywzMTUyOSwxNTIzMzQsMTU0ODc4LDMxNjUwLDMxNTk5LDMzNjkyLDE1NDU0OCwxNTg4NDcsMzE2OTYsMzM4MjUsMzE2MzQsMzE2NzIsMTU0OTEyLDE1Nzg5LDE1NDcyNSwzMzkzOCwzMTczOCwzMTc1MCwzMTc5NywxNTQ4MTcsMzE4MTIsMzE4NzUs''@;'; put 'put ''MTQ5NjM0LDMxOTEwLDI2MjM3LDE0ODg1NiwzMTk0NSwzMTk0MywzMTk3NCwzMTg2MCwzMTk4NywzMTk4OSwzMTk1MCwzMjM1OSwxNzY5MywxNTkzMDAsMzIwOTMsMTU5NDQ2LDI5ODM3LDMyMTM3LDMyMTcxLDI4OTgxLDMyMTc5LDMyMjEwLDE0NzU0MywxNTU2ODksMzIyMjgsMTU2MzUsMzIy''@;'; put 'put ''NDUsMTM3MjA5LDMyMjI5LDE2NDcxNywzMjI4NSwxNTU5MzcsMTU1OTk0LDMyMzY2LDMyNDAyLDE3MTk1LDM3OTk2LDMyMjk1LDMyNTc2LDMyNTc3LDMyNTgzLDMxMDMwLDE1NjM2OCwzOTM5MywzMjY2MywxNTY0OTcsMzI2NzUsMTM2ODAxLDEzMTE3NiwxNzc1NiwxNDUyNTQsMTc2NjcsMTY0''@;'; put 'put ''NjY2LDMyNzYyLDE1NjgwOSwzMjc3MywzMjc3NiwzMjc5NywzMjgwOCwzMjgxNSwxNzIxNjcsMTU4OTE1LDMyODI3LDMyODI4LDMyODY1LDE0MTA3NiwxODgyNSwxNTcyMjIsMTQ2OTE1LDE1NzQxNiwyNjQwNSwzMjkzNSwxNjY0NzIsMzMwMzEsMzMwNTAsMjI3MDQsMTQxMDQ2LDI3Nzc1LDE1''@;'; put 'put ''NjgyNCwxNTE0ODAsMjU4MzEsMTM2MzMwLDMzMzA0LDEzNzMxMCwyNzIxOSwxNTAxMTcsMTUwMTY1LDE3NTMwLDMzMzIxLDEzMzkwMSwxNTgyOTAsMTQ2ODE0LDIwNDczLDEzNjQ0NSwzNDAxOCwzMzYzNCwxNTg0NzQsMTQ5OTI3LDE0NDY4OCwxMzcwNzUsMTQ2OTM2LDMzNDUwLDI2OTA3LDE5''@;'; put 'put ''NDk2NCwxNjg1OSwzNDEyMywzMzQ4OCwzMzU2MiwxMzQ2NzgsMTM3MTQwLDE0MDE3LDE0Mzc0MSwxNDQ3MzAsMzM0MDMsMzM1MDYsMzM1NjAsMTQ3MDgzLDE1OTEzOSwxNTg0NjksMTU4NjE1LDE0NDg0NiwxNTgwNywzMzU2NSwyMTk5NiwzMzY2OSwxNzY3NSwxNTkxNDEsMzM3MDgsMzM3Mjks''@;'; put 'put ''MzM3NDcsMTM0MzgsMTU5NDQ0LDI3MjIzLDM0MTM4LDEzNDYyLDE1OTI5OCwxNDMwODcsMzM4ODAsMTU0NTk2LDMzOTA1LDE1ODI3LDE3NjM2LDI3MzAzLDMzODY2LDE0NjYxMywzMTA2NCwzMzk2MCwxNTg2MTQsMTU5MzUxLDE1OTI5OSwzNDAxNCwzMzgwNywzMzY4MSwxNzU2OCwzMzkzOSwz''@;'; put 'put ''NDAyMCwxNTQ3NjksMTY5NjAsMTU0ODE2LDE3NzMxLDM0MTAwLDIzMjgyLDE1OTM4NSwxNzcwMywzNDE2MywxNzY4NiwyNjU1OSwzNDMyNiwxNjU0MTMsMTY1NDM1LDM0MjQxLDE1OTg4MCwzNDMwNiwxMzY1NzgsMTU5OTQ5LDE5NDk5NCwxNzc3MCwzNDM0NCwxMzg5NiwxMzczNzgsMjE0OTUs''@;'; put 'put ''MTYwNjY2LDM0NDMwLDM0NjczLDE3MjI4MCwzNDc5OCwxNDIzNzUsMzQ3MzcsMzQ3NzgsMzQ4MzEsMjIxMTMsMzQ0MTIsMjY3MTAsMTc5MzUsMzQ4ODUsMzQ4ODYsMTYxMjQ4LDE0Njg3MywxNjEyNTIsMzQ5MTAsMzQ5NzIsMTgwMTEsMzQ5OTYsMzQ5OTcsMjU1MzcsMzUwMTMsMzA1ODMsMTYx''@;'; put 'put ''NTUxLDM1MjA3LDM1MjEwLDM1MjM4LDM1MjQxLDM1MjM5LDM1MjYwLDE2NjQzNywzNTMwMywxNjIwODQsMTYyNDkzLDM1NDg0LDMwNjExLDM3Mzc0LDM1NDcyLDE2MjM5MywzMTQ2NSwxNjI2MTgsMTQ3MzQzLDE4MTk1LDE2MjYxNiwyOTA1MiwzNTU5NiwzNTYxNSwxNTI2MjQsMTUyOTMzLDM1''@;'; put 'put ''NjQ3LDM1NjYwLDM1NjYxLDM1NDk3LDE1MDEzOCwzNTcyOCwzNTczOSwzNTUwMywxMzY5MjcsMTc5NDEsMzQ4OTUsMzU5OTUsMTYzMTU2LDE2MzIxNSwxOTUwMjgsMTQxMTcsMTYzMTU1LDM2MDU0LDE2MzIyNCwxNjMyNjEsMzYxMTQsMzYwOTksMTM3NDg4LDM2MDU5LDI4NzY0LDM2MTEzLDE1''@;'; put 'put ''MDcyOSwxNjA4MCwzNjIxNSwzNjI2NSwxNjM4NDIsMTM1MTg4LDE0OTg5OCwxNTIyOCwxNjQyODQsMTYwMDEyLDMxNDYzLDM2NTI1LDM2NTM0LDM2NTQ3LDM3NTg4LDM2NjMzLDM2NjUzLDE2NDcwOSwxNjQ4ODIsMzY3NzMsMzc2MzUsMTcyNzAzLDEzMzcxMiwzNjc4NywxODczMCwxNjYzNjYs''@;'; put 'put ''MTY1MTgxLDE0Njg3NSwyNDMxMiwxNDM5NzAsMzY4NTcsMTcyMDUyLDE2NTU2NCwxNjUxMjEsMTQwMDY5LDE0NzIwLDE1OTQ0NywzNjkxOSwxNjUxODAsMTYyNDk0LDM2OTYxLDE2NTIyOCwxNjUzODcsMzcwMzIsMTY1NjUxLDM3MDYwLDE2NTYwNiwzNzAzOCwzNzExNywzNzIyMywxNTA4OCwz''@;'; put 'put ''NzI4OSwzNzMxNiwzMTkxNiwxNjYxOTUsMTM4ODg5LDM3MzkwLDI3ODA3LDM3NDQxLDM3NDc0LDE1MzAxNywzNzU2MSwxNjY1OTgsMTQ2NTg3LDE2NjY2OCwxNTMwNTEsMTM0NDQ5LDM3Njc2LDM3NzM5LDE2NjYyNSwxNjY4OTEsMjg4MTUsMjMyMzUsMTY2NjI2LDE2NjYyOSwxODc4OSwzNzQ0''@;'; put 'put ''NCwxNjY4OTIsMTY2OTY5LDE2NjkxMSwzNzc0NywzNzk3OSwzNjU0MCwzODI3NywzODMxMCwzNzkyNiwzODMwNCwyODY2MiwxNzA4MSwxNDA5MjIsMTY1NTkyLDEzNTgwNCwxNDY5OTAsMTg5MTEsMjc2NzYsMzg1MjMsMzg1NTAsMTY3NDgsMzg1NjMsMTU5NDQ1LDI1MDUwLDM4NTgyLDMwOTY1''@;'; put 'put ''LDE2NjYyNCwzODU4OSwyMTQ1MiwxODg0OSwxNTg5MDQsMTMxNzAwLDE1NjY4OCwxNjgxMTEsMTY4MTY1LDE1MDIyNSwxMzc0OTMsMTQ0MTM4LDM4NzA1LDM0MzcwLDM4NzEwLDE4OTU5LDE3NzI1LDE3Nzk3LDE1MDI0OSwyODc4OSwyMzM2MSwzODY4MywzODc0OCwxNjg0MDUsMzg3NDMsMjMz''@;'; put 'put ''NzAsMTY4NDI3LDM4NzUxLDM3OTI1LDIwNjg4LDE0MzU0MywxNDM1NDgsMzg3OTMsMzg4MTUsMzg4MzMsMzg4NDYsMzg4NDgsMzg4NjYsMzg4ODAsMTUyNjg0LDM4ODk0LDI5NzI0LDE2OTAxMSwzODkxMSwzODkwMSwxNjg5ODksMTYyMTcwLDE5MTUzLDM4OTY0LDM4OTYzLDM4OTg3LDM5MDE0''@;'; put 'put ''LDE1MTE4LDE2MDExNywxNTY5NywxMzI2NTYsMTQ3ODA0LDE1MzM1MCwzOTExNCwzOTA5NSwzOTExMiwzOTExMSwxOTE5OSwxNTkwMTUsMTM2OTE1LDIxOTM2LDM5MTM3LDM5MTQyLDM5MTQ4LDM3NzUyLDM5MjI1LDE1MDA1NywxOTMxNCwxNzAwNzEsMTcwMjQ1LDM5NDEzLDM5NDM2LDM5NDgz''@;'; put 'put ''LDM5NDQwLDM5NTEyLDE1MzM4MSwxNDAyMCwxNjgxMTMsMTcwOTY1LDM5NjQ4LDM5NjUwLDE3MDc1NywzOTY2OCwxOTQ3MCwzOTcwMCwzOTcyNSwxNjUzNzYsMjA1MzIsMzk3MzIsMTU4MTIwLDE0NTMxLDE0MzQ4NSwzOTc2MCwzOTc0NCwxNzEzMjYsMjMxMDksMTM3MzE1LDM5ODIyLDE0ODA0''@;'; put 'put ''MywzOTkzOCwzOTkzNSwzOTk0OCwxNzE2MjQsNDA0MDQsMTcxOTU5LDE3MjQzNCwxNzI0NTksMTcyMjU3LDE3MjMyMywxNzI1MTEsNDAzMTgsNDAzMjMsMTcyMzQwLDQwNDYyLDI2NzYwLDQwMzg4LDEzOTYxMSwxNzI0MzUsMTcyNTc2LDEzNzUzMSwxNzI1OTUsNDAyNDksMTcyMjE3LDE3Mjcy''@;'; put 'put ''NCw0MDU5Miw0MDU5Nyw0MDYwNiw0MDYxMCwxOTc2NCw0MDYxOCw0MDYyMywxNDgzMjQsNDA2NDEsMTUyMDAsMTQ4MjEsMTU2NDUsMjAyNzQsMTQyNzAsMTY2OTU1LDQwNzA2LDQwNzEyLDE5MzUwLDM3OTI0LDE1OTEzOCw0MDcyNyw0MDcyNiw0MDc2MSwyMjE3NSwyMjE1NCw0MDc3MywzOTM1''@;'; put 'put ''MiwxNjgwNzUsMzg4OTgsMzM5MTksNDA4MDIsNDA4MDksMzE0NTIsNDA4NDYsMjkyMDYsMTkzOTAsMTQ5ODc3LDE0OTk0NywyOTA0NywxNTAwMDgsMTQ4Mjk2LDE1MDA5NywyOTU5OCwxNjY4NzQsMTM3NDY2LDMxMTM1LDE2NjI3MCwxNjc0NzgsMzc3MzcsMzc4NzUsMTY2NDY4LDM3NjEyLDM3''@;'; put 'put ''NzYxLDM3ODM1LDE2NjI1MiwxNDg2NjUsMjkyMDcsMTYxMDcsMzA1NzgsMzEyOTksMjg4ODAsMTQ4NTk1LDE0ODQ3MiwyOTA1NCwxMzcxOTksMjg4MzUsMTM3NDA2LDE0NDc5MywxNjA3MSwxMzczNDksMTUyNjIzLDEzNzIwOCwxNDExNCwxMzY5NTUsMTM3MjczLDE0MDQ5LDEzNzA3NiwxMzc0''@;'; put 'put ''MjUsMTU1NDY3LDE0MTE1LDEzNjg5NiwyMjM2MywxNTAwNTMsMTM2MTkwLDEzNTg0OCwxMzYxMzQsMTM2Mzc0LDM0MDUxLDE0NTA2MiwzNDA1MSwzMzg3NywxNDk5MDgsMTYwMTAxLDE0Njk5MywxNTI5MjQsMTQ3MTk1LDE1OTgyNiwxNzY1MiwxNDUxMzQsMTcwMzk3LDE1OTUyNiwyNjYxNywx''@;'; put 'put ''NDEzMSwxNTM4MSwxNTg0NywyMjYzNiwxMzc1MDYsMjY2NDAsMTY0NzEsMTQ1MjE1LDE0NzY4MSwxNDc1OTUsMTQ3NzI3LDE1ODc1MywyMTcwNywyMjE3NCwxNTczNjEsMjIxNjIsMTM1MTM1LDEzNDA1NiwxMzQ2NjksMzc4MzAsMTY2Njc1LDM3Nzg4LDIwMjE2LDIwNzc5LDE0MzYxLDE0ODUz''@;'; put 'put ''NCwyMDE1NiwxMzIxOTcsMTMxOTY3LDIwMjk5LDIwMzYyLDE1MzE2OSwyMzE0NCwxMzE0OTksMTMyMDQzLDE0NzQ1LDEzMTg1MCwxMzIxMTYsMTMzNjUsMjAyNjUsMTMxNzc2LDE2NzYwMywxMzE3MDEsMzU1NDYsMTMxNTk2LDIwMTIwLDIwNjg1LDIwNzQ5LDIwMzg2LDIwMjI3LDE1MDAzMCwx''@;'; put 'put ''NDcwODIsMjAyOTAsMjA1MjYsMjA1ODgsMjA2MDksMjA0MjgsMjA0NTMsMjA1NjgsMjA3MzIsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjgyNzgsMTQ0Nzg5LDE0NzAwMSwxNDcxMzUsMjgwMTgsMTM3MzQ4LDE0NzA4MSwyMDkwNCwyMDkzMSwxMzI1NzYsMTc2MjksMTMyMjU5LDEzMjI0Miwx''@;'; put 'put ''MzIyNDEsMzYyMTgsMTY2NTU2LDEzMjg3OCwyMTA4MSwyMTE1NiwxMzMyMzUsMjEyMTcsMzc3NDIsMTgwNDIsMjkwNjgsMTQ4MzY0LDEzNDE3NiwxNDk5MzIsMTM1Mzk2LDI3MDg5LDEzNDY4NSwyOTgxNywxNjA5NCwyOTg0OSwyOTcxNiwyOTc4MiwyOTU5MiwxOTM0MiwxNTAyMDQsMTQ3NTk3''@;'; put 'put ''LDIxNDU2LDEzNzAwLDI5MTk5LDE0NzY1NywyMTk0MCwxMzE5MDksMjE3MDksMTM0MDg2LDIyMzAxLDM3NDY5LDM4NjQ0LDM3NzM0LDIyNDkzLDIyNDEzLDIyMzk5LDEzODg2LDIyNzMxLDIzMTkzLDE2NjQ3MCwxMzY5NTQsMTM3MDcxLDEzNjk3NiwyMzA4NCwyMjk2OCwzNzUxOSwyMzE2Niwy''@;'; put 'put ''MzI0NywyMzA1OCwxNTM5MjYsMTM3NzE1LDEzNzMxMywxNDgxMTcsMTQwNjksMjc5MDksMjk3NjMsMjMwNzMsMTU1MjY3LDIzMTY5LDE2Njg3MSwxMzIxMTUsMzc4NTYsMjk4MzYsMTM1OTM5LDI4OTMzLDE4ODAyLDM3ODk2LDE2NjM5NSwzNzgyMSwxNDI0MCwyMzU4MiwyMzcxMCwyNDE1OCwy''@;'; put 'put ''NDEzNiwxMzc2MjIsMTM3NTk2LDE0NjE1OCwyNDI2OSwyMzM3NSwxMzc0NzUsMTM3NDc2LDE0MDgxLDEzNzM3NiwxNDA0NSwxMzY5NTgsMTQwMzUsMzMwNjYsMTY2NDcxLDEzODY4MiwxNDQ0OTgsMTY2MzEyLDI0MzMyLDI0MzM0LDEzNzUxMSwxMzcxMzEsMjMxNDcsMTM3MDE5LDIzMzY0LDM0''@;'; put 'put ''MzI0LDE2MTI3NywzNDkxMiwyNDcwMiwxNDE0MDgsMTQwODQzLDI0NTM5LDE2MDU2LDE0MDcxOSwxNDA3MzQsMTY4MDcyLDE1OTYwMywyNTAyNCwxMzExMzQsMTMxMTQyLDE0MDgyNywyNDk4NSwyNDk4NCwyNDY5MywxNDI0OTEsMTQyNTk5LDE0OTIwNCwxNjgyNjksMjU3MTMsMTQ5MDkzLDE0''@;'; put 'put ''MjE4NiwxNDg4OSwxNDIxMTQsMTQ0NDY0LDE3MDIxOCwxNDI5NjgsMjUzOTksMTczMTQ3LDI1NzgyLDI1MzkzLDI1NTUzLDE0OTk4NywxNDI2OTUsMjUyNTIsMTQyNDk3LDI1NjU5LDI1OTYzLDI2OTk0LDE1MzQ4LDE0MzUwMiwxNDQwNDUsMTQ5ODk3LDE0NDA0MywyMTc3MywxNDQwOTYsMTM3''@;'; put 'put ''NDMzLDE2OTAyMywyNjMxOCwxNDQwMDksMTQzNzk1LDE1MDcyLDE2Nzg0LDE1Mjk2NCwxNjY2OTAsMTUyOTc1LDEzNjk1NiwxNTI5MjMsMTUyNjEzLDMwOTU4LDE0MzYxOSwxMzcyNTgsMTQzOTI0LDEzNDEyLDE0Mzg4NywxNDM3NDYsMTQ4MTY5LDI2MjU0LDE1OTAxMiwyNjIxOSwxOTM0Nywy''@;'; put 'put ''NjE2MCwxNjE5MDQsMTM4NzMxLDI2MjExLDE0NDA4MiwxNDQwOTcsMjYxNDIsMTUzNzE0LDE0NTQ1LDE0NTQ2NiwxNDUzNDAsMTUyNTcsMTQ1MzE0LDE0NDM4MiwyOTkwNCwxNTI1NCwyNjUxMSwxNDkwMzQsMjY4MDYsMjY2NTQsMTUzMDAsMjczMjYsMTQ0MzUsMTQ1MzY1LDE0ODYxNSwyNzE4''@;'; put 'put ''NywyNzIxOCwyNzMzNywyNzM5NywxMzc0OTAsMjU4NzMsMjY3NzYsMjcyMTIsMTUzMTksMjcyNTgsMjc0NzksMTQ3MzkyLDE0NjU4NiwzNzc5MiwzNzYxOCwxNjY4OTAsMTY2NjAzLDM3NTEzLDE2Mzg3MCwxNjYzNjQsMzc5OTEsMjgwNjksMjg0MjcsMTQ5OTk2LDI4MDA3LDE0NzMyNywxNTc1''@;'; put 'put ''OSwyODE2NCwxNDc1MTYsMjMxMDEsMjgxNzAsMjI1OTksMjc5NDAsMzA3ODYsMjg5ODcsMTQ4MjUwLDE0ODA4NiwyODkxMywyOTI2NCwyOTMxOSwyOTMzMiwxNDkzOTEsMTQ5Mjg1LDIwODU3LDE1MDE4MCwxMzI1ODcsMjk4MTgsMTQ3MTkyLDE0NDk5MSwxNTAwOTAsMTQ5NzgzLDE1NTYxNywx''@;'; put 'put ''NjEzNCwxNjA0OSwxNTAyMzksMTY2OTQ3LDE0NzI1MywyNDc0MywxNjExNSwyOTkwMCwyOTc1NiwzNzc2NywyOTc1MSwxNzU2NywxNTkyMTAsMTc3NDUsMzAwODMsMTYyMjcsMTUwNzQ1LDE1MDc5MCwxNjIxNiwzMDAzNywzMDMyMywxNzM1MTAsMTUxMjksMjk4MDAsMTY2NjA0LDE0OTkzMSwx''@;'; put 'put ''NDk5MDIsMTUwOTksMTU4MjEsMTUwMDk0LDE2MTI3LDE0OTk1NywxNDk3NDcsMzczNzAsMjIzMjIsMzc2OTgsMTY2NjI3LDEzNzMxNiwyMDcwMywxNTIwOTcsMTUyMDM5LDMwNTg0LDE0MzkyMiwzMDQ3OCwzMDQ3OSwzMDU4NywxNDkxNDMsMTQ1MjgxLDE0OTQyLDE0OTc0NCwyOTc1MiwyOTg1''@;'; put 'put ''MSwxNjA2MywxNTAyMDIsMTUwMjE1LDE2NTg0LDE1MDE2NiwxNTYwNzgsMzc2MzksMTUyOTYxLDMwNzUwLDMwODYxLDMwODU2LDMwOTMwLDI5NjQ4LDMxMDY1LDE2MTYwMSwxNTMzMTUsMTY2NTQsMzExMzEsMzM5NDIsMzExNDEsMjcxODEsMTQ3MTk0LDMxMjkwLDMxMjIwLDE2NzUwLDEzNjkz''@;'; put 'put ''NCwxNjY5MCwzNzQyOSwzMTIxNywxMzQ0NzYsMTQ5OTAwLDEzMTczNywxNDY4NzQsMTM3MDcwLDEzNzE5LDIxODY3LDEzNjgwLDEzOTk0LDEzMTU0MCwxMzQxNTcsMzE0NTgsMjMxMjksMTQxMDQ1LDE1NDI4NywxNTQyNjgsMjMwNTMsMTMxNjc1LDMwOTYwLDIzMDgyLDE1NDU2NiwzMTQ4Niwx''@;'; put 'put ''Njg4OSwzMTgzNywzMTg1MywxNjkxMywxNTQ1NDcsMTU1MzI0LDE1NTMwMiwzMTk0OSwxNTAwMDksMTM3MTM2LDMxODg2LDMxODY4LDMxOTE4LDI3MzE0LDMyMjIwLDMyMjYzLDMyMjExLDMyNTkwLDE1NjI1NywxNTU5OTYsMTYyNjMyLDMyMTUxLDE1NTI2NiwxNzAwMiwxNTg1ODEsMTMzMzk4''@;'; put 'put ''LDI2NTgyLDEzMTE1MCwxNDQ4NDcsMjI0NjgsMTU2NjkwLDE1NjY2NCwxNDk4NTgsMzI3MzMsMzE1MjcsMTMzMTY0LDE1NDM0NSwxNTQ5NDcsMzE1MDAsMTU1MTUwLDM5Mzk4LDM0MzczLDM5NTIzLDI3MTY0LDE0NDQ0NywxNDgxOCwxNTAwMDcsMTU3MTAxLDM5NDU1LDE1NzA4OCwzMzkyMCwx''@;'; put 'put ''NjAwMzksMTU4OTI5LDE3NjQyLDMzMDc5LDE3NDEwLDMyOTY2LDMzMDMzLDMzMDkwLDE1NzYyMCwzOTEwNywxNTgyNzQsMzMzNzgsMzMzODEsMTU4Mjg5LDMzODc1LDE1OTE0MywzNDMyMCwxNjAyODMsMjMxNzQsMTY3NjcsMTM3MjgwLDIzMzM5LDEzNzM3NywyMzI2OCwxMzc0MzIsMzQ0NjQs''@;'; put 'put ''MTk1MDA0LDE0NjgzMSwzNDg2MSwxNjA4MDIsMjMwNDIsMzQ5MjYsMjAyOTMsMzQ5NTEsMzUwMDcsMzUwNDYsMzUxNzMsMzUxNDksMTUzMjE5LDM1MTU2LDE2MTY2OSwxNjE2NjgsMTY2OTAxLDE2Njg3MywxNjY4MTIsMTY2MzkzLDE2MDQ1LDMzOTU1LDE4MTY1LDE4MTI3LDE0MzIyLDM1Mzg5''@;'; put 'put ''LDM1MzU2LDE2OTAzMiwyNDM5NywzNzQxOSwxNDgxMDAsMjYwNjgsMjg5NjksMjg4NjgsMTM3Mjg1LDQwMzAxLDM1OTk5LDM2MDczLDE2MzI5MiwyMjkzOCwzMDY1OSwyMzAyNCwxNzI2MiwxNDAzNiwzNjM5NCwzNjUxOSwxNTA1MzcsMzY2NTYsMzY2ODIsMTcxNDAsMjc3MzYsMjg2MDMsMTQw''@;'; put 'put ''MDY1LDE4NTg3LDI4NTM3LDI4Mjk5LDEzNzE3OCwzOTkxMywxNDAwNSwxNDk4MDcsMzcwNTEsMzcwMTUsMjE4NzMsMTg2OTQsMzczMDcsMzc4OTIsMTY2NDc1LDE2NDgyLDE2NjY1MiwzNzkyNywxNjY5NDEsMTY2OTcxLDM0MDIxLDM1MzcxLDM4Mjk3LDM4MzExLDM4Mjk1LDM4Mjk0LDE2NzIy''@;'; put 'put ''MCwyOTc2NSwxNjA2NiwxNDk3NTksMTUwMDgyLDE0ODQ1OCwxNjEwMywxNDM5MDksMzg1NDMsMTY3NjU1LDE2NzUyNiwxNjc1MjUsMTYwNzYsMTQ5OTk3LDE1MDEzNiwxNDc0MzgsMjk3MTQsMjk4MDMsMTYxMjQsMzg3MjEsMTY4MTEyLDI2Njk1LDE4OTczLDE2ODA4MywxNTM1NjcsMzg3NDks''@;'; put 'put ''Mzc3MzYsMTY2MjgxLDE2Njk1MCwxNjY3MDMsMTU2NjA2LDM3NTYyLDIzMzEzLDM1Njg5LDE4NzQ4LDI5Njg5LDE0Nzk5NSwzODgxMSwzODc2OSwzOTIyNCwxMzQ5NTAsMjQwMDEsMTY2ODUzLDE1MDE5NCwzODk0MywxNjkxNzgsMzc2MjIsMTY5NDMxLDM3MzQ5LDE3NjAwLDE2NjczNiwxNTAx''@;'; put 'put ''MTksMTY2NzU2LDM5MTMyLDE2NjQ2OSwxNjEyOCwzNzQxOCwxODcyNSwzMzgxMiwzOTIyNywzOTI0NSwxNjI1NjYsMTU4NjksMzkzMjMsMTkzMTEsMzkzMzgsMzk1MTYsMTY2NzU3LDE1MzgwMCwyNzI3OSwzOTQ1NywyMzI5NCwzOTQ3MSwxNzAyMjUsMTkzNDQsMTcwMzEyLDM5MzU2LDE5Mzg5''@;'; put 'put ''LDE5MzUxLDM3NzU3LDIyNjQyLDEzNTkzOCwyMjU2MiwxNDk5NDQsMTM2NDI0LDMwNzg4LDE0MTA4NywxNDY4NzIsMjY4MjEsMTU3NDEsMzc5NzYsMTQ2MzEsMjQ5MTIsMTQxMTg1LDE0MTY3NSwyNDgzOSw0MDAxNSw0MDAxOSw0MDA1OSwzOTk4OSwzOTk1MiwzOTgwNywzOTg4NywxNzE1NjUs''@;'; put 'put ''Mzk4MzksMTcyNTMzLDE3MjI4Niw0MDIyNSwxOTYzMCwxNDc3MTYsNDA0NzIsMTk2MzIsNDAyMDQsMTcyNDY4LDE3MjI2OSwxNzIyNzUsMTcwMjg3LDQwMzU3LDMzOTgxLDE1OTI1MCwxNTk3MTEsMTU4NTk0LDM0MzAwLDE3NzE1LDE1OTE0MCwxNTkzNjQsMTU5MjE2LDMzODI0LDM0Mjg2LDE1''@;'; put 'put ''OTIzMiwxNDUzNjcsMTU1NzQ4LDMxMjAyLDE0NDc5NiwxNDQ5NjAsMTg3MzMsMTQ5OTgyLDE1NzE0LDM3ODUxLDM3NTY2LDM3NzA0LDEzMTc3NSwzMDkwNSwzNzQ5NSwzNzk2NSwyMDQ1MiwxMzM3NiwzNjk2NCwxNTI5MjUsMzA3ODEsMzA4MDQsMzA5MDIsMzA3OTUsMTM3MDQ3LDE0MzgxNywx''@;'; put 'put ''NDk4MjUsMTM5NzgsMjAzMzgsMjg2MzQsMjg2MzMsMjg3MDIsMjg3MDIsMjE1MjQsMTQ3ODkzLDIyNDU5LDIyNzcxLDIyNDEwLDQwMjE0LDIyNDg3LDI4OTgwLDEzNDg3LDE0Nzg4NCwyOTE2MywxNTg3ODQsMTUxNDQ3LDIzMzM2LDEzNzE0MSwxNjY0NzMsMjQ4NDQsMjMyNDYsMjMwNTEsMTcw''@;'; put 'put ''ODQsMTQ4NjE2LDE0MTI0LDE5MzIzLDE2NjM5NiwzNzgxOSwzNzgxNiwxMzc0MzAsMTM0OTQxLDMzOTA2LDE1ODkxMiwxMzYyMTEsMTQ4MjE4LDE0MjM3NCwxNDg0MTcsMjI5MzIsMTQ2ODcxLDE1NzUwNSwzMjE2OCwxNTU5OTUsMTU1ODEyLDE0OTk0NSwxNDk4OTksMTY2Mzk0LDM3NjA1LDI5''@;'; put 'put ''NjY2LDE2MTA1LDI5ODc2LDE2Njc1NSwxMzczNzUsMTYwOTcsMTUwMTk1LDI3MzUyLDI5NjgzLDI5NjkxLDE2MDg2LDE1MDA3OCwxNTAxNjQsMTM3MTc3LDE1MDExOCwxMzIwMDcsMTM2MjI4LDE0OTk4OSwyOTc2OCwxNDk3ODIsMjg4MzcsMTQ5ODc4LDM3NTA4LDI5NjcwLDM3NzI3LDEzMjM1''@;'; put 'put ''MCwzNzY4MSwxNjY2MDYsMTY2NDIyLDM3NzY2LDE2Njg4NywxNTMwNDUsMTg3NDEsMTY2NTMwLDI5MDM1LDE0OTgyNywxMzQzOTksMjIxODAsMTMyNjM0LDEzNDEyMywxMzQzMjgsMjE3NjIsMzExNzIsMTM3MjEwLDMyMjU0LDEzNjg5OCwxNTAwOTYsMTM3Mjk4LDE3NzEwLDM3ODg5LDE0MDkw''@;'; put 'put ''LDE2NjU5MiwxNDk5MzMsMjI5NjAsMTM3NDA3LDEzNzM0NywxNjA5MDAsMjMyMDEsMTQwNTAsMTQ2Nzc5LDE0ZTMsMzc0NzEsMjMxNjEsMTY2NTI5LDEzNzMxNCwzNzc0OCwxNTU2NSwxMzM4MTIsMTkwOTQsMTQ3MzAsMjA3MjQsMTU3MjEsMTU2OTIsMTM2MDkyLDI5MDQ1LDE3MTQ3LDE2NDM3''@;'; put 'put ''NiwyODE3NSwxNjgxNjQsMTc2NDMsMjc5OTEsMTYzNDA3LDI4Nzc1LDI3ODIzLDE1NTc0LDE0NzQzNywxNDY5ODksMjgxNjIsMjg0MjgsMTU3MjcsMTMyMDg1LDMwMDMzLDE0MDEyLDEzNTEyLDE4MDQ4LDE2MDkwLDE4NTQ1LDIyOTgwLDM3NDg2LDE4NzUwLDM2NjczLDE2Njk0MCwxNTg2NTYs''@;'; put 'put ''MjI1NDYsMjI0NzIsMTQwMzgsMTM2Mjc0LDI4OTI2LDE0ODMyMiwxNTAxMjksMTQzMzMxLDEzNTg1NiwxNDAyMjEsMjY4MDksMjY5ODMsMTM2MDg4LDE0NDYxMywxNjI4MDQsMTQ1MTE5LDE2NjUzMSwxNDUzNjYsMTQ0Mzc4LDE1MDY4NywyNzE2MiwxNDUwNjksMTU4OTAzLDMzODU0LDE3NjMx''@;'; put 'put ''LDE3NjE0LDE1OTAxNCwxNTkwNTcsMTU4ODUwLDE1OTcxMCwyODQzOSwxNjAwMDksMzM1OTcsMTM3MDE4LDMzNzczLDE1ODg0OCwxNTk4MjcsMTM3MTc5LDIyOTIxLDIzMTcwLDEzNzEzOSwyMzEzNywyMzE1MywxMzc0NzcsMTQ3OTY0LDE0MTI1LDIzMDIzLDEzNzAyMCwxNDAyMywyOTA3MCwz''@;'; put 'put ''Nzc3NiwyNjI2NiwxNDgxMzMsMjMxNTAsMjMwODMsMTQ4MTE1LDI3MTc5LDE0NzE5MywxNjE1OTAsMTQ4NTcxLDE0ODE3MCwyODk1NywxNDgwNTcsMTY2MzY5LDIwNDAwLDE1OTAxNiwyMzc0NiwxNDg2ODYsMTYzNDA1LDE0ODQxMywyNzE0OCwxNDgwNTQsMTM1OTQwLDI4ODM4LDI4OTc5LDE0''@;'; put 'put ''ODQ1NywxNTc4MSwyNzg3MSwxOTQ1OTcsMTUwMDk1LDMyMzU3LDIzMDE5LDIzODU1LDE1ODU5LDI0NDEyLDE1MDEwOSwxMzcxODMsMzIxNjQsMzM4MzAsMjE2MzcsMTQ2MTcwLDE0NDEyOCwxMzE2MDQsMjIzOTgsMTMzMzMzLDEzMjYzMywxNjM1NywxMzkxNjYsMTcyNzI2LDI4Njc1LDE2ODI4''@;'; put 'put ''MywyMzkyMCwyOTU4MywzMTk1NSwxNjY0ODksMTY4OTkyLDIwNDI0LDMyNzQzLDI5Mzg5LDI5NDU2LDE2MjU0OCwyOTQ5NiwyOTQ5NywxNTMzMzQsMjk1MDUsMjk1MTIsMTYwNDEsMTYyNTg0LDM2OTcyLDI5MTczLDE0OTc0NiwyOTY2NSwzMzI3MCwxNjA3NCwzMDQ3NiwxNjA4MSwyNzgxMCwy''@;'; put 'put ''MjI2OSwyOTcyMSwyOTcyNiwyOTcyNywxNjA5OCwxNjExMiwxNjExNiwxNjEyMiwyOTkwNywxNjE0MiwxNjIxMSwzMDAxOCwzMDA2MSwzMDA2NiwzMDA5MywxNjI1MiwzMDE1MiwzMDE3MiwxNjMyMCwzMDI4NSwxNjM0MywzMDMyNCwxNjM0OCwzMDMzMCwxNTEzODgsMjkwNjQsMjIwNTEsMzUy''@;'; put 'put ''MDAsMjI2MzMsMTY0MTMsMzA1MzEsMTY0NDEsMjY0NjUsMTY0NTMsMTM3ODcsMzA2MTYsMTY0OTAsMTY0OTUsMjM2NDYsMzA2NTQsMzA2NjcsMjI3NzAsMzA3NDQsMjg4NTcsMzA3NDgsMTY1NTIsMzA3NzcsMzA3OTEsMzA4MDEsMzA4MjIsMzM4NjQsMTUyODg1LDMxMDI3LDI2NjI3LDMxMDI2''@;'; put 'put ''LDE2NjQzLDE2NjQ5LDMxMTIxLDMxMTI5LDM2Nzk1LDMxMjM4LDM2Nzk2LDE2NzQzLDMxMzc3LDE2ODE4LDMxNDIwLDMzNDAxLDE2ODM2LDMxNDM5LDMxNDUxLDE2ODQ3LDIwMDAxLDMxNTg2LDMxNTk2LDMxNjExLDMxNzYyLDMxNzcxLDE2OTkyLDE3MDE4LDMxODY3LDMxOTAwLDE3MDM2LDMx''@;'; put 'put ''OTI4LDE3MDQ0LDMxOTgxLDM2NzU1LDI4ODY0LDEzNDM1MSwzMjIwNywzMjIxMiwzMjIwOCwzMjI1MywzMjY4NiwzMjY5MiwyOTM0MywxNzMwMywzMjgwMCwzMjgwNSwzMTU0NSwzMjgxNCwzMjgxNywzMjg1MiwxNTgyMCwyMjQ1MiwyODgzMiwzMjk1MSwzMzAwMSwxNzM4OSwzMzAzNiwyOTQ4''@;'; put 'put ''MiwzMzAzOCwzMzA0MiwzMDA0OCwzMzA0NCwxNzQwOSwxNTE2MSwzMzExMCwzMzExMywzMzExNCwxNzQyNywyMjU4NiwzMzE0OCwzMzE1NiwxNzQ0NSwzMzE3MSwxNzQ1MywzMzE4OSwyMjUxMSwzMzIxNywzMzI1MiwzMzM2NCwxNzU1MSwzMzQ0NiwzMzM5OCwzMzQ4MiwzMzQ5NiwzMzUzNSwx''@;'; put 'put ''NzU4NCwzMzYyMywzODUwNSwyNzAxOCwzMzc5NywyODkxNywzMzg5MiwyNDgwMywzMzkyOCwxNzY2OCwzMzk4MiwzNDAxNywzNDA0MCwzNDA2NCwzNDEwNCwzNDEzMCwxNzcyMywzNDE1OSwzNDE2MCwzNDI3MiwxNzc4MywzNDQxOCwzNDQ1MCwzNDQ4MiwzNDU0MywzODQ2OSwzNDY5OSwxNzky''@;'; put 'put ''NiwxNzk0MywzNDk5MCwzNTA3MSwzNTEwOCwzNTE0MywzNTIxNywxNjIxNTEsMzUzNjksMzUzODQsMzU0NzYsMzU1MDgsMzU5MjEsMzYwNTIsMzYwODIsMzYxMjQsMTgzMjgsMjI2MjMsMzYyOTEsMTg0MTMsMjAyMDYsMzY0MTAsMjE5NzYsMjIzNTYsMzY0NjUsMjIwMDUsMzY1MjgsMTg0ODcs''@;'; put 'put ''MzY1NTgsMzY1NzgsMzY1ODAsMzY1ODksMzY1OTQsMzY3OTEsMzY4MDEsMzY4MTAsMzY4MTIsMzY5MTUsMzkzNjQsMTg2MDUsMzkxMzYsMzczOTUsMTg3MTgsMzc0MTYsMzc0NjQsMzc0ODMsMzc1NTMsMzc1NTAsMzc1NjcsMzc2MDMsMzc2MTEsMzc2MTksMzc2MjAsMzc2MjksMzc2OTksMzc3''@;'; put 'put ''NjQsMzc4MDUsMTg3NTcsMTg3NjksNDA2MzksMzc5MTEsMjEyNDksMzc5MTcsMzc5MzMsMzc5NTAsMTg3OTQsMzc5NzIsMzgwMDksMzgxODksMzgzMDYsMTg4NTUsMzgzODgsMzg0NTEsMTg5MTcsMjY1MjgsMTg5ODAsMzg3MjAsMTg5OTcsMzg4MzQsMzg4NTAsMjIxMDAsMTkxNzIsMjQ4MDgs''@;'; put 'put ''MzkwOTcsMTkyMjUsMzkxNTMsMjI1OTYsMzkxODIsMzkxOTMsMjA5MTYsMzkxOTYsMzkyMjMsMzkyMzQsMzkyNjEsMzkyNjYsMTkzMTIsMzkzNjUsMTkzNTcsMzk0ODQsMzk2OTUsMzEzNjMsMzk3ODUsMzk4MDksMzk5MDEsMzk5MjEsMzk5MjQsMTk1NjUsMzk5NjgsMTQxOTEsMTM4MTc4LDQw''@;'; put 'put ''MjY1LDM5OTk0LDQwNzAyLDIyMDk2LDQwMzM5LDQwMzgxLDQwMzg0LDQwNDQ0LDM4MTM0LDM2NzkwLDQwNTcxLDQwNjIwLDQwNjI1LDQwNjM3LDQwNjQ2LDM4MTA4LDQwNjc0LDQwNjg5LDQwNjk2LDMxNDMyLDQwNzcyLDEzMTIyMCwxMzE3NjcsMTMyZTMsMjY5MDYsMzgwODMsMjI5NTYsMTMy''@;'; put 'put ''MzExLDIyNTkyLDM4MDgxLDE0MjY1LDEzMjU2NSwxMzI2MjksMTMyNzI2LDEzNjg5MCwyMjM1OSwyOTA0MywxMzM4MjYsMTMzODM3LDEzNDA3OSwyMTYxMCwxOTQ2MTksMTM0MDkxLDIxNjYyLDEzNDEzOSwxMzQyMDMsMTM0MjI3LDEzNDI0NSwxMzQyNjgsMjQ4MDcsMTM0Mjg1LDIyMTM4LDEz''@;'; put 'put ''NDMyNSwxMzQzNjUsMTM0MzgxLDEzNDUxMSwxMzQ1NzgsMTM0NjAwLDI2OTY1LDM5OTgzLDM0NzI1LDEzNDY2MCwxMzQ2NzAsMTM0ODcxLDEzNTA1NiwxMzQ5NTcsMTM0NzcxLDIzNTg0LDEzNTEwMCwyNDA3NSwxMzUyNjAsMTM1MjQ3LDEzNTI4NiwyNjM5OCwxMzUyOTEsMTM1MzA0LDEzNTMx''@;'; put 'put ''OCwxMzg5NSwxMzUzNTksMTM1Mzc5LDEzNTQ3MSwxMzU0ODMsMjEzNDgsMzM5NjUsMTM1OTA3LDEzNjA1MywxMzU5OTAsMzU3MTMsMTM2NTY3LDEzNjcyOSwxMzcxNTUsMTM3MTU5LDIwMDg4LDI4ODU5LDEzNzI2MSwxMzc1NzgsMTM3NzczLDEzNzc5NywxMzgyODIsMTM4MzUyLDEzODQxMiwx''@;'; put 'put ''Mzg5NTIsMjUyODMsMTM4OTY1LDEzOTAyOSwyOTA4MCwyNjcwOSwxMzkzMzMsMjcxMTMsMTQwMjQsMTM5OTAwLDE0MDI0NywxNDAyODIsMTQxMDk4LDE0MTQyNSwxNDE2NDcsMzM1MzMsMTQxNjcxLDE0MTcxNSwxNDIwMzcsMzUyMzcsMTQyMDU2LDM2NzY4LDE0MjA5NCwzODg0MCwxNDIxNDMs''@;'; put 'put ''Mzg5ODMsMzk2MTMsMTQyNDEyLG51bGwsMTQyNDcyLDE0MjUxOSwxNTQ2MDAsMTQyNjAwLDE0MjYxMCwxNDI3NzUsMTQyNzQxLDE0MjkxNCwxNDMyMjAsMTQzMzA4LDE0MzQxMSwxNDM0NjIsMTQ0MTU5LDE0NDM1MCwyNDQ5NywyNjE4NCwyNjMwMywxNjI0MjUsMTQ0NzQzLDE0NDg4MywyOTE4''@;'; put 'put ''NSwxNDk5NDYsMzA2NzksMTQ0OTIyLDE0NTE3NCwzMjM5MSwxMzE5MTAsMjI3MDksMjYzODIsMjY5MDQsMTQ2MDg3LDE2MTM2NywxNTU2MTgsMTQ2OTYxLDE0NzEyOSwxNjEyNzgsMTM5NDE4LDE4NjQwLDE5MTI4LDE0NzczNywxNjY1NTQsMTQ4MjA2LDE0ODIzNywxNDc1MTUsMTQ4Mjc2LDE0''@;'; put 'put ''ODM3NCwxNTAwODUsMTMyNTU0LDIwOTQ2LDEzMjYyNSwyMjk0MywxMzg5MjAsMTUyOTQsMTQ2Njg3LDE0ODQ4NCwxNDg2OTQsMjI0MDgsMTQ5MTA4LDE0NzQ3LDE0OTI5NSwxNjUzNTIsMTcwNDQxLDE0MTc4LDEzOTcxNSwzNTY3OCwxNjY3MzQsMzkzODIsMTQ5NTIyLDE0OTc1NSwxNTAwMzcs''@;'; put 'put ''MjkxOTMsMTUwMjA4LDEzNDI2NCwyMjg4NSwxNTEyMDUsMTUxNDMwLDEzMjk4NSwzNjU3MCwxNTE1OTYsMjExMzUsMjIzMzUsMjkwNDEsMTUyMjE3LDE1MjYwMSwxNDcyNzQsMTUwMTgzLDIxOTQ4LDE1MjY0NiwxNTI2ODYsMTU4NTQ2LDM3MzMyLDEzNDI3LDE1Mjg5NSwxNjEzMzAsMTUyOTI2''@;'; put 'put ''LDE4MjAwLDE1MjkzMCwxNTI5MzQsMTUzNTQzLDE0OTgyMywxNTM2OTMsMjA1ODIsMTM1NjMsMTQ0MzMyLDI0Nzk4LDE1Mzg1OSwxODMwMCwxNjYyMTYsMTU0Mjg2LDE1NDUwNSwxNTQ2MzAsMTM4NjQwLDIyNDMzLDI5MDA5LDI4NTk4LDE1NTkwNiwxNjI4MzQsMzY5NTAsMTU2MDgyLDE1MTQ1''@;'; put 'put ''MCwzNTY4MiwxNTY2NzQsMTU2NzQ2LDIzODk5LDE1ODcxMSwzNjY2MiwxNTY4MDQsMTM3NTAwLDM1NTYyLDE1MDAwNiwxNTY4MDgsMTQ3NDM5LDE1Njk0NiwxOTM5MiwxNTcxMTksMTU3MzY1LDE0MTA4MywzNzk4OSwxNTM1NjksMjQ5ODEsMjMwNzksMTk0NzY1LDIwNDExLDIyMjAxLDE0ODc2''@;'; put 'put ''OSwxNTc0MzYsMjAwNzQsMTQ5ODEyLDM4NDg2LDI4MDQ3LDE1ODkwOSwxMzg0OCwzNTE5MSwxNTc1OTMsMTU3ODA2LDE1NjY4OSwxNTc3OTAsMjkxNTEsMTU3ODk1LDMxNTU0LDE2ODEyOCwxMzM2NDksMTU3OTkwLDM3MTI0LDE1ODAwOSwzMTMwMSw0MDQzMiwxNTgyMDIsMzk0NjIsMTU4MjUz''@;'; put 'put ''LDEzOTE5LDE1Njc3NywxMzExMDUsMzExMDcsMTU4MjYwLDE1ODU1NSwyMzg1MiwxNDQ2NjUsMzM3NDMsMTU4NjIxLDE4MTI4LDE1ODg4NCwzMDAxMSwzNDkxNywxNTkxNTAsMjI3MTAsMTQxMDgsMTQwNjg1LDE1OTgxOSwxNjAyMDUsMTU0NDQsMTYwMzg0LDE2MDM4OSwzNzUwNSwxMzk2NDIs''@;'; put 'put ''MTYwMzk1LDM3NjgwLDE2MDQ4NiwxNDk5NjgsMjc3MDUsMzgwNDcsMTYwODQ4LDEzNDkwNCwzNDg1NSwzNTA2MSwxNDE2MDYsMTY0OTc5LDEzNzEzNywyODM0NCwxNTAwNTgsMTM3MjQ4LDE0NzU2LDE0MDA5LDIzNTY4LDMxMjAzLDE3NzI3LDI2Mjk0LDE3MTE4MSwxNzAxNDgsMzUxMzksMTYx''@;'; put 'put ''NzQwLDE2MTg4MCwyMjIzMCwxNjYwNywxMzY3MTQsMTQ3NTMsMTQ1MTk5LDE2NDA3MiwxMzYxMzMsMjkxMDEsMzM2MzgsMTYyMjY5LDE2ODM2MCwyMzE0MywxOTYzOSwxNTk5MTksMTY2MzE1LDE2MjMwMSwxNjIzMTQsMTYyNTcxLDE2MzE3NCwxNDc4MzQsMzE1NTUsMzExMDIsMTYzODQ5LDI4''@;'; put 'put ''NTk3LDE3Mjc2NywyNzEzOSwxNjQ2MzIsMjE0MTAsMTU5MjM5LDM3ODIzLDI2Njc4LDM4NzQ5LDE2NDIwNywxNjM4NzUsMTU4MTMzLDEzNjE3MywxNDM5MTksMTYzOTEyLDIzOTQxLDE2Njk2MCwxNjM5NzEsMjIyOTMsMzg5NDcsMTY2MjE3LDIzOTc5LDE0OTg5NiwyNjA0NiwyNzA5MywyMTQ1''@;'; put 'put ''OCwxNTAxODEsMTQ3MzI5LDE1Mzc3LDI2NDIyLDE2Mzk4NCwxNjQwODQsMTY0MTQyLDEzOTE2OSwxNjQxNzUsMTY0MjMzLDE2NDI3MSwxNjQzNzgsMTY0NjE0LDE2NDY1NSwxNjQ3NDYsMTM3NzAsMTY0OTY4LDE2NTU0NiwxODY4MiwyNTU3NCwxNjYyMzAsMzA3MjgsMzc0NjEsMTY2MzI4LDE3''@;'; put 'put ''Mzk0LDE2NjM3NSwxNzM3NSwxNjYzNzYsMTY2NzI2LDE2Njg2OCwyMzAzMiwxNjY5MjEsMzY2MTksMTY3ODc3LDE2ODE3MiwzMTU2OSwxNjgyMDgsMTY4MjUyLDE1ODYzLDE2ODI4NiwxNTAyMTgsMzY4MTYsMjkzMjcsMjIxNTUsMTY5MTkxLDE2OTQ0OSwxNjkzOTIsMTY5NDAwLDE2OTc3OCwx''@;'; put 'put ''NzAxOTMsMTcwMzEzLDE3MDM0NiwxNzA0MzUsMTcwNTM2LDE3MDc2NiwxNzEzNTQsMTcxNDE5LDMyNDE1LDE3MTc2OCwxNzE4MTEsMTk2MjAsMzgyMTUsMTcyNjkxLDI5MDkwLDE3Mjc5OSwxOTg1NywzNjg4MiwxNzM1MTUsMTk4NjgsMTM0MzAwLDM2Nzk4LDIxOTUzLDM2Nzk0LDE0MDQ2NCwz''@;'; put 'put ''Njc5MywxNTAxNjMsMTc2NzMsMzIzODMsMjg1MDIsMjczMTMsMjAyMDIsMTM1NDAsMTY2NzAwLDE2MTk0OSwxNDEzOCwzNjQ4MCwxMzcyMDUsMTYzODc2LDE2Njc2NCwxNjY4MDksMTYyMzY2LDE1NzM1OSwxNTg1MSwxNjEzNjUsMTQ2NjE1LDE1MzE0MSwxNTM5NDIsMjAxMjIsMTU1MjY1LDE1''@;'; put 'put ''NjI0OCwyMjIwNywxMzQ3NjUsMzYzNjYsMjM0MDUsMTQ3MDgwLDE1MDY4NiwyNTU2NiwyNTI5NiwxMzcyMDYsMTM3MzM5LDI1OTA0LDIyMDYxLDE1NDY5OCwyMTUzMCwxNTIzMzcsMTU4MTQsMTcxNDE2LDE5NTgxLDIyMDUwLDIyMDQ2LDMyNTg1LDE1NTM1MiwyMjkwMSwxNDY3NTIsMzQ2NzIs''@;'; put 'put ''MTk5OTYsMTM1MTQ2LDEzNDQ3MywxNDUwODIsMzMwNDcsNDAyODYsMzYxMjAsMzAyNjcsNDAwMDUsMzAyODYsMzA2NDksMzc3MDEsMjE1NTQsMzMwOTYsMzM1MjcsMjIwNTMsMzMwNzQsMzM4MTYsMzI5NTcsMjE5OTQsMzEwNzQsMjIwODMsMjE1MjYsMTM0ODEzLDEzNzc0LDIyMDIxLDIyMDAx''@;'; put 'put ''LDI2MzUzLDE2NDU3OCwxMzg2OSwzMDAwNCwyMmUzLDIxOTQ2LDIxNjU1LDIxODc0LDEzNDIwOSwxMzQyOTQsMjQyNzIsMTUxODgwLDEzNDc3NCwxNDI0MzQsMTM0ODE4LDQwNjE5LDMyMDkwLDIxOTgyLDEzNTI4NSwyNTI0NSwzODc2NSwyMTY1MiwzNjA0NSwyOTE3NCwzNzIzOCwyNTU5Niwy''@;'; put 'put ''NTUyOSwyNTU5OCwyMTg2NSwxNDIxNDcsNDAwNTAsMTQzMDI3LDIwODkwLDEzNTM1LDEzNDU2NywyMDkwMywyMTU4MSwyMTc5MCwyMTc3OSwzMDMxMCwzNjM5NywxNTc4MzQsMzAxMjksMzI5NTAsMzQ4MjAsMzQ2OTQsMzUwMTUsMzMyMDYsMzM4MjAsMTM1MzYxLDE3NjQ0LDI5NDQ0LDE0OTI1''@;'; put 'put ''NCwyMzQ0MCwzMzU0NywxNTc4NDMsMjIxMzksMTQxMDQ0LDE2MzExOSwxNDc4NzUsMTYzMTg3LDE1OTQ0MCwxNjA0MzgsMzcyMzIsMTM1NjQxLDM3Mzg0LDE0NjY4NCwxNzM3MzcsMTM0ODI4LDEzNDkwNSwyOTI4NiwxMzg0MDIsMTgyNTQsMTUxNDkwLDE2MzgzMywxMzUxNDcsMTY2MzQsNDAw''@;'; put 'put ''MjksMjU4ODcsMTQyNzUyLDE4Njc1LDE0OTQ3MiwxNzEzODgsMTM1MTQ4LDEzNDY2NiwyNDY3NCwxNjExODcsMTM1MTQ5LG51bGwsMTU1NzIwLDEzNTU1OSwyOTA5MSwzMjM5OCw0MDI3MiwxOTk5NCwxOTk3MiwxMzY4NywyMzMwOSwyNzgyNiwyMTM1MSwxMzk5NiwxNDgxMiwyMTM3MywxMzk4''@;'; put 'put ''OSwxNDkwMTYsMjI2ODIsMTUwMzgyLDMzMzI1LDIxNTc5LDIyNDQyLDE1NDI2MSwxMzM0OTcsbnVsbCwxNDkzMCwxNDAzODksMjk1NTYsMTcxNjkyLDE5NzIxLDM5OTE3LDE0NjY4NiwxNzE4MjQsMTk1NDcsMTUxNDY1LDE2OTM3NCwxNzE5OTgsMzM4ODQsMTQ2ODcwLDE2MDQzNCwxNTc2MTks''@;'; put 'put ''MTQ1MTg0LDI1MzkwLDMyMDM3LDE0NzE5MSwxNDY5ODgsMTQ4OTAsMzY4NzIsMjExOTYsMTU5ODgsMTM5NDYsMTc4OTcsMTMyMjM4LDMwMjcyLDIzMjgwLDEzNDgzOCwzMDg0MiwxNjM2MzAsMjI2OTUsMTY1NzUsMjIxNDAsMzk4MTksMjM5MjQsMzAyOTIsMTczMTA4LDQwNTgxLDE5NjgxLDMw''@;'; put 'put ''MjAxLDE0MzMxLDI0ODU3LDE0MzU3OCwxNDg0NjYsbnVsbCwyMjEwOSwxMzU4NDksMjI0MzksMTQ5ODU5LDE3MTUyNiwyMTA0NCwxNTk5MTgsMTM3NDEsMjc3MjIsNDAzMTYsMzE4MzAsMzk3MzcsMjI0OTQsMTM3MDY4LDIzNjM1LDI1ODExLDE2OTE2OCwxNTY0NjksMTYwMTAwLDM0NDc3LDEz''@;'; put 'put ''NDQ0MCwxNTkwMTAsMTUwMjQyLDEzNDUxMyxudWxsLDIwOTkwLDEzOTAyMywyMzk1MCwzODY1OSwxMzg3MDUsNDA1NzcsMzY5NDAsMzE1MTksMzk2ODIsMjM3NjEsMzE2NTEsMjUxOTIsMjUzOTcsMzk2NzksMzE2OTUsMzk3MjIsMzE4NzAsMzk3MjYsMzE4MTAsMzE4NzgsMzk5NTcsMzE3NDAs''@;'; put 'put ''Mzk2ODksNDA3MjcsMzk5NjMsMTQ5ODIyLDQwNzk0LDIxODc1LDIzNDkxLDIwNDc3LDQwNjAwLDIwNDY2LDIxMDg4LDE1ODc4LDIxMjAxLDIyMzc1LDIwNTY2LDIyOTY3LDI0MDgyLDM4ODU2LDQwMzYzLDM2NzAwLDIxNjA5LDM4ODM2LDM5MjMyLDM4ODQyLDIxMjkyLDI0ODgwLDI2OTI0LDIx''@;'; put 'put ''NDY2LDM5OTQ2LDQwMTk0LDE5NTE1LDM4NDY1LDI3MDA4LDIwNjQ2LDMwMDIyLDEzNzA2OSwzOTM4NiwyMTEwNyxudWxsLDM3MjA5LDM4NTI5LDM3MjEyLG51bGwsMzcyMDEsMTY3NTc1LDI1NDcxLDE1OTAxMSwyNzMzOCwyMjAzMywzNzI2MiwzMDA3NCwyNTIyMSwxMzIwOTIsMjk1MTksMzE4''@;'; put 'put ''NTYsMTU0NjU3LDE0NjY4NSxudWxsLDE0OTc4NSwzMDQyMiwzOTgzNywyMDAxMCwxMzQzNTYsMzM3MjYsMzQ4ODIsbnVsbCwyMzYyNiwyNzA3MiwyMDcxNywyMjM5NCwyMTAyMywyNDA1MywyMDE3NCwyNzY5NywxMzE1NzAsMjAyODEsMjE2NjAsMjE3MjIsMjExNDYsMzYyMjYsMTM4MjIsMjQz''@;'; put 'put ''MzIsMTM4MTEsbnVsbCwyNzQ3NCwzNzI0NCw0MDg2OSwzOTgzMSwzODk1OCwzOTA5MiwzOTYxMCw0MDYxNiw0MDU4MCwyOTA1MCwzMTUwOCxudWxsLDI3NjQyLDM0ODQwLDMyNjMyLG51bGwsMjIwNDgsMTczNjQyLDM2NDcxLDQwNzg3LG51bGwsMzYzMDgsMzY0MzEsNDA0NzYsMzYzNTMsMjUy''@;'; put 'put ''MTgsMTY0NzMzLDM2MzkyLDM2NDY5LDMxNDQzLDE1MDEzNSwzMTI5NCwzMDkzNiwyNzg4MiwzNTQzMSwzMDIxNSwxNjY0OTAsNDA3NDIsMjc4NTQsMzQ3NzQsMzAxNDcsMTcyNzIyLDMwODAzLDE5NDYyNCwzNjEwOCwyOTQxMCwyOTU1MywzNTYyOSwyOTQ0MiwyOTkzNywzNjA3NSwxNTAyMDMs''@;'; put 'put ''MzQzNTEsMjQ1MDYsMzQ5NzYsMTc1OTEsbnVsbCwxMzcyNzUsMTU5MjM3LG51bGwsMzU0NTQsMTQwNTcxLG51bGwsMjQ4MjksMzAzMTEsMzk2MzksNDAyNjAsMzc3NDIsMzk4MjMsMzQ4MDUsbnVsbCwzNDgzMSwzNjA4NywyOTQ4NCwzODY4OSwzOTg1NiwxMzc4MiwyOTM2MiwxOTQ2MywzMTgy''@;'; put 'put ''NSwzOTI0MiwxNTU5OTMsMjQ5MjEsMTk0NjAsNDA1OTgsMjQ5NTcsbnVsbCwyMjM2NywyNDk0MywyNTI1NCwyNTE0NSwyNTI5NCwxNDk0MCwyNTA1OCwyMTQxOCwxNDQzNzMsMjU0NDQsMjY2MjYsMTM3NzgsMjM4OTUsMTY2ODUwLDM2ODI2LDE2NzQ4MSxudWxsLDIwNjk3LDEzODU2NiwzMDk4''@;'; put 'put ''MiwyMTI5OCwzODQ1NiwxMzQ5NzEsMTY0ODUsbnVsbCwzMDcxOCxudWxsLDMxOTM4LDE1NTQxOCwzMTk2MiwzMTI3NywzMjg3MCwzMjg2NywzMjA3NywyOTk1NywyOTkzOCwzNTIyMCwzMzMwNiwyNjM4MCwzMjg2NiwxNjA5MDIsMzI4NTksMjk5MzYsMzMwMjcsMzA1MDAsMzUyMDksMTU3NjQ0''@;'; put 'put ''LDMwMDM1LDE1OTQ0MSwzNDcyOSwzNDc2NiwzMzIyNCwzNDcwMCwzNTQwMSwzNjAxMywzNTY1MSwzMDUwNywyOTk0NCwzNDAxMCwxMzg3NywyNzA1OCwzNjI2MixudWxsLDM1MjQxLDI5ODAwLDI4MDg5LDM0NzUzLDE0NzQ3MywyOTkyNywxNTgzNSwyOTA0NiwyNDc0MCwyNDk4OCwxNTU2OSwy''@;'; put 'put ''OTAyNiwyNDY5NSxudWxsLDMyNjI1LDE2NjcwMSwyOTI2NCwyNDgwOSwxOTMyNiwyMTAyNCwxNTM4NCwxNDY2MzEsMTU1MzUxLDE2MTM2NiwxNTI4ODEsMTM3NTQwLDEzNTkzNCwxNzAyNDMsMTU5MTk2LDE1OTkxNywyMzc0NSwxNTYwNzcsMTY2NDE1LDE0NTAxNSwxMzEzMTAsMTU3NzY2LDE1''@;'; put 'put ''MTMxMCwxNzc2MiwyMzMyNywxNTY0OTIsNDA3ODQsNDA2MTQsMTU2MjY3LDEyMjg4LDY1MjkyLDEyMjg5LDEyMjkwLDY1Mjk0LDgyMzEsNjUzMDcsNjUzMDYsNjUzMTEsNjUyODEsNjUwNzIsODIzMCw4MjI5LDY1MTA0LDY1MTA1LDY1MTA2LDE4Myw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2''@;'; put 'put ''NTM3Miw4MjExLDY1MDczLDgyMTIsNjUwNzUsOTU4OCw2NTA3Niw2NTEwMyw2NTI4OCw2NTI4OSw2NTA3Nyw2NTA3OCw2NTM3MSw2NTM3Myw2NTA3OSw2NTA4MCwxMjMwOCwxMjMwOSw2NTA4MSw2NTA4MiwxMjMwNCwxMjMwNSw2NTA4Myw2NTA4NCwxMjI5OCwxMjI5OSw2NTA4NSw2NTA4Niwx''@;'; put 'put ''MjI5NiwxMjI5Nyw2NTA4Nyw2NTA4OCwxMjMwMCwxMjMwMSw2NTA4OSw2NTA5MCwxMjMwMiwxMjMwMyw2NTA5MSw2NTA5Miw2NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTExNyw2NTExOCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzE3LDEyMzE4LDgyNDUsODI0Miw2NTI4Myw2NTI4Niw2NTI5''@;'; put 'put ''MCw4MjUxLDE2NywxMjI5MSw5Njc1LDk2NzksOTY1MSw5NjUwLDk2NzgsOTczNCw5NzMzLDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY2MSw5NjYwLDEyOTYzLDg0NTMsMTc1LDY1NTA3LDY1MzQzLDcxNyw2NTA5Nyw2NTA5OCw2NTEwMSw2NTEwMiw2NTA5OSw2NTEwMCw2NTExOSw2NTEyMCw2NTEy''@;'; put 'put ''MSw2NTI5MSw2NTI5MywyMTUsMjQ3LDE3Nyw4NzMwLDY1MzA4LDY1MzEwLDY1MzA5LDg4MDYsODgwNyw4ODAwLDg3MzQsODc4Niw4ODAxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1Mzc0LDg3NDUsODc0Niw4ODY5LDg3MzYsODczNSw4ODk1LDEzMjY2LDEzMjY1LDg3NDcsODc1''@;'; put 'put ''MCw4NzU3LDg3NTYsOTc5Miw5Nzk0LDg4NTMsODg1Nyw4NTkzLDg1OTUsODU5Miw4NTk0LDg1OTgsODU5OSw4NjAxLDg2MDAsODc0MSw4NzM5LDY1Mjk1LDY1MzQwLDg3MjUsNjUxMjgsNjUyODQsNjU1MDksMTIzMDYsNjU1MDQsNjU1MDUsNjUyODUsNjUzMTIsODQ1MSw4NDU3LDY1MTI5LDY1''@;'; put 'put ''MTMwLDY1MTMxLDEzMjY5LDEzMjEyLDEzMjEzLDEzMjE0LDEzMjYyLDEzMjE3LDEzMTk4LDEzMTk5LDEzMjUyLDE3NiwyMDgyNSwyMDgyNywyMDgzMCwyMDgyOSwyMDgzMywyMDgzNSwyMTk5MSwyOTkyOSwzMTk1MCw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYx''@;'; put 'put ''NSw5NjE0LDk2MTMsOTYxMiw5NjExLDk2MTAsOTYwOSw5NTMyLDk1MjQsOTUxNiw5NTA4LDk1MDAsOTYyMCw5NDcyLDk0NzQsOTYyMSw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1ODEsOTU4Miw5NTg0LDk1ODMsOTU1Miw5NTY2LDk1NzgsOTU2OSw5Njk4LDk2OTksOTcwMSw5NzAwLDk1ODUsOTU4''@;'; put 'put ''Niw5NTg3LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgs''@;'; put 'put ''MTIzMjksMjEzMTMsMjEzMTYsMjEzMTcsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUz''@;'; put 'put ''MzYsNjUzMzcsNjUzMzgsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjks''@;'; put 'put ''NjUzNzAsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYw''@;'; put 'put ''LDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAs''@;'; put 'put ''MTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNzI5LDcxMyw3MTQsNzExLDcxNSw5MjE2LDkyMTcsOTIxOCw5MjE5LDkyMjAsOTIyMSw5MjIyLDkyMjMsOTIyNCw5MjI1LDkyMjYs''@;'; put 'put ''OTIyNyw5MjI4LDkyMjksOTIzMCw5MjMxLDkyMzIsOTIzMyw5MjM0LDkyMzUsOTIzNiw5MjM3LDkyMzgsOTIzOSw5MjQwLDkyNDEsOTI0Miw5MjQzLDkyNDQsOTI0NSw5MjQ2LDkyNDcsOTI0OSw4MzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTk2OCwyMDA1NywxOTk2OSwxOTk3MSwyMDAzNSwyMDA2MSwyMDEwMiwyMDEwOCwyMDE1NCwyMDc5OSwyMDgzNywyMDg0''@;'; put 'put ''MywyMDk2MCwyMDk5MiwyMDk5MywyMTE0NywyMTI2OSwyMTMxMywyMTM0MCwyMTQ0OCwxOTk3NywxOTk3OSwxOTk3NiwxOTk3OCwyMDAxMSwyMDAyNCwyMDk2MSwyMDAzNywyMDA0MCwyMDA2MywyMDA2MiwyMDExMCwyMDEyOSwyMDgwMCwyMDk5NSwyMTI0MiwyMTMxNSwyMTQ0OSwyMTQ3NSwy''@;'; put 'put ''MjMwMywyMjc2MywyMjgwNSwyMjgyMywyMjg5OSwyMzM3NiwyMzM3NywyMzM3OSwyMzU0NCwyMzU2NywyMzU4NiwyMzYwOCwyMzY2NSwyNDAyOSwyNDAzNywyNDA0OSwyNDA1MCwyNDA1MSwyNDA2MiwyNDE3OCwyNDMxOCwyNDMzMSwyNDMzOSwyNTE2NSwxOTk4NSwxOTk4NCwxOTk4MSwyMDAx''@;'; put 'put ''MywyMDAxNiwyMDAyNSwyMDA0MywyMzYwOSwyMDEwNCwyMDExMywyMDExNywyMDExNCwyMDExNiwyMDEzMCwyMDE2MSwyMDE2MCwyMDE2MywyMDE2NiwyMDE2NywyMDE3MywyMDE3MCwyMDE3MSwyMDE2NCwyMDgwMywyMDgwMSwyMDgzOSwyMDg0NSwyMDg0NiwyMDg0NCwyMDg4NywyMDk4Miwy''@;'; put 'put ''MDk5OCwyMDk5OSwyMWUzLDIxMjQzLDIxMjQ2LDIxMjQ3LDIxMjcwLDIxMzA1LDIxMzIwLDIxMzE5LDIxMzE3LDIxMzQyLDIxMzgwLDIxNDUxLDIxNDUwLDIxNDUzLDIyNzY0LDIyODI1LDIyODI3LDIyODI2LDIyODI5LDIzMzgwLDIzNTY5LDIzNTg4LDIzNjEwLDIzNjYzLDI0MDUyLDI0MTg3''@;'; put 'put ''LDI0MzE5LDI0MzQwLDI0MzQxLDI0NTE1LDI1MDk2LDI1MTQyLDI1MTYzLDI1MTY2LDI1OTAzLDI1OTkxLDI2MDA3LDI2MDIwLDI2MDQxLDI2MDg1LDI2MzUyLDI2Mzc2LDI2NDA4LDI3NDI0LDI3NDkwLDI3NTEzLDI3NTk1LDI3NjA0LDI3NjExLDI3NjYzLDI3NzAwLDI4Nzc5LDI5MjI2LDI5''@;'; put 'put ''MjM4LDI5MjQzLDI5MjU1LDI5MjczLDI5Mjc1LDI5MzU2LDI5NTc5LDE5OTkzLDE5OTkwLDE5OTg5LDE5OTg4LDE5OTkyLDIwMDI3LDIwMDQ1LDIwMDQ3LDIwMDQ2LDIwMTk3LDIwMTg0LDIwMTgwLDIwMTgxLDIwMTgyLDIwMTgzLDIwMTk1LDIwMTk2LDIwMTg1LDIwMTkwLDIwODA1LDIwODA0''@;'; put 'put ''LDIwODczLDIwODc0LDIwOTA4LDIwOTg1LDIwOTg2LDIwOTg0LDIxMDAyLDIxMTUyLDIxMTUxLDIxMjUzLDIxMjU0LDIxMjcxLDIxMjc3LDIwMTkxLDIxMzIyLDIxMzIxLDIxMzQ1LDIxMzQ0LDIxMzU5LDIxMzU4LDIxNDM1LDIxNDg3LDIxNDc2LDIxNDkxLDIxNDg0LDIxNDg2LDIxNDgxLDIx''@;'; put 'put ''NDgwLDIxNTAwLDIxNDk2LDIxNDkzLDIxNDgzLDIxNDc4LDIxNDgyLDIxNDkwLDIxNDg5LDIxNDg4LDIxNDc3LDIxNDg1LDIxNDk5LDIyMjM1LDIyMjM0LDIyODA2LDIyODMwLDIyODMzLDIyOTAwLDIyOTAyLDIzMzgxLDIzNDI3LDIzNjEyLDI0MDQwLDI0MDM5LDI0MDM4LDI0MDY2LDI0MDY3''@;'; put 'put ''LDI0MTc5LDI0MTg4LDI0MzIxLDI0MzQ0LDI0MzQzLDI0NTE3LDI1MDk4LDI1MTcxLDI1MTcyLDI1MTcwLDI1MTY5LDI2MDIxLDI2MDg2LDI2NDE0LDI2NDEyLDI2NDEwLDI2NDExLDI2NDEzLDI3NDkxLDI3NTk3LDI3NjY1LDI3NjY0LDI3NzA0LDI3NzEzLDI3NzEyLDI3NzEwLDI5MzU5LDI5''@;'; put 'put ''NTcyLDI5NTc3LDI5OTE2LDI5OTI2LDI5OTc2LDI5OTgzLDI5OTkyLDI5OTkzLDNlNCwzMDAwMSwzMDAwMiwzMDAwMywzMDA5MSwzMDMzMywzMDM4MiwzMDM5OSwzMDQ0NiwzMDY4MywzMDY5MCwzMDcwNywzMTAzNCwzMTE2NiwzMTM0OCwzMTQzNSwxOTk5OCwxOTk5OSwyMDA1MCwyMDA1MSwy''@;'; put 'put ''MDA3MywyMDEyMSwyMDEzMiwyMDEzNCwyMDEzMywyMDIyMywyMDIzMywyMDI0OSwyMDIzNCwyMDI0NSwyMDIzNywyMDI0MCwyMDI0MSwyMDIzOSwyMDIxMCwyMDIxNCwyMDIxOSwyMDIwOCwyMDIxMSwyMDIyMSwyMDIyNSwyMDIzNSwyMDgwOSwyMDgwNywyMDgwNiwyMDgwOCwyMDg0MCwyMDg0''@;'; put 'put ''OSwyMDg3NywyMDkxMiwyMTAxNSwyMTAwOSwyMTAxMCwyMTAwNiwyMTAxNCwyMTE1NSwyMTI1NiwyMTI4MSwyMTI4MCwyMTM2MCwyMTM2MSwyMTUxMywyMTUxOSwyMTUxNiwyMTUxNCwyMTUyMCwyMTUwNSwyMTUxNSwyMTUwOCwyMTUyMSwyMTUxNywyMTUxMiwyMTUwNywyMTUxOCwyMTUxMCwy''@;'; put 'put ''MTUyMiwyMjI0MCwyMjIzOCwyMjIzNywyMjMyMywyMjMyMCwyMjMxMiwyMjMxNywyMjMxNiwyMjMxOSwyMjMxMywyMjgwOSwyMjgxMCwyMjgzOSwyMjg0MCwyMjkxNiwyMjkwNCwyMjkxNSwyMjkwOSwyMjkwNSwyMjkxNCwyMjkxMywyMzM4MywyMzM4NCwyMzQzMSwyMzQzMiwyMzQyOSwyMzQz''@;'; put 'put ''MywyMzU0NiwyMzU3NCwyMzY3MywyNDAzMCwyNDA3MCwyNDE4MiwyNDE4MCwyNDMzNSwyNDM0NywyNDUzNywyNDUzNCwyNTEwMiwyNTEwMCwyNTEwMSwyNTEwNCwyNTE4NywyNTE3OSwyNTE3NiwyNTkxMCwyNjA4OSwyNjA4OCwyNjA5MiwyNjA5MywyNjM1NCwyNjM1NSwyNjM3NywyNjQyOSwy''@;'; put 'put ''NjQyMCwyNjQxNywyNjQyMSwyNzQyNSwyNzQ5MiwyNzUxNSwyNzY3MCwyNzc0MSwyNzczNSwyNzczNywyNzc0MywyNzc0NCwyNzcyOCwyNzczMywyNzc0NSwyNzczOSwyNzcyNSwyNzcyNiwyODc4NCwyOTI3OSwyOTI3NywzMDMzNCwzMTQ4MSwzMTg1OSwzMTk5MiwzMjU2NiwzMjY1MCwzMjcw''@;'; put 'put ''MSwzMjc2OSwzMjc3MSwzMjc4MCwzMjc4NiwzMjgxOSwzMjg5NSwzMjkwNSwzMjkwNywzMjkwOCwzMzI1MSwzMzI1OCwzMzI2NywzMzI3NiwzMzI5MiwzMzMwNywzMzMxMSwzMzM5MCwzMzM5NCwzMzQwNiwzNDQxMSwzNDg4MCwzNDg5MiwzNDkxNSwzNTE5OSwzODQzMywyMDAxOCwyMDEzNiwy''@;'; put 'put ''MDMwMSwyMDMwMywyMDI5NSwyMDMxMSwyMDMxOCwyMDI3NiwyMDMxNSwyMDMwOSwyMDI3MiwyMDMwNCwyMDMwNSwyMDI4NSwyMDI4MiwyMDI4MCwyMDI5MSwyMDMwOCwyMDI4NCwyMDI5NCwyMDMyMywyMDMxNiwyMDMyMCwyMDI3MSwyMDMwMiwyMDI3OCwyMDMxMywyMDMxNywyMDI5NiwyMDMx''@;'; put 'put ''NCwyMDgxMiwyMDgxMSwyMDgxMywyMDg1MywyMDkxOCwyMDkxOSwyMTAyOSwyMTAyOCwyMTAzMywyMTAzNCwyMTAzMiwyMTE2MywyMTE2MSwyMTE2MiwyMTE2NCwyMTI4MywyMTM2MywyMTM2NSwyMTUzMywyMTU0OSwyMTUzNCwyMTU2NiwyMTU0MiwyMTU4MiwyMTU0MywyMTU3NCwyMTU3MSwy''@;'; put 'put ''MTU1NSwyMTU3NiwyMTU3MCwyMTUzMSwyMTU0NSwyMTU3OCwyMTU2MSwyMTU2MywyMTU2MCwyMTU1MCwyMTU1NywyMTU1OCwyMTUzNiwyMTU2NCwyMTU2OCwyMTU1MywyMTU0NywyMTUzNSwyMTU0OCwyMjI1MCwyMjI1NiwyMjI0NCwyMjI1MSwyMjM0NiwyMjM1MywyMjMzNiwyMjM0OSwyMjM0''@;'; put 'put ''MywyMjM1MCwyMjMzNCwyMjM1MiwyMjM1MSwyMjMzMSwyMjc2NywyMjg0NiwyMjk0MSwyMjkzMCwyMjk1MiwyMjk0MiwyMjk0NywyMjkzNywyMjkzNCwyMjkyNSwyMjk0OCwyMjkzMSwyMjkyMiwyMjk0OSwyMzM4OSwyMzM4OCwyMzM4NiwyMzM4NywyMzQzNiwyMzQzNSwyMzQzOSwyMzU5Niwy''@;'; put 'put ''MzYxNiwyMzYxNywyMzYxNSwyMzYxNCwyMzY5NiwyMzY5NywyMzcwMCwyMzY5MiwyNDA0MywyNDA3NiwyNDIwNywyNDE5OSwyNDIwMiwyNDMxMSwyNDMyNCwyNDM1MSwyNDQyMCwyNDQxOCwyNDQzOSwyNDQ0MSwyNDUzNiwyNDUyNCwyNDUzNSwyNDUyNSwyNDU2MSwyNDU1NSwyNDU2OCwyNDU1''@;'; put 'put ''NCwyNTEwNiwyNTEwNSwyNTIyMCwyNTIzOSwyNTIzOCwyNTIxNiwyNTIwNiwyNTIyNSwyNTE5NywyNTIyNiwyNTIxMiwyNTIxNCwyNTIwOSwyNTIwMywyNTIzNCwyNTE5OSwyNTI0MCwyNTE5OCwyNTIzNywyNTIzNSwyNTIzMywyNTIyMiwyNTkxMywyNTkxNSwyNTkxMiwyNjA5NywyNjM1Niwy''@;'; put 'put ''NjQ2MywyNjQ0NiwyNjQ0NywyNjQ0OCwyNjQ0OSwyNjQ2MCwyNjQ1NCwyNjQ2MiwyNjQ0MSwyNjQzOCwyNjQ2NCwyNjQ1MSwyNjQ1NSwyNzQ5MywyNzU5OSwyNzcxNCwyNzc0MiwyNzgwMSwyNzc3NywyNzc4NCwyNzc4NSwyNzc4MSwyNzgwMywyNzc1NCwyNzc3MCwyNzc5MiwyNzc2MCwyNzc4''@;'; put 'put ''OCwyNzc1MiwyNzc5OCwyNzc5NCwyNzc3MywyNzc3OSwyNzc2MiwyNzc3NCwyNzc2NCwyNzc4MiwyNzc2NiwyNzc4OSwyNzc5NiwyNzgwMCwyNzc3OCwyODc5MCwyODc5NiwyODc5NywyODc5MiwyOTI4MiwyOTI4MSwyOTI4MCwyOTM4MCwyOTM3OCwyOTU5MCwyOTk5NiwyOTk5NSwzMDAwNywz''@;'; put 'put ''MDAwOCwzMDMzOCwzMDQ0NywzMDY5MSwzMTE2OSwzMTE2OCwzMTE2NywzMTM1MCwzMTk5NSwzMjU5NywzMjkxOCwzMjkxNSwzMjkyNSwzMjkyMCwzMjkyMywzMjkyMiwzMjk0NiwzMzM5MSwzMzQyNiwzMzQxOSwzMzQyMSwzNTIxMSwzNTI4MiwzNTMyOCwzNTg5NSwzNTkxMCwzNTkyNSwzNTk5''@;'; put 'put ''NywzNjE5NiwzNjIwOCwzNjI3NSwzNjUyMywzNjU1NCwzNjc2MywzNjc4NCwzNjgwMiwzNjgwNiwzNjgwNSwzNjgwNCwyNDAzMywzNzAwOSwzNzAyNiwzNzAzNCwzNzAzMCwzNzAyNywzNzE5MywzNzMxOCwzNzMyNCwzODQ1MCwzODQ0NiwzODQ0OSwzODQ0MiwzODQ0NCwyMDAwNiwyMDA1NCwy''@;'; put 'put ''MDA4MywyMDEwNywyMDEyMywyMDEyNiwyMDEzOSwyMDE0MCwyMDMzNSwyMDM4MSwyMDM2NSwyMDMzOSwyMDM1MSwyMDMzMiwyMDM3OSwyMDM2MywyMDM1OCwyMDM1NSwyMDMzNiwyMDM0MSwyMDM2MCwyMDMyOSwyMDM0NywyMDM3NCwyMDM1MCwyMDM2NywyMDM2OSwyMDM0NiwyMDgyMCwyMDgx''@;'; put 'put ''OCwyMDgyMSwyMDg0MSwyMDg1NSwyMDg1NCwyMDg1NiwyMDkyNSwyMDk4OSwyMTA1MSwyMTA0OCwyMTA0NywyMTA1MCwyMTA0MCwyMTAzOCwyMTA0NiwyMTA1NywyMTE4MiwyMTE3OSwyMTMzMCwyMTMzMiwyMTMzMSwyMTMyOSwyMTM1MCwyMTM2NywyMTM2OCwyMTM2OSwyMTQ2MiwyMTQ2MCwy''@;'; put 'put ''MTQ2MywyMTYxOSwyMTYyMSwyMTY1NCwyMTYyNCwyMTY1MywyMTYzMiwyMTYyNywyMTYyMywyMTYzNiwyMTY1MCwyMTYzOCwyMTYyOCwyMTY0OCwyMTYxNywyMTYyMiwyMTY0NCwyMTY1OCwyMTYwMiwyMTYwOCwyMTY0MywyMTYyOSwyMTY0NiwyMjI2NiwyMjQwMywyMjM5MSwyMjM3OCwyMjM3''@;'; put 'put ''NywyMjM2OSwyMjM3NCwyMjM3MiwyMjM5NiwyMjgxMiwyMjg1NywyMjg1NSwyMjg1NiwyMjg1MiwyMjg2OCwyMjk3NCwyMjk3MSwyMjk5NiwyMjk2OSwyMjk1OCwyMjk5MywyMjk4MiwyMjk5MiwyMjk4OSwyMjk4NywyMjk5NSwyMjk4NiwyMjk1OSwyMjk2MywyMjk5NCwyMjk4MSwyMzM5MSwy''@;'; put 'put ''MzM5NiwyMzM5NSwyMzQ0NywyMzQ1MCwyMzQ0OCwyMzQ1MiwyMzQ0OSwyMzQ1MSwyMzU3OCwyMzYyNCwyMzYyMSwyMzYyMiwyMzczNSwyMzcxMywyMzczNiwyMzcyMSwyMzcyMywyMzcyOSwyMzczMSwyNDA4OCwyNDA5MCwyNDA4NiwyNDA4NSwyNDA5MSwyNDA4MSwyNDE4NCwyNDIxOCwyNDIx''@;'; put 'put ''NSwyNDIyMCwyNDIxMywyNDIxNCwyNDMxMCwyNDM1OCwyNDM1OSwyNDM2MSwyNDQ0OCwyNDQ0OSwyNDQ0NywyNDQ0NCwyNDU0MSwyNDU0NCwyNDU3MywyNDU2NSwyNDU3NSwyNDU5MSwyNDU5NiwyNDYyMywyNDYyOSwyNDU5OCwyNDYxOCwyNDU5NywyNDYwOSwyNDYxNSwyNDYxNywyNDYxOSwy''@;'; put 'put ''NDYwMywyNTExMCwyNTEwOSwyNTE1MSwyNTE1MCwyNTE1MiwyNTIxNSwyNTI4OSwyNTI5MiwyNTI4NCwyNTI3OSwyNTI4MiwyNTI3MywyNTI5OCwyNTMwNywyNTI1OSwyNTI5OSwyNTMwMCwyNTI5MSwyNTI4OCwyNTI1NiwyNTI3NywyNTI3NiwyNTI5NiwyNTMwNSwyNTI4NywyNTI5MywyNTI2''@;'; put 'put ''OSwyNTMwNiwyNTI2NSwyNTMwNCwyNTMwMiwyNTMwMywyNTI4NiwyNTI2MCwyNTI5NCwyNTkxOCwyNjAyMywyNjA0NCwyNjEwNiwyNjEzMiwyNjEzMSwyNjEyNCwyNjExOCwyNjExNCwyNjEyNiwyNjExMiwyNjEyNywyNjEzMywyNjEyMiwyNjExOSwyNjM4MSwyNjM3OSwyNjQ3NywyNjUwNywy''@;'; put 'put ''NjUxNywyNjQ4MSwyNjUyNCwyNjQ4MywyNjQ4NywyNjUwMywyNjUyNSwyNjUxOSwyNjQ3OSwyNjQ4MCwyNjQ5NSwyNjUwNSwyNjQ5NCwyNjUxMiwyNjQ4NSwyNjUyMiwyNjUxNSwyNjQ5MiwyNjQ3NCwyNjQ4MiwyNzQyNywyNzQ5NCwyNzQ5NSwyNzUxOSwyNzY2NywyNzY3NSwyNzg3NSwyNzg4''@;'; put 'put ''MCwyNzg5MSwyNzgyNSwyNzg1MiwyNzg3NywyNzgyNywyNzgzNywyNzgzOCwyNzgzNiwyNzg3NCwyNzgxOSwyNzg2MSwyNzg1OSwyNzgzMiwyNzg0NCwyNzgzMywyNzg0MSwyNzgyMiwyNzg2MywyNzg0NSwyNzg4OSwyNzgzOSwyNzgzNSwyNzg3MywyNzg2NywyNzg1MCwyNzgyMCwyNzg4Nywy''@;'; put 'put ''Nzg2OCwyNzg2MiwyNzg3MiwyODgyMSwyODgxNCwyODgxOCwyODgxMCwyODgyNSwyOTIyOCwyOTIyOSwyOTI0MCwyOTI1NiwyOTI4NywyOTI4OSwyOTM3NiwyOTM5MCwyOTQwMSwyOTM5OSwyOTM5MiwyOTYwOSwyOTYwOCwyOTU5OSwyOTYxMSwyOTYwNSwzMDAxMywzMDEwOSwzMDEwNSwzMDEw''@;'; put 'put ''NiwzMDM0MCwzMDQwMiwzMDQ1MCwzMDQ1MiwzMDY5MywzMDcxNywzMTAzOCwzMTA0MCwzMTA0MSwzMTE3NywzMTE3NiwzMTM1NCwzMTM1MywzMTQ4MiwzMTk5OCwzMjU5NiwzMjY1MiwzMjY1MSwzMjc3MywzMjk1NCwzMjkzMywzMjkzMCwzMjk0NSwzMjkyOSwzMjkzOSwzMjkzNywzMjk0OCwz''@;'; put 'put ''MjkzOCwzMjk0MywzMzI1MywzMzI3OCwzMzI5MywzMzQ1OSwzMzQzNywzMzQzMywzMzQ1MywzMzQ2OSwzMzQzOSwzMzQ2NSwzMzQ1NywzMzQ1MiwzMzQ0NSwzMzQ1NSwzMzQ2NCwzMzQ0MywzMzQ1NiwzMzQ3MCwzMzQ2MywzNDM4MiwzNDQxNywyMTAyMSwzNDkyMCwzNjU1NSwzNjgxNCwzNjgy''@;'; put 'put ''MCwzNjgxNywzNzA0NSwzNzA0OCwzNzA0MSwzNzA0NiwzNzMxOSwzNzMyOSwzODI2MywzODI3MiwzODQyOCwzODQ2NCwzODQ2MywzODQ1OSwzODQ2OCwzODQ2NiwzODU4NSwzODYzMiwzODczOCwzODc1MCwyMDEyNywyMDE0MSwyMDE0MiwyMDQ0OSwyMDQwNSwyMDM5OSwyMDQxNSwyMDQ0OCwy''@;'; put 'put ''MDQzMywyMDQzMSwyMDQ0NSwyMDQxOSwyMDQwNiwyMDQ0MCwyMDQ0NywyMDQyNiwyMDQzOSwyMDM5OCwyMDQzMiwyMDQyMCwyMDQxOCwyMDQ0MiwyMDQzMCwyMDQ0NiwyMDQwNywyMDgyMywyMDg4MiwyMDg4MSwyMDg5NiwyMTA3MCwyMTA1OSwyMTA2NiwyMTA2OSwyMTA2OCwyMTA2NywyMTA2''@;'; put 'put ''MywyMTE5MSwyMTE5MywyMTE4NywyMTE4NSwyMTI2MSwyMTMzNSwyMTM3MSwyMTQwMiwyMTQ2NywyMTY3NiwyMTY5NiwyMTY3MiwyMTcxMCwyMTcwNSwyMTY4OCwyMTY3MCwyMTY4MywyMTcwMywyMTY5OCwyMTY5MywyMTY3NCwyMTY5NywyMTcwMCwyMTcwNCwyMTY3OSwyMTY3NSwyMTY4MSwy''@;'; put 'put ''MTY5MSwyMTY3MywyMTY3MSwyMTY5NSwyMjI3MSwyMjQwMiwyMjQxMSwyMjQzMiwyMjQzNSwyMjQzNCwyMjQ3OCwyMjQ0NiwyMjQxOSwyMjg2OSwyMjg2NSwyMjg2MywyMjg2MiwyMjg2NCwyMzAwNCwyM2UzLDIzMDM5LDIzMDExLDIzMDE2LDIzMDQzLDIzMDEzLDIzMDE4LDIzMDAyLDIzMDE0''@;'; put 'put ''LDIzMDQxLDIzMDM1LDIzNDAxLDIzNDU5LDIzNDYyLDIzNDYwLDIzNDU4LDIzNDYxLDIzNTUzLDIzNjMwLDIzNjMxLDIzNjI5LDIzNjI3LDIzNzY5LDIzNzYyLDI0MDU1LDI0MDkzLDI0MTAxLDI0MDk1LDI0MTg5LDI0MjI0LDI0MjMwLDI0MzE0LDI0MzI4LDI0MzY1LDI0NDIxLDI0NDU2LDI0''@;'; put 'put ''NDUzLDI0NDU4LDI0NDU5LDI0NDU1LDI0NDYwLDI0NDU3LDI0NTk0LDI0NjA1LDI0NjA4LDI0NjEzLDI0NTkwLDI0NjE2LDI0NjUzLDI0Njg4LDI0NjgwLDI0Njc0LDI0NjQ2LDI0NjQzLDI0Njg0LDI0NjgzLDI0NjgyLDI0Njc2LDI1MTUzLDI1MzA4LDI1MzY2LDI1MzUzLDI1MzQwLDI1MzI1''@;'; put 'put ''LDI1MzQ1LDI1MzI2LDI1MzQxLDI1MzUxLDI1MzI5LDI1MzM1LDI1MzI3LDI1MzI0LDI1MzQyLDI1MzMyLDI1MzYxLDI1MzQ2LDI1OTE5LDI1OTI1LDI2MDI3LDI2MDQ1LDI2MDgyLDI2MTQ5LDI2MTU3LDI2MTQ0LDI2MTUxLDI2MTU5LDI2MTQzLDI2MTUyLDI2MTYxLDI2MTQ4LDI2MzU5LDI2''@;'; put 'put ''NjIzLDI2NTc5LDI2NjA5LDI2NTgwLDI2NTc2LDI2NjA0LDI2NTUwLDI2NTQzLDI2NjEzLDI2NjAxLDI2NjA3LDI2NTY0LDI2NTc3LDI2NTQ4LDI2NTg2LDI2NTk3LDI2NTUyLDI2NTc1LDI2NTkwLDI2NjExLDI2NTQ0LDI2NTg1LDI2NTk0LDI2NTg5LDI2NTc4LDI3NDk4LDI3NTIzLDI3NTI2''@;'; put 'put ''LDI3NTczLDI3NjAyLDI3NjA3LDI3Njc5LDI3ODQ5LDI3OTE1LDI3OTU0LDI3OTQ2LDI3OTY5LDI3OTQxLDI3OTE2LDI3OTUzLDI3OTM0LDI3OTI3LDI3OTYzLDI3OTY1LDI3OTY2LDI3OTU4LDI3OTMxLDI3ODkzLDI3OTYxLDI3OTQzLDI3OTYwLDI3OTQ1LDI3OTUwLDI3OTU3LDI3OTE4LDI3''@;'; put 'put ''OTQ3LDI4ODQzLDI4ODU4LDI4ODUxLDI4ODQ0LDI4ODQ3LDI4ODQ1LDI4ODU2LDI4ODQ2LDI4ODM2LDI5MjMyLDI5Mjk4LDI5Mjk1LDI5MzAwLDI5NDE3LDI5NDA4LDI5NDA5LDI5NjIzLDI5NjQyLDI5NjI3LDI5NjE4LDI5NjQ1LDI5NjMyLDI5NjE5LDI5OTc4LDI5OTk3LDMwMDMxLDMwMDI4''@;'; put 'put ''LDMwMDMwLDMwMDI3LDMwMTIzLDMwMTE2LDMwMTE3LDMwMTE0LDMwMTE1LDMwMzI4LDMwMzQyLDMwMzQzLDMwMzQ0LDMwNDA4LDMwNDA2LDMwNDAzLDMwNDA1LDMwNDY1LDMwNDU3LDMwNDU2LDMwNDczLDMwNDc1LDMwNDYyLDMwNDYwLDMwNDcxLDMwNjg0LDMwNzIyLDMwNzQwLDMwNzMyLDMw''@;'; put 'put ''NzMzLDMxMDQ2LDMxMDQ5LDMxMDQ4LDMxMDQ3LDMxMTYxLDMxMTYyLDMxMTg1LDMxMTg2LDMxMTc5LDMxMzU5LDMxMzYxLDMxNDg3LDMxNDg1LDMxODY5LDMyMDAyLDMyMDA1LDMyZTMsMzIwMDksMzIwMDcsMzIwMDQsMzIwMDYsMzI1NjgsMzI2NTQsMzI3MDMsMzI3NzIsMzI3ODQsMzI3ODEs''@;'; put 'put ''MzI3ODUsMzI4MjIsMzI5ODIsMzI5OTcsMzI5ODYsMzI5NjMsMzI5NjQsMzI5NzIsMzI5OTMsMzI5ODcsMzI5NzQsMzI5OTAsMzI5OTYsMzI5ODksMzMyNjgsMzMzMTQsMzM1MTEsMzM1MzksMzM1NDEsMzM1MDcsMzM0OTksMzM1MTAsMzM1NDAsMzM1MDksMzM1MzgsMzM1NDUsMzM0OTAsMzM0''@;'; put 'put ''OTUsMzM1MjEsMzM1MzcsMzM1MDAsMzM0OTIsMzM0ODksMzM1MDIsMzM0OTEsMzM1MDMsMzM1MTksMzM1NDIsMzQzODQsMzQ0MjUsMzQ0MjcsMzQ0MjYsMzQ4OTMsMzQ5MjMsMzUyMDEsMzUyODQsMzUzMzYsMzUzMzAsMzUzMzEsMzU5OTgsMzZlMywzNjIxMiwzNjIxMSwzNjI3NiwzNjU1Nywz''@;'; put 'put ''NjU1NiwzNjg0OCwzNjgzOCwzNjgzNCwzNjg0MiwzNjgzNywzNjg0NSwzNjg0MywzNjgzNiwzNjg0MCwzNzA2NiwzNzA3MCwzNzA1NywzNzA1OSwzNzE5NSwzNzE5NCwzNzMyNSwzODI3NCwzODQ4MCwzODQ3NSwzODQ3NiwzODQ3NywzODc1NCwzODc2MSwzODg1OSwzODg5MywzODg5OSwzODkx''@;'; put 'put ''MywzOTA4MCwzOTEzMSwzOTEzNSwzOTMxOCwzOTMyMSwyMDA1NiwyMDE0NywyMDQ5MiwyMDQ5MywyMDUxNSwyMDQ2MywyMDUxOCwyMDUxNywyMDQ3MiwyMDUyMSwyMDUwMiwyMDQ4NiwyMDU0MCwyMDUxMSwyMDUwNiwyMDQ5OCwyMDQ5NywyMDQ3NCwyMDQ4MCwyMDUwMCwyMDUyMCwyMDQ2NSwy''@;'; put 'put ''MDUxMywyMDQ5MSwyMDUwNSwyMDUwNCwyMDQ2NywyMDQ2MiwyMDUyNSwyMDUyMiwyMDQ3OCwyMDUyMywyMDQ4OSwyMDg2MCwyMDkwMCwyMDkwMSwyMDg5OCwyMDk0MSwyMDk0MCwyMDkzNCwyMDkzOSwyMTA3OCwyMTA4NCwyMTA3NiwyMTA4MywyMTA4NSwyMTI5MCwyMTM3NSwyMTQwNywyMTQw''@;'; put 'put ''NSwyMTQ3MSwyMTczNiwyMTc3NiwyMTc2MSwyMTgxNSwyMTc1NiwyMTczMywyMTc0NiwyMTc2NiwyMTc1NCwyMTc4MCwyMTczNywyMTc0MSwyMTcyOSwyMTc2OSwyMTc0MiwyMTczOCwyMTczNCwyMTc5OSwyMTc2NywyMTc1NywyMTc3NSwyMjI3NSwyMjI3NiwyMjQ2NiwyMjQ4NCwyMjQ3NSwy''@;'; put 'put ''MjQ2NywyMjUzNywyMjc5OSwyMjg3MSwyMjg3MiwyMjg3NCwyMzA1NywyMzA2NCwyMzA2OCwyMzA3MSwyMzA2NywyMzA1OSwyMzAyMCwyMzA3MiwyMzA3NSwyMzA4MSwyMzA3NywyMzA1MiwyMzA0OSwyMzQwMywyMzY0MCwyMzQ3MiwyMzQ3NSwyMzQ3OCwyMzQ3NiwyMzQ3MCwyMzQ3NywyMzQ4''@;'; put 'put ''MSwyMzQ4MCwyMzU1NiwyMzYzMywyMzYzNywyMzYzMiwyMzc4OSwyMzgwNSwyMzgwMywyMzc4NiwyMzc4NCwyMzc5MiwyMzc5OCwyMzgwOSwyMzc5NiwyNDA0NiwyNDEwOSwyNDEwNywyNDIzNSwyNDIzNywyNDIzMSwyNDM2OSwyNDQ2NiwyNDQ2NSwyNDQ2NCwyNDY2NSwyNDY3NSwyNDY3Nywy''@;'; put 'put ''NDY1NiwyNDY2MSwyNDY4NSwyNDY4MSwyNDY4NywyNDcwOCwyNDczNSwyNDczMCwyNDcxNywyNDcyNCwyNDcxNiwyNDcwOSwyNDcyNiwyNTE1OSwyNTMzMSwyNTM1MiwyNTM0MywyNTQyMiwyNTQwNiwyNTM5MSwyNTQyOSwyNTQxMCwyNTQxNCwyNTQyMywyNTQxNywyNTQwMiwyNTQyNCwyNTQw''@;'; put 'put ''NSwyNTM4NiwyNTM4NywyNTM4NCwyNTQyMSwyNTQyMCwyNTkyOCwyNTkyOSwyNjAwOSwyNjA0OSwyNjA1MywyNjE3OCwyNjE4NSwyNjE5MSwyNjE3OSwyNjE5NCwyNjE4OCwyNjE4MSwyNjE3NywyNjM2MCwyNjM4OCwyNjM4OSwyNjM5MSwyNjY1NywyNjY4MCwyNjY5NiwyNjY5NCwyNjcwNywy''@;'; put 'put ''NjY4MSwyNjY5MCwyNjcwOCwyNjY2NSwyNjgwMywyNjY0NywyNjcwMCwyNjcwNSwyNjY4NSwyNjYxMiwyNjcwNCwyNjY4OCwyNjY4NCwyNjY5MSwyNjY2NiwyNjY5MywyNjY0MywyNjY0OCwyNjY4OSwyNzUzMCwyNzUyOSwyNzU3NSwyNzY4MywyNzY4NywyNzY4OCwyNzY4NiwyNzY4NCwyNzg4''@;'; put 'put ''OCwyODAxMCwyODA1MywyODA0MCwyODAzOSwyODAwNiwyODAyNCwyODAyMywyNzk5MywyODA1MSwyODAxMiwyODA0MSwyODAxNCwyNzk5NCwyODAyMCwyODAwOSwyODA0NCwyODA0MiwyODAyNSwyODAzNywyODAwNSwyODA1MiwyODg3NCwyODg4OCwyODkwMCwyODg4OSwyODg3MiwyODg3OSwy''@;'; put 'put ''OTI0MSwyOTMwNSwyOTQzNiwyOTQzMywyOTQzNywyOTQzMiwyOTQzMSwyOTU3NCwyOTY3NywyOTcwNSwyOTY3OCwyOTY2NCwyOTY3NCwyOTY2MiwzMDAzNiwzMDA0NSwzMDA0NCwzMDA0MiwzMDA0MSwzMDE0MiwzMDE0OSwzMDE1MSwzMDEzMCwzMDEzMSwzMDE0MSwzMDE0MCwzMDEzNywzMDE0''@;'; put 'put ''NiwzMDEzNiwzMDM0NywzMDM4NCwzMDQxMCwzMDQxMywzMDQxNCwzMDUwNSwzMDQ5NSwzMDQ5NiwzMDUwNCwzMDY5NywzMDc2OCwzMDc1OSwzMDc3NiwzMDc0OSwzMDc3MiwzMDc3NSwzMDc1NywzMDc2NSwzMDc1MiwzMDc1MSwzMDc3MCwzMTA2MSwzMTA1NiwzMTA3MiwzMTA3MSwzMTA2Miwz''@;'; put 'put ''MTA3MCwzMTA2OSwzMTA2MywzMTA2NiwzMTIwNCwzMTIwMywzMTIwNywzMTE5OSwzMTIwNiwzMTIwOSwzMTE5MiwzMTM2NCwzMTM2OCwzMTQ0OSwzMTQ5NCwzMTUwNSwzMTg4MSwzMjAzMywzMjAyMywzMjAxMSwzMjAxMCwzMjAzMiwzMjAzNCwzMjAyMCwzMjAxNiwzMjAyMSwzMjAyNiwzMjAy''@;'; put 'put ''OCwzMjAxMywzMjAyNSwzMjAyNywzMjU3MCwzMjYwNywzMjY2MCwzMjcwOSwzMjcwNSwzMjc3NCwzMjc5MiwzMjc4OSwzMjc5MywzMjc5MSwzMjgyOSwzMjgzMSwzMzAwOSwzMzAyNiwzMzAwOCwzMzAyOSwzMzAwNSwzMzAxMiwzMzAzMCwzMzAxNiwzMzAxMSwzMzAzMiwzMzAyMSwzMzAzNCwz''@;'; put 'put ''MzAyMCwzMzAwNywzMzI2MSwzMzI2MCwzMzI4MCwzMzI5NiwzMzMyMiwzMzMyMywzMzMyMCwzMzMyNCwzMzQ2NywzMzU3OSwzMzYxOCwzMzYyMCwzMzYxMCwzMzU5MiwzMzYxNiwzMzYwOSwzMzU4OSwzMzU4OCwzMzYxNSwzMzU4NiwzMzU5MywzMzU5MCwzMzU1OSwzMzYwMCwzMzU4NSwzMzU3''@;'; put 'put ''NiwzMzYwMywzNDM4OCwzNDQ0MiwzNDQ3NCwzNDQ1MSwzNDQ2OCwzNDQ3MywzNDQ0NCwzNDQ2NywzNDQ2MCwzNDkyOCwzNDkzNSwzNDk0NSwzNDk0NiwzNDk0MSwzNDkzNywzNTM1MiwzNTM0NCwzNTM0MiwzNTM0MCwzNTM0OSwzNTMzOCwzNTM1MSwzNTM0NywzNTM1MCwzNTM0MywzNTM0NSwz''@;'; put 'put ''NTkxMiwzNTk2MiwzNTk2MSwzNjAwMSwzNjAwMiwzNjIxNSwzNjUyNCwzNjU2MiwzNjU2NCwzNjU1OSwzNjc4NSwzNjg2NSwzNjg3MCwzNjg1NSwzNjg2NCwzNjg1OCwzNjg1MiwzNjg2NywzNjg2MSwzNjg2OSwzNjg1NiwzNzAxMywzNzA4OSwzNzA4NSwzNzA5MCwzNzIwMiwzNzE5NywzNzE5''@;'; put 'put ''NiwzNzMzNiwzNzM0MSwzNzMzNSwzNzM0MCwzNzMzNywzODI3NSwzODQ5OCwzODQ5OSwzODQ5NywzODQ5MSwzODQ5MywzODUwMCwzODQ4OCwzODQ5NCwzODU4NywzOTEzOCwzOTM0MCwzOTU5MiwzOTY0MCwzOTcxNywzOTczMCwzOTc0MCwyMDA5NCwyMDYwMiwyMDYwNSwyMDU3MiwyMDU1MSwy''@;'; put 'put ''MDU0NywyMDU1NiwyMDU3MCwyMDU1MywyMDU4MSwyMDU5OCwyMDU1OCwyMDU2NSwyMDU5NywyMDU5NiwyMDU5OSwyMDU1OSwyMDQ5NSwyMDU5MSwyMDU4OSwyMDgyOCwyMDg4NSwyMDk3NiwyMTA5OCwyMTEwMywyMTIwMiwyMTIwOSwyMTIwOCwyMTIwNSwyMTI2NCwyMTI2MywyMTI3MywyMTMx''@;'; put 'put ''MSwyMTMxMiwyMTMxMCwyMTQ0MywyNjM2NCwyMTgzMCwyMTg2NiwyMTg2MiwyMTgyOCwyMTg1NCwyMTg1NywyMTgyNywyMTgzNCwyMTgwOSwyMTg0NiwyMTgzOSwyMTg0NSwyMTgwNywyMTg2MCwyMTgxNiwyMTgwNiwyMTg1MiwyMTgwNCwyMTg1OSwyMTgxMSwyMTgyNSwyMTg0NywyMjI4MCwy''@;'; put 'put ''MjI4MywyMjI4MSwyMjQ5NSwyMjUzMywyMjUzOCwyMjUzNCwyMjQ5NiwyMjUwMCwyMjUyMiwyMjUzMCwyMjU4MSwyMjUxOSwyMjUyMSwyMjgxNiwyMjg4MiwyMzA5NCwyMzEwNSwyMzExMywyMzE0MiwyMzE0NiwyMzEwNCwyMzEwMCwyMzEzOCwyMzEzMCwyMzExMCwyMzExNCwyMzQwOCwyMzQ5''@;'; put 'put ''NSwyMzQ5MywyMzQ5MiwyMzQ5MCwyMzQ4NywyMzQ5NCwyMzU2MSwyMzU2MCwyMzU1OSwyMzY0OCwyMzY0NCwyMzY0NSwyMzgxNSwyMzgxNCwyMzgyMiwyMzgzNSwyMzgzMCwyMzg0MiwyMzgyNSwyMzg0OSwyMzgyOCwyMzgzMywyMzg0NCwyMzg0NywyMzgzMSwyNDAzNCwyNDEyMCwyNDExOCwy''@;'; put 'put ''NDExNSwyNDExOSwyNDI0NywyNDI0OCwyNDI0NiwyNDI0NSwyNDI1NCwyNDM3MywyNDM3NSwyNDQwNywyNDQyOCwyNDQyNSwyNDQyNywyNDQ3MSwyNDQ3MywyNDQ3OCwyNDQ3MiwyNDQ4MSwyNDQ4MCwyNDQ3NiwyNDcwMywyNDczOSwyNDcxMywyNDczNiwyNDc0NCwyNDc3OSwyNDc1NiwyNDgw''@;'; put 'put ''NiwyNDc2NSwyNDc3MywyNDc2MywyNDc1NywyNDc5NiwyNDc2NCwyNDc5MiwyNDc4OSwyNDc3NCwyNDc5OSwyNDc2MCwyNDc5NCwyNDc3NSwyNTExNCwyNTExNSwyNTE2MCwyNTUwNCwyNTUxMSwyNTQ1OCwyNTQ5NCwyNTUwNiwyNTUwOSwyNTQ2MywyNTQ0NywyNTQ5NiwyNTUxNCwyNTQ1Nywy''@;'; put 'put ''NTUxMywyNTQ4MSwyNTQ3NSwyNTQ5OSwyNTQ1MSwyNTUxMiwyNTQ3NiwyNTQ4MCwyNTQ5NywyNTUwNSwyNTUxNiwyNTQ5MCwyNTQ4NywyNTQ3MiwyNTQ2NywyNTQ0OSwyNTQ0OCwyNTQ2NiwyNTk0OSwyNTk0MiwyNTkzNywyNTk0NSwyNTk0MywyMTg1NSwyNTkzNSwyNTk0NCwyNTk0MSwyNTk0''@;'; put 'put ''MCwyNjAxMiwyNjAxMSwyNjAyOCwyNjA2MywyNjA1OSwyNjA2MCwyNjA2MiwyNjIwNSwyNjIwMiwyNjIxMiwyNjIxNiwyNjIxNCwyNjIwNiwyNjM2MSwyMTIwNywyNjM5NSwyNjc1MywyNjc5OSwyNjc4NiwyNjc3MSwyNjgwNSwyNjc1MSwyNjc0MiwyNjgwMSwyNjc5MSwyNjc3NSwyNjgwMCwy''@;'; put 'put ''Njc1NSwyNjgyMCwyNjc5NywyNjc1OCwyNjc1NywyNjc3MiwyNjc4MSwyNjc5MiwyNjc4MywyNjc4NSwyNjc1NCwyNzQ0MiwyNzU3OCwyNzYyNywyNzYyOCwyNzY5MSwyODA0NiwyODA5MiwyODE0NywyODEyMSwyODA4MiwyODEyOSwyODEwOCwyODEzMiwyODE1NSwyODE1NCwyODE2NSwyODEw''@;'; put 'put ''MywyODEwNywyODA3OSwyODExMywyODA3OCwyODEyNiwyODE1MywyODA4OCwyODE1MSwyODE0OSwyODEwMSwyODExNCwyODE4NiwyODA4NSwyODEyMiwyODEzOSwyODEyMCwyODEzOCwyODE0NSwyODE0MiwyODEzNiwyODEwMiwyODEwMCwyODA3NCwyODE0MCwyODA5NSwyODEzNCwyODkyMSwy''@;'; put 'put ''ODkzNywyODkzOCwyODkyNSwyODkxMSwyOTI0NSwyOTMwOSwyOTMxMywyOTQ2OCwyOTQ2NywyOTQ2MiwyOTQ1OSwyOTQ2NSwyOTU3NSwyOTcwMSwyOTcwNiwyOTY5OSwyOTcwMiwyOTY5NCwyOTcwOSwyOTkyMCwyOTk0MiwyOTk0MywyOTk4MCwyOTk4NiwzMDA1MywzMDA1NCwzMDA1MCwzMDA2''@;'; put 'put ''NCwzMDA5NSwzMDE2NCwzMDE2NSwzMDEzMywzMDE1NCwzMDE1NywzMDM1MCwzMDQyMCwzMDQxOCwzMDQyNywzMDUxOSwzMDUyNiwzMDUyNCwzMDUxOCwzMDUyMCwzMDUyMiwzMDgyNywzMDc4NywzMDc5OCwzMTA3NywzMTA4MCwzMTA4NSwzMTIyNywzMTM3OCwzMTM4MSwzMTUyMCwzMTUyOCwz''@;'; put 'put ''MTUxNSwzMTUzMiwzMTUyNiwzMTUxMywzMTUxOCwzMTUzNCwzMTg5MCwzMTg5NSwzMTg5MywzMjA3MCwzMjA2NywzMjExMywzMjA0NiwzMjA1NywzMjA2MCwzMjA2NCwzMjA0OCwzMjA1MSwzMjA2OCwzMjA0NywzMjA2NiwzMjA1MCwzMjA0OSwzMjU3MywzMjY3MCwzMjY2NiwzMjcxNiwzMjcx''@;'; put 'put ''OCwzMjcyMiwzMjc5NiwzMjg0MiwzMjgzOCwzMzA3MSwzMzA0NiwzMzA1OSwzMzA2NywzMzA2NSwzMzA3MiwzMzA2MCwzMzI4MiwzMzMzMywzMzMzNSwzMzMzNCwzMzMzNywzMzY3OCwzMzY5NCwzMzY4OCwzMzY1NiwzMzY5OCwzMzY4NiwzMzcyNSwzMzcwNywzMzY4MiwzMzY3NCwzMzY4Mywz''@;'; put 'put ''MzY3MywzMzY5NiwzMzY1NSwzMzY1OSwzMzY2MCwzMzY3MCwzMzcwMywzNDM4OSwyNDQyNiwzNDUwMywzNDQ5NiwzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUwMiwzNDUwNywzNDQ4MSwzNDQ3OSwzNDUwNSwzNDg5OSwzNDk3NCwzNDk1MiwzNDk4NywzNDk2MiwzNDk2NiwzNDk1NywzNDk1NSwzNTIx''@;'; put 'put ''OSwzNTIxNSwzNTM3MCwzNTM1NywzNTM2MywzNTM2NSwzNTM3NywzNTM3MywzNTM1OSwzNTM1NSwzNTM2MiwzNTkxMywzNTkzMCwzNjAwOSwzNjAxMiwzNjAxMSwzNjAwOCwzNjAxMCwzNjAwNywzNjE5OSwzNjE5OCwzNjI4NiwzNjI4MiwzNjU3MSwzNjU3NSwzNjg4OSwzNjg3NywzNjg5MCwz''@;'; put 'put ''Njg4NywzNjg5OSwzNjg5NSwzNjg5MywzNjg4MCwzNjg4NSwzNjg5NCwzNjg5NiwzNjg3OSwzNjg5OCwzNjg4NiwzNjg5MSwzNjg4NCwzNzA5NiwzNzEwMSwzNzExNywzNzIwNywzNzMyNiwzNzM2NSwzNzM1MCwzNzM0NywzNzM1MSwzNzM1NywzNzM1MywzODI4MSwzODUwNiwzODUxNywzODUx''@;'; put 'put ''NSwzODUyMCwzODUxMiwzODUxNiwzODUxOCwzODUxOSwzODUwOCwzODU5MiwzODYzNCwzODYzMywzMTQ1NiwzMTQ1NSwzODkxNCwzODkxNSwzOTc3MCw0MDE2NSw0MDU2NSw0MDU3NSw0MDYxMyw0MDYzNSwyMDY0MiwyMDYyMSwyMDYxMywyMDYzMywyMDYyNSwyMDYwOCwyMDYzMCwyMDYzMiwy''@;'; put 'put ''MDYzNCwyNjM2OCwyMDk3NywyMTEwNiwyMTEwOCwyMTEwOSwyMTA5NywyMTIxNCwyMTIxMywyMTIxMSwyMTMzOCwyMTQxMywyMTg4MywyMTg4OCwyMTkyNywyMTg4NCwyMTg5OCwyMTkxNywyMTkxMiwyMTg5MCwyMTkxNiwyMTkzMCwyMTkwOCwyMTg5NSwyMTg5OSwyMTg5MSwyMTkzOSwyMTkz''@;'; put 'put ''NCwyMTkxOSwyMTgyMiwyMTkzOCwyMTkxNCwyMTk0NywyMTkzMiwyMTkzNywyMTg4NiwyMTg5NywyMTkzMSwyMTkxMywyMjI4NSwyMjU3NSwyMjU3MCwyMjU4MCwyMjU2NCwyMjU3NiwyMjU3NywyMjU2MSwyMjU1NywyMjU2MCwyMjc3NywyMjc3OCwyMjg4MCwyMzE1OSwyMzE5NCwyMzE2Nywy''@;'; put 'put ''MzE4NiwyMzE5NSwyMzIwNywyMzQxMSwyMzQwOSwyMzUwNiwyMzUwMCwyMzUwNywyMzUwNCwyMzU2MiwyMzU2MywyMzYwMSwyMzg4NCwyMzg4OCwyMzg2MCwyMzg3OSwyNDA2MSwyNDEzMywyNDEyNSwyNDEyOCwyNDEzMSwyNDE5MCwyNDI2NiwyNDI1NywyNDI1OCwyNDI2MCwyNDM4MCwyNDQy''@;'; put 'put ''OSwyNDQ4OSwyNDQ5MCwyNDQ4OCwyNDc4NSwyNDgwMSwyNDc1NCwyNDc1OCwyNDgwMCwyNDg2MCwyNDg2NywyNDgyNiwyNDg1MywyNDgxNiwyNDgyNywyNDgyMCwyNDkzNiwyNDgxNywyNDg0NiwyNDgyMiwyNDg0MSwyNDgzMiwyNDg1MCwyNTExOSwyNTE2MSwyNTUwNywyNTQ4NCwyNTU1MSwy''@;'; put 'put ''NTUzNiwyNTU3NywyNTU0NSwyNTU0MiwyNTU0OSwyNTU1NCwyNTU3MSwyNTU1MiwyNTU2OSwyNTU1OCwyNTU4MSwyNTU4MiwyNTQ2MiwyNTU4OCwyNTU3OCwyNTU2MywyNTY4MiwyNTU2MiwyNTU5MywyNTk1MCwyNTk1OCwyNTk1NCwyNTk1NSwyNjAwMSwyNmUzLDI2MDMxLDI2MjIyLDI2MjI0''@;'; put 'put ''LDI2MjI4LDI2MjMwLDI2MjIzLDI2MjU3LDI2MjM0LDI2MjM4LDI2MjMxLDI2MzY2LDI2MzY3LDI2Mzk5LDI2Mzk3LDI2ODc0LDI2ODM3LDI2ODQ4LDI2ODQwLDI2ODM5LDI2ODg1LDI2ODQ3LDI2ODY5LDI2ODYyLDI2ODU1LDI2ODczLDI2ODM0LDI2ODY2LDI2ODUxLDI2ODI3LDI2ODI5LDI2''@;'; put 'put ''ODkzLDI2ODk4LDI2ODk0LDI2ODI1LDI2ODQyLDI2OTkwLDI2ODc1LDI3NDU0LDI3NDUwLDI3NDUzLDI3NTQ0LDI3NTQyLDI3NTgwLDI3NjMxLDI3Njk0LDI3Njk1LDI3NjkyLDI4MjA3LDI4MjE2LDI4MjQ0LDI4MTkzLDI4MjEwLDI4MjYzLDI4MjM0LDI4MTkyLDI4MTk3LDI4MTk1LDI4MTg3''@;'; put 'put ''LDI4MjUxLDI4MjQ4LDI4MTk2LDI4MjQ2LDI4MjcwLDI4MjA1LDI4MTk4LDI4MjcxLDI4MjEyLDI4MjM3LDI4MjE4LDI4MjA0LDI4MjI3LDI4MTg5LDI4MjIyLDI4MzYzLDI4Mjk3LDI4MTg1LDI4MjM4LDI4MjU5LDI4MjI4LDI4Mjc0LDI4MjY1LDI4MjU1LDI4OTUzLDI4OTU0LDI4OTY2LDI4''@;'; put 'put ''OTc2LDI4OTYxLDI4OTgyLDI5MDM4LDI4OTU2LDI5MjYwLDI5MzE2LDI5MzEyLDI5NDk0LDI5NDc3LDI5NDkyLDI5NDgxLDI5NzU0LDI5NzM4LDI5NzQ3LDI5NzMwLDI5NzMzLDI5NzQ5LDI5NzUwLDI5NzQ4LDI5NzQzLDI5NzIzLDI5NzM0LDI5NzM2LDI5OTg5LDI5OTkwLDMwMDU5LDMwMDU4''@;'; put 'put ''LDMwMTc4LDMwMTcxLDMwMTc5LDMwMTY5LDMwMTY4LDMwMTc0LDMwMTc2LDMwMzMxLDMwMzMyLDMwMzU4LDMwMzU1LDMwMzg4LDMwNDI4LDMwNTQzLDMwNzAxLDMwODEzLDMwODI4LDMwODMxLDMxMjQ1LDMxMjQwLDMxMjQzLDMxMjM3LDMxMjMyLDMxMzg0LDMxMzgzLDMxMzgyLDMxNDYxLDMx''@;'; put 'put ''NDU5LDMxNTYxLDMxNTc0LDMxNTU4LDMxNTY4LDMxNTcwLDMxNTcyLDMxNTY1LDMxNTYzLDMxNTY3LDMxNTY5LDMxOTAzLDMxOTA5LDMyMDk0LDMyMDgwLDMyMTA0LDMyMDg1LDMyMDQzLDMyMTEwLDMyMTE0LDMyMDk3LDMyMTAyLDMyMDk4LDMyMTEyLDMyMTE1LDIxODkyLDMyNzI0LDMyNzI1''@;'; put 'put ''LDMyNzc5LDMyODUwLDMyOTAxLDMzMTA5LDMzMTA4LDMzMDk5LDMzMTA1LDMzMTAyLDMzMDgxLDMzMDk0LDMzMDg2LDMzMTAwLDMzMTA3LDMzMTQwLDMzMjk4LDMzMzA4LDMzNzY5LDMzNzk1LDMzNzg0LDMzODA1LDMzNzYwLDMzNzMzLDMzODAzLDMzNzI5LDMzNzc1LDMzNzc3LDMzNzgwLDMz''@;'; put 'put ''ODc5LDMzODAyLDMzNzc2LDMzODA0LDMzNzQwLDMzNzg5LDMzNzc4LDMzNzM4LDMzODQ4LDMzODA2LDMzNzk2LDMzNzU2LDMzNzk5LDMzNzQ4LDMzNzU5LDM0Mzk1LDM0NTI3LDM0NTIxLDM0NTQxLDM0NTE2LDM0NTIzLDM0NTMyLDM0NTEyLDM0NTI2LDM0OTAzLDM1MDA5LDM1MDEwLDM0OTkz''@;'; put 'put ''LDM1MjAzLDM1MjIyLDM1Mzg3LDM1NDI0LDM1NDEzLDM1NDIyLDM1Mzg4LDM1MzkzLDM1NDEyLDM1NDE5LDM1NDA4LDM1Mzk4LDM1MzgwLDM1Mzg2LDM1MzgyLDM1NDE0LDM1OTM3LDM1OTcwLDM2MDE1LDM2MDI4LDM2MDE5LDM2MDI5LDM2MDMzLDM2MDI3LDM2MDMyLDM2MDIwLDM2MDIzLDM2''@;'; put 'put ''MDIyLDM2MDMxLDM2MDI0LDM2MjM0LDM2MjI5LDM2MjI1LDM2MzAyLDM2MzE3LDM2Mjk5LDM2MzE0LDM2MzA1LDM2MzAwLDM2MzE1LDM2Mjk0LDM2NjAzLDM2NjAwLDM2NjA0LDM2NzY0LDM2OTEwLDM2OTE3LDM2OTEzLDM2OTIwLDM2OTE0LDM2OTE4LDM3MTIyLDM3MTA5LDM3MTI5LDM3MTE4''@;'; put 'put ''LDM3MjE5LDM3MjIxLDM3MzI3LDM3Mzk2LDM3Mzk3LDM3NDExLDM3Mzg1LDM3NDA2LDM3Mzg5LDM3MzkyLDM3MzgzLDM3MzkzLDM4MjkyLDM4Mjg3LDM4MjgzLDM4Mjg5LDM4MjkxLDM4MjkwLDM4Mjg2LDM4NTM4LDM4NTQyLDM4NTM5LDM4NTI1LDM4NTMzLDM4NTM0LDM4NTQxLDM4NTE0LDM4''@;'; put 'put ''NTMyLDM4NTkzLDM4NTk3LDM4NTk2LDM4NTk4LDM4NTk5LDM4NjM5LDM4NjQyLDM4ODYwLDM4OTE3LDM4OTE4LDM4OTIwLDM5MTQzLDM5MTQ2LDM5MTUxLDM5MTQ1LDM5MTU0LDM5MTQ5LDM5MzQyLDM5MzQxLDQwNjQzLDQwNjUzLDQwNjU3LDIwMDk4LDIwNjUzLDIwNjYxLDIwNjU4LDIwNjU5''@;'; put 'put ''LDIwNjc3LDIwNjcwLDIwNjUyLDIwNjYzLDIwNjY3LDIwNjU1LDIwNjc5LDIxMTE5LDIxMTExLDIxMTE3LDIxMjE1LDIxMjIyLDIxMjIwLDIxMjE4LDIxMjE5LDIxMjk1LDIxOTgzLDIxOTkyLDIxOTcxLDIxOTkwLDIxOTY2LDIxOTgwLDIxOTU5LDIxOTY5LDIxOTg3LDIxOTg4LDIxOTk5LDIx''@;'; put 'put ''OTc4LDIxOTg1LDIxOTU3LDIxOTU4LDIxOTg5LDIxOTYxLDIyMjkwLDIyMjkxLDIyNjIyLDIyNjA5LDIyNjE2LDIyNjE1LDIyNjE4LDIyNjEyLDIyNjM1LDIyNjA0LDIyNjM3LDIyNjAyLDIyNjI2LDIyNjEwLDIyNjAzLDIyODg3LDIzMjMzLDIzMjQxLDIzMjQ0LDIzMjMwLDIzMjI5LDIzMjI4''@;'; put 'put ''LDIzMjE5LDIzMjM0LDIzMjE4LDIzOTEzLDIzOTE5LDI0MTQwLDI0MTg1LDI0MjY1LDI0MjY0LDI0MzM4LDI0NDA5LDI0NDkyLDI0NDk0LDI0ODU4LDI0ODQ3LDI0OTA0LDI0ODYzLDI0ODE5LDI0ODU5LDI0ODI1LDI0ODMzLDI0ODQwLDI0OTEwLDI0OTA4LDI0OTAwLDI0OTA5LDI0ODk0LDI0''@;'; put 'put ''ODg0LDI0ODcxLDI0ODQ1LDI0ODM4LDI0ODg3LDI1MTIxLDI1MTIyLDI1NjE5LDI1NjYyLDI1NjMwLDI1NjQyLDI1NjQ1LDI1NjYxLDI1NjQ0LDI1NjE1LDI1NjI4LDI1NjIwLDI1NjEzLDI1NjU0LDI1NjIyLDI1NjIzLDI1NjA2LDI1OTY0LDI2MDE1LDI2MDMyLDI2MjYzLDI2MjQ5LDI2MjQ3''@;'; put 'put ''LDI2MjQ4LDI2MjYyLDI2MjQ0LDI2MjY0LDI2MjUzLDI2MzcxLDI3MDI4LDI2OTg5LDI2OTcwLDI2OTk5LDI2OTc2LDI2OTY0LDI2OTk3LDI2OTI4LDI3MDEwLDI2OTU0LDI2OTg0LDI2OTg3LDI2OTc0LDI2OTYzLDI3MDAxLDI3MDE0LDI2OTczLDI2OTc5LDI2OTcxLDI3NDYzLDI3NTA2LDI3''@;'; put 'put ''NTg0LDI3NTgzLDI3NjAzLDI3NjQ1LDI4MzIyLDI4MzM1LDI4MzcxLDI4MzQyLDI4MzU0LDI4MzA0LDI4MzE3LDI4MzU5LDI4MzU3LDI4MzI1LDI4MzEyLDI4MzQ4LDI4MzQ2LDI4MzMxLDI4MzY5LDI4MzEwLDI4MzE2LDI4MzU2LDI4MzcyLDI4MzMwLDI4MzI3LDI4MzQwLDI5MDA2LDI5MDE3''@;'; put 'put ''LDI5MDMzLDI5MDI4LDI5MDAxLDI5MDMxLDI5MDIwLDI5MDM2LDI5MDMwLDI5MDA0LDI5MDI5LDI5MDIyLDI4OTk4LDI5MDMyLDI5MDE0LDI5MjQyLDI5MjY2LDI5NDk1LDI5NTA5LDI5NTAzLDI5NTAyLDI5ODA3LDI5Nzg2LDI5NzgxLDI5NzkxLDI5NzkwLDI5NzYxLDI5NzU5LDI5Nzg1LDI5''@;'; put 'put ''Nzg3LDI5Nzg4LDMwMDcwLDMwMDcyLDMwMjA4LDMwMTkyLDMwMjA5LDMwMTk0LDMwMTkzLDMwMjAyLDMwMjA3LDMwMTk2LDMwMTk1LDMwNDMwLDMwNDMxLDMwNTU1LDMwNTcxLDMwNTY2LDMwNTU4LDMwNTYzLDMwNTg1LDMwNTcwLDMwNTcyLDMwNTU2LDMwNTY1LDMwNTY4LDMwNTYyLDMwNzAy''@;'; put 'put ''LDMwODYyLDMwODk2LDMwODcxLDMwODcyLDMwODYwLDMwODU3LDMwODQ0LDMwODY1LDMwODY3LDMwODQ3LDMxMDk4LDMxMTAzLDMxMTA1LDMzODM2LDMxMTY1LDMxMjYwLDMxMjU4LDMxMjY0LDMxMjUyLDMxMjYzLDMxMjYyLDMxMzkxLDMxMzkyLDMxNjA3LDMxNjgwLDMxNTg0LDMxNTk4LDMx''@;'; put 'put ''NTkxLDMxOTIxLDMxOTIzLDMxOTI1LDMyMTQ3LDMyMTIxLDMyMTQ1LDMyMTI5LDMyMTQzLDMyMDkxLDMyNjIyLDMyNjE3LDMyNjE4LDMyNjI2LDMyNjgxLDMyNjgwLDMyNjc2LDMyODU0LDMyODU2LDMyOTAyLDMyOTAwLDMzMTM3LDMzMTM2LDMzMTQ0LDMzMTI1LDMzMTM0LDMzMTM5LDMzMTMx''@;'; put 'put ''LDMzMTQ1LDMzMTQ2LDMzMTI2LDMzMjg1LDMzMzUxLDMzOTIyLDMzOTExLDMzODUzLDMzODQxLDMzOTA5LDMzODk0LDMzODk5LDMzODY1LDMzOTAwLDMzODgzLDMzODUyLDMzODQ1LDMzODg5LDMzODkxLDMzODk3LDMzOTAxLDMzODYyLDM0Mzk4LDM0Mzk2LDM0Mzk5LDM0NTUzLDM0NTc5LDM0''@;'; put 'put ''NTY4LDM0NTY3LDM0NTYwLDM0NTU4LDM0NTU1LDM0NTYyLDM0NTYzLDM0NTY2LDM0NTcwLDM0OTA1LDM1MDM5LDM1MDI4LDM1MDMzLDM1MDM2LDM1MDMyLDM1MDM3LDM1MDQxLDM1MDE4LDM1MDI5LDM1MDI2LDM1MjI4LDM1Mjk5LDM1NDM1LDM1NDQyLDM1NDQzLDM1NDMwLDM1NDMzLDM1NDQw''@;'; put 'put ''LDM1NDYzLDM1NDUyLDM1NDI3LDM1NDg4LDM1NDQxLDM1NDYxLDM1NDM3LDM1NDI2LDM1NDM4LDM1NDM2LDM1NDQ5LDM1NDUxLDM1MzkwLDM1NDMyLDM1OTM4LDM1OTc4LDM1OTc3LDM2MDQyLDM2MDM5LDM2MDQwLDM2MDM2LDM2MDE4LDM2MDM1LDM2MDM0LDM2MDM3LDM2MzIxLDM2MzE5LDM2''@;'; put 'put ''MzI4LDM2MzM1LDM2MzM5LDM2MzQ2LDM2MzMwLDM2MzI0LDM2MzI2LDM2NTMwLDM2NjExLDM2NjE3LDM2NjA2LDM2NjE4LDM2NzY3LDM2Nzg2LDM2OTM5LDM2OTM4LDM2OTQ3LDM2OTMwLDM2OTQ4LDM2OTI0LDM2OTQ5LDM2OTQ0LDM2OTM1LDM2OTQzLDM2OTQyLDM2OTQxLDM2OTQ1LDM2OTI2''@;'; put 'put ''LDM2OTI5LDM3MTM4LDM3MTQzLDM3MjI4LDM3MjI2LDM3MjI1LDM3MzIxLDM3NDMxLDM3NDYzLDM3NDMyLDM3NDM3LDM3NDQwLDM3NDM4LDM3NDY3LDM3NDUxLDM3NDc2LDM3NDU3LDM3NDI4LDM3NDQ5LDM3NDUzLDM3NDQ1LDM3NDMzLDM3NDM5LDM3NDY2LDM4Mjk2LDM4NTUyLDM4NTQ4LDM4''@;'; put 'put ''NTQ5LDM4NjA1LDM4NjAzLDM4NjAxLDM4NjAyLDM4NjQ3LDM4NjUxLDM4NjQ5LDM4NjQ2LDM4NzQyLDM4NzcyLDM4Nzc0LDM4OTI4LDM4OTI5LDM4OTMxLDM4OTIyLDM4OTMwLDM4OTI0LDM5MTY0LDM5MTU2LDM5MTY1LDM5MTY2LDM5MzQ3LDM5MzQ1LDM5MzQ4LDM5NjQ5LDQwMTY5LDQwNTc4''@;'; put 'put ''LDQwNzE4LDQwNzIzLDQwNzM2LDIwNzExLDIwNzE4LDIwNzA5LDIwNjk0LDIwNzE3LDIwNjk4LDIwNjkzLDIwNjg3LDIwNjg5LDIwNzIxLDIwNjg2LDIwNzEzLDIwODM0LDIwOTc5LDIxMTIzLDIxMTIyLDIxMjk3LDIxNDIxLDIyMDE0LDIyMDE2LDIyMDQzLDIyMDM5LDIyMDEzLDIyMDM2LDIy''@;'; put 'put ''MDIyLDIyMDI1LDIyMDI5LDIyMDMwLDIyMDA3LDIyMDM4LDIyMDQ3LDIyMDI0LDIyMDMyLDIyMDA2LDIyMjk2LDIyMjk0LDIyNjQ1LDIyNjU0LDIyNjU5LDIyNjc1LDIyNjY2LDIyNjQ5LDIyNjYxLDIyNjUzLDIyNzgxLDIyODIxLDIyODE4LDIyODIwLDIyODkwLDIyODg5LDIzMjY1LDIzMjcw''@;'; put 'put ''LDIzMjczLDIzMjU1LDIzMjU0LDIzMjU2LDIzMjY3LDIzNDEzLDIzNTE4LDIzNTI3LDIzNTIxLDIzNTI1LDIzNTI2LDIzNTI4LDIzNTIyLDIzNTI0LDIzNTE5LDIzNTY1LDIzNjUwLDIzOTQwLDIzOTQzLDI0MTU1LDI0MTYzLDI0MTQ5LDI0MTUxLDI0MTQ4LDI0Mjc1LDI0Mjc4LDI0MzMwLDI0''@;'; put 'put ''MzkwLDI0NDMyLDI0NTA1LDI0OTAzLDI0ODk1LDI0OTA3LDI0OTUxLDI0OTMwLDI0OTMxLDI0OTI3LDI0OTIyLDI0OTIwLDI0OTQ5LDI1MTMwLDI1NzM1LDI1Njg4LDI1Njg0LDI1NzY0LDI1NzIwLDI1Njk1LDI1NzIyLDI1NjgxLDI1NzAzLDI1NjUyLDI1NzA5LDI1NzIzLDI1OTcwLDI2MDE3''@;'; put 'put ''LDI2MDcxLDI2MDcwLDI2Mjc0LDI2MjgwLDI2MjY5LDI3MDM2LDI3MDQ4LDI3MDI5LDI3MDczLDI3MDU0LDI3MDkxLDI3MDgzLDI3MDM1LDI3MDYzLDI3MDY3LDI3MDUxLDI3MDYwLDI3MDg4LDI3MDg1LDI3MDUzLDI3MDg0LDI3MDQ2LDI3MDc1LDI3MDQzLDI3NDY1LDI3NDY4LDI3Njk5LDI4''@;'; put 'put ''NDY3LDI4NDM2LDI4NDE0LDI4NDM1LDI4NDA0LDI4NDU3LDI4NDc4LDI4NDQ4LDI4NDYwLDI4NDMxLDI4NDE4LDI4NDUwLDI4NDE1LDI4Mzk5LDI4NDIyLDI4NDY1LDI4NDcyLDI4NDY2LDI4NDUxLDI4NDM3LDI4NDU5LDI4NDYzLDI4NTUyLDI4NDU4LDI4Mzk2LDI4NDE3LDI4NDAyLDI4MzY0''@;'; put 'put ''LDI4NDA3LDI5MDc2LDI5MDgxLDI5MDUzLDI5MDY2LDI5MDYwLDI5MDc0LDI5MjQ2LDI5MzMwLDI5MzM0LDI5NTA4LDI5NTIwLDI5Nzk2LDI5Nzk1LDI5ODAyLDI5ODA4LDI5ODA1LDI5OTU2LDMwMDk3LDMwMjQ3LDMwMjIxLDMwMjE5LDMwMjE3LDMwMjI3LDMwNDMzLDMwNDM1LDMwNTk2LDMw''@;'; put 'put ''NTg5LDMwNTkxLDMwNTYxLDMwOTEzLDMwODc5LDMwODg3LDMwODk5LDMwODg5LDMwODgzLDMxMTE4LDMxMTE5LDMxMTE3LDMxMjc4LDMxMjgxLDMxNDAyLDMxNDAxLDMxNDY5LDMxNDcxLDMxNjQ5LDMxNjM3LDMxNjI3LDMxNjA1LDMxNjM5LDMxNjQ1LDMxNjM2LDMxNjMxLDMxNjcyLDMxNjIz''@;'; put 'put ''LDMxNjIwLDMxOTI5LDMxOTMzLDMxOTM0LDMyMTg3LDMyMTc2LDMyMTU2LDMyMTg5LDMyMTkwLDMyMTYwLDMyMjAyLDMyMTgwLDMyMTc4LDMyMTc3LDMyMTg2LDMyMTYyLDMyMTkxLDMyMTgxLDMyMTg0LDMyMTczLDMyMjEwLDMyMTk5LDMyMTcyLDMyNjI0LDMyNzM2LDMyNzM3LDMyNzM1LDMy''@;'; put 'put ''ODYyLDMyODU4LDMyOTAzLDMzMTA0LDMzMTUyLDMzMTY3LDMzMTYwLDMzMTYyLDMzMTUxLDMzMTU0LDMzMjU1LDMzMjc0LDMzMjg3LDMzMzAwLDMzMzEwLDMzMzU1LDMzOTkzLDMzOTgzLDMzOTkwLDMzOTg4LDMzOTQ1LDMzOTUwLDMzOTcwLDMzOTQ4LDMzOTk1LDMzOTc2LDMzOTg0LDM0MDAz''@;'; put 'put ''LDMzOTM2LDMzOTgwLDM0MDAxLDMzOTk0LDM0NjIzLDM0NTg4LDM0NjE5LDM0NTk0LDM0NTk3LDM0NjEyLDM0NTg0LDM0NjQ1LDM0NjE1LDM0NjAxLDM1MDU5LDM1MDc0LDM1MDYwLDM1MDY1LDM1MDY0LDM1MDY5LDM1MDQ4LDM1MDk4LDM1MDU1LDM1NDk0LDM1NDY4LDM1NDg2LDM1NDkxLDM1''@;'; put 'put ''NDY5LDM1NDg5LDM1NDc1LDM1NDkyLDM1NDk4LDM1NDkzLDM1NDk2LDM1NDgwLDM1NDczLDM1NDgyLDM1NDk1LDM1OTQ2LDM1OTgxLDM1OTgwLDM2MDUxLDM2MDQ5LDM2MDUwLDM2MjAzLDM2MjQ5LDM2MjQ1LDM2MzQ4LDM2NjI4LDM2NjI2LDM2NjI5LDM2NjI3LDM2NzcxLDM2OTYwLDM2OTUy''@;'; put 'put ''LDM2OTU2LDM2OTYzLDM2OTUzLDM2OTU4LDM2OTYyLDM2OTU3LDM2OTU1LDM3MTQ1LDM3MTQ0LDM3MTUwLDM3MjM3LDM3MjQwLDM3MjM5LDM3MjM2LDM3NDk2LDM3NTA0LDM3NTA5LDM3NTI4LDM3NTI2LDM3NDk5LDM3NTIzLDM3NTMyLDM3NTQ0LDM3NTAwLDM3NTIxLDM4MzA1LDM4MzEyLDM4''@;'; put 'put ''MzEzLDM4MzA3LDM4MzA5LDM4MzA4LDM4NTUzLDM4NTU2LDM4NTU1LDM4NjA0LDM4NjEwLDM4NjU2LDM4NzgwLDM4Nzg5LDM4OTAyLDM4OTM1LDM4OTM2LDM5MDg3LDM5MDg5LDM5MTcxLDM5MTczLDM5MTgwLDM5MTc3LDM5MzYxLDM5NTk5LDM5NjAwLDM5NjU0LDM5NzQ1LDM5NzQ2LDQwMTgw''@;'; put 'put ''LDQwMTgyLDQwMTc5LDQwNjM2LDQwNzYzLDQwNzc4LDIwNzQwLDIwNzM2LDIwNzMxLDIwNzI1LDIwNzI5LDIwNzM4LDIwNzQ0LDIwNzQ1LDIwNzQxLDIwOTU2LDIxMTI3LDIxMTI4LDIxMTI5LDIxMTMzLDIxMTMwLDIxMjMyLDIxNDI2LDIyMDYyLDIyMDc1LDIyMDczLDIyMDY2LDIyMDc5LDIy''@;'; put 'put ''MDY4LDIyMDU3LDIyMDk5LDIyMDk0LDIyMTAzLDIyMTMyLDIyMDcwLDIyMDYzLDIyMDY0LDIyNjU2LDIyNjg3LDIyNjg2LDIyNzA3LDIyNjg0LDIyNzAyLDIyNjk3LDIyNjk0LDIyODkzLDIzMzA1LDIzMjkxLDIzMzA3LDIzMjg1LDIzMzA4LDIzMzA0LDIzNTM0LDIzNTMyLDIzNTI5LDIzNTMx''@;'; put 'put ''LDIzNjUyLDIzNjUzLDIzOTY1LDIzOTU2LDI0MTYyLDI0MTU5LDI0MTYxLDI0MjkwLDI0MjgyLDI0Mjg3LDI0Mjg1LDI0MjkxLDI0Mjg4LDI0MzkyLDI0NDMzLDI0NTAzLDI0NTAxLDI0OTUwLDI0OTM1LDI0OTQyLDI0OTI1LDI0OTE3LDI0OTYyLDI0OTU2LDI0OTQ0LDI0OTM5LDI0OTU4LDI0''@;'; put 'put ''OTk5LDI0OTc2LDI1MDAzLDI0OTc0LDI1MDA0LDI0OTg2LDI0OTk2LDI0OTgwLDI1MDA2LDI1MTM0LDI1NzA1LDI1NzExLDI1NzIxLDI1NzU4LDI1Nzc4LDI1NzM2LDI1NzQ0LDI1Nzc2LDI1NzY1LDI1NzQ3LDI1NzQ5LDI1NzY5LDI1NzQ2LDI1Nzc0LDI1NzczLDI1NzcxLDI1NzU0LDI1Nzcy''@;'; put 'put ''LDI1NzUzLDI1NzYyLDI1Nzc5LDI1OTczLDI1OTc1LDI1OTc2LDI2Mjg2LDI2MjgzLDI2MjkyLDI2Mjg5LDI3MTcxLDI3MTY3LDI3MTEyLDI3MTM3LDI3MTY2LDI3MTYxLDI3MTMzLDI3MTY5LDI3MTU1LDI3MTQ2LDI3MTIzLDI3MTM4LDI3MTQxLDI3MTE3LDI3MTUzLDI3NDcyLDI3NDcwLDI3''@;'; put 'put ''NTU2LDI3NTg5LDI3NTkwLDI4NDc5LDI4NTQwLDI4NTQ4LDI4NDk3LDI4NTE4LDI4NTAwLDI4NTUwLDI4NTI1LDI4NTA3LDI4NTM2LDI4NTI2LDI4NTU4LDI4NTM4LDI4NTI4LDI4NTE2LDI4NTY3LDI4NTA0LDI4MzczLDI4NTI3LDI4NTEyLDI4NTExLDI5MDg3LDI5MTAwLDI5MTA1LDI5MDk2''@;'; put 'put ''LDI5MjcwLDI5MzM5LDI5NTE4LDI5NTI3LDI5ODAxLDI5ODM1LDI5ODI3LDI5ODIyLDI5ODI0LDMwMDc5LDMwMjQwLDMwMjQ5LDMwMjM5LDMwMjQ0LDMwMjQ2LDMwMjQxLDMwMjQyLDMwMzYyLDMwMzk0LDMwNDM2LDMwNjA2LDMwNTk5LDMwNjA0LDMwNjA5LDMwNjAzLDMwOTIzLDMwOTE3LDMw''@;'; put 'put ''OTA2LDMwOTIyLDMwOTEwLDMwOTMzLDMwOTA4LDMwOTI4LDMxMjk1LDMxMjkyLDMxMjk2LDMxMjkzLDMxMjg3LDMxMjkxLDMxNDA3LDMxNDA2LDMxNjYxLDMxNjY1LDMxNjg0LDMxNjY4LDMxNjg2LDMxNjg3LDMxNjgxLDMxNjQ4LDMxNjkyLDMxOTQ2LDMyMjI0LDMyMjQ0LDMyMjM5LDMyMjUx''@;'; put 'put ''LDMyMjE2LDMyMjM2LDMyMjIxLDMyMjMyLDMyMjI3LDMyMjE4LDMyMjIyLDMyMjMzLDMyMTU4LDMyMjE3LDMyMjQyLDMyMjQ5LDMyNjI5LDMyNjMxLDMyNjg3LDMyNzQ1LDMyODA2LDMzMTc5LDMzMTgwLDMzMTgxLDMzMTg0LDMzMTc4LDMzMTc2LDM0MDcxLDM0MTA5LDM0MDc0LDM0MDMwLDM0''@;'; put 'put ''MDkyLDM0MDkzLDM0MDY3LDM0MDY1LDM0MDgzLDM0MDgxLDM0MDY4LDM0MDI4LDM0MDg1LDM0MDQ3LDM0MDU0LDM0NjkwLDM0Njc2LDM0Njc4LDM0NjU2LDM0NjYyLDM0NjgwLDM0NjY0LDM0NjQ5LDM0NjQ3LDM0NjM2LDM0NjQzLDM0OTA3LDM0OTA5LDM1MDg4LDM1MDc5LDM1MDkwLDM1MDkx''@;'; put 'put ''LDM1MDkzLDM1MDgyLDM1NTE2LDM1NTM4LDM1NTI3LDM1NTI0LDM1NDc3LDM1NTMxLDM1NTc2LDM1NTA2LDM1NTI5LDM1NTIyLDM1NTE5LDM1NTA0LDM1NTQyLDM1NTMzLDM1NTEwLDM1NTEzLDM1NTQ3LDM1OTE2LDM1OTE4LDM1OTQ4LDM2MDY0LDM2MDYyLDM2MDcwLDM2MDY4LDM2MDc2LDM2''@;'; put 'put ''MDc3LDM2MDY2LDM2MDY3LDM2MDYwLDM2MDc0LDM2MDY1LDM2MjA1LDM2MjU1LDM2MjU5LDM2Mzk1LDM2MzY4LDM2MzgxLDM2Mzg2LDM2MzY3LDM2MzkzLDM2MzgzLDM2Mzg1LDM2MzgyLDM2NTM4LDM2NjM3LDM2NjM1LDM2NjM5LDM2NjQ5LDM2NjQ2LDM2NjUwLDM2NjM2LDM2NjM4LDM2NjQ1''@;'; put 'put ''LDM2OTY5LDM2OTc0LDM2OTY4LDM2OTczLDM2OTgzLDM3MTY4LDM3MTY1LDM3MTU5LDM3MTY5LDM3MjU1LDM3MjU3LDM3MjU5LDM3MjUxLDM3NTczLDM3NTYzLDM3NTU5LDM3NjEwLDM3NTQ4LDM3NjA0LDM3NTY5LDM3NTU1LDM3NTY0LDM3NTg2LDM3NTc1LDM3NjE2LDM3NTU0LDM4MzE3LDM4''@;'; put 'put ''MzIxLDM4NjYwLDM4NjYyLDM4NjYzLDM4NjY1LDM4NzUyLDM4Nzk3LDM4Nzk1LDM4Nzk5LDM4OTQ1LDM4OTU1LDM4OTQwLDM5MDkxLDM5MTc4LDM5MTg3LDM5MTg2LDM5MTkyLDM5Mzg5LDM5Mzc2LDM5MzkxLDM5Mzg3LDM5Mzc3LDM5MzgxLDM5Mzc4LDM5Mzg1LDM5NjA3LDM5NjYyLDM5NjYz''@;'; put 'put ''LDM5NzE5LDM5NzQ5LDM5NzQ4LDM5Nzk5LDM5NzkxLDQwMTk4LDQwMjAxLDQwMTk1LDQwNjE3LDQwNjM4LDQwNjU0LDIyNjk2LDQwNzg2LDIwNzU0LDIwNzYwLDIwNzU2LDIwNzUyLDIwNzU3LDIwODY0LDIwOTA2LDIwOTU3LDIxMTM3LDIxMTM5LDIxMjM1LDIyMTA1LDIyMTIzLDIyMTM3LDIy''@;'; put 'put ''MTIxLDIyMTE2LDIyMTM2LDIyMTIyLDIyMTIwLDIyMTE3LDIyMTI5LDIyMTI3LDIyMTI0LDIyMTE0LDIyMTM0LDIyNzIxLDIyNzE4LDIyNzI3LDIyNzI1LDIyODk0LDIzMzI1LDIzMzQ4LDIzNDE2LDIzNTM2LDIzNTY2LDI0Mzk0LDI1MDEwLDI0OTc3LDI1MDAxLDI0OTcwLDI1MDM3LDI1MDE0''@;'; put 'put ''LDI1MDIyLDI1MDM0LDI1MDMyLDI1MTM2LDI1Nzk3LDI1NzkzLDI1ODAzLDI1Nzg3LDI1Nzg4LDI1ODE4LDI1Nzk2LDI1Nzk5LDI1Nzk0LDI1ODA1LDI1NzkxLDI1ODEwLDI1ODEyLDI1NzkwLDI1OTcyLDI2MzEwLDI2MzEzLDI2Mjk3LDI2MzA4LDI2MzExLDI2Mjk2LDI3MTk3LDI3MTkyLDI3''@;'; put 'put ''MTk0LDI3MjI1LDI3MjQzLDI3MjI0LDI3MTkzLDI3MjA0LDI3MjM0LDI3MjMzLDI3MjExLDI3MjA3LDI3MTg5LDI3MjMxLDI3MjA4LDI3NDgxLDI3NTExLDI3NjUzLDI4NjEwLDI4NTkzLDI4NTc3LDI4NjExLDI4NTgwLDI4NjA5LDI4NTgzLDI4NTk1LDI4NjA4LDI4NjAxLDI4NTk4LDI4NTgy''@;'; put 'put ''LDI4NTc2LDI4NTk2LDI5MTE4LDI5MTI5LDI5MTM2LDI5MTM4LDI5MTI4LDI5MTQxLDI5MTEzLDI5MTM0LDI5MTQ1LDI5MTQ4LDI5MTIzLDI5MTI0LDI5NTQ0LDI5ODUyLDI5ODU5LDI5ODQ4LDI5ODU1LDI5ODU0LDI5OTIyLDI5OTY0LDI5OTY1LDMwMjYwLDMwMjY0LDMwMjY2LDMwNDM5LDMw''@;'; put 'put ''NDM3LDMwNjI0LDMwNjIyLDMwNjIzLDMwNjI5LDMwOTUyLDMwOTM4LDMwOTU2LDMwOTUxLDMxMTQyLDMxMzA5LDMxMzEwLDMxMzAyLDMxMzA4LDMxMzA3LDMxNDE4LDMxNzA1LDMxNzYxLDMxNjg5LDMxNzE2LDMxNzA3LDMxNzEzLDMxNzIxLDMxNzE4LDMxOTU3LDMxOTU4LDMyMjY2LDMyMjcz''@;'; put 'put ''LDMyMjY0LDMyMjgzLDMyMjkxLDMyMjg2LDMyMjg1LDMyMjY1LDMyMjcyLDMyNjMzLDMyNjkwLDMyNzUyLDMyNzUzLDMyNzUwLDMyODA4LDMzMjAzLDMzMTkzLDMzMTkyLDMzMjc1LDMzMjg4LDMzMzY4LDMzMzY5LDM0MTIyLDM0MTM3LDM0MTIwLDM0MTUyLDM0MTUzLDM0MTE1LDM0MTIxLDM0''@;'; put 'put ''MTU3LDM0MTU0LDM0MTQyLDM0NjkxLDM0NzE5LDM0NzE4LDM0NzIyLDM0NzAxLDM0OTEzLDM1MTE0LDM1MTIyLDM1MTA5LDM1MTE1LDM1MTA1LDM1MjQyLDM1MjM4LDM1NTU4LDM1NTc4LDM1NTYzLDM1NTY5LDM1NTg0LDM1NTQ4LDM1NTU5LDM1NTY2LDM1NTgyLDM1NTg1LDM1NTg2LDM1NTc1''@;'; put 'put ''LDM1NTY1LDM1NTcxLDM1NTc0LDM1NTgwLDM1OTQ3LDM1OTQ5LDM1OTg3LDM2MDg0LDM2NDIwLDM2NDAxLDM2NDA0LDM2NDE4LDM2NDA5LDM2NDA1LDM2NjY3LDM2NjU1LDM2NjY0LDM2NjU5LDM2Nzc2LDM2Nzc0LDM2OTgxLDM2OTgwLDM2OTg0LDM2OTc4LDM2OTg4LDM2OTg2LDM3MTcyLDM3''@;'; put 'put ''MjY2LDM3NjY0LDM3Njg2LDM3NjI0LDM3NjgzLDM3Njc5LDM3NjY2LDM3NjI4LDM3Njc1LDM3NjM2LDM3NjU4LDM3NjQ4LDM3NjcwLDM3NjY1LDM3NjUzLDM3Njc4LDM3NjU3LDM4MzMxLDM4NTY3LDM4NTY4LDM4NTcwLDM4NjEzLDM4NjcwLDM4NjczLDM4Njc4LDM4NjY5LDM4Njc1LDM4Njcx''@;'; put 'put ''LDM4NzQ3LDM4NzQ4LDM4NzU4LDM4ODA4LDM4OTYwLDM4OTY4LDM4OTcxLDM4OTY3LDM4OTU3LDM4OTY5LDM4OTQ4LDM5MTg0LDM5MjA4LDM5MTk4LDM5MTk1LDM5MjAxLDM5MTk0LDM5NDA1LDM5Mzk0LDM5NDA5LDM5NjA4LDM5NjEyLDM5Njc1LDM5NjYxLDM5NzIwLDM5ODI1LDQwMjEzLDQw''@;'; put 'put ''MjI3LDQwMjMwLDQwMjMyLDQwMjEwLDQwMjE5LDQwNjY0LDQwNjYwLDQwODQ1LDQwODYwLDIwNzc4LDIwNzY3LDIwNzY5LDIwNzg2LDIxMjM3LDIyMTU4LDIyMTQ0LDIyMTYwLDIyMTQ5LDIyMTUxLDIyMTU5LDIyNzQxLDIyNzM5LDIyNzM3LDIyNzM0LDIzMzQ0LDIzMzM4LDIzMzMyLDIzNDE4''@;'; put 'put ''LDIzNjA3LDIzNjU2LDIzOTk2LDIzOTk0LDIzOTk3LDIzOTkyLDI0MTcxLDI0Mzk2LDI0NTA5LDI1MDMzLDI1MDI2LDI1MDMxLDI1MDYyLDI1MDM1LDI1MTM4LDI1MTQwLDI1ODA2LDI1ODAyLDI1ODE2LDI1ODI0LDI1ODQwLDI1ODMwLDI1ODM2LDI1ODQxLDI1ODI2LDI1ODM3LDI1OTg2LDI1''@;'; put 'put ''OTg3LDI2MzI5LDI2MzI2LDI3MjY0LDI3Mjg0LDI3MjY4LDI3Mjk4LDI3MjkyLDI3MzU1LDI3Mjk5LDI3MjYyLDI3Mjg3LDI3MjgwLDI3Mjk2LDI3NDg0LDI3NTY2LDI3NjEwLDI3NjU2LDI4NjMyLDI4NjU3LDI4NjM5LDI4NjQwLDI4NjM1LDI4NjQ0LDI4NjUxLDI4NjU1LDI4NTQ0LDI4NjUy''@;'; put 'put ''LDI4NjQxLDI4NjQ5LDI4NjI5LDI4NjU0LDI4NjU2LDI5MTU5LDI5MTUxLDI5MTY2LDI5MTU4LDI5MTU3LDI5MTY1LDI5MTY0LDI5MTcyLDI5MTUyLDI5MjM3LDI5MjU0LDI5NTUyLDI5NTU0LDI5ODY1LDI5ODcyLDI5ODYyLDI5ODY0LDMwMjc4LDMwMjc0LDMwMjg0LDMwNDQyLDMwNjQzLDMw''@;'; put 'put ''NjM0LDMwNjQwLDMwNjM2LDMwNjMxLDMwNjM3LDMwNzAzLDMwOTY3LDMwOTcwLDMwOTY0LDMwOTU5LDMwOTc3LDMxMTQzLDMxMTQ2LDMxMzE5LDMxNDIzLDMxNzUxLDMxNzU3LDMxNzQyLDMxNzM1LDMxNzU2LDMxNzEyLDMxOTY4LDMxOTY0LDMxOTY2LDMxOTcwLDMxOTY3LDMxOTYxLDMxOTY1''@;'; put 'put ''LDMyMzAyLDMyMzE4LDMyMzI2LDMyMzExLDMyMzA2LDMyMzIzLDMyMjk5LDMyMzE3LDMyMzA1LDMyMzI1LDMyMzIxLDMyMzA4LDMyMzEzLDMyMzI4LDMyMzA5LDMyMzE5LDMyMzAzLDMyNTgwLDMyNzU1LDMyNzY0LDMyODgxLDMyODgyLDMyODgwLDMyODc5LDMyODgzLDMzMjIyLDMzMjE5LDMz''@;'; put 'put ''MjEwLDMzMjE4LDMzMjE2LDMzMjE1LDMzMjEzLDMzMjI1LDMzMjE0LDMzMjU2LDMzMjg5LDMzMzkzLDM0MjE4LDM0MTgwLDM0MTc0LDM0MjA0LDM0MTkzLDM0MTk2LDM0MjIzLDM0MjAzLDM0MTgzLDM0MjE2LDM0MTg2LDM0NDA3LDM0NzUyLDM0NzY5LDM0NzM5LDM0NzcwLDM0NzU4LDM0NzMx''@;'; put 'put ''LDM0NzQ3LDM0NzQ2LDM0NzYwLDM0NzYzLDM1MTMxLDM1MTI2LDM1MTQwLDM1MTI4LDM1MTMzLDM1MjQ0LDM1NTk4LDM1NjA3LDM1NjA5LDM1NjExLDM1NTk0LDM1NjE2LDM1NjEzLDM1NTg4LDM1NjAwLDM1OTA1LDM1OTAzLDM1OTU1LDM2MDkwLDM2MDkzLDM2MDkyLDM2MDg4LDM2MDkxLDM2''@;'; put 'put ''MjY0LDM2NDI1LDM2NDI3LDM2NDI0LDM2NDI2LDM2Njc2LDM2NjcwLDM2Njc0LDM2Njc3LDM2NjcxLDM2OTkxLDM2OTg5LDM2OTk2LDM2OTkzLDM2OTk0LDM2OTkyLDM3MTc3LDM3MjgzLDM3Mjc4LDM3Mjc2LDM3NzA5LDM3NzYyLDM3NjcyLDM3NzQ5LDM3NzA2LDM3NzMzLDM3NzA3LDM3NjU2''@;'; put 'put ''LDM3NzU4LDM3NzQwLDM3NzIzLDM3NzQ0LDM3NzIyLDM3NzE2LDM4MzQ2LDM4MzQ3LDM4MzQ4LDM4MzQ0LDM4MzQyLDM4NTc3LDM4NTg0LDM4NjE0LDM4Njg0LDM4Njg2LDM4ODE2LDM4ODY3LDM4OTgyLDM5MDk0LDM5MjIxLDM5NDI1LDM5NDIzLDM5ODU0LDM5ODUxLDM5ODUwLDM5ODUzLDQw''@;'; put 'put ''MjUxLDQwMjU1LDQwNTg3LDQwNjU1LDQwNjcwLDQwNjY4LDQwNjY5LDQwNjY3LDQwNzY2LDQwNzc5LDIxNDc0LDIyMTY1LDIyMTkwLDIyNzQ1LDIyNzQ0LDIzMzUyLDI0NDEzLDI1MDU5LDI1MTM5LDI1ODQ0LDI1ODQyLDI1ODU0LDI1ODYyLDI1ODUwLDI1ODUxLDI1ODQ3LDI2MDM5LDI2MzMy''@;'; put 'put ''LDI2NDA2LDI3MzE1LDI3MzA4LDI3MzMxLDI3MzIzLDI3MzIwLDI3MzMwLDI3MzEwLDI3MzExLDI3NDg3LDI3NTEyLDI3NTY3LDI4NjgxLDI4NjgzLDI4NjcwLDI4Njc4LDI4NjY2LDI4Njg5LDI4Njg3LDI5MTc5LDI5MTgwLDI5MTgyLDI5MTc2LDI5NTU5LDI5NTU3LDI5ODYzLDI5ODg3LDI5''@;'; put 'put ''OTczLDMwMjk0LDMwMjk2LDMwMjkwLDMwNjUzLDMwNjU1LDMwNjUxLDMwNjUyLDMwOTkwLDMxMTUwLDMxMzI5LDMxMzMwLDMxMzI4LDMxNDI4LDMxNDI5LDMxNzg3LDMxNzgzLDMxNzg2LDMxNzc0LDMxNzc5LDMxNzc3LDMxOTc1LDMyMzQwLDMyMzQxLDMyMzUwLDMyMzQ2LDMyMzUzLDMyMzM4''@;'; put 'put ''LDMyMzQ1LDMyNTg0LDMyNzYxLDMyNzYzLDMyODg3LDMyODg2LDMzMjI5LDMzMjMxLDMzMjkwLDM0MjU1LDM0MjE3LDM0MjUzLDM0MjU2LDM0MjQ5LDM0MjI0LDM0MjM0LDM0MjMzLDM0MjE0LDM0Nzk5LDM0Nzk2LDM0ODAyLDM0Nzg0LDM1MjA2LDM1MjUwLDM1MzE2LDM1NjI0LDM1NjQxLDM1''@;'; put 'put ''NjI4LDM1NjI3LDM1OTIwLDM2MTAxLDM2NDQxLDM2NDUxLDM2NDU0LDM2NDUyLDM2NDQ3LDM2NDM3LDM2NTQ0LDM2NjgxLDM2Njg1LDM2OTk5LDM2OTk1LDM3ZTMsMzcyOTEsMzcyOTIsMzczMjgsMzc3ODAsMzc3NzAsMzc3ODIsMzc3OTQsMzc4MTEsMzc4MDYsMzc4MDQsMzc4MDgsMzc3ODQs''@;'; put 'put ''Mzc3ODYsMzc3ODMsMzgzNTYsMzgzNTgsMzgzNTIsMzgzNTcsMzg2MjYsMzg2MjAsMzg2MTcsMzg2MTksMzg2MjIsMzg2OTIsMzg4MTksMzg4MjIsMzg4MjksMzg5MDUsMzg5ODksMzg5OTEsMzg5ODgsMzg5OTAsMzg5OTUsMzkwOTgsMzkyMzAsMzkyMzEsMzkyMjksMzkyMTQsMzkzMzMsMzk0''@;'; put 'put ''MzgsMzk2MTcsMzk2ODMsMzk2ODYsMzk3NTksMzk3NTgsMzk3NTcsMzk4ODIsMzk4ODEsMzk5MzMsMzk4ODAsMzk4NzIsNDAyNzMsNDAyODUsNDAyODgsNDA2NzIsNDA3MjUsNDA3NDgsMjA3ODcsMjIxODEsMjI3NTAsMjI3NTEsMjI3NTQsMjM1NDEsNDA4NDgsMjQzMDAsMjUwNzQsMjUwNzks''@;'; put 'put ''MjUwNzgsMjUwNzcsMjU4NTYsMjU4NzEsMjYzMzYsMjYzMzMsMjczNjUsMjczNTcsMjczNTQsMjczNDcsMjg2OTksMjg3MDMsMjg3MTIsMjg2OTgsMjg3MDEsMjg2OTMsMjg2OTYsMjkxOTAsMjkxOTcsMjkyNzIsMjkzNDYsMjk1NjAsMjk1NjIsMjk4ODUsMjk4OTgsMjk5MjMsMzAwODcsMzAw''@;'; put 'put ''ODYsMzAzMDMsMzAzMDUsMzA2NjMsMzEwMDEsMzExNTMsMzEzMzksMzEzMzcsMzE4MDYsMzE4MDcsMzE4MDAsMzE4MDUsMzE3OTksMzE4MDgsMzIzNjMsMzIzNjUsMzIzNzcsMzIzNjEsMzIzNjIsMzI2NDUsMzIzNzEsMzI2OTQsMzI2OTcsMzI2OTYsMzMyNDAsMzQyODEsMzQyNjksMzQyODIs''@;'; put 'put ''MzQyNjEsMzQyNzYsMzQyNzcsMzQyOTUsMzQ4MTEsMzQ4MjEsMzQ4MjksMzQ4MDksMzQ4MTQsMzUxNjgsMzUxNjcsMzUxNTgsMzUxNjYsMzU2NDksMzU2NzYsMzU2NzIsMzU2NTcsMzU2NzQsMzU2NjIsMzU2NjMsMzU2NTQsMzU2NzMsMzYxMDQsMzYxMDYsMzY0NzYsMzY0NjYsMzY0ODcsMzY0''@;'; put 'put ''NzAsMzY0NjAsMzY0NzQsMzY0NjgsMzY2OTIsMzY2ODYsMzY3ODEsMzcwMDIsMzcwMDMsMzcyOTcsMzcyOTQsMzc4NTcsMzc4NDEsMzc4NTUsMzc4MjcsMzc4MzIsMzc4NTIsMzc4NTMsMzc4NDYsMzc4NTgsMzc4MzcsMzc4NDgsMzc4NjAsMzc4NDcsMzc4NjQsMzgzNjQsMzg1ODAsMzg2Mjcs''@;'; put 'put ''Mzg2OTgsMzg2OTUsMzg3NTMsMzg4NzYsMzg5MDcsMzkwMDYsMzllMywzOTAwMywzOTEwMCwzOTIzNywzOTI0MSwzOTQ0NiwzOTQ0OSwzOTY5MywzOTkxMiwzOTkxMSwzOTg5NCwzOTg5OSw0MDMyOSw0MDI4OSw0MDMwNiw0MDI5OCw0MDMwMCw0MDU5NCw0MDU5OSw0MDU5NSw0MDYyOCwyMTI0''@;'; put 'put ''MCwyMjE4NCwyMjE5OSwyMjE5OCwyMjE5NiwyMjIwNCwyMjc1NiwyMzM2MCwyMzM2MywyMzQyMSwyMzU0MiwyNDAwOSwyNTA4MCwyNTA4MiwyNTg4MCwyNTg3NiwyNTg4MSwyNjM0MiwyNjQwNywyNzM3MiwyODczNCwyODcyMCwyODcyMiwyOTIwMCwyOTU2MywyOTkwMywzMDMwNiwzMDMwOSwz''@;'; put 'put ''MTAxNCwzMTAxOCwzMTAyMCwzMTAxOSwzMTQzMSwzMTQ3OCwzMTgyMCwzMTgxMSwzMTgyMSwzMTk4MywzMTk4NCwzNjc4MiwzMjM4MSwzMjM4MCwzMjM4NiwzMjU4OCwzMjc2OCwzMzI0MiwzMzM4MiwzNDI5OSwzNDI5NywzNDMyMSwzNDI5OCwzNDMxMCwzNDMxNSwzNDMxMSwzNDMxNCwzNDgz''@;'; put 'put ''NiwzNDgzNywzNTE3MiwzNTI1OCwzNTMyMCwzNTY5NiwzNTY5MiwzNTY4NiwzNTY5NSwzNTY3OSwzNTY5MSwzNjExMSwzNjEwOSwzNjQ4OSwzNjQ4MSwzNjQ4NSwzNjQ4MiwzNzMwMCwzNzMyMywzNzkxMiwzNzg5MSwzNzg4NSwzODM2OSwzODcwNCwzOTEwOCwzOTI1MCwzOTI0OSwzOTMzNiwz''@;'; put 'put ''OTQ2NywzOTQ3MiwzOTQ3OSwzOTQ3NywzOTk1NSwzOTk0OSw0MDU2OSw0MDYyOSw0MDY4MCw0MDc1MSw0MDc5OSw0MDgwMyw0MDgwMSwyMDc5MSwyMDc5MiwyMjIwOSwyMjIwOCwyMjIxMCwyMjgwNCwyMzY2MCwyNDAxMywyNTA4NCwyNTA4NiwyNTg4NSwyNTg4NCwyNjAwNSwyNjM0NSwyNzM4''@;'; put 'put ''NywyNzM5NiwyNzM4NiwyNzU3MCwyODc0OCwyOTIxMSwyOTM1MSwyOTkxMCwyOTkwOCwzMDMxMywzMDY3NSwzMTgyNCwzMjM5OSwzMjM5NiwzMjcwMCwzNDMyNywzNDM0OSwzNDMzMCwzNDg1MSwzNDg1MCwzNDg0OSwzNDg0NywzNTE3OCwzNTE4MCwzNTI2MSwzNTcwMCwzNTcwMywzNTcwOSwz''@;'; put 'put ''NjExNSwzNjQ5MCwzNjQ5MywzNjQ5MSwzNjcwMywzNjc4MywzNzMwNiwzNzkzNCwzNzkzOSwzNzk0MSwzNzk0NiwzNzk0NCwzNzkzOCwzNzkzMSwzODM3MCwzODcxMiwzODcxMywzODcwNiwzODkxMSwzOTAxNSwzOTAxMywzOTI1NSwzOTQ5MywzOTQ5MSwzOTQ4OCwzOTQ4NiwzOTYzMSwzOTc2''@;'; put 'put ''NCwzOTc2MSwzOTk4MSwzOTk3Myw0MDM2Nyw0MDM3Miw0MDM4Niw0MDM3Niw0MDYwNSw0MDY4Nyw0MDcyOSw0MDc5Niw0MDgwNiw0MDgwNywyMDc5NiwyMDc5NSwyMjIxNiwyMjIxOCwyMjIxNywyMzQyMywyNDAyMCwyNDAxOCwyNDM5OCwyNTA4NywyNTg5MiwyNzQwMiwyNzQ4OSwyODc1Mywy''@;'; put 'put ''ODc2MCwyOTU2OCwyOTkyNCwzMDA5MCwzMDMxOCwzMDMxNiwzMTE1NSwzMTg0MCwzMTgzOSwzMjg5NCwzMjg5MywzMzI0NywzNTE4NiwzNTE4MywzNTMyNCwzNTcxMiwzNjExOCwzNjExOSwzNjQ5NywzNjQ5OSwzNjcwNSwzNzE5MiwzNzk1NiwzNzk2OSwzNzk3MCwzODcxNywzODcxOCwzODg1''@;'; put 'put ''MSwzODg0OSwzOTAxOSwzOTI1MywzOTUwOSwzOTUwMSwzOTYzNCwzOTcwNiw0MDAwOSwzOTk4NSwzOTk5OCwzOTk5NSw0MDQwMyw0MDQwNyw0MDc1Niw0MDgxMiw0MDgxMCw0MDg1MiwyMjIyMCwyNDAyMiwyNTA4OCwyNTg5MSwyNTg5OSwyNTg5OCwyNjM0OCwyNzQwOCwyOTkxNCwzMTQzNCwz''@;'; put 'put ''MTg0NCwzMTg0MywzMTg0NSwzMjQwMywzMjQwNiwzMjQwNCwzMzI1MCwzNDM2MCwzNDM2NywzNDg2NSwzNTcyMiwzNzAwOCwzNzAwNywzNzk4NywzNzk4NCwzNzk4OCwzODc2MCwzOTAyMywzOTI2MCwzOTUxNCwzOTUxNSwzOTUxMSwzOTYzNSwzOTYzNiwzOTYzMyw0MDAyMCw0MDAyMyw0MDAy''@;'; put 'put ''Miw0MDQyMSw0MDYwNyw0MDY5MiwyMjIyNSwyMjc2MSwyNTkwMCwyODc2NiwzMDMyMSwzMDMyMiwzMDY3OSwzMjU5MiwzMjY0OCwzNDg3MCwzNDg3MywzNDkxNCwzNTczMSwzNTczMCwzNTczNCwzMzM5OSwzNjEyMywzNzMxMiwzNzk5NCwzODcyMiwzODcyOCwzODcyNCwzODg1NCwzOTAyNCwz''@;'; put 'put ''OTUxOSwzOTcxNCwzOTc2OCw0MDAzMSw0MDQ0MSw0MDQ0Miw0MDU3Miw0MDU3Myw0MDcxMSw0MDgyMyw0MDgxOCwyNDMwNywyNzQxNCwyODc3MSwzMTg1MiwzMTg1NCwzNDg3NSwzNTI2NCwzNjUxMywzNzMxMywzODAwMiwzOGUzLDM5MDI1LDM5MjYyLDM5NjM4LDM5NzE1LDQwNjUyLDI4Nzcy''@;'; put 'put ''LDMwNjgyLDM1NzM4LDM4MDA3LDM4ODU3LDM5NTIyLDM5NTI1LDMyNDEyLDM1NzQwLDM2NTIyLDM3MzE3LDM4MDEzLDM4MDE0LDM4MDEyLDQwMDU1LDQwMDU2LDQwNjk1LDM1OTI0LDM4MDE1LDQwNDc0LDI5MjI0LDM5NTMwLDM5NzI5LDQwNDc1LDQwNDc4LDMxODU4LDkzMTIsOTMxMyw5MzE0''@;'; put 'put ''LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDIwMDIyLDIwMDMxLDIwMTAxLDIwMTI4LDIwODY2''@;'; put 'put ''LDIwODg2LDIwOTA3LDIxMjQxLDIxMzA0LDIxMzUzLDIxNDMwLDIyNzk0LDIzNDI0LDI0MDI3LDEyMDgzLDI0MTkxLDI0MzA4LDI0NDAwLDI0NDE3LDI1OTA4LDI2MDgwLDMwMDk4LDMwMzI2LDM2Nzg5LDM4NTgyLDE2OCw3MTAsMTI1NDEsMTI1NDIsMTI0NDUsMTI0NDYsMTIyOTEsMjAxODks''@;'; put 'put ''MTIyOTMsMTIyOTQsMTIyOTUsMTI1NDAsNjUzMzksNjUzNDEsMTAwNDUsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIz''@;'; put 'put ''NzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAs''@;'; put 'put ''MTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0''@;'; put 'put ''MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0Njgs''@;'; put 'put ''MTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0''@;'; put 'put ''OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMs''@;'; put 'put ''MTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4''@;'; put 'put ''LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkw''@;'; put 'put ''LDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODY3OSw4NjMyLDg2MzMsMTI3NTEsMTMxMjc2LDIwMDU4LDEzMTIxMCwyMDk5NCwxNzU1Myw0MDg4MCwyMDg3Miw0MDg4MSwxNjEyODcsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsMTI0NDMsMTI0NDQsMTE5MDQsMTE5MDgsMTE5MTAsMTE5MTEsMTE5MTIsMTE5MTQsMTE5MTYsMTE5MTcsMTE5MjUsMTE5MzIsMTE5MzMsMTE5NDEsMTE5NDMsMTE5NDYsMTE5NDgsMTE5NTAsMTE5''@;'; put 'put ''NTgsMTE5NjQsMTE5NjYsMTE5NzQsMTE5NzgsMTE5ODAsMTE5ODEsMTE5ODMsMTE5OTAsMTE5OTEsMTE5OTgsMTIwMDMsbnVsbCxudWxsLG51bGwsNjQzLDU5Miw2MDMsNTk2LDYyOSwzMzksMjQ4LDMzMSw2NTAsNjE4LDIwMDM0LDIwMDYwLDIwOTgxLDIxMjc0LDIxMzc4LDE5OTc1LDE5OTgw''@;'; put 'put ''LDIwMDM5LDIwMTA5LDIyMjMxLDY0MDEyLDIzNjYyLDI0NDM1LDE5OTgzLDIwODcxLDE5OTgyLDIwMDE0LDIwMTE1LDIwMTYyLDIwMTY5LDIwMTY4LDIwODg4LDIxMjQ0LDIxMzU2LDIxNDMzLDIyMzA0LDIyNzg3LDIyODI4LDIzNTY4LDI0MDYzLDI2MDgxLDI3NTcxLDI3NTk2LDI3NjY4LDI5''@;'; put 'put ''MjQ3LDIwMDE3LDIwMDI4LDIwMjAwLDIwMTg4LDIwMjAxLDIwMTkzLDIwMTg5LDIwMTg2LDIxMDA0LDIxMjc2LDIxMzI0LDIyMzA2LDIyMzA3LDIyODA3LDIyODMxLDIzNDI1LDIzNDI4LDIzNTcwLDIzNjExLDIzNjY4LDIzNjY3LDI0MDY4LDI0MTkyLDI0MTk0LDI0NTIxLDI1MDk3LDI1MTY4''@;'; put 'put ''LDI3NjY5LDI3NzAyLDI3NzE1LDI3NzExLDI3NzA3LDI5MzU4LDI5MzYwLDI5NTc4LDMxMTYwLDMyOTA2LDM4NDMwLDIwMjM4LDIwMjQ4LDIwMjY4LDIwMjEzLDIwMjQ0LDIwMjA5LDIwMjI0LDIwMjE1LDIwMjMyLDIwMjUzLDIwMjI2LDIwMjI5LDIwMjU4LDIwMjQzLDIwMjI4LDIwMjEyLDIw''@;'; put 'put ''MjQyLDIwOTEzLDIxMDExLDIxMDAxLDIxMDA4LDIxMTU4LDIxMjgyLDIxMjc5LDIxMzI1LDIxMzg2LDIxNTExLDIyMjQxLDIyMjM5LDIyMzE4LDIyMzE0LDIyMzI0LDIyODQ0LDIyOTEyLDIyOTA4LDIyOTE3LDIyOTA3LDIyOTEwLDIyOTAzLDIyOTExLDIzMzgyLDIzNTczLDIzNTg5LDIzNjc2''@;'; put 'put ''LDIzNjc0LDIzNjc1LDIzNjc4LDI0MDMxLDI0MTgxLDI0MTk2LDI0MzIyLDI0MzQ2LDI0NDM2LDI0NTMzLDI0NTMyLDI0NTI3LDI1MTgwLDI1MTgyLDI1MTg4LDI1MTg1LDI1MTkwLDI1MTg2LDI1MTc3LDI1MTg0LDI1MTc4LDI1MTg5LDI2MDk1LDI2MDk0LDI2NDMwLDI2NDI1LDI2NDI0LDI2''@;'; put 'put ''NDI3LDI2NDI2LDI2NDMxLDI2NDI4LDI2NDE5LDI3NjcyLDI3NzE4LDI3NzMwLDI3NzQwLDI3NzI3LDI3NzIyLDI3NzMyLDI3NzIzLDI3NzI0LDI4Nzg1LDI5Mjc4LDI5MzY0LDI5MzY1LDI5NTgyLDI5OTk0LDMwMzM1LDMxMzQ5LDMyNTkzLDMzNDAwLDMzNDA0LDMzNDA4LDMzNDA1LDMzNDA3''@;'; put 'put ''LDM0MzgxLDM1MTk4LDM3MDE3LDM3MDE1LDM3MDE2LDM3MDE5LDM3MDEyLDM4NDM0LDM4NDM2LDM4NDMyLDM4NDM1LDIwMzEwLDIwMjgzLDIwMzIyLDIwMjk3LDIwMzA3LDIwMzI0LDIwMjg2LDIwMzI3LDIwMzA2LDIwMzE5LDIwMjg5LDIwMzEyLDIwMjY5LDIwMjc1LDIwMjg3LDIwMzIxLDIw''@;'; put 'put ''ODc5LDIwOTIxLDIxMDIwLDIxMDIyLDIxMDI1LDIxMTY1LDIxMTY2LDIxMjU3LDIxMzQ3LDIxMzYyLDIxMzkwLDIxMzkxLDIxNTUyLDIxNTU5LDIxNTQ2LDIxNTg4LDIxNTczLDIxNTI5LDIxNTMyLDIxNTQxLDIxNTI4LDIxNTY1LDIxNTgzLDIxNTY5LDIxNTQ0LDIxNTQwLDIxNTc1LDIyMjU0''@;'; put 'put ''LDIyMjQ3LDIyMjQ1LDIyMzM3LDIyMzQxLDIyMzQ4LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyNzkwLDIyODQ4LDIyOTUwLDIyOTM2LDIyOTQ0LDIyOTM1LDIyOTI2LDIyOTQ2LDIyOTI4LDIyOTI3LDIyOTUxLDIyOTQ1LDIzNDM4LDIzNDQyLDIzNTkyLDIzNTk0LDIzNjkzLDIzNjk1LDIzNjg4LDIz''@;'; put 'put ''NjkxLDIzNjg5LDIzNjk4LDIzNjkwLDIzNjg2LDIzNjk5LDIzNzAxLDI0MDMyLDI0MDc0LDI0MDc4LDI0MjAzLDI0MjAxLDI0MjA0LDI0MjAwLDI0MjA1LDI0MzI1LDI0MzQ5LDI0NDQwLDI0NDM4LDI0NTMwLDI0NTI5LDI0NTI4LDI0NTU3LDI0NTUyLDI0NTU4LDI0NTYzLDI0NTQ1LDI0NTQ4''@;'; put 'put ''LDI0NTQ3LDI0NTcwLDI0NTU5LDI0NTY3LDI0NTcxLDI0NTc2LDI0NTY0LDI1MTQ2LDI1MjE5LDI1MjI4LDI1MjMwLDI1MjMxLDI1MjM2LDI1MjIzLDI1MjAxLDI1MjExLDI1MjEwLDI1MjAwLDI1MjE3LDI1MjI0LDI1MjA3LDI1MjEzLDI1MjAyLDI1MjA0LDI1OTExLDI2MDk2LDI2MTAwLDI2''@;'; put 'put ''MDk5LDI2MDk4LDI2MTAxLDI2NDM3LDI2NDM5LDI2NDU3LDI2NDUzLDI2NDQ0LDI2NDQwLDI2NDYxLDI2NDQ1LDI2NDU4LDI2NDQzLDI3NjAwLDI3NjczLDI3Njc0LDI3NzY4LDI3NzUxLDI3NzU1LDI3NzgwLDI3Nzg3LDI3NzkxLDI3NzYxLDI3NzU5LDI3NzUzLDI3ODAyLDI3NzU3LDI3Nzgz''@;'; put 'put ''LDI3Nzk3LDI3ODA0LDI3NzUwLDI3NzYzLDI3NzQ5LDI3NzcxLDI3NzkwLDI4Nzg4LDI4Nzk0LDI5MjgzLDI5Mzc1LDI5MzczLDI5Mzc5LDI5MzgyLDI5Mzc3LDI5MzcwLDI5MzgxLDI5NTg5LDI5NTkxLDI5NTg3LDI5NTg4LDI5NTg2LDMwMDEwLDMwMDA5LDMwMTAwLDMwMTAxLDMwMzM3LDMx''@;'; put 'put ''MDM3LDMyODIwLDMyOTE3LDMyOTIxLDMyOTEyLDMyOTE0LDMyOTI0LDMzNDI0LDMzNDIzLDMzNDEzLDMzNDIyLDMzNDI1LDMzNDI3LDMzNDE4LDMzNDExLDMzNDEyLDM1OTYwLDM2ODA5LDM2Nzk5LDM3MDIzLDM3MDI1LDM3MDI5LDM3MDIyLDM3MDMxLDM3MDI0LDM4NDQ4LDM4NDQwLDM4NDQ3''@;'; put 'put ''LDM4NDQ1LDIwMDE5LDIwMzc2LDIwMzQ4LDIwMzU3LDIwMzQ5LDIwMzUyLDIwMzU5LDIwMzQyLDIwMzQwLDIwMzYxLDIwMzU2LDIwMzQzLDIwMzAwLDIwMzc1LDIwMzMwLDIwMzc4LDIwMzQ1LDIwMzUzLDIwMzQ0LDIwMzY4LDIwMzgwLDIwMzcyLDIwMzgyLDIwMzcwLDIwMzU0LDIwMzczLDIw''@;'; put 'put ''MzMxLDIwMzM0LDIwODk0LDIwOTI0LDIwOTI2LDIxMDQ1LDIxMDQyLDIxMDQzLDIxMDYyLDIxMDQxLDIxMTgwLDIxMjU4LDIxMjU5LDIxMzA4LDIxMzk0LDIxMzk2LDIxNjM5LDIxNjMxLDIxNjMzLDIxNjQ5LDIxNjM0LDIxNjQwLDIxNjExLDIxNjI2LDIxNjMwLDIxNjA1LDIxNjEyLDIxNjIw''@;'; put 'put ''LDIxNjA2LDIxNjQ1LDIxNjE1LDIxNjAxLDIxNjAwLDIxNjU2LDIxNjAzLDIxNjA3LDIxNjA0LDIyMjYzLDIyMjY1LDIyMzgzLDIyMzg2LDIyMzgxLDIyMzc5LDIyMzg1LDIyMzg0LDIyMzkwLDIyNDAwLDIyMzg5LDIyMzk1LDIyMzg3LDIyMzg4LDIyMzcwLDIyMzc2LDIyMzk3LDIyNzk2LDIy''@;'; put 'put ''ODUzLDIyOTY1LDIyOTcwLDIyOTkxLDIyOTkwLDIyOTYyLDIyOTg4LDIyOTc3LDIyOTY2LDIyOTcyLDIyOTc5LDIyOTk4LDIyOTYxLDIyOTczLDIyOTc2LDIyOTg0LDIyOTY0LDIyOTgzLDIzMzk0LDIzMzk3LDIzNDQzLDIzNDQ1LDIzNjIwLDIzNjIzLDIzNzI2LDIzNzE2LDIzNzEyLDIzNzMz''@;'; put 'put ''LDIzNzI3LDIzNzIwLDIzNzI0LDIzNzExLDIzNzE1LDIzNzI1LDIzNzE0LDIzNzIyLDIzNzE5LDIzNzA5LDIzNzE3LDIzNzM0LDIzNzI4LDIzNzE4LDI0MDg3LDI0MDg0LDI0MDg5LDI0MzYwLDI0MzU0LDI0MzU1LDI0MzU2LDI0NDA0LDI0NDUwLDI0NDQ2LDI0NDQ1LDI0NTQyLDI0NTQ5LDI0''@;'; put 'put ''NjIxLDI0NjE0LDI0NjAxLDI0NjI2LDI0NTg3LDI0NjI4LDI0NTg2LDI0NTk5LDI0NjI3LDI0NjAyLDI0NjA2LDI0NjIwLDI0NjEwLDI0NTg5LDI0NTkyLDI0NjIyLDI0NTk1LDI0NTkzLDI0NTg4LDI0NTg1LDI0NjA0LDI1MTA4LDI1MTQ5LDI1MjYxLDI1MjY4LDI1Mjk3LDI1Mjc4LDI1MjU4''@;'; put 'put ''LDI1MjcwLDI1MjkwLDI1MjYyLDI1MjY3LDI1MjYzLDI1Mjc1LDI1MjU3LDI1MjY0LDI1MjcyLDI1OTE3LDI2MDI0LDI2MDQzLDI2MTIxLDI2MTA4LDI2MTE2LDI2MTMwLDI2MTIwLDI2MTA3LDI2MTE1LDI2MTIzLDI2MTI1LDI2MTE3LDI2MTA5LDI2MTI5LDI2MTI4LDI2MzU4LDI2Mzc4LDI2''@;'; put 'put ''NTAxLDI2NDc2LDI2NTEwLDI2NTE0LDI2NDg2LDI2NDkxLDI2NTIwLDI2NTAyLDI2NTAwLDI2NDg0LDI2NTA5LDI2NTA4LDI2NDkwLDI2NTI3LDI2NTEzLDI2NTIxLDI2NDk5LDI2NDkzLDI2NDk3LDI2NDg4LDI2NDg5LDI2NTE2LDI3NDI5LDI3NTIwLDI3NTE4LDI3NjE0LDI3Njc3LDI3Nzk1''@;'; put 'put ''LDI3ODg0LDI3ODgzLDI3ODg2LDI3ODY1LDI3ODMwLDI3ODYwLDI3ODIxLDI3ODc5LDI3ODMxLDI3ODU2LDI3ODQyLDI3ODM0LDI3ODQzLDI3ODQ2LDI3ODg1LDI3ODkwLDI3ODU4LDI3ODY5LDI3ODI4LDI3Nzg2LDI3ODA1LDI3Nzc2LDI3ODcwLDI3ODQwLDI3OTUyLDI3ODUzLDI3ODQ3LDI3''@;'; put 'put ''ODI0LDI3ODk3LDI3ODU1LDI3ODgxLDI3ODU3LDI4ODIwLDI4ODI0LDI4ODA1LDI4ODE5LDI4ODA2LDI4ODA0LDI4ODE3LDI4ODIyLDI4ODAyLDI4ODI2LDI4ODAzLDI5MjkwLDI5Mzk4LDI5Mzg3LDI5NDAwLDI5Mzg1LDI5NDA0LDI5Mzk0LDI5Mzk2LDI5NDAyLDI5Mzg4LDI5MzkzLDI5NjA0''@;'; put 'put ''LDI5NjAxLDI5NjEzLDI5NjA2LDI5NjAyLDI5NjAwLDI5NjEyLDI5NTk3LDI5OTE3LDI5OTI4LDMwMDE1LDMwMDE2LDMwMDE0LDMwMDkyLDMwMTA0LDMwMzgzLDMwNDUxLDMwNDQ5LDMwNDQ4LDMwNDUzLDMwNzEyLDMwNzE2LDMwNzEzLDMwNzE1LDMwNzE0LDMwNzExLDMxMDQyLDMxMDM5LDMx''@;'; put 'put ''MTczLDMxMzUyLDMxMzU1LDMxNDgzLDMxODYxLDMxOTk3LDMyODIxLDMyOTExLDMyOTQyLDMyOTMxLDMyOTUyLDMyOTQ5LDMyOTQxLDMzMzEyLDMzNDQwLDMzNDcyLDMzNDUxLDMzNDM0LDMzNDMyLDMzNDM1LDMzNDYxLDMzNDQ3LDMzNDU0LDMzNDY4LDMzNDM4LDMzNDY2LDMzNDYwLDMzNDQ4''@;'; put 'put ''LDMzNDQxLDMzNDQ5LDMzNDc0LDMzNDQ0LDMzNDc1LDMzNDYyLDMzNDQyLDM0NDE2LDM0NDE1LDM0NDEzLDM0NDE0LDM1OTI2LDM2ODE4LDM2ODExLDM2ODE5LDM2ODEzLDM2ODIyLDM2ODIxLDM2ODIzLDM3MDQyLDM3MDQ0LDM3MDM5LDM3MDQzLDM3MDQwLDM4NDU3LDM4NDYxLDM4NDYwLDM4''@;'; put 'put ''NDU4LDM4NDY3LDIwNDI5LDIwNDIxLDIwNDM1LDIwNDAyLDIwNDI1LDIwNDI3LDIwNDE3LDIwNDM2LDIwNDQ0LDIwNDQxLDIwNDExLDIwNDAzLDIwNDQzLDIwNDIzLDIwNDM4LDIwNDEwLDIwNDE2LDIwNDA5LDIwNDYwLDIxMDYwLDIxMDY1LDIxMTg0LDIxMTg2LDIxMzA5LDIxMzcyLDIxMzk5''@;'; put 'put ''LDIxMzk4LDIxNDAxLDIxNDAwLDIxNjkwLDIxNjY1LDIxNjc3LDIxNjY5LDIxNzExLDIxNjk5LDMzNTQ5LDIxNjg3LDIxNjc4LDIxNzE4LDIxNjg2LDIxNzAxLDIxNzAyLDIxNjY0LDIxNjE2LDIxNjkyLDIxNjY2LDIxNjk0LDIxNjE4LDIxNzI2LDIxNjgwLDIyNDUzLDIyNDMwLDIyNDMxLDIy''@;'; put 'put ''NDM2LDIyNDEyLDIyNDIzLDIyNDI5LDIyNDI3LDIyNDIwLDIyNDI0LDIyNDE1LDIyNDI1LDIyNDM3LDIyNDI2LDIyNDIxLDIyNzcyLDIyNzk3LDIyODY3LDIzMDA5LDIzMDA2LDIzMDIyLDIzMDQwLDIzMDI1LDIzMDA1LDIzMDM0LDIzMDM3LDIzMDM2LDIzMDMwLDIzMDEyLDIzMDI2LDIzMDMx''@;'; put 'put ''LDIzMDAzLDIzMDE3LDIzMDI3LDIzMDI5LDIzMDA4LDIzMDM4LDIzMDI4LDIzMDIxLDIzNDY0LDIzNjI4LDIzNzYwLDIzNzY4LDIzNzU2LDIzNzY3LDIzNzU1LDIzNzcxLDIzNzc0LDIzNzcwLDIzNzUzLDIzNzUxLDIzNzU0LDIzNzY2LDIzNzYzLDIzNzY0LDIzNzU5LDIzNzUyLDIzNzUwLDIz''@;'; put 'put ''NzU4LDIzNzc1LDIzODAwLDI0MDU3LDI0MDk3LDI0MDk4LDI0MDk5LDI0MDk2LDI0MTAwLDI0MjQwLDI0MjI4LDI0MjI2LDI0MjE5LDI0MjI3LDI0MjI5LDI0MzI3LDI0MzY2LDI0NDA2LDI0NDU0LDI0NjMxLDI0NjMzLDI0NjYwLDI0NjkwLDI0NjcwLDI0NjQ1LDI0NjU5LDI0NjQ3LDI0NjQ5''@;'; put 'put ''LDI0NjY3LDI0NjUyLDI0NjQwLDI0NjQyLDI0NjcxLDI0NjEyLDI0NjQ0LDI0NjY0LDI0Njc4LDI0Njg2LDI1MTU0LDI1MTU1LDI1Mjk1LDI1MzU3LDI1MzU1LDI1MzMzLDI1MzU4LDI1MzQ3LDI1MzIzLDI1MzM3LDI1MzU5LDI1MzU2LDI1MzM2LDI1MzM0LDI1MzQ0LDI1MzYzLDI1MzY0LDI1''@;'; put 'put ''MzM4LDI1MzY1LDI1MzM5LDI1MzI4LDI1OTIxLDI1OTIzLDI2MDI2LDI2MDQ3LDI2MTY2LDI2MTQ1LDI2MTYyLDI2MTY1LDI2MTQwLDI2MTUwLDI2MTQ2LDI2MTYzLDI2MTU1LDI2MTcwLDI2MTQxLDI2MTY0LDI2MTY5LDI2MTU4LDI2MzgzLDI2Mzg0LDI2NTYxLDI2NjEwLDI2NTY4LDI2NTU0''@;'; put 'put ''LDI2NTg4LDI2NTU1LDI2NjE2LDI2NTg0LDI2NTYwLDI2NTUxLDI2NTY1LDI2NjAzLDI2NTk2LDI2NTkxLDI2NTQ5LDI2NTczLDI2NTQ3LDI2NjE1LDI2NjE0LDI2NjA2LDI2NTk1LDI2NTYyLDI2NTUzLDI2NTc0LDI2NTk5LDI2NjA4LDI2NTQ2LDI2NjIwLDI2NTY2LDI2NjA1LDI2NTcyLDI2''@;'; put 'put ''NTQyLDI2NTk4LDI2NTg3LDI2NjE4LDI2NTY5LDI2NTcwLDI2NTYzLDI2NjAyLDI2NTcxLDI3NDMyLDI3NTIyLDI3NTI0LDI3NTc0LDI3NjA2LDI3NjA4LDI3NjE2LDI3NjgwLDI3NjgxLDI3OTQ0LDI3OTU2LDI3OTQ5LDI3OTM1LDI3OTY0LDI3OTY3LDI3OTIyLDI3OTE0LDI3ODY2LDI3OTU1''@;'; put 'put ''LDI3OTA4LDI3OTI5LDI3OTYyLDI3OTMwLDI3OTIxLDI3OTA0LDI3OTMzLDI3OTcwLDI3OTA1LDI3OTI4LDI3OTU5LDI3OTA3LDI3OTE5LDI3OTY4LDI3OTExLDI3OTM2LDI3OTQ4LDI3OTEyLDI3OTM4LDI3OTEzLDI3OTIwLDI4ODU1LDI4ODMxLDI4ODYyLDI4ODQ5LDI4ODQ4LDI4ODMzLDI4''@;'; put 'put ''ODUyLDI4ODUzLDI4ODQxLDI5MjQ5LDI5MjU3LDI5MjU4LDI5MjkyLDI5Mjk2LDI5Mjk5LDI5Mjk0LDI5Mzg2LDI5NDEyLDI5NDE2LDI5NDE5LDI5NDA3LDI5NDE4LDI5NDE0LDI5NDExLDI5NTczLDI5NjQ0LDI5NjM0LDI5NjQwLDI5NjM3LDI5NjI1LDI5NjIyLDI5NjIxLDI5NjIwLDI5Njc1''@;'; put 'put ''LDI5NjMxLDI5NjM5LDI5NjMwLDI5NjM1LDI5NjM4LDI5NjI0LDI5NjQzLDI5OTMyLDI5OTM0LDI5OTk4LDMwMDIzLDMwMDI0LDMwMTE5LDMwMTIyLDMwMzI5LDMwNDA0LDMwNDcyLDMwNDY3LDMwNDY4LDMwNDY5LDMwNDc0LDMwNDU1LDMwNDU5LDMwNDU4LDMwNjk1LDMwNjk2LDMwNzI2LDMw''@;'; put 'put ''NzM3LDMwNzM4LDMwNzI1LDMwNzM2LDMwNzM1LDMwNzM0LDMwNzI5LDMwNzIzLDMwNzM5LDMxMDUwLDMxMDUyLDMxMDUxLDMxMDQ1LDMxMDQ0LDMxMTg5LDMxMTgxLDMxMTgzLDMxMTkwLDMxMTgyLDMxMzYwLDMxMzU4LDMxNDQxLDMxNDg4LDMxNDg5LDMxODY2LDMxODY0LDMxODY1LDMxODcx''@;'; put 'put ''LDMxODcyLDMxODczLDMyMDAzLDMyMDA4LDMyMDAxLDMyNjAwLDMyNjU3LDMyNjUzLDMyNzAyLDMyNzc1LDMyNzgyLDMyNzgzLDMyNzg4LDMyODIzLDMyOTg0LDMyOTY3LDMyOTkyLDMyOTc3LDMyOTY4LDMyOTYyLDMyOTc2LDMyOTY1LDMyOTk1LDMyOTg1LDMyOTg4LDMyOTcwLDMyOTgxLDMy''@;'; put 'put ''OTY5LDMyOTc1LDMyOTgzLDMyOTk4LDMyOTczLDMzMjc5LDMzMzEzLDMzNDI4LDMzNDk3LDMzNTM0LDMzNTI5LDMzNTQzLDMzNTEyLDMzNTM2LDMzNDkzLDMzNTk0LDMzNTE1LDMzNDk0LDMzNTI0LDMzNTE2LDMzNTA1LDMzNTIyLDMzNTI1LDMzNTQ4LDMzNTMxLDMzNTI2LDMzNTIwLDMzNTE0''@;'; put 'put ''LDMzNTA4LDMzNTA0LDMzNTMwLDMzNTIzLDMzNTE3LDM0NDIzLDM0NDIwLDM0NDI4LDM0NDE5LDM0ODgxLDM0ODk0LDM0OTE5LDM0OTIyLDM0OTIxLDM1MjgzLDM1MzMyLDM1MzM1LDM2MjEwLDM2ODM1LDM2ODMzLDM2ODQ2LDM2ODMyLDM3MTA1LDM3MDUzLDM3MDU1LDM3MDc3LDM3MDYxLDM3''@;'; put 'put ''MDU0LDM3MDYzLDM3MDY3LDM3MDY0LDM3MzMyLDM3MzMxLDM4NDg0LDM4NDc5LDM4NDgxLDM4NDgzLDM4NDc0LDM4NDc4LDIwNTEwLDIwNDg1LDIwNDg3LDIwNDk5LDIwNTE0LDIwNTI4LDIwNTA3LDIwNDY5LDIwNDY4LDIwNTMxLDIwNTM1LDIwNTI0LDIwNDcwLDIwNDcxLDIwNTAzLDIwNTA4''@;'; put 'put ''LDIwNTEyLDIwNTE5LDIwNTMzLDIwNTI3LDIwNTI5LDIwNDk0LDIwODI2LDIwODg0LDIwODgzLDIwOTM4LDIwOTMyLDIwOTMzLDIwOTM2LDIwOTQyLDIxMDg5LDIxMDgyLDIxMDc0LDIxMDg2LDIxMDg3LDIxMDc3LDIxMDkwLDIxMTk3LDIxMjYyLDIxNDA2LDIxNzk4LDIxNzMwLDIxNzgzLDIx''@;'; put 'put ''Nzc4LDIxNzM1LDIxNzQ3LDIxNzMyLDIxNzg2LDIxNzU5LDIxNzY0LDIxNzY4LDIxNzM5LDIxNzc3LDIxNzY1LDIxNzQ1LDIxNzcwLDIxNzU1LDIxNzUxLDIxNzUyLDIxNzI4LDIxNzc0LDIxNzYzLDIxNzcxLDIyMjczLDIyMjc0LDIyNDc2LDIyNTc4LDIyNDg1LDIyNDgyLDIyNDU4LDIyNDcw''@;'; put 'put ''LDIyNDYxLDIyNDYwLDIyNDU2LDIyNDU0LDIyNDYzLDIyNDcxLDIyNDgwLDIyNDU3LDIyNDY1LDIyNzk4LDIyODU4LDIzMDY1LDIzMDYyLDIzMDg1LDIzMDg2LDIzMDYxLDIzMDU1LDIzMDYzLDIzMDUwLDIzMDcwLDIzMDkxLDIzNDA0LDIzNDYzLDIzNDY5LDIzNDY4LDIzNTU1LDIzNjM4LDIz''@;'; put 'put ''NjM2LDIzNzg4LDIzODA3LDIzNzkwLDIzNzkzLDIzNzk5LDIzODA4LDIzODAxLDI0MTA1LDI0MTA0LDI0MjMyLDI0MjM4LDI0MjM0LDI0MjM2LDI0MzcxLDI0MzY4LDI0NDIzLDI0NjY5LDI0NjY2LDI0Njc5LDI0NjQxLDI0NzM4LDI0NzEyLDI0NzA0LDI0NzIyLDI0NzA1LDI0NzMzLDI0NzA3''@;'; put 'put ''LDI0NzI1LDI0NzMxLDI0NzI3LDI0NzExLDI0NzMyLDI0NzE4LDI1MTEzLDI1MTU4LDI1MzMwLDI1MzYwLDI1NDMwLDI1Mzg4LDI1NDEyLDI1NDEzLDI1Mzk4LDI1NDExLDI1NTcyLDI1NDAxLDI1NDE5LDI1NDE4LDI1NDA0LDI1Mzg1LDI1NDA5LDI1Mzk2LDI1NDMyLDI1NDI4LDI1NDMzLDI1''@;'; put 'put ''Mzg5LDI1NDE1LDI1Mzk1LDI1NDM0LDI1NDI1LDI1NDAwLDI1NDMxLDI1NDA4LDI1NDE2LDI1OTMwLDI1OTI2LDI2MDU0LDI2MDUxLDI2MDUyLDI2MDUwLDI2MTg2LDI2MjA3LDI2MTgzLDI2MTkzLDI2Mzg2LDI2Mzg3LDI2NjU1LDI2NjUwLDI2Njk3LDI2Njc0LDI2Njc1LDI2NjgzLDI2Njk5''@;'; put 'put ''LDI2NzAzLDI2NjQ2LDI2NjczLDI2NjUyLDI2Njc3LDI2NjY3LDI2NjY5LDI2NjcxLDI2NzAyLDI2NjkyLDI2Njc2LDI2NjUzLDI2NjQyLDI2NjQ0LDI2NjYyLDI2NjY0LDI2NjcwLDI2NzAxLDI2NjgyLDI2NjYxLDI2NjU2LDI3NDM2LDI3NDM5LDI3NDM3LDI3NDQxLDI3NDQ0LDI3NTAxLDMy''@;'; put 'put ''ODk4LDI3NTI4LDI3NjIyLDI3NjIwLDI3NjI0LDI3NjE5LDI3NjE4LDI3NjIzLDI3Njg1LDI4MDI2LDI4MDAzLDI4MDA0LDI4MDIyLDI3OTE3LDI4MDAxLDI4MDUwLDI3OTkyLDI4MDAyLDI4MDEzLDI4MDE1LDI4MDQ5LDI4MDQ1LDI4MTQzLDI4MDMxLDI4MDM4LDI3OTk4LDI4MDA3LDI4ZTMs''@;'; put 'put ''MjgwNTUsMjgwMTYsMjgwMjgsMjc5OTksMjgwMzQsMjgwNTYsMjc5NTEsMjgwMDgsMjgwNDMsMjgwMzAsMjgwMzIsMjgwMzYsMjc5MjYsMjgwMzUsMjgwMjcsMjgwMjksMjgwMjEsMjgwNDgsMjg4OTIsMjg4ODMsMjg4ODEsMjg4OTMsMjg4NzUsMzI1NjksMjg4OTgsMjg4ODcsMjg4ODIsMjg4''@;'; put 'put ''OTQsMjg4OTYsMjg4ODQsMjg4NzcsMjg4NjksMjg4NzAsMjg4NzEsMjg4OTAsMjg4NzgsMjg4OTcsMjkyNTAsMjkzMDQsMjkzMDMsMjkzMDIsMjk0NDAsMjk0MzQsMjk0MjgsMjk0MzgsMjk0MzAsMjk0MjcsMjk0MzUsMjk0NDEsMjk2NTEsMjk2NTcsMjk2NjksMjk2NTQsMjk2MjgsMjk2NzEs''@;'; put 'put ''Mjk2NjcsMjk2NzMsMjk2NjAsMjk2NTAsMjk2NTksMjk2NTIsMjk2NjEsMjk2NTgsMjk2NTUsMjk2NTYsMjk2NzIsMjk5MTgsMjk5MTksMjk5NDAsMjk5NDEsMjk5ODUsMzAwNDMsMzAwNDcsMzAxMjgsMzAxNDUsMzAxMzksMzAxNDgsMzAxNDQsMzAxNDMsMzAxMzQsMzAxMzgsMzAzNDYsMzA0''@;'; put 'put ''MDksMzA0OTMsMzA0OTEsMzA0ODAsMzA0ODMsMzA0ODIsMzA0OTksMzA0ODEsMzA0ODUsMzA0ODksMzA0OTAsMzA0OTgsMzA1MDMsMzA3NTUsMzA3NjQsMzA3NTQsMzA3NzMsMzA3NjcsMzA3NjAsMzA3NjYsMzA3NjMsMzA3NTMsMzA3NjEsMzA3NzEsMzA3NjIsMzA3NjksMzEwNjAsMzEwNjcs''@;'; put 'put ''MzEwNTUsMzEwNjgsMzEwNTksMzEwNTgsMzEwNTcsMzEyMTEsMzEyMTIsMzEyMDAsMzEyMTQsMzEyMTMsMzEyMTAsMzExOTYsMzExOTgsMzExOTcsMzEzNjYsMzEzNjksMzEzNjUsMzEzNzEsMzEzNzIsMzEzNzAsMzEzNjcsMzE0NDgsMzE1MDQsMzE0OTIsMzE1MDcsMzE0OTMsMzE1MDMsMzE0''@;'; put 'put ''OTYsMzE0OTgsMzE1MDIsMzE0OTcsMzE1MDYsMzE4NzYsMzE4ODksMzE4ODIsMzE4ODQsMzE4ODAsMzE4ODUsMzE4NzcsMzIwMzAsMzIwMjksMzIwMTcsMzIwMTQsMzIwMjQsMzIwMjIsMzIwMTksMzIwMzEsMzIwMTgsMzIwMTUsMzIwMTIsMzI2MDQsMzI2MDksMzI2MDYsMzI2MDgsMzI2MDUs''@;'; put 'put ''MzI2MDMsMzI2NjIsMzI2NTgsMzI3MDcsMzI3MDYsMzI3MDQsMzI3OTAsMzI4MzAsMzI4MjUsMzMwMTgsMzMwMTAsMzMwMTcsMzMwMTMsMzMwMjUsMzMwMTksMzMwMjQsMzMyODEsMzMzMjcsMzMzMTcsMzM1ODcsMzM1ODEsMzM2MDQsMzM1NjEsMzM2MTcsMzM1NzMsMzM2MjIsMzM1OTksMzM2''@;'; put 'put ''MDEsMzM1NzQsMzM1NjQsMzM1NzAsMzM2MDIsMzM2MTQsMzM1NjMsMzM1NzgsMzM1NDQsMzM1OTYsMzM2MTMsMzM1NTgsMzM1NzIsMzM1NjgsMzM1OTEsMzM1ODMsMzM1NzcsMzM2MDcsMzM2MDUsMzM2MTIsMzM2MTksMzM1NjYsMzM1ODAsMzM2MTEsMzM1NzUsMzM2MDgsMzQzODcsMzQzODYs''@;'; put 'put ''MzQ0NjYsMzQ0NzIsMzQ0NTQsMzQ0NDUsMzQ0NDksMzQ0NjIsMzQ0MzksMzQ0NTUsMzQ0MzgsMzQ0NDMsMzQ0NTgsMzQ0MzcsMzQ0NjksMzQ0NTcsMzQ0NjUsMzQ0NzEsMzQ0NTMsMzQ0NTYsMzQ0NDYsMzQ0NjEsMzQ0NDgsMzQ0NTIsMzQ4ODMsMzQ4ODQsMzQ5MjUsMzQ5MzMsMzQ5MzQsMzQ5''@;'; put 'put ''MzAsMzQ5NDQsMzQ5MjksMzQ5NDMsMzQ5MjcsMzQ5NDcsMzQ5NDIsMzQ5MzIsMzQ5NDAsMzUzNDYsMzU5MTEsMzU5MjcsMzU5NjMsMzYwMDQsMzYwMDMsMzYyMTQsMzYyMTYsMzYyNzcsMzYyNzksMzYyNzgsMzY1NjEsMzY1NjMsMzY4NjIsMzY4NTMsMzY4NjYsMzY4NjMsMzY4NTksMzY4Njgs''@;'; put 'put ''MzY4NjAsMzY4NTQsMzcwNzgsMzcwODgsMzcwODEsMzcwODIsMzcwOTEsMzcwODcsMzcwOTMsMzcwODAsMzcwODMsMzcwNzksMzcwODQsMzcwOTIsMzcyMDAsMzcxOTgsMzcxOTksMzczMzMsMzczNDYsMzczMzgsMzg0OTIsMzg0OTUsMzg1ODgsMzkxMzksMzk2NDcsMzk3MjcsMjAwOTUsMjA1''@;'; put 'put ''OTIsMjA1ODYsMjA1NzcsMjA1NzQsMjA1NzYsMjA1NjMsMjA1NTUsMjA1NzMsMjA1OTQsMjA1NTIsMjA1NTcsMjA1NDUsMjA1NzEsMjA1NTQsMjA1NzgsMjA1MDEsMjA1NDksMjA1NzUsMjA1ODUsMjA1ODcsMjA1NzksMjA1ODAsMjA1NTAsMjA1NDQsMjA1OTAsMjA1OTUsMjA1NjcsMjA1NjEs''@;'; put 'put ''MjA5NDQsMjEwOTksMjExMDEsMjExMDAsMjExMDIsMjEyMDYsMjEyMDMsMjEyOTMsMjE0MDQsMjE4NzcsMjE4NzgsMjE4MjAsMjE4MzcsMjE4NDAsMjE4MTIsMjE4MDIsMjE4NDEsMjE4NTgsMjE4MTQsMjE4MTMsMjE4MDgsMjE4NDIsMjE4MjksMjE3NzIsMjE4MTAsMjE4NjEsMjE4MzgsMjE4''@;'; put 'put ''MTcsMjE4MzIsMjE4MDUsMjE4MTksMjE4MjQsMjE4MzUsMjIyODIsMjIyNzksMjI1MjMsMjI1NDgsMjI0OTgsMjI1MTgsMjI0OTIsMjI1MTYsMjI1MjgsMjI1MDksMjI1MjUsMjI1MzYsMjI1MjAsMjI1MzksMjI1MTUsMjI0NzksMjI1MzUsMjI1MTAsMjI0OTksMjI1MTQsMjI1MDEsMjI1MDgs''@;'; put 'put ''MjI0OTcsMjI1NDIsMjI1MjQsMjI1NDQsMjI1MDMsMjI1MjksMjI1NDAsMjI1MTMsMjI1MDUsMjI1MTIsMjI1NDEsMjI1MzIsMjI4NzYsMjMxMzYsMjMxMjgsMjMxMjUsMjMxNDMsMjMxMzQsMjMwOTYsMjMwOTMsMjMxNDksMjMxMjAsMjMxMzUsMjMxNDEsMjMxNDgsMjMxMjMsMjMxNDAsMjMx''@;'; put 'put ''MjcsMjMxMDcsMjMxMzMsMjMxMjIsMjMxMDgsMjMxMzEsMjMxMTIsMjMxODIsMjMxMDIsMjMxMTcsMjMwOTcsMjMxMTYsMjMxNTIsMjMxNDUsMjMxMTEsMjMxMjEsMjMxMjYsMjMxMDYsMjMxMzIsMjM0MTAsMjM0MDYsMjM0ODksMjM0ODgsMjM2NDEsMjM4MzgsMjM4MTksMjM4MzcsMjM4MzQs''@;'; put 'put ''MjM4NDAsMjM4MjAsMjM4NDgsMjM4MjEsMjM4NDYsMjM4NDUsMjM4MjMsMjM4NTYsMjM4MjYsMjM4NDMsMjM4MzksMjM4NTQsMjQxMjYsMjQxMTYsMjQyNDEsMjQyNDQsMjQyNDksMjQyNDIsMjQyNDMsMjQzNzQsMjQzNzYsMjQ0NzUsMjQ0NzAsMjQ0NzksMjQ3MTQsMjQ3MjAsMjQ3MTAsMjQ3''@;'; put 'put ''NjYsMjQ3NTIsMjQ3NjIsMjQ3ODcsMjQ3ODgsMjQ3ODMsMjQ4MDQsMjQ3OTMsMjQ3OTcsMjQ3NzYsMjQ3NTMsMjQ3OTUsMjQ3NTksMjQ3NzgsMjQ3NjcsMjQ3NzEsMjQ3ODEsMjQ3NjgsMjUzOTQsMjU0NDUsMjU0ODIsMjU0NzQsMjU0NjksMjU1MzMsMjU1MDIsMjU1MTcsMjU1MDEsMjU0OTUs''@;'; put 'put ''MjU1MTUsMjU0ODYsMjU0NTUsMjU0NzksMjU0ODgsMjU0NTQsMjU1MTksMjU0NjEsMjU1MDAsMjU0NTMsMjU1MTgsMjU0NjgsMjU1MDgsMjU0MDMsMjU1MDMsMjU0NjQsMjU0NzcsMjU0NzMsMjU0ODksMjU0ODUsMjU0NTYsMjU5MzksMjYwNjEsMjYyMTMsMjYyMDksMjYyMDMsMjYyMDEsMjYy''@;'; put 'put ''MDQsMjYyMTAsMjYzOTIsMjY3NDUsMjY3NTksMjY3NjgsMjY3ODAsMjY3MzMsMjY3MzQsMjY3OTgsMjY3OTUsMjY5NjYsMjY3MzUsMjY3ODcsMjY3OTYsMjY3OTMsMjY3NDEsMjY3NDAsMjY4MDIsMjY3NjcsMjY3NDMsMjY3NzAsMjY3NDgsMjY3MzEsMjY3MzgsMjY3OTQsMjY3NTIsMjY3Mzcs''@;'; put 'put ''MjY3NTAsMjY3NzksMjY3NzQsMjY3NjMsMjY3ODQsMjY3NjEsMjY3ODgsMjY3NDQsMjY3NDcsMjY3NjksMjY3NjQsMjY3NjIsMjY3NDksMjc0NDYsMjc0NDMsMjc0NDcsMjc0NDgsMjc1MzcsMjc1MzUsMjc1MzMsMjc1MzQsMjc1MzIsMjc2OTAsMjgwOTYsMjgwNzUsMjgwODQsMjgwODMsMjgy''@;'; put 'put ''NzYsMjgwNzYsMjgxMzcsMjgxMzAsMjgwODcsMjgxNTAsMjgxMTYsMjgxNjAsMjgxMDQsMjgxMjgsMjgxMjcsMjgxMTgsMjgwOTQsMjgxMzMsMjgxMjQsMjgxMjUsMjgxMjMsMjgxNDgsMjgxMDYsMjgwOTMsMjgxNDEsMjgxNDQsMjgwOTAsMjgxMTcsMjgwOTgsMjgxMTEsMjgxMDUsMjgxMTIs''@;'; put 'put ''MjgxNDYsMjgxMTUsMjgxNTcsMjgxMTksMjgxMDksMjgxMzEsMjgwOTEsMjg5MjIsMjg5NDEsMjg5MTksMjg5NTEsMjg5MTYsMjg5NDAsMjg5MTIsMjg5MzIsMjg5MTUsMjg5NDQsMjg5MjQsMjg5MjcsMjg5MzQsMjg5NDcsMjg5MjgsMjg5MjAsMjg5MTgsMjg5MzksMjg5MzAsMjg5NDIsMjkz''@;'; put 'put ''MTAsMjkzMDcsMjkzMDgsMjkzMTEsMjk0NjksMjk0NjMsMjk0NDcsMjk0NTcsMjk0NjQsMjk0NTAsMjk0NDgsMjk0MzksMjk0NTUsMjk0NzAsMjk1NzYsMjk2ODYsMjk2ODgsMjk2ODUsMjk3MDAsMjk2OTcsMjk2OTMsMjk3MDMsMjk2OTYsMjk2OTAsMjk2OTIsMjk2OTUsMjk3MDgsMjk3MDcs''@;'; put 'put ''Mjk2ODQsMjk3MDQsMzAwNTIsMzAwNTEsMzAxNTgsMzAxNjIsMzAxNTksMzAxNTUsMzAxNTYsMzAxNjEsMzAxNjAsMzAzNTEsMzAzNDUsMzA0MTksMzA1MjEsMzA1MTEsMzA1MDksMzA1MTMsMzA1MTQsMzA1MTYsMzA1MTUsMzA1MjUsMzA1MDEsMzA1MjMsMzA1MTcsMzA3OTIsMzA4MDIsMzA3''@;'; put 'put ''OTMsMzA3OTcsMzA3OTQsMzA3OTYsMzA3NTgsMzA3ODksMzA4MDAsMzEwNzYsMzEwNzksMzEwODEsMzEwODIsMzEwNzUsMzEwODMsMzEwNzMsMzExNjMsMzEyMjYsMzEyMjQsMzEyMjIsMzEyMjMsMzEzNzUsMzEzODAsMzEzNzYsMzE1NDEsMzE1NTksMzE1NDAsMzE1MjUsMzE1MzYsMzE1MjIs''@;'; put 'put ''MzE1MjQsMzE1MzksMzE1MTIsMzE1MzAsMzE1MTcsMzE1MzcsMzE1MzEsMzE1MzMsMzE1MzUsMzE1MzgsMzE1NDQsMzE1MTQsMzE1MjMsMzE4OTIsMzE4OTYsMzE4OTQsMzE5MDcsMzIwNTMsMzIwNjEsMzIwNTYsMzIwNTQsMzIwNTgsMzIwNjksMzIwNDQsMzIwNDEsMzIwNjUsMzIwNzEsMzIw''@;'; put 'put ''NjIsMzIwNjMsMzIwNzQsMzIwNTksMzIwNDAsMzI2MTEsMzI2NjEsMzI2NjgsMzI2NjksMzI2NjcsMzI3MTQsMzI3MTUsMzI3MTcsMzI3MjAsMzI3MjEsMzI3MTEsMzI3MTksMzI3MTMsMzI3OTksMzI3OTgsMzI3OTUsMzI4MzksMzI4MzUsMzI4NDAsMzMwNDgsMzMwNjEsMzMwNDksMzMwNTEs''@;'; put 'put ''MzMwNjksMzMwNTUsMzMwNjgsMzMwNTQsMzMwNTcsMzMwNDUsMzMwNjMsMzMwNTMsMzMwNTgsMzMyOTcsMzMzMzYsMzMzMzEsMzMzMzgsMzMzMzIsMzMzMzAsMzMzOTYsMzM2ODAsMzM2OTksMzM3MDQsMzM2NzcsMzM2NTgsMzM2NTEsMzM3MDAsMzM2NTIsMzM2NzksMzM2NjUsMzM2ODUsMzM2''@;'; put 'put ''ODksMzM2NTMsMzM2ODQsMzM3MDUsMzM2NjEsMzM2NjcsMzM2NzYsMzM2OTMsMzM2OTEsMzM3MDYsMzM2NzUsMzM2NjIsMzM3MDEsMzM3MTEsMzM2NzIsMzM2ODcsMzM3MTIsMzM2NjMsMzM3MDIsMzM2NzEsMzM3MTAsMzM2NTQsMzM2OTAsMzQzOTMsMzQzOTAsMzQ0OTUsMzQ0ODcsMzQ0OTgs''@;'; put 'put ''MzQ0OTcsMzQ1MDEsMzQ0OTAsMzQ0ODAsMzQ1MDQsMzQ0ODksMzQ0ODMsMzQ0ODgsMzQ1MDgsMzQ0ODQsMzQ0OTEsMzQ0OTIsMzQ0OTksMzQ0OTMsMzQ0OTQsMzQ4OTgsMzQ5NTMsMzQ5NjUsMzQ5ODQsMzQ5NzgsMzQ5ODYsMzQ5NzAsMzQ5NjEsMzQ5NzcsMzQ5NzUsMzQ5NjgsMzQ5ODMsMzQ5''@;'; put 'put ''NjksMzQ5NzEsMzQ5NjcsMzQ5ODAsMzQ5ODgsMzQ5NTYsMzQ5NjMsMzQ5NTgsMzUyMDIsMzUyODYsMzUyODksMzUyODUsMzUzNzYsMzUzNjcsMzUzNzIsMzUzNTgsMzU4OTcsMzU4OTksMzU5MzIsMzU5MzMsMzU5NjUsMzYwMDUsMzYyMjEsMzYyMTksMzYyMTcsMzYyODQsMzYyOTAsMzYyODEs''@;'; put 'put ''MzYyODcsMzYyODksMzY1NjgsMzY1NzQsMzY1NzMsMzY1NzIsMzY1NjcsMzY1NzYsMzY1NzcsMzY5MDAsMzY4NzUsMzY4ODEsMzY4OTIsMzY4NzYsMzY4OTcsMzcxMDMsMzcwOTgsMzcxMDQsMzcxMDgsMzcxMDYsMzcxMDcsMzcwNzYsMzcwOTksMzcxMDAsMzcwOTcsMzcyMDYsMzcyMDgsMzcy''@;'; put 'put ''MTAsMzcyMDMsMzcyMDUsMzczNTYsMzczNjQsMzczNjEsMzczNjMsMzczNjgsMzczNDgsMzczNjksMzczNTQsMzczNTUsMzczNjcsMzczNTIsMzczNTgsMzgyNjYsMzgyNzgsMzgyODAsMzg1MjQsMzg1MDksMzg1MDcsMzg1MTMsMzg1MTEsMzg1OTEsMzg3NjIsMzg5MTYsMzkxNDEsMzkzMTks''@;'; put 'put ''MjA2MzUsMjA2MjksMjA2MjgsMjA2MzgsMjA2MTksMjA2NDMsMjA2MTEsMjA2MjAsMjA2MjIsMjA2MzcsMjA1ODQsMjA2MzYsMjA2MjYsMjA2MTAsMjA2MTUsMjA4MzEsMjA5NDgsMjEyNjYsMjEyNjUsMjE0MTIsMjE0MTUsMjE5MDUsMjE5MjgsMjE5MjUsMjE5MzMsMjE4NzksMjIwODUsMjE5''@;'; put 'put ''MjIsMjE5MDcsMjE4OTYsMjE5MDMsMjE5NDEsMjE4ODksMjE5MjMsMjE5MDYsMjE5MjQsMjE4ODUsMjE5MDAsMjE5MjYsMjE4ODcsMjE5MDksMjE5MjEsMjE5MDIsMjIyODQsMjI1NjksMjI1ODMsMjI1NTMsMjI1NTgsMjI1NjcsMjI1NjMsMjI1NjgsMjI1MTcsMjI2MDAsMjI1NjUsMjI1NTYs''@;'; put 'put ''MjI1NTUsMjI1NzksMjI1OTEsMjI1ODIsMjI1NzQsMjI1ODUsMjI1ODQsMjI1NzMsMjI1NzIsMjI1ODcsMjI4ODEsMjMyMTUsMjMxODgsMjMxOTksMjMxNjIsMjMyMDIsMjMxOTgsMjMxNjAsMjMyMDYsMjMxNjQsMjMyMDUsMjMyMTIsMjMxODksMjMyMTQsMjMwOTUsMjMxNzIsMjMxNzgsMjMx''@;'; put 'put ''OTEsMjMxNzEsMjMxNzksMjMyMDksMjMxNjMsMjMxNjUsMjMxODAsMjMxOTYsMjMxODMsMjMxODcsMjMxOTcsMjM1MzAsMjM1MDEsMjM0OTksMjM1MDgsMjM1MDUsMjM0OTgsMjM1MDIsMjM1NjQsMjM2MDAsMjM4NjMsMjM4NzUsMjM5MTUsMjM4NzMsMjM4ODMsMjM4NzEsMjM4NjEsMjM4ODks''@;'; put 'put ''MjM4ODYsMjM4OTMsMjM4NTksMjM4NjYsMjM4OTAsMjM4NjksMjM4NTcsMjM4OTcsMjM4NzQsMjM4NjUsMjM4ODEsMjM4NjQsMjM4NjgsMjM4NTgsMjM4NjIsMjM4NzIsMjM4NzcsMjQxMzIsMjQxMjksMjQ0MDgsMjQ0ODYsMjQ0ODUsMjQ0OTEsMjQ3NzcsMjQ3NjEsMjQ3ODAsMjQ4MDIsMjQ3''@;'; put 'put ''ODIsMjQ3NzIsMjQ4NTIsMjQ4MTgsMjQ4NDIsMjQ4NTQsMjQ4MzcsMjQ4MjEsMjQ4NTEsMjQ4MjQsMjQ4MjgsMjQ4MzAsMjQ3NjksMjQ4MzUsMjQ4NTYsMjQ4NjEsMjQ4NDgsMjQ4MzEsMjQ4MzYsMjQ4NDMsMjUxNjIsMjU0OTIsMjU1MjEsMjU1MjAsMjU1NTAsMjU1NzMsMjU1NzYsMjU1ODMs''@;'; put 'put ''MjU1MzksMjU3NTcsMjU1ODcsMjU1NDYsMjU1NjgsMjU1OTAsMjU1NTcsMjU1ODYsMjU1ODksMjU2OTcsMjU1NjcsMjU1MzQsMjU1NjUsMjU1NjQsMjU1NDAsMjU1NjAsMjU1NTUsMjU1MzgsMjU1NDMsMjU1NDgsMjU1NDcsMjU1NDQsMjU1ODQsMjU1NTksMjU1NjEsMjU5MDYsMjU5NTksMjU5''@;'; put 'put ''NjIsMjU5NTYsMjU5NDgsMjU5NjAsMjU5NTcsMjU5OTYsMjYwMTMsMjYwMTQsMjYwMzAsMjYwNjQsMjYwNjYsMjYyMzYsMjYyMjAsMjYyMzUsMjYyNDAsMjYyMjUsMjYyMzMsMjYyMTgsMjYyMjYsMjYzNjksMjY4OTIsMjY4MzUsMjY4ODQsMjY4NDQsMjY5MjIsMjY4NjAsMjY4NTgsMjY4NjUs''@;'; put 'put ''MjY4OTUsMjY4MzgsMjY4NzEsMjY4NTksMjY4NTIsMjY4NzAsMjY4OTksMjY4OTYsMjY4NjcsMjY4NDksMjY4ODcsMjY4MjgsMjY4ODgsMjY5OTIsMjY4MDQsMjY4OTcsMjY4NjMsMjY4MjIsMjY5MDAsMjY4NzIsMjY4MzIsMjY4NzcsMjY4NzYsMjY4NTYsMjY4OTEsMjY4OTAsMjY5MDMsMjY4''@;'; put 'put ''MzAsMjY4MjQsMjY4NDUsMjY4NDYsMjY4NTQsMjY4NjgsMjY4MzMsMjY4ODYsMjY4MzYsMjY4NTcsMjY5MDEsMjY5MTcsMjY4MjMsMjc0NDksMjc0NTEsMjc0NTUsMjc0NTIsMjc1NDAsMjc1NDMsMjc1NDUsMjc1NDEsMjc1ODEsMjc2MzIsMjc2MzQsMjc2MzUsMjc2OTYsMjgxNTYsMjgyMzAs''@;'; put 'put ''MjgyMzEsMjgxOTEsMjgyMzMsMjgyOTYsMjgyMjAsMjgyMjEsMjgyMjksMjgyNTgsMjgyMDMsMjgyMjMsMjgyMjUsMjgyNTMsMjgyNzUsMjgxODgsMjgyMTEsMjgyMzUsMjgyMjQsMjgyNDEsMjgyMTksMjgxNjMsMjgyMDYsMjgyNTQsMjgyNjQsMjgyNTIsMjgyNTcsMjgyMDksMjgyMDAsMjgy''@;'; put 'put ''NTYsMjgyNzMsMjgyNjcsMjgyMTcsMjgxOTQsMjgyMDgsMjgyNDMsMjgyNjEsMjgxOTksMjgyODAsMjgyNjAsMjgyNzksMjgyNDUsMjgyODEsMjgyNDIsMjgyNjIsMjgyMTMsMjgyMTQsMjgyNTAsMjg5NjAsMjg5NTgsMjg5NzUsMjg5MjMsMjg5NzQsMjg5NzcsMjg5NjMsMjg5NjUsMjg5NjIs''@;'; put 'put ''Mjg5NzgsMjg5NTksMjg5NjgsMjg5ODYsMjg5NTUsMjkyNTksMjkyNzQsMjkzMjAsMjkzMjEsMjkzMTgsMjkzMTcsMjkzMjMsMjk0NTgsMjk0NTEsMjk0ODgsMjk0NzQsMjk0ODksMjk0OTEsMjk0NzksMjk0OTAsMjk0ODUsMjk0NzgsMjk0NzUsMjk0OTMsMjk0NTIsMjk3NDIsMjk3NDAsMjk3''@;'; put 'put ''NDQsMjk3MzksMjk3MTgsMjk3MjIsMjk3MjksMjk3NDEsMjk3NDUsMjk3MzIsMjk3MzEsMjk3MjUsMjk3MzcsMjk3MjgsMjk3NDYsMjk5NDcsMjk5OTksMzAwNjMsMzAwNjAsMzAxODMsMzAxNzAsMzAxNzcsMzAxODIsMzAxNzMsMzAxNzUsMzAxODAsMzAxNjcsMzAzNTcsMzAzNTQsMzA0MjYs''@;'; put 'put ''MzA1MzQsMzA1MzUsMzA1MzIsMzA1NDEsMzA1MzMsMzA1MzgsMzA1NDIsMzA1MzksMzA1NDAsMzA2ODYsMzA3MDAsMzA4MTYsMzA4MjAsMzA4MjEsMzA4MTIsMzA4MjksMzA4MzMsMzA4MjYsMzA4MzAsMzA4MzIsMzA4MjUsMzA4MjQsMzA4MTQsMzA4MTgsMzEwOTIsMzEwOTEsMzEwOTAsMzEw''@;'; put 'put ''ODgsMzEyMzQsMzEyNDIsMzEyMzUsMzEyNDQsMzEyMzYsMzEzODUsMzE0NjIsMzE0NjAsMzE1NjIsMzE1NDcsMzE1NTYsMzE1NjAsMzE1NjQsMzE1NjYsMzE1NTIsMzE1NzYsMzE1NTcsMzE5MDYsMzE5MDIsMzE5MTIsMzE5MDUsMzIwODgsMzIxMTEsMzIwOTksMzIwODMsMzIwODYsMzIxMDMs''@;'; put 'put ''MzIxMDYsMzIwNzksMzIxMDksMzIwOTIsMzIxMDcsMzIwODIsMzIwODQsMzIxMDUsMzIwODEsMzIwOTUsMzIwNzgsMzI1NzQsMzI1NzUsMzI2MTMsMzI2MTQsMzI2NzQsMzI2NzIsMzI2NzMsMzI3MjcsMzI4NDksMzI4NDcsMzI4NDgsMzMwMjIsMzI5ODAsMzMwOTEsMzMwOTgsMzMxMDYsMzMx''@;'; put 'put ''MDMsMzMwOTUsMzMwODUsMzMxMDEsMzMwODIsMzMyNTQsMzMyNjIsMzMyNzEsMzMyNzIsMzMyNzMsMzMyODQsMzMzNDAsMzMzNDEsMzMzNDMsMzMzOTcsMzM1OTUsMzM3NDMsMzM3ODUsMzM4MjcsMzM3MjgsMzM3NjgsMzM4MTAsMzM3NjcsMzM3NjQsMzM3ODgsMzM3ODIsMzM4MDgsMzM3MzQs''@;'; put 'put ''MzM3MzYsMzM3NzEsMzM3NjMsMzM3MjcsMzM3OTMsMzM3NTcsMzM3NjUsMzM3NTIsMzM3OTEsMzM3NjEsMzM3MzksMzM3NDIsMzM3NTAsMzM3ODEsMzM3MzcsMzM4MDEsMzM4MDcsMzM3NTgsMzM4MDksMzM3OTgsMzM3MzAsMzM3NzksMzM3NDksMzM3ODYsMzM3MzUsMzM3NDUsMzM3NzAsMzM4''@;'; put 'put ''MTEsMzM3MzEsMzM3NzIsMzM3NzQsMzM3MzIsMzM3ODcsMzM3NTEsMzM3NjIsMzM4MTksMzM3NTUsMzM3OTAsMzQ1MjAsMzQ1MzAsMzQ1MzQsMzQ1MTUsMzQ1MzEsMzQ1MjIsMzQ1MzgsMzQ1MjUsMzQ1MzksMzQ1MjQsMzQ1NDAsMzQ1MzcsMzQ1MTksMzQ1MzYsMzQ1MTMsMzQ4ODgsMzQ5MDIs''@;'; put 'put ''MzQ5MDEsMzUwMDIsMzUwMzEsMzUwMDEsMzVlMywzNTAwOCwzNTAwNiwzNDk5OCwzNTAwNCwzNDk5OSwzNTAwNSwzNDk5NCwzNTA3MywzNTAxNywzNTIyMSwzNTIyNCwzNTIyMywzNTI5MywzNTI5MCwzNTI5MSwzNTQwNiwzNTQwNSwzNTM4NSwzNTQxNywzNTM5MiwzNTQxNSwzNTQxNiwzNTM5''@;'; put 'put ''NiwzNTM5NywzNTQxMCwzNTQwMCwzNTQwOSwzNTQwMiwzNTQwNCwzNTQwNywzNTkzNSwzNTk2OSwzNTk2OCwzNjAyNiwzNjAzMCwzNjAxNiwzNjAyNSwzNjAyMSwzNjIyOCwzNjIyNCwzNjIzMywzNjMxMiwzNjMwNywzNjMwMSwzNjI5NSwzNjMxMCwzNjMxNiwzNjMwMywzNjMwOSwzNjMxMywz''@;'; put 'put ''NjI5NiwzNjMxMSwzNjI5MywzNjU5MSwzNjU5OSwzNjYwMiwzNjYwMSwzNjU4MiwzNjU5MCwzNjU4MSwzNjU5NywzNjU4MywzNjU4NCwzNjU5OCwzNjU4NywzNjU5MywzNjU4OCwzNjU5NiwzNjU4NSwzNjkwOSwzNjkxNiwzNjkxMSwzNzEyNiwzNzE2NCwzNzEyNCwzNzExOSwzNzExNiwzNzEy''@;'; put 'put ''OCwzNzExMywzNzExNSwzNzEyMSwzNzEyMCwzNzEyNywzNzEyNSwzNzEyMywzNzIxNywzNzIyMCwzNzIxNSwzNzIxOCwzNzIxNiwzNzM3NywzNzM4NiwzNzQxMywzNzM3OSwzNzQwMiwzNzQxNCwzNzM5MSwzNzM4OCwzNzM3NiwzNzM5NCwzNzM3NSwzNzM3MywzNzM4MiwzNzM4MCwzNzQxNSwz''@;'; put 'put ''NzM3OCwzNzQwNCwzNzQxMiwzNzQwMSwzNzM5OSwzNzM4MSwzNzM5OCwzODI2NywzODI4NSwzODI4NCwzODI4OCwzODUzNSwzODUyNiwzODUzNiwzODUzNywzODUzMSwzODUyOCwzODU5NCwzODYwMCwzODU5NSwzODY0MSwzODY0MCwzODc2NCwzODc2OCwzODc2NiwzODkxOSwzOTA4MSwzOTE0''@;'; put 'put ''Nyw0MDE2Niw0MDY5NywyMDA5OSwyMDEwMCwyMDE1MCwyMDY2OSwyMDY3MSwyMDY3OCwyMDY1NCwyMDY3NiwyMDY4MiwyMDY2MCwyMDY4MCwyMDY3NCwyMDY1NiwyMDY3MywyMDY2NiwyMDY1NywyMDY4MywyMDY4MSwyMDY2MiwyMDY2NCwyMDk1MSwyMTExNCwyMTExMiwyMTExNSwyMTExNiwy''@;'; put 'put ''MTk1NSwyMTk3OSwyMTk2NCwyMTk2OCwyMTk2MywyMTk2MiwyMTk4MSwyMTk1MiwyMTk3MiwyMTk1NiwyMTk5MywyMTk1MSwyMTk3MCwyMTkwMSwyMTk2NywyMTk3MywyMTk4NiwyMTk3NCwyMTk2MCwyMjAwMiwyMTk2NSwyMTk3NywyMTk1NCwyMjI5MiwyMjYxMSwyMjYzMiwyMjYyOCwyMjYw''@;'; put 'put ''NywyMjYwNSwyMjYwMSwyMjYzOSwyMjYxMywyMjYwNiwyMjYyMSwyMjYxNywyMjYyOSwyMjYxOSwyMjU4OSwyMjYyNywyMjY0MSwyMjc4MCwyMzIzOSwyMzIzNiwyMzI0MywyMzIyNiwyMzIyNCwyMzIxNywyMzIyMSwyMzIxNiwyMzIzMSwyMzI0MCwyMzIyNywyMzIzOCwyMzIyMywyMzIzMiwy''@;'; put 'put ''MzI0MiwyMzIyMCwyMzIyMiwyMzI0NSwyMzIyNSwyMzE4NCwyMzUxMCwyMzUxMiwyMzUxMywyMzU4MywyMzYwMywyMzkyMSwyMzkwNywyMzg4MiwyMzkwOSwyMzkyMiwyMzkxNiwyMzkwMiwyMzkxMiwyMzkxMSwyMzkwNiwyNDA0OCwyNDE0MywyNDE0MiwyNDEzOCwyNDE0MSwyNDEzOSwyNDI2''@;'; put 'put ''MSwyNDI2OCwyNDI2MiwyNDI2NywyNDI2MywyNDM4NCwyNDQ5NSwyNDQ5MywyNDgyMywyNDkwNSwyNDkwNiwyNDg3NSwyNDkwMSwyNDg4NiwyNDg4MiwyNDg3OCwyNDkwMiwyNDg3OSwyNDkxMSwyNDg3MywyNDg5NiwyNTEyMCwzNzIyNCwyNTEyMywyNTEyNSwyNTEyNCwyNTU0MSwyNTU4NSwy''@;'; put 'put ''NTU3OSwyNTYxNiwyNTYxOCwyNTYwOSwyNTYzMiwyNTYzNiwyNTY1MSwyNTY2NywyNTYzMSwyNTYyMSwyNTYyNCwyNTY1NywyNTY1NSwyNTYzNCwyNTYzNSwyNTYxMiwyNTYzOCwyNTY0OCwyNTY0MCwyNTY2NSwyNTY1MywyNTY0NywyNTYxMCwyNTYyNiwyNTY2NCwyNTYzNywyNTYzOSwyNTYx''@;'; put 'put ''MSwyNTU3NSwyNTYyNywyNTY0NiwyNTYzMywyNTYxNCwyNTk2NywyNjAwMiwyNjA2NywyNjI0NiwyNjI1MiwyNjI2MSwyNjI1NiwyNjI1MSwyNjI1MCwyNjI2NSwyNjI2MCwyNjIzMiwyNjQwMCwyNjk4MiwyNjk3NSwyNjkzNiwyNjk1OCwyNjk3OCwyNjk5MywyNjk0MywyNjk0OSwyNjk4Niwy''@;'; put 'put ''NjkzNywyNjk0NiwyNjk2NywyNjk2OSwyNzAwMiwyNjk1MiwyNjk1MywyNjkzMywyNjk4OCwyNjkzMSwyNjk0MSwyNjk4MSwyNjg2NCwyN2UzLDI2OTMyLDI2OTg1LDI2OTQ0LDI2OTkxLDI2OTQ4LDI2OTk4LDI2OTY4LDI2OTQ1LDI2OTk2LDI2OTU2LDI2OTM5LDI2OTU1LDI2OTM1LDI2OTcy''@;'; put 'put ''LDI2OTU5LDI2OTYxLDI2OTMwLDI2OTYyLDI2OTI3LDI3MDAzLDI2OTQwLDI3NDYyLDI3NDYxLDI3NDU5LDI3NDU4LDI3NDY0LDI3NDU3LDI3NTQ3LDY0MDEzLDI3NjQzLDI3NjQ0LDI3NjQxLDI3NjM5LDI3NjQwLDI4MzE1LDI4Mzc0LDI4MzYwLDI4MzAzLDI4MzUyLDI4MzE5LDI4MzA3LDI4''@;'; put 'put ''MzA4LDI4MzIwLDI4MzM3LDI4MzQ1LDI4MzU4LDI4MzcwLDI4MzQ5LDI4MzUzLDI4MzE4LDI4MzYxLDI4MzQzLDI4MzM2LDI4MzY1LDI4MzI2LDI4MzY3LDI4MzM4LDI4MzUwLDI4MzU1LDI4MzgwLDI4Mzc2LDI4MzEzLDI4MzA2LDI4MzAyLDI4MzAxLDI4MzI0LDI4MzIxLDI4MzUxLDI4MzM5''@;'; put 'put ''LDI4MzY4LDI4MzYyLDI4MzExLDI4MzM0LDI4MzIzLDI4OTk5LDI5MDEyLDI5MDEwLDI5MDI3LDI5MDI0LDI4OTkzLDI5MDIxLDI5MDI2LDI5MDQyLDI5MDQ4LDI5MDM0LDI5MDI1LDI4OTk0LDI5MDE2LDI4OTk1LDI5MDAzLDI5MDQwLDI5MDIzLDI5MDA4LDI5MDExLDI4OTk2LDI5MDA1LDI5''@;'; put 'put ''MDE4LDI5MjYzLDI5MzI1LDI5MzI0LDI5MzI5LDI5MzI4LDI5MzI2LDI5NTAwLDI5NTA2LDI5NDk5LDI5NDk4LDI5NTA0LDI5NTE0LDI5NTEzLDI5NzY0LDI5NzcwLDI5NzcxLDI5Nzc4LDI5Nzc3LDI5NzgzLDI5NzYwLDI5Nzc1LDI5Nzc2LDI5Nzc0LDI5NzYyLDI5NzY2LDI5NzczLDI5Nzgw''@;'; put 'put ''LDI5OTIxLDI5OTUxLDI5OTUwLDI5OTQ5LDI5OTgxLDMwMDczLDMwMDcxLDI3MDExLDMwMTkxLDMwMjIzLDMwMjExLDMwMTk5LDMwMjA2LDMwMjA0LDMwMjAxLDMwMjAwLDMwMjI0LDMwMjAzLDMwMTk4LDMwMTg5LDMwMTk3LDMwMjA1LDMwMzYxLDMwMzg5LDMwNDI5LDMwNTQ5LDMwNTU5LDMw''@;'; put 'put ''NTYwLDMwNTQ2LDMwNTUwLDMwNTU0LDMwNTY5LDMwNTY3LDMwNTQ4LDMwNTUzLDMwNTczLDMwNjg4LDMwODU1LDMwODc0LDMwODY4LDMwODYzLDMwODUyLDMwODY5LDMwODUzLDMwODU0LDMwODgxLDMwODUxLDMwODQxLDMwODczLDMwODQ4LDMwODcwLDMwODQzLDMxMTAwLDMxMTA2LDMxMTAx''@;'; put 'put ''LDMxMDk3LDMxMjQ5LDMxMjU2LDMxMjU3LDMxMjUwLDMxMjU1LDMxMjUzLDMxMjY2LDMxMjUxLDMxMjU5LDMxMjQ4LDMxMzk1LDMxMzk0LDMxMzkwLDMxNDY3LDMxNTkwLDMxNTg4LDMxNTk3LDMxNjA0LDMxNTkzLDMxNjAyLDMxNTg5LDMxNjAzLDMxNjAxLDMxNjAwLDMxNTg1LDMxNjA4LDMx''@;'; put 'put ''NjA2LDMxNTg3LDMxOTIyLDMxOTI0LDMxOTE5LDMyMTM2LDMyMTM0LDMyMTI4LDMyMTQxLDMyMTI3LDMyMTMzLDMyMTIyLDMyMTQyLDMyMTIzLDMyMTMxLDMyMTI0LDMyMTQwLDMyMTQ4LDMyMTMyLDMyMTI1LDMyMTQ2LDMyNjIxLDMyNjE5LDMyNjE1LDMyNjE2LDMyNjIwLDMyNjc4LDMyNjc3''@;'; put 'put ''LDMyNjc5LDMyNzMxLDMyNzMyLDMyODAxLDMzMTI0LDMzMTIwLDMzMTQzLDMzMTE2LDMzMTI5LDMzMTE1LDMzMTIyLDMzMTM4LDI2NDAxLDMzMTE4LDMzMTQyLDMzMTI3LDMzMTM1LDMzMDkyLDMzMTIxLDMzMzA5LDMzMzUzLDMzMzQ4LDMzMzQ0LDMzMzQ2LDMzMzQ5LDM0MDMzLDMzODU1LDMz''@;'; put 'put ''ODc4LDMzOTEwLDMzOTEzLDMzOTM1LDMzOTMzLDMzODkzLDMzODczLDMzODU2LDMzOTI2LDMzODk1LDMzODQwLDMzODY5LDMzOTE3LDMzODgyLDMzODgxLDMzOTA4LDMzOTA3LDMzODg1LDM0MDU1LDMzODg2LDMzODQ3LDMzODUwLDMzODQ0LDMzOTE0LDMzODU5LDMzOTEyLDMzODQyLDMzODYx''@;'; put 'put ''LDMzODMzLDMzNzUzLDMzODY3LDMzODM5LDMzODU4LDMzODM3LDMzODg3LDMzOTA0LDMzODQ5LDMzODcwLDMzODY4LDMzODc0LDMzOTAzLDMzOTg5LDMzOTM0LDMzODUxLDMzODYzLDMzODQ2LDMzODQzLDMzODk2LDMzOTE4LDMzODYwLDMzODM1LDMzODg4LDMzODc2LDMzOTAyLDMzODcyLDM0''@;'; put 'put ''NTcxLDM0NTY0LDM0NTUxLDM0NTcyLDM0NTU0LDM0NTE4LDM0NTQ5LDM0NjM3LDM0NTUyLDM0NTc0LDM0NTY5LDM0NTYxLDM0NTUwLDM0NTczLDM0NTY1LDM1MDMwLDM1MDE5LDM1MDIxLDM1MDIyLDM1MDM4LDM1MDM1LDM1MDM0LDM1MDIwLDM1MDI0LDM1MjA1LDM1MjI3LDM1Mjk1LDM1MzAx''@;'; put 'put ''LDM1MzAwLDM1Mjk3LDM1Mjk2LDM1Mjk4LDM1MjkyLDM1MzAyLDM1NDQ2LDM1NDYyLDM1NDU1LDM1NDI1LDM1MzkxLDM1NDQ3LDM1NDU4LDM1NDYwLDM1NDQ1LDM1NDU5LDM1NDU3LDM1NDQ0LDM1NDUwLDM1OTAwLDM1OTE1LDM1OTE0LDM1OTQxLDM1OTQwLDM1OTQyLDM1OTc0LDM1OTcyLDM1''@;'; put 'put ''OTczLDM2MDQ0LDM2MjAwLDM2MjAxLDM2MjQxLDM2MjM2LDM2MjM4LDM2MjM5LDM2MjM3LDM2MjQzLDM2MjQ0LDM2MjQwLDM2MjQyLDM2MzM2LDM2MzIwLDM2MzMyLDM2MzM3LDM2MzM0LDM2MzA0LDM2MzI5LDM2MzIzLDM2MzIyLDM2MzI3LDM2MzM4LDM2MzMxLDM2MzQwLDM2NjE0LDM2NjA3''@;'; put 'put ''LDM2NjA5LDM2NjA4LDM2NjEzLDM2NjE1LDM2NjE2LDM2NjEwLDM2NjE5LDM2OTQ2LDM2OTI3LDM2OTMyLDM2OTM3LDM2OTI1LDM3MTM2LDM3MTMzLDM3MTM1LDM3MTM3LDM3MTQyLDM3MTQwLDM3MTMxLDM3MTM0LDM3MjMwLDM3MjMxLDM3NDQ4LDM3NDU4LDM3NDI0LDM3NDM0LDM3NDc4LDM3''@;'; put 'put ''NDI3LDM3NDc3LDM3NDcwLDM3NTA3LDM3NDIyLDM3NDUwLDM3NDQ2LDM3NDg1LDM3NDg0LDM3NDU1LDM3NDcyLDM3NDc5LDM3NDg3LDM3NDMwLDM3NDczLDM3NDg4LDM3NDI1LDM3NDYwLDM3NDc1LDM3NDU2LDM3NDkwLDM3NDU0LDM3NDU5LDM3NDUyLDM3NDYyLDM3NDI2LDM4MzAzLDM4MzAw''@;'; put 'put ''LDM4MzAyLDM4Mjk5LDM4NTQ2LDM4NTQ3LDM4NTQ1LDM4NTUxLDM4NjA2LDM4NjUwLDM4NjUzLDM4NjQ4LDM4NjQ1LDM4NzcxLDM4Nzc1LDM4Nzc2LDM4NzcwLDM4OTI3LDM4OTI1LDM4OTI2LDM5MDg0LDM5MTU4LDM5MTYxLDM5MzQzLDM5MzQ2LDM5MzQ0LDM5MzQ5LDM5NTk3LDM5NTk1LDM5''@;'; put 'put ''NzcxLDQwMTcwLDQwMTczLDQwMTY3LDQwNTc2LDQwNzAxLDIwNzEwLDIwNjkyLDIwNjk1LDIwNzEyLDIwNzIzLDIwNjk5LDIwNzE0LDIwNzAxLDIwNzA4LDIwNjkxLDIwNzE2LDIwNzIwLDIwNzE5LDIwNzA3LDIwNzA0LDIwOTUyLDIxMTIwLDIxMTIxLDIxMjI1LDIxMjI3LDIxMjk2LDIxNDIw''@;'; put 'put ''LDIyMDU1LDIyMDM3LDIyMDI4LDIyMDM0LDIyMDEyLDIyMDMxLDIyMDQ0LDIyMDE3LDIyMDM1LDIyMDE4LDIyMDEwLDIyMDQ1LDIyMDIwLDIyMDE1LDIyMDA5LDIyNjY1LDIyNjUyLDIyNjcyLDIyNjgwLDIyNjYyLDIyNjU3LDIyNjU1LDIyNjQ0LDIyNjY3LDIyNjUwLDIyNjYzLDIyNjczLDIy''@;'; put 'put ''NjcwLDIyNjQ2LDIyNjU4LDIyNjY0LDIyNjUxLDIyNjc2LDIyNjcxLDIyNzgyLDIyODkxLDIzMjYwLDIzMjc4LDIzMjY5LDIzMjUzLDIzMjc0LDIzMjU4LDIzMjc3LDIzMjc1LDIzMjgzLDIzMjY2LDIzMjY0LDIzMjU5LDIzMjc2LDIzMjYyLDIzMjYxLDIzMjU3LDIzMjcyLDIzMjYzLDIzNDE1''@;'; put 'put ''LDIzNTIwLDIzNTIzLDIzNjUxLDIzOTM4LDIzOTM2LDIzOTMzLDIzOTQyLDIzOTMwLDIzOTM3LDIzOTI3LDIzOTQ2LDIzOTQ1LDIzOTQ0LDIzOTM0LDIzOTMyLDIzOTQ5LDIzOTI5LDIzOTM1LDI0MTUyLDI0MTUzLDI0MTQ3LDI0MjgwLDI0MjczLDI0Mjc5LDI0MjcwLDI0Mjg0LDI0Mjc3LDI0''@;'; put 'put ''MjgxLDI0Mjc0LDI0Mjc2LDI0Mzg4LDI0Mzg3LDI0NDMxLDI0NTAyLDI0ODc2LDI0ODcyLDI0ODk3LDI0OTI2LDI0OTQ1LDI0OTQ3LDI0OTE0LDI0OTE1LDI0OTQ2LDI0OTQwLDI0OTYwLDI0OTQ4LDI0OTE2LDI0OTU0LDI0OTIzLDI0OTMzLDI0ODkxLDI0OTM4LDI0OTI5LDI0OTE4LDI1MTI5''@;'; put 'put ''LDI1MTI3LDI1MTMxLDI1NjQzLDI1Njc3LDI1NjkxLDI1NjkzLDI1NzE2LDI1NzE4LDI1NzE0LDI1NzE1LDI1NzI1LDI1NzE3LDI1NzAyLDI1NzY2LDI1Njc4LDI1NzMwLDI1Njk0LDI1NjkyLDI1Njc1LDI1NjgzLDI1Njk2LDI1NjgwLDI1NzI3LDI1NjYzLDI1NzA4LDI1NzA3LDI1Njg5LDI1''@;'; put 'put ''NzAxLDI1NzE5LDI1OTcxLDI2MDE2LDI2MjczLDI2MjcyLDI2MjcxLDI2MzczLDI2MzcyLDI2NDAyLDI3MDU3LDI3MDYyLDI3MDgxLDI3MDQwLDI3MDg2LDI3MDMwLDI3MDU2LDI3MDUyLDI3MDY4LDI3MDI1LDI3MDMzLDI3MDIyLDI3MDQ3LDI3MDIxLDI3MDQ5LDI3MDcwLDI3MDU1LDI3MDcx''@;'; put 'put ''LDI3MDc2LDI3MDY5LDI3MDQ0LDI3MDkyLDI3MDY1LDI3MDgyLDI3MDM0LDI3MDg3LDI3MDU5LDI3MDI3LDI3MDUwLDI3MDQxLDI3MDM4LDI3MDk3LDI3MDMxLDI3MDI0LDI3MDc0LDI3MDYxLDI3MDQ1LDI3MDc4LDI3NDY2LDI3NDY5LDI3NDY3LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTg3LDI3''@;'; put 'put ''NTg4LDI3NjQ2LDI4MzY2LDI4NDA1LDI4NDAxLDI4NDE5LDI4NDUzLDI4NDA4LDI4NDcxLDI4NDExLDI4NDYyLDI4NDI1LDI4NDk0LDI4NDQxLDI4NDQyLDI4NDU1LDI4NDQwLDI4NDc1LDI4NDM0LDI4Mzk3LDI4NDI2LDI4NDcwLDI4NTMxLDI4NDA5LDI4Mzk4LDI4NDYxLDI4NDgwLDI4NDY0''@;'; put 'put ''LDI4NDc2LDI4NDY5LDI4Mzk1LDI4NDIzLDI4NDMwLDI4NDgzLDI4NDIxLDI4NDEzLDI4NDA2LDI4NDczLDI4NDQ0LDI4NDEyLDI4NDc0LDI4NDQ3LDI4NDI5LDI4NDQ2LDI4NDI0LDI4NDQ5LDI5MDYzLDI5MDcyLDI5MDY1LDI5MDU2LDI5MDYxLDI5MDU4LDI5MDcxLDI5MDUxLDI5MDYyLDI5''@;'; put 'put ''MDU3LDI5MDc5LDI5MjUyLDI5MjY3LDI5MzM1LDI5MzMzLDI5MzMxLDI5NTA3LDI5NTE3LDI5NTIxLDI5NTE2LDI5Nzk0LDI5ODExLDI5ODA5LDI5ODEzLDI5ODEwLDI5Nzk5LDI5ODA2LDI5OTUyLDI5OTU0LDI5OTU1LDMwMDc3LDMwMDk2LDMwMjMwLDMwMjE2LDMwMjIwLDMwMjI5LDMwMjI1''@;'; put 'put ''LDMwMjE4LDMwMjI4LDMwMzkyLDMwNTkzLDMwNTg4LDMwNTk3LDMwNTk0LDMwNTc0LDMwNTkyLDMwNTc1LDMwNTkwLDMwNTk1LDMwODk4LDMwODkwLDMwOTAwLDMwODkzLDMwODg4LDMwODQ2LDMwODkxLDMwODc4LDMwODg1LDMwODgwLDMwODkyLDMwODgyLDMwODg0LDMxMTI4LDMxMTE0LDMx''@;'; put 'put ''MTE1LDMxMTI2LDMxMTI1LDMxMTI0LDMxMTIzLDMxMTI3LDMxMTEyLDMxMTIyLDMxMTIwLDMxMjc1LDMxMzA2LDMxMjgwLDMxMjc5LDMxMjcyLDMxMjcwLDMxNDAwLDMxNDAzLDMxNDA0LDMxNDcwLDMxNjI0LDMxNjQ0LDMxNjI2LDMxNjMzLDMxNjMyLDMxNjM4LDMxNjI5LDMxNjI4LDMxNjQz''@;'; put 'put ''LDMxNjMwLDMxNjIxLDMxNjQwLDIxMTI0LDMxNjQxLDMxNjUyLDMxNjE4LDMxOTMxLDMxOTM1LDMxOTMyLDMxOTMwLDMyMTY3LDMyMTgzLDMyMTk0LDMyMTYzLDMyMTcwLDMyMTkzLDMyMTkyLDMyMTk3LDMyMTU3LDMyMjA2LDMyMTk2LDMyMTk4LDMyMjAzLDMyMjA0LDMyMTc1LDMyMTg1LDMy''@;'; put 'put ''MTUwLDMyMTg4LDMyMTU5LDMyMTY2LDMyMTc0LDMyMTY5LDMyMTYxLDMyMjAxLDMyNjI3LDMyNzM4LDMyNzM5LDMyNzQxLDMyNzM0LDMyODA0LDMyODYxLDMyODYwLDMzMTYxLDMzMTU4LDMzMTU1LDMzMTU5LDMzMTY1LDMzMTY0LDMzMTYzLDMzMzAxLDMzOTQzLDMzOTU2LDMzOTUzLDMzOTUx''@;'; put 'put ''LDMzOTc4LDMzOTk4LDMzOTg2LDMzOTY0LDMzOTY2LDMzOTYzLDMzOTc3LDMzOTcyLDMzOTg1LDMzOTk3LDMzOTYyLDMzOTQ2LDMzOTY5LDM0ZTMsMzM5NDksMzM5NTksMzM5NzksMzM5NTQsMzM5NDAsMzM5OTEsMzM5OTYsMzM5NDcsMzM5NjEsMzM5NjcsMzM5NjAsMzQwMDYsMzM5NDQsMzM5''@;'; put 'put ''NzQsMzM5OTksMzM5NTIsMzQwMDcsMzQwMDQsMzQwMDIsMzQwMTEsMzM5NjgsMzM5MzcsMzQ0MDEsMzQ2MTEsMzQ1OTUsMzQ2MDAsMzQ2NjcsMzQ2MjQsMzQ2MDYsMzQ1OTAsMzQ1OTMsMzQ1ODUsMzQ1ODcsMzQ2MjcsMzQ2MDQsMzQ2MjUsMzQ2MjIsMzQ2MzAsMzQ1OTIsMzQ2MTAsMzQ2MDIs''@;'; put 'put ''MzQ2MDUsMzQ2MjAsMzQ1NzgsMzQ2MTgsMzQ2MDksMzQ2MTMsMzQ2MjYsMzQ1OTgsMzQ1OTksMzQ2MTYsMzQ1OTYsMzQ1ODYsMzQ2MDgsMzQ1NzcsMzUwNjMsMzUwNDcsMzUwNTcsMzUwNTgsMzUwNjYsMzUwNzAsMzUwNTQsMzUwNjgsMzUwNjIsMzUwNjcsMzUwNTYsMzUwNTIsMzUwNTEsMzUy''@;'; put 'put ''MjksMzUyMzMsMzUyMzEsMzUyMzAsMzUzMDUsMzUzMDcsMzUzMDQsMzU0OTksMzU0ODEsMzU0NjcsMzU0NzQsMzU0NzEsMzU0NzgsMzU5MDEsMzU5NDQsMzU5NDUsMzYwNTMsMzYwNDcsMzYwNTUsMzYyNDYsMzYzNjEsMzYzNTQsMzYzNTEsMzYzNjUsMzYzNDksMzYzNjIsMzYzNTUsMzYzNTks''@;'; put 'put ''MzYzNTgsMzYzNTcsMzYzNTAsMzYzNTIsMzYzNTYsMzY2MjQsMzY2MjUsMzY2MjIsMzY2MjEsMzcxNTUsMzcxNDgsMzcxNTIsMzcxNTQsMzcxNTEsMzcxNDksMzcxNDYsMzcxNTYsMzcxNTMsMzcxNDcsMzcyNDIsMzcyMzQsMzcyNDEsMzcyMzUsMzc1NDEsMzc1NDAsMzc0OTQsMzc1MzEsMzc0''@;'; put 'put ''OTgsMzc1MzYsMzc1MjQsMzc1NDYsMzc1MTcsMzc1NDIsMzc1MzAsMzc1NDcsMzc0OTcsMzc1MjcsMzc1MDMsMzc1MzksMzc2MTQsMzc1MTgsMzc1MDYsMzc1MjUsMzc1MzgsMzc1MDEsMzc1MTIsMzc1MzcsMzc1MTQsMzc1MTAsMzc1MTYsMzc1MjksMzc1NDMsMzc1MDIsMzc1MTEsMzc1NDUs''@;'; put 'put ''Mzc1MzMsMzc1MTUsMzc0MjEsMzg1NTgsMzg1NjEsMzg2NTUsMzg3NDQsMzg3ODEsMzg3NzgsMzg3ODIsMzg3ODcsMzg3ODQsMzg3ODYsMzg3NzksMzg3ODgsMzg3ODUsMzg3ODMsMzg4NjIsMzg4NjEsMzg5MzQsMzkwODUsMzkwODYsMzkxNzAsMzkxNjgsMzkxNzUsMzkzMjUsMzkzMjQsMzkz''@;'; put 'put ''NjMsMzkzNTMsMzkzNTUsMzkzNTQsMzkzNjIsMzkzNTcsMzkzNjcsMzk2MDEsMzk2NTEsMzk2NTUsMzk3NDIsMzk3NDMsMzk3NzYsMzk3NzcsMzk3NzUsNDAxNzcsNDAxNzgsNDAxODEsNDA2MTUsMjA3MzUsMjA3MzksMjA3ODQsMjA3MjgsMjA3NDIsMjA3NDMsMjA3MjYsMjA3MzQsMjA3NDcs''@;'; put 'put ''MjA3NDgsMjA3MzMsMjA3NDYsMjExMzEsMjExMzIsMjEyMzMsMjEyMzEsMjIwODgsMjIwODIsMjIwOTIsMjIwNjksMjIwODEsMjIwOTAsMjIwODksMjIwODYsMjIxMDQsMjIxMDYsMjIwODAsMjIwNjcsMjIwNzcsMjIwNjAsMjIwNzgsMjIwNzIsMjIwNTgsMjIwNzQsMjIyOTgsMjI2OTksMjI2''@;'; put 'put ''ODUsMjI3MDUsMjI2ODgsMjI2OTEsMjI3MDMsMjI3MDAsMjI2OTMsMjI2ODksMjI3ODMsMjMyOTUsMjMyODQsMjMyOTMsMjMyODcsMjMyODYsMjMyOTksMjMyODgsMjMyOTgsMjMyODksMjMyOTcsMjMzMDMsMjMzMDEsMjMzMTEsMjM2NTUsMjM5NjEsMjM5NTksMjM5NjcsMjM5NTQsMjM5NzAs''@;'; put 'put ''MjM5NTUsMjM5NTcsMjM5NjgsMjM5NjQsMjM5NjksMjM5NjIsMjM5NjYsMjQxNjksMjQxNTcsMjQxNjAsMjQxNTYsMzIyNDMsMjQyODMsMjQyODYsMjQyODksMjQzOTMsMjQ0OTgsMjQ5NzEsMjQ5NjMsMjQ5NTMsMjUwMDksMjUwMDgsMjQ5OTQsMjQ5NjksMjQ5ODcsMjQ5NzksMjUwMDcsMjUw''@;'; put 'put ''MDUsMjQ5OTEsMjQ5NzgsMjUwMDIsMjQ5OTMsMjQ5NzMsMjQ5MzQsMjUwMTEsMjUxMzMsMjU3MTAsMjU3MTIsMjU3NTAsMjU3NjAsMjU3MzMsMjU3NTEsMjU3NTYsMjU3NDMsMjU3MzksMjU3MzgsMjU3NDAsMjU3NjMsMjU3NTksMjU3MDQsMjU3NzcsMjU3NTIsMjU5NzQsMjU5NzgsMjU5Nzcs''@;'; put 'put ''MjU5NzksMjYwMzQsMjYwMzUsMjYyOTMsMjYyODgsMjYyODEsMjYyOTAsMjYyOTUsMjYyODIsMjYyODcsMjcxMzYsMjcxNDIsMjcxNTksMjcxMDksMjcxMjgsMjcxNTcsMjcxMjEsMjcxMDgsMjcxNjgsMjcxMzUsMjcxMTYsMjcxMDYsMjcxNjMsMjcxNjUsMjcxMzQsMjcxNzUsMjcxMjIsMjcx''@;'; put 'put ''MTgsMjcxNTYsMjcxMjcsMjcxMTEsMjcyMDAsMjcxNDQsMjcxMTAsMjcxMzEsMjcxNDksMjcxMzIsMjcxMTUsMjcxNDUsMjcxNDAsMjcxNjAsMjcxNzMsMjcxNTEsMjcxMjYsMjcxNzQsMjcxNDMsMjcxMjQsMjcxNTgsMjc0NzMsMjc1NTcsMjc1NTUsMjc1NTQsMjc1NTgsMjc2NDksMjc2NDgs''@;'; put 'put ''Mjc2NDcsMjc2NTAsMjg0ODEsMjg0NTQsMjg1NDIsMjg1NTEsMjg2MTQsMjg1NjIsMjg1NTcsMjg1NTMsMjg1NTYsMjg1MTQsMjg0OTUsMjg1NDksMjg1MDYsMjg1NjYsMjg1MzQsMjg1MjQsMjg1NDYsMjg1MDEsMjg1MzAsMjg0OTgsMjg0OTYsMjg1MDMsMjg1NjQsMjg1NjMsMjg1MDksMjg0''@;'; put 'put ''MTYsMjg1MTMsMjg1MjMsMjg1NDEsMjg1MTksMjg1NjAsMjg0OTksMjg1NTUsMjg1MjEsMjg1NDMsMjg1NjUsMjg1MTUsMjg1MzUsMjg1MjIsMjg1MzksMjkxMDYsMjkxMDMsMjkwODMsMjkxMDQsMjkwODgsMjkwODIsMjkwOTcsMjkxMDksMjkwODUsMjkwOTMsMjkwODYsMjkwOTIsMjkwODks''@;'; put 'put ''MjkwOTgsMjkwODQsMjkwOTUsMjkxMDcsMjkzMzYsMjkzMzgsMjk1MjgsMjk1MjIsMjk1MzQsMjk1MzUsMjk1MzYsMjk1MzMsMjk1MzEsMjk1MzcsMjk1MzAsMjk1MjksMjk1MzgsMjk4MzEsMjk4MzMsMjk4MzQsMjk4MzAsMjk4MjUsMjk4MjEsMjk4MjksMjk4MzIsMjk4MjAsMjk4MTcsMjk5''@;'; put 'put ''NjAsMjk5NTksMzAwNzgsMzAyNDUsMzAyMzgsMzAyMzMsMzAyMzcsMzAyMzYsMzAyNDMsMzAyMzQsMzAyNDgsMzAyMzUsMzAzNjQsMzAzNjUsMzAzNjYsMzAzNjMsMzA2MDUsMzA2MDcsMzA2MDEsMzA2MDAsMzA5MjUsMzA5MDcsMzA5MjcsMzA5MjQsMzA5MjksMzA5MjYsMzA5MzIsMzA5MjAs''@;'; put 'put ''MzA5MTUsMzA5MTYsMzA5MjEsMzExMzAsMzExMzcsMzExMzYsMzExMzIsMzExMzgsMzExMzEsMjc1MTAsMzEyODksMzE0MTAsMzE0MTIsMzE0MTEsMzE2NzEsMzE2OTEsMzE2NzgsMzE2NjAsMzE2OTQsMzE2NjMsMzE2NzMsMzE2OTAsMzE2NjksMzE5NDEsMzE5NDQsMzE5NDgsMzE5NDcsMzIy''@;'; put 'put ''NDcsMzIyMTksMzIyMzQsMzIyMzEsMzIyMTUsMzIyMjUsMzIyNTksMzIyNTAsMzIyMzAsMzIyNDYsMzIyNDEsMzIyNDAsMzIyMzgsMzIyMjMsMzI2MzAsMzI2ODQsMzI2ODgsMzI2ODUsMzI3NDksMzI3NDcsMzI3NDYsMzI3NDgsMzI3NDIsMzI3NDQsMzI4NjgsMzI4NzEsMzMxODcsMzMxODMs''@;'; put 'put ''MzMxODIsMzMxNzMsMzMxODYsMzMxNzcsMzMxNzUsMzMzMDIsMzMzNTksMzMzNjMsMzMzNjIsMzMzNjAsMzMzNTgsMzMzNjEsMzQwODQsMzQxMDcsMzQwNjMsMzQwNDgsMzQwODksMzQwNjIsMzQwNTcsMzQwNjEsMzQwNzksMzQwNTgsMzQwODcsMzQwNzYsMzQwNDMsMzQwOTEsMzQwNDIsMzQw''@;'; put 'put ''NTYsMzQwNjAsMzQwMzYsMzQwOTAsMzQwMzQsMzQwNjksMzQwMzksMzQwMjcsMzQwMzUsMzQwNDQsMzQwNjYsMzQwMjYsMzQwMjUsMzQwNzAsMzQwNDYsMzQwODgsMzQwNzcsMzQwOTQsMzQwNTAsMzQwNDUsMzQwNzgsMzQwMzgsMzQwOTcsMzQwODYsMzQwMjMsMzQwMjQsMzQwMzIsMzQwMzEs''@;'; put 'put ''MzQwNDEsMzQwNzIsMzQwODAsMzQwOTYsMzQwNTksMzQwNzMsMzQwOTUsMzQ0MDIsMzQ2NDYsMzQ2NTksMzQ2NjAsMzQ2NzksMzQ3ODUsMzQ2NzUsMzQ2NDgsMzQ2NDQsMzQ2NTEsMzQ2NDIsMzQ2NTcsMzQ2NTAsMzQ2NDEsMzQ2NTQsMzQ2NjksMzQ2NjYsMzQ2NDAsMzQ2MzgsMzQ2NTUsMzQ2''@;'; put 'put ''NTMsMzQ2NzEsMzQ2NjgsMzQ2ODIsMzQ2NzAsMzQ2NTIsMzQ2NjEsMzQ2MzksMzQ2ODMsMzQ2NzcsMzQ2NTgsMzQ2NjMsMzQ2NjUsMzQ5MDYsMzUwNzcsMzUwODQsMzUwOTIsMzUwODMsMzUwOTUsMzUwOTYsMzUwOTcsMzUwNzgsMzUwOTQsMzUwODksMzUwODYsMzUwODEsMzUyMzQsMzUyMzYs''@;'; put 'put ''MzUyMzUsMzUzMDksMzUzMTIsMzUzMDgsMzU1MzUsMzU1MjYsMzU1MTIsMzU1MzksMzU1MzcsMzU1NDAsMzU1NDEsMzU1MTUsMzU1NDMsMzU1MTgsMzU1MjAsMzU1MjUsMzU1NDQsMzU1MjMsMzU1MTQsMzU1MTcsMzU1NDUsMzU5MDIsMzU5MTcsMzU5ODMsMzYwNjksMzYwNjMsMzYwNTcsMzYw''@;'; put 'put ''NzIsMzYwNTgsMzYwNjEsMzYwNzEsMzYyNTYsMzYyNTIsMzYyNTcsMzYyNTEsMzYzODQsMzYzODcsMzYzODksMzYzODgsMzYzOTgsMzYzNzMsMzYzNzksMzYzNzQsMzYzNjksMzYzNzcsMzYzOTAsMzYzOTEsMzYzNzIsMzYzNzAsMzYzNzYsMzYzNzEsMzYzODAsMzYzNzUsMzYzNzgsMzY2NTIs''@;'; put 'put ''MzY2NDQsMzY2MzIsMzY2MzQsMzY2NDAsMzY2NDMsMzY2MzAsMzY2MzEsMzY5NzksMzY5NzYsMzY5NzUsMzY5NjcsMzY5NzEsMzcxNjcsMzcxNjMsMzcxNjEsMzcxNjIsMzcxNzAsMzcxNTgsMzcxNjYsMzcyNTMsMzcyNTQsMzcyNTgsMzcyNDksMzcyNTAsMzcyNTIsMzcyNDgsMzc1ODQsMzc1''@;'; put 'put ''NzEsMzc1NzIsMzc1NjgsMzc1OTMsMzc1NTgsMzc1ODMsMzc2MTcsMzc1OTksMzc1OTIsMzc2MDksMzc1OTEsMzc1OTcsMzc1ODAsMzc2MTUsMzc1NzAsMzc2MDgsMzc1NzgsMzc1NzYsMzc1ODIsMzc2MDYsMzc1ODEsMzc1ODksMzc1NzcsMzc2MDAsMzc1OTgsMzc2MDcsMzc1ODUsMzc1ODcs''@;'; put 'put ''Mzc1NTcsMzc2MDEsMzc1NzQsMzc1NTYsMzgyNjgsMzgzMTYsMzgzMTUsMzgzMTgsMzgzMjAsMzg1NjQsMzg1NjIsMzg2MTEsMzg2NjEsMzg2NjQsMzg2NTgsMzg3NDYsMzg3OTQsMzg3OTgsMzg3OTIsMzg4NjQsMzg4NjMsMzg5NDIsMzg5NDEsMzg5NTAsMzg5NTMsMzg5NTIsMzg5NDQsMzg5''@;'; put 'put ''MzksMzg5NTEsMzkwOTAsMzkxNzYsMzkxNjIsMzkxODUsMzkxODgsMzkxOTAsMzkxOTEsMzkxODksMzkzODgsMzkzNzMsMzkzNzUsMzkzNzksMzkzODAsMzkzNzQsMzkzNjksMzkzODIsMzkzODQsMzkzNzEsMzkzODMsMzkzNzIsMzk2MDMsMzk2NjAsMzk2NTksMzk2NjcsMzk2NjYsMzk2NjUs''@;'; put 'put ''Mzk3NTAsMzk3NDcsMzk3ODMsMzk3OTYsMzk3OTMsMzk3ODIsMzk3OTgsMzk3OTcsMzk3OTIsMzk3ODQsMzk3ODAsMzk3ODgsNDAxODgsNDAxODYsNDAxODksNDAxOTEsNDAxODMsNDAxOTksNDAxOTIsNDAxODUsNDAxODcsNDAyMDAsNDAxOTcsNDAxOTYsNDA1NzksNDA2NTksNDA3MTksNDA3''@;'; put 'put ''MjAsMjA3NjQsMjA3NTUsMjA3NTksMjA3NjIsMjA3NTMsMjA5NTgsMjEzMDAsMjE0NzMsMjIxMjgsMjIxMTIsMjIxMjYsMjIxMzEsMjIxMTgsMjIxMTUsMjIxMjUsMjIxMzAsMjIxMTAsMjIxMzUsMjIzMDAsMjIyOTksMjI3MjgsMjI3MTcsMjI3MjksMjI3MTksMjI3MTQsMjI3MjIsMjI3MTYs''@;'; put 'put ''MjI3MjYsMjMzMTksMjMzMjEsMjMzMjMsMjMzMjksMjMzMTYsMjMzMTUsMjMzMTIsMjMzMTgsMjMzMzYsMjMzMjIsMjMzMjgsMjMzMjYsMjM1MzUsMjM5ODAsMjM5ODUsMjM5NzcsMjM5NzUsMjM5ODksMjM5ODQsMjM5ODIsMjM5NzgsMjM5NzYsMjM5ODYsMjM5ODEsMjM5ODMsMjM5ODgsMjQx''@;'; put 'put ''NjcsMjQxNjgsMjQxNjYsMjQxNzUsMjQyOTcsMjQyOTUsMjQyOTQsMjQyOTYsMjQyOTMsMjQzOTUsMjQ1MDgsMjQ5ODksMjVlMywyNDk4MiwyNTAyOSwyNTAxMiwyNTAzMCwyNTAyNSwyNTAzNiwyNTAxOCwyNTAyMywyNTAxNiwyNDk3MiwyNTgxNSwyNTgxNCwyNTgwOCwyNTgwNywyNTgwMSwy''@;'; put 'put ''NTc4OSwyNTczNywyNTc5NSwyNTgxOSwyNTg0MywyNTgxNywyNTkwNywyNTk4MywyNTk4MCwyNjAxOCwyNjMxMiwyNjMwMiwyNjMwNCwyNjMxNCwyNjMxNSwyNjMxOSwyNjMwMSwyNjI5OSwyNjI5OCwyNjMxNiwyNjQwMywyNzE4OCwyNzIzOCwyNzIwOSwyNzIzOSwyNzE4NiwyNzI0MCwyNzE5''@;'; put 'put ''OCwyNzIyOSwyNzI0NSwyNzI1NCwyNzIyNywyNzIxNywyNzE3NiwyNzIyNiwyNzE5NSwyNzE5OSwyNzIwMSwyNzI0MiwyNzIzNiwyNzIxNiwyNzIxNSwyNzIyMCwyNzI0NywyNzI0MSwyNzIzMiwyNzE5NiwyNzIzMCwyNzIyMiwyNzIyMSwyNzIxMywyNzIxNCwyNzIwNiwyNzQ3NywyNzQ3Niwy''@;'; put 'put ''NzQ3OCwyNzU1OSwyNzU2MiwyNzU2MywyNzU5MiwyNzU5MSwyNzY1MiwyNzY1MSwyNzY1NCwyODU4OSwyODYxOSwyODU3OSwyODYxNSwyODYwNCwyODYyMiwyODYxNiwyODUxMCwyODYxMiwyODYwNSwyODU3NCwyODYxOCwyODU4NCwyODY3NiwyODU4MSwyODU5MCwyODYwMiwyODU4OCwyODU4''@;'; put 'put ''NiwyODYyMywyODYwNywyODYwMCwyODU3OCwyODYxNywyODU4NywyODYyMSwyODU5MSwyODU5NCwyODU5MiwyOTEyNSwyOTEyMiwyOTExOSwyOTExMiwyOTE0MiwyOTEyMCwyOTEyMSwyOTEzMSwyOTE0MCwyOTEzMCwyOTEyNywyOTEzNSwyOTExNywyOTE0NCwyOTExNiwyOTEyNiwyOTE0Niwy''@;'; put 'put ''OTE0NywyOTM0MSwyOTM0MiwyOTU0NSwyOTU0MiwyOTU0MywyOTU0OCwyOTU0MSwyOTU0NywyOTU0NiwyOTgyMywyOTg1MCwyOTg1NiwyOTg0NCwyOTg0MiwyOTg0NSwyOTg1NywyOTk2MywzMDA4MCwzMDI1NSwzMDI1MywzMDI1NywzMDI2OSwzMDI1OSwzMDI2OCwzMDI2MSwzMDI1OCwzMDI1''@;'; put 'put ''NiwzMDM5NSwzMDQzOCwzMDYxOCwzMDYyMSwzMDYyNSwzMDYyMCwzMDYxOSwzMDYyNiwzMDYyNywzMDYxMywzMDYxNywzMDYxNSwzMDk0MSwzMDk1MywzMDk0OSwzMDk1NCwzMDk0MiwzMDk0NywzMDkzOSwzMDk0NSwzMDk0NiwzMDk1NywzMDk0MywzMDk0NCwzMTE0MCwzMTMwMCwzMTMwNCwz''@;'; put 'put ''MTMwMywzMTQxNCwzMTQxNiwzMTQxMywzMTQwOSwzMTQxNSwzMTcxMCwzMTcxNSwzMTcxOSwzMTcwOSwzMTcwMSwzMTcxNywzMTcwNiwzMTcyMCwzMTczNywzMTcwMCwzMTcyMiwzMTcxNCwzMTcwOCwzMTcyMywzMTcwNCwzMTcxMSwzMTk1NCwzMTk1NiwzMTk1OSwzMTk1MiwzMTk1MywzMjI3''@;'; put 'put ''NCwzMjI4OSwzMjI3OSwzMjI2OCwzMjI4NywzMjI4OCwzMjI3NSwzMjI3MCwzMjI4NCwzMjI3NywzMjI4MiwzMjI5MCwzMjI2NywzMjI3MSwzMjI3OCwzMjI2OSwzMjI3NiwzMjI5MywzMjI5MiwzMjU3OSwzMjYzNSwzMjYzNiwzMjYzNCwzMjY4OSwzMjc1MSwzMjgxMCwzMjgwOSwzMjg3Niwz''@;'; put 'put ''MzIwMSwzMzE5MCwzMzE5OCwzMzIwOSwzMzIwNSwzMzE5NSwzMzIwMCwzMzE5NiwzMzIwNCwzMzIwMiwzMzIwNywzMzE5MSwzMzI2NiwzMzM2NSwzMzM2NiwzMzM2NywzNDEzNCwzNDExNywzNDE1NSwzNDEyNSwzNDEzMSwzNDE0NSwzNDEzNiwzNDExMiwzNDExOCwzNDE0OCwzNDExMywzNDE0''@;'; put 'put ''NiwzNDExNiwzNDEyOSwzNDExOSwzNDE0NywzNDExMCwzNDEzOSwzNDE2MSwzNDEyNiwzNDE1OCwzNDE2NSwzNDEzMywzNDE1MSwzNDE0NCwzNDE4OCwzNDE1MCwzNDE0MSwzNDEzMiwzNDE0OSwzNDE1NiwzNDQwMywzNDQwNSwzNDQwNCwzNDcxNSwzNDcwMywzNDcxMSwzNDcwNywzNDcwNiwz''@;'; put 'put ''NDY5NiwzNDY4OSwzNDcxMCwzNDcxMiwzNDY4MSwzNDY5NSwzNDcyMywzNDY5MywzNDcwNCwzNDcwNSwzNDcxNywzNDY5MiwzNDcwOCwzNDcxNiwzNDcxNCwzNDY5NywzNTEwMiwzNTExMCwzNTEyMCwzNTExNywzNTExOCwzNTExMSwzNTEyMSwzNTEwNiwzNTExMywzNTEwNywzNTExOSwzNTEx''@;'; put 'put ''NiwzNTEwMywzNTMxMywzNTU1MiwzNTU1NCwzNTU3MCwzNTU3MiwzNTU3MywzNTU0OSwzNTYwNCwzNTU1NiwzNTU1MSwzNTU2OCwzNTUyOCwzNTU1MCwzNTU1MywzNTU2MCwzNTU4MywzNTU2NywzNTU3OSwzNTk4NSwzNTk4NiwzNTk4NCwzNjA4NSwzNjA3OCwzNjA4MSwzNjA4MCwzNjA4Mywz''@;'; put 'put ''NjIwNCwzNjIwNiwzNjI2MSwzNjI2MywzNjQwMywzNjQxNCwzNjQwOCwzNjQxNiwzNjQyMSwzNjQwNiwzNjQxMiwzNjQxMywzNjQxNywzNjQwMCwzNjQxNSwzNjU0MSwzNjY2MiwzNjY1NCwzNjY2MSwzNjY1OCwzNjY2NSwzNjY2MywzNjY2MCwzNjk4MiwzNjk4NSwzNjk4NywzNjk5OCwzNzEx''@;'; put 'put ''NCwzNzE3MSwzNzE3MywzNzE3NCwzNzI2NywzNzI2NCwzNzI2NSwzNzI2MSwzNzI2MywzNzY3MSwzNzY2MiwzNzY0MCwzNzY2MywzNzYzOCwzNzY0NywzNzc1NCwzNzY4OCwzNzY5MiwzNzY1OSwzNzY2NywzNzY1MCwzNzYzMywzNzcwMiwzNzY3NywzNzY0NiwzNzY0NSwzNzU3OSwzNzY2MSwz''@;'; put 'put ''NzYyNiwzNzY2OSwzNzY1MSwzNzYyNSwzNzYyMywzNzY4NCwzNzYzNCwzNzY2OCwzNzYzMSwzNzY3MywzNzY4OSwzNzY4NSwzNzY3NCwzNzY1MiwzNzY0NCwzNzY0MywzNzYzMCwzNzY0MSwzNzYzMiwzNzYyNywzNzY1NCwzODMzMiwzODM0OSwzODMzNCwzODMyOSwzODMzMCwzODMyNiwzODMz''@;'; put 'put ''NSwzODMyNSwzODMzMywzODU2OSwzODYxMiwzODY2NywzODY3NCwzODY3MiwzODgwOSwzODgwNywzODgwNCwzODg5NiwzODkwNCwzODk2NSwzODk1OSwzODk2MiwzOTIwNCwzOTE5OSwzOTIwNywzOTIwOSwzOTMyNiwzOTQwNiwzOTQwNCwzOTM5NywzOTM5NiwzOTQwOCwzOTM5NSwzOTQwMiwz''@;'; put 'put ''OTQwMSwzOTM5OSwzOTYwOSwzOTYxNSwzOTYwNCwzOTYxMSwzOTY3MCwzOTY3NCwzOTY3MywzOTY3MSwzOTczMSwzOTgwOCwzOTgxMywzOTgxNSwzOTgwNCwzOTgwNiwzOTgwMywzOTgxMCwzOTgyNywzOTgyNiwzOTgyNCwzOTgwMiwzOTgyOSwzOTgwNSwzOTgxNiw0MDIyOSw0MDIxNSw0MDIy''@;'; put 'put ''NCw0MDIyMiw0MDIxMiw0MDIzMyw0MDIyMSw0MDIxNiw0MDIyNiw0MDIwOCw0MDIxNyw0MDIyMyw0MDU4NCw0MDU4Miw0MDU4Myw0MDYyMiw0MDYyMSw0MDY2MSw0MDY2Miw0MDY5OCw0MDcyMiw0MDc2NSwyMDc3NCwyMDc3MywyMDc3MCwyMDc3MiwyMDc2OCwyMDc3NywyMTIzNiwyMjE2Mywy''@;'; put 'put ''MjE1NiwyMjE1NywyMjE1MCwyMjE0OCwyMjE0NywyMjE0MiwyMjE0NiwyMjE0MywyMjE0NSwyMjc0MiwyMjc0MCwyMjczNSwyMjczOCwyMzM0MSwyMzMzMywyMzM0NiwyMzMzMSwyMzM0MCwyMzMzNSwyMzMzNCwyMzM0MywyMzM0MiwyMzQxOSwyMzUzNywyMzUzOCwyMzk5MSwyNDE3MiwyNDE3''@;'; put 'put ''MCwyNDUxMCwyNDUwNywyNTAyNywyNTAxMywyNTAyMCwyNTA2MywyNTA1NiwyNTA2MSwyNTA2MCwyNTA2NCwyNTA1NCwyNTgzOSwyNTgzMywyNTgyNywyNTgzNSwyNTgyOCwyNTgzMiwyNTk4NSwyNTk4NCwyNjAzOCwyNjA3NCwyNjMyMiwyNzI3NywyNzI4NiwyNzI2NSwyNzMwMSwyNzI3Mywy''@;'; put 'put ''NzI5NSwyNzI5MSwyNzI5NywyNzI5NCwyNzI3MSwyNzI4MywyNzI3OCwyNzI4NSwyNzI2NywyNzMwNCwyNzMwMCwyNzI4MSwyNzI2MywyNzMwMiwyNzI5MCwyNzI2OSwyNzI3NiwyNzI4MiwyNzQ4MywyNzU2NSwyNzY1NywyODYyMCwyODU4NSwyODY2MCwyODYyOCwyODY0MywyODYzNiwyODY1''@;'; put 'put ''MywyODY0NywyODY0NiwyODYzOCwyODY1OCwyODYzNywyODY0MiwyODY0OCwyOTE1MywyOTE2OSwyOTE2MCwyOTE3MCwyOTE1NiwyOTE2OCwyOTE1NCwyOTU1NSwyOTU1MCwyOTU1MSwyOTg0NywyOTg3NCwyOTg2NywyOTg0MCwyOTg2NiwyOTg2OSwyOTg3MywyOTg2MSwyOTg3MSwyOTk2OCwy''@;'; put 'put ''OTk2OSwyOTk3MCwyOTk2NywzMDA4NCwzMDI3NSwzMDI4MCwzMDI4MSwzMDI3OSwzMDM3MiwzMDQ0MSwzMDY0NSwzMDYzNSwzMDY0MiwzMDY0NywzMDY0NiwzMDY0NCwzMDY0MSwzMDYzMiwzMDcwNCwzMDk2MywzMDk3MywzMDk3OCwzMDk3MSwzMDk3MiwzMDk2MiwzMDk4MSwzMDk2OSwzMDk3''@;'; put 'put ''NCwzMDk4MCwzMTE0NywzMTE0NCwzMTMyNCwzMTMyMywzMTMxOCwzMTMyMCwzMTMxNiwzMTMyMiwzMTQyMiwzMTQyNCwzMTQyNSwzMTc0OSwzMTc1OSwzMTczMCwzMTc0NCwzMTc0MywzMTczOSwzMTc1OCwzMTczMiwzMTc1NSwzMTczMSwzMTc0NiwzMTc1MywzMTc0NywzMTc0NSwzMTczNiwz''@;'; put 'put ''MTc0MSwzMTc1MCwzMTcyOCwzMTcyOSwzMTc2MCwzMTc1NCwzMTk3NiwzMjMwMSwzMjMxNiwzMjMyMiwzMjMwNywzODk4NCwzMjMxMiwzMjI5OCwzMjMyOSwzMjMyMCwzMjMyNywzMjI5NywzMjMzMiwzMjMwNCwzMjMxNSwzMjMxMCwzMjMyNCwzMjMxNCwzMjU4MSwzMjYzOSwzMjYzOCwzMjYz''@;'; put 'put ''NywzMjc1NiwzMjc1NCwzMjgxMiwzMzIxMSwzMzIyMCwzMzIyOCwzMzIyNiwzMzIyMSwzMzIyMywzMzIxMiwzMzI1NywzMzM3MSwzMzM3MCwzMzM3MiwzNDE3OSwzNDE3NiwzNDE5MSwzNDIxNSwzNDE5NywzNDIwOCwzNDE4NywzNDIxMSwzNDE3MSwzNDIxMiwzNDIwMiwzNDIwNiwzNDE2Nywz''@;'; put 'put ''NDE3MiwzNDE4NSwzNDIwOSwzNDE3MCwzNDE2OCwzNDEzNSwzNDE5MCwzNDE5OCwzNDE4MiwzNDE4OSwzNDIwMSwzNDIwNSwzNDE3NywzNDIxMCwzNDE3OCwzNDE4NCwzNDE4MSwzNDE2OSwzNDE2NiwzNDIwMCwzNDE5MiwzNDIwNywzNDQwOCwzNDc1MCwzNDczMCwzNDczMywzNDc1NywzNDcz''@;'; put 'put ''NiwzNDczMiwzNDc0NSwzNDc0MSwzNDc0OCwzNDczNCwzNDc2MSwzNDc1NSwzNDc1NCwzNDc2NCwzNDc0MywzNDczNSwzNDc1NiwzNDc2MiwzNDc0MCwzNDc0MiwzNDc1MSwzNDc0NCwzNDc0OSwzNDc4MiwzNDczOCwzNTEyNSwzNTEyMywzNTEzMiwzNTEzNCwzNTEzNywzNTE1NCwzNTEyNywz''@;'; put 'put ''NTEzOCwzNTI0NSwzNTI0NywzNTI0NiwzNTMxNCwzNTMxNSwzNTYxNCwzNTYwOCwzNTYwNiwzNTYwMSwzNTU4OSwzNTU5NSwzNTYxOCwzNTU5OSwzNTYwMiwzNTYwNSwzNTU5MSwzNTU5NywzNTU5MiwzNTU5MCwzNTYxMiwzNTYwMywzNTYxMCwzNTkxOSwzNTk1MiwzNTk1NCwzNTk1MywzNTk1''@;'; put 'put ''MSwzNTk4OSwzNTk4OCwzNjA4OSwzNjIwNywzNjQzMCwzNjQyOSwzNjQzNSwzNjQzMiwzNjQyOCwzNjQyMywzNjY3NSwzNjY3MiwzNjk5NywzNjk5MCwzNzE3NiwzNzI3NCwzNzI4MiwzNzI3NSwzNzI3MywzNzI3OSwzNzI4MSwzNzI3NywzNzI4MCwzNzc5MywzNzc2MywzNzgwNywzNzczMiwz''@;'; put 'put ''NzcxOCwzNzcwMywzNzc1NiwzNzcyMCwzNzcyNCwzNzc1MCwzNzcwNSwzNzcxMiwzNzcxMywzNzcyOCwzNzc0MSwzNzc3NSwzNzcwOCwzNzczOCwzNzc1MywzNzcxOSwzNzcxNywzNzcxNCwzNzcxMSwzNzc0NSwzNzc1MSwzNzc1NSwzNzcyOSwzNzcyNiwzNzczMSwzNzczNSwzNzc2MCwzNzcx''@;'; put 'put ''MCwzNzcyMSwzODM0MywzODMzNiwzODM0NSwzODMzOSwzODM0MSwzODMyNywzODU3NCwzODU3NiwzODU3MiwzODY4OCwzODY4NywzODY4MCwzODY4NSwzODY4MSwzODgxMCwzODgxNywzODgxMiwzODgxNCwzODgxMywzODg2OSwzODg2OCwzODg5NywzODk3NywzODk4MCwzODk4NiwzODk4NSwz''@;'; put 'put ''ODk4MSwzODk3OSwzOTIwNSwzOTIxMSwzOTIxMiwzOTIxMCwzOTIxOSwzOTIxOCwzOTIxNSwzOTIxMywzOTIxNywzOTIxNiwzOTMyMCwzOTMzMSwzOTMyOSwzOTQyNiwzOTQxOCwzOTQxMiwzOTQxNSwzOTQxNywzOTQxNiwzOTQxNCwzOTQxOSwzOTQyMSwzOTQyMiwzOTQyMCwzOTQyNywzOTYx''@;'; put 'put ''NCwzOTY3OCwzOTY3NywzOTY4MSwzOTY3NiwzOTc1MiwzOTgzNCwzOTg0OCwzOTgzOCwzOTgzNSwzOTg0NiwzOTg0MSwzOTg0NSwzOTg0NCwzOTgxNCwzOTg0MiwzOTg0MCwzOTg1NSw0MDI0Myw0MDI1Nyw0MDI5NSw0MDI0Niw0MDIzOCw0MDIzOSw0MDI0MSw0MDI0OCw0MDI0MCw0MDI2MSw0''@;'; put 'put ''MDI1OCw0MDI1OSw0MDI1NCw0MDI0Nyw0MDI1Niw0MDI1MywzMjc1Nyw0MDIzNyw0MDU4Niw0MDU4NSw0MDU4OSw0MDYyNCw0MDY0OCw0MDY2Niw0MDY5OSw0MDcwMyw0MDc0MCw0MDczOSw0MDczOCw0MDc4OCw0MDg2NCwyMDc4NSwyMDc4MSwyMDc4MiwyMjE2OCwyMjE3MiwyMjE2NywyMjE3''@;'; put 'put ''MCwyMjE3MywyMjE2OSwyMjg5NiwyMzM1NiwyMzY1NywyMzY1OCwyNGUzLDI0MTczLDI0MTc0LDI1MDQ4LDI1MDU1LDI1MDY5LDI1MDcwLDI1MDczLDI1MDY2LDI1MDcyLDI1MDY3LDI1MDQ2LDI1MDY1LDI1ODU1LDI1ODYwLDI1ODUzLDI1ODQ4LDI1ODU3LDI1ODU5LDI1ODUyLDI2MDA0LDI2''@;'; put 'put ''MDc1LDI2MzMwLDI2MzMxLDI2MzI4LDI3MzMzLDI3MzIxLDI3MzI1LDI3MzYxLDI3MzM0LDI3MzIyLDI3MzE4LDI3MzE5LDI3MzM1LDI3MzE2LDI3MzA5LDI3NDg2LDI3NTkzLDI3NjU5LDI4Njc5LDI4Njg0LDI4Njg1LDI4NjczLDI4Njc3LDI4NjkyLDI4Njg2LDI4NjcxLDI4NjcyLDI4NjY3''@;'; put 'put ''LDI4NzEwLDI4NjY4LDI4NjYzLDI4NjgyLDI5MTg1LDI5MTgzLDI5MTc3LDI5MTg3LDI5MTgxLDI5NTU4LDI5ODgwLDI5ODg4LDI5ODc3LDI5ODg5LDI5ODg2LDI5ODc4LDI5ODgzLDI5ODkwLDI5OTcyLDI5OTcxLDMwMzAwLDMwMzA4LDMwMjk3LDMwMjg4LDMwMjkxLDMwMjk1LDMwMjk4LDMw''@;'; put 'put ''Mzc0LDMwMzk3LDMwNDQ0LDMwNjU4LDMwNjUwLDMwOTc1LDMwOTg4LDMwOTk1LDMwOTk2LDMwOTg1LDMwOTkyLDMwOTk0LDMwOTkzLDMxMTQ5LDMxMTQ4LDMxMzI3LDMxNzcyLDMxNzg1LDMxNzY5LDMxNzc2LDMxNzc1LDMxNzg5LDMxNzczLDMxNzgyLDMxNzg0LDMxNzc4LDMxNzgxLDMxNzky''@;'; put 'put ''LDMyMzQ4LDMyMzM2LDMyMzQyLDMyMzU1LDMyMzQ0LDMyMzU0LDMyMzUxLDMyMzM3LDMyMzUyLDMyMzQzLDMyMzM5LDMyNjkzLDMyNjkxLDMyNzU5LDMyNzYwLDMyODg1LDMzMjMzLDMzMjM0LDMzMjMyLDMzMzc1LDMzMzc0LDM0MjI4LDM0MjQ2LDM0MjQwLDM0MjQzLDM0MjQyLDM0MjI3LDM0''@;'; put 'put ''MjI5LDM0MjM3LDM0MjQ3LDM0MjQ0LDM0MjM5LDM0MjUxLDM0MjU0LDM0MjQ4LDM0MjQ1LDM0MjI1LDM0MjMwLDM0MjU4LDM0MzQwLDM0MjMyLDM0MjMxLDM0MjM4LDM0NDA5LDM0NzkxLDM0NzkwLDM0Nzg2LDM0Nzc5LDM0Nzk1LDM0Nzk0LDM0Nzg5LDM0NzgzLDM0ODAzLDM0Nzg4LDM0Nzcy''@;'; put 'put ''LDM0NzgwLDM0NzcxLDM0Nzk3LDM0Nzc2LDM0Nzg3LDM0NzI0LDM0Nzc1LDM0Nzc3LDM0ODE3LDM0ODA0LDM0NzkyLDM0NzgxLDM1MTU1LDM1MTQ3LDM1MTUxLDM1MTQ4LDM1MTQyLDM1MTUyLDM1MTUzLDM1MTQ1LDM1NjI2LDM1NjIzLDM1NjE5LDM1NjM1LDM1NjMyLDM1NjM3LDM1NjU1LDM1''@;'; put 'put ''NjMxLDM1NjQ0LDM1NjQ2LDM1NjMzLDM1NjIxLDM1NjM5LDM1NjIyLDM1NjM4LDM1NjMwLDM1NjIwLDM1NjQzLDM1NjQ1LDM1NjQyLDM1OTA2LDM1OTU3LDM1OTkzLDM1OTkyLDM1OTkxLDM2MDk0LDM2MTAwLDM2MDk4LDM2MDk2LDM2NDQ0LDM2NDUwLDM2NDQ4LDM2NDM5LDM2NDM4LDM2NDQ2''@;'; put 'put ''LDM2NDUzLDM2NDU1LDM2NDQzLDM2NDQyLDM2NDQ5LDM2NDQ1LDM2NDU3LDM2NDM2LDM2Njc4LDM2Njc5LDM2NjgwLDM2NjgzLDM3MTYwLDM3MTc4LDM3MTc5LDM3MTgyLDM3Mjg4LDM3Mjg1LDM3Mjg3LDM3Mjk1LDM3MjkwLDM3ODEzLDM3NzcyLDM3Nzc4LDM3ODE1LDM3Nzg3LDM3Nzg5LDM3''@;'; put 'put ''NzY5LDM3Nzk5LDM3Nzc0LDM3ODAyLDM3NzkwLDM3Nzk4LDM3NzgxLDM3NzY4LDM3Nzg1LDM3NzkxLDM3NzczLDM3ODA5LDM3Nzc3LDM3ODEwLDM3Nzk2LDM3ODAwLDM3ODEyLDM3Nzk1LDM3Nzk3LDM4MzU0LDM4MzU1LDM4MzUzLDM4NTc5LDM4NjE1LDM4NjE4LDI0MDAyLDM4NjIzLDM4NjE2''@;'; put 'put ''LDM4NjIxLDM4NjkxLDM4NjkwLDM4NjkzLDM4ODI4LDM4ODMwLDM4ODI0LDM4ODI3LDM4ODIwLDM4ODI2LDM4ODE4LDM4ODIxLDM4ODcxLDM4ODczLDM4ODcwLDM4ODcyLDM4OTA2LDM4OTkyLDM4OTkzLDM4OTk0LDM5MDk2LDM5MjMzLDM5MjI4LDM5MjI2LDM5NDM5LDM5NDM1LDM5NDMzLDM5''@;'; put 'put ''NDM3LDM5NDI4LDM5NDQxLDM5NDM0LDM5NDI5LDM5NDMxLDM5NDMwLDM5NjE2LDM5NjQ0LDM5Njg4LDM5Njg0LDM5Njg1LDM5NzIxLDM5NzMzLDM5NzU0LDM5NzU2LDM5NzU1LDM5ODc5LDM5ODc4LDM5ODc1LDM5ODcxLDM5ODczLDM5ODYxLDM5ODY0LDM5ODkxLDM5ODYyLDM5ODc2LDM5ODY1''@;'; put 'put ''LDM5ODY5LDQwMjg0LDQwMjc1LDQwMjcxLDQwMjY2LDQwMjgzLDQwMjY3LDQwMjgxLDQwMjc4LDQwMjY4LDQwMjc5LDQwMjc0LDQwMjc2LDQwMjg3LDQwMjgwLDQwMjgyLDQwNTkwLDQwNTg4LDQwNjcxLDQwNzA1LDQwNzA0LDQwNzI2LDQwNzQxLDQwNzQ3LDQwNzQ2LDQwNzQ1LDQwNzQ0LDQw''@;'; put 'put ''NzgwLDQwNzg5LDIwNzg4LDIwNzg5LDIxMTQyLDIxMjM5LDIxNDI4LDIyMTg3LDIyMTg5LDIyMTgyLDIyMTgzLDIyMTg2LDIyMTg4LDIyNzQ2LDIyNzQ5LDIyNzQ3LDIyODAyLDIzMzU3LDIzMzU4LDIzMzU5LDI0MDAzLDI0MTc2LDI0NTExLDI1MDgzLDI1ODYzLDI1ODcyLDI1ODY5LDI1ODY1''@;'; put 'put ''LDI1ODY4LDI1ODcwLDI1OTg4LDI2MDc4LDI2MDc3LDI2MzM0LDI3MzY3LDI3MzYwLDI3MzQwLDI3MzQ1LDI3MzUzLDI3MzM5LDI3MzU5LDI3MzU2LDI3MzQ0LDI3MzcxLDI3MzQzLDI3MzQxLDI3MzU4LDI3NDg4LDI3NTY4LDI3NjYwLDI4Njk3LDI4NzExLDI4NzA0LDI4Njk0LDI4NzE1LDI4''@;'; put 'put ''NzA1LDI4NzA2LDI4NzA3LDI4NzEzLDI4Njk1LDI4NzA4LDI4NzAwLDI4NzE0LDI5MTk2LDI5MTk0LDI5MTkxLDI5MTg2LDI5MTg5LDI5MzQ5LDI5MzUwLDI5MzQ4LDI5MzQ3LDI5MzQ1LDI5ODk5LDI5ODkzLDI5ODc5LDI5ODkxLDI5OTc0LDMwMzA0LDMwNjY1LDMwNjY2LDMwNjYwLDMwNzA1''@;'; put 'put ''LDMxMDA1LDMxMDAzLDMxMDA5LDMxMDA0LDMwOTk5LDMxMDA2LDMxMTUyLDMxMzM1LDMxMzM2LDMxNzk1LDMxODA0LDMxODAxLDMxNzg4LDMxODAzLDMxOTgwLDMxOTc4LDMyMzc0LDMyMzczLDMyMzc2LDMyMzY4LDMyMzc1LDMyMzY3LDMyMzc4LDMyMzcwLDMyMzcyLDMyMzYwLDMyNTg3LDMy''@;'; put 'put ''NTg2LDMyNjQzLDMyNjQ2LDMyNjk1LDMyNzY1LDMyNzY2LDMyODg4LDMzMjM5LDMzMjM3LDMzMzgwLDMzMzc3LDMzMzc5LDM0MjgzLDM0Mjg5LDM0Mjg1LDM0MjY1LDM0MjczLDM0MjgwLDM0MjY2LDM0MjYzLDM0Mjg0LDM0MjkwLDM0Mjk2LDM0MjY0LDM0MjcxLDM0Mjc1LDM0MjY4LDM0MjU3''@;'; put 'put ''LDM0Mjg4LDM0Mjc4LDM0Mjg3LDM0MjcwLDM0Mjc0LDM0ODE2LDM0ODEwLDM0ODE5LDM0ODA2LDM0ODA3LDM0ODI1LDM0ODI4LDM0ODI3LDM0ODIyLDM0ODEyLDM0ODI0LDM0ODE1LDM0ODI2LDM0ODE4LDM1MTcwLDM1MTYyLDM1MTYzLDM1MTU5LDM1MTY5LDM1MTY0LDM1MTYwLDM1MTY1LDM1''@;'; put 'put ''MTYxLDM1MjA4LDM1MjU1LDM1MjU0LDM1MzE4LDM1NjY0LDM1NjU2LDM1NjU4LDM1NjQ4LDM1NjY3LDM1NjcwLDM1NjY4LDM1NjU5LDM1NjY5LDM1NjY1LDM1NjUwLDM1NjY2LDM1NjcxLDM1OTA3LDM1OTU5LDM1OTU4LDM1OTk0LDM2MTAyLDM2MTAzLDM2MTA1LDM2MjY4LDM2MjY2LDM2MjY5''@;'; put 'put ''LDM2MjY3LDM2NDYxLDM2NDcyLDM2NDY3LDM2NDU4LDM2NDYzLDM2NDc1LDM2NTQ2LDM2NjkwLDM2Njg5LDM2Njg3LDM2Njg4LDM2NjkxLDM2Nzg4LDM3MTg0LDM3MTgzLDM3Mjk2LDM3MjkzLDM3ODU0LDM3ODMxLDM3ODM5LDM3ODI2LDM3ODUwLDM3ODQwLDM3ODgxLDM3ODY4LDM3ODM2LDM3''@;'; put 'put ''ODQ5LDM3ODAxLDM3ODYyLDM3ODM0LDM3ODQ0LDM3ODcwLDM3ODU5LDM3ODQ1LDM3ODI4LDM3ODM4LDM3ODI0LDM3ODQyLDM3ODYzLDM4MjY5LDM4MzYyLDM4MzYzLDM4NjI1LDM4Njk3LDM4Njk5LDM4NzAwLDM4Njk2LDM4Njk0LDM4ODM1LDM4ODM5LDM4ODM4LDM4ODc3LDM4ODc4LDM4ODc5''@;'; put 'put ''LDM5MDA0LDM5MDAxLDM5MDA1LDM4OTk5LDM5MTAzLDM5MTAxLDM5MDk5LDM5MTAyLDM5MjQwLDM5MjM5LDM5MjM1LDM5MzM0LDM5MzM1LDM5NDUwLDM5NDQ1LDM5NDYxLDM5NDUzLDM5NDYwLDM5NDUxLDM5NDU4LDM5NDU2LDM5NDYzLDM5NDU5LDM5NDU0LDM5NDUyLDM5NDQ0LDM5NjE4LDM5''@;'; put 'put ''NjkxLDM5NjkwLDM5Njk0LDM5NjkyLDM5NzM1LDM5OTE0LDM5OTE1LDM5OTA0LDM5OTAyLDM5OTA4LDM5OTEwLDM5OTA2LDM5OTIwLDM5ODkyLDM5ODk1LDM5OTE2LDM5OTAwLDM5ODk3LDM5OTA5LDM5ODkzLDM5OTA1LDM5ODk4LDQwMzExLDQwMzIxLDQwMzMwLDQwMzI0LDQwMzI4LDQwMzA1''@;'; put 'put ''LDQwMzIwLDQwMzEyLDQwMzI2LDQwMzMxLDQwMzMyLDQwMzE3LDQwMjk5LDQwMzA4LDQwMzA5LDQwMzA0LDQwMjk3LDQwMzI1LDQwMzA3LDQwMzE1LDQwMzIyLDQwMzAzLDQwMzEzLDQwMzE5LDQwMzI3LDQwMjk2LDQwNTk2LDQwNTkzLDQwNjQwLDQwNzAwLDQwNzQ5LDQwNzY4LDQwNzY5LDQw''@;'; put 'put ''NzgxLDQwNzkwLDQwNzkxLDQwNzkyLDIxMzAzLDIyMTk0LDIyMTk3LDIyMTk1LDIyNzU1LDIzMzY1LDI0MDA2LDI0MDA3LDI0MzAyLDI0MzAzLDI0NTEyLDI0NTEzLDI1MDgxLDI1ODc5LDI1ODc4LDI1ODc3LDI1ODc1LDI2MDc5LDI2MzQ0LDI2MzM5LDI2MzQwLDI3Mzc5LDI3Mzc2LDI3Mzcw''@;'; put 'put ''LDI3MzY4LDI3Mzg1LDI3Mzc3LDI3Mzc0LDI3Mzc1LDI4NzMyLDI4NzI1LDI4NzE5LDI4NzI3LDI4NzI0LDI4NzIxLDI4NzM4LDI4NzI4LDI4NzM1LDI4NzMwLDI4NzI5LDI4NzM2LDI4NzMxLDI4NzIzLDI4NzM3LDI5MjAzLDI5MjA0LDI5MzUyLDI5NTY1LDI5NTY0LDI5ODgyLDMwMzc5LDMw''@;'; put 'put ''Mzc4LDMwMzk4LDMwNDQ1LDMwNjY4LDMwNjcwLDMwNjcxLDMwNjY5LDMwNzA2LDMxMDEzLDMxMDExLDMxMDE1LDMxMDE2LDMxMDEyLDMxMDE3LDMxMTU0LDMxMzQyLDMxMzQwLDMxMzQxLDMxNDc5LDMxODE3LDMxODE2LDMxODE4LDMxODE1LDMxODEzLDMxOTgyLDMyMzc5LDMyMzgyLDMyMzg1''@;'; put 'put ''LDMyMzg0LDMyNjk4LDMyNzY3LDMyODg5LDMzMjQzLDMzMjQxLDMzMjkxLDMzMzg0LDMzMzg1LDM0MzM4LDM0MzAzLDM0MzA1LDM0MzAyLDM0MzMxLDM0MzA0LDM0Mjk0LDM0MzA4LDM0MzEzLDM0MzA5LDM0MzE2LDM0MzAxLDM0ODQxLDM0ODMyLDM0ODMzLDM0ODM5LDM0ODM1LDM0ODM4LDM1''@;'; put 'put ''MTcxLDM1MTc0LDM1MjU3LDM1MzE5LDM1NjgwLDM1NjkwLDM1Njc3LDM1Njg4LDM1NjgzLDM1Njg1LDM1Njg3LDM1NjkzLDM2MjcwLDM2NDg2LDM2NDg4LDM2NDg0LDM2Njk3LDM2Njk0LDM2Njk1LDM2NjkzLDM2Njk2LDM2Njk4LDM3MDA1LDM3MTg3LDM3MTg1LDM3MzAzLDM3MzAxLDM3Mjk4''@;'; put 'put ''LDM3Mjk5LDM3ODk5LDM3OTA3LDM3ODgzLDM3OTIwLDM3OTAzLDM3OTA4LDM3ODg2LDM3OTA5LDM3OTA0LDM3OTI4LDM3OTEzLDM3OTAxLDM3ODc3LDM3ODg4LDM3ODc5LDM3ODk1LDM3OTAyLDM3OTEwLDM3OTA2LDM3ODgyLDM3ODk3LDM3ODgwLDM3ODk4LDM3ODg3LDM3ODg0LDM3OTAwLDM3''@;'; put 'put ''ODc4LDM3OTA1LDM3ODk0LDM4MzY2LDM4MzY4LDM4MzY3LDM4NzAyLDM4NzAzLDM4ODQxLDM4ODQzLDM4OTA5LDM4OTEwLDM5MDA4LDM5MDEwLDM5MDExLDM5MDA3LDM5MTA1LDM5MTA2LDM5MjQ4LDM5MjQ2LDM5MjU3LDM5MjQ0LDM5MjQzLDM5MjUxLDM5NDc0LDM5NDc2LDM5NDczLDM5NDY4''@;'; put 'put ''LDM5NDY2LDM5NDc4LDM5NDY1LDM5NDcwLDM5NDgwLDM5NDY5LDM5NjIzLDM5NjI2LDM5NjIyLDM5Njk2LDM5Njk4LDM5Njk3LDM5OTQ3LDM5OTQ0LDM5OTI3LDM5OTQxLDM5OTU0LDM5OTI4LDRlNCwzOTk0MywzOTk1MCwzOTk0MiwzOTk1OSwzOTk1NiwzOTk0NSw0MDM1MSw0MDM0NSw0MDM1''@;'; put 'put ''Niw0MDM0OSw0MDMzOCw0MDM0NCw0MDMzNiw0MDM0Nyw0MDM1Miw0MDM0MCw0MDM0OCw0MDM2Miw0MDM0Myw0MDM1Myw0MDM0Niw0MDM1NCw0MDM2MCw0MDM1MCw0MDM1NSw0MDM4Myw0MDM2MSw0MDM0Miw0MDM1OCw0MDM1OSw0MDYwMSw0MDYwMyw0MDYwMiw0MDY3Nyw0MDY3Niw0MDY3OSw0''@;'; put 'put ''MDY3OCw0MDc1Miw0MDc1MCw0MDc5NSw0MDgwMCw0MDc5OCw0MDc5Nyw0MDc5Myw0MDg0OSwyMDc5NCwyMDc5MywyMTE0NCwyMTE0MywyMjIxMSwyMjIwNSwyMjIwNiwyMzM2OCwyMzM2NywyNDAxMSwyNDAxNSwyNDMwNSwyNTA4NSwyNTg4MywyNzM5NCwyNzM4OCwyNzM5NSwyNzM4NCwyNzM5''@;'; put 'put ''MiwyODczOSwyODc0MCwyODc0NiwyODc0NCwyODc0NSwyODc0MSwyODc0MiwyOTIxMywyOTIxMCwyOTIwOSwyOTU2NiwyOTk3NSwzMDMxNCwzMDY3MiwzMTAyMSwzMTAyNSwzMTAyMywzMTgyOCwzMTgyNywzMTk4NiwzMjM5NCwzMjM5MSwzMjM5MiwzMjM5NSwzMjM5MCwzMjM5NywzMjU4OSwz''@;'; put 'put ''MjY5OSwzMjgxNiwzMzI0NSwzNDMyOCwzNDM0NiwzNDM0MiwzNDMzNSwzNDMzOSwzNDMzMiwzNDMyOSwzNDM0MywzNDM1MCwzNDMzNywzNDMzNiwzNDM0NSwzNDMzNCwzNDM0MSwzNDg1NywzNDg0NSwzNDg0MywzNDg0OCwzNDg1MiwzNDg0NCwzNDg1OSwzNDg5MCwzNTE4MSwzNTE3NywzNTE4''@;'; put 'put ''MiwzNTE3OSwzNTMyMiwzNTcwNSwzNTcwNCwzNTY1MywzNTcwNiwzNTcwNywzNjExMiwzNjExNiwzNjI3MSwzNjQ5NCwzNjQ5MiwzNjcwMiwzNjY5OSwzNjcwMSwzNzE5MCwzNzE4OCwzNzE4OSwzNzMwNSwzNzk1MSwzNzk0NywzNzk0MiwzNzkyOSwzNzk0OSwzNzk0OCwzNzkzNiwzNzk0NSwz''@;'; put 'put ''NzkzMCwzNzk0MywzNzkzMiwzNzk1MiwzNzkzNywzODM3MywzODM3MiwzODM3MSwzODcwOSwzODcxNCwzODg0NywzODg4MSwzOTAxMiwzOTExMywzOTExMCwzOTEwNCwzOTI1NiwzOTI1NCwzOTQ4MSwzOTQ4NSwzOTQ5NCwzOTQ5MiwzOTQ5MCwzOTQ4OSwzOTQ4MiwzOTQ4NywzOTYyOSwzOTcw''@;'; put 'put ''MSwzOTcwMywzOTcwNCwzOTcwMiwzOTczOCwzOTc2MiwzOTk3OSwzOTk2NSwzOTk2NCwzOTk4MCwzOTk3MSwzOTk3NiwzOTk3NywzOTk3MiwzOTk2OSw0MDM3NSw0MDM3NCw0MDM4MCw0MDM4NSw0MDM5MSw0MDM5NCw0MDM5OSw0MDM4Miw0MDM4OSw0MDM4Nyw0MDM3OSw0MDM3Myw0MDM5OCw0''@;'; put 'put ''MDM3Nyw0MDM3OCw0MDM2NCw0MDM5Miw0MDM2OSw0MDM2NSw0MDM5Niw0MDM3MSw0MDM5Nyw0MDM3MCw0MDU3MCw0MDYwNCw0MDY4Myw0MDY4Niw0MDY4NSw0MDczMSw0MDcyOCw0MDczMCw0MDc1Myw0MDc4Miw0MDgwNSw0MDgwNCw0MDg1MCwyMDE1MywyMjIxNCwyMjIxMywyMjIxOSwyMjg5''@;'; put 'put ''NywyMzM3MSwyMzM3MiwyNDAyMSwyNDAxNywyNDMwNiwyNTg4OSwyNTg4OCwyNTg5NCwyNTg5MCwyNzQwMywyNzQwMCwyNzQwMSwyNzY2MSwyODc1NywyODc1OCwyODc1OSwyODc1NCwyOTIxNCwyOTIxNSwyOTM1MywyOTU2NywyOTkxMiwyOTkwOSwyOTkxMywyOTkxMSwzMDMxNywzMDM4MSwz''@;'; put 'put ''MTAyOSwzMTE1NiwzMTM0NCwzMTM0NSwzMTgzMSwzMTgzNiwzMTgzMywzMTgzNSwzMTgzNCwzMTk4OCwzMTk4NSwzMjQwMSwzMjU5MSwzMjY0NywzMzI0NiwzMzM4NywzNDM1NiwzNDM1NywzNDM1NSwzNDM0OCwzNDM1NCwzNDM1OCwzNDg2MCwzNDg1NiwzNDg1NCwzNDg1OCwzNDg1MywzNTE4''@;'; put 'put ''NSwzNTI2MywzNTI2MiwzNTMyMywzNTcxMCwzNTcxNiwzNTcxNCwzNTcxOCwzNTcxNywzNTcxMSwzNjExNywzNjUwMSwzNjUwMCwzNjUwNiwzNjQ5OCwzNjQ5NiwzNjUwMiwzNjUwMywzNjcwNCwzNjcwNiwzNzE5MSwzNzk2NCwzNzk2OCwzNzk2MiwzNzk2MywzNzk2NywzNzk1OSwzNzk1Nywz''@;'; put 'put ''Nzk2MCwzNzk2MSwzNzk1OCwzODcxOSwzODg4MywzOTAxOCwzOTAxNywzOTExNSwzOTI1MiwzOTI1OSwzOTUwMiwzOTUwNywzOTUwOCwzOTUwMCwzOTUwMywzOTQ5NiwzOTQ5OCwzOTQ5NywzOTUwNiwzOTUwNCwzOTYzMiwzOTcwNSwzOTcyMywzOTczOSwzOTc2NiwzOTc2NSw0MDAwNiw0MDAw''@;'; put 'put ''OCwzOTk5OSw0MDAwNCwzOTk5MywzOTk4Nyw0MDAwMSwzOTk5NiwzOTk5MSwzOTk4OCwzOTk4NiwzOTk5NywzOTk5MCw0MDQxMSw0MDQwMiw0MDQxNCw0MDQxMCw0MDM5NSw0MDQwMCw0MDQxMiw0MDQwMSw0MDQxNSw0MDQyNSw0MDQwOSw0MDQwOCw0MDQwNiw0MDQzNyw0MDQwNSw0MDQxMyw0''@;'; put 'put ''MDYzMCw0MDY4OCw0MDc1Nyw0MDc1NSw0MDc1NCw0MDc3MCw0MDgxMSw0MDg1Myw0MDg2NiwyMDc5NywyMTE0NSwyMjc2MCwyMjc1OSwyMjg5OCwyMzM3MywyNDAyNCwzNDg2MywyNDM5OSwyNTA4OSwyNTA5MSwyNTA5MiwyNTg5NywyNTg5MywyNjAwNiwyNjM0NywyNzQwOSwyNzQxMCwyNzQw''@;'; put 'put ''NywyNzU5NCwyODc2MywyODc2MiwyOTIxOCwyOTU3MCwyOTU2OSwyOTU3MSwzMDMyMCwzMDY3NiwzMTg0NywzMTg0NiwzMjQwNSwzMzM4OCwzNDM2MiwzNDM2OCwzNDM2MSwzNDM2NCwzNDM1MywzNDM2MywzNDM2NiwzNDg2NCwzNDg2NiwzNDg2MiwzNDg2NywzNTE5MCwzNTE4OCwzNTE4Nywz''@;'; put 'put ''NTMyNiwzNTcyNCwzNTcyNiwzNTcyMywzNTcyMCwzNTkwOSwzNjEyMSwzNjUwNCwzNjcwOCwzNjcwNywzNzMwOCwzNzk4NiwzNzk3MywzNzk4MSwzNzk3NSwzNzk4MiwzODg1MiwzODg1MywzODkxMiwzOTUxMCwzOTUxMywzOTcxMCwzOTcxMSwzOTcxMiw0MDAxOCw0MDAyNCw0MDAxNiw0MDAx''@;'; put 'put ''MCw0MDAxMyw0MDAxMSw0MDAyMSw0MDAyNSw0MDAxMiw0MDAxNCw0MDQ0Myw0MDQzOSw0MDQzMSw0MDQxOSw0MDQyNyw0MDQ0MCw0MDQyMCw0MDQzOCw0MDQxNyw0MDQzMCw0MDQyMiw0MDQzNCw0MDQzMiw0MDQxOCw0MDQyOCw0MDQzNiw0MDQzNSw0MDQyNCw0MDQyOSw0MDY0Miw0MDY1Niw0''@;'; put 'put ''MDY5MCw0MDY5MSw0MDcxMCw0MDczMiw0MDc2MCw0MDc1OSw0MDc1OCw0MDc3MSw0MDc4Myw0MDgxNyw0MDgxNiw0MDgxNCw0MDgxNSwyMjIyNywyMjIyMSwyMzM3NCwyMzY2MSwyNTkwMSwyNjM0OSwyNjM1MCwyNzQxMSwyODc2NywyODc2OSwyODc2NSwyODc2OCwyOTIxOSwyOTkxNSwyOTky''@;'; put 'put ''NSwzMDY3NywzMTAzMiwzMTE1OSwzMTE1OCwzMTg1MCwzMjQwNywzMjY0OSwzMzM4OSwzNDM3MSwzNDg3MiwzNDg3MSwzNDg2OSwzNDg5MSwzNTczMiwzNTczMywzNjUxMCwzNjUxMSwzNjUxMiwzNjUwOSwzNzMxMCwzNzMwOSwzNzMxNCwzNzk5NSwzNzk5MiwzNzk5MywzODYyOSwzODcyNiwz''@;'; put 'put ''ODcyMywzODcyNywzODg1NSwzODg4NSwzOTUxOCwzOTYzNywzOTc2OSw0MDAzNSw0MDAzOSw0MDAzOCw0MDAzNCw0MDAzMCw0MDAzMiw0MDQ1MCw0MDQ0Niw0MDQ1NSw0MDQ1MSw0MDQ1NCw0MDQ1Myw0MDQ0OCw0MDQ0OSw0MDQ1Nyw0MDQ0Nyw0MDQ0NSw0MDQ1Miw0MDYwOCw0MDczNCw0MDc3''@;'; put 'put ''NCw0MDgyMCw0MDgyMSw0MDgyMiwyMjIyOCwyNTkwMiwyNjA0MCwyNzQxNiwyNzQxNywyNzQxNSwyNzQxOCwyODc3MCwyOTIyMiwyOTM1NCwzMDY4MCwzMDY4MSwzMTAzMywzMTg0OSwzMTg1MSwzMTk5MCwzMjQxMCwzMjQwOCwzMjQxMSwzMjQwOSwzMzI0OCwzMzI0OSwzNDM3NCwzNDM3NSwz''@;'; put 'put ''NDM3NiwzNTE5MywzNTE5NCwzNTE5NiwzNTE5NSwzNTMyNywzNTczNiwzNTczNywzNjUxNywzNjUxNiwzNjUxNSwzNzk5OCwzNzk5NywzNzk5OSwzODAwMSwzODAwMywzODcyOSwzOTAyNiwzOTI2Myw0MDA0MCw0MDA0Niw0MDA0NSw0MDQ1OSw0MDQ2MSw0MDQ2NCw0MDQ2Myw0MDQ2Niw0MDQ2''@;'; put 'put ''NSw0MDYwOSw0MDY5Myw0MDcxMyw0MDc3NSw0MDgyNCw0MDgyNyw0MDgyNiw0MDgyNSwyMjMwMiwyODc3NCwzMTg1NSwzNDg3NiwzNjI3NCwzNjUxOCwzNzMxNSwzODAwNCwzODAwOCwzODAwNiwzODAwNSwzOTUyMCw0MDA1Miw0MDA1MSw0MDA0OSw0MDA1Myw0MDQ2OCw0MDQ2Nyw0MDY5NCw0''@;'; put 'put ''MDcxNCw0MDg2OCwyODc3NiwyODc3MywzMTk5MSwzNDQxMCwzNDg3OCwzNDg3NywzNDg3OSwzNTc0MiwzNTk5NiwzNjUyMSwzNjU1MywzODczMSwzOTAyNywzOTAyOCwzOTExNiwzOTI2NSwzOTMzOSwzOTUyNCwzOTUyNiwzOTUyNywzOTcxNiw0MDQ2OSw0MDQ3MSw0MDc3NiwyNTA5NSwyNzQy''@;'; put 'put ''MiwyOTIyMywzNDM4MCwzNjUyMCwzODAxOCwzODAxNiwzODAxNywzOTUyOSwzOTUyOCwzOTcyNiw0MDQ3MywyOTIyNSwzNDM3OSwzNTc0MywzODAxOSw0MDA1Nyw0MDYzMSwzMDMyNSwzOTUzMSw0MDA1OCw0MDQ3NywyODc3NywyODc3OCw0MDYxMiw0MDgzMCw0MDc3Nyw0MDg1NiwzMDg0OSwz''@;'; put 'put ''NzU2MSwzNTAyMywyMjcxNSwyNDY1OCwzMTkxMSwyMzI5MCw5NTU2LDk1NzQsOTU1OSw5NTY4LDk1ODAsOTU3MSw5NTYyLDk1NzcsOTU2NSw5NTU0LDk1NzIsOTU1Nyw5NTY2LDk1NzgsOTU2OSw5NTYwLDk1NzUsOTU2Myw5NTU1LDk1NzMsOTU1OCw5NTY3LDk1NzksOTU3MCw5NTYxLDk1NzYs''@;'; put 'put ''OTU2NCw5NTUzLDk1NTIsOTU4MSw5NTgyLDk1ODQsOTU4Myw2NTUxNywxMzI0MjMsMzc1OTUsMTMyNTc1LDE0NzM5NywzNDEyNCwxNzA3NywyOTY3OSwyMDkxNywxMzg5NywxNDk4MjYsMTY2MzcyLDM3NzAwLDEzNzY5MSwzMzUxOCwxNDY2MzIsMzA3ODAsMjY0MzYsMjUzMTEsMTQ5ODExLDE2''@;'; put 'put ''NjMxNCwxMzE3NDQsMTU4NjQzLDEzNTk0MSwyMDM5NSwxNDA1MjUsMjA0ODgsMTU5MDE3LDE2MjQzNiwxNDQ4OTYsMTUwMTkzLDE0MDU2MywyMDUyMSwxMzE5NjYsMjQ0ODQsMTMxOTY4LDEzMTkxMSwyODM3OSwxMzIxMjcsMjA2MDUsMjA3MzcsMTM0MzQsMjA3NTAsMzkwMjAsMTQxNDcsMzM4''@;'; put 'put ''MTQsMTQ5OTI0LDEzMjIzMSwyMDgzMiwxNDQzMDgsMjA4NDIsMTM0MTQzLDEzOTUxNiwxMzE4MTMsMTQwNTkyLDEzMjQ5NCwxNDM5MjMsMTM3NjAzLDIzNDI2LDM0Njg1LDEzMjUzMSwxNDY1ODUsMjA5MTQsMjA5MjAsNDAyNDQsMjA5MzcsMjA5NDMsMjA5NDUsMTU1ODAsMjA5NDcsMTUwMTgy''@;'; put 'put ''LDIwOTE1LDIwOTYyLDIxMzE0LDIwOTczLDMzNzQxLDI2OTQyLDE0NTE5NywyNDQ0MywyMTAwMywyMTAzMCwyMTA1MiwyMTE3MywyMTA3OSwyMTE0MCwyMTE3NywyMTE4OSwzMTc2NSwzNDExNCwyMTIxNiwzNDMxNywxNTg0ODMsMjEyNTMsMTY2NjIyLDIxODMzLDI4Mzc3LDE0NzMyOCwxMzM0''@;'; put 'put ''NjAsMTQ3NDM2LDIxMjk5LDIxMzE2LDEzNDExNCwyNzg1MSwxMzY5OTgsMjY2NTEsMjk2NTMsMjQ2NTAsMTYwNDIsMTQ1NDAsMTM2OTM2LDI5MTQ5LDE3NTcwLDIxMzU3LDIxMzY0LDE2NTU0NywyMTM3NCwyMTM3NSwxMzY1OTgsMTM2NzIzLDMwNjk0LDIxMzk1LDE2NjU1NSwyMTQwOCwyMTQx''@;'; put 'put ''OSwyMTQyMiwyOTYwNywxNTM0NTgsMTYyMTcsMjk1OTYsMjE0NDEsMjE0NDUsMjc3MjEsMjAwNDEsMjI1MjYsMjE0NjUsMTUwMTksMTM0MDMxLDIxNDcyLDE0NzQzNSwxNDI3NTUsMjE0OTQsMTM0MjYzLDIxNTIzLDI4NzkzLDIxODAzLDI2MTk5LDI3OTk1LDIxNjEzLDE1ODU0NywxMzQ1MTYs''@;'; put 'put ''MjE4NTMsMjE2NDcsMjE2NjgsMTgzNDIsMTM2OTczLDEzNDg3NywxNTc5NiwxMzQ0NzcsMTY2MzMyLDE0MDk1MiwyMTgzMSwxOTY5MywyMTU1MSwyOTcxOSwyMTg5NCwyMTkyOSwyMjAyMSwxMzc0MzEsMTQ3NTE0LDE3NzQ2LDE0ODUzMywyNjI5MSwxMzUzNDgsMjIwNzEsMjYzMTcsMTQ0MDEw''@;'; put 'put ''LDI2Mjc2LDI2Mjg1LDIyMDkzLDIyMDk1LDMwOTYxLDIyMjU3LDM4NzkxLDIxNTAyLDIyMjcyLDIyMjU1LDIyMjUzLDE2Njc1OCwxMzg1OSwxMzU3NTksMjIzNDIsMTQ3ODc3LDI3NzU4LDI4ODExLDIyMzM4LDE0MDAxLDE1ODg0NiwyMjUwMiwxMzYyMTQsMjI1MzEsMTM2Mjc2LDE0ODMyMywy''@;'; put 'put ''MjU2NiwxNTA1MTcsMjI2MjAsMjI2OTgsMTM2NjUsMjI3NTIsMjI3NDgsMTM1NzQwLDIyNzc5LDIzNTUxLDIyMzM5LDE3MjM2OCwxNDgwODgsMzc4NDMsMTM3MjksMjI4MTUsMjY3OTAsMTQwMTksMjgyNDksMTM2NzY2LDIzMDc2LDIxODQzLDEzNjg1MCwzNDA1MywyMjk4NSwxMzQ0NzgsMTU4''@;'; put 'put ''ODQ5LDE1OTAxOCwxMzcxODAsMjMwMDEsMTM3MjExLDEzNzEzOCwxNTkxNDIsMjgwMTcsMTM3MjU2LDEzNjkxNywyMzAzMywxNTkzMDEsMjMyMTEsMjMxMzksMTQwNTQsMTQ5OTI5LDIzMTU5LDE0MDg4LDIzMTkwLDI5Nzk3LDIzMjUxLDE1OTY0OSwxNDA2MjgsMTU3NDksMTM3NDg5LDE0MTMw''@;'; put 'put ''LDEzNjg4OCwyNDE5NSwyMTIwMCwyMzQxNCwyNTk5MiwyMzQyMCwxNjIzMTgsMTYzODgsMTg1MjUsMTMxNTg4LDIzNTA5LDI0OTI4LDEzNzc4MCwxNTQwNjAsMTMyNTE3LDIzNTM5LDIzNDUzLDE5NzI4LDIzNTU3LDEzODA1MiwyMzU3MSwyOTY0NiwyMzU3MiwxMzg0MDUsMTU4NTA0LDIzNjI1''@;'; put 'put ''LDE4NjUzLDIzNjg1LDIzNzg1LDIzNzkxLDIzOTQ3LDEzODc0NSwxMzg4MDcsMjM4MjQsMjM4MzIsMjM4NzgsMTM4OTE2LDIzNzM4LDI0MDIzLDMzNTMyLDE0MzgxLDE0OTc2MSwxMzkzMzcsMTM5NjM1LDMzNDE1LDE0MzkwLDE1Mjk4LDI0MTEwLDI3Mjc0LDI0MTgxLDI0MTg2LDE0ODY2OCwx''@;'; put 'put ''MzQzNTUsMjE0MTQsMjAxNTEsMjQyNzIsMjE0MTYsMTM3MDczLDI0MDczLDI0MzA4LDE2NDk5NCwyNDMxMywyNDMxNSwxNDQ5NiwyNDMxNiwyNjY4NiwzNzkxNSwyNDMzMywxMzE1MjEsMTk0NzA4LDE1MDcwLDE4NjA2LDEzNTk5NCwyNDM3OCwxNTc4MzIsMTQwMjQwLDI0NDA4LDE0MDQwMSwy''@;'; put 'put ''NDQxOSwzODg0NSwxNTkzNDIsMjQ0MzQsMzc2OTYsMTY2NDU0LDI0NDg3LDIzOTkwLDE1NzExLDE1MjE0NCwxMzkxMTQsMTU5OTkyLDE0MDkwNCwzNzMzNCwxMzE3NDIsMTY2NDQxLDI0NjI1LDI2MjQ1LDEzNzMzNSwxNDY5MSwxNTgxNSwxMzg4MSwyMjQxNiwxNDEyMzYsMzEwODksMTU5MzYs''@;'; put 'put ''MjQ3MzQsMjQ3NDAsMjQ3NTUsMTQ5ODkwLDE0OTkwMywxNjIzODcsMjk4NjAsMjA3MDUsMjMyMDAsMjQ5MzIsMzM4MjgsMjQ4OTgsMTk0NzI2LDE1OTQ0MiwyNDk2MSwyMDk4MCwxMzI2OTQsMjQ5NjcsMjM0NjYsMTQ3MzgzLDE0MTQwNywyNTA0MywxNjY4MTMsMTcwMzMzLDI1MDQwLDE0NjQy''@;'; put 'put ''LDE0MTY5NiwxNDE1MDUsMjQ2MTEsMjQ5MjQsMjU4ODYsMjU0ODMsMTMxMzUyLDI1Mjg1LDEzNzA3MiwyNTMwMSwxNDI4NjEsMjU0NTIsMTQ5OTgzLDE0ODcxLDI1NjU2LDI1NTkyLDEzNjA3OCwxMzcyMTIsMjU3NDQsMjg1NTQsMTQyOTAyLDM4OTMyLDE0NzU5NiwxNTMzNzMsMjU4MjUsMjU4''@;'; put 'put ''MjksMzgwMTEsMTQ5NTAsMjU2NTgsMTQ5MzUsMjU5MzMsMjg0MzgsMTUwMDU2LDE1MDA1MSwyNTk4OSwyNTk2NSwyNTk1MSwxNDM0ODYsMjYwMzcsMTQ5ODI0LDE5MjU1LDI2MDY1LDE2NjAwLDEzNzI1NywyNjA4MCwyNjA4MywyNDU0MywxNDQzODQsMjYxMzYsMTQzODYzLDE0Mzg2NCwyNjE4''@;'; put 'put ''MCwxNDM3ODAsMTQzNzgxLDI2MTg3LDEzNDc3MywyNjIxNSwxNTIwMzgsMjYyMjcsMjYyMjgsMTM4ODEzLDE0MzkyMSwxNjUzNjQsMTQzODE2LDE1MjMzOSwzMDY2MSwxNDE1NTksMzkzMzIsMjYzNzAsMTQ4MzgwLDE1MDA0OSwxNTE0NywyNzEzMCwxNDUzNDYsMjY0NjIsMjY0NzEsMjY0NjYs''@;'; put 'put ''MTQ3OTE3LDE2ODE3MywyNjU4MywxNzY0MSwyNjY1OCwyODI0MCwzNzQzNiwyNjYyNSwxNDQzNTgsMTU5MTM2LDI2NzE3LDE0NDQ5NSwyNzEwNSwyNzE0NywxNjY2MjMsMjY5OTUsMjY4MTksMTQ0ODQ1LDI2ODgxLDI2ODgwLDE1NjY2LDE0ODQ5LDE0NDk1NiwxNTIzMiwyNjU0MCwyNjk3Nywx''@;'; put 'put ''NjY0NzQsMTcxNDgsMjY5MzQsMjcwMzIsMTUyNjUsMTMyMDQxLDMzNjM1LDIwNjI0LDI3MTI5LDE0NDk4NSwxMzk1NjIsMjcyMDUsMTQ1MTU1LDI3MjkzLDE1MzQ3LDI2NTQ1LDI3MzM2LDE2ODM0OCwxNTM3MywyNzQyMSwxMzM0MTEsMjQ3OTgsMjc0NDUsMjc1MDgsMTQxMjYxLDI4MzQxLDE0''@;'; put 'put ''NjEzOSwxMzIwMjEsMTM3NTYwLDE0MTQ0LDIxNTM3LDE0NjI2NiwyNzYxNywxNDcxOTYsMjc2MTIsMjc3MDMsMTQwNDI3LDE0OTc0NSwxNTg1NDUsMjc3MzgsMzMzMTgsMjc3NjksMTQ2ODc2LDE3NjA1LDE0Njg3NywxNDc4NzYsMTQ5NzcyLDE0OTc2MCwxNDY2MzMsMTQwNTMsMTU1OTUsMTM0''@;'; put 'put ''NDUwLDM5ODExLDE0Mzg2NSwxNDA0MzMsMzI2NTUsMjY2NzksMTU5MDEzLDE1OTEzNywxNTkyMTEsMjgwNTQsMjc5OTYsMjgyODQsMjg0MjAsMTQ5ODg3LDE0NzU4OSwxNTkzNDYsMzQwOTksMTU5NjA0LDIwOTM1LDI3ODA0LDI4MTg5LDMzODM4LDE2NjY4OSwyODIwNywxNDY5OTEsMjk3Nzks''@;'; put 'put ''MTQ3MzMwLDMxMTgwLDI4MjM5LDIzMTg1LDE0MzQzNSwyODY2NCwxNDA5MywyODU3MywxNDY5OTIsMjg0MTAsMTM2MzQzLDE0NzUxNywxNzc0OSwzNzg3MiwyODQ4NCwyODUwOCwxNTY5NCwyODUzMiwxNjgzMDQsMTU2NzUsMjg1NzUsMTQ3NzgwLDI4NjI3LDE0NzYwMSwxNDc3OTcsMTQ3NTEz''@;'; put 'put ''LDE0NzQ0MCwxNDczODAsMTQ3Nzc1LDIwOTU5LDE0Nzc5OCwxNDc3OTksMTQ3Nzc2LDE1NjEyNSwyODc0NywyODc5OCwyODgzOSwyODgwMSwyODg3NiwyODg4NSwyODg4NiwyODg5NSwxNjY0NCwxNTg0OCwyOTEwOCwyOTA3OCwxNDgwODcsMjg5NzEsMjg5OTcsMjMxNzYsMjkwMDIsMjkwMzgs''@;'; put 'put ''MjM3MDgsMTQ4MzI1LDI5MDA3LDM3NzMwLDE0ODE2MSwyODk3MiwxNDg1NzAsMTUwMDU1LDE1MDA1MCwyOTExNCwxNjY4ODgsMjg4NjEsMjkxOTgsMzc5NTQsMjkyMDUsMjI4MDEsMzc5NTUsMjkyMjAsMzc2OTcsMTUzMDkzLDI5MjMwLDI5MjQ4LDE0OTg3NiwyNjgxMywyOTI2OSwyOTI3MSwx''@;'; put 'put ''NTk1NywxNDM0MjgsMjY2MzcsMjg0NzcsMjkzMTQsMjk0ODIsMjk0ODMsMTQ5NTM5LDE2NTkzMSwxODY2OSwxNjU4OTIsMjk0ODAsMjk0ODYsMjk2NDcsMjk2MTAsMTM0MjAyLDE1ODI1NCwyOTY0MSwyOTc2OSwxNDc5MzgsMTM2OTM1LDE1MDA1MiwyNjE0NywxNDAyMSwxNDk5NDMsMTQ5OTAx''@;'; put 'put ''LDE1MDAxMSwyOTY4NywyOTcxNywyNjg4MywxNTAwNTQsMjk3NTMsMTMyNTQ3LDE2MDg3LDI5Nzg4LDE0MTQ4NSwyOTc5MiwxNjc2MDIsMjk3NjcsMjk2NjgsMjk4MTQsMzM3MjEsMjk4MDQsMTQxMjgsMjk4MTIsMzc4NzMsMjcxODAsMjk4MjYsMTg3NzEsMTUwMTU2LDE0NzgwNywxNTAxMzcs''@;'; put 'put ''MTY2Nzk5LDIzMzY2LDE2NjkxNSwxMzczNzQsMjk4OTYsMTM3NjA4LDI5OTY2LDI5OTI5LDI5OTgyLDE2NzY0MSwxMzc4MDMsMjM1MTEsMTY3NTk2LDM3NzY1LDMwMDI5LDMwMDI2LDMwMDU1LDMwMDYyLDE1MTQyNiwxNjEzMiwxNTA4MDMsMzAwOTQsMjk3ODksMzAxMTAsMzAxMzIsMzAyMTAs''@;'; put 'put ''MzAyNTIsMzAyODksMzAyODcsMzAzMTksMzAzMjYsMTU2NjYxLDMwMzUyLDMzMjYzLDE0MzI4LDE1Nzk2OSwxNTc5NjYsMzAzNjksMzAzNzMsMzAzOTEsMzA0MTIsMTU5NjQ3LDMzODkwLDE1MTcwOSwxNTE5MzMsMTM4NzgwLDMwNDk0LDMwNTAyLDMwNTI4LDI1Nzc1LDE1MjA5NiwzMDU1Miwx''@;'; put 'put ''NDQwNDQsMzA2MzksMTY2MjQ0LDE2NjI0OCwxMzY4OTcsMzA3MDgsMzA3MjksMTM2MDU0LDE1MDAzNCwyNjgyNiwzMDg5NSwzMDkxOSwzMDkzMSwzODU2NSwzMTAyMiwxNTMwNTYsMzA5MzUsMzEwMjgsMzA4OTcsMTYxMjkyLDM2NzkyLDM0OTQ4LDE2NjY5OSwxNTU3NzksMTQwODI4LDMxMTEw''@;'; put 'put ''LDM1MDcyLDI2ODgyLDMxMTA0LDE1MzY4NywzMTEzMywxNjI2MTcsMzEwMzYsMzExNDUsMjgyMDIsMTYwMDM4LDE2MDQwLDMxMTc0LDE2ODIwNSwzMTE4OF0sImV1Yy1rciI6WzQ0MDM0LDQ0MDM1LDQ0MDM3LDQ0MDM4LDQ0MDQzLDQ0MDQ0LDQ0MDQ1LDQ0MDQ2LDQ0MDQ3LDQ0MDU2LDQ0MDYy''@;'; put 'put ''LDQ0MDYzLDQ0MDY1LDQ0MDY2LDQ0MDY3LDQ0MDY5LDQ0MDcwLDQ0MDcxLDQ0MDcyLDQ0MDczLDQ0MDc0LDQ0MDc1LDQ0MDc4LDQ0MDgyLDQ0MDgzLDQ0MDg0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MDg1LDQ0MDg2LDQ0MDg3LDQ0MDkwLDQ0MDkxLDQ0MDkzLDQ0MDk0LDQ0''@;'; put 'put ''MDk1LDQ0MDk3LDQ0MDk4LDQ0MDk5LDQ0MTAwLDQ0MTAxLDQ0MTAyLDQ0MTAzLDQ0MTA0LDQ0MTA1LDQ0MTA2LDQ0MTA4LDQ0MTEwLDQ0MTExLDQ0MTEyLDQ0MTEzLDQ0MTE0LDQ0MTE1LDQ0MTE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MTE4LDQ0MTE5LDQ0MTIxLDQ0MTIy''@;'; put 'put ''LDQ0MTIzLDQ0MTI1LDQ0MTI2LDQ0MTI3LDQ0MTI4LDQ0MTI5LDQ0MTMwLDQ0MTMxLDQ0MTMyLDQ0MTMzLDQ0MTM0LDQ0MTM1LDQ0MTM2LDQ0MTM3LDQ0MTM4LDQ0MTM5LDQ0MTQwLDQ0MTQxLDQ0MTQyLDQ0MTQzLDQ0MTQ2LDQ0MTQ3LDQ0MTQ5LDQ0MTUwLDQ0MTUzLDQ0MTU1LDQ0MTU2LDQ0''@;'; put 'put ''MTU3LDQ0MTU4LDQ0MTU5LDQ0MTYyLDQ0MTY3LDQ0MTY4LDQ0MTczLDQ0MTc0LDQ0MTc1LDQ0MTc3LDQ0MTc4LDQ0MTc5LDQ0MTgxLDQ0MTgyLDQ0MTgzLDQ0MTg0LDQ0MTg1LDQ0MTg2LDQ0MTg3LDQ0MTkwLDQ0MTk0LDQ0MTk1LDQ0MTk2LDQ0MTk3LDQ0MTk4LDQ0MTk5LDQ0MjAzLDQ0MjA1''@;'; put 'put ''LDQ0MjA2LDQ0MjA5LDQ0MjEwLDQ0MjExLDQ0MjEyLDQ0MjEzLDQ0MjE0LDQ0MjE1LDQ0MjE4LDQ0MjIyLDQ0MjIzLDQ0MjI0LDQ0MjI2LDQ0MjI3LDQ0MjI5LDQ0MjMwLDQ0MjMxLDQ0MjMzLDQ0MjM0LDQ0MjM1LDQ0MjM3LDQ0MjM4LDQ0MjM5LDQ0MjQwLDQ0MjQxLDQ0MjQyLDQ0MjQzLDQ0''@;'; put 'put ''MjQ0LDQ0MjQ2LDQ0MjQ4LDQ0MjQ5LDQ0MjUwLDQ0MjUxLDQ0MjUyLDQ0MjUzLDQ0MjU0LDQ0MjU1LDQ0MjU4LDQ0MjU5LDQ0MjYxLDQ0MjYyLDQ0MjY1LDQ0MjY3LDQ0MjY5LDQ0MjcwLDQ0Mjc0LDQ0Mjc2LDQ0Mjc5LDQ0MjgwLDQ0MjgxLDQ0MjgyLDQ0MjgzLDQ0Mjg2LDQ0Mjg3LDQ0Mjg5''@;'; put 'put ''LDQ0MjkwLDQ0MjkxLDQ0MjkzLDQ0Mjk1LDQ0Mjk2LDQ0Mjk3LDQ0Mjk4LDQ0Mjk5LDQ0MzAyLDQ0MzA0LDQ0MzA2LDQ0MzA3LDQ0MzA4LDQ0MzA5LDQ0MzEwLDQ0MzExLDQ0MzEzLDQ0MzE0LDQ0MzE1LDQ0MzE3LDQ0MzE4LDQ0MzE5LDQ0MzIxLDQ0MzIyLDQ0MzIzLDQ0MzI0LDQ0MzI1LDQ0''@;'; put 'put ''MzI2LDQ0MzI3LDQ0MzI4LDQ0MzMwLDQ0MzMxLDQ0MzM0LDQ0MzM1LDQ0MzM2LDQ0MzM3LDQ0MzM4LDQ0MzM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MzQyLDQ0MzQzLDQ0MzQ1LDQ0MzQ2LDQ0MzQ3LDQ0MzQ5LDQ0MzUwLDQ0MzUxLDQ0MzUyLDQ0MzUzLDQ0MzU0LDQ0MzU1''@;'; put 'put ''LDQ0MzU4LDQ0MzYwLDQ0MzYyLDQ0MzYzLDQ0MzY0LDQ0MzY1LDQ0MzY2LDQ0MzY3LDQ0MzY5LDQ0MzcwLDQ0MzcxLDQ0MzczLDQ0Mzc0LDQ0Mzc1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0Mzc3LDQ0Mzc4LDQ0Mzc5LDQ0MzgwLDQ0MzgxLDQ0MzgyLDQ0MzgzLDQ0Mzg0LDQ0''@;'; put 'put ''Mzg2LDQ0Mzg4LDQ0Mzg5LDQ0MzkwLDQ0MzkxLDQ0MzkyLDQ0MzkzLDQ0Mzk0LDQ0Mzk1LDQ0Mzk4LDQ0Mzk5LDQ0NDAxLDQ0NDAyLDQ0NDA3LDQ0NDA4LDQ0NDA5LDQ0NDEwLDQ0NDE0LDQ0NDE2LDQ0NDE5LDQ0NDIwLDQ0NDIxLDQ0NDIyLDQ0NDIzLDQ0NDI2LDQ0NDI3LDQ0NDI5LDQ0NDMw''@;'; put 'put ''LDQ0NDMxLDQ0NDMzLDQ0NDM0LDQ0NDM1LDQ0NDM2LDQ0NDM3LDQ0NDM4LDQ0NDM5LDQ0NDQwLDQ0NDQxLDQ0NDQyLDQ0NDQzLDQ0NDQ2LDQ0NDQ3LDQ0NDQ4LDQ0NDQ5LDQ0NDUwLDQ0NDUxLDQ0NDUzLDQ0NDU0LDQ0NDU1LDQ0NDU2LDQ0NDU3LDQ0NDU4LDQ0NDU5LDQ0NDYwLDQ0NDYxLDQ0''@;'; put 'put ''NDYyLDQ0NDYzLDQ0NDY0LDQ0NDY1LDQ0NDY2LDQ0NDY3LDQ0NDY4LDQ0NDY5LDQ0NDcwLDQ0NDcyLDQ0NDczLDQ0NDc0LDQ0NDc1LDQ0NDc2LDQ0NDc3LDQ0NDc4LDQ0NDc5LDQ0NDgyLDQ0NDgzLDQ0NDg1LDQ0NDg2LDQ0NDg3LDQ0NDg5LDQ0NDkwLDQ0NDkxLDQ0NDkyLDQ0NDkzLDQ0NDk0''@;'; put 'put ''LDQ0NDk1LDQ0NDk4LDQ0NTAwLDQ0NTAxLDQ0NTAyLDQ0NTAzLDQ0NTA0LDQ0NTA1LDQ0NTA2LDQ0NTA3LDQ0NTA5LDQ0NTEwLDQ0NTExLDQ0NTEzLDQ0NTE0LDQ0NTE1LDQ0NTE3LDQ0NTE4LDQ0NTE5LDQ0NTIwLDQ0NTIxLDQ0NTIyLDQ0NTIzLDQ0NTI0LDQ0NTI1LDQ0NTI2LDQ0NTI3LDQ0''@;'; put 'put ''NTI4LDQ0NTI5LDQ0NTMwLDQ0NTMxLDQ0NTMyLDQ0NTMzLDQ0NTM0LDQ0NTM1LDQ0NTM4LDQ0NTM5LDQ0NTQxLDQ0NTQyLDQ0NTQ2LDQ0NTQ3LDQ0NTQ4LDQ0NTQ5LDQ0NTUwLDQ0NTUxLDQ0NTU0LDQ0NTU2LDQ0NTU4LDQ0NTU5LDQ0NTYwLDQ0NTYxLDQ0NTYyLDQ0NTYzLDQ0NTY1LDQ0NTY2''@;'; put 'put ''LDQ0NTY3LDQ0NTY4LDQ0NTY5LDQ0NTcwLDQ0NTcxLDQ0NTcyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NTczLDQ0NTc0LDQ0NTc1LDQ0NTc2LDQ0NTc3LDQ0NTc4LDQ0NTc5LDQ0NTgwLDQ0NTgxLDQ0NTgyLDQ0NTgzLDQ0NTg0LDQ0NTg1LDQ0NTg2LDQ0NTg3LDQ0NTg4LDQ0''@;'; put 'put ''NTg5LDQ0NTkwLDQ0NTkxLDQ0NTk0LDQ0NTk1LDQ0NTk3LDQ0NTk4LDQ0NjAxLDQ0NjAzLDQ0NjA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NjA1LDQ0NjA2LDQ0NjA3LDQ0NjEwLDQ0NjEyLDQ0NjE1LDQ0NjE2LDQ0NjE3LDQ0NjE5LDQ0NjIzLDQ0NjI1LDQ0NjI2LDQ0NjI3''@;'; put 'put ''LDQ0NjI5LDQ0NjMxLDQ0NjMyLDQ0NjMzLDQ0NjM0LDQ0NjM1LDQ0NjM4LDQ0NjQyLDQ0NjQzLDQ0NjQ0LDQ0NjQ2LDQ0NjQ3LDQ0NjUwLDQ0NjUxLDQ0NjUzLDQ0NjU0LDQ0NjU1LDQ0NjU3LDQ0NjU4LDQ0NjU5LDQ0NjYwLDQ0NjYxLDQ0NjYyLDQ0NjYzLDQ0NjY2LDQ0NjcwLDQ0NjcxLDQ0''@;'; put 'put ''NjcyLDQ0NjczLDQ0Njc0LDQ0Njc1LDQ0Njc4LDQ0Njc5LDQ0NjgwLDQ0NjgxLDQ0NjgyLDQ0NjgzLDQ0Njg1LDQ0Njg2LDQ0Njg3LDQ0Njg4LDQ0Njg5LDQ0NjkwLDQ0NjkxLDQ0NjkyLDQ0NjkzLDQ0Njk0LDQ0Njk1LDQ0Njk2LDQ0Njk3LDQ0Njk4LDQ0Njk5LDQ0NzAwLDQ0NzAxLDQ0NzAy''@;'; put 'put ''LDQ0NzAzLDQ0NzA0LDQ0NzA1LDQ0NzA2LDQ0NzA3LDQ0NzA4LDQ0NzA5LDQ0NzEwLDQ0NzExLDQ0NzEyLDQ0NzEzLDQ0NzE0LDQ0NzE1LDQ0NzE2LDQ0NzE3LDQ0NzE4LDQ0NzE5LDQ0NzIwLDQ0NzIxLDQ0NzIyLDQ0NzIzLDQ0NzI0LDQ0NzI1LDQ0NzI2LDQ0NzI3LDQ0NzI4LDQ0NzI5LDQ0''@;'; put 'put ''NzMwLDQ0NzMxLDQ0NzM1LDQ0NzM3LDQ0NzM4LDQ0NzM5LDQ0NzQxLDQ0NzQyLDQ0NzQzLDQ0NzQ0LDQ0NzQ1LDQ0NzQ2LDQ0NzQ3LDQ0NzUwLDQ0NzU0LDQ0NzU1LDQ0NzU2LDQ0NzU3LDQ0NzU4LDQ0NzU5LDQ0NzYyLDQ0NzYzLDQ0NzY1LDQ0NzY2LDQ0NzY3LDQ0NzY4LDQ0NzY5LDQ0Nzcw''@;'; put 'put ''LDQ0NzcxLDQ0NzcyLDQ0NzczLDQ0Nzc0LDQ0Nzc1LDQ0Nzc3LDQ0Nzc4LDQ0NzgwLDQ0NzgyLDQ0NzgzLDQ0Nzg0LDQ0Nzg1LDQ0Nzg2LDQ0Nzg3LDQ0Nzg5LDQ0NzkwLDQ0NzkxLDQ0NzkzLDQ0Nzk0LDQ0Nzk1LDQ0Nzk3LDQ0Nzk4LDQ0Nzk5LDQ0ODAwLDQ0ODAxLDQ0ODAyLDQ0ODAzLDQ0''@;'; put 'put ''ODA0LDQ0ODA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODA2LDQ0ODA5LDQ0ODEwLDQ0ODExLDQ0ODEyLDQ0ODE0LDQ0ODE1LDQ0ODE3LDQ0ODE4LDQ0ODE5LDQ0ODIwLDQ0ODIxLDQ0ODIyLDQ0ODIzLDQ0ODI0LDQ0ODI1LDQ0ODI2LDQ0ODI3LDQ0ODI4LDQ0ODI5LDQ0ODMw''@;'; put 'put ''LDQ0ODMxLDQ0ODMyLDQ0ODMzLDQ0ODM0LDQ0ODM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODM2LDQ0ODM3LDQ0ODM4LDQ0ODM5LDQ0ODQwLDQ0ODQxLDQ0ODQyLDQ0ODQzLDQ0ODQ2LDQ0ODQ3LDQ0ODQ5LDQ0ODUxLDQ0ODUzLDQ0ODU0LDQ0ODU1LDQ0ODU2LDQ0ODU3LDQ0''@;'; put 'put ''ODU4LDQ0ODU5LDQ0ODYyLDQ0ODY0LDQ0ODY4LDQ0ODY5LDQ0ODcwLDQ0ODcxLDQ0ODc0LDQ0ODc1LDQ0ODc2LDQ0ODc3LDQ0ODc4LDQ0ODc5LDQ0ODgxLDQ0ODgyLDQ0ODgzLDQ0ODg0LDQ0ODg1LDQ0ODg2LDQ0ODg3LDQ0ODg4LDQ0ODg5LDQ0ODkwLDQ0ODkxLDQ0ODk0LDQ0ODk1LDQ0ODk2''@;'; put 'put ''LDQ0ODk3LDQ0ODk4LDQ0ODk5LDQ0OTAyLDQ0OTAzLDQ0OTA0LDQ0OTA1LDQ0OTA2LDQ0OTA3LDQ0OTA4LDQ0OTA5LDQ0OTEwLDQ0OTExLDQ0OTEyLDQ0OTEzLDQ0OTE0LDQ0OTE1LDQ0OTE2LDQ0OTE3LDQ0OTE4LDQ0OTE5LDQ0OTIwLDQ0OTIyLDQ0OTIzLDQ0OTI0LDQ0OTI1LDQ0OTI2LDQ0''@;'; put 'put ''OTI3LDQ0OTI5LDQ0OTMwLDQ0OTMxLDQ0OTMzLDQ0OTM0LDQ0OTM1LDQ0OTM3LDQ0OTM4LDQ0OTM5LDQ0OTQwLDQ0OTQxLDQ0OTQyLDQ0OTQzLDQ0OTQ2LDQ0OTQ3LDQ0OTQ4LDQ0OTUwLDQ0OTUxLDQ0OTUyLDQ0OTUzLDQ0OTU0LDQ0OTU1LDQ0OTU3LDQ0OTU4LDQ0OTU5LDQ0OTYwLDQ0OTYx''@;'; put 'put ''LDQ0OTYyLDQ0OTYzLDQ0OTY0LDQ0OTY1LDQ0OTY2LDQ0OTY3LDQ0OTY4LDQ0OTY5LDQ0OTcwLDQ0OTcxLDQ0OTcyLDQ0OTczLDQ0OTc0LDQ0OTc1LDQ0OTc2LDQ0OTc3LDQ0OTc4LDQ0OTc5LDQ0OTgwLDQ0OTgxLDQ0OTgyLDQ0OTgzLDQ0OTg2LDQ0OTg3LDQ0OTg5LDQ0OTkwLDQ0OTkxLDQ0''@;'; put 'put ''OTkzLDQ0OTk0LDQ0OTk1LDQ0OTk2LDQ0OTk3LDQ0OTk4LDQ1MDAyLDQ1MDA0LDQ1MDA3LDQ1MDA4LDQ1MDA5LDQ1MDEwLDQ1MDExLDQ1MDEzLDQ1MDE0LDQ1MDE1LDQ1MDE2LDQ1MDE3LDQ1MDE4LDQ1MDE5LDQ1MDIxLDQ1MDIyLDQ1MDIzLDQ1MDI0LDQ1MDI1LG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDQ1MDI2LDQ1MDI3LDQ1MDI4LDQ1MDI5LDQ1MDMwLDQ1MDMxLDQ1MDM0LDQ1MDM1LDQ1MDM2LDQ1MDM3LDQ1MDM4LDQ1MDM5LDQ1MDQyLDQ1MDQzLDQ1MDQ1LDQ1MDQ2LDQ1MDQ3LDQ1MDQ5LDQ1MDUwLDQ1MDUxLDQ1MDUyLDQ1MDUzLDQ1MDU0LDQ1MDU1LDQ1MDU4LDQ1''@;'; put 'put ''MDU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDYxLDQ1MDYyLDQ1MDYzLDQ1MDY0LDQ1MDY1LDQ1MDY2LDQ1MDY3LDQ1MDY5LDQ1MDcwLDQ1MDcxLDQ1MDczLDQ1MDc0LDQ1MDc1LDQ1MDc3LDQ1MDc4LDQ1MDc5LDQ1MDgwLDQ1MDgxLDQ1MDgyLDQ1MDgzLDQ1MDg2LDQ1MDg3''@;'; put 'put ''LDQ1MDg4LDQ1MDg5LDQ1MDkwLDQ1MDkxLDQ1MDkyLDQ1MDkzLDQ1MDk0LDQ1MDk1LDQ1MDk3LDQ1MDk4LDQ1MDk5LDQ1MTAwLDQ1MTAxLDQ1MTAyLDQ1MTAzLDQ1MTA0LDQ1MTA1LDQ1MTA2LDQ1MTA3LDQ1MTA4LDQ1MTA5LDQ1MTEwLDQ1MTExLDQ1MTEyLDQ1MTEzLDQ1MTE0LDQ1MTE1LDQ1''@;'; put 'put ''MTE2LDQ1MTE3LDQ1MTE4LDQ1MTE5LDQ1MTIwLDQ1MTIxLDQ1MTIyLDQ1MTIzLDQ1MTI2LDQ1MTI3LDQ1MTI5LDQ1MTMxLDQ1MTMzLDQ1MTM1LDQ1MTM2LDQ1MTM3LDQ1MTM4LDQ1MTQyLDQ1MTQ0LDQ1MTQ2LDQ1MTQ3LDQ1MTQ4LDQ1MTUwLDQ1MTUxLDQ1MTUyLDQ1MTUzLDQ1MTU0LDQ1MTU1''@;'; put 'put ''LDQ1MTU2LDQ1MTU3LDQ1MTU4LDQ1MTU5LDQ1MTYwLDQ1MTYxLDQ1MTYyLDQ1MTYzLDQ1MTY0LDQ1MTY1LDQ1MTY2LDQ1MTY3LDQ1MTY4LDQ1MTY5LDQ1MTcwLDQ1MTcxLDQ1MTcyLDQ1MTczLDQ1MTc0LDQ1MTc1LDQ1MTc2LDQ1MTc3LDQ1MTc4LDQ1MTc5LDQ1MTgyLDQ1MTgzLDQ1MTg1LDQ1''@;'; put 'put ''MTg2LDQ1MTg3LDQ1MTg5LDQ1MTkwLDQ1MTkxLDQ1MTkyLDQ1MTkzLDQ1MTk0LDQ1MTk1LDQ1MTk4LDQ1MjAwLDQ1MjAyLDQ1MjAzLDQ1MjA0LDQ1MjA1LDQ1MjA2LDQ1MjA3LDQ1MjExLDQ1MjEzLDQ1MjE0LDQ1MjE5LDQ1MjIwLDQ1MjIxLDQ1MjIyLDQ1MjIzLDQ1MjI2LDQ1MjMyLDQ1MjM0''@;'; put 'put ''LDQ1MjM4LDQ1MjM5LDQ1MjQxLDQ1MjQyLDQ1MjQzLDQ1MjQ1LDQ1MjQ2LDQ1MjQ3LDQ1MjQ4LDQ1MjQ5LDQ1MjUwLDQ1MjUxLDQ1MjU0LDQ1MjU4LDQ1MjU5LDQ1MjYwLDQ1MjYxLDQ1MjYyLDQ1MjYzLDQ1MjY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MjY3LDQ1MjY5LDQ1''@;'; put 'put ''MjcwLDQ1MjcxLDQ1MjczLDQ1Mjc0LDQ1Mjc1LDQ1Mjc2LDQ1Mjc3LDQ1Mjc4LDQ1Mjc5LDQ1MjgxLDQ1MjgyLDQ1MjgzLDQ1Mjg0LDQ1Mjg2LDQ1Mjg3LDQ1Mjg4LDQ1Mjg5LDQ1MjkwLDQ1MjkxLDQ1MjkyLDQ1MjkzLDQ1Mjk0LDQ1Mjk1LDQ1Mjk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDQ1Mjk3LDQ1Mjk4LDQ1Mjk5LDQ1MzAwLDQ1MzAxLDQ1MzAyLDQ1MzAzLDQ1MzA0LDQ1MzA1LDQ1MzA2LDQ1MzA3LDQ1MzA4LDQ1MzA5LDQ1MzEwLDQ1MzExLDQ1MzEyLDQ1MzEzLDQ1MzE0LDQ1MzE1LDQ1MzE2LDQ1MzE3LDQ1MzE4LDQ1MzE5LDQ1MzIyLDQ1MzI1LDQ1MzI2LDQ1''@;'; put 'put ''MzI3LDQ1MzI5LDQ1MzMyLDQ1MzMzLDQ1MzM0LDQ1MzM1LDQ1MzM4LDQ1MzQyLDQ1MzQzLDQ1MzQ0LDQ1MzQ1LDQ1MzQ2LDQ1MzUwLDQ1MzUxLDQ1MzUzLDQ1MzU0LDQ1MzU1LDQ1MzU3LDQ1MzU4LDQ1MzU5LDQ1MzYwLDQ1MzYxLDQ1MzYyLDQ1MzYzLDQ1MzY2LDQ1MzcwLDQ1MzcxLDQ1Mzcy''@;'; put 'put ''LDQ1MzczLDQ1Mzc0LDQ1Mzc1LDQ1Mzc4LDQ1Mzc5LDQ1MzgxLDQ1MzgyLDQ1MzgzLDQ1Mzg1LDQ1Mzg2LDQ1Mzg3LDQ1Mzg4LDQ1Mzg5LDQ1MzkwLDQ1MzkxLDQ1Mzk0LDQ1Mzk1LDQ1Mzk4LDQ1Mzk5LDQ1NDAxLDQ1NDAyLDQ1NDAzLDQ1NDA1LDQ1NDA2LDQ1NDA3LDQ1NDA5LDQ1NDEwLDQ1''@;'; put 'put ''NDExLDQ1NDEyLDQ1NDEzLDQ1NDE0LDQ1NDE1LDQ1NDE2LDQ1NDE3LDQ1NDE4LDQ1NDE5LDQ1NDIwLDQ1NDIxLDQ1NDIyLDQ1NDIzLDQ1NDI0LDQ1NDI1LDQ1NDI2LDQ1NDI3LDQ1NDI4LDQ1NDI5LDQ1NDMwLDQ1NDMxLDQ1NDM0LDQ1NDM1LDQ1NDM3LDQ1NDM4LDQ1NDM5LDQ1NDQxLDQ1NDQz''@;'; put 'put ''LDQ1NDQ0LDQ1NDQ1LDQ1NDQ2LDQ1NDQ3LDQ1NDUwLDQ1NDUyLDQ1NDU0LDQ1NDU1LDQ1NDU2LDQ1NDU3LDQ1NDYxLDQ1NDYyLDQ1NDYzLDQ1NDY1LDQ1NDY2LDQ1NDY3LDQ1NDY5LDQ1NDcwLDQ1NDcxLDQ1NDcyLDQ1NDczLDQ1NDc0LDQ1NDc1LDQ1NDc2LDQ1NDc3LDQ1NDc4LDQ1NDc5LDQ1''@;'; put 'put ''NDgxLDQ1NDgyLDQ1NDgzLDQ1NDg0LDQ1NDg1LDQ1NDg2LDQ1NDg3LDQ1NDg4LDQ1NDg5LDQ1NDkwLDQ1NDkxLDQ1NDkyLDQ1NDkzLDQ1NDk0LDQ1NDk1LDQ1NDk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NDk3LDQ1NDk4LDQ1NDk5LDQ1NTAwLDQ1NTAxLDQ1NTAyLDQ1NTAz''@;'; put 'put ''LDQ1NTA0LDQ1NTA1LDQ1NTA2LDQ1NTA3LDQ1NTA4LDQ1NTA5LDQ1NTEwLDQ1NTExLDQ1NTEyLDQ1NTEzLDQ1NTE0LDQ1NTE1LDQ1NTE3LDQ1NTE4LDQ1NTE5LDQ1NTIxLDQ1NTIyLDQ1NTIzLDQ1NTI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NTI2LDQ1NTI3LDQ1NTI4LDQ1''@;'; put 'put ''NTI5LDQ1NTMwLDQ1NTMxLDQ1NTM0LDQ1NTM2LDQ1NTM3LDQ1NTM4LDQ1NTM5LDQ1NTQwLDQ1NTQxLDQ1NTQyLDQ1NTQzLDQ1NTQ2LDQ1NTQ3LDQ1NTQ5LDQ1NTUwLDQ1NTUxLDQ1NTUzLDQ1NTU0LDQ1NTU1LDQ1NTU2LDQ1NTU3LDQ1NTU4LDQ1NTU5LDQ1NTYwLDQ1NTYyLDQ1NTY0LDQ1NTY2''@;'; put 'put ''LDQ1NTY3LDQ1NTY4LDQ1NTY5LDQ1NTcwLDQ1NTcxLDQ1NTc0LDQ1NTc1LDQ1NTc3LDQ1NTc4LDQ1NTgxLDQ1NTgyLDQ1NTgzLDQ1NTg0LDQ1NTg1LDQ1NTg2LDQ1NTg3LDQ1NTkwLDQ1NTkyLDQ1NTk0LDQ1NTk1LDQ1NTk2LDQ1NTk3LDQ1NTk4LDQ1NTk5LDQ1NjAxLDQ1NjAyLDQ1NjAzLDQ1''@;'; put 'put ''NjA0LDQ1NjA1LDQ1NjA2LDQ1NjA3LDQ1NjA4LDQ1NjA5LDQ1NjEwLDQ1NjExLDQ1NjEyLDQ1NjEzLDQ1NjE0LDQ1NjE1LDQ1NjE2LDQ1NjE3LDQ1NjE4LDQ1NjE5LDQ1NjIxLDQ1NjIyLDQ1NjIzLDQ1NjI0LDQ1NjI1LDQ1NjI2LDQ1NjI3LDQ1NjI5LDQ1NjMwLDQ1NjMxLDQ1NjMyLDQ1NjMz''@;'; put 'put ''LDQ1NjM0LDQ1NjM1LDQ1NjM2LDQ1NjM3LDQ1NjM4LDQ1NjM5LDQ1NjQwLDQ1NjQxLDQ1NjQyLDQ1NjQzLDQ1NjQ0LDQ1NjQ1LDQ1NjQ2LDQ1NjQ3LDQ1NjQ4LDQ1NjQ5LDQ1NjUwLDQ1NjUxLDQ1NjUyLDQ1NjUzLDQ1NjU0LDQ1NjU1LDQ1NjU3LDQ1NjU4LDQ1NjU5LDQ1NjYxLDQ1NjYyLDQ1''@;'; put 'put ''NjYzLDQ1NjY1LDQ1NjY2LDQ1NjY3LDQ1NjY4LDQ1NjY5LDQ1NjcwLDQ1NjcxLDQ1Njc0LDQ1Njc1LDQ1Njc2LDQ1Njc3LDQ1Njc4LDQ1Njc5LDQ1NjgwLDQ1NjgxLDQ1NjgyLDQ1NjgzLDQ1Njg2LDQ1Njg3LDQ1Njg4LDQ1Njg5LDQ1NjkwLDQ1NjkxLDQ1NjkzLDQ1Njk0LDQ1Njk1LDQ1Njk2''@;'; put 'put ''LDQ1Njk3LDQ1Njk4LDQ1Njk5LDQ1NzAyLDQ1NzAzLDQ1NzA0LDQ1NzA2LDQ1NzA3LDQ1NzA4LDQ1NzA5LDQ1NzEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzExLDQ1NzE0LDQ1NzE1LDQ1NzE3LDQ1NzE4LDQ1NzE5LDQ1NzIzLDQ1NzI0LDQ1NzI1LDQ1NzI2LDQ1NzI3LDQ1''@;'; put 'put ''NzMwLDQ1NzMyLDQ1NzM1LDQ1NzM2LDQ1NzM3LDQ1NzM5LDQ1NzQxLDQ1NzQyLDQ1NzQzLDQ1NzQ1LDQ1NzQ2LDQ1NzQ3LDQ1NzQ5LDQ1NzUwLDQ1NzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NzUyLDQ1NzUzLDQ1NzU0LDQ1NzU1LDQ1NzU2LDQ1NzU3LDQ1NzU4LDQ1NzU5''@;'; put 'put ''LDQ1NzYwLDQ1NzYxLDQ1NzYyLDQ1NzYzLDQ1NzY0LDQ1NzY1LDQ1NzY2LDQ1NzY3LDQ1NzcwLDQ1NzcxLDQ1NzczLDQ1Nzc0LDQ1Nzc1LDQ1Nzc3LDQ1Nzc5LDQ1NzgwLDQ1NzgxLDQ1NzgyLDQ1NzgzLDQ1Nzg2LDQ1Nzg4LDQ1NzkwLDQ1NzkxLDQ1NzkyLDQ1NzkzLDQ1Nzk1LDQ1Nzk5LDQ1''@;'; put 'put ''ODAxLDQ1ODAyLDQ1ODA4LDQ1ODA5LDQ1ODEwLDQ1ODE0LDQ1ODIwLDQ1ODIxLDQ1ODIyLDQ1ODI2LDQ1ODI3LDQ1ODI5LDQ1ODMwLDQ1ODMxLDQ1ODMzLDQ1ODM0LDQ1ODM1LDQ1ODM2LDQ1ODM3LDQ1ODM4LDQ1ODM5LDQ1ODQyLDQ1ODQ2LDQ1ODQ3LDQ1ODQ4LDQ1ODQ5LDQ1ODUwLDQ1ODUx''@;'; put 'put ''LDQ1ODUzLDQ1ODU0LDQ1ODU1LDQ1ODU2LDQ1ODU3LDQ1ODU4LDQ1ODU5LDQ1ODYwLDQ1ODYxLDQ1ODYyLDQ1ODYzLDQ1ODY0LDQ1ODY1LDQ1ODY2LDQ1ODY3LDQ1ODY4LDQ1ODY5LDQ1ODcwLDQ1ODcxLDQ1ODcyLDQ1ODczLDQ1ODc0LDQ1ODc1LDQ1ODc2LDQ1ODc3LDQ1ODc4LDQ1ODc5LDQ1''@;'; put 'put ''ODgwLDQ1ODgxLDQ1ODgyLDQ1ODgzLDQ1ODg0LDQ1ODg1LDQ1ODg2LDQ1ODg3LDQ1ODg4LDQ1ODg5LDQ1ODkwLDQ1ODkxLDQ1ODkyLDQ1ODkzLDQ1ODk0LDQ1ODk1LDQ1ODk2LDQ1ODk3LDQ1ODk4LDQ1ODk5LDQ1OTAwLDQ1OTAxLDQ1OTAyLDQ1OTAzLDQ1OTA0LDQ1OTA1LDQ1OTA2LDQ1OTA3''@;'; put 'put ''LDQ1OTExLDQ1OTEzLDQ1OTE0LDQ1OTE3LDQ1OTIwLDQ1OTIxLDQ1OTIyLDQ1OTIzLDQ1OTI2LDQ1OTI4LDQ1OTMwLDQ1OTMyLDQ1OTMzLDQ1OTM1LDQ1OTM4LDQ1OTM5LDQ1OTQxLDQ1OTQyLDQ1OTQzLDQ1OTQ1LDQ1OTQ2LDQ1OTQ3LDQ1OTQ4LDQ1OTQ5LDQ1OTUwLDQ1OTUxLDQ1OTU0LDQ1''@;'; put 'put ''OTU4LDQ1OTU5LDQ1OTYwLDQ1OTYxLDQ1OTYyLDQ1OTYzLDQ1OTY1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTY2LDQ1OTY3LDQ1OTY5LDQ1OTcwLDQ1OTcxLDQ1OTczLDQ1OTc0LDQ1OTc1LDQ1OTc2LDQ1OTc3LDQ1OTc4LDQ1OTc5LDQ1OTgwLDQ1OTgxLDQ1OTgyLDQ1OTgz''@;'; put 'put ''LDQ1OTg2LDQ1OTg3LDQ1OTg4LDQ1OTg5LDQ1OTkwLDQ1OTkxLDQ1OTkzLDQ1OTk0LDQ1OTk1LDQ1OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTk4LDQ1OTk5LDQ2ZTMsNDYwMDEsNDYwMDIsNDYwMDMsNDYwMDQsNDYwMDUsNDYwMDYsNDYwMDcsNDYwMDgsNDYwMDksNDYw''@;'; put 'put ''MTAsNDYwMTEsNDYwMTIsNDYwMTMsNDYwMTQsNDYwMTUsNDYwMTYsNDYwMTcsNDYwMTgsNDYwMTksNDYwMjIsNDYwMjMsNDYwMjUsNDYwMjYsNDYwMjksNDYwMzEsNDYwMzMsNDYwMzQsNDYwMzUsNDYwMzgsNDYwNDAsNDYwNDIsNDYwNDQsNDYwNDYsNDYwNDcsNDYwNDksNDYwNTAsNDYwNTEs''@;'; put 'put ''NDYwNTMsNDYwNTQsNDYwNTUsNDYwNTcsNDYwNTgsNDYwNTksNDYwNjAsNDYwNjEsNDYwNjIsNDYwNjMsNDYwNjQsNDYwNjUsNDYwNjYsNDYwNjcsNDYwNjgsNDYwNjksNDYwNzAsNDYwNzEsNDYwNzIsNDYwNzMsNDYwNzQsNDYwNzUsNDYwNzcsNDYwNzgsNDYwNzksNDYwODAsNDYwODEsNDYw''@;'; put 'put ''ODIsNDYwODMsNDYwODQsNDYwODUsNDYwODYsNDYwODcsNDYwODgsNDYwODksNDYwOTAsNDYwOTEsNDYwOTIsNDYwOTMsNDYwOTQsNDYwOTUsNDYwOTcsNDYwOTgsNDYwOTksNDYxMDAsNDYxMDEsNDYxMDIsNDYxMDMsNDYxMDUsNDYxMDYsNDYxMDcsNDYxMDksNDYxMTAsNDYxMTEsNDYxMTMs''@;'; put 'put ''NDYxMTQsNDYxMTUsNDYxMTYsNDYxMTcsNDYxMTgsNDYxMTksNDYxMjIsNDYxMjQsNDYxMjUsNDYxMjYsNDYxMjcsNDYxMjgsNDYxMjksNDYxMzAsNDYxMzEsNDYxMzMsNDYxMzQsNDYxMzUsNDYxMzYsNDYxMzcsNDYxMzgsNDYxMzksNDYxNDAsNDYxNDEsNDYxNDIsNDYxNDMsNDYxNDQsNDYx''@;'; put 'put ''NDUsNDYxNDYsNDYxNDcsNDYxNDgsNDYxNDksNDYxNTAsNDYxNTEsNDYxNTIsNDYxNTMsNDYxNTQsNDYxNTUsNDYxNTYsNDYxNTcsNDYxNTgsNDYxNTksNDYxNjIsNDYxNjMsNDYxNjUsNDYxNjYsNDYxNjcsNDYxNjksNDYxNzAsNDYxNzEsNDYxNzIsNDYxNzMsNDYxNzQsNDYxNzUsNDYxNzgs''@;'; put 'put ''NDYxODAsNDYxODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDYxODMsNDYxODQsNDYxODUsNDYxODYsNDYxODcsNDYxODksNDYxOTAsNDYxOTEsNDYxOTIsNDYxOTMsNDYxOTQsNDYxOTUsNDYxOTYsNDYxOTcsNDYxOTgsNDYxOTksNDYyMDAsNDYyMDEsNDYyMDIsNDYyMDMsNDYy''@;'; put 'put ''MDQsNDYyMDUsNDYyMDYsNDYyMDcsNDYyMDksNDYyMTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDYyMTEsNDYyMTIsNDYyMTMsNDYyMTQsNDYyMTUsNDYyMTcsNDYyMTgsNDYyMTksNDYyMjAsNDYyMjEsNDYyMjIsNDYyMjMsNDYyMjQsNDYyMjUsNDYyMjYsNDYyMjcsNDYyMjgs''@;'; put 'put ''NDYyMjksNDYyMzAsNDYyMzEsNDYyMzIsNDYyMzMsNDYyMzQsNDYyMzUsNDYyMzYsNDYyMzgsNDYyMzksNDYyNDAsNDYyNDEsNDYyNDIsNDYyNDMsNDYyNDUsNDYyNDYsNDYyNDcsNDYyNDksNDYyNTAsNDYyNTEsNDYyNTMsNDYyNTQsNDYyNTUsNDYyNTYsNDYyNTcsNDYyNTgsNDYyNTksNDYy''@;'; put 'put ''NjAsNDYyNjIsNDYyNjQsNDYyNjYsNDYyNjcsNDYyNjgsNDYyNjksNDYyNzAsNDYyNzEsNDYyNzMsNDYyNzQsNDYyNzUsNDYyNzcsNDYyNzgsNDYyNzksNDYyODEsNDYyODIsNDYyODMsNDYyODQsNDYyODUsNDYyODYsNDYyODcsNDYyODksNDYyOTAsNDYyOTEsNDYyOTIsNDYyOTQsNDYyOTUs''@;'; put 'put ''NDYyOTYsNDYyOTcsNDYyOTgsNDYyOTksNDYzMDIsNDYzMDMsNDYzMDUsNDYzMDYsNDYzMDksNDYzMTEsNDYzMTIsNDYzMTMsNDYzMTQsNDYzMTUsNDYzMTgsNDYzMjAsNDYzMjIsNDYzMjMsNDYzMjQsNDYzMjUsNDYzMjYsNDYzMjcsNDYzMjksNDYzMzAsNDYzMzEsNDYzMzIsNDYzMzMsNDYz''@;'; put 'put ''MzQsNDYzMzUsNDYzMzYsNDYzMzcsNDYzMzgsNDYzMzksNDYzNDAsNDYzNDEsNDYzNDIsNDYzNDMsNDYzNDQsNDYzNDUsNDYzNDYsNDYzNDcsNDYzNDgsNDYzNDksNDYzNTAsNDYzNTEsNDYzNTIsNDYzNTMsNDYzNTQsNDYzNTUsNDYzNTgsNDYzNTksNDYzNjEsNDYzNjIsNDYzNjUsNDYzNjYs''@;'; put 'put ''NDYzNjcsNDYzNjgsNDYzNjksNDYzNzAsNDYzNzEsNDYzNzQsNDYzNzksNDYzODAsNDYzODEsNDYzODIsNDYzODMsNDYzODYsNDYzODcsNDYzODksNDYzOTAsNDYzOTEsNDYzOTMsNDYzOTQsNDYzOTUsNDYzOTYsNDYzOTcsNDYzOTgsNDYzOTksNDY0MDIsNDY0MDYsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsNDY0MDcsNDY0MDgsNDY0MDksNDY0MTAsNDY0MTQsNDY0MTUsNDY0MTcsNDY0MTgsNDY0MTksNDY0MjEsNDY0MjIsNDY0MjMsNDY0MjQsNDY0MjUsNDY0MjYsNDY0MjcsNDY0MzAsNDY0MzQsNDY0MzUsNDY0MzYsNDY0MzcsNDY0MzgsNDY0MzksNDY0NDAsNDY0NDEs''@;'; put 'put ''NDY0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY0NDMsNDY0NDQsNDY0NDUsNDY0NDYsNDY0NDcsNDY0NDgsNDY0NDksNDY0NTAsNDY0NTEsNDY0NTIsNDY0NTMsNDY0NTQsNDY0NTUsNDY0NTYsNDY0NTcsNDY0NTgsNDY0NTksNDY0NjAsNDY0NjEsNDY0NjIsNDY0NjMsNDY0''@;'; put 'put ''NjQsNDY0NjUsNDY0NjYsNDY0NjcsNDY0NjgsNDY0NjksNDY0NzAsNDY0NzEsNDY0NzIsNDY0NzMsNDY0NzQsNDY0NzUsNDY0NzYsNDY0NzcsNDY0NzgsNDY0NzksNDY0ODAsNDY0ODEsNDY0ODIsNDY0ODMsNDY0ODQsNDY0ODUsNDY0ODYsNDY0ODcsNDY0ODgsNDY0ODksNDY0OTAsNDY0OTEs''@;'; put 'put ''NDY0OTIsNDY0OTMsNDY0OTQsNDY0OTUsNDY0OTgsNDY0OTksNDY1MDEsNDY1MDIsNDY1MDMsNDY1MDUsNDY1MDgsNDY1MDksNDY1MTAsNDY1MTEsNDY1MTQsNDY1MTgsNDY1MTksNDY1MjAsNDY1MjEsNDY1MjIsNDY1MjYsNDY1MjcsNDY1MjksNDY1MzAsNDY1MzEsNDY1MzMsNDY1MzQsNDY1''@;'; put 'put ''MzUsNDY1MzYsNDY1MzcsNDY1MzgsNDY1MzksNDY1NDIsNDY1NDYsNDY1NDcsNDY1NDgsNDY1NDksNDY1NTAsNDY1NTEsNDY1NTMsNDY1NTQsNDY1NTUsNDY1NTYsNDY1NTcsNDY1NTgsNDY1NTksNDY1NjAsNDY1NjEsNDY1NjIsNDY1NjMsNDY1NjQsNDY1NjUsNDY1NjYsNDY1NjcsNDY1Njgs''@;'; put 'put ''NDY1NjksNDY1NzAsNDY1NzEsNDY1NzMsNDY1NzQsNDY1NzUsNDY1NzYsNDY1NzcsNDY1NzgsNDY1NzksNDY1ODAsNDY1ODEsNDY1ODIsNDY1ODMsNDY1ODQsNDY1ODUsNDY1ODYsNDY1ODcsNDY1ODgsNDY1ODksNDY1OTAsNDY1OTEsNDY1OTIsNDY1OTMsNDY1OTQsNDY1OTUsNDY1OTYsNDY1''@;'; put 'put ''OTcsNDY1OTgsNDY1OTksNDY2MDAsNDY2MDEsNDY2MDIsNDY2MDMsNDY2MDQsNDY2MDUsNDY2MDYsNDY2MDcsNDY2MTAsNDY2MTEsNDY2MTMsNDY2MTQsNDY2MTUsNDY2MTcsNDY2MTgsNDY2MTksNDY2MjAsNDY2MjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY2MjIsNDY2MjMs''@;'; put 'put ''NDY2MjQsNDY2MjUsNDY2MjYsNDY2MjcsNDY2MjgsNDY2MzAsNDY2MzEsNDY2MzIsNDY2MzMsNDY2MzQsNDY2MzUsNDY2MzcsNDY2MzgsNDY2MzksNDY2NDAsNDY2NDEsNDY2NDIsNDY2NDMsNDY2NDUsNDY2NDYsNDY2NDcsNDY2NDgsNDY2NDksNDY2NTAsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNDY2NTEsNDY2NTIsNDY2NTMsNDY2NTQsNDY2NTUsNDY2NTYsNDY2NTcsNDY2NTgsNDY2NTksNDY2NjAsNDY2NjEsNDY2NjIsNDY2NjMsNDY2NjUsNDY2NjYsNDY2NjcsNDY2NjgsNDY2NjksNDY2NzAsNDY2NzEsNDY2NzIsNDY2NzMsNDY2NzQsNDY2NzUsNDY2NzYsNDY2Nzcs''@;'; put 'put ''NDY2NzgsNDY2NzksNDY2ODAsNDY2ODEsNDY2ODIsNDY2ODMsNDY2ODQsNDY2ODUsNDY2ODYsNDY2ODcsNDY2ODgsNDY2ODksNDY2OTAsNDY2OTEsNDY2OTMsNDY2OTQsNDY2OTUsNDY2OTcsNDY2OTgsNDY2OTksNDY3MDAsNDY3MDEsNDY3MDIsNDY3MDMsNDY3MDQsNDY3MDUsNDY3MDYsNDY3''@;'; put 'put ''MDcsNDY3MDgsNDY3MDksNDY3MTAsNDY3MTEsNDY3MTIsNDY3MTMsNDY3MTQsNDY3MTUsNDY3MTYsNDY3MTcsNDY3MTgsNDY3MTksNDY3MjAsNDY3MjEsNDY3MjIsNDY3MjMsNDY3MjQsNDY3MjUsNDY3MjYsNDY3MjcsNDY3MjgsNDY3MjksNDY3MzAsNDY3MzEsNDY3MzIsNDY3MzMsNDY3MzQs''@;'; put 'put ''NDY3MzUsNDY3MzYsNDY3MzcsNDY3MzgsNDY3MzksNDY3NDAsNDY3NDEsNDY3NDIsNDY3NDMsNDY3NDQsNDY3NDUsNDY3NDYsNDY3NDcsNDY3NTAsNDY3NTEsNDY3NTMsNDY3NTQsNDY3NTUsNDY3NTcsNDY3NTgsNDY3NTksNDY3NjAsNDY3NjEsNDY3NjIsNDY3NjUsNDY3NjYsNDY3NjcsNDY3''@;'; put 'put ''NjgsNDY3NzAsNDY3NzEsNDY3NzIsNDY3NzMsNDY3NzQsNDY3NzUsNDY3NzYsNDY3NzcsNDY3NzgsNDY3NzksNDY3ODAsNDY3ODEsNDY3ODIsNDY3ODMsNDY3ODQsNDY3ODUsNDY3ODYsNDY3ODcsNDY3ODgsNDY3ODksNDY3OTAsNDY3OTEsNDY3OTIsNDY3OTMsNDY3OTQsNDY3OTUsNDY3OTYs''@;'; put 'put ''NDY3OTcsNDY3OTgsNDY3OTksNDY4MDAsNDY4MDEsNDY4MDIsNDY4MDMsNDY4MDUsNDY4MDYsNDY4MDcsNDY4MDgsNDY4MDksNDY4MTAsNDY4MTEsNDY4MTIsNDY4MTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4MTQsNDY4MTUsNDY4MTYsNDY4MTcsNDY4MTgsNDY4MTksNDY4''@;'; put 'put ''MjAsNDY4MjEsNDY4MjIsNDY4MjMsNDY4MjQsNDY4MjUsNDY4MjYsNDY4MjcsNDY4MjgsNDY4MjksNDY4MzAsNDY4MzEsNDY4MzMsNDY4MzQsNDY4MzUsNDY4MzcsNDY4MzgsNDY4MzksNDY4NDEsNDY4NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4NDMsNDY4NDQsNDY4NDUs''@;'; put 'put ''NDY4NDYsNDY4NDcsNDY4NTAsNDY4NTEsNDY4NTIsNDY4NTQsNDY4NTUsNDY4NTYsNDY4NTcsNDY4NTgsNDY4NTksNDY4NjAsNDY4NjEsNDY4NjIsNDY4NjMsNDY4NjQsNDY4NjUsNDY4NjYsNDY4NjcsNDY4NjgsNDY4NjksNDY4NzAsNDY4NzEsNDY4NzIsNDY4NzMsNDY4NzQsNDY4NzUsNDY4''@;'; put 'put ''NzYsNDY4NzcsNDY4NzgsNDY4NzksNDY4ODAsNDY4ODEsNDY4ODIsNDY4ODMsNDY4ODQsNDY4ODUsNDY4ODYsNDY4ODcsNDY4OTAsNDY4OTEsNDY4OTMsNDY4OTQsNDY4OTcsNDY4OTgsNDY4OTksNDY5MDAsNDY5MDEsNDY5MDIsNDY5MDMsNDY5MDYsNDY5MDgsNDY5MDksNDY5MTAsNDY5MTEs''@;'; put 'put ''NDY5MTIsNDY5MTMsNDY5MTQsNDY5MTUsNDY5MTcsNDY5MTgsNDY5MTksNDY5MjEsNDY5MjIsNDY5MjMsNDY5MjUsNDY5MjYsNDY5MjcsNDY5MjgsNDY5MjksNDY5MzAsNDY5MzEsNDY5MzQsNDY5MzUsNDY5MzYsNDY5MzcsNDY5MzgsNDY5MzksNDY5NDAsNDY5NDEsNDY5NDIsNDY5NDMsNDY5''@;'; put 'put ''NDUsNDY5NDYsNDY5NDcsNDY5NDksNDY5NTAsNDY5NTEsNDY5NTMsNDY5NTQsNDY5NTUsNDY5NTYsNDY5NTcsNDY5NTgsNDY5NTksNDY5NjIsNDY5NjQsNDY5NjYsNDY5NjcsNDY5NjgsNDY5NjksNDY5NzAsNDY5NzEsNDY5NzQsNDY5NzUsNDY5NzcsNDY5NzgsNDY5NzksNDY5ODEsNDY5ODIs''@;'; put 'put ''NDY5ODMsNDY5ODQsNDY5ODUsNDY5ODYsNDY5ODcsNDY5OTAsNDY5OTUsNDY5OTYsNDY5OTcsNDcwMDIsNDcwMDMsNDcwMDUsNDcwMDYsNDcwMDcsNDcwMDksNDcwMTAsNDcwMTEsNDcwMTIsNDcwMTMsNDcwMTQsNDcwMTUsNDcwMTgsNDcwMjIsNDcwMjMsNDcwMjQsNDcwMjUsNDcwMjYsNDcw''@;'; put 'put ''MjcsNDcwMzAsNDcwMzEsNDcwMzMsNDcwMzQsNDcwMzUsNDcwMzYsNDcwMzcsNDcwMzgsNDcwMzksNDcwNDAsNDcwNDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcwNDIsNDcwNDMsNDcwNDQsNDcwNDUsNDcwNDYsNDcwNDgsNDcwNTAsNDcwNTEsNDcwNTIsNDcwNTMsNDcwNTQs''@;'; put 'put ''NDcwNTUsNDcwNTYsNDcwNTcsNDcwNTgsNDcwNTksNDcwNjAsNDcwNjEsNDcwNjIsNDcwNjMsNDcwNjQsNDcwNjUsNDcwNjYsNDcwNjcsNDcwNjgsNDcwNjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcwNzAsNDcwNzEsNDcwNzIsNDcwNzMsNDcwNzQsNDcwNzUsNDcwNzYsNDcw''@;'; put 'put ''NzcsNDcwNzgsNDcwNzksNDcwODAsNDcwODEsNDcwODIsNDcwODMsNDcwODYsNDcwODcsNDcwODksNDcwOTAsNDcwOTEsNDcwOTMsNDcwOTQsNDcwOTUsNDcwOTYsNDcwOTcsNDcwOTgsNDcwOTksNDcxMDIsNDcxMDYsNDcxMDcsNDcxMDgsNDcxMDksNDcxMTAsNDcxMTQsNDcxMTUsNDcxMTcs''@;'; put 'put ''NDcxMTgsNDcxMTksNDcxMjEsNDcxMjIsNDcxMjMsNDcxMjQsNDcxMjUsNDcxMjYsNDcxMjcsNDcxMzAsNDcxMzIsNDcxMzQsNDcxMzUsNDcxMzYsNDcxMzcsNDcxMzgsNDcxMzksNDcxNDIsNDcxNDMsNDcxNDUsNDcxNDYsNDcxNDcsNDcxNDksNDcxNTAsNDcxNTEsNDcxNTIsNDcxNTMsNDcx''@;'; put 'put ''NTQsNDcxNTUsNDcxNTgsNDcxNjIsNDcxNjMsNDcxNjQsNDcxNjUsNDcxNjYsNDcxNjcsNDcxNjksNDcxNzAsNDcxNzEsNDcxNzMsNDcxNzQsNDcxNzUsNDcxNzYsNDcxNzcsNDcxNzgsNDcxNzksNDcxODAsNDcxODEsNDcxODIsNDcxODMsNDcxODQsNDcxODYsNDcxODgsNDcxODksNDcxOTAs''@;'; put 'put ''NDcxOTEsNDcxOTIsNDcxOTMsNDcxOTQsNDcxOTUsNDcxOTgsNDcxOTksNDcyMDEsNDcyMDIsNDcyMDMsNDcyMDUsNDcyMDYsNDcyMDcsNDcyMDgsNDcyMDksNDcyMTAsNDcyMTEsNDcyMTQsNDcyMTYsNDcyMTgsNDcyMTksNDcyMjAsNDcyMjEsNDcyMjIsNDcyMjMsNDcyMjUsNDcyMjYsNDcy''@;'; put 'put ''MjcsNDcyMjksNDcyMzAsNDcyMzEsNDcyMzIsNDcyMzMsNDcyMzQsNDcyMzUsNDcyMzYsNDcyMzcsNDcyMzgsNDcyMzksNDcyNDAsNDcyNDEsNDcyNDIsNDcyNDMsNDcyNDQsNDcyNDYsNDcyNDcsNDcyNDgsNDcyNDksNDcyNTAsNDcyNTEsNDcyNTIsNDcyNTMsNDcyNTQsNDcyNTUsNDcyNTYs''@;'; put 'put ''NDcyNTcsNDcyNTgsNDcyNTksNDcyNjAsNDcyNjEsNDcyNjIsNDcyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcyNjQsNDcyNjUsNDcyNjYsNDcyNjcsNDcyNjgsNDcyNjksNDcyNzAsNDcyNzEsNDcyNzMsNDcyNzQsNDcyNzUsNDcyNzYsNDcyNzcsNDcyNzgsNDcyNzksNDcy''@;'; put 'put ''ODEsNDcyODIsNDcyODMsNDcyODUsNDcyODYsNDcyODcsNDcyODksNDcyOTAsNDcyOTEsNDcyOTIsNDcyOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcyOTQsNDcyOTUsNDcyOTgsNDczMDAsNDczMDIsNDczMDMsNDczMDQsNDczMDUsNDczMDYsNDczMDcsNDczMDksNDczMTAs''@;'; put 'put ''NDczMTEsNDczMTMsNDczMTQsNDczMTUsNDczMTcsNDczMTgsNDczMTksNDczMjAsNDczMjEsNDczMjIsNDczMjMsNDczMjQsNDczMjYsNDczMjgsNDczMzAsNDczMzEsNDczMzIsNDczMzMsNDczMzQsNDczMzUsNDczMzgsNDczMzksNDczNDEsNDczNDIsNDczNDMsNDczNDUsNDczNDYsNDcz''@;'; put 'put ''NDcsNDczNDgsNDczNDksNDczNTAsNDczNTEsNDczNTQsNDczNTYsNDczNTgsNDczNTksNDczNjAsNDczNjEsNDczNjIsNDczNjMsNDczNjUsNDczNjYsNDczNjcsNDczNjgsNDczNjksNDczNzAsNDczNzEsNDczNzIsNDczNzMsNDczNzQsNDczNzUsNDczNzYsNDczNzcsNDczNzgsNDczNzks''@;'; put 'put ''NDczODAsNDczODEsNDczODIsNDczODMsNDczODUsNDczODYsNDczODcsNDczODgsNDczODksNDczOTAsNDczOTEsNDczOTMsNDczOTQsNDczOTUsNDczOTYsNDczOTcsNDczOTgsNDczOTksNDc0MDAsNDc0MDEsNDc0MDIsNDc0MDMsNDc0MDQsNDc0MDUsNDc0MDYsNDc0MDcsNDc0MDgsNDc0''@;'; put 'put ''MDksNDc0MTAsNDc0MTEsNDc0MTIsNDc0MTMsNDc0MTQsNDc0MTUsNDc0MTYsNDc0MTcsNDc0MTgsNDc0MTksNDc0MjIsNDc0MjMsNDc0MjUsNDc0MjYsNDc0MjcsNDc0MjksNDc0MzAsNDc0MzEsNDc0MzIsNDc0MzMsNDc0MzQsNDc0MzUsNDc0MzcsNDc0MzgsNDc0NDAsNDc0NDIsNDc0NDMs''@;'; put 'put ''NDc0NDQsNDc0NDUsNDc0NDYsNDc0NDcsNDc0NTAsNDc0NTEsNDc0NTMsNDc0NTQsNDc0NTUsNDc0NTcsNDc0NTgsNDc0NTksNDc0NjAsNDc0NjEsNDc0NjIsNDc0NjMsNDc0NjYsNDc0NjgsNDc0NzAsNDc0NzEsNDc0NzIsNDc0NzMsNDc0NzQsNDc0NzUsNDc0NzgsNDc0NzksNDc0ODEsNDc0''@;'; put 'put ''ODIsNDc0ODMsNDc0ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc0ODYsNDc0ODcsNDc0ODgsNDc0ODksNDc0OTAsNDc0OTEsNDc0OTQsNDc0OTYsNDc0OTksNDc1MDAsNDc1MDMsNDc1MDQsNDc1MDUsNDc1MDYsNDc1MDcsNDc1MDgsNDc1MDksNDc1MTAsNDc1MTEsNDc1MTIs''@;'; put 'put ''NDc1MTMsNDc1MTQsNDc1MTUsNDc1MTYsNDc1MTcsNDc1MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc1MTksNDc1MjAsNDc1MjEsNDc1MjIsNDc1MjMsNDc1MjQsNDc1MjUsNDc1MjYsNDc1MjcsNDc1MjgsNDc1MjksNDc1MzAsNDc1MzEsNDc1MzQsNDc1MzUsNDc1MzcsNDc1''@;'; put 'put ''MzgsNDc1MzksNDc1NDEsNDc1NDIsNDc1NDMsNDc1NDQsNDc1NDUsNDc1NDYsNDc1NDcsNDc1NTAsNDc1NTIsNDc1NTQsNDc1NTUsNDc1NTYsNDc1NTcsNDc1NTgsNDc1NTksNDc1NjIsNDc1NjMsNDc1NjUsNDc1NzEsNDc1NzIsNDc1NzMsNDc1NzQsNDc1NzUsNDc1NzgsNDc1ODAsNDc1ODMs''@;'; put 'put ''NDc1ODQsNDc1ODYsNDc1OTAsNDc1OTEsNDc1OTMsNDc1OTQsNDc1OTUsNDc1OTcsNDc1OTgsNDc1OTksNDc2MDAsNDc2MDEsNDc2MDIsNDc2MDMsNDc2MDYsNDc2MTEsNDc2MTIsNDc2MTMsNDc2MTQsNDc2MTUsNDc2MTgsNDc2MTksNDc2MjAsNDc2MjEsNDc2MjIsNDc2MjMsNDc2MjUsNDc2''@;'; put 'put ''MjYsNDc2MjcsNDc2MjgsNDc2MjksNDc2MzAsNDc2MzEsNDc2MzIsNDc2MzMsNDc2MzQsNDc2MzUsNDc2MzYsNDc2MzgsNDc2MzksNDc2NDAsNDc2NDEsNDc2NDIsNDc2NDMsNDc2NDQsNDc2NDUsNDc2NDYsNDc2NDcsNDc2NDgsNDc2NDksNDc2NTAsNDc2NTEsNDc2NTIsNDc2NTMsNDc2NTQs''@;'; put 'put ''NDc2NTUsNDc2NTYsNDc2NTcsNDc2NTgsNDc2NTksNDc2NjAsNDc2NjEsNDc2NjIsNDc2NjMsNDc2NjQsNDc2NjUsNDc2NjYsNDc2NjcsNDc2NjgsNDc2NjksNDc2NzAsNDc2NzEsNDc2NzQsNDc2NzUsNDc2NzcsNDc2NzgsNDc2NzksNDc2ODEsNDc2ODMsNDc2ODQsNDc2ODUsNDc2ODYsNDc2''@;'; put 'put ''ODcsNDc2OTAsNDc2OTIsNDc2OTUsNDc2OTYsNDc2OTcsNDc2OTgsNDc3MDIsNDc3MDMsNDc3MDUsNDc3MDYsNDc3MDcsNDc3MDksNDc3MTAsNDc3MTEsNDc3MTIsNDc3MTMsNDc3MTQsNDc3MTUsNDc3MTgsNDc3MjIsNDc3MjMsNDc3MjQsNDc3MjUsNDc3MjYsNDc3MjcsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsNDc3MzAsNDc3MzEsNDc3MzMsNDc3MzQsNDc3MzUsNDc3MzcsNDc3MzgsNDc3MzksNDc3NDAsNDc3NDEsNDc3NDIsNDc3NDMsNDc3NDQsNDc3NDUsNDc3NDYsNDc3NTAsNDc3NTIsNDc3NTMsNDc3NTQsNDc3NTUsNDc3NTcsNDc3NTgsNDc3NTksNDc3NjAsNDc3''@;'; put 'put ''NjEsNDc3NjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc3NjMsNDc3NjQsNDc3NjUsNDc3NjYsNDc3NjcsNDc3NjgsNDc3NjksNDc3NzAsNDc3NzEsNDc3NzIsNDc3NzMsNDc3NzQsNDc3NzUsNDc3NzYsNDc3NzcsNDc3NzgsNDc3NzksNDc3ODAsNDc3ODEsNDc3ODIsNDc3ODMs''@;'; put 'put ''NDc3ODYsNDc3ODksNDc3OTAsNDc3OTEsNDc3OTMsNDc3OTUsNDc3OTYsNDc3OTcsNDc3OTgsNDc3OTksNDc4MDIsNDc4MDQsNDc4MDYsNDc4MDcsNDc4MDgsNDc4MDksNDc4MTAsNDc4MTEsNDc4MTMsNDc4MTQsNDc4MTUsNDc4MTcsNDc4MTgsNDc4MTksNDc4MjAsNDc4MjEsNDc4MjIsNDc4''@;'; put 'put ''MjMsNDc4MjQsNDc4MjUsNDc4MjYsNDc4MjcsNDc4MjgsNDc4MjksNDc4MzAsNDc4MzEsNDc4MzQsNDc4MzUsNDc4MzYsNDc4MzcsNDc4MzgsNDc4MzksNDc4NDAsNDc4NDEsNDc4NDIsNDc4NDMsNDc4NDQsNDc4NDUsNDc4NDYsNDc4NDcsNDc4NDgsNDc4NDksNDc4NTAsNDc4NTEsNDc4NTIs''@;'; put 'put ''NDc4NTMsNDc4NTQsNDc4NTUsNDc4NTYsNDc4NTcsNDc4NTgsNDc4NTksNDc4NjAsNDc4NjEsNDc4NjIsNDc4NjMsNDc4NjQsNDc4NjUsNDc4NjYsNDc4NjcsNDc4NjksNDc4NzAsNDc4NzEsNDc4NzMsNDc4NzQsNDc4NzUsNDc4NzcsNDc4NzgsNDc4NzksNDc4ODAsNDc4ODEsNDc4ODIsNDc4''@;'; put 'put ''ODMsNDc4ODQsNDc4ODYsNDc4ODgsNDc4OTAsNDc4OTEsNDc4OTIsNDc4OTMsNDc4OTQsNDc4OTUsNDc4OTcsNDc4OTgsNDc4OTksNDc5MDEsNDc5MDIsNDc5MDMsNDc5MDUsNDc5MDYsNDc5MDcsNDc5MDgsNDc5MDksNDc5MTAsNDc5MTEsNDc5MTIsNDc5MTQsNDc5MTYsNDc5MTcsNDc5MTgs''@;'; put 'put ''NDc5MTksNDc5MjAsNDc5MjEsNDc5MjIsNDc5MjMsNDc5MjcsNDc5MjksNDc5MzAsNDc5MzUsNDc5MzYsNDc5MzcsNDc5MzgsNDc5MzksNDc5NDIsNDc5NDQsNDc5NDYsNDc5NDcsNDc5NDgsNDc5NTAsNDc5NTMsNDc5NTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc5NTUsNDc5''@;'; put 'put ''NTcsNDc5NTgsNDc5NTksNDc5NjEsNDc5NjIsNDc5NjMsNDc5NjQsNDc5NjUsNDc5NjYsNDc5NjcsNDc5NjgsNDc5NzAsNDc5NzIsNDc5NzMsNDc5NzQsNDc5NzUsNDc5NzYsNDc5NzcsNDc5NzgsNDc5NzksNDc5ODEsNDc5ODIsNDc5ODMsNDc5ODQsNDc5ODUsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNDc5ODYsNDc5ODcsNDc5ODgsNDc5ODksNDc5OTAsNDc5OTEsNDc5OTIsNDc5OTMsNDc5OTQsNDc5OTUsNDc5OTYsNDc5OTcsNDc5OTgsNDc5OTksNDhlMyw0ODAwMSw0ODAwMiw0ODAwMyw0ODAwNCw0ODAwNSw0ODAwNiw0ODAwNyw0ODAwOSw0ODAxMCw0ODAxMSw0ODAx''@;'; put 'put ''Myw0ODAxNCw0ODAxNSw0ODAxNyw0ODAxOCw0ODAxOSw0ODAyMCw0ODAyMSw0ODAyMiw0ODAyMyw0ODAyNCw0ODAyNSw0ODAyNiw0ODAyNyw0ODAyOCw0ODAyOSw0ODAzMCw0ODAzMSw0ODAzMiw0ODAzMyw0ODAzNCw0ODAzNSw0ODAzNyw0ODAzOCw0ODAzOSw0ODA0MSw0ODA0Miw0ODA0Myw0''@;'; put 'put ''ODA0NSw0ODA0Niw0ODA0Nyw0ODA0OCw0ODA0OSw0ODA1MCw0ODA1MSw0ODA1Myw0ODA1NCw0ODA1Niw0ODA1Nyw0ODA1OCw0ODA1OSw0ODA2MCw0ODA2MSw0ODA2Miw0ODA2Myw0ODA2NSw0ODA2Niw0ODA2Nyw0ODA2OSw0ODA3MCw0ODA3MSw0ODA3Myw0ODA3NCw0ODA3NSw0ODA3Niw0ODA3''@;'; put 'put ''Nyw0ODA3OCw0ODA3OSw0ODA4MSw0ODA4Miw0ODA4NCw0ODA4NSw0ODA4Niw0ODA4Nyw0ODA4OCw0ODA4OSw0ODA5MCw0ODA5MSw0ODA5Miw0ODA5Myw0ODA5NCw0ODA5NSw0ODA5Niw0ODA5Nyw0ODA5OCw0ODA5OSw0ODEwMCw0ODEwMSw0ODEwMiw0ODEwMyw0ODEwNCw0ODEwNSw0ODEwNiw0''@;'; put 'put ''ODEwNyw0ODEwOCw0ODEwOSw0ODExMCw0ODExMSw0ODExMiw0ODExMyw0ODExNCw0ODExNSw0ODExNiw0ODExNyw0ODExOCw0ODExOSw0ODEyMiw0ODEyMyw0ODEyNSw0ODEyNiw0ODEyOSw0ODEzMSw0ODEzMiw0ODEzMyw0ODEzNCw0ODEzNSw0ODEzOCw0ODE0Miw0ODE0NCw0ODE0Niw0ODE0''@;'; put 'put ''Nyw0ODE1Myw0ODE1NCw0ODE2MCw0ODE2MSw0ODE2Miw0ODE2Myw0ODE2Niw0ODE2OCw0ODE3MCw0ODE3MSw0ODE3Miw0ODE3NCw0ODE3NSw0ODE3OCw0ODE3OSw0ODE4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODE4Miw0ODE4Myw0ODE4NSw0ODE4Niw0ODE4Nyw0ODE4OCw0''@;'; put 'put ''ODE4OSw0ODE5MCw0ODE5MSw0ODE5NCw0ODE5OCw0ODE5OSw0ODIwMCw0ODIwMiw0ODIwMyw0ODIwNiw0ODIwNyw0ODIwOSw0ODIxMCw0ODIxMSw0ODIxMiw0ODIxMyw0ODIxNCw0ODIxNSw0ODIxNiw0ODIxNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODIxOCw0ODIxOSw0ODIy''@;'; put 'put ''MCw0ODIyMiw0ODIyMyw0ODIyNCw0ODIyNSw0ODIyNiw0ODIyNyw0ODIyOCw0ODIyOSw0ODIzMCw0ODIzMSw0ODIzMiw0ODIzMyw0ODIzNCw0ODIzNSw0ODIzNiw0ODIzNyw0ODIzOCw0ODIzOSw0ODI0MCw0ODI0MSw0ODI0Miw0ODI0Myw0ODI0NCw0ODI0NSw0ODI0Niw0ODI0Nyw0ODI0OCw0''@;'; put 'put ''ODI0OSw0ODI1MCw0ODI1MSw0ODI1Miw0ODI1Myw0ODI1NCw0ODI1NSw0ODI1Niw0ODI1Nyw0ODI1OCw0ODI1OSw0ODI2Miw0ODI2Myw0ODI2NSw0ODI2Niw0ODI2OSw0ODI3MSw0ODI3Miw0ODI3Myw0ODI3NCw0ODI3NSw0ODI3OCw0ODI4MCw0ODI4Myw0ODI4NCw0ODI4NSw0ODI4Niw0ODI4''@;'; put 'put ''Nyw0ODI5MCw0ODI5MSw0ODI5Myw0ODI5NCw0ODI5Nyw0ODI5OCw0ODI5OSw0ODMwMCw0ODMwMSw0ODMwMiw0ODMwMyw0ODMwNiw0ODMxMCw0ODMxMSw0ODMxMiw0ODMxMyw0ODMxNCw0ODMxNSw0ODMxOCw0ODMxOSw0ODMyMSw0ODMyMiw0ODMyMyw0ODMyNSw0ODMyNiw0ODMyNyw0ODMyOCw0''@;'; put 'put ''ODMyOSw0ODMzMCw0ODMzMSw0ODMzMiw0ODMzNCw0ODMzOCw0ODMzOSw0ODM0MCw0ODM0Miw0ODM0Myw0ODM0NSw0ODM0Niw0ODM0Nyw0ODM0OSw0ODM1MCw0ODM1MSw0ODM1Miw0ODM1Myw0ODM1NCw0ODM1NSw0ODM1Niw0ODM1Nyw0ODM1OCw0ODM1OSw0ODM2MCw0ODM2MSw0ODM2Miw0ODM2''@;'; put 'put ''Myw0ODM2NCw0ODM2NSw0ODM2Niw0ODM2Nyw0ODM2OCw0ODM2OSw0ODM3MCw0ODM3MSw0ODM3NSw0ODM3Nyw0ODM3OCw0ODM3OSw0ODM4MSw0ODM4Miw0ODM4Myw0ODM4NCw0ODM4NSw0ODM4Niw0ODM4Nyw0ODM5MCw0ODM5Miw0ODM5NCw0ODM5NSw0ODM5Niw0ODM5Nyw0ODM5OCw0ODM5OSw0''@;'; put 'put ''ODQwMSw0ODQwMiw0ODQwMyw0ODQwNSw0ODQwNiw0ODQwNyw0ODQwOCw0ODQwOSw0ODQxMCw0ODQxMSw0ODQxMiw0ODQxMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODQxNCw0ODQxNSw0ODQxNiw0ODQxNyw0ODQxOCw0ODQxOSw0ODQyMSw0ODQyMiw0ODQyMyw0ODQyNCw0ODQy''@;'; put 'put ''NSw0ODQyNiw0ODQyNyw0ODQyOSw0ODQzMCw0ODQzMSw0ODQzMiw0ODQzMyw0ODQzNCw0ODQzNSw0ODQzNiw0ODQzNyw0ODQzOCw0ODQzOSw0ODQ0MCw0ODQ0MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODQ0Miw0ODQ0Myw0ODQ0NCw0ODQ0NSw0ODQ0Niw0ODQ0Nyw0ODQ0OSw0''@;'; put 'put ''ODQ1MCw0ODQ1MSw0ODQ1Miw0ODQ1Myw0ODQ1NCw0ODQ1NSw0ODQ1OCw0ODQ1OSw0ODQ2MSw0ODQ2Miw0ODQ2Myw0ODQ2NSw0ODQ2Niw0ODQ2Nyw0ODQ2OCw0ODQ2OSw0ODQ3MCw0ODQ3MSw0ODQ3NCw0ODQ3NSw0ODQ3Niw0ODQ3Nyw0ODQ3OCw0ODQ3OSw0ODQ4MCw0ODQ4MSw0ODQ4Miw0ODQ4''@;'; put 'put ''Myw0ODQ4NSw0ODQ4Niw0ODQ4Nyw0ODQ4OSw0ODQ5MCw0ODQ5MSw0ODQ5Miw0ODQ5Myw0ODQ5NCw0ODQ5NSw0ODQ5Niw0ODQ5Nyw0ODQ5OCw0ODQ5OSw0ODUwMCw0ODUwMSw0ODUwMiw0ODUwMyw0ODUwNCw0ODUwNSw0ODUwNiw0ODUwNyw0ODUwOCw0ODUwOSw0ODUxMCw0ODUxMSw0ODUxNCw0''@;'; put 'put ''ODUxNSw0ODUxNyw0ODUxOCw0ODUyMyw0ODUyNCw0ODUyNSw0ODUyNiw0ODUyNyw0ODUzMCw0ODUzMiw0ODUzNCw0ODUzNSw0ODUzNiw0ODUzOSw0ODU0MSw0ODU0Miw0ODU0Myw0ODU0NCw0ODU0NSw0ODU0Niw0ODU0Nyw0ODU0OSw0ODU1MCw0ODU1MSw0ODU1Miw0ODU1Myw0ODU1NCw0ODU1''@;'; put 'put ''NSw0ODU1Niw0ODU1Nyw0ODU1OCw0ODU1OSw0ODU2MSw0ODU2Miw0ODU2Myw0ODU2NCw0ODU2NSw0ODU2Niw0ODU2Nyw0ODU2OSw0ODU3MCw0ODU3MSw0ODU3Miw0ODU3Myw0ODU3NCw0ODU3NSw0ODU3Niw0ODU3Nyw0ODU3OCw0ODU3OSw0ODU4MCw0ODU4MSw0ODU4Miw0ODU4Myw0ODU4NCw0''@;'; put 'put ''ODU4NSw0ODU4Niw0ODU4Nyw0ODU4OCw0ODU4OSw0ODU5MCw0ODU5MSw0ODU5Miw0ODU5Myw0ODU5NCw0ODU5NSw0ODU5OCw0ODU5OSw0ODYwMSw0ODYwMiw0ODYwMyw0ODYwNSw0ODYwNiw0ODYwNyw0ODYwOCw0ODYwOSw0ODYxMCw0ODYxMSw0ODYxMiw0ODYxMyw0ODYxNCw0ODYxNSw0ODYx''@;'; put 'put ''Niw0ODYxOCw0ODYxOSw0ODYyMCw0ODYyMSw0ODYyMiw0ODYyMyw0ODYyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODYyNiw0ODYyNyw0ODYyOSw0ODYzMCw0ODYzMSw0ODYzMyw0ODYzNCw0ODYzNSw0ODYzNiw0ODYzNyw0ODYzOCw0ODYzOSw0ODY0MSw0ODY0Miw0ODY0NCw0''@;'; put 'put ''ODY0Niw0ODY0Nyw0ODY0OCw0ODY0OSw0ODY1MCw0ODY1MSw0ODY1NCw0ODY1NSw0ODY1Nyw0ODY1OCw0ODY1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODY2MSw0ODY2Miw0ODY2Myw0ODY2NCw0ODY2NSw0ODY2Niw0ODY2Nyw0ODY3MCw0ODY3Miw0ODY3Myw0ODY3NCw0ODY3''@;'; put 'put ''NSw0ODY3Niw0ODY3Nyw0ODY3OCw0ODY3OSw0ODY4MCw0ODY4MSw0ODY4Miw0ODY4Myw0ODY4NCw0ODY4NSw0ODY4Niw0ODY4Nyw0ODY4OCw0ODY4OSw0ODY5MCw0ODY5MSw0ODY5Miw0ODY5Myw0ODY5NCw0ODY5NSw0ODY5Niw0ODY5Nyw0ODY5OCw0ODY5OSw0ODcwMCw0ODcwMSw0ODcwMiw0''@;'; put 'put ''ODcwMyw0ODcwNCw0ODcwNSw0ODcwNiw0ODcwNyw0ODcxMCw0ODcxMSw0ODcxMyw0ODcxNCw0ODcxNSw0ODcxNyw0ODcxOSw0ODcyMCw0ODcyMSw0ODcyMiw0ODcyMyw0ODcyNiw0ODcyOCw0ODczMiw0ODczMyw0ODczNCw0ODczNSw0ODczOCw0ODczOSw0ODc0MSw0ODc0Miw0ODc0Myw0ODc0''@;'; put 'put ''NSw0ODc0Nyw0ODc0OCw0ODc0OSw0ODc1MCw0ODc1MSw0ODc1NCw0ODc1OCw0ODc1OSw0ODc2MCw0ODc2MSw0ODc2Miw0ODc2Niw0ODc2Nyw0ODc2OSw0ODc3MCw0ODc3MSw0ODc3Myw0ODc3NCw0ODc3NSw0ODc3Niw0ODc3Nyw0ODc3OCw0ODc3OSw0ODc4Miw0ODc4Niw0ODc4Nyw0ODc4OCw0''@;'; put 'put ''ODc4OSw0ODc5MCw0ODc5MSw0ODc5NCw0ODc5NSw0ODc5Niw0ODc5Nyw0ODc5OCw0ODc5OSw0ODgwMCw0ODgwMSw0ODgwMiw0ODgwMyw0ODgwNCw0ODgwNSw0ODgwNiw0ODgwNyw0ODgwOSw0ODgxMCw0ODgxMSw0ODgxMiw0ODgxMyw0ODgxNCw0ODgxNSw0ODgxNiw0ODgxNyw0ODgxOCw0ODgx''@;'; put 'put ''OSw0ODgyMCw0ODgyMSw0ODgyMiw0ODgyMyw0ODgyNCw0ODgyNSw0ODgyNiw0ODgyNyw0ODgyOCw0ODgyOSw0ODgzMCw0ODgzMSw0ODgzMiw0ODgzMyw0ODgzNCw0ODgzNSw0ODgzNiw0ODgzNyw0ODgzOCw0ODgzOSw0ODg0MCw0ODg0MSw0ODg0Miw0ODg0Myw0ODg0NCw0ODg0NSw0ODg0Niw0''@;'; put 'put ''ODg0Nyw0ODg1MCw0ODg1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODg1Myw0ODg1NCw0ODg1Nyw0ODg1OCw0ODg1OSw0ODg2MCw0ODg2MSw0ODg2Miw0ODg2Myw0ODg2NSw0ODg2Niw0ODg3MCw0ODg3MSw0ODg3Miw0ODg3Myw0ODg3NCw0ODg3NSw0ODg3Nyw0ODg3OCw0ODg3''@;'; put 'put ''OSw0ODg4MCw0ODg4MSw0ODg4Miw0ODg4Myw0ODg4NCw0ODg4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODg4Niw0ODg4Nyw0ODg4OCw0ODg4OSw0ODg5MCw0ODg5MSw0ODg5Miw0ODg5Myw0ODg5NCw0ODg5NSw0ODg5Niw0ODg5OCw0ODg5OSw0ODkwMCw0ODkwMSw0ODkwMiw0''@;'; put 'put ''ODkwMyw0ODkwNiw0ODkwNyw0ODkwOCw0ODkwOSw0ODkxMCw0ODkxMSw0ODkxMiw0ODkxMyw0ODkxNCw0ODkxNSw0ODkxNiw0ODkxNyw0ODkxOCw0ODkxOSw0ODkyMiw0ODkyNiw0ODkyNyw0ODkyOCw0ODkyOSw0ODkzMCw0ODkzMSw0ODkzMiw0ODkzMyw0ODkzNCw0ODkzNSw0ODkzNiw0ODkz''@;'; put 'put ''Nyw0ODkzOCw0ODkzOSw0ODk0MCw0ODk0MSw0ODk0Miw0ODk0Myw0ODk0NCw0ODk0NSw0ODk0Niw0ODk0Nyw0ODk0OCw0ODk0OSw0ODk1MCw0ODk1MSw0ODk1Miw0ODk1Myw0ODk1NCw0ODk1NSw0ODk1Niw0ODk1Nyw0ODk1OCw0ODk1OSw0ODk2Miw0ODk2Myw0ODk2NSw0ODk2Niw0ODk2Nyw0''@;'; put 'put ''ODk2OSw0ODk3MCw0ODk3MSw0ODk3Miw0ODk3Myw0ODk3NCw0ODk3NSw0ODk3OCw0ODk3OSw0ODk4MCw0ODk4Miw0ODk4Myw0ODk4NCw0ODk4NSw0ODk4Niw0ODk4Nyw0ODk4OCw0ODk4OSw0ODk5MCw0ODk5MSw0ODk5Miw0ODk5Myw0ODk5NCw0ODk5NSw0ODk5Niw0ODk5Nyw0ODk5OCw0ODk5''@;'; put 'put ''OSw0OWUzLDQ5MDAxLDQ5MDAyLDQ5MDAzLDQ5MDA0LDQ5MDA1LDQ5MDA2LDQ5MDA3LDQ5MDA4LDQ5MDA5LDQ5MDEwLDQ5MDExLDQ5MDEyLDQ5MDEzLDQ5MDE0LDQ5MDE1LDQ5MDE2LDQ5MDE3LDQ5MDE4LDQ5MDE5LDQ5MDIwLDQ5MDIxLDQ5MDIyLDQ5MDIzLDQ5MDI0LDQ5MDI1LDQ5MDI2LDQ5''@;'; put 'put ''MDI3LDQ5MDI4LDQ5MDI5LDQ5MDMwLDQ5MDMxLDQ5MDMyLDQ5MDMzLDQ5MDM0LDQ5MDM1LDQ5MDM2LDQ5MDM3LDQ5MDM4LDQ5MDM5LDQ5MDQwLDQ5MDQxLDQ5MDQyLDQ5MDQzLDQ5MDQ1LDQ5MDQ2LDQ5MDQ3LDQ5MDQ4LDQ5MDQ5LDQ5MDUwLDQ5MDUxLDQ5MDUyLDQ5MDUzLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDQ5MDU0LDQ5MDU1LDQ5MDU2LDQ5MDU3LDQ5MDU4LDQ5MDU5LDQ5MDYwLDQ5MDYxLDQ5MDYyLDQ5MDYzLDQ5MDY0LDQ5MDY1LDQ5MDY2LDQ5MDY3LDQ5MDY4LDQ5MDY5LDQ5MDcwLDQ5MDcxLDQ5MDczLDQ5MDc0LDQ5MDc1LDQ5MDc2LDQ5MDc3LDQ5MDc4LDQ5''@;'; put 'put ''MDc5LDQ5MDgwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDgxLDQ5MDgyLDQ5MDgzLDQ5MDg0LDQ5MDg1LDQ5MDg2LDQ5MDg3LDQ5MDg4LDQ5MDg5LDQ5MDkwLDQ5MDkxLDQ5MDkyLDQ5MDk0LDQ5MDk1LDQ5MDk2LDQ5MDk3LDQ5MDk4LDQ5MDk5LDQ5MTAyLDQ5MTAzLDQ5MTA1''@;'; put 'put ''LDQ5MTA2LDQ5MTA3LDQ5MTA5LDQ5MTEwLDQ5MTExLDQ5MTEyLDQ5MTEzLDQ5MTE0LDQ5MTE1LDQ5MTE3LDQ5MTE4LDQ5MTIwLDQ5MTIyLDQ5MTIzLDQ5MTI0LDQ5MTI1LDQ5MTI2LDQ5MTI3LDQ5MTI4LDQ5MTI5LDQ5MTMwLDQ5MTMxLDQ5MTMyLDQ5MTMzLDQ5MTM0LDQ5MTM1LDQ5MTM2LDQ5''@;'; put 'put ''MTM3LDQ5MTM4LDQ5MTM5LDQ5MTQwLDQ5MTQxLDQ5MTQyLDQ5MTQzLDQ5MTQ0LDQ5MTQ1LDQ5MTQ2LDQ5MTQ3LDQ5MTQ4LDQ5MTQ5LDQ5MTUwLDQ5MTUxLDQ5MTUyLDQ5MTUzLDQ5MTU0LDQ5MTU1LDQ5MTU2LDQ5MTU3LDQ5MTU4LDQ5MTU5LDQ5MTYwLDQ5MTYxLDQ5MTYyLDQ5MTYzLDQ5MTY0''@;'; put 'put ''LDQ5MTY1LDQ5MTY2LDQ5MTY3LDQ5MTY4LDQ5MTY5LDQ5MTcwLDQ5MTcxLDQ5MTcyLDQ5MTczLDQ5MTc0LDQ5MTc1LDQ5MTc2LDQ5MTc3LDQ5MTc4LDQ5MTc5LDQ5MTgwLDQ5MTgxLDQ5MTgyLDQ5MTgzLDQ5MTg0LDQ5MTg1LDQ5MTg2LDQ5MTg3LDQ5MTg4LDQ5MTg5LDQ5MTkwLDQ5MTkxLDQ5''@;'; put 'put ''MTkyLDQ5MTkzLDQ5MTk0LDQ5MTk1LDQ5MTk2LDQ5MTk3LDQ5MTk4LDQ5MTk5LDQ5MjAwLDQ5MjAxLDQ5MjAyLDQ5MjAzLDQ5MjA0LDQ5MjA1LDQ5MjA2LDQ5MjA3LDQ5MjA4LDQ5MjA5LDQ5MjEwLDQ5MjExLDQ5MjEzLDQ5MjE0LDQ5MjE1LDQ5MjE2LDQ5MjE3LDQ5MjE4LDQ5MjE5LDQ5MjIw''@;'; put 'put ''LDQ5MjIxLDQ5MjIyLDQ5MjIzLDQ5MjI0LDQ5MjI1LDQ5MjI2LDQ5MjI3LDQ5MjI4LDQ5MjI5LDQ5MjMwLDQ5MjMxLDQ5MjMyLDQ5MjM0LDQ5MjM1LDQ5MjM2LDQ5MjM3LDQ5MjM4LDQ5MjM5LDQ5MjQxLDQ5MjQyLDQ5MjQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MjQ1LDQ5''@;'; put 'put ''MjQ2LDQ5MjQ3LDQ5MjQ5LDQ5MjUwLDQ5MjUxLDQ5MjUyLDQ5MjUzLDQ5MjU0LDQ5MjU1LDQ5MjU4LDQ5MjU5LDQ5MjYwLDQ5MjYxLDQ5MjYyLDQ5MjYzLDQ5MjY0LDQ5MjY1LDQ5MjY2LDQ5MjY3LDQ5MjY4LDQ5MjY5LDQ5MjcwLDQ5MjcxLDQ5MjcyLDQ5MjczLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDQ5Mjc0LDQ5Mjc1LDQ5Mjc2LDQ5Mjc3LDQ5Mjc4LDQ5Mjc5LDQ5MjgwLDQ5MjgxLDQ5MjgyLDQ5MjgzLDQ5Mjg0LDQ5Mjg1LDQ5Mjg2LDQ5Mjg3LDQ5Mjg4LDQ5Mjg5LDQ5MjkwLDQ5MjkxLDQ5MjkyLDQ5MjkzLDQ5Mjk0LDQ5Mjk1LDQ5Mjk4LDQ5Mjk5LDQ5MzAxLDQ5''@;'; put 'put ''MzAyLDQ5MzAzLDQ5MzA1LDQ5MzA2LDQ5MzA3LDQ5MzA4LDQ5MzA5LDQ5MzEwLDQ5MzExLDQ5MzE0LDQ5MzE2LDQ5MzE4LDQ5MzE5LDQ5MzIwLDQ5MzIxLDQ5MzIyLDQ5MzIzLDQ5MzI2LDQ5MzI5LDQ5MzMwLDQ5MzM1LDQ5MzM2LDQ5MzM3LDQ5MzM4LDQ5MzM5LDQ5MzQyLDQ5MzQ2LDQ5MzQ3''@;'; put 'put ''LDQ5MzQ4LDQ5MzUwLDQ5MzUxLDQ5MzU0LDQ5MzU1LDQ5MzU3LDQ5MzU4LDQ5MzU5LDQ5MzYxLDQ5MzYyLDQ5MzYzLDQ5MzY0LDQ5MzY1LDQ5MzY2LDQ5MzY3LDQ5MzcwLDQ5Mzc0LDQ5Mzc1LDQ5Mzc2LDQ5Mzc3LDQ5Mzc4LDQ5Mzc5LDQ5MzgyLDQ5MzgzLDQ5Mzg1LDQ5Mzg2LDQ5Mzg3LDQ5''@;'; put 'put ''Mzg5LDQ5MzkwLDQ5MzkxLDQ5MzkyLDQ5MzkzLDQ5Mzk0LDQ5Mzk1LDQ5Mzk4LDQ5NDAwLDQ5NDAyLDQ5NDAzLDQ5NDA0LDQ5NDA1LDQ5NDA2LDQ5NDA3LDQ5NDA5LDQ5NDEwLDQ5NDExLDQ5NDEzLDQ5NDE0LDQ5NDE1LDQ5NDE3LDQ5NDE4LDQ5NDE5LDQ5NDIwLDQ5NDIxLDQ5NDIyLDQ5NDIz''@;'; put 'put ''LDQ5NDI1LDQ5NDI2LDQ5NDI3LDQ5NDI4LDQ5NDMwLDQ5NDMxLDQ5NDMyLDQ5NDMzLDQ5NDM0LDQ5NDM1LDQ5NDQxLDQ5NDQyLDQ5NDQ1LDQ5NDQ4LDQ5NDQ5LDQ5NDUwLDQ5NDUxLDQ5NDU0LDQ5NDU4LDQ5NDU5LDQ5NDYwLDQ5NDYxLDQ5NDYzLDQ5NDY2LDQ5NDY3LDQ5NDY5LDQ5NDcwLDQ5''@;'; put 'put ''NDcxLDQ5NDczLDQ5NDc0LDQ5NDc1LDQ5NDc2LDQ5NDc3LDQ5NDc4LDQ5NDc5LDQ5NDgyLDQ5NDg2LDQ5NDg3LDQ5NDg4LDQ5NDg5LDQ5NDkwLDQ5NDkxLDQ5NDk0LDQ5NDk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NDk3LDQ5NDk4LDQ5NDk5LDQ5NTAxLDQ5NTAyLDQ5NTAz''@;'; put 'put ''LDQ5NTA0LDQ5NTA1LDQ5NTA2LDQ5NTA3LDQ5NTEwLDQ5NTE0LDQ5NTE1LDQ5NTE2LDQ5NTE3LDQ5NTE4LDQ5NTE5LDQ5NTIxLDQ5NTIyLDQ5NTIzLDQ5NTI1LDQ5NTI2LDQ5NTI3LDQ5NTI5LDQ5NTMwLDQ5NTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NTMyLDQ5NTMzLDQ5''@;'; put 'put ''NTM0LDQ5NTM1LDQ5NTM2LDQ5NTM3LDQ5NTM4LDQ5NTM5LDQ5NTQwLDQ5NTQyLDQ5NTQzLDQ5NTQ0LDQ5NTQ1LDQ5NTQ2LDQ5NTQ3LDQ5NTUxLDQ5NTUzLDQ5NTU0LDQ5NTU1LDQ5NTU3LDQ5NTU5LDQ5NTYwLDQ5NTYxLDQ5NTYyLDQ5NTYzLDQ5NTY2LDQ5NTY4LDQ5NTcwLDQ5NTcxLDQ5NTcy''@;'; put 'put ''LDQ5NTc0LDQ5NTc1LDQ5NTc4LDQ5NTc5LDQ5NTgxLDQ5NTgyLDQ5NTgzLDQ5NTg1LDQ5NTg2LDQ5NTg3LDQ5NTg4LDQ5NTg5LDQ5NTkwLDQ5NTkxLDQ5NTkyLDQ5NTkzLDQ5NTk0LDQ5NTk1LDQ5NTk2LDQ5NTk4LDQ5NTk5LDQ5NjAwLDQ5NjAxLDQ5NjAyLDQ5NjAzLDQ5NjA1LDQ5NjA2LDQ5''@;'; put 'put ''NjA3LDQ5NjA5LDQ5NjEwLDQ5NjExLDQ5NjEzLDQ5NjE0LDQ5NjE1LDQ5NjE2LDQ5NjE3LDQ5NjE4LDQ5NjE5LDQ5NjIxLDQ5NjIyLDQ5NjI1LDQ5NjI2LDQ5NjI3LDQ5NjI4LDQ5NjI5LDQ5NjMwLDQ5NjMxLDQ5NjMzLDQ5NjM0LDQ5NjM1LDQ5NjM3LDQ5NjM4LDQ5NjM5LDQ5NjQxLDQ5NjQy''@;'; put 'put ''LDQ5NjQzLDQ5NjQ0LDQ5NjQ1LDQ5NjQ2LDQ5NjQ3LDQ5NjUwLDQ5NjUyLDQ5NjUzLDQ5NjU0LDQ5NjU1LDQ5NjU2LDQ5NjU3LDQ5NjU4LDQ5NjU5LDQ5NjYyLDQ5NjYzLDQ5NjY1LDQ5NjY2LDQ5NjY3LDQ5NjY5LDQ5NjcwLDQ5NjcxLDQ5NjcyLDQ5NjczLDQ5Njc0LDQ5Njc1LDQ5Njc4LDQ5''@;'; put 'put ''NjgwLDQ5NjgyLDQ5NjgzLDQ5Njg0LDQ5Njg1LDQ5Njg2LDQ5Njg3LDQ5NjkwLDQ5NjkxLDQ5NjkzLDQ5Njk0LDQ5Njk3LDQ5Njk4LDQ5Njk5LDQ5NzAwLDQ5NzAxLDQ5NzAyLDQ5NzAzLDQ5NzA2LDQ5NzA4LDQ5NzEwLDQ5NzEyLDQ5NzE1LDQ5NzE3LDQ5NzE4LDQ5NzE5LDQ5NzIwLDQ5NzIx''@;'; put 'put ''LDQ5NzIyLDQ5NzIzLDQ5NzI0LDQ5NzI1LDQ5NzI2LDQ5NzI3LDQ5NzI4LDQ5NzI5LDQ5NzMwLDQ5NzMxLDQ5NzMyLDQ5NzMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzM0LDQ5NzM1LDQ5NzM3LDQ5NzM4LDQ5NzM5LDQ5NzQwLDQ5NzQxLDQ5NzQyLDQ5NzQzLDQ5NzQ2LDQ5''@;'; put 'put ''NzQ3LDQ5NzQ5LDQ5NzUwLDQ5NzUxLDQ5NzUzLDQ5NzU0LDQ5NzU1LDQ5NzU2LDQ5NzU3LDQ5NzU4LDQ5NzU5LDQ5NzYxLDQ5NzYyLDQ5NzYzLDQ5NzY0LDQ5NzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzY3LDQ5NzY4LDQ5NzY5LDQ5NzcwLDQ5NzcxLDQ5Nzc0LDQ5Nzc1''@;'; put 'put ''LDQ5Nzc3LDQ5Nzc4LDQ5Nzc5LDQ5NzgxLDQ5NzgyLDQ5NzgzLDQ5Nzg0LDQ5Nzg1LDQ5Nzg2LDQ5Nzg3LDQ5NzkwLDQ5NzkyLDQ5Nzk0LDQ5Nzk1LDQ5Nzk2LDQ5Nzk3LDQ5Nzk4LDQ5Nzk5LDQ5ODAyLDQ5ODAzLDQ5ODA0LDQ5ODA1LDQ5ODA2LDQ5ODA3LDQ5ODA5LDQ5ODEwLDQ5ODExLDQ5''@;'; put 'put ''ODEyLDQ5ODEzLDQ5ODE0LDQ5ODE1LDQ5ODE3LDQ5ODE4LDQ5ODIwLDQ5ODIyLDQ5ODIzLDQ5ODI0LDQ5ODI1LDQ5ODI2LDQ5ODI3LDQ5ODMwLDQ5ODMxLDQ5ODMzLDQ5ODM0LDQ5ODM1LDQ5ODM4LDQ5ODM5LDQ5ODQwLDQ5ODQxLDQ5ODQyLDQ5ODQzLDQ5ODQ2LDQ5ODQ4LDQ5ODUwLDQ5ODUx''@;'; put 'put ''LDQ5ODUyLDQ5ODUzLDQ5ODU0LDQ5ODU1LDQ5ODU2LDQ5ODU3LDQ5ODU4LDQ5ODU5LDQ5ODYwLDQ5ODYxLDQ5ODYyLDQ5ODYzLDQ5ODY0LDQ5ODY1LDQ5ODY2LDQ5ODY3LDQ5ODY4LDQ5ODY5LDQ5ODcwLDQ5ODcxLDQ5ODcyLDQ5ODczLDQ5ODc0LDQ5ODc1LDQ5ODc2LDQ5ODc3LDQ5ODc4LDQ5''@;'; put 'put ''ODc5LDQ5ODgwLDQ5ODgxLDQ5ODgyLDQ5ODgzLDQ5ODg2LDQ5ODg3LDQ5ODg5LDQ5ODkwLDQ5ODkzLDQ5ODk0LDQ5ODk1LDQ5ODk2LDQ5ODk3LDQ5ODk4LDQ5OTAyLDQ5OTA0LDQ5OTA2LDQ5OTA3LDQ5OTA4LDQ5OTA5LDQ5OTExLDQ5OTE0LDQ5OTE3LDQ5OTE4LDQ5OTE5LDQ5OTIxLDQ5OTIy''@;'; put 'put ''LDQ5OTIzLDQ5OTI0LDQ5OTI1LDQ5OTI2LDQ5OTI3LDQ5OTMwLDQ5OTMxLDQ5OTM0LDQ5OTM1LDQ5OTM2LDQ5OTM3LDQ5OTM4LDQ5OTQyLDQ5OTQzLDQ5OTQ1LDQ5OTQ2LDQ5OTQ3LDQ5OTQ5LDQ5OTUwLDQ5OTUxLDQ5OTUyLDQ5OTUzLDQ5OTU0LDQ5OTU1LDQ5OTU4LDQ5OTU5LDQ5OTYyLDQ5''@;'; put 'put ''OTYzLDQ5OTY0LDQ5OTY1LDQ5OTY2LDQ5OTY3LDQ5OTY4LDQ5OTY5LDQ5OTcwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTcxLDQ5OTcyLDQ5OTczLDQ5OTc0LDQ5OTc1LDQ5OTc2LDQ5OTc3LDQ5OTc4LDQ5OTc5LDQ5OTgwLDQ5OTgxLDQ5OTgyLDQ5OTgzLDQ5OTg0LDQ5OTg1''@;'; put 'put ''LDQ5OTg2LDQ5OTg3LDQ5OTg4LDQ5OTkwLDQ5OTkxLDQ5OTkyLDQ5OTkzLDQ5OTk0LDQ5OTk1LDQ5OTk2LDQ5OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTk4LDQ5OTk5LDVlNCw1MDAwMSw1MDAwMiw1MDAwMyw1MDAwNCw1MDAwNSw1MDAwNiw1MDAwNyw1MDAwOCw1MDAw''@;'; put 'put ''OSw1MDAxMCw1MDAxMSw1MDAxMiw1MDAxMyw1MDAxNCw1MDAxNSw1MDAxNiw1MDAxNyw1MDAxOCw1MDAxOSw1MDAyMCw1MDAyMSw1MDAyMiw1MDAyMyw1MDAyNiw1MDAyNyw1MDAyOSw1MDAzMCw1MDAzMSw1MDAzMyw1MDAzNSw1MDAzNiw1MDAzNyw1MDAzOCw1MDAzOSw1MDA0Miw1MDA0Myw1''@;'; put 'put ''MDA0Niw1MDA0Nyw1MDA0OCw1MDA0OSw1MDA1MCw1MDA1MSw1MDA1Myw1MDA1NCw1MDA1NSw1MDA1Nyw1MDA1OCw1MDA1OSw1MDA2MSw1MDA2Miw1MDA2Myw1MDA2NCw1MDA2NSw1MDA2Niw1MDA2Nyw1MDA2OCw1MDA2OSw1MDA3MCw1MDA3MSw1MDA3Miw1MDA3Myw1MDA3NCw1MDA3NSw1MDA3''@;'; put 'put ''Niw1MDA3Nyw1MDA3OCw1MDA3OSw1MDA4MCw1MDA4MSw1MDA4Miw1MDA4Myw1MDA4NCw1MDA4NSw1MDA4Niw1MDA4Nyw1MDA4OCw1MDA4OSw1MDA5MCw1MDA5MSw1MDA5Miw1MDA5Myw1MDA5NCw1MDA5NSw1MDA5Niw1MDA5Nyw1MDA5OCw1MDA5OSw1MDEwMCw1MDEwMSw1MDEwMiw1MDEwMyw1''@;'; put 'put ''MDEwNCw1MDEwNSw1MDEwNiw1MDEwNyw1MDEwOCw1MDEwOSw1MDExMCw1MDExMSw1MDExMyw1MDExNCw1MDExNSw1MDExNiw1MDExNyw1MDExOCw1MDExOSw1MDEyMCw1MDEyMSw1MDEyMiw1MDEyMyw1MDEyNCw1MDEyNSw1MDEyNiw1MDEyNyw1MDEyOCw1MDEyOSw1MDEzMCw1MDEzMSw1MDEz''@;'; put 'put ''Miw1MDEzMyw1MDEzNCw1MDEzNSw1MDEzOCw1MDEzOSw1MDE0MSw1MDE0Miw1MDE0NSw1MDE0Nyw1MDE0OCw1MDE0OSw1MDE1MCw1MDE1MSw1MDE1NCw1MDE1NSw1MDE1Niw1MDE1OCw1MDE1OSw1MDE2MCw1MDE2MSw1MDE2Miw1MDE2Myw1MDE2Niw1MDE2Nyw1MDE2OSw1MDE3MCw1MDE3MSw1''@;'; put 'put ''MDE3Miw1MDE3Myw1MDE3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDE3NSw1MDE3Niw1MDE3Nyw1MDE3OCw1MDE3OSw1MDE4MCw1MDE4MSw1MDE4Miw1MDE4Myw1MDE4NSw1MDE4Niw1MDE4Nyw1MDE4OCw1MDE4OSw1MDE5MCw1MDE5MSw1MDE5Myw1MDE5NCw1MDE5NSw1MDE5''@;'; put 'put ''Niw1MDE5Nyw1MDE5OCw1MDE5OSw1MDIwMCw1MDIwMSw1MDIwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDIwMyw1MDIwNCw1MDIwNSw1MDIwNiw1MDIwNyw1MDIwOCw1MDIwOSw1MDIxMCw1MDIxMSw1MDIxMyw1MDIxNCw1MDIxNSw1MDIxNiw1MDIxNyw1MDIxOCw1MDIxOSw1''@;'; put 'put ''MDIyMSw1MDIyMiw1MDIyMyw1MDIyNSw1MDIyNiw1MDIyNyw1MDIyOSw1MDIzMCw1MDIzMSw1MDIzMiw1MDIzMyw1MDIzNCw1MDIzNSw1MDIzOCw1MDIzOSw1MDI0MCw1MDI0MSw1MDI0Miw1MDI0Myw1MDI0NCw1MDI0NSw1MDI0Niw1MDI0Nyw1MDI0OSw1MDI1MCw1MDI1MSw1MDI1Miw1MDI1''@;'; put 'put ''Myw1MDI1NCw1MDI1NSw1MDI1Niw1MDI1Nyw1MDI1OCw1MDI1OSw1MDI2MCw1MDI2MSw1MDI2Miw1MDI2Myw1MDI2NCw1MDI2NSw1MDI2Niw1MDI2Nyw1MDI2OCw1MDI2OSw1MDI3MCw1MDI3MSw1MDI3Miw1MDI3Myw1MDI3NCw1MDI3NSw1MDI3OCw1MDI3OSw1MDI4MSw1MDI4Miw1MDI4Myw1''@;'; put 'put ''MDI4NSw1MDI4Niw1MDI4Nyw1MDI4OCw1MDI4OSw1MDI5MCw1MDI5MSw1MDI5NCw1MDI5NSw1MDI5Niw1MDI5OCw1MDI5OSw1MDMwMCw1MDMwMSw1MDMwMiw1MDMwMyw1MDMwNSw1MDMwNiw1MDMwNyw1MDMwOCw1MDMwOSw1MDMxMCw1MDMxMSw1MDMxMiw1MDMxMyw1MDMxNCw1MDMxNSw1MDMx''@;'; put 'put ''Niw1MDMxNyw1MDMxOCw1MDMxOSw1MDMyMCw1MDMyMSw1MDMyMiw1MDMyMyw1MDMyNSw1MDMyNiw1MDMyNyw1MDMyOCw1MDMyOSw1MDMzMCw1MDMzMSw1MDMzMyw1MDMzNCw1MDMzNSw1MDMzNiw1MDMzNyw1MDMzOCw1MDMzOSw1MDM0MCw1MDM0MSw1MDM0Miw1MDM0Myw1MDM0NCw1MDM0NSw1''@;'; put 'put ''MDM0Niw1MDM0Nyw1MDM0OCw1MDM0OSw1MDM1MCw1MDM1MSw1MDM1Miw1MDM1Myw1MDM1NCw1MDM1NSw1MDM1Niw1MDM1Nyw1MDM1OCw1MDM1OSw1MDM2MSw1MDM2Miw1MDM2Myw1MDM2NSw1MDM2Niw1MDM2Nyw1MDM2OCw1MDM2OSw1MDM3MCw1MDM3MSw1MDM3Miw1MDM3MyxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1MDM3NCw1MDM3NSw1MDM3Niw1MDM3Nyw1MDM3OCw1MDM3OSw1MDM4MCw1MDM4MSw1MDM4Miw1MDM4Myw1MDM4NCw1MDM4NSw1MDM4Niw1MDM4Nyw1MDM4OCw1MDM4OSw1MDM5MCw1MDM5MSw1MDM5Miw1MDM5Myw1MDM5NCw1MDM5NSw1MDM5Niw1MDM5Nyw1''@;'; put 'put ''MDM5OCw1MDM5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDQwMCw1MDQwMSw1MDQwMiw1MDQwMyw1MDQwNCw1MDQwNSw1MDQwNiw1MDQwNyw1MDQwOCw1MDQxMCw1MDQxMSw1MDQxMiw1MDQxMyw1MDQxNCw1MDQxNSw1MDQxOCw1MDQxOSw1MDQyMSw1MDQyMiw1MDQyMyw1MDQy''@;'; put 'put ''NSw1MDQyNyw1MDQyOCw1MDQyOSw1MDQzMCw1MDQzNCw1MDQzNSw1MDQzNiw1MDQzNyw1MDQzOCw1MDQzOSw1MDQ0MCw1MDQ0MSw1MDQ0Miw1MDQ0Myw1MDQ0NSw1MDQ0Niw1MDQ0Nyw1MDQ0OSw1MDQ1MCw1MDQ1MSw1MDQ1Myw1MDQ1NCw1MDQ1NSw1MDQ1Niw1MDQ1Nyw1MDQ1OCw1MDQ1OSw1''@;'; put 'put ''MDQ2MSw1MDQ2Miw1MDQ2Myw1MDQ2NCw1MDQ2NSw1MDQ2Niw1MDQ2Nyw1MDQ2OCw1MDQ2OSw1MDQ3MCw1MDQ3MSw1MDQ3NCw1MDQ3NSw1MDQ3Nyw1MDQ3OCw1MDQ3OSw1MDQ4MSw1MDQ4Miw1MDQ4Myw1MDQ4NCw1MDQ4NSw1MDQ4Niw1MDQ4Nyw1MDQ5MCw1MDQ5Miw1MDQ5NCw1MDQ5NSw1MDQ5''@;'; put 'put ''Niw1MDQ5Nyw1MDQ5OCw1MDQ5OSw1MDUwMiw1MDUwMyw1MDUwNyw1MDUxMSw1MDUxMiw1MDUxMyw1MDUxNCw1MDUxOCw1MDUyMiw1MDUyMyw1MDUyNCw1MDUyNyw1MDUzMCw1MDUzMSw1MDUzMyw1MDUzNCw1MDUzNSw1MDUzNyw1MDUzOCw1MDUzOSw1MDU0MCw1MDU0MSw1MDU0Miw1MDU0Myw1''@;'; put 'put ''MDU0Niw1MDU1MCw1MDU1MSw1MDU1Miw1MDU1Myw1MDU1NCw1MDU1NSw1MDU1OCw1MDU1OSw1MDU2MSw1MDU2Miw1MDU2Myw1MDU2NSw1MDU2Niw1MDU2OCw1MDU2OSw1MDU3MCw1MDU3MSw1MDU3NCw1MDU3Niw1MDU3OCw1MDU3OSw1MDU4MCw1MDU4Miw1MDU4NSw1MDU4Niw1MDU4Nyw1MDU4''@;'; put 'put ''OSw1MDU5MCw1MDU5MSw1MDU5Myw1MDU5NCw1MDU5NSw1MDU5Niw1MDU5Nyw1MDU5OCw1MDU5OSw1MDYwMCw1MDYwMiw1MDYwMyw1MDYwNCw1MDYwNSw1MDYwNiw1MDYwNyw1MDYwOCw1MDYwOSw1MDYxMCw1MDYxMSw1MDYxNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDYxNSw1''@;'; put 'put ''MDYxOCw1MDYyMyw1MDYyNCw1MDYyNSw1MDYyNiw1MDYyNyw1MDYzNSw1MDYzNyw1MDYzOSw1MDY0Miw1MDY0Myw1MDY0NSw1MDY0Niw1MDY0Nyw1MDY0OSw1MDY1MCw1MDY1MSw1MDY1Miw1MDY1Myw1MDY1NCw1MDY1NSw1MDY1OCw1MDY2MCw1MDY2Miw1MDY2MyxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw1MDY2NCw1MDY2NSw1MDY2Niw1MDY2Nyw1MDY3MSw1MDY3Myw1MDY3NCw1MDY3NSw1MDY3Nyw1MDY4MCw1MDY4MSw1MDY4Miw1MDY4Myw1MDY5MCw1MDY5MSw1MDY5Miw1MDY5Nyw1MDY5OCw1MDY5OSw1MDcwMSw1MDcwMiw1MDcwMyw1MDcwNSw1MDcwNiw1MDcwNyw1''@;'; put 'put ''MDcwOCw1MDcwOSw1MDcxMCw1MDcxMSw1MDcxNCw1MDcxNyw1MDcxOCw1MDcxOSw1MDcyMCw1MDcyMSw1MDcyMiw1MDcyMyw1MDcyNiw1MDcyNyw1MDcyOSw1MDczMCw1MDczMSw1MDczNSw1MDczNyw1MDczOCw1MDc0Miw1MDc0NCw1MDc0Niw1MDc0OCw1MDc0OSw1MDc1MCw1MDc1MSw1MDc1''@;'; put 'put ''NCw1MDc1NSw1MDc1Nyw1MDc1OCw1MDc1OSw1MDc2MSw1MDc2Miw1MDc2Myw1MDc2NCw1MDc2NSw1MDc2Niw1MDc2Nyw1MDc3MCw1MDc3NCw1MDc3NSw1MDc3Niw1MDc3Nyw1MDc3OCw1MDc3OSw1MDc4Miw1MDc4Myw1MDc4NSw1MDc4Niw1MDc4Nyw1MDc4OCw1MDc4OSw1MDc5MCw1MDc5MSw1''@;'; put 'put ''MDc5Miw1MDc5Myw1MDc5NCw1MDc5NSw1MDc5Nyw1MDc5OCw1MDgwMCw1MDgwMiw1MDgwMyw1MDgwNCw1MDgwNSw1MDgwNiw1MDgwNyw1MDgxMCw1MDgxMSw1MDgxMyw1MDgxNCw1MDgxNSw1MDgxNyw1MDgxOCw1MDgxOSw1MDgyMCw1MDgyMSw1MDgyMiw1MDgyMyw1MDgyNiw1MDgyOCw1MDgz''@;'; put 'put ''MCw1MDgzMSw1MDgzMiw1MDgzMyw1MDgzNCw1MDgzNSw1MDgzOCw1MDgzOSw1MDg0MSw1MDg0Miw1MDg0Myw1MDg0NSw1MDg0Niw1MDg0Nyw1MDg0OCw1MDg0OSw1MDg1MCw1MDg1MSw1MDg1NCw1MDg1Niw1MDg1OCw1MDg1OSw1MDg2MCw1MDg2MSw1MDg2Miw1MDg2Myw1MDg2Niw1MDg2Nyw1''@;'; put 'put ''MDg2OSw1MDg3MCw1MDg3MSw1MDg3NSw1MDg3Niw1MDg3Nyw1MDg3OCw1MDg3OSw1MDg4Miw1MDg4NCw1MDg4Niw1MDg4Nyw1MDg4OCw1MDg4OSw1MDg5MCw1MDg5MSw1MDg5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDg5NSw1MDg5Nyw1MDg5OCw1MDg5OSw1MDkwMSw1MDkw''@;'; put 'put ''Miw1MDkwMyw1MDkwNCw1MDkwNSw1MDkwNiw1MDkwNyw1MDkxMCw1MDkxMSw1MDkxNCw1MDkxNSw1MDkxNiw1MDkxNyw1MDkxOCw1MDkxOSw1MDkyMiw1MDkyMyw1MDkyNSw1MDkyNiw1MDkyNyw1MDkyOSw1MDkzMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDkzMSw1MDkzMiw1''@;'; put 'put ''MDkzMyw1MDkzNCw1MDkzNSw1MDkzOCw1MDkzOSw1MDk0MCw1MDk0Miw1MDk0Myw1MDk0NCw1MDk0NSw1MDk0Niw1MDk0Nyw1MDk1MCw1MDk1MSw1MDk1Myw1MDk1NCw1MDk1NSw1MDk1Nyw1MDk1OCw1MDk1OSw1MDk2MCw1MDk2MSw1MDk2Miw1MDk2Myw1MDk2Niw1MDk2OCw1MDk3MCw1MDk3''@;'; put 'put ''MSw1MDk3Miw1MDk3Myw1MDk3NCw1MDk3NSw1MDk3OCw1MDk3OSw1MDk4MSw1MDk4Miw1MDk4Myw1MDk4NSw1MDk4Niw1MDk4Nyw1MDk4OCw1MDk4OSw1MDk5MCw1MDk5MSw1MDk5NCw1MDk5Niw1MDk5OCw1MWUzLDUxMDAxLDUxMDAyLDUxMDAzLDUxMDA2LDUxMDA3LDUxMDA5LDUxMDEwLDUx''@;'; put 'put ''MDExLDUxMDEzLDUxMDE0LDUxMDE1LDUxMDE2LDUxMDE3LDUxMDE5LDUxMDIyLDUxMDI0LDUxMDMzLDUxMDM0LDUxMDM1LDUxMDM3LDUxMDM4LDUxMDM5LDUxMDQxLDUxMDQyLDUxMDQzLDUxMDQ0LDUxMDQ1LDUxMDQ2LDUxMDQ3LDUxMDQ5LDUxMDUwLDUxMDUyLDUxMDUzLDUxMDU0LDUxMDU1''@;'; put 'put ''LDUxMDU2LDUxMDU3LDUxMDU4LDUxMDU5LDUxMDYyLDUxMDYzLDUxMDY1LDUxMDY2LDUxMDY3LDUxMDcxLDUxMDcyLDUxMDczLDUxMDc0LDUxMDc4LDUxMDgzLDUxMDg0LDUxMDg1LDUxMDg3LDUxMDkwLDUxMDkxLDUxMDkzLDUxMDk3LDUxMDk5LDUxMTAwLDUxMTAxLDUxMTAyLDUxMTAzLDUx''@;'; put 'put ''MTA2LDUxMTExLDUxMTEyLDUxMTEzLDUxMTE0LDUxMTE1LDUxMTE4LDUxMTE5LDUxMTIxLDUxMTIyLDUxMTIzLDUxMTI1LDUxMTI2LDUxMTI3LDUxMTI4LDUxMTI5LDUxMTMwLDUxMTMxLDUxMTM0LDUxMTM4LDUxMTM5LDUxMTQwLDUxMTQxLDUxMTQyLDUxMTQzLDUxMTQ2LDUxMTQ3LDUxMTQ5''@;'; put 'put ''LDUxMTUxLDUxMTUzLDUxMTU0LDUxMTU1LDUxMTU2LDUxMTU3LDUxMTU4LDUxMTU5LDUxMTYxLDUxMTYyLDUxMTYzLDUxMTY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTY2LDUxMTY3LDUxMTY4LDUxMTY5LDUxMTcwLDUxMTcxLDUxMTczLDUxMTc0LDUxMTc1LDUxMTc3LDUx''@;'; put 'put ''MTc4LDUxMTc5LDUxMTgxLDUxMTgyLDUxMTgzLDUxMTg0LDUxMTg1LDUxMTg2LDUxMTg3LDUxMTg4LDUxMTg5LDUxMTkwLDUxMTkxLDUxMTkyLDUxMTkzLDUxMTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTk1LDUxMTk2LDUxMTk3LDUxMTk4LDUxMTk5LDUxMjAyLDUxMjAz''@;'; put 'put ''LDUxMjA1LDUxMjA2LDUxMjA3LDUxMjA5LDUxMjExLDUxMjEyLDUxMjEzLDUxMjE0LDUxMjE1LDUxMjE4LDUxMjIwLDUxMjIzLDUxMjI0LDUxMjI1LDUxMjI2LDUxMjI3LDUxMjMwLDUxMjMxLDUxMjMzLDUxMjM0LDUxMjM1LDUxMjM3LDUxMjM4LDUxMjM5LDUxMjQwLDUxMjQxLDUxMjQyLDUx''@;'; put 'put ''MjQzLDUxMjQ2LDUxMjQ4LDUxMjUwLDUxMjUxLDUxMjUyLDUxMjUzLDUxMjU0LDUxMjU1LDUxMjU3LDUxMjU4LDUxMjU5LDUxMjYxLDUxMjYyLDUxMjYzLDUxMjY1LDUxMjY2LDUxMjY3LDUxMjY4LDUxMjY5LDUxMjcwLDUxMjcxLDUxMjc0LDUxMjc1LDUxMjc4LDUxMjc5LDUxMjgwLDUxMjgx''@;'; put 'put ''LDUxMjgyLDUxMjgzLDUxMjg1LDUxMjg2LDUxMjg3LDUxMjg4LDUxMjg5LDUxMjkwLDUxMjkxLDUxMjkyLDUxMjkzLDUxMjk0LDUxMjk1LDUxMjk2LDUxMjk3LDUxMjk4LDUxMjk5LDUxMzAwLDUxMzAxLDUxMzAyLDUxMzAzLDUxMzA0LDUxMzA1LDUxMzA2LDUxMzA3LDUxMzA4LDUxMzA5LDUx''@;'; put 'put ''MzEwLDUxMzExLDUxMzE0LDUxMzE1LDUxMzE3LDUxMzE4LDUxMzE5LDUxMzIxLDUxMzIzLDUxMzI0LDUxMzI1LDUxMzI2LDUxMzI3LDUxMzMwLDUxMzMyLDUxMzM2LDUxMzM3LDUxMzM4LDUxMzQyLDUxMzQzLDUxMzQ0LDUxMzQ1LDUxMzQ2LDUxMzQ3LDUxMzQ5LDUxMzUwLDUxMzUxLDUxMzUy''@;'; put 'put ''LDUxMzUzLDUxMzU0LDUxMzU1LDUxMzU2LDUxMzU4LDUxMzYwLDUxMzYyLDUxMzYzLDUxMzY0LDUxMzY1LDUxMzY2LDUxMzY3LDUxMzY5LDUxMzcwLDUxMzcxLDUxMzcyLDUxMzczLDUxMzc0LDUxMzc1LDUxMzc2LDUxMzc3LDUxMzc4LDUxMzc5LDUxMzgwLDUxMzgxLDUxMzgyLDUxMzgzLDUx''@;'; put 'put ''Mzg0LDUxMzg1LDUxMzg2LDUxMzg3LDUxMzkwLDUxMzkxLDUxMzkyLDUxMzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMzk0LDUxMzk1LDUxMzk3LDUxMzk4LDUxMzk5LDUxNDAxLDUxNDAyLDUxNDAzLDUxNDA1LDUxNDA2LDUxNDA3LDUxNDA4LDUxNDA5LDUxNDEwLDUxNDEx''@;'; put 'put ''LDUxNDE0LDUxNDE2LDUxNDE4LDUxNDE5LDUxNDIwLDUxNDIxLDUxNDIyLDUxNDIzLDUxNDI2LDUxNDI3LDUxNDI5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNDMwLDUxNDMxLDUxNDMyLDUxNDMzLDUxNDM0LDUxNDM1LDUxNDM2LDUxNDM3LDUxNDM4LDUxNDM5LDUxNDQwLDUx''@;'; put 'put ''NDQxLDUxNDQyLDUxNDQzLDUxNDQ0LDUxNDQ2LDUxNDQ3LDUxNDQ4LDUxNDQ5LDUxNDUwLDUxNDUxLDUxNDU0LDUxNDU1LDUxNDU3LDUxNDU4LDUxNDU5LDUxNDYzLDUxNDY0LDUxNDY1LDUxNDY2LDUxNDY3LDUxNDcwLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw4MjI5LDgyMzAsMTY4LDEyMjkx''@;'; put 'put ''LDE3Myw4MjEzLDg3NDEsNjUzNDAsODc2NCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg4MDAsODgwNCw4ODA1LDg3MzQsODc1NiwxNzYsODI0Miw4''@;'; put 'put ''MjQzLDg0NTEsODQ5MSw2NTUwNCw2NTUwNSw2NTUwOSw5Nzk0LDk3OTIsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEsODc4NiwxNjcsODI1MSw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDg1OTQsODU5Miw4NTkz''@;'; put 'put ''LDg1OTUsODU5NiwxMjMwNyw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsODcxMiw4NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LDg3NDMsODc0NCw2NTUwNiw1MTQ3Miw1MTQ3NCw1MTQ3NSw1MTQ3Niw1MTQ3Nyw1MTQ3OCw1MTQ3OSw1MTQ4MSw1MTQ4''@;'; put 'put ''Miw1MTQ4Myw1MTQ4NCw1MTQ4NSw1MTQ4Niw1MTQ4Nyw1MTQ4OCw1MTQ4OSw1MTQ5MCw1MTQ5MSw1MTQ5Miw1MTQ5Myw1MTQ5NCw1MTQ5NSw1MTQ5Niw1MTQ5Nyw1MTQ5OCw1MTQ5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUwMSw1MTUwMiw1MTUwMyw1MTUwNCw1MTUwNSw1''@;'; put 'put ''MTUwNiw1MTUwNyw1MTUwOSw1MTUxMCw1MTUxMSw1MTUxMiw1MTUxMyw1MTUxNCw1MTUxNSw1MTUxNiw1MTUxNyw1MTUxOCw1MTUxOSw1MTUyMCw1MTUyMSw1MTUyMiw1MTUyMyw1MTUyNCw1MTUyNSw1MTUyNiw1MTUyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUyOCw1MTUy''@;'; put 'put ''OSw1MTUzMCw1MTUzMSw1MTUzMiw1MTUzMyw1MTUzNCw1MTUzNSw1MTUzOCw1MTUzOSw1MTU0MSw1MTU0Miw1MTU0Myw1MTU0NSw1MTU0Niw1MTU0Nyw1MTU0OCw1MTU0OSw1MTU1MCw1MTU1MSw1MTU1NCw1MTU1Niw1MTU1Nyw1MTU1OCw1MTU1OSw1MTU2MCw1MTU2MSw1MTU2Miw1MTU2Myw1''@;'; put 'put ''MTU2NSw1MTU2Niw1MTU2Nyw4NjU4LDg2NjAsODcwNCw4NzA3LDE4MCw2NTM3NCw3MTEsNzI4LDczMyw3MzAsNzI5LDE4NCw3MzEsMTYxLDE5MSw3MjAsODc1MCw4NzIxLDg3MTksMTY0LDg0NTcsODI0MCw5NjY1LDk2NjQsOTY1NSw5NjU0LDk4MjgsOTgyNCw5ODI1LDk4MjksOTgzMSw5ODI3''@;'; put 'put ''LDg4NTcsOTY3Miw5NjM1LDk2ODAsOTY4MSw5NjE4LDk2MzYsOTYzNyw5NjQwLDk2MzksOTYzOCw5NjQxLDk4MzIsOTc0Myw5NzQyLDk3NTYsOTc1OCwxODIsODIyNCw4MjI1LDg1OTcsODU5OSw4NjAxLDg1OTgsODYwMCw5ODM3LDk4MzMsOTgzNCw5ODM2LDEyOTI3LDEyODI4LDg0NzAsMTMy''@;'; put 'put ''NTUsODQ4MiwxMzI1MCwxMzI3Miw4NDgxLDgzNjQsMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTU2OSw1MTU3MCw1MTU3''@;'; put 'put ''MSw1MTU3Myw1MTU3NCw1MTU3NSw1MTU3Niw1MTU3Nyw1MTU3OCw1MTU3OSw1MTU4MSw1MTU4Miw1MTU4Myw1MTU4NCw1MTU4NSw1MTU4Niw1MTU4Nyw1MTU4OCw1MTU4OSw1MTU5MCw1MTU5MSw1MTU5NCw1MTU5NSw1MTU5Nyw1MTU5OCw1MTU5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw1MTYwMSw1MTYwMiw1MTYwMyw1MTYwNCw1MTYwNSw1MTYwNiw1MTYwNyw1MTYxMCw1MTYxMiw1MTYxNCw1MTYxNSw1MTYxNiw1MTYxNyw1MTYxOCw1MTYxOSw1MTYyMCw1MTYyMSw1MTYyMiw1MTYyMyw1MTYyNCw1MTYyNSw1MTYyNiw1MTYyNyw1MTYyOCw1MTYyOSw1MTYzMCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYzMSw1MTYzMiw1MTYzMyw1MTYzNCw1MTYzNSw1MTYzNiw1MTYzNyw1MTYzOCw1MTYzOSw1MTY0MCw1MTY0MSw1MTY0Miw1MTY0Myw1MTY0NCw1MTY0NSw1MTY0Niw1MTY0Nyw1MTY1MCw1MTY1MSw1MTY1Myw1MTY1NCw1MTY1Nyw1MTY1OSw1''@;'; put 'put ''MTY2MCw1MTY2MSw1MTY2Miw1MTY2Myw1MTY2Niw1MTY2OCw1MTY3MSw1MTY3Miw1MTY3NSw2NTI4MSw2NTI4Miw2NTI4Myw2NTI4NCw2NTI4NSw2NTI4Niw2NTI4Nyw2NTI4OCw2NTI4OSw2NTI5MCw2NTI5MSw2NTI5Miw2NTI5Myw2NTI5NCw2NTI5NSw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5''@;'; put 'put ''OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw2NTMwNiw2NTMwNyw2NTMwOCw2NTMwOSw2NTMxMCw2NTMxMSw2NTMxMiw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2''@;'; put 'put ''NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTMzOSw2NTUxMCw2NTM0MSw2NTM0Miw2NTM0Myw2NTM0NCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1''@;'; put 'put ''NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw2NTM3MSw2NTM3Miw2NTM3Myw2NTUwNyw1MTY3OCw1MTY3OSw1MTY4MSw1MTY4Myw1MTY4NSw1MTY4Niw1MTY4OCw1''@;'; put 'put ''MTY4OSw1MTY5MCw1MTY5MSw1MTY5NCw1MTY5OCw1MTY5OSw1MTcwMCw1MTcwMSw1MTcwMiw1MTcwMyw1MTcwNiw1MTcwNyw1MTcwOSw1MTcxMCw1MTcxMSw1MTcxMyw1MTcxNCw1MTcxNSw1MTcxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTcxNyw1MTcxOCw1MTcxOSw1MTcy''@;'; put 'put ''Miw1MTcyNiw1MTcyNyw1MTcyOCw1MTcyOSw1MTczMCw1MTczMSw1MTczMyw1MTczNCw1MTczNSw1MTczNyw1MTczOCw1MTczOSw1MTc0MCw1MTc0MSw1MTc0Miw1MTc0Myw1MTc0NCw1MTc0NSw1MTc0Niw1MTc0Nyw1MTc0OCw1MTc0OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1''@;'; put 'put ''MTc1MCw1MTc1MSw1MTc1Miw1MTc1NCw1MTc1NSw1MTc1Niw1MTc1Nyw1MTc1OCw1MTc1OSw1MTc2MCw1MTc2MSw1MTc2Miw1MTc2Myw1MTc2NCw1MTc2NSw1MTc2Niw1MTc2Nyw1MTc2OCw1MTc2OSw1MTc3MCw1MTc3MSw1MTc3Miw1MTc3Myw1MTc3NCw1MTc3NSw1MTc3Niw1MTc3Nyw1MTc3''@;'; put 'put ''OCw1MTc3OSw1MTc4MCw1MTc4MSw1MTc4MiwxMjU5MywxMjU5NCwxMjU5NSwxMjU5NiwxMjU5NywxMjU5OCwxMjU5OSwxMjYwMCwxMjYwMSwxMjYwMiwxMjYwMywxMjYwNCwxMjYwNSwxMjYwNiwxMjYwNywxMjYwOCwxMjYwOSwxMjYxMCwxMjYxMSwxMjYxMiwxMjYxMywxMjYxNCwxMjYxNSwx''@;'; put 'put ''MjYxNiwxMjYxNywxMjYxOCwxMjYxOSwxMjYyMCwxMjYyMSwxMjYyMiwxMjYyMywxMjYyNCwxMjYyNSwxMjYyNiwxMjYyNywxMjYyOCwxMjYyOSwxMjYzMCwxMjYzMSwxMjYzMiwxMjYzMywxMjYzNCwxMjYzNSwxMjYzNiwxMjYzNywxMjYzOCwxMjYzOSwxMjY0MCwxMjY0MSwxMjY0MiwxMjY0''@;'; put 'put ''MywxMjY0NCwxMjY0NSwxMjY0NiwxMjY0NywxMjY0OCwxMjY0OSwxMjY1MCwxMjY1MSwxMjY1MiwxMjY1MywxMjY1NCwxMjY1NSwxMjY1NiwxMjY1NywxMjY1OCwxMjY1OSwxMjY2MCwxMjY2MSwxMjY2MiwxMjY2MywxMjY2NCwxMjY2NSwxMjY2NiwxMjY2NywxMjY2OCwxMjY2OSwxMjY3MCwx''@;'; put 'put ''MjY3MSwxMjY3MiwxMjY3MywxMjY3NCwxMjY3NSwxMjY3NiwxMjY3NywxMjY3OCwxMjY3OSwxMjY4MCwxMjY4MSwxMjY4MiwxMjY4MywxMjY4NCwxMjY4NSwxMjY4Niw1MTc4Myw1MTc4NCw1MTc4NSw1MTc4Niw1MTc4Nyw1MTc5MCw1MTc5MSw1MTc5Myw1MTc5NCw1MTc5NSw1MTc5Nyw1MTc5''@;'; put 'put ''OCw1MTc5OSw1MTgwMCw1MTgwMSw1MTgwMiw1MTgwMyw1MTgwNiw1MTgxMCw1MTgxMSw1MTgxMiw1MTgxMyw1MTgxNCw1MTgxNSw1MTgxNyw1MTgxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTgxOSw1MTgyMCw1MTgyMSw1MTgyMiw1MTgyMyw1MTgyNCw1MTgyNSw1MTgyNiw1''@;'; put 'put ''MTgyNyw1MTgyOCw1MTgyOSw1MTgzMCw1MTgzMSw1MTgzMiw1MTgzMyw1MTgzNCw1MTgzNSw1MTgzNiw1MTgzOCw1MTgzOSw1MTg0MCw1MTg0MSw1MTg0Miw1MTg0Myw1MTg0NSw1MTg0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTg0Nyw1MTg0OCw1MTg0OSw1MTg1MCw1MTg1''@;'; put 'put ''MSw1MTg1Miw1MTg1Myw1MTg1NCw1MTg1NSw1MTg1Niw1MTg1Nyw1MTg1OCw1MTg1OSw1MTg2MCw1MTg2MSw1MTg2Miw1MTg2Myw1MTg2NSw1MTg2Niw1MTg2Nyw1MTg2OCw1MTg2OSw1MTg3MCw1MTg3MSw1MTg3Miw1MTg3Myw1MTg3NCw1MTg3NSw1MTg3Niw1MTg3Nyw1MTg3OCw1MTg3OSw4''@;'; put 'put ''NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkx''@;'; put 'put ''NCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUz''@;'; put 'put ''LDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODgwLDUxODgxLDUxODgyLDUxODgzLDUxODg0LDUxODg1LDUxODg2LDUxODg3LDUxODg4LDUxODg5LDUxODkwLDUxODkxLDUx''@;'; put 'put ''ODkyLDUxODkzLDUxODk0LDUxODk1LDUxODk2LDUxODk3LDUxODk4LDUxODk5LDUxOTAyLDUxOTAzLDUxOTA1LDUxOTA2LDUxOTA3LDUxOTA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTEwLDUxOTExLDUxOTEyLDUxOTEzLDUxOTE0LDUxOTE1LDUxOTE4LDUxOTIwLDUxOTIy''@;'; put 'put ''LDUxOTI0LDUxOTI1LDUxOTI2LDUxOTI3LDUxOTMwLDUxOTMxLDUxOTMyLDUxOTMzLDUxOTM0LDUxOTM1LDUxOTM3LDUxOTM4LDUxOTM5LDUxOTQwLDUxOTQxLDUxOTQyLDUxOTQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTQ0LDUxOTQ1LDUxOTQ2LDUxOTQ3LDUxOTQ5LDUx''@;'; put 'put ''OTUwLDUxOTUxLDUxOTUyLDUxOTUzLDUxOTU0LDUxOTU1LDUxOTU3LDUxOTU4LDUxOTU5LDUxOTYwLDUxOTYxLDUxOTYyLDUxOTYzLDUxOTY0LDUxOTY1LDUxOTY2LDUxOTY3LDUxOTY4LDUxOTY5LDUxOTcwLDUxOTcxLDUxOTcyLDUxOTczLDUxOTc0LDUxOTc1LDUxOTc3LDUxOTc4LDk0NzIs''@;'; put 'put ''OTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCw5NDkwLDk0ODks''@;'; put 'put ''OTQ5OCw5NDk3LDk0OTQsOTQ5Myw5NDg2LDk0ODUsOTUwMiw5NTAzLDk1MDUsOTUwNiw5NTEwLDk1MTEsOTUxMyw5NTE0LDk1MTcsOTUxOCw5NTIxLDk1MjIsOTUyNSw5NTI2LDk1MjksOTUzMCw5NTMzLDk1MzQsOTUzNiw5NTM3LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUs''@;'; put 'put ''OTU0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5NzksNTE5ODAsNTE5ODEsNTE5ODIsNTE5ODMs''@;'; put 'put ''NTE5ODUsNTE5ODYsNTE5ODcsNTE5ODksNTE5OTAsNTE5OTEsNTE5OTMsNTE5OTQsNTE5OTUsNTE5OTYsNTE5OTcsNTE5OTgsNTE5OTksNTIwMDIsNTIwMDMsNTIwMDQsNTIwMDUsNTIwMDYsNTIwMDcsNTIwMDgsNTIwMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMTAsNTIw''@;'; put 'put ''MTEsNTIwMTIsNTIwMTMsNTIwMTQsNTIwMTUsNTIwMTYsNTIwMTcsNTIwMTgsNTIwMTksNTIwMjAsNTIwMjEsNTIwMjIsNTIwMjMsNTIwMjQsNTIwMjUsNTIwMjYsNTIwMjcsNTIwMjgsNTIwMjksNTIwMzAsNTIwMzEsNTIwMzIsNTIwMzQsNTIwMzUsNTIwMzYsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNTIwMzcsNTIwMzgsNTIwMzksNTIwNDIsNTIwNDMsNTIwNDUsNTIwNDYsNTIwNDcsNTIwNDksNTIwNTAsNTIwNTEsNTIwNTIsNTIwNTMsNTIwNTQsNTIwNTUsNTIwNTgsNTIwNTksNTIwNjAsNTIwNjIsNTIwNjMsNTIwNjQsNTIwNjUsNTIwNjYsNTIwNjcsNTIwNjksNTIw''@;'; put 'put ''NzAsNTIwNzEsNTIwNzIsNTIwNzMsNTIwNzQsNTIwNzUsNTIwNzYsMTMyMDUsMTMyMDYsMTMyMDcsODQ2NywxMzIwOCwxMzI1MiwxMzIxOSwxMzIyMCwxMzIyMSwxMzIyMiwxMzIwOSwxMzIxMCwxMzIxMSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNSwxMzIxNiwxMzIxNywxMzIxOCwxMzI1OCwx''@;'; put 'put ''MzE5NywxMzE5OCwxMzE5OSwxMzI2MywxMzE5MiwxMzE5MywxMzI1NiwxMzIyMywxMzIyNCwxMzIzMiwxMzIzMywxMzIzNCwxMzIzNSwxMzIzNiwxMzIzNywxMzIzOCwxMzIzOSwxMzI0MCwxMzI0MSwxMzE4NCwxMzE4NSwxMzE4NiwxMzE4NywxMzE4OCwxMzI0MiwxMzI0MywxMzI0NCwxMzI0''@;'; put 'put ''NSwxMzI0NiwxMzI0NywxMzIwMCwxMzIwMSwxMzIwMiwxMzIwMywxMzIwNCw4NDg2LDEzMjQ4LDEzMjQ5LDEzMTk0LDEzMTk1LDEzMTk2LDEzMjcwLDEzMjUzLDEzMjI5LDEzMjMwLDEzMjMxLDEzMjc1LDEzMjI1LDEzMjI2LDEzMjI3LDEzMjI4LDEzMjc3LDEzMjY0LDEzMjY3LDEzMjUxLDEz''@;'; put 'put ''MjU3LDEzMjc2LDEzMjU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDc3LDUyMDc4LDUyMDc5LDUyMDgwLDUyMDgxLDUyMDgyLDUyMDgzLDUyMDg0LDUyMDg1LDUyMDg2LDUyMDg3LDUyMDkwLDUy''@;'; put 'put ''MDkxLDUyMDkyLDUyMDkzLDUyMDk0LDUyMDk1LDUyMDk2LDUyMDk3LDUyMDk4LDUyMDk5LDUyMTAwLDUyMTAxLDUyMTAyLDUyMTAzLDUyMTA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTA1LDUyMTA2LDUyMTA3LDUyMTA4LDUyMTA5LDUyMTEwLDUyMTExLDUyMTEyLDUyMTEz''@;'; put 'put ''LDUyMTE0LDUyMTE1LDUyMTE2LDUyMTE3LDUyMTE4LDUyMTE5LDUyMTIwLDUyMTIxLDUyMTIyLDUyMTIzLDUyMTI1LDUyMTI2LDUyMTI3LDUyMTI4LDUyMTI5LDUyMTMwLDUyMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTMyLDUyMTMzLDUyMTM0LDUyMTM1LDUyMTM2LDUy''@;'; put 'put ''MTM3LDUyMTM4LDUyMTM5LDUyMTQwLDUyMTQxLDUyMTQyLDUyMTQzLDUyMTQ0LDUyMTQ1LDUyMTQ2LDUyMTQ3LDUyMTQ4LDUyMTQ5LDUyMTUwLDUyMTUxLDUyMTUzLDUyMTU0LDUyMTU1LDUyMTU2LDUyMTU3LDUyMTU4LDUyMTU5LDUyMTYwLDUyMTYxLDUyMTYyLDUyMTYzLDUyMTY0LDE5OCwy''@;'; put 'put ''MDgsMTcwLDI5NCxudWxsLDMwNixudWxsLDMxOSwzMjEsMjE2LDMzOCwxODYsMjIyLDM1OCwzMzAsbnVsbCwxMjg5NiwxMjg5NywxMjg5OCwxMjg5OSwxMjkwMCwxMjkwMSwxMjkwMiwxMjkwMywxMjkwNCwxMjkwNSwxMjkwNiwxMjkwNywxMjkwOCwxMjkwOSwxMjkxMCwxMjkxMSwxMjkxMiwx''@;'; put 'put ''MjkxMywxMjkxNCwxMjkxNSwxMjkxNiwxMjkxNywxMjkxOCwxMjkxOSwxMjkyMCwxMjkyMSwxMjkyMiwxMjkyMyw5NDI0LDk0MjUsOTQyNiw5NDI3LDk0MjgsOTQyOSw5NDMwLDk0MzEsOTQzMiw5NDMzLDk0MzQsOTQzNSw5NDM2LDk0MzcsOTQzOCw5NDM5LDk0NDAsOTQ0MSw5NDQyLDk0NDMs''@;'; put 'put ''OTQ0NCw5NDQ1LDk0NDYsOTQ0Nyw5NDQ4LDk0NDksOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsMTg5LDg1MzEsODUzMiwxODgsMTkwLDg1MzksODU0MCw4NTQxLDg1NDIsNTIxNjUsNTIxNjYsNTIxNjcs''@;'; put 'put ''NTIxNjgsNTIxNjksNTIxNzAsNTIxNzEsNTIxNzIsNTIxNzMsNTIxNzQsNTIxNzUsNTIxNzYsNTIxNzcsNTIxNzgsNTIxNzksNTIxODEsNTIxODIsNTIxODMsNTIxODQsNTIxODUsNTIxODYsNTIxODcsNTIxODgsNTIxODksNTIxOTAsNTIxOTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNTIxOTIsNTIxOTMsNTIxOTQsNTIxOTUsNTIxOTcsNTIxOTgsNTIyMDAsNTIyMDIsNTIyMDMsNTIyMDQsNTIyMDUsNTIyMDYsNTIyMDcsNTIyMDgsNTIyMDksNTIyMTAsNTIyMTEsNTIyMTIsNTIyMTMsNTIyMTQsNTIyMTUsNTIyMTYsNTIyMTcsNTIyMTgsNTIyMTksNTIyMjAsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIyMjEsNTIyMjIsNTIyMjMsNTIyMjQsNTIyMjUsNTIyMjYsNTIyMjcsNTIyMjgsNTIyMjksNTIyMzAsNTIyMzEsNTIyMzIsNTIyMzMsNTIyMzQsNTIyMzUsNTIyMzgsNTIyMzksNTIyNDEsNTIyNDIsNTIyNDMsNTIyNDUsNTIyNDYsNTIyNDcsNTIy''@;'; put 'put ''NDgsNTIyNDksNTIyNTAsNTIyNTEsNTIyNTQsNTIyNTUsNTIyNTYsNTIyNTksNTIyNjAsMjMwLDI3MywyNDAsMjk1LDMwNSwzMDcsMzEyLDMyMCwzMjIsMjQ4LDMzOSwyMjMsMjU0LDM1OSwzMzEsMzI5LDEyODAwLDEyODAxLDEyODAyLDEyODAzLDEyODA0LDEyODA1LDEyODA2LDEyODA3LDEy''@;'; put 'put ''ODA4LDEyODA5LDEyODEwLDEyODExLDEyODEyLDEyODEzLDEyODE0LDEyODE1LDEyODE2LDEyODE3LDEyODE4LDEyODE5LDEyODIwLDEyODIxLDEyODIyLDEyODIzLDEyODI0LDEyODI1LDEyODI2LDEyODI3LDkzNzIsOTM3Myw5Mzc0LDkzNzUsOTM3Niw5Mzc3LDkzNzgsOTM3OSw5MzgwLDkz''@;'; put 'put ''ODEsOTM4Miw5MzgzLDkzODQsOTM4NSw5Mzg2LDkzODcsOTM4OCw5Mzg5LDkzOTAsOTM5MSw5MzkyLDkzOTMsOTM5NCw5Mzk1LDkzOTYsOTM5Nyw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0NiwxODUsMTc4''@;'; put 'put ''LDE3OSw4MzA4LDgzMTksODMyMSw4MzIyLDgzMjMsODMyNCw1MjI2MSw1MjI2Miw1MjI2Niw1MjI2Nyw1MjI2OSw1MjI3MSw1MjI3Myw1MjI3NCw1MjI3NSw1MjI3Niw1MjI3Nyw1MjI3OCw1MjI3OSw1MjI4Miw1MjI4Nyw1MjI4OCw1MjI4OSw1MjI5MCw1MjI5MSw1MjI5NCw1MjI5NSw1MjI5''@;'; put 'put ''Nyw1MjI5OCw1MjI5OSw1MjMwMSw1MjMwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMwMyw1MjMwNCw1MjMwNSw1MjMwNiw1MjMwNyw1MjMxMCw1MjMxNCw1MjMxNSw1MjMxNiw1MjMxNyw1MjMxOCw1MjMxOSw1MjMyMSw1MjMyMiw1MjMyMyw1MjMyNSw1MjMyNyw1MjMyOSw1''@;'; put 'put ''MjMzMCw1MjMzMSw1MjMzMiw1MjMzMyw1MjMzNCw1MjMzNSw1MjMzNyw1MjMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMzOSw1MjM0MCw1MjM0Miw1MjM0Myw1MjM0NCw1MjM0NSw1MjM0Niw1MjM0Nyw1MjM0OCw1MjM0OSw1MjM1MCw1MjM1MSw1MjM1Miw1MjM1Myw1MjM1''@;'; put 'put ''NCw1MjM1NSw1MjM1Niw1MjM1Nyw1MjM1OCw1MjM1OSw1MjM2MCw1MjM2MSw1MjM2Miw1MjM2Myw1MjM2NCw1MjM2NSw1MjM2Niw1MjM2Nyw1MjM2OCw1MjM2OSw1MjM3MCw1MjM3MSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2Miwx''@;'; put 'put ''MjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5''@;'; put 'put ''MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywx''@;'; put 'put ''MjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIz''@;'; put 'put ''NzIsNTIzNzMsNTIzNzQsNTIzNzUsNTIzNzgsNTIzNzksNTIzODEsNTIzODIsNTIzODMsNTIzODUsNTIzODYsNTIzODcsNTIzODgsNTIzODksNTIzOTAsNTIzOTEsNTIzOTQsNTIzOTgsNTIzOTksNTI0MDAsNTI0MDEsNTI0MDIsNTI0MDMsNTI0MDYsNTI0MDcsNTI0MDksbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsNTI0MTAsNTI0MTEsNTI0MTMsNTI0MTQsNTI0MTUsNTI0MTYsNTI0MTcsNTI0MTgsNTI0MTksNTI0MjIsNTI0MjQsNTI0MjYsNTI0MjcsNTI0MjgsNTI0MjksNTI0MzAsNTI0MzEsNTI0MzMsNTI0MzQsNTI0MzUsNTI0MzcsNTI0MzgsNTI0MzksNTI0NDAsNTI0''@;'; put 'put ''NDEsNTI0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0NDMsNTI0NDQsNTI0NDUsNTI0NDYsNTI0NDcsNTI0NDgsNTI0NDksNTI0NTAsNTI0NTEsNTI0NTMsNTI0NTQsNTI0NTUsNTI0NTYsNTI0NTcsNTI0NTgsNTI0NTksNTI0NjEsNTI0NjIsNTI0NjMsNTI0NjUsNTI0NjYs''@;'; put 'put ''NTI0NjcsNTI0NjgsNTI0NjksNTI0NzAsNTI0NzEsNTI0NzIsNTI0NzMsNTI0NzQsNTI0NzUsNTI0NzYsNTI0NzcsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0''@;'; put 'put ''NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIs''@;'; put 'put ''MTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1''@;'; put 'put ''MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDc4LDUyNDc5LDUyNDgwLDUyNDgyLDUyNDgzLDUyNDg0LDUy''@;'; put 'put ''NDg1LDUyNDg2LDUyNDg3LDUyNDkwLDUyNDkxLDUyNDkzLDUyNDk0LDUyNDk1LDUyNDk3LDUyNDk4LDUyNDk5LDUyNTAwLDUyNTAxLDUyNTAyLDUyNTAzLDUyNTA2LDUyNTA4LDUyNTEwLDUyNTExLDUyNTEyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTEzLDUyNTE0LDUyNTE1''@;'; put 'put ''LDUyNTE3LDUyNTE4LDUyNTE5LDUyNTIxLDUyNTIyLDUyNTIzLDUyNTI1LDUyNTI2LDUyNTI3LDUyNTI4LDUyNTI5LDUyNTMwLDUyNTMxLDUyNTMyLDUyNTMzLDUyNTM0LDUyNTM1LDUyNTM2LDUyNTM4LDUyNTM5LDUyNTQwLDUyNTQxLDUyNTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDUyNTQzLDUyNTQ0LDUyNTQ1LDUyNTQ2LDUyNTQ3LDUyNTQ4LDUyNTQ5LDUyNTUwLDUyNTUxLDUyNTUyLDUyNTUzLDUyNTU0LDUyNTU1LDUyNTU2LDUyNTU3LDUyNTU4LDUyNTU5LDUyNTYwLDUyNTYxLDUyNTYyLDUyNTYzLDUyNTY0LDUyNTY1LDUyNTY2LDUyNTY3LDUyNTY4LDUyNTY5''@;'; put 'put ''LDUyNTcwLDUyNTcxLDUyNTczLDUyNTc0LDUyNTc1LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1''@;'; put 'put ''LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgy''@;'; put 'put ''LDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNTI1NzcsNTI1NzgsNTI1NzksNTI1ODEsNTI1ODIsNTI1ODMsNTI1ODQsNTI1ODUsNTI1ODYsNTI1ODcsNTI1OTAsNTI1OTIsNTI1OTQsNTI1OTUsNTI1OTYsNTI1OTcsNTI1OTgsNTI1OTksNTI2MDEsNTI2MDIsNTI2MDMsNTI2MDQsNTI2MDUsNTI2MDYsNTI2MDcsNTI2MDgsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2MDksNTI2MTAsNTI2MTEsNTI2MTIsNTI2MTMsNTI2MTQsNTI2MTUsNTI2MTcsNTI2MTgsNTI2MTksNTI2MjAsNTI2MjEsNTI2MjIsNTI2MjMsNTI2MjQsNTI2MjUsNTI2MjYsNTI2MjcsNTI2MzAsNTI2MzEsNTI2MzMsNTI2MzQsNTI2MzUs''@;'; put 'put ''NTI2MzcsNTI2MzgsNTI2MzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2NDAsNTI2NDEsNTI2NDIsNTI2NDMsNTI2NDYsNTI2NDgsNTI2NTAsNTI2NTEsNTI2NTIsNTI2NTMsNTI2NTQsNTI2NTUsNTI2NTcsNTI2NTgsNTI2NTksNTI2NjAsNTI2NjEsNTI2NjIsNTI2NjMsNTI2''@;'; put 'put ''NjQsNTI2NjUsNTI2NjYsNTI2NjcsNTI2NjgsNTI2NjksNTI2NzAsNTI2NzEsNTI2NzIsNTI2NzMsNTI2NzQsNTI2NzUsNTI2NzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjY3OCw1MjY3OSw1MjY4MCw1MjY4MSw1MjY4Miw1MjY4Myw1MjY4NSw1MjY4Niw1MjY4Nyw1MjY4OSw1MjY5MCw1MjY5MSw1MjY5Miw1MjY5Myw1MjY5NCw1MjY5NSw1MjY5Niw1MjY5Nyw1MjY5OCw1''@;'; put 'put ''MjY5OSw1MjcwMCw1MjcwMSw1MjcwMiw1MjcwMyw1MjcwNCw1MjcwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjcwNiw1MjcwNyw1MjcwOCw1MjcwOSw1MjcxMCw1MjcxMSw1MjcxMyw1MjcxNCw1MjcxNSw1MjcxNyw1MjcxOCw1MjcxOSw1MjcyMSw1MjcyMiw1MjcyMyw1Mjcy''@;'; put 'put ''NCw1MjcyNSw1MjcyNiw1MjcyNyw1MjczMCw1MjczMiw1MjczNCw1MjczNSw1MjczNiw1MjczNyw1MjczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjczOSw1Mjc0MSw1Mjc0Miw1Mjc0Myw1Mjc0NSw1Mjc0Niw1Mjc0Nyw1Mjc0OSw1Mjc1MCw1Mjc1MSw1Mjc1Miw1Mjc1Myw1''@;'; put 'put ''Mjc1NCw1Mjc1NSw1Mjc1Nyw1Mjc1OCw1Mjc1OSw1Mjc2MCw1Mjc2Miw1Mjc2Myw1Mjc2NCw1Mjc2NSw1Mjc2Niw1Mjc2Nyw1Mjc3MCw1Mjc3MSw1Mjc3Myw1Mjc3NCw1Mjc3NSw1Mjc3Nyw1Mjc3OCw1Mjc3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzgwLDUyNzgxLDUyNzgyLDUyNzgzLDUyNzg2LDUyNzg4LDUyNzkwLDUyNzkxLDUyNzkyLDUyNzkzLDUyNzk0LDUyNzk1''@;'; put 'put ''LDUyNzk2LDUyNzk3LDUyNzk4LDUyNzk5LDUyODAwLDUyODAxLDUyODAyLDUyODAzLDUyODA0LDUyODA1LDUyODA2LDUyODA3LDUyODA4LDUyODA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODEwLDUyODExLDUyODEyLDUyODEzLDUyODE0LDUyODE1LDUyODE2LDUyODE3LDUy''@;'; put 'put ''ODE4LDUyODE5LDUyODIwLDUyODIxLDUyODIyLDUyODIzLDUyODI2LDUyODI3LDUyODI5LDUyODMwLDUyODM0LDUyODM1LDUyODM2LDUyODM3LDUyODM4LDUyODM5LDUyODQyLDUyODQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODQ2LDUyODQ3LDUyODQ4LDUyODQ5LDUyODUw''@;'; put 'put ''LDUyODUxLDUyODU0LDUyODU1LDUyODU3LDUyODU4LDUyODU5LDUyODYxLDUyODYyLDUyODYzLDUyODY0LDUyODY1LDUyODY2LDUyODY3LDUyODcwLDUyODcyLDUyODc0LDUyODc1LDUyODc2LDUyODc3LDUyODc4LDUyODc5LDUyODgyLDUyODgzLDUyODg1LDUyODg2LDUyODg3LDUyODg5LG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4OTAsNTI4OTEsNTI4OTIsNTI4OTMsNTI4''@;'; put 'put ''OTQsNTI4OTUsNTI4OTgsNTI5MDIsNTI5MDMsNTI5MDQsNTI5MDUsNTI5MDYsNTI5MDcsNTI5MTAsNTI5MTEsNTI5MTIsNTI5MTMsNTI5MTQsNTI5MTUsNTI5MTYsNTI5MTcsNTI5MTgsNTI5MTksNTI5MjAsNTI5MjEsNTI5MjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5MjMs''@;'; put 'put ''NTI5MjQsNTI5MjUsNTI5MjYsNTI5MjcsNTI5MjgsNTI5MzAsNTI5MzEsNTI5MzIsNTI5MzMsNTI5MzQsNTI5MzUsNTI5MzYsNTI5MzcsNTI5MzgsNTI5MzksNTI5NDAsNTI5NDEsNTI5NDIsNTI5NDMsNTI5NDQsNTI5NDUsNTI5NDYsNTI5NDcsNTI5NDgsNTI5NDksbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsNTI5NTAsNTI5NTEsNTI5NTIsNTI5NTMsNTI5NTQsNTI5NTUsNTI5NTYsNTI5NTcsNTI5NTgsNTI5NTksNTI5NjAsNTI5NjEsNTI5NjIsNTI5NjMsNTI5NjYsNTI5NjcsNTI5NjksNTI5NzAsNTI5NzMsNTI5NzQsNTI5NzUsNTI5NzYsNTI5NzcsNTI5NzgsNTI5Nzks''@;'; put 'put ''NTI5ODIsNTI5ODYsNTI5ODcsNTI5ODgsNTI5ODksNTI5OTAsNTI5OTEsNDQwMzIsNDQwMzMsNDQwMzYsNDQwMzksNDQwNDAsNDQwNDEsNDQwNDIsNDQwNDgsNDQwNDksNDQwNTAsNDQwNTEsNDQwNTIsNDQwNTMsNDQwNTQsNDQwNTUsNDQwNTcsNDQwNTgsNDQwNTksNDQwNjAsNDQwNjEsNDQw''@;'; put 'put ''NjQsNDQwNjgsNDQwNzYsNDQwNzcsNDQwNzksNDQwODAsNDQwODEsNDQwODgsNDQwODksNDQwOTIsNDQwOTYsNDQxMDcsNDQxMDksNDQxMTYsNDQxMjAsNDQxMjQsNDQxNDQsNDQxNDUsNDQxNDgsNDQxNTEsNDQxNTIsNDQxNTQsNDQxNjAsNDQxNjEsNDQxNjMsNDQxNjQsNDQxNjUsNDQxNjYs''@;'; put 'put ''NDQxNjksNDQxNzAsNDQxNzEsNDQxNzIsNDQxNzYsNDQxODAsNDQxODgsNDQxODksNDQxOTEsNDQxOTIsNDQxOTMsNDQyMDAsNDQyMDEsNDQyMDIsNDQyMDQsNDQyMDcsNDQyMDgsNDQyMTYsNDQyMTcsNDQyMTksNDQyMjAsNDQyMjEsNDQyMjUsNDQyMjgsNDQyMzIsNDQyMzYsNDQyNDUsNDQy''@;'; put 'put ''NDcsNDQyNTYsNDQyNTcsNDQyNjAsNDQyNjMsNDQyNjQsNDQyNjYsNDQyNjgsNDQyNzEsNDQyNzIsNDQyNzMsNDQyNzUsNDQyNzcsNDQyNzgsNDQyODQsNDQyODUsNDQyODgsNDQyOTIsNDQyOTQsNTI5OTQsNTI5OTUsNTI5OTcsNTI5OTgsNTI5OTksNTMwMDEsNTMwMDIsNTMwMDMsNTMwMDQs''@;'; put 'put ''NTMwMDUsNTMwMDYsNTMwMDcsNTMwMTAsNTMwMTIsNTMwMTQsNTMwMTUsNTMwMTYsNTMwMTcsNTMwMTgsNTMwMTksNTMwMjEsNTMwMjIsNTMwMjMsNTMwMjUsNTMwMjYsNTMwMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwMjksNTMwMzAsNTMwMzEsNTMwMzIsNTMwMzMsNTMw''@;'; put 'put ''MzQsNTMwMzUsNTMwMzgsNTMwNDIsNTMwNDMsNTMwNDQsNTMwNDUsNTMwNDYsNTMwNDcsNTMwNDksNTMwNTAsNTMwNTEsNTMwNTIsNTMwNTMsNTMwNTQsNTMwNTUsNTMwNTYsNTMwNTcsNTMwNTgsNTMwNTksNTMwNjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwNjEsNTMwNjIs''@;'; put 'put ''NTMwNjMsNTMwNjQsNTMwNjUsNTMwNjYsNTMwNjcsNTMwNjgsNTMwNjksNTMwNzAsNTMwNzEsNTMwNzIsNTMwNzMsNTMwNzQsNTMwNzUsNTMwNzgsNTMwNzksNTMwODEsNTMwODIsNTMwODMsNTMwODUsNTMwODYsNTMwODcsNTMwODgsNTMwODksNTMwOTAsNTMwOTEsNTMwOTQsNTMwOTYsNTMw''@;'; put 'put ''OTgsNTMwOTksNTMxMDAsNDQzMDAsNDQzMDEsNDQzMDMsNDQzMDUsNDQzMTIsNDQzMTYsNDQzMjAsNDQzMjksNDQzMzIsNDQzMzMsNDQzNDAsNDQzNDEsNDQzNDQsNDQzNDgsNDQzNTYsNDQzNTcsNDQzNTksNDQzNjEsNDQzNjgsNDQzNzIsNDQzNzYsNDQzODUsNDQzODcsNDQzOTYsNDQzOTcs''@;'; put 'put ''NDQ0MDAsNDQ0MDMsNDQ0MDQsNDQ0MDUsNDQ0MDYsNDQ0MTEsNDQ0MTIsNDQ0MTMsNDQ0MTUsNDQ0MTcsNDQ0MTgsNDQ0MjQsNDQ0MjUsNDQ0MjgsNDQ0MzIsNDQ0NDQsNDQ0NDUsNDQ0NTIsNDQ0NzEsNDQ0ODAsNDQ0ODEsNDQ0ODQsNDQ0ODgsNDQ0OTYsNDQ0OTcsNDQ0OTksNDQ1MDgsNDQ1''@;'; put 'put ''MTIsNDQ1MTYsNDQ1MzYsNDQ1MzcsNDQ1NDAsNDQ1NDMsNDQ1NDQsNDQ1NDUsNDQ1NTIsNDQ1NTMsNDQ1NTUsNDQ1NTcsNDQ1NjQsNDQ1OTIsNDQ1OTMsNDQ1OTYsNDQ1OTksNDQ2MDAsNDQ2MDIsNDQ2MDgsNDQ2MDksNDQ2MTEsNDQ2MTMsNDQ2MTQsNDQ2MTgsNDQ2MjAsNDQ2MjEsNDQ2MjIs''@;'; put 'put ''NDQ2MjQsNDQ2MjgsNDQ2MzAsNDQ2MzYsNDQ2MzcsNDQ2MzksNDQ2NDAsNDQ2NDEsNDQ2NDUsNDQ2NDgsNDQ2NDksNDQ2NTIsNDQ2NTYsNDQ2NjQsNTMxMDEsNTMxMDIsNTMxMDMsNTMxMDYsNTMxMDcsNTMxMDksNTMxMTAsNTMxMTEsNTMxMTMsNTMxMTQsNTMxMTUsNTMxMTYsNTMxMTcsNTMx''@;'; put 'put ''MTgsNTMxMTksNTMxMjEsNTMxMjIsNTMxMjMsNTMxMjQsNTMxMjYsNTMxMjcsNTMxMjgsNTMxMjksNTMxMzAsNTMxMzEsNTMxMzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxMzQsNTMxMzUsNTMxMzYsNTMxMzcsNTMxMzgsNTMxMzksNTMxNDAsNTMxNDEsNTMxNDIsNTMxNDMs''@;'; put 'put ''NTMxNDQsNTMxNDUsNTMxNDYsNTMxNDcsNTMxNDgsNTMxNDksNTMxNTAsNTMxNTEsNTMxNTIsNTMxNTQsNTMxNTUsNTMxNTYsNTMxNTcsNTMxNTgsNTMxNTksNTMxNjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxNjIsNTMxNjMsNTMxNjQsNTMxNjUsNTMxNjYsNTMxNjcsNTMx''@;'; put 'put ''NjksNTMxNzAsNTMxNzEsNTMxNzIsNTMxNzMsNTMxNzQsNTMxNzUsNTMxNzYsNTMxNzcsNTMxNzgsNTMxNzksNTMxODAsNTMxODEsNTMxODIsNTMxODMsNTMxODQsNTMxODUsNTMxODYsNTMxODcsNTMxODksNTMxOTAsNTMxOTEsNTMxOTIsNTMxOTMsNTMxOTQsNTMxOTUsNDQ2NjUsNDQ2Njcs''@;'; put 'put ''NDQ2NjgsNDQ2NjksNDQ2NzYsNDQ2NzcsNDQ2ODQsNDQ3MzIsNDQ3MzMsNDQ3MzQsNDQ3MzYsNDQ3NDAsNDQ3NDgsNDQ3NDksNDQ3NTEsNDQ3NTIsNDQ3NTMsNDQ3NjAsNDQ3NjEsNDQ3NjQsNDQ3NzYsNDQ3NzksNDQ3ODEsNDQ3ODgsNDQ3OTIsNDQ3OTYsNDQ4MDcsNDQ4MDgsNDQ4MTMsNDQ4''@;'; put 'put ''MTYsNDQ4NDQsNDQ4NDUsNDQ4NDgsNDQ4NTAsNDQ4NTIsNDQ4NjAsNDQ4NjEsNDQ4NjMsNDQ4NjUsNDQ4NjYsNDQ4NjcsNDQ4NzIsNDQ4NzMsNDQ4ODAsNDQ4OTIsNDQ4OTMsNDQ5MDAsNDQ5MDEsNDQ5MjEsNDQ5MjgsNDQ5MzIsNDQ5MzYsNDQ5NDQsNDQ5NDUsNDQ5NDksNDQ5NTYsNDQ5ODQs''@;'; put 'put ''NDQ5ODUsNDQ5ODgsNDQ5OTIsNDQ5OTksNDVlMyw0NTAwMSw0NTAwMyw0NTAwNSw0NTAwNiw0NTAxMiw0NTAyMCw0NTAzMiw0NTAzMyw0NTA0MCw0NTA0MSw0NTA0NCw0NTA0OCw0NTA1Niw0NTA1Nyw0NTA2MCw0NTA2OCw0NTA3Miw0NTA3Niw0NTA4NCw0NTA4NSw0NTA5Niw0NTEyNCw0NTEy''@;'; put 'put ''NSw0NTEyOCw0NTEzMCw0NTEzMiw0NTEzNCw0NTEzOSw0NTE0MCw0NTE0MSw0NTE0Myw0NTE0NSw1MzE5Niw1MzE5Nyw1MzE5OCw1MzE5OSw1MzIwMCw1MzIwMSw1MzIwMiw1MzIwMyw1MzIwNCw1MzIwNSw1MzIwNiw1MzIwNyw1MzIwOCw1MzIwOSw1MzIxMCw1MzIxMSw1MzIxMiw1MzIxMyw1''@;'; put 'put ''MzIxNCw1MzIxNSw1MzIxOCw1MzIxOSw1MzIyMSw1MzIyMiw1MzIyMyw1MzIyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzIyNiw1MzIyNyw1MzIyOCw1MzIyOSw1MzIzMCw1MzIzMSw1MzIzNCw1MzIzNiw1MzIzOCw1MzIzOSw1MzI0MCw1MzI0MSw1MzI0Miw1MzI0Myw1MzI0''@;'; put 'put ''NSw1MzI0Niw1MzI0Nyw1MzI0OSw1MzI1MCw1MzI1MSw1MzI1Myw1MzI1NCw1MzI1NSw1MzI1Niw1MzI1Nyw1MzI1OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzI1OSw1MzI2MCw1MzI2MSw1MzI2Miw1MzI2Myw1MzI2NCw1MzI2Niw1MzI2Nyw1MzI2OCw1MzI2OSw1MzI3MCw1''@;'; put 'put ''MzI3MSw1MzI3Myw1MzI3NCw1MzI3NSw1MzI3Niw1MzI3Nyw1MzI3OCw1MzI3OSw1MzI4MCw1MzI4MSw1MzI4Miw1MzI4Myw1MzI4NCw1MzI4NSw1MzI4Niw1MzI4Nyw1MzI4OCw1MzI4OSw1MzI5MCw1MzI5MSw1MzI5Miw0NTE0OSw0NTE4MCw0NTE4MSw0NTE4NCw0NTE4OCw0NTE5Niw0NTE5''@;'; put 'put ''Nyw0NTE5OSw0NTIwMSw0NTIwOCw0NTIwOSw0NTIxMCw0NTIxMiw0NTIxNSw0NTIxNiw0NTIxNyw0NTIxOCw0NTIyNCw0NTIyNSw0NTIyNyw0NTIyOCw0NTIyOSw0NTIzMCw0NTIzMSw0NTIzMyw0NTIzNSw0NTIzNiw0NTIzNyw0NTI0MCw0NTI0NCw0NTI1Miw0NTI1Myw0NTI1NSw0NTI1Niw0''@;'; put 'put ''NTI1Nyw0NTI2NCw0NTI2NSw0NTI2OCw0NTI3Miw0NTI4MCw0NTI4NSw0NTMyMCw0NTMyMSw0NTMyMyw0NTMyNCw0NTMyOCw0NTMzMCw0NTMzMSw0NTMzNiw0NTMzNyw0NTMzOSw0NTM0MCw0NTM0MSw0NTM0Nyw0NTM0OCw0NTM0OSw0NTM1Miw0NTM1Niw0NTM2NCw0NTM2NSw0NTM2Nyw0NTM2''@;'; put 'put ''OCw0NTM2OSw0NTM3Niw0NTM3Nyw0NTM4MCw0NTM4NCw0NTM5Miw0NTM5Myw0NTM5Niw0NTM5Nyw0NTQwMCw0NTQwNCw0NTQwOCw0NTQzMiw0NTQzMyw0NTQzNiw0NTQ0MCw0NTQ0Miw0NTQ0OCw0NTQ0OSw0NTQ1MSw0NTQ1Myw0NTQ1OCw0NTQ1OSw0NTQ2MCw0NTQ2NCw0NTQ2OCw0NTQ4MCw0''@;'; put 'put ''NTUxNiw0NTUyMCw0NTUyNCw0NTUzMiw0NTUzMyw1MzI5NCw1MzI5NSw1MzI5Niw1MzI5Nyw1MzI5OCw1MzI5OSw1MzMwMiw1MzMwMyw1MzMwNSw1MzMwNiw1MzMwNyw1MzMwOSw1MzMxMCw1MzMxMSw1MzMxMiw1MzMxMyw1MzMxNCw1MzMxNSw1MzMxOCw1MzMyMCw1MzMyMiw1MzMyMyw1MzMy''@;'; put 'put ''NCw1MzMyNSw1MzMyNiw1MzMyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzMyOSw1MzMzMCw1MzMzMSw1MzMzMyw1MzMzNCw1MzMzNSw1MzMzNyw1MzMzOCw1MzMzOSw1MzM0MCw1MzM0MSw1MzM0Miw1MzM0Myw1MzM0NSw1MzM0Niw1MzM0Nyw1MzM0OCw1MzM0OSw1MzM1MCw1''@;'; put 'put ''MzM1MSw1MzM1Miw1MzM1Myw1MzM1NCw1MzM1NSw1MzM1OCw1MzM1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzM2MSw1MzM2Miw1MzM2Myw1MzM2NSw1MzM2Niw1MzM2Nyw1MzM2OCw1MzM2OSw1MzM3MCw1MzM3MSw1MzM3NCw1MzM3NSw1MzM3Niw1MzM3OCw1MzM3OSw1MzM4''@;'; put 'put ''MCw1MzM4MSw1MzM4Miw1MzM4Myw1MzM4NCw1MzM4NSw1MzM4Niw1MzM4Nyw1MzM4OCw1MzM4OSw1MzM5MCw1MzM5MSw1MzM5Miw1MzM5Myw1MzM5NCw1MzM5NSw1MzM5Niw0NTUzNSw0NTU0NCw0NTU0NSw0NTU0OCw0NTU1Miw0NTU2MSw0NTU2Myw0NTU2NSw0NTU3Miw0NTU3Myw0NTU3Niw0''@;'; put 'put ''NTU3OSw0NTU4MCw0NTU4OCw0NTU4OSw0NTU5MSw0NTU5Myw0NTYwMCw0NTYyMCw0NTYyOCw0NTY1Niw0NTY2MCw0NTY2NCw0NTY3Miw0NTY3Myw0NTY4NCw0NTY4NSw0NTY5Miw0NTcwMCw0NTcwMSw0NTcwNSw0NTcxMiw0NTcxMyw0NTcxNiw0NTcyMCw0NTcyMSw0NTcyMiw0NTcyOCw0NTcy''@;'; put 'put ''OSw0NTczMSw0NTczMyw0NTczNCw0NTczOCw0NTc0MCw0NTc0NCw0NTc0OCw0NTc2OCw0NTc2OSw0NTc3Miw0NTc3Niw0NTc3OCw0NTc4NCw0NTc4NSw0NTc4Nyw0NTc4OSw0NTc5NCw0NTc5Niw0NTc5Nyw0NTc5OCw0NTgwMCw0NTgwMyw0NTgwNCw0NTgwNSw0NTgwNiw0NTgwNyw0NTgxMSw0''@;'; put 'put ''NTgxMiw0NTgxMyw0NTgxNSw0NTgxNiw0NTgxNyw0NTgxOCw0NTgxOSw0NTgyMyw0NTgyNCw0NTgyNSw0NTgyOCw0NTgzMiw0NTg0MCw0NTg0MSw0NTg0Myw0NTg0NCw0NTg0NSw0NTg1Miw0NTkwOCw0NTkwOSw0NTkxMCw0NTkxMiw0NTkxNSw0NTkxNiw0NTkxOCw0NTkxOSw0NTkyNCw0NTky''@;'; put 'put ''NSw1MzM5Nyw1MzM5OCw1MzM5OSw1MzQwMCw1MzQwMSw1MzQwMiw1MzQwMyw1MzQwNCw1MzQwNSw1MzQwNiw1MzQwNyw1MzQwOCw1MzQwOSw1MzQxMCw1MzQxMSw1MzQxNCw1MzQxNSw1MzQxNyw1MzQxOCw1MzQxOSw1MzQyMSw1MzQyMiw1MzQyMyw1MzQyNCw1MzQyNSw1MzQyNixudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzQyNyw1MzQzMCw1MzQzMiw1MzQzNCw1MzQzNSw1MzQzNiw1MzQzNyw1MzQzOCw1MzQzOSw1MzQ0Miw1MzQ0Myw1MzQ0NSw1MzQ0Niw1MzQ0Nyw1MzQ1MCw1MzQ1MSw1MzQ1Miw1MzQ1Myw1MzQ1NCw1MzQ1NSw1MzQ1OCw1MzQ2Miw1MzQ2Myw1MzQ2''@;'; put 'put ''NCw1MzQ2NSw1MzQ2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzQ2Nyw1MzQ3MCw1MzQ3MSw1MzQ3Myw1MzQ3NCw1MzQ3NSw1MzQ3Nyw1MzQ3OCw1MzQ3OSw1MzQ4MCw1MzQ4MSw1MzQ4Miw1MzQ4Myw1MzQ4Niw1MzQ5MCw1MzQ5MSw1MzQ5Miw1MzQ5Myw1MzQ5NCw1MzQ5NSw1''@;'; put 'put ''MzQ5Nyw1MzQ5OCw1MzQ5OSw1MzUwMCw1MzUwMSw1MzUwMiw1MzUwMyw1MzUwNCw1MzUwNSw1MzUwNiw1MzUwNyw1MzUwOCw0NTkyNyw0NTkyOSw0NTkzMSw0NTkzNCw0NTkzNiw0NTkzNyw0NTk0MCw0NTk0NCw0NTk1Miw0NTk1Myw0NTk1NSw0NTk1Niw0NTk1Nyw0NTk2NCw0NTk2OCw0NTk3''@;'; put 'put ''Miw0NTk4NCw0NTk4NSw0NTk5Miw0NTk5Niw0NjAyMCw0NjAyMSw0NjAyNCw0NjAyNyw0NjAyOCw0NjAzMCw0NjAzMiw0NjAzNiw0NjAzNyw0NjAzOSw0NjA0MSw0NjA0Myw0NjA0NSw0NjA0OCw0NjA1Miw0NjA1Niw0NjA3Niw0NjA5Niw0NjEwNCw0NjEwOCw0NjExMiw0NjEyMCw0NjEyMSw0''@;'; put 'put ''NjEyMyw0NjEzMiw0NjE2MCw0NjE2MSw0NjE2NCw0NjE2OCw0NjE3Niw0NjE3Nyw0NjE3OSw0NjE4MSw0NjE4OCw0NjIwOCw0NjIxNiw0NjIzNyw0NjI0NCw0NjI0OCw0NjI1Miw0NjI2MSw0NjI2Myw0NjI2NSw0NjI3Miw0NjI3Niw0NjI4MCw0NjI4OCw0NjI5Myw0NjMwMCw0NjMwMSw0NjMw''@;'; put 'put ''NCw0NjMwNyw0NjMwOCw0NjMxMCw0NjMxNiw0NjMxNyw0NjMxOSw0NjMyMSw0NjMyOCw0NjM1Niw0NjM1Nyw0NjM2MCw0NjM2Myw0NjM2NCw0NjM3Miw0NjM3Myw0NjM3NSw0NjM3Niw0NjM3Nyw0NjM3OCw0NjM4NCw0NjM4NSw0NjM4OCw0NjM5Miw1MzUwOSw1MzUxMCw1MzUxMSw1MzUxMiw1''@;'; put 'put ''MzUxMyw1MzUxNCw1MzUxNSw1MzUxNiw1MzUxOCw1MzUxOSw1MzUyMCw1MzUyMSw1MzUyMiw1MzUyMyw1MzUyNCw1MzUyNSw1MzUyNiw1MzUyNyw1MzUyOCw1MzUyOSw1MzUzMCw1MzUzMSw1MzUzMiw1MzUzMyw1MzUzNCw1MzUzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzUz''@;'; put 'put ''Niw1MzUzNyw1MzUzOCw1MzUzOSw1MzU0MCw1MzU0MSw1MzU0Miw1MzU0Myw1MzU0NCw1MzU0NSw1MzU0Niw1MzU0Nyw1MzU0OCw1MzU0OSw1MzU1MCw1MzU1MSw1MzU1NCw1MzU1NSw1MzU1Nyw1MzU1OCw1MzU1OSw1MzU2MSw1MzU2Myw1MzU2NCw1MzU2NSw1MzU2NixudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCw1MzU2Nyw1MzU3MCw1MzU3NCw1MzU3NSw1MzU3Niw1MzU3Nyw1MzU3OCw1MzU3OSw1MzU4Miw1MzU4Myw1MzU4NSw1MzU4Niw1MzU4Nyw1MzU4OSw1MzU5MCw1MzU5MSw1MzU5Miw1MzU5Myw1MzU5NCw1MzU5NSw1MzU5OCw1MzYwMCw1MzYwMiw1MzYwMyw1MzYw''@;'; put 'put ''NCw1MzYwNSw1MzYwNiw1MzYwNyw1MzYwOSw1MzYxMCw1MzYxMSw1MzYxMyw0NjQwMCw0NjQwMSw0NjQwMyw0NjQwNCw0NjQwNSw0NjQxMSw0NjQxMiw0NjQxMyw0NjQxNiw0NjQyMCw0NjQyOCw0NjQyOSw0NjQzMSw0NjQzMiw0NjQzMyw0NjQ5Niw0NjQ5Nyw0NjUwMCw0NjUwNCw0NjUwNiw0''@;'; put 'put ''NjUwNyw0NjUxMiw0NjUxMyw0NjUxNSw0NjUxNiw0NjUxNyw0NjUyMyw0NjUyNCw0NjUyNSw0NjUyOCw0NjUzMiw0NjU0MCw0NjU0MSw0NjU0Myw0NjU0NCw0NjU0NSw0NjU1Miw0NjU3Miw0NjYwOCw0NjYwOSw0NjYxMiw0NjYxNiw0NjYyOSw0NjYzNiw0NjY0NCw0NjY2NCw0NjY5Miw0NjY5''@;'; put 'put ''Niw0Njc0OCw0Njc0OSw0Njc1Miw0Njc1Niw0Njc2Myw0Njc2NCw0Njc2OSw0NjgwNCw0NjgzMiw0NjgzNiw0Njg0MCw0Njg0OCw0Njg0OSw0Njg1Myw0Njg4OCw0Njg4OSw0Njg5Miw0Njg5NSw0Njg5Niw0NjkwNCw0NjkwNSw0NjkwNyw0NjkxNiw0NjkyMCw0NjkyNCw0NjkzMiw0NjkzMyw0''@;'; put 'put ''Njk0NCw0Njk0OCw0Njk1Miw0Njk2MCw0Njk2MSw0Njk2Myw0Njk2NSw0Njk3Miw0Njk3Myw0Njk3Niw0Njk4MCw0Njk4OCw0Njk4OSw0Njk5MSw0Njk5Miw0Njk5Myw0Njk5NCw0Njk5OCw0Njk5OSw1MzYxNCw1MzYxNSw1MzYxNiw1MzYxNyw1MzYxOCw1MzYxOSw1MzYyMCw1MzYyMSw1MzYy''@;'; put 'put ''Miw1MzYyMyw1MzYyNCw1MzYyNSw1MzYyNiw1MzYyNyw1MzYyOSw1MzYzMCw1MzYzMSw1MzYzMiw1MzYzMyw1MzYzNCw1MzYzNSw1MzYzNyw1MzYzOCw1MzYzOSw1MzY0MSw1MzY0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY0Myw1MzY0NCw1MzY0NSw1MzY0Niw1MzY0Nyw1''@;'; put 'put ''MzY0OCw1MzY0OSw1MzY1MCw1MzY1MSw1MzY1Miw1MzY1Myw1MzY1NCw1MzY1NSw1MzY1Niw1MzY1Nyw1MzY1OCw1MzY1OSw1MzY2MCw1MzY2MSw1MzY2Miw1MzY2Myw1MzY2Niw1MzY2Nyw1MzY2OSw1MzY3MCw1MzY3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY3Myw1MzY3''@;'; put 'put ''NCw1MzY3NSw1MzY3Niw1MzY3Nyw1MzY3OCw1MzY3OSw1MzY4Miw1MzY4NCw1MzY4Niw1MzY4Nyw1MzY4OCw1MzY4OSw1MzY5MSw1MzY5Myw1MzY5NCw1MzY5NSw1MzY5Nyw1MzY5OCw1MzY5OSw1MzcwMCw1MzcwMSw1MzcwMiw1MzcwMyw1MzcwNCw1MzcwNSw1MzcwNiw1MzcwNyw1MzcwOCw1''@;'; put 'put ''MzcwOSw1MzcxMCw1MzcxMSw0N2UzLDQ3MDAxLDQ3MDA0LDQ3MDA4LDQ3MDE2LDQ3MDE3LDQ3MDE5LDQ3MDIwLDQ3MDIxLDQ3MDI4LDQ3MDI5LDQ3MDMyLDQ3MDQ3LDQ3MDQ5LDQ3MDg0LDQ3MDg1LDQ3MDg4LDQ3MDkyLDQ3MTAwLDQ3MTAxLDQ3MTAzLDQ3MTA0LDQ3MTA1LDQ3MTExLDQ3MTEy''@;'; put 'put ''LDQ3MTEzLDQ3MTE2LDQ3MTIwLDQ3MTI4LDQ3MTI5LDQ3MTMxLDQ3MTMzLDQ3MTQwLDQ3MTQxLDQ3MTQ0LDQ3MTQ4LDQ3MTU2LDQ3MTU3LDQ3MTU5LDQ3MTYwLDQ3MTYxLDQ3MTY4LDQ3MTcyLDQ3MTg1LDQ3MTg3LDQ3MTk2LDQ3MTk3LDQ3MjAwLDQ3MjA0LDQ3MjEyLDQ3MjEzLDQ3MjE1LDQ3''@;'; put 'put ''MjE3LDQ3MjI0LDQ3MjI4LDQ3MjQ1LDQ3MjcyLDQ3MjgwLDQ3Mjg0LDQ3Mjg4LDQ3Mjk2LDQ3Mjk3LDQ3Mjk5LDQ3MzAxLDQ3MzA4LDQ3MzEyLDQ3MzE2LDQ3MzI1LDQ3MzI3LDQ3MzI5LDQ3MzM2LDQ3MzM3LDQ3MzQwLDQ3MzQ0LDQ3MzUyLDQ3MzUzLDQ3MzU1LDQ3MzU3LDQ3MzY0LDQ3Mzg0''@;'; put 'put ''LDQ3MzkyLDQ3NDIwLDQ3NDIxLDQ3NDI0LDQ3NDI4LDQ3NDM2LDQ3NDM5LDQ3NDQxLDQ3NDQ4LDQ3NDQ5LDQ3NDUyLDQ3NDU2LDQ3NDY0LDQ3NDY1LDUzNzEyLDUzNzEzLDUzNzE0LDUzNzE1LDUzNzE2LDUzNzE3LDUzNzE4LDUzNzE5LDUzNzIxLDUzNzIyLDUzNzIzLDUzNzI0LDUzNzI1LDUz''@;'; put 'put ''NzI2LDUzNzI3LDUzNzI4LDUzNzI5LDUzNzMwLDUzNzMxLDUzNzMyLDUzNzMzLDUzNzM0LDUzNzM1LDUzNzM2LDUzNzM3LDUzNzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNzM5LDUzNzQwLDUzNzQxLDUzNzQyLDUzNzQzLDUzNzQ0LDUzNzQ1LDUzNzQ2LDUzNzQ3LDUzNzQ5''@;'; put 'put ''LDUzNzUwLDUzNzUxLDUzNzUzLDUzNzU0LDUzNzU1LDUzNzU2LDUzNzU3LDUzNzU4LDUzNzU5LDUzNzYwLDUzNzYxLDUzNzYyLDUzNzYzLDUzNzY0LDUzNzY1LDUzNzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNzY4LDUzNzcwLDUzNzcxLDUzNzcyLDUzNzczLDUzNzc0LDUz''@;'; put 'put ''Nzc1LDUzNzc3LDUzNzc4LDUzNzc5LDUzNzgwLDUzNzgxLDUzNzgyLDUzNzgzLDUzNzg0LDUzNzg1LDUzNzg2LDUzNzg3LDUzNzg4LDUzNzg5LDUzNzkwLDUzNzkxLDUzNzkyLDUzNzkzLDUzNzk0LDUzNzk1LDUzNzk2LDUzNzk3LDUzNzk4LDUzNzk5LDUzODAwLDUzODAxLDQ3NDY3LDQ3NDY5''@;'; put 'put ''LDQ3NDc2LDQ3NDc3LDQ3NDgwLDQ3NDg0LDQ3NDkyLDQ3NDkzLDQ3NDk1LDQ3NDk3LDQ3NDk4LDQ3NTAxLDQ3NTAyLDQ3NTMyLDQ3NTMzLDQ3NTM2LDQ3NTQwLDQ3NTQ4LDQ3NTQ5LDQ3NTUxLDQ3NTUzLDQ3NTYwLDQ3NTYxLDQ3NTY0LDQ3NTY2LDQ3NTY3LDQ3NTY4LDQ3NTY5LDQ3NTcwLDQ3''@;'; put 'put ''NTc2LDQ3NTc3LDQ3NTc5LDQ3NTgxLDQ3NTgyLDQ3NTg1LDQ3NTg3LDQ3NTg4LDQ3NTg5LDQ3NTkyLDQ3NTk2LDQ3NjA0LDQ3NjA1LDQ3NjA3LDQ3NjA4LDQ3NjA5LDQ3NjEwLDQ3NjE2LDQ3NjE3LDQ3NjI0LDQ3NjM3LDQ3NjcyLDQ3NjczLDQ3Njc2LDQ3NjgwLDQ3NjgyLDQ3Njg4LDQ3Njg5''@;'; put 'put ''LDQ3NjkxLDQ3NjkzLDQ3Njk0LDQ3Njk5LDQ3NzAwLDQ3NzAxLDQ3NzA0LDQ3NzA4LDQ3NzE2LDQ3NzE3LDQ3NzE5LDQ3NzIwLDQ3NzIxLDQ3NzI4LDQ3NzI5LDQ3NzMyLDQ3NzM2LDQ3NzQ3LDQ3NzQ4LDQ3NzQ5LDQ3NzUxLDQ3NzU2LDQ3Nzg0LDQ3Nzg1LDQ3Nzg3LDQ3Nzg4LDQ3NzkyLDQ3''@;'; put 'put ''Nzk0LDQ3ODAwLDQ3ODAxLDQ3ODAzLDQ3ODA1LDQ3ODEyLDQ3ODE2LDQ3ODMyLDQ3ODMzLDQ3ODY4LDUzODAyLDUzODAzLDUzODA2LDUzODA3LDUzODA5LDUzODEwLDUzODExLDUzODEzLDUzODE0LDUzODE1LDUzODE2LDUzODE3LDUzODE4LDUzODE5LDUzODIyLDUzODI0LDUzODI2LDUzODI3''@;'; put 'put ''LDUzODI4LDUzODI5LDUzODMwLDUzODMxLDUzODMzLDUzODM0LDUzODM1LDUzODM2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzODM3LDUzODM4LDUzODM5LDUzODQwLDUzODQxLDUzODQyLDUzODQzLDUzODQ0LDUzODQ1LDUzODQ2LDUzODQ3LDUzODQ4LDUzODQ5LDUzODUwLDUz''@;'; put 'put ''ODUxLDUzODUzLDUzODU0LDUzODU1LDUzODU2LDUzODU3LDUzODU4LDUzODU5LDUzODYxLDUzODYyLDUzODYzLDUzODY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzODY1LDUzODY2LDUzODY3LDUzODY4LDUzODY5LDUzODcwLDUzODcxLDUzODcyLDUzODczLDUzODc0LDUzODc1''@;'; put 'put ''LDUzODc2LDUzODc3LDUzODc4LDUzODc5LDUzODgwLDUzODgxLDUzODgyLDUzODgzLDUzODg0LDUzODg1LDUzODg2LDUzODg3LDUzODkwLDUzODkxLDUzODkzLDUzODk0LDUzODk1LDUzODk3LDUzODk4LDUzODk5LDUzOTAwLDQ3ODcyLDQ3ODc2LDQ3ODg1LDQ3ODg3LDQ3ODg5LDQ3ODk2LDQ3''@;'; put 'put ''OTAwLDQ3OTA0LDQ3OTEzLDQ3OTE1LDQ3OTI0LDQ3OTI1LDQ3OTI2LDQ3OTI4LDQ3OTMxLDQ3OTMyLDQ3OTMzLDQ3OTM0LDQ3OTQwLDQ3OTQxLDQ3OTQzLDQ3OTQ1LDQ3OTQ5LDQ3OTUxLDQ3OTUyLDQ3OTU2LDQ3OTYwLDQ3OTY5LDQ3OTcxLDQ3OTgwLDQ4MDA4LDQ4MDEyLDQ4MDE2LDQ4MDM2''@;'; put 'put ''LDQ4MDQwLDQ4MDQ0LDQ4MDUyLDQ4MDU1LDQ4MDY0LDQ4MDY4LDQ4MDcyLDQ4MDgwLDQ4MDgzLDQ4MTIwLDQ4MTIxLDQ4MTI0LDQ4MTI3LDQ4MTI4LDQ4MTMwLDQ4MTM2LDQ4MTM3LDQ4MTM5LDQ4MTQwLDQ4MTQxLDQ4MTQzLDQ4MTQ1LDQ4MTQ4LDQ4MTQ5LDQ4MTUwLDQ4MTUxLDQ4MTUyLDQ4''@;'; put 'put ''MTU1LDQ4MTU2LDQ4MTU3LDQ4MTU4LDQ4MTU5LDQ4MTY0LDQ4MTY1LDQ4MTY3LDQ4MTY5LDQ4MTczLDQ4MTc2LDQ4MTc3LDQ4MTgwLDQ4MTg0LDQ4MTkyLDQ4MTkzLDQ4MTk1LDQ4MTk2LDQ4MTk3LDQ4MjAxLDQ4MjA0LDQ4MjA1LDQ4MjA4LDQ4MjIxLDQ4MjYwLDQ4MjYxLDQ4MjY0LDQ4MjY3''@;'; put 'put ''LDQ4MjY4LDQ4MjcwLDQ4Mjc2LDQ4Mjc3LDQ4Mjc5LDUzOTAxLDUzOTAyLDUzOTAzLDUzOTA2LDUzOTA3LDUzOTA4LDUzOTEwLDUzOTExLDUzOTEyLDUzOTEzLDUzOTE0LDUzOTE1LDUzOTE3LDUzOTE4LDUzOTE5LDUzOTIxLDUzOTIyLDUzOTIzLDUzOTI1LDUzOTI2LDUzOTI3LDUzOTI4LDUz''@;'; put 'put ''OTI5LDUzOTMwLDUzOTMxLDUzOTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzOTM0LDUzOTM1LDUzOTM2LDUzOTM4LDUzOTM5LDUzOTQwLDUzOTQxLDUzOTQyLDUzOTQzLDUzOTQ2LDUzOTQ3LDUzOTQ5LDUzOTUwLDUzOTUzLDUzOTU1LDUzOTU2LDUzOTU3LDUzOTU4LDUzOTU5''@;'; put 'put ''LDUzOTYyLDUzOTY0LDUzOTY1LDUzOTY2LDUzOTY3LDUzOTY4LDUzOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzOTcwLDUzOTcxLDUzOTczLDUzOTc0LDUzOTc1LDUzOTc3LDUzOTc4LDUzOTc5LDUzOTgxLDUzOTgyLDUzOTgzLDUzOTg0LDUzOTg1LDUzOTg2LDUzOTg3LDUz''@;'; put 'put ''OTkwLDUzOTkxLDUzOTkyLDUzOTkzLDUzOTk0LDUzOTk1LDUzOTk2LDUzOTk3LDUzOTk4LDUzOTk5LDU0MDAyLDU0MDAzLDU0MDA1LDU0MDA2LDU0MDA3LDU0MDA5LDU0MDEwLDQ4MjgxLDQ4MjgyLDQ4Mjg4LDQ4Mjg5LDQ4MjkyLDQ4Mjk1LDQ4Mjk2LDQ4MzA0LDQ4MzA1LDQ4MzA3LDQ4MzA4''@;'; put 'put ''LDQ4MzA5LDQ4MzE2LDQ4MzE3LDQ4MzIwLDQ4MzI0LDQ4MzMzLDQ4MzM1LDQ4MzM2LDQ4MzM3LDQ4MzQxLDQ4MzQ0LDQ4MzQ4LDQ4MzcyLDQ4MzczLDQ4Mzc0LDQ4Mzc2LDQ4MzgwLDQ4Mzg4LDQ4Mzg5LDQ4MzkxLDQ4MzkzLDQ4NDAwLDQ4NDA0LDQ4NDIwLDQ4NDI4LDQ4NDQ4LDQ4NDU2LDQ4''@;'; put 'put ''NDU3LDQ4NDYwLDQ4NDY0LDQ4NDcyLDQ4NDczLDQ4NDg0LDQ4NDg4LDQ4NTEyLDQ4NTEzLDQ4NTE2LDQ4NTE5LDQ4NTIwLDQ4NTIxLDQ4NTIyLDQ4NTI4LDQ4NTI5LDQ4NTMxLDQ4NTMzLDQ4NTM3LDQ4NTM4LDQ4NTQwLDQ4NTQ4LDQ4NTYwLDQ4NTY4LDQ4NTk2LDQ4NTk3LDQ4NjAwLDQ4NjA0''@;'; put 'put ''LDQ4NjE3LDQ4NjI0LDQ4NjI4LDQ4NjMyLDQ4NjQwLDQ4NjQzLDQ4NjQ1LDQ4NjUyLDQ4NjUzLDQ4NjU2LDQ4NjYwLDQ4NjY4LDQ4NjY5LDQ4NjcxLDQ4NzA4LDQ4NzA5LDQ4NzEyLDQ4NzE2LDQ4NzE4LDQ4NzI0LDQ4NzI1LDQ4NzI3LDQ4NzI5LDQ4NzMwLDQ4NzMxLDQ4NzM2LDQ4NzM3LDQ4''@;'; put 'put ''NzQwLDU0MDExLDU0MDEyLDU0MDEzLDU0MDE0LDU0MDE1LDU0MDE4LDU0MDIwLDU0MDIyLDU0MDIzLDU0MDI0LDU0MDI1LDU0MDI2LDU0MDI3LDU0MDMxLDU0MDMzLDU0MDM0LDU0MDM1LDU0MDM3LDU0MDM5LDU0MDQwLDU0MDQxLDU0MDQyLDU0MDQzLDU0MDQ2LDU0MDUwLDU0MDUxLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MDUyLDU0MDU0LDU0MDU1LDU0MDU4LDU0MDU5LDU0MDYxLDU0MDYyLDU0MDYzLDU0MDY1LDU0MDY2LDU0MDY3LDU0MDY4LDU0MDY5LDU0MDcwLDU0MDcxLDU0MDc0LDU0MDc4LDU0MDc5LDU0MDgwLDU0MDgxLDU0MDgyLDU0MDgzLDU0MDg2LDU0''@;'; put 'put ''MDg3LDU0MDg4LDU0MDg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MDkwLDU0MDkxLDU0MDkyLDU0MDkzLDU0MDk0LDU0MDk1LDU0MDk2LDU0MDk3LDU0MDk4LDU0MDk5LDU0MTAwLDU0MTAxLDU0MTAyLDU0MTAzLDU0MTA0LDU0MTA1LDU0MTA2LDU0MTA3LDU0MTA4LDU0MTA5''@;'; put 'put ''LDU0MTEwLDU0MTExLDU0MTEyLDU0MTEzLDU0MTE0LDU0MTE1LDU0MTE2LDU0MTE3LDU0MTE4LDU0MTE5LDU0MTIwLDU0MTIxLDQ4NzQ0LDQ4NzQ2LDQ4NzUyLDQ4NzUzLDQ4NzU1LDQ4NzU2LDQ4NzU3LDQ4NzYzLDQ4NzY0LDQ4NzY1LDQ4NzY4LDQ4NzcyLDQ4NzgwLDQ4NzgxLDQ4NzgzLDQ4''@;'; put 'put ''Nzg0LDQ4Nzg1LDQ4NzkyLDQ4NzkzLDQ4ODA4LDQ4ODQ4LDQ4ODQ5LDQ4ODUyLDQ4ODU1LDQ4ODU2LDQ4ODY0LDQ4ODY3LDQ4ODY4LDQ4ODY5LDQ4ODc2LDQ4ODk3LDQ4OTA0LDQ4OTA1LDQ4OTIwLDQ4OTIxLDQ4OTIzLDQ4OTI0LDQ4OTI1LDQ4OTYwLDQ4OTYxLDQ4OTY0LDQ4OTY4LDQ4OTc2''@;'; put 'put ''LDQ4OTc3LDQ4OTgxLDQ5MDQ0LDQ5MDcyLDQ5MDkzLDQ5MTAwLDQ5MTAxLDQ5MTA0LDQ5MTA4LDQ5MTE2LDQ5MTE5LDQ5MTIxLDQ5MjEyLDQ5MjMzLDQ5MjQwLDQ5MjQ0LDQ5MjQ4LDQ5MjU2LDQ5MjU3LDQ5Mjk2LDQ5Mjk3LDQ5MzAwLDQ5MzA0LDQ5MzEyLDQ5MzEzLDQ5MzE1LDQ5MzE3LDQ5''@;'; put 'put ''MzI0LDQ5MzI1LDQ5MzI3LDQ5MzI4LDQ5MzMxLDQ5MzMyLDQ5MzMzLDQ5MzM0LDQ5MzQwLDQ5MzQxLDQ5MzQzLDQ5MzQ0LDQ5MzQ1LDQ5MzQ5LDQ5MzUyLDQ5MzUzLDQ5MzU2LDQ5MzYwLDQ5MzY4LDQ5MzY5LDQ5MzcxLDQ5MzcyLDQ5MzczLDQ5MzgwLDU0MTIyLDU0MTIzLDU0MTI0LDU0MTI1''@;'; put 'put ''LDU0MTI2LDU0MTI3LDU0MTI4LDU0MTI5LDU0MTMwLDU0MTMxLDU0MTMyLDU0MTMzLDU0MTM0LDU0MTM1LDU0MTM2LDU0MTM3LDU0MTM4LDU0MTM5LDU0MTQyLDU0MTQzLDU0MTQ1LDU0MTQ2LDU0MTQ3LDU0MTQ5LDU0MTUwLDU0MTUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0''@;'; put 'put ''MTUyLDU0MTUzLDU0MTU0LDU0MTU1LDU0MTU4LDU0MTYyLDU0MTYzLDU0MTY0LDU0MTY1LDU0MTY2LDU0MTY3LDU0MTcwLDU0MTcxLDU0MTczLDU0MTc0LDU0MTc1LDU0MTc3LDU0MTc4LDU0MTc5LDU0MTgwLDU0MTgxLDU0MTgyLDU0MTgzLDU0MTg2LDU0MTg4LDU0MTkwLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDU0MTkxLDU0MTkyLDU0MTkzLDU0MTk0LDU0MTk1LDU0MTk3LDU0MTk4LDU0MTk5LDU0MjAxLDU0MjAyLDU0MjAzLDU0MjA1LDU0MjA2LDU0MjA3LDU0MjA4LDU0MjA5LDU0MjEwLDU0MjExLDU0MjE0LDU0MjE1LDU0MjE4LDU0MjE5LDU0MjIwLDU0MjIxLDU0''@;'; put 'put ''MjIyLDU0MjIzLDU0MjI1LDU0MjI2LDU0MjI3LDU0MjI4LDU0MjI5LDU0MjMwLDQ5MzgxLDQ5Mzg0LDQ5Mzg4LDQ5Mzk2LDQ5Mzk3LDQ5Mzk5LDQ5NDAxLDQ5NDA4LDQ5NDEyLDQ5NDE2LDQ5NDI0LDQ5NDI5LDQ5NDM2LDQ5NDM3LDQ5NDM4LDQ5NDM5LDQ5NDQwLDQ5NDQzLDQ5NDQ0LDQ5NDQ2''@;'; put 'put ''LDQ5NDQ3LDQ5NDUyLDQ5NDUzLDQ5NDU1LDQ5NDU2LDQ5NDU3LDQ5NDYyLDQ5NDY0LDQ5NDY1LDQ5NDY4LDQ5NDcyLDQ5NDgwLDQ5NDgxLDQ5NDgzLDQ5NDg0LDQ5NDg1LDQ5NDkyLDQ5NDkzLDQ5NDk2LDQ5NTAwLDQ5NTA4LDQ5NTA5LDQ5NTExLDQ5NTEyLDQ5NTEzLDQ5NTIwLDQ5NTI0LDQ5''@;'; put 'put ''NTI4LDQ5NTQxLDQ5NTQ4LDQ5NTQ5LDQ5NTUwLDQ5NTUyLDQ5NTU2LDQ5NTU4LDQ5NTY0LDQ5NTY1LDQ5NTY3LDQ5NTY5LDQ5NTczLDQ5NTc2LDQ5NTc3LDQ5NTgwLDQ5NTg0LDQ5NTk3LDQ5NjA0LDQ5NjA4LDQ5NjEyLDQ5NjIwLDQ5NjIzLDQ5NjI0LDQ5NjMyLDQ5NjM2LDQ5NjQwLDQ5NjQ4''@;'; put 'put ''LDQ5NjQ5LDQ5NjUxLDQ5NjYwLDQ5NjYxLDQ5NjY0LDQ5NjY4LDQ5Njc2LDQ5Njc3LDQ5Njc5LDQ5NjgxLDQ5Njg4LDQ5Njg5LDQ5NjkyLDQ5Njk1LDQ5Njk2LDQ5NzA0LDQ5NzA1LDQ5NzA3LDQ5NzA5LDU0MjMxLDU0MjMzLDU0MjM0LDU0MjM1LDU0MjM2LDU0MjM3LDU0MjM4LDU0MjM5LDU0''@;'; put 'put ''MjQwLDU0MjQyLDU0MjQ0LDU0MjQ1LDU0MjQ2LDU0MjQ3LDU0MjQ4LDU0MjQ5LDU0MjUwLDU0MjUxLDU0MjU0LDU0MjU1LDU0MjU3LDU0MjU4LDU0MjU5LDU0MjYxLDU0MjYyLDU0MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MjY0LDU0MjY1LDU0MjY2LDU0MjY3LDU0Mjcw''@;'; put 'put ''LDU0MjcyLDU0Mjc0LDU0Mjc1LDU0Mjc2LDU0Mjc3LDU0Mjc4LDU0Mjc5LDU0MjgxLDU0MjgyLDU0MjgzLDU0Mjg0LDU0Mjg1LDU0Mjg2LDU0Mjg3LDU0Mjg4LDU0Mjg5LDU0MjkwLDU0MjkxLDU0MjkyLDU0MjkzLDU0Mjk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0Mjk1LDU0''@;'; put 'put ''Mjk2LDU0Mjk3LDU0Mjk4LDU0Mjk5LDU0MzAwLDU0MzAyLDU0MzAzLDU0MzA0LDU0MzA1LDU0MzA2LDU0MzA3LDU0MzA4LDU0MzA5LDU0MzEwLDU0MzExLDU0MzEyLDU0MzEzLDU0MzE0LDU0MzE1LDU0MzE2LDU0MzE3LDU0MzE4LDU0MzE5LDU0MzIwLDU0MzIxLDU0MzIyLDU0MzIzLDU0MzI0''@;'; put 'put ''LDU0MzI1LDU0MzI2LDU0MzI3LDQ5NzExLDQ5NzEzLDQ5NzE0LDQ5NzE2LDQ5NzM2LDQ5NzQ0LDQ5NzQ1LDQ5NzQ4LDQ5NzUyLDQ5NzYwLDQ5NzY1LDQ5NzcyLDQ5NzczLDQ5Nzc2LDQ5NzgwLDQ5Nzg4LDQ5Nzg5LDQ5NzkxLDQ5NzkzLDQ5ODAwLDQ5ODAxLDQ5ODA4LDQ5ODE2LDQ5ODE5LDQ5''@;'; put 'put ''ODIxLDQ5ODI4LDQ5ODI5LDQ5ODMyLDQ5ODM2LDQ5ODM3LDQ5ODQ0LDQ5ODQ1LDQ5ODQ3LDQ5ODQ5LDQ5ODg0LDQ5ODg1LDQ5ODg4LDQ5ODkxLDQ5ODkyLDQ5ODk5LDQ5OTAwLDQ5OTAxLDQ5OTAzLDQ5OTA1LDQ5OTEwLDQ5OTEyLDQ5OTEzLDQ5OTE1LDQ5OTE2LDQ5OTIwLDQ5OTI4LDQ5OTI5''@;'; put 'put ''LDQ5OTMyLDQ5OTMzLDQ5OTM5LDQ5OTQwLDQ5OTQxLDQ5OTQ0LDQ5OTQ4LDQ5OTU2LDQ5OTU3LDQ5OTYwLDQ5OTYxLDQ5OTg5LDUwMDI0LDUwMDI1LDUwMDI4LDUwMDMyLDUwMDM0LDUwMDQwLDUwMDQxLDUwMDQ0LDUwMDQ1LDUwMDUyLDUwMDU2LDUwMDYwLDUwMTEyLDUwMTM2LDUwMTM3LDUw''@;'; put 'put ''MTQwLDUwMTQzLDUwMTQ0LDUwMTQ2LDUwMTUyLDUwMTUzLDUwMTU3LDUwMTY0LDUwMTY1LDUwMTY4LDUwMTg0LDUwMTkyLDUwMjEyLDUwMjIwLDUwMjI0LDU0MzI4LDU0MzI5LDU0MzMwLDU0MzMxLDU0MzMyLDU0MzMzLDU0MzM0LDU0MzM1LDU0MzM3LDU0MzM4LDU0MzM5LDU0MzQxLDU0MzQy''@;'; put 'put ''LDU0MzQzLDU0MzQ0LDU0MzQ1LDU0MzQ2LDU0MzQ3LDU0MzQ4LDU0MzQ5LDU0MzUwLDU0MzUxLDU0MzUyLDU0MzUzLDU0MzU0LDU0MzU1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MzU2LDU0MzU3LDU0MzU4LDU0MzU5LDU0MzYwLDU0MzYxLDU0MzYyLDU0MzYzLDU0MzY1LDU0''@;'; put 'put ''MzY2LDU0MzY3LDU0MzY5LDU0MzcwLDU0MzcxLDU0MzczLDU0Mzc0LDU0Mzc1LDU0Mzc2LDU0Mzc3LDU0Mzc4LDU0Mzc5LDU0MzgwLDU0MzgyLDU0Mzg0LDU0Mzg1LDU0Mzg2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0Mzg3LDU0Mzg4LDU0Mzg5LDU0MzkwLDU0MzkxLDU0Mzk0''@;'; put 'put ''LDU0Mzk1LDU0Mzk3LDU0Mzk4LDU0NDAxLDU0NDAzLDU0NDA0LDU0NDA1LDU0NDA2LDU0NDA3LDU0NDEwLDU0NDEyLDU0NDE0LDU0NDE1LDU0NDE2LDU0NDE3LDU0NDE4LDU0NDE5LDU0NDIxLDU0NDIyLDU0NDIzLDU0NDI0LDU0NDI1LDU0NDI2LDU0NDI3LDU0NDI4LDU0NDI5LDUwMjI4LDUw''@;'; put 'put ''MjM2LDUwMjM3LDUwMjQ4LDUwMjc2LDUwMjc3LDUwMjgwLDUwMjg0LDUwMjkyLDUwMjkzLDUwMjk3LDUwMzA0LDUwMzI0LDUwMzMyLDUwMzYwLDUwMzY0LDUwNDA5LDUwNDE2LDUwNDE3LDUwNDIwLDUwNDI0LDUwNDI2LDUwNDMxLDUwNDMyLDUwNDMzLDUwNDQ0LDUwNDQ4LDUwNDUyLDUwNDYw''@;'; put 'put ''LDUwNDcyLDUwNDczLDUwNDc2LDUwNDgwLDUwNDg4LDUwNDg5LDUwNDkxLDUwNDkzLDUwNTAwLDUwNTAxLDUwNTA0LDUwNTA1LDUwNTA2LDUwNTA4LDUwNTA5LDUwNTEwLDUwNTE1LDUwNTE2LDUwNTE3LDUwNTE5LDUwNTIwLDUwNTIxLDUwNTI1LDUwNTI2LDUwNTI4LDUwNTI5LDUwNTMyLDUw''@;'; put 'put ''NTM2LDUwNTQ0LDUwNTQ1LDUwNTQ3LDUwNTQ4LDUwNTQ5LDUwNTU2LDUwNTU3LDUwNTYwLDUwNTY0LDUwNTY3LDUwNTcyLDUwNTczLDUwNTc1LDUwNTc3LDUwNTgxLDUwNTgzLDUwNTg0LDUwNTg4LDUwNTkyLDUwNjAxLDUwNjEyLDUwNjEzLDUwNjE2LDUwNjE3LDUwNjE5LDUwNjIwLDUwNjIx''@;'; put 'put ''LDUwNjIyLDUwNjI4LDUwNjI5LDUwNjMwLDUwNjMxLDUwNjMyLDUwNjMzLDUwNjM0LDUwNjM2LDUwNjM4LDU0NDMwLDU0NDMxLDU0NDMyLDU0NDMzLDU0NDM0LDU0NDM1LDU0NDM2LDU0NDM3LDU0NDM4LDU0NDM5LDU0NDQwLDU0NDQyLDU0NDQzLDU0NDQ0LDU0NDQ1LDU0NDQ2LDU0NDQ3LDU0''@;'; put 'put ''NDQ4LDU0NDQ5LDU0NDUwLDU0NDUxLDU0NDUyLDU0NDUzLDU0NDU0LDU0NDU1LDU0NDU2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NDU3LDU0NDU4LDU0NDU5LDU0NDYwLDU0NDYxLDU0NDYyLDU0NDYzLDU0NDY0LDU0NDY1LDU0NDY2LDU0NDY3LDU0NDY4LDU0NDY5LDU0NDcw''@;'; put 'put ''LDU0NDcxLDU0NDcyLDU0NDczLDU0NDc0LDU0NDc1LDU0NDc3LDU0NDc4LDU0NDc5LDU0NDgxLDU0NDgyLDU0NDgzLDU0NDg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NDg2LDU0NDg3LDU0NDg4LDU0NDg5LDU0NDkwLDU0NDkxLDU0NDkzLDU0NDk0LDU0NDk2LDU0NDk3LDU0''@;'; put 'put ''NDk4LDU0NDk5LDU0NTAwLDU0NTAxLDU0NTAyLDU0NTAzLDU0NTA1LDU0NTA2LDU0NTA3LDU0NTA5LDU0NTEwLDU0NTExLDU0NTEzLDU0NTE0LDU0NTE1LDU0NTE2LDU0NTE3LDU0NTE4LDU0NTE5LDU0NTIxLDU0NTIyLDU0NTI0LDUwNjQwLDUwNjQxLDUwNjQ0LDUwNjQ4LDUwNjU2LDUwNjU3''@;'; put 'put ''LDUwNjU5LDUwNjYxLDUwNjY4LDUwNjY5LDUwNjcwLDUwNjcyLDUwNjc2LDUwNjc4LDUwNjc5LDUwNjg0LDUwNjg1LDUwNjg2LDUwNjg3LDUwNjg4LDUwNjg5LDUwNjkzLDUwNjk0LDUwNjk1LDUwNjk2LDUwNzAwLDUwNzA0LDUwNzEyLDUwNzEzLDUwNzE1LDUwNzE2LDUwNzI0LDUwNzI1LDUw''@;'; put 'put ''NzI4LDUwNzMyLDUwNzMzLDUwNzM0LDUwNzM2LDUwNzM5LDUwNzQwLDUwNzQxLDUwNzQzLDUwNzQ1LDUwNzQ3LDUwNzUyLDUwNzUzLDUwNzU2LDUwNzYwLDUwNzY4LDUwNzY5LDUwNzcxLDUwNzcyLDUwNzczLDUwNzgwLDUwNzgxLDUwNzg0LDUwNzk2LDUwNzk5LDUwODAxLDUwODA4LDUwODA5''@;'; put 'put ''LDUwODEyLDUwODE2LDUwODI0LDUwODI1LDUwODI3LDUwODI5LDUwODM2LDUwODM3LDUwODQwLDUwODQ0LDUwODUyLDUwODUzLDUwODU1LDUwODU3LDUwODY0LDUwODY1LDUwODY4LDUwODcyLDUwODczLDUwODc0LDUwODgwLDUwODgxLDUwODgzLDUwODg1LDUwODkyLDUwODkzLDUwODk2LDUw''@;'; put 'put ''OTAwLDUwOTA4LDUwOTA5LDUwOTEyLDUwOTEzLDUwOTIwLDU0NTI2LDU0NTI3LDU0NTI4LDU0NTI5LDU0NTMwLDU0NTMxLDU0NTMzLDU0NTM0LDU0NTM1LDU0NTM3LDU0NTM4LDU0NTM5LDU0NTQxLDU0NTQyLDU0NTQzLDU0NTQ0LDU0NTQ1LDU0NTQ2LDU0NTQ3LDU0NTUwLDU0NTUyLDU0NTUz''@;'; put 'put ''LDU0NTU0LDU0NTU1LDU0NTU2LDU0NTU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NTU4LDU0NTU5LDU0NTYwLDU0NTYxLDU0NTYyLDU0NTYzLDU0NTY0LDU0NTY1LDU0NTY2LDU0NTY3LDU0NTY4LDU0NTY5LDU0NTcwLDU0NTcxLDU0NTcyLDU0NTczLDU0NTc0LDU0NTc1LDU0''@;'; put 'put ''NTc2LDU0NTc3LDU0NTc4LDU0NTc5LDU0NTgwLDU0NTgxLDU0NTgyLDU0NTgzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NTg0LDU0NTg1LDU0NTg2LDU0NTg3LDU0NTkwLDU0NTkxLDU0NTkzLDU0NTk0LDU0NTk1LDU0NTk3LDU0NTk4LDU0NTk5LDU0NjAwLDU0NjAxLDU0NjAy''@;'; put 'put ''LDU0NjAzLDU0NjA2LDU0NjA4LDU0NjEwLDU0NjExLDU0NjEyLDU0NjEzLDU0NjE0LDU0NjE1LDU0NjE4LDU0NjE5LDU0NjIxLDU0NjIyLDU0NjIzLDU0NjI1LDU0NjI2LDU0NjI3LDUwOTIxLDUwOTI0LDUwOTI4LDUwOTM2LDUwOTM3LDUwOTQxLDUwOTQ4LDUwOTQ5LDUwOTUyLDUwOTU2LDUw''@;'; put 'put ''OTY0LDUwOTY1LDUwOTY3LDUwOTY5LDUwOTc2LDUwOTc3LDUwOTgwLDUwOTg0LDUwOTkyLDUwOTkzLDUwOTk1LDUwOTk3LDUwOTk5LDUxMDA0LDUxMDA1LDUxMDA4LDUxMDEyLDUxMDE4LDUxMDIwLDUxMDIxLDUxMDIzLDUxMDI1LDUxMDI2LDUxMDI3LDUxMDI4LDUxMDI5LDUxMDMwLDUxMDMx''@;'; put 'put ''LDUxMDMyLDUxMDM2LDUxMDQwLDUxMDQ4LDUxMDUxLDUxMDYwLDUxMDYxLDUxMDY0LDUxMDY4LDUxMDY5LDUxMDcwLDUxMDc1LDUxMDc2LDUxMDc3LDUxMDc5LDUxMDgwLDUxMDgxLDUxMDgyLDUxMDg2LDUxMDg4LDUxMDg5LDUxMDkyLDUxMDk0LDUxMDk1LDUxMDk2LDUxMDk4LDUxMTA0LDUx''@;'; put 'put ''MTA1LDUxMTA3LDUxMTA4LDUxMTA5LDUxMTEwLDUxMTE2LDUxMTE3LDUxMTIwLDUxMTI0LDUxMTMyLDUxMTMzLDUxMTM1LDUxMTM2LDUxMTM3LDUxMTQ0LDUxMTQ1LDUxMTQ4LDUxMTUwLDUxMTUyLDUxMTYwLDUxMTY1LDUxMTcyLDUxMTc2LDUxMTgwLDUxMjAwLDUxMjAxLDUxMjA0LDUxMjA4''@;'; put 'put ''LDUxMjEwLDU0NjI4LDU0NjMwLDU0NjMxLDU0NjM0LDU0NjM2LDU0NjM4LDU0NjM5LDU0NjQwLDU0NjQxLDU0NjQyLDU0NjQzLDU0NjQ2LDU0NjQ3LDU0NjQ5LDU0NjUwLDU0NjUxLDU0NjUzLDU0NjU0LDU0NjU1LDU0NjU2LDU0NjU3LDU0NjU4LDU0NjU5LDU0NjYyLDU0NjY2LDU0NjY3LG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NjY4LDU0NjY5LDU0NjcwLDU0NjcxLDU0NjczLDU0Njc0LDU0Njc1LDU0Njc2LDU0Njc3LDU0Njc4LDU0Njc5LDU0NjgwLDU0NjgxLDU0NjgyLDU0NjgzLDU0Njg0LDU0Njg1LDU0Njg2LDU0Njg3LDU0Njg4LDU0Njg5LDU0NjkwLDU0Njkx''@;'; put 'put ''LDU0NjkyLDU0Njk0LDU0Njk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0Njk2LDU0Njk3LDU0Njk4LDU0Njk5LDU0NzAwLDU0NzAxLDU0NzAyLDU0NzAzLDU0NzA0LDU0NzA1LDU0NzA2LDU0NzA3LDU0NzA4LDU0NzA5LDU0NzEwLDU0NzExLDU0NzEyLDU0NzEzLDU0NzE0LDU0''@;'; put 'put ''NzE1LDU0NzE2LDU0NzE3LDU0NzE4LDU0NzE5LDU0NzIwLDU0NzIxLDU0NzIyLDU0NzIzLDU0NzI0LDU0NzI1LDU0NzI2LDU0NzI3LDUxMjE2LDUxMjE3LDUxMjE5LDUxMjIxLDUxMjIyLDUxMjI4LDUxMjI5LDUxMjMyLDUxMjM2LDUxMjQ0LDUxMjQ1LDUxMjQ3LDUxMjQ5LDUxMjU2LDUxMjYw''@;'; put 'put ''LDUxMjY0LDUxMjcyLDUxMjczLDUxMjc2LDUxMjc3LDUxMjg0LDUxMzEyLDUxMzEzLDUxMzE2LDUxMzIwLDUxMzIyLDUxMzI4LDUxMzI5LDUxMzMxLDUxMzMzLDUxMzM0LDUxMzM1LDUxMzM5LDUxMzQwLDUxMzQxLDUxMzQ4LDUxMzU3LDUxMzU5LDUxMzYxLDUxMzY4LDUxMzg4LDUxMzg5LDUx''@;'; put 'put ''Mzk2LDUxNDAwLDUxNDA0LDUxNDEyLDUxNDEzLDUxNDE1LDUxNDE3LDUxNDI0LDUxNDI1LDUxNDI4LDUxNDQ1LDUxNDUyLDUxNDUzLDUxNDU2LDUxNDYwLDUxNDYxLDUxNDYyLDUxNDY4LDUxNDY5LDUxNDcxLDUxNDczLDUxNDgwLDUxNTAwLDUxNTA4LDUxNTM2LDUxNTM3LDUxNTQwLDUxNTQ0''@;'; put 'put ''LDUxNTUyLDUxNTUzLDUxNTU1LDUxNTY0LDUxNTY4LDUxNTcyLDUxNTgwLDUxNTkyLDUxNTkzLDUxNTk2LDUxNjAwLDUxNjA4LDUxNjA5LDUxNjExLDUxNjEzLDUxNjQ4LDUxNjQ5LDUxNjUyLDUxNjU1LDUxNjU2LDUxNjU4LDUxNjY0LDUxNjY1LDUxNjY3LDU0NzMwLDU0NzMxLDU0NzMzLDU0''@;'; put 'put ''NzM0LDU0NzM1LDU0NzM3LDU0NzM5LDU0NzQwLDU0NzQxLDU0NzQyLDU0NzQzLDU0NzQ2LDU0NzQ4LDU0NzUwLDU0NzUxLDU0NzUyLDU0NzUzLDU0NzU0LDU0NzU1LDU0NzU4LDU0NzU5LDU0NzYxLDU0NzYyLDU0NzYzLDU0NzY1LDU0NzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDU0NzY3LDU0NzY4LDU0NzY5LDU0NzcwLDU0NzcxLDU0Nzc0LDU0Nzc2LDU0Nzc4LDU0Nzc5LDU0NzgwLDU0NzgxLDU0NzgyLDU0NzgzLDU0Nzg2LDU0Nzg3LDU0Nzg5LDU0NzkwLDU0NzkxLDU0NzkzLDU0Nzk0LDU0Nzk1LDU0Nzk2LDU0Nzk3LDU0Nzk4LDU0Nzk5LDU0ODAyLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODA2LDU0ODA3LDU0ODA4LDU0ODA5LDU0ODEwLDU0ODExLDU0ODEzLDU0ODE0LDU0ODE1LDU0ODE3LDU0ODE4LDU0ODE5LDU0ODIxLDU0ODIyLDU0ODIzLDU0ODI0LDU0ODI1LDU0ODI2LDU0ODI3LDU0ODI4LDU0ODMwLDU0ODMxLDU0ODMyLDU0ODMz''@;'; put 'put ''LDU0ODM0LDU0ODM1LDU0ODM2LDU0ODM3LDU0ODM4LDU0ODM5LDU0ODQyLDU0ODQzLDUxNjY5LDUxNjcwLDUxNjczLDUxNjc0LDUxNjc2LDUxNjc3LDUxNjgwLDUxNjgyLDUxNjg0LDUxNjg3LDUxNjkyLDUxNjkzLDUxNjk1LDUxNjk2LDUxNjk3LDUxNzA0LDUxNzA1LDUxNzA4LDUxNzEyLDUx''@;'; put 'put ''NzIwLDUxNzIxLDUxNzIzLDUxNzI0LDUxNzI1LDUxNzMyLDUxNzM2LDUxNzUzLDUxNzg4LDUxNzg5LDUxNzkyLDUxNzk2LDUxODA0LDUxODA1LDUxODA3LDUxODA4LDUxODA5LDUxODE2LDUxODM3LDUxODQ0LDUxODY0LDUxOTAwLDUxOTAxLDUxOTA0LDUxOTA4LDUxOTE2LDUxOTE3LDUxOTE5''@;'; put 'put ''LDUxOTIxLDUxOTIzLDUxOTI4LDUxOTI5LDUxOTM2LDUxOTQ4LDUxOTU2LDUxOTc2LDUxOTg0LDUxOTg4LDUxOTkyLDUyZTMsNTIwMDEsNTIwMzMsNTIwNDAsNTIwNDEsNTIwNDQsNTIwNDgsNTIwNTYsNTIwNTcsNTIwNjEsNTIwNjgsNTIwODgsNTIwODksNTIxMjQsNTIxNTIsNTIxODAsNTIx''@;'; put 'put ''OTYsNTIxOTksNTIyMDEsNTIyMzYsNTIyMzcsNTIyNDAsNTIyNDQsNTIyNTIsNTIyNTMsNTIyNTcsNTIyNTgsNTIyNjMsNTIyNjQsNTIyNjUsNTIyNjgsNTIyNzAsNTIyNzIsNTIyODAsNTIyODEsNTIyODMsNTQ4NDUsNTQ4NDYsNTQ4NDcsNTQ4NDksNTQ4NTAsNTQ4NTEsNTQ4NTIsNTQ4NTQs''@;'; put 'put ''NTQ4NTUsNTQ4NTgsNTQ4NjAsNTQ4NjIsNTQ4NjMsNTQ4NjQsNTQ4NjYsNTQ4NjcsNTQ4NzAsNTQ4NzEsNTQ4NzMsNTQ4NzQsNTQ4NzUsNTQ4NzcsNTQ4NzgsNTQ4NzksNTQ4ODAsNTQ4ODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4ODIsNTQ4ODMsNTQ4ODQsNTQ4ODUsNTQ4''@;'; put 'put ''ODYsNTQ4ODgsNTQ4OTAsNTQ4OTEsNTQ4OTIsNTQ4OTMsNTQ4OTQsNTQ4OTUsNTQ4OTgsNTQ4OTksNTQ5MDEsNTQ5MDIsNTQ5MDMsNTQ5MDQsNTQ5MDUsNTQ5MDYsNTQ5MDcsNTQ5MDgsNTQ5MDksNTQ5MTAsNTQ5MTEsNTQ5MTIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5MTMs''@;'; put 'put ''NTQ5MTQsNTQ5MTYsNTQ5MTgsNTQ5MTksNTQ5MjAsNTQ5MjEsNTQ5MjIsNTQ5MjMsNTQ5MjYsNTQ5MjcsNTQ5MjksNTQ5MzAsNTQ5MzEsNTQ5MzMsNTQ5MzQsNTQ5MzUsNTQ5MzYsNTQ5MzcsNTQ5MzgsNTQ5MzksNTQ5NDAsNTQ5NDIsNTQ5NDQsNTQ5NDYsNTQ5NDcsNTQ5NDgsNTQ5NDksNTQ5''@;'; put 'put ''NTAsNTQ5NTEsNTQ5NTMsNTQ5NTQsNTIyODQsNTIyODUsNTIyODYsNTIyOTIsNTIyOTMsNTIyOTYsNTIzMDAsNTIzMDgsNTIzMDksNTIzMTEsNTIzMTIsNTIzMTMsNTIzMjAsNTIzMjQsNTIzMjYsNTIzMjgsNTIzMzYsNTIzNDEsNTIzNzYsNTIzNzcsNTIzODAsNTIzODQsNTIzOTIsNTIzOTMs''@;'; put 'put ''NTIzOTUsNTIzOTYsNTIzOTcsNTI0MDQsNTI0MDUsNTI0MDgsNTI0MTIsNTI0MjAsNTI0MjEsNTI0MjMsNTI0MjUsNTI0MzIsNTI0MzYsNTI0NTIsNTI0NjAsNTI0NjQsNTI0ODEsNTI0ODgsNTI0ODksNTI0OTIsNTI0OTYsNTI1MDQsNTI1MDUsNTI1MDcsNTI1MDksNTI1MTYsNTI1MjAsNTI1''@;'; put 'put ''MjQsNTI1MzcsNTI1NzIsNTI1NzYsNTI1ODAsNTI1ODgsNTI1ODksNTI1OTEsNTI1OTMsNTI2MDAsNTI2MTYsNTI2MjgsNTI2MjksNTI2MzIsNTI2MzYsNTI2NDQsNTI2NDUsNTI2NDcsNTI2NDksNTI2NTYsNTI2NzYsNTI2ODQsNTI2ODgsNTI3MTIsNTI3MTYsNTI3MjAsNTI3MjgsNTI3Mjks''@;'; put 'put ''NTI3MzEsNTI3MzMsNTI3NDAsNTI3NDQsNTI3NDgsNTI3NTYsNTI3NjEsNTI3NjgsNTI3NjksNTI3NzIsNTI3NzYsNTI3ODQsNTI3ODUsNTI3ODcsNTI3ODksNTQ5NTUsNTQ5NTcsNTQ5NTgsNTQ5NTksNTQ5NjEsNTQ5NjIsNTQ5NjMsNTQ5NjQsNTQ5NjUsNTQ5NjYsNTQ5NjcsNTQ5NjgsNTQ5''@;'; put 'put ''NzAsNTQ5NzIsNTQ5NzMsNTQ5NzQsNTQ5NzUsNTQ5NzYsNTQ5NzcsNTQ5NzgsNTQ5NzksNTQ5ODIsNTQ5ODMsNTQ5ODUsNTQ5ODYsNTQ5ODcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5ODksNTQ5OTAsNTQ5OTEsNTQ5OTIsNTQ5OTQsNTQ5OTUsNTQ5OTcsNTQ5OTgsNTVlMyw1''@;'; put 'put ''NTAwMiw1NTAwMyw1NTAwNCw1NTAwNSw1NTAwNiw1NTAwNyw1NTAwOSw1NTAxMCw1NTAxMSw1NTAxMyw1NTAxNCw1NTAxNSw1NTAxNyw1NTAxOCw1NTAxOSw1NTAyMCw1NTAyMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTAyMiw1NTAyMyw1NTAyNSw1NTAyNiw1NTAyNyw1NTAy''@;'; put 'put ''OCw1NTAzMCw1NTAzMSw1NTAzMiw1NTAzMyw1NTAzNCw1NTAzNSw1NTAzOCw1NTAzOSw1NTA0MSw1NTA0Miw1NTA0Myw1NTA0NSw1NTA0Niw1NTA0Nyw1NTA0OCw1NTA0OSw1NTA1MCw1NTA1MSw1NTA1Miw1NTA1Myw1NTA1NCw1NTA1NSw1NTA1Niw1NTA1OCw1NTA1OSw1NTA2MCw1MjgyNCw1''@;'; put 'put ''MjgyNSw1MjgyOCw1MjgzMSw1MjgzMiw1MjgzMyw1Mjg0MCw1Mjg0MSw1Mjg0Myw1Mjg0NSw1Mjg1Miw1Mjg1Myw1Mjg1Niw1Mjg2MCw1Mjg2OCw1Mjg2OSw1Mjg3MSw1Mjg3Myw1Mjg4MCw1Mjg4MSw1Mjg4NCw1Mjg4OCw1Mjg5Niw1Mjg5Nyw1Mjg5OSw1MjkwMCw1MjkwMSw1MjkwOCw1Mjkw''@;'; put 'put ''OSw1MjkyOSw1Mjk2NCw1Mjk2NSw1Mjk2OCw1Mjk3MSw1Mjk3Miw1Mjk4MCw1Mjk4MSw1Mjk4Myw1Mjk4NCw1Mjk4NSw1Mjk5Miw1Mjk5Myw1Mjk5Niw1M2UzLDUzMDA4LDUzMDA5LDUzMDExLDUzMDEzLDUzMDIwLDUzMDI0LDUzMDI4LDUzMDM2LDUzMDM3LDUzMDM5LDUzMDQwLDUzMDQxLDUz''@;'; put 'put ''MDQ4LDUzMDc2LDUzMDc3LDUzMDgwLDUzMDg0LDUzMDkyLDUzMDkzLDUzMDk1LDUzMDk3LDUzMTA0LDUzMTA1LDUzMTA4LDUzMTEyLDUzMTIwLDUzMTI1LDUzMTMyLDUzMTUzLDUzMTYwLDUzMTY4LDUzMTg4LDUzMjE2LDUzMjE3LDUzMjIwLDUzMjI0LDUzMjMyLDUzMjMzLDUzMjM1LDUzMjM3''@;'; put 'put ''LDUzMjQ0LDUzMjQ4LDUzMjUyLDUzMjY1LDUzMjcyLDUzMjkzLDUzMzAwLDUzMzAxLDUzMzA0LDUzMzA4LDU1MDYxLDU1MDYyLDU1MDYzLDU1MDY2LDU1MDY3LDU1MDY5LDU1MDcwLDU1MDcxLDU1MDczLDU1MDc0LDU1MDc1LDU1MDc2LDU1MDc3LDU1MDc4LDU1MDc5LDU1MDgyLDU1MDg0LDU1''@;'; put 'put ''MDg2LDU1MDg3LDU1MDg4LDU1MDg5LDU1MDkwLDU1MDkxLDU1MDk0LDU1MDk1LDU1MDk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU1MDk4LDU1MDk5LDU1MTAxLDU1MTAyLDU1MTAzLDU1MTA0LDU1MTA1LDU1MTA2LDU1MTA3LDU1MTA5LDU1MTEwLDU1MTEyLDU1MTE0LDU1MTE1''@;'; put 'put ''LDU1MTE2LDU1MTE3LDU1MTE4LDU1MTE5LDU1MTIyLDU1MTIzLDU1MTI1LDU1MTMwLDU1MTMxLDU1MTMyLDU1MTMzLDU1MTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU1MTM1LDU1MTM4LDU1MTQwLDU1MTQyLDU1MTQzLDU1MTQ0LDU1MTQ2LDU1MTQ3LDU1MTQ5LDU1MTUwLDU1''@;'; put 'put ''MTUxLDU1MTUzLDU1MTU0LDU1MTU1LDU1MTU3LDU1MTU4LDU1MTU5LDU1MTYwLDU1MTYxLDU1MTYyLDU1MTYzLDU1MTY2LDU1MTY3LDU1MTY4LDU1MTcwLDU1MTcxLDU1MTcyLDU1MTczLDU1MTc0LDU1MTc1LDU1MTc4LDU1MTc5LDUzMzE2LDUzMzE3LDUzMzE5LDUzMzIxLDUzMzI4LDUzMzMy''@;'; put 'put ''LDUzMzM2LDUzMzQ0LDUzMzU2LDUzMzU3LDUzMzYwLDUzMzY0LDUzMzcyLDUzMzczLDUzMzc3LDUzNDEyLDUzNDEzLDUzNDE2LDUzNDIwLDUzNDI4LDUzNDI5LDUzNDMxLDUzNDMzLDUzNDQwLDUzNDQxLDUzNDQ0LDUzNDQ4LDUzNDQ5LDUzNDU2LDUzNDU3LDUzNDU5LDUzNDYwLDUzNDYxLDUz''@;'; put 'put ''NDY4LDUzNDY5LDUzNDcyLDUzNDc2LDUzNDg0LDUzNDg1LDUzNDg3LDUzNDg4LDUzNDg5LDUzNDk2LDUzNTE3LDUzNTUyLDUzNTUzLDUzNTU2LDUzNTYwLDUzNTYyLDUzNTY4LDUzNTY5LDUzNTcxLDUzNTcyLDUzNTczLDUzNTgwLDUzNTgxLDUzNTg0LDUzNTg4LDUzNTk2LDUzNTk3LDUzNTk5''@;'; put 'put ''LDUzNjAxLDUzNjA4LDUzNjEyLDUzNjI4LDUzNjM2LDUzNjQwLDUzNjY0LDUzNjY1LDUzNjY4LDUzNjcyLDUzNjgwLDUzNjgxLDUzNjgzLDUzNjg1LDUzNjkwLDUzNjkyLDUzNjk2LDUzNzIwLDUzNzQ4LDUzNzUyLDUzNzY3LDUzNzY5LDUzNzc2LDUzODA0LDUzODA1LDUzODA4LDUzODEyLDUz''@;'; put 'put ''ODIwLDUzODIxLDUzODIzLDUzODI1LDUzODMyLDUzODUyLDU1MTgxLDU1MTgyLDU1MTgzLDU1MTg1LDU1MTg2LDU1MTg3LDU1MTg4LDU1MTg5LDU1MTkwLDU1MTkxLDU1MTk0LDU1MTk2LDU1MTk4LDU1MTk5LDU1MjAwLDU1MjAxLDU1MjAyLDU1MjAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzODYwLDUzODg4LDUzODg5LDUzODkyLDUzODk2LDUzOTA0LDUzOTA1LDUzOTA5LDUzOTE2LDUzOTIwLDUzOTI0LDUzOTMyLDUzOTM3LDUzOTQ0LDUzOTQ1LDUzOTQ4LDUzOTUxLDUzOTUyLDUzOTU0LDUzOTYwLDUzOTYxLDUz''@;'; put 'put ''OTYzLDUzOTcyLDUzOTc2LDUzOTgwLDUzOTg4LDUzOTg5LDU0ZTMsNTQwMDEsNTQwMDQsNTQwMDgsNTQwMTYsNTQwMTcsNTQwMTksNTQwMjEsNTQwMjgsNTQwMjksNTQwMzAsNTQwMzIsNTQwMzYsNTQwMzgsNTQwNDQsNTQwNDUsNTQwNDcsNTQwNDgsNTQwNDksNTQwNTMsNTQwNTYsNTQwNTcs''@;'; put 'put ''NTQwNjAsNTQwNjQsNTQwNzIsNTQwNzMsNTQwNzUsNTQwNzYsNTQwNzcsNTQwODQsNTQwODUsNTQxNDAsNTQxNDEsNTQxNDQsNTQxNDgsNTQxNTYsNTQxNTcsNTQxNTksNTQxNjAsNTQxNjEsNTQxNjgsNTQxNjksNTQxNzIsNTQxNzYsNTQxODQsNTQxODUsNTQxODcsNTQxODksNTQxOTYsNTQy''@;'; put 'put ''MDAsNTQyMDQsNTQyMTIsNTQyMTMsNTQyMTYsNTQyMTcsNTQyMjQsNTQyMzIsNTQyNDEsNTQyNDMsNTQyNTIsNTQyNTMsNTQyNTYsNTQyNjAsNTQyNjgsNTQyNjksNTQyNzEsNTQyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyODAsNTQzMDEsNTQzMzYsNTQzNDAsNTQzNjQsNTQzNjgsNTQzNzIsNTQzODEsNTQzODMsNTQzOTIsNTQzOTMsNTQzOTYsNTQz''@;'; put 'put ''OTksNTQ0MDAsNTQ0MDIsNTQ0MDgsNTQ0MDksNTQ0MTEsNTQ0MTMsNTQ0MjAsNTQ0NDEsNTQ0NzYsNTQ0ODAsNTQ0ODQsNTQ0OTIsNTQ0OTUsNTQ1MDQsNTQ1MDgsNTQ1MTIsNTQ1MjAsNTQ1MjMsNTQ1MjUsNTQ1MzIsNTQ1MzYsNTQ1NDAsNTQ1NDgsNTQ1NDksNTQ1NTEsNTQ1ODgsNTQ1ODks''@;'; put 'put ''NTQ1OTIsNTQ1OTYsNTQ2MDQsNTQ2MDUsNTQ2MDcsNTQ2MDksNTQ2MTYsNTQ2MTcsNTQ2MjAsNTQ2MjQsNTQ2MjksNTQ2MzIsNTQ2MzMsNTQ2MzUsNTQ2MzcsNTQ2NDQsNTQ2NDUsNTQ2NDgsNTQ2NTIsNTQ2NjAsNTQ2NjEsNTQ2NjMsNTQ2NjQsNTQ2NjUsNTQ2NzIsNTQ2OTMsNTQ3MjgsNTQ3''@;'; put 'put ''MjksNTQ3MzIsNTQ3MzYsNTQ3MzgsNTQ3NDQsNTQ3NDUsNTQ3NDcsNTQ3NDksNTQ3NTYsNTQ3NTcsNTQ3NjAsNTQ3NjQsNTQ3NzIsNTQ3NzMsNTQ3NzUsNTQ3NzcsNTQ3ODQsNTQ3ODUsNTQ3ODgsNTQ3OTIsNTQ4MDAsNTQ4MDEsNTQ4MDMsNTQ4MDQsNTQ4MDUsNTQ4MTIsNTQ4MTYsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MjAsNTQ4MjksNTQ4NDAsNTQ4''@;'; put 'put ''NDEsNTQ4NDQsNTQ4NDgsNTQ4NTMsNTQ4NTYsNTQ4NTcsNTQ4NTksNTQ4NjEsNTQ4NjUsNTQ4NjgsNTQ4NjksNTQ4NzIsNTQ4NzYsNTQ4ODcsNTQ4ODksNTQ4OTYsNTQ4OTcsNTQ5MDAsNTQ5MTUsNTQ5MTcsNTQ5MjQsNTQ5MjUsNTQ5MjgsNTQ5MzIsNTQ5NDEsNTQ5NDMsNTQ5NDUsNTQ5NTIs''@;'; put 'put ''NTQ5NTYsNTQ5NjAsNTQ5NjksNTQ5NzEsNTQ5ODAsNTQ5ODEsNTQ5ODQsNTQ5ODgsNTQ5OTMsNTQ5OTYsNTQ5OTksNTUwMDEsNTUwMDgsNTUwMTIsNTUwMTYsNTUwMjQsNTUwMjksNTUwMzYsNTUwMzcsNTUwNDAsNTUwNDQsNTUwNTcsNTUwNjQsNTUwNjUsNTUwNjgsNTUwNzIsNTUwODAsNTUw''@;'; put 'put ''ODEsNTUwODMsNTUwODUsNTUwOTIsNTUwOTMsNTUwOTYsNTUxMDAsNTUxMDgsNTUxMTEsNTUxMTMsNTUxMjAsNTUxMjEsNTUxMjQsNTUxMjYsNTUxMjcsNTUxMjgsNTUxMjksNTUxMzYsNTUxMzcsNTUxMzksNTUxNDEsNTUxNDUsNTUxNDgsNTUxNTIsNTUxNTYsNTUxNjQsNTUxNjUsNTUxNjks''@;'; put 'put ''NTUxNzYsNTUxNzcsNTUxODAsNTUxODQsNTUxOTIsNTUxOTMsNTUxOTUsNTUxOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDI4NSwy''@;'; put 'put ''MDMzOSwyMDU1MSwyMDcyOSwyMTE1MiwyMTQ4NywyMTYyMSwyMTczMywyMjAyNSwyMzIzMywyMzQ3OCwyNjI0NywyNjU1MCwyNjU1MSwyNjYwNywyNzQ2OCwyOTYzNCwzMDE0NiwzMTI5MiwzMzQ5OSwzMzU0MCwzNDkwMywzNDk1MiwzNTM4MiwzNjA0MCwzNjMwMywzNjYwMywzNjgzOCwzOTM4''@;'; put 'put ''MSwyMTA1MSwyMTM2NCwyMTUwOCwyNDY4MiwyNDkzMiwyNzU4MCwyOTY0NywzMzA1MCwzNTI1OCwzNTI4MiwzODMwNywyMDM1NSwyMTAwMiwyMjcxOCwyMjkwNCwyMzAxNCwyNDE3OCwyNDE4NSwyNTAzMSwyNTUzNiwyNjQzOCwyNjYwNCwyNjc1MSwyODU2NywzMDI4NiwzMDQ3NSwzMDk2NSwz''@;'; put 'put ''MTI0MCwzMTQ4NywzMTc3NywzMjkyNSwzMzM5MCwzMzM5MywzNTU2MywzODI5MSwyMDA3NSwyMTkxNywyNjM1OSwyODIxMiwzMDg4MywzMTQ2OSwzMzg4MywzNTA4OCwzNDYzOCwzODgyNCwyMTIwOCwyMjM1MCwyMjU3MCwyMzg4NCwyNDg2MywyNTAyMiwyNTEyMSwyNTk1NCwyNjU3NywyNzIw''@;'; put 'put ''NCwyODE4NywyOTk3NiwzMDEzMSwzMDQzNSwzMDY0MCwzMjA1OCwzNzAzOSwzNzk2OSwzNzk3MCw0MDg1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTI4MywyMzcyNCwzMDAwMiwzMjk4NywzNzQ0MCwzODI5NiwyMTA4MywyMjUzNiwyMzAwNCwyMzcxMywyMzgzMSwyNDI0NywyNDM3OCwyNDM5NCwyNDk1MSwyNzc0MywzMDA3NCwzMDA4NiwzMTk2OCwzMjEx''@;'; put 'put ''NSwzMjE3NywzMjY1MiwzMzEwOCwzMzMxMywzNDE5MywzNTEzNywzNTYxMSwzNzYyOCwzODQ3Nyw0MDAwNywyMDE3MSwyMDIxNSwyMDQ5MSwyMDk3NywyMjYwNywyNDg4NywyNDg5NCwyNDkzNiwyNTkxMywyNzExNCwyODQzMywzMDExNywzMDM0MiwzMDQyMiwzMTYyMywzMzQ0NSwzMzk5NSw2''@;'; put 'put ''Mzc0NCwzNzc5OSwzODI4MywyMTg4OCwyMzQ1OCwyMjM1Myw2Mzc0NSwzMTkyMywzMjY5NywzNzMwMSwyMDUyMCwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTQ1NCwyNTgxOCwyNTgzMSwyODE5MiwyODg0NCwzMTA2NywzNjMxNywzNjM4Miw2Mzc0NiwzNjk4OSwzNzQ0NSwzNzYyNCwyMDA5''@;'; put 'put ''NCwyMDIxNCwyMDU4MSwyNDA2MiwyNDMxNCwyNDgzOCwyNjk2NywzMzEzNywzNDM4OCwzNjQyMywzNzc0OSwzOTQ2NywyMDA2MiwyMDYyNSwyNjQ4MCwyNjY4OCwyMDc0NSwyMTEzMywyMTEzOCwyNzI5OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDY1MiwzNzM5Miw0MDY2MCwyMTE2MywyNDYyMywzNjg1MCwyMDU1MiwyNTAwMSwyNTU4MSwyNTgwMiwyNjY4''@;'; put 'put ''NCwyNzI2OCwyODYwOCwzMzE2MCwzNTIzMywzODU0OCwyMjUzMywyOTMwOSwyOTM1NiwyOTk1NiwzMjEyMSwzMjM2NSwzMjkzNywzNTIxMSwzNTcwMCwzNjk2Myw0MDI3MywyNTIyNSwyNzc3MCwyODUwMCwzMjA4MCwzMjU3MCwzNTM2MywyMDg2MCwyNDkwNiwzMTY0NSwzNTYwOSwzNzQ2Mywz''@;'; put 'put ''Nzc3MiwyMDE0MCwyMDQzNSwyMDUxMCwyMDY3MCwyMDc0MiwyMTE4NSwyMTE5NywyMTM3NSwyMjM4NCwyMjY1OSwyNDIxOCwyNDQ2NSwyNDk1MCwyNTAwNCwyNTgwNiwyNTk2NCwyNjIyMywyNjI5OSwyNjM1NiwyNjc3NSwyODAzOSwyODgwNSwyODkxMywyOTg1NSwyOTg2MSwyOTg5OCwzMDE2''@;'; put 'put ''OSwzMDgyOCwzMDk1NiwzMTQ1NSwzMTQ3OCwzMjA2OSwzMjE0NywzMjc4OSwzMjgzMSwzMzA1MSwzMzY4NiwzNTY4NiwzNjYyOSwzNjg4NSwzNzg1NywzODkxNSwzODk2OCwzOTUxNCwzOTkxMiwyMDQxOCwyMTg0MywyMjU4NiwyMjg2NSwyMzM5NSwyMzYyMiwyNDc2MCwyNTEwNiwyNjY5MCwy''@;'; put 'put ''NjgwMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg1NiwyODMz''@;'; put 'put ''MCwzMDAyOCwzMDMyOCwzMDkyNiwzMTI5MywzMTk5NSwzMjM2MywzMjM4MCwzNTMzNiwzNTQ4OSwzNTkwMywzODU0Miw0MDM4OCwyMTQ3NiwyMTQ4MSwyMTU3OCwyMTYxNywyMjI2NiwyMjk5MywyMzM5NiwyMzYxMSwyNDIzNSwyNTMzNSwyNTkxMSwyNTkyNSwyNTk3MCwyNjI3MiwyNjU0Mywy''@;'; put 'put ''NzA3MywyNzgzNywzMDIwNCwzMDM1MiwzMDU5MCwzMTI5NSwzMjY2MCwzMjc3MSwzMjkyOSwzMzE2NywzMzUxMCwzMzUzMywzMzc3NiwzNDI0MSwzNDg2NSwzNDk5NiwzNTQ5Myw2Mzc0NywzNjc2NCwzNzY3OCwzODU5OSwzOTAxNSwzOTY0MCw0MDcyMywyMTc0MSwyNjAxMSwyNjM1NCwyNjc2''@;'; put 'put ''NywzMTI5NiwzNTg5NSw0MDI4OCwyMjI1NiwyMjM3MiwyMzgyNSwyNjExOCwyNjgwMSwyNjgyOSwyODQxNCwyOTczNiwzNDk3NCwzOTkwOCwyNzc1Miw2Mzc0OCwzOTU5MiwyMDM3OSwyMDg0NCwyMDg0OSwyMTE1MSwyMzM4MCwyNDAzNywyNDY1NiwyNDY4NSwyNTMyOSwyNTUxMSwyNTkxNSwy''@;'; put 'put ''OTY1NywzMTM1NCwzNDQ2NywzNjAwMiwzODc5OSwyMDAxOCwyMzUyMSwyNTA5NiwyNjUyNCwyOTkxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTE4NSwzMzc0NywzNTQ2MywzNTUwNiwzNjMyOCwzNjk0MiwzNzcwNywzODk4MiwyNDI3NSwyNzExMiwzNDMwMywzNzEwMSw2Mzc0OSwyMDg5NiwyMzQ0OCwyMzUzMiwyNDkzMSwyNjg3NCwyNzQ1NCwyODc0OCwy''@;'; put 'put ''OTc0MywyOTkxMiwzMTY0OSwzMjU5MiwzMzczMywzNTI2NCwzNjAxMSwzODM2NCwzOTIwOCwyMTAzOCwyNDY2OSwyNTMyNCwzNjg2NiwyMDM2MiwyMDgwOSwyMTI4MSwyMjc0NSwyNDI5MSwyNjMzNiwyNzk2MCwyODgyNiwyOTM3OCwyOTY1NCwzMTU2OCwzMzAwOSwzNzk3OSwyMTM1MCwyNTQ5''@;'; put 'put ''OSwzMjYxOSwyMDA1NCwyMDYwOCwyMjYwMiwyMjc1MCwyNDYxOCwyNDg3MSwyNTI5NiwyNzA4OCwzOTc0NSwyMzQzOSwzMjAyNCwzMjk0NSwzNjcwMywyMDEzMiwyMDY4OSwyMTY3NiwyMTkzMiwyMzMwOCwyMzk2OCwyNDAzOSwyNTg5OCwyNTkzNCwyNjY1NywyNzIxMSwyOTQwOSwzMDM1MCwz''@;'; put 'put ''MDcwMywzMjA5NCwzMjc2MSwzMzE4NCwzNDEyNiwzNDUyNywzNjYxMSwzNjY4NiwzNzA2NiwzOTE3MSwzOTUwOSwzOTg1MSwxOTk5MiwyMDAzNywyMDA2MSwyMDE2NywyMDQ2NSwyMDg1NSwyMTI0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTMxMiwyMTQ3NSwyMTQ3NywyMTY0NiwyMjAzNiwyMjM4OSwyMjQzNCwyMzQ5NSwyMzk0MywyNDI3MiwyNTA4NCwy''@;'; put 'put ''NTMwNCwyNTkzNywyNjU1MiwyNjYwMSwyNzA4MywyNzQ3MiwyNzU5MCwyNzYyOCwyNzcxNCwyODMxNywyODc5MiwyOTM5OSwyOTU5MCwyOTY5OSwzMDY1NSwzMDY5NywzMTM1MCwzMjEyNywzMjc3NywzMzI3NiwzMzI4NSwzMzI5MCwzMzUwMywzNDkxNCwzNTYzNSwzNjA5MiwzNjU0NCwzNjg4''@;'; put 'put ''MSwzNzA0MSwzNzQ3NiwzNzU1OCwzOTM3OCwzOTQ5Myw0MDE2OSw0MDQwNyw0MDg2MCwyMjI4MywyMzYxNiwzMzczOCwzODgxNiwzODgyNyw0MDYyOCwyMTUzMSwzMTM4NCwzMjY3NiwzNTAzMywzNjU1NywzNzA4OSwyMjUyOCwyMzYyNCwyNTQ5NiwzMTM5MSwyMzQ3MCwyNDMzOSwzMTM1Mywz''@;'; put 'put ''MTQwNiwzMzQyMiwzNjUyNCwyMDUxOCwyMTA0OCwyMTI0MCwyMTM2NywyMjI4MCwyNTMzMSwyNTQ1OCwyNzQwMiwyODA5OSwzMDUxOSwyMTQxMywyOTUyNywzNDE1MiwzNjQ3MCwzODM1NywyNjQyNiwyNzMzMSwyODUyOCwzNTQzNywzNjU1NiwzOTI0Myw2Mzc1MCwyNjIzMSwyNzUxMiwzNjAy''@;'; put 'put ''MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzOTc0MCw2Mzc1MSwy''@;'; put 'put ''MTQ4MywyMjMxNywyMjg2MiwyNTU0MiwyNzEzMSwyOTY3NCwzMDc4OSwzMTQxOCwzMTQyOSwzMTk5OCwzMzkwOSwzNTIxNSwzNjIxMSwzNjkxNywzODMxMiwyMTI0MywyMjM0MywzMDAyMywzMTU4NCwzMzc0MCwzNzQwNiw2Mzc1MiwyNzIyNCwyMDgxMSwyMTA2NywyMTEyNywyNTExOSwyNjg0''@;'; put 'put ''MCwyNjk5NywzODU1MywyMDY3NywyMTE1NiwyMTIyMCwyNTAyNywyNjAyMCwyNjY4MSwyNzEzNSwyOTgyMiwzMTU2MywzMzQ2NSwzMzc3MSwzNTI1MCwzNTY0MSwzNjgxNywzOTI0MSw2Mzc1MywyMDE3MCwyMjkzNSwyNTgxMCwyNjEyOSwyNzI3OCwyOTc0OCwzMTEwNSwzMTE2NSwzMzQ0OSwz''@;'; put 'put ''NDk0MiwzNDk0MywzNTE2Nyw2Mzc1NCwzNzY3MCwyMDIzNSwyMTQ1MCwyNDYxMywyNTIwMSwyNzc2MiwzMjAyNiwzMjEwMiwyMDEyMCwyMDgzNCwzMDY4NCwzMjk0MywyMDIyNSwyMDIzOCwyMDg1NCwyMDg2NCwyMTk4MCwyMjEyMCwyMjMzMSwyMjUyMiwyMjUyNCwyMjgwNCwyMjg1NSwyMjkz''@;'; put 'put ''MSwyMzQ5MiwyMzY5NiwyMzgyMiwyNDA0OSwyNDE5MCwyNDUyNCwyNTIxNiwyNjA3MSwyNjA4MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjM5OCwyNjM5OSwyNjQ2MiwyNjgyNywyNjgyMCwyNzIzMSwyNzQ1MCwyNzY4MywyNzc3MywyNzc3OCwyODEwMywyOTU5MiwyOTczNCwyOTczOCwyOTgyNiwyOTg1OSwzMDA3MiwzMDA3OSwzMDg0OSwzMDk1OSwzMTA0''@;'; put 'put ''MSwzMTA0NywzMTA0OCwzMTA5OCwzMTYzNywzMmUzLDMyMTg2LDMyNjQ4LDMyNzc0LDMyODEzLDMyOTA4LDM1MzUyLDM1NjYzLDM1OTEyLDM2MjE1LDM3NjY1LDM3NjY4LDM5MTM4LDM5MjQ5LDM5NDM4LDM5NDM5LDM5NTI1LDQwNTk0LDMyMjAyLDIwMzQyLDIxNTEzLDI1MzI2LDI2NzA4LDM3''@;'; put 'put ''MzI5LDIxOTMxLDIwNzk0LDYzNzU1LDYzNzU2LDIzMDY4LDI1MDYyLDYzNzU3LDI1Mjk1LDI1MzQzLDYzNzU4LDYzNzU5LDYzNzYwLDYzNzYxLDYzNzYyLDYzNzYzLDM3MDI3LDYzNzY0LDYzNzY1LDYzNzY2LDYzNzY3LDYzNzY4LDM1NTgyLDYzNzY5LDYzNzcwLDYzNzcxLDYzNzcyLDI2MjYy''@;'; put 'put ''LDYzNzczLDI5MDE0LDYzNzc0LDYzNzc1LDM4NjI3LDYzNzc2LDI1NDIzLDI1NDY2LDIxMzM1LDYzNzc3LDI2NTExLDI2OTc2LDI4Mjc1LDYzNzc4LDMwMDA3LDYzNzc5LDYzNzgwLDYzNzgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyMDEzLDYzNzgyLDYzNzgzLDM0OTMwLDIyMjE4LDIzMDY0LDYzNzg0LDYzNzg1LDYzNzg2LDYzNzg3LDYzNzg4LDIwMDM1''@;'; put 'put ''LDYzNzg5LDIwODM5LDIyODU2LDI2NjA4LDMyNzg0LDYzNzkwLDIyODk5LDI0MTgwLDI1NzU0LDMxMTc4LDI0NTY1LDI0Njg0LDI1Mjg4LDI1NDY3LDIzNTI3LDIzNTExLDIxMTYyLDYzNzkxLDIyOTAwLDI0MzYxLDI0NTk0LDYzNzkyLDYzNzkzLDYzNzk0LDI5Nzg1LDYzNzk1LDYzNzk2LDYz''@;'; put 'put ''Nzk3LDYzNzk4LDYzNzk5LDYzODAwLDM5Mzc3LDYzODAxLDYzODAyLDYzODAzLDYzODA0LDYzODA1LDYzODA2LDYzODA3LDYzODA4LDYzODA5LDYzODEwLDYzODExLDI4NjExLDYzODEyLDYzODEzLDMzMjE1LDM2Nzg2LDI0ODE3LDYzODE0LDYzODE1LDMzMTI2LDYzODE2LDYzODE3LDIzNjE1''@;'; put 'put ''LDYzODE4LDYzODE5LDYzODIwLDYzODIxLDYzODIyLDYzODIzLDYzODI0LDYzODI1LDIzMjczLDM1MzY1LDI2NDkxLDMyMDE2LDYzODI2LDYzODI3LDYzODI4LDYzODI5LDYzODMwLDYzODMxLDMzMDIxLDYzODMyLDYzODMzLDIzNjEyLDI3ODc3LDIxMzExLDI4MzQ2LDIyODEwLDMzNTkwLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMDI1LDIwMTUwLDIwMjk0''@;'; put 'put ''LDIxOTM0LDIyMjk2LDIyNzI3LDI0NDA2LDI2MDM5LDI2MDg2LDI3MjY0LDI3NTczLDI4MjM3LDMwNzAxLDMxNDcxLDMxNzc0LDMyMjIyLDM0NTA3LDM0OTYyLDM3MTcwLDM3NzIzLDI1Nzg3LDI4NjA2LDI5NTYyLDMwMTM2LDM2OTQ4LDIxODQ2LDIyMzQ5LDI1MDE4LDI1ODEyLDI2MzExLDI4''@;'; put 'put ''MTI5LDI4MjUxLDI4NTI1LDI4NjAxLDMwMTkyLDMyODM1LDMzMjEzLDM0MTEzLDM1MjAzLDM1NTI3LDM1Njc0LDM3NjYzLDI3Nzk1LDMwMDM1LDMxNTcyLDM2MzY3LDM2OTU3LDIxNzc2LDIyNTMwLDIyNjE2LDI0MTYyLDI1MDk1LDI1NzU4LDI2ODQ4LDMwMDcwLDMxOTU4LDM0NzM5LDQwNjgw''@;'; put 'put ''LDIwMTk1LDIyNDA4LDIyMzgyLDIyODIzLDIzNTY1LDIzNzI5LDI0MTE4LDI0NDUzLDI1MTQwLDI1ODI1LDI5NjE5LDMzMjc0LDM0OTU1LDM2MDI0LDM4NTM4LDQwNjY3LDIzNDI5LDI0NTAzLDI0NzU1LDIwNDk4LDIwOTkyLDIxMDQwLDIyMjk0LDIyNTgxLDIyNjE1LDIzNTY2LDIzNjQ4LDIz''@;'; put 'put ''Nzk4LDIzOTQ3LDI0MjMwLDI0NDY2LDI0NzY0LDI1MzYxLDI1NDgxLDI1NjIzLDI2NjkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODczLDI3MzMwLDI4MTIwLDI4MTkzLDI4MzcyLDI4NjQ0LDI5MTgyLDMwNDI4LDMwNTg1LDMxMTUzLDMxMjkxLDMzNzk2LDM1MjQxLDM2MDc3LDM2MzM5LDM2NDI0LDM2ODY3LDM2ODg0LDM2OTQ3LDM3MTE3LDM3NzA5LDM4''@;'; put 'put ''NTE4LDM4ODc2LDI3NjAyLDI4Njc4LDI5MjcyLDI5MzQ2LDI5NTQ0LDMwNTYzLDMxMTY3LDMxNzE2LDMyNDExLDM1NzEyLDIyNjk3LDI0Nzc1LDI1OTU4LDI2MTA5LDI2MzAyLDI3Nzg4LDI4OTU4LDI5MTI5LDM1OTMwLDM4OTMxLDIwMDc3LDMxMzYxLDIwMTg5LDIwOTA4LDIwOTQxLDIxMjA1''@;'; put 'put ''LDIxNTE2LDI0OTk5LDI2NDgxLDI2NzA0LDI2ODQ3LDI3OTM0LDI4NTQwLDMwMTQwLDMwNjQzLDMxNDYxLDMzMDEyLDMzODkxLDM3NTA5LDIwODI4LDI2MDA3LDI2NDYwLDI2NTE1LDMwMTY4LDMxNDMxLDMzNjUxLDYzODM0LDM1OTEwLDM2ODg3LDM4OTU3LDIzNjYzLDMzMjE2LDMzNDM0LDM2''@;'; put 'put ''OTI5LDM2OTc1LDM3Mzg5LDI0NDcxLDIzOTY1LDI3MjI1LDI5MTI4LDMwMzMxLDMxNTYxLDM0Mjc2LDM1NTg4LDM3MTU5LDM5NDcyLDIxODk1LDI1MDc4LDYzODM1LDMwMzEzLDMyNjQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MzY3LDM0NzQ2LDM1MDY0LDM3MDA3LDYzODM2LDI3OTMxLDI4ODg5LDI5NjYyLDMyMDk3LDMzODUzLDYzODM3LDM3MjI2LDM5''@;'; put 'put ''NDA5LDYzODM4LDIwMDk4LDIxMzY1LDI3Mzk2LDI3NDEwLDI4NzM0LDI5MjExLDM0MzQ5LDQwNDc4LDIxMDY4LDM2NzcxLDIzODg4LDI1ODI5LDI1OTAwLDI3NDE0LDI4NjUxLDMxODExLDMyNDEyLDM0MjUzLDM1MTcyLDM1MjYxLDI1Mjg5LDMzMjQwLDM0ODQ3LDI0MjY2LDI2MzkxLDI4MDEw''@;'; put 'put ''LDI5NDM2LDI5NzAxLDI5ODA3LDM0NjkwLDM3MDg2LDIwMzU4LDIzODIxLDI0NDgwLDMzODAyLDIwOTE5LDI1NTA0LDMwMDUzLDIwMTQyLDIwNDg2LDIwODQxLDIwOTM3LDI2NzUzLDI3MTUzLDMxOTE4LDMxOTIxLDMxOTc1LDMzMzkxLDM1NTM4LDM2NjM1LDM3MzI3LDIwNDA2LDIwNzkxLDIx''@;'; put 'put ''MjM3LDIxNTcwLDI0MzAwLDI0OTQyLDI1MTUwLDI2MDUzLDI3MzU0LDI4NjcwLDMxMDE4LDM0MjY4LDM0ODUxLDM4MzE3LDM5NTIyLDM5NTMwLDQwNTk5LDQwNjU0LDIxMTQ3LDI2MzEwLDI3NTExLDI4NzAxLDMxMDE5LDM2NzA2LDM4NzIyLDI0OTc2LDI1MDg4LDI1ODkxLDI4NDUxLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MDAxLDI5ODMzLDMyMjQ0LDMy''@;'; put 'put ''ODc5LDM0MDMwLDM2NjQ2LDM2ODk5LDM3NzA2LDIwOTI1LDIxMDE1LDIxMTU1LDI3OTE2LDI4ODcyLDM1MDEwLDI0MjY1LDI1OTg2LDI3NTY2LDI4NjEwLDMxODA2LDI5NTU3LDIwMTk2LDIwMjc4LDIyMjY1LDYzODM5LDIzNzM4LDIzOTk0LDI0NjA0LDI5NjE4LDMxNTMzLDMyNjY2LDMyNzE4''@;'; put 'put ''LDMyODM4LDM2ODk0LDM3NDI4LDM4NjQ2LDM4NzI4LDM4OTM2LDQwODAxLDIwMzYzLDI4NTgzLDMxMTUwLDM3MzAwLDM4NTgzLDIxMjE0LDYzODQwLDI1NzM2LDI1Nzk2LDI3MzQ3LDI4NTEwLDI4Njk2LDI5MjAwLDMwNDM5LDMyNzY5LDM0MzEwLDM0Mzk2LDM2MzM1LDM2NjEzLDM4NzA2LDM5''@;'; put 'put ''NzkxLDQwNDQyLDQwNTY1LDMwODYwLDMxMTAzLDMyMTYwLDMzNzM3LDM3NjM2LDQwNTc1LDQwNTk1LDM1NTQyLDIyNzUxLDI0MzI0LDI2NDA3LDI4NzExLDI5OTAzLDMxODQwLDMyODk0LDIwNzY5LDI4NzEyLDI5MjgyLDMwOTIyLDM2MDM0LDM2MDU4LDM2MDg0LDM4NjQ3LDIwMTAyLDIwNjk4''@;'; put 'put ''LDIzNTM0LDI0Mjc4LDI2MDA5LDI5MTM0LDMwMjc0LDMwNjM3LDMyODQyLDM0MDQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2OTg4LDM5NzE5LDQwODQ1LDIyNzQ0LDIzMTA1LDIzNjUwLDI3MTU1LDI4MTIyLDI4NDMxLDMwMjY3LDMyMDQ3LDMyMzExLDM0MDc4LDM1MTI4LDM3ODYwLDM4NDc1LDIxMTI5LDI2MDY2LDI2NjExLDI3MDYwLDI3OTY5LDI4MzE2''@;'; put 'put ''LDI4Njg3LDI5NzA1LDI5NzkyLDMwMDQxLDMwMjQ0LDMwODI3LDM1NjI4LDM5MDA2LDIwODQ1LDI1MTM0LDM4NTIwLDIwMzc0LDIwNTIzLDIzODMzLDI4MTM4LDMyMTg0LDM2NjUwLDI0NDU5LDI0OTAwLDI2NjQ3LDYzODQxLDM4NTM0LDIxMjAyLDMyOTA3LDIwOTU2LDIwOTQwLDI2OTc0LDMx''@;'; put 'put ''MjYwLDMyMTkwLDMzNzc3LDM4NTE3LDIwNDQyLDIxMDMzLDIxNDAwLDIxNTE5LDIxNzc0LDIzNjUzLDI0NzQzLDI2NDQ2LDI2NzkyLDI4MDEyLDI5MzEzLDI5NDMyLDI5NzAyLDI5ODI3LDYzODQyLDMwMTc4LDMxODUyLDMyNjMzLDMyNjk2LDMzNjczLDM1MDIzLDM1MDQxLDM3MzI0LDM3MzI4''@;'; put 'put ''LDM4NjI2LDM5ODgxLDIxNTMzLDI4NTQyLDI5MTM2LDI5ODQ4LDM0Mjk4LDM2NTIyLDM4NTYzLDQwMDIzLDQwNjA3LDI2NTE5LDI4MTA3LDI5NzQ3LDMzMjU2LDM4Njc4LDMwNzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxNDM1LDMxNTIwLDMxODkwLDI1NzA1LDI5ODAyLDMwMTk0LDMwOTA4LDMwOTUyLDM5MzQwLDM5NzY0LDQwNjM1LDIzNTE4LDI0MTQ5''@;'; put 'put ''LDI4NDQ4LDMzMTgwLDMzNzA3LDM3ZTMsMTk5NzUsMjEzMjUsMjMwODEsMjQwMTgsMjQzOTgsMjQ5MzAsMjU0MDUsMjYyMTcsMjYzNjQsMjg0MTUsMjg0NTksMjg3NzEsMzA2MjIsMzM4MzYsMzQwNjcsMzQ4NzUsMzY2MjcsMzkyMzcsMzk5OTUsMjE3ODgsMjUyNzMsMjY0MTEsMjc4MTksMzM1''@;'; put 'put ''NDUsMzUxNzgsMzg3NzgsMjAxMjksMjI5MTYsMjQ1MzYsMjQ1MzcsMjYzOTUsMzIxNzgsMzI1OTYsMzM0MjYsMzM1NzksMzM3MjUsMzY2MzgsMzcwMTcsMjI0NzUsMjI5NjksMjMxODYsMjM1MDQsMjYxNTEsMjY1MjIsMjY3NTcsMjc1OTksMjkwMjgsMzI2MjksMzYwMjMsMzYwNjcsMzY5OTMs''@;'; put 'put ''Mzk3NDksMzMwMzIsMzU5NzgsMzg0NzYsMzk0ODgsNDA2MTMsMjMzOTEsMjc2NjcsMjk0NjcsMzA0NTAsMzA0MzEsMzM4MDQsMjA5MDYsMzUyMTksMjA4MTMsMjA4ODUsMjExOTMsMjY4MjUsMjc3OTYsMzA0NjgsMzA0OTYsMzIxOTEsMzIyMzYsMzg3NTQsNDA2MjksMjgzNTcsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzQwNjUsMjA5MDEsMjE1MTcsMjE2Mjks''@;'; put 'put ''MjYxMjYsMjYyNjksMjY5MTksMjgzMTksMzAzOTksMzA2MDksMzM1NTksMzM5ODYsMzQ3MTksMzcyMjUsMzc1MjgsNDAxODAsMzQ5NDYsMjAzOTgsMjA4ODIsMjEyMTUsMjI5ODIsMjQxMjUsMjQ5MTcsMjU3MjAsMjU3MjEsMjYyODYsMjY1NzYsMjcxNjksMjc1OTcsMjc2MTEsMjkyNzksMjky''@;'; put 'put ''ODEsMjk3NjEsMzA1MjAsMzA2ODMsMzI3OTEsMzM0NjgsMzM1NDEsMzU1ODQsMzU2MjQsMzU5ODAsMjY0MDgsMjc3OTIsMjkyODcsMzA0NDYsMzA1NjYsMzEzMDIsNDAzNjEsMjc1MTksMjc3OTQsMjI4MTgsMjY0MDYsMzM5NDUsMjEzNTksMjI2NzUsMjI5MzcsMjQyODcsMjU1NTEsMjYxNjQs''@;'; put 'put ''MjY0ODMsMjgyMTgsMjk0ODMsMzE0NDcsMzM0OTUsMzc2NzIsMjEyMDksMjQwNDMsMjUwMDYsMjUwMzUsMjUwOTgsMjUyODcsMjU3NzEsMjYwODAsMjY5NjksMjc0OTQsMjc1OTUsMjg5NjEsMjk2ODcsMzAwNDUsMzIzMjYsMzMzMTAsMzM1MzgsMzQxNTQsMzU0OTEsMzYwMzEsMzg2OTUsNDAy''@;'; put 'put ''ODksMjI2OTYsNDA2NjQsMjA0OTcsMjEwMDYsMjE1NjMsMjE4MzksMjU5OTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjc3NjYsMzIwMTAsMzIwMTEsMzI4NjIsMzQ0NDIsMzgyNzIsMzg2MzksMjEyNDcsMjc3OTcsMjkyODksMjE2MTksMjMxOTQsMjM2MTQsMjM4ODMsMjQzOTYsMjQ0OTQsMjY0MTAsMjY4MDYsMjY5NzksMjgyMjAsMjgyMjgsMzA0NzMsMzE4''@;'; put 'put ''NTksMzI2NTQsMzQxODMsMzU1OTgsMzY4NTUsMzg3NTMsNDA2OTIsMjM3MzUsMjQ3NTgsMjQ4NDUsMjUwMDMsMjU5MzUsMjYxMDcsMjYxMDgsMjc2NjUsMjc4ODcsMjk1OTksMjk2NDEsMzIyMjUsMzgyOTIsMjM0OTQsMzQ1ODgsMzU2MDAsMjEwODUsMjEzMzgsMjUyOTMsMjU2MTUsMjU3Nzgs''@;'; put 'put ''MjY0MjAsMjcxOTIsMjc4NTAsMjk2MzIsMjk4NTQsMzE2MzYsMzE4OTMsMzIyODMsMzMxNjIsMzMzMzQsMzQxODAsMzY4NDMsMzg2NDksMzkzNjEsMjAyNzYsMjEzMjIsMjE0NTMsMjE0NjcsMjUyOTIsMjU2NDQsMjU4NTYsMjYwMDEsMjcwNzUsMjc4ODYsMjg1MDQsMjk2NzcsMzAwMzYsMzAy''@;'; put 'put ''NDIsMzA0MzYsMzA0NjAsMzA5MjgsMzA5NzEsMzEwMjAsMzIwNzAsMzMzMjQsMzQ3ODQsMzY4MjAsMzg5MzAsMzkxNTEsMjExODcsMjUzMDAsMjU3NjUsMjgxOTYsMjg0OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzAzMzIsMzYyOTksMzcyOTcsMzc0NzQsMzk2NjIsMzk3NDcsMjA1MTUsMjA2MjEsMjIzNDYsMjI5NTIsMjM1OTIsMjQxMzUsMjQ0MzksMjUx''@;'; put 'put ''NTEsMjU5MTgsMjYwNDEsMjYwNDksMjYxMjEsMjY1MDcsMjcwMzYsMjgzNTQsMzA5MTcsMzIwMzMsMzI5MzgsMzMxNTIsMzMzMjMsMzM0NTksMzM5NTMsMzQ0NDQsMzUzNzAsMzU2MDcsMzcwMzAsMzg0NTAsNDA4NDgsMjA0OTMsMjA0NjcsNjM4NDMsMjI1MjEsMjQ0NzIsMjUzMDgsMjU0OTAs''@;'; put 'put ''MjY0NzksMjgyMjcsMjg5NTMsMzA0MDMsMzI5NzIsMzI5ODYsMzUwNjAsMzUwNjEsMzUwOTcsMzYwNjQsMzY2NDksMzcxOTcsMzg1MDYsMjAyNzEsMjAzMzYsMjQwOTEsMjY1NzUsMjY2NTgsMzAzMzMsMzAzMzQsMzk3NDgsMjQxNjEsMjcxNDYsMjkwMzMsMjkxNDAsMzAwNTgsNjM4NDQsMzIz''@;'; put 'put ''MjEsMzQxMTUsMzQyODEsMzkxMzIsMjAyNDAsMzE1NjcsMzI2MjQsMzgzMDksMjA5NjEsMjQwNzAsMjY4MDUsMjc3MTAsMjc3MjYsMjc4NjcsMjkzNTksMzE2ODQsMzM1MzksMjc4NjEsMjk3NTQsMjA3MzEsMjExMjgsMjI3MjEsMjU4MTYsMjcyODcsMjk4NjMsMzAyOTQsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzA4ODcsMzQzMjcsMzgzNzAsMzg3MTMsNjM4''@;'; put 'put ''NDUsMjEzNDIsMjQzMjEsMzU3MjIsMzY3NzYsMzY3ODMsMzcwMDIsMjEwMjksMzA2MjksNDAwMDksNDA3MTIsMTk5OTMsMjA0ODIsMjA4NTMsMjM2NDMsMjQxODMsMjYxNDIsMjYxNzAsMjY1NjQsMjY4MjEsMjg4NTEsMjk5NTMsMzAxNDksMzExNzcsMzE0NTMsMzY2NDcsMzkyMDAsMzk0MzIs''@;'; put 'put ''MjA0NDUsMjI1NjEsMjI1NzcsMjM1NDIsMjYyMjIsMjc0OTMsMjc5MjEsMjgyODIsMjg1NDEsMjk2NjgsMjk5OTUsMzM3NjksMzUwMzYsMzUwOTEsMzU2NzYsMzY2MjgsMjAyMzksMjA2OTMsMjEyNjQsMjEzNDAsMjM0NDMsMjQ0ODksMjYzODEsMzExMTksMzMxNDUsMzM1ODMsMzQwNjgsMzUw''@;'; put 'put ''NzksMzUyMDYsMzY2NjUsMzY2NjcsMzkzMzMsMzk5NTQsMjY0MTIsMjAwODYsMjA0NzIsMjI4NTcsMjM1NTMsMjM3OTEsMjM3OTIsMjU0NDcsMjY4MzQsMjg5MjUsMjkwOTAsMjk3MzksMzIyOTksMzQwMjgsMzQ1NjIsMzY4OTgsMzc1ODYsNDAxNzksMTk5ODEsMjAxODQsMjA0NjMsMjA2MTMs''@;'; put 'put ''MjEwNzgsMjExMDMsMjE1NDIsMjE2NDgsMjI0OTYsMjI4MjcsMjMxNDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjMzODYsMjM0MTMsMjM1MDAsMjQyMjAsNjM4NDYsMjUyMDYsMjU5NzUsMjYwMjMsMjgwMTQsMjgzMjUsMjkyMzgsMzE1MjYsMzE4MDcsMzI1NjYsMzMxMDQsMzMxMDUsMzMxNzgsMzMzNDQsMzM0MzMsMzM3MDUsMzUzMzEsMzZlMywzNjA3MCwz''@;'; put 'put ''NjA5MSwzNjIxMiwzNjI4MiwzNzA5NiwzNzM0MCwzODQyOCwzODQ2OCwzOTM4NSw0MDE2NywyMTI3MSwyMDk5OCwyMTU0NSwyMjEzMiwyMjcwNywyMjg2OCwyMjg5NCwyNDU3NSwyNDk5NiwyNTE5OCwyNjEyOCwyNzc3NCwyODk1NCwzMDQwNiwzMTg4MSwzMTk2NiwzMjAyNywzMzQ1MiwzNjAz''@;'; put 'put ''MywzODY0MCw2Mzg0NywyMDMxNSwyNDM0MywyNDQ0NywyNTI4MiwyMzg0OSwyNjM3OSwyNjg0MiwzMDg0NCwzMjMyMyw0MDMwMCwxOTk4OSwyMDYzMywyMTI2OSwyMTI5MCwyMTMyOSwyMjkxNSwyMzEzOCwyNDE5OSwyNDc1NCwyNDk3MCwyNTE2MSwyNTIwOSwyNmUzLDI2NTAzLDI3MDQ3LDI3''@;'; put 'put ''NjA0LDI3NjA2LDI3NjA3LDI3NjA4LDI3ODMyLDYzODQ4LDI5NzQ5LDMwMjAyLDMwNzM4LDMwODY1LDMxMTg5LDMxMTkyLDMxODc1LDMyMjAzLDMyNzM3LDMyOTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMzMDg2LDMzMjE4LDMzNzc4LDM0NTg2LDM1MDQ4LDM1NTEzLDM1NjkyLDM2MDI3LDM3MTQ1LDM4NzUwLDM5MTMxLDQwNzYzLDIyMTg4LDIzMzM4LDI0''@;'; put 'put ''NDI4LDI1OTk2LDI3MzE1LDI3NTY3LDI3OTk2LDI4NjU3LDI4NjkzLDI5Mjc3LDI5NjEzLDM2MDA3LDM2MDUxLDM4OTcxLDI0OTc3LDI3NzAzLDMyODU2LDM5NDI1LDIwMDQ1LDIwMTA3LDIwMTIzLDIwMTgxLDIwMjgyLDIwMjg0LDIwMzUxLDIwNDQ3LDIwNzM1LDIxNDkwLDIxNDk2LDIxNzY2''@;'; put 'put ''LDIxOTg3LDIyMjM1LDIyNzYzLDIyODgyLDIzMDU3LDIzNTMxLDIzNTQ2LDIzNTU2LDI0MDUxLDI0MTA3LDI0NDczLDI0NjA1LDI1NDQ4LDI2MDEyLDI2MDMxLDI2NjE0LDI2NjE5LDI2Nzk3LDI3NTE1LDI3ODAxLDI3ODYzLDI4MTk1LDI4NjgxLDI5NTA5LDMwNzIyLDMxMDM4LDMxMDQwLDMx''@;'; put 'put ''MDcyLDMxMTY5LDMxNzIxLDMyMDIzLDMyMTE0LDMyOTAyLDMzMjkzLDMzNjc4LDM0MDAxLDM0NTAzLDM1MDM5LDM1NDA4LDM1NDIyLDM1NjEzLDM2MDYwLDM2MTk4LDM2NzgxLDM3MDM0LDM5MTY0LDM5MzkxLDQwNjA1LDIxMDY2LDYzODQ5LDI2Mzg4LDYzODUwLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwNjMyLDIxMDM0LDIzNjY1LDI1OTU1LDI3NzMzLDI5''@;'; put 'put ''NjQyLDI5OTg3LDMwMTA5LDMxNjM5LDMzOTQ4LDM3MjQwLDM4NzA0LDIwMDg3LDI1NzQ2LDI3NTc4LDI5MDIyLDM0MjE3LDE5OTc3LDYzODUxLDI2NDQxLDI2ODYyLDI4MTgzLDMzNDM5LDM0MDcyLDM0OTIzLDI1NTkxLDI4NTQ1LDM3Mzk0LDM5MDg3LDE5OTc4LDIwNjYzLDIwNjg3LDIwNzY3''@;'; put 'put ''LDIxODMwLDIxOTMwLDIyMDM5LDIzMzYwLDIzNTc3LDIzNzc2LDI0MTIwLDI0MjAyLDI0MjI0LDI0MjU4LDI0ODE5LDI2NzA1LDI3MjMzLDI4MjQ4LDI5MjQ1LDI5MjQ4LDI5Mzc2LDMwNDU2LDMxMDc3LDMxNjY1LDMyNzI0LDM1MDU5LDM1MzE2LDM1NDQzLDM1OTM3LDM2MDYyLDM4Njg0LDIy''@;'; put 'put ''NjIyLDI5ODg1LDM2MDkzLDIxOTU5LDYzODUyLDMxMzI5LDMyMDM0LDMzMzk0LDI5Mjk4LDI5OTgzLDI5OTg5LDYzODUzLDMxNTEzLDIyNjYxLDIyNzc5LDIzOTk2LDI0MjA3LDI0MjQ2LDI0NDY0LDI0NjYxLDI1MjM0LDI1NDcxLDI1OTMzLDI2MjU3LDI2MzI5LDI2MzYwLDI2NjQ2LDI2ODY2''@;'; put 'put ''LDI5MzEyLDI5NzkwLDMxNTk4LDMyMTEwLDMyMjE0LDMyNjI2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDMyOTk3LDMzMjk4LDM0MjIzLDM1MTk5LDM1NDc1LDM2ODkzLDM3NjA0LDQwNjUzLDQwNzM2LDIyODA1LDIyODkzLDI0MTA5LDI0Nzk2LDI2MTMyLDI2MjI3LDI2NTEyLDI3NzI4LDI4MTAxLDI4NTExLDMwNzA3LDMwODg5LDMzOTkwLDM3MzIzLDM3Njc1''@;'; put 'put ''LDIwMTg1LDIwNjgyLDIwODA4LDIxODkyLDIzMzA3LDIzNDU5LDI1MTU5LDI1OTgyLDI2MDU5LDI4MjEwLDI5MDUzLDI5Njk3LDI5NzY0LDI5ODMxLDI5ODg3LDMwMzE2LDMxMTQ2LDMyMjE4LDMyMzQxLDMyNjgwLDMzMTQ2LDMzMjAzLDMzMzM3LDM0MzMwLDM0Nzk2LDM1NDQ1LDM2MzIzLDM2''@;'; put 'put ''OTg0LDM3NTIxLDM3OTI1LDM5MjQ1LDM5ODU0LDIxMzUyLDIzNjMzLDI2OTY0LDI3ODQ0LDI3OTQ1LDI4MjAzLDMzMjkyLDM0MjAzLDM1MTMxLDM1MzczLDM1NDk4LDM4NjM0LDQwODA3LDIxMDg5LDI2Mjk3LDI3NTcwLDMyNDA2LDM0ODE0LDM2MTA5LDM4Mjc1LDM4NDkzLDI1ODg1LDI4MDQx''@;'; put 'put ''LDI5MTY2LDYzODU0LDIyNDc4LDIyOTk1LDIzNDY4LDI0NjE1LDI0ODI2LDI1MTA0LDI2MTQzLDI2MjA3LDI5NDgxLDI5Njg5LDMwNDI3LDMwNDY1LDMxNTk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyODU0LDMyODgyLDMzMTI1LDM1NDg4LDM3MjY2LDE5OTkwLDIxMjE4LDI3NTA2LDI3OTI3LDMxMjM3LDMxNTQ1LDMyMDQ4LDYzODU1LDM2MDE2LDIxNDg0''@;'; put 'put ''LDIyMDYzLDIyNjA5LDIzNDc3LDIzNTY3LDIzNTY5LDI0MDM0LDI1MTUyLDI1NDc1LDI1NjIwLDI2MTU3LDI2ODAzLDI3ODM2LDI4MDQwLDI4MzM1LDI4NzAzLDI4ODM2LDI5MTM4LDI5OTkwLDMwMDk1LDMwMDk0LDMwMjMzLDMxNTA1LDMxNzEyLDMxNzg3LDMyMDMyLDMyMDU3LDM0MDkyLDM0''@;'; put 'put ''MTU3LDM0MzExLDM1MzgwLDM2ODc3LDM2OTYxLDM3MDQ1LDM3NTU5LDM4OTAyLDM5NDc5LDIwNDM5LDIzNjYwLDI2NDYzLDI4MDQ5LDMxOTAzLDMyMzk2LDM1NjA2LDM2MTE4LDM2ODk1LDIzNDAzLDI0MDYxLDI1NjEzLDMzOTg0LDM2OTU2LDM5MTM3LDI5NTc1LDIzNDM1LDI0NzMwLDI2NDk0''@;'; put 'put ''LDI4MTI2LDM1MzU5LDM1NDk0LDM2ODY1LDM4OTI0LDIxMDQ3LDYzODU2LDI4NzUzLDMwODYyLDM3NzgyLDM0OTI4LDM3MzM1LDIwNDYyLDIxNDYzLDIyMDEzLDIyMjM0LDIyNDAyLDIyNzgxLDIzMjM0LDIzNDMyLDIzNzIzLDIzNzQ0LDI0MTAxLDI0ODMzLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI1MTAxLDI1MTYzLDI1NDgwLDI1NjI4LDI1OTEwLDI1OTc2''@;'; put 'put ''LDI3MTkzLDI3NTMwLDI3NzAwLDI3OTI5LDI4NDY1LDI5MTU5LDI5NDE3LDI5NTYwLDI5NzAzLDI5ODc0LDMwMjQ2LDMwNTYxLDMxMTY4LDMxMzE5LDMxNDY2LDMxOTI5LDMyMTQzLDMyMTcyLDMyMzUzLDMyNjcwLDMzMDY1LDMzNTg1LDMzOTM2LDM0MDEwLDM0MjgyLDM0OTY2LDM1NTA0LDM1''@;'; put 'put ''NzI4LDM2NjY0LDM2OTMwLDM2OTk1LDM3MjI4LDM3NTI2LDM3NTYxLDM4NTM5LDM4NTY3LDM4NTY4LDM4NjE0LDM4NjU2LDM4OTIwLDM5MzE4LDM5NjM1LDM5NzA2LDIxNDYwLDIyNjU0LDIyODA5LDIzNDA4LDIzNDg3LDI4MTEzLDI4NTA2LDI5MDg3LDI5NzI5LDI5ODgxLDMyOTAxLDMzNzg5''@;'; put 'put ''LDI0MDMzLDI0NDU1LDI0NDkwLDI0NjQyLDI2MDkyLDI2NjQyLDI2OTkxLDI3MjE5LDI3NTI5LDI3OTU3LDI4MTQ3LDI5NjY3LDMwNDYyLDMwNjM2LDMxNTY1LDMyMDIwLDMzMDU5LDMzMzA4LDMzNjAwLDM0MDM2LDM0MTQ3LDM1NDI2LDM1NTI0LDM3MjU1LDM3NjYyLDM4OTE4LDM5MzQ4LDI1''@;'; put 'put ''MTAwLDM0ODk5LDM2ODQ4LDM3NDc3LDIzODE1LDIzODQ3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDIzOTEzLDI5NzkxLDMzMTgxLDM0NjY0LDI4NjI5LDI1MzQyLDMyNzIyLDM1MTI2LDM1MTg2LDE5OTk4LDIwMDU2LDIwNzExLDIxMjEzLDIxMzE5LDI1MjE1LDI2MTE5LDMyMzYxLDM0ODIxLDM4NDk0LDIwMzY1LDIxMjczLDIyMDcwLDIyOTg3LDIzMjA0LDIz''@;'; put 'put ''NjA4LDIzNjMwLDIzNjI5LDI0MDY2LDI0MzM3LDI0NjQzLDI2MDQ1LDI2MTU5LDI2MTc4LDI2NTU4LDI2NjEyLDI5NDY4LDMwNjkwLDMxMDM0LDMyNzA5LDMzOTQwLDMzOTk3LDM1MjIyLDM1NDMwLDM1NDMzLDM1NTUzLDM1OTI1LDM1OTYyLDIyNTE2LDIzNTA4LDI0MzM1LDI0Njg3LDI1MzI1''@;'; put 'put ''LDI2ODkzLDI3NTQyLDI4MjUyLDI5MDYwLDMxNjk4LDM0NjQ1LDM1NjcyLDM2NjA2LDM5MTM1LDM5MTY2LDIwMjgwLDIwMzUzLDIwNDQ5LDIxNjI3LDIzMDcyLDIzNDgwLDI0ODkyLDI2MDMyLDI2MjE2LDI5MTgwLDMwMDAzLDMxMDcwLDMyMDUxLDMzMTAyLDMzMjUxLDMzNjg4LDM0MjE4LDM0''@;'; put 'put ''MjU0LDM0NTYzLDM1MzM4LDM2NTIzLDM2NzYzLDYzODU3LDM2ODA1LDIyODMzLDIzNDYwLDIzNTI2LDI0NzEzLDIzNTI5LDIzNTYzLDI0NTE1LDI3Nzc3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzODU4LDI4MTQ1LDI4NjgzLDI5OTc4LDMzNDU1LDM1NTc0LDIwMTYwLDIxMzEzLDYzODU5LDM4NjE3LDI3NjYzLDIwMTI2LDIwNDIwLDIwODE4LDIxODU0LDIz''@;'; put 'put ''MDc3LDIzNzg0LDI1MTA1LDI5MjczLDMzNDY5LDMzNzA2LDM0NTU4LDM0OTA1LDM1MzU3LDM4NDYzLDM4NTk3LDM5MTg3LDQwMjAxLDQwMjg1LDIyNTM4LDIzNzMxLDIzOTk3LDI0MTMyLDI0ODAxLDI0ODUzLDI1NTY5LDI3MTM4LDI4MTk3LDM3MTIyLDM3NzE2LDM4OTkwLDM5OTUyLDQwODIz''@;'; put 'put ''LDIzNDMzLDIzNzM2LDI1MzUzLDI2MTkxLDI2Njk2LDMwNTI0LDM4NTkzLDM4Nzk3LDM4OTk2LDM5ODM5LDI2MDE3LDM1NTg1LDM2NTU1LDM4MzMyLDIxODEzLDIzNzIxLDI0MDIyLDI0MjQ1LDI2MjYzLDMwMjg0LDMzNzgwLDM4MzQzLDIyNzM5LDI1Mjc2LDI5MzkwLDQwMjMyLDIwMjA4LDIy''@;'; put 'put ''ODMwLDI0NTkxLDI2MTcxLDI3NTIzLDMxMjA3LDQwMjMwLDIxMzk1LDIxNjk2LDIyNDY3LDIzODMwLDI0ODU5LDI2MzI2LDI4MDc5LDMwODYxLDMzNDA2LDM4NTUyLDM4NzI0LDIxMzgwLDI1MjEyLDI1NDk0LDI4MDgyLDMyMjY2LDMzMDk5LDM4OTg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3Mzg3LDMyNTg4LDQwMzY3LDQwNDc0LDIwMDYzLDIwNTM5LDIw''@;'; put 'put ''OTE4LDIyODEyLDI0ODI1LDI1NTkwLDI2OTI4LDI5MjQyLDMyODIyLDYzODYwLDM3MzI2LDI0MzY5LDYzODYxLDYzODYyLDMyMDA0LDMzNTA5LDMzOTAzLDMzOTc5LDM0Mjc3LDM2NDkzLDYzODYzLDIwMzM1LDYzODY0LDYzODY1LDIyNzU2LDIzMzYzLDI0NjY1LDI1NTYyLDI1ODgwLDI1OTY1''@;'; put 'put ''LDI2MjY0LDYzODY2LDI2OTU0LDI3MTcxLDI3OTE1LDI4NjczLDI5MDM2LDMwMTYyLDMwMjIxLDMxMTU1LDMxMzQ0LDYzODY3LDMyNjUwLDYzODY4LDM1MTQwLDYzODY5LDM1NzMxLDM3MzEyLDM4NTI1LDYzODcwLDM5MTc4LDIyMjc2LDI0NDgxLDI2MDQ0LDI4NDE3LDMwMjA4LDMxMTQyLDM1''@;'; put 'put ''NDg2LDM5MzQxLDM5NzcwLDQwODEyLDIwNzQwLDI1MDE0LDI1MjMzLDI3Mjc3LDMzMjIyLDIwNTQ3LDIyNTc2LDI0NDIyLDI4OTM3LDM1MzI4LDM1NTc4LDIzNDIwLDM0MzI2LDIwNDc0LDIwNzk2LDIyMTk2LDIyODUyLDI1NTEzLDI4MTUzLDIzOTc4LDI2OTg5LDIwODcwLDIwMTA0LDIwMzEz''@;'; put 'put ''LDYzODcxLDYzODcyLDYzODczLDIyOTE0LDYzODc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDYzODc1LDI3NDg3LDI3NzQxLDYzODc2LDI5ODc3LDMwOTk4LDYzODc3LDMzMjg3LDMzMzQ5LDMzNTkzLDM2NjcxLDM2NzAxLDYzODc4LDM5MTkyLDYzODc5LDYzODgwLDYzODgxLDIwMTM0LDYzODgyLDIyNDk1LDI0NDQxLDI2MTMxLDYzODgzLDYzODg0LDMwMTIz''@;'; put 'put ''LDMyMzc3LDM1Njk1LDYzODg1LDM2ODcwLDM5NTE1LDIyMTgxLDIyNTY3LDIzMDMyLDIzMDcxLDIzNDc2LDYzODg2LDI0MzEwLDYzODg3LDYzODg4LDI1NDI0LDI1NDAzLDYzODg5LDI2OTQxLDI3NzgzLDI3ODM5LDI4MDQ2LDI4MDUxLDI4MTQ5LDI4NDM2LDYzODkwLDI4ODk1LDI4OTgyLDI5''@;'; put 'put ''MDE3LDYzODkxLDI5MTIzLDI5MTQxLDYzODkyLDMwNzk5LDMwODMxLDYzODkzLDMxNjA1LDMyMjI3LDYzODk0LDMyMzAzLDYzODk1LDM0ODkzLDM2NTc1LDYzODk2LDYzODk3LDYzODk4LDM3NDY3LDYzODk5LDQwMTgyLDYzOTAwLDYzOTAxLDYzOTAyLDI0NzA5LDI4MDM3LDYzOTAzLDI5MTA1''@;'; put 'put ''LDYzOTA0LDYzOTA1LDM4MzIxLDIxNDIxLDYzOTA2LDYzOTA3LDYzOTA4LDI2NTc5LDYzOTA5LDI4ODE0LDI4OTc2LDI5NzQ0LDMzMzk4LDMzNDkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzOTEwLDM4MzMxLDM5NjUzLDQwNTczLDI2MzA4LDYzOTExLDI5MTIxLDMzODY1LDYzOTEyLDYzOTEzLDIyNjAzLDYzOTE0LDYzOTE1LDIzOTkyLDI0NDMzLDYzOTE2''@;'; put 'put ''LDI2MTQ0LDI2MjU0LDI3MDAxLDI3MDU0LDI3NzA0LDI3ODkxLDI4MjE0LDI4NDgxLDI4NjM0LDI4Njk5LDI4NzE5LDI5MDA4LDI5MTUxLDI5NTUyLDYzOTE3LDI5Nzg3LDYzOTE4LDI5OTA4LDMwNDA4LDMxMzEwLDMyNDAzLDYzOTE5LDYzOTIwLDMzNTIxLDM1NDI0LDM2ODE0LDYzOTIxLDM3''@;'; put 'put ''NzA0LDYzOTIyLDM4NjgxLDYzOTIzLDYzOTI0LDIwMDM0LDIwNTIyLDYzOTI1LDIxZTMsMjE0NzMsMjYzNTUsMjc3NTcsMjg2MTgsMjk0NTAsMzA1OTEsMzEzMzAsMzM0NTQsMzQyNjksMzQzMDYsNjM5MjYsMzUwMjgsMzU0MjcsMzU3MDksMzU5NDcsNjM5MjcsMzc1NTUsNjM5MjgsMzg2NzUs''@;'; put 'put ''Mzg5MjgsMjAxMTYsMjAyMzcsMjA0MjUsMjA2NTgsMjEzMjAsMjE1NjYsMjE1NTUsMjE5NzgsMjI2MjYsMjI3MTQsMjI4ODcsMjMwNjcsMjM1MjQsMjQ3MzUsNjM5MjksMjUwMzQsMjU5NDIsMjYxMTEsMjYyMTIsMjY3OTEsMjc3MzgsMjg1OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjg4NzksMjkxMDAsMjk1MjIsMzE2MTMsMzQ1NjgsMzU0OTIsMzk5ODYs''@;'; put 'put ''NDA3MTEsMjM2MjcsMjc3NzksMjk1MDgsMjk1NzcsMzc0MzQsMjgzMzEsMjk3OTcsMzAyMzksMzEzMzcsMzIyNzcsMzQzMTQsMjA4MDAsMjI3MjUsMjU3OTMsMjk5MzQsMjk5NzMsMzAzMjAsMzI3MDUsMzcwMTMsMzg2MDUsMzkyNTIsMjgxOTgsMjk5MjYsMzE0MDEsMzE0MDIsMzMyNTMsMzQ1''@;'; put 'put ''MjEsMzQ2ODAsMzUzNTUsMjMxMTMsMjM0MzYsMjM0NTEsMjY3ODUsMjY4ODAsMjgwMDMsMjk2MDksMjk3MTUsMjk3NDAsMzA4NzEsMzIyMzMsMzI3NDcsMzMwNDgsMzMxMDksMzM2OTQsMzU5MTYsMzg0NDYsMzg5MjksMjYzNTIsMjQ0NDgsMjYxMDYsMjY1MDUsMjc3NTQsMjk1NzksMjA1MjUs''@;'; put 'put ''MjMwNDMsMjc0OTgsMzA3MDIsMjI4MDYsMjM5MTYsMjQwMTMsMjk0NzcsMzAwMzEsNjM5MzAsNjM5MzEsMjA3MDksMjA5ODUsMjI1NzUsMjI4MjksMjI5MzQsMjMwMDIsMjM1MjUsNjM5MzIsNjM5MzMsMjM5NzAsMjUzMDMsMjU2MjIsMjU3NDcsMjU4NTQsNjM5MzQsMjYzMzIsNjM5MzUsMjcy''@;'; put 'put ''MDgsNjM5MzYsMjkxODMsMjk3OTYsNjM5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsMzEzNjgsMzE0MDcsMzIzMjcsMzIzNTAsMzI3NjgsMzMxMzYsNjM5MzgsMzQ3OTksMzUyMDEsMzU2MTYsMzY5NTMsNjM5MzksMzY5OTIsMzkyNTAsMjQ5NTgsMjc0NDIsMjgwMjAsMzIyODcsMzUxMDksMzY3ODUsMjA0MzMsMjA2NTMsMjA4ODcsMjExOTEsMjI0NzEsMjI2''@;'; put 'put ''NjUsMjM0ODEsMjQyNDgsMjQ4OTgsMjcwMjksMjgwNDQsMjgyNjMsMjgzNDIsMjkwNzYsMjk3OTQsMjk5OTIsMjk5OTYsMzI4ODMsMzM1OTIsMzM5OTMsMzYzNjIsMzc3ODAsMzc4NTQsNjM5NDAsMjAxMTAsMjAzMDUsMjA1OTgsMjA3NzgsMjE0NDgsMjE0NTEsMjE0OTEsMjM0MzEsMjM1MDcs''@;'; put 'put ''MjM1ODgsMjQ4NTgsMjQ5NjIsMjYxMDAsMjkyNzUsMjk1OTEsMjk3NjAsMzA0MDIsMzEwNTYsMzExMjEsMzExNjEsMzIwMDYsMzI3MDEsMzM0MTksMzQyNjEsMzQzOTgsMzY4MDIsMzY5MzUsMzcxMDksMzczNTQsMzg1MzMsMzg2MzIsMzg2MzMsMjEyMDYsMjQ0MjMsMjYwOTMsMjYxNjEsMjY2''@;'; put 'put ''NzEsMjkwMjAsMzEyODYsMzcwNTcsMzg5MjIsMjAxMTMsNjM5NDEsMjcyMTgsMjc1NTAsMjg1NjAsMjkwNjUsMzI3OTIsMzM0NjQsMzQxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzY5MzksMzg1NDksMzg2NDIsMzg5MDcsMzQwNzQsMzk3MjksMjAxMTIsMjkwNjYsMzg1OTYsMjA4MDMsMjE0MDcsMjE3MjksMjIyOTEsMjIyOTAsMjI0MzUsMjMxOTUsMjMy''@;'; put 'put ''MzYsMjM0OTEsMjQ2MTYsMjQ4OTUsMjU1ODgsMjc3ODEsMjc5NjEsMjgyNzQsMjgzMDQsMjkyMzIsMjk1MDMsMjk3ODMsMzM0ODksMzQ5NDUsMzY2NzcsMzY5NjAsNjM5NDIsMzg0OTgsMzllMyw0MDIxOSwyNjM3NiwzNjIzNCwzNzQ3MCwyMDMwMSwyMDU1MywyMDcwMiwyMTM2MSwyMjI4NSwy''@;'; put 'put ''Mjk5NiwyMzA0MSwyMzU2MSwyNDk0NCwyNjI1NiwyODIwNSwyOTIzNCwyOTc3MSwzMjIzOSwzMjk2MywzMzgwNiwzMzg5NCwzNDExMSwzNDY1NSwzNDkwNywzNTA5NiwzNTU4NiwzNjk0OSwzODg1OSwzOTc1OSwyMDA4MywyMDM2OSwyMDc1NCwyMDg0Miw2Mzk0MywyMTgwNywyMTkyOSwyMzQx''@;'; put 'put ''OCwyMzQ2MSwyNDE4OCwyNDE4OSwyNDI1NCwyNDczNiwyNDc5OSwyNDg0MCwyNDg0MSwyNTU0MCwyNTkxMiwyNjM3Nyw2Mzk0NCwyNjU4MCwyNjU4Niw2Mzk0NSwyNjk3NywyNjk3OCwyNzgzMywyNzk0Myw2Mzk0NiwyODIxNiw2Mzk0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODY0MSwyOTQ5NCwyOTQ5NSw2Mzk0OCwyOTc4OCwzMDAwMSw2Mzk0OSwzMDI5''@;'; put 'put ''MCw2Mzk1MCw2Mzk1MSwzMjE3MywzMzI3OCwzMzg0OCwzNTAyOSwzNTQ4MCwzNTU0NywzNTU2NSwzNjQwMCwzNjQxOCwzNjkzOCwzNjkyNiwzNjk4NiwzNzE5MywzNzMyMSwzNzc0Miw2Mzk1Miw2Mzk1MywyMjUzNyw2Mzk1NCwyNzYwMywzMjkwNSwzMjk0Niw2Mzk1NSw2Mzk1NiwyMDgwMSwy''@;'; put 'put ''Mjg5MSwyMzYwOSw2Mzk1Nyw2Mzk1OCwyODUxNiwyOTYwNywzMjk5NiwzNjEwMyw2Mzk1OSwzNzM5OSwzODI4Nyw2Mzk2MCw2Mzk2MSw2Mzk2Miw2Mzk2MywzMjg5NSwyNTEwMiwyODcwMCwzMjEwNCwzNDcwMSw2Mzk2NCwyMjQzMiwyNDY4MSwyNDkwMywyNzU3NSwzNTUxOCwzNzUwNCwzODU3''@;'; put 'put ''NywyMDA1NywyMTUzNSwyODEzOSwzNDA5MywzODUxMiwzODg5OSwzOTE1MCwyNTU1OCwyNzg3NSwzNzAwOSwyMDk1NywyNTAzMywzMzIxMCw0MDQ0MSwyMDM4MSwyMDUwNiwyMDczNiwyMzQ1MiwyNDg0NywyNTA4NywyNTgzNiwyNjg4NSwyNzU4OSwzMDA5NywzMDY5MSwzMjY4MSwzMzM4MCwz''@;'; put 'put ''NDE5MSwzNDgxMSwzNDkxNSwzNTUxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCwzNTY5NiwzNzI5MSwyMDEwOCwyMDE5NywyMDIzNCw2Mzk2NSw2Mzk2NiwyMjgzOSwyMzAxNiw2Mzk2NywyNDA1MCwyNDM0NywyNDQxMSwyNDYwOSw2Mzk2OCw2Mzk2OSw2Mzk3MCw2Mzk3MSwyOTI0NiwyOTY2OSw2Mzk3MiwzMDA2NCwzMDE1Nyw2Mzk3MywzMTIyNyw2Mzk3NCwz''@;'; put 'put ''Mjc4MCwzMjgxOSwzMjkwMCwzMzUwNSwzMzYxNyw2Mzk3NSw2Mzk3NiwzNjAyOSwzNjAxOSwzNjk5OSw2Mzk3Nyw2Mzk3OCwzOTE1NiwzOTE4MCw2Mzk3OSw2Mzk4MCwyODcyNywzMDQxMCwzMjcxNCwzMjcxNiwzMjc2NCwzNTYxMCwyMDE1NCwyMDE2MSwyMDk5NSwyMTM2MCw2Mzk4MSwyMTY5''@;'; put 'put ''MywyMjI0MCwyMzAzNSwyMzQ5MywyNDM0MSwyNDUyNSwyODI3MCw2Mzk4Miw2Mzk4MywzMjEwNiwzMzU4OSw2Mzk4NCwzNDQ1MSwzNTQ2OSw2Mzk4NSwzODc2NSwzODc3NSw2Mzk4Niw2Mzk4NywxOTk2OCwyMDMxNCwyMDM1MCwyMjc3NywyNjA4NSwyODMyMiwzNjkyMCwzNzgwOCwzOTM1Mywy''@;'; put 'put ''MDIxOSwyMjc2NCwyMjkyMiwyMzAwMSwyNDY0MSw2Mzk4OCw2Mzk4OSwzMTI1Miw2Mzk5MCwzMzYxNSwzNjAzNSwyMDgzNywyMTMxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzk5MSw2Mzk5Miw2Mzk5MywyMDE3MywyMTA5NywyMzM4MSwzMzQ3MSwyMDE4MCwyMTA1MCwyMTY3MiwyMjk4NSwyMzAzOSwyMzM3NiwyMzM4MywyMzM4OCwyNDY3NSwyNDkwNCwy''@;'; put 'put ''ODM2MywyODgyNSwyOTAzOCwyOTU3NCwyOTk0MywzMDEzMywzMDkxMywzMjA0MywzMjc3MywzMzI1OCwzMzU3NiwzNDA3MSwzNDI0OSwzNTU2NiwzNjAzOSwzODYwNCwyMDMxNiwyMTI0MiwyMjIwNCwyNjAyNywyNjE1MiwyODc5NiwyODg1NiwyOTIzNywzMjE4OSwzMzQyMSwzNzE5NiwzODU5''@;'; put 'put ''Miw0MDMwNiwyMzQwOSwyNjg1NSwyNzU0NCwyODUzOCwzMDQzMCwyMzY5NywyNjI4MywyODUwNywzMTY2OCwzMTc4NiwzNDg3MCwzODYyMCwxOTk3NiwyMDE4MywyMTI4MCwyMjU4MCwyMjcxNSwyMjc2NywyMjg5MiwyMzU1OSwyNDExNSwyNDE5NiwyNDM3MywyNTQ4NCwyNjI5MCwyNjQ1NCwy''@;'; put 'put ''NzE2NywyNzI5OSwyNzQwNCwyODQ3OSwyOTI1NCw2Mzk5NCwyOTUyMCwyOTgzNSwzMTQ1NiwzMTkxMSwzMzE0NCwzMzI0NywzMzI1NSwzMzY3NCwzMzkwMCwzNDA4MywzNDE5NiwzNDI1NSwzNTAzNywzNjExNSwzNzI5MiwzODI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODU1NiwyMDg3NywyMTcwNSwyMjMxMiwyMzQ3MiwyNTE2NSwyNjQ0OCwyNjY4NSwy''@;'; put 'put ''Njc3MSwyODIyMSwyODM3MSwyODc5NywzMjI4OSwzNTAwOSwzNjAwMSwzNjYxNyw0MDc3OSw0MDc4MiwyOTIyOSwzMTYzMSwzNTUzMywzNzY1OCwyMDI5NSwyMDMwMiwyMDc4NiwyMTYzMiwyMjk5MiwyNDIxMywyNTI2OSwyNjQ4NSwyNjk5MCwyNzE1OSwyNzgyMiwyODE4NiwyOTQwMSwyOTQ4''@;'; put 'put ''MiwzMDE0MSwzMTY3MiwzMjA1MywzMzUxMSwzMzc4NSwzMzg3OSwzNDI5NSwzNTQxOSwzNjAxNSwzNjQ4NywzNjg4OSwzNzA0OCwzODYwNiw0MDc5OSwyMTIxOSwyMTUxNCwyMzI2NSwyMzQ5MCwyNTY4OCwyNTk3MywyODQwNCwyOTM4MCw2Mzk5NSwzMDM0MCwzMTMwOSwzMTUxNSwzMTgyMSwz''@;'; put 'put ''MjMxOCwzMjczNSwzMzY1OSwzNTYyNywzNjA0MiwzNjE5NiwzNjMyMSwzNjQ0NywzNjg0MiwzNjg1NywzNjk2OSwzNzg0MSwyMDI5MSwyMDM0NiwyMDY1OSwyMDg0MCwyMDg1NiwyMTA2OSwyMTA5OCwyMjYyNSwyMjY1MiwyMjg4MCwyMzU2MCwyMzYzNywyNDI4MywyNDczMSwyNTEzNiwyNjY0''@;'; put 'put ''MywyNzU4MywyNzY1NiwyODU5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCwyOTAwNiwyOTcyOCwzZTQsMzAwMDgsMzAwMzMsMzAzMjIsMzE1NjQsMzE2MjcsMzE2NjEsMzE2ODYsMzIzOTksMzU0MzgsMzY2NzAsMzY2ODEsMzc0MzksMzc1MjMsMzc2NjYsMzc5MzEsMzg2NTEsMzkwMDIsMzkwMTksMzkxOTgsMjA5OTksMjUxMzAsMjUyNDAsMjc5OTMsMzAzMDgs''@;'; put 'put ''MzE0MzQsMzE2ODAsMzIxMTgsMjEzNDQsMjM3NDIsMjQyMTUsMjg0NzIsMjg4NTcsMzE4OTYsMzg2NzMsMzk4MjIsNDA2NzAsMjU1MDksMjU3MjIsMzQ2NzgsMTk5NjksMjAxMTcsMjAxNDEsMjA1NzIsMjA1OTcsMjE1NzYsMjI5NzksMjM0NTAsMjQxMjgsMjQyMzcsMjQzMTEsMjQ0NDksMjQ3''@;'; put 'put ''NzMsMjU0MDIsMjU5MTksMjU5NzIsMjYwNjAsMjYyMzAsMjYyMzIsMjY2MjIsMjY5ODQsMjcyNzMsMjc0OTEsMjc3MTIsMjgwOTYsMjgxMzYsMjgxOTEsMjgyNTQsMjg3MDIsMjg4MzMsMjk1ODIsMjk2OTMsMzAwMTAsMzA1NTUsMzA4NTUsMzExMTgsMzEyNDMsMzEzNTcsMzE5MzQsMzIxNDIs''@;'; put 'put ''MzMzNTEsMzUzMzAsMzU1NjIsMzU5OTgsMzcxNjUsMzcxOTQsMzczMzYsMzc0NzgsMzc1ODAsMzc2NjQsMzg2NjIsMzg3NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg3NDgsMzg5MTQsNDA3MTgsMjEwNDYsMjExMzcsMjE4ODQsMjI1NjQsMjQwOTMsMjQzNTEsMjQ3MTYsMjU1NTIsMjY3OTksMjg2MzksMzEwODUsMzE1MzIsMzMyMjksMzQyMzQsMzUwNjks''@;'; put 'put ''MzU1NzYsMzY0MjAsMzcyNjEsMzg1MDAsMzg1NTUsMzg3MTcsMzg5ODgsNDA3NzgsMjA0MzAsMjA4MDYsMjA5MzksMjExNjEsMjIwNjYsMjQzNDAsMjQ0MjcsMjU1MTQsMjU4MDUsMjYwODksMjYxNzcsMjYzNjIsMjYzNjEsMjYzOTcsMjY3ODEsMjY4MzksMjcxMzMsMjg0MzcsMjg1MjYsMjkw''@;'; put 'put ''MzEsMjkxNTcsMjkyMjYsMjk4NjYsMzA1MjIsMzEwNjIsMzEwNjYsMzExOTksMzEyNjQsMzEzODEsMzE4OTUsMzE5NjcsMzIwNjgsMzIzNjgsMzI5MDMsMzQyOTksMzQ0NjgsMzU0MTIsMzU1MTksMzYyNDksMzY0ODEsMzY4OTYsMzY5NzMsMzczNDcsMzg0NTksMzg2MTMsNDAxNjUsMjYwNjMs''@;'; put 'put ''MzE3NTEsMzYyNzUsMzc4MjcsMjMzODQsMjM1NjIsMjEzMzAsMjUzMDUsMjk0NjksMjA1MTksMjM0NDcsMjQ0NzgsMjQ3NTIsMjQ5MzksMjY4MzcsMjgxMjEsMjk3NDIsMzEyNzgsMzIwNjYsMzIxNTYsMzIzMDUsMzMxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzYzOTQsMzY0MDUsMzc3NTgsMzc5MTIsMjAzMDQsMjIzNTIsMjQwMzgsMjQyMzEsMjUzODcs''@;'; put 'put ''MzI2MTgsMjAwMjcsMjAzMDMsMjAzNjcsMjA1NzAsMjMwMDUsMzI5NjQsMjE2MTAsMjE2MDgsMjIwMTQsMjI4NjMsMjM0NDksMjQwMzAsMjQyODIsMjYyMDUsMjY0MTcsMjY2MDksMjY2NjYsMjc4ODAsMjc5NTQsMjgyMzQsMjg1NTcsMjg4NTUsMjk2NjQsMzAwODcsMzE4MjAsMzIwMDIsMzIw''@;'; put 'put ''NDQsMzIxNjIsMzMzMTEsMzQ1MjMsMzUzODcsMzU0NjEsMzYyMDgsMzY0OTAsMzY2NTksMzY5MTMsMzcxOTgsMzcyMDIsMzc5NTYsMzkzNzYsMzE0ODEsMzE5MDksMjA0MjYsMjA3MzcsMjA5MzQsMjI0NzIsMjM1MzUsMjM4MDMsMjYyMDEsMjcxOTcsMjc5OTQsMjgzMTAsMjg2NTIsMjg5NDAs''@;'; put 'put ''MzAwNjMsMzE0NTksMzQ4NTAsMzY4OTcsMzY5ODEsMzg2MDMsMzk0MjMsMzM1MzcsMjAwMTMsMjAyMTAsMzQ4ODYsMzczMjUsMjEzNzMsMjczNTUsMjY5ODcsMjc3MTMsMzM5MTQsMjI2ODYsMjQ5NzQsMjYzNjYsMjUzMjcsMjg4OTMsMjk5NjksMzAxNTEsMzIzMzgsMzM5NzYsMzU2NTcsMzYx''@;'; put 'put ''MDQsMjAwNDMsMjE0ODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''MjE2NzUsMjIzMjAsMjIzMzYsMjQ1MzUsMjUzNDUsMjUzNTEsMjU3MTEsMjU5MDMsMjYwODgsMjYyMzQsMjY1MjUsMjY1NDcsMjc0OTAsMjc3NDQsMjc4MDIsMjg0NjAsMzA2OTMsMzA3NTcsMzEwNDksMzEwNjMsMzIwMjUsMzI5MzAsMzMwMjYsMzMyNjcsMzM0MzcsMzM0NjMsMzQ1ODQsMzU0''@;'; put 'put ''NjgsNjM5OTYsMzYxMDAsMzYyODYsMzY5NzgsMzA0NTIsMzEyNTcsMzEyODcsMzIzNDAsMzI4ODcsMjE3NjcsMjE5NzIsMjI2NDUsMjUzOTEsMjU2MzQsMjYxODUsMjYxODcsMjY3MzMsMjcwMzUsMjc1MjQsMjc5NDEsMjgzMzcsMjk2NDUsMjk4MDAsMjk4NTcsMzAwNDMsMzAxMzcsMzA0MzMs''@;'; put 'put ''MzA0OTQsMzA2MDMsMzEyMDYsMzIyNjUsMzIyODUsMzMyNzUsMzQwOTUsMzQ5NjcsMzUzODYsMzYwNDksMzY1ODcsMzY3ODQsMzY5MTQsMzc4MDUsMzg0OTksMzg1MTUsMzg2NjMsMjAzNTYsMjE0ODksMjMwMTgsMjMyNDEsMjQwODksMjY3MDIsMjk4OTQsMzAxNDIsMzEyMDksMzEzNzgsMzMx''@;'; put 'put ''ODcsMzQ1NDEsMzYwNzQsMzYzMDAsMzY4NDUsMjYwMTUsMjYzODksNjM5OTcsMjI1MTksMjg1MDMsMzIyMjEsMzY2NTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzc4NzgsMzg1OTgsMjQ1MDEsMjUwNzQsMjg1NDgsMTk5ODgsMjAzNzYsMjA1MTEsMjE0NDksMjE5ODMsMjM5MTksMjQwNDYsMjc0MjUsMjc0OTIsMzA5MjMsMzE2NDIsNjM5OTgsMzY0MjUsMzY1''@;'; put 'put ''NTQsMzY5NzQsMjU0MTcsMjU2NjIsMzA1MjgsMzEzNjQsMzc2NzksMzgwMTUsNDA4MTAsMjU3NzYsMjg1OTEsMjkxNTgsMjk4NjQsMjk5MTQsMzE0MjgsMzE3NjIsMzIzODYsMzE5MjIsMzI0MDgsMzU3MzgsMzYxMDYsMzgwMTMsMzkxODQsMzkyNDQsMjEwNDksMjM1MTksMjU4MzAsMjY0MTMs''@;'; put 'put ''MzIwNDYsMjA3MTcsMjE0NDMsMjI2NDksMjQ5MjAsMjQ5MjEsMjUwODIsMjYwMjgsMzE0NDksMzU3MzAsMzU3MzQsMjA0ODksMjA1MTMsMjExMDksMjE4MDksMjMxMDAsMjQyODgsMjQ0MzIsMjQ4ODQsMjU5NTAsMjYxMjQsMjYxNjYsMjYyNzQsMjcwODUsMjgzNTYsMjg0NjYsMjk0NjIsMzAy''@;'; put 'put ''NDEsMzEzNzksMzMwODEsMzMzNjksMzM3NTAsMzM5ODAsMjA2NjEsMjI1MTIsMjM0ODgsMjM1MjgsMjQ0MjUsMjU1MDUsMzA3NTgsMzIxODEsMzM3NTYsMzQwODEsMzczMTksMzczNjUsMjA4NzQsMjY2MTMsMzE1NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzYwMTIsMjA5MzIsMjI5NzEsMjQ3NjUsMzQzODksMjA1MDgsNjM5OTksMjEwNzYsMjM2MTAsMjQ5''@;'; put 'put ''NTcsMjUxMTQsMjUyOTksMjU4NDIsMjYwMjEsMjgzNjQsMzAyNDAsMzMwMzQsMzY0NDgsMzg0OTUsMzg1ODcsMjAxOTEsMjEzMTUsMjE5MTIsMjI4MjUsMjQwMjksMjU3OTcsMjc4NDksMjgxNTQsMjk1ODgsMzEzNTksMzMzMDcsMzQyMTQsMzYwNjgsMzYzNjgsMzY5ODMsMzczNTEsMzgzNjks''@;'; put 'put ''Mzg0MzMsMzg4NTQsMjA5ODQsMjE3NDYsMjE4OTQsMjQ1MDUsMjU3NjQsMjg1NTIsMzIxODAsMzY2MzksMzY2ODUsMzc5NDEsMjA2ODEsMjM1NzQsMjc4MzgsMjgxNTUsMjk5NzksMzA2NTEsMzE4MDUsMzE4NDQsMzU0NDksMzU1MjIsMjI1NTgsMjI5NzQsMjQwODYsMjU0NjMsMjkyNjYsMzAw''@;'; put 'put ''OTAsMzA1NzEsMzU1NDgsMzYwMjgsMzY2MjYsMjQzMDcsMjYyMjgsMjgxNTIsMzI4OTMsMzM3MjksMzU1MzEsMzg3MzcsMzk4OTQsNjRlMywyMTA1OSwyNjM2NywyODA1MywyODM5OSwzMjIyNCwzNTU1OCwzNjkxMCwzNjk1OCwzOTYzNiwyMTAyMSwyMTExOSwyMTczNiwyNDk4MCwyNTIyMCwy''@;'; put 'put ''NTMwNywyNjc4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg5''@;'; put 'put ''OCwyNjk3MCwyNzE4OSwyODgxOCwyODk2NiwzMDgxMywzMDk3NywzMDk5MCwzMTE4NiwzMTI0NSwzMjkxOCwzMzQwMCwzMzQ5MywzMzYwOSwzNDEyMSwzNTk3MCwzNjIyOSwzNzIxOCwzNzI1OSwzNzI5NCwyMDQxOSwyMjIyNSwyOTE2NSwzMDY3OSwzNDU2MCwzNTMyMCwyMzU0NCwyNDUzNCwy''@;'; put 'put ''NjQ0OSwzNzAzMiwyMTQ3NCwyMjYxOCwyMzU0MSwyNDc0MCwyNDk2MSwyNTY5NiwzMjMxNywzMjg4MCwzNDA4NSwzNzUwNywyNTc3NCwyMDY1MiwyMzgyOCwyNjM2OCwyMjY4NCwyNTI3NywyNTUxMiwyNjg5NCwyN2UzLDI3MTY2LDI4MjY3LDMwMzk0LDMxMTc5LDMzNDY3LDMzODMzLDM1NTM1''@;'; put 'put ''LDM2MjY0LDM2ODYxLDM3MTM4LDM3MTk1LDM3Mjc2LDM3NjQ4LDM3NjU2LDM3Nzg2LDM4NjE5LDM5NDc4LDM5OTQ5LDE5OTg1LDMwMDQ0LDMxMDY5LDMxNDgyLDMxNTY5LDMxNjg5LDMyMzAyLDMzOTg4LDM2NDQxLDM2NDY4LDM2NjAwLDM2ODgwLDI2MTQ5LDI2OTQzLDI5NzYzLDIwOTg2LDI2''@;'; put 'put ''NDE0LDQwNjY4LDIwODA1LDI0NTQ0LDI3Nzk4LDM0ODAyLDM0OTA5LDM0OTM1LDI0NzU2LDMzMjA1LDMzNzk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2MTAxLDIxNDYyLDIxNTYxLDIyMDY4LDIzMDk0LDIzNjAxLDI4ODEwLDMyNzM2LDMyODU4LDMzMDMwLDMzMjYxLDM2MjU5LDM3MjU3LDM5NTE5LDQwNDM0LDIwNTk2LDIwMTY0LDIxNDA4LDI0ODI3LDI4''@;'; put 'put ''MjA0LDIzNjUyLDIwMzYwLDIwNTE2LDIxOTg4LDIzNzY5LDI0MTU5LDI0Njc3LDI2NzcyLDI3ODM1LDI4MTAwLDI5MTE4LDMwMTY0LDMwMTk2LDMwMzA1LDMxMjU4LDMxMzA1LDMyMTk5LDMyMjUxLDMyNjIyLDMzMjY4LDM0NDczLDM2NjM2LDM4NjAxLDM5MzQ3LDQwNzg2LDIxMDYzLDIxMTg5''@;'; put 'put ''LDM5MTQ5LDM1MjQyLDE5OTcxLDI2NTc4LDI4NDIyLDIwNDA1LDIzNTIyLDI2NTE3LDI3Nzg0LDI4MDI0LDI5NzIzLDMwNzU5LDM3MzQxLDM3NzU2LDM0NzU2LDMxMjA0LDMxMjgxLDI0NTU1LDIwMTgyLDIxNjY4LDIxODIyLDIyNzAyLDIyOTQ5LDI0ODE2LDI1MTcxLDI1MzAyLDI2NDIyLDI2''@;'; put 'put ''OTY1LDMzMzMzLDM4NDY0LDM5MzQ1LDM5Mzg5LDIwNTI0LDIxMzMxLDIxODI4LDIyMzk2LDY0MDAxLDI1MTc2LDY0MDAyLDI1ODI2LDI2MjE5LDI2NTg5LDI4NjA5LDI4NjU1LDI5NzMwLDI5NzUyLDM1MzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM3OTQ0LDIxNTg1LDIyMDIyLDIyMzc0LDI0MzkyLDI0OTg2LDI3NDcwLDI4NzYwLDI4ODQ1LDMyMTg3LDM1''@;'; put 'put ''NDc3LDIyODkwLDMzMDY3LDI1NTA2LDMwNDcyLDMyODI5LDM2MDEwLDIyNjEyLDI1NjQ1LDI3MDY3LDIzNDQ1LDI0MDgxLDI4MjcxLDY0MDAzLDM0MTUzLDIwODEyLDIxNDg4LDIyODI2LDI0NjA4LDI0OTA3LDI3NTI2LDI3NzYwLDI3ODg4LDMxNTE4LDMyOTc0LDMzNDkyLDM2Mjk0LDM3MDQw''@;'; put 'put ''LDM5MDg5LDY0MDA0LDI1Nzk5LDI4NTgwLDI1NzQ1LDI1ODYwLDIwODE0LDIxNTIwLDIyMzAzLDM1MzQyLDI0OTI3LDI2NzQyLDY0MDA1LDMwMTcxLDMxNTcwLDMyMTEzLDM2ODkwLDIyNTM0LDI3MDg0LDMzMTUxLDM1MTE0LDM2ODY0LDM4OTY5LDIwNjAwLDIyODcxLDIyOTU2LDI1MjM3LDM2''@;'; put 'put ''ODc5LDM5NzIyLDI0OTI1LDI5MzA1LDM4MzU4LDIyMzY5LDIzMTEwLDI0MDUyLDI1MjI2LDI1NzczLDI1ODUwLDI2NDg3LDI3ODc0LDI3OTY2LDI5MjI4LDI5NzUwLDMwNzcyLDMyNjMxLDMzNDUzLDM2MzE1LDM4OTM1LDIxMDI4LDIyMzM4LDI2NDk1LDI5MjU2LDI5OTIzLDM2MDA5LDM2Nzc0''@;'; put 'put ''LDM3MzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NDQyLDIw''@;'; put 'put ''ODQzLDIxNDg1LDI1NDIwLDIwMzI5LDIxNzY0LDI0NzI2LDI1OTQzLDI3ODAzLDI4MDMxLDI5MjYwLDI5NDM3LDMxMjU1LDM1MjA3LDM1OTk3LDI0NDI5LDI4NTU4LDI4OTIxLDMzMTkyLDI0ODQ2LDIwNDE1LDIwNTU5LDI1MTUzLDI5MjU1LDMxNjg3LDMyMjMyLDMyNzQ1LDM2OTQxLDM4ODI5''@;'; put 'put ''LDM5NDQ5LDM2MDIyLDIyMzc4LDI0MTc5LDI2NTQ0LDMzODA1LDM1NDEzLDIxNTM2LDIzMzE4LDI0MTYzLDI0MjkwLDI0MzMwLDI1OTg3LDMyOTU0LDM0MTA5LDM4MjgxLDM4NDkxLDIwMjk2LDIxMjUzLDIxMjYxLDIxMjYzLDIxNjM4LDIxNzU0LDIyMjc1LDI0MDY3LDI0NTk4LDI1MjQzLDI1''@;'; put 'put ''MjY1LDI1NDI5LDY0MDA2LDI3ODczLDI4MDA2LDMwMTI5LDMwNzcwLDMyOTkwLDMzMDcxLDMzNTAyLDMzODg5LDMzOTcwLDM0OTU3LDM1MDkwLDM2ODc1LDM3NjEwLDM5MTY1LDM5ODI1LDI0MTMzLDI2MjkyLDI2MzMzLDI4Njg5LDI5MTkwLDY0MDA3LDIwNDY5LDIxMTE3LDI0NDI2LDI0OTE1''@;'; put 'put ''LDI2NDUxLDI3MTYxLDI4NDE4LDI5OTIyLDMxMDgwLDM0OTIwLDM1OTYxLDM5MTExLDM5MTA4LDM5NDkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxNjk3LDMxMjYzLDI2OTYzLDM1NTc1LDM1OTE0LDM5MDgwLDM5MzQyLDI0NDQ0LDI1MjU5LDMwMTMwLDMwMzgyLDM0OTg3LDM2OTkxLDM4NDY2LDIxMzA1LDI0MzgwLDI0NTE3LDI3ODUyLDI5NjQ0LDMwMDUw''@;'; put 'put ''LDMwMDkxLDMxNTU4LDMzNTM0LDM5MzI1LDIwMDQ3LDM2OTI0LDE5OTc5LDIwMzA5LDIxNDE0LDIyNzk5LDI0MjY0LDI2MTYwLDI3ODI3LDI5NzgxLDMzNjU1LDM0NjYyLDM2MDMyLDM2OTQ0LDM4Njg2LDM5OTU3LDIyNzM3LDIzNDE2LDM0Mzg0LDM1NjA0LDQwMzcyLDIzNTA2LDI0NjgwLDI0''@;'; put 'put ''NzE3LDI2MDk3LDI3NzM1LDI4NDUwLDI4NTc5LDI4Njk4LDMyNTk3LDMyNzUyLDM4Mjg5LDM4MjkwLDM4NDgwLDM4ODY3LDIxMTA2LDM2Njc2LDIwOTg5LDIxNTQ3LDIxNjg4LDIxODU5LDIxODk4LDI3MzIzLDI4MDg1LDMyMjE2LDMzMzgyLDM3NTMyLDM4NTE5LDQwNTY5LDIxNTEyLDIxNzA0''@;'; put 'put ''LDMwNDE4LDM0NTMyLDM4MzA4LDM4MzU2LDM4NDkyLDIwMTMwLDIwMjMzLDIzMDIyLDIzMjcwLDI0MDU1LDI0NjU4LDI1MjM5LDI2NDc3LDI2Njg5LDI3NzgyLDI4MjA3LDMyNTY4LDMyOTIzLDMzMzIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY0MDA4LDY0MDA5LDM4OTE3LDIwMTMzLDIwNTY1LDIxNjgzLDIyNDE5LDIyODc0LDIzNDAxLDIzNDc1LDI1MDMy''@;'; put 'put ''LDI2OTk5LDI4MDIzLDI4NzA3LDM0ODA5LDM1Mjk5LDM1NDQyLDM1NTU5LDM2OTk0LDM5NDA1LDM5NjA4LDIxMTgyLDI2NjgwLDIwNTAyLDI0MTg0LDI2NDQ3LDMzNjA3LDM0ODkyLDIwMTM5LDIxNTIxLDIyMTkwLDI5NjcwLDM3MTQxLDM4OTExLDM5MTc3LDM5MjU1LDM5MzIxLDIyMDk5LDIy''@;'; put 'put ''Njg3LDM0Mzk1LDM1Mzc3LDI1MDEwLDI3MzgyLDI5NTYzLDM2NTYyLDI3NDYzLDM4NTcwLDM5NTExLDIyODY5LDI5MTg0LDM2MjAzLDM4NzYxLDIwNDM2LDIzNzk2LDI0MzU4LDI1MDgwLDI2MjAzLDI3ODgzLDI4ODQzLDI5NTcyLDI5NjI1LDI5Njk0LDMwNTA1LDMwNTQxLDMyMDY3LDMyMDk4''@;'; put 'put ''LDMyMjkxLDMzMzM1LDM0ODk4LDY0MDEwLDM2MDY2LDM3NDQ5LDM5MDIzLDIzMzc3LDMxMzQ4LDM0ODgwLDM4OTEzLDIzMjQ0LDIwNDQ4LDIxMzMyLDIyODQ2LDIzODA1LDI1NDA2LDI4MDI1LDI5NDMzLDMzMDI5LDMzMDMxLDMzNjk4LDM3NTgzLDM4OTYwLDIwMTM2LDIwODA0LDIxMDA5LDIy''@;'; put 'put ''NDExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0NDE4LDI3ODQy''@;'; put 'put ''LDI4MzY2LDI4Njc3LDI4NzUyLDI4ODQ3LDI5MDc0LDI5NjczLDI5ODAxLDMzNjEwLDM0NzIyLDM0OTEzLDM2ODcyLDM3MDI2LDM3Nzk1LDM5MzM2LDIwODQ2LDI0NDA3LDI0ODAwLDI0OTM1LDI2MjkxLDM0MTM3LDM2NDI2LDM3Mjk1LDM4Nzk1LDIwMDQ2LDIwMTE0LDIxNjI4LDIyNzQxLDIy''@;'; put 'put ''Nzc4LDIyOTA5LDIzNzMzLDI0MzU5LDI1MTQyLDI1MTYwLDI2MTIyLDI2MjE1LDI3NjI3LDI4MDA5LDI4MTExLDI4MjQ2LDI4NDA4LDI4NTY0LDI4NjQwLDI4NjQ5LDI4NzY1LDI5MzkyLDI5NzMzLDI5Nzg2LDI5OTIwLDMwMzU1LDMxMDY4LDMxOTQ2LDMyMjg2LDMyOTkzLDMzNDQ2LDMzODk5''@;'; put 'put ''LDMzOTgzLDM0MzgyLDM0Mzk5LDM0Njc2LDM1NzAzLDM1OTQ2LDM3ODA0LDM4OTEyLDM5MDEzLDI0Nzg1LDI1MTEwLDM3MjM5LDIzMTMwLDI2MTI3LDI4MTUxLDI4MjIyLDI5NzU5LDM5NzQ2LDI0NTczLDI0Nzk0LDMxNTAzLDIxNzAwLDI0MzQ0LDI3NzQyLDI3ODU5LDI3OTQ2LDI4ODg4LDMy''@;'; put 'put ''MDA1LDM0NDI1LDM1MzQwLDQwMjUxLDIxMjcwLDIxNjQ0LDIzMzAxLDI3MTk0LDI4Nzc5LDMwMDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMTE3LDMxMTY2LDMzNDU3LDMzNzc1LDM1NDQxLDM1NjQ5LDM2MDA4LDM4NzcyLDY0MDExLDI1ODQ0LDI1ODk5LDMwOTA2LDMwOTA3LDMxMzM5LDIwMDI0LDIxOTE0LDIyODY0LDIzNDYyLDI0MTg3LDI0NzM5LDI1''@;'; put 'put ''NTYzLDI3NDg5LDI2MjEzLDI2NzA3LDI4MTg1LDI5MDI5LDI5ODcyLDMyMDA4LDM2OTk2LDM5NTI5LDM5OTczLDI3OTYzLDI4MzY5LDI5NTAyLDM1OTA1LDM4MzQ2LDIwOTc2LDI0MTQwLDI0NDg4LDI0NjUzLDI0ODIyLDI0ODgwLDI0OTA4LDI2MTc5LDI2MTgwLDI3MDQ1LDI3ODQxLDI4MjU1''@;'; put 'put ''LDI4MzYxLDI4NTE0LDI5MDA0LDI5ODUyLDMwMzQzLDMxNjgxLDMxNzgzLDMzNjE4LDM0NjQ3LDM2OTQ1LDM4NTQxLDQwNjQzLDIxMjk1LDIyMjM4LDI0MzE1LDI0NDU4LDI0Njc0LDI0NzI0LDI1MDc5LDI2MjE0LDI2MzcxLDI3MjkyLDI4MTQyLDI4NTkwLDI4Nzg0LDI5NTQ2LDMyMzYyLDMz''@;'; put 'put ''MjE0LDMzNTg4LDM0NTE2LDM1NDk2LDM2MDM2LDIxMTIzLDI5NTU0LDIzNDQ2LDI3MjQzLDM3ODkyLDIxNzQyLDIyMTUwLDIzMzg5LDI1OTI4LDI1OTg5LDI2MzEzLDI2NzgzLDI4MDQ1LDI4MTAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MjQzLDMyOTQ4LDM3MjM3LDM5NTAxLDIwMzk5LDIwNTA1LDIxNDAyLDIxNTE4LDIxNTY0LDIxODk3LDIxOTU3LDI0''@;'; put 'put ''MTI3LDI0NDYwLDI2NDI5LDI5MDMwLDI5NjYxLDM2ODY5LDIxMjExLDIxMjM1LDIyNjI4LDIyNzM0LDI4OTMyLDI5MDcxLDI5MTc5LDM0MjI0LDM1MzQ3LDI2MjQ4LDM0MjE2LDIxOTI3LDI2MjQ0LDI5MDAyLDMzODQxLDIxMzIxLDIxOTEzLDI3NTg1LDI0NDA5LDI0NTA5LDI1NTgyLDI2MjQ5''@;'; put 'put ''LDI4OTk5LDM1NTY5LDM2NjM3LDQwNjM4LDIwMjQxLDI1NjU4LDI4ODc1LDMwMDU0LDM0NDA3LDI0Njc2LDM1NjYyLDQwNDQwLDIwODA3LDIwOTgyLDIxMjU2LDI3OTU4LDMzMDE2LDQwNjU3LDI2MTMzLDI3NDI3LDI4ODI0LDMwMTY1LDIxNTA3LDIzNjczLDMyMDA3LDM1MzUwLDI3NDI0LDI3''@;'; put 'put ''NDUzLDI3NDYyLDIxNTYwLDI0Njg4LDI3OTY1LDMyNzI1LDMzMjg4LDIwNjk0LDIwOTU4LDIxOTE2LDIyMTIzLDIyMjIxLDIzMDIwLDIzMzA1LDI0MDc2LDI0OTg1LDI0OTg0LDI1MTM3LDI2MjA2LDI2MzQyLDI5MDgxLDI5MTEzLDI5MTE0LDI5MzUxLDMxMTQzLDMxMjMyLDMyNjkwLDM1NDQw''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGdiMTgwMzA6WzE5OTcwLDE5OTcyLDE5OTczLDE5OTc0LDE5OTgz''@;'; put 'put ''LDE5OTg2LDE5OTkxLDE5OTk5LDJlNCwyMDAwMSwyMDAwMywyMDAwNiwyMDAwOSwyMDAxNCwyMDAxNSwyMDAxNywyMDAxOSwyMDAyMSwyMDAyMywyMDAyOCwyMDAzMiwyMDAzMywyMDAzNCwyMDAzNiwyMDAzOCwyMDA0MiwyMDA0OSwyMDA1MywyMDA1NSwyMDA1OCwyMDA1OSwyMDA2NiwyMDA2''@;'; put 'put ''NywyMDA2OCwyMDA2OSwyMDA3MSwyMDA3MiwyMDA3NCwyMDA3NSwyMDA3NiwyMDA3NywyMDA3OCwyMDA3OSwyMDA4MiwyMDA4NCwyMDA4NSwyMDA4NiwyMDA4NywyMDA4OCwyMDA4OSwyMDA5MCwyMDA5MSwyMDA5MiwyMDA5MywyMDA5NSwyMDA5NiwyMDA5NywyMDA5OCwyMDA5OSwyMDEwMCwy''@;'; put 'put ''MDEwMSwyMDEwMywyMDEwNiwyMDExMiwyMDExOCwyMDExOSwyMDEyMSwyMDEyNCwyMDEyNSwyMDEyNiwyMDEzMSwyMDEzOCwyMDE0MywyMDE0NCwyMDE0NSwyMDE0OCwyMDE1MCwyMDE1MSwyMDE1MiwyMDE1MywyMDE1NiwyMDE1NywyMDE1OCwyMDE2OCwyMDE3MiwyMDE3NSwyMDE3NiwyMDE3''@;'; put 'put ''OCwyMDE4NiwyMDE4NywyMDE4OCwyMDE5MiwyMDE5NCwyMDE5OCwyMDE5OSwyMDIwMSwyMDIwNSwyMDIwNiwyMDIwNywyMDIwOSwyMDIxMiwyMDIxNiwyMDIxNywyMDIxOCwyMDIyMCwyMDIyMiwyMDIyNCwyMDIyNiwyMDIyNywyMDIyOCwyMDIyOSwyMDIzMCwyMDIzMSwyMDIzMiwyMDIzNSwy''@;'; put 'put ''MDIzNiwyMDI0MiwyMDI0MywyMDI0NCwyMDI0NSwyMDI0NiwyMDI1MiwyMDI1MywyMDI1NywyMDI1OSwyMDI2NCwyMDI2NSwyMDI2OCwyMDI2OSwyMDI3MCwyMDI3MywyMDI3NSwyMDI3NywyMDI3OSwyMDI4MSwyMDI4MywyMDI4NiwyMDI4NywyMDI4OCwyMDI4OSwyMDI5MCwyMDI5MiwyMDI5''@;'; put 'put ''MywyMDI5NSwyMDI5NiwyMDI5NywyMDI5OCwyMDI5OSwyMDMwMCwyMDMwNiwyMDMwOCwyMDMxMCwyMDMyMSwyMDMyMiwyMDMyNiwyMDMyOCwyMDMzMCwyMDMzMSwyMDMzMywyMDMzNCwyMDMzNywyMDMzOCwyMDM0MSwyMDM0MywyMDM0NCwyMDM0NSwyMDM0NiwyMDM0OSwyMDM1MiwyMDM1Mywy''@;'; put 'put ''MDM1NCwyMDM1NywyMDM1OCwyMDM1OSwyMDM2MiwyMDM2NCwyMDM2NiwyMDM2OCwyMDM3MCwyMDM3MSwyMDM3MywyMDM3NCwyMDM3NiwyMDM3NywyMDM3OCwyMDM4MCwyMDM4MiwyMDM4MywyMDM4NSwyMDM4NiwyMDM4OCwyMDM5NSwyMDM5NywyMDQwMCwyMDQwMSwyMDQwMiwyMDQwMywyMDQw''@;'; put 'put ''NCwyMDQwNiwyMDQwNywyMDQwOCwyMDQwOSwyMDQxMCwyMDQxMSwyMDQxMiwyMDQxMywyMDQxNCwyMDQxNiwyMDQxNywyMDQxOCwyMDQyMiwyMDQyMywyMDQyNCwyMDQyNSwyMDQyNywyMDQyOCwyMDQyOSwyMDQzNCwyMDQzNSwyMDQzNiwyMDQzNywyMDQzOCwyMDQ0MSwyMDQ0MywyMDQ0OCwy''@;'; put 'put ''MDQ1MCwyMDQ1MiwyMDQ1MywyMDQ1NSwyMDQ1OSwyMDQ2MCwyMDQ2NCwyMDQ2NiwyMDQ2OCwyMDQ2OSwyMDQ3MCwyMDQ3MSwyMDQ3MywyMDQ3NSwyMDQ3NiwyMDQ3NywyMDQ3OSwyMDQ4MCwyMDQ4MSwyMDQ4MiwyMDQ4MywyMDQ4NCwyMDQ4NSwyMDQ4NiwyMDQ4NywyMDQ4OCwyMDQ4OSwyMDQ5''@;'; put 'put ''MCwyMDQ5MSwyMDQ5NCwyMDQ5NiwyMDQ5NywyMDQ5OSwyMDUwMSwyMDUwMiwyMDUwMywyMDUwNywyMDUwOSwyMDUxMCwyMDUxMiwyMDUxNCwyMDUxNSwyMDUxNiwyMDUxOSwyMDUyMywyMDUyNywyMDUyOCwyMDUyOSwyMDUzMCwyMDUzMSwyMDUzMiwyMDUzMywyMDUzNCwyMDUzNSwyMDUzNiwy''@;'; put 'put ''MDUzNywyMDUzOSwyMDU0MSwyMDU0MywyMDU0NCwyMDU0NSwyMDU0NiwyMDU0OCwyMDU0OSwyMDU1MCwyMDU1MywyMDU1NCwyMDU1NSwyMDU1NywyMDU2MCwyMDU2MSwyMDU2MiwyMDU2MywyMDU2NCwyMDU2NiwyMDU2NywyMDU2OCwyMDU2OSwyMDU3MSwyMDU3MywyMDU3NCwyMDU3NSwyMDU3''@;'; put 'put ''NiwyMDU3NywyMDU3OCwyMDU3OSwyMDU4MCwyMDU4MiwyMDU4MywyMDU4NCwyMDU4NSwyMDU4NiwyMDU4NywyMDU4OSwyMDU5MCwyMDU5MSwyMDU5MiwyMDU5MywyMDU5NCwyMDU5NSwyMDU5NiwyMDU5NywyMDYwMCwyMDYwMSwyMDYwMiwyMDYwNCwyMDYwNSwyMDYwOSwyMDYxMCwyMDYxMSwy''@;'; put 'put ''MDYxMiwyMDYxNCwyMDYxNSwyMDYxNywyMDYxOCwyMDYxOSwyMDYyMCwyMDYyMiwyMDYyMywyMDYyNCwyMDYyNSwyMDYyNiwyMDYyNywyMDYyOCwyMDYyOSwyMDYzMCwyMDYzMSwyMDYzMiwyMDYzMywyMDYzNCwyMDYzNSwyMDYzNiwyMDYzNywyMDYzOCwyMDYzOSwyMDY0MCwyMDY0MSwyMDY0''@;'; put 'put ''MiwyMDY0NCwyMDY0NiwyMDY1MCwyMDY1MSwyMDY1MywyMDY1NCwyMDY1NSwyMDY1NiwyMDY1NywyMDY1OSwyMDY2MCwyMDY2MSwyMDY2MiwyMDY2MywyMDY2NCwyMDY2NSwyMDY2OCwyMDY2OSwyMDY3MCwyMDY3MSwyMDY3MiwyMDY3MywyMDY3NCwyMDY3NSwyMDY3NiwyMDY3NywyMDY3OCwy''@;'; put 'put ''MDY3OSwyMDY4MCwyMDY4MSwyMDY4MiwyMDY4MywyMDY4NCwyMDY4NSwyMDY4NiwyMDY4OCwyMDY4OSwyMDY5MCwyMDY5MSwyMDY5MiwyMDY5MywyMDY5NSwyMDY5NiwyMDY5NywyMDY5OSwyMDcwMCwyMDcwMSwyMDcwMiwyMDcwMywyMDcwNCwyMDcwNSwyMDcwNiwyMDcwNywyMDcwOCwyMDcw''@;'; put 'put ''OSwyMDcxMiwyMDcxMywyMDcxNCwyMDcxNSwyMDcxOSwyMDcyMCwyMDcyMSwyMDcyMiwyMDcyNCwyMDcyNiwyMDcyNywyMDcyOCwyMDcyOSwyMDczMCwyMDczMiwyMDczMywyMDczNCwyMDczNSwyMDczNiwyMDczNywyMDczOCwyMDczOSwyMDc0MCwyMDc0MSwyMDc0NCwyMDc0NSwyMDc0Niwy''@;'; put 'put ''MDc0OCwyMDc0OSwyMDc1MCwyMDc1MSwyMDc1MiwyMDc1MywyMDc1NSwyMDc1NiwyMDc1NywyMDc1OCwyMDc1OSwyMDc2MCwyMDc2MSwyMDc2MiwyMDc2MywyMDc2NCwyMDc2NSwyMDc2NiwyMDc2NywyMDc2OCwyMDc3MCwyMDc3MSwyMDc3MiwyMDc3MywyMDc3NCwyMDc3NSwyMDc3NiwyMDc3''@;'; put 'put ''NywyMDc3OCwyMDc3OSwyMDc4MCwyMDc4MSwyMDc4MiwyMDc4MywyMDc4NCwyMDc4NSwyMDc4NiwyMDc4NywyMDc4OCwyMDc4OSwyMDc5MCwyMDc5MSwyMDc5MiwyMDc5MywyMDc5NCwyMDc5NSwyMDc5NiwyMDc5NywyMDc5OCwyMDgwMiwyMDgwNywyMDgxMCwyMDgxMiwyMDgxNCwyMDgxNSwy''@;'; put 'put ''MDgxNiwyMDgxOCwyMDgxOSwyMDgyMywyMDgyNCwyMDgyNSwyMDgyNywyMDgyOSwyMDgzMCwyMDgzMSwyMDgzMiwyMDgzMywyMDgzNSwyMDgzNiwyMDgzOCwyMDgzOSwyMDg0MSwyMDg0MiwyMDg0NywyMDg1MCwyMDg1OCwyMDg2MiwyMDg2MywyMDg2NywyMDg2OCwyMDg3MCwyMDg3MSwyMDg3''@;'; put 'put ''NCwyMDg3NSwyMDg3OCwyMDg3OSwyMDg4MCwyMDg4MSwyMDg4MywyMDg4NCwyMDg4OCwyMDg5MCwyMDg5MywyMDg5NCwyMDg5NSwyMDg5NywyMDg5OSwyMDkwMiwyMDkwMywyMDkwNCwyMDkwNSwyMDkwNiwyMDkwOSwyMDkxMCwyMDkxNiwyMDkyMCwyMDkyMSwyMDkyMiwyMDkyNiwyMDkyNywy''@;'; put 'put ''MDkyOSwyMDkzMCwyMDkzMSwyMDkzMywyMDkzNiwyMDkzOCwyMDk0MSwyMDk0MiwyMDk0NCwyMDk0NiwyMDk0NywyMDk0OCwyMDk0OSwyMDk1MCwyMDk1MSwyMDk1MiwyMDk1MywyMDk1NCwyMDk1NiwyMDk1OCwyMDk1OSwyMDk2MiwyMDk2MywyMDk2NSwyMDk2NiwyMDk2NywyMDk2OCwyMDk2''@;'; put 'put ''OSwyMDk3MCwyMDk3MiwyMDk3NCwyMDk3NywyMDk3OCwyMDk4MCwyMDk4MywyMDk5MCwyMDk5NiwyMDk5NywyMTAwMSwyMTAwMywyMTAwNCwyMTAwNywyMTAwOCwyMTAxMSwyMTAxMiwyMTAxMywyMTAyMCwyMTAyMiwyMTAyMywyMTAyNSwyMTAyNiwyMTAyNywyMTAyOSwyMTAzMCwyMTAzMSwy''@;'; put 'put ''MTAzNCwyMTAzNiwyMTAzOSwyMTA0MSwyMTA0MiwyMTA0NCwyMTA0NSwyMTA1MiwyMTA1NCwyMTA2MCwyMTA2MSwyMTA2MiwyMTA2MywyMTA2NCwyMTA2NSwyMTA2NywyMTA3MCwyMTA3MSwyMTA3NCwyMTA3NSwyMTA3NywyMTA3OSwyMTA4MCwyMTA4MSwyMTA4MiwyMTA4MywyMTA4NSwyMTA4''@;'; put 'put ''NywyMTA4OCwyMTA5MCwyMTA5MSwyMTA5MiwyMTA5NCwyMTA5NiwyMTA5OSwyMTEwMCwyMTEwMSwyMTEwMiwyMTEwNCwyMTEwNSwyMTEwNywyMTEwOCwyMTEwOSwyMTExMCwyMTExMSwyMTExMiwyMTExMywyMTExNCwyMTExNSwyMTExNiwyMTExOCwyMTEyMCwyMTEyMywyMTEyNCwyMTEyNSwy''@;'; put 'put ''MTEyNiwyMTEyNywyMTEyOSwyMTEzMCwyMTEzMSwyMTEzMiwyMTEzMywyMTEzNCwyMTEzNSwyMTEzNywyMTEzOCwyMTE0MCwyMTE0MSwyMTE0MiwyMTE0MywyMTE0NCwyMTE0NSwyMTE0NiwyMTE0OCwyMTE1NiwyMTE1NywyMTE1OCwyMTE1OSwyMTE2NiwyMTE2NywyMTE2OCwyMTE3MiwyMTE3''@;'; put 'put ''MywyMTE3NCwyMTE3NSwyMTE3NiwyMTE3NywyMTE3OCwyMTE3OSwyMTE4MCwyMTE4MSwyMTE4NCwyMTE4NSwyMTE4NiwyMTE4OCwyMTE4OSwyMTE5MCwyMTE5MiwyMTE5NCwyMTE5NiwyMTE5NywyMTE5OCwyMTE5OSwyMTIwMSwyMTIwMywyMTIwNCwyMTIwNSwyMTIwNywyMTIwOSwyMTIxMCwy''@;'; put 'put ''MTIxMSwyMTIxMiwyMTIxMywyMTIxNCwyMTIxNiwyMTIxNywyMTIxOCwyMTIxOSwyMTIyMSwyMTIyMiwyMTIyMywyMTIyNCwyMTIyNSwyMTIyNiwyMTIyNywyMTIyOCwyMTIyOSwyMTIzMCwyMTIzMSwyMTIzMywyMTIzNCwyMTIzNSwyMTIzNiwyMTIzNywyMTIzOCwyMTIzOSwyMTI0MCwyMTI0''@;'; put 'put ''MywyMTI0NCwyMTI0NSwyMTI0OSwyMTI1MCwyMTI1MSwyMTI1MiwyMTI1NSwyMTI1NywyMTI1OCwyMTI1OSwyMTI2MCwyMTI2MiwyMTI2NSwyMTI2NiwyMTI2NywyMTI2OCwyMTI3MiwyMTI3NSwyMTI3NiwyMTI3OCwyMTI3OSwyMTI4MiwyMTI4NCwyMTI4NSwyMTI4NywyMTI4OCwyMTI4OSwy''@;'; put 'put ''MTI5MSwyMTI5MiwyMTI5MywyMTI5NSwyMTI5NiwyMTI5NywyMTI5OCwyMTI5OSwyMTMwMCwyMTMwMSwyMTMwMiwyMTMwMywyMTMwNCwyMTMwOCwyMTMwOSwyMTMxMiwyMTMxNCwyMTMxNiwyMTMxOCwyMTMyMywyMTMyNCwyMTMyNSwyMTMyOCwyMTMzMiwyMTMzNiwyMTMzNywyMTMzOSwyMTM0''@;'; put 'put ''MSwyMTM0OSwyMTM1MiwyMTM1NCwyMTM1NiwyMTM1NywyMTM2MiwyMTM2NiwyMTM2OSwyMTM3MSwyMTM3MiwyMTM3MywyMTM3NCwyMTM3NiwyMTM3NywyMTM3OSwyMTM4MywyMTM4NCwyMTM4NiwyMTM5MCwyMTM5MSwyMTM5MiwyMTM5MywyMTM5NCwyMTM5NSwyMTM5NiwyMTM5OCwyMTM5OSwy''@;'; put 'put ''MTQwMSwyMTQwMywyMTQwNCwyMTQwNiwyMTQwOCwyMTQwOSwyMTQxMiwyMTQxNSwyMTQxOCwyMTQxOSwyMTQyMCwyMTQyMSwyMTQyMywyMTQyNCwyMTQyNSwyMTQyNiwyMTQyNywyMTQyOCwyMTQyOSwyMTQzMSwyMTQzMiwyMTQzMywyMTQzNCwyMTQzNiwyMTQzNywyMTQzOCwyMTQ0MCwyMTQ0''@;'; put 'put ''MywyMTQ0NCwyMTQ0NSwyMTQ0NiwyMTQ0NywyMTQ1NCwyMTQ1NSwyMTQ1NiwyMTQ1OCwyMTQ1OSwyMTQ2MSwyMTQ2NiwyMTQ2OCwyMTQ2OSwyMTQ3MCwyMTQ3MywyMTQ3NCwyMTQ3OSwyMTQ5MiwyMTQ5OCwyMTUwMiwyMTUwMywyMTUwNCwyMTUwNiwyMTUwOSwyMTUxMSwyMTUxNSwyMTUyNCwy''@;'; put 'put ''MTUyOCwyMTUyOSwyMTUzMCwyMTUzMiwyMTUzOCwyMTU0MCwyMTU0MSwyMTU0NiwyMTU1MiwyMTU1NSwyMTU1OCwyMTU1OSwyMTU2MiwyMTU2NSwyMTU2NywyMTU2OSwyMTU3MCwyMTU3MiwyMTU3MywyMTU3NSwyMTU3NywyMTU4MCwyMTU4MSwyMTU4MiwyMTU4MywyMTU4NSwyMTU5NCwyMTU5''@;'; put 'put ''NywyMTU5OCwyMTU5OSwyMTYwMCwyMTYwMSwyMTYwMywyMTYwNSwyMTYwNywyMTYwOSwyMTYxMCwyMTYxMSwyMTYxMiwyMTYxMywyMTYxNCwyMTYxNSwyMTYxNiwyMTYyMCwyMTYyNSwyMTYyNiwyMTYzMCwyMTYzMSwyMTYzMywyMTYzNSwyMTYzNywyMTYzOSwyMTY0MCwyMTY0MSwyMTY0Miwy''@;'; put 'put ''MTY0NSwyMTY0OSwyMTY1MSwyMTY1NSwyMTY1NiwyMTY2MCwyMTY2MiwyMTY2MywyMTY2NCwyMTY2NSwyMTY2NiwyMTY2OSwyMTY3OCwyMTY4MCwyMTY4MiwyMTY4NSwyMTY4NiwyMTY4NywyMTY4OSwyMTY5MCwyMTY5MiwyMTY5NCwyMTY5OSwyMTcwMSwyMTcwNiwyMTcwNywyMTcxOCwyMTcy''@;'; put 'put ''MCwyMTcyMywyMTcyOCwyMTcyOSwyMTczMCwyMTczMSwyMTczMiwyMTczOSwyMTc0MCwyMTc0MywyMTc0NCwyMTc0NSwyMTc0OCwyMTc0OSwyMTc1MCwyMTc1MSwyMTc1MiwyMTc1MywyMTc1NSwyMTc1OCwyMTc2MCwyMTc2MiwyMTc2MywyMTc2NCwyMTc2NSwyMTc2OCwyMTc3MCwyMTc3MSwy''@;'; put 'put ''MTc3MiwyMTc3MywyMTc3NCwyMTc3OCwyMTc3OSwyMTc4MSwyMTc4MiwyMTc4MywyMTc4NCwyMTc4NSwyMTc4NiwyMTc4OCwyMTc4OSwyMTc5MCwyMTc5MSwyMTc5MywyMTc5NywyMTc5OCwyMTgwMCwyMTgwMSwyMTgwMywyMTgwNSwyMTgxMCwyMTgxMiwyMTgxMywyMTgxNCwyMTgxNiwyMTgx''@;'; put 'put ''NywyMTgxOCwyMTgxOSwyMTgyMSwyMTgyNCwyMTgyNiwyMTgyOSwyMTgzMSwyMTgzMiwyMTgzNSwyMTgzNiwyMTgzNywyMTgzOCwyMTgzOSwyMTg0MSwyMTg0MiwyMTg0MywyMTg0NCwyMTg0NywyMTg0OCwyMTg0OSwyMTg1MCwyMTg1MSwyMTg1MywyMTg1NCwyMTg1NSwyMTg1NiwyMTg1OCwy''@;'; put 'put ''MTg1OSwyMTg2NCwyMTg2NSwyMTg2NywyMTg3MSwyMTg3MiwyMTg3MywyMTg3NCwyMTg3NSwyMTg3NiwyMTg4MSwyMTg4MiwyMTg4NSwyMTg4NywyMTg5MywyMTg5NCwyMTkwMCwyMTkwMSwyMTkwMiwyMTkwNCwyMTkwNiwyMTkwNywyMTkwOSwyMTkxMCwyMTkxMSwyMTkxNCwyMTkxNSwyMTkx''@;'; put 'put ''OCwyMTkyMCwyMTkyMSwyMTkyMiwyMTkyMywyMTkyNCwyMTkyNSwyMTkyNiwyMTkyOCwyMTkyOSwyMTkzMCwyMTkzMSwyMTkzMiwyMTkzMywyMTkzNCwyMTkzNSwyMTkzNiwyMTkzOCwyMTk0MCwyMTk0MiwyMTk0NCwyMTk0NiwyMTk0OCwyMTk1MSwyMTk1MiwyMTk1MywyMTk1NCwyMTk1NSwy''@;'; put 'put ''MTk1OCwyMTk1OSwyMTk2MCwyMTk2MiwyMTk2MywyMTk2NiwyMTk2NywyMTk2OCwyMTk3MywyMTk3NSwyMTk3NiwyMTk3NywyMTk3OCwyMTk3OSwyMTk4MiwyMTk4NCwyMTk4NiwyMTk5MSwyMTk5MywyMTk5NywyMTk5OCwyMmUzLDIyMDAxLDIyMDA0LDIyMDA2LDIyMDA4LDIyMDA5LDIyMDEw''@;'; put 'put ''LDIyMDExLDIyMDEyLDIyMDE1LDIyMDE4LDIyMDE5LDIyMDIwLDIyMDIxLDIyMDIyLDIyMDIzLDIyMDI2LDIyMDI3LDIyMDI5LDIyMDMyLDIyMDMzLDIyMDM0LDIyMDM1LDIyMDM2LDIyMDM3LDIyMDM4LDIyMDM5LDIyMDQxLDIyMDQyLDIyMDQ0LDIyMDQ1LDIyMDQ4LDIyMDQ5LDIyMDUwLDIy''@;'; put 'put ''MDUzLDIyMDU0LDIyMDU2LDIyMDU3LDIyMDU4LDIyMDU5LDIyMDYyLDIyMDYzLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIyMDcyLDIyMDc0LDIyMDc2LDIyMDc3LDIyMDc4LDIyMDgwLDIyMDgxLDIyMDgyLDIyMDgzLDIyMDg0LDIyMDg1LDIyMDg2LDIyMDg3LDIyMDg4LDIyMDg5LDIyMDkw''@;'; put 'put ''LDIyMDkxLDIyMDk1LDIyMDk2LDIyMDk3LDIyMDk4LDIyMDk5LDIyMTAxLDIyMTAyLDIyMTA2LDIyMTA3LDIyMTA5LDIyMTEwLDIyMTExLDIyMTEyLDIyMTEzLDIyMTE1LDIyMTE3LDIyMTE4LDIyMTE5LDIyMTI1LDIyMTI2LDIyMTI3LDIyMTI4LDIyMTMwLDIyMTMxLDIyMTMyLDIyMTMzLDIy''@;'; put 'put ''MTM1LDIyMTM2LDIyMTM3LDIyMTM4LDIyMTQxLDIyMTQyLDIyMTQzLDIyMTQ0LDIyMTQ1LDIyMTQ2LDIyMTQ3LDIyMTQ4LDIyMTUxLDIyMTUyLDIyMTUzLDIyMTU0LDIyMTU1LDIyMTU2LDIyMTU3LDIyMTYwLDIyMTYxLDIyMTYyLDIyMTY0LDIyMTY1LDIyMTY2LDIyMTY3LDIyMTY4LDIyMTY5''@;'; put 'put ''LDIyMTcwLDIyMTcxLDIyMTcyLDIyMTczLDIyMTc0LDIyMTc1LDIyMTc2LDIyMTc3LDIyMTc4LDIyMTgwLDIyMTgxLDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg2LDIyMTg3LDIyMTg4LDIyMTg5LDIyMTkwLDIyMTkyLDIyMTkzLDIyMTk0LDIyMTk1LDIyMTk2LDIyMTk3LDIyMTk4LDIy''@;'; put 'put ''MjAwLDIyMjAxLDIyMjAyLDIyMjAzLDIyMjA1LDIyMjA2LDIyMjA3LDIyMjA4LDIyMjA5LDIyMjEwLDIyMjExLDIyMjEyLDIyMjEzLDIyMjE0LDIyMjE1LDIyMjE2LDIyMjE3LDIyMjE5LDIyMjIwLDIyMjIxLDIyMjIyLDIyMjIzLDIyMjI0LDIyMjI1LDIyMjI2LDIyMjI3LDIyMjI5LDIyMjMw''@;'; put 'put ''LDIyMjMyLDIyMjMzLDIyMjM2LDIyMjQzLDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjQ5LDIyMjUwLDIyMjUyLDIyMjU0LDIyMjU1LDIyMjU4LDIyMjU5LDIyMjYyLDIyMjYzLDIyMjY0LDIyMjY3LDIyMjY4LDIyMjcyLDIyMjczLDIyMjc0LDIyMjc3LDIyMjc5LDIyMjgzLDIyMjg0LDIy''@;'; put 'put ''Mjg1LDIyMjg2LDIyMjg3LDIyMjg4LDIyMjg5LDIyMjkwLDIyMjkxLDIyMjkyLDIyMjkzLDIyMjk0LDIyMjk1LDIyMjk2LDIyMjk3LDIyMjk4LDIyMjk5LDIyMzAxLDIyMzAyLDIyMzA0LDIyMzA1LDIyMzA2LDIyMzA4LDIyMzA5LDIyMzEwLDIyMzExLDIyMzE1LDIyMzIxLDIyMzIyLDIyMzI0''@;'; put 'put ''LDIyMzI1LDIyMzI2LDIyMzI3LDIyMzI4LDIyMzMyLDIyMzMzLDIyMzM1LDIyMzM3LDIyMzM5LDIyMzQwLDIyMzQxLDIyMzQyLDIyMzQ0LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyMzU1LDIyMzU2LDIyMzU3LDIyMzU4LDIyMzYwLDIyMzYxLDIyMzcwLDIyMzcxLDIyMzczLDIyMzc1LDIyMzgwLDIy''@;'; put 'put ''MzgyLDIyMzg0LDIyMzg1LDIyMzg2LDIyMzg4LDIyMzg5LDIyMzkyLDIyMzkzLDIyMzk0LDIyMzk3LDIyMzk4LDIyMzk5LDIyNDAwLDIyNDAxLDIyNDA3LDIyNDA4LDIyNDA5LDIyNDEwLDIyNDEzLDIyNDE0LDIyNDE1LDIyNDE2LDIyNDE3LDIyNDIwLDIyNDIxLDIyNDIyLDIyNDIzLDIyNDI0''@;'; put 'put ''LDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMwLDIyNDMxLDIyNDM3LDIyNDQwLDIyNDQyLDIyNDQ0LDIyNDQ3LDIyNDQ4LDIyNDQ5LDIyNDUxLDIyNDUzLDIyNDU0LDIyNDU1LDIyNDU3LDIyNDU4LDIyNDU5LDIyNDYwLDIyNDYxLDIyNDYyLDIyNDYzLDIyNDY0LDIyNDY1LDIyNDY4LDIy''@;'; put 'put ''NDY5LDIyNDcwLDIyNDcxLDIyNDcyLDIyNDczLDIyNDc0LDIyNDc2LDIyNDc3LDIyNDgwLDIyNDgxLDIyNDgzLDIyNDg2LDIyNDg3LDIyNDkxLDIyNDkyLDIyNDk0LDIyNDk3LDIyNDk4LDIyNDk5LDIyNTAxLDIyNTAyLDIyNTAzLDIyNTA0LDIyNTA1LDIyNTA2LDIyNTA3LDIyNTA4LDIyNTEw''@;'; put 'put ''LDIyNTEyLDIyNTEzLDIyNTE0LDIyNTE1LDIyNTE3LDIyNTE4LDIyNTE5LDIyNTIzLDIyNTI0LDIyNTI2LDIyNTI3LDIyNTI5LDIyNTMxLDIyNTMyLDIyNTMzLDIyNTM2LDIyNTM3LDIyNTM4LDIyNTQwLDIyNTQyLDIyNTQzLDIyNTQ0LDIyNTQ2LDIyNTQ3LDIyNTQ4LDIyNTUwLDIyNTUxLDIy''@;'; put 'put ''NTUyLDIyNTU0LDIyNTU1LDIyNTU2LDIyNTU3LDIyNTU5LDIyNTYyLDIyNTYzLDIyNTY1LDIyNTY2LDIyNTY3LDIyNTY4LDIyNTY5LDIyNTcxLDIyNTcyLDIyNTczLDIyNTc0LDIyNTc1LDIyNTc3LDIyNTc4LDIyNTc5LDIyNTgwLDIyNTgyLDIyNTgzLDIyNTg0LDIyNTg1LDIyNTg2LDIyNTg3''@;'; put 'put ''LDIyNTg4LDIyNTg5LDIyNTkwLDIyNTkxLDIyNTkyLDIyNTkzLDIyNTk0LDIyNTk1LDIyNTk3LDIyNTk4LDIyNTk5LDIyNjAwLDIyNjAxLDIyNjAyLDIyNjAzLDIyNjA2LDIyNjA3LDIyNjA4LDIyNjEwLDIyNjExLDIyNjEzLDIyNjE0LDIyNjE1LDIyNjE3LDIyNjE4LDIyNjE5LDIyNjIwLDIy''@;'; put 'put ''NjIxLDIyNjIzLDIyNjI0LDIyNjI1LDIyNjI2LDIyNjI3LDIyNjI4LDIyNjMwLDIyNjMxLDIyNjMyLDIyNjMzLDIyNjM0LDIyNjM3LDIyNjM4LDIyNjM5LDIyNjQwLDIyNjQxLDIyNjQyLDIyNjQzLDIyNjQ0LDIyNjQ1LDIyNjQ2LDIyNjQ3LDIyNjQ4LDIyNjQ5LDIyNjUwLDIyNjUxLDIyNjUy''@;'; put 'put ''LDIyNjUzLDIyNjU1LDIyNjU4LDIyNjYwLDIyNjYyLDIyNjYzLDIyNjY0LDIyNjY2LDIyNjY3LDIyNjY4LDIyNjY5LDIyNjcwLDIyNjcxLDIyNjcyLDIyNjczLDIyNjc2LDIyNjc3LDIyNjc4LDIyNjc5LDIyNjgwLDIyNjgzLDIyNjg0LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjkxLDIy''@;'; put 'put ''NjkyLDIyNjkzLDIyNjk0LDIyNjk1LDIyNjk4LDIyNjk5LDIyNzAwLDIyNzAxLDIyNzAyLDIyNzAzLDIyNzA0LDIyNzA1LDIyNzA2LDIyNzA3LDIyNzA4LDIyNzA5LDIyNzEwLDIyNzExLDIyNzEyLDIyNzEzLDIyNzE0LDIyNzE1LDIyNzE3LDIyNzE4LDIyNzE5LDIyNzIwLDIyNzIyLDIyNzIz''@;'; put 'put ''LDIyNzI0LDIyNzI2LDIyNzI3LDIyNzI4LDIyNzI5LDIyNzMwLDIyNzMxLDIyNzMyLDIyNzMzLDIyNzM0LDIyNzM1LDIyNzM2LDIyNzM4LDIyNzM5LDIyNzQwLDIyNzQyLDIyNzQzLDIyNzQ0LDIyNzQ1LDIyNzQ2LDIyNzQ3LDIyNzQ4LDIyNzQ5LDIyNzUwLDIyNzUxLDIyNzUyLDIyNzUzLDIy''@;'; put 'put ''NzU0LDIyNzU1LDIyNzU3LDIyNzU4LDIyNzU5LDIyNzYwLDIyNzYxLDIyNzYyLDIyNzY1LDIyNzY3LDIyNzY5LDIyNzcwLDIyNzcyLDIyNzczLDIyNzc1LDIyNzc2LDIyNzc4LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzgyLDIyNzgzLDIyNzg0LDIyNzg1LDIyNzg3LDIyNzg5LDIyNzkwLDIyNzky''@;'; put 'put ''LDIyNzkzLDIyNzk0LDIyNzk1LDIyNzk2LDIyNzk4LDIyODAwLDIyODAxLDIyODAyLDIyODAzLDIyODA3LDIyODA4LDIyODExLDIyODEzLDIyODE0LDIyODE2LDIyODE3LDIyODE4LDIyODE5LDIyODIyLDIyODI0LDIyODI4LDIyODMyLDIyODM0LDIyODM1LDIyODM3LDIyODM4LDIyODQzLDIy''@;'; put 'put ''ODQ1LDIyODQ2LDIyODQ3LDIyODQ4LDIyODUxLDIyODUzLDIyODU0LDIyODU4LDIyODYwLDIyODYxLDIyODY0LDIyODY2LDIyODY3LDIyODczLDIyODc1LDIyODc2LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODg0LDIyODg2LDIyODg3LDIyODg4LDIyODg5LDIyODkwLDIyODkx''@;'; put 'put ''LDIyODkyLDIyODkzLDIyODk0LDIyODk1LDIyODk2LDIyODk3LDIyODk4LDIyOTAxLDIyOTAzLDIyOTA2LDIyOTA3LDIyOTA4LDIyOTEwLDIyOTExLDIyOTEyLDIyOTE3LDIyOTIxLDIyOTIzLDIyOTI0LDIyOTI2LDIyOTI3LDIyOTI4LDIyOTI5LDIyOTMyLDIyOTMzLDIyOTM2LDIyOTM4LDIy''@;'; put 'put ''OTM5LDIyOTQwLDIyOTQxLDIyOTQzLDIyOTQ0LDIyOTQ1LDIyOTQ2LDIyOTUwLDIyOTUxLDIyOTU2LDIyOTU3LDIyOTYwLDIyOTYxLDIyOTYzLDIyOTY0LDIyOTY1LDIyOTY2LDIyOTY3LDIyOTY4LDIyOTcwLDIyOTcyLDIyOTczLDIyOTc1LDIyOTc2LDIyOTc3LDIyOTc4LDIyOTc5LDIyOTgw''@;'; put 'put ''LDIyOTgxLDIyOTgzLDIyOTg0LDIyOTg1LDIyOTg4LDIyOTg5LDIyOTkwLDIyOTkxLDIyOTk3LDIyOTk4LDIzMDAxLDIzMDAzLDIzMDA2LDIzMDA3LDIzMDA4LDIzMDA5LDIzMDEwLDIzMDEyLDIzMDE0LDIzMDE1LDIzMDE3LDIzMDE4LDIzMDE5LDIzMDIxLDIzMDIyLDIzMDIzLDIzMDI0LDIz''@;'; put 'put ''MDI1LDIzMDI2LDIzMDI3LDIzMDI4LDIzMDI5LDIzMDMwLDIzMDMxLDIzMDMyLDIzMDM0LDIzMDM2LDIzMDM3LDIzMDM4LDIzMDQwLDIzMDQyLDIzMDUwLDIzMDUxLDIzMDUzLDIzMDU0LDIzMDU1LDIzMDU2LDIzMDU4LDIzMDYwLDIzMDYxLDIzMDYyLDIzMDYzLDIzMDY1LDIzMDY2LDIzMDY3''@;'; put 'put ''LDIzMDY5LDIzMDcwLDIzMDczLDIzMDc0LDIzMDc2LDIzMDc4LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDgzLDIzMDg0LDIzMDg1LDIzMDg2LDIzMDg3LDIzMDg4LDIzMDkxLDIzMDkzLDIzMDk1LDIzMDk2LDIzMDk3LDIzMDk4LDIzMDk5LDIzMTAxLDIzMTAyLDIzMTAzLDIzMTA1LDIzMTA2LDIz''@;'; put 'put ''MTA3LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIzMTE1LDIzMTE2LDIzMTE3LDIzMTE4LDIzMTE5LDIzMTIwLDIzMTIxLDIzMTIyLDIzMTIzLDIzMTI0LDIzMTI2LDIzMTI3LDIzMTI4LDIzMTI5LDIzMTMxLDIzMTMyLDIzMTMzLDIzMTM0LDIzMTM1LDIzMTM2LDIzMTM3LDIzMTM5LDIzMTQw''@;'; put 'put ''LDIzMTQxLDIzMTQyLDIzMTQ0LDIzMTQ1LDIzMTQ3LDIzMTQ4LDIzMTQ5LDIzMTUwLDIzMTUxLDIzMTUyLDIzMTUzLDIzMTU0LDIzMTU1LDIzMTYwLDIzMTYxLDIzMTYzLDIzMTY0LDIzMTY1LDIzMTY2LDIzMTY4LDIzMTY5LDIzMTcwLDIzMTcxLDIzMTcyLDIzMTczLDIzMTc0LDIzMTc1LDIz''@;'; put 'put ''MTc2LDIzMTc3LDIzMTc4LDIzMTc5LDIzMTgwLDIzMTgxLDIzMTgyLDIzMTgzLDIzMTg0LDIzMTg1LDIzMTg3LDIzMTg4LDIzMTg5LDIzMTkwLDIzMTkxLDIzMTkyLDIzMTkzLDIzMTk2LDIzMTk3LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAxLDIzMjAyLDIzMjAzLDIzMjA0LDIzMjA1LDIzMjA2''@;'; put 'put ''LDIzMjA3LDIzMjA4LDIzMjA5LDIzMjExLDIzMjEyLDIzMjEzLDIzMjE0LDIzMjE1LDIzMjE2LDIzMjE3LDIzMjIwLDIzMjIyLDIzMjIzLDIzMjI1LDIzMjI2LDIzMjI3LDIzMjI4LDIzMjI5LDIzMjMxLDIzMjMyLDIzMjM1LDIzMjM2LDIzMjM3LDIzMjM4LDIzMjM5LDIzMjQwLDIzMjQyLDIz''@;'; put 'put ''MjQzLDIzMjQ1LDIzMjQ2LDIzMjQ3LDIzMjQ4LDIzMjQ5LDIzMjUxLDIzMjUzLDIzMjU1LDIzMjU3LDIzMjU4LDIzMjU5LDIzMjYxLDIzMjYyLDIzMjYzLDIzMjY2LDIzMjY4LDIzMjY5LDIzMjcxLDIzMjcyLDIzMjc0LDIzMjc2LDIzMjc3LDIzMjc4LDIzMjc5LDIzMjgwLDIzMjgyLDIzMjgz''@;'; put 'put ''LDIzMjg0LDIzMjg1LDIzMjg2LDIzMjg3LDIzMjg4LDIzMjg5LDIzMjkwLDIzMjkxLDIzMjkyLDIzMjkzLDIzMjk0LDIzMjk1LDIzMjk2LDIzMjk3LDIzMjk4LDIzMjk5LDIzMzAwLDIzMzAxLDIzMzAyLDIzMzAzLDIzMzA0LDIzMzA2LDIzMzA3LDIzMzA4LDIzMzA5LDIzMzEwLDIzMzExLDIz''@;'; put 'put ''MzEyLDIzMzEzLDIzMzE0LDIzMzE1LDIzMzE2LDIzMzE3LDIzMzIwLDIzMzIxLDIzMzIyLDIzMzIzLDIzMzI0LDIzMzI1LDIzMzI2LDIzMzI3LDIzMzI4LDIzMzI5LDIzMzMwLDIzMzMxLDIzMzMyLDIzMzMzLDIzMzM0LDIzMzM1LDIzMzM2LDIzMzM3LDIzMzM4LDIzMzM5LDIzMzQwLDIzMzQx''@;'; put 'put ''LDIzMzQyLDIzMzQzLDIzMzQ0LDIzMzQ1LDIzMzQ3LDIzMzQ5LDIzMzUwLDIzMzUyLDIzMzUzLDIzMzU0LDIzMzU1LDIzMzU2LDIzMzU3LDIzMzU4LDIzMzU5LDIzMzYxLDIzMzYyLDIzMzYzLDIzMzY0LDIzMzY1LDIzMzY2LDIzMzY3LDIzMzY4LDIzMzY5LDIzMzcwLDIzMzcxLDIzMzcyLDIz''@;'; put 'put ''MzczLDIzMzc0LDIzMzc1LDIzMzc4LDIzMzgyLDIzMzkwLDIzMzkyLDIzMzkzLDIzMzk5LDIzNDAwLDIzNDAzLDIzNDA1LDIzNDA2LDIzNDA3LDIzNDEwLDIzNDEyLDIzNDE0LDIzNDE1LDIzNDE2LDIzNDE3LDIzNDE5LDIzNDIwLDIzNDIyLDIzNDIzLDIzNDI2LDIzNDMwLDIzNDM0LDIzNDM3''@;'; put 'put ''LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQyLDIzNDQ0LDIzNDQ2LDIzNDU1LDIzNDYzLDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcwLDIzNDcxLDIzNDczLDIzNDc0LDIzNDc5LDIzNDgyLDIzNDgzLDIzNDg0LDIzNDg4LDIzNDg5LDIzNDkxLDIzNDk2LDIzNDk3LDIzNDk4LDIzNDk5LDIz''@;'; put 'put ''NTAxLDIzNTAyLDIzNTAzLDIzNTA1LDIzNTA4LDIzNTA5LDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTE1LDIzNTE2LDIzNTIwLDIzNTIyLDIzNTIzLDIzNTI2LDIzNTI3LDIzNTI5LDIzNTMwLDIzNTMxLDIzNTMyLDIzNTMzLDIzNTM1LDIzNTM3LDIzNTM4LDIzNTM5LDIzNTQw''@;'; put 'put ''LDIzNTQxLDIzNTQyLDIzNTQzLDIzNTQ5LDIzNTUwLDIzNTUyLDIzNTU0LDIzNTU1LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTYzLDIzNTY0LDIzNTY1LDIzNTY2LDIzNTY4LDIzNTcwLDIzNTcxLDIzNTc1LDIzNTc3LDIzNTc5LDIzNTgyLDIzNTgzLDIzNTg0LDIzNTg1LDIzNTg3LDIzNTkwLDIz''@;'; put 'put ''NTkyLDIzNTkzLDIzNTk0LDIzNTk1LDIzNTk3LDIzNTk4LDIzNTk5LDIzNjAwLDIzNjAyLDIzNjAzLDIzNjA1LDIzNjA2LDIzNjA3LDIzNjE5LDIzNjIwLDIzNjIyLDIzNjIzLDIzNjI4LDIzNjI5LDIzNjM0LDIzNjM1LDIzNjM2LDIzNjM4LDIzNjM5LDIzNjQwLDIzNjQyLDIzNjQzLDIzNjQ0''@;'; put 'put ''LDIzNjQ1LDIzNjQ3LDIzNjUwLDIzNjUyLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjU4LDIzNjU5LDIzNjYwLDIzNjYxLDIzNjY0LDIzNjY2LDIzNjY3LDIzNjY4LDIzNjY5LDIzNjcwLDIzNjcxLDIzNjcyLDIzNjc1LDIzNjc2LDIzNjc3LDIzNjc4LDIzNjgwLDIzNjgzLDIzNjg0LDIzNjg1LDIz''@;'; put 'put ''Njg2LDIzNjg3LDIzNjg5LDIzNjkwLDIzNjkxLDIzNjk0LDIzNjk1LDIzNjk4LDIzNjk5LDIzNzAxLDIzNzA5LDIzNzEwLDIzNzExLDIzNzEyLDIzNzEzLDIzNzE2LDIzNzE3LDIzNzE4LDIzNzE5LDIzNzIwLDIzNzIyLDIzNzI2LDIzNzI3LDIzNzI4LDIzNzMwLDIzNzMyLDIzNzM0LDIzNzM3''@;'; put 'put ''LDIzNzM4LDIzNzM5LDIzNzQwLDIzNzQyLDIzNzQ0LDIzNzQ2LDIzNzQ3LDIzNzQ5LDIzNzUwLDIzNzUxLDIzNzUyLDIzNzUzLDIzNzU0LDIzNzU2LDIzNzU3LDIzNzU4LDIzNzU5LDIzNzYwLDIzNzYxLDIzNzYzLDIzNzY0LDIzNzY1LDIzNzY2LDIzNzY3LDIzNzY4LDIzNzcwLDIzNzcxLDIz''@;'; put 'put ''NzcyLDIzNzczLDIzNzc0LDIzNzc1LDIzNzc2LDIzNzc4LDIzNzc5LDIzNzgzLDIzNzg1LDIzNzg3LDIzNzg4LDIzNzkwLDIzNzkxLDIzNzkzLDIzNzk0LDIzNzk1LDIzNzk2LDIzNzk3LDIzNzk4LDIzNzk5LDIzODAwLDIzODAxLDIzODAyLDIzODA0LDIzODA1LDIzODA2LDIzODA3LDIzODA4''@;'; put 'put ''LDIzODA5LDIzODEyLDIzODEzLDIzODE2LDIzODE3LDIzODE4LDIzODE5LDIzODIwLDIzODIxLDIzODIzLDIzODI0LDIzODI1LDIzODI2LDIzODI3LDIzODI5LDIzODMxLDIzODMyLDIzODMzLDIzODM0LDIzODM2LDIzODM3LDIzODM5LDIzODQwLDIzODQxLDIzODQyLDIzODQzLDIzODQ1LDIz''@;'; put 'put ''ODQ4LDIzODUwLDIzODUxLDIzODUyLDIzODU1LDIzODU2LDIzODU3LDIzODU4LDIzODU5LDIzODYxLDIzODYyLDIzODYzLDIzODY0LDIzODY1LDIzODY2LDIzODY3LDIzODY4LDIzODcxLDIzODcyLDIzODczLDIzODc0LDIzODc1LDIzODc2LDIzODc3LDIzODc4LDIzODgwLDIzODgxLDIzODg1''@;'; put 'put ''LDIzODg2LDIzODg3LDIzODg4LDIzODg5LDIzODkwLDIzODkxLDIzODkyLDIzODkzLDIzODk0LDIzODk1LDIzODk3LDIzODk4LDIzOTAwLDIzOTAyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA3LDIzOTA4LDIzOTA5LDIzOTEwLDIzOTExLDIzOTEyLDIzOTE0LDIzOTE3LDIzOTE4LDIz''@;'; put 'put ''OTIwLDIzOTIxLDIzOTIyLDIzOTIzLDIzOTI1LDIzOTI2LDIzOTI3LDIzOTI4LDIzOTI5LDIzOTMwLDIzOTMxLDIzOTMyLDIzOTMzLDIzOTM0LDIzOTM1LDIzOTM2LDIzOTM3LDIzOTM5LDIzOTQwLDIzOTQxLDIzOTQyLDIzOTQzLDIzOTQ0LDIzOTQ1LDIzOTQ2LDIzOTQ3LDIzOTQ4LDIzOTQ5''@;'; put 'put ''LDIzOTUwLDIzOTUxLDIzOTUyLDIzOTUzLDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTU4LDIzOTU5LDIzOTYwLDIzOTYyLDIzOTYzLDIzOTY0LDIzOTY2LDIzOTY3LDIzOTY4LDIzOTY5LDIzOTcwLDIzOTcxLDIzOTcyLDIzOTczLDIzOTc0LDIzOTc1LDIzOTc2LDIzOTc3LDIzOTc4LDIz''@;'; put 'put ''OTc5LDIzOTgwLDIzOTgxLDIzOTgyLDIzOTgzLDIzOTg0LDIzOTg1LDIzOTg2LDIzOTg3LDIzOTg4LDIzOTg5LDIzOTkwLDIzOTkyLDIzOTkzLDIzOTk0LDIzOTk1LDIzOTk2LDIzOTk3LDIzOTk4LDIzOTk5LDI0ZTMsMjQwMDEsMjQwMDIsMjQwMDMsMjQwMDQsMjQwMDYsMjQwMDcsMjQwMDgs''@;'; put 'put ''MjQwMDksMjQwMTAsMjQwMTEsMjQwMTIsMjQwMTQsMjQwMTUsMjQwMTYsMjQwMTcsMjQwMTgsMjQwMTksMjQwMjAsMjQwMjEsMjQwMjIsMjQwMjMsMjQwMjQsMjQwMjUsMjQwMjYsMjQwMjgsMjQwMzEsMjQwMzIsMjQwMzUsMjQwMzYsMjQwNDIsMjQwNDQsMjQwNDUsMjQwNDgsMjQwNTMsMjQw''@;'; put 'put ''NTQsMjQwNTYsMjQwNTcsMjQwNTgsMjQwNTksMjQwNjAsMjQwNjMsMjQwNjQsMjQwNjgsMjQwNzEsMjQwNzMsMjQwNzQsMjQwNzUsMjQwNzcsMjQwNzgsMjQwODIsMjQwODMsMjQwODcsMjQwOTQsMjQwOTUsMjQwOTYsMjQwOTcsMjQwOTgsMjQwOTksMjQxMDAsMjQxMDEsMjQxMDQsMjQxMDUs''@;'; put 'put ''MjQxMDYsMjQxMDcsMjQxMDgsMjQxMTEsMjQxMTIsMjQxMTQsMjQxMTUsMjQxMTYsMjQxMTcsMjQxMTgsMjQxMjEsMjQxMjIsMjQxMjYsMjQxMjcsMjQxMjgsMjQxMjksMjQxMzEsMjQxMzQsMjQxMzUsMjQxMzYsMjQxMzcsMjQxMzgsMjQxMzksMjQxNDEsMjQxNDIsMjQxNDMsMjQxNDQsMjQx''@;'; put 'put ''NDUsMjQxNDYsMjQxNDcsMjQxNTAsMjQxNTEsMjQxNTIsMjQxNTMsMjQxNTQsMjQxNTYsMjQxNTcsMjQxNTksMjQxNjAsMjQxNjMsMjQxNjQsMjQxNjUsMjQxNjYsMjQxNjcsMjQxNjgsMjQxNjksMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzUsMjQxNzYsMjQxNzcsMjQxODEs''@;'; put 'put ''MjQxODMsMjQxODUsMjQxOTAsMjQxOTMsMjQxOTQsMjQxOTUsMjQxOTcsMjQyMDAsMjQyMDEsMjQyMDQsMjQyMDUsMjQyMDYsMjQyMTAsMjQyMTYsMjQyMTksMjQyMjEsMjQyMjUsMjQyMjYsMjQyMjcsMjQyMjgsMjQyMzIsMjQyMzMsMjQyMzQsMjQyMzUsMjQyMzYsMjQyMzgsMjQyMzksMjQy''@;'; put 'put ''NDAsMjQyNDEsMjQyNDIsMjQyNDQsMjQyNTAsMjQyNTEsMjQyNTIsMjQyNTMsMjQyNTUsMjQyNTYsMjQyNTcsMjQyNTgsMjQyNTksMjQyNjAsMjQyNjEsMjQyNjIsMjQyNjMsMjQyNjQsMjQyNjcsMjQyNjgsMjQyNjksMjQyNzAsMjQyNzEsMjQyNzIsMjQyNzYsMjQyNzcsMjQyNzksMjQyODAs''@;'; put 'put ''MjQyODEsMjQyODIsMjQyODQsMjQyODUsMjQyODYsMjQyODcsMjQyODgsMjQyODksMjQyOTAsMjQyOTEsMjQyOTIsMjQyOTMsMjQyOTQsMjQyOTUsMjQyOTcsMjQyOTksMjQzMDAsMjQzMDEsMjQzMDIsMjQzMDMsMjQzMDQsMjQzMDUsMjQzMDYsMjQzMDcsMjQzMDksMjQzMTIsMjQzMTMsMjQz''@;'; put 'put ''MTUsMjQzMTYsMjQzMTcsMjQzMjUsMjQzMjYsMjQzMjcsMjQzMjksMjQzMzIsMjQzMzMsMjQzMzQsMjQzMzYsMjQzMzgsMjQzNDAsMjQzNDIsMjQzNDUsMjQzNDYsMjQzNDgsMjQzNDksMjQzNTAsMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAsMjQzNjMsMjQzNjQsMjQzNjYsMjQzNjgs''@;'; put 'put ''MjQzNzAsMjQzNzEsMjQzNzIsMjQzNzMsMjQzNzQsMjQzNzUsMjQzNzYsMjQzNzksMjQzODEsMjQzODIsMjQzODMsMjQzODUsMjQzODYsMjQzODcsMjQzODgsMjQzODksMjQzOTAsMjQzOTEsMjQzOTIsMjQzOTMsMjQzOTQsMjQzOTUsMjQzOTYsMjQzOTcsMjQzOTgsMjQzOTksMjQ0MDEsMjQ0''@;'; put 'put ''MDQsMjQ0MDksMjQ0MTAsMjQ0MTEsMjQ0MTIsMjQ0MTQsMjQ0MTUsMjQ0MTYsMjQ0MTksMjQ0MjEsMjQ0MjMsMjQ0MjQsMjQ0MjcsMjQ0MzAsMjQ0MzEsMjQ0MzQsMjQ0MzYsMjQ0MzcsMjQ0MzgsMjQ0NDAsMjQ0NDIsMjQ0NDUsMjQ0NDYsMjQ0NDcsMjQ0NTEsMjQ0NTQsMjQ0NjEsMjQ0NjIs''@;'; put 'put ''MjQ0NjMsMjQ0NjUsMjQ0NjcsMjQ0NjgsMjQ0NzAsMjQ0NzQsMjQ0NzUsMjQ0NzcsMjQ0NzgsMjQ0NzksMjQ0ODAsMjQ0ODIsMjQ0ODMsMjQ0ODQsMjQ0ODUsMjQ0ODYsMjQ0ODcsMjQ0ODksMjQ0OTEsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ0OTgsMjQ0OTksMjQ1MDAsMjQ1MDIsMjQ1''@;'; put 'put ''MDQsMjQ1MDUsMjQ1MDYsMjQ1MDcsMjQ1MTAsMjQ1MTEsMjQ1MTIsMjQ1MTMsMjQ1MTQsMjQ1MTksMjQ1MjAsMjQ1MjIsMjQ1MjMsMjQ1MjYsMjQ1MzEsMjQ1MzIsMjQ1MzMsMjQ1MzgsMjQ1MzksMjQ1NDAsMjQ1NDIsMjQ1NDMsMjQ1NDYsMjQ1NDcsMjQ1NDksMjQ1NTAsMjQ1NTIsMjQ1NTMs''@;'; put 'put ''MjQ1NTYsMjQ1NTksMjQ1NjAsMjQ1NjIsMjQ1NjMsMjQ1NjQsMjQ1NjYsMjQ1NjcsMjQ1NjksMjQ1NzAsMjQ1NzIsMjQ1ODMsMjQ1ODQsMjQ1ODUsMjQ1ODcsMjQ1ODgsMjQ1OTIsMjQ1OTMsMjQ1OTUsMjQ1OTksMjQ2MDAsMjQ2MDIsMjQ2MDYsMjQ2MDcsMjQ2MTAsMjQ2MTEsMjQ2MTIsMjQ2''@;'; put 'put ''MjAsMjQ2MjEsMjQ2MjIsMjQ2MjQsMjQ2MjUsMjQ2MjYsMjQ2MjcsMjQ2MjgsMjQ2MzAsMjQ2MzEsMjQ2MzIsMjQ2MzMsMjQ2MzQsMjQ2MzcsMjQ2MzgsMjQ2NDAsMjQ2NDQsMjQ2NDUsMjQ2NDYsMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTAsMjQ2NTIsMjQ2NTQsMjQ2NTUsMjQ2NTcsMjQ2NTks''@;'; put 'put ''MjQ2NjAsMjQ2NjIsMjQ2NjMsMjQ2NjQsMjQ2NjcsMjQ2NjgsMjQ2NzAsMjQ2NzEsMjQ2NzIsMjQ2NzMsMjQ2NzcsMjQ2NzgsMjQ2ODYsMjQ2ODksMjQ2OTAsMjQ2OTIsMjQ2OTMsMjQ2OTUsMjQ3MDIsMjQ3MDQsMjQ3MDUsMjQ3MDYsMjQ3MDksMjQ3MTAsMjQ3MTEsMjQ3MTIsMjQ3MTQsMjQ3''@;'; put 'put ''MTUsMjQ3MTgsMjQ3MTksMjQ3MjAsMjQ3MjEsMjQ3MjMsMjQ3MjUsMjQ3MjcsMjQ3MjgsMjQ3MjksMjQ3MzIsMjQ3MzQsMjQ3MzcsMjQ3MzgsMjQ3NDAsMjQ3NDEsMjQ3NDMsMjQ3NDUsMjQ3NDYsMjQ3NTAsMjQ3NTIsMjQ3NTUsMjQ3NTcsMjQ3NTgsMjQ3NTksMjQ3NjEsMjQ3NjIsMjQ3NjUs''@;'; put 'put ''MjQ3NjYsMjQ3NjcsMjQ3NjgsMjQ3NjksMjQ3NzAsMjQ3NzEsMjQ3NzIsMjQ3NzUsMjQ3NzYsMjQ3NzcsMjQ3ODAsMjQ3ODEsMjQ3ODIsMjQ3ODMsMjQ3ODQsMjQ3ODYsMjQ3ODcsMjQ3ODgsMjQ3OTAsMjQ3OTEsMjQ3OTMsMjQ3OTUsMjQ3OTgsMjQ4MDEsMjQ4MDIsMjQ4MDMsMjQ4MDQsMjQ4''@;'; put 'put ''MDUsMjQ4MTAsMjQ4MTcsMjQ4MTgsMjQ4MjEsMjQ4MjMsMjQ4MjQsMjQ4MjcsMjQ4MjgsMjQ4MjksMjQ4MzAsMjQ4MzEsMjQ4MzQsMjQ4MzUsMjQ4MzYsMjQ4MzcsMjQ4MzksMjQ4NDIsMjQ4NDMsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTYs''@;'; put 'put ''MjQ4NTcsMjQ4NTksMjQ4NjAsMjQ4NjEsMjQ4NjIsMjQ4NjUsMjQ4NjYsMjQ4NjksMjQ4NzIsMjQ4NzMsMjQ4NzQsMjQ4NzYsMjQ4NzcsMjQ4NzgsMjQ4NzksMjQ4ODAsMjQ4ODEsMjQ4ODIsMjQ4ODMsMjQ4ODQsMjQ4ODUsMjQ4ODYsMjQ4ODcsMjQ4ODgsMjQ4ODksMjQ4OTAsMjQ4OTEsMjQ4''@;'; put 'put ''OTIsMjQ4OTMsMjQ4OTQsMjQ4OTYsMjQ4OTcsMjQ4OTgsMjQ4OTksMjQ5MDAsMjQ5MDEsMjQ5MDIsMjQ5MDMsMjQ5MDUsMjQ5MDcsMjQ5MDksMjQ5MTEsMjQ5MTIsMjQ5MTQsMjQ5MTUsMjQ5MTYsMjQ5MTgsMjQ5MTksMjQ5MjAsMjQ5MjEsMjQ5MjIsMjQ5MjMsMjQ5MjQsMjQ5MjYsMjQ5Mjcs''@;'; put 'put ''MjQ5MjgsMjQ5MjksMjQ5MzEsMjQ5MzIsMjQ5MzMsMjQ5MzQsMjQ5MzcsMjQ5MzgsMjQ5MzksMjQ5NDAsMjQ5NDEsMjQ5NDIsMjQ5NDMsMjQ5NDUsMjQ5NDYsMjQ5NDcsMjQ5NDgsMjQ5NTAsMjQ5NTIsMjQ5NTMsMjQ5NTQsMjQ5NTUsMjQ5NTYsMjQ5NTcsMjQ5NTgsMjQ5NTksMjQ5NjAsMjQ5''@;'; put 'put ''NjEsMjQ5NjIsMjQ5NjMsMjQ5NjQsMjQ5NjUsMjQ5NjYsMjQ5NjcsMjQ5NjgsMjQ5NjksMjQ5NzAsMjQ5NzIsMjQ5NzMsMjQ5NzUsMjQ5NzYsMjQ5NzcsMjQ5NzgsMjQ5NzksMjQ5ODEsMjQ5ODIsMjQ5ODMsMjQ5ODQsMjQ5ODUsMjQ5ODYsMjQ5ODcsMjQ5ODgsMjQ5OTAsMjQ5OTEsMjQ5OTIs''@;'; put 'put ''MjQ5OTMsMjQ5OTQsMjQ5OTUsMjQ5OTYsMjQ5OTcsMjQ5OTgsMjUwMDIsMjUwMDMsMjUwMDUsMjUwMDYsMjUwMDcsMjUwMDgsMjUwMDksMjUwMTAsMjUwMTEsMjUwMTIsMjUwMTMsMjUwMTQsMjUwMTYsMjUwMTcsMjUwMTgsMjUwMTksMjUwMjAsMjUwMjEsMjUwMjMsMjUwMjQsMjUwMjUsMjUw''@;'; put 'put ''MjcsMjUwMjgsMjUwMjksMjUwMzAsMjUwMzEsMjUwMzMsMjUwMzYsMjUwMzcsMjUwMzgsMjUwMzksMjUwNDAsMjUwNDMsMjUwNDUsMjUwNDYsMjUwNDcsMjUwNDgsMjUwNDksMjUwNTAsMjUwNTEsMjUwNTIsMjUwNTMsMjUwNTQsMjUwNTUsMjUwNTYsMjUwNTcsMjUwNTgsMjUwNTksMjUwNjAs''@;'; put 'put ''MjUwNjEsMjUwNjMsMjUwNjQsMjUwNjUsMjUwNjYsMjUwNjcsMjUwNjgsMjUwNjksMjUwNzAsMjUwNzEsMjUwNzIsMjUwNzMsMjUwNzQsMjUwNzUsMjUwNzYsMjUwNzgsMjUwNzksMjUwODAsMjUwODEsMjUwODIsMjUwODMsMjUwODQsMjUwODUsMjUwODYsMjUwODgsMjUwODksMjUwOTAsMjUw''@;'; put 'put ''OTEsMjUwOTIsMjUwOTMsMjUwOTUsMjUwOTcsMjUxMDcsMjUxMDgsMjUxMTMsMjUxMTYsMjUxMTcsMjUxMTgsMjUxMjAsMjUxMjMsMjUxMjYsMjUxMjcsMjUxMjgsMjUxMjksMjUxMzEsMjUxMzMsMjUxMzUsMjUxMzYsMjUxMzcsMjUxMzgsMjUxNDEsMjUxNDIsMjUxNDQsMjUxNDUsMjUxNDYs''@;'; put 'put ''MjUxNDcsMjUxNDgsMjUxNTQsMjUxNTYsMjUxNTcsMjUxNTgsMjUxNjIsMjUxNjcsMjUxNjgsMjUxNzMsMjUxNzQsMjUxNzUsMjUxNzcsMjUxNzgsMjUxODAsMjUxODEsMjUxODIsMjUxODMsMjUxODQsMjUxODUsMjUxODYsMjUxODgsMjUxODksMjUxOTIsMjUyMDEsMjUyMDIsMjUyMDQsMjUy''@;'; put 'put ''MDUsMjUyMDcsMjUyMDgsMjUyMTAsMjUyMTEsMjUyMTMsMjUyMTcsMjUyMTgsMjUyMTksMjUyMjEsMjUyMjIsMjUyMjMsMjUyMjQsMjUyMjcsMjUyMjgsMjUyMjksMjUyMzAsMjUyMzEsMjUyMzIsMjUyMzYsMjUyNDEsMjUyNDQsMjUyNDUsMjUyNDYsMjUyNTEsMjUyNTQsMjUyNTUsMjUyNTcs''@;'; put 'put ''MjUyNTgsMjUyNjEsMjUyNjIsMjUyNjMsMjUyNjQsMjUyNjYsMjUyNjcsMjUyNjgsMjUyNzAsMjUyNzEsMjUyNzIsMjUyNzQsMjUyNzgsMjUyODAsMjUyODEsMjUyODMsMjUyOTEsMjUyOTUsMjUyOTcsMjUzMDEsMjUzMDksMjUzMTAsMjUzMTIsMjUzMTMsMjUzMTYsMjUzMjIsMjUzMjMsMjUz''@;'; put 'put ''MjgsMjUzMzAsMjUzMzMsMjUzMzYsMjUzMzcsMjUzMzgsMjUzMzksMjUzNDQsMjUzNDcsMjUzNDgsMjUzNDksMjUzNTAsMjUzNTQsMjUzNTUsMjUzNTYsMjUzNTcsMjUzNTksMjUzNjAsMjUzNjIsMjUzNjMsMjUzNjQsMjUzNjUsMjUzNjcsMjUzNjgsMjUzNjksMjUzNzIsMjUzODIsMjUzODMs''@;'; put 'put ''MjUzODUsMjUzODgsMjUzODksMjUzOTAsMjUzOTIsMjUzOTMsMjUzOTUsMjUzOTYsMjUzOTcsMjUzOTgsMjUzOTksMjU0MDAsMjU0MDMsMjU0MDQsMjU0MDYsMjU0MDcsMjU0MDgsMjU0MDksMjU0MTIsMjU0MTUsMjU0MTYsMjU0MTgsMjU0MjUsMjU0MjYsMjU0MjcsMjU0MjgsMjU0MzAsMjU0''@;'; put 'put ''MzEsMjU0MzIsMjU0MzMsMjU0MzQsMjU0MzUsMjU0MzYsMjU0MzcsMjU0NDAsMjU0NDQsMjU0NDUsMjU0NDYsMjU0NDgsMjU0NTAsMjU0NTEsMjU0NTIsMjU0NTUsMjU0NTYsMjU0NTgsMjU0NTksMjU0NjAsMjU0NjEsMjU0NjQsMjU0NjUsMjU0NjgsMjU0NjksMjU0NzAsMjU0NzEsMjU0NzMs''@;'; put 'put ''MjU0NzUsMjU0NzYsMjU0NzcsMjU0NzgsMjU0ODMsMjU0ODUsMjU0ODksMjU0OTEsMjU0OTIsMjU0OTMsMjU0OTUsMjU0OTcsMjU0OTgsMjU0OTksMjU1MDAsMjU1MDEsMjU1MDIsMjU1MDMsMjU1MDUsMjU1MDgsMjU1MTAsMjU1MTUsMjU1MTksMjU1MjEsMjU1MjIsMjU1MjUsMjU1MjYsMjU1''@;'; put 'put ''MjksMjU1MzEsMjU1MzMsMjU1MzUsMjU1MzYsMjU1MzcsMjU1MzgsMjU1MzksMjU1NDEsMjU1NDMsMjU1NDQsMjU1NDYsMjU1NDcsMjU1NDgsMjU1NTMsMjU1NTUsMjU1NTYsMjU1NTcsMjU1NTksMjU1NjAsMjU1NjEsMjU1NjIsMjU1NjMsMjU1NjQsMjU1NjUsMjU1NjcsMjU1NzAsMjU1NzIs''@;'; put 'put ''MjU1NzMsMjU1NzQsMjU1NzUsMjU1NzYsMjU1NzksMjU1ODAsMjU1ODIsMjU1ODMsMjU1ODQsMjU1ODUsMjU1ODcsMjU1ODksMjU1OTEsMjU1OTMsMjU1OTQsMjU1OTUsMjU1OTYsMjU1OTgsMjU2MDMsMjU2MDQsMjU2MDYsMjU2MDcsMjU2MDgsMjU2MDksMjU2MTAsMjU2MTMsMjU2MTQsMjU2''@;'; put 'put ''MTcsMjU2MTgsMjU2MjEsMjU2MjIsMjU2MjMsMjU2MjQsMjU2MjUsMjU2MjYsMjU2MjksMjU2MzEsMjU2MzQsMjU2MzUsMjU2MzYsMjU2MzcsMjU2MzksMjU2NDAsMjU2NDEsMjU2NDMsMjU2NDYsMjU2NDcsMjU2NDgsMjU2NDksMjU2NTAsMjU2NTEsMjU2NTMsMjU2NTQsMjU2NTUsMjU2NTYs''@;'; put 'put ''MjU2NTcsMjU2NTksMjU2NjAsMjU2NjIsMjU2NjQsMjU2NjYsMjU2NjcsMjU2NzMsMjU2NzUsMjU2NzYsMjU2NzcsMjU2NzgsMjU2NzksMjU2ODAsMjU2ODEsMjU2ODMsMjU2ODUsMjU2ODYsMjU2ODcsMjU2ODksMjU2OTAsMjU2OTEsMjU2OTIsMjU2OTMsMjU2OTUsMjU2OTYsMjU2OTcsMjU2''@;'; put 'put ''OTgsMjU2OTksMjU3MDAsMjU3MDEsMjU3MDIsMjU3MDQsMjU3MDYsMjU3MDcsMjU3MDgsMjU3MTAsMjU3MTEsMjU3MTIsMjU3MTMsMjU3MTQsMjU3MTUsMjU3MTYsMjU3MTcsMjU3MTgsMjU3MTksMjU3MjMsMjU3MjQsMjU3MjUsMjU3MjYsMjU3MjcsMjU3MjgsMjU3MjksMjU3MzEsMjU3MzQs''@;'; put 'put ''MjU3MzYsMjU3MzcsMjU3MzgsMjU3MzksMjU3NDAsMjU3NDEsMjU3NDIsMjU3NDMsMjU3NDQsMjU3NDcsMjU3NDgsMjU3NTEsMjU3NTIsMjU3NTQsMjU3NTUsMjU3NTYsMjU3NTcsMjU3NTksMjU3NjAsMjU3NjEsMjU3NjIsMjU3NjMsMjU3NjUsMjU3NjYsMjU3NjcsMjU3NjgsMjU3NzAsMjU3''@;'; put 'put ''NzEsMjU3NzUsMjU3NzcsMjU3NzgsMjU3NzksMjU3ODAsMjU3ODIsMjU3ODUsMjU3ODcsMjU3ODksMjU3OTAsMjU3OTEsMjU3OTMsMjU3OTUsMjU3OTYsMjU3OTgsMjU3OTksMjU4MDAsMjU4MDEsMjU4MDIsMjU4MDMsMjU4MDQsMjU4MDcsMjU4MDksMjU4MTEsMjU4MTIsMjU4MTMsMjU4MTQs''@;'; put 'put ''MjU4MTcsMjU4MTgsMjU4MTksMjU4MjAsMjU4MjEsMjU4MjMsMjU4MjQsMjU4MjUsMjU4MjcsMjU4MjksMjU4MzEsMjU4MzIsMjU4MzMsMjU4MzQsMjU4MzUsMjU4MzYsMjU4MzcsMjU4MzgsMjU4MzksMjU4NDAsMjU4NDEsMjU4NDIsMjU4NDMsMjU4NDQsMjU4NDUsMjU4NDYsMjU4NDcsMjU4''@;'; put 'put ''NDgsMjU4NDksMjU4NTAsMjU4NTEsMjU4NTIsMjU4NTMsMjU4NTQsMjU4NTUsMjU4NTcsMjU4NTgsMjU4NTksMjU4NjAsMjU4NjEsMjU4NjIsMjU4NjMsMjU4NjQsMjU4NjYsMjU4NjcsMjU4NjgsMjU4NjksMjU4NzAsMjU4NzEsMjU4NzIsMjU4NzMsMjU4NzUsMjU4NzYsMjU4NzcsMjU4Nzgs''@;'; put 'put ''MjU4NzksMjU4ODEsMjU4ODIsMjU4ODMsMjU4ODQsMjU4ODUsMjU4ODYsMjU4ODcsMjU4ODgsMjU4ODksMjU4OTAsMjU4OTEsMjU4OTIsMjU4OTQsMjU4OTUsMjU4OTYsMjU4OTcsMjU4OTgsMjU5MDAsMjU5MDEsMjU5MDQsMjU5MDUsMjU5MDYsMjU5MDcsMjU5MTEsMjU5MTQsMjU5MTYsMjU5''@;'; put 'put ''MTcsMjU5MjAsMjU5MjEsMjU5MjIsMjU5MjMsMjU5MjQsMjU5MjYsMjU5MjcsMjU5MzAsMjU5MzEsMjU5MzMsMjU5MzQsMjU5MzYsMjU5MzgsMjU5MzksMjU5NDAsMjU5NDMsMjU5NDQsMjU5NDYsMjU5NDgsMjU5NTEsMjU5NTIsMjU5NTMsMjU5NTYsMjU5NTcsMjU5NTksMjU5NjAsMjU5NjEs''@;'; put 'put ''MjU5NjIsMjU5NjUsMjU5NjYsMjU5NjcsMjU5NjksMjU5NzEsMjU5NzMsMjU5NzQsMjU5NzYsMjU5NzcsMjU5NzgsMjU5NzksMjU5ODAsMjU5ODEsMjU5ODIsMjU5ODMsMjU5ODQsMjU5ODUsMjU5ODYsMjU5ODcsMjU5ODgsMjU5ODksMjU5OTAsMjU5OTIsMjU5OTMsMjU5OTQsMjU5OTcsMjU5''@;'; put 'put ''OTgsMjU5OTksMjYwMDIsMjYwMDQsMjYwMDUsMjYwMDYsMjYwMDgsMjYwMTAsMjYwMTMsMjYwMTQsMjYwMTYsMjYwMTgsMjYwMTksMjYwMjIsMjYwMjQsMjYwMjYsMjYwMjgsMjYwMzAsMjYwMzMsMjYwMzQsMjYwMzUsMjYwMzYsMjYwMzcsMjYwMzgsMjYwMzksMjYwNDAsMjYwNDIsMjYwNDMs''@;'; put 'put ''MjYwNDYsMjYwNDcsMjYwNDgsMjYwNTAsMjYwNTUsMjYwNTYsMjYwNTcsMjYwNTgsMjYwNjEsMjYwNjQsMjYwNjUsMjYwNjcsMjYwNjgsMjYwNjksMjYwNzIsMjYwNzMsMjYwNzQsMjYwNzUsMjYwNzYsMjYwNzcsMjYwNzgsMjYwNzksMjYwODEsMjYwODMsMjYwODQsMjYwOTAsMjYwOTEsMjYw''@;'; put 'put ''OTgsMjYwOTksMjYxMDAsMjYxMDEsMjYxMDQsMjYxMDUsMjYxMDcsMjYxMDgsMjYxMDksMjYxMTAsMjYxMTEsMjYxMTMsMjYxMTYsMjYxMTcsMjYxMTksMjYxMjAsMjYxMjEsMjYxMjMsMjYxMjUsMjYxMjgsMjYxMjksMjYxMzAsMjYxMzQsMjYxMzUsMjYxMzYsMjYxMzgsMjYxMzksMjYxNDAs''@;'; put 'put ''MjYxNDIsMjYxNDUsMjYxNDYsMjYxNDcsMjYxNDgsMjYxNTAsMjYxNTMsMjYxNTQsMjYxNTUsMjYxNTYsMjYxNTgsMjYxNjAsMjYxNjIsMjYxNjMsMjYxNjcsMjYxNjgsMjYxNjksMjYxNzAsMjYxNzEsMjYxNzMsMjYxNzUsMjYxNzYsMjYxNzgsMjYxODAsMjYxODEsMjYxODIsMjYxODMsMjYx''@;'; put 'put ''ODQsMjYxODUsMjYxODYsMjYxODksMjYxOTAsMjYxOTIsMjYxOTMsMjYyMDAsMjYyMDEsMjYyMDMsMjYyMDQsMjYyMDUsMjYyMDYsMjYyMDgsMjYyMTAsMjYyMTEsMjYyMTMsMjYyMTUsMjYyMTcsMjYyMTgsMjYyMTksMjYyMjAsMjYyMjEsMjYyMjUsMjYyMjYsMjYyMjcsMjYyMjksMjYyMzIs''@;'; put 'put ''MjYyMzMsMjYyMzUsMjYyMzYsMjYyMzcsMjYyMzksMjYyNDAsMjYyNDEsMjYyNDMsMjYyNDUsMjYyNDYsMjYyNDgsMjYyNDksMjYyNTAsMjYyNTEsMjYyNTMsMjYyNTQsMjYyNTUsMjYyNTYsMjYyNTgsMjYyNTksMjYyNjAsMjYyNjEsMjYyNjQsMjYyNjUsMjYyNjYsMjYyNjcsMjYyNjgsMjYy''@;'; put 'put ''NzAsMjYyNzEsMjYyNzIsMjYyNzMsMjYyNzQsMjYyNzUsMjYyNzYsMjYyNzcsMjYyNzgsMjYyODEsMjYyODIsMjYyODMsMjYyODQsMjYyODUsMjYyODcsMjYyODgsMjYyODksMjYyOTAsMjYyOTEsMjYyOTMsMjYyOTQsMjYyOTUsMjYyOTYsMjYyOTgsMjYyOTksMjYzMDAsMjYzMDEsMjYzMDMs''@;'; put 'put ''MjYzMDQsMjYzMDUsMjYzMDYsMjYzMDcsMjYzMDgsMjYzMDksMjYzMTAsMjYzMTEsMjYzMTIsMjYzMTMsMjYzMTQsMjYzMTUsMjYzMTYsMjYzMTcsMjYzMTgsMjYzMTksMjYzMjAsMjYzMjEsMjYzMjIsMjYzMjMsMjYzMjQsMjYzMjUsMjYzMjYsMjYzMjcsMjYzMjgsMjYzMzAsMjYzMzQsMjYz''@;'; put 'put ''MzUsMjYzMzYsMjYzMzcsMjYzMzgsMjYzMzksMjYzNDAsMjYzNDEsMjYzNDMsMjYzNDQsMjYzNDYsMjYzNDcsMjYzNDgsMjYzNDksMjYzNTAsMjYzNTEsMjYzNTMsMjYzNTcsMjYzNTgsMjYzNjAsMjYzNjIsMjYzNjMsMjYzNjUsMjYzNjksMjYzNzAsMjYzNzEsMjYzNzIsMjYzNzMsMjYzNzQs''@;'; put 'put ''MjYzNzUsMjYzODAsMjYzODIsMjYzODMsMjYzODUsMjYzODYsMjYzODcsMjYzOTAsMjYzOTIsMjYzOTMsMjYzOTQsMjYzOTYsMjYzOTgsMjY0MDAsMjY0MDEsMjY0MDIsMjY0MDMsMjY0MDQsMjY0MDUsMjY0MDcsMjY0MDksMjY0MTQsMjY0MTYsMjY0MTgsMjY0MTksMjY0MjIsMjY0MjMsMjY0''@;'; put 'put ''MjQsMjY0MjUsMjY0MjcsMjY0MjgsMjY0MzAsMjY0MzEsMjY0MzMsMjY0MzYsMjY0MzcsMjY0MzksMjY0NDIsMjY0NDMsMjY0NDUsMjY0NTAsMjY0NTIsMjY0NTMsMjY0NTUsMjY0NTYsMjY0NTcsMjY0NTgsMjY0NTksMjY0NjEsMjY0NjYsMjY0NjcsMjY0NjgsMjY0NzAsMjY0NzEsMjY0NzUs''@;'; put 'put ''MjY0NzYsMjY0NzgsMjY0ODEsMjY0ODQsMjY0ODYsMjY0ODgsMjY0ODksMjY0OTAsMjY0OTEsMjY0OTMsMjY0OTYsMjY0OTgsMjY0OTksMjY1MDEsMjY1MDIsMjY1MDQsMjY1MDYsMjY1MDgsMjY1MDksMjY1MTAsMjY1MTEsMjY1MTMsMjY1MTQsMjY1MTUsMjY1MTYsMjY1MTgsMjY1MjEsMjY1''@;'; put 'put ''MjMsMjY1MjcsMjY1MjgsMjY1MjksMjY1MzIsMjY1MzQsMjY1MzcsMjY1NDAsMjY1NDIsMjY1NDUsMjY1NDYsMjY1NDgsMjY1NTMsMjY1NTQsMjY1NTUsMjY1NTYsMjY1NTcsMjY1NTgsMjY1NTksMjY1NjAsMjY1NjIsMjY1NjUsMjY1NjYsMjY1NjcsMjY1NjgsMjY1NjksMjY1NzAsMjY1NzEs''@;'; put 'put ''MjY1NzIsMjY1NzMsMjY1NzQsMjY1ODEsMjY1ODIsMjY1ODMsMjY1ODcsMjY1OTEsMjY1OTMsMjY1OTUsMjY1OTYsMjY1OTgsMjY1OTksMjY2MDAsMjY2MDIsMjY2MDMsMjY2MDUsMjY2MDYsMjY2MTAsMjY2MTMsMjY2MTQsMjY2MTUsMjY2MTYsMjY2MTcsMjY2MTgsMjY2MTksMjY2MjAsMjY2''@;'; put 'put ''MjIsMjY2MjUsMjY2MjYsMjY2MjcsMjY2MjgsMjY2MzAsMjY2MzcsMjY2NDAsMjY2NDIsMjY2NDQsMjY2NDUsMjY2NDgsMjY2NDksMjY2NTAsMjY2NTEsMjY2NTIsMjY2NTQsMjY2NTUsMjY2NTYsMjY2NTgsMjY2NTksMjY2NjAsMjY2NjEsMjY2NjIsMjY2NjMsMjY2NjQsMjY2NjcsMjY2Njgs''@;'; put 'put ''MjY2NjksMjY2NzAsMjY2NzEsMjY2NzIsMjY2NzMsMjY2NzYsMjY2NzcsMjY2NzgsMjY2ODIsMjY2ODMsMjY2ODcsMjY2OTUsMjY2OTksMjY3MDEsMjY3MDMsMjY3MDYsMjY3MTAsMjY3MTEsMjY3MTIsMjY3MTMsMjY3MTQsMjY3MTUsMjY3MTYsMjY3MTcsMjY3MTgsMjY3MTksMjY3MzAsMjY3''@;'; put 'put ''MzIsMjY3MzMsMjY3MzQsMjY3MzUsMjY3MzYsMjY3MzcsMjY3MzgsMjY3MzksMjY3NDEsMjY3NDQsMjY3NDUsMjY3NDYsMjY3NDcsMjY3NDgsMjY3NDksMjY3NTAsMjY3NTEsMjY3NTIsMjY3NTQsMjY3NTYsMjY3NTksMjY3NjAsMjY3NjEsMjY3NjIsMjY3NjMsMjY3NjQsMjY3NjUsMjY3NjYs''@;'; put 'put ''MjY3NjgsMjY3NjksMjY3NzAsMjY3NzIsMjY3NzMsMjY3NzQsMjY3NzYsMjY3NzcsMjY3NzgsMjY3NzksMjY3ODAsMjY3ODEsMjY3ODIsMjY3ODMsMjY3ODQsMjY3ODUsMjY3ODcsMjY3ODgsMjY3ODksMjY3OTMsMjY3OTQsMjY3OTUsMjY3OTYsMjY3OTgsMjY4MDEsMjY4MDIsMjY4MDQsMjY4''@;'; put 'put ''MDYsMjY4MDcsMjY4MDgsMjY4MDksMjY4MTAsMjY4MTEsMjY4MTIsMjY4MTMsMjY4MTQsMjY4MTUsMjY4MTcsMjY4MTksMjY4MjAsMjY4MjEsMjY4MjIsMjY4MjMsMjY4MjQsMjY4MjYsMjY4MjgsMjY4MzAsMjY4MzEsMjY4MzIsMjY4MzMsMjY4MzUsMjY4MzYsMjY4MzgsMjY4MzksMjY4NDEs''@;'; put 'put ''MjY4NDMsMjY4NDQsMjY4NDUsMjY4NDYsMjY4NDcsMjY4NDksMjY4NTAsMjY4NTIsMjY4NTMsMjY4NTQsMjY4NTUsMjY4NTYsMjY4NTcsMjY4NTgsMjY4NTksMjY4NjAsMjY4NjEsMjY4NjMsMjY4NjYsMjY4NjcsMjY4NjgsMjY4NzAsMjY4NzEsMjY4NzIsMjY4NzUsMjY4NzcsMjY4NzgsMjY4''@;'; put 'put ''NzksMjY4ODAsMjY4ODIsMjY4ODMsMjY4ODQsMjY4ODYsMjY4ODcsMjY4ODgsMjY4ODksMjY4OTAsMjY4OTIsMjY4OTUsMjY4OTcsMjY4OTksMjY5MDAsMjY5MDEsMjY5MDIsMjY5MDMsMjY5MDQsMjY5MDUsMjY5MDYsMjY5MDcsMjY5MDgsMjY5MDksMjY5MTAsMjY5MTMsMjY5MTQsMjY5MTUs''@;'; put 'put ''MjY5MTcsMjY5MTgsMjY5MTksMjY5MjAsMjY5MjEsMjY5MjIsMjY5MjMsMjY5MjQsMjY5MjYsMjY5MjcsMjY5MjksMjY5MzAsMjY5MzEsMjY5MzMsMjY5MzQsMjY5MzUsMjY5MzYsMjY5MzgsMjY5MzksMjY5NDAsMjY5NDIsMjY5NDQsMjY5NDUsMjY5NDcsMjY5NDgsMjY5NDksMjY5NTAsMjY5''@;'; put 'put ''NTEsMjY5NTIsMjY5NTMsMjY5NTQsMjY5NTUsMjY5NTYsMjY5NTcsMjY5NTgsMjY5NTksMjY5NjAsMjY5NjEsMjY5NjIsMjY5NjMsMjY5NjUsMjY5NjYsMjY5NjgsMjY5NjksMjY5NzEsMjY5NzIsMjY5NzUsMjY5NzcsMjY5NzgsMjY5ODAsMjY5ODEsMjY5ODMsMjY5ODQsMjY5ODUsMjY5ODYs''@;'; put 'put ''MjY5ODgsMjY5ODksMjY5OTEsMjY5OTIsMjY5OTQsMjY5OTUsMjY5OTYsMjY5OTcsMjY5OTgsMjcwMDIsMjcwMDMsMjcwMDUsMjcwMDYsMjcwMDcsMjcwMDksMjcwMTEsMjcwMTMsMjcwMTgsMjcwMTksMjcwMjAsMjcwMjIsMjcwMjMsMjcwMjQsMjcwMjUsMjcwMjYsMjcwMjcsMjcwMzAsMjcw''@;'; put 'put ''MzEsMjcwMzMsMjcwMzQsMjcwMzcsMjcwMzgsMjcwMzksMjcwNDAsMjcwNDEsMjcwNDIsMjcwNDMsMjcwNDQsMjcwNDUsMjcwNDYsMjcwNDksMjcwNTAsMjcwNTIsMjcwNTQsMjcwNTUsMjcwNTYsMjcwNTgsMjcwNTksMjcwNjEsMjcwNjIsMjcwNjQsMjcwNjUsMjcwNjYsMjcwNjgsMjcwNjks''@;'; put 'put ''MjcwNzAsMjcwNzEsMjcwNzIsMjcwNzQsMjcwNzUsMjcwNzYsMjcwNzcsMjcwNzgsMjcwNzksMjcwODAsMjcwODEsMjcwODMsMjcwODUsMjcwODcsMjcwODksMjcwOTAsMjcwOTEsMjcwOTMsMjcwOTQsMjcwOTUsMjcwOTYsMjcwOTcsMjcwOTgsMjcxMDAsMjcxMDEsMjcxMDIsMjcxMDUsMjcx''@;'; put 'put ''MDYsMjcxMDcsMjcxMDgsMjcxMDksMjcxMTAsMjcxMTEsMjcxMTIsMjcxMTMsMjcxMTQsMjcxMTUsMjcxMTYsMjcxMTgsMjcxMTksMjcxMjAsMjcxMjEsMjcxMjMsMjcxMjQsMjcxMjUsMjcxMjYsMjcxMjcsMjcxMjgsMjcxMjksMjcxMzAsMjcxMzEsMjcxMzIsMjcxMzQsMjcxMzYsMjcxMzcs''@;'; put 'put ''MjcxMzgsMjcxMzksMjcxNDAsMjcxNDEsMjcxNDIsMjcxNDMsMjcxNDQsMjcxNDUsMjcxNDcsMjcxNDgsMjcxNDksMjcxNTAsMjcxNTEsMjcxNTIsMjcxNTMsMjcxNTQsMjcxNTUsMjcxNTYsMjcxNTcsMjcxNTgsMjcxNjEsMjcxNjIsMjcxNjMsMjcxNjQsMjcxNjUsMjcxNjYsMjcxNjgsMjcx''@;'; put 'put ''NzAsMjcxNzEsMjcxNzIsMjcxNzMsMjcxNzQsMjcxNzUsMjcxNzcsMjcxNzksMjcxODAsMjcxODEsMjcxODIsMjcxODQsMjcxODYsMjcxODcsMjcxODgsMjcxOTAsMjcxOTEsMjcxOTIsMjcxOTMsMjcxOTQsMjcxOTUsMjcxOTYsMjcxOTksMjcyMDAsMjcyMDEsMjcyMDIsMjcyMDMsMjcyMDUs''@;'; put 'put ''MjcyMDYsMjcyMDgsMjcyMDksMjcyMTAsMjcyMTEsMjcyMTIsMjcyMTMsMjcyMTQsMjcyMTUsMjcyMTcsMjcyMTgsMjcyMTksMjcyMjAsMjcyMjEsMjcyMjIsMjcyMjMsMjcyMjYsMjcyMjgsMjcyMjksMjcyMzAsMjcyMzEsMjcyMzIsMjcyMzQsMjcyMzUsMjcyMzYsMjcyMzgsMjcyMzksMjcy''@;'; put 'put ''NDAsMjcyNDEsMjcyNDIsMjcyNDMsMjcyNDQsMjcyNDUsMjcyNDYsMjcyNDcsMjcyNDgsMjcyNTAsMjcyNTEsMjcyNTIsMjcyNTMsMjcyNTQsMjcyNTUsMjcyNTYsMjcyNTgsMjcyNTksMjcyNjEsMjcyNjIsMjcyNjMsMjcyNjUsMjcyNjYsMjcyNjcsMjcyNjksMjcyNzAsMjcyNzEsMjcyNzIs''@;'; put 'put ''MjcyNzMsMjcyNzQsMjcyNzUsMjcyNzYsMjcyNzcsMjcyNzksMjcyODIsMjcyODMsMjcyODQsMjcyODUsMjcyODYsMjcyODgsMjcyODksMjcyOTAsMjcyOTEsMjcyOTIsMjcyOTMsMjcyOTQsMjcyOTUsMjcyOTcsMjcyOTgsMjcyOTksMjczMDAsMjczMDEsMjczMDIsMjczMDMsMjczMDQsMjcz''@;'; put 'put ''MDYsMjczMDksMjczMTAsMjczMTEsMjczMTIsMjczMTMsMjczMTQsMjczMTUsMjczMTYsMjczMTcsMjczMTgsMjczMTksMjczMjAsMjczMjEsMjczMjIsMjczMjMsMjczMjQsMjczMjUsMjczMjYsMjczMjcsMjczMjgsMjczMjksMjczMzAsMjczMzEsMjczMzIsMjczMzMsMjczMzQsMjczMzUs''@;'; put 'put ''MjczMzYsMjczMzcsMjczMzgsMjczMzksMjczNDAsMjczNDEsMjczNDIsMjczNDMsMjczNDQsMjczNDUsMjczNDYsMjczNDcsMjczNDgsMjczNDksMjczNTAsMjczNTEsMjczNTIsMjczNTMsMjczNTQsMjczNTUsMjczNTYsMjczNTcsMjczNTgsMjczNTksMjczNjAsMjczNjEsMjczNjIsMjcz''@;'; put 'put ''NjMsMjczNjQsMjczNjUsMjczNjYsMjczNjcsMjczNjgsMjczNjksMjczNzAsMjczNzEsMjczNzIsMjczNzMsMjczNzQsMjczNzUsMjczNzYsMjczNzcsMjczNzgsMjczNzksMjczODAsMjczODEsMjczODIsMjczODMsMjczODQsMjczODUsMjczODYsMjczODcsMjczODgsMjczODksMjczOTAs''@;'; put 'put ''MjczOTEsMjczOTIsMjczOTMsMjczOTQsMjczOTUsMjczOTYsMjczOTcsMjczOTgsMjczOTksMjc0MDAsMjc0MDEsMjc0MDIsMjc0MDMsMjc0MDQsMjc0MDUsMjc0MDYsMjc0MDcsMjc0MDgsMjc0MDksMjc0MTAsMjc0MTEsMjc0MTIsMjc0MTMsMjc0MTQsMjc0MTUsMjc0MTYsMjc0MTcsMjc0''@;'; put 'put ''MTgsMjc0MTksMjc0MjAsMjc0MjEsMjc0MjIsMjc0MjMsMjc0MjksMjc0MzAsMjc0MzIsMjc0MzMsMjc0MzQsMjc0MzUsMjc0MzYsMjc0MzcsMjc0MzgsMjc0MzksMjc0NDAsMjc0NDEsMjc0NDMsMjc0NDQsMjc0NDUsMjc0NDYsMjc0NDgsMjc0NTEsMjc0NTIsMjc0NTMsMjc0NTUsMjc0NTYs''@;'; put 'put ''Mjc0NTcsMjc0NTgsMjc0NjAsMjc0NjEsMjc0NjQsMjc0NjYsMjc0NjcsMjc0NjksMjc0NzAsMjc0NzEsMjc0NzIsMjc0NzMsMjc0NzQsMjc0NzUsMjc0NzYsMjc0NzcsMjc0NzgsMjc0NzksMjc0ODAsMjc0ODIsMjc0ODMsMjc0ODQsMjc0ODUsMjc0ODYsMjc0ODcsMjc0ODgsMjc0ODksMjc0''@;'; put 'put ''OTYsMjc0OTcsMjc0OTksMjc1MDAsMjc1MDEsMjc1MDIsMjc1MDMsMjc1MDQsMjc1MDUsMjc1MDYsMjc1MDcsMjc1MDgsMjc1MDksMjc1MTAsMjc1MTEsMjc1MTIsMjc1MTQsMjc1MTcsMjc1MTgsMjc1MTksMjc1MjAsMjc1MjUsMjc1MjgsMjc1MzIsMjc1MzQsMjc1MzUsMjc1MzYsMjc1Mzcs''@;'; put 'put ''Mjc1NDAsMjc1NDEsMjc1NDMsMjc1NDQsMjc1NDUsMjc1NDgsMjc1NDksMjc1NTAsMjc1NTEsMjc1NTIsMjc1NTQsMjc1NTUsMjc1NTYsMjc1NTcsMjc1NTgsMjc1NTksMjc1NjAsMjc1NjEsMjc1NjMsMjc1NjQsMjc1NjUsMjc1NjYsMjc1NjcsMjc1NjgsMjc1NjksMjc1NzAsMjc1NzQsMjc1''@;'; put 'put ''NzYsMjc1NzcsMjc1NzgsMjc1NzksMjc1ODAsMjc1ODEsMjc1ODIsMjc1ODQsMjc1ODcsMjc1ODgsMjc1OTAsMjc1OTEsMjc1OTIsMjc1OTMsMjc1OTQsMjc1OTYsMjc1OTgsMjc2MDAsMjc2MDEsMjc2MDgsMjc2MTAsMjc2MTIsMjc2MTMsMjc2MTQsMjc2MTUsMjc2MTYsMjc2MTgsMjc2MTks''@;'; put 'put ''Mjc2MjAsMjc2MjEsMjc2MjIsMjc2MjMsMjc2MjQsMjc2MjUsMjc2MjgsMjc2MjksMjc2MzAsMjc2MzIsMjc2MzMsMjc2MzQsMjc2MzYsMjc2MzgsMjc2MzksMjc2NDAsMjc2NDIsMjc2NDMsMjc2NDQsMjc2NDYsMjc2NDcsMjc2NDgsMjc2NDksMjc2NTAsMjc2NTEsMjc2NTIsMjc2NTYsMjc2''@;'; put 'put ''NTcsMjc2NTgsMjc2NTksMjc2NjAsMjc2NjIsMjc2NjYsMjc2NzEsMjc2NzYsMjc2NzcsMjc2NzgsMjc2ODAsMjc2ODMsMjc2ODUsMjc2OTEsMjc2OTIsMjc2OTMsMjc2OTcsMjc2OTksMjc3MDIsMjc3MDMsMjc3MDUsMjc3MDYsMjc3MDcsMjc3MDgsMjc3MTAsMjc3MTEsMjc3MTUsMjc3MTYs''@;'; put 'put ''Mjc3MTcsMjc3MjAsMjc3MjMsMjc3MjQsMjc3MjUsMjc3MjYsMjc3MjcsMjc3MjksMjc3MzAsMjc3MzEsMjc3MzQsMjc3MzYsMjc3MzcsMjc3MzgsMjc3NDYsMjc3NDcsMjc3NDksMjc3NTAsMjc3NTEsMjc3NTUsMjc3NTYsMjc3NTcsMjc3NTgsMjc3NTksMjc3NjEsMjc3NjMsMjc3NjUsMjc3''@;'; put 'put ''NjcsMjc3NjgsMjc3NzAsMjc3NzEsMjc3NzIsMjc3NzUsMjc3NzYsMjc3ODAsMjc3ODMsMjc3ODYsMjc3ODcsMjc3ODksMjc3OTAsMjc3OTMsMjc3OTQsMjc3OTcsMjc3OTgsMjc3OTksMjc4MDAsMjc4MDIsMjc4MDQsMjc4MDUsMjc4MDYsMjc4MDgsMjc4MTAsMjc4MTYsMjc4MjAsMjc4MjMs''@;'; put 'put ''Mjc4MjQsMjc4MjgsMjc4MjksMjc4MzAsMjc4MzEsMjc4MzQsMjc4NDAsMjc4NDEsMjc4NDIsMjc4NDMsMjc4NDYsMjc4NDcsMjc4NDgsMjc4NTEsMjc4NTMsMjc4NTQsMjc4NTUsMjc4NTcsMjc4NTgsMjc4NjQsMjc4NjUsMjc4NjYsMjc4NjgsMjc4NjksMjc4NzEsMjc4NzYsMjc4NzgsMjc4''@;'; put 'put ''NzksMjc4ODEsMjc4ODQsMjc4ODUsMjc4OTAsMjc4OTIsMjc4OTcsMjc5MDMsMjc5MDQsMjc5MDYsMjc5MDcsMjc5MDksMjc5MTAsMjc5MTIsMjc5MTMsMjc5MTQsMjc5MTcsMjc5MTksMjc5MjAsMjc5MjEsMjc5MjMsMjc5MjQsMjc5MjUsMjc5MjYsMjc5MjgsMjc5MzIsMjc5MzMsMjc5MzUs''@;'; put 'put ''Mjc5MzYsMjc5MzcsMjc5MzgsMjc5MzksMjc5NDAsMjc5NDIsMjc5NDQsMjc5NDUsMjc5NDgsMjc5NDksMjc5NTEsMjc5NTIsMjc5NTYsMjc5NTgsMjc5NTksMjc5NjAsMjc5NjIsMjc5NjcsMjc5NjgsMjc5NzAsMjc5NzIsMjc5NzcsMjc5ODAsMjc5ODQsMjc5ODksMjc5OTAsMjc5OTEsMjc5''@;'; put 'put ''OTIsMjc5OTUsMjc5OTcsMjc5OTksMjgwMDEsMjgwMDIsMjgwMDQsMjgwMDUsMjgwMDcsMjgwMDgsMjgwMTEsMjgwMTIsMjgwMTMsMjgwMTYsMjgwMTcsMjgwMTgsMjgwMTksMjgwMjEsMjgwMjIsMjgwMjUsMjgwMjYsMjgwMjcsMjgwMjksMjgwMzAsMjgwMzEsMjgwMzIsMjgwMzMsMjgwMzUs''@;'; put 'put ''MjgwMzYsMjgwMzgsMjgwMzksMjgwNDIsMjgwNDMsMjgwNDUsMjgwNDcsMjgwNDgsMjgwNTAsMjgwNTQsMjgwNTUsMjgwNTYsMjgwNTcsMjgwNTgsMjgwNjAsMjgwNjYsMjgwNjksMjgwNzYsMjgwNzcsMjgwODAsMjgwODEsMjgwODMsMjgwODQsMjgwODYsMjgwODcsMjgwODksMjgwOTAsMjgw''@;'; put 'put ''OTEsMjgwOTIsMjgwOTMsMjgwOTQsMjgwOTcsMjgwOTgsMjgwOTksMjgxMDQsMjgxMDUsMjgxMDYsMjgxMDksMjgxMTAsMjgxMTEsMjgxMTIsMjgxMTQsMjgxMTUsMjgxMTYsMjgxMTcsMjgxMTksMjgxMjIsMjgxMjMsMjgxMjQsMjgxMjcsMjgxMzAsMjgxMzEsMjgxMzMsMjgxMzUsMjgxMzYs''@;'; put 'put ''MjgxMzcsMjgxMzgsMjgxNDEsMjgxNDMsMjgxNDQsMjgxNDYsMjgxNDgsMjgxNDksMjgxNTAsMjgxNTIsMjgxNTQsMjgxNTcsMjgxNTgsMjgxNTksMjgxNjAsMjgxNjEsMjgxNjIsMjgxNjMsMjgxNjQsMjgxNjYsMjgxNjcsMjgxNjgsMjgxNjksMjgxNzEsMjgxNzUsMjgxNzgsMjgxNzksMjgx''@;'; put 'put ''ODEsMjgxODQsMjgxODUsMjgxODcsMjgxODgsMjgxOTAsMjgxOTEsMjgxOTQsMjgxOTgsMjgxOTksMjgyMDAsMjgyMDIsMjgyMDQsMjgyMDYsMjgyMDgsMjgyMDksMjgyMTEsMjgyMTMsMjgyMTQsMjgyMTUsMjgyMTcsMjgyMTksMjgyMjAsMjgyMjEsMjgyMjIsMjgyMjMsMjgyMjQsMjgyMjUs''@;'; put 'put ''MjgyMjYsMjgyMjksMjgyMzAsMjgyMzEsMjgyMzIsMjgyMzMsMjgyMzQsMjgyMzUsMjgyMzYsMjgyMzksMjgyNDAsMjgyNDEsMjgyNDIsMjgyNDUsMjgyNDcsMjgyNDksMjgyNTAsMjgyNTIsMjgyNTMsMjgyNTQsMjgyNTYsMjgyNTcsMjgyNTgsMjgyNTksMjgyNjAsMjgyNjEsMjgyNjIsMjgy''@;'; put 'put ''NjMsMjgyNjQsMjgyNjUsMjgyNjYsMjgyNjgsMjgyNjksMjgyNzEsMjgyNzIsMjgyNzMsMjgyNzQsMjgyNzUsMjgyNzYsMjgyNzcsMjgyNzgsMjgyNzksMjgyODAsMjgyODEsMjgyODIsMjgyODMsMjgyODQsMjgyODUsMjgyODgsMjgyODksMjgyOTAsMjgyOTIsMjgyOTUsMjgyOTYsMjgyOTgs''@;'; put 'put ''MjgyOTksMjgzMDAsMjgzMDEsMjgzMDIsMjgzMDUsMjgzMDYsMjgzMDcsMjgzMDgsMjgzMDksMjgzMTAsMjgzMTEsMjgzMTMsMjgzMTQsMjgzMTUsMjgzMTcsMjgzMTgsMjgzMjAsMjgzMjEsMjgzMjMsMjgzMjQsMjgzMjYsMjgzMjgsMjgzMjksMjgzMzEsMjgzMzIsMjgzMzMsMjgzMzQsMjgz''@;'; put 'put ''MzYsMjgzMzksMjgzNDEsMjgzNDQsMjgzNDUsMjgzNDgsMjgzNTAsMjgzNTEsMjgzNTIsMjgzNTUsMjgzNTYsMjgzNTcsMjgzNTgsMjgzNjAsMjgzNjEsMjgzNjIsMjgzNjQsMjgzNjUsMjgzNjYsMjgzNjgsMjgzNzAsMjgzNzQsMjgzNzYsMjgzNzcsMjgzNzksMjgzODAsMjgzODEsMjgzODcs''@;'; put 'put ''MjgzOTEsMjgzOTQsMjgzOTUsMjgzOTYsMjgzOTcsMjgzOTgsMjgzOTksMjg0MDAsMjg0MDEsMjg0MDIsMjg0MDMsMjg0MDUsMjg0MDYsMjg0MDcsMjg0MDgsMjg0MTAsMjg0MTEsMjg0MTIsMjg0MTMsMjg0MTQsMjg0MTUsMjg0MTYsMjg0MTcsMjg0MTksMjg0MjAsMjg0MjEsMjg0MjMsMjg0''@;'; put 'put ''MjQsMjg0MjYsMjg0MjcsMjg0MjgsMjg0MjksMjg0MzAsMjg0MzIsMjg0MzMsMjg0MzQsMjg0MzgsMjg0MzksMjg0NDAsMjg0NDEsMjg0NDIsMjg0NDMsMjg0NDQsMjg0NDUsMjg0NDYsMjg0NDcsMjg0NDksMjg0NTAsMjg0NTEsMjg0NTMsMjg0NTQsMjg0NTUsMjg0NTYsMjg0NjAsMjg0NjIs''@;'; put 'put ''Mjg0NjQsMjg0NjYsMjg0NjgsMjg0NjksMjg0NzEsMjg0NzIsMjg0NzMsMjg0NzQsMjg0NzUsMjg0NzYsMjg0NzcsMjg0NzksMjg0ODAsMjg0ODEsMjg0ODIsMjg0ODMsMjg0ODQsMjg0ODUsMjg0ODgsMjg0ODksMjg0OTAsMjg0OTIsMjg0OTQsMjg0OTUsMjg0OTYsMjg0OTcsMjg0OTgsMjg0''@;'; put 'put ''OTksMjg1MDAsMjg1MDEsMjg1MDIsMjg1MDMsMjg1MDUsMjg1MDYsMjg1MDcsMjg1MDksMjg1MTEsMjg1MTIsMjg1MTMsMjg1MTUsMjg1MTYsMjg1MTcsMjg1MTksMjg1MjAsMjg1MjEsMjg1MjIsMjg1MjMsMjg1MjQsMjg1MjcsMjg1MjgsMjg1MjksMjg1MzEsMjg1MzMsMjg1MzQsMjg1MzUs''@;'; put 'put ''Mjg1MzcsMjg1MzksMjg1NDEsMjg1NDIsMjg1NDMsMjg1NDQsMjg1NDUsMjg1NDYsMjg1NDcsMjg1NDksMjg1NTAsMjg1NTEsMjg1NTQsMjg1NTUsMjg1NTksMjg1NjAsMjg1NjEsMjg1NjIsMjg1NjMsMjg1NjQsMjg1NjUsMjg1NjYsMjg1NjcsMjg1NjgsMjg1NjksMjg1NzAsMjg1NzEsMjg1''@;'; put 'put ''NzMsMjg1NzQsMjg1NzUsMjg1NzYsMjg1NzgsMjg1NzksMjg1ODAsMjg1ODEsMjg1ODIsMjg1ODQsMjg1ODUsMjg1ODYsMjg1ODcsMjg1ODgsMjg1ODksMjg1OTAsMjg1OTEsMjg1OTIsMjg1OTMsMjg1OTQsMjg1OTYsMjg1OTcsMjg1OTksMjg2MDAsMjg2MDIsMjg2MDMsMjg2MDQsMjg2MDUs''@;'; put 'put ''Mjg2MDYsMjg2MDcsMjg2MDksMjg2MTEsMjg2MTIsMjg2MTMsMjg2MTQsMjg2MTUsMjg2MTYsMjg2MTgsMjg2MTksMjg2MjAsMjg2MjEsMjg2MjIsMjg2MjMsMjg2MjQsMjg2MjcsMjg2MjgsMjg2MjksMjg2MzAsMjg2MzEsMjg2MzIsMjg2MzMsMjg2MzQsMjg2MzUsMjg2MzYsMjg2MzcsMjg2''@;'; put 'put ''MzksMjg2NDIsMjg2NDMsMjg2NDQsMjg2NDUsMjg2NDYsMjg2NDcsMjg2NDgsMjg2NDksMjg2NTAsMjg2NTEsMjg2NTIsMjg2NTMsMjg2NTYsMjg2NTcsMjg2NTgsMjg2NTksMjg2NjAsMjg2NjEsMjg2NjIsMjg2NjMsMjg2NjQsMjg2NjUsMjg2NjYsMjg2NjcsMjg2NjgsMjg2NjksMjg2NzAs''@;'; put 'put ''Mjg2NzEsMjg2NzIsMjg2NzMsMjg2NzQsMjg2NzUsMjg2NzYsMjg2NzcsMjg2NzgsMjg2NzksMjg2ODAsMjg2ODEsMjg2ODIsMjg2ODMsMjg2ODQsMjg2ODUsMjg2ODYsMjg2ODcsMjg2ODgsMjg2OTAsMjg2OTEsMjg2OTIsMjg2OTMsMjg2OTQsMjg2OTUsMjg2OTYsMjg2OTcsMjg3MDAsMjg3''@;'; put 'put ''MDEsMjg3MDIsMjg3MDMsMjg3MDQsMjg3MDUsMjg3MDYsMjg3MDgsMjg3MDksMjg3MTAsMjg3MTEsMjg3MTIsMjg3MTMsMjg3MTQsMjg3MTUsMjg3MTYsMjg3MTcsMjg3MTgsMjg3MTksMjg3MjAsMjg3MjEsMjg3MjIsMjg3MjMsMjg3MjQsMjg3MjYsMjg3MjcsMjg3MjgsMjg3MzAsMjg3MzEs''@;'; put 'put ''Mjg3MzIsMjg3MzMsMjg3MzQsMjg3MzUsMjg3MzYsMjg3MzcsMjg3MzgsMjg3MzksMjg3NDAsMjg3NDEsMjg3NDIsMjg3NDMsMjg3NDQsMjg3NDUsMjg3NDYsMjg3NDcsMjg3NDksMjg3NTAsMjg3NTIsMjg3NTMsMjg3NTQsMjg3NTUsMjg3NTYsMjg3NTcsMjg3NTgsMjg3NTksMjg3NjAsMjg3''@;'; put 'put ''NjEsMjg3NjIsMjg3NjMsMjg3NjQsMjg3NjUsMjg3NjcsMjg3NjgsMjg3NjksMjg3NzAsMjg3NzEsMjg3NzIsMjg3NzMsMjg3NzQsMjg3NzUsMjg3NzYsMjg3NzcsMjg3NzgsMjg3ODIsMjg3ODUsMjg3ODYsMjg3ODcsMjg3ODgsMjg3OTEsMjg3OTMsMjg3OTQsMjg3OTUsMjg3OTcsMjg4MDEs''@;'; put 'put ''Mjg4MDIsMjg4MDMsMjg4MDQsMjg4MDYsMjg4MDcsMjg4MDgsMjg4MTEsMjg4MTIsMjg4MTMsMjg4MTUsMjg4MTYsMjg4MTcsMjg4MTksMjg4MjMsMjg4MjQsMjg4MjYsMjg4MjcsMjg4MzAsMjg4MzEsMjg4MzIsMjg4MzMsMjg4MzQsMjg4MzUsMjg4MzYsMjg4MzcsMjg4MzgsMjg4MzksMjg4''@;'; put 'put ''NDAsMjg4NDEsMjg4NDIsMjg4NDgsMjg4NTAsMjg4NTIsMjg4NTMsMjg4NTQsMjg4NTgsMjg4NjIsMjg4NjMsMjg4NjgsMjg4NjksMjg4NzAsMjg4NzEsMjg4NzMsMjg4NzUsMjg4NzYsMjg4NzcsMjg4NzgsMjg4NzksMjg4ODAsMjg4ODEsMjg4ODIsMjg4ODMsMjg4ODQsMjg4ODUsMjg4ODYs''@;'; put 'put ''Mjg4ODcsMjg4OTAsMjg4OTIsMjg4OTMsMjg4OTQsMjg4OTYsMjg4OTcsMjg4OTgsMjg4OTksMjg5MDEsMjg5MDYsMjg5MTAsMjg5MTIsMjg5MTMsMjg5MTQsMjg5MTUsMjg5MTYsMjg5MTcsMjg5MTgsMjg5MjAsMjg5MjIsMjg5MjMsMjg5MjQsMjg5MjYsMjg5MjcsMjg5MjgsMjg5MjksMjg5''@;'; put 'put ''MzAsMjg5MzEsMjg5MzIsMjg5MzMsMjg5MzQsMjg5MzUsMjg5MzYsMjg5MzksMjg5NDAsMjg5NDEsMjg5NDIsMjg5NDMsMjg5NDUsMjg5NDYsMjg5NDgsMjg5NTEsMjg5NTUsMjg5NTYsMjg5NTcsMjg5NTgsMjg5NTksMjg5NjAsMjg5NjEsMjg5NjIsMjg5NjMsMjg5NjQsMjg5NjUsMjg5Njcs''@;'; put 'put ''Mjg5NjgsMjg5NjksMjg5NzAsMjg5NzEsMjg5NzIsMjg5NzMsMjg5NzQsMjg5NzgsMjg5NzksMjg5ODAsMjg5ODEsMjg5ODMsMjg5ODQsMjg5ODUsMjg5ODYsMjg5ODcsMjg5ODgsMjg5ODksMjg5OTAsMjg5OTEsMjg5OTIsMjg5OTMsMjg5OTQsMjg5OTUsMjg5OTYsMjg5OTgsMjg5OTksMjll''@;'; put 'put ''MywyOTAwMSwyOTAwMywyOTAwNSwyOTAwNywyOTAwOCwyOTAwOSwyOTAxMCwyOTAxMSwyOTAxMiwyOTAxMywyOTAxNCwyOTAxNSwyOTAxNiwyOTAxNywyOTAxOCwyOTAxOSwyOTAyMSwyOTAyMywyOTAyNCwyOTAyNSwyOTAyNiwyOTAyNywyOTAyOSwyOTAzMywyOTAzNCwyOTAzNSwyOTAzNiwy''@;'; put 'put ''OTAzNywyOTAzOSwyOTA0MCwyOTA0MSwyOTA0NCwyOTA0NSwyOTA0NiwyOTA0NywyOTA0OSwyOTA1MSwyOTA1MiwyOTA1NCwyOTA1NSwyOTA1NiwyOTA1NywyOTA1OCwyOTA1OSwyOTA2MSwyOTA2MiwyOTA2MywyOTA2NCwyOTA2NSwyOTA2NywyOTA2OCwyOTA2OSwyOTA3MCwyOTA3MiwyOTA3''@;'; put 'put ''MywyOTA3NCwyOTA3NSwyOTA3NywyOTA3OCwyOTA3OSwyOTA4MiwyOTA4MywyOTA4NCwyOTA4NSwyOTA4NiwyOTA4OSwyOTA5MCwyOTA5MSwyOTA5MiwyOTA5MywyOTA5NCwyOTA5NSwyOTA5NywyOTA5OCwyOTA5OSwyOTEwMSwyOTEwMiwyOTEwMywyOTEwNCwyOTEwNSwyOTEwNiwyOTEwOCwy''@;'; put 'put ''OTExMCwyOTExMSwyOTExMiwyOTExNCwyOTExNSwyOTExNiwyOTExNywyOTExOCwyOTExOSwyOTEyMCwyOTEyMSwyOTEyMiwyOTEyNCwyOTEyNSwyOTEyNiwyOTEyNywyOTEyOCwyOTEyOSwyOTEzMCwyOTEzMSwyOTEzMiwyOTEzMywyOTEzNSwyOTEzNiwyOTEzNywyOTEzOCwyOTEzOSwyOTE0''@;'; put 'put ''MiwyOTE0MywyOTE0NCwyOTE0NSwyOTE0NiwyOTE0NywyOTE0OCwyOTE0OSwyOTE1MCwyOTE1MSwyOTE1MywyOTE1NCwyOTE1NSwyOTE1NiwyOTE1OCwyOTE2MCwyOTE2MSwyOTE2MiwyOTE2MywyOTE2NCwyOTE2NSwyOTE2NywyOTE2OCwyOTE2OSwyOTE3MCwyOTE3MSwyOTE3MiwyOTE3Mywy''@;'; put 'put ''OTE3NCwyOTE3NSwyOTE3NiwyOTE3OCwyOTE3OSwyOTE4MCwyOTE4MSwyOTE4MiwyOTE4MywyOTE4NCwyOTE4NSwyOTE4NiwyOTE4NywyOTE4OCwyOTE4OSwyOTE5MSwyOTE5MiwyOTE5MywyOTE5NCwyOTE5NSwyOTE5NiwyOTE5NywyOTE5OCwyOTE5OSwyOTIwMCwyOTIwMSwyOTIwMiwyOTIw''@;'; put 'put ''MywyOTIwNCwyOTIwNSwyOTIwNiwyOTIwNywyOTIwOCwyOTIwOSwyOTIxMCwyOTIxMSwyOTIxMiwyOTIxNCwyOTIxNSwyOTIxNiwyOTIxNywyOTIxOCwyOTIxOSwyOTIyMCwyOTIyMSwyOTIyMiwyOTIyMywyOTIyNSwyOTIyNywyOTIyOSwyOTIzMCwyOTIzMSwyOTIzNCwyOTIzNSwyOTIzNiwy''@;'; put 'put ''OTI0MiwyOTI0NCwyOTI0NiwyOTI0OCwyOTI0OSwyOTI1MCwyOTI1MSwyOTI1MiwyOTI1MywyOTI1NCwyOTI1NywyOTI1OCwyOTI1OSwyOTI2MiwyOTI2MywyOTI2NCwyOTI2NSwyOTI2NywyOTI2OCwyOTI2OSwyOTI3MSwyOTI3MiwyOTI3NCwyOTI3NiwyOTI3OCwyOTI4MCwyOTI4MywyOTI4''@;'; put 'put ''NCwyOTI4NSwyOTI4OCwyOTI5MCwyOTI5MSwyOTI5MiwyOTI5MywyOTI5NiwyOTI5NywyOTI5OSwyOTMwMCwyOTMwMiwyOTMwMywyOTMwNCwyOTMwNywyOTMwOCwyOTMwOSwyOTMxNCwyOTMxNSwyOTMxNywyOTMxOCwyOTMxOSwyOTMyMCwyOTMyMSwyOTMyNCwyOTMyNiwyOTMyOCwyOTMyOSwy''@;'; put 'put ''OTMzMSwyOTMzMiwyOTMzMywyOTMzNCwyOTMzNSwyOTMzNiwyOTMzNywyOTMzOCwyOTMzOSwyOTM0MCwyOTM0MSwyOTM0MiwyOTM0NCwyOTM0NSwyOTM0NiwyOTM0NywyOTM0OCwyOTM0OSwyOTM1MCwyOTM1MSwyOTM1MiwyOTM1MywyOTM1NCwyOTM1NSwyOTM1OCwyOTM2MSwyOTM2MiwyOTM2''@;'; put 'put ''MywyOTM2NSwyOTM3MCwyOTM3MSwyOTM3MiwyOTM3MywyOTM3NCwyOTM3NSwyOTM3NiwyOTM4MSwyOTM4MiwyOTM4MywyOTM4NSwyOTM4NiwyOTM4NywyOTM4OCwyOTM5MSwyOTM5MywyOTM5NSwyOTM5NiwyOTM5NywyOTM5OCwyOTQwMCwyOTQwMiwyOTQwMyw1ODU2Niw1ODU2Nyw1ODU2OCw1''@;'; put 'put ''ODU2OSw1ODU3MCw1ODU3MSw1ODU3Miw1ODU3Myw1ODU3NCw1ODU3NSw1ODU3Niw1ODU3Nyw1ODU3OCw1ODU3OSw1ODU4MCw1ODU4MSw1ODU4Miw1ODU4Myw1ODU4NCw1ODU4NSw1ODU4Niw1ODU4Nyw1ODU4OCw1ODU4OSw1ODU5MCw1ODU5MSw1ODU5Miw1ODU5Myw1ODU5NCw1ODU5NSw1ODU5''@;'; put 'put ''Niw1ODU5Nyw1ODU5OCw1ODU5OSw1ODYwMCw1ODYwMSw1ODYwMiw1ODYwMyw1ODYwNCw1ODYwNSw1ODYwNiw1ODYwNyw1ODYwOCw1ODYwOSw1ODYxMCw1ODYxMSw1ODYxMiw1ODYxMyw1ODYxNCw1ODYxNSw1ODYxNiw1ODYxNyw1ODYxOCw1ODYxOSw1ODYyMCw1ODYyMSw1ODYyMiw1ODYyMyw1''@;'; put 'put ''ODYyNCw1ODYyNSw1ODYyNiw1ODYyNyw1ODYyOCw1ODYyOSw1ODYzMCw1ODYzMSw1ODYzMiw1ODYzMyw1ODYzNCw1ODYzNSw1ODYzNiw1ODYzNyw1ODYzOCw1ODYzOSw1ODY0MCw1ODY0MSw1ODY0Miw1ODY0Myw1ODY0NCw1ODY0NSw1ODY0Niw1ODY0Nyw1ODY0OCw1ODY0OSw1ODY1MCw1ODY1''@;'; put 'put ''MSw1ODY1Miw1ODY1Myw1ODY1NCw1ODY1NSw1ODY1Niw1ODY1Nyw1ODY1OCw1ODY1OSw1ODY2MCw1ODY2MSwxMjI4OCwxMjI4OSwxMjI5MCwxODMsNzEzLDcxMSwxNjgsMTIyOTEsMTIyOTMsODIxMiw2NTM3NCw4MjE0LDgyMzAsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMwOCwxMjMwOSwxMjI5''@;'; put 'put ''NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMxMCwxMjMxMSwxMjMwNCwxMjMwNSwxNzcsMjE1LDI0Nyw4NzU4LDg3NDMsODc0NCw4NzIxLDg3MTksODc0Niw4NzQ1LDg3MTIsODc1OSw4NzMwLDg4NjksODc0MSw4NzM2LDg5NzgsODg1Nyw4NzQ3LDg3NTAs''@;'; put 'put ''ODgwMSw4NzgwLDg3NzYsODc2NSw4NzMzLDg4MDAsODgxNCw4ODE1LDg4MDQsODgwNSw4NzM0LDg3NTcsODc1Niw5Nzk0LDk3OTIsMTc2LDgyNDIsODI0Myw4NDUxLDY1Mjg0LDE2NCw2NTUwNCw2NTUwNSw4MjQwLDE2Nyw4NDcwLDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAs''@;'; put 'put ''OTYzMyw5NjMyLDk2NTEsOTY1MCw4MjUxLDg1OTQsODU5Miw4NTkzLDg1OTUsMTIzMDcsNTg2NjIsNTg2NjMsNTg2NjQsNTg2NjUsNTg2NjYsNTg2NjcsNTg2NjgsNTg2NjksNTg2NzAsNTg2NzEsNTg2NzIsNTg2NzMsNTg2NzQsNTg2NzUsNTg2NzYsNTg2NzcsNTg2NzgsNTg2NzksNTg2ODAs''@;'; put 'put ''NTg2ODEsNTg2ODIsNTg2ODMsNTg2ODQsNTg2ODUsNTg2ODYsNTg2ODcsNTg2ODgsNTg2ODksNTg2OTAsNTg2OTEsNTg2OTIsNTg2OTMsNTg2OTQsNTg2OTUsNTg2OTYsNTg2OTcsNTg2OTgsNTg2OTksNTg3MDAsNTg3MDEsNTg3MDIsNTg3MDMsNTg3MDQsNTg3MDUsNTg3MDYsNTg3MDcsNTg3''@;'; put 'put ''MDgsNTg3MDksNTg3MTAsNTg3MTEsNTg3MTIsNTg3MTMsNTg3MTQsNTg3MTUsNTg3MTYsNTg3MTcsNTg3MTgsNTg3MTksNTg3MjAsNTg3MjEsNTg3MjIsNTg3MjMsNTg3MjQsNTg3MjUsNTg3MjYsNTg3MjcsNTg3MjgsNTg3MjksNTg3MzAsNTg3MzEsNTg3MzIsNTg3MzMsNTg3MzQsNTg3MzUs''@;'; put 'put ''NTg3MzYsNTg3MzcsNTg3MzgsNTg3MzksNTg3NDAsNTg3NDEsNTg3NDIsNTg3NDMsNTg3NDQsNTg3NDUsNTg3NDYsNTg3NDcsNTg3NDgsNTg3NDksNTg3NTAsNTg3NTEsNTg3NTIsNTg3NTMsNTg3NTQsNTg3NTUsNTg3NTYsNTg3NTcsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2''@;'; put 'put ''Niw4NTY3LDg1NjgsODU2OSw1OTIzOCw1OTIzOSw1OTI0MCw1OTI0MSw1OTI0Miw1OTI0Myw5MzUyLDkzNTMsOTM1NCw5MzU1LDkzNTYsOTM1Nyw5MzU4LDkzNTksOTM2MCw5MzYxLDkzNjIsOTM2Myw5MzY0LDkzNjUsOTM2Niw5MzY3LDkzNjgsOTM2OSw5MzcwLDkzNzEsOTMzMiw5MzMzLDkz''@;'; put 'put ''MzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw5MzQyLDkzNDMsOTM0NCw5MzQ1LDkzNDYsOTM0Nyw5MzQ4LDkzNDksOTM1MCw5MzUxLDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsODM2NCw1OTI0NSwxMjgzMiwxMjgzMywxMjgz''@;'; put 'put ''NCwxMjgzNSwxMjgzNiwxMjgzNywxMjgzOCwxMjgzOSwxMjg0MCwxMjg0MSw1OTI0Niw1OTI0Nyw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLDg1NTQsODU1NSw1OTI0OCw1OTI0OSw1ODc1OCw1ODc1OSw1ODc2MCw1ODc2MSw1ODc2Miw1ODc2Myw1''@;'; put 'put ''ODc2NCw1ODc2NSw1ODc2Niw1ODc2Nyw1ODc2OCw1ODc2OSw1ODc3MCw1ODc3MSw1ODc3Miw1ODc3Myw1ODc3NCw1ODc3NSw1ODc3Niw1ODc3Nyw1ODc3OCw1ODc3OSw1ODc4MCw1ODc4MSw1ODc4Miw1ODc4Myw1ODc4NCw1ODc4NSw1ODc4Niw1ODc4Nyw1ODc4OCw1ODc4OSw1ODc5MCw1ODc5''@;'; put 'put ''MSw1ODc5Miw1ODc5Myw1ODc5NCw1ODc5NSw1ODc5Niw1ODc5Nyw1ODc5OCw1ODc5OSw1ODgwMCw1ODgwMSw1ODgwMiw1ODgwMyw1ODgwNCw1ODgwNSw1ODgwNiw1ODgwNyw1ODgwOCw1ODgwOSw1ODgxMCw1ODgxMSw1ODgxMiw1ODgxMyw1ODgxNCw1ODgxNSw1ODgxNiw1ODgxNyw1ODgxOCw1''@;'; put 'put ''ODgxOSw1ODgyMCw1ODgyMSw1ODgyMiw1ODgyMyw1ODgyNCw1ODgyNSw1ODgyNiw1ODgyNyw1ODgyOCw1ODgyOSw1ODgzMCw1ODgzMSw1ODgzMiw1ODgzMyw1ODgzNCw1ODgzNSw1ODgzNiw1ODgzNyw1ODgzOCw1ODgzOSw1ODg0MCw1ODg0MSw1ODg0Miw1ODg0Myw1ODg0NCw1ODg0NSw1ODg0''@;'; put 'put ''Niw1ODg0Nyw1ODg0OCw1ODg0OSw1ODg1MCw1ODg1MSw1ODg1MiwxMjI4OCw2NTI4MSw2NTI4Miw2NTI4Myw2NTUwOSw2NTI4NSw2NTI4Niw2NTI4Nyw2NTI4OCw2NTI4OSw2NTI5MCw2NTI5MSw2NTI5Miw2NTI5Myw2NTI5NCw2NTI5NSw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2''@;'; put 'put ''NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw2NTMwNiw2NTMwNyw2NTMwOCw2NTMwOSw2NTMxMCw2NTMxMSw2NTMxMiw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMy''@;'; put 'put ''OCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTMzOSw2NTM0MCw2NTM0MSw2NTM0Miw2NTM0Myw2NTM0NCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2''@;'; put 'put ''NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw2NTM3MSw2NTM3Miw2NTM3Myw2NTUwNyw1ODg1NCw1ODg1NSw1ODg1Niw1ODg1Nyw1ODg1OCw1ODg1OSw1ODg2MCw1ODg2MSw1ODg2''@;'; put 'put ''Miw1ODg2Myw1ODg2NCw1ODg2NSw1ODg2Niw1ODg2Nyw1ODg2OCw1ODg2OSw1ODg3MCw1ODg3MSw1ODg3Miw1ODg3Myw1ODg3NCw1ODg3NSw1ODg3Niw1ODg3Nyw1ODg3OCw1ODg3OSw1ODg4MCw1ODg4MSw1ODg4Miw1ODg4Myw1ODg4NCw1ODg4NSw1ODg4Niw1ODg4Nyw1ODg4OCw1ODg4OSw1''@;'; put 'put ''ODg5MCw1ODg5MSw1ODg5Miw1ODg5Myw1ODg5NCw1ODg5NSw1ODg5Niw1ODg5Nyw1ODg5OCw1ODg5OSw1ODkwMCw1ODkwMSw1ODkwMiw1ODkwMyw1ODkwNCw1ODkwNSw1ODkwNiw1ODkwNyw1ODkwOCw1ODkwOSw1ODkxMCw1ODkxMSw1ODkxMiw1ODkxMyw1ODkxNCw1ODkxNSw1ODkxNiw1ODkx''@;'; put 'put ''Nyw1ODkxOCw1ODkxOSw1ODkyMCw1ODkyMSw1ODkyMiw1ODkyMyw1ODkyNCw1ODkyNSw1ODkyNiw1ODkyNyw1ODkyOCw1ODkyOSw1ODkzMCw1ODkzMSw1ODkzMiw1ODkzMyw1ODkzNCw1ODkzNSw1ODkzNiw1ODkzNyw1ODkzOCw1ODkzOSw1ODk0MCw1ODk0MSw1ODk0Miw1ODk0Myw1ODk0NCw1''@;'; put 'put ''ODk0NSw1ODk0Niw1ODk0Nyw1ODk0OCw1ODk0OSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3''@;'; put 'put ''NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwx''@;'; put 'put ''MjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQz''@;'; put 'put ''MCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSw1OTI1MCw1OTI1MSw1OTI1Miw1OTI1Myw1OTI1NCw1OTI1NSw1OTI1Niw1OTI1Nyw1OTI1OCw1OTI1OSw1OTI2MCw1ODk1MCw1ODk1MSw1ODk1Miw1ODk1Myw1ODk1NCw1ODk1NSw1ODk1Niw1ODk1Nyw1ODk1OCw1ODk1OSw1ODk2MCw1''@;'; put 'put ''ODk2MSw1ODk2Miw1ODk2Myw1ODk2NCw1ODk2NSw1ODk2Niw1ODk2Nyw1ODk2OCw1ODk2OSw1ODk3MCw1ODk3MSw1ODk3Miw1ODk3Myw1ODk3NCw1ODk3NSw1ODk3Niw1ODk3Nyw1ODk3OCw1ODk3OSw1ODk4MCw1ODk4MSw1ODk4Miw1ODk4Myw1ODk4NCw1ODk4NSw1ODk4Niw1ODk4Nyw1ODk4''@;'; put 'put ''OCw1ODk4OSw1ODk5MCw1ODk5MSw1ODk5Miw1ODk5Myw1ODk5NCw1ODk5NSw1ODk5Niw1ODk5Nyw1ODk5OCw1ODk5OSw1OWUzLDU5MDAxLDU5MDAyLDU5MDAzLDU5MDA0LDU5MDA1LDU5MDA2LDU5MDA3LDU5MDA4LDU5MDA5LDU5MDEwLDU5MDExLDU5MDEyLDU5MDEzLDU5MDE0LDU5MDE1LDU5''@;'; put 'put ''MDE2LDU5MDE3LDU5MDE4LDU5MDE5LDU5MDIwLDU5MDIxLDU5MDIyLDU5MDIzLDU5MDI0LDU5MDI1LDU5MDI2LDU5MDI3LDU5MDI4LDU5MDI5LDU5MDMwLDU5MDMxLDU5MDMyLDU5MDMzLDU5MDM0LDU5MDM1LDU5MDM2LDU5MDM3LDU5MDM4LDU5MDM5LDU5MDQwLDU5MDQxLDU5MDQyLDU5MDQz''@;'; put 'put ''LDU5MDQ0LDU5MDQ1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEy''@;'; put 'put ''NDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAx''@;'; put 'put ''LDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEy''@;'; put 'put ''NTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDU5MjYxLDU5MjYyLDU5MjYzLDU5MjY0LDU5MjY1LDU5MjY2LDU5MjY3LDU5MjY4LDU5MDQ2LDU5MDQ3LDU5MDQ4LDU5MDQ5LDU5MDUwLDU5MDUxLDU5MDUyLDU5MDUzLDU5MDU0LDU5MDU1LDU5MDU2LDU5MDU3LDU5MDU4LDU5MDU5''@;'; put 'put ''LDU5MDYwLDU5MDYxLDU5MDYyLDU5MDYzLDU5MDY0LDU5MDY1LDU5MDY2LDU5MDY3LDU5MDY4LDU5MDY5LDU5MDcwLDU5MDcxLDU5MDcyLDU5MDczLDU5MDc0LDU5MDc1LDU5MDc2LDU5MDc3LDU5MDc4LDU5MDc5LDU5MDgwLDU5MDgxLDU5MDgyLDU5MDgzLDU5MDg0LDU5MDg1LDU5MDg2LDU5''@;'; put 'put ''MDg3LDU5MDg4LDU5MDg5LDU5MDkwLDU5MDkxLDU5MDkyLDU5MDkzLDU5MDk0LDU5MDk1LDU5MDk2LDU5MDk3LDU5MDk4LDU5MDk5LDU5MTAwLDU5MTAxLDU5MTAyLDU5MTAzLDU5MTA0LDU5MTA1LDU5MTA2LDU5MTA3LDU5MTA4LDU5MTA5LDU5MTEwLDU5MTExLDU5MTEyLDU5MTEzLDU5MTE0''@;'; put 'put ''LDU5MTE1LDU5MTE2LDU5MTE3LDU5MTE4LDU5MTE5LDU5MTIwLDU5MTIxLDU5MTIyLDU5MTIzLDU5MTI0LDU5MTI1LDU5MTI2LDU5MTI3LDU5MTI4LDU5MTI5LDU5MTMwLDU5MTMxLDU5MTMyLDU5MTMzLDU5MTM0LDU5MTM1LDU5MTM2LDU5MTM3LDU5MTM4LDU5MTM5LDU5MTQwLDU5MTQxLDkx''@;'; put 'put ''Myw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDU5MjY5LDU5MjcwLDU5MjcxLDU5MjcyLDU5MjczLDU5Mjc0LDU5Mjc1LDU5Mjc2LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUw''@;'; put 'put ''LDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDU5Mjc3LDU5Mjc4LDU5Mjc5LDU5MjgwLDU5MjgxLDU5MjgyLDU5MjgzLDY1MDc3LDY1MDc4LDY1MDgxLDY1MDgyLDY1MDg3LDY1MDg4LDY1MDg1LDY1MDg2LDY1''@;'; put 'put ''MDg5LDY1MDkwLDY1MDkxLDY1MDkyLDU5Mjg0LDU5Mjg1LDY1MDgzLDY1MDg0LDY1MDc5LDY1MDgwLDY1MDczLDU5Mjg2LDY1MDc1LDY1MDc2LDU5Mjg3LDU5Mjg4LDU5Mjg5LDU5MjkwLDU5MjkxLDU5MjkyLDU5MjkzLDU5Mjk0LDU5Mjk1LDU5MTQyLDU5MTQzLDU5MTQ0LDU5MTQ1LDU5MTQ2''@;'; put 'put ''LDU5MTQ3LDU5MTQ4LDU5MTQ5LDU5MTUwLDU5MTUxLDU5MTUyLDU5MTUzLDU5MTU0LDU5MTU1LDU5MTU2LDU5MTU3LDU5MTU4LDU5MTU5LDU5MTYwLDU5MTYxLDU5MTYyLDU5MTYzLDU5MTY0LDU5MTY1LDU5MTY2LDU5MTY3LDU5MTY4LDU5MTY5LDU5MTcwLDU5MTcxLDU5MTcyLDU5MTczLDU5''@;'; put 'put ''MTc0LDU5MTc1LDU5MTc2LDU5MTc3LDU5MTc4LDU5MTc5LDU5MTgwLDU5MTgxLDU5MTgyLDU5MTgzLDU5MTg0LDU5MTg1LDU5MTg2LDU5MTg3LDU5MTg4LDU5MTg5LDU5MTkwLDU5MTkxLDU5MTkyLDU5MTkzLDU5MTk0LDU5MTk1LDU5MTk2LDU5MTk3LDU5MTk4LDU5MTk5LDU5MjAwLDU5MjAx''@;'; put 'put ''LDU5MjAyLDU5MjAzLDU5MjA0LDU5MjA1LDU5MjA2LDU5MjA3LDU5MjA4LDU5MjA5LDU5MjEwLDU5MjExLDU5MjEyLDU5MjEzLDU5MjE0LDU5MjE1LDU5MjE2LDU5MjE3LDU5MjE4LDU5MjE5LDU5MjIwLDU5MjIxLDU5MjIyLDU5MjIzLDU5MjI0LDU5MjI1LDU5MjI2LDU5MjI3LDU5MjI4LDU5''@;'; put 'put ''MjI5LDU5MjMwLDU5MjMxLDU5MjMyLDU5MjMzLDU5MjM0LDU5MjM1LDU5MjM2LDU5MjM3LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2''@;'; put 'put ''MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDU5Mjk2LDU5Mjk3LDU5Mjk4LDU5Mjk5LDU5MzAwLDU5MzAxLDU5MzAyLDU5MzAzLDU5MzA0LDU5MzA1LDU5MzA2LDU5MzA3LDU5MzA4LDU5MzA5LDU5MzEwLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3''@;'; put 'put ''NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDU5MzExLDU5MzEyLDU5MzEzLDU5MzE0''@;'; put 'put ''LDU5MzE1LDU5MzE2LDU5MzE3LDU5MzE4LDU5MzE5LDU5MzIwLDU5MzIxLDU5MzIyLDU5MzIzLDcxNCw3MTUsNzI5LDgyMTEsODIxMyw4MjI5LDgyNDUsODQ1Myw4NDU3LDg1OTgsODU5OSw4NjAwLDg2MDEsODcyNSw4NzM1LDg3MzksODc4Niw4ODA2LDg4MDcsODg5NSw5NTUyLDk1NTMsOTU1''@;'; put 'put ''NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTU4MSw5NTgyLDk1ODMsOTU4NCw5NTg1LDk1ODYsOTU4''@;'; put 'put ''Nyw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYwOSw5NjEwLDk2MTEsOTYxMiw5NjEzLDk2MTQsOTYxNSw5NjE5LDk2MjAsOTYyMSw5NjYwLDk2NjEsOTY5OCw5Njk5LDk3MDAsOTcwMSw5NzM3LDg4NTMsMTIzMDYsMTIzMTcsMTIzMTgsNTkzMjQsNTkzMjUsNTkz''@;'; put 'put ''MjYsNTkzMjcsNTkzMjgsNTkzMjksNTkzMzAsNTkzMzEsNTkzMzIsNTkzMzMsNTkzMzQsMjU3LDIyNSw0NjIsMjI0LDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLDIzNCw1OTMsNzc0Mywz''@;'; put 'put ''MjQsMzI4LDUwNSw2MDksNTkzMzcsNTkzMzgsNTkzMzksNTkzNDAsMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1Njks''@;'; put 'put ''MTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNTkzNDEsNTkzNDIsNTkzNDMsNTkzNDQsNTkzNDUsNTkzNDYsNTkzNDcsNTkzNDgsNTkzNDksNTkzNTAsNTkzNTEsNTkz''@;'; put 'put ''NTIsNTkzNTMsNTkzNTQsNTkzNTUsNTkzNTYsNTkzNTcsNTkzNTgsNTkzNTksNTkzNjAsNTkzNjEsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMTI5NjMsMTMxOTgsMTMxOTksMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTcsMTMyNTIsMTMyNjIs''@;'; put 'put ''MTMyNjUsMTMyNjYsMTMyNjksNjUwNzIsNjU1MDYsNjU1MDgsNTkzNjIsODQ4MSwxMjg0OSw1OTM2Myw4MjA4LDU5MzY0LDU5MzY1LDU5MzY2LDEyNTQwLDEyNDQzLDEyNDQ0LDEyNTQxLDEyNTQyLDEyMjk0LDEyNDQ1LDEyNDQ2LDY1MDk3LDY1MDk4LDY1MDk5LDY1MTAwLDY1MTAxLDY1MTAy''@;'; put 'put ''LDY1MTAzLDY1MTA0LDY1MTA1LDY1MTA2LDY1MTA4LDY1MTA5LDY1MTEwLDY1MTExLDY1MTEzLDY1MTE0LDY1MTE1LDY1MTE2LDY1MTE3LDY1MTE4LDY1MTE5LDY1MTIwLDY1MTIxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1MTI4LDY1MTI5LDY1MTMwLDY1MTMxLDEyMzUwLDEy''@;'; put 'put ''MjcyLDEyMjczLDEyMjc0LDEyMjc1LDEyMjc2LDEyMjc3LDEyMjc4LDEyMjc5LDEyMjgwLDEyMjgxLDEyMjgyLDEyMjgzLDEyMjk1LDU5MzgwLDU5MzgxLDU5MzgyLDU5MzgzLDU5Mzg0LDU5Mzg1LDU5Mzg2LDU5Mzg3LDU5Mzg4LDU5Mzg5LDU5MzkwLDU5MzkxLDU5MzkyLDk0NzIsOTQ3Myw5''@;'; put 'put ''NDc0LDk0NzUsOTQ3Niw5NDc3LDk0NzgsOTQ3OSw5NDgwLDk0ODEsOTQ4Miw5NDgzLDk0ODQsOTQ4NSw5NDg2LDk0ODcsOTQ4OCw5NDg5LDk0OTAsOTQ5MSw5NDkyLDk0OTMsOTQ5NCw5NDk1LDk0OTYsOTQ5Nyw5NDk4LDk0OTksOTUwMCw5NTAxLDk1MDIsOTUwMyw5NTA0LDk1MDUsOTUwNiw5''@;'; put 'put ''NTA3LDk1MDgsOTUwOSw5NTEwLDk1MTEsOTUxMiw5NTEzLDk1MTQsOTUxNSw5NTE2LDk1MTcsOTUxOCw5NTE5LDk1MjAsOTUyMSw5NTIyLDk1MjMsOTUyNCw5NTI1LDk1MjYsOTUyNyw5NTI4LDk1MjksOTUzMCw5NTMxLDk1MzIsOTUzMyw5NTM0LDk1MzUsOTUzNiw5NTM3LDk1MzgsOTUzOSw5''@;'; put 'put ''NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5NTQ2LDk1NDcsNTkzOTMsNTkzOTQsNTkzOTUsNTkzOTYsNTkzOTcsNTkzOTgsNTkzOTksNTk0MDAsNTk0MDEsNTk0MDIsNTk0MDMsNTk0MDQsNTk0MDUsNTk0MDYsNTk0MDcsMjk0MDQsMjk0MDUsMjk0MDcsMjk0MTAsMjk0MTEsMjk0MTIs''@;'; put 'put ''Mjk0MTMsMjk0MTQsMjk0MTUsMjk0MTgsMjk0MTksMjk0MjksMjk0MzAsMjk0MzMsMjk0MzcsMjk0MzgsMjk0MzksMjk0NDAsMjk0NDIsMjk0NDQsMjk0NDUsMjk0NDYsMjk0NDcsMjk0NDgsMjk0NDksMjk0NTEsMjk0NTIsMjk0NTMsMjk0NTUsMjk0NTYsMjk0NTcsMjk0NTgsMjk0NjAsMjk0''@;'; put 'put ''NjQsMjk0NjUsMjk0NjYsMjk0NzEsMjk0NzIsMjk0NzUsMjk0NzYsMjk0NzgsMjk0NzksMjk0ODAsMjk0ODUsMjk0ODcsMjk0ODgsMjk0OTAsMjk0OTEsMjk0OTMsMjk0OTQsMjk0OTgsMjk0OTksMjk1MDAsMjk1MDEsMjk1MDQsMjk1MDUsMjk1MDYsMjk1MDcsMjk1MDgsMjk1MDksMjk1MTAs''@;'; put 'put ''Mjk1MTEsMjk1MTIsMjk1MTMsMjk1MTQsMjk1MTUsMjk1MTYsMjk1MTgsMjk1MTksMjk1MjEsMjk1MjMsMjk1MjQsMjk1MjUsMjk1MjYsMjk1MjgsMjk1MjksMjk1MzAsMjk1MzEsMjk1MzIsMjk1MzMsMjk1MzQsMjk1MzUsMjk1MzcsMjk1MzgsMjk1MzksMjk1NDAsMjk1NDEsMjk1NDIsMjk1''@;'; put 'put ''NDMsMjk1NDQsMjk1NDUsMjk1NDYsMjk1NDcsMjk1NTAsMjk1NTIsMjk1NTMsNTczNDQsNTczNDUsNTczNDYsNTczNDcsNTczNDgsNTczNDksNTczNTAsNTczNTEsNTczNTIsNTczNTMsNTczNTQsNTczNTUsNTczNTYsNTczNTcsNTczNTgsNTczNTksNTczNjAsNTczNjEsNTczNjIsNTczNjMs''@;'; put 'put ''NTczNjQsNTczNjUsNTczNjYsNTczNjcsNTczNjgsNTczNjksNTczNzAsNTczNzEsNTczNzIsNTczNzMsNTczNzQsNTczNzUsNTczNzYsNTczNzcsNTczNzgsNTczNzksNTczODAsNTczODEsNTczODIsNTczODMsNTczODQsNTczODUsNTczODYsNTczODcsNTczODgsNTczODksNTczOTAsNTcz''@;'; put 'put ''OTEsNTczOTIsNTczOTMsNTczOTQsNTczOTUsNTczOTYsNTczOTcsNTczOTgsNTczOTksNTc0MDAsNTc0MDEsNTc0MDIsNTc0MDMsNTc0MDQsNTc0MDUsNTc0MDYsNTc0MDcsNTc0MDgsNTc0MDksNTc0MTAsNTc0MTEsNTc0MTIsNTc0MTMsNTc0MTQsNTc0MTUsNTc0MTYsNTc0MTcsNTc0MTgs''@;'; put 'put ''NTc0MTksNTc0MjAsNTc0MjEsNTc0MjIsNTc0MjMsNTc0MjQsNTc0MjUsNTc0MjYsNTc0MjcsNTc0MjgsNTc0MjksNTc0MzAsNTc0MzEsNTc0MzIsNTc0MzMsNTc0MzQsNTc0MzUsNTc0MzYsNTc0MzcsMjk1NTQsMjk1NTUsMjk1NTYsMjk1NTcsMjk1NTgsMjk1NTksMjk1NjAsMjk1NjEsMjk1''@;'; put 'put ''NjIsMjk1NjMsMjk1NjQsMjk1NjUsMjk1NjcsMjk1NjgsMjk1NjksMjk1NzAsMjk1NzEsMjk1NzMsMjk1NzQsMjk1NzYsMjk1NzgsMjk1ODAsMjk1ODEsMjk1ODMsMjk1ODQsMjk1ODYsMjk1ODcsMjk1ODgsMjk1ODksMjk1OTEsMjk1OTIsMjk1OTMsMjk1OTQsMjk1OTYsMjk1OTcsMjk1OTgs''@;'; put 'put ''Mjk2MDAsMjk2MDEsMjk2MDMsMjk2MDQsMjk2MDUsMjk2MDYsMjk2MDcsMjk2MDgsMjk2MTAsMjk2MTIsMjk2MTMsMjk2MTcsMjk2MjAsMjk2MjEsMjk2MjIsMjk2MjQsMjk2MjUsMjk2MjgsMjk2MjksMjk2MzAsMjk2MzEsMjk2MzMsMjk2MzUsMjk2MzYsMjk2MzcsMjk2MzgsMjk2MzksMjk2''@;'; put 'put ''NDMsMjk2NDQsMjk2NDYsMjk2NTAsMjk2NTEsMjk2NTIsMjk2NTMsMjk2NTQsMjk2NTUsMjk2NTYsMjk2NTgsMjk2NTksMjk2NjAsMjk2NjEsMjk2NjMsMjk2NjUsMjk2NjYsMjk2NjcsMjk2NjgsMjk2NzAsMjk2NzIsMjk2NzQsMjk2NzUsMjk2NzYsMjk2NzgsMjk2NzksMjk2ODAsMjk2ODEs''@;'; put 'put ''Mjk2ODMsMjk2ODQsMjk2ODUsMjk2ODYsMjk2ODcsNTc0MzgsNTc0MzksNTc0NDAsNTc0NDEsNTc0NDIsNTc0NDMsNTc0NDQsNTc0NDUsNTc0NDYsNTc0NDcsNTc0NDgsNTc0NDksNTc0NTAsNTc0NTEsNTc0NTIsNTc0NTMsNTc0NTQsNTc0NTUsNTc0NTYsNTc0NTcsNTc0NTgsNTc0NTksNTc0''@;'; put 'put ''NjAsNTc0NjEsNTc0NjIsNTc0NjMsNTc0NjQsNTc0NjUsNTc0NjYsNTc0NjcsNTc0NjgsNTc0NjksNTc0NzAsNTc0NzEsNTc0NzIsNTc0NzMsNTc0NzQsNTc0NzUsNTc0NzYsNTc0NzcsNTc0NzgsNTc0NzksNTc0ODAsNTc0ODEsNTc0ODIsNTc0ODMsNTc0ODQsNTc0ODUsNTc0ODYsNTc0ODcs''@;'; put 'put ''NTc0ODgsNTc0ODksNTc0OTAsNTc0OTEsNTc0OTIsNTc0OTMsNTc0OTQsNTc0OTUsNTc0OTYsNTc0OTcsNTc0OTgsNTc0OTksNTc1MDAsNTc1MDEsNTc1MDIsNTc1MDMsNTc1MDQsNTc1MDUsNTc1MDYsNTc1MDcsNTc1MDgsNTc1MDksNTc1MTAsNTc1MTEsNTc1MTIsNTc1MTMsNTc1MTQsNTc1''@;'; put 'put ''MTUsNTc1MTYsNTc1MTcsNTc1MTgsNTc1MTksNTc1MjAsNTc1MjEsNTc1MjIsNTc1MjMsNTc1MjQsNTc1MjUsNTc1MjYsNTc1MjcsNTc1MjgsNTc1MjksNTc1MzAsNTc1MzEsMjk2ODgsMjk2ODksMjk2OTAsMjk2OTEsMjk2OTIsMjk2OTMsMjk2OTQsMjk2OTUsMjk2OTYsMjk2OTcsMjk2OTgs''@;'; put 'put ''Mjk3MDAsMjk3MDMsMjk3MDQsMjk3MDcsMjk3MDgsMjk3MDksMjk3MTAsMjk3MTMsMjk3MTQsMjk3MTUsMjk3MTYsMjk3MTcsMjk3MTgsMjk3MTksMjk3MjAsMjk3MjEsMjk3MjQsMjk3MjUsMjk3MjYsMjk3MjcsMjk3MjgsMjk3MjksMjk3MzEsMjk3MzIsMjk3MzUsMjk3MzcsMjk3MzksMjk3''@;'; put 'put ''NDEsMjk3NDMsMjk3NDUsMjk3NDYsMjk3NTEsMjk3NTIsMjk3NTMsMjk3NTQsMjk3NTUsMjk3NTcsMjk3NTgsMjk3NTksMjk3NjAsMjk3NjIsMjk3NjMsMjk3NjQsMjk3NjUsMjk3NjYsMjk3NjcsMjk3NjgsMjk3NjksMjk3NzAsMjk3NzEsMjk3NzIsMjk3NzMsMjk3NzQsMjk3NzUsMjk3NzYs''@;'; put 'put ''Mjk3NzcsMjk3NzgsMjk3NzksMjk3ODAsMjk3ODIsMjk3ODQsMjk3ODksMjk3OTIsMjk3OTMsMjk3OTQsMjk3OTUsMjk3OTYsMjk3OTcsMjk3OTgsMjk3OTksMjk4MDAsMjk4MDEsMjk4MDIsMjk4MDMsMjk4MDQsMjk4MDYsMjk4MDcsMjk4MDksMjk4MTAsMjk4MTEsMjk4MTIsMjk4MTMsMjk4''@;'; put 'put ''MTYsMjk4MTcsMjk4MTgsNTc1MzIsNTc1MzMsNTc1MzQsNTc1MzUsNTc1MzYsNTc1MzcsNTc1MzgsNTc1MzksNTc1NDAsNTc1NDEsNTc1NDIsNTc1NDMsNTc1NDQsNTc1NDUsNTc1NDYsNTc1NDcsNTc1NDgsNTc1NDksNTc1NTAsNTc1NTEsNTc1NTIsNTc1NTMsNTc1NTQsNTc1NTUsNTc1NTYs''@;'; put 'put ''NTc1NTcsNTc1NTgsNTc1NTksNTc1NjAsNTc1NjEsNTc1NjIsNTc1NjMsNTc1NjQsNTc1NjUsNTc1NjYsNTc1NjcsNTc1NjgsNTc1NjksNTc1NzAsNTc1NzEsNTc1NzIsNTc1NzMsNTc1NzQsNTc1NzUsNTc1NzYsNTc1NzcsNTc1NzgsNTc1NzksNTc1ODAsNTc1ODEsNTc1ODIsNTc1ODMsNTc1''@;'; put 'put ''ODQsNTc1ODUsNTc1ODYsNTc1ODcsNTc1ODgsNTc1ODksNTc1OTAsNTc1OTEsNTc1OTIsNTc1OTMsNTc1OTQsNTc1OTUsNTc1OTYsNTc1OTcsNTc1OTgsNTc1OTksNTc2MDAsNTc2MDEsNTc2MDIsNTc2MDMsNTc2MDQsNTc2MDUsNTc2MDYsNTc2MDcsNTc2MDgsNTc2MDksNTc2MTAsNTc2MTEs''@;'; put 'put ''NTc2MTIsNTc2MTMsNTc2MTQsNTc2MTUsNTc2MTYsNTc2MTcsNTc2MTgsNTc2MTksNTc2MjAsNTc2MjEsNTc2MjIsNTc2MjMsNTc2MjQsNTc2MjUsMjk4MTksMjk4MjAsMjk4MjEsMjk4MjMsMjk4MjYsMjk4MjgsMjk4MjksMjk4MzAsMjk4MzIsMjk4MzMsMjk4MzQsMjk4MzYsMjk4MzcsMjk4''@;'; put 'put ''MzksMjk4NDEsMjk4NDIsMjk4NDMsMjk4NDQsMjk4NDUsMjk4NDYsMjk4NDcsMjk4NDgsMjk4NDksMjk4NTAsMjk4NTEsMjk4NTMsMjk4NTUsMjk4NTYsMjk4NTcsMjk4NTgsMjk4NTksMjk4NjAsMjk4NjEsMjk4NjIsMjk4NjYsMjk4NjcsMjk4NjgsMjk4NjksMjk4NzAsMjk4NzEsMjk4NzIs''@;'; put 'put ''Mjk4NzMsMjk4NzQsMjk4NzUsMjk4NzYsMjk4NzcsMjk4NzgsMjk4NzksMjk4ODAsMjk4ODEsMjk4ODMsMjk4ODQsMjk4ODUsMjk4ODYsMjk4ODcsMjk4ODgsMjk4ODksMjk4OTAsMjk4OTEsMjk4OTIsMjk4OTMsMjk4OTQsMjk4OTUsMjk4OTYsMjk4OTcsMjk4OTgsMjk4OTksMjk5MDAsMjk5''@;'; put 'put ''MDEsMjk5MDIsMjk5MDMsMjk5MDQsMjk5MDUsMjk5MDcsMjk5MDgsMjk5MDksMjk5MTAsMjk5MTEsMjk5MTIsMjk5MTMsMjk5MTQsMjk5MTUsMjk5MTcsMjk5MTksMjk5MjEsMjk5MjUsMjk5MjcsMjk5MjgsMjk5MjksMjk5MzAsMjk5MzEsMjk5MzIsMjk5MzMsMjk5MzYsMjk5MzcsMjk5Mzgs''@;'; put 'put ''NTc2MjYsNTc2MjcsNTc2MjgsNTc2MjksNTc2MzAsNTc2MzEsNTc2MzIsNTc2MzMsNTc2MzQsNTc2MzUsNTc2MzYsNTc2MzcsNTc2MzgsNTc2MzksNTc2NDAsNTc2NDEsNTc2NDIsNTc2NDMsNTc2NDQsNTc2NDUsNTc2NDYsNTc2NDcsNTc2NDgsNTc2NDksNTc2NTAsNTc2NTEsNTc2NTIsNTc2''@;'; put 'put ''NTMsNTc2NTQsNTc2NTUsNTc2NTYsNTc2NTcsNTc2NTgsNTc2NTksNTc2NjAsNTc2NjEsNTc2NjIsNTc2NjMsNTc2NjQsNTc2NjUsNTc2NjYsNTc2NjcsNTc2NjgsNTc2NjksNTc2NzAsNTc2NzEsNTc2NzIsNTc2NzMsNTc2NzQsNTc2NzUsNTc2NzYsNTc2NzcsNTc2NzgsNTc2NzksNTc2ODAs''@;'; put 'put ''NTc2ODEsNTc2ODIsNTc2ODMsNTc2ODQsNTc2ODUsNTc2ODYsNTc2ODcsNTc2ODgsNTc2ODksNTc2OTAsNTc2OTEsNTc2OTIsNTc2OTMsNTc2OTQsNTc2OTUsNTc2OTYsNTc2OTcsNTc2OTgsNTc2OTksNTc3MDAsNTc3MDEsNTc3MDIsNTc3MDMsNTc3MDQsNTc3MDUsNTc3MDYsNTc3MDcsNTc3''@;'; put 'put ''MDgsNTc3MDksNTc3MTAsNTc3MTEsNTc3MTIsNTc3MTMsNTc3MTQsNTc3MTUsNTc3MTYsNTc3MTcsNTc3MTgsNTc3MTksMjk5MzksMjk5NDEsMjk5NDQsMjk5NDUsMjk5NDYsMjk5NDcsMjk5NDgsMjk5NDksMjk5NTAsMjk5NTIsMjk5NTMsMjk5NTQsMjk5NTUsMjk5NTcsMjk5NTgsMjk5NTks''@;'; put 'put ''Mjk5NjAsMjk5NjEsMjk5NjIsMjk5NjMsMjk5NjQsMjk5NjYsMjk5NjgsMjk5NzAsMjk5NzIsMjk5NzMsMjk5NzQsMjk5NzUsMjk5NzksMjk5ODEsMjk5ODIsMjk5ODQsMjk5ODUsMjk5ODYsMjk5ODcsMjk5ODgsMjk5OTAsMjk5OTEsMjk5OTQsMjk5OTgsMzAwMDQsMzAwMDYsMzAwMDksMzAw''@;'; put 'put ''MTIsMzAwMTMsMzAwMTUsMzAwMTcsMzAwMTgsMzAwMTksMzAwMjAsMzAwMjIsMzAwMjMsMzAwMjUsMzAwMjYsMzAwMjksMzAwMzIsMzAwMzMsMzAwMzQsMzAwMzUsMzAwMzcsMzAwMzgsMzAwMzksMzAwNDAsMzAwNDUsMzAwNDYsMzAwNDcsMzAwNDgsMzAwNDksMzAwNTAsMzAwNTEsMzAwNTIs''@;'; put 'put ''MzAwNTUsMzAwNTYsMzAwNTcsMzAwNTksMzAwNjAsMzAwNjEsMzAwNjIsMzAwNjMsMzAwNjQsMzAwNjUsMzAwNjcsMzAwNjksMzAwNzAsMzAwNzEsMzAwNzQsMzAwNzUsMzAwNzYsMzAwNzcsMzAwNzgsMzAwODAsMzAwODEsMzAwODIsMzAwODQsMzAwODUsMzAwODcsNTc3MjAsNTc3MjEsNTc3''@;'; put 'put ''MjIsNTc3MjMsNTc3MjQsNTc3MjUsNTc3MjYsNTc3MjcsNTc3MjgsNTc3MjksNTc3MzAsNTc3MzEsNTc3MzIsNTc3MzMsNTc3MzQsNTc3MzUsNTc3MzYsNTc3MzcsNTc3MzgsNTc3MzksNTc3NDAsNTc3NDEsNTc3NDIsNTc3NDMsNTc3NDQsNTc3NDUsNTc3NDYsNTc3NDcsNTc3NDgsNTc3NDks''@;'; put 'put ''NTc3NTAsNTc3NTEsNTc3NTIsNTc3NTMsNTc3NTQsNTc3NTUsNTc3NTYsNTc3NTcsNTc3NTgsNTc3NTksNTc3NjAsNTc3NjEsNTc3NjIsNTc3NjMsNTc3NjQsNTc3NjUsNTc3NjYsNTc3NjcsNTc3NjgsNTc3NjksNTc3NzAsNTc3NzEsNTc3NzIsNTc3NzMsNTc3NzQsNTc3NzUsNTc3NzYsNTc3''@;'; put 'put ''NzcsNTc3NzgsNTc3NzksNTc3ODAsNTc3ODEsNTc3ODIsNTc3ODMsNTc3ODQsNTc3ODUsNTc3ODYsNTc3ODcsNTc3ODgsNTc3ODksNTc3OTAsNTc3OTEsNTc3OTIsNTc3OTMsNTc3OTQsNTc3OTUsNTc3OTYsNTc3OTcsNTc3OTgsNTc3OTksNTc4MDAsNTc4MDEsNTc4MDIsNTc4MDMsNTc4MDQs''@;'; put 'put ''NTc4MDUsNTc4MDYsNTc4MDcsNTc4MDgsNTc4MDksNTc4MTAsNTc4MTEsNTc4MTIsNTc4MTMsMzAwODgsMzAwODksMzAwOTAsMzAwOTIsMzAwOTMsMzAwOTQsMzAwOTYsMzAwOTksMzAxMDEsMzAxMDQsMzAxMDcsMzAxMDgsMzAxMTAsMzAxMTQsMzAxMTgsMzAxMTksMzAxMjAsMzAxMjEsMzAx''@;'; put 'put ''MjIsMzAxMjUsMzAxMzQsMzAxMzUsMzAxMzgsMzAxMzksMzAxNDMsMzAxNDQsMzAxNDUsMzAxNTAsMzAxNTUsMzAxNTYsMzAxNTgsMzAxNTksMzAxNjAsMzAxNjEsMzAxNjMsMzAxNjcsMzAxNjksMzAxNzAsMzAxNzIsMzAxNzMsMzAxNzUsMzAxNzYsMzAxNzcsMzAxODEsMzAxODUsMzAxODgs''@;'; put 'put ''MzAxODksMzAxOTAsMzAxOTEsMzAxOTQsMzAxOTUsMzAxOTcsMzAxOTgsMzAxOTksMzAyMDAsMzAyMDIsMzAyMDMsMzAyMDUsMzAyMDYsMzAyMTAsMzAyMTIsMzAyMTQsMzAyMTUsMzAyMTYsMzAyMTcsMzAyMTksMzAyMjEsMzAyMjIsMzAyMjMsMzAyMjUsMzAyMjYsMzAyMjcsMzAyMjgsMzAy''@;'; put 'put ''MzAsMzAyMzQsMzAyMzYsMzAyMzcsMzAyMzgsMzAyNDEsMzAyNDMsMzAyNDcsMzAyNDgsMzAyNTIsMzAyNTQsMzAyNTUsMzAyNTcsMzAyNTgsMzAyNjIsMzAyNjMsMzAyNjUsMzAyNjYsMzAyNjcsMzAyNjksMzAyNzMsMzAyNzQsMzAyNzYsNTc4MTQsNTc4MTUsNTc4MTYsNTc4MTcsNTc4MTgs''@;'; put 'put ''NTc4MTksNTc4MjAsNTc4MjEsNTc4MjIsNTc4MjMsNTc4MjQsNTc4MjUsNTc4MjYsNTc4MjcsNTc4MjgsNTc4MjksNTc4MzAsNTc4MzEsNTc4MzIsNTc4MzMsNTc4MzQsNTc4MzUsNTc4MzYsNTc4MzcsNTc4MzgsNTc4MzksNTc4NDAsNTc4NDEsNTc4NDIsNTc4NDMsNTc4NDQsNTc4NDUsNTc4''@;'; put 'put ''NDYsNTc4NDcsNTc4NDgsNTc4NDksNTc4NTAsNTc4NTEsNTc4NTIsNTc4NTMsNTc4NTQsNTc4NTUsNTc4NTYsNTc4NTcsNTc4NTgsNTc4NTksNTc4NjAsNTc4NjEsNTc4NjIsNTc4NjMsNTc4NjQsNTc4NjUsNTc4NjYsNTc4NjcsNTc4NjgsNTc4NjksNTc4NzAsNTc4NzEsNTc4NzIsNTc4NzMs''@;'; put 'put ''NTc4NzQsNTc4NzUsNTc4NzYsNTc4NzcsNTc4NzgsNTc4NzksNTc4ODAsNTc4ODEsNTc4ODIsNTc4ODMsNTc4ODQsNTc4ODUsNTc4ODYsNTc4ODcsNTc4ODgsNTc4ODksNTc4OTAsNTc4OTEsNTc4OTIsNTc4OTMsNTc4OTQsNTc4OTUsNTc4OTYsNTc4OTcsNTc4OTgsNTc4OTksNTc5MDAsNTc5''@;'; put 'put ''MDEsNTc5MDIsNTc5MDMsNTc5MDQsNTc5MDUsNTc5MDYsNTc5MDcsMzAyNzcsMzAyNzgsMzAyNzksMzAyODAsMzAyODEsMzAyODIsMzAyODMsMzAyODYsMzAyODcsMzAyODgsMzAyODksMzAyOTAsMzAyOTEsMzAyOTMsMzAyOTUsMzAyOTYsMzAyOTcsMzAyOTgsMzAyOTksMzAzMDEsMzAzMDMs''@;'; put 'put ''MzAzMDQsMzAzMDUsMzAzMDYsMzAzMDgsMzAzMDksMzAzMTAsMzAzMTEsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTYsMzAzMTcsMzAzMTgsMzAzMjAsMzAzMjEsMzAzMjIsMzAzMjMsMzAzMjQsMzAzMjUsMzAzMjYsMzAzMjcsMzAzMjksMzAzMzAsMzAzMzIsMzAzMzUsMzAzMzYsMzAzMzcsMzAz''@;'; put 'put ''MzksMzAzNDEsMzAzNDUsMzAzNDYsMzAzNDgsMzAzNDksMzAzNTEsMzAzNTIsMzAzNTQsMzAzNTYsMzAzNTcsMzAzNTksMzAzNjAsMzAzNjIsMzAzNjMsMzAzNjQsMzAzNjUsMzAzNjYsMzAzNjcsMzAzNjgsMzAzNjksMzAzNzAsMzAzNzEsMzAzNzMsMzAzNzQsMzAzNzUsMzAzNzYsMzAzNzcs''@;'; put 'put ''MzAzNzgsMzAzNzksMzAzODAsMzAzODEsMzAzODMsMzAzODQsMzAzODcsMzAzODksMzAzOTAsMzAzOTEsMzAzOTIsMzAzOTMsMzAzOTQsMzAzOTUsMzAzOTYsMzAzOTcsMzAzOTgsMzA0MDAsMzA0MDEsMzA0MDMsMjE4MzQsMzg0NjMsMjI0NjcsMjUzODQsMjE3MTAsMjE3NjksMjE2OTYsMzAz''@;'; put 'put ''NTMsMzAyODQsMzQxMDgsMzA3MDIsMzM0MDYsMzA4NjEsMjkyMzMsMzg1NTIsMzg3OTcsMjc2ODgsMjM0MzMsMjA0NzQsMjUzNTMsMjYyNjMsMjM3MzYsMzMwMTgsMjY2OTYsMzI5NDIsMjYxMTQsMzA0MTQsMjA5ODUsMjU5NDIsMjkxMDAsMzI3NTMsMzQ5NDgsMjA2NTgsMjI4ODUsMjUwMzQs''@;'; put 'put ''Mjg1OTUsMzM0NTMsMjU0MjAsMjUxNzAsMjE0ODUsMjE1NDMsMzE0OTQsMjA4NDMsMzAxMTYsMjQwNTIsMjUzMDAsMzYyOTksMzg3NzQsMjUyMjYsMzI3OTMsMjIzNjUsMzg3MTIsMzI2MTAsMjkyNDAsMzAzMzMsMjY1NzUsMzAzMzQsMjU2NzAsMjAzMzYsMzYxMzMsMjUzMDgsMzEyNTUsMjYw''@;'; put 'put ''MDEsMjk2NzcsMjU2NDQsMjUyMDMsMzMzMjQsMzkwNDEsMjY0OTUsMjkyNTYsMjUxOTgsMjUyOTIsMjAyNzYsMjk5MjMsMjEzMjIsMjExNTAsMzI0NTgsMzcwMzAsMjQxMTAsMjY3NTgsMjcwMzYsMzMxNTIsMzI0NjUsMjY4MzQsMzA5MTcsMzQ0NDQsMzgyMjUsMjA2MjEsMzU4NzYsMzM1MDIs''@;'; put 'put ''MzI5OTAsMjEyNTMsMzUwOTAsMjEwOTMsMzA0MDQsMzA0MDcsMzA0MDksMzA0MTEsMzA0MTIsMzA0MTksMzA0MjEsMzA0MjUsMzA0MjYsMzA0MjgsMzA0MjksMzA0MzAsMzA0MzIsMzA0MzMsMzA0MzQsMzA0MzUsMzA0MzYsMzA0MzgsMzA0MzksMzA0NDAsMzA0NDEsMzA0NDIsMzA0NDMsMzA0''@;'; put 'put ''NDQsMzA0NDUsMzA0NDgsMzA0NTEsMzA0NTMsMzA0NTQsMzA0NTUsMzA0NTgsMzA0NTksMzA0NjEsMzA0NjMsMzA0NjQsMzA0NjYsMzA0NjcsMzA0NjksMzA0NzAsMzA0NzQsMzA0NzYsMzA0NzgsMzA0NzksMzA0ODAsMzA0ODEsMzA0ODIsMzA0ODMsMzA0ODQsMzA0ODUsMzA0ODYsMzA0ODcs''@;'; put 'put ''MzA0ODgsMzA0OTEsMzA0OTIsMzA0OTMsMzA0OTQsMzA0OTcsMzA0OTksMzA1MDAsMzA1MDEsMzA1MDMsMzA1MDYsMzA1MDcsMzA1MDgsMzA1MTAsMzA1MTIsMzA1MTMsMzA1MTQsMzA1MTUsMzA1MTYsMzA1MjEsMzA1MjMsMzA1MjUsMzA1MjYsMzA1MjcsMzA1MzAsMzA1MzIsMzA1MzMsMzA1''@;'; put 'put ''MzQsMzA1MzYsMzA1MzcsMzA1MzgsMzA1MzksMzA1NDAsMzA1NDEsMzA1NDIsMzA1NDMsMzA1NDYsMzA1NDcsMzA1NDgsMzA1NDksMzA1NTAsMzA1NTEsMzA1NTIsMzA1NTMsMzA1NTYsMzQxODAsMzg2NDksMjA0NDUsMjI1NjEsMzkyODEsMjM0NTMsMjUyNjUsMjUyNTMsMjYyOTIsMzU5NjEs''@;'; put 'put ''NDAwNzcsMjkxOTAsMjY0NzksMzA4NjUsMjQ3NTQsMjEzMjksMjEyNzEsMzY3NDQsMzI5NzIsMzYxMjUsMzgwNDksMjA0OTMsMjkzODQsMjI3OTEsMjQ4MTEsMjg5NTMsMzQ5ODcsMjI4NjgsMzM1MTksMjY0MTIsMzE1MjgsMjM4NDksMzI1MDMsMjk5OTcsMjc4OTMsMzY0NTQsMzY4NTYsMzY5''@;'; put 'put ''MjQsNDA3NjMsMjc2MDQsMzcxNDUsMzE1MDgsMjQ0NDQsMzA4ODcsMzQwMDYsMzQxMDksMjc2MDUsMjc2MDksMjc2MDYsMjQwNjUsMjQxOTksMzAyMDEsMzgzODEsMjU5NDksMjQzMzAsMjQ1MTcsMzY3NjcsMjI3MjEsMzMyMTgsMzY5OTEsMzg0OTEsMzg4MjksMzY3OTMsMzI1MzQsMzYxNDAs''@;'; put 'put ''MjUxNTMsMjA0MTUsMjE0NjQsMjEzNDIsMzY3NzYsMzY3NzcsMzY3NzksMzY5NDEsMjY2MzEsMjQ0MjYsMzMxNzYsMzQ5MjAsNDAxNTAsMjQ5NzEsMjEwMzUsMzAyNTAsMjQ0MjgsMjU5OTYsMjg2MjYsMjgzOTIsMjM0ODYsMjU2NzIsMjA4NTMsMjA5MTIsMjY1NjQsMTk5OTMsMzExNzcsMzky''@;'; put 'put ''OTIsMjg4NTEsMzA1NTcsMzA1NTgsMzA1NTksMzA1NjAsMzA1NjQsMzA1NjcsMzA1NjksMzA1NzAsMzA1NzMsMzA1NzQsMzA1NzUsMzA1NzYsMzA1NzcsMzA1NzgsMzA1NzksMzA1ODAsMzA1ODEsMzA1ODIsMzA1ODMsMzA1ODQsMzA1ODYsMzA1ODcsMzA1ODgsMzA1OTMsMzA1OTQsMzA1OTUs''@;'; put 'put ''MzA1OTgsMzA1OTksMzA2MDAsMzA2MDEsMzA2MDIsMzA2MDMsMzA2MDcsMzA2MDgsMzA2MTEsMzA2MTIsMzA2MTMsMzA2MTQsMzA2MTUsMzA2MTYsMzA2MTcsMzA2MTgsMzA2MTksMzA2MjAsMzA2MjEsMzA2MjIsMzA2MjUsMzA2MjcsMzA2MjgsMzA2MzAsMzA2MzIsMzA2MzUsMzA2MzcsMzA2''@;'; put 'put ''MzgsMzA2MzksMzA2NDEsMzA2NDIsMzA2NDQsMzA2NDYsMzA2NDcsMzA2NDgsMzA2NDksMzA2NTAsMzA2NTIsMzA2NTQsMzA2NTYsMzA2NTcsMzA2NTgsMzA2NTksMzA2NjAsMzA2NjEsMzA2NjIsMzA2NjMsMzA2NjQsMzA2NjUsMzA2NjYsMzA2NjcsMzA2NjgsMzA2NzAsMzA2NzEsMzA2NzIs''@;'; put 'put ''MzA2NzMsMzA2NzQsMzA2NzUsMzA2NzYsMzA2NzcsMzA2NzgsMzA2ODAsMzA2ODEsMzA2ODIsMzA2ODUsMzA2ODYsMzA2ODcsMzA2ODgsMzA2ODksMzA2OTIsMzAxNDksMjQxODIsMjk2MjcsMzM3NjAsMjU3NzMsMjUzMjAsMzgwNjksMjc4NzQsMjEzMzgsMjExODcsMjU2MTUsMzgwODIsMzE2''@;'; put 'put ''MzYsMjAyNzEsMjQwOTEsMzMzMzQsMzMwNDYsMzMxNjIsMjgxOTYsMjc4NTAsMzk1MzksMjU0MjksMjEzNDAsMjE3NTQsMzQ5MTcsMjI0OTYsMTk5ODEsMjQwNjcsMjc0OTMsMzE4MDcsMzcwOTYsMjQ1OTgsMjU4MzAsMjk0NjgsMzUwMDksMjY0NDgsMjUxNjUsMzYxMzAsMzA1NzIsMzYzOTMs''@;'; put 'put ''MzczMTksMjQ0MjUsMzM3NTYsMzQwODEsMzkxODQsMjE0NDIsMzQ0NTMsMjc1MzEsMjQ4MTMsMjQ4MDgsMjg3OTksMzM0ODUsMzMzMjksMjAxNzksMjc4MTUsMzQyNTUsMjU4MDUsMzE5NjEsMjcxMzMsMjYzNjEsMzM2MDksMjEzOTcsMzE1NzQsMjAzOTEsMjA4NzYsMjc5NzksMjM2MTgsMzY0''@;'; put 'put ''NjEsMjU1NTQsMjE0NDksMzM1ODAsMzM1OTAsMjY1OTcsMzA5MDAsMjU2NjEsMjM1MTksMjM3MDAsMjQwNDYsMzU4MTUsMjUyODYsMjY2MTIsMzU5NjIsMjU2MDAsMjU1MzAsMzQ2MzMsMzkzMDcsMzU4NjMsMzI1NDQsMzgxMzAsMjAxMzUsMzg0MTYsMzkwNzYsMjYxMjQsMjk0NjIsMzA2OTQs''@;'; put 'put ''MzA2OTYsMzA2OTgsMzA3MDMsMzA3MDQsMzA3MDUsMzA3MDYsMzA3MDgsMzA3MDksMzA3MTEsMzA3MTMsMzA3MTQsMzA3MTUsMzA3MTYsMzA3MjMsMzA3MjQsMzA3MjUsMzA3MjYsMzA3MjcsMzA3MjgsMzA3MzAsMzA3MzEsMzA3MzQsMzA3MzUsMzA3MzYsMzA3MzksMzA3NDEsMzA3NDUsMzA3''@;'; put 'put ''NDcsMzA3NTAsMzA3NTIsMzA3NTMsMzA3NTQsMzA3NTYsMzA3NjAsMzA3NjIsMzA3NjMsMzA3NjYsMzA3NjcsMzA3NjksMzA3NzAsMzA3NzEsMzA3NzMsMzA3NzQsMzA3ODEsMzA3ODMsMzA3ODUsMzA3ODYsMzA3ODcsMzA3ODgsMzA3OTAsMzA3OTIsMzA3OTMsMzA3OTQsMzA3OTUsMzA3OTcs''@;'; put 'put ''MzA3OTksMzA4MDEsMzA4MDMsMzA4MDQsMzA4MDgsMzA4MDksMzA4MTAsMzA4MTEsMzA4MTIsMzA4MTQsMzA4MTUsMzA4MTYsMzA4MTcsMzA4MTgsMzA4MTksMzA4MjAsMzA4MjEsMzA4MjIsMzA4MjMsMzA4MjQsMzA4MjUsMzA4MzEsMzA4MzIsMzA4MzMsMzA4MzQsMzA4MzUsMzA4MzYsMzA4''@;'; put 'put ''MzcsMzA4MzgsMzA4NDAsMzA4NDEsMzA4NDIsMzA4NDMsMzA4NDUsMzA4NDYsMzA4NDcsMzA4NDgsMzA4NDksMzA4NTAsMzA4NTEsMjIzMzAsMjM1ODEsMjQxMjAsMzgyNzEsMjA2MDcsMzI5MjgsMjEzNzgsMjU5NTAsMzAwMjEsMjE4MDksMjA1MTMsMzYyMjksMjUyMjAsMzgwNDYsMjYzOTcs''@;'; put 'put ''MjIwNjYsMjg1MjYsMjQwMzQsMjE1NTcsMjg4MTgsMzY3MTAsMjUxOTksMjU3NjQsMjU1MDcsMjQ0NDMsMjg1NTIsMzcxMDgsMzMyNTEsMzY3ODQsMjM1NzYsMjYyMTYsMjQ1NjEsMjc3ODUsMzg0NzIsMzYyMjUsMzQ5MjQsMjU3NDUsMzEyMTYsMjI0NzgsMjcyMjUsMjUxMDQsMjE1NzYsMjAw''@;'; put 'put ''NTYsMzEyNDMsMjQ4MDksMjg1NDgsMzU4MDIsMjUyMTUsMzY4OTQsMzk1NjMsMzEyMDQsMjE1MDcsMzAxOTYsMjUzNDUsMjEyNzMsMjc3NDQsMzY4MzEsMjQzNDcsMzk1MzYsMzI4MjcsNDA4MzEsMjAzNjAsMjM2MTAsMzYxOTYsMzI3MDksMjYwMjEsMjg4NjEsMjA4MDUsMjA5MTQsMzQ0MTEs''@;'; put 'put ''MjM4MTUsMjM0NTYsMjUyNzcsMzcyMjgsMzAwNjgsMzYzNjQsMzEyNjQsMjQ4MzMsMzE2MDksMjAxNjcsMzI1MDQsMzA1OTcsMTk5ODUsMzMyNjEsMjEwMjEsMjA5ODYsMjcyNDksMjE0MTYsMzY0ODcsMzgxNDgsMzg2MDcsMjgzNTMsMzg1MDAsMjY5NzAsMzA4NTIsMzA4NTMsMzA4NTQsMzA4''@;'; put 'put ''NTYsMzA4NTgsMzA4NTksMzA4NjMsMzA4NjQsMzA4NjYsMzA4NjgsMzA4NjksMzA4NzAsMzA4NzMsMzA4NzcsMzA4NzgsMzA4ODAsMzA4ODIsMzA4ODQsMzA4ODYsMzA4ODgsMzA4ODksMzA4OTAsMzA4OTEsMzA4OTIsMzA4OTMsMzA4OTQsMzA4OTUsMzA5MDEsMzA5MDIsMzA5MDMsMzA5MDQs''@;'; put 'put ''MzA5MDYsMzA5MDcsMzA5MDgsMzA5MDksMzA5MTEsMzA5MTIsMzA5MTQsMzA5MTUsMzA5MTYsMzA5MTgsMzA5MTksMzA5MjAsMzA5MjQsMzA5MjUsMzA5MjYsMzA5MjcsMzA5MjksMzA5MzAsMzA5MzEsMzA5MzQsMzA5MzUsMzA5MzYsMzA5MzgsMzA5MzksMzA5NDAsMzA5NDEsMzA5NDIsMzA5''@;'; put 'put ''NDMsMzA5NDQsMzA5NDUsMzA5NDYsMzA5NDcsMzA5NDgsMzA5NDksMzA5NTAsMzA5NTEsMzA5NTMsMzA5NTQsMzA5NTUsMzA5NTcsMzA5NTgsMzA5NTksMzA5NjAsMzA5NjEsMzA5NjMsMzA5NjUsMzA5NjYsMzA5NjgsMzA5NjksMzA5NzEsMzA5NzIsMzA5NzMsMzA5NzQsMzA5NzUsMzA5NzYs''@;'; put 'put ''MzA5NzgsMzA5NzksMzA5ODAsMzA5ODIsMzA5ODMsMzA5ODQsMzA5ODUsMzA5ODYsMzA5ODcsMzA5ODgsMzA3ODQsMjA2NDgsMzA2NzksMjU2MTYsMzUzMDIsMjI3ODgsMjU1NzEsMjQwMjksMzEzNTksMjY5NDEsMjAyNTYsMzMzMzcsMjE5MTIsMjAwMTgsMzAxMjYsMzEzODMsMjQxNjIsMjQy''@;'; put 'put ''MDIsMzgzODMsMjEwMTksMjE1NjEsMjg4MTAsMjU0NjIsMzgxODAsMjI0MDIsMjYxNDksMjY5NDMsMzcyNTUsMjE3NjcsMjgxNDcsMzI0MzEsMzQ4NTAsMjUxMzksMzI0OTYsMzAxMzMsMzM1NzYsMzA5MTMsMzg2MDQsMzY3NjYsMjQ5MDQsMjk5NDMsMzU3ODksMjc0OTIsMjEwNTAsMzYxNzYs''@;'; put 'put ''Mjc0MjUsMzI4NzQsMzM5MDUsMjIyNTcsMjEyNTQsMjAxNzQsMTk5OTUsMjA5NDUsMzE4OTUsMzcyNTksMzE3NTEsMjA0MTksMzY0NzksMzE3MTMsMzEzODgsMjU3MDMsMjM4MjgsMjA2NTIsMzMwMzAsMzAyMDksMzE5MjksMjgxNDAsMzI3MzYsMjY0NDksMjMzODQsMjM1NDQsMzA5MjMsMjU3''@;'; put 'put ''NzQsMjU2MTksMjU1MTQsMjUzODcsMzgxNjksMjU2NDUsMzY3OTgsMzE1NzIsMzAyNDksMjUxNzEsMjI4MjMsMjE1NzQsMjc1MTMsMjA2NDMsMjUxNDAsMjQxMDIsMjc1MjYsMjAxOTUsMzYxNTEsMzQ5NTUsMjQ0NTMsMzY5MTAsMzA5ODksMzA5OTAsMzA5OTEsMzA5OTIsMzA5OTMsMzA5OTQs''@;'; put 'put ''MzA5OTYsMzA5OTcsMzA5OTgsMzA5OTksMzFlMywzMTAwMSwzMTAwMiwzMTAwMywzMTAwNCwzMTAwNSwzMTAwNywzMTAwOCwzMTAwOSwzMTAxMCwzMTAxMSwzMTAxMywzMTAxNCwzMTAxNSwzMTAxNiwzMTAxNywzMTAxOCwzMTAxOSwzMTAyMCwzMTAyMSwzMTAyMiwzMTAyMywzMTAyNCwzMTAy''@;'; put 'put ''NSwzMTAyNiwzMTAyNywzMTAyOSwzMTAzMCwzMTAzMSwzMTAzMiwzMTAzMywzMTAzNywzMTAzOSwzMTA0MiwzMTA0MywzMTA0NCwzMTA0NSwzMTA0NywzMTA1MCwzMTA1MSwzMTA1MiwzMTA1MywzMTA1NCwzMTA1NSwzMTA1NiwzMTA1NywzMTA1OCwzMTA2MCwzMTA2MSwzMTA2NCwzMTA2NSwz''@;'; put 'put ''MTA3MywzMTA3NSwzMTA3NiwzMTA3OCwzMTA4MSwzMTA4MiwzMTA4MywzMTA4NCwzMTA4NiwzMTA4OCwzMTA4OSwzMTA5MCwzMTA5MSwzMTA5MiwzMTA5MywzMTA5NCwzMTA5NywzMTA5OSwzMTEwMCwzMTEwMSwzMTEwMiwzMTEwMywzMTEwNiwzMTEwNywzMTExMCwzMTExMSwzMTExMiwzMTEx''@;'; put 'put ''MywzMTExNSwzMTExNiwzMTExNywzMTExOCwzMTEyMCwzMTEyMSwzMTEyMiwyNDYwOCwzMjgyOSwyNTI4NSwyMDAyNSwyMTMzMywzNzExMiwyNTUyOCwzMjk2NiwyNjA4NiwyNzY5NCwyMDI5NCwyNDgxNCwyODEyOSwzNTgwNiwyNDM3NywzNDUwNywyNDQwMywyNTM3NywyMDgyNiwzMzYzMywy''@;'; put 'put ''NjcyMywyMDk5MiwyNTQ0MywzNjQyNCwyMDQ5OCwyMzcwNywzMTA5NSwyMzU0OCwyMTA0MCwzMTI5MSwyNDc2NCwzNjk0NywzMDQyMywyNDUwMywyNDQ3MSwzMDM0MCwzNjQ2MCwyODc4MywzMDMzMSwzMTU2MSwzMDYzNCwyMDk3OSwzNzAxMSwyMjU2NCwyMDMwMiwyODQwNCwzNjg0MiwyNTkz''@;'; put 'put ''MiwzMTUxNSwyOTM4MCwyODA2OCwzMjczNSwyMzI2NSwyNTI2OSwyNDIxMywyMjMyMCwzMzkyMiwzMTUzMiwyNDA5MywyNDM1MSwzNjg4MiwzMjUzMiwzOTA3MiwyNTQ3NCwyODM1OSwzMDg3MiwyODg1NywyMDg1NiwzODc0NywyMjQ0MywzMDAwNSwyMDI5MSwzMDAwOCwyNDIxNSwyNDgwNiwy''@;'; put 'put ''Mjg4MCwyODA5NiwyNzU4MywzMDg1NywyMTUwMCwzODYxMywyMDkzOSwyMDk5MywyNTQ4MSwyMTUxNCwzODAzNSwzNTg0MywzNjMwMCwyOTI0MSwzMDg3OSwzNDY3OCwzNjg0NSwzNTg1MywyMTQ3MiwzMTEyMywzMTEyNCwzMTEyNSwzMTEyNiwzMTEyNywzMTEyOCwzMTEyOSwzMTEzMSwzMTEz''@;'; put 'put ''MiwzMTEzMywzMTEzNCwzMTEzNSwzMTEzNiwzMTEzNywzMTEzOCwzMTEzOSwzMTE0MCwzMTE0MSwzMTE0MiwzMTE0NCwzMTE0NSwzMTE0NiwzMTE0NywzMTE0OCwzMTE0OSwzMTE1MCwzMTE1MSwzMTE1MiwzMTE1MywzMTE1NCwzMTE1NiwzMTE1NywzMTE1OCwzMTE1OSwzMTE2MCwzMTE2NCwz''@;'; put 'put ''MTE2NywzMTE3MCwzMTE3MiwzMTE3MywzMTE3NSwzMTE3NiwzMTE3OCwzMTE4MCwzMTE4MiwzMTE4MywzMTE4NCwzMTE4NywzMTE4OCwzMTE5MCwzMTE5MSwzMTE5MywzMTE5NCwzMTE5NSwzMTE5NiwzMTE5NywzMTE5OCwzMTIwMCwzMTIwMSwzMTIwMiwzMTIwNSwzMTIwOCwzMTIxMCwzMTIx''@;'; put 'put ''MiwzMTIxNCwzMTIxNywzMTIxOCwzMTIxOSwzMTIyMCwzMTIyMSwzMTIyMiwzMTIyMywzMTIyNSwzMTIyNiwzMTIyOCwzMTIzMCwzMTIzMSwzMTIzMywzMTIzNiwzMTIzNywzMTIzOSwzMTI0MCwzMTI0MSwzMTI0MiwzMTI0NCwzMTI0NywzMTI0OCwzMTI0OSwzMTI1MCwzMTI1MSwzMTI1Mywz''@;'; put 'put ''MTI1NCwzMTI1NiwzMTI1NywzMTI1OSwzMTI2MCwxOTk2OSwzMDQ0NywyMTQ4NiwzODAyNSwzOTAzMCw0MDcxOCwzODE4OSwyMzQ1MCwzNTc0NiwyMDAwMiwxOTk5NiwyMDkwOCwzMzg5MSwyNTAyNiwyMTE2MCwyNjYzNSwyMDM3NSwyNDY4MywyMDkyMywyNzkzNCwyMDgyOCwyNTIzOCwyNjAw''@;'; put 'put ''NywzODQ5NywzNTkxMCwzNjg4NywzMDE2OCwzNzExNywzMDU2MywyNzYwMiwyOTMyMiwyOTQyMCwzNTgzNSwyMjU4MSwzMDU4NSwzNjE3MiwyNjQ2MCwzODIwOCwzMjkyMiwyNDIzMCwyODE5MywyMjkzMCwzMTQ3MSwzMDcwMSwzODIwMywyNzU3MywyNjAyOSwzMjUyNiwyMjUzNCwyMDgxNywz''@;'; put 'put ''ODQzMSwyMzU0NSwyMjY5NywyMTU0NCwzNjQ2NiwyNTk1OCwzOTAzOSwyMjI0NCwzODA0NSwzMDQ2MiwzNjkyOSwyNTQ3OSwyMTcwMiwyMjgxMCwyMjg0MiwyMjQyNywzNjUzMCwyNjQyMSwzNjM0NiwzMzMzMywyMTA1NywyNDgxNiwyMjU0OSwzNDU1OCwyMzc4NCw0MDUxNywyMDQyMCwzOTA2''@;'; put 'put ''OSwzNTc2OSwyMzA3NywyNDY5NCwyMTM4MCwyNTIxMiwzNjk0MywzNzEyMiwzOTI5NSwyNDY4MSwzMjc4MCwyMDc5OSwzMjgxOSwyMzU3MiwzOTI4NSwyNzk1MywyMDEwOCwzMTI2MSwzMTI2MywzMTI2NSwzMTI2NiwzMTI2OCwzMTI2OSwzMTI3MCwzMTI3MSwzMTI3MiwzMTI3MywzMTI3NCwz''@;'; put 'put ''MTI3NSwzMTI3NiwzMTI3NywzMTI3OCwzMTI3OSwzMTI4MCwzMTI4MSwzMTI4MiwzMTI4NCwzMTI4NSwzMTI4NiwzMTI4OCwzMTI5MCwzMTI5NCwzMTI5NiwzMTI5NywzMTI5OCwzMTI5OSwzMTMwMCwzMTMwMSwzMTMwMywzMTMwNCwzMTMwNSwzMTMwNiwzMTMwNywzMTMwOCwzMTMwOSwzMTMx''@;'; put 'put ''MCwzMTMxMSwzMTMxMiwzMTMxNCwzMTMxNSwzMTMxNiwzMTMxNywzMTMxOCwzMTMyMCwzMTMyMSwzMTMyMiwzMTMyMywzMTMyNCwzMTMyNSwzMTMyNiwzMTMyNywzMTMyOCwzMTMyOSwzMTMzMCwzMTMzMSwzMTMzMiwzMTMzMywzMTMzNCwzMTMzNSwzMTMzNiwzMTMzNywzMTMzOCwzMTMzOSwz''@;'; put 'put ''MTM0MCwzMTM0MSwzMTM0MiwzMTM0MywzMTM0NSwzMTM0NiwzMTM0NywzMTM0OSwzMTM1NSwzMTM1NiwzMTM1NywzMTM1OCwzMTM2MiwzMTM2NSwzMTM2NywzMTM2OSwzMTM3MCwzMTM3MSwzMTM3MiwzMTM3NCwzMTM3NSwzMTM3NiwzMTM3OSwzMTM4MCwzMTM4NSwzMTM4NiwzMTM4NywzMTM5''@;'; put 'put ''MCwzMTM5MywzMTM5NCwzNjE0NCwyMTQ1NywzMjYwMiwzMTU2NywyMDI0MCwyMDA0NywzODQwMCwyNzg2MSwyOTY0OCwzNDI4MSwyNDA3MCwzMDA1OCwzMjc2MywyNzE0NiwzMDcxOCwzODAzNCwzMjMyMSwyMDk2MSwyODkwMiwyMTQ1MywzNjgyMCwzMzUzOSwzNjEzNywyOTM1OSwzOTI3Nywy''@;'; put 'put ''Nzg2NywyMjM0NiwzMzQ1OSwyNjA0MSwzMjkzOCwyNTE1MSwzODQ1MCwyMjk1MiwyMDIyMywzNTc3NSwzMjQ0MiwyNTkxOCwzMzc3OCwzODc1MCwyMTg1NywzOTEzNCwzMjkzMywyMTI5MCwzNTgzNywyMTUzNiwzMjk1NCwyNDIyMywyNzgzMiwzNjE1MywzMzQ1MiwzNzIxMCwyMTU0NSwyNzY3''@;'; put 'put ''NSwyMDk5OCwzMjQzOSwyMjM2NywyODk1NCwyNzc3NCwzMTg4MSwyMjg1OSwyMDIyMSwyNDU3NSwyNDg2OCwzMTkxNCwyMDAxNiwyMzU1MywyNjUzOSwzNDU2MiwyMzc5MiwzODE1NSwzOTExOCwzMDEyNywyODkyNSwzNjg5OCwyMDkxMSwzMjU0MSwzNTc3MywyMjg1NywyMDk2NCwyMDMxNSwy''@;'; put 'put ''MTU0MiwyMjgyNywyNTk3NSwzMjkzMiwyMzQxMywyNTIwNiwyNTI4MiwzNjc1MiwyNDEzMywyNzY3OSwzMTUyNiwyMDIzOSwyMDQ0MCwyNjM4MSwzMTM5NSwzMTM5NiwzMTM5OSwzMTQwMSwzMTQwMiwzMTQwMywzMTQwNiwzMTQwNywzMTQwOCwzMTQwOSwzMTQxMCwzMTQxMiwzMTQxMywzMTQx''@;'; put 'put ''NCwzMTQxNSwzMTQxNiwzMTQxNywzMTQxOCwzMTQxOSwzMTQyMCwzMTQyMSwzMTQyMiwzMTQyNCwzMTQyNSwzMTQyNiwzMTQyNywzMTQyOCwzMTQyOSwzMTQzMCwzMTQzMSwzMTQzMiwzMTQzMywzMTQzNCwzMTQzNiwzMTQzNywzMTQzOCwzMTQzOSwzMTQ0MCwzMTQ0MSwzMTQ0MiwzMTQ0Mywz''@;'; put 'put ''MTQ0NCwzMTQ0NSwzMTQ0NywzMTQ0OCwzMTQ1MCwzMTQ1MSwzMTQ1MiwzMTQ1MywzMTQ1NywzMTQ1OCwzMTQ2MCwzMTQ2MywzMTQ2NCwzMTQ2NSwzMTQ2NiwzMTQ2NywzMTQ2OCwzMTQ3MCwzMTQ3MiwzMTQ3MywzMTQ3NCwzMTQ3NSwzMTQ3NiwzMTQ3NywzMTQ3OCwzMTQ3OSwzMTQ4MCwzMTQ4''@;'; put 'put ''MywzMTQ4NCwzMTQ4NiwzMTQ4OCwzMTQ4OSwzMTQ5MCwzMTQ5MywzMTQ5NSwzMTQ5NywzMTUwMCwzMTUwMSwzMTUwMiwzMTUwNCwzMTUwNiwzMTUwNywzMTUxMCwzMTUxMSwzMTUxMiwzMTUxNCwzMTUxNiwzMTUxNywzMTUxOSwzMTUyMSwzMTUyMiwzMTUyMywzMTUyNywzMTUyOSwzMTUzMywy''@;'; put 'put ''ODAxNCwyODA3NCwzMTExOSwzNDk5MywyNDM0MywyOTk5NSwyNTI0MiwzNjc0MSwyMDQ2MywzNzM0MCwyNjAyMywzMzA3MSwzMzEwNSwyNDIyMCwzMzEwNCwzNjIxMiwyMTEwMywzNTIwNiwzNjE3MSwyMjc5NywyMDYxMywyMDE4NCwzODQyOCwyOTIzOCwzMzE0NSwzNjEyNywyMzUwMCwzNTc0''@;'; put 'put ''NywzODQ2OCwyMjkxOSwzMjUzOCwyMTY0OCwyMjEzNCwyMjAzMCwzNTgxMywyNTkxMywyNzAxMCwzODA0MSwzMDQyMiwyODI5NywyNDE3OCwyOTk3NiwyNjQzOCwyNjU3NywzMTQ4NywzMjkyNSwzNjIxNCwyNDg2MywzMTE3NCwyNTk1NCwzNjE5NSwyMDg3MiwyMTAxOCwzODA1MCwzMjU2OCwz''@;'; put 'put ''MjkyMywzMjQzNCwyMzcwMywyODIwNywyNjQ2NCwzMTcwNSwzMDM0NywzOTY0MCwzMzE2NywzMjY2MCwzMTk1NywyNTYzMCwzODIyNCwzMTI5NSwyMTU3OCwyMTczMywyNzQ2OCwyNTYwMSwyNTA5Niw0MDUwOSwzMzAxMSwzMDEwNSwyMTEwNiwzODc2MSwzMzg4MywyNjY4NCwzNDUzMiwzODQw''@;'; put 'put ''MSwzODU0OCwzODEyNCwyMDAxMCwyMTUwOCwzMjQ3MywyNjY4MSwzNjMxOSwzMjc4OSwyNjM1NiwyNDIxOCwzMjY5NywzMTUzNSwzMTUzNiwzMTUzOCwzMTU0MCwzMTU0MSwzMTU0MiwzMTU0MywzMTU0NSwzMTU0NywzMTU0OSwzMTU1MSwzMTU1MiwzMTU1MywzMTU1NCwzMTU1NSwzMTU1Niwz''@;'; put 'put ''MTU1OCwzMTU2MCwzMTU2MiwzMTU2NSwzMTU2NiwzMTU3MSwzMTU3MywzMTU3NSwzMTU3NywzMTU4MCwzMTU4MiwzMTU4MywzMTU4NSwzMTU4NywzMTU4OCwzMTU4OSwzMTU5MCwzMTU5MSwzMTU5MiwzMTU5MywzMTU5NCwzMTU5NSwzMTU5NiwzMTU5NywzMTU5OSwzMTYwMCwzMTYwMywzMTYw''@;'; put 'put ''NCwzMTYwNiwzMTYwOCwzMTYxMCwzMTYxMiwzMTYxMywzMTYxNSwzMTYxNywzMTYxOCwzMTYxOSwzMTYyMCwzMTYyMiwzMTYyMywzMTYyNCwzMTYyNSwzMTYyNiwzMTYyNywzMTYyOCwzMTYzMCwzMTYzMSwzMTYzMywzMTYzNCwzMTYzNSwzMTYzOCwzMTY0MCwzMTY0MSwzMTY0MiwzMTY0Mywz''@;'; put 'put ''MTY0NiwzMTY0NywzMTY0OCwzMTY1MSwzMTY1MiwzMTY1MywzMTY2MiwzMTY2MywzMTY2NCwzMTY2NiwzMTY2NywzMTY2OSwzMTY3MCwzMTY3MSwzMTY3MywzMTY3NCwzMTY3NSwzMTY3NiwzMTY3NywzMTY3OCwzMTY3OSwzMTY4MCwzMTY4MiwzMTY4MywzMTY4NCwyMjQ2NiwzMjgzMSwyNjc3''@;'; put 'put ''NSwyNDAzNywyNTkxNSwyMTE1MSwyNDY4NSw0MDg1OCwyMDM3OSwzNjUyNCwyMDg0NCwyMzQ2NywyNDMzOSwyNDA0MSwyNzc0MiwyNTMyOSwzNjEyOSwyMDg0OSwzODA1NywyMTI0NiwyNzgwNywzMzUwMywyOTM5OSwyMjQzNCwyNjUwMCwzNjE0MSwyMjgxNSwzNjc2NCwzMzczNSwyMTY1Mywz''@;'; put 'put ''MTYyOSwyMDI3MiwyNzgzNywyMzM5NiwyMjk5Myw0MDcyMywyMTQ3NiwzNDUwNiwzOTU5MiwzNTg5NSwzMjkyOSwyNTkyNSwzOTAzOCwyMjI2NiwzODU5OSwyMTAzOCwyOTkxNiwyMTA3MiwyMzUyMSwyNTM0NiwzNTA3NCwyMDA1NCwyNTI5NiwyNDYxOCwyNjg3NCwyMDg1MSwyMzQ0OCwyMDg5''@;'; put 'put ''NiwzNTI2NiwzMTY0OSwzOTMwMiwzMjU5MiwyNDgxNSwyODc0OCwzNjE0MywyMDgwOSwyNDE5MSwzNjg5MSwyOTgwOCwzNTI2OCwyMjMxNywzMDc4OSwyNDQwMiw0MDg2MywzODM5NCwzNjcxMiwzOTc0MCwzNTgwOSwzMDMyOCwyNjY5MCwyNjU4OCwzNjMzMCwzNjE0OSwyMTA1MywzNjc0Niwy''@;'; put 'put ''ODM3OCwyNjgyOSwzODE0OSwzNzEwMSwyMjI2OSwyNjUyNCwzNTA2NSwzNjgwNywyMTcwNCwzMTY4NSwzMTY4OCwzMTY4OSwzMTY5MCwzMTY5MSwzMTY5MywzMTY5NCwzMTY5NSwzMTY5NiwzMTY5OCwzMTcwMCwzMTcwMSwzMTcwMiwzMTcwMywzMTcwNCwzMTcwNywzMTcwOCwzMTcxMCwzMTcx''@;'; put 'put ''MSwzMTcxMiwzMTcxNCwzMTcxNSwzMTcxNiwzMTcxOSwzMTcyMCwzMTcyMSwzMTcyMywzMTcyNCwzMTcyNSwzMTcyNywzMTcyOCwzMTczMCwzMTczMSwzMTczMiwzMTczMywzMTczNCwzMTczNiwzMTczNywzMTczOCwzMTczOSwzMTc0MSwzMTc0MywzMTc0NCwzMTc0NSwzMTc0NiwzMTc0Nywz''@;'; put 'put ''MTc0OCwzMTc0OSwzMTc1MCwzMTc1MiwzMTc1MywzMTc1NCwzMTc1NywzMTc1OCwzMTc2MCwzMTc2MSwzMTc2MiwzMTc2MywzMTc2NCwzMTc2NSwzMTc2NywzMTc2OCwzMTc2OSwzMTc3MCwzMTc3MSwzMTc3MiwzMTc3MywzMTc3NCwzMTc3NiwzMTc3NywzMTc3OCwzMTc3OSwzMTc4MCwzMTc4''@;'; put 'put ''MSwzMTc4NCwzMTc4NSwzMTc4NywzMTc4OCwzMTc4OSwzMTc5MCwzMTc5MSwzMTc5MiwzMTc5MywzMTc5NCwzMTc5NSwzMTc5NiwzMTc5NywzMTc5OCwzMTc5OSwzMTgwMSwzMTgwMiwzMTgwMywzMTgwNCwzMTgwNSwzMTgwNiwzMTgxMCwzOTYwOCwyMzQwMSwyODAyMywyNzY4NiwyMDEzMywy''@;'; put 'put ''MzQ3NSwzOTU1OSwzNzIxOSwyNWUzLDM3MDM5LDM4ODg5LDIxNTQ3LDI4MDg1LDIzNTA2LDIwOTg5LDIxODk4LDMyNTk3LDMyNzUyLDI1Nzg4LDI1NDIxLDI2MDk3LDI1MDIyLDI0NzE3LDI4OTM4LDI3NzM1LDI3NzIxLDIyODMxLDI2NDc3LDMzMzIyLDIyNzQxLDIyMTU4LDM1OTQ2LDI3NjI3''@;'; put 'put ''LDM3MDg1LDIyOTA5LDMyNzkxLDIxNDk1LDI4MDA5LDIxNjIxLDIxOTE3LDMzNjU1LDMzNzQzLDI2NjgwLDMxMTY2LDIxNjQ0LDIwMzA5LDIxNTEyLDMwNDE4LDM1OTc3LDM4NDAyLDI3ODI3LDI4MDg4LDM2MjAzLDM1MDg4LDQwNTQ4LDM2MTU0LDIyMDc5LDQwNjU3LDMwMTY1LDI0NDU2LDI5''@;'; put 'put ''NDA4LDI0NjgwLDIxNzU2LDIwMTM2LDI3MTc4LDM0OTEzLDI0NjU4LDM2NzIwLDIxNzAwLDI4ODg4LDM0NDI1LDQwNTExLDI3OTQ2LDIzNDM5LDI0MzQ0LDMyNDE4LDIxODk3LDIwMzk5LDI5NDkyLDIxNTY0LDIxNDAyLDIwNTA1LDIxNTE4LDIxNjI4LDIwMDQ2LDI0NTczLDI5Nzg2LDIyNzc0''@;'; put 'put ''LDMzODk5LDMyOTkzLDM0Njc2LDI5MzkyLDMxOTQ2LDI4MjQ2LDMxODExLDMxODEyLDMxODEzLDMxODE0LDMxODE1LDMxODE2LDMxODE3LDMxODE4LDMxODE5LDMxODIwLDMxODIyLDMxODIzLDMxODI0LDMxODI1LDMxODI2LDMxODI3LDMxODI4LDMxODI5LDMxODMwLDMxODMxLDMxODMyLDMx''@;'; put 'put ''ODMzLDMxODM0LDMxODM1LDMxODM2LDMxODM3LDMxODM4LDMxODM5LDMxODQwLDMxODQxLDMxODQyLDMxODQzLDMxODQ0LDMxODQ1LDMxODQ2LDMxODQ3LDMxODQ4LDMxODQ5LDMxODUwLDMxODUxLDMxODUyLDMxODUzLDMxODU0LDMxODU1LDMxODU2LDMxODU3LDMxODU4LDMxODYxLDMxODYy''@;'; put 'put ''LDMxODYzLDMxODY0LDMxODY1LDMxODY2LDMxODcwLDMxODcxLDMxODcyLDMxODczLDMxODc0LDMxODc1LDMxODc2LDMxODc3LDMxODc4LDMxODc5LDMxODgwLDMxODgyLDMxODgzLDMxODg0LDMxODg1LDMxODg2LDMxODg3LDMxODg4LDMxODkxLDMxODkyLDMxODk0LDMxODk3LDMxODk4LDMx''@;'; put 'put ''ODk5LDMxOTA0LDMxOTA1LDMxOTA3LDMxOTEwLDMxOTExLDMxOTEyLDMxOTEzLDMxOTE1LDMxOTE2LDMxOTE3LDMxOTE5LDMxOTIwLDMxOTI0LDMxOTI1LDMxOTI2LDMxOTI3LDMxOTI4LDMxOTMwLDMxOTMxLDI0MzU5LDM0MzgyLDIxODA0LDI1MjUyLDIwMTE0LDI3ODE4LDI1MTQzLDMzNDU3''@;'; put 'put ''LDIxNzE5LDIxMzI2LDI5NTAyLDI4MzY5LDMwMDExLDIxMDEwLDIxMjcwLDM1ODA1LDI3MDg4LDI0NDU4LDI0NTc2LDI4MTQyLDIyMzUxLDI3NDI2LDI5NjE1LDI2NzA3LDM2ODI0LDMyNTMxLDI1NDQyLDI0NzM5LDIxNzk2LDMwMTg2LDM1OTM4LDI4OTQ5LDI4MDY3LDIzNDYyLDI0MTg3LDMz''@;'; put 'put ''NjE4LDI0OTA4LDQwNjQ0LDMwOTcwLDM0NjQ3LDMxNzgzLDMwMzQzLDIwOTc2LDI0ODIyLDI5MDA0LDI2MTc5LDI0MTQwLDI0NjUzLDM1ODU0LDI4Nzg0LDI1MzgxLDM2NzQ1LDI0NTA5LDI0Njc0LDM0NTE2LDIyMjM4LDI3NTg1LDI0NzI0LDI0OTM1LDIxMzIxLDI0ODAwLDI2MjE0LDM2MTU5''@;'; put 'put ''LDMxMjI5LDIwMjUwLDI4OTA1LDI3NzE5LDM1NzYzLDM1ODI2LDMyNDcyLDMzNjM2LDI2MTI3LDIzMTMwLDM5NzQ2LDI3OTg1LDI4MTUxLDM1OTA1LDI3OTYzLDIwMjQ5LDI4Nzc5LDMzNzE5LDI1MTEwLDI0Nzg1LDM4NjY5LDM2MTM1LDMxMDk2LDIwOTg3LDIyMzM0LDIyNTIyLDI2NDI2LDMw''@;'; put 'put ''MDcyLDMxMjkzLDMxMjE1LDMxNjM3LDMxOTM1LDMxOTM2LDMxOTM4LDMxOTM5LDMxOTQwLDMxOTQyLDMxOTQ1LDMxOTQ3LDMxOTUwLDMxOTUxLDMxOTUyLDMxOTUzLDMxOTU0LDMxOTU1LDMxOTU2LDMxOTYwLDMxOTYyLDMxOTYzLDMxOTY1LDMxOTY2LDMxOTY5LDMxOTcwLDMxOTcxLDMxOTcy''@;'; put 'put ''LDMxOTczLDMxOTc0LDMxOTc1LDMxOTc3LDMxOTc4LDMxOTc5LDMxOTgwLDMxOTgxLDMxOTgyLDMxOTg0LDMxOTg1LDMxOTg2LDMxOTg3LDMxOTg4LDMxOTg5LDMxOTkwLDMxOTkxLDMxOTkzLDMxOTk0LDMxOTk2LDMxOTk3LDMxOTk4LDMxOTk5LDMyZTMsMzIwMDEsMzIwMDIsMzIwMDMsMzIw''@;'; put 'put ''MDQsMzIwMDUsMzIwMDYsMzIwMDcsMzIwMDgsMzIwMDksMzIwMTEsMzIwMTIsMzIwMTMsMzIwMTQsMzIwMTUsMzIwMTYsMzIwMTcsMzIwMTgsMzIwMTksMzIwMjAsMzIwMjEsMzIwMjIsMzIwMjMsMzIwMjQsMzIwMjUsMzIwMjYsMzIwMjcsMzIwMjgsMzIwMjksMzIwMzAsMzIwMzEsMzIwMzMs''@;'; put 'put ''MzIwMzUsMzIwMzYsMzIwMzcsMzIwMzgsMzIwNDAsMzIwNDEsMzIwNDIsMzIwNDQsMzIwNDUsMzIwNDYsMzIwNDgsMzIwNDksMzIwNTAsMzIwNTEsMzIwNTIsMzIwNTMsMzIwNTQsMzI5MDgsMzkyNjksMzY4NTcsMjg2MDgsMzU3NDksNDA0ODEsMjMwMjAsMzI0ODksMzI1MjEsMjE1MTMsMjY0''@;'; put 'put ''OTcsMjY4NDAsMzY3NTMsMzE4MjEsMzg1OTgsMjE0NTAsMjQ2MTMsMzAxNDIsMjc3NjIsMjEzNjMsMjMyNDEsMzI0MjMsMjUzODAsMjA5NjAsMzMwMzQsMjQwNDksMzQwMTUsMjUyMTYsMjA4NjQsMjMzOTUsMjAyMzgsMzEwODUsMjEwNTgsMjQ3NjAsMjc5ODIsMjM0OTIsMjM0OTAsMzU3NDUs''@;'; put 'put ''MzU3NjAsMjYwODIsMjQ1MjQsMzg0NjksMjI5MzEsMzI0ODcsMzI0MjYsMjIwMjUsMjY1NTEsMjI4NDEsMjAzMzksMjM0NzgsMjExNTIsMzM2MjYsMzkwNTAsMzYxNTgsMzAwMDIsMzgwNzgsMjA1NTEsMzEyOTIsMjAyMTUsMjY1NTAsMzk1NTAsMjMyMzMsMjc1MTYsMzA0MTcsMjIzNjIsMjM1''@;'; put 'put ''NzQsMzE1NDYsMzgzODgsMjkwMDYsMjA4NjAsMzI5MzcsMzMzOTIsMjI5MDQsMzI1MTYsMzM1NzUsMjY4MTYsMjY2MDQsMzA4OTcsMzA4MzksMjUzMTUsMjU0NDEsMzE2MTYsMjA0NjEsMjEwOTgsMjA5NDMsMzM2MTYsMjcwOTksMzc0OTIsMzYzNDEsMzYxNDUsMzUyNjUsMzgxOTAsMzE2NjEs''@;'; put 'put ''MjAyMTQsMzIwNTUsMzIwNTYsMzIwNTcsMzIwNTgsMzIwNTksMzIwNjAsMzIwNjEsMzIwNjIsMzIwNjMsMzIwNjQsMzIwNjUsMzIwNjYsMzIwNjcsMzIwNjgsMzIwNjksMzIwNzAsMzIwNzEsMzIwNzIsMzIwNzMsMzIwNzQsMzIwNzUsMzIwNzYsMzIwNzcsMzIwNzgsMzIwNzksMzIwODAsMzIw''@;'; put 'put ''ODEsMzIwODIsMzIwODMsMzIwODQsMzIwODUsMzIwODYsMzIwODcsMzIwODgsMzIwODksMzIwOTAsMzIwOTEsMzIwOTIsMzIwOTMsMzIwOTQsMzIwOTUsMzIwOTYsMzIwOTcsMzIwOTgsMzIwOTksMzIxMDAsMzIxMDEsMzIxMDIsMzIxMDMsMzIxMDQsMzIxMDUsMzIxMDYsMzIxMDcsMzIxMDgs''@;'; put 'put ''MzIxMDksMzIxMTEsMzIxMTIsMzIxMTMsMzIxMTQsMzIxMTUsMzIxMTYsMzIxMTcsMzIxMTgsMzIxMjAsMzIxMjEsMzIxMjIsMzIxMjMsMzIxMjQsMzIxMjUsMzIxMjYsMzIxMjcsMzIxMjgsMzIxMjksMzIxMzAsMzIxMzEsMzIxMzIsMzIxMzMsMzIxMzQsMzIxMzUsMzIxMzYsMzIxMzcsMzIx''@;'; put 'put ''MzgsMzIxMzksMzIxNDAsMzIxNDEsMzIxNDIsMzIxNDMsMzIxNDQsMzIxNDUsMzIxNDYsMzIxNDcsMzIxNDgsMzIxNDksMzIxNTAsMzIxNTEsMzIxNTIsMjA1ODEsMzMzMjgsMjEwNzMsMzkyNzksMjgxNzYsMjgyOTMsMjgwNzEsMjQzMTQsMjA3MjUsMjMwMDQsMjM1NTgsMjc5NzQsMjc3NDMs''@;'; put 'put ''MzAwODYsMzM5MzEsMjY3MjgsMjI4NzAsMzU3NjIsMjEyODAsMzcyMzMsMzg0NzcsMzQxMjEsMjY4OTgsMzA5NzcsMjg5NjYsMzMwMTQsMjAxMzIsMzcwNjYsMjc5NzUsMzk1NTYsMjMwNDcsMjIyMDQsMjU2MDUsMzgxMjgsMzA2OTksMjAzODksMzMwNTAsMjk0MDksMzUyODIsMzkyOTAsMzI1''@;'; put 'put ''NjQsMzI0NzgsMjExMTksMjU5NDUsMzcyMzcsMzY3MzUsMzY3MzksMjE0ODMsMzEzODIsMjU1ODEsMjU1MDksMzAzNDIsMzEyMjQsMzQ5MDMsMzg0NTQsMjUxMzAsMjExNjMsMzM0MTAsMjY3MDgsMjY0ODAsMjU0NjMsMzA1NzEsMzE0NjksMjc5MDUsMzI0NjcsMzUyOTksMjI5OTIsMjUxMDYs''@;'; put 'put ''MzQyNDksMzM0NDUsMzAwMjgsMjA1MTEsMjAxNzEsMzAxMTcsMzU4MTksMjM2MjYsMjQwNjIsMzE1NjMsMjYwMjAsMzczMjksMjAxNzAsMjc5NDEsMzUxNjcsMzIwMzksMzgxODIsMjAxNjUsMzU4ODAsMzY4MjcsMzg3NzEsMjYxODcsMzExMDUsMzY4MTcsMjg5MDgsMjgwMjQsMzIxNTMsMzIx''@;'; put 'put ''NTQsMzIxNTUsMzIxNTYsMzIxNTcsMzIxNTgsMzIxNTksMzIxNjAsMzIxNjEsMzIxNjIsMzIxNjMsMzIxNjQsMzIxNjUsMzIxNjcsMzIxNjgsMzIxNjksMzIxNzAsMzIxNzEsMzIxNzIsMzIxNzMsMzIxNzUsMzIxNzYsMzIxNzcsMzIxNzgsMzIxNzksMzIxODAsMzIxODEsMzIxODIsMzIxODMs''@;'; put 'put ''MzIxODQsMzIxODUsMzIxODYsMzIxODcsMzIxODgsMzIxODksMzIxOTAsMzIxOTEsMzIxOTIsMzIxOTMsMzIxOTQsMzIxOTUsMzIxOTYsMzIxOTcsMzIxOTgsMzIxOTksMzIyMDAsMzIyMDEsMzIyMDIsMzIyMDMsMzIyMDQsMzIyMDUsMzIyMDYsMzIyMDcsMzIyMDgsMzIyMDksMzIyMTAsMzIy''@;'; put 'put ''MTEsMzIyMTIsMzIyMTMsMzIyMTQsMzIyMTUsMzIyMTYsMzIyMTcsMzIyMTgsMzIyMTksMzIyMjAsMzIyMjEsMzIyMjIsMzIyMjMsMzIyMjQsMzIyMjUsMzIyMjYsMzIyMjcsMzIyMjgsMzIyMjksMzIyMzAsMzIyMzEsMzIyMzIsMzIyMzMsMzIyMzQsMzIyMzUsMzIyMzYsMzIyMzcsMzIyMzgs''@;'; put 'put ''MzIyMzksMzIyNDAsMzIyNDEsMzIyNDIsMzIyNDMsMzIyNDQsMzIyNDUsMzIyNDYsMzIyNDcsMzIyNDgsMzIyNDksMzIyNTAsMjM2MTMsMjExNzAsMzM2MDYsMjA4MzQsMzM1NTAsMzA1NTUsMjYyMzAsNDAxMjAsMjAxNDAsMjQ3NzgsMzE5MzQsMzE5MjMsMzI0NjMsMjAxMTcsMzU2ODYsMjYy''@;'; put 'put ''MjMsMzkwNDgsMzg3NDUsMjI2NTksMjU5NjQsMzgyMzYsMjQ0NTIsMzAxNTMsMzg3NDIsMzE0NTUsMzE0NTQsMjA5MjgsMjg4NDcsMzEzODQsMjU1NzgsMzEzNTAsMzI0MTYsMjk1OTAsMzg4OTMsMjAwMzcsMjg3OTIsMjAwNjEsMzcyMDIsMjE0MTcsMjU5MzcsMjYwODcsMzMyNzYsMzMyODUs''@;'; put 'put ''MjE2NDYsMjM2MDEsMzAxMDYsMzg4MTYsMjUzMDQsMjk0MDEsMzAxNDEsMjM2MjEsMzk1NDUsMzM3MzgsMjM2MTYsMjE2MzIsMzA2OTcsMjAwMzAsMjc4MjIsMzI4NTgsMjUyOTgsMjU0NTQsMjQwNDAsMjA4NTUsMzYzMTcsMzYzODIsMzgxOTEsMjA0NjUsMjE0NzcsMjQ4MDcsMjg4NDQsMjEw''@;'; put 'put ''OTUsMjU0MjQsNDA1MTUsMjMwNzEsMjA1MTgsMzA1MTksMjEzNjcsMzI0ODIsMjU3MzMsMjU4OTksMjUyMjUsMjU0OTYsMjA1MDAsMjkyMzcsMzUyNzMsMjA5MTUsMzU3NzYsMzI0NzcsMjIzNDMsMzM3NDAsMzgwNTUsMjA4OTEsMjE1MzEsMjM4MDMsMzIyNTEsMzIyNTIsMzIyNTMsMzIyNTQs''@;'; put 'put ''MzIyNTUsMzIyNTYsMzIyNTcsMzIyNTgsMzIyNTksMzIyNjAsMzIyNjEsMzIyNjIsMzIyNjMsMzIyNjQsMzIyNjUsMzIyNjYsMzIyNjcsMzIyNjgsMzIyNjksMzIyNzAsMzIyNzEsMzIyNzIsMzIyNzMsMzIyNzQsMzIyNzUsMzIyNzYsMzIyNzcsMzIyNzgsMzIyNzksMzIyODAsMzIyODEsMzIy''@;'; put 'put ''ODIsMzIyODMsMzIyODQsMzIyODUsMzIyODYsMzIyODcsMzIyODgsMzIyODksMzIyOTAsMzIyOTEsMzIyOTIsMzIyOTMsMzIyOTQsMzIyOTUsMzIyOTYsMzIyOTcsMzIyOTgsMzIyOTksMzIzMDAsMzIzMDEsMzIzMDIsMzIzMDMsMzIzMDQsMzIzMDUsMzIzMDYsMzIzMDcsMzIzMDgsMzIzMDks''@;'; put 'put ''MzIzMTAsMzIzMTEsMzIzMTIsMzIzMTMsMzIzMTQsMzIzMTYsMzIzMTcsMzIzMTgsMzIzMTksMzIzMjAsMzIzMjIsMzIzMjMsMzIzMjQsMzIzMjUsMzIzMjYsMzIzMjgsMzIzMjksMzIzMzAsMzIzMzEsMzIzMzIsMzIzMzMsMzIzMzQsMzIzMzUsMzIzMzYsMzIzMzcsMzIzMzgsMzIzMzksMzIz''@;'; put 'put ''NDAsMzIzNDEsMzIzNDIsMzIzNDMsMzIzNDQsMzIzNDUsMzIzNDYsMzIzNDcsMzIzNDgsMzIzNDksMjA0MjYsMzE0NTksMjc5OTQsMzcwODksMzk1NjcsMjE4ODgsMjE2NTQsMjEzNDUsMjE2NzksMjQzMjAsMjU1NzcsMjY5OTksMjA5NzUsMjQ5MzYsMjEwMDIsMjI1NzAsMjEyMDgsMjIzNTAs''@;'; put 'put ''MzA3MzMsMzA0NzUsMjQyNDcsMjQ5NTEsMzE5NjgsMjUxNzksMjUyMzksMjAxMzAsMjg4MjEsMzI3NzEsMjUzMzUsMjg5MDAsMzg3NTIsMjIzOTEsMzM0OTksMjY2MDcsMjY4NjksMzA5MzMsMzkwNjMsMzExODUsMjI3NzEsMjE2ODMsMjE0ODcsMjgyMTIsMjA4MTEsMjEwNTEsMjM0NTgsMzU4''@;'; put 'put ''MzgsMzI5NDMsMjE4MjcsMjI0MzgsMjQ2OTEsMjIzNTMsMjE1NDksMzEzNTQsMjQ2NTYsMjMzODAsMjU1MTEsMjUyNDgsMjE0NzUsMjUxODcsMjM0OTUsMjY1NDMsMjE3NDEsMzEzOTEsMzM1MTAsMzcyMzksMjQyMTEsMzUwNDQsMjI4NDAsMjI0NDYsMjUzNTgsMzYzMjgsMzMwMDcsMjIzNTks''@;'; put 'put ''MzE2MDcsMjAzOTMsMjQ1NTUsMjM0ODUsMjc0NTQsMjEyODEsMzE1NjgsMjkzNzgsMjY2OTQsMzA3MTksMzA1MTgsMjYxMDMsMjA5MTcsMjAxMTEsMzA0MjAsMjM3NDMsMzEzOTcsMzM5MDksMjI4NjIsMzk3NDUsMjA2MDgsMzIzNTAsMzIzNTEsMzIzNTIsMzIzNTMsMzIzNTQsMzIzNTUsMzIz''@;'; put 'put ''NTYsMzIzNTcsMzIzNTgsMzIzNTksMzIzNjAsMzIzNjEsMzIzNjIsMzIzNjMsMzIzNjQsMzIzNjUsMzIzNjYsMzIzNjcsMzIzNjgsMzIzNjksMzIzNzAsMzIzNzEsMzIzNzIsMzIzNzMsMzIzNzQsMzIzNzUsMzIzNzYsMzIzNzcsMzIzNzgsMzIzNzksMzIzODAsMzIzODEsMzIzODIsMzIzODMs''@;'; put 'put ''MzIzODQsMzIzODUsMzIzODcsMzIzODgsMzIzODksMzIzOTAsMzIzOTEsMzIzOTIsMzIzOTMsMzIzOTQsMzIzOTUsMzIzOTYsMzIzOTcsMzIzOTgsMzIzOTksMzI0MDAsMzI0MDEsMzI0MDIsMzI0MDMsMzI0MDQsMzI0MDUsMzI0MDYsMzI0MDcsMzI0MDgsMzI0MDksMzI0MTAsMzI0MTIsMzI0''@;'; put 'put ''MTMsMzI0MTQsMzI0MzAsMzI0MzYsMzI0NDMsMzI0NDQsMzI0NzAsMzI0ODQsMzI0OTIsMzI1MDUsMzI1MjIsMzI1MjgsMzI1NDIsMzI1NjcsMzI1NjksMzI1NzEsMzI1NzIsMzI1NzMsMzI1NzQsMzI1NzUsMzI1NzYsMzI1NzcsMzI1NzksMzI1ODIsMzI1ODMsMzI1ODQsMzI1ODUsMzI1ODYs''@;'; put 'put ''MzI1ODcsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTEsMzI1OTQsMzI1OTUsMzkzMDQsMjQ4NzEsMjgyOTEsMjIzNzIsMjYxMTgsMjU0MTQsMjIyNTYsMjUzMjQsMjUxOTMsMjQyNzUsMzg0MjAsMjI0MDMsMjUyODksMjE4OTUsMzQ1OTMsMzMwOTgsMzY3NzEsMjE4NjIsMzM3MTMsMjY0NjksMzYx''@;'; put 'put ''ODIsMzQwMTMsMjMxNDYsMjY2MzksMjUzMTgsMzE3MjYsMzg0MTcsMjA4NDgsMjg1NzIsMzU4ODgsMjU1OTcsMzUyNzIsMjUwNDIsMzI1MTgsMjg4NjYsMjgzODksMjk3MDEsMjcwMjgsMjk0MzYsMjQyNjYsMzcwNzAsMjYzOTEsMjgwMTAsMjU0MzgsMjExNzEsMjkyODIsMzI3NjksMjAzMzIs''@;'; put 'put ''MjMwMTMsMzcyMjYsMjg4ODksMjgwNjEsMjEyMDIsMjAwNDgsMzg2NDcsMzgyNTMsMzQxNzQsMzA5MjIsMzIwNDcsMjA3NjksMjI0MTgsMjU3OTQsMzI5MDcsMzE4NjcsMjc4ODIsMjY4NjUsMjY5NzQsMjA5MTksMjE0MDAsMjY3OTIsMjkzMTMsNDA2NTQsMzE3MjksMjk0MzIsMzExNjMsMjg0''@;'; put 'put ''MzUsMjk3MDIsMjY0NDYsMzczMjQsNDAxMDAsMzEwMzYsMzM2NzMsMzM2MjAsMjE1MTksMjY2NDcsMjAwMjksMjEzODUsMjExNjksMzA3ODIsMjEzODIsMjEwMzMsMjA2MTYsMjAzNjMsMjA0MzIsMzI1OTgsMzI2MDEsMzI2MDMsMzI2MDQsMzI2MDUsMzI2MDYsMzI2MDgsMzI2MTEsMzI2MTIs''@;'; put 'put ''MzI2MTMsMzI2MTQsMzI2MTUsMzI2MTksMzI2MjAsMzI2MjEsMzI2MjMsMzI2MjQsMzI2MjcsMzI2MjksMzI2MzAsMzI2MzEsMzI2MzIsMzI2MzQsMzI2MzUsMzI2MzYsMzI2MzcsMzI2MzksMzI2NDAsMzI2NDIsMzI2NDMsMzI2NDQsMzI2NDUsMzI2NDYsMzI2NDcsMzI2NDgsMzI2NDksMzI2''@;'; put 'put ''NTEsMzI2NTMsMzI2NTUsMzI2NTYsMzI2NTcsMzI2NTgsMzI2NTksMzI2NjEsMzI2NjIsMzI2NjMsMzI2NjQsMzI2NjUsMzI2NjcsMzI2NjgsMzI2NzIsMzI2NzQsMzI2NzUsMzI2NzcsMzI2NzgsMzI2ODAsMzI2ODEsMzI2ODIsMzI2ODMsMzI2ODQsMzI2ODUsMzI2ODYsMzI2ODksMzI2OTEs''@;'; put 'put ''MzI2OTIsMzI2OTMsMzI2OTQsMzI2OTUsMzI2OTgsMzI2OTksMzI3MDIsMzI3MDQsMzI3MDYsMzI3MDcsMzI3MDgsMzI3MTAsMzI3MTEsMzI3MTIsMzI3MTMsMzI3MTUsMzI3MTcsMzI3MTksMzI3MjAsMzI3MjEsMzI3MjIsMzI3MjMsMzI3MjYsMzI3MjcsMzI3MjksMzI3MzAsMzI3MzEsMzI3''@;'; put 'put ''MzIsMzI3MzMsMzI3MzQsMzI3MzgsMzI3MzksMzAxNzgsMzE0MzUsMzE4OTAsMjc4MTMsMzg1ODIsMjExNDcsMjk4MjcsMjE3MzcsMjA0NTcsMzI4NTIsMzM3MTQsMzY4MzAsMzgyNTYsMjQyNjUsMjQ2MDQsMjgwNjMsMjQwODgsMjU5NDcsMzMwODAsMzgxNDIsMjQ2NTEsMjg4NjAsMzI0NTEs''@;'; put 'put ''MzE5MTgsMjA5MzcsMjY3NTMsMzE5MjEsMzMzOTEsMjAwMDQsMzY3NDIsMzczMjcsMjYyMzgsMjAxNDIsMzU4NDUsMjU3NjksMzI4NDIsMjA2OTgsMzAxMDMsMjkxMzQsMjM1MjUsMzY3OTcsMjg1MTgsMjAxMDIsMjU3MzAsMzgyNDMsMjQyNzgsMjYwMDksMjEwMTUsMzUwMTAsMjg4NzIsMjEx''@;'; put 'put ''NTUsMjk0NTQsMjk3NDcsMjY1MTksMzA5NjcsMzg2NzgsMjAwMjAsMzcwNTEsNDAxNTgsMjgxMDcsMjA5NTUsMzYxNjEsMjE1MzMsMjUyOTQsMjk2MTgsMzM3NzcsMzg2NDYsNDA4MzYsMzgwODMsMjAyNzgsMzI2NjYsMjA5NDAsMjg3ODksMzg1MTcsMjM3MjUsMzkwNDYsMjE0NzgsMjAxOTYs''@;'; put 'put ''MjgzMTYsMjk3MDUsMjcwNjAsMzA4MjcsMzkzMTEsMzAwNDEsMjEwMTYsMzAyNDQsMjc5NjksMjY2MTEsMjA4NDUsNDA4NTcsMzI4NDMsMjE2NTcsMzE1NDgsMzE0MjMsMzI3NDAsMzI3NDMsMzI3NDQsMzI3NDYsMzI3NDcsMzI3NDgsMzI3NDksMzI3NTEsMzI3NTQsMzI3NTYsMzI3NTcsMzI3''@;'; put 'put ''NTgsMzI3NTksMzI3NjAsMzI3NjEsMzI3NjIsMzI3NjUsMzI3NjYsMzI3NjcsMzI3NzAsMzI3NzUsMzI3NzYsMzI3NzcsMzI3NzgsMzI3ODIsMzI3ODMsMzI3ODUsMzI3ODcsMzI3OTQsMzI3OTUsMzI3OTcsMzI3OTgsMzI3OTksMzI4MDEsMzI4MDMsMzI4MDQsMzI4MTEsMzI4MTIsMzI4MTMs''@;'; put 'put ''MzI4MTQsMzI4MTUsMzI4MTYsMzI4MTgsMzI4MjAsMzI4MjUsMzI4MjYsMzI4MjgsMzI4MzAsMzI4MzIsMzI4MzMsMzI4MzYsMzI4MzcsMzI4MzksMzI4NDAsMzI4NDEsMzI4NDYsMzI4NDcsMzI4NDgsMzI4NDksMzI4NTEsMzI4NTMsMzI4NTQsMzI4NTUsMzI4NTcsMzI4NTksMzI4NjAsMzI4''@;'; put 'put ''NjEsMzI4NjIsMzI4NjMsMzI4NjQsMzI4NjUsMzI4NjYsMzI4NjcsMzI4NjgsMzI4NjksMzI4NzAsMzI4NzEsMzI4NzIsMzI4NzUsMzI4NzYsMzI4NzcsMzI4NzgsMzI4NzksMzI4ODAsMzI4ODIsMzI4ODMsMzI4ODQsMzI4ODUsMzI4ODYsMzI4ODcsMzI4ODgsMzI4ODksMzI4OTAsMzI4OTEs''@;'; put 'put ''MzI4OTIsMzI4OTMsMzg1MzQsMjI0MDQsMjUzMTQsMzg0NzEsMjcwMDQsMjMwNDQsMjU2MDIsMzE2OTksMjg0MzEsMzg0NzUsMzM0NDYsMjEzNDYsMzkwNDUsMjQyMDgsMjg4MDksMjU1MjMsMjEzNDgsMzQzODMsNDAwNjUsNDA1OTUsMzA4NjAsMzg3MDYsMzYzMzUsMzYxNjIsNDA1NzUsMjg1''@;'; put 'put ''MTAsMzExMDgsMjQ0MDUsMzg0NzAsMjUxMzQsMzk1NDAsMjE1MjUsMzgxMDksMjAzODcsMjYwNTMsMjM2NTMsMjM2NDksMzI1MzMsMzQzODUsMjc2OTUsMjQ0NTksMjk1NzUsMjgzODgsMzI1MTEsMjM3ODIsMjUzNzEsMjM0MDIsMjgzOTAsMjEzNjUsMjAwODEsMjU1MDQsMzAwNTMsMjUyNDks''@;'; put 'put ''MzY3MTgsMjAyNjIsMjAxNzcsMjc4MTQsMzI0MzgsMzU3NzAsMzM4MjEsMzQ3NDYsMzI1OTksMzY5MjMsMzgxNzksMzE2NTcsMzk1ODUsMzUwNjQsMzM4NTMsMjc5MzEsMzk1NTgsMzI0NzYsMjI5MjAsNDA2MzUsMjk1OTUsMzA3MjEsMzQ0MzQsMzk1MzIsMzk1NTQsMjIwNDMsMjE1MjcsMjI0''@;'; put 'put ''NzUsMjAwODAsNDA2MTQsMjEzMzQsMzY4MDgsMzMwMzMsMzA2MTAsMzkzMTQsMzQ1NDIsMjgzODUsMzQwNjcsMjYzNjQsMjQ5MzAsMjg0NTksMzI4OTQsMzI4OTcsMzI4OTgsMzI5MDEsMzI5MDQsMzI5MDYsMzI5MDksMzI5MTAsMzI5MTEsMzI5MTIsMzI5MTMsMzI5MTQsMzI5MTYsMzI5MTcs''@;'; put 'put ''MzI5MTksMzI5MjEsMzI5MjYsMzI5MzEsMzI5MzQsMzI5MzUsMzI5MzYsMzI5NDAsMzI5NDQsMzI5NDcsMzI5NDksMzI5NTAsMzI5NTIsMzI5NTMsMzI5NTUsMzI5NjUsMzI5NjcsMzI5NjgsMzI5NjksMzI5NzAsMzI5NzEsMzI5NzUsMzI5NzYsMzI5NzcsMzI5NzgsMzI5NzksMzI5ODAsMzI5''@;'; put 'put ''ODEsMzI5ODQsMzI5OTEsMzI5OTIsMzI5OTQsMzI5OTUsMzI5OTgsMzMwMDYsMzMwMTMsMzMwMTUsMzMwMTcsMzMwMTksMzMwMjIsMzMwMjMsMzMwMjQsMzMwMjUsMzMwMjcsMzMwMjgsMzMwMjksMzMwMzEsMzMwMzIsMzMwMzUsMzMwMzYsMzMwNDUsMzMwNDcsMzMwNDksMzMwNTEsMzMwNTIs''@;'; put 'put ''MzMwNTMsMzMwNTUsMzMwNTYsMzMwNTcsMzMwNTgsMzMwNTksMzMwNjAsMzMwNjEsMzMwNjIsMzMwNjMsMzMwNjQsMzMwNjUsMzMwNjYsMzMwNjcsMzMwNjksMzMwNzAsMzMwNzIsMzMwNzUsMzMwNzYsMzMwNzcsMzMwNzksMzMwODEsMzMwODIsMzMwODMsMzMwODQsMzMwODUsMzMwODcsMzU4''@;'; put 'put ''ODEsMzM0MjYsMzM1NzksMzA0NTAsMjc2NjcsMjQ1MzcsMzM3MjUsMjk0ODMsMzM1NDEsMzgxNzAsMjc2MTEsMzA2ODMsMzgwODYsMjEzNTksMzM1MzgsMjA4ODIsMjQxMjUsMzU5ODAsMzYxNTIsMjAwNDAsMjk2MTEsMjY1MjIsMjY3NTcsMzcyMzgsMzg2NjUsMjkwMjgsMjc4MDksMzA0NzMs''@;'; put 'put ''MjMxODYsMzgyMDksMjc1OTksMzI2NTQsMjYxNTEsMjM1MDQsMjI5NjksMjMxOTQsMzgzNzYsMzgzOTEsMjAyMDQsMzM4MDQsMzM5NDUsMjczMDgsMzA0MzEsMzgxOTIsMjk0NjcsMjY3OTAsMjMzOTEsMzA1MTEsMzcyNzQsMzg3NTMsMzE5NjQsMzY4NTUsMzU4NjgsMjQzNTcsMzE4NTksMzEx''@;'; put 'put ''OTIsMzUyNjksMjc4NTIsMzQ1ODgsMjM0OTQsMjQxMzAsMjY4MjUsMzA0OTYsMzI1MDEsMjA4ODUsMjA4MTMsMjExOTMsMjMwODEsMzI1MTcsMzg3NTQsMzM0OTUsMjU1NTEsMzA1OTYsMzQyNTYsMzExODYsMjgyMTgsMjQyMTcsMjI5MzcsMzQwNjUsMjg3ODEsMjc2NjUsMjUyNzksMzAzOTks''@;'; put 'put ''MjU5MzUsMjQ3NTEsMzgzOTcsMjYxMjYsMzQ3MTksNDA0ODMsMzgxMjUsMjE1MTcsMjE2MjksMzU4ODQsMjU3MjAsMzMwODgsMzMwODksMzMwOTAsMzMwOTEsMzMwOTIsMzMwOTMsMzMwOTUsMzMwOTcsMzMxMDEsMzMxMDIsMzMxMDMsMzMxMDYsMzMxMTAsMzMxMTEsMzMxMTIsMzMxMTUsMzMx''@;'; put 'put ''MTYsMzMxMTcsMzMxMTgsMzMxMTksMzMxMjEsMzMxMjIsMzMxMjMsMzMxMjQsMzMxMjYsMzMxMjgsMzMxMzAsMzMxMzEsMzMxMzIsMzMxMzUsMzMxMzgsMzMxMzksMzMxNDEsMzMxNDIsMzMxNDMsMzMxNDQsMzMxNTMsMzMxNTUsMzMxNTYsMzMxNTcsMzMxNTgsMzMxNTksMzMxNjEsMzMxNjMs''@;'; put 'put ''MzMxNjQsMzMxNjUsMzMxNjYsMzMxNjgsMzMxNzAsMzMxNzEsMzMxNzIsMzMxNzMsMzMxNzQsMzMxNzUsMzMxNzcsMzMxNzgsMzMxODIsMzMxODMsMzMxODQsMzMxODUsMzMxODYsMzMxODgsMzMxODksMzMxOTEsMzMxOTMsMzMxOTUsMzMxOTYsMzMxOTcsMzMxOTgsMzMxOTksMzMyMDAsMzMy''@;'; put 'put ''MDEsMzMyMDIsMzMyMDQsMzMyMDUsMzMyMDYsMzMyMDcsMzMyMDgsMzMyMDksMzMyMTIsMzMyMTMsMzMyMTQsMzMyMTUsMzMyMjAsMzMyMjEsMzMyMjMsMzMyMjQsMzMyMjUsMzMyMjcsMzMyMjksMzMyMzAsMzMyMzEsMzMyMzIsMzMyMzMsMzMyMzQsMzMyMzUsMjU3MjEsMzQzMjEsMjcxNjks''@;'; put 'put ''MzMxODAsMzA5NTIsMjU3MDUsMzk3NjQsMjUyNzMsMjY0MTEsMzM3MDcsMjI2OTYsNDA2NjQsMjc4MTksMjg0NDgsMjM1MTgsMzg0NzYsMzU4NTEsMjkyNzksMjY1NzYsMjUyODcsMjkyODEsMjAxMzcsMjI5ODIsMjc1OTcsMjI2NzUsMjYyODYsMjQxNDksMjEyMTUsMjQ5MTcsMjY0MDgsMzA0''@;'; put 'put ''NDYsMzA1NjYsMjkyODcsMzEzMDIsMjUzNDMsMjE3MzgsMjE1ODQsMzgwNDgsMzcwMjcsMjMwNjgsMzI0MzUsMjc2NzAsMjAwMzUsMjI5MDIsMzI3ODQsMjI4NTYsMjEzMzUsMzAwMDcsMzg1OTAsMjIyMTgsMjUzNzYsMzMwNDEsMjQ3MDAsMzgzOTMsMjgxMTgsMjE2MDIsMzkyOTcsMjA4Njks''@;'; put 'put ''MjMyNzMsMzMwMjEsMjI5NTgsMzg2NzUsMjA1MjIsMjc4NzcsMjM2MTIsMjUzMTEsMjAzMjAsMjEzMTEsMzMxNDcsMzY4NzAsMjgzNDYsMzQwOTEsMjUyODgsMjQxODAsMzA5MTAsMjU3ODEsMjU0NjcsMjQ1NjUsMjMwNjQsMzcyNDcsNDA0NzksMjM2MTUsMjU0MjMsMzI4MzQsMjM0MjEsMjE4''@;'; put 'put ''NzAsMzgyMTgsMzgyMjEsMjgwMzcsMjQ3NDQsMjY1OTIsMjk0MDYsMjA5NTcsMjM0MjUsMzMyMzYsMzMyMzcsMzMyMzgsMzMyMzksMzMyNDAsMzMyNDEsMzMyNDIsMzMyNDMsMzMyNDQsMzMyNDUsMzMyNDYsMzMyNDcsMzMyNDgsMzMyNDksMzMyNTAsMzMyNTIsMzMyNTMsMzMyNTQsMzMyNTYs''@;'; put 'put ''MzMyNTcsMzMyNTksMzMyNjIsMzMyNjMsMzMyNjQsMzMyNjUsMzMyNjYsMzMyNjksMzMyNzAsMzMyNzEsMzMyNzIsMzMyNzMsMzMyNzQsMzMyNzcsMzMyNzksMzMyODMsMzMyODcsMzMyODgsMzMyODksMzMyOTAsMzMyOTEsMzMyOTQsMzMyOTUsMzMyOTcsMzMyOTksMzMzMDEsMzMzMDIsMzMz''@;'; put 'put ''MDMsMzMzMDQsMzMzMDUsMzMzMDYsMzMzMDksMzMzMTIsMzMzMTYsMzMzMTcsMzMzMTgsMzMzMTksMzMzMjEsMzMzMjYsMzMzMzAsMzMzMzgsMzMzNDAsMzMzNDEsMzMzNDMsMzMzNDQsMzMzNDUsMzMzNDYsMzMzNDcsMzMzNDksMzMzNTAsMzMzNTIsMzMzNTQsMzMzNTYsMzMzNTcsMzMzNTgs''@;'; put 'put ''MzMzNjAsMzMzNjEsMzMzNjIsMzMzNjMsMzMzNjQsMzMzNjUsMzMzNjYsMzMzNjcsMzMzNjksMzMzNzEsMzMzNzIsMzMzNzMsMzMzNzQsMzMzNzYsMzMzNzcsMzMzNzgsMzMzNzksMzMzODAsMzMzODEsMzMzODIsMzMzODMsMzMzODUsMjUzMTksMjc4NzAsMjkyNzUsMjUxOTcsMzgwNjIsMzI0''@;'; put 'put ''NDUsMzMwNDMsMjc5ODcsMjA4OTIsMjQzMjQsMjI5MDAsMjExNjIsMjQ1OTQsMjI4OTksMjYyNjIsMzQzODQsMzAxMTEsMjUzODYsMjUwNjIsMzE5ODMsMzU4MzQsMjE3MzQsMjc0MzEsNDA0ODUsMjc1NzIsMzQyNjEsMjE1ODksMjA1OTgsMjc4MTIsMjE4NjYsMzYyNzYsMjkyMjgsMjQwODUs''@;'; put 'put ''MjQ1OTcsMjk3NTAsMjUyOTMsMjU0OTAsMjkyNjAsMjQ0NzIsMjgyMjcsMjc5NjYsMjU4NTYsMjg1MDQsMzA0MjQsMzA5MjgsMzA0NjAsMzAwMzYsMjEwMjgsMjE0NjcsMjAwNTEsMjQyMjIsMjYwNDksMzI4MTAsMzI5ODIsMjUyNDMsMjE2MzgsMjEwMzIsMjg4NDYsMzQ5NTcsMzYzMDUsMjc4''@;'; put 'put ''NzMsMjE2MjQsMzI5ODYsMjI1MjEsMzUwNjAsMzYxODAsMzg1MDYsMzcxOTcsMjAzMjksMjc4MDMsMjE5NDMsMzA0MDYsMzA3NjgsMjUyNTYsMjg5MjEsMjg1NTgsMjQ0MjksMzQwMjgsMjY4NDIsMzA4NDQsMzE3MzUsMzMxOTIsMjYzNzksNDA1MjcsMjU0NDcsMzA4OTYsMjIzODMsMzA3Mzgs''@;'; put 'put ''Mzg3MTMsMjUyMDksMjUyNTksMjExMjgsMjk3NDksMjc2MDcsMzMzODYsMzMzODcsMzMzODgsMzMzODksMzMzOTMsMzMzOTcsMzMzOTgsMzMzOTksMzM0MDAsMzM0MDMsMzM0MDQsMzM0MDgsMzM0MDksMzM0MTEsMzM0MTMsMzM0MTQsMzM0MTUsMzM0MTcsMzM0MjAsMzM0MjQsMzM0MjcsMzM0''@;'; put 'put ''MjgsMzM0MjksMzM0MzAsMzM0MzQsMzM0MzUsMzM0MzgsMzM0NDAsMzM0NDIsMzM0NDMsMzM0NDcsMzM0NTgsMzM0NjEsMzM0NjIsMzM0NjYsMzM0NjcsMzM0NjgsMzM0NzEsMzM0NzIsMzM0NzQsMzM0NzUsMzM0NzcsMzM0NzgsMzM0ODEsMzM0ODgsMzM0OTQsMzM0OTcsMzM0OTgsMzM1MDEs''@;'; put 'put ''MzM1MDYsMzM1MTEsMzM1MTIsMzM1MTMsMzM1MTQsMzM1MTYsMzM1MTcsMzM1MTgsMzM1MjAsMzM1MjIsMzM1MjMsMzM1MjUsMzM1MjYsMzM1MjgsMzM1MzAsMzM1MzIsMzM1MzMsMzM1MzQsMzM1MzUsMzM1MzYsMzM1NDYsMzM1NDcsMzM1NDksMzM1NTIsMzM1NTQsMzM1NTUsMzM1NTgsMzM1''@;'; put 'put ''NjAsMzM1NjEsMzM1NjUsMzM1NjYsMzM1NjcsMzM1NjgsMzM1NjksMzM1NzAsMzM1NzEsMzM1NzIsMzM1NzMsMzM1NzQsMzM1NzcsMzM1NzgsMzM1ODIsMzM1ODQsMzM1ODYsMzM1OTEsMzM1OTUsMzM1OTcsMjE4NjAsMzMwODYsMzAxMzAsMzAzODIsMjEzMDUsMzAxNzQsMjA3MzEsMjM2MTcs''@;'; put 'put ''MzU2OTIsMzE2ODcsMjA1NTksMjkyNTUsMzk1NzUsMzkxMjgsMjg0MTgsMjk5MjIsMzEwODAsMjU3MzUsMzA2MjksMjUzNDAsMzkwNTcsMzYxMzksMjE2OTcsMzI4NTYsMjAwNTAsMjIzNzgsMzM1MjksMzM4MDUsMjQxNzksMjA5NzMsMjk5NDIsMzU3ODAsMjM2MzEsMjIzNjksMjc5MDAsMzkw''@;'; put 'put ''NDcsMjMxMTAsMzA3NzIsMzk3NDgsMzY4NDMsMzE4OTMsMjEwNzgsMjUxNjksMzgxMzgsMjAxNjYsMzM2NzAsMzM4ODksMzM3NjksMzM5NzAsMjI0ODQsMjY0MjAsMjIyNzUsMjYyMjIsMjgwMDYsMzU4ODksMjYzMzMsMjg2ODksMjYzOTksMjc0NTAsMjY2NDYsMjUxMTQsMjI5NzEsMTk5NzEs''@;'; put 'put ''MjA5MzIsMjg0MjIsMjY1NzgsMjc3OTEsMjA4NTQsMjY4MjcsMjI4NTUsMjc0OTUsMzAwNTQsMjM4MjIsMzMwNDAsNDA3ODQsMjYwNzEsMzEwNDgsMzEwNDEsMzk1NjksMzYyMTUsMjM2ODIsMjAwNjIsMjAyMjUsMjE1NTEsMjI4NjUsMzA3MzIsMjIxMjAsMjc2NjgsMzY4MDQsMjQzMjMsMjc3''@;'; put 'put ''NzMsMjc4NzUsMzU3NTUsMjU0ODgsMzM1OTgsMzM1OTksMzM2MDEsMzM2MDIsMzM2MDQsMzM2MDUsMzM2MDgsMzM2MTAsMzM2MTEsMzM2MTIsMzM2MTMsMzM2MTQsMzM2MTksMzM2MjEsMzM2MjIsMzM2MjMsMzM2MjQsMzM2MjUsMzM2MjksMzM2MzQsMzM2NDgsMzM2NDksMzM2NTAsMzM2NTEs''@;'; put 'put ''MzM2NTIsMzM2NTMsMzM2NTQsMzM2NTcsMzM2NTgsMzM2NjIsMzM2NjMsMzM2NjQsMzM2NjUsMzM2NjYsMzM2NjcsMzM2NjgsMzM2NzEsMzM2NzIsMzM2NzQsMzM2NzUsMzM2NzYsMzM2NzcsMzM2NzksMzM2ODAsMzM2ODEsMzM2ODQsMzM2ODUsMzM2ODYsMzM2ODcsMzM2ODksMzM2OTAsMzM2''@;'; put 'put ''OTMsMzM2OTUsMzM2OTcsMzM2OTgsMzM2OTksMzM3MDAsMzM3MDEsMzM3MDIsMzM3MDMsMzM3MDgsMzM3MDksMzM3MTAsMzM3MTEsMzM3MTcsMzM3MjMsMzM3MjYsMzM3MjcsMzM3MzAsMzM3MzEsMzM3MzIsMzM3MzQsMzM3MzYsMzM3MzcsMzM3MzksMzM3NDEsMzM3NDIsMzM3NDQsMzM3NDUs''@;'; put 'put ''MzM3NDYsMzM3NDcsMzM3NDksMzM3NTEsMzM3NTMsMzM3NTQsMzM3NTUsMzM3NTgsMzM3NjIsMzM3NjMsMzM3NjQsMzM3NjYsMzM3NjcsMzM3NjgsMzM3NzEsMzM3NzIsMzM3NzMsMjQ2ODgsMjc5NjUsMjkzMDEsMjUxOTAsMzgwMzAsMzgwODUsMjEzMTUsMzY4MDEsMzE2MTQsMjAxOTEsMzU4''@;'; put 'put ''NzgsMjAwOTQsNDA2NjAsMzgwNjUsMzgwNjcsMjEwNjksMjg1MDgsMzY5NjMsMjc5NzMsMzU4OTIsMjI1NDUsMjM4ODQsMjc0MjQsMjc0NjUsMjY1MzgsMjE1OTUsMzMxMDgsMzI2NTIsMjI2ODEsMzQxMDMsMjQzNzgsMjUyNTAsMjcyMDcsMzgyMDEsMjU5NzAsMjQ3MDgsMjY3MjUsMzA2MzEs''@;'; put 'put ''MjAwNTIsMjAzOTIsMjQwMzksMzg4MDgsMjU3NzIsMzI3MjgsMjM3ODksMjA0MzEsMzEzNzMsMjA5OTksMzM1NDAsMTk5ODgsMjQ2MjMsMzEzNjMsMzgwNTQsMjA0MDUsMjAxNDYsMzEyMDYsMjk3NDgsMjEyMjAsMzM0NjUsMjU4MTAsMzExNjUsMjM1MTcsMjc3NzcsMzg3MzgsMzY3MzEsMjc2''@;'; put 'put ''ODIsMjA1NDIsMjEzNzUsMjgxNjUsMjU4MDYsMjYyMjgsMjc2OTYsMjQ3NzMsMzkwMzEsMzU4MzEsMjQxOTgsMjk3NTYsMzEzNTEsMzExNzksMTk5OTIsMzcwNDEsMjk2OTksMjc3MTQsMjIyMzQsMzcxOTUsMjc4NDUsMzYyMzUsMjEzMDYsMzQ1MDIsMjYzNTQsMzY1MjcsMjM2MjQsMzk1Mzcs''@;'; put 'put ''MjgxOTIsMzM3NzQsMzM3NzUsMzM3NzksMzM3ODAsMzM3ODEsMzM3ODIsMzM3ODMsMzM3ODYsMzM3ODcsMzM3ODgsMzM3OTAsMzM3OTEsMzM3OTIsMzM3OTQsMzM3OTcsMzM3OTksMzM4MDAsMzM4MDEsMzM4MDIsMzM4MDgsMzM4MTAsMzM4MTEsMzM4MTIsMzM4MTMsMzM4MTQsMzM4MTUsMzM4''@;'; put 'put ''MTcsMzM4MTgsMzM4MTksMzM4MjIsMzM4MjMsMzM4MjQsMzM4MjUsMzM4MjYsMzM4MjcsMzM4MzMsMzM4MzQsMzM4MzUsMzM4MzYsMzM4MzcsMzM4MzgsMzM4MzksMzM4NDAsMzM4NDIsMzM4NDMsMzM4NDQsMzM4NDUsMzM4NDYsMzM4NDcsMzM4NDksMzM4NTAsMzM4NTEsMzM4NTQsMzM4NTUs''@;'; put 'put ''MzM4NTYsMzM4NTcsMzM4NTgsMzM4NTksMzM4NjAsMzM4NjEsMzM4NjMsMzM4NjQsMzM4NjUsMzM4NjYsMzM4NjcsMzM4NjgsMzM4NjksMzM4NzAsMzM4NzEsMzM4NzIsMzM4NzQsMzM4NzUsMzM4NzYsMzM4NzcsMzM4NzgsMzM4ODAsMzM4ODUsMzM4ODYsMzM4ODcsMzM4ODgsMzM4OTAsMzM4''@;'; put 'put ''OTIsMzM4OTMsMzM4OTQsMzM4OTUsMzM4OTYsMzM4OTgsMzM5MDIsMzM5MDMsMzM5MDQsMzM5MDYsMzM5MDgsMzM5MTEsMzM5MTMsMzM5MTUsMzM5MTYsMjE0NjIsMjMwOTQsNDA4NDMsMzYyNTksMjE0MzUsMjIyODAsMzkwNzksMjY0MzUsMzcyNzUsMjc4NDksMjA4NDAsMzAxNTQsMjUzMzEs''@;'; put 'put ''MjkzNTYsMjEwNDgsMjExNDksMzI1NzAsMjg4MjAsMzAyNjQsMjEzNjQsNDA1MjIsMjcwNjMsMzA4MzAsMzg1OTIsMzUwMzMsMzI2NzYsMjg5ODIsMjkxMjMsMjA4NzMsMjY1NzksMjk5MjQsMjI3NTYsMjU4ODAsMjIxOTksMzU3NTMsMzkyODYsMjUyMDAsMzI0NjksMjQ4MjUsMjg5MDksMjI3''@;'; put 'put ''NjQsMjAxNjEsMjAxNTQsMjQ1MjUsMzg4ODcsMjAyMTksMzU3NDgsMjA5OTUsMjI5MjIsMzI0MjcsMjUxNzIsMjAxNzMsMjYwODUsMjUxMDIsMzM1OTIsMzM5OTMsMzM2MzUsMzQ3MDEsMjkwNzYsMjgzNDIsMjM0ODEsMzI0NjYsMjA4ODcsMjU1NDUsMjY1ODAsMzI5MDUsMzM1OTMsMzQ4Mzcs''@;'; put 'put ''MjA3NTQsMjM0MTgsMjI5MTQsMzY3ODUsMjAwODMsMjc3NDEsMjA4MzcsMzUxMDksMzY3MTksMzg0NDYsMzQxMjIsMjk3OTAsMzgxNjAsMzgzODQsMjgwNzAsMzM1MDksMjQzNjksMjU3NDYsMjc5MjIsMzM4MzIsMzMxMzQsNDAxMzEsMjI2MjIsMzYxODcsMTk5NzcsMjE0NDEsMzM5MTcsMzM5''@;'; put 'put ''MTgsMzM5MTksMzM5MjAsMzM5MjEsMzM5MjMsMzM5MjQsMzM5MjUsMzM5MjYsMzM5MzAsMzM5MzMsMzM5MzUsMzM5MzYsMzM5MzcsMzM5MzgsMzM5MzksMzM5NDAsMzM5NDEsMzM5NDIsMzM5NDQsMzM5NDYsMzM5NDcsMzM5NDksMzM5NTAsMzM5NTEsMzM5NTIsMzM5NTQsMzM5NTUsMzM5NTYs''@;'; put 'put ''MzM5NTcsMzM5NTgsMzM5NTksMzM5NjAsMzM5NjEsMzM5NjIsMzM5NjMsMzM5NjQsMzM5NjUsMzM5NjYsMzM5NjgsMzM5NjksMzM5NzEsMzM5NzMsMzM5NzQsMzM5NzUsMzM5NzksMzM5ODAsMzM5ODIsMzM5ODQsMzM5ODYsMzM5ODcsMzM5ODksMzM5OTAsMzM5OTEsMzM5OTIsMzM5OTUsMzM5''@;'; put 'put ''OTYsMzM5OTgsMzM5OTksMzQwMDIsMzQwMDQsMzQwMDUsMzQwMDcsMzQwMDgsMzQwMDksMzQwMTAsMzQwMTEsMzQwMTIsMzQwMTQsMzQwMTcsMzQwMTgsMzQwMjAsMzQwMjMsMzQwMjQsMzQwMjUsMzQwMjYsMzQwMjcsMzQwMjksMzQwMzAsMzQwMzEsMzQwMzMsMzQwMzQsMzQwMzUsMzQwMzYs''@;'; put 'put ''MzQwMzcsMzQwMzgsMzQwMzksMzQwNDAsMzQwNDEsMzQwNDIsMzQwNDMsMzQwNDUsMzQwNDYsMzQwNDgsMzQwNDksMzQwNTAsMjAyNTQsMjU5NTUsMjY3MDUsMjE5NzEsMjAwMDcsMjU2MjAsMzk1NzgsMjUxOTUsMjMyMzQsMjk3OTEsMzMzOTQsMjgwNzMsMjY4NjIsMjA3MTEsMzM2NzgsMzA3''@;'; put 'put ''MjIsMjY0MzIsMjEwNDksMjc4MDEsMzI0MzMsMjA2NjcsMjE4NjEsMjkwMjIsMzE1NzksMjYxOTQsMjk2NDIsMzM1MTUsMjY0NDEsMjM2NjUsMjEwMjQsMjkwNTMsMzQ5MjMsMzgzNzgsMzg0ODUsMjU3OTcsMzYxOTMsMzMyMDMsMjE4OTIsMjc3MzMsMjUxNTksMzI1NTgsMjI2NzQsMjAyNjAs''@;'; put 'put ''MjE4MzAsMzYxNzUsMjYxODgsMTk5NzgsMjM1NzgsMzUwNTksMjY3ODYsMjU0MjIsMzEyNDUsMjg5MDMsMzM0MjEsMjEyNDIsMzg5MDIsMjM1NjksMjE3MzYsMzcwNDUsMzI0NjEsMjI4ODIsMzYxNzAsMzQ1MDMsMzMyOTIsMzMyOTMsMzYxOTgsMjU2NjgsMjM1NTYsMjQ5MTMsMjgwNDEsMzEw''@;'; put 'put ''MzgsMzU3NzQsMzA3NzUsMzAwMDMsMjE2MjcsMjAyODAsMzY1MjMsMjgxNDUsMjMwNzIsMzI0NTMsMzEwNzAsMjc3ODQsMjM0NTcsMjMxNTgsMjk5NzgsMzI5NTgsMjQ5MTAsMjgxODMsMjI3NjgsMjk5ODMsMjk5ODksMjkyOTgsMjEzMTksMzI0OTksMzQwNTEsMzQwNTIsMzQwNTMsMzQwNTQs''@;'; put 'put ''MzQwNTUsMzQwNTYsMzQwNTcsMzQwNTgsMzQwNTksMzQwNjEsMzQwNjIsMzQwNjMsMzQwNjQsMzQwNjYsMzQwNjgsMzQwNjksMzQwNzAsMzQwNzIsMzQwNzMsMzQwNzUsMzQwNzYsMzQwNzcsMzQwNzgsMzQwODAsMzQwODIsMzQwODMsMzQwODQsMzQwODUsMzQwODYsMzQwODcsMzQwODgsMzQw''@;'; put 'put ''ODksMzQwOTAsMzQwOTMsMzQwOTQsMzQwOTUsMzQwOTYsMzQwOTcsMzQwOTgsMzQwOTksMzQxMDAsMzQxMDEsMzQxMDIsMzQxMTAsMzQxMTEsMzQxMTIsMzQxMTMsMzQxMTQsMzQxMTYsMzQxMTcsMzQxMTgsMzQxMTksMzQxMjMsMzQxMjQsMzQxMjUsMzQxMjYsMzQxMjcsMzQxMjgsMzQxMjks''@;'; put 'put ''MzQxMzAsMzQxMzEsMzQxMzIsMzQxMzMsMzQxMzUsMzQxMzYsMzQxMzgsMzQxMzksMzQxNDAsMzQxNDEsMzQxNDMsMzQxNDQsMzQxNDUsMzQxNDYsMzQxNDcsMzQxNDksMzQxNTAsMzQxNTEsMzQxNTMsMzQxNTQsMzQxNTUsMzQxNTYsMzQxNTcsMzQxNTgsMzQxNTksMzQxNjAsMzQxNjEsMzQx''@;'; put 'put ''NjMsMzQxNjUsMzQxNjYsMzQxNjcsMzQxNjgsMzQxNzIsMzQxNzMsMzQxNzUsMzQxNzYsMzQxNzcsMzA0NjUsMzA0MjcsMjEwOTcsMzI5ODgsMjIzMDcsMjQwNzIsMjI4MzMsMjk0MjIsMjYwNDUsMjgyODcsMzU3OTksMjM2MDgsMzQ0MTcsMjEzMTMsMzA3MDcsMjUzNDIsMjYxMDIsMjAxNjAs''@;'; put 'put ''MzkxMzUsMzQ0MzIsMjM0NTQsMzU3ODIsMjE0OTAsMzA2OTAsMjAzNTEsMjM2MzAsMzk1NDIsMjI5ODcsMjQzMzUsMzEwMzQsMjI3NjMsMTk5OTAsMjY2MjMsMjAxMDcsMjUzMjUsMzU0NzUsMzY4OTMsMjExODMsMjYxNTksMjE5ODAsMjIxMjQsMzY4NjYsMjAxODEsMjAzNjUsMzczMjIsMzky''@;'; put 'put ''ODAsMjc2NjMsMjQwNjYsMjQ2NDMsMjM0NjAsMzUyNzAsMzU3OTcsMjU5MTAsMjUxNjMsMzkzMTgsMjM0MzIsMjM1NTEsMjU0ODAsMjE4MDYsMjE0NjMsMzAyNDYsMjA4NjEsMzQwOTIsMjY1MzAsMjY4MDMsMjc1MzAsMjUyMzQsMzY3NTUsMjE0NjAsMzMyOTgsMjgxMTMsMzAwOTUsMjAwNzAs''@;'; put 'put ''MzYxNzQsMjM0MDgsMjkwODcsMzQyMjMsMjYyNTcsMjYzMjksMzI2MjYsMzQ1NjAsNDA2NTMsNDA3MzYsMjM2NDYsMjY0MTUsMzY4NDgsMjY2NDEsMjY0NjMsMjUxMDEsMzE0NDYsMjI2NjEsMjQyNDYsMjU5NjgsMjg0NjUsMzQxNzgsMzQxNzksMzQxODIsMzQxODQsMzQxODUsMzQxODYsMzQx''@;'; put 'put ''ODcsMzQxODgsMzQxODksMzQxOTAsMzQxOTIsMzQxOTMsMzQxOTQsMzQxOTUsMzQxOTYsMzQxOTcsMzQxOTgsMzQxOTksMzQyMDAsMzQyMDEsMzQyMDIsMzQyMDUsMzQyMDYsMzQyMDcsMzQyMDgsMzQyMDksMzQyMTAsMzQyMTEsMzQyMTMsMzQyMTQsMzQyMTUsMzQyMTcsMzQyMTksMzQyMjAs''@;'; put 'put ''MzQyMjEsMzQyMjUsMzQyMjYsMzQyMjcsMzQyMjgsMzQyMjksMzQyMzAsMzQyMzIsMzQyMzQsMzQyMzUsMzQyMzYsMzQyMzcsMzQyMzgsMzQyMzksMzQyNDAsMzQyNDIsMzQyNDMsMzQyNDQsMzQyNDUsMzQyNDYsMzQyNDcsMzQyNDgsMzQyNTAsMzQyNTEsMzQyNTIsMzQyNTMsMzQyNTQsMzQy''@;'; put 'put ''NTcsMzQyNTgsMzQyNjAsMzQyNjIsMzQyNjMsMzQyNjQsMzQyNjUsMzQyNjYsMzQyNjcsMzQyNjksMzQyNzAsMzQyNzEsMzQyNzIsMzQyNzMsMzQyNzQsMzQyNzUsMzQyNzcsMzQyNzgsMzQyNzksMzQyODAsMzQyODIsMzQyODMsMzQyODQsMzQyODUsMzQyODYsMzQyODcsMzQyODgsMzQyODks''@;'; put 'put ''MzQyOTAsMzQyOTEsMzQyOTIsMzQyOTMsMzQyOTQsMzQyOTUsMzQyOTYsMjQ2NjEsMjEwNDcsMzI3ODEsMjU2ODQsMzQ5MjgsMjk5OTMsMjQwNjksMjY2NDMsMjUzMzIsMzg2ODQsMjE0NTIsMjkyNDUsMzU4NDEsMjc3MDAsMzA1NjEsMzEyNDYsMjE1NTAsMzA2MzYsMzkwMzQsMzMzMDgsMzU4''@;'; put 'put ''MjgsMzA4MDUsMjYzODgsMjg4NjUsMjYwMzEsMjU3NDksMjIwNzAsMjQ2MDUsMzExNjksMjE0OTYsMTk5OTcsMjc1MTUsMzI5MDIsMjM1NDYsMjE5ODcsMjIyMzUsMjAyODIsMjAyODQsMzkyODIsMjQwNTEsMjY0OTQsMzI4MjQsMjQ1NzgsMzkwNDIsMzY4NjUsMjM0MzUsMzU3NzIsMzU4Mjks''@;'; put 'put ''MjU2MjgsMzMzNjgsMjU4MjIsMjIwMTMsMzM0ODcsMzcyMjEsMjA0MzksMzIwMzIsMzY4OTUsMzE5MDMsMjA3MjMsMjI2MDksMjgzMzUsMjM0ODcsMzU3ODUsMzI4OTksMzcyNDAsMzM5NDgsMzE2MzksMzQ0MjksMzg1MzksMzg1NDMsMzI0ODUsMzk2MzUsMzA4NjIsMjM2ODEsMzEzMTksMzY5''@;'; put 'put ''MzAsMzg1NjcsMzEwNzEsMjMzODUsMjU0MzksMzE0OTksMzQwMDEsMjY3OTcsMjE3NjYsMzI1NTMsMjk3MTIsMzIwMzQsMzgxNDUsMjUxNTIsMjI2MDQsMjAxODIsMjM0MjcsMjI5MDUsMjI2MTIsMzQyOTcsMzQyOTgsMzQzMDAsMzQzMDEsMzQzMDIsMzQzMDQsMzQzMDUsMzQzMDYsMzQzMDcs''@;'; put 'put ''MzQzMDgsMzQzMTAsMzQzMTEsMzQzMTIsMzQzMTMsMzQzMTQsMzQzMTUsMzQzMTYsMzQzMTcsMzQzMTgsMzQzMTksMzQzMjAsMzQzMjIsMzQzMjMsMzQzMjQsMzQzMjUsMzQzMjcsMzQzMjgsMzQzMjksMzQzMzAsMzQzMzEsMzQzMzIsMzQzMzMsMzQzMzQsMzQzMzUsMzQzMzYsMzQzMzcsMzQz''@;'; put 'put ''MzgsMzQzMzksMzQzNDAsMzQzNDEsMzQzNDIsMzQzNDQsMzQzNDYsMzQzNDcsMzQzNDgsMzQzNDksMzQzNTAsMzQzNTEsMzQzNTIsMzQzNTMsMzQzNTQsMzQzNTUsMzQzNTYsMzQzNTcsMzQzNTgsMzQzNTksMzQzNjEsMzQzNjIsMzQzNjMsMzQzNjUsMzQzNjYsMzQzNjcsMzQzNjgsMzQzNjks''@;'; put 'put ''MzQzNzAsMzQzNzEsMzQzNzIsMzQzNzMsMzQzNzQsMzQzNzUsMzQzNzYsMzQzNzcsMzQzNzgsMzQzNzksMzQzODAsMzQzODYsMzQzODcsMzQzODksMzQzOTAsMzQzOTEsMzQzOTIsMzQzOTMsMzQzOTUsMzQzOTYsMzQzOTcsMzQzOTksMzQ0MDAsMzQ0MDEsMzQ0MDMsMzQ0MDQsMzQ0MDUsMzQ0''@;'; put 'put ''MDYsMzQ0MDcsMzQ0MDgsMzQ0MDksMzQ0MTAsMjk1NDksMjUzNzQsMzY0MjcsMzYzNjcsMzI5NzQsMzM0OTIsMjUyNjAsMjE0ODgsMjc4ODgsMzcyMTQsMjI4MjYsMjQ1NzcsMjc3NjAsMjIzNDksMjU2NzQsMzYxMzgsMzAyNTEsMjgzOTMsMjIzNjMsMjcyNjQsMzAxOTIsMjg1MjUsMzU4ODUs''@;'; put 'put ''MzU4NDgsMjIzNzQsMjc2MzEsMzQ5NjIsMzA4OTksMjU1MDYsMjE0OTcsMjg4NDUsMjc3NDgsMjI2MTYsMjU2NDIsMjI1MzAsMjY4NDgsMzMxNzksMjE3NzYsMzE5NTgsMjA1MDQsMzY1MzgsMjgxMDgsMzYyNTUsMjg5MDcsMjU0ODcsMjgwNTksMjgzNzIsMzI0ODYsMzM3OTYsMjY2OTEsMzY4''@;'; put 'put ''NjcsMjgxMjAsMzg1MTgsMzU3NTIsMjI4NzEsMjkzMDUsMzQyNzYsMzMxNTAsMzAxNDAsMzU0NjYsMjY3OTksMjEwNzYsMzYzODYsMzgxNjEsMjU1NTIsMzkwNjQsMzY0MjAsMjE4ODQsMjAzMDcsMjYzNjcsMjIxNTksMjQ3ODksMjgwNTMsMjEwNTksMjM2MjUsMjI4MjUsMjgxNTUsMjI2MzUs''@;'; put 'put ''M2U0LDI5OTgwLDI0Njg0LDMzMzAwLDMzMDk0LDI1MzYxLDI2NDY1LDM2ODM0LDMwNTIyLDM2MzM5LDM2MTQ4LDM4MDgxLDI0MDg2LDIxMzgxLDIxNTQ4LDI4ODY3LDM0NDEzLDM0NDE1LDM0NDE2LDM0NDE4LDM0NDE5LDM0NDIwLDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI0LDM0NDM1LDM0NDM2''@;'; put 'put ''LDM0NDM3LDM0NDM4LDM0NDM5LDM0NDQwLDM0NDQxLDM0NDQ2LDM0NDQ3LDM0NDQ4LDM0NDQ5LDM0NDUwLDM0NDUyLDM0NDU0LDM0NDU1LDM0NDU2LDM0NDU3LDM0NDU4LDM0NDU5LDM0NDYyLDM0NDYzLDM0NDY0LDM0NDY1LDM0NDY2LDM0NDY5LDM0NDcwLDM0NDc1LDM0NDc3LDM0NDc4LDM0''@;'; put 'put ''NDgyLDM0NDgzLDM0NDg3LDM0NDg4LDM0NDg5LDM0NDkxLDM0NDkyLDM0NDkzLDM0NDk0LDM0NDk1LDM0NDk3LDM0NDk4LDM0NDk5LDM0NTAxLDM0NTA0LDM0NTA4LDM0NTA5LDM0NTE0LDM0NTE1LDM0NTE3LDM0NTE4LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI1LDM0NTI4LDM0NTI5LDM0NTMw''@;'; put 'put ''LDM0NTMxLDM0NTMzLDM0NTM0LDM0NTM1LDM0NTM2LDM0NTM4LDM0NTM5LDM0NTQwLDM0NTQzLDM0NTQ5LDM0NTUwLDM0NTUxLDM0NTU0LDM0NTU1LDM0NTU2LDM0NTU3LDM0NTU5LDM0NTYxLDM0NTY0LDM0NTY1LDM0NTY2LDM0NTcxLDM0NTcyLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc3LDM0''@;'; put 'put ''NTgwLDM0NTgyLDI3NzEyLDI0MzExLDIwNTcyLDIwMTQxLDI0MjM3LDI1NDAyLDMzMzUxLDM2ODkwLDI2NzA0LDM3MjMwLDMwNjQzLDIxNTE2LDM4MTA4LDI0NDIwLDMxNDYxLDI2NzQyLDI1NDEzLDMxNTcwLDMyNDc5LDMwMTcxLDIwNTk5LDI1MjM3LDIyODM2LDM2ODc5LDIwOTg0LDMxMTcx''@;'; put 'put ''LDMxMzYxLDIyMjcwLDI0NDY2LDM2ODg0LDI4MDM0LDIzNjQ4LDIyMzAzLDIxNTIwLDIwODIwLDI4MjM3LDIyMjQyLDI1NTEyLDM5MDU5LDMzMTUxLDM0NTgxLDM1MTE0LDM2ODY0LDIxNTM0LDIzNjYzLDMzMjE2LDI1MzAyLDI1MTc2LDMzMDczLDQwNTAxLDM4NDY0LDM5NTM0LDM5NTQ4LDI2''@;'; put 'put ''OTI1LDIyOTQ5LDI1Mjk5LDIxODIyLDI1MzY2LDIxNzAzLDM0NTIxLDI3OTY0LDIzMDQzLDI5OTI2LDM0OTcyLDI3NDk4LDIyODA2LDM1OTE2LDI0MzY3LDI4Mjg2LDI5NjA5LDM5MDM3LDIwMDI0LDI4OTE5LDIzNDM2LDMwODcxLDI1NDA1LDI2MjAyLDMwMzU4LDI0Nzc5LDIzNDUxLDIzMTEz''@;'; put 'put ''LDE5OTc1LDMzMTA5LDI3NzU0LDI5NTc5LDIwMTI5LDI2NTA1LDMyNTkzLDI0NDQ4LDI2MTA2LDI2Mzk1LDI0NTM2LDIyOTE2LDIzMDQxLDM0NTg1LDM0NTg3LDM0NTg5LDM0NTkxLDM0NTkyLDM0NTk2LDM0NTk4LDM0NTk5LDM0NjAwLDM0NjAyLDM0NjAzLDM0NjA0LDM0NjA1LDM0NjA3LDM0''@;'; put 'put ''NjA4LDM0NjEwLDM0NjExLDM0NjEzLDM0NjE0LDM0NjE2LDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjI0LDM0NjI1LDM0NjI2LDM0NjI3LDM0NjI4LDM0NjI5LDM0NjMwLDM0NjM0LDM0NjM1LDM0NjM3LDM0NjM5LDM0NjQwLDM0NjQxLDM0NjQyLDM0NjQ0LDM0NjQ1LDM0NjQ2LDM0NjQ4''@;'; put 'put ''LDM0NjUwLDM0NjUxLDM0NjUyLDM0NjUzLDM0NjU0LDM0NjU1LDM0NjU3LDM0NjU4LDM0NjYyLDM0NjYzLDM0NjY0LDM0NjY1LDM0NjY2LDM0NjY3LDM0NjY4LDM0NjY5LDM0NjcxLDM0NjczLDM0Njc0LDM0Njc1LDM0Njc3LDM0Njc5LDM0NjgwLDM0NjgxLDM0NjgyLDM0Njg3LDM0Njg4LDM0''@;'; put 'put ''Njg5LDM0NjkyLDM0Njk0LDM0Njk1LDM0Njk3LDM0Njk4LDM0NzAwLDM0NzAyLDM0NzAzLDM0NzA0LDM0NzA1LDM0NzA2LDM0NzA4LDM0NzA5LDM0NzEwLDM0NzEyLDM0NzEzLDM0NzE0LDM0NzE1LDM0NzE2LDM0NzE3LDM0NzE4LDM0NzIwLDM0NzIxLDM0NzIyLDM0NzIzLDM0NzI0LDI0MDEz''@;'; put 'put ''LDI0NDk0LDIxMzYxLDM4ODg2LDM2ODI5LDI2NjkzLDIyMjYwLDIxODA3LDI0Nzk5LDIwMDI2LDI4NDkzLDMyNTAwLDMzNDc5LDMzODA2LDIyOTk2LDIwMjU1LDIwMjY2LDIzNjE0LDMyNDI4LDI2NDEwLDM0MDc0LDIxNjE5LDMwMDMxLDMyOTYzLDIxODkwLDM5NzU5LDIwMzAxLDI4MjA1LDM1''@;'; put 'put ''ODU5LDIzNTYxLDI0OTQ0LDIxMzU1LDMwMjM5LDI4MjAxLDM0NDQyLDI1OTkxLDM4Mzk1LDMyNDQxLDIxNTYzLDMxMjgzLDMyMDEwLDM4MzgyLDIxOTg1LDMyNzA1LDI5OTM0LDI1MzczLDM0NTgzLDI4MDY1LDMxMzg5LDI1MTA1LDI2MDE3LDIxMzUxLDI1NTY5LDI3Nzc5LDI0MDQzLDIxNTk2''@;'; put 'put ''LDM4MDU2LDIwMDQ0LDI3NzQ1LDM1ODIwLDIzNjI3LDI2MDgwLDMzNDM2LDI2NzkxLDIxNTY2LDIxNTU2LDI3NTk1LDI3NDk0LDIwMTE2LDI1NDEwLDIxMzIwLDMzMzEwLDIwMjM3LDIwMzk4LDIyMzY2LDI1MDk4LDM4NjU0LDI2MjEyLDI5Mjg5LDIxMjQ3LDIxMTUzLDI0NzM1LDM1ODIzLDI2''@;'; put 'put ''MTMyLDI5MDgxLDI2NTEyLDM1MTk5LDMwODAyLDMwNzE3LDI2MjI0LDIyMDc1LDIxNTYwLDM4MTc3LDI5MzA2LDM0NzI1LDM0NzI2LDM0NzI3LDM0NzI5LDM0NzMwLDM0NzM0LDM0NzM2LDM0NzM3LDM0NzM4LDM0NzQwLDM0NzQyLDM0NzQzLDM0NzQ0LDM0NzQ1LDM0NzQ3LDM0NzQ4LDM0NzUw''@;'; put 'put ''LDM0NzUxLDM0NzUzLDM0NzU0LDM0NzU1LDM0NzU2LDM0NzU3LDM0NzU5LDM0NzYwLDM0NzYxLDM0NzY0LDM0NzY1LDM0NzY2LDM0NzY3LDM0NzY4LDM0NzcyLDM0NzczLDM0Nzc0LDM0Nzc1LDM0Nzc2LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgxLDM0NzgyLDM0NzgzLDM0Nzg1LDM0Nzg2LDM0''@;'; put 'put ''Nzg3LDM0Nzg4LDM0NzkwLDM0NzkxLDM0NzkyLDM0NzkzLDM0Nzk1LDM0Nzk2LDM0Nzk3LDM0Nzk5LDM0ODAwLDM0ODAxLDM0ODAyLDM0ODAzLDM0ODA0LDM0ODA1LDM0ODA2LDM0ODA3LDM0ODA4LDM0ODEwLDM0ODExLDM0ODEyLDM0ODEzLDM0ODE1LDM0ODE2LDM0ODE3LDM0ODE4LDM0ODIw''@;'; put 'put ''LDM0ODIxLDM0ODIyLDM0ODIzLDM0ODI0LDM0ODI1LDM0ODI3LDM0ODI4LDM0ODI5LDM0ODMwLDM0ODMxLDM0ODMyLDM0ODMzLDM0ODM0LDM0ODM2LDM0ODM5LDM0ODQwLDM0ODQxLDM0ODQyLDM0ODQ0LDM0ODQ1LDM0ODQ2LDM0ODQ3LDM0ODQ4LDM0ODUxLDMxMjMyLDI0Njg3LDI0MDc2LDI0''@;'; put 'put ''NzEzLDMzMTgxLDIyODA1LDI0Nzk2LDI5MDYwLDI4OTExLDI4MzMwLDI3NzI4LDI5MzEyLDI3MjY4LDM0OTg5LDI0MTA5LDIwMDY0LDIzMjE5LDIxOTE2LDM4MTE1LDI3OTI3LDMxOTk1LDM4NTUzLDI1MTAzLDMyNDU0LDMwNjA2LDM0NDMwLDIxMjgzLDM4Njg2LDM2NzU4LDI2MjQ3LDIzNzc3''@;'; put 'put ''LDIwMzg0LDI5NDIxLDE5OTc5LDIxNDE0LDIyNzk5LDIxNTIzLDI1NDcyLDM4MTg0LDIwODA4LDIwMTg1LDQwMDkyLDMyNDIwLDIxNjg4LDM2MTMyLDM0OTAwLDMzMzM1LDM4Mzg2LDI4MDQ2LDI0MzU4LDIzMjQ0LDI2MTc0LDM4NTA1LDI5NjE2LDI5NDg2LDIxNDM5LDMzMTQ2LDM5MzAxLDMy''@;'; put 'put ''NjczLDIzNDY2LDM4NTE5LDM4NDgwLDMyNDQ3LDMwNDU2LDIxNDEwLDM4MjYyLDM5MzIxLDMxNjY1LDM1MTQwLDI4MjQ4LDIwMDY1LDMyNzI0LDMxMDc3LDM1ODE0LDI0ODE5LDIxNzA5LDIwMTM5LDM5MDMzLDI0MDU1LDI3MjMzLDIwNjg3LDIxNTIxLDM1OTM3LDMzODMxLDMwODEzLDM4NjYw''@;'; put 'put ''LDIxMDY2LDIxNzQyLDIyMTc5LDM4MTQ0LDI4MDQwLDIzNDc3LDI4MTAyLDI2MTk1LDM0ODUyLDM0ODUzLDM0ODU0LDM0ODU1LDM0ODU2LDM0ODU3LDM0ODU4LDM0ODU5LDM0ODYwLDM0ODYxLDM0ODYyLDM0ODYzLDM0ODY0LDM0ODY1LDM0ODY3LDM0ODY4LDM0ODY5LDM0ODcwLDM0ODcxLDM0''@;'; put 'put ''ODcyLDM0ODc0LDM0ODc1LDM0ODc3LDM0ODc4LDM0ODc5LDM0ODgxLDM0ODgyLDM0ODgzLDM0ODg2LDM0ODg3LDM0ODg4LDM0ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk1LDM0ODk2LDM0ODk3LDM0ODk4LDM0ODk5LDM0OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA3LDM0OTA4LDM0OTA5''@;'; put 'put ''LDM0OTEwLDM0OTExLDM0OTEyLDM0OTE4LDM0OTE5LDM0OTIyLDM0OTI1LDM0OTI3LDM0OTI5LDM0OTMxLDM0OTMyLDM0OTMzLDM0OTM0LDM0OTM2LDM0OTM3LDM0OTM4LDM0OTM5LDM0OTQwLDM0OTQ0LDM0OTQ3LDM0OTUwLDM0OTUxLDM0OTUzLDM0OTU0LDM0OTU2LDM0OTU4LDM0OTU5LDM0''@;'; put 'put ''OTYwLDM0OTYxLDM0OTYzLDM0OTY0LDM0OTY1LDM0OTY3LDM0OTY4LDM0OTY5LDM0OTcwLDM0OTcxLDM0OTczLDM0OTc0LDM0OTc1LDM0OTc2LDM0OTc3LDM0OTc5LDM0OTgxLDM0OTgyLDM0OTgzLDM0OTg0LDM0OTg1LDM0OTg2LDIzNTY3LDIzMzg5LDI2NjU3LDMyOTE4LDIxODgwLDMxNTA1''@;'; put 'put ''LDI1OTI4LDI2OTY0LDIwMTIzLDI3NDYzLDM0NjM4LDM4Nzk1LDIxMzI3LDI1Mzc1LDI1NjU4LDM3MDM0LDI2MDEyLDMyOTYxLDM1ODU2LDIwODg5LDI2ODAwLDIxMzY4LDM0ODA5LDI1MDMyLDI3ODQ0LDI3ODk5LDM1ODc0LDIzNjMzLDM0MjE4LDMzNDU1LDM4MTU2LDI3NDI3LDM2NzYzLDI2''@;'; put 'put ''MDMyLDI0NTcxLDI0NTE1LDIwNDQ5LDM0ODg1LDI2MTQzLDMzMTI1LDI5NDgxLDI0ODI2LDIwODUyLDIxMDA5LDIyNDExLDI0NDE4LDM3MDI2LDM0ODkyLDM3MjY2LDI0MTg0LDI2NDQ3LDI0NjE1LDIyOTk1LDIwODA0LDIwOTgyLDMzMDE2LDIxMjU2LDI3NzY5LDM4NTk2LDI5MDY2LDIwMjQx''@;'; put 'put ''LDIwNDYyLDMyNjcwLDI2NDI5LDIxOTU3LDM4MTUyLDMxMTY4LDM0OTY2LDMyNDgzLDIyNjg3LDI1MTAwLDM4NjU2LDM0Mzk0LDIyMDQwLDM5MDM1LDI0NDY0LDM1NzY4LDMzOTg4LDM3MjA3LDIxNDY1LDI2MDkzLDI0MjA3LDMwMDQ0LDI0Njc2LDMyMTEwLDIzMTY3LDMyNDkwLDMyNDkzLDM2''@;'; put 'put ''NzEzLDIxOTI3LDIzNDU5LDI0NzQ4LDI2MDU5LDI5NTcyLDM0OTg4LDM0OTkwLDM0OTkxLDM0OTkyLDM0OTk0LDM0OTk1LDM0OTk2LDM0OTk3LDM0OTk4LDM1ZTMsMzUwMDEsMzUwMDIsMzUwMDMsMzUwMDUsMzUwMDYsMzUwMDcsMzUwMDgsMzUwMTEsMzUwMTIsMzUwMTUsMzUwMTYsMzUwMTgs''@;'; put 'put ''MzUwMTksMzUwMjAsMzUwMjEsMzUwMjMsMzUwMjQsMzUwMjUsMzUwMjcsMzUwMzAsMzUwMzEsMzUwMzQsMzUwMzUsMzUwMzYsMzUwMzcsMzUwMzgsMzUwNDAsMzUwNDEsMzUwNDYsMzUwNDcsMzUwNDksMzUwNTAsMzUwNTEsMzUwNTIsMzUwNTMsMzUwNTQsMzUwNTUsMzUwNTgsMzUwNjEsMzUw''@;'; put 'put ''NjIsMzUwNjMsMzUwNjYsMzUwNjcsMzUwNjksMzUwNzEsMzUwNzIsMzUwNzMsMzUwNzUsMzUwNzYsMzUwNzcsMzUwNzgsMzUwNzksMzUwODAsMzUwODEsMzUwODMsMzUwODQsMzUwODUsMzUwODYsMzUwODcsMzUwODksMzUwOTIsMzUwOTMsMzUwOTQsMzUwOTUsMzUwOTYsMzUxMDAsMzUxMDEs''@;'; put 'put ''MzUxMDIsMzUxMDMsMzUxMDQsMzUxMDYsMzUxMDcsMzUxMDgsMzUxMTAsMzUxMTEsMzUxMTIsMzUxMTMsMzUxMTYsMzUxMTcsMzUxMTgsMzUxMTksMzUxMjEsMzUxMjIsMzUxMjMsMzUxMjUsMzUxMjcsMzY4NzMsMzAzMDcsMzA1MDUsMzI0NzQsMzg3NzIsMzQyMDMsMjMzOTgsMzEzNDgsMzg2''@;'; put 'put ''MzQsMzQ4ODAsMjExOTUsMjkwNzEsMjQ0OTAsMjYwOTIsMzU4MTAsMjM1NDcsMzk1MzUsMjQwMzMsMjc1MjksMjc3MzksMzU3NTcsMzU3NTksMzY4NzQsMzY4MDUsMjEzODcsMjUyNzYsNDA0ODYsNDA0OTMsMjE1NjgsMjAwMTEsMzM0NjksMjkyNzMsMzQ0NjAsMjM4MzAsMzQ5MDUsMjgwNzks''@;'; put 'put ''Mzg1OTcsMjE3MTMsMjAxMjIsMzU3NjYsMjg5MzcsMjE2OTMsMzg0MDksMjg4OTUsMjgxNTMsMzA0MTYsMjAwMDUsMzA3NDAsMzQ1NzgsMjM3MjEsMjQzMTAsMzUzMjgsMzkwNjgsMzg0MTQsMjg4MTQsMjc4MzksMjI4NTIsMjU1MTMsMzA1MjQsMzQ4OTMsMjg0MzYsMzMzOTUsMjI1NzYsMjkx''@;'; put 'put ''NDEsMjEzODgsMzA3NDYsMzg1OTMsMjE3NjEsMjQ0MjIsMjg5NzYsMjM0NzYsMzU4NjYsMzk1NjQsMjc1MjMsMjI4MzAsNDA0OTUsMzEyMDcsMjY0NzIsMjUxOTYsMjAzMzUsMzAxMTMsMzI2NTAsMjc5MTUsMzg0NTEsMjc2ODcsMjAyMDgsMzAxNjIsMjA4NTksMjY2NzksMjg0NzgsMzY5OTIs''@;'; put 'put ''MzMxMzYsMjI5MzQsMjk4MTQsMzUxMjgsMzUxMjksMzUxMzAsMzUxMzEsMzUxMzIsMzUxMzMsMzUxMzQsMzUxMzUsMzUxMzYsMzUxMzgsMzUxMzksMzUxNDEsMzUxNDIsMzUxNDMsMzUxNDQsMzUxNDUsMzUxNDYsMzUxNDcsMzUxNDgsMzUxNDksMzUxNTAsMzUxNTEsMzUxNTIsMzUxNTMsMzUx''@;'; put 'put ''NTQsMzUxNTUsMzUxNTYsMzUxNTcsMzUxNTgsMzUxNTksMzUxNjAsMzUxNjEsMzUxNjIsMzUxNjMsMzUxNjQsMzUxNjUsMzUxNjgsMzUxNjksMzUxNzAsMzUxNzEsMzUxNzIsMzUxNzMsMzUxNzUsMzUxNzYsMzUxNzcsMzUxNzgsMzUxNzksMzUxODAsMzUxODEsMzUxODIsMzUxODMsMzUxODQs''@;'; put 'put ''MzUxODUsMzUxODYsMzUxODcsMzUxODgsMzUxODksMzUxOTAsMzUxOTEsMzUxOTIsMzUxOTMsMzUxOTQsMzUxOTYsMzUxOTcsMzUxOTgsMzUyMDAsMzUyMDIsMzUyMDQsMzUyMDUsMzUyMDcsMzUyMDgsMzUyMDksMzUyMTAsMzUyMTEsMzUyMTIsMzUyMTMsMzUyMTQsMzUyMTUsMzUyMTYsMzUy''@;'; put 'put ''MTcsMzUyMTgsMzUyMTksMzUyMjAsMzUyMjEsMzUyMjIsMzUyMjMsMzUyMjQsMzUyMjUsMzUyMjYsMzUyMjcsMzUyMjgsMzUyMjksMzUyMzAsMzUyMzEsMzUyMzIsMzUyMzMsMjU2NzEsMjM1OTEsMzY5NjUsMzEzNzcsMzU4NzUsMjMwMDIsMjE2NzYsMzMyODAsMzM2NDcsMzUyMDEsMzI3Njgs''@;'; put 'put ''MjY5MjgsMjIwOTQsMzI4MjIsMjkyMzksMzczMjYsMjA5MTgsMjAwNjMsMzkwMjksMjU0OTQsMTk5OTQsMjE0OTQsMjYzNTUsMzMwOTksMjI4MTIsMjgwODIsMTk5NjgsMjI3NzcsMjEzMDcsMjU1NTgsMzgxMjksMjAzODEsMjAyMzQsMzQ5MTUsMzkwNTYsMjI4MzksMzY5NTEsMzEyMjcsMjAy''@;'; put 'put ''MDIsMzMwMDgsMzAwOTcsMjc3NzgsMjM0NTIsMjMwMTYsMjQ0MTMsMjY4ODUsMzQ0MzMsMjA1MDYsMjQwNTAsMjAwNTcsMzA2OTEsMjAxOTcsMzM0MDIsMjUyMzMsMjYxMzEsMzcwMDksMjM2NzMsMjAxNTksMjQ0NDEsMzMyMjIsMzY5MjAsMzI5MDAsMzAxMjMsMjAxMzQsMzUwMjgsMjQ4NDcs''@;'; put 'put ''Mjc1ODksMjQ1MTgsMjAwNDEsMzA0MTAsMjgzMjIsMzU4MTEsMzU3NTgsMzU4NTAsMzU3OTMsMjQzMjIsMzI3NjQsMzI3MTYsMzI0NjIsMzM1ODksMzM2NDMsMjIyNDAsMjc1NzUsMzg4OTksMzg0NTIsMjMwMzUsMjE1MzUsMzgxMzQsMjgxMzksMjM0OTMsMzkyNzgsMjM2MDksMjQzNDEsMzg1''@;'; put 'put ''NDQsMzUyMzQsMzUyMzUsMzUyMzYsMzUyMzcsMzUyMzgsMzUyMzksMzUyNDAsMzUyNDEsMzUyNDIsMzUyNDMsMzUyNDQsMzUyNDUsMzUyNDYsMzUyNDcsMzUyNDgsMzUyNDksMzUyNTAsMzUyNTEsMzUyNTIsMzUyNTMsMzUyNTQsMzUyNTUsMzUyNTYsMzUyNTcsMzUyNTgsMzUyNTksMzUyNjAs''@;'; put 'put ''MzUyNjEsMzUyNjIsMzUyNjMsMzUyNjQsMzUyNjcsMzUyNzcsMzUyODMsMzUyODQsMzUyODUsMzUyODcsMzUyODgsMzUyODksMzUyOTEsMzUyOTMsMzUyOTUsMzUyOTYsMzUyOTcsMzUyOTgsMzUzMDAsMzUzMDMsMzUzMDQsMzUzMDUsMzUzMDYsMzUzMDgsMzUzMDksMzUzMTAsMzUzMTIsMzUz''@;'; put 'put ''MTMsMzUzMTQsMzUzMTYsMzUzMTcsMzUzMTgsMzUzMTksMzUzMjAsMzUzMjEsMzUzMjIsMzUzMjMsMzUzMjQsMzUzMjUsMzUzMjYsMzUzMjcsMzUzMjksMzUzMzAsMzUzMzEsMzUzMzIsMzUzMzMsMzUzMzQsMzUzMzYsMzUzMzcsMzUzMzgsMzUzMzksMzUzNDAsMzUzNDEsMzUzNDIsMzUzNDMs''@;'; put 'put ''MzUzNDQsMzUzNDUsMzUzNDYsMzUzNDcsMzUzNDgsMzUzNDksMzUzNTAsMzUzNTEsMzUzNTIsMzUzNTMsMzUzNTQsMzUzNTUsMzUzNTYsMzUzNTcsMjEzNjAsMzM1MjEsMjcxODUsMjMxNTYsNDA1NjAsMjQyMTIsMzI1NTIsMzM3MjEsMzM4MjgsMzM4MjksMzM2MzksMzQ2MzEsMzY4MTQsMzYx''@;'; put 'put ''OTQsMzA0MDgsMjQ0MzMsMzkwNjIsMzA4MjgsMjYxNDQsMjE3MjcsMjUzMTcsMjAzMjMsMzMyMTksMzAxNTIsMjQyNDgsMzg2MDUsMzYzNjIsMzQ1NTMsMjE2NDcsMjc4OTEsMjgwNDQsMjc3MDQsMjQ3MDMsMjExOTEsMjk5OTIsMjQxODksMjAyNDgsMjQ3MzYsMjQ1NTEsMjM1ODgsMzAwMDEs''@;'; put 'put ''MzcwMzgsMzgwODAsMjkzNjksMjc4MzMsMjgyMTYsMzcxOTMsMjYzNzcsMjE0NTEsMjE0OTEsMjAzMDUsMzczMjEsMzU4MjUsMjE0NDgsMjQxODgsMzY4MDIsMjgxMzIsMjAxMTAsMzA0MDIsMjcwMTQsMzQzOTgsMjQ4NTgsMzMyODYsMjAzMTMsMjA0NDYsMzY5MjYsNDAwNjAsMjQ4NDEsMjgx''@;'; put 'put ''ODksMjgxODAsMzg1MzMsMjAxMDQsMjMwODksMzg2MzIsMTk5ODIsMjM2NzksMzExNjEsMjM0MzEsMzU4MjEsMzI3MDEsMjk1NzcsMjI0OTUsMzM0MTksMzcwNTcsMjE1MDUsMzY5MzUsMjE5NDcsMjM3ODYsMjQ0ODEsMjQ4NDAsMjc0NDIsMjk0MjUsMzI5NDYsMzU0NjUsMzUzNTgsMzUzNTks''@;'; put 'put ''MzUzNjAsMzUzNjEsMzUzNjIsMzUzNjMsMzUzNjQsMzUzNjUsMzUzNjYsMzUzNjcsMzUzNjgsMzUzNjksMzUzNzAsMzUzNzEsMzUzNzIsMzUzNzMsMzUzNzQsMzUzNzUsMzUzNzYsMzUzNzcsMzUzNzgsMzUzNzksMzUzODAsMzUzODEsMzUzODIsMzUzODMsMzUzODQsMzUzODUsMzUzODYsMzUz''@;'; put 'put ''ODcsMzUzODgsMzUzODksMzUzOTEsMzUzOTIsMzUzOTMsMzUzOTQsMzUzOTUsMzUzOTYsMzUzOTcsMzUzOTgsMzUzOTksMzU0MDEsMzU0MDIsMzU0MDMsMzU0MDQsMzU0MDUsMzU0MDYsMzU0MDcsMzU0MDgsMzU0MDksMzU0MTAsMzU0MTEsMzU0MTIsMzU0MTMsMzU0MTQsMzU0MTUsMzU0MTYs''@;'; put 'put ''MzU0MTcsMzU0MTgsMzU0MTksMzU0MjAsMzU0MjEsMzU0MjIsMzU0MjMsMzU0MjQsMzU0MjUsMzU0MjYsMzU0MjcsMzU0MjgsMzU0MjksMzU0MzAsMzU0MzEsMzU0MzIsMzU0MzMsMzU0MzQsMzU0MzUsMzU0MzYsMzU0MzcsMzU0MzgsMzU0MzksMzU0NDAsMzU0NDEsMzU0NDIsMzU0NDMsMzU0''@;'; put 'put ''NDQsMzU0NDUsMzU0NDYsMzU0NDcsMzU0NDgsMzU0NTAsMzU0NTEsMzU0NTIsMzU0NTMsMzU0NTQsMzU0NTUsMzU0NTYsMjgwMjAsMjM1MDcsMzUwMjksMzkwNDQsMzU5NDcsMzk1MzMsNDA0OTksMjgxNzAsMjA5MDAsMjA4MDMsMjI0MzUsMzQ5NDUsMjE0MDcsMjU1ODgsMzY3NTcsMjIyNTMs''@;'; put 'put ''MjE1OTIsMjIyNzgsMjk1MDMsMjgzMDQsMzI1MzYsMzY4MjgsMzM0ODksMjQ4OTUsMjQ2MTYsMzg0OTgsMjYzNTIsMzI0MjIsMzYyMzQsMzYyOTEsMzgwNTMsMjM3MzEsMzE5MDgsMjYzNzYsMjQ3NDIsMzg0MDUsMzI3OTIsMjAxMTMsMzcwOTUsMjEyNDgsMzg1MDQsMjA4MDEsMzY4MTYsMzQx''@;'; put 'put ''NjQsMzcyMTMsMjYxOTcsMzg5MDEsMjMzODEsMjEyNzcsMzA3NzYsMjY0MzQsMjY2ODUsMjE3MDUsMjg3OTgsMjM0NzIsMzY3MzMsMjA4NzcsMjIzMTIsMjE2ODEsMjU4NzQsMjYyNDIsMzYxOTAsMzYxNjMsMzMwMzksMzM5MDAsMzY5NzMsMzE5NjcsMjA5OTEsMzQyOTksMjY1MzEsMjYwODks''@;'; put 'put ''Mjg1NzcsMzQ0NjgsMzY0ODEsMjIxMjIsMzY4OTYsMzAzMzgsMjg3OTAsMjkxNTcsMzYxMzEsMjUzMjEsMjEwMTcsMjc5MDEsMzYxNTYsMjQ1OTAsMjI2ODYsMjQ5NzQsMjYzNjYsMzYxOTIsMjUxNjYsMjE5MzksMjgxOTUsMjY0MTMsMzY3MTEsMzU0NTcsMzU0NTgsMzU0NTksMzU0NjAsMzU0''@;'; put 'put ''NjEsMzU0NjIsMzU0NjMsMzU0NjQsMzU0NjcsMzU0NjgsMzU0NjksMzU0NzAsMzU0NzEsMzU0NzIsMzU0NzMsMzU0NzQsMzU0NzYsMzU0NzcsMzU0NzgsMzU0NzksMzU0ODAsMzU0ODEsMzU0ODIsMzU0ODMsMzU0ODQsMzU0ODUsMzU0ODYsMzU0ODcsMzU0ODgsMzU0ODksMzU0OTAsMzU0OTEs''@;'; put 'put ''MzU0OTIsMzU0OTMsMzU0OTQsMzU0OTUsMzU0OTYsMzU0OTcsMzU0OTgsMzU0OTksMzU1MDAsMzU1MDEsMzU1MDIsMzU1MDMsMzU1MDQsMzU1MDUsMzU1MDYsMzU1MDcsMzU1MDgsMzU1MDksMzU1MTAsMzU1MTEsMzU1MTIsMzU1MTMsMzU1MTQsMzU1MTUsMzU1MTYsMzU1MTcsMzU1MTgsMzU1''@;'; put 'put ''MTksMzU1MjAsMzU1MjEsMzU1MjIsMzU1MjMsMzU1MjQsMzU1MjUsMzU1MjYsMzU1MjcsMzU1MjgsMzU1MjksMzU1MzAsMzU1MzEsMzU1MzIsMzU1MzMsMzU1MzQsMzU1MzUsMzU1MzYsMzU1MzcsMzU1MzgsMzU1MzksMzU1NDAsMzU1NDEsMzU1NDIsMzU1NDMsMzU1NDQsMzU1NDUsMzU1NDYs''@;'; put 'put ''MzU1NDcsMzU1NDgsMzU1NDksMzU1NTAsMzU1NTEsMzU1NTIsMzU1NTMsMzU1NTQsMzU1NTUsMzgxMTMsMzgzOTIsMzA1MDQsMjY2MjksMjcwNDgsMjE2NDMsMjAwNDUsMjg4NTYsMzU3ODQsMjU2ODgsMjU5OTUsMjM0MjksMzEzNjQsMjA1MzgsMjM1MjgsMzA2NTEsMjc2MTcsMzU0NDksMzE4''@;'; put 'put ''OTYsMjc4MzgsMzA0MTUsMjYwMjUsMzY3NTksMjM4NTMsMjM2MzcsMzQzNjAsMjY2MzIsMjEzNDQsMjUxMTIsMzE0NDksMjgyNTEsMzI1MDksMjcxNjcsMzE0NTYsMjQ0MzIsMjg0NjcsMjQzNTIsMjU0ODQsMjgwNzIsMjY0NTQsMTk5NzYsMjQwODAsMzYxMzQsMjAxODMsMzI5NjAsMzAyNjAs''@;'; put 'put ''Mzg1NTYsMjUzMDcsMjYxNTcsMjUyMTQsMjc4MzYsMzYyMTMsMjkwMzEsMzI2MTcsMjA4MDYsMzI5MDMsMjE0ODQsMzY5NzQsMjUyNDAsMjE3NDYsMzQ1NDQsMzY3NjEsMzI3NzMsMzgxNjcsMzQwNzEsMzY4MjUsMjc5OTMsMjk2NDUsMjYwMTUsMzA0OTUsMjk5NTYsMzA3NTksMzMyNzUsMzYx''@;'; put 'put ''MjYsMzgwMjQsMjAzOTAsMjY1MTcsMzAxMzcsMzU3ODYsMzg2NjMsMjUzOTEsMzgyMTUsMzg0NTMsMzM5NzYsMjUzNzksMzA1MjksMjQ0NDksMjk0MjQsMjAxMDUsMjQ1OTYsMjU5NzIsMjUzMjcsMjc0OTEsMjU5MTksMzU1NTYsMzU1NTcsMzU1NTgsMzU1NTksMzU1NjAsMzU1NjEsMzU1NjIs''@;'; put 'put ''MzU1NjMsMzU1NjQsMzU1NjUsMzU1NjYsMzU1NjcsMzU1NjgsMzU1NjksMzU1NzAsMzU1NzEsMzU1NzIsMzU1NzMsMzU1NzQsMzU1NzUsMzU1NzYsMzU1NzcsMzU1NzgsMzU1NzksMzU1ODAsMzU1ODEsMzU1ODIsMzU1ODMsMzU1ODQsMzU1ODUsMzU1ODYsMzU1ODcsMzU1ODgsMzU1ODksMzU1''@;'; put 'put ''OTAsMzU1OTIsMzU1OTMsMzU1OTQsMzU1OTUsMzU1OTYsMzU1OTcsMzU1OTgsMzU1OTksMzU2MDAsMzU2MDEsMzU2MDIsMzU2MDMsMzU2MDQsMzU2MDUsMzU2MDYsMzU2MDcsMzU2MDgsMzU2MDksMzU2MTAsMzU2MTEsMzU2MTIsMzU2MTMsMzU2MTQsMzU2MTUsMzU2MTYsMzU2MTcsMzU2MTgs''@;'; put 'put ''MzU2MTksMzU2MjAsMzU2MjEsMzU2MjMsMzU2MjQsMzU2MjUsMzU2MjYsMzU2MjcsMzU2MjgsMzU2MjksMzU2MzAsMzU2MzEsMzU2MzIsMzU2MzMsMzU2MzQsMzU2MzUsMzU2MzYsMzU2MzcsMzU2MzgsMzU2MzksMzU2NDAsMzU2NDEsMzU2NDIsMzU2NDMsMzU2NDQsMzU2NDUsMzU2NDYsMzU2''@;'; put 'put ''NDcsMzU2NDgsMzU2NDksMzU2NTAsMzU2NTEsMzU2NTIsMzU2NTMsMjQxMDMsMzAxNTEsMzcwNzMsMzU3NzcsMzM0MzcsMjY1MjUsMjU5MDMsMjE1NTMsMzQ1ODQsMzA2OTMsMzI5MzAsMzMwMjYsMjc3MTMsMjAwNDMsMzI0NTUsMzI4NDQsMzA0NTIsMjY4OTMsMjc1NDIsMjUxOTEsMjA1NDAs''@;'; put 'put ''MjAzNTYsMjIzMzYsMjUzNTEsMjc0OTAsMzYyODYsMjE0ODIsMjYwODgsMzI0NDAsMjQ1MzUsMjUzNzAsMjU1MjcsMzMyNjcsMzMyNjgsMzI2MjIsMjQwOTIsMjM3NjksMjEwNDYsMjYyMzQsMzEyMDksMzEyNTgsMzYxMzYsMjg4MjUsMzAxNjQsMjgzODIsMjc4MzUsMzEzNzgsMjAwMTMsMzA0''@;'; put 'put ''MDUsMjQ1NDQsMzgwNDcsMzQ5MzUsMzI0NTYsMzExODEsMzI5NTksMzczMjUsMjAyMTAsMjAyNDcsMzMzMTEsMjE2MDgsMjQwMzAsMjc5NTQsMzU3ODgsMzE5MDksMzY3MjQsMzI5MjAsMjQwOTAsMjE2NTAsMzAzODUsMjM0NDksMjYxNzIsMzk1ODgsMjk2NjQsMjY2NjYsMzQ1MjMsMjY0MTcs''@;'; put 'put ''Mjk0ODIsMzU4MzIsMzU4MDMsMzY4ODAsMzE0ODEsMjg4OTEsMjkwMzgsMjUyODQsMzA2MzMsMjIwNjUsMjAwMjcsMzM4NzksMjY2MDksMjExNjEsMzQ0OTYsMzYxNDIsMzgxMzYsMzE1NjksMzU2NTQsMzU2NTUsMzU2NTYsMzU2NTcsMzU2NTgsMzU2NTksMzU2NjAsMzU2NjEsMzU2NjIsMzU2''@;'; put 'put ''NjMsMzU2NjQsMzU2NjUsMzU2NjYsMzU2NjcsMzU2NjgsMzU2NjksMzU2NzAsMzU2NzEsMzU2NzIsMzU2NzMsMzU2NzQsMzU2NzUsMzU2NzYsMzU2NzcsMzU2NzgsMzU2NzksMzU2ODAsMzU2ODEsMzU2ODIsMzU2ODMsMzU2ODQsMzU2ODUsMzU2ODcsMzU2ODgsMzU2ODksMzU2OTAsMzU2OTEs''@;'; put 'put ''MzU2OTMsMzU2OTQsMzU2OTUsMzU2OTYsMzU2OTcsMzU2OTgsMzU2OTksMzU3MDAsMzU3MDEsMzU3MDIsMzU3MDMsMzU3MDQsMzU3MDUsMzU3MDYsMzU3MDcsMzU3MDgsMzU3MDksMzU3MTAsMzU3MTEsMzU3MTIsMzU3MTMsMzU3MTQsMzU3MTUsMzU3MTYsMzU3MTcsMzU3MTgsMzU3MTksMzU3''@;'; put 'put ''MjAsMzU3MjEsMzU3MjIsMzU3MjMsMzU3MjQsMzU3MjUsMzU3MjYsMzU3MjcsMzU3MjgsMzU3MjksMzU3MzAsMzU3MzEsMzU3MzIsMzU3MzMsMzU3MzQsMzU3MzUsMzU3MzYsMzU3MzcsMzU3MzgsMzU3MzksMzU3NDAsMzU3NDEsMzU3NDIsMzU3NDMsMzU3NTYsMzU3NjEsMzU3NzEsMzU3ODMs''@;'; put 'put ''MzU3OTIsMzU4MTgsMzU4NDksMzU4NzAsMjAzMDMsMjc4ODAsMzEwNjksMzk1NDcsMjUyMzUsMjkyMjYsMjUzNDEsMTk5ODcsMzA3NDIsMzY3MTYsMjU3NzYsMzYxODYsMzE2ODYsMjY3MjksMjQxOTYsMzUwMTMsMjI5MTgsMjU3NTgsMjI3NjYsMjkzNjYsMjY4OTQsMzgxODEsMzY4NjEsMzYx''@;'; put 'put ''ODQsMjIzNjgsMzI1MTIsMzU4NDYsMjA5MzQsMjU0MTcsMjUzMDUsMjEzMzEsMjY3MDAsMjk3MzAsMzM1MzcsMzcxOTYsMjE4MjgsMzA1MjgsMjg3OTYsMjc5NzgsMjA4NTcsMjE2NzIsMzYxNjQsMjMwMzksMjgzNjMsMjgxMDAsMjMzODgsMzIwNDMsMjAxODAsMzE4NjksMjgzNzEsMjMzNzYs''@;'; put 'put ''MzMyNTgsMjgxNzMsMjMzODMsMzk2ODMsMjY4MzcsMzYzOTQsMjM0NDcsMzI1MDgsMjQ2MzUsMzI0MzcsMzcwNDksMzYyMDgsMjI4NjMsMjU1NDksMzExOTksMzYyNzUsMjEzMzAsMjYwNjMsMzEwNjIsMzU3ODEsMzg0NTksMzI0NTIsMzgwNzUsMzIzODYsMjIwNjgsMzcyNTcsMjYzNjgsMzI2''@;'; put 'put ''MTgsMjM1NjIsMzY5ODEsMjYxNTIsMjQwMzgsMjAzMDQsMjY1OTAsMjA1NzAsMjAzMTYsMjIzNTIsMjQyMzEsNTk0MDgsNTk0MDksNTk0MTAsNTk0MTEsNTk0MTIsMzU4OTYsMzU4OTcsMzU4OTgsMzU4OTksMzU5MDAsMzU5MDEsMzU5MDIsMzU5MDMsMzU5MDQsMzU5MDYsMzU5MDcsMzU5MDgs''@;'; put 'put ''MzU5MDksMzU5MTIsMzU5MTQsMzU5MTUsMzU5MTcsMzU5MTgsMzU5MTksMzU5MjAsMzU5MjEsMzU5MjIsMzU5MjMsMzU5MjQsMzU5MjYsMzU5MjcsMzU5MjgsMzU5MjksMzU5MzEsMzU5MzIsMzU5MzMsMzU5MzQsMzU5MzUsMzU5MzYsMzU5MzksMzU5NDAsMzU5NDEsMzU5NDIsMzU5NDMsMzU5''@;'; put 'put ''NDQsMzU5NDUsMzU5NDgsMzU5NDksMzU5NTAsMzU5NTEsMzU5NTIsMzU5NTMsMzU5NTQsMzU5NTYsMzU5NTcsMzU5NTgsMzU5NTksMzU5NjMsMzU5NjQsMzU5NjUsMzU5NjYsMzU5NjcsMzU5NjgsMzU5NjksMzU5NzEsMzU5NzIsMzU5NzQsMzU5NzUsMzU5NzYsMzU5NzksMzU5ODEsMzU5ODIs''@;'; put 'put ''MzU5ODMsMzU5ODQsMzU5ODUsMzU5ODYsMzU5ODcsMzU5ODksMzU5OTAsMzU5OTEsMzU5OTMsMzU5OTQsMzU5OTUsMzU5OTYsMzU5OTcsMzU5OTgsMzU5OTksMzZlMywzNjAwMSwzNjAwMiwzNjAwMywzNjAwNCwzNjAwNSwzNjAwNiwzNjAwNywzNjAwOCwzNjAwOSwzNjAxMCwzNjAxMSwzNjAx''@;'; put 'put ''MiwzNjAxMywyMDEwOSwxOTk4MCwyMDgwMCwxOTk4NCwyNDMxOSwyMTMxNywxOTk4OSwyMDEyMCwxOTk5OCwzOTczMCwyMzQwNCwyMjEyMSwyMDAwOCwzMTE2MiwyMDAzMSwyMTI2OSwyMDAzOSwyMjgyOSwyOTI0MywyMTM1OCwyNzY2NCwyMjIzOSwzMjk5NiwzOTMxOSwyNzYwMywzMDU5MCw0''@;'; put 'put ''MDcyNywyMDAyMiwyMDEyNyw0MDcyMCwyMDA2MCwyMDA3MywyMDExNSwzMzQxNiwyMzM4NywyMTg2OCwyMjAzMSwyMDE2NCwyMTM4OSwyMTQwNSwyMTQxMSwyMTQxMywyMTQyMiwzODc1NywzNjE4OSwyMTI3NCwyMTQ5MywyMTI4NiwyMTI5NCwyMTMxMCwzNjE4OCwyMTM1MCwyMTM0NywyMDk5''@;'; put 'put ''NCwyMWUzLDIxMDA2LDIxMDM3LDIxMDQzLDIxMDU1LDIxMDU2LDIxMDY4LDIxMDg2LDIxMDg5LDIxMDg0LDMzOTY3LDIxMTE3LDIxMTIyLDIxMTIxLDIxMTM2LDIxMTM5LDIwODY2LDMyNTk2LDIwMTU1LDIwMTYzLDIwMTY5LDIwMTYyLDIwMjAwLDIwMTkzLDIwMjAzLDIwMTkwLDIwMjUxLDIw''@;'; put 'put ''MjExLDIwMjU4LDIwMzI0LDIwMjEzLDIwMjYxLDIwMjYzLDIwMjMzLDIwMjY3LDIwMzE4LDIwMzI3LDI1OTEyLDIwMzE0LDIwMzE3LDM2MDE0LDM2MDE1LDM2MDE2LDM2MDE3LDM2MDE4LDM2MDE5LDM2MDIwLDM2MDIxLDM2MDIyLDM2MDIzLDM2MDI0LDM2MDI1LDM2MDI2LDM2MDI3LDM2MDI4''@;'; put 'put ''LDM2MDI5LDM2MDMwLDM2MDMxLDM2MDMyLDM2MDMzLDM2MDM0LDM2MDM1LDM2MDM2LDM2MDM3LDM2MDM4LDM2MDM5LDM2MDQwLDM2MDQxLDM2MDQyLDM2MDQzLDM2MDQ0LDM2MDQ1LDM2MDQ2LDM2MDQ3LDM2MDQ4LDM2MDQ5LDM2MDUwLDM2MDUxLDM2MDUyLDM2MDUzLDM2MDU0LDM2MDU1LDM2''@;'; put 'put ''MDU2LDM2MDU3LDM2MDU4LDM2MDU5LDM2MDYwLDM2MDYxLDM2MDYyLDM2MDYzLDM2MDY0LDM2MDY1LDM2MDY2LDM2MDY3LDM2MDY4LDM2MDY5LDM2MDcwLDM2MDcxLDM2MDcyLDM2MDczLDM2MDc0LDM2MDc1LDM2MDc2LDM2MDc3LDM2MDc4LDM2MDc5LDM2MDgwLDM2MDgxLDM2MDgyLDM2MDgz''@;'; put 'put ''LDM2MDg0LDM2MDg1LDM2MDg2LDM2MDg3LDM2MDg4LDM2MDg5LDM2MDkwLDM2MDkxLDM2MDkyLDM2MDkzLDM2MDk0LDM2MDk1LDM2MDk2LDM2MDk3LDM2MDk4LDM2MDk5LDM2MTAwLDM2MTAxLDM2MTAyLDM2MTAzLDM2MTA0LDM2MTA1LDM2MTA2LDM2MTA3LDM2MTA4LDM2MTA5LDIwMzE5LDIw''@;'; put 'put ''MzExLDIwMjc0LDIwMjg1LDIwMzQyLDIwMzQwLDIwMzY5LDIwMzYxLDIwMzU1LDIwMzY3LDIwMzUwLDIwMzQ3LDIwMzk0LDIwMzQ4LDIwMzk2LDIwMzcyLDIwNDU0LDIwNDU2LDIwNDU4LDIwNDIxLDIwNDQyLDIwNDUxLDIwNDQ0LDIwNDMzLDIwNDQ3LDIwNDcyLDIwNTIxLDIwNTU2LDIwNDY3''@;'; put 'put ''LDIwNTI0LDIwNDk1LDIwNTI2LDIwNTI1LDIwNDc4LDIwNTA4LDIwNDkyLDIwNTE3LDIwNTIwLDIwNjA2LDIwNTQ3LDIwNTY1LDIwNTUyLDIwNTU4LDIwNTg4LDIwNjAzLDIwNjQ1LDIwNjQ3LDIwNjQ5LDIwNjY2LDIwNjk0LDIwNzQyLDIwNzE3LDIwNzE2LDIwNzEwLDIwNzE4LDIwNzQzLDIw''@;'; put 'put ''NzQ3LDIwMTg5LDI3NzA5LDIwMzEyLDIwMzI1LDIwNDMwLDQwODY0LDI3NzE4LDMxODYwLDIwODQ2LDI0MDYxLDQwNjQ5LDM5MzIwLDIwODY1LDIyODA0LDIxMjQxLDIxMjYxLDM1MzM1LDIxMjY0LDIwOTcxLDIyODA5LDIwODIxLDIwMTI4LDIwODIyLDIwMTQ3LDM0OTI2LDM0OTgwLDIwMTQ5''@;'; put 'put ''LDMzMDQ0LDM1MDI2LDMxMTA0LDIzMzQ4LDM0ODE5LDMyNjk2LDIwOTA3LDIwOTEzLDIwOTI1LDIwOTI0LDM2MTEwLDM2MTExLDM2MTEyLDM2MTEzLDM2MTE0LDM2MTE1LDM2MTE2LDM2MTE3LDM2MTE4LDM2MTE5LDM2MTIwLDM2MTIxLDM2MTIyLDM2MTIzLDM2MTI0LDM2MTI4LDM2MTc3LDM2''@;'; put 'put ''MTc4LDM2MTgzLDM2MTkxLDM2MTk3LDM2MjAwLDM2MjAxLDM2MjAyLDM2MjA0LDM2MjA2LDM2MjA3LDM2MjA5LDM2MjEwLDM2MjE2LDM2MjE3LDM2MjE4LDM2MjE5LDM2MjIwLDM2MjIxLDM2MjIyLDM2MjIzLDM2MjI0LDM2MjI2LDM2MjI3LDM2MjMwLDM2MjMxLDM2MjMyLDM2MjMzLDM2MjM2''@;'; put 'put ''LDM2MjM3LDM2MjM4LDM2MjM5LDM2MjQwLDM2MjQyLDM2MjQzLDM2MjQ1LDM2MjQ2LDM2MjQ3LDM2MjQ4LDM2MjQ5LDM2MjUwLDM2MjUxLDM2MjUyLDM2MjUzLDM2MjU0LDM2MjU2LDM2MjU3LDM2MjU4LDM2MjYwLDM2MjYxLDM2MjYyLDM2MjYzLDM2MjY0LDM2MjY1LDM2MjY2LDM2MjY3LDM2''@;'; put 'put ''MjY4LDM2MjY5LDM2MjcwLDM2MjcxLDM2MjcyLDM2Mjc0LDM2Mjc4LDM2Mjc5LDM2MjgxLDM2MjgzLDM2Mjg1LDM2Mjg4LDM2Mjg5LDM2MjkwLDM2MjkzLDM2Mjk1LDM2Mjk2LDM2Mjk3LDM2Mjk4LDM2MzAxLDM2MzA0LDM2MzA2LDM2MzA3LDM2MzA4LDIwOTM1LDIwODg2LDIwODk4LDIwOTAx''@;'; put 'put ''LDM1NzQ0LDM1NzUwLDM1NzUxLDM1NzU0LDM1NzY0LDM1NzY1LDM1NzY3LDM1Nzc4LDM1Nzc5LDM1Nzg3LDM1NzkxLDM1NzkwLDM1Nzk0LDM1Nzk1LDM1Nzk2LDM1Nzk4LDM1ODAwLDM1ODAxLDM1ODA0LDM1ODA3LDM1ODA4LDM1ODEyLDM1ODE2LDM1ODE3LDM1ODIyLDM1ODI0LDM1ODI3LDM1''@;'; put 'put ''ODMwLDM1ODMzLDM1ODM2LDM1ODM5LDM1ODQwLDM1ODQyLDM1ODQ0LDM1ODQ3LDM1ODUyLDM1ODU1LDM1ODU3LDM1ODU4LDM1ODYwLDM1ODYxLDM1ODYyLDM1ODY1LDM1ODY3LDM1ODY0LDM1ODY5LDM1ODcxLDM1ODcyLDM1ODczLDM1ODc3LDM1ODc5LDM1ODgyLDM1ODgzLDM1ODg2LDM1ODg3''@;'; put 'put ''LDM1ODkwLDM1ODkxLDM1ODkzLDM1ODk0LDIxMzUzLDIxMzcwLDM4NDI5LDM4NDM0LDM4NDMzLDM4NDQ5LDM4NDQyLDM4NDYxLDM4NDYwLDM4NDY2LDM4NDczLDM4NDg0LDM4NDk1LDM4NTAzLDM4NTA4LDM4NTE0LDM4NTE2LDM4NTM2LDM4NTQxLDM4NTUxLDM4NTc2LDM3MDE1LDM3MDE5LDM3''@;'; put 'put ''MDIxLDM3MDE3LDM3MDM2LDM3MDI1LDM3MDQ0LDM3MDQzLDM3MDQ2LDM3MDUwLDM2MzA5LDM2MzEyLDM2MzEzLDM2MzE2LDM2MzIwLDM2MzIxLDM2MzIyLDM2MzI1LDM2MzI2LDM2MzI3LDM2MzI5LDM2MzMzLDM2MzM0LDM2MzM2LDM2MzM3LDM2MzM4LDM2MzQwLDM2MzQyLDM2MzQ4LDM2MzUw''@;'; put 'put ''LDM2MzUxLDM2MzUyLDM2MzUzLDM2MzU0LDM2MzU1LDM2MzU2LDM2MzU4LDM2MzU5LDM2MzYwLDM2MzYzLDM2MzY1LDM2MzY2LDM2MzY4LDM2MzY5LDM2MzcwLDM2MzcxLDM2MzczLDM2Mzc0LDM2Mzc1LDM2Mzc2LDM2Mzc3LDM2Mzc4LDM2Mzc5LDM2MzgwLDM2Mzg0LDM2Mzg1LDM2Mzg4LDM2''@;'; put 'put ''Mzg5LDM2MzkwLDM2MzkxLDM2MzkyLDM2Mzk1LDM2Mzk3LDM2NDAwLDM2NDAyLDM2NDAzLDM2NDA0LDM2NDA2LDM2NDA3LDM2NDA4LDM2NDExLDM2NDEyLDM2NDE0LDM2NDE1LDM2NDE5LDM2NDIxLDM2NDIyLDM2NDI4LDM2NDI5LDM2NDMwLDM2NDMxLDM2NDMyLDM2NDM1LDM2NDM2LDM2NDM3''@;'; put 'put ''LDM2NDM4LDM2NDM5LDM2NDQwLDM2NDQyLDM2NDQzLDM2NDQ0LDM2NDQ1LDM2NDQ2LDM2NDQ3LDM2NDQ4LDM2NDQ5LDM2NDUwLDM2NDUxLDM2NDUyLDM2NDUzLDM2NDU1LDM2NDU2LDM2NDU4LDM2NDU5LDM2NDYyLDM2NDY1LDM3MDQ4LDM3MDQwLDM3MDcxLDM3MDYxLDM3MDU0LDM3MDcyLDM3''@;'; put 'put ''MDYwLDM3MDYzLDM3MDc1LDM3MDk0LDM3MDkwLDM3MDg0LDM3MDc5LDM3MDgzLDM3MDk5LDM3MTAzLDM3MTE4LDM3MTI0LDM3MTU0LDM3MTUwLDM3MTU1LDM3MTY5LDM3MTY3LDM3MTc3LDM3MTg3LDM3MTkwLDIxMDA1LDIyODUwLDIxMTU0LDIxMTY0LDIxMTY1LDIxMTgyLDIxNzU5LDIxMjAw''@;'; put 'put ''LDIxMjA2LDIxMjMyLDIxNDcxLDI5MTY2LDMwNjY5LDI0MzA4LDIwOTgxLDIwOTg4LDM5NzI3LDIxNDMwLDI0MzIxLDMwMDQyLDI0MDQ3LDIyMzQ4LDIyNDQxLDIyNDMzLDIyNjU0LDIyNzE2LDIyNzI1LDIyNzM3LDIyMzEzLDIyMzE2LDIyMzE0LDIyMzIzLDIyMzI5LDIyMzE4LDIyMzE5LDIy''@;'; put 'put ''MzY0LDIyMzMxLDIyMzM4LDIyMzc3LDIyNDA1LDIyMzc5LDIyNDA2LDIyMzk2LDIyMzk1LDIyMzc2LDIyMzgxLDIyMzkwLDIyMzg3LDIyNDQ1LDIyNDM2LDIyNDEyLDIyNDUwLDIyNDc5LDIyNDM5LDIyNDUyLDIyNDE5LDIyNDMyLDIyNDg1LDIyNDg4LDIyNDkwLDIyNDg5LDIyNDgyLDIyNDU2''@;'; put 'put ''LDIyNTE2LDIyNTExLDIyNTIwLDIyNTAwLDIyNDkzLDM2NDY3LDM2NDY5LDM2NDcxLDM2NDcyLDM2NDczLDM2NDc0LDM2NDc1LDM2NDc3LDM2NDc4LDM2NDgwLDM2NDgyLDM2NDgzLDM2NDg0LDM2NDg2LDM2NDg4LDM2NDg5LDM2NDkwLDM2NDkxLDM2NDkyLDM2NDkzLDM2NDk0LDM2NDk3LDM2''@;'; put 'put ''NDk4LDM2NDk5LDM2NTAxLDM2NTAyLDM2NTAzLDM2NTA0LDM2NTA1LDM2NTA2LDM2NTA3LDM2NTA5LDM2NTExLDM2NTEyLDM2NTEzLDM2NTE0LDM2NTE1LDM2NTE2LDM2NTE3LDM2NTE4LDM2NTE5LDM2NTIwLDM2NTIxLDM2NTIyLDM2NTI1LDM2NTI2LDM2NTI4LDM2NTI5LDM2NTMxLDM2NTMy''@;'; put 'put ''LDM2NTMzLDM2NTM0LDM2NTM1LDM2NTM2LDM2NTM3LDM2NTM5LDM2NTQwLDM2NTQxLDM2NTQyLDM2NTQzLDM2NTQ0LDM2NTQ1LDM2NTQ2LDM2NTQ3LDM2NTQ4LDM2NTQ5LDM2NTUwLDM2NTUxLDM2NTUyLDM2NTUzLDM2NTU0LDM2NTU1LDM2NTU2LDM2NTU3LDM2NTU5LDM2NTYwLDM2NTYxLDM2''@;'; put 'put ''NTYyLDM2NTYzLDM2NTY0LDM2NTY1LDM2NTY2LDM2NTY3LDM2NTY4LDM2NTY5LDM2NTcwLDM2NTcxLDM2NTcyLDM2NTczLDM2NTc0LDM2NTc1LDM2NTc2LDM2NTc3LDM2NTc4LDM2NTc5LDM2NTgwLDIyNTM5LDIyNTQxLDIyNTI1LDIyNTA5LDIyNTI4LDIyNTU4LDIyNTUzLDIyNTk2LDIyNTYw''@;'; put 'put ''LDIyNjI5LDIyNjM2LDIyNjU3LDIyNjY1LDIyNjgyLDIyNjU2LDM5MzM2LDQwNzI5LDI1MDg3LDMzNDAxLDMzNDA1LDMzNDA3LDMzNDIzLDMzNDE4LDMzNDQ4LDMzNDEyLDMzNDIyLDMzNDI1LDMzNDMxLDMzNDMzLDMzNDUxLDMzNDY0LDMzNDcwLDMzNDU2LDMzNDgwLDMzNDgyLDMzNTA3LDMz''@;'; put 'put ''NDMyLDMzNDYzLDMzNDU0LDMzNDgzLDMzNDg0LDMzNDczLDMzNDQ5LDMzNDYwLDMzNDQxLDMzNDUwLDMzNDM5LDMzNDc2LDMzNDg2LDMzNDQ0LDMzNTA1LDMzNTQ1LDMzNTI3LDMzNTA4LDMzNTUxLDMzNTQzLDMzNTAwLDMzNTI0LDMzNDkwLDMzNDk2LDMzNTQ4LDMzNTMxLDMzNDkxLDMzNTUz''@;'; put 'put ''LDMzNTYyLDMzNTQyLDMzNTU2LDMzNTU3LDMzNTA0LDMzNDkzLDMzNTY0LDMzNjE3LDMzNjI3LDMzNjI4LDMzNTQ0LDMzNjgyLDMzNTk2LDMzNTg4LDMzNTg1LDMzNjkxLDMzNjMwLDMzNTgzLDMzNjE1LDMzNjA3LDMzNjAzLDMzNjMxLDMzNjAwLDMzNTU5LDMzNjMyLDMzNTgxLDMzNTk0LDMz''@;'; put 'put ''NTg3LDMzNjM4LDMzNjM3LDM2NTgxLDM2NTgyLDM2NTgzLDM2NTg0LDM2NTg1LDM2NTg2LDM2NTg3LDM2NTg4LDM2NTg5LDM2NTkwLDM2NTkxLDM2NTkyLDM2NTkzLDM2NTk0LDM2NTk1LDM2NTk2LDM2NTk3LDM2NTk4LDM2NTk5LDM2NjAwLDM2NjAxLDM2NjAyLDM2NjAzLDM2NjA0LDM2NjA1''@;'; put 'put ''LDM2NjA2LDM2NjA3LDM2NjA4LDM2NjA5LDM2NjEwLDM2NjExLDM2NjEyLDM2NjEzLDM2NjE0LDM2NjE1LDM2NjE2LDM2NjE3LDM2NjE4LDM2NjE5LDM2NjIwLDM2NjIxLDM2NjIyLDM2NjIzLDM2NjI0LDM2NjI1LDM2NjI2LDM2NjI3LDM2NjI4LDM2NjI5LDM2NjMwLDM2NjMxLDM2NjMyLDM2''@;'; put 'put ''NjMzLDM2NjM0LDM2NjM1LDM2NjM2LDM2NjM3LDM2NjM4LDM2NjM5LDM2NjQwLDM2NjQxLDM2NjQyLDM2NjQzLDM2NjQ0LDM2NjQ1LDM2NjQ2LDM2NjQ3LDM2NjQ4LDM2NjQ5LDM2NjUwLDM2NjUxLDM2NjUyLDM2NjUzLDM2NjU0LDM2NjU1LDM2NjU2LDM2NjU3LDM2NjU4LDM2NjU5LDM2NjYw''@;'; put 'put ''LDM2NjYxLDM2NjYyLDM2NjYzLDM2NjY0LDM2NjY1LDM2NjY2LDM2NjY3LDM2NjY4LDM2NjY5LDM2NjcwLDM2NjcxLDM2NjcyLDM2NjczLDM2Njc0LDM2Njc1LDM2Njc2LDMzNjQwLDMzNTYzLDMzNjQxLDMzNjQ0LDMzNjQyLDMzNjQ1LDMzNjQ2LDMzNzEyLDMzNjU2LDMzNzE1LDMzNzE2LDMz''@;'; put 'put ''Njk2LDMzNzA2LDMzNjgzLDMzNjkyLDMzNjY5LDMzNjYwLDMzNzE4LDMzNzA1LDMzNjYxLDMzNzIwLDMzNjU5LDMzNjg4LDMzNjk0LDMzNzA0LDMzNzIyLDMzNzI0LDMzNzI5LDMzNzkzLDMzNzY1LDMzNzUyLDIyNTM1LDMzODE2LDMzODAzLDMzNzU3LDMzNzg5LDMzNzUwLDMzODIwLDMzODQ4''@;'; put 'put ''LDMzODA5LDMzNzk4LDMzNzQ4LDMzNzU5LDMzODA3LDMzNzk1LDMzNzg0LDMzNzg1LDMzNzcwLDMzNzMzLDMzNzI4LDMzODMwLDMzNzc2LDMzNzYxLDMzODg0LDMzODczLDMzODgyLDMzODgxLDMzOTA3LDMzOTI3LDMzOTI4LDMzOTE0LDMzOTI5LDMzOTEyLDMzODUyLDMzODYyLDMzODk3LDMz''@;'; put 'put ''OTEwLDMzOTMyLDMzOTM0LDMzODQxLDMzOTAxLDMzOTg1LDMzOTk3LDM0ZTMsMzQwMjIsMzM5ODEsMzQwMDMsMzM5OTQsMzM5ODMsMzM5NzgsMzQwMTYsMzM5NTMsMzM5NzcsMzM5NzIsMzM5NDMsMzQwMjEsMzQwMTksMzQwNjAsMjk5NjUsMzQxMDQsMzQwMzIsMzQxMDUsMzQwNzksMzQxMDYs''@;'; put 'put ''MzY2NzcsMzY2NzgsMzY2NzksMzY2ODAsMzY2ODEsMzY2ODIsMzY2ODMsMzY2ODQsMzY2ODUsMzY2ODYsMzY2ODcsMzY2ODgsMzY2ODksMzY2OTAsMzY2OTEsMzY2OTIsMzY2OTMsMzY2OTQsMzY2OTUsMzY2OTYsMzY2OTcsMzY2OTgsMzY2OTksMzY3MDAsMzY3MDEsMzY3MDIsMzY3MDMsMzY3''@;'; put 'put ''MDQsMzY3MDUsMzY3MDYsMzY3MDcsMzY3MDgsMzY3MDksMzY3MTQsMzY3MzYsMzY3NDgsMzY3NTQsMzY3NjUsMzY3NjgsMzY3NjksMzY3NzAsMzY3NzIsMzY3NzMsMzY3NzQsMzY3NzUsMzY3NzgsMzY3ODAsMzY3ODEsMzY3ODIsMzY3ODMsMzY3ODYsMzY3ODcsMzY3ODgsMzY3ODksMzY3OTEs''@;'; put 'put ''MzY3OTIsMzY3OTQsMzY3OTUsMzY3OTYsMzY3OTksMzY4MDAsMzY4MDMsMzY4MDYsMzY4MDksMzY4MTAsMzY4MTEsMzY4MTIsMzY4MTMsMzY4MTUsMzY4MTgsMzY4MjIsMzY4MjMsMzY4MjYsMzY4MzIsMzY4MzMsMzY4MzUsMzY4MzksMzY4NDQsMzY4NDcsMzY4NDksMzY4NTAsMzY4NTIsMzY4''@;'; put 'put ''NTMsMzY4NTQsMzY4NTgsMzY4NTksMzY4NjAsMzY4NjIsMzY4NjMsMzY4NzEsMzY4NzIsMzY4NzYsMzY4NzgsMzY4ODMsMzY4ODUsMzY4ODgsMzQxMzQsMzQxMDcsMzQwNDcsMzQwNDQsMzQxMzcsMzQxMjAsMzQxNTIsMzQxNDgsMzQxNDIsMzQxNzAsMzA2MjYsMzQxMTUsMzQxNjIsMzQxNzEs''@;'; put 'put ''MzQyMTIsMzQyMTYsMzQxODMsMzQxOTEsMzQxNjksMzQyMjIsMzQyMDQsMzQxODEsMzQyMzMsMzQyMzEsMzQyMjQsMzQyNTksMzQyNDEsMzQyNjgsMzQzMDMsMzQzNDMsMzQzMDksMzQzNDUsMzQzMjYsMzQzNjQsMjQzMTgsMjQzMjgsMjI4NDQsMjI4NDksMzI4MjMsMjI4NjksMjI4NzQsMjI4''@;'; put 'put ''NzIsMjEyNjMsMjM1ODYsMjM1ODksMjM1OTYsMjM2MDQsMjUxNjQsMjUxOTQsMjUyNDcsMjUyNzUsMjUyOTAsMjUzMDYsMjUzMDMsMjUzMjYsMjUzNzgsMjUzMzQsMjU0MDEsMjU0MTksMjU0MTEsMjU1MTcsMjU1OTAsMjU0NTcsMjU0NjYsMjU0ODYsMjU1MjQsMjU0NTMsMjU1MTYsMjU0ODIs''@;'; put 'put ''MjU0NDksMjU1MTgsMjU1MzIsMjU1ODYsMjU1OTIsMjU1NjgsMjU1OTksMjU1NDAsMjU1NjYsMjU1NTAsMjU2ODIsMjU1NDIsMjU1MzQsMjU2NjksMjU2NjUsMjU2MTEsMjU2MjcsMjU2MzIsMjU2MTIsMjU2MzgsMjU2MzMsMjU2OTQsMjU3MzIsMjU3MDksMjU3NTAsMzY4ODksMzY4OTIsMzY4''@;'; put 'put ''OTksMzY5MDAsMzY5MDEsMzY5MDMsMzY5MDQsMzY5MDUsMzY5MDYsMzY5MDcsMzY5MDgsMzY5MTIsMzY5MTMsMzY5MTQsMzY5MTUsMzY5MTYsMzY5MTksMzY5MjEsMzY5MjIsMzY5MjUsMzY5MjcsMzY5MjgsMzY5MzEsMzY5MzMsMzY5MzQsMzY5MzYsMzY5MzcsMzY5MzgsMzY5MzksMzY5NDAs''@;'; put 'put ''MzY5NDIsMzY5NDgsMzY5NDksMzY5NTAsMzY5NTMsMzY5NTQsMzY5NTYsMzY5NTcsMzY5NTgsMzY5NTksMzY5NjAsMzY5NjEsMzY5NjQsMzY5NjYsMzY5NjcsMzY5NjksMzY5NzAsMzY5NzEsMzY5NzIsMzY5NzUsMzY5NzYsMzY5NzcsMzY5NzgsMzY5NzksMzY5ODIsMzY5ODMsMzY5ODQsMzY5''@;'; put 'put ''ODUsMzY5ODYsMzY5ODcsMzY5ODgsMzY5OTAsMzY5OTMsMzY5OTYsMzY5OTcsMzY5OTgsMzY5OTksMzcwMDEsMzcwMDIsMzcwMDQsMzcwMDUsMzcwMDYsMzcwMDcsMzcwMDgsMzcwMTAsMzcwMTIsMzcwMTQsMzcwMTYsMzcwMTgsMzcwMjAsMzcwMjIsMzcwMjMsMzcwMjQsMzcwMjgsMzcwMjks''@;'; put 'put ''MzcwMzEsMzcwMzIsMzcwMzMsMzcwMzUsMzcwMzcsMzcwNDIsMzcwNDcsMzcwNTIsMzcwNTMsMzcwNTUsMzcwNTYsMjU3MjIsMjU3ODMsMjU3ODQsMjU3NTMsMjU3ODYsMjU3OTIsMjU4MDgsMjU4MTUsMjU4MjgsMjU4MjYsMjU4NjUsMjU4OTMsMjU5MDIsMjQzMzEsMjQ1MzAsMjk5NzcsMjQz''@;'; put 'put ''MzcsMjEzNDMsMjE0ODksMjE1MDEsMjE0ODEsMjE0ODAsMjE0OTksMjE1MjIsMjE1MjYsMjE1MTAsMjE1NzksMjE1ODYsMjE1ODcsMjE1ODgsMjE1OTAsMjE1NzEsMjE1MzcsMjE1OTEsMjE1OTMsMjE1MzksMjE1NTQsMjE2MzQsMjE2NTIsMjE2MjMsMjE2MTcsMjE2MDQsMjE2NTgsMjE2NTks''@;'; put 'put ''MjE2MzYsMjE2MjIsMjE2MDYsMjE2NjEsMjE3MTIsMjE2NzcsMjE2OTgsMjE2ODQsMjE3MTQsMjE2NzEsMjE2NzAsMjE3MTUsMjE3MTYsMjE2MTgsMjE2NjcsMjE3MTcsMjE2OTEsMjE2OTUsMjE3MDgsMjE3MjEsMjE3MjIsMjE3MjQsMjE2NzMsMjE2NzQsMjE2NjgsMjE3MjUsMjE3MTEsMjE3''@;'; put 'put ''MjYsMjE3ODcsMjE3MzUsMjE3OTIsMjE3NTcsMjE3ODAsMjE3NDcsMjE3OTQsMjE3OTUsMjE3NzUsMjE3NzcsMjE3OTksMjE4MDIsMjE4NjMsMjE5MDMsMjE5NDEsMjE4MzMsMjE4NjksMjE4MjUsMjE4NDUsMjE4MjMsMjE4NDAsMjE4MjAsMzcwNTgsMzcwNTksMzcwNjIsMzcwNjQsMzcwNjUs''@;'; put 'put ''MzcwNjcsMzcwNjgsMzcwNjksMzcwNzQsMzcwNzYsMzcwNzcsMzcwNzgsMzcwODAsMzcwODEsMzcwODIsMzcwODYsMzcwODcsMzcwODgsMzcwOTEsMzcwOTIsMzcwOTMsMzcwOTcsMzcwOTgsMzcxMDAsMzcxMDIsMzcxMDQsMzcxMDUsMzcxMDYsMzcxMDcsMzcxMDksMzcxMTAsMzcxMTEsMzcx''@;'; put 'put ''MTMsMzcxMTQsMzcxMTUsMzcxMTYsMzcxMTksMzcxMjAsMzcxMjEsMzcxMjMsMzcxMjUsMzcxMjYsMzcxMjcsMzcxMjgsMzcxMjksMzcxMzAsMzcxMzEsMzcxMzIsMzcxMzMsMzcxMzQsMzcxMzUsMzcxMzYsMzcxMzcsMzcxMzgsMzcxMzksMzcxNDAsMzcxNDEsMzcxNDIsMzcxNDMsMzcxNDQs''@;'; put 'put ''MzcxNDYsMzcxNDcsMzcxNDgsMzcxNDksMzcxNTEsMzcxNTIsMzcxNTMsMzcxNTYsMzcxNTcsMzcxNTgsMzcxNTksMzcxNjAsMzcxNjEsMzcxNjIsMzcxNjMsMzcxNjQsMzcxNjUsMzcxNjYsMzcxNjgsMzcxNzAsMzcxNzEsMzcxNzIsMzcxNzMsMzcxNzQsMzcxNzUsMzcxNzYsMzcxNzgsMzcx''@;'; put 'put ''NzksMzcxODAsMzcxODEsMzcxODIsMzcxODMsMzcxODQsMzcxODUsMzcxODYsMzcxODgsMjE4MTUsMjE4NDYsMjE4NzcsMjE4NzgsMjE4NzksMjE4MTEsMjE4MDgsMjE4NTIsMjE4OTksMjE5NzAsMjE4OTEsMjE5MzcsMjE5NDUsMjE4OTYsMjE4ODksMjE5MTksMjE4ODYsMjE5NzQsMjE5MDUs''@;'; put 'put ''MjE4ODMsMjE5ODMsMjE5NDksMjE5NTAsMjE5MDgsMjE5MTMsMjE5OTQsMjIwMDcsMjE5NjEsMjIwNDcsMjE5NjksMjE5OTUsMjE5OTYsMjE5NzIsMjE5OTAsMjE5ODEsMjE5NTYsMjE5OTksMjE5ODksMjIwMDIsMjIwMDMsMjE5NjQsMjE5NjUsMjE5OTIsMjIwMDUsMjE5ODgsMzY3NTYsMjIw''@;'; put 'put ''NDYsMjIwMjQsMjIwMjgsMjIwMTcsMjIwNTIsMjIwNTEsMjIwMTQsMjIwMTYsMjIwNTUsMjIwNjEsMjIxMDQsMjIwNzMsMjIxMDMsMjIwNjAsMjIwOTMsMjIxMTQsMjIxMDUsMjIxMDgsMjIwOTIsMjIxMDAsMjIxNTAsMjIxMTYsMjIxMjksMjIxMjMsMjIxMzksMjIxNDAsMjIxNDksMjIxNjMs''@;'; put 'put ''MjIxOTEsMjIyMjgsMjIyMzEsMjIyMzcsMjIyNDEsMjIyNjEsMjIyNTEsMjIyNjUsMjIyNzEsMjIyNzYsMjIyODIsMjIyODEsMjIzMDAsMjQwNzksMjQwODksMjQwODQsMjQwODEsMjQxMTMsMjQxMjMsMjQxMjQsMzcxODksMzcxOTEsMzcxOTIsMzcyMDEsMzcyMDMsMzcyMDQsMzcyMDUsMzcy''@;'; put 'put ''MDYsMzcyMDgsMzcyMDksMzcyMTEsMzcyMTIsMzcyMTUsMzcyMTYsMzcyMjIsMzcyMjMsMzcyMjQsMzcyMjcsMzcyMjksMzcyMzUsMzcyNDIsMzcyNDMsMzcyNDQsMzcyNDgsMzcyNDksMzcyNTAsMzcyNTEsMzcyNTIsMzcyNTQsMzcyNTYsMzcyNTgsMzcyNjIsMzcyNjMsMzcyNjcsMzcyNjgs''@;'; put 'put ''MzcyNjksMzcyNzAsMzcyNzEsMzcyNzIsMzcyNzMsMzcyNzYsMzcyNzcsMzcyNzgsMzcyNzksMzcyODAsMzcyODEsMzcyODQsMzcyODUsMzcyODYsMzcyODcsMzcyODgsMzcyODksMzcyOTEsMzcyOTIsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDMsMzczMDQsMzczMDUsMzcz''@;'; put 'put ''MDcsMzczMDgsMzczMDksMzczMTAsMzczMTEsMzczMTIsMzczMTMsMzczMTQsMzczMTUsMzczMTYsMzczMTcsMzczMTgsMzczMjAsMzczMjMsMzczMjgsMzczMzAsMzczMzEsMzczMzIsMzczMzMsMzczMzQsMzczMzUsMzczMzYsMzczMzcsMzczMzgsMzczMzksMzczNDEsMzczNDIsMzczNDMs''@;'; put 'put ''MzczNDQsMzczNDUsMzczNDYsMzczNDcsMzczNDgsMzczNDksMjQxMTksMjQxMzIsMjQxNDgsMjQxNTUsMjQxNTgsMjQxNjEsMjM2OTIsMjM2NzQsMjM2OTMsMjM2OTYsMjM3MDIsMjM2ODgsMjM3MDQsMjM3MDUsMjM2OTcsMjM3MDYsMjM3MDgsMjM3MzMsMjM3MTQsMjM3NDEsMjM3MjQsMjM3''@;'; put 'put ''MjMsMjM3MjksMjM3MTUsMjM3NDUsMjM3MzUsMjM3NDgsMjM3NjIsMjM3ODAsMjM3NTUsMjM3ODEsMjM4MTAsMjM4MTEsMjM4NDcsMjM4NDYsMjM4NTQsMjM4NDQsMjM4MzgsMjM4MTQsMjM4MzUsMjM4OTYsMjM4NzAsMjM4NjAsMjM4NjksMjM5MTYsMjM4OTksMjM5MTksMjM5MDEsMjM5MTUs''@;'; put 'put ''MjM4ODMsMjM4ODIsMjM5MTMsMjM5MjQsMjM5MzgsMjM5NjEsMjM5NjUsMzU5NTUsMjM5OTEsMjQwMDUsMjQ0MzUsMjQ0MzksMjQ0NTAsMjQ0NTUsMjQ0NTcsMjQ0NjAsMjQ0NjksMjQ0NzMsMjQ0NzYsMjQ0ODgsMjQ0OTMsMjQ1MDEsMjQ1MDgsMzQ5MTQsMjQ0MTcsMjkzNTcsMjkzNjAsMjkz''@;'; put 'put ''NjQsMjkzNjcsMjkzNjgsMjkzNzksMjkzNzcsMjkzOTAsMjkzODksMjkzOTQsMjk0MTYsMjk0MjMsMjk0MTcsMjk0MjYsMjk0MjgsMjk0MzEsMjk0NDEsMjk0MjcsMjk0NDMsMjk0MzQsMzczNTAsMzczNTEsMzczNTIsMzczNTMsMzczNTQsMzczNTUsMzczNTYsMzczNTcsMzczNTgsMzczNTks''@;'; put 'put ''MzczNjAsMzczNjEsMzczNjIsMzczNjMsMzczNjQsMzczNjUsMzczNjYsMzczNjcsMzczNjgsMzczNjksMzczNzAsMzczNzEsMzczNzIsMzczNzMsMzczNzQsMzczNzUsMzczNzYsMzczNzcsMzczNzgsMzczNzksMzczODAsMzczODEsMzczODIsMzczODMsMzczODQsMzczODUsMzczODYsMzcz''@;'; put 'put ''ODcsMzczODgsMzczODksMzczOTAsMzczOTEsMzczOTIsMzczOTMsMzczOTQsMzczOTUsMzczOTYsMzczOTcsMzczOTgsMzczOTksMzc0MDAsMzc0MDEsMzc0MDIsMzc0MDMsMzc0MDQsMzc0MDUsMzc0MDYsMzc0MDcsMzc0MDgsMzc0MDksMzc0MTAsMzc0MTEsMzc0MTIsMzc0MTMsMzc0MTQs''@;'; put 'put ''Mzc0MTUsMzc0MTYsMzc0MTcsMzc0MTgsMzc0MTksMzc0MjAsMzc0MjEsMzc0MjIsMzc0MjMsMzc0MjQsMzc0MjUsMzc0MjYsMzc0MjcsMzc0MjgsMzc0MjksMzc0MzAsMzc0MzEsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzUsMzc0MzYsMzc0MzcsMzc0MzgsMzc0MzksMzc0NDAsMzc0NDEsMzc0''@;'; put 'put ''NDIsMzc0NDMsMzc0NDQsMzc0NDUsMjk0MzUsMjk0NjMsMjk0NTksMjk0NzMsMjk0NTAsMjk0NzAsMjk0NjksMjk0NjEsMjk0NzQsMjk0OTcsMjk0NzcsMjk0ODQsMjk0OTYsMjk0ODksMjk1MjAsMjk1MTcsMjk1MjcsMjk1MzYsMjk1NDgsMjk1NTEsMjk1NjYsMzMzMDcsMjI4MjEsMzkxNDMs''@;'; put 'put ''MjI4MjAsMjI3ODYsMzkyNjcsMzkyNzEsMzkyNzIsMzkyNzMsMzkyNzQsMzkyNzUsMzkyNzYsMzkyODQsMzkyODcsMzkyOTMsMzkyOTYsMzkzMDAsMzkzMDMsMzkzMDYsMzkzMDksMzkzMTIsMzkzMTMsMzkzMTUsMzkzMTYsMzkzMTcsMjQxOTIsMjQyMDksMjQyMDMsMjQyMTQsMjQyMjksMjQy''@;'; put 'put ''MjQsMjQyNDksMjQyNDUsMjQyNTQsMjQyNDMsMzYxNzksMjQyNzQsMjQyNzMsMjQyODMsMjQyOTYsMjQyOTgsMzMyMTAsMjQ1MTYsMjQ1MjEsMjQ1MzQsMjQ1MjcsMjQ1NzksMjQ1NTgsMjQ1ODAsMjQ1NDUsMjQ1NDgsMjQ1NzQsMjQ1ODEsMjQ1ODIsMjQ1NTQsMjQ1NTcsMjQ1NjgsMjQ2MDEs''@;'; put 'put ''MjQ2MjksMjQ2MTQsMjQ2MDMsMjQ1OTEsMjQ1ODksMjQ2MTcsMjQ2MTksMjQ1ODYsMjQ2MzksMjQ2MDksMjQ2OTYsMjQ2OTcsMjQ2OTksMjQ2OTgsMjQ2NDIsMzc0NDYsMzc0NDcsMzc0NDgsMzc0NDksMzc0NTAsMzc0NTEsMzc0NTIsMzc0NTMsMzc0NTQsMzc0NTUsMzc0NTYsMzc0NTcsMzc0''@;'; put 'put ''NTgsMzc0NTksMzc0NjAsMzc0NjEsMzc0NjIsMzc0NjMsMzc0NjQsMzc0NjUsMzc0NjYsMzc0NjcsMzc0NjgsMzc0NjksMzc0NzAsMzc0NzEsMzc0NzIsMzc0NzMsMzc0NzQsMzc0NzUsMzc0NzYsMzc0NzcsMzc0NzgsMzc0NzksMzc0ODAsMzc0ODEsMzc0ODIsMzc0ODMsMzc0ODQsMzc0ODUs''@;'; put 'put ''Mzc0ODYsMzc0ODcsMzc0ODgsMzc0ODksMzc0OTAsMzc0OTEsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTgsMzc0OTksMzc1MDAsMzc1MDEsMzc1MDIsMzc1MDMsMzc1MDQsMzc1MDUsMzc1MDYsMzc1MDcsMzc1MDgsMzc1MDksMzc1MTAsMzc1MTEsMzc1MTIsMzc1MTMsMzc1''@;'; put 'put ''MTQsMzc1MTUsMzc1MTYsMzc1MTcsMzc1MTksMzc1MjAsMzc1MjEsMzc1MjIsMzc1MjMsMzc1MjQsMzc1MjUsMzc1MjYsMzc1MjcsMzc1MjgsMzc1MjksMzc1MzAsMzc1MzEsMzc1MzIsMzc1MzMsMzc1MzQsMzc1MzUsMzc1MzYsMzc1MzcsMzc1MzgsMzc1MzksMzc1NDAsMzc1NDEsMzc1NDIs''@;'; put 'put ''Mzc1NDMsMjQ2ODIsMjQ3MDEsMjQ3MjYsMjQ3MzAsMjQ3NDksMjQ3MzMsMjQ3MDcsMjQ3MjIsMjQ3MTYsMjQ3MzEsMjQ4MTIsMjQ3NjMsMjQ3NTMsMjQ3OTcsMjQ3OTIsMjQ3NzQsMjQ3OTQsMjQ3NTYsMjQ4NjQsMjQ4NzAsMjQ4NTMsMjQ4NjcsMjQ4MjAsMjQ4MzIsMjQ4NDYsMjQ4NzUsMjQ5''@;'; put 'put ''MDYsMjQ5NDksMjUwMDQsMjQ5ODAsMjQ5OTksMjUwMTUsMjUwNDQsMjUwNzcsMjQ1NDEsMzg1NzksMzgzNzcsMzgzNzksMzgzODUsMzgzODcsMzgzODksMzgzOTAsMzgzOTYsMzgzOTgsMzg0MDMsMzg0MDQsMzg0MDYsMzg0MDgsMzg0MTAsMzg0MTEsMzg0MTIsMzg0MTMsMzg0MTUsMzg0MTgs''@;'; put 'put ''Mzg0MjEsMzg0MjIsMzg0MjMsMzg0MjUsMzg0MjYsMjAwMTIsMjkyNDcsMjUxMDksMjc3MDEsMjc3MzIsMjc3NDAsMjc3MjIsMjc4MTEsMjc3ODEsMjc3OTIsMjc3OTYsMjc3ODgsMjc3NTIsMjc3NTMsMjc3NjQsMjc3NjYsMjc3ODIsMjc4MTcsMjc4NTYsMjc4NjAsMjc4MjEsMjc4OTUsMjc4''@;'; put 'put ''OTYsMjc4ODksMjc4NjMsMjc4MjYsMjc4NzIsMjc4NjIsMjc4OTgsMjc4ODMsMjc4ODYsMjc4MjUsMjc4NTksMjc4ODcsMjc5MDIsMzc1NDQsMzc1NDUsMzc1NDYsMzc1NDcsMzc1NDgsMzc1NDksMzc1NTEsMzc1NTIsMzc1NTMsMzc1NTQsMzc1NTUsMzc1NTYsMzc1NTcsMzc1NTgsMzc1NTks''@;'; put 'put ''Mzc1NjAsMzc1NjEsMzc1NjIsMzc1NjMsMzc1NjQsMzc1NjUsMzc1NjYsMzc1NjcsMzc1NjgsMzc1NjksMzc1NzAsMzc1NzEsMzc1NzIsMzc1NzMsMzc1NzQsMzc1NzUsMzc1NzcsMzc1NzgsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1ODMsMzc1ODQsMzc1ODUsMzc1ODYsMzc1ODcsMzc1''@;'; put 'put ''ODgsMzc1ODksMzc1OTAsMzc1OTEsMzc1OTIsMzc1OTMsMzc1OTQsMzc1OTUsMzc1OTYsMzc1OTcsMzc1OTgsMzc1OTksMzc2MDAsMzc2MDEsMzc2MDIsMzc2MDMsMzc2MDQsMzc2MDUsMzc2MDYsMzc2MDcsMzc2MDgsMzc2MDksMzc2MTAsMzc2MTEsMzc2MTIsMzc2MTMsMzc2MTQsMzc2MTUs''@;'; put 'put ''Mzc2MTYsMzc2MTcsMzc2MTgsMzc2MTksMzc2MjAsMzc2MjEsMzc2MjIsMzc2MjMsMzc2MjQsMzc2MjUsMzc2MjYsMzc2MjcsMzc2MjgsMzc2MjksMzc2MzAsMzc2MzEsMzc2MzIsMzc2MzMsMzc2MzQsMzc2MzUsMzc2MzYsMzc2MzcsMzc2MzgsMzc2MzksMzc2NDAsMzc2NDEsMjc5NjEsMjc5''@;'; put 'put ''NDMsMjc5MTYsMjc5NzEsMjc5NzYsMjc5MTEsMjc5MDgsMjc5MjksMjc5MTgsMjc5NDcsMjc5ODEsMjc5NTAsMjc5NTcsMjc5MzAsMjc5ODMsMjc5ODYsMjc5ODgsMjc5NTUsMjgwNDksMjgwMTUsMjgwNjIsMjgwNjQsMjc5OTgsMjgwNTEsMjgwNTIsMjc5OTYsMjhlMywyODAyOCwyODAwMywy''@;'; put 'put ''ODE4NiwyODEwMywyODEwMSwyODEyNiwyODE3NCwyODA5NSwyODEyOCwyODE3NywyODEzNCwyODEyNSwyODEyMSwyODE4MiwyODA3NSwyODE3MiwyODA3OCwyODIwMywyODI3MCwyODIzOCwyODI2NywyODMzOCwyODI1NSwyODI5NCwyODI0MywyODI0NCwyODIxMCwyODE5NywyODIyOCwyODM4''@;'; put 'put ''MywyODMzNywyODMxMiwyODM4NCwyODQ2MSwyODM4NiwyODMyNSwyODMyNywyODM0OSwyODM0NywyODM0MywyODM3NSwyODM0MCwyODM2NywyODMwMywyODM1NCwyODMxOSwyODUxNCwyODQ4NiwyODQ4NywyODQ1MiwyODQzNywyODQwOSwyODQ2MywyODQ3MCwyODQ5MSwyODUzMiwyODQ1OCwy''@;'; put 'put ''ODQyNSwyODQ1NywyODU1MywyODU1NywyODU1NiwyODUzNiwyODUzMCwyODU0MCwyODUzOCwyODYyNSwzNzY0MiwzNzY0MywzNzY0NCwzNzY0NSwzNzY0NiwzNzY0NywzNzY0OCwzNzY0OSwzNzY1MCwzNzY1MSwzNzY1MiwzNzY1MywzNzY1NCwzNzY1NSwzNzY1NiwzNzY1NywzNzY1OCwzNzY1''@;'; put 'put ''OSwzNzY2MCwzNzY2MSwzNzY2MiwzNzY2MywzNzY2NCwzNzY2NSwzNzY2NiwzNzY2NywzNzY2OCwzNzY2OSwzNzY3MCwzNzY3MSwzNzY3MiwzNzY3MywzNzY3NCwzNzY3NSwzNzY3NiwzNzY3NywzNzY3OCwzNzY3OSwzNzY4MCwzNzY4MSwzNzY4MiwzNzY4MywzNzY4NCwzNzY4NSwzNzY4Niwz''@;'; put 'put ''NzY4NywzNzY4OCwzNzY4OSwzNzY5MCwzNzY5MSwzNzY5MiwzNzY5MywzNzY5NSwzNzY5NiwzNzY5NywzNzY5OCwzNzY5OSwzNzcwMCwzNzcwMSwzNzcwMiwzNzcwMywzNzcwNCwzNzcwNSwzNzcwNiwzNzcwNywzNzcwOCwzNzcwOSwzNzcxMCwzNzcxMSwzNzcxMiwzNzcxMywzNzcxNCwzNzcx''@;'; put 'put ''NSwzNzcxNiwzNzcxNywzNzcxOCwzNzcxOSwzNzcyMCwzNzcyMSwzNzcyMiwzNzcyMywzNzcyNCwzNzcyNSwzNzcyNiwzNzcyNywzNzcyOCwzNzcyOSwzNzczMCwzNzczMSwzNzczMiwzNzczMywzNzczNCwzNzczNSwzNzczNiwzNzczNywzNzczOSwyODYxNywyODU4MywyODYwMSwyODU5OCwy''@;'; put 'put ''ODYxMCwyODY0MSwyODY1NCwyODYzOCwyODY0MCwyODY1NSwyODY5OCwyODcwNywyODY5OSwyODcyOSwyODcyNSwyODc1MSwyODc2NiwyMzQyNCwyMzQyOCwyMzQ0NSwyMzQ0MywyMzQ2MSwyMzQ4MCwyOTk5OSwzOTU4MiwyNTY1MiwyMzUyNCwyMzUzNCwzNTEyMCwyMzUzNiwzNjQyMywzNTU5''@;'; put 'put ''MSwzNjc5MCwzNjgxOSwzNjgyMSwzNjgzNywzNjg0NiwzNjgzNiwzNjg0MSwzNjgzOCwzNjg1MSwzNjg0MCwzNjg2OSwzNjg2OCwzNjg3NSwzNjkwMiwzNjg4MSwzNjg3NywzNjg4NiwzNjg5NywzNjkxNywzNjkxOCwzNjkwOSwzNjkxMSwzNjkzMiwzNjk0NSwzNjk0NiwzNjk0NCwzNjk2OCwz''@;'; put 'put ''Njk1MiwzNjk2MiwzNjk1NSwyNjI5NywzNjk4MCwzNjk4OSwzNjk5NCwzN2UzLDM2OTk1LDM3MDAzLDI0NDAwLDI0NDA3LDI0NDA2LDI0NDA4LDIzNjExLDIxNjc1LDIzNjMyLDIzNjQxLDIzNDA5LDIzNjUxLDIzNjU0LDMyNzAwLDI0MzYyLDI0MzYxLDI0MzY1LDMzMzk2LDI0MzgwLDM5NzM5''@;'; put 'put ''LDIzNjYyLDIyOTEzLDIyOTE1LDIyOTI1LDIyOTUzLDIyOTU0LDIyOTQ3LDM3NzQwLDM3NzQxLDM3NzQyLDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ2LDM3NzQ3LDM3NzQ4LDM3NzQ5LDM3NzUwLDM3NzUxLDM3NzUyLDM3NzUzLDM3NzU0LDM3NzU1LDM3NzU2LDM3NzU3LDM3NzU4LDM3NzU5LDM3''@;'; put 'put ''NzYwLDM3NzYxLDM3NzYyLDM3NzYzLDM3NzY0LDM3NzY1LDM3NzY2LDM3NzY3LDM3NzY4LDM3NzY5LDM3NzcwLDM3NzcxLDM3NzcyLDM3NzczLDM3Nzc0LDM3Nzc2LDM3Nzc3LDM3Nzc4LDM3Nzc5LDM3NzgwLDM3NzgxLDM3NzgyLDM3NzgzLDM3Nzg0LDM3Nzg1LDM3Nzg2LDM3Nzg3LDM3Nzg4''@;'; put 'put ''LDM3Nzg5LDM3NzkwLDM3NzkxLDM3NzkyLDM3NzkzLDM3Nzk0LDM3Nzk1LDM3Nzk2LDM3Nzk3LDM3Nzk4LDM3Nzk5LDM3ODAwLDM3ODAxLDM3ODAyLDM3ODAzLDM3ODA0LDM3ODA1LDM3ODA2LDM3ODA3LDM3ODA4LDM3ODA5LDM3ODEwLDM3ODExLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE1LDM3''@;'; put 'put ''ODE2LDM3ODE3LDM3ODE4LDM3ODE5LDM3ODIwLDM3ODIxLDM3ODIyLDM3ODIzLDM3ODI0LDM3ODI1LDM3ODI2LDM3ODI3LDM3ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMyLDM3ODMzLDM3ODM1LDM3ODM2LDM3ODM3LDIyOTM1LDIyOTg2LDIyOTU1LDIyOTQyLDIyOTQ4LDIyOTk0LDIyOTYy''@;'; put 'put ''LDIyOTU5LDIyOTk5LDIyOTc0LDIzMDQ1LDIzMDQ2LDIzMDA1LDIzMDQ4LDIzMDExLDIzZTMsMjMwMzMsMjMwNTIsMjMwNDksMjMwOTAsMjMwOTIsMjMwNTcsMjMwNzUsMjMwNTksMjMxMDQsMjMxNDMsMjMxMTQsMjMxMjUsMjMxMDAsMjMxMzgsMjMxNTcsMzMwMDQsMjMyMTAsMjMxOTUsMjMx''@;'; put 'put ''NTksMjMxNjIsMjMyMzAsMjMyNzUsMjMyMTgsMjMyNTAsMjMyNTIsMjMyMjQsMjMyNjQsMjMyNjcsMjMyODEsMjMyNTQsMjMyNzAsMjMyNTYsMjMyNjAsMjMzMDUsMjMzMTksMjMzMTgsMjMzNDYsMjMzNTEsMjMzNjAsMjM1NzMsMjM1ODAsMjMzODYsMjMzOTcsMjM0MTEsMjMzNzcsMjMzNzks''@;'; put 'put ''MjMzOTQsMzk1NDEsMzk1NDMsMzk1NDQsMzk1NDYsMzk1NTEsMzk1NDksMzk1NTIsMzk1NTMsMzk1NTcsMzk1NjAsMzk1NjIsMzk1NjgsMzk1NzAsMzk1NzEsMzk1NzQsMzk1NzYsMzk1NzksMzk1ODAsMzk1ODEsMzk1ODMsMzk1ODQsMzk1ODYsMzk1ODcsMzk1ODksMzk1OTEsMzI0MTUsMzI0''@;'; put 'put ''MTcsMzI0MTksMzI0MjEsMzI0MjQsMzI0MjUsMzc4MzgsMzc4MzksMzc4NDAsMzc4NDEsMzc4NDIsMzc4NDMsMzc4NDQsMzc4NDUsMzc4NDcsMzc4NDgsMzc4NDksMzc4NTAsMzc4NTEsMzc4NTIsMzc4NTMsMzc4NTQsMzc4NTUsMzc4NTYsMzc4NTcsMzc4NTgsMzc4NTksMzc4NjAsMzc4NjEs''@;'; put 'put ''Mzc4NjIsMzc4NjMsMzc4NjQsMzc4NjUsMzc4NjYsMzc4NjcsMzc4NjgsMzc4NjksMzc4NzAsMzc4NzEsMzc4NzIsMzc4NzMsMzc4NzQsMzc4NzUsMzc4NzYsMzc4NzcsMzc4NzgsMzc4NzksMzc4ODAsMzc4ODEsMzc4ODIsMzc4ODMsMzc4ODQsMzc4ODUsMzc4ODYsMzc4ODcsMzc4ODgsMzc4''@;'; put 'put ''ODksMzc4OTAsMzc4OTEsMzc4OTIsMzc4OTMsMzc4OTQsMzc4OTUsMzc4OTYsMzc4OTcsMzc4OTgsMzc4OTksMzc5MDAsMzc5MDEsMzc5MDIsMzc5MDMsMzc5MDQsMzc5MDUsMzc5MDYsMzc5MDcsMzc5MDgsMzc5MDksMzc5MTAsMzc5MTEsMzc5MTIsMzc5MTMsMzc5MTQsMzc5MTUsMzc5MTYs''@;'; put 'put ''Mzc5MTcsMzc5MTgsMzc5MTksMzc5MjAsMzc5MjEsMzc5MjIsMzc5MjMsMzc5MjQsMzc5MjUsMzc5MjYsMzc5MjcsMzc5MjgsMzc5MjksMzc5MzAsMzc5MzEsMzc5MzIsMzc5MzMsMzc5MzQsMzI0MjksMzI0MzIsMzI0NDYsMzI0NDgsMzI0NDksMzI0NTAsMzI0NTcsMzI0NTksMzI0NjAsMzI0''@;'; put 'put ''NjQsMzI0NjgsMzI0NzEsMzI0NzUsMzI0ODAsMzI0ODEsMzI0ODgsMzI0OTEsMzI0OTQsMzI0OTUsMzI0OTcsMzI0OTgsMzI1MjUsMzI1MDIsMzI1MDYsMzI1MDcsMzI1MTAsMzI1MTMsMzI1MTQsMzI1MTUsMzI1MTksMzI1MjAsMzI1MjMsMzI1MjQsMzI1MjcsMzI1MjksMzI1MzAsMzI1MzUs''@;'; put 'put ''MzI1MzcsMzI1NDAsMzI1MzksMzI1NDMsMzI1NDUsMzI1NDYsMzI1NDcsMzI1NDgsMzI1NDksMzI1NTAsMzI1NTEsMzI1NTQsMzI1NTUsMzI1NTYsMzI1NTcsMzI1NTksMzI1NjAsMzI1NjEsMzI1NjIsMzI1NjMsMzI1NjUsMjQxODYsMzAwNzksMjQwMjcsMzAwMTQsMzcwMTMsMjk1ODIsMjk1''@;'; put 'put ''ODUsMjk2MTQsMjk2MDIsMjk1OTksMjk2NDcsMjk2MzQsMjk2NDksMjk2MjMsMjk2MTksMjk2MzIsMjk2NDEsMjk2NDAsMjk2NjksMjk2NTcsMzkwMzYsMjk3MDYsMjk2NzMsMjk2NzEsMjk2NjIsMjk2MjYsMjk2ODIsMjk3MTEsMjk3MzgsMjk3ODcsMjk3MzQsMjk3MzMsMjk3MzYsMjk3NDQs''@;'; put 'put ''Mjk3NDIsMjk3NDAsMzc5MzUsMzc5MzYsMzc5MzcsMzc5MzgsMzc5MzksMzc5NDAsMzc5NDEsMzc5NDIsMzc5NDMsMzc5NDQsMzc5NDUsMzc5NDYsMzc5NDcsMzc5NDgsMzc5NDksMzc5NTEsMzc5NTIsMzc5NTMsMzc5NTQsMzc5NTUsMzc5NTYsMzc5NTcsMzc5NTgsMzc5NTksMzc5NjAsMzc5''@;'; put 'put ''NjEsMzc5NjIsMzc5NjMsMzc5NjQsMzc5NjUsMzc5NjYsMzc5NjcsMzc5NjgsMzc5NjksMzc5NzAsMzc5NzEsMzc5NzIsMzc5NzMsMzc5NzQsMzc5NzUsMzc5NzYsMzc5NzcsMzc5NzgsMzc5NzksMzc5ODAsMzc5ODEsMzc5ODIsMzc5ODMsMzc5ODQsMzc5ODUsMzc5ODYsMzc5ODcsMzc5ODgs''@;'; put 'put ''Mzc5ODksMzc5OTAsMzc5OTEsMzc5OTIsMzc5OTMsMzc5OTQsMzc5OTYsMzc5OTcsMzc5OTgsMzc5OTksMzhlMywzODAwMSwzODAwMiwzODAwMywzODAwNCwzODAwNSwzODAwNiwzODAwNywzODAwOCwzODAwOSwzODAxMCwzODAxMSwzODAxMiwzODAxMywzODAxNCwzODAxNSwzODAxNiwzODAx''@;'; put 'put ''NywzODAxOCwzODAxOSwzODAyMCwzODAzMywzODAzOCwzODA0MCwzODA4NywzODA5NSwzODA5OSwzODEwMCwzODEwNiwzODExOCwzODEzOSwzODE3MiwzODE3NiwyOTcyMywyOTcyMiwyOTc2MSwyOTc4OCwyOTc4MywyOTc4MSwyOTc4NSwyOTgxNSwyOTgwNSwyOTgyMiwyOTg1MiwyOTgzOCwy''@;'; put 'put ''OTgyNCwyOTgyNSwyOTgzMSwyOTgzNSwyOTg1NCwyOTg2NCwyOTg2NSwyOTg0MCwyOTg2MywyOTkwNiwyOTg4MiwzODg5MCwzODg5MSwzODg5MiwyNjQ0NCwyNjQ1MSwyNjQ2MiwyNjQ0MCwyNjQ3MywyNjUzMywyNjUwMywyNjQ3NCwyNjQ4MywyNjUyMCwyNjUzNSwyNjQ4NSwyNjUzNiwyNjUy''@;'; put 'put ''NiwyNjU0MSwyNjUwNywyNjQ4NywyNjQ5MiwyNjYwOCwyNjYzMywyNjU4NCwyNjYzNCwyNjYwMSwyNjU0NCwyNjYzNiwyNjU4NSwyNjU0OSwyNjU4NiwyNjU0NywyNjU4OSwyNjYyNCwyNjU2MywyNjU1MiwyNjU5NCwyNjYzOCwyNjU2MSwyNjYyMSwyNjY3NCwyNjY3NSwyNjcyMCwyNjcyMSwy''@;'; put 'put ''NjcwMiwyNjcyMiwyNjY5MiwyNjcyNCwyNjc1NSwyNjY1MywyNjcwOSwyNjcyNiwyNjY4OSwyNjcyNywyNjY4OCwyNjY4NiwyNjY5OCwyNjY5NywyNjY2NSwyNjgwNSwyNjc2NywyNjc0MCwyNjc0MywyNjc3MSwyNjczMSwyNjgxOCwyNjk5MCwyNjg3NiwyNjkxMSwyNjkxMiwyNjg3MywzODE4''@;'; put 'put ''MywzODE5NSwzODIwNSwzODIxMSwzODIxNiwzODIxOSwzODIyOSwzODIzNCwzODI0MCwzODI1NCwzODI2MCwzODI2MSwzODI2MywzODI2NCwzODI2NSwzODI2NiwzODI2NywzODI2OCwzODI2OSwzODI3MCwzODI3MiwzODI3MywzODI3NCwzODI3NSwzODI3NiwzODI3NywzODI3OCwzODI3OSwz''@;'; put 'put ''ODI4MCwzODI4MSwzODI4MiwzODI4MywzODI4NCwzODI4NSwzODI4NiwzODI4NywzODI4OCwzODI4OSwzODI5MCwzODI5MSwzODI5MiwzODI5MywzODI5NCwzODI5NSwzODI5NiwzODI5NywzODI5OCwzODI5OSwzODMwMCwzODMwMSwzODMwMiwzODMwMywzODMwNCwzODMwNSwzODMwNiwzODMw''@;'; put 'put ''NywzODMwOCwzODMwOSwzODMxMCwzODMxMSwzODMxMiwzODMxMywzODMxNCwzODMxNSwzODMxNiwzODMxNywzODMxOCwzODMxOSwzODMyMCwzODMyMSwzODMyMiwzODMyMywzODMyNCwzODMyNSwzODMyNiwzODMyNywzODMyOCwzODMyOSwzODMzMCwzODMzMSwzODMzMiwzODMzMywzODMzNCwz''@;'; put 'put ''ODMzNSwzODMzNiwzODMzNywzODMzOCwzODMzOSwzODM0MCwzODM0MSwzODM0MiwzODM0MywzODM0NCwzODM0NSwzODM0NiwzODM0NywyNjkxNiwyNjg2NCwyNjg5MSwyNjg4MSwyNjk2NywyNjg1MSwyNjg5NiwyNjk5MywyNjkzNywyNjk3NiwyNjk0NiwyNjk3MywyNzAxMiwyNjk4NywyNzAw''@;'; put 'put ''OCwyNzAzMiwyN2UzLDI2OTMyLDI3MDg0LDI3MDE1LDI3MDE2LDI3MDg2LDI3MDE3LDI2OTgyLDI2OTc5LDI3MDAxLDI3MDM1LDI3MDQ3LDI3MDY3LDI3MDUxLDI3MDUzLDI3MDkyLDI3MDU3LDI3MDczLDI3MDgyLDI3MTAzLDI3MDI5LDI3MTA0LDI3MDIxLDI3MTM1LDI3MTgzLDI3MTE3LDI3''@;'; put 'put ''MTU5LDI3MTYwLDI3MjM3LDI3MTIyLDI3MjA0LDI3MTk4LDI3Mjk2LDI3MjE2LDI3MjI3LDI3MTg5LDI3Mjc4LDI3MjU3LDI3MTk3LDI3MTc2LDI3MjI0LDI3MjYwLDI3MjgxLDI3MjgwLDI3MzA1LDI3Mjg3LDI3MzA3LDI5NDk1LDI5NTIyLDI3NTIxLDI3NTIyLDI3NTI3LDI3NTI0LDI3NTM4''@;'; put 'put ''LDI3NTM5LDI3NTMzLDI3NTQ2LDI3NTQ3LDI3NTUzLDI3NTYyLDM2NzE1LDM2NzE3LDM2NzIxLDM2NzIyLDM2NzIzLDM2NzI1LDM2NzI2LDM2NzI4LDM2NzI3LDM2NzI5LDM2NzMwLDM2NzMyLDM2NzM0LDM2NzM3LDM2NzM4LDM2NzQwLDM2NzQzLDM2NzQ3LDM4MzQ4LDM4MzQ5LDM4MzUwLDM4''@;'; put 'put ''MzUxLDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzU2LDM4MzU3LDM4MzU4LDM4MzU5LDM4MzYwLDM4MzYxLDM4MzYyLDM4MzYzLDM4MzY0LDM4MzY1LDM4MzY2LDM4MzY3LDM4MzY4LDM4MzY5LDM4MzcwLDM4MzcxLDM4MzcyLDM4MzczLDM4Mzc0LDM4Mzc1LDM4MzgwLDM4Mzk5LDM4NDA3''@;'; put 'put ''LDM4NDE5LDM4NDI0LDM4NDI3LDM4NDMwLDM4NDMyLDM4NDM1LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDM5LDM4NDQwLDM4NDQxLDM4NDQzLDM4NDQ0LDM4NDQ1LDM4NDQ3LDM4NDQ4LDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYyLDM4NDY1LDM4NDY3LDM4NDc0LDM4NDc4LDM4NDc5LDM4''@;'; put 'put ''NDgxLDM4NDgyLDM4NDgzLDM4NDg2LDM4NDg3LDM4NDg4LDM4NDg5LDM4NDkwLDM4NDkyLDM4NDkzLDM4NDk0LDM4NDk2LDM4NDk5LDM4NTAxLDM4NTAyLDM4NTA3LDM4NTA5LDM4NTEwLDM4NTExLDM4NTEyLDM4NTEzLDM4NTE1LDM4NTIwLDM4NTIxLDM4NTIyLDM4NTIzLDM4NTI0LDM4NTI1''@;'; put 'put ''LDM4NTI2LDM4NTI3LDM4NTI4LDM4NTI5LDM4NTMwLDM4NTMxLDM4NTMyLDM4NTM1LDM4NTM3LDM4NTM4LDM2NzQ5LDM2NzUwLDM2NzUxLDM2NzYwLDM2NzYyLDM2NTU4LDI1MDk5LDI1MTExLDI1MTE1LDI1MTE5LDI1MTIyLDI1MTIxLDI1MTI1LDI1MTI0LDI1MTMyLDMzMjU1LDI5OTM1LDI5''@;'; put 'put ''OTQwLDI5OTUxLDI5OTY3LDI5OTY5LDI5OTcxLDI1OTA4LDI2MDk0LDI2MDk1LDI2MDk2LDI2MTIyLDI2MTM3LDI2NDgyLDI2MTE1LDI2MTMzLDI2MTEyLDI4ODA1LDI2MzU5LDI2MTQxLDI2MTY0LDI2MTYxLDI2MTY2LDI2MTY1LDMyNzc0LDI2MjA3LDI2MTk2LDI2MTc3LDI2MTkxLDI2MTk4''@;'; put 'put ''LDI2MjA5LDI2MTk5LDI2MjMxLDI2MjQ0LDI2MjUyLDI2Mjc5LDI2MjY5LDI2MzAyLDI2MzMxLDI2MzMyLDI2MzQyLDI2MzQ1LDM2MTQ2LDM2MTQ3LDM2MTUwLDM2MTU1LDM2MTU3LDM2MTYwLDM2MTY1LDM2MTY2LDM2MTY4LDM2MTY5LDM2MTY3LDM2MTczLDM2MTgxLDM2MTg1LDM1MjcxLDM1''@;'; put 'put ''Mjc0LDM1Mjc1LDM1Mjc2LDM1Mjc4LDM1Mjc5LDM1MjgwLDM1MjgxLDI5Mjk0LDI5MzQzLDI5Mjc3LDI5Mjg2LDI5Mjk1LDI5MzEwLDI5MzExLDI5MzE2LDI5MzIzLDI5MzI1LDI5MzI3LDI5MzMwLDI1MzUyLDI1Mzk0LDI1NTIwLDM4NTQwLDM4NTQyLDM4NTQ1LDM4NTQ2LDM4NTQ3LDM4NTQ5''@;'; put 'put ''LDM4NTUwLDM4NTU0LDM4NTU1LDM4NTU3LDM4NTU4LDM4NTU5LDM4NTYwLDM4NTYxLDM4NTYyLDM4NTYzLDM4NTY0LDM4NTY1LDM4NTY2LDM4NTY4LDM4NTY5LDM4NTcwLDM4NTcxLDM4NTcyLDM4NTczLDM4NTc0LDM4NTc1LDM4NTc3LDM4NTc4LDM4NTgwLDM4NTgxLDM4NTgzLDM4NTg0LDM4''@;'; put 'put ''NTg2LDM4NTg3LDM4NTkxLDM4NTk0LDM4NTk1LDM4NjAwLDM4NjAyLDM4NjAzLDM4NjA4LDM4NjA5LDM4NjExLDM4NjEyLDM4NjE0LDM4NjE1LDM4NjE2LDM4NjE3LDM4NjE4LDM4NjE5LDM4NjIwLDM4NjIxLDM4NjIyLDM4NjIzLDM4NjI1LDM4NjI2LDM4NjI3LDM4NjI4LDM4NjI5LDM4NjMw''@;'; put 'put ''LDM4NjMxLDM4NjM1LDM4NjM2LDM4NjM3LDM4NjM4LDM4NjQwLDM4NjQxLDM4NjQyLDM4NjQ0LDM4NjQ1LDM4NjQ4LDM4NjUwLDM4NjUxLDM4NjUyLDM4NjUzLDM4NjU1LDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY2LDM4NjY3LDM4NjY4LDM4NjcyLDM4NjczLDM4Njc0LDM4Njc2LDM4Njc3LDM4''@;'; put 'put ''Njc5LDM4NjgwLDM4NjgxLDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg3LDM4Njg4LDI1NjYzLDI1ODE2LDMyNzcyLDI3NjI2LDI3NjM1LDI3NjQ1LDI3NjM3LDI3NjQxLDI3NjUzLDI3NjU1LDI3NjU0LDI3NjYxLDI3NjY5LDI3NjcyLDI3NjczLDI3Njc0LDI3NjgxLDI3Njg5LDI3Njg0LDI3Njkw''@;'; put 'put ''LDI3Njk4LDI1OTA5LDI1OTQxLDI1OTYzLDI5MjYxLDI5MjY2LDI5MjcwLDI5MjMyLDM0NDAyLDIxMDE0LDMyOTI3LDMyOTI0LDMyOTE1LDMyOTU2LDI2Mzc4LDMyOTU3LDMyOTQ1LDMyOTM5LDMyOTQxLDMyOTQ4LDMyOTUxLDMyOTk5LDMzZTMsMzMwMDEsMzMwMDIsMzI5ODcsMzI5NjIsMzI5''@;'; put 'put ''NjQsMzI5ODUsMzI5NzMsMzI5ODMsMjYzODQsMzI5ODksMzMwMDMsMzMwMDksMzMwMTIsMzMwMDUsMzMwMzcsMzMwMzgsMzMwMTAsMzMwMjAsMjYzODksMzMwNDIsMzU5MzAsMzMwNzgsMzMwNTQsMzMwNjgsMzMwNDgsMzMwNzQsMzMwOTYsMzMxMDAsMzMxMDcsMzMxNDAsMzMxMTMsMzMxMTQs''@;'; put 'put ''MzMxMzcsMzMxMjAsMzMxMjksMzMxNDgsMzMxNDksMzMxMzMsMzMxMjcsMjI2MDUsMjMyMjEsMzMxNjAsMzMxNTQsMzMxNjksMjgzNzMsMzMxODcsMzMxOTQsMzMyMjgsMjY0MDYsMzMyMjYsMzMyMTEsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTIsMzg2OTMsMzg2OTQsMzg2OTUsMzg2OTYsMzg2''@;'; put 'put ''OTcsMzg2OTksMzg3MDAsMzg3MDIsMzg3MDMsMzg3MDUsMzg3MDcsMzg3MDgsMzg3MDksMzg3MTAsMzg3MTEsMzg3MTQsMzg3MTUsMzg3MTYsMzg3MTcsMzg3MTksMzg3MjAsMzg3MjEsMzg3MjIsMzg3MjMsMzg3MjQsMzg3MjUsMzg3MjYsMzg3MjcsMzg3MjgsMzg3MjksMzg3MzAsMzg3MzEs''@;'; put 'put ''Mzg3MzIsMzg3MzMsMzg3MzQsMzg3MzUsMzg3MzYsMzg3MzcsMzg3NDAsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDgsMzg3NDksMzg3NTEsMzg3NTUsMzg3NTYsMzg3NTgsMzg3NTksMzg3NjAsMzg3NjIsMzg3NjMsMzg3NjQsMzg3NjUsMzg3NjYsMzg3NjcsMzg3NjgsMzg3NjksMzg3''@;'; put 'put ''NzAsMzg3NzMsMzg3NzUsMzg3NzYsMzg3NzcsMzg3NzgsMzg3NzksMzg3ODEsMzg3ODIsMzg3ODMsMzg3ODQsMzg3ODUsMzg3ODYsMzg3ODcsMzg3ODgsMzg3OTAsMzg3OTEsMzg3OTIsMzg3OTMsMzg3OTQsMzg3OTYsMzg3OTgsMzg3OTksMzg4MDAsMzg4MDMsMzg4MDUsMzg4MDYsMzg4MDcs''@;'; put 'put ''Mzg4MDksMzg4MTAsMzg4MTEsMzg4MTIsMzg4MTMsMzMyMTcsMzMxOTAsMjc0MjgsMjc0NDcsMjc0NDksMjc0NTksMjc0NjIsMjc0ODEsMzkxMjEsMzkxMjIsMzkxMjMsMzkxMjUsMzkxMjksMzkxMzAsMjc1NzEsMjQzODQsMjc1ODYsMzUzMTUsMjZlMyw0MDc4NSwyNjAwMywyNjA0NCwyNjA1''@;'; put 'put ''NCwyNjA1MiwyNjA1MSwyNjA2MCwyNjA2MiwyNjA2NiwyNjA3MCwyODgwMCwyODgyOCwyODgyMiwyODgyOSwyODg1OSwyODg2NCwyODg1NSwyODg0MywyODg0OSwyODkwNCwyODg3NCwyODk0NCwyODk0NywyODk1MCwyODk3NSwyODk3NywyOTA0MywyOTAyMCwyOTAzMiwyODk5NywyOTA0Miwy''@;'; put 'put ''OTAwMiwyOTA0OCwyOTA1MCwyOTA4MCwyOTEwNywyOTEwOSwyOTA5NiwyOTA4OCwyOTE1MiwyOTE0MCwyOTE1OSwyOTE3NywyOTIxMywyOTIyNCwyODc4MCwyODk1MiwyOTAzMCwyOTExMywyNTE1MCwyNTE0OSwyNTE1NSwyNTE2MCwyNTE2MSwzMTAzNSwzMTA0MCwzMTA0NiwzMTA0OSwzMTA2''@;'; put 'put ''NywzMTA2OCwzMTA1OSwzMTA2NiwzMTA3NCwzMTA2MywzMTA3MiwzMTA4NywzMTA3OSwzMTA5OCwzMTEwOSwzMTExNCwzMTEzMCwzMTE0MywzMTE1NSwyNDUyOSwyNDUyOCwzODgxNCwzODgxNSwzODgxNywzODgxOCwzODgyMCwzODgyMSwzODgyMiwzODgyMywzODgyNCwzODgyNSwzODgyNiwz''@;'; put 'put ''ODgyOCwzODgzMCwzODgzMiwzODgzMywzODgzNSwzODgzNywzODgzOCwzODgzOSwzODg0MCwzODg0MSwzODg0MiwzODg0MywzODg0NCwzODg0NSwzODg0NiwzODg0NywzODg0OCwzODg0OSwzODg1MCwzODg1MSwzODg1MiwzODg1MywzODg1NCwzODg1NSwzODg1NiwzODg1NywzODg1OCwzODg1''@;'; put 'put ''OSwzODg2MCwzODg2MSwzODg2MiwzODg2MywzODg2NCwzODg2NSwzODg2NiwzODg2NywzODg2OCwzODg2OSwzODg3MCwzODg3MSwzODg3MiwzODg3MywzODg3NCwzODg3NSwzODg3NiwzODg3NywzODg3OCwzODg3OSwzODg4MCwzODg4MSwzODg4MiwzODg4MywzODg4NCwzODg4NSwzODg4OCwz''@;'; put 'put ''ODg5NCwzODg5NSwzODg5NiwzODg5NywzODg5OCwzODkwMCwzODkwMywzODkwNCwzODkwNSwzODkwNiwzODkwNywzODkwOCwzODkwOSwzODkxMCwzODkxMSwzODkxMiwzODkxMywzODkxNCwzODkxNSwzODkxNiwzODkxNywzODkxOCwzODkxOSwzODkyMCwzODkyMSwzODkyMiwzODkyMywzODky''@;'; put 'put ''NCwzODkyNSwzODkyNiwyNDYzNiwyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDY2NSwyNDY3NSwyNDc0NywyNDgzOCwyNDg0NSwyNDkyNSwyNTAwMSwyNDk4OSwyNTAzNSwyNTA0MSwyNTA5NCwzMjg5NiwzMjg5NSwyNzc5NSwyNzg5NCwyODE1NiwzMDcxMCwzMDcxMiwzMDcyMCwzMDcyOSwz''@;'; put 'put ''MDc0MywzMDc0NCwzMDczNywyNjAyNywzMDc2NSwzMDc0OCwzMDc0OSwzMDc3NywzMDc3OCwzMDc3OSwzMDc1MSwzMDc4MCwzMDc1NywzMDc2NCwzMDc1NSwzMDc2MSwzMDc5OCwzMDgyOSwzMDgwNiwzMDgwNywzMDc1OCwzMDgwMCwzMDc5MSwzMDc5NiwzMDgyNiwzMDg3NSwzMDg2NywzMDg3''@;'; put 'put ''NCwzMDg1NSwzMDg3NiwzMDg4MSwzMDg4MywzMDg5OCwzMDkwNSwzMDg4NSwzMDkzMiwzMDkzNywzMDkyMSwzMDk1NiwzMDk2MiwzMDk4MSwzMDk2NCwzMDk5NSwzMTAxMiwzMTAwNiwzMTAyOCw0MDg1OSw0MDY5Nyw0MDY5OSw0MDcwMCwzMDQ0OSwzMDQ2OCwzMDQ3NywzMDQ1NywzMDQ3MSwz''@;'; put 'put ''MDQ3MiwzMDQ5MCwzMDQ5OCwzMDQ4OSwzMDUwOSwzMDUwMiwzMDUxNywzMDUyMCwzMDU0NCwzMDU0NSwzMDUzNSwzMDUzMSwzMDU1NCwzMDU2OCwzODkyNywzODkyOCwzODkyOSwzODkzMCwzODkzMSwzODkzMiwzODkzMywzODkzNCwzODkzNSwzODkzNiwzODkzNywzODkzOCwzODkzOSwzODk0''@;'; put 'put ''MCwzODk0MSwzODk0MiwzODk0MywzODk0NCwzODk0NSwzODk0NiwzODk0NywzODk0OCwzODk0OSwzODk1MCwzODk1MSwzODk1MiwzODk1MywzODk1NCwzODk1NSwzODk1NiwzODk1NywzODk1OCwzODk1OSwzODk2MCwzODk2MSwzODk2MiwzODk2MywzODk2NCwzODk2NSwzODk2NiwzODk2Nywz''@;'; put 'put ''ODk2OCwzODk2OSwzODk3MCwzODk3MSwzODk3MiwzODk3MywzODk3NCwzODk3NSwzODk3NiwzODk3NywzODk3OCwzODk3OSwzODk4MCwzODk4MSwzODk4MiwzODk4MywzODk4NCwzODk4NSwzODk4NiwzODk4NywzODk4OCwzODk4OSwzODk5MCwzODk5MSwzODk5MiwzODk5MywzODk5NCwzODk5''@;'; put 'put ''NSwzODk5NiwzODk5NywzODk5OCwzODk5OSwzOWUzLDM5MDAxLDM5MDAyLDM5MDAzLDM5MDA0LDM5MDA1LDM5MDA2LDM5MDA3LDM5MDA4LDM5MDA5LDM5MDEwLDM5MDExLDM5MDEyLDM5MDEzLDM5MDE0LDM5MDE1LDM5MDE2LDM5MDE3LDM5MDE4LDM5MDE5LDM5MDIwLDM5MDIxLDM5MDIyLDMw''@;'; put 'put ''NTYyLDMwNTY1LDMwNTkxLDMwNjA1LDMwNTg5LDMwNTkyLDMwNjA0LDMwNjA5LDMwNjIzLDMwNjI0LDMwNjQwLDMwNjQ1LDMwNjUzLDMwMDEwLDMwMDE2LDMwMDMwLDMwMDI3LDMwMDI0LDMwMDQzLDMwMDY2LDMwMDczLDMwMDgzLDMyNjAwLDMyNjA5LDMyNjA3LDM1NDAwLDMyNjE2LDMyNjI4''@;'; put 'put ''LDMyNjI1LDMyNjMzLDMyNjQxLDMyNjM4LDMwNDEzLDMwNDM3LDM0ODY2LDM4MDIxLDM4MDIyLDM4MDIzLDM4MDI3LDM4MDI2LDM4MDI4LDM4MDI5LDM4MDMxLDM4MDMyLDM4MDM2LDM4MDM5LDM4MDM3LDM4MDQyLDM4MDQzLDM4MDQ0LDM4MDUxLDM4MDUyLDM4MDU5LDM4MDU4LDM4MDYxLDM4''@;'; put 'put ''MDYwLDM4MDYzLDM4MDY0LDM4MDY2LDM4MDY4LDM4MDcwLDM4MDcxLDM4MDcyLDM4MDczLDM4MDc0LDM4MDc2LDM4MDc3LDM4MDc5LDM4MDg0LDM4MDg4LDM4MDg5LDM4MDkwLDM4MDkxLDM4MDkyLDM4MDkzLDM4MDk0LDM4MDk2LDM4MDk3LDM4MDk4LDM4MTAxLDM4MTAyLDM4MTAzLDM4MTA1''@;'; put 'put ''LDM4MTA0LDM4MTA3LDM4MTEwLDM4MTExLDM4MTEyLDM4MTE0LDM4MTE2LDM4MTE3LDM4MTE5LDM4MTIwLDM4MTIyLDM5MDIzLDM5MDI0LDM5MDI1LDM5MDI2LDM5MDI3LDM5MDI4LDM5MDUxLDM5MDU0LDM5MDU4LDM5MDYxLDM5MDY1LDM5MDc1LDM5MDgwLDM5MDgxLDM5MDgyLDM5MDgzLDM5''@;'; put 'put ''MDg0LDM5MDg1LDM5MDg2LDM5MDg3LDM5MDg4LDM5MDg5LDM5MDkwLDM5MDkxLDM5MDkyLDM5MDkzLDM5MDk0LDM5MDk1LDM5MDk2LDM5MDk3LDM5MDk4LDM5MDk5LDM5MTAwLDM5MTAxLDM5MTAyLDM5MTAzLDM5MTA0LDM5MTA1LDM5MTA2LDM5MTA3LDM5MTA4LDM5MTA5LDM5MTEwLDM5MTEx''@;'; put 'put ''LDM5MTEyLDM5MTEzLDM5MTE0LDM5MTE1LDM5MTE2LDM5MTE3LDM5MTE5LDM5MTIwLDM5MTI0LDM5MTI2LDM5MTI3LDM5MTMxLDM5MTMyLDM5MTMzLDM5MTM2LDM5MTM3LDM5MTM4LDM5MTM5LDM5MTQwLDM5MTQxLDM5MTQyLDM5MTQ1LDM5MTQ2LDM5MTQ3LDM5MTQ4LDM5MTQ5LDM5MTUwLDM5''@;'; put 'put ''MTUxLDM5MTUyLDM5MTUzLDM5MTU0LDM5MTU1LDM5MTU2LDM5MTU3LDM5MTU4LDM5MTU5LDM5MTYwLDM5MTYxLDM5MTYyLDM5MTYzLDM5MTY0LDM5MTY1LDM5MTY2LDM5MTY3LDM5MTY4LDM5MTY5LDM5MTcwLDM5MTcxLDM5MTcyLDM5MTczLDM5MTc0LDM5MTc1LDM4MTIxLDM4MTIzLDM4MTI2''@;'; put 'put ''LDM4MTI3LDM4MTMxLDM4MTMyLDM4MTMzLDM4MTM1LDM4MTM3LDM4MTQwLDM4MTQxLDM4MTQzLDM4MTQ3LDM4MTQ2LDM4MTUwLDM4MTUxLDM4MTUzLDM4MTU0LDM4MTU3LDM4MTU4LDM4MTU5LDM4MTYyLDM4MTYzLDM4MTY0LDM4MTY1LDM4MTY2LDM4MTY4LDM4MTcxLDM4MTczLDM4MTc0LDM4''@;'; put 'put ''MTc1LDM4MTc4LDM4MTg2LDM4MTg3LDM4MTg1LDM4MTg4LDM4MTkzLDM4MTk0LDM4MTk2LDM4MTk4LDM4MTk5LDM4MjAwLDM4MjA0LDM4MjA2LDM4MjA3LDM4MjEwLDM4MTk3LDM4MjEyLDM4MjEzLDM4MjE0LDM4MjE3LDM4MjIwLDM4MjIyLDM4MjIzLDM4MjI2LDM4MjI3LDM4MjI4LDM4MjMw''@;'; put 'put ''LDM4MjMxLDM4MjMyLDM4MjMzLDM4MjM1LDM4MjM4LDM4MjM5LDM4MjM3LDM4MjQxLDM4MjQyLDM4MjQ0LDM4MjQ1LDM4MjQ2LDM4MjQ3LDM4MjQ4LDM4MjQ5LDM4MjUwLDM4MjUxLDM4MjUyLDM4MjU1LDM4MjU3LDM4MjU4LDM4MjU5LDM4MjAyLDMwNjk1LDMwNzAwLDM4NjAxLDMxMTg5LDMx''@;'; put 'put ''MjEzLDMxMjAzLDMxMjExLDMxMjM4LDIzODc5LDMxMjM1LDMxMjM0LDMxMjYyLDMxMjUyLDM5MTc2LDM5MTc3LDM5MTc4LDM5MTc5LDM5MTgwLDM5MTgyLDM5MTgzLDM5MTg1LDM5MTg2LDM5MTg3LDM5MTg4LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTkyLDM5MTkzLDM5MTk0LDM5MTk1LDM5MTk2''@;'; put 'put ''LDM5MTk3LDM5MTk4LDM5MTk5LDM5MjAwLDM5MjAxLDM5MjAyLDM5MjAzLDM5MjA0LDM5MjA1LDM5MjA2LDM5MjA3LDM5MjA4LDM5MjA5LDM5MjEwLDM5MjExLDM5MjEyLDM5MjEzLDM5MjE1LDM5MjE2LDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjIyLDM5MjIzLDM5MjI0LDM5''@;'; put 'put ''MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjI5LDM5MjMwLDM5MjMxLDM5MjMyLDM5MjMzLDM5MjM0LDM5MjM1LDM5MjM2LDM5MjM3LDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQxLDM5MjQyLDM5MjQzLDM5MjQ0LDM5MjQ1LDM5MjQ2LDM5MjQ3LDM5MjQ4LDM5MjQ5LDM5MjUwLDM5MjUxLDM5MjU0''@;'; put 'put ''LDM5MjU1LDM5MjU2LDM5MjU3LDM5MjU4LDM5MjU5LDM5MjYwLDM5MjYxLDM5MjYyLDM5MjYzLDM5MjY0LDM5MjY1LDM5MjY2LDM5MjY4LDM5MjcwLDM5MjgzLDM5Mjg4LDM5Mjg5LDM5MjkxLDM5Mjk0LDM5Mjk4LDM5Mjk5LDM5MzA1LDMxMjg5LDMxMjg3LDMxMzEzLDQwNjU1LDM5MzMzLDMx''@;'; put 'put ''MzQ0LDMwMzQ0LDMwMzUwLDMwMzU1LDMwMzYxLDMwMzcyLDI5OTE4LDI5OTIwLDI5OTk2LDQwNDgwLDQwNDgyLDQwNDg4LDQwNDg5LDQwNDkwLDQwNDkxLDQwNDkyLDQwNDk4LDQwNDk3LDQwNTAyLDQwNTA0LDQwNTAzLDQwNTA1LDQwNTA2LDQwNTEwLDQwNTEzLDQwNTE0LDQwNTE2LDQwNTE4''@;'; put 'put ''LDQwNTE5LDQwNTIwLDQwNTIxLDQwNTIzLDQwNTI0LDQwNTI2LDQwNTI5LDQwNTMzLDQwNTM1LDQwNTM4LDQwNTM5LDQwNTQwLDQwNTQyLDQwNTQ3LDQwNTUwLDQwNTUxLDQwNTUyLDQwNTUzLDQwNTU0LDQwNTU1LDQwNTU2LDQwNTYxLDQwNTU3LDQwNTYzLDMwMDk4LDMwMTAwLDMwMTAyLDMw''@;'; put 'put ''MTEyLDMwMTA5LDMwMTI0LDMwMTE1LDMwMTMxLDMwMTMyLDMwMTM2LDMwMTQ4LDMwMTI5LDMwMTI4LDMwMTQ3LDMwMTQ2LDMwMTY2LDMwMTU3LDMwMTc5LDMwMTg0LDMwMTgyLDMwMTgwLDMwMTg3LDMwMTgzLDMwMjExLDMwMTkzLDMwMjA0LDMwMjA3LDMwMjI0LDMwMjA4LDMwMjEzLDMwMjIw''@;'; put 'put ''LDMwMjMxLDMwMjE4LDMwMjQ1LDMwMjMyLDMwMjI5LDMwMjMzLDM5MzA4LDM5MzEwLDM5MzIyLDM5MzIzLDM5MzI0LDM5MzI1LDM5MzI2LDM5MzI3LDM5MzI4LDM5MzI5LDM5MzMwLDM5MzMxLDM5MzMyLDM5MzM0LDM5MzM1LDM5MzM3LDM5MzM4LDM5MzM5LDM5MzQwLDM5MzQxLDM5MzQyLDM5''@;'; put 'put ''MzQzLDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ3LDM5MzQ4LDM5MzQ5LDM5MzUwLDM5MzUxLDM5MzUyLDM5MzUzLDM5MzU0LDM5MzU1LDM5MzU2LDM5MzU3LDM5MzU4LDM5MzU5LDM5MzYwLDM5MzYxLDM5MzYyLDM5MzYzLDM5MzY0LDM5MzY1LDM5MzY2LDM5MzY3LDM5MzY4LDM5MzY5LDM5Mzcw''@;'; put 'put ''LDM5MzcxLDM5MzcyLDM5MzczLDM5Mzc0LDM5Mzc1LDM5Mzc2LDM5Mzc3LDM5Mzc4LDM5Mzc5LDM5MzgwLDM5MzgxLDM5MzgyLDM5MzgzLDM5Mzg0LDM5Mzg1LDM5Mzg2LDM5Mzg3LDM5Mzg4LDM5Mzg5LDM5MzkwLDM5MzkxLDM5MzkyLDM5MzkzLDM5Mzk0LDM5Mzk1LDM5Mzk2LDM5Mzk3LDM5''@;'; put 'put ''Mzk4LDM5Mzk5LDM5NDAwLDM5NDAxLDM5NDAyLDM5NDAzLDM5NDA0LDM5NDA1LDM5NDA2LDM5NDA3LDM5NDA4LDM5NDA5LDM5NDEwLDM5NDExLDM5NDEyLDM5NDEzLDM5NDE0LDM5NDE1LDM5NDE2LDM5NDE3LDMwMjM1LDMwMjY4LDMwMjQyLDMwMjQwLDMwMjcyLDMwMjUzLDMwMjU2LDMwMjcx''@;'; put 'put ''LDMwMjYxLDMwMjc1LDMwMjcwLDMwMjU5LDMwMjg1LDMwMzAyLDMwMjkyLDMwMzAwLDMwMjk0LDMwMzE1LDMwMzE5LDMyNzE0LDMxNDYyLDMxMzUyLDMxMzUzLDMxMzYwLDMxMzY2LDMxMzY4LDMxMzgxLDMxMzk4LDMxMzkyLDMxNDA0LDMxNDAwLDMxNDA1LDMxNDExLDM0OTE2LDM0OTIxLDM0''@;'; put 'put ''OTMwLDM0OTQxLDM0OTQzLDM0OTQ2LDM0OTc4LDM1MDE0LDM0OTk5LDM1MDA0LDM1MDE3LDM1MDQyLDM1MDIyLDM1MDQzLDM1MDQ1LDM1MDU3LDM1MDk4LDM1MDY4LDM1MDQ4LDM1MDcwLDM1MDU2LDM1MTA1LDM1MDk3LDM1MDkxLDM1MDk5LDM1MDgyLDM1MTI0LDM1MTE1LDM1MTI2LDM1MTM3''@;'; put 'put ''LDM1MTc0LDM1MTk1LDMwMDkxLDMyOTk3LDMwMzg2LDMwMzg4LDMwNjg0LDMyNzg2LDMyNzg4LDMyNzkwLDMyNzk2LDMyODAwLDMyODAyLDMyODA1LDMyODA2LDMyODA3LDMyODA5LDMyODA4LDMyODE3LDMyNzc5LDMyODIxLDMyODM1LDMyODM4LDMyODQ1LDMyODUwLDMyODczLDMyODgxLDM1''@;'; put 'put ''MjAzLDM5MDMyLDM5MDQwLDM5MDQzLDM5NDE4LDM5NDE5LDM5NDIwLDM5NDIxLDM5NDIyLDM5NDIzLDM5NDI0LDM5NDI1LDM5NDI2LDM5NDI3LDM5NDI4LDM5NDI5LDM5NDMwLDM5NDMxLDM5NDMyLDM5NDMzLDM5NDM0LDM5NDM1LDM5NDM2LDM5NDM3LDM5NDM4LDM5NDM5LDM5NDQwLDM5NDQx''@;'; put 'put ''LDM5NDQyLDM5NDQzLDM5NDQ0LDM5NDQ1LDM5NDQ2LDM5NDQ3LDM5NDQ4LDM5NDQ5LDM5NDUwLDM5NDUxLDM5NDUyLDM5NDUzLDM5NDU0LDM5NDU1LDM5NDU2LDM5NDU3LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYxLDM5NDYyLDM5NDYzLDM5NDY0LDM5NDY1LDM5NDY2LDM5NDY3LDM5NDY4LDM5''@;'; put 'put ''NDY5LDM5NDcwLDM5NDcxLDM5NDcyLDM5NDczLDM5NDc0LDM5NDc1LDM5NDc2LDM5NDc3LDM5NDc4LDM5NDc5LDM5NDgwLDM5NDgxLDM5NDgyLDM5NDgzLDM5NDg0LDM5NDg1LDM5NDg2LDM5NDg3LDM5NDg4LDM5NDg5LDM5NDkwLDM5NDkxLDM5NDkyLDM5NDkzLDM5NDk0LDM5NDk1LDM5NDk2''@;'; put 'put ''LDM5NDk3LDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAxLDM5NTAyLDM5NTAzLDM5NTA0LDM5NTA1LDM5NTA2LDM5NTA3LDM5NTA4LDM5NTA5LDM5NTEwLDM5NTExLDM5NTEyLDM5NTEzLDM5MDQ5LDM5MDUyLDM5MDUzLDM5MDU1LDM5MDYwLDM5MDY2LDM5MDY3LDM5MDcwLDM5MDcxLDM5MDczLDM5''@;'; put 'put ''MDc0LDM5MDc3LDM5MDc4LDM0MzgxLDM0Mzg4LDM0NDEyLDM0NDE0LDM0NDMxLDM0NDI2LDM0NDI4LDM0NDI3LDM0NDcyLDM0NDQ1LDM0NDQzLDM0NDc2LDM0NDYxLDM0NDcxLDM0NDY3LDM0NDc0LDM0NDUxLDM0NDczLDM0NDg2LDM0NTAwLDM0NDg1LDM0NTEwLDM0NDgwLDM0NDkwLDM0NDgx''@;'; put 'put ''LDM0NDc5LDM0NTA1LDM0NTExLDM0NDg0LDM0NTM3LDM0NTQ1LDM0NTQ2LDM0NTQxLDM0NTQ3LDM0NTEyLDM0NTc5LDM0NTI2LDM0NTQ4LDM0NTI3LDM0NTIwLDM0NTEzLDM0NTYzLDM0NTY3LDM0NTUyLDM0NTY4LDM0NTcwLDM0NTczLDM0NTY5LDM0NTk1LDM0NjE5LDM0NTkwLDM0NTk3LDM0''@;'; put 'put ''NjA2LDM0NTg2LDM0NjIyLDM0NjMyLDM0NjEyLDM0NjA5LDM0NjAxLDM0NjE1LDM0NjIzLDM0NjkwLDM0NTk0LDM0Njg1LDM0Njg2LDM0NjgzLDM0NjU2LDM0NjcyLDM0NjM2LDM0NjcwLDM0Njk5LDM0NjQzLDM0NjU5LDM0Njg0LDM0NjYwLDM0NjQ5LDM0NjYxLDM0NzA3LDM0NzM1LDM0NzI4''@;'; put 'put ''LDM0NzcwLDM5NTE0LDM5NTE1LDM5NTE2LDM5NTE3LDM5NTE4LDM5NTE5LDM5NTIwLDM5NTIxLDM5NTIyLDM5NTIzLDM5NTI0LDM5NTI1LDM5NTI2LDM5NTI3LDM5NTI4LDM5NTI5LDM5NTMwLDM5NTMxLDM5NTM4LDM5NTU1LDM5NTYxLDM5NTY1LDM5NTY2LDM5NTcyLDM5NTczLDM5NTc3LDM5''@;'; put 'put ''NTkwLDM5NTkzLDM5NTk0LDM5NTk1LDM5NTk2LDM5NTk3LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjAzLDM5NjA0LDM5NjA1LDM5NjA5LDM5NjExLDM5NjEzLDM5NjE0LDM5NjE1LDM5NjE5LDM5NjIwLDM5NjIyLDM5NjIzLDM5NjI0LDM5NjI1LDM5NjI2LDM5NjI5LDM5NjMwLDM5NjMxLDM5NjMy''@;'; put 'put ''LDM5NjM0LDM5NjM2LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQxLDM5NjQyLDM5NjQzLDM5NjQ0LDM5NjQ1LDM5NjQ2LDM5NjQ4LDM5NjUwLDM5NjUxLDM5NjUyLDM5NjUzLDM5NjU1LDM5NjU2LDM5NjU3LDM5NjU4LDM5NjYwLDM5NjYyLDM5NjY0LDM5NjY1LDM5NjY2LDM5NjY3LDM5NjY4LDM5''@;'; put 'put ''NjY5LDM5NjcwLDM5NjcxLDM5NjcyLDM5Njc0LDM5Njc2LDM5Njc3LDM5Njc4LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5Njg0LDM5Njg1LDM5Njg2LDM0NzU4LDM0Njk2LDM0NjkzLDM0NzMzLDM0NzExLDM0NjkxLDM0NzMxLDM0Nzg5LDM0NzMyLDM0NzQxLDM0NzM5LDM0NzYzLDM0Nzcx''@;'; put 'put ''LDM0NzQ5LDM0NzY5LDM0NzUyLDM0NzYyLDM0Nzc5LDM0Nzk0LDM0Nzg0LDM0Nzk4LDM0ODM4LDM0ODM1LDM0ODE0LDM0ODI2LDM0ODQzLDM0ODQ5LDM0ODczLDM0ODc2LDMyNTY2LDMyNTc4LDMyNTgwLDMyNTgxLDMzMjk2LDMxNDgyLDMxNDg1LDMxNDk2LDMxNDkxLDMxNDkyLDMxNTA5LDMx''@;'; put 'put ''NDk4LDMxNTMxLDMxNTAzLDMxNTU5LDMxNTQ0LDMxNTMwLDMxNTEzLDMxNTM0LDMxNTM3LDMxNTIwLDMxNTI1LDMxNTI0LDMxNTM5LDMxNTUwLDMxNTE4LDMxNTc2LDMxNTc4LDMxNTU3LDMxNjA1LDMxNTY0LDMxNTgxLDMxNTg0LDMxNTk4LDMxNjExLDMxNTg2LDMxNjAyLDMxNjAxLDMxNjMy''@;'; put 'put ''LDMxNjU0LDMxNjU1LDMxNjcyLDMxNjYwLDMxNjQ1LDMxNjU2LDMxNjIxLDMxNjU4LDMxNjQ0LDMxNjUwLDMxNjU5LDMxNjY4LDMxNjk3LDMxNjgxLDMxNjkyLDMxNzA5LDMxNzA2LDMxNzE3LDMxNzE4LDMxNzIyLDMxNzU2LDMxNzQyLDMxNzQwLDMxNzU5LDMxNzY2LDMxNzU1LDM5Njg3LDM5''@;'; put 'put ''Njg5LDM5NjkwLDM5NjkxLDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk3LDM5Njk4LDM5NzAwLDM5NzAxLDM5NzAyLDM5NzAzLDM5NzA0LDM5NzA1LDM5NzA2LDM5NzA3LDM5NzA4LDM5NzA5LDM5NzEwLDM5NzEyLDM5NzEzLDM5NzE0LDM5NzE2LDM5NzE3LDM5NzE4LDM5NzE5LDM5NzIw''@;'; put 'put ''LDM5NzIxLDM5NzIyLDM5NzIzLDM5NzI0LDM5NzI1LDM5NzI2LDM5NzI4LDM5NzI5LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM0LDM5NzM1LDM5NzM2LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzQyLDM5NzQzLDM5NzQ0LDM5NzUwLDM5NzU0LDM5NzU1LDM5NzU2LDM5NzU4LDM5NzYwLDM5NzYyLDM5''@;'; put 'put ''NzYzLDM5NzY1LDM5NzY2LDM5NzY3LDM5NzY4LDM5NzY5LDM5NzcwLDM5NzcxLDM5NzcyLDM5NzczLDM5Nzc0LDM5Nzc1LDM5Nzc2LDM5Nzc3LDM5Nzc4LDM5Nzc5LDM5NzgwLDM5NzgxLDM5NzgyLDM5NzgzLDM5Nzg0LDM5Nzg1LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5Nzkx''@;'; put 'put ''LDM5NzkyLDM5NzkzLDM5Nzk0LDM5Nzk1LDM5Nzk2LDM5Nzk3LDM5Nzk4LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODAyLDM5ODAzLDMxNzc1LDMxNzg2LDMxNzgyLDMxODAwLDMxODA5LDMxODA4LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg0LDMzMjYwLDM0ODg0LDMzMzEzLDMzMzE0LDMzMzE1LDMz''@;'; put 'put ''MzI1LDMzMzI3LDMzMzIwLDMzMzIzLDMzMzM2LDMzMzM5LDMzMzMxLDMzMzMyLDMzMzQyLDMzMzQ4LDMzMzUzLDMzMzU1LDMzMzU5LDMzMzcwLDMzMzc1LDMzMzg0LDM0OTQyLDM0OTQ5LDM0OTUyLDM1MDMyLDM1MDM5LDM1MTY2LDMyNjY5LDMyNjcxLDMyNjc5LDMyNjg3LDMyNjg4LDMyNjkw''@;'; put 'put ''LDMxODY4LDI1OTI5LDMxODg5LDMxOTAxLDMxOTAwLDMxOTAyLDMxOTA2LDMxOTIyLDMxOTMyLDMxOTMzLDMxOTM3LDMxOTQzLDMxOTQ4LDMxOTQ5LDMxOTQ0LDMxOTQxLDMxOTU5LDMxOTc2LDMzMzkwLDI2MjgwLDMyNzAzLDMyNzE4LDMyNzI1LDMyNzQxLDMyNzM3LDMyNzQyLDMyNzQ1LDMy''@;'; put 'put ''NzUwLDMyNzU1LDMxOTkyLDMyMTE5LDMyMTY2LDMyMTc0LDMyMzI3LDMyNDExLDQwNjMyLDQwNjI4LDM2MjExLDM2MjI4LDM2MjQ0LDM2MjQxLDM2MjczLDM2MTk5LDM2MjA1LDM1OTExLDM1OTEzLDM3MTk0LDM3MjAwLDM3MTk4LDM3MTk5LDM3MjIwLDM5ODA0LDM5ODA1LDM5ODA2LDM5ODA3''@;'; put 'put ''LDM5ODA4LDM5ODA5LDM5ODEwLDM5ODExLDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE2LDM5ODE3LDM5ODE4LDM5ODE5LDM5ODIwLDM5ODIxLDM5ODIyLDM5ODIzLDM5ODI0LDM5ODI1LDM5ODI2LDM5ODI3LDM5ODI4LDM5ODI5LDM5ODMwLDM5ODMxLDM5ODMyLDM5ODMzLDM5ODM0LDM5''@;'; put 'put ''ODM1LDM5ODM2LDM5ODM3LDM5ODM4LDM5ODM5LDM5ODQwLDM5ODQxLDM5ODQyLDM5ODQzLDM5ODQ0LDM5ODQ1LDM5ODQ2LDM5ODQ3LDM5ODQ4LDM5ODQ5LDM5ODUwLDM5ODUxLDM5ODUyLDM5ODUzLDM5ODU0LDM5ODU1LDM5ODU2LDM5ODU3LDM5ODU4LDM5ODU5LDM5ODYwLDM5ODYxLDM5ODYy''@;'; put 'put ''LDM5ODYzLDM5ODY0LDM5ODY1LDM5ODY2LDM5ODY3LDM5ODY4LDM5ODY5LDM5ODcwLDM5ODcxLDM5ODcyLDM5ODczLDM5ODc0LDM5ODc1LDM5ODc2LDM5ODc3LDM5ODc4LDM5ODc5LDM5ODgwLDM5ODgxLDM5ODgyLDM5ODgzLDM5ODg0LDM5ODg1LDM5ODg2LDM5ODg3LDM5ODg4LDM5ODg5LDM5''@;'; put 'put ''ODkwLDM5ODkxLDM5ODkyLDM5ODkzLDM5ODk0LDM5ODk1LDM5ODk2LDM5ODk3LDM5ODk4LDM5ODk5LDM3MjE4LDM3MjE3LDM3MjMyLDM3MjI1LDM3MjMxLDM3MjQ1LDM3MjQ2LDM3MjM0LDM3MjM2LDM3MjQxLDM3MjYwLDM3MjUzLDM3MjY0LDM3MjYxLDM3MjY1LDM3MjgyLDM3MjgzLDM3Mjkw''@;'; put 'put ''LDM3MjkzLDM3Mjk0LDM3Mjk1LDM3MzAxLDM3MzAwLDM3MzA2LDM1OTI1LDQwNTc0LDM2MjgwLDM2MzMxLDM2MzU3LDM2NDQxLDM2NDU3LDM2Mjc3LDM2Mjg3LDM2Mjg0LDM2MjgyLDM2MjkyLDM2MzEwLDM2MzExLDM2MzE0LDM2MzE4LDM2MzAyLDM2MzAzLDM2MzE1LDM2Mjk0LDM2MzMyLDM2''@;'; put 'put ''MzQzLDM2MzQ0LDM2MzIzLDM2MzQ1LDM2MzQ3LDM2MzI0LDM2MzYxLDM2MzQ5LDM2MzcyLDM2MzgxLDM2MzgzLDM2Mzk2LDM2Mzk4LDM2Mzg3LDM2Mzk5LDM2NDEwLDM2NDE2LDM2NDA5LDM2NDA1LDM2NDEzLDM2NDAxLDM2NDI1LDM2NDE3LDM2NDE4LDM2NDMzLDM2NDM0LDM2NDI2LDM2NDY0''@;'; put 'put ''LDM2NDcwLDM2NDc2LDM2NDYzLDM2NDY4LDM2NDg1LDM2NDk1LDM2NTAwLDM2NDk2LDM2NTA4LDM2NTEwLDM1OTYwLDM1OTcwLDM1OTc4LDM1OTczLDM1OTkyLDM1OTg4LDI2MDExLDM1Mjg2LDM1Mjk0LDM1MjkwLDM1MjkyLDM5OTAwLDM5OTAxLDM5OTAyLDM5OTAzLDM5OTA0LDM5OTA1LDM5''@;'; put 'put ''OTA2LDM5OTA3LDM5OTA4LDM5OTA5LDM5OTEwLDM5OTExLDM5OTEyLDM5OTEzLDM5OTE0LDM5OTE1LDM5OTE2LDM5OTE3LDM5OTE4LDM5OTE5LDM5OTIwLDM5OTIxLDM5OTIyLDM5OTIzLDM5OTI0LDM5OTI1LDM5OTI2LDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5OTMxLDM5OTMyLDM5OTMz''@;'; put 'put ''LDM5OTM0LDM5OTM1LDM5OTM2LDM5OTM3LDM5OTM4LDM5OTM5LDM5OTQwLDM5OTQxLDM5OTQyLDM5OTQzLDM5OTQ0LDM5OTQ1LDM5OTQ2LDM5OTQ3LDM5OTQ4LDM5OTQ5LDM5OTUwLDM5OTUxLDM5OTUyLDM5OTUzLDM5OTU0LDM5OTU1LDM5OTU2LDM5OTU3LDM5OTU4LDM5OTU5LDM5OTYwLDM5''@;'; put 'put ''OTYxLDM5OTYyLDM5OTYzLDM5OTY0LDM5OTY1LDM5OTY2LDM5OTY3LDM5OTY4LDM5OTY5LDM5OTcwLDM5OTcxLDM5OTcyLDM5OTczLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3LDM5OTc4LDM5OTc5LDM5OTgwLDM5OTgxLDM5OTgyLDM5OTgzLDM5OTg0LDM5OTg1LDM5OTg2LDM5OTg3LDM5OTg4''@;'; put 'put ''LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTkyLDM5OTkzLDM5OTk0LDM5OTk1LDM1MzAxLDM1MzA3LDM1MzExLDM1MzkwLDM1NjIyLDM4NzM5LDM4NjMzLDM4NjQzLDM4NjM5LDM4NjYyLDM4NjU3LDM4NjY0LDM4NjcxLDM4NjcwLDM4Njk4LDM4NzAxLDM4NzA0LDM4NzE4LDQwODMyLDQwODM1LDQw''@;'; put 'put ''ODM3LDQwODM4LDQwODM5LDQwODQwLDQwODQxLDQwODQyLDQwODQ0LDQwNzAyLDQwNzE1LDQwNzE3LDM4NTg1LDM4NTg4LDM4NTg5LDM4NjA2LDM4NjEwLDMwNjU1LDM4NjI0LDM3NTE4LDM3NTUwLDM3NTc2LDM3Njk0LDM3NzM4LDM3ODM0LDM3Nzc1LDM3OTUwLDM3OTk1LDQwMDYzLDQwMDY2''@;'; put 'put ''LDQwMDY5LDQwMDcwLDQwMDcxLDQwMDcyLDMxMjY3LDQwMDc1LDQwMDc4LDQwMDgwLDQwMDgxLDQwMDgyLDQwMDg0LDQwMDg1LDQwMDkwLDQwMDkxLDQwMDk0LDQwMDk1LDQwMDk2LDQwMDk3LDQwMDk4LDQwMDk5LDQwMTAxLDQwMTAyLDQwMTAzLDQwMTA0LDQwMTA1LDQwMTA3LDQwMTA5LDQw''@;'; put 'put ''MTEwLDQwMTEyLDQwMTEzLDQwMTE0LDQwMTE1LDQwMTE2LDQwMTE3LDQwMTE4LDQwMTE5LDQwMTIyLDQwMTIzLDQwMTI0LDQwMTI1LDQwMTMyLDQwMTMzLDQwMTM0LDQwMTM1LDQwMTM4LDQwMTM5LDM5OTk2LDM5OTk3LDM5OTk4LDM5OTk5LDRlNCw0MDAwMSw0MDAwMiw0MDAwMyw0MDAwNCw0''@;'; put 'put ''MDAwNSw0MDAwNiw0MDAwNyw0MDAwOCw0MDAwOSw0MDAxMCw0MDAxMSw0MDAxMiw0MDAxMyw0MDAxNCw0MDAxNSw0MDAxNiw0MDAxNyw0MDAxOCw0MDAxOSw0MDAyMCw0MDAyMSw0MDAyMiw0MDAyMyw0MDAyNCw0MDAyNSw0MDAyNiw0MDAyNyw0MDAyOCw0MDAyOSw0MDAzMCw0MDAzMSw0MDAz''@;'; put 'put ''Miw0MDAzMyw0MDAzNCw0MDAzNSw0MDAzNiw0MDAzNyw0MDAzOCw0MDAzOSw0MDA0MCw0MDA0MSw0MDA0Miw0MDA0Myw0MDA0NCw0MDA0NSw0MDA0Niw0MDA0Nyw0MDA0OCw0MDA0OSw0MDA1MCw0MDA1MSw0MDA1Miw0MDA1Myw0MDA1NCw0MDA1NSw0MDA1Niw0MDA1Nyw0MDA1OCw0MDA1OSw0''@;'; put 'put ''MDA2MSw0MDA2Miw0MDA2NCw0MDA2Nyw0MDA2OCw0MDA3Myw0MDA3NCw0MDA3Niw0MDA3OSw0MDA4Myw0MDA4Niw0MDA4Nyw0MDA4OCw0MDA4OSw0MDA5Myw0MDEwNiw0MDEwOCw0MDExMSw0MDEyMSw0MDEyNiw0MDEyNyw0MDEyOCw0MDEyOSw0MDEzMCw0MDEzNiw0MDEzNyw0MDE0NSw0MDE0''@;'; put 'put ''Niw0MDE1NCw0MDE1NSw0MDE2MCw0MDE2MSw0MDE0MCw0MDE0MSw0MDE0Miw0MDE0Myw0MDE0NCw0MDE0Nyw0MDE0OCw0MDE0OSw0MDE1MSw0MDE1Miw0MDE1Myw0MDE1Niw0MDE1Nyw0MDE1OSw0MDE2MiwzODc4MCwzODc4OSwzODgwMSwzODgwMiwzODgwNCwzODgzMSwzODgyNywzODgxOSwz''@;'; put 'put ''ODgzNCwzODgzNiwzOTYwMSwzOTYwMCwzOTYwNyw0MDUzNiwzOTYwNiwzOTYxMCwzOTYxMiwzOTYxNywzOTYxNiwzOTYyMSwzOTYxOCwzOTYyNywzOTYyOCwzOTYzMywzOTc0OSwzOTc0NywzOTc1MSwzOTc1MywzOTc1MiwzOTc1NywzOTc2MSwzOTE0NCwzOTE4MSwzOTIxNCwzOTI1MywzOTI1''@;'; put 'put ''MiwzOTY0NywzOTY0OSwzOTY1NCwzOTY2MywzOTY1OSwzOTY3NSwzOTY2MSwzOTY3MywzOTY4OCwzOTY5NSwzOTY5OSwzOTcxMSwzOTcxNSw0MDYzNyw0MDYzOCwzMjMxNSw0MDU3OCw0MDU4Myw0MDU4NCw0MDU4Nyw0MDU5NCwzNzg0Niw0MDYwNSw0MDYwNyw0MDY2Nyw0MDY2OCw0MDY2OSw0''@;'; put 'put ''MDY3Miw0MDY3MSw0MDY3NCw0MDY4MSw0MDY3OSw0MDY3Nyw0MDY4Miw0MDY4Nyw0MDczOCw0MDc0OCw0MDc1MSw0MDc2MSw0MDc1OSw0MDc2NSw0MDc2Niw0MDc3Miw0MDE2Myw0MDE2NCw0MDE2NSw0MDE2Niw0MDE2Nyw0MDE2OCw0MDE2OSw0MDE3MCw0MDE3MSw0MDE3Miw0MDE3Myw0MDE3''@;'; put 'put ''NCw0MDE3NSw0MDE3Niw0MDE3Nyw0MDE3OCw0MDE3OSw0MDE4MCw0MDE4MSw0MDE4Miw0MDE4Myw0MDE4NCw0MDE4NSw0MDE4Niw0MDE4Nyw0MDE4OCw0MDE4OSw0MDE5MCw0MDE5MSw0MDE5Miw0MDE5Myw0MDE5NCw0MDE5NSw0MDE5Niw0MDE5Nyw0MDE5OCw0MDE5OSw0MDIwMCw0MDIwMSw0''@;'; put 'put ''MDIwMiw0MDIwMyw0MDIwNCw0MDIwNSw0MDIwNiw0MDIwNyw0MDIwOCw0MDIwOSw0MDIxMCw0MDIxMSw0MDIxMiw0MDIxMyw0MDIxNCw0MDIxNSw0MDIxNiw0MDIxNyw0MDIxOCw0MDIxOSw0MDIyMCw0MDIyMSw0MDIyMiw0MDIyMyw0MDIyNCw0MDIyNSw0MDIyNiw0MDIyNyw0MDIyOCw0MDIy''@;'; put 'put ''OSw0MDIzMCw0MDIzMSw0MDIzMiw0MDIzMyw0MDIzNCw0MDIzNSw0MDIzNiw0MDIzNyw0MDIzOCw0MDIzOSw0MDI0MCw0MDI0MSw0MDI0Miw0MDI0Myw0MDI0NCw0MDI0NSw0MDI0Niw0MDI0Nyw0MDI0OCw0MDI0OSw0MDI1MCw0MDI1MSw0MDI1Miw0MDI1Myw0MDI1NCw0MDI1NSw0MDI1Niw0''@;'; put 'put ''MDI1Nyw0MDI1OCw1NzkwOCw1NzkwOSw1NzkxMCw1NzkxMSw1NzkxMiw1NzkxMyw1NzkxNCw1NzkxNSw1NzkxNiw1NzkxNyw1NzkxOCw1NzkxOSw1NzkyMCw1NzkyMSw1NzkyMiw1NzkyMyw1NzkyNCw1NzkyNSw1NzkyNiw1NzkyNyw1NzkyOCw1NzkyOSw1NzkzMCw1NzkzMSw1NzkzMiw1Nzkz''@;'; put 'put ''Myw1NzkzNCw1NzkzNSw1NzkzNiw1NzkzNyw1NzkzOCw1NzkzOSw1Nzk0MCw1Nzk0MSw1Nzk0Miw1Nzk0Myw1Nzk0NCw1Nzk0NSw1Nzk0Niw1Nzk0Nyw1Nzk0OCw1Nzk0OSw1Nzk1MCw1Nzk1MSw1Nzk1Miw1Nzk1Myw1Nzk1NCw1Nzk1NSw1Nzk1Niw1Nzk1Nyw1Nzk1OCw1Nzk1OSw1Nzk2MCw1''@;'; put 'put ''Nzk2MSw1Nzk2Miw1Nzk2Myw1Nzk2NCw1Nzk2NSw1Nzk2Niw1Nzk2Nyw1Nzk2OCw1Nzk2OSw1Nzk3MCw1Nzk3MSw1Nzk3Miw1Nzk3Myw1Nzk3NCw1Nzk3NSw1Nzk3Niw1Nzk3Nyw1Nzk3OCw1Nzk3OSw1Nzk4MCw1Nzk4MSw1Nzk4Miw1Nzk4Myw1Nzk4NCw1Nzk4NSw1Nzk4Niw1Nzk4Nyw1Nzk4''@;'; put 'put ''OCw1Nzk4OSw1Nzk5MCw1Nzk5MSw1Nzk5Miw1Nzk5Myw1Nzk5NCw1Nzk5NSw1Nzk5Niw1Nzk5Nyw1Nzk5OCw1Nzk5OSw1OGUzLDU4MDAxLDQwMjU5LDQwMjYwLDQwMjYxLDQwMjYyLDQwMjYzLDQwMjY0LDQwMjY1LDQwMjY2LDQwMjY3LDQwMjY4LDQwMjY5LDQwMjcwLDQwMjcxLDQwMjcyLDQw''@;'; put 'put ''MjczLDQwMjc0LDQwMjc1LDQwMjc2LDQwMjc3LDQwMjc4LDQwMjc5LDQwMjgwLDQwMjgxLDQwMjgyLDQwMjgzLDQwMjg0LDQwMjg1LDQwMjg2LDQwMjg3LDQwMjg4LDQwMjg5LDQwMjkwLDQwMjkxLDQwMjkyLDQwMjkzLDQwMjk0LDQwMjk1LDQwMjk2LDQwMjk3LDQwMjk4LDQwMjk5LDQwMzAw''@;'; put 'put ''LDQwMzAxLDQwMzAyLDQwMzAzLDQwMzA0LDQwMzA1LDQwMzA2LDQwMzA3LDQwMzA4LDQwMzA5LDQwMzEwLDQwMzExLDQwMzEyLDQwMzEzLDQwMzE0LDQwMzE1LDQwMzE2LDQwMzE3LDQwMzE4LDQwMzE5LDQwMzIwLDQwMzIxLDQwMzIyLDQwMzIzLDQwMzI0LDQwMzI1LDQwMzI2LDQwMzI3LDQw''@;'; put 'put ''MzI4LDQwMzI5LDQwMzMwLDQwMzMxLDQwMzMyLDQwMzMzLDQwMzM0LDQwMzM1LDQwMzM2LDQwMzM3LDQwMzM4LDQwMzM5LDQwMzQwLDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzQ1LDQwMzQ2LDQwMzQ3LDQwMzQ4LDQwMzQ5LDQwMzUwLDQwMzUxLDQwMzUyLDQwMzUzLDQwMzU0LDU4MDAy''@;'; put 'put ''LDU4MDAzLDU4MDA0LDU4MDA1LDU4MDA2LDU4MDA3LDU4MDA4LDU4MDA5LDU4MDEwLDU4MDExLDU4MDEyLDU4MDEzLDU4MDE0LDU4MDE1LDU4MDE2LDU4MDE3LDU4MDE4LDU4MDE5LDU4MDIwLDU4MDIxLDU4MDIyLDU4MDIzLDU4MDI0LDU4MDI1LDU4MDI2LDU4MDI3LDU4MDI4LDU4MDI5LDU4''@;'; put 'put ''MDMwLDU4MDMxLDU4MDMyLDU4MDMzLDU4MDM0LDU4MDM1LDU4MDM2LDU4MDM3LDU4MDM4LDU4MDM5LDU4MDQwLDU4MDQxLDU4MDQyLDU4MDQzLDU4MDQ0LDU4MDQ1LDU4MDQ2LDU4MDQ3LDU4MDQ4LDU4MDQ5LDU4MDUwLDU4MDUxLDU4MDUyLDU4MDUzLDU4MDU0LDU4MDU1LDU4MDU2LDU4MDU3''@;'; put 'put ''LDU4MDU4LDU4MDU5LDU4MDYwLDU4MDYxLDU4MDYyLDU4MDYzLDU4MDY0LDU4MDY1LDU4MDY2LDU4MDY3LDU4MDY4LDU4MDY5LDU4MDcwLDU4MDcxLDU4MDcyLDU4MDczLDU4MDc0LDU4MDc1LDU4MDc2LDU4MDc3LDU4MDc4LDU4MDc5LDU4MDgwLDU4MDgxLDU4MDgyLDU4MDgzLDU4MDg0LDU4''@;'; put 'put ''MDg1LDU4MDg2LDU4MDg3LDU4MDg4LDU4MDg5LDU4MDkwLDU4MDkxLDU4MDkyLDU4MDkzLDU4MDk0LDU4MDk1LDQwMzU1LDQwMzU2LDQwMzU3LDQwMzU4LDQwMzU5LDQwMzYwLDQwMzYxLDQwMzYyLDQwMzYzLDQwMzY0LDQwMzY1LDQwMzY2LDQwMzY3LDQwMzY4LDQwMzY5LDQwMzcwLDQwMzcx''@;'; put 'put ''LDQwMzcyLDQwMzczLDQwMzc0LDQwMzc1LDQwMzc2LDQwMzc3LDQwMzc4LDQwMzc5LDQwMzgwLDQwMzgxLDQwMzgyLDQwMzgzLDQwMzg0LDQwMzg1LDQwMzg2LDQwMzg3LDQwMzg4LDQwMzg5LDQwMzkwLDQwMzkxLDQwMzkyLDQwMzkzLDQwMzk0LDQwMzk1LDQwMzk2LDQwMzk3LDQwMzk4LDQw''@;'; put 'put ''Mzk5LDQwNDAwLDQwNDAxLDQwNDAyLDQwNDAzLDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDA4LDQwNDA5LDQwNDEwLDQwNDExLDQwNDEyLDQwNDEzLDQwNDE0LDQwNDE1LDQwNDE2LDQwNDE3LDQwNDE4LDQwNDE5LDQwNDIwLDQwNDIxLDQwNDIyLDQwNDIzLDQwNDI0LDQwNDI1LDQwNDI2''@;'; put 'put ''LDQwNDI3LDQwNDI4LDQwNDI5LDQwNDMwLDQwNDMxLDQwNDMyLDQwNDMzLDQwNDM0LDQwNDM1LDQwNDM2LDQwNDM3LDQwNDM4LDQwNDM5LDQwNDQwLDQwNDQxLDQwNDQyLDQwNDQzLDQwNDQ0LDQwNDQ1LDQwNDQ2LDQwNDQ3LDQwNDQ4LDQwNDQ5LDQwNDUwLDU4MDk2LDU4MDk3LDU4MDk4LDU4''@;'; put 'put ''MDk5LDU4MTAwLDU4MTAxLDU4MTAyLDU4MTAzLDU4MTA0LDU4MTA1LDU4MTA2LDU4MTA3LDU4MTA4LDU4MTA5LDU4MTEwLDU4MTExLDU4MTEyLDU4MTEzLDU4MTE0LDU4MTE1LDU4MTE2LDU4MTE3LDU4MTE4LDU4MTE5LDU4MTIwLDU4MTIxLDU4MTIyLDU4MTIzLDU4MTI0LDU4MTI1LDU4MTI2''@;'; put 'put ''LDU4MTI3LDU4MTI4LDU4MTI5LDU4MTMwLDU4MTMxLDU4MTMyLDU4MTMzLDU4MTM0LDU4MTM1LDU4MTM2LDU4MTM3LDU4MTM4LDU4MTM5LDU4MTQwLDU4MTQxLDU4MTQyLDU4MTQzLDU4MTQ0LDU4MTQ1LDU4MTQ2LDU4MTQ3LDU4MTQ4LDU4MTQ5LDU4MTUwLDU4MTUxLDU4MTUyLDU4MTUzLDU4''@;'; put 'put ''MTU0LDU4MTU1LDU4MTU2LDU4MTU3LDU4MTU4LDU4MTU5LDU4MTYwLDU4MTYxLDU4MTYyLDU4MTYzLDU4MTY0LDU4MTY1LDU4MTY2LDU4MTY3LDU4MTY4LDU4MTY5LDU4MTcwLDU4MTcxLDU4MTcyLDU4MTczLDU4MTc0LDU4MTc1LDU4MTc2LDU4MTc3LDU4MTc4LDU4MTc5LDU4MTgwLDU4MTgx''@;'; put 'put ''LDU4MTgyLDU4MTgzLDU4MTg0LDU4MTg1LDU4MTg2LDU4MTg3LDU4MTg4LDU4MTg5LDQwNDUxLDQwNDUyLDQwNDUzLDQwNDU0LDQwNDU1LDQwNDU2LDQwNDU3LDQwNDU4LDQwNDU5LDQwNDYwLDQwNDYxLDQwNDYyLDQwNDYzLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY3LDQwNDY4LDQwNDY5LDQw''@;'; put 'put ''NDcwLDQwNDcxLDQwNDcyLDQwNDczLDQwNDc0LDQwNDc1LDQwNDc2LDQwNDc3LDQwNDc4LDQwNDg0LDQwNDg3LDQwNDk0LDQwNDk2LDQwNTAwLDQwNTA3LDQwNTA4LDQwNTEyLDQwNTI1LDQwNTI4LDQwNTMwLDQwNTMxLDQwNTMyLDQwNTM0LDQwNTM3LDQwNTQxLDQwNTQzLDQwNTQ0LDQwNTQ1''@;'; put 'put ''LDQwNTQ2LDQwNTQ5LDQwNTU4LDQwNTU5LDQwNTYyLDQwNTY0LDQwNTY1LDQwNTY2LDQwNTY3LDQwNTY4LDQwNTY5LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTczLDQwNTc2LDQwNTc3LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgyLDQwNTg1LDQwNTg2LDQwNTg4LDQwNTg5LDQwNTkwLDQwNTkxLDQw''@;'; put 'put ''NTkyLDQwNTkzLDQwNTk2LDQwNTk3LDQwNTk4LDQwNTk5LDQwNjAwLDQwNjAxLDQwNjAyLDQwNjAzLDQwNjA0LDQwNjA2LDQwNjA4LDQwNjA5LDQwNjEwLDQwNjExLDQwNjEyLDQwNjEzLDQwNjE1LDQwNjE2LDQwNjE3LDQwNjE4LDU4MTkwLDU4MTkxLDU4MTkyLDU4MTkzLDU4MTk0LDU4MTk1''@;'; put 'put ''LDU4MTk2LDU4MTk3LDU4MTk4LDU4MTk5LDU4MjAwLDU4MjAxLDU4MjAyLDU4MjAzLDU4MjA0LDU4MjA1LDU4MjA2LDU4MjA3LDU4MjA4LDU4MjA5LDU4MjEwLDU4MjExLDU4MjEyLDU4MjEzLDU4MjE0LDU4MjE1LDU4MjE2LDU4MjE3LDU4MjE4LDU4MjE5LDU4MjIwLDU4MjIxLDU4MjIyLDU4''@;'; put 'put ''MjIzLDU4MjI0LDU4MjI1LDU4MjI2LDU4MjI3LDU4MjI4LDU4MjI5LDU4MjMwLDU4MjMxLDU4MjMyLDU4MjMzLDU4MjM0LDU4MjM1LDU4MjM2LDU4MjM3LDU4MjM4LDU4MjM5LDU4MjQwLDU4MjQxLDU4MjQyLDU4MjQzLDU4MjQ0LDU4MjQ1LDU4MjQ2LDU4MjQ3LDU4MjQ4LDU4MjQ5LDU4MjUw''@;'; put 'put ''LDU4MjUxLDU4MjUyLDU4MjUzLDU4MjU0LDU4MjU1LDU4MjU2LDU4MjU3LDU4MjU4LDU4MjU5LDU4MjYwLDU4MjYxLDU4MjYyLDU4MjYzLDU4MjY0LDU4MjY1LDU4MjY2LDU4MjY3LDU4MjY4LDU4MjY5LDU4MjcwLDU4MjcxLDU4MjcyLDU4MjczLDU4Mjc0LDU4Mjc1LDU4Mjc2LDU4Mjc3LDU4''@;'; put 'put ''Mjc4LDU4Mjc5LDU4MjgwLDU4MjgxLDU4MjgyLDU4MjgzLDQwNjE5LDQwNjIwLDQwNjIxLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI1LDQwNjI2LDQwNjI3LDQwNjI5LDQwNjMwLDQwNjMxLDQwNjMzLDQwNjM0LDQwNjM2LDQwNjM5LDQwNjQwLDQwNjQxLDQwNjQyLDQwNjQzLDQwNjQ1LDQwNjQ2''@;'; put 'put ''LDQwNjQ3LDQwNjQ4LDQwNjUwLDQwNjUxLDQwNjUyLDQwNjU2LDQwNjU4LDQwNjU5LDQwNjYxLDQwNjYyLDQwNjYzLDQwNjY1LDQwNjY2LDQwNjcwLDQwNjczLDQwNjc1LDQwNjc2LDQwNjc4LDQwNjgwLDQwNjgzLDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkxLDQw''@;'; put 'put ''NjkyLDQwNjkzLDQwNjk0LDQwNjk1LDQwNjk2LDQwNjk4LDQwNzAxLDQwNzAzLDQwNzA0LDQwNzA1LDQwNzA2LDQwNzA3LDQwNzA4LDQwNzA5LDQwNzEwLDQwNzExLDQwNzEyLDQwNzEzLDQwNzE0LDQwNzE2LDQwNzE5LDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI1LDQwNzI2LDQwNzI4LDQwNzMw''@;'; put 'put ''LDQwNzMxLDQwNzMyLDQwNzMzLDQwNzM0LDQwNzM1LDQwNzM3LDQwNzM5LDQwNzQwLDQwNzQxLDQwNzQyLDQwNzQzLDQwNzQ0LDQwNzQ1LDQwNzQ2LDQwNzQ3LDQwNzQ5LDQwNzUwLDQwNzUyLDQwNzUzLDU4Mjg0LDU4Mjg1LDU4Mjg2LDU4Mjg3LDU4Mjg4LDU4Mjg5LDU4MjkwLDU4MjkxLDU4''@;'; put 'put ''MjkyLDU4MjkzLDU4Mjk0LDU4Mjk1LDU4Mjk2LDU4Mjk3LDU4Mjk4LDU4Mjk5LDU4MzAwLDU4MzAxLDU4MzAyLDU4MzAzLDU4MzA0LDU4MzA1LDU4MzA2LDU4MzA3LDU4MzA4LDU4MzA5LDU4MzEwLDU4MzExLDU4MzEyLDU4MzEzLDU4MzE0LDU4MzE1LDU4MzE2LDU4MzE3LDU4MzE4LDU4MzE5''@;'; put 'put ''LDU4MzIwLDU4MzIxLDU4MzIyLDU4MzIzLDU4MzI0LDU4MzI1LDU4MzI2LDU4MzI3LDU4MzI4LDU4MzI5LDU4MzMwLDU4MzMxLDU4MzMyLDU4MzMzLDU4MzM0LDU4MzM1LDU4MzM2LDU4MzM3LDU4MzM4LDU4MzM5LDU4MzQwLDU4MzQxLDU4MzQyLDU4MzQzLDU4MzQ0LDU4MzQ1LDU4MzQ2LDU4''@;'; put 'put ''MzQ3LDU4MzQ4LDU4MzQ5LDU4MzUwLDU4MzUxLDU4MzUyLDU4MzUzLDU4MzU0LDU4MzU1LDU4MzU2LDU4MzU3LDU4MzU4LDU4MzU5LDU4MzYwLDU4MzYxLDU4MzYyLDU4MzYzLDU4MzY0LDU4MzY1LDU4MzY2LDU4MzY3LDU4MzY4LDU4MzY5LDU4MzcwLDU4MzcxLDU4MzcyLDU4MzczLDU4Mzc0''@;'; put 'put ''LDU4Mzc1LDU4Mzc2LDU4Mzc3LDQwNzU0LDQwNzU1LDQwNzU2LDQwNzU3LDQwNzU4LDQwNzYwLDQwNzYyLDQwNzY0LDQwNzY3LDQwNzY4LDQwNzY5LDQwNzcwLDQwNzcxLDQwNzczLDQwNzc0LDQwNzc1LDQwNzc2LDQwNzc3LDQwNzc4LDQwNzc5LDQwNzgwLDQwNzgxLDQwNzgyLDQwNzgzLDQw''@;'; put 'put ''Nzg2LDQwNzg3LDQwNzg4LDQwNzg5LDQwNzkwLDQwNzkxLDQwNzkyLDQwNzkzLDQwNzk0LDQwNzk1LDQwNzk2LDQwNzk3LDQwNzk4LDQwNzk5LDQwODAwLDQwODAxLDQwODAyLDQwODAzLDQwODA0LDQwODA1LDQwODA2LDQwODA3LDQwODA4LDQwODA5LDQwODEwLDQwODExLDQwODEyLDQwODEz''@;'; put 'put ''LDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE4LDQwODE5LDQwODIwLDQwODIxLDQwODIyLDQwODIzLDQwODI0LDQwODI1LDQwODI2LDQwODI3LDQwODI4LDQwODI5LDQwODMwLDQwODMzLDQwODM0LDQwODQ1LDQwODQ2LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUxLDQwODUyLDQw''@;'; put 'put ''ODUzLDQwODU0LDQwODU1LDQwODU2LDQwODYwLDQwODYxLDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY4LDQwODY5LDYzNzg4LDYzODY1LDYzODkzLDYzOTc1LDYzOTg1LDU4Mzc4LDU4Mzc5LDU4MzgwLDU4MzgxLDU4MzgyLDU4MzgzLDU4Mzg0LDU4Mzg1LDU4Mzg2LDU4Mzg3LDU4Mzg4''@;'; put 'put ''LDU4Mzg5LDU4MzkwLDU4MzkxLDU4MzkyLDU4MzkzLDU4Mzk0LDU4Mzk1LDU4Mzk2LDU4Mzk3LDU4Mzk4LDU4Mzk5LDU4NDAwLDU4NDAxLDU4NDAyLDU4NDAzLDU4NDA0LDU4NDA1LDU4NDA2LDU4NDA3LDU4NDA4LDU4NDA5LDU4NDEwLDU4NDExLDU4NDEyLDU4NDEzLDU4NDE0LDU4NDE1LDU4''@;'; put 'put ''NDE2LDU4NDE3LDU4NDE4LDU4NDE5LDU4NDIwLDU4NDIxLDU4NDIyLDU4NDIzLDU4NDI0LDU4NDI1LDU4NDI2LDU4NDI3LDU4NDI4LDU4NDI5LDU4NDMwLDU4NDMxLDU4NDMyLDU4NDMzLDU4NDM0LDU4NDM1LDU4NDM2LDU4NDM3LDU4NDM4LDU4NDM5LDU4NDQwLDU4NDQxLDU4NDQyLDU4NDQz''@;'; put 'put ''LDU4NDQ0LDU4NDQ1LDU4NDQ2LDU4NDQ3LDU4NDQ4LDU4NDQ5LDU4NDUwLDU4NDUxLDU4NDUyLDU4NDUzLDU4NDU0LDU4NDU1LDU4NDU2LDU4NDU3LDU4NDU4LDU4NDU5LDU4NDYwLDU4NDYxLDU4NDYyLDU4NDYzLDU4NDY0LDU4NDY1LDU4NDY2LDU4NDY3LDU4NDY4LDU4NDY5LDU4NDcwLDU4''@;'; put 'put ''NDcxLDY0MDEyLDY0MDEzLDY0MDE0LDY0MDE1LDY0MDE3LDY0MDE5LDY0MDIwLDY0MDI0LDY0MDMxLDY0MDMyLDY0MDMzLDY0MDM1LDY0MDM2LDY0MDM5LDY0MDQwLDY0MDQxLDExOTA1LDU5NDE0LDU5NDE1LDU5NDE2LDExOTA4LDEzNDI3LDEzMzgzLDExOTEyLDExOTE1LDU5NDIyLDEzNzI2''@;'; put 'put ''LDEzODUwLDEzODM4LDExOTE2LDExOTI3LDE0NzAyLDE0NjE2LDU5NDMwLDE0Nzk5LDE0ODE1LDE0OTYzLDE0ODAwLDU5NDM1LDU5NDM2LDE1MTgyLDE1NDcwLDE1NTg0LDExOTQzLDU5NDQxLDU5NDQyLDExOTQ2LDE2NDcwLDE2NzM1LDExOTUwLDE3MjA3LDExOTU1LDExOTU4LDExOTU5LDU5''@;'; put 'put ''NDUxLDE3MzI5LDE3MzI0LDExOTYzLDE3MzczLDE3NjIyLDE4MDE3LDE3OTk2LDU5NDU5LDE4MjExLDE4MjE3LDE4MzAwLDE4MzE3LDExOTc4LDE4NzU5LDE4ODEwLDE4ODEzLDE4ODE4LDE4ODE5LDE4ODIxLDE4ODIyLDE4ODQ3LDE4ODQzLDE4ODcxLDE4ODcwLDU5NDc2LDU5NDc3LDE5NjE5''@;'; put 'put ''LDE5NjE1LDE5NjE2LDE5NjE3LDE5NTc1LDE5NjE4LDE5NzMxLDE5NzMyLDE5NzMzLDE5NzM0LDE5NzM1LDE5NzM2LDE5NzM3LDE5ODg2LDU5NDkyLDU4NDcyLDU4NDczLDU4NDc0LDU4NDc1LDU4NDc2LDU4NDc3LDU4NDc4LDU4NDc5LDU4NDgwLDU4NDgxLDU4NDgyLDU4NDgzLDU4NDg0LDU4''@;'; put 'put ''NDg1LDU4NDg2LDU4NDg3LDU4NDg4LDU4NDg5LDU4NDkwLDU4NDkxLDU4NDkyLDU4NDkzLDU4NDk0LDU4NDk1LDU4NDk2LDU4NDk3LDU4NDk4LDU4NDk5LDU4NTAwLDU4NTAxLDU4NTAyLDU4NTAzLDU4NTA0LDU4NTA1LDU4NTA2LDU4NTA3LDU4NTA4LDU4NTA5LDU4NTEwLDU4NTExLDU4NTEy''@;'; put 'put ''LDU4NTEzLDU4NTE0LDU4NTE1LDU4NTE2LDU4NTE3LDU4NTE4LDU4NTE5LDU4NTIwLDU4NTIxLDU4NTIyLDU4NTIzLDU4NTI0LDU4NTI1LDU4NTI2LDU4NTI3LDU4NTI4LDU4NTI5LDU4NTMwLDU4NTMxLDU4NTMyLDU4NTMzLDU4NTM0LDU4NTM1LDU4NTM2LDU4NTM3LDU4NTM4LDU4NTM5LDU4''@;'; put 'put ''NTQwLDU4NTQxLDU4NTQyLDU4NTQzLDU4NTQ0LDU4NTQ1LDU4NTQ2LDU4NTQ3LDU4NTQ4LDU4NTQ5LDU4NTUwLDU4NTUxLDU4NTUyLDU4NTUzLDU4NTU0LDU4NTU1LDU4NTU2LDU4NTU3LDU4NTU4LDU4NTU5LDU4NTYwLDU4NTYxLDU4NTYyLDU4NTYzLDU4NTY0LDU4NTY1XSwiZ2IxODAzMC1y''@;'; put 'put ''YW5nZXMiOltbMCwxMjhdLFszNiwxNjVdLFszOCwxNjldLFs0NSwxNzhdLFs1MCwxODRdLFs4MSwyMTZdLFs4OSwyMjZdLFs5NSwyMzVdLFs5NiwyMzhdLFsxMDAsMjQ0XSxbMTAzLDI0OF0sWzEwNCwyNTFdLFsxMDUsMjUzXSxbMTA5LDI1OF0sWzEyNiwyNzZdLFsxMzMsMjg0XSxbMTQ4LDMw''@;'; put 'put ''MF0sWzE3MiwzMjVdLFsxNzUsMzI5XSxbMTc5LDMzNF0sWzIwOCwzNjRdLFszMDYsNDYzXSxbMzA3LDQ2NV0sWzMwOCw0NjddLFszMDksNDY5XSxbMzEwLDQ3MV0sWzMxMSw0NzNdLFszMTIsNDc1XSxbMzEzLDQ3N10sWzM0MSw1MDZdLFs0MjgsNTk0XSxbNDQzLDYxMF0sWzU0NCw3MTJdLFs1''@;'; put 'put ''NDUsNzE2XSxbNTU4LDczMF0sWzc0MSw5MzBdLFs3NDIsOTM4XSxbNzQ5LDk2Ml0sWzc1MCw5NzBdLFs4MDUsMTAyNl0sWzgxOSwxMTA0XSxbODIwLDExMDZdLFs3OTIyLDgyMDldLFs3OTI0LDgyMTVdLFs3OTI1LDgyMThdLFs3OTI3LDgyMjJdLFs3OTM0LDgyMzFdLFs3OTQzLDgyNDFdLFs3''@;'; put 'put ''OTQ0LDgyNDRdLFs3OTQ1LDgyNDZdLFs3OTUwLDgyNTJdLFs4MDYyLDgzNjVdLFs4MTQ4LDg0NTJdLFs4MTQ5LDg0NTRdLFs4MTUyLDg0NThdLFs4MTY0LDg0NzFdLFs4MTc0LDg0ODJdLFs4MjM2LDg1NTZdLFs4MjQwLDg1NzBdLFs4MjYyLDg1OTZdLFs4MjY0LDg2MDJdLFs4Mzc0LDg3MTNd''@;'; put 'put ''LFs4MzgwLDg3MjBdLFs4MzgxLDg3MjJdLFs4Mzg0LDg3MjZdLFs4Mzg4LDg3MzFdLFs4MzkwLDg3MzddLFs4MzkyLDg3NDBdLFs4MzkzLDg3NDJdLFs4Mzk0LDg3NDhdLFs4Mzk2LDg3NTFdLFs4NDAxLDg3NjBdLFs4NDA2LDg3NjZdLFs4NDE2LDg3NzddLFs4NDE5LDg3ODFdLFs4NDI0LDg3''@;'; put 'put ''ODddLFs4NDM3LDg4MDJdLFs4NDM5LDg4MDhdLFs4NDQ1LDg4MTZdLFs4NDgyLDg4NTRdLFs4NDg1LDg4NThdLFs4NDk2LDg4NzBdLFs4NTIxLDg4OTZdLFs4NjAzLDg5NzldLFs4OTM2LDkzMjJdLFs4OTQ2LDkzNzJdLFs5MDQ2LDk1NDhdLFs5MDUwLDk1ODhdLFs5MDYzLDk2MTZdLFs5MDY2''@;'; put 'put ''LDk2MjJdLFs5MDc2LDk2MzRdLFs5MDkyLDk2NTJdLFs5MTAwLDk2NjJdLFs5MTA4LDk2NzJdLFs5MTExLDk2NzZdLFs5MTEzLDk2ODBdLFs5MTMxLDk3MDJdLFs5MTYyLDk3MzVdLFs5MTY0LDk3MzhdLFs5MjE4LDk3OTNdLFs5MjE5LDk3OTVdLFsxMTMyOSwxMTkwNl0sWzExMzMxLDExOTA5''@;'; put 'put ''XSxbMTEzMzQsMTE5MTNdLFsxMTMzNiwxMTkxN10sWzExMzQ2LDExOTI4XSxbMTEzNjEsMTE5NDRdLFsxMTM2MywxMTk0N10sWzExMzY2LDExOTUxXSxbMTEzNzAsMTE5NTZdLFsxMTM3MiwxMTk2MF0sWzExMzc1LDExOTY0XSxbMTEzODksMTE5NzldLFsxMTY4MiwxMjI4NF0sWzExNjg2LDEy''@;'; put 'put ''MjkyXSxbMTE2ODcsMTIzMTJdLFsxMTY5MiwxMjMxOV0sWzExNjk0LDEyMzMwXSxbMTE3MTQsMTIzNTFdLFsxMTcxNiwxMjQzNl0sWzExNzIzLDEyNDQ3XSxbMTE3MjUsMTI1MzVdLFsxMTczMCwxMjU0M10sWzExNzM2LDEyNTg2XSxbMTE5ODIsMTI4NDJdLFsxMTk4OSwxMjg1MF0sWzEyMTAy''@;'; put 'put ''LDEyOTY0XSxbMTIzMzYsMTMyMDBdLFsxMjM0OCwxMzIxNV0sWzEyMzUwLDEzMjE4XSxbMTIzODQsMTMyNTNdLFsxMjM5MywxMzI2M10sWzEyMzk1LDEzMjY3XSxbMTIzOTcsMTMyNzBdLFsxMjUxMCwxMzM4NF0sWzEyNTUzLDEzNDI4XSxbMTI4NTEsMTM3MjddLFsxMjk2MiwxMzgzOV0sWzEy''@;'; put 'put ''OTczLDEzODUxXSxbMTM3MzgsMTQ2MTddLFsxMzgyMywxNDcwM10sWzEzOTE5LDE0ODAxXSxbMTM5MzMsMTQ4MTZdLFsxNDA4MCwxNDk2NF0sWzE0Mjk4LDE1MTgzXSxbMTQ1ODUsMTU0NzFdLFsxNDY5OCwxNTU4NV0sWzE1NTgzLDE2NDcxXSxbMTU4NDcsMTY3MzZdLFsxNjMxOCwxNzIwOF0s''@;'; put 'put ''WzE2NDM0LDE3MzI1XSxbMTY0MzgsMTczMzBdLFsxNjQ4MSwxNzM3NF0sWzE2NzI5LDE3NjIzXSxbMTcxMDIsMTc5OTddLFsxNzEyMiwxODAxOF0sWzE3MzE1LDE4MjEyXSxbMTczMjAsMTgyMThdLFsxNzQwMiwxODMwMV0sWzE3NDE4LDE4MzE4XSxbMTc4NTksMTg3NjBdLFsxNzkwOSwxODgx''@;'; put 'put ''MV0sWzE3OTExLDE4ODE0XSxbMTc5MTUsMTg4MjBdLFsxNzkxNiwxODgyM10sWzE3OTM2LDE4ODQ0XSxbMTc5MzksMTg4NDhdLFsxNzk2MSwxODg3Ml0sWzE4NjY0LDE5NTc2XSxbMTg3MDMsMTk2MjBdLFsxODgxNCwxOTczOF0sWzE4OTYyLDE5ODg3XSxbMTkwNDMsNDA4NzBdLFszMzQ2OSw1''@;'; put 'put ''OTI0NF0sWzMzNDcwLDU5MzM2XSxbMzM0NzEsNTkzNjddLFszMzQ4NCw1OTQxM10sWzMzNDg1LDU5NDE3XSxbMzM0OTAsNTk0MjNdLFszMzQ5Nyw1OTQzMV0sWzMzNTAxLDU5NDM3XSxbMzM1MDUsNTk0NDNdLFszMzUxMyw1OTQ1Ml0sWzMzNTIwLDU5NDYwXSxbMzM1MzYsNTk0NzhdLFszMzU1''@;'; put 'put ''MCw1OTQ5M10sWzM3ODQ1LDYzNzg5XSxbMzc5MjEsNjM4NjZdLFszNzk0OCw2Mzg5NF0sWzM4MDI5LDYzOTc2XSxbMzgwMzgsNjM5ODZdLFszODA2NCw2NDAxNl0sWzM4MDY1LDY0MDE4XSxbMzgwNjYsNjQwMjFdLFszODA2OSw2NDAyNV0sWzM4MDc1LDY0MDM0XSxbMzgwNzYsNjQwMzddLFsz''@;'; put 'put ''ODA3OCw2NDA0Ml0sWzM5MTA4LDY1MDc0XSxbMzkxMDksNjUwOTNdLFszOTExMyw2NTEwN10sWzM5MTE0LDY1MTEyXSxbMzkxMTUsNjUxMjddLFszOTExNiw2NTEzMl0sWzM5MjY1LDY1Mzc1XSxbMzkzOTQsNjU1MTBdLFsxODllMyw2NTUzNl1dLGppczAyMDg6WzEyMjg4LDEyMjg5LDEyMjkw''@;'; put 'put ''LDY1MjkyLDY1Mjk0LDEyNTM5LDY1MzA2LDY1MzA3LDY1MzExLDY1MjgxLDEyNDQzLDEyNDQ0LDE4MCw2NTM0NCwxNjgsNjUzNDIsNjU1MDcsNjUzNDMsMTI1NDEsMTI1NDIsMTI0NDUsMTI0NDYsMTIyOTEsMjAxODksMTIyOTMsMTIyOTQsMTIyOTUsMTI1NDAsODIxMyw4MjA4LDY1Mjk1LDY1''@;'; put 'put ''MzQwLDY1Mzc0LDg3NDEsNjUzNzIsODIzMCw4MjI5LDgyMTYsODIxNyw4MjIwLDgyMjEsNjUyODgsNjUyODksMTIzMDgsMTIzMDksNjUzMzksNjUzNDEsNjUzNzEsNjUzNzMsMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMDQsMTIzMDUsNjUyOTEs''@;'; put 'put ''NjUyOTMsMTc3LDIxNSwyNDcsNjUzMDksODgwMCw2NTMwOCw2NTMxMCw4ODA2LDg4MDcsODczNCw4NzU2LDk3OTQsOTc5MiwxNzYsODI0Miw4MjQzLDg0NTEsNjU1MDksNjUyODQsNjU1MDQsNjU1MDUsNjUyODUsNjUyODMsNjUyODYsNjUyOTAsNjUzMTIsMTY3LDk3MzQsOTczMyw5Njc1LDk2''@;'; put 'put ''NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NTEsOTY1MCw5NjYxLDk2NjAsODI1MSwxMjMwNiw4NTk0LDg1OTIsODU5Myw4NTk1LDEyMzA3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzEyLDg3MTUsODgzOCw4ODM5LDg4MzQs''@;'; put 'put ''ODgzNSw4NzQ2LDg3NDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3NDMsODc0NCw2NTUwNiw4NjU4LDg2NjAsODcwNCw4NzA3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzM2LDg4NjksODk3OCw4NzA2''@;'; put 'put ''LDg3MTEsODgwMSw4Nzg2LDg4MTAsODgxMSw4NzMwLDg3NjUsODczMyw4NzU3LDg3NDcsODc0OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg0OTEsODI0MCw5ODM5LDk4MzcsOTgzNCw4MjI0LDgyMjUsMTgyLG51bGwsbnVsbCxudWxsLG51bGwsOTcxMSxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1MzEz''@;'; put 'put ''LDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5''@;'; put 'put ''LDY1MzcwLG51bGwsbnVsbCxudWxsLG51bGwsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUs''@;'; put 'put ''MTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0''@;'; put 'put ''MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAs''@;'; put 'put ''MTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEy''@;'; put 'put ''NDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5''@;'; put 'put ''LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEy''@;'; put 'put ''NTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MTMsOTE0LDkxNSw5MTYsOTE3''@;'; put 'put ''LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYs''@;'; put 'put ''OTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEw''@;'; put 'put ''NTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNzIsMTA3MywxMDc0LDEw''@;'; put 'put ''NzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDk2LDk0OTIsOTUwMCw5NTE2LDk1MDgsOTUyNCw5NTMyLDk0NzMsOTQ3NSw5NDg3LDk0OTEsOTQ5OSw5NDk1LDk1MDcsOTUyMyw5NTE1LDk1MzEsOTU0Nyw5NTA0LDk1''@;'; put 'put ''MTksOTUxMiw5NTI3LDk1MzUsOTUwMSw5NTIwLDk1MDksOTUyOCw5NTM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMyMiw5MzIzLDkzMjQsOTMyNSw5MzI2LDkz''@;'; put 'put ''MjcsOTMyOCw5MzI5LDkzMzAsOTMzMSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLG51bGwsMTMxMjksMTMwNzYsMTMwOTAsMTMxMzMsMTMwODAsMTMwOTUsMTMwNTksMTMxMTAsMTMxMzcsMTMxNDMsMTMwNjksMTMwOTQsMTMwOTEsMTMwOTksMTMx''@;'; put 'put ''MzAsMTMxMTUsMTMyMTIsMTMyMTMsMTMyMTQsMTMxOTgsMTMxOTksMTMyNTIsMTMyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEzMTc5LDEyMzE3LDEyMzE5LDg0NzAsMTMyNjEsODQ4MSwxMjk2NCwxMjk2NSwxMjk2NiwxMjk2NywxMjk2OCwxMjg0OSwxMjg1''@;'; put 'put ''MCwxMjg1NywxMzE4MiwxMzE4MSwxMzE4MCw4Nzg2LDg4MDEsODc0Nyw4NzUwLDg3MjEsODczMCw4ODY5LDg3MzYsODczNSw4ODk1LDg3NTcsODc0NSw4NzQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjAxMjQsMjE3ODIsMjMwNDMsMzg0NjMsMjE2OTYsMjQ4NTksMjUzODQsMjMwMzAsMzY4OTgsMzM5MDksMzM1NjQsMzEzMTIsMjQ3NDYsMjU1NjksMjgxOTcsMjYwOTMsMzM4OTQsMzM0NDYsMzk5MjUs''@;'; put 'put ''MjY3NzEsMjIzMTEsMjYwMTcsMjUyMDEsMjM0NTEsMjI5OTIsMzQ0MjcsMzkxNTYsMzIwOTgsMzIxOTAsMzk4MjIsMjUxMTAsMzE5MDMsMzQ5OTksMjM0MzMsMjQyNDUsMjUzNTMsMjYyNjMsMjY2OTYsMzgzNDMsMzg3OTcsMjY0NDcsMjAxOTcsMjAyMzQsMjAzMDEsMjAzODEsMjA1NTMsMjIy''@;'; put 'put ''NTgsMjI4MzksMjI5OTYsMjMwNDEsMjM1NjEsMjQ3OTksMjQ4NDcsMjQ5NDQsMjYxMzEsMjY4ODUsMjg4NTgsMzAwMzEsMzAwNjQsMzEyMjcsMzIxNzMsMzIyMzksMzI5NjMsMzM4MDYsMzQ5MTUsMzU1ODYsMzY5NDksMzY5ODYsMjEzMDcsMjAxMTcsMjAxMzMsMjI0OTUsMzI5NDYsMzcwNTcs''@;'; put 'put ''MzA5NTksMTk5NjgsMjI3NjksMjgzMjIsMzY5MjAsMzEyODIsMzM1NzYsMzM0MTksMzk5ODMsMjA4MDEsMjEzNjAsMjE2OTMsMjE3MjksMjIyNDAsMjMwMzUsMjQzNDEsMzkxNTQsMjgxMzksMzI5OTYsMzQwOTMsMzg0OTgsMzg1MTIsMzg1NjAsMzg5MDcsMjE1MTUsMjE0OTEsMjM0MzEsMjg4''@;'; put 'put ''NzksMzI3MDEsMzY4MDIsMzg2MzIsMjEzNTksNDAyODQsMzE0MTgsMTk5ODUsMzA4NjcsMzMyNzYsMjgxOTgsMjIwNDAsMjE3NjQsMjc0MjEsMzQwNzQsMzk5OTUsMjMwMTMsMjE0MTcsMjgwMDYsMjk5MTYsMzgyODcsMjIwODIsMjAxMTMsMzY5MzksMzg2NDIsMzM2MTUsMzkxODAsMjE0NzMs''@;'; put 'put ''MjE5NDIsMjMzNDQsMjQ0MzMsMjYxNDQsMjYzNTUsMjY2MjgsMjc3MDQsMjc4OTEsMjc5NDUsMjk3ODcsMzA0MDgsMzEzMTAsMzg5NjQsMzM1MjEsMzQ5MDcsMzU0MjQsMzc2MTMsMjgwODIsMzAxMjMsMzA0MTAsMzkzNjUsMjQ3NDIsMzU1ODUsMzYyMzQsMzgzMjIsMjcwMjIsMjE0MjEsMjA4''@;'; put 'put ''NzAsMjIyOTAsMjI1NzYsMjI4NTIsMjM0NzYsMjQzMTAsMjQ2MTYsMjU1MTMsMjU1ODgsMjc4MzksMjg0MzYsMjg4MTQsMjg5NDgsMjkwMTcsMjkxNDEsMjk1MDMsMzIyNTcsMzMzOTgsMzM0ODksMzQxOTksMzY5NjAsMzc0NjcsNDAyMTksMjI2MzMsMjYwNDQsMjc3MzgsMjk5ODksMjA5ODUs''@;'; put 'put ''MjI4MzAsMjI4ODUsMjQ0NDgsMjQ1NDAsMjUyNzYsMjYxMDYsMjcxNzgsMjc0MzEsMjc1NzIsMjk1NzksMzI3MDUsMzUxNTgsNDAyMzYsNDAyMDYsNDA2NDQsMjM3MTMsMjc3OTgsMzM2NTksMjA3NDAsMjM2MjcsMjUwMTQsMzMyMjIsMjY3NDIsMjkyODEsMjAwNTcsMjA0NzQsMjEzNjgsMjQ2''@;'; put 'put ''ODEsMjgyMDEsMzEzMTEsMzg4OTksMTk5NzksMjEyNzAsMjAyMDYsMjAzMDksMjAyODUsMjAzODUsMjAzMzksMjExNTIsMjE0ODcsMjIwMjUsMjI3OTksMjMyMzMsMjM0NzgsMjM1MjEsMzExODUsMjYyNDcsMjY1MjQsMjY1NTAsMjc0NjgsMjc4MjcsMjg3NzksMjk2MzQsMzExMTcsMzExNjYs''@;'; put 'put ''MzEyOTIsMzE2MjMsMzM0NTcsMzM0OTksMzM1NDAsMzM2NTUsMzM3NzUsMzM3NDcsMzQ2NjIsMzU1MDYsMjIwNTcsMzYwMDgsMzY4MzgsMzY5NDIsMzg2ODYsMzQ0NDIsMjA0MjAsMjM3ODQsMjUxMDUsMjkyNzMsMzAwMTEsMzMyNTMsMzM0NjksMzQ1NTgsMzYwMzIsMzg1OTcsMzkxODcsMzkz''@;'; put 'put ''ODEsMjAxNzEsMjAyNTAsMzUyOTksMjIyMzgsMjI2MDIsMjI3MzAsMjQzMTUsMjQ1NTUsMjQ2MTgsMjQ3MjQsMjQ2NzQsMjUwNDAsMjUxMDYsMjUyOTYsMjU5MTMsMzk3NDUsMjYyMTQsMjY4MDAsMjgwMjMsMjg3ODQsMzAwMjgsMzAzNDIsMzIxMTcsMzM0NDUsMzQ4MDksMzgyODMsMzg1NDIs''@;'; put 'put ''MzU5OTcsMjA5NzcsMjExODIsMjI4MDYsMjE2ODMsMjM0NzUsMjM4MzAsMjQ5MzYsMjcwMTAsMjgwNzksMzA4NjEsMzM5OTUsMzQ5MDMsMzU0NDIsMzc3OTksMzk2MDgsMjgwMTIsMzkzMzYsMzQ1MjEsMjI0MzUsMjY2MjMsMzQ1MTAsMzczOTAsMjExMjMsMjIxNTEsMjE1MDgsMjQyNzUsMjUz''@;'; put 'put ''MTMsMjU3ODUsMjY2ODQsMjY2ODAsMjc1NzksMjk1NTQsMzA5MDYsMzEzMzksMzUyMjYsMzUyODIsMzYyMDMsMzY2MTEsMzcxMDEsMzgzMDcsMzg1NDgsMzg3NjEsMjMzOTgsMjM3MzEsMjcwMDUsMzg5ODksMzg5OTAsMjU0OTksMzE1MjAsMjcxNzksMjcyNjMsMjY4MDYsMzk5NDksMjg1MTEs''@;'; put 'put ''MjExMDYsMjE5MTcsMjQ2ODgsMjUzMjQsMjc5NjMsMjgxNjcsMjgzNjksMzM4ODMsMzUwODgsMzY2NzYsMTk5ODgsMzk5OTMsMjE0OTQsMjY5MDcsMjcxOTQsMzg3ODgsMjY2NjYsMjA4MjgsMzE0MjcsMzM5NzAsMzczNDAsMzc3NzIsMjIxMDcsNDAyMzIsMjY2NTgsMzM1NDEsMzM4NDEsMzE5''@;'; put 'put ''MDksMjFlMywzMzQ3NywyOTkyNiwyMDA5NCwyMDM1NSwyMDg5NiwyMzUwNiwyMTAwMiwyMTIwOCwyMTIyMywyNDA1OSwyMTkxNCwyMjU3MCwyMzAxNCwyMzQzNiwyMzQ0OCwyMzUxNSwyNDE3OCwyNDE4NSwyNDczOSwyNDg2MywyNDkzMSwyNTAyMiwyNTU2MywyNTk1NCwyNjU3NywyNjcwNywy''@;'; put 'put ''Njg3NCwyNzQ1NCwyNzQ3NSwyNzczNSwyODQ1MCwyODU2NywyODQ4NSwyOTg3MiwyOTk3NiwzMDQzNSwzMDQ3NSwzMTQ4NywzMTY0OSwzMTc3NywzMjIzMywzMjU2NiwzMjc1MiwzMjkyNSwzMzM4MiwzMzY5NCwzNTI1MSwzNTUzMiwzNjAxMSwzNjk5NiwzNzk2OSwzODI5MSwzODI4OSwzODMw''@;'; put 'put ''NiwzODUwMSwzODg2NywzOTIwOCwzMzMwNCwyMDAyNCwyMTU0NywyMzczNiwyNDAxMiwyOTYwOSwzMDI4NCwzMDUyNCwyMzcyMSwzMjc0NywzNjEwNywzODU5MywzODkyOSwzODk5NiwzOWUzLDIwMjI1LDIwMjM4LDIxMzYxLDIxOTE2LDIyMTIwLDIyNTIyLDIyODU1LDIzMzA1LDIzNDkyLDIz''@;'; put 'put ''Njk2LDI0MDc2LDI0MTkwLDI0NTI0LDI1NTgyLDI2NDI2LDI2MDcxLDI2MDgyLDI2Mzk5LDI2ODI3LDI2ODIwLDI3MjMxLDI0MTEyLDI3NTg5LDI3NjcxLDI3NzczLDMwMDc5LDMxMDQ4LDIzMzk1LDMxMjMyLDMyZTMsMjQ1MDksMzUyMTUsMzUzNTIsMzYwMjAsMzYyMTUsMzY1NTYsMzY2Mzcs''@;'; put 'put ''MzkxMzgsMzk0MzgsMzk3NDAsMjAwOTYsMjA2MDUsMjA3MzYsMjI5MzEsMjM0NTIsMjUxMzUsMjUyMTYsMjU4MzYsMjc0NTAsMjkzNDQsMzAwOTcsMzEwNDcsMzI2ODEsMzQ4MTEsMzU1MTYsMzU2OTYsMjU1MTYsMzM3MzgsMzg4MTYsMjE1MTMsMjE1MDcsMjE5MzEsMjY3MDgsMjcyMjQsMzU0''@;'; put 'put ''NDAsMzA3NTksMjY0ODUsNDA2NTMsMjEzNjQsMjM0NTgsMzMwNTAsMzQzODQsMzY4NzAsMTk5OTIsMjAwMzcsMjAxNjcsMjAyNDEsMjE0NTAsMjE1NjAsMjM0NzAsMjQzMzksMjQ2MTMsMjU5MzcsMjY0MjksMjc3MTQsMjc3NjIsMjc4NzUsMjg3OTIsMjk2OTksMzEzNTAsMzE0MDYsMzE0OTYs''@;'; put 'put ''MzIwMjYsMzE5OTgsMzIxMDIsMjYwODcsMjkyNzUsMjE0MzUsMjM2MjEsMjQwNDAsMjUyOTgsMjUzMTIsMjUzNjksMjgxOTIsMzQzOTQsMzUzNzcsMzYzMTcsMzc2MjQsMjg0MTcsMzExNDIsMzk3NzAsMjAxMzYsMjAxMzksMjAxNDAsMjAzNzksMjAzODQsMjA2ODksMjA4MDcsMzE0NzgsMjA4''@;'; put 'put ''NDksMjA5ODIsMjEzMzIsMjEyODEsMjEzNzUsMjE0ODMsMjE5MzIsMjI2NTksMjM3NzcsMjQzNzUsMjQzOTQsMjQ2MjMsMjQ2NTYsMjQ2ODUsMjUzNzUsMjU5NDUsMjcyMTEsMjc4NDEsMjkzNzgsMjk0MjEsMzA3MDMsMzMwMTYsMzMwMjksMzMyODgsMzQxMjYsMzcxMTEsMzc4NTcsMzg5MTEs''@;'; put 'put ''MzkyNTUsMzk1MTQsMjAyMDgsMjA5NTcsMjM1OTcsMjYyNDEsMjY5ODksMjM2MTYsMjYzNTQsMjY5OTcsMjk1NzcsMjY3MDQsMzE4NzMsMjA2NzcsMjEyMjAsMjIzNDMsMjQwNjIsMzc2NzAsMjYwMjAsMjc0MjcsMjc0NTMsMjk3NDgsMzExMDUsMzExNjUsMzE1NjMsMzIyMDIsMzM0NjUsMzM3''@;'; put 'put ''NDAsMzQ5NDMsMzUxNjcsMzU2NDEsMzY4MTcsMzczMjksMjE1MzUsMzc1MDQsMjAwNjEsMjA1MzQsMjE0NzcsMjEzMDYsMjkzOTksMjk1OTAsMzA2OTcsMzM1MTAsMzY1MjcsMzkzNjYsMzkzNjgsMzkzNzgsMjA4NTUsMjQ4NTgsMzQzOTgsMjE5MzYsMzEzNTQsMjA1OTgsMjM1MDcsMzY5MzUs''@;'; put 'put ''Mzg1MzMsMjAwMTgsMjczNTUsMzczNTEsMjM2MzMsMjM2MjQsMjU0OTYsMzEzOTEsMjc3OTUsMzg3NzIsMzY3MDUsMzE0MDIsMjkwNjYsMzg1MzYsMzE4NzQsMjY2NDcsMzIzNjgsMjY3MDUsMzc3NDAsMjEyMzQsMjE1MzEsMzQyMTksMzUzNDcsMzI2NzYsMzY1NTcsMzcwODksMjEzNTAsMzQ5''@;'; put 'put ''NTIsMzEwNDEsMjA0MTgsMjA2NzAsMjEwMDksMjA4MDQsMjE4NDMsMjIzMTcsMjk2NzQsMjI0MTEsMjI4NjUsMjQ0MTgsMjQ0NTIsMjQ2OTMsMjQ5NTAsMjQ5MzUsMjUwMDEsMjU1MjIsMjU2NTgsMjU5NjQsMjYyMjMsMjY2OTAsMjgxNzksMzAwNTQsMzEyOTMsMzE5OTUsMzIwNzYsMzIxNTMs''@;'; put 'put ''MzIzMzEsMzI2MTksMzM1NTAsMzM2MTAsMzQ1MDksMzUzMzYsMzU0MjcsMzU2ODYsMzY2MDUsMzg5MzgsNDAzMzUsMzM0NjQsMzY4MTQsMzk5MTIsMjExMjcsMjUxMTksMjU3MzEsMjg2MDgsMzg1NTMsMjY2ODksMjA2MjUsMjc0MjQsMjc3NzAsMjg1MDAsMzEzNDgsMzIwODAsMzQ4ODAsMzUz''@;'; put 'put ''NjMsMjYzNzYsMjAyMTQsMjA1MzcsMjA1MTgsMjA1ODEsMjA4NjAsMjEwNDgsMjEwOTEsMjE5MjcsMjIyODcsMjI1MzMsMjMyNDQsMjQzMTQsMjUwMTAsMjUwODAsMjUzMzEsMjU0NTgsMjY5MDgsMjcxNzcsMjkzMDksMjkzNTYsMjk0ODYsMzA3NDAsMzA4MzEsMzIxMjEsMzA0NzYsMzI5Mzcs''@;'; put 'put ''MzUyMTEsMzU2MDksMzYwNjYsMzY1NjIsMzY5NjMsMzc3NDksMzg1MjIsMzg5OTcsMzk0NDMsNDA1NjgsMjA4MDMsMjE0MDcsMjE0MjcsMjQxODcsMjQzNTgsMjgxODcsMjgzMDQsMjk1NzIsMjk2OTQsMzIwNjcsMzMzMzUsMzUzMjgsMzU1NzgsMzg0ODAsMjAwNDYsMjA0OTEsMjE0NzYsMjE2''@;'; put 'put ''MjgsMjIyNjYsMjI5OTMsMjMzOTYsMjQwNDksMjQyMzUsMjQzNTksMjUxNDQsMjU5MjUsMjY1NDMsMjgyNDYsMjkzOTIsMzE5NDYsMzQ5OTYsMzI5MjksMzI5OTMsMzM3NzYsMzQzODIsMzU0NjMsMzYzMjgsMzc0MzEsMzg1OTksMzkwMTUsNDA3MjMsMjAxMTYsMjAxMTQsMjAyMzcsMjEzMjAs''@;'; put 'put ''MjE1NzcsMjE1NjYsMjMwODcsMjQ0NjAsMjQ0ODEsMjQ3MzUsMjY3OTEsMjcyNzgsMjk3ODYsMzA4NDksMzU0ODYsMzU0OTIsMzU3MDMsMzcyNjQsMjAwNjIsMzk4ODEsMjAxMzIsMjAzNDgsMjAzOTksMjA1MDUsMjA1MDIsMjA4MDksMjA4NDQsMjExNTEsMjExNzcsMjEyNDYsMjE0MDIsMjE0''@;'; put 'put ''NzUsMjE1MjEsMjE1MTgsMjE4OTcsMjIzNTMsMjI0MzQsMjI5MDksMjMzODAsMjMzODksMjM0MzksMjQwMzcsMjQwMzksMjQwNTUsMjQxODQsMjQxOTUsMjQyMTgsMjQyNDcsMjQzNDQsMjQ2NTgsMjQ5MDgsMjUyMzksMjUzMDQsMjU1MTEsMjU5MTUsMjYxMTQsMjYxNzksMjYzNTYsMjY0Nzcs''@;'; put 'put ''MjY2NTcsMjY3NzUsMjcwODMsMjc3NDMsMjc5NDYsMjgwMDksMjgyMDcsMjgzMTcsMzAwMDIsMzAzNDMsMzA4MjgsMzEyOTUsMzE5NjgsMzIwMDUsMzIwMjQsMzIwOTQsMzIxNzcsMzI3ODksMzI3NzEsMzI5NDMsMzI5NDUsMzMxMDgsMzMxNjcsMzMzMjIsMzM2MTgsMzQ4OTIsMzQ5MTMsMzU2''@;'; put 'put ''MTEsMzYwMDIsMzYwOTIsMzcwNjYsMzcyMzcsMzc0ODksMzA3ODMsMzc2MjgsMzgzMDgsMzg0NzcsMzg5MTcsMzkzMjEsMzk2NDAsNDAyNTEsMjEwODMsMjExNjMsMjE0OTUsMjE1MTIsMjI3NDEsMjUzMzUsMjg2NDAsMzU5NDYsMzY3MDMsNDA2MzMsMjA4MTEsMjEwNTEsMjE1NzgsMjIyNjks''@;'; put 'put ''MzEyOTYsMzcyMzksNDAyODgsNDA2NTgsMjk1MDgsMjg0MjUsMzMxMzYsMjk5NjksMjQ1NzMsMjQ3OTQsMzk1OTIsMjk0MDMsMzY3OTYsMjc0OTIsMzg5MTUsMjAxNzAsMjIyNTYsMjIzNzIsMjI3MTgsMjMxMzAsMjQ2ODAsMjUwMzEsMjYxMjcsMjYxMTgsMjY2ODEsMjY4MDEsMjgxNTEsMzAx''@;'; put 'put ''NjUsMzIwNTgsMzMzOTAsMzk3NDYsMjAxMjMsMjAzMDQsMjE0NDksMjE3NjYsMjM5MTksMjQwMzgsMjQwNDYsMjY2MTksMjc4MDEsMjk4MTEsMzA3MjIsMzU0MDgsMzc3ODIsMzUwMzksMjIzNTIsMjQyMzEsMjUzODcsMjA2NjEsMjA2NTIsMjA4NzcsMjYzNjgsMjE3MDUsMjI2MjIsMjI5NzEs''@;'; put 'put ''MjM0NzIsMjQ0MjUsMjUxNjUsMjU1MDUsMjY2ODUsMjc1MDcsMjgxNjgsMjg3OTcsMzczMTksMjkzMTIsMzA3NDEsMzA3NTgsMzEwODUsMjU5OTgsMzIwNDgsMzM3NTYsMzUwMDksMzY2MTcsMzg1NTUsMjEwOTIsMjIzMTIsMjY0NDgsMzI2MTgsMzYwMDEsMjA5MTYsMjIzMzgsMzg0NDIsMjI1''@;'; put 'put ''ODYsMjcwMTgsMzI5NDgsMjE2ODIsMjM4MjIsMjI1MjQsMzA4NjksNDA0NDIsMjAzMTYsMjEwNjYsMjE2NDMsMjU2NjIsMjYxNTIsMjYzODgsMjY2MTMsMzEzNjQsMzE1NzQsMzIwMzQsMzc2NzksMjY3MTYsMzk4NTMsMzE1NDUsMjEyNzMsMjA4NzQsMjEwNDcsMjM1MTksMjUzMzQsMjU3NzQs''@;'; put 'put ''MjU4MzAsMjY0MTMsMjc1NzgsMzQyMTcsMzg2MDksMzAzNTIsMzk4OTQsMjU0MjAsMzc2MzgsMzk4NTEsMzAzOTksMjYxOTQsMTk5NzcsMjA2MzIsMjE0NDIsMjM2NjUsMjQ4MDgsMjU3NDYsMjU5NTUsMjY3MTksMjkxNTgsMjk2NDIsMjk5ODcsMzE2MzksMzIzODYsMzQ0NTMsMzU3MTUsMzYw''@;'; put 'put ''NTksMzcyNDAsMzkxODQsMjYwMjgsMjYyODMsMjc1MzEsMjAxODEsMjAxODAsMjAyODIsMjAzNTEsMjEwNTAsMjE0OTYsMjE0OTAsMjE5ODcsMjIyMzUsMjI3NjMsMjI5ODcsMjI5ODUsMjMwMzksMjMzNzYsMjM2MjksMjQwNjYsMjQxMDcsMjQ1MzUsMjQ2MDUsMjUzNTEsMjU5MDMsMjMzODgs''@;'; put 'put ''MjYwMzEsMjYwNDUsMjYwODgsMjY1MjUsMjc0OTAsMjc1MTUsMjc2NjMsMjk1MDksMzEwNDksMzExNjksMzE5OTIsMzIwMjUsMzIwNDMsMzI5MzAsMzMwMjYsMzMyNjcsMzUyMjIsMzU0MjIsMzU0MzMsMzU0MzAsMzU0NjgsMzU1NjYsMzYwMzksMzYwNjAsMzg2MDQsMzkxNjQsMjc1MDMsMjAx''@;'; put 'put ''MDcsMjAyODQsMjAzNjUsMjA4MTYsMjMzODMsMjM1NDYsMjQ5MDQsMjUzNDUsMjYxNzgsMjc0MjUsMjgzNjMsMjc4MzUsMjkyNDYsMjk4ODUsMzAxNjQsMzA5MTMsMzEwMzQsMzI3ODAsMzI4MTksMzMyNTgsMzM5NDAsMzY3NjYsMjc3MjgsNDA1NzUsMjQzMzUsMzU2NzIsNDAyMzUsMzE0ODIs''@;'; put 'put ''MzY2MDAsMjM0MzcsMzg2MzUsMTk5NzEsMjE0ODksMjI1MTksMjI4MzMsMjMyNDEsMjM0NjAsMjQ3MTMsMjgyODcsMjg0MjIsMzAxNDIsMzYwNzQsMjM0NTUsMzQwNDgsMzE3MTIsMjA1OTQsMjY2MTIsMzM0MzcsMjM2NDksMzQxMjIsMzIyODYsMzMyOTQsMjA4ODksMjM1NTYsMjU0NDgsMzYx''@;'; put 'put ''OTgsMjYwMTIsMjkwMzgsMzEwMzgsMzIwMjMsMzI3NzMsMzU2MTMsMzY1NTQsMzY5NzQsMzQ1MDMsMzcwMzQsMjA1MTEsMjEyNDIsMjM2MTAsMjY0NTEsMjg3OTYsMjkyMzcsMzcxOTYsMzczMjAsMzc2NzUsMzM1MDksMjM0OTAsMjQzNjksMjQ4MjUsMjAwMjcsMjE0NjIsMjM0MzIsMjUxNjMs''@;'; put 'put ''MjY0MTcsMjc1MzAsMjk0MTcsMjk2NjQsMzEyNzgsMzMxMzEsMzYyNTksMzcyMDIsMzkzMTgsMjA3NTQsMjE0NjMsMjE2MTAsMjM1NTEsMjU0ODAsMjcxOTMsMzIxNzIsMzg2NTYsMjIyMzQsMjE0NTQsMjE2MDgsMjM0NDcsMjM2MDEsMjQwMzAsMjA0NjIsMjQ4MzMsMjUzNDIsMjc5NTQsMzEx''@;'; put 'put ''NjgsMzExNzksMzIwNjYsMzIzMzMsMzI3MjIsMzMyNjEsMzMzMTEsMzM5MzYsMzQ4ODYsMzUxODYsMzU3MjgsMzY0NjgsMzY2NTUsMzY5MTMsMzcxOTUsMzcyMjgsMzg1OTgsMzcyNzYsMjAxNjAsMjAzMDMsMjA4MDUsMjEzMTMsMjQ0NjcsMjUxMDIsMjY1ODAsMjc3MTMsMjgxNzEsMjk1Mzks''@;'; put 'put ''MzIyOTQsMzczMjUsMzc1MDcsMjE0NjAsMjI4MDksMjM0ODcsMjgxMTMsMzEwNjksMzIzMDIsMzE4OTksMjI2NTQsMjkwODcsMjA5ODYsMzQ4OTksMzY4NDgsMjA0MjYsMjM4MDMsMjYxNDksMzA2MzYsMzE0NTksMzMzMDgsMzk0MjMsMjA5MzQsMjQ0OTAsMjYwOTIsMjY5OTEsMjc1MjksMjgx''@;'; put 'put ''NDcsMjgzMTAsMjg1MTYsMzA0NjIsMzIwMjAsMjQwMzMsMzY5ODEsMzcyNTUsMzg5MTgsMjA5NjYsMjEwMjEsMjUxNTIsMjYyNTcsMjYzMjksMjgxODYsMjQyNDYsMzIyMTAsMzI2MjYsMjYzNjAsMzQyMjMsMzQyOTUsMzU1NzYsMjExNjEsMjE0NjUsMjI4OTksMjQyMDcsMjQ0NjQsMjQ2NjEs''@;'; put 'put ''Mzc2MDQsMzg1MDAsMjA2NjMsMjA3NjcsMjEyMTMsMjEyODAsMjEzMTksMjE0ODQsMjE3MzYsMjE4MzAsMjE4MDksMjIwMzksMjI4ODgsMjI5NzQsMjMxMDAsMjM0NzcsMjM1NTgsMjM1NjcsMjM1NjksMjM1NzgsMjQxOTYsMjQyMDIsMjQyODgsMjQ0MzIsMjUyMTUsMjUyMjAsMjUzMDcsMjU0''@;'; put 'put ''ODQsMjU0NjMsMjYxMTksMjYxMjQsMjYxNTcsMjYyMzAsMjY0OTQsMjY3ODYsMjcxNjcsMjcxODksMjc4MzYsMjgwNDAsMjgxNjksMjgyNDgsMjg5ODgsMjg5NjYsMjkwMzEsMzAxNTEsMzA0NjUsMzA4MTMsMzA5NzcsMzEwNzcsMzEyMTYsMzE0NTYsMzE1MDUsMzE5MTEsMzIwNTcsMzI5MTgs''@;'; put 'put ''MzM3NTAsMzM5MzEsMzQxMjEsMzQ5MDksMzUwNTksMzUzNTksMzUzODgsMzU0MTIsMzU0NDMsMzU5MzcsMzYwNjIsMzcyODQsMzc0NzgsMzc3NTgsMzc5MTIsMzg1NTYsMzg4MDgsMTk5NzgsMTk5NzYsMTk5OTgsMjAwNTUsMjA4ODcsMjExMDQsMjI0NzgsMjI1ODAsMjI3MzIsMjMzMzAsMjQx''@;'; put 'put ''MjAsMjQ3NzMsMjU4NTQsMjY0NjUsMjY0NTQsMjc5NzIsMjkzNjYsMzAwNjcsMzEzMzEsMzM5NzYsMzU2OTgsMzczMDQsMzc2NjQsMjIwNjUsMjI1MTYsMzkxNjYsMjUzMjUsMjY4OTMsMjc1NDIsMjkxNjUsMzIzNDAsMzI4ODcsMzMzOTQsMzUzMDIsMzkxMzUsMzQ2NDUsMzY3ODUsMjM2MTEs''@;'; put 'put ''MjAyODAsMjA0NDksMjA0MDUsMjE3NjcsMjMwNzIsMjM1MTcsMjM1MjksMjQ1MTUsMjQ5MTAsMjUzOTEsMjYwMzIsMjYxODcsMjY4NjIsMjcwMzUsMjgwMjQsMjgxNDUsMzAwMDMsMzAxMzcsMzA0OTUsMzEwNzAsMzEyMDYsMzIwNTEsMzMyNTEsMzM0NTUsMzQyMTgsMzUyNDIsMzUzODYsMzY1''@;'; put 'put ''MjMsMzY3NjMsMzY5MTQsMzczNDEsMzg2NjMsMjAxNTQsMjAxNjEsMjA5OTUsMjI2NDUsMjI3NjQsMjM1NjMsMjk5NzgsMjM2MTMsMzMxMDIsMzUzMzgsMzY4MDUsMzg0OTksMzg3NjUsMzE1MjUsMzU1MzUsMzg5MjAsMzcyMTgsMjIyNTksMjE0MTYsMzY4ODcsMjE1NjEsMjI0MDIsMjQxMDEs''@;'; put 'put ''MjU1MTIsMjc3MDAsMjg4MTAsMzA1NjEsMzE4ODMsMzI3MzYsMzQ5MjgsMzY5MzAsMzcyMDQsMzc2NDgsMzc2NTYsMzg1NDMsMjk3OTAsMzk2MjAsMjM4MTUsMjM5MTMsMjU5NjgsMjY1MzAsMzYyNjQsMzg2MTksMjU0NTQsMjY0NDEsMjY5MDUsMzM3MzMsMzg5MzUsMzg1OTIsMzUwNzAsMjg1''@;'; put 'put ''NDgsMjU3MjIsMjM1NDQsMTk5OTAsMjg3MTYsMzAwNDUsMjYxNTksMjA5MzIsMjEwNDYsMjEyMTgsMjI5OTUsMjQ0NDksMjQ2MTUsMjUxMDQsMjU5MTksMjU5NzIsMjYxNDMsMjYyMjgsMjY4NjYsMjY2NDYsMjc0OTEsMjgxNjUsMjkyOTgsMjk5ODMsMzA0MjcsMzE5MzQsMzI4NTQsMjI3Njgs''@;'; put 'put ''MzUwNjksMzUxOTksMzU0ODgsMzU0NzUsMzU1MzEsMzY4OTMsMzcyNjYsMzg3MzgsMzg3NDUsMjU5OTMsMzEyNDYsMzMwMzAsMzg1ODcsMjQxMDksMjQ3OTYsMjUxMTQsMjYwMjEsMjYxMzIsMjY1MTIsMzA3MDcsMzEzMDksMzE4MjEsMzIzMTgsMzMwMzQsMzYwMTIsMzYxOTYsMzYzMjEsMzY0''@;'; put 'put ''NDcsMzA4ODksMjA5OTksMjUzMDUsMjU1MDksMjU2NjYsMjUyNDAsMzUzNzMsMzEzNjMsMzE2ODAsMzU1MDAsMzg2MzQsMzIxMTgsMzMyOTIsMzQ2MzMsMjAxODUsMjA4MDgsMjEzMTUsMjEzNDQsMjM0NTksMjM1NTQsMjM1NzQsMjQwMjksMjUxMjYsMjUxNTksMjU3NzYsMjY2NDMsMjY2NzYs''@;'; put 'put ''Mjc4NDksMjc5NzMsMjc5MjcsMjY1NzksMjg1MDgsMjkwMDYsMjkwNTMsMjYwNTksMzEzNTksMzE2NjEsMzIyMTgsMzIzMzAsMzI2ODAsMzMxNDYsMzMzMDcsMzMzMzcsMzQyMTQsMzU0MzgsMzYwNDYsMzYzNDEsMzY5ODQsMzY5ODMsMzc1NDksMzc1MjEsMzgyNzUsMzk4NTQsMjEwNjksMjE4''@;'; put 'put ''OTIsMjg0NzIsMjg5ODIsMjA4NDAsMzExMDksMzIzNDEsMzMyMDMsMzE5NTAsMjIwOTIsMjI2MDksMjM3MjAsMjU1MTQsMjYzNjYsMjYzNjUsMjY5NzAsMjk0MDEsMzAwOTUsMzAwOTQsMzA5OTAsMzEwNjIsMzExOTksMzE4OTUsMzIwMzIsMzIwNjgsMzQzMTEsMzUzODAsMzg0NTksMzY5NjEs''@;'; put 'put ''NDA3MzYsMjA3MTEsMjExMDksMjE0NTIsMjE0NzQsMjA0ODksMjE5MzAsMjI3NjYsMjI4NjMsMjkyNDUsMjM0MzUsMjM2NTIsMjEyNzcsMjQ4MDMsMjQ4MTksMjU0MzYsMjU0NzUsMjU0MDcsMjU1MzEsMjU4MDUsMjYwODksMjYzNjEsMjQwMzUsMjcwODUsMjcxMzMsMjg0MzcsMjkxNTcsMjAx''@;'; put 'put ''MDUsMzAxODUsMzA0NTYsMzEzNzksMzE5NjcsMzIyMDcsMzIxNTYsMzI4NjUsMzM2MDksMzM2MjQsMzM5MDAsMzM5ODAsMzQyOTksMzUwMTMsMzYyMDgsMzY4NjUsMzY5NzMsMzc3ODMsMzg2ODQsMzk0NDIsMjA2ODcsMjI2NzksMjQ5NzQsMzMyMzUsMzQxMDEsMzYxMDQsMzY4OTYsMjA0MTks''@;'; put 'put ''MjA1OTYsMjEwNjMsMjEzNjMsMjQ2ODcsMjU0MTcsMjY0NjMsMjgyMDQsMzYyNzUsMzY4OTUsMjA0MzksMjM2NDYsMzYwNDIsMjYwNjMsMzIxNTQsMjEzMzAsMzQ5NjYsMjA4NTQsMjU1MzksMjMzODQsMjM0MDMsMjM1NjIsMjU2MTMsMjY0NDksMzY5NTYsMjAxODIsMjI4MTAsMjI4MjYsMjc3''@;'; put 'put ''NjAsMzU0MDksMjE4MjIsMjI1NDksMjI5NDksMjQ4MTYsMjUxNzEsMjY1NjEsMzMzMzMsMjY5NjUsMzg0NjQsMzkzNjQsMzk0NjQsMjAzMDcsMjI1MzQsMjM1NTAsMzI3ODQsMjM3MjksMjQxMTEsMjQ0NTMsMjQ2MDgsMjQ5MDcsMjUxNDAsMjYzNjcsMjc4ODgsMjgzODIsMzI5NzQsMzMxNTEs''@;'; put 'put ''MzM0OTIsMzQ5NTUsMzYwMjQsMzY4NjQsMzY5MTAsMzg1MzgsNDA2NjcsMzk4OTksMjAxOTUsMjE0ODgsMjI4MjMsMzE1MzIsMzcyNjEsMzg5ODgsNDA0NDEsMjgzODEsMjg3MTEsMjEzMzEsMjE4MjgsMjM0MjksMjUxNzYsMjUyNDYsMjUyOTksMjc4MTAsMjg2NTUsMjk3MzAsMzUzNTEsMzc5''@;'; put 'put ''NDQsMjg2MDksMzU1ODIsMzM1OTIsMjA5NjcsMzQ1NTIsMjE0ODIsMjE0ODEsMjAyOTQsMzY5NDgsMzY3ODQsMjI4OTAsMzMwNzMsMjQwNjEsMzE0NjYsMzY3OTksMjY4NDIsMzU4OTUsMjk0MzIsNDAwMDgsMjcxOTcsMzU1MDQsMjAwMjUsMjEzMzYsMjIwMjIsMjIzNzQsMjUyODUsMjU1MDYs''@;'; put 'put ''MjYwODYsMjc0NzAsMjgxMjksMjgyNTEsMjg4NDUsMzA3MDEsMzE0NzEsMzE2NTgsMzIxODcsMzI4MjksMzI5NjYsMzQ1MDcsMzU0NzcsMzc3MjMsMjIyNDMsMjI3MjcsMjQzODIsMjYwMjksMjYyNjIsMjcyNjQsMjc1NzMsMzAwMDcsMzU1MjcsMjA1MTYsMzA2OTMsMjIzMjAsMjQzNDcsMjQ2''@;'; put 'put ''NzcsMjYyMzQsMjc3NDQsMzAxOTYsMzEyNTgsMzI2MjIsMzMyNjgsMzQ1ODQsMzY5MzMsMzkzNDcsMzE2ODksMzAwNDQsMzE0ODEsMzE1NjksMzM5ODgsMzY4ODAsMzEyMDksMzEzNzgsMzM1OTAsMjMyNjUsMzA1MjgsMjAwMTMsMjAyMTAsMjM0NDksMjQ1NDQsMjUyNzcsMjYxNzIsMjY2MDks''@;'; put 'put ''Mjc4ODAsMzQ0MTEsMzQ5MzUsMzUzODcsMzcxOTgsMzc2MTksMzkzNzYsMjcxNTksMjg3MTAsMjk0ODIsMzM1MTEsMzM4NzksMzYwMTUsMTk5NjksMjA4MDYsMjA5MzksMjE4OTksMjM1NDEsMjQwODYsMjQxMTUsMjQxOTMsMjQzNDAsMjQzNzMsMjQ0MjcsMjQ1MDAsMjUwNzQsMjUzNjEsMjYy''@;'; put 'put ''NzQsMjYzOTcsMjg1MjYsMjkyNjYsMzAwMTAsMzA1MjIsMzI4ODQsMzMwODEsMzMxNDQsMzQ2NzgsMzU1MTksMzU1NDgsMzYyMjksMzYzMzksMzc1MzAsMzgyNjMsMzg5MTQsNDAxNjUsMjExODksMjU0MzEsMzA0NTIsMjYzODksMjc3ODQsMjk2NDUsMzYwMzUsMzc4MDYsMzg1MTUsMjc5NDEs''@;'; put 'put ''MjI2ODQsMjY4OTQsMjcwODQsMzY4NjEsMzc3ODYsMzAxNzEsMzY4OTAsMjI2MTgsMjY2MjYsMjU1MjQsMjcxMzEsMjAyOTEsMjg0NjAsMjY1ODQsMzY3OTUsMzQwODYsMzIxODAsMzc3MTYsMjY5NDMsMjg1MjgsMjIzNzgsMjI3NzUsMjMzNDAsMzIwNDQsMjkyMjYsMjE1MTQsMzczNDcsNDAz''@;'; put 'put ''NzIsMjAxNDEsMjAzMDIsMjA1NzIsMjA1OTcsMjEwNTksMzU5OTgsMjE1NzYsMjI1NjQsMjM0NTAsMjQwOTMsMjQyMTMsMjQyMzcsMjQzMTEsMjQzNTEsMjQ3MTYsMjUyNjksMjU0MDIsMjU1NTIsMjY3OTksMjc3MTIsMzA4NTUsMzExMTgsMzEyNDMsMzIyMjQsMzMzNTEsMzUzMzAsMzU1NTgs''@;'; put 'put ''MzY0MjAsMzY4ODMsMzcwNDgsMzcxNjUsMzczMzYsNDA3MTgsMjc4NzcsMjU2ODgsMjU4MjYsMjU5NzMsMjg0MDQsMzAzNDAsMzE1MTUsMzY5NjksMzc4NDEsMjgzNDYsMjE3NDYsMjQ1MDUsMjU3NjQsMzY2ODUsMzY4NDUsMzc0NDQsMjA4NTYsMjI2MzUsMjI4MjUsMjM2MzcsMjQyMTUsMjgx''@;'; put 'put ''NTUsMzIzOTksMjk5ODAsMzYwMjgsMzY1NzgsMzkwMDMsMjg4NTcsMjAyNTMsMjc1ODMsMjg1OTMsM2U0LDM4NjUxLDIwODE0LDIxNTIwLDIyNTgxLDIyNjE1LDIyOTU2LDIzNjQ4LDI0NDY2LDI2MDA3LDI2NDYwLDI4MTkzLDMwMzMxLDMzNzU5LDM2MDc3LDM2ODg0LDM3MTE3LDM3NzA5LDMw''@;'; put 'put ''NzU3LDMwNzc4LDIxMTYyLDI0MjMwLDIyMzAzLDIyOTAwLDI0NTk0LDIwNDk4LDIwODI2LDIwOTA4LDIwOTQxLDIwOTkyLDIxNzc2LDIyNjEyLDIyNjE2LDIyODcxLDIzNDQ1LDIzNzk4LDIzOTQ3LDI0NzY0LDI1MjM3LDI1NjQ1LDI2NDgxLDI2NjkxLDI2ODEyLDI2ODQ3LDMwNDIzLDI4MTIw''@;'; put 'put ''LDI4MjcxLDI4MDU5LDI4NzgzLDI5MTI4LDI0NDAzLDMwMTY4LDMxMDk1LDMxNTYxLDMxNTcyLDMxNTcwLDMxOTU4LDMyMTEzLDIxMDQwLDMzODkxLDM0MTUzLDM0Mjc2LDM1MzQyLDM1NTg4LDM1OTEwLDM2MzY3LDM2ODY3LDM2ODc5LDM3OTEzLDM4NTE4LDM4OTU3LDM5NDcyLDM4MzYwLDIw''@;'; put 'put ''Njg1LDIxMjA1LDIxNTE2LDIyNTMwLDIzNTY2LDI0OTk5LDI1NzU4LDI3OTM0LDMwNjQzLDMxNDYxLDMzMDEyLDMzNzk2LDM2OTQ3LDM3NTA5LDIzNzc2LDQwMTk5LDIxMzExLDI0NDcxLDI0NDk5LDI4MDYwLDI5MzA1LDMwNTYzLDMxMTY3LDMxNzE2LDI3NjAyLDI5NDIwLDM1NTAxLDI2NjI3''@;'; put 'put ''LDI3MjMzLDIwOTg0LDMxMzYxLDI2OTMyLDIzNjI2LDQwMTgyLDMzNTE1LDIzNDkzLDM3MTkzLDI4NzAyLDIyMTM2LDIzNjYzLDI0Nzc1LDI1OTU4LDI3Nzg4LDM1OTMwLDM2OTI5LDM4OTMxLDIxNTg1LDI2MzExLDM3Mzg5LDIyODU2LDM3MDI3LDIwODY5LDIwMDQ1LDIwOTcwLDM0MjAxLDM1''@;'; put 'put ''NTk4LDI4NzYwLDI1NDY2LDM3NzA3LDI2OTc4LDM5MzQ4LDMyMjYwLDMwMDcxLDIxMzM1LDI2OTc2LDM2NTc1LDM4NjI3LDI3NzQxLDIwMTA4LDIzNjEyLDI0MzM2LDM2ODQxLDIxMjUwLDM2MDQ5LDMyOTA1LDM0NDI1LDI0MzE5LDI2MDg1LDIwMDgzLDIwODM3LDIyOTE0LDIzNjE1LDM4ODk0''@;'; put 'put ''LDIwMjE5LDIyOTIyLDI0NTI1LDM1NDY5LDI4NjQxLDMxMTUyLDMxMDc0LDIzNTI3LDMzOTA1LDI5NDgzLDI5MTA1LDI0MTgwLDI0NTY1LDI1NDY3LDI1NzU0LDI5MTIzLDMxODk2LDIwMDM1LDI0MzE2LDIwMDQzLDIyNDkyLDIyMTc4LDI0NzQ1LDI4NjExLDMyMDEzLDMzMDIxLDMzMDc1LDMz''@;'; put 'put ''MjE1LDM2Nzg2LDM1MjIzLDM0NDY4LDI0MDUyLDI1MjI2LDI1NzczLDM1MjA3LDI2NDg3LDI3ODc0LDI3OTY2LDI5NzUwLDMwNzcyLDIzMTEwLDMyNjI5LDMzNDUzLDM5MzQwLDIwNDY3LDI0MjU5LDI1MzA5LDI1NDkwLDI1OTQzLDI2NDc5LDMwNDAzLDI5MjYwLDMyOTcyLDMyOTU0LDM2NjQ5''@;'; put 'put ''LDM3MTk3LDIwNDkzLDIyNTIxLDIzMTg2LDI2NzU3LDI2OTk1LDI5MDI4LDI5NDM3LDM2MDIzLDIyNzcwLDM2MDY0LDM4NTA2LDM2ODg5LDM0Njg3LDMxMjA0LDMwNjk1LDMzODMzLDIwMjcxLDIxMDkzLDIxMzM4LDI1MjkzLDI2NTc1LDI3ODUwLDMwMzMzLDMxNjM2LDMxODkzLDMzMzM0LDM0''@;'; put 'put ''MTgwLDM2ODQzLDI2MzMzLDI4NDQ4LDI5MTkwLDMyMjgzLDMzNzA3LDM5MzYxLDQwNjE0LDIwOTg5LDMxNjY1LDMwODM0LDMxNjcyLDMyOTAzLDMxNTYwLDI3MzY4LDI0MTYxLDMyOTA4LDMwMDMzLDMwMDQ4LDIwODQzLDM3NDc0LDI4MzAwLDMwMzMwLDM3MjcxLDM5NjU4LDIwMjQwLDMyNjI0''@;'; put 'put ''LDI1MjQ0LDMxNTY3LDM4MzA5LDQwMTY5LDIyMTM4LDIyNjE3LDM0NTMyLDM4NTg4LDIwMjc2LDIxMDI4LDIxMzIyLDIxNDUzLDIxNDY3LDI0MDcwLDI1NjQ0LDI2MDAxLDI2NDk1LDI3NzEwLDI3NzI2LDI5MjU2LDI5MzU5LDI5Njc3LDMwMDM2LDMyMzIxLDMzMzI0LDM0MjgxLDM2MDA5LDMx''@;'; put 'put ''Njg0LDM3MzE4LDI5MDMzLDM4OTMwLDM5MTUxLDI1NDA1LDI2MjE3LDMwMDU4LDMwNDM2LDMwOTI4LDM0MTE1LDM0NTQyLDIxMjkwLDIxMzI5LDIxNTQyLDIyOTE1LDI0MTk5LDI0NDQ0LDI0NzU0LDI1MTYxLDI1MjA5LDI1MjU5LDI2ZTMsMjc2MDQsMjc4NTIsMzAxMzAsMzAzODIsMzA4NjUs''@;'; put 'put ''MzExOTIsMzIyMDMsMzI2MzEsMzI5MzMsMzQ5ODcsMzU1MTMsMzYwMjcsMzY5OTEsMzg3NTAsMzkxMzEsMjcxNDcsMzE4MDAsMjA2MzMsMjM2MTQsMjQ0OTQsMjY1MDMsMjc2MDgsMjk3NDksMzA0NzMsMzI2NTQsNDA3NjMsMjY1NzAsMzEyNTUsMjEzMDUsMzAwOTEsMzk2NjEsMjQ0MjIsMzMx''@;'; put 'put ''ODEsMzM3NzcsMzI5MjAsMjQzODAsMjQ1MTcsMzAwNTAsMzE1NTgsMzY5MjQsMjY3MjcsMjMwMTksMjMxOTUsMzIwMTYsMzAzMzQsMzU2MjgsMjA0NjksMjQ0MjYsMjcxNjEsMjc3MDMsMjg0MTgsMjk5MjIsMzEwODAsMzQ5MjAsMzU0MTMsMzU5NjEsMjQyODcsMjU1NTEsMzAxNDksMzExODYs''@;'; put 'put ''MzM0OTUsMzc2NzIsMzc2MTgsMzM5NDgsMzQ1NDEsMzk5ODEsMjE2OTcsMjQ0MjgsMjU5OTYsMjc5OTYsMjg2OTMsMzYwMDcsMzYwNTEsMzg5NzEsMjU5MzUsMjk5NDIsMTk5ODEsMjAxODQsMjI0OTYsMjI4MjcsMjMxNDIsMjM1MDAsMjA5MDQsMjQwNjcsMjQyMjAsMjQ1OTgsMjUyMDYsMjU5''@;'; put 'put ''NzUsMjYwMjMsMjYyMjIsMjgwMTQsMjkyMzgsMzE1MjYsMzMxMDQsMzMxNzgsMzM0MzMsMzU2NzYsMzZlMywzNjA3MCwzNjIxMiwzODQyOCwzODQ2OCwyMDM5OCwyNTc3MSwyNzQ5NCwzMzMxMCwzMzg4OSwzNDE1NCwzNzA5NiwyMzU1MywyNjk2MywzOTA4MCwzMzkxNCwzNDEzNSwyMDIzOSwy''@;'; put 'put ''MTEwMywyNDQ4OSwyNDEzMywyNjM4MSwzMTExOSwzMzE0NSwzNTA3OSwzNTIwNiwyODE0OSwyNDM0MywyNTE3MywyNzgzMiwyMDE3NSwyOTI4OSwzOTgyNiwyMDk5OCwyMTU2MywyMjEzMiwyMjcwNywyNDk5NiwyNTE5OCwyODk1NCwyMjg5NCwzMTg4MSwzMTk2NiwzMjAyNywzODY0MCwyNTk5''@;'; put 'put ''MSwzMjg2MiwxOTk5MywyMDM0MSwyMDg1MywyMjU5MiwyNDE2MywyNDE3OSwyNDMzMCwyNjU2NCwyMDAwNiwzNDEwOSwzODI4MSwzODQ5MSwzMTg1OSwzODkxMywyMDczMSwyMjcyMSwzMDI5NCwzMDg4NywyMTAyOSwzMDYyOSwzNDA2NSwzMTYyMiwyMDU1OSwyMjc5MywyOTI1NSwzMTY4Nywz''@;'; put 'put ''MjIzMiwzNjc5NCwzNjgyMCwzNjk0MSwyMDQxNSwyMTE5MywyMzA4MSwyNDMyMSwzODgyOSwyMDQ0NSwzMzMwMywzNzYxMCwyMjI3NSwyNTQyOSwyNzQ5NywyOTk5NSwzNTAzNiwzNjYyOCwzMTI5OCwyMTIxNSwyMjY3NSwyNDkxNywyNTA5OCwyNjI4NiwyNzU5NywzMTgwNywzMzc2OSwyMDUx''@;'; put 'put ''NSwyMDQ3MiwyMTI1MywyMTU3NCwyMjU3NywyMjg1NywyMzQ1MywyMzc5MiwyMzc5MSwyMzg0OSwyNDIxNCwyNTI2NSwyNTQ0NywyNTkxOCwyNjA0MSwyNjM3OSwyNzg2MSwyNzg3MywyODkyMSwzMDc3MCwzMjI5OSwzMjk5MCwzMzQ1OSwzMzgwNCwzNDAyOCwzNDU2MiwzNTA5MCwzNTM3MCwz''@;'; put 'put ''NTkxNCwzNzAzMCwzNzU4NiwzOTE2NSw0MDE3OSw0MDMwMCwyMDA0NywyMDEyOSwyMDYyMSwyMTA3OCwyMjM0NiwyMjk1MiwyNDEyNSwyNDUzNiwyNDUzNywyNTE1MSwyNjI5MiwyNjM5NSwyNjU3NiwyNjgzNCwyMDg4MiwzMjAzMywzMjkzOCwzMzE5MiwzNTU4NCwzNTk4MCwzNjAzMSwzNzUw''@;'; put 'put ''MiwzODQ1MCwyMTUzNiwzODk1NiwyMTI3MSwyMDY5MywyMTM0MCwyMjY5NiwyNTc3OCwyNjQyMCwyOTI4NywzMDU2NiwzMTMwMiwzNzM1MCwyMTE4NywyNzgwOSwyNzUyNiwyMjUyOCwyNDE0MCwyMjg2OCwyNjQxMiwzMjc2MywyMDk2MSwzMDQwNiwyNTcwNSwzMDk1MiwzOTc2NCw0MDYzNSwy''@;'; put 'put ''MjQ3NSwyMjk2OSwyNjE1MSwyNjUyMiwyNzU5OCwyMTczNywyNzA5NywyNDE0OSwzMzE4MCwyNjUxNywzOTg1MCwyNjYyMiw0MDAxOCwyNjcxNywyMDEzNCwyMDQ1MSwyMTQ0OCwyNTI3MywyNjQxMSwyNzgxOSwzNjgwNCwyMDM5NywzMjM2NSw0MDYzOSwxOTk3NSwyNDkzMCwyODI4OCwyODQ1''@;'; put 'put ''OSwzNDA2NywyMTYxOSwyNjQxMCwzOTc0OSwyNDA1MSwzMTYzNywyMzcyNCwyMzQ5NCwzNDU4OCwyODIzNCwzNDAwMSwzMTI1MiwzMzAzMiwyMjkzNywzMTg4NSwyNzY2NSwzMDQ5NiwyMTIwOSwyMjgxOCwyODk2MSwyOTI3OSwzMDY4MywzODY5NSw0MDI4OSwyNjg5MSwyMzE2NywyMzA2NCwy''@;'; put 'put ''MDkwMSwyMTUxNywyMTYyOSwyNjEyNiwzMDQzMSwzNjg1NSwzNzUyOCw0MDE4MCwyMzAxOCwyOTI3NywyODM1NywyMDgxMywyNjgyNSwzMjE5MSwzMjIzNiwzODc1NCw0MDYzNCwyNTcyMCwyNzE2OSwzMzUzOCwyMjkxNiwyMzM5MSwyNzYxMSwyOTQ2NywzMDQ1MCwzMjE3OCwzMjc5MSwzMzk0''@;'; put 'put ''NSwyMDc4NiwyNjQwOCw0MDY2NSwzMDQ0NiwyNjQ2NiwyMTI0NywzOTE3MywyMzU4OCwyNTE0NywzMTg3MCwzNjAxNiwyMTgzOSwyNDc1OCwzMjAxMSwzODI3MiwyMTI0OSwyMDA2MywyMDkxOCwyMjgxMiwyOTI0MiwzMjgyMiwzNzMyNiwyNDM1NywzMDY5MCwyMTM4MCwyNDQ0MSwzMjAwNCwz''@;'; put 'put ''NDIyMCwzNTM3OSwzNjQ5MywzODc0MiwyNjYxMSwzNDIyMiwzNzk3MSwyNDg0MSwyNDg0MCwyNzgzMywzMDI5MCwzNTU2NSwzNjY2NCwyMTgwNywyMDMwNSwyMDc3OCwyMTE5MSwyMTQ1MSwyMzQ2MSwyNDE4OSwyNDczNiwyNDk2MiwyNTU1OCwyNjM3NywyNjU4NiwyODI2MywyODA0NCwyOTQ5''@;'; put 'put ''NCwyOTQ5NSwzMDAwMSwzMTA1NiwzNTAyOSwzNTQ4MCwzNjkzOCwzNzAwOSwzNzEwOSwzODU5NiwzNDcwMSwyMjgwNSwyMDEwNCwyMDMxMywxOTk4MiwzNTQ2NSwzNjY3MSwzODkyOCwyMDY1MywyNDE4OCwyMjkzNCwyMzQ4MSwyNDI0OCwyNTU2MiwyNTU5NCwyNTc5MywyNjMzMiwyNjk1NCwy''@;'; put 'put ''NzA5NiwyNzkxNSwyODM0MiwyOTA3NiwyOTk5MiwzMTQwNywzMjY1MCwzMjc2OCwzMzg2NSwzMzk5MywzNTIwMSwzNTYxNywzNjM2MiwzNjk2NSwzODUyNSwzOTE3OCwyNDk1OCwyNTIzMywyNzQ0MiwyNzc3OSwyODAyMCwzMjcxNiwzMjc2NCwyODA5NiwzMjY0NSwzNDc0NiwzNTA2NCwyNjQ2''@;'; put 'put ''OSwzMzcxMywzODk3MiwzODY0NywyNzkzMSwzMjA5NywzMzg1MywzNzIyNiwyMDA4MSwyMTM2NSwyMzg4OCwyNzM5NiwyODY1MSwzNDI1MywzNDM0OSwzNTIzOSwyMTAzMywyMTUxOSwyMzY1MywyNjQ0NiwyNjc5MiwyOTcwMiwyOTgyNywzMDE3OCwzNTAyMywzNTA0MSwzNzMyNCwzODYyNiwz''@;'; put 'put ''ODUyMCwyNDQ1OSwyOTU3NSwzMTQzNSwzMzg3MCwyNTUwNCwzMDA1MywyMTEyOSwyNzk2OSwyODMxNiwyOTcwNSwzMDA0MSwzMDgyNywzMTg5MCwzODUzNCwzMTQ1Miw0MDg0NSwyMDQwNiwyNDk0MiwyNjA1MywzNDM5NiwyMDEwMiwyMDE0MiwyMDY5OCwyMDAwMSwyMDk0MCwyMzUzNCwyNjAw''@;'; put 'put ''OSwyNjc1MywyODA5MiwyOTQ3MSwzMDI3NCwzMDYzNywzMTI2MCwzMTk3NSwzMzM5MSwzNTUzOCwzNjk4OCwzNzMyNywzODUxNywzODkzNiwyMTE0NywzMjIwOSwyMDUyMywyMTQwMCwyNjUxOSwyODEwNywyOTEzNiwyOTc0NywzMzI1NiwzNjY1MCwzODU2Myw0MDAyMyw0MDYwNywyOTc5Miwy''@;'; put 'put ''MjU5MywyODA1NywzMjA0NywzOTAwNiwyMDE5NiwyMDI3OCwyMDM2MywyMDkxOSwyMTE2OSwyMzk5NCwyNDYwNCwyOTYxOCwzMTAzNiwzMzQ5MSwzNzQyOCwzODU4MywzODY0NiwzODY2Niw0MDU5OSw0MDgwMiwyNjI3OCwyNzUwOCwyMTAxNSwyMTE1NSwyODg3MiwzNTAxMCwyNDI2NSwyNDY1''@;'; put 'put ''MSwyNDk3NiwyODQ1MSwyOTAwMSwzMTgwNiwzMjI0NCwzMjg3OSwzNDAzMCwzNjg5OSwzNzY3NiwyMTU3MCwzOTc5MSwyNzM0NywyODgwOSwzNjAzNCwzNjMzNSwzODcwNiwyMTE3MiwyMzEwNSwyNDI2NiwyNDMyNCwyNjM5MSwyNzAwNCwyNzAyOCwyODAxMCwyODQzMSwyOTI4MiwyOTQzNiwz''@;'; put 'put ''MTcyNSwzMjc2OSwzMjg5NCwzNDYzNSwzNzA3MCwyMDg0NSw0MDU5NSwzMTEwOCwzMjkwNywzNzY4MiwzNTU0MiwyMDUyNSwyMTY0NCwzNTQ0MSwyNzQ5OCwzNjAzNiwzMzAzMSwyNDc4NSwyNjUyOCw0MDQzNCwyMDEyMSwyMDEyMCwzOTk1MiwzNTQzNSwzNDI0MSwzNDE1MiwyNjg4MCwyODI4''@;'; put 'put ''NiwzMDg3MSwzMzEwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0MzMyLDE5OTg0LDE5OTg5LDIwMDEwLDIwMDE3LDIwMDIyLDIwMDI4LDIwMDMxLDIwMDM0LDIwMDU0LDIwMDU2LDIwMDk4LDIwMTAxLDM1OTQ3LDIwMTA2LDMzMjk4LDI0MzMz''@;'; put 'put ''LDIwMTEwLDIwMTI2LDIwMTI3LDIwMTI4LDIwMTMwLDIwMTQ0LDIwMTQ3LDIwMTUwLDIwMTc0LDIwMTczLDIwMTY0LDIwMTY2LDIwMTYyLDIwMTgzLDIwMTkwLDIwMjA1LDIwMTkxLDIwMjE1LDIwMjMzLDIwMzE0LDIwMjcyLDIwMzE1LDIwMzE3LDIwMzExLDIwMjk1LDIwMzQyLDIwMzYwLDIw''@;'; put 'put ''MzY3LDIwMzc2LDIwMzQ3LDIwMzI5LDIwMzM2LDIwMzY5LDIwMzM1LDIwMzU4LDIwMzc0LDIwNzYwLDIwNDM2LDIwNDQ3LDIwNDMwLDIwNDQwLDIwNDQzLDIwNDMzLDIwNDQyLDIwNDMyLDIwNDUyLDIwNDUzLDIwNTA2LDIwNTIwLDIwNTAwLDIwNTIyLDIwNTE3LDIwNDg1LDIwMjUyLDIwNDcw''@;'; put 'put ''LDIwNTEzLDIwNTIxLDIwNTI0LDIwNDc4LDIwNDYzLDIwNDk3LDIwNDg2LDIwNTQ3LDIwNTUxLDI2MzcxLDIwNTY1LDIwNTYwLDIwNTUyLDIwNTcwLDIwNTY2LDIwNTg4LDIwNjAwLDIwNjA4LDIwNjM0LDIwNjEzLDIwNjYwLDIwNjU4LDIwNjgxLDIwNjgyLDIwNjU5LDIwNjc0LDIwNjk0LDIw''@;'; put 'put ''NzAyLDIwNzA5LDIwNzE3LDIwNzA3LDIwNzE4LDIwNzI5LDIwNzI1LDIwNzQ1LDIwNzM3LDIwNzM4LDIwNzU4LDIwNzU3LDIwNzU2LDIwNzYyLDIwNzY5LDIwNzk0LDIwNzkxLDIwNzk2LDIwNzk1LDIwNzk5LDIwODAwLDIwODE4LDIwODEyLDIwODIwLDIwODM0LDMxNDgwLDIwODQxLDIwODQy''@;'; put 'put ''LDIwODQ2LDIwODY0LDIwODY2LDIyMjMyLDIwODc2LDIwODczLDIwODc5LDIwODgxLDIwODgzLDIwODg1LDIwODg2LDIwOTAwLDIwOTAyLDIwODk4LDIwOTA1LDIwOTA2LDIwOTA3LDIwOTE1LDIwOTEzLDIwOTE0LDIwOTEyLDIwOTE3LDIwOTI1LDIwOTMzLDIwOTM3LDIwOTU1LDIwOTYwLDM0''@;'; put 'put ''Mzg5LDIwOTY5LDIwOTczLDIwOTc2LDIwOTgxLDIwOTkwLDIwOTk2LDIxMDAzLDIxMDEyLDIxMDA2LDIxMDMxLDIxMDM0LDIxMDM4LDIxMDQzLDIxMDQ5LDIxMDcxLDIxMDYwLDIxMDY3LDIxMDY4LDIxMDg2LDIxMDc2LDIxMDk4LDIxMTA4LDIxMDk3LDIxMTA3LDIxMTE5LDIxMTE3LDIxMTMz''@;'; put 'put ''LDIxMTQwLDIxMTM4LDIxMTA1LDIxMTI4LDIxMTM3LDM2Nzc2LDM2Nzc1LDIxMTY0LDIxMTY1LDIxMTgwLDIxMTczLDIxMTg1LDIxMTk3LDIxMjA3LDIxMjE0LDIxMjE5LDIxMjIyLDM5MTQ5LDIxMjE2LDIxMjM1LDIxMjM3LDIxMjQwLDIxMjQxLDIxMjU0LDIxMjU2LDMwMDA4LDIxMjYxLDIx''@;'; put 'put ''MjY0LDIxMjYzLDIxMjY5LDIxMjc0LDIxMjgzLDIxMjk1LDIxMjk3LDIxMjk5LDIxMzA0LDIxMzEyLDIxMzE4LDIxMzE3LDE5OTkxLDIxMzIxLDIxMzI1LDIwOTUwLDIxMzQyLDIxMzUzLDIxMzU4LDIyODA4LDIxMzcxLDIxMzY3LDIxMzc4LDIxMzk4LDIxNDA4LDIxNDE0LDIxNDEzLDIxNDIy''@;'; put 'put ''LDIxNDI0LDIxNDMwLDIxNDQzLDMxNzYyLDM4NjE3LDIxNDcxLDI2MzY0LDI5MTY2LDIxNDg2LDIxNDgwLDIxNDg1LDIxNDk4LDIxNTA1LDIxNTY1LDIxNTY4LDIxNTQ4LDIxNTQ5LDIxNTY0LDIxNTUwLDIxNTU4LDIxNTQ1LDIxNTMzLDIxNTgyLDIxNjQ3LDIxNjIxLDIxNjQ2LDIxNTk5LDIx''@;'; put 'put ''NjE3LDIxNjIzLDIxNjE2LDIxNjUwLDIxNjI3LDIxNjMyLDIxNjIyLDIxNjM2LDIxNjQ4LDIxNjM4LDIxNzAzLDIxNjY2LDIxNjg4LDIxNjY5LDIxNjc2LDIxNzAwLDIxNzA0LDIxNjcyLDIxNjc1LDIxNjk4LDIxNjY4LDIxNjk0LDIxNjkyLDIxNzIwLDIxNzMzLDIxNzM0LDIxNzc1LDIxNzgw''@;'; put 'put ''LDIxNzU3LDIxNzQyLDIxNzQxLDIxNzU0LDIxNzMwLDIxODE3LDIxODI0LDIxODU5LDIxODM2LDIxODA2LDIxODUyLDIxODI5LDIxODQ2LDIxODQ3LDIxODE2LDIxODExLDIxODUzLDIxOTEzLDIxODg4LDIxNjc5LDIxODk4LDIxOTE5LDIxODgzLDIxODg2LDIxOTEyLDIxOTE4LDIxOTM0LDIx''@;'; put 'put ''ODg0LDIxODkxLDIxOTI5LDIxODk1LDIxOTI4LDIxOTc4LDIxOTU3LDIxOTgzLDIxOTU2LDIxOTgwLDIxOTg4LDIxOTcyLDIyMDM2LDIyMDA3LDIyMDM4LDIyMDE0LDIyMDEzLDIyMDQzLDIyMDA5LDIyMDk0LDIyMDk2LDI5MTUxLDIyMDY4LDIyMDcwLDIyMDY2LDIyMDcyLDIyMTIzLDIyMTE2''@;'; put 'put ''LDIyMDYzLDIyMTI0LDIyMTIyLDIyMTUwLDIyMTQ0LDIyMTU0LDIyMTc2LDIyMTY0LDIyMTU5LDIyMTgxLDIyMTkwLDIyMTk4LDIyMTk2LDIyMjEwLDIyMjA0LDIyMjA5LDIyMjExLDIyMjA4LDIyMjE2LDIyMjIyLDIyMjI1LDIyMjI3LDIyMjMxLDIyMjU0LDIyMjY1LDIyMjcyLDIyMjcxLDIy''@;'; put 'put ''Mjc2LDIyMjgxLDIyMjgwLDIyMjgzLDIyMjg1LDIyMjkxLDIyMjk2LDIyMjk0LDIxOTU5LDIyMzAwLDIyMzEwLDIyMzI3LDIyMzI4LDIyMzUwLDIyMzMxLDIyMzM2LDIyMzUxLDIyMzc3LDIyNDY0LDIyNDA4LDIyMzY5LDIyMzk5LDIyNDA5LDIyNDE5LDIyNDMyLDIyNDUxLDIyNDM2LDIyNDQy''@;'; put 'put ''LDIyNDQ4LDIyNDY3LDIyNDcwLDIyNDg0LDIyNDgyLDIyNDgzLDIyNTM4LDIyNDg2LDIyNDk5LDIyNTM5LDIyNTUzLDIyNTU3LDIyNjQyLDIyNTYxLDIyNjI2LDIyNjAzLDIyNjQwLDI3NTg0LDIyNjEwLDIyNTg5LDIyNjQ5LDIyNjYxLDIyNzEzLDIyNjg3LDIyNjk5LDIyNzE0LDIyNzUwLDIy''@;'; put 'put ''NzE1LDIyNzEyLDIyNzAyLDIyNzI1LDIyNzM5LDIyNzM3LDIyNzQzLDIyNzQ1LDIyNzQ0LDIyNzU3LDIyNzQ4LDIyNzU2LDIyNzUxLDIyNzY3LDIyNzc4LDIyNzc3LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzg2LDIyNzk0LDIyODAwLDIyODExLDI2NzkwLDIyODIxLDIyODI4LDIyODI5LDIyODM0''@;'; put 'put ''LDIyODQwLDIyODQ2LDMxNDQyLDIyODY5LDIyODY0LDIyODYyLDIyODc0LDIyODcyLDIyODgyLDIyODgwLDIyODg3LDIyODkyLDIyODg5LDIyOTA0LDIyOTEzLDIyOTQxLDIwMzE4LDIwMzk1LDIyOTQ3LDIyOTYyLDIyOTgyLDIzMDE2LDIzMDA0LDIyOTI1LDIzMDAxLDIzMDAyLDIzMDc3LDIz''@;'; put 'put ''MDcxLDIzMDU3LDIzMDY4LDIzMDQ5LDIzMDY2LDIzMTA0LDIzMTQ4LDIzMTEzLDIzMDkzLDIzMDk0LDIzMTM4LDIzMTQ2LDIzMTk0LDIzMjI4LDIzMjMwLDIzMjQzLDIzMjM0LDIzMjI5LDIzMjY3LDIzMjU1LDIzMjcwLDIzMjczLDIzMjU0LDIzMjkwLDIzMjkxLDIzMzA4LDIzMzA3LDIzMzE4''@;'; put 'put ''LDIzMzQ2LDIzMjQ4LDIzMzM4LDIzMzUwLDIzMzU4LDIzMzYzLDIzMzY1LDIzMzYwLDIzMzc3LDIzMzgxLDIzMzg2LDIzMzg3LDIzMzk3LDIzNDAxLDIzNDA4LDIzNDExLDIzNDEzLDIzNDE2LDI1OTkyLDIzNDE4LDIzNDI0LDIzNDI3LDIzNDYyLDIzNDgwLDIzNDkxLDIzNDk1LDIzNDk3LDIz''@;'; put 'put ''NTA4LDIzNTA0LDIzNTI0LDIzNTI2LDIzNTIyLDIzNTE4LDIzNTI1LDIzNTMxLDIzNTM2LDIzNTQyLDIzNTM5LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTY1LDIzNTcxLDIzNTg0LDIzNTg2LDIzNTkyLDIzNjA4LDIzNjA5LDIzNjE3LDIzNjIyLDIzNjMwLDIzNjM1LDIzNjMyLDIzNjMxLDIzNDA5''@;'; put 'put ''LDIzNjYwLDIzNjYyLDIwMDY2LDIzNjcwLDIzNjczLDIzNjkyLDIzNjk3LDIzNzAwLDIyOTM5LDIzNzIzLDIzNzM5LDIzNzM0LDIzNzQwLDIzNzM1LDIzNzQ5LDIzNzQyLDIzNzUxLDIzNzY5LDIzNzg1LDIzODA1LDIzODAyLDIzNzg5LDIzOTQ4LDIzNzg2LDIzODE5LDIzODI5LDIzODMxLDIz''@;'; put 'put ''OTAwLDIzODM5LDIzODM1LDIzODI1LDIzODI4LDIzODQyLDIzODM0LDIzODMzLDIzODMyLDIzODg0LDIzODkwLDIzODg2LDIzODgzLDIzOTE2LDIzOTIzLDIzOTI2LDIzOTQzLDIzOTQwLDIzOTM4LDIzOTcwLDIzOTY1LDIzOTgwLDIzOTgyLDIzOTk3LDIzOTUyLDIzOTkxLDIzOTk2LDI0MDA5''@;'; put 'put ''LDI0MDEzLDI0MDE5LDI0MDE4LDI0MDIyLDI0MDI3LDI0MDQzLDI0MDUwLDI0MDUzLDI0MDc1LDI0MDkwLDI0MDg5LDI0MDgxLDI0MDkxLDI0MTE4LDI0MTE5LDI0MTMyLDI0MTMxLDI0MTI4LDI0MTQyLDI0MTUxLDI0MTQ4LDI0MTU5LDI0MTYyLDI0MTY0LDI0MTM1LDI0MTgxLDI0MTgyLDI0''@;'; put 'put ''MTg2LDQwNjM2LDI0MTkxLDI0MjI0LDI0MjU3LDI0MjU4LDI0MjY0LDI0MjcyLDI0MjcxLDI0Mjc4LDI0MjkxLDI0Mjg1LDI0MjgyLDI0MjgzLDI0MjkwLDI0Mjg5LDI0Mjk2LDI0Mjk3LDI0MzAwLDI0MzA1LDI0MzA3LDI0MzA0LDI0MzA4LDI0MzEyLDI0MzE4LDI0MzIzLDI0MzI5LDI0NDEz''@;'; put 'put ''LDI0NDEyLDI0MzMxLDI0MzM3LDI0MzQyLDI0MzYxLDI0MzY1LDI0Mzc2LDI0Mzg1LDI0MzkyLDI0Mzk2LDI0Mzk4LDI0MzY3LDI0NDAxLDI0NDA2LDI0NDA3LDI0NDA5LDI0NDE3LDI0NDI5LDI0NDM1LDI0NDM5LDI0NDUxLDI0NDUwLDI0NDQ3LDI0NDU4LDI0NDU2LDI0NDY1LDI0NDU1LDI0''@;'; put 'put ''NDc4LDI0NDczLDI0NDcyLDI0NDgwLDI0NDg4LDI0NDkzLDI0NTA4LDI0NTM0LDI0NTcxLDI0NTQ4LDI0NTY4LDI0NTYxLDI0NTQxLDI0NzU1LDI0NTc1LDI0NjA5LDI0NjcyLDI0NjAxLDI0NTkyLDI0NjE3LDI0NTkwLDI0NjI1LDI0NjAzLDI0NTk3LDI0NjE5LDI0NjE0LDI0NTkxLDI0NjM0''@;'; put 'put ''LDI0NjY2LDI0NjQxLDI0NjgyLDI0Njk1LDI0NjcxLDI0NjUwLDI0NjQ2LDI0NjUzLDI0Njc1LDI0NjQzLDI0Njc2LDI0NjQyLDI0Njg0LDI0NjgzLDI0NjY1LDI0NzA1LDI0NzE3LDI0ODA3LDI0NzA3LDI0NzMwLDI0NzA4LDI0NzMxLDI0NzI2LDI0NzI3LDI0NzIyLDI0NzQzLDI0NzE1LDI0''@;'; put 'put ''ODAxLDI0NzYwLDI0ODAwLDI0Nzg3LDI0NzU2LDI0NTYwLDI0NzY1LDI0Nzc0LDI0NzU3LDI0NzkyLDI0OTA5LDI0ODUzLDI0ODM4LDI0ODIyLDI0ODIzLDI0ODMyLDI0ODIwLDI0ODI2LDI0ODM1LDI0ODY1LDI0ODI3LDI0ODE3LDI0ODQ1LDI0ODQ2LDI0OTAzLDI0ODk0LDI0ODcyLDI0ODcx''@;'; put 'put ''LDI0OTA2LDI0ODk1LDI0ODkyLDI0ODc2LDI0ODg0LDI0ODkzLDI0ODk4LDI0OTAwLDI0OTQ3LDI0OTUxLDI0OTIwLDI0OTIxLDI0OTIyLDI0OTM5LDI0OTQ4LDI0OTQzLDI0OTMzLDI0OTQ1LDI0OTI3LDI0OTI1LDI0OTE1LDI0OTQ5LDI0OTg1LDI0OTgyLDI0OTY3LDI1MDA0LDI0OTgwLDI0''@;'; put 'put ''OTg2LDI0OTcwLDI0OTc3LDI1MDAzLDI1MDA2LDI1MDM2LDI1MDM0LDI1MDMzLDI1MDc5LDI1MDMyLDI1MDI3LDI1MDMwLDI1MDE4LDI1MDM1LDMyNjMzLDI1MDM3LDI1MDYyLDI1MDU5LDI1MDc4LDI1MDgyLDI1MDc2LDI1MDg3LDI1MDg1LDI1MDg0LDI1MDg2LDI1MDg4LDI1MDk2LDI1MDk3''@;'; put 'put ''LDI1MTAxLDI1MTAwLDI1MTA4LDI1MTE1LDI1MTE4LDI1MTIxLDI1MTMwLDI1MTM0LDI1MTM2LDI1MTM4LDI1MTM5LDI1MTUzLDI1MTY2LDI1MTgyLDI1MTg3LDI1MTc5LDI1MTg0LDI1MTkyLDI1MjEyLDI1MjE4LDI1MjI1LDI1MjE0LDI1MjM0LDI1MjM1LDI1MjM4LDI1MzAwLDI1MjE5LDI1''@;'; put 'put ''MjM2LDI1MzAzLDI1Mjk3LDI1Mjc1LDI1Mjk1LDI1MzQzLDI1Mjg2LDI1ODEyLDI1Mjg4LDI1MzA4LDI1MjkyLDI1MjkwLDI1MjgyLDI1Mjg3LDI1MjQzLDI1Mjg5LDI1MzU2LDI1MzI2LDI1MzI5LDI1MzgzLDI1MzQ2LDI1MzUyLDI1MzI3LDI1MzMzLDI1NDI0LDI1NDA2LDI1NDIxLDI1NjI4''@;'; put 'put ''LDI1NDIzLDI1NDk0LDI1NDg2LDI1NDcyLDI1NTE1LDI1NDYyLDI1NTA3LDI1NDg3LDI1NDgxLDI1NTAzLDI1NTI1LDI1NDUxLDI1NDQ5LDI1NTM0LDI1NTc3LDI1NTM2LDI1NTQyLDI1NTcxLDI1NTQ1LDI1NTU0LDI1NTkwLDI1NTQwLDI1NjIyLDI1NjUyLDI1NjA2LDI1NjE5LDI1NjM4LDI1''@;'; put 'put ''NjU0LDI1ODg1LDI1NjIzLDI1NjQwLDI1NjE1LDI1NzAzLDI1NzExLDI1NzE4LDI1Njc4LDI1ODk4LDI1NzQ5LDI1NzQ3LDI1NzY1LDI1NzY5LDI1NzM2LDI1Nzg4LDI1ODE4LDI1ODEwLDI1Nzk3LDI1Nzk5LDI1Nzg3LDI1ODE2LDI1Nzk0LDI1ODQxLDI1ODMxLDMzMjg5LDI1ODI0LDI1ODI1''@;'; put 'put ''LDI1MjYwLDI1ODI3LDI1ODM5LDI1OTAwLDI1ODQ2LDI1ODQ0LDI1ODQyLDI1ODUwLDI1ODU2LDI1ODUzLDI1ODgwLDI1ODg0LDI1ODYxLDI1ODkyLDI1ODkxLDI1ODk5LDI1OTA4LDI1OTA5LDI1OTExLDI1OTEwLDI1OTEyLDMwMDI3LDI1OTI4LDI1OTQyLDI1OTQxLDI1OTMzLDI1OTQ0LDI1''@;'; put 'put ''OTUwLDI1OTQ5LDI1OTcwLDI1OTc2LDI1OTg2LDI1OTg3LDM1NzIyLDI2MDExLDI2MDE1LDI2MDI3LDI2MDM5LDI2MDUxLDI2MDU0LDI2MDQ5LDI2MDUyLDI2MDYwLDI2MDY2LDI2MDc1LDI2MDczLDI2MDgwLDI2MDgxLDI2MDk3LDI2NDgyLDI2MTIyLDI2MTE1LDI2MTA3LDI2NDgzLDI2MTY1''@;'; put 'put ''LDI2MTY2LDI2MTY0LDI2MTQwLDI2MTkxLDI2MTgwLDI2MTg1LDI2MTc3LDI2MjA2LDI2MjA1LDI2MjEyLDI2MjE1LDI2MjE2LDI2MjA3LDI2MjEwLDI2MjI0LDI2MjQzLDI2MjQ4LDI2MjU0LDI2MjQ5LDI2MjQ0LDI2MjY0LDI2MjY5LDI2MzA1LDI2Mjk3LDI2MzEzLDI2MzAyLDI2MzAwLDI2''@;'; put 'put ''MzA4LDI2Mjk2LDI2MzI2LDI2MzMwLDI2MzM2LDI2MTc1LDI2MzQyLDI2MzQ1LDI2MzUyLDI2MzU3LDI2MzU5LDI2MzgzLDI2MzkwLDI2Mzk4LDI2NDA2LDI2NDA3LDM4NzEyLDI2NDE0LDI2NDMxLDI2NDIyLDI2NDMzLDI2NDI0LDI2NDIzLDI2NDM4LDI2NDYyLDI2NDY0LDI2NDU3LDI2NDY3''@;'; put 'put ''LDI2NDY4LDI2NTA1LDI2NDgwLDI2NTM3LDI2NDkyLDI2NDc0LDI2NTA4LDI2NTA3LDI2NTM0LDI2NTI5LDI2NTAxLDI2NTUxLDI2NjA3LDI2NTQ4LDI2NjA0LDI2NTQ3LDI2NjAxLDI2NTUyLDI2NTk2LDI2NTkwLDI2NTg5LDI2NTk0LDI2NjA2LDI2NTUzLDI2NTc0LDI2NTY2LDI2NTk5LDI3''@;'; put 'put ''MjkyLDI2NjU0LDI2Njk0LDI2NjY1LDI2Njg4LDI2NzAxLDI2Njc0LDI2NzAyLDI2ODAzLDI2NjY3LDI2NzEzLDI2NzIzLDI2NzQzLDI2NzUxLDI2NzgzLDI2NzY3LDI2Nzk3LDI2NzcyLDI2NzgxLDI2Nzc5LDI2NzU1LDI3MzEwLDI2ODA5LDI2NzQwLDI2ODA1LDI2Nzg0LDI2ODEwLDI2ODk1''@;'; put 'put ''LDI2NzY1LDI2NzUwLDI2ODgxLDI2ODI2LDI2ODg4LDI2ODQwLDI2OTE0LDI2OTE4LDI2ODQ5LDI2ODkyLDI2ODI5LDI2ODM2LDI2ODU1LDI2ODM3LDI2OTM0LDI2ODk4LDI2ODg0LDI2ODM5LDI2ODUxLDI2OTE3LDI2ODczLDI2ODQ4LDI2ODYzLDI2OTIwLDI2OTIyLDI2OTA2LDI2OTE1LDI2''@;'; put 'put ''OTEzLDI2ODIyLDI3MDAxLDI2OTk5LDI2OTcyLDI3ZTMsMjY5ODcsMjY5NjQsMjcwMDYsMjY5OTAsMjY5MzcsMjY5OTYsMjY5NDEsMjY5NjksMjY5MjgsMjY5NzcsMjY5NzQsMjY5NzMsMjcwMDksMjY5ODYsMjcwNTgsMjcwNTQsMjcwODgsMjcwNzEsMjcwNzMsMjcwOTEsMjcwNzAsMjcwODYs''@;'; put 'put ''MjM1MjgsMjcwODIsMjcxMDEsMjcwNjcsMjcwNzUsMjcwNDcsMjcxODIsMjcwMjUsMjcwNDAsMjcwMzYsMjcwMjksMjcwNjAsMjcxMDIsMjcxMTIsMjcxMzgsMjcxNjMsMjcxMzUsMjc0MDIsMjcxMjksMjcxMjIsMjcxMTEsMjcxNDEsMjcwNTcsMjcxNjYsMjcxMTcsMjcxNTYsMjcxMTUsMjcx''@;'; put 'put ''NDYsMjcxNTQsMjczMjksMjcxNzEsMjcxNTUsMjcyMDQsMjcxNDgsMjcyNTAsMjcxOTAsMjcyNTYsMjcyMDcsMjcyMzQsMjcyMjUsMjcyMzgsMjcyMDgsMjcxOTIsMjcxNzAsMjcyODAsMjcyNzcsMjcyOTYsMjcyNjgsMjcyOTgsMjcyOTksMjcyODcsMzQzMjcsMjczMjMsMjczMzEsMjczMzAs''@;'; put 'put ''MjczMjAsMjczMTUsMjczMDgsMjczNTgsMjczNDUsMjczNTksMjczMDYsMjczNTQsMjczNzAsMjczODcsMjczOTcsMzQzMjYsMjczODYsMjc0MTAsMjc0MTQsMzk3MjksMjc0MjMsMjc0NDgsMjc0NDcsMzA0MjgsMjc0NDksMzkxNTAsMjc0NjMsMjc0NTksMjc0NjUsMjc0NzIsMjc0ODEsMjc0''@;'; put 'put ''NzYsMjc0ODMsMjc0ODcsMjc0ODksMjc1MTIsMjc1MTMsMjc1MTksMjc1MjAsMjc1MjQsMjc1MjMsMjc1MzMsMjc1NDQsMjc1NDEsMjc1NTAsMjc1NTYsMjc1NjIsMjc1NjMsMjc1NjcsMjc1NzAsMjc1NjksMjc1NzEsMjc1NzUsMjc1ODAsMjc1OTAsMjc1OTUsMjc2MDMsMjc2MTUsMjc2Mjgs''@;'; put 'put ''Mjc2MjcsMjc2MzUsMjc2MzEsNDA2MzgsMjc2NTYsMjc2NjcsMjc2NjgsMjc2NzUsMjc2ODQsMjc2ODMsMjc3NDIsMjc3MzMsMjc3NDYsMjc3NTQsMjc3NzgsMjc3ODksMjc4MDIsMjc3NzcsMjc4MDMsMjc3NzQsMjc3NTIsMjc3NjMsMjc3OTQsMjc3OTIsMjc4NDQsMjc4ODksMjc4NTksMjc4''@;'; put 'put ''MzcsMjc4NjMsMjc4NDUsMjc4NjksMjc4MjIsMjc4MjUsMjc4MzgsMjc4MzQsMjc4NjcsMjc4ODcsMjc4NjUsMjc4ODIsMjc5MzUsMzQ4OTMsMjc5NTgsMjc5NDcsMjc5NjUsMjc5NjAsMjc5MjksMjc5NTcsMjc5NTUsMjc5MjIsMjc5MTYsMjgwMDMsMjgwNTEsMjgwMDQsMjc5OTQsMjgwMjUs''@;'; put 'put ''Mjc5OTMsMjgwNDYsMjgwNTMsMjg2NDQsMjgwMzcsMjgxNTMsMjgxODEsMjgxNzAsMjgwODUsMjgxMDMsMjgxMzQsMjgwODgsMjgxMDIsMjgxNDAsMjgxMjYsMjgxMDgsMjgxMzYsMjgxMTQsMjgxMDEsMjgxNTQsMjgxMjEsMjgxMzIsMjgxMTcsMjgxMzgsMjgxNDIsMjgyMDUsMjgyNzAsMjgy''@;'; put 'put ''MDYsMjgxODUsMjgyNzQsMjgyNTUsMjgyMjIsMjgxOTUsMjgyNjcsMjgyMDMsMjgyNzgsMjgyMzcsMjgxOTEsMjgyMjcsMjgyMTgsMjgyMzgsMjgxOTYsMjg0MTUsMjgxODksMjgyMTYsMjgyOTAsMjgzMzAsMjgzMTIsMjgzNjEsMjgzNDMsMjgzNzEsMjgzNDksMjgzMzUsMjgzNTYsMjgzMzgs''@;'; put 'put ''MjgzNzIsMjgzNzMsMjgzMDMsMjgzMjUsMjgzNTQsMjgzMTksMjg0ODEsMjg0MzMsMjg3NDgsMjgzOTYsMjg0MDgsMjg0MTQsMjg0NzksMjg0MDIsMjg0NjUsMjgzOTksMjg0NjYsMjgzNjQsMjg0NzgsMjg0MzUsMjg0MDcsMjg1NTAsMjg1MzgsMjg1MzYsMjg1NDUsMjg1NDQsMjg1MjcsMjg1''@;'; put 'put ''MDcsMjg2NTksMjg1MjUsMjg1NDYsMjg1NDAsMjg1MDQsMjg1NTgsMjg1NjEsMjg2MTAsMjg1MTgsMjg1OTUsMjg1NzksMjg1NzcsMjg1ODAsMjg2MDEsMjg2MTQsMjg1ODYsMjg2MzksMjg2MjksMjg2NTIsMjg2MjgsMjg2MzIsMjg2NTcsMjg2NTQsMjg2MzUsMjg2ODEsMjg2ODMsMjg2NjYs''@;'; put 'put ''Mjg2ODksMjg2NzMsMjg2ODcsMjg2NzAsMjg2OTksMjg2OTgsMjg1MzIsMjg3MDEsMjg2OTYsMjg3MDMsMjg3MjAsMjg3MzQsMjg3MjIsMjg3NTMsMjg3NzEsMjg4MjUsMjg4MTgsMjg4NDcsMjg5MTMsMjg4NDQsMjg4NTYsMjg4NTEsMjg4NDYsMjg4OTUsMjg4NzUsMjg4OTMsMjg4ODksMjg5''@;'; put 'put ''MzcsMjg5MjUsMjg5NTYsMjg5NTMsMjkwMjksMjkwMTMsMjkwNjQsMjkwMzAsMjkwMjYsMjkwMDQsMjkwMTQsMjkwMzYsMjkwNzEsMjkxNzksMjkwNjAsMjkwNzcsMjkwOTYsMjkxMDAsMjkxNDMsMjkxMTMsMjkxMTgsMjkxMzgsMjkxMjksMjkxNDAsMjkxMzQsMjkxNTIsMjkxNjQsMjkxNTks''@;'; put 'put ''MjkxNzMsMjkxODAsMjkxNzcsMjkxODMsMjkxOTcsMjkyMDAsMjkyMTEsMjkyMjQsMjkyMjksMjkyMjgsMjkyMzIsMjkyMzQsMjkyNDMsMjkyNDQsMjkyNDcsMjkyNDgsMjkyNTQsMjkyNTksMjkyNzIsMjkzMDAsMjkzMTAsMjkzMTQsMjkzMTMsMjkzMTksMjkzMzAsMjkzMzQsMjkzNDYsMjkz''@;'; put 'put ''NTEsMjkzNjksMjkzNjIsMjkzNzksMjkzODIsMjkzODAsMjkzOTAsMjkzOTQsMjk0MTAsMjk0MDgsMjk0MDksMjk0MzMsMjk0MzEsMjA0OTUsMjk0NjMsMjk0NTAsMjk0NjgsMjk0NjIsMjk0NjksMjk0OTIsMjk0ODcsMjk0ODEsMjk0NzcsMjk1MDIsMjk1MTgsMjk1MTksNDA2NjQsMjk1Mjcs''@;'; put 'put ''Mjk1NDYsMjk1NDQsMjk1NTIsMjk1NjAsMjk1NTcsMjk1NjMsMjk1NjIsMjk2NDAsMjk2MTksMjk2NDYsMjk2MjcsMjk2MzIsMjk2NjksMjk2NzgsMjk2NjIsMjk4NTgsMjk3MDEsMjk4MDcsMjk3MzMsMjk2ODgsMjk3NDYsMjk3NTQsMjk3ODEsMjk3NTksMjk3OTEsMjk3ODUsMjk3NjEsMjk3''@;'; put 'put ''ODgsMjk4MDEsMjk4MDgsMjk3OTUsMjk4MDIsMjk4MTQsMjk4MjIsMjk4MzUsMjk4NTQsMjk4NjMsMjk4OTgsMjk5MDMsMjk5MDgsMjk2ODEsMjk5MjAsMjk5MjMsMjk5MjcsMjk5MjksMjk5MzQsMjk5MzgsMjk5MzYsMjk5MzcsMjk5NDQsMjk5NDMsMjk5NTYsMjk5NTUsMjk5NTcsMjk5NjQs''@;'; put 'put ''Mjk5NjYsMjk5NjUsMjk5NzMsMjk5NzEsMjk5ODIsMjk5OTAsMjk5OTYsMzAwMTIsMzAwMjAsMzAwMjksMzAwMjYsMzAwMjUsMzAwNDMsMzAwMjIsMzAwNDIsMzAwNTcsMzAwNTIsMzAwNTUsMzAwNTksMzAwNjEsMzAwNzIsMzAwNzAsMzAwODYsMzAwODcsMzAwNjgsMzAwOTAsMzAwODksMzAw''@;'; put 'put ''ODIsMzAxMDAsMzAxMDYsMzAxMDksMzAxMTcsMzAxMTUsMzAxNDYsMzAxMzEsMzAxNDcsMzAxMzMsMzAxNDEsMzAxMzYsMzAxNDAsMzAxMjksMzAxNTcsMzAxNTQsMzAxNjIsMzAxNjksMzAxNzksMzAxNzQsMzAyMDYsMzAyMDcsMzAyMDQsMzAyMDksMzAxOTIsMzAyMDIsMzAxOTQsMzAxOTUs''@;'; put 'put ''MzAyMTksMzAyMjEsMzAyMTcsMzAyMzksMzAyNDcsMzAyNDAsMzAyNDEsMzAyNDIsMzAyNDQsMzAyNjAsMzAyNTYsMzAyNjcsMzAyNzksMzAyODAsMzAyNzgsMzAzMDAsMzAyOTYsMzAzMDUsMzAzMDYsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTEsMzAzMTYsMzAzMjAsMzAzMjIsMzAzMjYsMzAz''@;'; put 'put ''MjgsMzAzMzIsMzAzMzYsMzAzMzksMzAzNDQsMzAzNDcsMzAzNTAsMzAzNTgsMzAzNTUsMzAzNjEsMzAzNjIsMzAzODQsMzAzODgsMzAzOTIsMzAzOTMsMzAzOTQsMzA0MDIsMzA0MTMsMzA0MjIsMzA0MTgsMzA0MzAsMzA0MzMsMzA0MzcsMzA0MzksMzA0NDIsMzQzNTEsMzA0NTksMzA0NzIs''@;'; put 'put ''MzA0NzEsMzA0NjgsMzA1MDUsMzA1MDAsMzA0OTQsMzA1MDEsMzA1MDIsMzA0OTEsMzA1MTksMzA1MjAsMzA1MzUsMzA1NTQsMzA1NjgsMzA1NzEsMzA1NTUsMzA1NjUsMzA1OTEsMzA1OTAsMzA1ODUsMzA2MDYsMzA2MDMsMzA2MDksMzA2MjQsMzA2MjIsMzA2NDAsMzA2NDYsMzA2NDksMzA2''@;'; put 'put ''NTUsMzA2NTIsMzA2NTMsMzA2NTEsMzA2NjMsMzA2NjksMzA2NzksMzA2ODIsMzA2ODQsMzA2OTEsMzA3MDIsMzA3MTYsMzA3MzIsMzA3MzgsMzEwMTQsMzA3NTIsMzEwMTgsMzA3ODksMzA4NjIsMzA4MzYsMzA4NTQsMzA4NDQsMzA4NzQsMzA4NjAsMzA4ODMsMzA5MDEsMzA4OTAsMzA4OTUs''@;'; put 'put ''MzA5MjksMzA5MTgsMzA5MjMsMzA5MzIsMzA5MTAsMzA5MDgsMzA5MTcsMzA5MjIsMzA5NTYsMzA5NTEsMzA5MzgsMzA5NzMsMzA5NjQsMzA5ODMsMzA5OTQsMzA5OTMsMzEwMDEsMzEwMjAsMzEwMTksMzEwNDAsMzEwNzIsMzEwNjMsMzEwNzEsMzEwNjYsMzEwNjEsMzEwNTksMzEwOTgsMzEx''@;'; put 'put ''MDMsMzExMTQsMzExMzMsMzExNDMsNDA3NzksMzExNDYsMzExNTAsMzExNTUsMzExNjEsMzExNjIsMzExNzcsMzExODksMzEyMDcsMzEyMTIsMzEyMDEsMzEyMDMsMzEyNDAsMzEyNDUsMzEyNTYsMzEyNTcsMzEyNjQsMzEyNjMsMzExMDQsMzEyODEsMzEyOTEsMzEyOTQsMzEyODcsMzEyOTks''@;'; put 'put ''MzEzMTksMzEzMDUsMzEzMjksMzEzMzAsMzEzMzcsNDA4NjEsMzEzNDQsMzEzNTMsMzEzNTcsMzEzNjgsMzEzODMsMzEzODEsMzEzODQsMzEzODIsMzE0MDEsMzE0MzIsMzE0MDgsMzE0MTQsMzE0MjksMzE0MjgsMzE0MjMsMzY5OTUsMzE0MzEsMzE0MzQsMzE0MzcsMzE0MzksMzE0NDUsMzE0''@;'; put 'put ''NDMsMzE0NDksMzE0NTAsMzE0NTMsMzE0NTcsMzE0NTgsMzE0NjIsMzE0NjksMzE0NzIsMzE0OTAsMzE1MDMsMzE0OTgsMzE0OTQsMzE1MzksMzE1MTIsMzE1MTMsMzE1MTgsMzE1NDEsMzE1MjgsMzE1NDIsMzE1NjgsMzE2MTAsMzE0OTIsMzE1NjUsMzE0OTksMzE1NjQsMzE1NTcsMzE2MDUs''@;'; put 'put ''MzE1ODksMzE2MDQsMzE1OTEsMzE2MDAsMzE2MDEsMzE1OTYsMzE1OTgsMzE2NDUsMzE2NDAsMzE2NDcsMzE2MjksMzE2NDQsMzE2NDIsMzE2MjcsMzE2MzQsMzE2MzEsMzE1ODEsMzE2NDEsMzE2OTEsMzE2ODEsMzE2OTIsMzE2OTUsMzE2NjgsMzE2ODYsMzE3MDksMzE3MjEsMzE3NjEsMzE3''@;'; put 'put ''NjQsMzE3MTgsMzE3MTcsMzE4NDAsMzE3NDQsMzE3NTEsMzE3NjMsMzE3MzEsMzE3MzUsMzE3NjcsMzE3NTcsMzE3MzQsMzE3NzksMzE3ODMsMzE3ODYsMzE3NzUsMzE3OTksMzE3ODcsMzE4MDUsMzE4MjAsMzE4MTEsMzE4MjgsMzE4MjMsMzE4MDgsMzE4MjQsMzE4MzIsMzE4MzksMzE4NDQs''@;'; put 'put ''MzE4MzAsMzE4NDUsMzE4NTIsMzE4NjEsMzE4NzUsMzE4ODgsMzE5MDgsMzE5MTcsMzE5MDYsMzE5MTUsMzE5MDUsMzE5MTIsMzE5MjMsMzE5MjIsMzE5MjEsMzE5MTgsMzE5MjksMzE5MzMsMzE5MzYsMzE5NDEsMzE5MzgsMzE5NjAsMzE5NTQsMzE5NjQsMzE5NzAsMzk3MzksMzE5ODMsMzE5''@;'; put 'put ''ODYsMzE5ODgsMzE5OTAsMzE5OTQsMzIwMDYsMzIwMDIsMzIwMjgsMzIwMjEsMzIwMTAsMzIwNjksMzIwNzUsMzIwNDYsMzIwNTAsMzIwNjMsMzIwNTMsMzIwNzAsMzIxMTUsMzIwODYsMzIwNzgsMzIxMTQsMzIxMDQsMzIxMTAsMzIwNzksMzIwOTksMzIxNDcsMzIxMzcsMzIwOTEsMzIxNDMs''@;'; put 'put ''MzIxMjUsMzIxNTUsMzIxODYsMzIxNzQsMzIxNjMsMzIxODEsMzIxOTksMzIxODksMzIxNzEsMzIzMTcsMzIxNjIsMzIxNzUsMzIyMjAsMzIxODQsMzIxNTksMzIxNzYsMzIyMTYsMzIyMjEsMzIyMjgsMzIyMjIsMzIyNTEsMzIyNDIsMzIyMjUsMzIyNjEsMzIyNjYsMzIyOTEsMzIyODksMzIy''@;'; put 'put ''NzQsMzIzMDUsMzIyODcsMzIyNjUsMzIyNjcsMzIyOTAsMzIzMjYsMzIzNTgsMzIzMTUsMzIzMDksMzIzMTMsMzIzMjMsMzIzMTEsMzIzMDYsMzIzMTQsMzIzNTksMzIzNDksMzIzNDIsMzIzNTAsMzIzNDUsMzIzNDYsMzIzNzcsMzIzNjIsMzIzNjEsMzIzODAsMzIzNzksMzIzODcsMzIyMTMs''@;'; put 'put ''MzIzODEsMzY3ODIsMzIzODMsMzIzOTIsMzIzOTMsMzIzOTYsMzI0MDIsMzI0MDAsMzI0MDMsMzI0MDQsMzI0MDYsMzIzOTgsMzI0MTEsMzI0MTIsMzI1NjgsMzI1NzAsMzI1ODEsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTIsMzI1OTMsMzI1OTcsMzI1OTYsMzI2MDAsMzI2MDcsMzI2MDgsMzI2''@;'; put 'put ''MTYsMzI2MTcsMzI2MTUsMzI2MzIsMzI2NDIsMzI2NDYsMzI2NDMsMzI2NDgsMzI2NDcsMzI2NTIsMzI2NjAsMzI2NzAsMzI2NjksMzI2NjYsMzI2NzUsMzI2ODcsMzI2OTAsMzI2OTcsMzI2ODYsMzI2OTQsMzI2OTYsMzU2OTcsMzI3MDksMzI3MTAsMzI3MTQsMzI3MjUsMzI3MjQsMzI3Mzcs''@;'; put 'put ''MzI3NDIsMzI3NDUsMzI3NTUsMzI3NjEsMzkxMzIsMzI3NzQsMzI3NzIsMzI3NzksMzI3ODYsMzI3OTIsMzI3OTMsMzI3OTYsMzI4MDEsMzI4MDgsMzI4MzEsMzI4MjcsMzI4NDIsMzI4MzgsMzI4NTAsMzI4NTYsMzI4NTgsMzI4NjMsMzI4NjYsMzI4NzIsMzI4ODMsMzI4ODIsMzI4ODAsMzI4''@;'; put 'put ''ODYsMzI4ODksMzI4OTMsMzI4OTUsMzI5MDAsMzI5MDIsMzI5MDEsMzI5MjMsMzI5MTUsMzI5MjIsMzI5NDEsMjA4ODAsMzI5NDAsMzI5ODcsMzI5OTcsMzI5ODUsMzI5ODksMzI5NjQsMzI5ODYsMzI5ODIsMzMwMzMsMzMwMDcsMzMwMDksMzMwNTEsMzMwNjUsMzMwNTksMzMwNzEsMzMwOTks''@;'; put 'put ''Mzg1MzksMzMwOTQsMzMwODYsMzMxMDcsMzMxMDUsMzMwMjAsMzMxMzcsMzMxMzQsMzMxMjUsMzMxMjYsMzMxNDAsMzMxNTUsMzMxNjAsMzMxNjIsMzMxNTIsMzMxNTQsMzMxODQsMzMxNzMsMzMxODgsMzMxODcsMzMxMTksMzMxNzEsMzMxOTMsMzMyMDAsMzMyMDUsMzMyMTQsMzMyMDgsMzMy''@;'; put 'put ''MTMsMzMyMTYsMzMyMTgsMzMyMTAsMzMyMjUsMzMyMjksMzMyMzMsMzMyNDEsMzMyNDAsMzMyMjQsMzMyNDIsMzMyNDcsMzMyNDgsMzMyNTUsMzMyNzQsMzMyNzUsMzMyNzgsMzMyODEsMzMyODIsMzMyODUsMzMyODcsMzMyOTAsMzMyOTMsMzMyOTYsMzMzMDIsMzMzMjEsMzMzMjMsMzMzMzYs''@;'; put 'put ''MzMzMzEsMzMzNDQsMzMzNjksMzMzNjgsMzMzNzMsMzMzNzAsMzMzNzUsMzMzODAsMzMzNzgsMzMzODQsMzMzODYsMzMzODcsMzMzMjYsMzMzOTMsMzMzOTksMzM0MDAsMzM0MDYsMzM0MjEsMzM0MjYsMzM0NTEsMzM0MzksMzM0NjcsMzM0NTIsMzM1MDUsMzM1MDcsMzM1MDMsMzM0OTAsMzM1''@;'; put 'put ''MjQsMzM1MjMsMzM1MzAsMzM2ODMsMzM1MzksMzM1MzEsMzM1MjksMzM1MDIsMzM1NDIsMzM1MDAsMzM1NDUsMzM0OTcsMzM1ODksMzM1ODgsMzM1NTgsMzM1ODYsMzM1ODUsMzM2MDAsMzM1OTMsMzM2MTYsMzM2MDUsMzM1ODMsMzM1NzksMzM1NTksMzM1NjAsMzM2NjksMzM2OTAsMzM3MDYs''@;'; put 'put ''MzM2OTUsMzM2OTgsMzM2ODYsMzM1NzEsMzM2NzgsMzM2NzEsMzM2NzQsMzM2NjAsMzM3MTcsMzM2NTEsMzM2NTMsMzM2OTYsMzM2NzMsMzM3MDQsMzM3ODAsMzM4MTEsMzM3NzEsMzM3NDIsMzM3ODksMzM3OTUsMzM3NTIsMzM4MDMsMzM3MjksMzM3ODMsMzM3OTksMzM3NjAsMzM3NzgsMzM4''@;'; put 'put ''MDUsMzM4MjYsMzM4MjQsMzM3MjUsMzM4NDgsMzQwNTQsMzM3ODcsMzM5MDEsMzM4MzQsMzM4NTIsMzQxMzgsMzM5MjQsMzM5MTEsMzM4OTksMzM5NjUsMzM5MDIsMzM5MjIsMzM4OTcsMzM4NjIsMzM4MzYsMzM5MDMsMzM5MTMsMzM4NDUsMzM5OTQsMzM4OTAsMzM5NzcsMzM5ODMsMzM5NTEs''@;'; put 'put ''MzQwMDksMzM5OTcsMzM5NzksMzQwMTAsMzRlMywzMzk4NSwzMzk5MCwzNDAwNiwzMzk1MywzNDA4MSwzNDA0NywzNDAzNiwzNDA3MSwzNDA3MiwzNDA5MiwzNDA3OSwzNDA2OSwzNDA2OCwzNDA0NCwzNDExMiwzNDE0NywzNDEzNiwzNDEyMCwzNDExMywzNDMwNiwzNDEyMywzNDEzMywzNDE3''@;'; put 'put ''NiwzNDIxMiwzNDE4NCwzNDE5MywzNDE4NiwzNDIxNiwzNDE1NywzNDE5NiwzNDIwMywzNDI4MiwzNDE4MywzNDIwNCwzNDE2NywzNDE3NCwzNDE5MiwzNDI0OSwzNDIzNCwzNDI1NSwzNDIzMywzNDI1NiwzNDI2MSwzNDI2OSwzNDI3NywzNDI2OCwzNDI5NywzNDMxNCwzNDMyMywzNDMxNSwz''@;'; put 'put ''NDMwMiwzNDI5OCwzNDMxMCwzNDMzOCwzNDMzMCwzNDM1MiwzNDM2NywzNDM4MSwyMDA1MywzNDM4OCwzNDM5OSwzNDQwNywzNDQxNywzNDQ1MSwzNDQ2NywzNDQ3MywzNDQ3NCwzNDQ0MywzNDQ0NCwzNDQ4NiwzNDQ3OSwzNDUwMCwzNDUwMiwzNDQ4MCwzNDUwNSwzNDg1MSwzNDQ3NSwzNDUx''@;'; put 'put ''NiwzNDUyNiwzNDUzNywzNDU0MCwzNDUyNywzNDUyMywzNDU0MywzNDU3OCwzNDU2NiwzNDU2OCwzNDU2MCwzNDU2MywzNDU1NSwzNDU3NywzNDU2OSwzNDU3MywzNDU1MywzNDU3MCwzNDYxMiwzNDYyMywzNDYxNSwzNDYxOSwzNDU5NywzNDYwMSwzNDU4NiwzNDY1NiwzNDY1NSwzNDY4MCwz''@;'; put 'put ''NDYzNiwzNDYzOCwzNDY3NiwzNDY0NywzNDY2NCwzNDY3MCwzNDY0OSwzNDY0MywzNDY1OSwzNDY2NiwzNDgyMSwzNDcyMiwzNDcxOSwzNDY5MCwzNDczNSwzNDc2MywzNDc0OSwzNDc1MiwzNDc2OCwzODYxNCwzNDczMSwzNDc1NiwzNDczOSwzNDc1OSwzNDc1OCwzNDc0NywzNDc5OSwzNDgw''@;'; put 'put ''MiwzNDc4NCwzNDgzMSwzNDgyOSwzNDgxNCwzNDgwNiwzNDgwNywzNDgzMCwzNDc3MCwzNDgzMywzNDgzOCwzNDgzNywzNDg1MCwzNDg0OSwzNDg2NSwzNDg3MCwzNDg3MywzNDg1NSwzNDg3NSwzNDg4NCwzNDg4MiwzNDg5OCwzNDkwNSwzNDkxMCwzNDkxNCwzNDkyMywzNDk0NSwzNDk0Miwz''@;'; put 'put ''NDk3NCwzNDkzMywzNDk0MSwzNDk5NywzNDkzMCwzNDk0NiwzNDk2NywzNDk2MiwzNDk5MCwzNDk2OSwzNDk3OCwzNDk1NywzNDk4MCwzNDk5MiwzNTAwNywzNDk5MywzNTAxMSwzNTAxMiwzNTAyOCwzNTAzMiwzNTAzMywzNTAzNywzNTA2NSwzNTA3NCwzNTA2OCwzNTA2MCwzNTA0OCwzNTA1''@;'; put 'put ''OCwzNTA3NiwzNTA4NCwzNTA4MiwzNTA5MSwzNTEzOSwzNTEwMiwzNTEwOSwzNTExNCwzNTExNSwzNTEzNywzNTE0MCwzNTEzMSwzNTEyNiwzNTEyOCwzNTE0OCwzNTEwMSwzNTE2OCwzNTE2NiwzNTE3NCwzNTE3MiwzNTE4MSwzNTE3OCwzNTE4MywzNTE4OCwzNTE5MSwzNTE5OCwzNTIwMywz''@;'; put 'put ''NTIwOCwzNTIxMCwzNTIxOSwzNTIyNCwzNTIzMywzNTI0MSwzNTIzOCwzNTI0NCwzNTI0NywzNTI1MCwzNTI1OCwzNTI2MSwzNTI2MywzNTI2NCwzNTI5MCwzNTI5MiwzNTI5MywzNTMwMywzNTMxNiwzNTMyMCwzNTMzMSwzNTM1MCwzNTM0NCwzNTM0MCwzNTM1NSwzNTM1NywzNTM2NSwzNTM4''@;'; put 'put ''MiwzNTM5MywzNTQxOSwzNTQxMCwzNTM5OCwzNTQwMCwzNTQ1MiwzNTQzNywzNTQzNiwzNTQyNiwzNTQ2MSwzNTQ1OCwzNTQ2MCwzNTQ5NiwzNTQ4OSwzNTQ3MywzNTQ5MywzNTQ5NCwzNTQ4MiwzNTQ5MSwzNTUyNCwzNTUzMywzNTUyMiwzNTU0NiwzNTU2MywzNTU3MSwzNTU1OSwzNTU1Niwz''@;'; put 'put ''NTU2OSwzNTYwNCwzNTU1MiwzNTU1NCwzNTU3NSwzNTU1MCwzNTU0NywzNTU5NiwzNTU5MSwzNTYxMCwzNTU1MywzNTYwNiwzNTYwMCwzNTYwNywzNTYxNiwzNTYzNSwzODgyNywzNTYyMiwzNTYyNywzNTY0NiwzNTYyNCwzNTY0OSwzNTY2MCwzNTY2MywzNTY2MiwzNTY1NywzNTY3MCwzNTY3''@;'; put 'put ''NSwzNTY3NCwzNTY5MSwzNTY3OSwzNTY5MiwzNTY5NSwzNTcwMCwzNTcwOSwzNTcxMiwzNTcyNCwzNTcyNiwzNTczMCwzNTczMSwzNTczNCwzNTczNywzNTczOCwzNTg5OCwzNTkwNSwzNTkwMywzNTkxMiwzNTkxNiwzNTkxOCwzNTkyMCwzNTkyNSwzNTkzOCwzNTk0OCwzNTk2MCwzNTk2Miwz''@;'; put 'put ''NTk3MCwzNTk3NywzNTk3MywzNTk3OCwzNTk4MSwzNTk4MiwzNTk4OCwzNTk2NCwzNTk5MiwyNTExNywzNjAxMywzNjAxMCwzNjAyOSwzNjAxOCwzNjAxOSwzNjAxNCwzNjAyMiwzNjA0MCwzNjAzMywzNjA2OCwzNjA2NywzNjA1OCwzNjA5MywzNjA5MCwzNjA5MSwzNjEwMCwzNjEwMSwzNjEw''@;'; put 'put ''NiwzNjEwMywzNjExMSwzNjEwOSwzNjExMiw0MDc4MiwzNjExNSwzNjA0NSwzNjExNiwzNjExOCwzNjE5OSwzNjIwNSwzNjIwOSwzNjIxMSwzNjIyNSwzNjI0OSwzNjI5MCwzNjI4NiwzNjI4MiwzNjMwMywzNjMxNCwzNjMxMCwzNjMwMCwzNjMxNSwzNjI5OSwzNjMzMCwzNjMzMSwzNjMxOSwz''@;'; put 'put ''NjMyMywzNjM0OCwzNjM2MCwzNjM2MSwzNjM1MSwzNjM4MSwzNjM4MiwzNjM2OCwzNjM4MywzNjQxOCwzNjQwNSwzNjQwMCwzNjQwNCwzNjQyNiwzNjQyMywzNjQyNSwzNjQyOCwzNjQzMiwzNjQyNCwzNjQ0MSwzNjQ1MiwzNjQ0OCwzNjM5NCwzNjQ1MSwzNjQzNywzNjQ3MCwzNjQ2NiwzNjQ3''@;'; put 'put ''NiwzNjQ4MSwzNjQ4NywzNjQ4NSwzNjQ4NCwzNjQ5MSwzNjQ5MCwzNjQ5OSwzNjQ5NywzNjUwMCwzNjUwNSwzNjUyMiwzNjUxMywzNjUyNCwzNjUyOCwzNjU1MCwzNjUyOSwzNjU0MiwzNjU0OSwzNjU1MiwzNjU1NSwzNjU3MSwzNjU3OSwzNjYwNCwzNjYwMywzNjU4NywzNjYwNiwzNjYxOCwz''@;'; put 'put ''NjYxMywzNjYyOSwzNjYyNiwzNjYzMywzNjYyNywzNjYzNiwzNjYzOSwzNjYzNSwzNjYyMCwzNjY0NiwzNjY1OSwzNjY2NywzNjY2NSwzNjY3NywzNjY3NCwzNjY3MCwzNjY4NCwzNjY4MSwzNjY3OCwzNjY4NiwzNjY5NSwzNjcwMCwzNjcwNiwzNjcwNywzNjcwOCwzNjc2NCwzNjc2NywzNjc3''@;'; put 'put ''MSwzNjc4MSwzNjc4MywzNjc5MSwzNjgyNiwzNjgzNywzNjgzNCwzNjg0MiwzNjg0NywzNjk5OSwzNjg1MiwzNjg2OSwzNjg1NywzNjg1OCwzNjg4MSwzNjg4NSwzNjg5NywzNjg3NywzNjg5NCwzNjg4NiwzNjg3NSwzNjkwMywzNjkxOCwzNjkxNywzNjkyMSwzNjg1NiwzNjk0MywzNjk0NCwz''@;'; put 'put ''Njk0NSwzNjk0NiwzNjg3OCwzNjkzNywzNjkyNiwzNjk1MCwzNjk1MiwzNjk1OCwzNjk2OCwzNjk3NSwzNjk4MiwzODU2OCwzNjk3OCwzNjk5NCwzNjk4OSwzNjk5MywzNjk5MiwzNzAwMiwzNzAwMSwzNzAwNywzNzAzMiwzNzAzOSwzNzA0MSwzNzA0NSwzNzA5MCwzNzA5MiwyNTE2MCwzNzA4''@;'; put 'put ''MywzNzEyMiwzNzEzOCwzNzE0NSwzNzE3MCwzNzE2OCwzNzE5NCwzNzIwNiwzNzIwOCwzNzIxOSwzNzIyMSwzNzIyNSwzNzIzNSwzNzIzNCwzNzI1OSwzNzI1NywzNzI1MCwzNzI4MiwzNzI5MSwzNzI5NSwzNzI5MCwzNzMwMSwzNzMwMCwzNzMwNiwzNzMxMiwzNzMxMywzNzMyMSwzNzMyMywz''@;'; put 'put ''NzMyOCwzNzMzNCwzNzM0MywzNzM0NSwzNzMzOSwzNzM3MiwzNzM2NSwzNzM2NiwzNzQwNiwzNzM3NSwzNzM5NiwzNzQyMCwzNzM5NywzNzM5MywzNzQ3MCwzNzQ2MywzNzQ0NSwzNzQ0OSwzNzQ3NiwzNzQ0OCwzNzUyNSwzNzQzOSwzNzQ1MSwzNzQ1NiwzNzUzMiwzNzUyNiwzNzUyMywzNzUz''@;'; put 'put ''MSwzNzQ2NiwzNzU4MywzNzU2MSwzNzU1OSwzNzYwOSwzNzY0NywzNzYyNiwzNzcwMCwzNzY3OCwzNzY1NywzNzY2NiwzNzY1OCwzNzY2NywzNzY5MCwzNzY4NSwzNzY5MSwzNzcyNCwzNzcyOCwzNzc1NiwzNzc0MiwzNzcxOCwzNzgwOCwzNzgwNCwzNzgwNSwzNzc4MCwzNzgxNywzNzg0Niwz''@;'; put 'put ''Nzg0NywzNzg2NCwzNzg2MSwzNzg0OCwzNzgyNywzNzg1MywzNzg0MCwzNzgzMiwzNzg2MCwzNzkxNCwzNzkwOCwzNzkwNywzNzg5MSwzNzg5NSwzNzkwNCwzNzk0MiwzNzkzMSwzNzk0MSwzNzkyMSwzNzk0NiwzNzk1MywzNzk3MCwzNzk1NiwzNzk3OSwzNzk4NCwzNzk4NiwzNzk4MiwzNzk5''@;'; put 'put ''NCwzNzQxNywzOGUzLDM4MDA1LDM4MDA3LDM4MDEzLDM3OTc4LDM4MDEyLDM4MDE0LDM4MDE3LDM4MDE1LDM4Mjc0LDM4Mjc5LDM4MjgyLDM4MjkyLDM4Mjk0LDM4Mjk2LDM4Mjk3LDM4MzA0LDM4MzEyLDM4MzExLDM4MzE3LDM4MzMyLDM4MzMxLDM4MzI5LDM4MzM0LDM4MzQ2LDI4NjYyLDM4''@;'; put 'put ''MzM5LDM4MzQ5LDM4MzQ4LDM4MzU3LDM4MzU2LDM4MzU4LDM4MzY0LDM4MzY5LDM4MzczLDM4MzcwLDM4NDMzLDM4NDQwLDM4NDQ2LDM4NDQ3LDM4NDY2LDM4NDc2LDM4NDc5LDM4NDc1LDM4NTE5LDM4NDkyLDM4NDk0LDM4NDkzLDM4NDk1LDM4NTAyLDM4NTE0LDM4NTA4LDM4NTQxLDM4NTUy''@;'; put 'put ''LDM4NTQ5LDM4NTUxLDM4NTcwLDM4NTY3LDM4NTc3LDM4NTc4LDM4NTc2LDM4NTgwLDM4NTgyLDM4NTg0LDM4NTg1LDM4NjA2LDM4NjAzLDM4NjAxLDM4NjA1LDM1MTQ5LDM4NjIwLDM4NjY5LDM4NjEzLDM4NjQ5LDM4NjYwLDM4NjYyLDM4NjY0LDM4Njc1LDM4NjcwLDM4NjczLDM4NjcxLDM4''@;'; put 'put ''Njc4LDM4NjgxLDM4NjkyLDM4Njk4LDM4NzA0LDM4NzEzLDM4NzE3LDM4NzE4LDM4NzI0LDM4NzI2LDM4NzI4LDM4NzIyLDM4NzI5LDM4NzQ4LDM4NzUyLDM4NzU2LDM4NzU4LDM4NzYwLDIxMjAyLDM4NzYzLDM4NzY5LDM4Nzc3LDM4Nzg5LDM4NzgwLDM4Nzg1LDM4Nzc4LDM4NzkwLDM4Nzk1''@;'; put 'put ''LDM4Nzk5LDM4ODAwLDM4ODEyLDM4ODI0LDM4ODIyLDM4ODE5LDM4ODM1LDM4ODM2LDM4ODUxLDM4ODU0LDM4ODU2LDM4ODU5LDM4ODc2LDM4ODkzLDQwNzgzLDM4ODk4LDMxNDU1LDM4OTAyLDM4OTAxLDM4OTI3LDM4OTI0LDM4OTY4LDM4OTQ4LDM4OTQ1LDM4OTY3LDM4OTczLDM4OTgyLDM4''@;'; put 'put ''OTkxLDM4OTg3LDM5MDE5LDM5MDIzLDM5MDI0LDM5MDI1LDM5MDI4LDM5MDI3LDM5MDgyLDM5MDg3LDM5MDg5LDM5MDk0LDM5MTA4LDM5MTA3LDM5MTEwLDM5MTQ1LDM5MTQ3LDM5MTcxLDM5MTc3LDM5MTg2LDM5MTg4LDM5MTkyLDM5MjAxLDM5MTk3LDM5MTk4LDM5MjA0LDM5MjAwLDM5MjEy''@;'; put 'put ''LDM5MjE0LDM5MjI5LDM5MjMwLDM5MjM0LDM5MjQxLDM5MjM3LDM5MjQ4LDM5MjQzLDM5MjQ5LDM5MjUwLDM5MjQ0LDM5MjUzLDM5MzE5LDM5MzIwLDM5MzMzLDM5MzQxLDM5MzQyLDM5MzU2LDM5MzkxLDM5Mzg3LDM5Mzg5LDM5Mzg0LDM5Mzc3LDM5NDA1LDM5NDA2LDM5NDA5LDM5NDEwLDM5''@;'; put 'put ''NDE5LDM5NDE2LDM5NDI1LDM5NDM5LDM5NDI5LDM5Mzk0LDM5NDQ5LDM5NDY3LDM5NDc5LDM5NDkzLDM5NDkwLDM5NDg4LDM5NDkxLDM5NDg2LDM5NTA5LDM5NTAxLDM5NTE1LDM5NTExLDM5NTE5LDM5NTIyLDM5NTI1LDM5NTI0LDM5NTI5LDM5NTMxLDM5NTMwLDM5NTk3LDM5NjAwLDM5NjEy''@;'; put 'put ''LDM5NjE2LDM5NjMxLDM5NjMzLDM5NjM1LDM5NjM2LDM5NjQ2LDM5NjQ3LDM5NjUwLDM5NjUxLDM5NjU0LDM5NjYzLDM5NjU5LDM5NjYyLDM5NjY4LDM5NjY1LDM5NjcxLDM5Njc1LDM5Njg2LDM5NzA0LDM5NzA2LDM5NzExLDM5NzE0LDM5NzE1LDM5NzE3LDM5NzE5LDM5NzIwLDM5NzIxLDM5''@;'; put 'put ''NzIyLDM5NzI2LDM5NzI3LDM5NzMwLDM5NzQ4LDM5NzQ3LDM5NzU5LDM5NzU3LDM5NzU4LDM5NzYxLDM5NzY4LDM5Nzk2LDM5ODI3LDM5ODExLDM5ODI1LDM5ODMwLDM5ODMxLDM5ODM5LDM5ODQwLDM5ODQ4LDM5ODYwLDM5ODcyLDM5ODgyLDM5ODY1LDM5ODc4LDM5ODg3LDM5ODg5LDM5ODkw''@;'; put 'put ''LDM5OTA3LDM5OTA2LDM5OTA4LDM5ODkyLDM5OTA1LDM5OTk0LDM5OTIyLDM5OTIxLDM5OTIwLDM5OTU3LDM5OTU2LDM5OTQ1LDM5OTU1LDM5OTQ4LDM5OTQyLDM5OTQ0LDM5OTU0LDM5OTQ2LDM5OTQwLDM5OTgyLDM5OTYzLDM5OTczLDM5OTcyLDM5OTY5LDM5OTg0LDQwMDA3LDM5OTg2LDQw''@;'; put 'put ''MDA2LDM5OTk4LDQwMDI2LDQwMDMyLDQwMDM5LDQwMDU0LDQwMDU2LDQwMTY3LDQwMTcyLDQwMTc2LDQwMjAxLDQwMjAwLDQwMTcxLDQwMTk1LDQwMTk4LDQwMjM0LDQwMjMwLDQwMzY3LDQwMjI3LDQwMjIzLDQwMjYwLDQwMjEzLDQwMjEwLDQwMjU3LDQwMjU1LDQwMjU0LDQwMjYyLDQwMjY0''@;'; put 'put ''LDQwMjg1LDQwMjg2LDQwMjkyLDQwMjczLDQwMjcyLDQwMjgxLDQwMzA2LDQwMzI5LDQwMzI3LDQwMzYzLDQwMzAzLDQwMzE0LDQwMzQ2LDQwMzU2LDQwMzYxLDQwMzcwLDQwMzg4LDQwMzg1LDQwMzc5LDQwMzc2LDQwMzc4LDQwMzkwLDQwMzk5LDQwMzg2LDQwNDA5LDQwNDAzLDQwNDQwLDQw''@;'; put 'put ''NDIyLDQwNDI5LDQwNDMxLDQwNDQ1LDQwNDc0LDQwNDc1LDQwNDc4LDQwNTY1LDQwNTY5LDQwNTczLDQwNTc3LDQwNTg0LDQwNTg3LDQwNTg4LDQwNTk0LDQwNTk3LDQwNTkzLDQwNjA1LDQwNjEzLDQwNjE3LDQwNjMyLDQwNjE4LDQwNjIxLDM4NzUzLDQwNjUyLDQwNjU0LDQwNjU1LDQwNjU2''@;'; put 'put ''LDQwNjYwLDQwNjY4LDQwNjcwLDQwNjY5LDQwNjcyLDQwNjc3LDQwNjgwLDQwNjg3LDQwNjkyLDQwNjk0LDQwNjk1LDQwNjk3LDQwNjk5LDQwNzAwLDQwNzAxLDQwNzExLDQwNzEyLDMwMzkxLDQwNzI1LDQwNzM3LDQwNzQ4LDQwNzY2LDQwNzc4LDQwNzg2LDQwNzg4LDQwODAzLDQwNzk5LDQw''@;'; put 'put ''ODAwLDQwODAxLDQwODA2LDQwODA3LDQwODEyLDQwODEwLDQwODIzLDQwODE4LDQwODIyLDQwODUzLDQwODYwLDQwODY0LDIyNTc1LDI3MDc5LDM2OTUzLDI5Nzk2LDIwOTU2LDI5MDgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwy''@;'; put 'put ''NjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgz''@;'; put 'put ''NiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2''@;'; put 'put ''NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1''@;'; put 'put ''MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwy''@;'; put 'put ''NjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0''@;'; put 'put ''MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5Nywy''@;'; put 'put ''ODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTcz''@;'; put 'put ''OCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwz''@;'; put 'put ''MTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAz''@;'; put 'put ''MywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwz''@;'; put 'put ''NzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2''@;'; put 'put ''OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywz''@;'; put 'put ''ODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0''@;'; put 'put ''LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NjAs''@;'; put 'put ''ODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsODc1NywzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwz''@;'; put 'put ''NDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYy''@;'; put 'put ''OCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3Mywy''@;'; put 'put ''MjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkx''@;'; put 'put ''NywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwy''@;'; put 'put ''NjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAy''@;'; put 'put ''MCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwy''@;'; put 'put ''ODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1''@;'; put 'put ''MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwz''@;'; put 'put ''MTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1''@;'; put 'put ''NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwz''@;'; put 'put ''NzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAz''@;'; put 'put ''OSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwz''@;'; put 'put ''ODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGppczAyMTI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDcyOCw3MTEsMTg0LDcyOSw3MzMsMTc1LDczMSw3MzAsNjUzNzQsOTAwLDkwMSxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsMTYxLDE2NiwxOTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE4NiwxNzAsMTY5LDE3NCw4NDgyLDE2NCw4NDcwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MDIsOTA0LDkwNSw5MDYsOTM4LG51bGwsOTA4LG51bGwsOTEwLDkzOSxudWxsLDkxMSxudWxsLG51bGwsbnVsbCxudWxsLDk0MCw5NDEsOTQyLDk0Myw5NzAsOTEyLDk3''@;'; put 'put ''Miw5NjIsOTczLDk3MSw5NDQsOTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzOCwxMDM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTEx''@;'; put 'put ''OCwxMTE5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk4LDI3MixudWxsLDI5NCxu''@;'; put 'put ''dWxsLDMwNixudWxsLDMyMSwzMTksbnVsbCwzMzAsMjE2LDMzOCxudWxsLDM1OCwyMjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzAsMjczLDI0MCwyOTUsMzA1LDMwNywzMTIsMzIyLDMy''@;'; put 'put ''MCwzMjksMzMxLDI0OCwzMzksMjIzLDM1OSwyNTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTMsMTkyLDE5NiwxOTQsMjU4LDQ2MSwyNTYsMjYwLDE5NywxOTUsMjYyLDI2NCwyNjgsMTk5LDI2NiwyNzAsMjAxLDIw''@;'; put 'put ''MCwyMDMsMjAyLDI4MiwyNzgsMjc0LDI4MCxudWxsLDI4NCwyODYsMjkwLDI4OCwyOTIsMjA1LDIwNCwyMDcsMjA2LDQ2MywzMDQsMjk4LDMwMiwyOTYsMzA4LDMxMCwzMTMsMzE3LDMxNSwzMjMsMzI3LDMyNSwyMDksMjExLDIxMCwyMTQsMjEyLDQ2NSwzMzYsMzMyLDIxMywzNDAsMzQ0LDM0''@;'; put 'put ''MiwzNDYsMzQ4LDM1MiwzNTAsMzU2LDM1NCwyMTgsMjE3LDIyMCwyMTksMzY0LDQ2NywzNjgsMzYyLDM3MCwzNjYsMzYwLDQ3MSw0NzUsNDczLDQ2OSwzNzIsMjIxLDM3NiwzNzQsMzc3LDM4MSwzNzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMjUsMjI0LDIyOCwyMjYs''@;'; put 'put ''MjU5LDQ2MiwyNTcsMjYxLDIyOSwyMjcsMjYzLDI2NSwyNjksMjMxLDI2NywyNzEsMjMzLDIzMiwyMzUsMjM0LDI4MywyNzksMjc1LDI4MSw1MDEsMjg1LDI4NyxudWxsLDI4OSwyOTMsMjM3LDIzNiwyMzksMjM4LDQ2NCxudWxsLDI5OSwzMDMsMjk3LDMwOSwzMTEsMzE0LDMxOCwzMTYsMzI0''@;'; put 'put ''LDMyOCwzMjYsMjQxLDI0MywyNDIsMjQ2LDI0NCw0NjYsMzM3LDMzMywyNDUsMzQxLDM0NSwzNDMsMzQ3LDM0OSwzNTMsMzUxLDM1NywzNTUsMjUwLDI0OSwyNTIsMjUxLDM2NSw0NjgsMzY5LDM2MywzNzEsMzY3LDM2MSw0NzIsNDc2LDQ3NCw0NzAsMzczLDI1MywyNTUsMzc1LDM3OCwzODIs''@;'; put 'put ''MzgwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTk3MCwxOTk3MiwxOTk3MywxOTk4MCwxOTk4NiwxOTk5OSwyMDAwMywyMDAwNCwyMDAwOCwyMDAxMSwy''@;'; put 'put ''MDAxNCwyMDAxNSwyMDAxNiwyMDAyMSwyMDAzMiwyMDAzMywyMDAzNiwyMDAzOSwyMDA0OSwyMDA1OCwyMDA2MCwyMDA2NywyMDA3MiwyMDA3MywyMDA4NCwyMDA4NSwyMDA4OSwyMDA5NSwyMDEwOSwyMDExOCwyMDExOSwyMDEyNSwyMDE0MywyMDE1MywyMDE2MywyMDE3NiwyMDE4NiwyMDE4''@;'; put 'put ''NywyMDE5MiwyMDE5MywyMDE5NCwyMDIwMCwyMDIwNywyMDIwOSwyMDIxMSwyMDIxMywyMDIyMSwyMDIyMiwyMDIyMywyMDIyNCwyMDIyNiwyMDIyNywyMDIzMiwyMDIzNSwyMDIzNiwyMDI0MiwyMDI0NSwyMDI0NiwyMDI0NywyMDI0OSwyMDI3MCwyMDI3MywyMDMyMCwyMDI3NSwyMDI3Nywy''@;'; put 'put ''MDI3OSwyMDI4MSwyMDI4MywyMDI4NiwyMDI4OCwyMDI5MCwyMDI5NiwyMDI5NywyMDI5OSwyMDMwMCwyMDMwNiwyMDMwOCwyMDMxMCwyMDMxMiwyMDMxOSwyMDMyMywyMDMzMCwyMDMzMiwyMDMzNCwyMDMzNywyMDM0MywyMDM0NCwyMDM0NSwyMDM0NiwyMDM0OSwyMDM1MCwyMDM1MywyMDM1''@;'; put 'put ''NCwyMDM1NiwyMDM1NywyMDM2MSwyMDM2MiwyMDM2NCwyMDM2NiwyMDM2OCwyMDM3MCwyMDM3MSwyMDM3MiwyMDM3NSwyMDM3NywyMDM3OCwyMDM4MiwyMDM4MywyMDQwMiwyMDQwNywyMDQwOSwyMDQxMSwyMDQxMiwyMDQxMywyMDQxNCwyMDQxNiwyMDQxNywyMDQyMSwyMDQyMiwyMDQyNCwy''@;'; put 'put ''MDQyNSwyMDQyNywyMDQyOCwyMDQyOSwyMDQzMSwyMDQzNCwyMDQ0NCwyMDQ0OCwyMDQ1MCwyMDQ2NCwyMDQ2NiwyMDQ3NiwyMDQ3NywyMDQ3OSwyMDQ4MCwyMDQ4MSwyMDQ4NCwyMDQ4NywyMDQ5MCwyMDQ5MiwyMDQ5NCwyMDQ5NiwyMDQ5OSwyMDUwMywyMDUwNCwyMDUwNywyMDUwOCwyMDUw''@;'; put 'put ''OSwyMDUxMCwyMDUxNCwyMDUxOSwyMDUyNiwyMDUyOCwyMDUzMCwyMDUzMSwyMDUzMywyMDU0NCwyMDU0NSwyMDU0NiwyMDU0OSwyMDU1MCwyMDU1NCwyMDU1NiwyMDU1OCwyMDU2MSwyMDU2MiwyMDU2MywyMDU2NywyMDU2OSwyMDU3NSwyMDU3NiwyMDU3OCwyMDU3OSwyMDU4MiwyMDU4Mywy''@;'; put 'put ''MDU4NiwyMDU4OSwyMDU5MiwyMDU5MywyMDUzOSwyMDYwOSwyMDYxMSwyMDYxMiwyMDYxNCwyMDYxOCwyMDYyMiwyMDYyMywyMDYyNCwyMDYyNiwyMDYyNywyMDYyOCwyMDYzMCwyMDYzNSwyMDYzNiwyMDYzOCwyMDYzOSwyMDY0MCwyMDY0MSwyMDY0MiwyMDY1MCwyMDY1NSwyMDY1NiwyMDY2''@;'; put 'put ''NSwyMDY2NiwyMDY2OSwyMDY3MiwyMDY3NSwyMDY3NiwyMDY3OSwyMDY4NCwyMDY4NiwyMDY4OCwyMDY5MSwyMDY5MiwyMDY5NiwyMDcwMCwyMDcwMSwyMDcwMywyMDcwNiwyMDcwOCwyMDcxMCwyMDcxMiwyMDcxMywyMDcxOSwyMDcyMSwyMDcyNiwyMDczMCwyMDczNCwyMDczOSwyMDc0Miwy''@;'; put 'put ''MDc0MywyMDc0NCwyMDc0NywyMDc0OCwyMDc0OSwyMDc1MCwyMDcyMiwyMDc1MiwyMDc1OSwyMDc2MSwyMDc2MywyMDc2NCwyMDc2NSwyMDc2NiwyMDc3MSwyMDc3NSwyMDc3NiwyMDc4MCwyMDc4MSwyMDc4MywyMDc4NSwyMDc4NywyMDc4OCwyMDc4OSwyMDc5MiwyMDc5MywyMDgwMiwyMDgx''@;'; put 'put ''MCwyMDgxNSwyMDgxOSwyMDgyMSwyMDgyMywyMDgyNCwyMDgzMSwyMDgzNiwyMDgzOCwyMDg2MiwyMDg2NywyMDg2OCwyMDg3NSwyMDg3OCwyMDg4OCwyMDg5MywyMDg5NywyMDg5OSwyMDkwOSwyMDkyMCwyMDkyMiwyMDkyNCwyMDkyNiwyMDkyNywyMDkzMCwyMDkzNiwyMDk0MywyMDk0NSwy''@;'; put 'put ''MDk0NiwyMDk0NywyMDk0OSwyMDk1MiwyMDk1OCwyMDk2MiwyMDk2NSwyMDk3NCwyMDk3OCwyMDk3OSwyMDk4MCwyMDk4MywyMDk5MywyMDk5NCwyMDk5NywyMTAxMCwyMTAxMSwyMTAxMywyMTAxNCwyMTAxNiwyMTAyNiwyMTAzMiwyMTA0MSwyMTA0MiwyMTA0NSwyMTA1MiwyMTA2MSwyMTA2''@;'; put 'put ''NSwyMTA3NywyMTA3OSwyMTA4MCwyMTA4MiwyMTA4NCwyMTA4NywyMTA4OCwyMTA4OSwyMTA5NCwyMTEwMiwyMTExMSwyMTExMiwyMTExMywyMTEyMCwyMTEyMiwyMTEyNSwyMTEzMCwyMTEzMiwyMTEzOSwyMTE0MSwyMTE0MiwyMTE0MywyMTE0NCwyMTE0NiwyMTE0OCwyMTE1NiwyMTE1Nywy''@;'; put 'put ''MTE1OCwyMTE1OSwyMTE2NywyMTE2OCwyMTE3NCwyMTE3NSwyMTE3NiwyMTE3OCwyMTE3OSwyMTE4MSwyMTE4NCwyMTE4OCwyMTE5MCwyMTE5MiwyMTE5NiwyMTE5OSwyMTIwMSwyMTIwNCwyMTIwNiwyMTIxMSwyMTIxMiwyMTIxNywyMTIyMSwyMTIyNCwyMTIyNSwyMTIyNiwyMTIyOCwyMTIz''@;'; put 'put ''MiwyMTIzMywyMTIzNiwyMTIzOCwyMTIzOSwyMTI0OCwyMTI1MSwyMTI1OCwyMTI1OSwyMTI2MCwyMTI2NSwyMTI2NywyMTI3MiwyMTI3NSwyMTI3NiwyMTI3OCwyMTI3OSwyMTI4NSwyMTI4NywyMTI4OCwyMTI4OSwyMTI5MSwyMTI5MiwyMTI5MywyMTI5NiwyMTI5OCwyMTMwMSwyMTMwOCwy''@;'; put 'put ''MTMwOSwyMTMxMCwyMTMxNCwyMTMyNCwyMTMyMywyMTMzNywyMTMzOSwyMTM0NSwyMTM0NywyMTM0OSwyMTM1NiwyMTM1NywyMTM2MiwyMTM2OSwyMTM3NCwyMTM3OSwyMTM4MywyMTM4NCwyMTM5MCwyMTM5NSwyMTM5NiwyMTQwMSwyMTQwNSwyMTQwOSwyMTQxMiwyMTQxOCwyMTQxOSwyMTQy''@;'; put 'put ''MywyMTQyNiwyMTQyOCwyMTQyOSwyMTQzMSwyMTQzMiwyMTQzNCwyMTQzNywyMTQ0MCwyMTQ0NSwyMTQ1NSwyMTQ1OCwyMTQ1OSwyMTQ2MSwyMTQ2NiwyMTQ2OSwyMTQ3MCwyMTQ3MiwyMTQ3OCwyMTQ3OSwyMTQ5MywyMTUwNiwyMTUyMywyMTUzMCwyMTUzNywyMTU0MywyMTU0NCwyMTU0Niwy''@;'; put 'put ''MTU1MSwyMTU1MywyMTU1NiwyMTU1NywyMTU3MSwyMTU3MiwyMTU3NSwyMTU4MSwyMTU4MywyMTU5OCwyMTYwMiwyMTYwNCwyMTYwNiwyMTYwNywyMTYwOSwyMTYxMSwyMTYxMywyMTYxNCwyMTYyMCwyMTYzMSwyMTYzMywyMTYzNSwyMTYzNywyMTY0MCwyMTY0MSwyMTY0NSwyMTY0OSwyMTY1''@;'; put 'put ''MywyMTY1NCwyMTY2MCwyMTY2MywyMTY2NSwyMTY3MCwyMTY3MSwyMTY3MywyMTY3NCwyMTY3NywyMTY3OCwyMTY4MSwyMTY4NywyMTY4OSwyMTY5MCwyMTY5MSwyMTY5NSwyMTcwMiwyMTcwNiwyMTcwOSwyMTcxMCwyMTcyOCwyMTczOCwyMTc0MCwyMTc0MywyMTc1MCwyMTc1NiwyMTc1OCwy''@;'; put 'put ''MTc1OSwyMTc2MCwyMTc2MSwyMTc2NSwyMTc2OCwyMTc2OSwyMTc3MiwyMTc3MywyMTc3NCwyMTc4MSwyMTgwMiwyMTgwMywyMTgxMCwyMTgxMywyMTgxNCwyMTgxOSwyMTgyMCwyMTgyMSwyMTgyNSwyMTgzMSwyMTgzMywyMTgzNCwyMTgzNywyMTg0MCwyMTg0MSwyMTg0OCwyMTg1MCwyMTg1''@;'; put 'put ''MSwyMTg1NCwyMTg1NiwyMTg1NywyMTg2MCwyMTg2MiwyMTg4NywyMTg4OSwyMTg5MCwyMTg5NCwyMTg5NiwyMTkwMiwyMTkwMywyMTkwNSwyMTkwNiwyMTkwNywyMTkwOCwyMTkxMSwyMTkyMywyMTkyNCwyMTkzMywyMTkzOCwyMTk1MSwyMTk1MywyMTk1NSwyMTk1OCwyMTk2MSwyMTk2Mywy''@;'; put 'put ''MTk2NCwyMTk2NiwyMTk2OSwyMTk3MCwyMTk3MSwyMTk3NSwyMTk3NiwyMTk3OSwyMTk4MiwyMTk4NiwyMTk5MywyMjAwNiwyMjAxNSwyMjAyMSwyMjAyNCwyMjAyNiwyMjAyOSwyMjAzMCwyMjAzMSwyMjAzMiwyMjAzMywyMjAzNCwyMjA0MSwyMjA2MCwyMjA2NCwyMjA2NywyMjA2OSwyMjA3''@;'; put 'put ''MSwyMjA3MywyMjA3NSwyMjA3NiwyMjA3NywyMjA3OSwyMjA4MCwyMjA4MSwyMjA4MywyMjA4NCwyMjA4NiwyMjA4OSwyMjA5MSwyMjA5MywyMjA5NSwyMjEwMCwyMjExMCwyMjExMiwyMjExMywyMjExNCwyMjExNSwyMjExOCwyMjEyMSwyMjEyNSwyMjEyNywyMjEyOSwyMjEzMCwyMjEzMywy''@;'; put 'put ''MjE0OCwyMjE0OSwyMjE1MiwyMjE1NSwyMjE1NiwyMjE2NSwyMjE2OSwyMjE3MCwyMjE3MywyMjE3NCwyMjE3NSwyMjE4MiwyMjE4MywyMjE4NCwyMjE4NSwyMjE4NywyMjE4OCwyMjE4OSwyMjE5MywyMjE5NSwyMjE5OSwyMjIwNiwyMjIxMywyMjIxNywyMjIxOCwyMjIxOSwyMjIyMywyMjIy''@;'; put 'put ''NCwyMjIyMCwyMjIyMSwyMjIzMywyMjIzNiwyMjIzNywyMjIzOSwyMjI0MSwyMjI0NCwyMjI0NSwyMjI0NiwyMjI0NywyMjI0OCwyMjI1NywyMjI1MSwyMjI1MywyMjI2MiwyMjI2MywyMjI3MywyMjI3NCwyMjI3OSwyMjI4MiwyMjI4NCwyMjI4OSwyMjI5MywyMjI5OCwyMjI5OSwyMjMwMSwy''@;'; put 'put ''MjMwNCwyMjMwNiwyMjMwNywyMjMwOCwyMjMwOSwyMjMxMywyMjMxNCwyMjMxNiwyMjMxOCwyMjMxOSwyMjMyMywyMjMyNCwyMjMzMywyMjMzNCwyMjMzNSwyMjM0MSwyMjM0MiwyMjM0OCwyMjM0OSwyMjM1NCwyMjM3MCwyMjM3MywyMjM3NSwyMjM3NiwyMjM3OSwyMjM4MSwyMjM4MiwyMjM4''@;'; put 'put ''MywyMjM4NCwyMjM4NSwyMjM4NywyMjM4OCwyMjM4OSwyMjM5MSwyMjM5MywyMjM5NCwyMjM5NSwyMjM5NiwyMjM5OCwyMjQwMSwyMjQwMywyMjQxMiwyMjQyMCwyMjQyMywyMjQyNSwyMjQyNiwyMjQyOCwyMjQyOSwyMjQzMCwyMjQzMSwyMjQzMywyMjQyMSwyMjQzOSwyMjQ0MCwyMjQ0MSwy''@;'; put 'put ''MjQ0NCwyMjQ1NiwyMjQ2MSwyMjQ3MSwyMjQ3MiwyMjQ3NiwyMjQ3OSwyMjQ4NSwyMjQ5MywyMjQ5NCwyMjUwMCwyMjUwMiwyMjUwMywyMjUwNSwyMjUwOSwyMjUxMiwyMjUxNywyMjUxOCwyMjUyMCwyMjUyNSwyMjUyNiwyMjUyNywyMjUzMSwyMjUzMiwyMjUzNiwyMjUzNywyMjQ5NywyMjU0''@;'; put 'put ''MCwyMjU0MSwyMjU1NSwyMjU1OCwyMjU1OSwyMjU2MCwyMjU2NiwyMjU2NywyMjU3MywyMjU3OCwyMjU4NSwyMjU5MSwyMjYwMSwyMjYwNCwyMjYwNSwyMjYwNywyMjYwOCwyMjYxMywyMjYyMywyMjYyNSwyMjYyOCwyMjYzMSwyMjYzMiwyMjY0OCwyMjY1MiwyMjY1NSwyMjY1NiwyMjY1Nywy''@;'; put 'put ''MjY2MywyMjY2NCwyMjY2NSwyMjY2NiwyMjY2OCwyMjY2OSwyMjY3MSwyMjY3MiwyMjY3NiwyMjY3OCwyMjY4NSwyMjY4OCwyMjY4OSwyMjY5MCwyMjY5NCwyMjY5NywyMjcwNSwyMjcwNiwyMjcyNCwyMjcxNiwyMjcyMiwyMjcyOCwyMjczMywyMjczNCwyMjczNiwyMjczOCwyMjc0MCwyMjc0''@;'; put 'put ''MiwyMjc0NiwyMjc0OSwyMjc1MywyMjc1NCwyMjc2MSwyMjc3MSwyMjc4OSwyMjc5MCwyMjc5NSwyMjc5NiwyMjgwMiwyMjgwMywyMjgwNCwzNDM2OSwyMjgxMywyMjgxNywyMjgxOSwyMjgyMCwyMjgyNCwyMjgzMSwyMjgzMiwyMjgzNSwyMjgzNywyMjgzOCwyMjg0NywyMjg1MSwyMjg1NCwy''@;'; put 'put ''Mjg2NiwyMjg2NywyMjg3MywyMjg3NSwyMjg3NywyMjg3OCwyMjg3OSwyMjg4MSwyMjg4MywyMjg5MSwyMjg5MywyMjg5NSwyMjg5OCwyMjkwMSwyMjkwMiwyMjkwNSwyMjkwNywyMjkwOCwyMjkyMywyMjkyNCwyMjkyNiwyMjkzMCwyMjkzMywyMjkzNSwyMjk0MywyMjk0OCwyMjk1MSwyMjk1''@;'; put 'put ''NywyMjk1OCwyMjk1OSwyMjk2MCwyMjk2MywyMjk2NywyMjk3MCwyMjk3MiwyMjk3NywyMjk3OSwyMjk4MCwyMjk4NCwyMjk4NiwyMjk4OSwyMjk5NCwyMzAwNSwyMzAwNiwyMzAwNywyMzAxMSwyMzAxMiwyMzAxNSwyMzAyMiwyMzAyMywyMzAyNSwyMzAyNiwyMzAyOCwyMzAzMSwyMzA0MCwy''@;'; put 'put ''MzA0NCwyMzA1MiwyMzA1MywyMzA1NCwyMzA1OCwyMzA1OSwyMzA3MCwyMzA3NSwyMzA3NiwyMzA3OSwyMzA4MCwyMzA4MiwyMzA4NSwyMzA4OCwyMzEwOCwyMzEwOSwyMzExMSwyMzExMiwyMzExNiwyMzEyMCwyMzEyNSwyMzEzNCwyMzEzOSwyMzE0MSwyMzE0MywyMzE0OSwyMzE1OSwyMzE2''@;'; put 'put ''MiwyMzE2MywyMzE2NiwyMzE3OSwyMzE4NCwyMzE4NywyMzE5MCwyMzE5MywyMzE5NiwyMzE5OCwyMzE5OSwyMzIwMCwyMzIwMiwyMzIwNywyMzIxMiwyMzIxNywyMzIxOCwyMzIxOSwyMzIyMSwyMzIyNCwyMzIyNiwyMzIyNywyMzIzMSwyMzIzNiwyMzIzOCwyMzI0MCwyMzI0NywyMzI1OCwy''@;'; put 'put ''MzI2MCwyMzI2NCwyMzI2OSwyMzI3NCwyMzI3OCwyMzI4NSwyMzI4NiwyMzI5MywyMzI5NiwyMzI5NywyMzMwNCwyMzMxOSwyMzM0OCwyMzMyMSwyMzMyMywyMzMyNSwyMzMyOSwyMzMzMywyMzM0MSwyMzM1MiwyMzM2MSwyMzM3MSwyMzM3MiwyMzM3OCwyMzM4MiwyMzM5MCwyMzQwMCwyMzQw''@;'; put 'put ''NiwyMzQwNywyMzQyMCwyMzQyMSwyMzQyMiwyMzQyMywyMzQyNSwyMzQyOCwyMzQzMCwyMzQzNCwyMzQzOCwyMzQ0MCwyMzQ0MSwyMzQ0MywyMzQ0NCwyMzQ0NiwyMzQ2NCwyMzQ2NSwyMzQ2OCwyMzQ2OSwyMzQ3MSwyMzQ3MywyMzQ3NCwyMzQ3OSwyMzQ4MiwyMzQ4NCwyMzQ4OCwyMzQ4OSwy''@;'; put 'put ''MzUwMSwyMzUwMywyMzUxMCwyMzUxMSwyMzUxMiwyMzUxMywyMzUxNCwyMzUyMCwyMzUzNSwyMzUzNywyMzU0MCwyMzU0OSwyMzU2NCwyMzU3NSwyMzU4MiwyMzU4MywyMzU4NywyMzU5MCwyMzU5MywyMzU5NSwyMzU5NiwyMzU5OCwyMzYwMCwyMzYwMiwyMzYwNSwyMzYwNiwyMzY0MSwyMzY0''@;'; put 'put ''MiwyMzY0NCwyMzY1MCwyMzY1MSwyMzY1NSwyMzY1NiwyMzY1NywyMzY2MSwyMzY2NCwyMzY2OCwyMzY2OSwyMzY3NCwyMzY3NSwyMzY3NiwyMzY3NywyMzY4NywyMzY4OCwyMzY5MCwyMzY5NSwyMzY5OCwyMzcwOSwyMzcxMSwyMzcxMiwyMzcxNCwyMzcxNSwyMzcxOCwyMzcyMiwyMzczMCwy''@;'; put 'put ''MzczMiwyMzczMywyMzczOCwyMzc1MywyMzc1NSwyMzc2MiwyMzc3MywyMzc2NywyMzc5MCwyMzc5MywyMzc5NCwyMzc5NiwyMzgwOSwyMzgxNCwyMzgyMSwyMzgyNiwyMzg1MSwyMzg0MywyMzg0NCwyMzg0NiwyMzg0NywyMzg1NywyMzg2MCwyMzg2NSwyMzg2OSwyMzg3MSwyMzg3NCwyMzg3''@;'; put 'put ''NSwyMzg3OCwyMzg4MCwyMzg5MywyMzg4OSwyMzg5NywyMzg4MiwyMzkwMywyMzkwNCwyMzkwNSwyMzkwNiwyMzkwOCwyMzkxNCwyMzkxNywyMzkyMCwyMzkyOSwyMzkzMCwyMzkzNCwyMzkzNSwyMzkzNywyMzkzOSwyMzk0NCwyMzk0NiwyMzk1NCwyMzk1NSwyMzk1NiwyMzk1NywyMzk2MSwy''@;'; put 'put ''Mzk2MywyMzk2NywyMzk2OCwyMzk3NSwyMzk3OSwyMzk4NCwyMzk4OCwyMzk5MiwyMzk5MywyNDAwMywyNDAwNywyNDAxMSwyNDAxNiwyNDAxNCwyNDAyNCwyNDAyNSwyNDAzMiwyNDAzNiwyNDA0MSwyNDA1NiwyNDA1NywyNDA2NCwyNDA3MSwyNDA3NywyNDA4MiwyNDA4NCwyNDA4NSwyNDA4''@;'; put 'put ''OCwyNDA5NSwyNDA5NiwyNDExMCwyNDEwNCwyNDExNCwyNDExNywyNDEyNiwyNDEzOSwyNDE0NCwyNDEzNywyNDE0NSwyNDE1MCwyNDE1MiwyNDE1NSwyNDE1NiwyNDE1OCwyNDE2OCwyNDE3MCwyNDE3MSwyNDE3MiwyNDE3MywyNDE3NCwyNDE3NiwyNDE5MiwyNDIwMywyNDIwNiwyNDIyNiwy''@;'; put 'put ''NDIyOCwyNDIyOSwyNDIzMiwyNDIzNCwyNDIzNiwyNDI0MSwyNDI0MywyNDI1MywyNDI1NCwyNDI1NSwyNDI2MiwyNDI2OCwyNDI2NywyNDI3MCwyNDI3MywyNDI3NCwyNDI3NiwyNDI3NywyNDI4NCwyNDI4NiwyNDI5MywyNDI5OSwyNDMyMiwyNDMyNiwyNDMyNywyNDMyOCwyNDMzNCwyNDM0''@;'; put 'put ''NSwyNDM0OCwyNDM0OSwyNDM1MywyNDM1NCwyNDM1NSwyNDM1NiwyNDM2MCwyNDM2MywyNDM2NCwyNDM2NiwyNDM2OCwyNDM3MiwyNDM3NCwyNDM3OSwyNDM4MSwyNDM4MywyNDM4NCwyNDM4OCwyNDM4OSwyNDM5MSwyNDM5NywyNDQwMCwyNDQwNCwyNDQwOCwyNDQxMSwyNDQxNiwyNDQxOSwy''@;'; put 'put ''NDQyMCwyNDQyMywyNDQzMSwyNDQzNCwyNDQzNiwyNDQzNywyNDQ0MCwyNDQ0MiwyNDQ0NSwyNDQ0NiwyNDQ1NywyNDQ2MSwyNDQ2MywyNDQ3MCwyNDQ3NiwyNDQ3NywyNDQ4MiwyNDQ4NywyNDQ5MSwyNDQ4NCwyNDQ5MiwyNDQ5NSwyNDQ5NiwyNDQ5NywyNDUwNCwyNDUxNiwyNDUxOSwyNDUy''@;'; put 'put ''MCwyNDUyMSwyNDUyMywyNDUyOCwyNDUyOSwyNDUzMCwyNDUzMSwyNDUzMiwyNDU0MiwyNDU0NSwyNDU0NiwyNDU1MiwyNDU1MywyNDU1NCwyNDU1NiwyNDU1NywyNDU1OCwyNDU1OSwyNDU2MiwyNDU2MywyNDU2NiwyNDU3MCwyNDU3MiwyNDU4MywyNDU4NiwyNDU4OSwyNDU5NSwyNDU5Niwy''@;'; put 'put ''NDU5OSwyNDYwMCwyNDYwMiwyNDYwNywyNDYxMiwyNDYyMSwyNDYyNywyNDYyOSwyNDY0MCwyNDY0NywyNDY0OCwyNDY0OSwyNDY1MiwyNDY1NywyNDY2MCwyNDY2MiwyNDY2MywyNDY2OSwyNDY3MywyNDY3OSwyNDY4OSwyNDcwMiwyNDcwMywyNDcwNiwyNDcxMCwyNDcxMiwyNDcxNCwyNDcx''@;'; put 'put ''OCwyNDcyMSwyNDcyMywyNDcyNSwyNDcyOCwyNDczMywyNDczNCwyNDczOCwyNDc0MCwyNDc0MSwyNDc0NCwyNDc1MiwyNDc1MywyNDc1OSwyNDc2MywyNDc2NiwyNDc3MCwyNDc3MiwyNDc3NiwyNDc3NywyNDc3OCwyNDc3OSwyNDc4MiwyNDc4MywyNDc4OCwyNDc4OSwyNDc5MywyNDc5NSwy''@;'; put 'put ''NDc5NywyNDc5OCwyNDgwMiwyNDgwNSwyNDgxOCwyNDgyMSwyNDgyNCwyNDgyOCwyNDgyOSwyNDgzNCwyNDgzOSwyNDg0MiwyNDg0NCwyNDg0OCwyNDg0OSwyNDg1MCwyNDg1MSwyNDg1MiwyNDg1NCwyNDg1NSwyNDg1NywyNDg2MCwyNDg2MiwyNDg2NiwyNDg3NCwyNDg3NSwyNDg4MCwyNDg4''@;'; put 'put ''MSwyNDg4NSwyNDg4NiwyNDg4NywyNDg4OSwyNDg5NywyNDkwMSwyNDkwMiwyNDkwNSwyNDkyNiwyNDkyOCwyNDk0MCwyNDk0NiwyNDk1MiwyNDk1NSwyNDk1NiwyNDk1OSwyNDk2MCwyNDk2MSwyNDk2MywyNDk2NCwyNDk3MSwyNDk3MywyNDk3OCwyNDk3OSwyNDk4MywyNDk4NCwyNDk4OCwy''@;'; put 'put ''NDk4OSwyNDk5MSwyNDk5MiwyNDk5NywyNWUzLDI1MDAyLDI1MDA1LDI1MDE2LDI1MDE3LDI1MDIwLDI1MDI0LDI1MDI1LDI1MDI2LDI1MDM4LDI1MDM5LDI1MDQ1LDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU3LDI1MDU4LDI1MDYzLDI1MDY1LDI1MDYxLDI1MDY4LDI1MDY5LDI1MDcx''@;'; put 'put ''LDI1MDg5LDI1MDkxLDI1MDkyLDI1MDk1LDI1MTA3LDI1MTA5LDI1MTE2LDI1MTIwLDI1MTIyLDI1MTIzLDI1MTI3LDI1MTI5LDI1MTMxLDI1MTQ1LDI1MTQ5LDI1MTU0LDI1MTU1LDI1MTU2LDI1MTU4LDI1MTY0LDI1MTY4LDI1MTY5LDI1MTcwLDI1MTcyLDI1MTc0LDI1MTc4LDI1MTgwLDI1''@;'; put 'put ''MTg4LDI1MTk3LDI1MTk5LDI1MjAzLDI1MjEwLDI1MjEzLDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjU0LDI1MjU2LDI1MjY3LDI1MjcwLDI1MjcxLDI1Mjc0LDI1Mjc4LDI1Mjc5LDI1Mjg0LDI1Mjk0LDI1MzAxLDI1MzAyLDI1MzA2LDI1MzIyLDI1MzMwLDI1MzMyLDI1MzQwLDI1MzQx''@;'; put 'put ''LDI1MzQ3LDI1MzQ4LDI1MzU0LDI1MzU1LDI1MzU3LDI1MzYwLDI1MzYzLDI1MzY2LDI1MzY4LDI1Mzg1LDI1Mzg2LDI1Mzg5LDI1Mzk3LDI1Mzk4LDI1NDAxLDI1NDA0LDI1NDA5LDI1NDEwLDI1NDExLDI1NDEyLDI1NDE0LDI1NDE4LDI1NDE5LDI1NDIyLDI1NDI2LDI1NDI3LDI1NDI4LDI1''@;'; put 'put ''NDMyLDI1NDM1LDI1NDQ1LDI1NDQ2LDI1NDUyLDI1NDUzLDI1NDU3LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY4LDI1NDY5LDI1NDcxLDI1NDc0LDI1NDc2LDI1NDc5LDI1NDgyLDI1NDg4LDI1NDkyLDI1NDkzLDI1NDk3LDI1NDk4LDI1NTAyLDI1NTA4LDI1NTEwLDI1NTE3LDI1NTE4LDI1NTE5''@;'; put 'put ''LDI1NTMzLDI1NTM3LDI1NTQxLDI1NTQ0LDI1NTUwLDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTY0LDI1NTY4LDI1NTczLDI1NTc4LDI1NTgwLDI1NTg2LDI1NTg3LDI1NTg5LDI1NTkyLDI1NTkzLDI1NjA5LDI1NjEwLDI1NjE2LDI1NjE4LDI1NjIwLDI1NjI0LDI1NjMwLDI1NjMyLDI1''@;'; put 'put ''NjM0LDI1NjM2LDI1NjM3LDI1NjQxLDI1NjQyLDI1NjQ3LDI1NjQ4LDI1NjUzLDI1NjYxLDI1NjYzLDI1Njc1LDI1Njc5LDI1NjgxLDI1NjgyLDI1NjgzLDI1Njg0LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk5LDI1NzA5LDI1NzE1LDI1NzE2LDI1NzIz''@;'; put 'put ''LDI1NzI1LDI1NzMzLDI1NzM1LDI1NzQzLDI1NzQ0LDI1NzQ1LDI1NzUyLDI1NzUzLDI1NzU1LDI1NzU3LDI1NzU5LDI1NzYxLDI1NzYzLDI1NzY2LDI1NzY4LDI1NzcyLDI1Nzc5LDI1Nzg5LDI1NzkwLDI1NzkxLDI1Nzk2LDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA2LDI1ODA4LDI1''@;'; put 'put ''ODA5LDI1ODEzLDI1ODE1LDI1ODI4LDI1ODI5LDI1ODMzLDI1ODM0LDI1ODM3LDI1ODQwLDI1ODQ1LDI1ODQ3LDI1ODUxLDI1ODU1LDI1ODU3LDI1ODYwLDI1ODY0LDI1ODY1LDI1ODY2LDI1ODcxLDI1ODc1LDI1ODc2LDI1ODc4LDI1ODgxLDI1ODgzLDI1ODg2LDI1ODg3LDI1ODkwLDI1ODk0''@;'; put 'put ''LDI1ODk3LDI1OTAyLDI1OTA1LDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIzLDI1OTI3LDI1OTI5LDI1OTM2LDI1OTM4LDI1OTQwLDI1OTUxLDI1OTUyLDI1OTU5LDI1OTYzLDI1OTc4LDI1OTgxLDI1OTg1LDI1OTg5LDI1OTk0LDI2MDAyLDI2MDA1LDI2MDA4LDI2MDEzLDI2MDE2LDI2MDE5LDI2''@;'; put 'put ''MDIyLDI2MDMwLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDQ3LDI2MDUwLDI2MDU2LDI2MDU3LDI2MDYyLDI2MDY0LDI2MDY4LDI2MDcwLDI2MDcyLDI2MDc5LDI2MDk2LDI2MDk4LDI2MTAwLDI2MTAxLDI2MTA1LDI2MTEwLDI2MTExLDI2MTEyLDI2MTE2LDI2MTIwLDI2MTIxLDI2MTI1LDI2MTI5''@;'; put 'put ''LDI2MTMwLDI2MTMzLDI2MTM0LDI2MTQxLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYxLDI2MTYzLDI2MTY5LDI2MTY3LDI2MTc2LDI2MTgxLDI2MTgyLDI2MTg2LDI2MTg4LDI2MTkzLDI2MTkwLDI2''@;'; put 'put ''MTk5LDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA4LDI2MjA5LDI2MzYzLDI2MjE4LDI2MjE5LDI2MjIwLDI2MjM4LDI2MjI3LDI2MjI5LDI2MjM5LDI2MjMxLDI2MjMyLDI2MjMzLDI2MjM1LDI2MjQwLDI2MjM2LDI2MjUxLDI2MjUyLDI2MjUzLDI2MjU2LDI2MjU4LDI2MjY1LDI2MjY2''@;'; put 'put ''LDI2MjY3LDI2MjY4LDI2MjcxLDI2MjcyLDI2Mjc2LDI2Mjg1LDI2Mjg5LDI2MjkwLDI2MjkzLDI2Mjk5LDI2MzAzLDI2MzA0LDI2MzA2LDI2MzA3LDI2MzEyLDI2MzE2LDI2MzE4LDI2MzE5LDI2MzI0LDI2MzMxLDI2MzM1LDI2MzQ0LDI2MzQ3LDI2MzQ4LDI2MzUwLDI2MzYyLDI2MzczLDI2''@;'; put 'put ''Mzc1LDI2MzgyLDI2Mzg3LDI2MzkzLDI2Mzk2LDI2NDAwLDI2NDAyLDI2NDE5LDI2NDMwLDI2NDM3LDI2NDM5LDI2NDQwLDI2NDQ0LDI2NDUyLDI2NDUzLDI2NDYxLDI2NDcwLDI2NDc2LDI2NDc4LDI2NDg0LDI2NDg2LDI2NDkxLDI2NDk3LDI2NTAwLDI2NTEwLDI2NTExLDI2NTEzLDI2NTE1''@;'; put 'put ''LDI2NTE4LDI2NTIwLDI2NTIxLDI2NTIzLDI2NTQ0LDI2NTQ1LDI2NTQ2LDI2NTQ5LDI2NTU1LDI2NTU2LDI2NTU3LDI2NjE3LDI2NTYwLDI2NTYyLDI2NTYzLDI2NTY1LDI2NTY4LDI2NTY5LDI2NTc4LDI2NTgzLDI2NTg1LDI2NTg4LDI2NTkzLDI2NTk4LDI2NjA4LDI2NjEwLDI2NjE0LDI2''@;'; put 'put ''NjE1LDI2NzA2LDI2NjQ0LDI2NjQ5LDI2NjUzLDI2NjU1LDI2NjY0LDI2NjYzLDI2NjY4LDI2NjY5LDI2NjcxLDI2NjcyLDI2NjczLDI2Njc1LDI2NjgzLDI2Njg3LDI2NjkyLDI2NjkzLDI2Njk4LDI2NzAwLDI2NzA5LDI2NzExLDI2NzEyLDI2NzE1LDI2NzMxLDI2NzM0LDI2NzM1LDI2NzM2''@;'; put 'put ''LDI2NzM3LDI2NzM4LDI2NzQxLDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzU0LDI2NzU2LDI2NzU4LDI2NzYwLDI2Nzc0LDI2Nzc2LDI2Nzc4LDI2NzgwLDI2Nzg1LDI2Nzg3LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk4LDI2ODAyLDI2ODExLDI2ODIxLDI2ODI0LDI2ODI4LDI2ODMxLDI2''@;'; put 'put ''ODMyLDI2ODMzLDI2ODM1LDI2ODM4LDI2ODQxLDI2ODQ0LDI2ODQ1LDI2ODUzLDI2ODU2LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODY0LDI2ODY1LDI2ODY5LDI2ODcwLDI2ODc1LDI2ODc2LDI2ODc3LDI2ODg2LDI2ODg5LDI2ODkwLDI2ODk2LDI2ODk3LDI2ODk5LDI2OTAyLDI2OTAz''@;'; put 'put ''LDI2OTI5LDI2OTMxLDI2OTMzLDI2OTM2LDI2OTM5LDI2OTQ2LDI2OTQ5LDI2OTUzLDI2OTU4LDI2OTY3LDI2OTcxLDI2OTc5LDI2OTgwLDI2OTgxLDI2OTgyLDI2OTg0LDI2OTg1LDI2OTg4LDI2OTkyLDI2OTkzLDI2OTk0LDI3MDAyLDI3MDAzLDI3MDA3LDI3MDA4LDI3MDIxLDI3MDI2LDI3''@;'; put 'put ''MDMwLDI3MDMyLDI3MDQxLDI3MDQ1LDI3MDQ2LDI3MDQ4LDI3MDUxLDI3MDUzLDI3MDU1LDI3MDYzLDI3MDY0LDI3MDY2LDI3MDY4LDI3MDc3LDI3MDgwLDI3MDg5LDI3MDk0LDI3MDk1LDI3MTA2LDI3MTA5LDI3MTE4LDI3MTE5LDI3MTIxLDI3MTIzLDI3MTI1LDI3MTM0LDI3MTM2LDI3MTM3''@;'; put 'put ''LDI3MTM5LDI3MTUxLDI3MTUzLDI3MTU3LDI3MTYyLDI3MTY1LDI3MTY4LDI3MTcyLDI3MTc2LDI3MTg0LDI3MTg2LDI3MTg4LDI3MTkxLDI3MTk1LDI3MTk4LDI3MTk5LDI3MjA1LDI3MjA2LDI3MjA5LDI3MjEwLDI3MjE0LDI3MjE2LDI3MjE3LDI3MjE4LDI3MjIxLDI3MjIyLDI3MjI3LDI3''@;'; put 'put ''MjM2LDI3MjM5LDI3MjQyLDI3MjQ5LDI3MjUxLDI3MjYyLDI3MjY1LDI3MjY3LDI3MjcwLDI3MjcxLDI3MjczLDI3Mjc1LDI3MjgxLDI3MjkxLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3MzAxLDI3MzA3LDI3MzExLDI3MzEyLDI3MzEzLDI3MzE2LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzM0LDI3MzM3''@;'; put 'put ''LDI3MzM2LDI3MzQwLDI3MzQ0LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzU2LDI3MzU3LDI3MzY0LDI3MzY3LDI3MzcyLDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzg4LDI3Mzg5LDI3Mzk0LDI3Mzk1LDI3Mzk4LDI3Mzk5LDI3NDAxLDI3NDA3LDI3NDA4LDI3NDA5LDI3NDE1LDI3NDE5LDI3NDIyLDI3''@;'; put 'put ''NDI4LDI3NDMyLDI3NDM1LDI3NDM2LDI3NDM5LDI3NDQ1LDI3NDQ2LDI3NDUxLDI3NDU1LDI3NDYyLDI3NDY2LDI3NDY5LDI3NDc0LDI3NDc4LDI3NDgwLDI3NDg1LDI3NDg4LDI3NDk1LDI3NDk5LDI3NTAyLDI3NTA0LDI3NTA5LDI3NTE3LDI3NTE4LDI3NTIyLDI3NTI1LDI3NTQzLDI3NTQ3''@;'; put 'put ''LDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTYwLDI3NTYxLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY4LDI3NTc2LDI3NTc3LDI3NTgxLDI3NTgyLDI3NTg3LDI3NTg4LDI3NTkzLDI3NTk2LDI3NjA2LDI3NjEwLDI3NjE3LDI3NjE5LDI3NjIyLDI3NjIzLDI3NjMwLDI3NjMzLDI3NjM5LDI3''@;'; put 'put ''NjQxLDI3NjQ3LDI3NjUwLDI3NjUyLDI3NjUzLDI3NjU3LDI3NjYxLDI3NjYyLDI3NjY0LDI3NjY2LDI3NjczLDI3Njc5LDI3Njg2LDI3Njg3LDI3Njg4LDI3NjkyLDI3Njk0LDI3Njk5LDI3NzAxLDI3NzAyLDI3NzA2LDI3NzA3LDI3NzExLDI3NzIyLDI3NzIzLDI3NzI1LDI3NzI3LDI3NzMw''@;'; put 'put ''LDI3NzMyLDI3NzM3LDI3NzM5LDI3NzQwLDI3NzU1LDI3NzU3LDI3NzU5LDI3NzY0LDI3NzY2LDI3NzY4LDI3NzY5LDI3NzcxLDI3NzgxLDI3NzgyLDI3NzgzLDI3Nzg1LDI3Nzk2LDI3Nzk3LDI3Nzk5LDI3ODAwLDI3ODA0LDI3ODA3LDI3ODI0LDI3ODI2LDI3ODI4LDI3ODQyLDI3ODQ2LDI3''@;'; put 'put ''ODUzLDI3ODU1LDI3ODU2LDI3ODU3LDI3ODU4LDI3ODYwLDI3ODYyLDI3ODY2LDI3ODY4LDI3ODcyLDI3ODc5LDI3ODgxLDI3ODgzLDI3ODg0LDI3ODg2LDI3ODkwLDI3ODkyLDI3OTA4LDI3OTExLDI3OTE0LDI3OTE4LDI3OTE5LDI3OTIxLDI3OTIzLDI3OTMwLDI3OTQyLDI3OTQzLDI3OTQ0''@;'; put 'put ''LDI3NzUxLDI3OTUwLDI3OTUxLDI3OTUzLDI3OTYxLDI3OTY0LDI3OTY3LDI3OTkxLDI3OTk4LDI3OTk5LDI4MDAxLDI4MDA1LDI4MDA3LDI4MDE1LDI4MDE2LDI4MDI4LDI4MDM0LDI4MDM5LDI4MDQ5LDI4MDUwLDI4MDUyLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDc0LDI4MDc2LDI4MDg0LDI4''@;'; put 'put ''MDg3LDI4MDg5LDI4MDkzLDI4MDk1LDI4MTAwLDI4MTA0LDI4MTA2LDI4MTEwLDI4MTExLDI4MTE4LDI4MTIzLDI4MTI1LDI4MTI3LDI4MTI4LDI4MTMwLDI4MTMzLDI4MTM3LDI4MTQzLDI4MTQ0LDI4MTQ4LDI4MTUwLDI4MTU2LDI4MTYwLDI4MTY0LDI4MTkwLDI4MTk0LDI4MTk5LDI4MjEw''@;'; put 'put ''LDI4MjE0LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjI4LDI4MjI5LDI4MjMyLDI4MjMzLDI4MjM1LDI4MjM5LDI4MjQxLDI4MjQyLDI4MjQzLDI4MjQ0LDI4MjQ3LDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU4LDI4MjU5LDI4MjY0LDI4Mjc1LDI4MjgzLDI4Mjg1LDI4MzAxLDI4MzA3LDI4MzEzLDI4''@;'; put 'put ''MzIwLDI4MzI3LDI4MzMzLDI4MzM0LDI4MzM3LDI4MzM5LDI4MzQ3LDI4MzUxLDI4MzUyLDI4MzUzLDI4MzU1LDI4MzU5LDI4MzYwLDI4MzYyLDI4MzY1LDI4MzY2LDI4MzY3LDI4Mzk1LDI4Mzk3LDI4Mzk4LDI4NDA5LDI4NDExLDI4NDEzLDI4NDIwLDI4NDI0LDI4NDI2LDI4NDI4LDI4NDI5''@;'; put 'put ''LDI4NDM4LDI4NDQwLDI4NDQyLDI4NDQzLDI4NDU0LDI4NDU3LDI4NDU4LDI4NDYzLDI4NDY0LDI4NDY3LDI4NDcwLDI4NDc1LDI4NDc2LDI4NDYxLDI4NDk1LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA5LDI4NTEwLDI4NTEzLDI4NTE0LDI4NTIwLDI4NTI0LDI4''@;'; put 'put ''NTQxLDI4NTQyLDI4NTQ3LDI4NTUxLDI4NTUyLDI4NTU1LDI4NTU2LDI4NTU3LDI4NTYwLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY2LDI4NTcwLDI4NTc1LDI4NTc2LDI4NTgxLDI4NTgyLDI4NTgzLDI4NTg0LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTk3LDI4NTk4LDI4NjA0LDI4NjEzLDI4NjE1''@;'; put 'put ''LDI4NjE2LDI4NjE4LDI4NjM0LDI4NjM4LDI4NjQ4LDI4NjQ5LDI4NjU2LDI4NjYxLDI4NjY1LDI4NjY4LDI4NjY5LDI4NjcyLDI4Njc3LDI4Njc4LDI4Njc5LDI4Njg1LDI4Njk1LDI4NzA0LDI4NzA3LDI4NzE5LDI4NzI0LDI4NzI3LDI4NzI5LDI4NzMyLDI4NzM5LDI4NzQwLDI4NzQ0LDI4''@;'; put 'put ''NzQ1LDI4NzQ2LDI4NzQ3LDI4NzU2LDI4NzU3LDI4NzY1LDI4NzY2LDI4NzUwLDI4NzcyLDI4NzczLDI4NzgwLDI4NzgyLDI4Nzg5LDI4NzkwLDI4Nzk4LDI4ODAxLDI4ODA1LDI4ODA2LDI4ODIwLDI4ODIxLDI4ODIyLDI4ODIzLDI4ODI0LDI4ODI3LDI4ODM2LDI4ODQzLDI4ODQ4LDI4ODQ5''@;'; put 'put ''LDI4ODUyLDI4ODU1LDI4ODc0LDI4ODgxLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg4LDI4ODkyLDI4OTAwLDI4OTIyLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM5LDI4OTQwLDI4OTQzLDI4OTU4LDI4OTYwLDI4OTcxLDI4OTczLDI4OTc1LDI4OTc2LDI4OTc3LDI4''@;'; put 'put ''OTg0LDI4OTkzLDI4OTk3LDI4OTk4LDI4OTk5LDI5MDAyLDI5MDAzLDI5MDA4LDI5MDEwLDI5MDE1LDI5MDE4LDI5MDIwLDI5MDIyLDI5MDI0LDI5MDMyLDI5MDQ5LDI5MDU2LDI5MDYxLDI5MDYzLDI5MDY4LDI5MDc0LDI5MDgyLDI5MDgzLDI5MDg4LDI5MDkwLDI5MTAzLDI5MTA0LDI5MTA2''@;'; put 'put ''LDI5MTA3LDI5MTE0LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTI0LDI5MTMxLDI5MTMyLDI5MTM5LDI5MTQyLDI5MTQ1LDI5MTQ2LDI5MTQ4LDI5MTc2LDI5MTgyLDI5MTg0LDI5MTkxLDI5MTkyLDI5MTkzLDI5MjAzLDI5MjA3LDI5MjEwLDI5MjEzLDI5MjE1LDI5MjIwLDI5MjI3LDI5MjMxLDI5''@;'; put 'put ''MjM2LDI5MjQwLDI5MjQxLDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUzLDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY3LDI5MjY5LDI5MjcwLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg4LDI5MjkxLDI5Mjk0LDI5Mjk1LDI5Mjk3LDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzEx''@;'; put 'put ''LDI5MzE2LDI5MzIxLDI5MzI1LDI5MzI2LDI5MzMxLDI5MzM5LDI5MzUyLDI5MzU3LDI5MzU4LDI5MzYxLDI5MzY0LDI5Mzc0LDI5Mzc3LDI5MzgzLDI5Mzg1LDI5Mzg4LDI5Mzk3LDI5Mzk4LDI5NDAwLDI5NDA3LDI5NDEzLDI5NDI3LDI5NDI4LDI5NDM0LDI5NDM1LDI5NDM4LDI5NDQyLDI5''@;'; put 'put ''NDQ0LDI5NDQ1LDI5NDQ3LDI5NDUxLDI5NDUzLDI5NDU4LDI5NDU5LDI5NDY0LDI5NDY1LDI5NDcwLDI5NDc0LDI5NDc2LDI5NDc5LDI5NDgwLDI5NDg0LDI5NDg5LDI5NDkwLDI5NDkzLDI5NDk4LDI5NDk5LDI5NTAxLDI5NTA3LDI5NTE3LDI5NTIwLDI5NTIyLDI5NTI2LDI5NTI4LDI5NTMz''@;'; put 'put ''LDI5NTM0LDI5NTM1LDI5NTM2LDI5NTQyLDI5NTQzLDI5NTQ1LDI5NTQ3LDI5NTQ4LDI5NTUwLDI5NTUxLDI5NTUzLDI5NTU5LDI5NTYxLDI5NTY0LDI5NTY4LDI5NTY5LDI5NTcxLDI5NTczLDI5NTc0LDI5NTgyLDI5NTg0LDI5NTg3LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTk2LDI5NTk4LDI5''@;'; put 'put ''NTk5LDI5NjAwLDI5NjAyLDI5NjA1LDI5NjA2LDI5NjEwLDI5NjExLDI5NjEzLDI5NjIxLDI5NjIzLDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMxLDI5NjM3LDI5NjM4LDI5NjQxLDI5NjQzLDI5NjQ0LDI5NjQ3LDI5NjUwLDI5NjUxLDI5NjU0LDI5NjU3LDI5NjYxLDI5NjY1LDI5NjY3LDI5Njcw''@;'; put 'put ''LDI5NjcxLDI5NjczLDI5Njg0LDI5Njg1LDI5Njg3LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkzLDI5Njk1LDI5Njk2LDI5Njk3LDI5NzAwLDI5NzAzLDI5NzA2LDI5NzEzLDI5NzIyLDI5NzIzLDI5NzMyLDI5NzM0LDI5NzM2LDI5NzM3LDI5NzM4LDI5NzM5LDI5NzQwLDI5NzQxLDI5NzQyLDI5''@;'; put 'put ''NzQzLDI5NzQ0LDI5NzQ1LDI5NzUzLDI5NzYwLDI5NzYzLDI5NzY0LDI5NzY2LDI5NzY3LDI5NzcxLDI5NzczLDI5Nzc3LDI5Nzc4LDI5NzgzLDI5Nzg5LDI5Nzk0LDI5Nzk4LDI5Nzk5LDI5ODAwLDI5ODAzLDI5ODA1LDI5ODA2LDI5ODA5LDI5ODEwLDI5ODI0LDI5ODI1LDI5ODI5LDI5ODMw''@;'; put 'put ''LDI5ODMxLDI5ODMzLDI5ODM5LDI5ODQwLDI5ODQxLDI5ODQyLDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUyLDI5ODU1LDI5ODU2LDI5ODU3LDI5ODU5LDI5ODYyLDI5ODY0LDI5ODY1LDI5ODY2LDI5ODY3LDI5ODcwLDI5ODcxLDI5ODczLDI5ODc0LDI5ODc3LDI5ODgxLDI5ODgzLDI5ODg3LDI5''@;'; put 'put ''ODk2LDI5ODk3LDI5OTAwLDI5OTA0LDI5OTA3LDI5OTEyLDI5OTE0LDI5OTE1LDI5OTE4LDI5OTE5LDI5OTI0LDI5OTI4LDI5OTMwLDI5OTMxLDI5OTM1LDI5OTQwLDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTUxLDI5OTU4LDI5OTcwLDI5OTc0LDI5OTc1LDI5OTg0LDI5OTg1LDI5OTg4LDI5OTkx''@;'; put 'put ''LDI5OTkzLDI5OTk0LDI5OTk5LDMwMDA2LDMwMDA5LDMwMDEzLDMwMDE0LDMwMDE1LDMwMDE2LDMwMDE5LDMwMDIzLDMwMDI0LDMwMDMwLDMwMDMyLDMwMDM0LDMwMDM5LDMwMDQ2LDMwMDQ3LDMwMDQ5LDMwMDYzLDMwMDY1LDMwMDczLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMw''@;'; put 'put ''MDgxLDMwMDg1LDMwMDk2LDMwMDk4LDMwMDk5LDMwMTAxLDMwMTA1LDMwMTA4LDMwMTE0LDMwMTE2LDMwMTMyLDMwMTM4LDMwMTQzLDMwMTQ0LDMwMTQ1LDMwMTQ4LDMwMTUwLDMwMTU2LDMwMTU4LDMwMTU5LDMwMTY3LDMwMTcyLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgwLDMwMTgzLDMwMTg4''@;'; put 'put ''LDMwMTkwLDMwMTkxLDMwMTkzLDMwMjAxLDMwMjA4LDMwMjEwLDMwMjExLDMwMjEyLDMwMjE1LDMwMjE2LDMwMjE4LDMwMjIwLDMwMjIzLDMwMjI2LDMwMjI3LDMwMjI5LDMwMjMwLDMwMjMzLDMwMjM1LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQzLDMwMjQ1LDMwMjQ2LDMwMjQ5LDMwMjUzLDMw''@;'; put 'put ''MjU4LDMwMjU5LDMwMjYxLDMwMjY0LDMwMjY1LDMwMjY2LDMwMjY4LDMwMjgyLDMwMjcyLDMwMjczLDMwMjc1LDMwMjc2LDMwMjc3LDMwMjgxLDMwMjgzLDMwMjkzLDMwMjk3LDMwMzAzLDMwMzA4LDMwMzA5LDMwMzE3LDMwMzE4LDMwMzE5LDMwMzIxLDMwMzI0LDMwMzM3LDMwMzQxLDMwMzQ4''@;'; put 'put ''LDMwMzQ5LDMwMzU3LDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY3LDMwMzY4LDMwMzcwLDMwMzcxLDMwMzcyLDMwMzczLDMwMzc0LDMwMzc1LDMwMzc2LDMwMzc4LDMwMzgxLDMwMzk3LDMwNDAxLDMwNDA1LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE0LDMwNDIwLDMwNDI1LDMwNDMyLDMwNDM4LDMw''@;'; put 'put ''NDQwLDMwNDQ0LDMwNDQ4LDMwNDQ5LDMwNDU0LDMwNDU3LDMwNDYwLDMwNDY0LDMwNDcwLDMwNDc0LDMwNDc4LDMwNDgyLDMwNDg0LDMwNDg1LDMwNDg3LDMwNDg5LDMwNDkwLDMwNDkyLDMwNDk4LDMwNTA0LDMwNTA5LDMwNTEwLDMwNTExLDMwNTE2LDMwNTE3LDMwNTE4LDMwNTIxLDMwNTI1''@;'; put 'put ''LDMwNTI2LDMwNTMwLDMwNTMzLDMwNTM0LDMwNTM4LDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTUwLDMwNTUxLDMwNTU2LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTYyLDMwNTY0LDMwNTY3LDMwNTcwLDMwNTcyLDMwNTc2LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTg2LDMwNTg5LDMwNTkyLDMw''@;'; put 'put ''NTk2LDMwNjA0LDMwNjA1LDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE4LDMwNjIzLDMwNjI2LDMwNjMxLDMwNjM0LDMwNjM4LDMwNjM5LDMwNjQxLDMwNjQ1LDMwNjU0LDMwNjU5LDMwNjY1LDMwNjczLDMwNjc0LDMwNjc3LDMwNjgxLDMwNjg2LDMwNjg3LDMwNjg4LDMwNjkyLDMwNjk0LDMwNjk4''@;'; put 'put ''LDMwNzAwLDMwNzA0LDMwNzA1LDMwNzA4LDMwNzEyLDMwNzE1LDMwNzI1LDMwNzI2LDMwNzI5LDMwNzMzLDMwNzM0LDMwNzM3LDMwNzQ5LDMwNzUzLDMwNzU0LDMwNzU1LDMwNzY1LDMwNzY2LDMwNzY4LDMwNzczLDMwNzc1LDMwNzg3LDMwNzg4LDMwNzkxLDMwNzkyLDMwNzk2LDMwNzk4LDMw''@;'; put 'put ''ODAyLDMwODEyLDMwODE0LDMwODE2LDMwODE3LDMwODE5LDMwODIwLDMwODI0LDMwODI2LDMwODMwLDMwODQyLDMwODQ2LDMwODU4LDMwODYzLDMwODY4LDMwODcyLDMwODgxLDMwODc3LDMwODc4LDMwODc5LDMwODg0LDMwODg4LDMwODkyLDMwODkzLDMwODk2LDMwODk3LDMwODk4LDMwODk5''@;'; put 'put ''LDMwOTA3LDMwOTA5LDMwOTExLDMwOTE5LDMwOTIwLDMwOTIxLDMwOTI0LDMwOTI2LDMwOTMwLDMwOTMxLDMwOTMzLDMwOTM0LDMwOTQ4LDMwOTM5LDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTUwLDMwOTU0LDMwOTYyLDMwOTYzLDMwOTc2LDMwOTY2LDMwOTY3LDMwOTcwLDMwOTcxLDMwOTc1LDMw''@;'; put 'put ''OTgyLDMwOTg4LDMwOTkyLDMxMDAyLDMxMDA0LDMxMDA2LDMxMDA3LDMxMDA4LDMxMDEzLDMxMDE1LDMxMDE3LDMxMDIxLDMxMDI1LDMxMDI4LDMxMDI5LDMxMDM1LDMxMDM3LDMxMDM5LDMxMDQ0LDMxMDQ1LDMxMDQ2LDMxMDUwLDMxMDUxLDMxMDU1LDMxMDU3LDMxMDYwLDMxMDY0LDMxMDY3''@;'; put 'put ''LDMxMDY4LDMxMDc5LDMxMDgxLDMxMDgzLDMxMDkwLDMxMDk3LDMxMDk5LDMxMTAwLDMxMTAyLDMxMTE1LDMxMTE2LDMxMTIxLDMxMTIzLDMxMTI0LDMxMTI1LDMxMTI2LDMxMTI4LDMxMTMxLDMxMTMyLDMxMTM3LDMxMTQ0LDMxMTQ1LDMxMTQ3LDMxMTUxLDMxMTUzLDMxMTU2LDMxMTYwLDMx''@;'; put 'put ''MTYzLDMxMTcwLDMxMTcyLDMxMTc1LDMxMTc2LDMxMTc4LDMxMTgzLDMxMTg4LDMxMTkwLDMxMTk0LDMxMTk3LDMxMTk4LDMxMjAwLDMxMjAyLDMxMjA1LDMxMjEwLDMxMjExLDMxMjEzLDMxMjE3LDMxMjI0LDMxMjI4LDMxMjM0LDMxMjM1LDMxMjM5LDMxMjQxLDMxMjQyLDMxMjQ0LDMxMjQ5''@;'; put 'put ''LDMxMjUzLDMxMjU5LDMxMjYyLDMxMjY1LDMxMjcxLDMxMjc1LDMxMjc3LDMxMjc5LDMxMjgwLDMxMjg0LDMxMjg1LDMxMjg4LDMxMjg5LDMxMjkwLDMxMzAwLDMxMzAxLDMxMzAzLDMxMzA0LDMxMzA4LDMxMzE3LDMxMzE4LDMxMzIxLDMxMzI0LDMxMzI1LDMxMzI3LDMxMzI4LDMxMzMzLDMx''@;'; put 'put ''MzM1LDMxMzM4LDMxMzQxLDMxMzQ5LDMxMzUyLDMxMzU4LDMxMzYwLDMxMzYyLDMxMzY1LDMxMzY2LDMxMzcwLDMxMzcxLDMxMzc2LDMxMzc3LDMxMzgwLDMxMzkwLDMxMzkyLDMxMzk1LDMxNDA0LDMxNDExLDMxNDEzLDMxNDE3LDMxNDE5LDMxNDIwLDMxNDMwLDMxNDMzLDMxNDM2LDMxNDM4''@;'; put 'put ''LDMxNDQxLDMxNDUxLDMxNDY0LDMxNDY1LDMxNDY3LDMxNDY4LDMxNDczLDMxNDc2LDMxNDgzLDMxNDg1LDMxNDg2LDMxNDk1LDMxNTA4LDMxNTE5LDMxNTIzLDMxNTI3LDMxNTI5LDMxNTMwLDMxNTMxLDMxNTMzLDMxNTM0LDMxNTM1LDMxNTM2LDMxNTM3LDMxNTQwLDMxNTQ5LDMxNTUxLDMx''@;'; put 'put ''NTUyLDMxNTUzLDMxNTU5LDMxNTY2LDMxNTczLDMxNTg0LDMxNTg4LDMxNTkwLDMxNTkzLDMxNTk0LDMxNTk3LDMxNTk5LDMxNjAyLDMxNjAzLDMxNjA3LDMxNjIwLDMxNjI1LDMxNjMwLDMxNjMyLDMxNjMzLDMxNjM4LDMxNjQzLDMxNjQ2LDMxNjQ4LDMxNjUzLDMxNjYwLDMxNjYzLDMxNjY0''@;'; put 'put ''LDMxNjY2LDMxNjY5LDMxNjcwLDMxNjc0LDMxNjc1LDMxNjc2LDMxNjc3LDMxNjgyLDMxNjg1LDMxNjg4LDMxNjkwLDMxNzAwLDMxNzAyLDMxNzAzLDMxNzA1LDMxNzA2LDMxNzA3LDMxNzIwLDMxNzIyLDMxNzMwLDMxNzMyLDMxNzMzLDMxNzM2LDMxNzM3LDMxNzM4LDMxNzQwLDMxNzQyLDMx''@;'; put 'put ''NzQ1LDMxNzQ2LDMxNzQ3LDMxNzQ4LDMxNzUwLDMxNzUzLDMxNzU1LDMxNzU2LDMxNzU4LDMxNzU5LDMxNzY5LDMxNzcxLDMxNzc2LDMxNzgxLDMxNzgyLDMxNzg0LDMxNzg4LDMxNzkzLDMxNzk1LDMxNzk2LDMxNzk4LDMxODAxLDMxODAyLDMxODE0LDMxODE4LDMxODI5LDMxODI1LDMxODI2''@;'; put 'put ''LDMxODI3LDMxODMzLDMxODM0LDMxODM1LDMxODM2LDMxODM3LDMxODM4LDMxODQxLDMxODQzLDMxODQ3LDMxODQ5LDMxODUzLDMxODU0LDMxODU2LDMxODU4LDMxODY1LDMxODY4LDMxODY5LDMxODc4LDMxODc5LDMxODg3LDMxODkyLDMxOTAyLDMxOTA0LDMxOTEwLDMxOTIwLDMxOTI2LDMx''@;'; put 'put ''OTI3LDMxOTMwLDMxOTMxLDMxOTMyLDMxOTM1LDMxOTQwLDMxOTQzLDMxOTQ0LDMxOTQ1LDMxOTQ5LDMxOTUxLDMxOTU1LDMxOTU2LDMxOTU3LDMxOTU5LDMxOTYxLDMxOTYyLDMxOTY1LDMxOTc0LDMxOTc3LDMxOTc5LDMxOTg5LDMyMDAzLDMyMDA3LDMyMDA4LDMyMDA5LDMyMDE1LDMyMDE3''@;'; put 'put ''LDMyMDE4LDMyMDE5LDMyMDIyLDMyMDI5LDMyMDMwLDMyMDM1LDMyMDM4LDMyMDQyLDMyMDQ1LDMyMDQ5LDMyMDYwLDMyMDYxLDMyMDYyLDMyMDY0LDMyMDY1LDMyMDcxLDMyMDcyLDMyMDc3LDMyMDgxLDMyMDgzLDMyMDg3LDMyMDg5LDMyMDkwLDMyMDkyLDMyMDkzLDMyMTAxLDMyMTAzLDMy''@;'; put 'put ''MTA2LDMyMTEyLDMyMTIwLDMyMTIyLDMyMTIzLDMyMTI3LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMzLDMyMTM0LDMyMTM2LDMyMTM5LDMyMTQwLDMyMTQxLDMyMTQ1LDMyMTUwLDMyMTUxLDMyMTU3LDMyMTU4LDMyMTY2LDMyMTY3LDMyMTcwLDMyMTc5LDMyMTgyLDMyMTgzLDMyMTg1LDMyMTk0''@;'; put 'put ''LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMjA0LDMyMjA1LDMyMjA2LDMyMjE1LDMyMjE3LDMyMjU2LDMyMjI2LDMyMjI5LDMyMjMwLDMyMjM0LDMyMjM1LDMyMjM3LDMyMjQxLDMyMjQ1LDMyMjQ2LDMyMjQ5LDMyMjUwLDMyMjY0LDMyMjcyLDMyMjczLDMyMjc3LDMyMjc5LDMyMjg0LDMy''@;'; put 'put ''Mjg1LDMyMjg4LDMyMjk1LDMyMjk2LDMyMzAwLDMyMzAxLDMyMzAzLDMyMzA3LDMyMzEwLDMyMzE5LDMyMzI0LDMyMzI1LDMyMzI3LDMyMzM0LDMyMzM2LDMyMzM4LDMyMzQ0LDMyMzUxLDMyMzUzLDMyMzU0LDMyMzU3LDMyMzYzLDMyMzY2LDMyMzY3LDMyMzcxLDMyMzc2LDMyMzgyLDMyMzg1''@;'; put 'put ''LDMyMzkwLDMyMzkxLDMyMzk0LDMyMzk3LDMyNDAxLDMyNDA1LDMyNDA4LDMyNDEwLDMyNDEzLDMyNDE0LDMyNTcyLDMyNTcxLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc5LDMyNTgwLDMyNTgzLDMyNTkxLDMyNTk0LDMyNTk1LDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA5LDMyNjExLDMyNjEyLDMy''@;'; put 'put ''NjEzLDMyNjE0LDMyNjIxLDMyNjI1LDMyNjM3LDMyNjM4LDMyNjM5LDMyNjQwLDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMyNjU3LDMyNjYyLDMyNjYzLDMyNjY4LDMyNjczLDMyNjc0LDMyNjc4LDMyNjgyLDMyNjg1LDMyNjkyLDMyNzAwLDMyNzAzLDMyNzA0LDMyNzA3LDMyNzEyLDMyNzE4''@;'; put 'put ''LDMyNzE5LDMyNzMxLDMyNzM1LDMyNzM5LDMyNzQxLDMyNzQ0LDMyNzQ4LDMyNzUwLDMyNzUxLDMyNzU0LDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3LDMyNzc1LDMyNzc2LDMyNzc4LDMyNzgxLDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzg4LDMyNzkwLDMyNzk3LDMyNzk4LDMyNzk5LDMy''@;'; put 'put ''ODAwLDMyODA0LDMyODA2LDMyODEyLDMyODE0LDMyODE2LDMyODIwLDMyODIxLDMyODIzLDMyODI1LDMyODI2LDMyODI4LDMyODMwLDMyODMyLDMyODM2LDMyODY0LDMyODY4LDMyODcwLDMyODc3LDMyODgxLDMyODg1LDMyODk3LDMyOTA0LDMyOTEwLDMyOTI0LDMyOTI2LDMyOTM0LDMyOTM1''@;'; put 'put ''LDMyOTM5LDMyOTUyLDMyOTUzLDMyOTY4LDMyOTczLDMyOTc1LDMyOTc4LDMyOTgwLDMyOTgxLDMyOTgzLDMyOTg0LDMyOTkyLDMzMDA1LDMzMDA2LDMzMDA4LDMzMDEwLDMzMDExLDMzMDE0LDMzMDE3LDMzMDE4LDMzMDIyLDMzMDI3LDMzMDM1LDMzMDQ2LDMzMDQ3LDMzMDQ4LDMzMDUyLDMz''@;'; put 'put ''MDU0LDMzMDU2LDMzMDYwLDMzMDYzLDMzMDY4LDMzMDcyLDMzMDc3LDMzMDgyLDMzMDg0LDMzMDkzLDMzMDk1LDMzMDk4LDMzMTAwLDMzMTA2LDMzMTExLDMzMTIwLDMzMTIxLDMzMTI3LDMzMTI4LDMzMTI5LDMzMTMzLDMzMTM1LDMzMTQzLDMzMTUzLDMzMTY4LDMzMTU2LDMzMTU3LDMzMTU4''@;'; put 'put ''LDMzMTYzLDMzMTY2LDMzMTc0LDMzMTc2LDMzMTc5LDMzMTgyLDMzMTg2LDMzMTk4LDMzMjAyLDMzMjA0LDMzMjExLDMzMjI3LDMzMjE5LDMzMjIxLDMzMjI2LDMzMjMwLDMzMjMxLDMzMjM3LDMzMjM5LDMzMjQzLDMzMjQ1LDMzMjQ2LDMzMjQ5LDMzMjUyLDMzMjU5LDMzMjYwLDMzMjY0LDMz''@;'; put 'put ''MjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcyLDMzMjczLDMzMjc3LDMzMjc5LDMzMjgwLDMzMjgzLDMzMjk1LDMzMjk5LDMzMzAwLDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEzLDMzMzE0LDMzMzIwLDMzMzMwLDMzMzMyLDMzMzM4LDMzMzQ3LDMzMzQ4LDMzMzQ5LDMzMzUwLDMzMzU1LDMzMzU4''@;'; put 'put ''LDMzMzU5LDMzMzYxLDMzMzY2LDMzMzcyLDMzMzc2LDMzMzc5LDMzMzgzLDMzMzg5LDMzMzk2LDMzNDAzLDMzNDA1LDMzNDA3LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEyLDMzNDE1LDMzNDE3LDMzNDE4LDMzNDIyLDMzNDI1LDMzNDI4LDMzNDMwLDMzNDMyLDMzNDM0LDMzNDM1LDMzNDQwLDMz''@;'; put 'put ''NDQxLDMzNDQzLDMzNDQ0LDMzNDQ3LDMzNDQ4LDMzNDQ5LDMzNDUwLDMzNDU0LDMzNDU2LDMzNDU4LDMzNDYwLDMzNDYzLDMzNDY2LDMzNDY4LDMzNDcwLDMzNDcxLDMzNDc4LDMzNDg4LDMzNDkzLDMzNDk4LDMzNTA0LDMzNTA2LDMzNTA4LDMzNTEyLDMzNTE0LDMzNTE3LDMzNTE5LDMzNTI2''@;'; put 'put ''LDMzNTI3LDMzNTMzLDMzNTM0LDMzNTM2LDMzNTM3LDMzNTQzLDMzNTQ0LDMzNTQ2LDMzNTQ3LDMzNjIwLDMzNTYzLDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY5LDMzNTcwLDMzNTgwLDMzNTgxLDMzNTgyLDMzNTg0LDMzNTg3LDMzNTkxLDMzNTk0LDMzNTk2LDMzNTk3LDMzNjAyLDMzNjAzLDMz''@;'; put 'put ''NjA0LDMzNjA3LDMzNjEzLDMzNjE0LDMzNjE3LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjQ4LDMzNjU2LDMzNjYxLDMzNjYzLDMzNjY0LDMzNjY2LDMzNjY4LDMzNjcwLDMzNjc3LDMzNjgyLDMzNjg0LDMzNjg1LDMzNjg4LDMzNjg5LDMzNjkxLDMzNjkyLDMzNjkzLDMzNzAyLDMzNzAzLDMzNzA1''@;'; put 'put ''LDMzNzA4LDMzNzI2LDMzNzI3LDMzNzI4LDMzNzM1LDMzNzM3LDMzNzQzLDMzNzQ0LDMzNzQ1LDMzNzQ4LDMzNzU3LDMzNjE5LDMzNzY4LDMzNzcwLDMzNzgyLDMzNzg0LDMzNzg1LDMzNzg4LDMzNzkzLDMzNzk4LDMzODAyLDMzODA3LDMzODA5LDMzODEzLDMzODE3LDMzNzA5LDMzODM5LDMz''@;'; put 'put ''ODQ5LDMzODYxLDMzODYzLDMzODY0LDMzODY2LDMzODY5LDMzODcxLDMzODczLDMzODc0LDMzODc4LDMzODgwLDMzODgxLDMzODgyLDMzODg0LDMzODg4LDMzODkyLDMzODkzLDMzODk1LDMzODk4LDMzOTA0LDMzOTA3LDMzOTA4LDMzOTEwLDMzOTEyLDMzOTE2LDMzOTE3LDMzOTIxLDMzOTI1''@;'; put 'put ''LDMzOTM4LDMzOTM5LDMzOTQxLDMzOTUwLDMzOTU4LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTY3LDMzOTY5LDMzOTcyLDMzOTc4LDMzOTgxLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTkxLDMzOTkyLDMzOTk2LDMzOTk5LDM0MDAzLDM0MDEyLDM0MDIzLDM0MDI2LDM0MDMxLDM0MDMyLDM0MDMzLDM0''@;'; put 'put ''MDM0LDM0MDM5LDM0MDk4LDM0MDQyLDM0MDQzLDM0MDQ1LDM0MDUwLDM0MDUxLDM0MDU1LDM0MDYwLDM0MDYyLDM0MDY0LDM0MDc2LDM0MDc4LDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0MDg3LDM0MDkwLDM0MDkxLDM0MDk1LDM0MDk5LDM0MTAwLDM0MTAyLDM0MTExLDM0MTE4LDM0MTI3''@;'; put 'put ''LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTM0LDM0MTM3LDM0MTQwLDM0MTQxLDM0MTQyLDM0MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ4LDM0MTU1LDM0MTU5LDM0MTY5LDM0MTcwLDM0MTcxLDM0MTczLDM0MTc1LDM0MTc3LDM0MTgxLDM0MTgyLDM0MTg1LDM0MTg3LDM0MTg4LDM0''@;'; put 'put ''MTkxLDM0MTk1LDM0MjAwLDM0MjA1LDM0MjA3LDM0MjA4LDM0MjEwLDM0MjEzLDM0MjE1LDM0MjI4LDM0MjMwLDM0MjMxLDM0MjMyLDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQyLDM0MjQ3LDM0MjUwLDM0MjUxLDM0MjU0LDM0MjIxLDM0MjY0LDM0MjY2LDM0MjcxLDM0MjcyLDM0Mjc4''@;'; put 'put ''LDM0MjgwLDM0Mjg1LDM0MjkxLDM0Mjk0LDM0MzAwLDM0MzAzLDM0MzA0LDM0MzA4LDM0MzA5LDM0MzE3LDM0MzE4LDM0MzIwLDM0MzIxLDM0MzIyLDM0MzI4LDM0MzI5LDM0MzMxLDM0MzM0LDM0MzM3LDM0MzQzLDM0MzQ1LDM0MzU4LDM0MzYwLDM0MzYyLDM0MzY0LDM0MzY1LDM0MzY4LDM0''@;'; put 'put ''MzcwLDM0Mzc0LDM0Mzg2LDM0Mzg3LDM0MzkwLDM0MzkxLDM0MzkyLDM0MzkzLDM0Mzk3LDM0NDAwLDM0NDAxLDM0NDAyLDM0NDAzLDM0NDA0LDM0NDA5LDM0NDEyLDM0NDE1LDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI2LDM0NDQ1LDM0NDQ5LDM0NDU0LDM0NDU2LDM0NDU4LDM0NDYwLDM0NDY1''@;'; put 'put ''LDM0NDcwLDM0NDcxLDM0NDcyLDM0NDc3LDM0NDgxLDM0NDgzLDM0NDg0LDM0NDg1LDM0NDg3LDM0NDg4LDM0NDg5LDM0NDk1LDM0NDk2LDM0NDk3LDM0NDk5LDM0NTAxLDM0NTEzLDM0NTE0LDM0NTE3LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI4LDM0NTMxLDM0NTMzLDM0NTM1LDM0NDQwLDM0''@;'; put 'put ''NTU0LDM0NTU2LDM0NTU3LDM0NTY0LDM0NTY1LDM0NTY3LDM0NTcxLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc5LDM0NTgwLDM0NTg1LDM0NTkwLDM0NTkxLDM0NTkzLDM0NTk1LDM0NjAwLDM0NjA2LDM0NjA3LDM0NjA5LDM0NjEwLDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjIyLDM0NjI0''@;'; put 'put ''LDM0NjI3LDM0NjI5LDM0NjM3LDM0NjQ4LDM0NjUzLDM0NjU3LDM0NjYwLDM0NjYxLDM0NjcxLDM0NjczLDM0Njc0LDM0NjgzLDM0NjkxLDM0NjkyLDM0NjkzLDM0Njk0LDM0Njk1LDM0Njk2LDM0Njk3LDM0Njk5LDM0NzAwLDM0NzA0LDM0NzA3LDM0NzA5LDM0NzExLDM0NzEyLDM0NzEzLDM0''@;'; put 'put ''NzE4LDM0NzIwLDM0NzIzLDM0NzI3LDM0NzMyLDM0NzMzLDM0NzM0LDM0NzM3LDM0NzQxLDM0NzUwLDM0NzUxLDM0NzUzLDM0NzYwLDM0NzYxLDM0NzYyLDM0NzY2LDM0NzczLDM0Nzc0LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgzLDM0Nzg2LDM0Nzg3LDM0Nzg4LDM0Nzk0LDM0Nzk1LDM0Nzk3''@;'; put 'put ''LDM0ODAxLDM0ODAzLDM0ODA4LDM0ODEwLDM0ODE1LDM0ODE3LDM0ODE5LDM0ODIyLDM0ODI1LDM0ODI2LDM0ODI3LDM0ODMyLDM0ODQxLDM0ODM0LDM0ODM1LDM0ODM2LDM0ODQwLDM0ODQyLDM0ODQzLDM0ODQ0LDM0ODQ2LDM0ODQ3LDM0ODU2LDM0ODYxLDM0ODYyLDM0ODY0LDM0ODY2LDM0''@;'; put 'put ''ODY5LDM0ODc0LDM0ODc2LDM0ODgxLDM0ODgzLDM0ODg1LDM0ODg4LDM0ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk3LDM0OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA4LDM0OTExLDM0OTEyLDM0OTE2LDM0OTIxLDM0OTI5LDM0OTM3LDM0OTM5LDM0OTQ0LDM0OTY4LDM0OTcwLDM0OTcx''@;'; put 'put ''LDM0OTcyLDM0OTc1LDM0OTc2LDM0OTg0LDM0OTg2LDM1MDAyLDM1MDA1LDM1MDA2LDM1MDA4LDM1MDE4LDM1MDE5LDM1MDIwLDM1MDIxLDM1MDIyLDM1MDI1LDM1MDI2LDM1MDI3LDM1MDM1LDM1MDM4LDM1MDQ3LDM1MDU1LDM1MDU2LDM1MDU3LDM1MDYxLDM1MDYzLDM1MDczLDM1MDc4LDM1''@;'; put 'put ''MDg1LDM1MDg2LDM1MDg3LDM1MDkzLDM1MDk0LDM1MDk2LDM1MDk3LDM1MDk4LDM1MTAwLDM1MTA0LDM1MTEwLDM1MTExLDM1MTEyLDM1MTIwLDM1MTIxLDM1MTIyLDM1MTI1LDM1MTI5LDM1MTMwLDM1MTM0LDM1MTM2LDM1MTM4LDM1MTQxLDM1MTQyLDM1MTQ1LDM1MTUxLDM1MTU0LDM1MTU5''@;'; put 'put ''LDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY5LDM1MTcwLDM1MTcxLDM1MTc5LDM1MTgyLDM1MTg0LDM1MTg3LDM1MTg5LDM1MTk0LDM1MTk1LDM1MTk2LDM1MTk3LDM1MjA5LDM1MjEzLDM1MjE2LDM1MjIwLDM1MjIxLDM1MjI3LDM1MjI4LDM1MjMxLDM1MjMyLDM1MjM3LDM1MjQ4LDM1MjUyLDM1''@;'; put 'put ''MjUzLDM1MjU0LDM1MjU1LDM1MjYwLDM1Mjg0LDM1Mjg1LDM1Mjg2LDM1Mjg3LDM1Mjg4LDM1MzAxLDM1MzA1LDM1MzA3LDM1MzA5LDM1MzEzLDM1MzE1LDM1MzE4LDM1MzIxLDM1MzI1LDM1MzI3LDM1MzMyLDM1MzMzLDM1MzM1LDM1MzQzLDM1MzQ1LDM1MzQ2LDM1MzQ4LDM1MzQ5LDM1MzU4''@;'; put 'put ''LDM1MzYwLDM1MzYyLDM1MzY0LDM1MzY2LDM1MzcxLDM1MzcyLDM1Mzc1LDM1MzgxLDM1MzgzLDM1Mzg5LDM1MzkwLDM1MzkyLDM1Mzk1LDM1Mzk3LDM1Mzk5LDM1NDAxLDM1NDA1LDM1NDA2LDM1NDExLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDIwLDM1NDIxLDM1NDI1LDM1NDI5LDM1NDMxLDM1''@;'; put 'put ''NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ5LDM1NDUwLDM1NDUxLDM1NDU0LDM1NDU1LDM1NDU2LDM1NDU5LDM1NDYyLDM1NDY3LDM1NDcxLDM1NDcyLDM1NDc0LDM1NDc4LDM1NDc5LDM1NDgxLDM1NDg3LDM1NDk1LDM1NDk3LDM1NTAyLDM1NTAzLDM1NTA3LDM1NTEwLDM1NTExLDM1NTE1LDM1NTE4''@;'; put 'put ''LDM1NTIzLDM1NTI2LDM1NTI4LDM1NTI5LDM1NTMwLDM1NTM3LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQzLDM1NTQ5LDM1NTUxLDM1NTY0LDM1NTY4LDM1NTcyLDM1NTczLDM1NTc0LDM1NTgwLDM1NTgzLDM1NTg5LDM1NTkwLDM1NTk1LDM1NjAxLDM1NjEyLDM1NjE0LDM1NjE1LDM1NTk0LDM1''@;'; put 'put ''NjI5LDM1NjMyLDM1NjM5LDM1NjQ0LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDM1NjU0LDM1NjU2LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjczLDM1NjYxLDM1Njc4LDM1NjgzLDM1NjkzLDM1NzAyLDM1NzA0LDM1NzA1LDM1NzA4LDM1NzEwLDM1NzEzLDM1NzE2LDM1NzE3LDM1NzIzLDM1NzI1''@;'; put 'put ''LDM1NzI3LDM1NzMyLDM1NzMzLDM1NzQwLDM1NzQyLDM1NzQzLDM1ODk2LDM1ODk3LDM1OTAxLDM1OTAyLDM1OTA5LDM1OTExLDM1OTEzLDM1OTE1LDM1OTE5LDM1OTIxLDM1OTIzLDM1OTI0LDM1OTI3LDM1OTI4LDM1OTMxLDM1OTMzLDM1OTI5LDM1OTM5LDM1OTQwLDM1OTQyLDM1OTQ0LDM1''@;'; put 'put ''OTQ1LDM1OTQ5LDM1OTU1LDM1OTU3LDM1OTU4LDM1OTYzLDM1OTY2LDM1OTc0LDM1OTc1LDM1OTc5LDM1OTg0LDM1OTg2LDM1OTg3LDM1OTkzLDM1OTk1LDM1OTk2LDM2MDA0LDM2MDI1LDM2MDI2LDM2MDM3LDM2MDM4LDM2MDQxLDM2MDQzLDM2MDQ3LDM2MDU0LDM2MDUzLDM2MDU3LDM2MDYx''@;'; put 'put ''LDM2MDY1LDM2MDcyLDM2MDc2LDM2MDc5LDM2MDgwLDM2MDgyLDM2MDg1LDM2MDg3LDM2MDg4LDM2MDk0LDM2MDk1LDM2MDk3LDM2MDk5LDM2MTA1LDM2MTE0LDM2MTE5LDM2MTIzLDM2MTk3LDM2MjAxLDM2MjA0LDM2MjA2LDM2MjIzLDM2MjI2LDM2MjI4LDM2MjMyLDM2MjM3LDM2MjQwLDM2''@;'; put 'put ''MjQxLDM2MjQ1LDM2MjU0LDM2MjU1LDM2MjU2LDM2MjYyLDM2MjY3LDM2MjY4LDM2MjcxLDM2Mjc0LDM2Mjc3LDM2Mjc5LDM2MjgxLDM2MjgzLDM2Mjg4LDM2MjkzLDM2Mjk0LDM2Mjk1LDM2Mjk2LDM2Mjk4LDM2MzAyLDM2MzA1LDM2MzA4LDM2MzA5LDM2MzExLDM2MzEzLDM2MzI0LDM2MzI1''@;'; put 'put ''LDM2MzI3LDM2MzMyLDM2MzM2LDM2Mjg0LDM2MzM3LDM2MzM4LDM2MzQwLDM2MzQ5LDM2MzUzLDM2MzU2LDM2MzU3LDM2MzU4LDM2MzYzLDM2MzY5LDM2MzcyLDM2Mzc0LDM2Mzg0LDM2Mzg1LDM2Mzg2LDM2Mzg3LDM2MzkwLDM2MzkxLDM2NDAxLDM2NDAzLDM2NDA2LDM2NDA3LDM2NDA4LDM2''@;'; put 'put ''NDA5LDM2NDEzLDM2NDE2LDM2NDE3LDM2NDI3LDM2NDI5LDM2NDMwLDM2NDMxLDM2NDM2LDM2NDQzLDM2NDQ0LDM2NDQ1LDM2NDQ2LDM2NDQ5LDM2NDUwLDM2NDU3LDM2NDYwLDM2NDYxLDM2NDYzLDM2NDY0LDM2NDY1LDM2NDczLDM2NDc0LDM2NDc1LDM2NDgyLDM2NDgzLDM2NDg5LDM2NDk2''@;'; put 'put ''LDM2NDk4LDM2NTAxLDM2NTA2LDM2NTA3LDM2NTA5LDM2NTEwLDM2NTE0LDM2NTE5LDM2NTIxLDM2NTI1LDM2NTI2LDM2NTMxLDM2NTMzLDM2NTM4LDM2NTM5LDM2NTQ0LDM2NTQ1LDM2NTQ3LDM2NTQ4LDM2NTUxLDM2NTU5LDM2NTYxLDM2NTY0LDM2NTcyLDM2NTg0LDM2NTkwLDM2NTkyLDM2''@;'; put 'put ''NTkzLDM2NTk5LDM2NjAxLDM2NjAyLDM2NTg5LDM2NjA4LDM2NjEwLDM2NjE1LDM2NjE2LDM2NjIzLDM2NjI0LDM2NjMwLDM2NjMxLDM2NjMyLDM2NjM4LDM2NjQwLDM2NjQxLDM2NjQzLDM2NjQ1LDM2NjQ3LDM2NjQ4LDM2NjUyLDM2NjUzLDM2NjU0LDM2NjYwLDM2NjYxLDM2NjYyLDM2NjYz''@;'; put 'put ''LDM2NjY2LDM2NjcyLDM2NjczLDM2Njc1LDM2Njc5LDM2Njg3LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk2LDM2NzAxLDM2NzAyLDM2NzA5LDM2NzY1LDM2NzY4LDM2NzY5LDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzg5LDM2NzkwLDM2NzkyLDM2Nzk4LDM2ODAwLDM2ODAxLDM2''@;'; put 'put ''ODA2LDM2ODEwLDM2ODExLDM2ODEzLDM2ODE2LDM2ODE4LDM2ODE5LDM2ODIxLDM2ODMyLDM2ODM1LDM2ODM2LDM2ODQwLDM2ODQ2LDM2ODQ5LDM2ODUzLDM2ODU0LDM2ODU5LDM2ODYyLDM2ODY2LDM2ODY4LDM2ODcyLDM2ODc2LDM2ODg4LDM2ODkxLDM2OTA0LDM2OTA1LDM2OTExLDM2OTA2''@;'; put 'put ''LDM2OTA4LDM2OTA5LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTI3LDM2OTMxLDM2OTMyLDM2OTQwLDM2OTU1LDM2OTU3LDM2OTYyLDM2OTY2LDM2OTY3LDM2OTcyLDM2OTc2LDM2OTgwLDM2OTg1LDM2OTk3LDM3ZTMsMzcwMDMsMzcwMDQsMzcwMDYsMzcwMDgsMzcwMTMsMzcwMTUsMzcwMTYsMzcw''@;'; put 'put ''MTcsMzcwMTksMzcwMjQsMzcwMjUsMzcwMjYsMzcwMjksMzcwNDAsMzcwNDIsMzcwNDMsMzcwNDQsMzcwNDYsMzcwNTMsMzcwNjgsMzcwNTQsMzcwNTksMzcwNjAsMzcwNjEsMzcwNjMsMzcwNjQsMzcwNzcsMzcwNzksMzcwODAsMzcwODEsMzcwODQsMzcwODUsMzcwODcsMzcwOTMsMzcwNzQs''@;'; put 'put ''MzcxMTAsMzcwOTksMzcxMDMsMzcxMDQsMzcxMDgsMzcxMTgsMzcxMTksMzcxMjAsMzcxMjQsMzcxMjUsMzcxMjYsMzcxMjgsMzcxMzMsMzcxMzYsMzcxNDAsMzcxNDIsMzcxNDMsMzcxNDQsMzcxNDYsMzcxNDgsMzcxNTAsMzcxNTIsMzcxNTcsMzcxNTQsMzcxNTUsMzcxNTksMzcxNjEsMzcx''@;'; put 'put ''NjYsMzcxNjcsMzcxNjksMzcxNzIsMzcxNzQsMzcxNzUsMzcxNzcsMzcxNzgsMzcxODAsMzcxODEsMzcxODcsMzcxOTEsMzcxOTIsMzcxOTksMzcyMDMsMzcyMDcsMzcyMDksMzcyMTAsMzcyMTEsMzcyMTcsMzcyMjAsMzcyMjMsMzcyMjksMzcyMzYsMzcyNDEsMzcyNDIsMzcyNDMsMzcyNDks''@;'; put 'put ''MzcyNTEsMzcyNTMsMzcyNTQsMzcyNTgsMzcyNjIsMzcyNjUsMzcyNjcsMzcyNjgsMzcyNjksMzcyNzIsMzcyNzgsMzcyODEsMzcyODYsMzcyODgsMzcyOTIsMzcyOTMsMzcyOTQsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDcsMzczMDgsMzczMDksMzczMTEsMzczMTQsMzcz''@;'; put 'put ''MTUsMzczMTcsMzczMzEsMzczMzIsMzczMzUsMzczMzcsMzczMzgsMzczNDIsMzczNDgsMzczNDksMzczNTMsMzczNTQsMzczNTYsMzczNTcsMzczNTgsMzczNTksMzczNjAsMzczNjEsMzczNjcsMzczNjksMzczNzEsMzczNzMsMzczNzYsMzczNzcsMzczODAsMzczODEsMzczODIsMzczODMs''@;'; put 'put ''MzczODUsMzczODYsMzczODgsMzczOTIsMzczOTQsMzczOTUsMzczOTgsMzc0MDAsMzc0MDQsMzc0MDUsMzc0MTEsMzc0MTIsMzc0MTMsMzc0MTQsMzc0MTYsMzc0MjIsMzc0MjMsMzc0MjQsMzc0MjcsMzc0MjksMzc0MzAsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzYsMzc0MzgsMzc0NDAsMzc0''@;'; put 'put ''NDIsMzc0NDMsMzc0NDYsMzc0NDcsMzc0NTAsMzc0NTMsMzc0NTQsMzc0NTUsMzc0NTcsMzc0NjQsMzc0NjUsMzc0NjgsMzc0NjksMzc0NzIsMzc0NzMsMzc0NzcsMzc0NzksMzc0ODAsMzc0ODEsMzc0ODYsMzc0ODcsMzc0ODgsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTks''@;'; put 'put ''Mzc1MDAsMzc1MDEsMzc1MDMsMzc1MTIsMzc1MTMsMzc1MTQsMzc1MTcsMzc1MTgsMzc1MjIsMzc1MjcsMzc1MjksMzc1MzUsMzc1MzYsMzc1NDAsMzc1NDEsMzc1NDMsMzc1NDQsMzc1NDcsMzc1NTEsMzc1NTQsMzc1NTgsMzc1NjAsMzc1NjIsMzc1NjMsMzc1NjQsMzc1NjUsMzc1NjcsMzc1''@;'; put 'put ''NjgsMzc1NjksMzc1NzAsMzc1NzEsMzc1NzMsMzc1NzQsMzc1NzUsMzc1NzYsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1ODQsMzc1ODcsMzc1ODksMzc1OTEsMzc1OTIsMzc1OTMsMzc1OTYsMzc1OTcsMzc1OTksMzc2MDAsMzc2MDEsMzc2MDMsMzc2MDUsMzc2MDcsMzc2MDgsMzc2MTIs''@;'; put 'put ''Mzc2MTQsMzc2MTYsMzc2MjUsMzc2MjcsMzc2MzEsMzc2MzIsMzc2MzQsMzc2NDAsMzc2NDUsMzc2NDksMzc2NTIsMzc2NTMsMzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2NjUsMzc2NjgsMzc2NjksMzc2NzEsMzc2NzMsMzc2NzQsMzc2ODMsMzc2ODQsMzc2ODYsMzc2ODcsMzc3MDMsMzc3''@;'; put 'put ''MDQsMzc3MDUsMzc3MTIsMzc3MTMsMzc3MTQsMzc3MTcsMzc3MTksMzc3MjAsMzc3MjIsMzc3MjYsMzc3MzIsMzc3MzMsMzc3MzUsMzc3MzcsMzc3MzgsMzc3NDEsMzc3NDMsMzc3NDQsMzc3NDUsMzc3NDcsMzc3NDgsMzc3NTAsMzc3NTQsMzc3NTcsMzc3NTksMzc3NjAsMzc3NjEsMzc3NjIs''@;'; put 'put ''Mzc3NjgsMzc3NzAsMzc3NzEsMzc3NzMsMzc3NzUsMzc3NzgsMzc3ODEsMzc3ODQsMzc3ODcsMzc3OTAsMzc3OTMsMzc3OTUsMzc3OTYsMzc3OTgsMzc4MDAsMzc4MDMsMzc4MTIsMzc4MTMsMzc4MTQsMzc4MTgsMzc4MDEsMzc4MjUsMzc4MjgsMzc4MjksMzc4MzAsMzc4MzEsMzc4MzMsMzc4''@;'; put 'put ''MzQsMzc4MzUsMzc4MzYsMzc4MzcsMzc4NDMsMzc4NDksMzc4NTIsMzc4NTQsMzc4NTUsMzc4NTgsMzc4NjIsMzc4NjMsMzc4ODEsMzc4NzksMzc4ODAsMzc4ODIsMzc4ODMsMzc4ODUsMzc4ODksMzc4OTAsMzc4OTIsMzc4OTYsMzc4OTcsMzc5MDEsMzc5MDIsMzc5MDMsMzc5MDksMzc5MTAs''@;'; put 'put ''Mzc5MTEsMzc5MTksMzc5MzQsMzc5MzUsMzc5MzcsMzc5MzgsMzc5MzksMzc5NDAsMzc5NDcsMzc5NTEsMzc5NDksMzc5NTUsMzc5NTcsMzc5NjAsMzc5NjIsMzc5NjQsMzc5NzMsMzc5NzcsMzc5ODAsMzc5ODMsMzc5ODUsMzc5ODcsMzc5OTIsMzc5OTUsMzc5OTcsMzc5OTgsMzc5OTksMzgw''@;'; put 'put ''MDEsMzgwMDIsMzgwMjAsMzgwMTksMzgyNjQsMzgyNjUsMzgyNzAsMzgyNzYsMzgyODAsMzgyODQsMzgyODUsMzgyODYsMzgzMDEsMzgzMDIsMzgzMDMsMzgzMDUsMzgzMTAsMzgzMTMsMzgzMTUsMzgzMTYsMzgzMjQsMzgzMjYsMzgzMzAsMzgzMzMsMzgzMzUsMzgzNDIsMzgzNDQsMzgzNDUs''@;'; put 'put ''MzgzNDcsMzgzNTIsMzgzNTMsMzgzNTQsMzgzNTUsMzgzNjEsMzgzNjIsMzgzNjUsMzgzNjYsMzgzNjcsMzgzNjgsMzgzNzIsMzgzNzQsMzg0MjksMzg0MzAsMzg0MzQsMzg0MzYsMzg0MzcsMzg0MzgsMzg0NDQsMzg0NDksMzg0NTEsMzg0NTUsMzg0NTYsMzg0NTcsMzg0NTgsMzg0NjAsMzg0''@;'; put 'put ''NjEsMzg0NjUsMzg0ODIsMzg0ODQsMzg0ODYsMzg0ODcsMzg0ODgsMzg0OTcsMzg1MTAsMzg1MTYsMzg1MjMsMzg1MjQsMzg1MjYsMzg1MjcsMzg1MjksMzg1MzAsMzg1MzEsMzg1MzIsMzg1MzcsMzg1NDUsMzg1NTAsMzg1NTQsMzg1NTcsMzg1NTksMzg1NjQsMzg1NjUsMzg1NjYsMzg1Njks''@;'; put 'put ''Mzg1NzQsMzg1NzUsMzg1NzksMzg1ODYsMzg2MDIsMzg2MTAsMjM5ODYsMzg2MTYsMzg2MTgsMzg2MjEsMzg2MjIsMzg2MjMsMzg2MzMsMzg2MzksMzg2NDEsMzg2NTAsMzg2NTgsMzg2NTksMzg2NjEsMzg2NjUsMzg2ODIsMzg2ODMsMzg2ODUsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTYsMzg3''@;'; put 'put ''MDUsMzg3MDcsMzg3MjEsMzg3MjMsMzg3MzAsMzg3MzQsMzg3MzUsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDcsMzg3NTUsMzg3NTksMzg3NjIsMzg3NjYsMzg3NzEsMzg3NzQsMzg3NzUsMzg3NzYsMzg3NzksMzg3ODEsMzg3ODMsMzg3ODQsMzg3OTMsMzg4MDUsMzg4MDYsMzg4MDcs''@;'; put 'put ''Mzg4MDksMzg4MTAsMzg4MTQsMzg4MTUsMzg4MTgsMzg4MjgsMzg4MzAsMzg4MzMsMzg4MzQsMzg4MzcsMzg4MzgsMzg4NDAsMzg4NDEsMzg4NDIsMzg4NDQsMzg4NDYsMzg4NDcsMzg4NDksMzg4NTIsMzg4NTMsMzg4NTUsMzg4NTcsMzg4NTgsMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjQsMzg4''@;'; put 'put ''NjUsMzg4NjgsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzcsMzg4NzgsMzg4ODAsMzg4NzUsMzg4ODEsMzg4ODQsMzg4OTUsMzg4OTcsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDYsMzg5MTksMzg5MjIsMzg5MzcsMzg5MjUsMzg5MjYsMzg5MzIsMzg5MzQsMzg5NDAsMzg5NDIsMzg5NDQsMzg5NDcs''@;'; put 'put ''Mzg5NTAsMzg5NTUsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjIsMzg5NjMsMzg5NjUsMzg5NDksMzg5NzQsMzg5ODAsMzg5ODMsMzg5ODYsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTgsMzg5OTksMzkwMDEsMzkwMDIsMzkwMTAsMzkwMTEsMzkwMTMsMzkwMTQsMzkwMTgsMzkwMjAsMzkwODMsMzkw''@;'; put 'put ''ODUsMzkwODYsMzkwODgsMzkwOTIsMzkwOTUsMzkwOTYsMzkwOTgsMzkwOTksMzkxMDMsMzkxMDYsMzkxMDksMzkxMTIsMzkxMTYsMzkxMzcsMzkxMzksMzkxNDEsMzkxNDIsMzkxNDMsMzkxNDYsMzkxNTUsMzkxNTgsMzkxNzAsMzkxNzUsMzkxNzYsMzkxODUsMzkxODksMzkxOTAsMzkxOTEs''@;'; put 'put ''MzkxOTQsMzkxOTUsMzkxOTYsMzkxOTksMzkyMDIsMzkyMDYsMzkyMDcsMzkyMTEsMzkyMTcsMzkyMTgsMzkyMTksMzkyMjAsMzkyMjEsMzkyMjUsMzkyMjYsMzkyMjcsMzkyMjgsMzkyMzIsMzkyMzMsMzkyMzgsMzkyMzksMzkyNDAsMzkyNDUsMzkyNDYsMzkyNTIsMzkyNTYsMzkyNTcsMzky''@;'; put 'put ''NTksMzkyNjAsMzkyNjIsMzkyNjMsMzkyNjQsMzkzMjMsMzkzMjUsMzkzMjcsMzkzMzQsMzkzNDQsMzkzNDUsMzkzNDYsMzkzNDksMzkzNTMsMzkzNTQsMzkzNTcsMzkzNTksMzkzNjMsMzkzNjksMzkzNzksMzkzODAsMzkzODUsMzkzODYsMzkzODgsMzkzOTAsMzkzOTksMzk0MDIsMzk0MDMs''@;'; put 'put ''Mzk0MDQsMzk0MDgsMzk0MTIsMzk0MTMsMzk0MTcsMzk0MjEsMzk0MjIsMzk0MjYsMzk0MjcsMzk0MjgsMzk0MzUsMzk0MzYsMzk0NDAsMzk0NDEsMzk0NDYsMzk0NTQsMzk0NTYsMzk0NTgsMzk0NTksMzk0NjAsMzk0NjMsMzk0NjksMzk0NzAsMzk0NzUsMzk0NzcsMzk0NzgsMzk0ODAsMzk0''@;'; put 'put ''OTUsMzk0ODksMzk0OTIsMzk0OTgsMzk0OTksMzk1MDAsMzk1MDIsMzk1MDUsMzk1MDgsMzk1MTAsMzk1MTcsMzk1OTQsMzk1OTYsMzk1OTgsMzk1OTksMzk2MDIsMzk2MDQsMzk2MDUsMzk2MDYsMzk2MDksMzk2MTEsMzk2MTQsMzk2MTUsMzk2MTcsMzk2MTksMzk2MjIsMzk2MjQsMzk2MzAs''@;'; put 'put ''Mzk2MzIsMzk2MzQsMzk2MzcsMzk2MzgsMzk2MzksMzk2NDMsMzk2NDQsMzk2NDgsMzk2NTIsMzk2NTMsMzk2NTUsMzk2NTcsMzk2NjAsMzk2NjYsMzk2NjcsMzk2NjksMzk2NzMsMzk2NzQsMzk2NzcsMzk2NzksMzk2ODAsMzk2ODEsMzk2ODIsMzk2ODMsMzk2ODQsMzk2ODUsMzk2ODgsMzk2''@;'; put 'put ''ODksMzk2OTEsMzk2OTIsMzk2OTMsMzk2OTQsMzk2OTYsMzk2OTgsMzk3MDIsMzk3MDUsMzk3MDcsMzk3MDgsMzk3MTIsMzk3MTgsMzk3MjMsMzk3MjUsMzk3MzEsMzk3MzIsMzk3MzMsMzk3MzUsMzk3MzcsMzk3MzgsMzk3NDEsMzk3NTIsMzk3NTUsMzk3NTYsMzk3NjUsMzk3NjYsMzk3Njcs''@;'; put 'put ''Mzk3NzEsMzk3NzQsMzk3NzcsMzk3NzksMzk3ODEsMzk3ODIsMzk3ODQsMzk3ODYsMzk3ODcsMzk3ODgsMzk3ODksMzk3OTAsMzk3OTUsMzk3OTcsMzk3OTksMzk4MDAsMzk4MDEsMzk4MDcsMzk4MDgsMzk4MTIsMzk4MTMsMzk4MTQsMzk4MTUsMzk4MTcsMzk4MTgsMzk4MTksMzk4MjEsMzk4''@;'; put 'put ''MjMsMzk4MjQsMzk4MjgsMzk4MzQsMzk4MzcsMzk4MzgsMzk4NDYsMzk4NDcsMzk4NDksMzk4NTIsMzk4NTYsMzk4NTcsMzk4NTgsMzk4NjMsMzk4NjQsMzk4NjcsMzk4NjgsMzk4NzAsMzk4NzEsMzk4NzMsMzk4NzksMzk4ODAsMzk4ODYsMzk4ODgsMzk4OTUsMzk4OTYsMzk5MDEsMzk5MDMs''@;'; put 'put ''Mzk5MDksMzk5MTEsMzk5MTQsMzk5MTUsMzk5MTksMzk5MjMsMzk5MjcsMzk5MjgsMzk5MjksMzk5MzAsMzk5MzMsMzk5MzUsMzk5MzYsMzk5MzgsMzk5NDcsMzk5NTEsMzk5NTMsMzk5NTgsMzk5NjAsMzk5NjEsMzk5NjIsMzk5NjQsMzk5NjYsMzk5NzAsMzk5NzEsMzk5NzQsMzk5NzUsMzk5''@;'; put 'put ''NzYsMzk5NzcsMzk5NzgsMzk5ODUsMzk5ODksMzk5OTAsMzk5OTEsMzk5OTcsNDAwMDEsNDAwMDMsNDAwMDQsNDAwMDUsNDAwMDksNDAwMTAsNDAwMTQsNDAwMTUsNDAwMTYsNDAwMTksNDAwMjAsNDAwMjIsNDAwMjQsNDAwMjcsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzUsNDAwNDEsNDAwNDIs''@;'; put 'put ''NDAwMjgsNDAwNDMsNDAwNDAsNDAwNDYsNDAwNDgsNDAwNTAsNDAwNTMsNDAwNTUsNDAwNTksNDAxNjYsNDAxNzgsNDAxODMsNDAxODUsNDAyMDMsNDAxOTQsNDAyMDksNDAyMTUsNDAyMTYsNDAyMjAsNDAyMjEsNDAyMjIsNDAyMzksNDAyNDAsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNTAsNDAy''@;'; put 'put ''NTIsNDAyNjEsNDAyNTMsNDAyNTgsNDAyNTksNDAyNjMsNDAyNjYsNDAyNzUsNDAyNzYsNDAyODcsNDAyOTEsNDAyOTAsNDAyOTMsNDAyOTcsNDAyOTgsNDAyOTksNDAzMDQsNDAzMTAsNDAzMTEsNDAzMTUsNDAzMTYsNDAzMTgsNDAzMjMsNDAzMjQsNDAzMjYsNDAzMzAsNDAzMzMsNDAzMzQs''@;'; put 'put ''NDAzMzgsNDAzMzksNDAzNDEsNDAzNDIsNDAzNDMsNDAzNDQsNDAzNTMsNDAzNjIsNDAzNjQsNDAzNjYsNDAzNjksNDAzNzMsNDAzNzcsNDAzODAsNDAzODMsNDAzODcsNDAzOTEsNDAzOTMsNDAzOTQsNDA0MDQsNDA0MDUsNDA0MDYsNDA0MDcsNDA0MTAsNDA0MTQsNDA0MTUsNDA0MTYsNDA0''@;'; put 'put ''MjEsNDA0MjMsNDA0MjUsNDA0MjcsNDA0MzAsNDA0MzIsNDA0MzUsNDA0MzYsNDA0NDYsNDA0NTgsNDA0NTAsNDA0NTUsNDA0NjIsNDA0NjQsNDA0NjUsNDA0NjYsNDA0NjksNDA0NzAsNDA0NzMsNDA0NzYsNDA0NzcsNDA1NzAsNDA1NzEsNDA1NzIsNDA1NzYsNDA1NzgsNDA1NzksNDA1ODAs''@;'; put 'put ''NDA1ODEsNDA1ODMsNDA1OTAsNDA1OTEsNDA1OTgsNDA2MDAsNDA2MDMsNDA2MDYsNDA2MTIsNDA2MTYsNDA2MjAsNDA2MjIsNDA2MjMsNDA2MjQsNDA2MjcsNDA2MjgsNDA2MjksNDA2NDYsNDA2NDgsNDA2NTEsNDA2NjEsNDA2NzEsNDA2NzYsNDA2NzksNDA2ODQsNDA2ODUsNDA2ODYsNDA2''@;'; put 'put ''ODgsNDA2ODksNDA2OTAsNDA2OTMsNDA2OTYsNDA3MDMsNDA3MDYsNDA3MDcsNDA3MTMsNDA3MTksNDA3MjAsNDA3MjEsNDA3MjIsNDA3MjQsNDA3MjYsNDA3MjcsNDA3MjksNDA3MzAsNDA3MzEsNDA3MzUsNDA3MzgsNDA3NDIsNDA3NDYsNDA3NDcsNDA3NTEsNDA3NTMsNDA3NTQsNDA3NTYs''@;'; put 'put ''NDA3NTksNDA3NjEsNDA3NjIsNDA3NjQsNDA3NjUsNDA3NjcsNDA3NjksNDA3NzEsNDA3NzIsNDA3NzMsNDA3NzQsNDA3NzUsNDA3ODcsNDA3ODksNDA3OTAsNDA3OTEsNDA3OTIsNDA3OTQsNDA3OTcsNDA3OTgsNDA4MDgsNDA4MDksNDA4MTMsNDA4MTQsNDA4MTUsNDA4MTYsNDA4MTcsNDA4''@;'; put 'put ''MTksNDA4MjEsNDA4MjYsNDA4MjksNDA4NDcsNDA4NDgsNDA4NDksNDA4NTAsNDA4NTIsNDA4NTQsNDA4NTUsNDA4NjIsNDA4NjUsNDA4NjYsNDA4NjcsNDA4NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxpYm04NjY6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0''@;'; put 'put ''NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3''@;'; put 'put ''NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDk2MTcsOTYxOCw5NjE5LDk0NzQsOTUwOCw5NTY5LDk1NzAsOTU1OCw5NTU3LDk1NzEsOTU1Myw5NTU5LDk1NjUsOTU2NCw5NTYzLDk0ODgsOTQ5Miw5NTI0LDk1MTYsOTUwMCw5NDcyLDk1MzIsOTU2''@;'; put 'put ''Niw5NTY3LDk1NjIsOTU1Niw5NTc3LDk1NzQsOTU2OCw5NTUyLDk1ODAsOTU3NSw5NTc2LDk1NzIsOTU3Myw5NTYxLDk1NjAsOTU1NCw5NTU1LDk1NzksOTU3OCw5NDk2LDk0ODQsOTYwOCw5NjA0LDk2MTIsOTYxNiw5NjAwLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5''@;'; put 'put ''NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTAyNSwxMTA1LDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzOCwxMTE4LDE3Niw4NzI5LDE4Myw4NzMwLDg0NzAsMTY0LDk2MzIsMTYwXSwiaXNvLTg4NTktMiI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUs''@;'; put 'put ''MTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCw3MjgsMzIxLDE2NCwzMTcsMzQ2LDE2NywxNjgsMzUyLDM1MCwzNTYsMzc3LDE3MywzODEsMzc5LDE3Niwy''@;'; put 'put ''NjEsNzMxLDMyMiwxODAsMzE4LDM0Nyw3MTEsMTg0LDM1MywzNTEsMzU3LDM3OCw3MzMsMzgyLDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIx''@;'; put 'put ''OCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLCJpc28tODg1OS0zIjpb''@;'; put 'put ''MTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjk0LDcyOCwxNjMsMTY0LG51bGwsMjkyLDE2NywxNjgs''@;'; put 'put ''MzA0LDM1MCwyODYsMzA4LDE3MyxudWxsLDM3OSwxNzYsMjk1LDE3OCwxNzksMTgwLDE4MSwyOTMsMTgzLDE4NCwzMDUsMzUxLDI4NywzMDksMTg5LG51bGwsMzgwLDE5MiwxOTMsMTk0LG51bGwsMTk2LDI2NiwyNjQsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsbnVsbCwy''@;'; put 'put ''MDksMjEwLDIxMSwyMTIsMjg4LDIxNCwyMTUsMjg0LDIxNywyMTgsMjE5LDIyMCwzNjQsMzQ4LDIyMywyMjQsMjI1LDIyNixudWxsLDIyOCwyNjcsMjY1LDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LG51bGwsMjQxLDI0MiwyNDMsMjQ0LDI4OSwyNDYsMjQ3LDI4NSwyNDks''@;'; put 'put ''MjUwLDI1MSwyNTIsMzY1LDM0OSw3MjldLCJpc28tODg1OS00IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1''@;'; put 'put ''OSwxNjAsMjYwLDMxMiwzNDIsMTY0LDI5NiwzMTUsMTY3LDE2OCwzNTIsMjc0LDI5MCwzNTgsMTczLDM4MSwxNzUsMTc2LDI2MSw3MzEsMzQzLDE4MCwyOTcsMzE2LDcxMSwxODQsMzUzLDI3NSwyOTEsMzU5LDMzMCwzODIsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4''@;'; put 'put ''LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDI5OCwyNzIsMzI1LDMzMiwzMTAsMjEyLDIxMywyMTQsMjE1LDIxNiwzNzAsMjE4LDIxOSwyMjAsMzYwLDM2MiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjk5LDI3MywzMjYs''@;'; put 'put ''MzMzLDMxMSwyNDQsMjQ1LDI0NiwyNDcsMjQ4LDM3MSwyNTAsMjUxLDI1MiwzNjEsMzYzLDcyOV0sImlzby04ODU5LTUiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1''@;'; put 'put ''MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxNzMsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1''@;'; put 'put ''MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4''@;'; put 'put ''MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODQ3MCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTEx''@;'; put 'put ''NiwxNjcsMTExOCwxMTE5XSwiaXNvLTg4NTktNiI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDE2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NDgsMTczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTU2MyxudWxsLG51bGwsbnVsbCwxNTY3LG51bGwsMTU2OSwxNTcw''@;'; put 'put ''LDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5MCwxNTkxLDE1OTIsMTU5MywxNTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjAwLDE2MDEsMTYwMiwxNjAz''@;'; put 'put ''LDE2MDQsMTYwNSwxNjA2LDE2MDcsMTYwOCwxNjA5LDE2MTAsMTYxMSwxNjEyLDE2MTMsMTYxNCwxNjE1LDE2MTYsMTYxNywxNjE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLCJpc28tODg1OS03IjpbMTI4LDEyOSwx''@;'; put 'put ''MzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIxNiw4MjE3LDE2Myw4MzY0LDgzNjcsMTY2LDE2NywxNjgsMTY5LDg5''@;'; put 'put ''MCwxNzEsMTcyLDE3MyxudWxsLDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCw5MDEsOTAyLDE4Myw5MDQsOTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGws''@;'; put 'put ''OTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5''@;'; put 'put ''NzIsOTczLDk3NCxudWxsXSwiaXNvLTg4NTktOCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51''@;'; put 'put ''bGwsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODIxNSwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5Niwx''@;'; put 'put ''NDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxdLCJpc28tODg1OS0xMCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2''@;'; put 'put ''LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwyNzQsMjkwLDI5OCwyOTYsMzEwLDE2NywzMTUsMjcyLDM1MiwzNTgsMzgxLDE3MywzNjIsMzMwLDE3NiwyNjEs''@;'; put 'put ''Mjc1LDI5MSwyOTksMjk3LDMxMSwxODMsMzE2LDI3MywzNTMsMzU5LDM4Miw4MjEzLDM2MywzMzEsMjU2LDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDMwMiwyNjgsMjAxLDI4MCwyMDMsMjc4LDIwNSwyMDYsMjA3LDIwOCwzMjUsMzMyLDIxMSwyMTIsMjEzLDIxNCwzNjAsMjE2LDM3MCwyMTgs''@;'; put 'put ''MjE5LDIyMCwyMjEsMjIyLDIyMywyNTcsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMzAzLDI2OSwyMzMsMjgxLDIzNSwyNzksMjM3LDIzOCwyMzksMjQwLDMyNiwzMzMsMjQzLDI0NCwyNDUsMjQ2LDM2MSwyNDgsMzcxLDI1MCwyNTEsMjUyLDI1MywyNTQsMzEyXSwiaXNvLTg4NTktMTMiOlsx''@;'; put 'put ''MjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw4MjIxLDE2MiwxNjMsMTY0LDgyMjIsMTY2LDE2NywyMTYs''@;'; put 'put ''MTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSw4MjIwLDE4MSwxODIsMTgzLDI0OCwxODUsMzQzLDE4NywxODgsMTg5LDE5MCwyMzAsMjYwLDMwMiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwyNjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgsMzE1LDM1MiwzMjMs''@;'; put 'put ''MzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMyMSwzNDYsMzYyLDIyMCwzNzksMzgxLDIyMywyNjEsMzAzLDI1NywyNjMsMjI4LDIyOSwyODEsMjc1LDI2OSwyMzMsMzc4LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMyNCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0NywzNzEsMzIyLDM0Nywz''@;'; put 'put ''NjMsMjUyLDM4MCwzODIsODIxN10sImlzby04ODU5LTE0IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwx''@;'; put 'put ''NjAsNzY4Miw3NjgzLDE2MywyNjYsMjY3LDc2OTAsMTY3LDc4MDgsMTY5LDc4MTAsNzY5MSw3OTIyLDE3MywxNzQsMzc2LDc3MTAsNzcxMSwyODgsMjg5LDc3NDQsNzc0NSwxODIsNzc2Niw3ODA5LDc3NjcsNzgxMSw3Nzc2LDc5MjMsNzgxMiw3ODEzLDc3NzcsMTkyLDE5MywxOTQsMTk1LDE5''@;'; put 'put ''NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDM3MiwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCw3Nzg2LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDM3NCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIz''@;'; put 'put ''NywyMzgsMjM5LDM3MywyNDEsMjQyLDI0MywyNDQsMjQ1LDI0Niw3Nzg3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDM3NSwyNTVdLCJpc28tODg1OS0xNSI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0''@;'; put 'put ''NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgzNjQsMTY1LDM1MiwxNjcsMzUzLDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMzgxLDE4MSwxODIsMTgzLDM4MiwxODUsMTg2LDE4''@;'; put 'put ''NywzMzgsMzM5LDM3NiwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4''@;'; put 'put ''LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1XSwiaXNvLTg4NTktMTYiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcs''@;'; put 'put ''MTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjYxLDMyMSw4MzY0LDgyMjIsMzUyLDE2NywzNTMsMTY5LDUzNiwxNzEsMzc3LDE3MywzNzgsMzc5LDE3NiwxNzcsMjY4''@;'; put 'put ''LDMyMiwzODEsODIyMSwxODIsMTgzLDM4MiwyNjksNTM3LDE4NywzMzgsMzM5LDM3NiwzODAsMTkyLDE5MywxOTQsMjU4LDE5NiwyNjIsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI3MiwzMjMsMjEwLDIxMSwyMTIsMzM2LDIxNCwzNDYsMzY4LDIxNywyMTgsMjE5''@;'; put 'put ''LDIyMCwyODAsNTM4LDIyMywyMjQsMjI1LDIyNiwyNTksMjI4LDI2MywyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjczLDMyNCwyNDIsMjQzLDI0NCwzMzcsMjQ2LDM0NywzNjksMjQ5LDI1MCwyNTEsMjUyLDI4MSw1MzksMjU1XSwia29pOC1yIjpbOTQ3Miw5NDc0''@;'; put 'put ''LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1''@;'; put 'put ''LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYs''@;'; put 'put ''MTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUs''@;'; put 'put ''MTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSwia29pOC11IjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDky''@;'; put 'put ''LDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDExMDgsOTU1NiwxMTEw''@;'; put 'put ''LDExMTEsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDExNjksMTExOCw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsMTAyOCw5NTcxLDEwMzAsMTAzMSw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsMTE2OCwxMDM4LDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUs''@;'; put 'put ''MTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEs''@;'; put 'put ''MTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSxtYWNpbnRvc2g6WzE5NiwxOTcsMTk5LDIwMSwyMDksMjE0LDIyMCwyMjUsMjI0LDIy''@;'; put 'put ''NiwyMjgsMjI3LDIyOSwyMzEsMjMzLDIzMiwyMzQsMjM1LDIzNywyMzYsMjM4LDIzOSwyNDEsMjQzLDI0MiwyNDQsMjQ2LDI0NSwyNTAsMjQ5LDI1MSwyNTIsODIyNCwxNzYsMTYyLDE2MywxNjcsODIyNiwxODIsMjIzLDE3NCwxNjksODQ4MiwxODAsMTY4LDg4MDAsMTk4LDIxNiw4NzM0LDE3''@;'; put 'put ''Nyw4ODA0LDg4MDUsMTY1LDE4MSw4NzA2LDg3MjEsODcxOSw5NjAsODc0NywxNzAsMTg2LDkzNywyMzAsMjQ4LDE5MSwxNjEsMTcyLDg3MzAsNDAyLDg3NzYsODcxMCwxNzEsMTg3LDgyMzAsMTYwLDE5MiwxOTUsMjEzLDMzOCwzMzksODIxMSw4MjEyLDgyMjAsODIyMSw4MjE2LDgyMTcsMjQ3''@;'; put 'put ''LDk2NzQsMjU1LDM3Niw4MjYwLDgzNjQsODI0OSw4MjUwLDY0MjU3LDY0MjU4LDgyMjUsMTgzLDgyMTgsODIyMiw4MjQwLDE5NCwyMDIsMTkzLDIwMywyMDAsMjA1LDIwNiwyMDcsMjA0LDIxMSwyMTIsNjM3NDMsMjEwLDIxOCwyMTksMjE3LDMwNSw3MTAsNzMyLDE3NSw3MjgsNzI5LDczMCwx''@;'; put 'put ''ODQsNzMzLDczMSw3MTFdLCJ3aW5kb3dzLTg3NCI6WzgzNjQsMTI5LDEzMCwxMzEsMTMyLDgyMzAsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwx''@;'; put 'put ''NTksMTYwLDM1ODUsMzU4NiwzNTg3LDM1ODgsMzU4OSwzNTkwLDM1OTEsMzU5MiwzNTkzLDM1OTQsMzU5NSwzNTk2LDM1OTcsMzU5OCwzNTk5LDM2MDAsMzYwMSwzNjAyLDM2MDMsMzYwNCwzNjA1LDM2MDYsMzYwNywzNjA4LDM2MDksMzYxMCwzNjExLDM2MTIsMzYxMywzNjE0LDM2MTUsMzYx''@;'; put 'put ''NiwzNjE3LDM2MTgsMzYxOSwzNjIwLDM2MjEsMzYyMiwzNjIzLDM2MjQsMzYyNSwzNjI2LDM2MjcsMzYyOCwzNjI5LDM2MzAsMzYzMSwzNjMyLDM2MzMsMzYzNCwzNjM1LDM2MzYsMzYzNywzNjM4LDM2MzksMzY0MCwzNjQxLDM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCwzNjQ3LDM2NDgsMzY0''@;'; put 'put ''OSwzNjUwLDM2NTEsMzY1MiwzNjUzLDM2NTQsMzY1NSwzNjU2LDM2NTcsMzY1OCwzNjU5LDM2NjAsMzY2MSwzNjYyLDM2NjMsMzY2NCwzNjY1LDM2NjYsMzY2NywzNjY4LDM2NjksMzY3MCwzNjcxLDM2NzIsMzY3MywzNjc0LDM2NzUsbnVsbCxudWxsLG51bGwsbnVsbF0sIndpbmRvd3MtMTI1''@;'; put 'put ''MCI6WzgzNjQsMTI5LDgyMTgsMTMxLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMzUyLDgyNDksMzQ2LDM1NiwzODEsMzc3LDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDM1Myw4MjUwLDM0NywzNTcsMzgyLDM3OCwxNjAsNzExLDcyOCwzMjEs''@;'; put 'put ''MTY0LDI2MCwxNjYsMTY3LDE2OCwxNjksMzUwLDE3MSwxNzIsMTczLDE3NCwzNzksMTc2LDE3Nyw3MzEsMzIyLDE4MCwxODEsMTgyLDE4MywxODQsMjYxLDM1MSwxODcsMzE3LDczMywzMTgsMzgwLDM0MCwxOTMsMTk0LDI1OCwxOTYsMzEzLDI2MiwxOTksMjY4LDIwMSwyODAsMjAzLDI4Miwy''@;'; put 'put ''MDUsMjA2LDI3MCwyNzIsMzIzLDMyNywyMTEsMjEyLDMzNiwyMTQsMjE1LDM0NCwzNjYsMjE4LDM2OCwyMjAsMjIxLDM1NCwyMjMsMzQxLDIyNSwyMjYsMjU5LDIyOCwzMTQsMjYzLDIzMSwyNjksMjMzLDI4MSwyMzUsMjgzLDIzNywyMzgsMjcxLDI3MywzMjQsMzI4LDI0MywyNDQsMzM3LDI0''@;'; put 'put ''NiwyNDcsMzQ1LDM2NywyNTAsMzY5LDI1MiwyNTMsMzU1LDcyOV0sIndpbmRvd3MtMTI1MSI6WzEwMjYsMTAyNyw4MjE4LDExMDcsODIyMiw4MjMwLDgyMjQsODIyNSw4MzY0LDgyNDAsMTAzMyw4MjQ5LDEwMzQsMTAzNiwxMDM1LDEwMzksMTEwNiw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYs''@;'; put 'put ''ODIxMSw4MjEyLDE1Miw4NDgyLDExMTMsODI1MCwxMTE0LDExMTYsMTExNSwxMTE5LDE2MCwxMDM4LDExMTgsMTAzMiwxNjQsMTE2OCwxNjYsMTY3LDEwMjUsMTY5LDEwMjgsMTcxLDE3MiwxNzMsMTc0LDEwMzEsMTc2LDE3NywxMDMwLDExMTAsMTE2OSwxODEsMTgyLDE4MywxMTA1LDg0NzAs''@;'; put 'put ''MTEwOCwxODcsMTExMiwxMDI5LDExMDksMTExMSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2Niwx''@;'; put 'put ''MDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwx''@;'; put 'put ''MTAwLDExMDEsMTEwMiwxMTAzXSwid2luZG93cy0xMjUyIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwzNTIsODI0OSwzMzgsMTQxLDM4MSwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMzUzLDgyNTAs''@;'; put 'put ''MzM5LDE1NywzODIsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5Niwx''@;'; put 'put ''OTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIz''@;'; put 'put ''OCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1XSwid2luZG93cy0xMjUzIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwxMzgsODI0OSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgy''@;'; put 'put ''MTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTU0LDgyNTAsMTU2LDE1NywxNTgsMTU5LDE2MCw5MDEsOTAyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSxudWxsLDE3MSwxNzIsMTczLDE3NCw4MjEzLDE3NiwxNzcsMTc4LDE3OSw5MDAsMTgxLDE4MiwxODMs''@;'; put 'put ''OTA0LDkwNSw5MDYsMTg3LDkwOCwxODksOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSxudWxsLDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQs''@;'; put 'put ''OTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsbnVsbF0sIndpbmRvd3MtMTI1NCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIs''@;'; put 'put ''ODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMzUyLDgyNDksMzM4LDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDM1Myw4MjUwLDMzOSwxNTcsMTU4LDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcw''@;'; put 'put ''LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyODYsMjA5LDIxMCwyMTEs''@;'; put 'put ''MjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMzA0LDM1MCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI4NywyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1Miwz''@;'; put 'put ''MDUsMzUxLDI1NV0sIndpbmRvd3MtMTI1NSI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTM4LDgyNDksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDE1NCw4MjUwLDE1NiwxNTcs''@;'; put 'put ''MTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsODM2MiwxNjUsMTY2LDE2NywxNjgsMTY5LDIxNSwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwyNDcsMTg3LDE4OCwxODksMTkwLDE5MSwxNDU2LDE0NTcsMTQ1OCwxNDU5LDE0NjAsMTQ2''@;'; put 'put ''MSwxNDYyLDE0NjMsMTQ2NCwxNDY1LDE0NjYsMTQ2NywxNDY4LDE0NjksMTQ3MCwxNDcxLDE0NzIsMTQ3MywxNDc0LDE0NzUsMTUyMCwxNTIxLDE1MjIsMTUyMywxNTI0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTQ4OCwxNDg5LDE0OTAsMTQ5MSwxNDkyLDE0OTMsMTQ5''@;'; put 'put ''NCwxNDk1LDE0OTYsMTQ5NywxNDk4LDE0OTksMTUwMCwxNTAxLDE1MDIsMTUwMywxNTA0LDE1MDUsMTUwNiwxNTA3LDE1MDgsMTUwOSwxNTEwLDE1MTEsMTUxMiwxNTEzLDE1MTQsbnVsbCxudWxsLDgyMDYsODIwNyxudWxsXSwid2luZG93cy0xMjU2IjpbODM2NCwxNjYyLDgyMTgsNDAyLDgy''@;'; put 'put ''MjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTY1Nyw4MjQ5LDMzOCwxNjcwLDE2ODgsMTY3MiwxNzExLDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTcwNSw4NDgyLDE2ODEsODI1MCwzMzksODIwNCw4MjA1LDE3MjIsMTYwLDE1NDgsMTYyLDE2MywxNjQsMTY1LDE2Niwx''@;'; put 'put ''NjcsMTY4LDE2OSwxNzI2LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE1NjMsMTg3LDE4OCwxODksMTkwLDE1NjcsMTcyOSwxNTY5LDE1NzAsMTU3MSwxNTcyLDE1NzMsMTU3NCwxNTc1LDE1NzYsMTU3NywxNTc4LDE1NzksMTU4''@;'; put 'put ''MCwxNTgxLDE1ODIsMTU4MywxNTg0LDE1ODUsMTU4NiwxNTg3LDE1ODgsMTU4OSwxNTkwLDIxNSwxNTkxLDE1OTIsMTU5MywxNTk0LDE2MDAsMTYwMSwxNjAyLDE2MDMsMjI0LDE2MDQsMjI2LDE2MDUsMTYwNiwxNjA3LDE2MDgsMjMxLDIzMiwyMzMsMjM0LDIzNSwxNjA5LDE2MTAsMjM4LDIz''@;'; put 'put ''OSwxNjExLDE2MTIsMTYxMywxNjE0LDI0NCwxNjE1LDE2MTYsMjQ3LDE2MTcsMjQ5LDE2MTgsMjUxLDI1Miw4MjA2LDgyMDcsMTc0Nl0sIndpbmRvd3MtMTI1NyI6WzgzNjQsMTI5LDgyMTgsMTMxLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMTM4LDgyNDksMTQwLDE2OCw3MTEsMTg0''@;'; put 'put ''LDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDE1NCw4MjUwLDE1NiwxNzUsNzMxLDE1OSwxNjAsbnVsbCwxNjIsMTYzLDE2NCxudWxsLDE2NiwxNjcsMjE2LDE2OSwzNDIsMTcxLDE3MiwxNzMsMTc0LDE5OCwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwx''@;'; put 'put ''ODIsMTgzLDI0OCwxODUsMzQzLDE4NywxODgsMTg5LDE5MCwyMzAsMjYwLDMwMiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwyNjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgsMzE1LDM1MiwzMjMsMzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMyMSwzNDYsMzYyLDIyMCwzNzksMzgxLDIy''@;'; put 'put ''MywyNjEsMzAzLDI1NywyNjMsMjI4LDIyOSwyODEsMjc1LDI2OSwyMzMsMzc4LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMyNCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0NywzNzEsMzIyLDM0NywzNjMsMjUyLDM4MCwzODIsNzI5XSwid2luZG93cy0xMjU4IjpbODM2NCwxMjksODIxOCw0MDIs''@;'; put 'put ''ODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxMzgsODI0OSwzMzgsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMTU0LDgyNTAsMzM5LDE1NywxNTgsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2''@;'; put 'put ''OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMjU4LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsNzY4LDIwNSwyMDYsMjA3LDI3MiwyMDksNzc3''@;'; put 'put ''LDIxMSwyMTIsNDE2LDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCw0MzEsNzcxLDIyMywyMjQsMjI1LDIyNiwyNTksMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSw3NjksMjM3LDIzOCwyMzksMjczLDI0MSw4MDMsMjQzLDI0NCw0MTcsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEs''@;'; put 'put ''MjUyLDQzMiw4MzYzLDI1NV0sIngtbWFjLWN5cmlsbGljIjpbMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1''@;'; put 'put ''LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDgyMjQsMTc2LDExNjgsMTYzLDE2Nyw4MjI2LDE4MiwxMDMwLDE3NCwxNjksODQ4MiwxMDI2LDExMDYsODgwMCwxMDI3LDExMDcsODczNCwxNzcsODgwNCw4ODA1LDExMTAsMTgxLDExNjksMTAzMiwxMDI4LDExMDgsMTAzMSwxMTExLDEw''@;'; put 'put ''MzMsMTExMywxMDM0LDExMTQsMTExMiwxMDI5LDE3Miw4NzMwLDQwMiw4Nzc2LDg3MTAsMTcxLDE4Nyw4MjMwLDE2MCwxMDM1LDExMTUsMTAzNiwxMTE2LDExMDksODIxMSw4MjEyLDgyMjAsODIyMSw4MjE2LDgyMTcsMjQ3LDgyMjIsMTAzOCwxMTE4LDEwMzksMTExOSw4NDcwLDEwMjUsMTEw''@;'; put 'put ''NSwxMTAzLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsODM2''@;'; put 'put ''NF19fSh0aGlzfHx7fSl9LDY0MzE4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEFlLF90LG50KXtyZXR1cm4gX3Q8PUFlJiZBZTw9bnR9dWUuZXhwb3J0cyYmIUlbImVuY29kaW5nLWluZGV4ZXMiXSYmKElbImVuY29kaW5nLWluZGV4ZXMi''@;'; put 'put ''XT15KDY3OTUxKVsiZW5jb2RpbmctaW5kZXhlcyJdKTt2YXIgQj1NYXRoLmZsb29yO2Z1bmN0aW9uIHcoQWUpe2lmKHZvaWQgMD09PUFlKXJldHVybnt9O2lmKEFlPT09T2JqZWN0KEFlKSlyZXR1cm4gQWU7dGhyb3cgVHlwZUVycm9yKCJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCB0byBk''@;'; put 'put ''aWN0aW9uYXJ5Iil9ZnVuY3Rpb24gTyhBZSl7cmV0dXJuIDA8PUFlJiZBZTw9MTI3fXZhciB6PU8sTj0tMTtmdW5jdGlvbiBMKEFlKXt0aGlzLnRva2Vucz1bXS5zbGljZS5jYWxsKEFlKSx0aGlzLnRva2Vucy5yZXZlcnNlKCl9TC5wcm90b3R5cGU9e2VuZE9mU3RyZWFtOmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIXRoaXMudG9rZW5zLmxlbmd0aH0scmVhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vucy5sZW5ndGg/dGhpcy50b2tlbnMucG9wKCk6Tn0scHJlcGVuZDpmdW5jdGlvbihBZSl7aWYoQXJyYXkuaXNBcnJheShBZSkpZm9yKHZhciBfdD1BZTtfdC5sZW5ndGg7KXRoaXMudG9r''@;'; put 'put ''ZW5zLnB1c2goX3QucG9wKCkpO2Vsc2UgdGhpcy50b2tlbnMucHVzaChBZSl9LHB1c2g6ZnVuY3Rpb24oQWUpe2lmKEFycmF5LmlzQXJyYXkoQWUpKWZvcih2YXIgX3Q9QWU7X3QubGVuZ3RoOyl0aGlzLnRva2Vucy51bnNoaWZ0KF90LnNoaWZ0KCkpO2Vsc2UgdGhpcy50b2tlbnMudW5zaGlm''@;'; put 'put ''dChBZSl9fTt2YXIgSz0tMTtmdW5jdGlvbiBVKEFlLF90KXtpZihBZSl0aHJvdyBUeXBlRXJyb3IoIkRlY29kZXIgZXJyb3IiKTtyZXR1cm4gX3R8fDY1NTMzfWZ1bmN0aW9uIFcoQWUpe3Rocm93IFR5cGVFcnJvcigiVGhlIGNvZGUgcG9pbnQgIitBZSsiIGNvdWxkIG5vdCBiZSBlbmNvZGVk''@;'; put 'put ''LiIpfWZ1bmN0aW9uIGVlKEFlKXtyZXR1cm4gQWU9U3RyaW5nKEFlKS50cmltKCkudG9Mb3dlckNhc2UoKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmUsQWUpP25lW0FlXTpudWxsfXZhciBKPVt7ZW5jb2RpbmdzOlt7bGFiZWxzOlsidW5pY29kZS0xLTEtdXRmLTgi''@;'; put 'put ''LCJ1dGYtOCIsInV0ZjgiXSxuYW1lOiJVVEYtOCJ9XSxoZWFkaW5nOiJUaGUgRW5jb2RpbmcifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiODY2IiwiY3A4NjYiLCJjc2libTg2NiIsImlibTg2NiJdLG5hbWU6IklCTTg2NiJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluMiIsImlzby04ODU5LTIiLCJp''@;'; put 'put ''c28taXItMTAxIiwiaXNvODg1OS0yIiwiaXNvODg1OTIiLCJpc29fODg1OS0yIiwiaXNvXzg4NTktMjoxOTg3IiwibDIiLCJsYXRpbjIiXSxuYW1lOiJJU08tODg1OS0yIn0se2xhYmVsczpbImNzaXNvbGF0aW4zIiwiaXNvLTg4NTktMyIsImlzby1pci0xMDkiLCJpc284ODU5LTMiLCJpc284''@;'; put 'put ''ODU5MyIsImlzb184ODU5LTMiLCJpc29fODg1OS0zOjE5ODgiLCJsMyIsImxhdGluMyJdLG5hbWU6IklTTy04ODU5LTMifSx7bGFiZWxzOlsiY3Npc29sYXRpbjQiLCJpc28tODg1OS00IiwiaXNvLWlyLTExMCIsImlzbzg4NTktNCIsImlzbzg4NTk0IiwiaXNvXzg4NTktNCIsImlzb184ODU5''@;'; put 'put ''LTQ6MTk4OCIsImw0IiwibGF0aW40Il0sbmFtZToiSVNPLTg4NTktNCJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluY3lyaWxsaWMiLCJjeXJpbGxpYyIsImlzby04ODU5LTUiLCJpc28taXItMTQ0IiwiaXNvODg1OS01IiwiaXNvODg1OTUiLCJpc29fODg1OS01IiwiaXNvXzg4NTktNToxOTg4Il0s''@;'; put 'put ''bmFtZToiSVNPLTg4NTktNSJ9LHtsYWJlbHM6WyJhcmFiaWMiLCJhc21vLTcwOCIsImNzaXNvODg1OTZlIiwiY3Npc284ODU5NmkiLCJjc2lzb2xhdGluYXJhYmljIiwiZWNtYS0xMTQiLCJpc28tODg1OS02IiwiaXNvLTg4NTktNi1lIiwiaXNvLTg4NTktNi1pIiwiaXNvLWlyLTEyNyIsImlz''@;'; put 'put ''bzg4NTktNiIsImlzbzg4NTk2IiwiaXNvXzg4NTktNiIsImlzb184ODU5LTY6MTk4NyJdLG5hbWU6IklTTy04ODU5LTYifSx7bGFiZWxzOlsiY3Npc29sYXRpbmdyZWVrIiwiZWNtYS0xMTgiLCJlbG90XzkyOCIsImdyZWVrIiwiZ3JlZWs4IiwiaXNvLTg4NTktNyIsImlzby1pci0xMjYiLCJp''@;'; put 'put ''c284ODU5LTciLCJpc284ODU5NyIsImlzb184ODU5LTciLCJpc29fODg1OS03OjE5ODciLCJzdW5fZXVfZ3JlZWsiXSxuYW1lOiJJU08tODg1OS03In0se2xhYmVsczpbImNzaXNvODg1OThlIiwiY3Npc29sYXRpbmhlYnJldyIsImhlYnJldyIsImlzby04ODU5LTgiLCJpc28tODg1OS04LWUi''@;'; put 'put ''LCJpc28taXItMTM4IiwiaXNvODg1OS04IiwiaXNvODg1OTgiLCJpc29fODg1OS04IiwiaXNvXzg4NTktODoxOTg4IiwidmlzdWFsIl0sbmFtZToiSVNPLTg4NTktOCJ9LHtsYWJlbHM6WyJjc2lzbzg4NTk4aSIsImlzby04ODU5LTgtaSIsImxvZ2ljYWwiXSxuYW1lOiJJU08tODg1OS04LUki''@;'; put 'put ''fSx7bGFiZWxzOlsiY3Npc29sYXRpbjYiLCJpc28tODg1OS0xMCIsImlzby1pci0xNTciLCJpc284ODU5LTEwIiwiaXNvODg1OTEwIiwibDYiLCJsYXRpbjYiXSxuYW1lOiJJU08tODg1OS0xMCJ9LHtsYWJlbHM6WyJpc28tODg1OS0xMyIsImlzbzg4NTktMTMiLCJpc284ODU5MTMiXSxuYW1l''@;'; put 'put ''OiJJU08tODg1OS0xMyJ9LHtsYWJlbHM6WyJpc28tODg1OS0xNCIsImlzbzg4NTktMTQiLCJpc284ODU5MTQiXSxuYW1lOiJJU08tODg1OS0xNCJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluOSIsImlzby04ODU5LTE1IiwiaXNvODg1OS0xNSIsImlzbzg4NTkxNSIsImlzb184ODU5LTE1IiwibDki''@;'; put 'put ''XSxuYW1lOiJJU08tODg1OS0xNSJ9LHtsYWJlbHM6WyJpc28tODg1OS0xNiJdLG5hbWU6IklTTy04ODU5LTE2In0se2xhYmVsczpbImNza29pOHIiLCJrb2kiLCJrb2k4Iiwia29pOC1yIiwia29pOF9yIl0sbmFtZToiS09JOC1SIn0se2xhYmVsczpbImtvaTgtcnUiLCJrb2k4LXUiXSxuYW1l''@;'; put 'put ''OiJLT0k4LVUifSx7bGFiZWxzOlsiY3NtYWNpbnRvc2giLCJtYWMiLCJtYWNpbnRvc2giLCJ4LW1hYy1yb21hbiJdLG5hbWU6Im1hY2ludG9zaCJ9LHtsYWJlbHM6WyJkb3MtODc0IiwiaXNvLTg4NTktMTEiLCJpc284ODU5LTExIiwiaXNvODg1OTExIiwidGlzLTYyMCIsIndpbmRvd3MtODc0''@;'; put 'put ''Il0sbmFtZToid2luZG93cy04NzQifSx7bGFiZWxzOlsiY3AxMjUwIiwid2luZG93cy0xMjUwIiwieC1jcDEyNTAiXSxuYW1lOiJ3aW5kb3dzLTEyNTAifSx7bGFiZWxzOlsiY3AxMjUxIiwid2luZG93cy0xMjUxIiwieC1jcDEyNTEiXSxuYW1lOiJ3aW5kb3dzLTEyNTEifSx7bGFiZWxzOlsi''@;'; put 'put ''YW5zaV94My40LTE5NjgiLCJhc2NpaSIsImNwMTI1MiIsImNwODE5IiwiY3Npc29sYXRpbjEiLCJpYm04MTkiLCJpc28tODg1OS0xIiwiaXNvLWlyLTEwMCIsImlzbzg4NTktMSIsImlzbzg4NTkxIiwiaXNvXzg4NTktMSIsImlzb184ODU5LTE6MTk4NyIsImwxIiwibGF0aW4xIiwidXMtYXNj''@;'; put 'put ''aWkiLCJ3aW5kb3dzLTEyNTIiLCJ4LWNwMTI1MiJdLG5hbWU6IndpbmRvd3MtMTI1MiJ9LHtsYWJlbHM6WyJjcDEyNTMiLCJ3aW5kb3dzLTEyNTMiLCJ4LWNwMTI1MyJdLG5hbWU6IndpbmRvd3MtMTI1MyJ9LHtsYWJlbHM6WyJjcDEyNTQiLCJjc2lzb2xhdGluNSIsImlzby04ODU5LTkiLCJp''@;'; put 'put ''c28taXItMTQ4IiwiaXNvODg1OS05IiwiaXNvODg1OTkiLCJpc29fODg1OS05IiwiaXNvXzg4NTktOToxOTg5IiwibDUiLCJsYXRpbjUiLCJ3aW5kb3dzLTEyNTQiLCJ4LWNwMTI1NCJdLG5hbWU6IndpbmRvd3MtMTI1NCJ9LHtsYWJlbHM6WyJjcDEyNTUiLCJ3aW5kb3dzLTEyNTUiLCJ4LWNw''@;'; put 'put ''MTI1NSJdLG5hbWU6IndpbmRvd3MtMTI1NSJ9LHtsYWJlbHM6WyJjcDEyNTYiLCJ3aW5kb3dzLTEyNTYiLCJ4LWNwMTI1NiJdLG5hbWU6IndpbmRvd3MtMTI1NiJ9LHtsYWJlbHM6WyJjcDEyNTciLCJ3aW5kb3dzLTEyNTciLCJ4LWNwMTI1NyJdLG5hbWU6IndpbmRvd3MtMTI1NyJ9LHtsYWJl''@;'; put 'put ''bHM6WyJjcDEyNTgiLCJ3aW5kb3dzLTEyNTgiLCJ4LWNwMTI1OCJdLG5hbWU6IndpbmRvd3MtMTI1OCJ9LHtsYWJlbHM6WyJ4LW1hYy1jeXJpbGxpYyIsIngtbWFjLXVrcmFpbmlhbiJdLG5hbWU6IngtbWFjLWN5cmlsbGljIn1dLGhlYWRpbmc6IkxlZ2FjeSBzaW5nbGUtYnl0ZSBlbmNvZGlu''@;'; put 'put ''Z3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY2hpbmVzZSIsImNzZ2IyMzEyIiwiY3Npc281OGdiMjMxMjgwIiwiZ2IyMzEyIiwiZ2JfMjMxMiIsImdiXzIzMTItODAiLCJnYmsiLCJpc28taXItNTgiLCJ4LWdiayJdLG5hbWU6IkdCSyJ9LHtsYWJlbHM6WyJnYjE4MDMwIl0sbmFtZToiZ2Ix''@;'; put 'put ''ODAzMCJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlIChzaW1wbGlmaWVkKSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiYmlnNSIsImJpZzUtaGtzY3MiLCJjbi1iaWc1IiwiY3NiaWc1IiwieC14LWJpZzUiXSxuYW1lOiJCaWc1In1dLGhlYWRpbmc6Ikxl''@;'; put 'put ''Z2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHRyYWRpdGlvbmFsKSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY3NldWNwa2RmbXRqYXBhbmVzZSIsImV1Yy1qcCIsIngtZXVjLWpwIl0sbmFtZToiRVVDLUpQIn0se2xhYmVsczpbImNzaXNvMjAyMmpwIiwiaXNvLTIwMjItanAi''@;'; put 'put ''XSxuYW1lOiJJU08tMjAyMi1KUCJ9LHtsYWJlbHM6WyJjc3NoaWZ0amlzIiwibXM5MzIiLCJtc19rYW5qaSIsInNoaWZ0LWppcyIsInNoaWZ0X2ppcyIsInNqaXMiLCJ3aW5kb3dzLTMxaiIsIngtc2ppcyJdLG5hbWU6IlNoaWZ0X0pJUyJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBK''@;'; put 'put ''YXBhbmVzZSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY3NldWNrciIsImNza3NjNTYwMTE5ODciLCJldWMta3IiLCJpc28taXItMTQ5Iiwia29yZWFuIiwia3NfY181NjAxLTE5ODciLCJrc19jXzU2MDEtMTk4OSIsImtzYzU2MDEiLCJrc2NfNTYwMSIsIndpbmRvd3MtOTQ5''@;'; put 'put ''Il0sbmFtZToiRVVDLUtSIn1dLGhlYWRpbmc6IkxlZ2FjeSBtdWx0aS1ieXRlIEtvcmVhbiBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY3Npc28yMDIya3IiLCJoei1nYi0yMzEyIiwiaXNvLTIwMjItY24iLCJpc28tMjAyMi1jbi1leHQiLCJpc28tMjAyMi1rciJdLG5hbWU6''@;'; put 'put ''InJlcGxhY2VtZW50In0se2xhYmVsczpbInV0Zi0xNmJlIl0sbmFtZToiVVRGLTE2QkUifSx7bGFiZWxzOlsidXRmLTE2IiwidXRmLTE2bGUiXSxuYW1lOiJVVEYtMTZMRSJ9LHtsYWJlbHM6WyJ4LXVzZXItZGVmaW5lZCJdLG5hbWU6IngtdXNlci1kZWZpbmVkIn1dLGhlYWRpbmc6IkxlZ2Fj''@;'; put 'put ''eSBtaXNjZWxsYW5lb3VzIGVuY29kaW5ncyJ9XSxuZT17fTtKLmZvckVhY2goZnVuY3Rpb24oQWUpe0FlLmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKF90KXtfdC5sYWJlbHMuZm9yRWFjaChmdW5jdGlvbihudCl7bmVbbnRdPV90fSl9KX0pO3ZhciBwLGllPXt9LGxlPXt9O2Z1bmN0aW9u''@;'; put 'put ''IG1lKEFlLF90KXtyZXR1cm4gX3QmJl90W0FlXXx8bnVsbH1mdW5jdGlvbiBfZShBZSxfdCl7dmFyIG50PV90LmluZGV4T2YoQWUpO3JldHVybi0xPT09bnQ/bnVsbDpudH1mdW5jdGlvbiBUZShBZSl7aWYoISgiZW5jb2RpbmctaW5kZXhlcyJpbiBJKSl0aHJvdyBFcnJvcigiSW5kZXhlcyBt''@;'; put 'put ''aXNzaW5nLiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7cmV0dXJuIElbImVuY29kaW5nLWluZGV4ZXMiXVtBZV19dmFyIHgsQz0idXRmLTgiO2Z1bmN0aW9uIFQoQWUsX3Qpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFQpKXRocm93IFR5cGVF''@;'; put 'put ''cnJvcigiQ2FsbGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0ICduZXcnPyIpO0FlPXZvaWQgMCE9PUFlP1N0cmluZyhBZSk6QyxfdD13KF90KSx0aGlzLl9lbmNvZGluZz1udWxsLHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9pZ25vcmVCT009ITEsdGhpcy5fQk9Nc2Vlbj0hMSx0''@;'; put 'put ''aGlzLl9lcnJvcl9tb2RlPSJyZXBsYWNlbWVudCIsdGhpcy5fZG9fbm90X2ZsdXNoPSExO3ZhciBudD1lZShBZSk7aWYobnVsbD09PW50fHwicmVwbGFjZW1lbnQiPT09bnQubmFtZSl0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0FlKTtpZighbGVbbnQubmFtZV0pdGhy''@;'; put 'put ''b3cgRXJyb3IoIkRlY29kZXIgbm90IHByZXNlbnQuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTt2YXIgUWU9dGhpcztyZXR1cm4gUWUuX2VuY29kaW5nPW50LF90LmZhdGFsJiYoUWUuX2Vycm9yX21vZGU9ImZhdGFsIiksX3QuaWdub3Jl''@;'; put 'put ''Qk9NJiYoUWUuX2lnbm9yZUJPTT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5fHwodGhpcy5lbmNvZGluZz1RZS5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpLHRoaXMuZmF0YWw9ImZhdGFsIj09PVFlLl9lcnJvcl9tb2RlLHRoaXMuaWdub3JlQk9NPVFlLl9pZ25vcmVCT00pLFFlfWZ1''@;'; put 'put ''bmN0aW9uIEgoQWUsX3Qpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEgpKXRocm93IFR5cGVFcnJvcigiQ2FsbGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0ICduZXcnPyIpO2lmKF90PXcoX3QpLHRoaXMuX2VuY29kaW5nPW51bGwsdGhpcy5fZW5jb2Rlcj1udWxsLHRoaXMuX2RvX25v''@;'; put 'put ''dF9mbHVzaD0hMSx0aGlzLl9mYXRhbD1fdC5mYXRhbD8iZmF0YWwiOiJyZXBsYWNlbWVudCIsX3QuTk9OU1RBTkRBUkRfYWxsb3dMZWdhY3lFbmNvZGluZyl7dmFyIFFlPWVlKEFlPXZvaWQgMCE9PUFlP1N0cmluZyhBZSk6Qyk7aWYobnVsbD09PVFlfHwicmVwbGFjZW1lbnQiPT09UWUubmFt''@;'; put 'put ''ZSl0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0FlKTtpZighaWVbUWUubmFtZV0pdGhyb3cgRXJyb3IoIkVuY29kZXIgbm90IHByZXNlbnQuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTt0aGlzLl9lbmNvZGluZz1R''@;'; put 'put ''ZX1lbHNlIHRoaXMuX2VuY29kaW5nPWVlKCJ1dGYtOCIpLHZvaWQgMCE9PUFlJiYiY29uc29sZSJpbiBJJiZjb25zb2xlLndhcm4oIlRleHRFbmNvZGVyIGNvbnN0cnVjdG9yIGNhbGxlZCB3aXRoIGVuY29kaW5nIGxhYmVsLCB3aGljaCBpcyBpZ25vcmVkLiIpO3JldHVybiBPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHl8fCh0aGlzLmVuY29kaW5nPXRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKSksdGhpc31mdW5jdGlvbiBqKEFlKXt2YXIgX3Q9QWUuZmF0YWwsbnQ9MCxRZT0wLHVuPTAseXQ9MTI4LE10PTE5MTt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oRHQsaXQpe2lmKGl0PT09''@;'; put 'put ''TiYmMCE9PXVuKXJldHVybiB1bj0wLFUoX3QpO2lmKGl0PT09TilyZXR1cm4gSztpZigwPT09dW4pe2lmKF8oaXQsMCwxMjcpKXJldHVybiBpdDtpZihfKGl0LDE5NCwyMjMpKXVuPTEsbnQ9MzEmaXQ7ZWxzZSBpZihfKGl0LDIyNCwyMzkpKTIyND09PWl0JiYoeXQ9MTYwKSwyMzc9PT1pdCYm''@;'; put 'put ''KE10PTE1OSksdW49MixudD0xNSZpdDtlbHNle2lmKCFfKGl0LDI0MCwyNDQpKXJldHVybiBVKF90KTsyNDA9PT1pdCYmKHl0PTE0NCksMjQ0PT09aXQmJihNdD0xNDMpLHVuPTMsbnQ9NyZpdH1yZXR1cm4gbnVsbH1pZighXyhpdCx5dCxNdCkpcmV0dXJuIG50PXVuPVFlPTAseXQ9MTI4LE10''@;'; put 'put ''PTE5MSxEdC5wcmVwZW5kKGl0KSxVKF90KTtpZih5dD0xMjgsTXQ9MTkxLG50PW50PDw2fDYzJml0LChRZSs9MSkhPT11bilyZXR1cm4gbnVsbDt2YXIgJGU9bnQ7cmV0dXJuIG50PXVuPVFlPTAsJGV9fWZ1bmN0aW9uIEUoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihudCxRZSl7aWYoUWU9''@;'; put 'put ''PT1OKXJldHVybiBLO2lmKHooUWUpKXJldHVybiBRZTt2YXIgdW4seXQ7XyhRZSwxMjgsMjA0Nyk/KHVuPTEseXQ9MTkyKTpfKFFlLDIwNDgsNjU1MzUpPyh1bj0yLHl0PTIyNCk6XyhRZSw2NTUzNiwxMTE0MTExKSYmKHVuPTMseXQ9MjQwKTtmb3IodmFyIE10PVsoUWU+PjYqdW4pK3l0XTt1''@;'; put 'put ''bj4wOylNdC5wdXNoKDEyOHw2MyZRZT4+NioodW4tMSkpLHVuLT0xO3JldHVybiBNdH19ZnVuY3Rpb24gbShBZSxfdCl7dmFyIG50PV90LmZhdGFsO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSx1bil7aWYodW49PT1OKXJldHVybiBLO2lmKE8odW4pKXJldHVybiB1bjt2YXIgeXQ9QWVbdW4t''@;'; put 'put ''MTI4XTtyZXR1cm4gbnVsbD09PXl0P1UobnQpOnl0fX1mdW5jdGlvbiBBKEFlLF90KXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsdW4pe2lmKHVuPT09TilyZXR1cm4gSztpZih6KHVuKSlyZXR1cm4gdW47dmFyIHl0PV9lKHVuLEFlKTtyZXR1cm4gbnVsbD09PXl0JiZXKHVuKSx5dCsxMjh9''@;'; put 'put ''fWZ1bmN0aW9uIGFlKEFlKXt2YXIgX3Q9QWUuZmF0YWwsbnQ9MCxRZT0wLHVuPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHl0LE10KXtpZihNdD09PU4mJjA9PT1udCYmMD09PVFlJiYwPT09dW4pcmV0dXJuIEs7dmFyIER0O2lmKE10PT09TiYmKDAhPT1udHx8MCE9PVFlfHwwIT09dW4pJiYo''@;'; put 'put ''bnQ9MCxRZT0wLHVuPTAsVShfdCkpLDAhPT11bil7RHQ9bnVsbCxfKE10LDQ4LDU3KSYmKER0PWZ1bmN0aW9uIFNlKEFlKXtpZihBZT4zOTQxOSYmQWU8MTg5ZTN8fEFlPjEyMzc1NzUpcmV0dXJuIG51bGw7aWYoNzQ1Nz09PUFlKXJldHVybiA1OTMzNTt2YXIgdW4sX3Q9MCxudD0wLFFlPVRl''@;'; put 'put ''KCJnYjE4MDMwLXJhbmdlcyIpO2Zvcih1bj0wO3VuPFFlLmxlbmd0aDsrK3VuKXt2YXIgeXQ9UWVbdW5dO2lmKCEoeXRbMF08PUFlKSlicmVhaztfdD15dFswXSxudD15dFsxXX1yZXR1cm4gbnQrQWUtX3R9KDEwKigxMjYqKDEwKihudC0xMjkpK1FlLTQ4KSt1bi0xMjkpK010LTQ4KSk7dmFy''@;'; put 'put ''IGl0PVtRZSx1bixNdF07cmV0dXJuIG50PTAsUWU9MCx1bj0wLG51bGw9PT1EdD8oeXQucHJlcGVuZChpdCksVShfdCkpOkR0fWlmKDAhPT1RZSlyZXR1cm4gXyhNdCwxMjksMjU0KT8odW49TXQsbnVsbCk6KHl0LnByZXBlbmQoW1FlLE10XSksbnQ9MCxRZT0wLFUoX3QpKTtpZigwIT09bnQp''@;'; put 'put ''e2lmKF8oTXQsNDgsNTcpKXJldHVybiBRZT1NdCxudWxsO3ZhciAkZT1udCx0dD1udWxsO250PTA7dmFyIEhlPU10PDEyNz82NDo2NTtyZXR1cm4oXyhNdCw2NCwxMjYpfHxfKE10LDEyOCwyNTQpKSYmKHR0PTE5MCooJGUtMTI5KSsoTXQtSGUpKSxudWxsPT09KER0PW51bGw9PT10dD9udWxs''@;'; put 'put ''Om1lKHR0LFRlKCJnYjE4MDMwIikpKSYmTyhNdCkmJnl0LnByZXBlbmQoTXQpLG51bGw9PT1EdD9VKF90KTpEdH1yZXR1cm4gTyhNdCk/TXQ6MTI4PT09TXQ/ODM2NDpfKE10LDEyOSwyNTQpPyhudD1NdCxudWxsKTpVKF90KX19ZnVuY3Rpb24gdGUoQWUsX3Qpe3RoaXMuaGFuZGxlcj1mdW5j''@;'; put 'put ''dGlvbihRZSx1bil7aWYodW49PT1OKXJldHVybiBLO2lmKHoodW4pKXJldHVybiB1bjtpZig1ODg1Mz09PXVuKXJldHVybiBXKHVuKTtpZihfdCYmODM2ND09PXVuKXJldHVybiAxMjg7dmFyIHl0PV9lKHVuLFRlKCJnYjE4MDMwIikpO2lmKG51bGwhPT15dCl7dmFyIER0PXl0JTE5MDtyZXR1''@;'; put 'put ''cm5bQih5dC8xOTApKzEyOSxEdCsoRHQ8NjM/NjQ6NjUpXX1pZihfdClyZXR1cm4gVyh1bik7eXQ9ZnVuY3Rpb24gamUoQWUpe2lmKDU5MzM1PT09QWUpcmV0dXJuIDc0NTc7dmFyIHVuLF90PTAsbnQ9MCxRZT1UZSgiZ2IxODAzMC1yYW5nZXMiKTtmb3IodW49MDt1bjxRZS5sZW5ndGg7Kyt1''@;'; put 'put ''bil7dmFyIHl0PVFlW3VuXTtpZighKHl0WzFdPD1BZSkpYnJlYWs7X3Q9eXRbMV0sbnQ9eXRbMF19cmV0dXJuIG50K0FlLV90fSh1bik7dmFyICRlPUIoeXQvMTAvMTI2LzEwKSx0dD1CKCh5dC09MTAqJGUqMTI2KjEwKS8xMC8xMjYpLEhlPUIoKHl0LT0xMCp0dCoxMjYpLzEwKTtyZXR1cm5b''@;'; put 'put ''JGUrMTI5LHR0KzQ4LEhlKzEyOSx5dC0xMCpIZSs0OF19fWZ1bmN0aW9uIHNlKEFlKXt2YXIgX3Q9QWUuZmF0YWwsbnQ9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsdW4pe2lmKHVuPT09TiYmMCE9PW50KXJldHVybiBudD0wLFUoX3QpO2lmKHVuPT09TiYmMD09PW50KXJldHVybiBLO2lm''@;'; put 'put ''KDAhPT1udCl7dmFyIHl0PW50LE10PW51bGw7bnQ9MDt2YXIgRHQ9dW48MTI3PzY0Ojk4O3N3aXRjaCgoXyh1biw2NCwxMjYpfHxfKHVuLDE2MSwyNTQpKSYmKE10PTE1NyooeXQtMTI5KSsodW4tRHQpKSxNdCl7Y2FzZSAxMTMzOnJldHVyblsyMDIsNzcyXTtjYXNlIDExMzU6cmV0dXJuWzIw''@;'; put 'put ''Miw3ODBdO2Nhc2UgMTE2NDpyZXR1cm5bMjM0LDc3Ml07Y2FzZSAxMTY2OnJldHVyblsyMzQsNzgwXX12YXIgaXQ9bnVsbD09PU10P251bGw6bWUoTXQsVGUoImJpZzUiKSk7cmV0dXJuIG51bGw9PT1pdCYmTyh1bikmJlFlLnByZXBlbmQodW4pLG51bGw9PT1pdD9VKF90KTppdH1yZXR1cm4g''@;'; put 'put ''Tyh1bik/dW46Xyh1biwxMjksMjU0KT8obnQ9dW4sbnVsbCk6VShfdCl9fWZ1bmN0aW9uIHdlKEFlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obnQsUWUpe2lmKFFlPT09TilyZXR1cm4gSztpZih6KFFlKSlyZXR1cm4gUWU7dmFyIHVuPWZ1bmN0aW9uIGIoQWUpe3ZhciBfdD14PXh8fFRlKCJi''@;'; put 'put ''aWc1IikubWFwKGZ1bmN0aW9uKG50LFFlKXtyZXR1cm4gUWU8NTAyND9udWxsOm50fSk7cmV0dXJuIDk1NTI9PT1BZXx8OTU2Nj09PUFlfHw5NTY5PT09QWV8fDk1Nzg9PT1BZXx8MjEzMTM9PT1BZXx8MjEzMTc9PT1BZT9fdC5sYXN0SW5kZXhPZihBZSk6X2UoQWUsX3QpfShRZSk7aWYobnVs''@;'; put 'put ''bD09PXVuKXJldHVybiBXKFFlKTt2YXIgeXQ9Qih1bi8xNTcpKzEyOTtpZih5dDwxNjEpcmV0dXJuIFcoUWUpO3ZhciBNdD11biUxNTc7cmV0dXJuW3l0LE10KyhNdDw2Mz82NDo5OCldfX1mdW5jdGlvbiBVZShBZSl7dmFyIF90PUFlLmZhdGFsLG50PSExLFFlPTA7dGhpcy5oYW5kbGVyPWZ1''@;'; put 'put ''bmN0aW9uKHVuLHl0KXtpZih5dD09PU4mJjAhPT1RZSlyZXR1cm4gUWU9MCxVKF90KTtpZih5dD09PU4mJjA9PT1RZSlyZXR1cm4gSztpZigxNDI9PT1RZSYmXyh5dCwxNjEsMjIzKSlyZXR1cm4gUWU9MCw2NTIxNit5dDtpZigxNDM9PT1RZSYmXyh5dCwxNjEsMjU0KSlyZXR1cm4gbnQ9ITAs''@;'; put 'put ''UWU9eXQsbnVsbDtpZigwIT09UWUpe3ZhciBNdD1RZTtRZT0wO3ZhciBEdD1udWxsO3JldHVybiBfKE10LDE2MSwyNTQpJiZfKHl0LDE2MSwyNTQpJiYoRHQ9bWUoOTQqKE10LTE2MSkrKHl0LTE2MSksVGUobnQ/ImppczAyMTIiOiJqaXMwMjA4IikpKSxudD0hMSxfKHl0LDE2MSwyNTQpfHx1''@;'; put 'put ''bi5wcmVwZW5kKHl0KSxudWxsPT09RHQ/VShfdCk6RHR9cmV0dXJuIE8oeXQpP3l0OjE0Mj09PXl0fHwxNDM9PT15dHx8Xyh5dCwxNjEsMjU0KT8oUWU9eXQsbnVsbCk6VShfdCl9fWZ1bmN0aW9uIEplKEFlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obnQsUWUpe2lmKFFlPT09TilyZXR1cm4g''@;'; put 'put ''SztpZih6KFFlKSlyZXR1cm4gUWU7aWYoMTY1PT09UWUpcmV0dXJuIDkyO2lmKDgyNTQ9PT1RZSlyZXR1cm4gMTI2O2lmKF8oUWUsNjUzNzcsNjU0MzkpKXJldHVyblsxNDIsUWUtNjUzNzcrMTYxXTs4NzIyPT09UWUmJihRZT02NTI5Myk7dmFyIHVuPV9lKFFlLFRlKCJqaXMwMjA4IikpO3Jl''@;'; put 'put ''dHVybiBudWxsPT09dW4/VyhRZSk6W0IodW4vOTQpKzE2MSx1biU5NCsxNjFdfX1mdW5jdGlvbiBvdChBZSl7dmFyIF90PUFlLmZhdGFsLFFlPTAseXQ9MCxNdD0hMTt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oRHQsaXQpe3N3aXRjaChRZSl7ZGVmYXVsdDpjYXNlIDA6cmV0dXJuIDI3PT09aXQ/''@;'; put 'put ''KFFlPTUsbnVsbCk6XyhpdCwwLDEyNykmJjE0IT09aXQmJjE1IT09aXQmJjI3IT09aXQ/KE10PSExLGl0KTppdD09PU4/SzooTXQ9ITEsVShfdCkpO2Nhc2UgMTpyZXR1cm4gMjc9PT1pdD8oUWU9NSxudWxsKTo5Mj09PWl0PyhNdD0hMSwxNjUpOjEyNj09PWl0PyhNdD0hMSw4MjU0KTpfKGl0''@;'; put 'put ''LDAsMTI3KSYmMTQhPT1pdCYmMTUhPT1pdCYmMjchPT1pdCYmOTIhPT1pdCYmMTI2IT09aXQ/KE10PSExLGl0KTppdD09PU4/SzooTXQ9ITEsVShfdCkpO2Nhc2UgMjpyZXR1cm4gMjc9PT1pdD8oUWU9NSxudWxsKTpfKGl0LDMzLDk1KT8oTXQ9ITEsNjUzNDQraXQpOml0PT09Tj9LOihNdD0h''@;'; put 'put ''MSxVKF90KSk7Y2FzZSAzOnJldHVybiAyNz09PWl0PyhRZT01LG51bGwpOl8oaXQsMzMsMTI2KT8oTXQ9ITEseXQ9aXQsUWU9NCxudWxsKTppdD09PU4/SzooTXQ9ITEsVShfdCkpO2Nhc2UgNDppZigyNz09PWl0KXJldHVybiBRZT01LFUoX3QpO2lmKF8oaXQsMzMsMTI2KSl7UWU9Mzt2YXIg''@;'; put 'put ''dHQ9bWUoOTQqKHl0LTMzKStpdC0zMyxUZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PXR0P1UoX3QpOnR0fXJldHVybiBpdD09PU4/KFFlPTMsRHQucHJlcGVuZChpdCksVShfdCkpOihRZT0zLFUoX3QpKTtjYXNlIDU6cmV0dXJuIDM2PT09aXR8fDQwPT09aXQ/KHl0PWl0LFFlPTYsbnVs''@;'; put 'put ''bCk6KER0LnByZXBlbmQoaXQpLE10PSExLFFlPTAsVShfdCkpO2Nhc2UgNjp2YXIgSGU9eXQ7eXQ9MDt2YXIgdXQ9bnVsbDtpZig0MD09PUhlJiY2Nj09PWl0JiYodXQ9MCksNDA9PT1IZSYmNzQ9PT1pdCYmKHV0PTEpLDQwPT09SGUmJjczPT09aXQmJih1dD0yKSwzNj09PUhlJiYoNjQ9PT1p''@;'; put 'put ''dHx8NjY9PT1pdCkmJih1dD0zKSxudWxsIT09dXQpe1FlPVFlPXV0O3ZhciBxdD1NdDtyZXR1cm4gTXQ9ITAscXQ/VShfdCk6bnVsbH1yZXR1cm4gRHQucHJlcGVuZChbSGUsaXRdKSxNdD0hMSxRZT0wLFUoX3QpfX19ZnVuY3Rpb24geGUoQWUpe3ZhciBRZT0wO3RoaXMuaGFuZGxlcj1mdW5j''@;'; put 'put ''dGlvbih1bix5dCl7aWYoeXQ9PT1OJiYwIT09UWUpcmV0dXJuIHVuLnByZXBlbmQoeXQpLFFlPTAsWzI3LDQwLDY2XTtpZih5dD09PU4mJjA9PT1RZSlyZXR1cm4gSztpZighKDAhPT1RZSYmMSE9PVFlfHwxNCE9PXl0JiYxNSE9PXl0JiYyNyE9PXl0KSlyZXR1cm4gVyg2NTUzMyk7aWYoMD09''@;'; put 'put ''PVFlJiZ6KHl0KSlyZXR1cm4geXQ7aWYoMT09PVFlJiYoeih5dCkmJjkyIT09eXQmJjEyNiE9PXl0fHwxNjU9PXl0fHw4MjU0PT15dCkpe2lmKHooeXQpKXJldHVybiB5dDtpZigxNjU9PT15dClyZXR1cm4gOTI7aWYoODI1ND09PXl0KXJldHVybiAxMjZ9aWYoeih5dCkmJjAhPT1RZSlyZXR1''@;'; put 'put ''cm4gdW4ucHJlcGVuZCh5dCksUWU9MCxbMjcsNDAsNjZdO2lmKCgxNjU9PT15dHx8ODI1ND09PXl0KSYmMSE9PVFlKXJldHVybiB1bi5wcmVwZW5kKHl0KSxRZT0xLFsyNyw0MCw3NF07ODcyMj09PXl0JiYoeXQ9NjUyOTMpO3ZhciBNdD1fZSh5dCxUZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVs''@;'; put 'put ''bD09PU10P1coeXQpOjIhPT1RZT8odW4ucHJlcGVuZCh5dCksUWU9MixbMjcsMzYsNjZdKTpbQihNdC85NCkrMzMsTXQlOTQrMzNdfX1mdW5jdGlvbiB2ZShBZSl7dmFyIF90PUFlLmZhdGFsLG50PTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLHVuKXtpZih1bj09PU4mJjAhPT1udClyZXR1''@;'; put 'put ''cm4gbnQ9MCxVKF90KTtpZih1bj09PU4mJjA9PT1udClyZXR1cm4gSztpZigwIT09bnQpe3ZhciB5dD1udCxNdD1udWxsO250PTA7dmFyIER0PXVuPDEyNz82NDo2NSxpdD15dDwxNjA/MTI5OjE5MztpZigoXyh1biw2NCwxMjYpfHxfKHVuLDEyOCwyNTIpKSYmKE10PTE4OCooeXQtaXQpK3Vu''@;'; put 'put ''LUR0KSxfKE10LDg4MzYsMTA3MTUpKXJldHVybiA0ODUwOCtNdDt2YXIgJGU9bnVsbD09PU10P251bGw6bWUoTXQsVGUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT0kZSYmTyh1bikmJlFlLnByZXBlbmQodW4pLG51bGw9PT0kZT9VKF90KTokZX1yZXR1cm4gTyh1bil8fDEyOD09PXVuP3Vu''@;'; put 'put ''Ol8odW4sMTYxLDIyMyk/NjUyMTYrdW46Xyh1biwxMjksMTU5KXx8Xyh1biwyMjQsMjUyKT8obnQ9dW4sbnVsbCk6VShfdCl9fWZ1bmN0aW9uIFhlKEFlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obnQsUWUpe2lmKFFlPT09TilyZXR1cm4gSztpZih6KFFlKXx8MTI4PT09UWUpcmV0dXJuIFFl''@;'; put 'put ''O2lmKDE2NT09PVFlKXJldHVybiA5MjtpZig4MjU0PT09UWUpcmV0dXJuIDEyNjtpZihfKFFlLDY1Mzc3LDY1NDM5KSlyZXR1cm4gUWUtNjUzNzcrMTYxOzg3MjI9PT1RZSYmKFFlPTY1MjkzKTt2YXIgdW49ZnVuY3Rpb24gVihBZSl7cmV0dXJuKHA9cHx8VGUoImppczAyMDgiKS5tYXAoZnVu''@;'; put 'put ''Y3Rpb24obnQsUWUpe3JldHVybiBfKFFlLDgyNzIsODgzNSk/bnVsbDpudH0pKS5pbmRleE9mKEFlKX0oUWUpO2lmKG51bGw9PT11bilyZXR1cm4gVyhRZSk7dmFyIHl0PUIodW4vMTg4KSxEdD11biUxODg7cmV0dXJuW3l0Kyh5dDwzMT8xMjk6MTkzKSxEdCsoRHQ8NjM/NjQ6NjUpXX19ZnVu''@;'; put 'put ''Y3Rpb24gemUoQWUpe3ZhciBfdD1BZS5mYXRhbCxudD0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSx1bil7aWYodW49PT1OJiYwIT09bnQpcmV0dXJuIG50PTAsVShfdCk7aWYodW49PT1OJiYwPT09bnQpcmV0dXJuIEs7aWYoMCE9PW50KXt2YXIgeXQ9bnQsTXQ9bnVsbDtudD0wLF8odW4s''@;'; put 'put ''NjUsMjU0KSYmKE10PTE5MCooeXQtMTI5KSsodW4tNjUpKTt2YXIgRHQ9bnVsbD09PU10P251bGw6bWUoTXQsVGUoImV1Yy1rciIpKTtyZXR1cm4gbnVsbD09PU10JiZPKHVuKSYmUWUucHJlcGVuZCh1biksbnVsbD09PUR0P1UoX3QpOkR0fXJldHVybiBPKHVuKT91bjpfKHVuLDEyOSwyNTQp''@;'; put 'put ''PyhudD11bixudWxsKTpVKF90KX19ZnVuY3Rpb24gRGUoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihudCxRZSl7aWYoUWU9PT1OKXJldHVybiBLO2lmKHooUWUpKXJldHVybiBRZTt2YXIgdW49X2UoUWUsVGUoImV1Yy1rciIpKTtyZXR1cm4gbnVsbD09PXVuP1coUWUpOltCKHVuLzE5MCkr''@;'; put 'put ''MTI5LHVuJTE5MCs2NV19fWZ1bmN0aW9uIEZlKEFlLF90KXt2YXIgbnQ9QWU+PjgsUWU9MjU1JkFlO3JldHVybiBfdD9bbnQsUWVdOltRZSxudF19ZnVuY3Rpb24gT2UoQWUsX3Qpe3ZhciBudD1fdC5mYXRhbCxRZT1udWxsLHVuPW51bGw7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHl0LE10KXtp''@;'; put 'put ''ZihNdD09PU4mJihudWxsIT09UWV8fG51bGwhPT11bikpcmV0dXJuIFUobnQpO2lmKE10PT09TiYmbnVsbD09PVFlJiZudWxsPT09dW4pcmV0dXJuIEs7aWYobnVsbD09PVFlKXJldHVybiBRZT1NdCxudWxsO3ZhciBEdDtpZihEdD1BZT8oUWU8PDgpK010OihNdDw8OCkrUWUsUWU9bnVsbCxu''@;'; put 'put ''dWxsIT09dW4pe3ZhciBpdD11bjtyZXR1cm4gdW49bnVsbCxfKER0LDU2MzIwLDU3MzQzKT82NTUzNisxMDI0KihpdC01NTI5NikrKER0LTU2MzIwKTooeXQucHJlcGVuZChGZShEdCxBZSkpLFUobnQpKX1yZXR1cm4gXyhEdCw1NTI5Niw1NjMxOSk/KHVuPUR0LG51bGwpOl8oRHQsNTYzMjAs''@;'; put 'put ''NTczNDMpP1UobnQpOkR0fX1mdW5jdGlvbiBJZShBZSxfdCl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLHVuKXtpZih1bj09PU4pcmV0dXJuIEs7aWYoXyh1biwwLDY1NTM1KSlyZXR1cm4gRmUodW4sQWUpO3ZhciB5dD1GZSg1NTI5NisodW4tNjU1MzY+PjEwKSxBZSksTXQ9RmUoNTYzMjAr''@;'; put 'put ''KHVuLTY1NTM2JjEwMjMpLEFlKTtyZXR1cm4geXQuY29uY2F0KE10KX19ZnVuY3Rpb24gVmUoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihudCxRZSl7cmV0dXJuIFFlPT09Tj9LOk8oUWUpP1FlOjYzMzYwK1FlLTEyOH19ZnVuY3Rpb24ga2UoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihu''@;'; put 'put ''dCxRZSl7cmV0dXJuIFFlPT09Tj9LOnooUWUpP1FlOl8oUWUsNjMzNjAsNjM0ODcpP1FlLTYzMzYwKzEyODpXKFFlKX19T2JqZWN0LmRlZmluZVByb3BlcnR5JiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJlbmNvZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJmYXRhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiJmYXRhbCI9PT10aGlzLl9lcnJvcl9tb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULnByb3RvdHlwZSwiaWdu''@;'; put 'put ''b3JlQk9NIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lnbm9yZUJPTX19KSksVC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKF90LG50KXt2YXIgUWU7UWU9Im9iamVjdCI9PXR5cGVvZiBfdCYmX3QgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9uZXcgVWludDhBcnJheShfdCk6Im9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBfdCYmImJ1ZmZlciJpbiBfdCYmX3QuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/bmV3IFVpbnQ4QXJyYXkoX3QuYnVmZmVyLF90LmJ5dGVPZmZzZXQsX3QuYnl0ZUxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoMCksbnQ9dyhudCksdGhpcy5fZG9fbm90X2ZsdXNo''@;'; put 'put ''fHwodGhpcy5fZGVjb2Rlcj1sZVt0aGlzLl9lbmNvZGluZy5uYW1lXSh7ZmF0YWw6ImZhdGFsIj09PXRoaXMuX2Vycm9yX21vZGV9KSx0aGlzLl9CT01zZWVuPSExKSx0aGlzLl9kb19ub3RfZmx1c2g9ISFudC5zdHJlYW07Zm9yKHZhciBNdCx1bj1uZXcgTChRZSkseXQ9W107Oyl7dmFyIER0''@;'; put 'put ''PXVuLnJlYWQoKTtpZihEdD09PU58fChNdD10aGlzLl9kZWNvZGVyLmhhbmRsZXIodW4sRHQpKT09PUspYnJlYWs7bnVsbCE9PU10JiYoQXJyYXkuaXNBcnJheShNdCk/eXQucHVzaC5hcHBseSh5dCxNdCk6eXQucHVzaChNdCkpfWlmKCF0aGlzLl9kb19ub3RfZmx1c2gpe2Rve2lmKChNdD10''@;'; put 'put ''aGlzLl9kZWNvZGVyLmhhbmRsZXIodW4sdW4ucmVhZCgpKSk9PT1LKWJyZWFrO251bGwhPT1NdCYmKEFycmF5LmlzQXJyYXkoTXQpP3l0LnB1c2guYXBwbHkoeXQsTXQpOnl0LnB1c2goTXQpKX13aGlsZSghdW4uZW5kT2ZTdHJlYW0oKSk7dGhpcy5fZGVjb2Rlcj1udWxsfXJldHVybiBmdW5j''@;'; put 'put ''dGlvbiBpdCgkZSl7cmV0dXJuIGZ1bmN0aW9uIGcoQWUsX3Qpe3JldHVybi0xIT09QWUuaW5kZXhPZihfdCl9KFsiVVRGLTgiLCJVVEYtMTZMRSIsIlVURi0xNkJFIl0sdGhpcy5fZW5jb2RpbmcubmFtZSkmJiF0aGlzLl9pZ25vcmVCT00mJiF0aGlzLl9CT01zZWVuJiYoJGUubGVuZ3RoPjAm''@;'; put 'put ''JjY1Mjc5PT09JGVbMF0/KHRoaXMuX0JPTXNlZW49ITAsJGUuc2hpZnQoKSk6JGUubGVuZ3RoPjAmJih0aGlzLl9CT01zZWVuPSEwKSksZnVuY3Rpb24gRihBZSl7Zm9yKHZhciBfdD0iIixudD0wO250PEFlLmxlbmd0aDsrK250KXt2YXIgUWU9QWVbbnRdO1FlPD02NTUzNT9fdCs9U3RyaW5n''@;'; put 'put ''LmZyb21DaGFyQ29kZShRZSk6KFFlLT02NTUzNixfdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoUWU+PjEwKSw1NjMyMCsoMTAyMyZRZSkpKX1yZXR1cm4gX3R9KCRlKX0uY2FsbCh0aGlzLHl0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5w''@;'; put 'put ''cm90b3R5cGUsImVuY29kaW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKX19KSxILnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oX3QsbnQpe190PXZvaWQgMD09PV90PyIiOlN0cmluZyhfdCksbnQ9dyhudCksdGhpcy5fZG9fbm90''@;'; put 'put ''X2ZsdXNofHwodGhpcy5fZW5jb2Rlcj1pZVt0aGlzLl9lbmNvZGluZy5uYW1lXSh7ZmF0YWw6ImZhdGFsIj09PXRoaXMuX2ZhdGFsfSkpLHRoaXMuX2RvX25vdF9mbHVzaD0hIW50LnN0cmVhbTtmb3IodmFyIHl0LFFlPW5ldyBMKGZ1bmN0aW9uIFAoQWUpe2Zvcih2YXIgX3Q9U3RyaW5nKEFl''@;'; put 'put ''KSxudD1fdC5sZW5ndGgsUWU9MCx1bj1bXTtRZTxudDspe3ZhciB5dD1fdC5jaGFyQ29kZUF0KFFlKTtpZih5dDw1NTI5Nnx8eXQ+NTczNDMpdW4ucHVzaCh5dCk7ZWxzZSBpZig1NjMyMDw9eXQmJnl0PD01NzM0Myl1bi5wdXNoKDY1NTMzKTtlbHNlIGlmKDU1Mjk2PD15dCYmeXQ8PTU2MzE5''@;'; put 'put ''KWlmKFFlPT09bnQtMSl1bi5wdXNoKDY1NTMzKTtlbHNle3ZhciBNdD1fdC5jaGFyQ29kZUF0KFFlKzEpOzU2MzIwPD1NdCYmTXQ8PTU3MzQzPyh1bi5wdXNoKDY1NTM2KygoMTAyMyZ5dCk8PDEwKSsoMTAyMyZNdCkpLFFlKz0xKTp1bi5wdXNoKDY1NTMzKX1RZSs9MX1yZXR1cm4gdW59KF90''@;'; put 'put ''KSksdW49W107Oyl7dmFyIE10PVFlLnJlYWQoKTtpZihNdD09PU58fCh5dD10aGlzLl9lbmNvZGVyLmhhbmRsZXIoUWUsTXQpKT09PUspYnJlYWs7QXJyYXkuaXNBcnJheSh5dCk/dW4ucHVzaC5hcHBseSh1bix5dCk6dW4ucHVzaCh5dCl9aWYoIXRoaXMuX2RvX25vdF9mbHVzaCl7Zm9yKDso''@;'; put 'put ''eXQ9dGhpcy5fZW5jb2Rlci5oYW5kbGVyKFFlLFFlLnJlYWQoKSkpIT09SzspQXJyYXkuaXNBcnJheSh5dCk/dW4ucHVzaC5hcHBseSh1bix5dCk6dW4ucHVzaCh5dCk7dGhpcy5fZW5jb2Rlcj1udWxsfXJldHVybiBuZXcgVWludDhBcnJheSh1bil9LGllWyJVVEYtOCJdPWZ1bmN0aW9uKEFl''@;'; put 'put ''KXtyZXR1cm4gbmV3IEUoQWUpfSxsZVsiVVRGLTgiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBqKEFlKX0sImVuY29kaW5nLWluZGV4ZXMiaW4gSSYmSi5mb3JFYWNoKGZ1bmN0aW9uKEFlKXsiTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5ncyI9PT1BZS5oZWFkaW5nJiZBZS5lbmNvZGlu''@;'; put 'put ''Z3MuZm9yRWFjaChmdW5jdGlvbihfdCl7dmFyIG50PV90Lm5hbWUsUWU9VGUobnQudG9Mb3dlckNhc2UoKSk7bGVbbnRdPWZ1bmN0aW9uKHVuKXtyZXR1cm4gbmV3IG0oUWUsdW4pfSxpZVtudF09ZnVuY3Rpb24odW4pe3JldHVybiBuZXcgQShRZSx1bil9fSl9KSxsZS5HQks9ZnVuY3Rpb24o''@;'; put 'put ''QWUpe3JldHVybiBuZXcgYWUoQWUpfSxpZS5HQks9ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgdGUoQWUsITApfSxpZS5nYjE4MDMwPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IHRlKEFlKX0sbGUuZ2IxODAzMD1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBhZShBZSl9LGllLkJpZzU9ZnVuY3Rp''@;'; put 'put ''b24oQWUpe3JldHVybiBuZXcgd2UoQWUpfSxsZS5CaWc1PWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IHNlKEFlKX0saWVbIkVVQy1KUCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IEplKEFlKX0sbGVbIkVVQy1KUCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IFVlKEFlKX0saWVbIklTTy0y''@;'; put 'put ''MDIyLUpQIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgeGUoQWUpfSxsZVsiSVNPLTIwMjItSlAiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBvdChBZSl9LGllLlNoaWZ0X0pJUz1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBYZShBZSl9LGxlLlNoaWZ0X0pJUz1mdW5jdGlvbihBZSl7cmV0''@;'; put 'put ''dXJuIG5ldyB2ZShBZSl9LGllWyJFVUMtS1IiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBEZShBZSl9LGxlWyJFVUMtS1IiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyB6ZShBZSl9LGllWyJVVEYtMTZCRSJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IEllKCEwLEFlKX0sbGVbIlVURi0x''@;'; put 'put ''NkJFIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgT2UoITAsQWUpfSxpZVsiVVRGLTE2TEUiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBJZSghMSxBZSl9LGxlWyJVVEYtMTZMRSJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IE9lKCExLEFlKX0saWVbIngtdXNlci1kZWZpbmVkIl09ZnVu''@;'; put 'put ''Y3Rpb24oQWUpe3JldHVybiBuZXcga2UoQWUpfSxsZVsieC11c2VyLWRlZmluZWQiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBWZShBZSl9LEkuVGV4dEVuY29kZXJ8fChJLlRleHRFbmNvZGVyPUgpLEkuVGV4dERlY29kZXJ8fChJLlRleHREZWNvZGVyPVQpLHVlLmV4cG9ydHMmJih1ZS5l''@;'; put 'put ''eHBvcnRzPXtUZXh0RW5jb2RlcjpJLlRleHRFbmNvZGVyLFRleHREZWNvZGVyOkkuVGV4dERlY29kZXIsRW5jb2RpbmdJbmRleGVzOklbImVuY29kaW5nLWluZGV4ZXMiXX0pfSh0aGlzfHx7fSl9LDMzOTg6dWU9PntmdW5jdGlvbiB5KEkpe3RyeXtpZighZ2xvYmFsLmxvY2FsU3RvcmFnZSly''@;'; put 'put ''ZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX12YXIgXz1nbG9iYWwubG9jYWxTdG9yYWdlW0ldO3JldHVybiBudWxsIT1fJiYidHJ1ZSI9PT1TdHJpbmcoXykudG9Mb3dlckNhc2UoKX11ZS5leHBvcnRzPWZ1bmN0aW9uIFgoSSxfKXtpZih5KCJub0RlcHJlY2F0aW9uIikpcmV0dXJuIEk7dmFyIGc9''@;'; put 'put ''ITE7cmV0dXJuIGZ1bmN0aW9uIEIoKXtpZighZyl7aWYoeSgidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihfKTt5KCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZShfKTpjb25zb2xlLndhcm4oXyksZz0hMH1yZXR1cm4gSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9''@;'; put 'put ''fX0sMTI5NTQ6KHVlLFgseSk9PnshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZXhwb3J0cy5pc191cmk9ZyxJLmV4cG9ydHMuaXNfaHR0cF91cmk9QixJLmV4cG9ydHMuaXNfaHR0cHNfdXJpPXcsSS5leHBvcnRzLmlzX3dlYl91cmk9UCxJLmV4cG9ydHMuaXNVcmk9ZyxJLmV4cG9ydHMu''@;'; put 'put ''aXNIdHRwVXJpPUIsSS5leHBvcnRzLmlzSHR0cHNVcmk9dyxJLmV4cG9ydHMuaXNXZWJVcmk9UDt2YXIgXz1mdW5jdGlvbihGKXtyZXR1cm4gRi5tYXRjaCgvKD86KFteOlwvPyNdKyk6KT8oPzpcL1wvKFteXC8/I10qKSk/KFtePyNdKikoPzpcPyhbXiNdKikpPyg/OiMoLiopKT8vKX07ZnVu''@;'; put 'put ''Y3Rpb24gZyhGKXtpZihGJiYhL1teYS16MC05XDpcL1w/XCNcW1xdXEBcIVwkXCZcJ1woXClcKlwrXCxcO1w9XC5cLVxfXH5cJV0vaS50ZXN0KEYpJiYhLyVbXjAtOWEtZl0vaS50ZXN0KEYpJiYhLyVbMC05YS1mXSg6P1teMC05YS1mXXwkKS9pLnRlc3QoRikpe3ZhciBPLE4sTCxLLFUsej0i''@;'; put 'put ''IixXPSIiO2lmKE49KE89XyhGKSlbMl0sTD1PWzNdLEs9T1s0XSxVPU9bNV0sKHo9T1sxXSkmJnoubGVuZ3RoJiZMLmxlbmd0aD49MCl7aWYoTiYmTi5sZW5ndGgpe2lmKDAhPT1MLmxlbmd0aCYmIS9eXC8vLnRlc3QoTCkpcmV0dXJufWVsc2UgaWYoL15cL1wvLy50ZXN0KEwpKXJldHVybjtp''@;'; put 'put ''ZigvXlthLXpdW2EtejAtOVwrXC1cLl0qJC8udGVzdCh6LnRvTG93ZXJDYXNlKCkpKXJldHVybiBXKz16KyI6IixOJiZOLmxlbmd0aCYmKFcrPSIvLyIrTiksVys9TCxLJiZLLmxlbmd0aCYmKFcrPSI/IitLKSxVJiZVLmxlbmd0aCYmKFcrPSIjIitVKSxXfX19ZnVuY3Rpb24gQihGLE8pe2lm''@;'; put 'put ''KGcoRikpe3ZhciB6LEssVyxZLE49IiIsTD0iIixVPSIiLHE9IiI7aWYoTD0oej1fKEYpKVsyXSxLPXpbM10sVz16WzRdLFk9els1XSxOPXpbMV0pe2lmKE8pe2lmKCJodHRwcyIhPU4udG9Mb3dlckNhc2UoKSlyZXR1cm59ZWxzZSBpZigiaHR0cCIhPU4udG9Mb3dlckNhc2UoKSlyZXR1cm47''@;'; put 'put ''aWYoTClyZXR1cm4vOihcZCspJC8udGVzdChMKSYmKFU9TC5tYXRjaCgvOihcZCspJC8pWzBdLEw9TC5yZXBsYWNlKC86XGQrJC8sIiIpKSxxKz1OKyI6IixxKz0iLy8iK0wsVSYmKHErPVUpLHErPUssVyYmVy5sZW5ndGgmJihxKz0iPyIrVyksWSYmWS5sZW5ndGgmJihxKz0iIyIrWSkscX19''@;'; put 'put ''fWZ1bmN0aW9uIHcoRil7cmV0dXJuIEIoRiwhMCl9ZnVuY3Rpb24gUChGKXtyZXR1cm4gQihGKXx8dyhGKX19KHVlPXkubm1kKHVlKSl9LDg2NjE6KHVlLFgseSk9Pnt1ZS5leHBvcnRzPXkoODY2MSl9LDM1MzU4Oih1ZSxYLHkpPT57dmFyIEk9eyIuL2FmIjoxMTU0NCwiLi9hZi5qcyI6MTE1''@;'; put 'put ''NDQsIi4vYXIiOjMzMTA4LCIuL2FyLWR6Ijo1MjE1NSwiLi9hci1kei5qcyI6NTIxNTUsIi4vYXIta3ciOjUzNTgzLCIuL2FyLWt3LmpzIjo1MzU4MywiLi9hci1seSI6NDE2MzgsIi4vYXItbHkuanMiOjQxNjM4LCIuL2FyLW1hIjo4NzgyMywiLi9hci1tYS5qcyI6ODc4MjMsIi4vYXItcHMi''@;'; put 'put ''Ojc3MTIsIi4vYXItcHMuanMiOjc3MTIsIi4vYXItc2EiOjc4MjYxLCIuL2FyLXNhLmpzIjo3ODI2MSwiLi9hci10biI6NTY3MDMsIi4vYXItdG4uanMiOjU2NzAzLCIuL2FyLmpzIjozMzEwOCwiLi9heiI6NDY1MDgsIi4vYXouanMiOjQ2NTA4LCIuL2JlIjoxNjc2NiwiLi9iZS5qcyI6MTY3''@;'; put 'put ''NjYsIi4vYmciOjI4NTY0LCIuL2JnLmpzIjoyODU2NCwiLi9ibSI6OTc0NjIsIi4vYm0uanMiOjk3NDYyLCIuL2JuIjoxNzEwNywiLi9ibi1iZCI6NDM0MzgsIi4vYm4tYmQuanMiOjQzNDM4LCIuL2JuLmpzIjoxNzEwNywiLi9ibyI6OTAwNCwiLi9iby5qcyI6OTAwNCwiLi9iciI6NTA5Mjcs''@;'; put 'put ''Ii4vYnIuanMiOjUwOTI3LCIuL2JzIjo4Nzc2OCwiLi9icy5qcyI6ODc3NjgsIi4vY2EiOjU2MjkxLCIuL2NhLmpzIjo1NjI5MSwiLi9jcyI6ODUzMDEsIi4vY3MuanMiOjg1MzAxLCIuL2N2Ijo2NjY2NiwiLi9jdi5qcyI6NjY2NjYsIi4vY3kiOjU1MTYzLCIuL2N5LmpzIjo1NTE2MywiLi9k''@;'; put 'put ''YSI6ODczNjAsIi4vZGEuanMiOjg3MzYwLCIuL2RlIjo0NTkzMiwiLi9kZS1hdCI6NDMyNDgsIi4vZGUtYXQuanMiOjQzMjQ4LCIuL2RlLWNoIjo4MzIyMiwiLi9kZS1jaC5qcyI6ODMyMjIsIi4vZGUuanMiOjQ1OTMyLCIuL2R2Ijo2NDA1LCIuL2R2LmpzIjo2NDA1LCIuL2VsIjo2MDcxOCwi''@;'; put 'put ''Li9lbC5qcyI6NjA3MTgsIi4vZW4tYXUiOjM2MzE5LCIuL2VuLWF1LmpzIjozNjMxOSwiLi9lbi1jYSI6ODA1OTcsIi4vZW4tY2EuanMiOjgwNTk3LCIuL2VuLWdiIjo1MTgwMCwiLi9lbi1nYi5qcyI6NTE4MDAsIi4vZW4taWUiOjgwNywiLi9lbi1pZS5qcyI6ODA3LCIuL2VuLWlsIjo5NTk2''@;'; put 'put ''MCwiLi9lbi1pbC5qcyI6OTU5NjAsIi4vZW4taW4iOjg0NDE4LCIuL2VuLWluLmpzIjo4NDQxOCwiLi9lbi1ueiI6NDY4NjUsIi4vZW4tbnouanMiOjQ2ODY1LCIuL2VuLXNnIjozMjY0NywiLi9lbi1zZy5qcyI6MzI2NDcsIi4vZW8iOjYxOTMxLCIuL2VvLmpzIjo2MTkzMSwiLi9lcyI6NDY2''@;'; put 'put ''NzksIi4vZXMtZG8iOjQxODA1LCIuL2VzLWRvLmpzIjo0MTgwNSwiLi9lcy1teCI6ODM0NDUsIi4vZXMtbXguanMiOjgzNDQ1LCIuL2VzLXVzIjo4MTUxNiwiLi9lcy11cy5qcyI6ODE1MTYsIi4vZXMuanMiOjQ2Njc5LCIuL2V0Ijo4ODE1MCwiLi9ldC5qcyI6ODgxNTAsIi4vZXUiOjgwNzU3''@;'; put 'put ''LCIuL2V1LmpzIjo4MDc1NywiLi9mYSI6NjU3NDIsIi4vZmEuanMiOjY1NzQyLCIuL2ZpIjozMzk1OCwiLi9maS5qcyI6MzM5NTgsIi4vZmlsIjo0NjcyMCwiLi9maWwuanMiOjQ2NzIwLCIuL2ZvIjo5ODM1MiwiLi9mby5qcyI6OTgzNTIsIi4vZnIiOjQwNTksIi4vZnItY2EiOjQyMDk2LCIu''@;'; put 'put ''L2ZyLWNhLmpzIjo0MjA5NiwiLi9mci1jaCI6OTU3NTksIi4vZnItY2guanMiOjk1NzU5LCIuL2ZyLmpzIjo0MDU5LCIuL2Z5IjoxNTk1OCwiLi9meS5qcyI6MTU5NTgsIi4vZ2EiOjk0MTQzLCIuL2dhLmpzIjo5NDE0MywiLi9nZCI6NjcwMjgsIi4vZ2QuanMiOjY3MDI4LCIuL2dsIjo4MDQy''@;'; put 'put ''OCwiLi9nbC5qcyI6ODA0MjgsIi4vZ29tLWRldmEiOjc2ODYxLCIuL2dvbS1kZXZhLmpzIjo3Njg2MSwiLi9nb20tbGF0biI6NTc3MTgsIi4vZ29tLWxhdG4uanMiOjU3NzE4LCIuL2d1IjoyNjgyNywiLi9ndS5qcyI6MjY4MjcsIi4vaGUiOjIxOTM2LCIuL2hlLmpzIjoyMTkzNiwiLi9oaSI6''@;'; put 'put ''MzEzMzIsIi4vaGkuanMiOjMxMzMyLCIuL2hyIjo5MTk1NywiLi9oci5qcyI6OTE5NTcsIi4vaHUiOjQ4OTI4LCIuL2h1LmpzIjo0ODkyOCwiLi9oeS1hbSI6NTYyMTUsIi4vaHktYW0uanMiOjU2MjE1LCIuL2lkIjo1ODYsIi4vaWQuanMiOjU4NiwiLi9pcyI6OTAyMTEsIi4vaXMuanMiOjkw''@;'; put 'put ''MjExLCIuL2l0Ijo3MDE3MCwiLi9pdC1jaCI6MjIzNDAsIi4vaXQtY2guanMiOjIyMzQwLCIuL2l0LmpzIjo3MDE3MCwiLi9qYSI6Mzk3NzAsIi4vamEuanMiOjM5NzcwLCIuL2p2Ijo3Mzg3NSwiLi9qdi5qcyI6NzM4NzUsIi4va2EiOjc5NDk5LCIuL2thLmpzIjo3OTQ5OSwiLi9rayI6OTM1''@;'; put 'put ''NzMsIi4va2suanMiOjkzNTczLCIuL2ttIjo2ODgwNywiLi9rbS5qcyI6Njg4MDcsIi4va24iOjY1MDgyLCIuL2tuLmpzIjo2NTA4MiwiLi9rbyI6MjAxMzcsIi4va28uanMiOjIwMTM3LCIuL2t1Ijo3MDExMSwiLi9rdS1rbXIiOjYzNzQ0LCIuL2t1LWttci5qcyI6NjM3NDQsIi4va3UuanMi''@;'; put 'put ''OjcwMTExLCIuL2t5Ijo5OTE4NywiLi9reS5qcyI6OTkxODcsIi4vbGIiOjM1OTY5LCIuL2xiLmpzIjozNTk2OSwiLi9sbyI6MzM1MjYsIi4vbG8uanMiOjMzNTI2LCIuL2x0Ijo5MDQxMSwiLi9sdC5qcyI6OTA0MTEsIi4vbHYiOjMyNjIxLCIuL2x2LmpzIjozMjYyMSwiLi9tZSI6ODU4Njks''@;'; put 'put ''Ii4vbWUuanMiOjg1ODY5LCIuL21pIjozNTg4MSwiLi9taS5qcyI6MzU4ODEsIi4vbWsiOjkyMzkxLCIuL21rLmpzIjo5MjM5MSwiLi9tbCI6MjExMjYsIi4vbWwuanMiOjIxMTI2LCIuL21uIjo0NDg5MiwiLi9tbi5qcyI6NDQ4OTIsIi4vbXIiOjU5MDgwLCIuL21yLmpzIjo1OTA4MCwiLi9t''@;'; put 'put ''cyI6NzAzOTksIi4vbXMtbXkiOjI1OTUwLCIuL21zLW15LmpzIjoyNTk1MCwiLi9tcy5qcyI6NzAzOTksIi4vbXQiOjc5OTAyLCIuL210LmpzIjo3OTkwMiwiLi9teSI6NzI5ODUsIi4vbXkuanMiOjcyOTg1LCIuL25iIjo2Nzg1OSwiLi9uYi5qcyI6Njc4NTksIi4vbmUiOjEzNjQyLCIuL25l''@;'; put 'put ''LmpzIjoxMzY0MiwiLi9ubCI6NjU0NDEsIi4vbmwtYmUiOjk5ODc1LCIuL25sLWJlLmpzIjo5OTg3NSwiLi9ubC5qcyI6NjU0NDEsIi4vbm4iOjgxMzExLCIuL25uLmpzIjo4MTMxMSwiLi9vYy1sbmMiOjcyNTY3LCIuL29jLWxuYy5qcyI6NzI1NjcsIi4vcGEtaW4iOjU2OTYyLCIuL3BhLWlu''@;'; put 'put ''LmpzIjo1Njk2MiwiLi9wbCI6NjEwNjMsIi4vcGwuanMiOjYxMDYzLCIuL3B0Ijo3ODcxOSwiLi9wdC1iciI6OTc0NzYsIi4vcHQtYnIuanMiOjk3NDc2LCIuL3B0LmpzIjo3ODcxOSwiLi9ybyI6NTEwMDQsIi4vcm8uanMiOjUxMDA0LCIuL3J1Ijo1MTMyNiwiLi9ydS5qcyI6NTEzMjYsIi4v''@;'; put 'put ''c2QiOjcyNjA4LCIuL3NkLmpzIjo3MjYwOCwiLi9zZSI6MTM5MTEsIi4vc2UuanMiOjEzOTExLCIuL3NpIjoyNTE0NywiLi9zaS5qcyI6MjUxNDcsIi4vc2siOjIzNzQxLCIuL3NrLmpzIjoyMzc0MSwiLi9zbCI6OTNlMywiLi9zbC5qcyI6OTNlMywiLi9zcSI6NjA0NTEsIi4vc3EuanMiOjYw''@;'; put 'put ''NDUxLCIuL3NyIjo1NTA0NiwiLi9zci1jeXJsIjo0MDkwNSwiLi9zci1jeXJsLmpzIjo0MDkwNSwiLi9zci5qcyI6NTUwNDYsIi4vc3MiOjg1NzY1LCIuL3NzLmpzIjo4NTc2NSwiLi9zdiI6OTkyOTAsIi4vc3YuanMiOjk5MjkwLCIuL3N3Ijo1MzQ0OSwiLi9zdy5qcyI6NTM0NDksIi4vdGEi''@;'; put 'put ''OjcyNjg4LCIuL3RhLmpzIjo3MjY4OCwiLi90ZSI6MzIwNjAsIi4vdGUuanMiOjMyMDYwLCIuL3RldCI6OTMyOTAsIi4vdGV0LmpzIjo5MzI5MCwiLi90ZyI6ODI5NCwiLi90Zy5qcyI6ODI5NCwiLi90aCI6MTIzMSwiLi90aC5qcyI6MTIzMSwiLi90ayI6Mzc0NiwiLi90ay5qcyI6Mzc0Niwi''@;'; put 'put ''Li90bC1waCI6NDkwNDAsIi4vdGwtcGguanMiOjQ5MDQwLCIuL3RsaCI6MTcxODcsIi4vdGxoLmpzIjoxNzE4NywiLi90ciI6NjAxNTMsIi4vdHIuanMiOjYwMTUzLCIuL3R6bCI6ODg1MjEsIi4vdHpsLmpzIjo4ODUyMSwiLi90em0iOjE4MDEwLCIuL3R6bS1sYXRuIjoyMjIzNCwiLi90em0t''@;'; put 'put ''bGF0bi5qcyI6MjIyMzQsIi4vdHptLmpzIjoxODAxMCwiLi91Zy1jbiI6NjMzNDksIi4vdWctY24uanMiOjYzMzQ5LCIuL3VrIjo2ODQ3OSwiLi91ay5qcyI6Njg0NzksIi4vdXIiOjQzMDI0LCIuL3VyLmpzIjo0MzAyNCwiLi91eiI6MTk4MDAsIi4vdXotbGF0biI6NzIzNzYsIi4vdXotbGF0''@;'; put 'put ''bi5qcyI6NzIzNzYsIi4vdXouanMiOjE5ODAwLCIuL3ZpIjo4OTM2NiwiLi92aS5qcyI6ODkzNjYsIi4veC1wc2V1ZG8iOjY5NzAyLCIuL3gtcHNldWRvLmpzIjo2OTcwMiwiLi95byI6NzI2NTUsIi4veW8uanMiOjcyNjU1LCIuL3poLWNuIjo1NzUsIi4vemgtY24uanMiOjU3NSwiLi96aC1o''@;'; put 'put ''ayI6MTgzNTEsIi4vemgtaGsuanMiOjE4MzUxLCIuL3poLW1vIjo1MTYyNiwiLi96aC1tby5qcyI6NTE2MjYsIi4vemgtdHciOjg4ODcsIi4vemgtdHcuanMiOjg4ODd9O2Z1bmN0aW9uIF8oQil7dmFyIHc9ZyhCKTtyZXR1cm4geSh3KX1mdW5jdGlvbiBnKEIpe2lmKCF5Lm8oSSxCKSl7dmFy''@;'; put 'put ''IHc9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrQisiJyIpO3Rocm93IHcuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsd31yZXR1cm4gSVtCXX1fLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoSSl9LF8ucmVzb2x2ZT1nLHVlLmV4cG9ydHM9XyxfLmlkPTM1MzU4''@;'; put 'put ''fSw4MzMzNzooKT0+e30sNzg5ODI6KCk9Pnt9LDQ3NzkwOigpPT57fSw3Nzk2NTooKT0+e30sNjYwODk6KCk9Pnt9LDc5MzY4OigpPT57fSwxNTc5MTooKT0+e30sNjEwOTM6KCk9Pnt9LDY0Njg4OigpPT57fSw1MTA2OTooKT0+e30sMTUzNDA6KCk9Pnt9LDc5ODM4OigpPT57fSw2Mzc3OToo''@;'; put 'put ''KT0+e30sNzcxOTk6KCk9Pnt9LDI1MTcyOnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbiBYKHksSSl7dGhpcy52PXksdGhpcy5rPUl9LHVlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx1ZS5leHBvcnRzLmRlZmF1bHQ9dWUuZXhwb3J0c30sOTM1MTM6KHVlLFgseSk9Pnt2YXIgST15KDI1MTcyKTt1''@;'; put 'put ''ZS5leHBvcnRzPWZ1bmN0aW9uIF8oZyl7dmFyIEI9e30sdz0hMTtmdW5jdGlvbiBQKEYsTyl7cmV0dXJuIHc9ITAsTz1uZXcgUHJvbWlzZShmdW5jdGlvbih6KXt6KGdbRl0oTykpfSkse2RvbmU6ITEsdmFsdWU6bmV3IEkoTywxKX19cmV0dXJuIEJbdHlwZW9mIFN5bWJvbDwidSImJlN5bWJv''@;'; put 'put ''bC5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxCLm5leHQ9ZnVuY3Rpb24oRil7cmV0dXJuIHc/KHc9ITEsRik6UCgibmV4dCIsRil9LCJmdW5jdGlvbiI9PXR5cGVvZiBnLnRocm93JiYoQi50aHJvdz1mdW5jdGlvbihGKXtpZih3KXRocm93IHc9ITEs''@;'; put 'put ''RjtyZXR1cm4gUCgidGhyb3ciLEYpfSksImZ1bmN0aW9uIj09dHlwZW9mIGcucmV0dXJuJiYoQi5yZXR1cm49ZnVuY3Rpb24oRil7cmV0dXJuIHc/KHc9ITEsRik6UCgicmV0dXJuIixGKX0pLEJ9LHVlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx1ZS5leHBvcnRzLmRlZmF1bHQ9dWUuZXhwb3J0''@;'; put 'put ''c30sODI4ODE6dWU9PntmdW5jdGlvbiB5KEkpe2Z1bmN0aW9uIF8oZyl7aWYoT2JqZWN0KGcpIT09ZylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihnKyIgaXMgbm90IGFuIG9iamVjdC4iKSk7dmFyIEI9Zy5kb25lO3JldHVybiBQcm9taXNlLnJlc29sdmUoZy52YWx1ZSku''@;'; put 'put ''dGhlbihmdW5jdGlvbih3KXtyZXR1cm57dmFsdWU6dyxkb25lOkJ9fSl9cmV0dXJuKHk9ZnVuY3Rpb24oQil7dGhpcy5zPUIsdGhpcy5uPUIubmV4dH0pLnByb3RvdHlwZT17czpudWxsLG46bnVsbCxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIF8odGhpcy5uLmFwcGx5KHRoaXMucyxhcmd1bWVu''@;'; put 'put ''dHMpKX0scmV0dXJuOmZ1bmN0aW9uKEIpe3ZhciB3PXRoaXMucy5yZXR1cm47cmV0dXJuIHZvaWQgMD09PXc/UHJvbWlzZS5yZXNvbHZlKHt2YWx1ZTpCLGRvbmU6ITB9KTpfKHcuYXBwbHkodGhpcy5zLGFyZ3VtZW50cykpfSx0aHJvdzpmdW5jdGlvbihCKXt2YXIgdz10aGlzLnMucmV0dXJu''@;'; put 'put ''O3JldHVybiB2b2lkIDA9PT13P1Byb21pc2UucmVqZWN0KEIpOl8ody5hcHBseSh0aGlzLnMsYXJndW1lbnRzKSl9fSxuZXcgeShJKX11ZS5leHBvcnRzPWZ1bmN0aW9uIFgoSSl7dmFyIF8sZyxCLHc9Mjtmb3IodHlwZW9mIFN5bWJvbDwidSImJihnPVN5bWJvbC5hc3luY0l0ZXJhdG9yLEI9''@;'; put 'put ''U3ltYm9sLml0ZXJhdG9yKTt3LS07KXtpZihnJiZudWxsIT0oXz1JW2ddKSlyZXR1cm4gXy5jYWxsKEkpO2lmKEImJm51bGwhPShfPUlbQl0pKXJldHVybiBuZXcgeShfLmNhbGwoSSkpO2c9IkBAYXN5bmNJdGVyYXRvciIsQj0iQEBpdGVyYXRvciJ9dGhyb3cgbmV3IFR5cGVFcnJvcigiT2Jq''@;'; put 'put ''ZWN0IGlzIG5vdCBhc3luYyBpdGVyYWJsZSIpfSx1ZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdWUuZXhwb3J0cy5kZWZhdWx0PXVlLmV4cG9ydHN9LDI5MjkzOnVlPT57ZnVuY3Rpb24gWChJLF8sZyxCLHcsUCxGKXt0cnl7dmFyIE89SVtQXShGKSx6PU8udmFsdWV9Y2F0Y2goTil7cmV0dXJu''@;'; put 'put ''IHZvaWQgZyhOKX1PLmRvbmU/Xyh6KTpQcm9taXNlLnJlc29sdmUoeikudGhlbihCLHcpfXVlLmV4cG9ydHM9ZnVuY3Rpb24geShJKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz10aGlzLGc9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihCLHcpe3ZhciBQPUkuYXBwbHko''@;'; put 'put ''XyxnKTtmdW5jdGlvbiBGKHope1goUCxCLHcsRixPLCJuZXh0Iix6KX1mdW5jdGlvbiBPKHope1goUCxCLHcsRixPLCJ0aHJvdyIseil9Rih2b2lkIDApfSl9fSx1ZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdWUuZXhwb3J0cy5kZWZhdWx0PXVlLmV4cG9ydHN9LDUzMzQ0Oih1ZSxYLHkpPT57''@;'; put 'put ''dmFyIEk9eSgyNTE3Mik7dWUuZXhwb3J0cz1mdW5jdGlvbiBfKGcpe3JldHVybiBuZXcgSShnLDApfSx1ZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdWUuZXhwb3J0cy5kZWZhdWx0PXVlLmV4cG9ydHN9LDQyOTU4Oih1ZSxYLHkpPT57dmFyIEk9eSgyNTE3Mik7ZnVuY3Rpb24gZyhCKXt2YXIg''@;'; put 'put ''dyxQO2Z1bmN0aW9uIEYoeixOKXt0cnl7dmFyIEw9Qlt6XShOKSxLPUwudmFsdWUsVT1LIGluc3RhbmNlb2YgSTtQcm9taXNlLnJlc29sdmUoVT9LLnY6SykudGhlbihmdW5jdGlvbihXKXtpZihVKXt2YXIgWT0icmV0dXJuIj09PXo/InJldHVybiI6Im5leHQiO2lmKCFLLmt8fFcuZG9uZSly''@;'; put 'put ''ZXR1cm4gRihZLFcpO1c9QltZXShXKS52YWx1ZX1PKEwuZG9uZT8icmV0dXJuIjoibm9ybWFsIixXKX0sZnVuY3Rpb24oVyl7RigidGhyb3ciLFcpfSl9Y2F0Y2goVyl7TygidGhyb3ciLFcpfX1mdW5jdGlvbiBPKHosTil7c3dpdGNoKHope2Nhc2UicmV0dXJuIjp3LnJlc29sdmUoe3ZhbHVl''@;'; put 'put ''Ok4sZG9uZTohMH0pO2JyZWFrO2Nhc2UidGhyb3ciOncucmVqZWN0KE4pO2JyZWFrO2RlZmF1bHQ6dy5yZXNvbHZlKHt2YWx1ZTpOLGRvbmU6ITF9KX0odz13Lm5leHQpP0Yody5rZXksdy5hcmcpOlA9bnVsbH10aGlzLl9pbnZva2U9ZnVuY3Rpb24oeixOKXtyZXR1cm4gbmV3IFByb21pc2Uo''@;'; put 'put ''ZnVuY3Rpb24oTCxLKXt2YXIgVT17a2V5OnosYXJnOk4scmVzb2x2ZTpMLHJlamVjdDpLLG5leHQ6bnVsbH07UD9QPVAubmV4dD1VOih3PVA9VSxGKHosTikpfSl9LCJmdW5jdGlvbiIhPXR5cGVvZiBCLnJldHVybiYmKHRoaXMucmV0dXJuPXZvaWQgMCl9Zy5wcm90b3R5cGVbImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9pbnZva2UoIm5leHQiLEIpfSxnLnByb3RvdHlwZS50aHJvdz1mdW5j''@;'; put 'put ''dGlvbihCKXtyZXR1cm4gdGhpcy5faW52b2tlKCJ0aHJvdyIsQil9LGcucHJvdG90eXBlLnJldHVybj1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5faW52b2tlKCJyZXR1cm4iLEIpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uIF8oQil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnKEIuYXBw''@;'; put 'put ''bHkodGhpcyxhcmd1bWVudHMpKX19LHVlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx1ZS5leHBvcnRzLmRlZmF1bHQ9dWUuZXhwb3J0c30sMzE0ODM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxOTE1MCksXz15KDc1MjEyKSxnPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KEIpe2lmKEkoQikpcmV0dXJuIEI7dGhyb3cgbmV3IGcoXyhCKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSwyNzY3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDM0MDYpLF89U3RyaW5nLGc9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQil7aWYoSShCKSlyZXR1cm4g''@;'; put 'put ''Qjt0aHJvdyBuZXcgZygiQ2FuJ3Qgc2V0ICIrXyhCKSsiIGFzIGEgcHJvdG90eXBlIil9fSwzNzczMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk3NTQxKS5oYXM7dWUuZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4gSShfKSxffX0sNzA4MjQ6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9eSg1ODAxMiksXz15KDk3OTUxKSxnPXkoNDQ2NDgpLmYsQj1JKCJ1bnNjb3BhYmxlcyIpLHc9QXJyYXkucHJvdG90eXBlO3ZvaWQgMD09PXdbQl0mJmcodyxCLHtjb25maWd1cmFibGU6ITAsdmFsdWU6XyhudWxsKX0pLHVlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7d1tCXVtQ''@;'; put 'put ''XT0hMH19LDYzMzM2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDY4KSxfPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQil7aWYoSShCLGcpKXJldHVybiBnO3Rocm93IG5ldyBfKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfX0sMTEwODoodWUsWCx5KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST15KDMyNjMzKSxfPVN0cmluZyxnPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIpe2lmKEkoQikpcmV0dXJuIEI7dGhyb3cgbmV3IGcoXyhCKSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LDM4ODE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3MTcx''@;'; put 'put ''KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sZyxCKXtmb3IodmFyIHc9MCxQPWFyZ3VtZW50cy5sZW5ndGg+Mj9COkkoZyksRj1uZXcgXyhQKTtQPnc7KUZbd109Z1t3KytdO3JldHVybiBGfX0sNzQ4MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzE2MiksXz15KDc0ODUpLGc9''@;'; put 'put ''eSg3MTcxKSxCPWZ1bmN0aW9uKHcpe3JldHVybiBmdW5jdGlvbihQLEYsTyl7dmFyIHo9SShQKSxOPWcoeik7aWYoMD09PU4pcmV0dXJuIXcmJi0xO3ZhciBLLEw9XyhPLE4pO2lmKHcmJkYhPUYpe2Zvcig7Tj5MOylpZigoSz16W0wrK10pIT1LKXJldHVybiEwfWVsc2UgZm9yKDtOPkw7TCsr''@;'; put 'put ''KWlmKCh3fHxMIGluIHopJiZ6W0xdPT09RilyZXR1cm4gd3x8THx8MDtyZXR1cm4hdyYmLTF9fTt1ZS5leHBvcnRzPXtpbmNsdWRlczpCKCEwKSxpbmRleE9mOkIoITEpfX0sMzkyMDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjM4NyksXz15KDY3Mjc3KSxnPVR5cGVFcnJv''@;'; put 'put ''cixCPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isdz1JJiYhZnVuY3Rpb24oKXtpZih2b2lkIDAhPT10aGlzKXJldHVybiEwO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkubGVuZ3RoPTF9Y2F0Y2goUCl7cmV0dXJuIFAgaW5zdGFu''@;'; put 'put ''Y2VvZiBUeXBlRXJyb3J9fSgpO3VlLmV4cG9ydHM9dz9mdW5jdGlvbihQLEYpe2lmKF8oUCkmJiFCKFAsImxlbmd0aCIpLndyaXRhYmxlKXRocm93IG5ldyBnKCJDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoIik7cmV0dXJuIFAubGVuZ3RoPUZ9OmZ1bmN0aW9uKFAsRil7cmV0dXJuIFAu''@;'; put 'put ''bGVuZ3RoPUZ9fSw3NzYzOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KTt1ZS5leHBvcnRzPUkoW10uc2xpY2UpfSw0MjkyNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDExMDgpLF89eSg2NjU0Mik7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIsdyxQKXt0''@;'; put 'put ''cnl7cmV0dXJuIFA/QihJKHcpWzBdLHdbMV0pOkIodyl9Y2F0Y2goRil7XyhnLCJ0aHJvdyIsRil9fX0sODY2NzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz1JKHt9LnRvU3RyaW5nKSxnPUkoIiIuc2xpY2UpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQil7cmV0dXJu''@;'; put 'put ''IGcoXyhCKSw4LC0xKX19LDcxODI0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzg1OTUpLF89eSgxOTE1MCksZz15KDg2Njc1KSx3PXkoNTgwMTIpKCJ0b1N0cmluZ1RhZyIpLFA9T2JqZWN0LEY9IkFyZ3VtZW50cyI9PT1nKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30o''@;'; put 'put ''KSk7dWUuZXhwb3J0cz1JP2c6ZnVuY3Rpb24oeil7dmFyIE4sTCxLO3JldHVybiB2b2lkIDA9PT16PyJVbmRlZmluZWQiOm51bGw9PT16PyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKEw9ZnVuY3Rpb24oeixOKXt0cnl7cmV0dXJuIHpbTl19Y2F0Y2h7fX0oTj1QKHopLHcpKT9MOkY/ZyhOKToi''@;'; put 'put ''T2JqZWN0Ij09PShLPWcoTikpJiZfKE4uY2FsbGVlKT8iQXJndW1lbnRzIjpLfX0sNDg2Mzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzOGUzKSxfPXkoODgwNzgpLGc9eSg1NDEyMiksQj15KDQ0NjQ4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCxGKXtmb3IodmFyIE89XyhQ''@;'; put 'put ''KSx6PUIuZixOPWcuZixMPTA7TDxPLmxlbmd0aDtMKyspe3ZhciBLPU9bTF07IUkodyxLKSYmKCFGfHwhSShGLEspKSYmeih3LEssTihQLEspKX19fSw4MjgzNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU1NTkyKTt1ZS5leHBvcnRzPSFJKGZ1bmN0aW9uKCl7ZnVuY3Rpb24g''@;'; put 'put ''Xygpe31yZXR1cm4gXy5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IF8pIT09Xy5wcm90b3R5cGV9KX0sNTg5Nzg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbihYLHkpe3JldHVybnt2YWx1ZTpYLGRvbmU6eX19fSwzNjY3''@;'; put 'put ''ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2Mzg3KSxfPXkoNDQ2NDgpLGc9eSg3Nzc3Myk7dWUuZXhwb3J0cz1JP2Z1bmN0aW9uKEIsdyxQKXtyZXR1cm4gXy5mKEIsdyxnKDEsUCkpfTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEJbd109UCxCfX0sNzc3NzM6dWU9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbihYLHkpe3JldHVybntlbnVtZXJhYmxlOiEoMSZYKSxjb25maWd1cmFibGU6ISgyJlgpLHdyaXRhYmxlOiEoNCZYKSx2YWx1ZTp5fX19LDU4Nzk1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDYzODcpLF89eSg0NDY0OCksZz15''@;'; put 'put ''KDc3NzczKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyxQKXtJP18uZihCLHcsZygwLFApKTpCW3ddPVB9fSw0NDAzOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDE2OTgwKSxfPXkoNDQ2NDgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCLHcpe3JldHVybiB3LmdldCYmSSh3Lmdl''@;'; put 'put ''dCxCLHtnZXR0ZXI6ITB9KSx3LnNldCYmSSh3LnNldCxCLHtzZXR0ZXI6ITB9KSxfLmYoZyxCLHcpfX0sMzEwODM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxOTE1MCksXz15KDQ0NjQ4KSxnPXkoMTY5ODApLEI9eSg0ODEwNCk7dWUuZXhwb3J0cz1mdW5jdGlvbih3LFAsRixP''@;'; put 'put ''KXtPfHwoTz17fSk7dmFyIHo9Ty5lbnVtZXJhYmxlLE49dm9pZCAwIT09Ty5uYW1lP08ubmFtZTpQO2lmKEkoRikmJmcoRixOLE8pLE8uZ2xvYmFsKXo/d1tQXT1GOkIoUCxGKTtlbHNle3RyeXtPLnVuc2FmZT93W1BdJiYoej0hMCk6ZGVsZXRlIHdbUF19Y2F0Y2h7fXo/d1tQXT1GOl8uZih3''@;'; put 'put ''LFAse3ZhbHVlOkYsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6IU8ubm9uQ29uZmlndXJhYmxlLHdyaXRhYmxlOiFPLm5vbldyaXRhYmxlfSl9cmV0dXJuIHd9fSwxNDc1MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMxMDgzKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sZyxC''@;'; put 'put ''KXtmb3IodmFyIHcgaW4gZylJKF8sdyxnW3ddLEIpO3JldHVybiBffX0sNDgxMDQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzk2MyksXz1PYmplY3QuZGVmaW5lUHJvcGVydHk7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIpe3RyeXtfKEksZyx7dmFsdWU6Qixjb25maWd1cmFi''@;'; put 'put ''bGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaHtJW2ddPUJ9cmV0dXJuIEJ9fSw0MzE5NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDc1MjEyKSxfPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQil7aWYoIWRlbGV0ZSBnW0JdKXRocm93IG5ldyBfKCJDYW5ub3QgZGVs''@;'; put 'put ''ZXRlIHByb3BlcnR5ICIrSShCKSsiIG9mICIrSShnKSl9fSw0NjM4NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU1NTkyKTt1ZS5leHBvcnRzPSFJKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IDd9fSlbMV19KX0sNTU5ODg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzk2MyksXz15KDMyNjMzKSxnPUkuZG9jdW1lbnQsQj1fKGcpJiZfKGcuY3JlYXRlRWxlbWVudCk7dWUuZXhwb3J0cz1mdW5jdGlvbih3KXtyZXR1cm4gQj9nLmNyZWF0ZUVsZW1lbnQodyk6e319fSwz''@;'; put 'put ''MzE2OnVlPT57InVzZSBzdHJpY3QiO3ZhciBYPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEkpe2lmKEk+OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBYKCJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiKTtyZXR1cm4gSX19LDU4NTQwOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4''@;'; put 'put ''cG9ydHM9WyJjb25zdHJ1Y3RvciIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsInZhbHVlT2YiXX0sNDQxMzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMzU4KTt1ZS5l''@;'; put 'put ''eHBvcnRzPS8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KEkpfSwyMTUxMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ3MDkyKTt1ZS5leHBvcnRzPSJOT0RFIj09PUl9LDIzNTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIF89eSgzMzk2Myku''@;'; put 'put ''bmF2aWdhdG9yLGc9XyYmXy51c2VyQWdlbnQ7dWUuZXhwb3J0cz1nP1N0cmluZyhnKToiIn0sNDQwNjY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEYsTyxJPXkoMzM5NjMpLF89eSgyMzU4KSxnPUkucHJvY2VzcyxCPUkuRGVubyx3PWcmJmcudmVyc2lvbnN8fEImJkIudmVyc2lvbixQ''@;'; put 'put ''PXcmJncudjg7UCYmKE89KEY9UC5zcGxpdCgiLiIpKVswXT4wJiZGWzBdPDQ/MTorKEZbMF0rRlsxXSkpLCFPJiZfJiYoIShGPV8ubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxGWzFdPj03NCkmJihGPV8ubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihPPStGWzFdKSx1ZS5leHBvcnRzPU99LDQ3''@;'; put 'put ''MDkyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM5NjMpLF89eSgyMzU4KSxnPXkoODY2NzUpLEI9ZnVuY3Rpb24odyl7cmV0dXJuIF8uc2xpY2UoMCx3Lmxlbmd0aCk9PT13fTt1ZS5leHBvcnRzPUIoIkJ1bi8iKT8iQlVOIjpCKCJDbG91ZGZsYXJlLVdvcmtlcnMiKT8iQ0xP''@;'; put 'put ''VURGTEFSRSI6QigiRGVuby8iKT8iREVOTyI6QigiTm9kZS5qcy8iKT8iTk9ERSI6SS5CdW4mJiJzdHJpbmciPT10eXBlb2YgQnVuLnZlcnNpb24/IkJVTiI6SS5EZW5vJiYib2JqZWN0Ij09dHlwZW9mIERlbm8udmVyc2lvbj8iREVOTyI6InByb2Nlc3MiPT09ZyhJLnByb2Nlc3MpPyJOT0RF''@;'; put 'put ''IjpJLndpbmRvdyYmSS5kb2N1bWVudD8iQlJPV1NFUiI6IlJFU1QifSw5ODg1NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPUVycm9yLGc9SSgiIi5yZXBsYWNlKSxCPVN0cmluZyhuZXcgXygienhjYXNkIikuc3RhY2spLHc9L1xuXHMqYXQgW146XSo6W15cbl0q''@;'; put 'put ''LyxQPXcudGVzdChCKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYsTyl7aWYoUCYmInN0cmluZyI9PXR5cGVvZiBGJiYhXy5wcmVwYXJlU3RhY2tUcmFjZSlmb3IoO08tLTspRj1nKEYsdywiIik7cmV0dXJuIEZ9fSwyMjMwNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM2Njc4KSxf''@;'; put 'put ''PXkoOTg4NTQpLGc9eSg3NDk2NCksQj1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCxGLE8pe2cmJihCP0IodyxQKTpJKHcsInN0YWNrIixfKEYsTykpKX19LDc0OTY0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTU1OTIpLF89eSg3Nzc3''@;'; put 'put ''Myk7dWUuZXhwb3J0cz0hSShmdW5jdGlvbigpe3ZhciBnPW5ldyBFcnJvcigiYSIpO3JldHVybiEoInN0YWNrImluIGcpfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsInN0YWNrIixfKDEsNykpLDchPT1nLnN0YWNrKX0pfSwyODM2NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15''@;'; put 'put ''KDMzOTYzKSxfPXkoNTQxMjIpLmYsZz15KDM2Njc4KSxCPXkoMzEwODMpLHc9eSg0ODEwNCksUD15KDQ4NjM5KSxGPXkoMTYzNjMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTyx6KXt2YXIgVyxZLHEsZWUsSixOPU8udGFyZ2V0LEw9Ty5nbG9iYWwsSz1PLnN0YXQ7aWYoVz1MP0k6Sz9JW05dfHx3''@;'; put 'put ''KE4se30pOklbTl0mJklbTl0ucHJvdG90eXBlKWZvcihZIGluIHope2lmKGVlPXpbWV0scT1PLmRvbnRDYWxsR2V0U2V0PyhKPV8oVyxZKSkmJkoudmFsdWU6V1tZXSwhRihMP1k6TisoSz8iLiI6IiMiKStZLE8uZm9yY2VkKSYmdm9pZCAwIT09cSl7aWYodHlwZW9mIGVlPT10eXBlb2YgcSlj''@;'; put 'put ''b250aW51ZTtQKGVlLHEpfShPLnNoYW18fHEmJnEuc2hhbSkmJmcoZWUsInNoYW0iLCEwKSxCKFcsWSxlZSxPKX19fSw1NTU5Mjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKFgpe3RyeXtyZXR1cm4hIVgoKX1jYXRjaHtyZXR1cm4hMH19fSw0MDIyMDoodWUsWCx5KT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDc1MTU3KSxfPUZ1bmN0aW9uLnByb3RvdHlwZSxnPV8uYXBwbHksQj1fLmNhbGw7dWUuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuYXBwbHl8fChJP0IuYmluZChnKTpmdW5jdGlvbigpe3JldHVybiBCLmFwcGx5KGcsYXJn''@;'; put 'put ''dW1lbnRzKX0pfSw3ODgxMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM2MjkpLF89eSgzMTQ4MyksZz15KDc1MTU3KSxCPUkoSS5iaW5kKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7cmV0dXJuIF8odyksdm9pZCAwPT09UD93Omc/Qih3LFApOmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHcuYXBwbHkoUCxhcmd1bWVudHMpfX19LDc1MTU3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTU1OTIpO3VlLmV4cG9ydHM9IUkoZnVuY3Rpb24oKXt2YXIgXz1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBffHxfLmhhc093blByb3BlcnR5''@;'; put 'put ''KCJwcm90b3R5cGUiKX0pfSw0NjkyNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDc1MTU3KSxfPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO3VlLmV4cG9ydHM9ST9fLmJpbmQoXyk6ZnVuY3Rpb24oKXtyZXR1cm4gXy5hcHBseShfLGFyZ3VtZW50cyl9fSw4OTk4MToodWUsWCx5''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2Mzg3KSxfPXkoMzhlMyksZz1GdW5jdGlvbi5wcm90b3R5cGUsQj1JJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHc9XyhnLCJuYW1lIiksUD13JiYic29tZXRoaW5nIj09PWZ1bmN0aW9uKCl7fS5uYW1lLEY9dyYmKCFJfHxJJiZC''@;'; put 'put ''KGcsIm5hbWUiKS5jb25maWd1cmFibGUpO3VlLmV4cG9ydHM9e0VYSVNUUzp3LFBST1BFUjpQLENPTkZJR1VSQUJMRTpGfX0sNjkyMjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDMxNDgzKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQix3KXt0cnl7cmV0dXJu''@;'; put 'put ''IEkoXyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGcsQilbd10pKX1jYXRjaHt9fX0sMzYyOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg2Njc1KSxfPXkoNTg2MDcpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7aWYoIkZ1bmN0aW9uIj09PUkoZykpcmV0dXJuIF8o''@;'; put 'put ''Zyl9fSw1ODYwNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDc1MTU3KSxfPUZ1bmN0aW9uLnByb3RvdHlwZSxnPV8uY2FsbCxCPUkmJl8uYmluZC5iaW5kKGcsZyk7dWUuZXhwb3J0cz1JP0I6ZnVuY3Rpb24odyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGcuYXBwbHkodyxh''@;'; put 'put ''cmd1bWVudHMpfX19LDY2NTAzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM5NjMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnKXt2YXIgQj1JW19dLHc9QiYmQi5wcm90b3R5cGU7cmV0dXJuIHcmJndbZ119fSwxMjIwMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15''@;'; put 'put ''KDMzOTYzKSxfPXkoMTkxNTApO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQix3KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2Z1bmN0aW9uKEIpe3JldHVybiBfKEIpP0I6dm9pZCAwfShJW0JdKTpJW0JdJiZJW0JdW3ddfX0sNzU0MjQ6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihYKXtyZXR1cm57aXRlcmF0b3I6WCxuZXh0OlgubmV4dCxkb25lOiExfX19LDYzNjI3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDY5MjYpLF89eSgxMTA4KSxnPXkoNzU0MjQpLEI9eSgzNjkzMik7dWUuZXhwb3J0cz1mdW5jdGlvbih3LFApeyghUHx8InN0cmluZyIh''@;'; put 'put ''PXR5cGVvZiB3KSYmXyh3KTt2YXIgRj1CKHcpO3JldHVybiBnKF8odm9pZCAwIT09Rj9JKEYsdyk6dykpfX0sMzY5MzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3MTgyNCksXz15KDg2MTE1KSxnPXkoOTQ0NjgpLEI9eSgxOTI1OCksUD15KDU4MDEyKSgiaXRlcmF0b3IiKTt1''@;'; put 'put ''ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe2lmKCFnKEYpKXJldHVybiBfKEYsUCl8fF8oRiwiQEBpdGVyYXRvciIpfHxCW0koRildfX0sNDM1ODQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjkyNiksXz15KDMxNDgzKSxnPXkoMTEwOCksQj15KDc1MjEyKSx3PXkoMzY5MzIpLFA9''@;'; put 'put ''VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRixPKXt2YXIgej1hcmd1bWVudHMubGVuZ3RoPDI/dyhGKTpPO2lmKF8oeikpcmV0dXJuIGcoSSh6LEYpKTt0aHJvdyBuZXcgUChCKEYpKyIgaXMgbm90IGl0ZXJhYmxlIil9fSw4NDUyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ST15KDU4NjA3KSxfPXkoNjcyNzcpLGc9eSgxOTE1MCksQj15KDg2Njc1KSx3PXkoNjgzMzIpLFA9SShbXS5wdXNoKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe2lmKGcoRikpcmV0dXJuIEY7aWYoXyhGKSl7Zm9yKHZhciBPPUYubGVuZ3RoLHo9W10sTj0wO048TztOKyspe3ZhciBMPUZbTl07''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBMP1AoeixMKTooIm51bWJlciI9PXR5cGVvZiBMfHwiTnVtYmVyIj09PUIoTCl8fCJTdHJpbmciPT09QihMKSkmJlAoeix3KEwpKX12YXIgSz16Lmxlbmd0aCxVPSEwO3JldHVybiBmdW5jdGlvbihXLFkpe2lmKFUpcmV0dXJuIFU9ITEsWTtpZihfKHRoaXMpKXJl''@;'; put 'put ''dHVybiBZO2Zvcih2YXIgcT0wO3E8SztxKyspaWYoeltxXT09PVcpcmV0dXJuIFl9fX19LDg2MTE1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzE0ODMpLF89eSg5NDQ2OCk7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIpe3ZhciB3PWdbQl07cmV0dXJuIF8odyk/dm9pZCAwOkko''@;'; put 'put ''dyl9fSw0MzYzMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMxNDgzKSxfPXkoMTEwOCksZz15KDQ2OTI2KSxCPXkoNjQ1NTApLHc9eSg3NTQyNCksUD0iSW52YWxpZCBzaXplIixGPVJhbmdlRXJyb3IsTz1UeXBlRXJyb3Isej1NYXRoLm1heCxOPWZ1bmN0aW9uKEwsSyl7dGhp''@;'; put 'put ''cy5zZXQ9TCx0aGlzLnNpemU9eihLLDApLHRoaXMuaGFzPUkoTC5oYXMpLHRoaXMua2V5cz1JKEwua2V5cyl9O04ucHJvdG90eXBlPXtnZXRJdGVyYXRvcjpmdW5jdGlvbigpe3JldHVybiB3KF8oZyh0aGlzLmtleXMsdGhpcy5zZXQpKSl9LGluY2x1ZGVzOmZ1bmN0aW9uKEwpe3JldHVybiBn''@;'; put 'put ''KHRoaXMuaGFzLHRoaXMuc2V0LEwpfX0sdWUuZXhwb3J0cz1mdW5jdGlvbihMKXtfKEwpO3ZhciBLPStMLnNpemU7aWYoSyE9Syl0aHJvdyBuZXcgTyhQKTt2YXIgVT1CKEspO2lmKFU8MCl0aHJvdyBuZXcgRihQKTtyZXR1cm4gbmV3IE4oTCxVKX19LDk2MzM5Oih1ZSxYLHkpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89eSgzMTk1MCksZz1NYXRoLmZsb29yLEI9SSgiIi5jaGFyQXQpLHc9SSgiIi5yZXBsYWNlKSxQPUkoIiIuc2xpY2UpLEY9L1wkKFskJidgXXxcZHsxLDJ9fDxbXj5dKj4pL2csTz0vXCQoWyQmJ2BdfFxkezEsMn0pL2c7dWUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bih6LE4sTCxLLFUsVyl7dmFyIFk9TCt6Lmxlbmd0aCxxPUsubGVuZ3RoLGVlPU87cmV0dXJuIHZvaWQgMCE9PVUmJihVPV8oVSksZWU9RiksdyhXLGVlLGZ1bmN0aW9uKEosbmUpe3ZhciBpZTtzd2l0Y2goQihuZSwwKSl7Y2FzZSIkIjpyZXR1cm4iJCI7Y2FzZSImIjpyZXR1cm4gejtjYXNl''@;'; put 'put ''ImAiOnJldHVybiBQKE4sMCxMKTtjYXNlIiciOnJldHVybiBQKE4sWSk7Y2FzZSI8IjppZT1VW1AobmUsMSwtMSldO2JyZWFrO2RlZmF1bHQ6dmFyIGxlPStuZTtpZigwPT09bGUpcmV0dXJuIEo7aWYobGU+cSl7dmFyIG1lPWcobGUvMTApO3JldHVybiAwPT09bWU/SjptZTw9cT92b2lkIDA9''@;'; put 'put ''PT1LW21lLTFdP0IobmUsMSk6S1ttZS0xXStCKG5lLDEpOkp9aWU9S1tsZS0xXX1yZXR1cm4gdm9pZCAwPT09aWU/IiI6aWV9KX19LDMzOTYzOmZ1bmN0aW9uKHVlKXsidXNlIHN0cmljdCI7dmFyIFg9ZnVuY3Rpb24oeSl7cmV0dXJuIHkmJnkuTWF0aD09PU1hdGgmJnl9O3VlLmV4cG9ydHM9''@;'; put 'put ''WCgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxYKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxYKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fFgoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCl8fFgoIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiB0aGlzJiZ0aGlzKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0sMzhlMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPXkoMzE5NTApLGc9SSh7fS5oYXNPd25Qcm9wZXJ0eSk7dWUuZXhwb3J0cz1PYmplY3Qu''@;'; put 'put ''aGFzT3dufHxmdW5jdGlvbih3LFApe3JldHVybiBnKF8odyksUCl9fSwzNDY3MDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXt9fSw4NzM3MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDEyMjAyKTt1ZS5leHBvcnRzPUkoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50''@;'; put 'put ''Iil9LDU3MjQ0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDYzODcpLF89eSg1NTU5MiksZz15KDU1OTg4KTt1ZS5leHBvcnRzPSFJJiYhXyhmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KGcoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIDd9fSkuYX0pfSw1NTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDU1NTkyKSxnPXkoODY2NzUpLEI9T2JqZWN0LHc9SSgiIi5zcGxpdCk7dWUuZXhwb3J0cz1fKGZ1bmN0aW9uKCl7cmV0dXJuIUIoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0p''@;'; put 'put ''P2Z1bmN0aW9uKFApe3JldHVybiJTdHJpbmciPT09ZyhQKT93KFAsIiIpOkIoUCl9OkJ9LDE3Mjk2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTkxNTApLF89eSgzMjYzMyksZz15KDIxNjEyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyxQKXt2YXIgRixPO3JldHVybiBnJiZJ''@;'; put 'put ''KEY9dy5jb25zdHJ1Y3RvcikmJkYhPT1QJiZfKE89Ri5wcm90b3R5cGUpJiZPIT09UC5wcm90b3R5cGUmJmcoQixPKSxCfX0sMjY5MzE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDE5MTUwKSxnPXkoNDgzNTYpLEI9SShGdW5jdGlvbi50b1N0cmluZyk7Xyhn''@;'; put 'put ''Lmluc3BlY3RTb3VyY2UpfHwoZy5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHcpe3JldHVybiBCKHcpfSksdWUuZXhwb3J0cz1nLmluc3BlY3RTb3VyY2V9LDY0ODU1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzI2MzMpLF89eSgzNjY3OCk7dWUuZXhwb3J0cz1mdW5jdGlvbihn''@;'; put 'put ''LEIpe0koQikmJiJjYXVzZSJpbiBCJiZfKGcsImNhdXNlIixCLmNhdXNlKX19LDQ3MzY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEssVSxXLEk9eSg0ODY5MSksXz15KDMzOTYzKSxnPXkoMzI2MzMpLEI9eSgzNjY3OCksdz15KDM4ZTMpLFA9eSg0ODM1NiksRj15KDc5NjYyKSxPPXko''@;'; put 'put ''MzQ2NzApLHo9Ik9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkIixOPV8uVHlwZUVycm9yO2lmKEl8fFAuc3RhdGUpe3ZhciBlZT1QLnN0YXRlfHwoUC5zdGF0ZT1uZXcoMCxfLldlYWtNYXApKTtlZS5nZXQ9ZWUuZ2V0LGVlLmhhcz1lZS5oYXMsZWUuc2V0PWVlLnNldCxLPWZ1bmN0aW9uKG5l''@;'; put 'put ''LGllKXtpZihlZS5oYXMobmUpKXRocm93IG5ldyBOKHopO3JldHVybiBpZS5mYWNhZGU9bmUsZWUuc2V0KG5lLGllKSxpZX0sVT1mdW5jdGlvbihuZSl7cmV0dXJuIGVlLmdldChuZSl8fHt9fSxXPWZ1bmN0aW9uKG5lKXtyZXR1cm4gZWUuaGFzKG5lKX19ZWxzZXt2YXIgSj1GKCJzdGF0ZSIp''@;'; put 'put ''O09bSl09ITAsSz1mdW5jdGlvbihuZSxpZSl7aWYodyhuZSxKKSl0aHJvdyBuZXcgTih6KTtyZXR1cm4gaWUuZmFjYWRlPW5lLEIobmUsSixpZSksaWV9LFU9ZnVuY3Rpb24obmUpe3JldHVybiB3KG5lLEopP25lW0pdOnt9fSxXPWZ1bmN0aW9uKG5lKXtyZXR1cm4gdyhuZSxKKX19dWUuZXhw''@;'; put 'put ''b3J0cz17c2V0OkssZ2V0OlUsaGFzOlcsZW5mb3JjZTpmdW5jdGlvbihuZSl7cmV0dXJuIFcobmUpP1UobmUpOksobmUse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24obmUpe3JldHVybiBmdW5jdGlvbihpZSl7dmFyIGxlO2lmKCFnKGllKXx8KGxlPVUoaWUpKS50eXBlIT09bmUpdGhyb3cgbmV3''@;'; put 'put ''IE4oIkluY29tcGF0aWJsZSByZWNlaXZlciwgIituZSsiIHJlcXVpcmVkIik7cmV0dXJuIGxlfX19fSw2Njc5MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4MDEyKSxfPXkoMTkyNTgpLGc9SSgiaXRlcmF0b3IiKSxCPUFycmF5LnByb3RvdHlwZTt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKHcpe3JldHVybiB2b2lkIDAhPT13JiYoXy5BcnJheT09PXd8fEJbZ109PT13KX19LDY3Mjc3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODY2NzUpO3VlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZyl7cmV0dXJuIkFycmF5Ij09PUkoZyl9fSwxOTE1MDp1''@;'; put 'put ''ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hbGw7dWUuZXhwb3J0cz10eXBlb2YgWD4idSImJnZvaWQgMCE9PVg/ZnVuY3Rpb24oeSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHl8fHk9PT1YfTpmdW5jdGlvbih5KXtyZXR1cm4i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgeX19LDE2MzYzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTU1OTIpLF89eSgxOTE1MCksZz0vI3xcLnByb3RvdHlwZVwuLyxCPWZ1bmN0aW9uKHosTil7dmFyIEw9UFt3KHopXTtyZXR1cm4gTD09PU98fEwhPT1GJiYoXyhOKT9JKE4pOiEhTil9''@;'; put 'put ''LHc9Qi5ub3JtYWxpemU9ZnVuY3Rpb24oeil7cmV0dXJuIFN0cmluZyh6KS5yZXBsYWNlKGcsIi4iKS50b0xvd2VyQ2FzZSgpfSxQPUIuZGF0YT17fSxGPUIuTkFUSVZFPSJOIixPPUIuUE9MWUZJTEw9IlAiO3VlLmV4cG9ydHM9Qn0sOTQ0Njg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihYKXtyZXR1cm4gbnVsbD09WH19LDMyNjMzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTkxNTApO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBfP251bGwhPT1fOkkoXyl9fSw0MzQwNjoodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST15KDMyNjMzKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3JldHVybiBJKF8pfHxudWxsPT09X319LDg4Nzg4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ITF9LDg4ODY3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzI2MzMpLF89eSg4NjY3NSksQj15''@;'; put 'put ''KDU4MDEyKSgibWF0Y2giKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3ZhciBQO3JldHVybiBJKHcpJiYodm9pZCAwIT09KFA9d1tCXSk/ISFQOiJSZWdFeHAiPT09Xyh3KSl9fSw5Mjk5ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDEyMjAyKSxfPXkoMTkxNTApLGc9eSg0Njgp''@;'; put 'put ''LEI9eSg2Njk5NSksdz1PYmplY3Q7dWUuZXhwb3J0cz1CP2Z1bmN0aW9uKFApe3JldHVybiJzeW1ib2wiPT10eXBlb2YgUH06ZnVuY3Rpb24oUCl7dmFyIEY9SSgiU3ltYm9sIik7cmV0dXJuIF8oRikmJmcoRi5wcm90b3R5cGUsdyhQKSl9fSwxMTM4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXkoNDY5MjYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnLEIpe2Zvcih2YXIgRixPLHc9Qj9fOl8uaXRlcmF0b3IsUD1fLm5leHQ7IShGPUkoUCx3KSkuZG9uZTspaWYodm9pZCAwIT09KE89ZyhGLnZhbHVlKSkpcmV0dXJuIE99fSwzMDc4NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST15KDc4ODExKSxfPXkoNDY5MjYpLGc9eSgxMTA4KSxCPXkoNzUyMTIpLHc9eSg2Njc5MiksUD15KDcxNzEpLEY9eSg0NjgpLE89eSg0MzU4NCksej15KDM2OTMyKSxOPXkoNjY1NDIpLEw9VHlwZUVycm9yLEs9ZnVuY3Rpb24oVyxZKXt0aGlzLnN0b3BwZWQ9Vyx0aGlzLnJlc3Vs''@;'; put 'put ''dD1ZfSxVPUsucHJvdG90eXBlO3VlLmV4cG9ydHM9ZnVuY3Rpb24oVyxZLHEpe3ZhciBfZSxUZSxTZSxqZSxWLHAsYixKPSEoIXF8fCFxLkFTX0VOVFJJRVMpLG5lPSEoIXF8fCFxLklTX1JFQ09SRCksaWU9ISghcXx8IXEuSVNfSVRFUkFUT1IpLGxlPSEoIXF8fCFxLklOVEVSUlVQVEVEKSxt''@;'; put 'put ''ZT1JKFkscSYmcS50aGF0KSx4PWZ1bmN0aW9uKFQpe3JldHVybiBfZSYmTihfZSwibm9ybWFsIixUKSxuZXcgSyghMCxUKX0sQz1mdW5jdGlvbihUKXtyZXR1cm4gSj8oZyhUKSxsZT9tZShUWzBdLFRbMV0seCk6bWUoVFswXSxUWzFdKSk6bGU/bWUoVCx4KTptZShUKX07aWYobmUpX2U9Vy5p''@;'; put 'put ''dGVyYXRvcjtlbHNlIGlmKGllKV9lPVc7ZWxzZXtpZighKFRlPXooVykpKXRocm93IG5ldyBMKEIoVykrIiBpcyBub3QgaXRlcmFibGUiKTtpZih3KFRlKSl7Zm9yKFNlPTAsamU9UChXKTtqZT5TZTtTZSsrKWlmKChWPUMoV1tTZV0pKSYmRihVLFYpKXJldHVybiBWO3JldHVybiBuZXcgSygh''@;'; put 'put ''MSl9X2U9TyhXLFRlKX1mb3IocD1uZT9XLm5leHQ6X2UubmV4dDshKGI9XyhwLF9lKSkuZG9uZTspe3RyeXtWPUMoYi52YWx1ZSl9Y2F0Y2goVCl7TihfZSwidGhyb3ciLFQpfWlmKCJvYmplY3QiPT10eXBlb2YgViYmViYmRihVLFYpKXJldHVybiBWfXJldHVybiBuZXcgSyghMSl9fSw2NjU0''@;'; put 'put ''MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2OTI2KSxfPXkoMTEwOCksZz15KDg2MTE1KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyxQKXt2YXIgRixPO18oQik7dHJ5e2lmKCEoRj1nKEIsInJldHVybiIpKSl7aWYoInRocm93Ij09PXcpdGhyb3cgUDtyZXR1cm4gUH1GPUko''@;'; put 'put ''RixCKX1jYXRjaCh6KXtPPSEwLEY9en1pZigidGhyb3ciPT09dyl0aHJvdyBQO2lmKE8pdGhyb3cgRjtyZXR1cm4gXyhGKSxQfX0sNjk5MTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjkyNiksXz15KDk3OTUxKSxnPXkoMzY2NzgpLEI9eSgxNDc1MCksdz15KDU4MDEyKSxQ''@;'; put 'put ''PXkoNDczNiksRj15KDg2MTE1KSxPPXkoNzg5NjgpLkl0ZXJhdG9yUHJvdG90eXBlLHo9eSg1ODk3OCksTj15KDY2NTQyKSxMPXcoInRvU3RyaW5nVGFnIiksSz0iSXRlcmF0b3JIZWxwZXIiLFU9IldyYXBGb3JWYWxpZEl0ZXJhdG9yIixXPVAuc2V0LFk9ZnVuY3Rpb24oSil7dmFyIG5lPVAu''@;'; put 'put ''Z2V0dGVyRm9yKEo/VTpLKTtyZXR1cm4gQihfKE8pLHtuZXh0OmZ1bmN0aW9uKCl7dmFyIGxlPW5lKHRoaXMpO2lmKEopcmV0dXJuIGxlLm5leHRIYW5kbGVyKCk7aWYobGUuZG9uZSlyZXR1cm4geih2b2lkIDAsITApO3RyeXt2YXIgbWU9bGUubmV4dEhhbmRsZXIoKTtyZXR1cm4gbGUucmV0''@;'; put 'put ''dXJuSGFuZGxlclJlc3VsdD9tZTp6KG1lLGxlLmRvbmUpfWNhdGNoKF9lKXt0aHJvdyBsZS5kb25lPSEwLF9lfX0scmV0dXJuOmZ1bmN0aW9uKCl7dmFyIGllPW5lKHRoaXMpLGxlPWllLml0ZXJhdG9yO2lmKGllLmRvbmU9ITAsSil7dmFyIG1lPUYobGUsInJldHVybiIpO3JldHVybiBtZT9J''@;'; put 'put ''KG1lLGxlKTp6KHZvaWQgMCwhMCl9aWYoaWUuaW5uZXIpdHJ5e04oaWUuaW5uZXIuaXRlcmF0b3IsIm5vcm1hbCIpfWNhdGNoKF9lKXtyZXR1cm4gTihsZSwidGhyb3ciLF9lKX1yZXR1cm4gbGUmJk4obGUsIm5vcm1hbCIpLHoodm9pZCAwLCEwKX19KX0scT1ZKCEwKSxlZT1ZKCExKTtnKGVl''@;'; put 'put ''LEwsIkl0ZXJhdG9yIEhlbHBlciIpLHVlLmV4cG9ydHM9ZnVuY3Rpb24oSixuZSxpZSl7dmFyIGxlPWZ1bmN0aW9uKF9lLFRlKXtUZT8oVGUuaXRlcmF0b3I9X2UuaXRlcmF0b3IsVGUubmV4dD1fZS5uZXh0KTpUZT1fZSxUZS50eXBlPW5lP1U6SyxUZS5yZXR1cm5IYW5kbGVyUmVzdWx0PSEh''@;'; put 'put ''aWUsVGUubmV4dEhhbmRsZXI9SixUZS5jb3VudGVyPTAsVGUuZG9uZT0hMSxXKHRoaXMsVGUpfTtyZXR1cm4gbGUucHJvdG90eXBlPW5lP3E6ZWUsbGV9fSw0MTI1MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzOTYzKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sZyl7dmFyIEI9''@;'; put 'put ''SS5JdGVyYXRvcix3PUImJkIucHJvdG90eXBlLFA9dyYmd1tfXSxGPSExO2lmKFApdHJ5e1AuY2FsbCh7bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEwfX0scmV0dXJuOmZ1bmN0aW9uKCl7Rj0hMH19LC0xKX1jYXRjaChPKXtPIGluc3RhbmNlb2YgZ3x8KEY9ITEpfWlmKCFGKXJldHVy''@;'; put 'put ''biBQfX0sNzg5Njg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEwsSyxVLEk9eSg1NTU5MiksXz15KDE5MTUwKSxnPXkoMzI2MzMpLEI9eSg5Nzk1MSksdz15KDI2NDAwKSxQPXkoMzEwODMpLEY9eSg1ODAxMiksTz15KDg4Nzg4KSx6PUYoIml0ZXJhdG9yIiksTj0hMTtbXS5rZXlzJiYo''@;'; put 'put ''Im5leHQiaW4oVT1bXS5rZXlzKCkpPyhLPXcodyhVKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKEw9Syk6Tj0hMCksIWcoTCl8fEkoZnVuY3Rpb24oKXt2YXIgWT17fTtyZXR1cm4gTFt6XS5jYWxsKFkpIT09WX0pP0w9e306TyYmKEw9QihMKSksXyhMW3pdKXx8UChMLHosZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpc30pLHVlLmV4cG9ydHM9e0l0ZXJhdG9yUHJvdG90eXBlOkwsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpOfX0sMTkyNTg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17fX0sNzE3MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk0MjM3KTt1ZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKF8pe3JldHVybiBJKF8ubGVuZ3RoKX19LDE2OTgwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89eSg1NTU5MiksZz15KDE5MTUwKSxCPXkoMzhlMyksdz15KDQ2Mzg3KSxQPXkoODk5ODEpLkNPTkZJR1VSQUJMRSxGPXkoMjY5MzEpLE89eSg0NzM2''@;'; put 'put ''KSx6PU8uZW5mb3JjZSxOPU8uZ2V0LEw9U3RyaW5nLEs9T2JqZWN0LmRlZmluZVByb3BlcnR5LFU9SSgiIi5zbGljZSksVz1JKCIiLnJlcGxhY2UpLFk9SShbXS5qb2luKSxxPXcmJiFfKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1LKGZ1bmN0aW9uKCl7fSwibGVuZ3RoIix7dmFsdWU6OH0pLmxl''@;'; put 'put ''bmd0aH0pLGVlPVN0cmluZyhTdHJpbmcpLnNwbGl0KCJTdHJpbmciKSxKPXVlLmV4cG9ydHM9ZnVuY3Rpb24obmUsaWUsbGUpeyJTeW1ib2woIj09PVUoTChpZSksMCw3KSYmKGllPSJbIitXKEwoaWUpLC9eU3ltYm9sXCgoW14pXSopXCkuKiQvLCIkMSIpKyJdIiksbGUmJmxlLmdldHRlciYm''@;'; put 'put ''KGllPSJnZXQgIitpZSksbGUmJmxlLnNldHRlciYmKGllPSJzZXQgIitpZSksKCFCKG5lLCJuYW1lIil8fFAmJm5lLm5hbWUhPT1pZSkmJih3P0sobmUsIm5hbWUiLHt2YWx1ZTppZSxjb25maWd1cmFibGU6ITB9KTpuZS5uYW1lPWllKSxxJiZsZSYmQihsZSwiYXJpdHkiKSYmbmUubGVuZ3Ro''@;'; put 'put ''IT09bGUuYXJpdHkmJksobmUsImxlbmd0aCIse3ZhbHVlOmxlLmFyaXR5fSk7dHJ5e2xlJiZCKGxlLCJjb25zdHJ1Y3RvciIpJiZsZS5jb25zdHJ1Y3Rvcj93JiZLKG5lLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOm5lLnByb3RvdHlwZSYmKG5lLnByb3RvdHlwZT12b2lkIDApfWNhdGNo''@;'; put 'put ''e312YXIgbWU9eihuZSk7cmV0dXJuIEIobWUsInNvdXJjZSIpfHwobWUuc291cmNlPVkoZWUsInN0cmluZyI9PXR5cGVvZiBpZT9pZToiIikpLG5lfTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9SihmdW5jdGlvbigpe3JldHVybiBnKHRoaXMpJiZOKHRoaXMpLnNvdXJjZXx8Rih0aGlz''@;'; put 'put ''KX0sInRvU3RyaW5nIil9LDE4NTU2OnVlPT57InVzZSBzdHJpY3QiO3ZhciBYPU1hdGguY2VpbCx5PU1hdGguZmxvb3I7dWUuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5jdGlvbihfKXt2YXIgZz0rXztyZXR1cm4oZz4wP3k6WCkoZyl9fSwzOTExNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST15KDY4MzMyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sZyl7cmV0dXJuIHZvaWQgMD09PV8/YXJndW1lbnRzLmxlbmd0aDwyPyIiOmc6SShfKX19LDk3OTUxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBlZSxJPXkoMTEwOCksXz15KDcxMTY4KSxnPXkoNTg1NDApLEI9eSgzNDY3''@;'; put 'put ''MCksdz15KDg3MzcyKSxQPXkoNTU5ODgpLEY9eSg3OTY2MiksTj0icHJvdG90eXBlIixMPSJzY3JpcHQiLEs9RigiSUVfUFJPVE8iKSxVPWZ1bmN0aW9uKCl7fSxXPWZ1bmN0aW9uKG5lKXtyZXR1cm4iPCIrTCsiPiIrbmUrIjwvIitMKyI+In0sWT1mdW5jdGlvbihuZSl7bmUud3JpdGUoVygi''@;'; put 'put ''IikpLG5lLmNsb3NlKCk7dmFyIGllPW5lLnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIG5lPW51bGwsaWV9LEo9ZnVuY3Rpb24oKXt0cnl7ZWU9bmV3IEFjdGl2ZVhPYmplY3QoImh0bWxmaWxlIil9Y2F0Y2h7fUo9dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5kb21haW4mJmVlP1ko''@;'; put 'put ''ZWUpOmZ1bmN0aW9uKCl7dmFyIGxlLG5lPVAoImlmcmFtZSIpLGllPSJqYXZhIitMKyI6IjtyZXR1cm4gbmUuc3R5bGUuZGlzcGxheT0ibm9uZSIsdy5hcHBlbmRDaGlsZChuZSksbmUuc3JjPVN0cmluZyhpZSksKGxlPW5lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxsZS53cml0''@;'; put 'put ''ZShXKCJkb2N1bWVudC5GPU9iamVjdCIpKSxsZS5jbG9zZSgpLGxlLkZ9KCk6WShlZSk7Zm9yKHZhciBuZT1nLmxlbmd0aDtuZS0tOylkZWxldGUgSltOXVtnW25lXV07cmV0dXJuIEooKX07QltLXT0hMCx1ZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGllLGxlKXt2YXIgbWU7''@;'; put 'put ''cmV0dXJuIG51bGwhPT1pZT8oVVtOXT1JKGllKSxtZT1uZXcgVSxVW05dPW51bGwsbWVbS109aWUpOm1lPUooKSx2b2lkIDA9PT1sZT9tZTpfLmYobWUsbGUpfX0sNzExNjg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjM4NyksXz15KDI2OTI5KSxnPXkoNDQ2NDgpLEI9eSgx''@;'; put 'put ''MTA4KSx3PXkoOTMxNjIpLFA9eSgxMDE0Myk7WC5mPUkmJiFfP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKE8seil7QihPKTtmb3IodmFyIFcsTj13KHopLEw9UCh6KSxLPUwubGVuZ3RoLFU9MDtLPlU7KWcuZihPLFc9TFtVKytdLE5bV10pO3JldHVybiBPfX0sNDQ2NDg6KHVl''@;'; put 'put ''LFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjM4NyksXz15KDU3MjQ0KSxnPXkoMjY5MjkpLEI9eSgxMTA4KSx3PXkoNTk0MTApLFA9VHlwZUVycm9yLEY9T2JqZWN0LmRlZmluZVByb3BlcnR5LE89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix6PSJlbnVtZXJhYmxlIixO''@;'; put 'put ''PSJjb25maWd1cmFibGUiLEw9IndyaXRhYmxlIjtYLmY9ST9nP2Z1bmN0aW9uKFUsVyxZKXtpZihCKFUpLFc9dyhXKSxCKFkpLCJmdW5jdGlvbiI9PXR5cGVvZiBVJiYicHJvdG90eXBlIj09PVcmJiJ2YWx1ZSJpbiBZJiZMIGluIFkmJiFZW0xdKXt2YXIgcT1PKFUsVyk7cSYmcVtMXSYmKFVb''@;'; put 'put ''V109WS52YWx1ZSxZPXtjb25maWd1cmFibGU6TiBpbiBZP1lbTl06cVtOXSxlbnVtZXJhYmxlOnogaW4gWT9ZW3pdOnFbel0sd3JpdGFibGU6ITF9KX1yZXR1cm4gRihVLFcsWSl9OkY6ZnVuY3Rpb24oVSxXLFkpe2lmKEIoVSksVz13KFcpLEIoWSksXyl0cnl7cmV0dXJuIEYoVSxXLFkpfWNh''@;'; put 'put ''dGNoe31pZigiZ2V0ImluIFl8fCJzZXQiaW4gWSl0aHJvdyBuZXcgUCgiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gWSYmKFVbV109WS52YWx1ZSksVX19LDU0MTIyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDYzODcpLF89eSg0NjkyNiksZz15''@;'; put 'put ''KDM5NjIpLEI9eSg3Nzc3Myksdz15KDkzMTYyKSxQPXkoNTk0MTApLEY9eSgzOGUzKSxPPXkoNTcyNDQpLHo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtYLmY9ST96OmZ1bmN0aW9uKEwsSyl7aWYoTD13KEwpLEs9UChLKSxPKXRyeXtyZXR1cm4geihMLEspfWNhdGNoe31pZihG''@;'; put 'put ''KEwsSykpcmV0dXJuIEIoIV8oZy5mLEwsSyksTFtLXSl9fSwzNjE0MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDIzMzEzKSxnPXkoNTg1NDApLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7WC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih3KXty''@;'; put 'put ''ZXR1cm4gSSh3LGcpfX0sMjgwNzA6KHVlLFgpPT57InVzZSBzdHJpY3QiO1guZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwyNjQwMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM4ZTMpLF89eSgxOTE1MCksZz15KDMxOTUwKSxCPXkoNzk2NjIpLHc9eSg4MjgzNCks''@;'; put 'put ''UD1CKCJJRV9QUk9UTyIpLEY9T2JqZWN0LE89Ri5wcm90b3R5cGU7dWUuZXhwb3J0cz13P0YuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oeil7dmFyIE49Zyh6KTtpZihJKE4sUCkpcmV0dXJuIE5bUF07dmFyIEw9Ti5jb25zdHJ1Y3RvcjtyZXR1cm4gXyhMKSYmTiBpbnN0YW5jZW9mIEw/TC5w''@;'; put 'put ''cm90b3R5cGU6TiBpbnN0YW5jZW9mIEY/TzpudWxsfX0sNDY4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpO3VlLmV4cG9ydHM9SSh7fS5pc1Byb3RvdHlwZU9mKX0sMjMzMTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDM4ZTMpLGc9''@;'; put 'put ''eSg5MzE2MiksQj15KDc0ODI0KS5pbmRleE9mLHc9eSgzNDY3MCksUD1JKFtdLnB1c2gpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRixPKXt2YXIgSyx6PWcoRiksTj0wLEw9W107Zm9yKEsgaW4geikhXyh3LEspJiZfKHosSykmJlAoTCxLKTtmb3IoO08ubGVuZ3RoPk47KV8oeixLPU9bTisrXSkm''@;'; put 'put ''Jih+QihMLEspfHxQKEwsSykpO3JldHVybiBMfX0sMTAxNDM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMzMxMyksXz15KDU4NTQwKTt1ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihCKXtyZXR1cm4gSShCLF8pfX0sMzk2MjoodWUsWCk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIHk9e30ucHJvcGVydHlJc0VudW1lcmFibGUsST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLF89SSYmIXkuY2FsbCh7MToyfSwxKTtYLmY9Xz9mdW5jdGlvbihCKXt2YXIgdz1JKHRoaXMsQik7cmV0dXJuISF3JiZ3LmVudW1lcmFibGV9Onl9LDIxNjEyOih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPXkoNjkyMjcpLF89eSgzMjYzMyksZz15KDg4Mjc1KSxCPXkoMjc2Nyk7dWUuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgRix3PSExLFA9e307dHJ5eyhGPUkoT2JqZWN0LnByb3RvdHlwZSwi''@;'; put 'put ''X19wcm90b19fIiwic2V0IikpKFAsW10pLHc9UCBpbnN0YW5jZW9mIEFycmF5fWNhdGNoe31yZXR1cm4gZnVuY3Rpb24oeixOKXtyZXR1cm4gZyh6KSxCKE4pLF8oeikmJih3P0YoeixOKTp6Ll9fcHJvdG9fXz1OKSx6fX0oKTp2b2lkIDApfSw5Mzg2NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST15KDQ2OTI2KSxfPXkoMTkxNTApLGc9eSgzMjYzMyksQj1UeXBlRXJyb3I7dWUuZXhwb3J0cz1mdW5jdGlvbih3LFApe3ZhciBGLE87aWYoInN0cmluZyI9PT1QJiZfKEY9dy50b1N0cmluZykmJiFnKE89SShGLHcpKXx8XyhGPXcudmFsdWVPZikmJiFnKE89SShGLHcpKXx8InN0''@;'; put 'put ''cmluZyIhPT1QJiZfKEY9dy50b1N0cmluZykmJiFnKE89SShGLHcpKSlyZXR1cm4gTzt0aHJvdyBuZXcgQigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw4ODA3ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDEyMjAyKSxfPXkoNTg2MDcpLGc9''@;'; put 'put ''eSgzNjE0MyksQj15KDI4MDcwKSx3PXkoMTEwOCksUD1fKFtdLmNvbmNhdCk7dWUuZXhwb3J0cz1JKCJSZWZsZWN0Iiwib3duS2V5cyIpfHxmdW5jdGlvbihPKXt2YXIgej1nLmYodyhPKSksTj1CLmY7cmV0dXJuIE4/UCh6LE4oTykpOnp9fSw2MDMyMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST15KDQ0NjQ4KS5mO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnLEIpe0IgaW4gX3x8SShfLEIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ1tCXX0sc2V0OmZ1bmN0aW9uKHcpe2dbQl09d319KX19LDIyNzU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPXkoMTEwOCk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBfPUkodGhpcyksZz0iIjtyZXR1cm4gXy5oYXNJbmRpY2VzJiYoZys9ImQiKSxfLmdsb2JhbCYmKGcrPSJnIiksXy5pZ25vcmVDYXNlJiYoZys9ImkiKSxfLm11bHRpbGluZSYmKGcrPSJtIiksXy5kb3RBbGwmJihnKz0icyIp''@;'; put 'put ''LF8udW5pY29kZSYmKGcrPSJ1IiksXy51bmljb2RlU2V0cyYmKGcrPSJ2IiksXy5zdGlja3kmJihnKz0ieSIpLGd9fSwzNzA3NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2OTI2KSxfPXkoMzhlMyksZz15KDQ2OCksQj15KDIyNzU0KSx3PVJlZ0V4cC5wcm90b3R5cGU7dWUu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbihQKXt2YXIgRj1QLmZsYWdzO3JldHVybiB2b2lkIDAhPT1GfHwiZmxhZ3MiaW4gd3x8XyhQLCJmbGFncyIpfHwhZyh3LFApP0Y6SShCLFApfX0sODgyNzU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NDQ2OCksXz1UeXBlRXJyb3I7dWUuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihnKXtpZihJKGcpKXRocm93IG5ldyBfKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAiK2cpO3JldHVybiBnfX0sNDMyNDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIE4sST15KDMzOTYzKSxfPXkoNDAyMjApLGc9eSgxOTE1MCksQj15KDQ3MDkyKSx3PXkoMjM1OCksUD15''@;'; put 'put ''KDc3NjM5KSxGPXkoMjc5NjcpLE89SS5GdW5jdGlvbix6PS9NU0lFIC5cLi8udGVzdCh3KXx8IkJVTiI9PT1CJiYoKE49SS5CdW4udmVyc2lvbi5zcGxpdCgiLiIpKS5sZW5ndGg8M3x8IjAiPT09TlswXSYmKE5bMV08M3x8IjMiPT09TlsxXSYmIjAiPT09TlsyXSkpO3VlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24oTixMKXt2YXIgSz1MPzI6MTtyZXR1cm4gej9mdW5jdGlvbihVLFcpe3ZhciBZPUYoYXJndW1lbnRzLmxlbmd0aCwxKT5LLHE9ZyhVKT9VOk8oVSksZWU9WT9QKGFyZ3VtZW50cyxLKTpbXSxKPVk/ZnVuY3Rpb24oKXtfKHEsdGhpcyxlZSl9OnE7cmV0dXJuIEw/TihKLFcpOk4oSil9''@;'; put 'put ''Ok59fSwxNDQ1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTc1NDEpLF89eSgyMTkxMCksZz1JLlNldCxCPUkuYWRkO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyl7dmFyIFA9bmV3IGc7cmV0dXJuIF8odyxmdW5jdGlvbihGKXtCKFAsRil9KSxQfX0sODAyMTM6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9eSgzNzczMSksXz15KDk3NTQxKSxnPXkoMTQ0NSksQj15KDMwMzM5KSx3PXkoNDM2MzIpLFA9eSgyMTkxMCksRj15KDExMzgpLE89Xy5oYXMsej1fLnJlbW92ZTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEwpe3ZhciBLPUkodGhpcyksVT13KEwpLFc9ZyhLKTtyZXR1''@;'; put 'put ''cm4gQihLKTw9VS5zaXplP1AoSyxmdW5jdGlvbihZKXtVLmluY2x1ZGVzKFkpJiZ6KFcsWSl9KTpGKFUuZ2V0SXRlcmF0b3IoKSxmdW5jdGlvbihZKXtPKEssWSkmJnooVyxZKX0pLFd9fSw5NzU0MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPVNldC5wcm90b3R5''@;'; put 'put ''cGU7dWUuZXhwb3J0cz17U2V0LGFkZDpJKF8uYWRkKSxoYXM6SShfLmhhcykscmVtb3ZlOkkoXy5kZWxldGUpLHByb3RvOl99fSw2MTg3OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3NzMxKSxfPXkoOTc1NDEpLGc9eSgzMDMzOSksQj15KDQzNjMyKSx3PXkoMjE5MTApLFA9''@;'; put 'put ''eSgxMTM4KSxGPV8uU2V0LE89Xy5hZGQsej1fLmhhczt1ZS5leHBvcnRzPWZ1bmN0aW9uKEwpe3ZhciBLPUkodGhpcyksVT1CKEwpLFc9bmV3IEY7cmV0dXJuIGcoSyk+VS5zaXplP1AoVS5nZXRJdGVyYXRvcigpLGZ1bmN0aW9uKFkpe3ooSyxZKSYmTyhXLFkpfSk6dyhLLGZ1bmN0aW9uKFkp''@;'; put 'put ''e1UuaW5jbHVkZXMoWSkmJk8oVyxZKX0pLFd9fSw3MzYyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3NzMxKSxfPXkoOTc1NDEpLmhhcyxnPXkoMzAzMzkpLEI9eSg0MzYzMiksdz15KDIxOTEwKSxQPXkoMTEzOCksRj15KDY2NTQyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHop''@;'; put 'put ''e3ZhciBOPUkodGhpcyksTD1CKHopO2lmKGcoTik8PUwuc2l6ZSlyZXR1cm4hMSE9PXcoTixmdW5jdGlvbihVKXtpZihMLmluY2x1ZGVzKFUpKXJldHVybiExfSwhMCk7dmFyIEs9TC5nZXRJdGVyYXRvcigpO3JldHVybiExIT09UChLLGZ1bmN0aW9uKFUpe2lmKF8oTixVKSlyZXR1cm4gRihL''@;'; put 'put ''LCJub3JtYWwiLCExKX0pfX0sNzQ4Mzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzczMSksXz15KDMwMzM5KSxnPXkoMjE5MTApLEI9eSg0MzYzMik7dWUuZXhwb3J0cz1mdW5jdGlvbihQKXt2YXIgRj1JKHRoaXMpLE89QihQKTtyZXR1cm4hKF8oRik+Ty5zaXplKSYmITEh''@;'; put 'put ''PT1nKEYsZnVuY3Rpb24oeil7aWYoIU8uaW5jbHVkZXMoeikpcmV0dXJuITF9LCEwKX19LDk2MDYyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc3MzEpLF89eSg5NzU0MSkuaGFzLGc9eSgzMDMzOSksQj15KDQzNjMyKSx3PXkoMTEzOCksUD15KDY2NTQyKTt1ZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKE8pe3ZhciB6PUkodGhpcyksTj1CKE8pO2lmKGcoeik8Ti5zaXplKXJldHVybiExO3ZhciBMPU4uZ2V0SXRlcmF0b3IoKTtyZXR1cm4hMSE9PXcoTCxmdW5jdGlvbihLKXtpZighXyh6LEspKXJldHVybiBQKEwsIm5vcm1hbCIsITEpfSl9fSwyMTkxMDoodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPXkoMTEzOCksZz15KDk3NTQxKSxCPWcuU2V0LHc9Zy5wcm90byxQPUkody5mb3JFYWNoKSxGPUkody5rZXlzKSxPPUYobmV3IEIpLm5leHQ7dWUuZXhwb3J0cz1mdW5jdGlvbih6LE4sTCl7cmV0dXJuIEw/Xyh7aXRlcmF0b3I6Rih6KSxuZXh0''@;'; put 'put ''Ok99LE4pOlAoeixOKX19LDUzNTA1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTIyMDIpLF89ZnVuY3Rpb24oQil7cmV0dXJue3NpemU6QixoYXM6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sa2V5czpmdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6''@;'; put 'put ''ITB9fX19fX0sZz1mdW5jdGlvbihCKXtyZXR1cm57c2l6ZTpCLGhhczpmdW5jdGlvbigpe3JldHVybiEwfSxrZXlzOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJlIil9fX07dWUuZXhwb3J0cz1mdW5jdGlvbihCLHcpe3ZhciBQPUkoIlNldCIpO3RyeXsobmV3IFApW0JdKF8oMCkpO3Ry''@;'; put 'put ''eXtyZXR1cm4obmV3IFApW0JdKF8oLTEpKSwhMX1jYXRjaHtpZighdylyZXR1cm4hMDt0cnl7cmV0dXJuKG5ldyBQKVtCXShnKC0xLzApKSwhMX1jYXRjaHt2YXIgRj1uZXcgUDtyZXR1cm4gRi5hZGQoMSksRi5hZGQoMiksdyhGW0JdKGcoMS8wKSkpfX19Y2F0Y2h7cmV0dXJuITF9fX0sMzAz''@;'; put 'put ''Mzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2OTIyNyksXz15KDk3NTQxKTt1ZS5leHBvcnRzPUkoXy5wcm90bywic2l6ZSIsImdldCIpfHxmdW5jdGlvbihnKXtyZXR1cm4gZy5zaXplfX0sODUwMzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzczMSksXz15''@;'; put 'put ''KDk3NTQxKSxnPXkoMTQ0NSksQj15KDQzNjMyKSx3PXkoMTEzOCksUD1fLmFkZCxGPV8uaGFzLE89Xy5yZW1vdmU7dWUuZXhwb3J0cz1mdW5jdGlvbihOKXt2YXIgTD1JKHRoaXMpLEs9QihOKS5nZXRJdGVyYXRvcigpLFU9ZyhMKTtyZXR1cm4gdyhLLGZ1bmN0aW9uKFcpe0YoTCxXKT9PKFUs''@;'; put 'put ''Vyk6UChVLFcpfSksVX19LDIwNTA3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc3MzEpLF89eSg5NzU0MSkuYWRkLGc9eSgxNDQ1KSxCPXkoNDM2MzIpLHc9eSgxMTM4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe3ZhciBPPUkodGhpcyksej1CKEYpLmdldEl0ZXJhdG9yKCks''@;'; put 'put ''Tj1nKE8pO3JldHVybiB3KHosZnVuY3Rpb24oTCl7XyhOLEwpfSksTn19LDc5NjYyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODc0ODQpLF89eSg2Mzk1MSksZz1JKCJrZXlzIik7dWUuZXhwb3J0cz1mdW5jdGlvbihCKXtyZXR1cm4gZ1tCXXx8KGdbQl09XyhCKSl9fSw0ODM1''@;'; put 'put ''NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg4Nzg4KSxfPXkoMzM5NjMpLGc9eSg0ODEwNCksQj0iX19jb3JlLWpzX3NoYXJlZF9fIix3PXVlLmV4cG9ydHM9X1tCXXx8ZyhCLHt9KTsody52ZXJzaW9uc3x8KHcudmVyc2lvbnM9W10pKS5wdXNoKHt2ZXJzaW9uOiIzLjQyLjAi''@;'; put 'put ''LG1vZGU6ST8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiJceGE5IDIwMTQtMjAyNSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My40Mi4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9n''@;'; put 'put ''aXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSl9LDg3NDg0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDgzNTYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxnKXtyZXR1cm4gSVtfXXx8KElbX109Z3x8e30pfX0sMzY1MDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9''@;'; put 'put ''eSg0NDA2NiksXz15KDU1NTkyKSxCPXkoMzM5NjMpLlN0cmluZzt1ZS5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIV8oZnVuY3Rpb24oKXt2YXIgdz1TeW1ib2woInN5bWJvbCBkZXRlY3Rpb24iKTtyZXR1cm4hQih3KXx8IShPYmplY3QodylpbnN0YW5jZW9mIFN5''@;'; put 'put ''bWJvbCl8fCFTeW1ib2wuc2hhbSYmSSYmSTw0MX0pfSw3NTk2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBfZSxUZSxTZSxqZSxJPXkoMzM5NjMpLF89eSg0MDIyMCksZz15KDc4ODExKSxCPXkoMTkxNTApLHc9eSgzOGUzKSxQPXkoNTU1OTIpLEY9eSg4NzM3MiksTz15KDc3NjM5KSx6''@;'; put 'put ''PXkoNTU5ODgpLE49eSgyNzk2NyksTD15KDQ0MTM3KSxLPXkoMjE1MTApLFU9SS5zZXRJbW1lZGlhdGUsVz1JLmNsZWFySW1tZWRpYXRlLFk9SS5wcm9jZXNzLHE9SS5EaXNwYXRjaCxlZT1JLkZ1bmN0aW9uLEo9SS5NZXNzYWdlQ2hhbm5lbCxuZT1JLlN0cmluZyxpZT0wLGxlPXt9LG1lPSJv''@;'; put 'put ''bnJlYWR5c3RhdGVjaGFuZ2UiO1AoZnVuY3Rpb24oKXtfZT1JLmxvY2F0aW9ufSk7dmFyIFY9ZnVuY3Rpb24oQyl7aWYodyhsZSxDKSl7dmFyIFQ9bGVbQ107ZGVsZXRlIGxlW0NdLFQoKX19LHA9ZnVuY3Rpb24oQyl7cmV0dXJuIGZ1bmN0aW9uKCl7VihDKX19LGI9ZnVuY3Rpb24oQyl7VihD''@;'; put 'put ''LmRhdGEpfSx4PWZ1bmN0aW9uKEMpe0kucG9zdE1lc3NhZ2UobmUoQyksX2UucHJvdG9jb2wrIi8vIitfZS5ob3N0KX07KCFVfHwhVykmJihVPWZ1bmN0aW9uKFQpe04oYXJndW1lbnRzLmxlbmd0aCwxKTt2YXIgSD1CKFQpP1Q6ZWUoVCksaj1PKGFyZ3VtZW50cywxKTtyZXR1cm4gbGVbKytp''@;'; put 'put ''ZV09ZnVuY3Rpb24oKXtfKEgsdm9pZCAwLGopfSxUZShpZSksaWV9LFc9ZnVuY3Rpb24oVCl7ZGVsZXRlIGxlW1RdfSxLP1RlPWZ1bmN0aW9uKEMpe1kubmV4dFRpY2socChDKSl9OnEmJnEubm93P1RlPWZ1bmN0aW9uKEMpe3Eubm93KHAoQykpfTpKJiYhTD8oamU9KFNlPW5ldyBKKS5wb3J0''@;'; put 'put ''MixTZS5wb3J0MS5vbm1lc3NhZ2U9YixUZT1nKGplLnBvc3RNZXNzYWdlLGplKSk6SS5hZGRFdmVudExpc3RlbmVyJiZCKEkucG9zdE1lc3NhZ2UpJiYhSS5pbXBvcnRTY3JpcHRzJiZfZSYmImZpbGU6IiE9PV9lLnByb3RvY29sJiYhUCh4KT8oVGU9eCxJLmFkZEV2ZW50TGlzdGVuZXIoIm1l''@;'; put 'put ''c3NhZ2UiLGIsITEpKTpUZT1tZSBpbiB6KCJzY3JpcHQiKT9mdW5jdGlvbihDKXtGLmFwcGVuZENoaWxkKHooInNjcmlwdCIpKVttZV09ZnVuY3Rpb24oKXtGLnJlbW92ZUNoaWxkKHRoaXMpLFYoQyl9fTpmdW5jdGlvbihDKXtzZXRUaW1lb3V0KHAoQyksMCl9KSx1ZS5leHBvcnRzPXtzZXQ6''@;'; put 'put ''VSxjbGVhcjpXfX0sNzQ4NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0NTUwKSxfPU1hdGgubWF4LGc9TWF0aC5taW47dWUuZXhwb3J0cz1mdW5jdGlvbihCLHcpe3ZhciBQPUkoQik7cmV0dXJuIFA8MD9fKFArdywwKTpnKFAsdyl9fSw5MzE2MjoodWUsWCx5KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST15KDU1OCksXz15KDg4Mjc1KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe3JldHVybiBJKF8oZykpfX0sNjQ1NTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxODU1Nik7dWUuZXhwb3J0cz1mdW5jdGlvbihfKXt2YXIgZz0rXztyZXR1cm4gZyE9Z3x8MD09''@;'; put 'put ''PWc/MDpJKGcpfX0sOTQyMzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDU1MCksXz1NYXRoLm1pbjt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe3ZhciBCPUkoZyk7cmV0dXJuIEI+MD9fKEIsOTAwNzE5OTI1NDc0MDk5MSk6MH19LDMxOTUwOih1ZSxYLHkpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXkoODgyNzUpLF89T2JqZWN0O3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7cmV0dXJuIF8oSShnKSl9fSw4NTY1NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2OTI2KSxfPXkoMzI2MzMpLGc9eSg5Mjk5OCksQj15KDg2MTE1KSx3PXkoOTM4NjUpLFA9eSg1ODAx''@;'; put 'put ''MiksRj1UeXBlRXJyb3IsTz1QKCJ0b1ByaW1pdGl2ZSIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeixOKXtpZighXyh6KXx8Zyh6KSlyZXR1cm4gejt2YXIgSyxMPUIoeixPKTtpZihMKXtpZih2b2lkIDA9PT1OJiYoTj0iZGVmYXVsdCIpLEs9SShMLHosTiksIV8oSyl8fGcoSykpcmV0dXJuIEs7''@;'; put 'put ''dGhyb3cgbmV3IEYoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1OJiYoTj0ibnVtYmVyIiksdyh6LE4pfX0sNTk0MTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NTY1NiksXz15KDkyOTk4KTt1ZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3ZhciBCPUkoZywic3RyaW5nIik7cmV0dXJuIF8oQik/QjpCKyIifX0sMzg1OTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIGc9e307Z1t5KDU4MDEyKSgidG9TdHJpbmdUYWciKV09InoiLHVlLmV4cG9ydHM9IltvYmplY3Qgel0iPT09U3RyaW5nKGcpfSw2ODMzMjoo''@;'; put 'put ''dWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDcxODI0KSxfPVN0cmluZzt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe2lmKCJTeW1ib2wiPT09SShnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyIpO3JldHVybiBfKGcp''@;'; put 'put ''fX0sNzUyMTI6dWU9PnsidXNlIHN0cmljdCI7dmFyIFg9U3RyaW5nO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSl7dHJ5e3JldHVybiBYKHkpfWNhdGNoe3JldHVybiJPYmplY3QifX19LDYzOTUxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89MCxnPU1hdGgucmFuZG9t''@;'; put 'put ''KCksQj1JKDEuLnRvU3RyaW5nKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiJTeW1ib2woIisodm9pZCAwPT09dz8iIjp3KSsiKV8iK0IoKytfK2csMzYpfX0sNjY5OTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNjUwNik7dWUuZXhwb3J0cz1JJiYhU3ltYm9sLnNo''@;'; put 'put ''YW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSwyNjkyOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2Mzg3KSxfPXkoNTU1OTIpO3VlLmV4cG9ydHM9SSYmXyhmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigp''@;'; put 'put ''e30sInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRhYmxlOiExfSkucHJvdG90eXBlfSl9LDI3OTY3OnVlPT57InVzZSBzdHJpY3QiO3ZhciBYPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7aWYoeTxJKXRocm93IG5ldyBYKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVy''@;'; put 'put ''biB5fX0sNDg2OTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzk2MyksXz15KDE5MTUwKSxnPUkuV2Vha01hcDt1ZS5leHBvcnRzPV8oZykmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoZykpfSw1ODAxMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzOTYz''@;'; put 'put ''KSxfPXkoODc0ODQpLGc9eSgzOGUzKSxCPXkoNjM5NTEpLHc9eSgzNjUwNiksUD15KDY2OTk1KSxGPUkuU3ltYm9sLE89Xygid2tzIiksej1QP0YuZm9yfHxGOkYmJkYud2l0aG91dFNldHRlcnx8Qjt1ZS5leHBvcnRzPWZ1bmN0aW9uKE4pe3JldHVybiBnKE8sTil8fChPW05dPXcmJmcoRixO''@;'; put 'put ''KT9GW05dOnooIlN5bWJvbC4iK04pKSxPW05dfX0sMzI5MzA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxMjIwMiksXz15KDM4ZTMpLGc9eSgzNjY3OCksQj15KDQ2OCksdz15KDIxNjEyKSxQPXkoNDg2MzkpLEY9eSg2MDMyMSksTz15KDE3Mjk2KSx6PXkoMzkxMTYpLE49eSg2''@;'; put 'put ''NDg1NSksTD15KDIyMzA0KSxLPXkoNDYzODcpLFU9eSg4ODc4OCk7dWUuZXhwb3J0cz1mdW5jdGlvbihXLFkscSxlZSl7dmFyIEo9InN0YWNrVHJhY2VMaW1pdCIsbmU9ZWU/MjoxLGllPVcuc3BsaXQoIi4iKSxsZT1pZVtpZS5sZW5ndGgtMV0sbWU9SS5hcHBseShudWxsLGllKTtpZihtZSl7''@;'; put 'put ''dmFyIF9lPW1lLnByb3RvdHlwZTtpZighVSYmXyhfZSwiY2F1c2UiKSYmZGVsZXRlIF9lLmNhdXNlLCFxKXJldHVybiBtZTt2YXIgVGU9SSgiRXJyb3IiKSxTZT1ZKGZ1bmN0aW9uKGplLFYpe3ZhciBwPXooZWU/VjpqZSx2b2lkIDApLGI9ZWU/bmV3IG1lKGplKTpuZXcgbWU7cmV0dXJuIHZv''@;'; put 'put ''aWQgMCE9PXAmJmcoYiwibWVzc2FnZSIscCksTChiLFNlLGIuc3RhY2ssMiksdGhpcyYmQihfZSx0aGlzKSYmTyhiLHRoaXMsU2UpLGFyZ3VtZW50cy5sZW5ndGg+bmUmJk4oYixhcmd1bWVudHNbbmVdKSxifSk7aWYoU2UucHJvdG90eXBlPV9lLCJFcnJvciIhPT1sZT93P3coU2UsVGUpOlAo''@;'; put 'put ''U2UsVGUse25hbWU6ITB9KTpLJiZKIGluIG1lJiYoRihTZSxtZSxKKSxGKFNlLG1lLCJwcmVwYXJlU3RhY2tUcmFjZSIpKSxQKFNlLG1lKSwhVSl0cnl7X2UubmFtZSE9PWxlJiZnKF9lLCJuYW1lIixsZSksX2UuY29uc3RydWN0b3I9U2V9Y2F0Y2h7fXJldHVybiBTZX19fSwzOTA5MjoodWUs''@;'; put 'put ''WCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoMzE5NTApLGc9eSg3MTcxKSxCPXkoNjQ1NTApLHc9eSg3MDgyNCk7SSh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHthdDpmdW5jdGlvbihGKXt2YXIgTz1fKHRoaXMpLHo9ZyhPKSxOPUIoRiksTD1OPj0wP046eitOO3Jl''@;'; put 'put ''dHVybiBMPDB8fEw+PXo/dm9pZCAwOk9bTF19fSksdygiYXQiKX0sNzc1MjU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMxOTUwKSxnPXkoNzE3MSksQj15KDM5MjA2KSx3PXkoMzMxNik7SSh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3Jj''@;'; put 'put ''ZWQ6eSg1NTU5MikoZnVuY3Rpb24oKXtyZXR1cm4gNDI5NDk2NzI5NyE9PVtdLnB1c2guY2FsbCh7bGVuZ3RoOjQyOTQ5NjcyOTZ9LDEpfSl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkucHVzaCgpfWNhdGNoKE4pe3Jl''@;'; put 'put ''dHVybiBOIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKX0se3B1c2g6ZnVuY3Rpb24oTCl7dmFyIEs9Xyh0aGlzKSxVPWcoSyksVz1hcmd1bWVudHMubGVuZ3RoO3coVStXKTtmb3IodmFyIFk9MDtZPFc7WSsrKUtbVV09YXJndW1lbnRzW1ldLFUrKztyZXR1cm4gQihLLFUpLFV9fSl9LDIzMDEy''@;'; put 'put ''Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg1ODYwNyksZz15KDMxNDgzKSxCPXkoOTMxNjIpLHc9eSgzODgxKSxQPXkoNjY1MDMpLEY9eSg3MDgyNCksTz1BcnJheSx6PV8oUCgiQXJyYXkiLCJzb3J0IikpO0koe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7''@;'; put 'put ''dG9Tb3J0ZWQ6ZnVuY3Rpb24oTCl7dm9pZCAwIT09TCYmZyhMKTt2YXIgSz1CKHRoaXMpLFU9dyhPLEspO3JldHVybiB6KFUsTCl9fSksRigidG9Tb3J0ZWQiKX0sNjgxNDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSg3MDgyNCkoImZsYXRNYXAiKX0sOTM5MDk6KHVlLFgseSk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7eSg3MDgyNCkoImZsYXQiKX0sMjk3NjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMxOTUwKSxnPXkoNzE3MSksQj15KDM5MjA2KSx3PXkoNDMxOTUpLFA9eSgzMzE2KTtJKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNl''@;'; put 'put ''ZDoxIT09W10udW5zaGlmdCgwKXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS51bnNoaWZ0KCl9Y2F0Y2goTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7dW5zaGlmdDpmdW5jdGlvbihMKXt2YXIg''@;'; put 'put ''Sz1fKHRoaXMpLFU9ZyhLKSxXPWFyZ3VtZW50cy5sZW5ndGg7aWYoVyl7UChVK1cpO2Zvcih2YXIgWT1VO1ktLTspe3ZhciBxPVkrVztZIGluIEs/S1txXT1LW1ldOncoSyxxKX1mb3IodmFyIGVlPTA7ZWU8VztlZSsrKUtbZWVdPWFyZ3VtZW50c1tlZV19cmV0dXJuIEIoSyxVK1cpfX0pfSw0''@;'; put 'put ''OTUzNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoMzM5NjMpLGc9eSg0MDIyMCksQj15KDMyOTMwKSx3PSJXZWJBc3NlbWJseSIsUD1fW3ddLEY9NyE9PW5ldyBFcnJvcigiZSIse2NhdXNlOjd9KS5jYXVzZSxPPWZ1bmN0aW9uKE4sTCl7dmFyIEs9e307S1tO''@;'; put 'put ''XT1CKE4sTCxGKSxJKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6Rn0sSyl9LHo9ZnVuY3Rpb24oTixMKXtpZihQJiZQW05dKXt2YXIgSz17fTtLW05dPUIodysiLiIrTixMLEYpLEkoe3RhcmdldDp3LHN0YXQ6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3Jj''@;'; put 'put ''ZWQ6Rn0sSyl9fTtPKCJFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLE8oIkV2YWxFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLE8oIlJhbmdl''@;'; put 'put ''RXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSxPKCJSZWZlcmVuY2VFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLE8oIlN5bnRheEVycm9yIixm''@;'; put 'put ''dW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSksTygiVHlwZUVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSksTygiVVJJRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSx6KCJDb21waWxlRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSx6KCJMaW5rRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihL''@;'; put 'put ''KXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSx6KCJSdW50aW1lRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KX0sOTYxODA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMzOTYz''@;'; put 'put ''KSxnPXkoNjMzMzYpLEI9eSgxMTA4KSx3PXkoMTkxNTApLFA9eSgyNjQwMCksRj15KDQ0MDM5KSxPPXkoNTg3OTUpLHo9eSg1NTU5MiksTj15KDM4ZTMpLEw9eSg1ODAxMiksSz15KDc4OTY4KS5JdGVyYXRvclByb3RvdHlwZSxVPXkoNDYzODcpLFc9eSg4ODc4OCksWT0iY29uc3RydWN0b3Ii''@;'; put 'put ''LHE9Ikl0ZXJhdG9yIixlZT1MKCJ0b1N0cmluZ1RhZyIpLEo9VHlwZUVycm9yLG5lPV9bcV0saWU9V3x8IXcobmUpfHxuZS5wcm90b3R5cGUhPT1LfHwheihmdW5jdGlvbigpe25lKHt9KX0pLGxlPWZ1bmN0aW9uKCl7aWYoZyh0aGlzLEspLFAodGhpcyk9PT1LKXRocm93IG5ldyBKKCJBYnN0''@;'; put 'put ''cmFjdCBjbGFzcyBJdGVyYXRvciBub3QgZGlyZWN0bHkgY29uc3RydWN0YWJsZSIpfSxtZT1mdW5jdGlvbihfZSxUZSl7VT9GKEssX2Use2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVGV9LHNldDpmdW5jdGlvbihTZSl7aWYoQih0aGlzKSx0aGlzPT09Syl0aHJvdyBu''@;'; put 'put ''ZXcgSigiWW91IGNhbid0IHJlZGVmaW5lIHRoaXMgcHJvcGVydHkiKTtOKHRoaXMsX2UpP3RoaXNbX2VdPVNlOk8odGhpcyxfZSxTZSl9fSk6S1tfZV09VGV9O04oSyxlZSl8fG1lKGVlLHEpLChpZXx8IU4oSyxZKXx8S1tZXT09PU9iamVjdCkmJm1lKFksbGUpLGxlLnByb3RvdHlwZT1LLEko''@;'; put 'put ''e2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCxmb3JjZWQ6aWV9LHtJdGVyYXRvcjpsZX0pfSwzOTU5NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNDY5MjYpLGc9eSgzMDc4NyksQj15KDMxNDgzKSx3PXkoMTEwOCksUD15KDc1NDI0KSxGPXkoNjY1NDIpLHo9''@;'; put 'put ''eSg0MTI1MikoImV2ZXJ5IixUeXBlRXJyb3IpO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOnp9LHtldmVyeTpmdW5jdGlvbihMKXt3KHRoaXMpO3RyeXtCKEwpfWNhdGNoKFcpe0YodGhpcywidGhyb3ciLFcpfWlmKHopcmV0dXJuIF8oeix0aGlzLEwpO3Zh''@;'; put 'put ''ciBLPVAodGhpcyksVT0wO3JldHVybiFnKEssZnVuY3Rpb24oVyxZKXtpZighTChXLFUrKykpcmV0dXJuIFkoKX0se0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDkyNTgwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiks''@;'; put 'put ''Zz15KDMxNDgzKSxCPXkoMTEwOCksdz15KDc1NDI0KSxQPXkoNjk5MTcpLEY9eSg0MjkyNiksTz15KDg4Nzg4KSx6PXkoNjY1NDIpLE49eSg0MTI1MiksTD0hTyYmTigiZmlsdGVyIixUeXBlRXJyb3IpLEs9UChmdW5jdGlvbigpe2Zvcih2YXIgcSxKLFU9dGhpcy5pdGVyYXRvcixXPXRoaXMu''@;'; put 'put ''cHJlZGljYXRlLFk9dGhpcy5uZXh0Ozspe2lmKHE9QihfKFksVSkpLHRoaXMuZG9uZT0hIXEuZG9uZSlyZXR1cm47aWYoRihVLFcsW0o9cS52YWx1ZSx0aGlzLmNvdW50ZXIrK10sITApKXJldHVybiBKfX0pO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOk98''@;'; put 'put ''fEx9LHtmaWx0ZXI6ZnVuY3Rpb24oVyl7Qih0aGlzKTt0cnl7ZyhXKX1jYXRjaChZKXt6KHRoaXMsInRocm93IixZKX1yZXR1cm4gTD9fKEwsdGhpcyxXKTpuZXcgSyh3KHRoaXMpLHtwcmVkaWNhdGU6V30pfX0pfSwyNjM1NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3''@;'; put 'put ''KSxfPXkoNDY5MjYpLGc9eSgzMDc4NyksQj15KDMxNDgzKSx3PXkoMTEwOCksUD15KDc1NDI0KSxGPXkoNjY1NDIpLHo9eSg0MTI1MikoImZpbmQiLFR5cGVFcnJvcik7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6en0se2ZpbmQ6ZnVuY3Rpb24oTCl7dyh0''@;'; put 'put ''aGlzKTt0cnl7QihMKX1jYXRjaChXKXtGKHRoaXMsInRocm93IixXKX1pZih6KXJldHVybiBfKHosdGhpcyxMKTt2YXIgSz1QKHRoaXMpLFU9MDtyZXR1cm4gZyhLLGZ1bmN0aW9uKFcsWSl7aWYoTChXLFUrKykpcmV0dXJuIFkoVyl9LHtJU19SRUNPUkQ6ITAsSU5URVJSVVBURUQ6ITB9KS5y''@;'; put 'put ''ZXN1bHR9fSl9LDM2NTc4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiksZz15KDMxNDgzKSxCPXkoMTEwOCksdz15KDc1NDI0KSxQPXkoNjM2MjcpLEY9eSg2OTkxNyksTz15KDY2NTQyKSx6PXkoODg3ODgpLE49eSg0MTI1MiksTD0heiYmTigiZmxh''@;'; put 'put ''dE1hcCIsVHlwZUVycm9yKSxLPUYoZnVuY3Rpb24oKXtmb3IodmFyIFkscSxVPXRoaXMuaXRlcmF0b3IsVz10aGlzLm1hcHBlcjs7KXtpZihxPXRoaXMuaW5uZXIpdHJ5e2lmKCEoWT1CKF8ocS5uZXh0LHEuaXRlcmF0b3IpKSkuZG9uZSlyZXR1cm4gWS52YWx1ZTt0aGlzLmlubmVyPW51bGx9''@;'; put 'put ''Y2F0Y2goZWUpe08oVSwidGhyb3ciLGVlKX1pZihZPUIoXyh0aGlzLm5leHQsVSkpLHRoaXMuZG9uZT0hIVkuZG9uZSlyZXR1cm47dHJ5e3RoaXMuaW5uZXI9UChXKFkudmFsdWUsdGhpcy5jb3VudGVyKyspLCExKX1jYXRjaChlZSl7TyhVLCJ0aHJvdyIsZWUpfX19KTtJKHt0YXJnZXQ6Ikl0''@;'; put 'put ''ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDp6fHxMfSx7ZmxhdE1hcDpmdW5jdGlvbihXKXtCKHRoaXMpO3RyeXtnKFcpfWNhdGNoKFkpe08odGhpcywidGhyb3ciLFkpfXJldHVybiBMP18oTCx0aGlzLFcpOm5ldyBLKHcodGhpcykse21hcHBlcjpXLGlubmVyOm51bGx9KX19KX0s''@;'; put 'put ''MzEzNTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDQ2OTI2KSxnPXkoMzA3ODcpLEI9eSgzMTQ4Myksdz15KDExMDgpLFA9eSg3NTQyNCksRj15KDY2NTQyKSx6PXkoNDEyNTIpKCJmb3JFYWNoIixUeXBlRXJyb3IpO0koe3RhcmdldDoiSXRlcmF0b3IiLHBy''@;'; put 'put ''b3RvOiEwLHJlYWw6ITAsZm9yY2VkOnp9LHtmb3JFYWNoOmZ1bmN0aW9uKEwpe3codGhpcyk7dHJ5e0IoTCl9Y2F0Y2goVyl7Rih0aGlzLCJ0aHJvdyIsVyl9aWYoeilyZXR1cm4gXyh6LHRoaXMsTCk7dmFyIEs9UCh0aGlzKSxVPTA7ZyhLLGZ1bmN0aW9uKFcpe0woVyxVKyspfSx7SVNfUkVD''@;'; put 'put ''T1JEOiEwfSl9fSl9LDcxMzU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiksZz15KDMxNDgzKSxCPXkoMTEwOCksdz15KDc1NDI0KSxQPXkoNjk5MTcpLEY9eSg0MjkyNiksTz15KDY2NTQyKSx6PXkoNDEyNTIpLE49eSg4ODc4OCksTD0hTiYmeigi''@;'; put 'put ''bWFwIixUeXBlRXJyb3IpLEs9UChmdW5jdGlvbigpe3ZhciBVPXRoaXMuaXRlcmF0b3IsVz1CKF8odGhpcy5uZXh0LFUpKTtpZighKHRoaXMuZG9uZT0hIVcuZG9uZSkpcmV0dXJuIEYoVSx0aGlzLm1hcHBlcixbVy52YWx1ZSx0aGlzLmNvdW50ZXIrK10sITApfSk7SSh7dGFyZ2V0OiJJdGVy''@;'; put 'put ''YXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6Tnx8TH0se21hcDpmdW5jdGlvbihXKXtCKHRoaXMpO3RyeXtnKFcpfWNhdGNoKFkpe08odGhpcywidGhyb3ciLFkpfXJldHVybiBMP18oTCx0aGlzLFcpOm5ldyBLKHcodGhpcykse21hcHBlcjpXfSl9fSl9LDUzMzQ4Oih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSgzMDc4NyksZz15KDMxNDgzKSxCPXkoMTEwOCksdz15KDc1NDI0KSxQPXkoNjY1NDIpLEY9eSg0MTI1MiksTz15KDQwMjIwKSx6PXkoNTU1OTIpLE49VHlwZUVycm9yLEw9eihmdW5jdGlvbigpe1tdLmtleXMoKS5yZWR1Y2UoZnVuY3Rp''@;'; put 'put ''b24oKXt9LHZvaWQgMCl9KSxLPSFMJiZGKCJyZWR1Y2UiLE4pO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOkx8fEt9LHtyZWR1Y2U6ZnVuY3Rpb24oVyl7Qih0aGlzKTt0cnl7ZyhXKX1jYXRjaChuZSl7UCh0aGlzLCJ0aHJvdyIsbmUpfXZhciBZPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg8MixxPVk/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZihLKXJldHVybiBPKEssdGhpcyxZP1tXXTpbVyxxXSk7dmFyIGVlPXcodGhpcyksSj0wO2lmKF8oZWUsZnVuY3Rpb24obmUpe1k/KFk9ITEscT1uZSk6cT1XKHEsbmUsSiksSisrfSx7SVNfUkVDT1JEOiEwfSksWSl0aHJv''@;'; put 'put ''dyBuZXcgTigiUmVkdWNlIG9mIGVtcHR5IGl0ZXJhdG9yIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3JldHVybiBxfX0pfSw5Mzc4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiksZz15KDMwNzg3KSxCPXkoMzE0ODMpLHc9eSgxMTA4KSxQPXkoNzU0''@;'; put 'put ''MjQpLEY9eSg2NjU0Miksej15KDQxMjUyKSgic29tZSIsVHlwZUVycm9yKTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDp6fSx7c29tZTpmdW5jdGlvbihMKXt3KHRoaXMpO3RyeXtCKEwpfWNhdGNoKFcpe0YodGhpcywidGhyb3ciLFcpfWlmKHopcmV0dXJu''@;'; put 'put ''IF8oeix0aGlzLEwpO3ZhciBLPVAodGhpcyksVT0wO3JldHVybiBnKEssZnVuY3Rpb24oVyxZKXtpZihMKFcsVSsrKSlyZXR1cm4gWSgpfSx7SVNfUkVDT1JEOiEwLElOVEVSUlVQVEVEOiEwfSkuc3RvcHBlZH19KX0sOTU0OTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2''@;'; put 'put ''NyksXz15KDEyMjAyKSxnPXkoNDAyMjApLEI9eSg0NjkyNiksdz15KDU4NjA3KSxQPXkoNTU1OTIpLEY9eSgxOTE1MCksTz15KDkyOTk4KSx6PXkoNzc2MzkpLE49eSg4NDUyNCksTD15KDM2NTA2KSxLPVN0cmluZyxVPV8oIkpTT04iLCJzdHJpbmdpZnkiKSxXPXcoLy4vLmV4ZWMpLFk9dygi''@;'; put 'put ''Ii5jaGFyQXQpLHE9dygiIi5jaGFyQ29kZUF0KSxlZT13KCIiLnJlcGxhY2UpLEo9dygxLi50b1N0cmluZyksbmU9L1tcdUQ4MDAtXHVERkZGXS9nLGllPS9eW1x1RDgwMC1cdURCRkZdJC8sbGU9L15bXHVEQzAwLVx1REZGRl0kLyxtZT0hTHx8UChmdW5jdGlvbigpe3ZhciBqZT1fKCJTeW1i''@;'; put 'put ''b2wiKSgic3RyaW5naWZ5IGRldGVjdGlvbiIpO3JldHVybiJbbnVsbF0iIT09VShbamVdKXx8Int9IiE9PVUoe2E6amV9KXx8Int9IiE9PVUoT2JqZWN0KGplKSl9KSxfZT1QKGZ1bmN0aW9uKCl7cmV0dXJuJyJcXHVkZjA2XFx1ZDgzNCInIT09VSgiXHVkZjA2XHVkODM0Iil8fCciXFx1ZGVh''@;'; put 'put ''ZCInIT09VSgiXHVkZWFkIil9KSxUZT1mdW5jdGlvbihqZSxWKXt2YXIgcD16KGFyZ3VtZW50cyksYj1OKFYpO2lmKEYoYil8fHZvaWQgMCE9PWplJiYhTyhqZSkpcmV0dXJuIHBbMV09ZnVuY3Rpb24oeCxDKXtpZihGKGIpJiYoQz1CKGIsdGhpcyxLKHgpLEMpKSwhTyhDKSlyZXR1cm4gQ30s''@;'; put 'put ''ZyhVLG51bGwscCl9LFNlPWZ1bmN0aW9uKGplLFYscCl7dmFyIGI9WShwLFYtMSkseD1ZKHAsVisxKTtyZXR1cm4gVyhpZSxqZSkmJiFXKGxlLHgpfHxXKGxlLGplKSYmIVcoaWUsYik/IlxcdSIrSihxKGplLDApLDE2KTpqZX07VSYmSSh7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGFyaXR5OjMs''@;'; put 'put ''Zm9yY2VkOm1lfHxfZX0se3N0cmluZ2lmeTpmdW5jdGlvbihWLHAsYil7dmFyIHg9eihhcmd1bWVudHMpLEM9ZyhtZT9UZTpVLG51bGwseCk7cmV0dXJuIF9lJiYic3RyaW5nIj09dHlwZW9mIEM/ZWUoQyxuZSxTZSk6Q319KX0sNTc3MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15''@;'; put 'put ''KDI4MzY3KSxfPXkoMzA3ODcpLGc9eSg1ODc5NSk7SSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtmcm9tRW50cmllczpmdW5jdGlvbih3KXt2YXIgUD17fTtyZXR1cm4gXyh3LGZ1bmN0aW9uKEYsTyl7ZyhQLEYsTyl9LHtBU19FTlRSSUVTOiEwfSksUH19KX0sNjk4NzU6KHVlLFgseSk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDgwMjEzKTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXkoNTM1MDUpKCJkaWZmZXJlbmNlIixmdW5jdGlvbih3KXtyZXR1cm4gMD09PXcuc2l6ZX0pfSx7ZGlmZmVyZW5jZTpffSl9LDE2MDkzOih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg1NTU5MiksZz15KDYxODc5KTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXkoNTM1MDUpKCJpbnRlcnNlY3Rpb24iLGZ1bmN0aW9uKFApe3JldHVybiAyPT09UC5zaXplJiZQLmhhcygxKSYmUC5o''@;'; put 'put ''YXMoMil9KXx8XyhmdW5jdGlvbigpe3JldHVybiIzLDIiIT09U3RyaW5nKEFycmF5LmZyb20obmV3IFNldChbMSwyLDNdKS5pbnRlcnNlY3Rpb24obmV3IFNldChbMywyXSkpKSl9KX0se2ludGVyc2VjdGlvbjpnfSl9LDk1NjA4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgz''@;'; put 'put ''NjcpLF89eSg3MzYyNCk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiF5KDUzNTA1KSgiaXNEaXNqb2ludEZyb20iLGZ1bmN0aW9uKHcpe3JldHVybiF3fSl9LHtpc0Rpc2pvaW50RnJvbTpffSl9LDE2NDkzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXko''@;'; put 'put ''MjgzNjcpLF89eSg3NDgzOSk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiF5KDUzNTA1KSgiaXNTdWJzZXRPZiIsZnVuY3Rpb24odyl7cmV0dXJuIHd9KX0se2lzU3Vic2V0T2Y6X30pfSw2MTkzNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3''@;'; put 'put ''KSxfPXkoOTYwNjIpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDoheSg1MzUwNSkoImlzU3VwZXJzZXRPZiIsZnVuY3Rpb24odyl7cmV0dXJuIXd9KX0se2lzU3VwZXJzZXRPZjpffSl9LDEwMTAxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcp''@;'; put 'put ''LF89eSg4NTAzOSk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiF5KDUzNTA1KSgic3ltbWV0cmljRGlmZmVyZW5jZSIpfSx7c3ltbWV0cmljRGlmZmVyZW5jZTpffSl9LDI2ODg5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSgyMDUw''@;'; put 'put ''Nyk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiF5KDUzNTA1KSgidW5pb24iKX0se3VuaW9uOl99KX0sMTQzNjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDU4NjA3KSxnPXkoODgyNzUpLEI9eSg2NDU1MCksdz15KDY4MzMyKSxQ''@;'; put 'put ''PXkoNTU1OTIpLEY9XygiIi5jaGFyQXQpO0koe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6UChmdW5jdGlvbigpe3JldHVybiJcdWQ4NDIiIT09Ilx1ezIwYmI3fSIuYXQoLTIpfSl9LHthdDpmdW5jdGlvbihOKXt2YXIgTD13KGcodGhpcykpLEs9TC5sZW5ndGgsVT1CKE4pLFc9''@;'; put 'put ''VT49MD9VOksrVTtyZXR1cm4gVzwwfHxXPj1LP3ZvaWQgMDpGKEwsVyl9fSl9LDE2MjI5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiksZz15KDU4NjA3KSxCPXkoODgyNzUpLHc9eSgxOTE1MCksUD15KDMyNjMzKSxGPXkoODg4NjcpLE89eSg2ODMz''@;'; put 'put ''Miksej15KDg2MTE1KSxOPXkoMzcwNzUpLEw9eSg5NjMzOSksSz15KDU4MDEyKSxVPXkoODg3ODgpLFc9SygicmVwbGFjZSIpLFk9VHlwZUVycm9yLHE9ZygiIi5pbmRleE9mKSxlZT1nKCIiLnJlcGxhY2UpLEo9ZygiIi5zbGljZSksbmU9TWF0aC5tYXg7SSh7dGFyZ2V0OiJTdHJpbmciLHBy''@;'; put 'put ''b3RvOiEwfSx7cmVwbGFjZUFsbDpmdW5jdGlvbihsZSxtZSl7dmFyIFRlLFNlLGplLFYscCxiLHgsQyxULEgsX2U9Qih0aGlzKSxqPTAsRT0iIjtpZihQKGxlKSl7aWYoKFRlPUYobGUpKSYmKFNlPU8oQihOKGxlKSkpLCF+cShTZSwiZyIpKSl0aHJvdyBuZXcgWSgiYC5yZXBsYWNlQWxsYCBk''@;'; put 'put ''b2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMiKTtpZihqZT16KGxlLFcpKXJldHVybiBfKGplLGxlLF9lLG1lKTtpZihVJiZUZSlyZXR1cm4gZWUoTyhfZSksbGUsbWUpfWZvcihWPU8oX2UpLHA9TyhsZSksKGI9dyhtZSkpfHwobWU9TyhtZSkpLEM9bmUoMSx4PXAubGVuZ3RoKSxU''@;'; put 'put ''PXEoVixwKTstMSE9PVQ7KUg9Yj9PKG1lKHAsVCxWKSk6TChwLFYsVCxbXSx2b2lkIDAsbWUpLEUrPUooVixqLFQpK0gsaj1UK3gsVD1UK0M+Vi5sZW5ndGg/LTE6cShWLHAsVCtDKTtyZXR1cm4gajxWLmxlbmd0aCYmKEUrPUooVixqKSksRX19KX0sNDMyODc6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7eSg5NjE4MCl9LDEzOTA4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koMzk1OTUpfSw2NTc0NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDkyNTgwKX0sODEyNjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSgyNjM1Nyl9LDc0OTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''eSgzNjU3OCl9LDI5NzA4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koMzEzNTMpfSw2NTExNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDcxMzU0KX0sNDQyMTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSg1MzM0OCl9LDIwMjkxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koOTM3''@;'; put 'put ''OCl9LDY4NzY4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSgzMzk2MyksZz15KDc1OTYpLmNsZWFyO0koe2dsb2JhbDohMCxiaW5kOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOl8uY2xlYXJJbW1lZGlhdGUhPT1nfSx7Y2xlYXJJbW1lZGlhdGU6Z30pfSwxMDM2''@;'; put 'put ''MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDY4NzY4KSx5KDgyMzA2KX0sODIzMDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMzOTYzKSxnPXkoNzU5Nikuc2V0LEI9eSg0MzI0OSksdz1fLnNldEltbWVkaWF0ZT9CKGcsITEpOmc7SSh7Z2xvYmFsOiEw''@;'; put 'put ''LGJpbmQ6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6Xy5zZXRJbW1lZGlhdGUhPT13fSx7c2V0SW1tZWRpYXRlOnd9KX0sMzIxOTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siYWVzLTEyOC1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjowLCJt''@;'; put 'put ''b2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0''@;'; put 'put ''eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2Nr''@;'; put 'put ''In0sImFlcy0yNTYtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTkyIjp7ImNp''@;'; put 'put ''cGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMjU2Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5''@;'; put 'put ''IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2''@;'; put 'put ''IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwi''@;'; put 'put ''bW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUi''@;'; put 'put ''OiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZC''@;'; put 'put ''MSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUi''@;'; put 'put ''OiJzdHJlYW0ifSwiYWVzLTI1Ni1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0i''@;'; put 'put ''fSwiYWVzLTE5Mi1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEy''@;'; put 'put ''OC1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0xOTItZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMjU2LWdjbSI6eyJjaXBo''@;'; put 'put ''ZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifX0nKX0sNjI5NTE6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7InNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjI0Iiwi''@;'; put 'put ''aWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJSU0EtU0hBMjI0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJzaGEyNTZXaXRoUlNBRW5jcnlwdGlv''@;'; put 'put ''biI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwiUlNBLVNIQTI1NiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAx''@;'; put 'put ''MDUwMDA0MjAifSwic2hhMzg0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sIlJTQS1TSEEzODQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEzODQiLCJp''@;'; put 'put ''ZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBNTEyIjp7InNp''@;'; put 'put ''Z24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBMSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNCJ9LCJlY2RzYS13''@;'; put 'put ''aXRoLVNIQTEiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJzaGEyNTYiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sInNoYTIyNCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwic2hhMzg0Ijp7InNpZ24i''@;'; put 'put ''OiJlY2RzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJzaGE1MTIiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVNIQTEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJz''@;'; put 'put ''aGExIiwiaWQiOiIifSwiRFNBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9''@;'; put 'put ''LCJEU0EtV0lUSC1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIi''@;'; put 'put ''fSwiRFNBLVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJE''@;'; put 'put ''U0EtUklQRU1EMTYwIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIifSwicmlwZW1kMTYwV2l0aFJTQSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIlJTQS1SSVBFTUQxNjAiOnsic2lnbiI6''@;'; put 'put ''InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJtZDVXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn0sIlJTQS1NRDUi''@;'; put 'put ''Onsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9fScpfSw2NDU4OTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMz''@;'; put 'put ''IjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LDIzMjQxOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJt''@;'; put 'put ''b2RwMSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZk''@;'; put 'put ''NTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIy''@;'; put 'put ''MjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmIn0sIm1vZHA1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRm''@;'; put 'put ''MjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNm''@;'; put 'put ''NWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0''@;'; put 'put ''YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJm''@;'; put 'put ''YjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4''@;'; put 'put ''MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2Vu''@;'; put 'put ''IjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODVi''@;'; put 'put ''NTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIw''@;'; put 'put ''ODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUx''@;'; put 'put ''MDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2''@;'; put 'put ''MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2Mzdl''@;'; put 'put ''ZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3''@;'; put 'put ''MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcw''@;'; put 'put ''ZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdi''@;'; put 'put ''MjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThk''@;'; put 'put ''YmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1''@;'; put 'put ''YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE3Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2Nk''@;'; put 'put ''M2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5''@;'; put 'put ''YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJi''@;'; put 'put ''Y2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0''@;'; put 'put ''YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2''@;'; put 'put ''ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgx''@;'; put 'put ''YmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2Vk''@;'; put 'put ''OTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgw''@;'; put 'put ''YzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGVi''@;'; put 'put ''MTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRh''@;'; put 'put ''YTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQw''@;'; put 'put ''NmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0''@;'; put 'put ''ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUy''@;'; put 'put ''MWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1Nzdh''@;'; put 'put ''NjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVm''@;'; put 'put ''OTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMz''@;'; put 'put ''ZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEy''@;'; put 'put ''YmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0''@;'; put 'put ''YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5''@;'; put 'put ''NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJl''@;'; put 'put ''ZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1''@;'; put 'put ''ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4''@;'; put 'put ''MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZiJ9fScpfSwxNjM2OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9e3JFOiI2LjYuMSJ9fSw0MzI2Nzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjg3NDAiLCJcdTQzZjBc''@;'; put 'put ''dTRjMzJcdTQ2MDNcdTQ1YTZcdTQ1NzhcdXsyNzI2N31cdTRkNzdcdTQ1YjNcdXsyN2NiMX1cdTRjZTJcdXsyN2NjNX1cdTNiOTVcdTQ3MzZcdTQ3NDRcdTRjNDdcdTRjNDBcdXsyNDJiZn1cdXsyMzYxN31cdXsyNzM1Mn1cdXsyNmU4Yn1cdXsyNzBkMn1cdTRjNTdcdXsyYTM1MX1cdTQ3NGZc''@;'; put 'put ''dTQ1ZGFcdTRjODVcdXsyN2M2Y31cdTRkMDdcdTRhYTRcdTQ2YTFcdXsyNmIyM31cdTcyMjVcdXsyNWE1NH1cdXsyMWE2M31cdXsyM2UwNn1cdXsyM2Y2MX1cdTY2NGRcdTU2ZmIiXSxbIjg3NjciLCJcdTdkOTVcdTU5MWRcdXsyOGJiOX1cdTNkZjRcdTk3MzRcdXsyN2JlZn1cdTViZGJcdXsy''@;'; put 'put ''MWQ1ZX1cdTVhYTRcdTM2MjVcdXsyOWViMH1cdTVhZDFcdTViYjdcdTVjZmNcdTY3NmVcdTg1OTNcdXsyOTk0NX1cdTc0NjFcdTc0OWRcdTM4NzVcdXsyMWQ1M31cdXsyMzY5ZX1cdXsyNjAyMX1cdTNlZWMiXSxbIjg3YTEiLCJcdXsyNThkZX1cdTNhZjVcdTdhZmNcdTlmOTdcdXsyNDE2MX1c''@;'; put 'put ''dXsyODkwZH1cdXsyMzFlYX1cdXsyMGE4YX1cdXsyMzI1ZX1cdTQzMGFcdTg0ODRcdTlmOTZcdTk0MmZcdTQ5MzBcdTg2MTNcdTU4OTZcdTk3NGFcdTkyMThcdTc5ZDBcdTdhMzJcdTY2NjBcdTZhMjlcdTg4OWRcdTc0NGNcdTdiYzVcdTY3ODJcdTdhMmNcdTUyNGZcdTkwNDZcdTM0ZTZcdTcz''@;'; put 'put ''YzRcdXsyNWRiOX1cdTc0YzZcdTlmYzdcdTU3YjNcdTQ5MmZcdTU0NGNcdTQxMzFcdXsyMzY4ZX1cdTU4MThcdTdhNzJcdXsyN2I2NX1cdThiOGZcdTQ2YWVcdXsyNmU4OH1cdTQxODFcdXsyNWQ5OX1cdTdiYWVcdXsyMjRiY31cdTlmYzhcdXsyMjRjMX1cdXsyMjRjOX1cdXsyMjRjY31cdTlm''@;'; put 'put ''YzlcdTg1MDRcdXsyMzViYn1cdTQwYjRcdTlmY2FcdTQ0ZTFcdXsyYWRmZn1cdTYyYzFcdTcwNmVcdTlmY2IiXSxbIjg4NDAiLCJcdTMxYzAiLDQsIlx1ezIwMTBjfVx1MzFjNVx1ezIwMGQxfVx1ezIwMGNkfVx1MzFjNlx1MzFjN1x1ezIwMGNifVx1ezIxZmU4fVx1MzFjOFx1ezIwMGNhfVx1''@;'; put 'put ''MzFjOVx1MzFjYVx1MzFjYlx1MzFjY1x1ezIwMTBlfVx1MzFjZFx1MzFjZVx1MDEwMFx4YzFcdTAxY2RceGMwXHUwMTEyXHhjOVx1MDExYVx4YzhcdTAxNGNceGQzXHUwMWQxXHhkMlx1MGZmZlx4Y2FcdTAzMDRcdTFlYmVcdTBmZmZceGNhXHUwMzBjXHUxZWMwXHhjYVx1MDEwMVx4ZTFcdTAx''@;'; put 'put ''Y2VceGUwXHUwMjUxXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGEiXSxbIjg4YTEiLCJcdTAxZGNceGZjXHUwZmZmXHhlYVx1MDMwNFx1MWViZlx1MGZmZlx4ZWFc''@;'; put 'put ''dTAzMGNcdTFlYzFceGVhXHUwMjYxXHUyM2RhXHUyM2RiIl0sWyI4OTQwIiwiXHV7MmEzYTl9XHV7MjExNDV9Il0sWyI4OTQzIiwiXHU2NTBhIl0sWyI4OTQ2IiwiXHU0ZTNkXHU2ZWRkXHU5ZDRlXHU5MWRmIl0sWyI4OTRjIiwiXHV7Mjc3MzV9XHU2NDkxXHU0ZjFhXHU0ZjI4XHU0ZmE4XHU1''@;'; put 'put ''MTU2XHU1MTc0XHU1MTljXHU1MWU0XHU1MmExXHU1MmE4XHU1MzNiXHU1MzRlXHU1M2QxXHU1M2Q4XHU1NmUyXHU1OGYwXHU1OTA0XHU1OTA3XHU1OTMyXHU1OTM0XHU1YjY2XHU1YjllXHU1YjlmXHU1YzlhXHU1ZTg2XHU2MDNiXHU2NTg5XHU2N2ZlXHU2ODA0XHU2ODY1XHU2ZDRlXHU3MGJj''@;'; put 'put ''XHU3NTM1XHU3ZWE0XHU3ZWFjXHU3ZWJhXHU3ZWM3XHU3ZWNmXHU3ZWRmXHU3ZjA2XHU3ZjM3XHU4MjdhXHU4MmNmXHU4MzZmXHU4OWM2XHU4YmJlXHU4YmUyXHU4ZjY2XHU4ZjY3XHU4ZjZlIl0sWyI4OWExIiwiXHU3NDExXHU3Y2ZjXHU3ZGNkXHU2OTQ2XHU3YWM5XHU1MjI3Il0sWyI4OWFi''@;'; put 'put ''IiwiXHU5MThjXHU3OGI4XHU5MTVlXHU4MGJjIl0sWyI4OWIwIiwiXHU4ZDBiXHU4MGY2XHV7MjA5ZTd9Il0sWyI4OWI1IiwiXHU4MDlmXHU5ZWM3XHU0Y2NkXHU5ZGM5XHU5ZTBjXHU0YzNlXHV7MjlkZjZ9XHV7MjcwMGV9XHU5ZTBhXHV7MmExMzN9XHUzNWMxIl0sWyI4OWMxIiwiXHU2ZTlh''@;'; put 'put ''XHU4MjNlXHU3NTE5Il0sWyI4OWM1IiwiXHU0OTExXHU5YTZjXHU5YThmXHU5Zjk5XHU3OTg3XHV7Mjg0NmN9XHV7MjFkY2F9XHV7MjA1ZDB9XHV7MjJhZTZ9XHU0ZTI0XHU0ZTgxXHU0ZTgwXHU0ZTg3XHU0ZWJmXHU0ZWViXHU0ZjM3XHUzNDRjXHU0ZmJkXHUzZTQ4XHU1MDAzXHU1MDg4XHUz''@;'; put 'put ''NDdkXHUzNDkzXHUzNGE1XHU1MTg2XHU1OTA1XHU1MWRiXHU1MWZjXHU1MjA1XHU0ZTg5XHU1Mjc5XHU1MjkwXHU1MzI3XHUzNWM3XHU1M2E5XHUzNTUxXHU1M2IwXHUzNTUzXHU1M2MyXHU1NDIzXHUzNTZkXHUzNTcyXHUzNjgxXHU1NDkzXHU1NGEzXHU1NGI0XHU1NGI5XHU1NGQwXHU1NGVm''@;'; put 'put ''XHU1NTE4XHU1NTIzXHU1NTI4XHUzNTk4XHU1NTNmXHUzNWE1XHUzNWJmXHU1NWQ3XHUzNWM1Il0sWyI4YTQwIiwiXHV7MjdkODR9XHU1NTI1Il0sWyI4YTQzIiwiXHV7MjBjNDJ9XHV7MjBkMTV9XHV7MjUxMmJ9XHU1NTkwXHV7MjJjYzZ9XHUzOWVjXHV7MjAzNDF9XHU4ZTQ2XHV7MjRkYjh9''@;'; put 'put ''XHV7Mjk0ZTV9XHU0MDUzXHV7MjgwYmV9XHU3NzdhXHV7MjJjMzh9XHUzYTM0XHU0N2Q1XHV7MjgxNWR9XHV7MjY5ZjJ9XHV7MjRkZWF9XHU2NGRkXHV7MjBkN2N9XHV7MjBmYjR9XHV7MjBjZDV9XHV7MjEwZjR9XHU2NDhkXHU4ZTdlXHV7MjBlOTZ9XHV7MjBjMGJ9XHV7MjBmNjR9XHV7MjJj''@;'; put 'put ''YTl9XHV7MjgyNTZ9XHV7MjQ0ZDN9Il0sWyI4YTY0IiwiXHV7MjBkNDZ9XHV7MjlhNGR9XHV7MjgwZTl9XHU0N2Y0XHV7MjRlYTd9XHV7MjJjYzJ9XHU5YWIyXHUzYTY3XHV7Mjk1ZjR9XHUzZmVkXHUzNTA2XHV7MjUyYzd9XHV7Mjk3ZDR9XHV7Mjc4Yzh9XHV7MjJkNDR9XHU5ZDZlXHU5ODE1''@;'; put 'put ''Il0sWyI4YTc2IiwiXHU0M2Q5XHV7MjYwYTV9XHU2NGI0XHU1NGUzXHV7MjJkNGN9XHV7MjJiY2F9XHV7MjEwNzd9XHUzOWZiXHV7MjEwNmZ9Il0sWyI4YWExIiwiXHV7MjY2ZGF9XHV7MjY3MTZ9XHV7Mjc5YTB9XHU2NGVhXHV7MjUwNTJ9XHV7MjBjNDN9XHU4ZTY4XHV7MjIxYTF9XHV7Mjhi''@;'; put 'put ''NGN9XHV7MjA3MzF9Il0sWyI4YWFjIiwiXHU0ODBiXHV7MjAxYTl9XHUzZmZhXHU1ODczXHV7MjJkOGR9Il0sWyI4YWIyIiwiXHV7MjQ1Yzh9XHV7MjA0ZmN9XHV7MjYwOTd9XHV7MjBmNGN9XHV7MjBkOTZ9XHU1NTc5XHU0MGJiXHU0M2JhIl0sWyI4YWJiIiwiXHU0YWI0XHV7MjJhNjZ9XHV7''@;'; put 'put ''MjEwOWR9XHU4MWFhXHU5OGY1XHV7MjBkOWN9XHU2Mzc5XHUzOWZlXHV7MjI3NzV9XHU4ZGMwXHU1NmExXHU2NDdjXHUzZTQzIl0sWyI4YWM5IiwiXHV7MmE2MDF9XHV7MjBlMDl9XHV7MjJhY2Z9XHV7MjJjYzl9Il0sWyI4YWNlIiwiXHV7MjEwYzh9XHV7MjM5YzJ9XHUzOTkyXHUzYTA2XHV7''@;'; put 'put ''MjgyOWJ9XHUzNTc4XHV7MjVlNDl9XHV7MjIwYzd9XHU1NjUyXHV7MjBmMzF9XHV7MjJjYjJ9XHV7Mjk3MjB9XHUzNGJjXHU2YzNkXHV7MjRlM2J9Il0sWyI4YWRmIiwiXHV7Mjc1NzR9XHV7MjJlOGJ9XHV7MjIyMDh9XHV7MmE2NWJ9XHV7MjhjY2R9XHV7MjBlN2F9XHV7MjBjMzR9XHV7MjY4''@;'; put 'put ''MWN9XHU3ZjkzXHV7MjEwY2Z9XHV7MjI4MDN9XHV7MjI5Mzl9XHUzNWZiXHV7MjUxZTN9XHV7MjBlOGN9XHV7MjBmOGR9XHV7MjBlYWF9XHUzZjkzXHV7MjBmMzB9XHV7MjBkNDd9XHV7MjExNGZ9XHV7MjBlNGN9Il0sWyI4YWY2IiwiXHV7MjBlYWJ9XHV7MjBiYTl9XHV7MjBkNDh9XHV7MjEw''@;'; put 'put ''YzB9XHV7MjExM2R9XHUzZmY5XHV7MjI2OTZ9XHU2NDMyXHV7MjBmYWR9Il0sWyI4YjQwIiwiXHV7MjMzZjR9XHV7Mjc2Mzl9XHV7MjJiY2V9XHV7MjBkN2V9XHV7MjBkN2Z9XHV7MjJjNTF9XHV7MjJjNTV9XHUzYTE4XHV7MjBlOTh9XHV7MjEwYzd9XHV7MjBmMmV9XHV7MmE2MzJ9XHV7MjZi''@;'; put 'put ''NTB9XHV7MjhjZDJ9XHV7MjhkOTl9XHV7MjhjY2F9XHU5NWFhXHU1NGNjXHU4MmM0XHU1NWI5Il0sWyI4YjU1IiwiXHV7MjllYzN9XHU5YzI2XHU5YWI2XHV7Mjc3NWV9XHV7MjJkZWV9XHU3MTQwXHU4MTZkXHU4MGVjXHU1YzFjXHV7MjY1NzJ9XHU4MTM0XHUzNzk3XHU1MzVmXHV7MjgwYmR9''@;'; put 'put ''XHU5MWI2XHV7MjBlZmF9XHV7MjBlMGZ9XHV7MjBlNzd9XHV7MjBlZmJ9XHUzNWRkXHV7MjRkZWJ9XHUzNjA5XHV7MjBjZDZ9XHU1NmFmXHV7MjI3YjV9XHV7MjEwYzl9XHV7MjBlMTB9XHV7MjBlNzh9XHV7MjEwNzh9XHV7MjExNDh9XHV7MjgyMDd9XHV7MjE0NTV9XHV7MjBlNzl9XHV7MjRl''@;'; put 'put ''NTB9XHV7MjJkYTR9XHU1YTU0XHV7MjEwMWR9XHV7MjEwMWV9XHV7MjEwZjV9XHV7MjEwZjZ9XHU1NzljXHV7MjBlMTF9Il0sWyI4YmExIiwiXHV7Mjc2OTR9XHV7MjgyY2R9XHV7MjBmYjV9XHV7MjBlN2J9XHV7MjUxN2V9XHUzNzAzXHV7MjBmYjZ9XHV7MjExODB9XHV7MjUyZDh9XHV7MmEy''@;'; put 'put ''YmR9XHV7MjQ5ZGF9XHV7MjE4M2F9XHV7MjQxNzd9XHV7MjgyN2N9XHU1ODk5XHU1MjY4XHUzNjFhXHV7MjU3M2R9XHU3YmIyXHU1YjY4XHU0ODAwXHU0YjJjXHU5ZjI3XHU0OWU3XHU5YzFmXHU5YjhkXHV7MjViNzR9XHV7MjMxM2R9XHU1NWZiXHUzNWYyXHU1Njg5XHU0ZTI4XHU1OTAyXHV7''@;'; put 'put ''MjFiYzF9XHV7MmY4Nzh9XHU5NzUxXHV7MjAwODZ9XHU0ZTViXHU0ZWJiXHUzNTNlXHU1YzIzXHU1ZjUxXHU1ZmM0XHUzOGZhXHU2MjRjXHU2NTM1XHU2YjdhXHU2YzM1XHU2YzNhXHU3MDZjXHU3MjJiXHU0ZTJjXHU3MmFkXHV7MjQ4ZTl9XHU3ZjUyXHU3OTNiXHU3Y2Y5XHU3ZjUzXHV7MjYy''@;'; put 'put ''NmF9XHUzNGMxIl0sWyI4YmRlIiwiXHV7MjYzNGJ9XHU4MDAyXHU4MDgwXHV7MjY2MTJ9XHV7MjY5NTF9XHU1MzVkXHU4ODY0XHU4OWMxXHV7Mjc4YjJ9XHU4YmEwXHU4ZDFkXHU5NDg1XHU5NTc4XHU5NTdmXHU5NWU4XHV7MjhlMGZ9XHU5N2U2XHU5ODc1XHU5OGNlXHU5OGRlXHU5OTYzXHV7''@;'; put 'put ''Mjk4MTB9XHU5YzdjXHU5ZTFmXHU5ZWM0XHU2YjZmXHVmOTA3XHU0ZTM3XHV7MjAwODd9XHU5NjFkXHU2MjM3XHU5NGEyIl0sWyI4YzQwIiwiXHU1MDNiXHU2ZGZlXHV7MjljNzN9XHU5ZmE2XHUzZGM5XHU4ODhmXHV7MjQxNGV9XHU3MDc3XHU1Y2Y1XHU0YjIwXHV7MjUxY2R9XHUzNTU5XHV7''@;'; put 'put ''MjVkMzB9XHU2MTIyXHV7MjhhMzJ9XHU4ZmE3XHU5MWY2XHU3MTkxXHU2NzE5XHU3M2JhXHV7MjMyODF9XHV7MmExMDd9XHUzYzhiXHV7MjE5ODB9XHU0YjEwXHU3OGU0XHU3NDAyXHU1MWFlXHV7Mjg3MGZ9XHU0MDA5XHU2YTYzXHV7MmEyYmF9XHU0MjIzXHU4NjBmXHV7MjBhNmZ9XHU3YTJh''@;'; put 'put ''XHV7Mjk5NDd9XHV7MjhhZWF9XHU5NzU1XHU3MDRkXHU1MzI0XHV7MjIwN2V9XHU5M2Y0XHU3NmQ5XHV7Mjg5ZTN9XHU5ZmE3XHU3N2RkXHU0ZWEzXHU0ZmYwXHU1MGJjXHU0ZTJmXHU0ZjE3XHU5ZmE4XHU1NDM0XHU3ZDhiXHU1ODkyXHU1OGQwXHV7MjFkYjZ9XHU1ZTkyXHU1ZTk5XHU1ZmMy''@;'; put 'put ''XHV7MjI3MTJ9XHU2NThiIl0sWyI4Y2ExIiwiXHV7MjMzZjl9XHU2OTE5XHU2YTQzXHV7MjNjNjN9XHU2Y2ZmIl0sWyI4Y2E3IiwiXHU3MjAwXHV7MjQ1MDV9XHU3MzhjXHUzZWRiXHV7MjRhMTN9XHU1YjE1XHU3NGI5XHU4YjgzXHV7MjVjYTR9XHV7MjU2OTV9XHU3YTkzXHU3YmVjXHU3Y2Mz''@;'; put 'put ''XHU3ZTZjXHU4MmY4XHU4NTk3XHU5ZmE5XHU4ODkwXHU5ZmFhXHU4ZWI5XHU5ZmFiXHU4ZmNmXHU4NTVmXHU5OWUwXHU5MjIxXHU5ZmFjXHV7MjhkYjl9XHV7MjE0M2Z9XHU0MDcxXHU0MmEyXHU1YTFhIl0sWyI4Y2M5IiwiXHU5ODY4XHU2NzZiXHU0Mjc2XHU1NzNkIl0sWyI4Y2NlIiwiXHU4''@;'; put 'put ''NWQ2XHV7MjQ5N2J9XHU4MmJmXHV7MjcxMGR9XHU0YzgxXHV7MjZkNzR9XHU1ZDdiXHV7MjZiMTV9XHV7MjZmYmV9XHU5ZmFkXHU5ZmFlXHU1Yjk2XHU5ZmFmXHU2NmU3XHU3ZTViXHU2ZTU3XHU3OWNhXHUzZDg4XHU0NGMzXHV7MjMyNTZ9XHV7MjI3OTZ9XHU0MzlhXHU0NTM2Il0sWyI4Y2U2''@;'; put 'put ''IiwiXHU1Y2Q1XHV7MjNiMWF9XHU4YWY5XHU1Yzc4XHUzZDEyXHV7MjM1NTF9XHU1ZDc4XHU5ZmIyXHU3MTU3XHU0NTU4XHV7MjQwZWN9XHV7MjFlMjN9XHU0Yzc3XHUzOTc4XHUzNDRhXHV7MjAxYTR9XHV7MjZjNDF9XHU4YWNjXHU0ZmI0XHV7MjAyMzl9XHU1OWJmXHU4MTZjXHU5ODU2XHV7''@;'; put 'put ''Mjk4ZmF9XHU1ZjNiIl0sWyI4ZDQwIiwiXHV7MjBiOWZ9Il0sWyI4ZDQyIiwiXHV7MjIxYzF9XHV7Mjg5NmR9XHU0MTAyXHU0NmJiXHV7MjkwNzl9XHUzZjA3XHU5ZmIzXHV7MmExYjV9XHU0MGY4XHUzN2Q2XHU0NmY3XHV7MjZjNDZ9XHU0MTdjXHV7Mjg2YjJ9XHV7MjczZmZ9XHU0NTZkXHUz''@;'; put 'put ''OGQ0XHV7MjU0OWF9XHU0NTYxXHU0NTFiXHU0ZDg5XHU0YzdiXHU0ZDc2XHU0NWVhXHUzZmM4XHV7MjRiMGZ9XHUzNjYxXHU0NGRlXHU0NGJkXHU0MWVkXHU1ZDNlXHU1ZDQ4XHU1ZDU2XHUzZGZjXHUzODBmXHU1ZGE0XHU1ZGI5XHUzODIwXHUzODM4XHU1ZTQyXHU1ZWJkXHU1ZjI1XHU1Zjgz''@;'; put 'put ''XHUzOTA4XHUzOTE0XHUzOTNmXHUzOTRkXHU2MGQ3XHU2MTNkXHU1Y2U1XHUzOTg5XHU2MWI3XHU2MWI5XHU2MWNmXHUzOWI4XHU2MjJjXHU2MjkwXHU2MmU1XHU2MzE4XHUzOWY4XHU1NmIxIl0sWyI4ZGExIiwiXHUzYTAzXHU2M2UyXHU2M2ZiXHU2NDA3XHU2NDVhXHUzYTRiXHU2NGMwXHU1''@;'; put 'put ''ZDE1XHU1NjIxXHU5ZjlmXHUzYTk3XHU2NTg2XHUzYWJkXHU2NWZmXHU2NjUzXHUzYWYyXHU2NjkyXHUzYjIyXHU2NzE2XHUzYjQyXHU2N2E0XHU2ODAwXHUzYjU4XHU2ODRhXHU2ODg0XHUzYjcyXHUzYjcxXHUzYjdiXHU2OTA5XHU2OTQzXHU3MjVjXHU2OTY0XHU2OTlmXHU2OTg1XHUzYmJj''@;'; put 'put ''XHU2OWQ2XHUzYmRkXHU2YTY1XHU2YTc0XHU2YTcxXHU2YTgyXHUzYmVjXHU2YTk5XHUzYmYyXHU2YWFiXHU2YWI1XHU2YWQ0XHU2YWY2XHU2YjgxXHU2YmMxXHU2YmVhXHU2Yzc1XHU2Y2FhXHUzY2NiXHU2ZDAyXHU2ZDA2XHU2ZDI2XHU2ZDgxXHUzY2VmXHU2ZGE0XHU2ZGIxXHU2ZTE1XHU2''@;'; put 'put ''ZTE4XHU2ZTI5XHU2ZTg2XHV7Mjg5YzB9XHU2ZWJiXHU2ZWUyXHU2ZWRhXHU5ZjdmXHU2ZWU4XHU2ZWU5XHU2ZjI0XHU2ZjM0XHUzZDQ2XHV7MjNmNDF9XHU2ZjgxXHU2ZmJlXHUzZDZhXHUzZDc1XHU3MWI3XHU1Yzk5XHUzZDhhXHU3MDJjXHUzZDkxXHU3MDUwXHU3MDU0XHU3MDZmXHU3MDdm''@;'; put 'put ''XHU3MDg5XHV7MjAzMjV9XHU0M2MxXHUzNWYxXHV7MjBlZDh9Il0sWyI4ZTQwIiwiXHV7MjNlZDd9XHU1N2JlXHV7MjZlZDN9XHU3MTNlXHV7MjU3ZTB9XHUzNjRlXHU2OWEyXHV7MjhiZTl9XHU1Yjc0XHU3YTQ5XHV7MjU4ZTF9XHV7Mjk0ZDl9XHU3YTY1XHU3YTdkXHV7MjU5YWN9XHU3YWJi''@;'; put 'put ''XHU3YWIwXHU3YWMyXHU3YWMzXHU3MWQxXHV7MjY0OGR9XHU0MWNhXHU3YWRhXHU3YWRkXHU3YWVhXHU0MWVmXHU1NGIyXHV7MjVjMDF9XHU3YjBiXHU3YjU1XHU3YjI5XHV7MjUzMGV9XHV7MjVjZmV9XHU3YmEyXHU3YjZmXHU4MzljXHV7MjViYjR9XHV7MjZjN2Z9XHU3YmQwXHU4NDIxXHU3''@;'; put 'put ''YjkyXHU3YmI4XHV7MjVkMjB9XHUzZGFkXHV7MjVjNjV9XHU4NDkyXHU3YmZhXHU3YzA2XHU3YzM1XHV7MjVjYzF9XHU3YzQ0XHU3YzgzXHV7MjQ4ODJ9XHU3Y2E2XHU2NjdkXHV7MjQ1Nzh9XHU3Y2M5XHU3Y2M3XHU3Y2U2XHU3Yzc0XHU3Y2YzXHU3Y2Y1XHU3Y2NlIl0sWyI4ZWExIiwiXHU3''@;'; put 'put ''ZTY3XHU0NTFkXHV7MjZlNDR9XHU3ZDVkXHV7MjZlZDZ9XHU3NDhkXHU3ZDg5XHU3ZGFiXHU3MTM1XHU3ZGIzXHU3ZGQyXHV7MjQwNTd9XHV7MjYwMjl9XHU3ZGU0XHUzZDEzXHU3ZGY1XHV7MjE3Zjl9XHU3ZGU1XHV7MjgzNmR9XHU3ZTFkXHV7MjYxMjF9XHV7MjYxNWF9XHU3ZTZlXHU3ZTky''@;'; put 'put ''XHU0MzJiXHU5NDZjXHU3ZTI3XHU3ZjQwXHU3ZjQxXHU3ZjQ3XHU3OTM2XHV7MjYyZDB9XHU5OWUxXHU3Zjk3XHV7MjYzNTF9XHU3ZmEzXHV7MjE2NjF9XHV7MjAwNjh9XHU0NTVjXHV7MjM3NjZ9XHU0NTAzXHV7MjgzM2F9XHU3ZmZhXHV7MjY0ODl9XHU4MDA1XHU4MDA4XHU4MDFkXHU4MDI4''@;'; put 'put ''XHU4MDJmXHV7MmEwODd9XHV7MjZjYzN9XHU4MDNiXHU4MDNjXHU4MDYxXHV7MjI3MTR9XHU0OTg5XHV7MjY2MjZ9XHV7MjNkZTN9XHV7MjY2ZTh9XHU2NzI1XHU4MGE3XHV7MjhhNDh9XHU4MTA3XHU4MTFhXHU1OGIwXHV7MjI2ZjZ9XHU2YzdmXHV7MjY0OTh9XHV7MjRmYjh9XHU2NGU3XHV7''@;'; put 'put ''MjE0OGF9XHU4MjE4XHV7MjE4NWV9XHU2YTUzXHV7MjRhNjV9XHV7MjRhOTV9XHU0NDdhXHU4MjI5XHV7MjBiMGR9XHV7MjZhNTJ9XHV7MjNkN2V9XHU0ZmY5XHV7MjE0ZmR9XHU4NGUyXHU4MzYyXHV7MjZiMGF9XHV7MjQ5YTd9XHV7MjM1MzB9XHV7MjE3NzN9XHV7MjNkZjh9XHU4MmFhXHU2''@;'; put 'put ''OTFiXHV7MmY5OTR9XHU0MWRiIl0sWyI4ZjQwIiwiXHU4NTRiXHU4MmQwXHU4MzFhXHV7MjBlMTZ9XHV7MjE3YjR9XHUzNmMxXHV7MjMxN2R9XHV7MjM1NWF9XHU4MjdiXHU4MmUyXHU4MzE4XHV7MjNlOGJ9XHV7MjZkYTN9XHV7MjZiMDV9XHV7MjZiOTd9XHV7MjM1Y2V9XHUzZGJmXHU4MzFk''@;'; put 'put ''XHU1NWVjXHU4Mzg1XHU0NTBiXHV7MjZkYTV9XHU4M2FjXHU4M2MxXHU4M2QzXHUzNDdlXHV7MjZlZDR9XHU2YTU3XHU4NTVhXHUzNDk2XHV7MjZlNDJ9XHV7MjJlZWZ9XHU4NDU4XHV7MjViZTR9XHU4NDcxXHUzZGQzXHU0NGU0XHU2YWE3XHU4NDRhXHV7MjNjYjV9XHU3OTU4XHU4NGE4XHV7''@;'; put 'put ''MjZiOTZ9XHV7MjZlNzd9XHV7MjZlNDN9XHU4NGRlXHU4NDBmXHU4MzkxXHU0NGEwXHU4NDkzXHU4NGU0XHV7MjVjOTF9XHU0MjQwXHV7MjVjYzB9XHU0NTQzXHU4NTM0XHU1YWYyXHV7MjZlOTl9XHU0NTI3XHU4NTczXHU0NTE2XHU2N2JmXHU4NjE2Il0sWyI4ZmExIiwiXHV7Mjg2MjV9XHV7''@;'; put 'put ''Mjg2M2J9XHU4NWMxXHV7MjcwODh9XHU4NjAyXHV7MjE1ODJ9XHV7MjcwY2R9XHV7MmY5YjJ9XHU0NTZhXHU4NjI4XHUzNjQ4XHV7MjE4YTJ9XHU1M2Y3XHV7MjczOWF9XHU4NjdlXHU4NzcxXHV7MmEwZjh9XHU4N2VlXHV7MjJjMjd9XHU4N2IxXHU4N2RhXHU4ODBmXHU1NjYxXHU4NjZjXHU2''@;'; put 'put ''ODU2XHU0NjBmXHU4ODQ1XHU4ODQ2XHV7Mjc1ZTB9XHV7MjNkYjl9XHV7Mjc1ZTR9XHU4ODVlXHU4ODljXHU0NjViXHU4OGI0XHU4OGI1XHU2M2MxXHU4OGM1XHU3Nzc3XHV7Mjc3MGZ9XHU4OTg3XHU4OThhXHU4OWE2XHU4OWE5XHU4OWE3XHU4OWJjXHV7MjhhMjV9XHU4OWU3XHV7Mjc5MjR9''@;'; put 'put ''XHV7MjdhYmR9XHU4YTljXHU3NzkzXHU5MWZlXHU4YTkwXHV7MjdhNTl9XHU3YWU5XHV7MjdiM2F9XHV7MjNmOGZ9XHU0NzEzXHV7MjdiMzh9XHU3MTdjXHU4YjBjXHU4YjFmXHV7MjU0MzB9XHV7MjU1NjV9XHU4YjNmXHU4YjRjXHU4YjRkXHU4YWE5XHV7MjRhN2F9XHU4YjkwXHU4YjliXHU4''@;'; put 'put ''YWFmXHV7MjE2ZGZ9XHU0NjE1XHU4ODRmXHU4YzliXHV7MjdkNTR9XHV7MjdkOGZ9XHV7MmY5ZDR9XHUzNzI1XHV7MjdkNTN9XHU4Y2Q2XHV7MjdkOTh9XHV7MjdkYmR9XHU4ZDEyXHU4ZDAzXHV7MjE5MTB9XHU4Y2RiXHU3MDVjXHU4ZDExXHV7MjRjYzl9XHUzZWQwXHU4ZDc3Il0sWyI5MDQw''@;'; put 'put ''IiwiXHU4ZGE5XHV7MjgwMDJ9XHV7MjEwMTR9XHV7MjQ5OGF9XHUzYjdjXHV7MjgxYmN9XHV7MjcxMGN9XHU3YWU3XHU4ZWFkXHU4ZWI2XHU4ZWMzXHU5MmQ0XHU4ZjE5XHU4ZjJkXHV7MjgzNjV9XHV7Mjg0MTJ9XHU4ZmE1XHU5MzAzXHV7MmEyOWZ9XHV7MjBhNTB9XHU4ZmIzXHU0OTJhXHV7''@;'; put 'put ''Mjg5ZGV9XHV7Mjg1M2R9XHV7MjNkYmJ9XHU1ZWY4XHV7MjMyNjJ9XHU4ZmY5XHV7MmEwMTR9XHV7Mjg2YmN9XHV7Mjg1MDF9XHV7MjIzMjV9XHUzOTgwXHV7MjZlZDd9XHU5MDM3XHV7Mjg1M2N9XHV7MjdhYmV9XHU5MDYxXHV7Mjg1NmN9XHV7Mjg2MGJ9XHU5MGE4XHV7Mjg3MTN9XHU5MGM0''@;'; put 'put ''XHV7Mjg2ZTZ9XHU5MGFlXHU5MGZkXHU5MTY3XHUzYWYwXHU5MWE5XHU5MWM0XHU3Y2FjXHV7Mjg5MzN9XHV7MjFlODl9XHU5MjBlXHU2YzlmXHU5MjQxXHU5MjYyXHV7MjU1Yjl9XHU5MmI5XHV7MjhhYzZ9XHV7MjNjOWJ9XHV7MjhiMGN9XHV7MjU1ZGJ9Il0sWyI5MGExIiwiXHV7MjBkMzF9''@;'; put 'put ''XHU5MzJjXHU5MzZiXHV7MjhhZTF9XHV7MjhiZWJ9XHU3MDhmXHU1YWMzXHV7MjhhZTJ9XHV7MjhhZTV9XHU0OTY1XHU5MjQ0XHV7MjhiZWN9XHV7MjhjMzl9XHV7MjhiZmZ9XHU5MzczXHU5NDViXHU4ZWJjXHU5NTg1XHU5NWE2XHU5NDI2XHU5NWEwXHU2ZmY2XHU0MmI5XHV7MjI2N2F9XHV7''@;'; put 'put ''Mjg2ZDh9XHV7MjEyN2N9XHV7MjNlMmV9XHU0OWRmXHU2YzFjXHU5NjdiXHU5Njk2XHU0MTZjXHU5NmEzXHV7MjZlZDV9XHU2MWRhXHU5NmI2XHU3OGY1XHV7MjhhZTB9XHU5NmJkXHU1M2NjXHU0OWExXHV7MjZjYjh9XHV7MjAyNzR9XHV7MjY0MTB9XHV7MjkwYWZ9XHV7MjkwZTV9XHV7MjRh''@;'; put 'put ''ZDF9XHV7MjE5MTV9XHV7MjMzMGF9XHU5NzMxXHU4NjQyXHU5NzM2XHU0YTBmXHU0NTNkXHU0NTg1XHV7MjRhZTl9XHU3MDc1XHU1YjQxXHU5NzFiXHU5NzVjXHV7MjkxZDV9XHU5NzU3XHU1YjRhXHV7MjkxZWJ9XHU5NzVmXHU5NDI1XHU1MGQwXHV7MjMwYjd9XHV7MjMwYmN9XHU5Nzg5XHU5''@;'; put 'put ''NzlmXHU5N2IxXHU5N2JlXHU5N2MwXHU5N2QyXHU5N2UwXHV7MjU0NmN9XHU5N2VlXHU3NDFjXHV7Mjk0MzN9XHU5N2ZmXHU5N2Y1XHV7Mjk0MWR9XHV7Mjc5N2F9XHU0YWQxXHU5ODM0XHU5ODMzXHU5ODRiXHU5ODY2XHUzYjBlXHV7MjcxNzV9XHUzZDUxXHV7MjA2MzB9XHV7MjQxNWN9Il0s''@;'; put 'put ''WyI5MTQwIiwiXHV7MjU3MDZ9XHU5OGNhXHU5OGI3XHU5OGM4XHU5OGM3XHU0YWZmXHV7MjZkMjd9XHV7MjE2ZDN9XHU1NWIwXHU5OGUxXHU5OGU2XHU5OGVjXHU5Mzc4XHU5OTM5XHV7MjRhMjl9XHU0YjcyXHV7Mjk4NTd9XHV7Mjk5MDV9XHU5OWY1XHU5YTBjXHU5YTNiXHU5YTEwXHU5YTU4''@;'; put 'put ''XHV7MjU3MjV9XHUzNmM0XHV7MjkwYjF9XHV7MjliZDV9XHU5YWUwXHU5YWUyXHV7MjliMDV9XHU5YWY0XHU0YzBlXHU5YjE0XHU5YjJkXHV7Mjg2MDB9XHU1MDM0XHU5YjM0XHV7MjY5YTh9XHUzOGMzXHV7MjMwN2R9XHU5YjUwXHU5YjQwXHV7MjlkM2V9XHU1YTQ1XHV7MjE4NjN9XHU5Yjhl''@;'; put 'put ''XHV7MjQyNGJ9XHU5YzAyXHU5YmZmXHU5YzBjXHV7MjllNjh9XHU5ZGQ0XHV7MjlmYjd9XHV7MmExOTJ9XHV7MmExYWJ9XHV7MmEwZTF9XHV7MmExMjN9XHV7MmExZGZ9XHU5ZDdlXHU5ZDgzXHV7MmExMzR9XHU5ZTBlXHU2ODg4Il0sWyI5MWExIiwiXHU5ZGM0XHV7MjIxNWJ9XHV7MmExOTN9''@;'; put 'put ''XHV7MmEyMjB9XHV7MjE5M2J9XHV7MmEyMzN9XHU5ZDM5XHV7MmEwYjl9XHV7MmEyYjR9XHU5ZTkwXHU5ZTk1XHU5ZTllXHU5ZWEyXHU0ZDM0XHU5ZWFhXHU5ZWFmXHV7MjQzNjR9XHU5ZWMxXHUzYjYwXHUzOWU1XHUzZDFkXHU0ZjMyXHUzN2JlXHV7MjhjMmJ9XHU5ZjAyXHU5ZjA4XHU0Yjk2''@;'; put 'put ''XHU5NDI0XHV7MjZkYTJ9XHU5ZjE3XHU5ZjE2XHU5ZjM5XHU1NjlmXHU1NjhhXHU5ZjQ1XHU5OWI4XHV7MjkwOGJ9XHU5N2YyXHU4NDdmXHU5ZjYyXHU5ZjY5XHU3YWRjXHU5ZjhlXHU3MjE2XHU0YmJlXHV7MjQ5NzV9XHV7MjQ5YmJ9XHU3MTc3XHV7MjQ5Zjh9XHV7MjQzNDh9XHV7MjRhNTF9''@;'; put 'put ''XHU3MzllXHV7MjhiZGF9XHV7MjE4ZmF9XHU3OTlmXHV7Mjg5N2V9XHV7MjhlMzZ9XHU5MzY5XHU5M2YzXHV7MjhhNDR9XHU5MmVjXHU5MzgxXHU5M2NiXHV7Mjg5NmN9XHV7MjQ0Yjl9XHU3MjE3XHUzZWViXHU3NzcyXHU3YTQzXHU3MGQwXHV7MjQ0NzN9XHV7MjQzZjh9XHU3MTdlXHV7MjE3''@;'; put 'put ''ZWZ9XHU3MGEzXHV7MjE4YmV9XHV7MjM1OTl9XHUzZWM3XHV7MjE4ODV9XHV7MjU0MmZ9XHV7MjE3Zjh9XHUzNzIyXHV7MjE2ZmJ9XHV7MjE4Mzl9XHUzNmUxXHV7MjE3NzR9XHV7MjE4ZDF9XHV7MjVmNGJ9XHUzNzIzXHV7MjE2YzB9XHU1NzViXHV7MjRhMjV9XHV7MjEzZmV9XHV7MjEyYTh9''@;'; put 'put ''Il0sWyI5MjQwIiwiXHV7MjEzYzZ9XHV7MjE0YjZ9XHU4NTAzXHV7MjM2YTZ9XHU4NTAzXHU4NDU1XHV7MjQ5OTR9XHV7MjcxNjV9XHV7MjNlMzF9XHV7MjU1NWN9XHV7MjNlZmJ9XHV7MjcwNTJ9XHU0NGY0XHV7MjM2ZWV9XHV7Mjk5OWR9XHV7MjZmMjZ9XHU2N2Y5XHUzNzMzXHUzYzE1XHUz''@;'; put 'put ''ZGU3XHU1ODZjXHV7MjE5MjJ9XHU2ODEwXHU0MDU3XHV7MjM3M2Z9XHV7MjQwZTF9XHV7MjQwOGJ9XHV7MjQxMGZ9XHV7MjZjMjF9XHU1NGNiXHU1NjllXHV7MjY2YjF9XHU1NjkyXHV7MjBmZGZ9XHV7MjBiYTh9XHV7MjBlMGR9XHU5M2M2XHV7MjhiMTN9XHU5MzljXHU0ZWY4XHU1MTJiXHUz''@;'; put 'put ''ODE5XHV7MjQ0MzZ9XHU0ZWJjXHV7MjA0NjV9XHV7MjAzN2Z9XHU0ZjRiXHU0ZjhhXHV7MjU2NTF9XHU1YTY4XHV7MjAxYWJ9XHV7MjAzY2J9XHUzOTk5XHV7MjAzMGF9XHV7MjA0MTR9XHUzNDM1XHU0ZjI5XHV7MjAyYzB9XHV7MjhlYjN9XHV7MjAyNzV9XHU4YWRhXHV7MjAyMGN9XHU0ZTk4''@;'; put 'put ''Il0sWyI5MmExIiwiXHU1MGNkXHU1MTBkXHU0ZmEyXHU0ZjAzXHV7MjRhMGV9XHV7MjNlOGF9XHU0ZjQyXHU1MDJlXHU1MDZjXHU1MDgxXHU0ZmNjXHU0ZmU1XHU1MDU4XHU1MGZjXHU1MTU5XHU1MTViXHU1MTVkXHU1MTVlXHU2ZTc2XHV7MjM1OTV9XHV7MjNlMzl9XHV7MjNlYmZ9XHU2ZDcy''@;'; put 'put ''XHV7MjE4ODR9XHV7MjNlODl9XHU1MWE4XHU1MWMzXHV7MjA1ZTB9XHU0NGRkXHV7MjA0YTN9XHV7MjA0OTJ9XHV7MjA0OTF9XHU4ZDdhXHV7MjhhOWN9XHV7MjA3MGV9XHU1MjU5XHU1MmE0XHV7MjA4NzN9XHU1MmUxXHU5MzZlXHU0NjdhXHU3MThjXHV7MjQzOGN9XHV7MjBjMjB9XHV7MjQ5''@;'; put 'put ''YWN9XHV7MjEwZTR9XHU2OWQxXHV7MjBlMWR9XHU3NDc5XHUzZWRlXHU3NDk5XHU3NDE0XHU3NDU2XHU3Mzk4XHU0YjhlXHV7MjRhYmN9XHV7MjQwOGR9XHU1M2QwXHUzNTg0XHU3MjBmXHV7MjQwYzl9XHU1NWI0XHV7MjAzNDV9XHU1NGNkXHV7MjBiYzZ9XHU1NzFkXHU5MjVkXHU5NmY0XHU5''@;'; put 'put ''MzY2XHU1N2RkXHU1NzhkXHU1NzdmXHUzNjNlXHU1OGNiXHU1YTk5XHV7MjhhNDZ9XHV7MjE2ZmF9XHV7MjE3NmZ9XHV7MjE3MTB9XHU1YTJjXHU1OWI4XHU5MjhmXHU1YTdlXHU1YWNmXHU1YTEyXHV7MjU5NDZ9XHV7MjE5ZjN9XHV7MjE4NjF9XHV7MjQyOTV9XHUzNmY1XHU2ZDA1XHU3NDQz''@;'; put 'put ''XHU1YTIxXHV7MjVlODN9Il0sWyI5MzQwIiwiXHU1YTgxXHV7MjhiZDd9XHV7MjA0MTN9XHU5M2UwXHU3NDhjXHV7MjEzMDN9XHU3MTA1XHU0OTcyXHU5NDA4XHV7Mjg5ZmJ9XHU5M2JkXHUzN2EwXHU1YzFlXHU1YzllXHU1ZTVlXHU1ZTQ4XHV7MjE5OTZ9XHV7MjE5N2N9XHV7MjNhZWV9XHU1''@;'; put 'put ''ZWNkXHU1YjRmXHV7MjE5MDN9XHV7MjE5MDR9XHUzNzAxXHV7MjE4YTB9XHUzNmRkXHV7MjE2ZmV9XHUzNmQzXHU4MTJhXHV7MjhhNDd9XHV7MjFkYmF9XHV7MjM0NzJ9XHV7Mjg5YTh9XHU1ZjBjXHU1ZjBlXHV7MjE5Mjd9XHV7MjE3YWJ9XHU1YTZiXHV7MjE3M2J9XHU1YjQ0XHU4NjE0XHV7''@;'; put 'put ''Mjc1ZmR9XHU4ODYwXHU2MDdlXHV7MjI4NjB9XHV7MjI2MmJ9XHU1ZmRiXHUzZWI4XHV7MjI1YWZ9XHV7MjI1YmV9XHV7MjkwODh9XHV7MjZmNzN9XHU2MWMwXHV7MjAwM2V9XHV7MjAwNDZ9XHV7MjI2MWJ9XHU2MTk5XHU2MTk4XHU2MDc1XHV7MjJjOWJ9XHV7MjJkMDd9XHV7MjQ2ZDR9XHV7''@;'; put 'put ''MjkxNGR9Il0sWyI5M2ExIiwiXHU2NDcxXHV7MjQ2NjV9XHV7MjJiNmF9XHUzYTI5XHV7MjJiMjJ9XHV7MjM0NTB9XHV7Mjk4ZWF9XHV7MjJlNzh9XHU2MzM3XHV7MmE0NWJ9XHU2NGI2XHU2MzMxXHU2M2QxXHV7MjQ5ZTN9XHV7MjJkNjd9XHU2MmE0XHV7MjJjYTF9XHU2NDNiXHU2NTZiXHU2''@;'; put 'put ''OTcyXHUzYmY0XHV7MjMwOGV9XHV7MjMyYWR9XHV7MjQ5ODl9XHV7MjMyYWJ9XHU1NTBkXHV7MjMyZTB9XHV7MjE4ZDl9XHV7Mjk0M2Z9XHU2NmNlXHV7MjMyODl9XHV7MjMxYjN9XHUzYWUwXHU0MTkwXHV7MjU1ODR9XHV7MjhiMjJ9XHV7MjU1OGZ9XHV7MjE2ZmN9XHV7MjU1NWJ9XHV7MjU0''@;'; put 'put ''MjV9XHU3OGVlXHV7MjMxMDN9XHV7MjE4MmF9XHV7MjMyMzR9XHUzNDY0XHV7MjMyMGZ9XHV7MjMxODJ9XHV7MjQyYzl9XHU2NjhlXHV7MjZkMjR9XHU2NjZiXHU0YjkzXHU2NjMwXHV7Mjc4NzB9XHV7MjFkZWJ9XHU2NjYzXHV7MjMyZDJ9XHV7MjMyZTF9XHU2NjFlXHV7MjU4NzJ9XHUzOGQx''@;'; put 'put ''XHV7MjM4M2F9XHV7MjM3YmN9XHUzYjk5XHV7MjM3YTJ9XHV7MjMzZmV9XHU3NGQwXHUzYjk2XHU2NzhmXHV7MjQ2MmF9XHU2OGI2XHU2ODFlXHUzYmM0XHU2YWJlXHUzODYzXHV7MjM3ZDV9XHV7MjQ0ODd9XHU2YTMzXHU2YTUyXHU2YWM5XHU2YjA1XHV7MjE5MTJ9XHU2NTExXHU2ODk4XHU2''@;'; put 'put ''YTRjXHUzYmQ3XHU2YTdhXHU2YjU3XHV7MjNmYzB9XHV7MjNjOWF9XHU5M2EwXHU5MmYyXHV7MjhiZWF9XHV7MjhhY2J9Il0sWyI5NDQwIiwiXHU5Mjg5XHV7MjgwMWV9XHV7Mjg5ZGN9XHU5NDY3XHU2ZGE1XHU2ZjBiXHV7MjQ5ZWN9XHU2ZDY3XHV7MjNmN2Z9XHUzZDhmXHU2ZTA0XHV7MjQw''@;'; put 'put ''M2N9XHU1YTNkXHU2ZTBhXHU1ODQ3XHU2ZDI0XHU3ODQyXHU3MTNiXHV7MjQzMWF9XHV7MjQyNzZ9XHU3MGYxXHU3MjUwXHU3Mjg3XHU3Mjk0XHV7MjQ3OGZ9XHV7MjQ3MjV9XHU1MTc5XHV7MjRhYTR9XHV7MjA1ZWJ9XHU3NDdhXHV7MjNlZjh9XHV7MjM2NWZ9XHV7MjRhNGF9XHV7MjQ5MTd9''@;'; put 'put ''XHV7MjVmZTF9XHUzZjA2XHUzZWIxXHV7MjRhZGZ9XHV7MjhjMjN9XHV7MjNmMzV9XHU2MGE3XHUzZWYzXHU3NGNjXHU3NDNjXHU5Mzg3XHU3NDM3XHU0NDlmXHV7MjZkZWF9XHU0NTUxXHU3NTgzXHUzZjYzXHV7MjRjZDl9XHV7MjRkMDZ9XHUzZjU4XHU3NTU1XHU3NjczXHV7MmE1YzZ9XHUz''@;'; put 'put ''YjE5XHU3NDY4XHV7MjhhY2N9XHV7MjQ5YWJ9XHV7MjQ5OGV9XHUzYWZiIl0sWyI5NGExIiwiXHUzZGNkXHV7MjRhNGV9XHUzZWZmXHV7MjQ5YzV9XHV7MjQ4ZjN9XHU5MWZhXHU1NzMyXHU5MzQyXHV7MjhhZTN9XHV7MjE4NjR9XHU1MGRmXHV7MjUyMjF9XHV7MjUxZTd9XHU3Nzc4XHV7MjMy''@;'; put 'put ''MzJ9XHU3NzBlXHU3NzBmXHU3NzdiXHV7MjQ2OTd9XHV7MjM3ODF9XHUzYTVlXHV7MjQ4ZjB9XHU3NDM4XHU3NDliXHUzZWJmXHV7MjRhYmF9XHV7MjRhYzd9XHU0MGM4XHV7MjRhOTZ9XHV7MjYxYWV9XHU5MzA3XHV7MjU1ODF9XHU3ODFlXHU3ODhkXHU3ODg4XHU3OGQyXHU3M2QwXHU3OTU5''@;'; put 'put ''XHV7Mjc3NDF9XHV7MjU2ZTN9XHU0MTBlXHU3OTliXHU4NDk2XHU3OWE1XHU2YTJkXHV7MjNlZmF9XHU3YTNhXHU3OWY0XHU0MTZlXHV7MjE2ZTZ9XHU0MTMyXHU5MjM1XHU3OWYxXHV7MjBkNGN9XHV7MjQ5OGN9XHV7MjAyOTl9XHV7MjNkYmF9XHV7MjE3NmV9XHUzNTk3XHU1NTZiXHUzNTcw''@;'; put 'put ''XHUzNmFhXHV7MjAxZDR9XHV7MjBjMGR9XHU3YWUyXHU1YTU5XHV7MjI2ZjV9XHV7MjVhYWZ9XHV7MjVhOWN9XHU1YTBkXHV7MjAyNWJ9XHU3OGYwXHU1YTJhXHV7MjViYzZ9XHU3YWZlXHU0MWY5XHU3YzVkXHU3YzZkXHU0MjExXHV7MjViYjN9XHV7MjVlYmN9XHV7MjVlYTZ9XHU3Y2NkXHV7''@;'; put 'put ''MjQ5Zjl9XHV7MjE3YjB9XHU3YzhlXHU3YzdjXHU3Y2FlXHU2YWIyXHU3ZGRjXHU3ZTA3XHU3ZGQzXHU3ZjRlXHV7MjYyNjF9Il0sWyI5NTQwIiwiXHV7MjYxNWN9XHV7MjdiNDh9XHU3ZDk3XHV7MjVlODJ9XHU0MjZhXHV7MjZiNzV9XHV7MjA5MTZ9XHU2N2Q2XHV7MjAwNGV9XHV7MjM1Y2Z9''@;'; put 'put ''XHU1N2M0XHV7MjY0MTJ9XHV7MjYzZjh9XHV7MjQ5NjJ9XHU3ZmRkXHU3YjI3XHV7MjA4MmN9XHV7MjVhZTl9XHV7MjVkNDN9XHU3YjBjXHV7MjVlMGV9XHU5OWU2XHU4NjQ1XHU5YTYzXHU2YTFjXHV7MjM0M2Z9XHUzOWUyXHV7MjQ5Zjd9XHV7MjY1YWR9XHU5YTFmXHV7MjY1YTB9XHU4NDgw''@;'; put 'put ''XHV7MjcxMjd9XHV7MjZjZDF9XHU0NGVhXHU4MTM3XHU0NDAyXHU4MGM2XHU4MTA5XHU4MTQyXHV7MjY3YjR9XHU5OGMzXHV7MjZhNDJ9XHU4MjYyXHU4MjY1XHV7MjZhNTF9XHU4NDUzXHV7MjZkYTd9XHU4NjEwXHV7MjcyMWJ9XHU1YTg2XHU0MTdmXHV7MjE4NDB9XHU1YjJiXHV7MjE4YTF9''@;'; put 'put ''XHU1YWU0XHV7MjE4ZDh9XHU4NmEwXHV7MmY5YmN9XHV7MjNkOGZ9XHU4ODJkXHV7Mjc0MjJ9XHU1YTAyIl0sWyI5NWExIiwiXHU4ODZlXHU0ZjQ1XHU4ODg3XHU4OGJmXHU4OGU2XHU4OTY1XHU4OTRkXHV7MjU2ODN9XHU4OTU0XHV7Mjc3ODV9XHV7Mjc3ODR9XHV7MjhiZjV9XHV7MjhiZDl9''@;'; put 'put ''XHV7MjhiOWN9XHV7Mjg5Zjl9XHUzZWFkXHU4NGEzXHU0NmY1XHU0NmNmXHUzN2YyXHU4YTNkXHU4YTFjXHV7Mjk0NDh9XHU1ZjRkXHU5MjJiXHV7MjQyODR9XHU2NWQ0XHU3MTI5XHU3MGM0XHV7MjE4NDV9XHU5ZDZkXHU4YzlmXHU4Y2U5XHV7MjdkZGN9XHU1OTlhXHU3N2MzXHU1OWYwXHU0''@;'; put 'put ''MzZlXHUzNmQ0XHU4ZTJhXHU4ZWE3XHV7MjRjMDl9XHU4ZjMwXHU4ZjRhXHU0MmY0XHU2YzU4XHU2ZmJiXHV7MjIzMjF9XHU0ODliXHU2Zjc5XHU2ZThiXHV7MjE3ZGF9XHU5YmU5XHUzNmI1XHV7MjQ5MmZ9XHU5MGJiXHU5MDk3XHU1NTcxXHU0OTA2XHU5MWJiXHU5NDA0XHV7MjhhNGJ9XHU0''@;'; put 'put ''MDYyXHV7MjhhZmN9XHU5NDI3XHV7MjhjMWR9XHV7MjhjM2J9XHU4NGU1XHU4YTJiXHU5NTk5XHU5NWE3XHU5NTk3XHU5NTk2XHV7MjhkMzR9XHU3NDQ1XHUzZWMyXHV7MjQ4ZmZ9XHV7MjRhNDJ9XHV7MjQzZWF9XHUzZWU3XHV7MjMyMjV9XHU5NjhmXHV7MjhlZTd9XHV7MjhlNjZ9XHV7Mjhl''@;'; put 'put ''NjV9XHUzZWNjXHV7MjQ5ZWR9XHV7MjRhNzh9XHV7MjNmZWV9XHU3NDEyXHU3NDZiXHUzZWZjXHU5NzQxXHV7MjkwYjB9Il0sWyI5NjQwIiwiXHU2ODQ3XHU0YTFkXHV7MjkwOTN9XHV7MjU3ZGZ9XHU5NzVkXHU5MzY4XHV7Mjg5ODl9XHV7MjhjMjZ9XHV7MjhiMmZ9XHV7MjYzYmV9XHU5MmJh''@;'; put 'put ''XHU1YjExXHU4YjY5XHU0OTNjXHU3M2Y5XHV7MjQyMWJ9XHU5NzliXHU5NzcxXHU5OTM4XHV7MjBmMjZ9XHU1ZGMxXHV7MjhiYzV9XHV7MjRhYjJ9XHU5ODFmXHV7Mjk0ZGF9XHU5MmY2XHV7Mjk1ZDd9XHU5MWU1XHU0NGMwXHV7MjhiNTB9XHV7MjRhNjd9XHV7MjhiNjR9XHU5OGRjXHV7Mjhh''@;'; put 'put ''NDV9XHUzZjAwXHU5MjJhXHU0OTI1XHU4NDE0XHU5OTNiXHU5OTRkXHV7MjdiMDZ9XHUzZGZkXHU5OTliXHU0YjZmXHU5OWFhXHU5YTVjXHV7MjhiNjV9XHV7MjU4Yzh9XHU2YThmXHU5YTIxXHU1YWZlXHU5YTJmXHV7Mjk4ZjF9XHU0YjkwXHV7Mjk5NDh9XHU5OWJjXHU0YmJkXHU0Yjk3XHU5''@;'; put 'put ''MzdkXHU1ODcyXHV7MjEzMDJ9XHU1ODIyXHV7MjQ5Yjh9Il0sWyI5NmExIiwiXHV7MjE0ZTh9XHU3ODQ0XHV7MjI3MWZ9XHV7MjNkYjh9XHU2OGM1XHUzZDdkXHU5NDU4XHUzOTI3XHU2MTUwXHV7MjI3ODF9XHV7MjI5NmJ9XHU2MTA3XHU5YzRmXHU5YzUzXHU5YzdiXHU5YzM1XHU5YzEwXHU5''@;'; put 'put ''YjdmXHU5YmNmXHV7MjllMmR9XHU5YjlmXHV7MmExZjV9XHV7MmEwZmV9XHU5ZDIxXHU0Y2FlXHV7MjQxMDR9XHU5ZTE4XHU0Y2IwXHU5ZDBjXHV7MmExYjR9XHV7MmEwZWR9XHV7MmEwZjN9XHV7Mjk5MmZ9XHU5ZGE1XHU4NGJkXHV7MjZlMTJ9XHV7MjZmZGZ9XHV7MjZiODJ9XHU4NWZjXHU0''@;'; put 'put ''NTMzXHV7MjZkYTR9XHV7MjZlODR9XHV7MjZkZjB9XHU4NDIwXHU4NWVlXHV7MjZlMDB9XHV7MjM3ZDd9XHV7MjYwNjR9XHU3OWUyXHV7MjM1OWN9XHV7MjM2NDB9XHU0OTJkXHV7MjQ5ZGV9XHUzZDYyXHU5M2RiXHU5MmJlXHU5MzQ4XHV7MjAyYmZ9XHU3OGI5XHU5Mjc3XHU5NDRkXHU0ZmU0''@;'; put 'put ''XHUzNDQwXHU5MDY0XHV7MjU1NWR9XHU3ODNkXHU3ODU0XHU3OGI2XHU3ODRiXHV7MjE3NTd9XHV7MjMxYzl9XHV7MjQ5NDF9XHUzNjlhXHU0ZjcyXHU2ZmRhXHU2ZmQ5XHU3MDFlXHU3MDFlXHU1NDE0XHV7MjQxYjV9XHU1N2JiXHU1OGYzXHU1NzhhXHU5ZDE2XHU1N2Q3XHU3MTM0XHUzNGFm''@;'; put 'put ''XHV7MjQxYWN9XHU3MWViXHV7MjZjNDB9XHV7MjRmOTd9XHU1YjI4XHV7MjE3YjV9XHV7MjhhNDl9Il0sWyI5NzQwIiwiXHU2MTBjXHU1YWNlXHU1YTBiXHU0MmJjXHV7MjQ0ODh9XHUzNzJjXHU0YjdiXHV7Mjg5ZmN9XHU5M2JiXHU5M2I4XHV7MjE4ZDZ9XHV7MjBmMWR9XHU4NDcyXHV7MjZj''@;'; put 'put ''YzB9XHV7MjE0MTN9XHV7MjQyZmF9XHV7MjJjMjZ9XHV7MjQzYzF9XHU1OTk0XHV7MjNkYjd9XHV7MjY3NDF9XHU3ZGE4XHV7MjYxNWJ9XHV7MjYwYTR9XHV7MjQ5Yjl9XHV7MjQ5OGJ9XHV7Mjg5ZmF9XHU5MmU1XHU3M2UyXHUzZWU5XHU3NGI0XHV7MjhiNjN9XHV7MjE4OWZ9XHUzZWUxXHV7''@;'; put 'put ''MjRhYjN9XHU2YWQ4XHU3M2YzXHU3M2ZiXHUzZWQ2XHV7MjRhM2V9XHV7MjRhOTR9XHV7MjE3ZDl9XHV7MjRhNjZ9XHV7MjAzYTd9XHV7MjE0MjR9XHV7MjQ5ZTV9XHU3NDQ4XHV7MjQ5MTZ9XHU3MGE1XHV7MjQ5NzZ9XHU5Mjg0XHU3M2U2XHU5MzVmXHV7MjA0ZmV9XHU5MzMxXHV7MjhhY2V9''@;'; put 'put ''XHV7MjhhMTZ9XHU5Mzg2XHV7MjhiZTd9XHV7MjU1ZDV9XHU0OTM1XHV7MjhhODJ9XHU3MTZiIl0sWyI5N2ExIiwiXHV7MjQ5NDN9XHV7MjBjZmZ9XHU1NmE0XHV7MjA2MWF9XHV7MjBiZWJ9XHV7MjBjYjh9XHU1NTAyXHU3OWM0XHV7MjE3ZmF9XHU3ZGZlXHV7MjE2YzJ9XHV7MjRhNTB9XHV7''@;'; put 'put ''MjE4NTJ9XHU0NTJlXHU5NDAxXHUzNzBhXHV7MjhhYzB9XHV7MjQ5YWR9XHU1OWIwXHV7MjE4YmZ9XHV7MjE4ODN9XHV7Mjc0ODR9XHU1YWExXHUzNmUyXHV7MjNkNWJ9XHUzNmIwXHU5MjVmXHU1YTc5XHV7MjhhODF9XHV7MjE4NjJ9XHU5Mzc0XHUzY2NkXHV7MjBhYjR9XHU0YTk2XHUzOThh''@;'; put 'put ''XHU1MGY0XHUzZDY5XHUzZDRjXHV7MjEzOWN9XHU3MTc1XHU0MmZiXHV7MjgyMTh9XHU2ZTBmXHV7MjkwZTR9XHU0NGViXHU2ZDU3XHV7MjdlNGZ9XHU3MDY3XHU2Y2FmXHUzY2Q2XHV7MjNmZWR9XHV7MjNlMmR9XHU2ZTAyXHU2ZjBjXHUzZDZmXHV7MjAzZjV9XHU3NTUxXHUzNmJjXHUzNGM4''@;'; put 'put ''XHU0NjgwXHUzZWRhXHU0ODcxXHU1OWM0XHU5MjZlXHU0OTNlXHU4ZjQxXHV7MjhjMWN9XHV7MjZiYzB9XHU1ODEyXHU1N2M4XHUzNmQ2XHV7MjE0NTJ9XHU3MGZlXHV7MjQzNjJ9XHV7MjRhNzF9XHV7MjJmZTN9XHV7MjEyYjB9XHV7MjIzYmR9XHU2OGI5XHU2OTY3XHV7MjEzOTh9XHV7MjM0''@;'; put 'put ''ZTV9XHV7MjdiZjR9XHV7MjM2ZGZ9XHV7MjhhODN9XHV7MjM3ZDZ9XHV7MjMzZmF9XHV7MjRjOWZ9XHU2YTFhXHV7MjM2YWR9XHV7MjZjYjd9XHU4NDNlXHU0NGRmXHU0NGNlIl0sWyI5ODQwIiwiXHV7MjZkMjZ9XHV7MjZkNTF9XHV7MjZjODJ9XHV7MjZmZGV9XHU2ZjE3XHV7MjcxMDl9XHU4''@;'; put 'put ''MzNkXHV7MjE3M2F9XHU4M2VkXHV7MjZjODB9XHV7MjcwNTN9XHV7MjE3ZGJ9XHU1OTg5XHU1YTgyXHV7MjE3YjN9XHU1YTYxXHU1YTcxXHV7MjE5MDV9XHV7MjQxZmN9XHUzNzJkXHU1OWVmXHV7MjE3M2N9XHUzNmM3XHU3MThlXHU5MzkwXHU2NjlhXHV7MjQyYTV9XHU1YTZlXHU1YTJiXHV7''@;'; put 'put ''MjQyOTN9XHU2YTJiXHV7MjNlZjl9XHV7Mjc3MzZ9XHV7MjQ0NWJ9XHV7MjQyY2F9XHU3MTFkXHV7MjQyNTl9XHV7Mjg5ZTF9XHU0ZmIwXHV7MjZkMjh9XHU1Y2MyXHV7MjQ0Y2V9XHV7MjdlNGR9XHV7MjQzYmR9XHU2YTBjXHV7MjQyNTZ9XHV7MjEzMDR9XHU3MGE2XHU3MTMzXHV7MjQzZTl9''@;'; put 'put ''XHUzZGE1XHU2Y2RmXHV7MmY4MjV9XHV7MjRhNGZ9XHU3ZTY1XHU1OWViXHU1ZDJmXHUzZGYzXHU1ZjVjXHV7MjRhNWR9XHV7MjE3ZGZ9XHU3ZGE0XHU4NDI2Il0sWyI5OGExIiwiXHU1NDg1XHV7MjNhZmF9XHV7MjMzMDB9XHV7MjAyMTR9XHU1NzdlXHV7MjA4ZDV9XHV7MjA2MTl9XHUzZmU1''@;'; put 'put ''XHV7MjFmOWV9XHV7MmEyYjZ9XHU3MDAzXHV7MjkxNWJ9XHU1ZDcwXHU3MzhmXHU3Y2QzXHV7MjhhNTl9XHV7Mjk0MjB9XHU0ZmM4XHU3ZmU3XHU3MmNkXHU3MzEwXHV7MjdhZjR9XHU3MzM4XHU3MzM5XHV7MjU2ZjZ9XHU3MzQxXHU3MzQ4XHUzZWE5XHV7MjdiMTh9XHU5MDZjXHU3MWY1XHV7''@;'; put 'put ''MjQ4ZjJ9XHU3M2UxXHU4MWY2XHUzZWNhXHU3NzBjXHUzZWQxXHU2Y2EyXHU1NmZkXHU3NDE5XHU3NDFlXHU3NDFmXHUzZWUyXHUzZWYwXHUzZWY0XHUzZWZhXHU3NGQzXHUzZjBlXHUzZjUzXHU3NTQyXHU3NTZkXHU3NTcyXHU3NThkXHUzZjdjXHU3NWM4XHU3NWRjXHUzZmMwXHU3NjRkXHUz''@;'; put 'put ''ZmQ3XHU3Njc0XHUzZmRjXHU3NjdhXHV7MjRmNWN9XHU3MTg4XHU1NjIzXHU4OTgwXHU1ODY5XHU0MDFkXHU3NzQzXHU0MDM5XHU2NzYxXHU0MDQ1XHUzNWRiXHU3Nzk4XHU0MDZhXHU0MDZmXHU1YzVlXHU3N2JlXHU3N2NiXHU1OGYyXHU3ODE4XHU3MGI5XHU3ODFjXHU0MGE4XHU3ODM5XHU3''@;'; put 'put ''ODQ3XHU3ODUxXHU3ODY2XHU4NDQ4XHV7MjU1MzV9XHU3OTMzXHU2ODAzXHU3OTMyXHU0MTAzIl0sWyI5OTQwIiwiXHU0MTA5XHU3OTkxXHU3OTk5XHU4ZmJiXHU3YTA2XHU4ZmJjXHU0MTY3XHU3YTkxXHU0MWIyXHU3YWJjXHU4Mjc5XHU0MWM0XHU3YWNmXHU3YWRiXHU0MWNmXHU0ZTIxXHU3''@;'; put 'put ''YjYyXHU3YjZjXHU3YjdiXHU3YzEyXHU3YzFiXHU0MjYwXHU0MjdhXHU3YzdiXHU3YzljXHU0MjhjXHU3Y2I4XHU0Mjk0XHU3Y2VkXHU4ZjkzXHU3MGMwXHV7MjBjY2Z9XHU3ZGNmXHU3ZGQ0XHU3ZGQwXHU3ZGZkXHU3ZmFlXHU3ZmI0XHU3MjlmXHU0Mzk3XHU4MDIwXHU4MDI1XHU3YjM5XHU4''@;'; put 'put ''MDJlXHU4MDMxXHU4MDU0XHUzZGNjXHU1N2I0XHU3MGEwXHU4MGI3XHU4MGU5XHU0M2VkXHU4MTBjXHU3MzJhXHU4MTBlXHU4MTEyXHU3NTYwXHU4MTE0XHU0NDAxXHUzYjM5XHU4MTU2XHU4MTU5XHU4MTVhIl0sWyI5OWExIiwiXHU0NDEzXHU1ODNhXHU4MTdjXHU4MTg0XHU0NDI1XHU4MTkz''@;'; put 'put ''XHU0NDJkXHU4MWE1XHU1N2VmXHU4MWMxXHU4MWU0XHU4MjU0XHU0NDhmXHU4MmE2XHU4Mjc2XHU4MmNhXHU4MmQ4XHU4MmZmXHU0NGIwXHU4MzU3XHU5NjY5XHU2OThhXHU4NDA1XHU3MGY1XHU4NDY0XHU2MGUzXHU4NDg4XHU0NTA0XHU4NGJlXHU4NGUxXHU4NGY4XHU4NTEwXHU4NTM4XHU4''@;'; put 'put ''NTUyXHU0NTNiXHU4NTZmXHU4NTcwXHU4NWUwXHU0NTc3XHU4NjcyXHU4NjkyXHU4NmIyXHU4NmVmXHU5NjQ1XHU4NzhiXHU0NjA2XHU0NjE3XHU4OGFlXHU4OGZmXHU4OTI0XHU4OTQ3XHU4OTkxXHV7Mjc5Njd9XHU4YTI5XHU4YTM4XHU4YTk0XHU4YWI0XHU4YzUxXHU4Y2Q0XHU4Y2YyXHU4''@;'; put 'put ''ZDFjXHU0Nzk4XHU1ODVmXHU4ZGMzXHU0N2VkXHU0ZWVlXHU4ZTNhXHU1NWQ4XHU1NzU0XHU4ZTcxXHU1NWY1XHU4ZWIwXHU0ODM3XHU4ZWNlXHU4ZWUyXHU4ZWU0XHU4ZWVkXHU4ZWYyXHU4ZmI3XHU4ZmMxXHU4ZmNhXHU4ZmNjXHU5MDMzXHU5OWM0XHU0OGFkXHU5OGUwXHU5MjEzXHU0OTFl''@;'; put 'put ''XHU5MjI4XHU5MjU4XHU5MjZiXHU5MmIxXHU5MmFlXHU5MmJmIl0sWyI5YTQwIiwiXHU5MmUzXHU5MmViXHU5MmYzXHU5MmY0XHU5MmZkXHU5MzQzXHU5Mzg0XHU5M2FkXHU0OTQ1XHU0OTUxXHU5ZWJmXHU5NDE3XHU1MzAxXHU5NDFkXHU5NDJkXHU5NDNlXHU0OTZhXHU5NDU0XHU5NDc5XHU5''@;'; put 'put ''NTJkXHU5NWEyXHU0OWE3XHU5NWY0XHU5NjMzXHU0OWU1XHU2N2EwXHU0YTI0XHU5NzQwXHU0YTM1XHU5N2IyXHU5N2MyXHU1NjU0XHU0YWU0XHU2MGU4XHU5OGI5XHU0YjE5XHU5OGYxXHU1ODQ0XHU5OTBlXHU5OTE5XHU1MWI0XHU5OTFjXHU5OTM3XHU5OTQyXHU5OTVkXHU5OTYyXHU0Yjcw''@;'; put 'put ''XHU5OWM1XHU0YjlkXHU5YTNjXHU5YjBmXHU3YTgzXHU5YjY5XHU5YjgxXHU5YmRkXHU5YmYxXHU5YmY0XHU0YzZkXHU5YzIwXHUzNzZmXHV7MjFiYzJ9XHU5ZDQ5XHU5YzNhIl0sWyI5YWExIiwiXHU5ZWZlXHU1NjUwXHU5ZDkzXHU5ZGJkXHU5ZGMwXHU5ZGZjXHU5NGY2XHU4ZmI2XHU5ZTdi''@;'; put 'put ''XHU5ZWFjXHU5ZWIxXHU5ZWJkXHU5ZWM2XHU5NGRjXHU5ZWUyXHU5ZWYxXHU5ZWY4XHU3YWM4XHU5ZjQ0XHV7MjAwOTR9XHV7MjAyYjd9XHV7MjAzYTB9XHU2OTFhXHU5NGMzXHU1OWFjXHV7MjA0ZDd9XHU1ODQwXHU5NGMxXHUzN2I5XHV7MjA1ZDV9XHV7MjA2MTV9XHV7MjA2NzZ9XHV7MjE2''@;'; put 'put ''YmF9XHU1NzU3XHU3MTczXHV7MjBhYzJ9XHV7MjBhY2R9XHV7MjBiYmZ9XHU1NDZhXHV7MmY4M2J9XHV7MjBiY2J9XHU1NDllXHV7MjBiZmJ9XHV7MjBjM2J9XHV7MjBjNTN9XHV7MjBjNjV9XHV7MjBjN2N9XHU2MGU3XHV7MjBjOGR9XHU1NjdhXHV7MjBjYjV9XHV7MjBjZGR9XHV7MjBjZWR9''@;'; put 'put ''XHV7MjBkNmZ9XHV7MjBkYjJ9XHV7MjBkYzh9XHU2OTU1XHU5YzJmXHU4N2E1XHV7MjBlMDR9XHV7MjBlMGV9XHV7MjBlZDd9XHV7MjBmOTB9XHV7MjBmMmR9XHV7MjBlNzN9XHU1YzIwXHV7MjBmYmN9XHU1ZTBiXHV7MjEwNWN9XHV7MjEwNGZ9XHV7MjEwNzZ9XHU2NzFlXHV7MjEwN2J9XHV7''@;'; put 'put ''MjEwODh9XHV7MjEwOTZ9XHUzNjQ3XHV7MjEwYmZ9XHV7MjEwZDN9XHV7MjExMmZ9XHV7MjExM2J9XHU1MzY0XHU4NGFkXHV7MjEyZTN9XHV7MjEzNzV9XHV7MjEzMzZ9XHU4YjgxXHV7MjE1Nzd9XHV7MjE2MTl9XHV7MjE3YzN9XHV7MjE3Yzd9XHU0ZTc4XHU3MGJiXHV7MjE4MmR9XHV7MjE5''@;'; put 'put ''NmF9Il0sWyI5YjQwIiwiXHV7MjFhMmR9XHV7MjFhNDV9XHV7MjFjMmF9XHV7MjFjNzB9XHV7MjFjYWN9XHV7MjFlYzh9XHU2MmMzXHV7MjFlZDV9XHV7MjFmMTV9XHU3MTk4XHU2ODU1XHV7MjIwNDV9XHU2OWU5XHUzNmM4XHV7MjIyN2N9XHV7MjIzZDd9XHV7MjIzZmF9XHV7MjI3MmF9XHV7''@;'; put 'put ''MjI4NzF9XHV7MjI5NGZ9XHU4MmZkXHV7MjI5Njd9XHV7MjI5OTN9XHV7MjJhZDV9XHU4OWE1XHV7MjJhZTh9XHU4ZmEwXHV7MjJiMGV9XHU5N2I4XHV7MjJiM2Z9XHU5ODQ3XHU5YWJkXHV7MjJjNGN9Il0sWyI5YjYyIiwiXHV7MjJjODh9XHV7MjJjYjd9XHV7MjViZTh9XHV7MjJkMDh9XHV7''@;'; put 'put ''MjJkMTJ9XHV7MjJkYjd9XHV7MjJkOTV9XHV7MjJlNDJ9XHV7MjJmNzR9XHV7MjJmY2N9XHV7MjMwMzN9XHV7MjMwNjZ9XHV7MjMzMWZ9XHV7MjMzZGV9XHU1ZmIxXHU2NjQ4XHU2NmJmXHV7MjdhNzl9XHV7MjM1Njd9XHV7MjM1ZjN9XHU3MjAxXHV7MjQ5YmF9XHU3N2Q3XHV7MjM2MWF9XHV7''@;'; put 'put ''MjM3MTZ9XHU3ZTg3XHV7MjAzNDZ9XHU1OGI1XHU2NzBlIl0sWyI5YmExIiwiXHU2OTE4XHV7MjNhYTd9XHV7Mjc2NTd9XHV7MjVmZTJ9XHV7MjNlMTF9XHV7MjNlYjl9XHV7Mjc1ZmV9XHV7MjIwOWF9XHU0OGQwXHU0YWI4XHV7MjQxMTl9XHV7MjhhOWF9XHV7MjQyZWV9XHV7MjQzMGR9XHV7''@;'; put 'put ''MjQwM2J9XHV7MjQzMzR9XHV7MjQzOTZ9XHV7MjRhNDV9XHV7MjA1Y2F9XHU1MWQyXHV7MjA2MTF9XHU1OTlmXHV7MjFlYTh9XHUzYmJlXHV7MjNjZmZ9XHV7MjQ0MDR9XHV7MjQ0ZDZ9XHU1Nzg4XHV7MjQ2NzR9XHUzOTliXHV7MjQ3MmZ9XHV7Mjg1ZTh9XHV7Mjk5Yzl9XHUzNzYyXHV7MjIx''@;'; put 'put ''YzN9XHU4YjVlXHV7MjhiNGV9XHU5OWQ2XHV7MjQ4MTJ9XHV7MjQ4ZmJ9XHV7MjRhMTV9XHU3MjA5XHV7MjRhYzB9XHV7MjBjNzh9XHU1OTY1XHV7MjRlYTV9XHV7MjRmODZ9XHV7MjA3Nzl9XHU4ZWRhXHV7MjUwMmN9XHU1MjhmXHU1NzNmXHU3MTcxXHV7MjUyOTl9XHV7MjU0MTl9XHV7MjNm''@;'; put 'put ''NGF9XHV7MjRhYTd9XHU1NWJjXHV7MjU0NDZ9XHV7MjU0NmV9XHV7MjZiNTJ9XHU5MWQ0XHUzNDczXHV7MjU1M2Z9XHV7Mjc2MzJ9XHV7MjU1NWV9XHU0NzE4XHV7MjU1NjJ9XHV7MjU1NjZ9XHV7MjU3Yzd9XHV7MjQ5M2Z9XHV7MjU4NWR9XHU1MDY2XHUzNGZiXHV7MjMzY2N9XHU2MGRlXHV7''@;'; put 'put ''MjU5MDN9XHU0NzdjXHV7Mjg5NDh9XHV7MjVhYWV9XHV7MjViODl9XHV7MjVjMDZ9XHV7MjFkOTB9XHU1N2ExXHU3MTUxXHU2ZmI2XHV7MjYxMDJ9XHV7MjdjMTJ9XHU5MDU2XHV7MjYxYjJ9XHV7MjRmOWF9XHU4YjYyXHV7MjY0MDJ9XHV7MjY0NGF9Il0sWyI5YzQwIiwiXHU1ZDViXHV7MjZi''@;'; put 'put ''Zjd9XHU4ZjM2XHV7MjY0ODR9XHV7MjE5MWN9XHU4YWVhXHV7MjQ5ZjZ9XHV7MjY0ODh9XHV7MjNmZWZ9XHV7MjY1MTJ9XHU0YmMwXHV7MjY1YmZ9XHV7MjY2YjV9XHV7MjI3MWJ9XHU5NDY1XHV7MjU3ZTF9XHU2MTk1XHU1YTI3XHV7MmY4Y2R9XHU0ZmJiXHU1NmI5XHV7MjQ1MjF9XHV7MjY2''@;'; put 'put ''ZmN9XHU0ZTZhXHV7MjQ5MzR9XHU5NjU2XHU2ZDhmXHV7MjZjYmR9XHUzNjE4XHU4OTc3XHV7MjY3OTl9XHV7MjY4NmV9XHV7MjY0MTF9XHV7MjY4NWV9XHU3MWRmXHV7MjY4Yzd9XHU3YjQyXHV7MjkwYzB9XHV7MjBhMTF9XHV7MjY5MjZ9XHU5MTA0XHV7MjY5Mzl9XHU3YTQ1XHU5ZGYwXHV7''@;'; put 'put ''MjY5ZmF9XHU5YTI2XHV7MjZhMmR9XHUzNjVmXHV7MjY0Njl9XHV7MjAwMjF9XHU3OTgzXHV7MjZhMzR9XHV7MjZiNWJ9XHU1ZDJjXHV7MjM1MTl9XHU4M2NmXHV7MjZiOWR9XHU0NmQwXHV7MjZjYTR9XHU3NTNiXHU4ODY1XHV7MjZkYWV9XHU1OGI2Il0sWyI5Y2ExIiwiXHUzNzFjXHV7MjI1''@;'; put 'put ''OGR9XHV7MjcwNGJ9XHV7MjcxY2R9XHUzYzU0XHV7MjcyODB9XHV7MjcyODV9XHU5MjgxXHV7MjIxN2F9XHV7MjcyOGJ9XHU5MzMwXHV7MjcyZTZ9XHV7MjQ5ZDB9XHU2YzM5XHU5NDlmXHV7Mjc0NTB9XHV7MjBlZjh9XHU4ODI3XHU4OGY1XHV7MjI5MjZ9XHV7Mjg0NzN9XHV7MjE3YjF9XHU2''@;'; put 'put ''ZWI4XHV7MjRhMmF9XHV7MjE4MjB9XHUzOWE0XHUzNmI5XHU1YzEwXHU3OWUzXHU0NTNmXHU2NmI2XHV7MjljYWR9XHV7Mjk4YTR9XHU4OTQzXHV7Mjc3Y2N9XHV7Mjc4NTh9XHU1NmQ2XHU0MGRmXHV7MjE2MGF9XHUzOWExXHV7MjM3MmZ9XHV7MjgwZTh9XHV7MjEzYzV9XHU3MWFkXHU4MzY2''@;'; put 'put ''XHV7Mjc5ZGR9XHV7MjkxYTh9XHU1YTY3XHU0Y2I3XHV7MjcwYWZ9XHV7Mjg5YWJ9XHV7Mjc5ZmR9XHV7MjdhMGF9XHV7MjdiMGJ9XHV7MjdkNjZ9XHV7MjQxN2F9XHU3YjQzXHU3OTdlXHV7MjgwMDl9XHU2ZmI1XHV7MmEyZGZ9XHU2YTAzXHV7MjgzMTh9XHU1M2EyXHV7MjZlMDd9XHU5M2Jm''@;'; put 'put ''XHU2ODM2XHU5NzVkXHV7MjgxNmZ9XHV7MjgwMjN9XHV7MjY5YjV9XHV7MjEzZWR9XHV7MjMyMmZ9XHV7MjgwNDh9XHU1ZDg1XHV7MjhjMzB9XHV7MjgwODN9XHU1NzE1XHU5ODIzXHV7Mjg5NDl9XHU1ZGFiXHV7MjQ5ODh9XHU2NWJlXHU2OWQ1XHU1M2QyXHV7MjRhYTV9XHV7MjNmODF9XHUz''@;'; put 'put ''YzExXHU2NzM2XHV7MjgwOTB9XHV7MjgwZjR9XHV7MjgxMmV9XHV7MjFmYTF9XHV7MjgxNGZ9Il0sWyI5ZDQwIiwiXHV7MjgxODl9XHV7MjgxYWZ9XHV7MjgyMWF9XHV7MjgzMDZ9XHV7MjgzMmZ9XHV7MjgzOGF9XHUzNWNhXHV7Mjg0Njh9XHV7Mjg2YWF9XHU0OGZhXHU2M2U2XHV7Mjg5NTZ9''@;'; put 'put ''XHU3ODA4XHU5MjU1XHV7Mjg5Yjh9XHU0M2YyXHV7Mjg5ZTd9XHU0M2RmXHV7Mjg5ZTh9XHV7MjhiNDZ9XHV7MjhiZDR9XHU1OWY4XHV7MjhjMDl9XHU4ZjBiXHV7MjhmYzV9XHV7MjkwZWN9XHU3YjUxXHV7MjkxMTB9XHV7MjkxM2N9XHUzZGY3XHV7MjkxNWV9XHV7MjRhY2F9XHU4ZmQwXHU3''@;'; put 'put ''MjhmXHU1NjhiXHV7Mjk0ZTd9XHV7Mjk1ZTl9XHV7Mjk1YjB9XHV7Mjk1Yjh9XHV7Mjk3MzJ9XHV7Mjk4ZDF9XHV7Mjk5NDl9XHV7Mjk5NmF9XHV7Mjk5YzN9XHV7MjlhMjh9XHV7MjliMGV9XHV7MjlkNWF9XHV7MjlkOWJ9XHU3ZTlmXHV7MjllZjh9XHV7MjlmMjN9XHU0Y2E0XHU5NTQ3XHV7''@;'; put 'put ''MmEyOTN9XHU3MWEyXHV7MmEyZmZ9XHU0ZDkxXHU5MDEyXHV7MmE1Y2J9XHU0ZDljXHV7MjBjOWN9XHU4ZmJlXHU1NWMxIl0sWyI5ZGExIiwiXHU4ZmJhXHV7MjI0YjB9XHU4ZmI5XHV7MjRhOTN9XHU0NTA5XHU3ZTdmXHU2ZjU2XHU2YWIxXHU0ZWVhXHUzNGU0XHV7MjhiMmN9XHV7Mjc4OWR9''@;'; put 'put ''XHUzNzNhXHU4ZTgwXHV7MjE3ZjV9XHV7MjgwMjR9XHV7MjhiNmN9XHV7MjhiOTl9XHV7MjdhM2V9XHV7MjY2YWZ9XHUzZGViXHV7Mjc2NTV9XHV7MjNjYjd9XHV7MjU2MzV9XHV7MjU5NTZ9XHU0ZTlhXHV7MjVlODF9XHV7MjYyNTh9XHU1NmJmXHV7MjBlNmR9XHU4ZTBlXHU1YjZkXHV7MjNl''@;'; put 'put ''ODh9XHV7MjRjOWV9XHU2M2RlXHU2MmQwXHV7MjE3ZjZ9XHV7MjE4N2J9XHU2NTMwXHU1NjJkXHV7MjVjNGF9XHU1NDFhXHV7MjUzMTF9XHUzZGM2XHV7MjlkOTh9XHU0YzdkXHU1NjIyXHU1NjFlXHU3ZjQ5XHV7MjVlZDh9XHU1OTc1XHV7MjNkNDB9XHU4NzcwXHU0ZTFjXHV7MjBmZWF9XHV7''@;'; put 'put ''MjBkNDl9XHV7MjM2YmF9XHU4MTE3XHU5ZDVlXHU4ZDE4XHU3NjNiXHU5YzQ1XHU3NjRlXHU3N2I5XHU5MzQ1XHU1NDMyXHU4MTQ4XHU4MmY3XHU1NjI1XHU4MTMyXHU4NDE4XHU4MGJkXHU1NWVhXHU3OTYyXHU1NjQzXHU1NDE2XHV7MjBlOWR9XHUzNWNlXHU1NjA1XHU1NWYxXHU2NmYxXHV7''@;'; put 'put ''MjgyZTJ9XHUzNjJkXHU3NTM0XHU1NWYwXHU1NWJhXHU1NDk3XHU1NTcyXHV7MjBjNDF9XHV7MjBjOTZ9XHU1ZWQwXHV7MjUxNDh9XHV7MjBlNzZ9XHV7MjJjNjJ9Il0sWyI5ZTQwIiwiXHV7MjBlYTJ9XHU5ZWFiXHU3ZDVhXHU1NWRlXHV7MjEwNzV9XHU2MjlkXHU5NzZkXHU1NDk0XHU4Y2Nk''@;'; put 'put ''XHU3MWY2XHU5MTc2XHU2M2ZjXHU2M2I5XHU2M2ZlXHU1NTY5XHV7MjJiNDN9XHU5YzcyXHV7MjJlYjN9XHU1MTlhXHUzNGRmXHV7MjBkYTd9XHU1MWE3XHU1NDRkXHU1NTFlXHU1NTEzXHU3NjY2XHU4ZTJkXHV7MjY4OGF9XHU3NWIxXHU4MGI2XHU4ODA0XHU4Nzg2XHU4OGM3XHU4MWI2XHU4''@;'; put 'put ''NDFjXHV7MjEwYzF9XHU0NGVjXHU3MzA0XHV7MjQ3MDZ9XHU1YjkwXHU4MzBiXHV7MjY4OTN9XHU1NjdiXHV7MjI2ZjR9XHV7MjdkMmZ9XHV7MjQxYTN9XHV7MjdkNzN9XHV7MjZlZDB9XHV7MjcyYjZ9XHU5MTcwXHV7MjExZDl9XHU5MjA4XHV7MjNjZmN9XHV7MmE2YTl9XHV7MjBlYWN9XHV7''@;'; put 'put ''MjBlZjl9XHU3MjY2XHV7MjFjYTJ9XHU0NzRlXHV7MjRmYzJ9XHV7MjdmZjl9XHV7MjBmZWJ9XHU0MGZhIl0sWyI5ZWExIiwiXHU5YzVkXHU2NTFmXHV7MjJkYTB9XHU0OGYzXHV7MjQ3ZTB9XHV7MjlkN2N9XHV7MjBmZWN9XHV7MjBlMGF9XHU2MDYyXHV7Mjc1YTN9XHV7MjBmZWR9Il0sWyI5''@;'; put 'put ''ZWFkIiwiXHV7MjYwNDh9XHV7MjExODd9XHU3MWEzXHU3ZThlXHU5ZDUwXHU0ZTFhXHU0ZTA0XHUzNTc3XHU1YjBkXHU2Y2IyXHU1MzY3XHUzNmFjXHUzOWRjXHU1MzdkXHUzNmE1XHV7MjQ2MTh9XHU1ODlhXHV7MjRiNmV9XHU4MjJkXHU1NDRiXHU1N2FhXHV7MjVhOTV9XHV7MjA5Nzl9Il0s''@;'; put 'put ''WyI5ZWM1IiwiXHUzYTUyXHV7MjI0NjV9XHU3Mzc0XHV7MjllYWN9XHU0ZDA5XHU5YmVkXHV7MjNjZmV9XHV7MjlmMzB9XHU0YzViXHV7MjRmYTl9XHV7Mjk1OWV9XHV7MjlmZGV9XHU4NDVjXHV7MjNkYjZ9XHV7MjcyYjJ9XHV7MjY3YjN9XHV7MjM3MjB9XHU2MzJlXHU3ZDI1XHV7MjNlZjd9''@;'; put 'put ''XHV7MjNlMmN9XHUzYTJhXHU5MDA4XHU1MmNjXHUzZTc0XHUzNjdhXHU0NWU5XHV7MjA0OGV9XHU3NjQwXHU1YWYwXHV7MjBlYjZ9XHU3ODdhXHV7MjdmMmV9XHU1OGE3XHU0MGJmXHU1NjdjXHU5YjhiXHU1ZDc0XHU3NjU0XHV7MmE0MzR9XHU5ZTg1XHU0Y2UxXHU3NWY5XHUzN2ZiXHU2MTE5''@;'; put 'put ''XHV7MjMwZGF9XHV7MjQzZjJ9Il0sWyI5ZWY1IiwiXHU1NjVkXHV7MjEyYTl9XHU1N2E3XHV7MjQ5NjN9XHV7MjllMDZ9XHU1MjM0XHV7MjcwYWV9XHUzNWFkXHU2YzRhXHU5ZDdjIl0sWyI5ZjQwIiwiXHU3YzU2XHU5YjM5XHU1N2RlXHV7MjE3NmN9XHU1YzUzXHU2NGQzXHV7Mjk0ZDB9XHV7''@;'; put 'put ''MjYzMzV9XHV7MjcxNjR9XHU4NmFkXHV7MjBkMjh9XHV7MjZkMjJ9XHV7MjRhZTJ9XHV7MjBkNzF9Il0sWyI5ZjRmIiwiXHU1MWZlXHV7MjFmMGZ9XHU1ZDhlXHU5NzAzXHV7MjFkZDF9XHU5ZTgxXHU5MDRjXHU3YjFmXHU5YjAyXHU1Y2QxXHU3YmEzXHU2MjY4XHU2MzM1XHU5YWZmXHU3YmNm''@;'; put 'put ''XHU5YjJhXHU3YzdlXHU5YjJlXHU3YzQyXHU3Yzg2XHU5YzE1XHU3YmZjXHU5YjA5XHU5ZjE3XHU5YzFiXHV7MjQ5M2V9XHU5ZjVhXHU1NTczXHU1YmMzXHU0ZmZkXHU5ZTk4XHU0ZmYyXHU1MjYwXHUzZTA2XHU1MmQxXHU1NzY3XHU1MDU2XHU1OWI3XHU1ZTEyXHU5N2M4XHU5ZGFiXHU4ZjVj''@;'; put 'put ''XHU1NDY5XHU5N2I0XHU5OTQwXHU5N2JhXHU1MzJjXHU2MTMwIl0sWyI5ZmExIiwiXHU2OTJjXHU1M2RhXHU5YzBhXHU5ZDAyXHU0YzNiXHU5NjQxXHU2OTgwXHU1MGE2XHU3NTQ2XHV7MjE3NmR9XHU5OWRhXHU1MjczIl0sWyI5ZmFlIiwiXHU5MTU5XHU5NjgxXHU5MTVjIl0sWyI5ZmIyIiwi''@;'; put 'put ''XHU5MTUxXHV7MjhlOTd9XHU2MzdmXHV7MjZkMjN9XHU2YWNhXHU1NjExXHU5MThlXHU3NTdhXHU2Mjg1XHV7MjAzZmN9XHU3MzRmXHU3YzcwXHV7MjVjMjF9XHV7MjNjZmR9Il0sWyI5ZmMxIiwiXHV7MjQ5MTl9XHU3NmQ2XHU5YjlkXHU0ZTJhXHV7MjBjZDR9XHU4M2JlXHU4ODQyIl0sWyI5''@;'; put 'put ''ZmM5IiwiXHU1YzRhXHU2OWMwXHU1MGVkXHU1NzdhXHU1MjFmXHU1ZGY1XHU0ZWNlXHU2YzMxXHV7MjAxZjJ9XHU0ZjM5XHU1NDljXHU1NGRhXHU1MjlhXHU4ZDgyXHUzNWZlXHU1ZjBjXHUzNWYzIl0sWyI5ZmRiIiwiXHU2YjUyXHU5MTdjXHU5ZmE1XHU5Yjk3XHU5ODJlXHU5OGI0XHU5YWJh''@;'; put 'put ''XHU5ZWE4XHU5ZTg0XHU3MTdhXHU3YjE0Il0sWyI5ZmU3IiwiXHU2YmZhXHU4ODE4XHU3Zjc4Il0sWyI5ZmViIiwiXHU1NjIwXHV7MmE2NGF9XHU4ZTc3XHU5ZjUzIl0sWyI5ZmYwIiwiXHU4ZGQ0XHU4ZTRmXHU5ZTFjXHU4ZTAxXHU2MjgyXHV7MjgzN2R9XHU4ZTI4XHU4ZTc1XHU3YWQzXHV7''@;'; put 'put ''MjRhNzd9XHU3YTNlXHU3OGQ4XHU2Y2VhXHU4YTY3XHU3NjA3Il0sWyJhMDQwIiwiXHV7MjhhNWF9XHU5ZjI2XHU2Y2NlXHU4N2Q2XHU3NWMzXHV7MmEyYjJ9XHU3ODUzXHV7MmY4NDB9XHU4ZDBjXHU3MmUyXHU3MzcxXHU4YjJkXHU3MzAyXHU3NGYxXHU4Y2ViXHV7MjRhYmJ9XHU4NjJmXHU1''@;'; put 'put ''ZmJhXHU4OGEwXHU0NGI3Il0sWyJhMDU1IiwiXHV7MjE4M2J9XHV7MjZlMDV9Il0sWyJhMDU4IiwiXHU4YTdlXHV7MjI1MWJ9Il0sWyJhMDViIiwiXHU2MGZkXHU3NjY3XHU5YWQ3XHU5ZDQ0XHU5MzZlXHU5YjhmXHU4N2Y1Il0sWyJhMDYzIiwiXHU4ODBmXHU4Y2Y3XHU3MzJjXHU5NzIxXHU5''@;'; put 'put ''YmIwXHUzNWQ2XHU3MmIyXHU0YzA3XHU3YzUxXHU5OTRhXHV7MjYxNTl9XHU2MTU5XHU0YzA0XHU5ZTk2XHU2MTdkIl0sWyJhMDczIiwiXHU1NzVmXHU2MTZmXHU2MmE2XHU2MjM5XHU2MmNlXHUzYTVjXHU2MWUyXHU1M2FhXHV7MjMzZjV9XHU2MzY0XHU2ODAyXHUzNWQyIl0sWyJhMGExIiwi''@;'; put 'put ''XHU1ZDU3XHV7MjhiYzJ9XHU4ZmRhXHV7MjhlMzl9Il0sWyJhMGE2IiwiXHU1MGQ5XHV7MjFkNDZ9XHU3OTA2XHU1MzMyXHU5NjM4XHV7MjBmM2J9XHU0MDY1Il0sWyJhMGFlIiwiXHU3N2ZlIl0sWyJhMGIwIiwiXHU3Y2MyXHV7MjVmMWF9XHU3Y2RhXHU3YTJkXHU4MDY2XHU4MDYzXHU3ZDRk''@;'; put 'put ''XHU3NTA1XHU3NGYyXHU4OTk0XHU4MjFhXHU2NzBjXHU4MDYyXHV7Mjc0ODZ9XHU4MDViXHU3NGYwXHU4MTAzXHU3NzI0XHU4OTg5XHV7MjY3Y2N9XHU3NTUzXHV7MjZlZDF9XHU4N2E5XHU4N2NlXHU4MWM4XHU4NzhjXHU4YTQ5XHU4Y2FkXHU4YjQzXHU3NzJiXHU3NGY4XHU4NGRhXHUzNjM1''@;'; put 'put ''XHU2OWIyXHU4ZGE2Il0sWyJhMGQ0IiwiXHU4OWE5XHU3NDY4XHU2ZGI5XHU4N2MxXHV7MjQwMTF9XHU3NGU3XHUzZGRiXHU3MTc2XHU2MGE0XHU2MTljXHUzY2QxXHU3MTYyXHU2MDc3Il0sWyJhMGUyIiwiXHU3ZjcxXHV7MjhiMmR9XHU3MjUwXHU2MGU5XHU0YjdlXHU1MjIwXHUzYzE4XHV7''@;'; put 'put ''MjNjYzd9XHV7MjVlZDd9XHV7Mjc2NTZ9XHV7MjU1MzF9XHV7MjE5NDR9XHV7MjEyZmV9XHV7Mjk5MDN9XHV7MjZkZGN9XHV7MjcwYWR9XHU1Y2MxXHV7MjYxYWR9XHV7MjhhMGZ9XHV7MjM2Nzd9XHV7MjAwZWV9XHV7MjY4NDZ9XHV7MjRmMGV9XHU0NTYyXHU1YjFmXHV7MjYzNGN9XHU5ZjUw''@;'; put 'put ''XHU5ZWE2XHV7MjYyNmJ9Il0sWyJhM2MwIiwiXHUyNDAwIiwzMSwiXHUyNDIxIl0sWyJjNmExIiwiXHUyNDYwIiw5LCJcdTI0NzQiLDksIlx1MjE3MCIsOSwiXHU0ZTM2XHU0ZTNmXHU0ZTg1XHU0ZWEwXHU1MTgyXHU1MTk2XHU1MWFiXHU1MmY5XHU1MzM4XHU1MzY5XHU1M2I2XHU1OTBhXHU1''@;'; put 'put ''YjgwXHU1ZGRiXHUyZjMzXHU1ZTdmXHU1ZWY0XHU1ZjUwXHU1ZjYxXHU2NTM0XHU2NWUwXHU3NTkyXHU3Njc2XHU4ZmI1XHU5NmI2XHhhOFx1MDJjNlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1ZmYzYlx1ZmYzZFx1MjczZFx1''@;'; put 'put ''MzA0MSIsMjNdLFsiYzc0MCIsIlx1MzA1OSIsNTgsIlx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNCJdLFsiYzdhMSIsIlx1MzBhNSIsODEsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2Iiw0XSxbImM4NDAiLCJcdTA0MWIiLDI2LCJcdTA0NTFcdTA0MzYiLDI1LCJcdTIxZTdcdTIxYjhcdTIxYjlc''@;'; put 'put ''dTMxY2ZcdXsyMDBjY31cdTRlNWFcdXsyMDA4YX1cdTUyMDJcdTQ0OTEiXSxbImM4YTEiLCJcdTlmYjBcdTUxODhcdTlmYjFcdXsyNzYwN30iXSxbImM4Y2QiLCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTMwOWJcdTMwOWNcdTJlODBcdTJlODRcdTJlODZc''@;'; put 'put ''dTJlODdcdTJlODhcdTJlOGFcdTJlOGNcdTJlOGRcdTJlOTVcdTJlOWNcdTJlOWRcdTJlYTVcdTJlYTdcdTJlYWFcdTJlYWNcdTJlYWVcdTJlYjZcdTJlYmNcdTJlYmVcdTJlYzZcdTJlY2FcdTJlY2NcdTJlY2RcdTJlY2ZcdTJlZDZcdTJlZDdcdTJlZGVcdTJlZTMiXSxbImM4ZjUiLCJcdTAy''@;'; put 'put ''ODNcdTAyNTBcdTAyNWJcdTAyNTRcdTAyNzVcdTAxNTNceGY4XHUwMTRiXHUwMjhhXHUwMjZhIl0sWyJmOWZlIiwiXHVmZmVkIl0sWyJmYTQwIiwiXHV7MjA1NDd9XHU5MmRiXHV7MjA1ZGZ9XHV7MjNmYzV9XHU4NTRjXHU0MmI1XHU3M2VmXHU1MWI1XHUzNjQ5XHV7MjQ5NDJ9XHV7Mjg5ZTR9''@;'; put 'put ''XHU5MzQ0XHV7MjE5ZGJ9XHU4MmVlXHV7MjNjYzh9XHU3ODNjXHU2NzQ0XHU2MmRmXHV7MjQ5MzN9XHV7Mjg5YWF9XHV7MjAyYTB9XHV7MjZiYjN9XHV7MjEzMDV9XHU0ZmFiXHV7MjI0ZWR9XHU1MDA4XHV7MjZkMjl9XHV7MjdhODR9XHV7MjM2MDB9XHV7MjRhYjF9XHV7MjI1MTN9XHU1MDI5''@;'; put 'put ''XHV7MjAzN2V9XHU1ZmE0XHV7MjAzODB9XHV7MjAzNDd9XHU2ZWRiXHV7MjA0MWZ9XHU1MDdkXHU1MTAxXHUzNDdhXHU1MTBlXHU5ODZjXHUzNzQzXHU4NDE2XHV7MjQ5YTR9XHV7MjA0ODd9XHU1MTYwXHV7MjMzYjR9XHU1MTZhXHV7MjBiZmZ9XHV7MjIwZmN9XHV7MjAyZTV9XHV7MjI1MzB9''@;'; put 'put ''XHV7MjA1OGV9XHV7MjMyMzN9XHV7MjE5ODN9XHU1YjgyXHU4NzdkXHV7MjA1YjN9XHV7MjNjOTl9XHU1MWIyXHU1MWI4Il0sWyJmYWExIiwiXHU5ZDM0XHU1MWM5XHU1MWNmXHU1MWQxXHUzY2RjXHU1MWQzXHV7MjRhYTZ9XHU1MWIzXHU1MWUyXHU1MzQyXHU1MWVkXHU4M2NkXHU2OTNlXHV7''@;'; put 'put ''MjM3MmR9XHU1ZjdiXHU1MjBiXHU1MjI2XHU1MjNjXHU1MmI1XHU1MjU3XHU1Mjk0XHU1MmI5XHU1MmM1XHU3YzE1XHU4NTQyXHU1MmUwXHU4NjBkXHV7MjZiMTN9XHU1MzA1XHV7MjhhZGV9XHU1NTQ5XHU2ZWQ5XHV7MjNmODB9XHV7MjA5NTR9XHV7MjNmZWN9XHU1MzMzXHU1MzQ0XHV7MjBi''@;'; put 'put ''ZTJ9XHU2Y2NiXHV7MjE3MjZ9XHU2ODFiXHU3M2Q1XHU2MDRhXHUzZWFhXHUzOGNjXHV7MjE2ZTh9XHU3MWRkXHU0NGEyXHU1MzZkXHU1Mzc0XHV7Mjg2YWJ9XHU1MzdlXHU1MzdmXHV7MjE1OTZ9XHV7MjE2MTN9XHU3N2U2XHU1MzkzXHV7MjhhOWJ9XHU1M2EwXHU1M2FiXHU1M2FlXHU3M2E3''@;'; put 'put ''XHV7MjU3NzJ9XHUzZjU5XHU3MzljXHU1M2MxXHU1M2M1XHU2YzQ5XHU0ZTQ5XHU1N2ZlXHU1M2Q5XHUzYWFiXHV7MjBiOGZ9XHU1M2UwXHV7MjNmZWJ9XHV7MjJkYTN9XHU1M2Y2XHV7MjBjNzd9XHU1NDEzXHU3MDc5XHU1NTJiXHU2NjU3XHU2ZDViXHU1NDZkXHV7MjZiNTN9XHV7MjBkNzR9''@;'; put 'put ''XHU1NTVkXHU1NDhmXHU1NGE0XHU0N2E2XHV7MjE3MGR9XHV7MjBlZGR9XHUzZGI0XHV7MjBkNGR9Il0sWyJmYjQwIiwiXHV7Mjg5YmN9XHV7MjI2OTh9XHU1NTQ3XHU0Y2VkXHU1NDJmXHU3NDE3XHU1NTg2XHU1NWE5XHU1NjA1XHV7MjE4ZDd9XHV7MjQwM2F9XHU0NTUyXHV7MjQ0MzV9XHU2''@;'; put 'put ''NmIzXHV7MjEwYjR9XHU1NjM3XHU2NmNkXHV7MjMyOGF9XHU2NmE0XHU2NmFkXHU1NjRkXHU1NjRmXHU3OGYxXHU1NmYxXHU5Nzg3XHU1M2ZlXHU1NzAwXHU1NmVmXHU1NmVkXHV7MjhiNjZ9XHUzNjIzXHV7MjEyNGZ9XHU1NzQ2XHV7MjQxYTV9XHU2YzZlXHU3MDhiXHU1NzQyXHUzNmIxXHV7''@;'; put 'put ''MjZjN2V9XHU1N2U2XHV7MjE0MTZ9XHU1ODAzXHV7MjE0NTR9XHV7MjQzNjN9XHU1ODI2XHV7MjRiZjV9XHU1ODVjXHU1OGFhXHUzNTYxXHU1OGUwXHU1OGRjXHV7MjEyM2N9XHU1OGZiXHU1YmZmXHU1NzQzXHV7MmExNTB9XHV7MjQyNzh9XHU5M2QzXHUzNWExXHU1OTFmXHU2OGE2XHUzNmMz''@;'; put 'put ''XHU2ZTU5Il0sWyJmYmExIiwiXHV7MjE2M2V9XHU1YTI0XHU1NTUzXHV7MjE2OTJ9XHU4NTA1XHU1OWM5XHV7MjBkNGV9XHV7MjZjODF9XHV7MjZkMmF9XHV7MjE3ZGN9XHU1OWQ5XHV7MjE3ZmJ9XHV7MjE3YjJ9XHV7MjZkYTZ9XHU2ZDcxXHV7MjE4Mjh9XHV7MjE2ZDV9XHU1OWY5XHV7MjZl''@;'; put 'put ''NDV9XHU1YWFiXHU1YTYzXHUzNmU2XHV7MjQ5YTl9XHU1YTc3XHUzNzA4XHU1YTk2XHU3NDY1XHU1YWQzXHV7MjZmYTF9XHV7MjI1NTR9XHUzZDg1XHV7MjE5MTF9XHUzNzMyXHV7MjE2Yjh9XHU1ZTgzXHU1MmQwXHU1Yjc2XHU2NTg4XHU1YjdjXHV7MjdhMGV9XHU0MDA0XHU0ODVkXHV7MjAy''@;'; put 'put ''MDR9XHU1YmQ1XHU2MTYwXHV7MjFhMzR9XHV7MjU5Y2N9XHV7MjA1YTV9XHU1YmYzXHU1YjlkXHU0ZDEwXHU1YzA1XHV7MjFiNDR9XHU1YzEzXHU3M2NlXHU1YzE0XHV7MjFjYTV9XHV7MjZiMjh9XHU1YzQ5XHU0OGRkXHU1Yzg1XHU1Y2U5XHU1Y2VmXHU1ZDhiXHV7MjFkZjl9XHV7MjFlMzd9''@;'; put 'put ''XHU1ZDEwXHU1ZDE4XHU1ZDQ2XHV7MjFlYTR9XHU1Y2JhXHU1ZGQ3XHU4MmZjXHUzODJkXHV7MjQ5MDF9XHV7MjIwNDl9XHV7MjIxNzN9XHU4Mjg3XHUzODM2XHUzYmMyXHU1ZTJlXHU2YThhXHU1ZTc1XHU1ZTdhXHV7MjQ0YmN9XHV7MjBjZDN9XHU1M2E2XHU0ZWI3XHU1ZWQwXHU1M2E4XHV7''@;'; put 'put ''MjE3NzF9XHU1ZTA5XHU1ZWY0XHV7Mjg0ODJ9Il0sWyJmYzQwIiwiXHU1ZWY5XHU1ZWZiXHUzOGEwXHU1ZWZjXHU2ODNlXHU5NDFiXHU1ZjBkXHV7MjAxYzF9XHV7MmY4OTR9XHUzYWRlXHU0OGFlXHV7MjEzM2F9XHU1ZjNhXHV7MjY4ODh9XHV7MjIzZDB9XHU1ZjU4XHV7MjI0NzF9XHU1ZjYz''@;'; put 'put ''XHU5N2JkXHV7MjZlNmV9XHU1ZjcyXHU5MzQwXHV7MjhhMzZ9XHU1ZmE3XHU1ZGI2XHUzZDVmXHV7MjUyNTB9XHV7MjFmNmF9XHV7MjcwZjh9XHV7MjI2Njh9XHU5MWQ2XHV7MjAyOWV9XHV7MjhhMjl9XHU2MDMxXHU2Njg1XHV7MjE4Nzd9XHUzOTYzXHUzZGM3XHUzNjM5XHU1NzkwXHV7MjI3''@;'; put 'put ''YjR9XHU3OTcxXHUzZTQwXHU2MDllXHU2MGE0XHU2MGIzXHV7MjQ5ODJ9XHV7MjQ5OGZ9XHV7MjdhNTN9XHU3NGE0XHU1MGUxXHU1YWEwXHU2MTY0XHU4NDI0XHU2MTQyXHV7MmY4YTZ9XHV7MjZlZDJ9XHU2MTgxXHU1MWY0XHV7MjA2NTZ9XHU2MTg3XHU1YmFhXHV7MjNmYjd9Il0sWyJmY2Ex''@;'; put 'put ''IiwiXHV7MjI4NWZ9XHU2MWQzXHV7MjhiOWR9XHV7Mjk5NWR9XHU2MWQwXHUzOTMyXHV7MjI5ODB9XHV7MjI4YzF9XHU2MDIzXHU2MTVjXHU2NTFlXHU2MzhiXHV7MjAxMTh9XHU2MmM1XHV7MjE3NzB9XHU2MmQ1XHV7MjJlMGR9XHU2MzZjXHV7MjQ5ZGZ9XHUzYTE3XHU2NDM4XHU2M2Y4XHV7''@;'; put 'put ''MjEzOGV9XHV7MjE3ZmN9XHU2NDkwXHU2ZjhhXHV7MjJlMzZ9XHU5ODE0XHV7MjQwOGN9XHV7MjU3MWR9XHU2NGUxXHU2NGU1XHU5NDdiXHUzYTY2XHU2NDNhXHUzYTU3XHU2NTRkXHU2ZjE2XHV7MjRhMjh9XHV7MjRhMjN9XHU2NTg1XHU2NTZkXHU2NTVmXHV7MjMwN2V9XHU2NWI1XHV7MjQ5''@;'; put 'put ''NDB9XHU0YjM3XHU2NWQxXHU0MGQ4XHV7MjE4Mjl9XHU2NWUwXHU2NWUzXHU1ZmRmXHV7MjM0MDB9XHU2NjE4XHV7MjMxZjd9XHV7MjMxZjh9XHU2NjQ0XHV7MjMxYTR9XHV7MjMxYTV9XHU2NjRiXHV7MjBlNzV9XHU2NjY3XHV7MjUxZTZ9XHU2NjczXHU2Njc0XHV7MjFlM2R9XHV7MjMyMzF9''@;'; put 'put ''XHV7Mjg1ZjR9XHV7MjMxYzh9XHV7MjUzMTN9XHU3N2M1XHV7MjI4Zjd9XHU5OWE0XHU2NzAyXHV7MjQzOWN9XHV7MjRhMjF9XHUzYjJiXHU2OWZhXHV7MjM3YzJ9XHU2NzVlXHU2NzY3XHU2NzYyXHV7MjQxY2R9XHV7MjkwZWR9XHU2N2Q3XHU0NGU5XHU2ODIyXHU2ZTUwXHU5MjNjXHU2ODAx''@;'; put 'put ''XHV7MjMzZTZ9XHV7MjZkYTB9XHU2ODVkIl0sWyJmZDQwIiwiXHV7MjM0NmZ9XHU2OWUxXHU2YTBiXHV7MjhhZGZ9XHU2OTczXHU2OGMzXHV7MjM1Y2R9XHU2OTAxXHU2OTAwXHUzZDMyXHUzYTAxXHV7MjM2M2N9XHUzYjgwXHU2N2FjXHU2OTYxXHV7MjhhNGF9XHU0MmZjXHU2OTM2XHU2OTk4''@;'; put 'put ''XHUzYmExXHV7MjAzYzl9XHU4MzYzXHU1MDkwXHU2OWY5XHV7MjM2NTl9XHV7MjIxMmF9XHU2YTQ1XHV7MjM3MDN9XHU2YTlkXHUzYmYzXHU2N2IxXHU2YWM4XHV7MjkxOWN9XHUzYzBkXHU2YjFkXHV7MjA5MjN9XHU2MGRlXHU2YjM1XHU2Yjc0XHV7MjI3Y2R9XHU2ZWI1XHV7MjNhZGJ9XHV7''@;'; put 'put ''MjAzYjV9XHV7MjE5NTh9XHUzNzQwXHU1NDIxXHV7MjNiNWF9XHU2YmUxXHV7MjNlZmN9XHU2YmRjXHU2YzM3XHV7MjI0OGJ9XHV7MjQ4ZjF9XHV7MjZiNTF9XHU2YzVhXHU4MjI2XHU2Yzc5XHV7MjNkYmN9XHU0NGM1XHV7MjNkYmR9XHV7MjQxYTR9XHV7MjQ5MGN9XHV7MjQ5MDB9Il0sWyJm''@;'; put 'put ''ZGExIiwiXHV7MjNjYzl9XHUzNmU1XHUzY2ViXHV7MjBkMzJ9XHU5YjgzXHV7MjMxZjl9XHV7MjI0OTF9XHU3ZjhmXHU2ODM3XHV7MjZkMjV9XHV7MjZkYTF9XHV7MjZkZWJ9XHU2ZDk2XHU2ZDVjXHU2ZTdjXHU2ZjA0XHV7MjQ5N2Z9XHV7MjQwODV9XHV7MjZlNzJ9XHU4NTMzXHV7MjZmNzR9''@;'; put 'put ''XHU1MWM3XHU2YzljXHU2ZTFkXHU4NDJlXHV7MjhiMjF9XHU2ZTJmXHV7MjNlMmZ9XHU3NDUzXHV7MjNmODJ9XHU3OWNjXHU2ZTRmXHU1YTkxXHV7MjMwNGJ9XHU2ZmY4XHUzNzBkXHU2ZjlkXHV7MjNlMzB9XHU2ZWZhXHV7MjE0OTd9XHV7MjQwM2R9XHU0NTU1XHU5M2YwXHU2ZjQ0XHU2ZjVj''@;'; put 'put ''XHUzZDRlXHU2Zjc0XHV7MjkxNzB9XHUzZDNiXHU2ZjlmXHV7MjQxNDR9XHU2ZmQzXHV7MjQwOTF9XHV7MjQxNTV9XHV7MjQwMzl9XHV7MjNmZjB9XHV7MjNmYjR9XHV7MjQxM2Z9XHU1MWRmXHV7MjQxNTZ9XHV7MjQxNTd9XHV7MjQxNDB9XHV7MjYxZGR9XHU3MDRiXHU3MDdlXHU3MGE3XHU3''@;'; put 'put ''MDgxXHU3MGNjXHU3MGQ1XHU3MGQ2XHU3MGRmXHU0MTA0XHUzZGU4XHU3MWI0XHU3MTk2XHV7MjQyNzd9XHU3MTJiXHU3MTQ1XHU1YTg4XHU3MTRhXHU3MTZlXHU1YzljXHV7MjQzNjV9XHU3MTRmXHU5MzYyXHV7MjQyYzF9XHU3MTJjXHV7MjQ0NWF9XHV7MjRhMjd9XHV7MjRhMjJ9XHU3MWJh''@;'; put 'put ''XHV7MjhiZTh9XHU3MGJkXHU3MjBlIl0sWyJmZTQwIiwiXHU5NDQyXHU3MjE1XHU1OTExXHU5NDQzXHU3MjI0XHU5MzQxXHV7MjU2MDV9XHU3MjJlXHU3MjQwXHV7MjQ5NzR9XHU2OGJkXHU3MjU1XHU3MjU3XHUzZTU1XHV7MjMwNDR9XHU2ODBkXHU2ZjNkXHU3MjgyXHU3MzJhXHU3MzJiXHV7''@;'; put 'put ''MjQ4MjN9XHV7Mjg4MmJ9XHU0OGVkXHV7Mjg4MDR9XHU3MzI4XHU3MzJlXHU3M2NmXHU3M2FhXHV7MjBjM2F9XHV7MjZhMmV9XHU3M2M5XHU3NDQ5XHV7MjQxZTJ9XHV7MjE2ZTd9XHV7MjRhMjR9XHU2NjIzXHUzNmM1XHV7MjQ5Yjd9XHV7MjQ5OGR9XHV7MjQ5ZmJ9XHU3M2Y3XHU3NDE1XHU2''@;'; put 'put ''OTAzXHV7MjRhMjZ9XHU3NDM5XHV7MjA1YzN9XHUzZWQ3XHU3NDVjXHV7MjI4YWR9XHU3NDYwXHV7MjhlYjJ9XHU3NDQ3XHU3M2U0XHU3NDc2XHU4M2I5XHU3NDZjXHUzNzMwXHU3NDc0XHU5M2YxXHU2YTJjXHU3NDgyXHU0OTUzXHV7MjRhOGN9Il0sWyJmZWExIiwiXHV7MjQxNWZ9XHV7MjRh''@;'; put 'put ''Nzl9XHV7MjhiOGZ9XHU1YjQ2XHV7MjhjMDN9XHV7MjE4OWV9XHU3NGM4XHV7MjE5ODh9XHU3NTBlXHU3NGU5XHU3NTFlXHV7MjhlZDl9XHV7MjFhNGJ9XHU1YmQ3XHV7MjhlYWN9XHU5Mzg1XHU3NTRkXHU3NTRhXHU3NTY3XHU3NTZlXHV7MjRmODJ9XHUzZjA0XHV7MjRkMTN9XHU3NThlXHU3''@;'; put 'put ''NDVkXHU3NTllXHU3NWI0XHU3NjAyXHU3NjJjXHU3NjUxXHU3NjRmXHU3NjZmXHU3Njc2XHV7MjYzZjV9XHU3NjkwXHU4MWVmXHUzN2Y4XHV7MjY5MTF9XHV7MjY5MGV9XHU3NmExXHU3NmE1XHU3NmI3XHU3NmNjXHV7MjZmOWZ9XHU4NDYyXHV7MjUwOWR9XHV7MjUxN2R9XHV7MjFlMWN9XHU3''@;'; put 'put ''NzFlXHU3NzI2XHU3NzQwXHU2NGFmXHV7MjUyMjB9XHU3NzU4XHV7MjMyYWN9XHU3N2FmXHV7Mjg5NjR9XHV7Mjg5Njh9XHV7MjE2YzF9XHU3N2Y0XHU3ODA5XHV7MjEzNzZ9XHV7MjRhMTJ9XHU2OGNhXHU3OGFmXHU3OGM3XHU3OGQzXHU5NmE1XHU3OTJlXHV7MjU1ZTB9XHU3OGQ3XHU3OTM0''@;'; put 'put ''XHU3OGIxXHV7Mjc2MGN9XHU4ZmI4XHU4ODg0XHV7MjhiMmJ9XHV7MjYwODN9XHV7MjI2MWN9XHU3OTg2XHU4OTAwXHU2OTAyXHU3OTgwXHV7MjU4NTd9XHU3OTlkXHV7MjdiMzl9XHU3OTNjXHU3OWE5XHU2ZTJhXHV7MjcxMjZ9XHUzZWE4XHU3OWM2XHV7MjkxMGR9XHU3OWQ0Il1dJyl9LDc0''@;'; put 'put ''NDg4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyNywiXHUyMGFjIl0sWyI4MTQwIiwiXHU0ZTAyXHU0ZTA0XHU0ZTA1XHU0ZTA2XHU0ZTBmXHU0ZTEyXHU0ZTE3XHU0ZTFmXHU0ZTIwXHU0ZTIxXHU0ZTIzXHU0ZTI2XHU0ZTI5XHU0''@;'; put 'put ''ZTJlXHU0ZTJmXHU0ZTMxXHU0ZTMzXHU0ZTM1XHU0ZTM3XHU0ZTNjXHU0ZTQwXHU0ZTQxXHU0ZTQyXHU0ZTQ0XHU0ZTQ2XHU0ZTRhXHU0ZTUxXHU0ZTU1XHU0ZTU3XHU0ZTVhXHU0ZTViXHU0ZTYyXHU0ZTYzXHU0ZTY0XHU0ZTY1XHU0ZTY3XHU0ZTY4XHU0ZTZhIiw1LCJcdTRlNzJcdTRlNzQi''@;'; put 'put ''LDksIlx1NGU3ZiIsNiwiXHU0ZTg3XHU0ZThhIl0sWyI4MTgwIiwiXHU0ZTkwXHU0ZTk2XHU0ZTk3XHU0ZTk5XHU0ZTljXHU0ZTlkXHU0ZTllXHU0ZWEzXHU0ZWFhXHU0ZWFmXHU0ZWIwXHU0ZWIxXHU0ZWI0XHU0ZWI2XHU0ZWI3XHU0ZWI4XHU0ZWI5XHU0ZWJjXHU0ZWJkXHU0ZWJlXHU0ZWM4''@;'; put 'put ''XHU0ZWNjXHU0ZWNmXHU0ZWQwXHU0ZWQyXHU0ZWRhXHU0ZWRiXHU0ZWRjXHU0ZWUwXHU0ZWUyXHU0ZWU2XHU0ZWU3XHU0ZWU5XHU0ZWVkXHU0ZWVlXHU0ZWVmXHU0ZWYxXHU0ZWY0XHU0ZWY4XHU0ZWY5XHU0ZWZhXHU0ZWZjXHU0ZWZlXHU0ZjAwXHU0ZjAyIiw2LCJcdTRmMGJcdTRmMGNcdTRm''@;'; put 'put ''MTIiLDQsIlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZSIsNCwiXHU0ZjQ0XHU0ZjQ1XHU0ZjQ3Iiw1LCJcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNjFcdTRmNjJcdTRm''@;'; put 'put ''NjZcdTRmNjhcdTRmNmFcdTRmNmJcdTRmNmRcdTRmNmVcdTRmNzFcdTRmNzJcdTRmNzVcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmODBcdTRmODFcdTRmODJcdTRmODVcdTRmODZcdTRmODdcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTVcdTRmOTZc''@;'; put 'put ''dTRmOThcdTRmOTlcdTRmOWFcdTRmOWNcdTRmOWVcdTRmOWZcdTRmYTFcdTRmYTIiXSxbIjgyNDAiLCJcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjAiLDQsIlx1NGZiNiIsOCwiXHU0ZmMwXHU0ZmMxXHU0ZmMyXHU0ZmM2XHU0ZmM3XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmQy''@;'; put 'put ''Iiw0LCJcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJcdTRmZTRcdTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNcdTRmZjBcdTRmZjJcdTRmZjRcdTRmZjVcdTRmZjZcdTRmZjdcdTRmZjlcdTRmZmJcdTRmZmNcdTRmZmRcdTRmZmYiLDExXSxbIjgyODAiLCJcdTUwMGJcdTUwMGVcdTUwMTBcdTUwMTFc''@;'; put 'put ''dTUwMTNcdTUwMTVcdTUwMTZcdTUwMTdcdTUwMWJcdTUwMWRcdTUwMWVcdTUwMjBcdTUwMjJcdTUwMjNcdTUwMjRcdTUwMjdcdTUwMmJcdTUwMmYiLDEwLCJcdTUwM2JcdTUwM2RcdTUwM2ZcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUwNGJcdTUw''@;'; put 'put ''NGRcdTUwNTAiLDQsIlx1NTA1Nlx1NTA1N1x1NTA1OFx1NTA1OVx1NTA1Ylx1NTA1ZCIsNywiXHU1MDY2Iiw1LCJcdTUwNmQiLDgsIlx1NTA3OFx1NTA3OVx1NTA3YVx1NTA3Y1x1NTA3ZFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4''@;'; put 'put ''Y1x1NTA4ZSIsMjAsIlx1NTBhNFx1NTBhNlx1NTBhYVx1NTBhYlx1NTBhZCIsNCwiXHU1MGIzIiw2LCJcdTUwYmMiXSxbIjgzNDAiLCJcdTUwYmQiLDE3LCJcdTUwZDAiLDUsIlx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYiIsMTAsIlx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBm''@;'; put 'put ''MFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNiIsNCwiXHU1MGZjIiw5LCJcdTUxMDgiXSxbIjgzODAiLCJcdTUxMDlcdTUxMGFcdTUxMGMiLDUsIlx1NTExMyIsMTMsIlx1NTEyMiIsMjgsIlx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1''@;'; put 'put ''N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZCIsNCwiXHU1MTYzXHU1MTY0XHU1MTY2XHU1MTY3XHU1MTY5XHU1MTZhXHU1MTZmXHU1MTcyXHU1MTdhXHU1MTdlXHU1MTdmXHU1MTgzXHU1MTg0XHU1MTg2XHU1MTg3XHU1MThhXHU1MThiXHU1MThlXHU1MThmXHU1MTkwXHU1MTkxXHU1MTkzXHU1''@;'; put 'put ''MTk0XHU1MTk4XHU1MTlhXHU1MTlkXHU1MTllXHU1MTlmXHU1MWExXHU1MWEzXHU1MWE2Iiw0LCJcdTUxYWRcdTUxYWVcdTUxYjRcdTUxYjhcdTUxYjlcdTUxYmFcdTUxYmVcdTUxYmZcdTUxYzFcdTUxYzJcdTUxYzNcdTUxYzVcdTUxYzhcdTUxY2FcdTUxY2RcdTUxY2VcdTUxZDBcdTUxZDIi''@;'; put 'put ''LDVdLFsiODQ0MCIsIlx1NTFkOFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNSIsNSwiXHU1MWVjXHU1MWVlXHU1MWYxXHU1MWYyXHU1MWY0XHU1MWY3XHU1MWZlXHU1MjA0XHU1MjA1XHU1MjA5XHU1MjBiXHU1MjBjXHU1MjBmXHU1MjEwXHU1MjEzXHU1''@;'; put 'put ''MjE0XHU1MjE1XHU1MjFjXHU1MjFlXHU1MjFmXHU1MjIxXHU1MjIyXHU1MjIzXHU1MjI1XHU1MjI2XHU1MjI3XHU1MjJhXHU1MjJjXHU1MjJmXHU1MjMxXHU1MjMyXHU1MjM0XHU1MjM1XHU1MjNjXHU1MjNlXHU1MjQ0Iiw1LCJcdTUyNGJcdTUyNGVcdTUyNGZcdTUyNTJcdTUyNTNcdTUyNTVc''@;'; put 'put ''dTUyNTdcdTUyNTgiXSxbIjg0ODAiLCJcdTUyNTlcdTUyNWFcdTUyNWJcdTUyNWRcdTUyNWZcdTUyNjBcdTUyNjJcdTUyNjNcdTUyNjRcdTUyNjZcdTUyNjhcdTUyNmJcdTUyNmNcdTUyNmRcdTUyNmVcdTUyNzBcdTUyNzFcdTUyNzMiLDksIlx1NTI3ZVx1NTI4MFx1NTI4MyIsNCwiXHU1Mjg5''@;'; put 'put ''Iiw2LCJcdTUyOTFcdTUyOTJcdTUyOTQiLDYsIlx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNCIsOSwiXHU1MmMwXHU1MmMxXHU1MmMyXHU1MmM0XHU1MmM1XHU1MmM2XHU1MmM4XHU1MmNhXHU1MmNjXHU1MmNkXHU1MmNlXHU1MmNmXHU1MmQx''@;'; put 'put ''XHU1MmQzXHU1MmQ0XHU1MmQ1XHU1MmQ3XHU1MmQ5Iiw1LCJcdTUyZTBcdTUyZTFcdTUyZTJcdTUyZTNcdTUyZTUiLDEwLCJcdTUyZjEiLDcsIlx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZSJdLFsi''@;'; put 'put ''ODU0MCIsIlx1NTMxMVx1NTMxMlx1NTMxM1x1NTMxNFx1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMyZiIsOSwiXHU1MzNjXHU1MzNkXHU1MzQwXHU1MzQyXHU1MzQ0XHU1MzQ2XHU1''@;'; put 'put ''MzRiXHU1MzRjXHU1MzRkXHU1MzUwXHU1MzU0XHU1MzU4XHU1MzU5XHU1MzViXHU1MzVkXHU1MzY1XHU1MzY4XHU1MzZhXHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc2XHU1Mzc5XHU1MzdiXHU1MzdjXHU1MzdkXHU1MzdlXHU1MzgwXHU1MzgxXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhhXHU1Mzhl''@;'; put 'put ''XHU1MzhmIl0sWyI4NTgwIiwiXHU1MzkwIiw0LCJcdTUzOTZcdTUzOTdcdTUzOTlcdTUzOWJcdTUzOWNcdTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUzYWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWYiLDYsIlx1NTNiN1x1NTNiOFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNi''@;'; put 'put ''ZVx1NTNjMFx1NTNjMyIsNCwiXHU1M2NlXHU1M2NmXHU1M2QwXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RjXHU1M2RkXHU1M2RlXHU1M2UxXHU1M2UyXHU1M2U3XHU1M2Y0XHU1M2ZhXHU1M2ZlXHU1M2ZmXHU1NDAwXHU1NDAyXHU1NDA1XHU1NDA3XHU1NDBiXHU1NDE0XHU1NDE4XHU1''@;'; put 'put ''NDE5XHU1NDFhXHU1NDFjXHU1NDIyXHU1NDI0XHU1NDI1XHU1NDJhXHU1NDMwXHU1NDMzXHU1NDM2XHU1NDM3XHU1NDNhXHU1NDNkXHU1NDNmXHU1NDQxXHU1NDQyXHU1NDQ0XHU1NDQ1XHU1NDQ3XHU1NDQ5XHU1NDRjXHU1NDRkXHU1NDRlXHU1NDRmXHU1NDUxXHU1NDVhXHU1NDVkIiw0LCJc''@;'; put 'put ''dTU0NjNcdTU0NjVcdTU0NjdcdTU0NjkiLDcsIlx1NTQ3NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1NTRhMSJdLFsi''@;'; put 'put ''ODY0MCIsIlx1NTRhMlx1NTRhNVx1NTRhZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMCIsNCwiXHU1NGViXHU1NGVjXHU1NGVmXHU1NGYwXHU1NGYxXHU1''@;'; put 'put ''NGY0Iiw1LCJcdTU0ZmJcdTU0ZmVcdTU1MDBcdTU1MDJcdTU1MDNcdTU1MDRcdTU1MDVcdTU1MDhcdTU1MGEiLDQsIlx1NTUxMlx1NTUxM1x1NTUxNSIsNSwiXHU1NTFjXHU1NTFkXHU1NTFlXHU1NTFmXHU1NTIxXHU1NTI1XHU1NTI2Il0sWyI4NjgwIiwiXHU1NTI4XHU1NTI5XHU1NTJiXHU1''@;'; put 'put ''NTJkXHU1NTMyXHU1NTM0XHU1NTM1XHU1NTM2XHU1NTM4XHU1NTM5XHU1NTNhXHU1NTNiXHU1NTNkXHU1NTQwXHU1NTQyXHU1NTQ1XHU1NTQ3XHU1NTQ4XHU1NTRiIiw0LCJcdTU1NTFcdTU1NTJcdTU1NTNcdTU1NTRcdTU1NTciLDQsIlx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1''@;'; put 'put ''NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2ZiIsNSwiXHU1NTc5XHU1NTdhXHU1NTdkXHU1NTdmXHU1NTg1XHU1NTg2XHU1NThjXHU1NThkXHU1NThlXHU1NTkwXHU1NTkyXHU1NTkzXHU1NTk1XHU1NTk2XHU1NTk3XHU1NTlhXHU1NTliXHU1NTllXHU1NWEwIiw2LCJcdTU1YTgiLDgsIlx1''@;'; put 'put ''NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1NTViY1x1NTViZiIsNCwiXHU1NWM2XHU1NWM3XHU1NWM4XHU1NWNhXHU1NWNiXHU1NWNlXHU1NWNmXHU1NWQwXHU1NWQ1XHU1NWQ3Iiw0LCJcdTU1ZGVcdTU1ZTBcdTU1ZTJcdTU1ZTdcdTU1ZTlcdTU1ZWRcdTU1ZWVcdTU1ZjBcdTU1ZjFc''@;'; put 'put ''dTU1ZjRcdTU1ZjZcdTU1ZjgiLDQsIlx1NTVmZlx1NTYwMlx1NTYwM1x1NTYwNFx1NTYwNSJdLFsiODc0MCIsIlx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMCIsNywiXHU1NjE5XHU1NjFhXHU1NjFjXHU1NjFkXHU1NjIwXHU1NjIxXHU1NjIyXHU1NjI1XHU1NjI2XHU1NjI4''@;'; put 'put ''XHU1NjI5XHU1NjJhXHU1NjJiXHU1NjJlXHU1NjJmXHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM4XHU1NjNhXHU1NjNjXHU1NjNkXHU1NjNlXHU1NjQwIiwxMSwiXHU1NjRmIiw0LCJcdTU2NTVcdTU2NTZcdTU2NWFcdTU2NWJcdTU2NWQiLDRdLFsiODc4MCIsIlx1NTY2M1x1NTY2NVx1''@;'; put 'put ''NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZCIsNywiXHU1Njg3Iiw2LCJcdTU2OTBcdTU2OTFcdTU2OTJcdTU2OTQiLDE0LCJcdTU2YTQiLDEwLCJcdTU2YjAiLDYsIlx1NTZiOFx1''@;'; put 'put ''NTZiOVx1NTZiYVx1NTZiYlx1NTZiZCIsMTIsIlx1NTZjYiIsOCwiXHU1NmQ1XHU1NmQ2XHU1NmQ4XHU1NmQ5XHU1NmRjXHU1NmUzXHU1NmU1Iiw1LCJcdTU2ZWNcdTU2ZWVcdTU2ZWZcdTU2ZjJcdTU2ZjNcdTU2ZjZcdTU2ZjdcdTU2ZjhcdTU2ZmJcdTU2ZmNcdTU3MDBcdTU3MDFcdTU3MDJc''@;'; put 'put ''dTU3MDVcdTU3MDdcdTU3MGIiLDZdLFsiODg0MCIsIlx1NTcxMiIsOSwiXHU1NzFkXHU1NzFlXHU1NzIwXHU1NzIxXHU1NzIyXHU1NzI0XHU1NzI1XHU1NzI2XHU1NzI3XHU1NzJiXHU1NzMxXHU1NzMyXHU1NzM0Iiw0LCJcdTU3M2NcdTU3M2RcdTU3M2ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3''@;'; put 'put ''NDVcdTU3NDZcdTU3NDhcdTU3NDlcdTU3NGJcdTU3NTIiLDQsIlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2M1x1NTc2NVx1NTc2N1x1NTc2Y1x1NTc2ZVx1NTc3MFx1NTc3MVx1NTc3Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MCJdLFsiODg4''@;'; put 'put ''MCIsIlx1NTc4MVx1NTc4N1x1NTc4OFx1NTc4OVx1NTc4YVx1NTc4ZCIsNCwiXHU1Nzk0Iiw2LCJcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTVcdTU3YThcdTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBcdTU3YjFcdTU3YjNcdTU3YjVcdTU3YjZcdTU3YjdcdTU3YjkiLDgsIlx1NTdjNCIs''@;'; put 'put ''NiwiXHU1N2NjXHU1N2NkXHU1N2QwXHU1N2QxXHU1N2QzXHU1N2Q2XHU1N2Q3XHU1N2RiXHU1N2RjXHU1N2RlXHU1N2UxXHU1N2UyXHU1N2UzXHU1N2U1Iiw3LCJcdTU3ZWVcdTU3ZjBcdTU3ZjFcdTU3ZjJcdTU3ZjNcdTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZc''@;'; put 'put ''dTU4MDFcdTU4MDNcdTU4MDRcdTU4MDVcdTU4MDhcdTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4MThcdTU4MWFcdTU4MWJcdTU4MWNcdTU4MWRcdTU4MWZcdTU4MjJcdTU4MjNcdTU4MjUiLDQsIlx1NTgyYiIsNCwi''@;'; put 'put ''XHU1ODMxXHU1ODMyXHU1ODMzXHU1ODM0XHU1ODM2Iiw3XSxbIjg5NDAiLCJcdTU4M2UiLDUsIlx1NTg0NSIsNiwiXHU1ODRlXHU1ODRmXHU1ODUwXHU1ODUyXHU1ODUzXHU1ODU1XHU1ODU2XHU1ODU3XHU1ODU5Iiw0LCJcdTU4NWYiLDUsIlx1NTg2NiIsNCwiXHU1ODZkIiwxNiwiXHU1ODdm''@;'; put 'put ''XHU1ODgyXHU1ODg0XHU1ODg2XHU1ODg3XHU1ODg4XHU1ODhhXHU1ODhiXHU1ODhjIl0sWyI4OTgwIiwiXHU1ODhkIiw0LCJcdTU4OTQiLDQsIlx1NTg5Ylx1NTg5Y1x1NTg5ZFx1NThhMCIsNywiXHU1OGFhIiwxNywiXHU1OGJkXHU1OGJlXHU1OGJmXHU1OGMwXHU1OGMyXHU1OGMzXHU1OGM0''@;'; put 'put ''XHU1OGM2IiwxMCwiXHU1OGQyXHU1OGQzXHU1OGQ0XHU1OGQ2IiwxMywiXHU1OGU1Iiw1LCJcdTU4ZWRcdTU4ZWZcdTU4ZjFcdTU4ZjJcdTU4ZjRcdTU4ZjVcdTU4ZjdcdTU4ZjhcdTU4ZmEiLDcsIlx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOCIsNCwiXHU1OTBlXHU1OTEwXHU1OTExXHU1OTEy''@;'; put 'put ''XHU1OTEzXHU1OTE3XHU1OTE4XHU1OTFiXHU1OTFkXHU1OTFlXHU1OTIwXHU1OTIxXHU1OTIyXHU1OTIzXHU1OTI2XHU1OTI4XHU1OTJjXHU1OTMwXHU1OTMyXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNiIl0sWyI4YTQwIiwiXHU1OTNkXHU1OTNlXHU1OTNmXHU1OTQwXHU1OTQzXHU1OTQ1XHU1''@;'; put 'put ''OTQ2XHU1OTRhXHU1OTRjXHU1OTRkXHU1OTUwXHU1OTUyXHU1OTUzXHU1OTU5XHU1OTViIiw0LCJcdTU5NjFcdTU5NjNcdTU5NjRcdTU5NjYiLDEyLCJcdTU5NzVcdTU5NzdcdTU5N2FcdTU5N2JcdTU5N2NcdTU5N2VcdTU5N2ZcdTU5ODBcdTU5ODVcdTU5ODlcdTU5OGJcdTU5OGNcdTU5OGVc''@;'; put 'put ''dTU5OGZcdTU5OTBcdTU5OTFcdTU5OTRcdTU5OTVcdTU5OThcdTU5OWFcdTU5OWJcdTU5OWNcdTU5OWRcdTU5OWZcdTU5YTBcdTU5YTFcdTU5YTJcdTU5YTYiXSxbIjhhODAiLCJcdTU5YTdcdTU5YWNcdTU5YWRcdTU5YjBcdTU5YjFcdTU5YjMiLDUsIlx1NTliYVx1NTliY1x1NTliZFx1NTli''@;'; put 'put ''ZiIsNiwiXHU1OWM3XHU1OWM4XHU1OWM5XHU1OWNjXHU1OWNkXHU1OWNlXHU1OWNmXHU1OWQ1XHU1OWQ2XHU1OWQ5XHU1OWRiXHU1OWRlIiw0LCJcdTU5ZTRcdTU5ZTZcdTU5ZTdcdTU5ZTlcdTU5ZWFcdTU5ZWJcdTU5ZWQiLDExLCJcdTU5ZmFcdTU5ZmNcdTU5ZmRcdTU5ZmVcdTVhMDBcdTVh''@;'; put 'put ''MDJcdTVhMGFcdTVhMGJcdTVhMGRcdTVhMGVcdTVhMGZcdTVhMTBcdTVhMTJcdTVhMTRcdTVhMTVcdTVhMTZcdTVhMTdcdTVhMTlcdTVhMWFcdTVhMWJcdTVhMWRcdTVhMWVcdTVhMjFcdTVhMjJcdTVhMjRcdTVhMjZcdTVhMjdcdTVhMjhcdTVhMmEiLDYsIlx1NWEzM1x1NWEzNVx1NWEzNyIs''@;'; put 'put ''NCwiXHU1YTNkXHU1YTNlXHU1YTNmXHU1YTQxIiw0LCJcdTVhNDdcdTVhNDhcdTVhNGIiLDksIlx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1YiIsNV0sWyI4YjQwIiwiXHU1YTYxXHU1YTYzXHU1YTY0XHU1YTY1XHU1YTY2XHU1YTY4XHU1YTY5XHU1YTZiIiw4LCJcdTVhNzhcdTVhNzlc''@;'; put 'put ''dTVhN2JcdTVhN2NcdTVhN2RcdTVhN2VcdTVhODAiLDE3LCJcdTVhOTMiLDYsIlx1NWE5YyIsMTMsIlx1NWFhYlx1NWFhYyJdLFsiOGI4MCIsIlx1NWFhZCIsNCwiXHU1YWI0XHU1YWI2XHU1YWI3XHU1YWI5Iiw0LCJcdTVhYmZcdTVhYzBcdTVhYzMiLDUsIlx1NWFjYVx1NWFjYlx1NWFjZCIs''@;'; put 'put ''NCwiXHU1YWQzXHU1YWQ1XHU1YWQ3XHU1YWQ5XHU1YWRhXHU1YWRiXHU1YWRkXHU1YWRlXHU1YWRmXHU1YWUyXHU1YWU0XHU1YWU1XHU1YWU3XHU1YWU4XHU1YWVhXHU1YWVjIiw0LCJcdTVhZjIiLDIyLCJcdTViMGEiLDExLCJcdTViMTgiLDI1LCJcdTViMzNcdTViMzVcdTViMzZcdTViMzgi''@;'; put 'put ''LDcsIlx1NWI0MSIsNl0sWyI4YzQwIiwiXHU1YjQ4Iiw3LCJcdTViNTJcdTViNTZcdTViNWVcdTViNjBcdTViNjFcdTViNjdcdTViNjhcdTViNmJcdTViNmRcdTViNmVcdTViNmZcdTViNzJcdTViNzRcdTViNzZcdTViNzdcdTViNzhcdTViNzlcdTViN2JcdTViN2NcdTViN2VcdTViN2ZcdTVi''@;'; put 'put ''ODJcdTViODZcdTViOGFcdTViOGRcdTViOGVcdTViOTBcdTViOTFcdTViOTJcdTViOTRcdTViOTZcdTViOWZcdTViYTdcdTViYThcdTViYTlcdTViYWNcdTViYWRcdTViYWVcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFcdTViYmJcdTViYmNcdTViYzBcdTViYzFcdTViYzNcdTViYzhc''@;'; put 'put ''dTViYzlcdTViY2FcdTViY2JcdTViY2RcdTViY2VcdTViY2YiXSxbIjhjODAiLCJcdTViZDFcdTViZDQiLDgsIlx1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJlN1x1NWJlOSIsNCwiXHU1YmVmXHU1YmYxIiw2LCJcdTViZmRcdTViZmVcdTVjMDBcdTVjMDJcdTVjMDNcdTVjMDVcdTVjMDdc''@;'; put 'put ''dTVjMDhcdTVjMGJcdTVjMGNcdTVjMGRcdTVjMGVcdTVjMTBcdTVjMTJcdTVjMTNcdTVjMTdcdTVjMTlcdTVjMWJcdTVjMWVcdTVjMWZcdTVjMjBcdTVjMjFcdTVjMjNcdTVjMjZcdTVjMjhcdTVjMjlcdTVjMmFcdTVjMmJcdTVjMmRcdTVjMmVcdTVjMmZcdTVjMzBcdTVjMzJcdTVjMzNcdTVj''@;'; put 'put ''MzVcdTVjMzZcdTVjMzdcdTVjNDNcdTVjNDRcdTVjNDZcdTVjNDdcdTVjNGNcdTVjNGRcdTVjNTJcdTVjNTNcdTVjNTRcdTVjNTZcdTVjNTdcdTVjNThcdTVjNWFcdTVjNWJcdTVjNWNcdTVjNWRcdTVjNWZcdTVjNjJcdTVjNjRcdTVjNjciLDYsIlx1NWM3MFx1NWM3MiIsNiwiXHU1YzdiXHU1''@;'; put 'put ''YzdjXHU1YzdkXHU1YzdlXHU1YzgwXHU1YzgzIiw0LCJcdTVjODlcdTVjOGFcdTVjOGJcdTVjOGVcdTVjOGZcdTVjOTJcdTVjOTNcdTVjOTVcdTVjOWQiLDQsIlx1NWNhNCIsNF0sWyI4ZDQwIiwiXHU1Y2FhXHU1Y2FlXHU1Y2FmXHU1Y2IwXHU1Y2IyXHU1Y2I0XHU1Y2I2XHU1Y2I5XHU1Y2Jh''@;'; put 'put ''XHU1Y2JiXHU1Y2JjXHU1Y2JlXHU1Y2MwXHU1Y2MyXHU1Y2MzXHU1Y2M1Iiw1LCJcdTVjY2MiLDUsIlx1NWNkMyIsNSwiXHU1Y2RhIiw2LCJcdTVjZTJcdTVjZTNcdTVjZTdcdTVjZTlcdTVjZWJcdTVjZWNcdTVjZWVcdTVjZWZcdTVjZjEiLDksIlx1NWNmYyIsNF0sWyI4ZDgwIiwiXHU1ZDAx''@;'; put 'put ''XHU1ZDA0XHU1ZDA1XHU1ZDA4Iiw1LCJcdTVkMGYiLDQsIlx1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZiIsNCwiXHU1ZDI1XHU1ZDI4XHU1ZDJhXHU1ZDJiXHU1ZDJjXHU1ZDJmIiw0LCJcdTVkMzUiLDcsIlx1NWQzZiIsNywiXHU1ZDQ4XHU1ZDQ5XHU1''@;'; put 'put ''ZDRkIiwxMCwiXHU1ZDU5XHU1ZDVhXHU1ZDVjXHU1ZDVlIiwxMCwiXHU1ZDZhXHU1ZDZkXHU1ZDZlXHU1ZDcwXHU1ZDcxXHU1ZDcyXHU1ZDczXHU1ZDc1IiwxMiwiXHU1ZDgzIiwyMSwiXHU1ZDlhXHU1ZDliXHU1ZDljXHU1ZDllXHU1ZDlmXHU1ZGEwIl0sWyI4ZTQwIiwiXHU1ZGExIiwyMSwi''@;'; put 'put ''XHU1ZGI4IiwxMiwiXHU1ZGM2Iiw2LCJcdTVkY2UiLDEyLCJcdTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWQiXSxbIjhlODAiLCJcdTVkZjBcdTVkZjVcdTVkZjZcdTVkZjgiLDQsIlx1NWRmZlx1NWUwMFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUw''@;'; put 'put ''Ylx1NWUwZFx1NWUwZVx1NWUxMlx1NWUxM1x1NWUxN1x1NWUxZSIsNywiXHU1ZTI4Iiw0LCJcdTVlMmZcdTVlMzBcdTVlMzIiLDQsIlx1NWUzOVx1NWUzYVx1NWUzZVx1NWUzZlx1NWU0MFx1NWU0MVx1NWU0M1x1NWU0NiIsNSwiXHU1ZTRkIiw2LCJcdTVlNTYiLDQsIlx1NWU1Y1x1NWU1ZFx1''@;'; put 'put ''NWU1Zlx1NWU2MFx1NWU2MyIsMTQsIlx1NWU3NVx1NWU3N1x1NWU3OVx1NWU3ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1NWU4OFx1NWU4OVx1NWU4Y1x1NWU4ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOCIsNCwiXHU1ZWFl''@;'; put 'put ''Iiw0LCJcdTVlYjRcdTVlYmFcdTVlYmJcdTVlYmNcdTVlYmRcdTVlYmYiLDZdLFsiOGY0MCIsIlx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYiIsNSwiXHU1ZWQ0XHU1ZWQ1XHU1ZWQ3XHU1ZWQ4XHU1ZWQ5XHU1ZWRhXHU1ZWRjIiwxMSwiXHU1ZWU5XHU1ZWViIiw4LCJcdTVlZjVcdTVlZjhcdTVl''@;'; put 'put ''ZjlcdTVlZmJcdTVlZmNcdTVlZmRcdTVmMDVcdTVmMDZcdTVmMDdcdTVmMDlcdTVmMGNcdTVmMGRcdTVmMGVcdTVmMTBcdTVmMTJcdTVmMTRcdTVmMTZcdTVmMTlcdTVmMWFcdTVmMWNcdTVmMWRcdTVmMWVcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjQiXSxbIjhmODAiLCJcdTVmMjhcdTVmMmJc''@;'; put 'put ''dTVmMmNcdTVmMmVcdTVmMzBcdTVmMzIiLDYsIlx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MSIsMTQsIlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3''@;'; put 'put ''Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMiIsNSwiXHU1ZmE5XHU1ZmFiXHU1''@;'; put 'put ''ZmFjXHU1ZmFmIiw1LCJcdTVmYjZcdTVmYjhcdTVmYjlcdTVmYmFcdTVmYmJcdTVmYmUiLDQsIlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZkY1x1NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1''@;'; put 'put ''NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwNyJdLFsiOTA0MCIsIlx1NjAwOFx1NjAwOVx1NjAwYlx1NjAwY1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAy''@;'; put 'put ''Mlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMCIsNCwiXHU2MDM2Iiw0LCJcdTYwM2RcdTYwM2VcdTYwNDBcdTYwNDQiLDYsIlx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2''@;'; put 'put ''MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1NjA3NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MCJdLFsiOTA4MCIsIlx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1''@;'; put 'put ''NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZCIsNywiXHU2MGM3XHU2MGM4XHU2MGM5XHU2MGNjIiw0LCJcdTYwZDJc''@;'; put 'put ''dTYwZDNcdTYwZDRcdTYwZDZcdTYwZDdcdTYwZDlcdTYwZGJcdTYwZGVcdTYwZTEiLDQsIlx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYiIsNCwiXHU2MTAyXHU2MTAzXHU2MTA0XHU2MTA1XHU2MTA3XHU2MTBhXHU2MTBiXHU2MTBjXHU2MTEwIiw0LCJcdTYxMTZc''@;'; put 'put ''dTYxMTdcdTYxMThcdTYxMTlcdTYxMWJcdTYxMWNcdTYxMWRcdTYxMWVcdTYxMjFcdTYxMjJcdTYxMjVcdTYxMjhcdTYxMjlcdTYxMmFcdTYxMmMiLDE4LCJcdTYxNDAiLDZdLFsiOTE0MCIsIlx1NjE0N1x1NjE0OVx1NjE0Ylx1NjE0ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1NjE1NFx1''@;'; put 'put ''NjE1NiIsNiwiXHU2MTVlXHU2MTVmXHU2MTYwXHU2MTYxXHU2MTYzXHU2MTY0XHU2MTY1XHU2MTY2XHU2MTY5Iiw2LCJcdTYxNzFcdTYxNzJcdTYxNzNcdTYxNzRcdTYxNzZcdTYxNzgiLDE4LCJcdTYxOGNcdTYxOGRcdTYxOGYiLDQsIlx1NjE5NSJdLFsiOTE4MCIsIlx1NjE5NiIsNiwiXHU2''@;'; put 'put ''MTllIiw4LCJcdTYxYWFcdTYxYWJcdTYxYWQiLDksIlx1NjFiOCIsNSwiXHU2MWJmXHU2MWMwXHU2MWMxXHU2MWMzIiw0LCJcdTYxYzlcdTYxY2MiLDQsIlx1NjFkM1x1NjFkNSIsMTYsIlx1NjFlNyIsMTMsIlx1NjFmNiIsOCwiXHU2MjAwIiw1LCJcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRc''@;'; put 'put ''dTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBcdTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYyMmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYyMzJcdTYyMzVcdTYyMzZcdTYyMzgiLDQsIlx1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YSJdLFsiOTI0MCIsIlx1NjI0''@;'; put 'put ''Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1NjI1YVx1NjI1YyIsNiwiXHU2MjY0XHU2MjY1XHU2MjY4XHU2MjcxXHU2MjcyXHU2Mjc0XHU2Mjc1XHU2Mjc3XHU2Mjc4XHU2MjdhXHU2MjdiXHU2MjdkXHU2MjgxXHU2MjgyXHU2MjgzXHU2Mjg1XHU2Mjg2XHU2Mjg3XHU2Mjg4XHU2''@;'; put 'put ''MjhiIiw1LCJcdTYyOTRcdTYyOTlcdTYyOWNcdTYyOWRcdTYyOWVcdTYyYTNcdTYyYTZcdTYyYTdcdTYyYTlcdTYyYWFcdTYyYWRcdTYyYWVcdTYyYWZcdTYyYjBcdTYyYjJcdTYyYjNcdTYyYjRcdTYyYjZcdTYyYjdcdTYyYjhcdTYyYmFcdTYyYmVcdTYyYzBcdTYyYzEiXSxbIjkyODAiLCJc''@;'; put 'put ''dTYyYzNcdTYyY2JcdTYyY2ZcdTYyZDFcdTYyZDVcdTYyZGRcdTYyZGVcdTYyZTBcdTYyZTFcdTYyZTRcdTYyZWFcdTYyZWJcdTYyZjBcdTYyZjJcdTYyZjVcdTYyZjhcdTYyZjlcdTYyZmFcdTYyZmJcdTYzMDBcdTYzMDNcdTYzMDRcdTYzMDVcdTYzMDZcdTYzMGFcdTYzMGJcdTYzMGNcdTYz''@;'; put 'put ''MGRcdTYzMGZcdTYzMTBcdTYzMTJcdTYzMTNcdTYzMTRcdTYzMTVcdTYzMTdcdTYzMThcdTYzMTlcdTYzMWNcdTYzMjZcdTYzMjdcdTYzMjlcdTYzMmNcdTYzMmRcdTYzMmVcdTYzMzBcdTYzMzFcdTYzMzMiLDUsIlx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1''@;'; put 'put ''NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1NiIsNywiXHU2MzYwXHU2MzY0XHU2MzY1XHU2MzY2XHU2MzY4XHU2MzZhXHU2MzZiXHU2MzZjXHU2MzZmXHU2MzcwXHU2MzcyXHU2MzczXHU2Mzc0XHU2Mzc1XHU2Mzc4XHU2Mzc5XHU2MzdjXHU2MzdkXHU2Mzdl''@;'; put 'put ''XHU2MzdmXHU2MzgxXHU2MzgzXHU2Mzg0XHU2Mzg1XHU2Mzg2XHU2MzhiXHU2MzhkXHU2MzkxXHU2MzkzXHU2Mzk0XHU2Mzk1XHU2Mzk3XHU2Mzk5Iiw2LCJcdTYzYTFcdTYzYTRcdTYzYTZcdTYzYWJcdTYzYWZcdTYzYjFcdTYzYjJcdTYzYjVcdTYzYjZcdTYzYjlcdTYzYmJcdTYzYmRcdTYz''@;'; put 'put ''YmZcdTYzYzAiXSxbIjkzNDAiLCJcdTYzYzFcdTYzYzJcdTYzYzNcdTYzYzVcdTYzYzdcdTYzYzhcdTYzY2FcdTYzY2JcdTYzY2NcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZDciLDYsIlx1NjNkZlx1NjNlMlx1NjNlNCIsNCwiXHU2M2ViXHU2M2VjXHU2M2VlXHU2M2VmXHU2M2YwXHU2''@;'; put 'put ''M2YxXHU2M2YzXHU2M2Y1XHU2M2Y3XHU2M2Y5XHU2M2ZhXHU2M2ZiXHU2M2ZjXHU2M2ZlXHU2NDAzXHU2NDA0XHU2NDA2Iiw0LCJcdTY0MGRcdTY0MGVcdTY0MTFcdTY0MTJcdTY0MTUiLDUsIlx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNCJdLFsiOTM4MCIsIlx1NjQyNVx1NjQyN1x1''@;'; put 'put ''NjQyOFx1NjQyOVx1NjQyYlx1NjQyZSIsNSwiXHU2NDM1Iiw0LCJcdTY0M2JcdTY0M2NcdTY0M2VcdTY0NDBcdTY0NDJcdTY0NDNcdTY0NDlcdTY0NGIiLDYsIlx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OSIsNCwiXHU2NDVmIiw3LCJcdTY0NjhcdTY0NmFcdTY0NmJcdTY0NmNcdTY0''@;'; put 'put ''NmUiLDksIlx1NjQ3YiIsNiwiXHU2NDgzXHU2NDg2XHU2NDg4Iiw4LCJcdTY0OTNcdTY0OTRcdTY0OTdcdTY0OThcdTY0OWFcdTY0OWJcdTY0OWNcdTY0OWRcdTY0OWYiLDQsIlx1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRi''@;'; put 'put ''NFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNiIsNiwiXHU2NGNmXHU2NGQxXHU2NGQzXHU2NGQ0XHU2NGQ1XHU2NGQ2XHU2NGQ5XHU2NGRhIl0sWyI5NDQwIiwiXHU2NGRiXHU2NGRjXHU2NGRkXHU2NGRmXHU2NGUwXHU2NGUxXHU2''@;'; put 'put ''NGUzXHU2NGU1XHU2NGU3IiwyNCwiXHU2NTAxIiw3LCJcdTY1MGEiLDcsIlx1NjUxMyIsNCwiXHU2NTE5Iiw4XSxbIjk0ODAiLCJcdTY1MjJcdTY1MjNcdTY1MjRcdTY1MjYiLDQsIlx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUzM1x1NjUzN1x1NjUzYVx1NjUzY1x1NjUzZFx1''@;'; put 'put ''NjU0MCIsNCwiXHU2NTQ2XHU2NTQ3XHU2NTRhXHU2NTRiXHU2NTRkXHU2NTRlXHU2NTUwXHU2NTUyXHU2NTUzXHU2NTU0XHU2NTU3XHU2NTU4XHU2NTVhXHU2NTVjXHU2NTVmXHU2NTYwXHU2NTYxXHU2NTY0XHU2NTY1XHU2NTY3XHU2NTY4XHU2NTY5XHU2NTZhXHU2NTZkXHU2NTZlXHU2NTZm''@;'; put 'put ''XHU2NTcxXHU2NTczXHU2NTc1XHU2NTc2XHU2NTc4IiwxNCwiXHU2NTg4XHU2NTg5XHU2NThhXHU2NThkXHU2NThlXHU2NThmXHU2NTkyXHU2NTk0XHU2NTk1XHU2NTk2XHU2NTk4XHU2NTlhXHU2NTlkXHU2NTllXHU2NWEwXHU2NWEyXHU2NWEzXHU2NWE2XHU2NWE4XHU2NWFhXHU2NWFjXHU2''@;'; put 'put ''NWFlXHU2NWIxIiw3LCJcdTY1YmFcdTY1YmJcdTY1YmVcdTY1YmZcdTY1YzBcdTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1Y2RcdTY1ZDBcdTY1ZDFcdTY1ZDNcdTY1ZDRcdTY1ZDVcdTY1ZDgiLDcsIlx1NjVlMVx1NjVlM1x1NjVlNFx1NjVlYVx1NjVlYiJdLFsiOTU0MCIsIlx1''@;'; put 'put ''NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1NjVmOVx1NjVmYiIsNCwiXHU2NjAxXHU2NjA0XHU2NjA1XHU2NjA3XHU2NjA4XHU2NjA5XHU2NjBiXHU2NjBkXHU2NjEwXHU2NjExXHU2NjEyXHU2NjE2XHU2NjE3XHU2NjE4XHU2NjFhXHU2NjFiXHU2NjFjXHU2NjFlXHU2NjIxXHU2NjIy''@;'; put 'put ''XHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJhXHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMyXHU2NjMzXHU2NjM3Iiw0LCJcdTY2M2RcdTY2M2ZcdTY2NDBcdTY2NDJcdTY2NDQiLDYsIlx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OCJdLFsiOTU4MCIsIlx1NjY1OVx1NjY1''@;'; put 'put ''Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OSIsNCwiXHU2NjcxXHU2NjcyXHU2NjczXHU2Njc1XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjdjXHU2NjdkXHU2NjdmXHU2NjgwXHU2NjgxXHU2NjgzXHU2Njg1XHU2Njg2XHU2Njg4XHU2Njg5XHU2''@;'; put 'put ''NjhhXHU2NjhiXHU2NjhkXHU2NjhlXHU2NjhmXHU2NjkwXHU2NjkyXHU2NjkzXHU2Njk0XHU2Njk1XHU2Njk4Iiw0LCJcdTY2OWUiLDgsIlx1NjZhOSIsNCwiXHU2NmFmIiw0LCJcdTY2YjVcdTY2YjZcdTY2YjdcdTY2YjhcdTY2YmFcdTY2YmJcdTY2YmNcdTY2YmRcdTY2YmYiLDI1LCJcdTY2''@;'; put 'put ''ZGFcdTY2ZGUiLDcsIlx1NjZlN1x1NjZlOFx1NjZlYSIsNSwiXHU2NmYxXHU2NmY1XHU2NmY2XHU2NmY4XHU2NmZhXHU2NmZiXHU2NmZkXHU2NzAxXHU2NzAyXHU2NzAzIl0sWyI5NjQwIiwiXHU2NzA0XHU2NzA1XHU2NzA2XHU2NzA3XHU2NzBjXHU2NzBlXHU2NzBmXHU2NzExXHU2NzEyXHU2''@;'; put 'put ''NzEzXHU2NzE2XHU2NzE4XHU2NzE5XHU2NzFhXHU2NzFjXHU2NzFlXHU2NzIwIiw1LCJcdTY3MjdcdTY3MjlcdTY3MmVcdTY3MzBcdTY3MzJcdTY3MzNcdTY3MzZcdTY3MzdcdTY3MzhcdTY3MzlcdTY3M2JcdTY3M2NcdTY3M2VcdTY3M2ZcdTY3NDFcdTY3NDRcdTY3NDVcdTY3NDdcdTY3NGFc''@;'; put 'put ''dTY3NGJcdTY3NGRcdTY3NTJcdTY3NTRcdTY3NTVcdTY3NTciLDQsIlx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3NiJdLFsiOTY4MCIsIlx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4''@;'; put 'put ''Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1''@;'; put 'put ''NjdiOSIsNywiXHU2N2MyXHU2N2M1Iiw5LCJcdTY3ZDVcdTY3ZDZcdTY3ZDdcdTY3ZGJcdTY3ZGZcdTY3ZTFcdTY3ZTNcdTY3ZTRcdTY3ZTZcdTY3ZTdcdTY3ZThcdTY3ZWFcdTY3ZWJcdTY3ZWRcdTY3ZWVcdTY3ZjJcdTY3ZjUiLDcsIlx1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1''@;'; put 'put ''NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOCIsNCwiXHU2ODFlXHU2ODFmXHU2ODIwXHU2ODIyIiw2LCJcdTY4MmIiLDYsIlx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1Mlx1Njg1NiIsNV0sWyI5''@;'; put 'put ''NzQwIiwiXHU2ODVjXHU2ODVkXHU2ODVlXHU2ODVmXHU2ODZhXHU2ODZjIiw3LCJcdTY4NzVcdTY4NzgiLDgsIlx1Njg4Mlx1Njg4NFx1Njg4NyIsNywiXHU2ODkwXHU2ODkxXHU2ODkyXHU2ODk0XHU2ODk1XHU2ODk2XHU2ODk4Iiw5LCJcdTY4YTNcdTY4YTRcdTY4YTVcdTY4YTlcdTY4YWFc''@;'; put 'put ''dTY4YWJcdTY4YWNcdTY4YWVcdTY4YjFcdTY4YjJcdTY4YjRcdTY4YjZcdTY4YjdcdTY4YjgiXSxbIjk3ODAiLCJcdTY4YjkiLDYsIlx1NjhjMVx1NjhjMyIsNSwiXHU2OGNhXHU2OGNjXHU2OGNlXHU2OGNmXHU2OGQwXHU2OGQxXHU2OGQzXHU2OGQ0XHU2OGQ2XHU2OGQ3XHU2OGQ5XHU2OGRi''@;'; put 'put ''Iiw0LCJcdTY4ZTFcdTY4ZTJcdTY4ZTQiLDksIlx1NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1NjhmNlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1NjhmZlx1NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNiIsNCwiXHU2OTBjXHU2OTBmXHU2OTExXHU2OTEzIiwxMSwiXHU2OTIx''@;'; put 'put ''XHU2OTIyXHU2OTIzXHU2OTI1Iiw3LCJcdTY5MmVcdTY5MmZcdTY5MzFcdTY5MzJcdTY5MzNcdTY5MzVcdTY5MzZcdTY5MzdcdTY5MzhcdTY5M2FcdTY5M2JcdTY5M2NcdTY5M2VcdTY5NDBcdTY5NDFcdTY5NDMiLDE2LCJcdTY5NTVcdTY5NTZcdTY5NThcdTY5NTlcdTY5NWJcdTY5NWNcdTY5''@;'; put 'put ''NWYiXSxbIjk4NDAiLCJcdTY5NjFcdTY5NjJcdTY5NjRcdTY5NjVcdTY5NjdcdTY5NjhcdTY5NjlcdTY5NmFcdTY5NmNcdTY5NmRcdTY5NmZcdTY5NzBcdTY5NzIiLDQsIlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1''@;'; put 'put ''Njk4ZSIsNSwiXHU2OTk2XHU2OTk3XHU2OTk5XHU2OTlhXHU2OTlkIiw5LCJcdTY5YTlcdTY5YWFcdTY5YWNcdTY5YWVcdTY5YWZcdTY5YjBcdTY5YjJcdTY5YjNcdTY5YjVcdTY5YjZcdTY5YjhcdTY5YjlcdTY5YmFcdTY5YmNcdTY5YmQiXSxbIjk4ODAiLCJcdTY5YmVcdTY5YmZcdTY5YzBc''@;'; put 'put ''dTY5YzIiLDcsIlx1NjljYlx1NjljZFx1NjljZlx1NjlkMVx1NjlkMlx1NjlkM1x1NjlkNSIsNSwiXHU2OWRjXHU2OWRkXHU2OWRlXHU2OWUxIiwxMSwiXHU2OWVlXHU2OWVmXHU2OWYwXHU2OWYxXHU2OWYzIiw5LCJcdTY5ZmVcdTZhMDAiLDksIlx1NmEwYiIsMTEsIlx1NmExOSIsNSwiXHU2''@;'; put 'put ''YTIwXHU2YTIyIiw1LCJcdTZhMjlcdTZhMmJcdTZhMmNcdTZhMmRcdTZhMmVcdTZhMzBcdTZhMzJcdTZhMzNcdTZhMzRcdTZhMzYiLDYsIlx1NmEzZiIsNCwiXHU2YTQ1XHU2YTQ2XHU2YTQ4Iiw3LCJcdTZhNTEiLDYsIlx1NmE1YSJdLFsiOTk0MCIsIlx1NmE1YyIsNCwiXHU2YTYyXHU2YTYz''@;'; put 'put ''XHU2YTY0XHU2YTY2IiwxMCwiXHU2YTcyIiw2LCJcdTZhN2FcdTZhN2JcdTZhN2RcdTZhN2VcdTZhN2ZcdTZhODFcdTZhODJcdTZhODNcdTZhODUiLDgsIlx1NmE4Zlx1NmE5MiIsNCwiXHU2YTk4Iiw3LCJcdTZhYTEiLDVdLFsiOTk4MCIsIlx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZCIsMTE0''@;'; put 'put ''LCJcdTZiMjVcdTZiMjZcdTZiMjgiLDZdLFsiOWE0MCIsIlx1NmIyZlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIzY1x1NmIzZFx1NmIzZlx1NmI0MFx1NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0OFx1NmI0YVx1NmI0Ylx1NmI0ZCIsMTEs''@;'; put 'put ''Ilx1NmI1YSIsNywiXHU2YjY4XHU2YjY5XHU2YjZiIiwxMywiXHU2YjdhXHU2YjdkXHU2YjdlXHU2YjdmXHU2YjgwXHU2Yjg1XHU2Yjg4Il0sWyI5YTgwIiwiXHU2YjhjXHU2YjhlXHU2YjhmXHU2YjkwXHU2YjkxXHU2Yjk0XHU2Yjk1XHU2Yjk3XHU2Yjk4XHU2Yjk5XHU2YjljIiw0LCJcdTZi''@;'; put 'put ''YTIiLDcsIlx1NmJhYiIsNywiXHU2YmI2XHU2YmI4Iiw2LCJcdTZiYzBcdTZiYzNcdTZiYzRcdTZiYzYiLDQsIlx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJkOFx1NmJkYVx1NmJkYyIsNCwiXHU2YmUyIiw3LCJcdTZiZWNcdTZiZWRcdTZiZWVcdTZiZjBcdTZiZjFcdTZiZjJcdTZiZjRc''@;'; put 'put ''dTZiZjZcdTZiZjdcdTZiZjhcdTZiZmFcdTZiZmJcdTZiZmNcdTZiZmUiLDYsIlx1NmMwOCIsNCwiXHU2YzBlXHU2YzEyXHU2YzE3XHU2YzFjXHU2YzFkXHU2YzFlXHU2YzIwXHU2YzIzXHU2YzI1XHU2YzJiXHU2YzJjXHU2YzJkXHU2YzMxXHU2YzMzXHU2YzM2XHU2YzM3XHU2YzM5XHU2YzNh''@;'; put 'put ''XHU2YzNiXHU2YzNjXHU2YzNlXHU2YzNmXHU2YzQzXHU2YzQ0XHU2YzQ1XHU2YzQ4XHU2YzRiIiw0LCJcdTZjNTFcdTZjNTJcdTZjNTNcdTZjNTZcdTZjNTgiXSxbIjliNDAiLCJcdTZjNTlcdTZjNWFcdTZjNjJcdTZjNjNcdTZjNjVcdTZjNjZcdTZjNjdcdTZjNmIiLDQsIlx1NmM3MVx1NmM3''@;'; put 'put ''M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5ZFx1NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1''@;'; put 'put ''NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOCJdLFsiOWI4MCIsIlx1NmNkOVx1NmNkYVx1NmNkY1x1NmNk''@;'; put 'put ''ZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQxM1x1NmQxNFx1NmQxNVx1NmQxNlx1''@;'; put 'put ''NmQxOFx1NmQxY1x1NmQxZFx1NmQxZiIsNSwiXHU2ZDI2XHU2ZDI4XHU2ZDI5XHU2ZDJjXHU2ZDJkXHU2ZDJmXHU2ZDMwXHU2ZDM0XHU2ZDM2XHU2ZDM3XHU2ZDM4XHU2ZDNhXHU2ZDNmXHU2ZDQwXHU2ZDQyXHU2ZDQ0XHU2ZDQ5XHU2ZDRjXHU2ZDUwXHU2ZDU1XHU2ZDU2XHU2ZDU3XHU2ZDU4''@;'; put 'put ''XHU2ZDViXHU2ZDVkXHU2ZDVmXHU2ZDYxXHU2ZDYyXHU2ZDY0XHU2ZDY1XHU2ZDY3XHU2ZDY4XHU2ZDZiXHU2ZDZjXHU2ZDZkXHU2ZDcwXHU2ZDcxXHU2ZDcyXHU2ZDczXHU2ZDc1XHU2ZDc2XHU2ZDc5XHU2ZDdhXHU2ZDdiXHU2ZDdkIiw0LCJcdTZkODNcdTZkODRcdTZkODZcdTZkODdcdTZk''@;'; put 'put ''OGFcdTZkOGJcdTZkOGRcdTZkOGZcdTZkOTBcdTZkOTJcdTZkOTYiLDQsIlx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1NmRiMVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOSIsNSwiXHU2ZGMxXHU2ZGMyXHU2ZGMzXHU2ZGM4XHU2ZGM5XHU2ZGNhIl0sWyI5YzQw''@;'; put 'put ''IiwiXHU2ZGNkXHU2ZGNlXHU2ZGNmXHU2ZGQwXHU2ZGQyXHU2ZGQzXHU2ZGQ0XHU2ZGQ1XHU2ZGQ3XHU2ZGRhXHU2ZGRiXHU2ZGRjXHU2ZGRmXHU2ZGUyXHU2ZGUzXHU2ZGU1XHU2ZGU3XHU2ZGU4XHU2ZGU5XHU2ZGVhXHU2ZGVkXHU2ZGVmXHU2ZGYwXHU2ZGYyXHU2ZGY0XHU2ZGY1XHU2ZGY2''@;'; put 'put ''XHU2ZGY4XHU2ZGZhXHU2ZGZkIiw3LCJcdTZlMDZcdTZlMDdcdTZlMDhcdTZlMDlcdTZlMGJcdTZlMGZcdTZlMTJcdTZlMTNcdTZlMTVcdTZlMThcdTZlMTlcdTZlMWJcdTZlMWNcdTZlMWVcdTZlMWZcdTZlMjJcdTZlMjZcdTZlMjdcdTZlMjhcdTZlMmFcdTZlMmNcdTZlMmVcdTZlMzBcdTZl''@;'; put 'put ''MzFcdTZlMzNcdTZlMzUiXSxbIjljODAiLCJcdTZlMzZcdTZlMzdcdTZlMzlcdTZlM2IiLDcsIlx1NmU0NSIsNywiXHU2ZTRmXHU2ZTUwXHU2ZTUxXHU2ZTUyXHU2ZTU1XHU2ZTU3XHU2ZTU5XHU2ZTVhXHU2ZTVjXHU2ZTVkXHU2ZTVlXHU2ZTYwIiwxMCwiXHU2ZTZjXHU2ZTZkXHU2ZTZmIiwx''@;'; put 'put ''NCwiXHU2ZTgwXHU2ZTgxXHU2ZTgyXHU2ZTg0XHU2ZTg3XHU2ZTg4XHU2ZThhIiw0LCJcdTZlOTEiLDYsIlx1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1''@;'; put 'put ''NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVjY1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVl''@;'; put 'put ''N1x1NmVlYSIsNV0sWyI5ZDQwIiwiXHU2ZWYwXHU2ZWYxXHU2ZWYyXHU2ZWYzXHU2ZWY1XHU2ZWY2XHU2ZWY3XHU2ZWY4XHU2ZWZhIiw3LCJcdTZmMDNcdTZmMDRcdTZmMDVcdTZmMDdcdTZmMDhcdTZmMGEiLDQsIlx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNiIsOSwiXHU2ZjIxXHU2ZjIyXHU2''@;'; put 'put ''ZjIzXHU2ZjI1XHU2ZjI2XHU2ZjI3XHU2ZjI4XHU2ZjJjXHU2ZjJlXHU2ZjMwXHU2ZjMyXHU2ZjM0XHU2ZjM1XHU2ZjM3Iiw2LCJcdTZmM2ZcdTZmNDBcdTZmNDFcdTZmNDIiXSxbIjlkODAiLCJcdTZmNDNcdTZmNDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGUiLDksIlx1''@;'; put 'put ''NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1NmY2MFx1NmY2MVx1NmY2M1x1NmY2NFx1NmY2NVx1NmY2NyIsNSwiXHU2ZjZmXHU2ZjcwXHU2ZjcxXHU2ZjczXHU2Zjc1XHU2Zjc2XHU2Zjc3XHU2Zjc5XHU2ZjdiXHU2ZjdkIiw2LCJcdTZmODVcdTZmODZcdTZmODdcdTZmOGFcdTZmOGJc''@;'; put 'put ''dTZmOGYiLDEyLCJcdTZmOWRcdTZmOWVcdTZmOWZcdTZmYTBcdTZmYTIiLDQsIlx1NmZhOCIsMTAsIlx1NmZiNFx1NmZiNVx1NmZiN1x1NmZiOFx1NmZiYSIsNSwiXHU2ZmMxXHU2ZmMzIiw1LCJcdTZmY2EiLDYsIlx1NmZkMyIsMTAsIlx1NmZkZlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNSJd''@;'; put 'put ''LFsiOWU0MCIsIlx1NmZlNiIsNywiXHU2ZmYwIiwzMiwiXHU3MDEyIiw3LCJcdTcwMWMiLDYsIlx1NzAyNCIsNl0sWyI5ZTgwIiwiXHU3MDJiIiw5LCJcdTcwMzZcdTcwMzdcdTcwMzhcdTcwM2EiLDE3LCJcdTcwNGRcdTcwNGVcdTcwNTAiLDEzLCJcdTcwNWYiLDExLCJcdTcwNmVcdTcwNzFc''@;'; put 'put ''dTcwNzJcdTcwNzNcdTcwNzRcdTcwNzdcdTcwNzlcdTcwN2FcdTcwN2JcdTcwN2RcdTcwODFcdTcwODJcdTcwODNcdTcwODRcdTcwODZcdTcwODdcdTcwODhcdTcwOGJcdTcwOGNcdTcwOGRcdTcwOGZcdTcwOTBcdTcwOTFcdTcwOTNcdTcwOTdcdTcwOThcdTcwOWFcdTcwOWJcdTcwOWUiLDEy''@;'; put 'put ''LCJcdTcwYjBcdTcwYjJcdTcwYjRcdTcwYjVcdTcwYjZcdTcwYmFcdTcwYmVcdTcwYmZcdTcwYzRcdTcwYzVcdTcwYzZcdTcwYzdcdTcwYzlcdTcwY2IiLDEyLCJcdTcwZGEiXSxbIjlmNDAiLCJcdTcwZGNcdTcwZGRcdTcwZGVcdTcwZTBcdTcwZTFcdTcwZTJcdTcwZTNcdTcwZTVcdTcwZWFc''@;'; put 'put ''dTcwZWVcdTcwZjAiLDYsIlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZSIsMTAsIlx1NzEwYiIsNCwiXHU3MTExXHU3MTEyXHU3MTE0XHU3MTE3XHU3MTFiIiwxMCwiXHU3MTI3Iiw3LCJcdTcxMzJcdTcxMzNcdTcxMzQiXSxbIjlmODAiLCJcdTcxMzVcdTcxMzciLDEzLCJcdTcxNDZc''@;'; put 'put ''dTcxNDdcdTcxNDhcdTcxNDlcdTcxNGJcdTcxNGRcdTcxNGYiLDEyLCJcdTcxNWRcdTcxNWYiLDQsIlx1NzE2NVx1NzE2OSIsNCwiXHU3MTZmXHU3MTcwXHU3MTcxXHU3MTc0XHU3MTc1XHU3MTc2XHU3MTc3XHU3MTc5XHU3MTdiXHU3MTdjXHU3MTdlIiw1LCJcdTcxODUiLDQsIlx1NzE4Ylx1''@;'; put 'put ''NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1NzE5M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YSIsNCwiXHU3MWExIiw2LCJcdTcxYTlcdTcxYWFcdTcxYWJcdTcxYWQiLDUsIlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFiOFx1NzFiYSIsOCwiXHU3MWM0Iiw5LCJcdTcxY2YiLDRd''@;'; put 'put ''LFsiYTA0MCIsIlx1NzFkNiIsOSwiXHU3MWUxXHU3MWUyXHU3MWUzXHU3MWU0XHU3MWU2XHU3MWU4Iiw1LCJcdTcxZWYiLDksIlx1NzFmYSIsMTEsIlx1NzIwNyIsMTldLFsiYTA4MCIsIlx1NzIxYlx1NzIxY1x1NzIxZSIsOSwiXHU3MjI5XHU3MjJiXHU3MjJkXHU3MjJlXHU3MjJmXHU3MjMy''@;'; put 'put ''XHU3MjMzXHU3MjM0XHU3MjNhXHU3MjNjXHU3MjNlXHU3MjQwIiw2LCJcdTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTFcdTcyNTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcy''@;'; put 'put ''NmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcyNzFcdTcyNzNcdTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2RcdTcyODJcdTcyODNcdTcyODUiLDQsIlx1NzI4Y1x1NzI4ZVx1NzI5MFx1NzI5MVx1NzI5MyIsMTEsIlx1NzJhMCIsMTEsIlx1NzJhZVx1NzJiMVx1''@;'; put 'put ''NzJiMlx1NzJiM1x1NzJiNVx1NzJiYSIsNiwiXHU3MmM1XHU3MmM2XHU3MmM3XHU3MmM5XHU3MmNhXHU3MmNiXHU3MmNjXHU3MmNmXHU3MmQxXHU3MmQzXHU3MmQ0XHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRhXHU3MmRiIl0sWyJhMWExIiwiXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MDJjOVx1''@;'; put 'put ''MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTRcdWZmNWVcdTIwMTZcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDgiLDcsIlx1MzAxNlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1''@;'; put 'put ''MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJc''@;'; put 'put ''dTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVmZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxMyJdLFsiYTJhMSIsIlx1''@;'; put 'put ''MjE3MCIsOV0sWyJhMmIxIiwiXHUyNDg4IiwxOSwiXHUyNDc0IiwxOSwiXHUyNDYwIiw5XSxbImEyZTUiLCJcdTMyMjAiLDldLFsiYTJmMSIsIlx1MjE2MCIsMTFdLFsiYTNhMSIsIlx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNSIsODgsIlx1ZmZlMyJdLFsiYTRhMSIsIlx1MzA0MSIs''@;'; put 'put ''ODJdLFsiYTVhMSIsIlx1MzBhMSIsODVdLFsiYTZhMSIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyJhNmMxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE2ZTAiLCJcdWZlMzVcdWZlMzZcdWZlMzlcdWZlM2FcdWZlM2ZcdWZlNDBcdWZlM2RcdWZlM2VcdWZlNDFcdWZlNDJcdWZlNDNc''@;'; put 'put ''dWZlNDQiXSxbImE2ZWUiLCJcdWZlM2JcdWZlM2NcdWZlMzdcdWZlMzhcdWZlMzEiXSxbImE2ZjQiLCJcdWZlMzNcdWZlMzQiXSxbImE3YTEiLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiYTdkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0sWyJhODQwIiwiXHUwMmNh''@;'; put 'put ''XHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUyMjE1XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwIiwzNSwiXHUyNTgxIiw2XSxbImE4ODAiLCJcdTI1ODgiLDcsIlx1MjU5M1x1''@;'; put 'put ''MjU5NFx1MjU5NVx1MjViY1x1MjViZFx1MjVlMlx1MjVlM1x1MjVlNFx1MjVlNVx1MjYwOVx1MjI5NVx1MzAxMlx1MzAxZFx1MzAxZSJdLFsiYThhMSIsIlx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJc''@;'; put 'put ''eGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1MDI1MSJdLFsiYThiZCIsIlx1MDE0NFx1MDE0OCJdLFsiYThjMCIsIlx1MDI2MSJdLFsiYThjNSIsIlx1MzEwNSIsMzZdLFsiYTk0MCIsIlx1MzAyMSIsOCwiXHUzMmEzXHUzMzhlXHUzMzhm''@;'; put 'put ''XHUzMzljXHUzMzlkXHUzMzllXHUzM2ExXHUzM2M0XHUzM2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMwXHVmZmUyXHVmZmU0Il0sWyJhOTU5IiwiXHUyMTIxXHUzMjMxIl0sWyJhOTVjIiwiXHUyMDEwIl0sWyJhOTYwIiwiXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUz''@;'; put 'put ''MDlkXHUzMDllXHVmZTQ5Iiw5LCJcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZlNTkiLDhdLFsiYTk4MCIsIlx1ZmU2MiIsNCwiXHVmZTY4XHVmZTY5XHVmZTZhXHVmZTZiIl0sWyJhOTk2IiwiXHUzMDA3Il0sWyJhOWE0IiwiXHUyNTAwIiw3NV0sWyJhYTQwIiwiXHU3MmRjXHU3MmRkXHU3''@;'; put 'put ''MmRmXHU3MmUyIiw1LCJcdTcyZWFcdTcyZWJcdTcyZjVcdTcyZjZcdTcyZjlcdTcyZmRcdTcyZmVcdTcyZmZcdTczMDBcdTczMDJcdTczMDQiLDUsIlx1NzMwYlx1NzMwY1x1NzMwZFx1NzMwZlx1NzMxMFx1NzMxMVx1NzMxMlx1NzMxNFx1NzMxOFx1NzMxOVx1NzMxYVx1NzMxZlx1NzMyMFx1''@;'; put 'put ''NzMyM1x1NzMyNFx1NzMyNlx1NzMyN1x1NzMyOFx1NzMyZFx1NzMyZlx1NzMzMFx1NzMzMlx1NzMzM1x1NzMzNVx1NzMzNlx1NzMzYVx1NzMzYlx1NzMzY1x1NzMzZFx1NzM0MCIsOF0sWyJhYTgwIiwiXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRjXHU3MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3''@;'; put 'put ''MzU0XHU3MzU1XHU3MzU2XHU3MzU4Iiw3LCJcdTczNjEiLDEwLCJcdTczNmVcdTczNzBcdTczNzEiXSxbImFiNDAiLCJcdTczNzIiLDExLCJcdTczN2YiLDQsIlx1NzM4NVx1NzM4Nlx1NzM4OFx1NzM4YVx1NzM4Y1x1NzM4ZFx1NzM4Zlx1NzM5MFx1NzM5Mlx1NzM5M1x1NzM5NFx1NzM5NVx1''@;'; put 'put ''NzM5N1x1NzM5OFx1NzM5OVx1NzM5YVx1NzM5Y1x1NzM5ZFx1NzM5ZVx1NzNhMFx1NzNhMVx1NzNhMyIsNSwiXHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzIiw0XSxbImFiODAi''@;'; put 'put ''LCJcdTczY2JcdTczY2NcdTczY2VcdTczZDIiLDYsIlx1NzNkYVx1NzNkYlx1NzNkY1x1NzNkZFx1NzNkZlx1NzNlMVx1NzNlMlx1NzNlM1x1NzNlNFx1NzNlNlx1NzNlOFx1NzNlYVx1NzNlYlx1NzNlY1x1NzNlZVx1NzNlZlx1NzNmMFx1NzNmMVx1NzNmMyIsNF0sWyJhYzQwIiwiXHU3M2Y4''@;'; put 'put ''IiwxMCwiXHU3NDA0XHU3NDA3XHU3NDA4XHU3NDBiXHU3NDBjXHU3NDBkXHU3NDBlXHU3NDExIiw4LCJcdTc0MWMiLDUsIlx1NzQyM1x1NzQyNFx1NzQyN1x1NzQyOVx1NzQyYlx1NzQyZFx1NzQyZlx1NzQzMVx1NzQzMlx1NzQzNyIsNCwiXHU3NDNkXHU3NDNlXHU3NDNmXHU3NDQwXHU3NDQy''@;'; put 'put ''IiwxMV0sWyJhYzgwIiwiXHU3NDRlIiw2LCJcdTc0NTZcdTc0NThcdTc0NWRcdTc0NjAiLDEyLCJcdTc0NmVcdTc0NmZcdTc0NzEiLDQsIlx1NzQ3OFx1NzQ3OVx1NzQ3YSJdLFsiYWQ0MCIsIlx1NzQ3Ylx1NzQ3Y1x1NzQ3ZFx1NzQ3Zlx1NzQ4Mlx1NzQ4NFx1NzQ4NVx1NzQ4Nlx1NzQ4OFx1''@;'; put 'put ''NzQ4OVx1NzQ4YVx1NzQ4Y1x1NzQ4ZFx1NzQ4Zlx1NzQ5MSIsMTAsIlx1NzQ5ZFx1NzQ5ZiIsNywiXHU3NGFhIiwxNSwiXHU3NGJiIiwxMl0sWyJhZDgwIiwiXHU3NGM4Iiw5LCJcdTc0ZDMiLDgsIlx1NzRkZFx1NzRkZlx1NzRlMVx1NzRlNVx1NzRlNyIsNiwiXHU3NGYwXHU3NGYxXHU3NGYy''@;'; put 'put ''Il0sWyJhZTQwIiwiXHU3NGYzXHU3NGY1XHU3NGY4Iiw2LCJcdTc1MDBcdTc1MDFcdTc1MDJcdTc1MDNcdTc1MDUiLDcsIlx1NzUwZVx1NzUxMFx1NzUxMlx1NzUxNFx1NzUxNVx1NzUxNlx1NzUxN1x1NzUxYlx1NzUxZFx1NzUxZVx1NzUyMCIsNCwiXHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJl''@;'; put 'put ''XHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3NTU2XHU3NTU3XHU3NTU4Il0sWyJhZTgwIiwiXHU3NTVkIiw3LCJcdTc1''@;'; put 'put ''NjdcdTc1NjhcdTc1NjlcdTc1NmIiLDYsIlx1NzU3M1x1NzU3NVx1NzU3Nlx1NzU3N1x1NzU3YSIsNCwiXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3Il0sWyJhZjQwIiwiXHU3NTg4XHU3NTg5XHU3NThhXHU3NThjXHU3NThkXHU3NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3''@;'; put 'put ''NTk4XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3NWE2Iiw0LCJcdTc1YWRcdTc1YjZcdTc1YjdcdTc1YmFcdTc1YmJcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzZcdTc1Y2JcdTc1Y2NcdTc1Y2VcdTc1Y2ZcdTc1ZDBcdTc1ZDFcdTc1ZDNcdTc1ZDdcdTc1ZDlcdTc1ZGFcdTc1ZGNcdTc1ZGRc''@;'; put 'put ''dTc1ZGZcdTc1ZTBcdTc1ZTFcdTc1ZTVcdTc1ZTlcdTc1ZWNcdTc1ZWRcdTc1ZWVcdTc1ZWZcdTc1ZjJcdTc1ZjNcdTc1ZjVcdTc1ZjZcdTc1ZjdcdTc1ZjhcdTc1ZmFcdTc1ZmJcdTc1ZmRcdTc1ZmVcdTc2MDJcdTc2MDRcdTc2MDZcdTc2MDciXSxbImFmODAiLCJcdTc2MDhcdTc2MDlcdTc2''@;'; put 'put ''MGJcdTc2MGRcdTc2MGVcdTc2MGZcdTc2MTFcdTc2MTJcdTc2MTNcdTc2MTRcdTc2MTZcdTc2MWFcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjFcdTc2MjNcdTc2MjdcdTc2MjhcdTc2MmNcdTc2MmVcdTc2MmZcdTc2MzFcdTc2MzJcdTc2MzZcdTc2MzdcdTc2MzlcdTc2M2FcdTc2M2JcdTc2M2Rc''@;'; put 'put ''dTc2NDFcdTc2NDJcdTc2NDQiXSxbImIwNDAiLCJcdTc2NDUiLDYsIlx1NzY0ZSIsNSwiXHU3NjU1XHU3NjU3Iiw0LCJcdTc2NWRcdTc2NWZcdTc2NjBcdTc2NjFcdTc2NjJcdTc2NjQiLDYsIlx1NzY2Y1x1NzY2ZFx1NzY2ZVx1NzY3MCIsNywiXHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3''@;'; put 'put ''NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3NjkwXHU3NjkyXHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3NjliIl0sWyJiMDgwIiwiXHU3NjljIiw3LCJcdTc2YTUiLDgsIlx1NzZhZlx1NzZiMFx1NzZiM1x1NzZiNSIsOSwiXHU3''@;'; put 'put ''NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFl''@;'; put 'put ''XHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3''@;'; put 'put ''ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2''@;'; put 'put ''XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1Il0sWyJiMTQwIiwiXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3''@;'; put 'put ''NmRlXHU3NmUwIiw0LCJcdTc2ZTYiLDcsIlx1NzZmMFx1NzZmM1x1NzZmNVx1NzZmNlx1NzZmN1x1NzZmYVx1NzZmYlx1NzZmZFx1NzZmZlx1NzcwMFx1NzcwMlx1NzcwM1x1NzcwNVx1NzcwNlx1NzcwYVx1NzcwY1x1NzcwZSIsMTAsIlx1NzcxYlx1NzcxY1x1NzcxZFx1NzcxZVx1NzcyMVx1''@;'; put 'put ''NzcyM1x1NzcyNFx1NzcyNVx1NzcyN1x1NzcyYVx1NzcyYiJdLFsiYjE4MCIsIlx1NzcyY1x1NzcyZVx1NzczMCIsNCwiXHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4Iiw3LCJcdTc3NTIiLDcsIlx1Nzc1Y1x1ODU4NFx1OTZmOVx1''@;'; put 'put ''NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1Njcy''@;'; put 'put ''Y1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1''@;'; put 'put ''NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVl''@;'; put 'put ''OFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiMyJdLFsiYjI0MCIsIlx1Nzc1ZFx1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2NFx1Nzc2N1x1Nzc2OVx1Nzc2YVx1Nzc2ZCIsMTEsIlx1Nzc3YVx1Nzc3Ylx1Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1''@;'; put 'put ''Nzc4NiIsNSwiXHU3NzhmXHU3NzkwXHU3NzkzIiwxMSwiXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2FiXHU3N2FkXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2IyXHU3N2I0XHU3N2I2Iiw0XSxbImIyODAiLCJcdTc3YmNcdTc3YmVcdTc3YzAiLDEyLCJcdTc3Y2UiLDgsIlx1Nzdk''@;'; put 'put ''OFx1NzdkOVx1NzdkYVx1NzdkZCIsNCwiXHU3N2U0XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1''@;'; put 'put ''MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4''@;'; put 'put ''XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1''@;'; put 'put ''ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2Il0sWyJiMzQwIiwiXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1''@;'; put 'put ''XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzIiw1LCJcdTc4MGFcdTc4MGJcdTc4MGVcdTc4MGZcdTc4MTBcdTc4MTNcdTc4MTVcdTc4MTlcdTc4MWJcdTc4MWVcdTc4MjBcdTc4MjFcdTc4MjJcdTc4MjRcdTc4MjhcdTc4MmFcdTc4MmJcdTc4MmVcdTc4MmZcdTc4MzFcdTc4''@;'; put 'put ''MzJcdTc4MzNcdTc4MzVcdTc4MzZcdTc4M2RcdTc4M2ZcdTc4NDFcdTc4NDJcdTc4NDNcdTc4NDRcdTc4NDZcdTc4NDhcdTc4NDlcdTc4NGFcdTc4NGJcdTc4NGRcdTc4NGZcdTc4NTFcdTc4NTNcdTc4NTRcdTc4NThcdTc4NTlcdTc4NWEiXSxbImIzODAiLCJcdTc4NWJcdTc4NWNcdTc4NWUi''@;'; put 'put ''LDExLCJcdTc4NmYiLDcsIlx1Nzg3OFx1Nzg3OVx1Nzg3YVx1Nzg3Ylx1Nzg3ZCIsNiwiXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1''@;'; put 'put ''XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4''@;'; put 'put ''YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZj''@;'; put 'put ''XHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhIl0sWyJiNDQwIiwiXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3''@;'; put 'put ''ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4Iiw3LCJcdTc4YjVcdTc4YjZcdTc4YjdcdTc4YjhcdTc4YmFcdTc4YmJcdTc4YmNcdTc4YmRcdTc4YmZcdTc4YzBcdTc4YzJcdTc4YzNc''@;'; put 'put ''dTc4YzRcdTc4YzZcdTc4YzdcdTc4YzhcdTc4Y2NcdTc4Y2RcdTc4Y2VcdTc4Y2ZcdTc4ZDFcdTc4ZDJcdTc4ZDNcdTc4ZDZcdTc4ZDdcdTc4ZDhcdTc4ZGEiLDldLFsiYjQ4MCIsIlx1NzhlNFx1NzhlNVx1NzhlNlx1NzhlN1x1NzhlOVx1NzhlYVx1NzhlYlx1NzhlZCIsNCwiXHU3OGYzXHU3''@;'; put 'put ''OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiIiw1LCJcdTc5MDJcdTc5MDNcdTc5MDRcdTc5MDYiLDYsIlx1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1''@;'; put 'put ''NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1''@;'; put 'put ''MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1''@;'; put 'put ''NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZSJdLFsiYjU0MCIsIlx1NzkwZCIsNSwiXHU3OTE0Iiw5LCJc''@;'; put 'put ''dTc5MWYiLDQsIlx1NzkyNSIsMTQsIlx1NzkzNSIsNCwiXHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0XHU3OTQ1XHU3OTQ3XHU3OTRhIiw4LCJcdTc5NTRcdTc5NTVcdTc5NThcdTc5NTlcdTc5NjFcdTc5NjMiXSxbImI1ODAiLCJcdTc5NjRcdTc5NjZcdTc5NjlcdTc5NmFcdTc5NmJc''@;'; put 'put ''dTc5NmNcdTc5NmVcdTc5NzAiLDYsIlx1Nzk3OVx1Nzk3YiIsNCwiXHU3OTgyXHU3OTgzXHU3OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThkXHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2''@;'; put 'put ''XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3''@;'; put 'put ''Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEw''@;'; put 'put ''XHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4''@;'; put 'put ''Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwIl0sWyJiNjQwIiwiXHU3OTkzIiw2LCJcdTc5OWIiLDExLCJcdTc5YTgiLDEwLCJcdTc5YjQiLDQsIlx1NzliY1x1NzliZlx1NzljMlx1NzljNFx1NzljNVx1NzljN1x1NzljOFx1NzljYVx1NzljY1x1NzljZVx1NzljZlx1NzlkMFx1NzlkM1x1NzlkNFx1''@;'; put 'put ''NzlkNlx1NzlkN1x1NzlkOSIsNSwiXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhIl0sWyJiNjgwIiwiXHU3OWVjXHU3OWVlXHU3OWYxIiw2LCJcdTc5ZjlcdTc5ZmFcdTc5ZmNcdTc5ZmVcdTc5ZmZcdTdhMDFcdTdhMDRcdTdhMDVcdTdhMDdcdTdhMDhcdTdhMDlcdTdhMGFc''@;'; put 'put ''dTdhMGNcdTdhMGYiLDQsIlx1N2ExNVx1N2ExNlx1N2ExOFx1N2ExOVx1N2ExYlx1N2ExY1x1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFi''@;'; put 'put ''Ylx1NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1''@;'; put 'put ''NjVhZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZm''@;'; put 'put ''ZVx1NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJiOVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4YyJdLFsiYjc0MCIsIlx1N2ExZFx1N2ExZlx1N2EyMVx1N2EyMlx1N2EyNCIs''@;'; put 'put ''MTQsIlx1N2EzNFx1N2EzNVx1N2EzNlx1N2EzOFx1N2EzYVx1N2EzZVx1N2E0MCIsNSwiXHU3YTQ3Iiw5LCJcdTdhNTIiLDQsIlx1N2E1OCIsMTZdLFsiYjc4MCIsIlx1N2E2OSIsNiwiXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1''@;'; put 'put ''XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEyXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3''@;'; put 'put ''NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVl''@;'; put 'put ''XHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2''@;'; put 'put ''N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBk''@;'; put 'put ''Il0sWyJiODQwIiwiXHU3YWEzXHU3YWE0XHU3YWE3XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlIiw0LCJcdTdhYjQiLDEwLCJcdTdhYzAiLDEwLCJcdTdhY2MiLDksIlx1N2FkN1x1N2FkOFx1N2FkYVx1N2FkYlx1N2FkY1x1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNFx1N2FlNyIsNSwiXHU3YWVl''@;'; put 'put ''XHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzIl0sWyJiODgwIiwiXHU3YWY0Iiw0LCJcdTdhZmJcdTdhZmNcdTdhZmVcdTdiMDBcdTdiMDFcdTdiMDJcdTdiMDVcdTdiMDdcdTdiMDlcdTdiMGNcdTdiMGRcdTdiMGVcdTdiMTBcdTdiMTJcdTdiMTNcdTdiMTZcdTdiMTdcdTdiMThcdTdiMWFcdTdi''@;'; put 'put ''MWNcdTdiMWRcdTdiMWZcdTdiMjFcdTdiMjJcdTdiMjNcdTdiMjdcdTdiMjlcdTdiMmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJc''@;'; put 'put ''dTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThk''@;'; put 'put ''NzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhc''@;'; put 'put ''dTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjkiXSxbImI5NDAiLCJcdTdiMmZcdTdiMzBcdTdiMzJcdTdiMzRcdTdiMzVcdTdi''@;'; put 'put ''MzZcdTdiMzdcdTdiMzlcdTdiM2JcdTdiM2RcdTdiM2YiLDUsIlx1N2I0Nlx1N2I0OFx1N2I0YVx1N2I0ZFx1N2I0ZVx1N2I1M1x1N2I1NVx1N2I1N1x1N2I1OVx1N2I1Y1x1N2I1ZVx1N2I1Zlx1N2I2MVx1N2I2MyIsMTAsIlx1N2I2Zlx1N2I3MFx1N2I3M1x1N2I3NFx1N2I3Nlx1N2I3OFx1''@;'; put 'put ''N2I3YVx1N2I3Y1x1N2I3ZFx1N2I3Zlx1N2I4MVx1N2I4Mlx1N2I4M1x1N2I4NFx1N2I4NiIsNiwiXHU3YjhlXHU3YjhmIl0sWyJiOTgwIiwiXHU3YjkxXHU3YjkyXHU3YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1''@;'; put 'put ''XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5Iiw3LCJcdTdiYzJcdTdiYzNcdTdiYzRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZj''@;'; put 'put ''NWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVc''@;'; put 'put ''dTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5''@;'; put 'put ''YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzgiXSxbImJhNDAiLCJcdTdiYzVc''@;'; put 'put ''dTdiYzhcdTdiYzlcdTdiY2FcdTdiY2JcdTdiY2RcdTdiY2VcdTdiY2ZcdTdiZDBcdTdiZDJcdTdiZDQiLDQsIlx1N2JkYlx1N2JkY1x1N2JkZVx1N2JkZlx1N2JlMFx1N2JlMlx1N2JlM1x1N2JlNFx1N2JlN1x1N2JlOFx1N2JlOVx1N2JlYlx1N2JlY1x1N2JlZFx1N2JlZlx1N2JmMFx1N2Jm''@;'; put 'put ''MiIsNCwiXHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmIiw3LCJcdTdjMDhcdTdjMDlcdTdjMGFcdTdjMGRcdTdjMGVcdTdjMTAiLDUsIlx1N2MxN1x1N2MxOFx1N2MxOSJdLFsiYmE4MCIsIlx1N2MxYSIsNCwiXHU3YzIwIiw1LCJcdTdjMjhcdTdjMjlcdTdjMmIiLDEyLCJc''@;'; put 'put ''dTdjMzkiLDUsIlx1N2M0Mlx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1''@;'; put 'put ''N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1''@;'; put 'put ''OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQz''@;'; put 'put ''Y1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1NiJdLFsiYmI0MCIsIlx1N2M0MyIsOSwiXHU3YzRlIiwzNiwiXHU3Yzc1Iiw1LCJcdTdjN2UiLDldLFsiYmI4MCIsIlx1N2M4OFx1N2M4YSIs''@;'; put 'put ''NiwiXHU3YzkzXHU3Yzk0XHU3Yzk2XHU3Yzk5XHU3YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2FjXHU3Y2FkXHU3Y2FmXHU3Y2IwXHU3Y2I0Iiw0LCJcdTdjYmFcdTdjYmJcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJc''@;'; put 'put ''dTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZk''@;'; put 'put ''YTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlc''@;'; put 'put ''dTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3''@;'; put 'put ''M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTUiXSxbImJjNDAiLCJcdTdjYmZcdTdjYzBcdTdjYzJcdTdjYzNcdTdjYzRcdTdjYzZcdTdjYzlcdTdjY2JcdTdjY2UiLDYsIlx1N2NkOFx1N2NkYVx1N2NkYlx1N2NkZFx1N2NkZVx1N2NlMSIsNiwiXHU3Y2U5Iiw1LCJcdTdj''@;'; put 'put ''ZjAiLDcsIlx1N2NmOVx1N2NmYVx1N2NmYyIsMTMsIlx1N2QwYiIsNV0sWyJiYzgwIiwiXHU3ZDExIiwxNCwiXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3ZDJjXHU3ZDJkXHU3ZDJlXHU3ZDMwIiw2LCJcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBc''@;'; put 'put ''dThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5''@;'; put 'put ''NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdc''@;'; put 'put ''dTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5''@;'; put 'put ''ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRcdTRlZjYiXSxbImJkNDAiLCJcdTdkMzciLDU0LCJcdTdkNmYiLDddLFsiYmQ4MCIsIlx1N2Q3OCIsMzIsIlx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMw''@;'; put 'put ''Nlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1''@;'; put 'put ''ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODll''@;'; put 'put ''M1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1''@;'; put 'put ''NmQ3OCJdLFsiYmU0MCIsIlx1N2Q5OSIsMTIsIlx1N2RhNyIsNiwiXHU3ZGFmIiw0Ml0sWyJiZTgwIiwiXHU3ZGRhIiwzMiwiXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2''@;'; put 'put ''NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1''@;'; put 'put ''XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1''@;'; put 'put ''MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiIl0sWyJiZjQwIiwiXHU3ZGZiIiw2Ml0s''@;'; put 'put ''WyJiZjgwIiwiXHU3ZTNhXHU3ZTNjIiw0LCJcdTdlNDIiLDQsIlx1N2U0OCIsMjEsIlx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1''@;'; put 'put ''NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBh''@;'; put 'put ''Zlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQyZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1''@;'; put 'put ''NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MCJdLFsiYzA0MCIsIlx1N2U1ZSIsMzUsIlx1N2U4MyIsMjMsIlx1N2U5Y1x1N2U5''@;'; put 'put ''ZFx1N2U5ZSJdLFsiYzA4MCIsIlx1N2VhZVx1N2ViNFx1N2ViYlx1N2ViY1x1N2VkNlx1N2VlNFx1N2VlY1x1N2VmOVx1N2YwYVx1N2YxMFx1N2YxZVx1N2YzN1x1N2YzOVx1N2YzYiIsNiwiXHU3ZjQzXHU3ZjQ2Iiw5LCJcdTdmNTJcdTdmNTNcdTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2''@;'; put 'put ''MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5Yzhc''@;'; put 'put ''dTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUx''@;'; put 'put ''MjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlc''@;'; put 'put ''dTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDAiXSxbImMxNDAiLCJcdTdmNTZcdTdmNTlcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNWVcdTdmNjBcdTdmNjMiLDQsIlx1N2Y2Ylx1N2Y2Y1x1N2Y2ZFx1N2Y2Zlx1N2Y3MFx1N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1N2Y3''@;'; put 'put ''OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3Zlx1N2Y4MFx1N2Y4MiIsNywiXHU3ZjhiXHU3ZjhkXHU3ZjhmIiw0LCJcdTdmOTUiLDQsIlx1N2Y5Ylx1N2Y5Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1N2ZhOCIsNiwiXHU3ZmIxIl0sWyJjMTgwIiwiXHU3ZmIzIiw0LCJc''@;'; put 'put ''dTdmYmFcdTdmYmJcdTdmYmVcdTdmYzBcdTdmYzJcdTdmYzNcdTdmYzRcdTdmYzZcdTdmYzdcdTdmYzhcdTdmYzlcdTdmY2JcdTdmY2RcdTdmY2YiLDQsIlx1N2ZkNlx1N2ZkN1x1N2ZkOSIsNSwiXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgz''@;'; put 'put ''XHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2''@;'; put 'put ''NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQx''@;'; put 'put ''XHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5''@;'; put 'put ''Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmIl0sWyJjMjQwIiwiXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0Iiw2LCJcdTdmZmRcdTdmZmVcdTdmZmZcdTgwMDJcdTgwMDdcdTgwMDhcdTgwMDlcdTgwMGFcdTgwMGVcdTgwMGZc''@;'; put 'put ''dTgwMTFcdTgwMTNcdTgwMWFcdTgwMWJcdTgwMWRcdTgwMWVcdTgwMWZcdTgwMjFcdTgwMjNcdTgwMjRcdTgwMmIiLDUsIlx1ODAzMlx1ODAzNFx1ODAzOVx1ODAzYVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0MVx1ODA0NFx1ODA0NVx1ODA0N1x1ODA0OFx1ODA0OVx1ODA0ZVx1ODA0Zlx1ODA1''@;'; put 'put ''MFx1ODA1MVx1ODA1M1x1ODA1NVx1ODA1Nlx1ODA1NyJdLFsiYzI4MCIsIlx1ODA1OVx1ODA1YiIsMTMsIlx1ODA2YiIsNSwiXHU4MDcyIiwxMSwiXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1''@;'; put 'put ''ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1Zjhi''@;'; put 'put ''XHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2''@;'; put 'put ''ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiIl0sWyJjMzQwIiwi''@;'; put 'put ''XHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkIiw1LCJcdTgwOTRcdTgwOTVcdTgwOTdcdTgwOTlcdTgwOWVcdTgwYTNcdTgwYTZcdTgwYTdcdTgwYThcdTgwYWNcdTgwYjBcdTgwYjNcdTgwYjVcdTgwYjZcdTgwYjhcdTgwYjlcdTgwYmJcdTgwYzVcdTgwYzciLDQs''@;'; put 'put ''Ilx1ODBjZiIsNiwiXHU4MGQ4XHU4MGRmXHU4MGUwXHU4MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiIl0sWyJjMzgwIiwiXHU4MTBjXHU4MTE1XHU4''@;'; put 'put ''MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmIiwxMiwiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5Iiw0LCJcdTgxM2ZcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJc''@;'; put 'put ''dTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRl''@;'; put 'put ''ZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRc''@;'; put 'put ''dTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0''@;'; put 'put ''NzgiXSxbImM0NDAiLCJcdTgxNDAiLDUsIlx1ODE0N1x1ODE0OVx1ODE0ZFx1ODE0ZVx1ODE0Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1YiIsNCwiXHU4MTYxXHU4MTYyXHU4MTYzXHU4MTY0XHU4MTY2XHU4MTY4XHU4MTZhXHU4MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4''@;'; put 'put ''MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4MTgzIiw0LCJcdTgxODlcdTgxOGJcdTgxOGNcdTgxOGRcdTgxOGVcdTgxOTBcdTgxOTIiLDUsIlx1ODE5OVx1ODE5YVx1ODE5ZSIsNCwiXHU4MWE0XHU4MWE1Il0sWyJjNDgwIiwiXHU4MWE3XHU4MWE5XHU4MWFiIiw3LCJcdTgxYjQiLDUs''@;'; put 'put ''Ilx1ODFiY1x1ODFiZFx1ODFiZVx1ODFiZlx1ODFjNFx1ODFjNVx1ODFjN1x1ODFjOFx1ODFjOVx1ODFjYlx1ODFjZCIsNiwiXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5''@;'; put 'put ''NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQz''@;'; put 'put ''XHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2''@;'; put 'put ''ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxIl0sWyJjNTQwIiwiXHU4MWQ0IiwxNCwi''@;'; put 'put ''XHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5XHU4MWViXHU4MWVlIiw0LCJcdTgxZjUiLDUsIlx1ODFmZFx1ODFmZlx1ODIwM1x1ODIwNyIsNCwiXHU4MjBlXHU4MjBmXHU4MjExXHU4MjEzXHU4MjE1Iiw1LCJcdTgyMWRcdTgyMjBcdTgyMjRcdTgyMjVcdTgyMjZcdTgyMjdcdTgyMjlc''@;'; put 'put ''dTgyMmVcdTgyMzJcdTgyM2FcdTgyM2NcdTgyM2RcdTgyM2YiXSxbImM1ODAiLCJcdTgyNDBcdTgyNDFcdTgyNDJcdTgyNDNcdTgyNDVcdTgyNDZcdTgyNDhcdTgyNGFcdTgyNGNcdTgyNGRcdTgyNGVcdTgyNTAiLDcsIlx1ODI1OVx1ODI1Ylx1ODI1Y1x1ODI1ZFx1ODI1ZVx1ODI2MCIsNywi''@;'; put 'put ''XHU4MjY5XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1''@;'; put 'put ''NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2''@;'; put 'put ''XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4''@;'; put 'put ''MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3Il0sWyJjNjQwIiwiXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4Mjgx''@;'; put 'put ''XHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMyXHU4''@;'; put 'put ''MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4Il0sWyJjNjgwIiwiXHU4MmZhXHU4MmZjIiw0LCJc''@;'; put 'put ''dTgzMGFcdTgzMGJcdTgzMGRcdTgzMTBcdTgzMTJcdTgzMTNcdTgzMTZcdTgzMThcdTgzMTlcdTgzMWQiLDksIlx1ODMyOVx1ODMyYVx1ODMyZVx1ODMzMFx1ODMzMlx1ODMzN1x1ODMzYlx1ODMzZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2''@;'; put 'put ''Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1''@;'; put 'put ''NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFj''@;'; put 'put ''NFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1''@;'; put 'put ''NmNlM1x1OGJhYlx1NjM5MCJdLFsiYzc0MCIsIlx1ODMzZVx1ODMzZlx1ODM0MVx1ODM0Mlx1ODM0NFx1ODM0NVx1ODM0OFx1ODM0YSIsNCwiXHU4MzUzXHU4MzU1Iiw0LCJcdTgzNWRcdTgzNjJcdTgzNzAiLDYsIlx1ODM3OVx1ODM3YVx1ODM3ZSIsNiwiXHU4Mzg3XHU4Mzg4XHU4MzhhXHU4''@;'; put 'put ''MzhiXHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4MzkxXHU4Mzk0XHU4Mzk1XHU4Mzk2XHU4Mzk3XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExIiw2LCJcdTgzYWNcdTgzYWRcdTgzYWUiXSxbImM3ODAiLCJcdTgzYWZcdTgzYjVcdTgzYmJcdTgzYmVcdTgzYmZcdTgzYzJcdTgzYzNc''@;'; put 'put ''dTgzYzRcdTgzYzZcdTgzYzhcdTgzYzlcdTgzY2JcdTgzY2RcdTgzY2VcdTgzZDBcdTgzZDFcdTgzZDJcdTgzZDNcdTgzZDVcdTgzZDdcdTgzZDlcdTgzZGFcdTgzZGJcdTgzZGVcdTgzZTJcdTgzZTNcdTgzZTRcdTgzZTZcdTgzZTdcdTgzZThcdTgzZWJcdTgzZWNcdTgzZWRcdTYwNzBcdTZk''@;'; put 'put ''M2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlc''@;'; put 'put ''dTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0''@;'; put 'put ''MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFc''@;'; put 'put ''dTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjAiXSxbImM4NDAiLCJcdTgzZWVcdTgzZWZcdTgzZjMiLDQsIlx1ODNmYVx1ODNmYlx1ODNmY1x1ODNmZVx1ODNmZlx1ODQwMFx1ODQwMlx1ODQwNVx1ODQwN1x1ODQwOFx1ODQwOVx1ODQw''@;'; put 'put ''YVx1ODQxMFx1ODQxMiIsNSwiXHU4NDE5XHU4NDFhXHU4NDFiXHU4NDFlIiw1LCJcdTg0MjkiLDcsIlx1ODQzMiIsNSwiXHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlIiw3LCJcdTg0NDdcdTg0NDhcdTg0NDkiXSxbImM4ODAiLCJcdTg0NGEiLDYsIlx1ODQ1MiIsNCwiXHU4NDU4XHU4NDVkXHU4''@;'; put 'put ''NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0Iiw0LCJcdTg0NmFcdTg0NmVcdTg0NmZcdTg0NzBcdTg0NzJcdTg0NzRcdTg0NzdcdTg0NzlcdTg0N2JcdTg0N2NcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2Fc''@;'; put 'put ''dTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcw''@;'; put 'put ''ZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlc''@;'; put 'put ''dTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzEiXSxb''@;'; put 'put ''ImM5NDAiLCJcdTg0N2QiLDQsIlx1ODQ4M1x1ODQ4NFx1ODQ4NVx1ODQ4Nlx1ODQ4YVx1ODQ4ZFx1ODQ4ZiIsNywiXHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyIiwxMiwiXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4''@;'; put 'put ''NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4NGQ1XHU4NGQ3Il0sWyJjOTgwIiwiXHU4NGQ4Iiw0LCJcdTg0ZGVcdTg0ZTFcdTg0ZTJcdTg0ZTRcdTg0ZTciLDQsIlx1ODRlZFx1''@;'; put 'put ''ODRlZVx1ODRlZlx1ODRmMSIsMTAsIlx1ODRmZFx1ODRmZVx1ODUwMFx1ODUwMVx1ODUwMlx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5''@;'; put 'put ''OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1''@;'; put 'put ''NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUz''@;'; put 'put ''M1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmMyJdLFsiY2E0MCIsIlx1ODUwMyIsOCwiXHU4NTBkXHU4NTBlXHU4NTBmXHU4''@;'; put 'put ''NTEwXHU4NTEyXHU4NTE0XHU4NTE1XHU4NTE2XHU4NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyIiw4LCJcdTg1MmQiLDksIlx1ODUzZSIsNCwiXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiIiwxMF0sWyJjYTgwIiwiXHU4NTU3XHU4NTU4XHU4NTVh''@;'; put 'put ''XHU4NTViXHU4NTVjXHU4NTVkXHU4NTVmIiw0LCJcdTg1NjVcdTg1NjZcdTg1NjdcdTg1NjkiLDgsIlx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1ODU3Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJl''@;'; put 'put ''ZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1''@;'; put 'put ''OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUy''@;'; put 'put ''Y1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1''@;'; put 'put ''NTg4NVx1NWViNlx1NjU3MFx1NmYzMSJdLFsiY2I0MCIsIlx1ODU4Mlx1ODU4M1x1ODU4Nlx1ODU4OCIsNiwiXHU4NTkwIiwxMCwiXHU4NTlkIiw2LCJcdTg1YTVcdTg1YTZcdTg1YTdcdTg1YTlcdTg1YWJcdTg1YWNcdTg1YWRcdTg1YjEiLDUsIlx1ODViOFx1ODViYSIsNiwiXHU4NWMyIiw2''@;'; put 'put ''LCJcdTg1Y2EiLDQsIlx1ODVkMVx1ODVkMiJdLFsiY2I4MCIsIlx1ODVkNFx1ODVkNiIsNSwiXHU4NWRkIiw2LCJcdTg1ZTVcdTg1ZTZcdTg1ZTdcdTg1ZThcdTg1ZWEiLDE0LCJcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUz''@;'; put 'put ''Y2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2Nc''@;'; put 'put ''dTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0''@;'; put 'put ''OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5Nzlc''@;'; put 'put ''dTU4NTQiXSxbImNjNDAiLCJcdTg1ZjlcdTg1ZmFcdTg1ZmNcdTg1ZmRcdTg1ZmVcdTg2MDAiLDQsIlx1ODYwNiIsMTAsIlx1ODYxMlx1ODYxM1x1ODYxNFx1ODYxNVx1ODYxNyIsMTUsIlx1ODYyOFx1ODYyYSIsMTMsIlx1ODYzOVx1ODYzYVx1ODYzYlx1ODYzZFx1ODYzZVx1ODYzZlx1ODY0''@;'; put 'put ''MCJdLFsiY2M4MCIsIlx1ODY0MSIsMTEsIlx1ODY1Mlx1ODY1M1x1ODY1NSIsNCwiXHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzIiw3LCJcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYw''@;'; put 'put ''MDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZc''@;'; put 'put ''dTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThl''@;'; put 'put ''NDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzMi''@;'; put 'put ''XSxbImNkNDAiLCJcdTg2NmRcdTg2NmZcdTg2NzBcdTg2NzIiLDYsIlx1ODY4MyIsNiwiXHU4NjhlIiw0LCJcdTg2OTRcdTg2OTYiLDUsIlx1ODY5ZSIsNCwiXHU4NmE1XHU4NmE2XHU4NmFiXHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiIiw0LCJcdTg2''@;'; put 'put ''YzFcdTg2YzJcdTg2YzNcdTg2YzVcdTg2YzhcdTg2Y2NcdTg2Y2RcdTg2ZDJcdTg2ZDNcdTg2ZDVcdTg2ZDZcdTg2ZDdcdTg2ZGFcdTg2ZGMiXSxbImNkODAiLCJcdTg2ZGRcdTg2ZTBcdTg2ZTFcdTg2ZTJcdTg2ZTNcdTg2ZTVcdTg2ZTZcdTg2ZTdcdTg2ZThcdTg2ZWFcdTg2ZWJcdTg2ZWNc''@;'; put 'put ''dTg2ZWZcdTg2ZjVcdTg2ZjZcdTg2ZjdcdTg2ZmFcdTg2ZmJcdTg2ZmNcdTg2ZmRcdTg2ZmZcdTg3MDFcdTg3MDRcdTg3MDVcdTg3MDZcdTg3MGJcdTg3MGNcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTFcdTg3MTRcdTg3MTZcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgy''@;'; put 'put ''NDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBc''@;'; put 'put ''dTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVh''@;'; put 'put ''MDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBc''@;'; put 'put ''dTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDEiXSxbImNlNDAiLCJcdTg3MTlcdTg3MWJcdTg3MWRcdTg3MWZcdTg3MjBcdTg3MjRcdTg3MjZcdTg3MjdcdTg3MjhcdTg3MmFcdTg3MmJcdTg3MmNcdTg3MmRcdTg3MmZcdTg3MzBcdTg3MzJcdTg3MzNcdTg3MzVcdTg3MzZcdTg3MzhcdTg3''@;'; put 'put ''MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3NDAiLDYsIlx1ODc0YVx1ODc0Ylx1ODc0ZFx1ODc0Zlx1ODc1MFx1ODc1MVx1ODc1Mlx1ODc1NFx1ODc1NVx1ODc1Nlx1ODc1OFx1ODc1YSIsNSwiXHU4NzYxXHU4NzYyXHU4NzY2Iiw3LCJcdTg3NmZcdTg3NzFcdTg3NzJcdTg3NzNcdTg3NzUiXSxb''@;'; put 'put ''ImNlODAiLCJcdTg3NzdcdTg3NzhcdTg3NzlcdTg3N2FcdTg3N2ZcdTg3ODBcdTg3ODFcdTg3ODRcdTg3ODZcdTg3ODdcdTg3ODlcdTg3OGFcdTg3OGNcdTg3OGUiLDQsIlx1ODc5NFx1ODc5NVx1ODc5Nlx1ODc5OCIsNiwiXHU4N2EwIiw0LCJcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThm''@;'; put 'put ''ZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJc''@;'; put 'put ''dTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThi''@;'; put 'put ''ZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2Zc''@;'; put 'put ''dTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2EiXSxbImNmNDAiLCJcdTg3YTVcdTg3YTZcdTg3YTdcdTg3YTlcdTg3YWFcdTg3YWVcdTg3YjBcdTg3YjFcdTg3YjJcdTg3YjRcdTg3YjZcdTg3YjdcdTg3YjhcdTg3YjlcdTg3YmJcdTg3YmNcdTg3YmVcdTg3YmZcdTg3''@;'; put 'put ''YzEiLDQsIlx1ODdjN1x1ODdjOFx1ODdjOVx1ODdjYyIsNCwiXHU4N2Q0Iiw2LCJcdTg3ZGNcdTg3ZGRcdTg3ZGVcdTg3ZGZcdTg3ZTFcdTg3ZTJcdTg3ZTNcdTg3ZTRcdTg3ZTZcdTg3ZTdcdTg3ZThcdTg3ZTlcdTg3ZWJcdTg3ZWNcdTg3ZWRcdTg3ZWYiLDldLFsiY2Y4MCIsIlx1ODdmYVx1''@;'; put 'put ''ODdmYlx1ODdmY1x1ODdmZFx1ODdmZlx1ODgwMFx1ODgwMVx1ODgwMlx1ODgwNCIsNSwiXHU4ODBiIiw3LCJcdTg4MTRcdTg4MTdcdTg4MThcdTg4MTlcdTg4MWFcdTg4MWMiLDQsIlx1ODgyM1x1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1''@;'; put 'put ''NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQx''@;'; put 'put ''M1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1''@;'; put 'put ''NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJi''@;'; put 'put ''NVx1NmRjNlx1NjY1MyJdLFsiZDA0MCIsIlx1ODgyNCIsMTMsIlx1ODgzMyIsNSwiXHU4ODNhXHU4ODNiXHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4ODQyXHU4ODQzXHU4ODQ2Iiw1LCJcdTg4NGUiLDUsIlx1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YSIsNiwiXHU4ODY2XHU4ODY3XHU4ODZh''@;'; put 'put ''XHU4ODZkXHU4ODZmXHU4ODcxXHU4ODczXHU4ODc0XHU4ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhIl0sWyJkMDgwIiwiXHU4ODdiXHU4ODdjXHU4ODgwXHU4ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4ODhmXHU4ODkwXHU4ODkxXHU4ODkzXHU4ODk0XHU4''@;'; put 'put ''ODk1XHU4ODk3Iiw0LCJcdTg4OWQiLDQsIlx1ODhhM1x1ODhhNSIsNSwiXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2''@;'; put 'put ''OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRj''@;'; put 'put ''XHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1''@;'; put 'put ''ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0Il0sWyJkMTQwIiwiXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyIiw0LCJcdTg4Yjhc''@;'; put 'put ''dTg4YjlcdTg4YmFcdTg4YmJcdTg4YmRcdTg4YmVcdTg4YmZcdTg4YzBcdTg4YzNcdTg4YzRcdTg4YzdcdTg4YzhcdTg4Y2FcdTg4Y2JcdTg4Y2NcdTg4Y2RcdTg4Y2ZcdTg4ZDBcdTg4ZDFcdTg4ZDNcdTg4ZDZcdTg4ZDdcdTg4ZGEiLDQsIlx1ODhlMFx1ODhlMVx1ODhlNlx1ODhlN1x1ODhl''@;'; put 'put ''OSIsNiwiXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzIiw1XSxbImQxODAiLCJcdTg5MDlcdTg5MGIiLDQsIlx1ODkxMVx1ODkxNCIsNCwiXHU4OTFjIiw0LCJcdTg5MjJcdTg5MjNcdTg5MjRcdTg5MjZcdTg5MjdcdTg5''@;'; put 'put ''MjhcdTg5MjlcdTg5MmNcdTg5MmRcdTg5MmVcdTg5MmZcdTg5MzFcdTg5MzJcdTg5MzNcdTg5MzVcdTg5MzdcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZc''@;'; put 'put ''dTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZk''@;'; put 'put ''ZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFc''@;'; put 'put ''dTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzYiXSxbImQyNDAiLCJcdTg5MzgiLDgsIlx1ODk0Mlx1ODk0''@;'; put 'put ''M1x1ODk0NSIsMjQsIlx1ODk2MCIsNSwiXHU4OTY3IiwxOSwiXHU4OTdjIl0sWyJkMjgwIiwiXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3IiwyNiwiXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4''@;'; put 'put ''MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZi''@;'; put 'put ''XHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2''@;'; put 'put ''MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1''@;'; put 'put ''XHU5NjkwIl0sWyJkMzQwIiwiXHU4OWEyIiwzMCwiXHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRkXHU4OWRmXHU4OWUwXHU4OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4XHU4OWU5XHU4OWVhXHU4OWVjXHU4OWVkXHU4OWVlXHU4''@;'; put 'put ''OWYwXHU4OWYxXHU4OWYyXHU4OWY0Iiw2XSxbImQzODAiLCJcdTg5ZmIiLDQsIlx1OGEwMSIsNSwiXHU4YTA4IiwyMSwiXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1Zjcx''@;'; put 'put ''XHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3''@;'; put 'put ''MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1''@;'; put 'put ''XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5Il0sWyJkNDQwIiwiXHU4YTFlIiwzMSwiXHU4''@;'; put 'put ''YTNmIiw4LCJcdThhNDkiLDIxXSxbImQ0ODAiLCJcdThhNWYiLDI1LCJcdThhN2EiLDYsIlx1NmQ3NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMz''@;'; put 'put ''Zlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1''@;'; put 'put ''OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4''@;'; put 'put ''MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2NyJdLFsiZDU0MCIsIlx1OGE4MSIsNywiXHU4YThiIiw3LCJcdThhOTQiLDQ2''@;'; put 'put ''XSxbImQ1ODAiLCJcdThhYzMiLDMyLCJcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVk''@;'; put 'put ''MmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNc''@;'; put 'put ''dThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThi''@;'; put 'put ''Y2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2YiXSxbImQ2NDAiLCJcdThhZTQiLDM0LCJcdThiMDgiLDI3XSxbImQ2ODAiLCJcdThiMjRcdThiMjVcdThiMjciLDMwLCJcdTVl''@;'; put 'put ''MjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThc''@;'; put 'put ''dTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkx''@;'; put 'put ''Y2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVc''@;'; put 'put ''dTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTEiXSxbImQ3NDAiLCJcdThiNDYiLDMxLCJcdThiNjciLDQsIlx1OGI2ZCIsMjVdLFsiZDc4MCIsIlx1OGI4NyIsMjQsIlx1OGJhY1x1OGJiMVx1OGJiYlx1OGJjN1x1OGJkMFx1''@;'; put 'put ''OGJlYVx1OGMwOVx1OGMxZVx1NGY0Zlx1NmNlOFx1Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1NTc2''@;'; put 'put ''MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJkOVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFlYVx1''@;'; put 'put ''NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1NWMw''@;'; put 'put ''YVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1NjdkZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhNyJdLFsiZDg0MCIsIlx1OGMzOCIsOCwiXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkIiw3LCJcdThjNTZcdThjNTdcdThjNThcdThjNTlcdThjNWIiLDUs''@;'; put 'put ''Ilx1OGM2MyIsNiwiXHU4YzZjIiw2LCJcdThjNzRcdThjNzVcdThjNzZcdThjNzdcdThjN2IiLDYsIlx1OGM4M1x1OGM4NFx1OGM4Nlx1OGM4NyJdLFsiZDg4MCIsIlx1OGM4OFx1OGM4Ylx1OGM4ZCIsNiwiXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5IiwyMCwiXHU0ZThkXHU0ZTBjXHU1MTQw''@;'; put 'put ''XHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0''@;'; put 'put ''ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMz''@;'; put 'put ''XHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0''@;'; put 'put ''ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkIl0sWyJkOTQwIiwiXHU4Y2FlIiw2Ml0sWyJkOTgwIiwiXHU4Y2VkIiwzMiwiXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0''@;'; put 'put ''ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdl''@;'; put 'put ''XHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1''@;'; put 'put ''ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJj''@;'; put 'put ''Il0sWyJkYTQwIiwiXHU4ZDBlIiwxNCwiXHU4ZDIwXHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZmXHU4ZDcxXHU4ZDcyXHU4ZDc4Iiw4LCJcdThkODJcdThkODNcdThkODZcdThkODdcdThkODhcdThkODlcdThkOGMiLDQs''@;'; put 'put ''Ilx1OGQ5Mlx1OGQ5M1x1OGQ5NSIsOSwiXHU4ZGEwXHU4ZGExIl0sWyJkYTgwIiwiXHU4ZGEyXHU4ZGE0IiwxMiwiXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4''@;'; put 'put ''ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUw''@;'; put 'put ''XHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4''@;'; put 'put ''YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0''@;'; put 'put ''XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhIl0sWyJkYjQwIiwiXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4''@;'; put 'put ''ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlIiw2LCJcdThlMDZcdThlMDdcdThlMDhcdThlMGJcdThlMGRcdThlMGVcdThlMTBcdThlMTFcdThlMTJcdThlMTNcdThlMTUiLDcsIlx1OGUyMFx1OGUyMVx1OGUyNCIsNCwiXHU4ZTJiXHU4ZTJkXHU4''@;'; put 'put ''ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlIl0sWyJkYjgwIiwiXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjIiw0LCJcdThlNTMiLDUsIlx1OGU1YSIsMTEsIlx1OGU2N1x1OGU2OFx1OGU2YVx1OGU2Ylx1OGU2ZVx1OGU3MVx1''@;'; put 'put ''OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0''@;'; put 'put ''Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1''@;'; put 'put ''NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdh''@;'; put 'put ''MFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZCJdLFsiZGM0MCIsIlx1OGU3M1x1OGU3NVx1OGU3NyIsNCwiXHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4Iiw2LCJcdThlOTFcdThl''@;'; put 'put ''OTJcdThlOTNcdThlOTUiLDYsIlx1OGU5ZFx1OGU5ZiIsMTEsIlx1OGVhZFx1OGVhZVx1OGViMFx1OGViMVx1OGViMyIsNiwiXHU4ZWJiIiw3XSxbImRjODAiLCJcdThlYzMiLDEwLCJcdThlY2YiLDIxLCJcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRc''@;'; put 'put ''dTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgy''@;'; put 'put ''ZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNc''@;'; put 'put ''dTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgz''@;'; put 'put ''M2FcdTgzMzNcdTgzNjZcdTgzNjUiXSxbImRkNDAiLCJcdThlZTUiLDYyXSxbImRkODAiLCJcdThmMjQiLDMyLCJcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgz''@;'; put 'put ''N2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZc''@;'; put 'put ''dTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0''@;'; put 'put ''YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2EiXSxbImRlNDAiLCJcdThmNDUiLDMyLCJcdThmNmFc''@;'; put 'put ''dThmODBcdThmOGNcdThmOTJcdThmOWRcdThmYTBcdThmYTFcdThmYTJcdThmYTRcdThmYTVcdThmYTZcdThmYTdcdThmYWFcdThmYWNcdThmYWRcdThmYWVcdThmYWZcdThmYjJcdThmYjNcdThmYjRcdThmYjVcdThmYjdcdThmYjhcdThmYmFcdThmYmJcdThmYmNcdThmYmZcdThmYzBcdThm''@;'; put 'put ''YzNcdThmYzYiXSxbImRlODAiLCJcdThmYzkiLDQsIlx1OGZjZlx1OGZkMlx1OGZkNlx1OGZkN1x1OGZkYVx1OGZlMFx1OGZlMVx1OGZlM1x1OGZlN1x1OGZlY1x1OGZlZlx1OGZmMVx1OGZmMlx1OGZmNFx1OGZmNVx1OGZmNlx1OGZmYVx1OGZmYlx1OGZmY1x1OGZmZVx1OGZmZlx1OTAwN1x1''@;'; put 'put ''OTAwOFx1OTAwY1x1OTAwZVx1OTAxM1x1OTAxNVx1OTAxOFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4''@;'; put 'put ''NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1''@;'; put 'put ''NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNj''@;'; put 'put ''NFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5NiJdLFsiZGY0MCIsIlx1OTAxOVx1OTAxY1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyNyIsNSwiXHU5MDMwIiw0''@;'; put 'put ''LCJcdTkwMzdcdTkwMzlcdTkwM2FcdTkwM2RcdTkwM2ZcdTkwNDBcdTkwNDNcdTkwNDVcdTkwNDZcdTkwNDgiLDQsIlx1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1OTA1OVx1OTA1YVx1OTA1YyIsNSwiXHU5MDY0XHU5MDY2XHU5MDY3XHU5MDY5XHU5MDZhXHU5MDZiXHU5MDZjXHU5MDZmIiw0''@;'; put 'put ''LCJcdTkwNzYiLDYsIlx1OTA3ZVx1OTA4MSJdLFsiZGY4MCIsIlx1OTA4NFx1OTA4NVx1OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4YyIsNCwiXHU5MDkyXHU5MDk0XHU5MDk2XHU5MDk4XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5''@;'; put 'put ''MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2Yx''@;'; put 'put ''XHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1''@;'; put 'put ''NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3''@;'; put 'put ''XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjIl0sWyJlMDQwIiwiXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5''@;'; put 'put ''MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5MGRlXHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5''@;'; put 'put ''XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5MTAxXHU5MTAzXHU5MTA1IiwxOSwiXHU5MTFhXHU5MTFiXHU5MTFjIl0sWyJlMDgwIiwiXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0IiwxMCwiXHU5MTMwXHU5MTMyIiw2LCJcdTkxM2EiLDgsIlx1OTE0NFx1NTUzN1x1NTU1''@;'; put 'put ''Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1NTUzMFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1''@;'; put 'put ''NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVlNlx1NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1''@;'; put 'put ''OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1''@;'; put 'put ''NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUxOVx1NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzYyJdLFsiZTE0MCIsIlx1OTE0NVx1OTE0N1x1OTE0OFx1OTE1MVx1OTE1M1x1OTE1NFx1OTE1NVx1OTE1Nlx1OTE1OFx1OTE1OVx1OTE1Ylx1OTE1Y1x1OTE1Zlx1OTE2MFx1OTE2Nlx1OTE2''@;'; put 'put ''N1x1OTE2OFx1OTE2Ylx1OTE2ZFx1OTE3M1x1OTE3YVx1OTE3Ylx1OTE3Y1x1OTE4MCIsNCwiXHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzIiw2LCJcdTkxOWMiLDUsIlx1OTFhNCIsNSwiXHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3''@;'; put 'put ''XHU5MWI4XHU5MWI5XHU5MWJiIl0sWyJlMTgwIiwiXHU5MWJjIiwxMCwiXHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyIiw5LCJcdTkxZGQiLDgsIlx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5''@;'; put 'put ''OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1''@;'; put 'put ''NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZh''@;'; put 'put ''OFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYSJdLFsiZTI0MCIsIlx1''@;'; put 'put ''OTFlNiIsNjJdLFsiZTI4MCIsIlx1OTIyNSIsMzIsIlx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1''@;'; put 'put ''NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2NyIsNSwiXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1''@;'; put 'put ''XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2''@;'; put 'put ''MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyIl0sWyJlMzQwIiwiXHU5MjQ2Iiw0NSwiXHU5Mjc1IiwxNl0sWyJlMzgwIiwiXHU5Mjg2Iiw3LCJcdTkyOGYiLDI0LCJcdTYwNmFcdTYwN2RcdTYwOTZcdTYw''@;'; put 'put ''OWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdc''@;'; put 'put ''dTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2''@;'; put 'put ''MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBc''@;'; put 'put ''dTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmUiXSxbImU0NDAiLCJcdTkyYTgiLDUsIlx1OTJhZiIsMjQsIlx1OTJjOSIsMzFdLFsiZTQ4MCIsIlx1OTJlOSIsMzIsIlx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1''@;'; put 'put ''NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRl''@;'; put 'put ''MFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1''@;'; put 'put ''NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3''@;'; put 'put ''Mlx1NmY3Y1x1NmY3YVx1NmZkMSJdLFsiZTU0MCIsIlx1OTMwYSIsNTEsIlx1OTMzZiIsMTBdLFsiZTU4MCIsIlx1OTM0YSIsMzEsIlx1OTM2Ylx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZlMFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAz''@;'; put 'put ''OVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1''@;'; put 'put ''OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4''@;'; put 'put ''Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1NTlhOVx1NTlhYVx1NTlhMyJdLFsiZTY0MCIsIlx1''@;'; put 'put ''OTM2YyIsMzQsIlx1OTM5MCIsMjddLFsiZTY4MCIsIlx1OTNhYyIsMjksIlx1OTNjYlx1OTNjY1x1OTNjZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1''@;'; put 'put ''NWEwY1x1NWEwOVx1NWEzMlx1NWEzNFx1NWExMVx1NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFm''@;'; put 'put ''MVx1NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1NWIwOVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1''@;'; put 'put ''OWE4OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5M1x1OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOSJdLFsiZTc0MCIsIlx1OTNjZSIsNywiXHU5M2Q3Iiw1NF0s''@;'; put 'put ''WyJlNzgwIiwiXHU5NDBlIiwzMiwiXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZh''@;'; put 'put ''XHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxIiw2LCJcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmYiLDQsIlx1N2YzNVx1NWU3YVx1NzU3''@;'; put 'put ''Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1''@;'; put 'put ''NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyYyJdLFsiZTg0MCIsIlx1OTQyZiIsMTQsIlx1OTQzZiIsNDMsIlx1OTQ2Y1x1OTQ2ZFx1OTQ2ZVx1OTQ2ZiJdLFsiZTg4MCIsIlx1OTQ3MCIsMjAsIlx1OTQ5MVx1OTQ5Nlx1OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRk''@;'; put 'put ''NFx1OTRkYVx1OTRlNlx1OTRmYlx1OTUxY1x1OTUyMFx1NzQxYlx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1''@;'; put 'put ''NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1Njdi''@;'; put 'put ''MFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1NjgwMFx1NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1''@;'; put 'put ''Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOSJdLFsiZTk0MCIsIlx1OTUyN1x1OTUzM1x1OTUzZFx1OTU0M1x1OTU0OFx1OTU0Ylx1OTU1NVx1OTU1YVx1OTU2''@;'; put 'put ''MFx1OTU2ZVx1OTU3NFx1OTU3NVx1OTU3NyIsNywiXHU5NTgwIiw0Ml0sWyJlOTgwIiwiXHU5NWFiIiwzMiwiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4''@;'; put 'put ''XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2''@;'; put 'put ''YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2Yjhk''@;'; put 'put ''XHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiIl0sWyJlYTQwIiwiXHU5NWNjIiwyNywiXHU5NWVjXHU5''@;'; put 'put ''NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzIiw2LCJcdTk2MmJcdTk2MmNcdTk2MmRcdTk2MmZcdTk2MzBcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M2FcdTk2M2VcdTk2NDFcdTk2NDNcdTk2NGFcdTk2NGVcdTk2NGZcdTk2NTFcdTk2NTJcdTk2NTNcdTk2NTZc''@;'; put 'put ''dTk2NTciXSxbImVhODAiLCJcdTk2NThcdTk2NTlcdTk2NWFcdTk2NWNcdTk2NWRcdTk2NWVcdTk2NjBcdTk2NjNcdTk2NjVcdTk2NjZcdTk2NmJcdTk2NmQiLDQsIlx1OTY3M1x1OTY3OCIsMTIsIlx1OTY4N1x1OTY4OVx1OTY4YVx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVj''@;'; put 'put ''ZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1''@;'; put 'put ''NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQz''@;'; put 'put ''Ylx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1''@;'; put 'put ''NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMCJdLFsiZWI0MCIsIlx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1OTY5NVx1OTY5Nlx1OTY5YVx1OTY5Ylx1OTY5ZCIsOSwiXHU5NmE4Iiw3LCJcdTk2YjFcdTk2YjJcdTk2YjRcdTk2YjVcdTk2YjdcdTk2YjhcdTk2YmFc''@;'; put 'put ''dTk2YmJcdTk2YmZcdTk2YzJcdTk2YzNcdTk2YzhcdTk2Y2FcdTk2Y2JcdTk2ZDBcdTk2ZDFcdTk2ZDNcdTk2ZDRcdTk2ZDYiLDksIlx1OTZlMSIsNiwiXHU5NmViIl0sWyJlYjgwIiwiXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZh''@;'; put 'put ''XHU5NmZiXHU5NmZjXHU5NmZkXHU5NmZmXHU5NzAyXHU5NzAzXHU5NzA1XHU5NzBhXHU5NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5NzE3Iiw0LCJcdTk3MWRcdTk3MWZcdTk3MjBcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZi''@;'; put 'put ''ZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFc''@;'; put 'put ''dTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgx''@;'; put 'put ''MTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFc''@;'; put 'put ''dTgxY2NcdTY3MjZcdTgxY2FcdTgxYmIiXSxbImVjNDAiLCJcdTk3MjEiLDgsIlx1OTcyYlx1OTcyY1x1OTcyZVx1OTcyZlx1OTczMVx1OTczMyIsNCwiXHU5NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmIiwxOCwiXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzVjXHU5NzVk''@;'; put 'put ''XHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3XHU5NzY4XHU5NzZhIiw3XSxbImVjODAiLCJcdTk3NzJcdTk3NzVcdTk3NzciLDQsIlx1OTc3ZCIsNywiXHU5Nzg2Iiw0LCJcdTk3OGNcdTk3OGVcdTk3OGZcdTk3OTBcdTk3OTNcdTk3OTVcdTk3OTZcdTk3OTdcdTk3OTkiLDQsIlx1ODFj''@;'; put 'put ''MVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1''@;'; put 'put ''NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFi''@;'; put 'put ''NVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFlN1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1''@;'; put 'put ''Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1NWZkMVx1NWZkMCJdLFsiZWQ0MCIsIlx1OTc5ZVx1OTc5Zlx1OTdhMVx1OTdhMlx1OTdhNCIsNiwiXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1Iiw0Nl0sWyJlZDgwIiwiXHU5''@;'; put 'put ''N2U0XHU5N2U1XHU5N2U4XHU5N2VlIiw0LCJcdTk3ZjRcdTk3ZjciLDIzLCJcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZc''@;'; put 'put ''dTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4''@;'; put 'put ''NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNc''@;'; put 'put ''dTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjgiXSxbImVlNDAiLCJcdTk4MGYiLDYyXSxbImVlODAiLCJcdTk4NGUiLDMyLCJcdTc3NjJc''@;'; put 'put ''dTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdm''@;'; put 'put ''NzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNc''@;'; put 'put ''dTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjYiLDQsIlx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOCIsNiwiXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3''@;'; put 'put ''XHU5NGU4XHU5NGVhIl0sWyJlZjQwIiwiXHU5ODZmIiw1LCJcdTk4OGJcdTk4OGVcdTk4OTJcdTk4OTVcdTk4OTlcdTk4YTNcdTk4YTgiLDM3LCJcdTk4Y2ZcdTk4ZDBcdTk4ZDRcdTk4ZDZcdTk4ZDdcdTk4ZGJcdTk4ZGNcdTk4ZGRcdTk4ZTAiLDRdLFsiZWY4MCIsIlx1OThlNVx1OThlNlx1''@;'; put 'put ''OThlOSIsMzAsIlx1OTRlOVx1OTRlYlx1OTRlZVx1OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMiIsNCwiXHU5NTE4XHU5NTFiXHU5NTFk''@;'; put 'put ''XHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5''@;'; put 'put ''NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0Iiw4LCJcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNc''@;'; put 'put ''dTdhMDJcdTdhMWVcdTdhMTQiXSxbImYwNDAiLCJcdTk5MDgiLDQsIlx1OTkwZVx1OTkwZlx1OTkxMSIsMjgsIlx1OTkyZiIsMjZdLFsiZjA4MCIsIlx1OTk0YSIsOSwiXHU5OTU2IiwxMiwiXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5OTdlXHU5OTgyXHU5OTgzXHU5''@;'; put 'put ''OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4Iiw0LCJcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFc''@;'; put 'put ''dTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjYiLDYsIlx1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVh''@;'; put 'put ''Y1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1''@;'; put 'put ''NzYyNVx1NzYxOFx1NzYxNVx1NzYxOSJdLFsiZjE0MCIsIlx1OTk4Y1x1OTk4ZVx1OTk5YSIsMTAsIlx1OTlhNlx1OTlhN1x1OTlhOSIsNDddLFsiZjE4MCIsIlx1OTlkOSIsMzIsIlx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1''@;'; put 'put ''NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3''@;'; put 'put ''Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1''@;'; put 'put ''NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4''@;'; put 'put ''MFx1OTg4MyJdLFsiZjI0MCIsIlx1OTlmYSIsNjJdLFsiZjI4MCIsIlx1OWEzOSIsMzIsIlx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3''@;'; put 'put ''YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1''@;'; put 'put ''ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODcz''@;'; put 'put ''Zlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMiJdLFsiZjM0MCIsIlx1OWE1YSIsMTcsIlx1OWE3Mlx1OWE4M1x1OWE4OVx1''@;'; put 'put ''OWE4ZFx1OWE4ZVx1OWE5NFx1OWE5NVx1OWE5OVx1OWFhNlx1OWFhOSIsNiwiXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2Iiw0LCJcdTlhY2RcdTlhY2VcdTlhY2ZcdTlhZDBcdTlhZDJcdTlhZDRcdTlhZDVc''@;'; put 'put ''dTlhZDZcdTlhZDdcdTlhZDlcdTlhZGFcdTlhZGJcdTlhZGMiXSxbImYzODAiLCJcdTlhZGRcdTlhZGVcdTlhZTBcdTlhZTJcdTlhZTNcdTlhZTRcdTlhZTVcdTlhZTdcdTlhZThcdTlhZTlcdTlhZWFcdTlhZWNcdTlhZWVcdTlhZjAiLDgsIlx1OWFmYVx1OWFmYyIsNiwiXHU5YjA0XHU5YjA1''@;'; put 'put ''XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4''@;'; put 'put ''ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNl''@;'; put 'put ''XHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3''@;'; put 'put ''YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiIl0sWyJmNDQwIiwiXHU5YjA3XHU5YjA5Iiw1LCJcdTliMTBcdTliMTFcdTliMTJcdTliMTQiLDEwLCJcdTliMjBcdTliMjFcdTliMjJcdTliMjQiLDEwLCJc''@;'; put 'put ''dTliMzBcdTliMzFcdTliMzMiLDcsIlx1OWIzZFx1OWIzZVx1OWIzZlx1OWI0MFx1OWI0Nlx1OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1OWI1M1x1OWI1NSIsNV0sWyJmNDgwIiwiXHU5YjViIiwzMiwiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4''@;'; put 'put ''MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4''@;'; put 'put ''XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4''@;'; put 'put ''MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5''@;'; put 'put ''XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0Il0sWyJmNTQwIiwiXHU5YjdjIiw2Ml0sWyJmNTgwIiwiXHU5YmJiIiwzMiwiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkx''@;'; put 'put ''XHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4''@;'; put 'put ''ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUx''@;'; put 'put ''XHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjIl0sWyJmNjQwIiwiXHU5YmRjIiw2''@;'; put 'put ''Ml0sWyJmNjgwIiwiXHU5YzFiIiwzMiwiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1Iiw1LCJcdTlmOGNcdTll''@;'; put 'put ''ZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVc''@;'; put 'put ''dTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWUiLDUsIlx1OWNhNSIsNCwiXHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwIiw3LCJcdTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2IiXSxbImY3NDAiLCJc''@;'; put 'put ''dTljM2MiLDYyXSxbImY3ODAiLCJcdTljN2JcdTljN2RcdTljN2VcdTljODBcdTljODNcdTljODRcdTljODlcdTljOGFcdTljOGNcdTljOGZcdTljOTNcdTljOTZcdTljOTdcdTljOThcdTljOTlcdTljOWRcdTljYWFcdTljYWNcdTljYWZcdTljYjlcdTljYmUiLDQsIlx1OWNjOFx1OWNjOVx1''@;'; put 'put ''OWNkMVx1OWNkMlx1OWNkYVx1OWNkYlx1OWNlMFx1OWNlMVx1OWNjYyIsNCwiXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0''@;'; put 'put ''XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5''@;'; put 'put ''YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRm''@;'; put 'put ''XHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0Il0sWyJmODQwIiwiXHU5Y2UzIiw2Ml0sWyJmODgwIiwiXHU5ZDIyIiwzMl0sWyJmOTQwIiwiXHU5ZDQzIiw2Ml0sWyJmOTgwIiwiXHU5ZDgy''@;'; put 'put ''IiwzMl0sWyJmYTQwIiwiXHU5ZGEzIiw2Ml0sWyJmYTgwIiwiXHU5ZGUyIiwzMl0sWyJmYjQwIiwiXHU5ZTAzIiwyNywiXHU5ZTI0XHU5ZTI3XHU5ZTJlXHU5ZTMwXHU5ZTM0XHU5ZTNiXHU5ZTNjXHU5ZTQwXHU5ZTRkXHU5ZTUwXHU5ZTUyXHU5ZTUzXHU5ZTU0XHU5ZTU2XHU5ZTU5XHU5ZTVk''@;'; put 'put ''XHU5ZTVmXHU5ZTYwXHU5ZTYxXHU5ZTYyXHU5ZTY1XHU5ZTZlXHU5ZTZmXHU5ZTcyXHU5ZTc0Iiw5LCJcdTllODAiXSxbImZiODAiLCJcdTllODFcdTllODNcdTllODRcdTllODVcdTllODZcdTllODlcdTllOGFcdTllOGMiLDUsIlx1OWU5NCIsOCwiXHU5ZTllXHU5ZWEwIiw1LCJcdTllYTdc''@;'; put 'put ''dTllYThcdTllYTlcdTllYWEiXSxbImZjNDAiLCJcdTllYWIiLDgsIlx1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWViY1x1OWViZiIsNCwiXHU5ZWM1XHU5ZWM2XHU5ZWM3XHU5ZWM4XHU5ZWNhXHU5ZWNiXHU5ZWNjXHU5ZWQwXHU5ZWQyXHU5ZWQzXHU5ZWQ1XHU5ZWQ2XHU5ZWQ3''@;'; put 'put ''XHU5ZWQ5XHU5ZWRhXHU5ZWRlXHU5ZWUxXHU5ZWUzXHU5ZWU0XHU5ZWU2XHU5ZWU4XHU5ZWViXHU5ZWVjXHU5ZWVkXHU5ZWVlXHU5ZWYwIiw4LCJcdTllZmFcdTllZmRcdTllZmYiLDZdLFsiZmM4MCIsIlx1OWYwNiIsNCwiXHU5ZjBjXHU5ZjBmXHU5ZjExXHU5ZjEyXHU5ZjE0XHU5ZjE1XHU5''@;'; put 'put ''ZjE2XHU5ZjE4XHU5ZjFhIiw1LCJcdTlmMjFcdTlmMjMiLDgsIlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMSJdLFsiZmQ0MCIsIlx1OWYzMiIsNCwiXHU5ZjM4XHU5ZjNhXHU5ZjNjXHU5ZjNmIiw0LCJcdTlmNDUiLDEwLCJcdTlmNTIiLDM4XSxbImZkODAiLCJcdTlmNzkiLDUsIlx1OWY4MVx1''@;'; put 'put ''OWY4Mlx1OWY4ZCIsMTEsIlx1OWY5Y1x1OWY5ZFx1OWY5ZVx1OWZhMSIsNCwiXHVmOTJjXHVmOTc5XHVmOTk1XHVmOWU3XHVmOWYxIl0sWyJmZTQwIiwiXHVmYTBjXHVmYTBkXHVmYTBlXHVmYTBmXHVmYTExXHVmYTEzXHVmYTE0XHVmYTE4XHVmYTFmXHVmYTIwXHVmYTIxXHVmYTIzXHVmYTI0''@;'; put 'put ''XHVmYTI3XHVmYTI4XHVmYTI5Il1dJyl9LDIxMTY2OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyI4MTQxIiwiXHVhYzAyXHVhYzAzXHVhYzA1XHVhYzA2XHVhYzBiIiw0LCJcdWFjMThcdWFjMWVcdWFjMWZcdWFjMjFcdWFj''@;'; put 'put ''MjJcdWFjMjNcdWFjMjUiLDYsIlx1YWMyZVx1YWMzMlx1YWMzM1x1YWMzNCJdLFsiODE2MSIsIlx1YWMzNVx1YWMzNlx1YWMzN1x1YWMzYVx1YWMzYlx1YWMzZFx1YWMzZVx1YWMzZlx1YWM0MSIsOSwiXHVhYzRjXHVhYzRlIiw1LCJcdWFjNTUiXSxbIjgxODEiLCJcdWFjNTZcdWFjNTdcdWFj''@;'; put 'put ''NTlcdWFjNWFcdWFjNWJcdWFjNWQiLDE4LCJcdWFjNzJcdWFjNzNcdWFjNzVcdWFjNzZcdWFjNzlcdWFjN2IiLDQsIlx1YWM4Mlx1YWM4N1x1YWM4OFx1YWM4ZFx1YWM4ZVx1YWM4Zlx1YWM5MVx1YWM5Mlx1YWM5M1x1YWM5NSIsNiwiXHVhYzllXHVhY2EyIiw1LCJcdWFjYWJcdWFjYWRcdWFj''@;'; put 'put ''YWVcdWFjYjEiLDYsIlx1YWNiYVx1YWNiZVx1YWNiZlx1YWNjMFx1YWNjMlx1YWNjM1x1YWNjNVx1YWNjNlx1YWNjN1x1YWNjOVx1YWNjYVx1YWNjYlx1YWNjZCIsNywiXHVhY2Q2XHVhY2Q4Iiw3LCJcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFj''@;'; put 'put ''ZjJcdWFjZjRcdWFjZjciLDQsIlx1YWNmZVx1YWNmZlx1YWQwMVx1YWQwMlx1YWQwM1x1YWQwNVx1YWQwNyIsNCwiXHVhZDBlXHVhZDEwXHVhZDEyXHVhZDEzIl0sWyI4MjQxIiwiXHVhZDE0XHVhZDE1XHVhZDE2XHVhZDE3XHVhZDE5XHVhZDFhXHVhZDFiXHVhZDFkXHVhZDFlXHVhZDFmXHVh''@;'; put 'put ''ZDIxIiw3LCJcdWFkMmFcdWFkMmJcdWFkMmUiLDVdLFsiODI2MSIsIlx1YWQzNlx1YWQzN1x1YWQzOVx1YWQzYVx1YWQzYlx1YWQzZCIsNiwiXHVhZDQ2XHVhZDQ4XHVhZDRhIiw1LCJcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTciXSxbIjgyODEiLCJcdWFkNTkiLDcsIlx1''@;'; put 'put ''YWQ2Mlx1YWQ2NCIsNywiXHVhZDZlXHVhZDZmXHVhZDcxXHVhZDcyXHVhZDc3XHVhZDc4XHVhZDc5XHVhZDdhXHVhZDdlXHVhZDgwXHVhZDgzIiw0LCJcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTEiLDEwLCJcdWFkOWUiLDUsIlx1YWRhNSIsMTcsIlx1YWRiOCIsNywiXHVh''@;'; put 'put ''ZGMyXHVhZGMzXHVhZGM1XHVhZGM2XHVhZGM3XHVhZGM5Iiw2LCJcdWFkZDJcdWFkZDQiLDcsIlx1YWRkZFx1YWRkZVx1YWRkZlx1YWRlMVx1YWRlMlx1YWRlM1x1YWRlNSIsMThdLFsiODM0MSIsIlx1YWRmYVx1YWRmYlx1YWRmZFx1YWRmZVx1YWUwMiIsNSwiXHVhZTBhXHVhZTBjXHVhZTBl''@;'; put 'put ''Iiw1LCJcdWFlMTUiLDddLFsiODM2MSIsIlx1YWUxZCIsMTgsIlx1YWUzMlx1YWUzM1x1YWUzNVx1YWUzNlx1YWUzOVx1YWUzYlx1YWUzYyJdLFsiODM4MSIsIlx1YWUzZFx1YWUzZVx1YWUzZlx1YWU0Mlx1YWU0NFx1YWU0N1x1YWU0OFx1YWU0OVx1YWU0Ylx1YWU0Zlx1YWU1MVx1YWU1Mlx1''@;'; put 'put ''YWU1M1x1YWU1NVx1YWU1NyIsNCwiXHVhZTVlXHVhZTYyXHVhZTYzXHVhZTY0XHVhZTY2XHVhZTY3XHVhZTZhXHVhZTZiXHVhZTZkXHVhZTZlXHVhZTZmXHVhZTcxIiw2LCJcdWFlN2FcdWFlN2UiLDUsIlx1YWU4NiIsNSwiXHVhZThkIiw0NiwiXHVhZWJmXHVhZWMxXHVhZWMyXHVhZWMzXHVh''@;'; put 'put ''ZWM1Iiw2LCJcdWFlY2VcdWFlZDIiLDUsIlx1YWVkYVx1YWVkYlx1YWVkZCIsOF0sWyI4NDQxIiwiXHVhZWU2XHVhZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlIiw1LCJcdWFlZjVcdWFlZjZcdWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmQiLDhdLFsiODQ2MSIsIlx1YWYwNlx1YWYw''@;'; put 'put ''OVx1YWYwYVx1YWYwYlx1YWYwY1x1YWYwZVx1YWYwZlx1YWYxMSIsMThdLFsiODQ4MSIsIlx1YWYyNCIsNywiXHVhZjJlXHVhZjJmXHVhZjMxXHVhZjMzXHVhZjM1Iiw2LCJcdWFmM2VcdWFmNDBcdWFmNDRcdWFmNDVcdWFmNDZcdWFmNDdcdWFmNGEiLDUsIlx1YWY1MSIsMTAsIlx1YWY1ZSIs''@;'; put 'put ''NSwiXHVhZjY2IiwxOCwiXHVhZjdhIiw1LCJcdWFmODFcdWFmODJcdWFmODNcdWFmODVcdWFmODZcdWFmODdcdWFmODkiLDYsIlx1YWY5Mlx1YWY5M1x1YWY5NFx1YWY5NiIsNSwiXHVhZjlkIiwyNiwiXHVhZmJhXHVhZmJiXHVhZmJkXHVhZmJlIl0sWyI4NTQxIiwiXHVhZmJmXHVhZmMxIiw1''@;'; put 'put ''LCJcdWFmY2FcdWFmY2NcdWFmY2YiLDQsIlx1YWZkNSIsNiwiXHVhZmRkIiw0XSxbIjg1NjEiLCJcdWFmZTIiLDUsIlx1YWZlYSIsNSwiXHVhZmYyXHVhZmYzXHVhZmY1XHVhZmY2XHVhZmY3XHVhZmY5Iiw2LCJcdWIwMDJcdWIwMDMiXSxbIjg1ODEiLCJcdWIwMDUiLDYsIlx1YjAwZFx1YjAw''@;'; put 'put ''ZVx1YjAwZlx1YjAxMVx1YjAxMlx1YjAxM1x1YjAxNSIsNiwiXHViMDFlIiw5LCJcdWIwMjkiLDI2LCJcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWUiLDI5LCJcdWIwN2VcdWIw''@;'; put 'put ''N2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODUiLDYsIlx1YjA4ZVx1YjA5MFx1YjA5MiIsNSwiXHViMDliXHViMDlkXHViMDllXHViMGEzXHViMGE0Il0sWyI4NjQxIiwiXHViMGE1XHViMGE2XHViMGE3XHViMGFhXHViMGIwXHViMGIyXHViMGI2XHViMGI3XHViMGI5XHViMGJhXHViMGJiXHVi''@;'; put 'put ''MGJkIiw2LCJcdWIwYzZcdWIwY2EiLDUsIlx1YjBkMiJdLFsiODY2MSIsIlx1YjBkM1x1YjBkNVx1YjBkNlx1YjBkN1x1YjBkOSIsNiwiXHViMGUxXHViMGUyXHViMGUzXHViMGU0XHViMGU2IiwxMF0sWyI4NjgxIiwiXHViMGYxIiwyMiwiXHViMTBhXHViMTBkXHViMTBlXHViMTBmXHViMTEx''@;'; put 'put ''XHViMTE0XHViMTE1XHViMTE2XHViMTE3XHViMTFhXHViMTFlIiw0LCJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmQiLDYsIlx1YjEzNlx1YjEzYSIsNSwiXHViMTQyXHViMTQzXHViMTQ1XHViMTQ2XHViMTQ3XHViMTQ5Iiw2LCJcdWIxNTJcdWIxNTNcdWIxNTZcdWIxNTdc''@;'; put 'put ''dWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVcdWIxNWZcdWIxNjEiLDIyLCJcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODMiLDQsIlx1YjE4YVx1YjE4Y1x1YjE4ZVx1YjE4Zlx1YjE5MFx1YjE5MVx1YjE5NVx1YjE5Nlx1YjE5N1x1YjE5OVx1YjE5YVx1YjE5''@;'; put 'put ''Ylx1YjE5ZCJdLFsiODc0MSIsIlx1YjE5ZSIsOSwiXHViMWE5IiwxNV0sWyI4NzYxIiwiXHViMWI5IiwxOCwiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHViMWQzXHViMWQ1Il0sWyI4NzgxIiwiXHViMWQ2Iiw1LCJcdWIxZGVcdWIxZTAiLDcsIlx1YjFlYVx1YjFlYlx1YjFlZFx1''@;'; put 'put ''YjFlZVx1YjFlZlx1YjFmMSIsNywiXHViMWZhXHViMWZjXHViMWZlIiw1LCJcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIyMGQiLDYsIlx1YjIxNlx1YjIxOFx1YjIxYSIsNSwiXHViMjIxIiwxOCwiXHViMjM1Iiw2LCJcdWIyM2QiLDI2LCJcdWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIy''@;'; put 'put ''NWVcdWIyNWZcdWIyNjEiLDYsIlx1YjI2YSIsNF0sWyI4ODQxIiwiXHViMjZmIiw0LCJcdWIyNzYiLDUsIlx1YjI3ZCIsNiwiXHViMjg2XHViMjg3XHViMjg4XHViMjhhIiw0XSxbIjg4NjEiLCJcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWIiLDQsIlx1YjJhMlx1''@;'; put 'put ''YjJhNFx1YjJhN1x1YjJhOFx1YjJhOVx1YjJhYlx1YjJhZFx1YjJhZVx1YjJhZlx1YjJiMVx1YjJiMlx1YjJiM1x1YjJiNVx1YjJiNlx1YjJiNyJdLFsiODg4MSIsIlx1YjJiOCIsMTUsIlx1YjJjYVx1YjJjYlx1YjJjZFx1YjJjZVx1YjJjZlx1YjJkMVx1YjJkMyIsNCwiXHViMmRhXHViMmRj''@;'; put 'put ''XHViMmRlXHViMmRmXHViMmUwXHViMmUxXHViMmUzXHViMmU3XHViMmU5XHViMmVhXHViMmYwXHViMmYxXHViMmYyXHViMmY2XHViMmZjXHViMmZkXHViMmZlXHViMzAyXHViMzAzXHViMzA1XHViMzA2XHViMzA3XHViMzA5Iiw2LCJcdWIzMTJcdWIzMTYiLDUsIlx1YjMxZCIsNTQsIlx1YjM1''@;'; put 'put ''N1x1YjM1OVx1YjM1YVx1YjM1ZFx1YjM2MFx1YjM2MVx1YjM2Mlx1YjM2MyJdLFsiODk0MSIsIlx1YjM2Nlx1YjM2OFx1YjM2YVx1YjM2Y1x1YjM2ZFx1YjM2Zlx1YjM3Mlx1YjM3M1x1YjM3NVx1YjM3Nlx1YjM3N1x1YjM3OSIsNiwiXHViMzgyXHViMzg2Iiw1LCJcdWIzOGQiXSxbIjg5NjEi''@;'; put 'put ''LCJcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTUiLDEwLCJcdWIzYTIiLDUsIlx1YjNhOVx1YjNhYVx1YjNhYlx1YjNhZCJdLFsiODk4MSIsIlx1YjNhZSIsMjEsIlx1YjNjNlx1YjNjN1x1YjNjOVx1YjNjYVx1YjNjZFx1YjNjZlx1YjNkMVx1YjNkMlx1YjNkM1x1YjNkNlx1''@;'; put 'put ''YjNkOFx1YjNkYVx1YjNkY1x1YjNkZVx1YjNkZlx1YjNlMVx1YjNlMlx1YjNlM1x1YjNlNVx1YjNlNlx1YjNlN1x1YjNlOSIsMTgsIlx1YjNmZCIsMTgsIlx1YjQxMSIsNiwiXHViNDE5XHViNDFhXHViNDFiXHViNDFkXHViNDFlXHViNDFmXHViNDIxIiw2LCJcdWI0MmFcdWI0MmMiLDcsIlx1''@;'; put 'put ''YjQzNSIsMTVdLFsiOGE0MSIsIlx1YjQ0NSIsMTAsIlx1YjQ1Mlx1YjQ1M1x1YjQ1NVx1YjQ1Nlx1YjQ1N1x1YjQ1OSIsNiwiXHViNDYyXHViNDY0XHViNDY2Il0sWyI4YTYxIiwiXHViNDY3Iiw0LCJcdWI0NmQiLDE4LCJcdWI0ODFcdWI0ODIiXSxbIjhhODEiLCJcdWI0ODMiLDQsIlx1YjQ4''@;'; put 'put ''OSIsMTksIlx1YjQ5ZSIsNSwiXHViNGE1XHViNGE2XHViNGE3XHViNGE5XHViNGFhXHViNGFiXHViNGFkIiw3LCJcdWI0YjZcdWI0YjhcdWI0YmEiLDUsIlx1YjRjMVx1YjRjMlx1YjRjM1x1YjRjNVx1YjRjNlx1YjRjN1x1YjRjOSIsNiwiXHViNGQxXHViNGQyXHViNGQzXHViNGQ0XHViNGQ2''@;'; put 'put ''Iiw1LCJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0ZTJcdWI0ZTVcdWI0ZTciLDQsIlx1YjRlZVx1YjRmMFx1YjRmMiIsNSwiXHViNGY5IiwyNiwiXHViNTE2XHViNTE3XHViNTE5XHViNTFhXHViNTFkIl0sWyI4YjQxIiwiXHViNTFlIiw1LCJcdWI1MjZcdWI1MmIiLDQsIlx1YjUzMlx1YjUzM1x1''@;'; put 'put ''YjUzNVx1YjUzNlx1YjUzN1x1YjUzOSIsNiwiXHViNTQyXHViNTQ2Il0sWyI4YjYxIiwiXHViNTQ3XHViNTQ4XHViNTQ5XHViNTRhXHViNTRlXHViNTRmXHViNTUxXHViNTUyXHViNTUzXHViNTU1Iiw2LCJcdWI1NWVcdWI1NjIiLDhdLFsiOGI4MSIsIlx1YjU2YiIsNTIsIlx1YjVhMlx1YjVh''@;'; put 'put ''M1x1YjVhNVx1YjVhNlx1YjVhN1x1YjVhOVx1YjVhY1x1YjVhZFx1YjVhZVx1YjVhZlx1YjViMlx1YjViNiIsNCwiXHViNWJlXHViNWJmXHViNWMxXHViNWMyXHViNWMzXHViNWM1Iiw2LCJcdWI1Y2VcdWI1ZDIiLDUsIlx1YjVkOSIsMTgsIlx1YjVlZCIsMThdLFsiOGM0MSIsIlx1YjYwMCIs''@;'; put 'put ''MTUsIlx1YjYxMlx1YjYxM1x1YjYxNVx1YjYxNlx1YjYxN1x1YjYxOSIsNF0sWyI4YzYxIiwiXHViNjFlIiw2LCJcdWI2MjYiLDUsIlx1YjYyZCIsNiwiXHViNjM1Iiw1XSxbIjhjODEiLCJcdWI2M2IiLDEyLCJcdWI2NDkiLDI2LCJcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjkiLDUwLCJcdWI2''@;'; put 'put ''OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2YTUiLDUsIlx1YjZhZFx1YjZhZVx1YjZhZlx1YjZiMFx1YjZiMiIsMTZdLFsiOGQ0MSIsIlx1YjZjMyIsMTYsIlx1YjZkNSIsOF0sWyI4ZDYxIiwiXHViNmRlIiwxNywiXHViNmYxXHViNmYyXHViNmYzXHViNmY1XHViNmY2XHViNmY3XHVi''@;'; put 'put ''NmY5XHViNmZhIl0sWyI4ZDgxIiwiXHViNmZiIiw0LCJcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDYiLDMzLCJcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzEiLDYsIlx1YjczYVx1YjczYyIsNywiXHViNzQ1XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRhXHViNzRiXHViNzRkIiw2LCJcdWI3''@;'; put 'put ''NTYiLDksIlx1Yjc2MVx1Yjc2Mlx1Yjc2M1x1Yjc2NVx1Yjc2Nlx1Yjc2N1x1Yjc2OSIsNiwiXHViNzcyXHViNzc0XHViNzc2Iiw1LCJcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJcdWI3ODNcdWI3ODUiLDYsIlx1Yjc4ZVx1Yjc5M1x1Yjc5NFx1Yjc5NVx1Yjc5YVx1Yjc5Ylx1Yjc5ZFx1Yjc5''@;'; put 'put ''ZSJdLFsiOGU0MSIsIlx1Yjc5Zlx1YjdhMSIsNiwiXHViN2FhXHViN2FlIiw1LCJcdWI3YjZcdWI3YjdcdWI3YjkiLDhdLFsiOGU2MSIsIlx1YjdjMiIsNCwiXHViN2M4XHViN2NhIiwxOV0sWyI4ZTgxIiwiXHViN2RlIiwxMywiXHViN2VlXHViN2VmXHViN2YxXHViN2YyXHViN2YzXHViN2Y1''@;'; put 'put ''Iiw2LCJcdWI3ZmVcdWI4MDIiLDQsIlx1YjgwYVx1YjgwYlx1YjgwZFx1YjgwZVx1YjgwZlx1YjgxMSIsNiwiXHViODFhXHViODFjXHViODFlIiw1LCJcdWI4MjZcdWI4MjdcdWI4MjlcdWI4MmFcdWI4MmJcdWI4MmQiLDYsIlx1YjgzNlx1YjgzYSIsNSwiXHViODQxXHViODQyXHViODQzXHVi''@;'; put 'put ''ODQ1IiwxMSwiXHViODUyXHViODU0Iiw3LCJcdWI4NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjUiLDYsIlx1Yjg2ZVx1Yjg3MFx1Yjg3MiIsNSwiXHViODc5XHViODdhXHViODdiXHViODdkIiw3XSxbIjhmNDEiLCJcdWI4ODUiLDcsIlx1Yjg4ZSIsMTddLFsiOGY2MSIsIlx1Yjhh''@;'; put 'put ''MCIsNywiXHViOGE5Iiw2LCJcdWI4YjFcdWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjkiLDRdLFsiOGY4MSIsIlx1YjhiZVx1YjhiZlx1YjhjMlx1YjhjNFx1YjhjNiIsNSwiXHViOGNkXHViOGNlXHViOGNmXHViOGQxXHViOGQyXHViOGQzXHViOGQ1Iiw3LCJcdWI4ZGVcdWI4''@;'; put 'put ''ZTBcdWI4ZTIiLDUsIlx1YjhlYVx1YjhlYlx1YjhlZFx1YjhlZVx1YjhlZlx1YjhmMSIsNiwiXHViOGZhXHViOGZjXHViOGZlIiw1LCJcdWI5MDUiLDE4LCJcdWI5MTkiLDYsIlx1YjkyMSIsMjYsIlx1YjkzZVx1YjkzZlx1Yjk0MVx1Yjk0Mlx1Yjk0M1x1Yjk0NSIsNiwiXHViOTRkXHViOTRl''@;'; put 'put ''XHViOTUwXHViOTUyIiw1XSxbIjkwNDEiLCJcdWI5NWFcdWI5NWJcdWI5NWRcdWI5NWVcdWI5NWZcdWI5NjEiLDYsIlx1Yjk2YVx1Yjk2Y1x1Yjk2ZSIsNSwiXHViOTc2XHViOTc3XHViOTc5XHViOTdhXHViOTdiXHViOTdkIl0sWyI5MDYxIiwiXHViOTdlIiw1LCJcdWI5ODZcdWI5ODhcdWI5''@;'; put 'put ''OGJcdWI5OGNcdWI5OGYiLDE1XSxbIjkwODEiLCJcdWI5OWYiLDEyLCJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjUiLDYsIlx1YjliZVx1YjljMFx1YjljMiIsNSwiXHViOWNhXHViOWNiXHViOWNkXHViOWQzIiw0LCJcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJc''@;'; put 'put ''dWI5ZTZcdWI5ZTdcdWI5ZTlcdWI5ZWFcdWI5ZWJcdWI5ZWQiLDYsIlx1YjlmNlx1YjlmYiIsNCwiXHViYTAyIiw1LCJcdWJhMDkiLDExLCJcdWJhMTYiLDMzLCJcdWJhM2FcdWJhM2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDYiXSxbIjkxNDEiLCJc''@;'; put 'put ''dWJhNDdcdWJhNGFcdWJhNGNcdWJhNGZcdWJhNTBcdWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWQiLDYsIlx1YmE2Nlx1YmE2YSIsNV0sWyI5MTYxIiwiXHViYTcyXHViYTczXHViYTc1XHViYTc2XHViYTc3XHViYTc5Iiw5LCJcdWJhODZcdWJhODhcdWJh''@;'; put 'put ''ODlcdWJhOGFcdWJhOGJcdWJhOGQiLDVdLFsiOTE4MSIsIlx1YmE5MyIsMjAsIlx1YmFhYVx1YmFhZFx1YmFhZVx1YmFhZlx1YmFiMVx1YmFiMyIsNCwiXHViYWJhXHViYWJjXHViYWJlIiw1LCJcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzkiLDE0LCJcdWJhZGEiLDMzLCJcdWJhZmRcdWJhZmVc''@;'; put 'put ''dWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDUiLDcsIlx1YmIwZVx1YmIxMFx1YmIxMiIsNSwiXHViYjE5XHViYjFhXHViYjFiXHViYjFkXHViYjFlXHViYjFmXHViYjIxIiw2XSxbIjkyNDEiLCJcdWJiMjhcdWJiMmFcdWJiMmMiLDcsIlx1YmIzN1x1YmIzOVx1YmIzYVx1YmIzZiIsNCwi''@;'; put 'put ''XHViYjQ2XHViYjQ4XHViYjRhXHViYjRiXHViYjRjXHViYjRlXHViYjUxXHViYjUyIl0sWyI5MjYxIiwiXHViYjUzXHViYjU1XHViYjU2XHViYjU3XHViYjU5Iiw3LCJcdWJiNjJcdWJiNjQiLDcsIlx1YmI2ZCIsNF0sWyI5MjgxIiwiXHViYjcyIiwyMSwiXHViYjg5XHViYjhhXHViYjhiXHVi''@;'; put 'put ''YjhkXHViYjhlXHViYjhmXHViYjkxIiwxOCwiXHViYmE1XHViYmE2XHViYmE3XHViYmE5XHViYmFhXHViYmFiXHViYmFkIiw2LCJcdWJiYjVcdWJiYjZcdWJiYjgiLDcsIlx1YmJjMVx1YmJjMlx1YmJjM1x1YmJjNVx1YmJjNlx1YmJjN1x1YmJjOSIsNiwiXHViYmQxXHViYmQyXHViYmQ0Iiwz''@;'; put 'put ''NSwiXHViYmZhXHViYmZiXHViYmZkXHViYmZlXHViYzAxIl0sWyI5MzQxIiwiXHViYzAzIiw0LCJcdWJjMGFcdWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJjMTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZc''@;'; put 'put ''dWJjMzJcdWJjMzNcdWJjMzUiXSxbIjkzNjEiLCJcdWJjMzZcdWJjMzdcdWJjMzkiLDYsIlx1YmM0Mlx1YmM0Nlx1YmM0N1x1YmM0OFx1YmM0YVx1YmM0Ylx1YmM0ZVx1YmM0Zlx1YmM1MSIsOF0sWyI5MzgxIiwiXHViYzVhXHViYzViXHViYzVjXHViYzVlIiwzNywiXHViYzg2XHViYzg3XHVi''@;'; put 'put ''Yzg5XHViYzhhXHViYzhkXHViYzhmIiw0LCJcdWJjOTZcdWJjOThcdWJjOWIiLDQsIlx1YmNhMlx1YmNhM1x1YmNhNVx1YmNhNlx1YmNhOSIsNiwiXHViY2IyXHViY2I2Iiw1LCJcdWJjYmVcdWJjYmZcdWJjYzFcdWJjYzJcdWJjYzNcdWJjYzUiLDcsIlx1YmNjZVx1YmNkMlx1YmNkM1x1YmNk''@;'; put 'put ''NFx1YmNkNlx1YmNkN1x1YmNkOVx1YmNkYVx1YmNkYlx1YmNkZCIsMjIsIlx1YmNmN1x1YmNmOVx1YmNmYVx1YmNmYlx1YmNmZCJdLFsiOTQ0MSIsIlx1YmNmZSIsNSwiXHViZDA2XHViZDA4XHViZDBhIiw1LCJcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTUiLDhdLFsiOTQ2MSIsIlx1YmQxZSIs''@;'; put 'put ''NSwiXHViZDI1Iiw2LCJcdWJkMmQiLDEyXSxbIjk0ODEiLCJcdWJkM2EiLDUsIlx1YmQ0MSIsNiwiXHViZDRhXHViZDRiXHViZDRkXHViZDRlXHViZDRmXHViZDUxIiw2LCJcdWJkNWEiLDksIlx1YmQ2NVx1YmQ2Nlx1YmQ2N1x1YmQ2OSIsMjIsIlx1YmQ4Mlx1YmQ4M1x1YmQ4NVx1YmQ4Nlx1''@;'; put 'put ''YmQ4YiIsNCwiXHViZDkyXHViZDk0XHViZDk2XHViZDk3XHViZDk4XHViZDliXHViZDlkIiw2LCJcdWJkYTUiLDEwLCJcdWJkYjEiLDYsIlx1YmRiOSIsMjRdLFsiOTU0MSIsIlx1YmRkMlx1YmRkM1x1YmRkNlx1YmRkN1x1YmRkOVx1YmRkYVx1YmRkYlx1YmRkZCIsMTEsIlx1YmRlYSIsNSwi''@;'; put 'put ''XHViZGYxIl0sWyI5NTYxIiwiXHViZGYyXHViZGYzXHViZGY1XHViZGY2XHViZGY3XHViZGY5Iiw2LCJcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDYiLDUsIlx1YmUwZVx1YmUwZlx1YmUxMVx1YmUxMlx1YmUxMyJdLFsiOTU4MSIsIlx1YmUxNSIsNiwiXHViZTFlXHViZTIwIiwzNSwiXHViZTQ2''@;'; put 'put ''XHViZTQ3XHViZTQ5XHViZTRhXHViZTRiXHViZTRkXHViZTRmIiw0LCJcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmIiLDQsIlx1YmU3Mlx1YmU3NiIsNCwiXHViZTdlXHViZTdmXHViZTgxXHViZTgy''@;'; put 'put ''XHViZTgzXHViZTg1Iiw2LCJcdWJlOGVcdWJlOTIiLDUsIlx1YmU5YSIsMTMsIlx1YmVhOSIsMTRdLFsiOTY0MSIsIlx1YmViOCIsMjMsIlx1YmVkMlx1YmVkMyJdLFsiOTY2MSIsIlx1YmVkNVx1YmVkNlx1YmVkOSIsNiwiXHViZWUxXHViZWUyXHViZWU2Iiw1LCJcdWJlZWQiLDhdLFsiOTY4''@;'; put 'put ''MSIsIlx1YmVmNiIsMTAsIlx1YmYwMiIsNSwiXHViZjBhIiwxMywiXHViZjFhXHViZjFlIiwzMywiXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5Iiw2LCJcdWJmNTJcdWJmNTNcdWJmNTRcdWJmNTYiLDQ0XSxbIjk3NDEiLCJcdWJmODMiLDE2LCJcdWJmOTUiLDhdLFsiOTc2''@;'; put 'put ''MSIsIlx1YmY5ZSIsMTcsIlx1YmZiMSIsN10sWyI5NzgxIiwiXHViZmI5IiwxMSwiXHViZmM2Iiw1LCJcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDUiLDYsIlx1YmZkZFx1YmZkZVx1YmZlMFx1YmZlMiIsODksIlx1YzAzZFx1YzAzZVx1YzAzZiJdLFsiOTg0MSIsIlx1YzA0''@;'; put 'put ''MCIsMTYsIlx1YzA1MiIsNSwiXHVjMDU5XHVjMDVhXHVjMDViIl0sWyI5ODYxIiwiXHVjMDVkXHVjMDVlXHVjMDVmXHVjMDYxIiw2LCJcdWMwNmEiLDE1XSxbIjk4ODEiLCJcdWMwN2EiLDIxLCJcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTkiLDYsIlx1YzBhMlx1YzBhNFx1''@;'; put 'put ''YzBhNiIsNSwiXHVjMGFlXHVjMGIxXHVjMGIyXHVjMGI3Iiw0LCJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDEiLDYsIlx1YzBkYVx1YzBkZSIsNSwiXHVjMGU2XHVjMGU3XHVjMGU5XHVjMGVhXHVjMGViXHVj''@;'; put 'put ''MGVkIiw2LCJcdWMwZjZcdWMwZjhcdWMwZmEiLDUsIlx1YzEwMVx1YzEwMlx1YzEwM1x1YzEwNVx1YzEwNlx1YzEwN1x1YzEwOSIsNiwiXHVjMTExXHVjMTEyXHVjMTEzXHVjMTE0XHVjMTE2Iiw1LCJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmUiXSxb''@;'; put 'put ''Ijk5NDEiLCJcdWMxMzJcdWMxMzNcdWMxMzRcdWMxMzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMxNDEiLDYsIlx1YzE0YVx1YzE0ZSIsNSwiXHVjMTU2XHVjMTU3Il0sWyI5OTYxIiwiXHVjMTU5XHVjMTVhXHVjMTViXHVjMTVkIiw2LCJcdWMxNjZcdWMxNmEiLDUs''@;'; put 'put ''Ilx1YzE3MVx1YzE3Mlx1YzE3M1x1YzE3NVx1YzE3Nlx1YzE3N1x1YzE3OVx1YzE3YVx1YzE3YiJdLFsiOTk4MSIsIlx1YzE3YyIsOCwiXHVjMTg2Iiw1LCJcdWMxOGZcdWMxOTFcdWMxOTJcdWMxOTNcdWMxOTVcdWMxOTciLDQsIlx1YzE5ZVx1YzFhMFx1YzFhMlx1YzFhM1x1YzFhNFx1YzFh''@;'; put 'put ''Nlx1YzFhN1x1YzFhYVx1YzFhYlx1YzFhZFx1YzFhZVx1YzFhZlx1YzFiMSIsMTEsIlx1YzFiZSIsNSwiXHVjMWM1XHVjMWM2XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkIiw2LCJcdWMxZDVcdWMxZDZcdWMxZDkiLDYsIlx1YzFlMVx1YzFlMlx1YzFlM1x1YzFlNVx1YzFlNlx1YzFl''@;'; put 'put ''N1x1YzFlOSIsNiwiXHVjMWYyXHVjMWY0Iiw3LCJcdWMxZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDUiLDYsIlx1YzIwZVx1YzIxMFx1YzIxMiIsNSwiXHVjMjFhXHVjMjFiXHVjMjFkXHVjMjFlXHVjMjIxXHVjMjIyXHVjMjIzIl0sWyI5YTQxIiwiXHVjMjI0XHVjMjI1XHVjMjI2''@;'; put 'put ''XHVjMjI3XHVjMjJhXHVjMjJjXHVjMjJlXHVjMjMwXHVjMjMzXHVjMjM1IiwxNl0sWyI5YTYxIiwiXHVjMjQ2XHVjMjQ3XHVjMjQ5Iiw2LCJcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTkiLDYsIlx1YzI2MVx1YzI2Mlx1YzI2M1x1YzI2NFx1YzI2NiJdLFsiOWE4MSIsIlx1''@;'; put 'put ''YzI2NyIsNCwiXHVjMjZlXHVjMjZmXHVjMjcxXHVjMjcyXHVjMjczXHVjMjc1Iiw2LCJcdWMyN2VcdWMyODBcdWMyODIiLDUsIlx1YzI4YSIsNSwiXHVjMjkxIiw2LCJcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWUiLDUsIlx1YzJhNlx1YzJhN1x1YzJhOVx1YzJhYVx1YzJhYlx1YzJhZSIsNSwi''@;'; put 'put ''XHVjMmI2XHVjMmI4XHVjMmJhIiwzMywiXHVjMmRlXHVjMmRmXHVjMmUxXHVjMmUyXHVjMmU1Iiw1LCJcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVcdWMyZmZcdWMzMDEiLDYsIlx1YzMwYVx1YzMwYlx1YzMwZVx1YzMwZiJdLFsi''@;'; put 'put ''OWI0MSIsIlx1YzMxMFx1YzMxMVx1YzMxMlx1YzMxNlx1YzMxN1x1YzMxOVx1YzMxYVx1YzMxYlx1YzMxZCIsNiwiXHVjMzI2XHVjMzI3XHVjMzJhIiw4XSxbIjliNjEiLCJcdWMzMzMiLDE3LCJcdWMzNDYiLDddLFsiOWI4MSIsIlx1YzM0ZSIsMjUsIlx1YzM2YVx1YzM2Ylx1YzM2ZFx1YzM2''@;'; put 'put ''ZVx1YzM2Zlx1YzM3MVx1YzM3MyIsNCwiXHVjMzdhXHVjMzdiXHVjMzdlIiw1LCJcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGQiLDUwLCJcdWMzYzEiLDIyLCJcdWMzZGEiXSxbIjljNDEiLCJcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFcdWMzZTMiLDQsIlx1YzNl''@;'; put 'put ''YVx1YzNlYlx1YzNlY1x1YzNlZSIsNSwiXHVjM2Y2XHVjM2Y3XHVjM2Y5Iiw1XSxbIjljNjEiLCJcdWMzZmYiLDgsIlx1YzQwOSIsNiwiXHVjNDExIiw5XSxbIjljODEiLCJcdWM0MWIiLDgsIlx1YzQyNSIsNiwiXHVjNDJkXHVjNDJlXHVjNDJmXHVjNDMxXHVjNDMyXHVjNDMzXHVjNDM1Iiw2''@;'; put 'put ''LCJcdWM0M2UiLDksIlx1YzQ0OSIsMjYsIlx1YzQ2Nlx1YzQ2N1x1YzQ2OVx1YzQ2YVx1YzQ2Ylx1YzQ2ZCIsNiwiXHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhIiw1LCJcdWM0ODEiLDE4LCJcdWM0OTUiLDYsIlx1YzQ5ZCIsMTJdLFsiOWQ0MSIsIlx1YzRhYSIsMTMsIlx1YzRiOVx1YzRiYVx1''@;'; put 'put ''YzRiYlx1YzRiZCIsOF0sWyI5ZDYxIiwiXHVjNGM2IiwyNV0sWyI5ZDgxIiwiXHVjNGUwIiw4LCJcdWM0ZWEiLDUsIlx1YzRmMlx1YzRmM1x1YzRmNVx1YzRmNlx1YzRmN1x1YzRmOVx1YzRmYlx1YzRmY1x1YzRmZFx1YzRmZVx1YzUwMiIsOSwiXHVjNTBkXHVjNTBlXHVjNTBmXHVjNTExXHVj''@;'; put 'put ''NTEyXHVjNTEzXHVjNTE1Iiw2LCJcdWM1MWQiLDEwLCJcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzEiLDYsIlx1YzUzYVx1YzUzY1x1YzUzZSIsNSwiXHVjNTQ2XHVjNTQ3XHVjNTRiXHVjNTRmXHVjNTUwXHVjNTUxXHVjNTUyXHVjNTU2XHVjNTVhXHVjNTViXHVjNTVjXHVj''@;'; put 'put ''NTVmXHVjNTYyXHVjNTYzXHVjNTY1XHVjNTY2XHVjNTY3XHVjNTY5Iiw2LCJcdWM1NzJcdWM1NzYiLDUsIlx1YzU3ZVx1YzU3Zlx1YzU4MVx1YzU4Mlx1YzU4M1x1YzU4NVx1YzU4Nlx1YzU4OFx1YzU4OVx1YzU4YVx1YzU4Ylx1YzU4ZVx1YzU5MFx1YzU5Mlx1YzU5M1x1YzU5NCJdLFsiOWU0''@;'; put 'put ''MSIsIlx1YzU5Nlx1YzU5OVx1YzU5YVx1YzU5Ylx1YzU5ZFx1YzU5ZVx1YzU5Zlx1YzVhMSIsNywiXHVjNWFhIiw5LCJcdWM1YjYiXSxbIjllNjEiLCJcdWM1YjdcdWM1YmFcdWM1YmYiLDQsIlx1YzVjYlx1YzVjZFx1YzVjZlx1YzVkMlx1YzVkM1x1YzVkNVx1YzVkNlx1YzVkN1x1YzVkOSIs''@;'; put 'put ''NiwiXHVjNWUyXHVjNWU0XHVjNWU2XHVjNWU3Il0sWyI5ZTgxIiwiXHVjNWU4XHVjNWU5XHVjNWVhXHVjNWViXHVjNWVmXHVjNWYxXHVjNWYyXHVjNWYzXHVjNWY1XHVjNWY4XHVjNWY5XHVjNWZhXHVjNWZiXHVjNjAyXHVjNjAzXHVjNjA0XHVjNjA5XHVjNjBhXHVjNjBiXHVjNjBkXHVjNjBl''@;'; put 'put ''XHVjNjBmXHVjNjExIiw2LCJcdWM2MWFcdWM2MWQiLDYsIlx1YzYyNlx1YzYyN1x1YzYyOVx1YzYyYVx1YzYyYlx1YzYyZlx1YzYzMVx1YzYzMlx1YzYzNlx1YzYzOFx1YzYzYVx1YzYzY1x1YzYzZFx1YzYzZVx1YzYzZlx1YzY0Mlx1YzY0M1x1YzY0NVx1YzY0Nlx1YzY0N1x1YzY0OSIsNiwi''@;'; put 'put ''XHVjNjUyXHVjNjU2Iiw1LCJcdWM2NWVcdWM2NWZcdWM2NjEiLDEwLCJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzIiLDUsIlx1YzY3YVx1YzY3Ylx1YzY3ZFx1YzY3ZVx1YzY3Zlx1YzY4MSIsNiwiXHVjNjhhXHVjNjhjXHVjNjhlIiw1LCJcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJc''@;'; put 'put ''dWM2OWQiLDYsIlx1YzZhNiJdLFsiOWY0MSIsIlx1YzZhOFx1YzZhYSIsNSwiXHVjNmIyXHVjNmIzXHVjNmI1XHVjNmI2XHVjNmI3XHVjNmJiIiw0LCJcdWM2YzJcdWM2YzRcdWM2YzYiLDUsIlx1YzZjZSJdLFsiOWY2MSIsIlx1YzZjZlx1YzZkMVx1YzZkMlx1YzZkM1x1YzZkNSIsNiwiXHVj''@;'; put 'put ''NmRlXHVjNmRmXHVjNmUyIiw1LCJcdWM2ZWFcdWM2ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2ZjIiXSxbIjlmODEiLCJcdWM2ZjMiLDQsIlx1YzZmYVx1YzZmYlx1YzZmY1x1YzZmZSIsNSwiXHVjNzA2XHVjNzA3XHVjNzA5XHVjNzBhXHVjNzBiXHVjNzBkIiw2LCJcdWM3MTZcdWM3''@;'; put 'put ''MThcdWM3MWEiLDUsIlx1YzcyMlx1YzcyM1x1YzcyNVx1YzcyNlx1YzcyN1x1YzcyOSIsNiwiXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVjNzNmXHVjNzQxXHVjNzQyXHVjNzQzXHVjNzQ1Iiw0LCJcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3''@;'; put 'put ''NWFcdWM3NWJcdWM3NWRcdWM3NWVcdWM3NWZcdWM3NjEiLDYsIlx1Yzc2OVx1Yzc2YVx1Yzc2YyIsNywiXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVjNzdiXHVjNzdmXHVjNzgwXHVjNzgxXHVjNzgyXHVjNzg2XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVj''@;'; put 'put ''Nzk5XHVjNzliIiw0LCJcdWM3YTJcdWM3YTciLDQsIlx1YzdhZVx1YzdhZlx1YzdiMVx1YzdiMlx1YzdiM1x1YzdiNVx1YzdiNlx1YzdiNyJdLFsiYTA0MSIsIlx1YzdiOFx1YzdiOVx1YzdiYVx1YzdiYlx1YzdiZVx1YzdjMiIsNSwiXHVjN2NhXHVjN2NiXHVjN2NkXHVjN2NmXHVjN2QxIiw2''@;'; put 'put ''LCJcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGMiXSxbImEwNjEiLCJcdWM3ZGUiLDUsIlx1YzdlNVx1YzdlNlx1YzdlN1x1YzdlOVx1YzdlYVx1YzdlYlx1YzdlZCIsMTNdLFsiYTA4MSIsIlx1YzdmYiIsNCwiXHVjODAyXHVjODAzXHVjODA1XHVjODA2XHVjODA3XHVjODA5XHVjODBiIiw0LCJc''@;'; put 'put ''dWM4MTJcdWM4MTRcdWM4MTciLDQsIlx1YzgxZVx1YzgxZlx1YzgyMVx1YzgyMlx1YzgyM1x1YzgyNSIsNiwiXHVjODJlXHVjODMwXHVjODMyIiw1LCJcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2RcdWM4M2VcdWM4M2ZcdWM4NDEiLDYsIlx1Yzg0YVx1Yzg0Ylx1Yzg0ZSIsNSwiXHVjODU1Iiwy''@;'; put 'put ''NiwiXHVjODcyXHVjODczXHVjODc1XHVjODc2XHVjODc3XHVjODc5XHVjODdiIiw0LCJcdWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGUiLDUsIlx1Yzg5NSIsNywiXHVjODllXHVjOGEwXHVjOGEyXHVjOGEzXHVjOGE0Il0sWyJhMTQxIiwiXHVjOGE1XHVjOGE2XHVjOGE3XHVj''@;'; put 'put ''OGE5IiwxOCwiXHVjOGJlXHVjOGJmXHVjOGMwXHVjOGMxIl0sWyJhMTYxIiwiXHVjOGMyXHVjOGMzXHVjOGM1XHVjOGM2XHVjOGM3XHVjOGM5XHVjOGNhXHVjOGNiXHVjOGNkIiw2LCJcdWM4ZDZcdWM4ZDhcdWM4ZGEiLDUsIlx1YzhlMlx1YzhlM1x1YzhlNSJdLFsiYTE4MSIsIlx1YzhlNiIs''@;'; put 'put ''MTQsIlx1YzhmNiIsNSwiXHVjOGZlXHVjOGZmXHVjOTAxXHVjOTAyXHVjOTAzXHVjOTA3Iiw0LCJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRc''@;'; put 'put ''dTMwMTVcdTMwMDgiLDksIlx4YjFceGQ3XHhmN1x1MjI2MFx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdTIxMmJcdWZmZTBcdWZmZTFcdWZmZTVcdTI2NDJcdTI2NDBcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJceGE3XHUy''@;'; put 'put ''MDNiXHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUyMTk0XHUzMDEzXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJj''@;'; put 'put ''XHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5XHUyMjI3XHUyMjI4XHVmZmUyIl0sWyJhMjQxIiwiXHVjOTEwXHVjOTEyIiw1LCJcdWM5MTkiLDE4XSxbImEyNjEiLCJcdWM5MmQiLDYsIlx1YzkzNSIsMThdLFsiYTI4MSIsIlx1Yzk0OCIsNywiXHVjOTUy''@;'; put 'put ''XHVjOTUzXHVjOTU1XHVjOTU2XHVjOTU3XHVjOTU5Iiw2LCJcdWM5NjJcdWM5NjQiLDcsIlx1Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhcdTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4YmZcdTAyZDBcdTIyMmVc''@;'; put 'put ''dTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMwXHUyNWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUyNjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQxXHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUyNWE2XHUyNWE5XHUyNjY4''@;'; put 'put ''XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhiNlx1MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNjN1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4YWUiXSxbImEzNDEiLCJc''@;'; put 'put ''dWM5NzFcdWM5NzJcdWM5NzNcdWM5NzUiLDYsIlx1Yzk3ZCIsMTAsIlx1Yzk4YVx1Yzk4Ylx1Yzk4ZFx1Yzk4ZVx1Yzk4ZiJdLFsiYTM2MSIsIlx1Yzk5MSIsNiwiXHVjOTlhXHVjOTljXHVjOTllIiwxNl0sWyJhMzgxIiwiXHVjOWFmIiwxNiwiXHVjOWMyXHVjOWMzXHVjOWM1XHVjOWM2XHVj''@;'; put 'put ''OWM5XHVjOWNiIiw0LCJcdWM5ZDJcdWM5ZDRcdWM5ZDdcdWM5ZDhcdWM5ZGJcdWZmMDEiLDU4LCJcdWZmZTZcdWZmM2QiLDMyLCJcdWZmZTMiXSxbImE0NDEiLCJcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjIi''@;'; put 'put ''LDUsIlx1YzlmYVx1YzlmYlx1YzlmZFx1YzlmZVx1YzlmZlx1Y2EwMVx1Y2EwMlx1Y2EwM1x1Y2EwNCJdLFsiYTQ2MSIsIlx1Y2EwNVx1Y2EwNlx1Y2EwN1x1Y2EwYVx1Y2EwZSIsNSwiXHVjYTE1XHVjYTE2XHVjYTE3XHVjYTE5IiwxMl0sWyJhNDgxIiwiXHVjYTI2XHVjYTI3XHVjYTI4XHVj''@;'; put 'put ''YTJhIiwyOCwiXHUzMTMxIiw5M10sWyJhNTQxIiwiXHVjYTQ3Iiw0LCJcdWNhNGVcdWNhNGZcdWNhNTFcdWNhNTJcdWNhNTNcdWNhNTUiLDYsIlx1Y2E1ZVx1Y2E2MiIsNSwiXHVjYTY5XHVjYTZhIl0sWyJhNTYxIiwiXHVjYTZiIiwxNywiXHVjYTdlIiw1LCJcdWNhODVcdWNhODYiXSxbImE1''@;'; put 'put ''ODEiLCJcdWNhODciLDE2LCJcdWNhOTkiLDE0LCJcdTIxNzAiLDldLFsiYTViMCIsIlx1MjE2MCIsOV0sWyJhNWMxIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbImE1ZTEiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiYTY0MSIsIlx1Y2FhOCIsMTksIlx1Y2FiZVx1Y2FiZlx1Y2FjMVx1''@;'; put 'put ''Y2FjMlx1Y2FjM1x1Y2FjNSJdLFsiYTY2MSIsIlx1Y2FjNiIsNSwiXHVjYWNlXHVjYWQwXHVjYWQyXHVjYWQ0XHVjYWQ1XHVjYWQ2XHVjYWQ3XHVjYWRhIiw1LCJcdWNhZTEiLDZdLFsiYTY4MSIsIlx1Y2FlOFx1Y2FlOVx1Y2FlYVx1Y2FlYlx1Y2FlZCIsNiwiXHVjYWY1IiwxOCwiXHVjYjA5''@;'; put 'put ''XHVjYjBhXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUy''@;'; put 'put ''NTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyXHUyNTEyXHUyNTExXHUyNTFhXHUyNTE5XHUyNTE2XHUyNTE1XHUyNTBlXHUyNTBkXHUyNTFlXHUyNTFmXHUyNTIxXHUyNTIyXHUyNTI2XHUyNTI3XHUyNTI5XHUyNTJhXHUyNTJkXHUyNTJlXHUyNTMxXHUyNTMyXHUyNTM1XHUyNTM2''@;'; put 'put ''XHUyNTM5XHUyNTNhXHUyNTNkXHUyNTNlXHUyNTQwXHUyNTQxXHUyNTQzIiw3XSxbImE3NDEiLCJcdWNiMGIiLDQsIlx1Y2IxMVx1Y2IxMlx1Y2IxM1x1Y2IxNVx1Y2IxNlx1Y2IxN1x1Y2IxOSIsNiwiXHVjYjIyIiw3XSxbImE3NjEiLCJcdWNiMmEiLDIyLCJcdWNiNDJcdWNiNDNcdWNiNDQi''@;'; put 'put ''XSxbImE3ODEiLCJcdWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTEiLDYsIlx1Y2I1YVx1Y2I1Ylx1Y2I1Y1x1Y2I1ZSIsNSwiXHVjYjY1Iiw3LCJcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMzYTNcdTMzYTRcdTMzYTVc''@;'; put 'put ''dTMzYTZcdTMzOTkiLDksIlx1MzNjYVx1MzM4ZFx1MzM4ZVx1MzM4Zlx1MzNjZlx1MzM4OFx1MzM4OVx1MzNjOFx1MzNhN1x1MzNhOFx1MzNiMCIsOSwiXHUzMzgwIiw0LCJcdTMzYmEiLDUsIlx1MzM5MCIsNCwiXHUyMTI2XHUzM2MwXHUzM2MxXHUzMzhhXHUzMzhiXHUzMzhjXHUzM2Q2XHUz''@;'; put 'put ''M2M1XHUzM2FkXHUzM2FlXHUzM2FmXHUzM2RiXHUzM2E5XHUzM2FhXHUzM2FiXHUzM2FjXHUzM2RkXHUzM2QwXHUzM2QzXHUzM2MzXHUzM2M5XHUzM2RjXHUzM2M2Il0sWyJhODQxIiwiXHVjYjZkIiwxMCwiXHVjYjdhIiwxNF0sWyJhODYxIiwiXHVjYjg5IiwxOCwiXHVjYjlkIiw2XSxbImE4''@;'; put 'put ''ODEiLCJcdWNiYTQiLDE5LCJcdWNiYjkiLDExLCJceGM2XHhkMFx4YWFcdTAxMjYiXSxbImE4YTYiLCJcdTAxMzIiXSxbImE4YTgiLCJcdTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4ZGVcdTAxNjZcdTAxNGEiXSxbImE4YjEiLCJcdTMyNjAiLDI3LCJcdTI0ZDAiLDI1LCJcdTI0NjAiLDE0''@;'; put 'put ''LCJceGJkXHUyMTUzXHUyMTU0XHhiY1x4YmVcdTIxNWJcdTIxNWNcdTIxNWRcdTIxNWUiXSxbImE5NDEiLCJcdWNiYzUiLDE0LCJcdWNiZDUiLDEwXSxbImE5NjEiLCJcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWEiLDE4XSxbImE5ODEiLCJcdWNiZmQi''@;'; put 'put ''LDE0LCJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJcdWNjMTNcdWNjMTUiLDYsIlx1Y2MxZVx1Y2MxZlx1Y2MyMFx1Y2MyM1x1Y2MyNFx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQwXHUwMTQyXHhmOFx1MDE1M1x4ZGZceGZlXHUwMTY3XHUwMTRiXHUwMTQ5XHUz''@;'; put 'put ''MjAwIiwyNywiXHUyNDljIiwyNSwiXHUyNDc0IiwxNCwiXHhiOVx4YjJceGIzXHUyMDc0XHUyMDdmXHUyMDgxXHUyMDgyXHUyMDgzXHUyMDg0Il0sWyJhYTQxIiwiXHVjYzI1XHVjYzI2XHVjYzJhXHVjYzJiXHVjYzJkXHVjYzJmXHVjYzMxIiw2LCJcdWNjM2FcdWNjM2YiLDQsIlx1Y2M0Nlx1''@;'; put 'put ''Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1Y2M0ZSJdLFsiYWE2MSIsIlx1Y2M0ZiIsNCwiXHVjYzU2XHVjYzVhIiw1LCJcdWNjNjFcdWNjNjJcdWNjNjNcdWNjNjVcdWNjNjdcdWNjNjkiLDYsIlx1Y2M3MVx1Y2M3MiJdLFsiYWE4MSIsIlx1Y2M3M1x1Y2M3NFx1Y2M3NiIsMjksIlx1''@;'; put 'put ''MzA0MSIsODJdLFsiYWI0MSIsIlx1Y2M5NFx1Y2M5NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2NhMSIsNiwiXHVjY2FhXHVjY2FlIiw1LCJcdWNjYjZcdWNjYjdcdWNjYjkiXSxbImFiNjEiLCJcdWNjYmFcdWNjYmJcdWNjYmQiLDYsIlx1Y2NjNlx1Y2Nj''@;'; put 'put ''OFx1Y2NjYSIsNSwiXHVjY2QxXHVjY2QyXHVjY2QzXHVjY2Q1Iiw1XSxbImFiODEiLCJcdWNjZGIiLDgsIlx1Y2NlNSIsNiwiXHVjY2VkXHVjY2VlXHVjY2VmXHVjY2YxIiwxMiwiXHUzMGExIiw4NV0sWyJhYzQxIiwiXHVjY2ZlXHVjY2ZmXHVjZDAwXHVjZDAyIiw1LCJcdWNkMGFcdWNkMGJc''@;'; put 'put ''dWNkMGRcdWNkMGVcdWNkMGZcdWNkMTEiLDYsIlx1Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMCJdLFsiYWM2MSIsIlx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZCIsMTEsIlx1Y2QzYSIsNF0sWyJhYzgxIiwiXHVjZDNmIiwy''@;'; put 'put ''OCwiXHVjZDVkXHVjZDVlXHVjZDVmXHUwNDEwIiw1LCJcdTA0MDFcdTA0MTYiLDI1XSxbImFjZDEiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsMjVdLFsiYWQ0MSIsIlx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NSIsNiwiXHVjZDZlXHVjZDcwXHVjZDcyIiw1LCJcdWNkNzkiLDddLFsiYWQ2''@;'; put 'put ''MSIsIlx1Y2Q4MSIsNiwiXHVjZDg5IiwxMCwiXHVjZDk2XHVjZDk3XHVjZDk5XHVjZDlhXHVjZDliXHVjZDlkXHVjZDllXHVjZDlmIl0sWyJhZDgxIiwiXHVjZGEwXHVjZGExXHVjZGEyXHVjZGEzXHVjZGE2XHVjZGE4XHVjZGFhIiw1LCJcdWNkYjEiLDE4LCJcdWNkYzUiXSxbImFlNDEiLCJc''@;'; put 'put ''dWNkYzYiLDUsIlx1Y2RjZFx1Y2RjZVx1Y2RjZlx1Y2RkMSIsMTZdLFsiYWU2MSIsIlx1Y2RlMiIsNSwiXHVjZGU5XHVjZGVhXHVjZGViXHVjZGVkXHVjZGVlXHVjZGVmXHVjZGYxIiw2LCJcdWNkZmFcdWNkZmNcdWNkZmUiLDRdLFsiYWU4MSIsIlx1Y2UwM1x1Y2UwNVx1Y2UwNlx1Y2UwN1x1''@;'; put 'put ''Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZCIsNiwiXHVjZTE1XHVjZTE2XHVjZTE3XHVjZTE4XHVjZTFhIiw1LCJcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmIiXSxbImFmNDEiLCJcdWNlMmNcdWNlMmRcdWNlMmVcdWNlMmZcdWNlMzJcdWNlMzRcdWNlMzYi''@;'; put 'put ''LDE5XSxbImFmNjEiLCJcdWNlNGEiLDEzLCJcdWNlNWFcdWNlNWJcdWNlNWRcdWNlNWVcdWNlNjIiLDUsIlx1Y2U2YVx1Y2U2YyJdLFsiYWY4MSIsIlx1Y2U2ZSIsNSwiXHVjZTc2XHVjZTc3XHVjZTc5XHVjZTdhXHVjZTdiXHVjZTdkIiw2LCJcdWNlODZcdWNlODhcdWNlOGEiLDUsIlx1Y2U5''@;'; put 'put ''Mlx1Y2U5M1x1Y2U5NVx1Y2U5Nlx1Y2U5N1x1Y2U5OSJdLFsiYjA0MSIsIlx1Y2U5YSIsNSwiXHVjZWEyXHVjZWE2Iiw1LCJcdWNlYWUiLDEyXSxbImIwNjEiLCJcdWNlYmIiLDUsIlx1Y2VjMiIsMTldLFsiYjA4MSIsIlx1Y2VkNiIsMTMsIlx1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2Vl''@;'; put 'put ''ZCIsNiwiXHVjZWY2XHVjZWZhIiw1LCJcdWFjMDBcdWFjMDFcdWFjMDRcdWFjMDdcdWFjMDhcdWFjMDlcdWFjMGFcdWFjMTAiLDcsIlx1YWMxOSIsNCwiXHVhYzIwXHVhYzI0XHVhYzJjXHVhYzJkXHVhYzJmXHVhYzMwXHVhYzMxXHVhYzM4XHVhYzM5XHVhYzNjXHVhYzQwXHVhYzRiXHVhYzRk''@;'; put 'put ''XHVhYzU0XHVhYzU4XHVhYzVjXHVhYzcwXHVhYzcxXHVhYzc0XHVhYzc3XHVhYzc4XHVhYzdhXHVhYzgwXHVhYzgxXHVhYzgzXHVhYzg0XHVhYzg1XHVhYzg2XHVhYzg5XHVhYzhhXHVhYzhiXHVhYzhjXHVhYzkwXHVhYzk0XHVhYzljXHVhYzlkXHVhYzlmXHVhY2EwXHVhY2ExXHVhY2E4XHVh''@;'; put 'put ''Y2E5XHVhY2FhXHVhY2FjXHVhY2FmXHVhY2IwXHVhY2I4XHVhY2I5XHVhY2JiXHVhY2JjXHVhY2JkXHVhY2MxXHVhY2M0XHVhY2M4XHVhY2NjXHVhY2Q1XHVhY2Q3XHVhY2UwXHVhY2UxXHVhY2U0XHVhY2U3XHVhY2U4XHVhY2VhXHVhY2VjXHVhY2VmXHVhY2YwXHVhY2YxXHVhY2YzXHVhY2Y1''@;'; put 'put ''XHVhY2Y2XHVhY2ZjXHVhY2ZkXHVhZDAwXHVhZDA0XHVhZDA2Il0sWyJiMTQxIiwiXHVjZjAyXHVjZjAzXHVjZjA1XHVjZjA2XHVjZjA3XHVjZjA5Iiw2LCJcdWNmMTJcdWNmMTRcdWNmMTYiLDUsIlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1Y2YyMlx1Y2YyMyJdLFsiYjE2MSIsIlx1Y2Yy''@;'; put 'put ''NSIsNiwiXHVjZjJlXHVjZjMyIiw1LCJcdWNmMzkiLDExXSxbImIxODEiLCJcdWNmNDUiLDE0LCJcdWNmNTZcdWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWQiLDYsIlx1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQwZlx1YWQxMVx1YWQxOFx1YWQxY1x1''@;'; put 'put ''YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQzNFx1YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1MFx1YWQ1NFx1YWQ1OFx1YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3''@;'; put 'put ''Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1YWQ4Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1YWRjNFx1YWRjOFx1YWRkMFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRmZlx1YWUwMFx1YWUwMVx1YWUwOFx1''@;'; put 'put ''YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUzMFx1YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0M1x1YWU0NVx1YWU0Nlx1YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1YWU1Zlx1YWU2MFx1YWU2MVx1YWU2''@;'; put 'put ''NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1YWU3OCJdLFsiYjI0MSIsIlx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1Y2Y3Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OSIsNiwiXHVjZjgxXHVjZjgyXHVjZjgzXHVjZjg0XHVjZjg2Iiw1LCJcdWNmOGQiXSxbImIyNjEiLCJcdWNmOGUiLDE4''@;'; put 'put ''LCJcdWNmYTIiLDUsIlx1Y2ZhOSJdLFsiYjI4MSIsIlx1Y2ZhYSIsNSwiXHVjZmIxIiwxOCwiXHVjZmM1Iiw2LCJcdWFlNzlcdWFlN2JcdWFlN2NcdWFlN2RcdWFlODRcdWFlODVcdWFlOGNcdWFlYmNcdWFlYmRcdWFlYmVcdWFlYzBcdWFlYzRcdWFlY2NcdWFlY2RcdWFlY2ZcdWFlZDBcdWFl''@;'; put 'put ''ZDFcdWFlZDhcdWFlZDlcdWFlZGNcdWFlZThcdWFlZWJcdWFlZWRcdWFlZjRcdWFlZjhcdWFlZmNcdWFmMDdcdWFmMDhcdWFmMGRcdWFmMTBcdWFmMmNcdWFmMmRcdWFmMzBcdWFmMzJcdWFmMzRcdWFmM2NcdWFmM2RcdWFmM2ZcdWFmNDFcdWFmNDJcdWFmNDNcdWFmNDhcdWFmNDlcdWFmNTBc''@;'; put 'put ''dWFmNWNcdWFmNWRcdWFmNjRcdWFmNjVcdWFmNzlcdWFmODBcdWFmODRcdWFmODhcdWFmOTBcdWFmOTFcdWFmOTVcdWFmOWNcdWFmYjhcdWFmYjlcdWFmYmNcdWFmYzBcdWFmYzdcdWFmYzhcdWFmYzlcdWFmY2JcdWFmY2RcdWFmY2VcdWFmZDRcdWFmZGNcdWFmZThcdWFmZTlcdWFmZjBcdWFm''@;'; put 'put ''ZjFcdWFmZjRcdWFmZjhcdWIwMDBcdWIwMDFcdWIwMDRcdWIwMGNcdWIwMTBcdWIwMTRcdWIwMWNcdWIwMWRcdWIwMjhcdWIwNDRcdWIwNDVcdWIwNDhcdWIwNGFcdWIwNGNcdWIwNGVcdWIwNTNcdWIwNTRcdWIwNTVcdWIwNTdcdWIwNTkiXSxbImIzNDEiLCJcdWNmY2MiLDE5LCJcdWNmZTJc''@;'; put 'put ''dWNmZTNcdWNmZTVcdWNmZTZcdWNmZTdcdWNmZTkiXSxbImIzNjEiLCJcdWNmZWEiLDUsIlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNiIsNSwiXHVjZmZkXHVjZmZlXHVjZmZmXHVkMDAxXHVkMDAyXHVkMDAzXHVkMDA1Iiw1XSxbImIzODEiLCJcdWQwMGIiLDUsIlx1ZDAxMiIsNSwiXHVkMDE5IiwxOSwi''@;'; put 'put ''XHViMDVkXHViMDdjXHViMDdkXHViMDgwXHViMDg0XHViMDhjXHViMDhkXHViMDhmXHViMDkxXHViMDk4XHViMDk5XHViMDlhXHViMDljXHViMDlmXHViMGEwXHViMGExXHViMGEyXHViMGE4XHViMGE5XHViMGFiIiw0LCJcdWIwYjFcdWIwYjNcdWIwYjRcdWIwYjVcdWIwYjhcdWIwYmNcdWIw''@;'; put 'put ''YzRcdWIwYzVcdWIwYzdcdWIwYzhcdWIwYzlcdWIwZDBcdWIwZDFcdWIwZDRcdWIwZDhcdWIwZTBcdWIwZTVcdWIxMDhcdWIxMDlcdWIxMGJcdWIxMGNcdWIxMTBcdWIxMTJcdWIxMTNcdWIxMThcdWIxMTlcdWIxMWJcdWIxMWNcdWIxMWRcdWIxMjNcdWIxMjRcdWIxMjVcdWIxMjhcdWIxMmNc''@;'; put 'put ''dWIxMzRcdWIxMzVcdWIxMzdcdWIxMzhcdWIxMzlcdWIxNDBcdWIxNDFcdWIxNDRcdWIxNDhcdWIxNTBcdWIxNTFcdWIxNTRcdWIxNTVcdWIxNThcdWIxNWNcdWIxNjBcdWIxNzhcdWIxNzlcdWIxN2NcdWIxODBcdWIxODJcdWIxODhcdWIxODlcdWIxOGJcdWIxOGRcdWIxOTJcdWIxOTNcdWIx''@;'; put 'put ''OTRcdWIxOThcdWIxOWNcdWIxYThcdWIxY2NcdWIxZDBcdWIxZDRcdWIxZGNcdWIxZGQiXSxbImI0NDEiLCJcdWQwMmUiLDUsIlx1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1ZDAzYlx1ZDAzZCIsNiwiXHVkMDQ2XHVkMDQ4XHVkMDRhIiw1XSxbImI0NjEiLCJcdWQwNTFcdWQwNTJcdWQwNTNc''@;'; put 'put ''dWQwNTVcdWQwNTZcdWQwNTdcdWQwNTkiLDYsIlx1ZDA2MSIsMTAsIlx1ZDA2ZVx1ZDA2ZiJdLFsiYjQ4MSIsIlx1ZDA3MVx1ZDA3Mlx1ZDA3M1x1ZDA3NSIsNiwiXHVkMDdlXHVkMDdmXHVkMDgwXHVkMDgyIiwxOCwiXHViMWRmXHViMWU4XHViMWU5XHViMWVjXHViMWYwXHViMWY5XHViMWZi''@;'; put 'put ''XHViMWZkXHViMjA0XHViMjA1XHViMjA4XHViMjBiXHViMjBjXHViMjE0XHViMjE1XHViMjE3XHViMjE5XHViMjIwXHViMjM0XHViMjNjXHViMjU4XHViMjVjXHViMjYwXHViMjY4XHViMjY5XHViMjc0XHViMjc1XHViMjdjXHViMjg0XHViMjg1XHViMjg5XHViMjkwXHViMjkxXHViMjk0XHVi''@;'; put 'put ''Mjk4XHViMjk5XHViMjlhXHViMmEwXHViMmExXHViMmEzXHViMmE1XHViMmE2XHViMmFhXHViMmFjXHViMmIwXHViMmI0XHViMmM4XHViMmM5XHViMmNjXHViMmQwXHViMmQyXHViMmQ4XHViMmQ5XHViMmRiXHViMmRkXHViMmUyXHViMmU0XHViMmU1XHViMmU2XHViMmU4XHViMmViIiw0LCJc''@;'; put 'put ''dWIyZjNcdWIyZjRcdWIyZjVcdWIyZjciLDQsIlx1YjJmZlx1YjMwMFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NSJdLFsiYjU0MSIs''@;'; put 'put ''Ilx1ZDA5NSIsMTQsIlx1ZDBhNlx1ZDBhN1x1ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZCIsNV0sWyJiNTYxIiwiXHVkMGIzXHVkMGI2XHVkMGI4XHVkMGJhIiw1LCJcdWQwYzJcdWQwYzNcdWQwYzVcdWQwYzZcdWQwYzdcdWQwY2EiLDUsIlx1ZDBkMlx1ZDBkNiIsNF0sWyJiNTgxIiwiXHVkMGRi''@;'; put 'put ''XHVkMGRlXHVkMGRmXHVkMGUxXHVkMGUyXHVkMGUzXHVkMGU1Iiw2LCJcdWQwZWVcdWQwZjIiLDUsIlx1ZDBmOSIsMTEsIlx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1YjM4NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5''@;'; put 'put ''NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1YjNjNFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQxOFx1YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1''@;'; put 'put ''YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1NFx1YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1YjRkMFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRl''@;'; put 'put ''MFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1YjRlZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUzOCJdLFsiYjY0MSIsIlx1ZDEwNSIsNywiXHVk''@;'; put 'put ''MTBlIiwxN10sWyJiNjYxIiwiXHVkMTIwIiwxNSwiXHVkMTMyXHVkMTMzXHVkMTM1XHVkMTM2XHVkMTM3XHVkMTM5XHVkMTNiXHVkMTNjXHVkMTNkXHVkMTNlIl0sWyJiNjgxIiwiXHVkMTNmXHVkMTQyXHVkMTQ2Iiw1LCJcdWQxNGVcdWQxNGZcdWQxNTFcdWQxNTJcdWQxNTNcdWQxNTUiLDYs''@;'; put 'put ''Ilx1ZDE1ZVx1ZDE2MFx1ZDE2MiIsNSwiXHVkMTY5XHVkMTZhXHVkMTZiXHVkMTZkXHViNTQwXHViNTQxXHViNTQzXHViNTQ0XHViNTQ1XHViNTRiXHViNTRjXHViNTRkXHViNTUwXHViNTU0XHViNTVjXHViNTVkXHViNTVmXHViNTYwXHViNTYxXHViNWEwXHViNWExXHViNWE0XHViNWE4XHVi''@;'; put 'put ''NWFhXHViNWFiXHViNWIwXHViNWIxXHViNWIzXHViNWI0XHViNWI1XHViNWJiXHViNWJjXHViNWJkXHViNWMwXHViNWM0XHViNWNjXHViNWNkXHViNWNmXHViNWQwXHViNWQxXHViNWQ4XHViNWVjXHViNjEwXHViNjExXHViNjE0XHViNjE4XHViNjI1XHViNjJjXHViNjM0XHViNjQ4XHViNjY0''@;'; put 'put ''XHViNjY4XHViNjljXHViNjlkXHViNmEwXHViNmE0XHViNmFiXHViNmFjXHViNmIxXHViNmQ0XHViNmYwXHViNmY0XHViNmY4XHViNzAwXHViNzAxXHViNzA1XHViNzI4XHViNzI5XHViNzJjXHViNzJmXHViNzMwXHViNzM4XHViNzM5XHViNzNiXHViNzQ0XHViNzQ4XHViNzRjXHViNzU0XHVi''@;'; put 'put ''NzU1XHViNzYwXHViNzY0XHViNzY4XHViNzcwXHViNzcxXHViNzczXHViNzc1XHViNzdjXHViNzdkXHViNzgwXHViNzg0XHViNzhjXHViNzhkXHViNzhmXHViNzkwXHViNzkxXHViNzkyXHViNzk2XHViNzk3Il0sWyJiNzQxIiwiXHVkMTZlIiwxMywiXHVkMTdkIiw2LCJcdWQxODVcdWQxODZc''@;'; put 'put ''dWQxODdcdWQxODlcdWQxOGEiXSxbImI3NjEiLCJcdWQxOGIiLDIwLCJcdWQxYTJcdWQxYTNcdWQxYTVcdWQxYTZcdWQxYTciXSxbImI3ODEiLCJcdWQxYTkiLDYsIlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1ZDFiOFx1ZDFiOVx1ZDFiYlx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMSIsMTQs''@;'; put 'put ''Ilx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1YjdhOFx1YjdhOVx1YjdhYlx1YjdhY1x1YjdhZFx1YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1YjdjOVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1YjgwOVx1YjgwY1x1''@;'; put 'put ''YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1YjgxZFx1YjgyNFx1YjgyNVx1YjgyOFx1YjgyY1x1YjgzNFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3MVx1Yjg3OFx1Yjg3''@;'; put 'put ''Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1YjhiOFx1YjhjMFx1YjhjMVx1YjhjM1x1YjhjNVx1YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1YjhkZlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1YjkyMFx1YjkzY1x1''@;'; put 'put ''YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0Zlx1Yjk1MVx1Yjk1OFx1Yjk1OVx1Yjk1Y1x1Yjk2MFx1Yjk2OFx1Yjk2OSJdLFsiYjg0MSIsIlx1ZDFkMCIsNywiXHVkMWQ5IiwxN10sWyJiODYxIiwiXHVkMWViIiw4LCJcdWQxZjVcdWQxZjZcdWQxZjdcdWQxZjkiLDEzXSxbImI4ODEiLCJc''@;'; put 'put ''dWQyMDhcdWQyMGEiLDUsIlx1ZDIxMSIsMjQsIlx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1Yjk3Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1Yjlj''@;'; put 'put ''OVx1YjljY1x1YjljZSIsNCwiXHViOWQ4XHViOWQ5XHViOWRiXHViOWRkXHViOWRlXHViOWUxXHViOWUzXHViOWU0XHViOWU1XHViOWU4XHViOWVjXHViOWY0XHViOWY1XHViOWY3XHViOWY4XHViOWY5XHViOWZhXHViYTAwXHViYTAxXHViYTA4XHViYTE1XHViYTM4XHViYTM5XHViYTNjXHVi''@;'; put 'put ''YTQwXHViYTQyXHViYTQ4XHViYTQ5XHViYTRiXHViYTRkXHViYTRlXHViYTUzXHViYTU0XHViYTU1XHViYTU4XHViYTVjXHViYTY0XHViYTY1XHViYTY3XHViYTY4XHViYTY5XHViYTcwXHViYTcxXHViYTc0XHViYTc4XHViYTgzXHViYTg0XHViYTg1XHViYTg3XHViYThjXHViYWE4XHViYWE5''@;'; put 'put ''XHViYWFiXHViYWFjXHViYWIwXHViYWIyXHViYWI4XHViYWI5XHViYWJiXHViYWJkXHViYWM0XHViYWM4XHViYWQ4XHViYWQ5XHViYWZjIl0sWyJiOTQxIiwiXHVkMjJhXHVkMjJiXHVkMjJlXHVkMjJmXHVkMjMxXHVkMjMyXHVkMjMzXHVkMjM1Iiw2LCJcdWQyM2VcdWQyNDBcdWQyNDIiLDUs''@;'; put 'put ''Ilx1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0YyJdLFsiYjk2MSIsIlx1ZDI0ZCIsMTQsIlx1ZDI1ZCIsNiwiXHVkMjY1XHVkMjY2XHVkMjY3XHVkMjY4Il0sWyJiOTgxIiwiXHVkMjY5IiwyMiwiXHVkMjgyXHVkMjgzXHVkMjg1XHVkMjg2XHVkMjg3XHVkMjg5XHVkMjhhXHVkMjhiXHVkMjhjXHVi''@;'; put 'put ''YjAwXHViYjA0XHViYjBkXHViYjBmXHViYjExXHViYjE4XHViYjFjXHViYjIwXHViYjI5XHViYjJiXHViYjM0XHViYjM1XHViYjM2XHViYjM4XHViYjNiXHViYjNjXHViYjNkXHViYjNlXHViYjQ0XHViYjQ1XHViYjQ3XHViYjQ5XHViYjRkXHViYjRmXHViYjUwXHViYjU0XHViYjU4XHViYjYx''@;'; put 'put ''XHViYjYzXHViYjZjXHViYjg4XHViYjhjXHViYjkwXHViYmE0XHViYmE4XHViYmFjXHViYmI0XHViYmI3XHViYmMwXHViYmM0XHViYmM4XHViYmQwXHViYmQzXHViYmY4XHViYmY5XHViYmZjXHViYmZmXHViYzAwXHViYzAyXHViYzA4XHViYzA5XHViYzBiXHViYzBjXHViYzBkXHViYzBmXHVi''@;'; put 'put ''YzExXHViYzE0Iiw0LCJcdWJjMWIiLDQsIlx1YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1YmM4NVx1YmM4OFx1YmM4Ylx1''@;'; put 'put ''YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5NyJdLFsiYmE0MSIsIlx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5M1x1ZDI5NFx1ZDI5NiIsNSwiXHVkMjlkXHVkMjllXHVkMjlmXHVkMmExXHVkMmEyXHVkMmEzXHVkMmE1Iiw2LCJcdWQyYWQiXSxbImJhNjEiLCJcdWQyYWVcdWQyYWZc''@;'; put 'put ''dWQyYjBcdWQyYjIiLDUsIlx1ZDJiYVx1ZDJiYlx1ZDJiZFx1ZDJiZVx1ZDJjMVx1ZDJjMyIsNCwiXHVkMmNhXHVkMmNjIiw1XSxbImJhODEiLCJcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQyZGJcdWQyZGQiLDYsIlx1ZDJlNiIsOSwiXHVkMmYyXHVkMmYz''@;'; put 'put ''XHVkMmY1XHVkMmY2XHVkMmY3XHVkMmY5XHVkMmZhXHViYzk5XHViYzlhXHViY2EwXHViY2ExXHViY2E0XHViY2E3XHViY2E4XHViY2IwXHViY2IxXHViY2IzXHViY2I0XHViY2I1XHViY2JjXHViY2JkXHViY2MwXHViY2M0XHViY2NkXHViY2NmXHViY2QwXHViY2QxXHViY2Q1XHViY2Q4XHVi''@;'; put 'put ''Y2RjXHViY2Y0XHViY2Y1XHViY2Y2XHViY2Y4XHViY2ZjXHViZDA0XHViZDA1XHViZDA3XHViZDA5XHViZDEwXHViZDE0XHViZDI0XHViZDJjXHViZDQwXHViZDQ4XHViZDQ5XHViZDRjXHViZDUwXHViZDU4XHViZDU5XHViZDY0XHViZDY4XHViZDgwXHViZDgxXHViZDg0XHViZDg3XHViZDg4''@;'; put 'put ''XHViZDg5XHViZDhhXHViZDkwXHViZDkxXHViZDkzXHViZDk1XHViZDk5XHViZDlhXHViZDljXHViZGE0XHViZGIwXHViZGI4XHViZGQ0XHViZGQ1XHViZGQ4XHViZGRjXHViZGU5XHViZGYwXHViZGY0XHViZGY4XHViZTAwXHViZTAzXHViZTA1XHViZTBjXHViZTBkXHViZTEwXHViZTE0XHVi''@;'; put 'put ''ZTFjXHViZTFkXHViZTFmXHViZTQ0XHViZTQ1XHViZTQ4XHViZTRjXHViZTRlXHViZTU0XHViZTU1XHViZTU3XHViZTU5XHViZTVhXHViZTViXHViZTYwXHViZTYxXHViZTY0Il0sWyJiYjQxIiwiXHVkMmZiIiw0LCJcdWQzMDJcdWQzMDRcdWQzMDYiLDUsIlx1ZDMwZlx1ZDMxMVx1ZDMxMlx1''@;'; put 'put ''ZDMxM1x1ZDMxNVx1ZDMxNyIsNCwiXHVkMzFlXHVkMzIyXHVkMzIzIl0sWyJiYjYxIiwiXHVkMzI0XHVkMzI2XHVkMzI3XHVkMzJhXHVkMzJiXHVkMzJkXHVkMzJlXHVkMzJmXHVkMzMxIiw2LCJcdWQzM2FcdWQzM2UiLDUsIlx1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OSJdLFsiYmI4MSIsIlx1''@;'; put 'put ''ZDM0YSIsMzEsIlx1YmU2OFx1YmU2YVx1YmU3MFx1YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVl''@;'; put 'put ''MFx1YmVlM1x1YmVlNFx1YmVlNVx1YmVlY1x1YmYwMVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1''@;'; put 'put ''YmZkZlx1YmZlMVx1YzAzY1x1YzA1MVx1YzA1OFx1YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBi''@;'; put 'put ''Zlx1YzBjMFx1YzBjMVx1YzBjNVx1YzBjOFx1YzBjOVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNCJdLFsiYmM0MSIsIlx1ZDM2YSIsMTcsIlx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4NyJdLFsiYmM2MSIsIlx1''@;'; put 'put ''ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5MiIsNSwiXHVkMzlhXHVkMzliXHVkMzlkXHVkMzllXHVkMzlmXHVkM2ExIiw2LCJcdWQzYWFcdWQzYWNcdWQzYWUiXSxbImJjODEiLCJcdWQzYWYiLDQsIlx1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZCIs''@;'; put 'put ''NiwiXHVkM2M2XHVkM2M3XHVkM2NhIiw1LCJcdWQzZDEiLDUsIlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExYyIsNCwiXHVjMTIzXHVjMTI0XHVjMTI2XHVjMTI3XHVjMTJjXHVjMTJkXHVjMTJmXHVj''@;'; put 'put ''MTMwXHVjMTMxXHVjMTM2XHVjMTM4XHVjMTM5XHVjMTNjXHVjMTQwXHVjMTQ4XHVjMTQ5XHVjMTRiXHVjMTRjXHVjMTRkXHVjMTU0XHVjMTU1XHVjMTU4XHVjMTVjXHVjMTY0XHVjMTY1XHVjMTY3XHVjMTY4XHVjMTY5XHVjMTcwXHVjMTc0XHVjMTc4XHVjMTg1XHVjMThjXHVjMThkXHVjMThl''@;'; put 'put ''XHVjMTkwXHVjMTk0XHVjMTk2XHVjMTljXHVjMTlkXHVjMTlmXHVjMWExXHVjMWE1XHVjMWE4XHVjMWE5XHVjMWFjXHVjMWIwXHVjMWJkXHVjMWM0XHVjMWM4XHVjMWNjXHVjMWQ0XHVjMWQ3XHVjMWQ4XHVjMWUwXHVjMWU0XHVjMWU4XHVjMWYwXHVjMWYxXHVjMWYzXHVjMWZjXHVjMWZkXHVj''@;'; put 'put ''MjAwXHVjMjA0XHVjMjBjXHVjMjBkXHVjMjBmXHVjMjExXHVjMjE4XHVjMjE5XHVjMjFjXHVjMjFmXHVjMjIwXHVjMjI4XHVjMjI5XHVjMjJiXHVjMjJkIl0sWyJiZDQxIiwiXHVkM2Q3XHVkM2Q5Iiw3LCJcdWQzZTJcdWQzZTQiLDcsIlx1ZDNlZVx1ZDNlZlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1''@;'; put 'put ''ZDNmNVx1ZDNmNlx1ZDNmNyJdLFsiYmQ2MSIsIlx1ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNmYlx1ZDNmZVx1ZDQwMFx1ZDQwMiIsNSwiXHVkNDA5IiwxM10sWyJiZDgxIiwiXHVkNDE3Iiw1LCJcdWQ0MWUiLDI1LCJcdWMyMmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFcdWMy''@;'; put 'put ''NTRcdWMyNThcdWMyNjBcdWMyNjVcdWMyNmNcdWMyNmRcdWMyNzBcdWMyNzRcdWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJcdWMyOWRcdWMyYTRcdWMyYTVcdWMyYThcdWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMyZGNc''@;'; put 'put ''dWMyZGRcdWMyZTBcdWMyZTNcdWMyZTRcdWMyZWJcdWMyZWNcdWMyZWRcdWMyZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMzMDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMzMTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhcdWMz''@;'; put 'put ''MjlcdWMzNDVcdWMzNjhcdWMzNjlcdWMzNmNcdWMzNzBcdWMzNzJcdWMzNzhcdWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlcdWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJcdWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0MDhc''@;'; put 'put ''dWM0MTBcdWM0MjRcdWM0MmNcdWM0MzAiXSxbImJlNDEiLCJcdWQ0MzgiLDcsIlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NSIsMTRdLFsiYmU2MSIsIlx1ZDQ1NCIsNywiXHVkNDVkXHVkNDVlXHVkNDVmXHVkNDYxXHVkNDYyXHVkNDYzXHVkNDY1Iiw3LCJcdWQ0NmVcdWQ0NzBcdWQ0NzFcdWQ0''@;'; put 'put ''NzIiXSxbImJlODEiLCJcdWQ0NzMiLDQsIlx1ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4MyIsNCwiXHVkNDhhXHVkNDhjXHVkNDhlIiw1LCJcdWQ0OTUiLDgsIlx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3''@;'; put 'put ''OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRmOFx1YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1''@;'; put 'put ''YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1YzU1N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4''@;'; put 'put ''NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVhMFx1YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNCIsNiwiXHVjNWNjXHVjNWNlIl0sWyJiZjQxIiwiXHVkNDllIiwxMCwiXHVk''@;'; put 'put ''NGFhIiwxNF0sWyJiZjYxIiwiXHVkNGI5IiwxOCwiXHVkNGNkXHVkNGNlXHVkNGNmXHVkNGQxXHVkNGQyXHVkNGQzXHVkNGQ1Il0sWyJiZjgxIiwiXHVkNGQ2Iiw1LCJcdWQ0ZGRcdWQ0ZGVcdWQ0ZTAiLDcsIlx1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMSIsNiwi''@;'; put 'put ''XHVkNGY5XHVkNGZhXHVkNGZjXHVjNWQwXHVjNWQxXHVjNWQ0XHVjNWQ4XHVjNWUwXHVjNWUxXHVjNWUzXHVjNWU1XHVjNWVjXHVjNWVkXHVjNWVlXHVjNWYwXHVjNWY0XHVjNWY2XHVjNWY3XHVjNWZjIiw1LCJcdWM2MDVcdWM2MDZcdWM2MDdcdWM2MDhcdWM2MGNcdWM2MTBcdWM2MThcdWM2''@;'; put 'put ''MTlcdWM2MWJcdWM2MWNcdWM2MjRcdWM2MjVcdWM2MjhcdWM2MmNcdWM2MmRcdWM2MmVcdWM2MzBcdWM2MzNcdWM2MzRcdWM2MzVcdWM2MzdcdWM2MzlcdWM2M2JcdWM2NDBcdWM2NDFcdWM2NDRcdWM2NDhcdWM2NTBcdWM2NTFcdWM2NTNcdWM2NTRcdWM2NTVcdWM2NWNcdWM2NWRcdWM2NjBc''@;'; put 'put ''dWM2NmNcdWM2NmZcdWM2NzFcdWM2NzhcdWM2NzlcdWM2N2NcdWM2ODBcdWM2ODhcdWM2ODlcdWM2OGJcdWM2OGRcdWM2OTRcdWM2OTVcdWM2OThcdWM2OWNcdWM2YTRcdWM2YTVcdWM2YTdcdWM2YTlcdWM2YjBcdWM2YjFcdWM2YjRcdWM2YjhcdWM2YjlcdWM2YmFcdWM2YzBcdWM2YzFcdWM2''@;'; put 'put ''YzNcdWM2YzVcdWM2Y2NcdWM2Y2RcdWM2ZDBcdWM2ZDRcdWM2ZGNcdWM2ZGRcdWM2ZTBcdWM2ZTFcdWM2ZTgiXSxbImMwNDEiLCJcdWQ0ZmUiLDUsIlx1ZDUwNVx1ZDUwNlx1ZDUwN1x1ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZCIsNiwiXHVkNTE2XHVkNTE4Iiw1XSxbImMwNjEiLCJcdWQ1MWUi''@;'; put 'put ''LDI1XSxbImMwODEiLCJcdWQ1MzhcdWQ1MzlcdWQ1M2FcdWQ1M2JcdWQ1M2VcdWQ1M2ZcdWQ1NDFcdWQ1NDJcdWQ1NDNcdWQ1NDUiLDYsIlx1ZDU0ZVx1ZDU1MFx1ZDU1MiIsNSwiXHVkNTVhXHVkNTViXHVkNTVkXHVkNTVlXHVkNTVmXHVkNTYxXHVkNTYyXHVkNTYzXHVjNmU5XHVjNmVjXHVj''@;'; put 'put ''NmYwXHVjNmY4XHVjNmY5XHVjNmZkXHVjNzA0XHVjNzA1XHVjNzA4XHVjNzBjXHVjNzE0XHVjNzE1XHVjNzE3XHVjNzE5XHVjNzIwXHVjNzIxXHVjNzI0XHVjNzI4XHVjNzMwXHVjNzMxXHVjNzMzXHVjNzM1XHVjNzM3XHVjNzNjXHVjNzNkXHVjNzQwXHVjNzQ0XHVjNzRhXHVjNzRjXHVjNzRk''@;'; put 'put ''XHVjNzRmXHVjNzUxIiw3LCJcdWM3NWNcdWM3NjBcdWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVcdWM3NzhcdWM3N2NcdWM3N2RcdWM3N2VcdWM3ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFcdWM3OGVcdWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZcdWM3OTdcdWM3OThcdWM3''@;'; put 'put ''OWFcdWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRcdWM3YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3YmZcdWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3ZDBcdWM3ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3ZWNcdWM4MDBcdWM4MDFc''@;'; put 'put ''dWM4MDRcdWM4MDhcdWM4MGEiXSxbImMxNDEiLCJcdWQ1NjRcdWQ1NjZcdWQ1NjdcdWQ1NmFcdWQ1NmNcdWQ1NmUiLDUsIlx1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZCIsNiwiXHVkNTg2XHVkNThhXHVkNThiIl0sWyJjMTYxIiwiXHVkNThjXHVkNThkXHVkNThlXHVkNThm''@;'; put 'put ''XHVkNTkxIiwxOSwiXHVkNWE2XHVkNWE3Il0sWyJjMTgxIiwiXHVkNWE4IiwzMSwiXHVjODEwXHVjODExXHVjODEzXHVjODE1XHVjODE2XHVjODFjXHVjODFkXHVjODIwXHVjODI0XHVjODJjXHVjODJkXHVjODJmXHVjODMxXHVjODM4XHVjODNjXHVjODQwXHVjODQ4XHVjODQ5XHVjODRjXHVj''@;'; put 'put ''ODRkXHVjODU0XHVjODcwXHVjODcxXHVjODc0XHVjODc4XHVjODdhXHVjODgwXHVjODgxXHVjODgzXHVjODg1XHVjODg2XHVjODg3XHVjODhiXHVjODhjXHVjODhkXHVjODk0XHVjODlkXHVjODlmXHVjOGExXHVjOGE4XHVjOGJjXHVjOGJkXHVjOGM0XHVjOGM4XHVjOGNjXHVjOGQ0XHVjOGQ1''@;'; put 'put ''XHVjOGQ3XHVjOGQ5XHVjOGUwXHVjOGUxXHVjOGU0XHVjOGY1XHVjOGZjXHVjOGZkXHVjOTAwXHVjOTA0XHVjOTA1XHVjOTA2XHVjOTBjXHVjOTBkXHVjOTBmXHVjOTExXHVjOTE4XHVjOTJjXHVjOTM0XHVjOTUwXHVjOTUxXHVjOTU0XHVjOTU4XHVjOTYwXHVjOTYxXHVjOTYzXHVjOTZjXHVj''@;'; put 'put ''OTcwXHVjOTc0XHVjOTdjXHVjOTg4XHVjOTg5XHVjOThjXHVjOTkwXHVjOTk4XHVjOTk5XHVjOTliXHVjOTlkXHVjOWMwXHVjOWMxXHVjOWM0XHVjOWM3XHVjOWM4XHVjOWNhXHVjOWQwXHVjOWQxXHVjOWQzIl0sWyJjMjQxIiwiXHVkNWNhXHVkNWNiXHVkNWNkXHVkNWNlXHVkNWNmXHVkNWQx''@;'; put 'put ''XHVkNWQzIiw0LCJcdWQ1ZGFcdWQ1ZGNcdWQ1ZGUiLDUsIlx1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZSJdLFsiYzI2MSIsIlx1ZDVlZiIsNCwiXHVkNWY2XHVkNWY4XHVkNWZhIiw1LCJcdWQ2MDJcdWQ2MDNcdWQ2MDVcdWQ2MDZcdWQ2MDdcdWQ2MDkiLDYsIlx1''@;'; put 'put ''ZDYxMiJdLFsiYzI4MSIsIlx1ZDYxNiIsNSwiXHVkNjFkXHVkNjFlXHVkNjFmXHVkNjIxXHVkNjIyXHVkNjIzXHVkNjI1Iiw3LCJcdWQ2MmUiLDksIlx1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1''@;'; put 'put ''YzllZFx1YzllZlx1YzlmMFx1YzlmMVx1YzlmOFx1YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4''@;'; put 'put ''NFx1Y2E5OFx1Y2FiY1x1Y2FiZFx1Y2FjMFx1Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1''@;'; put 'put ''Y2I1OVx1Y2I1ZFx1Y2I2NFx1Y2I3OFx1Y2I3OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2Mz''@;'; put 'put ''YiJdLFsiYzM0MSIsIlx1ZDYzZFx1ZDYzZVx1ZDYzZlx1ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZCIsNF0sWyJjMzYxIiwiXHVkNjYy''@;'; put 'put ''Iiw0LCJcdWQ2NjhcdWQ2NmEiLDUsIlx1ZDY3Mlx1ZDY3M1x1ZDY3NSIsMTFdLFsiYzM4MSIsIlx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4NiIsNSwiXHVkNjhlXHVkNjhmXHVkNjkxXHVkNjkyXHVkNjkzXHVkNjk1Iiw3LCJcdWQ2OWVcdWQ2YTBcdWQ2YTIiLDUsIlx1ZDZhOVx1ZDZhYVx1Y2Mz''@;'; put 'put ''Y1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1Y2M0OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1Y2M1OFx1Y2M1OVx1Y2M2MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2NhMFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2NhZFx1Y2NiNFx1''@;'; put 'put ''Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2NjNVx1Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2NlNFx1Y2NlY1x1Y2NmMFx1Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2QxMFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1Y2Q2MFx1Y2Q2''@;'; put 'put ''NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1Y2Q3OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1Y2Q5Y1x1Y2RhNFx1Y2RhNVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2RmMFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2UwNFx1Y2UwOFx1''@;'; put 'put ''Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2UyMVx1Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2UzM1x1Y2UzNSJdLFsiYzQ0MSIsIlx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMSIsNywiXHVkNmJhXHVkNmJjIiw3LCJcdWQ2YzZcdWQ2YzdcdWQ2YzlcdWQ2Y2FcdWQ2Y2IiXSxbImM0''@;'; put 'put ''NjEiLCJcdWQ2Y2RcdWQ2Y2VcdWQ2Y2ZcdWQ2ZDBcdWQ2ZDJcdWQ2ZDNcdWQ2ZDVcdWQ2ZDZcdWQ2ZDhcdWQ2ZGEiLDUsIlx1ZDZlMVx1ZDZlMlx1ZDZlM1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOSIsNF0sWyJjNDgxIiwiXHVkNmVlXHVkNmVmXHVkNmYxXHVkNmYyXHVkNmYzXHVkNmY0XHVk''@;'; put 'put ''NmY2Iiw1LCJcdWQ2ZmVcdWQ2ZmZcdWQ3MDFcdWQ3MDJcdWQ3MDNcdWQ3MDUiLDExLCJcdWQ3MTJcdWQ3MTNcdWQ3MTRcdWNlNThcdWNlNTlcdWNlNWNcdWNlNWZcdWNlNjBcdWNlNjFcdWNlNjhcdWNlNjlcdWNlNmJcdWNlNmRcdWNlNzRcdWNlNzVcdWNlNzhcdWNlN2NcdWNlODRcdWNlODVc''@;'; put 'put ''dWNlODdcdWNlODlcdWNlOTBcdWNlOTFcdWNlOTRcdWNlOThcdWNlYTBcdWNlYTFcdWNlYTNcdWNlYTRcdWNlYTVcdWNlYWNcdWNlYWRcdWNlYzFcdWNlZTRcdWNlZTVcdWNlZThcdWNlZWJcdWNlZWNcdWNlZjRcdWNlZjVcdWNlZjdcdWNlZjhcdWNlZjlcdWNmMDBcdWNmMDFcdWNmMDRcdWNm''@;'; put 'put ''MDhcdWNmMTBcdWNmMTFcdWNmMTNcdWNmMTVcdWNmMWNcdWNmMjBcdWNmMjRcdWNmMmNcdWNmMmRcdWNmMmZcdWNmMzBcdWNmMzFcdWNmMzhcdWNmNTRcdWNmNTVcdWNmNThcdWNmNWNcdWNmNjRcdWNmNjVcdWNmNjdcdWNmNjlcdWNmNzBcdWNmNzFcdWNmNzRcdWNmNzhcdWNmODBcdWNmODVc''@;'; put 'put ''dWNmOGNcdWNmYTFcdWNmYThcdWNmYjBcdWNmYzRcdWNmZTBcdWNmZTFcdWNmZTRcdWNmZThcdWNmZjBcdWNmZjFcdWNmZjNcdWNmZjVcdWNmZmNcdWQwMDBcdWQwMDRcdWQwMTFcdWQwMThcdWQwMmRcdWQwMzRcdWQwMzVcdWQwMzhcdWQwM2MiXSxbImM1NDEiLCJcdWQ3MTVcdWQ3MTZcdWQ3''@;'; put 'put ''MTdcdWQ3MWFcdWQ3MWJcdWQ3MWRcdWQ3MWVcdWQ3MWZcdWQ3MjEiLDYsIlx1ZDcyYVx1ZDcyY1x1ZDcyZSIsNSwiXHVkNzM2XHVkNzM3XHVkNzM5Il0sWyJjNTYxIiwiXHVkNzNhXHVkNzNiXHVkNzNkIiw2LCJcdWQ3NDVcdWQ3NDZcdWQ3NDhcdWQ3NGEiLDUsIlx1ZDc1Mlx1ZDc1M1x1ZDc1''@;'; put 'put ''NVx1ZDc1YSIsNF0sWyJjNTgxIiwiXHVkNzVmXHVkNzYyXHVkNzY0XHVkNzY2XHVkNzY3XHVkNzY4XHVkNzZhXHVkNzZiXHVkNzZkXHVkNzZlXHVkNzZmXHVkNzcxXHVkNzcyXHVkNzczXHVkNzc1Iiw2LCJcdWQ3N2VcdWQ3N2ZcdWQ3ODBcdWQ3ODIiLDUsIlx1ZDc4YVx1ZDc4Ylx1ZDA0NFx1''@;'; put 'put ''ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1ZDA1OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBk''@;'; put 'put ''MFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBkY1x1ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1''@;'; put 'put ''ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1ZDE2MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIx''@;'; put 'put ''MFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIzY1x1ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1YyJdLFsiYzY0MSIsIlx1ZDc4ZFx1ZDc4ZVx1ZDc4Zlx1ZDc5MSIsNiwiXHVkNzlhXHVkNzljXHVkNzllIiw1XSxbImM2YTEiLCJcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQyODhc''@;'; put 'put ''dWQyOTBcdWQyOTFcdWQyOTVcdWQyOWNcdWQyYTBcdWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQyYmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQyYzlcdWQyY2JcdWQyZDRcdWQyZDhcdWQyZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBcdWQz''@;'; put 'put ''MDFcdWQzMDNcdWQzMDVcdWQzMGNcdWQzMGRcdWQzMGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZcdWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhcdWQzMjlcdWQzMmNcdWQzMzBcdWQzMzhcdWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQzN2Rc''@;'; put 'put ''dWQzODBcdWQzODRcdWQzOGNcdWQzOGRcdWQzOGZcdWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQzYThcdWQzYTlcdWQzYWJcdWQzYWRcdWQzYjRcdWQzYjhcdWQzYmNcdWQzYzRcdWQzYzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNcdWQz''@;'; put 'put ''ZWRcdWQzZjBcdWQzZjRcdWQzZmNcdWQzZmRcdWQzZmZcdWQ0MDEiXSxbImM3YTEiLCJcdWQ0MDhcdWQ0MWRcdWQ0NDBcdWQ0NDRcdWQ0NWNcdWQ0NjBcdWQ0NjRcdWQ0NmRcdWQ0NmZcdWQ0NzhcdWQ0NzlcdWQ0N2NcdWQ0N2ZcdWQ0ODBcdWQ0ODJcdWQ0ODhcdWQ0ODlcdWQ0OGJcdWQ0OGRc''@;'; put 'put ''dWQ0OTRcdWQ0YTlcdWQ0Y2NcdWQ0ZDBcdWQ0ZDRcdWQ0ZGNcdWQ0ZGZcdWQ0ZThcdWQ0ZWNcdWQ0ZjBcdWQ0ZjhcdWQ0ZmJcdWQ0ZmRcdWQ1MDRcdWQ1MDhcdWQ1MGNcdWQ1MTRcdWQ1MTVcdWQ1MTdcdWQ1M2NcdWQ1M2RcdWQ1NDBcdWQ1NDRcdWQ1NGNcdWQ1NGRcdWQ1NGZcdWQ1NTFcdWQ1''@;'; put 'put ''NThcdWQ1NTlcdWQ1NWNcdWQ1NjBcdWQ1NjVcdWQ1NjhcdWQ1NjlcdWQ1NmJcdWQ1NmRcdWQ1NzRcdWQ1NzVcdWQ1NzhcdWQ1N2NcdWQ1ODRcdWQ1ODVcdWQ1ODdcdWQ1ODhcdWQ1ODlcdWQ1OTBcdWQ1YTVcdWQ1YzhcdWQ1YzlcdWQ1Y2NcdWQ1ZDBcdWQ1ZDJcdWQ1ZDhcdWQ1ZDlcdWQ1ZGJc''@;'; put 'put ''dWQ1ZGRcdWQ1ZTRcdWQ1ZTVcdWQ1ZThcdWQ1ZWNcdWQ1ZjRcdWQ1ZjVcdWQ1ZjdcdWQ1ZjlcdWQ2MDBcdWQ2MDFcdWQ2MDRcdWQ2MDhcdWQ2MTBcdWQ2MTFcdWQ2MTNcdWQ2MTRcdWQ2MTVcdWQ2MWNcdWQ2MjAiXSxbImM4YTEiLCJcdWQ2MjRcdWQ2MmRcdWQ2MzhcdWQ2MzlcdWQ2M2NcdWQ2''@;'; put 'put ''NDBcdWQ2NDVcdWQ2NDhcdWQ2NDlcdWQ2NGJcdWQ2NGRcdWQ2NTFcdWQ2NTRcdWQ2NTVcdWQ2NThcdWQ2NWNcdWQ2NjdcdWQ2NjlcdWQ2NzBcdWQ2NzFcdWQ2NzRcdWQ2ODNcdWQ2ODVcdWQ2OGNcdWQ2OGRcdWQ2OTBcdWQ2OTRcdWQ2OWRcdWQ2OWZcdWQ2YTFcdWQ2YThcdWQ2YWNcdWQ2YjBc''@;'; put 'put ''dWQ2YjlcdWQ2YmJcdWQ2YzRcdWQ2YzVcdWQ2YzhcdWQ2Y2NcdWQ2ZDFcdWQ2ZDRcdWQ2ZDdcdWQ2ZDlcdWQ2ZTBcdWQ2ZTRcdWQ2ZThcdWQ2ZjBcdWQ2ZjVcdWQ2ZmNcdWQ2ZmRcdWQ3MDBcdWQ3MDRcdWQ3MTFcdWQ3MThcdWQ3MTlcdWQ3MWNcdWQ3MjBcdWQ3MjhcdWQ3MjlcdWQ3MmJcdWQ3''@;'; put 'put ''MmRcdWQ3MzRcdWQ3MzVcdWQ3MzhcdWQ3M2NcdWQ3NDRcdWQ3NDdcdWQ3NDlcdWQ3NTBcdWQ3NTFcdWQ3NTRcdWQ3NTZcdWQ3NTdcdWQ3NThcdWQ3NTlcdWQ3NjBcdWQ3NjFcdWQ3NjNcdWQ3NjVcdWQ3NjlcdWQ3NmNcdWQ3NzBcdWQ3NzRcdWQ3N2NcdWQ3N2RcdWQ3ODFcdWQ3ODhcdWQ3ODlc''@;'; put 'put ''dWQ3OGNcdWQ3OTBcdWQ3OThcdWQ3OTlcdWQ3OWJcdWQ3OWQiXSxbImNhYTEiLCJcdTRmM2RcdTRmNzNcdTUwNDdcdTUwZjlcdTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFcdTViYjZcdTY2ODdcdTY3YjZcdTY3YjdcdTY3ZWZcdTZiNGNcdTczYzJcdTc1YzJcdTdhM2NcdTgy''@;'; put 'put ''ZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZcdThjYzhcdThkY2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUyM2JcdTUzNzRcdTU0MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5YmFcdTg5ZDJcdTk1YTNcdTRmODNcdTUyMGFcdTU4YmVcdTU5NzhcdTU5ZTZcdTVlNzJcdTVlNzlc''@;'; put 'put ''dTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4N2ZcdTZmOTdcdTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhcdTdhZmZcdTdjMjFcdTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJcdTU1OWRcdTY2ZjdcdTZlMzRcdTc4YTNcdTdhZWRcdTg0NWJcdTg5MTBcdTg3NGVcdTk3YThcdTUy''@;'; put 'put ''ZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZcdTYxYmVcdTYyMjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZlMWJcdTc1MThcdTc1YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0NTJcdTlmOTUiXSxbImNiYTEiLCJcdTUzMjNcdTVjYWNcdTc1MzJcdTgwZGJcdTkyNDBcdTk1OThc''@;'; put 'put ''dTUyNWJcdTU4MDhcdTU5ZGNcdTVjYTFcdTVkMTdcdTVlYjdcdTVmM2FcdTVmNGFcdTYxNzdcdTZjNWZcdTc1N2FcdTc1ODZcdTdjZTBcdTdkNzNcdTdkYjFcdTdmOGNcdTgxNTRcdTgyMjFcdTg1OTFcdTg5NDFcdThiMWJcdTkyZmNcdTk2NGRcdTljNDdcdTRlY2JcdTRlZjdcdTUwMGJcdTUx''@;'; put 'put ''ZjFcdTU4NGZcdTYxMzdcdTYxM2VcdTYxNjhcdTY1MzlcdTY5ZWFcdTZmMTFcdTc1YTVcdTc2ODZcdTc2ZDZcdTdiODdcdTgyYTVcdTg0Y2JcdWY5MDBcdTkzYTdcdTk1OGJcdTU1ODBcdTViYTJcdTU3NTFcdWY5MDFcdTdjYjNcdTdmYjlcdTkxYjVcdTUwMjhcdTUzYmJcdTVjNDVcdTVkZThc''@;'; put 'put ''dTYyZDJcdTYzNmVcdTY0ZGFcdTY0ZTdcdTZlMjBcdTcwYWNcdTc5NWJcdThkZGRcdThlMWVcdWY5MDJcdTkwN2RcdTkyNDVcdTkyZjhcdTRlN2VcdTRlZjZcdTUwNjVcdTVkZmVcdTVlZmFcdTYxMDZcdTY5NTdcdTgxNzFcdTg2NTRcdThlNDdcdTkzNzVcdTlhMmJcdTRlNWVcdTUwOTFcdTY3''@;'; put 'put ''NzBcdTY4NDBcdTUxMDlcdTUyOGRcdTUyOTJcdTZhYTIiXSxbImNjYTEiLCJcdTc3YmNcdTkyMTBcdTllZDRcdTUyYWJcdTYwMmZcdThmZjJcdTUwNDhcdTYxYTlcdTYzZWRcdTY0Y2FcdTY4M2NcdTZhODRcdTZmYzBcdTgxODhcdTg5YTFcdTk2OTRcdTU4MDVcdTcyN2RcdTcyYWNcdTc1MDRc''@;'; put 'put ''dTdkNzlcdTdlNmRcdTgwYTlcdTg5OGJcdThiNzRcdTkwNjNcdTlkNTFcdTYyODlcdTZjN2FcdTZmNTRcdTdkNTBcdTdmM2FcdThhMjNcdTUxN2NcdTYxNGFcdTdiOWRcdThiMTlcdTkyNTdcdTkzOGNcdTRlYWNcdTRmZDNcdTUwMWVcdTUwYmVcdTUxMDZcdTUyYzFcdTUyY2RcdTUzN2ZcdTU3''@;'; put 'put ''NzBcdTU4ODNcdTVlOWFcdTVmOTFcdTYxNzZcdTYxYWNcdTY0Y2VcdTY1NmNcdTY2NmZcdTY2YmJcdTY2ZjRcdTY4OTdcdTZkODdcdTcwODVcdTcwZjFcdTc0OWZcdTc0YTVcdTc0Y2FcdTc1ZDlcdTc4NmNcdTc4ZWNcdTdhZGZcdTdhZjZcdTdkNDVcdTdkOTNcdTgwMTVcdTgwM2ZcdTgxMWJc''@;'; put 'put ''dTgzOTZcdThiNjZcdThmMTVcdTkwMTVcdTkzZTFcdTk4MDNcdTk4MzhcdTlhNWFcdTliZThcdTRmYzJcdTU1NTNcdTU4M2FcdTU5NTFcdTViNjNcdTVjNDZcdTYwYjhcdTYyMTJcdTY4NDJcdTY4YjAiXSxbImNkYTEiLCJcdTY4ZThcdTZlYWFcdTc1NGNcdTc2NzhcdTc4Y2VcdTdhM2RcdTdj''@;'; put 'put ''ZmJcdTdlNmJcdTdlN2NcdThhMDhcdThhYTFcdThjM2ZcdTk2OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFcdTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJcdTYyZjdcdTY1MzdcdTY1NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRcdTc1ZmNcdTc2OTBcdTc3N2Vc''@;'; put 'put ''dTdhM2ZcdTdmOTRcdTgwMDNcdTgwYTFcdTgxOGZcdTgyZTZcdTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4NjdcdTlhZDhcdTlmMTNcdTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThjMzdcdTlkNjBcdTU2ZjBcdTU3''@;'; put 'put ''NjRcdTVkMTFcdTY2MDZcdTY4YjFcdTY4Y2RcdTZlZmVcdTc0MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJcdTUxNmNcdTUxNzFcdTUyOWZcdTViNTRcdTVkZTVcdTYwNTBcdTYwNmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2FcdTg2YTNcdThjYTJcdTk3OGZc''@;'; put 'put ''dTRlMzJcdTViZTFcdTYyMDhcdTY3OWNcdTc0ZGMiXSxbImNlYTEiLCJcdTc5ZDFcdTgzZDNcdThhODdcdThhYjJcdThkZThcdTkwNGVcdTkzNGJcdTk4NDZcdTVlZDNcdTY5ZThcdTg1ZmZcdTkwZWRcdWY5MDVcdTUxYTBcdTViOThcdTViZWNcdTYxNjNcdTY4ZmFcdTZiM2VcdTcwNGNcdTc0''@;'; put 'put ''MmZcdTc0ZDhcdTdiYTFcdTdmNTBcdTgzYzVcdTg5YzBcdThjYWJcdTk1ZGNcdTk5MjhcdTUyMmVcdTYwNWRcdTYyZWNcdTkwMDJcdTRmOGFcdTUxNDlcdTUzMjFcdTU4ZDlcdTVlZTNcdTY2ZTBcdTZkMzhcdTcwOWFcdTcyYzJcdTczZDZcdTdiNTBcdTgwZjFcdTk0NWJcdTUzNjZcdTYzOWJc''@;'; put 'put ''dTdmNmJcdTRlNTZcdTUwODBcdTU4NGFcdTU4ZGVcdTYwMmFcdTYxMjdcdTYyZDBcdTY5ZDBcdTliNDFcdTViOGZcdTdkMThcdTgwYjFcdThmNWZcdTRlYTRcdTUwZDFcdTU0YWNcdTU1YWNcdTViMGNcdTVkYTBcdTVkZTdcdTY1MmFcdTY1NGVcdTY4MjFcdTZhNGJcdTcyZTFcdTc2OGVcdTc3''@;'; put 'put ''ZWZcdTdkNWVcdTdmZjlcdTgxYTBcdTg1NGVcdTg2ZGZcdThmMDNcdThmNGVcdTkwY2FcdTk5MDNcdTlhNTVcdTliYWJcdTRlMThcdTRlNDVcdTRlNWRcdTRlYzdcdTRmZjFcdTUxNzdcdTUyZmUiXSxbImNmYTEiLCJcdTUzNDBcdTUzZTNcdTUzZTVcdTU0OGVcdTU2MTRcdTU3NzVcdTU3YTJc''@;'; put 'put ''dTViYzdcdTVkODdcdTVlZDBcdTYxZmNcdTYyZDhcdTY1NTFcdTY3YjhcdTY3ZTlcdTY5Y2JcdTZiNTBcdTZiYzZcdTZiZWNcdTZjNDJcdTZlOWRcdTcwNzhcdTcyZDdcdTczOTZcdTc0MDNcdTc3YmZcdTc3ZTlcdTdhNzZcdTdkN2ZcdTgwMDlcdTgxZmNcdTgyMDVcdTgyMGFcdTgyZGZcdTg4''@;'; put 'put ''NjJcdThiMzNcdThjZmNcdThlYzBcdTkwMTFcdTkwYjFcdTkyNjRcdTkyYjZcdTk5ZDJcdTlhNDVcdTljZTlcdTlkZDdcdTlmOWNcdTU3MGJcdTVjNDBcdTgzY2FcdTk3YTBcdTk3YWJcdTllYjRcdTU0MWJcdTdhOThcdTdmYTRcdTg4ZDlcdThlY2RcdTkwZTFcdTU4MDBcdTVjNDhcdTYzOThc''@;'; put 'put ''dTdhOWZcdTViYWVcdTVmMTNcdTdhNzlcdTdhYWVcdTgyOGVcdThlYWNcdTUwMjZcdTUyMzhcdTUyZjhcdTUzNzdcdTU3MDhcdTYyZjNcdTYzNzJcdTZiMGFcdTZkYzNcdTc3MzdcdTUzYTVcdTczNTdcdTg1NjhcdThlNzZcdTk1ZDVcdTY3M2FcdTZhYzNcdTZmNzBcdThhNmRcdThlY2NcdTk5''@;'; put 'put ''NGJcdWY5MDZcdTY2NzdcdTZiNzhcdThjYjQiXSxbImQwYTEiLCJcdTliM2NcdWY5MDdcdTUzZWJcdTU3MmRcdTU5NGVcdTYzYzZcdTY5ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1YThcdTUyZmJcdTU3NDdcdTc1NDdcdTdiNjBc''@;'; put 'put ''dTgzY2NcdTkyMWVcdWY5MDhcdTZhNThcdTUxNGJcdTUyNGJcdTUyODdcdTYyMWZcdTY4ZDhcdTY5NzVcdTk2OTlcdTUwYzVcdTUyYTRcdTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2VcdTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJcdThiMzlcdThmZDFcdTk5NDlcdWY5MDlcdTRl''@;'; put 'put ''Y2FcdTU5OTdcdTY0ZDJcdTY2MTFcdTZhOGVcdTc0MzRcdTc5ODFcdTc5YmRcdTgyYTlcdTg4N2VcdTg4N2ZcdTg5NWZcdWY5MGFcdTkzMjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdkMWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3ZGNcdTgwYWZcdTRmMDFcdTRmMGVcdTUxNzZc''@;'; put 'put ''dTUxODBcdTU1ZGNcdTU2NjhcdTU3M2JcdTU3ZmFcdTU3ZmNcdTU5MTRcdTU5NDdcdTU5OTNcdTViYzRcdTVjOTBcdTVkMGVcdTVkZjFcdTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTMiXSxbImQxYTEiLCJcdTY3MWVcdTY3MWZcdTY3NWVcdTY4Y2JcdTY4YzRcdTZhNWZcdTZiM2FcdTZj''@;'; put 'put ''MjNcdTZjN2RcdTZjODJcdTZkYzdcdTczOThcdTc0MjZcdTc0MmFcdTc0ODJcdTc0YTNcdTc1NzhcdTc1N2ZcdTc4ODFcdTc4ZWZcdTc5NDFcdTc5NDdcdTc5NDhcdTc5N2FcdTdiOTVcdTdkMDBcdTdkYmFcdTdmODhcdTgwMDZcdTgwMmRcdTgwOGNcdThhMThcdThiNGZcdThjNDhcdThkNzdc''@;'; put 'put ''dTkzMjFcdTkzMjRcdTk4ZTJcdTk5NTFcdTlhMGVcdTlhMGZcdTlhNjVcdTllOTJcdTdkY2FcdTRmNzZcdTU0MDlcdTYyZWVcdTY4NTRcdTkxZDFcdTU1YWJcdTUxM2FcdWY5MGJcdWY5MGNcdTVhMWNcdTYxZTZcdWY5MGRcdTYyY2ZcdTYyZmZcdWY5MGUiLDUsIlx1OTBhM1x1ZjkxNCIsNCwi''@;'; put 'put ''XHU4YWZlXHVmOTE5XHVmOTFhXHVmOTFiXHVmOTFjXHU2Njk2XHVmOTFkXHU3MTU2XHVmOTFlXHVmOTFmXHU5NmUzXHVmOTIwXHU2MzRmXHU2MzdhXHU1MzU3XHVmOTIxXHU2NzhmXHU2OTYwXHU2ZTczXHVmOTIyXHU3NTM3XHVmOTIzXHVmOTI0XHVmOTI1Il0sWyJkMmExIiwiXHU3ZDBkXHVm''@;'; put 'put ''OTI2XHVmOTI3XHU4ODcyXHU1NmNhXHU1YTE4XHVmOTI4Iiw0LCJcdTRlNDNcdWY5MmRcdTUxNjdcdTU5NDhcdTY3ZjBcdTgwMTBcdWY5MmVcdTU5NzNcdTVlNzRcdTY0OWFcdTc5Y2FcdTVmZjVcdTYwNmNcdTYyYzhcdTYzN2JcdTViZTdcdTViZDdcdTUyYWFcdWY5MmZcdTU5NzRcdTVmMjlc''@;'; put 'put ''dTYwMTJcdWY5MzBcdWY5MzFcdWY5MzJcdTc0NTlcdWY5MzMiLDUsIlx1OTlkMVx1ZjkzOSIsMTAsIlx1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1Zjk0OVx1NWMzZlx1Zjk0YSIsNywiXHU1YWU5XHU4YTI1XHU2NzdiXHU3ZDEw''@;'; put 'put ''XHVmOTUyIiw1LCJcdTgwZmRcdWY5NThcdWY5NTlcdTVjM2NcdTZjZTVcdTUzM2ZcdTZlYmFcdTU5MWFcdTgzMzYiXSxbImQzYTEiLCJcdTRlMzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4YzdcdTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBcdTZiYjVcdTZlNGRcdTc3ZWRcdTdhZWZcdTdj''@;'; put 'put ''MWVcdTdkZGVcdTg2Y2JcdTg4OTJcdTkxMzJcdTkzNWJcdTY0YmJcdTZmYmVcdTczN2FcdTc1YjhcdTkwNTRcdTU1NTZcdTU3NGRcdTYxYmFcdTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZmYjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1NDFcdTg5ODNcdThhYzdcdThiNWFcdTkzMWZc''@;'; put 'put ''dTZjOTNcdTc1NTNcdTdiNTRcdThlMGZcdTkwNWRcdTU1MTBcdTU4MDJcdTU4NThcdTVlNjJcdTYyMDdcdTY0OWVcdTY4ZTBcdTc1NzZcdTdjZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVcdTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZcdTVmODVcdTYyMzRcdTY0ZTFcdTczYjNcdTgx''@;'; put 'put ''ZmFcdTg4OGJcdThjYjhcdTk2OGFcdTllZGJcdTViODVcdTVmYjdcdTYwYjNcdTUwMTJcdTUyMDBcdTUyMzBcdTU3MTZcdTU4MzVcdTU4NTdcdTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVmOTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0MTdcdTY4NDMiXSxbImQ0YTEiLCJcdTY4Zjlc''@;'; put 'put ''dTZhYzJcdTZkZDhcdTZlMjFcdTZlZDRcdTZmZTRcdTcxZmVcdTc2ZGNcdTc3NzlcdTc5YjFcdTdhM2JcdTg0MDRcdTg5YTlcdThjZWRcdThkZjNcdThlNDhcdTkwMDNcdTkwMTRcdTkwNTNcdTkwZmRcdTkzNGRcdTk2NzZcdTk3ZGNcdTZiZDJcdTcwMDZcdTcyNThcdTcyYTJcdTczNjhcdTc3''@;'; put 'put ''NjNcdTc5YmZcdTdiZTRcdTdlOWJcdThiODBcdTU4YTlcdTYwYzdcdTY1NjZcdTY1ZmRcdTY2YmVcdTZjOGNcdTcxMWVcdTcxYzlcdThjNWFcdTk4MTNcdTRlNmRcdTdhODFcdTRlZGRcdTUxYWNcdTUxY2RcdTUyZDVcdTU0MGNcdTYxYTdcdTY3NzFcdTY4NTBcdTY4ZGZcdTZkMWVcdTZmN2Nc''@;'; put 'put ''dTc1YmNcdTc3YjNcdTdhZTVcdTgwZjRcdTg0NjNcdTkyODVcdTUxNWNcdTY1OTdcdTY3NWNcdTY3OTNcdTc1ZDhcdTdhYzdcdTgzNzNcdWY5NWFcdThjNDZcdTkwMTdcdTk4MmRcdTVjNmZcdTgxYzBcdTgyOWFcdTkwNDFcdTkwNmZcdTkyMGRcdTVmOTdcdTVkOWRcdTZhNTlcdTcxYzhcdTc2''@;'; put 'put ''N2JcdTdiNDlcdTg1ZTRcdThiMDRcdTkxMjdcdTlhMzBcdTU1ODdcdTYxZjZcdWY5NWJcdTc2NjlcdTdmODUiXSxbImQ1YTEiLCJcdTg2M2ZcdTg3YmFcdTg4ZjhcdTkwOGZcdWY5NWNcdTZkMWJcdTcwZDlcdTczZGVcdTdkNjFcdTg0M2RcdWY5NWRcdTkxNmFcdTk5ZjFcdWY5NWVcdTRlODJc''@;'; put 'put ''dTUzNzVcdTZiMDRcdTZiMTJcdTcwM2VcdTcyMWJcdTg2MmRcdTllMWVcdTUyNGNcdThmYTNcdTVkNTBcdTY0ZTVcdTY1MmNcdTZiMTZcdTZmZWJcdTdjNDNcdTdlOWNcdTg1Y2RcdTg5NjRcdTg5YmRcdTYyYzlcdTgxZDhcdTg4MWZcdTVlY2FcdTY3MTdcdTZkNmFcdTcyZmNcdTc0MDVcdTc0''@;'; put 'put ''NmZcdTg3ODJcdTkwZGVcdTRmODZcdTVkMGRcdTVmYTBcdTg0MGFcdTUxYjdcdTYzYTBcdTc1NjVcdTRlYWVcdTUwMDZcdTUxNjlcdTUxYzlcdTY4ODFcdTZhMTFcdTdjYWVcdTdjYjFcdTdjZTdcdTgyNmZcdThhZDJcdThmMWJcdTkxY2ZcdTRmYjZcdTUxMzdcdTUyZjVcdTU0NDJcdTVlZWNc''@;'; put 'put ''dTYxNmVcdTYyM2VcdTY1YzVcdTZhZGFcdTZmZmVcdTc5MmFcdTg1ZGNcdTg4MjNcdTk1YWRcdTlhNjJcdTlhNmFcdTllOTdcdTllY2VcdTUyOWJcdTY2YzZcdTZiNzdcdTcwMWRcdTc5MmJcdThmNjJcdTk3NDJcdTYxOTBcdTYyMDBcdTY1MjNcdTZmMjMiXSxbImQ2YTEiLCJcdTcxNDlcdTc0''@;'; put 'put ''ODlcdTdkZjRcdTgwNmZcdTg0ZWVcdThmMjZcdTkwMjNcdTkzNGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZkMGNcdTcwYzhcdTg4YzJcdTVlYzlcdTY1ODJcdTZiYWVcdTZmYzJcdTdjM2VcdTczNzVcdTRlZTRcdTRmMzZcdTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNcdTczYjJcdTdiMmRc''@;'; put 'put ''dTdmOWFcdTdmY2VcdTgwNDZcdTkwMWVcdTkyMzRcdTk2ZjZcdTk3NDhcdTk4MThcdTlmNjFcdTRmOGJcdTZmYTdcdTc5YWVcdTkxYjRcdTk2YjdcdTUyZGVcdWY5NjBcdTY0ODhcdTY0YzRcdTZhZDNcdTZmNWVcdTcwMThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2NWNcdThkZWZcdThm''@;'; put 'put ''MDVcdTk3MzJcdTliNmZcdTlkZmFcdTllNzVcdTc4OGNcdTc5N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTllN2ZcdTllOTNcdThhZDZcdTU4ZGZcdTVmMDRcdTY3MjdcdTcwMjdcdTc0Y2ZcdTdjNjBcdTgwN2VcdTUxMjFcdTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFcdThjZjRcdTk2Zjdc''@;'; put 'put ''dTRlODZcdTUwZGFcdTViZWVcdTVlZDZcdTY1OTlcdTcxY2VcdTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmMiXSxbImQ3YTEiLCJcdTkwN2NcdTliMjdcdTlmOGRcdTU4ZDhcdTVhNDFcdTVjNjJcdTZhMTNcdTZkZGFcdTZmMGZcdTc2M2JcdTdkMmZcdTdlMzdcdTg1MWVcdTg5MzhcdTkzZTRcdTk2''@;'; put 'put ''NGJcdTUyODlcdTY1ZDJcdTY3ZjNcdTY5YjRcdTZkNDFcdTZlOWNcdTcwMGZcdTc0MDlcdTc0NjBcdTc1NTlcdTc2MjRcdTc4NmJcdThiMmNcdTk4NWVcdTUxNmRcdTYyMmVcdTk2NzhcdTRmOTZcdTUwMmJcdTVkMTlcdTZkZWFcdTdkYjhcdThmMmFcdTVmOGJcdTYxNDRcdTY4MTdcdWY5NjFc''@;'; put 'put ''dTk2ODZcdTUyZDJcdTgwOGJcdTUxZGNcdTUxY2NcdTY5NWVcdTdhMWNcdTdkYmVcdTgzZjFcdTk2NzVcdTRmZGFcdTUyMjlcdTUzOThcdTU0MGZcdTU1MGVcdTVjNjVcdTYwYTdcdTY3NGVcdTY4YThcdTZkNmNcdTcyODFcdTcyZjhcdTc0MDZcdTc0ODNcdWY5NjJcdTc1ZTJcdTdjNmNcdTdm''@;'; put 'put ''NzlcdTdmYjhcdTgzODlcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTkxZDBcdTk2ZTJcdTliYzlcdTU0MWRcdTZmN2VcdTcxZDBcdTc0OThcdTg1ZmFcdThlYWFcdTk2YTNcdTljNTdcdTllOWZcdTY3OTdcdTZkY2JcdTc0MzNcdTgxZThcdTk3MTZcdTc4MmMiXSxbImQ4YTEiLCJcdTdhY2JcdTdiMjBc''@;'; put 'put ''dTdjOTJcdTY0NjlcdTc0NmFcdTc1ZjJcdTc4YmNcdTc4ZThcdTk5YWNcdTliNTRcdTllYmJcdTViZGVcdTVlNTVcdTZmMjBcdTgxOWNcdTgzYWJcdTkwODhcdTRlMDdcdTUzNGRcdTVhMjlcdTVkZDJcdTVmNGVcdTYxNjJcdTYzM2RcdTY2NjlcdTY2ZmNcdTZlZmZcdTZmMmJcdTcwNjNcdTc3''@;'; put 'put ''OWVcdTg0MmNcdTg1MTNcdTg4M2JcdThmMTNcdTk5NDVcdTljM2JcdTU1MWNcdTYyYjlcdTY3MmJcdTZjYWJcdTgzMDlcdTg5NmFcdTk3N2FcdTRlYTFcdTU5ODRcdTVmZDhcdTVmZDlcdTY3MWJcdTdkYjJcdTdmNTRcdTgyOTJcdTgzMmJcdTgzYmRcdThmMWVcdTkwOTlcdTU3Y2JcdTU5Yjlc''@;'; put 'put ''dTVhOTJcdTViZDBcdTY2MjdcdTY3OWFcdTY4ODVcdTZiY2ZcdTcxNjRcdTdmNzVcdThjYjdcdThjZTNcdTkwODFcdTliNDVcdTgxMDhcdThjOGFcdTk2NGNcdTlhNDBcdTllYTVcdTViNWZcdTZjMTNcdTczMWJcdTc2ZjJcdTc2ZGZcdTg0MGNcdTUxYWFcdTg5OTNcdTUxNGRcdTUxOTVcdTUy''@;'; put 'put ''YzlcdTY4YzlcdTZjOTRcdTc3MDRcdTc3MjBcdTdkYmZcdTdkZWNcdTk3NjJcdTllYjVcdTZlYzUiXSxbImQ5YTEiLCJcdTg1MTFcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTY2OWRcdTY5MjdcdTZlOWZcdTc2YmZcdTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZcdTkxNjlcdTkyOThcdTljZjRc''@;'; put 'put ''dTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5YzZcdTVlM2RcdTYxNTVcdTY0NzhcdTY0NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2RcdTZiZGJcdTcyNWZcdTcyNjFcdTc0NDFcdTc3MzhcdTc3ZGJcdTgwMTdcdTgyYmNcdTgzMDVcdThiMDBcdThiMjhcdThjOGNcdTY3MjhcdTZjOTBcdTcy''@;'; put 'put ''NjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlcdTZiN2ZcdTZjOTJcdTU5MjJcdTY3MjZcdTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVlZGZcdTYzY2ZcdTY2MzRcdTY3NzNcdTZlM2FcdTczMmJcdTdhZDdcdTgyZDdcdTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVcdTYxY2JcdTYyMGFcdTYyYzdc''@;'; put 'put ''dTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZiY2JcdTcxMjFcdTczZjdcdTc1NWRcdTdlNDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNcdThjYmZcdTk3MjdcdTlkNjFcdTU4YThcdTllZDhcdTUwMTFcdTUyMGVcdTU0M2JcdTU1NGZcdTY1ODciXSxbImRhYTEiLCJcdTZjNzZcdTdkMGFcdTdk''@;'; put 'put ''MGJcdTgwNWVcdTg2OGFcdTk1ODBcdTk2ZWZcdTUyZmZcdTZjOTVcdTcyNjlcdTU0NzNcdTVhOWFcdTVjM2VcdTVkNGJcdTVmNGNcdTVmYWVcdTY3MmFcdTY4YjZcdTY5NjNcdTZlM2NcdTZlNDRcdTc3MDlcdTdjNzNcdTdmOGVcdTg1ODdcdThiMGVcdThmZjdcdTk3NjFcdTllZjRcdTVjYjdc''@;'; put 'put ''dTYwYjZcdTYxMGRcdTYxYWJcdTY1NGZcdTY1ZmJcdTY1ZmNcdTZjMTFcdTZjZWZcdTczOWZcdTczYzlcdTdkZTFcdTk1OTRcdTViYzZcdTg3MWNcdThiMTBcdTUyNWRcdTUzNWFcdTYyY2RcdTY0MGZcdTY0YjJcdTY3MzRcdTZhMzhcdTZjY2FcdTczYzBcdTc0OWVcdTdiOTRcdTdjOTVcdTdl''@;'; put 'put ''MWJcdTgxOGFcdTgyMzZcdTg1ODRcdThmZWJcdTk2ZjlcdTk5YzFcdTRmMzRcdTUzNGFcdTUzY2RcdTUzZGJcdTYyY2NcdTY0MmNcdTY1MDBcdTY1OTFcdTY5YzNcdTZjZWVcdTZmNThcdTczZWRcdTc1NTRcdTc2MjJcdTc2ZTRcdTc2ZmNcdTc4ZDBcdTc4ZmJcdTc5MmNcdTdkNDZcdTgyMmNc''@;'; put 'put ''dTg3ZTBcdThmZDRcdTk4MTJcdTk4ZWZcdTUyYzNcdTYyZDRcdTY0YTVcdTZlMjRcdTZmNTEiXSxbImRiYTEiLCJcdTc2N2NcdThkY2JcdTkxYjFcdTkyNjJcdTlhZWVcdTliNDNcdTUwMjNcdTUwOGRcdTU3NGFcdTU5YThcdTVjMjhcdTVlNDdcdTVmNzdcdTYyM2ZcdTY1M2VcdTY1YjlcdTY1''@;'; put 'put ''YzFcdTY2MDlcdTY3OGJcdTY5OWNcdTZlYzJcdTc4YzVcdTdkMjFcdTgwYWFcdTgxODBcdTgyMmJcdTgyYjNcdTg0YTFcdTg2OGNcdThhMmFcdThiMTdcdTkwYTZcdTk2MzJcdTlmOTBcdTUwMGRcdTRmZjNcdWY5NjNcdTU3ZjlcdTVmOThcdTYyZGNcdTYzOTJcdTY3NmZcdTZlNDNcdTcxMTlc''@;'; put 'put ''dTc2YzNcdTgwY2NcdTgwZGFcdTg4ZjRcdTg4ZjVcdTg5MTlcdThjZTBcdThmMjlcdTkxNGRcdTk2NmFcdTRmMmZcdTRmNzBcdTVlMWJcdTY3Y2ZcdTY4MjJcdTc2N2RcdTc2N2VcdTliNDRcdTVlNjFcdTZhMGFcdTcxNjlcdTcxZDRcdTc1NmFcdWY5NjRcdTdlNDFcdTg1NDNcdTg1ZTlcdTk4''@;'; put 'put ''ZGNcdTRmMTBcdTdiNGZcdTdmNzBcdTk1YTVcdTUxZTFcdTVlMDZcdTY4YjVcdTZjM2VcdTZjNGVcdTZjZGJcdTcyYWZcdTdiYzRcdTgzMDNcdTZjZDVcdTc0M2FcdTUwZmJcdTUyODhcdTU4YzFcdTY0ZDhcdTZhOTdcdTc0YTdcdTc2NTYiXSxbImRjYTEiLCJcdTc4YTdcdTg2MTdcdTk1ZTJc''@;'; put 'put ''dTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFcdThiOGFcdThmYThcdThmYWZcdTkwOGFcdTUyMjVcdTc3YTVcdTljNDlcdTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVcdTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRcdTY4YzVcdTcwYjNcdTc1MDFcdTc1YzVcdTc5YzlcdTdhZGRcdThmMjdcdTk5''@;'; put 'put ''MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4MzFcdTViZjZcdTY2NmVcdTZiNjVcdTZkMTFcdTZlN2FcdTZmN2RcdTczZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUzMTBcdTUzNWNcdTViOTNcdTVmYTlcdTY3MGRcdTc5OGZcdTgxNzlcdTgzMmZc''@;'; put 'put ''dTg1MTRcdTg5MDdcdTg5ODZcdThmMzlcdThmM2JcdTk5YTVcdTljMTJcdTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlcdTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdcdTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJcdTg0ZWNcdTg3MDJcdTkwMjJcdTkyZDJcdTljZjNcdTRlMGRcdTRlZDhcdTRm''@;'; put 'put ''ZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0MjZcdTU0OTBcdTU3ZTBcdTU5MmJcdTVhNjYiXSxbImRkYTEiLCJcdTViNWFcdTViNzVcdTViY2NcdTVlOWNcdWY5NjZcdTYyNzZcdTY1NzdcdTY1YTdcdTZkNmVcdTZlYTVcdTcyMzZcdTdiMjZcdTdjM2ZcdTdmMzZcdTgxNTBcdTgxNTFcdTgxOWFc''@;'; put 'put ''dTgyNDBcdTgyOTlcdTgzYTlcdThhMDNcdThjYTBcdThjZTZcdThjZmJcdThkNzRcdThkYmFcdTkwZThcdTkxZGNcdTk2MWNcdTk2NDRcdTk5ZDlcdTljZTdcdTUzMTdcdTUyMDZcdTU0MjlcdTU2NzRcdTU4YjNcdTU5NTRcdTU5NmVcdTVmZmZcdTYxYTRcdTYyNmVcdTY2MTBcdTZjN2VcdTcx''@;'; put 'put ''MWFcdTc2YzZcdTdjODlcdTdjZGVcdTdkMWJcdTgyYWNcdThjYzFcdTk2ZjBcdWY5NjdcdTRmNWJcdTVmMTdcdTVmN2ZcdTYyYzJcdTVkMjlcdTY3MGJcdTY4ZGFcdTc4N2NcdTdlNDNcdTlkNmNcdTRlMTVcdTUwOTlcdTUzMTVcdTUzMmFcdTUzNTFcdTU5ODNcdTVhNjJcdTVlODdcdTYwYjJc''@;'; put 'put ''dTYxOGFcdTYyNDlcdTYyNzlcdTY1OTBcdTY3ODdcdTY5YTdcdTZiZDRcdTZiZDZcdTZiZDdcdTZiZDhcdTZjYjhcdWY5NjhcdTc0MzVcdTc1ZmFcdTc4MTJcdTc4OTFcdTc5ZDVcdTc5ZDhcdTdjODNcdTdkY2JcdTdmZTFcdTgwYTUiXSxbImRlYTEiLCJcdTgxM2VcdTgxYzJcdTgzZjJcdTg3''@;'; put 'put ''MWFcdTg4ZThcdThhYjlcdThiNmNcdThjYmJcdTkxMTlcdTk3NWVcdTk4ZGJcdTlmM2JcdTU2YWNcdTViMmFcdTVmNmNcdTY1OGNcdTZhYjNcdTZiYWZcdTZkNWNcdTZmZjFcdTcwMTVcdTcyNWRcdTczYWRcdThjYTdcdThjZDNcdTk4M2JcdTYxOTFcdTZjMzdcdTgwNThcdTlhMDFcdTRlNGRc''@;'; put 'put ''dTRlOGJcdTRlOWJcdTRlZDVcdTRmM2FcdTRmM2NcdTRmN2ZcdTRmZGZcdTUwZmZcdTUzZjJcdTUzZjhcdTU1MDZcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5NjJcdTVhMTFcdTViZWJcdTViZmFcdTVjMDRcdTVkZjNcdTVlMmJcdTVmOTlcdTYwMWRcdTYzNjhcdTY1OWNcdTY1YWZcdTY3ZjZcdTY3''@;'; put 'put ''ZmJcdTY4YWRcdTZiN2JcdTZjOTlcdTZjZDdcdTZlMjNcdTcwMDlcdTczNDVcdTc4MDJcdTc5M2VcdTc5NDBcdTc5NjBcdTc5YzFcdTdiZTlcdTdkMTdcdTdkNzJcdTgwODZcdTgyMGRcdTgzOGVcdTg0ZDFcdTg2YzdcdTg4ZGZcdThhNTBcdThhNWVcdThiMWRcdThjZGNcdThkNjZcdThmYWRc''@;'; put 'put ''dTkwYWFcdTk4ZmNcdTk5ZGZcdTllOWRcdTUyNGFcdWY5NjlcdTY3MTRcdWY5NmEiXSxbImRmYTEiLCJcdTUwOThcdTUyMmFcdTVjNzFcdTY1NjNcdTZjNTVcdTczY2FcdTc1MjNcdTc1OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlcdTRl''@;'; put 'put ''MDlcdWY5NmJcdTY3NDlcdTY4ZWVcdTZlMTdcdTgyOWZcdTg1MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4YWZcdTRlMGFcdTUwYjdcdTUwY2ZcdTUxMWZcdTU1NDZcdTU1YWFcdTU2MTdcdTViNDBcdTVjMTlcdTVjZTBcdTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4NTFc''@;'; put 'put ''dTZhNjFcdTZlNThcdTcyM2RcdTcyNDBcdTcyYzBcdTc2ZjhcdTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRcdThhNzNcdThjNjFcdThjZGVcdTk3MWNcdTU4NWVcdTc0YmRcdThjZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdkMjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRcdTdi''@;'; put 'put ''MTlcdTU4ODVcdTU4ZmJcdTVkYmNcdTVlOGZcdTVlYjZcdTVmOTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2OTFcdTY2ZDlcdTY2ZjhcdTY4MTZcdTY4ZjJcdTcyODBcdTc0NWVcdTdiNmVcdTdkNmVcdTdkZDZcdTdmNzIiXSxbImUwYTEiLCJcdTgwZTVcdTgyMTJcdTg1YWZcdTg5N2Zc''@;'; put 'put ''dThhOTNcdTkwMWRcdTkyZTRcdTllY2RcdTlmMjBcdTU5MTVcdTU5NmRcdTVlMmRcdTYwZGNcdTY2MTRcdTY2NzNcdTY3OTBcdTZjNTBcdTZkYzVcdTZmNWZcdTc3ZjNcdTc4YTlcdTg0YzZcdTkxY2JcdTkzMmJcdTRlZDlcdTUwY2FcdTUxNDhcdTU1ODRcdTViMGJcdTViYTNcdTYyNDdcdTY1''@;'; put 'put ''N2VcdTY1Y2JcdTZlMzJcdTcxN2RcdTc0MDFcdTc0NDRcdTc0ODdcdTc0YmZcdTc2NmNcdTc5YWFcdTdkZGFcdTdlNTVcdTdmYThcdTgxN2FcdTgxYjNcdTgyMzlcdTg2MWFcdTg3ZWNcdThhNzVcdThkZTNcdTkwNzhcdTkyOTFcdTk0MjVcdTk5NGRcdTliYWVcdTUzNjhcdTVjNTFcdTY5NTRc''@;'; put 'put ''dTZjYzRcdTZkMjlcdTZlMmJcdTgyMGNcdTg1OWJcdTg5M2JcdThhMmRcdThhYWFcdTk2ZWFcdTlmNjdcdTUyNjFcdTY2YjlcdTZiYjJcdTdlOTZcdTg3ZmVcdThkMGRcdTk1ODNcdTk2NWRcdTY1MWRcdTZkODlcdTcxZWVcdWY5NmVcdTU3Y2VcdTU5ZDNcdTViYWNcdTYwMjdcdTYwZmFcdTYy''@;'; put 'put ''MTBcdTY2MWZcdTY2NWZcdTczMjlcdTczZjlcdTc2ZGJcdTc3MDFcdTdiNmMiXSxbImUxYTEiLCJcdTgwNTZcdTgwNzJcdTgxNjVcdThhYTBcdTkxOTJcdTRlMTZcdTUyZTJcdTZiNzJcdTZkMTdcdTdhMDVcdTdiMzlcdTdkMzBcdWY5NmZcdThjYjBcdTUzZWNcdTU2MmZcdTU4NTFcdTViYjVc''@;'; put 'put ''dTVjMGZcdTVjMTFcdTVkZTJcdTYyNDBcdTYzODNcdTY0MTRcdTY2MmRcdTY4YjNcdTZjYmNcdTZkODhcdTZlYWZcdTcwMWZcdTcwYTRcdTcxZDJcdTc1MjZcdTc1OGZcdTc1OGVcdTc2MTlcdTdiMTFcdTdiZTBcdTdjMmJcdTdkMjBcdTdkMzlcdTg1MmNcdTg1NmRcdTg2MDdcdThhMzRcdTkw''@;'; put 'put ''MGRcdTkwNjFcdTkwYjVcdTkyYjdcdTk3ZjZcdTlhMzdcdTRmZDdcdTVjNmNcdTY3NWZcdTZkOTFcdTdjOWZcdTdlOGNcdThiMTZcdThkMTZcdTkwMWZcdTViNmJcdTVkZmRcdTY0MGRcdTg0YzBcdTkwNWNcdTk4ZTFcdTczODdcdTViOGJcdTYwOWFcdTY3N2VcdTZkZGVcdThhMWZcdThhYTZc''@;'; put 'put ''dTkwMDFcdTk4MGNcdTUyMzdcdWY5NzBcdTcwNTFcdTc4OGVcdTkzOTZcdTg4NzBcdTkxZDdcdTRmZWVcdTUzZDdcdTU1ZmRcdTU2ZGFcdTU3ODJcdTU4ZmRcdTVhYzJcdTViODhcdTVjYWJcdTVjYzBcdTVlMjVcdTYxMDEiXSxbImUyYTEiLCJcdTYyMGRcdTYyNGJcdTYzODhcdTY0MWNcdTY1''@;'; put 'put ''MzZcdTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRcdTZkMTlcdTZmMzFcdTcxZTdcdTcyZTlcdTczNzhcdTc0MDdcdTc0YjJcdTc2MjZcdTc3NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdkOGZcdTdkYWNcdTdlNjFcdTdmOWVcdTgxMjlcdTgzMzFcdTg0OTBcdTg0ZGFcdTg1ZWFcdTg4OTZc''@;'; put 'put ''dThhYjBcdThiOTBcdThmMzhcdTkwNDJcdTkwODNcdTkxNmNcdTkyOTZcdTkyYjlcdTk2OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3MDBcdTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRcdTU4N2VcdTU5MTlcdTViNzBcdTViYmZcdTZkZDFcdTZmNWFcdTcxOWZcdTc0MjFcdTc0YjlcdTgw''@;'; put 'put ''ODVcdTgzZmRcdTVkZTFcdTVmODdcdTVmYWFcdTYwNDJcdTY1ZWNcdTY4MTJcdTY5NmZcdTZhNTNcdTZiODlcdTZkMzVcdTZkZjNcdTczZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgxMjNcdTgyMWNcdTgzNDBcdTg0ZjRcdTg1NjNcdThhNjJcdThhYzRcdTkxODdcdTkzMWVcdTk4MDZc''@;'; put 'put ''dTk5YjRcdTYyMGNcdTg4NTNcdThmZjBcdTkyNjVcdTVkMDdcdTVkMjciXSxbImUzYTEiLCJcdTVkNjlcdTc0NWZcdTgxOWRcdTg3NjhcdTZmZDVcdTYyZmVcdTdmZDJcdTg5MzZcdTg5NzJcdTRlMWVcdTRlNThcdTUwZTdcdTUyZGRcdTUzNDdcdTYyN2ZcdTY2MDdcdTdlNjlcdTg4MDVcdTk2''@;'; put 'put ''NWVcdTRmOGRcdTUzMTlcdTU2MzZcdTU5Y2JcdTVhYTRcdTVjMzhcdTVjNGVcdTVjNGRcdTVlMDJcdTVmMTFcdTYwNDNcdTY1YmRcdTY2MmZcdTY2NDJcdTY3YmVcdTY3ZjRcdTczMWNcdTc3ZTJcdTc5M2FcdTdmYzVcdTg0OTRcdTg0Y2RcdTg5OTZcdThhNjZcdThhNjlcdThhZTFcdThjNTVc''@;'; put 'put ''dThjN2FcdTU3ZjRcdTViZDRcdTVmMGZcdTYwNmZcdTYyZWRcdTY5MGRcdTZiOTZcdTZlNWNcdTcxODRcdTdiZDJcdTg3NTVcdThiNThcdThlZmVcdTk4ZGZcdTk4ZmVcdTRmMzhcdTRmODFcdTRmZTFcdTU0N2JcdTVhMjBcdTViYjhcdTYxM2NcdTY1YjBcdTY2NjhcdTcxZmNcdTc1MzNcdTc5''@;'; put 'put ''NWVcdTdkMzNcdTgxNGVcdTgxZTNcdTgzOThcdTg1YWFcdTg1Y2VcdTg3MDNcdThhMGFcdThlYWJcdThmOWJcdWY5NzFcdThmYzVcdTU5MzFcdTViYTRcdTViZTZcdTYwODlcdTViZTlcdTVjMGJcdTVmYzNcdTZjODEiXSxbImU0YTEiLCJcdWY5NzJcdTZkZjFcdTcwMGJcdTc1MWFcdTgyYWZc''@;'; put 'put ''dThhZjZcdTRlYzBcdTUzNDFcdWY5NzNcdTk2ZDlcdTZjMGZcdTRlOWVcdTRmYzRcdTUxNTJcdTU1NWVcdTVhMjVcdTVjZThcdTYyMTFcdTcyNTlcdTgyYmRcdTgzYWFcdTg2ZmVcdTg4NTlcdThhMWRcdTk2M2ZcdTk2YzVcdTk5MTNcdTlkMDlcdTlkNWRcdTU4MGFcdTVjYjNcdTVkYmRcdTVl''@;'; put 'put ''NDRcdTYwZTFcdTYxMTVcdTYzZTFcdTZhMDJcdTZlMjVcdTkxMDJcdTkzNTRcdTk4NGVcdTljMTBcdTlmNzdcdTViODlcdTVjYjhcdTYzMDlcdTY2NGZcdTY4NDhcdTc3M2NcdTk2YzFcdTk3OGRcdTk4NTRcdTliOWZcdTY1YTFcdThiMDFcdThlY2JcdTk1YmNcdTU1MzVcdTVjYTlcdTVkZDZc''@;'; put 'put ''dTVlYjVcdTY2OTdcdTc2NGNcdTgzZjRcdTk1YzdcdTU4ZDNcdTYyYmNcdTcyY2VcdTlkMjhcdTRlZjBcdTU5MmVcdTYwMGZcdTY2M2JcdTZiODNcdTc5ZTdcdTlkMjZcdTUzOTNcdTU0YzBcdTU3YzNcdTVkMTZcdTYxMWJcdTY2ZDZcdTZkYWZcdTc4OGRcdTgyN2VcdTk2OThcdTk3NDRcdTUz''@;'; put 'put ''ODRcdTYyN2NcdTYzOTZcdTZkYjJcdTdlMGFcdTgxNGJcdTk4NGQiXSxbImU1YTEiLCJcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZcdTUwM2JcdTUxYjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5MzBcdTcyM2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5NzVcdWY5NzZcdTdkMDRc''@;'; put 'put ''dTgyZTVcdTg0NmZcdTg0YmJcdTg1ZTVcdThlOGRcdWY5NzdcdTRmNmZcdWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1MThcdTY1NmRcdTY2OThcdWY5N2FcdTY5NGFcdTZhMjNcdTZkMGJcdTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNcdTdhNzBcdWY5N2JcdTdm''@;'; put 'put ''OGFcdWY5N2NcdTg5NDRcdWY5N2RcdThiOTNcdTkxYzBcdTk2N2RcdWY5N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBcdTc5YTZcdThhOWVcdTk5YWRcdTliNWFcdTlmNmNcdTUxMDRcdTYxYjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4MzBcdTVmNjZcdTcxMDlc''@;'; put 'put ''dThhMDBcdThhZmFcdTViN2NcdTg2MTZcdTRmZmFcdTUxM2NcdTU2YjRcdTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRlODhcdTRmNTlcdWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJcdWY5ODIiXSxbImU2YTEiLCJcdWY5ODNcdTZiNWZcdTZjNWRcdWY5ODRcdTc0YjVcdTc5''@;'; put 'put ''MTZcdWY5ODVcdTgyMDdcdTgyNDVcdTgzMzlcdThmM2ZcdThmNWRcdWY5ODZcdTk5MThcdWY5ODdcdWY5ODhcdWY5ODlcdTRlYTZcdWY5OGFcdTU3ZGZcdTVmNzlcdTY2MTNcdWY5OGJcdWY5OGNcdTc1YWJcdTdlNzlcdThiNmZcdWY5OGRcdTkwMDZcdTlhNWJcdTU2YTVcdTU4MjdcdTU5Zjhc''@;'; put 'put ''dTVhMWZcdTViYjRcdWY5OGVcdTVlZjZcdWY5OGZcdWY5OTBcdTYzNTBcdTYzM2JcdWY5OTFcdTY5M2RcdTZjODdcdTZjYmZcdTZkOGVcdTZkOTNcdTZkZjVcdTZmMTRcdWY5OTJcdTcwZGZcdTcxMzZcdTcxNTlcdWY5OTNcdTcxYzNcdTcxZDVcdWY5OTRcdTc4NGZcdTc4NmZcdWY5OTVcdTdi''@;'; put 'put ''NzVcdTdkZTNcdWY5OTZcdTdlMmZcdWY5OTdcdTg4NGRcdThlZGZcdWY5OThcdWY5OTlcdWY5OWFcdTkyNWJcdWY5OWJcdTljZjZcdWY5OWNcdWY5OWRcdWY5OWVcdTYwODVcdTZkODVcdWY5OWZcdTcxYjFcdWY5YTBcdWY5YTFcdTk1YjFcdTUzYWRcdWY5YTJcdWY5YTNcdWY5YTRcdTY3ZDNc''@;'; put 'put ''dWY5YTVcdTcwOGVcdTcxMzBcdTc0MzBcdTgyNzZcdTgyZDIiXSxbImU3YTEiLCJcdWY5YTZcdTk1YmJcdTlhZTVcdTllN2RcdTY2YzRcdWY5YTdcdTcxYzFcdTg0NDlcdWY5YThcdWY5YTlcdTU4NGJcdWY5YWFcdWY5YWJcdTVkYjhcdTVmNzFcdWY5YWNcdTY2MjBcdTY2OGVcdTY5NzlcdTY5''@;'; put 'put ''YWVcdTZjMzhcdTZjZjNcdTZlMzZcdTZmNDFcdTZmZGFcdTcwMWJcdTcwMmZcdTcxNTBcdTcxZGZcdTczNzBcdWY5YWRcdTc0NWJcdWY5YWVcdTc0ZDRcdTc2YzhcdTdhNGVcdTdlOTNcdWY5YWZcdWY5YjBcdTgyZjFcdThhNjBcdThmY2VcdWY5YjFcdTkzNDhcdWY5YjJcdTk3MTlcdWY5YjNc''@;'; put 'put ''dWY5YjRcdTRlNDJcdTUwMmFcdWY5YjVcdTUyMDhcdTUzZTFcdTY2ZjNcdTZjNmRcdTZmY2FcdTczMGFcdTc3N2ZcdTdhNjJcdTgyYWVcdTg1ZGRcdTg2MDJcdWY5YjZcdTg4ZDRcdThhNjNcdThiN2RcdThjNmJcdWY5YjdcdTkyYjNcdWY5YjhcdTk3MTNcdTk4MTBcdTRlOTRcdTRmMGRcdTRm''@;'; put 'put ''YzlcdTUwYjJcdTUzNDhcdTU0M2VcdTU0MzNcdTU1ZGFcdTU4NjJcdTU4YmFcdTU5NjdcdTVhMWJcdTViZTRcdTYwOWZcdWY5YjlcdTYxY2FcdTY1NTZcdTY1ZmZcdTY2NjRcdTY4YTdcdTZjNWFcdTZmYjMiXSxbImU4YTEiLCJcdTcwY2ZcdTcxYWNcdTczNTJcdTdiN2RcdTg3MDhcdThhYTRc''@;'; put 'put ''dTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTczNDRcdTczODlcdTkyM2FcdTZlYWJcdTc0NjVcdTc2MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUxNDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkwOTVcdTk2Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdhYTlcdTdhYWFcdTgx''@;'; put 'put ''ZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlcdTViOGNcdTViOWJcdTY4YTFcdTY5MDBcdTZkNjNcdTczYTlcdTc0MTNcdTc0MmNcdTc4OTdcdTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVcdTk4MTFcdTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlcdTZjNmFcdTczOGJc''@;'; put 'put ''dTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5MTZcdTVkNmNcdTVkY2RcdTczMjVcdTc1NGZcdWY5YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVkYTJcdTYyZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5YmVcdTY2ZGNcdWY5''@;'; put 'put ''YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRcdWY5YzEiXSxbImU5YTEiLCJcdTdhODhcdTdhYWZcdTdlNDdcdTdlNWVcdTgwMDBcdTgxNzBcdWY5YzJcdTg3ZWZcdTg5ODFcdThiMjBcdTkwNTlcdWY5YzNcdTkwODBcdTk5NTJcdTYxN2VcdTZiMzJcdTZkNzRcdTdlMWZcdTg5MjVcdThmYjFc''@;'; put 'put ''dTRmZDFcdTUwYWRcdTUxOTdcdTUyYzdcdTU3YzdcdTU4ODlcdTViYjlcdTVlYjhcdTYxNDJcdTY5OTVcdTZkOGNcdTZlNjdcdTZlYjZcdTcxOTRcdTc0NjJcdTc1MjhcdTc1MmNcdTgwNzNcdTgzMzhcdTg0YzlcdThlMGFcdTkzOTRcdTkzZGVcdWY5YzRcdTRlOGVcdTRmNTFcdTUwNzZcdTUx''@;'; put 'put ''MmFcdTUzYzhcdTUzY2JcdTUzZjNcdTViODdcdTViZDNcdTVjMjRcdTYxMWFcdTYxODJcdTY1ZjRcdTcyNWJcdTczOTdcdTc0NDBcdTc2YzJcdTc5NTBcdTc5OTFcdTc5YjlcdTdkMDZcdTdmYmRcdTgyOGJcdTg1ZDVcdTg2NWVcdThmYzJcdTkwNDdcdTkwZjVcdTkxZWFcdTk2ODVcdTk2ZThc''@;'; put 'put ''dTk2ZTlcdTUyZDZcdTVmNjdcdTY1ZWRcdTY2MzFcdTY4MmZcdTcxNWNcdTdhMzZcdTkwYzFcdTk4MGFcdTRlOTFcdWY5YzVcdTZhNTJcdTZiOWVcdTZmOTBcdTcxODlcdTgwMThcdTgyYjhcdTg1NTMiXSxbImVhYTEiLCJcdTkwNGJcdTk2OTVcdTk2ZjJcdTk3ZmJcdTg1MWFcdTliMzFcdTRl''@;'; put 'put ''OTBcdTcxOGFcdTk2YzRcdTUxNDNcdTUzOWZcdTU0ZTFcdTU3MTNcdTU3MTJcdTU3YTNcdTVhOWJcdTVhYzRcdTViYzNcdTYwMjhcdTYxM2ZcdTYzZjRcdTZjODVcdTZkMzlcdTZlNzJcdTZlOTBcdTcyMzBcdTczM2ZcdTc0NTdcdTgyZDFcdTg4ODFcdThmNDVcdTkwNjBcdWY5YzZcdTk2NjJc''@;'; put 'put ''dTk4NThcdTlkMWJcdTY3MDhcdThkOGFcdTkyNWVcdTRmNGRcdTUwNDlcdTUwZGVcdTUzNzFcdTU3MGRcdTU5ZDRcdTVhMDFcdTVjMDlcdTYxNzBcdTY2OTBcdTZlMmRcdTcyMzJcdTc0NGJcdTdkZWZcdTgwYzNcdTg0MGVcdTg0NjZcdTg1M2ZcdTg3NWZcdTg4NWJcdTg5MThcdThiMDJcdTkw''@;'; put 'put ''NTVcdTk3Y2JcdTliNGZcdTRlNzNcdTRmOTFcdTUxMTJcdTUxNmFcdWY5YzdcdTU1MmZcdTU1YTlcdTViN2FcdTViYTVcdTVlN2NcdTVlN2RcdTVlYmVcdTYwYTBcdTYwZGZcdTYxMDhcdTYxMDlcdTYzYzRcdTY1MzhcdTY3MDlcdWY5YzhcdTY3ZDRcdTY3ZGFcdWY5YzlcdTY5NjFcdTY5NjJc''@;'; put 'put ''dTZjYjlcdTZkMjdcdWY5Y2FcdTZlMzhcdWY5Y2IiXSxbImViYTEiLCJcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0NWNcdTc1MzFcdWY5Y2RcdTc2NTJcdWY5Y2VcdWY5Y2ZcdTdkYWRcdTgxZmVcdTg0MzhcdTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkw''@;'; put 'put ''M2VcdTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVcdWY5ZDBcdWY5ZDFcdTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJcdWY5ZDNcdWY5ZDRcdTUxNDFcdTU5NmJcdTVjMzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTczYTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlc''@;'; put 'put ''dWY5ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcwMWNcdTdkNjhcdTg3OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZiYjdcdThhYmVcdTkyODBcdTk2YjFcdTRlNTlcdTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBcdTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgx''@;'; put 'put ''YmFcdTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBcdTViOWNcdTYxMGZcdTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFcdTc3ZTNcdTdmYTlcdTgyNjRcdTg1OGZcdTg3ZmJcdTg4NjNcdThhYmMiXSxbImVjYTEiLCJcdThiNzBcdTkxYWJcdTRlOGNcdTRlZTVcdTRmMGFcdWY5ZGRcdWY5ZGVc''@;'; put 'put ''dTU5MzdcdTU5ZThcdWY5ZGZcdTVkZjJcdTVmMWJcdTVmNWJcdTYwMjFcdWY5ZTBcdWY5ZTFcdWY5ZTJcdWY5ZTNcdTcyM2VcdTczZTVcdWY5ZTRcdTc1NzBcdTc1Y2RcdWY5ZTVcdTc5ZmJcdWY5ZTZcdTgwMGNcdTgwMzNcdTgwODRcdTgyZTFcdTgzNTFcdWY5ZTdcdWY5ZThcdThjYmRcdThj''@;'; put 'put ''YjNcdTkwODdcdWY5ZTlcdWY5ZWFcdTk4ZjRcdTk5MGNcdWY5ZWJcdWY5ZWNcdTcwMzdcdTc2Y2FcdTdmY2FcdTdmY2NcdTdmZmNcdThiMWFcdTRlYmFcdTRlYzFcdTUyMDNcdTUzNzBcdWY5ZWRcdTU0YmRcdTU2ZTBcdTU5ZmJcdTViYzVcdTVmMTVcdTVmY2RcdTZlNmVcdWY5ZWVcdWY5ZWZc''@;'; put 'put ''dTdkNmFcdTgzMzVcdWY5ZjBcdTg2OTNcdThhOGRcdWY5ZjFcdTk3NmRcdTk3NzdcdWY5ZjJcdWY5ZjNcdTRlMDBcdTRmNWFcdTRmN2VcdTU4ZjlcdTY1ZTVcdTZlYTJcdTkwMzhcdTkzYjBcdTk5YjlcdTRlZmJcdTU4ZWNcdTU5OGFcdTU5ZDlcdTYwNDFcdWY5ZjRcdWY5ZjVcdTdhMTRcdWY5''@;'; put 'put ''ZjZcdTgzNGZcdThjYzNcdTUxNjVcdTUzNDQiXSxbImVkYTEiLCJcdWY5ZjdcdWY5ZjhcdWY5ZjlcdTRlY2RcdTUyNjlcdTViNTVcdTgyYmZcdTRlZDRcdTUyM2FcdTU0YThcdTU5YzlcdTU5ZmZcdTViNTBcdTViNTdcdTViNWNcdTYwNjNcdTYxNDhcdTZlY2JcdTcwOTlcdTcxNmVcdTczODZc''@;'; put 'put ''dTc0ZjdcdTc1YjVcdTc4YzFcdTdkMmJcdTgwMDVcdTgxZWFcdTgzMjhcdTg1MTdcdTg1YzlcdThhZWVcdThjYzdcdTk2Y2NcdTRmNWNcdTUyZmFcdTU2YmNcdTY1YWJcdTY2MjhcdTcwN2NcdTcwYjhcdTcyMzVcdTdkYmRcdTgyOGRcdTkxNGNcdTk2YzBcdTlkNzJcdTViNzFcdTY4ZTdcdTZi''@;'; put 'put ''OThcdTZmN2FcdTc2ZGVcdTVjOTFcdTY2YWJcdTZmNWJcdTdiYjRcdTdjMmFcdTg4MzZcdTk2ZGNcdTRlMDhcdTRlZDdcdTUzMjBcdTU4MzRcdTU4YmJcdTU4ZWZcdTU5NmNcdTVjMDdcdTVlMzNcdTVlODRcdTVmMzVcdTYzOGNcdTY2YjJcdTY3NTZcdTZhMWZcdTZhYTNcdTZiMGNcdTZmM2Zc''@;'; put 'put ''dTcyNDZcdWY5ZmFcdTczNTBcdTc0OGJcdTdhZTBcdTdjYTdcdTgxNzhcdTgxZGZcdTgxZTdcdTgzOGFcdTg0NmNcdTg1MjNcdTg1OTRcdTg1Y2ZcdTg4ZGRcdThkMTNcdTkxYWNcdTk1NzciXSxbImVlYTEiLCJcdTk2OWNcdTUxOGRcdTU0YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3NTBcdTY4''@;'; put 'put ''M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2RcdTdlMjFcdTg4YzFcdThjYTFcdThmMDlcdTlmNGJcdTlmNGVcdTcyMmRcdTdiOGZcdThhY2RcdTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBcdTU5ZDBcdTVlOTVcdTYyYjVcdTY3NzVcdTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFcdTcyZDlc''@;'; put 'put ''dTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgyZTdcdTgzZjlcdTg0NTdcdTg1ZjdcdThhNWJcdThjYWZcdThlODdcdTkwMTlcdTkwYjhcdTk2Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTViYzJcdTY0NThcdTY1NzVcdTZlZjRcdTcyYzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdiMWJcdTdj''@;'; put 'put ''NGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJcdThjY2FcdThkNjRcdThkZTFcdThlNWZcdThmZWFcdThmZjlcdTkwNjlcdTkzZDFcdTRmNDNcdTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRcdTUyNmFcdTU4NjFcdTU4N2NcdTU5NjBcdTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJcdTYyMzBc''@;'; put 'put ''dTY4MTNcdTZiYmZcdTZjMDhcdTZmYjEiXSxbImVmYTEiLCJcdTcxNGVcdTc0MjBcdTc1MzBcdTc1MzhcdTc1NTFcdTc2NzJcdTdiNGNcdTdiOGJcdTdiYWRcdTdiYzZcdTdlOGZcdThhNmVcdThmM2VcdThmNDlcdTkyM2ZcdTkyOTNcdTkzMjJcdTk0MmJcdTk2ZmJcdTk4NWFcdTk4NmJcdTk5''@;'; put 'put ''MWVcdTUyMDdcdTYyMmFcdTYyOThcdTZkNTlcdTc2NjRcdTdhY2FcdTdiYzBcdTdkNzZcdTUzNjBcdTVjYmVcdTVlOTdcdTZmMzhcdTcwYjlcdTdjOThcdTk3MTFcdTliOGVcdTllZGVcdTYzYTVcdTY0N2FcdTg3NzZcdTRlMDFcdTRlOTVcdTRlYWRcdTUwNWNcdTUwNzVcdTU0NDhcdTU5YzNc''@;'; put 'put ''dTViOWFcdTVlNDBcdTVlYWRcdTVlZjdcdTVmODFcdTYwYzVcdTYzM2FcdTY1M2ZcdTY1NzRcdTY1Y2NcdTY2NzZcdTY2NzhcdTY3ZmVcdTY5NjhcdTZhODlcdTZiNjNcdTZjNDBcdTZkYzBcdTZkZThcdTZlMWZcdTZlNWVcdTcwMWVcdTcwYTFcdTczOGVcdTczZmRcdTc1M2FcdTc3NWJcdTc4''@;'; put 'put ''ODdcdTc5OGVcdTdhMGJcdTdhN2RcdTdjYmVcdTdkOGVcdTgyNDdcdThhMDJcdThhZWFcdThjOWVcdTkxMmRcdTkxNGFcdTkxZDhcdTkyNjZcdTkyY2NcdTkzMjBcdTk3MDZcdTk3NTYiXSxbImYwYTEiLCJcdTk3NWNcdTk4MDJcdTlmMGVcdTUyMzZcdTUyOTFcdTU1N2NcdTU4MjRcdTVlMWRc''@;'; put 'put ''dTVmMWZcdTYwOGNcdTYzZDBcdTY4YWZcdTZmZGZcdTc5NmRcdTdiMmNcdTgxY2RcdTg1YmFcdTg4ZmRcdThhZjhcdThlNDRcdTkxOGRcdTk2NjRcdTk2OWJcdTk3M2RcdTk4NGNcdTlmNGFcdTRmY2VcdTUxNDZcdTUxY2JcdTUyYTlcdTU2MzJcdTVmMTRcdTVmNmJcdTYzYWFcdTY0Y2RcdTY1''@;'; put 'put ''ZTlcdTY2NDFcdTY2ZmFcdTY2ZjlcdTY3MWRcdTY4OWRcdTY4ZDdcdTY5ZmRcdTZmMTVcdTZmNmVcdTcxNjdcdTcxZTVcdTcyMmFcdTc0YWFcdTc3M2FcdTc5NTZcdTc5NWFcdTc5ZGZcdTdhMjBcdTdhOTVcdTdjOTdcdTdjZGZcdTdkNDRcdTdlNzBcdTgwODdcdTg1ZmJcdTg2YTRcdThhNTRc''@;'; put 'put ''dThhYmZcdThkOTlcdThlODFcdTkwMjBcdTkwNmRcdTkxZTNcdTk2M2JcdTk2ZDVcdTljZTVcdTY1Y2ZcdTdjMDdcdThkYjNcdTkzYzNcdTViNThcdTVjMGFcdTUzNTJcdTYyZDlcdTczMWRcdTUwMjdcdTViOTdcdTVmOWVcdTYwYjBcdTYxNmJcdTY4ZDVcdTZkZDlcdTc0MmVcdTdhMmVcdTdk''@;'; put 'put ''NDJcdTdkOWNcdTdlMzFcdTgxNmIiXSxbImYxYTEiLCJcdThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdcdTYzMmJcdTdmNmFcdTRlM2JcdTRmNGZcdTRmOGZcdTUwNWFcdTU5ZGRcdTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZcdTViOTlcdTVkZGVc''@;'; put 'put ''dTVlZGFcdTY2NWRcdTY3MzFcdTY3ZjFcdTY4MmFcdTZjZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdkMDJcdTdkMmNcdTdkYTJcdTgyMWZcdTg2ZGJcdThhM2JcdThhODVcdThkNzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkxNTJcdTk0NDRcdTk5''@;'; put 'put ''ZDBcdTdhZjlcdTdjYTVcdTRmY2FcdTUxMDFcdTUxYzZcdTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNcdTcxMGNcdTc1NmZcdTdhZTNcdTg4MjJcdTkwMjFcdTkwNzVcdTk2Y2JcdTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZcdTkxY2RcdTUzN2Rc''@;'; put 'put ''dTZhZGJcdTY5NmJcdTZjNDFcdTg0N2FcdTU4OWVcdTYxOGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThiNDlcdThkMDhcdTRlNGJcdTUzZWEiXSxbImYyYTEiLCJcdTU0YWJcdTU3MzBcdTU3NDBcdTVmZDdcdTYzMDFcdTYzMDdcdTY0NmZcdTY1MmZcdTY1''@;'; put 'put ''ZThcdTY2N2FcdTY3OWRcdTY3YjNcdTZiNjJcdTZjNjBcdTZjOWFcdTZmMmNcdTc3ZTVcdTc4MjVcdTc5NDlcdTc5NTdcdTdkMTlcdTgwYTJcdTgxMDJcdTgxZjNcdTgyOWRcdTgyYjdcdTg3MThcdThhOGNcdWY5ZmNcdThkMDRcdThkYmVcdTkwNzJcdTc2ZjRcdTdhMTlcdTdhMzdcdTdlNTRc''@;'; put 'put ''dTgwNzdcdTU1MDdcdTU1ZDRcdTU4NzVcdTYzMmZcdTY0MjJcdTY2NDlcdTY2NGJcdTY4NmRcdTY5OWJcdTZiODRcdTZkMjVcdTZlYjFcdTczY2RcdTc0NjhcdTc0YTFcdTc1NWJcdTc1YjlcdTc2ZTFcdTc3MWVcdTc3OGJcdTc5ZTZcdTdlMDlcdTdlMWRcdTgxZmJcdTg1MmZcdTg4OTdcdThh''@;'; put 'put ''M2FcdThjZDFcdThlZWJcdThmYjBcdTkwMzJcdTkzYWRcdTk2NjNcdTk2NzNcdTk3MDdcdTRmODRcdTUzZjFcdTU5ZWFcdTVhYzlcdTVlMTlcdTY4NGVcdTc0YzZcdTc1YmVcdTc5ZTlcdTdhOTJcdTgxYTNcdTg2ZWRcdThjZWFcdThkY2NcdThmZWRcdTY1OWZcdTY3MTVcdWY5ZmRcdTU3Zjdc''@;'; put 'put ''dTZmNTdcdTdkZGRcdThmMmYiXSxbImYzYTEiLCJcdTkzZjZcdTk2YzZcdTVmYjVcdTYxZjJcdTZmODRcdTRlMTRcdTRmOThcdTUwMWZcdTUzYzlcdTU1ZGZcdTVkNmZcdTVkZWVcdTZiMjFcdTZiNjRcdTc4Y2JcdTdiOWFcdWY5ZmVcdThlNDlcdThlY2FcdTkwNmVcdTYzNDlcdTY0M2VcdTc3''@;'; put 'put ''NDBcdTdhODRcdTkzMmZcdTk0N2ZcdTlmNmFcdTY0YjBcdTZmYWZcdTcxZTZcdTc0YThcdTc0ZGFcdTdhYzRcdTdjMTJcdTdlODJcdTdjYjJcdTdlOThcdThiOWFcdThkMGFcdTk0N2RcdTk5MTBcdTk5NGNcdTUyMzlcdTViZGZcdTY0ZTZcdTY3MmRcdTdkMmVcdTUwZWRcdTUzYzNcdTU4Nzlc''@;'; put 'put ''dTYxNThcdTYxNTlcdTYxZmFcdTY1YWNcdTdhZDlcdThiOTJcdThiOTZcdTUwMDlcdTUwMjFcdTUyNzVcdTU1MzFcdTVhM2NcdTVlZTBcdTVmNzBcdTYxMzRcdTY1NWVcdTY2MGNcdTY2MzZcdTY2YTJcdTY5Y2RcdTZlYzRcdTZmMzJcdTczMTZcdTc2MjFcdTdhOTNcdTgxMzlcdTgyNTlcdTgz''@;'; put 'put ''ZDZcdTg0YmNcdTUwYjVcdTU3ZjBcdTViYzBcdTViZThcdTVmNjlcdTYzYTFcdTc4MjZcdTdkYjVcdTgzZGNcdTg1MjFcdTkxYzdcdTkxZjVcdTUxOGFcdTY3ZjVcdTdiNTYiXSxbImY0YTEiLCJcdThjYWNcdTUxYzRcdTU5YmJcdTYwYmRcdTg2NTVcdTUwMWNcdWY5ZmZcdTUyNTRcdTVjM2Fc''@;'; put 'put ''dTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1YTVcdTZlY2NcdTc2MjBcdTgxMGFcdThlNjBcdTk2NWZcdTk2YmJcdTRlZGZcdTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRcdTdhN2ZcdTgyMWJcdTg1YTZcdThjZTRcdThlMTBcdTkwNzdcdTkxZTdcdTk1''@;'; put 'put ''ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJcdTU1ODZcdTVmYjlcdTY0YTRcdTZmODhcdTdkYjRcdThmMWZcdThmNGRcdTk0MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdjNjRcdThhNzlcdThhYzJcdTU4MWVcdTU5YmVcdTVlMTZcdTYzNzdcdTcyNTJc''@;'; put 'put ''dTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThmMTJcdTVlZjNcdTY2NzRcdTZkZjhcdTgwN2RcdTgzYzFcdThhY2JcdTk3NTFcdTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZcdTkwMmVcdTkwNWVcdTlhZDRcdTUyMWRcdTUyN2ZcdTU0ZThcdTYxOTRcdTYy''@;'; put 'put ''ODRcdTYyZGJcdTY4YTIiXSxbImY1YTEiLCJcdTY5MTJcdTY5NWFcdTZhMzVcdTcwOTJcdTcxMjZcdTc4NWRcdTc5MDFcdTc5MGVcdTc5ZDJcdTdhMGRcdTgwOTZcdTgyNzhcdTgyZDVcdTgzNDlcdTg1NDlcdThjODJcdThkODVcdTkxNjJcdTkxOGJcdTkxYWVcdTRmYzNcdTU2ZDFcdTcxZWRc''@;'; put 'put ''dTc3ZDdcdTg3MDBcdTg5ZjhcdTViZjhcdTVmZDZcdTY3NTFcdTkwYThcdTUzZTJcdTU4NWFcdTViZjVcdTYwYTRcdTYxODFcdTY0NjBcdTdlM2RcdTgwNzBcdTg1MjVcdTkyODNcdTY0YWVcdTUwYWNcdTVkMTRcdTY3MDBcdTU4OWNcdTYyYmRcdTYzYThcdTY5MGVcdTY5NzhcdTZhMWVcdTZl''@;'; put 'put ''NmJcdTc2YmFcdTc5Y2JcdTgyYmJcdTg0MjlcdThhY2ZcdThkYThcdThmZmRcdTkxMTJcdTkxNGJcdTkxOWNcdTkzMTBcdTkzMThcdTkzOWFcdTk2ZGJcdTlhMzZcdTljMGRcdTRlMTFcdTc1NWNcdTc5NWRcdTdhZmFcdTdiNTFcdTdiYzlcdTdlMmVcdTg0YzRcdThlNTlcdThlNzRcdThlZjhc''@;'; put 'put ''dTkwMTBcdTY2MjVcdTY5M2ZcdTc0NDNcdTUxZmFcdTY3MmVcdTllZGNcdTUxNDVcdTVmZTBcdTZjOTZcdTg3ZjJcdTg4NWRcdTg4NzdcdTYwYjRcdTgxYjVcdTg0MDMiXSxbImY2YTEiLCJcdThkMDVcdTUzZDZcdTU0MzlcdTU2MzRcdTVhMzZcdTVjMzFcdTcwOGFcdTdmZTBcdTgwNWFcdTgx''@;'; put 'put ''MDZcdTgxZWRcdThkYTNcdTkxODlcdTlhNWZcdTlkZjJcdTUwNzRcdTRlYzRcdTUzYTBcdTYwZmJcdTZlMmNcdTVjNjRcdTRmODhcdTUwMjRcdTU1ZTRcdTVjZDlcdTVlNWZcdTYwNjVcdTY4OTRcdTZjYmJcdTZkYzRcdTcxYmVcdTc1ZDRcdTc1ZjRcdTc2NjFcdTdhMWFcdTdhNDlcdTdkYzdc''@;'; put 'put ''dTdkZmJcdTdmNmVcdTgxZjRcdTg2YTlcdThmMWNcdTk2YzlcdTk5YjNcdTlmNTJcdTUyNDdcdTUyYzVcdTk4ZWRcdTg5YWFcdTRlMDNcdTY3ZDJcdTZmMDZcdTRmYjVcdTViZTJcdTY3OTVcdTZjODhcdTZkNzhcdTc0MWJcdTc4MjdcdTkxZGRcdTkzN2NcdTg3YzRcdTc5ZTRcdTdhMzFcdTVm''@;'; put 'put ''ZWJcdTRlZDZcdTU0YTRcdTU1M2VcdTU4YWVcdTU5YTVcdTYwZjBcdTYyNTNcdTYyZDZcdTY3MzZcdTY5NTVcdTgyMzVcdTk2NDBcdTk5YjFcdTk5ZGRcdTUwMmNcdTUzNTNcdTU1NDRcdTU3N2NcdWZhMDFcdTYyNThcdWZhMDJcdTY0ZTJcdTY2NmJcdTY3ZGRcdTZmYzFcdTZmZWZcdTc0MjJc''@;'; put 'put ''dTc0MzhcdThhMTciXSxbImY3YTEiLCJcdTk0MzhcdTU0NTFcdTU2MDZcdTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThcdTcwYWRcdTdkYmJcdThhOTVcdTU5NmFcdTgxMmJcdTYzYTJcdTc3MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZlNmZcdWZh''@;'; put 'put ''MDNcdTg1NjlcdTUxNGNcdTUzZjBcdTU5MmFcdTYwMjBcdTYxNGJcdTZiODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgyZDRcdThkYzZcdTkwYjBcdTk4YjFcdWZhMDRcdTY0YzdcdTZmYTRcdTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZcdWZhMDVc''@;'; put 'put ''dTc1ZGJcdTdiNTJcdTdkNzFcdTkwMWFcdTU4MDZcdTY5Y2NcdTgxN2ZcdTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdcdTU5YWNcdTYyOTVcdTkwMGZcdTliMmFcdTYxNWRcdTcyNzlcdTk1ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZjZTJcdTZk''@;'; put 'put ''M2VcdTcyMmNcdTc0MzZcdTc4MzRcdTdmNzdcdTgyYWRcdThkZGJcdTk4MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0ZTNcdThjYTlcdThmYTZcdTkyMTEiXSxbImY4YTEiLCJcdTk2MmFcdTUxNmJcdTUzZWRcdTYzNGNcdTRmNjlcdTU1MDRcdTYwOTZcdTY1NTdcdTZjOWJcdTZkN2Zc''@;'; put 'put ''dTcyNGNcdTcyZmRcdTdhMTdcdTg5ODdcdThjOWRcdTVmNmRcdTZmOGVcdTcwZjlcdTgxYThcdTYxMGVcdTRmYmZcdTUwNGZcdTYyNDFcdTcyNDdcdTdiYzdcdTdkZThcdTdmZTlcdTkwNGRcdTk3YWRcdTlhMTlcdThjYjZcdTU3NmFcdTVlNzNcdTY3YjBcdTg0MGRcdThhNTVcdTU0MjBcdTVi''@;'; put 'put ''MTZcdTVlNjNcdTVlZTJcdTVmMGFcdTY1ODNcdTgwYmFcdTg1M2RcdTk1ODlcdTk2NWJcdTRmNDhcdTUzMDVcdTUzMGRcdTUzMGZcdTU0ODZcdTU0ZmFcdTU3MDNcdTVlMDNcdTYwMTZcdTYyOWJcdTYyYjFcdTYzNTVcdWZhMDZcdTZjZTFcdTZkNjZcdTc1YjFcdTc4MzJcdTgwZGVcdTgxMmZc''@;'; put 'put ''dTgyZGVcdTg0NjFcdTg0YjJcdTg4OGRcdTg5MTJcdTkwMGJcdTkyZWFcdTk4ZmRcdTliOTFcdTVlNDVcdTY2YjRcdTY2ZGRcdTcwMTFcdTcyMDZcdWZhMDdcdTRmZjVcdTUyN2RcdTVmNmFcdTYxNTNcdTY3NTNcdTZhMTlcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThjNzlcdTk4YzdcdTk4''@;'; put 'put ''YzRcdTlhNDMiXSxbImY5YTEiLCJcdTU0YzFcdTdhMWZcdTY5NTNcdThhZjdcdThjNGFcdTk4YThcdTk5YWVcdTVmN2NcdTYyYWJcdTc1YjJcdTc2YWVcdTg4YWJcdTkwN2ZcdTk2NDJcdTUzMzlcdTVmM2NcdTVmYzVcdTZjY2NcdTczY2NcdTc1NjJcdTc1OGJcdTdiNDZcdTgyZmVcdTk5OWRc''@;'; put 'put ''dTRlNGZcdTkwM2NcdTRlMGJcdTRmNTVcdTUzYTZcdTU5MGZcdTVlYzhcdTY2MzBcdTZjYjNcdTc0NTVcdTgzNzdcdTg3NjZcdThjYzBcdTkwNTBcdTk3MWVcdTljMTVcdTU4ZDFcdTViNzhcdTg2NTBcdThiMTRcdTlkYjRcdTViZDJcdTYwNjhcdTYwOGRcdTY1ZjFcdTZjNTdcdTZmMjJcdTZm''@;'; put 'put ''YTNcdTcwMWFcdTdmNTVcdTdmZjBcdTk1OTFcdTk1OTJcdTk2NTBcdTk3ZDNcdTUyNzJcdThmNDRcdTUxZmRcdTU0MmJcdTU0YjhcdTU1NjNcdTU1OGFcdTZhYmJcdTZkYjVcdTdkZDhcdTgyNjZcdTkyOWNcdTk2NzdcdTllNzlcdTU0MDhcdTU0YzhcdTc2ZDJcdTg2ZTRcdTk1YTRcdTk1ZDRc''@;'; put 'put ''dTk2NWNcdTRlYTJcdTRmMDlcdTU5ZWVcdTVhZTZcdTVkZjdcdTYwNTJcdTYyOTdcdTY3NmRcdTY4NDFcdTZjODZcdTZlMmZcdTdmMzhcdTgwOWJcdTgyMmEiXSxbImZhYTEiLCJcdWZhMDhcdWZhMDlcdTk4MDVcdTRlYTVcdTUwNTVcdTU0YjNcdTU3OTNcdTU5NWFcdTViNjlcdTViYjNcdTYx''@;'; put 'put ''YzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3ZjlcdTg5ZTNcdThhNzJcdThhZTdcdTkwODJcdTk5ZWRcdTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVlNzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0MTFcdTU2YWVcdTczZTZcdTkxMTVcdTk3ZmZcdTk5MDlcdTk5NTdcdTk5OTlcdTU2NTNc''@;'; put 'put ''dTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZhZjZcdTczN2JcdThlZDJcdTZiNDdcdTk2YWFcdTlhNTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3NjlcdTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJcdTZjZWJcdTcwYWJcdTczODRcdTczYjlcdTczZmVcdTc3MjlcdTc3NGRcdTdkNDNcdTdk''@;'; put 'put ''NjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFcdThjZTJcdTkyNDlcdTk4NmZcdTViNTFcdTdhNzRcdTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUzNTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcyZjlcdTgxMDVcdTgxMDdcdTgzYTJcdTkyY2ZcdTk4MzBcdTRlYThcdTUxNDRcdTUyMTFc''@;'; put 'put ''dTU3OGIiXSxbImZiYTEiLCJcdTVmNjJcdTZjYzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3YTJcdTg4NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3''@;'; put 'put ''OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJcdTZkNjlcdTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNc''@;'; put 'put ''dTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4NjVcdTYwZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVm''@;'; put 'put ''MThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJcdTc1NzUiXSxbImZjYTEiLCJcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0ZjRcdTY1MmJc''@;'; put 'put ''dTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBcdTVlNGNcdTVm''@;'; put 'put ''YThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYwNjJcdTYwOTRc''@;'; put 'put ''dTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZcdTZkOGRcdTZk''@;'; put 'put ''YzYiXSxbImZkYTEiLCJcdTcyM2JcdTgwYjRcdTkxNzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUzOWFcdTU0MGVcdTU0M2NcdTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJcdTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBc''@;'; put 'put ''dThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2ODRcdTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlcdTZiYzFcdTVmNTlcdTVmYmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFcdThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcwY2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUx''@;'; put 'put ''ZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFcdTY2MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0MDNcdTVjNzlcdTdkMDdcdThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhcdTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlc''@;'; put 'put ''dTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2NWVcdTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFcdTcyYTdcdTc5YTdcdTdhMDBcdTdmYjJcdThhNzAiXV0nKX0sNzIzMjQ6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3XSxbImExNDAi''@;'; put 'put ''LCJcdTMwMDBcdWZmMGNcdTMwMDFcdTMwMDJcdWZmMGVcdTIwMjdcdWZmMWJcdWZmMWFcdWZmMWZcdWZmMDFcdWZlMzBcdTIwMjZcdTIwMjVcdWZlNTBcdWZlNTFcdWZlNTJceGI3XHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZjVjXHUyMDEzXHVmZTMxXHUyMDE0XHVmZTMzXHUyNTc0XHVm''@;'; put 'put ''ZTM0XHVmZTRmXHVmZjA4XHVmZjA5XHVmZTM1XHVmZTM2XHVmZjViXHVmZjVkXHVmZTM3XHVmZTM4XHUzMDE0XHUzMDE1XHVmZTM5XHVmZTNhXHUzMDEwXHUzMDExXHVmZTNiXHVmZTNjXHUzMDBhXHUzMDBiXHVmZTNkXHVmZTNlXHUzMDA4XHUzMDA5XHVmZTNmXHVmZTQwXHUzMDBjXHUzMDBk''@;'; put 'put ''XHVmZTQxXHVmZTQyXHUzMDBlXHUzMDBmXHVmZTQzXHVmZTQ0XHVmZTU5XHVmZTVhIl0sWyJhMWExIiwiXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDFkXHUzMDFlXHUyMDM1XHUyMDMyXHVmZjAzXHVmZjA2XHVmZjBhXHUyMDNiXHhhN1x1MzAw''@;'; put 'put ''M1x1MjVjYlx1MjVjZlx1MjViM1x1MjViMlx1MjVjZVx1MjYwNlx1MjYwNVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViZFx1MjViY1x1MzJhM1x1MjEwNVx4YWZcdWZmZTNcdWZmM2ZcdTAyY2RcdWZlNDlcdWZlNGFcdWZlNGRcdWZlNGVcdWZlNGJcdWZlNGNcdWZlNWZcdWZlNjBcdWZl''@;'; put 'put ''NjFcdWZmMGJcdWZmMGRceGQ3XHhmN1x4YjFcdTIyMWFcdWZmMWNcdWZmMWVcdWZmMWRcdTIyNjZcdTIyNjdcdTIyNjBcdTIyMWVcdTIyNTJcdTIyNjFcdWZlNjIiLDQsIlx1ZmY1ZVx1MjIyOVx1MjIyYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MzNkMlx1MzNkMVx1MjIyYlx1MjIyZVx1''@;'; put 'put ''MjIzNVx1MjIzNFx1MjY0MFx1MjY0Mlx1MjI5NVx1MjI5OVx1MjE5MVx1MjE5M1x1MjE5MFx1MjE5Mlx1MjE5Nlx1MjE5N1x1MjE5OVx1MjE5OFx1MjIyNVx1MjIyM1x1ZmYwZiJdLFsiYTI0MCIsIlx1ZmYzY1x1MjIxNVx1ZmU2OFx1ZmYwNFx1ZmZlNVx1MzAxMlx1ZmZlMFx1ZmZlMVx1ZmYw''@;'; put 'put ''NVx1ZmYyMFx1MjEwM1x1MjEwOVx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1MzNkNVx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNjZVx1MzNhMVx1MzM4ZVx1MzM4Zlx1MzNjNFx4YjBcdTUxNTlcdTUxNWJcdTUxNWVcdTUxNWRcdTUxNjFcdTUxNjNcdTU1ZTdcdTc0ZTlcdTdjY2VcdTI1ODEiLDcsIlx1MjU4''@;'; put 'put ''Zlx1MjU4ZVx1MjU4ZFx1MjU4Y1x1MjU4Ylx1MjU4YVx1MjU4OVx1MjUzY1x1MjUzNFx1MjUyY1x1MjUyNFx1MjUxY1x1MjU5NFx1MjUwMFx1MjUwMlx1MjU5NVx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2ZCJdLFsiYTJhMSIsIlx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU1MFx1MjU1ZVx1''@;'; put 'put ''MjU2YVx1MjU2MVx1MjVlMlx1MjVlM1x1MjVlNVx1MjVlNFx1MjU3MVx1MjU3Mlx1MjU3M1x1ZmYxMCIsOSwiXHUyMTYwIiw5LCJcdTMwMjEiLDgsIlx1NTM0MVx1NTM0NFx1NTM0NVx1ZmYyMSIsMjUsIlx1ZmY0MSIsMjFdLFsiYTM0MCIsIlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5''@;'; put 'put ''MSIsMTYsIlx1MDNhMyIsNiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2LCJcdTMxMDUiLDEwXSxbImEzYTEiLCJcdTMxMTAiLDI1LCJcdTAyZDlcdTAyYzlcdTAyY2FcdTAyYzdcdTAyY2IiXSxbImEzZTEiLCJcdTIwYWMiXSxbImE0NDAiLCJcdTRlMDBcdTRlNTlcdTRlMDFcdTRlMDNcdTRlNDNc''@;'; put 'put ''dTRlNWRcdTRlODZcdTRlOGNcdTRlYmFcdTUxM2ZcdTUxNjVcdTUxNmJcdTUxZTBcdTUyMDBcdTUyMDFcdTUyOWJcdTUzMTVcdTUzNDFcdTUzNWNcdTUzYzhcdTRlMDlcdTRlMGJcdTRlMDhcdTRlMGFcdTRlMmJcdTRlMzhcdTUxZTFcdTRlNDVcdTRlNDhcdTRlNWZcdTRlNWVcdTRlOGVcdTRl''@;'; put 'put ''YTFcdTUxNDBcdTUyMDNcdTUyZmFcdTUzNDNcdTUzYzlcdTUzZTNcdTU3MWZcdTU4ZWJcdTU5MTVcdTU5MjdcdTU5NzNcdTViNTBcdTViNTFcdTViNTNcdTViZjhcdTVjMGZcdTVjMjJcdTVjMzhcdTVjNzFcdTVkZGRcdTVkZTVcdTVkZjFcdTVkZjJcdTVkZjNcdTVkZmVcdTVlNzJcdTVlZmVc''@;'; put 'put ''dTVmMGJcdTVmMTNcdTYyNGQiXSxbImE0YTEiLCJcdTRlMTFcdTRlMTBcdTRlMGRcdTRlMmRcdTRlMzBcdTRlMzlcdTRlNGJcdTVjMzlcdTRlODhcdTRlOTFcdTRlOTVcdTRlOTJcdTRlOTRcdTRlYTJcdTRlYzFcdTRlYzBcdTRlYzNcdTRlYzZcdTRlYzdcdTRlY2RcdTRlY2FcdTRlY2JcdTRl''@;'; put 'put ''YzRcdTUxNDNcdTUxNDFcdTUxNjdcdTUxNmRcdTUxNmVcdTUxNmNcdTUxOTdcdTUxZjZcdTUyMDZcdTUyMDdcdTUyMDhcdTUyZmJcdTUyZmVcdTUyZmZcdTUzMTZcdTUzMzlcdTUzNDhcdTUzNDdcdTUzNDVcdTUzNWVcdTUzODRcdTUzY2JcdTUzY2FcdTUzY2RcdTU4ZWNcdTU5MjlcdTU5MmJc''@;'; put 'put ''dTU5MmFcdTU5MmRcdTViNTRcdTVjMTFcdTVjMjRcdTVjM2FcdTVjNmZcdTVkZjRcdTVlN2JcdTVlZmZcdTVmMTRcdTVmMTVcdTVmYzNcdTYyMDhcdTYyMzZcdTYyNGJcdTYyNGVcdTY1MmZcdTY1ODdcdTY1OTdcdTY1YTRcdTY1YjlcdTY1ZTVcdTY2ZjBcdTY3MDhcdTY3MjhcdTZiMjBcdTZi''@;'; put 'put ''NjJcdTZiNzlcdTZiY2JcdTZiZDRcdTZiZGJcdTZjMGZcdTZjMzRcdTcwNmJcdTcyMmFcdTcyMzZcdTcyM2JcdTcyNDdcdTcyNTlcdTcyNWJcdTcyYWNcdTczOGJcdTRlMTkiXSxbImE1NDAiLCJcdTRlMTZcdTRlMTVcdTRlMTRcdTRlMThcdTRlM2JcdTRlNGRcdTRlNGZcdTRlNGVcdTRlZTVc''@;'; put 'put ''dTRlZDhcdTRlZDRcdTRlZDVcdTRlZDZcdTRlZDdcdTRlZTNcdTRlZTRcdTRlZDlcdTRlZGVcdTUxNDVcdTUxNDRcdTUxODlcdTUxOGFcdTUxYWNcdTUxZjlcdTUxZmFcdTUxZjhcdTUyMGFcdTUyYTBcdTUyOWZcdTUzMDVcdTUzMDZcdTUzMTdcdTUzMWRcdTRlZGZcdTUzNGFcdTUzNDlcdTUz''@;'; put 'put ''NjFcdTUzNjBcdTUzNmZcdTUzNmVcdTUzYmJcdTUzZWZcdTUzZTRcdTUzZjNcdTUzZWNcdTUzZWVcdTUzZTlcdTUzZThcdTUzZmNcdTUzZjhcdTUzZjVcdTUzZWJcdTUzZTZcdTUzZWFcdTUzZjJcdTUzZjFcdTUzZjBcdTUzZTVcdTUzZWRcdTUzZmJcdTU2ZGJcdTU2ZGFcdTU5MTYiXSxbImE1''@;'; put 'put ''YTEiLCJcdTU5MmVcdTU5MzFcdTU5NzRcdTU5NzZcdTViNTVcdTViODNcdTVjM2NcdTVkZThcdTVkZTdcdTVkZTZcdTVlMDJcdTVlMDNcdTVlNzNcdTVlN2NcdTVmMDFcdTVmMThcdTVmMTdcdTVmYzVcdTYyMGFcdTYyNTNcdTYyNTRcdTYyNTJcdTYyNTFcdTY1YTVcdTY1ZTZcdTY3MmVcdTY3''@;'; put 'put ''MmNcdTY3MmFcdTY3MmJcdTY3MmRcdTZiNjNcdTZiY2RcdTZjMTFcdTZjMTBcdTZjMzhcdTZjNDFcdTZjNDBcdTZjM2VcdTcyYWZcdTczODRcdTczODlcdTc0ZGNcdTc0ZTZcdTc1MThcdTc1MWZcdTc1MjhcdTc1MjlcdTc1MzBcdTc1MzFcdTc1MzJcdTc1MzNcdTc1OGJcdTc2N2RcdTc2YWVc''@;'; put 'put ''dTc2YmZcdTc2ZWVcdTc3ZGJcdTc3ZTJcdTc3ZjNcdTc5M2FcdTc5YmVcdTdhNzRcdTdhY2JcdTRlMWVcdTRlMWZcdTRlNTJcdTRlNTNcdTRlNjlcdTRlOTlcdTRlYTRcdTRlYTZcdTRlYTVcdTRlZmZcdTRmMDlcdTRmMTlcdTRmMGFcdTRmMTVcdTRmMGRcdTRmMTBcdTRmMTFcdTRmMGZcdTRl''@;'; put 'put ''ZjJcdTRlZjZcdTRlZmJcdTRlZjBcdTRlZjNcdTRlZmRcdTRmMDFcdTRmMGJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjgiXSxbImE2NDAiLCJcdTUxNzFcdTUxOGRcdTUxYjBcdTUyMTdcdTUyMTFcdTUyMTJcdTUyMGVcdTUyMTZcdTUyYTNcdTUzMDhcdTUzMjFcdTUzMjBcdTUzNzBc''@;'; put 'put ''dTUzNzFcdTU0MDlcdTU0MGZcdTU0MGNcdTU0MGFcdTU0MTBcdTU0MDFcdTU0MGJcdTU0MDRcdTU0MTFcdTU0MGRcdTU0MDhcdTU0MDNcdTU0MGVcdTU0MDZcdTU0MTJcdTU2ZTBcdTU2ZGVcdTU2ZGRcdTU3MzNcdTU3MzBcdTU3MjhcdTU3MmRcdTU3MmNcdTU3MmZcdTU3MjlcdTU5MTlcdTU5''@;'; put 'put ''MWFcdTU5MzdcdTU5MzhcdTU5ODRcdTU5NzhcdTU5ODNcdTU5N2RcdTU5NzlcdTU5ODJcdTU5ODFcdTViNTdcdTViNThcdTViODdcdTViODhcdTViODVcdTViODlcdTViZmFcdTVjMTZcdTVjNzlcdTVkZGVcdTVlMDZcdTVlNzZcdTVlNzQiXSxbImE2YTEiLCJcdTVmMGZcdTVmMWJcdTVmZDlc''@;'; put 'put ''dTVmZDZcdTYyMGVcdTYyMGNcdTYyMGRcdTYyMTBcdTYyNjNcdTYyNWJcdTYyNThcdTY1MzZcdTY1ZTlcdTY1ZThcdTY1ZWNcdTY1ZWRcdTY2ZjJcdTY2ZjNcdTY3MDlcdTY3M2RcdTY3MzRcdTY3MzFcdTY3MzVcdTZiMjFcdTZiNjRcdTZiN2JcdTZjMTZcdTZjNWRcdTZjNTdcdTZjNTlcdTZj''@;'; put 'put ''NWZcdTZjNjBcdTZjNTBcdTZjNTVcdTZjNjFcdTZjNWJcdTZjNGRcdTZjNGVcdTcwNzBcdTcyNWZcdTcyNWRcdTc2N2VcdTdhZjlcdTdjNzNcdTdjZjhcdTdmMzZcdTdmOGFcdTdmYmRcdTgwMDFcdTgwMDNcdTgwMGNcdTgwMTJcdTgwMzNcdTgwN2ZcdTgwODlcdTgwOGJcdTgwOGNcdTgxZTNc''@;'; put 'put ''dTgxZWFcdTgxZjNcdTgxZmNcdTgyMGNcdTgyMWJcdTgyMWZcdTgyNmVcdTgyNzJcdTgyN2VcdTg2NmJcdTg4NDBcdTg4NGNcdTg4NjNcdTg5N2ZcdTk2MjFcdTRlMzJcdTRlYThcdTRmNGRcdTRmNGZcdTRmNDdcdTRmNTdcdTRmNWVcdTRmMzRcdTRmNWJcdTRmNTVcdTRmMzBcdTRmNTBcdTRm''@;'; put 'put ''NTFcdTRmM2RcdTRmM2FcdTRmMzhcdTRmNDNcdTRmNTRcdTRmM2NcdTRmNDZcdTRmNjMiXSxbImE3NDAiLCJcdTRmNWNcdTRmNjBcdTRmMmZcdTRmNGVcdTRmMzZcdTRmNTlcdTRmNWRcdTRmNDhcdTRmNWFcdTUxNGNcdTUxNGJcdTUxNGRcdTUxNzVcdTUxYjZcdTUxYjdcdTUyMjVcdTUyMjRc''@;'; put 'put ''dTUyMjlcdTUyMmFcdTUyMjhcdTUyYWJcdTUyYTlcdTUyYWFcdTUyYWNcdTUzMjNcdTUzNzNcdTUzNzVcdTU0MWRcdTU0MmRcdTU0MWVcdTU0M2VcdTU0MjZcdTU0NGVcdTU0MjdcdTU0NDZcdTU0NDNcdTU0MzNcdTU0NDhcdTU0NDJcdTU0MWJcdTU0MjlcdTU0NGFcdTU0MzlcdTU0M2JcdTU0''@;'; put 'put ''MzhcdTU0MmVcdTU0MzVcdTU0MzZcdTU0MjBcdTU0M2NcdTU0NDBcdTU0MzFcdTU0MmJcdTU0MWZcdTU0MmNcdTU2ZWFcdTU2ZjBcdTU2ZTRcdTU2ZWJcdTU3NGFcdTU3NTFcdTU3NDBcdTU3NGQiXSxbImE3YTEiLCJcdTU3NDdcdTU3NGVcdTU3M2VcdTU3NTBcdTU3NGZcdTU3M2JcdTU4ZWZc''@;'; put 'put ''dTU5M2VcdTU5OWRcdTU5OTJcdTU5YThcdTU5OWVcdTU5YTNcdTU5OTlcdTU5OTZcdTU5OGRcdTU5YTRcdTU5OTNcdTU5OGFcdTU5YTVcdTViNWRcdTViNWNcdTViNWFcdTViNWJcdTViOGNcdTViOGJcdTViOGZcdTVjMmNcdTVjNDBcdTVjNDFcdTVjM2ZcdTVjM2VcdTVjOTBcdTVjOTFcdTVj''@;'; put 'put ''OTRcdTVjOGNcdTVkZWJcdTVlMGNcdTVlOGZcdTVlODdcdTVlOGFcdTVlZjdcdTVmMDRcdTVmMWZcdTVmNjRcdTVmNjJcdTVmNzdcdTVmNzlcdTVmZDhcdTVmY2NcdTVmZDdcdTVmY2RcdTVmZjFcdTVmZWJcdTVmZjhcdTVmZWFcdTYyMTJcdTYyMTFcdTYyODRcdTYyOTdcdTYyOTZcdTYyODBc''@;'; put 'put ''dTYyNzZcdTYyODlcdTYyNmRcdTYyOGFcdTYyN2NcdTYyN2VcdTYyNzlcdTYyNzNcdTYyOTJcdTYyNmZcdTYyOThcdTYyNmVcdTYyOTVcdTYyOTNcdTYyOTFcdTYyODZcdTY1MzlcdTY1M2JcdTY1MzhcdTY1ZjFcdTY2ZjRcdTY3NWZcdTY3NGVcdTY3NGZcdTY3NTBcdTY3NTFcdTY3NWNcdTY3''@;'; put 'put ''NTZcdTY3NWVcdTY3NDlcdTY3NDZcdTY3NjAiXSxbImE4NDAiLCJcdTY3NTNcdTY3NTdcdTZiNjVcdTZiY2ZcdTZjNDJcdTZjNWVcdTZjOTlcdTZjODFcdTZjODhcdTZjODlcdTZjODVcdTZjOWJcdTZjNmFcdTZjN2FcdTZjOTBcdTZjNzBcdTZjOGNcdTZjNjhcdTZjOTZcdTZjOTJcdTZjN2Rc''@;'; put 'put ''dTZjODNcdTZjNzJcdTZjN2VcdTZjNzRcdTZjODZcdTZjNzZcdTZjOGRcdTZjOTRcdTZjOThcdTZjODJcdTcwNzZcdTcwN2NcdTcwN2RcdTcwNzhcdTcyNjJcdTcyNjFcdTcyNjBcdTcyYzRcdTcyYzJcdTczOTZcdTc1MmNcdTc1MmJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2ZWZcdTc3ZTNcdTc5''@;'; put 'put ''YzFcdTc5YzBcdTc5YmZcdTdhNzZcdTdjZmJcdTdmNTVcdTgwOTZcdTgwOTNcdTgwOWRcdTgwOThcdTgwOWJcdTgwOWFcdTgwYjJcdTgyNmZcdTgyOTIiXSxbImE4YTEiLCJcdTgyOGJcdTgyOGRcdTg5OGJcdTg5ZDJcdThhMDBcdThjMzdcdThjNDZcdThjNTVcdThjOWRcdThkNjRcdThkNzBc''@;'; put 'put ''dThkYjNcdThlYWJcdThlY2FcdThmOWJcdThmYjBcdThmYzJcdThmYzZcdThmYzVcdThmYzRcdTVkZTFcdTkwOTFcdTkwYTJcdTkwYWFcdTkwYTZcdTkwYTNcdTkxNDlcdTkxYzZcdTkxY2NcdTk2MzJcdTk2MmVcdTk2MzFcdTk2MmFcdTk2MmNcdTRlMjZcdTRlNTZcdTRlNzNcdTRlOGJcdTRl''@;'; put 'put ''OWJcdTRlOWVcdTRlYWJcdTRlYWNcdTRmNmZcdTRmOWRcdTRmOGRcdTRmNzNcdTRmN2ZcdTRmNmNcdTRmOWJcdTRmOGJcdTRmODZcdTRmODNcdTRmNzBcdTRmNzVcdTRmODhcdTRmNjlcdTRmN2JcdTRmOTZcdTRmN2VcdTRmOGZcdTRmOTFcdTRmN2FcdTUxNTRcdTUxNTJcdTUxNTVcdTUxNjlc''@;'; put 'put ''dTUxNzdcdTUxNzZcdTUxNzhcdTUxYmRcdTUxZmRcdTUyM2JcdTUyMzhcdTUyMzdcdTUyM2FcdTUyMzBcdTUyMmVcdTUyMzZcdTUyNDFcdTUyYmVcdTUyYmJcdTUzNTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhcdTUzNzlcdTUzZDZcdTUzZDRcdTUzZDdcdTU0NzNcdTU0''@;'; put 'put ''NzUiXSxbImE5NDAiLCJcdTU0OTZcdTU0NzhcdTU0OTVcdTU0ODBcdTU0N2JcdTU0NzdcdTU0ODRcdTU0OTJcdTU0ODZcdTU0N2NcdTU0OTBcdTU0NzFcdTU0NzZcdTU0OGNcdTU0OWFcdTU0NjJcdTU0NjhcdTU0OGJcdTU0N2RcdTU0OGVcdTU2ZmFcdTU3ODNcdTU3NzdcdTU3NmFcdTU3Njlc''@;'; put 'put ''dTU3NjFcdTU3NjZcdTU3NjRcdTU3N2NcdTU5MWNcdTU5NDlcdTU5NDdcdTU5NDhcdTU5NDRcdTU5NTRcdTU5YmVcdTU5YmJcdTU5ZDRcdTU5YjlcdTU5YWVcdTU5ZDFcdTU5YzZcdTU5ZDBcdTU5Y2RcdTU5Y2JcdTU5ZDNcdTU5Y2FcdTU5YWZcdTU5YjNcdTU5ZDJcdTU5YzVcdTViNWZcdTVi''@;'; put 'put ''NjRcdTViNjNcdTViOTdcdTViOWFcdTViOThcdTViOWNcdTViOTlcdTViOWJcdTVjMWFcdTVjNDhcdTVjNDUiXSxbImE5YTEiLCJcdTVjNDZcdTVjYjdcdTVjYTFcdTVjYjhcdTVjYTlcdTVjYWJcdTVjYjFcdTVjYjNcdTVlMThcdTVlMWFcdTVlMTZcdTVlMTVcdTVlMWJcdTVlMTFcdTVlNzhc''@;'; put 'put ''dTVlOWFcdTVlOTdcdTVlOWNcdTVlOTVcdTVlOTZcdTVlZjZcdTVmMjZcdTVmMjdcdTVmMjlcdTVmODBcdTVmODFcdTVmN2ZcdTVmN2NcdTVmZGRcdTVmZTBcdTVmZmRcdTVmZjVcdTVmZmZcdTYwMGZcdTYwMTRcdTYwMmZcdTYwMzVcdTYwMTZcdTYwMmFcdTYwMTVcdTYwMjFcdTYwMjdcdTYw''@;'; put 'put ''MjlcdTYwMmJcdTYwMWJcdTYyMTZcdTYyMTVcdTYyM2ZcdTYyM2VcdTYyNDBcdTYyN2ZcdTYyYzlcdTYyY2NcdTYyYzRcdTYyYmZcdTYyYzJcdTYyYjlcdTYyZDJcdTYyZGJcdTYyYWJcdTYyZDNcdTYyZDRcdTYyY2JcdTYyYzhcdTYyYThcdTYyYmRcdTYyYmNcdTYyZDBcdTYyZDlcdTYyYzdc''@;'; put 'put ''dTYyY2RcdTYyYjVcdTYyZGFcdTYyYjFcdTYyZDhcdTYyZDZcdTYyZDdcdTYyYzZcdTYyYWNcdTYyY2VcdTY1M2VcdTY1YTdcdTY1YmNcdTY1ZmFcdTY2MTRcdTY2MTNcdTY2MGNcdTY2MDZcdTY2MDJcdTY2MGVcdTY2MDBcdTY2MGZcdTY2MTVcdTY2MGEiXSxbImFhNDAiLCJcdTY2MDdcdTY3''@;'; put 'put ''MGRcdTY3MGJcdTY3NmRcdTY3OGJcdTY3OTVcdTY3NzFcdTY3OWNcdTY3NzNcdTY3NzdcdTY3ODdcdTY3OWRcdTY3OTdcdTY3NmZcdTY3NzBcdTY3N2ZcdTY3ODlcdTY3N2VcdTY3OTBcdTY3NzVcdTY3OWFcdTY3OTNcdTY3N2NcdTY3NmFcdTY3NzJcdTZiMjNcdTZiNjZcdTZiNjdcdTZiN2Zc''@;'; put 'put ''dTZjMTNcdTZjMWJcdTZjZTNcdTZjZThcdTZjZjNcdTZjYjFcdTZjY2NcdTZjZTVcdTZjYjNcdTZjYmRcdTZjYmVcdTZjYmNcdTZjZTJcdTZjYWJcdTZjZDVcdTZjZDNcdTZjYjhcdTZjYzRcdTZjYjlcdTZjYzFcdTZjYWVcdTZjZDdcdTZjYzVcdTZjZjFcdTZjYmZcdTZjYmJcdTZjZTFcdTZj''@;'; put 'put ''ZGJcdTZjY2FcdTZjYWNcdTZjZWZcdTZjZGNcdTZjZDZcdTZjZTAiXSxbImFhYTEiLCJcdTcwOTVcdTcwOGVcdTcwOTJcdTcwOGFcdTcwOTlcdTcyMmNcdTcyMmRcdTcyMzhcdTcyNDhcdTcyNjdcdTcyNjlcdTcyYzBcdTcyY2VcdTcyZDlcdTcyZDdcdTcyZDBcdTczYTlcdTczYThcdTczOWZc''@;'; put 'put ''dTczYWJcdTczYTVcdTc1M2RcdTc1OWRcdTc1OTlcdTc1OWFcdTc2ODRcdTc2YzJcdTc2ZjJcdTc2ZjRcdTc3ZTVcdTc3ZmRcdTc5M2VcdTc5NDBcdTc5NDFcdTc5YzlcdTc5YzhcdTdhN2FcdTdhNzlcdTdhZmFcdTdjZmVcdTdmNTRcdTdmOGNcdTdmOGJcdTgwMDVcdTgwYmFcdTgwYTVcdTgw''@;'; put 'put ''YTJcdTgwYjFcdTgwYTFcdTgwYWJcdTgwYTlcdTgwYjRcdTgwYWFcdTgwYWZcdTgxZTVcdTgxZmVcdTgyMGRcdTgyYjNcdTgyOWRcdTgyOTlcdTgyYWRcdTgyYmRcdTgyOWZcdTgyYjlcdTgyYjFcdTgyYWNcdTgyYTVcdTgyYWZcdTgyYjhcdTgyYTNcdTgyYjBcdTgyYmVcdTgyYjdcdTg2NGVc''@;'; put 'put ''dTg2NzFcdTUyMWRcdTg4NjhcdThlY2JcdThmY2VcdThmZDRcdThmZDFcdTkwYjVcdTkwYjhcdTkwYjFcdTkwYjZcdTkxYzdcdTkxZDFcdTk1NzdcdTk1ODBcdTk2MWNcdTk2NDBcdTk2M2ZcdTk2M2JcdTk2NDQiXSxbImFiNDAiLCJcdTk2NDJcdTk2YjlcdTk2ZThcdTk3NTJcdTk3NWVcdTRl''@;'; put 'put ''OWZcdTRlYWRcdTRlYWVcdTRmZTFcdTRmYjVcdTRmYWZcdTRmYmZcdTRmZTBcdTRmZDFcdTRmY2ZcdTRmZGRcdTRmYzNcdTRmYjZcdTRmZDhcdTRmZGZcdTRmY2FcdTRmZDdcdTRmYWVcdTRmZDBcdTRmYzRcdTRmYzJcdTRmZGFcdTRmY2VcdTRmZGVcdTRmYjdcdTUxNTdcdTUxOTJcdTUxOTFc''@;'; put 'put ''dTUxYTBcdTUyNGVcdTUyNDNcdTUyNGFcdTUyNGRcdTUyNGNcdTUyNGJcdTUyNDdcdTUyYzdcdTUyYzlcdTUyYzNcdTUyYzFcdTUzMGRcdTUzNTdcdTUzN2JcdTUzOWFcdTUzZGJcdTU0YWNcdTU0YzBcdTU0YThcdTU0Y2VcdTU0YzlcdTU0YjhcdTU0YTZcdTU0YjNcdTU0YzdcdTU0YzJcdTU0''@;'; put 'put ''YmRcdTU0YWFcdTU0YzEiXSxbImFiYTEiLCJcdTU0YzRcdTU0YzhcdTU0YWZcdTU0YWJcdTU0YjFcdTU0YmJcdTU0YTlcdTU0YTdcdTU0YmZcdTU2ZmZcdTU3ODJcdTU3OGJcdTU3YTBcdTU3YTNcdTU3YTJcdTU3Y2VcdTU3YWVcdTU3OTNcdTU5NTVcdTU5NTFcdTU5NGZcdTU5NGVcdTU5NTBc''@;'; put 'put ''dTU5ZGNcdTU5ZDhcdTU5ZmZcdTU5ZTNcdTU5ZThcdTVhMDNcdTU5ZTVcdTU5ZWFcdTU5ZGFcdTU5ZTZcdTVhMDFcdTU5ZmJcdTViNjlcdTViYTNcdTViYTZcdTViYTRcdTViYTJcdTViYTVcdTVjMDFcdTVjNGVcdTVjNGZcdTVjNGRcdTVjNGJcdTVjZDlcdTVjZDJcdTVkZjdcdTVlMWRcdTVl''@;'; put 'put ''MjVcdTVlMWZcdTVlN2RcdTVlYTBcdTVlYTZcdTVlZmFcdTVmMDhcdTVmMmRcdTVmNjVcdTVmODhcdTVmODVcdTVmOGFcdTVmOGJcdTVmODdcdTVmOGNcdTVmODlcdTYwMTJcdTYwMWRcdTYwMjBcdTYwMjVcdTYwMGVcdTYwMjhcdTYwNGRcdTYwNzBcdTYwNjhcdTYwNjJcdTYwNDZcdTYwNDNc''@;'; put 'put ''dTYwNmNcdTYwNmJcdTYwNmFcdTYwNjRcdTYyNDFcdTYyZGNcdTYzMTZcdTYzMDlcdTYyZmNcdTYyZWRcdTYzMDFcdTYyZWVcdTYyZmRcdTYzMDdcdTYyZjFcdTYyZjciXSxbImFjNDAiLCJcdTYyZWZcdTYyZWNcdTYyZmVcdTYyZjRcdTYzMTFcdTYzMDJcdTY1M2ZcdTY1NDVcdTY1YWJcdTY1''@;'; put 'put ''YmRcdTY1ZTJcdTY2MjVcdTY2MmRcdTY2MjBcdTY2MjdcdTY2MmZcdTY2MWZcdTY2MjhcdTY2MzFcdTY2MjRcdTY2ZjdcdTY3ZmZcdTY3ZDNcdTY3ZjFcdTY3ZDRcdTY3ZDBcdTY3ZWNcdTY3YjZcdTY3YWZcdTY3ZjVcdTY3ZTlcdTY3ZWZcdTY3YzRcdTY3ZDFcdTY3YjRcdTY3ZGFcdTY3ZTVc''@;'; put 'put ''dTY3YjhcdTY3Y2ZcdTY3ZGVcdTY3ZjNcdTY3YjBcdTY3ZDlcdTY3ZTJcdTY3ZGRcdTY3ZDJcdTZiNmFcdTZiODNcdTZiODZcdTZiYjVcdTZiZDJcdTZiZDdcdTZjMWZcdTZjYzlcdTZkMGJcdTZkMzJcdTZkMmFcdTZkNDFcdTZkMjVcdTZkMGNcdTZkMzFcdTZkMWVcdTZkMTciXSxbImFjYTEi''@;'; put 'put ''LCJcdTZkM2JcdTZkM2RcdTZkM2VcdTZkMzZcdTZkMWJcdTZjZjVcdTZkMzlcdTZkMjdcdTZkMzhcdTZkMjlcdTZkMmVcdTZkMzVcdTZkMGVcdTZkMmJcdTcwYWJcdTcwYmFcdTcwYjNcdTcwYWNcdTcwYWZcdTcwYWRcdTcwYjhcdTcwYWVcdTcwYTRcdTcyMzBcdTcyNzJcdTcyNmZcdTcyNzRc''@;'; put 'put ''dTcyZTlcdTcyZTBcdTcyZTFcdTczYjdcdTczY2FcdTczYmJcdTczYjJcdTczY2RcdTczYzBcdTczYjNcdTc1MWFcdTc1MmRcdTc1NGZcdTc1NGNcdTc1NGVcdTc1NGJcdTc1YWJcdTc1YTRcdTc1YTVcdTc1YTJcdTc1YTNcdTc2NzhcdTc2ODZcdTc2ODdcdTc2ODhcdTc2YzhcdTc2YzZcdTc2''@;'; put 'put ''YzNcdTc2YzVcdTc3MDFcdTc2ZjlcdTc2ZjhcdTc3MDlcdTc3MGJcdTc2ZmVcdTc2ZmNcdTc3MDdcdTc3ZGNcdTc4MDJcdTc4MTRcdTc4MGNcdTc4MGRcdTc5NDZcdTc5NDlcdTc5NDhcdTc5NDdcdTc5YjlcdTc5YmFcdTc5ZDFcdTc5ZDJcdTc5Y2JcdTdhN2ZcdTdhODFcdTdhZmZcdTdhZmRc''@;'; put 'put ''dTdjN2RcdTdkMDJcdTdkMDVcdTdkMDBcdTdkMDlcdTdkMDdcdTdkMDRcdTdkMDZcdTdmMzhcdTdmOGVcdTdmYmZcdTgwMDQiXSxbImFkNDAiLCJcdTgwMTBcdTgwMGRcdTgwMTFcdTgwMzZcdTgwZDZcdTgwZTVcdTgwZGFcdTgwYzNcdTgwYzRcdTgwY2NcdTgwZTFcdTgwZGJcdTgwY2VcdTgw''@;'; put 'put ''ZGVcdTgwZTRcdTgwZGRcdTgxZjRcdTgyMjJcdTgyZTdcdTgzMDNcdTgzMDVcdTgyZTNcdTgyZGJcdTgyZTZcdTgzMDRcdTgyZTVcdTgzMDJcdTgzMDlcdTgyZDJcdTgyZDdcdTgyZjFcdTgzMDFcdTgyZGNcdTgyZDRcdTgyZDFcdTgyZGVcdTgyZDNcdTgyZGZcdTgyZWZcdTgzMDZcdTg2NTBc''@;'; put 'put ''dTg2NzlcdTg2N2JcdTg2N2FcdTg4NGRcdTg4NmJcdTg5ODFcdTg5ZDRcdThhMDhcdThhMDJcdThhMDNcdThjOWVcdThjYTBcdThkNzRcdThkNzNcdThkYjRcdThlY2RcdThlY2NcdThmZjBcdThmZTZcdThmZTJcdThmZWFcdThmZTUiXSxbImFkYTEiLCJcdThmZWRcdThmZWJcdThmZTRcdThm''@;'; put 'put ''ZThcdTkwY2FcdTkwY2VcdTkwYzFcdTkwYzNcdTkxNGJcdTkxNGFcdTkxY2RcdTk1ODJcdTk2NTBcdTk2NGJcdTk2NGNcdTk2NGRcdTk3NjJcdTk3NjlcdTk3Y2JcdTk3ZWRcdTk3ZjNcdTk4MDFcdTk4YThcdTk4ZGJcdTk4ZGZcdTk5OTZcdTk5OTlcdTRlNThcdTRlYjNcdTUwMGNcdTUwMGRc''@;'; put 'put ''dTUwMjNcdTRmZWZcdTUwMjZcdTUwMjVcdTRmZjhcdTUwMjlcdTUwMTZcdTUwMDZcdTUwM2NcdTUwMWZcdTUwMWFcdTUwMTJcdTUwMTFcdTRmZmFcdTUwMDBcdTUwMTRcdTUwMjhcdTRmZjFcdTUwMjFcdTUwMGJcdTUwMTlcdTUwMThcdTRmZjNcdTRmZWVcdTUwMmRcdTUwMmFcdTRmZmVcdTUw''@;'; put 'put ''MmJcdTUwMDlcdTUxN2NcdTUxYTRcdTUxYTVcdTUxYTJcdTUxY2RcdTUxY2NcdTUxYzZcdTUxY2JcdTUyNTZcdTUyNWNcdTUyNTRcdTUyNWJcdTUyNWRcdTUzMmFcdTUzN2ZcdTUzOWZcdTUzOWRcdTUzZGZcdTU0ZThcdTU1MTBcdTU1MDFcdTU1MzdcdTU0ZmNcdTU0ZTVcdTU0ZjJcdTU1MDZc''@;'; put 'put ''dTU0ZmFcdTU1MTRcdTU0ZTlcdTU0ZWRcdTU0ZTFcdTU1MDlcdTU0ZWVcdTU0ZWEiXSxbImFlNDAiLCJcdTU0ZTZcdTU1MjdcdTU1MDdcdTU0ZmRcdTU1MGZcdTU3MDNcdTU3MDRcdTU3YzJcdTU3ZDRcdTU3Y2JcdTU3YzNcdTU4MDlcdTU5MGZcdTU5NTdcdTU5NThcdTU5NWFcdTVhMTFcdTVh''@;'; put 'put ''MThcdTVhMWNcdTVhMWZcdTVhMWJcdTVhMTNcdTU5ZWNcdTVhMjBcdTVhMjNcdTVhMjlcdTVhMjVcdTVhMGNcdTVhMDlcdTViNmJcdTVjNThcdTViYjBcdTViYjNcdTViYjZcdTViYjRcdTViYWVcdTViYjVcdTViYjlcdTViYjhcdTVjMDRcdTVjNTFcdTVjNTVcdTVjNTBcdTVjZWRcdTVjZmRc''@;'; put 'put ''dTVjZmJcdTVjZWFcdTVjZThcdTVjZjBcdTVjZjZcdTVkMDFcdTVjZjRcdTVkZWVcdTVlMmRcdTVlMmJcdTVlYWJcdTVlYWRcdTVlYTdcdTVmMzFcdTVmOTJcdTVmOTFcdTVmOTBcdTYwNTkiXSxbImFlYTEiLCJcdTYwNjNcdTYwNjVcdTYwNTBcdTYwNTVcdTYwNmRcdTYwNjlcdTYwNmZcdTYw''@;'; put 'put ''ODRcdTYwOWZcdTYwOWFcdTYwOGRcdTYwOTRcdTYwOGNcdTYwODVcdTYwOTZcdTYyNDdcdTYyZjNcdTYzMDhcdTYyZmZcdTYzNGVcdTYzM2VcdTYzMmZcdTYzNTVcdTYzNDJcdTYzNDZcdTYzNGZcdTYzNDlcdTYzM2FcdTYzNTBcdTYzM2RcdTYzMmFcdTYzMmJcdTYzMjhcdTYzNGRcdTYzNGNc''@;'; put 'put ''dTY1NDhcdTY1NDlcdTY1OTlcdTY1YzFcdTY1YzVcdTY2NDJcdTY2NDlcdTY2NGZcdTY2NDNcdTY2NTJcdTY2NGNcdTY2NDVcdTY2NDFcdTY2ZjhcdTY3MTRcdTY3MTVcdTY3MTdcdTY4MjFcdTY4MzhcdTY4NDhcdTY4NDZcdTY4NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4YjNcdTY4''@;'; put 'put ''MTdcdTY4NGNcdTY4NTFcdTY4M2RcdTY3ZjRcdTY4NTBcdTY4NDBcdTY4M2NcdTY4NDNcdTY4MmFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFcdTZiOGFcdTZiODlcdTZiYjdcdTZjMjNcdTZjMjdcdTZjMjhcdTZjMjZcdTZjMjRcdTZjZjBcdTZkNmFcdTZkOTVcdTZkODhcdTZkODdcdTZkNjZc''@;'; put 'put ''dTZkNzhcdTZkNzdcdTZkNTlcdTZkOTMiXSxbImFmNDAiLCJcdTZkNmNcdTZkODlcdTZkNmVcdTZkNWFcdTZkNzRcdTZkNjlcdTZkOGNcdTZkOGFcdTZkNzlcdTZkODVcdTZkNjVcdTZkOTRcdTcwY2FcdTcwZDhcdTcwZTRcdTcwZDlcdTcwYzhcdTcwY2ZcdTcyMzlcdTcyNzlcdTcyZmNcdTcy''@;'; put 'put ''ZjlcdTcyZmRcdTcyZjhcdTcyZjdcdTczODZcdTczZWRcdTc0MDlcdTczZWVcdTczZTBcdTczZWFcdTczZGVcdTc1NTRcdTc1NWRcdTc1NWNcdTc1NWFcdTc1NTlcdTc1YmVcdTc1YzVcdTc1YzdcdTc1YjJcdTc1YjNcdTc1YmRcdTc1YmNcdTc1YjlcdTc1YzJcdTc1YjhcdTc2OGJcdTc2YjBc''@;'; put 'put ''dTc2Y2FcdTc2Y2RcdTc2Y2VcdTc3MjlcdTc3MWZcdTc3MjBcdTc3MjhcdTc3ZTlcdTc4MzBcdTc4MjdcdTc4MzhcdTc4MWRcdTc4MzRcdTc4MzciXSxbImFmYTEiLCJcdTc4MjVcdTc4MmRcdTc4MjBcdTc4MWZcdTc4MzJcdTc5NTVcdTc5NTBcdTc5NjBcdTc5NWZcdTc5NTZcdTc5NWVcdTc5''@;'; put 'put ''NWRcdTc5NTdcdTc5NWFcdTc5ZTRcdTc5ZTNcdTc5ZTdcdTc5ZGZcdTc5ZTZcdTc5ZTlcdTc5ZDhcdTdhODRcdTdhODhcdTdhZDlcdTdiMDZcdTdiMTFcdTdjODlcdTdkMjFcdTdkMTdcdTdkMGJcdTdkMGFcdTdkMjBcdTdkMjJcdTdkMTRcdTdkMTBcdTdkMTVcdTdkMWFcdTdkMWNcdTdkMGRc''@;'; put 'put ''dTdkMTlcdTdkMWJcdTdmM2FcdTdmNWZcdTdmOTRcdTdmYzVcdTdmYzFcdTgwMDZcdTgwMThcdTgwMTVcdTgwMTlcdTgwMTdcdTgwM2RcdTgwM2ZcdTgwZjFcdTgxMDJcdTgwZjBcdTgxMDVcdTgwZWRcdTgwZjRcdTgxMDZcdTgwZjhcdTgwZjNcdTgxMDhcdTgwZmRcdTgxMGFcdTgwZmNcdTgw''@;'; put 'put ''ZWZcdTgxZWRcdTgxZWNcdTgyMDBcdTgyMTBcdTgyMmFcdTgyMmJcdTgyMjhcdTgyMmNcdTgyYmJcdTgzMmJcdTgzNTJcdTgzNTRcdTgzNGFcdTgzMzhcdTgzNTBcdTgzNDlcdTgzMzVcdTgzMzRcdTgzNGZcdTgzMzJcdTgzMzlcdTgzMzZcdTgzMTdcdTgzNDBcdTgzMzFcdTgzMjhcdTgzNDMi''@;'; put 'put ''XSxbImIwNDAiLCJcdTg2NTRcdTg2OGFcdTg2YWFcdTg2OTNcdTg2YTRcdTg2YTlcdTg2OGNcdTg2YTNcdTg2OWNcdTg4NzBcdTg4NzdcdTg4ODFcdTg4ODJcdTg4N2RcdTg4NzlcdThhMThcdThhMTBcdThhMGVcdThhMGNcdThhMTVcdThhMGFcdThhMTdcdThhMTNcdThhMTZcdThhMGZcdThh''@;'; put 'put ''MTFcdThjNDhcdThjN2FcdThjNzlcdThjYTFcdThjYTJcdThkNzdcdThlYWNcdThlZDJcdThlZDRcdThlY2ZcdThmYjFcdTkwMDFcdTkwMDZcdThmZjdcdTkwMDBcdThmZmFcdThmZjRcdTkwMDNcdThmZmRcdTkwMDVcdThmZjhcdTkwOTVcdTkwZTFcdTkwZGRcdTkwZTJcdTkxNTJcdTkxNGRc''@;'; put 'put ''dTkxNGNcdTkxZDhcdTkxZGRcdTkxZDdcdTkxZGNcdTkxZDlcdTk1ODNcdTk2NjJcdTk2NjNcdTk2NjEiXSxbImIwYTEiLCJcdTk2NWJcdTk2NWRcdTk2NjRcdTk2NThcdTk2NWVcdTk2YmJcdTk4ZTJcdTk5YWNcdTlhYThcdTlhZDhcdTliMjVcdTliMzJcdTliM2NcdTRlN2VcdTUwN2FcdTUw''@;'; put 'put ''N2RcdTUwNWNcdTUwNDdcdTUwNDNcdTUwNGNcdTUwNWFcdTUwNDlcdTUwNjVcdTUwNzZcdTUwNGVcdTUwNTVcdTUwNzVcdTUwNzRcdTUwNzdcdTUwNGZcdTUwMGZcdTUwNmZcdTUwNmRcdTUxNWNcdTUxOTVcdTUxZjBcdTUyNmFcdTUyNmZcdTUyZDJcdTUyZDlcdTUyZDhcdTUyZDVcdTUzMTBc''@;'; put 'put ''dTUzMGZcdTUzMTlcdTUzM2ZcdTUzNDBcdTUzM2VcdTUzYzNcdTY2ZmNcdTU1NDZcdTU1NmFcdTU1NjZcdTU1NDRcdTU1NWVcdTU1NjFcdTU1NDNcdTU1NGFcdTU1MzFcdTU1NTZcdTU1NGZcdTU1NTVcdTU1MmZcdTU1NjRcdTU1MzhcdTU1MmVcdTU1NWNcdTU1MmNcdTU1NjNcdTU1MzNcdTU1''@;'; put 'put ''NDFcdTU1NTdcdTU3MDhcdTU3MGJcdTU3MDlcdTU3ZGZcdTU4MDVcdTU4MGFcdTU4MDZcdTU3ZTBcdTU3ZTRcdTU3ZmFcdTU4MDJcdTU4MzVcdTU3ZjdcdTU3ZjlcdTU5MjBcdTU5NjJcdTVhMzZcdTVhNDFcdTVhNDlcdTVhNjZcdTVhNmFcdTVhNDAiXSxbImIxNDAiLCJcdTVhM2NcdTVhNjJc''@;'; put 'put ''dTVhNWFcdTVhNDZcdTVhNGFcdTViNzBcdTViYzdcdTViYzVcdTViYzRcdTViYzJcdTViYmZcdTViYzZcdTVjMDlcdTVjMDhcdTVjMDdcdTVjNjBcdTVjNWNcdTVjNWRcdTVkMDdcdTVkMDZcdTVkMGVcdTVkMWJcdTVkMTZcdTVkMjJcdTVkMTFcdTVkMjlcdTVkMTRcdTVkMTlcdTVkMjRcdTVk''@;'; put 'put ''MjdcdTVkMTdcdTVkZTJcdTVlMzhcdTVlMzZcdTVlMzNcdTVlMzdcdTVlYjdcdTVlYjhcdTVlYjZcdTVlYjVcdTVlYmVcdTVmMzVcdTVmMzdcdTVmNTdcdTVmNmNcdTVmNjlcdTVmNmJcdTVmOTdcdTVmOTlcdTVmOWVcdTVmOThcdTVmYTFcdTVmYTBcdTVmOWNcdTYwN2ZcdTYwYTNcdTYwODlc''@;'; put 'put ''dTYwYTBcdTYwYThcdTYwY2JcdTYwYjRcdTYwZTZcdTYwYmQiXSxbImIxYTEiLCJcdTYwYzVcdTYwYmJcdTYwYjVcdTYwZGNcdTYwYmNcdTYwZDhcdTYwZDVcdTYwYzZcdTYwZGZcdTYwYjhcdTYwZGFcdTYwYzdcdTYyMWFcdTYyMWJcdTYyNDhcdTYzYTBcdTYzYTdcdTYzNzJcdTYzOTZcdTYz''@;'; put 'put ''YTJcdTYzYTVcdTYzNzdcdTYzNjdcdTYzOThcdTYzYWFcdTYzNzFcdTYzYTlcdTYzODlcdTYzODNcdTYzOWJcdTYzNmJcdTYzYThcdTYzODRcdTYzODhcdTYzOTlcdTYzYTFcdTYzYWNcdTYzOTJcdTYzOGZcdTYzODBcdTYzN2JcdTYzNjlcdTYzNjhcdTYzN2FcdTY1NWRcdTY1NTZcdTY1NTFc''@;'; put 'put ''dTY1NTlcdTY1NTdcdTU1NWZcdTY1NGZcdTY1NThcdTY1NTVcdTY1NTRcdTY1OWNcdTY1OWJcdTY1YWNcdTY1Y2ZcdTY1Y2JcdTY1Y2NcdTY1Y2VcdTY2NWRcdTY2NWFcdTY2NjRcdTY2NjhcdTY2NjZcdTY2NWVcdTY2ZjlcdTUyZDdcdTY3MWJcdTY4ODFcdTY4YWZcdTY4YTJcdTY4OTNcdTY4''@;'; put 'put ''YjVcdTY4N2ZcdTY4NzZcdTY4YjFcdTY4YTdcdTY4OTdcdTY4YjBcdTY4ODNcdTY4YzRcdTY4YWRcdTY4ODZcdTY4ODVcdTY4OTRcdTY4OWRcdTY4YThcdTY4OWZcdTY4YTFcdTY4ODJcdTZiMzJcdTZiYmEiXSxbImIyNDAiLCJcdTZiZWJcdTZiZWNcdTZjMmJcdTZkOGVcdTZkYmNcdTZkZjNc''@;'; put 'put ''dTZkZDlcdTZkYjJcdTZkZTFcdTZkY2NcdTZkZTRcdTZkZmJcdTZkZmFcdTZlMDVcdTZkYzdcdTZkY2JcdTZkYWZcdTZkZDFcdTZkYWVcdTZkZGVcdTZkZjlcdTZkYjhcdTZkZjdcdTZkZjVcdTZkYzVcdTZkZDJcdTZlMWFcdTZkYjVcdTZkZGFcdTZkZWJcdTZkZDhcdTZkZWFcdTZkZjFcdTZk''@;'; put 'put ''ZWVcdTZkZThcdTZkYzZcdTZkYzRcdTZkYWFcdTZkZWNcdTZkYmZcdTZkZTZcdTcwZjlcdTcxMDlcdTcxMGFcdTcwZmRcdTcwZWZcdTcyM2RcdTcyN2RcdTcyODFcdTczMWNcdTczMWJcdTczMTZcdTczMTNcdTczMTlcdTczODdcdTc0MDVcdTc0MGFcdTc0MDNcdTc0MDZcdTczZmVcdTc0MGRc''@;'; put 'put ''dTc0ZTBcdTc0ZjYiXSxbImIyYTEiLCJcdTc0ZjdcdTc1MWNcdTc1MjJcdTc1NjVcdTc1NjZcdTc1NjJcdTc1NzBcdTc1OGZcdTc1ZDRcdTc1ZDVcdTc1YjVcdTc1Y2FcdTc1Y2RcdTc2OGVcdTc2ZDRcdTc2ZDJcdTc2ZGJcdTc3MzdcdTc3M2VcdTc3M2NcdTc3MzZcdTc3MzhcdTc3M2FcdTc4''@;'; put 'put ''NmJcdTc4NDNcdTc4NGVcdTc5NjVcdTc5NjhcdTc5NmRcdTc5ZmJcdTdhOTJcdTdhOTVcdTdiMjBcdTdiMjhcdTdiMWJcdTdiMmNcdTdiMjZcdTdiMTlcdTdiMWVcdTdiMmVcdTdjOTJcdTdjOTdcdTdjOTVcdTdkNDZcdTdkNDNcdTdkNzFcdTdkMmVcdTdkMzlcdTdkM2NcdTdkNDBcdTdkMzBc''@;'; put 'put ''dTdkMzNcdTdkNDRcdTdkMmZcdTdkNDJcdTdkMzJcdTdkMzFcdTdmM2RcdTdmOWVcdTdmOWFcdTdmY2NcdTdmY2VcdTdmZDJcdTgwMWNcdTgwNGFcdTgwNDZcdTgxMmZcdTgxMTZcdTgxMjNcdTgxMmJcdTgxMjlcdTgxMzBcdTgxMjRcdTgyMDJcdTgyMzVcdTgyMzdcdTgyMzZcdTgyMzlcdTgz''@;'; put 'put ''OGVcdTgzOWVcdTgzOThcdTgzNzhcdTgzYTJcdTgzOTZcdTgzYmRcdTgzYWJcdTgzOTJcdTgzOGFcdTgzOTNcdTgzODlcdTgzYTBcdTgzNzdcdTgzN2JcdTgzN2MiXSxbImIzNDAiLCJcdTgzODZcdTgzYTdcdTg2NTVcdTVmNmFcdTg2YzdcdTg2YzBcdTg2YjZcdTg2YzRcdTg2YjVcdTg2YzZc''@;'; put 'put ''dTg2Y2JcdTg2YjFcdTg2YWZcdTg2YzlcdTg4NTNcdTg4OWVcdTg4ODhcdTg4YWJcdTg4OTJcdTg4OTZcdTg4OGRcdTg4OGJcdTg5OTNcdTg5OGZcdThhMmFcdThhMWRcdThhMjNcdThhMjVcdThhMzFcdThhMmRcdThhMWZcdThhMWJcdThhMjJcdThjNDlcdThjNWFcdThjYTlcdThjYWNcdThj''@;'; put 'put ''YWJcdThjYThcdThjYWFcdThjYTdcdThkNjdcdThkNjZcdThkYmVcdThkYmFcdThlZGJcdThlZGZcdTkwMTlcdTkwMGRcdTkwMWFcdTkwMTdcdTkwMjNcdTkwMWZcdTkwMWRcdTkwMTBcdTkwMTVcdTkwMWVcdTkwMjBcdTkwMGZcdTkwMjJcdTkwMTZcdTkwMWJcdTkwMTQiXSxbImIzYTEiLCJc''@;'; put 'put ''dTkwZThcdTkwZWRcdTkwZmRcdTkxNTdcdTkxY2VcdTkxZjVcdTkxZTZcdTkxZTNcdTkxZTdcdTkxZWRcdTkxZTlcdTk1ODlcdTk2NmFcdTk2NzVcdTk2NzNcdTk2NzhcdTk2NzBcdTk2NzRcdTk2NzZcdTk2NzdcdTk2NmNcdTk2YzBcdTk2ZWFcdTk2ZTlcdTdhZTBcdTdhZGZcdTk4MDJcdTk4''@;'; put 'put ''MDNcdTliNWFcdTljZTVcdTllNzVcdTllN2ZcdTllYTVcdTllYmJcdTUwYTJcdTUwOGRcdTUwODVcdTUwOTlcdTUwOTFcdTUwODBcdTUwOTZcdTUwOThcdTUwOWFcdTY3MDBcdTUxZjFcdTUyNzJcdTUyNzRcdTUyNzVcdTUyNjlcdTUyZGVcdTUyZGRcdTUyZGJcdTUzNWFcdTUzYTVcdTU1N2Jc''@;'; put 'put ''dTU1ODBcdTU1YTdcdTU1N2NcdTU1OGFcdTU1OWRcdTU1OThcdTU1ODJcdTU1OWNcdTU1YWFcdTU1OTRcdTU1ODdcdTU1OGJcdTU1ODNcdTU1YjNcdTU1YWVcdTU1OWZcdTU1M2VcdTU1YjJcdTU1OWFcdTU1YmJcdTU1YWNcdTU1YjFcdTU1N2VcdTU1ODlcdTU1YWJcdTU1OTlcdTU3MGRcdTU4''@;'; put 'put ''MmZcdTU4MmFcdTU4MzRcdTU4MjRcdTU4MzBcdTU4MzFcdTU4MjFcdTU4MWRcdTU4MjBcdTU4ZjlcdTU4ZmFcdTU5NjAiXSxbImI0NDAiLCJcdTVhNzdcdTVhOWFcdTVhN2ZcdTVhOTJcdTVhOWJcdTVhYTdcdTViNzNcdTViNzFcdTViZDJcdTViY2NcdTViZDNcdTViZDBcdTVjMGFcdTVjMGJc''@;'; put 'put ''dTVjMzFcdTVkNGNcdTVkNTBcdTVkMzRcdTVkNDdcdTVkZmRcdTVlNDVcdTVlM2RcdTVlNDBcdTVlNDNcdTVlN2VcdTVlY2FcdTVlYzFcdTVlYzJcdTVlYzRcdTVmM2NcdTVmNmRcdTVmYTlcdTVmYWFcdTVmYThcdTYwZDFcdTYwZTFcdTYwYjJcdTYwYjZcdTYwZTBcdTYxMWNcdTYxMjNcdTYw''@;'; put 'put ''ZmFcdTYxMTVcdTYwZjBcdTYwZmJcdTYwZjRcdTYxNjhcdTYwZjFcdTYxMGVcdTYwZjZcdTYxMDlcdTYxMDBcdTYxMTJcdTYyMWZcdTYyNDlcdTYzYTNcdTYzOGNcdTYzY2ZcdTYzYzBcdTYzZTlcdTYzYzlcdTYzYzZcdTYzY2QiXSxbImI0YTEiLCJcdTYzZDJcdTYzZTNcdTYzZDBcdTYzZTFc''@;'; put 'put ''dTYzZDZcdTYzZWRcdTYzZWVcdTYzNzZcdTYzZjRcdTYzZWFcdTYzZGJcdTY0NTJcdTYzZGFcdTYzZjlcdTY1NWVcdTY1NjZcdTY1NjJcdTY1NjNcdTY1OTFcdTY1OTBcdTY1YWZcdTY2NmVcdTY2NzBcdTY2NzRcdTY2NzZcdTY2NmZcdTY2OTFcdTY2N2FcdTY2N2VcdTY2NzdcdTY2ZmVcdTY2''@;'; put 'put ''ZmZcdTY3MWZcdTY3MWRcdTY4ZmFcdTY4ZDVcdTY4ZTBcdTY4ZDhcdTY4ZDdcdTY5MDVcdTY4ZGZcdTY4ZjVcdTY4ZWVcdTY4ZTdcdTY4ZjlcdTY4ZDJcdTY4ZjJcdTY4ZTNcdTY4Y2JcdTY4Y2RcdTY5MGRcdTY5MTJcdTY5MGVcdTY4YzlcdTY4ZGFcdTY5NmVcdTY4ZmJcdTZiM2VcdTZiM2Fc''@;'; put 'put ''dTZiM2RcdTZiOThcdTZiOTZcdTZiYmNcdTZiZWZcdTZjMmVcdTZjMmZcdTZjMmNcdTZlMmZcdTZlMzhcdTZlNTRcdTZlMjFcdTZlMzJcdTZlNjdcdTZlNGFcdTZlMjBcdTZlMjVcdTZlMjNcdTZlMWJcdTZlNWJcdTZlNThcdTZlMjRcdTZlNTZcdTZlNmVcdTZlMmRcdTZlMjZcdTZlNmZcdTZl''@;'; put 'put ''MzRcdTZlNGRcdTZlM2FcdTZlMmNcdTZlNDNcdTZlMWRcdTZlM2VcdTZlY2IiXSxbImI1NDAiLCJcdTZlODlcdTZlMTlcdTZlNGVcdTZlNjNcdTZlNDRcdTZlNzJcdTZlNjlcdTZlNWZcdTcxMTlcdTcxMWFcdTcxMjZcdTcxMzBcdTcxMjFcdTcxMzZcdTcxNmVcdTcxMWNcdTcyNGNcdTcyODRc''@;'; put 'put ''dTcyODBcdTczMzZcdTczMjVcdTczMzRcdTczMjlcdTc0M2FcdTc0MmFcdTc0MzNcdTc0MjJcdTc0MjVcdTc0MzVcdTc0MzZcdTc0MzRcdTc0MmZcdTc0MWJcdTc0MjZcdTc0MjhcdTc1MjVcdTc1MjZcdTc1NmJcdTc1NmFcdTc1ZTJcdTc1ZGJcdTc1ZTNcdTc1ZDlcdTc1ZDhcdTc1ZGVcdTc1''@;'; put 'put ''ZTBcdTc2N2JcdTc2N2NcdTc2OTZcdTc2OTNcdTc2YjRcdTc2ZGNcdTc3NGZcdTc3ZWRcdTc4NWRcdTc4NmNcdTc4NmZcdTdhMGRcdTdhMDhcdTdhMGJcdTdhMDVcdTdhMDBcdTdhOTgiXSxbImI1YTEiLCJcdTdhOTdcdTdhOTZcdTdhZTVcdTdhZTNcdTdiNDlcdTdiNTZcdTdiNDZcdTdiNTBc''@;'; put 'put ''dTdiNTJcdTdiNTRcdTdiNGRcdTdiNGJcdTdiNGZcdTdiNTFcdTdjOWZcdTdjYTVcdTdkNWVcdTdkNTBcdTdkNjhcdTdkNTVcdTdkMmJcdTdkNmVcdTdkNzJcdTdkNjFcdTdkNjZcdTdkNjJcdTdkNzBcdTdkNzNcdTU1ODRcdTdmZDRcdTdmZDVcdTgwMGJcdTgwNTJcdTgwODVcdTgxNTVcdTgx''@;'; put 'put ''NTRcdTgxNGJcdTgxNTFcdTgxNGVcdTgxMzlcdTgxNDZcdTgxM2VcdTgxNGNcdTgxNTNcdTgxNzRcdTgyMTJcdTgyMWNcdTgzZTlcdTg0MDNcdTgzZjhcdTg0MGRcdTgzZTBcdTgzYzVcdTg0MGJcdTgzYzFcdTgzZWZcdTgzZjFcdTgzZjRcdTg0NTdcdTg0MGFcdTgzZjBcdTg0MGNcdTgzY2Nc''@;'; put 'put ''dTgzZmRcdTgzZjJcdTgzY2FcdTg0MzhcdTg0MGVcdTg0MDRcdTgzZGNcdTg0MDdcdTgzZDRcdTgzZGZcdTg2NWJcdTg2ZGZcdTg2ZDlcdTg2ZWRcdTg2ZDRcdTg2ZGJcdTg2ZTRcdTg2ZDBcdTg2ZGVcdTg4NTdcdTg4YzFcdTg4YzJcdTg4YjFcdTg5ODNcdTg5OTZcdThhM2JcdThhNjBcdThh''@;'; put 'put ''NTVcdThhNWVcdThhM2NcdThhNDEiXSxbImI2NDAiLCJcdThhNTRcdThhNWJcdThhNTBcdThhNDZcdThhMzRcdThhM2FcdThhMzZcdThhNTZcdThjNjFcdThjODJcdThjYWZcdThjYmNcdThjYjNcdThjYmRcdThjYzFcdThjYmJcdThjYzBcdThjYjRcdThjYjdcdThjYjZcdThjYmZcdThjYjhc''@;'; put 'put ''dThkOGFcdThkODVcdThkODFcdThkY2VcdThkZGRcdThkY2JcdThkZGFcdThkZDFcdThkY2NcdThkZGJcdThkYzZcdThlZmJcdThlZjhcdThlZmNcdThmOWNcdTkwMmVcdTkwMzVcdTkwMzFcdTkwMzhcdTkwMzJcdTkwMzZcdTkxMDJcdTkwZjVcdTkxMDlcdTkwZmVcdTkxNjNcdTkxNjVcdTkx''@;'; put 'put ''Y2ZcdTkyMTRcdTkyMTVcdTkyMjNcdTkyMDlcdTkyMWVcdTkyMGRcdTkyMTBcdTkyMDdcdTkyMTFcdTk1OTRcdTk1OGZcdTk1OGJcdTk1OTEiXSxbImI2YTEiLCJcdTk1OTNcdTk1OTJcdTk1OGVcdTk2OGFcdTk2OGVcdTk2OGJcdTk2N2RcdTk2ODVcdTk2ODZcdTk2OGRcdTk2NzJcdTk2ODRc''@;'; put 'put ''dTk2YzFcdTk2YzVcdTk2YzRcdTk2YzZcdTk2YzdcdTk2ZWZcdTk2ZjJcdTk3Y2NcdTk4MDVcdTk4MDZcdTk4MDhcdTk4ZTdcdTk4ZWFcdTk4ZWZcdTk4ZTlcdTk4ZjJcdTk4ZWRcdTk5YWVcdTk5YWRcdTllYzNcdTllY2RcdTllZDFcdTRlODJcdTUwYWRcdTUwYjVcdTUwYjJcdTUwYjNcdTUw''@;'; put 'put ''YzVcdTUwYmVcdTUwYWNcdTUwYjdcdTUwYmJcdTUwYWZcdTUwYzdcdTUyN2ZcdTUyNzdcdTUyN2RcdTUyZGZcdTUyZTZcdTUyZTRcdTUyZTJcdTUyZTNcdTUzMmZcdTU1ZGZcdTU1ZThcdTU1ZDNcdTU1ZTZcdTU1Y2VcdTU1ZGNcdTU1YzdcdTU1ZDFcdTU1ZTNcdTU1ZTRcdTU1ZWZcdTU1ZGFc''@;'; put 'put ''dTU1ZTFcdTU1YzVcdTU1YzZcdTU1ZTVcdTU1YzlcdTU3MTJcdTU3MTNcdTU4NWVcdTU4NTFcdTU4NThcdTU4NTdcdTU4NWFcdTU4NTRcdTU4NmJcdTU4NGNcdTU4NmRcdTU4NGFcdTU4NjJcdTU4NTJcdTU4NGJcdTU5NjdcdTVhYzFcdTVhYzlcdTVhY2NcdTVhYmVcdTVhYmRcdTVhYmMiXSxb''@;'; put 'put ''ImI3NDAiLCJcdTVhYjNcdTVhYzJcdTVhYjJcdTVkNjlcdTVkNmZcdTVlNGNcdTVlNzlcdTVlYzlcdTVlYzhcdTVmMTJcdTVmNTlcdTVmYWNcdTVmYWVcdTYxMWFcdTYxMGZcdTYxNDhcdTYxMWZcdTYwZjNcdTYxMWJcdTYwZjlcdTYxMDFcdTYxMDhcdTYxNGVcdTYxNGNcdTYxNDRcdTYxNGRc''@;'; put 'put ''dTYxM2VcdTYxMzRcdTYxMjdcdTYxMGRcdTYxMDZcdTYxMzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0M2VcdTY0MWVcdTY0MmFcdTY0MmRcdTY0M2RcdTY0MmNcdTY0MGZcdTY0MWNcdTY0MTRcdTY0MGRcdTY0MzZcdTY0MTZcdTY0MTdcdTY0MDZcdTY1NmNcdTY1OWZcdTY1YjBcdTY2OTdcdTY2''@;'; put 'put ''ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2OThcdTY2OGRcdTY3MDNcdTY5OTRcdTY5NmQiXSxbImI3YTEiLCJcdTY5NWFcdTY5NzdcdTY5NjBcdTY5NTRcdTY5NzVcdTY5MzBcdTY5ODJcdTY5NGFcdTY5NjhcdTY5NmJcdTY5NWVcdTY5NTNcdTY5NzlcdTY5ODZcdTY5NWRcdTY5NjNc''@;'; put 'put ''dTY5NWJcdTZiNDdcdTZiNzJcdTZiYzBcdTZiYmZcdTZiZDNcdTZiZmRcdTZlYTJcdTZlYWZcdTZlZDNcdTZlYjZcdTZlYzJcdTZlOTBcdTZlOWRcdTZlYzdcdTZlYzVcdTZlYTVcdTZlOThcdTZlYmNcdTZlYmFcdTZlYWJcdTZlZDFcdTZlOTZcdTZlOWNcdTZlYzRcdTZlZDRcdTZlYWFcdTZl''@;'; put 'put ''YTdcdTZlYjRcdTcxNGVcdTcxNTlcdTcxNjlcdTcxNjRcdTcxNDlcdTcxNjdcdTcxNWNcdTcxNmNcdTcxNjZcdTcxNGNcdTcxNjVcdTcxNWVcdTcxNDZcdTcxNjhcdTcxNTZcdTcyM2FcdTcyNTJcdTczMzdcdTczNDVcdTczM2ZcdTczM2VcdTc0NmZcdTc0NWFcdTc0NTVcdTc0NWZcdTc0NWVc''@;'; put 'put ''dTc0NDFcdTc0M2ZcdTc0NTlcdTc0NWJcdTc0NWNcdTc1NzZcdTc1NzhcdTc2MDBcdTc1ZjBcdTc2MDFcdTc1ZjJcdTc1ZjFcdTc1ZmFcdTc1ZmZcdTc1ZjRcdTc1ZjNcdTc2ZGVcdTc2ZGZcdTc3NWJcdTc3NmJcdTc3NjZcdTc3NWVcdTc3NjMiXSxbImI4NDAiLCJcdTc3NzlcdTc3NmFcdTc3''@;'; put 'put ''NmNcdTc3NWNcdTc3NjVcdTc3NjhcdTc3NjJcdTc3ZWVcdTc4OGVcdTc4YjBcdTc4OTdcdTc4OThcdTc4OGNcdTc4ODlcdTc4N2NcdTc4OTFcdTc4OTNcdTc4N2ZcdTc5N2FcdTc5N2ZcdTc5ODFcdTg0MmNcdTc5YmRcdTdhMWNcdTdhMWFcdTdhMjBcdTdhMTRcdTdhMWZcdTdhMWVcdTdhOWZc''@;'; put 'put ''dTdhYTBcdTdiNzdcdTdiYzBcdTdiNjBcdTdiNmVcdTdiNjdcdTdjYjFcdTdjYjNcdTdjYjVcdTdkOTNcdTdkNzlcdTdkOTFcdTdkODFcdTdkOGZcdTdkNWJcdTdmNmVcdTdmNjlcdTdmNmFcdTdmNzJcdTdmYTlcdTdmYThcdTdmYTRcdTgwNTZcdTgwNThcdTgwODZcdTgwODRcdTgxNzFcdTgx''@;'; put 'put ''NzBcdTgxNzhcdTgxNjVcdTgxNmVcdTgxNzNcdTgxNmIiXSxbImI4YTEiLCJcdTgxNzlcdTgxN2FcdTgxNjZcdTgyMDVcdTgyNDdcdTg0ODJcdTg0NzdcdTg0M2RcdTg0MzFcdTg0NzVcdTg0NjZcdTg0NmJcdTg0NDlcdTg0NmNcdTg0NWJcdTg0M2NcdTg0MzVcdTg0NjFcdTg0NjNcdTg0Njlc''@;'; put 'put ''dTg0NmRcdTg0NDZcdTg2NWVcdTg2NWNcdTg2NWZcdTg2ZjlcdTg3MTNcdTg3MDhcdTg3MDdcdTg3MDBcdTg2ZmVcdTg2ZmJcdTg3MDJcdTg3MDNcdTg3MDZcdTg3MGFcdTg4NTlcdTg4ZGZcdTg4ZDRcdTg4ZDlcdTg4ZGNcdTg4ZDhcdTg4ZGRcdTg4ZTFcdTg4Y2FcdTg4ZDVcdTg4ZDJcdTg5''@;'; put 'put ''OWNcdTg5ZTNcdThhNmJcdThhNzJcdThhNzNcdThhNjZcdThhNjlcdThhNzBcdThhODdcdThhN2NcdThhNjNcdThhYTBcdThhNzFcdThhODVcdThhNmRcdThhNjJcdThhNmVcdThhNmNcdThhNzlcdThhN2JcdThhM2VcdThhNjhcdThjNjJcdThjOGFcdThjODlcdThjY2FcdThjYzdcdThjYzhc''@;'; put 'put ''dThjYzRcdThjYjJcdThjYzNcdThjYzJcdThjYzVcdThkZTFcdThkZGZcdThkZThcdThkZWZcdThkZjNcdThkZmFcdThkZWFcdThkZTRcdThkZTZcdThlYjJcdThmMDNcdThmMDlcdThlZmVcdThmMGEiXSxbImI5NDAiLCJcdThmOWZcdThmYjJcdTkwNGJcdTkwNGFcdTkwNTNcdTkwNDJcdTkw''@;'; put 'put ''NTRcdTkwM2NcdTkwNTVcdTkwNTBcdTkwNDdcdTkwNGZcdTkwNGVcdTkwNGRcdTkwNTFcdTkwM2VcdTkwNDFcdTkxMTJcdTkxMTdcdTkxNmNcdTkxNmFcdTkxNjlcdTkxYzlcdTkyMzdcdTkyNTdcdTkyMzhcdTkyM2RcdTkyNDBcdTkyM2VcdTkyNWJcdTkyNGJcdTkyNjRcdTkyNTFcdTkyMzRc''@;'; put 'put ''dTkyNDlcdTkyNGRcdTkyNDVcdTkyMzlcdTkyM2ZcdTkyNWFcdTk1OThcdTk2OThcdTk2OTRcdTk2OTVcdTk2Y2RcdTk2Y2JcdTk2YzlcdTk2Y2FcdTk2ZjdcdTk2ZmJcdTk2ZjlcdTk2ZjZcdTk3NTZcdTk3NzRcdTk3NzZcdTk4MTBcdTk4MTFcdTk4MTNcdTk4MGFcdTk4MTJcdTk4MGNcdTk4''@;'; put 'put ''ZmNcdTk4ZjQiXSxbImI5YTEiLCJcdTk4ZmRcdTk4ZmVcdTk5YjNcdTk5YjFcdTk5YjRcdTlhZTFcdTljZTlcdTllODJcdTlmMGVcdTlmMTNcdTlmMjBcdTUwZTdcdTUwZWVcdTUwZTVcdTUwZDZcdTUwZWRcdTUwZGFcdTUwZDVcdTUwY2ZcdTUwZDFcdTUwZjFcdTUwY2VcdTUwZTlcdTUxNjJc''@;'; put 'put ''dTUxZjNcdTUyODNcdTUyODJcdTUzMzFcdTUzYWRcdTU1ZmVcdTU2MDBcdTU2MWJcdTU2MTdcdTU1ZmRcdTU2MTRcdTU2MDZcdTU2MDlcdTU2MGRcdTU2MGVcdTU1ZjdcdTU2MTZcdTU2MWZcdTU2MDhcdTU2MTBcdTU1ZjZcdTU3MThcdTU3MTZcdTU4NzVcdTU4N2VcdTU4ODNcdTU4OTNcdTU4''@;'; put 'put ''OGFcdTU4NzlcdTU4ODVcdTU4N2RcdTU4ZmRcdTU5MjVcdTU5MjJcdTU5MjRcdTU5NmFcdTU5NjlcdTVhZTFcdTVhZTZcdTVhZTlcdTVhZDdcdTVhZDZcdTVhZDhcdTVhZTNcdTViNzVcdTViZGVcdTViZTdcdTViZTFcdTViZTVcdTViZTZcdTViZThcdTViZTJcdTViZTRcdTViZGZcdTVjMGRc''@;'; put 'put ''dTVjNjJcdTVkODRcdTVkODdcdTVlNWJcdTVlNjNcdTVlNTVcdTVlNTdcdTVlNTRcdTVlZDNcdTVlZDZcdTVmMGFcdTVmNDZcdTVmNzBcdTVmYjlcdTYxNDciXSxbImJhNDAiLCJcdTYxM2ZcdTYxNGJcdTYxNzdcdTYxNjJcdTYxNjNcdTYxNWZcdTYxNWFcdTYxNThcdTYxNzVcdTYyMmFcdTY0''@;'; put 'put ''ODdcdTY0NThcdTY0NTRcdTY0YTRcdTY0NzhcdTY0NWZcdTY0N2FcdTY0NTFcdTY0NjdcdTY0MzRcdTY0NmRcdTY0N2JcdTY1NzJcdTY1YTFcdTY1ZDdcdTY1ZDZcdTY2YTJcdTY2YThcdTY2OWRcdTY5OWNcdTY5YThcdTY5OTVcdTY5YzFcdTY5YWVcdTY5ZDNcdTY5Y2JcdTY5OWJcdTY5Yjdc''@;'; put 'put ''dTY5YmJcdTY5YWJcdTY5YjRcdTY5ZDBcdTY5Y2RcdTY5YWRcdTY5Y2NcdTY5YTZcdTY5YzNcdTY5YTNcdTZiNDlcdTZiNGNcdTZjMzNcdTZmMzNcdTZmMTRcdTZlZmVcdTZmMTNcdTZlZjRcdTZmMjlcdTZmM2VcdTZmMjBcdTZmMmNcdTZmMGZcdTZmMDJcdTZmMjIiXSxbImJhYTEiLCJcdTZl''@;'; put 'put ''ZmZcdTZlZWZcdTZmMDZcdTZmMzFcdTZmMzhcdTZmMzJcdTZmMjNcdTZmMTVcdTZmMmJcdTZmMmZcdTZmODhcdTZmMmFcdTZlZWNcdTZmMDFcdTZlZjJcdTZlY2NcdTZlZjdcdTcxOTRcdTcxOTlcdTcxN2RcdTcxOGFcdTcxODRcdTcxOTJcdTcyM2VcdTcyOTJcdTcyOTZcdTczNDRcdTczNTBc''@;'; put 'put ''dTc0NjRcdTc0NjNcdTc0NmFcdTc0NzBcdTc0NmRcdTc1MDRcdTc1OTFcdTc2MjdcdTc2MGRcdTc2MGJcdTc2MDlcdTc2MTNcdTc2ZTFcdTc2ZTNcdTc3ODRcdTc3N2RcdTc3N2ZcdTc3NjFcdTc4YzFcdTc4OWZcdTc4YTdcdTc4YjNcdTc4YTlcdTc4YTNcdTc5OGVcdTc5OGZcdTc5OGRcdTdh''@;'; put 'put ''MmVcdTdhMzFcdTdhYWFcdTdhYTlcdTdhZWRcdTdhZWZcdTdiYTFcdTdiOTVcdTdiOGJcdTdiNzVcdTdiOTdcdTdiOWRcdTdiOTRcdTdiOGZcdTdiYjhcdTdiODdcdTdiODRcdTdjYjlcdTdjYmRcdTdjYmVcdTdkYmJcdTdkYjBcdTdkOWNcdTdkYmRcdTdkYmVcdTdkYTBcdTdkY2FcdTdkYjRc''@;'; put 'put ''dTdkYjJcdTdkYjFcdTdkYmFcdTdkYTJcdTdkYmZcdTdkYjVcdTdkYjhcdTdkYWRcdTdkZDJcdTdkYzdcdTdkYWMiXSxbImJiNDAiLCJcdTdmNzBcdTdmZTBcdTdmZTFcdTdmZGZcdTgwNWVcdTgwNWFcdTgwODdcdTgxNTBcdTgxODBcdTgxOGZcdTgxODhcdTgxOGFcdTgxN2ZcdTgxODJcdTgx''@;'; put 'put ''ZTdcdTgxZmFcdTgyMDdcdTgyMTRcdTgyMWVcdTgyNGJcdTg0YzlcdTg0YmZcdTg0YzZcdTg0YzRcdTg0OTlcdTg0OWVcdTg0YjJcdTg0OWNcdTg0Y2JcdTg0YjhcdTg0YzBcdTg0ZDNcdTg0OTBcdTg0YmNcdTg0ZDFcdTg0Y2FcdTg3M2ZcdTg3MWNcdTg3M2JcdTg3MjJcdTg3MjVcdTg3MzRc''@;'; put 'put ''dTg3MThcdTg3NTVcdTg3MzdcdTg3MjlcdTg4ZjNcdTg5MDJcdTg4ZjRcdTg4ZjlcdTg4ZjhcdTg4ZmRcdTg4ZThcdTg5MWFcdTg4ZWZcdThhYTZcdThhOGNcdThhOWVcdThhYTNcdThhOGRcdThhYTFcdThhOTNcdThhYTQiXSxbImJiYTEiLCJcdThhYWFcdThhYTVcdThhYThcdThhOThcdThh''@;'; put 'put ''OTFcdThhOWFcdThhYTdcdThjNmFcdThjOGRcdThjOGNcdThjZDNcdThjZDFcdThjZDJcdThkNmJcdThkOTlcdThkOTVcdThkZmNcdThmMTRcdThmMTJcdThmMTVcdThmMTNcdThmYTNcdTkwNjBcdTkwNThcdTkwNWNcdTkwNjNcdTkwNTlcdTkwNWVcdTkwNjJcdTkwNWRcdTkwNWJcdTkxMTlc''@;'; put 'put ''dTkxMThcdTkxMWVcdTkxNzVcdTkxNzhcdTkxNzdcdTkxNzRcdTkyNzhcdTkyODBcdTkyODVcdTkyOThcdTkyOTZcdTkyN2JcdTkyOTNcdTkyOWNcdTkyYThcdTkyN2NcdTkyOTFcdTk1YTFcdTk1YThcdTk1YTlcdTk1YTNcdTk1YTVcdTk1YTRcdTk2OTlcdTk2OWNcdTk2OWJcdTk2Y2NcdTk2''@;'; put 'put ''ZDJcdTk3MDBcdTk3N2NcdTk3ODVcdTk3ZjZcdTk4MTdcdTk4MThcdTk4YWZcdTk4YjFcdTk5MDNcdTk5MDVcdTk5MGNcdTk5MDlcdTk5YzFcdTlhYWZcdTlhYjBcdTlhZTZcdTliNDFcdTliNDJcdTljZjRcdTljZjZcdTljZjNcdTllYmNcdTlmM2JcdTlmNGFcdTUxMDRcdTUxMDBcdTUwZmJc''@;'; put 'put ''dTUwZjVcdTUwZjlcdTUxMDJcdTUxMDhcdTUxMDlcdTUxMDVcdTUxZGMiXSxbImJjNDAiLCJcdTUyODdcdTUyODhcdTUyODlcdTUyOGRcdTUyOGFcdTUyZjBcdTUzYjJcdTU2MmVcdTU2M2JcdTU2MzlcdTU2MzJcdTU2M2ZcdTU2MzRcdTU2MjlcdTU2NTNcdTU2NGVcdTU2NTdcdTU2NzRcdTU2''@;'; put 'put ''MzZcdTU2MmZcdTU2MzBcdTU4ODBcdTU4OWZcdTU4OWVcdTU4YjNcdTU4OWNcdTU4YWVcdTU4YTlcdTU4YTZcdTU5NmRcdTViMDlcdTVhZmJcdTViMGJcdTVhZjVcdTViMGNcdTViMDhcdTViZWVcdTViZWNcdTViZTlcdTViZWJcdTVjNjRcdTVjNjVcdTVkOWRcdTVkOTRcdTVlNjJcdTVlNWZc''@;'; put 'put ''dTVlNjFcdTVlZTJcdTVlZGFcdTVlZGZcdTVlZGRcdTVlZTNcdTVlZTBcdTVmNDhcdTVmNzFcdTVmYjdcdTVmYjVcdTYxNzZcdTYxNjdcdTYxNmVcdTYxNWRcdTYxNTVcdTYxODIiXSxbImJjYTEiLCJcdTYxN2NcdTYxNzBcdTYxNmJcdTYxN2VcdTYxYTdcdTYxOTBcdTYxYWJcdTYxOGVcdTYx''@;'; put 'put ''YWNcdTYxOWFcdTYxYTRcdTYxOTRcdTYxYWVcdTYyMmVcdTY0NjlcdTY0NmZcdTY0NzlcdTY0OWVcdTY0YjJcdTY0ODhcdTY0OTBcdTY0YjBcdTY0YTVcdTY0OTNcdTY0OTVcdTY0YTlcdTY0OTJcdTY0YWVcdTY0YWRcdTY0YWJcdTY0OWFcdTY0YWNcdTY0OTlcdTY0YTJcdTY0YjNcdTY1NzVc''@;'; put 'put ''dTY1NzdcdTY1NzhcdTY2YWVcdTY2YWJcdTY2YjRcdTY2YjFcdTZhMjNcdTZhMWZcdTY5ZThcdTZhMDFcdTZhMWVcdTZhMTlcdTY5ZmRcdTZhMjFcdTZhMTNcdTZhMGFcdTY5ZjNcdTZhMDJcdTZhMDVcdTY5ZWRcdTZhMTFcdTZiNTBcdTZiNGVcdTZiYTRcdTZiYzVcdTZiYzZcdTZmM2ZcdTZm''@;'; put 'put ''N2NcdTZmODRcdTZmNTFcdTZmNjZcdTZmNTRcdTZmODZcdTZmNmRcdTZmNWJcdTZmNzhcdTZmNmVcdTZmOGVcdTZmN2FcdTZmNzBcdTZmNjRcdTZmOTdcdTZmNThcdTZlZDVcdTZmNmZcdTZmNjBcdTZmNWZcdTcxOWZcdTcxYWNcdTcxYjFcdTcxYThcdTcyNTZcdTcyOWJcdTczNGVcdTczNTdc''@;'; put 'put ''dTc0NjlcdTc0OGJcdTc0ODMiXSxbImJkNDAiLCJcdTc0N2VcdTc0ODBcdTc1N2ZcdTc2MjBcdTc2MjlcdTc2MWZcdTc2MjRcdTc2MjZcdTc2MjFcdTc2MjJcdTc2OWFcdTc2YmFcdTc2ZTRcdTc3OGVcdTc3ODdcdTc3OGNcdTc3OTFcdTc3OGJcdTc4Y2JcdTc4YzVcdTc4YmFcdTc4Y2FcdTc4''@;'; put 'put ''YmVcdTc4ZDVcdTc4YmNcdTc4ZDBcdTdhM2ZcdTdhM2NcdTdhNDBcdTdhM2RcdTdhMzdcdTdhM2JcdTdhYWZcdTdhYWVcdTdiYWRcdTdiYjFcdTdiYzRcdTdiYjRcdTdiYzZcdTdiYzdcdTdiYzFcdTdiYTBcdTdiY2NcdTdjY2FcdTdkZTBcdTdkZjRcdTdkZWZcdTdkZmJcdTdkZDhcdTdkZWNc''@;'; put 'put ''dTdkZGRcdTdkZThcdTdkZTNcdTdkZGFcdTdkZGVcdTdkZTlcdTdkOWVcdTdkZDlcdTdkZjJcdTdkZjlcdTdmNzVcdTdmNzdcdTdmYWYiXSxbImJkYTEiLCJcdTdmZTlcdTgwMjZcdTgxOWJcdTgxOWNcdTgxOWRcdTgxYTBcdTgxOWFcdTgxOThcdTg1MTdcdTg1M2RcdTg1MWFcdTg0ZWVcdTg1''@;'; put 'put ''MmNcdTg1MmRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1MjFcdTg1MTRcdTg0ZWNcdTg1MjVcdTg0ZmZcdTg1MDZcdTg3ODJcdTg3NzRcdTg3NzZcdTg3NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3NTdcdTg3NGNcdTg3NTNcdTg4NWJcdTg4NWRcdTg5MTBcdTg5MDdcdTg5MTJcdTg5MTNc''@;'; put 'put ''dTg5MTVcdTg5MGFcdThhYmNcdThhZDJcdThhYzdcdThhYzRcdThhOTVcdThhY2JcdThhZjhcdThhYjJcdThhYzlcdThhYzJcdThhYmZcdThhYjBcdThhZDZcdThhY2RcdThhYjZcdThhYjlcdThhZGJcdThjNGNcdThjNGVcdThjNmNcdThjZTBcdThjZGVcdThjZTZcdThjZTRcdThjZWNcdThj''@;'; put 'put ''ZWRcdThjZTJcdThjZTNcdThjZGNcdThjZWFcdThjZTFcdThkNmRcdThkOWZcdThkYTNcdThlMmJcdThlMTBcdThlMWRcdThlMjJcdThlMGZcdThlMjlcdThlMWZcdThlMjFcdThlMWVcdThlYmFcdThmMWRcdThmMWJcdThmMWZcdThmMjlcdThmMjZcdThmMmFcdThmMWNcdThmMWUiXSxbImJl''@;'; put 'put ''NDAiLCJcdThmMjVcdTkwNjlcdTkwNmVcdTkwNjhcdTkwNmRcdTkwNzdcdTkxMzBcdTkxMmRcdTkxMjdcdTkxMzFcdTkxODdcdTkxODlcdTkxOGJcdTkxODNcdTkyYzVcdTkyYmJcdTkyYjdcdTkyZWFcdTkyYWNcdTkyZTRcdTkyYzFcdTkyYjNcdTkyYmNcdTkyZDJcdTkyYzdcdTkyZjBcdTky''@;'; put 'put ''YjJcdTk1YWRcdTk1YjFcdTk3MDRcdTk3MDZcdTk3MDdcdTk3MDlcdTk3NjBcdTk3OGRcdTk3OGJcdTk3OGZcdTk4MjFcdTk4MmJcdTk4MWNcdTk4YjNcdTk5MGFcdTk5MTNcdTk5MTJcdTk5MThcdTk5ZGRcdTk5ZDBcdTk5ZGZcdTk5ZGJcdTk5ZDFcdTk5ZDVcdTk5ZDJcdTk5ZDlcdTlhYjdc''@;'; put 'put ''dTlhZWVcdTlhZWZcdTliMjdcdTliNDVcdTliNDRcdTliNzdcdTliNmZcdTlkMDZcdTlkMDkiXSxbImJlYTEiLCJcdTlkMDNcdTllYTlcdTllYmVcdTllY2VcdTU4YThcdTlmNTJcdTUxMTJcdTUxMThcdTUxMTRcdTUxMTBcdTUxMTVcdTUxODBcdTUxYWFcdTUxZGRcdTUyOTFcdTUyOTNcdTUy''@;'; put 'put ''ZjNcdTU2NTlcdTU2NmJcdTU2NzlcdTU2NjlcdTU2NjRcdTU2NzhcdTU2NmFcdTU2NjhcdTU2NjVcdTU2NzFcdTU2NmZcdTU2NmNcdTU2NjJcdTU2NzZcdTU4YzFcdTU4YmVcdTU4YzdcdTU4YzVcdTU5NmVcdTViMWRcdTViMzRcdTViNzhcdTViZjBcdTVjMGVcdTVmNGFcdTYxYjJcdTYxOTFc''@;'; put 'put ''dTYxYTlcdTYxOGFcdTYxY2RcdTYxYjZcdTYxYmVcdTYxY2FcdTYxYzhcdTYyMzBcdTY0YzVcdTY0YzFcdTY0Y2JcdTY0YmJcdTY0YmNcdTY0ZGFcdTY0YzRcdTY0YzdcdTY0YzJcdTY0Y2RcdTY0YmZcdTY0ZDJcdTY0ZDRcdTY0YmVcdTY1NzRcdTY2YzZcdTY2YzlcdTY2YjlcdTY2YzRcdTY2''@;'; put 'put ''YzdcdTY2YjhcdTZhM2RcdTZhMzhcdTZhM2FcdTZhNTlcdTZhNmJcdTZhNThcdTZhMzlcdTZhNDRcdTZhNjJcdTZhNjFcdTZhNGJcdTZhNDdcdTZhMzVcdTZhNWZcdTZhNDhcdTZiNTlcdTZiNzdcdTZjMDVcdTZmYzJcdTZmYjFcdTZmYTEiXSxbImJmNDAiLCJcdTZmYzNcdTZmYTRcdTZmYzFc''@;'; put 'put ''dTZmYTdcdTZmYjNcdTZmYzBcdTZmYjlcdTZmYjZcdTZmYTZcdTZmYTBcdTZmYjRcdTcxYmVcdTcxYzlcdTcxZDBcdTcxZDJcdTcxYzhcdTcxZDVcdTcxYjlcdTcxY2VcdTcxZDlcdTcxZGNcdTcxYzNcdTcxYzRcdTczNjhcdTc0OWNcdTc0YTNcdTc0OThcdTc0OWZcdTc0OWVcdTc0ZTJcdTc1''@;'; put 'put ''MGNcdTc1MGRcdTc2MzRcdTc2MzhcdTc2M2FcdTc2ZTdcdTc2ZTVcdTc3YTBcdTc3OWVcdTc3OWZcdTc3YTVcdTc4ZThcdTc4ZGFcdTc4ZWNcdTc4ZTdcdTc5YTZcdTdhNGRcdTdhNGVcdTdhNDZcdTdhNGNcdTdhNGJcdTdhYmFcdTdiZDlcdTdjMTFcdTdiYzlcdTdiZTRcdTdiZGJcdTdiZTFc''@;'; put 'put ''dTdiZTlcdTdiZTZcdTdjZDVcdTdjZDZcdTdlMGEiXSxbImJmYTEiLCJcdTdlMTFcdTdlMDhcdTdlMWJcdTdlMjNcdTdlMWVcdTdlMWRcdTdlMDlcdTdlMTBcdTdmNzlcdTdmYjJcdTdmZjBcdTdmZjFcdTdmZWVcdTgwMjhcdTgxYjNcdTgxYTlcdTgxYThcdTgxZmJcdTgyMDhcdTgyNThcdTgy''@;'; put 'put ''NTlcdTg1NGFcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjlcdTg1NDNcdTg1NDlcdTg1NmRcdTg1NmFcdTg1NWVcdTg3ODNcdTg3OWZcdTg3OWVcdTg3YTJcdTg3OGRcdTg4NjFcdTg5MmFcdTg5MzJcdTg5MjVcdTg5MmJcdTg5MjFcdTg5YWFcdTg5YTZcdThhZTZcdThhZmFcdThhZWJcdThhZjFc''@;'; put 'put ''dThiMDBcdThhZGNcdThhZTdcdThhZWVcdThhZmVcdThiMDFcdThiMDJcdThhZjdcdThhZWRcdThhZjNcdThhZjZcdThhZmNcdThjNmJcdThjNmRcdThjOTNcdThjZjRcdThlNDRcdThlMzFcdThlMzRcdThlNDJcdThlMzlcdThlMzVcdThmM2JcdThmMmZcdThmMzhcdThmMzNcdThmYThcdThm''@;'; put 'put ''YTZcdTkwNzVcdTkwNzRcdTkwNzhcdTkwNzJcdTkwN2NcdTkwN2FcdTkxMzRcdTkxOTJcdTkzMjBcdTkzMzZcdTkyZjhcdTkzMzNcdTkzMmZcdTkzMjJcdTkyZmNcdTkzMmJcdTkzMDRcdTkzMWEiXSxbImMwNDAiLCJcdTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVcdTkzMmVcdTkzMTlcdTk1YmJc''@;'; put 'put ''dTk2YTdcdTk2YThcdTk2YWFcdTk2ZDVcdTk3MGVcdTk3MTFcdTk3MTZcdTk3MGRcdTk3MTNcdTk3MGZcdTk3NWJcdTk3NWNcdTk3NjZcdTk3OThcdTk4MzBcdTk4MzhcdTk4M2JcdTk4MzdcdTk4MmRcdTk4MzlcdTk4MjRcdTk5MTBcdTk5MjhcdTk5MWVcdTk5MWJcdTk5MjFcdTk5MWFcdTk5''@;'; put 'put ''ZWRcdTk5ZTJcdTk5ZjFcdTlhYjhcdTlhYmNcdTlhZmJcdTlhZWRcdTliMjhcdTliOTFcdTlkMTVcdTlkMjNcdTlkMjZcdTlkMjhcdTlkMTJcdTlkMWJcdTllZDhcdTllZDRcdTlmOGRcdTlmOWNcdTUxMmFcdTUxMWZcdTUxMjFcdTUxMzJcdTUyZjVcdTU2OGVcdTU2ODBcdTU2OTBcdTU2ODVc''@;'; put 'put ''dTU2ODciXSxbImMwYTEiLCJcdTU2OGZcdTU4ZDVcdTU4ZDNcdTU4ZDFcdTU4Y2VcdTViMzBcdTViMmFcdTViMjRcdTViN2FcdTVjMzdcdTVjNjhcdTVkYmNcdTVkYmFcdTVkYmRcdTVkYjhcdTVlNmJcdTVmNGNcdTVmYmRcdTYxYzlcdTYxYzJcdTYxYzdcdTYxZTZcdTYxY2JcdTYyMzJcdTYy''@;'; put 'put ''MzRcdTY0Y2VcdTY0Y2FcdTY0ZDhcdTY0ZTBcdTY0ZjBcdTY0ZTZcdTY0ZWNcdTY0ZjFcdTY0ZTJcdTY0ZWRcdTY1ODJcdTY1ODNcdTY2ZDlcdTY2ZDZcdTZhODBcdTZhOTRcdTZhODRcdTZhYTJcdTZhOWNcdTZhZGJcdTZhYTNcdTZhN2VcdTZhOTdcdTZhOTBcdTZhYTBcdTZiNWNcdTZiYWVc''@;'; put 'put ''dTZiZGFcdTZjMDhcdTZmZDhcdTZmZjFcdTZmZGZcdTZmZTBcdTZmZGJcdTZmZTRcdTZmZWJcdTZmZWZcdTZmODBcdTZmZWNcdTZmZTFcdTZmZTlcdTZmZDVcdTZmZWVcdTZmZjBcdTcxZTdcdTcxZGZcdTcxZWVcdTcxZTZcdTcxZTVcdTcxZWRcdTcxZWNcdTcxZjRcdTcxZTBcdTcyMzVcdTcy''@;'; put 'put ''NDZcdTczNzBcdTczNzJcdTc0YTlcdTc0YjBcdTc0YTZcdTc0YThcdTc2NDZcdTc2NDJcdTc2NGNcdTc2ZWFcdTc3YjNcdTc3YWFcdTc3YjBcdTc3YWMiXSxbImMxNDAiLCJcdTc3YTdcdTc3YWRcdTc3ZWZcdTc4ZjdcdTc4ZmFcdTc4ZjRcdTc4ZWZcdTc5MDFcdTc5YTdcdTc5YWFcdTdhNTdc''@;'; put 'put ''dTdhYmZcdTdjMDdcdTdjMGRcdTdiZmVcdTdiZjdcdTdjMGNcdTdiZTBcdTdjZTBcdTdjZGNcdTdjZGVcdTdjZTJcdTdjZGZcdTdjZDlcdTdjZGRcdTdlMmVcdTdlM2VcdTdlNDZcdTdlMzdcdTdlMzJcdTdlNDNcdTdlMmJcdTdlM2RcdTdlMzFcdTdlNDVcdTdlNDFcdTdlMzRcdTdlMzlcdTdl''@;'; put 'put ''NDhcdTdlMzVcdTdlM2ZcdTdlMmZcdTdmNDRcdTdmZjNcdTdmZmNcdTgwNzFcdTgwNzJcdTgwNzBcdTgwNmZcdTgwNzNcdTgxYzZcdTgxYzNcdTgxYmFcdTgxYzJcdTgxYzBcdTgxYmZcdTgxYmRcdTgxYzlcdTgxYmVcdTgxZThcdTgyMDlcdTgyNzFcdTg1YWEiXSxbImMxYTEiLCJcdTg1ODRc''@;'; put 'put ''dTg1N2VcdTg1OWNcdTg1OTFcdTg1OTRcdTg1YWZcdTg1OWJcdTg1ODdcdTg1YThcdTg1OGFcdTg2NjdcdTg3YzBcdTg3ZDFcdTg3YjNcdTg3ZDJcdTg3YzZcdTg3YWJcdTg3YmJcdTg3YmFcdTg3YzhcdTg3Y2JcdTg5M2JcdTg5MzZcdTg5NDRcdTg5MzhcdTg5M2RcdTg5YWNcdThiMGVcdThi''@;'; put 'put ''MTdcdThiMTlcdThiMWJcdThiMGFcdThiMjBcdThiMWRcdThiMDRcdThiMTBcdThjNDFcdThjM2ZcdThjNzNcdThjZmFcdThjZmRcdThjZmNcdThjZjhcdThjZmJcdThkYThcdThlNDlcdThlNGJcdThlNDhcdThlNGFcdThmNDRcdThmM2VcdThmNDJcdThmNDVcdThmM2ZcdTkwN2ZcdTkwN2Rc''@;'; put 'put ''dTkwODRcdTkwODFcdTkwODJcdTkwODBcdTkxMzlcdTkxYTNcdTkxOWVcdTkxOWNcdTkzNGRcdTkzODJcdTkzMjhcdTkzNzVcdTkzNGFcdTkzNjVcdTkzNGJcdTkzMThcdTkzN2VcdTkzNmNcdTkzNWJcdTkzNzBcdTkzNWFcdTkzNTRcdTk1Y2FcdTk1Y2JcdTk1Y2NcdTk1YzhcdTk1YzZcdTk2''@;'; put 'put ''YjFcdTk2YjhcdTk2ZDZcdTk3MWNcdTk3MWVcdTk3YTBcdTk3ZDNcdTk4NDZcdTk4YjZcdTk5MzVcdTlhMDEiXSxbImMyNDAiLCJcdTk5ZmZcdTliYWVcdTliYWJcdTliYWFcdTliYWRcdTlkM2JcdTlkM2ZcdTllOGJcdTllY2ZcdTllZGVcdTllZGNcdTllZGRcdTllZGJcdTlmM2VcdTlmNGJc''@;'; put 'put ''dTUzZTJcdTU2OTVcdTU2YWVcdTU4ZDlcdTU4ZDhcdTViMzhcdTVmNWRcdTYxZTNcdTYyMzNcdTY0ZjRcdTY0ZjJcdTY0ZmVcdTY1MDZcdTY0ZmFcdTY0ZmJcdTY0ZjdcdTY1YjdcdTY2ZGNcdTY3MjZcdTZhYjNcdTZhYWNcdTZhYzNcdTZhYmJcdTZhYjhcdTZhYzJcdTZhYWVcdTZhYWZcdTZi''@;'; put 'put ''NWZcdTZiNzhcdTZiYWZcdTcwMDlcdTcwMGJcdTZmZmVcdTcwMDZcdTZmZmFcdTcwMTFcdTcwMGZcdTcxZmJcdTcxZmNcdTcxZmVcdTcxZjhcdTczNzdcdTczNzVcdTc0YTdcdTc0YmZcdTc1MTVcdTc2NTZcdTc2NTgiXSxbImMyYTEiLCJcdTc2NTJcdTc3YmRcdTc3YmZcdTc3YmJcdTc3YmNc''@;'; put 'put ''dTc5MGVcdTc5YWVcdTdhNjFcdTdhNjJcdTdhNjBcdTdhYzRcdTdhYzVcdTdjMmJcdTdjMjdcdTdjMmFcdTdjMWVcdTdjMjNcdTdjMjFcdTdjZTdcdTdlNTRcdTdlNTVcdTdlNWVcdTdlNWFcdTdlNjFcdTdlNTJcdTdlNTlcdTdmNDhcdTdmZjlcdTdmZmJcdTgwNzdcdTgwNzZcdTgxY2RcdTgx''@;'; put 'put ''Y2ZcdTgyMGFcdTg1Y2ZcdTg1YTlcdTg1Y2RcdTg1ZDBcdTg1YzlcdTg1YjBcdTg1YmFcdTg1YjlcdTg1YTZcdTg3ZWZcdTg3ZWNcdTg3ZjJcdTg3ZTBcdTg5ODZcdTg5YjJcdTg5ZjRcdThiMjhcdThiMzlcdThiMmNcdThiMmJcdThjNTBcdThkMDVcdThlNTlcdThlNjNcdThlNjZcdThlNjRc''@;'; put 'put ''dThlNWZcdThlNTVcdThlYzBcdThmNDlcdThmNGRcdTkwODdcdTkwODNcdTkwODhcdTkxYWJcdTkxYWNcdTkxZDBcdTkzOTRcdTkzOGFcdTkzOTZcdTkzYTJcdTkzYjNcdTkzYWVcdTkzYWNcdTkzYjBcdTkzOThcdTkzOWFcdTkzOTdcdTk1ZDRcdTk1ZDZcdTk1ZDBcdTk1ZDVcdTk2ZTJcdTk2''@;'; put 'put ''ZGNcdTk2ZDlcdTk2ZGJcdTk2ZGVcdTk3MjRcdTk3YTNcdTk3YTYiXSxbImMzNDAiLCJcdTk3YWRcdTk3ZjlcdTk4NGRcdTk4NGZcdTk4NGNcdTk4NGVcdTk4NTNcdTk4YmFcdTk5M2VcdTk5M2ZcdTk5M2RcdTk5MmVcdTk5YTVcdTlhMGVcdTlhYzFcdTliMDNcdTliMDZcdTliNGZcdTliNGVc''@;'; put 'put ''dTliNGRcdTliY2FcdTliYzlcdTliZmRcdTliYzhcdTliYzBcdTlkNTFcdTlkNWRcdTlkNjBcdTllZTBcdTlmMTVcdTlmMmNcdTUxMzNcdTU2YTVcdTU4ZGVcdTU4ZGZcdTU4ZTJcdTViZjVcdTlmOTBcdTVlZWNcdTYxZjJcdTYxZjdcdTYxZjZcdTYxZjVcdTY1MDBcdTY1MGZcdTY2ZTBcdTY2''@;'; put 'put ''ZGRcdTZhZTVcdTZhZGRcdTZhZGFcdTZhZDNcdTcwMWJcdTcwMWZcdTcwMjhcdTcwMWFcdTcwMWRcdTcwMTVcdTcwMThcdTcyMDZcdTcyMGRcdTcyNThcdTcyYTJcdTczNzgiXSxbImMzYTEiLCJcdTczN2FcdTc0YmRcdTc0Y2FcdTc0ZTNcdTc1ODdcdTc1ODZcdTc2NWZcdTc2NjFcdTc3Yzdc''@;'; put 'put ''dTc5MTlcdTc5YjFcdTdhNmJcdTdhNjlcdTdjM2VcdTdjM2ZcdTdjMzhcdTdjM2RcdTdjMzdcdTdjNDBcdTdlNmJcdTdlNmRcdTdlNzlcdTdlNjlcdTdlNmFcdTdmODVcdTdlNzNcdTdmYjZcdTdmYjlcdTdmYjhcdTgxZDhcdTg1ZTlcdTg1ZGRcdTg1ZWFcdTg1ZDVcdTg1ZTRcdTg1ZTVcdTg1''@;'; put 'put ''ZjdcdTg3ZmJcdTg4MDVcdTg4MGRcdTg3ZjlcdTg3ZmVcdTg5NjBcdTg5NWZcdTg5NTZcdTg5NWVcdThiNDFcdThiNWNcdThiNThcdThiNDlcdThiNWFcdThiNGVcdThiNGZcdThiNDZcdThiNTlcdThkMDhcdThkMGFcdThlN2NcdThlNzJcdThlODdcdThlNzZcdThlNmNcdThlN2FcdThlNzRc''@;'; put 'put ''dThmNTRcdThmNGVcdThmYWRcdTkwOGFcdTkwOGJcdTkxYjFcdTkxYWVcdTkzZTFcdTkzZDFcdTkzZGZcdTkzYzNcdTkzYzhcdTkzZGNcdTkzZGRcdTkzZDZcdTkzZTJcdTkzY2RcdTkzZDhcdTkzZTRcdTkzZDdcdTkzZThcdTk1ZGNcdTk2YjRcdTk2ZTNcdTk3MmFcdTk3MjdcdTk3NjFcdTk3''@;'; put 'put ''ZGNcdTk3ZmJcdTk4NWUiXSxbImM0NDAiLCJcdTk4NThcdTk4NWJcdTk4YmNcdTk5NDVcdTk5NDlcdTlhMTZcdTlhMTlcdTliMGRcdTliZThcdTliZTdcdTliZDZcdTliZGJcdTlkODlcdTlkNjFcdTlkNzJcdTlkNmFcdTlkNmNcdTllOTJcdTllOTdcdTllOTNcdTllYjRcdTUyZjhcdTU2YThc''@;'; put 'put ''dTU2YjdcdTU2YjZcdTU2YjRcdTU2YmNcdTU4ZTRcdTViNDBcdTViNDNcdTViN2RcdTViZjZcdTVkYzlcdTYxZjhcdTYxZmFcdTY1MThcdTY1MTRcdTY1MTlcdTY2ZTZcdTY3MjdcdTZhZWNcdTcwM2VcdTcwMzBcdTcwMzJcdTcyMTBcdTczN2JcdTc0Y2ZcdTc2NjJcdTc2NjVcdTc5MjZcdTc5''@;'; put 'put ''MmFcdTc5MmNcdTc5MmJcdTdhYzdcdTdhZjZcdTdjNGNcdTdjNDNcdTdjNGRcdTdjZWZcdTdjZjBcdThmYWVcdTdlN2RcdTdlN2MiXSxbImM0YTEiLCJcdTdlODJcdTdmNGNcdTgwMDBcdTgxZGFcdTgyNjZcdTg1ZmJcdTg1ZjlcdTg2MTFcdTg1ZmFcdTg2MDZcdTg2MGJcdTg2MDdcdTg2MGFc''@;'; put 'put ''dTg4MTRcdTg4MTVcdTg5NjRcdTg5YmFcdTg5ZjhcdThiNzBcdThiNmNcdThiNjZcdThiNmZcdThiNWZcdThiNmJcdThkMGZcdThkMGRcdThlODlcdThlODFcdThlODVcdThlODJcdTkxYjRcdTkxY2JcdTk0MThcdTk0MDNcdTkzZmRcdTk1ZTFcdTk3MzBcdTk4YzRcdTk5NTJcdTk5NTFcdTk5''@;'; put 'put ''YThcdTlhMmJcdTlhMzBcdTlhMzdcdTlhMzVcdTljMTNcdTljMGRcdTllNzlcdTllYjVcdTllZThcdTlmMmZcdTlmNWZcdTlmNjNcdTlmNjFcdTUxMzdcdTUxMzhcdTU2YzFcdTU2YzBcdTU2YzJcdTU5MTRcdTVjNmNcdTVkY2RcdTYxZmNcdTYxZmVcdTY1MWRcdTY1MWNcdTY1OTVcdTY2ZTlc''@;'; put 'put ''dTZhZmJcdTZiMDRcdTZhZmFcdTZiYjJcdTcwNGNcdTcyMWJcdTcyYTdcdTc0ZDZcdTc0ZDRcdTc2NjlcdTc3ZDNcdTdjNTBcdTdlOGZcdTdlOGNcdTdmYmNcdTg2MTdcdTg2MmRcdTg2MWFcdTg4MjNcdTg4MjJcdTg4MjFcdTg4MWZcdTg5NmFcdTg5NmNcdTg5YmRcdThiNzQiXSxbImM1NDAi''@;'; put 'put ''LCJcdThiNzdcdThiN2RcdThkMTNcdThlOGFcdThlOGRcdThlOGJcdThmNWZcdThmYWZcdTkxYmFcdTk0MmVcdTk0MzNcdTk0MzVcdTk0M2FcdTk0MzhcdTk0MzJcdTk0MmJcdTk1ZTJcdTk3MzhcdTk3MzlcdTk3MzJcdTk3ZmZcdTk4NjdcdTk4NjVcdTk5NTdcdTlhNDVcdTlhNDNcdTlhNDBc''@;'; put 'put ''dTlhM2VcdTlhY2ZcdTliNTRcdTliNTFcdTljMmRcdTljMjVcdTlkYWZcdTlkYjRcdTlkYzJcdTlkYjhcdTllOWRcdTllZWZcdTlmMTlcdTlmNWNcdTlmNjZcdTlmNjdcdTUxM2NcdTUxM2JcdTU2YzhcdTU2Y2FcdTU2YzlcdTViN2ZcdTVkZDRcdTVkZDJcdTVmNGVcdTYxZmZcdTY1MjRcdTZi''@;'; put 'put ''MGFcdTZiNjFcdTcwNTFcdTcwNThcdTczODBcdTc0ZTRcdTc1OGFcdTc2NmVcdTc2NmMiXSxbImM1YTEiLCJcdTc5YjNcdTdjNjBcdTdjNWZcdTgwN2VcdTgwN2RcdTgxZGZcdTg5NzJcdTg5NmZcdTg5ZmNcdThiODBcdThkMTZcdThkMTdcdThlOTFcdThlOTNcdThmNjFcdTkxNDhcdTk0NDRc''@;'; put 'put ''dTk0NTFcdTk0NTJcdTk3M2RcdTk3M2VcdTk3YzNcdTk3YzFcdTk4NmJcdTk5NTVcdTlhNTVcdTlhNGRcdTlhZDJcdTliMWFcdTljNDlcdTljMzFcdTljM2VcdTljM2JcdTlkZDNcdTlkZDdcdTlmMzRcdTlmNmNcdTlmNmFcdTlmOTRcdTU2Y2NcdTVkZDZcdTYyMDBcdTY1MjNcdTY1MmJcdTY1''@;'; put 'put ''MmFcdTY2ZWNcdTZiMTBcdTc0ZGFcdTdhY2FcdTdjNjRcdTdjNjNcdTdjNjVcdTdlOTNcdTdlOTZcdTdlOTRcdTgxZTJcdTg2MzhcdTg2M2ZcdTg4MzFcdThiOGFcdTkwOTBcdTkwOGZcdTk0NjNcdTk0NjBcdTk0NjRcdTk3NjhcdTk4NmZcdTk5NWNcdTlhNWFcdTlhNWJcdTlhNTdcdTlhZDNc''@;'; put 'put ''dTlhZDRcdTlhZDFcdTljNTRcdTljNTdcdTljNTZcdTlkZTVcdTllOWZcdTllZjRcdTU2ZDFcdTU4ZTlcdTY1MmNcdTcwNWVcdTc2NzFcdTc2NzJcdTc3ZDdcdTdmNTBcdTdmODhcdTg4MzZcdTg4MzlcdTg4NjJcdThiOTNcdThiOTIiXSxbImM2NDAiLCJcdThiOTZcdTgyNzdcdThkMWJcdTkx''@;'; put 'put ''YzBcdTk0NmFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3YzZcdTk4NzBcdTlhNWZcdTliMjJcdTliNThcdTljNWZcdTlkZjlcdTlkZmFcdTllN2NcdTllN2RcdTlmMDdcdTlmNzdcdTlmNzJcdTVlZjNcdTZiMTZcdTcwNjNcdTdjNmNcdTdjNmVcdTg4M2JcdTg5YzBcdThlYTFcdTkxYzFcdTk0NzJc''@;'; put 'put ''dTk0NzBcdTk4NzFcdTk5NWVcdTlhZDZcdTliMjNcdTllY2NcdTcwNjRcdTc3ZGFcdThiOWFcdTk0NzdcdTk3YzlcdTlhNjJcdTlhNjVcdTdlOWNcdThiOWNcdThlYWFcdTkxYzVcdTk0N2RcdTk0N2VcdTk0N2NcdTljNzdcdTljNzhcdTllZjdcdThjNTRcdTk0N2ZcdTllMWFcdTcyMjhcdTlh''@;'; put 'put ''NmFcdTliMzFcdTllMWJcdTllMWVcdTdjNzIiXSxbImM5NDAiLCJcdTRlNDJcdTRlNWNcdTUxZjVcdTUzMWFcdTUzODJcdTRlMDdcdTRlMGNcdTRlNDdcdTRlOGRcdTU2ZDdcdWZhMGNcdTVjNmVcdTVmNzNcdTRlMGZcdTUxODdcdTRlMGVcdTRlMmVcdTRlOTNcdTRlYzJcdTRlYzlcdTRlYzhc''@;'; put 'put ''dTUxOThcdTUyZmNcdTUzNmNcdTUzYjlcdTU3MjBcdTU5MDNcdTU5MmNcdTVjMTBcdTVkZmZcdTY1ZTFcdTZiYjNcdTZiY2NcdTZjMTRcdTcyM2ZcdTRlMzFcdTRlM2NcdTRlZThcdTRlZGNcdTRlZTlcdTRlZTFcdTRlZGRcdTRlZGFcdTUyMGNcdTUzMWNcdTUzNGNcdTU3MjJcdTU3MjNcdTU5''@;'; put 'put ''MTdcdTU5MmZcdTViODFcdTViODRcdTVjMTJcdTVjM2JcdTVjNzRcdTVjNzNcdTVlMDRcdTVlODBcdTVlODJcdTVmYzlcdTYyMDlcdTYyNTBcdTZjMTUiXSxbImM5YTEiLCJcdTZjMzZcdTZjNDNcdTZjM2ZcdTZjM2JcdTcyYWVcdTcyYjBcdTczOGFcdTc5YjhcdTgwOGFcdTk2MWVcdTRmMGVc''@;'; put 'put ''dTRmMThcdTRmMmNcdTRlZjVcdTRmMTRcdTRlZjFcdTRmMDBcdTRlZjdcdTRmMDhcdTRmMWRcdTRmMDJcdTRmMDVcdTRmMjJcdTRmMTNcdTRmMDRcdTRlZjRcdTRmMTJcdTUxYjFcdTUyMTNcdTUyMDlcdTUyMTBcdTUyYTZcdTUzMjJcdTUzMWZcdTUzNGRcdTUzOGFcdTU0MDdcdTU2ZTFcdTU2''@;'; put 'put ''ZGZcdTU3MmVcdTU3MmFcdTU3MzRcdTU5M2NcdTU5ODBcdTU5N2NcdTU5ODVcdTU5N2JcdTU5N2VcdTU5NzdcdTU5N2ZcdTViNTZcdTVjMTVcdTVjMjVcdTVjN2NcdTVjN2FcdTVjN2JcdTVjN2VcdTVkZGZcdTVlNzVcdTVlODRcdTVmMDJcdTVmMWFcdTVmNzRcdTVmZDVcdTVmZDRcdTVmY2Zc''@;'; put 'put ''dTYyNWNcdTYyNWVcdTYyNjRcdTYyNjFcdTYyNjZcdTYyNjJcdTYyNTlcdTYyNjBcdTYyNWFcdTYyNjVcdTY1ZWZcdTY1ZWVcdTY3M2VcdTY3MzlcdTY3MzhcdTY3M2JcdTY3M2FcdTY3M2ZcdTY3M2NcdTY3MzNcdTZjMThcdTZjNDZcdTZjNTJcdTZjNWNcdTZjNGZcdTZjNGFcdTZjNTRcdTZj''@;'; put 'put ''NGIiXSxbImNhNDAiLCJcdTZjNGNcdTcwNzFcdTcyNWVcdTcyYjRcdTcyYjVcdTczOGVcdTc1MmFcdTc2N2ZcdTdhNzVcdTdmNTFcdTgyNzhcdTgyN2NcdTgyODBcdTgyN2RcdTgyN2ZcdTg2NGRcdTg5N2VcdTkwOTlcdTkwOTdcdTkwOThcdTkwOWJcdTkwOTRcdTk2MjJcdTk2MjRcdTk2MjBc''@;'; put 'put ''dTk2MjNcdTRmNTZcdTRmM2JcdTRmNjJcdTRmNDlcdTRmNTNcdTRmNjRcdTRmM2VcdTRmNjdcdTRmNTJcdTRmNWZcdTRmNDFcdTRmNThcdTRmMmRcdTRmMzNcdTRmM2ZcdTRmNjFcdTUxOGZcdTUxYjlcdTUyMWNcdTUyMWVcdTUyMjFcdTUyYWRcdTUyYWVcdTUzMDlcdTUzNjNcdTUzNzJcdTUz''@;'; put 'put ''OGVcdTUzOGZcdTU0MzBcdTU0MzdcdTU0MmFcdTU0NTRcdTU0NDVcdTU0MTlcdTU0MWNcdTU0MjVcdTU0MTgiXSxbImNhYTEiLCJcdTU0M2RcdTU0NGZcdTU0NDFcdTU0MjhcdTU0MjRcdTU0NDdcdTU2ZWVcdTU2ZTdcdTU2ZTVcdTU3NDFcdTU3NDVcdTU3NGNcdTU3NDlcdTU3NGJcdTU3NTJc''@;'; put 'put ''dTU5MDZcdTU5NDBcdTU5YTZcdTU5OThcdTU5YTBcdTU5OTdcdTU5OGVcdTU5YTJcdTU5OTBcdTU5OGZcdTU5YTdcdTU5YTFcdTViOGVcdTViOTJcdTVjMjhcdTVjMmFcdTVjOGRcdTVjOGZcdTVjODhcdTVjOGJcdTVjODlcdTVjOTJcdTVjOGFcdTVjODZcdTVjOTNcdTVjOTVcdTVkZTBcdTVl''@;'; put 'put ''MGFcdTVlMGVcdTVlOGJcdTVlODlcdTVlOGNcdTVlODhcdTVlOGRcdTVmMDVcdTVmMWRcdTVmNzhcdTVmNzZcdTVmZDJcdTVmZDFcdTVmZDBcdTVmZWRcdTVmZThcdTVmZWVcdTVmZjNcdTVmZTFcdTVmZTRcdTVmZTNcdTVmZmFcdTVmZWZcdTVmZjdcdTVmZmJcdTYwMDBcdTVmZjRcdTYyM2Fc''@;'; put 'put ''dTYyODNcdTYyOGNcdTYyOGVcdTYyOGZcdTYyOTRcdTYyODdcdTYyNzFcdTYyN2JcdTYyN2FcdTYyNzBcdTYyODFcdTYyODhcdTYyNzdcdTYyN2RcdTYyNzJcdTYyNzRcdTY1MzdcdTY1ZjBcdTY1ZjRcdTY1ZjNcdTY1ZjJcdTY1ZjVcdTY3NDVcdTY3NDciXSxbImNiNDAiLCJcdTY3NTlcdTY3''@;'; put 'put ''NTVcdTY3NGNcdTY3NDhcdTY3NWRcdTY3NGRcdTY3NWFcdTY3NGJcdTZiZDBcdTZjMTlcdTZjMWFcdTZjNzhcdTZjNjdcdTZjNmJcdTZjODRcdTZjOGJcdTZjOGZcdTZjNzFcdTZjNmZcdTZjNjlcdTZjOWFcdTZjNmRcdTZjODdcdTZjOTVcdTZjOWNcdTZjNjZcdTZjNzNcdTZjNjVcdTZjN2Jc''@;'; put 'put ''dTZjOGVcdTcwNzRcdTcwN2FcdTcyNjNcdTcyYmZcdTcyYmRcdTcyYzNcdTcyYzZcdTcyYzFcdTcyYmFcdTcyYzVcdTczOTVcdTczOTdcdTczOTNcdTczOTRcdTczOTJcdTc1M2FcdTc1MzlcdTc1OTRcdTc1OTVcdTc2ODFcdTc5M2RcdTgwMzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgw''@;'; put 'put ''OWNcdTgyOTBcdTgyOGZcdTgyODVcdTgyOGVcdTgyOTFcdTgyOTMiXSxbImNiYTEiLCJcdTgyOGFcdTgyODNcdTgyODRcdThjNzhcdThmYzlcdThmYmZcdTkwOWZcdTkwYTFcdTkwYTVcdTkwOWVcdTkwYTdcdTkwYTBcdTk2MzBcdTk2MjhcdTk2MmZcdTk2MmRcdTRlMzNcdTRmOThcdTRmN2Nc''@;'; put 'put ''dTRmODVcdTRmN2RcdTRmODBcdTRmODdcdTRmNzZcdTRmNzRcdTRmODlcdTRmODRcdTRmNzdcdTRmNGNcdTRmOTdcdTRmNmFcdTRmOWFcdTRmNzlcdTRmODFcdTRmNzhcdTRmOTBcdTRmOWNcdTRmOTRcdTRmOWVcdTRmOTJcdTRmODJcdTRmOTVcdTRmNmJcdTRmNmVcdTUxOWVcdTUxYmNcdTUx''@;'; put 'put ''YmVcdTUyMzVcdTUyMzJcdTUyMzNcdTUyNDZcdTUyMzFcdTUyYmNcdTUzMGFcdTUzMGJcdTUzM2NcdTUzOTJcdTUzOTRcdTU0ODdcdTU0N2ZcdTU0ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0NmJcdTU0N2FcdTU0N2VcdTU0NjVcdTU0NmNcdTU0NzRcdTU0NjZcdTU0OGRcdTU0NmZcdTU0NjFc''@;'; put 'put ''dTU0NjBcdTU0OThcdTU0NjNcdTU0NjdcdTU0NjRcdTU2ZjdcdTU2ZjlcdTU3NmZcdTU3NzJcdTU3NmRcdTU3NmJcdTU3NzFcdTU3NzBcdTU3NzZcdTU3ODBcdTU3NzVcdTU3N2JcdTU3NzNcdTU3NzRcdTU3NjIiXSxbImNjNDAiLCJcdTU3NjhcdTU3N2RcdTU5MGNcdTU5NDVcdTU5YjVcdTU5''@;'; put 'put ''YmFcdTU5Y2ZcdTU5Y2VcdTU5YjJcdTU5Y2NcdTU5YzFcdTU5YjZcdTU5YmNcdTU5YzNcdTU5ZDZcdTU5YjFcdTU5YmRcdTU5YzBcdTU5YzhcdTU5YjRcdTU5YzdcdTViNjJcdTViNjVcdTViOTNcdTViOTVcdTVjNDRcdTVjNDdcdTVjYWVcdTVjYTRcdTVjYTBcdTVjYjVcdTVjYWZcdTVjYThc''@;'; put 'put ''dTVjYWNcdTVjOWZcdTVjYTNcdTVjYWRcdTVjYTJcdTVjYWFcdTVjYTdcdTVjOWRcdTVjYTVcdTVjYjZcdTVjYjBcdTVjYTZcdTVlMTdcdTVlMTRcdTVlMTlcdTVmMjhcdTVmMjJcdTVmMjNcdTVmMjRcdTVmNTRcdTVmODJcdTVmN2VcdTVmN2RcdTVmZGVcdTVmZTVcdTYwMmRcdTYwMjZcdTYw''@;'; put 'put ''MTlcdTYwMzJcdTYwMGIiXSxbImNjYTEiLCJcdTYwMzRcdTYwMGFcdTYwMTdcdTYwMzNcdTYwMWFcdTYwMWVcdTYwMmNcdTYwMjJcdTYwMGRcdTYwMTBcdTYwMmVcdTYwMTNcdTYwMTFcdTYwMGNcdTYwMDlcdTYwMWNcdTYyMTRcdTYyM2RcdTYyYWRcdTYyYjRcdTYyZDFcdTYyYmVcdTYyYWFc''@;'; put 'put ''dTYyYjZcdTYyY2FcdTYyYWVcdTYyYjNcdTYyYWZcdTYyYmJcdTYyYTlcdTYyYjBcdTYyYjhcdTY1M2RcdTY1YThcdTY1YmJcdTY2MDlcdTY1ZmNcdTY2MDRcdTY2MTJcdTY2MDhcdTY1ZmJcdTY2MDNcdTY2MGJcdTY2MGRcdTY2MDVcdTY1ZmRcdTY2MTFcdTY2MTBcdTY2ZjZcdTY3MGFcdTY3''@;'; put 'put ''ODVcdTY3NmNcdTY3OGVcdTY3OTJcdTY3NzZcdTY3N2JcdTY3OThcdTY3ODZcdTY3ODRcdTY3NzRcdTY3OGRcdTY3OGNcdTY3N2FcdTY3OWZcdTY3OTFcdTY3OTlcdTY3ODNcdTY3N2RcdTY3ODFcdTY3NzhcdTY3NzlcdTY3OTRcdTZiMjVcdTZiODBcdTZiN2VcdTZiZGVcdTZjMWRcdTZjOTNc''@;'; put 'put ''dTZjZWNcdTZjZWJcdTZjZWVcdTZjZDlcdTZjYjZcdTZjZDRcdTZjYWRcdTZjZTdcdTZjYjdcdTZjZDBcdTZjYzJcdTZjYmFcdTZjYzNcdTZjYzZcdTZjZWRcdTZjZjIiXSxbImNkNDAiLCJcdTZjZDJcdTZjZGRcdTZjYjRcdTZjOGFcdTZjOWRcdTZjODBcdTZjZGVcdTZjYzBcdTZkMzBcdTZj''@;'; put 'put ''Y2RcdTZjYzdcdTZjYjBcdTZjZjlcdTZjY2ZcdTZjZTlcdTZjZDFcdTcwOTRcdTcwOThcdTcwODVcdTcwOTNcdTcwODZcdTcwODRcdTcwOTFcdTcwOTZcdTcwODJcdTcwOWFcdTcwODNcdTcyNmFcdTcyZDZcdTcyY2JcdTcyZDhcdTcyYzlcdTcyZGNcdTcyZDJcdTcyZDRcdTcyZGFcdTcyY2Nc''@;'; put 'put ''dTcyZDFcdTczYTRcdTczYTFcdTczYWRcdTczYTZcdTczYTJcdTczYTBcdTczYWNcdTczOWRcdTc0ZGRcdTc0ZThcdTc1M2ZcdTc1NDBcdTc1M2VcdTc1OGNcdTc1OThcdTc2YWZcdTc2ZjNcdTc2ZjFcdTc2ZjBcdTc2ZjVcdTc3ZjhcdTc3ZmNcdTc3ZjlcdTc3ZmJcdTc3ZmEiXSxbImNkYTEi''@;'; put 'put ''LCJcdTc3ZjdcdTc5NDJcdTc5M2ZcdTc5YzVcdTdhNzhcdTdhN2JcdTdhZmJcdTdjNzVcdTdjZmRcdTgwMzVcdTgwOGZcdTgwYWVcdTgwYTNcdTgwYjhcdTgwYjVcdTgwYWRcdTgyMjBcdTgyYTBcdTgyYzBcdTgyYWJcdTgyOWFcdTgyOThcdTgyOWJcdTgyYjVcdTgyYTdcdTgyYWVcdTgyYmNc''@;'; put 'put ''dTgyOWVcdTgyYmFcdTgyYjRcdTgyYThcdTgyYTFcdTgyYTlcdTgyYzJcdTgyYTRcdTgyYzNcdTgyYjZcdTgyYTJcdTg2NzBcdTg2NmZcdTg2NmRcdTg2NmVcdThjNTZcdThmZDJcdThmY2JcdThmZDNcdThmY2RcdThmZDZcdThmZDVcdThmZDdcdTkwYjJcdTkwYjRcdTkwYWZcdTkwYjNcdTkw''@;'; put 'put ''YjBcdTk2MzlcdTk2M2RcdTk2M2NcdTk2M2FcdTk2NDNcdTRmY2RcdTRmYzVcdTRmZDNcdTRmYjJcdTRmYzlcdTRmY2JcdTRmYzFcdTRmZDRcdTRmZGNcdTRmZDlcdTRmYmJcdTRmYjNcdTRmZGJcdTRmYzdcdTRmZDZcdTRmYmFcdTRmYzBcdTRmYjlcdTRmZWNcdTUyNDRcdTUyNDlcdTUyYzBc''@;'; put 'put ''dTUyYzJcdTUzM2RcdTUzN2NcdTUzOTdcdTUzOTZcdTUzOTlcdTUzOThcdTU0YmFcdTU0YTFcdTU0YWRcdTU0YTVcdTU0Y2YiXSxbImNlNDAiLCJcdTU0YzNcdTgzMGRcdTU0YjdcdTU0YWVcdTU0ZDZcdTU0YjZcdTU0YzVcdTU0YzZcdTU0YTBcdTU0NzBcdTU0YmNcdTU0YTJcdTU0YmVcdTU0''@;'; put 'put ''NzJcdTU0ZGVcdTU0YjBcdTU3YjVcdTU3OWVcdTU3OWZcdTU3YTRcdTU3OGNcdTU3OTdcdTU3OWRcdTU3OWJcdTU3OTRcdTU3OThcdTU3OGZcdTU3OTlcdTU3YTVcdTU3OWFcdTU3OTVcdTU4ZjRcdTU5MGRcdTU5NTNcdTU5ZTFcdTU5ZGVcdTU5ZWVcdTVhMDBcdTU5ZjFcdTU5ZGRcdTU5ZmFc''@;'; put 'put ''dTU5ZmRcdTU5ZmNcdTU5ZjZcdTU5ZTRcdTU5ZjJcdTU5ZjdcdTU5ZGJcdTU5ZTlcdTU5ZjNcdTU5ZjVcdTU5ZTBcdTU5ZmVcdTU5ZjRcdTU5ZWRcdTViYThcdTVjNGNcdTVjZDBcdTVjZDhcdTVjY2NcdTVjZDdcdTVjY2JcdTVjZGIiXSxbImNlYTEiLCJcdTVjZGVcdTVjZGFcdTVjYzlcdTVj''@;'; put 'put ''YzdcdTVjY2FcdTVjZDZcdTVjZDNcdTVjZDRcdTVjY2ZcdTVjYzhcdTVjYzZcdTVjY2VcdTVjZGZcdTVjZjhcdTVkZjlcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjBcdTVlMjRcdTVlYjBcdTVlYTRcdTVlYTJcdTVlOWJcdTVlYTNcdTVlYTVcdTVmMDdcdTVmMmVcdTVmNTZcdTVmODZcdTYwMzdc''@;'; put 'put ''dTYwMzlcdTYwNTRcdTYwNzJcdTYwNWVcdTYwNDVcdTYwNTNcdTYwNDdcdTYwNDlcdTYwNWJcdTYwNGNcdTYwNDBcdTYwNDJcdTYwNWZcdTYwMjRcdTYwNDRcdTYwNThcdTYwNjZcdTYwNmVcdTYyNDJcdTYyNDNcdTYyY2ZcdTYzMGRcdTYzMGJcdTYyZjVcdTYzMGVcdTYzMDNcdTYyZWJcdTYy''@;'; put 'put ''ZjlcdTYzMGZcdTYzMGNcdTYyZjhcdTYyZjZcdTYzMDBcdTYzMTNcdTYzMTRcdTYyZmFcdTYzMTVcdTYyZmJcdTYyZjBcdTY1NDFcdTY1NDNcdTY1YWFcdTY1YmZcdTY2MzZcdTY2MjFcdTY2MzJcdTY2MzVcdTY2MWNcdTY2MjZcdTY2MjJcdTY2MzNcdTY2MmJcdTY2M2FcdTY2MWRcdTY2MzRc''@;'; put 'put ''dTY2MzlcdTY2MmVcdTY3MGZcdTY3MTBcdTY3YzFcdTY3ZjJcdTY3YzhcdTY3YmEiXSxbImNmNDAiLCJcdTY3ZGNcdTY3YmJcdTY3ZjhcdTY3ZDhcdTY3YzBcdTY3YjdcdTY3YzVcdTY3ZWJcdTY3ZTRcdTY3ZGZcdTY3YjVcdTY3Y2RcdTY3YjNcdTY3ZjdcdTY3ZjZcdTY3ZWVcdTY3ZTNcdTY3''@;'; put 'put ''YzJcdTY3YjlcdTY3Y2VcdTY3ZTdcdTY3ZjBcdTY3YjJcdTY3ZmNcdTY3YzZcdTY3ZWRcdTY3Y2NcdTY3YWVcdTY3ZTZcdTY3ZGJcdTY3ZmFcdTY3YzlcdTY3Y2FcdTY3YzNcdTY3ZWFcdTY3Y2JcdTZiMjhcdTZiODJcdTZiODRcdTZiYjZcdTZiZDZcdTZiZDhcdTZiZTBcdTZjMjBcdTZjMjFc''@;'; put 'put ''dTZkMjhcdTZkMzRcdTZkMmRcdTZkMWZcdTZkM2NcdTZkM2ZcdTZkMTJcdTZkMGFcdTZjZGFcdTZkMzNcdTZkMDRcdTZkMTlcdTZkM2FcdTZkMWFcdTZkMTFcdTZkMDBcdTZkMWRcdTZkNDIiXSxbImNmYTEiLCJcdTZkMDFcdTZkMThcdTZkMzdcdTZkMDNcdTZkMGZcdTZkNDBcdTZkMDdcdTZk''@;'; put 'put ''MjBcdTZkMmNcdTZkMDhcdTZkMjJcdTZkMDlcdTZkMTBcdTcwYjdcdTcwOWZcdTcwYmVcdTcwYjFcdTcwYjBcdTcwYTFcdTcwYjRcdTcwYjVcdTcwYTlcdTcyNDFcdTcyNDlcdTcyNGFcdTcyNmNcdTcyNzBcdTcyNzNcdTcyNmVcdTcyY2FcdTcyZTRcdTcyZThcdTcyZWJcdTcyZGZcdTcyZWFc''@;'; put 'put ''dTcyZTZcdTcyZTNcdTczODVcdTczY2NcdTczYzJcdTczYzhcdTczYzVcdTczYjlcdTczYjZcdTczYjVcdTczYjRcdTczZWJcdTczYmZcdTczYzdcdTczYmVcdTczYzNcdTczYzZcdTczYjhcdTczY2JcdTc0ZWNcdTc0ZWVcdTc1MmVcdTc1NDdcdTc1NDhcdTc1YTdcdTc1YWFcdTc2NzlcdTc2''@;'; put 'put ''YzRcdTc3MDhcdTc3MDNcdTc3MDRcdTc3MDVcdTc3MGFcdTc2ZjdcdTc2ZmJcdTc2ZmFcdTc3ZTdcdTc3ZThcdTc4MDZcdTc4MTFcdTc4MTJcdTc4MDVcdTc4MTBcdTc4MGZcdTc4MGVcdTc4MDlcdTc4MDNcdTc4MTNcdTc5NGFcdTc5NGNcdTc5NGJcdTc5NDVcdTc5NDRcdTc5ZDVcdTc5Y2Rc''@;'; put 'put ''dTc5Y2ZcdTc5ZDZcdTc5Y2VcdTdhODAiXSxbImQwNDAiLCJcdTdhN2VcdTdhZDFcdTdiMDBcdTdiMDFcdTdjN2FcdTdjNzhcdTdjNzlcdTdjN2ZcdTdjODBcdTdjODFcdTdkMDNcdTdkMDhcdTdkMDFcdTdmNThcdTdmOTFcdTdmOGRcdTdmYmVcdTgwMDdcdTgwMGVcdTgwMGZcdTgwMTRcdTgw''@;'; put 'put ''MzdcdTgwZDhcdTgwYzdcdTgwZTBcdTgwZDFcdTgwYzhcdTgwYzJcdTgwZDBcdTgwYzVcdTgwZTNcdTgwZDlcdTgwZGNcdTgwY2FcdTgwZDVcdTgwYzlcdTgwY2ZcdTgwZDdcdTgwZTZcdTgwY2RcdTgxZmZcdTgyMjFcdTgyOTRcdTgyZDlcdTgyZmVcdTgyZjlcdTgzMDdcdTgyZThcdTgzMDBc''@;'; put 'put ''dTgyZDVcdTgzM2FcdTgyZWJcdTgyZDZcdTgyZjRcdTgyZWNcdTgyZTFcdTgyZjJcdTgyZjVcdTgzMGNcdTgyZmJcdTgyZjZcdTgyZjBcdTgyZWEiXSxbImQwYTEiLCJcdTgyZTRcdTgyZTBcdTgyZmFcdTgyZjNcdTgyZWRcdTg2NzdcdTg2NzRcdTg2N2NcdTg2NzNcdTg4NDFcdTg4NGVcdTg4''@;'; put 'put ''NjdcdTg4NmFcdTg4NjlcdTg5ZDNcdThhMDRcdThhMDdcdThkNzJcdThmZTNcdThmZTFcdThmZWVcdThmZTBcdTkwZjFcdTkwYmRcdTkwYmZcdTkwZDVcdTkwYzVcdTkwYmVcdTkwYzdcdTkwY2JcdTkwYzhcdTkxZDRcdTkxZDNcdTk2NTRcdTk2NGZcdTk2NTFcdTk2NTNcdTk2NGFcdTk2NGVc''@;'; put 'put ''dTUwMWVcdTUwMDVcdTUwMDdcdTUwMTNcdTUwMjJcdTUwMzBcdTUwMWJcdTRmZjVcdTRmZjRcdTUwMzNcdTUwMzdcdTUwMmNcdTRmZjZcdTRmZjdcdTUwMTdcdTUwMWNcdTUwMjBcdTUwMjdcdTUwMzVcdTUwMmZcdTUwMzFcdTUwMGVcdTUxNWFcdTUxOTRcdTUxOTNcdTUxY2FcdTUxYzRcdTUx''@;'; put 'put ''YzVcdTUxYzhcdTUxY2VcdTUyNjFcdTUyNWFcdTUyNTJcdTUyNWVcdTUyNWZcdTUyNTVcdTUyNjJcdTUyY2RcdTUzMGVcdTUzOWVcdTU1MjZcdTU0ZTJcdTU1MTdcdTU1MTJcdTU0ZTdcdTU0ZjNcdTU0ZTRcdTU1MWFcdTU0ZmZcdTU1MDRcdTU1MDhcdTU0ZWJcdTU1MTFcdTU1MDVcdTU0ZjEi''@;'; put 'put ''XSxbImQxNDAiLCJcdTU1MGFcdTU0ZmJcdTU0ZjdcdTU0ZjhcdTU0ZTBcdTU1MGVcdTU1MDNcdTU1MGJcdTU3MDFcdTU3MDJcdTU3Y2NcdTU4MzJcdTU3ZDVcdTU3ZDJcdTU3YmFcdTU3YzZcdTU3YmRcdTU3YmNcdTU3YjhcdTU3YjZcdTU3YmZcdTU3YzdcdTU3ZDBcdTU3YjlcdTU3YzFcdTU5''@;'; put 'put ''MGVcdTU5NGFcdTVhMTlcdTVhMTZcdTVhMmRcdTVhMmVcdTVhMTVcdTVhMGZcdTVhMTdcdTVhMGFcdTVhMWVcdTVhMzNcdTViNmNcdTViYTdcdTViYWRcdTViYWNcdTVjMDNcdTVjNTZcdTVjNTRcdTVjZWNcdTVjZmZcdTVjZWVcdTVjZjFcdTVjZjdcdTVkMDBcdTVjZjlcdTVlMjlcdTVlMjhc''@;'; put 'put ''dTVlYThcdTVlYWVcdTVlYWFcdTVlYWNcdTVmMzNcdTVmMzBcdTVmNjdcdTYwNWRcdTYwNWFcdTYwNjciXSxbImQxYTEiLCJcdTYwNDFcdTYwYTJcdTYwODhcdTYwODBcdTYwOTJcdTYwODFcdTYwOWRcdTYwODNcdTYwOTVcdTYwOWJcdTYwOTdcdTYwODdcdTYwOWNcdTYwOGVcdTYyMTlcdTYy''@;'; put 'put ''NDZcdTYyZjJcdTYzMTBcdTYzNTZcdTYzMmNcdTYzNDRcdTYzNDVcdTYzMzZcdTYzNDNcdTYzZTRcdTYzMzlcdTYzNGJcdTYzNGFcdTYzM2NcdTYzMjlcdTYzNDFcdTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYzMmRcdTYzNDdcdTYzMzNcdTYzNWFcdTYzNTFcdTYzMzhcdTYzNTdcdTYzNDBc''@;'; put 'put ''dTYzNDhcdTY1NGFcdTY1NDZcdTY1YzZcdTY1YzNcdTY1YzRcdTY1YzJcdTY2NGFcdTY2NWZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MWZcdTY4MWFcdTY4NDlcdTY4MzJcdTY4MzNcdTY4M2JcdTY4NGJcdTY4NGZcdTY4MTZcdTY4MzFcdTY4MWNcdTY4MzVcdTY4MmJcdTY4MmRcdTY4''@;'; put 'put ''MmZcdTY4NGVcdTY4NDRcdTY4MzRcdTY4MWRcdTY4MTJcdTY4MTRcdTY4MjZcdTY4MjhcdTY4MmVcdTY4NGRcdTY4M2FcdTY4MjVcdTY4MjBcdTZiMmNcdTZiMmZcdTZiMmRcdTZiMzFcdTZiMzRcdTZiNmRcdTgwODJcdTZiODhcdTZiZTZcdTZiZTQiXSxbImQyNDAiLCJcdTZiZThcdTZiZTNc''@;'; put 'put ''dTZiZTJcdTZiZTdcdTZjMjVcdTZkN2FcdTZkNjNcdTZkNjRcdTZkNzZcdTZkMGRcdTZkNjFcdTZkOTJcdTZkNThcdTZkNjJcdTZkNmRcdTZkNmZcdTZkOTFcdTZkOGRcdTZkZWZcdTZkN2ZcdTZkODZcdTZkNWVcdTZkNjdcdTZkNjBcdTZkOTdcdTZkNzBcdTZkN2NcdTZkNWZcdTZkODJcdTZk''@;'; put 'put ''OThcdTZkMmZcdTZkNjhcdTZkOGJcdTZkN2VcdTZkODBcdTZkODRcdTZkMTZcdTZkODNcdTZkN2JcdTZkN2RcdTZkNzVcdTZkOTBcdTcwZGNcdTcwZDNcdTcwZDFcdTcwZGRcdTcwY2JcdTdmMzlcdTcwZTJcdTcwZDdcdTcwZDJcdTcwZGVcdTcwZTBcdTcwZDRcdTcwY2RcdTcwYzVcdTcwYzZc''@;'; put 'put ''dTcwYzdcdTcwZGFcdTcwY2VcdTcwZTFcdTcyNDJcdTcyNzgiXSxbImQyYTEiLCJcdTcyNzdcdTcyNzZcdTczMDBcdTcyZmFcdTcyZjRcdTcyZmVcdTcyZjZcdTcyZjNcdTcyZmJcdTczMDFcdTczZDNcdTczZDlcdTczZTVcdTczZDZcdTczYmNcdTczZTdcdTczZTNcdTczZTlcdTczZGNcdTcz''@;'; put 'put ''ZDJcdTczZGJcdTczZDRcdTczZGRcdTczZGFcdTczZDdcdTczZDhcdTczZThcdTc0ZGVcdTc0ZGZcdTc0ZjRcdTc0ZjVcdTc1MjFcdTc1NWJcdTc1NWZcdTc1YjBcdTc1YzFcdTc1YmJcdTc1YzRcdTc1YzBcdTc1YmZcdTc1YjZcdTc1YmFcdTc2OGFcdTc2YzlcdTc3MWRcdTc3MWJcdTc3MTBc''@;'; put 'put ''dTc3MTNcdTc3MTJcdTc3MjNcdTc3MTFcdTc3MTVcdTc3MTlcdTc3MWFcdTc3MjJcdTc3MjdcdTc4MjNcdTc4MmNcdTc4MjJcdTc4MzVcdTc4MmZcdTc4MjhcdTc4MmVcdTc4MmJcdTc4MjFcdTc4MjlcdTc4MzNcdTc4MmFcdTc4MzFcdTc5NTRcdTc5NWJcdTc5NGZcdTc5NWNcdTc5NTNcdTc5''@;'; put 'put ''NTJcdTc5NTFcdTc5ZWJcdTc5ZWNcdTc5ZTBcdTc5ZWVcdTc5ZWRcdTc5ZWFcdTc5ZGNcdTc5ZGVcdTc5ZGRcdTdhODZcdTdhODlcdTdhODVcdTdhOGJcdTdhOGNcdTdhOGFcdTdhODdcdTdhZDhcdTdiMTAiXSxbImQzNDAiLCJcdTdiMDRcdTdiMTNcdTdiMDVcdTdiMGZcdTdiMDhcdTdiMGFc''@;'; put 'put ''dTdiMGVcdTdiMDlcdTdiMTJcdTdjODRcdTdjOTFcdTdjOGFcdTdjOGNcdTdjODhcdTdjOGRcdTdjODVcdTdkMWVcdTdkMWRcdTdkMTFcdTdkMGVcdTdkMThcdTdkMTZcdTdkMTNcdTdkMWZcdTdkMTJcdTdkMGZcdTdkMGNcdTdmNWNcdTdmNjFcdTdmNWVcdTdmNjBcdTdmNWRcdTdmNWJcdTdm''@;'; put 'put ''OTZcdTdmOTJcdTdmYzNcdTdmYzJcdTdmYzBcdTgwMTZcdTgwM2VcdTgwMzlcdTgwZmFcdTgwZjJcdTgwZjlcdTgwZjVcdTgxMDFcdTgwZmJcdTgxMDBcdTgyMDFcdTgyMmZcdTgyMjVcdTgzMzNcdTgzMmRcdTgzNDRcdTgzMTlcdTgzNTFcdTgzMjVcdTgzNTZcdTgzM2ZcdTgzNDFcdTgzMjZc''@;'; put 'put ''dTgzMWNcdTgzMjIiXSxbImQzYTEiLCJcdTgzNDJcdTgzNGVcdTgzMWJcdTgzMmFcdTgzMDhcdTgzM2NcdTgzNGRcdTgzMTZcdTgzMjRcdTgzMjBcdTgzMzdcdTgzMmZcdTgzMjlcdTgzNDdcdTgzNDVcdTgzNGNcdTgzNTNcdTgzMWVcdTgzMmNcdTgzNGJcdTgzMjdcdTgzNDhcdTg2NTNcdTg2''@;'; put 'put ''NTJcdTg2YTJcdTg2YThcdTg2OTZcdTg2OGRcdTg2OTFcdTg2OWVcdTg2ODdcdTg2OTdcdTg2ODZcdTg2OGJcdTg2OWFcdTg2ODVcdTg2YTVcdTg2OTlcdTg2YTFcdTg2YTdcdTg2OTVcdTg2OThcdTg2OGVcdTg2OWRcdTg2OTBcdTg2OTRcdTg4NDNcdTg4NDRcdTg4NmRcdTg4NzVcdTg4NzZc''@;'; put 'put ''dTg4NzJcdTg4ODBcdTg4NzFcdTg4N2ZcdTg4NmZcdTg4ODNcdTg4N2VcdTg4NzRcdTg4N2NcdThhMTJcdThjNDdcdThjNTdcdThjN2JcdThjYTRcdThjYTNcdThkNzZcdThkNzhcdThkYjVcdThkYjdcdThkYjZcdThlZDFcdThlZDNcdThmZmVcdThmZjVcdTkwMDJcdThmZmZcdThmZmJcdTkw''@;'; put 'put ''MDRcdThmZmNcdThmZjZcdTkwZDZcdTkwZTBcdTkwZDlcdTkwZGFcdTkwZTNcdTkwZGZcdTkwZTVcdTkwZDhcdTkwZGJcdTkwZDdcdTkwZGNcdTkwZTRcdTkxNTAiXSxbImQ0NDAiLCJcdTkxNGVcdTkxNGZcdTkxZDVcdTkxZTJcdTkxZGFcdTk2NWNcdTk2NWZcdTk2YmNcdTk4ZTNcdTlhZGZc''@;'; put 'put ''dTliMmZcdTRlN2ZcdTUwNzBcdTUwNmFcdTUwNjFcdTUwNWVcdTUwNjBcdTUwNTNcdTUwNGJcdTUwNWRcdTUwNzJcdTUwNDhcdTUwNGRcdTUwNDFcdTUwNWJcdTUwNGFcdTUwNjJcdTUwMTVcdTUwNDVcdTUwNWZcdTUwNjlcdTUwNmJcdTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNmVcdTUw''@;'; put 'put ''NzNcdTUwNTdcdTUwNTFcdTUxZDBcdTUyNmJcdTUyNmRcdTUyNmNcdTUyNmVcdTUyZDZcdTUyZDNcdTUzMmRcdTUzOWNcdTU1NzVcdTU1NzZcdTU1M2NcdTU1NGRcdTU1NTBcdTU1MzRcdTU1MmFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1MzVcdTU1MzBcdTU1NTJcdTU1NDUiXSxbImQ0YTEiLCJc''@;'; put 'put ''dTU1MGNcdTU1MzJcdTU1NjVcdTU1NGVcdTU1MzlcdTU1NDhcdTU1MmRcdTU1M2JcdTU1NDBcdTU1NGJcdTU3MGFcdTU3MDdcdTU3ZmJcdTU4MTRcdTU3ZTJcdTU3ZjZcdTU3ZGNcdTU3ZjRcdTU4MDBcdTU3ZWRcdTU3ZmRcdTU4MDhcdTU3ZjhcdTU4MGJcdTU3ZjNcdTU3Y2ZcdTU4MDdcdTU3''@;'; put 'put ''ZWVcdTU3ZTNcdTU3ZjJcdTU3ZTVcdTU3ZWNcdTU3ZTFcdTU4MGVcdTU3ZmNcdTU4MTBcdTU3ZTdcdTU4MDFcdTU4MGNcdTU3ZjFcdTU3ZTlcdTU3ZjBcdTU4MGRcdTU4MDRcdTU5NWNcdTVhNjBcdTVhNThcdTVhNTVcdTVhNjdcdTVhNWVcdTVhMzhcdTVhMzVcdTVhNmRcdTVhNTBcdTVhNWZc''@;'; put 'put ''dTVhNjVcdTVhNmNcdTVhNTNcdTVhNjRcdTVhNTdcdTVhNDNcdTVhNWRcdTVhNTJcdTVhNDRcdTVhNWJcdTVhNDhcdTVhOGVcdTVhM2VcdTVhNGRcdTVhMzlcdTVhNGNcdTVhNzBcdTVhNjlcdTVhNDdcdTVhNTFcdTVhNTZcdTVhNDJcdTVhNWNcdTViNzJcdTViNmVcdTViYzFcdTViYzBcdTVj''@;'; put 'put ''NTlcdTVkMWVcdTVkMGJcdTVkMWRcdTVkMWFcdTVkMjBcdTVkMGNcdTVkMjhcdTVkMGRcdTVkMjZcdTVkMjVcdTVkMGYiXSxbImQ1NDAiLCJcdTVkMzBcdTVkMTJcdTVkMjNcdTVkMWZcdTVkMmVcdTVlM2VcdTVlMzRcdTVlYjFcdTVlYjRcdTVlYjlcdTVlYjJcdTVlYjNcdTVmMzZcdTVmMzhc''@;'; put 'put ''dTVmOWJcdTVmOTZcdTVmOWZcdTYwOGFcdTYwOTBcdTYwODZcdTYwYmVcdTYwYjBcdTYwYmFcdTYwZDNcdTYwZDRcdTYwY2ZcdTYwZTRcdTYwZDlcdTYwZGRcdTYwYzhcdTYwYjFcdTYwZGJcdTYwYjdcdTYwY2FcdTYwYmZcdTYwYzNcdTYwY2RcdTYwYzBcdTYzMzJcdTYzNjVcdTYzOGFcdTYz''@;'; put 'put ''ODJcdTYzN2RcdTYzYmRcdTYzOWVcdTYzYWRcdTYzOWRcdTYzOTdcdTYzYWJcdTYzOGVcdTYzNmZcdTYzODdcdTYzOTBcdTYzNmVcdTYzYWZcdTYzNzVcdTYzOWNcdTYzNmRcdTYzYWVcdTYzN2NcdTYzYTRcdTYzM2JcdTYzOWYiXSxbImQ1YTEiLCJcdTYzNzhcdTYzODVcdTYzODFcdTYzOTFc''@;'; put 'put ''dTYzOGRcdTYzNzBcdTY1NTNcdTY1Y2RcdTY2NjVcdTY2NjFcdTY2NWJcdTY2NTlcdTY2NWNcdTY2NjJcdTY3MThcdTY4NzlcdTY4ODdcdTY4OTBcdTY4OWNcdTY4NmRcdTY4NmVcdTY4YWVcdTY4YWJcdTY5NTZcdTY4NmZcdTY4YTNcdTY4YWNcdTY4YTlcdTY4NzVcdTY4NzRcdTY4YjJcdTY4''@;'; put 'put ''OGZcdTY4NzdcdTY4OTJcdTY4N2NcdTY4NmJcdTY4NzJcdTY4YWFcdTY4ODBcdTY4NzFcdTY4N2VcdTY4OWJcdTY4OTZcdTY4OGJcdTY4YTBcdTY4ODlcdTY4YTRcdTY4NzhcdTY4N2JcdTY4OTFcdTY4OGNcdTY4OGFcdTY4N2RcdTZiMzZcdTZiMzNcdTZiMzdcdTZiMzhcdTZiOTFcdTZiOGZc''@;'; put 'put ''dTZiOGRcdTZiOGVcdTZiOGNcdTZjMmFcdTZkYzBcdTZkYWJcdTZkYjRcdTZkYjNcdTZlNzRcdTZkYWNcdTZkZTlcdTZkZTJcdTZkYjdcdTZkZjZcdTZkZDRcdTZlMDBcdTZkYzhcdTZkZTBcdTZkZGZcdTZkZDZcdTZkYmVcdTZkZTVcdTZkZGNcdTZkZGRcdTZkZGJcdTZkZjRcdTZkY2FcdTZk''@;'; put 'put ''YmRcdTZkZWRcdTZkZjBcdTZkYmFcdTZkZDVcdTZkYzJcdTZkY2ZcdTZkYzkiXSxbImQ2NDAiLCJcdTZkZDBcdTZkZjJcdTZkZDNcdTZkZmRcdTZkZDdcdTZkY2RcdTZkZTNcdTZkYmJcdTcwZmFcdTcxMGRcdTcwZjdcdTcxMTdcdTcwZjRcdTcxMGNcdTcwZjBcdTcxMDRcdTcwZjNcdTcxMTBc''@;'; put 'put ''dTcwZmNcdTcwZmZcdTcxMDZcdTcxMTNcdTcxMDBcdTcwZjhcdTcwZjZcdTcxMGJcdTcxMDJcdTcxMGVcdTcyN2VcdTcyN2JcdTcyN2NcdTcyN2ZcdTczMWRcdTczMTdcdTczMDdcdTczMTFcdTczMThcdTczMGFcdTczMDhcdTcyZmZcdTczMGZcdTczMWVcdTczODhcdTczZjZcdTczZjhcdTcz''@;'; put 'put ''ZjVcdTc0MDRcdTc0MDFcdTczZmRcdTc0MDdcdTc0MDBcdTczZmFcdTczZmNcdTczZmZcdTc0MGNcdTc0MGJcdTczZjRcdTc0MDhcdTc1NjRcdTc1NjNcdTc1Y2VcdTc1ZDJcdTc1Y2YiXSxbImQ2YTEiLCJcdTc1Y2JcdTc1Y2NcdTc1ZDFcdTc1ZDBcdTc2OGZcdTc2ODlcdTc2ZDNcdTc3Mzlc''@;'; put 'put ''dTc3MmZcdTc3MmRcdTc3MzFcdTc3MzJcdTc3MzRcdTc3MzNcdTc3M2RcdTc3MjVcdTc3M2JcdTc3MzVcdTc4NDhcdTc4NTJcdTc4NDlcdTc4NGRcdTc4NGFcdTc4NGNcdTc4MjZcdTc4NDVcdTc4NTBcdTc5NjRcdTc5NjdcdTc5NjlcdTc5NmFcdTc5NjNcdTc5NmJcdTc5NjFcdTc5YmJcdTc5''@;'; put 'put ''ZmFcdTc5ZjhcdTc5ZjZcdTc5ZjdcdTdhOGZcdTdhOTRcdTdhOTBcdTdiMzVcdTdiNDdcdTdiMzRcdTdiMjVcdTdiMzBcdTdiMjJcdTdiMjRcdTdiMzNcdTdiMThcdTdiMmFcdTdiMWRcdTdiMzFcdTdiMmJcdTdiMmRcdTdiMmZcdTdiMzJcdTdiMzhcdTdiMWFcdTdiMjNcdTdjOTRcdTdjOThc''@;'; put 'put ''dTdjOTZcdTdjYTNcdTdkMzVcdTdkM2RcdTdkMzhcdTdkMzZcdTdkM2FcdTdkNDVcdTdkMmNcdTdkMjlcdTdkNDFcdTdkNDdcdTdkM2VcdTdkM2ZcdTdkNGFcdTdkM2JcdTdkMjhcdTdmNjNcdTdmOTVcdTdmOWNcdTdmOWRcdTdmOWJcdTdmY2FcdTdmY2JcdTdmY2RcdTdmZDBcdTdmZDFcdTdm''@;'; put 'put ''YzdcdTdmY2ZcdTdmYzlcdTgwMWYiXSxbImQ3NDAiLCJcdTgwMWVcdTgwMWJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThcdTgxMjVcdTgxMTlcdTgxMWJcdTgxMmRcdTgxMWZcdTgxMmNcdTgxMWVcdTgxMjFcdTgxMTVcdTgxMjdcdTgxMWRcdTgxMjJcdTgyMTFcdTgyMzhcdTgyMzNcdTgyM2Fc''@;'; put 'put ''dTgyMzRcdTgyMzJcdTgyNzRcdTgzOTBcdTgzYTNcdTgzYThcdTgzOGRcdTgzN2FcdTgzNzNcdTgzYTRcdTgzNzRcdTgzOGZcdTgzODFcdTgzOTVcdTgzOTlcdTgzNzVcdTgzOTRcdTgzYTlcdTgzN2RcdTgzODNcdTgzOGNcdTgzOWRcdTgzOWJcdTgzYWFcdTgzOGJcdTgzN2VcdTgzYTVcdTgz''@;'; put 'put ''YWZcdTgzODhcdTgzOTdcdTgzYjBcdTgzN2ZcdTgzYTZcdTgzODdcdTgzYWVcdTgzNzZcdTgzOWFcdTg2NTlcdTg2NTZcdTg2YmZcdTg2YjciXSxbImQ3YTEiLCJcdTg2YzJcdTg2YzFcdTg2YzVcdTg2YmFcdTg2YjBcdTg2YzhcdTg2YjlcdTg2YjNcdTg2YjhcdTg2Y2NcdTg2YjRcdTg2YmJc''@;'; put 'put ''dTg2YmNcdTg2YzNcdTg2YmRcdTg2YmVcdTg4NTJcdTg4ODlcdTg4OTVcdTg4YThcdTg4YTJcdTg4YWFcdTg4OWFcdTg4OTFcdTg4YTFcdTg4OWZcdTg4OThcdTg4YTdcdTg4OTlcdTg4OWJcdTg4OTdcdTg4YTRcdTg4YWNcdTg4OGNcdTg4OTNcdTg4OGVcdTg5ODJcdTg5ZDZcdTg5ZDlcdTg5''@;'; put 'put ''ZDVcdThhMzBcdThhMjdcdThhMmNcdThhMWVcdThjMzlcdThjM2JcdThjNWNcdThjNWRcdThjN2RcdThjYTVcdThkN2RcdThkN2JcdThkNzlcdThkYmNcdThkYzJcdThkYjlcdThkYmZcdThkYzFcdThlZDhcdThlZGVcdThlZGRcdThlZGNcdThlZDdcdThlZTBcdThlZTFcdTkwMjRcdTkwMGJc''@;'; put 'put ''dTkwMTFcdTkwMWNcdTkwMGNcdTkwMjFcdTkwZWZcdTkwZWFcdTkwZjBcdTkwZjRcdTkwZjJcdTkwZjNcdTkwZDRcdTkwZWJcdTkwZWNcdTkwZTlcdTkxNTZcdTkxNThcdTkxNWFcdTkxNTNcdTkxNTVcdTkxZWNcdTkxZjRcdTkxZjFcdTkxZjNcdTkxZjhcdTkxZTRcdTkxZjlcdTkxZWEiXSxb''@;'; put 'put ''ImQ4NDAiLCJcdTkxZWJcdTkxZjdcdTkxZThcdTkxZWVcdTk1N2FcdTk1ODZcdTk1ODhcdTk2N2NcdTk2NmRcdTk2NmJcdTk2NzFcdTk2NmZcdTk2YmZcdTk3NmFcdTk4MDRcdTk4ZTVcdTk5OTdcdTUwOWJcdTUwOTVcdTUwOTRcdTUwOWVcdTUwOGJcdTUwYTNcdTUwODNcdTUwOGNcdTUwOGVc''@;'; put 'put ''dTUwOWRcdTUwNjhcdTUwOWNcdTUwOTJcdTUwODJcdTUwODdcdTUxNWZcdTUxZDRcdTUzMTJcdTUzMTFcdTUzYTRcdTUzYTdcdTU1OTFcdTU1YThcdTU1YTVcdTU1YWRcdTU1NzdcdTU2NDVcdTU1YTJcdTU1OTNcdTU1ODhcdTU1OGZcdTU1YjVcdTU1ODFcdTU1YTNcdTU1OTJcdTU1YTRcdTU1''@;'; put 'put ''N2RcdTU1OGNcdTU1YTZcdTU1N2ZcdTU1OTVcdTU1YTFcdTU1OGVcdTU3MGNcdTU4MjlcdTU4MzciXSxbImQ4YTEiLCJcdTU4MTlcdTU4MWVcdTU4MjdcdTU4MjNcdTU4MjhcdTU3ZjVcdTU4NDhcdTU4MjVcdTU4MWNcdTU4MWJcdTU4MzNcdTU4M2ZcdTU4MzZcdTU4MmVcdTU4MzlcdTU4Mzhc''@;'; put 'put ''dTU4MmRcdTU4MmNcdTU4M2JcdTU5NjFcdTVhYWZcdTVhOTRcdTVhOWZcdTVhN2FcdTVhYTJcdTVhOWVcdTVhNzhcdTVhYTZcdTVhN2NcdTVhYTVcdTVhYWNcdTVhOTVcdTVhYWVcdTVhMzdcdTVhODRcdTVhOGFcdTVhOTdcdTVhODNcdTVhOGJcdTVhYTlcdTVhN2JcdTVhN2RcdTVhOGNcdTVh''@;'; put 'put ''OWNcdTVhOGZcdTVhOTNcdTVhOWRcdTViZWFcdTViY2RcdTViY2JcdTViZDRcdTViZDFcdTViY2FcdTViY2VcdTVjMGNcdTVjMzBcdTVkMzdcdTVkNDNcdTVkNmJcdTVkNDFcdTVkNGJcdTVkM2ZcdTVkMzVcdTVkNTFcdTVkNGVcdTVkNTVcdTVkMzNcdTVkM2FcdTVkNTJcdTVkM2RcdTVkMzFc''@;'; put 'put ''dTVkNTlcdTVkNDJcdTVkMzlcdTVkNDlcdTVkMzhcdTVkM2NcdTVkMzJcdTVkMzZcdTVkNDBcdTVkNDVcdTVlNDRcdTVlNDFcdTVmNThcdTVmYTZcdTVmYTVcdTVmYWJcdTYwYzlcdTYwYjlcdTYwY2NcdTYwZTJcdTYwY2VcdTYwYzRcdTYxMTQiXSxbImQ5NDAiLCJcdTYwZjJcdTYxMGFcdTYx''@;'; put 'put ''MTZcdTYxMDVcdTYwZjVcdTYxMTNcdTYwZjhcdTYwZmNcdTYwZmVcdTYwYzFcdTYxMDNcdTYxMThcdTYxMWRcdTYxMTBcdTYwZmZcdTYxMDRcdTYxMGJcdTYyNGFcdTYzOTRcdTYzYjFcdTYzYjBcdTYzY2VcdTYzZTVcdTYzZThcdTYzZWZcdTYzYzNcdTY0OWRcdTYzZjNcdTYzY2FcdTYzZTBc''@;'; put 'put ''dTYzZjZcdTYzZDVcdTYzZjJcdTYzZjVcdTY0NjFcdTYzZGZcdTYzYmVcdTYzZGRcdTYzZGNcdTYzYzRcdTYzZDhcdTYzZDNcdTYzYzJcdTYzYzdcdTYzY2NcdTYzY2JcdTYzYzhcdTYzZjBcdTYzZDdcdTYzZDlcdTY1MzJcdTY1NjdcdTY1NmFcdTY1NjRcdTY1NWNcdTY1NjhcdTY1NjVcdTY1''@;'; put 'put ''OGNcdTY1OWRcdTY1OWVcdTY1YWVcdTY1ZDBcdTY1ZDIiXSxbImQ5YTEiLCJcdTY2N2NcdTY2NmNcdTY2N2JcdTY2ODBcdTY2NzFcdTY2NzlcdTY2NmFcdTY2NzJcdTY3MDFcdTY5MGNcdTY4ZDNcdTY5MDRcdTY4ZGNcdTY5MmFcdTY4ZWNcdTY4ZWFcdTY4ZjFcdTY5MGZcdTY4ZDZcdTY4Zjdc''@;'; put 'put ''dTY4ZWJcdTY4ZTRcdTY4ZjZcdTY5MTNcdTY5MTBcdTY4ZjNcdTY4ZTFcdTY5MDdcdTY4Y2NcdTY5MDhcdTY5NzBcdTY4YjRcdTY5MTFcdTY4ZWZcdTY4YzZcdTY5MTRcdTY4ZjhcdTY4ZDBcdTY4ZmRcdTY4ZmNcdTY4ZThcdTY5MGJcdTY5MGFcdTY5MTdcdTY4Y2VcdTY4YzhcdTY4ZGRcdTY4''@;'; put 'put ''ZGVcdTY4ZTZcdTY4ZjRcdTY4ZDFcdTY5MDZcdTY4ZDRcdTY4ZTlcdTY5MTVcdTY5MjVcdTY4YzdcdTZiMzlcdTZiM2JcdTZiM2ZcdTZiM2NcdTZiOTRcdTZiOTdcdTZiOTlcdTZiOTVcdTZiYmRcdTZiZjBcdTZiZjJcdTZiZjNcdTZjMzBcdTZkZmNcdTZlNDZcdTZlNDdcdTZlMWZcdTZlNDlc''@;'; put 'put ''dTZlODhcdTZlM2NcdTZlM2RcdTZlNDVcdTZlNjJcdTZlMmJcdTZlM2ZcdTZlNDFcdTZlNWRcdTZlNzNcdTZlMWNcdTZlMzNcdTZlNGJcdTZlNDBcdTZlNTFcdTZlM2JcdTZlMDNcdTZlMmVcdTZlNWUiXSxbImRhNDAiLCJcdTZlNjhcdTZlNWNcdTZlNjFcdTZlMzFcdTZlMjhcdTZlNjBcdTZl''@;'; put 'put ''NzFcdTZlNmJcdTZlMzlcdTZlMjJcdTZlMzBcdTZlNTNcdTZlNjVcdTZlMjdcdTZlNzhcdTZlNjRcdTZlNzdcdTZlNTVcdTZlNzlcdTZlNTJcdTZlNjZcdTZlMzVcdTZlMzZcdTZlNWFcdTcxMjBcdTcxMWVcdTcxMmZcdTcwZmJcdTcxMmVcdTcxMzFcdTcxMjNcdTcxMjVcdTcxMjJcdTcxMzJc''@;'; put 'put ''dTcxMWZcdTcxMjhcdTcxM2FcdTcxMWJcdTcyNGJcdTcyNWFcdTcyODhcdTcyODlcdTcyODZcdTcyODVcdTcyOGJcdTczMTJcdTczMGJcdTczMzBcdTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMmRcdTczMjZcdTczMjNcdTczMzVcdTczMGNcdTc0MmVcdTc0MmNcdTc0MzBcdTc0''@;'; put 'put ''MmJcdTc0MTYiXSxbImRhYTEiLCJcdTc0MWFcdTc0MjFcdTc0MmRcdTc0MzFcdTc0MjRcdTc0MjNcdTc0MWRcdTc0MjlcdTc0MjBcdTc0MzJcdTc0ZmJcdTc1MmZcdTc1NmZcdTc1NmNcdTc1ZTdcdTc1ZGFcdTc1ZTFcdTc1ZTZcdTc1ZGRcdTc1ZGZcdTc1ZTRcdTc1ZDdcdTc2OTVcdTc2OTJc''@;'; put 'put ''dTc2ZGFcdTc3NDZcdTc3NDdcdTc3NDRcdTc3NGRcdTc3NDVcdTc3NGFcdTc3NGVcdTc3NGJcdTc3NGNcdTc3ZGVcdTc3ZWNcdTc4NjBcdTc4NjRcdTc4NjVcdTc4NWNcdTc4NmRcdTc4NzFcdTc4NmFcdTc4NmVcdTc4NzBcdTc4NjlcdTc4NjhcdTc4NWVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5''@;'; put 'put ''NzJcdTc5NzBcdTdhMDJcdTdhMGFcdTdhMDNcdTdhMGNcdTdhMDRcdTdhOTlcdTdhZTZcdTdhZTRcdTdiNGFcdTdiM2JcdTdiNDRcdTdiNDhcdTdiNGNcdTdiNGVcdTdiNDBcdTdiNThcdTdiNDVcdTdjYTJcdTdjOWVcdTdjYThcdTdjYTFcdTdkNThcdTdkNmZcdTdkNjNcdTdkNTNcdTdkNTZc''@;'; put 'put ''dTdkNjdcdTdkNmFcdTdkNGZcdTdkNmRcdTdkNWNcdTdkNmJcdTdkNTJcdTdkNTRcdTdkNjlcdTdkNTFcdTdkNWZcdTdkNGVcdTdmM2VcdTdmM2ZcdTdmNjUiXSxbImRiNDAiLCJcdTdmNjZcdTdmYTJcdTdmYTBcdTdmYTFcdTdmZDdcdTgwNTFcdTgwNGZcdTgwNTBcdTgwZmVcdTgwZDRcdTgx''@;'; put 'put ''NDNcdTgxNGFcdTgxNTJcdTgxNGZcdTgxNDdcdTgxM2RcdTgxNGRcdTgxM2FcdTgxZTZcdTgxZWVcdTgxZjdcdTgxZjhcdTgxZjlcdTgyMDRcdTgyM2NcdTgyM2RcdTgyM2ZcdTgyNzVcdTgzM2JcdTgzY2ZcdTgzZjlcdTg0MjNcdTgzYzBcdTgzZThcdTg0MTJcdTgzZTdcdTgzZTRcdTgzZmNc''@;'; put 'put ''dTgzZjZcdTg0MTBcdTgzYzZcdTgzYzhcdTgzZWJcdTgzZTNcdTgzYmZcdTg0MDFcdTgzZGRcdTgzZTVcdTgzZDhcdTgzZmZcdTgzZTFcdTgzY2JcdTgzY2VcdTgzZDZcdTgzZjVcdTgzYzlcdTg0MDlcdTg0MGZcdTgzZGVcdTg0MTFcdTg0MDZcdTgzYzJcdTgzZjMiXSxbImRiYTEiLCJcdTgz''@;'; put 'put ''ZDVcdTgzZmFcdTgzYzdcdTgzZDFcdTgzZWFcdTg0MTNcdTgzYzNcdTgzZWNcdTgzZWVcdTgzYzRcdTgzZmJcdTgzZDdcdTgzZTJcdTg0MWJcdTgzZGJcdTgzZmVcdTg2ZDhcdTg2ZTJcdTg2ZTZcdTg2ZDNcdTg2ZTNcdTg2ZGFcdTg2ZWFcdTg2ZGRcdTg2ZWJcdTg2ZGNcdTg2ZWNcdTg2ZTlc''@;'; put 'put ''dTg2ZDdcdTg2ZThcdTg2ZDFcdTg4NDhcdTg4NTZcdTg4NTVcdTg4YmFcdTg4ZDdcdTg4YjlcdTg4YjhcdTg4YzBcdTg4YmVcdTg4YjZcdTg4YmNcdTg4YjdcdTg4YmRcdTg4YjJcdTg5MDFcdTg4YzlcdTg5OTVcdTg5OThcdTg5OTdcdTg5ZGRcdTg5ZGFcdTg5ZGJcdThhNGVcdThhNGRcdThh''@;'; put 'put ''MzlcdThhNTlcdThhNDBcdThhNTdcdThhNThcdThhNDRcdThhNDVcdThhNTJcdThhNDhcdThhNTFcdThhNGFcdThhNGNcdThhNGZcdThjNWZcdThjODFcdThjODBcdThjYmFcdThjYmVcdThjYjBcdThjYjlcdThjYjVcdThkODRcdThkODBcdThkODlcdThkZDhcdThkZDNcdThkY2RcdThkYzdc''@;'; put 'put ''dThkZDZcdThkZGNcdThkY2ZcdThkZDVcdThkZDlcdThkYzhcdThkZDdcdThkYzVcdThlZWZcdThlZjdcdThlZmEiXSxbImRjNDAiLCJcdThlZjlcdThlZTZcdThlZWVcdThlZTVcdThlZjVcdThlZTdcdThlZThcdThlZjZcdThlZWJcdThlZjFcdThlZWNcdThlZjRcdThlZTlcdTkwMmRcdTkw''@;'; put 'put ''MzRcdTkwMmZcdTkxMDZcdTkxMmNcdTkxMDRcdTkwZmZcdTkwZmNcdTkxMDhcdTkwZjlcdTkwZmJcdTkxMDFcdTkxMDBcdTkxMDdcdTkxMDVcdTkxMDNcdTkxNjFcdTkxNjRcdTkxNWZcdTkxNjJcdTkxNjBcdTkyMDFcdTkyMGFcdTkyMjVcdTkyMDNcdTkyMWFcdTkyMjZcdTkyMGZcdTkyMGNc''@;'; put 'put ''dTkyMDBcdTkyMTJcdTkxZmZcdTkxZmRcdTkyMDZcdTkyMDRcdTkyMjdcdTkyMDJcdTkyMWNcdTkyMjRcdTkyMTlcdTkyMTdcdTkyMDVcdTkyMTZcdTk1N2JcdTk1OGRcdTk1OGNcdTk1OTBcdTk2ODdcdTk2N2VcdTk2ODgiXSxbImRjYTEiLCJcdTk2ODlcdTk2ODNcdTk2ODBcdTk2YzJcdTk2''@;'; put 'put ''YzhcdTk2YzNcdTk2ZjFcdTk2ZjBcdTk3NmNcdTk3NzBcdTk3NmVcdTk4MDdcdTk4YTlcdTk4ZWJcdTljZTZcdTllZjlcdTRlODNcdTRlODRcdTRlYjZcdTUwYmRcdTUwYmZcdTUwYzZcdTUwYWVcdTUwYzRcdTUwY2FcdTUwYjRcdTUwYzhcdTUwYzJcdTUwYjBcdTUwYzFcdTUwYmFcdTUwYjFc''@;'; put 'put ''dTUwY2JcdTUwYzlcdTUwYjZcdTUwYjhcdTUxZDdcdTUyN2FcdTUyNzhcdTUyN2JcdTUyN2NcdTU1YzNcdTU1ZGJcdTU1Y2NcdTU1ZDBcdTU1Y2JcdTU1Y2FcdTU1ZGRcdTU1YzBcdTU1ZDRcdTU1YzRcdTU1ZTlcdTU1YmZcdTU1ZDJcdTU1OGRcdTU1Y2ZcdTU1ZDVcdTU1ZTJcdTU1ZDZcdTU1''@;'; put 'put ''YzhcdTU1ZjJcdTU1Y2RcdTU1ZDlcdTU1YzJcdTU3MTRcdTU4NTNcdTU4NjhcdTU4NjRcdTU4NGZcdTU4NGRcdTU4NDlcdTU4NmZcdTU4NTVcdTU4NGVcdTU4NWRcdTU4NTlcdTU4NjVcdTU4NWJcdTU4M2RcdTU4NjNcdTU4NzFcdTU4ZmNcdTVhYzdcdTVhYzRcdTVhY2JcdTVhYmFcdTVhYjhc''@;'; put 'put ''dTVhYjFcdTVhYjVcdTVhYjBcdTVhYmZcdTVhYzhcdTVhYmJcdTVhYzYiXSxbImRkNDAiLCJcdTVhYjdcdTVhYzBcdTVhY2FcdTVhYjRcdTVhYjZcdTVhY2RcdTVhYjlcdTVhOTBcdTViZDZcdTViZDhcdTViZDlcdTVjMWZcdTVjMzNcdTVkNzFcdTVkNjNcdTVkNGFcdTVkNjVcdTVkNzJcdTVk''@;'; put 'put ''NmNcdTVkNWVcdTVkNjhcdTVkNjdcdTVkNjJcdTVkZjBcdTVlNGZcdTVlNGVcdTVlNGFcdTVlNGRcdTVlNGJcdTVlYzVcdTVlY2NcdTVlYzZcdTVlY2JcdTVlYzdcdTVmNDBcdTVmYWZcdTVmYWRcdTYwZjdcdTYxNDlcdTYxNGFcdTYxMmJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMmVcdTYxNDZc''@;'; put 'put ''dTYxMmZcdTYxNGZcdTYxMjlcdTYxNDBcdTYyMjBcdTkxNjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYzYzVcdTYzZjFcdTYzZWJcdTY0MTBcdTY0MTJcdTY0MDlcdTY0MjBcdTY0MjQiXSxbImRkYTEiLCJcdTY0MzNcdTY0NDNcdTY0MWZcdTY0MTVcdTY0MThcdTY0MzlcdTY0MzdcdTY0MjJcdTY0''@;'; put 'put ''MjNcdTY0MGNcdTY0MjZcdTY0MzBcdTY0MjhcdTY0NDFcdTY0MzVcdTY0MmZcdTY0MGFcdTY0MWFcdTY0NDBcdTY0MjVcdTY0MjdcdTY0MGJcdTYzZTdcdTY0MWJcdTY0MmVcdTY0MjFcdTY0MGVcdTY1NmZcdTY1OTJcdTY1ZDNcdTY2ODZcdTY2OGNcdTY2OTVcdTY2OTBcdTY2OGJcdTY2OGFc''@;'; put 'put ''dTY2OTlcdTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZcdTY5NWZcdTY5MzhcdTY5NGVcdTY5NjJcdTY5NzFcdTY5M2ZcdTY5NDVcdTY5NmFcdTY5MzlcdTY5NDJcdTY5NTdcdTY5NTlcdTY5N2FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NmNcdTY5MzNcdTY5M2RcdTY5NjVcdTY4ZjBcdTY5NzhcdTY5''@;'; put 'put ''MzRcdTY5NjlcdTY5NDBcdTY5NmZcdTY5NDRcdTY5NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NGNcdTY5M2JcdTY5NGJcdTY5MzdcdTY5NWNcdTY5NGZcdTY5NTFcdTY5MzJcdTY5NTJcdTY5MmZcdTY5N2JcdTY5M2NcdTZiNDZcdTZiNDVcdTZiNDNcdTZiNDJcdTZiNDhcdTZiNDFcdTZiOWJc''@;'; put 'put ''dWZhMGRcdTZiZmJcdTZiZmMiXSxbImRlNDAiLCJcdTZiZjlcdTZiZjdcdTZiZjhcdTZlOWJcdTZlZDZcdTZlYzhcdTZlOGZcdTZlYzBcdTZlOWZcdTZlOTNcdTZlOTRcdTZlYTBcdTZlYjFcdTZlYjlcdTZlYzZcdTZlZDJcdTZlYmRcdTZlYzFcdTZlOWVcdTZlYzlcdTZlYjdcdTZlYjBcdTZl''@;'; put 'put ''Y2RcdTZlYTZcdTZlY2ZcdTZlYjJcdTZlYmVcdTZlYzNcdTZlZGNcdTZlZDhcdTZlOTlcdTZlOTJcdTZlOGVcdTZlOGRcdTZlYTRcdTZlYTFcdTZlYmZcdTZlYjNcdTZlZDBcdTZlY2FcdTZlOTdcdTZlYWVcdTZlYTNcdTcxNDdcdTcxNTRcdTcxNTJcdTcxNjNcdTcxNjBcdTcxNDFcdTcxNWRc''@;'; put 'put ''dTcxNjJcdTcxNzJcdTcxNzhcdTcxNmFcdTcxNjFcdTcxNDJcdTcxNThcdTcxNDNcdTcxNGJcdTcxNzBcdTcxNWZcdTcxNTBcdTcxNTMiXSxbImRlYTEiLCJcdTcxNDRcdTcxNGRcdTcxNWFcdTcyNGZcdTcyOGRcdTcyOGNcdTcyOTFcdTcyOTBcdTcyOGVcdTczM2NcdTczNDJcdTczM2JcdTcz''@;'; put 'put ''M2FcdTczNDBcdTczNGFcdTczNDlcdTc0NDRcdTc0NGFcdTc0NGJcdTc0NTJcdTc0NTFcdTc0NTdcdTc0NDBcdTc0NGZcdTc0NTBcdTc0NGVcdTc0NDJcdTc0NDZcdTc0NGRcdTc0NTRcdTc0ZTFcdTc0ZmZcdTc0ZmVcdTc0ZmRcdTc1MWRcdTc1NzlcdTc1NzdcdTY5ODNcdTc1ZWZcdTc2MGZc''@;'; put 'put ''dTc2MDNcdTc1ZjdcdTc1ZmVcdTc1ZmNcdTc1ZjlcdTc1ZjhcdTc2MTBcdTc1ZmJcdTc1ZjZcdTc1ZWRcdTc1ZjVcdTc1ZmRcdTc2OTlcdTc2YjVcdTc2ZGRcdTc3NTVcdTc3NWZcdTc3NjBcdTc3NTJcdTc3NTZcdTc3NWFcdTc3NjlcdTc3NjdcdTc3NTRcdTc3NTlcdTc3NmRcdTc3ZTBcdTc4''@;'; put 'put ''ODdcdTc4OWFcdTc4OTRcdTc4OGZcdTc4ODRcdTc4OTVcdTc4ODVcdTc4ODZcdTc4YTFcdTc4ODNcdTc4NzlcdTc4OTlcdTc4ODBcdTc4OTZcdTc4N2JcdTc5N2NcdTc5ODJcdTc5N2RcdTc5NzlcdTdhMTFcdTdhMThcdTdhMTlcdTdhMTJcdTdhMTdcdTdhMTVcdTdhMjJcdTdhMTMiXSxbImRm''@;'; put 'put ''NDAiLCJcdTdhMWJcdTdhMTBcdTdhYTNcdTdhYTJcdTdhOWVcdTdhZWJcdTdiNjZcdTdiNjRcdTdiNmRcdTdiNzRcdTdiNjlcdTdiNzJcdTdiNjVcdTdiNzNcdTdiNzFcdTdiNzBcdTdiNjFcdTdiNzhcdTdiNzZcdTdiNjNcdTdjYjJcdTdjYjRcdTdjYWZcdTdkODhcdTdkODZcdTdkODBcdTdk''@;'; put 'put ''OGRcdTdkN2ZcdTdkODVcdTdkN2FcdTdkOGVcdTdkN2JcdTdkODNcdTdkN2NcdTdkOGNcdTdkOTRcdTdkODRcdTdkN2RcdTdkOTJcdTdmNmRcdTdmNmJcdTdmNjdcdTdmNjhcdTdmNmNcdTdmYTZcdTdmYTVcdTdmYTdcdTdmZGJcdTdmZGNcdTgwMjFcdTgxNjRcdTgxNjBcdTgxNzdcdTgxNWNc''@;'; put 'put ''dTgxNjlcdTgxNWJcdTgxNjJcdTgxNzJcdTY3MjFcdTgxNWVcdTgxNzZcdTgxNjdcdTgxNmYiXSxbImRmYTEiLCJcdTgxNDRcdTgxNjFcdTgyMWRcdTgyNDlcdTgyNDRcdTgyNDBcdTgyNDJcdTgyNDVcdTg0ZjFcdTg0M2ZcdTg0NTZcdTg0NzZcdTg0NzlcdTg0OGZcdTg0OGRcdTg0NjVcdTg0''@;'; put 'put ''NTFcdTg0NDBcdTg0ODZcdTg0NjdcdTg0MzBcdTg0NGRcdTg0N2RcdTg0NWFcdTg0NTlcdTg0NzRcdTg0NzNcdTg0NWRcdTg1MDdcdTg0NWVcdTg0MzdcdTg0M2FcdTg0MzRcdTg0N2FcdTg0NDNcdTg0NzhcdTg0MzJcdTg0NDVcdTg0MjlcdTgzZDlcdTg0NGJcdTg0MmZcdTg0NDJcdTg0MmRc''@;'; put 'put ''dTg0NWZcdTg0NzBcdTg0MzlcdTg0NGVcdTg0NGNcdTg0NTJcdTg0NmZcdTg0YzVcdTg0OGVcdTg0M2JcdTg0NDdcdTg0MzZcdTg0MzNcdTg0NjhcdTg0N2VcdTg0NDRcdTg0MmJcdTg0NjBcdTg0NTRcdTg0NmVcdTg0NTBcdTg3MGJcdTg3MDRcdTg2ZjdcdTg3MGNcdTg2ZmFcdTg2ZDZcdTg2''@;'; put 'put ''ZjVcdTg3NGRcdTg2ZjhcdTg3MGVcdTg3MDlcdTg3MDFcdTg2ZjZcdTg3MGRcdTg3MDVcdTg4ZDZcdTg4Y2JcdTg4Y2RcdTg4Y2VcdTg4ZGVcdTg4ZGJcdTg4ZGFcdTg4Y2NcdTg4ZDBcdTg5ODVcdTg5OWJcdTg5ZGZcdTg5ZTVcdTg5ZTQiXSxbImUwNDAiLCJcdTg5ZTFcdTg5ZTBcdTg5ZTJc''@;'; put 'put ''dTg5ZGNcdTg5ZTZcdThhNzZcdThhODZcdThhN2ZcdThhNjFcdThhM2ZcdThhNzdcdThhODJcdThhODRcdThhNzVcdThhODNcdThhODFcdThhNzRcdThhN2FcdThjM2NcdThjNGJcdThjNGFcdThjNjVcdThjNjRcdThjNjZcdThjODZcdThjODRcdThjODVcdThjY2NcdThkNjhcdThkNjlcdThk''@;'; put 'put ''OTFcdThkOGNcdThkOGVcdThkOGZcdThkOGRcdThkOTNcdThkOTRcdThkOTBcdThkOTJcdThkZjBcdThkZTBcdThkZWNcdThkZjFcdThkZWVcdThkZDBcdThkZTlcdThkZTNcdThkZTJcdThkZTdcdThkZjJcdThkZWJcdThkZjRcdThmMDZcdThlZmZcdThmMDFcdThmMDBcdThmMDVcdThmMDdc''@;'; put 'put ''dThmMDhcdThmMDJcdThmMGJcdTkwNTJcdTkwM2YiXSxbImUwYTEiLCJcdTkwNDRcdTkwNDlcdTkwM2RcdTkxMTBcdTkxMGRcdTkxMGZcdTkxMTFcdTkxMTZcdTkxMTRcdTkxMGJcdTkxMGVcdTkxNmVcdTkxNmZcdTkyNDhcdTkyNTJcdTkyMzBcdTkyM2FcdTkyNjZcdTkyMzNcdTkyNjVcdTky''@;'; put 'put ''NWVcdTkyODNcdTkyMmVcdTkyNGFcdTkyNDZcdTkyNmRcdTkyNmNcdTkyNGZcdTkyNjBcdTkyNjdcdTkyNmZcdTkyMzZcdTkyNjFcdTkyNzBcdTkyMzFcdTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNGVcdTkyNTNcdTkyNGNcdTkyNTZcdTkyMzJcdTk1OWZcdTk1OWNcdTk1OWVcdTk1OWJc''@;'; put 'put ''dTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Y2VcdTk2ZmFcdTk2ZmRcdTk2ZjhcdTk2ZjVcdTk3NzNcdTk3NzdcdTk3NzhcdTk3NzJcdTk4MGZcdTk4MGRcdTk4MGVcdTk4YWNcdTk4ZjZcdTk4ZjlcdTk5YWZcdTk5YjJcdTk5YjBcdTk5YjVcdTlhYWRcdTlhYWJcdTliNWJcdTljZWFcdTlj''@;'; put 'put ''ZWRcdTljZTdcdTllODBcdTllZmRcdTUwZTZcdTUwZDRcdTUwZDdcdTUwZThcdTUwZjNcdTUwZGJcdTUwZWFcdTUwZGRcdTUwZTRcdTUwZDNcdTUwZWNcdTUwZjBcdTUwZWZcdTUwZTNcdTUwZTAiXSxbImUxNDAiLCJcdTUxZDhcdTUyODBcdTUyODFcdTUyZTlcdTUyZWJcdTUzMzBcdTUzYWNc''@;'; put 'put ''dTU2MjdcdTU2MTVcdTU2MGNcdTU2MTJcdTU1ZmNcdTU2MGZcdTU2MWNcdTU2MDFcdTU2MTNcdTU2MDJcdTU1ZmFcdTU2MWRcdTU2MDRcdTU1ZmZcdTU1ZjlcdTU4ODlcdTU4N2NcdTU4OTBcdTU4OThcdTU4ODZcdTU4ODFcdTU4N2ZcdTU4NzRcdTU4OGJcdTU4N2FcdTU4ODdcdTU4OTFcdTU4''@;'; put 'put ''OGVcdTU4NzZcdTU4ODJcdTU4ODhcdTU4N2JcdTU4OTRcdTU4OGZcdTU4ZmVcdTU5NmJcdTVhZGNcdTVhZWVcdTVhZTVcdTVhZDVcdTVhZWFcdTVhZGFcdTVhZWRcdTVhZWJcdTVhZjNcdTVhZTJcdTVhZTBcdTVhZGJcdTVhZWNcdTVhZGVcdTVhZGRcdTVhZDlcdTVhZThcdTVhZGZcdTViNzdc''@;'; put 'put ''dTViZTAiXSxbImUxYTEiLCJcdTViZTNcdTVjNjNcdTVkODJcdTVkODBcdTVkN2RcdTVkODZcdTVkN2FcdTVkODFcdTVkNzdcdTVkOGFcdTVkODlcdTVkODhcdTVkN2VcdTVkN2NcdTVkOGRcdTVkNzlcdTVkN2ZcdTVlNThcdTVlNTlcdTVlNTNcdTVlZDhcdTVlZDFcdTVlZDdcdTVlY2VcdTVl''@;'; put 'put ''ZGNcdTVlZDVcdTVlZDlcdTVlZDJcdTVlZDRcdTVmNDRcdTVmNDNcdTVmNmZcdTVmYjZcdTYxMmNcdTYxMjhcdTYxNDFcdTYxNWVcdTYxNzFcdTYxNzNcdTYxNTJcdTYxNTNcdTYxNzJcdTYxNmNcdTYxODBcdTYxNzRcdTYxNTRcdTYxN2FcdTYxNWJcdTYxNjVcdTYxM2JcdTYxNmFcdTYxNjFc''@;'; put 'put ''dTYxNTZcdTYyMjlcdTYyMjdcdTYyMmJcdTY0MmJcdTY0NGRcdTY0NWJcdTY0NWRcdTY0NzRcdTY0NzZcdTY0NzJcdTY0NzNcdTY0N2RcdTY0NzVcdTY0NjZcdTY0YTZcdTY0NGVcdTY0ODJcdTY0NWVcdTY0NWNcdTY0NGJcdTY0NTNcdTY0NjBcdTY0NTBcdTY0N2ZcdTY0M2ZcdTY0NmNcdTY0''@;'; put 'put ''NmJcdTY0NTlcdTY0NjVcdTY0NzdcdTY1NzNcdTY1YTBcdTY2YTFcdTY2YTBcdTY2OWZcdTY3MDVcdTY3MDRcdTY3MjJcdTY5YjFcdTY5YjZcdTY5YzkiXSxbImUyNDAiLCJcdTY5YTBcdTY5Y2VcdTY5OTZcdTY5YjBcdTY5YWNcdTY5YmNcdTY5OTFcdTY5OTlcdTY5OGVcdTY5YTdcdTY5OGRc''@;'; put 'put ''dTY5YTlcdTY5YmVcdTY5YWZcdTY5YmZcdTY5YzRcdTY5YmRcdTY5YTRcdTY5ZDRcdTY5YjlcdTY5Y2FcdTY5OWFcdTY5Y2ZcdTY5YjNcdTY5OTNcdTY5YWFcdTY5YTFcdTY5OWVcdTY5ZDlcdTY5OTdcdTY5OTBcdTY5YzJcdTY5YjVcdTY5YTVcdTY5YzZcdTZiNGFcdTZiNGRcdTZiNGJcdTZi''@;'; put 'put ''OWVcdTZiOWZcdTZiYTBcdTZiYzNcdTZiYzRcdTZiZmVcdTZlY2VcdTZlZjVcdTZlZjFcdTZmMDNcdTZmMjVcdTZlZjhcdTZmMzdcdTZlZmJcdTZmMmVcdTZmMDlcdTZmNGVcdTZmMTlcdTZmMWFcdTZmMjdcdTZmMThcdTZmM2JcdTZmMTJcdTZlZWRcdTZmMGEiXSxbImUyYTEiLCJcdTZmMzZc''@;'; put 'put ''dTZmNzNcdTZlZjlcdTZlZWVcdTZmMmRcdTZmNDBcdTZmMzBcdTZmM2NcdTZmMzVcdTZlZWJcdTZmMDdcdTZmMGVcdTZmNDNcdTZmMDVcdTZlZmRcdTZlZjZcdTZmMzlcdTZmMWNcdTZlZmNcdTZmM2FcdTZmMWZcdTZmMGRcdTZmMWVcdTZmMDhcdTZmMjFcdTcxODdcdTcxOTBcdTcxODlcdTcx''@;'; put 'put ''ODBcdTcxODVcdTcxODJcdTcxOGZcdTcxN2JcdTcxODZcdTcxODFcdTcxOTdcdTcyNDRcdTcyNTNcdTcyOTdcdTcyOTVcdTcyOTNcdTczNDNcdTczNGRcdTczNTFcdTczNGNcdTc0NjJcdTc0NzNcdTc0NzFcdTc0NzVcdTc0NzJcdTc0NjdcdTc0NmVcdTc1MDBcdTc1MDJcdTc1MDNcdTc1N2Rc''@;'; put 'put ''dTc1OTBcdTc2MTZcdTc2MDhcdTc2MGNcdTc2MTVcdTc2MTFcdTc2MGFcdTc2MTRcdTc2YjhcdTc3ODFcdTc3N2NcdTc3ODVcdTc3ODJcdTc3NmVcdTc3ODBcdTc3NmZcdTc3N2VcdTc3ODNcdTc4YjJcdTc4YWFcdTc4YjRcdTc4YWRcdTc4YThcdTc4N2VcdTc4YWJcdTc4OWVcdTc4YTVcdTc4''@;'; put 'put ''YTBcdTc4YWNcdTc4YTJcdTc4YTRcdTc5OThcdTc5OGFcdTc5OGJcdTc5OTZcdTc5OTVcdTc5OTRcdTc5OTMiXSxbImUzNDAiLCJcdTc5OTdcdTc5ODhcdTc5OTJcdTc5OTBcdTdhMmJcdTdhNGFcdTdhMzBcdTdhMmZcdTdhMjhcdTdhMjZcdTdhYThcdTdhYWJcdTdhYWNcdTdhZWVcdTdiODhc''@;'; put 'put ''dTdiOWNcdTdiOGFcdTdiOTFcdTdiOTBcdTdiOTZcdTdiOGRcdTdiOGNcdTdiOWJcdTdiOGVcdTdiODVcdTdiOThcdTUyODRcdTdiOTlcdTdiYTRcdTdiODJcdTdjYmJcdTdjYmZcdTdjYmNcdTdjYmFcdTdkYTdcdTdkYjdcdTdkYzJcdTdkYTNcdTdkYWFcdTdkYzFcdTdkYzBcdTdkYzVcdTdk''@;'; put 'put ''OWRcdTdkY2VcdTdkYzRcdTdkYzZcdTdkY2JcdTdkY2NcdTdkYWZcdTdkYjlcdTdkOTZcdTdkYmNcdTdkOWZcdTdkYTZcdTdkYWVcdTdkYTlcdTdkYTFcdTdkYzlcdTdmNzNcdTdmZTJcdTdmZTNcdTdmZTVcdTdmZGUiXSxbImUzYTEiLCJcdTgwMjRcdTgwNWRcdTgwNWNcdTgxODlcdTgxODZc''@;'; put 'put ''dTgxODNcdTgxODdcdTgxOGRcdTgxOGNcdTgxOGJcdTgyMTVcdTg0OTdcdTg0YTRcdTg0YTFcdTg0OWZcdTg0YmFcdTg0Y2VcdTg0YzJcdTg0YWNcdTg0YWVcdTg0YWJcdTg0YjlcdTg0YjRcdTg0YzFcdTg0Y2RcdTg0YWFcdTg0OWFcdTg0YjFcdTg0ZDBcdTg0OWRcdTg0YTdcdTg0YmJcdTg0''@;'; put 'put ''YTJcdTg0OTRcdTg0YzdcdTg0Y2NcdTg0OWJcdTg0YTlcdTg0YWZcdTg0YThcdTg0ZDZcdTg0OThcdTg0YjZcdTg0Y2ZcdTg0YTBcdTg0ZDdcdTg0ZDRcdTg0ZDJcdTg0ZGJcdTg0YjBcdTg0OTFcdTg2NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3NmJcdTg3NDBcdTg3MmVcdTg3MWVcdTg3MjFc''@;'; put 'put ''dTg3MTlcdTg3MWJcdTg3NDNcdTg3MmNcdTg3NDFcdTg3M2VcdTg3NDZcdTg3MjBcdTg3MzJcdTg3MmFcdTg3MmRcdTg3M2NcdTg3MTJcdTg3M2FcdTg3MzFcdTg3MzVcdTg3NDJcdTg3MjZcdTg3MjdcdTg3MzhcdTg3MjRcdTg3MWFcdTg3MzBcdTg3MTFcdTg4ZjdcdTg4ZTdcdTg4ZjFcdTg4''@;'; put 'put ''ZjJcdTg4ZmFcdTg4ZmVcdTg4ZWVcdTg4ZmNcdTg4ZjZcdTg4ZmIiXSxbImU0NDAiLCJcdTg4ZjBcdTg4ZWNcdTg4ZWJcdTg5OWRcdTg5YTFcdTg5OWZcdTg5OWVcdTg5ZTlcdTg5ZWJcdTg5ZThcdThhYWJcdThhOTlcdThhOGJcdThhOTJcdThhOGZcdThhOTZcdThjM2RcdThjNjhcdThjNjlc''@;'; put 'put ''dThjZDVcdThjY2ZcdThjZDdcdThkOTZcdThlMDlcdThlMDJcdThkZmZcdThlMGRcdThkZmRcdThlMGFcdThlMDNcdThlMDdcdThlMDZcdThlMDVcdThkZmVcdThlMDBcdThlMDRcdThmMTBcdThmMTFcdThmMGVcdThmMGRcdTkxMjNcdTkxMWNcdTkxMjBcdTkxMjJcdTkxMWZcdTkxMWRcdTkx''@;'; put 'put ''MWFcdTkxMjRcdTkxMjFcdTkxMWJcdTkxN2FcdTkxNzJcdTkxNzlcdTkxNzNcdTkyYTVcdTkyYTRcdTkyNzZcdTkyOWJcdTkyN2FcdTkyYTBcdTkyOTRcdTkyYWFcdTkyOGQiXSxbImU0YTEiLCJcdTkyYTZcdTkyOWFcdTkyYWJcdTkyNzlcdTkyOTdcdTkyN2ZcdTkyYTNcdTkyZWVcdTkyOGVc''@;'; put 'put ''dTkyODJcdTkyOTVcdTkyYTJcdTkyN2RcdTkyODhcdTkyYTFcdTkyOGFcdTkyODZcdTkyOGNcdTkyOTlcdTkyYTdcdTkyN2VcdTkyODdcdTkyYTlcdTkyOWRcdTkyOGJcdTkyMmRcdTk2OWVcdTk2YTFcdTk2ZmZcdTk3NThcdTk3N2RcdTk3N2FcdTk3N2VcdTk3ODNcdTk3ODBcdTk3ODJcdTk3''@;'; put 'put ''N2JcdTk3ODRcdTk3ODFcdTk3N2ZcdTk3Y2VcdTk3Y2RcdTk4MTZcdTk4YWRcdTk4YWVcdTk5MDJcdTk5MDBcdTk5MDdcdTk5OWRcdTk5OWNcdTk5YzNcdTk5YjlcdTk5YmJcdTk5YmFcdTk5YzJcdTk5YmRcdTk5YzdcdTlhYjFcdTlhZTNcdTlhZTdcdTliM2VcdTliM2ZcdTliNjBcdTliNjFc''@;'; put 'put ''dTliNWZcdTljZjFcdTljZjJcdTljZjVcdTllYTdcdTUwZmZcdTUxMDNcdTUxMzBcdTUwZjhcdTUxMDZcdTUxMDdcdTUwZjZcdTUwZmVcdTUxMGJcdTUxMGNcdTUwZmRcdTUxMGFcdTUyOGJcdTUyOGNcdTUyZjFcdTUyZWZcdTU2NDhcdTU2NDJcdTU2NGNcdTU2MzVcdTU2NDFcdTU2NGFcdTU2''@;'; put 'put ''NDlcdTU2NDZcdTU2NTgiXSxbImU1NDAiLCJcdTU2NWFcdTU2NDBcdTU2MzNcdTU2M2RcdTU2MmNcdTU2M2VcdTU2MzhcdTU2MmFcdTU2M2FcdTU3MWFcdTU4YWJcdTU4OWRcdTU4YjFcdTU4YTBcdTU4YTNcdTU4YWZcdTU4YWNcdTU4YTVcdTU4YTFcdTU4ZmZcdTVhZmZcdTVhZjRcdTVhZmRc''@;'; put 'put ''dTVhZjdcdTVhZjZcdTViMDNcdTVhZjhcdTViMDJcdTVhZjlcdTViMDFcdTViMDdcdTViMDVcdTViMGZcdTVjNjdcdTVkOTlcdTVkOTdcdTVkOWZcdTVkOTJcdTVkYTJcdTVkOTNcdTVkOTVcdTVkYTBcdTVkOWNcdTVkYTFcdTVkOWFcdTVkOWVcdTVlNjlcdTVlNWRcdTVlNjBcdTVlNWNcdTdk''@;'; put 'put ''ZjNcdTVlZGJcdTVlZGVcdTVlZTFcdTVmNDlcdTVmYjJcdTYxOGJcdTYxODNcdTYxNzlcdTYxYjFcdTYxYjBcdTYxYTJcdTYxODkiXSxbImU1YTEiLCJcdTYxOWJcdTYxOTNcdTYxYWZcdTYxYWRcdTYxOWZcdTYxOTJcdTYxYWFcdTYxYTFcdTYxOGRcdTYxNjZcdTYxYjNcdTYyMmRcdTY0NmVc''@;'; put 'put ''dTY0NzBcdTY0OTZcdTY0YTBcdTY0ODVcdTY0OTdcdTY0OWNcdTY0OGZcdTY0OGJcdTY0OGFcdTY0OGNcdTY0YTNcdTY0OWZcdTY0NjhcdTY0YjFcdTY0OThcdTY1NzZcdTY1N2FcdTY1NzlcdTY1N2JcdTY1YjJcdTY1YjNcdTY2YjVcdTY2YjBcdTY2YTlcdTY2YjJcdTY2YjdcdTY2YWFcdTY2''@;'; put 'put ''YWZcdTZhMDBcdTZhMDZcdTZhMTdcdTY5ZTVcdTY5ZjhcdTZhMTVcdTY5ZjFcdTY5ZTRcdTZhMjBcdTY5ZmZcdTY5ZWNcdTY5ZTJcdTZhMWJcdTZhMWRcdTY5ZmVcdTZhMjdcdTY5ZjJcdTY5ZWVcdTZhMTRcdTY5ZjdcdTY5ZTdcdTZhNDBcdTZhMDhcdTY5ZTZcdTY5ZmJcdTZhMGRcdTY5ZmNc''@;'; put 'put ''dTY5ZWJcdTZhMDlcdTZhMDRcdTZhMThcdTZhMjVcdTZhMGZcdTY5ZjZcdTZhMjZcdTZhMDdcdTY5ZjRcdTZhMTZcdTZiNTFcdTZiYTVcdTZiYTNcdTZiYTJcdTZiYTZcdTZjMDFcdTZjMDBcdTZiZmZcdTZjMDJcdTZmNDFcdTZmMjZcdTZmN2VcdTZmODdcdTZmYzZcdTZmOTIiXSxbImU2NDAi''@;'; put 'put ''LCJcdTZmOGRcdTZmODlcdTZmOGNcdTZmNjJcdTZmNGZcdTZmODVcdTZmNWFcdTZmOTZcdTZmNzZcdTZmNmNcdTZmODJcdTZmNTVcdTZmNzJcdTZmNTJcdTZmNTBcdTZmNTdcdTZmOTRcdTZmOTNcdTZmNWRcdTZmMDBcdTZmNjFcdTZmNmJcdTZmN2RcdTZmNjdcdTZmOTBcdTZmNTNcdTZmOGJc''@;'; put 'put ''dTZmNjlcdTZmN2ZcdTZmOTVcdTZmNjNcdTZmNzdcdTZmNmFcdTZmN2JcdTcxYjJcdTcxYWZcdTcxOWJcdTcxYjBcdTcxYTBcdTcxOWFcdTcxYTlcdTcxYjVcdTcxOWRcdTcxYTVcdTcxOWVcdTcxYTRcdTcxYTFcdTcxYWFcdTcxOWNcdTcxYTdcdTcxYjNcdTcyOThcdTcyOWFcdTczNThcdTcz''@;'; put 'put ''NTJcdTczNWVcdTczNWZcdTczNjBcdTczNWRcdTczNWJcdTczNjFcdTczNWFcdTczNTkiXSxbImU2YTEiLCJcdTczNjJcdTc0ODdcdTc0ODlcdTc0OGFcdTc0ODZcdTc0ODFcdTc0N2RcdTc0ODVcdTc0ODhcdTc0N2NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N2VcdTc2MjVcdTc2MWVcdTc2MTlc''@;'; put 'put ''dTc2MWRcdTc2MWNcdTc2MjNcdTc2MWFcdTc2MjhcdTc2MWJcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWJcdTc3OGRcdTc3OGZcdTc3ODlcdTc3ODhcdTc4Y2RcdTc4YmJcdTc4Y2ZcdTc4Y2NcdTc4ZDFcdTc4Y2VcdTc4ZDRcdTc4YzhcdTc4YzNcdTc4YzRcdTc4YzlcdTc5OWFcdTc5YTFcdTc5''@;'; put 'put ''YTBcdTc5OWNcdTc5YTJcdTc5OWJcdTZiNzZcdTdhMzlcdTdhYjJcdTdhYjRcdTdhYjNcdTdiYjdcdTdiY2JcdTdiYmVcdTdiYWNcdTdiY2VcdTdiYWZcdTdiYjlcdTdiY2FcdTdiYjVcdTdjYzVcdTdjYzhcdTdjY2NcdTdjY2JcdTdkZjdcdTdkZGJcdTdkZWFcdTdkZTdcdTdkZDdcdTdkZTFc''@;'; put 'put ''dTdlMDNcdTdkZmFcdTdkZTZcdTdkZjZcdTdkZjFcdTdkZjBcdTdkZWVcdTdkZGZcdTdmNzZcdTdmYWNcdTdmYjBcdTdmYWRcdTdmZWRcdTdmZWJcdTdmZWFcdTdmZWNcdTdmZTZcdTdmZThcdTgwNjRcdTgwNjdcdTgxYTNcdTgxOWYiXSxbImU3NDAiLCJcdTgxOWVcdTgxOTVcdTgxYTJcdTgx''@;'; put 'put ''OTlcdTgxOTdcdTgyMTZcdTgyNGZcdTgyNTNcdTgyNTJcdTgyNTBcdTgyNGVcdTgyNTFcdTg1MjRcdTg1M2JcdTg1MGZcdTg1MDBcdTg1MjlcdTg1MGVcdTg1MDlcdTg1MGRcdTg1MWZcdTg1MGFcdTg1MjdcdTg1MWNcdTg0ZmJcdTg1MmJcdTg0ZmFcdTg1MDhcdTg1MGNcdTg0ZjRcdTg1MmFc''@;'; put 'put ''dTg0ZjJcdTg1MTVcdTg0ZjdcdTg0ZWJcdTg0ZjNcdTg0ZmNcdTg1MTJcdTg0ZWFcdTg0ZTlcdTg1MTZcdTg0ZmVcdTg1MjhcdTg1MWRcdTg1MmVcdTg1MDJcdTg0ZmRcdTg1MWVcdTg0ZjZcdTg1MzFcdTg1MjZcdTg0ZTdcdTg0ZThcdTg0ZjBcdTg0ZWZcdTg0ZjlcdTg1MThcdTg1MjBcdTg1''@;'; put 'put ''MzBcdTg1MGJcdTg1MTlcdTg1MmZcdTg2NjIiXSxbImU3YTEiLCJcdTg3NTZcdTg3NjNcdTg3NjRcdTg3NzdcdTg3ZTFcdTg3NzNcdTg3NThcdTg3NTRcdTg3NWJcdTg3NTJcdTg3NjFcdTg3NWFcdTg3NTFcdTg3NWVcdTg3NmRcdTg3NmFcdTg3NTBcdTg3NGVcdTg3NWZcdTg3NWRcdTg3NmZc''@;'; put 'put ''dTg3NmNcdTg3N2FcdTg3NmVcdTg3NWNcdTg3NjVcdTg3NGZcdTg3N2JcdTg3NzVcdTg3NjJcdTg3NjdcdTg3NjlcdTg4NWFcdTg5MDVcdTg5MGNcdTg5MTRcdTg5MGJcdTg5MTdcdTg5MThcdTg5MTlcdTg5MDZcdTg5MTZcdTg5MTFcdTg5MGVcdTg5MDlcdTg5YTJcdTg5YTRcdTg5YTNcdTg5''@;'; put 'put ''ZWRcdTg5ZjBcdTg5ZWNcdThhY2ZcdThhYzZcdThhYjhcdThhZDNcdThhZDFcdThhZDRcdThhZDVcdThhYmJcdThhZDdcdThhYmVcdThhYzBcdThhYzVcdThhZDhcdThhYzNcdThhYmFcdThhYmRcdThhZDlcdThjM2VcdThjNGRcdThjOGZcdThjZTVcdThjZGZcdThjZDlcdThjZThcdThjZGFc''@;'; put 'put ''dThjZGRcdThjZTdcdThkYTBcdThkOWNcdThkYTFcdThkOWJcdThlMjBcdThlMjNcdThlMjVcdThlMjRcdThlMmVcdThlMTVcdThlMWJcdThlMTZcdThlMTFcdThlMTlcdThlMjZcdThlMjciXSxbImU4NDAiLCJcdThlMTRcdThlMTJcdThlMThcdThlMTNcdThlMWNcdThlMTdcdThlMWFcdThm''@;'; put 'put ''MmNcdThmMjRcdThmMThcdThmMWFcdThmMjBcdThmMjNcdThmMTZcdThmMTdcdTkwNzNcdTkwNzBcdTkwNmZcdTkwNjdcdTkwNmJcdTkxMmZcdTkxMmJcdTkxMjlcdTkxMmFcdTkxMzJcdTkxMjZcdTkxMmVcdTkxODVcdTkxODZcdTkxOGFcdTkxODFcdTkxODJcdTkxODRcdTkxODBcdTkyZDBc''@;'; put 'put ''dTkyYzNcdTkyYzRcdTkyYzBcdTkyZDlcdTkyYjZcdTkyY2ZcdTkyZjFcdTkyZGZcdTkyZDhcdTkyZTlcdTkyZDdcdTkyZGRcdTkyY2NcdTkyZWZcdTkyYzJcdTkyZThcdTkyY2FcdTkyYzhcdTkyY2VcdTkyZTZcdTkyY2RcdTkyZDVcdTkyYzlcdTkyZTBcdTkyZGVcdTkyZTdcdTkyZDFcdTky''@;'; put 'put ''ZDMiXSxbImU4YTEiLCJcdTkyYjVcdTkyZTFcdTkyYzZcdTkyYjRcdTk1N2NcdTk1YWNcdTk1YWJcdTk1YWVcdTk1YjBcdTk2YTRcdTk2YTJcdTk2ZDNcdTk3MDVcdTk3MDhcdTk3MDJcdTk3NWFcdTk3OGFcdTk3OGVcdTk3ODhcdTk3ZDBcdTk3Y2ZcdTk4MWVcdTk4MWRcdTk4MjZcdTk4Mjlc''@;'; put 'put ''dTk4MjhcdTk4MjBcdTk4MWJcdTk4MjdcdTk4YjJcdTk5MDhcdTk4ZmFcdTk5MTFcdTk5MTRcdTk5MTZcdTk5MTdcdTk5MTVcdTk5ZGNcdTk5Y2RcdTk5Y2ZcdTk5ZDNcdTk5ZDRcdTk5Y2VcdTk5YzlcdTk5ZDZcdTk5ZDhcdTk5Y2JcdTk5ZDdcdTk5Y2NcdTlhYjNcdTlhZWNcdTlhZWJcdTlh''@;'; put 'put ''ZjNcdTlhZjJcdTlhZjFcdTliNDZcdTliNDNcdTliNjdcdTliNzRcdTliNzFcdTliNjZcdTliNzZcdTliNzVcdTliNzBcdTliNjhcdTliNjRcdTliNmNcdTljZmNcdTljZmFcdTljZmRcdTljZmZcdTljZjdcdTlkMDdcdTlkMDBcdTljZjlcdTljZmJcdTlkMDhcdTlkMDVcdTlkMDRcdTllODNc''@;'; put 'put ''dTllZDNcdTlmMGZcdTlmMTBcdTUxMWNcdTUxMTNcdTUxMTdcdTUxMWFcdTUxMTFcdTUxZGVcdTUzMzRcdTUzZTFcdTU2NzBcdTU2NjBcdTU2NmUiXSxbImU5NDAiLCJcdTU2NzNcdTU2NjZcdTU2NjNcdTU2NmRcdTU2NzJcdTU2NWVcdTU2NzdcdTU3MWNcdTU3MWJcdTU4YzhcdTU4YmRcdTU4''@;'; put 'put ''YzlcdTU4YmZcdTU4YmFcdTU4YzJcdTU4YmNcdTU4YzZcdTViMTdcdTViMTlcdTViMWJcdTViMjFcdTViMTRcdTViMTNcdTViMTBcdTViMTZcdTViMjhcdTViMWFcdTViMjBcdTViMWVcdTViZWZcdTVkYWNcdTVkYjFcdTVkYTlcdTVkYTdcdTVkYjVcdTVkYjBcdTVkYWVcdTVkYWFcdTVkYThc''@;'; put 'put ''dTVkYjJcdTVkYWRcdTVkYWZcdTVkYjRcdTVlNjdcdTVlNjhcdTVlNjZcdTVlNmZcdTVlZTlcdTVlZTdcdTVlZTZcdTVlZThcdTVlZTVcdTVmNGJcdTVmYmNcdTYxOWRcdTYxYThcdTYxOTZcdTYxYzVcdTYxYjRcdTYxYzZcdTYxYzFcdTYxY2NcdTYxYmEiXSxbImU5YTEiLCJcdTYxYmZcdTYx''@;'; put 'put ''YjhcdTYxOGNcdTY0ZDdcdTY0ZDZcdTY0ZDBcdTY0Y2ZcdTY0YzlcdTY0YmRcdTY0ODlcdTY0YzNcdTY0ZGJcdTY0ZjNcdTY0ZDlcdTY1MzNcdTY1N2ZcdTY1N2NcdTY1YTJcdTY2YzhcdTY2YmVcdTY2YzBcdTY2Y2FcdTY2Y2JcdTY2Y2ZcdTY2YmRcdTY2YmJcdTY2YmFcdTY2Y2NcdTY3MjNc''@;'; put 'put ''dTZhMzRcdTZhNjZcdTZhNDlcdTZhNjdcdTZhMzJcdTZhNjhcdTZhM2VcdTZhNWRcdTZhNmRcdTZhNzZcdTZhNWJcdTZhNTFcdTZhMjhcdTZhNWFcdTZhM2JcdTZhM2ZcdTZhNDFcdTZhNmFcdTZhNjRcdTZhNTBcdTZhNGZcdTZhNTRcdTZhNmZcdTZhNjlcdTZhNjBcdTZhM2NcdTZhNWVcdTZh''@;'; put 'put ''NTZcdTZhNTVcdTZhNGRcdTZhNGVcdTZhNDZcdTZiNTVcdTZiNTRcdTZiNTZcdTZiYTdcdTZiYWFcdTZiYWJcdTZiYzhcdTZiYzdcdTZjMDRcdTZjMDNcdTZjMDZcdTZmYWRcdTZmY2JcdTZmYTNcdTZmYzdcdTZmYmNcdTZmY2VcdTZmYzhcdTZmNWVcdTZmYzRcdTZmYmRcdTZmOWVcdTZmY2Fc''@;'; put 'put ''dTZmYThcdTcwMDRcdTZmYTVcdTZmYWVcdTZmYmFcdTZmYWNcdTZmYWFcdTZmY2ZcdTZmYmZcdTZmYjgiXSxbImVhNDAiLCJcdTZmYTJcdTZmYzlcdTZmYWJcdTZmY2RcdTZmYWZcdTZmYjJcdTZmYjBcdTcxYzVcdTcxYzJcdTcxYmZcdTcxYjhcdTcxZDZcdTcxYzBcdTcxYzFcdTcxY2JcdTcx''@;'; put 'put ''ZDRcdTcxY2FcdTcxYzdcdTcxY2ZcdTcxYmRcdTcxZDhcdTcxYmNcdTcxYzZcdTcxZGFcdTcxZGJcdTcyOWRcdTcyOWVcdTczNjlcdTczNjZcdTczNjdcdTczNmNcdTczNjVcdTczNmJcdTczNmFcdTc0N2ZcdTc0OWFcdTc0YTBcdTc0OTRcdTc0OTJcdTc0OTVcdTc0YTFcdTc1MGJcdTc1ODBc''@;'; put 'put ''dTc2MmZcdTc2MmRcdTc2MzFcdTc2M2RcdTc2MzNcdTc2M2NcdTc2MzVcdTc2MzJcdTc2MzBcdTc2YmJcdTc2ZTZcdTc3OWFcdTc3OWRcdTc3YTFcdTc3OWNcdTc3OWJcdTc3YTJcdTc3YTNcdTc3OTVcdTc3OTkiXSxbImVhYTEiLCJcdTc3OTdcdTc4ZGRcdTc4ZTlcdTc4ZTVcdTc4ZWFcdTc4''@;'; put 'put ''ZGVcdTc4ZTNcdTc4ZGJcdTc4ZTFcdTc4ZTJcdTc4ZWRcdTc4ZGZcdTc4ZTBcdTc5YTRcdTdhNDRcdTdhNDhcdTdhNDdcdTdhYjZcdTdhYjhcdTdhYjVcdTdhYjFcdTdhYjdcdTdiZGVcdTdiZTNcdTdiZTdcdTdiZGRcdTdiZDVcdTdiZTVcdTdiZGFcdTdiZThcdTdiZjlcdTdiZDRcdTdiZWFc''@;'; put 'put ''dTdiZTJcdTdiZGNcdTdiZWJcdTdiZDhcdTdiZGZcdTdjZDJcdTdjZDRcdTdjZDdcdTdjZDBcdTdjZDFcdTdlMTJcdTdlMjFcdTdlMTdcdTdlMGNcdTdlMWZcdTdlMjBcdTdlMTNcdTdlMGVcdTdlMWNcdTdlMTVcdTdlMWFcdTdlMjJcdTdlMGJcdTdlMGZcdTdlMTZcdTdlMGRcdTdlMTRcdTdl''@;'; put 'put ''MjVcdTdlMjRcdTdmNDNcdTdmN2JcdTdmN2NcdTdmN2FcdTdmYjFcdTdmZWZcdTgwMmFcdTgwMjlcdTgwNmNcdTgxYjFcdTgxYTZcdTgxYWVcdTgxYjlcdTgxYjVcdTgxYWJcdTgxYjBcdTgxYWNcdTgxYjRcdTgxYjJcdTgxYjdcdTgxYTdcdTgxZjJcdTgyNTVcdTgyNTZcdTgyNTdcdTg1NTZc''@;'; put 'put ''dTg1NDVcdTg1NmJcdTg1NGRcdTg1NTNcdTg1NjFcdTg1NTgiXSxbImViNDAiLCJcdTg1NDBcdTg1NDZcdTg1NjRcdTg1NDFcdTg1NjJcdTg1NDRcdTg1NTFcdTg1NDdcdTg1NjNcdTg1M2VcdTg1NWJcdTg1NzFcdTg1NGVcdTg1NmVcdTg1NzVcdTg1NTVcdTg1NjdcdTg1NjBcdTg1OGNcdTg1''@;'; put 'put ''NjZcdTg1NWRcdTg1NTRcdTg1NjVcdTg1NmNcdTg2NjNcdTg2NjVcdTg2NjRcdTg3OWJcdTg3OGZcdTg3OTdcdTg3OTNcdTg3OTJcdTg3ODhcdTg3ODFcdTg3OTZcdTg3OThcdTg3NzlcdTg3ODdcdTg3YTNcdTg3ODVcdTg3OTBcdTg3OTFcdTg3OWRcdTg3ODRcdTg3OTRcdTg3OWNcdTg3OWFc''@;'; put 'put ''dTg3ODlcdTg5MWVcdTg5MjZcdTg5MzBcdTg5MmRcdTg5MmVcdTg5MjdcdTg5MzFcdTg5MjJcdTg5MjlcdTg5MjNcdTg5MmZcdTg5MmNcdTg5MWZcdTg5ZjFcdThhZTAiXSxbImViYTEiLCJcdThhZTJcdThhZjJcdThhZjRcdThhZjVcdThhZGRcdThiMTRcdThhZTRcdThhZGZcdThhZjBcdThh''@;'; put 'put ''YzhcdThhZGVcdThhZTFcdThhZThcdThhZmZcdThhZWZcdThhZmJcdThjOTFcdThjOTJcdThjOTBcdThjZjVcdThjZWVcdThjZjFcdThjZjBcdThjZjNcdThkNmNcdThkNmVcdThkYTVcdThkYTdcdThlMzNcdThlM2VcdThlMzhcdThlNDBcdThlNDVcdThlMzZcdThlM2NcdThlM2RcdThlNDFc''@;'; put 'put ''dThlMzBcdThlM2ZcdThlYmRcdThmMzZcdThmMmVcdThmMzVcdThmMzJcdThmMzlcdThmMzdcdThmMzRcdTkwNzZcdTkwNzlcdTkwN2JcdTkwODZcdTkwZmFcdTkxMzNcdTkxMzVcdTkxMzZcdTkxOTNcdTkxOTBcdTkxOTFcdTkxOGRcdTkxOGZcdTkzMjdcdTkzMWVcdTkzMDhcdTkzMWZcdTkz''@;'; put 'put ''MDZcdTkzMGZcdTkzN2FcdTkzMzhcdTkzM2NcdTkzMWJcdTkzMjNcdTkzMTJcdTkzMDFcdTkzNDZcdTkzMmRcdTkzMGVcdTkzMGRcdTkyY2JcdTkzMWRcdTkyZmFcdTkzMjVcdTkzMTNcdTkyZjlcdTkyZjdcdTkzMzRcdTkzMDJcdTkzMjRcdTkyZmZcdTkzMjlcdTkzMzlcdTkzMzVcdTkzMmFc''@;'; put 'put ''dTkzMTRcdTkzMGMiXSxbImVjNDAiLCJcdTkzMGJcdTkyZmVcdTkzMDlcdTkzMDBcdTkyZmJcdTkzMTZcdTk1YmNcdTk1Y2RcdTk1YmVcdTk1YjlcdTk1YmFcdTk1YjZcdTk1YmZcdTk1YjVcdTk1YmRcdTk2YTlcdTk2ZDRcdTk3MGJcdTk3MTJcdTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRcdTk3''@;'; put 'put ''ZjBcdTk3ZjhcdTk4MzVcdTk4MmZcdTk4MzJcdTk5MjRcdTk5MWZcdTk5MjdcdTk5MjlcdTk5OWVcdTk5ZWVcdTk5ZWNcdTk5ZTVcdTk5ZTRcdTk5ZjBcdTk5ZTNcdTk5ZWFcdTk5ZTlcdTk5ZTdcdTlhYjlcdTlhYmZcdTlhYjRcdTlhYmJcdTlhZjZcdTlhZmFcdTlhZjlcdTlhZjdcdTliMzNc''@;'; put 'put ''dTliODBcdTliODVcdTliODdcdTliN2NcdTliN2VcdTliN2JcdTliODJcdTliOTNcdTliOTJcdTliOTBcdTliN2FcdTliOTUiXSxbImVjYTEiLCJcdTliN2RcdTliODhcdTlkMjVcdTlkMTdcdTlkMjBcdTlkMWVcdTlkMTRcdTlkMjlcdTlkMWRcdTlkMThcdTlkMjJcdTlkMTBcdTlkMTlcdTlk''@;'; put 'put ''MWZcdTllODhcdTllODZcdTllODdcdTllYWVcdTllYWRcdTllZDVcdTllZDZcdTllZmFcdTlmMTJcdTlmM2RcdTUxMjZcdTUxMjVcdTUxMjJcdTUxMjRcdTUxMjBcdTUxMjlcdTUyZjRcdTU2OTNcdTU2OGNcdTU2OGRcdTU2ODZcdTU2ODRcdTU2ODNcdTU2N2VcdTU2ODJcdTU2N2ZcdTU2ODFc''@;'; put 'put ''dTU4ZDZcdTU4ZDRcdTU4Y2ZcdTU4ZDJcdTViMmRcdTViMjVcdTViMzJcdTViMjNcdTViMmNcdTViMjdcdTViMjZcdTViMmZcdTViMmVcdTViN2JcdTViZjFcdTViZjJcdTVkYjdcdTVlNmNcdTVlNmFcdTVmYmVcdTVmYmJcdTYxYzNcdTYxYjVcdTYxYmNcdTYxZTdcdTYxZTBcdTYxZTVcdTYx''@;'; put 'put ''ZTRcdTYxZThcdTYxZGVcdTY0ZWZcdTY0ZTlcdTY0ZTNcdTY0ZWJcdTY0ZTRcdTY0ZThcdTY1ODFcdTY1ODBcdTY1YjZcdTY1ZGFcdTY2ZDJcdTZhOGRcdTZhOTZcdTZhODFcdTZhYTVcdTZhODlcdTZhOWZcdTZhOWJcdTZhYTFcdTZhOWVcdTZhODdcdTZhOTNcdTZhOGUiXSxbImVkNDAiLCJc''@;'; put 'put ''dTZhOTVcdTZhODNcdTZhYThcdTZhYTRcdTZhOTFcdTZhN2ZcdTZhYTZcdTZhOWFcdTZhODVcdTZhOGNcdTZhOTJcdTZiNWJcdTZiYWRcdTZjMDlcdTZmY2NcdTZmYTlcdTZmZjRcdTZmZDRcdTZmZTNcdTZmZGNcdTZmZWRcdTZmZTdcdTZmZTZcdTZmZGVcdTZmZjJcdTZmZGRcdTZmZTJcdTZm''@;'; put 'put ''ZThcdTcxZTFcdTcxZjFcdTcxZThcdTcxZjJcdTcxZTRcdTcxZjBcdTcxZTJcdTczNzNcdTczNmVcdTczNmZcdTc0OTdcdTc0YjJcdTc0YWJcdTc0OTBcdTc0YWFcdTc0YWRcdTc0YjFcdTc0YTVcdTc0YWZcdTc1MTBcdTc1MTFcdTc1MTJcdTc1MGZcdTc1ODRcdTc2NDNcdTc2NDhcdTc2NDlc''@;'; put 'put ''dTc2NDdcdTc2YTRcdTc2ZTlcdTc3YjVcdTc3YWJcdTc3YjJcdTc3YjdcdTc3YjYiXSxbImVkYTEiLCJcdTc3YjRcdTc3YjFcdTc3YThcdTc3ZjBcdTc4ZjNcdTc4ZmRcdTc5MDJcdTc4ZmJcdTc4ZmNcdTc4ZjJcdTc5MDVcdTc4ZjlcdTc4ZmVcdTc5MDRcdTc5YWJcdTc5YThcdTdhNWNcdTdh''@;'; put 'put ''NWJcdTdhNTZcdTdhNThcdTdhNTRcdTdhNWFcdTdhYmVcdTdhYzBcdTdhYzFcdTdjMDVcdTdjMGZcdTdiZjJcdTdjMDBcdTdiZmZcdTdiZmJcdTdjMGVcdTdiZjRcdTdjMGJcdTdiZjNcdTdjMDJcdTdjMDlcdTdjMDNcdTdjMDFcdTdiZjhcdTdiZmRcdTdjMDZcdTdiZjBcdTdiZjFcdTdjMTBc''@;'; put 'put ''dTdjMGFcdTdjZThcdTdlMmRcdTdlM2NcdTdlNDJcdTdlMzNcdTk4NDhcdTdlMzhcdTdlMmFcdTdlNDlcdTdlNDBcdTdlNDdcdTdlMjlcdTdlNGNcdTdlMzBcdTdlM2JcdTdlMzZcdTdlNDRcdTdlM2FcdTdmNDVcdTdmN2ZcdTdmN2VcdTdmN2RcdTdmZjRcdTdmZjJcdTgwMmNcdTgxYmJcdTgx''@;'; put 'put ''YzRcdTgxY2NcdTgxY2FcdTgxYzVcdTgxYzdcdTgxYmNcdTgxZTlcdTgyNWJcdTgyNWFcdTgyNWNcdTg1ODNcdTg1ODBcdTg1OGZcdTg1YTdcdTg1OTVcdTg1YTBcdTg1OGJcdTg1YTNcdTg1N2JcdTg1YTRcdTg1OWFcdTg1OWUiXSxbImVlNDAiLCJcdTg1NzdcdTg1N2NcdTg1ODlcdTg1YTFc''@;'; put 'put ''dTg1N2FcdTg1NzhcdTg1NTdcdTg1OGVcdTg1OTZcdTg1ODZcdTg1OGRcdTg1OTlcdTg1OWRcdTg1ODFcdTg1YTJcdTg1ODJcdTg1ODhcdTg1ODVcdTg1NzlcdTg1NzZcdTg1OThcdTg1OTBcdTg1OWZcdTg2NjhcdTg3YmVcdTg3YWFcdTg3YWRcdTg3YzVcdTg3YjBcdTg3YWNcdTg3YjlcdTg3''@;'; put 'put ''YjVcdTg3YmNcdTg3YWVcdTg3YzlcdTg3YzNcdTg3YzJcdTg3Y2NcdTg3YjdcdTg3YWZcdTg3YzRcdTg3Y2FcdTg3YjRcdTg3YjZcdTg3YmZcdTg3YjhcdTg3YmRcdTg3ZGVcdTg3YjJcdTg5MzVcdTg5MzNcdTg5M2NcdTg5M2VcdTg5NDFcdTg5NTJcdTg5MzdcdTg5NDJcdTg5YWRcdTg5YWZc''@;'; put 'put ''dTg5YWVcdTg5ZjJcdTg5ZjNcdThiMWUiXSxbImVlYTEiLCJcdThiMThcdThiMTZcdThiMTFcdThiMDVcdThiMGJcdThiMjJcdThiMGZcdThiMTJcdThiMTVcdThiMDdcdThiMGRcdThiMDhcdThiMDZcdThiMWNcdThiMTNcdThiMWFcdThjNGZcdThjNzBcdThjNzJcdThjNzFcdThjNmZcdThj''@;'; put 'put ''OTVcdThjOTRcdThjZjlcdThkNmZcdThlNGVcdThlNGRcdThlNTNcdThlNTBcdThlNGNcdThlNDdcdThmNDNcdThmNDBcdTkwODVcdTkwN2VcdTkxMzhcdTkxOWFcdTkxYTJcdTkxOWJcdTkxOTlcdTkxOWZcdTkxYTFcdTkxOWRcdTkxYTBcdTkzYTFcdTkzODNcdTkzYWZcdTkzNjRcdTkzNTZc''@;'; put 'put ''dTkzNDdcdTkzN2NcdTkzNThcdTkzNWNcdTkzNzZcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNjBcdTkzNmRcdTkzOGZcdTkzNGNcdTkzNmFcdTkzNzlcdTkzNTdcdTkzNTVcdTkzNTJcdTkzNGZcdTkzNzFcdTkzNzdcdTkzN2JcdTkzNjFcdTkzNWVcdTkzNjNcdTkzNjdcdTkzODBcdTkzNGVcdTkz''@;'; put 'put ''NTlcdTk1YzdcdTk1YzBcdTk1YzlcdTk1YzNcdTk1YzVcdTk1YjdcdTk2YWVcdTk2YjBcdTk2YWNcdTk3MjBcdTk3MWZcdTk3MThcdTk3MWRcdTk3MTlcdTk3OWFcdTk3YTFcdTk3OWMiXSxbImVmNDAiLCJcdTk3OWVcdTk3OWRcdTk3ZDVcdTk3ZDRcdTk3ZjFcdTk4NDFcdTk4NDRcdTk4NGFc''@;'; put 'put ''dTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5MmJcdTk5MmNcdTk5MmFcdTk5MzNcdTk5MzJcdTk5MmZcdTk5MmRcdTk5MzFcdTk5MzBcdTk5OThcdTk5YTNcdTk5YTFcdTlhMDJcdTk5ZmFcdTk5ZjRcdTk5ZjdcdTk5ZjlcdTk5ZjhcdTk5ZjZcdTk5ZmJcdTk5ZmRcdTk5ZmVcdTk5ZmNcdTlh''@;'; put 'put ''MDNcdTlhYmVcdTlhZmVcdTlhZmRcdTliMDFcdTlhZmNcdTliNDhcdTliOWFcdTliYThcdTliOWVcdTliOWJcdTliYTZcdTliYTFcdTliYTVcdTliYTRcdTliODZcdTliYTJcdTliYTBcdTliYWZcdTlkMzNcdTlkNDFcdTlkNjdcdTlkMzZcdTlkMmVcdTlkMmZcdTlkMzFcdTlkMzhcdTlkMzAi''@;'; put 'put ''XSxbImVmYTEiLCJcdTlkNDVcdTlkNDJcdTlkNDNcdTlkM2VcdTlkMzdcdTlkNDBcdTlkM2RcdTdmZjVcdTlkMmRcdTllOGFcdTllODlcdTllOGRcdTllYjBcdTllYzhcdTllZGFcdTllZmJcdTllZmZcdTlmMjRcdTlmMjNcdTlmMjJcdTlmNTRcdTlmYTBcdTUxMzFcdTUxMmRcdTUxMmVcdTU2''@;'; put 'put ''OThcdTU2OWNcdTU2OTdcdTU2OWFcdTU2OWRcdTU2OTlcdTU5NzBcdTViM2NcdTVjNjlcdTVjNmFcdTVkYzBcdTVlNmRcdTVlNmVcdTYxZDhcdTYxZGZcdTYxZWRcdTYxZWVcdTYxZjFcdTYxZWFcdTYxZjBcdTYxZWJcdTYxZDZcdTYxZTlcdTY0ZmZcdTY1MDRcdTY0ZmRcdTY0ZjhcdTY1MDFc''@;'; put 'put ''dTY1MDNcdTY0ZmNcdTY1OTRcdTY1ZGJcdTY2ZGFcdTY2ZGJcdTY2ZDhcdTZhYzVcdTZhYjlcdTZhYmRcdTZhZTFcdTZhYzZcdTZhYmFcdTZhYjZcdTZhYjdcdTZhYzdcdTZhYjRcdTZhYWRcdTZiNWVcdTZiYzlcdTZjMGJcdTcwMDdcdTcwMGNcdTcwMGRcdTcwMDFcdTcwMDVcdTcwMTRcdTcw''@;'; put 'put ''MGVcdTZmZmZcdTcwMDBcdTZmZmJcdTcwMjZcdTZmZmNcdTZmZjdcdTcwMGFcdTcyMDFcdTcxZmZcdTcxZjlcdTcyMDNcdTcxZmRcdTczNzYiXSxbImYwNDAiLCJcdTc0YjhcdTc0YzBcdTc0YjVcdTc0YzFcdTc0YmVcdTc0YjZcdTc0YmJcdTc0YzJcdTc1MTRcdTc1MTNcdTc2NWNcdTc2NjRc''@;'; put 'put ''dTc2NTlcdTc2NTBcdTc2NTNcdTc2NTdcdTc2NWFcdTc2YTZcdTc2YmRcdTc2ZWNcdTc3YzJcdTc3YmFcdTc4ZmZcdTc5MGNcdTc5MTNcdTc5MTRcdTc5MDlcdTc5MTBcdTc5MTJcdTc5MTFcdTc5YWRcdTc5YWNcdTdhNWZcdTdjMWNcdTdjMjlcdTdjMTlcdTdjMjBcdTdjMWZcdTdjMmRcdTdj''@;'; put 'put ''MWRcdTdjMjZcdTdjMjhcdTdjMjJcdTdjMjVcdTdjMzBcdTdlNWNcdTdlNTBcdTdlNTZcdTdlNjNcdTdlNThcdTdlNjJcdTdlNWZcdTdlNTFcdTdlNjBcdTdlNTdcdTdlNTNcdTdmYjVcdTdmYjNcdTdmZjdcdTdmZjhcdTgwNzVcdTgxZDFcdTgxZDIiXSxbImYwYTEiLCJcdTgxZDBcdTgyNWZc''@;'; put 'put ''dTgyNWVcdTg1YjRcdTg1YzZcdTg1YzBcdTg1YzNcdTg1YzJcdTg1YjNcdTg1YjVcdTg1YmRcdTg1YzdcdTg1YzRcdTg1YmZcdTg1Y2JcdTg1Y2VcdTg1YzhcdTg1YzVcdTg1YjFcdTg1YjZcdTg1ZDJcdTg2MjRcdTg1YjhcdTg1YjdcdTg1YmVcdTg2NjlcdTg3ZTdcdTg3ZTZcdTg3ZTJcdTg3''@;'; put 'put ''ZGJcdTg3ZWJcdTg3ZWFcdTg3ZTVcdTg3ZGZcdTg3ZjNcdTg3ZTRcdTg3ZDRcdTg3ZGNcdTg3ZDNcdTg3ZWRcdTg3ZDhcdTg3ZTNcdTg3YTRcdTg3ZDdcdTg3ZDlcdTg4MDFcdTg3ZjRcdTg3ZThcdTg3ZGRcdTg5NTNcdTg5NGJcdTg5NGZcdTg5NGNcdTg5NDZcdTg5NTBcdTg5NTFcdTg5NDlc''@;'; put 'put ''dThiMmFcdThiMjdcdThiMjNcdThiMzNcdThiMzBcdThiMzVcdThiNDdcdThiMmZcdThiM2NcdThiM2VcdThiMzFcdThiMjVcdThiMzdcdThiMjZcdThiMzZcdThiMmVcdThiMjRcdThiM2JcdThiM2RcdThiM2FcdThjNDJcdThjNzVcdThjOTlcdThjOThcdThjOTdcdThjZmVcdThkMDRcdThk''@;'; put 'put ''MDJcdThkMDBcdThlNWNcdThlNjJcdThlNjBcdThlNTdcdThlNTZcdThlNWVcdThlNjVcdThlNjciXSxbImYxNDAiLCJcdThlNWJcdThlNWFcdThlNjFcdThlNWRcdThlNjlcdThlNTRcdThmNDZcdThmNDdcdThmNDhcdThmNGJcdTkxMjhcdTkxM2FcdTkxM2JcdTkxM2VcdTkxYThcdTkxYTVc''@;'; put 'put ''dTkxYTdcdTkxYWZcdTkxYWFcdTkzYjVcdTkzOGNcdTkzOTJcdTkzYjdcdTkzOWJcdTkzOWRcdTkzODlcdTkzYTdcdTkzOGVcdTkzYWFcdTkzOWVcdTkzYTZcdTkzOTVcdTkzODhcdTkzOTlcdTkzOWZcdTkzOGRcdTkzYjFcdTkzOTFcdTkzYjJcdTkzYTRcdTkzYThcdTkzYjRcdTkzYTNcdTkz''@;'; put 'put ''YTVcdTk1ZDJcdTk1ZDNcdTk1ZDFcdTk2YjNcdTk2ZDdcdTk2ZGFcdTVkYzJcdTk2ZGZcdTk2ZDhcdTk2ZGRcdTk3MjNcdTk3MjJcdTk3MjVcdTk3YWNcdTk3YWVcdTk3YThcdTk3YWJcdTk3YTRcdTk3YWEiXSxbImYxYTEiLCJcdTk3YTJcdTk3YTVcdTk3ZDdcdTk3ZDlcdTk3ZDZcdTk3ZDhc''@;'; put 'put ''dTk3ZmFcdTk4NTBcdTk4NTFcdTk4NTJcdTk4YjhcdTk5NDFcdTk5M2NcdTk5M2FcdTlhMGZcdTlhMGJcdTlhMDlcdTlhMGRcdTlhMDRcdTlhMTFcdTlhMGFcdTlhMDVcdTlhMDdcdTlhMDZcdTlhYzBcdTlhZGNcdTliMDhcdTliMDRcdTliMDVcdTliMjlcdTliMzVcdTliNGFcdTliNGNcdTli''@;'; put 'put ''NGJcdTliYzdcdTliYzZcdTliYzNcdTliYmZcdTliYzFcdTliYjVcdTliYjhcdTliZDNcdTliYjZcdTliYzRcdTliYjlcdTliYmRcdTlkNWNcdTlkNTNcdTlkNGZcdTlkNGFcdTlkNWJcdTlkNGJcdTlkNTlcdTlkNTZcdTlkNGNcdTlkNTdcdTlkNTJcdTlkNTRcdTlkNWZcdTlkNThcdTlkNWFc''@;'; put 'put ''dTllOGVcdTllOGNcdTllZGZcdTlmMDFcdTlmMDBcdTlmMTZcdTlmMjVcdTlmMmJcdTlmMmFcdTlmMjlcdTlmMjhcdTlmNGNcdTlmNTVcdTUxMzRcdTUxMzVcdTUyOTZcdTUyZjdcdTUzYjRcdTU2YWJcdTU2YWRcdTU2YTZcdTU2YTdcdTU2YWFcdTU2YWNcdTU4ZGFcdTU4ZGRcdTU4ZGJcdTU5''@;'; put 'put ''MTJcdTViM2RcdTViM2VcdTViM2ZcdTVkYzNcdTVlNzAiXSxbImYyNDAiLCJcdTVmYmZcdTYxZmJcdTY1MDdcdTY1MTBcdTY1MGRcdTY1MDlcdTY1MGNcdTY1MGVcdTY1ODRcdTY1ZGVcdTY1ZGRcdTY2ZGVcdTZhZTdcdTZhZTBcdTZhY2NcdTZhZDFcdTZhZDlcdTZhY2JcdTZhZGZcdTZhZGNc''@;'; put 'put ''dTZhZDBcdTZhZWJcdTZhY2ZcdTZhY2RcdTZhZGVcdTZiNjBcdTZiYjBcdTZjMGNcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMmJcdTcwMjFcdTcwMjJcdTcwMjNcdTcwMjlcdTcwMTdcdTcwMjRcdTcwMWNcdTcwMmFcdTcyMGNcdTcyMGFcdTcyMDdcdTcyMDJcdTcyMDVcdTcyYTVcdTcy''@;'; put 'put ''YTZcdTcyYTRcdTcyYTNcdTcyYTFcdTc0Y2JcdTc0YzVcdTc0YjdcdTc0YzNcdTc1MTZcdTc2NjBcdTc3YzlcdTc3Y2FcdTc3YzRcdTc3ZjFcdTc5MWRcdTc5MWIiXSxbImYyYTEiLCJcdTc5MjFcdTc5MWNcdTc5MTdcdTc5MWVcdTc5YjBcdTdhNjdcdTdhNjhcdTdjMzNcdTdjM2NcdTdjMzlc''@;'; put 'put ''dTdjMmNcdTdjM2JcdTdjZWNcdTdjZWFcdTdlNzZcdTdlNzVcdTdlNzhcdTdlNzBcdTdlNzdcdTdlNmZcdTdlN2FcdTdlNzJcdTdlNzRcdTdlNjhcdTdmNGJcdTdmNGFcdTdmODNcdTdmODZcdTdmYjdcdTdmZmRcdTdmZmVcdTgwNzhcdTgxZDdcdTgxZDVcdTgyNjRcdTgyNjFcdTgyNjNcdTg1''@;'; put 'put ''ZWJcdTg1ZjFcdTg1ZWRcdTg1ZDlcdTg1ZTFcdTg1ZThcdTg1ZGFcdTg1ZDdcdTg1ZWNcdTg1ZjJcdTg1ZjhcdTg1ZDhcdTg1ZGZcdTg1ZTNcdTg1ZGNcdTg1ZDFcdTg1ZjBcdTg1ZTZcdTg1ZWZcdTg1ZGVcdTg1ZTJcdTg4MDBcdTg3ZmFcdTg4MDNcdTg3ZjZcdTg3ZjdcdTg4MDlcdTg4MGNc''@;'; put 'put ''dTg4MGJcdTg4MDZcdTg3ZmNcdTg4MDhcdTg3ZmZcdTg4MGFcdTg4MDJcdTg5NjJcdTg5NWFcdTg5NWJcdTg5NTdcdTg5NjFcdTg5NWNcdTg5NThcdTg5NWRcdTg5NTlcdTg5ODhcdTg5YjdcdTg5YjZcdTg5ZjZcdThiNTBcdThiNDhcdThiNGFcdThiNDBcdThiNTNcdThiNTZcdThiNTRcdThi''@;'; put 'put ''NGJcdThiNTUiXSxbImYzNDAiLCJcdThiNTFcdThiNDJcdThiNTJcdThiNTdcdThjNDNcdThjNzdcdThjNzZcdThjOWFcdThkMDZcdThkMDdcdThkMDlcdThkYWNcdThkYWFcdThkYWRcdThkYWJcdThlNmRcdThlNzhcdThlNzNcdThlNmFcdThlNmZcdThlN2JcdThlYzJcdThmNTJcdThmNTFc''@;'; put 'put ''dThmNGZcdThmNTBcdThmNTNcdThmYjRcdTkxNDBcdTkxM2ZcdTkxYjBcdTkxYWRcdTkzZGVcdTkzYzdcdTkzY2ZcdTkzYzJcdTkzZGFcdTkzZDBcdTkzZjlcdTkzZWNcdTkzY2NcdTkzZDlcdTkzYTlcdTkzZTZcdTkzY2FcdTkzZDRcdTkzZWVcdTkzZTNcdTkzZDVcdTkzYzRcdTkzY2VcdTkz''@;'; put 'put ''YzBcdTkzZDJcdTkzZTdcdTk1N2RcdTk1ZGFcdTk1ZGJcdTk2ZTFcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MjhcdTk3MjYiXSxbImYzYTEiLCJcdTk3YjNcdTk3YjdcdTk3YjZcdTk3ZGRcdTk3ZGVcdTk3ZGZcdTk4NWNcdTk4NTlcdTk4NWRcdTk4NTdcdTk4YmZcdTk4YmRcdTk4YmJcdTk4YmVc''@;'; put 'put ''dTk5NDhcdTk5NDdcdTk5NDNcdTk5YTZcdTk5YTdcdTlhMWFcdTlhMTVcdTlhMjVcdTlhMWRcdTlhMjRcdTlhMWJcdTlhMjJcdTlhMjBcdTlhMjdcdTlhMjNcdTlhMWVcdTlhMWNcdTlhMTRcdTlhYzJcdTliMGJcdTliMGFcdTliMGVcdTliMGNcdTliMzdcdTliZWFcdTliZWJcdTliZTBcdTli''@;'; put 'put ''ZGVcdTliZTRcdTliZTZcdTliZTJcdTliZjBcdTliZDRcdTliZDdcdTliZWNcdTliZGNcdTliZDlcdTliZTVcdTliZDVcdTliZTFcdTliZGFcdTlkNzdcdTlkODFcdTlkOGFcdTlkODRcdTlkODhcdTlkNzFcdTlkODBcdTlkNzhcdTlkODZcdTlkOGJcdTlkOGNcdTlkN2RcdTlkNmJcdTlkNzRc''@;'; put 'put ''dTlkNzVcdTlkNzBcdTlkNjlcdTlkODVcdTlkNzNcdTlkN2JcdTlkODJcdTlkNmZcdTlkNzlcdTlkN2ZcdTlkODdcdTlkNjhcdTllOTRcdTllOTFcdTllYzBcdTllZmNcdTlmMmRcdTlmNDBcdTlmNDFcdTlmNGRcdTlmNTZcdTlmNTdcdTlmNThcdTUzMzdcdTU2YjIiXSxbImY0NDAiLCJcdTU2''@;'; put 'put ''YjVcdTU2YjNcdTU4ZTNcdTViNDVcdTVkYzZcdTVkYzdcdTVlZWVcdTVlZWZcdTVmYzBcdTVmYzFcdTYxZjlcdTY1MTdcdTY1MTZcdTY1MTVcdTY1MTNcdTY1ZGZcdTY2ZThcdTY2ZTNcdTY2ZTRcdTZhZjNcdTZhZjBcdTZhZWFcdTZhZThcdTZhZjlcdTZhZjFcdTZhZWVcdTZhZWZcdTcwM2Nc''@;'; put 'put ''dTcwMzVcdTcwMmZcdTcwMzdcdTcwMzRcdTcwMzFcdTcwNDJcdTcwMzhcdTcwM2ZcdTcwM2FcdTcwMzlcdTcwNDBcdTcwM2JcdTcwMzNcdTcwNDFcdTcyMTNcdTcyMTRcdTcyYThcdTczN2RcdTczN2NcdTc0YmFcdTc2YWJcdTc2YWFcdTc2YmVcdTc2ZWRcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3''@;'; put 'put ''Y2RcdTc3ZjJcdTc5MjVcdTc5MjNcdTc5MjdcdTc5MjhcdTc5MjRcdTc5MjkiXSxbImY0YTEiLCJcdTc5YjJcdTdhNmVcdTdhNmNcdTdhNmRcdTdhZjdcdTdjNDlcdTdjNDhcdTdjNGFcdTdjNDdcdTdjNDVcdTdjZWVcdTdlN2JcdTdlN2VcdTdlODFcdTdlODBcdTdmYmFcdTdmZmZcdTgwNzlc''@;'; put 'put ''dTgxZGJcdTgxZDlcdTgyMGJcdTgyNjhcdTgyNjlcdTg2MjJcdTg1ZmZcdTg2MDFcdTg1ZmVcdTg2MWJcdTg2MDBcdTg1ZjZcdTg2MDRcdTg2MDlcdTg2MDVcdTg2MGNcdTg1ZmRcdTg4MTlcdTg4MTBcdTg4MTFcdTg4MTdcdTg4MTNcdTg4MTZcdTg5NjNcdTg5NjZcdTg5YjlcdTg5ZjdcdThi''@;'; put 'put ''NjBcdThiNmFcdThiNWRcdThiNjhcdThiNjNcdThiNjVcdThiNjdcdThiNmRcdThkYWVcdThlODZcdThlODhcdThlODRcdThmNTlcdThmNTZcdThmNTdcdThmNTVcdThmNThcdThmNWFcdTkwOGRcdTkxNDNcdTkxNDFcdTkxYjdcdTkxYjVcdTkxYjJcdTkxYjNcdTk0MGJcdTk0MTNcdTkzZmJc''@;'; put 'put ''dTk0MjBcdTk0MGZcdTk0MTRcdTkzZmVcdTk0MTVcdTk0MTBcdTk0MjhcdTk0MTlcdTk0MGRcdTkzZjVcdTk0MDBcdTkzZjdcdTk0MDdcdTk0MGVcdTk0MTZcdTk0MTJcdTkzZmFcdTk0MDlcdTkzZjhcdTk0MGFcdTkzZmYiXSxbImY1NDAiLCJcdTkzZmNcdTk0MGNcdTkzZjZcdTk0MTFcdTk0''@;'; put 'put ''MDZcdTk1ZGVcdTk1ZTBcdTk1ZGZcdTk3MmVcdTk3MmZcdTk3YjlcdTk3YmJcdTk3ZmRcdTk3ZmVcdTk4NjBcdTk4NjJcdTk4NjNcdTk4NWZcdTk4YzFcdTk4YzJcdTk5NTBcdTk5NGVcdTk5NTlcdTk5NGNcdTk5NGJcdTk5NTNcdTlhMzJcdTlhMzRcdTlhMzFcdTlhMmNcdTlhMmFcdTlhMzZc''@;'; put 'put ''dTlhMjlcdTlhMmVcdTlhMzhcdTlhMmRcdTlhYzdcdTlhY2FcdTlhYzZcdTliMTBcdTliMTJcdTliMTFcdTljMGJcdTljMDhcdTliZjdcdTljMDVcdTljMTJcdTliZjhcdTljNDBcdTljMDdcdTljMGVcdTljMDZcdTljMTdcdTljMTRcdTljMDlcdTlkOWZcdTlkOTlcdTlkYTRcdTlkOWRcdTlk''@;'; put 'put ''OTJcdTlkOThcdTlkOTBcdTlkOWIiXSxbImY1YTEiLCJcdTlkYTBcdTlkOTRcdTlkOWNcdTlkYWFcdTlkOTdcdTlkYTFcdTlkOWFcdTlkYTJcdTlkYThcdTlkOWVcdTlkYTNcdTlkYmZcdTlkYTlcdTlkOTZcdTlkYTZcdTlkYTdcdTllOTlcdTllOWJcdTllOWFcdTllZTVcdTllZTRcdTllZTdc''@;'; put 'put ''dTllZTZcdTlmMzBcdTlmMmVcdTlmNWJcdTlmNjBcdTlmNWVcdTlmNWRcdTlmNTlcdTlmOTFcdTUxM2FcdTUxMzlcdTUyOThcdTUyOTdcdTU2YzNcdTU2YmRcdTU2YmVcdTViNDhcdTViNDdcdTVkY2JcdTVkY2ZcdTVlZjFcdTYxZmRcdTY1MWJcdTZiMDJcdTZhZmNcdTZiMDNcdTZhZjhcdTZi''@;'; put 'put ''MDBcdTcwNDNcdTcwNDRcdTcwNGFcdTcwNDhcdTcwNDlcdTcwNDVcdTcwNDZcdTcyMWRcdTcyMWFcdTcyMTlcdTczN2VcdTc1MTdcdTc2NmFcdTc3ZDBcdTc5MmRcdTc5MzFcdTc5MmZcdTdjNTRcdTdjNTNcdTdjZjJcdTdlOGFcdTdlODdcdTdlODhcdTdlOGJcdTdlODZcdTdlOGRcdTdmNGRc''@;'; put 'put ''dTdmYmJcdTgwMzBcdTgxZGRcdTg2MThcdTg2MmFcdTg2MjZcdTg2MWZcdTg2MjNcdTg2MWNcdTg2MTlcdTg2MjdcdTg2MmVcdTg2MjFcdTg2MjBcdTg2MjlcdTg2MWVcdTg2MjUiXSxbImY2NDAiLCJcdTg4MjlcdTg4MWRcdTg4MWJcdTg4MjBcdTg4MjRcdTg4MWNcdTg4MmJcdTg4NGFcdTg5''@;'; put 'put ''NmRcdTg5NjlcdTg5NmVcdTg5NmJcdTg5ZmFcdThiNzlcdThiNzhcdThiNDVcdThiN2FcdThiN2JcdThkMTBcdThkMTRcdThkYWZcdThlOGVcdThlOGNcdThmNWVcdThmNWJcdThmNWRcdTkxNDZcdTkxNDRcdTkxNDVcdTkxYjlcdTk0M2ZcdTk0M2JcdTk0MzZcdTk0MjlcdTk0M2RcdTk0M2Nc''@;'; put 'put ''dTk0MzBcdTk0MzlcdTk0MmFcdTk0MzdcdTk0MmNcdTk0NDBcdTk0MzFcdTk1ZTVcdTk1ZTRcdTk1ZTNcdTk3MzVcdTk3M2FcdTk3YmZcdTk3ZTFcdTk4NjRcdTk4YzlcdTk4YzZcdTk4YzBcdTk5NThcdTk5NTZcdTlhMzlcdTlhM2RcdTlhNDZcdTlhNDRcdTlhNDJcdTlhNDFcdTlhM2EiXSxb''@;'; put 'put ''ImY2YTEiLCJcdTlhM2ZcdTlhY2RcdTliMTVcdTliMTdcdTliMThcdTliMTZcdTliM2FcdTliNTJcdTljMmJcdTljMWRcdTljMWNcdTljMmNcdTljMjNcdTljMjhcdTljMjlcdTljMjRcdTljMjFcdTlkYjdcdTlkYjZcdTlkYmNcdTlkYzFcdTlkYzdcdTlkY2FcdTlkY2ZcdTlkYmVcdTlkYzVc''@;'; put 'put ''dTlkYzNcdTlkYmJcdTlkYjVcdTlkY2VcdTlkYjlcdTlkYmFcdTlkYWNcdTlkYzhcdTlkYjFcdTlkYWRcdTlkY2NcdTlkYjNcdTlkY2RcdTlkYjJcdTllN2FcdTllOWNcdTllZWJcdTllZWVcdTllZWRcdTlmMWJcdTlmMThcdTlmMWFcdTlmMzFcdTlmNGVcdTlmNjVcdTlmNjRcdTlmOTJcdTRl''@;'; put 'put ''YjlcdTU2YzZcdTU2YzVcdTU2Y2JcdTU5NzFcdTViNGJcdTViNGNcdTVkZDVcdTVkZDFcdTVlZjJcdTY1MjFcdTY1MjBcdTY1MjZcdTY1MjJcdTZiMGJcdTZiMDhcdTZiMDlcdTZjMGRcdTcwNTVcdTcwNTZcdTcwNTdcdTcwNTJcdTcyMWVcdTcyMWZcdTcyYTlcdTczN2ZcdTc0ZDhcdTc0ZDVc''@;'; put 'put ''dTc0ZDlcdTc0ZDdcdTc2NmRcdTc2YWRcdTc5MzVcdTc5YjRcdTdhNzBcdTdhNzFcdTdjNTdcdTdjNWNcdTdjNTlcdTdjNWJcdTdjNWEiXSxbImY3NDAiLCJcdTdjZjRcdTdjZjFcdTdlOTFcdTdmNGZcdTdmODdcdTgxZGVcdTgyNmJcdTg2MzRcdTg2MzVcdTg2MzNcdTg2MmNcdTg2MzJcdTg2''@;'; put 'put ''MzZcdTg4MmNcdTg4MjhcdTg4MjZcdTg4MmFcdTg4MjVcdTg5NzFcdTg5YmZcdTg5YmVcdTg5ZmJcdThiN2VcdThiODRcdThiODJcdThiODZcdThiODVcdThiN2ZcdThkMTVcdThlOTVcdThlOTRcdThlOWFcdThlOTJcdThlOTBcdThlOTZcdThlOTdcdThmNjBcdThmNjJcdTkxNDdcdTk0NGNc''@;'; put 'put ''dTk0NTBcdTk0NGFcdTk0NGJcdTk0NGZcdTk0NDdcdTk0NDVcdTk0NDhcdTk0NDlcdTk0NDZcdTk3M2ZcdTk3ZTNcdTk4NmFcdTk4NjlcdTk4Y2JcdTk5NTRcdTk5NWJcdTlhNGVcdTlhNTNcdTlhNTRcdTlhNGNcdTlhNGZcdTlhNDhcdTlhNGEiXSxbImY3YTEiLCJcdTlhNDlcdTlhNTJcdTlh''@;'; put 'put ''NTBcdTlhZDBcdTliMTlcdTliMmJcdTliM2JcdTliNTZcdTliNTVcdTljNDZcdTljNDhcdTljM2ZcdTljNDRcdTljMzlcdTljMzNcdTljNDFcdTljM2NcdTljMzdcdTljMzRcdTljMzJcdTljM2RcdTljMzZcdTlkZGJcdTlkZDJcdTlkZGVcdTlkZGFcdTlkY2JcdTlkZDBcdTlkZGNcdTlkZDFc''@;'; put 'put ''dTlkZGZcdTlkZTlcdTlkZDlcdTlkZDhcdTlkZDZcdTlkZjVcdTlkZDVcdTlkZGRcdTllYjZcdTllZjBcdTlmMzVcdTlmMzNcdTlmMzJcdTlmNDJcdTlmNmJcdTlmOTVcdTlmYTJcdTUxM2RcdTUyOTlcdTU4ZThcdTU4ZTdcdTU5NzJcdTViNGRcdTVkZDhcdTg4MmZcdTVmNGZcdTYyMDFcdTYy''@;'; put 'put ''MDNcdTYyMDRcdTY1MjlcdTY1MjVcdTY1OTZcdTY2ZWJcdTZiMTFcdTZiMTJcdTZiMGZcdTZiY2FcdTcwNWJcdTcwNWFcdTcyMjJcdTczODJcdTczODFcdTczODNcdTc2NzBcdTc3ZDRcdTdjNjdcdTdjNjZcdTdlOTVcdTgyNmNcdTg2M2FcdTg2NDBcdTg2MzlcdTg2M2NcdTg2MzFcdTg2M2Jc''@;'; put 'put ''dTg2M2VcdTg4MzBcdTg4MzJcdTg4MmVcdTg4MzNcdTg5NzZcdTg5NzRcdTg5NzNcdTg5ZmUiXSxbImY4NDAiLCJcdThiOGNcdThiOGVcdThiOGJcdThiODhcdThjNDVcdThkMTlcdThlOThcdThmNjRcdThmNjNcdTkxYmNcdTk0NjJcdTk0NTVcdTk0NWRcdTk0NTdcdTk0NWVcdTk3YzRcdTk3''@;'; put 'put ''YzVcdTk4MDBcdTlhNTZcdTlhNTlcdTliMWVcdTliMWZcdTliMjBcdTljNTJcdTljNThcdTljNTBcdTljNGFcdTljNGRcdTljNGJcdTljNTVcdTljNTlcdTljNGNcdTljNGVcdTlkZmJcdTlkZjdcdTlkZWZcdTlkZTNcdTlkZWJcdTlkZjhcdTlkZTRcdTlkZjZcdTlkZTFcdTlkZWVcdTlkZTZc''@;'; put 'put ''dTlkZjJcdTlkZjBcdTlkZTJcdTlkZWNcdTlkZjRcdTlkZjNcdTlkZThcdTlkZWRcdTllYzJcdTllZDBcdTllZjJcdTllZjNcdTlmMDZcdTlmMWNcdTlmMzhcdTlmMzdcdTlmMzZcdTlmNDNcdTlmNGYiXSxbImY4YTEiLCJcdTlmNzFcdTlmNzBcdTlmNmVcdTlmNmZcdTU2ZDNcdTU2Y2RcdTVi''@;'; put 'put ''NGVcdTVjNmRcdTY1MmRcdTY2ZWRcdTY2ZWVcdTZiMTNcdTcwNWZcdTcwNjFcdTcwNWRcdTcwNjBcdTcyMjNcdTc0ZGJcdTc0ZTVcdTc3ZDVcdTc5MzhcdTc5YjdcdTc5YjZcdTdjNmFcdTdlOTdcdTdmODlcdTgyNmRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NGJcdThiOTRcdThiOTVc''@;'; put 'put ''dThlOWVcdThlOWZcdThlYTBcdThlOWRcdTkxYmVcdTkxYmRcdTkxYzJcdTk0NmJcdTk0NjhcdTk0NjlcdTk2ZTVcdTk3NDZcdTk3NDNcdTk3NDdcdTk3YzdcdTk3ZTVcdTlhNWVcdTlhZDVcdTliNTlcdTljNjNcdTljNjdcdTljNjZcdTljNjJcdTljNWVcdTljNjBcdTllMDJcdTlkZmVcdTll''@;'; put 'put ''MDdcdTllMDNcdTllMDZcdTllMDVcdTllMDBcdTllMDFcdTllMDlcdTlkZmZcdTlkZmRcdTllMDRcdTllYTBcdTlmMWVcdTlmNDZcdTlmNzRcdTlmNzVcdTlmNzZcdTU2ZDRcdTY1MmVcdTY1YjhcdTZiMThcdTZiMTlcdTZiMTdcdTZiMWFcdTcwNjJcdTcyMjZcdTcyYWFcdTc3ZDhcdTc3ZDlc''@;'; put 'put ''dTc5MzlcdTdjNjlcdTdjNmJcdTdjZjZcdTdlOWEiXSxbImY5NDAiLCJcdTdlOThcdTdlOWJcdTdlOTlcdTgxZTBcdTgxZTFcdTg2NDZcdTg2NDdcdTg2NDhcdTg5NzlcdTg5N2FcdTg5N2NcdTg5N2JcdTg5ZmZcdThiOThcdThiOTlcdThlYTVcdThlYTRcdThlYTNcdTk0NmVcdTk0NmRcdTk0''@;'; put 'put ''NmZcdTk0NzFcdTk0NzNcdTk3NDlcdTk4NzJcdTk5NWZcdTljNjhcdTljNmVcdTljNmRcdTllMGJcdTllMGRcdTllMTBcdTllMGZcdTllMTJcdTllMTFcdTllYTFcdTllZjVcdTlmMDlcdTlmNDdcdTlmNzhcdTlmN2JcdTlmN2FcdTlmNzlcdTU3MWVcdTcwNjZcdTdjNmZcdTg4M2NcdThkYjJc''@;'; put 'put ''dThlYTZcdTkxYzNcdTk0NzRcdTk0NzhcdTk0NzZcdTk0NzVcdTlhNjBcdTljNzRcdTljNzNcdTljNzFcdTljNzVcdTllMTRcdTllMTNcdTllZjZcdTlmMGEiXSxbImY5YTEiLCJcdTlmYTRcdTcwNjhcdTcwNjVcdTdjZjdcdTg2NmFcdTg4M2VcdTg4M2RcdTg4M2ZcdThiOWVcdThjOWNcdThl''@;'; put 'put ''YTlcdThlYzlcdTk3NGJcdTk4NzNcdTk4NzRcdTk4Y2NcdTk5NjFcdTk5YWJcdTlhNjRcdTlhNjZcdTlhNjdcdTliMjRcdTllMTVcdTllMTdcdTlmNDhcdTYyMDdcdTZiMWVcdTcyMjdcdTg2NGNcdThlYThcdTk0ODJcdTk0ODBcdTk0ODFcdTlhNjlcdTlhNjhcdTliMmVcdTllMTlcdTcyMjlc''@;'; put 'put ''dTg2NGJcdThiOWZcdTk0ODNcdTljNzlcdTllYjdcdTc2NzVcdTlhNmJcdTljN2FcdTllMWRcdTcwNjlcdTcwNmFcdTllYTRcdTlmN2VcdTlmNDlcdTlmOThcdTc4ODFcdTkyYjlcdTg4Y2ZcdTU4YmJcdTYwNTJcdTdjYTdcdTVhZmFcdTI1NTRcdTI1NjZcdTI1NTdcdTI1NjBcdTI1NmNcdTI1''@;'; put 'put ''NjNcdTI1NWFcdTI1NjlcdTI1NWRcdTI1NTJcdTI1NjRcdTI1NTVcdTI1NWVcdTI1NmFcdTI1NjFcdTI1NThcdTI1NjdcdTI1NWJcdTI1NTNcdTI1NjVcdTI1NTZcdTI1NWZcdTI1NmJcdTI1NjJcdTI1NTlcdTI1NjhcdTI1NWNcdTI1NTFcdTI1NTBcdTI1NmRcdTI1NmVcdTI1NzBcdTI1NmZc''@;'; put 'put ''dTI1OTMiXV0nKX0sNTY0MDY6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3XSxbIjhlYTEiLCJcdWZmNjEiLDYyXSxbImExYTEiLCJcdTMwMDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJcdWZmMWZc''@;'; put 'put ''dWZmMDFcdTMwOWJcdTMwOWNceGI0XHVmZjQwXHhhOFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1MjAxNVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1MjAyNVx1''@;'; put 'put ''MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1ZmYwOFx1ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOCIsOSwiXHVmZjBiXHVmZjBkXHhiMVx4ZDdceGY3XHVmZjFkXHUyMjYwXHVmZjFjXHVmZjFlXHUyMjY2XHUyMjY3XHUyMjFlXHUyMjM0XHUyNjQyXHUyNjQw''@;'; put 'put ''XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmZlNVx1ZmYwNFx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYwM1x1ZmYwNlx1ZmYwYVx1ZmYyMFx4YTdcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzciXSxbImEyYTEiLCJcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRc''@;'; put 'put ''dTI1YmNcdTIwM2JcdTMwMTJcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTMiXSxbImEyYmEiLCJcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjkiXSxbImEyY2EiLCJcdTIyMjdcdTIyMjhcdWZmZTJcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDMiXSxb''@;'; put 'put ''ImEyZGMiLCJcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmMiXSxbImEyZjIiLCJcdTIxMmJcdTIwMzBcdTI2NmZcdTI2NmRcdTI2NmFcdTIwMjBcdTIwMjFceGI2Il0sWyJhMmZl''@;'; put 'put ''IiwiXHUyNWVmIl0sWyJhM2IwIiwiXHVmZjEwIiw5XSxbImEzYzEiLCJcdWZmMjEiLDI1XSxbImEzZTEiLCJcdWZmNDEiLDI1XSxbImE0YTEiLCJcdTMwNDEiLDgyXSxbImE1YTEiLCJcdTMwYTEiLDg1XSxbImE2YTEiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZdLFsiYTZjMSIsIlx1MDNiMSIs''@;'; put 'put ''MTYsIlx1MDNjMyIsNl0sWyJhN2ExIiwiXHUwNDEwIiw1LCJcdTA0MDFcdTA0MTYiLDI1XSxbImE3ZDEiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsMjVdLFsiYThhMSIsIlx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUz''@;'; put 'put ''Y1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0MiJdLFsiYWRhMSIsIlx1MjQ2MCIsMTksIlx1MjE2MCIsOV0sWyJh''@;'; put 'put ''ZGMwIiwiXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExIl0sWyJhZGRmIiwiXHUzMzdiXHUz''@;'; put 'put ''MDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0Iiw0LCJcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmEiXSxbImIwYTEiLCJc''@;'; put 'put ''dTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdk''@;'; put 'put ''NjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNc''@;'; put 'put ''dTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTlj''@;'; put 'put ''MmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmQiXSxbImIxYTEiLCJcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFc''@;'; put 'put ''dTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZj''@;'; put 'put ''MzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhc''@;'; put 'put ''dTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGMiXSxbImIyYTEiLCJcdTYy''@;'; put 'put ''YmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJc''@;'; put 'put ''dTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgz''@;'; put 'put ''MDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVc''@;'; put 'put ''dTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzkiXSxbImIzYTEiLCJcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUy''@;'; put 'put ''YmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2Nc''@;'; put 'put ''dTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYw''@;'; put 'put ''NzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzEiXSxbImI0YTEiLCJcdTdjYTVc''@;'; put 'put ''dTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4''@;'; put 'put ''ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJc''@;'; put 'put ''dTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVj''@;'; put 'put ''OTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzQiXSxbImI1YTEiLCJcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdc''@;'; put 'put ''dThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4''@;'; put 'put ''NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTFcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZc''@;'; put 'put ''dTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWMiXSxbImI2YTEiLCJcdTRmOWJcdTRm''@;'; put 'put ''YTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhc''@;'; put 'put ''dTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5''@;'; put 'put ''YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBc''@;'; put 'put ''dTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDgiXSxbImI3YTEiLCJcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1''@;'; put 'put ''YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJc''@;'; put 'put ''dTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZThcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZi''@;'; put 'put ''MjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzIiXSxbImI4YTEiLCJcdTY5MWNcdTZhMjlc''@;'; put 'put ''dTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdk''@;'; put 'put ''NDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThc''@;'; put 'put ''dTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUw''@;'; put 'put ''MTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTEiXSxbImI5YTEiLCJcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThc''@;'; put 'put ''dTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgw''@;'; put 'put ''MTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhc''@;'; put 'put ''dTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmMiXSxbImJhYTEiLCJcdTZiNjRcdTk4MDNcdTRl''@;'; put 'put ''Y2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBc''@;'; put 'put ''dTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgz''@;'; put 'put ''ZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRc''@;'; put 'put ''dTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdiMzlcdTUzMTlcdTUxOGFcdTUyMzciXSxbImJiYTEiLCJcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUw''@;'; put 'put ''OThcdTUzYzJcdTVjNzFcdTYwZThcdTY0OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNc''@;'; put 'put ''dTU2ZGJcdTU4ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjJcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgw''@;'; put 'put ''YTJcdTgxMDJcdTgxZjNcdTg5OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDIiXSxbImJjYTEiLCJcdTZiMjFcdTZlY2JcdTZjYmJc''@;'; put 'put ''dTcyM2VcdTc0YmRcdTc1ZDRcdTc4YzFcdTc5M2FcdTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZm''@;'; put 'put ''MDZcdTc1YmVcdThjZWFcdTViOWZcdTg1MDBcdTdiZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZc''@;'; put 'put ''dTUyZmFcdTVjM2FcdTY3NTNcdTcwN2NcdTcyMzVcdTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0''@;'; put 'put ''NmFcdTViZmZcdTYzODhcdTZhMzlcdTdkYWNcdTk3MDBcdTU2ZGFcdTUzY2VcdTU0NjgiXSxbImJkYTEiLCJcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJc''@;'; put 'put ''dThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdj''@;'; put 'put ''OWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjNcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZc''@;'; put 'put ''dTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWYiXSxbImJlYTEiLCJcdTUyZGRcdTUzMjBcdTUzNDdcdTUz''@;'; put 'put ''ZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJc''@;'; put 'put ''dTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThh''@;'; put 'put ''NTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNc''@;'; put 'put ''dTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmUiXSxbImJmYTEiLCJcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTVi''@;'; put 'put ''ZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFc''@;'; put 'put ''dTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdm''@;'; put 'put ''ZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmUiXSxbImMwYTEiLCJcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZc''@;'; put 'put ''dTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThh''@;'; put 'put ''OTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlc''@;'; put 'put ''dTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3''@;'; put 'put ''ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGEiXSxbImMxYTEiLCJcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhc''@;'; put 'put ''dTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUw''@;'; put 'put ''ZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmJcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlc''@;'; put 'put ''dTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGUiXSxbImMyYTEiLCJcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRm''@;'; put 'put ''YzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFc''@;'; put 'put ''dTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgx''@;'; put 'put ''N2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdc''@;'; put 'put ''dTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUzZWEiXSxbImMzYTEiLCJcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3''@;'; put 'put ''NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVc''@;'; put 'put ''dTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzRcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYy''@;'; put 'put ''YmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjUiXSxbImM0YTEiLCJcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVc''@;'; put 'put ''dTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTcz''@;'; put 'put ''Y2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNc''@;'; put 'put ''dTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdh''@;'; put 'put ''MGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTMiXSxbImM1YTEiLCJcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRc''@;'; put 'put ''dTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZl''@;'; put 'put ''MjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVc''@;'; put 'put ''dTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzAiXSxbImM2YTEiLCJcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThj''@;'; put 'put ''NDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNc''@;'; put 'put ''dTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0''@;'; put 'put ''NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFc''@;'; put 'put ''dTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjUiXSxbImM3YTEiLCJcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdj''@;'; put 'put ''OThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNc''@;'; put 'put ''dTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJcdTY4ODVcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0''@;'; put 'put ''MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTYiXSxbImM4YTEiLCJcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhc''@;'; put 'put ''dTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0''@;'; put 'put ''MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZc''@;'; put 'put ''dTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVm''@;'; put 'put ''YWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGUiXSxbImM5YTEiLCJcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2Vc''@;'; put 'put ''dThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThj''@;'; put 'put ''ZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzdcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRc''@;'; put 'put ''dTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGQiXSxbImNhYTEiLCJcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYy''@;'; put 'put ''NTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZc''@;'; put 'put ''dTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgy''@;'; put 'put ''MTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZc''@;'; put 'put ''dTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGIiXSxbImNiYTEiLCJcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUw''@;'; put 'put ''OGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJc''@;'; put 'put ''dTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgx''@;'; put 'put ''OWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODAiXSxbImNjYTEiLCJcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVc''@;'; put 'put ''dTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTky''@;'; put 'put ''OThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZc''@;'; put 'put ''dTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0''@;'; put 'put ''NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTIiXSxbImNkYTEiLCJcdThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVc''@;'; put 'put ''dThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3OGRcdTU5MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1''@;'; put 'put ''MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0YzlcdTg5ODFcdThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzJcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJc''@;'; put 'put ''dTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVcdTVkNTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODMiXSxbImNlYTEiLCJcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTcz''@;'; put 'put ''ODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFcdTZlOWNcdTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNc''@;'; put 'put ''dTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThhZDJcdTkwN2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdk''@;'; put 'put ''MmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFcdTVkYmFcdTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNc''@;'; put 'put ''dTcxNDlcdTdjM2VcdTdkZjRcdTgwNmYiXSxbImNmYTEiLCJcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdi''@;'; put 'put ''ZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2Vc''@;'; put 'put ''dTc4OTdcdTgxNTUiXSxbImQwYTEiLCJcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRl''@;'; put 'put ''YjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZc''@;'; put 'put ''dTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUw''@;'; put 'put ''MDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjIiXSxbImQxYTEiLCJcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVc''@;'; put 'put ''dTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUx''@;'; put 'put ''OGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdTUxZjBcdTUxZjVc''@;'; put 'put ''dTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUy''@;'; put 'put ''OTFcdThmYTgiXSxbImQyYTEiLCJcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVc''@;'; put 'put ''dTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUz''@;'; put 'put ''YzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBc''@;'; put 'put ''dTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YTgiXSxbImQzYTEiLCJcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0''@;'; put 'put ''ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2Nc''@;'; put 'put ''dTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzhcdTU2NmJcdTU2NjRcdTU2''@;'; put 'put ''MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRc''@;'; put 'put ''dTU3MDkiXSxbImQ0YTEiLCJcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3''@;'; put 'put ''YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFc''@;'; put 'put ''dTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5''@;'; put 'put ''MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5NjdcdTU5NmNcdTU5NjkiXSxbImQ1YTEiLCJcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRc''@;'; put 'put ''dTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVh''@;'; put 'put ''ZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdTViODNcdTViYTZcdTViYjhc''@;'; put 'put ''dTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVj''@;'; put 'put ''NTMiXSxbImQ2YTEiLCJcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRc''@;'; put 'put ''dTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVk''@;'; put 'put ''YWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZc''@;'; put 'put ''dTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2YiXSxbImQ3YTEiLCJcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVl''@;'; put 'put ''ZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdc''@;'; put 'put ''dTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdTYwMTlcdTYwMTBcdTYwMjlcdTYw''@;'; put 'put ''MGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWEi''@;'; put 'put ''XSxbImQ4YTEiLCJcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYx''@;'; put 'put ''MDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFc''@;'; put 'put ''dTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYx''@;'; put 'put ''ZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWIiXSxbImQ5YTEiLCJcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJc''@;'; put 'put ''dTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYyODlcdTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYz''@;'; put 'put ''MGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJcdTYzMDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmJcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBc''@;'; put 'put ''dTYzYzZcdTYzZTNcdTYzYzlcdTYzZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmMiXSxb''@;'; put 'put ''ImRhYTEiLCJcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRc''@;'; put 'put ''dTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1MzdcdTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1''@;'; put 'put ''YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJc''@;'; put 'put ''dTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlcdTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmMiXSxbImRiYTEiLCJcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3''@;'; put 'put ''MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3Yjdc''@;'; put 'put ''dTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4''@;'; put 'put ''NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2QiXSxbImRj''@;'; put 'put ''YTEiLCJcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5''@;'; put 'put ''MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNc''@;'; put 'put ''dTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZh''@;'; put 'put ''NDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTMiXSxbImRkYTEiLCJcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFc''@;'; put 'put ''dTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZi''@;'; put 'put ''ODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJc''@;'; put 'put ''dTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmUiXSxbImRlYTEi''@;'; put 'put ''LCJcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlc''@;'; put 'put ''dTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZl''@;'; put 'put ''NmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZc''@;'; put 'put ''dTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2MiXSxbImRmYTEiLCJcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZmZjNcdTZmNmRcdTZmODJcdTZm''@;'; put 'put ''N2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVc''@;'; put 'put ''dTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGRcdTcwZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcx''@;'; put 'put ''NjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcxZTdcdTcxZjVcdTcxZmMiXSxbImUwYTEiLCJc''@;'; put 'put ''dTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJcdTcyYTdcdTcyYjlcdTcy''@;'; put 'put ''YjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTczNTdcdTczNmFcdTczNjhc''@;'; put 'put ''dTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFcdTc0NWNcdTc0NjlcdTc0''@;'; put 'put ''NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjEiXSxbImUxYTEiLCJcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNc''@;'; put 'put ''dTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1''@;'; put 'put ''ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmZcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNc''@;'; put 'put ''dTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzAiXSxbImUyYTEiLCJcdTc2''@;'; put 'put ''NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZc''@;'; put 'put ''dTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3''@;'; put 'put ''YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVc''@;'; put 'put ''dTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWMiXSxbImUzYTEiLCJcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5''@;'; put 'put ''NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFc''@;'; put 'put ''dTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjBcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdh''@;'; put 'put ''Y2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTAiXSxbImU0YTEiLCJcdTdiN2Fc''@;'; put 'put ''dTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdi''@;'; put 'put ''Y2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRc''@;'; put 'put ''dTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdj''@;'; put 'put ''ZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDYiXSxbImU1YTEiLCJcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJc''@;'; put 'put ''dTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdk''@;'; put 'put ''ZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzdcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlc''@;'; put 'put ''dTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2EiXSxbImU2YTEiLCJcdTdmNDVcdTdm''@;'; put 'put ''NGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlc''@;'; put 'put ''dTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgw''@;'; put 'put ''NDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRc''@;'; put 'put ''dTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGIiXSxbImU3YTEiLCJcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgx''@;'; put 'put ''ODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJc''@;'; put 'put ''dTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgy''@;'; put 'put ''NzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDkiXSxbImU4YTEiLCJcdTgzMzVcdTgzMzRc''@;'; put 'put ''dTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgz''@;'; put 'put ''YThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJc''@;'; put 'put ''dTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1''@;'; put 'put ''MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDgiXSxbImU5YTEiLCJcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNc''@;'; put 'put ''dTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2''@;'; put 'put ''NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNc''@;'; put 'put ''dTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTkiXSxbImVhYTEiLCJcdTg3NTNcdTg3NjNcdTg3''@;'; put 'put ''NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFc''@;'; put 'put ''dTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4''@;'; put 'put ''OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJc''@;'; put 'put ''dTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWUiXSxbImViYTEiLCJcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5''@;'; put 'put ''YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRc''@;'; put 'put ''dThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThhYThcdThhYTFcdThhOTFcdThhYTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTdcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThi''@;'; put 'put ''MGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBcdThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmIiXSxbImVjYTEiLCJcdThiNWZcdThiNmNcdThiNmZc''@;'; put 'put ''dThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThj''@;'; put 'put ''OGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVc''@;'; put 'put ''dThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRcdThkNzFcdThkNzNcdThkODFcdThkOTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThl''@;'; put 'put ''MWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThlMzBcdThlMzRcdThlNGEiXSxbImVkYTEiLCJcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVc''@;'; put 'put ''dThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThm''@;'; put 'put ''MTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWNcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdc''@;'; put 'put ''dThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjgiXSxbImVlYTEiLCJcdTkwNGZcdTkwNTBcdTkwNTFcdTkw''@;'; put 'put ''NTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJc''@;'; put 'put ''dTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkx''@;'; put 'put ''ZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFc''@;'; put 'put ''dTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkzMmUiXSxbImVmYTEiLCJcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkz''@;'; put 'put ''ZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVc''@;'; put 'put ''dTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTlcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZm''@;'; put 'put ''ZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWUiXSxbImYwYTEiLCJcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJc''@;'; put 'put ''dTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3''@;'; put 'put ''MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFc''@;'; put 'put ''dTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4''@;'; put 'put ''MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJcdTk4NmZcdTk4NzAiXSxbImYxYTEiLCJcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFc''@;'; put 'put ''dTk5MWRcdTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5''@;'; put 'put ''ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDNcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlc''@;'; put 'put ''dTlhNmJcdTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjciXSxbImYyYTEiLCJcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTli''@;'; put 'put ''MWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRc''@;'; put 'put ''dTliYzBcdTliY2FcdTliYjlcdTliYzZcdTliY2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTlj''@;'; put 'put ''MWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBcdTljNDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRc''@;'; put 'put ''dTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlkM2VcdTlkNDZcdTlkNDgiXSxbImYzYTEiLCJcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlk''@;'; put 'put ''YmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVc''@;'; put 'put ''dTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlm''@;'; put 'put ''MTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTAiXSxbImY0YTEiLCJcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNc''@;'; put 'put ''dTcxOTkiXSxbImY5YTEiLCJcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUw''@;'; put 'put ''NDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVc''@;'; put 'put ''dTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVj''@;'; put 'put ''YTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjciXSxbImZhYTEiLCJcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBc''@;'; put 'put ''dTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3''@;'; put 'put ''NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZc''@;'; put 'put ''dTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcy''@;'; put 'put ''YjEiXSxbImZiYTEiLCJcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZc''@;'; put 'put ''dWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdm''@;'; put 'put ''YTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2Zc''@;'; put 'put ''dThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGEiXSxbImZjYTEiLCJcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTky''@;'; put 'put ''M2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRc''@;'; put 'put ''dTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlh''@;'; put 'put ''ZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDEiXSxbImZjZjEiLCJcdTIxNzAiLDksIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMiJdLFsiOGZhMmFmIiwiXHUwMmQ4XHUwMmM3XHhiOFx1MDJkOVx1MDJkZFx4YWZcdTAy''@;'; put 'put ''ZGJcdTAyZGFcdWZmNWVcdTAzODRcdTAzODUiXSxbIjhmYTJjMiIsIlx4YTFceGE2XHhiZiJdLFsiOGZhMmViIiwiXHhiYVx4YWFceGE5XHhhZVx1MjEyMlx4YTRcdTIxMTYiXSxbIjhmYTZlMSIsIlx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDNhYSJdLFsiOGZhNmU3IiwiXHUwMzhjIl0s''@;'; put 'put ''WyI4ZmE2ZTkiLCJcdTAzOGVcdTAzYWIiXSxbIjhmYTZlYyIsIlx1MDM4ZiJdLFsiOGZhNmYxIiwiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NhXHUwMzkwXHUwM2NjXHUwM2MyXHUwM2NkXHUwM2NiXHUwM2IwXHUwM2NlIl0sWyI4ZmE3YzIiLCJcdTA0MDIiLDEwLCJcdTA0MGVcdTA0''@;'; put 'put ''MGYiXSxbIjhmYTdmMiIsIlx1MDQ1MiIsMTAsIlx1MDQ1ZVx1MDQ1ZiJdLFsiOGZhOWExIiwiXHhjNlx1MDExMCJdLFsiOGZhOWE0IiwiXHUwMTI2Il0sWyI4ZmE5YTYiLCJcdTAxMzIiXSxbIjhmYTlhOCIsIlx1MDE0MVx1MDEzZiJdLFsiOGZhOWFiIiwiXHUwMTRhXHhkOFx1MDE1MiJdLFsi''@;'; put 'put ''OGZhOWFmIiwiXHUwMTY2XHhkZSJdLFsiOGZhOWMxIiwiXHhlNlx1MDExMVx4ZjBcdTAxMjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDJcdTAxNDBcdTAxNDlcdTAxNGJceGY4XHUwMTUzXHhkZlx1MDE2N1x4ZmUiXSxbIjhmYWFhMSIsIlx4YzFceGMwXHhjNFx4YzJcdTAxMDJcdTAxY2RcdTAx''@;'; put 'put ''MDBcdTAxMDRceGM1XHhjM1x1MDEwNlx1MDEwOFx1MDEwY1x4YzdcdTAxMGFcdTAxMGVceGM5XHhjOFx4Y2JceGNhXHUwMTFhXHUwMTE2XHUwMTEyXHUwMTE4Il0sWyI4ZmFhYmEiLCJcdTAxMWNcdTAxMWVcdTAxMjJcdTAxMjBcdTAxMjRceGNkXHhjY1x4Y2ZceGNlXHUwMWNmXHUwMTMwXHUw''@;'; put 'put ''MTJhXHUwMTJlXHUwMTI4XHUwMTM0XHUwMTM2XHUwMTM5XHUwMTNkXHUwMTNiXHUwMTQzXHUwMTQ3XHUwMTQ1XHhkMVx4ZDNceGQyXHhkNlx4ZDRcdTAxZDFcdTAxNTBcdTAxNGNceGQ1XHUwMTU0XHUwMTU4XHUwMTU2XHUwMTVhXHUwMTVjXHUwMTYwXHUwMTVlXHUwMTY0XHUwMTYyXHhkYVx4''@;'; put 'put ''ZDlceGRjXHhkYlx1MDE2Y1x1MDFkM1x1MDE3MFx1MDE2YVx1MDE3Mlx1MDE2ZVx1MDE2OFx1MDFkN1x1MDFkYlx1MDFkOVx1MDFkNVx1MDE3NFx4ZGRcdTAxNzhcdTAxNzZcdTAxNzlcdTAxN2RcdTAxN2IiXSxbIjhmYWJhMSIsIlx4ZTFceGUwXHhlNFx4ZTJcdTAxMDNcdTAxY2VcdTAxMDFc''@;'; put 'put ''dTAxMDVceGU1XHhlM1x1MDEwN1x1MDEwOVx1MDEwZFx4ZTdcdTAxMGJcdTAxMGZceGU5XHhlOFx4ZWJceGVhXHUwMTFiXHUwMTE3XHUwMTEzXHUwMTE5XHUwMWY1XHUwMTFkXHUwMTFmIl0sWyI4ZmFiYmQiLCJcdTAxMjFcdTAxMjVceGVkXHhlY1x4ZWZceGVlXHUwMWQwIl0sWyI4ZmFiYzUi''@;'; put 'put ''LCJcdTAxMmJcdTAxMmZcdTAxMjlcdTAxMzVcdTAxMzdcdTAxM2FcdTAxM2VcdTAxM2NcdTAxNDRcdTAxNDhcdTAxNDZceGYxXHhmM1x4ZjJceGY2XHhmNFx1MDFkMlx1MDE1MVx1MDE0ZFx4ZjVcdTAxNTVcdTAxNTlcdTAxNTdcdTAxNWJcdTAxNWRcdTAxNjFcdTAxNWZcdTAxNjVcdTAxNjNc''@;'; put 'put ''eGZhXHhmOVx4ZmNceGZiXHUwMTZkXHUwMWQ0XHUwMTcxXHUwMTZiXHUwMTczXHUwMTZmXHUwMTY5XHUwMWQ4XHUwMWRjXHUwMWRhXHUwMWQ2XHUwMTc1XHhmZFx4ZmZcdTAxNzdcdTAxN2FcdTAxN2VcdTAxN2MiXSxbIjhmYjBhMSIsIlx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwY1x1NGUxMlx1''@;'; put 'put ''NGUxZlx1NGUyM1x1NGUyNFx1NGUyOFx1NGUyYlx1NGUyZVx1NGUyZlx1NGUzMFx1NGUzNVx1NGU0MFx1NGU0MVx1NGU0NFx1NGU0N1x1NGU1MVx1NGU1YVx1NGU1Y1x1NGU2M1x1NGU2OFx1NGU2OVx1NGU3NFx1NGU3NVx1NGU3OVx1NGU3Zlx1NGU4ZFx1NGU5Nlx1NGU5N1x1NGU5ZFx1NGVh''@;'; put 'put ''Zlx1NGViOVx1NGVjM1x1NGVkMFx1NGVkYVx1NGVkYlx1NGVlMFx1NGVlMVx1NGVlMlx1NGVlOFx1NGVlZlx1NGVmMVx1NGVmM1x1NGVmNVx1NGVmZFx1NGVmZVx1NGVmZlx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwOFx1NGYwYlx1NGYwY1x1NGYxMlx1NGYxNVx1NGYxNlx1NGYxN1x1NGYxOVx1''@;'; put 'put ''NGYyZVx1NGYzMVx1NGY2MFx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGY0MFx1NGY0Mlx1NGY0OFx1NGY0OVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY1OFx1NGY1Zlx1NGY2M1x1NGY2YVx1NGY2Y1x1NGY2ZVx1NGY3MVx1NGY3N1x1NGY3OFx1NGY3''@;'; put 'put ''OVx1NGY3YVx1NGY3ZFx1NGY3ZVx1NGY4MVx1NGY4Mlx1NGY4NCJdLFsiOGZiMWExIiwiXHU0Zjg1XHU0Zjg5XHU0ZjhhXHU0ZjhjXHU0ZjhlXHU0ZjkwXHU0ZjkyXHU0ZjkzXHU0Zjk0XHU0Zjk3XHU0Zjk5XHU0ZjlhXHU0ZjllXHU0ZjlmXHU0ZmIyXHU0ZmI3XHU0ZmI5XHU0ZmJiXHU0ZmJj''@;'; put 'put ''XHU0ZmJkXHU0ZmJlXHU0ZmMwXHU0ZmMxXHU0ZmM1XHU0ZmM2XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmNmXHU0ZmQyXHU0ZmRjXHU0ZmUwXHU0ZmUyXHU0ZmYwXHU0ZmYyXHU0ZmZjXHU0ZmZkXHU0ZmZmXHU1MDAwXHU1MDAxXHU1MDA0XHU1MDA3XHU1MDBhXHU1MDBjXHU1''@;'; put 'put ''MDBlXHU1MDEwXHU1MDEzXHU1MDE3XHU1MDE4XHU1MDFiXHU1MDFjXHU1MDFkXHU1MDFlXHU1MDIyXHU1MDI3XHU1MDJlXHU1MDMwXHU1MDMyXHU1MDMzXHU1MDM1XHU1MDQwXHU1MDQxXHU1MDQyXHU1MDQ1XHU1MDQ2XHU1MDRhXHU1MDRjXHU1MDRlXHU1MDUxXHU1MDUyXHU1MDUzXHU1MDU3''@;'; put 'put ''XHU1MDU5XHU1MDVmXHU1MDYwXHU1MDYyXHU1MDYzXHU1MDY2XHU1MDY3XHU1MDZhXHU1MDZkXHU1MDcwXHU1MDcxXHU1MDNiXHU1MDgxXHU1MDgzXHU1MDg0XHU1MDg2XHU1MDhhXHU1MDhlXHU1MDhmXHU1MDkwIl0sWyI4ZmIyYTEiLCJcdTUwOTJcdTUwOTNcdTUwOTRcdTUwOTZcdTUwOWJc''@;'; put 'put ''dTUwOWNcdTUwOWUiLDQsIlx1NTBhYVx1NTBhZlx1NTBiMFx1NTBiOVx1NTBiYVx1NTBiZFx1NTBjMFx1NTBjM1x1NTBjNFx1NTBjN1x1NTBjY1x1NTBjZVx1NTBkMFx1NTBkM1x1NTBkNFx1NTBkOFx1NTBkY1x1NTBkZFx1NTBkZlx1NTBlMlx1NTBlNFx1NTBlNlx1NTBlOFx1NTBlOVx1NTBl''@;'; put 'put ''Zlx1NTBmMVx1NTBmNlx1NTBmYVx1NTBmZVx1NTEwM1x1NTEwNlx1NTEwN1x1NTEwOFx1NTEwYlx1NTEwY1x1NTEwZFx1NTEwZVx1NTBmMlx1NTExMFx1NTExN1x1NTExOVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1NTEyM1x1NTEyN1x1NTEyOFx1NTEyY1x1NTEyZFx1NTEyZlx1NTEzMVx1''@;'; put 'put ''NTEzM1x1NTEzNFx1NTEzNVx1NTEzOFx1NTEzOVx1NTE0Mlx1NTE0YVx1NTE0Zlx1NTE1M1x1NTE1NVx1NTE1N1x1NTE1OFx1NTE1Zlx1NTE2NFx1NTE2Nlx1NTE3ZVx1NTE4M1x1NTE4NFx1NTE4Ylx1NTE4ZVx1NTE5OFx1NTE5ZFx1NTFhMVx1NTFhM1x1NTFhZFx1NTFiOFx1NTFiYVx1NTFi''@;'; put 'put ''Y1x1NTFiZVx1NTFiZlx1NTFjMiJdLFsiOGZiM2ExIiwiXHU1MWM4XHU1MWNmXHU1MWQxXHU1MWQyXHU1MWQzXHU1MWQ1XHU1MWQ4XHU1MWRlXHU1MWUyXHU1MWU1XHU1MWVlXHU1MWYyXHU1MWYzXHU1MWY0XHU1MWY3XHU1MjAxXHU1MjAyXHU1MjA1XHU1MjEyXHU1MjEzXHU1MjE1XHU1MjE2''@;'; put 'put ''XHU1MjE4XHU1MjIyXHU1MjI4XHU1MjMxXHU1MjMyXHU1MjM1XHU1MjNjXHU1MjQ1XHU1MjQ5XHU1MjU1XHU1MjU3XHU1MjU4XHU1MjVhXHU1MjVjXHU1MjVmXHU1MjYwXHU1MjYxXHU1MjY2XHU1MjZlXHU1Mjc3XHU1Mjc4XHU1Mjc5XHU1MjgwXHU1MjgyXHU1Mjg1XHU1MjhhXHU1MjhjXHU1''@;'; put 'put ''MjkzXHU1Mjk1XHU1Mjk2XHU1Mjk3XHU1Mjk4XHU1MjlhXHU1MjljXHU1MmE0XHU1MmE1XHU1MmE2XHU1MmE3XHU1MmFmXHU1MmIwXHU1MmI2XHU1MmI3XHU1MmI4XHU1MmJhXHU1MmJiXHU1MmJkXHU1MmMwXHU1MmM0XHU1MmM2XHU1MmM4XHU1MmNjXHU1MmNmXHU1MmQxXHU1MmQ0XHU1MmQ2''@;'; put 'put ''XHU1MmRiXHU1MmRjXHU1MmUxXHU1MmU1XHU1MmU4XHU1MmU5XHU1MmVhXHU1MmVjXHU1MmYwXHU1MmYxXHU1MmY0XHU1MmY2XHU1MmY3XHU1MzAwXHU1MzAzXHU1MzBhXHU1MzBiIl0sWyI4ZmI0YTEiLCJcdTUzMGNcdTUzMTFcdTUzMTNcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZc''@;'; put 'put ''dTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRcdTUzMzBcdTUzMzJcdTUzMzVcdTUzM2NcdTUzM2RcdTUzM2VcdTUzNDJcdTUzNGNcdTUzNGJcdTUzNTlcdTUzNWJcdTUzNjFcdTUzNjNcdTUzNjVcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzlcdTUzN2VcdTUzODNcdTUz''@;'; put 'put ''ODdcdTUzODhcdTUzOGVcdTUzOTNcdTUzOTRcdTUzOTlcdTUzOWRcdTUzYTFcdTUzYTRcdTUzYWFcdTUzYWJcdTUzYWZcdTUzYjJcdTUzYjRcdTUzYjVcdTUzYjdcdTUzYjhcdTUzYmFcdTUzYmRcdTUzYzBcdTUzYzVcdTUzY2ZcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGRcdTUzZGVc''@;'; put 'put ''dTUzZTBcdTUzZTZcdTUzZTdcdTUzZjVcdTU0MDJcdTU0MTNcdTU0MWFcdTU0MjFcdTU0MjdcdTU0MjhcdTU0MmFcdTU0MmZcdTU0MzFcdTU0MzRcdTU0MzVcdTU0NDNcdTU0NDRcdTU0NDdcdTU0NGRcdTU0NGZcdTU0NWVcdTU0NjJcdTU0NjRcdTU0NjZcdTU0NjdcdTU0NjlcdTU0NmJcdTU0''@;'; put 'put ''NmRcdTU0NmVcdTU0NzRcdTU0N2YiXSxbIjhmYjVhMSIsIlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4OFx1NTQ4OVx1NTQ4ZFx1NTQ5MVx1NTQ5NVx1NTQ5Nlx1NTQ5Y1x1NTQ5Zlx1NTRhMVx1NTRhNlx1NTRhN1x1NTRhOVx1NTRhYVx1NTRhZFx1NTRhZVx1NTRiMVx1NTRiN1x1NTRiOVx1NTRi''@;'; put 'put ''YVx1NTRiYlx1NTRiZlx1NTRjNlx1NTRjYVx1NTRjZFx1NTRjZVx1NTRlMFx1NTRlYVx1NTRlY1x1NTRlZlx1NTRmNlx1NTRmY1x1NTRmZVx1NTRmZlx1NTUwMFx1NTUwMVx1NTUwNVx1NTUwOFx1NTUwOVx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxNVx1NTUyYVx1NTUyYlx1NTUzMlx1NTUzNVx1''@;'; put 'put ''NTUzNlx1NTUzYlx1NTUzY1x1NTUzZFx1NTU0MVx1NTU0N1x1NTU0OVx1NTU0YVx1NTU0ZFx1NTU1MFx1NTU1MVx1NTU1OFx1NTU1YVx1NTU1Ylx1NTU1ZVx1NTU2MFx1NTU2MVx1NTU2NFx1NTU2Nlx1NTU3Zlx1NTU4MVx1NTU4Mlx1NTU4Nlx1NTU4OFx1NTU4ZVx1NTU4Zlx1NTU5MVx1NTU5''@;'; put 'put ''Mlx1NTU5M1x1NTU5NFx1NTU5N1x1NTVhM1x1NTVhNFx1NTVhZFx1NTViMlx1NTViZlx1NTVjMVx1NTVjM1x1NTVjNlx1NTVjOVx1NTVjYlx1NTVjY1x1NTVjZVx1NTVkMVx1NTVkMiJdLFsiOGZiNmExIiwiXHU1NWQzXHU1NWQ3XHU1NWQ4XHU1NWRiXHU1NWRlXHU1NWUyXHU1NWU5XHU1NWY2''@;'; put 'put ''XHU1NWZmXHU1NjA1XHU1NjA4XHU1NjBhXHU1NjBkIiw1LCJcdTU2MTlcdTU2MmNcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzlcdTU2M2JcdTU2M2NcdTU2M2RcdTU2M2ZcdTU2NDBcdTU2NDFcdTU2NDNcdTU2NDRcdTU2NDZcdTU2NDlcdTU2NGJcdTU2NGRcdTU2NGZcdTU2NTRcdTU2''@;'; put 'put ''NWVcdTU2NjBcdTU2NjFcdTU2NjJcdTU2NjNcdTU2NjZcdTU2NjlcdTU2NmRcdTU2NmZcdTU2NzFcdTU2NzJcdTU2NzVcdTU2ODRcdTU2ODVcdTU2ODhcdTU2OGJcdTU2OGNcdTU2OTVcdTU2OTlcdTU2OWFcdTU2OWRcdTU2OWVcdTU2OWZcdTU2YTZcdTU2YTdcdTU2YThcdTU2YTlcdTU2YWJc''@;'; put 'put ''dTU2YWNcdTU2YWRcdTU2YjFcdTU2YjNcdTU2YjdcdTU2YmVcdTU2YzVcdTU2YzlcdTU2Y2FcdTU2Y2JcdTU2Y2ZcdTU2ZDBcdTU2Y2NcdTU2Y2RcdTU2ZDlcdTU2ZGNcdTU2ZGRcdTU2ZGZcdTU2ZTFcdTU2ZTQiLDQsIlx1NTZmMVx1NTZlYlx1NTZlZCJdLFsiOGZiN2ExIiwiXHU1NmY2XHU1''@;'; put 'put ''NmY3XHU1NzAxXHU1NzAyXHU1NzA3XHU1NzBhXHU1NzBjXHU1NzExXHU1NzE1XHU1NzFhXHU1NzFiXHU1NzFkXHU1NzIwXHU1NzIyXHU1NzIzXHU1NzI0XHU1NzI1XHU1NzI5XHU1NzJhXHU1NzJjXHU1NzJlXHU1NzJmXHU1NzMzXHU1NzM0XHU1NzNkXHU1NzNlXHU1NzNmXHU1NzQ1XHU1NzQ2''@;'; put 'put ''XHU1NzRjXHU1NzRkXHU1NzUyXHU1NzYyXHU1NzY1XHU1NzY3XHU1NzY4XHU1NzZiXHU1NzZkIiw0LCJcdTU3NzNcdTU3NzRcdTU3NzVcdTU3NzdcdTU3NzlcdTU3N2FcdTU3N2JcdTU3N2NcdTU3N2VcdTU3ODFcdTU3ODNcdTU3OGNcdTU3OTRcdTU3OTdcdTU3OTlcdTU3OWFcdTU3OWNcdTU3''@;'; put 'put ''OWRcdTU3OWVcdTU3OWZcdTU3YTFcdTU3OTVcdTU3YTdcdTU3YThcdTU3YTlcdTU3YWNcdTU3YjhcdTU3YmRcdTU3YzdcdTU3YzhcdTU3Y2NcdTU3Y2ZcdTU3ZDVcdTU3ZGRcdTU3ZGVcdTU3ZTRcdTU3ZTZcdTU3ZTdcdTU3ZTlcdTU3ZWRcdTU3ZjBcdTU3ZjVcdTU3ZjZcdTU3ZjhcdTU3ZmRc''@;'; put 'put ''dTU3ZmVcdTU3ZmZcdTU4MDNcdTU4MDRcdTU4MDhcdTU4MDlcdTU3ZTEiXSxbIjhmYjhhMSIsIlx1NTgwY1x1NTgwZFx1NTgxYlx1NTgxZVx1NTgxZlx1NTgyMFx1NTgyNlx1NTgyN1x1NTgyZFx1NTgzMlx1NTgzOVx1NTgzZlx1NTg0OVx1NTg0Y1x1NTg0ZFx1NTg0Zlx1NTg1MFx1NTg1NVx1''@;'; put 'put ''NTg1Zlx1NTg2MVx1NTg2NFx1NTg2N1x1NTg2OFx1NTg3OFx1NTg3Y1x1NTg3Zlx1NTg4MFx1NTg4MVx1NTg4N1x1NTg4OFx1NTg4OVx1NTg4YVx1NTg4Y1x1NTg4ZFx1NTg4Zlx1NTg5MFx1NTg5NFx1NTg5Nlx1NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhNlx1NThhOVx1NThiMVx1NThi''@;'; put 'put ''Mlx1NThjNFx1NThiY1x1NThjMlx1NThjOFx1NThjZFx1NThjZVx1NThkMFx1NThkMlx1NThkNFx1NThkNlx1NThkYVx1NThkZFx1NThlMVx1NThlMlx1NThlOVx1NThmM1x1NTkwNVx1NTkwNlx1NTkwYlx1NTkwY1x1NTkxMlx1NTkxM1x1NTkxNFx1ODY0MVx1NTkxZFx1NTkyMVx1NTkyM1x1''@;'; put 'put ''NTkyNFx1NTkyOFx1NTkyZlx1NTkzMFx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzZlx1NTk0M1x1NTk0Nlx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2Ylx1NTk2ZCJdLFsiOGZiOWExIiwiXHU1OTZmXHU1OTcyXHU1OTc1XHU1OTc2XHU1''@;'; put 'put ''OTc5XHU1OTdiXHU1OTdjXHU1OThiXHU1OThjXHU1OThlXHU1OTkyXHU1OTk1XHU1OTk3XHU1OTlmXHU1OWE0XHU1OWE3XHU1OWFkXHU1OWFlXHU1OWFmXHU1OWIwXHU1OWIzXHU1OWI3XHU1OWJhXHU1OWJjXHU1OWMxXHU1OWMzXHU1OWM0XHU1OWM4XHU1OWNhXHU1OWNkXHU1OWQyXHU1OWRk''@;'; put 'put ''XHU1OWRlXHU1OWRmXHU1OWUzXHU1OWU0XHU1OWU3XHU1OWVlXHU1OWVmXHU1OWYxXHU1OWYyXHU1OWY0XHU1OWY3XHU1YTAwXHU1YTA0XHU1YTBjXHU1YTBkXHU1YTBlXHU1YTEyXHU1YTEzXHU1YTFlXHU1YTIzXHU1YTI0XHU1YTI3XHU1YTI4XHU1YTJhXHU1YTJkXHU1YTMwXHU1YTQ0XHU1''@;'; put 'put ''YTQ1XHU1YTQ3XHU1YTQ4XHU1YTRjXHU1YTUwXHU1YTU1XHU1YTVlXHU1YTYzXHU1YTY1XHU1YTY3XHU1YTZkXHU1YTc3XHU1YTdhXHU1YTdiXHU1YTdlXHU1YThiXHU1YTkwXHU1YTkzXHU1YTk2XHU1YTk5XHU1YTljXHU1YTllXHU1YTlmXHU1YWEwXHU1YWEyXHU1YWE3XHU1YWFjXHU1YWIx''@;'; put 'put ''XHU1YWIyXHU1YWIzXHU1YWI1XHU1YWI4XHU1YWJhXHU1YWJiXHU1YWJmIl0sWyI4ZmJhYTEiLCJcdTVhYzRcdTVhYzZcdTVhYzhcdTVhY2ZcdTVhZGFcdTVhZGNcdTVhZTBcdTVhZTVcdTVhZWFcdTVhZWVcdTVhZjVcdTVhZjZcdTVhZmRcdTViMDBcdTViMDFcdTViMDhcdTViMTdcdTViMzRc''@;'; put 'put ''dTViMTlcdTViMWJcdTViMWRcdTViMjFcdTViMjVcdTViMmRcdTViMzhcdTViNDFcdTViNGJcdTViNGNcdTViNTJcdTViNTZcdTViNWVcdTViNjhcdTViNmVcdTViNmZcdTViN2NcdTViN2RcdTViN2VcdTViN2ZcdTViODFcdTViODRcdTViODZcdTViOGFcdTViOGVcdTViOTBcdTViOTFcdTVi''@;'; put 'put ''OTNcdTViOTRcdTViOTZcdTViYThcdTViYTlcdTViYWNcdTViYWRcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFcdTViYmNcdTViYzBcdTViYzFcdTViY2RcdTViY2ZcdTViZDYiLDQsIlx1NWJlMFx1NWJlZlx1NWJmMVx1NWJmNFx1NWJmZFx1NWMwY1x1NWMxN1x1NWMxZVx1NWMxZlx1''@;'; put 'put ''NWMyM1x1NWMyNlx1NWMyOVx1NWMyYlx1NWMyY1x1NWMyZVx1NWMzMFx1NWMzMlx1NWMzNVx1NWMzNlx1NWM1OVx1NWM1YVx1NWM1Y1x1NWM2Mlx1NWM2M1x1NWM2N1x1NWM2OFx1NWM2OSJdLFsiOGZiYmExIiwiXHU1YzZkXHU1YzcwXHU1Yzc0XHU1Yzc1XHU1YzdhXHU1YzdiXHU1YzdjXHU1''@;'; put 'put ''YzdkXHU1Yzg3XHU1Yzg4XHU1YzhhXHU1YzhmXHU1YzkyXHU1YzlkXHU1YzlmXHU1Y2EwXHU1Y2EyXHU1Y2EzXHU1Y2E2XHU1Y2FhXHU1Y2IyXHU1Y2I0XHU1Y2I1XHU1Y2JhXHU1Y2M5XHU1Y2NiXHU1Y2QyXHU1Y2RkXHU1Y2Q3XHU1Y2VlXHU1Y2YxXHU1Y2YyXHU1Y2Y0XHU1ZDAxXHU1ZDA2''@;'; put 'put ''XHU1ZDBkXHU1ZDEyXHU1ZDJiXHU1ZDIzXHU1ZDI0XHU1ZDI2XHU1ZDI3XHU1ZDMxXHU1ZDM0XHU1ZDM5XHU1ZDNkXHU1ZDNmXHU1ZDQyXHU1ZDQzXHU1ZDQ2XHU1ZDQ4XHU1ZDU1XHU1ZDUxXHU1ZDU5XHU1ZDRhXHU1ZDVmXHU1ZDYwXHU1ZDYxXHU1ZDYyXHU1ZDY0XHU1ZDZhXHU1ZDZkXHU1''@;'; put 'put ''ZDcwXHU1ZDc5XHU1ZDdhXHU1ZDdlXHU1ZDdmXHU1ZDgxXHU1ZDgzXHU1ZDg4XHU1ZDhhXHU1ZDkyXHU1ZDkzXHU1ZDk0XHU1ZDk1XHU1ZDk5XHU1ZDliXHU1ZDlmXHU1ZGEwXHU1ZGE3XHU1ZGFiXHU1ZGIwXHU1ZGI0XHU1ZGI4XHU1ZGI5XHU1ZGMzXHU1ZGM3XHU1ZGNiXHU1ZGQwXHU1ZGNl''@;'; put 'put ''XHU1ZGQ4XHU1ZGQ5XHU1ZGUwXHU1ZGU0Il0sWyI4ZmJjYTEiLCJcdTVkZTlcdTVkZjhcdTVkZjlcdTVlMDBcdTVlMDdcdTVlMGRcdTVlMTJcdTVlMTRcdTVlMTVcdTVlMThcdTVlMWZcdTVlMjBcdTVlMmVcdTVlMjhcdTVlMzJcdTVlMzVcdTVlM2VcdTVlNGJcdTVlNTBcdTVlNDlcdTVlNTFc''@;'; put 'put ''dTVlNTZcdTVlNThcdTVlNWJcdTVlNWNcdTVlNWVcdTVlNjhcdTVlNmEiLDQsIlx1NWU3MFx1NWU4MFx1NWU4Ylx1NWU4ZVx1NWVhMlx1NWVhNFx1NWVhNVx1NWVhOFx1NWVhYVx1NWVhY1x1NWViMVx1NWViM1x1NWViZFx1NWViZVx1NWViZlx1NWVjNlx1NWVjY1x1NWVjYlx1NWVjZVx1NWVk''@;'; put 'put ''MVx1NWVkMlx1NWVkNFx1NWVkNVx1NWVkY1x1NWVkZVx1NWVlNVx1NWVlYlx1NWYwMlx1NWYwNlx1NWYwN1x1NWYwOFx1NWYwZVx1NWYxOVx1NWYxY1x1NWYxZFx1NWYyMVx1NWYyMlx1NWYyM1x1NWYyNFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzNFx1NWYzNlx1NWYzYlx1''@;'; put 'put ''NWYzZFx1NWYzZlx1NWY0MFx1NWY0NFx1NWY0NVx1NWY0N1x1NWY0ZFx1NWY1MFx1NWY1NFx1NWY1OFx1NWY1Ylx1NWY2MFx1NWY2M1x1NWY2NFx1NWY2NyJdLFsiOGZiZGExIiwiXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1ZjdlXHU1Zjg5XHU1ZjhkXHU1''@;'; put 'put ''ZjhmXHU1Zjk2XHU1ZjljXHU1ZjlkXHU1ZmEyXHU1ZmE3XHU1ZmFiXHU1ZmE0XHU1ZmFjXHU1ZmFmXHU1ZmIwXHU1ZmIxXHU1ZmI4XHU1ZmM0XHU1ZmM3XHU1ZmM4XHU1ZmM5XHU1ZmNiXHU1ZmQwIiw0LCJcdTVmZGVcdTVmZTFcdTVmZTJcdTVmZThcdTVmZTlcdTVmZWFcdTVmZWNcdTVmZWRc''@;'; put 'put ''dTVmZWVcdTVmZWZcdTVmZjJcdTVmZjNcdTVmZjZcdTVmZmFcdTVmZmNcdTYwMDdcdTYwMGFcdTYwMGRcdTYwMTNcdTYwMTRcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWZcdTYwMjRcdTYwMmRcdTYwMzNcdTYwMzVcdTYwNDBcdTYwNDdcdTYwNDhcdTYwNDlcdTYwNGNcdTYwNTFcdTYwNTRcdTYw''@;'; put 'put ''NTZcdTYwNTdcdTYwNWRcdTYwNjFcdTYwNjdcdTYwNzFcdTYwN2VcdTYwN2ZcdTYwODJcdTYwODZcdTYwODhcdTYwOGFcdTYwOGVcdTYwOTFcdTYwOTNcdTYwOTVcdTYwOThcdTYwOWRcdTYwOWVcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYThcdTYwYjBcdTYwYjFcdTYwYjciXSxbIjhmYmVhMSIs''@;'; put 'put ''Ilx1NjBiYlx1NjBiZVx1NjBjMlx1NjBjNFx1NjBjOFx1NjBjOVx1NjBjYVx1NjBjYlx1NjBjZVx1NjBjZlx1NjBkNFx1NjBkNVx1NjBkOVx1NjBkYlx1NjBkZFx1NjBkZVx1NjBlMlx1NjBlNVx1NjBmMlx1NjBmNVx1NjBmOFx1NjBmY1x1NjBmZFx1NjEwMlx1NjEwN1x1NjEwYVx1NjEwY1x1''@;'; put 'put ''NjExMCIsNCwiXHU2MTE2XHU2MTE3XHU2MTE5XHU2MTFjXHU2MTFlXHU2MTIyXHU2MTJhXHU2MTJiXHU2MTMwXHU2MTMxXHU2MTM1XHU2MTM2XHU2MTM3XHU2MTM5XHU2MTQxXHU2MTQ1XHU2MTQ2XHU2MTQ5XHU2MTVlXHU2MTYwXHU2MTZjXHU2MTcyXHU2MTc4XHU2MTdiXHU2MTdjXHU2MTdm''@;'; put 'put ''XHU2MTgwXHU2MTgxXHU2MTgzXHU2MTg0XHU2MThiXHU2MThkXHU2MTkyXHU2MTkzXHU2MTk3XHU2MTk4XHU2MTljXHU2MTlkXHU2MTlmXHU2MWEwXHU2MWE1XHU2MWE4XHU2MWFhXHU2MWFkXHU2MWI4XHU2MWI5XHU2MWJjXHU2MWMwXHU2MWMxXHU2MWMyXHU2MWNlXHU2MWNmXHU2MWQ1XHU2''@;'; put 'put ''MWRjXHU2MWRkXHU2MWRlXHU2MWRmXHU2MWUxXHU2MWUyXHU2MWU3XHU2MWU5XHU2MWU1Il0sWyI4ZmJmYTEiLCJcdTYxZWNcdTYxZWRcdTYxZWZcdTYyMDFcdTYyMDNcdTYyMDRcdTYyMDdcdTYyMTNcdTYyMTVcdTYyMWNcdTYyMjBcdTYyMjJcdTYyMjNcdTYyMjdcdTYyMjlcdTYyMmJcdTYy''@;'; put 'put ''MzlcdTYyM2RcdTYyNDJcdTYyNDNcdTYyNDRcdTYyNDZcdTYyNGNcdTYyNTBcdTYyNTFcdTYyNTJcdTYyNTRcdTYyNTZcdTYyNWFcdTYyNWNcdTYyNjRcdTYyNmRcdTYyNmZcdTYyNzNcdTYyN2FcdTYyN2RcdTYyOGRcdTYyOGVcdTYyOGZcdTYyOTBcdTYyYTZcdTYyYThcdTYyYjNcdTYyYjZc''@;'; put 'put ''dTYyYjdcdTYyYmFcdTYyYmVcdTYyYmZcdTYyYzRcdTYyY2VcdTYyZDVcdTYyZDZcdTYyZGFcdTYyZWFcdTYyZjJcdTYyZjRcdTYyZmNcdTYyZmRcdTYzMDNcdTYzMDRcdTYzMGFcdTYzMGJcdTYzMGRcdTYzMTBcdTYzMTNcdTYzMTZcdTYzMThcdTYzMjlcdTYzMmFcdTYzMmRcdTYzMzVcdTYz''@;'; put 'put ''MzZcdTYzMzlcdTYzM2NcdTYzNDFcdTYzNDJcdTYzNDNcdTYzNDRcdTYzNDZcdTYzNGFcdTYzNGJcdTYzNGVcdTYzNTJcdTYzNTNcdTYzNTRcdTYzNThcdTYzNWJcdTYzNjVcdTYzNjZcdTYzNmNcdTYzNmRcdTYzNzFcdTYzNzRcdTYzNzUiXSxbIjhmYzBhMSIsIlx1NjM3OFx1NjM3Y1x1NjM3''@;'; put 'put ''ZFx1NjM3Zlx1NjM4Mlx1NjM4NFx1NjM4N1x1NjM4YVx1NjM5MFx1NjM5NFx1NjM5NVx1NjM5OVx1NjM5YVx1NjM5ZVx1NjNhNFx1NjNhNlx1NjNhZFx1NjNhZVx1NjNhZlx1NjNiZFx1NjNjMVx1NjNjNVx1NjNjOFx1NjNjZVx1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkY1x1NjNlMFx1''@;'; put 'put ''NjNlNVx1NjNlYVx1NjNlY1x1NjNmMlx1NjNmM1x1NjNmNVx1NjNmOFx1NjNmOVx1NjQwOVx1NjQwYVx1NjQxMFx1NjQxMlx1NjQxNFx1NjQxOFx1NjQxZVx1NjQyMFx1NjQyMlx1NjQyNFx1NjQyNVx1NjQyOVx1NjQyYVx1NjQyZlx1NjQzMFx1NjQzNVx1NjQzZFx1NjQzZlx1NjQ0Ylx1NjQ0''@;'; put 'put ''Zlx1NjQ1MVx1NjQ1Mlx1NjQ1M1x1NjQ1NFx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2M1x1NjQ2ZFx1NjQ3M1x1NjQ3NFx1NjQ3Ylx1NjQ3ZFx1NjQ4NVx1NjQ4N1x1NjQ4Zlx1NjQ5MFx1NjQ5MVx1NjQ5OFx1NjQ5OVx1NjQ5Ylx1NjQ5ZFx1NjQ5Zlx1''@;'; put 'put ''NjRhMVx1NjRhM1x1NjRhNlx1NjRhOFx1NjRhY1x1NjRiM1x1NjRiZFx1NjRiZVx1NjRiZiJdLFsiOGZjMWExIiwiXHU2NGM0XHU2NGM5XHU2NGNhXHU2NGNiXHU2NGNjXHU2NGNlXHU2NGQwXHU2NGQxXHU2NGQ1XHU2NGQ3XHU2NGU0XHU2NGU1XHU2NGU5XHU2NGVhXHU2NGVkXHU2NGYwXHU2''@;'; put 'put ''NGY1XHU2NGY3XHU2NGZiXHU2NGZmXHU2NTAxXHU2NTA0XHU2NTA4XHU2NTA5XHU2NTBhXHU2NTBmXHU2NTEzXHU2NTE0XHU2NTE2XHU2NTE5XHU2NTFiXHU2NTFlXHU2NTFmXHU2NTIyXHU2NTI2XHU2NTI5XHU2NTJlXHU2NTMxXHU2NTNhXHU2NTNjXHU2NTNkXHU2NTQzXHU2NTQ3XHU2NTQ5''@;'; put 'put ''XHU2NTUwXHU2NTUyXHU2NTU0XHU2NTVmXHU2NTYwXHU2NTY3XHU2NTZiXHU2NTdhXHU2NTdkXHU2NTgxXHU2NTg1XHU2NThhXHU2NTkyXHU2NTk1XHU2NTk4XHU2NTlkXHU2NWEwXHU2NWEzXHU2NWE2XHU2NWFlXHU2NWIyXHU2NWIzXHU2NWI0XHU2NWJmXHU2NWMyXHU2NWM4XHU2NWM5XHU2''@;'; put 'put ''NWNlXHU2NWQwXHU2NWQ0XHU2NWQ2XHU2NWQ4XHU2NWRmXHU2NWYwXHU2NWYyXHU2NWY0XHU2NWY1XHU2NWY5XHU2NWZlXHU2NWZmXHU2NjAwXHU2NjA0XHU2NjA4XHU2NjA5XHU2NjBkXHU2NjExXHU2NjEyXHU2NjE1XHU2NjE2XHU2NjFkIl0sWyI4ZmMyYTEiLCJcdTY2MWVcdTY2MjFcdTY2''@;'; put 'put ''MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2MmFcdTY2MmJcdTY2MmNcdTY2MmVcdTY2MzBcdTY2MzFcdTY2MzNcdTY2MzlcdTY2MzdcdTY2NDBcdTY2NDVcdTY2NDZcdTY2NGFcdTY2NGNcdTY2NTFcdTY2NGVcdTY2NTdcdTY2NThcdTY2NTlcdTY2NWJcdTY2NWNcdTY2NjBcdTY2NjFc''@;'; put 'put ''dTY2ZmJcdTY2NmFcdTY2NmJcdTY2NmNcdTY2N2VcdTY2NzNcdTY2NzVcdTY2N2ZcdTY2NzdcdTY2NzhcdTY2NzlcdTY2N2JcdTY2ODBcdTY2N2NcdTY2OGJcdTY2OGNcdTY2OGRcdTY2OTBcdTY2OTJcdTY2OTlcdTY2OWFcdTY2OWJcdTY2OWNcdTY2OWZcdTY2YTBcdTY2YTRcdTY2YWRcdTY2''@;'; put 'put ''YjFcdTY2YjJcdTY2YjVcdTY2YmJcdTY2YmZcdTY2YzBcdTY2YzJcdTY2YzNcdTY2YzhcdTY2Y2NcdTY2Y2VcdTY2Y2ZcdTY2ZDRcdTY2ZGJcdTY2ZGZcdTY2ZThcdTY2ZWJcdTY2ZWNcdTY2ZWVcdTY2ZmFcdTY3MDVcdTY3MDdcdTY3MGVcdTY3MTNcdTY3MTlcdTY3MWNcdTY3MjBcdTY3MjJc''@;'; put 'put ''dTY3MzNcdTY3M2VcdTY3NDVcdTY3NDdcdTY3NDhcdTY3NGNcdTY3NTRcdTY3NTVcdTY3NWQiXSxbIjhmYzNhMSIsIlx1Njc2Nlx1Njc2Y1x1Njc2ZVx1Njc3NFx1Njc3Nlx1Njc3Ylx1Njc4MVx1Njc4NFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5M1x1Njc5Nlx1Njc5OFx1Njc5OVx1Njc5Ylx1''@;'; put 'put ''NjdiMFx1NjdiMVx1NjdiMlx1NjdiNVx1NjdiYlx1NjdiY1x1NjdiZFx1NjdmOVx1NjdjMFx1NjdjMlx1NjdjM1x1NjdjNVx1NjdjOFx1NjdjOVx1NjdkMlx1NjdkN1x1NjdkOVx1NjdkY1x1NjdlMVx1NjdlNlx1NjdmMFx1NjdmMlx1NjdmNlx1NjdmN1x1Njg1Mlx1NjgxNFx1NjgxOVx1Njgx''@;'; put 'put ''ZFx1NjgxZlx1NjgyOFx1NjgyN1x1NjgyY1x1NjgyZFx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzM1x1NjgzYlx1NjgzZlx1Njg0NFx1Njg0NVx1Njg0YVx1Njg0Y1x1Njg1NVx1Njg1N1x1Njg1OFx1Njg1Ylx1Njg2Ylx1Njg2ZSIsNCwiXHU2ODc1XHU2ODc5XHU2ODdhXHU2ODdiXHU2ODdjXHU2''@;'; put 'put ''ODgyXHU2ODg0XHU2ODg2XHU2ODg4XHU2ODk2XHU2ODk4XHU2ODlhXHU2ODljXHU2OGExXHU2OGEzXHU2OGE1XHU2OGE5XHU2OGFhXHU2OGFlXHU2OGIyXHU2OGJiXHU2OGM1XHU2OGM4XHU2OGNjXHU2OGNmIl0sWyI4ZmM0YTEiLCJcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDZcdTY4ZDlcdTY4''@;'; put 'put ''ZGNcdTY4ZGRcdTY4ZTVcdTY4ZThcdTY4ZWFcdTY4ZWJcdTY4ZWNcdTY4ZWRcdTY4ZjBcdTY4ZjFcdTY4ZjVcdTY4ZjZcdTY4ZmJcdTY4ZmNcdTY4ZmRcdTY5MDZcdTY5MDlcdTY5MGFcdTY5MTBcdTY5MTFcdTY5MTNcdTY5MTZcdTY5MTdcdTY5MzFcdTY5MzNcdTY5MzVcdTY5MzhcdTY5M2Jc''@;'; put 'put ''dTY5NDJcdTY5NDVcdTY5NDlcdTY5NGVcdTY5NTdcdTY5NWJcdTY5NjNcdTY5NjRcdTY5NjVcdTY5NjZcdTY5NjhcdTY5NjlcdTY5NmNcdTY5NzBcdTY5NzFcdTY5NzJcdTY5N2FcdTY5N2JcdTY5N2ZcdTY5ODBcdTY5OGRcdTY5OTJcdTY5OTZcdTY5OThcdTY5YTFcdTY5YTVcdTY5YTZcdTY5''@;'; put 'put ''YThcdTY5YWJcdTY5YWRcdTY5YWZcdTY5YjdcdTY5YjhcdTY5YmFcdTY5YmNcdTY5YzVcdTY5YzhcdTY5ZDFcdTY5ZDZcdTY5ZDdcdTY5ZTJcdTY5ZTVcdTY5ZWVcdTY5ZWZcdTY5ZjFcdTY5ZjNcdTY5ZjVcdTY5ZmVcdTZhMDBcdTZhMDFcdTZhMDNcdTZhMGZcdTZhMTFcdTZhMTVcdTZhMWFc''@;'; put 'put ''dTZhMWRcdTZhMjBcdTZhMjRcdTZhMjhcdTZhMzBcdTZhMzIiXSxbIjhmYzVhMSIsIlx1NmEzNFx1NmEzN1x1NmEzYlx1NmEzZVx1NmEzZlx1NmE0NVx1NmE0Nlx1NmE0OVx1NmE0YVx1NmE0ZVx1NmE1MFx1NmE1MVx1NmE1Mlx1NmE1NVx1NmE1Nlx1NmE1Ylx1NmE2NFx1NmE2N1x1NmE2YVx1''@;'; put 'put ''NmE3MVx1NmE3M1x1NmE3ZVx1NmE4MVx1NmE4M1x1NmE4Nlx1NmE4N1x1NmE4OVx1NmE4Ylx1NmE5MVx1NmE5Ylx1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhNVx1NmFhYlx1NmFhZlx1NmFiMFx1NmFiMVx1NmFiNFx1NmFiZFx1NmFiZVx1NmFiZlx1NmFjNlx1NmFjOVx1NmFjOFx1NmFjY1x1NmFk''@;'; put 'put ''MFx1NmFkNFx1NmFkNVx1NmFkNlx1NmFkY1x1NmFkZFx1NmFlNFx1NmFlN1x1NmFlY1x1NmFmMFx1NmFmMVx1NmFmMlx1NmFmY1x1NmFmZFx1NmIwMlx1NmIwM1x1NmIwNlx1NmIwN1x1NmIwOVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxN1x1NmIxYlx1NmIxZVx1NmIyNFx1NmIyOFx1NmIyYlx1''@;'; put 'put ''NmIyY1x1NmIyZlx1NmIzNVx1NmIzNlx1NmIzYlx1NmIzZlx1NmI0Nlx1NmI0YVx1NmI0ZFx1NmI1Mlx1NmI1Nlx1NmI1OFx1NmI1ZFx1NmI2MFx1NmI2N1x1NmI2Ylx1NmI2ZVx1NmI3MFx1NmI3NVx1NmI3ZCJdLFsiOGZjNmExIiwiXHU2YjdlXHU2YjgyXHU2Yjg1XHU2Yjk3XHU2YjliXHU2''@;'; put 'put ''YjlmXHU2YmEwXHU2YmEyXHU2YmEzXHU2YmE4XHU2YmE5XHU2YmFjXHU2YmFkXHU2YmFlXHU2YmIwXHU2YmI4XHU2YmI5XHU2YmJkXHU2YmJlXHU2YmMzXHU2YmM0XHU2YmM5XHU2YmNjXHU2YmQ2XHU2YmRhXHU2YmUxXHU2YmUzXHU2YmU2XHU2YmU3XHU2YmVlXHU2YmYxXHU2YmY3XHU2YmY5''@;'; put 'put ''XHU2YmZmXHU2YzAyXHU2YzA0XHU2YzA1XHU2YzA5XHU2YzBkXHU2YzBlXHU2YzEwXHU2YzEyXHU2YzE5XHU2YzFmXHU2YzI2XHU2YzI3XHU2YzI4XHU2YzJjXHU2YzJlXHU2YzMzXHU2YzM1XHU2YzM2XHU2YzNhXHU2YzNiXHU2YzNmXHU2YzRhXHU2YzRiXHU2YzRkXHU2YzRmXHU2YzUyXHU2''@;'; put 'put ''YzU0XHU2YzU5XHU2YzViXHU2YzVjXHU2YzZiXHU2YzZkXHU2YzZmXHU2Yzc0XHU2Yzc2XHU2Yzc4XHU2Yzc5XHU2YzdiXHU2Yzg1XHU2Yzg2XHU2Yzg3XHU2Yzg5XHU2Yzk0XHU2Yzk1XHU2Yzk3XHU2Yzk4XHU2YzljXHU2YzlmXHU2Y2IwXHU2Y2IyXHU2Y2I0XHU2Y2MyXHU2Y2M2XHU2Y2Nk''@;'; put 'put ''XHU2Y2NmXHU2Y2QwXHU2Y2QxXHU2Y2QyXHU2Y2Q0XHU2Y2Q2Il0sWyI4ZmM3YTEiLCJcdTZjZGFcdTZjZGNcdTZjZTBcdTZjZTdcdTZjZTlcdTZjZWJcdTZjZWNcdTZjZWVcdTZjZjJcdTZjZjRcdTZkMDRcdTZkMDdcdTZkMGFcdTZkMGVcdTZkMGZcdTZkMTFcdTZkMTNcdTZkMWFcdTZkMjZc''@;'; put 'put ''dTZkMjdcdTZkMjhcdTZjNjdcdTZkMmVcdTZkMmZcdTZkMzFcdTZkMzlcdTZkM2NcdTZkM2ZcdTZkNTdcdTZkNWVcdTZkNWZcdTZkNjFcdTZkNjVcdTZkNjdcdTZkNmZcdTZkNzBcdTZkN2NcdTZkODJcdTZkODdcdTZkOTFcdTZkOTJcdTZkOTRcdTZkOTZcdTZkOTdcdTZkOThcdTZkYWFcdTZk''@;'; put 'put ''YWNcdTZkYjRcdTZkYjdcdTZkYjlcdTZkYmRcdTZkYmZcdTZkYzRcdTZkYzhcdTZkY2FcdTZkY2VcdTZkY2ZcdTZkZDZcdTZkZGJcdTZkZGRcdTZkZGZcdTZkZTBcdTZkZTJcdTZkZTVcdTZkZTlcdTZkZWZcdTZkZjBcdTZkZjRcdTZkZjZcdTZkZmNcdTZlMDBcdTZlMDRcdTZlMWVcdTZlMjJc''@;'; put 'put ''dTZlMjdcdTZlMzJcdTZlMzZcdTZlMzlcdTZlM2JcdTZlM2NcdTZlNDRcdTZlNDVcdTZlNDhcdTZlNDlcdTZlNGJcdTZlNGZcdTZlNTFcdTZlNTJcdTZlNTNcdTZlNTRcdTZlNTdcdTZlNWNcdTZlNWRcdTZlNWUiXSxbIjhmYzhhMSIsIlx1NmU2Mlx1NmU2M1x1NmU2OFx1NmU3M1x1NmU3Ylx1''@;'; put 'put ''NmU3ZFx1NmU4ZFx1NmU5M1x1NmU5OVx1NmVhMFx1NmVhN1x1NmVhZFx1NmVhZVx1NmViMVx1NmViM1x1NmViYlx1NmViZlx1NmVjMFx1NmVjMVx1NmVjM1x1NmVjN1x1NmVjOFx1NmVjYVx1NmVjZFx1NmVjZVx1NmVjZlx1NmVlYlx1NmVlZFx1NmVlZVx1NmVmOVx1NmVmYlx1NmVmZFx1NmYw''@;'; put 'put ''NFx1NmYwOFx1NmYwYVx1NmYwY1x1NmYwZFx1NmYxNlx1NmYxOFx1NmYxYVx1NmYxYlx1NmYyNlx1NmYyOVx1NmYyYVx1NmYyZlx1NmYzMFx1NmYzM1x1NmYzNlx1NmYzYlx1NmYzY1x1NmYyZFx1NmY0Zlx1NmY1MVx1NmY1Mlx1NmY1M1x1NmY1N1x1NmY1OVx1NmY1YVx1NmY1ZFx1NmY1ZVx1''@;'; put 'put ''NmY2MVx1NmY2Mlx1NmY2OFx1NmY2Y1x1NmY3ZFx1NmY3ZVx1NmY4M1x1NmY4N1x1NmY4OFx1NmY4Ylx1NmY4Y1x1NmY4ZFx1NmY5MFx1NmY5Mlx1NmY5M1x1NmY5NFx1NmY5Nlx1NmY5YVx1NmY5Zlx1NmZhMFx1NmZhNVx1NmZhNlx1NmZhN1x1NmZhOFx1NmZhZVx1NmZhZlx1NmZiMFx1NmZi''@;'; put 'put ''NVx1NmZiNlx1NmZiY1x1NmZjNVx1NmZjN1x1NmZjOFx1NmZjYSJdLFsiOGZjOWExIiwiXHU2ZmRhXHU2ZmRlXHU2ZmU4XHU2ZmU5XHU2ZmYwXHU2ZmY1XHU2ZmY5XHU2ZmZjXHU2ZmZkXHU3MDAwXHU3MDA1XHU3MDA2XHU3MDA3XHU3MDBkXHU3MDE3XHU3MDIwXHU3MDIzXHU3MDJmXHU3MDM0''@;'; put 'put ''XHU3MDM3XHU3MDM5XHU3MDNjXHU3MDQzXHU3MDQ0XHU3MDQ4XHU3MDQ5XHU3MDRhXHU3MDRiXHU3MDU0XHU3MDU1XHU3MDVkXHU3MDVlXHU3MDRlXHU3MDY0XHU3MDY1XHU3MDZjXHU3MDZlXHU3MDc1XHU3MDc2XHU3MDdlXHU3MDgxXHU3MDg1XHU3MDg2XHU3MDk0Iiw0LCJcdTcwOWJcdTcw''@;'; put 'put ''YTRcdTcwYWJcdTcwYjBcdTcwYjFcdTcwYjRcdTcwYjdcdTcwY2FcdTcwZDFcdTcwZDNcdTcwZDRcdTcwZDVcdTcwZDZcdTcwZDhcdTcwZGNcdTcwZTRcdTcwZmFcdTcxMDMiLDQsIlx1NzEwYlx1NzEwY1x1NzEwZlx1NzExZVx1NzEyMFx1NzEyYlx1NzEyZFx1NzEyZlx1NzEzMFx1NzEzMVx1''@;'; put 'put ''NzEzOFx1NzE0MVx1NzE0NVx1NzE0Nlx1NzE0N1x1NzE0YVx1NzE0Ylx1NzE1MFx1NzE1Mlx1NzE1N1x1NzE1YVx1NzE1Y1x1NzE1ZVx1NzE2MCJdLFsiOGZjYWExIiwiXHU3MTY4XHU3MTc5XHU3MTgwXHU3MTg1XHU3MTg3XHU3MThjXHU3MTkyXHU3MTlhXHU3MTliXHU3MWEwXHU3MWEyXHU3''@;'; put 'put ''MWFmXHU3MWIwXHU3MWIyXHU3MWIzXHU3MWJhXHU3MWJmXHU3MWMwXHU3MWMxXHU3MWM0XHU3MWNiXHU3MWNjXHU3MWQzXHU3MWQ2XHU3MWQ5XHU3MWRhXHU3MWRjXHU3MWY4XHU3MWZlXHU3MjAwXHU3MjA3XHU3MjA4XHU3MjA5XHU3MjEzXHU3MjE3XHU3MjFhXHU3MjFkXHU3MjFmXHU3MjI0''@;'; put 'put ''XHU3MjJiXHU3MjJmXHU3MjM0XHU3MjM4XHU3MjM5XHU3MjQxXHU3MjQyXHU3MjQzXHU3MjQ1XHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUzXHU3MjU1XHU3MjU2XHU3MjVhXHU3MjVjXHU3MjVlXHU3MjYwXHU3MjYzXHU3MjY4XHU3MjZiXHU3MjZlXHU3MjZmXHU3MjcxXHU3Mjc3XHU3Mjc4XHU3''@;'; put 'put ''MjdiXHU3MjdjXHU3MjdmXHU3Mjg0XHU3Mjg5XHU3MjhkXHU3MjhlXHU3MjkzXHU3MjliXHU3MmE4XHU3MmFkXHU3MmFlXHU3MmIxXHU3MmI0XHU3MmJlXHU3MmMxXHU3MmM3XHU3MmM5XHU3MmNjXHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRmXHU3MmU1XHU3MmYzXHU3MmY0XHU3MmZhXHU3MmZi''@;'; put 'put ''Il0sWyI4ZmNiYTEiLCJcdTcyZmVcdTczMDJcdTczMDRcdTczMDVcdTczMDdcdTczMGJcdTczMGRcdTczMTJcdTczMTNcdTczMThcdTczMTlcdTczMWVcdTczMjJcdTczMjRcdTczMjdcdTczMjhcdTczMmNcdTczMzFcdTczMzJcdTczMzVcdTczM2FcdTczM2JcdTczM2RcdTczNDNcdTczNGRc''@;'; put 'put ''dTczNTBcdTczNTJcdTczNTZcdTczNThcdTczNWRcdTczNWVcdTczNWZcdTczNjBcdTczNjZcdTczNjdcdTczNjlcdTczNmJcdTczNmNcdTczNmVcdTczNmZcdTczNzFcdTczNzdcdTczNzlcdTczN2NcdTczODBcdTczODFcdTczODNcdTczODVcdTczODZcdTczOGVcdTczOTBcdTczOTNcdTcz''@;'; put 'put ''OTVcdTczOTdcdTczOThcdTczOWNcdTczOWVcdTczOWZcdTczYTBcdTczYTJcdTczYTVcdTczYTZcdTczYWFcdTczYWJcdTczYWRcdTczYjVcdTczYjdcdTczYjlcdTczYmNcdTczYmRcdTczYmZcdTczYzVcdTczYzZcdTczYzlcdTczY2JcdTczY2NcdTczY2ZcdTczZDJcdTczZDNcdTczZDZc''@;'; put 'put ''dTczZDlcdTczZGRcdTczZTFcdTczZTNcdTczZTZcdTczZTdcdTczZTlcdTczZjRcdTczZjVcdTczZjdcdTczZjlcdTczZmFcdTczZmJcdTczZmQiXSxbIjhmY2NhMSIsIlx1NzNmZlx1NzQwMFx1NzQwMVx1NzQwNFx1NzQwN1x1NzQwYVx1NzQxMVx1NzQxYVx1NzQxYlx1NzQyNFx1NzQyNlx1''@;'; put 'put ''NzQyOCIsOSwiXHU3NDM5XHU3NDQwXHU3NDQzXHU3NDQ0XHU3NDQ2XHU3NDQ3XHU3NDRiXHU3NDRkXHU3NDUxXHU3NDUyXHU3NDU3XHU3NDVkXHU3NDYyXHU3NDY2XHU3NDY3XHU3NDY4XHU3NDZiXHU3NDZkXHU3NDZlXHU3NDcxXHU3NDcyXHU3NDgwXHU3NDgxXHU3NDg1XHU3NDg2XHU3NDg3''@;'; put 'put ''XHU3NDg5XHU3NDhmXHU3NDkwXHU3NDkxXHU3NDkyXHU3NDk4XHU3NDk5XHU3NDlhXHU3NDljXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEzXHU3NGE2XHU3NGE4XHU3NGE5XHU3NGFhXHU3NGFiXHU3NGFlXHU3NGFmXHU3NGIxXHU3NGIyXHU3NGI1XHU3NGI5XHU3NGJiXHU3NGJmXHU3NGM4XHU3''@;'; put 'put ''NGM5XHU3NGNjXHU3NGQwXHU3NGQzXHU3NGQ4XHU3NGRhXHU3NGRiXHU3NGRlXHU3NGRmXHU3NGU0XHU3NGU4XHU3NGVhXHU3NGViXHU3NGVmXHU3NGY0XHU3NGZhXHU3NGZiXHU3NGZjXHU3NGZmXHU3NTA2Il0sWyI4ZmNkYTEiLCJcdTc1MTJcdTc1MTZcdTc1MTdcdTc1MjBcdTc1MjFcdTc1''@;'; put 'put ''MjRcdTc1MjdcdTc1MjlcdTc1MmFcdTc1MmZcdTc1MzZcdTc1MzlcdTc1M2RcdTc1M2VcdTc1M2ZcdTc1NDBcdTc1NDNcdTc1NDdcdTc1NDhcdTc1NGVcdTc1NTBcdTc1NTJcdTc1NTdcdTc1NWVcdTc1NWZcdTc1NjFcdTc1NmZcdTc1NzFcdTc1NzkiLDUsIlx1NzU4MVx1NzU4NVx1NzU5MFx1''@;'; put 'put ''NzU5Mlx1NzU5M1x1NzU5NVx1NzU5OVx1NzU5Y1x1NzVhMlx1NzVhNFx1NzViNFx1NzViYVx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNFx1NzVjNlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkN1x1NzVkY1x1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNFx1NzVlN1x1NzVlY1x1NzVlZVx1NzVlZlx1NzVm''@;'; put 'put ''MVx1NzVmOVx1NzYwMFx1NzYwMlx1NzYwM1x1NzYwNFx1NzYwN1x1NzYwOFx1NzYwYVx1NzYwY1x1NzYwZlx1NzYxMlx1NzYxM1x1NzYxNVx1NzYxNlx1NzYxOVx1NzYxYlx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyM1x1NzYyNVx1NzYyNlx1NzYyOVx1NzYyZFx1NzYzMlx1NzYzM1x1NzYzNVx1''@;'; put 'put ''NzYzOFx1NzYzOSJdLFsiOGZjZWExIiwiXHU3NjNhXHU3NjNjXHU3NjRhXHU3NjQwXHU3NjQxXHU3NjQzXHU3NjQ0XHU3NjQ1XHU3NjQ5XHU3NjRiXHU3NjU1XHU3NjU5XHU3NjVmXHU3NjY0XHU3NjY1XHU3NjZkXHU3NjZlXHU3NjZmXHU3NjcxXHU3Njc0XHU3NjgxXHU3Njg1XHU3NjhjXHU3''@;'; put 'put ''NjhkXHU3Njk1XHU3NjliXHU3NjljXHU3NjlkXHU3NjlmXHU3NmEwXHU3NmEyIiw2LCJcdTc2YWFcdTc2YWRcdTc2YmRcdTc2YzFcdTc2YzVcdTc2YzlcdTc2Y2JcdTc2Y2NcdTc2Y2VcdTc2ZDRcdTc2ZDlcdTc2ZTBcdTc2ZTZcdTc2ZThcdTc2ZWNcdTc2ZjBcdTc2ZjFcdTc2ZjZcdTc2Zjlc''@;'; put 'put ''dTc2ZmNcdTc3MDBcdTc3MDZcdTc3MGFcdTc3MGVcdTc3MTJcdTc3MTRcdTc3MTVcdTc3MTdcdTc3MTlcdTc3MWFcdTc3MWNcdTc3MjJcdTc3MjhcdTc3MmRcdTc3MmVcdTc3MmZcdTc3MzRcdTc3MzVcdTc3MzZcdTc3MzlcdTc3M2RcdTc3M2VcdTc3NDJcdTc3NDVcdTc3NDZcdTc3NGFcdTc3''@;'; put 'put ''NGRcdTc3NGVcdTc3NGZcdTc3NTJcdTc3NTZcdTc3NTdcdTc3NWNcdTc3NWVcdTc3NWZcdTc3NjBcdTc3NjIiXSxbIjhmY2ZhMSIsIlx1Nzc2NFx1Nzc2N1x1Nzc2YVx1Nzc2Y1x1Nzc3MFx1Nzc3Mlx1Nzc3M1x1Nzc3NFx1Nzc3YVx1Nzc3ZFx1Nzc4MFx1Nzc4NFx1Nzc4Y1x1Nzc4ZFx1Nzc5''@;'; put 'put ''NFx1Nzc5NVx1Nzc5Nlx1Nzc5YVx1Nzc5Zlx1NzdhMlx1NzdhN1x1NzdhYVx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiNVx1NzdiZVx1NzdjM1x1NzdjOVx1NzdkMVx1NzdkMlx1NzdkNVx1NzdkOVx1NzdkZVx1NzdkZlx1NzdlMFx1NzdlNFx1NzdlNlx1NzdlYVx1NzdlY1x1NzdmMFx1NzdmMVx1''@;'; put 'put ''NzdmNFx1NzdmOFx1NzdmYlx1NzgwNVx1NzgwNlx1NzgwOVx1NzgwZFx1NzgwZVx1NzgxMVx1NzgxZFx1NzgyMVx1NzgyMlx1NzgyM1x1NzgyZFx1NzgyZVx1NzgzMFx1NzgzNVx1NzgzN1x1Nzg0M1x1Nzg0NFx1Nzg0N1x1Nzg0OFx1Nzg0Y1x1Nzg0ZVx1Nzg1Mlx1Nzg1Y1x1Nzg1ZVx1Nzg2''@;'; put 'put ''MFx1Nzg2MVx1Nzg2M1x1Nzg2NFx1Nzg2OFx1Nzg2YVx1Nzg2ZVx1Nzg3YVx1Nzg3ZVx1Nzg4YVx1Nzg4Zlx1Nzg5NFx1Nzg5OFx1NzhhMVx1Nzg5ZFx1Nzg5ZVx1Nzg5Zlx1NzhhNFx1NzhhOFx1NzhhY1x1NzhhZFx1NzhiMFx1NzhiMVx1NzhiMlx1NzhiMyJdLFsiOGZkMGExIiwiXHU3OGJi''@;'; put 'put ''XHU3OGJkXHU3OGJmXHU3OGM3XHU3OGM4XHU3OGM5XHU3OGNjXHU3OGNlXHU3OGQyXHU3OGQzXHU3OGQ1XHU3OGQ2XHU3OGU0XHU3OGRiXHU3OGRmXHU3OGUwXHU3OGUxXHU3OGU2XHU3OGVhXHU3OGYyXHU3OGYzXHU3OTAwXHU3OGY2XHU3OGY3XHU3OGZhXHU3OGZiXHU3OGZmXHU3OTA2XHU3''@;'; put 'put ''OTBjXHU3OTEwXHU3OTFhXHU3OTFjXHU3OTFlXHU3OTFmXHU3OTIwXHU3OTI1XHU3OTI3XHU3OTI5XHU3OTJkXHU3OTMxXHU3OTM0XHU3OTM1XHU3OTNiXHU3OTNkXHU3OTNmXHU3OTQ0XHU3OTQ1XHU3OTQ2XHU3OTRhXHU3OTRiXHU3OTRmXHU3OTUxXHU3OTU0XHU3OTU4XHU3OTViXHU3OTVj''@;'; put 'put ''XHU3OTY3XHU3OTY5XHU3OTZiXHU3OTcyXHU3OTc5XHU3OTdiXHU3OTdjXHU3OTdlXHU3OThiXHU3OThjXHU3OTkxXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk4XHU3OTliXHU3OTljXHU3OWExXHU3OWE4XHU3OWE5XHU3OWFiXHU3OWFmXHU3OWIxXHU3OWI0XHU3OWI4XHU3OWJiXHU3''@;'; put 'put ''OWMyXHU3OWM0XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNmXHU3OWQ0XHU3OWQ2XHU3OWRhXHU3OWRkXHU3OWRlIl0sWyI4ZmQxYTEiLCJcdTc5ZTBcdTc5ZTJcdTc5ZTVcdTc5ZWFcdTc5ZWJcdTc5ZWRcdTc5ZjFcdTc5ZjhcdTc5ZmNcdTdhMDJcdTdhMDNcdTdhMDdcdTdhMDlcdTdhMGFcdTdh''@;'; put 'put ''MGNcdTdhMTFcdTdhMTVcdTdhMWJcdTdhMWVcdTdhMjFcdTdhMjdcdTdhMmJcdTdhMmRcdTdhMmZcdTdhMzBcdTdhMzRcdTdhMzVcdTdhMzhcdTdhMzlcdTdhM2FcdTdhNDRcdTdhNDVcdTdhNDdcdTdhNDhcdTdhNGNcdTdhNTVcdTdhNTZcdTdhNTlcdTdhNWNcdTdhNWRcdTdhNWZcdTdhNjBc''@;'; put 'put ''dTdhNjVcdTdhNjdcdTdhNmFcdTdhNmRcdTdhNzVcdTdhNzhcdTdhN2VcdTdhODBcdTdhODJcdTdhODVcdTdhODZcdTdhOGFcdTdhOGJcdTdhOTBcdTdhOTFcdTdhOTRcdTdhOWVcdTdhYTBcdTdhYTNcdTdhYWNcdTdhYjNcdTdhYjVcdTdhYjlcdTdhYmJcdTdhYmNcdTdhYzZcdTdhYzlcdTdh''@;'; put 'put ''Y2NcdTdhY2VcdTdhZDFcdTdhZGJcdTdhZThcdTdhZTlcdTdhZWJcdTdhZWNcdTdhZjFcdTdhZjRcdTdhZmJcdTdhZmRcdTdhZmVcdTdiMDdcdTdiMTRcdTdiMWZcdTdiMjNcdTdiMjdcdTdiMjlcdTdiMmFcdTdiMmJcdTdiMmRcdTdiMmVcdTdiMmZcdTdiMzAiXSxbIjhmZDJhMSIsIlx1N2Iz''@;'; put 'put ''MVx1N2IzNFx1N2IzZFx1N2IzZlx1N2I0MFx1N2I0MVx1N2I0N1x1N2I0ZVx1N2I1NVx1N2I2MFx1N2I2NFx1N2I2Nlx1N2I2OVx1N2I2YVx1N2I2ZFx1N2I2Zlx1N2I3Mlx1N2I3M1x1N2I3N1x1N2I4NFx1N2I4OVx1N2I4ZVx1N2I5MFx1N2I5MVx1N2I5Nlx1N2I5Ylx1N2I5ZVx1N2JhMFx1''@;'; put 'put ''N2JhNVx1N2JhY1x1N2JhZlx1N2JiMFx1N2JiMlx1N2JiNVx1N2JiNlx1N2JiYVx1N2JiYlx1N2JiY1x1N2JiZFx1N2JjMlx1N2JjNVx1N2JjOFx1N2JjYVx1N2JkNFx1N2JkNlx1N2JkN1x1N2JkOVx1N2JkYVx1N2JkYlx1N2JlOFx1N2JlYVx1N2JmMlx1N2JmNFx1N2JmNVx1N2JmOFx1N2Jm''@;'; put 'put ''OVx1N2JmYVx1N2JmY1x1N2JmZVx1N2MwMVx1N2MwMlx1N2MwM1x1N2MwNFx1N2MwNlx1N2MwOVx1N2MwYlx1N2MwY1x1N2MwZVx1N2MwZlx1N2MxOVx1N2MxYlx1N2MyMFx1N2MyNVx1N2MyNlx1N2MyOFx1N2MyY1x1N2MzMVx1N2MzM1x1N2MzNFx1N2MzNlx1N2MzOVx1N2MzYVx1N2M0Nlx1''@;'; put 'put ''N2M0YVx1N2M1NVx1N2M1MVx1N2M1Mlx1N2M1M1x1N2M1OSIsNV0sWyI4ZmQzYTEiLCJcdTdjNjFcdTdjNjNcdTdjNjdcdTdjNjlcdTdjNmRcdTdjNmVcdTdjNzBcdTdjNzJcdTdjNzlcdTdjN2NcdTdjN2RcdTdjODZcdTdjODdcdTdjOGZcdTdjOTRcdTdjOWVcdTdjYTBcdTdjYTZcdTdjYjBc''@;'; put 'put ''dTdjYjZcdTdjYjdcdTdjYmFcdTdjYmJcdTdjYmNcdTdjYmZcdTdjYzRcdTdjYzdcdTdjYzhcdTdjYzlcdTdjY2RcdTdjY2ZcdTdjZDNcdTdjZDRcdTdjZDVcdTdjZDdcdTdjZDlcdTdjZGFcdTdjZGRcdTdjZTZcdTdjZTlcdTdjZWJcdTdjZjVcdTdkMDNcdTdkMDdcdTdkMDhcdTdkMDlcdTdk''@;'; put 'put ''MGZcdTdkMTFcdTdkMTJcdTdkMTNcdTdkMTZcdTdkMWRcdTdkMWVcdTdkMjNcdTdkMjZcdTdkMmFcdTdkMmRcdTdkMzFcdTdkM2NcdTdkM2RcdTdkM2VcdTdkNDBcdTdkNDFcdTdkNDdcdTdkNDhcdTdkNGRcdTdkNTFcdTdkNTNcdTdkNTdcdTdkNTlcdTdkNWFcdTdkNWNcdTdkNWRcdTdkNjVc''@;'; put 'put ''dTdkNjdcdTdkNmFcdTdkNzBcdTdkNzhcdTdkN2FcdTdkN2JcdTdkN2ZcdTdkODFcdTdkODJcdTdkODNcdTdkODVcdTdkODZcdTdkODhcdTdkOGJcdTdkOGNcdTdkOGRcdTdkOTFcdTdkOTZcdTdkOTdcdTdkOWQiXSxbIjhmZDRhMSIsIlx1N2Q5ZVx1N2RhNlx1N2RhN1x1N2RhYVx1N2RiM1x1''@;'; put 'put ''N2RiNlx1N2RiN1x1N2RiOVx1N2RjMiIsNCwiXHU3ZGNjXHU3ZGNkXHU3ZGNlXHU3ZGQ3XHU3ZGQ5XHU3ZTAwXHU3ZGUyXHU3ZGU1XHU3ZGU2XHU3ZGVhXHU3ZGViXHU3ZGVkXHU3ZGYxXHU3ZGY1XHU3ZGY2XHU3ZGY5XHU3ZGZhXHU3ZTA4XHU3ZTEwXHU3ZTExXHU3ZTE1XHU3ZTE3XHU3ZTFj''@;'; put 'put ''XHU3ZTFkXHU3ZTIwXHU3ZTI3XHU3ZTI4XHU3ZTJjXHU3ZTJkXHU3ZTJmXHU3ZTMzXHU3ZTM2XHU3ZTNmXHU3ZTQ0XHU3ZTQ1XHU3ZTQ3XHU3ZTRlXHU3ZTUwXHU3ZTUyXHU3ZTU4XHU3ZTVmXHU3ZTYxXHU3ZTYyXHU3ZTY1XHU3ZTZiXHU3ZTZlXHU3ZTZmXHU3ZTczXHU3ZTc4XHU3ZTdlXHU3''@;'; put 'put ''ZTgxXHU3ZTg2XHU3ZTg3XHU3ZThhXHU3ZThkXHU3ZTkxXHU3ZTk1XHU3ZTk4XHU3ZTlhXHU3ZTlkXHU3ZTllXHU3ZjNjXHU3ZjNiXHU3ZjNkXHU3ZjNlXHU3ZjNmXHU3ZjQzXHU3ZjQ0XHU3ZjQ3XHU3ZjRmXHU3ZjUyXHU3ZjUzXHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjYxXHU3ZjYzXHU3ZjY0''@;'; put 'put ''XHU3ZjY1XHU3ZjY2XHU3ZjZkIl0sWyI4ZmQ1YTEiLCJcdTdmNzFcdTdmN2RcdTdmN2VcdTdmN2ZcdTdmODBcdTdmOGJcdTdmOGRcdTdmOGZcdTdmOTBcdTdmOTFcdTdmOTZcdTdmOTdcdTdmOWNcdTdmYTFcdTdmYTJcdTdmYTZcdTdmYWFcdTdmYWRcdTdmYjRcdTdmYmNcdTdmYmZcdTdmYzBc''@;'; put 'put ''dTdmYzNcdTdmYzhcdTdmY2VcdTdmY2ZcdTdmZGJcdTdmZGZcdTdmZTNcdTdmZTVcdTdmZThcdTdmZWNcdTdmZWVcdTdmZWZcdTdmZjJcdTdmZmFcdTdmZmRcdTdmZmVcdTdmZmZcdTgwMDdcdTgwMDhcdTgwMGFcdTgwMGRcdTgwMGVcdTgwMGZcdTgwMTFcdTgwMTNcdTgwMTRcdTgwMTZcdTgw''@;'; put 'put ''MWRcdTgwMWVcdTgwMWZcdTgwMjBcdTgwMjRcdTgwMjZcdTgwMmNcdTgwMmVcdTgwMzBcdTgwMzRcdTgwMzVcdTgwMzdcdTgwMzlcdTgwM2FcdTgwM2NcdTgwM2VcdTgwNDBcdTgwNDRcdTgwNjBcdTgwNjRcdTgwNjZcdTgwNmRcdTgwNzFcdTgwNzVcdTgwODFcdTgwODhcdTgwOGVcdTgwOWNc''@;'; put 'put ''dTgwOWVcdTgwYTZcdTgwYTdcdTgwYWJcdTgwYjhcdTgwYjlcdTgwYzhcdTgwY2RcdTgwY2ZcdTgwZDJcdTgwZDRcdTgwZDVcdTgwZDdcdTgwZDhcdTgwZTBcdTgwZWRcdTgwZWUiXSxbIjhmZDZhMSIsIlx1ODBmMFx1ODBmMlx1ODBmM1x1ODBmNlx1ODBmOVx1ODBmYVx1ODBmZVx1ODEwM1x1''@;'; put 'put ''ODEwYlx1ODExNlx1ODExN1x1ODExOFx1ODExY1x1ODExZVx1ODEyMFx1ODEyNFx1ODEyN1x1ODEyY1x1ODEzMFx1ODEzNVx1ODEzYVx1ODEzY1x1ODE0NVx1ODE0N1x1ODE0YVx1ODE0Y1x1ODE1Mlx1ODE1N1x1ODE2MFx1ODE2MVx1ODE2N1x1ODE2OFx1ODE2OVx1ODE2ZFx1ODE2Zlx1ODE3''@;'; put 'put ''N1x1ODE4MVx1ODE5MFx1ODE4NFx1ODE4NVx1ODE4Nlx1ODE4Ylx1ODE4ZVx1ODE5Nlx1ODE5OFx1ODE5Ylx1ODE5ZVx1ODFhMlx1ODFhZVx1ODFiMlx1ODFiNFx1ODFiYlx1ODFjYlx1ODFjM1x1ODFjNVx1ODFjYVx1ODFjZVx1ODFjZlx1ODFkNVx1ODFkN1x1ODFkYlx1ODFkZFx1ODFkZVx1''@;'; put 'put ''ODFlMVx1ODFlNFx1ODFlYlx1ODFlY1x1ODFmMFx1ODFmMVx1ODFmMlx1ODFmNVx1ODFmNlx1ODFmOFx1ODFmOVx1ODFmZFx1ODFmZlx1ODIwMFx1ODIwM1x1ODIwZlx1ODIxM1x1ODIxNFx1ODIxOVx1ODIxYVx1ODIxZFx1ODIyMVx1ODIyMlx1ODIyOFx1ODIzMlx1ODIzNFx1ODIzYVx1ODI0''@;'; put 'put ''M1x1ODI0NFx1ODI0NVx1ODI0NiJdLFsiOGZkN2ExIiwiXHU4MjRiXHU4MjRlXHU4MjRmXHU4MjUxXHU4MjU2XHU4MjVjXHU4MjYwXHU4MjYzXHU4MjY3XHU4MjZkXHU4Mjc0XHU4MjdiXHU4MjdkXHU4MjdmXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg0XHU4Mjg3XHU4Mjg5XHU4MjhhXHU4Mjhl''@;'; put 'put ''XHU4MjkxXHU4Mjk0XHU4Mjk2XHU4Mjk4XHU4MjlhXHU4MjliXHU4MmEwXHU4MmExXHU4MmEzXHU4MmE0XHU4MmE3XHU4MmE4XHU4MmE5XHU4MmFhXHU4MmFlXHU4MmIwXHU4MmIyXHU4MmI0XHU4MmI3XHU4MmJhXHU4MmJjXHU4MmJlXHU4MmJmXHU4MmM2XHU4MmQwXHU4MmQ1XHU4MmRhXHU4''@;'; put 'put ''MmUwXHU4MmUyXHU4MmU0XHU4MmU4XHU4MmVhXHU4MmVkXHU4MmVmXHU4MmY2XHU4MmY3XHU4MmZkXHU4MmZlXHU4MzAwXHU4MzAxXHU4MzA3XHU4MzA4XHU4MzBhXHU4MzBiXHU4MzU0XHU4MzFiXHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIxXHU4MzIyXHU4MzJjXHU4MzJkXHU4MzJlXHU4MzMw''@;'; put 'put ''XHU4MzMzXHU4MzM3XHU4MzNhXHU4MzNjXHU4MzNkXHU4MzQyXHU4MzQzXHU4MzQ0XHU4MzQ3XHU4MzRkXHU4MzRlXHU4MzUxXHU4MzU1XHU4MzU2XHU4MzU3XHU4MzcwXHU4Mzc4Il0sWyI4ZmQ4YTEiLCJcdTgzN2RcdTgzN2ZcdTgzODBcdTgzODJcdTgzODRcdTgzODZcdTgzOGRcdTgzOTJc''@;'; put 'put ''dTgzOTRcdTgzOTVcdTgzOThcdTgzOTlcdTgzOWJcdTgzOWNcdTgzOWRcdTgzYTZcdTgzYTdcdTgzYTlcdTgzYWNcdTgzYmVcdTgzYmZcdTgzYzBcdTgzYzdcdTgzYzlcdTgzY2ZcdTgzZDBcdTgzZDFcdTgzZDRcdTgzZGRcdTgzNTNcdTgzZThcdTgzZWFcdTgzZjZcdTgzZjhcdTgzZjlcdTgz''@;'; put 'put ''ZmNcdTg0MDFcdTg0MDZcdTg0MGFcdTg0MGZcdTg0MTFcdTg0MTVcdTg0MTlcdTgzYWRcdTg0MmZcdTg0MzlcdTg0NDVcdTg0NDdcdTg0NDhcdTg0NGFcdTg0NGRcdTg0NGZcdTg0NTFcdTg0NTJcdTg0NTZcdTg0NThcdTg0NTlcdTg0NWFcdTg0NWNcdTg0NjBcdTg0NjRcdTg0NjVcdTg0Njdc''@;'; put 'put ''dTg0NmFcdTg0NzBcdTg0NzNcdTg0NzRcdTg0NzZcdTg0NzhcdTg0N2NcdTg0N2RcdTg0ODFcdTg0ODVcdTg0OTJcdTg0OTNcdTg0OTVcdTg0OWVcdTg0YTZcdTg0YThcdTg0YTlcdTg0YWFcdTg0YWZcdTg0YjFcdTg0YjRcdTg0YmFcdTg0YmRcdTg0YmVcdTg0YzBcdTg0YzJcdTg0YzdcdTg0''@;'; put 'put ''YzhcdTg0Y2NcdTg0Y2ZcdTg0ZDMiXSxbIjhmZDlhMSIsIlx1ODRkY1x1ODRlN1x1ODRlYVx1ODRlZlx1ODRmMFx1ODRmMVx1ODRmMlx1ODRmN1x1ODUzMlx1ODRmYVx1ODRmYlx1ODRmZFx1ODUwMlx1ODUwM1x1ODUwN1x1ODUwY1x1ODUwZVx1ODUxMFx1ODUxY1x1ODUxZVx1ODUyMlx1ODUy''@;'; put 'put ''M1x1ODUyNFx1ODUyNVx1ODUyN1x1ODUyYVx1ODUyYlx1ODUyZlx1ODUzM1x1ODUzNFx1ODUzNlx1ODUzZlx1ODU0Nlx1ODU0ZiIsNCwiXHU4NTU2XHU4NTU5XHU4NTVjIiw2LCJcdTg1NjRcdTg1NmJcdTg1NmZcdTg1NzlcdTg1N2FcdTg1N2JcdTg1N2RcdTg1N2ZcdTg1ODFcdTg1ODVcdTg1''@;'; put 'put ''ODZcdTg1ODlcdTg1OGJcdTg1OGNcdTg1OGZcdTg1OTNcdTg1OThcdTg1OWRcdTg1OWZcdTg1YTBcdTg1YTJcdTg1YTVcdTg1YTdcdTg1YjRcdTg1YjZcdTg1YjdcdTg1YjhcdTg1YmNcdTg1YmRcdTg1YmVcdTg1YmZcdTg1YzJcdTg1YzdcdTg1Y2FcdTg1Y2JcdTg1Y2VcdTg1YWRcdTg1ZDhc''@;'; put 'put ''dTg1ZGFcdTg1ZGZcdTg1ZTBcdTg1ZTZcdTg1ZThcdTg1ZWRcdTg1ZjNcdTg1ZjZcdTg1ZmMiXSxbIjhmZGFhMSIsIlx1ODVmZlx1ODYwMFx1ODYwNFx1ODYwNVx1ODYwZFx1ODYwZVx1ODYxMFx1ODYxMVx1ODYxMlx1ODYxOFx1ODYxOVx1ODYxYlx1ODYxZVx1ODYyMVx1ODYyN1x1ODYyOVx1''@;'; put 'put ''ODYzNlx1ODYzOFx1ODYzYVx1ODYzY1x1ODYzZFx1ODY0MFx1ODY0Mlx1ODY0Nlx1ODY1Mlx1ODY1M1x1ODY1Nlx1ODY1N1x1ODY1OFx1ODY1OVx1ODY1ZFx1ODY2MCIsNCwiXHU4NjY5XHU4NjZjXHU4NjZmXHU4Njc1XHU4Njc2XHU4Njc3XHU4NjdhXHU4NjhkXHU4NjkxXHU4Njk2XHU4Njk4''@;'; put 'put ''XHU4NjlhXHU4NjljXHU4NmExXHU4NmE2XHU4NmE3XHU4NmE4XHU4NmFkXHU4NmIxXHU4NmIzXHU4NmI0XHU4NmI1XHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJmXHU4NmMwXHU4NmMxXHU4NmMzXHU4NmM1XHU4NmQxXHU4NmQyXHU4NmQ1XHU4NmQ3XHU4NmRhXHU4NmRjXHU4NmUwXHU4NmUzXHU4''@;'; put 'put ''NmU1XHU4NmU3XHU4Njg4XHU4NmZhXHU4NmZjXHU4NmZkXHU4NzA0XHU4NzA1XHU4NzA3XHU4NzBiXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzEzXHU4NzE0XHU4NzE5XHU4NzFlXHU4NzFmXHU4NzIxXHU4NzIzIl0sWyI4ZmRiYTEiLCJcdTg3MjhcdTg3MmVcdTg3MmZcdTg3MzFcdTg3MzJcdTg3''@;'; put 'put ''MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3M2VcdTg3NDBcdTg3NDNcdTg3NDVcdTg3NGRcdTg3NThcdTg3NWRcdTg3NjFcdTg3NjRcdTg3NjVcdTg3NmZcdTg3NzFcdTg3NzJcdTg3N2JcdTg3ODMiLDYsIlx1ODc4Ylx1ODc4Y1x1ODc5MFx1ODc5M1x1ODc5NVx1ODc5N1x1ODc5OFx1ODc5OVx1''@;'; put 'put ''ODc5ZVx1ODdhMFx1ODdhM1x1ODdhN1x1ODdhY1x1ODdhZFx1ODdhZVx1ODdiMVx1ODdiNVx1ODdiZVx1ODdiZlx1ODdjMVx1ODdjOFx1ODdjOVx1ODdjYVx1ODdjZVx1ODdkNVx1ODdkNlx1ODdkOVx1ODdkYVx1ODdkY1x1ODdkZlx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlYVx1ODdlYlx1ODdl''@;'; put 'put ''ZFx1ODdmMVx1ODdmM1x1ODdmOFx1ODdmYVx1ODdmZlx1ODgwMVx1ODgwM1x1ODgwNlx1ODgwOVx1ODgwYVx1ODgwYlx1ODgxMFx1ODgxOVx1ODgxMlx1ODgxM1x1ODgxNFx1ODgxOFx1ODgxYVx1ODgxYlx1ODgxY1x1ODgxZVx1ODgxZlx1ODgyOFx1ODgyZFx1ODgyZVx1ODgzMFx1ODgzMlx1''@;'; put 'put ''ODgzNSJdLFsiOGZkY2ExIiwiXHU4ODNhXHU4ODNjXHU4ODQxXHU4ODQzXHU4ODQ1XHU4ODQ4XHU4ODQ5XHU4ODRhXHU4ODRiXHU4ODRlXHU4ODUxXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhXHU4ODVjXHU4ODVmXHU4ODYwXHU4ODY0XHU4ODY5XHU4ODcxXHU4ODc5XHU4ODdiXHU4ODgwXHU4''@;'; put 'put ''ODk4XHU4ODlhXHU4ODliXHU4ODljXHU4ODlmXHU4OGEwXHU4OGE4XHU4OGFhXHU4OGJhXHU4OGJkXHU4OGJlXHU4OGMwXHU4OGNhIiw0LCJcdTg4ZDFcdTg4ZDJcdTg4ZDNcdTg4ZGJcdTg4ZGVcdTg4ZTdcdTg4ZWZcdTg4ZjBcdTg4ZjFcdTg4ZjVcdTg4ZjdcdTg5MDFcdTg5MDZcdTg5MGRc''@;'; put 'put ''dTg5MGVcdTg5MGZcdTg5MTVcdTg5MTZcdTg5MThcdTg5MTlcdTg5MWFcdTg5MWNcdTg5MjBcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MzBcdTg5MzFcdTg5MzJcdTg5MzVcdTg5MzlcdTg5M2FcdTg5M2VcdTg5NDBcdTg5NDJcdTg5NDVcdTg5NDZcdTg5NDlcdTg5NGZcdTg5NTJcdTg5NTdcdTg5''@;'; put 'put ''NWFcdTg5NWJcdTg5NWNcdTg5NjFcdTg5NjJcdTg5NjNcdTg5NmJcdTg5NmVcdTg5NzBcdTg5NzNcdTg5NzVcdTg5N2EiXSxbIjhmZGRhMSIsIlx1ODk3Ylx1ODk3Y1x1ODk3ZFx1ODk4OVx1ODk4ZFx1ODk5MFx1ODk5NFx1ODk5NVx1ODk5Ylx1ODk5Y1x1ODk5Zlx1ODlhMFx1ODlhNVx1ODli''@;'; put 'put ''MFx1ODliNFx1ODliNVx1ODliNlx1ODliN1x1ODliY1x1ODlkNCIsNCwiXHU4OWU1XHU4OWU5XHU4OWViXHU4OWVkXHU4OWYxXHU4OWYzXHU4OWY2XHU4OWY5XHU4OWZkXHU4OWZmXHU4YTA0XHU4YTA1XHU4YTA3XHU4YTBmXHU4YTExXHU4YTEyXHU4YTE0XHU4YTE1XHU4YTFlXHU4YTIwXHU4''@;'; put 'put ''YTIyXHU4YTI0XHU4YTI2XHU4YTJiXHU4YTJjXHU4YTJmXHU4YTM1XHU4YTM3XHU4YTNkXHU4YTNlXHU4YTQwXHU4YTQzXHU4YTQ1XHU4YTQ3XHU4YTQ5XHU4YTRkXHU4YTRlXHU4YTUzXHU4YTU2XHU4YTU3XHU4YTU4XHU4YTVjXHU4YTVkXHU4YTYxXHU4YTY1XHU4YTY3XHU4YTc1XHU4YTc2''@;'; put 'put ''XHU4YTc3XHU4YTc5XHU4YTdhXHU4YTdiXHU4YTdlXHU4YTdmXHU4YTgwXHU4YTgzXHU4YTg2XHU4YThiXHU4YThmXHU4YTkwXHU4YTkyXHU4YTk2XHU4YTk3XHU4YTk5XHU4YTlmXHU4YWE3XHU4YWE5XHU4YWFlXHU4YWFmXHU4YWIzIl0sWyI4ZmRlYTEiLCJcdThhYjZcdThhYjdcdThhYmJc''@;'; put 'put ''dThhYmVcdThhYzNcdThhYzZcdThhYzhcdThhYzlcdThhY2FcdThhZDFcdThhZDNcdThhZDRcdThhZDVcdThhZDdcdThhZGRcdThhZGZcdThhZWNcdThhZjBcdThhZjRcdThhZjVcdThhZjZcdThhZmNcdThhZmZcdThiMDVcdThiMDZcdThiMGJcdThiMTFcdThiMWNcdThiMWVcdThiMWZcdThi''@;'; put 'put ''MGFcdThiMmRcdThiMzBcdThiMzdcdThiM2NcdThiNDIiLDQsIlx1OGI0OFx1OGI1Mlx1OGI1M1x1OGI1NFx1OGI1OVx1OGI0ZFx1OGI1ZVx1OGI2M1x1OGI2ZFx1OGI3Nlx1OGI3OFx1OGI3OVx1OGI3Y1x1OGI3ZVx1OGI4MVx1OGI4NFx1OGI4NVx1OGI4Ylx1OGI4ZFx1OGI4Zlx1OGI5NFx1''@;'; put 'put ''OGI5NVx1OGI5Y1x1OGI5ZVx1OGI5Zlx1OGMzOFx1OGMzOVx1OGMzZFx1OGMzZVx1OGM0NVx1OGM0N1x1OGM0OVx1OGM0Ylx1OGM0Zlx1OGM1MVx1OGM1M1x1OGM1NFx1OGM1N1x1OGM1OFx1OGM1Ylx1OGM1ZFx1OGM1OVx1OGM2M1x1OGM2NFx1OGM2Nlx1OGM2OFx1OGM2OVx1OGM2ZFx1OGM3''@;'; put 'put ''M1x1OGM3NVx1OGM3Nlx1OGM3Ylx1OGM3ZVx1OGM4NiJdLFsiOGZkZmExIiwiXHU4Yzg3XHU4YzhiXHU4YzkwXHU4YzkyXHU4YzkzXHU4Yzk5XHU4YzliXHU4YzljXHU4Y2E0XHU4Y2I5XHU4Y2JhXHU4Y2M1XHU4Y2M2XHU4Y2M5XHU4Y2NiXHU4Y2NmXHU4Y2Q2XHU4Y2Q1XHU4Y2Q5XHU4Y2Rk''@;'; put 'put ''XHU4Y2UxXHU4Y2U4XHU4Y2VjXHU4Y2VmXHU4Y2YwXHU4Y2YyXHU4Y2Y1XHU4Y2Y3XHU4Y2Y4XHU4Y2ZlXHU4Y2ZmXHU4ZDAxXHU4ZDAzXHU4ZDA5XHU4ZDEyXHU4ZDE3XHU4ZDFiXHU4ZDY1XHU4ZDY5XHU4ZDZjXHU4ZDZlXHU4ZDdmXHU4ZDgyXHU4ZDg0XHU4ZDg4XHU4ZDhkXHU4ZDkwXHU4''@;'; put 'put ''ZDkxXHU4ZDk1XHU4ZDllXHU4ZDlmXHU4ZGEwXHU4ZGE2XHU4ZGFiXHU4ZGFjXHU4ZGFmXHU4ZGIyXHU4ZGI1XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGMwXHU4ZGM1XHU4ZGM2XHU4ZGM3XHU4ZGM4XHU4ZGNhXHU4ZGNlXHU4ZGQxXHU4ZGQ0XHU4ZGQ1XHU4ZGQ3XHU4ZGQ5XHU4ZGU0XHU4ZGU1''@;'; put 'put ''XHU4ZGU3XHU4ZGVjXHU4ZGYwXHU4ZGJjXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGZkXHU4ZTAxXHU4ZTA0XHU4ZTA1XHU4ZTA2XHU4ZTBiXHU4ZTExXHU4ZTE0XHU4ZTE2XHU4ZTIwXHU4ZTIxXHU4ZTIyIl0sWyI4ZmUwYTEiLCJcdThlMjNcdThlMjZcdThlMjdcdThlMzFcdThlMzNcdThlMzZc''@;'; put 'put ''dThlMzdcdThlMzhcdThlMzlcdThlM2RcdThlNDBcdThlNDFcdThlNGJcdThlNGRcdThlNGVcdThlNGZcdThlNTRcdThlNWJcdThlNWNcdThlNWRcdThlNWVcdThlNjFcdThlNjJcdThlNjlcdThlNmNcdThlNmRcdThlNmZcdThlNzBcdThlNzFcdThlNzlcdThlN2FcdThlN2JcdThlODJcdThl''@;'; put 'put ''ODNcdThlODlcdThlOTBcdThlOTJcdThlOTVcdThlOWFcdThlOWJcdThlOWRcdThlOWVcdThlYTJcdThlYTdcdThlYTlcdThlYWRcdThlYWVcdThlYjNcdThlYjVcdThlYmFcdThlYmJcdThlYzBcdThlYzFcdThlYzNcdThlYzRcdThlYzdcdThlY2ZcdThlZDFcdThlZDRcdThlZGNcdThlZThc''@;'; put 'put ''dThlZWVcdThlZjBcdThlZjFcdThlZjdcdThlZjlcdThlZmFcdThlZWRcdThmMDBcdThmMDJcdThmMDdcdThmMDhcdThmMGZcdThmMTBcdThmMTZcdThmMTdcdThmMThcdThmMWVcdThmMjBcdThmMjFcdThmMjNcdThmMjVcdThmMjdcdThmMjhcdThmMmNcdThmMmRcdThmMmVcdThmMzRcdThm''@;'; put 'put ''MzVcdThmMzZcdThmMzdcdThmM2FcdThmNDBcdThmNDEiXSxbIjhmZTFhMSIsIlx1OGY0M1x1OGY0N1x1OGY0Zlx1OGY1MSIsNCwiXHU4ZjU4XHU4ZjVkXHU4ZjVlXHU4ZjY1XHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmI1XHU4ZmI2XHU4ZmI4XHU4ZmJlXHU4ZmMw''@;'; put 'put ''XHU4ZmMxXHU4ZmM2XHU4ZmNhXHU4ZmNiXHU4ZmNkXHU4ZmQwXHU4ZmQyXHU4ZmQzXHU4ZmQ1XHU4ZmUwXHU4ZmUzXHU4ZmU0XHU4ZmU4XHU4ZmVlXHU4ZmYxXHU4ZmY1XHU4ZmY2XHU4ZmZiXHU4ZmZlXHU5MDAyXHU5MDA0XHU5MDA4XHU5MDBjXHU5MDE4XHU5MDFiXHU5MDI4XHU5MDI5XHU5''@;'; put 'put ''MDJmXHU5MDJhXHU5MDJjXHU5MDJkXHU5MDMzXHU5MDM0XHU5MDM3XHU5MDNmXHU5MDQzXHU5MDQ0XHU5MDRjXHU5MDViXHU5MDVkXHU5MDYyXHU5MDY2XHU5MDY3XHU5MDZjXHU5MDcwXHU5MDc0XHU5MDc5XHU5MDg1XHU5MDg4XHU5MDhiXHU5MDhjXHU5MDhlXHU5MDkwXHU5MDk1XHU5MDk3''@;'; put 'put ''XHU5MDk4XHU5MDk5XHU5MDliXHU5MGEwXHU5MGExXHU5MGEyXHU5MGE1XHU5MGIwXHU5MGIyXHU5MGIzXHU5MGI0XHU5MGI2XHU5MGJkXHU5MGNjXHU5MGJlXHU5MGMzIl0sWyI4ZmUyYTEiLCJcdTkwYzRcdTkwYzVcdTkwYzdcdTkwYzhcdTkwZDVcdTkwZDdcdTkwZDhcdTkwZDlcdTkwZGNc''@;'; put 'put ''dTkwZGRcdTkwZGZcdTkwZTVcdTkwZDJcdTkwZjZcdTkwZWJcdTkwZWZcdTkwZjBcdTkwZjRcdTkwZmVcdTkwZmZcdTkxMDBcdTkxMDRcdTkxMDVcdTkxMDZcdTkxMDhcdTkxMGRcdTkxMTBcdTkxMTRcdTkxMTZcdTkxMTdcdTkxMThcdTkxMWFcdTkxMWNcdTkxMWVcdTkxMjBcdTkxMjVcdTkx''@;'; put 'put ''MjJcdTkxMjNcdTkxMjdcdTkxMjlcdTkxMmVcdTkxMmZcdTkxMzFcdTkxMzRcdTkxMzZcdTkxMzdcdTkxMzlcdTkxM2FcdTkxM2NcdTkxM2RcdTkxNDNcdTkxNDdcdTkxNDhcdTkxNGZcdTkxNTNcdTkxNTdcdTkxNTlcdTkxNWFcdTkxNWJcdTkxNjFcdTkxNjRcdTkxNjdcdTkxNmRcdTkxNzRc''@;'; put 'put ''dTkxNzlcdTkxN2FcdTkxN2JcdTkxODFcdTkxODNcdTkxODVcdTkxODZcdTkxOGFcdTkxOGVcdTkxOTFcdTkxOTNcdTkxOTRcdTkxOTVcdTkxOThcdTkxOWVcdTkxYTFcdTkxYTZcdTkxYThcdTkxYWNcdTkxYWRcdTkxYWVcdTkxYjBcdTkxYjFcdTkxYjJcdTkxYjNcdTkxYjZcdTkxYmJcdTkx''@;'; put 'put ''YmNcdTkxYmRcdTkxYmYiXSxbIjhmZTNhMSIsIlx1OTFjMlx1OTFjM1x1OTFjNVx1OTFkM1x1OTFkNFx1OTFkN1x1OTFkOVx1OTFkYVx1OTFkZVx1OTFlNFx1OTFlNVx1OTFlOVx1OTFlYVx1OTFlYyIsNSwiXHU5MWY3XHU5MWY5XHU5MWZiXHU5MWZkXHU5MjAwXHU5MjAxXHU5MjA0XHU5MjA1''@;'; put 'put ''XHU5MjA2XHU5MjA3XHU5MjA5XHU5MjBhXHU5MjBjXHU5MjEwXHU5MjEyXHU5MjEzXHU5MjE2XHU5MjE4XHU5MjFjXHU5MjFkXHU5MjIzXHU5MjI0XHU5MjI1XHU5MjI2XHU5MjI4XHU5MjJlXHU5MjJmXHU5MjMwXHU5MjMzXHU5MjM1XHU5MjM2XHU5MjM4XHU5MjM5XHU5MjNhXHU5MjNjXHU5''@;'; put 'put ''MjNlXHU5MjQwXHU5MjQyXHU5MjQzXHU5MjQ2XHU5MjQ3XHU5MjRhXHU5MjRkXHU5MjRlXHU5MjRmXHU5MjUxXHU5MjU4XHU5MjU5XHU5MjVjXHU5MjVkXHU5MjYwXHU5MjYxXHU5MjY1XHU5MjY3XHU5MjY4XHU5MjY5XHU5MjZlXHU5MjZmXHU5MjcwXHU5Mjc1Iiw0LCJcdTkyN2JcdTkyN2Nc''@;'; put 'put ''dTkyN2RcdTkyN2ZcdTkyODhcdTkyODlcdTkyOGFcdTkyOGRcdTkyOGVcdTkyOTJcdTkyOTciXSxbIjhmZTRhMSIsIlx1OTI5OVx1OTI5Zlx1OTJhMFx1OTJhNFx1OTJhNVx1OTJhN1x1OTJhOFx1OTJhYlx1OTJhZlx1OTJiMlx1OTJiNlx1OTJiOFx1OTJiYVx1OTJiYlx1OTJiY1x1OTJiZFx1''@;'; put 'put ''OTJiZiIsNCwiXHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM4XHU5MmNiXHU5MmNjXHU5MmNkXHU5MmNlXHU5MmQwXHU5MmQzXHU5MmQ1XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRjXHU5MmRkXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUzXHU5MmU1XHU5MmU3XHU5MmU4XHU5MmVjXHU5MmVlXHU5MmYw''@;'; put 'put ''XHU5MmY5XHU5MmZiXHU5MmZmXHU5MzAwXHU5MzAyXHU5MzA4XHU5MzBkXHU5MzExXHU5MzE0XHU5MzE1XHU5MzFjXHU5MzFkXHU5MzFlXHU5MzFmXHU5MzIxXHU5MzI0XHU5MzI1XHU5MzI3XHU5MzI5XHU5MzJhXHU5MzMzXHU5MzM0XHU5MzM2XHU5MzM3XHU5MzQ3XHU5MzQ4XHU5MzQ5XHU5''@;'; put 'put ''MzUwXHU5MzUxXHU5MzUyXHU5MzU1XHU5MzU3XHU5MzU4XHU5MzVhXHU5MzVlXHU5MzY0XHU5MzY1XHU5MzY3XHU5MzY5XHU5MzZhXHU5MzZkXHU5MzZmXHU5MzcwXHU5MzcxXHU5MzczXHU5Mzc0XHU5Mzc2Il0sWyI4ZmU1YTEiLCJcdTkzN2FcdTkzN2RcdTkzN2ZcdTkzODBcdTkzODFcdTkz''@;'; put 'put ''ODJcdTkzODhcdTkzOGFcdTkzOGJcdTkzOGRcdTkzOGZcdTkzOTJcdTkzOTVcdTkzOThcdTkzOWJcdTkzOWVcdTkzYTFcdTkzYTNcdTkzYTRcdTkzYTZcdTkzYThcdTkzYWJcdTkzYjRcdTkzYjVcdTkzYjZcdTkzYmFcdTkzYTlcdTkzYzFcdTkzYzRcdTkzYzVcdTkzYzZcdTkzYzdcdTkzYzki''@;'; put 'put ''LDQsIlx1OTNkM1x1OTNkOVx1OTNkY1x1OTNkZVx1OTNkZlx1OTNlMlx1OTNlNlx1OTNlN1x1OTNmOVx1OTNmN1x1OTNmOFx1OTNmYVx1OTNmYlx1OTNmZFx1OTQwMVx1OTQwMlx1OTQwNFx1OTQwOFx1OTQwOVx1OTQwZFx1OTQwZVx1OTQwZlx1OTQxNVx1OTQxNlx1OTQxN1x1OTQxZlx1OTQy''@;'; put 'put ''ZVx1OTQyZlx1OTQzMVx1OTQzMlx1OTQzM1x1OTQzNFx1OTQzYlx1OTQzZlx1OTQzZFx1OTQ0M1x1OTQ0NVx1OTQ0OFx1OTQ0YVx1OTQ0Y1x1OTQ1NVx1OTQ1OVx1OTQ1Y1x1OTQ1Zlx1OTQ2MVx1OTQ2M1x1OTQ2OFx1OTQ2Ylx1OTQ2ZFx1OTQ2ZVx1OTQ2Zlx1OTQ3MVx1OTQ3Mlx1OTQ4NFx1''@;'; put 'put ''OTQ4M1x1OTU3OFx1OTU3OSJdLFsiOGZlNmExIiwiXHU5NTdlXHU5NTg0XHU5NTg4XHU5NThjXHU5NThkXHU5NThlXHU5NTlkXHU5NTllXHU5NTlmXHU5NWExXHU5NWE2XHU5NWE5XHU5NWFiXHU5NWFjXHU5NWI0XHU5NWI2XHU5NWJhXHU5NWJkXHU5NWJmXHU5NWM2XHU5NWM4XHU5NWM5XHU5''@;'; put 'put ''NWNiXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ5XHU5NWRhXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWU0XHU5NWU2XHU5NjFkXHU5NjFlXHU5NjIyXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjJjXHU5NjMxXHU5NjMzXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5NjNjXHU5NjNk''@;'; put 'put ''XHU5NjQxXHU5NjUyXHU5NjU0XHU5NjU2XHU5NjU3XHU5NjU4XHU5NjYxXHU5NjZlXHU5Njc0XHU5NjdiXHU5NjdjXHU5NjdlXHU5NjdmXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg5XHU5NjkxXHU5Njk2XHU5NjlhXHU5NjlkXHU5NjlmXHU5NmE0XHU5NmE1XHU5NmE2XHU5NmE5XHU5''@;'; put 'put ''NmFlXHU5NmFmXHU5NmIzXHU5NmJhXHU5NmNhXHU5NmQyXHU1ZGIyXHU5NmQ4XHU5NmRhXHU5NmRkXHU5NmRlXHU5NmRmXHU5NmU5XHU5NmVmXHU5NmYxXHU5NmZhXHU5NzAyIl0sWyI4ZmU3YTEiLCJcdTk3MDNcdTk3MDVcdTk3MDlcdTk3MWFcdTk3MWJcdTk3MWRcdTk3MjFcdTk3MjJcdTk3''@;'; put 'put ''MjNcdTk3MjhcdTk3MzFcdTk3MzNcdTk3NDFcdTk3NDNcdTk3NGFcdTk3NGVcdTk3NGZcdTk3NTVcdTk3NTdcdTk3NThcdTk3NWFcdTk3NWJcdTk3NjNcdTk3NjdcdTk3NmFcdTk3NmVcdTk3NzNcdTk3NzZcdTk3NzdcdTk3NzhcdTk3N2JcdTk3N2RcdTk3N2ZcdTk3ODBcdTk3ODlcdTk3OTVc''@;'; put 'put ''dTk3OTZcdTk3OTdcdTk3OTlcdTk3OWFcdTk3OWVcdTk3OWZcdTk3YTJcdTk3YWNcdTk3YWVcdTk3YjFcdTk3YjJcdTk3YjVcdTk3YjZcdTk3YjhcdTk3YjlcdTk3YmFcdTk3YmNcdTk3YmVcdTk3YmZcdTk3YzFcdTk3YzRcdTk3YzVcdTk3YzdcdTk3YzlcdTk3Y2FcdTk3Y2NcdTk3Y2RcdTk3''@;'; put 'put ''Y2VcdTk3ZDBcdTk3ZDFcdTk3ZDRcdTk3ZDdcdTk3ZDhcdTk3ZDlcdTk3ZGRcdTk3ZGVcdTk3ZTBcdTk3ZGJcdTk3ZTFcdTk3ZTRcdTk3ZWZcdTk3ZjFcdTk3ZjRcdTk3ZjdcdTk3ZjhcdTk3ZmFcdTk4MDdcdTk4MGFcdTk4MTlcdTk4MGRcdTk4MGVcdTk4MTRcdTk4MTZcdTk4MWNcdTk4MWVc''@;'; put 'put ''dTk4MjBcdTk4MjNcdTk4MjYiXSxbIjhmZThhMSIsIlx1OTgyYlx1OTgyZVx1OTgyZlx1OTgzMFx1OTgzMlx1OTgzM1x1OTgzNVx1OTgyNVx1OTgzZVx1OTg0NFx1OTg0N1x1OTg0YVx1OTg1MVx1OTg1Mlx1OTg1M1x1OTg1Nlx1OTg1N1x1OTg1OVx1OTg1YVx1OTg2Mlx1OTg2M1x1OTg2NVx1''@;'; put 'put ''OTg2Nlx1OTg2YVx1OTg2Y1x1OThhYlx1OThhZFx1OThhZVx1OThiMFx1OThiNFx1OThiN1x1OThiOFx1OThiYVx1OThiYlx1OThiZlx1OThjMlx1OThjNVx1OThjOFx1OThjY1x1OThlMVx1OThlM1x1OThlNVx1OThlNlx1OThlN1x1OThlYVx1OThmM1x1OThmNlx1OTkwMlx1OTkwN1x1OTkw''@;'; put 'put ''OFx1OTkxMVx1OTkxNVx1OTkxNlx1OTkxN1x1OTkxYVx1OTkxYlx1OTkxY1x1OTkxZlx1OTkyMlx1OTkyNlx1OTkyN1x1OTkyYlx1OTkzMSIsNCwiXHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTQwXHU5OTQxXHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTRkXHU5OTRlXHU5OTU0XHU5OTU4XHU5''@;'; put 'put ''OTU5XHU5OTViXHU5OTVjXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTliXHU5OTlkXHU5OTlmXHU5OWE2XHU5OWIwXHU5OWIxXHU5OWIyXHU5OWI1Il0sWyI4ZmU5YTEiLCJcdTk5YjlcdTk5YmFcdTk5YmRcdTk5YmZcdTk5YzNcdTk5YzlcdTk5ZDNcdTk5ZDRcdTk5ZDlcdTk5ZGFcdTk5ZGNcdTk5''@;'; put 'put ''ZGVcdTk5ZTdcdTk5ZWFcdTk5ZWJcdTk5ZWNcdTk5ZjBcdTk5ZjRcdTk5ZjVcdTk5ZjlcdTk5ZmRcdTk5ZmVcdTlhMDJcdTlhMDNcdTlhMDRcdTlhMGJcdTlhMGNcdTlhMTBcdTlhMTFcdTlhMTZcdTlhMWVcdTlhMjBcdTlhMjJcdTlhMjNcdTlhMjRcdTlhMjdcdTlhMmRcdTlhMmVcdTlhMzNc''@;'; put 'put ''dTlhMzVcdTlhMzZcdTlhMzhcdTlhNDdcdTlhNDFcdTlhNDRcdTlhNGFcdTlhNGJcdTlhNGNcdTlhNGVcdTlhNTFcdTlhNTRcdTlhNTZcdTlhNWRcdTlhYWFcdTlhYWNcdTlhYWVcdTlhYWZcdTlhYjJcdTlhYjRcdTlhYjVcdTlhYjZcdTlhYjlcdTlhYmJcdTlhYmVcdTlhYmZcdTlhYzFcdTlh''@;'; put 'put ''YzNcdTlhYzZcdTlhYzhcdTlhY2VcdTlhZDBcdTlhZDJcdTlhZDVcdTlhZDZcdTlhZDdcdTlhZGJcdTlhZGNcdTlhZTBcdTlhZTRcdTlhZTVcdTlhZTdcdTlhZTlcdTlhZWNcdTlhZjJcdTlhZjNcdTlhZjVcdTlhZjlcdTlhZmFcdTlhZmRcdTlhZmYiLDRdLFsiOGZlYWExIiwiXHU5YjA0XHU5''@;'; put 'put ''YjA1XHU5YjA4XHU5YjA5XHU5YjBiXHU5YjBjXHU5YjBkXHU5YjBlXHU5YjEwXHU5YjEyXHU5YjE2XHU5YjE5XHU5YjFiXHU5YjFjXHU5YjIwXHU5YjI2XHU5YjJiXHU5YjJkXHU5YjMzXHU5YjM0XHU5YjM1XHU5YjM3XHU5YjM5XHU5YjNhXHU5YjNkXHU5YjQ4XHU5YjRiXHU5YjRjXHU5YjU1''@;'; put 'put ''XHU5YjU2XHU5YjU3XHU5YjViXHU5YjVlXHU5YjYxXHU5YjYzXHU5YjY1XHU5YjY2XHU5YjY4XHU5YjZhIiw0LCJcdTliNzNcdTliNzVcdTliNzdcdTliNzhcdTliNzlcdTliN2ZcdTliODBcdTliODRcdTliODVcdTliODZcdTliODdcdTliODlcdTliOGFcdTliOGJcdTliOGRcdTliOGZcdTli''@;'; put 'put ''OTBcdTliOTRcdTliOWFcdTliOWRcdTliOWVcdTliYTZcdTliYTdcdTliYTlcdTliYWNcdTliYjBcdTliYjFcdTliYjJcdTliYjdcdTliYjhcdTliYmJcdTliYmNcdTliYmVcdTliYmZcdTliYzFcdTliYzdcdTliYzhcdTliY2VcdTliZDBcdTliZDdcdTliZDhcdTliZGRcdTliZGZcdTliZTVc''@;'; put 'put ''dTliZTdcdTliZWFcdTliZWJcdTliZWZcdTliZjNcdTliZjdcdTliZjgiXSxbIjhmZWJhMSIsIlx1OWJmOVx1OWJmYVx1OWJmZFx1OWJmZlx1OWMwMFx1OWMwMlx1OWMwYlx1OWMwZlx1OWMxMVx1OWMxNlx1OWMxOFx1OWMxOVx1OWMxYVx1OWMxY1x1OWMxZVx1OWMyMlx1OWMyM1x1OWMyNiIs''@;'; put 'put ''NCwiXHU5YzMxXHU5YzM1XHU5YzM2XHU5YzM3XHU5YzNkXHU5YzQxXHU5YzQzXHU5YzQ0XHU5YzQ1XHU5YzQ5XHU5YzRhXHU5YzRlXHU5YzRmXHU5YzUwXHU5YzUzXHU5YzU0XHU5YzU2XHU5YzU4XHU5YzViXHU5YzVkXHU5YzVlXHU5YzVmXHU5YzYzXHU5YzY5XHU5YzZhXHU5YzVjXHU5YzZi''@;'; put 'put ''XHU5YzY4XHU5YzZlXHU5YzcwXHU5YzcyXHU5Yzc1XHU5Yzc3XHU5YzdiXHU5Y2U2XHU5Y2YyXHU5Y2Y3XHU5Y2Y5XHU5ZDBiXHU5ZDAyXHU5ZDExXHU5ZDE3XHU5ZDE4XHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDJmXHU5ZDMwXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDNhXHU5ZDNjXHU5ZDQ1XHU5''@;'; put 'put ''ZDNkXHU5ZDQyXHU5ZDQzXHU5ZDQ3XHU5ZDRhXHU5ZDUzXHU5ZDU0XHU5ZDVmXHU5ZDYzXHU5ZDYyXHU5ZDY1XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDcwXHU5ZDc2XHU5ZDc3XHU5ZDdiIl0sWyI4ZmVjYTEiLCJcdTlkN2NcdTlkN2VcdTlkODNcdTlkODRcdTlkODZcdTlkOGFcdTlkOGRcdTlk''@;'; put 'put ''OGVcdTlkOTJcdTlkOTNcdTlkOTVcdTlkOTZcdTlkOTdcdTlkOThcdTlkYTFcdTlkYWFcdTlkYWNcdTlkYWVcdTlkYjFcdTlkYjVcdTlkYjlcdTlkYmNcdTlkYmZcdTlkYzNcdTlkYzdcdTlkYzlcdTlkY2FcdTlkZDRcdTlkZDVcdTlkZDZcdTlkZDdcdTlkZGFcdTlkZGVcdTlkZGZcdTlkZTBc''@;'; put 'put ''dTlkZTVcdTlkZTdcdTlkZTlcdTlkZWJcdTlkZWVcdTlkZjBcdTlkZjNcdTlkZjRcdTlkZmVcdTllMGFcdTllMDJcdTllMDdcdTllMGVcdTllMTBcdTllMTFcdTllMTJcdTllMTVcdTllMTZcdTllMTlcdTllMWNcdTllMWRcdTllN2FcdTllN2JcdTllN2NcdTllODBcdTllODJcdTllODNcdTll''@;'; put 'put ''ODRcdTllODVcdTllODdcdTllOGVcdTllOGZcdTllOTZcdTllOThcdTllOWJcdTllOWVcdTllYTRcdTllYThcdTllYWNcdTllYWVcdTllYWZcdTllYjBcdTllYjNcdTllYjRcdTllYjVcdTllYzZcdTllYzhcdTllY2JcdTllZDVcdTllZGZcdTllZTRcdTllZTdcdTllZWNcdTllZWRcdTllZWVc''@;'; put 'put ''dTllZjBcdTllZjFcdTllZjJcdTllZjUiXSxbIjhmZWRhMSIsIlx1OWVmOFx1OWVmZlx1OWYwMlx1OWYwM1x1OWYwOVx1OWYwZlx1OWYxMFx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNlx1OWYxN1x1OWYxOVx1OWYxYVx1OWYxYlx1OWYxZlx1OWYyMlx1OWYyNlx1OWYyYVx1OWYyYlx1OWYyZlx1''@;'; put 'put ''OWYzMVx1OWYzMlx1OWYzNFx1OWYzN1x1OWYzOVx1OWYzYVx1OWYzY1x1OWYzZFx1OWYzZlx1OWY0MVx1OWY0MyIsNCwiXHU5ZjUzXHU5ZjU1XHU5ZjU2XHU5ZjU3XHU5ZjU4XHU5ZjVhXHU5ZjVkXHU5ZjVlXHU5ZjY4XHU5ZjY5XHU5ZjZkIiw0LCJcdTlmNzNcdTlmNzVcdTlmN2FcdTlmN2Rc''@;'; put 'put ''dTlmOGZcdTlmOTBcdTlmOTFcdTlmOTJcdTlmOTRcdTlmOTZcdTlmOTdcdTlmOWVcdTlmYTFcdTlmYTJcdTlmYTNcdTlmYTUiXV0nKX0sOTkxMjk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7InVDaGFycyI6WzEyOCwxNjUsMTY5LDE3OCwxODQsMjE2LDIyNiwy''@;'; put 'put ''MzUsMjM4LDI0NCwyNDgsMjUxLDI1MywyNTgsMjc2LDI4NCwzMDAsMzI1LDMyOSwzMzQsMzY0LDQ2Myw0NjUsNDY3LDQ2OSw0NzEsNDczLDQ3NSw0NzcsNTA2LDU5NCw2MTAsNzEyLDcxNiw3MzAsOTMwLDkzOCw5NjIsOTcwLDEwMjYsMTEwNCwxMTA2LDgyMDksODIxNSw4MjE4LDgyMjIsODIz''@;'; put 'put ''MSw4MjQxLDgyNDQsODI0Niw4MjUyLDgzNjUsODQ1Miw4NDU0LDg0NTgsODQ3MSw4NDgyLDg1NTYsODU3MCw4NTk2LDg2MDIsODcxMyw4NzIwLDg3MjIsODcyNiw4NzMxLDg3MzcsODc0MCw4NzQyLDg3NDgsODc1MSw4NzYwLDg3NjYsODc3Nyw4NzgxLDg3ODcsODgwMiw4ODA4LDg4MTYsODg1''@;'; put 'put ''NCw4ODU4LDg4NzAsODg5Niw4OTc5LDkzMjIsOTM3Miw5NTQ4LDk1ODgsOTYxNiw5NjIyLDk2MzQsOTY1Miw5NjYyLDk2NzIsOTY3Niw5NjgwLDk3MDIsOTczNSw5NzM4LDk3OTMsOTc5NSwxMTkwNiwxMTkwOSwxMTkxMywxMTkxNywxMTkyOCwxMTk0NCwxMTk0NywxMTk1MSwxMTk1NiwxMTk2''@;'; put 'put ''MCwxMTk2NCwxMTk3OSwxMjI4NCwxMjI5MiwxMjMxMiwxMjMxOSwxMjMzMCwxMjM1MSwxMjQzNiwxMjQ0NywxMjUzNSwxMjU0MywxMjU4NiwxMjg0MiwxMjg1MCwxMjk2NCwxMzIwMCwxMzIxNSwxMzIxOCwxMzI1MywxMzI2MywxMzI2NywxMzI3MCwxMzM4NCwxMzQyOCwxMzcyNywxMzgzOSwx''@;'; put 'put ''Mzg1MSwxNDYxNywxNDcwMywxNDgwMSwxNDgxNiwxNDk2NCwxNTE4MywxNTQ3MSwxNTU4NSwxNjQ3MSwxNjczNiwxNzIwOCwxNzMyNSwxNzMzMCwxNzM3NCwxNzYyMywxNzk5NywxODAxOCwxODIxMiwxODIxOCwxODMwMSwxODMxOCwxODc2MCwxODgxMSwxODgxNCwxODgyMCwxODgyMywxODg0''@;'; put 'put ''NCwxODg0OCwxODg3MiwxOTU3NiwxOTYyMCwxOTczOCwxOTg4Nyw0MDg3MCw1OTI0NCw1OTMzNiw1OTM2Nyw1OTQxMyw1OTQxNyw1OTQyMyw1OTQzMSw1OTQzNyw1OTQ0Myw1OTQ1Miw1OTQ2MCw1OTQ3OCw1OTQ5Myw2Mzc4OSw2Mzg2Niw2Mzg5NCw2Mzk3Niw2Mzk4Niw2NDAxNiw2NDAxOCw2''@;'; put 'put ''NDAyMSw2NDAyNSw2NDAzNCw2NDAzNyw2NDA0Miw2NTA3NCw2NTA5Myw2NTEwNyw2NTExMiw2NTEyNyw2NTEzMiw2NTM3NSw2NTUxMCw2NTUzNl0sImdiQ2hhcnMiOlswLDM2LDM4LDQ1LDUwLDgxLDg5LDk1LDk2LDEwMCwxMDMsMTA0LDEwNSwxMDksMTI2LDEzMywxNDgsMTcyLDE3NSwxNzks''@;'; put 'put ''MjA4LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzQxLDQyOCw0NDMsNTQ0LDU0NSw1NTgsNzQxLDc0Miw3NDksNzUwLDgwNSw4MTksODIwLDc5MjIsNzkyNCw3OTI1LDc5MjcsNzkzNCw3OTQzLDc5NDQsNzk0NSw3OTUwLDgwNjIsODE0OCw4MTQ5LDgxNTIsODE2NCw4MTc0LDgy''@;'; put 'put ''MzYsODI0MCw4MjYyLDgyNjQsODM3NCw4MzgwLDgzODEsODM4NCw4Mzg4LDgzOTAsODM5Miw4MzkzLDgzOTQsODM5Niw4NDAxLDg0MDYsODQxNiw4NDE5LDg0MjQsODQzNyw4NDM5LDg0NDUsODQ4Miw4NDg1LDg0OTYsODUyMSw4NjAzLDg5MzYsODk0Niw5MDQ2LDkwNTAsOTA2Myw5MDY2LDkw''@;'; put 'put ''NzYsOTA5Miw5MTAwLDkxMDgsOTExMSw5MTEzLDkxMzEsOTE2Miw5MTY0LDkyMTgsOTIxOSwxMTMyOSwxMTMzMSwxMTMzNCwxMTMzNiwxMTM0NiwxMTM2MSwxMTM2MywxMTM2NiwxMTM3MCwxMTM3MiwxMTM3NSwxMTM4OSwxMTY4MiwxMTY4NiwxMTY4NywxMTY5MiwxMTY5NCwxMTcxNCwxMTcx''@;'; put 'put ''NiwxMTcyMywxMTcyNSwxMTczMCwxMTczNiwxMTk4MiwxMTk4OSwxMjEwMiwxMjMzNiwxMjM0OCwxMjM1MCwxMjM4NCwxMjM5MywxMjM5NSwxMjM5NywxMjUxMCwxMjU1MywxMjg1MSwxMjk2MiwxMjk3MywxMzczOCwxMzgyMywxMzkxOSwxMzkzMywxNDA4MCwxNDI5OCwxNDU4NSwxNDY5OCwx''@;'; put 'put ''NTU4MywxNTg0NywxNjMxOCwxNjQzNCwxNjQzOCwxNjQ4MSwxNjcyOSwxNzEwMiwxNzEyMiwxNzMxNSwxNzMyMCwxNzQwMiwxNzQxOCwxNzg1OSwxNzkwOSwxNzkxMSwxNzkxNSwxNzkxNiwxNzkzNiwxNzkzOSwxNzk2MSwxODY2NCwxODcwMywxODgxNCwxODk2MiwxOTA0MywzMzQ2OSwzMzQ3''@;'; put 'put ''MCwzMzQ3MSwzMzQ4NCwzMzQ4NSwzMzQ5MCwzMzQ5NywzMzUwMSwzMzUwNSwzMzUxMywzMzUyMCwzMzUzNiwzMzU1MCwzNzg0NSwzNzkyMSwzNzk0OCwzODAyOSwzODAzOCwzODA2NCwzODA2NSwzODA2NiwzODA2OSwzODA3NSwzODA3NiwzODA3OCwzOTEwOCwzOTEwOSwzOTExMywzOTExNCwz''@;'; put 'put ''OTExNSwzOTExNiwzOTI2NSwzOTM5NCwxODkwMDBdfScpfSw1NTkxNDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbImExNDAiLCJcdWU0YzYiLDYyXSxbImExODAiLCJcdWU1MDUiLDMyXSxbImEyNDAiLCJcdWU1MjYiLDYyXSxbImEyODAiLCJcdWU1NjUiLDMy''@;'; put 'put ''XSxbImEyYWIiLCJcdWU3NjYiLDVdLFsiYTJlMyIsIlx1MjBhY1x1ZTc2ZCJdLFsiYTJlZiIsIlx1ZTc2ZVx1ZTc2ZiJdLFsiYTJmZCIsIlx1ZTc3MFx1ZTc3MSJdLFsiYTM0MCIsIlx1ZTU4NiIsNjJdLFsiYTM4MCIsIlx1ZTVjNSIsMzEsIlx1MzAwMCJdLFsiYTQ0MCIsIlx1ZTVlNiIsNjJd''@;'; put 'put ''LFsiYTQ4MCIsIlx1ZTYyNSIsMzJdLFsiYTRmNCIsIlx1ZTc3MiIsMTBdLFsiYTU0MCIsIlx1ZTY0NiIsNjJdLFsiYTU4MCIsIlx1ZTY4NSIsMzJdLFsiYTVmNyIsIlx1ZTc3ZCIsN10sWyJhNjQwIiwiXHVlNmE2Iiw2Ml0sWyJhNjgwIiwiXHVlNmU1IiwzMl0sWyJhNmI5IiwiXHVlNzg1Iiw3''@;'; put 'put ''XSxbImE2ZDkiLCJcdWU3OGQiLDZdLFsiYTZlYyIsIlx1ZTc5NFx1ZTc5NSJdLFsiYTZmMyIsIlx1ZTc5NiJdLFsiYTZmNiIsIlx1ZTc5NyIsOF0sWyJhNzQwIiwiXHVlNzA2Iiw2Ml0sWyJhNzgwIiwiXHVlNzQ1IiwzMl0sWyJhN2MyIiwiXHVlN2EwIiwxNF0sWyJhN2YyIiwiXHVlN2FmIiwx''@;'; put 'put ''Ml0sWyJhODk2IiwiXHVlN2JjIiwxMF0sWyJhOGJjIiwiXHVlN2M3Il0sWyJhOGJmIiwiXHUwMWY5Il0sWyJhOGMxIiwiXHVlN2M5XHVlN2NhXHVlN2NiXHVlN2NjIl0sWyJhOGVhIiwiXHVlN2NkIiwyMF0sWyJhOTU4IiwiXHVlN2UyIl0sWyJhOTViIiwiXHVlN2UzIl0sWyJhOTVkIiwiXHVl''@;'; put 'put ''N2U0XHVlN2U1XHVlN2U2Il0sWyJhOTg5IiwiXHUzMDNlXHUyZmYwIiwxMV0sWyJhOTk3IiwiXHVlN2Y0IiwxMl0sWyJhOWYwIiwiXHVlODAxIiwxNF0sWyJhYWExIiwiXHVlMDAwIiw5M10sWyJhYmExIiwiXHVlMDVlIiw5M10sWyJhY2ExIiwiXHVlMGJjIiw5M10sWyJhZGExIiwiXHVlMTFh''@;'; put 'put ''Iiw5M10sWyJhZWExIiwiXHVlMTc4Iiw5M10sWyJhZmExIiwiXHVlMWQ2Iiw5M10sWyJkN2ZhIiwiXHVlODEwIiw0XSxbImY4YTEiLCJcdWUyMzQiLDkzXSxbImY5YTEiLCJcdWUyOTIiLDkzXSxbImZhYTEiLCJcdWUyZjAiLDkzXSxbImZiYTEiLCJcdWUzNGUiLDkzXSxbImZjYTEiLCJcdWUz''@;'; put 'put ''YWMiLDkzXSxbImZkYTEiLCJcdWU0MGEiLDkzXSxbImZlNTAiLCJcdTJlODFcdWU4MTZcdWU4MTdcdWU4MThcdTJlODRcdTM0NzNcdTM0NDdcdTJlODhcdTJlOGJcdWU4MWVcdTM1OWVcdTM2MWFcdTM2MGVcdTJlOGNcdTJlOTdcdTM5NmVcdTM5MThcdWU4MjZcdTM5Y2ZcdTM5ZGZcdTNhNzNc''@;'; put 'put ''dTM5ZDBcdWU4MmJcdWU4MmNcdTNiNGVcdTNjNmVcdTNjZTBcdTJlYTdcdWU4MzFcdWU4MzJcdTJlYWFcdTQwNTZcdTQxNWZcdTJlYWVcdTQzMzdcdTJlYjNcdTJlYjZcdTJlYjdcdWU4M2JcdTQzYjFcdTQzYWNcdTJlYmJcdTQzZGRcdTQ0ZDZcdTQ2NjFcdTQ2NGNcdWU4NDMiXSxbImZlODAi''@;'; put 'put ''LCJcdTQ3MjNcdTQ3MjlcdTQ3N2NcdTQ3OGRcdTJlY2FcdTQ5NDdcdTQ5N2FcdTQ5N2RcdTQ5ODJcdTQ5ODNcdTQ5ODVcdTQ5ODZcdTQ5OWZcdTQ5OWJcdTQ5YjdcdTQ5YjZcdWU4NTRcdWU4NTVcdTRjYTNcdTRjOWZcdTRjYTBcdTRjYTFcdTRjNzdcdTRjYTJcdTRkMTMiLDYsIlx1NGRhZVx1''@;'; put 'put ''ZTg2NFx1ZTQ2OCIsOTNdXScpfSw0MDY3OTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjhdLFsiYTEiLCJcdWZmNjEiLDYyXSxbIjgxNDAiLCJcdTMwMDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJc''@;'; put 'put ''dWZmMWZcdWZmMDFcdTMwOWJcdTMwOWNceGI0XHVmZjQwXHhhOFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1MjAxNVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1''@;'; put 'put ''MjAyNVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1ZmYwOFx1ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOCIsOSwiXHVmZjBiXHVmZjBkXHhiMVx4ZDciXSxbIjgxODAiLCJceGY3XHVmZjFkXHUyMjYwXHVmZjFjXHVmZjFlXHUyMjY2XHUyMjY3XHUyMjFl''@;'; put 'put ''XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmZlNVx1ZmYwNFx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYwM1x1ZmYwNlx1ZmYwYVx1ZmYyMFx4YTdcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJc''@;'; put 'put ''dTI1YmRcdTI1YmNcdTIwM2JcdTMwMTJcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTMiXSxbIjgxYjgiLCJcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjkiXSxbIjgxYzgiLCJcdTIyMjdcdTIyMjhcdWZmZTJcdTIxZDJcdTIxZDRcdTIyMDBcdTIy''@;'; put 'put ''MDMiXSxbIjgxZGEiLCJcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmMiXSxbIjgxZjAiLCJcdTIxMmJcdTIwMzBcdTI2NmZcdTI2NmRcdTI2NmFcdTIwMjBcdTIwMjFceGI2Il0s''@;'; put 'put ''WyI4MWZjIiwiXHUyNWVmIl0sWyI4MjRmIiwiXHVmZjEwIiw5XSxbIjgyNjAiLCJcdWZmMjEiLDI1XSxbIjgyODEiLCJcdWZmNDEiLDI1XSxbIjgyOWYiLCJcdTMwNDEiLDgyXSxbIjgzNDAiLCJcdTMwYTEiLDYyXSxbIjgzODAiLCJcdTMwZTAiLDIyXSxbIjgzOWYiLCJcdTAzOTEiLDE2LCJc''@;'; put 'put ''dTAzYTMiLDZdLFsiODNiZiIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0sWyI4NDQwIiwiXHUwNDEwIiw1LCJcdTA0MDFcdTA0MTYiLDI1XSxbIjg0NzAiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsN10sWyI4NDgwIiwiXHUwNDNlIiwxN10sWyI4NDlmIiwiXHUyNTAwXHUyNTAyXHUyNTBj''@;'; put 'put ''XHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUy''@;'; put 'put ''NTM4XHUyNTQyIl0sWyI4NzQwIiwiXHUyNDYwIiwxOSwiXHUyMTYwIiw5XSxbIjg3NWYiLCJcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMz''@;'; put 'put ''OWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTEiXSxbIjg3N2UiLCJcdTMzN2IiXSxbIjg3ODAiLCJcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTQiLDQsIlx1MzIzMVx1MzIzMlx1MzIzOVx1MzM3ZVx1MzM3ZFx1MzM3Y1x1MjI1Mlx1MjI2MVx1MjIyYlx1MjIyZVx1MjIxMVx1''@;'; put 'put ''MjIxYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MjIzNVx1MjIyOVx1MjIyYSJdLFsiODg5ZiIsIlx1NGU5Y1x1NTUxNlx1NWEwM1x1OTYzZlx1NTRjMFx1NjExYlx1NjMyOFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUyNVx1NjVlZFx1ODQ2Nlx1ODJh''@;'; put 'put ''Nlx1OWJmNVx1Njg5M1x1NTcyN1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1NGYwYVx1NGY0ZFx1NGY5ZFx1''@;'; put 'put ''NTA0OVx1NTZmMlx1NTkzN1x1NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2RlZlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5NVx1NGVhNVx1NTdkZlx1ODBi''@;'; put 'put ''Mlx1OTBjMVx1NzhlZlx1NGUwMFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZCJdLFsiODk0MCIsIlx1OTY2Mlx1OTY3MFx1OTZhMFx1OTdmYlx1''@;'; put 'put ''NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1NGU5MVx1OTA0Ylx1OTZm''@;'; put 'put ''Mlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTljNVx1NjBhNlx1OGIwMVx1OGQ4YVx1''@;'; put 'put ''OTViMlx1Njk4ZVx1NTNhZFx1NTE4NiJdLFsiODk4MCIsIlx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1Ylx1OWQx''@;'; put 'put ''Ylx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFmOVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkY1x1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0Ylx1NjFiNlx1ODFjNlx1''@;'; put 'put ''Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1Njc5Y1x1NjdiNlx1NmI0''@;'; put 'put ''Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1OVx1NzUzYlx1ODFlNVx1''@;'; put 'put ''ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOSJdLFsiOGE0MCIsIlx1OWI0MVx1NjY2Nlx1NjhiMFx1NmQ3N1x1NzA3''@;'; put 'put ''MFx1NzU0Y1x1NzY4Nlx1N2Q3NVx1ODJhNVx1ODdmOVx1OTU4Ylx1OTY4ZVx1OGM5ZFx1NTFmMVx1NTJiZVx1NTkxNlx1NTRiM1x1NWJiM1x1NWQxNlx1NjE2OFx1Njk4Mlx1NmRhZlx1Nzg4ZFx1ODRjYlx1ODg1N1x1OGE3Mlx1OTNhN1x1OWFiOFx1NmQ2Y1x1OTlhOFx1ODZkOVx1NTdhM1x1''@;'; put 'put ''NjdmZlx1ODZjZVx1OTIwZVx1NTI4M1x1NTY4N1x1NTQwNFx1NWVkM1x1NjJlMVx1NjRiOVx1NjgzY1x1NjgzOFx1NmJiYlx1NzM3Mlx1NzhiYVx1N2E2Ylx1ODk5YVx1ODlkMlx1OGQ2Ylx1OGYwM1x1OTBlZFx1OTVhM1x1OTY5NFx1OTc2OVx1NWI2Nlx1NWNiM1x1Njk3ZFx1OTg0ZFx1OTg0''@;'; put 'put ''ZVx1NjM5Ylx1N2IyMFx1NmEyYiJdLFsiOGE4MCIsIlx1NmE3Zlx1NjhiNlx1OWMwZFx1NmY1Zlx1NTI3Mlx1NTU5ZFx1NjA3MFx1NjJlY1x1NmQzYlx1NmUwN1x1NmVkMVx1ODQ1Ylx1ODkxMFx1OGY0NFx1NGUxNFx1OWMzOVx1NTNmNlx1NjkxYlx1NmEzYVx1OTc4NFx1NjgyYVx1NTE1Y1x1''@;'; put 'put ''N2FjM1x1ODRiMlx1OTFkY1x1OTM4Y1x1NTY1Ylx1OWQyOFx1NjgyMlx1ODMwNVx1ODQzMVx1N2NhNVx1NTIwOFx1ODJjNVx1NzRlNlx1NGU3ZVx1NGY4M1x1NTFhMFx1NWJkMlx1NTIwYVx1NTJkOFx1NTJlN1x1NWRmYlx1NTU5YVx1NTgyYVx1NTllNlx1NWI4Y1x1NWI5OFx1NWJkYlx1NWU3''@;'; put 'put ''Mlx1NWU3OVx1NjBhM1x1NjExZlx1NjE2M1x1NjFiZVx1NjNkYlx1NjU2Mlx1NjdkMVx1Njg1M1x1NjhmYVx1NmIzZVx1NmI1M1x1NmM1N1x1NmYyMlx1NmY5N1x1NmY0NVx1NzRiMFx1NzUxOFx1NzZlM1x1NzcwYlx1N2FmZlx1N2JhMVx1N2MyMVx1N2RlOVx1N2YzNlx1N2ZmMFx1ODA5ZFx1''@;'; put 'put ''ODI2Nlx1ODM5ZVx1ODliM1x1OGFjY1x1OGNhYlx1OTA4NFx1OTQ1MVx1OTU5M1x1OTU5MVx1OTVhMlx1OTY2NVx1OTdkM1x1OTkyOFx1ODIxOFx1NGUzOFx1NTQyYlx1NWNiOFx1NWRjY1x1NzNhOVx1NzY0Y1x1NzczY1x1NWNhOVx1N2ZlYlx1OGQwYlx1OTZjMVx1OTgxMVx1OTg1NFx1OTg1''@;'; put 'put ''OFx1NGYwMVx1NGYwZVx1NTM3MVx1NTU5Y1x1NTY2OFx1NTdmYVx1NTk0N1x1NWIwOVx1NWJjNFx1NWM5MFx1NWUwY1x1NWU3ZVx1NWZjY1x1NjNlZVx1NjczYVx1NjVkN1x1NjVlMlx1NjcxZlx1NjhjYlx1NjhjNCJdLFsiOGI0MCIsIlx1NmE1Zlx1NWUzMFx1NmJjNVx1NmMxN1x1NmM3ZFx1''@;'; put 'put ''NzU3Zlx1Nzk0OFx1NWI2M1x1N2EwMFx1N2QwMFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1NzU5MVx1Nzk0N1x1N2Zh''@;'; put 'put ''OVx1ODdmYlx1OGFiY1x1OGI3MFx1NjNhY1x1ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNjYVx1NTQzOFx1NWJhZVx1''@;'; put 'put ''NWYxM1x1NjAyNVx1NjU1MSJdLFsiOGI4MCIsIlx1NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1OGEz''@;'; put 'put ''MVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1YVx1NGVhOFx1NGVhYlx1NGVhY1x1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAyZlx1NjA1MFx1NjA2ZFx1''@;'; put 'put ''NjMxZlx1NjU1OVx1NmE0Ylx1NmNjMVx1NzJjMlx1NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVmMFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1Njg1MFx1N2M4MVx1NTBj''@;'; put 'put ''NVx1NTJlNFx1NTc0N1x1NWRmZVx1OTMyNlx1NjVhNFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMzYVx1NzJkN1x1NzM5Nlx1''@;'; put 'put ''NzdlOVx1ODJlNlx1OGVhZlx1OTljNlx1OTljOFx1OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFkYlx1OTFlN1x1NWM1MVx1NWM0OCJdLFsiOGM0MCIsIlx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2Fh''@;'; put 'put ''YVx1NzE4YVx1OTY4OFx1N2M4Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1''@;'; put 'put ''NWY4NFx1NjA3NVx1NjE3Nlx1NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJi''@;'; put 'put ''OFx1OGZjZVx1OWJlOCJdLFsiOGM4MCIsIlx1NTI4N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1''@;'; put 'put ''NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1NjFmOFx1NjJmM1x1NjM3Mlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1NzcwY1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3''@;'; put 'put ''OFx1NTE0M1x1NTM5Zlx1NTNiM1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1''@;'; put 'put ''NmU1Nlx1NzJkMFx1N2NjYVx1ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYwZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4''@;'; put 'put ''MVx1OGE5ZVx1OGFhNFx1OGI3N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1NTM5YVx1NTNlM1x1NTQxMSJdLFsiOGQ0MCIsIlx1NTQwZVx1NTU4OVx1NTc1MVx1NTdhMlx1NTk3ZFx1NWI1NFx1''@;'; put 'put ''NWI1ZFx1NWI4Zlx1NWRlNVx1NWRlN1x1NWRmN1x1NWU3OFx1NWU4M1x1NWU5YVx1NWViN1x1NWYxOFx1NjA1Mlx1NjE0Y1x1NjI5N1x1NjJkOFx1NjNhN1x1NjUzYlx1NjYwMlx1NjY0M1x1NjZmNFx1Njc2ZFx1NjgyMVx1Njg5N1x1NjljYlx1NmM1Zlx1NmQyYVx1NmQ2OVx1NmUyZlx1NmU5''@;'; put 'put ''ZFx1NzUzMlx1NzY4N1x1Nzg2Y1x1N2EzZlx1N2NlMFx1N2QwNVx1N2QxOFx1N2Q1ZVx1N2RiMVx1ODAxNVx1ODAwM1x1ODBhZlx1ODBiMVx1ODE1NFx1ODE4Zlx1ODIyYVx1ODM1Mlx1ODg0Y1x1ODg2MVx1OGIxYlx1OGNhMlx1OGNmY1x1OTBjYVx1OTE3NVx1OTI3MVx1NzgzZlx1OTJmY1x1''@;'; put 'put ''OTVhNFx1OTY0ZCJdLFsiOGQ4MCIsIlx1OTgwNVx1OTk5OVx1OWFkOFx1OWQzYlx1NTI1Ylx1NTJhYlx1NTNmN1x1NTQwOFx1NThkNVx1NjJmN1x1NmZlMFx1OGM2YVx1OGY1Zlx1OWViOVx1NTE0Ylx1NTIzYlx1NTQ0YVx1NTZmZFx1N2E0MFx1OTE3N1x1OWQ2MFx1OWVkMlx1NzM0NFx1NmYw''@;'; put 'put ''OVx1ODE3MFx1NzUxMVx1NWZmZFx1NjBkYVx1OWFhOFx1NzJkYlx1OGZiY1x1NmI2NFx1OTgwM1x1NGVjYVx1NTZmMFx1NTc2NFx1NThiZVx1NWE1YVx1NjA2OFx1NjFjN1x1NjYwZlx1NjYwNlx1NjgzOVx1NjhiMVx1NmRmN1x1NzVkNVx1N2QzYVx1ODI2ZVx1OWI0Mlx1NGU5Ylx1NGY1MFx1''@;'; put 'put ''NTNjOVx1NTUwNlx1NWQ2Zlx1NWRlNlx1NWRlZVx1NjdmYlx1NmM5OVx1NzQ3M1x1NzgwMlx1OGE1MFx1OTM5Nlx1ODhkZlx1NTc1MFx1NWVhN1x1NjMyYlx1NTBiNVx1NTBhY1x1NTE4ZFx1NjcwMFx1NTRjOVx1NTg1ZVx1NTliYlx1NWJiMFx1NWY2OVx1NjI0ZFx1NjNhMVx1NjgzZFx1NmI3''@;'; put 'put ''M1x1NmUwOFx1NzA3ZFx1OTFjN1x1NzI4MFx1NzgxNVx1NzgyNlx1Nzk2ZFx1NjU4ZVx1N2QzMFx1ODNkY1x1ODhjMVx1OGYwOVx1OTY5Ylx1NTI2NFx1NTcyOFx1Njc1MFx1N2Y2YVx1OGNhMVx1NTFiNFx1NTc0Mlx1OTYyYVx1NTgzYVx1Njk4YVx1ODBiNFx1NTRiMlx1NWQwZVx1NTdmY1x1''@;'; put 'put ''Nzg5NVx1OWRmYVx1NGY1Y1x1NTI0YVx1NTQ4Ylx1NjQzZVx1NjYyOFx1NjcxNFx1NjdmNVx1N2E4NFx1N2I1Nlx1N2QyMlx1OTMyZlx1Njg1Y1x1OWJhZFx1N2IzOVx1NTMxOVx1NTE4YVx1NTIzNyJdLFsiOGU0MCIsIlx1NWJkZlx1NjJmNlx1NjRhZVx1NjRlNlx1NjcyZFx1NmJiYVx1ODVh''@;'; put 'put ''OVx1OTZkMVx1NzY5MFx1OWJkNlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNkYlx1OTE3OFx1OTkxMFx1NjVhY1x1''@;'; put 'put ''NjZhYlx1NmI4Ylx1NGVkNVx1NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1NjVhZlx1NjViZFx1NjVlOFx1Njc5''@;'; put 'put ''ZFx1NmI2MiJdLFsiOGU4MCIsIlx1NmI3Ylx1NmMwZlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1NGU4Ylx1NGYzY1x1''@;'; put 'put ''NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1NjMwMVx1NjY0Mlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAzM1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1OWQyYlx1N2FmYVx1OGVmOFx1NWI4''@;'; put 'put ''ZFx1OTZlYlx1NGUwM1x1NTNmMVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMwNFx1NjM2OFx1OGQ2Nlx1NjU5Y1x1''@;'; put 'put ''NzE2ZVx1NzkzZVx1N2QxN1x1ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFjOFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1NWI4OFx1NjI0Ylx1NjczMVx1NmI4''@;'; put 'put ''YVx1NzJlOVx1NzNlMFx1N2EyZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1NTNjZVx1NTQ2OCJdLFsiOGY0MCIsIlx1NWI5N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEwMVx1NjJmZVx1NmQzMlx1''@;'; put 'put ''NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1NmM0MVx1NmUwYlx1NzM2''@;'; put 'put ''M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVlY1x1Njk2Zlx1NmI4OVx1''@;'; put 'put ''NmRmMyJdLFsiOGY4MCIsIlx1NmU5Nlx1NmY2NFx1NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1NWU4''@;'; put 'put ''Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBiN1x1NTExZlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4YVx1NWVlMFx1NWY3MFx1NjI3Zlx1''@;'; put 'put ''NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1NzlmMFx1N2FlMFx1N2IxMVx1N2Nh''@;'; put 'put ''N1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5N1x1NTI3MFx1NTdjZVx1NTgzNFx1''@;'; put 'put ''NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZSJdLFsiOTA0MCIsIlx1NjJlZFx1NjkwZFx1NmI5Nlx1NzFlZFx1N2U1NFx1ODA3N1x1ODI3Mlx1ODll''@;'; put 'put ''Nlx1OThkZlx1ODc1NVx1OGZiMVx1NWMzYlx1NGYzOFx1NGZlMVx1NGZiNVx1NTUwN1x1NWEyMFx1NWJkZFx1NWJlOVx1NWZjM1x1NjE0ZVx1NjMyZlx1NjViMFx1NjY0Ylx1NjhlZVx1Njk5Ylx1NmQ3OFx1NmRmMVx1NzUzM1x1NzViOVx1NzcxZlx1Nzk1ZVx1NzllNlx1N2QzM1x1ODFlM1x1''@;'; put 'put ''ODJhZlx1ODVhYVx1ODlhYVx1OGEzYVx1OGVhYlx1OGY5Ylx1OTAzMlx1OTFkZFx1OTcwN1x1NGViYVx1NGVjMVx1NTIwM1x1NTg3NVx1NThlY1x1NWMwYlx1NzUxYVx1NWMzZFx1ODE0ZVx1OGEwYVx1OGZjNVx1OTY2M1x1OTc2ZFx1N2IyNVx1OGFjZlx1OTgwOFx1OTE2Mlx1NTZmM1x1NTNh''@;'; put 'put ''OCJdLFsiOTA4MCIsIlx1OTAxN1x1NTQzOVx1NTc4Mlx1NWUyNVx1NjNhOFx1NmMzNFx1NzA4YVx1Nzc2MVx1N2M4Ylx1N2ZlMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1OTMxOFx1OTY4Zlx1NzQ1ZVx1OWFjNFx1NWQwN1x1NWQ2OVx1NjU3MFx1NjdhMlx1OGRhOFx1OTZkYlx1NjM2ZVx1''@;'; put 'put ''Njc0OVx1NjkxOVx1ODNjNVx1OTgxN1x1OTZjMFx1ODhmZVx1NmY4NFx1NjQ3YVx1NWJmOFx1NGUxNlx1NzAyY1x1NzU1ZFx1NjYyZlx1NTFjNFx1NTIzNlx1NTJlMlx1NTlkM1x1NWY4MVx1NjAyN1x1NjIxMFx1NjUzZlx1NjU3NFx1NjYxZlx1NjY3NFx1NjhmMlx1NjgxNlx1NmI2M1x1NmUw''@;'; put 'put ''NVx1NzI3Mlx1NzUxZlx1NzZkYlx1N2NiZVx1ODA1Nlx1NThmMFx1ODhmZFx1ODk3Zlx1OGFhMFx1OGE5M1x1OGFjYlx1OTAxZFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1N2EwZVx1ODEwNlx1OTZiYlx1NWUyZFx1NjBkY1x1NjIxYVx1NjVhNVx1NjYxNFx1Njc5MFx1NzdmM1x1N2E0ZFx1''@;'; put 'put ''N2M0ZFx1N2UzZVx1ODEwYVx1OGNhY1x1OGQ2NFx1OGRlMVx1OGU1Zlx1NzhhOVx1NTIwN1x1NjJkOVx1NjNhNVx1NjQ0Mlx1NjI5OFx1OGEyZFx1N2E4M1x1N2JjMFx1OGFhY1x1OTZlYVx1N2Q3Nlx1ODIwY1x1ODc0OVx1NGVkOVx1NTE0OFx1NTM0M1x1NTM2MFx1NWJhM1x1NWMwMlx1NWMx''@;'; put 'put ''Nlx1NWRkZFx1NjIyNlx1NjI0N1x1NjRiMFx1NjgxM1x1NjgzNFx1NmNjOVx1NmQ0NVx1NmQxN1x1NjdkM1x1NmY1Y1x1NzE0ZVx1NzE3ZFx1NjVjYlx1N2E3Zlx1N2JhZFx1N2RkYSJdLFsiOTE0MCIsIlx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIzOVx1ODVhNlx1OGE2ZVx1OGNjZVx1''@;'; put 'put ''OGRmNVx1OTA3OFx1OTA3N1x1OTJhZFx1OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1NzU4Zlx1NzU4ZVx1NzkwZVx1Nzk1''@;'; put 'put ''Nlx1NzlkZlx1N2M5N1x1N2QyMFx1N2Q0NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1Y1x1NjM4M1x1NjMzZlx1NjNiYiJd''@;'; put 'put ''LFsiOTE4MCIsIlx1NjRjZFx1NjVlOVx1NjZmOVx1NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5Y1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1OTM5''@;'; put 'put ''N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4ZVx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1''@;'; put 'put ''NjNjM1x1NWI1OFx1NWI2Ylx1NWMwYVx1NjQwZFx1Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1NTgwNlx1NWJmZVx1ODAxMFx1NWNi''@;'; put 'put ''MVx1NWUyZlx1NWY4NVx1NjAyMFx1NjE0Ylx1NjIzNFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0Y1x1OWRmOVx1NmVkZFx1NzAyN1x1''@;'; put 'put ''NTM1M1x1NTU0NFx1NWI4NVx1NjI1OFx1NjI5ZVx1NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNlYSJdLFsiOTI0MCIsIlx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1NWRmZFx1N2FlYVx1OGZi''@;'; put 'put ''Zlx1NjhkYVx1OGMzN1x1NzJmOFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5NVx1OTM1Ylx1NTZlM1x1''@;'; put 'put ''NThjN1x1NWYzZVx1NjVhZFx1NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2ExYVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1N2I1MVx1ODRjNCJdLFsi''@;'; put 'put ''OTI4MCIsIlx1OTAxMFx1NzllOVx1N2E5Mlx1ODMzNlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNhZlx1''@;'; put 'put ''NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNVx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1OGQ4NVx1OGRm''@;'; put 'put ''M1x1OTI5YVx1OTU3N1x1OTgwMlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0M1x1NmYyY1x1''@;'; put 'put ''NjdkOFx1OGZiYlx1ODUyNlx1N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1NWVhZFx1NWVm''@;'; put 'put ''N1x1NWYxZlx1NjA4Y1x1NjJiNVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxMyJdLFsiOTM0MCIsIlx1OTBiOFx1OTEyZFx1OTFkOFx1OWYwZVx1NmNlNVx1NjQ1OFx1NjRlMlx1NjU3NVx1NmVmNFx1''@;'; put 'put ''NzY4NFx1N2IxYlx1OTA2OVx1OTNkMVx1NmViYVx1NTRmMlx1NWZiOVx1NjRhNFx1OGY0ZFx1OGZlZFx1OTI0NFx1NTE3OFx1NTg2Ylx1NTkyOVx1NWM1NVx1NWU5N1x1NmRmYlx1N2U4Zlx1NzUxY1x1OGNiY1x1OGVlMlx1OTg1Ylx1NzBiOVx1NGYxZFx1NmJiZlx1NmZiMVx1NzUzMFx1OTZm''@;'; put 'put ''Ylx1NTE0ZVx1NTQxMFx1NTgzNVx1NTg1N1x1NTlhY1x1NWM2MFx1NWY5Mlx1NjU5N1x1Njc1Y1x1NmUyMVx1NzY3Ylx1ODNkZlx1OGNlZFx1OTAxNFx1OTBmZFx1OTM0ZFx1NzgyNVx1NzgzYVx1NTJhYVx1NWVhNlx1NTcxZlx1NTk3NFx1NjAxMlx1NTAxMlx1NTE1YVx1NTFhYyJdLFsiOTM4''@;'; put 'put ''MCIsIlx1NTFjZFx1NTIwMFx1NTUxMFx1NTg1NFx1NTg1OFx1NTk1N1x1NWI5NVx1NWNmNlx1NWQ4Ylx1NjBiY1x1NjI5NVx1NjQyZFx1Njc3MVx1Njg0M1x1NjhiY1x1NjhkZlx1NzZkN1x1NmRkOFx1NmU2Zlx1NmQ5Ylx1NzA2Zlx1NzFjOFx1NWY1M1x1NzVkOFx1Nzk3N1x1N2I0OVx1N2I1''@;'; put 'put ''NFx1N2I1Mlx1N2NkNlx1N2Q3MVx1NTIzMFx1ODQ2M1x1ODU2OVx1ODVlNFx1OGEwZVx1OGIwNFx1OGM0Nlx1OGUwZlx1OTAwM1x1OTAwZlx1OTQxOVx1OTY3Nlx1OTgyZFx1OWEzMFx1OTVkOFx1NTBjZFx1NTJkNVx1NTQwY1x1NTgwMlx1NWMwZVx1NjFhN1x1NjQ5ZVx1NmQxZVx1NzdiM1x1''@;'; put 'put ''N2FlNVx1ODBmNFx1ODQwNFx1OTA1M1x1OTI4NVx1NWNlMFx1OWQwN1x1NTMzZlx1NWY5N1x1NWZiM1x1NmQ5Y1x1NzI3OVx1Nzc2M1x1NzliZlx1N2JlNFx1NmJkMlx1NzJlY1x1OGFhZFx1NjgwM1x1NmE2MVx1NTFmOFx1N2E4MVx1NjkzNFx1NWM0YVx1OWNmNlx1ODJlYlx1NWJjNVx1OTE0''@;'; put 'put ''OVx1NzAxZVx1NTY3OFx1NWM2Zlx1NjBjN1x1NjU2Nlx1NmM4Y1x1OGM1YVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZjN1x1OTIwZFx1NTk0OFx1OTBhM1x1NTE4NVx1NGU0ZFx1NTFlYVx1ODU5OVx1OGIwZVx1NzA1OFx1NjM3YVx1OTM0Ylx1Njk2Mlx1OTliNFx1N2UwNFx1NzU3N1x1NTM1N1x1''@;'; put 'put ''Njk2MFx1OGVkZlx1OTZlM1x1NmM1ZFx1NGU4Y1x1NWMzY1x1NWYxMFx1OGZlOVx1NTMwMlx1OGNkMVx1ODA4OVx1ODY3OVx1NWVmZlx1NjVlNVx1NGU3M1x1NTE2NSJdLFsiOTQ0MCIsIlx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1OGE4ZFx1NmZlMVx1NzliMFx1Nzk2''@;'; put 'put ''Mlx1NWJlN1x1ODQ3MVx1NzMyYlx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZhNFx1NWRmNFx1NjI4YVx1NjRhZFx1''@;'; put 'put ''ODk4N1x1Njc3N1x1NmNlMlx1NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZjM1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1NWE5Mlx1Njg4NSJdLFsiOTQ4MCIs''@;'; put 'put ''Ilx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThmMlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYyMFx1NzIwNlx1''@;'; put 'put ''N2UxYlx1ODNhYlx1OTljMVx1OWVhNlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1OTVhNVx1OWNlOVx1NTY3''@;'; put 'put ''YVx1NTg1OVx1ODZlNFx1OTZiY1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2OVx1OTgxMlx1OThlZlx1''@;'; put 'put ''NjMzZFx1NjY2OVx1NzU2YVx1NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJhYlx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1N2Y3N1x1ODBhNVx1ODhh''@;'; put 'put ''Ylx1OGFiOVx1OGNiYlx1OTA3Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZSJdLFsiOTU0MCIsIlx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1''@;'; put 'put ''NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJm''@;'; put 'put ''Mlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3NyJdLFsiOTU4MCIsIlx1''@;'; put 'put ''NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2''@;'; put 'put ''Zlx1NWZhOVx1NWU0NVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1''@;'; put 'put ''ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2Rl''@;'; put 'put ''OFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1''@;'; put 'put ''NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYiJdLFsiOTY0MCIsIlx1NmNkNVx1NmNlMVx1NzBmOVx1NzgzMlx1N2UyYlx1ODBkZVx1ODJiM1x1ODQwY1x1ODRlY1x1ODcwMlx1ODkx''@;'; put 'put ''Mlx1OGEyYVx1OGM0YVx1OTBhNlx1OTJkMlx1OThmZFx1OWNmM1x1OWQ2Y1x1NGU0Zlx1NGVhMVx1NTA4ZFx1NTI1Nlx1NTc0YVx1NTlhOFx1NWUzZFx1NWZkOFx1NWZkOVx1NjIzZlx1NjZiNFx1NjcxYlx1NjdkMFx1NjhkMlx1NTE5Mlx1N2QyMVx1ODBhYVx1ODFhOFx1OGIwMFx1OGM4Y1x1''@;'; put 'put ''OGNiZlx1OTI3ZVx1OTYzMlx1NTQyMFx1OTgyY1x1NTMxN1x1NTBkNVx1NTM1Y1x1NThhOFx1NjRiMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N2E0Nlx1OTFlNlx1NTJjM1x1NmNhMVx1NmI4Nlx1NTgwMFx1NWU0Y1x1NTk1NFx1NjcyY1x1N2ZmYlx1NTFlMVx1NzZjNiJdLFsiOTY4MCIsIlx1NjQ2''@;'; put 'put ''OVx1NzhlOFx1OWI1NFx1OWViYlx1NTdjYlx1NTliOVx1NjYyN1x1Njc5YVx1NmJjZVx1NTRlOVx1NjlkOVx1NWU1NVx1ODE5Y1x1Njc5NVx1OWJhYVx1NjdmZVx1OWM1Mlx1Njg1ZFx1NGVhNlx1NGZlM1x1NTNjOFx1NjJiOVx1NjcyYlx1NmNhYlx1OGZjNFx1NGZhZFx1N2U2ZFx1OWViZlx1''@;'; put 'put ''NGUwN1x1NjE2Mlx1NmU4MFx1NmYyYlx1ODUxM1x1NTQ3M1x1NjcyYVx1OWI0NVx1NWRmM1x1N2I5NVx1NWNhY1x1NWJjNlx1ODcxY1x1NmU0YVx1ODRkMVx1N2ExNFx1ODEwOFx1NTk5OVx1N2M4ZFx1NmMxMVx1NzcyMFx1NTJkOVx1NTkyMlx1NzEyMVx1NzI1Zlx1NzdkYlx1OTcyN1x1OWQ2''@;'; put 'put ''MVx1NjkwYlx1NWE3Zlx1NWExOFx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NzZkZlx1OGZmN1x1OTI5OFx1OWNmNFx1NTllYVx1NzI1ZFx1NmVjNVx1NTE0ZFx1NjhjOVx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViYVx1NjQ3OFx1NmEyMVx1ODMwMlx1NTk4NFx1NWI1Zlx1NmJkYlx1NzMxYlx1''@;'; put 'put ''NzZmMlx1N2RiMlx1ODAxN1x1ODQ5OVx1NTEzMlx1NjcyOFx1OWVkOVx1NzZlZVx1Njc2Mlx1NTJmZlx1OTkwNVx1NWMyNFx1NjIzYlx1N2M3ZVx1OGNiMFx1NTU0Zlx1NjBiNlx1N2QwYlx1OTU4MFx1NTMwMVx1NGU1Zlx1NTFiNlx1NTkxY1x1NzIzYVx1ODAzNlx1OTFjZVx1NWYyNVx1Nzdl''@;'; put 'put ''Mlx1NTM4NFx1NWY3OVx1N2QwNFx1ODVhY1x1OGEzM1x1OGU4ZFx1OTc1Nlx1NjdmM1x1ODVhZVx1OTQ1M1x1NjEwOVx1NjEwOFx1NmNiOVx1NzY1MiJdLFsiOTc0MCIsIlx1OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3ZFx1NjBhMFx1NjE4Mlx1''@;'; put 'put ''NjNkNlx1NjcwOVx1NjdkYVx1NmU2N1x1NmQ4Y1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkxNVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1NTk5Nlx1NWJiOVx1NWVi''@;'; put 'put ''OFx1NjNkYVx1NjNmYVx1NjRjMVx1NjZkY1x1Njk0YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMiJdLFsiOTc4MCIsIlx1NmM4M1x1''@;'; put 'put ''NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1Njhh''@;'; put 'put ''OFx1NzQwNlx1NzQ4M1x1NzVlMlx1ODhjZlx1ODhlMVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1''@;'; put 'put ''ODY1Y1x1NGU4Nlx1NGVhZVx1NTBkYVx1NGUyMVx1NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFkMlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1Njc5N1x1NmRjYlx1NzFk''@;'; put 'put ''MFx1NzQzM1x1ODFlOFx1OGYyYVx1OTZhM1x1OWM1N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcwYVx1OWU5N1x1OWY2Mlx1''@;'; put 'put ''NjZhNlx1NmI3NFx1NTIxN1x1NTJhM1x1NzBjOFx1ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2ZiJdLFsiOTg0MCIsIlx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1OTczMlx1NTJiNFx1NWE0''@;'; put 'put ''MVx1NWVjYVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNjNFx1ODEwN1x1NjBkMVx1''@;'; put 'put ''NjdhMFx1OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NSJdLFsiOTg5ZiIsIlx1NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1NGU4NVx1OGM2''@;'; put 'put ''Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1ZFx1NGY1N1x1''@;'; put 'put ''NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1NTAyYVx1NTAy''@;'; put 'put ''NVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBiMiJdLFsiOTk0MCIsIlx1''@;'; put 'put ''NTBjOVx1NTBjYVx1NTBiM1x1NTBjMlx1NTBkNlx1NTBkZVx1NTBlNVx1NTBlZFx1NTBlM1x1NTBlZVx1NTBmOVx1NTBmNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTExNVx1NTExNFx1NTExYVx1NTEyMVx1NTEzYVx1NTEzN1x1NTEzY1x1NTEzYlx1NTEzZlx1NTE0MFx1NTE1Mlx1NTE0''@;'; put 'put ''Y1x1NTE1NFx1NTE2Mlx1N2FmOFx1NTE2OVx1NTE2YVx1NTE2ZVx1NTE4MFx1NTE4Mlx1NTZkOFx1NTE4Y1x1NTE4OVx1NTE4Zlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1NTFhNFx1NTFhNlx1NTFhMlx1NTFhOVx1NTFhYVx1NTFhYlx1NTFiM1x1NTFiMVx1NTFiMlx1NTFiMFx1NTFiNVx1''@;'; put 'put ''NTFiZFx1NTFjNVx1NTFjOVx1NTFkYlx1NTFlMFx1ODY1NVx1NTFlOVx1NTFlZCJdLFsiOTk4MCIsIlx1NTFmMFx1NTFmNVx1NTFmZVx1NTIwNFx1NTIwYlx1NTIxNFx1NTIwZVx1NTIyN1x1NTIyYVx1NTIyZVx1NTIzM1x1NTIzOVx1NTI0Zlx1NTI0NFx1NTI0Ylx1NTI0Y1x1NTI1ZVx1NTI1''@;'; put 'put ''NFx1NTI2YVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3Zlx1NTI3ZFx1NTI4ZFx1NTI5NFx1NTI5Mlx1NTI3MVx1NTI4OFx1NTI5MVx1OGZhOFx1OGZhN1x1NTJhY1x1NTJhZFx1NTJiY1x1NTJiNVx1NTJjMVx1NTJjZFx1NTJkN1x1NTJkZVx1NTJlM1x1NTJlNlx1OThlZFx1NTJlMFx1NTJmM1x1''@;'; put 'put ''NTJmNVx1NTJmOFx1NTJmOVx1NTMwNlx1NTMwOFx1NzUzOFx1NTMwZFx1NTMxMFx1NTMwZlx1NTMxNVx1NTMxYVx1NTMyM1x1NTMyZlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0MFx1NTM0Nlx1NTM0NVx1NGUxN1x1NTM0OVx1NTM0ZFx1NTFkNlx1NTM1ZVx1NTM2OVx1NTM2ZVx1NTkxOFx1NTM3''@;'; put 'put ''Ylx1NTM3N1x1NTM4Mlx1NTM5Nlx1NTNhMFx1NTNhNlx1NTNhNVx1NTNhZVx1NTNiMFx1NTNiNlx1NTNjM1x1N2MxMlx1OTZkOVx1NTNkZlx1NjZmY1x1NzFlZVx1NTNlZVx1NTNlOFx1NTNlZFx1NTNmYVx1NTQwMVx1NTQzZFx1NTQ0MFx1NTQyY1x1NTQyZFx1NTQzY1x1NTQyZVx1NTQzNlx1''@;'; put 'put ''NTQyOVx1NTQxZFx1NTQ0ZVx1NTQ4Zlx1NTQ3NVx1NTQ4ZVx1NTQ1Zlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1NTQ5Mlx1NTQ3Ylx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4Nlx1NTRjN1x1NTRhMlx1NTRiOFx1NTRhNVx1NTRhY1x1NTRjNFx1NTRjOFx1NTRhOCJdLFsiOWE0MCIsIlx1NTRh''@;'; put 'put ''Ylx1NTRjMlx1NTRhNFx1NTRiZVx1NTRiY1x1NTRkOFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1ZFx1NTU5OVx1''@;'; put 'put ''NTU4MFx1NTRhZlx1NTU4YVx1NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVkZlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1NTVmZFx1NTYxYlx1NTVm''@;'; put 'put ''OVx1NTY0ZVx1NTY1MFx1NzFkZlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOCJdLFsiOWE4MCIsIlx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZjMVx1''@;'; put 'put ''NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOVx1NTcwOFx1NTcwYlx1NTcwZFx1NTcxM1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1NTc0ZVx1NTczYlx1NTc0MFx1NTc0''@;'; put 'put ''Zlx1NTc2OVx1NTdjMFx1NTc4OFx1NTc2MVx1NTc3Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1''@;'; put 'put ''NTg3MFx1NmJjMFx1NTg1Mlx1NTgzZFx1NTg3OVx1NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThkMVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1NThlZlx1NThmYVx1NThmOVx1NThm''@;'; put 'put ''Ylx1NThmY1x1NThmZFx1NTkwMlx1NTkwYVx1NTkxMFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2OSJdLFsiOWI0MCIsIlx1NTk3OFx1''@;'; put 'put ''NTk4MVx1NTk5ZFx1NGY1ZVx1NGZhYlx1NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEwOVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFi''@;'; put 'put ''ZVx1NWFjYlx1NWFjMlx1NWFiZFx1NWFlM1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1''@;'; put 'put ''NWI3MFx1NWI3M1x1NWI3NVx1NWI3OFx1NjU4OFx1NWI3YVx1NWI4MCJdLFsiOWI4MCIsIlx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMw''@;'; put 'put ''N1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMyMlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1M1x1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1''@;'; put 'put ''NWNiY1x1NWNiN1x1NWNjNVx1NWNiZVx1NWNjN1x1NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0''@;'; put 'put ''Ylx1NWQ2Y1x1NWQ3M1x1NWQ3Nlx1NWQ4N1x1NWQ4NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1''@;'; put 'put ''NWUxYlx1NWUzNlx1NWUzN1x1NWU0NFx1NWU0M1x1NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZiJdLFsiOWM0MCIsIlx1NWVkNlx1NWVl''@;'; put 'put ''M1x1NWVkZFx1NWVkYVx1NWVkYlx1NWVlMlx1NWVlMVx1NWVlOFx1NWVlOVx1NWVlY1x1NWVmMVx1NWVmM1x1NWVmMFx1NWVmNFx1NWVmOFx1NWVmZVx1NWYwM1x1NWYwOVx1NWY1ZFx1NWY1Y1x1NWYwYlx1NWYxMVx1NWYxNlx1NWYyOVx1NWYyZFx1NWYzOFx1NWY0MVx1NWY0OFx1NWY0Y1x1''@;'; put 'put ''NWY0ZVx1NWYyZlx1NWY1MVx1NWY1Nlx1NWY1N1x1NWY1OVx1NWY2MVx1NWY2ZFx1NWY3M1x1NWY3N1x1NWY4M1x1NWY4Mlx1NWY3Zlx1NWY4YVx1NWY4OFx1NWY5MVx1NWY4N1x1NWY5ZVx1NWY5OVx1NWY5OFx1NWZhMFx1NWZhOFx1NWZhZFx1NWZiY1x1NWZkNlx1NWZmYlx1NWZlNFx1NWZm''@;'; put 'put ''OFx1NWZmMVx1NWZkZFx1NjBiM1x1NWZmZlx1NjAyMVx1NjA2MCJdLFsiOWM4MCIsIlx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwZVx1NjAzMVx1NjAxYlx1NjAxNVx1NjAyYlx1NjAyNlx1NjAwZlx1NjAzYVx1NjA1YVx1NjA0MVx1NjA2YVx1NjA3N1x1NjA1Zlx1NjA0YVx1NjA0Nlx1NjA0ZFx1''@;'; put 'put ''NjA2M1x1NjA0M1x1NjA2NFx1NjA0Mlx1NjA2Y1x1NjA2Ylx1NjA1OVx1NjA4MVx1NjA4ZFx1NjBlN1x1NjA4M1x1NjA5YVx1NjA4NFx1NjA5Ylx1NjA5Nlx1NjA5N1x1NjA5Mlx1NjBhN1x1NjA4Ylx1NjBlMVx1NjBiOFx1NjBlMFx1NjBkM1x1NjBiNFx1NWZmMFx1NjBiZFx1NjBjNlx1NjBi''@;'; put 'put ''NVx1NjBkOFx1NjE0ZFx1NjExNVx1NjEwNlx1NjBmNlx1NjBmN1x1NjEwMFx1NjBmNFx1NjBmYVx1NjEwM1x1NjEyMVx1NjBmYlx1NjBmMVx1NjEwZFx1NjEwZVx1NjE0N1x1NjEzZVx1NjEyOFx1NjEyN1x1NjE0YVx1NjEzZlx1NjEzY1x1NjEyY1x1NjEzNFx1NjEzZFx1NjE0Mlx1NjE0NFx1''@;'; put 'put ''NjE3M1x1NjE3N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE2Ylx1NjE3NFx1NjE2Zlx1NjE2NVx1NjE3MVx1NjE1Zlx1NjE1ZFx1NjE1M1x1NjE3NVx1NjE5OVx1NjE5Nlx1NjE4N1x1NjFhY1x1NjE5NFx1NjE5YVx1NjE4YVx1NjE5MVx1NjFhYlx1NjFhZVx1NjFjY1x1NjFjYVx1NjFjOVx1NjFm''@;'; put 'put ''N1x1NjFjOFx1NjFjM1x1NjFjNlx1NjFiYVx1NjFjYlx1N2Y3OVx1NjFjZFx1NjFlNlx1NjFlM1x1NjFmNlx1NjFmYVx1NjFmNFx1NjFmZlx1NjFmZFx1NjFmY1x1NjFmZVx1NjIwMFx1NjIwOFx1NjIwOVx1NjIwZFx1NjIwY1x1NjIxNFx1NjIxYiJdLFsiOWQ0MCIsIlx1NjIxZVx1NjIyMVx1''@;'; put 'put ''NjIyYVx1NjIyZVx1NjIzMFx1NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1NjJiYlx1NjJjZlx1NjJmZlx1NjJj''@;'; put 'put ''Nlx1NjRkNFx1NjJjOFx1NjJkY1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4ZVx1NjM4MFx1NjNhYlx1NjM3Nlx1''@;'; put 'put ''NjNhM1x1NjM4Zlx1NjM4OVx1NjM5Zlx1NjNiNVx1NjM2YiJdLFsiOWQ4MCIsIlx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1NjQyOFx1NjQw''@;'; put 'put ''Zlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUyYVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiY1x1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJhY1x1NjRlM1x1NjRlZlx1NjUyY1x1''@;'; put 'put ''NjRmNlx1NjRmNFx1NjRmMlx1NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUzOFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4''@;'; put 'put ''Mlx1NjU4M1x1OGI4YVx1NjU5Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYzNFx1NjYxY1x1NjY0Zlx1''@;'; put 'put ''NjY0NFx1NjY0OVx1NjY0MVx1NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiYyJdLFsiOWU0MCIsIlx1NjZjNFx1NjZiOFx1NjZk''@;'; put 'put ''Nlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1Njc2M1x1Njc2NFx1Njc4OVx1''@;'; put 'put ''Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1NjdlN1x1NmE5Y1x1NjgxZVx1Njg0''@;'; put 'put ''Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0ZSJdLFsiOWU4MCIsIlx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1NjhiYVx1NjkwZlx1''@;'; put 'put ''Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZFx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1NjkxYVx1NjkyM1x1Njky''@;'; put 'put ''MVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1NjlkM1x1NjliZVx1NjljZVx1''@;'; put 'put ''NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1NmExNFx1NjllYlx1NmEw''@;'; put 'put ''YVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhMyJdLFsiOWY0MCIsIlx1NmE5N1x1ODYxN1x1NmFiYlx1''@;'; put 'put ''NmFjM1x1NmFjMlx1NmFiOFx1NmFiM1x1NmFhY1x1NmFkZVx1NmFkMVx1NmFkZlx1NmFhYVx1NmFkYVx1NmFlYVx1NmFmYlx1NmIwNVx1ODYxNlx1NmFmYVx1NmIxMlx1NmIxNlx1OWIzMVx1NmIxZlx1NmIzOFx1NmIzN1x1NzZkY1x1NmIzOVx1OThlZVx1NmI0N1x1NmI0M1x1NmI0OVx1NmI1''@;'; put 'put ''MFx1NmI1OVx1NmI1NFx1NmI1Ylx1NmI1Zlx1NmI2MVx1NmI3OFx1NmI3OVx1NmI3Zlx1NmI4MFx1NmI4NFx1NmI4M1x1NmI4ZFx1NmI5OFx1NmI5NVx1NmI5ZVx1NmJhNFx1NmJhYVx1NmJhYlx1NmJhZlx1NmJiMlx1NmJiMVx1NmJiM1x1NmJiN1x1NmJiY1x1NmJjNlx1NmJjYlx1NmJkM1x1''@;'; put 'put ''NmJkZlx1NmJlY1x1NmJlYlx1NmJmM1x1NmJlZiJdLFsiOWY4MCIsIlx1OWViZVx1NmMwOFx1NmMxM1x1NmMxNFx1NmMxYlx1NmMyNFx1NmMyM1x1NmM1ZVx1NmM1NVx1NmM2Mlx1NmM2YVx1NmM4Mlx1NmM4ZFx1NmM5YVx1NmM4MVx1NmM5Ylx1NmM3ZVx1NmM2OFx1NmM3M1x1NmM5Mlx1NmM5''@;'; put 'put ''MFx1NmNjNFx1NmNmMVx1NmNkM1x1NmNiZFx1NmNkN1x1NmNjNVx1NmNkZFx1NmNhZVx1NmNiMVx1NmNiZVx1NmNiYVx1NmNkYlx1NmNlZlx1NmNkOVx1NmNlYVx1NmQxZlx1ODg0ZFx1NmQzNlx1NmQyYlx1NmQzZFx1NmQzOFx1NmQxOVx1NmQzNVx1NmQzM1x1NmQxMlx1NmQwY1x1NmQ2M1x1''@;'; put 'put ''NmQ5M1x1NmQ2NFx1NmQ1YVx1NmQ3OVx1NmQ1OVx1NmQ4ZVx1NmQ5NVx1NmZlNFx1NmQ4NVx1NmRmOVx1NmUxNVx1NmUwYVx1NmRiNVx1NmRjN1x1NmRlNlx1NmRiOFx1NmRjNlx1NmRlY1x1NmRkZVx1NmRjY1x1NmRlOFx1NmRkMlx1NmRjNVx1NmRmYVx1NmRkOVx1NmRlNFx1NmRkNVx1NmRl''@;'; put 'put ''YVx1NmRlZVx1NmUyZFx1NmU2ZVx1NmUyZVx1NmUxOVx1NmU3Mlx1NmU1Zlx1NmUzZVx1NmUyM1x1NmU2Ylx1NmUyYlx1NmU3Nlx1NmU0ZFx1NmUxZlx1NmU0M1x1NmUzYVx1NmU0ZVx1NmUyNFx1NmVmZlx1NmUxZFx1NmUzOFx1NmU4Mlx1NmVhYVx1NmU5OFx1NmVjOVx1NmViN1x1NmVkM1x1''@;'; put 'put ''NmViZFx1NmVhZlx1NmVjNFx1NmViMlx1NmVkNFx1NmVkNVx1NmU4Zlx1NmVhNVx1NmVjMlx1NmU5Zlx1NmY0MVx1NmYxMVx1NzA0Y1x1NmVlY1x1NmVmOFx1NmVmZVx1NmYzZlx1NmVmMlx1NmYzMVx1NmVlZlx1NmYzMlx1NmVjYyJdLFsiZTA0MCIsIlx1NmYzZVx1NmYxM1x1NmVmN1x1NmY4''@;'; put 'put ''Nlx1NmY3YVx1NmY3OFx1NmY4MVx1NmY4MFx1NmY2Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZlY1x1NmZkNFx1NmZkOFx1''@;'; put 'put ''NmZmMVx1NmZlZVx1NmZkYlx1NzAwOVx1NzAwYlx1NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAzMFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1NzBhY1x1NzBiOFx1NzBi''@;'; put 'put ''M1x1NzBhZVx1NzBkZlx1NzBjYlx1NzBkZCJdLFsiZTA4MCIsIlx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFiOVx1''@;'; put 'put ''NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmY1x1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIyZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3''@;'; put 'put ''NFx1NzI3ZVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMxY1x1NzMxNlx1NzMxZFx1NzMzNFx1''@;'; put 'put ''NzMyZlx1NzMyOVx1NzMyNVx1NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNiM1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1NzQwNVx1NzQ2Zlx1NzQyNVx1NzNm''@;'; put 'put ''OFx1NzQzMlx1NzQzYVx1NzQ1NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMSJdLFsiZTE0MCIsIlx1NzRlMFx1NzRlM1x1NzRlN1x1NzRlOVx1''@;'; put 'put ''NzRlZVx1NzRmMlx1NzRmMFx1NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUyY1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1NzU2OVx1NzU2NFx1NzU2''@;'; put 'put ''N1x1NzU2Ylx1NzU2ZFx1NzU3OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVjYVx1NzVkMlx1NzVkOVx1''@;'; put 'put ''NzVlM1x1NzVkZVx1NzVmZVx1NzVmZiJdLFsiZTE4MCIsIlx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1''@;'; put 'put ''Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MFx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1NzZiOVx1NzZiYVx1''@;'; put 'put ''NzZjMlx1NzZjZFx1NzZkNlx1NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2''@;'; put 'put ''NVx1Nzc3Zlx1Nzc3ZVx1Nzc3OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1NzkyNlx1NzgyMFx1''@;'; put 'put ''NzkyYVx1Nzg0NVx1Nzg4ZVx1Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1NzhiZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlYyJdLFsiZTI0MCIsIlx1NzhlN1x1NzhkYVx1NzhmZFx1NzhmNFx1Nzkw''@;'; put 'put ''N1x1NzkxMlx1NzkxMVx1NzkxOVx1NzkyY1x1NzkyYlx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Zlx1Nzk1YVx1Nzk1NVx1Nzk1M1x1Nzk3YVx1Nzk3Zlx1Nzk4YVx1Nzk5ZFx1NzlhN1x1OWY0Ylx1NzlhYVx1NzlhZVx1NzliM1x1NzliOVx1NzliYVx1NzljOVx1NzlkNVx1NzllN1x1NzllY1x1''@;'; put 'put ''NzllMVx1NzllM1x1N2EwOFx1N2EwZFx1N2ExOFx1N2ExOVx1N2EyMFx1N2ExZlx1Nzk4MFx1N2EzMVx1N2EzYlx1N2EzZVx1N2EzN1x1N2E0M1x1N2E1N1x1N2E0OVx1N2E2MVx1N2E2Mlx1N2E2OVx1OWY5ZFx1N2E3MFx1N2E3OVx1N2E3ZFx1N2E4OFx1N2E5N1x1N2E5NVx1N2E5OFx1N2E5''@;'; put 'put ''Nlx1N2FhOVx1N2FjOFx1N2FiMCJdLFsiZTI4MCIsIlx1N2FiNlx1N2FjNVx1N2FjNFx1N2FiZlx1OTA4M1x1N2FjN1x1N2FjYVx1N2FjZFx1N2FjZlx1N2FkNVx1N2FkM1x1N2FkOVx1N2FkYVx1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNlx1N2FlZFx1N2FmMFx1N2IwMlx1N2IwZlx1N2IwYVx1''@;'; put 'put ''N2IwNlx1N2IzM1x1N2IxOFx1N2IxOVx1N2IxZVx1N2IzNVx1N2IyOFx1N2IzNlx1N2I1MFx1N2I3YVx1N2IwNFx1N2I0ZFx1N2IwYlx1N2I0Y1x1N2I0NVx1N2I3NVx1N2I2NVx1N2I3NFx1N2I2N1x1N2I3MFx1N2I3MVx1N2I2Y1x1N2I2ZVx1N2I5ZFx1N2I5OFx1N2I5Zlx1N2I4ZFx1N2I5''@;'; put 'put ''Y1x1N2I5YVx1N2I4Ylx1N2I5Mlx1N2I4Zlx1N2I1ZFx1N2I5OVx1N2JjYlx1N2JjMVx1N2JjY1x1N2JjZlx1N2JiNFx1N2JjNlx1N2JkZFx1N2JlOVx1N2MxMVx1N2MxNFx1N2JlNlx1N2JlNVx1N2M2MFx1N2MwMFx1N2MwN1x1N2MxM1x1N2JmM1x1N2JmN1x1N2MxN1x1N2MwZFx1N2JmNlx1''@;'; put 'put ''N2MyM1x1N2MyN1x1N2MyYVx1N2MxZlx1N2MzN1x1N2MyYlx1N2MzZFx1N2M0Y1x1N2M0M1x1N2M1NFx1N2M0Zlx1N2M0MFx1N2M1MFx1N2M1OFx1N2M1Zlx1N2M2NFx1N2M1Nlx1N2M2NVx1N2M2Y1x1N2M3NVx1N2M4M1x1N2M5MFx1N2NhNFx1N2NhZFx1N2NhMlx1N2NhYlx1N2NhMVx1N2Nh''@;'; put 'put ''OFx1N2NiM1x1N2NiMlx1N2NiMVx1N2NhZVx1N2NiOVx1N2NiZFx1N2NjMFx1N2NjNVx1N2NjMlx1N2NkOFx1N2NkMlx1N2NkY1x1N2NlMlx1OWIzYlx1N2NlZlx1N2NmMlx1N2NmNFx1N2NmNlx1N2NmYVx1N2QwNiJdLFsiZTM0MCIsIlx1N2QwMlx1N2QxY1x1N2QxNVx1N2QwYVx1N2Q0NVx1''@;'; put 'put ''N2Q0Ylx1N2QyZVx1N2QzMlx1N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1N2RiZFx1N2RhYlx1N2Uz''@;'; put 'put ''ZFx1N2RhMlx1N2RhZlx1N2RkY1x1N2RiOFx1N2Q5Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2Nlx1N2UzYlx1N2UzNVx1''@;'; put 'put ''N2UzOVx1N2U0M1x1N2UzNyJdLFsiZTM4MCIsIlx1N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1N2U5''@;'; put 'put ''MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5Ylx1N2U5Y1x1N2YzOFx1N2YzYVx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4Nlx1N2Y4M1x1N2Y4OFx1''@;'; put 'put ''N2Y4N1x1N2Y4Y1x1N2Y5NFx1N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2ZjYVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1ODAwNlx1ODAwNFx1ODAw''@;'; put 'put ''Ylx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5Ylx1''@;'; put 'put ''ODA5M1x1ODA5YVx1ODBhZFx1NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1ODBmMVx1ODExYlx1ODEyOVx1ODEyM1x1ODEyZlx1ODE0YiJdLFsiZTQ0MCIsIlx1OTY4Ylx1ODE0Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBm''@;'; put 'put ''Y1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1''@;'; put 'put ''ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIwZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1''@;'; put 'put ''YVx1ODI1Zlx1ODI2NCJdLFsiZTQ4MCIsIlx1ODI2Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5M1x1''@;'; put 'put ''ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1ODJkY1x1ODMwOVx1ODJkOVx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5Zlx1ODNhMlx1ODM5Nlx1ODMy''@;'; put 'put ''M1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1ODQyMlx1ODQyMFx1ODNiZFx1''@;'; put 'put ''ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRkOVx1ODRjZFx1ODRiYlx1ODRk''@;'; put 'put ''YVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OCJdLFsiZTU0MCIsIlx1ODU0MVx1ODYwMlx1ODU0Ylx1ODU1NVx1ODU4MFx1ODVhNFx1''@;'; put 'put ''ODU4OFx1ODU5MVx1ODU4YVx1ODVhOFx1ODU2ZFx1ODU5NFx1ODU5Ylx1ODVlYVx1ODU4N1x1ODU5Y1x1ODU3N1x1ODU3ZVx1ODU5MFx1ODVjOVx1ODViYVx1ODVjZlx1ODViOVx1ODVkMFx1ODVkNVx1ODVkZFx1ODVlNVx1ODVkY1x1ODVmOVx1ODYwYVx1ODYxM1x1ODYwYlx1ODVmZVx1ODVm''@;'; put 'put ''YVx1ODYwNlx1ODYyMlx1ODYxYVx1ODYzMFx1ODYzZlx1ODY0ZFx1NGU1NVx1ODY1NFx1ODY1Zlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZhM1x1ODZhOVx1ODZhYVx1ODY4Ylx1ODY4Y1x1ODZiNlx1ODZhZlx1ODZjNFx1ODZjNlx1ODZiMFx1ODZjOVx1ODgyM1x1ODZhYlx1ODZkNFx1ODZkZVx1''@;'; put 'put ''ODZlOVx1ODZlYyJdLFsiZTU4MCIsIlx1ODZkZlx1ODZkYlx1ODZlZlx1ODcxMlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZmYlx1ODcxMVx1ODcwOVx1ODcwZFx1ODZmOVx1ODcwYVx1ODczNFx1ODczZlx1ODczN1x1ODczYlx1ODcyNVx1ODcyOVx1ODcxYVx1ODc2MFx1ODc1Zlx1ODc3''@;'; put 'put ''OFx1ODc0Y1x1ODc0ZVx1ODc3NFx1ODc1N1x1ODc2OFx1ODc2ZVx1ODc1OVx1ODc1M1x1ODc2M1x1ODc2YVx1ODgwNVx1ODdhMlx1ODc5Zlx1ODc4Mlx1ODdhZlx1ODdjYlx1ODdiZFx1ODdjMFx1ODdkMFx1OTZkNlx1ODdhYlx1ODdjNFx1ODdiM1x1ODdjN1x1ODdjNlx1ODdiYlx1ODdlZlx1''@;'; put 'put ''ODdmMlx1ODdlMFx1ODgwZlx1ODgwZFx1ODdmZVx1ODdmNlx1ODdmN1x1ODgwZVx1ODdkMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgzOVx1ODgyN1x1ODgzYlx1ODg0NFx1ODg0Mlx1ODg1Mlx1ODg1OVx1ODg1ZVx1ODg2Mlx1ODg2Ylx1ODg4MVx1ODg3''@;'; put 'put ''ZVx1ODg5ZVx1ODg3NVx1ODg3ZFx1ODhiNVx1ODg3Mlx1ODg4Mlx1ODg5N1x1ODg5Mlx1ODhhZVx1ODg5OVx1ODhhMlx1ODg4ZFx1ODhhNFx1ODhiMFx1ODhiZlx1ODhiMVx1ODhjM1x1ODhjNFx1ODhkNFx1ODhkOFx1ODhkOVx1ODhkZFx1ODhmOVx1ODkwMlx1ODhmY1x1ODhmNFx1ODhlOFx1''@;'; put 'put ''ODhmMlx1ODkwNFx1ODkwY1x1ODkwYVx1ODkxM1x1ODk0M1x1ODkxZVx1ODkyNVx1ODkyYVx1ODkyYlx1ODk0MVx1ODk0NFx1ODkzYlx1ODkzNlx1ODkzOFx1ODk0Y1x1ODkxZFx1ODk2MFx1ODk1ZSJdLFsiZTY0MCIsIlx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1ODk2Zlx1ODk3NFx1ODk3''@;'; put 'put ''N1x1ODk3ZVx1ODk4M1x1ODk4OFx1ODk4YVx1ODk5M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGExMFx1OGEwY1x1OGExYlx1''@;'; put 'put ''OGExZFx1OGEyNVx1OGEzNlx1OGE0MVx1OGE1Ylx1OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFhMVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1OGFkYVx1OGFlYlx1OGFm''@;'; put 'put ''M1x1OGFlNyJdLFsiZTY4MCIsIlx1OGFlNFx1OGFmMVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0Y1x1''@;'; put 'put ''OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1OGI1YVx1OGI2Ylx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1OGM0ZVx1OGM1MFx1OGM1''@;'; put 'put ''NVx1OGM2Mlx1OGM2Y1x1OGM3OFx1OGM3YVx1OGM4Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNlM1x1OGNkYVx1OGNmZFx1''@;'; put 'put ''OGNmYVx1OGNmYlx1OGQwNFx1OGQwNVx1OGQwYVx1OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1OGRkNlx1OGRjY1x1OGRk''@;'; put 'put ''Ylx1OGRjYlx1OGRlYVx1OGRlYlx1OGRkZlx1OGRlM1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1OGUzNFx1OGU0YSJdLFsiZTc0MCIsIlx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0OFx1OGU1OVx1OGU2NFx1''@;'; put 'put ''OGU2MFx1OGUyYVx1OGU2M1x1OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1OGVjOFx1OGVjYlx1OGVk''@;'; put 'put ''Ylx1OGVlM1x1OGVmY1x1OGVmYlx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1''@;'; put 'put ''OGY1YyJdLFsiZTc4MCIsIlx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1OTAx''@;'; put 'put ''Nlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAzOVx1OGZmOFx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4MFx1OTA4YVx1OTA4OVx1''@;'; put 'put ''OTA4Zlx1OTBhOFx1OTBhZlx1OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1OTFhMlx1OTFhYlx1OTFh''@;'; put 'put ''Zlx1OTFhYVx1OTFiNVx1OTFiNFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1''@;'; put 'put ''OTI0OFx1OTI5NVx1OTIzZlx1OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0NFx1OTMyZSJdLFsiZTg0MCIsIlx1OTMxOVx1OTMyMlx1OTMxYVx1OTMyM1x1OTMzYVx1OTMzNVx1OTMzYlx1OTM1''@;'; put 'put ''Y1x1OTM2MFx1OTM3Y1x1OTM2ZVx1OTM1Nlx1OTNiMFx1OTNhY1x1OTNhZFx1OTM5NFx1OTNiOVx1OTNkNlx1OTNkN1x1OTNlOFx1OTNlNVx1OTNkOFx1OTNjM1x1OTNkZFx1OTNkMFx1OTNjOFx1OTNlNFx1OTQxYVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQwN1x1OTQxMFx1OTQzNlx1OTQyYlx1''@;'; put 'put ''OTQzNVx1OTQyMVx1OTQzYVx1OTQ0MVx1OTQ1Mlx1OTQ0NFx1OTQ1Ylx1OTQ2MFx1OTQ2Mlx1OTQ1ZVx1OTQ2YVx1OTIyOVx1OTQ3MFx1OTQ3NVx1OTQ3N1x1OTQ3ZFx1OTQ1YVx1OTQ3Y1x1OTQ3ZVx1OTQ4MVx1OTQ3Zlx1OTU4Mlx1OTU4N1x1OTU4YVx1OTU5NFx1OTU5Nlx1OTU5OFx1OTU5''@;'; put 'put ''OSJdLFsiZTg4MCIsIlx1OTVhMFx1OTVhOFx1OTVhN1x1OTVhZFx1OTViY1x1OTViYlx1OTViOVx1OTViZVx1OTVjYVx1NmZmNlx1OTVjM1x1OTVjZFx1OTVjY1x1OTVkNVx1OTVkNFx1OTVkNlx1OTVkY1x1OTVlMVx1OTVlNVx1OTVlMlx1OTYyMVx1OTYyOFx1OTYyZVx1OTYyZlx1OTY0Mlx1''@;'; put 'put ''OTY0Y1x1OTY0Zlx1OTY0Ylx1OTY3N1x1OTY1Y1x1OTY1ZVx1OTY1ZFx1OTY1Zlx1OTY2Nlx1OTY3Mlx1OTY2Y1x1OTY4ZFx1OTY5OFx1OTY5NVx1OTY5N1x1OTZhYVx1OTZhN1x1OTZiMVx1OTZiMlx1OTZiMFx1OTZiNFx1OTZiNlx1OTZiOFx1OTZiOVx1OTZjZVx1OTZjYlx1OTZjOVx1OTZj''@;'; put 'put ''ZFx1ODk0ZFx1OTZkY1x1OTcwZFx1OTZkNVx1OTZmOVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwZVx1OTcxMVx1OTcwZlx1OTcxNlx1OTcxOVx1OTcyNFx1OTcyYVx1OTczMFx1OTczOVx1OTczZFx1OTczZVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0Mlx1OTc0OVx1OTc1Y1x1OTc2MFx1''@;'; put 'put ''OTc2NFx1OTc2Nlx1OTc2OFx1NTJkMlx1OTc2Ylx1OTc3MVx1OTc3OVx1OTc4NVx1OTc3Y1x1OTc4MVx1OTc3YVx1OTc4Nlx1OTc4Ylx1OTc4Zlx1OTc5MFx1OTc5Y1x1OTdhOFx1OTdhNlx1OTdhM1x1OTdiM1x1OTdiNFx1OTdjM1x1OTdjNlx1OTdjOFx1OTdjYlx1OTdkY1x1OTdlZFx1OWY0''@;'; put 'put ''Zlx1OTdmMlx1N2FkZlx1OTdmNlx1OTdmNVx1OTgwZlx1OTgwY1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1OTgzZFx1OTg0Nlx1OTg0Zlx1OTg0Ylx1OTg2Ylx1OTg2Zlx1OTg3MCJdLFsiZTk0MCIsIlx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThhZlx1OThiMVx1OThiNlx1OThjNFx1''@;'; put 'put ''OThjM1x1OThjNlx1OThlOVx1OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkzZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1OTk1Mlx1OTk0Y1x1OTk1NVx1OTk5''@;'; put 'put ''N1x1OTk5OFx1OTlhNVx1OTlhZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0NVx1OWE0Mlx1OWE0MFx1OWE0MyJd''@;'; put 'put ''LFsiZTk4MCIsIlx1OWEzZVx1OWE1NVx1OWE0ZFx1OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFjZlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFlM1x1OWFlNlx1OWFl''@;'; put 'put ''Zlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFmN1x1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0ZVx1OWI1MVx1OWI1OFx1''@;'; put 'put ''OWI3NFx1OWI5M1x1OWI4M1x1OWI5MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJkMlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1OWJmMFx1OWMxNVx1OWMx''@;'; put 'put ''NFx1OWMwOVx1OWMxM1x1OWMwY1x1OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNlY1x1OWNmMFx1OWQwOVx1''@;'; put 'put ''OWQwOFx1OWNlYlx1OWQwM1x1OWQwNlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0OCJdLFsiZWE0MCIsIlx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4''@;'; put 'put ''N1x1OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1''@;'; put 'put ''OWU3ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZiJdLFsi''@;'; put 'put ''ZWE4MCIsIlx1OWVmNFx1OWVmNlx1OWVmN1x1OWVmOVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1''@;'; put 'put ''OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMFx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OSJdLFsiZWQ0MCIsIlx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVm''@;'; put 'put ''Y1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1''@;'; put 'put ''NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZiJdLFsiZWQ4MCIsIlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1''@;'; put 'put ''M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1''@;'; put 'put ''NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1''@;'; put 'put ''OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1''@;'; put 'put ''NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4''@;'; put 'put ''NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMSJdLFsiZWU0MCIsIlx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1''@;'; put 'put ''NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2Fl''@;'; put 'put ''Ylx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OSJdLFsiZWU4MCIsIlx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1''@;'; put 'put ''ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFk''@;'; put 'put ''ZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1''@;'; put 'put ''OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1''@;'; put 'put ''NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMSJdLFsiZWVlZiIsIlx1MjE3MCIsOSwiXHVmZmUyXHVmZmU0XHVm''@;'; put 'put ''ZjA3XHVmZjAyIl0sWyJmMDQwIiwiXHVlMDAwIiw2Ml0sWyJmMDgwIiwiXHVlMDNmIiwxMjRdLFsiZjE0MCIsIlx1ZTBiYyIsNjJdLFsiZjE4MCIsIlx1ZTBmYiIsMTI0XSxbImYyNDAiLCJcdWUxNzgiLDYyXSxbImYyODAiLCJcdWUxYjciLDEyNF0sWyJmMzQwIiwiXHVlMjM0Iiw2Ml0sWyJm''@;'; put 'put ''MzgwIiwiXHVlMjczIiwxMjRdLFsiZjQ0MCIsIlx1ZTJmMCIsNjJdLFsiZjQ4MCIsIlx1ZTMyZiIsMTI0XSxbImY1NDAiLCJcdWUzYWMiLDYyXSxbImY1ODAiLCJcdWUzZWIiLDEyNF0sWyJmNjQwIiwiXHVlNDY4Iiw2Ml0sWyJmNjgwIiwiXHVlNGE3IiwxMjRdLFsiZjc0MCIsIlx1ZTUyNCIs''@;'; put 'put ''NjJdLFsiZjc4MCIsIlx1ZTU2MyIsMTI0XSxbImY4NDAiLCJcdWU1ZTAiLDYyXSxbImY4ODAiLCJcdWU2MWYiLDEyNF0sWyJmOTQwIiwiXHVlNjljIl0sWyJmYTQwIiwiXHUyMTcwIiw5LCJcdTIxNjAiLDksIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MjIz''@;'; put 'put ''NVx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1''@;'; put 'put ''NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YSJdLFsiZmE4MCIsIlx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5''@;'; put 'put ''Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1''@;'; put 'put ''NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJh''@;'; put 'put ''Nlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1''@;'; put 'put ''NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2ZiJdLFsiZmI0MCIsIlx1NmQ5''@;'; put 'put ''Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMVx1''@;'; put 'put ''NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJh''@;'; put 'put ''Zlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOSJdLFsiZmI4MCIsIlx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1''@;'; put 'put ''ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNm''@;'; put 'put ''MFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1''@;'; put 'put ''OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNm''@;'; put 'put ''OFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOSJdLFsiZmM0MCIsIlx1OWFkY1x1''@;'; put 'put ''OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMSJdXScpfSwxNTU3OTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMi4xNi44NDAuMS4xMDEuMy40LjEuMSI6ImFlcy0xMjgtZWNiIiwiMi4xNi44''@;'; put 'put ''NDAuMS4xMDEuMy40LjEuMiI6ImFlcy0xMjgtY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMyI6ImFlcy0xMjgtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNCI6ImFlcy0xMjgtY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjEiOiJhZXMtMTkyLWVjYiIsIjIuMTYuODQwLjEuMTAx''@;'; put 'put ''LjMuNC4xLjIyIjoiYWVzLTE5Mi1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMyI6ImFlcy0xOTItb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjQiOiJhZXMtMTkyLWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQxIjoiYWVzLTI1Ni1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQu''@;'; put 'put ''MS40MiI6ImFlcy0yNTYtY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDMiOiJhZXMtMjU2LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0IjoiYWVzLTI1Ni1jZmIifScpfX0sdWU9Pnt1ZSh1ZS5zPTM2MDk1KX1dKTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=polyfills.df27a246540ea5ee-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s0NjFdLHsyNDA1MDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoMTg4ODMpLHQoNTQ5NDApLHQoMzkyNzEpLHQoNTI0NDQpLHQoMjYyMDMpLHQoMTU2MjYp''@;'; put 'put ''LHQoODgwMjUpLHQoNTY0NDIpLHQoMzI4OTkpLHQoNjYzNzQpLHQoNDI0NiksdCgyMjkxMyksdCgxMDc0MyksdCg2NTg0NiksdCg5MzUzKSx0KDk2OTM1KSx0KDkyNTY4KTt2YXIgZHQ9dCg4MzgzOCk7d2luZG93Lmdsb2JhbD13aW5kb3csd2luZG93Lmdsb2JhbC5CdWZmZXI9d2luZG93Lmds''@;'; put 'put ''b2JhbC5CdWZmZXJ8fGR0LkJ1ZmZlcix3aW5kb3cucHJvY2Vzcz17dmVyc2lvbjoiIn19LDEzOTgxOihjLGwpPT57InVzZSBzdHJpY3QiO2wuYnl0ZUxlbmd0aD1mdW5jdGlvbiBpKGcpe3ZhciBEPWYoZykseD1EWzFdO3JldHVybiAzKihEWzBdK3gpLzQteH0sbC50b0J5dGVBcnJheT1mdW5j''@;'; put 'put ''dGlvbiBwKGcpe3ZhciBELFQsRj1mKGcpLHg9RlswXSx3PUZbMV0sQz1uZXcgZShmdW5jdGlvbiB2KGcsRCxGKXtyZXR1cm4gMyooRCtGKS80LUZ9KDAseCx3KSksST0wLE09dz4wP3gtNDp4O2ZvcihUPTA7VDxNO1QrPTQpRD1uW2cuY2hhckNvZGVBdChUKV08PDE4fG5bZy5jaGFyQ29kZUF0''@;'; put 'put ''KFQrMSldPDwxMnxuW2cuY2hhckNvZGVBdChUKzIpXTw8NnxuW2cuY2hhckNvZGVBdChUKzMpXSxDW0krK109RD4+MTYmMjU1LENbSSsrXT1EPj44JjI1NSxDW0krK109MjU1JkQ7cmV0dXJuIDI9PT13JiYoRD1uW2cuY2hhckNvZGVBdChUKV08PDJ8bltnLmNoYXJDb2RlQXQoVCsxKV0+PjQs''@;'; put 'put ''Q1tJKytdPTI1NSZEKSwxPT09dyYmKEQ9bltnLmNoYXJDb2RlQXQoVCldPDwxMHxuW2cuY2hhckNvZGVBdChUKzEpXTw8NHxuW2cuY2hhckNvZGVBdChUKzIpXT4+MixDW0krK109RD4+OCYyNTUsQ1tJKytdPTI1NSZEKSxDfSxsLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gRShnKXtmb3IodmFy''@;'; put 'put ''IEQsRj1nLmxlbmd0aCx4PUYlMyx3PVtdLEM9MTYzODMsST0wLE09Ri14O0k8TTtJKz1DKXcucHVzaChtKGcsSSxJK0M+TT9NOkkrQykpO3JldHVybiAxPT09eD93LnB1c2godFsoRD1nW0YtMV0pPj4yXSt0W0Q8PDQmNjNdKyI9PSIpOjI9PT14JiZ3LnB1c2godFsoRD0oZ1tGLTJdPDw4KStn''@;'; put 'put ''W0YtMV0pPj4xMF0rdFtEPj40JjYzXSt0W0Q8PDImNjNdKyI9Iiksdy5qb2luKCIiKX07Zm9yKHZhciB0PVtdLG49W10sZT10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxzPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6''@;'; put 'put ''MDEyMzQ1Njc4OSsvIixhPTA7YTw2NDsrK2EpdFthXT1zW2FdLG5bcy5jaGFyQ29kZUF0KGEpXT1hO2Z1bmN0aW9uIGYoZyl7dmFyIEQ9Zy5sZW5ndGg7aWYoRCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFy''@;'; put 'put ''IEY9Zy5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1GJiYoRj1EKSxbRixGPT09RD8wOjQtRiU0XX1mdW5jdGlvbiBkKGcpe3JldHVybiB0W2c+PjE4JjYzXSt0W2c+PjEyJjYzXSt0W2c+PjYmNjNdK3RbNjMmZ119ZnVuY3Rpb24gbShnLEQsRil7Zm9yKHZhciB3PVtdLEM9RDtDPEY7Qys9Myl3''@;'; put 'put ''LnB1c2goZCgoZ1tDXTw8MTYmMTY3MTE2ODApKyhnW0MrMV08PDgmNjUyODApKygyNTUmZ1tDKzJdKSkpO3JldHVybiB3LmpvaW4oIiIpfW5bNDVdPTYyLG5bOTVdPTYzfSw4MzgzODooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMTM5ODEpLGU9dCgyMjAyMCkscz0iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7bC5CdWZmZXI9aSxsLlNsb3dCdWZmZXI9ZnVuY3Rpb24gQyhoKXtyZXR1cm4raCE9aCYmKGg9MCksaS5hbGxvYygraCl9LGwu''@;'; put 'put ''SU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIGE9MjE0NzQ4MzY0NztmdW5jdGlvbiBmKGgpe2lmKGg+YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2grJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciByPW5ldyBVaW50OEFycmF5KGgpO3JldHVybiBPYmpl''@;'; put 'put ''Y3Quc2V0UHJvdG90eXBlT2YocixpLnByb3RvdHlwZSkscn1mdW5jdGlvbiBpKGgscixvKXtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4g''@;'; put 'put ''UmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gbShoKX1yZXR1cm4gdihoLHIsbyl9ZnVuY3Rpb24gdihoLHIsbyl7aWYoInN0cmluZyI9PXR5cGVvZiBoKXJldHVybiBmdW5jdGlvbiBFKGgscil7aWYoKCJzdHJpbmciIT10eXBlb2Ygcnx8IiI9PT1yKSYmKHI9InV0ZjgiKSwhaS5pc0Vu''@;'; put 'put ''Y29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7dmFyIG89MHxJKGgscikseT1mKG8pLFA9eS53cml0ZShoLHIpO3JldHVybiBQIT09byYmKHk9eS5zbGljZSgwLFApKSx5fShoLHIpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhoKSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gRChoKXtpZihfdChoLFVpbnQ4QXJyYXkpKXt2YXIgcj1uZXcgVWludDhBcnJheShoKTtyZXR1cm4gRihyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKX1yZXR1cm4gZyhoKX0oaCk7aWYobnVsbD09aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1l''@;'; put 'put ''bnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBoKTtpZihfdChoLEFycmF5QnVmZmVyKXx8aCYmX3QoaC5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2Yg''@;'; put 'put ''U2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoX3QoaCxTaGFyZWRBcnJheUJ1ZmZlcil8fGgmJl90KGguYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIEYoaCxyLG8pO2lmKCJudW1iZXIiPT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBt''@;'; put 'put ''dXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgeT1oLnZhbHVlT2YmJmgudmFsdWVPZigpO2lmKG51bGwhPXkmJnkhPT1oKXJldHVybiBpLmZyb20oeSxyLG8pO3ZhciBQPWZ1bmN0aW9uIHgoaCl7aWYoaS5pc0J1ZmZlcihoKSl7dmFyIHI9MHx3''@;'; put 'put ''KGgubGVuZ3RoKSxvPWYocik7cmV0dXJuIDA9PT1vLmxlbmd0aHx8aC5jb3B5KG8sMCwwLHIpLG99cmV0dXJuIHZvaWQgMCE9PWgubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgaC5sZW5ndGh8fG1uKGgubGVuZ3RoKT9mKDApOmcoaCk6IkJ1ZmZlciI9PT1oLnR5cGUmJkFycmF5LmlzQXJyYXko''@;'; put 'put ''aC5kYXRhKT9nKGguZGF0YSk6dm9pZCAwfShoKTtpZihQKXJldHVybiBQO2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBoW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGkuZnJvbShoW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV0oInN0cmluZyIpLHIsbyk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgaCl9ZnVu''@;'; put 'put ''Y3Rpb24gcChoKXtpZigibnVtYmVyIiE9dHlwZW9mIGgpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihoPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytoKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAi''@;'; put 'put ''c2l6ZSInKX1mdW5jdGlvbiBtKGgpe3JldHVybiBwKGgpLGYoaDwwPzA6MHx3KGgpKX1mdW5jdGlvbiBnKGgpe2Zvcih2YXIgcj1oLmxlbmd0aDwwPzA6MHx3KGgubGVuZ3RoKSxvPWYocikseT0wO3k8cjt5Kz0xKW9beV09MjU1JmhbeV07cmV0dXJuIG99ZnVuY3Rpb24gRihoLHIsbyl7aWYo''@;'; put 'put ''cjwwfHxoLmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoaC5ieXRlTGVuZ3RoPHIrKG98fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMn''@;'; put 'put ''KTt2YXIgeTtyZXR1cm4geT12b2lkIDA9PT1yJiZ2b2lkIDA9PT1vP25ldyBVaW50OEFycmF5KGgpOnZvaWQgMD09PW8/bmV3IFVpbnQ4QXJyYXkoaCxyKTpuZXcgVWludDhBcnJheShoLHIsbyksT2JqZWN0LnNldFByb3RvdHlwZU9mKHksaS5wcm90b3R5cGUpLHl9ZnVuY3Rpb24gdyhoKXtp''@;'; put 'put ''ZihoPj1hKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IithLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8aH1mdW5jdGlvbiBJKGgscil7aWYoaS5pc0J1ZmZlcihoKSlyZXR1cm4gaC5s''@;'; put 'put ''ZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGgpfHxfdChoLEFycmF5QnVmZmVyKSlyZXR1cm4gaC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1''@;'; put 'put ''ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgaCk7dmFyIG89aC5sZW5ndGgseT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCF5JiYwPT09bylyZXR1cm4gMDtmb3IodmFyIFA9ITE7Oylzd2l0Y2gocil7Y2FzZSJhc2NpaSI6Y2Fz''@;'; put 'put ''ZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbztjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBybihoKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKm87Y2FzZSJoZXgiOnJldHVybiBvPj4+MTtjYXNl''@;'; put 'put ''ImJhc2U2NCI6cmV0dXJuIGRuKGgpLmxlbmd0aDtkZWZhdWx0OmlmKFApcmV0dXJuIHk/LTE6cm4oaCkubGVuZ3RoO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksUD0hMH19ZnVuY3Rpb24gTShoLHIsbyl7dmFyIHk9ITE7aWYoKHZvaWQgMD09PXJ8fHI8MCkmJihyPTApLHI+dGhpcy5sZW5ndGh8''@;'; put 'put ''fCgodm9pZCAwPT09b3x8bz50aGlzLmxlbmd0aCkmJihvPXRoaXMubGVuZ3RoKSxvPD0wKXx8KG8+Pj49MCk8PShyPj4+PTApKXJldHVybiIiO2ZvcihofHwoaD0idXRmOCIpOzspc3dpdGNoKGgpe2Nhc2UiaGV4IjpyZXR1cm4gZHQodGhpcyxyLG8pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6''@;'; put 'put ''cmV0dXJuIHEodGhpcyxyLG8pO2Nhc2UiYXNjaWkiOnJldHVybiBWKHRoaXMscixvKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBmdCh0aGlzLHIsbyk7Y2FzZSJiYXNlNjQiOnJldHVybiBtdCh0aGlzLHIsbyk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUi''@;'; put 'put ''OmNhc2UidXRmLTE2bGUiOnJldHVybiBidCh0aGlzLHIsbyk7ZGVmYXVsdDppZih5KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIraCk7aD0oaCsiIikudG9Mb3dlckNhc2UoKSx5PSEwfX1mdW5jdGlvbiBUKGgscixvKXt2YXIgeT1oW3JdO2hbcl09aFtvXSxoW29d''@;'; put 'put ''PXl9ZnVuY3Rpb24gYihoLHIsbyx5LFApe2lmKDA9PT1oLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG8/KHk9byxvPTApOm8+MjE0NzQ4MzY0Nz9vPTIxNDc0ODM2NDc6bzwtMjE0NzQ4MzY0OCYmKG89LTIxNDc0ODM2NDgpLG1uKG89K28pJiYobz1QPzA6aC5sZW5ndGgt''@;'; put 'put ''MSksbzwwJiYobz1oLmxlbmd0aCtvKSxvPj1oLmxlbmd0aCl7aWYoUClyZXR1cm4tMTtvPWgubGVuZ3RoLTF9ZWxzZSBpZihvPDApe2lmKCFQKXJldHVybi0xO289MH1pZigic3RyaW5nIj09dHlwZW9mIHImJihyPWkuZnJvbShyLHkpKSxpLmlzQnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5n''@;'; put 'put ''dGg/LTE6TChoLHIsbyx5LFApO2lmKCJudW1iZXIiPT10eXBlb2YgcilyZXR1cm4gciY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP1A/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGgscixvKTpVaW50OEFycmF5LnByb3RvdHlw''@;'; put 'put ''ZS5sYXN0SW5kZXhPZi5jYWxsKGgscixvKTpMKGgsW3JdLG8seSxQKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBMKGgscixvLHksUCl7dmFyIEgsSz0xLCQ9aC5sZW5ndGgsanQ9ci5sZW5ndGg7aWYodm9pZCAw''@;'; put 'put ''IT09eSYmKCJ1Y3MyIj09PSh5PVN0cmluZyh5KS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXl8fCJ1dGYxNmxlIj09PXl8fCJ1dGYtMTZsZSI9PT15KSl7aWYoaC5sZW5ndGg8Mnx8ci5sZW5ndGg8MilyZXR1cm4tMTtLPTIsJC89MixqdC89MixvLz0yfWZ1bmN0aW9uIF8oUXQsYW4pe3Jl''@;'; put 'put ''dHVybiAxPT09Sz9RdFthbl06UXQucmVhZFVJbnQxNkJFKGFuKkspfWlmKFApe3ZhciBRPS0xO2ZvcihIPW87SDwkO0grKylpZihfKGgsSCk9PT1fKHIsLTE9PT1RPzA6SC1RKSl7aWYoLTE9PT1RJiYoUT1IKSxILVErMT09PWp0KXJldHVybiBRKkt9ZWxzZS0xIT09USYmKEgtPUgtUSksUT0t''@;'; put 'put ''MX1lbHNlIGZvcihvK2p0PiQmJihvPSQtanQpLEg9bztIPj0wO0gtLSl7Zm9yKHZhciBpdD0hMCx6dD0wO3p0PGp0O3p0KyspaWYoXyhoLEgrenQpIT09XyhyLHp0KSl7aXQ9ITE7YnJlYWt9aWYoaXQpcmV0dXJuIEh9cmV0dXJuLTF9ZnVuY3Rpb24gVShoLHIsbyx5KXtvPU51bWJlcihvKXx8''@;'; put 'put ''MDt2YXIgUD1oLmxlbmd0aC1vO3k/KHk9TnVtYmVyKHkpKT5QJiYoeT1QKTp5PVA7dmFyIEs9ci5sZW5ndGg7eT5LLzImJih5PUsvMik7Zm9yKHZhciAkPTA7JDx5OysrJCl7dmFyIGp0PXBhcnNlSW50KHIuc3Vic3RyKDIqJCwyKSwxNik7aWYobW4oanQpKXJldHVybiAkO2hbbyskXT1qdH1y''@;'; put 'put ''ZXR1cm4gJH1mdW5jdGlvbiBaKGgscixvLHkpe3JldHVybiBzbihybihyLGgubGVuZ3RoLW8pLGgsbyx5KX1mdW5jdGlvbiBudChoLHIsbyx5KXtyZXR1cm4gc24oZnVuY3Rpb24geG4oaCl7Zm9yKHZhciByPVtdLG89MDtvPGgubGVuZ3RoOysrbylyLnB1c2goMjU1JmguY2hhckNvZGVBdChv''@;'; put 'put ''KSk7cmV0dXJuIHJ9KHIpLGgsbyx5KX1mdW5jdGlvbiB0dChoLHIsbyx5KXtyZXR1cm4gc24oZG4ociksaCxvLHkpfWZ1bmN0aW9uIHl0KGgscixvLHkpe3JldHVybiBzbihmdW5jdGlvbiBxdChoLHIpe2Zvcih2YXIgbyx5LEs9W10sJD0wOyQ8aC5sZW5ndGgmJiEoKHItPTIpPDApOysrJCl5''@;'; put 'put ''PShvPWguY2hhckNvZGVBdCgkKSk+PjgsSy5wdXNoKG8lMjU2KSxLLnB1c2goeSk7cmV0dXJuIEt9KHIsaC5sZW5ndGgtbyksaCxvLHkpfWZ1bmN0aW9uIG10KGgscixvKXtyZXR1cm4gbi5mcm9tQnl0ZUFycmF5KDA9PT1yJiZvPT09aC5sZW5ndGg/aDpoLnNsaWNlKHIsbykpfWZ1bmN0aW9u''@;'; put 'put ''IHEoaCxyLG8pe289TWF0aC5taW4oaC5sZW5ndGgsbyk7Zm9yKHZhciB5PVtdLFA9cjtQPG87KXt2YXIgXyxILFEsaXQsSz1oW1BdLCQ9bnVsbCxqdD1LPjIzOT80Oks+MjIzPzM6Sz4xOTE/MjoxO2lmKFAranQ8PW8pc3dpdGNoKGp0KXtjYXNlIDE6SzwxMjgmJigkPUspO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MjoxMjg9PSgxOTImKF89aFtQKzFdKSkmJihpdD0oMzEmSyk8PDZ8NjMmXyk+MTI3JiYoJD1pdCk7YnJlYWs7Y2FzZSAzOkg9aFtQKzJdLDEyOD09KDE5MiYoXz1oW1ArMV0pKSYmMTI4PT0oMTkyJkgpJiYoaXQ9KDE1JkspPDwxMnwoNjMmXyk8PDZ8NjMmSCk+MjA0NyYmKGl0PDU1Mjk2fHxp''@;'; put 'put ''dD41NzM0MykmJigkPWl0KTticmVhaztjYXNlIDQ6SD1oW1ArMl0sUT1oW1ArM10sMTI4PT0oMTkyJihfPWhbUCsxXSkpJiYxMjg9PSgxOTImSCkmJjEyOD09KDE5MiZRKSYmKGl0PSgxNSZLKTw8MTh8KDYzJl8pPDwxMnwoNjMmSCk8PDZ8NjMmUSk+NjU1MzUmJml0PDExMTQxMTImJigkPWl0''@;'; put 'put ''KX1udWxsPT09JD8oJD02NTUzMyxqdD0xKTokPjY1NTM1JiYoeS5wdXNoKCgkLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSwkPTU2MzIwfDEwMjMmJCkseS5wdXNoKCQpLFArPWp0fXJldHVybiBmdW5jdGlvbiBldChoKXt2YXIgcj1oLmxlbmd0aDtpZihyPD1YKXJldHVybiBTdHJpbmcuZnJv''@;'; put 'put ''bUNoYXJDb2RlLmFwcGx5KFN0cmluZyxoKTtmb3IodmFyIG89IiIseT0wO3k8cjspbys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsaC5zbGljZSh5LHkrPVgpKTtyZXR1cm4gb30oeSl9bC5rTWF4TGVuZ3RoPWEsIShpLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gdSgp''@;'; put 'put ''e3RyeXt2YXIgaD1uZXcgVWludDhBcnJheSgxKSxyPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihoLHIpLDQyPT09aC5mb28oKX1jYXRjaHtyZXR1cm4h''@;'; put 'put ''MX19KCkpJiZ0eXBlb2YgY29uc29sZTwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4g''@;'; put 'put ''VXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoaS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZm''@;'; put 'put ''ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGkuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxpLnBvb2xTaXplPTgxOTIsaS5mcm9tPWZ1bmN0aW9uKGgscixvKXty''@;'; put 'put ''ZXR1cm4gdihoLHIsbyl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihpLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGksVWludDhBcnJheSksaS5hbGxvYz1mdW5jdGlvbihoLHIsbyl7cmV0dXJuIGZ1bmN0aW9uIGQoaCxyLG8pe3JldHVybiBw''@;'; put 'put ''KGgpLGg8PTA/ZihoKTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbz9mKGgpLmZpbGwocixvKTpmKGgpLmZpbGwocik6ZihoKX0oaCxyLG8pfSxpLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGgpe3JldHVybiBtKGgpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihoKXtyZXR1cm4gbSho''@;'; put 'put ''KX0saS5pc0J1ZmZlcj1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9ciYmITA9PT1yLl9pc0J1ZmZlciYmciE9PWkucHJvdG90eXBlfSxpLmNvbXBhcmU9ZnVuY3Rpb24ocixvKXtpZihfdChyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSxfdChvLFVp''@;'; put 'put ''bnQ4QXJyYXkpJiYobz1pLmZyb20obyxvLm9mZnNldCxvLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKXx8IWkuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFy''@;'; put 'put ''cmF5Jyk7aWYocj09PW8pcmV0dXJuIDA7Zm9yKHZhciB5PXIubGVuZ3RoLFA9by5sZW5ndGgsSz0wLCQ9TWF0aC5taW4oeSxQKTtLPCQ7KytLKWlmKHJbS10hPT1vW0tdKXt5PXJbS10sUD1vW0tdO2JyZWFrfXJldHVybiB5PFA/LTE6UDx5PzE6MH0saS5pc0VuY29kaW5nPWZ1bmN0aW9uKHIp''@;'; put 'put ''e3N3aXRjaChTdHJpbmcocikudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2''@;'; put 'put ''bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxpLmNvbmNhdD1mdW5jdGlvbihyLG8pe2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ci5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IGkuYWxsb2MoMCk7dmFyIHk7aWYodm9pZCAwPT09bylmb3Iobz0wLHk9MDt5PHIubGVuZ3RoOysreSlvKz1yW3ldLmxlbmd0aDt2YXIgUD1pLmFsbG9jVW5zYWZlKG8pLEs9MDtmb3IoeT0wO3k8ci5sZW5ndGg7Kyt5KXt2YXIgJD1yW3ldO2lmKF90KCQsVWludDhBcnJheSkpSyskLmxlbmd0''@;'; put 'put ''aD5QLmxlbmd0aD9pLmZyb20oJCkuY29weShQLEspOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFAsJCxLKTtlbHNle2lmKCFpLmlzQnVmZmVyKCQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTskLmNvcHko''@;'; put 'put ''UCxLKX1LKz0kLmxlbmd0aH1yZXR1cm4gUH0saS5ieXRlTGVuZ3RoPUksaS5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGkucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBi''@;'; put 'put ''ZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIG89MDtvPHI7bys9MilUKHRoaXMsbyxvKzEpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmxlbmd0aDtpZihyJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXpl''@;'; put 'put ''IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBvPTA7bzxyO28rPTQpVCh0aGlzLG8sbyszKSxUKHRoaXMsbysxLG8rMik7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlOCE9MCl0aHJvdyBuZXcg''@;'; put 'put ''UmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIG89MDtvPHI7bys9OClUKHRoaXMsbyxvKzcpLFQodGhpcyxvKzEsbys2KSxUKHRoaXMsbysyLG8rNSksVCh0aGlzLG8rMyxvKzQpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS50''@;'; put 'put ''b0xvY2FsZVN0cmluZz1pLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiAwPT09cj8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9xKHRoaXMsMCxyKTpNLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9u''@;'; put 'put ''KHIpe2lmKCFpLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXJ8fDA9PT1pLmNvbXBhcmUodGhpcyxyKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciByPSIiLG89bC5JTlNQRUNUX01B''@;'; put 'put ''WF9CWVRFUztyZXR1cm4gcj10aGlzLnRvU3RyaW5nKCJoZXgiLDAsbykucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5vJiYocis9IiAuLi4gIiksIjxCdWZmZXIgIityKyI+In0scyYmKGkucHJvdG90eXBlW3NdPWkucHJvdG90eXBlLmluc3BlY3QpLGkucHJv''@;'; put 'put ''dG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24ocixvLHksUCxLKXtpZihfdChyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2Yg''@;'; put 'put ''dHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiByKTtpZih2b2lkIDA9PT1vJiYobz0wKSx2b2lkIDA9PT15JiYoeT1yP3IubGVuZ3RoOjApLHZvaWQgMD09PVAmJihQPTApLHZvaWQgMD09PUsmJihLPXRoaXMubGVuZ3RoKSxvPDB8fHk+ci5sZW5ndGh8''@;'; put 'put ''fFA8MHx8Sz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoUD49SyYmbz49eSlyZXR1cm4gMDtpZihQPj1LKXJldHVybi0xO2lmKG8+PXkpcmV0dXJuIDE7aWYodGhpcz09PXIpcmV0dXJuIDA7Zm9yKHZhciAkPShLPj4+PTApLShQPj4+''@;'; put 'put ''PTApLGp0PSh5Pj4+PTApLShvPj4+PTApLF89TWF0aC5taW4oJCxqdCksSD10aGlzLnNsaWNlKFAsSyksUT1yLnNsaWNlKG8seSksaXQ9MDtpdDxfOysraXQpaWYoSFtpdF0hPT1RW2l0XSl7JD1IW2l0XSxqdD1RW2l0XTticmVha31yZXR1cm4gJDxqdD8tMTpqdDwkPzE6MH0saS5wcm90b3R5''@;'; put 'put ''cGUuaW5jbHVkZXM9ZnVuY3Rpb24ocixvLHkpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHIsbyx5KX0saS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihyLG8seSl7cmV0dXJuIGIodGhpcyxyLG8seSwhMCl9LGkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHIsbyx5KXtyZXR1''@;'; put 'put ''cm4gYih0aGlzLHIsbyx5LCExKX0saS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocixvLHksUCl7aWYodm9pZCAwPT09bylQPSJ1dGY4Iix5PXRoaXMubGVuZ3RoLG89MDtlbHNlIGlmKHZvaWQgMD09PXkmJiJzdHJpbmciPT10eXBlb2YgbylQPW8seT10aGlzLmxlbmd0aCxvPTA7ZWxzZXtp''@;'; put 'put ''ZighaXNGaW5pdGUobykpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO28+Pj49MCxpc0Zpbml0ZSh5KT8oeT4+Pj0wLHZvaWQgMD09PVAmJihQPSJ1dGY4IikpOihQPXkseT12''@;'; put 'put ''b2lkIDApfXZhciBLPXRoaXMubGVuZ3RoLW87aWYoKHZvaWQgMD09PXl8fHk+SykmJih5PUspLHIubGVuZ3RoPjAmJih5PDB8fG88MCl8fG8+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7UHx8KFA9InV0''@;'; put 'put ''ZjgiKTtmb3IodmFyICQ9ITE7Oylzd2l0Y2goUCl7Y2FzZSJoZXgiOnJldHVybiBVKHRoaXMscixvLHkpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFoodGhpcyxyLG8seSk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbnQodGhpcyxyLG8seSk7''@;'; put 'put ''Y2FzZSJiYXNlNjQiOnJldHVybiB0dCh0aGlzLHIsbyx5KTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHl0KHRoaXMscixvLHkpO2RlZmF1bHQ6aWYoJCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1Ap''@;'; put 'put ''O1A9KCIiK1ApLnRvTG93ZXJDYXNlKCksJD0hMH19LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFg9NDA5NjtmdW5jdGlvbiBWKGgscixvKXt2''@;'; put 'put ''YXIgeT0iIjtvPU1hdGgubWluKGgubGVuZ3RoLG8pO2Zvcih2YXIgUD1yO1A8bzsrK1ApeSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmaFtQXSk7cmV0dXJuIHl9ZnVuY3Rpb24gZnQoaCxyLG8pe3ZhciB5PSIiO289TWF0aC5taW4oaC5sZW5ndGgsbyk7Zm9yKHZhciBQPXI7UDxvOysrUCl5''@;'; put 'put ''Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGhbUF0pO3JldHVybiB5fWZ1bmN0aW9uIGR0KGgscixvKXt2YXIgeT1oLmxlbmd0aDsoIXJ8fHI8MCkmJihyPTApLCghb3x8bzwwfHxvPnkpJiYobz15KTtmb3IodmFyIFA9IiIsSz1yO0s8bzsrK0spUCs9VG5baFtLXV07cmV0dXJuIFB9ZnVuY3Rpb24g''@;'; put 'put ''YnQoaCxyLG8pe2Zvcih2YXIgeT1oLnNsaWNlKHIsbyksUD0iIixLPTA7Szx5Lmxlbmd0aC0xO0srPTIpUCs9U3RyaW5nLmZyb21DaGFyQ29kZSh5W0tdKzI1Nip5W0srMV0pO3JldHVybiBQfWZ1bmN0aW9uIE90KGgscixvKXtpZihoJTEhPTB8fGg8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigi''@;'; put 'put ''b2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoaCtyPm8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBOdChoLHIsbyx5LFAsSyl7aWYoIWkuaXNCdWZmZXIoaCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIg''@;'; put 'put ''YXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHI+UHx8cjxLKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihvK3k+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIp''@;'; put 'put ''fWZ1bmN0aW9uIFl0KGgscixvLHksUCxLKXtpZihvK3k+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG88MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gb24oaCxyLG8seSxQKXtyZXR1cm4g''@;'; put 'put ''cj0rcixvPj4+PTAsUHx8WXQoaCwwLG8sNCksZS53cml0ZShoLHIsbyx5LDIzLDQpLG8rNH1mdW5jdGlvbiBHdChoLHIsbyx5LFApe3JldHVybiByPStyLG8+Pj49MCxQfHxZdChoLDAsbyw4KSxlLndyaXRlKGgscixvLHksNTIsOCksbys4fWkucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHIs''@;'; put 'put ''byl7dmFyIHk9dGhpcy5sZW5ndGg7KHI9fn5yKTwwPyhyKz15KTwwJiYocj0wKTpyPnkmJihyPXkpLChvPXZvaWQgMD09PW8/eTp+fm8pPDA/KG8rPXkpPDAmJihvPTApOm8+eSYmKG89eSksbzxyJiYobz1yKTt2YXIgUD10aGlzLnN1YmFycmF5KHIsbyk7cmV0dXJuIE9iamVjdC5zZXRQcm90''@;'; put 'put ''b3R5cGVPZihQLGkucHJvdG90eXBlKSxQfSxpLnByb3RvdHlwZS5yZWFkVWludExFPWkucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24ocixvLHkpe3I+Pj49MCxvPj4+PTAseXx8T3QocixvLHRoaXMubGVuZ3RoKTtmb3IodmFyIFA9dGhpc1tyXSxLPTEsJD0wOysrJDxvJiYoSyo9MjU2''@;'; put 'put ''KTspUCs9dGhpc1tyKyRdKks7cmV0dXJuIFB9LGkucHJvdG90eXBlLnJlYWRVaW50QkU9aS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihyLG8seSl7cj4+Pj0wLG8+Pj49MCx5fHxPdChyLG8sdGhpcy5sZW5ndGgpO2Zvcih2YXIgUD10aGlzW3IrLS1vXSxLPTE7bz4wJiYoSyo9MjU2''@;'; put 'put ''KTspUCs9dGhpc1tyKy0tb10qSztyZXR1cm4gUH0saS5wcm90b3R5cGUucmVhZFVpbnQ4PWkucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihyLG8pe3JldHVybiByPj4+PTAsb3x8T3QociwxLHRoaXMubGVuZ3RoKSx0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkVWludDE2TEU9aS5wcm90''@;'; put 'put ''b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl18dGhpc1tyKzFdPDw4fSxpLnByb3RvdHlwZS5yZWFkVWludDE2QkU9aS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+''@;'; put 'put ''Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDh8dGhpc1tyKzFdfSxpLnByb3RvdHlwZS5yZWFkVWludDMyTEU9aS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDQsdGhpcy5sZW5ndGgpLCh0aGlzW3JdfHRoaXNb''@;'; put 'put ''cisxXTw8OHx0aGlzW3IrMl08PDE2KSsxNjc3NzIxNip0aGlzW3IrM119LGkucHJvdG90eXBlLnJlYWRVaW50MzJCRT1pLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24ocixvKXtyZXR1cm4gcj4+Pj0wLG98fE90KHIsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tyXSsodGhp''@;'; put 'put ''c1tyKzFdPDwxNnx0aGlzW3IrMl08PDh8dGhpc1tyKzNdKX0saS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHIsbyx5KXtyPj4+PTAsbz4+Pj0wLHl8fE90KHIsbyx0aGlzLmxlbmd0aCk7Zm9yKHZhciBQPXRoaXNbcl0sSz0xLCQ9MDsrKyQ8byYmKEsqPTI1Nik7KVArPXRoaXNbcisk''@;'; put 'put ''XSpLO3JldHVybiBQPj0oSyo9MTI4KSYmKFAtPU1hdGgucG93KDIsOCpvKSksUH0saS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHIsbyx5KXtyPj4+PTAsbz4+Pj0wLHl8fE90KHIsbyx0aGlzLmxlbmd0aCk7Zm9yKHZhciBQPW8sSz0xLCQ9dGhpc1tyKy0tUF07UD4wJiYoSyo9MjU2''@;'; put 'put ''KTspJCs9dGhpc1tyKy0tUF0qSztyZXR1cm4gJD49KEsqPTEyOCkmJigkLT1NYXRoLnBvdygyLDgqbykpLCR9LGkucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3JdPy0xKigyNTUtdGhpc1tyXSsx''@;'; put 'put ''KTp0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihyLG8pe3I+Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciB5PXRoaXNbcl18dGhpc1tyKzFdPDw4O3JldHVybiAzMjc2OCZ5PzQyOTQ5MDE3NjB8eTp5fSxpLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5j''@;'; put 'put ''dGlvbihyLG8pe3I+Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciB5PXRoaXNbcisxXXx0aGlzW3JdPDw4O3JldHVybiAzMjc2OCZ5PzQyOTQ5MDE3NjB8eTp5fSxpLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihyLG8pe3JldHVybiByPj4+PTAsb3x8T3Qociw0LHRoaXMu''@;'; put 'put ''bGVuZ3RoKSx0aGlzW3JdfHRoaXNbcisxXTw8OHx0aGlzW3IrMl08PDE2fHRoaXNbciszXTw8MjR9LGkucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDQsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDI0fHRoaXNbcisxXTw8MTZ8dGhpc1ty''@;'; put 'put ''KzJdPDw4fHRoaXNbciszXX0saS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24ocixvKXtyZXR1cm4gcj4+Pj0wLG98fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMCwyMyw0KX0saS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24ocixvKXtyZXR1cm4gcj4+''@;'; put 'put ''Pj0wLG98fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMSwyMyw0KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDgsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLHIsITAsNTIsOCl9LGkucHJvdG90eXBlLnJl''@;'; put 'put ''YWREb3VibGVCRT1mdW5jdGlvbihyLG8pe3JldHVybiByPj4+PTAsb3x8T3Qociw4LHRoaXMubGVuZ3RoKSxlLnJlYWQodGhpcyxyLCExLDUyLDgpfSxpLnByb3RvdHlwZS53cml0ZVVpbnRMRT1pLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihyLG8seSxQKXtyPStyLG8+Pj49MCx5''@;'; put 'put ''Pj4+PTAsUHx8TnQodGhpcyxyLG8seSxNYXRoLnBvdygyLDgqeSktMSwwKTt2YXIgJD0xLGp0PTA7Zm9yKHRoaXNbb109MjU1JnI7KytqdDx5JiYoJCo9MjU2KTspdGhpc1tvK2p0XT1yLyQmMjU1O3JldHVybiBvK3l9LGkucHJvdG90eXBlLndyaXRlVWludEJFPWkucHJvdG90eXBlLndyaXRl''@;'; put 'put ''VUludEJFPWZ1bmN0aW9uKHIsbyx5LFApe3I9K3Isbz4+Pj0wLHk+Pj49MCxQfHxOdCh0aGlzLHIsbyx5LE1hdGgucG93KDIsOCp5KS0xLDApO3ZhciAkPXktMSxqdD0xO2Zvcih0aGlzW28rJF09MjU1JnI7LS0kPj0wJiYoanQqPTI1Nik7KXRoaXNbbyskXT1yL2p0JjI1NTtyZXR1cm4gbyt5''@;'; put 'put ''fSxpLnByb3RvdHlwZS53cml0ZVVpbnQ4PWkucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24ocixvLHkpe3JldHVybiByPStyLG8+Pj49MCx5fHxOdCh0aGlzLHIsbywxLDI1NSwwKSx0aGlzW29dPTI1NSZyLG8rMX0saS5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1pLnByb3RvdHlwZS53''@;'; put 'put ''cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sMiw2NTUzNSwwKSx0aGlzW29dPTI1NSZyLHRoaXNbbysxXT1yPj4+OCxvKzJ9LGkucHJvdG90eXBlLndyaXRlVWludDE2QkU9aS5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5j''@;'; put 'put ''dGlvbihyLG8seSl7cmV0dXJuIHI9K3Isbz4+Pj0wLHl8fE50KHRoaXMscixvLDIsNjU1MzUsMCksdGhpc1tvXT1yPj4+OCx0aGlzW28rMV09MjU1JnIsbysyfSxpLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPWkucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24ocixvLHkpe3JldHVy''@;'; put 'put ''biByPStyLG8+Pj49MCx5fHxOdCh0aGlzLHIsbyw0LDQyOTQ5NjcyOTUsMCksdGhpc1tvKzNdPXI+Pj4yNCx0aGlzW28rMl09cj4+PjE2LHRoaXNbbysxXT1yPj4+OCx0aGlzW29dPTI1NSZyLG8rNH0saS5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1pLnByb3RvdHlwZS53cml0ZVVJbnQzMkJF''@;'; put 'put ''PWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sNCw0Mjk0OTY3Mjk1LDApLHRoaXNbb109cj4+PjI0LHRoaXNbbysxXT1yPj4+MTYsdGhpc1tvKzJdPXI+Pj44LHRoaXNbbyszXT0yNTUmcixvKzR9LGkucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rp''@;'; put 'put ''b24ocixvLHksUCl7aWYocj0rcixvPj4+PTAsIVApe3ZhciBLPU1hdGgucG93KDIsOCp5LTEpO050KHRoaXMscixvLHksSy0xLC1LKX12YXIgJD0wLGp0PTEsXz0wO2Zvcih0aGlzW29dPTI1NSZyOysrJDx5JiYoanQqPTI1Nik7KXI8MCYmMD09PV8mJjAhPT10aGlzW28rJC0xXSYmKF89MSks''@;'; put 'put ''dGhpc1tvKyRdPShyL2p0fDApLV8mMjU1O3JldHVybiBvK3l9LGkucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24ocixvLHksUCl7aWYocj0rcixvPj4+PTAsIVApe3ZhciBLPU1hdGgucG93KDIsOCp5LTEpO050KHRoaXMscixvLHksSy0xLC1LKX12YXIgJD15LTEsanQ9MSxfPTA7Zm9y''@;'; put 'put ''KHRoaXNbbyskXT0yNTUmcjstLSQ+PTAmJihqdCo9MjU2KTspcjwwJiYwPT09XyYmMCE9PXRoaXNbbyskKzFdJiYoXz0xKSx0aGlzW28rJF09KHIvanR8MCktXyYyNTU7cmV0dXJuIG8reX0saS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAs''@;'; put 'put ''eXx8TnQodGhpcyxyLG8sMSwxMjcsLTEyOCkscjwwJiYocj0yNTUrcisxKSx0aGlzW29dPTI1NSZyLG8rMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sMiwzMjc2NywtMzI3NjgpLHRoaXNbb109MjU1''@;'; put 'put ''JnIsdGhpc1tvKzFdPXI+Pj44LG8rMn0saS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sMiwzMjc2NywtMzI3NjgpLHRoaXNbb109cj4+PjgsdGhpc1tvKzFdPTI1NSZyLG8rMn0saS5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVJbnQzMkxFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW29dPTI1NSZyLHRoaXNbbysxXT1yPj4+OCx0aGlzW28rMl09cj4+PjE2LHRoaXNbbyszXT1yPj4+MjQsbys0fSxpLnByb3RvdHlw''@;'; put 'put ''ZS53cml0ZUludDMyQkU9ZnVuY3Rpb24ocixvLHkpe3JldHVybiByPStyLG8+Pj49MCx5fHxOdCh0aGlzLHIsbyw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHI8MCYmKHI9NDI5NDk2NzI5NStyKzEpLHRoaXNbb109cj4+PjI0LHRoaXNbbysxXT1yPj4+MTYsdGhpc1tvKzJdPXI+Pj44LHRo''@;'; put 'put ''aXNbbyszXT0yNTUmcixvKzR9LGkucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihyLG8seSl7cmV0dXJuIG9uKHRoaXMscixvLCEwLHkpfSxpLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24ocixvLHkpe3JldHVybiBvbih0aGlzLHIsbywhMSx5KX0saS5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGVEb3VibGVMRT1mdW5jdGlvbihyLG8seSl7cmV0dXJuIEd0KHRoaXMscixvLCEwLHkpfSxpLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gR3QodGhpcyxyLG8sITEseSl9LGkucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocixvLHksUCl7aWYoIWku''@;'; put 'put ''aXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoeXx8KHk9MCksIVAmJjAhPT1QJiYoUD10aGlzLmxlbmd0aCksbz49ci5sZW5ndGgmJihvPXIubGVuZ3RoKSxvfHwobz0wKSxQPjAmJlA8eSYmKFA9eSksUD09PXl8fDA9PT1y''@;'; put 'put ''Lmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKG88MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHk8MHx8eT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKFA8MCl0''@;'; put 'put ''aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtQPnRoaXMubGVuZ3RoJiYoUD10aGlzLmxlbmd0aCksci5sZW5ndGgtbzxQLXkmJihQPXIubGVuZ3RoLW8reSk7dmFyIEs9UC15O3JldHVybiB0aGlzPT09ciYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJy''@;'; put 'put ''YXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKG8seSxQKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChyLHRoaXMuc3ViYXJyYXkoeSxQKSxvKSxLfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHIsbyx5LFApe2lmKCJzdHJpbmciPT10eXBlb2Ygcil7aWYo''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBvPyhQPW8sbz0wLHk9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgeSYmKFA9eSx5PXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1QJiYic3RyaW5nIiE9dHlwZW9mIFApdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lm''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgUCYmIWkuaXNFbmNvZGluZyhQKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1ApO2lmKDE9PT1yLmxlbmd0aCl7dmFyIEs9ci5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1QJiZLPDEyOHx8ImxhdGluMSI9PT1QKSYmKHI9Syl9fWVs''@;'; put 'put ''c2UibnVtYmVyIj09dHlwZW9mIHI/ciY9MjU1OiJib29sZWFuIj09dHlwZW9mIHImJihyPU51bWJlcihyKSk7aWYobzwwfHx0aGlzLmxlbmd0aDxvfHx0aGlzLmxlbmd0aDx5KXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih5PD1vKXJldHVybiB0aGlzO3Zh''@;'; put 'put ''ciAkO2lmKG8+Pj49MCx5PXZvaWQgMD09PXk/dGhpcy5sZW5ndGg6eT4+PjAscnx8KHI9MCksIm51bWJlciI9PXR5cGVvZiByKWZvcigkPW87JDx5OysrJCl0aGlzWyRdPXI7ZWxzZXt2YXIganQ9aS5pc0J1ZmZlcihyKT9yOmkuZnJvbShyLFApLF89anQubGVuZ3RoO2lmKDA9PT1fKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytyKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoJD0wOyQ8eS1vOysrJCl0aGlzWyQrb109anRbJCVfXX1yZXR1cm4gdGhpc307dmFyIHVuPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gcm4oaCxyKXtyPXJ8''@;'; put 'put ''fDEvMDtmb3IodmFyIG8seT1oLmxlbmd0aCxQPW51bGwsSz1bXSwkPTA7JDx5OysrJCl7aWYoKG89aC5jaGFyQ29kZUF0KCQpKT41NTI5NSYmbzw1NzM0NCl7aWYoIVApe2lmKG8+NTYzMTkpeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZigkKzE9PT15KXsoci09''@;'; put 'put ''Myk+LTEmJksucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9UD1vO2NvbnRpbnVlfWlmKG88NTYzMjApeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KSxQPW87Y29udGludWV9bz02NTUzNisoUC01NTI5Njw8MTB8by01NjMyMCl9ZWxzZSBQJiYoci09Myk+LTEmJksucHVzaCgyMzks''@;'; put 'put ''MTkxLDE4OSk7aWYoUD1udWxsLG88MTI4KXtpZigoci09MSk8MClicmVhaztLLnB1c2gobyl9ZWxzZSBpZihvPDIwNDgpe2lmKChyLT0yKTwwKWJyZWFrO0sucHVzaChvPj42fDE5Miw2MyZvfDEyOCl9ZWxzZSBpZihvPDY1NTM2KXtpZigoci09Myk8MClicmVhaztLLnB1c2gobz4+MTJ8MjI0''@;'; put 'put ''LG8+PjYmNjN8MTI4LDYzJm98MTI4KX1lbHNle2lmKCEobzwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChyLT00KTwwKWJyZWFrO0sucHVzaChvPj4xOHwyNDAsbz4+MTImNjN8MTI4LG8+PjYmNjN8MTI4LDYzJm98MTI4KX19cmV0dXJuIEt9ZnVu''@;'; put 'put ''Y3Rpb24gZG4oaCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24geW4oaCl7aWYoKGg9KGg9aC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZSh1biwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7aC5sZW5ndGglNCE9MDspaCs9Ij0iO3JldHVybiBofShoKSl9ZnVuY3Rpb24g''@;'; put 'put ''c24oaCxyLG8seSl7Zm9yKHZhciBQPTA7UDx5JiYhKFArbz49ci5sZW5ndGh8fFA+PWgubGVuZ3RoKTsrK1ApcltQK29dPWhbUF07cmV0dXJuIFB9ZnVuY3Rpb24gX3QoaCxyKXtyZXR1cm4gaCBpbnN0YW5jZW9mIHJ8fG51bGwhPWgmJm51bGwhPWguY29uc3RydWN0b3ImJm51bGwhPWguY29u''@;'; put 'put ''c3RydWN0b3IubmFtZSYmaC5jb25zdHJ1Y3Rvci5uYW1lPT09ci5uYW1lfWZ1bmN0aW9uIG1uKGgpe3JldHVybiBoIT1ofXZhciBUbj1mdW5jdGlvbigpe2Zvcih2YXIgaD0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uZXcgQXJyYXkoMjU2KSxvPTA7bzwxNjsrK28pZm9yKHZhciB5PTE2Km8sUD0w''@;'; put 'put ''O1A8MTY7KytQKXJbeStQXT1oW29dK2hbUF07cmV0dXJuIHJ9KCl9LDIyMDIwOihjLGwpPT57bC5yZWFkPWZ1bmN0aW9uKHQsbixlLHMsYSl7dmFyIHUsZixpPTgqYS1zLTEsdj0oMTw8aSktMSxwPXY+PjEsZD0tNyxtPWU/YS0xOjAsRT1lPy0xOjEsZz10W24rbV07Zm9yKG0rPUUsdT1nJigx''@;'; put 'put ''PDwtZCktMSxnPj49LWQsZCs9aTtkPjA7dT0yNTYqdSt0W24rbV0sbSs9RSxkLT04KTtmb3IoZj11JigxPDwtZCktMSx1Pj49LWQsZCs9cztkPjA7Zj0yNTYqZit0W24rbV0sbSs9RSxkLT04KTtpZigwPT09dSl1PTEtcDtlbHNle2lmKHU9PT12KXJldHVybiBmP05hTjoxLzAqKGc/LTE6MSk7''@;'; put 'put ''Zis9TWF0aC5wb3coMixzKSx1LT1wfXJldHVybihnPy0xOjEpKmYqTWF0aC5wb3coMix1LXMpfSxsLndyaXRlPWZ1bmN0aW9uKHQsbixlLHMsYSx1KXt2YXIgZixpLHYscD04KnUtYS0xLGQ9KDE8PHApLTEsbT1kPj4xLEU9MjM9PT1hP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6''@;'; put 'put ''MCxnPXM/MDp1LTEsRD1zPzE6LTEsRj1uPDB8fDA9PT1uJiYxL248MD8xOjA7Zm9yKG49TWF0aC5hYnMobiksaXNOYU4obil8fG49PT0xLzA/KGk9aXNOYU4obik/MTowLGY9ZCk6KGY9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMiksbioodj1NYXRoLnBvdygyLC1mKSk8MSYmKGYt''@;'; put 'put ''LSx2Kj0yKSwobis9ZittPj0xP0UvdjpFKk1hdGgucG93KDIsMS1tKSkqdj49MiYmKGYrKyx2Lz0yKSxmK20+PWQ/KGk9MCxmPWQpOmYrbT49MT8oaT0obip2LTEpKk1hdGgucG93KDIsYSksZis9bSk6KGk9bipNYXRoLnBvdygyLG0tMSkqTWF0aC5wb3coMixhKSxmPTApKTthPj04O3RbZStn''@;'; put 'put ''XT0yNTUmaSxnKz1ELGkvPTI1NixhLT04KTtmb3IoZj1mPDxhfGkscCs9YTtwPjA7dFtlK2ddPTI1NSZmLGcrPUQsZi89MjU2LHAtPTgpO3RbZStnLURdfD0xMjgqRn19LDk2OTM1OigpPT57InVzZSBzdHJpY3QiO2NvbnN0IGM9Z2xvYmFsVGhpcztmdW5jdGlvbiBsKFMpe3JldHVybihjLl9f''@;'; put 'put ''Wm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIikrU31jb25zdCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iscz1PYmplY3QuZGVmaW5lUHJvcGVydHksYT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsdT1PYmplY3QuY3JlYXRlLGY9QXJyYXkucHJvdG90eXBlLnNs''@;'; put 'put ''aWNlLGk9ImFkZEV2ZW50TGlzdGVuZXIiLHY9InJlbW92ZUV2ZW50TGlzdGVuZXIiLHA9bChpKSxkPWwodiksbT0idHJ1ZSIsRT0iZmFsc2UiLGc9bCgiIik7ZnVuY3Rpb24gRChTLFIpe3JldHVybiBab25lLmN1cnJlbnQud3JhcChTLFIpfWZ1bmN0aW9uIEYoUyxSLEIsTyxOKXtyZXR1cm4g''@;'; put 'put ''Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKFMsUixCLE8sTil9Y29uc3QgeD1sLHc9dHlwZW9mIHdpbmRvdzwidSIsQz13P3dpbmRvdzp2b2lkIDAsST13JiZDfHxnbG9iYWxUaGlzLE09InJlbW92ZUF0dHJpYnV0ZSI7ZnVuY3Rpb24gVChTLFIpe2ZvcihsZXQgQj1TLmxlbmd0aC0x''@;'; put 'put ''O0I+PTA7Qi0tKSJmdW5jdGlvbiI9PXR5cGVvZiBTW0JdJiYoU1tCXT1EKFNbQl0sUisiXyIrQikpO3JldHVybiBTfWZ1bmN0aW9uIEwoUyl7cmV0dXJuIVN8fCExIT09Uy53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgUy5nZXQmJnR5cGVvZiBTLnNldD4idSIpfWNvbnN0IFU9dHlw''@;'; put 'put ''ZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLFo9ISgibnciaW4gSSkmJnR5cGVvZiBJLnByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT1JLnByb2Nlc3MudG9TdHJpbmcoKSxudD0hWiYmIVUmJiEoIXd8fCFDLkhUTUxF''@;'; put 'put ''bGVtZW50KSx0dD10eXBlb2YgSS5wcm9jZXNzPCJ1IiYmIltvYmplY3QgcHJvY2Vzc10iPT09SS5wcm9jZXNzLnRvU3RyaW5nKCkmJiFVJiYhKCF3fHwhQy5IVE1MRWxlbWVudCkseXQ9e30sbXQ9eCgiZW5hYmxlX2JlZm9yZXVubG9hZCIpLHE9ZnVuY3Rpb24oUyl7aWYoIShTPVN8fEkuZXZl''@;'; put 'put ''bnQpKXJldHVybjtsZXQgUj15dFtTLnR5cGVdO1J8fChSPXl0W1MudHlwZV09eCgiT05fUFJPUEVSVFkiK1MudHlwZSkpO2NvbnN0IEI9dGhpc3x8Uy50YXJnZXR8fEksTz1CW1JdO2xldCBOO3JldHVybiBudCYmQj09PUMmJiJlcnJvciI9PT1TLnR5cGU/KE49TyYmTy5jYWxsKHRoaXMsUy5t''@;'; put 'put ''ZXNzYWdlLFMuZmlsZW5hbWUsUy5saW5lbm8sUy5jb2xubyxTLmVycm9yKSwhMD09PU4mJlMucHJldmVudERlZmF1bHQoKSk6KE49TyYmTy5hcHBseSh0aGlzLGFyZ3VtZW50cyksImJlZm9yZXVubG9hZCI9PT1TLnR5cGUmJklbbXRdJiYic3RyaW5nIj09dHlwZW9mIE4/Uy5yZXR1cm5WYWx1''@;'; put 'put ''ZT1OOm51bGwhPU4mJiFOJiZTLnByZXZlbnREZWZhdWx0KCkpLE59O2Z1bmN0aW9uIFgoUyxSLEIpe2xldCBPPWUoUyxSKTtpZighTyYmQiYmZShCLFIpJiYoTz17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSwhT3x8IU8uY29uZmlndXJhYmxlKXJldHVybjtjb25zdCBOPXgoIm9u''@;'; put 'put ''IitSKyJwYXRjaGVkIik7aWYoUy5oYXNPd25Qcm9wZXJ0eShOKSYmU1tOXSlyZXR1cm47ZGVsZXRlIE8ud3JpdGFibGUsZGVsZXRlIE8udmFsdWU7Y29uc3QgSj1PLmdldCxvdD1PLnNldCxzdD1SLnNsaWNlKDIpO2xldCBsdD15dFtzdF07bHR8fChsdD15dFtzdF09eCgiT05fUFJPUEVSVFki''@;'; put 'put ''K3N0KSksTy5zZXQ9ZnVuY3Rpb24oU3Qpe2xldCBydD10aGlzOyFydCYmUz09PUkmJihydD1JKSxydCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBydFtsdF0mJnJ0LnJlbW92ZUV2ZW50TGlzdGVuZXIoc3QscSksb3QmJm90LmNhbGwocnQsbnVsbCkscnRbbHRdPVN0LCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBTdCYmcnQuYWRkRXZlbnRMaXN0ZW5lcihzdCxxLCExKSl9LE8uZ2V0PWZ1bmN0aW9uKCl7bGV0IFN0PXRoaXM7aWYoIVN0JiZTPT09SSYmKFN0PUkpLCFTdClyZXR1cm4gbnVsbDtjb25zdCBydD1TdFtsdF07aWYocnQpcmV0dXJuIHJ0O2lmKEope2xldCB4dD1KLmNhbGwodGhpcyk7aWYo''@;'; put 'put ''eHQpcmV0dXJuIE8uc2V0LmNhbGwodGhpcyx4dCksImZ1bmN0aW9uIj09dHlwZW9mIFN0W01dJiZTdC5yZW1vdmVBdHRyaWJ1dGUoUikseHR9cmV0dXJuIG51bGx9LHMoUyxSLE8pLFNbTl09ITB9ZnVuY3Rpb24gZXQoUyxSLEIpe2lmKFIpZm9yKGxldCBPPTA7TzxSLmxlbmd0aDtPKyspWChT''@;'; put 'put ''LCJvbiIrUltPXSxCKTtlbHNle2NvbnN0IE89W107Zm9yKGNvbnN0IE4gaW4gUykib24iPT1OLnNsaWNlKDAsMikmJk8ucHVzaChOKTtmb3IobGV0IE49MDtOPE8ubGVuZ3RoO04rKylYKFMsT1tOXSxCKX19Y29uc3QgVj14KCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24gZnQoUyl7Y29u''@;'; put 'put ''c3QgUj1JW1NdO2lmKCFSKXJldHVybjtJW3goUyldPVIsSVtTXT1mdW5jdGlvbigpe2NvbnN0IE49VChhcmd1bWVudHMsUyk7c3dpdGNoKE4ubGVuZ3RoKXtjYXNlIDA6dGhpc1tWXT1uZXcgUjticmVhaztjYXNlIDE6dGhpc1tWXT1uZXcgUihOWzBdKTticmVhaztjYXNlIDI6dGhpc1tWXT1u''@;'; put 'put ''ZXcgUihOWzBdLE5bMV0pO2JyZWFrO2Nhc2UgMzp0aGlzW1ZdPW5ldyBSKE5bMF0sTlsxXSxOWzJdKTticmVhaztjYXNlIDQ6dGhpc1tWXT1uZXcgUihOWzBdLE5bMV0sTlsyXSxOWzNdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQXJnIGxpc3QgdG9vIGxvbmcuIil9fSxPdChJ''@;'; put 'put ''W1NdLFIpO2NvbnN0IEI9bmV3IFIoZnVuY3Rpb24oKXt9KTtsZXQgTztmb3IoTyBpbiBCKSJYTUxIdHRwUmVxdWVzdCI9PT1TJiYicmVzcG9uc2VCbG9iIj09PU98fGZ1bmN0aW9uKE4peyJmdW5jdGlvbiI9PXR5cGVvZiBCW05dP0lbU10ucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXNbVl1bTl0uYXBwbHkodGhpc1tWXSxhcmd1bWVudHMpfTpzKElbU10ucHJvdG90eXBlLE4se3NldDpmdW5jdGlvbihKKXsiZnVuY3Rpb24iPT10eXBlb2YgSj8odGhpc1tWXVtOXT1EKEosUysiLiIrTiksT3QodGhpc1tWXVtOXSxKKSk6dGhpc1tWXVtOXT1KfSxnZXQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpc1tWXVtOXX19KX0oTyk7Zm9yKE8gaW4gUikicHJvdG90eXBlIiE9PU8mJlIuaGFzT3duUHJvcGVydHkoTykmJihJW1NdW09dPVJbT10pfWZ1bmN0aW9uIGR0KFMsUixCKXtsZXQgTz1TO2Zvcig7TyYmIU8uaGFzT3duUHJvcGVydHkoUik7KU89YShPKTshTyYmU1tSXSYm''@;'; put 'put ''KE89Uyk7Y29uc3QgTj14KFIpO2xldCBKPW51bGw7aWYoTyYmKCEoSj1PW05dKXx8IU8uaGFzT3duUHJvcGVydHkoTikpJiYoSj1PW05dPU9bUl0sTChPJiZlKE8sUikpKSl7Y29uc3Qgc3Q9QihKLE4sUik7T1tSXT1mdW5jdGlvbigpe3JldHVybiBzdCh0aGlzLGFyZ3VtZW50cyl9LE90KE9b''@;'; put 'put ''Ul0sSil9cmV0dXJuIEp9ZnVuY3Rpb24gYnQoUyxSLEIpe2xldCBPPW51bGw7ZnVuY3Rpb24gTihKKXtjb25zdCBvdD1KLmRhdGE7cmV0dXJuIG90LmFyZ3Nbb3QuY2JJZHhdPWZ1bmN0aW9uKCl7Si5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxPLmFwcGx5KG90LnRhcmdldCxvdC5h''@;'; put 'put ''cmdzKSxKfU89ZHQoUyxSLEo9PmZ1bmN0aW9uKG90LHN0KXtjb25zdCBsdD1CKG90LHN0KTtyZXR1cm4gbHQuY2JJZHg+PTAmJiJmdW5jdGlvbiI9PXR5cGVvZiBzdFtsdC5jYklkeF0/RihsdC5uYW1lLHN0W2x0LmNiSWR4XSxsdCxOKTpKLmFwcGx5KG90LHN0KX0pfWZ1bmN0aW9uIE90KFMs''@;'; put 'put ''Uil7U1t4KCJPcmlnaW5hbERlbGVnYXRlIildPVJ9bGV0IE50PSExLFl0PSExO2Z1bmN0aW9uIEd0KCl7aWYoTnQpcmV0dXJuIFl0O050PSEwO3RyeXtjb25zdCBTPUMubmF2aWdhdG9yLnVzZXJBZ2VudDsoLTEhPT1TLmluZGV4T2YoIk1TSUUgIil8fC0xIT09Uy5pbmRleE9mKCJUcmlkZW50''@;'; put 'put ''LyIpfHwtMSE9PVMuaW5kZXhPZigiRWRnZS8iKSkmJihZdD0hMCl9Y2F0Y2h7fXJldHVybiBZdH1mdW5jdGlvbiB1bihTKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU31mdW5jdGlvbiB5bihTKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFN9bGV0IHJuPSExO2lmKHR5cGVvZiB3aW5kb3c8''@;'; put 'put ''InUiKXRyeXtjb25zdCBTPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JuPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixTLFMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixTLFMpfWNhdGNoe3JuPSExfWNv''@;'; put 'put ''bnN0IHhuPXt1c2VHOiEwfSxxdD17fSxkbj17fSxzbj1uZXcgUmVnRXhwKCJeIitnKyIoXFx3KykodHJ1ZXxmYWxzZSkkIiksX3Q9eCgicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gbW4oUyxSKXtjb25zdCBCPShSP1IoUyk6UykrRSxPPShSP1IoUyk6UykrbSxOPWcrQixKPWcrTztx''@;'; put 'put ''dFtTXT17fSxxdFtTXVtFXT1OLHF0W1NdW21dPUp9ZnVuY3Rpb24gVG4oUyxSLEIsTyl7Y29uc3QgTj1PJiZPLmFkZHx8aSxKPU8mJk8ucm18fHYsb3Q9TyYmTy5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsc3Q9TyYmTy5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsbHQ9eChOKSxT''@;'; put 'put ''dD0iLiIrTisiOiIscnQ9InByZXBlbmRMaXN0ZW5lciIseHQ9Ii4iK3J0KyI6IixEdD1mdW5jdGlvbih2dCxZLGt0KXtpZih2dC5pc1JlbW92ZWQpcmV0dXJuO2NvbnN0IEx0PXZ0LmNhbGxiYWNrO2xldCBYdDsib2JqZWN0Ij09dHlwZW9mIEx0JiZMdC5oYW5kbGVFdmVudCYmKHZ0LmNhbGxi''@;'; put 'put ''YWNrPXV0PT5MdC5oYW5kbGVFdmVudCh1dCksdnQub3JpZ2luYWxEZWxlZ2F0ZT1MdCk7dHJ5e3Z0Lmludm9rZSh2dCxZLFtrdF0pfWNhdGNoKHV0KXtYdD11dH1jb25zdCBLdD12dC5vcHRpb25zO3JldHVybiBLdCYmIm9iamVjdCI9PXR5cGVvZiBLdCYmS3Qub25jZSYmWVtKXS5jYWxsKFks''@;'; put 'put ''a3QudHlwZSx2dC5vcmlnaW5hbERlbGVnYXRlP3Z0Lm9yaWdpbmFsRGVsZWdhdGU6dnQuY2FsbGJhY2ssS3QpLFh0fTtmdW5jdGlvbiBCdCh2dCxZLGt0KXtpZighKFk9WXx8Uy5ldmVudCkpcmV0dXJuO2NvbnN0IEx0PXZ0fHxZLnRhcmdldHx8UyxYdD1MdFtxdFtZLnR5cGVdW2t0P206RV1d''@;'; put 'put ''O2lmKFh0KXtjb25zdCBLdD1bXTtpZigxPT09WHQubGVuZ3RoKXtjb25zdCB1dD1EdChYdFswXSxMdCxZKTt1dCYmS3QucHVzaCh1dCl9ZWxzZXtjb25zdCB1dD1YdC5zbGljZSgpO2ZvcihsZXQgV3Q9MDtXdDx1dC5sZW5ndGgmJighWXx8ITAhPT1ZW190XSk7V3QrKyl7Y29uc3QgSXQ9RHQo''@;'; put 'put ''dXRbV3RdLEx0LFkpO0l0JiZLdC5wdXNoKEl0KX19aWYoMT09PUt0Lmxlbmd0aCl0aHJvdyBLdFswXTtmb3IobGV0IHV0PTA7dXQ8S3QubGVuZ3RoO3V0Kyspe2NvbnN0IFd0PUt0W3V0XTtSLm5hdGl2ZVNjaGVkdWxlTWljcm9UYXNrKCgpPT57dGhyb3cgV3R9KX19fWNvbnN0IEh0PWZ1bmN0''@;'; put 'put ''aW9uKHZ0KXtyZXR1cm4gQnQodGhpcyx2dCwhMSl9LHRuPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gQnQodGhpcyx2dCwhMCl9O2Z1bmN0aW9uIG5uKHZ0LFkpe2lmKCF2dClyZXR1cm4hMTtsZXQga3Q9ITA7WSYmdm9pZCAwIT09WS51c2VHJiYoa3Q9WS51c2VHKTtjb25zdCBMdD1ZJiZZLnZoO2xl''@;'; put 'put ''dCBYdD0hMDtZJiZ2b2lkIDAhPT1ZLmNoa0R1cCYmKFh0PVkuY2hrRHVwKTtsZXQgS3Q9ITE7WSYmdm9pZCAwIT09WS5ydCYmKEt0PVkucnQpO2xldCB1dD12dDtmb3IoO3V0JiYhdXQuaGFzT3duUHJvcGVydHkoTik7KXV0PWEodXQpO2lmKCF1dCYmdnRbTl0mJih1dD12dCksIXV0fHx1dFts''@;'; put 'put ''dF0pcmV0dXJuITE7Y29uc3QgV3Q9WSYmWS5ldmVudE5hbWVUb1N0cmluZyxJdD17fSxUdD11dFtsdF09dXRbTl0sZ3Q9dXRbeChKKV09dXRbSl0sUHQ9dXRbeChvdCldPXV0W290XSxlbj11dFt4KHN0KV09dXRbc3RdO2xldCBKdDtZJiZZLnByZXBlbmQmJihKdD11dFt4KFkucHJlcGVuZCld''@;'; put 'put ''PXV0W1kucHJlcGVuZF0pO2NvbnN0IFp0PWt0P2Z1bmN0aW9uKGspe2lmKCFJdC5pc0V4aXN0aW5nKXJldHVybiBUdC5jYWxsKEl0LnRhcmdldCxJdC5ldmVudE5hbWUsSXQuY2FwdHVyZT90bjpIdCxJdC5vcHRpb25zKX06ZnVuY3Rpb24oayl7cmV0dXJuIFR0LmNhbGwoSXQudGFyZ2V0LEl0''@;'; put 'put ''LmV2ZW50TmFtZSxrLmludm9rZSxJdC5vcHRpb25zKX0sQ3Q9a3Q/ZnVuY3Rpb24oayl7aWYoIWsuaXNSZW1vdmVkKXtjb25zdCBHPXF0W2suZXZlbnROYW1lXTtsZXQgcHQ7RyYmKHB0PUdbay5jYXB0dXJlP206RV0pO2NvbnN0IE10PXB0JiZrLnRhcmdldFtwdF07aWYoTXQpZm9yKGxldCBj''@;'; put 'put ''dD0wO2N0PE10Lmxlbmd0aDtjdCsrKWlmKE10W2N0XT09PWspe010LnNwbGljZShjdCwxKSxrLmlzUmVtb3ZlZD0hMCxrLnJlbW92ZUFib3J0TGlzdGVuZXImJihrLnJlbW92ZUFib3J0TGlzdGVuZXIoKSxrLnJlbW92ZUFib3J0TGlzdGVuZXI9bnVsbCksMD09PU10Lmxlbmd0aCYmKGsuYWxs''@;'; put 'put ''UmVtb3ZlZD0hMCxrLnRhcmdldFtwdF09bnVsbCk7YnJlYWt9fWlmKGsuYWxsUmVtb3ZlZClyZXR1cm4gZ3QuY2FsbChrLnRhcmdldCxrLmV2ZW50TmFtZSxrLmNhcHR1cmU/dG46SHQsay5vcHRpb25zKX06ZnVuY3Rpb24oayl7cmV0dXJuIGd0LmNhbGwoay50YXJnZXQsay5ldmVudE5hbWUs''@;'; put 'put ''ay5pbnZva2Usay5vcHRpb25zKX0sdm49WSYmWS5kaWZmP1kuZGlmZjpmdW5jdGlvbihrLEcpe2NvbnN0IHB0PXR5cGVvZiBHO3JldHVybiJmdW5jdGlvbiI9PT1wdCYmay5jYWxsYmFjaz09PUd8fCJvYmplY3QiPT09cHQmJmsub3JpZ2luYWxEZWxlZ2F0ZT09PUd9LHBuPVpvbmVbeCgiVU5Q''@;'; put 'put ''QVRDSEVEX0VWRU5UUyIpXSxjbj1TW3goIlBBU1NJVkVfRVZFTlRTIildLFc9ZnVuY3Rpb24oayxHLHB0LE10LGN0PSExLHd0PSExKXtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBSdD10aGlzfHxTO2xldCBGdD1hcmd1bWVudHNbMF07WSYmWS50cmFuc2ZlckV2ZW50TmFtZSYmKEZ0PVkudHJh''@;'; put 'put ''bnNmZXJFdmVudE5hbWUoRnQpKTtsZXQgJHQ9YXJndW1lbnRzWzFdO2lmKCEkdClyZXR1cm4gay5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoWiYmInVuY2F1Z2h0RXhjZXB0aW9uIj09PUZ0KXJldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtsZXQgVXQ9ITE7aWYoImZ1bmN0aW9uIiE9''@;'; put 'put ''dHlwZW9mICR0KXtpZighJHQuaGFuZGxlRXZlbnQpcmV0dXJuIGsuYXBwbHkodGhpcyxhcmd1bWVudHMpO1V0PSEwfWlmKEx0JiYhTHQoaywkdCxSdCxhcmd1bWVudHMpKXJldHVybjtjb25zdCBFbj1ybiYmISFjbiYmLTEhPT1jbi5pbmRleE9mKEZ0KSxsbj1mdW5jdGlvbiB6KGspe2lmKCJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgayYmbnVsbCE9PWspe2NvbnN0IEc9ey4uLmt9O3JldHVybiBrLnNpZ25hbCYmKEcuc2lnbmFsPWsuc2lnbmFsKSxHfXJldHVybiBrfShmdW5jdGlvbiBBdChrLEcpe3JldHVybiFybiYmIm9iamVjdCI9PXR5cGVvZiBrJiZrPyEhay5jYXB0dXJlOnJuJiZHPyJib29s''@;'; put 'put ''ZWFuIj09dHlwZW9mIGs/e2NhcHR1cmU6ayxwYXNzaXZlOiEwfTprPyJvYmplY3QiPT10eXBlb2YgayYmITEhPT1rLnBhc3NpdmU/ey4uLmsscGFzc2l2ZTohMH06azp7cGFzc2l2ZTohMH06a30oYXJndW1lbnRzWzJdLEVuKSksU249bG4/LnNpZ25hbDtpZihTbj8uYWJvcnRlZClyZXR1cm47''@;'; put 'put ''aWYocG4pZm9yKGxldCBobj0wO2huPHBuLmxlbmd0aDtobisrKWlmKEZ0PT09cG5baG5dKXJldHVybiBFbj9rLmNhbGwoUnQsRnQsJHQsbG4pOmsuYXBwbHkodGhpcyxhcmd1bWVudHMpO2NvbnN0IEFuPSEhbG4mJigiYm9vbGVhbiI9PXR5cGVvZiBsbnx8bG4uY2FwdHVyZSksRm49ISghbG58''@;'; put 'put ''fCJvYmplY3QiIT10eXBlb2YgbG4pJiZsbi5vbmNlLEJuPVpvbmUuY3VycmVudDtsZXQgd249cXRbRnRdO3dufHwobW4oRnQsV3QpLHduPXF0W0Z0XSk7Y29uc3QgRG49d25bQW4/bTpFXTtsZXQgSW4sT249UnRbRG5dLGJuPSExO2lmKE9uKXtpZihibj0hMCxYdClmb3IobGV0IGhuPTA7aG48''@;'; put 'put ''T24ubGVuZ3RoO2huKyspaWYodm4oT25baG5dLCR0KSlyZXR1cm59ZWxzZSBPbj1SdFtEbl09W107Y29uc3Qgam49UnQuY29uc3RydWN0b3IubmFtZSxDbj1kbltqbl07Q24mJihJbj1DbltGdF0pLElufHwoSW49am4rRysoV3Q/V3QoRnQpOkZ0KSksSXQub3B0aW9ucz1sbixGbiYmKEl0Lm9w''@;'; put 'put ''dGlvbnMub25jZT0hMSksSXQudGFyZ2V0PVJ0LEl0LmNhcHR1cmU9QW4sSXQuZXZlbnROYW1lPUZ0LEl0LmlzRXhpc3Rpbmc9Ym47Y29uc3QgUG49a3Q/eG46dm9pZCAwO1BuJiYoUG4udGFza0RhdGE9SXQpLFNuJiYoSXQub3B0aW9ucy5zaWduYWw9dm9pZCAwKTtjb25zdCBmbj1Cbi5zY2hl''@;'; put 'put ''ZHVsZUV2ZW50VGFzayhJbiwkdCxQbixwdCxNdCk7aWYoU24pe0l0Lm9wdGlvbnMuc2lnbmFsPVNuO2NvbnN0IGhuPSgpPT5mbi56b25lLmNhbmNlbFRhc2soZm4pO2suY2FsbChTbiwiYWJvcnQiLGhuLHtvbmNlOiEwfSksZm4ucmVtb3ZlQWJvcnRMaXN0ZW5lcj0oKT0+U24ucmVtb3ZlRXZl''@;'; put 'put ''bnRMaXN0ZW5lcigiYWJvcnQiLGhuKX1yZXR1cm4gSXQudGFyZ2V0PW51bGwsUG4mJihQbi50YXNrRGF0YT1udWxsKSxGbiYmKEl0Lm9wdGlvbnMub25jZT0hMCksIXJuJiYiYm9vbGVhbiI9PXR5cGVvZiBmbi5vcHRpb25zfHwoZm4ub3B0aW9ucz1sbiksZm4udGFyZ2V0PVJ0LGZuLmNhcHR1''@;'; put 'put ''cmU9QW4sZm4uZXZlbnROYW1lPUZ0LFV0JiYoZm4ub3JpZ2luYWxEZWxlZ2F0ZT0kdCksd3Q/T24udW5zaGlmdChmbik6T24ucHVzaChmbiksY3Q/UnQ6dm9pZCAwfX07cmV0dXJuIHV0W05dPVcoVHQsU3QsWnQsQ3QsS3QpLEp0JiYodXRbcnRdPVcoSnQseHQsZnVuY3Rpb24oayl7cmV0dXJu''@;'; put 'put ''IEp0LmNhbGwoSXQudGFyZ2V0LEl0LmV2ZW50TmFtZSxrLmludm9rZSxJdC5vcHRpb25zKX0sQ3QsS3QsITApKSx1dFtKXT1mdW5jdGlvbigpe2NvbnN0IGs9dGhpc3x8UztsZXQgRz1hcmd1bWVudHNbMF07WSYmWS50cmFuc2ZlckV2ZW50TmFtZSYmKEc9WS50cmFuc2ZlckV2ZW50TmFtZShH''@;'; put 'put ''KSk7Y29uc3QgcHQ9YXJndW1lbnRzWzJdLE10PSEhcHQmJigiYm9vbGVhbiI9PXR5cGVvZiBwdHx8cHQuY2FwdHVyZSksY3Q9YXJndW1lbnRzWzFdO2lmKCFjdClyZXR1cm4gZ3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKEx0JiYhTHQoZ3QsY3Qsayxhcmd1bWVudHMpKXJldHVybjtjb25z''@;'; put 'put ''dCB3dD1xdFtHXTtsZXQgUnQ7d3QmJihSdD13dFtNdD9tOkVdKTtjb25zdCBGdD1SdCYma1tSdF07aWYoRnQpZm9yKGxldCAkdD0wOyR0PEZ0Lmxlbmd0aDskdCsrKXtjb25zdCBVdD1GdFskdF07aWYodm4oVXQsY3QpKXJldHVybiBGdC5zcGxpY2UoJHQsMSksVXQuaXNSZW1vdmVkPSEwLDAh''@;'; put 'put ''PT1GdC5sZW5ndGh8fChVdC5hbGxSZW1vdmVkPSEwLGtbUnRdPW51bGwsTXR8fCJzdHJpbmciIT10eXBlb2YgRyl8fChrW2crIk9OX1BST1BFUlRZIitHXT1udWxsKSxVdC56b25lLmNhbmNlbFRhc2soVXQpLEt0P2s6dm9pZCAwfXJldHVybiBndC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHV0''@;'; put 'put ''W290XT1mdW5jdGlvbigpe2NvbnN0IGs9dGhpc3x8UztsZXQgRz1hcmd1bWVudHNbMF07WSYmWS50cmFuc2ZlckV2ZW50TmFtZSYmKEc9WS50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgcHQ9W10sTXQ9aChrLFd0P1d0KEcpOkcpO2ZvcihsZXQgY3Q9MDtjdDxNdC5sZW5ndGg7Y3QrKyl7''@;'; put 'put ''Y29uc3Qgd3Q9TXRbY3RdO3B0LnB1c2god3Qub3JpZ2luYWxEZWxlZ2F0ZT93dC5vcmlnaW5hbERlbGVnYXRlOnd0LmNhbGxiYWNrKX1yZXR1cm4gcHR9LHV0W3N0XT1mdW5jdGlvbigpe2NvbnN0IGs9dGhpc3x8UztsZXQgRz1hcmd1bWVudHNbMF07aWYoRyl7WSYmWS50cmFuc2ZlckV2ZW50''@;'; put 'put ''TmFtZSYmKEc9WS50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgcHQ9cXRbR107aWYocHQpe2NvbnN0IHd0PWtbcHRbRV1dLFJ0PWtbcHRbbV1dO2lmKHd0KXtjb25zdCBGdD13dC5zbGljZSgpO2ZvcihsZXQgJHQ9MDskdDxGdC5sZW5ndGg7JHQrKyl7Y29uc3QgVXQ9RnRbJHRdO3RoaXNb''@;'; put 'put ''Sl0uY2FsbCh0aGlzLEcsVXQub3JpZ2luYWxEZWxlZ2F0ZT9VdC5vcmlnaW5hbERlbGVnYXRlOlV0LmNhbGxiYWNrLFV0Lm9wdGlvbnMpfX1pZihSdCl7Y29uc3QgRnQ9UnQuc2xpY2UoKTtmb3IobGV0ICR0PTA7JHQ8RnQubGVuZ3RoOyR0Kyspe2NvbnN0IFV0PUZ0WyR0XTt0aGlzW0pdLmNh''@;'; put 'put ''bGwodGhpcyxHLFV0Lm9yaWdpbmFsRGVsZWdhdGU/VXQub3JpZ2luYWxEZWxlZ2F0ZTpVdC5jYWxsYmFjayxVdC5vcHRpb25zKX19fX1lbHNle2NvbnN0IHB0PU9iamVjdC5rZXlzKGspO2ZvcihsZXQgTXQ9MDtNdDxwdC5sZW5ndGg7TXQrKyl7Y29uc3Qgd3Q9c24uZXhlYyhwdFtNdF0pO2xl''@;'; put 'put ''dCBSdD13dCYmd3RbMV07UnQmJiJyZW1vdmVMaXN0ZW5lciIhPT1SdCYmdGhpc1tzdF0uY2FsbCh0aGlzLFJ0KX10aGlzW3N0XS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoS3QpcmV0dXJuIHRoaXN9LE90KHV0W05dLFR0KSxPdCh1dFtKXSxndCksZW4mJk90KHV0W3N0XSxlbiks''@;'; put 'put ''UHQmJk90KHV0W290XSxQdCksITB9bGV0IFZ0PVtdO2ZvcihsZXQgdnQ9MDt2dDxCLmxlbmd0aDt2dCsrKVZ0W3Z0XT1ubihCW3Z0XSxPKTtyZXR1cm4gVnR9ZnVuY3Rpb24gaChTLFIpe2lmKCFSKXtjb25zdCBKPVtdO2ZvcihsZXQgb3QgaW4gUyl7Y29uc3Qgc3Q9c24uZXhlYyhvdCk7bGV0''@;'; put 'put ''IGx0PXN0JiZzdFsxXTtpZihsdCYmKCFSfHxsdD09PVIpKXtjb25zdCBTdD1TW290XTtpZihTdClmb3IobGV0IHJ0PTA7cnQ8U3QubGVuZ3RoO3J0KyspSi5wdXNoKFN0W3J0XSl9fXJldHVybiBKfWxldCBCPXF0W1JdO0J8fChtbihSKSxCPXF0W1JdKTtjb25zdCBPPVNbQltFXV0sTj1TW0Jb''@;'; put 'put ''bV1dO3JldHVybiBPP04/Ty5jb25jYXQoTik6Ty5zbGljZSgpOk4/Ti5zbGljZSgpOltdfWZ1bmN0aW9uIHIoUyxSKXtjb25zdCBCPVMuRXZlbnQ7QiYmQi5wcm90b3R5cGUmJlIucGF0Y2hNZXRob2QoQi5wcm90b3R5cGUsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsTz0+ZnVuY3Rpb24o''@;'; put 'put ''TixKKXtOW190XT0hMCxPJiZPLmFwcGx5KE4sSil9KX1jb25zdCB5PXgoInpvbmVUYXNrIik7ZnVuY3Rpb24gUChTLFIsQixPKXtsZXQgTj1udWxsLEo9bnVsbDtCKz1PO2NvbnN0IG90PXt9O2Z1bmN0aW9uIHN0KFN0KXtjb25zdCBydD1TdC5kYXRhO3J0LmFyZ3NbMF09ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gU3QuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y29uc3QgeHQ9Ti5hcHBseShTLHJ0LmFyZ3MpO3JldHVybiB5bih4dCk/cnQuaGFuZGxlSWQ9eHQ6KHJ0LmhhbmRsZT14dCxydC5pc1JlZnJlc2hhYmxlPXVuKHh0LnJlZnJlc2gpKSxTdH1mdW5jdGlvbiBsdChTdCl7Y29u''@;'; put 'put ''c3R7aGFuZGxlOnJ0LGhhbmRsZUlkOnh0fT1TdC5kYXRhO3JldHVybiBKLmNhbGwoUyxydD8/eHQpfU49ZHQoUyxSKz1PLFN0PT5mdW5jdGlvbihydCx4dCl7aWYodW4oeHRbMF0pKXtjb25zdCBEdD17aXNSZWZyZXNoYWJsZTohMSxpc1BlcmlvZGljOiJJbnRlcnZhbCI9PT1PLGRlbGF5OiJU''@;'; put 'put ''aW1lb3V0Ij09PU98fCJJbnRlcnZhbCI9PT1PP3h0WzFdfHwwOnZvaWQgMCxhcmdzOnh0fSxCdD14dFswXTt4dFswXT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gQnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7Y29uc3R7aGFuZGxlOmt0LGhhbmRsZUlkOkx0LGlzUGVyaW9kaWM6WHQs''@;'; put 'put ''aXNSZWZyZXNoYWJsZTpLdH09RHQ7IVh0JiYhS3QmJihMdD9kZWxldGUgb3RbTHRdOmt0JiYoa3RbeV09bnVsbCkpfX07Y29uc3QgSHQ9RihSLHh0WzBdLER0LHN0LGx0KTtpZighSHQpcmV0dXJuIEh0O2NvbnN0e2hhbmRsZUlkOnRuLGhhbmRsZTpubixpc1JlZnJlc2hhYmxlOlZ0LGlzUGVy''@;'; put 'put ''aW9kaWM6dnR9PUh0LmRhdGE7aWYodG4pb3RbdG5dPUh0O2Vsc2UgaWYobm4mJihublt5XT1IdCxWdCYmIXZ0KSl7Y29uc3QgWT1ubi5yZWZyZXNoO25uLnJlZnJlc2g9ZnVuY3Rpb24oKXtjb25zdHt6b25lOmt0LHN0YXRlOkx0fT1IdDtyZXR1cm4ibm90U2NoZWR1bGVkIj09PUx0PyhIdC5f''@;'; put 'put ''c3RhdGU9InNjaGVkdWxlZCIsa3QuX3VwZGF0ZVRhc2tDb3VudChIdCwxKSk6InJ1bm5pbmciPT09THQmJihIdC5fc3RhdGU9InNjaGVkdWxpbmciKSxZLmNhbGwodGhpcyl9fXJldHVybiBubj8/dG4/P0h0fXJldHVybiBTdC5hcHBseShTLHh0KX0pLEo9ZHQoUyxCLFN0PT5mdW5jdGlvbihy''@;'; put 'put ''dCx4dCl7Y29uc3QgRHQ9eHRbMF07bGV0IEJ0O3luKER0KT8oQnQ9b3RbRHRdLGRlbGV0ZSBvdFtEdF0pOihCdD1EdD8uW3ldLEJ0P0R0W3ldPW51bGw6QnQ9RHQpLEJ0Py50eXBlP0J0LmNhbmNlbEZuJiZCdC56b25lLmNhbmNlbFRhc2soQnQpOlN0LmFwcGx5KFMseHQpfSl9ZnVuY3Rpb24g''@;'; put 'put ''XyhTLFIsQil7aWYoIUJ8fDA9PT1CLmxlbmd0aClyZXR1cm4gUjtjb25zdCBPPUIuZmlsdGVyKEo9PkoudGFyZ2V0PT09Uyk7aWYoIU98fDA9PT1PLmxlbmd0aClyZXR1cm4gUjtjb25zdCBOPU9bMF0uaWdub3JlUHJvcGVydGllcztyZXR1cm4gUi5maWx0ZXIoSj0+LTE9PT1OLmluZGV4T2Yo''@;'; put 'put ''SikpfWZ1bmN0aW9uIEgoUyxSLEIsTyl7UyYmZXQoUyxfKFMsUixCKSxPKX1mdW5jdGlvbiBRKFMpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTKS5maWx0ZXIoUj0+Ui5zdGFydHNXaXRoKCJvbiIpJiZSLmxlbmd0aD4yKS5tYXAoUj0+Ui5zdWJzdHJpbmcoMikpfWZ1bmN0''@;'; put 'put ''aW9uIE1uKFMsUixCLE8sTil7Y29uc3QgSj1ab25lLl9fc3ltYm9sX18oTyk7aWYoUltKXSlyZXR1cm47Y29uc3Qgb3Q9UltKXT1SW09dO1JbT109ZnVuY3Rpb24oc3QsbHQsU3Qpe3JldHVybiBsdCYmbHQucHJvdG90eXBlJiZOLmZvckVhY2goZnVuY3Rpb24ocnQpe2NvbnN0IHh0PWAke0J9''@;'; put 'put ''LiR7T306OmArcnQsRHQ9bHQucHJvdG90eXBlO3RyeXtpZihEdC5oYXNPd25Qcm9wZXJ0eShydCkpe2NvbnN0IEJ0PVMuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKER0LHJ0KTtCdCYmQnQudmFsdWU/KEJ0LnZhbHVlPVMud3JhcFdpdGhDdXJyZW50Wm9uZShCdC52YWx1ZSx4dCks''@;'; put 'put ''Uy5fcmVkZWZpbmVQcm9wZXJ0eShsdC5wcm90b3R5cGUscnQsQnQpKTpEdFtydF0mJihEdFtydF09Uy53cmFwV2l0aEN1cnJlbnRab25lKER0W3J0XSx4dCkpfWVsc2UgRHRbcnRdJiYoRHRbcnRdPVMud3JhcFdpdGhDdXJyZW50Wm9uZShEdFtydF0seHQpKX1jYXRjaHt9fSksb3QuY2FsbChS''@;'; put 'put ''LHN0LGx0LFN0KX0sUy5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQoUltPXSxvdCl9Y29uc3QgUm49ZnVuY3Rpb24gbigpe2NvbnN0IFM9Z2xvYmFsVGhpcyxSPSEwPT09U1tsKCJmb3JjZUR1cGxpY2F0ZVpvbmVDaGVjayIpXTtpZihTLlpvbmUmJihSfHwiZnVuY3Rpb24iIT10eXBlb2YgUy5ab25l''@;'; put 'put ''Ll9fc3ltYm9sX18pKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTtyZXR1cm4gUy5ab25lPz89ZnVuY3Rpb24gdCgpe2NvbnN0IFM9Yy5wZXJmb3JtYW5jZTtmdW5jdGlvbiBSKEF0KXtTJiZTLm1hcmsmJlMubWFyayhBdCl9ZnVuY3Rpb24gQihBdCxhdCl7UyYmUy5t''@;'; put 'put ''ZWFzdXJlJiZTLm1lYXN1cmUoQXQsYXQpfVIoIlpvbmUiKTtsZXQgTz0oKCk9PntjbGFzcyBBdHtzdGF0aWN7dGhpcy5fX3N5bWJvbF9fPWx9c3RhdGljIGFzc2VydFpvbmVQYXRjaGVkKCl7aWYoYy5Qcm9taXNlIT09SXQuWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUu''@;'; put 'put ''anMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBsaWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBv''@;'; put 'put ''bHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfXN0YXRpYyBnZXQgcm9vdCgpe2xldCBBPUF0LmN1cnJlbnQ7Zm9yKDtBLnBhcmVu''@;'; put 'put ''dDspQT1BLnBhcmVudDtyZXR1cm4gQX1zdGF0aWMgZ2V0IGN1cnJlbnQoKXtyZXR1cm4gZ3Quem9uZX1zdGF0aWMgZ2V0IGN1cnJlbnRUYXNrKCl7cmV0dXJuIFB0fXN0YXRpYyBfX2xvYWRfcGF0Y2goQSxqLGh0PSExKXtpZihJdC5oYXNPd25Qcm9wZXJ0eShBKSl7Y29uc3QgRXQ9ITA9PT1j''@;'; put 'put ''W2woImZvcmNlRHVwbGljYXRlWm9uZUNoZWNrIildO2lmKCFodCYmRXQpdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK0EpfWVsc2UgaWYoIWNbIl9fWm9uZV9kaXNhYmxlXyIrQV0pe2NvbnN0IEV0PSJab25lOiIrQTtSKEV0KSxJdFtBXT1qKGMsQXQsVHQpLEIoRXQsRXQp''@;'; put 'put ''fX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfWNvbnN0cnVjdG9yKEEsail7dGhpcy5fcGFyZW50PUEsdGhpcy5fbmFtZT1qP2oubmFtZXx8InVubmFtZWQiOiI8cm9vdD4iLHRoaXMuX3Byb3BlcnRpZXM9aiYmai5wcm9wZXJ0''@;'; put 'put ''aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IEoodGhpcyx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fem9uZURlbGVnYXRlLGopfWdldChBKXtjb25zdCBqPXRoaXMuZ2V0Wm9uZVdpdGgoQSk7aWYoailyZXR1cm4gai5fcHJvcGVydGllc1tBXX1nZXRab25lV2l0aChBKXtsZXQg''@;'; put 'put ''aj10aGlzO2Zvcig7ajspe2lmKGouX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoQSkpcmV0dXJuIGo7aj1qLl9wYXJlbnR9cmV0dXJuIG51bGx9Zm9yayhBKXtpZighQSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9y''@;'; put 'put ''ayh0aGlzLEEpfXdyYXAoQSxqKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgQSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBmdW5jdGlvbiBnb3Q6ICIrQSk7Y29uc3QgaHQ9dGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLEEsaiksRXQ9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gRXQucnVuR3VhcmRlZChodCx0aGlzLGFyZ3VtZW50cyxqKX19cnVuKEEsaixodCxFdCl7Z3Q9e3BhcmVudDpndCx6b25lOnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLEEsaixodCxFdCl9ZmluYWxseXtndD1ndC5wYXJlbnR9fXJ1bkd1YXJk''@;'; put 'put ''ZWQoQSxqPW51bGwsaHQsRXQpe2d0PXtwYXJlbnQ6Z3Qsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsQSxqLGh0LEV0KX1jYXRjaChadCl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsWnQpKXRocm93IFp0fX1m''@;'; put 'put ''aW5hbGx5e2d0PWd0LnBhcmVudH19cnVuVGFzayhBLGosaHQpe2lmKEEuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoQS56b25lfHxubikubmFtZSsiOyBFeGVjdXRpb246ICIr''@;'; put 'put ''dGhpcy5uYW1lKyIpIik7Y29uc3QgRXQ9QSx7dHlwZTpadCxkYXRhOntpc1BlcmlvZGljOkN0PSExLGlzUmVmcmVzaGFibGU6Z249ITF9PXt9fT1BO2lmKEEuc3RhdGU9PT1WdCYmKFp0PT09V3R8fFp0PT09dXQpKXJldHVybjtjb25zdCB2bj1BLnN0YXRlIT1rdDt2biYmRXQuX3RyYW5zaXRp''@;'; put 'put ''b25UbyhrdCxZKTtjb25zdCBwbj1QdDtQdD1FdCxndD17cGFyZW50Omd0LHpvbmU6dGhpc307dHJ5e1p0PT11dCYmQS5kYXRhJiYhQ3QmJiFnbiYmKEEuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsRXQsaixodCl9Y2F0Y2go''@;'; put 'put ''Y24pe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGNuKSl0aHJvdyBjbn19ZmluYWxseXtjb25zdCBjbj1BLnN0YXRlO2lmKGNuIT09VnQmJmNuIT09WHQpaWYoWnQ9PVd0fHxDdHx8Z24mJmNuPT09dnQpdm4mJkV0Ll90cmFuc2l0aW9uVG8oWSxrdCx2dCk7ZWxzZXtj''@;'; put 'put ''b25zdCB6PUV0Ll96b25lRGVsZWdhdGVzO3RoaXMuX3VwZGF0ZVRhc2tDb3VudChFdCwtMSksdm4mJkV0Ll90cmFuc2l0aW9uVG8oVnQsa3QsVnQpLGduJiYoRXQuX3pvbmVEZWxlZ2F0ZXM9eil9Z3Q9Z3QucGFyZW50LFB0PXBufX1zY2hlZHVsZVRhc2soQSl7aWYoQS56b25lJiZBLnpvbmUh''@;'; put 'put ''PT10aGlzKXtsZXQgaHQ9dGhpcztmb3IoO2h0Oyl7aWYoaHQ9PT1BLnpvbmUpdGhyb3cgRXJyb3IoYGNhbiBub3QgcmVzY2hlZHVsZSB0YXNrIHRvICR7dGhpcy5uYW1lfSB3aGljaCBpcyBkZXNjZW5kYW50cyBvZiB0aGUgb3JpZ2luYWwgem9uZSAke0Euem9uZS5uYW1lfWApO2h0PWh0LnBh''@;'; put 'put ''cmVudH19QS5fdHJhbnNpdGlvblRvKHZ0LFZ0KTtjb25zdCBqPVtdO0EuX3pvbmVEZWxlZ2F0ZXM9aixBLl96b25lPXRoaXM7dHJ5e0E9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLEEpfWNhdGNoKGh0KXt0aHJvdyBBLl90cmFuc2l0aW9uVG8oWHQsdnQsVnQpLHRoaXMu''@;'; put 'put ''X3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGh0KSxodH1yZXR1cm4gQS5fem9uZURlbGVnYXRlcz09PWomJnRoaXMuX3VwZGF0ZVRhc2tDb3VudChBLDEpLEEuc3RhdGU9PXZ0JiZBLl90cmFuc2l0aW9uVG8oWSx2dCksQX1zY2hlZHVsZU1pY3JvVGFzayhBLGosaHQsRXQpe3JldHVy''@;'; put 'put ''biB0aGlzLnNjaGVkdWxlVGFzayhuZXcgb3QoS3QsQSxqLGh0LEV0LHZvaWQgMCkpfXNjaGVkdWxlTWFjcm9UYXNrKEEsaixodCxFdCxadCl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBvdCh1dCxBLGosaHQsRXQsWnQpKX1zY2hlZHVsZUV2ZW50VGFzayhBLGosaHQsRXQsWnQpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgb3QoV3QsQSxqLGh0LEV0LFp0KSl9Y2FuY2VsVGFzayhBKXtpZihBLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKEEu''@;'; put 'put ''em9uZXx8bm4pLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKEEuc3RhdGU9PT1ZfHxBLnN0YXRlPT09a3Qpe0EuX3RyYW5zaXRpb25UbyhMdCxZLGt0KTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyxBKX1jYXRjaChqKXt0aHJvdyBBLl90cmFu''@;'; put 'put ''c2l0aW9uVG8oWHQsTHQpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGopLGp9cmV0dXJuIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChBLC0xKSxBLl90cmFuc2l0aW9uVG8oVnQsTHQpLEEucnVuQ291bnQ9LTEsQX19X3VwZGF0ZVRhc2tDb3VudChBLGope2NvbnN0IGh0PUEu''@;'; put 'put ''X3pvbmVEZWxlZ2F0ZXM7LTE9PWomJihBLl96b25lRGVsZWdhdGVzPW51bGwpO2ZvcihsZXQgRXQ9MDtFdDxodC5sZW5ndGg7RXQrKylodFtFdF0uX3VwZGF0ZVRhc2tDb3VudChBLnR5cGUsail9fXJldHVybiBBdH0pKCk7Y29uc3QgTj17bmFtZToiIixvbkhhc1Rhc2s6KEF0LGF0LEEsaik9''@;'; put 'put ''PkF0Lmhhc1Rhc2soQSxqKSxvblNjaGVkdWxlVGFzazooQXQsYXQsQSxqKT0+QXQuc2NoZWR1bGVUYXNrKEEsaiksb25JbnZva2VUYXNrOihBdCxhdCxBLGosaHQsRXQpPT5BdC5pbnZva2VUYXNrKEEsaixodCxFdCksb25DYW5jZWxUYXNrOihBdCxhdCxBLGopPT5BdC5jYW5jZWxUYXNrKEEs''@;'; put 'put ''ail9O2NsYXNzIEp7Z2V0IHpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1jb25zdHJ1Y3RvcihhdCxBLGope3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLl96b25lPWF0LHRoaXMuX3BhcmVudERlbGVnYXRlPUEsdGhpcy5fZm9ya1pT''@;'; put 'put ''PWomJihqJiZqLm9uRm9yaz9qOkEuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9aiYmKGoub25Gb3JrP0E6QS5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1qJiYoai5vbkZvcms/dGhpcy5fem9uZTpBLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPWomJihqLm9uSW50ZXJj''@;'; put 'put ''ZXB0P2o6QS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9aiYmKGoub25JbnRlcmNlcHQ/QTpBLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1qJiYoai5vbkludGVyY2VwdD90aGlzLl96b25lOkEuX2ludGVyY2VwdEN1cnJab25lKSx0aGlzLl9pbnZv''@;'; put 'put ''a2VaUz1qJiYoai5vbkludm9rZT9qOkEuX2ludm9rZVpTKSx0aGlzLl9pbnZva2VEbGd0PWomJihqLm9uSW52b2tlP0E6QS5faW52b2tlRGxndCksdGhpcy5faW52b2tlQ3VyclpvbmU9aiYmKGoub25JbnZva2U/dGhpcy5fem9uZTpBLl9pbnZva2VDdXJyWm9uZSksdGhpcy5faGFuZGxlRXJy''@;'; put 'put ''b3JaUz1qJiYoai5vbkhhbmRsZUVycm9yP2o6QS5faGFuZGxlRXJyb3JaUyksdGhpcy5faGFuZGxlRXJyb3JEbGd0PWomJihqLm9uSGFuZGxlRXJyb3I/QTpBLl9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9aiYmKGoub25IYW5kbGVFcnJvcj90aGlzLl96b25l''@;'; put 'put ''OkEuX2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPWomJihqLm9uU2NoZWR1bGVUYXNrP2o6QS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9aiYmKGoub25TY2hlZHVsZVRhc2s/QTpBLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hl''@;'; put 'put ''ZHVsZVRhc2tDdXJyWm9uZT1qJiYoai5vblNjaGVkdWxlVGFzaz90aGlzLl96b25lOkEuX3NjaGVkdWxlVGFza0N1cnJab25lKSx0aGlzLl9pbnZva2VUYXNrWlM9aiYmKGoub25JbnZva2VUYXNrP2o6QS5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1qJiYoai5vbkludm9r''@;'; put 'put ''ZVRhc2s/QTpBLl9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPWomJihqLm9uSW52b2tlVGFzaz90aGlzLl96b25lOkEuX2ludm9rZVRhc2tDdXJyWm9uZSksdGhpcy5fY2FuY2VsVGFza1pTPWomJihqLm9uQ2FuY2VsVGFzaz9qOkEuX2NhbmNlbFRhc2taUyksdGhp''@;'; put 'put ''cy5fY2FuY2VsVGFza0RsZ3Q9aiYmKGoub25DYW5jZWxUYXNrP0E6QS5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1qJiYoai5vbkNhbmNlbFRhc2s/dGhpcy5fem9uZTpBLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hh''@;'; put 'put ''c1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO2NvbnN0IGh0PWomJmoub25IYXNUYXNrOyhodHx8QSYmQS5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1odD9qOk4sdGhpcy5faGFzVGFza0RsZ3Q9QSx0aGlz''@;'; put 'put ''Ll9oYXNUYXNrRGxndE93bmVyPXRoaXMsdGhpcy5faGFzVGFza0N1cnJab25lPXRoaXMuX3pvbmUsai5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPU4sdGhpcy5fc2NoZWR1bGVUYXNrRGxndD1BLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuX3pvbmUpLGou''@;'; put 'put ''b25JbnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPU4sdGhpcy5faW52b2tlVGFza0RsZ3Q9QSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy5fem9uZSksai5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9Tix0aGlzLl9jYW5jZWxUYXNrRGxndD1BLHRoaXMuX2Nh''@;'; put 'put ''bmNlbFRhc2tDdXJyWm9uZT10aGlzLl96b25lKSl9Zm9yayhhdCxBKXtyZXR1cm4gdGhpcy5fZm9ya1pTP3RoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsdGhpcy56b25lLGF0LEEpOm5ldyBPKGF0LEEpfWludGVyY2VwdChhdCxBLGope3JldHVybiB0aGlzLl9pbnRlcmNlcHRa''@;'; put 'put ''Uz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLGF0LEEsaik6QX1pbnZva2UoYXQsQSxqLGh0LEV0KXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tl''@;'; put 'put ''RGxndCx0aGlzLl9pbnZva2VDdXJyWm9uZSxhdCxBLGosaHQsRXQpOkEuYXBwbHkoaixodCl9aGFuZGxlRXJyb3IoYXQsQSl7cmV0dXJuIXRoaXMuX2hhbmRsZUVycm9yWlN8fHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsdGhpcy5faGFu''@;'; put 'put ''ZGxlRXJyb3JDdXJyWm9uZSxhdCxBKX1zY2hlZHVsZVRhc2soYXQsQSl7bGV0IGo9QTtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJmouX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSxqPXRoaXMuX3NjaGVkdWxlVGFza1pTLm9uU2No''@;'; put 'put ''ZWR1bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUsYXQsQSksanx8KGo9QSk7ZWxzZSBpZihBLnNjaGVkdWxlRm4pQS5zY2hlZHVsZUZuKEEpO2Vsc2V7aWYoQS50eXBlIT1LdCl0aHJvdyBuZXcgRXJyb3IoIlRhc2sgaXMgbWlzc2luZyBz''@;'; put 'put ''Y2hlZHVsZUZuLiIpO0h0KEEpfXJldHVybiBqfWludm9rZVRhc2soYXQsQSxqLGh0KXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLGF0LEEsaixodCk6''@;'; put 'put ''QS5jYWxsYmFjay5hcHBseShqLGh0KX1jYW5jZWxUYXNrKGF0LEEpe2xldCBqO2lmKHRoaXMuX2NhbmNlbFRhc2taUylqPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLGF0LEEpO2Vsc2V7aWYoIUEu''@;'; put 'put ''Y2FuY2VsRm4pdGhyb3cgRXJyb3IoIlRhc2sgaXMgbm90IGNhbmNlbGFibGUiKTtqPUEuY2FuY2VsRm4oQSl9cmV0dXJuIGp9aGFzVGFzayhhdCxBKXt0cnl7dGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tD''@;'; put 'put ''dXJyWm9uZSxhdCxBKX1jYXRjaChqKXt0aGlzLmhhbmRsZUVycm9yKGF0LGopfX1fdXBkYXRlVGFza0NvdW50KGF0LEEpe2NvbnN0IGo9dGhpcy5fdGFza0NvdW50cyxodD1qW2F0XSxFdD1qW2F0XT1odCtBO2lmKEV0PDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRo''@;'; put 'put ''ZW4gd2VyZSBzY2hlZHVsZWQuIik7MCE9aHQmJjAhPUV0fHx0aGlzLmhhc1Rhc2sodGhpcy5fem9uZSx7bWljcm9UYXNrOmoubWljcm9UYXNrPjAsbWFjcm9UYXNrOmoubWFjcm9UYXNrPjAsZXZlbnRUYXNrOmouZXZlbnRUYXNrPjAsY2hhbmdlOmF0fSl9fWNsYXNzIG90e2NvbnN0cnVjdG9y''@;'; put 'put ''KGF0LEEsaixodCxFdCxadCl7aWYodGhpcy5fem9uZT1udWxsLHRoaXMucnVuQ291bnQ9MCx0aGlzLl96b25lRGVsZWdhdGVzPW51bGwsdGhpcy5fc3RhdGU9Im5vdFNjaGVkdWxlZCIsdGhpcy50eXBlPWF0LHRoaXMuc291cmNlPUEsdGhpcy5kYXRhPWh0LHRoaXMuc2NoZWR1bGVGbj1FdCx0''@;'; put 'put ''aGlzLmNhbmNlbEZuPVp0LCFqKXRocm93IG5ldyBFcnJvcigiY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTt0aGlzLmNhbGxiYWNrPWo7Y29uc3QgQ3Q9dGhpczt0aGlzLmludm9rZT1hdD09PVd0JiZodCYmaHQudXNlRz9vdC5pbnZva2VUYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIG90Lmludm9r''@;'; put 'put ''ZVRhc2suY2FsbChjLEN0LHRoaXMsYXJndW1lbnRzKX19c3RhdGljIGludm9rZVRhc2soYXQsQSxqKXthdHx8KGF0PXRoaXMpLGVuKys7dHJ5e3JldHVybiBhdC5ydW5Db3VudCsrLGF0LnpvbmUucnVuVGFzayhhdCxBLGopfWZpbmFsbHl7MT09ZW4mJnRuKCksZW4tLX19Z2V0IHpvbmUoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fem9uZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV9Y2FuY2VsU2NoZWR1bGVSZXF1ZXN0KCl7dGhpcy5fdHJhbnNpdGlvblRvKFZ0LHZ0KX1fdHJhbnNpdGlvblRvKGF0LEEsail7aWYodGhpcy5fc3RhdGUhPT1BJiZ0aGlzLl9zdGF0ZSE9PWopdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKGAke3RoaXMudHlwZX0gJyR7dGhpcy5zb3VyY2V9JzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICcke2F0fScsIGV4cGVjdGluZyBzdGF0ZSAnJHtBfScke2o/IiBvciAnIitqKyInIjoiIn0sIHdhcyAnJHt0aGlzLl9zdGF0ZX0nLmApO3RoaXMuX3N0YXRlPWF0LGF0PT1WdCYmKHRo''@;'; put 'put ''aXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXRhJiZ0eXBlb2YgdGhpcy5kYXRhLmhhbmRsZUlkPCJ1Ij90aGlzLmRhdGEuaGFuZGxlSWQudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyl9dG9KU09OKCl7cmV0dXJu''@;'; put 'put ''e3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19fWNvbnN0IHN0PWwoInNldFRpbWVvdXQiKSxsdD1sKCJQcm9taXNlIiksU3Q9bCgidGhlbiIpO2xldCBEdCxydD1bXSx4''@;'; put 'put ''dD0hMTtmdW5jdGlvbiBCdChBdCl7aWYoRHR8fGNbbHRdJiYoRHQ9Y1tsdF0ucmVzb2x2ZSgwKSksRHQpe2xldCBhdD1EdFtTdF07YXR8fChhdD1EdC50aGVuKSxhdC5jYWxsKER0LEF0KX1lbHNlIGNbc3RdKEF0LDApfWZ1bmN0aW9uIEh0KEF0KXswPT09ZW4mJjA9PT1ydC5sZW5ndGgmJkJ0''@;'; put 'put ''KHRuKSxBdCYmcnQucHVzaChBdCl9ZnVuY3Rpb24gdG4oKXtpZigheHQpe2Zvcih4dD0hMDtydC5sZW5ndGg7KXtjb25zdCBBdD1ydDtydD1bXTtmb3IobGV0IGF0PTA7YXQ8QXQubGVuZ3RoO2F0Kyspe2NvbnN0IEE9QXRbYXRdO3RyeXtBLnpvbmUucnVuVGFzayhBLG51bGwsbnVsbCl9Y2F0''@;'; put 'put ''Y2goail7VHQub25VbmhhbmRsZWRFcnJvcihqKX19fVR0Lm1pY3JvdGFza0RyYWluRG9uZSgpLHh0PSExfX1jb25zdCBubj17bmFtZToiTk8gWk9ORSJ9LFZ0PSJub3RTY2hlZHVsZWQiLHZ0PSJzY2hlZHVsaW5nIixZPSJzY2hlZHVsZWQiLGt0PSJydW5uaW5nIixMdD0iY2FuY2VsaW5nIixY''@;'; put 'put ''dD0idW5rbm93biIsS3Q9Im1pY3JvVGFzayIsdXQ9Im1hY3JvVGFzayIsV3Q9ImV2ZW50VGFzayIsSXQ9e30sVHQ9e3N5bWJvbDpsLGN1cnJlbnRab25lRnJhbWU6KCk9Pmd0LG9uVW5oYW5kbGVkRXJyb3I6SnQsbWljcm90YXNrRHJhaW5Eb25lOkp0LHNjaGVkdWxlTWljcm9UYXNrOkh0LHNo''@;'; put 'put ''b3dVbmNhdWdodEVycm9yOigpPT4hT1tsKCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yIildLHBhdGNoRXZlbnRUYXJnZXQ6KCk9PltdLHBhdGNoT25Qcm9wZXJ0aWVzOkp0LHBhdGNoTWV0aG9kOigpPT5KdCxiaW5kQXJndW1lbnRzOigpPT5bXSxwYXRjaFRoZW46KCk9Pkp0LHBh''@;'; put 'put ''dGNoTWFjcm9UYXNrOigpPT5KdCxwYXRjaEV2ZW50UHJvdG90eXBlOigpPT5KdCxpc0lFT3JFZGdlOigpPT4hMSxnZXRHbG9iYWxPYmplY3RzOigpPT57fSxPYmplY3REZWZpbmVQcm9wZXJ0eTooKT0+SnQsT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOigpPT57fSxPYmplY3RDcmVh''@;'; put 'put ''dGU6KCk9Pnt9LEFycmF5U2xpY2U6KCk9PltdLHBhdGNoQ2xhc3M6KCk9Pkp0LHdyYXBXaXRoQ3VycmVudFpvbmU6KCk9Pkp0LGZpbHRlclByb3BlcnRpZXM6KCk9PltdLGF0dGFjaE9yaWdpblRvUGF0Y2hlZDooKT0+SnQsX3JlZGVmaW5lUHJvcGVydHk6KCk9Pkp0LHBhdGNoQ2FsbGJhY2tz''@;'; put 'put ''OigpPT5KdCxuYXRpdmVTY2hlZHVsZU1pY3JvVGFzazpCdH07bGV0IGd0PXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBPKG51bGwsbnVsbCl9LFB0PW51bGwsZW49MDtmdW5jdGlvbiBKdCgpe31yZXR1cm4gQigiWm9uZSIsIlpvbmUiKSxPfSgpLFMuWm9uZX0oKTsoZnVuY3Rpb24gTm4oUyl7KGZ1''@;'; put 'put ''bmN0aW9uIFF0KFMpe1MuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIiwoUixCLE8pPT57Y29uc3QgTj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEo9T2JqZWN0LmRlZmluZVByb3BlcnR5LHN0PU8uc3ltYm9sLGx0PVtdLFN0PSExIT09UltzdCgiRElTQUJMRV9XUkFQ''@;'; put 'put ''UElOR19VTkNBVUdIVF9QUk9NSVNFX1JFSkVDVElPTiIpXSxydD1zdCgiUHJvbWlzZSIpLHh0PXN0KCJ0aGVuIiksRHQ9Il9fY3JlYXRpb25UcmFjZV9fIjtPLm9uVW5oYW5kbGVkRXJyb3I9ej0+e2lmKE8uc2hvd1VuY2F1Z2h0RXJyb3IoKSl7Y29uc3QgVz16JiZ6LnJlamVjdGlvbjtXP2Nv''@;'; put 'put ''bnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLFcgaW5zdGFuY2VvZiBFcnJvcj9XLm1lc3NhZ2U6VywiOyBab25lOiIsei56b25lLm5hbWUsIjsgVGFzazoiLHoudGFzayYmei50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLFcsVyBpbnN0YW5jZW9mIEVycm9yP1cuc3Rh''@;'; put 'put ''Y2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKHopfX0sTy5taWNyb3Rhc2tEcmFpbkRvbmU9KCk9Pntmb3IoO2x0Lmxlbmd0aDspe2NvbnN0IHo9bHQuc2hpZnQoKTt0cnl7ei56b25lLnJ1bkd1YXJkZWQoKCk9Pnt0aHJvdyB6LnRocm93T3JpZ2luYWw/ei5yZWplY3Rpb246en0pfWNhdGNoKFcp''@;'; put 'put ''e0h0KFcpfX19O2NvbnN0IEJ0PXN0KCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIEh0KHope08ub25VbmhhbmRsZWRFcnJvcih6KTt0cnl7Y29uc3QgVz1CW0J0XTsiZnVuY3Rpb24iPT10eXBlb2YgVyYmVy5jYWxsKHRoaXMseil9Y2F0Y2h7fX1mdW5jdGlv''@;'; put 'put ''biB0bih6KXtyZXR1cm4geiYmei50aGVufWZ1bmN0aW9uIG5uKHope3JldHVybiB6fWZ1bmN0aW9uIFZ0KHope3JldHVybiBDdC5yZWplY3Qoeil9Y29uc3QgdnQ9c3QoInN0YXRlIiksWT1zdCgidmFsdWUiKSxrdD1zdCgiZmluYWxseSIpLEx0PXN0KCJwYXJlbnRQcm9taXNlVmFsdWUiKSxY''@;'; put 'put ''dD1zdCgicGFyZW50UHJvbWlzZVN0YXRlIiksS3Q9IlByb21pc2UudGhlbiIsdXQ9bnVsbCxXdD0hMCxJdD0hMSxUdD0wO2Z1bmN0aW9uIGd0KHosVyl7cmV0dXJuIGs9Pnt0cnl7QXQoeixXLGspfWNhdGNoKEcpe0F0KHosITEsRyl9fX1jb25zdCBQdD1mdW5jdGlvbigpe2xldCB6PSExO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZnVuY3Rpb24oKXt6fHwoej0hMCxrLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sZW49IlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiLEp0PXN0KCJjdXJyZW50VGFza1RyYWNlIik7ZnVuY3Rpb24gQXQoeixXLGspe2NvbnN0IEc9UHQoKTtp''@;'; put 'put ''Zih6PT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKGVuKTtpZih6W3Z0XT09PXV0KXtsZXQgcHQ9bnVsbDt0cnl7KCJvYmplY3QiPT10eXBlb2Yga3x8ImZ1bmN0aW9uIj09dHlwZW9mIGspJiYocHQ9ayYmay50aGVuKX1jYXRjaChNdCl7cmV0dXJuIEcoKCk9PntBdCh6LCExLE10KX0pKCksen1p''@;'; put 'put ''ZihXIT09SXQmJmsgaW5zdGFuY2VvZiBDdCYmay5oYXNPd25Qcm9wZXJ0eSh2dCkmJmsuaGFzT3duUHJvcGVydHkoWSkmJmtbdnRdIT09dXQpQShrKSxBdCh6LGtbdnRdLGtbWV0pO2Vsc2UgaWYoVyE9PUl0JiYiZnVuY3Rpb24iPT10eXBlb2YgcHQpdHJ5e3B0LmNhbGwoayxHKGd0KHosVykp''@;'; put 'put ''LEcoZ3QoeiwhMSkpKX1jYXRjaChNdCl7RygoKT0+e0F0KHosITEsTXQpfSkoKX1lbHNle3pbdnRdPVc7Y29uc3QgTXQ9eltZXTtpZih6W1ldPWsseltrdF09PT1rdCYmVz09PVd0JiYoelt2dF09eltYdF0seltZXT16W0x0XSksVz09PUl0JiZrIGluc3RhbmNlb2YgRXJyb3Ipe2NvbnN0IGN0''@;'; put 'put ''PUIuY3VycmVudFRhc2smJkIuY3VycmVudFRhc2suZGF0YSYmQi5jdXJyZW50VGFzay5kYXRhW0R0XTtjdCYmSihrLEp0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpjdH0pfWZvcihsZXQgY3Q9MDtjdDxNdC5sZW5ndGg7KWooeixNdFtjdCsrXSxN''@;'; put 'put ''dFtjdCsrXSxNdFtjdCsrXSxNdFtjdCsrXSk7aWYoMD09TXQubGVuZ3RoJiZXPT1JdCl7elt2dF09VHQ7bGV0IGN0PWs7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiK2Z1bmN0aW9uIG90KHope3JldHVybiB6JiZ6LnRvU3RyaW5nPT09T2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZz8oei5jb25zdHJ1Y3RvciYmei5jb25zdHJ1Y3Rvci5uYW1lfHwiIikrIjogIitKU09OLnN0cmluZ2lmeSh6KTp6P3oudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeil9KGspKyhrJiZrLnN0YWNrPyJcbiIray5zdGFjazoiIikpfWNhdGNo''@;'; put 'put ''KHd0KXtjdD13dH1TdCYmKGN0LnRocm93T3JpZ2luYWw9ITApLGN0LnJlamVjdGlvbj1rLGN0LnByb21pc2U9eixjdC56b25lPUIuY3VycmVudCxjdC50YXNrPUIuY3VycmVudFRhc2ssbHQucHVzaChjdCksTy5zY2hlZHVsZU1pY3JvVGFzaygpfX19cmV0dXJuIHp9Y29uc3QgYXQ9c3QoInJl''@;'; put 'put ''amVjdGlvbkhhbmRsZWRIYW5kbGVyIik7ZnVuY3Rpb24gQSh6KXtpZih6W3Z0XT09PVR0KXt0cnl7Y29uc3QgVz1CW2F0XTtXJiYiZnVuY3Rpb24iPT10eXBlb2YgVyYmVy5jYWxsKHRoaXMse3JlamVjdGlvbjp6W1ldLHByb21pc2U6en0pfWNhdGNoe316W3Z0XT1JdDtmb3IobGV0IFc9MDtX''@;'; put 'put ''PGx0Lmxlbmd0aDtXKyspej09PWx0W1ddLnByb21pc2UmJmx0LnNwbGljZShXLDEpfX1mdW5jdGlvbiBqKHosVyxrLEcscHQpe0Eoeik7Y29uc3QgTXQ9elt2dF0sY3Q9TXQ/ImZ1bmN0aW9uIj09dHlwZW9mIEc/RzpubjoiZnVuY3Rpb24iPT10eXBlb2YgcHQ/cHQ6VnQ7Vy5zY2hlZHVsZU1p''@;'; put 'put ''Y3JvVGFzayhLdCwoKT0+e3RyeXtjb25zdCB3dD16W1ldLFJ0PSEhayYma3Q9PT1rW2t0XTtSdCYmKGtbTHRdPXd0LGtbWHRdPU10KTtjb25zdCBGdD1XLnJ1bihjdCx2b2lkIDAsUnQmJmN0IT09VnQmJmN0IT09bm4/W106W3d0XSk7QXQoaywhMCxGdCl9Y2F0Y2god3Qpe0F0KGssITEsd3Qp''@;'; put 'put ''fX0sayl9Y29uc3QgRXQ9ZnVuY3Rpb24oKXt9LFp0PVIuQWdncmVnYXRlRXJyb3I7Y2xhc3MgQ3R7c3RhdGljIHRvU3RyaW5nKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9c3RhdGljIHJlc29sdmUoVyl7cmV0dXJuIFcgaW5zdGFuY2Vv''@;'; put 'put ''ZiBDdD9XOkF0KG5ldyB0aGlzKG51bGwpLFd0LFcpfXN0YXRpYyByZWplY3QoVyl7cmV0dXJuIEF0KG5ldyB0aGlzKG51bGwpLEl0LFcpfXN0YXRpYyB3aXRoUmVzb2x2ZXJzKCl7Y29uc3QgVz17fTtyZXR1cm4gVy5wcm9taXNlPW5ldyBDdCgoayxHKT0+e1cucmVzb2x2ZT1rLFcucmVqZWN0''@;'; put 'put ''PUd9KSxXfXN0YXRpYyBhbnkoVyl7aWYoIVd8fCJmdW5jdGlvbiIhPXR5cGVvZiBXW1N5bWJvbC5pdGVyYXRvcl0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSk7Y29uc3Qgaz1bXTtsZXQgRz0wO3RyeXtmb3IobGV0IGN0IG9m''@;'; put 'put ''IFcpRysrLGsucHVzaChDdC5yZXNvbHZlKGN0KSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUcpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0''@;'; put 'put ''ZWQiKSk7bGV0IHB0PSExO2NvbnN0IE10PVtdO3JldHVybiBuZXcgQ3QoKGN0LHd0KT0+e2ZvcihsZXQgUnQ9MDtSdDxrLmxlbmd0aDtSdCsrKWtbUnRdLnRoZW4oRnQ9PntwdHx8KHB0PSEwLGN0KEZ0KSl9LEZ0PT57TXQucHVzaChGdCksRy0tLDA9PT1HJiYocHQ9ITAsd3QobmV3IFp0KE10''@;'; put 'put ''LCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKSl9KX0pfXN0YXRpYyByYWNlKFcpe2xldCBrLEcscHQ9bmV3IHRoaXMoKHd0LFJ0KT0+e2s9d3QsRz1SdH0pO2Z1bmN0aW9uIE10KHd0KXtrKHd0KX1mdW5jdGlvbiBjdCh3dCl7Ryh3dCl9Zm9yKGxldCB3dCBvZiBXKXRuKHd0KXx8KHd0''@;'; put 'put ''PXRoaXMucmVzb2x2ZSh3dCkpLHd0LnRoZW4oTXQsY3QpO3JldHVybiBwdH1zdGF0aWMgYWxsKFcpe3JldHVybiBDdC5hbGxXaXRoQ2FsbGJhY2soVyl9c3RhdGljIGFsbFNldHRsZWQoVyl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNlb2YgQ3Q/dGhpczpDdCkuYWxsV2l0''@;'; put 'put ''aENhbGxiYWNrKFcse3RoZW5DYWxsYmFjazpHPT4oe3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTpHfSksZXJyb3JDYWxsYmFjazpHPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpHfSl9KX1zdGF0aWMgYWxsV2l0aENhbGxiYWNrKFcsayl7bGV0IEcscHQsTXQ9bmV3IHRoaXMoKEZ0LCR0''@;'; put 'put ''KT0+e0c9RnQscHQ9JHR9KSxjdD0yLHd0PTA7Y29uc3QgUnQ9W107Zm9yKGxldCBGdCBvZiBXKXt0bihGdCl8fChGdD10aGlzLnJlc29sdmUoRnQpKTtjb25zdCAkdD13dDt0cnl7RnQudGhlbihVdD0+e1J0WyR0XT1rP2sudGhlbkNhbGxiYWNrKFV0KTpVdCxjdC0tLDA9PT1jdCYmRyhSdCl9''@;'; put 'put ''LFV0PT57az8oUnRbJHRdPWsuZXJyb3JDYWxsYmFjayhVdCksY3QtLSwwPT09Y3QmJkcoUnQpKTpwdChVdCl9KX1jYXRjaChVdCl7cHQoVXQpfWN0Kyssd3QrK31yZXR1cm4gY3QtPTIsMD09PWN0JiZHKFJ0KSxNdH1jb25zdHJ1Y3RvcihXKXtjb25zdCBrPXRoaXM7aWYoIShrIGluc3RhbmNl''@;'; put 'put ''b2YgQ3QpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7a1t2dF09dXQsa1tZXT1bXTt0cnl7Y29uc3QgRz1QdCgpO1cmJlcoRyhndChrLFd0KSksRyhndChrLEl0KSkpfWNhdGNoKEcpe0F0KGssITEsRyl9fWdldFtTeW1ib2wudG9TdHJpbmdUYWdd''@;'; put 'put ''KCl7cmV0dXJuIlByb21pc2UifWdldFtTeW1ib2wuc3BlY2llc10oKXtyZXR1cm4gQ3R9dGhlbihXLGspe2xldCBHPXRoaXMuY29uc3RydWN0b3I/LltTeW1ib2wuc3BlY2llc107KCFHfHwiZnVuY3Rpb24iIT10eXBlb2YgRykmJihHPXRoaXMuY29uc3RydWN0b3J8fEN0KTtjb25zdCBwdD1u''@;'; put 'put ''ZXcgRyhFdCksTXQ9Qi5jdXJyZW50O3JldHVybiB0aGlzW3Z0XT09dXQ/dGhpc1tZXS5wdXNoKE10LHB0LFcsayk6aih0aGlzLE10LHB0LFcsaykscHR9Y2F0Y2goVyl7cmV0dXJuIHRoaXMudGhlbihudWxsLFcpfWZpbmFsbHkoVyl7bGV0IGs9dGhpcy5jb25zdHJ1Y3Rvcj8uW1N5bWJvbC5z''@;'; put 'put ''cGVjaWVzXTsoIWt8fCJmdW5jdGlvbiIhPXR5cGVvZiBrKSYmKGs9Q3QpO2NvbnN0IEc9bmV3IGsoRXQpO0dba3RdPWt0O2NvbnN0IHB0PUIuY3VycmVudDtyZXR1cm4gdGhpc1t2dF09PXV0P3RoaXNbWV0ucHVzaChwdCxHLFcsVyk6aih0aGlzLHB0LEcsVyxXKSxHfX1DdC5yZXNvbHZlPUN0''@;'; put 'put ''LnJlc29sdmUsQ3QucmVqZWN0PUN0LnJlamVjdCxDdC5yYWNlPUN0LnJhY2UsQ3QuYWxsPUN0LmFsbDtjb25zdCBnbj1SW3J0XT1SLlByb21pc2U7Ui5Qcm9taXNlPUN0O2NvbnN0IHZuPXN0KCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHBuKHope2NvbnN0IFc9ei5wcm90b3R5cGUsaz1OKFcs''@;'; put 'put ''InRoZW4iKTtpZihrJiYoITE9PT1rLndyaXRhYmxlfHwhay5jb25maWd1cmFibGUpKXJldHVybjtjb25zdCBHPVcudGhlbjtXW3h0XT1HLHoucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24ocHQsTXQpe3JldHVybiBuZXcgQ3QoKHd0LFJ0KT0+e0cuY2FsbCh0aGlzLHd0LFJ0KX0pLnRoZW4ocHQs''@;'; put 'put ''TXQpfSx6W3ZuXT0hMH1yZXR1cm4gTy5wYXRjaFRoZW49cG4sZ24mJihwbihnbiksZHQoUiwiZmV0Y2giLHo9PmZ1bmN0aW9uIGNuKHope3JldHVybiBmdW5jdGlvbihXLGspe2xldCBHPXouYXBwbHkoVyxrKTtpZihHIGluc3RhbmNlb2YgQ3QpcmV0dXJuIEc7bGV0IHB0PUcuY29uc3RydWN0''@;'; put 'put ''b3I7cmV0dXJuIHB0W3ZuXXx8cG4ocHQpLEd9fSh6KSkpLFByb21pc2VbQi5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09bHQsQ3R9KX0pKFMpLGZ1bmN0aW9uIGFuKFMpe1MuX19sb2FkX3BhdGNoKCJ0b1N0cmluZyIsUj0+e2NvbnN0IEI9RnVuY3Rpb24ucHJvdG90eXBl''@;'; put 'put ''LnRvU3RyaW5nLE89eCgiT3JpZ2luYWxEZWxlZ2F0ZSIpLE49eCgiUHJvbWlzZSIpLEo9eCgiRXJyb3IiKSxvdD1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXtjb25zdCBydD10aGlzW09dO2lmKHJ0KXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBydD9CLmNhbGwocnQp''@;'; put 'put ''Ok9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChydCk7aWYodGhpcz09PVByb21pc2Upe2NvbnN0IHh0PVJbTl07aWYoeHQpcmV0dXJuIEIuY2FsbCh4dCl9aWYodGhpcz09PUVycm9yKXtjb25zdCB4dD1SW0pdO2lmKHh0KXJldHVybiBCLmNhbGwoeHQpfX1yZXR1cm4gQi5jYWxsKHRo''@;'; put 'put ''aXMpfTtvdFtPXT1CLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1vdDtjb25zdCBzdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO09iamVjdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUHJvbWlzZSYmdGhpcyBpbnN0YW5jZW9m''@;'; put 'put ''IFByb21pc2U/IltvYmplY3QgUHJvbWlzZV0iOnN0LmNhbGwodGhpcyl9fSl9KFMpLGZ1bmN0aW9uIGtuKFMpe1MuX19sb2FkX3BhdGNoKCJ1dGlsIiwoUixCLE8pPT57Y29uc3QgTj1RKFIpO08ucGF0Y2hPblByb3BlcnRpZXM9ZXQsTy5wYXRjaE1ldGhvZD1kdCxPLmJpbmRBcmd1bWVudHM9''@;'; put 'put ''VCxPLnBhdGNoTWFjcm9UYXNrPWJ0O2NvbnN0IEo9Qi5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIiksb3Q9Qi5fX3N5bWJvbF9fKCJVTlBBVENIRURfRVZFTlRTIik7UltvdF0mJihSW0pdPVJbb3RdKSxSW0pdJiYoQltKXT1CW290XT1SW0pdKSxPLnBhdGNoRXZlbnRQcm90b3R5''@;'; put 'put ''cGU9cixPLnBhdGNoRXZlbnRUYXJnZXQ9VG4sTy5pc0lFT3JFZGdlPUd0LE8uT2JqZWN0RGVmaW5lUHJvcGVydHk9cyxPLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcj1lLE8uT2JqZWN0Q3JlYXRlPXUsTy5BcnJheVNsaWNlPWYsTy5wYXRjaENsYXNzPWZ0LE8ud3JhcFdpdGhDdXJy''@;'; put 'put ''ZW50Wm9uZT1ELE8uZmlsdGVyUHJvcGVydGllcz1fLE8uYXR0YWNoT3JpZ2luVG9QYXRjaGVkPU90LE8uX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LE8ucGF0Y2hDYWxsYmFja3M9TW4sTy5nZXRHbG9iYWxPYmplY3RzPSgpPT4oe2dsb2JhbFNvdXJjZXM6ZG4sem9u''@;'; put 'put ''ZVN5bWJvbEV2ZW50TmFtZXM6cXQsZXZlbnROYW1lczpOLGlzQnJvd3NlcjpudCxpc01peDp0dCxpc05vZGU6WixUUlVFX1NUUjptLEZBTFNFX1NUUjpFLFpPTkVfU1lNQk9MX1BSRUZJWDpnLEFERF9FVkVOVF9MSVNURU5FUl9TVFI6aSxSRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSOnZ9KX0p''@;'; put 'put ''fShTKX0pKFJuKSxmdW5jdGlvbiB6dChTKXtTLl9fbG9hZF9wYXRjaCgibGVnYWN5IixSPT57Y29uc3QgQj1SW1MuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07QiYmQigpfSksUy5fX2xvYWRfcGF0Y2goInRpbWVycyIsUj0+e2NvbnN0IEI9InNldCIsTz0iY2xlYXIiO1AoUixCLE8sIlRp''@;'; put 'put ''bWVvdXQiKSxQKFIsQixPLCJJbnRlcnZhbCIpLFAoUixCLE8sIkltbWVkaWF0ZSIpfSksUy5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsUj0+e1AoUiwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksUChSLCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwi''@;'; put 'put ''QW5pbWF0aW9uRnJhbWUiKSxQKFIsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksUy5fX2xvYWRfcGF0Y2goImJsb2NraW5nIiwoUixCKT0+e2NvbnN0IE89WyJhbGVydCIsInByb21wdCIsImNvbmZpcm0iXTtmb3IobGV0IE49MDtOPE8ubGVuZ3Ro''@;'; put 'put ''O04rKylkdChSLE9bTl0sKG90LHN0LGx0KT0+ZnVuY3Rpb24oU3QscnQpe3JldHVybiBCLmN1cnJlbnQucnVuKG90LFIscnQsbHQpfSl9KSxTLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLChSLEIsTyk9PnsoZnVuY3Rpb24ganQoUyxSKXtSLnBhdGNoRXZlbnRQcm90b3R5cGUoUyxSKX0p''@;'; put 'put ''KFIsTyksZnVuY3Rpb24gJChTLFIpe2lmKFpvbmVbUi5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV0pcmV0dXJuO2NvbnN0e2V2ZW50TmFtZXM6Qix6b25lU3ltYm9sRXZlbnROYW1lczpPLFRSVUVfU1RSOk4sRkFMU0VfU1RSOkosWk9ORV9TWU1CT0xfUFJFRklYOm90fT1SLmdldEdsb2Jh''@;'; put 'put ''bE9iamVjdHMoKTtmb3IobGV0IGx0PTA7bHQ8Qi5sZW5ndGg7bHQrKyl7Y29uc3QgU3Q9QltsdF0sRHQ9b3QrKFN0K0opLEJ0PW90KyhTdCtOKTtPW1N0XT17fSxPW1N0XVtKXT1EdCxPW1N0XVtOXT1CdH1jb25zdCBzdD1TLkV2ZW50VGFyZ2V0O3N0JiZzdC5wcm90b3R5cGUmJlIucGF0Y2hF''@;'; put 'put ''dmVudFRhcmdldChTLFIsW3N0JiZzdC5wcm90b3R5cGVdKX0oUixPKTtjb25zdCBOPVIuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtOJiZOLnByb3RvdHlwZSYmTy5wYXRjaEV2ZW50VGFyZ2V0KFIsTyxbTi5wcm90b3R5cGVdKX0pLFMuX19sb2FkX3BhdGNoKCJNdXRhdGlvbk9ic2VydmVy''@;'; put 'put ''IiwoUixCLE8pPT57ZnQoIk11dGF0aW9uT2JzZXJ2ZXIiKSxmdCgiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIpfSksUy5fX2xvYWRfcGF0Y2goIkludGVyc2VjdGlvbk9ic2VydmVyIiwoUixCLE8pPT57ZnQoIkludGVyc2VjdGlvbk9ic2VydmVyIil9KSxTLl9fbG9hZF9wYXRjaCgiRmlsZVJl''@;'; put 'put ''YWRlciIsKFIsQixPKT0+e2Z0KCJGaWxlUmVhZGVyIil9KSxTLl9fbG9hZF9wYXRjaCgib25fcHJvcGVydHkiLChSLEIsTyk9PnshZnVuY3Rpb24gaXQoUyxSKXtpZihaJiYhdHR8fFpvbmVbUy5zeW1ib2woInBhdGNoRXZlbnRzIildKXJldHVybjtjb25zdCBCPVIuX19ab25lX2lnbm9yZV9v''@;'; put 'put ''bl9wcm9wZXJ0aWVzO2xldCBPPVtdO2lmKG50KXtjb25zdCBOPXdpbmRvdztPPU8uY29uY2F0KFsiRG9jdW1lbnQiLCJTVkdFbGVtZW50IiwiRWxlbWVudCIsIkhUTUxFbGVtZW50IiwiSFRNTEJvZHlFbGVtZW50IiwiSFRNTE1lZGlhRWxlbWVudCIsIkhUTUxGcmFtZVNldEVsZW1lbnQiLCJI''@;'; put 'put ''VE1MRnJhbWVFbGVtZW50IiwiSFRNTElGcmFtZUVsZW1lbnQiLCJIVE1MTWFycXVlZUVsZW1lbnQiLCJXb3JrZXIiXSk7Y29uc3QgSj1mdW5jdGlvbiBvbigpe3RyeXtjb25zdCBTPUMubmF2aWdhdG9yLnVzZXJBZ2VudDtpZigtMSE9PVMuaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1TLmluZGV4''@;'; put 'put ''T2YoIlRyaWRlbnQvIikpcmV0dXJuITB9Y2F0Y2h7fXJldHVybiExfSgpP1t7dGFyZ2V0Ok4saWdub3JlUHJvcGVydGllczpbImVycm9yIl19XTpbXTtIKE4sUShOKSxCJiZCLmNvbmNhdChKKSxhKE4pKX1PPU8uY29uY2F0KFsiWE1MSHR0cFJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdEV2ZW50''@;'; put 'put ''VGFyZ2V0IiwiSURCSW5kZXgiLCJJREJSZXF1ZXN0IiwiSURCT3BlbkRCUmVxdWVzdCIsIklEQkRhdGFiYXNlIiwiSURCVHJhbnNhY3Rpb24iLCJJREJDdXJzb3IiLCJXZWJTb2NrZXQiXSk7Zm9yKGxldCBOPTA7TjxPLmxlbmd0aDtOKyspe2NvbnN0IEo9UltPW05dXTtKJiZKLnByb3RvdHlw''@;'; put 'put ''ZSYmSChKLnByb3RvdHlwZSxRKEoucHJvdG90eXBlKSxCKX19KE8sUil9KSxTLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxlbWVudHMiLChSLEIsTyk9PnshZnVuY3Rpb24gSyhTLFIpe2NvbnN0e2lzQnJvd3NlcjpCLGlzTWl4Ok99PVIuZ2V0R2xvYmFsT2JqZWN0cygpOyhCfHxPKSYmUy5jdXN0''@;'; put 'put ''b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIFMmJlIucGF0Y2hDYWxsYmFja3MoUixTLmN1c3RvbUVsZW1lbnRzLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmli''@;'; put 'put ''dXRlQ2hhbmdlZENhbGxiYWNrIiwiZm9ybUFzc29jaWF0ZWRDYWxsYmFjayIsImZvcm1EaXNhYmxlZENhbGxiYWNrIiwiZm9ybVJlc2V0Q2FsbGJhY2siLCJmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2siXSl9KFIsTyl9KSxTLl9fbG9hZF9wYXRjaCgiWEhSIiwoUixCKT0+eyFmdW5jdGlvbiBT''@;'; put 'put ''dChydCl7Y29uc3QgeHQ9cnQuWE1MSHR0cFJlcXVlc3Q7aWYoIXh0KXJldHVybjtjb25zdCBEdD14dC5wcm90b3R5cGU7bGV0IEh0PUR0W3BdLHRuPUR0W2RdO2lmKCFIdCl7Y29uc3QgVHQ9cnQuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpZihUdCl7Y29uc3QgZ3Q9VHQucHJvdG90eXBl''@;'; put 'put ''O0h0PWd0W3BdLHRuPWd0W2RdfX1jb25zdCBubj0icmVhZHlzdGF0ZWNoYW5nZSIsVnQ9InNjaGVkdWxlZCI7ZnVuY3Rpb24gdnQoVHQpe2NvbnN0IGd0PVR0LmRhdGEsUHQ9Z3QudGFyZ2V0O1B0W290XT0hMSxQdFtsdF09ITE7Y29uc3QgZW49UHRbSl07SHR8fChIdD1QdFtwXSx0bj1QdFtk''@;'; put 'put ''XSksZW4mJnRuLmNhbGwoUHQsbm4sZW4pO2NvbnN0IEp0PVB0W0pdPSgpPT57aWYoUHQucmVhZHlTdGF0ZT09PVB0LkRPTkUpaWYoIWd0LmFib3J0ZWQmJlB0W290XSYmVHQuc3RhdGU9PT1WdCl7Y29uc3QgYXQ9UHRbQi5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV07aWYoMCE9PVB0LnN0YXR1''@;'; put 'put ''cyYmYXQmJmF0Lmxlbmd0aD4wKXtjb25zdCBBPVR0Lmludm9rZTtUdC5pbnZva2U9ZnVuY3Rpb24oKXtjb25zdCBqPVB0W0IuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2ZvcihsZXQgaHQ9MDtodDxqLmxlbmd0aDtodCsrKWpbaHRdPT09VHQmJmouc3BsaWNlKGh0LDEpOyFndC5hYm9ydGVk''@;'; put 'put ''JiZUdC5zdGF0ZT09PVZ0JiZBLmNhbGwoVHQpfSxhdC5wdXNoKFR0KX1lbHNlIFR0Lmludm9rZSgpfWVsc2UhZ3QuYWJvcnRlZCYmITE9PT1QdFtvdF0mJihQdFtsdF09ITApfTtyZXR1cm4gSHQuY2FsbChQdCxubixKdCksUHRbT118fChQdFtPXT1UdCksV3QuYXBwbHkoUHQsZ3QuYXJncyks''@;'; put 'put ''UHRbb3RdPSEwLFR0fWZ1bmN0aW9uIFkoKXt9ZnVuY3Rpb24ga3QoVHQpe2NvbnN0IGd0PVR0LmRhdGE7cmV0dXJuIGd0LmFib3J0ZWQ9ITAsSXQuYXBwbHkoZ3QudGFyZ2V0LGd0LmFyZ3MpfWNvbnN0IEx0PWR0KER0LCJvcGVuIiwoKT0+ZnVuY3Rpb24oVHQsZ3Qpe3JldHVybiBUdFtOXT0w''@;'; put 'put ''PT1ndFsyXSxUdFtzdF09Z3RbMV0sTHQuYXBwbHkoVHQsZ3QpfSksS3Q9eCgiZmV0Y2hUYXNrQWJvcnRpbmciKSx1dD14KCJmZXRjaFRhc2tTY2hlZHVsaW5nIiksV3Q9ZHQoRHQsInNlbmQiLCgpPT5mdW5jdGlvbihUdCxndCl7aWYoITA9PT1CLmN1cnJlbnRbdXRdfHxUdFtOXSlyZXR1cm4g''@;'; put 'put ''V3QuYXBwbHkoVHQsZ3QpO3tjb25zdCBQdD17dGFyZ2V0OlR0LHVybDpUdFtzdF0saXNQZXJpb2RpYzohMSxhcmdzOmd0LGFib3J0ZWQ6ITF9LGVuPUYoIlhNTEh0dHBSZXF1ZXN0LnNlbmQiLFksUHQsdnQsa3QpO1R0JiYhMD09PVR0W2x0XSYmIVB0LmFib3J0ZWQmJmVuLnN0YXRlPT09VnQm''@;'; put 'put ''JmVuLmludm9rZSgpfX0pLEl0PWR0KER0LCJhYm9ydCIsKCk9PmZ1bmN0aW9uKFR0LGd0KXtjb25zdCBQdD1mdW5jdGlvbiBCdChUdCl7cmV0dXJuIFR0W09dfShUdCk7aWYoUHQmJiJzdHJpbmciPT10eXBlb2YgUHQudHlwZSl7aWYobnVsbD09UHQuY2FuY2VsRm58fFB0LmRhdGEmJlB0LmRh''@;'; put 'put ''dGEuYWJvcnRlZClyZXR1cm47UHQuem9uZS5jYW5jZWxUYXNrKFB0KX1lbHNlIGlmKCEwPT09Qi5jdXJyZW50W0t0XSlyZXR1cm4gSXQuYXBwbHkoVHQsZ3QpfSl9KFIpO2NvbnN0IE89eCgieGhyVGFzayIpLE49eCgieGhyU3luYyIpLEo9eCgieGhyTGlzdGVuZXIiKSxvdD14KCJ4aHJTY2hl''@;'; put 'put ''ZHVsZWQiKSxzdD14KCJ4aHJVUkwiKSxsdD14KCJ4aHJFcnJvckJlZm9yZVNjaGVkdWxlZCIpfSksUy5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixSPT57Ui5uYXZpZ2F0b3ImJlIubmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZmdW5jdGlvbiBiKFMsUil7Y29uc3QgQj1TLmNvbnN0cnVjdG9y''@;'; put 'put ''Lm5hbWU7Zm9yKGxldCBPPTA7TzxSLmxlbmd0aDtPKyspe2NvbnN0IE49UltPXSxKPVNbTl07aWYoSil7aWYoIUwoZShTLE4pKSljb250aW51ZTtTW05dPShzdD0+e2NvbnN0IGx0PWZ1bmN0aW9uKCl7cmV0dXJuIHN0LmFwcGx5KHRoaXMsVChhcmd1bWVudHMsQisiLiIrTikpfTtyZXR1cm4g''@;'; put 'put ''T3QobHQsc3QpLGx0fSkoSil9fX0oUi5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSksUy5fX2xvYWRfcGF0Y2goIlByb21pc2VSZWplY3Rpb25FdmVudCIsKFIsQik9PntmdW5jdGlvbiBPKE4pe3JldHVybiBmdW5jdGlvbihK''@;'; put 'put ''KXtoKFIsTikuZm9yRWFjaChzdD0+e2NvbnN0IGx0PVIuUHJvbWlzZVJlamVjdGlvbkV2ZW50O2lmKGx0KXtjb25zdCBTdD1uZXcgbHQoTix7cHJvbWlzZTpKLnByb21pc2UscmVhc29uOkoucmVqZWN0aW9ufSk7c3QuaW52b2tlKFN0KX19KX19Ui5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJihC''@;'; put 'put ''W3goInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIildPU8oInVuaGFuZGxlZHJlamVjdGlvbiIpLEJbeCgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09TygicmVqZWN0aW9uaGFuZGxlZCIpKX0pLFMuX19sb2FkX3BhdGNoKCJxdWV1ZU1pY3JvdGFzayIsKFIsQixPKT0+eyFm''@;'; put 'put ''dW5jdGlvbiBvKFMsUil7Ui5wYXRjaE1ldGhvZChTLCJxdWV1ZU1pY3JvdGFzayIsQj0+ZnVuY3Rpb24oTyxOKXtab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInF1ZXVlTWljcm90YXNrIixOWzBdKX0pfShSLE8pfSl9KFJuKX0sOTI1Njg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijtj''@;'; put 'put ''b25zdCBuPXQoODI1NzQpO0ludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLmZvcm1hdFRvUGFydHM9ZnVuY3Rpb24oSSl7bGV0IE09dGhpcy5yZXNvbHZlZE9wdGlvbnMoKSxUPWZ1bmN0aW9uIEMoSSl7dmFyIFosbnQsdHQseXQsbXQsTT1JLmF2YWlsYWJsZUZvcm1hdHMsVD1JLnRpbWVG''@;'; put 'put ''b3JtYXRzLGI9SS5kYXRlRm9ybWF0cyxMPUkubWVkaXVtLFU9W10scT1bXSxYPVtdO2Z1bmN0aW9uIGV0KFYsZnQpe3ZhciBkdD1uZXcgQXJyYXkoKFYubWF0Y2goL00vZyl8fFtdKS5sZW5ndGgrMSksYnQ9bmV3IEFycmF5KChWLm1hdGNoKC9FL2cpfHxbXSkubGVuZ3RoKzEpO3JldHVybiBk''@;'; put 'put ''dC5sZW5ndGg+MiYmKGZ0PWZ0LnJlcGxhY2UoLyhNfEwpKy8sZHQuam9pbigiJDEiKSkpLGJ0Lmxlbmd0aD4yJiYoZnQ9ZnQucmVwbGFjZSgvKFtFZWNdKSsvLGJ0LmpvaW4oIiQxIikpKSxmdH1mb3IoWiBpbiBNKU0uaGFzT3duUHJvcGVydHkoWikmJigodHQ9dyhudD1ldChaLE1bWl0pKSkm''@;'; put 'put ''JihVLnB1c2godHQpLEYodHQpP1gucHVzaChudCk6eCh0dCkmJnEucHVzaChudCkpKTtmb3IoeXQ9MDt5dDxxLmxlbmd0aDt5dCs9MSlmb3IobXQ9MDttdDxYLmxlbmd0aDttdCs9MSkodHQ9dyhudD1MLnJlcGxhY2UoInswfSIscVt5dF0pLnJlcGxhY2UoInsxfSIsWFttdF0pLnJlcGxhY2Uo''@;'; put 'put ''L15bLFxzXSt8Wyxcc10rJC9naSwiIikpKSYmVS5wdXNoKHR0KTtmb3IoWiBpbiBUKVQuaGFzT3duUHJvcGVydHkoWikmJigodHQ9dyhudD1ldChaLFRbWl0pKSkmJlUucHVzaCh0dCkpO2ZvcihaIGluIGIpYi5oYXNPd25Qcm9wZXJ0eShaKSYmKCh0dD13KG50PWV0KFosYltaXSkpKSYmVS5w''@;'; put 'put ''dXNoKHR0KSk7cmV0dXJuIFV9KG4uZGF0ZS5mb3JtYXRzKSxiPXt9O2Zvcih2YXIgTCBpbiBmKXMuY2FsbChmLEwpJiYoYlsiW1siK0wrIl1dIl09TVtMXSk7bGV0IFo9ZnVuY3Rpb24gaShJLE0sVCl7Zm9yKHZhciBxLG10PS0xLzAsWD0wLGV0PU0ubGVuZ3RoO1g8ZXQ7KXt2YXIgVj1NW1hd''@;'; put 'put ''LGZ0PTA7Zm9yKHZhciBkdCBpbiBmKWlmKHMuY2FsbChmLGR0KSl7dmFyIGJ0PUlbIltbIitkdCsiXV0iXSxPdD1zLmNhbGwoVixkdCk/VltkdF06dm9pZCAwO2lmKHZvaWQgMD09PWJ0JiZ2b2lkIDAhPT1PdClmdC09MjA7ZWxzZSBpZih2b2lkIDAhPT1idCYmdm9pZCAwPT09T3QpZnQtPTEy''@;'; put 'put ''MDtlbHNle3ZhciBOdD1bIjItZGlnaXQiLCJudW1lcmljIiwibmFycm93Iiwic2hvcnQiLCJsb25nIl0sWXQ9YS5jYWxsKE50LGJ0KSxvbj1hLmNhbGwoTnQsT3QpLEd0PU1hdGgubWF4KE1hdGgubWluKG9uLVl0LDIpLC0yKTtUJiYoKCJudW1lcmljIj09PWJ0fHwiMi1kaWdpdCI9PT1idCkm''@;'; put 'put ''JiJudW1lcmljIiE9PU90JiYiMi1kaWdpdCIhPT1PdHx8Im51bWVyaWMiIT09YnQmJiIyLWRpZ2l0IiE9PWJ0JiYoIjItZGlnaXQiPT09T3R8fCJudW1lcmljIj09PU90KSkmJihmdC09OCksMj09PUd0P2Z0LT02OjE9PT1HdD9mdC09MzotMT09PUd0P2Z0LT02Oi0yPT09R3QmJihmdC09OCl9''@;'; put 'put ''fWZ0Pm10JiYobXQ9ZnQscT1WKSxYKyt9cmV0dXJuIHF9KGIsVCk7cmV0dXJuIGZ1bmN0aW9uIGUoSSxNKXtpZighaXNGaW5pdGUoTSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdmFsaWQgZGF0ZSBwYXNzZWQgdG8gZm9ybWF0VG9QYXJ0cyIpO2Zvcih2YXIgcSxUPSJlbi1VUyIs''@;'; put 'put ''Yj1JLnBhdHRlcm4sWj0obmV3IEludGwuTnVtYmVyRm9ybWF0KFtUXSx7dXNlR3JvdXBpbmc6ITF9KSxuZXcgSW50bC5OdW1iZXJGb3JtYXQoW1RdLHttaW5pbXVtSW50ZWdlckRpZ2l0czoyLHVzZUdyb3VwaW5nOiExfSksZnVuY3Rpb24gdihJLE0sVCl7dmFyIGI9bmV3IERhdGUoSSksTD0i''@;'; put 'put ''Z2V0IisoVHx8IiIpO3JldHVybnsiW1t3ZWVrZGF5XV0iOmJbTCsiRGF5Il0oKSwiW1tlcmFdXSI6KyhiW0wrIkZ1bGxZZWFyIl0oKT49MCksIltbeWVhcl1dIjpiW0wrIkZ1bGxZZWFyIl0oKSwiW1ttb250aF1dIjpiW0wrIk1vbnRoIl0oKSwiW1tkYXldXSI6YltMKyJEYXRlIl0oKSwiW1to''@;'; put 'put ''b3VyXV0iOmJbTCsiSG91cnMiXSgpLCJbW21pbnV0ZV1dIjpiW0wrIk1pbnV0ZXMiXSgpLCJbW3NlY29uZF1dIjpiW0wrIlNlY29uZHMiXSgpLCJbW2luRFNUXV0iOiExfX0oTSkpLG50PSJncmVnb3J5Iix0dD1uLmRhdGUuY2FsZW5kYXJzLHl0PVtdLG10PS97KFtefV0rKX0vZyxYPTA7bnVs''@;'; put 'put ''bCE9PShxPW10LmV4ZWMoYikpOyl7WDxxLmluZGV4JiZ5dC5wdXNoKHt0eXBlOiJzZXBhcmF0b3IiLHZhbHVlOmIuc3Vic3RyKFgscS5pbmRleC1YKX0pO3ZhciBldD1xWzFdLFY9bnVsbDtpZihzLmNhbGwoSSxldCkpe3ZhciBmdCxkdD1JW2V0XSxidD1aWyJbWyIrZXQrIl1dIl07aWYoInll''@;'; put 'put ''YXIiPT09ZXQmJmJ0PD0wP2J0PTEtYnQ6Im1vbnRoIj09PWV0P2J0Kys6ImhvdXIiPT09ZXQmJiEwPT09SVsiW1tob3VyMTJdXSJdJiYoZnQ9KGJ0JT0xMikhPT1aWyJbWyIrZXQrIl1dIl0sMD09PWJ0JiYhMD09PUlbIltbaG91ck5vMF1dIl0mJihidD0xMikpLCJudW1lcmljIj09PWR0KVY9''@;'; put 'put ''YnQ7ZWxzZSBpZigiMi1kaWdpdCI9PT1kdCkoVj1idCkubGVuZ3RoPjImJihWPVYuc2xpY2UoLTIpKTtlbHNlIGlmKGR0IGluIHUpc3dpdGNoKGV0KXtjYXNlIm1vbnRoIjpWPXAodHQsbnQsIm1vbnRocyIsZHQsWlsiW1siK2V0KyJdXSJdKTticmVhaztjYXNlIndlZWtkYXkiOnRyeXtWPXAo''@;'; put 'put ''dHQsbnQsImRheXMiLGR0LFpbIltbIitldCsiXV0iXSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3ZWVrZGF5IGRhdGEgZm9yIGxvY2FsZSAiK1QpfWJyZWFrO2Nhc2UidGltZVpvbmVOYW1lIjpWPSIiO2JyZWFrO2RlZmF1bHQ6Vj1aWyJbWyIrZXQrIl1dIl19fWVs''@;'; put 'put ''c2UiYW1wbSI9PT1ldCYmKFY9cCh0dCxudCwiZGF5UGVyaW9kcyIsZnQ/InBtIjoiYW0iKSk7bnVsbCE9PVYmJih5dC5wdXNoKHt0eXBlOnFbMV0sdmFsdWU6Vn0pLFg9cS5pbmRleCtxWzBdLmxlbmd0aCl9cmV0dXJuIFg8Yi5sZW5ndGgmJnl0LnB1c2goe3R5cGU6InNlcGFyYXRvciIsdmFs''@;'; put 'put ''dWU6Yi5zdWJzdHIoWCl9KSx5dH0oWixJKX07dmFyIHM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLHU9T2JqZWN0LmNyZWF0ZShudWxsLHtuYXJyb3c6e30sc2hvcnQ6e30sbG9uZzp7fX0pLGY9e3dlZWtkYXk6WyJuYXJyb3ciLCJz''@;'; put 'put ''aG9ydCIsImxvbmciXSxlcmE6WyJuYXJyb3ciLCJzaG9ydCIsImxvbmciXSx5ZWFyOlsiMi1kaWdpdCIsIm51bWVyaWMiXSxtb250aDpbIjItZGlnaXQiLCJudW1lcmljIiwibmFycm93Iiwic2hvcnQiLCJsb25nIl0sZGF5OlsiMi1kaWdpdCIsIm51bWVyaWMiXSxob3VyOlsiMi1kaWdpdCIs''@;'; put 'put ''Im51bWVyaWMiXSxtaW51dGU6WyIyLWRpZ2l0IiwibnVtZXJpYyJdLHNlY29uZDpbIjItZGlnaXQiLCJudW1lcmljIl0sdGltZVpvbmVOYW1lOlsic2hvcnQiLCJsb25nIl19O2Z1bmN0aW9uIHAoSSxNLFQsYixMKXt2YXIgVT1JW01dJiZJW01dW1RdP0lbTV1bVF06SS5ncmVnb3J5W1RdLFo9''@;'; put 'put ''e25hcnJvdzpbInNob3J0IiwibG9uZyJdLHNob3J0OlsibG9uZyIsIm5hcnJvdyJdLGxvbmc6WyJzaG9ydCIsIm5hcnJvdyJdfSxudD1zLmNhbGwoVSxiKT9VW2JdOnMuY2FsbChVLFpbYl1bMF0pP1VbWltiXVswXV06VVtaW2JdWzFdXTtyZXR1cm4gbnVsbCE9TD9udFtMXTpudH12YXIgZD0v''@;'; put 'put ''KD86W0VlY117MSw2fXxHezEsNX18KD86W3lZdV0rfFV7MSw1fSl8W01MXXsxLDV9fGR7MSwyfXxhfFtoa0hLXXsxLDJ9fG17MSwyfXxzezEsMn18ensxLDR9KSg/PShbXiddKidbXiddKicpKlteJ10qJCkvZyxtPS9bUXhYVk92WkFTamdGRHdXSVFxSF0vLEU9e21vbnRoOlsibnVtZXJpYyIs''@;'; put 'put ''IjItZGlnaXQiLCJzaG9ydCIsImxvbmciLCJuYXJyb3ciXSx3ZWVrZGF5Olsic2hvcnQiLCJzaG9ydCIsInNob3J0IiwibG9uZyIsIm5hcnJvdyJdLGVyYTpbInNob3J0Iiwic2hvcnQiLCJzaG9ydCIsImxvbmciLCJuYXJyb3ciXX0sZz1bIndlZWtkYXkiLCJlcmEiLCJ5ZWFyIiwibW9udGgi''@;'; put 'put ''LCJkYXkiXSxEPVsiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInRpbWVab25lTmFtZSJdO2Z1bmN0aW9uIEYoSSl7Zm9yKHZhciBNPTA7TTxELmxlbmd0aDtNKz0xKWlmKEkuaGFzT3duUHJvcGVydHkoRFtNXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24geChJKXtmb3IodmFyIE09MDtN''@;'; put 'put ''PGcubGVuZ3RoO00rPTEpaWYoSS5oYXNPd25Qcm9wZXJ0eShnW01dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB3KEkpe2lmKCFtLnRlc3QoSSkpe3ZhciBNPXt9O3JldHVybiBNLnBhdHRlcm49SS5yZXBsYWNlKGQsZnVuY3Rpb24oVCl7c3dpdGNoKFQuY2hhckF0KDApKXtjYXNlIkUi''@;'; put 'put ''OmNhc2UiZSI6Y2FzZSJjIjpyZXR1cm4gTS53ZWVrZGF5PUUud2Vla2RheVtULmxlbmd0aC0xXSwie3dlZWtkYXl9IjtjYXNlIkciOnJldHVybiBNLmVyYT1FLmVyYVtULmxlbmd0aC0xXSwie2VyYX0iO2Nhc2UieSI6Y2FzZSJZIjpjYXNlInUiOmNhc2UiVSI6cmV0dXJuIE0ueWVhcj0yPT09''@;'; put 'put ''VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie3llYXJ9IjtjYXNlIk0iOmNhc2UiTCI6cmV0dXJuIE0ubW9udGg9RS5tb250aFtULmxlbmd0aC0xXSwie21vbnRofSI7Y2FzZSJkIjpyZXR1cm4gTS5kYXk9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsIntkYXl9IjtjYXNl''@;'; put 'put ''ImEiOnJldHVybiJ7YW1wbX0iO2Nhc2UiaCI6Y2FzZSJIIjpjYXNlImsiOmNhc2UiSyI6cmV0dXJuIE0uaG91cj0yPT09VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie2hvdXJ9IjtjYXNlIm0iOnJldHVybiBNLm1pbnV0ZT0yPT09VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwi''@;'; put 'put ''e21pbnV0ZX0iO2Nhc2UicyI6cmV0dXJuIE0uc2Vjb25kPTI9PT1ULmxlbmd0aD8iMi1kaWdpdCI6Im51bWVyaWMiLCJ7c2Vjb25kfSI7Y2FzZSJ6IjpyZXR1cm4gTS50aW1lWm9uZU5hbWU9VC5sZW5ndGg8ND8ic2hvcnQiOiJsb25nIiwie3RpbWVab25lTmFtZX0ifX0pLE0ucGF0dGVybj1N''@;'; put 'put ''LnBhdHRlcm4ucmVwbGFjZSgvJyhbXiddKiknL2csZnVuY3Rpb24oVCxiKXtyZXR1cm4gYnx8IicifSksTS5wYXR0ZXJuLmluZGV4T2YoInthbXBtfSIpPi0xJiYoTS5ob3VyMTI9ITAsTS5wYXR0ZXJuMTI9TS5wYXR0ZXJuLE0ucGF0dGVybj1NLnBhdHRlcm4ucmVwbGFjZSgie2FtcG19Iiwi''@;'; put 'put ''IikucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpKSxNfX19LDY2Mzc0OihjLGwsdCk9Pnt0KDgyOTc1KSx0KDQ3ODk5KSx0KDkzODYzKSx0KDQ1NzApLHQoOTY1MTEpLHQoOTU4NTMpLHQoOTcwNzUpLHQoMzUwNCksdCg1NDkxMyksdCgzOTgxMyksdCg4''@;'; put 'put ''NjUxMSksdCg1ODg4OCksdCg4MTQ0OSksdCg0Nzg3NCksdCgzNDYwOSksdCgzMzcwNiksdCgxOTYyMCksdCg1Nzc2MiksdCgxNTE0NCksdCg3NTM2OSksdCg3NjIwOSksdCg5NTE2NSksdCg1NjA5NCl9LDMyODk5OihjLGwsdCk9Pnt0KDEzMjkyKSx0KDUyMzQ2KSx0KDk0MjkpLHQoNzg0OSks''@;'; put 'put ''dCg0ODk1MSksYy5leHBvcnRzPURhdGV9LDM5MjcxOihjLGwsdCk9Pnt0KDY1MDQ5KSx0KDcwNDg5KSx0KDk1NTAyKSx0KDU2MDk0KX0sMjI5MTM6KGMsbCx0KT0+e3QoMTc0ODIpLHQoODI5NzUpLHQoMzU4OTApLHQoOTMzODYpLHQoNTYwOTQpfSw4ODAyNTooYyxsLHQpPT57dCg3NjY0OCks''@;'; put 'put ''dCg1NTc3MSksdCg4MjM5MiksdCg3MjMzNSksdCg3NDg5NiksdCg5NDUyMSksdCgyOTE0NyksdCg0MTMxOCksdCg4NDM1MiksdCgxNTMyNyksdCg1NzUwOSksdCgxNTkwOSksdCg3OTU4NCksdCg0MDM0NSksdCg5OTEzNCksdCg2NzkwMSksdCg0NjU5MiksdCg1NjA5NCl9LDE1NjI2OihjLGws''@;'; put 'put ''dCk9Pnt0KDY0NTA5KSx0KDM3NzI3KSx0KDY3MDEpLHQoMzQ0MTkpLHQoOTE5MzMpLHQoNTU1MzgpLHQoMzk0OTcpLHQoNDEwNCksdCg2MDIxMCksdCg1NjU3NiksdCg4NDQzNyksdCg4ODA1MCksdCg1NjA5NCl9LDU0OTQwOihjLGwsdCk9Pnt0KDk5NjUwKSx0KDkzNSksdCg2NjA2NCksdCg4''@;'; put 'put ''OTQ0OCksdCgyMjY0MiksdCg1M2UzKSx0KDg4NjQ3KSx0KDgxODk1KSx0KDQ4MjM2KSx0KDczODIyKSx0KDE1NTcyKSx0KDY5MzE4KSx0KDY1MDMyKSx0KDc5MDczKSx0KDExNDMwKSx0KDM4NDUxKSx0KDE4MTMyKSx0KDE3NDgyKSx0KDU2MDk0KX0sMjYyMDM6KGMsbCx0KT0+e3QoOTYxMDgp''@;'; put 'put ''LHQoNTYwOTQpfSw1MjQ0NDooYyxsLHQpPT57dCg5MDU3MSksdCg1NjA5NCl9LDY1ODQ2OihjLGwsdCk9Pnt0KDcxMDMpLHQoODI1ODYpLHQoOTI1NTIpLHQoNDM3NiksdCg3NTE1MyksdCgxMTg3OSksdCg1MjY1MCksdCgzMTEwNCksdCgyMTg4MyksdCgzNTQzMyksdCg1NWUzKSx0KDE1OTMy''@;'; put 'put ''KSx0KDU0NDMpLHQoMjYzMTYpLHQoNTYwOTQpfSw0MjQ2OihjLGwsdCk9Pnt0KDgzMDEpLHQoOTQxMTYpLHQoNzg2MDQpLHQoMzk2MzgpLHQoNDA0MCksdCg2ODMwNSksdCg3NDcwMSksdCgyMDM0MSksdCg1NjA5NCl9LDEwNzQzOihjLGwsdCk9Pnt0KDE3NDgyKSx0KDgyOTc1KSx0KDM1ODkw''@;'; put 'put ''KSx0KDcxNjMyKSx0KDU2MDk0KX0sNTY0NDI6KGMsbCx0KT0+e3QoMTIyMjApLHQoMjM0ODMpLHQoMjA5NTcpLHQoODI5NzUpLHQoMzI0MDUpLHQoMTcyMjQpLHQoMjg4NzIpLHQoNDQ4OTQpLHQoMTAxNzcpLHQoNjQ5NzkpLHQoODkwMTEpLHQoNTQ1OTEpLHQoNDczMzQpLHQoNzA4MyksdCg2''@;'; put 'put ''OTIxMyksdCgzODQzNyksdCg2MjIyMCksdCg3NjU0OSksdCg0MjgxOCksdCgyODU0MyksdCgzNTU5KSx0KDg0MTUzKSx0KDQwNDApLHQoNjgzMDUpLHQoNzQ3MDEpLHQoMjAzNDEpLHQoNTYwOTQpfSwxODg4MzooYyxsLHQpPT57dCg5OTY1MCksdCgxNzQ4MiksdCg1NjA5NCl9LDkzNTM6KGMs''@;'; put 'put ''bCx0KT0+e3QoNzc0OTEpLHQoNzQ5MDcpLHQoNzkxMDApLHQoMTkyNjkpLHQoOTEzMTkpLHQoNzk3MzIpLHQoMTE3NiksdCgzMTA3KSx0KDYxNjkxKSx0KDU2MDk0KX0sNjMzODc6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBUeXBlRXJy''@;'; put 'put ''b3IobCsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiBsfX0sMTUxMjI6KGMsbCx0KT0+e3ZhciBuPXQoNTUwODkpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe2lmKCJudW1iZXIiIT10eXBlb2YgZSYmIk51bWJlciIhPW4oZSkpdGhyb3cgVHlwZUVycm9yKHMpO3JldHVybitlfX0sODgx''@;'; put 'put ''ODQ6KGMsbCx0KT0+e3ZhciBuPXQoNjc1NzQpKCJ1bnNjb3BhYmxlcyIpLGU9QXJyYXkucHJvdG90eXBlO251bGw9PWVbbl0mJnQoMzMzNDEpKGUsbix7fSksYy5leHBvcnRzPWZ1bmN0aW9uKHMpe2Vbbl1bc109ITB9fSwyODgyODooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTEy''@;'; put 'put ''MTIpKCEwKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzLGEpe3JldHVybiBzKyhhP24oZSxzKS5sZW5ndGg6MSl9fSwxNjQ0MDpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwsdCxuLGUpe2lmKCEobCBpbnN0YW5jZW9mIHQpfHx2b2lkIDAhPT1lJiZlIGluIGwpdGhyb3cgVHlwZUVycm9yKG4rIjog''@;'; put 'put ''aW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0dXJuIGx9fSw0MjI4OihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0sODQ0Mzg6KGMsbCx0KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgbj10KDE4MjcwKSxlPXQoNzAxNTcpLHM9dCg4MTQ4NSk7Yy5leHBvcnRzPVtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKHUsZil7dmFyIGk9bih0aGlzKSx2PXMoaS5sZW5ndGgpLHA9ZSh1LHYpLGQ9ZShmLHYpLG09YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1sy''@;'; put 'put ''XTp2b2lkIDAsRT1NYXRoLm1pbigodm9pZCAwPT09bT92OmUobSx2KSktZCx2LXApLGc9MTtmb3IoZDxwJiZwPGQrRSYmKGc9LTEsZCs9RS0xLHArPUUtMSk7RS0tID4wOylkIGluIGk/aVtwXT1pW2RdOmRlbGV0ZSBpW3BdLHArPWcsZCs9ZztyZXR1cm4gaX19LDM1NTY0OihjLGwsdCk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIG49dCgxODI3MCksZT10KDcwMTU3KSxzPXQoODE0ODUpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXtmb3IodmFyIGY9bih0aGlzKSxpPXMoZi5sZW5ndGgpLHY9YXJndW1lbnRzLmxlbmd0aCxwPWUodj4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsaSksZD12PjI/YXJndW1l''@;'; put 'put ''bnRzWzJdOnZvaWQgMCxtPXZvaWQgMD09PWQ/aTplKGQsaSk7bT5wOylmW3ArK109dTtyZXR1cm4gZn19LDgwOTU2OihjLGwsdCk9Pnt2YXIgbj10KDQ4NzkwKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXt2YXIgYT1bXTtyZXR1cm4gbihlLCExLGEucHVzaCxhLHMpLGF9fSw2MTQ2NDooYyxs''@;'; put 'put ''LHQpPT57dmFyIG49dCg1NzIyMSksZT10KDgxNDg1KSxzPXQoNzAxNTcpO2MuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24odSxmLGkpe3ZhciBtLHY9bih1KSxwPWUodi5sZW5ndGgpLGQ9cyhpLHApO2lmKGEmJmYhPWYpe2Zvcig7cD5kOylpZigobT12W2QrK10pIT1tKXJl''@;'; put 'put ''dHVybiEwfWVsc2UgZm9yKDtwPmQ7ZCsrKWlmKChhfHxkIGluIHYpJiZ2W2RdPT09ZilyZXR1cm4gYXx8ZHx8MDtyZXR1cm4hYSYmLTF9fX0sNjYxNzk6KGMsbCx0KT0+e3ZhciBuPXQoMzUwNTIpLGU9dCg2MTI0OSkscz10KDE4MjcwKSxhPXQoODE0ODUpLHU9dCg5MzE5MSk7Yy5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKGYsaSl7dmFyIHY9MT09ZixwPTI9PWYsZD0zPT1mLG09ND09ZixFPTY9PWYsZz01PT1mfHxFLEQ9aXx8dTtyZXR1cm4gZnVuY3Rpb24oRix4LHcpe2Zvcih2YXIgVSxaLEM9cyhGKSxJPWUoQyksTT1uKHgsdywzKSxUPWEoSS5sZW5ndGgpLGI9MCxMPXY/RChGLFQpOnA/RChG''@;'; put 'put ''LDApOnZvaWQgMDtUPmI7YisrKWlmKChnfHxiIGluIEkpJiYoWj1NKFU9SVtiXSxiLEMpLGYpKWlmKHYpTFtiXT1aO2Vsc2UgaWYoWilzd2l0Y2goZil7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gVTtjYXNlIDY6cmV0dXJuIGI7Y2FzZSAyOkwucHVzaChVKX1lbHNlIGlmKG0pcmV0''@;'; put 'put ''dXJuITE7cmV0dXJuIEU/LTE6ZHx8bT9tOkx9fX0sNjU0MzooYyxsLHQpPT57dmFyIG49dCg2MzM4NyksZT10KDE4MjcwKSxzPXQoNjEyNDkpLGE9dCg4MTQ4NSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHUsZixpLHYscCl7bihmKTt2YXIgZD1lKHUpLG09cyhkKSxFPWEoZC5sZW5ndGgpLGc9cD9F''@;'; put 'put ''LTE6MCxEPXA/LTE6MTtpZihpPDIpZm9yKDs7KXtpZihnIGluIG0pe3Y9bVtnXSxnKz1EO2JyZWFrfWlmKGcrPUQscD9nPDA6RTw9Zyl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO3A/Zz49MDpFPmc7Zys9RClnIGlu''@;'; put 'put ''IG0mJih2PWYodixtW2ddLGcsZCkpO3JldHVybiB2fX0sNjM2MDY6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCg3Nzk4MSkscz10KDY3NTc0KSgic3BlY2llcyIpO2MuZXhwb3J0cz1mdW5jdGlvbihhKXt2YXIgdTtyZXR1cm4gZShhKSYmKCJmdW5jdGlvbiI9PXR5cGVvZih1PWEuY29u''@;'; put 'put ''c3RydWN0b3IpJiYodT09PUFycmF5fHxlKHUucHJvdG90eXBlKSkmJih1PXZvaWQgMCksbih1KSYmbnVsbD09PSh1PXVbc10pJiYodT12b2lkIDApKSx2b2lkIDA9PT11P0FycmF5OnV9fSw5MzE5MTooYyxsLHQpPT57dmFyIG49dCg2MzYwNik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7cmV0''@;'; put 'put ''dXJuIG5ldyhuKGUpKShzKX19LDE1NTM4OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg2MzM4NyksZT10KDQzMzA1KSxzPXQoMjQ4NzcpLGE9W10uc2xpY2UsdT17fTtjLmV4cG9ydHM9RnVuY3Rpb24uYmluZHx8ZnVuY3Rpb24odil7dmFyIHA9bih0aGlzKSxkPWEuY2FsbChhcmd1''@;'; put 'put ''bWVudHMsMSksbT1mdW5jdGlvbigpe3ZhciBFPWQuY29uY2F0KGEuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG0/ZnVuY3Rpb24oaSx2LHApe2lmKCEodiBpbiB1KSl7Zm9yKHZhciBkPVtdLG09MDttPHY7bSsrKWRbbV09ImFbIittKyJdIjt1W3ZdPUZ1bmN0aW9u''@;'; put 'put ''KCJGLGEiLCJyZXR1cm4gbmV3IEYoIitkLmpvaW4oIiwiKSsiKSIpfXJldHVybiB1W3ZdKGkscCl9KHAsRS5sZW5ndGgsRSk6cyhwLEUsdil9O3JldHVybiBlKHAucHJvdG90eXBlKSYmKG0ucHJvdG90eXBlPXAucHJvdG90eXBlKSxtfX0sMzQ4NDg6KGMsbCx0KT0+e3ZhciBuPXQoNTUwODkp''@;'; put 'put ''LGU9dCg2NzU3NCkoInRvU3RyaW5nVGFnIikscz0iQXJndW1lbnRzIj09bihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXt2YXIgZixpLHY7cmV0dXJuIHZvaWQgMD09PXU/IlVuZGVmaW5lZCI6bnVsbD09PXU/Ik51bGwiOiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YoaT1mdW5jdGlvbih1LGYpe3RyeXtyZXR1cm4gdVtmXX1jYXRjaHt9fShmPU9iamVjdCh1KSxlKSk/aTpzP24oZik6Ik9iamVjdCI9PSh2PW4oZikpJiYiZnVuY3Rpb24iPT10eXBlb2YgZi5jYWxsZWU/IkFyZ3VtZW50cyI6dn19LDU1MDg5OmM9Pnt2YXIgbD17fS50b1N0cmluZztj''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGwuY2FsbCh0KS5zbGljZSg4LC0xKX19LDM2MTk3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Nzk2NykuZixlPXQoODQ3MTkpLHM9dCg5NjA2NSksYT10KDM1MDUyKSx1PXQoMTY0NDApLGY9dCg0ODc5MCksaT10KDk4MTc1KSx2''@;'; put 'put ''PXQoNzQ5NzApLHA9dCg1NTc2MiksZD10KDE3NjMpLG09dCgxMjk4OCkuZmFzdEtleSxFPXQoMTI4ODgpLGc9ZD8iX3MiOiJzaXplIixEPWZ1bmN0aW9uKEYseCl7dmFyIEMsdz1tKHgpO2lmKCJGIiE9PXcpcmV0dXJuIEYuX2lbd107Zm9yKEM9Ri5fZjtDO0M9Qy5uKWlmKEMuaz09eClyZXR1''@;'; put 'put ''cm4gQ307Yy5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihGLHgsdyxDKXt2YXIgST1GKGZ1bmN0aW9uKE0sVCl7dShNLEkseCwiX2kiKSxNLl90PXgsTS5faT1lKG51bGwpLE0uX2Y9dm9pZCAwLE0uX2w9dm9pZCAwLE1bZ109MCxudWxsIT1UJiZmKFQsdyxNW0NdLE0pfSk7cmV0''@;'; put 'put ''dXJuIHMoSS5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBUPUUodGhpcyx4KSxiPVQuX2ksTD1ULl9mO0w7TD1MLm4pTC5yPSEwLEwucCYmKEwucD1MLnAubj12b2lkIDApLGRlbGV0ZSBiW0wuaV07VC5fZj1ULl9sPXZvaWQgMCxUW2ddPTB9LGRlbGV0ZTpmdW5jdGlvbihN''@;'; put 'put ''KXt2YXIgVD1FKHRoaXMseCksYj1EKFQsTSk7aWYoYil7dmFyIEw9Yi5uLFU9Yi5wO2RlbGV0ZSBULl9pW2IuaV0sYi5yPSEwLFUmJihVLm49TCksTCYmKEwucD1VKSxULl9mPT1iJiYoVC5fZj1MKSxULl9sPT1iJiYoVC5fbD1VKSxUW2ddLS19cmV0dXJuISFifSxmb3JFYWNoOmZ1bmN0aW9u''@;'; put 'put ''KFQpe0UodGhpcyx4KTtmb3IodmFyIEwsYj1hKFQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7TD1MP0wubjp0aGlzLl9mOylmb3IoYihMLnYsTC5rLHRoaXMpO0wmJkwucjspTD1MLnB9LGhhczpmdW5jdGlvbihUKXtyZXR1cm4hIUQoRSh0aGlzLHgpLFQpfX0p''@;'; put 'put ''LGQmJm4oSS5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLHgpW2ddfX0pLEl9LGRlZjpmdW5jdGlvbihGLHgsdyl7dmFyIEksTSxDPUQoRix4KTtyZXR1cm4gQz9DLnY9dzooRi5fbD1DPXtpOk09bSh4LCEwKSxrOngsdjp3LHA6ST1GLl9sLG46dm9pZCAw''@;'; put 'put ''LHI6ITF9LEYuX2Z8fChGLl9mPUMpLEkmJihJLm49QyksRltnXSsrLCJGIiE9PU0mJihGLl9pW01dPUMpKSxGfSxnZXRFbnRyeTpELHNldFN0cm9uZzpmdW5jdGlvbihGLHgsdyl7aShGLHgsZnVuY3Rpb24oQyxJKXt0aGlzLl90PUUoQyx4KSx0aGlzLl9rPUksdGhpcy5fbD12b2lkIDB9LGZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBDPXRoaXMsST1DLl9rLE09Qy5fbDtNJiZNLnI7KU09TS5wO3JldHVybiBDLl90JiYoQy5fbD1NPU0/TS5uOkMuX3QuX2YpP3YoMCwia2V5cyI9PUk/TS5rOiJ2YWx1ZXMiPT1JP00udjpbTS5rLE0udl0pOihDLl90PXZvaWQgMCx2KDEpKX0sdz8iZW50cmllcyI6''@;'; put 'put ''InZhbHVlcyIsIXcsITApLHAoeCl9fX0sOTk4ODI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDk2MDY1KSxlPXQoMTI5ODgpLmdldFdlYWsscz10KDQyMjgpLGE9dCg0MzMwNSksdT10KDE2NDQwKSxmPXQoNDg3OTApLGk9dCg2NjE3OSksdj10KDU3OTE3KSxwPXQoMTI4ODgpLGQ9''@;'; put 'put ''aSg1KSxtPWkoNiksRT0wLGc9ZnVuY3Rpb24oeCl7cmV0dXJuIHguX2x8fCh4Ll9sPW5ldyBEKX0sRD1mdW5jdGlvbigpe3RoaXMuYT1bXX0sRj1mdW5jdGlvbih4LHcpe3JldHVybiBkKHguYSxmdW5jdGlvbihDKXtyZXR1cm4gQ1swXT09PXd9KX07RC5wcm90b3R5cGU9e2dldDpmdW5jdGlv''@;'; put 'put ''bih4KXt2YXIgdz1GKHRoaXMseCk7aWYodylyZXR1cm4gd1sxXX0saGFzOmZ1bmN0aW9uKHgpe3JldHVybiEhRih0aGlzLHgpfSxzZXQ6ZnVuY3Rpb24oeCx3KXt2YXIgQz1GKHRoaXMseCk7Qz9DWzFdPXc6dGhpcy5hLnB1c2goW3gsd10pfSxkZWxldGU6ZnVuY3Rpb24oeCl7dmFyIHc9bSh0''@;'; put 'put ''aGlzLmEsZnVuY3Rpb24oQyl7cmV0dXJuIENbMF09PT14fSk7cmV0dXJufncmJnRoaXMuYS5zcGxpY2UodywxKSwhIX53fX0sYy5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih4LHcsQyxJKXt2YXIgTT14KGZ1bmN0aW9uKFQsYil7dShULE0sdywiX2kiKSxULl90PXcsVC5faT1F''@;'; put 'put ''KyssVC5fbD12b2lkIDAsbnVsbCE9YiYmZihiLEMsVFtJXSxUKX0pO3JldHVybiBuKE0ucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24oVCl7aWYoIWEoVCkpcmV0dXJuITE7dmFyIGI9ZShUKTtyZXR1cm4hMD09PWI/ZyhwKHRoaXMsdykpLmRlbGV0ZShUKTpiJiZ2KGIsdGhpcy5faSkmJmRl''@;'; put 'put ''bGV0ZSBiW3RoaXMuX2ldfSxoYXM6ZnVuY3Rpb24oYil7aWYoIWEoYikpcmV0dXJuITE7dmFyIEw9ZShiKTtyZXR1cm4hMD09PUw/ZyhwKHRoaXMsdykpLmhhcyhiKTpMJiZ2KEwsdGhpcy5faSl9fSksTX0sZGVmOmZ1bmN0aW9uKHgsdyxDKXt2YXIgST1lKHModyksITApO3JldHVybiEwPT09''@;'; put 'put ''ST9nKHgpLnNldCh3LEMpOklbeC5faV09Qyx4fSx1ZnN0b3JlOmd9fSw1ODkzMzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjc1MjYpLGU9dCg5MjEyNykscz10KDI4ODU5KSxhPXQoOTYwNjUpLHU9dCgxMjk4OCksZj10KDQ4NzkwKSxpPXQoMTY0NDApLHY9dCg0MzMwNSkscD10''@;'; put 'put ''KDc5NDQ4KSxkPXQoOTg5MzEpLG09dCgzODQ0KSxFPXQoOTg4ODApO2MuZXhwb3J0cz1mdW5jdGlvbihnLEQsRix4LHcsQyl7dmFyIEk9bltnXSxNPUksVD13PyJzZXQiOiJhZGQiLGI9TSYmTS5wcm90b3R5cGUsTD17fSxVPWZ1bmN0aW9uKHEpe3ZhciBYPWJbcV07cyhiLHEsImRlbGV0ZSI9''@;'; put 'put ''PXE/ZnVuY3Rpb24oZXQpe3JldHVybiEoQyYmIXYoZXQpKSYmWC5jYWxsKHRoaXMsMD09PWV0PzA6ZXQpfToiaGFzIj09cT9mdW5jdGlvbihWKXtyZXR1cm4hKEMmJiF2KFYpKSYmWC5jYWxsKHRoaXMsMD09PVY/MDpWKX06ImdldCI9PXE/ZnVuY3Rpb24oVil7cmV0dXJuIEMmJiF2KFYpP3Zv''@;'; put 'put ''aWQgMDpYLmNhbGwodGhpcywwPT09Vj8wOlYpfToiYWRkIj09cT9mdW5jdGlvbihWKXtyZXR1cm4gWC5jYWxsKHRoaXMsMD09PVY/MDpWKSx0aGlzfTpmdW5jdGlvbihWLGZ0KXtyZXR1cm4gWC5jYWxsKHRoaXMsMD09PVY/MDpWLGZ0KSx0aGlzfSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBN''@;'; put 'put ''JiYoQ3x8Yi5mb3JFYWNoJiYhcChmdW5jdGlvbigpeyhuZXcgTSkuZW50cmllcygpLm5leHQoKX0pKSl7dmFyIFo9bmV3IE0sbnQ9WltUXShDP3t9Oi0wLDEpIT1aLHR0PXAoZnVuY3Rpb24oKXtaLmhhcygxKX0pLHl0PWQoZnVuY3Rpb24ocSl7bmV3IE0ocSl9KSxtdD0hQyYmcChmdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgcT1uZXcgTSxYPTU7WC0tOylxW1RdKFgsWCk7cmV0dXJuIXEuaGFzKC0wKX0pO3l0fHwoKE09RChmdW5jdGlvbihxLFgpe2kocSxNLGcpO3ZhciBldD1FKG5ldyBJLHEsTSk7cmV0dXJuIG51bGwhPVgmJmYoWCx3LGV0W1RdLGV0KSxldH0pKS5wcm90b3R5cGU9YixiLmNv''@;'; put 'put ''bnN0cnVjdG9yPU0pLCh0dHx8bXQpJiYoVSgiZGVsZXRlIiksVSgiaGFzIiksdyYmVSgiZ2V0IikpLChtdHx8bnQpJiZVKFQpLEMmJmIuY2xlYXImJmRlbGV0ZSBiLmNsZWFyfWVsc2UgTT14LmdldENvbnN0cnVjdG9yKEQsZyx3LFQpLGEoTS5wcm90b3R5cGUsRiksdS5ORUVEPSEwO3JldHVy''@;'; put 'put ''biBtKE0sZyksTFtnXT1NLGUoZS5HK2UuVytlLkYqKE0hPUkpLEwpLEN8fHguc2V0U3Ryb25nKE0sZyx3KSxNfX0sNTYwOTQ6Yz0+e3ZhciBsPWMuZXhwb3J0cz17dmVyc2lvbjoiMi42LjEyIn07Im51bWJlciI9PXR5cGVvZiBfX2UmJihfX2U9bCl9LDY3MjI3OihjLGwsdCk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIG49dCg0Nzk2NyksZT10KDExOTk2KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyxhLHUpe2EgaW4gcz9uLmYocyxhLGUoMCx1KSk6c1thXT11fX0sMzUwNTI6KGMsbCx0KT0+e3ZhciBuPXQoNjMzODcpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMsYSl7aWYobihlKSx2b2lkIDA9PT1z''@;'; put 'put ''KXJldHVybiBlO3N3aXRjaChhKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBlLmNhbGwocyx1KX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbih1LGYpe3JldHVybiBlLmNhbGwocyx1LGYpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHUsZixpKXtyZXR1cm4gZS5jYWxsKHMsdSxm''@;'; put 'put ''LGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShzLGFyZ3VtZW50cyl9fX0sNTUzODU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDc5NDQ4KSxlPURhdGUucHJvdG90eXBlLmdldFRpbWUscz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyxhPWZ1bmN0aW9uKHUp''@;'; put 'put ''e3JldHVybiB1Pjk/dToiMCIrdX07Yy5leHBvcnRzPW4oZnVuY3Rpb24oKXtyZXR1cm4iMDM4NS0wNy0yNVQwNzowNjozOS45OTlaIiE9cy5jYWxsKG5ldyBEYXRlKC01MDAwMDAwMDAwMDAwMSkpfSl8fCFuKGZ1bmN0aW9uKCl7cy5jYWxsKG5ldyBEYXRlKE5hTikpfSk/ZnVuY3Rpb24oKXtp''@;'; put 'put ''ZighaXNGaW5pdGUoZS5jYWxsKHRoaXMpKSl0aHJvdyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTt2YXIgZj10aGlzLGk9Zi5nZXRVVENGdWxsWWVhcigpLHY9Zi5nZXRVVENNaWxsaXNlY29uZHMoKSxwPWk8MD8iLSI6aT45OTk5PyIrIjoiIjtyZXR1cm4gcCsoIjAwMDAwIitN''@;'; put 'put ''YXRoLmFicyhpKSkuc2xpY2UocD8tNjotNCkrIi0iK2EoZi5nZXRVVENNb250aCgpKzEpKyItIithKGYuZ2V0VVRDRGF0ZSgpKSsiVCIrYShmLmdldFVUQ0hvdXJzKCkpKyI6IithKGYuZ2V0VVRDTWludXRlcygpKSsiOiIrYShmLmdldFVUQ1NlY29uZHMoKSkrIi4iKyh2Pjk5P3Y6IjAiK2Eo''@;'; put 'put ''dikpKyJaIn06c30sMjAxMDc6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCg4MzA0OCkscz0ibnVtYmVyIjtjLmV4cG9ydHM9ZnVuY3Rpb24oYSl7aWYoInN0cmluZyIhPT1hJiZhIT09cyYmImRlZmF1bHQiIT09YSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBo''@;'; put 'put ''aW50Iik7cmV0dXJuIGUobih0aGlzKSxhIT1zKX19LDMzNDQ6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsKXtpZihudWxsPT1sKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrbCk7cmV0dXJuIGx9fSwxNzYzOihjLGwsdCk9PntjLmV4cG9ydHM9IXQoNzk0NDgpKGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sNDYwMzQ6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCg2NzUyNikuZG9jdW1lbnQscz1uKGUpJiZuKGUuY3JlYXRlRWxlbWVudCk7Yy5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uKGEpe3JldHVybiBzP2UuY3JlYXRlRWxlbWVudChhKTp7fX19LDg2MTQwOmM9PntjLmV4cG9ydHM9ImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZiIu''@;'; put 'put ''c3BsaXQoIiwiKX0sMTU5Njk6KGMsbCx0KT0+e3ZhciBuPXQoNTEzMTEpLGU9dCgxMDYwKSxzPXQoODQ0OSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGEpe3ZhciB1PW4oYSksZj1lLmY7aWYoZilmb3IodmFyIGQsaT1mKGEpLHY9cy5mLHA9MDtpLmxlbmd0aD5wOyl2LmNhbGwoYSxkPWlbcCsrXSkm''@;'; put 'put ''JnUucHVzaChkKTtyZXR1cm4gdX19LDkyMTI3OihjLGwsdCk9Pnt2YXIgbj10KDY3NTI2KSxlPXQoNTYwOTQpLHM9dCgzMzM0MSksYT10KDI4ODU5KSx1PXQoMzUwNTIpLGY9InByb3RvdHlwZSIsaT1mdW5jdGlvbih2LHAsZCl7dmFyIEksTSxULGIsbT12JmkuRixFPXYmaS5HLEQ9diZpLlAs''@;'; put 'put ''Rj12JmkuQix4PUU/bjp2JmkuUz9uW3BdfHwobltwXT17fSk6KG5bcF18fHt9KVtmXSx3PUU/ZTplW3BdfHwoZVtwXT17fSksQz13W2ZdfHwod1tmXT17fSk7Zm9yKEkgaW4gRSYmKGQ9cCksZClUPSgoTT0hbSYmeCYmdm9pZCAwIT09eFtJXSk/eDpkKVtJXSxiPUYmJk0/dShULG4pOkQmJiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBUP3UoRnVuY3Rpb24uY2FsbCxUKTpULHgmJmEoeCxJLFQsdiZpLlUpLHdbSV0hPVQmJnModyxJLGIpLEQmJkNbSV0hPVQmJihDW0ldPVQpfTtuLmNvcmU9ZSxpLkY9MSxpLkc9MixpLlM9NCxpLlA9OCxpLkI9MTYsaS5XPTMyLGkuVT02NCxpLlI9MTI4LGMuZXhw''@;'; put 'put ''b3J0cz1pfSwyNTIwMzooYyxsLHQpPT57dmFyIG49dCg2NzU3NCkoIm1hdGNoIik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciBzPS8uLzt0cnl7Ii8uLyJbZV0ocyl9Y2F0Y2h7dHJ5e3JldHVybiBzW25dPSExLCEiLy4vIltlXShzKX1jYXRjaHt9fXJldHVybiEwfX0sNzk0NDg6Yz0+e2Mu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbihsKXt0cnl7cmV0dXJuISFsKCl9Y2F0Y2h7cmV0dXJuITB9fX0sNjkyMjg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDk0MTE2KTt2YXIgbj10KDI4ODU5KSxlPXQoMzMzNDEpLHM9dCg3OTQ0OCksYT10KDMzNDQpLHU9dCg2NzU3NCksZj10KDY5NjAwKSxpPXUo''@;'; put 'put ''InNwZWNpZXMiKSx2PSFzKGZ1bmN0aW9uKCl7dmFyIGQ9Ly4vO3JldHVybiBkLmV4ZWM9ZnVuY3Rpb24oKXt2YXIgbT1bXTtyZXR1cm4gbS5ncm91cHM9e2E6IjcifSxtfSwiNyIhPT0iIi5yZXBsYWNlKGQsIiQ8YT4iKX0pLHA9ZnVuY3Rpb24oKXt2YXIgZD0vKD86KS8sbT1kLmV4ZWM7ZC5l''@;'; put 'put ''eGVjPWZ1bmN0aW9uKCl7cmV0dXJuIG0uYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgRT0iYWIiLnNwbGl0KGQpO3JldHVybiAyPT09RS5sZW5ndGgmJiJhIj09PUVbMF0mJiJiIj09PUVbMV19KCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGQsbSxFKXt2YXIgZz11KGQpLEQ9IXMoZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgTT17fTtyZXR1cm4gTVtnXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT0iIltkXShNKX0pLEY9RD8hcyhmdW5jdGlvbigpe3ZhciBNPSExLFQ9L2EvO3JldHVybiBULmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gTT0hMCxudWxsfSwic3BsaXQiPT09ZCYmKFQuY29uc3RydWN0b3I9e30s''@;'; put 'put ''VC5jb25zdHJ1Y3RvcltpXT1mdW5jdGlvbigpe3JldHVybiBUfSksVFtnXSgiIiksIU19KTp2b2lkIDA7aWYoIUR8fCFGfHwicmVwbGFjZSI9PT1kJiYhdnx8InNwbGl0Ij09PWQmJiFwKXt2YXIgeD0vLi9bZ10sdz1FKGEsZywiIltkXSxmdW5jdGlvbihULGIsTCxVLFope3JldHVybiBiLmV4''@;'; put 'put ''ZWM9PT1mP0QmJiFaP3tkb25lOiEwLHZhbHVlOnguY2FsbChiLEwsVSl9Ontkb25lOiEwLHZhbHVlOlQuY2FsbChMLGIsVSl9Ontkb25lOiExfX0pLEk9d1sxXTtuKFN0cmluZy5wcm90b3R5cGUsZCx3WzBdKSxlKFJlZ0V4cC5wcm90b3R5cGUsZywyPT1tP2Z1bmN0aW9uKE0sVCl7cmV0dXJu''@;'; put 'put ''IEkuY2FsbChNLHRoaXMsVCl9OmZ1bmN0aW9uKE0pe3JldHVybiBJLmNhbGwoTSx0aGlzKX0pfX19LDExNTg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpO2MuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlPW4odGhpcykscz0iIjtyZXR1cm4gZS5nbG9iYWwmJihzKz0iZyIp''@;'; put 'put ''LGUuaWdub3JlQ2FzZSYmKHMrPSJpIiksZS5tdWx0aWxpbmUmJihzKz0ibSIpLGUudW5pY29kZSYmKHMrPSJ1IiksZS5zdGlja3kmJihzKz0ieSIpLHN9fSw0ODc5MDooYyxsLHQpPT57dmFyIG49dCgzNTA1MiksZT10KDk3MzY4KSxzPXQoMTUwOCksYT10KDQyMjgpLHU9dCg4MTQ4NSksZj10''@;'; put 'put ''KDIwNzYyKSxpPXt9LHY9e30scD1jLmV4cG9ydHM9ZnVuY3Rpb24oZCxtLEUsZyxEKXt2YXIgQyxJLE0sVCxGPUQ/ZnVuY3Rpb24oKXtyZXR1cm4gZH06ZihkKSx4PW4oRSxnLG0/MjoxKSx3PTA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEYpdGhyb3cgVHlwZUVycm9yKGQrIiBpcyBub3QgaXRl''@;'; put 'put ''cmFibGUhIik7aWYocyhGKSl7Zm9yKEM9dShkLmxlbmd0aCk7Qz53O3crKylpZigoVD1tP3goYShJPWRbd10pWzBdLElbMV0pOngoZFt3XSkpPT09aXx8VD09PXYpcmV0dXJuIFR9ZWxzZSBmb3IoTT1GLmNhbGwoZCk7IShJPU0ubmV4dCgpKS5kb25lOylpZigoVD1lKE0seCxJLnZhbHVlLG0p''@;'; put 'put ''KT09PWl8fFQ9PT12KXJldHVybiBUfTtwLkJSRUFLPWkscC5SRVRVUk49dn0sNDk0NjE6KGMsbCx0KT0+e2MuZXhwb3J0cz10KDQ0NTU2KSgibmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZyIsRnVuY3Rpb24udG9TdHJpbmcpfSw2NzUyNjpjPT57dmFyIGw9Yy5leHBvcnRzPXR5cGVvZiB3aW5k''@;'; put 'put ''b3c8InUiJiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6dHlwZW9mIHNlbGY8InUiJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPWwpfSw1NzkxNzpjPT57dmFyIGw9e30uaGFzT3duUHJvcGVydHk7Yy5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY2FsbCh0LG4pfX0sMzMzNDE6KGMsbCx0KT0+e3ZhciBuPXQoNDc5NjcpLGU9dCgxMTk5Nik7Yy5leHBvcnRzPXQoMTc2Myk/ZnVuY3Rpb24ocyxhLHUpe3JldHVybiBuLmYocyxhLGUoMSx1KSl9OmZ1bmN0aW9uKHMsYSx1KXtyZXR1cm4g''@;'; put 'put ''c1thXT11LHN9fSw2MTMwODooYyxsLHQpPT57dmFyIG49dCg2NzUyNikuZG9jdW1lbnQ7Yy5leHBvcnRzPW4mJm4uZG9jdW1lbnRFbGVtZW50fSwyMjk1NjooYyxsLHQpPT57Yy5leHBvcnRzPSF0KDE3NjMpJiYhdCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KHQoNDYwMzQpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sOTg4ODA6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCgyNTE3MCkuc2V0O2MuZXhwb3J0cz1mdW5jdGlvbihzLGEsdSl7dmFyIGksZj1hLmNvbnN0cnVjdG9yO3JldHVybiBmIT09''@;'; put 'put ''dSYmImZ1bmN0aW9uIj09dHlwZW9mIGYmJihpPWYucHJvdG90eXBlKSE9PXUucHJvdG90eXBlJiZuKGkpJiZlJiZlKHMsaSksc319LDI0ODc3OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24obCx0LG4pe3ZhciBlPXZvaWQgMD09PW47c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGU/bCgp''@;'; put 'put ''OmwuY2FsbChuKTtjYXNlIDE6cmV0dXJuIGU/bCh0WzBdKTpsLmNhbGwobix0WzBdKTtjYXNlIDI6cmV0dXJuIGU/bCh0WzBdLHRbMV0pOmwuY2FsbChuLHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBlP2wodFswXSx0WzFdLHRbMl0pOmwuY2FsbChuLHRbMF0sdFsxXSx0WzJdKTtjYXNlIDQ6''@;'; put 'put ''cmV0dXJuIGU/bCh0WzBdLHRbMV0sdFsyXSx0WzNdKTpsLmNhbGwobix0WzBdLHRbMV0sdFsyXSx0WzNdKX1yZXR1cm4gbC5hcHBseShuLHQpfX0sNjEyNDk6KGMsbCx0KT0+e3ZhciBuPXQoNTUwODkpO2MuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmpl''@;'; put 'put ''Y3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PW4oZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sMTUwODooYyxsLHQpPT57dmFyIG49dCg2MDkwNiksZT10KDY3NTc0KSgiaXRlcmF0b3IiKSxzPUFycmF5LnByb3RvdHlwZTtjLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQg''@;'; put 'put ''MCE9PWEmJihuLkFycmF5PT09YXx8c1tlXT09PWEpfX0sNzc5ODE6KGMsbCx0KT0+e3ZhciBuPXQoNTUwODkpO2MuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihzKXtyZXR1cm4iQXJyYXkiPT1uKHMpfX0sMzM4NDI6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9TWF0aC5mbG9v''@;'; put 'put ''cjtjLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuIW4oYSkmJmlzRmluaXRlKGEpJiZlKGEpPT09YX19LDQzMzA1OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24obCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBsP251bGwhPT1sOiJmdW5jdGlvbiI9PXR5cGVvZiBsfX0sOTU0MTE6KGMsbCx0KT0+''@;'; put 'put ''e3ZhciBuPXQoNDMzMDUpLGU9dCg1NTA4OSkscz10KDY3NTc0KSgibWF0Y2giKTtjLmV4cG9ydHM9ZnVuY3Rpb24oYSl7dmFyIHU7cmV0dXJuIG4oYSkmJih2b2lkIDAhPT0odT1hW3NdKT8hIXU6IlJlZ0V4cCI9PWUoYSkpfX0sOTczNjg6KGMsbCx0KT0+e3ZhciBuPXQoNDIyOCk7Yy5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uKGUscyxhLHUpe3RyeXtyZXR1cm4gdT9zKG4oYSlbMF0sYVsxXSk6cyhhKX1jYXRjaChpKXt2YXIgZj1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1mJiZuKGYuY2FsbChlKSksaX19fSw2MDMyOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg4NDcxOSksZT10KDEx''@;'; put 'put ''OTk2KSxzPXQoMzg0NCksYT17fTt0KDMzMzQxKShhLHQoNjc1NzQpKCJpdGVyYXRvciIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjLmV4cG9ydHM9ZnVuY3Rpb24odSxmLGkpe3UucHJvdG90eXBlPW4oYSx7bmV4dDplKDEsaSl9KSxzKHUsZisiIEl0ZXJhdG9yIil9fSw5ODE3NTooYyxs''@;'; put 'put ''LHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjI3NTApLGU9dCg5MjEyNykscz10KDI4ODU5KSxhPXQoMzMzNDEpLHU9dCg2MDkwNiksZj10KDYwMzIpLGk9dCgzODQ0KSx2PXQoNDA2MjcpLHA9dCg2NzU3NCkoIml0ZXJhdG9yIiksZD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxF''@;'; put 'put ''PSJrZXlzIixnPSJ2YWx1ZXMiLEQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307Yy5leHBvcnRzPWZ1bmN0aW9uKEYseCx3LEMsSSxNLFQpe2Yodyx4LEMpO3ZhciBYLGV0LFYsYj1mdW5jdGlvbihmdCl7aWYoIWQmJmZ0IGluIG50KXJldHVybiBudFtmdF07c3dpdGNoKGZ0KXtjYXNlIEU6Y2Fz''@;'; put 'put ''ZSBnOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgdyh0aGlzLGZ0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3KHRoaXMsZnQpfX0sTD14KyIgSXRlcmF0b3IiLFU9ST09ZyxaPSExLG50PUYucHJvdG90eXBlLHR0PW50W3BdfHxudFsiQEBpdGVyYXRvciJdfHxJJiZudFtJ''@;'; put 'put ''XSx5dD10dHx8YihJKSxtdD1JP1U/YigiZW50cmllcyIpOnl0OnZvaWQgMCxxPSJBcnJheSI9PXgmJm50LmVudHJpZXN8fHR0O2lmKHEmJihWPXYocS5jYWxsKG5ldyBGKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmVi5uZXh0JiYoaShWLEwsITApLCFuJiYiZnVuY3Rpb24iIT10eXBlb2YgVltw''@;'; put 'put ''XSYmYShWLHAsRCkpLFUmJnR0JiZ0dC5uYW1lIT09ZyYmKFo9ITAseXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdHQuY2FsbCh0aGlzKX0pLCghbnx8VCkmJihkfHxafHwhbnRbcF0pJiZhKG50LHAseXQpLHVbeF09eXQsdVtMXT1ELEkpaWYoWD17dmFsdWVzOlU/eXQ6YihnKSxrZXlzOk0/eXQ6YihF''@;'; put 'put ''KSxlbnRyaWVzOm10fSxUKWZvcihldCBpbiBYKWV0IGluIG50fHxzKG50LGV0LFhbZXRdKTtlbHNlIGUoZS5QK2UuRiooZHx8WikseCxYKTtyZXR1cm4gWH19LDk4OTMxOihjLGwsdCk9Pnt2YXIgbj10KDY3NTc0KSgiaXRlcmF0b3IiKSxlPSExO3RyeXt2YXIgcz1bN11bbl0oKTtzLnJldHVy''@;'; put 'put ''bj1mdW5jdGlvbigpe2U9ITB9LEFycmF5LmZyb20ocyxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaHt9Yy5leHBvcnRzPWZ1bmN0aW9uKGEsdSl7aWYoIXUmJiFlKXJldHVybiExO3ZhciBmPSExO3RyeXt2YXIgaT1bN10sdj1pW25dKCk7di5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6''@;'; put 'put ''Zj0hMH19LGlbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdn0sYShpKX1jYXRjaHt9cmV0dXJuIGZ9fSw3NDk3MDpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwsdCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohIWx9fX0sNjA5MDY6Yz0+e2MuZXhwb3J0cz17fX0sMjI3NTA6Yz0+e2MuZXhwb3J0cz0hMX0s''@;'; put 'put ''NzU1NTE6Yz0+e3ZhciBsPU1hdGguZXhwbTE7Yy5leHBvcnRzPSFsfHxsKDEwKT4yMjAyNS40NjU3OTQ4MDY3MTh8fGwoMTApPDIyMDI1LjQ2NTc5NDgwNjcxOHx8LTJlLTE3IT1sKC0yZS0xNyk/ZnVuY3Rpb24obil7cmV0dXJuIDA9PShuPStuKT9uOm4+LTFlLTYmJm48MWUtNj9uK24qbi8y''@;'; put 'put ''Ok1hdGguZXhwKG4pLTF9Omx9LDcyMTIyOihjLGwsdCk9Pnt2YXIgbj10KDM3MzMpLGU9TWF0aC5wb3cscz1lKDIsLTUyKSxhPWUoMiwtMjMpLHU9ZSgyLDEyNykqKDItYSksZj1lKDIsLTEyNik7Yy5leHBvcnRzPU1hdGguZnJvdW5kfHxmdW5jdGlvbihwKXt2YXIgRSxnLGQ9TWF0aC5hYnMo''@;'; put 'put ''cCksbT1uKHApO3JldHVybiBkPGY/bSooZC9mL2ErMS9zLTEvcykqZiphOihnPShFPSgxK2EvcykqZCktKEUtZCkpPnV8fGchPWc/bSooMS8wKTptKmd9fSw3MTQ3MzpjPT57Yy5leHBvcnRzPU1hdGgubG9nMXB8fGZ1bmN0aW9uKHQpe3JldHVybih0PSt0KT4tMWUtOCYmdDwxZS04P3QtdCp0''@;'; put 'put ''LzI6TWF0aC5sb2coMSt0KX19LDM3MzM6Yz0+e2MuZXhwb3J0cz1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCl8fHQhPXQ/dDp0PDA/LTE6MX19LDEyOTg4OihjLGwsdCk9Pnt2YXIgbj10KDQ0MTUpKCJtZXRhIiksZT10KDQzMzA1KSxzPXQoNTc5MTcpLGE9dCg0Nzk2''@;'; put 'put ''NykuZix1PTAsZj1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxpPSF0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiBmKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksdj1mdW5jdGlvbihnKXthKGcsbix7dmFsdWU6e2k6Ik8iKyArK3Usdzp7fX19KX0s''@;'; put 'put ''RT1jLmV4cG9ydHM9e0tFWTpuLE5FRUQ6ITEsZmFzdEtleTpmdW5jdGlvbihnLEQpe2lmKCFlKGcpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgZz9nOigic3RyaW5nIj09dHlwZW9mIGc/IlMiOiJQIikrZztpZighcyhnLG4pKXtpZighZihnKSlyZXR1cm4iRiI7aWYoIUQpcmV0dXJuIkUiO3Yo''@;'; put 'put ''Zyl9cmV0dXJuIGdbbl0uaX0sZ2V0V2VhazpmdW5jdGlvbihnLEQpe2lmKCFzKGcsbikpe2lmKCFmKGcpKXJldHVybiEwO2lmKCFEKXJldHVybiExO3YoZyl9cmV0dXJuIGdbbl0ud30sb25GcmVlemU6ZnVuY3Rpb24oZyl7cmV0dXJuIGkmJkUuTkVFRCYmZihnKSYmIXMoZyxuKSYmdihnKSxn''@;'; put 'put ''fX19LDk3MzgwOihjLGwsdCk9Pnt2YXIgbj10KDkzMzg2KSxlPXQoOTIxMjcpLHM9dCg0NDU1NikoIm1ldGFkYXRhIiksYT1zLnN0b3JlfHwocy5zdG9yZT1uZXcodCg3OTM5NykpKSx1PWZ1bmN0aW9uKEUsZyxEKXt2YXIgRj1hLmdldChFKTtpZighRil7aWYoIUQpcmV0dXJuO2Euc2V0KEUs''@;'; put 'put ''Rj1uZXcgbil9dmFyIHg9Ri5nZXQoZyk7aWYoIXgpe2lmKCFEKXJldHVybjtGLnNldChnLHg9bmV3IG4pfXJldHVybiB4fTtjLmV4cG9ydHM9e3N0b3JlOmEsbWFwOnUsaGFzOmZ1bmN0aW9uKEUsZyxEKXt2YXIgRj11KGcsRCwhMSk7cmV0dXJuIHZvaWQgMCE9PUYmJkYuaGFzKEUpfSxnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oRSxnLEQpe3ZhciBGPXUoZyxELCExKTtyZXR1cm4gdm9pZCAwPT09Rj92b2lkIDA6Ri5nZXQoRSl9LHNldDpmdW5jdGlvbihFLGcsRCxGKXt1KEQsRiwhMCkuc2V0KEUsZyl9LGtleXM6ZnVuY3Rpb24oRSxnKXt2YXIgRD11KEUsZywhMSksRj1bXTtyZXR1cm4gRCYmRC5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKHgsdyl7Ri5wdXNoKHcpfSksRn0sa2V5OmZ1bmN0aW9uKEUpe3JldHVybiB2b2lkIDA9PT1FfHwic3ltYm9sIj09dHlwZW9mIEU/RTpTdHJpbmcoRSl9LGV4cDpmdW5jdGlvbihFKXtlKGUuUywiUmVmbGVjdCIsRSl9fX0sMjgyMDY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgbj10KDE3NjMpLGU9dCg1MTMxMSkscz10KDEwNjApLGE9dCg4NDQ5KSx1PXQoMTgyNzApLGY9dCg2MTI0OSksaT1PYmplY3QuYXNzaWduO2MuZXhwb3J0cz0haXx8dCg3OTQ0OCkoZnVuY3Rpb24oKXt2YXIgdj17fSxwPXt9LGQ9U3ltYm9sKCksbT0iYWJjZGVmZ2hpamtsbW5vcHFy''@;'; put 'put ''c3QiO3JldHVybiB2W2RdPTcsbS5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihFKXtwW0VdPUV9KSw3IT1pKHt9LHYpW2RdfHxPYmplY3Qua2V5cyhpKHt9LHApKS5qb2luKCIiKSE9bX0pP2Z1bmN0aW9uKHAsZCl7Zm9yKHZhciBtPXUocCksRT1hcmd1bWVudHMubGVuZ3RoLGc9MSxEPXMu''@;'; put 'put ''ZixGPWEuZjtFPmc7KWZvcih2YXIgTSx4PWYoYXJndW1lbnRzW2crK10pLHc9RD9lKHgpLmNvbmNhdChEKHgpKTplKHgpLEM9dy5sZW5ndGgsST0wO0M+STspTT13W0krK10sKCFufHxGLmNhbGwoeCxNKSkmJihtW01dPXhbTV0pO3JldHVybiBtfTppfSw4NDcxOTooYyxsLHQpPT57dmFyIG49''@;'; put 'put ''dCg0MjI4KSxlPXQoMjE2MjYpLHM9dCg4NjE0MCksYT10KDQwNzY2KSgiSUVfUFJPVE8iKSx1PWZ1bmN0aW9uKCl7fSxmPSJwcm90b3R5cGUiLGk9ZnVuY3Rpb24oKXt2YXIgRSx2PXQoNDYwMzQpKCJpZnJhbWUiKSxwPXMubGVuZ3RoO2Zvcih2LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQoNjEz''@;'; put 'put ''MDgpLmFwcGVuZENoaWxkKHYpLHYuc3JjPSJqYXZhc2NyaXB0OiIsKEU9di5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksRS53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSxFLmNsb3NlKCksaT1FLkY7cC0tOylkZWxldGUgaVtmXVtzW3BdXTtyZXR1''@;'; put 'put ''cm4gaSgpfTtjLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24ocCxkKXt2YXIgbTtyZXR1cm4gbnVsbCE9PXA/KHVbZl09bihwKSxtPW5ldyB1LHVbZl09bnVsbCxtW2FdPXApOm09aSgpLHZvaWQgMD09PWQ/bTplKG0sZCl9fSw0Nzk2NzooYyxsLHQpPT57dmFyIG49dCg0MjI4KSxl''@;'; put 'put ''PXQoMjI5NTYpLHM9dCg4MzA0OCksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7bC5mPXQoMTc2Myk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGYsaSx2KXtpZihuKGYpLGk9cyhpLCEwKSxuKHYpLGUpdHJ5e3JldHVybiBhKGYsaSx2KX1jYXRjaHt9aWYoImdldCJpbiB2fHwic2V0''@;'; put 'put ''ImluIHYpdGhyb3cgVHlwZUVycm9yKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEiKTtyZXR1cm4idmFsdWUiaW4gdiYmKGZbaV09di52YWx1ZSksZn19LDIxNjI2OihjLGwsdCk9Pnt2YXIgbj10KDQ3OTY3KSxlPXQoNDIyOCkscz10KDUxMzExKTtjLmV4cG9ydHM9dCgxNzYzKT9PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih1LGYpe2UodSk7Zm9yKHZhciBkLGk9cyhmKSx2PWkubGVuZ3RoLHA9MDt2PnA7KW4uZih1LGQ9aVtwKytdLGZbZF0pO3JldHVybiB1fX0sNjg2NDE6KGMsbCx0KT0+e3ZhciBuPXQoODQ0OSksZT10KDExOTk2KSxzPXQoNTcyMjEpLGE9dCg4MzA0''@;'; put 'put ''OCksdT10KDU3OTE3KSxmPXQoMjI5NTYpLGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtsLmY9dCgxNzYzKT9pOmZ1bmN0aW9uKHAsZCl7aWYocD1zKHApLGQ9YShkLCEwKSxmKXRyeXtyZXR1cm4gaShwLGQpfWNhdGNoe31pZih1KHAsZCkpcmV0dXJuIGUoIW4uZi5jYWxsKHAs''@;'; put 'put ''ZCkscFtkXSl9fSw0NzY1OihjLGwsdCk9Pnt2YXIgbj10KDU3MjIxKSxlPXQoNTk0MTUpLmYscz17fS50b1N0cmluZyxhPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6''@;'; put 'put ''W107Yy5leHBvcnRzLmY9ZnVuY3Rpb24oaSl7cmV0dXJuIGEmJiJbb2JqZWN0IFdpbmRvd10iPT1zLmNhbGwoaSk/ZnVuY3Rpb24oZil7dHJ5e3JldHVybiBlKGYpfWNhdGNoe3JldHVybiBhLnNsaWNlKCl9fShpKTplKG4oaSkpfX0sNTk0MTU6KGMsbCx0KT0+e3ZhciBuPXQoMzQ1NjEpLGU9''@;'; put 'put ''dCg4NjE0MCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTtsLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGEpe3JldHVybiBuKGEsZSl9fSwxMDYwOihjLGwpPT57bC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDQwNjI3OihjLGwsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDU3OTE3KSxlPXQoMTgyNzApLHM9dCg0MDc2NikoIklFX1BST1RPIiksYT1PYmplY3QucHJvdG90eXBlO2MuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHUpe3JldHVybiB1PWUodSksbih1LHMpP3Vbc106ImZ1bmN0aW9uIj09dHlwZW9mIHUuY29uc3RydWN0''@;'; put 'put ''b3ImJnUgaW5zdGFuY2VvZiB1LmNvbnN0cnVjdG9yP3UuY29uc3RydWN0b3IucHJvdG90eXBlOnUgaW5zdGFuY2VvZiBPYmplY3Q/YTpudWxsfX0sMzQ1NjE6KGMsbCx0KT0+e3ZhciBuPXQoNTc5MTcpLGU9dCg1NzIyMSkscz10KDYxNDY0KSghMSksYT10KDQwNzY2KSgiSUVfUFJPVE8iKTtj''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24odSxmKXt2YXIgZCxpPWUodSksdj0wLHA9W107Zm9yKGQgaW4gaSlkIT1hJiZuKGksZCkmJnAucHVzaChkKTtmb3IoO2YubGVuZ3RoPnY7KW4oaSxkPWZbdisrXSkmJih+cyhwLGQpfHxwLnB1c2goZCkpO3JldHVybiBwfX0sNTEzMTE6KGMsbCx0KT0+e3ZhciBu''@;'; put 'put ''PXQoMzQ1NjEpLGU9dCg4NjE0MCk7Yy5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihhKXtyZXR1cm4gbihhLGUpfX0sODQ0OTooYyxsKT0+e2wuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sODA5MjM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg1NjA5NCkscz10KDc5NDQ4''@;'; put 'put ''KTtjLmV4cG9ydHM9ZnVuY3Rpb24oYSx1KXt2YXIgZj0oZS5PYmplY3R8fHt9KVthXXx8T2JqZWN0W2FdLGk9e307aVthXT11KGYpLG4obi5TK24uRipzKGZ1bmN0aW9uKCl7ZigxKX0pLCJPYmplY3QiLGkpfX0sOTYyMjI6KGMsbCx0KT0+e3ZhciBuPXQoNTk0MTUpLGU9dCgxMDYwKSxzPXQo''@;'; put 'put ''NDIyOCksYT10KDY3NTI2KS5SZWZsZWN0O2MuZXhwb3J0cz1hJiZhLm93bktleXN8fGZ1bmN0aW9uKGYpe3ZhciBpPW4uZihzKGYpKSx2PWUuZjtyZXR1cm4gdj9pLmNvbmNhdCh2KGYpKTppfX0sMzM1ODk6KGMsbCx0KT0+e3ZhciBuPXQoNjc1MjYpLnBhcnNlRmxvYXQsZT10KDQwNjI5KS50''@;'; put 'put ''cmltO2MuZXhwb3J0cz0xL24odCg3ODQ1MSkrIi0wIikhPS0xLzA/ZnVuY3Rpb24oYSl7dmFyIHU9ZShTdHJpbmcoYSksMyksZj1uKHUpO3JldHVybiAwPT09ZiYmIi0iPT11LmNoYXJBdCgwKT8tMDpmfTpufSw4MjczODooYyxsLHQpPT57dmFyIG49dCg2NzUyNikucGFyc2VJbnQsZT10KDQw''@;'; put 'put ''NjI5KS50cmltLHM9dCg3ODQ1MSksYT0vXlstK10/MFt4WF0vO2MuZXhwb3J0cz04IT09bihzKyIwOCIpfHwyMiE9PW4ocysiMHgxNiIpP2Z1bmN0aW9uKGYsaSl7dmFyIHY9ZShTdHJpbmcoZiksMyk7cmV0dXJuIG4odixpPj4+MHx8KGEudGVzdCh2KT8xNjoxMCkpfTpufSwxMTk5NjpjPT57''@;'; put 'put ''Yy5leHBvcnRzPWZ1bmN0aW9uKGwsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmwpLGNvbmZpZ3VyYWJsZTohKDImbCksd3JpdGFibGU6ISg0JmwpLHZhbHVlOnR9fX0sOTYwNjU6KGMsbCx0KT0+e3ZhciBuPXQoMjg4NTkpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMsYSl7Zm9yKHZhciB1IGlu''@;'; put 'put ''IHMpbihlLHUsc1t1XSxhKTtyZXR1cm4gZX19LDI4ODU5OihjLGwsdCk9Pnt2YXIgbj10KDY3NTI2KSxlPXQoMzMzNDEpLHM9dCg1NzkxNyksYT10KDQ0MTUpKCJzcmMiKSx1PXQoNDk0NjEpLGY9InRvU3RyaW5nIixpPSgiIit1KS5zcGxpdChmKTt0KDU2MDk0KS5pbnNwZWN0U291cmNlPWZ1''@;'; put 'put ''bmN0aW9uKHYpe3JldHVybiB1LmNhbGwodil9LChjLmV4cG9ydHM9ZnVuY3Rpb24odixwLGQsbSl7dmFyIEU9ImZ1bmN0aW9uIj09dHlwZW9mIGQ7RSYmKHMoZCwibmFtZSIpfHxlKGQsIm5hbWUiLHApKSx2W3BdIT09ZCYmKEUmJihzKGQsYSl8fGUoZCxhLHZbcF0/IiIrdltwXTppLmpvaW4o''@;'; put 'put ''U3RyaW5nKHApKSkpLHY9PT1uP3ZbcF09ZDptP3ZbcF0/dltwXT1kOmUodixwLGQpOihkZWxldGUgdltwXSxlKHYscCxkKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLGYsZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcyYmdGhpc1thXXx8dS5jYWxsKHRoaXMpfSl9LDUy''@;'; put 'put ''NTM1OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgzNDg0OCksZT1SZWdFeHAucHJvdG90eXBlLmV4ZWM7Yy5leHBvcnRzPWZ1bmN0aW9uKHMsYSl7dmFyIHU9cy5leGVjO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB1KXt2YXIgZj11LmNhbGwocyxhKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsIik7cmV0dXJuIGZ9aWYoIlJlZ0V4cCIhPT1uKHMpKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZ0V4cCNleGVjIGNhbGxlZCBvbiBp''@;'; put 'put ''bmNvbXBhdGlibGUgcmVjZWl2ZXIiKTtyZXR1cm4gZS5jYWxsKHMsYSl9fSw2OTYwMDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBwLGQsbj10KDExNTgpLGU9UmVnRXhwLnByb3RvdHlwZS5leGVjLHM9U3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLGE9ZSx1PSJsYXN0SW5kZXgiLGY9KGQ9''@;'; put 'put ''L2IqL2csZS5jYWxsKHA9L2EvLCJhIiksZS5jYWxsKGQsImEiKSwwIT09cFt1XXx8MCE9PWRbdV0pLGk9dm9pZCAwIT09LygpPz8vLmV4ZWMoIiIpWzFdOyhmfHxpKSYmKGE9ZnVuY3Rpb24oZCl7dmFyIEUsZyxELEYsbT10aGlzO3JldHVybiBpJiYoZz1uZXcgUmVnRXhwKCJeIittLnNvdXJj''@;'; put 'put ''ZSsiJCg/IVxccykiLG4uY2FsbChtKSkpLGYmJihFPW1bdV0pLEQ9ZS5jYWxsKG0sZCksZiYmRCYmKG1bdV09bS5nbG9iYWw/RC5pbmRleCtEWzBdLmxlbmd0aDpFKSxpJiZEJiZELmxlbmd0aD4xJiZzLmNhbGwoRFswXSxnLGZ1bmN0aW9uKCl7Zm9yKEY9MTtGPGFyZ3VtZW50cy5sZW5ndGgt''@;'; put 'put ''MjtGKyspdm9pZCAwPT09YXJndW1lbnRzW0ZdJiYoRFtGXT12b2lkIDApfSksRH0pLGMuZXhwb3J0cz1hfSw3MzU5OmM9PntjLmV4cG9ydHM9T2JqZWN0LmlzfHxmdW5jdGlvbih0LG4pe3JldHVybiB0PT09bj8wIT09dHx8MS90PT0xL246dCE9dCYmbiE9bn19LDI1MTcwOihjLGwsdCk9Pnt2''@;'; put 'put ''YXIgbj10KDQzMzA1KSxlPXQoNDIyOCkscz1mdW5jdGlvbihhLHUpe2lmKGUoYSksIW4odSkmJm51bGwhPT11KXRocm93IFR5cGVFcnJvcih1KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2MuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57''@;'; put 'put ''fT9mdW5jdGlvbihhLHUsZil7dHJ5eyhmPXQoMzUwNTIpKEZ1bmN0aW9uLmNhbGwsdCg2ODY0MSkuZihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQsMikpKGEsW10pLHU9IShhIGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoe3U9ITB9cmV0dXJuIGZ1bmN0aW9uKHYscCl7cmV0dXJu''@;'; put 'put ''IHModixwKSx1P3YuX19wcm90b19fPXA6Zih2LHApLHZ9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazpzfX0sNTU3NjI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY3NTI2KSxlPXQoNDc5NjcpLHM9dCgxNzYzKSxhPXQoNjc1NzQpKCJzcGVjaWVzIik7Yy5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KHUpe3ZhciBmPW5bdV07cyYmZiYmIWZbYV0mJmUuZihmLGEse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LDM4NDQ6KGMsbCx0KT0+e3ZhciBuPXQoNDc5NjcpLmYsZT10KDU3OTE3KSxzPXQoNjc1NzQpKCJ0b1N0cmluZ1RhZyIpO2MuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihhLHUsZil7YSYmIWUoYT1mP2E6YS5wcm90b3R5cGUscykmJm4oYSxzLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dX0pfX0sNDA3NjY6KGMsbCx0KT0+e3ZhciBuPXQoNDQ1NTYpKCJrZXlzIiksZT10KDQ0MTUpO2MuZXhwb3J0cz1mdW5jdGlvbihzKXtyZXR1cm4gbltzXXx8KG5b''@;'; put 'put ''c109ZShzKSl9fSw0NDU1NjooYyxsLHQpPT57dmFyIG49dCg1NjA5NCksZT10KDY3NTI2KSxzPSJfX2NvcmUtanNfc2hhcmVkX18iLGE9ZVtzXXx8KGVbc109e30pOyhjLmV4cG9ydHM9ZnVuY3Rpb24odSxmKXtyZXR1cm4gYVt1XXx8KGFbdV09dm9pZCAwIT09Zj9mOnt9KX0pKCJ2ZXJzaW9u''@;'; put 'put ''cyIsW10pLnB1c2goe3ZlcnNpb246bi52ZXJzaW9uLG1vZGU6dCgyMjc1MCk/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSwxOTE5MDooYyxsLHQpPT57dmFyIG49dCg0MjI4KSxlPXQoNjMzODcpLHM9dCg2NzU3''@;'; put 'put ''NCkoInNwZWNpZXMiKTtjLmV4cG9ydHM9ZnVuY3Rpb24oYSx1KXt2YXIgaSxmPW4oYSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWZ8fG51bGw9PShpPW4oZilbc10pP3U6ZShpKX19LDg2ODg0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg3OTQ0OCk7Yy5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKGUscyl7cmV0dXJuISFlJiZuKGZ1bmN0aW9uKCl7cz9lLmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6ZS5jYWxsKG51bGwpfSl9fSw5MTIxMjooYyxsLHQpPT57dmFyIG49dCgyNzA4NyksZT10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oYSx1''@;'; put 'put ''KXt2YXIgcCxkLGY9U3RyaW5nKGUoYSkpLGk9bih1KSx2PWYubGVuZ3RoO3JldHVybiBpPDB8fGk+PXY/cz8iIjp2b2lkIDA6KHA9Zi5jaGFyQ29kZUF0KGkpKTw1NTI5Nnx8cD41NjMxOXx8aSsxPT09dnx8KGQ9Zi5jaGFyQ29kZUF0KGkrMSkpPDU2MzIwfHxkPjU3MzQzP3M/Zi5jaGFyQXQo''@;'; put 'put ''aSk6cDpzP2Yuc2xpY2UoaSxpKzIpOmQtNTYzMjArKHAtNTUyOTY8PDEwKSs2NTUzNn19fSw3ODk0MjooYyxsLHQpPT57dmFyIG49dCg5NTQxMSksZT10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihzLGEsdSl7aWYobihhKSl0aHJvdyBUeXBlRXJyb3IoIlN0cmluZyMiK3UrIiBkb2Vzbid0''@;'; put 'put ''IGFjY2VwdCByZWdleCEiKTtyZXR1cm4gU3RyaW5nKGUocykpfX0sNTI0Njg6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg3OTQ0OCkscz10KDMzNDQpLGE9LyIvZyx1PWZ1bmN0aW9uKGYsaSx2LHApe3ZhciBkPVN0cmluZyhzKGYpKSxtPSI8IitpO3JldHVybiIiIT09diYmKG0rPSIg''@;'; put 'put ''Iit2Kyc9IicrU3RyaW5nKHApLnJlcGxhY2UoYSwiJnF1b3Q7IikrJyInKSxtKyI+IitkKyI8LyIraSsiPiJ9O2MuZXhwb3J0cz1mdW5jdGlvbihmLGkpe3ZhciB2PXt9O3ZbZl09aSh1KSxuKG4uUCtuLkYqZShmdW5jdGlvbigpe3ZhciBwPSIiW2ZdKCciJyk7cmV0dXJuIHAhPT1wLnRvTG93''@;'; put 'put ''ZXJDYXNlKCl8fHAuc3BsaXQoJyInKS5sZW5ndGg+M30pLCJTdHJpbmciLHYpfX0sMjc5MjY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDI3MDg3KSxlPXQoMzM0NCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGEpe3ZhciB1PVN0cmluZyhlKHRoaXMpKSxmPSIiLGk9bihhKTtpZihpPDB8''@;'; put 'put ''fGk9PTEvMCl0aHJvdyBSYW5nZUVycm9yKCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZSIpO2Zvcig7aT4wOyhpPj4+PTEpJiYodSs9dSkpMSZpJiYoZis9dSk7cmV0dXJuIGZ9fSw0MDYyOTooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDMzNDQpLHM9dCg3OTQ0OCksYT10KDc4NDUxKSx1''@;'; put 'put ''PSJbIithKyJdIixpPVJlZ0V4cCgiXiIrdSt1KyIqIiksdj1SZWdFeHAodSt1KyIqJCIpLHA9ZnVuY3Rpb24obSxFLGcpe3ZhciBEPXt9LEY9cyhmdW5jdGlvbigpe3JldHVybiEhYVttXSgpfHwiXHUyMDBiXHg4NSIhPSJcdTIwMGJceDg1IlttXSgpfSkseD1EW21dPUY/RShkKTphW21dO2cm''@;'; put 'put ''JihEW2ddPXgpLG4obi5QK24uRipGLCJTdHJpbmciLEQpfSxkPXAudHJpbT1mdW5jdGlvbihtLEUpe3JldHVybiBtPVN0cmluZyhlKG0pKSwxJkUmJihtPW0ucmVwbGFjZShpLCIiKSksMiZFJiYobT1tLnJlcGxhY2UodiwiIikpLG19O2MuZXhwb3J0cz1wfSw3ODQ1MTpjPT57Yy5leHBvcnRz''@;'; put 'put ''PSJcdFxuXHZcZlxyIFx4YTBcdTE2ODBcdTE4MGVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFcdTIwMmZcdTIwNWZcdTMwMDBcdTIwMjhcdTIwMjlcdWZlZmYifSw3MDE1NzooYyxsLHQpPT57dmFyIG49dCgyNzA4Nyks''@;'; put 'put ''ZT1NYXRoLm1heCxzPU1hdGgubWluO2MuZXhwb3J0cz1mdW5jdGlvbihhLHUpe3JldHVybihhPW4oYSkpPDA/ZShhK3UsMCk6cyhhLHUpfX0sMjcwODc6Yz0+e3ZhciBsPU1hdGguY2VpbCx0PU1hdGguZmxvb3I7Yy5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBpc05hTihuPStuKT8wOihu''@;'; put 'put ''PjA/dDpsKShuKX19LDU3MjIxOihjLGwsdCk9Pnt2YXIgbj10KDYxMjQ5KSxlPXQoMzM0NCk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBuKGUocykpfX0sODE0ODU6KGMsbCx0KT0+e3ZhciBuPXQoMjcwODcpLGU9TWF0aC5taW47Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBz''@;'; put 'put ''PjA/ZShuKHMpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSwxODI3MDooYyxsLHQpPT57dmFyIG49dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChuKGUpKX19LDgzMDQ4OihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXtpZigh''@;'; put 'put ''bihlKSlyZXR1cm4gZTt2YXIgYSx1O2lmKHMmJiJmdW5jdGlvbiI9PXR5cGVvZihhPWUudG9TdHJpbmcpJiYhbih1PWEuY2FsbChlKSl8fCJmdW5jdGlvbiI9PXR5cGVvZihhPWUudmFsdWVPZikmJiFuKHU9YS5jYWxsKGUpKXx8IXMmJiJmdW5jdGlvbiI9PXR5cGVvZihhPWUudG9TdHJpbmcp''@;'; put 'put ''JiYhbih1PWEuY2FsbChlKSkpcmV0dXJuIHU7dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LDQ0MTU6Yz0+e3ZhciBsPTAsdD1NYXRoLnJhbmRvbSgpO2MuZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm4iU3ltYm9sKCIuY29uY2F0''@;'; put 'put ''KHZvaWQgMD09PW4/IiI6biwiKV8iLCgrK2wrdCkudG9TdHJpbmcoMzYpKX19LDEyODg4OihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXtpZighbihlKXx8ZS5fdCE9PXMpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrcysi''@;'; put 'put ''IHJlcXVpcmVkISIpO3JldHVybiBlfX0sMjMwMTE6KGMsbCx0KT0+e3ZhciBuPXQoNjc1MjYpLGU9dCg1NjA5NCkscz10KDIyNzUwKSxhPXQoNDc5NjApLHU9dCg0Nzk2NykuZjtjLmV4cG9ydHM9ZnVuY3Rpb24oZil7dmFyIGk9ZS5TeW1ib2x8fChlLlN5bWJvbD1zP3t9Om4uU3ltYm9sfHx7''@;'; put 'put ''fSk7Il8iIT1mLmNoYXJBdCgwKSYmIShmIGluIGkpJiZ1KGksZix7dmFsdWU6YS5mKGYpfSl9fSw0Nzk2MDooYyxsLHQpPT57bC5mPXQoNjc1NzQpfSw2NzU3NDooYyxsLHQpPT57dmFyIG49dCg0NDU1NikoIndrcyIpLGU9dCg0NDE1KSxzPXQoNjc1MjYpLlN5bWJvbCxhPSJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBzOyhjLmV4cG9ydHM9ZnVuY3Rpb24oZil7cmV0dXJuIG5bZl18fChuW2ZdPWEmJnNbZl18fChhP3M6ZSkoIlN5bWJvbC4iK2YpKX0pLnN0b3JlPW59LDIwNzYyOihjLGwsdCk9Pnt2YXIgbj10KDM0ODQ4KSxlPXQoNjc1NzQpKCJpdGVyYXRvciIpLHM9dCg2MDkwNik7Yy5leHBv''@;'; put 'put ''cnRzPXQoNTYwOTQpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGEpe2lmKG51bGwhPWEpcmV0dXJuIGFbZV18fGFbIkBAaXRlcmF0b3IiXXx8c1tuKGEpXX19LDE5NjIwOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUCwiQXJyYXkiLHtjb3B5V2l0aGluOnQoODQ0MzgpfSksdCg4''@;'; put 'put ''ODE4NCkoImNvcHlXaXRoaW4iKX0sNTg4ODg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDQpO24obi5QK24uRiohdCg4Njg4NCkoW10uZXZlcnksITApLCJBcnJheSIse2V2ZXJ5OmZ1bmN0aW9uKGEpe3JldHVybiBlKHRoaXMsYSxhcmd1bWVudHNb''@;'; put 'put ''MV0pfX0pfSw1Nzc2MjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlAsIkFycmF5Iix7ZmlsbDp0KDM1NTY0KX0pLHQoODgxODQpKCJmaWxsIil9LDM5ODEzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSgyKTtuKG4uUCtuLkYqIXQoODY4ODQp''@;'; put 'put ''KFtdLmZpbHRlciwhMCksIkFycmF5Iix7ZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBlKHRoaXMsYSxhcmd1bWVudHNbMV0pfX0pfSw3NTM2OTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoNikscz0iZmluZEluZGV4IixhPSEwO3MgaW5bXSYmQXJy''@;'; put 'put ''YXkoMSlbc10oZnVuY3Rpb24oKXthPSExfSksbihuLlArbi5GKmEsIkFycmF5Iix7ZmluZEluZGV4OmZ1bmN0aW9uKGYpe3JldHVybiBlKHRoaXMsZixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksdCg4ODE4NCkocyl9LDE1MTQ0OihjLGwsdCk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSg1KSxzPSJmaW5kIixhPSEwO3MgaW5bXSYmQXJyYXkoMSlbc10oZnVuY3Rpb24oKXthPSExfSksbihuLlArbi5GKmEsIkFycmF5Iix7ZmluZDpmdW5jdGlvbihmKXtyZXR1cm4gZSh0aGlzLGYsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3Vt''@;'; put 'put ''ZW50c1sxXTp2b2lkIDApfX0pLHQoODgxODQpKHMpfSwzNTA0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSgwKSxzPXQoODY4ODQpKFtdLmZvckVhY2gsITApO24obi5QK24uRiohcywiQXJyYXkiLHtmb3JFYWNoOmZ1bmN0aW9uKHUpe3JldHVybiBl''@;'; put 'put ''KHRoaXMsdSxhcmd1bWVudHNbMV0pfX0pfSw5Mzg2MzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMzUwNTIpLGU9dCg5MjEyNykscz10KDE4MjcwKSxhPXQoOTczNjgpLHU9dCgxNTA4KSxmPXQoODE0ODUpLGk9dCg2NzIyNyksdj10KDIwNzYyKTtlKGUuUytlLkYqIXQoOTg5MzEp''@;'; put 'put ''KGZ1bmN0aW9uKHApe0FycmF5LmZyb20ocCl9KSwiQXJyYXkiLHtmcm9tOmZ1bmN0aW9uKGQpe3ZhciBDLEksTSxULG09cyhkKSxFPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXksZz1hcmd1bWVudHMubGVuZ3RoLEQ9Zz4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsRj12b2lkIDAh''@;'; put 'put ''PT1ELHg9MCx3PXYobSk7aWYoRiYmKEQ9bihELGc+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSxudWxsPT13fHxFPT1BcnJheSYmdSh3KSlmb3IoST1uZXcgRShDPWYobS5sZW5ndGgpKTtDPng7eCsrKWkoSSx4LEY/RChtW3hdLHgpOm1beF0pO2Vsc2UgZm9yKFQ9dy5jYWxsKG0pLEk9bmV3''@;'; put 'put ''IEU7IShNPVQubmV4dCgpKS5kb25lO3grKylpKEkseCxGP2EoVCxELFtNLnZhbHVlLHhdLCEwKTpNLnZhbHVlKTtyZXR1cm4gSS5sZW5ndGg9eCxJfX0pfSwzNDYwOTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2MTQ2NCkoITEpLHM9W10uaW5kZXhPZixhPSEh''@;'; put 'put ''cyYmMS9bMV0uaW5kZXhPZigxLC0wKTwwO24obi5QK24uRiooYXx8IXQoODY4ODQpKHMpKSwiQXJyYXkiLHtpbmRleE9mOmZ1bmN0aW9uKGYpe3JldHVybiBhP3MuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwOmUodGhpcyxmLGFyZ3VtZW50c1sxXSl9fSl9LDQ3ODk5OihjLGwsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDkyMTI3KTtuKG4uUywiQXJyYXkiLHtpc0FycmF5OnQoNzc5ODEpfSl9LDk1MTY1OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg4ODE4NCksZT10KDc0OTcwKSxzPXQoNjA5MDYpLGE9dCg1NzIyMSk7Yy5leHBvcnRzPXQoOTgxNzUpKEFycmF5LCJBcnJheSIsZnVuY3Rpb24o''@;'; put 'put ''dSxmKXt0aGlzLl90PWEodSksdGhpcy5faT0wLHRoaXMuX2s9Zn0sZnVuY3Rpb24oKXt2YXIgdT10aGlzLl90LGY9dGhpcy5fayxpPXRoaXMuX2krKztyZXR1cm4hdXx8aT49dS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLGUoMSkpOmUoMCwia2V5cyI9PWY/aToidmFsdWVzIj09Zj91W2ldOltp''@;'; put 'put ''LHVbaV1dKX0sInZhbHVlcyIpLHMuQXJndW1lbnRzPXMuQXJyYXksbigia2V5cyIpLG4oInZhbHVlcyIpLG4oImVudHJpZXMiKX0sOTY1MTE6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNTcyMjEpLHM9W10uam9pbjtuKG4uUCtuLkYqKHQoNjEyNDkpIT1PYmpl''@;'; put 'put ''Y3R8fCF0KDg2ODg0KShzKSksIkFycmF5Iix7am9pbjpmdW5jdGlvbih1KXtyZXR1cm4gcy5jYWxsKGUodGhpcyksdm9pZCAwPT09dT8iLCI6dSl9fSl9LDMzNzA2OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDU3MjIxKSxzPXQoMjcwODcpLGE9dCg4MTQ4NSks''@;'; put 'put ''dT1bXS5sYXN0SW5kZXhPZixmPSEhdSYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKGZ8fCF0KDg2ODg0KSh1KSksIkFycmF5Iix7bGFzdEluZGV4T2Y6ZnVuY3Rpb24odil7aWYoZilyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIHA9ZSh0aGlzKSxk''@;'; put 'put ''PWEocC5sZW5ndGgpLG09ZC0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihtPU1hdGgubWluKG0scyhhcmd1bWVudHNbMV0pKSksbTwwJiYobT1kK20pO20+PTA7bS0tKWlmKG0gaW4gcCYmcFttXT09PXYpcmV0dXJuIG18fDA7cmV0dXJuLTF9fSl9LDU0OTEzOihjLGwsdCk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSgxKTtuKG4uUCtuLkYqIXQoODY4ODQpKFtdLm1hcCwhMCksIkFycmF5Iix7bWFwOmZ1bmN0aW9uKGEpe3JldHVybiBlKHRoaXMsYSxhcmd1bWVudHNbMV0pfX0pfSw0NTcwOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEy''@;'; put 'put ''NyksZT10KDY3MjI3KTtuKG4uUytuLkYqdCg3OTQ0OCkoZnVuY3Rpb24oKXtmdW5jdGlvbiBzKCl7fXJldHVybiEoQXJyYXkub2YuY2FsbChzKWluc3RhbmNlb2Ygcyl9KSwiQXJyYXkiLHtvZjpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLHU9YXJndW1lbnRzLmxlbmd0aCxmPW5ldygiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5KSh1KTt1PmE7KWUoZixhLGFyZ3VtZW50c1thKytdKTtyZXR1cm4gZi5sZW5ndGg9dSxmfX0pfSw0Nzg3NDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NTQzKTtuKG4uUCtuLkYqIXQoODY4ODQpKFtdLnJlZHVj''@;'; put 'put ''ZVJpZ2h0LCEwKSwiQXJyYXkiLHtyZWR1Y2VSaWdodDpmdW5jdGlvbihhKXtyZXR1cm4gZSh0aGlzLGEsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHNbMV0sITApfX0pfSw4MTQ0OTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NTQzKTtuKG4uUCtuLkYqIXQo''@;'; put 'put ''ODY4ODQpKFtdLnJlZHVjZSwhMCksIkFycmF5Iix7cmVkdWNlOmZ1bmN0aW9uKGEpe3JldHVybiBlKHRoaXMsYSxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50c1sxXSwhMSl9fSl9LDk1ODUzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDYxMzA4KSxzPXQoNTUw''@;'; put 'put ''ODkpLGE9dCg3MDE1NyksdT10KDgxNDg1KSxmPVtdLnNsaWNlO24obi5QK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe2UmJmYuY2FsbChlKX0pLCJBcnJheSIse3NsaWNlOmZ1bmN0aW9uKHYscCl7dmFyIGQ9dSh0aGlzLmxlbmd0aCksbT1zKHRoaXMpO2lmKHA9dm9pZCAwPT09cD9kOnAsIkFy''@;'; put 'put ''cmF5Ij09bSlyZXR1cm4gZi5jYWxsKHRoaXMsdixwKTtmb3IodmFyIEU9YSh2LGQpLGc9YShwLGQpLEQ9dShnLUUpLEY9bmV3IEFycmF5KEQpLHg9MDt4PEQ7eCsrKUZbeF09IlN0cmluZyI9PW0/dGhpcy5jaGFyQXQoRSt4KTp0aGlzW0UreF07cmV0dXJuIEZ9fSl9LDg2NTExOihjLGwsdCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSgzKTtuKG4uUCtuLkYqIXQoODY4ODQpKFtdLnNvbWUsITApLCJBcnJheSIse3NvbWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGUodGhpcyxhLGFyZ3VtZW50c1sxXSl9fSl9LDk3MDc1OihjLGwsdCk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIG49dCg5MjEyNyksZT10KDYzMzg3KSxzPXQoMTgyNzApLGE9dCg3OTQ0OCksdT1bXS5zb3J0LGY9WzEsMiwzXTtuKG4uUCtuLkYqKGEoZnVuY3Rpb24oKXtmLnNvcnQodm9pZCAwKX0pfHwhYShmdW5jdGlvbigpe2Yuc29ydChudWxsKX0pfHwhdCg4Njg4NCkodSkpLCJBcnJheSIse3Nv''@;'; put 'put ''cnQ6ZnVuY3Rpb24odil7cmV0dXJuIHZvaWQgMD09PXY/dS5jYWxsKHModGhpcykpOnUuY2FsbChzKHRoaXMpLGUodikpfX0pfSw3NjIwOTooYyxsLHQpPT57dCg1NTc2MikoIkFycmF5Iil9LDEzMjkyOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiRGF0ZSIse25vdzpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0pfSw5NDI5OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNTUzODUpO24obi5QK24uRiooRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmchPT1lKSwiRGF0ZSIse3RvSVNPU3RyaW5nOmV9KX0sNTIzNDY6KGMsbCx0KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoMTgyNzApLHM9dCg4MzA0OCk7bihuLlArbi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT1uZXcgRGF0ZShOYU4pLnRvSlNPTigpfHwxIT09RGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoe3RvSVNPU3RyaW5nOmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIDF9fSl9KSwiRGF0ZSIse3RvSlNPTjpmdW5jdGlvbih1KXt2YXIgZj1lKHRoaXMpLGk9cyhmKTtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGl8fGlzRmluaXRlKGkpP2YudG9JU09TdHJpbmcoKTpudWxsfX0pfSw0ODk1MTooYyxsLHQpPT57dmFyIG49dCg2NzU3NCkoInRvUHJp''@;'; put 'put ''bWl0aXZlIiksZT1EYXRlLnByb3RvdHlwZTtuIGluIGV8fHQoMzMzNDEpKGUsbix0KDIwMTA3KSl9LDc4NDk6KGMsbCx0KT0+e3ZhciBuPURhdGUucHJvdG90eXBlLGU9IkludmFsaWQgRGF0ZSIscz0idG9TdHJpbmciLGE9bltzXSx1PW4uZ2V0VGltZTtuZXcgRGF0ZShOYU4pKyIiIT1lJiZ0''@;'; put 'put ''KDI4ODU5KShuLHMsZnVuY3Rpb24oKXt2YXIgaT11LmNhbGwodGhpcyk7cmV0dXJuIGk9PWk/YS5jYWxsKHRoaXMpOmV9KX0sNjUwNDk6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5QLCJGdW5jdGlvbiIse2JpbmQ6dCgxNTUzOCl9KX0sOTU1MDI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgbj10KDQzMzA1KSxlPXQoNDA2MjcpLHM9dCg2NzU3NCkoImhhc0luc3RhbmNlIiksYT1GdW5jdGlvbi5wcm90b3R5cGU7cyBpbiBhfHx0KDQ3OTY3KS5mKGEscyx7dmFsdWU6ZnVuY3Rpb24odSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXN8fCFuKHUpKXJldHVybiExO2lmKCFu''@;'; put 'put ''KHRoaXMucHJvdG90eXBlKSlyZXR1cm4gdSBpbnN0YW5jZW9mIHRoaXM7Zm9yKDt1PWUodSk7KWlmKHRoaXMucHJvdG90eXBlPT09dSlyZXR1cm4hMDtyZXR1cm4hMX19KX0sNzA0ODk6KGMsbCx0KT0+e3ZhciBuPXQoNDc5NjcpLmYsZT1GdW5jdGlvbi5wcm90b3R5cGUscz0vXlxzKmZ1bmN0''@;'; put 'put ''aW9uIChbXiAoXSopLyxhPSJuYW1lIjthIGluIGV8fHQoMTc2MykmJm4oZSxhLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3JldHVybigiIit0aGlzKS5tYXRjaChzKVsxXX1jYXRjaHtyZXR1cm4iIn19fSl9LDkzMzg2OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49''@;'; put 'put ''dCgzNjE5NyksZT10KDEyODg4KSxzPSJNYXAiO2MuZXhwb3J0cz10KDU4OTMzKShzLGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbih1KXt2YXIgZj1uLmdldEVu''@;'; put 'put ''dHJ5KGUodGhpcyxzKSx1KTtyZXR1cm4gZiYmZi52fSxzZXQ6ZnVuY3Rpb24odSxmKXtyZXR1cm4gbi5kZWYoZSh0aGlzLHMpLDA9PT11PzA6dSxmKX19LG4sITApfSw3NjY0ODooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDcxNDczKSxzPU1hdGguc3FydCxhPU1hdGguYWNvc2g7bihu''@;'; put 'put ''LlMrbi5GKiEoYSYmNzEwPT1NYXRoLmZsb29yKGEoTnVtYmVyLk1BWF9WQUxVRSkpJiZhKDEvMCk9PTEvMCksIk1hdGgiLHthY29zaDpmdW5jdGlvbihmKXtyZXR1cm4oZj0rZik8MT9OYU46Zj45NDkwNjI2NS42MjQyNTE1Nj9NYXRoLmxvZyhmKStNYXRoLkxOMjplKGYtMStzKGYtMSkqcyhm''@;'; put 'put ''KzEpKX19KX0sNTU3NzE6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9TWF0aC5hc2luaDtuKG4uUytuLkYqIShlJiYxL2UoMCk+MCksIk1hdGgiLHthc2luaDpmdW5jdGlvbiBzKGEpe3JldHVybiBpc0Zpbml0ZShhPSthKSYmMCE9YT9hPDA/LXMoLWEpOk1hdGgubG9nKGErTWF0aC5zcXJ0''@;'; put 'put ''KGEqYSsxKSk6YX19KX0sODIzOTI6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9TWF0aC5hdGFuaDtuKG4uUytuLkYqIShlJiYxL2UoLTApPDApLCJNYXRoIix7YXRhbmg6ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PShhPSthKT9hOk1hdGgubG9nKCgxK2EpLygxLWEpKS8yfX0pfSw3MjMzNToo''@;'; put 'put ''YyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDM3MzMpO24obi5TLCJNYXRoIix7Y2JydDpmdW5jdGlvbihhKXtyZXR1cm4gZShhPSthKSpNYXRoLnBvdyhNYXRoLmFicyhhKSwxLzMpfX0pfSw3NDg5NjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk1hdGgiLHtjbHozMjpmdW5j''@;'; put 'put ''dGlvbihzKXtyZXR1cm4ocz4+Pj0wKT8zMS1NYXRoLmZsb29yKE1hdGgubG9nKHMrLjUpKk1hdGguTE9HMkUpOjMyfX0pfSw5NDUyMTooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT1NYXRoLmV4cDtuKG4uUywiTWF0aCIse2Nvc2g6ZnVuY3Rpb24oYSl7cmV0dXJuKGUoYT0rYSkrZSgtYSkp''@;'; put 'put ''LzJ9fSl9LDI5MTQ3OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNzU1NTEpO24obi5TK24uRiooZSE9TWF0aC5leHBtMSksIk1hdGgiLHtleHBtMTplfSl9LDQxMzE4OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2Zyb3VuZDp0KDcyMTIyKX0pfSw4NDM1Mjoo''@;'; put 'put ''YyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT1NYXRoLmFicztuKG4uUywiTWF0aCIse2h5cG90OmZ1bmN0aW9uKGEsdSl7Zm9yKHZhciBkLG0sZj0wLGk9MCx2PWFyZ3VtZW50cy5sZW5ndGgscD0wO2k8djspcDwoZD1lKGFyZ3VtZW50c1tpKytdKSk/KGY9ZioobT1wL2QpKm0rMSxwPWQpOmYr''@;'; put 'put ''PWQ+MD8obT1kL3ApKm06ZDtyZXR1cm4gcD09PTEvMD8xLzA6cCpNYXRoLnNxcnQoZil9fSl9LDE1MzI3OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPU1hdGguaW11bDtuKG4uUytuLkYqdCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4tNSE9ZSg0Mjk0OTY3Mjk1LDUpfHwyIT1lLmxlbmd0''@;'; put 'put ''aH0pLCJNYXRoIix7aW11bDpmdW5jdGlvbihhLHUpe3ZhciBmPTY1NTM1LGk9K2Esdj0rdSxwPWYmaSxkPWYmdjtyZXR1cm4gMHxwKmQrKChmJmk+Pj4xNikqZCtwKihmJnY+Pj4xNik8PDE2Pj4+MCl9fSl9LDU3NTA5OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2xv''@;'; put 'put ''ZzEwOmZ1bmN0aW9uKHMpe3JldHVybiBNYXRoLmxvZyhzKSpNYXRoLkxPRzEwRX19KX0sMTU5MDk6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7bG9nMXA6dCg3MTQ3Myl9KX0sNzk1ODQ6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7bG9nMjpm''@;'; put 'put ''dW5jdGlvbihzKXtyZXR1cm4gTWF0aC5sb2cocykvTWF0aC5MTjJ9fSl9LDQwMzQ1OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse3NpZ246dCgzNzMzKX0pfSw5OTEzNDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDc1NTUxKSxzPU1hdGguZXhwO24obi5TK24u''@;'; put 'put ''Rip0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybi0yZS0xNyE9IU1hdGguc2luaCgtMmUtMTcpfSksIk1hdGgiLHtzaW5oOmZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmFicyh1PSt1KTwxPyhlKHUpLWUoLXUpKS8yOihzKHUtMSktcygtdS0xKSkqKE1hdGguRS8yKX19KX0sNjc5MDE6KGMsbCx0''@;'; put 'put ''KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg3NTU1MSkscz1NYXRoLmV4cDtuKG4uUywiTWF0aCIse3Rhbmg6ZnVuY3Rpb24odSl7dmFyIGY9ZSh1PSt1KSxpPWUoLXUpO3JldHVybiBmPT0xLzA/MTppPT0xLzA/LTE6KGYtaSkvKHModSkrcygtdSkpfX0pfSw0NjU5MjooYyxsLHQpPT57dmFyIG49''@;'; put 'put ''dCg5MjEyNyk7bihuLlMsIk1hdGgiLHt0cnVuYzpmdW5jdGlvbihzKXtyZXR1cm4ocz4wP01hdGguZmxvb3I6TWF0aC5jZWlsKShzKX19KX0sNjQ1MDk6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY3NTI2KSxlPXQoNTc5MTcpLHM9dCg1NTA4OSksYT10KDk4ODgwKSx1PXQoODMw''@;'; put 'put ''NDgpLGY9dCg3OTQ0OCksaT10KDU5NDE1KS5mLHY9dCg2ODY0MSkuZixwPXQoNDc5NjcpLmYsZD10KDQwNjI5KS50cmltLG09Ik51bWJlciIsRT1uW21dLGc9RSxEPUUucHJvdG90eXBlLEY9cyh0KDg0NzE5KShEKSk9PW0seD0idHJpbSJpbiBTdHJpbmcucHJvdG90eXBlLHc9ZnVuY3Rpb24o''@;'; put 'put ''VCl7dmFyIGI9dShULCExKTtpZigic3RyaW5nIj09dHlwZW9mIGImJmIubGVuZ3RoPjIpe3ZhciBVLFosbnQsTD0oYj14P2IudHJpbSgpOmQoYiwzKSkuY2hhckNvZGVBdCgwKTtpZig0Mz09PUx8fDQ1PT09TCl7aWYoODg9PT0oVT1iLmNoYXJDb2RlQXQoMikpfHwxMjA9PT1VKXJldHVybiBO''@;'; put 'put ''YU59ZWxzZSBpZig0OD09PUwpe3N3aXRjaChiLmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpaPTIsbnQ9NDk7YnJlYWs7Y2FzZSA3OTpjYXNlIDExMTpaPTgsbnQ9NTU7YnJlYWs7ZGVmYXVsdDpyZXR1cm4rYn1mb3IodmFyIHEsdHQ9Yi5zbGljZSgyKSx5dD0wLG10PXR0Lmxlbmd0''@;'; put 'put ''aDt5dDxtdDt5dCsrKWlmKChxPXR0LmNoYXJDb2RlQXQoeXQpKTw0OHx8cT5udClyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludCh0dCxaKX19cmV0dXJuK2J9O2lmKCFFKCIgMG8xIil8fCFFKCIwYjEiKXx8RSgiKzB4MSIpKXtFPWZ1bmN0aW9uKGIpe3ZhciBMPWFyZ3VtZW50cy5sZW5ndGg8''@;'; put 'put ''MT8wOmIsVT10aGlzO3JldHVybiBVIGluc3RhbmNlb2YgRSYmKEY/ZihmdW5jdGlvbigpe0QudmFsdWVPZi5jYWxsKFUpfSk6cyhVKSE9bSk/YShuZXcgZyh3KEwpKSxVLEUpOncoTCl9O2Zvcih2YXIgTSxDPXQoMTc2Myk/aShnKToiTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVf''@;'; put 'put ''SU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXIiLnNwbGl0KCIsIiksST0wO0MubGVuZ3RoPkk7''@;'; put 'put ''SSsrKWUoZyxNPUNbSV0pJiYhZShFLE0pJiZwKEUsTSx2KGcsTSkpO0UucHJvdG90eXBlPUQsRC5jb25zdHJ1Y3Rvcj1FLHQoMjg4NTkpKG4sbSxFKX19LDM0NDE5OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTnVtYmVyIix7RVBTSUxPTjpNYXRoLnBvdygyLC01Mil9KX0sOTE5''@;'; put 'put ''MzM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg2NzUyNikuaXNGaW5pdGU7bihuLlMsIk51bWJlciIse2lzRmluaXRlOmZ1bmN0aW9uKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmZShhKX19KX0sNTU1Mzg6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJOdW1iZXIi''@;'; put 'put ''LHtpc0ludGVnZXI6dCgzMzg0Mil9KX0sMzk0OTc6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJOdW1iZXIiLHtpc05hTjpmdW5jdGlvbihzKXtyZXR1cm4gcyE9c319KX0sNDEwNDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDMzODQyKSxzPU1hdGguYWJzO24obi5TLCJO''@;'; put 'put ''dW1iZXIiLHtpc1NhZmVJbnRlZ2VyOmZ1bmN0aW9uKHUpe3JldHVybiBlKHUpJiZzKHUpPD05MDA3MTk5MjU0NzQwOTkxfX0pfSw2MDIxMDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSw1NjU3Njoo''@;'; put 'put ''YyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse01JTl9TQUZFX0lOVEVHRVI6LTkwMDcxOTkyNTQ3NDA5OTF9KX0sODQ0Mzc6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCgzMzU4OSk7bihuLlMrbi5GKihOdW1iZXIucGFyc2VGbG9hdCE9ZSksIk51bWJlciIse3Bh''@;'; put 'put ''cnNlRmxvYXQ6ZX0pfSw4ODA1MDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDgyNzM4KTtuKG4uUytuLkYqKE51bWJlci5wYXJzZUludCE9ZSksIk51bWJlciIse3BhcnNlSW50OmV9KX0sMzc3Mjc6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoMjcwODcp''@;'; put 'put ''LHM9dCgxNTEyMiksYT10KDI3OTI2KSx1PTEuLnRvRml4ZWQsZj1NYXRoLmZsb29yLGk9WzAsMCwwLDAsMCwwXSx2PSJOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hIixwPSIwIixkPWZ1bmN0aW9uKEYseCl7Zm9yKHZhciB3PS0xLEM9eDsrK3c8NjspaVt3XT0oQys9Ripp''@;'; put 'put ''W3ddKSUxZTcsQz1mKEMvMWU3KX0sbT1mdW5jdGlvbihGKXtmb3IodmFyIHg9Nix3PTA7LS14Pj0wOylpW3hdPWYoKHcrPWlbeF0pL0YpLHc9dyVGKjFlN30sRT1mdW5jdGlvbigpe2Zvcih2YXIgRj02LHg9IiI7LS1GPj0wOylpZigiIiE9PXh8fDA9PT1GfHwwIT09aVtGXSl7dmFyIHc9U3Ry''@;'; put 'put ''aW5nKGlbRl0pO3g9IiI9PT14P3c6eCthLmNhbGwocCw3LXcubGVuZ3RoKSt3fXJldHVybiB4fSxnPWZ1bmN0aW9uKEYseCx3KXtyZXR1cm4gMD09PXg/dzp4JTI9PTE/ZyhGLHgtMSx3KkYpOmcoRipGLHgvMix3KX07bihuLlArbi5GKighIXUmJigiMC4wMDAiIT09OGUtNS50b0ZpeGVkKDMp''@;'; put 'put ''fHwiMSIhPT0uOS50b0ZpeGVkKDApfHwiMS4yNSIhPT0xLjI1NS50b0ZpeGVkKDIpfHwiMTAwMDAwMDAwMDAwMDAwMDEyOCIhPT0oMHhkZTBiNmIzYTc2NDAwODApLnRvRml4ZWQoMCkpfHwhdCg3OTQ0OCkoZnVuY3Rpb24oKXt1LmNhbGwoe30pfSkpLCJOdW1iZXIiLHt0b0ZpeGVkOmZ1bmN0''@;'; put 'put ''aW9uKHgpe3ZhciBULGIsTCxVLHc9cyh0aGlzLHYpLEM9ZSh4KSxJPSIiLE09cDtpZihDPDB8fEM+MjApdGhyb3cgUmFuZ2VFcnJvcih2KTtpZih3IT13KXJldHVybiJOYU4iO2lmKHc8PS0xZTIxfHx3Pj0xZTIxKXJldHVybiBTdHJpbmcodyk7aWYodzwwJiYoST0iLSIsdz0tdyksdz4xZS0y''@;'; put 'put ''MSlpZihUPWZ1bmN0aW9uKEYpe2Zvcih2YXIgeD0wLHc9Rjt3Pj00MDk2Oyl4Kz0xMix3Lz00MDk2O2Zvcig7dz49MjspeCs9MSx3Lz0yO3JldHVybiB4fSh3KmcoMiw2OSwxKSktNjksYj1UPDA/dypnKDIsLVQsMSk6dy9nKDIsVCwxKSxiKj00NTAzNTk5NjI3MzcwNDk2LChUPTUyLVQpPjAp''@;'; put 'put ''e2ZvcihkKDAsYiksTD1DO0w+PTc7KWQoMWU3LDApLEwtPTc7Zm9yKGQoZygxMCxMLDEpLDApLEw9VC0xO0w+PTIzOyltKDE8PDIzKSxMLT0yMzttKDE8PEwpLGQoMSwxKSxtKDIpLE09RSgpfWVsc2UgZCgwLGIpLGQoMTw8LVQsMCksTT1FKCkrYS5jYWxsKHAsQyk7cmV0dXJuIE09Qz4wP0kr''@;'; put 'put ''KChVPU0ubGVuZ3RoKTw9Qz8iMC4iK2EuY2FsbChwLEMtVSkrTTpNLnNsaWNlKDAsVS1DKSsiLiIrTS5zbGljZShVLUMpKTpJK019fSl9LDY3MDE6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNzk0NDgpLHM9dCgxNTEyMiksYT0xLi50b1ByZWNpc2lvbjtuKG4u''@;'; put 'put ''UCtuLkYqKGUoZnVuY3Rpb24oKXtyZXR1cm4iMSIhPT1hLmNhbGwoMSx2b2lkIDApfSl8fCFlKGZ1bmN0aW9uKCl7YS5jYWxsKHt9KX0pKSwiTnVtYmVyIix7dG9QcmVjaXNpb246ZnVuY3Rpb24oZil7dmFyIGk9cyh0aGlzLCJOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0''@;'; put 'put ''aW9uISIpO3JldHVybiB2b2lkIDA9PT1mP2EuY2FsbChpKTphLmNhbGwoaSxmKX19KX0sMTE0MzA6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TK24uRiwiT2JqZWN0Iix7YXNzaWduOnQoMjgyMDYpfSl9LDkzNTooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk9iamVjdCIs''@;'; put 'put ''e2NyZWF0ZTp0KDg0NzE5KX0pfSw4OTQ0ODooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMrbi5GKiF0KDE3NjMpLCJPYmplY3QiLHtkZWZpbmVQcm9wZXJ0aWVzOnQoMjE2MjYpfSl9LDY2MDY0OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUytuLkYqIXQoMTc2MyksIk9iamVj''@;'; put 'put ''dCIse2RlZmluZVByb3BlcnR5OnQoNDc5NjcpLmZ9KX0sNDgyMzY6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCgxMjk4OCkub25GcmVlemU7dCg4MDkyMykoImZyZWV6ZSIsZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBzJiZuKHUpP3MoZSh1KSk6dX19KX0sMjI2''@;'; put 'put ''NDI6KGMsbCx0KT0+e3ZhciBuPXQoNTcyMjEpLGU9dCg2ODY0MSkuZjt0KDgwOTIzKSgiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhLHUpe3JldHVybiBlKG4oYSksdSl9fSl9LDgxODk1OihjLGwsdCk9Pnt0KDgwOTIzKSgiZ2V0T3duUHJv''@;'; put 'put ''cGVydHlOYW1lcyIsZnVuY3Rpb24oKXtyZXR1cm4gdCg0NzY1KS5mfSl9LDUzZTM6KGMsbCx0KT0+e3ZhciBuPXQoMTgyNzApLGU9dCg0MDYyNyk7dCg4MDkyMykoImdldFByb3RvdHlwZU9mIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gZShuKGEpKX19KX0sNzkwNzM6''@;'; put 'put ''KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpO3QoODA5MjMpKCJpc0V4dGVuc2libGUiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4hIW4oYSkmJighZXx8ZShhKSl9fSl9LDY5MzE4OihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KTt0KDgwOTIzKSgiaXNGcm96ZW4iLGZ1bmN0''@;'; put 'put ''aW9uKGUpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4hbihhKXx8ISFlJiZlKGEpfX0pfSw2NTAzMjooYyxsLHQpPT57dmFyIG49dCg0MzMwNSk7dCg4MDkyMykoImlzU2VhbGVkIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIW4oYSl8fCEhZSYmZShhKX19KX0sMzg0''@;'; put 'put ''NTE6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJPYmplY3QiLHtpczp0KDczNTkpfSl9LDg4NjQ3OihjLGwsdCk9Pnt2YXIgbj10KDE4MjcwKSxlPXQoNTEzMTEpO3QoODA5MjMpKCJrZXlzIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gZShuKGEpKX19KX0s''@;'; put 'put ''MTU1NzI6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCgxMjk4OCkub25GcmVlemU7dCg4MDkyMykoInByZXZlbnRFeHRlbnNpb25zIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHMmJm4odSk/cyhlKHUpKTp1fX0pfSw3MzgyMjooYyxsLHQpPT57dmFyIG49dCg0''@;'; put 'put ''MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgic2VhbCIsZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBzJiZuKHUpP3MoZSh1KSk6dX19KX0sMTgxMzI6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJPYmplY3QiLHtzZXRQcm90b3R5cGVPZjp0''@;'; put 'put ''KDI1MTcwKS5zZXR9KX0sMTc0ODI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDM0ODQ4KSxlPXt9O2VbdCg2NzU3NCkoInRvU3RyaW5nVGFnIildPSJ6IixlKyIiIT0iW29iamVjdCB6XSImJnQoMjg4NTkpKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiJbb2JqZWN0ICIrbih0aGlzKSsiXSJ9LCEwKX0sOTYxMDg6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCgzMzU4OSk7bihuLkcrbi5GKihwYXJzZUZsb2F0IT1lKSx7cGFyc2VGbG9hdDplfSl9LDkwNTcxOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoODI3MzgpO24obi5H''@;'; put 'put ''K24uRioocGFyc2VJbnQhPWUpLHtwYXJzZUludDplfSl9LDcxMDM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg2MzM4Nykscz10KDQyMjgpLGE9KHQoNjc1MjYpLlJlZmxlY3R8fHt9KS5hcHBseSx1PUZ1bmN0aW9uLmFwcGx5O24obi5TK24uRiohdCg3OTQ0OCkoZnVuY3Rpb24oKXth''@;'; put 'put ''KGZ1bmN0aW9uKCl7fSl9KSwiUmVmbGVjdCIse2FwcGx5OmZ1bmN0aW9uKGksdixwKXt2YXIgZD1lKGkpLG09cyhwKTtyZXR1cm4gYT9hKGQsdixtKTp1LmNhbGwoZCx2LG0pfX0pfSw4MjU4NjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDg0NzE5KSxzPXQoNjMzODcpLGE9dCg0MjI4''@;'; put 'put ''KSx1PXQoNDMzMDUpLGY9dCg3OTQ0OCksaT10KDE1NTM4KSx2PSh0KDY3NTI2KS5SZWZsZWN0fHx7fSkuY29uc3RydWN0LHA9ZihmdW5jdGlvbigpe2Z1bmN0aW9uIG0oKXt9cmV0dXJuISh2KGZ1bmN0aW9uKCl7fSxbXSxtKWluc3RhbmNlb2YgbSl9KSxkPSFmKGZ1bmN0aW9uKCl7dihmdW5j''@;'; put 'put ''dGlvbigpe30pfSk7bihuLlMrbi5GKihwfHxkKSwiUmVmbGVjdCIse2NvbnN0cnVjdDpmdW5jdGlvbihFLGcpe3MoRSksYShnKTt2YXIgRD1hcmd1bWVudHMubGVuZ3RoPDM/RTpzKGFyZ3VtZW50c1syXSk7aWYoZCYmIXApcmV0dXJuIHYoRSxnLEQpO2lmKEU9PUQpe3N3aXRjaChnLmxlbmd0''@;'; put 'put ''aCl7Y2FzZSAwOnJldHVybiBuZXcgRTtjYXNlIDE6cmV0dXJuIG5ldyBFKGdbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdKTtjYXNlIDM6cmV0dXJuIG5ldyBFKGdbMF0sZ1sxXSxnWzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyBFKGdbMF0sZ1sxXSxnWzJdLGdbM10pfXZhciBGPVtu''@;'; put 'put ''dWxsXTtyZXR1cm4gRi5wdXNoLmFwcGx5KEYsZyksbmV3KGkuYXBwbHkoRSxGKSl9dmFyIHg9RC5wcm90b3R5cGUsdz1lKHUoeCk/eDpPYmplY3QucHJvdG90eXBlKSxDPUZ1bmN0aW9uLmFwcGx5LmNhbGwoRSx3LGcpO3JldHVybiB1KEMpP0M6d319KX0sOTI1NTI6KGMsbCx0KT0+e3ZhciBu''@;'; put 'put ''PXQoNDc5NjcpLGU9dCg5MjEyNykscz10KDQyMjgpLGE9dCg4MzA0OCk7ZShlLlMrZS5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShuLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pLCJSZWZsZWN0Iix7ZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24o''@;'; put 'put ''ZixpLHYpe3MoZiksaT1hKGksITApLHModik7dHJ5e3JldHVybiBuLmYoZixpLHYpLCEwfWNhdGNoe3JldHVybiExfX19KX0sNDM3NjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDY4NjQxKS5mLHM9dCg0MjI4KTtuKG4uUywiUmVmbGVjdCIse2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9u''@;'; put 'put ''KHUsZil7dmFyIGk9ZShzKHUpLGYpO3JldHVybiEoaSYmIWkuY29uZmlndXJhYmxlKSYmZGVsZXRlIHVbZl19fSl9LDc1MTUzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDQyMjgpLHM9ZnVuY3Rpb24oYSl7dGhpcy5fdD1lKGEpLHRoaXMuX2k9MDt2YXIgZix1''@;'; put 'put ''PXRoaXMuX2s9W107Zm9yKGYgaW4gYSl1LnB1c2goZil9O3QoNjAzMikocywiT2JqZWN0IixmdW5jdGlvbigpe3ZhciBmLGE9dGhpcyx1PWEuX2s7ZG97aWYoYS5faT49dS5sZW5ndGgpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX13aGlsZSghKChmPXVbYS5faSsrXSlpbiBhLl90KSk7''@;'; put 'put ''cmV0dXJue3ZhbHVlOmYsZG9uZTohMX19KSxuKG4uUywiUmVmbGVjdCIse2VudW1lcmF0ZTpmdW5jdGlvbih1KXtyZXR1cm4gbmV3IHModSl9fSl9LDUyNjUwOihjLGwsdCk9Pnt2YXIgbj10KDY4NjQxKSxlPXQoOTIxMjcpLHM9dCg0MjI4KTtlKGUuUywiUmVmbGVjdCIse2dldE93blByb3Bl''@;'; put 'put ''cnR5RGVzY3JpcHRvcjpmdW5jdGlvbih1LGYpe3JldHVybiBuLmYocyh1KSxmKX19KX0sMzExMDQ6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg0MDYyNykscz10KDQyMjgpO24obi5TLCJSZWZsZWN0Iix7Z2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odSl7cmV0dXJuIGUocyh1KSl9fSl9''@;'; put 'put ''LDExODc5OihjLGwsdCk9Pnt2YXIgbj10KDY4NjQxKSxlPXQoNDA2MjcpLHM9dCg1NzkxNyksYT10KDkyMTI3KSx1PXQoNDMzMDUpLGY9dCg0MjI4KTthKGEuUywiUmVmbGVjdCIse2dldDpmdW5jdGlvbiBpKHYscCl7dmFyIG0sRSxkPWFyZ3VtZW50cy5sZW5ndGg8Mz92OmFyZ3VtZW50c1sy''@;'; put 'put ''XTtyZXR1cm4gZih2KT09PWQ/dltwXToobT1uLmYodixwKSk/cyhtLCJ2YWx1ZSIpP20udmFsdWU6dm9pZCAwIT09bS5nZXQ/bS5nZXQuY2FsbChkKTp2b2lkIDA6dShFPWUodikpP2koRSxwLGQpOnZvaWQgMH19KX0sMjE4ODM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJSZWZs''@;'; put 'put ''ZWN0Iix7aGFzOmZ1bmN0aW9uKHMsYSl7cmV0dXJuIGEgaW4gc319KX0sMzU0MzM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg0MjI4KSxzPU9iamVjdC5pc0V4dGVuc2libGU7bihuLlMsIlJlZmxlY3QiLHtpc0V4dGVuc2libGU6ZnVuY3Rpb24odSl7cmV0dXJuIGUodSksIXN8fHMo''@;'; put 'put ''dSl9fSl9LDU1ZTM6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJSZWZsZWN0Iix7b3duS2V5czp0KDk2MjIyKX0pfSwxNTkzMjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDQyMjgpLHM9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO24obi5TLCJSZWZsZWN0Iix7cHJldmVu''@;'; put 'put ''dEV4dGVuc2lvbnM6ZnVuY3Rpb24odSl7ZSh1KTt0cnl7cmV0dXJuIHMmJnModSksITB9Y2F0Y2h7cmV0dXJuITF9fX0pfSwyNjMxNjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDI1MTcwKTtlJiZuKG4uUywiUmVmbGVjdCIse3NldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGEsdSl7ZS5j''@;'; put 'put ''aGVjayhhLHUpO3RyeXtyZXR1cm4gZS5zZXQoYSx1KSwhMH1jYXRjaHtyZXR1cm4hMX19fSl9LDU0NDM6KGMsbCx0KT0+e3ZhciBuPXQoNDc5NjcpLGU9dCg2ODY0MSkscz10KDQwNjI3KSxhPXQoNTc5MTcpLHU9dCg5MjEyNyksZj10KDExOTk2KSxpPXQoNDIyOCksdj10KDQzMzA1KTt1KHUu''@;'; put 'put ''UywiUmVmbGVjdCIse3NldDpmdW5jdGlvbiBwKGQsbSxFKXt2YXIgRix4LGc9YXJndW1lbnRzLmxlbmd0aDw0P2Q6YXJndW1lbnRzWzNdLEQ9ZS5mKGkoZCksbSk7aWYoIUQpe2lmKHYoeD1zKGQpKSlyZXR1cm4gcCh4LG0sRSxnKTtEPWYoMCl9aWYoYShELCJ2YWx1ZSIpKXtpZighMT09PUQu''@;'; put 'put ''d3JpdGFibGV8fCF2KGcpKXJldHVybiExO2lmKEY9ZS5mKGcsbSkpe2lmKEYuZ2V0fHxGLnNldHx8ITE9PT1GLndyaXRhYmxlKXJldHVybiExO0YudmFsdWU9RSxuLmYoZyxtLEYpfWVsc2Ugbi5mKGcsbSxmKDAsRSkpO3JldHVybiEwfXJldHVybiB2b2lkIDAhPT1ELnNldCYmKEQuc2V0LmNh''@;'; put 'put ''bGwoZyxFKSwhMCl9fSl9LDgzMDE6KGMsbCx0KT0+e3ZhciBuPXQoNjc1MjYpLGU9dCg5ODg4MCkscz10KDQ3OTY3KS5mLGE9dCg1OTQxNSkuZix1PXQoOTU0MTEpLGY9dCgxMTU4KSxpPW4uUmVnRXhwLHY9aSxwPWkucHJvdG90eXBlLGQ9L2EvZyxtPS9hL2csRT1uZXcgaShkKSE9PWQ7aWYo''@;'; put 'put ''dCgxNzYzKSYmKCFFfHx0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiBtW3QoNjc1NzQpKCJtYXRjaCIpXT0hMSxpKGQpIT1kfHxpKG0pPT1tfHwiL2EvaSIhPWkoZCwiaSIpfSkpKXtpPWZ1bmN0aW9uKHcsQyl7dmFyIEk9dGhpcyBpbnN0YW5jZW9mIGksTT11KHcpLFQ9dm9pZCAwPT09Qzty''@;'; put 'put ''ZXR1cm4hSSYmTSYmdy5jb25zdHJ1Y3Rvcj09PWkmJlQ/dzplKEU/bmV3IHYoTSYmIVQ/dy5zb3VyY2U6dyxDKTp2KChNPXcgaW5zdGFuY2VvZiBpKT93LnNvdXJjZTp3LE0mJlQ/Zi5jYWxsKHcpOkMpLEk/dGhpczpwLGkpfTtmb3IodmFyIGc9ZnVuY3Rpb24oeCl7eCBpbiBpfHxzKGkseCx7''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2W3hdfSxzZXQ6ZnVuY3Rpb24odyl7dlt4XT13fX0pfSxEPWEodiksRj0wO0QubGVuZ3RoPkY7KWcoRFtGKytdKTtwLmNvbnN0cnVjdG9yPWksaS5wcm90b3R5cGU9cCx0KDI4ODU5KShuLCJSZWdFeHAiLGkpfXQoNTU3NjIp''@;'; put 'put ''KCJSZWdFeHAiKX0sOTQxMTY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY5NjAwKTt0KDkyMTI3KSh7dGFyZ2V0OiJSZWdFeHAiLHByb3RvOiEwLGZvcmNlZDpuIT09Ly4vLmV4ZWN9LHtleGVjOm59KX0sMzk2Mzg6KGMsbCx0KT0+e3QoMTc2MykmJiJnIiE9Ly4vZy5mbGFncyYm''@;'; put 'put ''dCg0Nzk2NykuZihSZWdFeHAucHJvdG90eXBlLCJmbGFncyIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6dCgxMTU4KX0pfSw0MDQwOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KSxlPXQoODE0ODUpLHM9dCgyODgyOCksYT10KDUyNTM1KTt0KDY5MjI4KSgibWF0Y2giLDEsZnVu''@;'; put 'put ''Y3Rpb24odSxmLGksdil7cmV0dXJuW2Z1bmN0aW9uKGQpe3ZhciBtPXUodGhpcyksRT1kPy5bZl07cmV0dXJuIHZvaWQgMCE9PUU/RS5jYWxsKGQsbSk6bmV3IFJlZ0V4cChkKVtmXShTdHJpbmcobSkpfSxmdW5jdGlvbihwKXt2YXIgZD12KGkscCx0aGlzKTtpZihkLmRvbmUpcmV0dXJuIGQu''@;'; put 'put ''dmFsdWU7dmFyIG09bihwKSxFPVN0cmluZyh0aGlzKTtpZighbS5nbG9iYWwpcmV0dXJuIGEobSxFKTt2YXIgZz1tLnVuaWNvZGU7bS5sYXN0SW5kZXg9MDtmb3IodmFyIHgsRD1bXSxGPTA7bnVsbCE9PSh4PWEobSxFKSk7KXt2YXIgdz1TdHJpbmcoeFswXSk7RFtGXT13LCIiPT09dyYmKG0u''@;'; put 'put ''bGFzdEluZGV4PXMoRSxlKG0ubGFzdEluZGV4KSxnKSksRisrfXJldHVybiAwPT09Rj9udWxsOkR9XX0pfSw2ODMwNTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDIyOCksZT10KDE4MjcwKSxzPXQoODE0ODUpLGE9dCgyNzA4NyksdT10KDI4ODI4KSxmPXQoNTI1MzUpLGk9TWF0''@;'; put 'put ''aC5tYXgsdj1NYXRoLm1pbixwPU1hdGguZmxvb3IsZD0vXCQoWyQmYCddfFxkXGQ/fDxbXj5dKj4pL2csbT0vXCQoWyQmYCddfFxkXGQ/KS9nLEU9ZnVuY3Rpb24oZyl7cmV0dXJuIHZvaWQgMD09PWc/ZzpTdHJpbmcoZyl9O3QoNjkyMjgpKCJyZXBsYWNlIiwyLGZ1bmN0aW9uKGcsRCxGLHgp''@;'; put 'put ''e3JldHVybltmdW5jdGlvbihJLE0pe3ZhciBUPWcodGhpcyksYj1JPy5bRF07cmV0dXJuIHZvaWQgMCE9PWI/Yi5jYWxsKEksVCxNKTpGLmNhbGwoU3RyaW5nKFQpLEksTSl9LGZ1bmN0aW9uKEMsSSl7dmFyIE09eChGLEMsdGhpcyxJKTtpZihNLmRvbmUpcmV0dXJuIE0udmFsdWU7dmFyIFQ9''@;'; put 'put ''bihDKSxiPVN0cmluZyh0aGlzKSxMPSJmdW5jdGlvbiI9PXR5cGVvZiBJO0x8fChJPVN0cmluZyhJKSk7dmFyIFU9VC5nbG9iYWw7aWYoVSl7dmFyIFo9VC51bmljb2RlO1QubGFzdEluZGV4PTB9Zm9yKHZhciBudD1bXTs7KXt2YXIgdHQ9ZihULGIpO2lmKG51bGw9PT10dHx8KG50LnB1c2go''@;'; put 'put ''dHQpLCFVKSlicmVhazsiIj09PVN0cmluZyh0dFswXSkmJihULmxhc3RJbmRleD11KGIscyhULmxhc3RJbmRleCksWikpfWZvcih2YXIgbXQ9IiIscT0wLFg9MDtYPG50Lmxlbmd0aDtYKyspe3R0PW50W1hdO2Zvcih2YXIgZXQ9U3RyaW5nKHR0WzBdKSxWPWkodihhKHR0LmluZGV4KSxiLmxl''@;'; put 'put ''bmd0aCksMCksZnQ9W10sZHQ9MTtkdDx0dC5sZW5ndGg7ZHQrKylmdC5wdXNoKEUodHRbZHRdKSk7dmFyIGJ0PXR0Lmdyb3VwcztpZihMKXt2YXIgT3Q9W2V0XS5jb25jYXQoZnQsVixiKTt2b2lkIDAhPT1idCYmT3QucHVzaChidCk7dmFyIE50PVN0cmluZyhJLmFwcGx5KHZvaWQgMCxPdCkp''@;'; put 'put ''fWVsc2UgTnQ9dyhldCxiLFYsZnQsYnQsSSk7Vj49cSYmKG10Kz1iLnNsaWNlKHEsVikrTnQscT1WK2V0Lmxlbmd0aCl9cmV0dXJuIG10K2Iuc2xpY2UocSl9XTtmdW5jdGlvbiB3KEMsSSxNLFQsYixMKXt2YXIgVT1NK0MubGVuZ3RoLFo9VC5sZW5ndGgsbnQ9bTtyZXR1cm4gdm9pZCAwIT09''@;'; put 'put ''YiYmKGI9ZShiKSxudD1kKSxGLmNhbGwoTCxudCxmdW5jdGlvbih0dCx5dCl7dmFyIG10O3N3aXRjaCh5dC5jaGFyQXQoMCkpe2Nhc2UiJCI6cmV0dXJuIiQiO2Nhc2UiJiI6cmV0dXJuIEM7Y2FzZSJgIjpyZXR1cm4gSS5zbGljZSgwLE0pO2Nhc2UiJyI6cmV0dXJuIEkuc2xpY2UoVSk7Y2Fz''@;'; put 'put ''ZSI8IjptdD1iW3l0LnNsaWNlKDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBxPSt5dDtpZigwPT09cSlyZXR1cm4gdHQ7aWYocT5aKXt2YXIgWD1wKHEvMTApO3JldHVybiAwPT09WD90dDpYPD1aP3ZvaWQgMD09PVRbWC0xXT95dC5jaGFyQXQoMSk6VFtYLTFdK3l0LmNoYXJBdCgxKTp0dH1t''@;'; put 'put ''dD1UW3EtMV19cmV0dXJuIHZvaWQgMD09PW10PyIiOm10fSl9fSl9LDc0NzAxOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KSxlPXQoNzM1OSkscz10KDUyNTM1KTt0KDY5MjI4KSgic2VhcmNoIiwxLGZ1bmN0aW9uKGEsdSxmLGkpe3JldHVybltmdW5jdGlvbihwKXt2YXIg''@;'; put 'put ''ZD1hKHRoaXMpLG09cD8uW3VdO3JldHVybiB2b2lkIDAhPT1tP20uY2FsbChwLGQpOm5ldyBSZWdFeHAocClbdV0oU3RyaW5nKGQpKX0sZnVuY3Rpb24odil7dmFyIHA9aShmLHYsdGhpcyk7aWYocC5kb25lKXJldHVybiBwLnZhbHVlO3ZhciBkPW4odiksbT1TdHJpbmcodGhpcyksRT1kLmxh''@;'; put 'put ''c3RJbmRleDtlKEUsMCl8fChkLmxhc3RJbmRleD0wKTt2YXIgZz1zKGQsbSk7cmV0dXJuIGUoZC5sYXN0SW5kZXgsRSl8fChkLmxhc3RJbmRleD1FKSxudWxsPT09Zz8tMTpnLmluZGV4fV19KX0sMjAzNDE6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDk1NDExKSxlPXQoNDIyOCks''@;'; put 'put ''cz10KDE5MTkwKSxhPXQoMjg4MjgpLHU9dCg4MTQ4NSksZj10KDUyNTM1KSxpPXQoNjk2MDApLHY9dCg3OTQ0OCkscD1NYXRoLm1pbixkPVtdLnB1c2gsbT0ic3BsaXQiLEU9Imxlbmd0aCIsZz0ibGFzdEluZGV4IixEPTQyOTQ5NjcyOTUsRj0hdihmdW5jdGlvbigpe1JlZ0V4cChELCJ5Iil9''@;'; put 'put ''KTt0KDY5MjI4KSgic3BsaXQiLDIsZnVuY3Rpb24oeCx3LEMsSSl7dmFyIE07cmV0dXJuIE09ImMiPT0iYWJiYyJbbV0oLyhiKSovKVsxXXx8NCE9InRlc3QiW21dKC8oPzopLywtMSlbRV18fDIhPSJhYiJbbV0oLyg/OmFiKSovKVtFXXx8NCE9Ii4iW21dKC8oLj8pKC4/KS8pW0VdfHwiLiJb''@;'; put 'put ''bV0oLygpKCkvKVtFXT4xfHwiIlttXSgvLj8vKVtFXT9mdW5jdGlvbihULGIpe3ZhciBMPVN0cmluZyh0aGlzKTtpZih2b2lkIDA9PT1UJiYwPT09YilyZXR1cm5bXTtpZighbihUKSlyZXR1cm4gQy5jYWxsKEwsVCxiKTtmb3IodmFyIG10LHEsWCxVPVtdLG50PTAsdHQ9dm9pZCAwPT09Yj9E''@;'; put 'put ''OmI+Pj4wLHl0PW5ldyBSZWdFeHAoVC5zb3VyY2UsKFQuaWdub3JlQ2FzZT8iaSI6IiIpKyhULm11bHRpbGluZT8ibSI6IiIpKyhULnVuaWNvZGU/InUiOiIiKSsoVC5zdGlja3k/InkiOiIiKSsiZyIpOyhtdD1pLmNhbGwoeXQsTCkpJiYhKChxPXl0W2ddKT5udCYmKFUucHVzaChMLnNsaWNl''@;'; put 'put ''KG50LG10LmluZGV4KSksbXRbRV0+MSYmbXQuaW5kZXg8TFtFXSYmZC5hcHBseShVLG10LnNsaWNlKDEpKSxYPW10WzBdW0VdLG50PXEsVVtFXT49dHQpKTspeXRbZ109PT1tdC5pbmRleCYmeXRbZ10rKztyZXR1cm4gbnQ9PT1MW0VdPyhYfHwheXQudGVzdCgiIikpJiZVLnB1c2goIiIpOlUu''@;'; put 'put ''cHVzaChMLnNsaWNlKG50KSksVVtFXT50dD9VLnNsaWNlKDAsdHQpOlV9OiIwIlttXSh2b2lkIDAsMClbRV0/ZnVuY3Rpb24oVCxiKXtyZXR1cm4gdm9pZCAwPT09VCYmMD09PWI/W106Qy5jYWxsKHRoaXMsVCxiKX06QyxbZnVuY3Rpb24oYixMKXt2YXIgVT14KHRoaXMpLFo9Yj8uW3ddO3Jl''@;'; put 'put ''dHVybiB2b2lkIDAhPT1aP1ouY2FsbChiLFUsTCk6TS5jYWxsKFN0cmluZyhVKSxiLEwpfSxmdW5jdGlvbihULGIpe3ZhciBMPUkoTSxULHRoaXMsYixNIT09Qyk7aWYoTC5kb25lKXJldHVybiBMLnZhbHVlO3ZhciBVPWUoVCksWj1TdHJpbmcodGhpcyksbnQ9cyhVLFJlZ0V4cCksdHQ9VS51''@;'; put 'put ''bmljb2RlLG10PW5ldyBudChGP1U6Il4oPzoiK1Uuc291cmNlKyIpIiwoVS5pZ25vcmVDYXNlPyJpIjoiIikrKFUubXVsdGlsaW5lPyJtIjoiIikrKFUudW5pY29kZT8idSI6IiIpKyhGPyJ5IjoiZyIpKSxxPXZvaWQgMD09PWI/RDpiPj4+MDtpZigwPT09cSlyZXR1cm5bXTtpZigwPT09Wi5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuIG51bGw9PT1mKG10LFopP1taXTpbXTtmb3IodmFyIFg9MCxldD0wLFY9W107ZXQ8Wi5sZW5ndGg7KXttdC5sYXN0SW5kZXg9Rj9ldDowO3ZhciBkdCxmdD1mKG10LEY/WjpaLnNsaWNlKGV0KSk7aWYobnVsbD09PWZ0fHwoZHQ9cCh1KG10Lmxhc3RJbmRleCsoRj8wOmV0''@;'; put 'put ''KSksWi5sZW5ndGgpKT09PVgpZXQ9YShaLGV0LHR0KTtlbHNle2lmKFYucHVzaChaLnNsaWNlKFgsZXQpKSxWLmxlbmd0aD09PXEpcmV0dXJuIFY7Zm9yKHZhciBidD0xO2J0PD1mdC5sZW5ndGgtMTtidCsrKWlmKFYucHVzaChmdFtidF0pLFYubGVuZ3RoPT09cSlyZXR1cm4gVjtldD1YPWR0''@;'; put 'put ''fX1yZXR1cm4gVi5wdXNoKFouc2xpY2UoWCkpLFZ9XX0pfSw3ODYwNDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoMzk2MzgpO3ZhciBuPXQoNDIyOCksZT10KDExNTgpLHM9dCgxNzYzKSxhPSJ0b1N0cmluZyIsdT0vLi9bYV0sZj1mdW5jdGlvbihpKXt0KDI4ODU5KShSZWdFeHAucHJvdG90''@;'; put 'put ''eXBlLGEsaSwhMCl9O3QoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIi9hL2IiIT11LmNhbGwoe3NvdXJjZToiYSIsZmxhZ3M6ImIifSl9KT9mKGZ1bmN0aW9uKCl7dmFyIHY9bih0aGlzKTtyZXR1cm4iLyIuY29uY2F0KHYuc291cmNlLCIvIiwiZmxhZ3MiaW4gdj92LmZsYWdzOiFzJiZ2IGlu''@;'; put 'put ''c3RhbmNlb2YgUmVnRXhwP2UuY2FsbCh2KTp2b2lkIDApfSk6dS5uYW1lIT1hJiZmKGZ1bmN0aW9uKCl7cmV0dXJuIHUuY2FsbCh0aGlzKX0pfSw3MTYzMjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMzYxOTcpLGU9dCgxMjg4OCk7Yy5leHBvcnRzPXQoNTg5MzMpKCJTZXQiLGZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2FkZDpmdW5jdGlvbih1KXtyZXR1cm4gbi5kZWYoZSh0aGlzLCJTZXQiKSx1PTA9PT11PzA6dSx1KX19LG4pfSw2NDk3OTooYyxsLHQpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJhbmNob3IiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJhIiwibmFtZSIscyl9fSl9LDg5MDExOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJpZyIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIG4odGhpcywiYmlnIiwiIiwiIil9fSl9LDU0NTkxOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJsaW5rIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJibGluayIsIiIsIiIpfX0pfSw0NzMzNDooYyxsLHQpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3QoNTI0NjgpKCJib2xkIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJiIiwiIiwiIil9fSl9LDMyNDA1OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDkxMjEyKSghMSk7bihuLlAsIlN0cmluZyIse2NvZGVQb2lu''@;'; put 'put ''dEF0OmZ1bmN0aW9uKGEpe3JldHVybiBlKHRoaXMsYSl9fSl9LDE3MjI0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDgxNDg1KSxzPXQoNzg5NDIpLGE9ImVuZHNXaXRoIix1PSIiW2FdO24obi5QK24uRip0KDI1MjAzKShhKSwiU3RyaW5nIix7ZW5kc1dpdGg6''@;'; put 'put ''ZnVuY3Rpb24oaSl7dmFyIHY9cyh0aGlzLGksYSkscD1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxkPWUodi5sZW5ndGgpLG09dm9pZCAwPT09cD9kOk1hdGgubWluKGUocCksZCksRT1TdHJpbmcoaSk7cmV0dXJuIHU/dS5jYWxsKHYsRSxtKTp2LnNsaWNlKG0tRS5s''@;'; put 'put ''ZW5ndGgsbSk9PT1FfX0pfSw3MDgzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZpeGVkIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJ0dCIsIiIsIiIpfX0pfSw2OTIxMzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJmb250''@;'; put 'put ''Y29sb3IiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJmb250IiwiY29sb3IiLHMpfX0pfSwzODQzNzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJmb250c2l6ZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRo''@;'; put 'put ''aXMsImZvbnQiLCJzaXplIixzKX19KX0sMTIyMjA6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg3MDE1Nykscz1TdHJpbmcuZnJvbUNoYXJDb2RlLGE9U3RyaW5nLmZyb21Db2RlUG9pbnQ7bihuLlMrbi5GKighIWEmJjEhPWEubGVuZ3RoKSwiU3RyaW5nIix7ZnJvbUNvZGVQb2ludDpm''@;'; put 'put ''dW5jdGlvbihmKXtmb3IodmFyIGQsaT1bXSx2PWFyZ3VtZW50cy5sZW5ndGgscD0wO3Y+cDspe2lmKGQ9K2FyZ3VtZW50c1twKytdLGUoZCwxMTE0MTExKSE9PWQpdGhyb3cgUmFuZ2VFcnJvcihkKyIgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCIpO2kucHVzaChkPDY1NTM2P3MoZCk6cyg1''@;'; put 'put ''NTI5NisoKGQtPTY1NTM2KT4+MTApLGQlMTAyNCs1NjMyMCkpfXJldHVybiBpLmpvaW4oIiIpfX0pfSwyODg3MjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg3ODk0Mikscz0iaW5jbHVkZXMiO24obi5QK24uRip0KDI1MjAzKShzKSwiU3RyaW5nIix7aW5jbHVk''@;'; put 'put ''ZXM6ZnVuY3Rpb24odSl7cmV0dXJuISF+ZSh0aGlzLHUscykuaW5kZXhPZih1LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNjIyMjA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiaXRhbGljcyIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIG4odGhpcywiaSIsIiIsIiIpfX0pfSw4Mjk3NTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTEyMTIpKCEwKTt0KDk4MTc1KShTdHJpbmcsIlN0cmluZyIsZnVuY3Rpb24oZSl7dGhpcy5fdD1TdHJpbmcoZSksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciBhLGU9''@;'; put 'put ''dGhpcy5fdCxzPXRoaXMuX2k7cmV0dXJuIHM+PWUubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGE9bihlLHMpLHRoaXMuX2krPWEubGVuZ3RoLHt2YWx1ZTphLGRvbmU6ITF9KX0pfSw3NjU0OTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJsaW5rIixmdW5jdGlvbihu''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIG4odGhpcywiYSIsImhyZWYiLHMpfX0pfSwyMzQ4MzooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDU3MjIxKSxzPXQoODE0ODUpO24obi5TLCJTdHJpbmciLHtyYXc6ZnVuY3Rpb24odSl7Zm9yKHZhciBmPWUodS5yYXcpLGk9cyhmLmxl''@;'; put 'put ''bmd0aCksdj1hcmd1bWVudHMubGVuZ3RoLHA9W10sZD0wO2k+ZDspcC5wdXNoKFN0cmluZyhmW2QrK10pKSxkPHYmJnAucHVzaChTdHJpbmcoYXJndW1lbnRzW2RdKSk7cmV0dXJuIHAuam9pbigiIil9fSl9LDQ0ODk0OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUCwiU3RyaW5nIix7''@;'; put 'put ''cmVwZWF0OnQoMjc5MjYpfSl9LDQyODE4OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoInNtYWxsIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJzbWFsbCIsIiIsIiIpfX0pfSwxMDE3NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQo''@;'; put 'put ''OTIxMjcpLGU9dCg4MTQ4NSkscz10KDc4OTQyKSxhPSJzdGFydHNXaXRoIix1PSIiW2FdO24obi5QK24uRip0KDI1MjAzKShhKSwiU3RyaW5nIix7c3RhcnRzV2l0aDpmdW5jdGlvbihpKXt2YXIgdj1zKHRoaXMsaSxhKSxwPWUoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50''@;'; put 'put ''c1sxXTp2b2lkIDAsdi5sZW5ndGgpKSxkPVN0cmluZyhpKTtyZXR1cm4gdT91LmNhbGwodixkLHApOnYuc2xpY2UocCxwK2QubGVuZ3RoKT09PWR9fSl9LDI4NTQzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoInN0cmlrZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIG4odGhpcywic3RyaWtlIiwiIiwiIil9fSl9LDM1NTk6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgic3ViIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJzdWIiLCIiLCIiKX19KX0sODQxNTM6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt0KDUyNDY4KSgic3VwIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJzdXAiLCIiLCIiKX19KX0sMjA5NTc6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDQwNjI5KSgidHJpbSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhp''@;'; put 'put ''cywzKX19KX0sOTk2NTA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY3NTI2KSxlPXQoNTc5MTcpLHM9dCgxNzYzKSxhPXQoOTIxMjcpLHU9dCgyODg1OSksZj10KDEyOTg4KS5LRVksaT10KDc5NDQ4KSx2PXQoNDQ1NTYpLHA9dCgzODQ0KSxkPXQoNDQxNSksbT10KDY3NTc0KSxF''@;'; put 'put ''PXQoNDc5NjApLGc9dCgyMzAxMSksRD10KDE1OTY5KSxGPXQoNzc5ODEpLHg9dCg0MjI4KSx3PXQoNDMzMDUpLEM9dCgxODI3MCksST10KDU3MjIxKSxNPXQoODMwNDgpLFQ9dCgxMTk5NiksYj10KDg0NzE5KSxMPXQoNDc2NSksVT10KDY4NjQxKSxaPXQoMTA2MCksbnQ9dCg0Nzk2NyksdHQ9''@;'; put 'put ''dCg1MTMxMSkseXQ9VS5mLG10PW50LmYscT1MLmYsWD1uLlN5bWJvbCxldD1uLkpTT04sVj1ldCYmZXQuc3RyaW5naWZ5LGZ0PSJwcm90b3R5cGUiLGR0PW0oIl9oaWRkZW4iKSxidD1tKCJ0b1ByaW1pdGl2ZSIpLE90PXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLE50PXYoInN5bWJvbC1yZWdp''@;'; put 'put ''c3RyeSIpLFl0PXYoInN5bWJvbHMiKSxvbj12KCJvcC1zeW1ib2xzIiksR3Q9T2JqZWN0W2Z0XSx1bj0iZnVuY3Rpb24iPT10eXBlb2YgWCYmISFaLmYseW49bi5RT2JqZWN0LHJuPSF5bnx8IXluW2Z0XXx8IXluW2Z0XS5maW5kQ2hpbGQseG49cyYmaShmdW5jdGlvbigpe3JldHVybiA3IT1i''@;'; put 'put ''KG10KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG10KHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2Z1bmN0aW9uKF8sSCxRKXt2YXIgaXQ9eXQoR3QsSCk7aXQmJmRlbGV0ZSBHdFtIXSxtdChfLEgsUSksaXQmJl8hPT1HdCYmbXQoR3QsSCxpdCl9Om10LHF0PWZ1bmN0aW9u''@;'; put 'put ''KF8pe3ZhciBIPVl0W19dPWIoWFtmdF0pO3JldHVybiBILl9rPV8sSH0sZG49dW4mJiJzeW1ib2wiPT10eXBlb2YgWC5pdGVyYXRvcj9mdW5jdGlvbihfKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIF99OmZ1bmN0aW9uKF8pe3JldHVybiBfIGluc3RhbmNlb2YgWH0sc249ZnVuY3Rpb24oSCxR''@;'; put 'put ''LGl0KXtyZXR1cm4gSD09PUd0JiZzbihvbixRLGl0KSx4KEgpLFE9TShRLCEwKSx4KGl0KSxlKFl0LFEpPyhpdC5lbnVtZXJhYmxlPyhlKEgsZHQpJiZIW2R0XVtRXSYmKEhbZHRdW1FdPSExKSxpdD1iKGl0LHtlbnVtZXJhYmxlOlQoMCwhMSl9KSk6KGUoSCxkdCl8fG10KEgsZHQsVCgxLHt9''@;'; put 'put ''KSksSFtkdF1bUV09ITApLHhuKEgsUSxpdCkpOm10KEgsUSxpdCl9LF90PWZ1bmN0aW9uKEgsUSl7eChIKTtmb3IodmFyIGFuLGl0PUQoUT1JKFEpKSx6dD0wLFF0PWl0Lmxlbmd0aDtRdD56dDspc24oSCxhbj1pdFt6dCsrXSxRW2FuXSk7cmV0dXJuIEh9LFRuPWZ1bmN0aW9uKEgpe3ZhciBR''@;'; put 'put ''PU90LmNhbGwodGhpcyxIPU0oSCwhMCkpO3JldHVybiEodGhpcz09PUd0JiZlKFl0LEgpJiYhZShvbixIKSkmJighKFF8fCFlKHRoaXMsSCl8fCFlKFl0LEgpfHxlKHRoaXMsZHQpJiZ0aGlzW2R0XVtIXSl8fFEpfSxoPWZ1bmN0aW9uKEgsUSl7aWYoSD1JKEgpLFE9TShRLCEwKSxIIT09R3R8''@;'; put 'put ''fCFlKFl0LFEpfHxlKG9uLFEpKXt2YXIgaXQ9eXQoSCxRKTtyZXR1cm4gaXQmJmUoWXQsUSkmJiEoZShILGR0KSYmSFtkdF1bUV0pJiYoaXQuZW51bWVyYWJsZT0hMCksaXR9fSxyPWZ1bmN0aW9uKEgpe2Zvcih2YXIgUXQsUT1xKEkoSCkpLGl0PVtdLHp0PTA7US5sZW5ndGg+enQ7KSFlKFl0''@;'; put 'put ''LFF0PVFbenQrK10pJiZRdCE9ZHQmJlF0IT1mJiZpdC5wdXNoKFF0KTtyZXR1cm4gaXR9LG89ZnVuY3Rpb24oSCl7Zm9yKHZhciBhbixRPUg9PT1HdCxpdD1xKFE/b246SShIKSksenQ9W10sUXQ9MDtpdC5sZW5ndGg+UXQ7KWUoWXQsYW49aXRbUXQrK10pJiYoIVF8fGUoR3QsYW4pKSYmenQu''@;'; put 'put ''cHVzaChZdFthbl0pO3JldHVybiB6dH07dW58fCh1KChYPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFgpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhIik7dmFyIEg9ZChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksUT1m''@;'; put 'put ''dW5jdGlvbihpdCl7dGhpcz09PUd0JiZRLmNhbGwob24saXQpLGUodGhpcyxkdCkmJmUodGhpc1tkdF0sSCkmJih0aGlzW2R0XVtIXT0hMSkseG4odGhpcyxILFQoMSxpdCkpfTtyZXR1cm4gcyYmcm4mJnhuKEd0LEgse2NvbmZpZ3VyYWJsZTohMCxzZXQ6UX0pLHF0KEgpfSlbZnRdLCJ0b1N0''@;'; put 'put ''cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pLFUuZj1oLG50LmY9c24sdCg1OTQxNSkuZj1MLmY9cix0KDg0NDkpLmY9VG4sWi5mPW8scyYmIXQoMjI3NTApJiZ1KEd0LCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsVG4sITApLEUuZj1mdW5jdGlvbihfKXtyZXR1cm4gcXQobShfKSl9''@;'; put 'put ''KSxhKGEuRythLlcrYS5GKiF1bix7U3ltYm9sOlh9KTtmb3IodmFyIHk9Imhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzIi5zcGxpdCgiLCIp''@;'; put 'put ''LFA9MDt5Lmxlbmd0aD5QOyltKHlbUCsrXSk7Zm9yKHZhciBLPXR0KG0uc3RvcmUpLCQ9MDtLLmxlbmd0aD4kOylnKEtbJCsrXSk7YShhLlMrYS5GKiF1biwiU3ltYm9sIix7Zm9yOmZ1bmN0aW9uKF8pe3JldHVybiBlKE50LF8rPSIiKT9OdFtfXTpOdFtfXT1YKF8pfSxrZXlGb3I6ZnVuY3Rp''@;'; put 'put ''b24oSCl7aWYoIWRuKEgpKXRocm93IFR5cGVFcnJvcihIKyIgaXMgbm90IGEgc3ltYm9sISIpO2Zvcih2YXIgUSBpbiBOdClpZihOdFtRXT09PUgpcmV0dXJuIFF9LHVzZVNldHRlcjpmdW5jdGlvbigpe3JuPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtybj0hMX19KSxhKGEuUythLkYqIXVu''@;'; put 'put ''LCJPYmplY3QiLHtjcmVhdGU6ZnVuY3Rpb24oSCxRKXtyZXR1cm4gdm9pZCAwPT09UT9iKEgpOl90KGIoSCksUSl9LGRlZmluZVByb3BlcnR5OnNuLGRlZmluZVByb3BlcnRpZXM6X3QsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmgsZ2V0T3duUHJvcGVydHlOYW1lczpyLGdldE93blByb3Bl''@;'; put 'put ''cnR5U3ltYm9sczpvfSk7dmFyIGp0PWkoZnVuY3Rpb24oKXtaLmYoMSl9KTthKGEuUythLkYqanQsIk9iamVjdCIse2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbihIKXtyZXR1cm4gWi5mKEMoSCkpfX0pLGV0JiZhKGEuUythLkYqKCF1bnx8aShmdW5jdGlvbigpe3ZhciBfPVgoKTty''@;'; put 'put ''ZXR1cm4iW251bGxdIiE9VihbX10pfHwie30iIT1WKHthOl99KXx8Int9IiE9VihPYmplY3QoXykpfSkpLCJKU09OIix7c3RyaW5naWZ5OmZ1bmN0aW9uKEgpe2Zvcih2YXIgenQsUXQsUT1bSF0saXQ9MTthcmd1bWVudHMubGVuZ3RoPml0OylRLnB1c2goYXJndW1lbnRzW2l0KytdKTtpZihR''@;'; put 'put ''dD16dD1RWzFdLCh3KHp0KXx8dm9pZCAwIT09SCkmJiFkbihIKSlyZXR1cm4gRih6dCl8fCh6dD1mdW5jdGlvbihhbixNbil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFF0JiYoTW49UXQuY2FsbCh0aGlzLGFuLE1uKSksIWRuKE1uKSlyZXR1cm4gTW59KSxRWzFdPXp0LFYuYXBwbHkoZXQsUSl9''@;'; put 'put ''fSksWFtmdF1bYnRdfHx0KDMzMzQxKShYW2Z0XSxidCxYW2Z0XS52YWx1ZU9mKSxwKFgsIlN5bWJvbCIpLHAoTWF0aCwiTWF0aCIsITApLHAobi5KU09OLCJKU09OIiwhMCl9LDc5Mzk3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIEYsbj10KDY3NTI2KSxlPXQoNjYxNzkpKDApLHM9dCgy''@;'; put 'put ''ODg1OSksYT10KDEyOTg4KSx1PXQoMjgyMDYpLGY9dCg5OTg4MiksaT10KDQzMzA1KSx2PXQoMTI4ODgpLHA9dCgxMjg4OCksZD0hbi5BY3RpdmVYT2JqZWN0JiYiQWN0aXZlWE9iamVjdCJpbiBuLG09IldlYWtNYXAiLEU9YS5nZXRXZWFrLGc9T2JqZWN0LmlzRXh0ZW5zaWJsZSxEPWYudWZz''@;'; put 'put ''dG9yZSx4PWZ1bmN0aW9uKEkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sdz17Z2V0OmZ1bmN0aW9uKE0pe2lmKGkoTSkpe3ZhciBUPUUoTSk7cmV0dXJuITA9PT1UP0Qodih0aGlzLG0pKS5nZXQoTSk6''@;'; put 'put ''VD9UW3RoaXMuX2ldOnZvaWQgMH19LHNldDpmdW5jdGlvbihNLFQpe3JldHVybiBmLmRlZih2KHRoaXMsbSksTSxUKX19LEM9Yy5leHBvcnRzPXQoNTg5MzMpKG0seCx3LGYsITAsITApO3AmJmQmJih1KChGPWYuZ2V0Q29uc3RydWN0b3IoeCxtKSkucHJvdG90eXBlLHcpLGEuTkVFRD0hMCxl''@;'; put 'put ''KFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwic2V0Il0sZnVuY3Rpb24oSSl7dmFyIE09Qy5wcm90b3R5cGUsVD1NW0ldO3MoTSxJLGZ1bmN0aW9uKGIsTCl7aWYoaShiKSYmIWcoYikpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyBGKTt2YXIgVT10aGlzLl9mW0ldKGIsTCk7cmV0dXJuInNldCI9PUk/''@;'; put 'put ''dGhpczpVfXJldHVybiBULmNhbGwodGhpcyxiLEwpfSl9KSl9LDc3NDkxOihjLGwsdCk9Pnt2YXIgbj10KDk3MzgwKSxlPXQoNDIyOCkscz1uLmtleSxhPW4uc2V0O24uZXhwKHtkZWZpbmVNZXRhZGF0YTpmdW5jdGlvbihmLGksdixwKXthKGYsaSxlKHYpLHMocCkpfX0pfSw3NDkwNzooYyxs''@;'; put 'put ''LHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9bi5rZXksYT1uLm1hcCx1PW4uc3RvcmU7bi5leHAoe2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKGksdil7dmFyIHA9YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpzKGFyZ3VtZW50c1syXSksZD1hKGUodikscCwhMSk7aWYodm9pZCAw''@;'; put 'put ''PT09ZHx8IWQuZGVsZXRlKGkpKXJldHVybiExO2lmKGQuc2l6ZSlyZXR1cm4hMDt2YXIgbT11LmdldCh2KTtyZXR1cm4gbS5kZWxldGUocCksISFtLnNpemV8fHUuZGVsZXRlKHYpfX0pfSwxOTI2OTooYyxsLHQpPT57dmFyIG49dCg3MTYzMiksZT10KDgwOTU2KSxzPXQoOTczODApLGE9dCg0''@;'; put 'put ''MjI4KSx1PXQoNDA2MjcpLGY9cy5rZXlzLGk9cy5rZXksdj1mdW5jdGlvbihwLGQpe3ZhciBtPWYocCxkKSxFPXUocCk7aWYobnVsbD09PUUpcmV0dXJuIG07dmFyIGc9dihFLGQpO3JldHVybiBnLmxlbmd0aD9tLmxlbmd0aD9lKG5ldyBuKG0uY29uY2F0KGcpKSk6ZzptfTtzLmV4cCh7Z2V0''@;'; put 'put ''TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKGQpe3JldHVybiB2KGEoZCksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDppKGFyZ3VtZW50c1sxXSkpfX0pfSw3OTEwMDooYyxsLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9dCg0MDYyNyksYT1uLmhhcyx1PW4uZ2V0LGY9bi5rZXksaT1m''@;'; put 'put ''dW5jdGlvbih2LHAsZCl7aWYoYSh2LHAsZCkpcmV0dXJuIHUodixwLGQpO3ZhciBFPXMocCk7cmV0dXJuIG51bGwhPT1FP2kodixFLGQpOnZvaWQgMH07bi5leHAoe2dldE1ldGFkYXRhOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIGkocCxlKGQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Zihh''@;'; put 'put ''cmd1bWVudHNbMl0pKX19KX0sNzk3MzI6KGMsbCx0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4ua2V5cyxhPW4ua2V5O24uZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24oZil7cmV0dXJuIHMoZShmKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmEoYXJndW1lbnRz''@;'; put 'put ''WzFdKSl9fSl9LDkxMzE5OihjLGwsdCk9Pnt2YXIgbj10KDk3MzgwKSxlPXQoNDIyOCkscz1uLmdldCxhPW4ua2V5O24uZXhwKHtnZXRPd25NZXRhZGF0YTpmdW5jdGlvbihmLGkpe3JldHVybiBzKGYsZShpKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSl9fSl9''@;'; put 'put ''LDExNzY6KGMsbCx0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPXQoNDA2MjcpLGE9bi5oYXMsdT1uLmtleSxmPWZ1bmN0aW9uKGksdixwKXtpZihhKGksdixwKSlyZXR1cm4hMDt2YXIgbT1zKHYpO3JldHVybiBudWxsIT09bSYmZihpLG0scCl9O24uZXhwKHtoYXNNZXRhZGF0YTpm''@;'; put 'put ''dW5jdGlvbih2LHApe3JldHVybiBmKHYsZShwKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnUoYXJndW1lbnRzWzJdKSl9fSl9LDMxMDc6KGMsbCx0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4uaGFzLGE9bi5rZXk7bi5leHAoe2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKGYs''@;'; put 'put ''aSl7cmV0dXJuIHMoZixlKGkpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19KX0sNjE2OTE6KGMsbCx0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPXQoNjMzODcpLGE9bi5rZXksdT1uLnNldDtuLmV4cCh7bWV0YWRhdGE6ZnVuY3Rpb24oaSx2KXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oZCxtKXt1KGksdiwodm9pZCAwIT09bT9lOnMpKGQpLGEobSkpfX19KX0sMzU4OTA6KGMsbCx0KT0+e2Zvcih2YXIgbj10KDk1MTY1KSxlPXQoNTEzMTEpLHM9dCgyODg1OSksYT10KDY3NTI2KSx1PXQoMzMzNDEpLGY9dCg2MDkwNiksaT10KDY3NTc0KSx2PWkoIml0''@;'; put 'put ''ZXJhdG9yIikscD1pKCJ0b1N0cmluZ1RhZyIpLGQ9Zi5BcnJheSxtPXtDU1NSdWxlTGlzdDohMCxDU1NTdHlsZURlY2xhcmF0aW9uOiExLENTU1ZhbHVlTGlzdDohMSxDbGllbnRSZWN0TGlzdDohMSxET01SZWN0TGlzdDohMSxET01TdHJpbmdMaXN0OiExLERPTVRva2VuTGlzdDohMCxEYXRh''@;'; put 'put ''VHJhbnNmZXJJdGVtTGlzdDohMSxGaWxlTGlzdDohMSxIVE1MQWxsQ29sbGVjdGlvbjohMSxIVE1MQ29sbGVjdGlvbjohMSxIVE1MRm9ybUVsZW1lbnQ6ITEsSFRNTFNlbGVjdEVsZW1lbnQ6ITEsTWVkaWFMaXN0OiEwLE1pbWVUeXBlQXJyYXk6ITEsTmFtZWROb2RlTWFwOiExLE5vZGVMaXN0''@;'; put 'put ''OiEwLFBhaW50UmVxdWVzdExpc3Q6ITEsUGx1Z2luOiExLFBsdWdpbkFycmF5OiExLFNWR0xlbmd0aExpc3Q6ITEsU1ZHTnVtYmVyTGlzdDohMSxTVkdQYXRoU2VnTGlzdDohMSxTVkdQb2ludExpc3Q6ITEsU1ZHU3RyaW5nTGlzdDohMSxTVkdUcmFuc2Zvcm1MaXN0OiExLFNvdXJjZUJ1ZmZl''@;'; put 'put ''ckxpc3Q6ITEsU3R5bGVTaGVldExpc3Q6ITAsVGV4dFRyYWNrQ3VlTGlzdDohMSxUZXh0VHJhY2tMaXN0OiExLFRvdWNoTGlzdDohMX0sRT1lKG0pLGc9MDtnPEUubGVuZ3RoO2crKyl7dmFyIEMsRD1FW2ddLEY9bVtEXSx4PWFbRF0sdz14JiZ4LnByb3RvdHlwZTtpZih3JiYod1t2XXx8dSh3''@;'; put 'put ''LHYsZCksd1twXXx8dSh3LHAsRCksZltEXT1kLEYpKWZvcihDIGluIG4pd1tDXXx8cyh3LEMsbltDXSwhMCl9fSw4MjU3NDpjPT57InVzZSBzdHJpY3QiO2MuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImxvY2FsZSI6ImVuIiwiZGF0ZSI6eyJjYSI6WyJncmVnb3J5IiwiYnVkZGhpc3QiLCJjaGlu''@;'; put 'put ''ZXNlIiwiY29wdGljIiwiZGFuZ2kiLCJldGhpb2FhIiwiZXRoaW9waWMiLCJnZW5lcmljIiwiaGVicmV3IiwiaW5kaWFuIiwiaXNsYW1pYyIsImlzbGFtaWNjIiwiamFwYW5lc2UiLCJwZXJzaWFuIiwicm9jIl0sImhvdXJObzAiOnRydWUsImhvdXIxMiI6dHJ1ZSwiZm9ybWF0cyI6eyJzaG9y''@;'; put 'put ''dCI6InsxfSwgezB9IiwibWVkaXVtIjoiezF9LCB7MH0iLCJmdWxsIjoiezF9IFwnYXRcJyB7MH0iLCJsb25nIjoiezF9IFwnYXRcJyB7MH0iLCJhdmFpbGFibGVGb3JtYXRzIjp7ImQiOiJkIiwiRSI6ImNjYyIsIkVkIjoiZCBFIiwiRWhtIjoiRSBoOm1tIGEiLCJFSG0iOiJFIEhIOm1tIiwi''@;'; put 'put ''RWhtcyI6IkUgaDptbTpzcyBhIiwiRUhtcyI6IkUgSEg6bW06c3MiLCJHeSI6InkgRyIsIkd5TU1NIjoiTU1NIHkgRyIsIkd5TU1NZCI6Ik1NTSBkLCB5IEciLCJHeU1NTUVkIjoiRSwgTU1NIGQsIHkgRyIsImgiOiJoIGEiLCJIIjoiSEgiLCJobSI6Img6bW0gYSIsIkhtIjoiSEg6bW0iLCJo''@;'; put 'put ''bXMiOiJoOm1tOnNzIGEiLCJIbXMiOiJISDptbTpzcyIsImhtc3YiOiJoOm1tOnNzIGEgdiIsIkhtc3YiOiJISDptbTpzcyB2IiwiaG12IjoiaDptbSBhIHYiLCJIbXYiOiJISDptbSB2IiwiTSI6IkwiLCJNZCI6Ik0vZCIsIk1FZCI6IkUsIE0vZCIsIk1NTSI6IkxMTCIsIk1NTWQiOiJNTU0g''@;'; put 'put ''ZCIsIk1NTUVkIjoiRSwgTU1NIGQiLCJNTU1NZCI6Ik1NTU0gZCIsIm1zIjoibW06c3MiLCJ5IjoieSIsInlNIjoiTS95IiwieU1kIjoiTS9kL3kiLCJ5TUVkIjoiRSwgTS9kL3kiLCJ5TU1NIjoiTU1NIHkiLCJ5TU1NZCI6Ik1NTSBkLCB5IiwieU1NTUVkIjoiRSwgTU1NIGQsIHkiLCJ5TU1N''@;'; put 'put ''TSI6Ik1NTU0geSIsInlRUVEiOiJRUVEgeSIsInlRUVFRIjoiUVFRUSB5In0sImRhdGVGb3JtYXRzIjp7InlNTU1NRUVFRWQiOiJFRUVFLCBNTU1NIGQsIHkiLCJ5TU1NTWQiOiJNTU1NIGQsIHkiLCJ5TU1NZCI6Ik1NTSBkLCB5IiwieU1kIjoiTS9kL3l5In0sInRpbWVGb3JtYXRzIjp7Imht''@;'; put 'put ''bXNzenp6eiI6Img6bW06c3MgYSB6enp6IiwiaG1zeiI6Img6bW06c3MgYSB6IiwiaG1zIjoiaDptbTpzcyBhIiwiaG0iOiJoOm1tIGEifX0sImNhbGVuZGFycyI6eyJidWRkaGlzdCI6eyJtb250aHMiOnsibmFycm93IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8i''@;'; put 'put ''LCJOIiwiRCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3Qi''@;'; put 'put ''LCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJN''@;'; put 'put ''b25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQkUiXSwic2hvcnQiOlsiQkUiXSwibG9uZyI6WyJCRSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiY2hpbmVzZSI6eyJt''@;'; put 'put ''b250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNbzEiLCJNbzIiLCJNbzMiLCJNbzQiLCJNbzUiLCJNbzYiLCJNbzciLCJNbzgiLCJNbzkiLCJNbzEwIiwiTW8xMSIsIk1vMTIiXSwibG9uZyI6WyJN''@;'; put 'put ''b250aDEiLCJNb250aDIiLCJNb250aDMiLCJNb250aDQiLCJNb250aDUiLCJNb250aDYiLCJNb250aDciLCJNb250aDgiLCJNb250aDkiLCJNb250aDEwIiwiTW9udGgxMSIsIk1vbnRoMTIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQi''@;'; put 'put ''OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImNv''@;'; put 'put ''cHRpYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIl0sInNob3J0IjpbIlRvdXQiLCJCYWJhIiwiSGF0b3IiLCJLaWFoayIsIlRvYmEiLCJBbXNoaXIiLCJCYXJhbWhhdCIsIkJhcmFtb3VkYSIsIkJh''@;'; put 'put ''c2hhbnMiLCJQYW9uYSIsIkVwZXAiLCJNZXNyYSIsIk5hc2llIl0sImxvbmciOlsiVG91dCIsIkJhYmEiLCJIYXRvciIsIktpYWhrIiwiVG9iYSIsIkFtc2hpciIsIkJhcmFtaGF0IiwiQmFyYW1vdWRhIiwiQmFzaGFucyIsIlBhb25hIiwiRXBlcCIsIk1lc3JhIiwiTmFzaWUiXX0sImRheXMi''@;'; put 'put ''OnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0''@;'; put 'put ''dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkVSQTAiLCJFUkExIl0sInNob3J0IjpbIkVSQTAiLCJFUkExIl0sImxvbmciOlsiRVJBMCIsIkVSQTEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImRhbmdpIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIz''@;'; put 'put ''IiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk1vMSIsIk1vMiIsIk1vMyIsIk1vNCIsIk1vNSIsIk1vNiIsIk1vNyIsIk1vOCIsIk1vOSIsIk1vMTAiLCJNbzExIiwiTW8xMiJdLCJsb25nIjpbIk1vbnRoMSIsIk1vbnRoMiIsIk1vbnRoMyIsIk1v''@;'; put 'put ''bnRoNCIsIk1vbnRoNSIsIk1vbnRoNiIsIk1vbnRoNyIsIk1vbnRoOCIsIk1vbnRoOSIsIk1vbnRoMTAiLCJNb250aDExIiwiTW9udGgxMiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJU''@;'; put 'put ''aHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZXRoaW9waWMiOnsibW9udGhzIjp7Im5hcnJvdyI6''@;'; put 'put ''WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyJdLCJzaG9ydCI6WyJNZXNrZXJlbSIsIlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJO''@;'; put 'put ''ZWhhc3NlIiwiUGFndW1lbiJdLCJsb25nIjpbIk1lc2tlcmVtIiwiVGVrZW10IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzc2UiLCJQYWd1bWVuIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJT''@;'; put 'put ''IiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFz''@;'; put 'put ''Ijp7Im5hcnJvdyI6WyJFUkEwIiwiRVJBMSJdLCJzaG9ydCI6WyJFUkEwIiwiRVJBMSJdLCJsb25nIjpbIkVSQTAiLCJFUkExIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJldGhpb2FhIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2''@;'; put 'put ''IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiXSwic2hvcnQiOlsiTWVza2VyZW0iLCJUZWtlbXQiLCJIZWRhciIsIlRhaHNhcyIsIlRlciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNzZSIsIlBhZ3VtZW4iXSwibG9u''@;'; put 'put ''ZyI6WyJNZXNrZXJlbSIsIlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc3NlIiwiUGFndW1lbiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwi''@;'; put 'put ''UyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiRVJBMCJdLCJz''@;'; put 'put ''aG9ydCI6WyJFUkEwIl0sImxvbmciOlsiRVJBMCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZ2VuZXJpYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNMDEi''@;'; put 'put ''LCJNMDIiLCJNMDMiLCJNMDQiLCJNMDUiLCJNMDYiLCJNMDciLCJNMDgiLCJNMDkiLCJNMTAiLCJNMTEiLCJNMTIiXSwibG9uZyI6WyJNMDEiLCJNMDIiLCJNMDMiLCJNMDQiLCJNMDUiLCJNMDYiLCJNMDciLCJNMDgiLCJNMDkiLCJNMTAiLCJNMTEiLCJNMTIiXX0sImRheXMiOnsibmFycm93''@;'; put 'put ''IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0s''@;'; put 'put ''ImVyYXMiOnsibmFycm93IjpbIkVSQTAiLCJFUkExIl0sInNob3J0IjpbIkVSQTAiLCJFUkExIl0sImxvbmciOlsiRVJBMCIsIkVSQTEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImdyZWdvcnkiOnsibW9udGhzIjp7Im5hcnJvdyI6WyJKIiwiRiIsIk0iLCJBIiwi''@;'; put 'put ''TSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSwic2hvcnQiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sImxvbmciOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIs''@;'; put 'put ''Ikp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0''@;'; put 'put ''Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkIiLCJBIiwiQkNFIiwiQ0UiXSwic2hvcnQiOlsiQkMiLCJBRCIsIkJDRSIsIkNFIl0sImxvbmciOlsiQmVm''@;'; put 'put ''b3JlIENocmlzdCIsIkFubm8gRG9taW5pIiwiQmVmb3JlIENvbW1vbiBFcmEiLCJDb21tb24gRXJhIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJoZWJyZXciOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIx''@;'; put 'put ''MCIsIjExIiwiMTIiLCIxMyIsIjciXSwic2hvcnQiOlsiVGlzaHJpIiwiSGVzaHZhbiIsIktpc2xldiIsIlRldmV0IiwiU2hldmF0IiwiQWRhciBJIiwiQWRhciIsIk5pc2FuIiwiSXlhciIsIlNpdmFuIiwiVGFtdXoiLCJBdiIsIkVsdWwiLCJBZGFyIElJIl0sImxvbmciOlsiVGlzaHJpIiwi''@;'; put 'put ''SGVzaHZhbiIsIktpc2xldiIsIlRldmV0IiwiU2hldmF0IiwiQWRhciBJIiwiQWRhciIsIk5pc2FuIiwiSXlhciIsIlNpdmFuIiwiVGFtdXoiLCJBdiIsIkVsdWwiLCJBZGFyIElJIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1''@;'; put 'put ''biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBTSJdLCJzaG9ydCI6WyJBTSJdLCJsb25n''@;'; put 'put ''IjpbIkFNIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJpbmRpYW4iOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiQ2hhaXRyYSIsIlZhaXNha2hhIiwiSnlhaXN0''@;'; put 'put ''aGEiLCJBc2FkaGEiLCJTcmF2YW5hIiwiQmhhZHJhIiwiQXN2aW5hIiwiS2FydGlrYSIsIkFncmFoYXlhbmEiLCJQYXVzYSIsIk1hZ2hhIiwiUGhhbGd1bmEiXSwibG9uZyI6WyJDaGFpdHJhIiwiVmFpc2FraGEiLCJKeWFpc3RoYSIsIkFzYWRoYSIsIlNyYXZhbmEiLCJCaGFkcmEiLCJBc3Zp''@;'; put 'put ''bmEiLCJLYXJ0aWthIiwiQWdyYWhheWFuYSIsIlBhdXNhIiwiTWFnaGEiLCJQaGFsZ3VuYSJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJT''@;'; put 'put ''dW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiU2FrYSJdLCJzaG9ydCI6WyJTYWthIl0sImxvbmciOlsiU2FrYSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9''@;'; put 'put ''fSwiaXNsYW1pYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNdWguIiwiU2FmLiIsIlJhYi4gSSIsIlJhYi4gSUkiLCJKdW0uIEkiLCJKdW0uIElJIiwiUmFqLiIsIlNoYS4iLCJSYW0u''@;'; put 'put ''IiwiU2hhdy4iLCJEaHVcdTAyYmJsLVEuIiwiRGh1XHUwMmJibC1ILiJdLCJsb25nIjpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpXHUwMmJiIEkiLCJSYWJpXHUwMmJiIElJIiwiSnVtYWRhIEkiLCJKdW1hZGEgSUkiLCJSYWphYiIsIlNoYVx1MDJiYmJhbiIsIlJhbWFkYW4iLCJTaGF3d2Fs''@;'; put 'put ''IiwiRGh1XHUwMmJibC1RaVx1MDJiYmRhaCIsIkRodVx1MDJiYmwtSGlqamFoIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIs''@;'; put 'put ''Ik1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBSCJdLCJzaG9ydCI6WyJBSCJdLCJsb25nIjpbIkFIIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJpc2xhbWljYyI6''@;'; put 'put ''eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNdWguIiwiU2FmLiIsIlJhYi4gSSIsIlJhYi4gSUkiLCJKdW0uIEkiLCJKdW0uIElJIiwiUmFqLiIsIlNoYS4iLCJSYW0uIiwiU2hhdy4iLCJE''@;'; put 'put ''aHVcdTAyYmJsLVEuIiwiRGh1XHUwMmJibC1ILiJdLCJsb25nIjpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpXHUwMmJiIEkiLCJSYWJpXHUwMmJiIElJIiwiSnVtYWRhIEkiLCJKdW1hZGEgSUkiLCJSYWphYiIsIlNoYVx1MDJiYmJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1XHUwMmJi''@;'; put 'put ''bC1RaVx1MDJiYmRhaCIsIkRodVx1MDJiYmwtSGlqamFoIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1''@;'; put 'put ''ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBSCJdLCJzaG9ydCI6WyJBSCJdLCJsb25nIjpbIkFIIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJqYXBhbmVzZSI6eyJtb250aHMiOnsi''@;'; put 'put ''bmFycm93IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVh''@;'; put 'put ''cnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJU''@;'; put 'put ''dWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiVGFpa2EgKDY0NVx1MjAxMzY1MCkiLCJIYWt1Y2hpICg2NTBc''@;'; put 'put ''dTIwMTM2NzEpIiwiSGFrdWhcdTAxNGQgKDY3Mlx1MjAxMzY4NikiLCJTaHVjaFx1MDE0ZCAoNjg2XHUyMDEzNzAxKSIsIlRhaWhcdTAxNGQgKDcwMVx1MjAxMzcwNCkiLCJLZWl1biAoNzA0XHUyMDEzNzA4KSIsIldhZFx1MDE0ZCAoNzA4XHUyMDEzNzE1KSIsIlJlaWtpICg3MTVcdTIwMTM3''@;'; put 'put ''MTcpIiwiWVx1MDE0ZHJcdTAxNGQgKDcxN1x1MjAxMzcyNCkiLCJKaW5raSAoNzI0XHUyMDEzNzI5KSIsIlRlbnB5XHUwMTRkICg3MjlcdTIwMTM3NDkpIiwiVGVucHlcdTAxNGQta2FtcFx1MDE0ZCAoNzQ5LTc0OSkiLCJUZW5weVx1MDE0ZC1zaFx1MDE0ZGhcdTAxNGQgKDc0OS03NTcpIiwi''@;'; put 'put ''VGVucHlcdTAxNGQtaFx1MDE0ZGppICg3NTctNzY1KSIsIlRlbnB5XHUwMTRkLWppbmdvICg3NjUtNzY3KSIsIkppbmdvLWtlaXVuICg3NjctNzcwKSIsIkhcdTAxNGRraSAoNzcwXHUyMDEzNzgwKSIsIlRlbi1cdTAxNGQgKDc4MS03ODIpIiwiRW5yeWFrdSAoNzgyXHUyMDEzODA2KSIsIkRh''@;'; put 'put ''aWRcdTAxNGQgKDgwNlx1MjAxMzgxMCkiLCJLXHUwMTRkbmluICg4MTBcdTIwMTM4MjQpIiwiVGVuY2hcdTAxNGQgKDgyNFx1MjAxMzgzNCkiLCJKXHUwMTRkd2EgKDgzNFx1MjAxMzg0OCkiLCJLYWpcdTAxNGQgKDg0OFx1MjAxMzg1MSkiLCJOaW5qdSAoODUxXHUyMDEzODU0KSIsIlNhaWtc''@;'; put 'put ''dTAxNGQgKDg1NFx1MjAxMzg1NykiLCJUZW4tYW4gKDg1Ny04NTkpIiwiSlx1MDE0ZGdhbiAoODU5XHUyMDEzODc3KSIsIkdhbmd5XHUwMTRkICg4NzdcdTIwMTM4ODUpIiwiTmlubmEgKDg4NVx1MjAxMzg4OSkiLCJLYW5weVx1MDE0ZCAoODg5XHUyMDEzODk4KSIsIlNoXHUwMTRkdGFpICg4''@;'; put 'put ''OThcdTIwMTM5MDEpIiwiRW5naSAoOTAxXHUyMDEzOTIzKSIsIkVuY2hcdTAxNGQgKDkyM1x1MjAxMzkzMSkiLCJKXHUwMTRkaGVpICg5MzFcdTIwMTM5MzgpIiwiVGVuZ3lcdTAxNGQgKDkzOFx1MjAxMzk0NykiLCJUZW5yeWFrdSAoOTQ3XHUyMDEzOTU3KSIsIlRlbnRva3UgKDk1N1x1MjAx''@;'; put 'put ''Mzk2MSkiLCJcdTAxNGN3YSAoOTYxXHUyMDEzOTY0KSIsIktcdTAxNGRoXHUwMTRkICg5NjRcdTIwMTM5NjgpIiwiQW5uYSAoOTY4XHUyMDEzOTcwKSIsIlRlbnJva3UgKDk3MFx1MjAxMzk3MykiLCJUZW5cdTIwMTllbiAoOTczXHUyMDEzOTc2KSIsIkpcdTAxNGRnZW4gKDk3Nlx1MjAxMzk3''@;'; put 'put ''OCkiLCJUZW5nZW4gKDk3OFx1MjAxMzk4MykiLCJFaWthbiAoOTgzXHUyMDEzOTg1KSIsIkthbm5hICg5ODVcdTIwMTM5ODcpIiwiRWllbiAoOTg3XHUyMDEzOTg5KSIsIkVpc28gKDk4OVx1MjAxMzk5MCkiLCJTaFx1MDE0ZHJ5YWt1ICg5OTBcdTIwMTM5OTUpIiwiQ2hcdTAxNGR0b2t1ICg5''@;'; put 'put ''OTVcdTIwMTM5OTkpIiwiQ2hcdTAxNGRoXHUwMTRkICg5OTlcdTIwMTMxMDA0KSIsIkthbmtcdTAxNGQgKDEwMDRcdTIwMTMxMDEyKSIsIkNoXHUwMTRkd2EgKDEwMTJcdTIwMTMxMDE3KSIsIkthbm5pbiAoMTAxN1x1MjAxMzEwMjEpIiwiSmlhbiAoMTAyMVx1MjAxMzEwMjQpIiwiTWFuanUg''@;'; put 'put ''KDEwMjRcdTIwMTMxMDI4KSIsIkNoXHUwMTRkZ2VuICgxMDI4XHUyMDEzMTAzNykiLCJDaFx1MDE0ZHJ5YWt1ICgxMDM3XHUyMDEzMTA0MCkiLCJDaFx1MDE0ZGt5XHUwMTZiICgxMDQwXHUyMDEzMTA0NCkiLCJLYW50b2t1ICgxMDQ0XHUyMDEzMTA0NikiLCJFaXNoXHUwMTRkICgxMDQ2XHUy''@;'; put 'put ''MDEzMTA1MykiLCJUZW5naSAoMTA1M1x1MjAxMzEwNTgpIiwiS1x1MDE0ZGhlaSAoMTA1OFx1MjAxMzEwNjUpIiwiSmlyeWFrdSAoMTA2NVx1MjAxMzEwNjkpIiwiRW5reVx1MDE2YiAoMTA2OVx1MjAxMzEwNzQpIiwiU2hcdTAxNGRobyAoMTA3NFx1MjAxMzEwNzcpIiwiU2hcdTAxNGRyeWFr''@;'; put 'put ''dSAoMTA3N1x1MjAxMzEwODEpIiwiRWloXHUwMTRkICgxMDgxXHUyMDEzMTA4NCkiLCJcdTAxNGN0b2t1ICgxMDg0XHUyMDEzMTA4NykiLCJLYW5qaSAoMTA4N1x1MjAxMzEwOTQpIiwiS2FoXHUwMTRkICgxMDk0XHUyMDEzMTA5NikiLCJFaWNoXHUwMTRkICgxMDk2XHUyMDEzMTA5NykiLCJK''@;'; put 'put ''XHUwMTRkdG9rdSAoMTA5N1x1MjAxMzEwOTkpIiwiS1x1MDE0ZHdhICgxMDk5XHUyMDEzMTEwNCkiLCJDaFx1MDE0ZGppICgxMTA0XHUyMDEzMTEwNikiLCJLYXNoXHUwMTRkICgxMTA2XHUyMDEzMTEwOCkiLCJUZW5uaW4gKDExMDhcdTIwMTMxMTEwKSIsIlRlbi1laSAoMTExMC0xMTEzKSIs''@;'; put 'put ''IkVpa3lcdTAxNmIgKDExMTNcdTIwMTMxMTE4KSIsIkdlblx1MjAxOWVpICgxMTE4XHUyMDEzMTEyMCkiLCJIXHUwMTRkYW4gKDExMjBcdTIwMTMxMTI0KSIsIlRlbmppICgxMTI0XHUyMDEzMTEyNikiLCJEYWlqaSAoMTEyNlx1MjAxMzExMzEpIiwiVGVuc2hcdTAxNGQgKDExMzFcdTIwMTMx''@;'; put 'put ''MTMyKSIsIkNoXHUwMTRkc2hcdTAxNGQgKDExMzJcdTIwMTMxMTM1KSIsIkhcdTAxNGRlbiAoMTEzNVx1MjAxMzExNDEpIiwiRWlqaSAoMTE0MVx1MjAxMzExNDIpIiwiS1x1MDE0ZGppICgxMTQyXHUyMDEzMTE0NCkiLCJUZW5cdTIwMTl5XHUwMTRkICgxMTQ0XHUyMDEzMTE0NSkiLCJLeVx1''@;'; put 'put ''MDE2YmFuICgxMTQ1XHUyMDEzMTE1MSkiLCJOaW5wZWkgKDExNTFcdTIwMTMxMTU0KSIsIkt5XHUwMTZianUgKDExNTRcdTIwMTMxMTU2KSIsIkhcdTAxNGRnZW4gKDExNTZcdTIwMTMxMTU5KSIsIkhlaWppICgxMTU5XHUyMDEzMTE2MCkiLCJFaXJ5YWt1ICgxMTYwXHUyMDEzMTE2MSkiLCJc''@;'; put 'put ''dTAxNGNobyAoMTE2MVx1MjAxMzExNjMpIiwiQ2hcdTAxNGRrYW4gKDExNjNcdTIwMTMxMTY1KSIsIkVpbWFuICgxMTY1XHUyMDEzMTE2NikiLCJOaW5cdTIwMTlhbiAoMTE2Nlx1MjAxMzExNjkpIiwiS2FcdTAxNGQgKDExNjlcdTIwMTMxMTcxKSIsIlNoXHUwMTRkYW4gKDExNzFcdTIwMTMx''@;'; put 'put ''MTc1KSIsIkFuZ2VuICgxMTc1XHUyMDEzMTE3NykiLCJKaXNoXHUwMTRkICgxMTc3XHUyMDEzMTE4MSkiLCJZXHUwMTRkd2EgKDExODFcdTIwMTMxMTgyKSIsIkp1ZWkgKDExODJcdTIwMTMxMTg0KSIsIkdlbnJ5YWt1ICgxMTg0XHUyMDEzMTE4NSkiLCJCdW5qaSAoMTE4NVx1MjAxMzExOTAp''@;'; put 'put ''IiwiS2Vua3lcdTAxNmIgKDExOTBcdTIwMTMxMTk5KSIsIlNoXHUwMTRkamkgKDExOTlcdTIwMTMxMjAxKSIsIktlbm5pbiAoMTIwMVx1MjAxMzEyMDQpIiwiR2Vua3lcdTAxNmIgKDEyMDRcdTIwMTMxMjA2KSIsIktlblx1MjAxOWVpICgxMjA2XHUyMDEzMTIwNykiLCJKXHUwMTRkZ2VuICgx''@;'; put 'put ''MjA3XHUyMDEzMTIxMSkiLCJLZW5yeWFrdSAoMTIxMVx1MjAxMzEyMTMpIiwiS2VucFx1MDE0ZCAoMTIxM1x1MjAxMzEyMTkpIiwiSlx1MDE0ZGt5XHUwMTZiICgxMjE5XHUyMDEzMTIyMikiLCJKXHUwMTRkXHUwMTRkICgxMjIyXHUyMDEzMTIyNCkiLCJHZW5uaW4gKDEyMjRcdTIwMTMxMjI1''@;'; put 'put ''KSIsIkthcm9rdSAoMTIyNVx1MjAxMzEyMjcpIiwiQW50ZWkgKDEyMjdcdTIwMTMxMjI5KSIsIkthbmtpICgxMjI5XHUyMDEzMTIzMikiLCJKXHUwMTRkZWkgKDEyMzJcdTIwMTMxMjMzKSIsIlRlbnB1a3UgKDEyMzNcdTIwMTMxMjM0KSIsIkJ1bnJ5YWt1ICgxMjM0XHUyMDEzMTIzNSkiLCJL''@;'; put 'put ''YXRlaSAoMTIzNVx1MjAxMzEyMzgpIiwiUnlha3VuaW4gKDEyMzhcdTIwMTMxMjM5KSIsIkVuXHUyMDE5XHUwMTRkICgxMjM5XHUyMDEzMTI0MCkiLCJOaW5qaSAoMTI0MFx1MjAxMzEyNDMpIiwiS2FuZ2VuICgxMjQzXHUyMDEzMTI0NykiLCJIXHUwMTRkamkgKDEyNDdcdTIwMTMxMjQ5KSIs''@;'; put 'put ''IktlbmNoXHUwMTRkICgxMjQ5XHUyMDEzMTI1NikiLCJLXHUwMTRkZ2VuICgxMjU2XHUyMDEzMTI1NykiLCJTaFx1MDE0ZGthICgxMjU3XHUyMDEzMTI1OSkiLCJTaFx1MDE0ZGdlbiAoMTI1OVx1MjAxMzEyNjApIiwiQnVuXHUyMDE5XHUwMTRkICgxMjYwXHUyMDEzMTI2MSkiLCJLXHUwMTRk''@;'; put 'put ''Y2hcdTAxNGQgKDEyNjFcdTIwMTMxMjY0KSIsIkJ1blx1MjAxOWVpICgxMjY0XHUyMDEzMTI3NSkiLCJLZW5qaSAoMTI3NVx1MjAxMzEyNzgpIiwiS1x1MDE0ZGFuICgxMjc4XHUyMDEzMTI4OCkiLCJTaFx1MDE0ZFx1MDE0ZCAoMTI4OFx1MjAxMzEyOTMpIiwiRWluaW4gKDEyOTNcdTIwMTMx''@;'; put 'put ''Mjk5KSIsIlNoXHUwMTRkYW4gKDEyOTlcdTIwMTMxMzAyKSIsIktlbmdlbiAoMTMwMlx1MjAxMzEzMDMpIiwiS2FnZW4gKDEzMDNcdTIwMTMxMzA2KSIsIlRva3VqaSAoMTMwNlx1MjAxMzEzMDgpIiwiRW5reVx1MDE0ZCAoMTMwOFx1MjAxMzEzMTEpIiwiXHUwMTRjY2hcdTAxNGQgKDEzMTFc''@;'; put 'put ''dTIwMTMxMzEyKSIsIlNoXHUwMTRkd2EgKDEzMTJcdTIwMTMxMzE3KSIsIkJ1bnBcdTAxNGQgKDEzMTdcdTIwMTMxMzE5KSIsIkdlblx1MDE0ZCAoMTMxOVx1MjAxMzEzMjEpIiwiR2Vua1x1MDE0ZCAoMTMyMVx1MjAxMzEzMjQpIiwiU2hcdTAxNGRjaFx1MDE2YiAoMTMyNFx1MjAxMzEzMjYp''@;'; put 'put ''IiwiS2FyeWFrdSAoMTMyNlx1MjAxMzEzMjkpIiwiR2VudG9rdSAoMTMyOVx1MjAxMzEzMzEpIiwiR2Vua1x1MDE0ZCAoMTMzMVx1MjAxMzEzMzQpIiwiS2VubXUgKDEzMzRcdTIwMTMxMzM2KSIsIkVuZ2VuICgxMzM2XHUyMDEzMTM0MCkiLCJLXHUwMTRka29rdSAoMTM0MFx1MjAxMzEzNDYp''@;'; put 'put ''IiwiU2hcdTAxNGRoZWkgKDEzNDZcdTIwMTMxMzcwKSIsIktlbnRva3UgKDEzNzBcdTIwMTMxMzcyKSIsIkJ1bmNoXHUwMTZiICgxMzcyXHUyMDEzMTM3NSkiLCJUZW5qdSAoMTM3NVx1MjAxMzEzNzkpIiwiS1x1MDE0ZHJ5YWt1ICgxMzc5XHUyMDEzMTM4MSkiLCJLXHUwMTRkd2EgKDEzODFc''@;'; put 'put ''dTIwMTMxMzg0KSIsIkdlbmNoXHUwMTZiICgxMzg0XHUyMDEzMTM5MikiLCJNZWl0b2t1ICgxMzg0XHUyMDEzMTM4NykiLCJLYWtlaSAoMTM4N1x1MjAxMzEzODkpIiwiS1x1MDE0ZFx1MDE0ZCAoMTM4OVx1MjAxMzEzOTApIiwiTWVpdG9rdSAoMTM5MFx1MjAxMzEzOTQpIiwiXHUwMTRjZWkg''@;'; put 'put ''KDEzOTRcdTIwMTMxNDI4KSIsIlNoXHUwMTRkY2hcdTAxNGQgKDE0MjhcdTIwMTMxNDI5KSIsIkVpa3lcdTAxNGQgKDE0MjlcdTIwMTMxNDQxKSIsIktha2l0c3UgKDE0NDFcdTIwMTMxNDQ0KSIsIkJ1blx1MjAxOWFuICgxNDQ0XHUyMDEzMTQ0OSkiLCJIXHUwMTRkdG9rdSAoMTQ0OVx1MjAx''@;'; put 'put ''MzE0NTIpIiwiS3lcdTAxNGR0b2t1ICgxNDUyXHUyMDEzMTQ1NSkiLCJLXHUwMTRkc2hcdTAxNGQgKDE0NTVcdTIwMTMxNDU3KSIsIkNoXHUwMTRkcm9rdSAoMTQ1N1x1MjAxMzE0NjApIiwiS2Fuc2hcdTAxNGQgKDE0NjBcdTIwMTMxNDY2KSIsIkJ1bnNoXHUwMTRkICgxNDY2XHUyMDEzMTQ2''@;'; put 'put ''NykiLCJcdTAxNGNuaW4gKDE0NjdcdTIwMTMxNDY5KSIsIkJ1bm1laSAoMTQ2OVx1MjAxMzE0ODcpIiwiQ2hcdTAxNGRreVx1MDE0ZCAoMTQ4N1x1MjAxMzE0ODkpIiwiRW50b2t1ICgxNDg5XHUyMDEzMTQ5MikiLCJNZWlcdTAxNGQgKDE0OTJcdTIwMTMxNTAxKSIsIkJ1bmtpICgxNTAxXHUy''@;'; put 'put ''MDEzMTUwNCkiLCJFaXNoXHUwMTRkICgxNTA0XHUyMDEzMTUyMSkiLCJUYWllaSAoMTUyMVx1MjAxMzE1MjgpIiwiS3lcdTAxNGRyb2t1ICgxNTI4XHUyMDEzMTUzMikiLCJUZW5idW4gKDE1MzJcdTIwMTMxNTU1KSIsIktcdTAxNGRqaSAoMTU1NVx1MjAxMzE1NTgpIiwiRWlyb2t1ICgxNTU4''@;'; put 'put ''XHUyMDEzMTU3MCkiLCJHZW5raSAoMTU3MFx1MjAxMzE1NzMpIiwiVGVuc2hcdTAxNGQgKDE1NzNcdTIwMTMxNTkyKSIsIkJ1bnJva3UgKDE1OTJcdTIwMTMxNTk2KSIsIktlaWNoXHUwMTRkICgxNTk2XHUyMDEzMTYxNSkiLCJHZW5uYSAoMTYxNVx1MjAxMzE2MjQpIiwiS2FuXHUyMDE5ZWkg''@;'; put 'put ''KDE2MjRcdTIwMTMxNjQ0KSIsIlNoXHUwMTRkaG8gKDE2NDRcdTIwMTMxNjQ4KSIsIktlaWFuICgxNjQ4XHUyMDEzMTY1MikiLCJKXHUwMTRkXHUwMTRkICgxNjUyXHUyMDEzMTY1NSkiLCJNZWlyZWtpICgxNjU1XHUyMDEzMTY1OCkiLCJNYW5qaSAoMTY1OFx1MjAxMzE2NjEpIiwiS2FuYnVu''@;'; put 'put ''ICgxNjYxXHUyMDEzMTY3MykiLCJFbnBcdTAxNGQgKDE2NzNcdTIwMTMxNjgxKSIsIlRlbm5hICgxNjgxXHUyMDEzMTY4NCkiLCJKXHUwMTRka3lcdTAxNGQgKDE2ODRcdTIwMTMxNjg4KSIsIkdlbnJva3UgKDE2ODhcdTIwMTMxNzA0KSIsIkhcdTAxNGRlaSAoMTcwNFx1MjAxMzE3MTEpIiwi''@;'; put 'put ''U2hcdTAxNGR0b2t1ICgxNzExXHUyMDEzMTcxNikiLCJLeVx1MDE0ZGhcdTAxNGQgKDE3MTZcdTIwMTMxNzM2KSIsIkdlbmJ1biAoMTczNlx1MjAxMzE3NDEpIiwiS2FucFx1MDE0ZCAoMTc0MVx1MjAxMzE3NDQpIiwiRW5reVx1MDE0ZCAoMTc0NFx1MjAxMzE3NDgpIiwiS2FuXHUyMDE5ZW4g''@;'; put 'put ''KDE3NDhcdTIwMTMxNzUxKSIsIkhcdTAxNGRyZWtpICgxNzUxXHUyMDEzMTc2NCkiLCJNZWl3YSAoMTc2NFx1MjAxMzE3NzIpIiwiQW5cdTIwMTllaSAoMTc3Mlx1MjAxMzE3ODEpIiwiVGVubWVpICgxNzgxXHUyMDEzMTc4OSkiLCJLYW5zZWkgKDE3ODlcdTIwMTMxODAxKSIsIkt5XHUwMTRk''@;'; put 'put ''d2EgKDE4MDFcdTIwMTMxODA0KSIsIkJ1bmthICgxODA0XHUyMDEzMTgxOCkiLCJCdW5zZWkgKDE4MThcdTIwMTMxODMwKSIsIlRlbnBcdTAxNGQgKDE4MzBcdTIwMTMxODQ0KSIsIktcdTAxNGRrYSAoMTg0NFx1MjAxMzE4NDgpIiwiS2FlaSAoMTg0OFx1MjAxMzE4NTQpIiwiQW5zZWkgKDE4''@;'; put 'put ''NTRcdTIwMTMxODYwKSIsIk1hblx1MjAxOWVuICgxODYwXHUyMDEzMTg2MSkiLCJCdW5reVx1MDE2YiAoMTg2MVx1MjAxMzE4NjQpIiwiR2VuamkgKDE4NjRcdTIwMTMxODY1KSIsIktlaVx1MDE0ZCAoMTg2NVx1MjAxMzE4NjgpIiwiTSIsIlQiLCJTIiwiSCJdLCJzaG9ydCI6WyJUYWlrYSAo''@;'; put 'put ''NjQ1XHUyMDEzNjUwKSIsIkhha3VjaGkgKDY1MFx1MjAxMzY3MSkiLCJIYWt1aFx1MDE0ZCAoNjcyXHUyMDEzNjg2KSIsIlNodWNoXHUwMTRkICg2ODZcdTIwMTM3MDEpIiwiVGFpaFx1MDE0ZCAoNzAxXHUyMDEzNzA0KSIsIktlaXVuICg3MDRcdTIwMTM3MDgpIiwiV2FkXHUwMTRkICg3MDhc''@;'; put 'put ''dTIwMTM3MTUpIiwiUmVpa2kgKDcxNVx1MjAxMzcxNykiLCJZXHUwMTRkclx1MDE0ZCAoNzE3XHUyMDEzNzI0KSIsIkppbmtpICg3MjRcdTIwMTM3MjkpIiwiVGVucHlcdTAxNGQgKDcyOVx1MjAxMzc0OSkiLCJUZW5weVx1MDE0ZC1rYW1wXHUwMTRkICg3NDktNzQ5KSIsIlRlbnB5XHUwMTRk''@;'; put 'put ''LXNoXHUwMTRkaFx1MDE0ZCAoNzQ5LTc1NykiLCJUZW5weVx1MDE0ZC1oXHUwMTRkamkgKDc1Ny03NjUpIiwiVGVucHlcdTAxNGQtamluZ28gKDc2NS03NjcpIiwiSmluZ28ta2VpdW4gKDc2Ny03NzApIiwiSFx1MDE0ZGtpICg3NzBcdTIwMTM3ODApIiwiVGVuLVx1MDE0ZCAoNzgxLTc4Miki''@;'; put 'put ''LCJFbnJ5YWt1ICg3ODJcdTIwMTM4MDYpIiwiRGFpZFx1MDE0ZCAoODA2XHUyMDEzODEwKSIsIktcdTAxNGRuaW4gKDgxMFx1MjAxMzgyNCkiLCJUZW5jaFx1MDE0ZCAoODI0XHUyMDEzODM0KSIsIkpcdTAxNGR3YSAoODM0XHUyMDEzODQ4KSIsIkthalx1MDE0ZCAoODQ4XHUyMDEzODUxKSIs''@;'; put 'put ''Ik5pbmp1ICg4NTFcdTIwMTM4NTQpIiwiU2Fpa1x1MDE0ZCAoODU0XHUyMDEzODU3KSIsIlRlbi1hbiAoODU3LTg1OSkiLCJKXHUwMTRkZ2FuICg4NTlcdTIwMTM4NzcpIiwiR2FuZ3lcdTAxNGQgKDg3N1x1MjAxMzg4NSkiLCJOaW5uYSAoODg1XHUyMDEzODg5KSIsIkthbnB5XHUwMTRkICg4''@;'; put 'put ''ODlcdTIwMTM4OTgpIiwiU2hcdTAxNGR0YWkgKDg5OFx1MjAxMzkwMSkiLCJFbmdpICg5MDFcdTIwMTM5MjMpIiwiRW5jaFx1MDE0ZCAoOTIzXHUyMDEzOTMxKSIsIkpcdTAxNGRoZWkgKDkzMVx1MjAxMzkzOCkiLCJUZW5neVx1MDE0ZCAoOTM4XHUyMDEzOTQ3KSIsIlRlbnJ5YWt1ICg5NDdc''@;'; put 'put ''dTIwMTM5NTcpIiwiVGVudG9rdSAoOTU3XHUyMDEzOTYxKSIsIlx1MDE0Y3dhICg5NjFcdTIwMTM5NjQpIiwiS1x1MDE0ZGhcdTAxNGQgKDk2NFx1MjAxMzk2OCkiLCJBbm5hICg5NjhcdTIwMTM5NzApIiwiVGVucm9rdSAoOTcwXHUyMDEzOTczKSIsIlRlblx1MjAxOWVuICg5NzNcdTIwMTM5''@;'; put 'put ''NzYpIiwiSlx1MDE0ZGdlbiAoOTc2XHUyMDEzOTc4KSIsIlRlbmdlbiAoOTc4XHUyMDEzOTgzKSIsIkVpa2FuICg5ODNcdTIwMTM5ODUpIiwiS2FubmEgKDk4NVx1MjAxMzk4NykiLCJFaWVuICg5ODdcdTIwMTM5ODkpIiwiRWlzbyAoOTg5XHUyMDEzOTkwKSIsIlNoXHUwMTRkcnlha3UgKDk5''@;'; put 'put ''MFx1MjAxMzk5NSkiLCJDaFx1MDE0ZHRva3UgKDk5NVx1MjAxMzk5OSkiLCJDaFx1MDE0ZGhcdTAxNGQgKDk5OVx1MjAxMzEwMDQpIiwiS2Fua1x1MDE0ZCAoMTAwNFx1MjAxMzEwMTIpIiwiQ2hcdTAxNGR3YSAoMTAxMlx1MjAxMzEwMTcpIiwiS2FubmluICgxMDE3XHUyMDEzMTAyMSkiLCJK''@;'; put 'put ''aWFuICgxMDIxXHUyMDEzMTAyNCkiLCJNYW5qdSAoMTAyNFx1MjAxMzEwMjgpIiwiQ2hcdTAxNGRnZW4gKDEwMjhcdTIwMTMxMDM3KSIsIkNoXHUwMTRkcnlha3UgKDEwMzdcdTIwMTMxMDQwKSIsIkNoXHUwMTRka3lcdTAxNmIgKDEwNDBcdTIwMTMxMDQ0KSIsIkthbnRva3UgKDEwNDRcdTIw''@;'; put 'put ''MTMxMDQ2KSIsIkVpc2hcdTAxNGQgKDEwNDZcdTIwMTMxMDUzKSIsIlRlbmdpICgxMDUzXHUyMDEzMTA1OCkiLCJLXHUwMTRkaGVpICgxMDU4XHUyMDEzMTA2NSkiLCJKaXJ5YWt1ICgxMDY1XHUyMDEzMTA2OSkiLCJFbmt5XHUwMTZiICgxMDY5XHUyMDEzMTA3NCkiLCJTaFx1MDE0ZGhvICgx''@;'; put 'put ''MDc0XHUyMDEzMTA3NykiLCJTaFx1MDE0ZHJ5YWt1ICgxMDc3XHUyMDEzMTA4MSkiLCJFaWhcdTAxNGQgKDEwODFcdTIwMTMxMDg0KSIsIlx1MDE0Y3Rva3UgKDEwODRcdTIwMTMxMDg3KSIsIkthbmppICgxMDg3XHUyMDEzMTA5NCkiLCJLYWhcdTAxNGQgKDEwOTRcdTIwMTMxMDk2KSIsIkVp''@;'; put 'put ''Y2hcdTAxNGQgKDEwOTZcdTIwMTMxMDk3KSIsIkpcdTAxNGR0b2t1ICgxMDk3XHUyMDEzMTA5OSkiLCJLXHUwMTRkd2EgKDEwOTlcdTIwMTMxMTA0KSIsIkNoXHUwMTRkamkgKDExMDRcdTIwMTMxMTA2KSIsIkthc2hcdTAxNGQgKDExMDZcdTIwMTMxMTA4KSIsIlRlbm5pbiAoMTEwOFx1MjAx''@;'; put 'put ''MzExMTApIiwiVGVuLWVpICgxMTEwLTExMTMpIiwiRWlreVx1MDE2YiAoMTExM1x1MjAxMzExMTgpIiwiR2VuXHUyMDE5ZWkgKDExMThcdTIwMTMxMTIwKSIsIkhcdTAxNGRhbiAoMTEyMFx1MjAxMzExMjQpIiwiVGVuamkgKDExMjRcdTIwMTMxMTI2KSIsIkRhaWppICgxMTI2XHUyMDEzMTEz''@;'; put 'put ''MSkiLCJUZW5zaFx1MDE0ZCAoMTEzMVx1MjAxMzExMzIpIiwiQ2hcdTAxNGRzaFx1MDE0ZCAoMTEzMlx1MjAxMzExMzUpIiwiSFx1MDE0ZGVuICgxMTM1XHUyMDEzMTE0MSkiLCJFaWppICgxMTQxXHUyMDEzMTE0MikiLCJLXHUwMTRkamkgKDExNDJcdTIwMTMxMTQ0KSIsIlRlblx1MjAxOXlc''@;'; put 'put ''dTAxNGQgKDExNDRcdTIwMTMxMTQ1KSIsIkt5XHUwMTZiYW4gKDExNDVcdTIwMTMxMTUxKSIsIk5pbnBlaSAoMTE1MVx1MjAxMzExNTQpIiwiS3lcdTAxNmJqdSAoMTE1NFx1MjAxMzExNTYpIiwiSFx1MDE0ZGdlbiAoMTE1Nlx1MjAxMzExNTkpIiwiSGVpamkgKDExNTlcdTIwMTMxMTYwKSIs''@;'; put 'put ''IkVpcnlha3UgKDExNjBcdTIwMTMxMTYxKSIsIlx1MDE0Y2hvICgxMTYxXHUyMDEzMTE2MykiLCJDaFx1MDE0ZGthbiAoMTE2M1x1MjAxMzExNjUpIiwiRWltYW4gKDExNjVcdTIwMTMxMTY2KSIsIk5pblx1MjAxOWFuICgxMTY2XHUyMDEzMTE2OSkiLCJLYVx1MDE0ZCAoMTE2OVx1MjAxMzEx''@;'; put 'put ''NzEpIiwiU2hcdTAxNGRhbiAoMTE3MVx1MjAxMzExNzUpIiwiQW5nZW4gKDExNzVcdTIwMTMxMTc3KSIsIkppc2hcdTAxNGQgKDExNzdcdTIwMTMxMTgxKSIsIllcdTAxNGR3YSAoMTE4MVx1MjAxMzExODIpIiwiSnVlaSAoMTE4Mlx1MjAxMzExODQpIiwiR2Vucnlha3UgKDExODRcdTIwMTMx''@;'; put 'put ''MTg1KSIsIkJ1bmppICgxMTg1XHUyMDEzMTE5MCkiLCJLZW5reVx1MDE2YiAoMTE5MFx1MjAxMzExOTkpIiwiU2hcdTAxNGRqaSAoMTE5OVx1MjAxMzEyMDEpIiwiS2VubmluICgxMjAxXHUyMDEzMTIwNCkiLCJHZW5reVx1MDE2YiAoMTIwNFx1MjAxMzEyMDYpIiwiS2VuXHUyMDE5ZWkgKDEy''@;'; put 'put ''MDZcdTIwMTMxMjA3KSIsIkpcdTAxNGRnZW4gKDEyMDdcdTIwMTMxMjExKSIsIktlbnJ5YWt1ICgxMjExXHUyMDEzMTIxMykiLCJLZW5wXHUwMTRkICgxMjEzXHUyMDEzMTIxOSkiLCJKXHUwMTRka3lcdTAxNmIgKDEyMTlcdTIwMTMxMjIyKSIsIkpcdTAxNGRcdTAxNGQgKDEyMjJcdTIwMTMx''@;'; put 'put ''MjI0KSIsIkdlbm5pbiAoMTIyNFx1MjAxMzEyMjUpIiwiS2Fyb2t1ICgxMjI1XHUyMDEzMTIyNykiLCJBbnRlaSAoMTIyN1x1MjAxMzEyMjkpIiwiS2Fua2kgKDEyMjlcdTIwMTMxMjMyKSIsIkpcdTAxNGRlaSAoMTIzMlx1MjAxMzEyMzMpIiwiVGVucHVrdSAoMTIzM1x1MjAxMzEyMzQpIiwi''@;'; put 'put ''QnVucnlha3UgKDEyMzRcdTIwMTMxMjM1KSIsIkthdGVpICgxMjM1XHUyMDEzMTIzOCkiLCJSeWFrdW5pbiAoMTIzOFx1MjAxMzEyMzkpIiwiRW5cdTIwMTlcdTAxNGQgKDEyMzlcdTIwMTMxMjQwKSIsIk5pbmppICgxMjQwXHUyMDEzMTI0MykiLCJLYW5nZW4gKDEyNDNcdTIwMTMxMjQ3KSIs''@;'; put 'put ''IkhcdTAxNGRqaSAoMTI0N1x1MjAxMzEyNDkpIiwiS2VuY2hcdTAxNGQgKDEyNDlcdTIwMTMxMjU2KSIsIktcdTAxNGRnZW4gKDEyNTZcdTIwMTMxMjU3KSIsIlNoXHUwMTRka2EgKDEyNTdcdTIwMTMxMjU5KSIsIlNoXHUwMTRkZ2VuICgxMjU5XHUyMDEzMTI2MCkiLCJCdW5cdTIwMTlcdTAx''@;'; put 'put ''NGQgKDEyNjBcdTIwMTMxMjYxKSIsIktcdTAxNGRjaFx1MDE0ZCAoMTI2MVx1MjAxMzEyNjQpIiwiQnVuXHUyMDE5ZWkgKDEyNjRcdTIwMTMxMjc1KSIsIktlbmppICgxMjc1XHUyMDEzMTI3OCkiLCJLXHUwMTRkYW4gKDEyNzhcdTIwMTMxMjg4KSIsIlNoXHUwMTRkXHUwMTRkICgxMjg4XHUy''@;'; put 'put ''MDEzMTI5MykiLCJFaW5pbiAoMTI5M1x1MjAxMzEyOTkpIiwiU2hcdTAxNGRhbiAoMTI5OVx1MjAxMzEzMDIpIiwiS2VuZ2VuICgxMzAyXHUyMDEzMTMwMykiLCJLYWdlbiAoMTMwM1x1MjAxMzEzMDYpIiwiVG9rdWppICgxMzA2XHUyMDEzMTMwOCkiLCJFbmt5XHUwMTRkICgxMzA4XHUyMDEz''@;'; put 'put ''MTMxMSkiLCJcdTAxNGNjaFx1MDE0ZCAoMTMxMVx1MjAxMzEzMTIpIiwiU2hcdTAxNGR3YSAoMTMxMlx1MjAxMzEzMTcpIiwiQnVucFx1MDE0ZCAoMTMxN1x1MjAxMzEzMTkpIiwiR2VuXHUwMTRkICgxMzE5XHUyMDEzMTMyMSkiLCJHZW5rXHUwMTRkICgxMzIxXHUyMDEzMTMyNCkiLCJTaFx1''@;'; put 'put ''MDE0ZGNoXHUwMTZiICgxMzI0XHUyMDEzMTMyNikiLCJLYXJ5YWt1ICgxMzI2XHUyMDEzMTMyOSkiLCJHZW50b2t1ICgxMzI5XHUyMDEzMTMzMSkiLCJHZW5rXHUwMTRkICgxMzMxXHUyMDEzMTMzNCkiLCJLZW5tdSAoMTMzNFx1MjAxMzEzMzYpIiwiRW5nZW4gKDEzMzZcdTIwMTMxMzQwKSIs''@;'; put 'put ''IktcdTAxNGRrb2t1ICgxMzQwXHUyMDEzMTM0NikiLCJTaFx1MDE0ZGhlaSAoMTM0Nlx1MjAxMzEzNzApIiwiS2VudG9rdSAoMTM3MFx1MjAxMzEzNzIpIiwiQnVuY2hcdTAxNmIgKDEzNzJcdTIwMTMxMzc1KSIsIlRlbmp1ICgxMzc1XHUyMDEzMTM3OSkiLCJLXHUwMTRkcnlha3UgKDEzNzlc''@;'; put 'put ''dTIwMTMxMzgxKSIsIktcdTAxNGR3YSAoMTM4MVx1MjAxMzEzODQpIiwiR2VuY2hcdTAxNmIgKDEzODRcdTIwMTMxMzkyKSIsIk1laXRva3UgKDEzODRcdTIwMTMxMzg3KSIsIktha2VpICgxMzg3XHUyMDEzMTM4OSkiLCJLXHUwMTRkXHUwMTRkICgxMzg5XHUyMDEzMTM5MCkiLCJNZWl0b2t1''@;'; put 'put ''ICgxMzkwXHUyMDEzMTM5NCkiLCJcdTAxNGNlaSAoMTM5NFx1MjAxMzE0MjgpIiwiU2hcdTAxNGRjaFx1MDE0ZCAoMTQyOFx1MjAxMzE0MjkpIiwiRWlreVx1MDE0ZCAoMTQyOVx1MjAxMzE0NDEpIiwiS2FraXRzdSAoMTQ0MVx1MjAxMzE0NDQpIiwiQnVuXHUyMDE5YW4gKDE0NDRcdTIwMTMx''@;'; put 'put ''NDQ5KSIsIkhcdTAxNGR0b2t1ICgxNDQ5XHUyMDEzMTQ1MikiLCJLeVx1MDE0ZHRva3UgKDE0NTJcdTIwMTMxNDU1KSIsIktcdTAxNGRzaFx1MDE0ZCAoMTQ1NVx1MjAxMzE0NTcpIiwiQ2hcdTAxNGRyb2t1ICgxNDU3XHUyMDEzMTQ2MCkiLCJLYW5zaFx1MDE0ZCAoMTQ2MFx1MjAxMzE0NjYp''@;'; put 'put ''IiwiQnVuc2hcdTAxNGQgKDE0NjZcdTIwMTMxNDY3KSIsIlx1MDE0Y25pbiAoMTQ2N1x1MjAxMzE0NjkpIiwiQnVubWVpICgxNDY5XHUyMDEzMTQ4NykiLCJDaFx1MDE0ZGt5XHUwMTRkICgxNDg3XHUyMDEzMTQ4OSkiLCJFbnRva3UgKDE0ODlcdTIwMTMxNDkyKSIsIk1laVx1MDE0ZCAoMTQ5''@;'; put 'put ''Mlx1MjAxMzE1MDEpIiwiQnVua2kgKDE1MDFcdTIwMTMxNTA0KSIsIkVpc2hcdTAxNGQgKDE1MDRcdTIwMTMxNTIxKSIsIlRhaWVpICgxNTIxXHUyMDEzMTUyOCkiLCJLeVx1MDE0ZHJva3UgKDE1MjhcdTIwMTMxNTMyKSIsIlRlbmJ1biAoMTUzMlx1MjAxMzE1NTUpIiwiS1x1MDE0ZGppICgx''@;'; put 'put ''NTU1XHUyMDEzMTU1OCkiLCJFaXJva3UgKDE1NThcdTIwMTMxNTcwKSIsIkdlbmtpICgxNTcwXHUyMDEzMTU3MykiLCJUZW5zaFx1MDE0ZCAoMTU3M1x1MjAxMzE1OTIpIiwiQnVucm9rdSAoMTU5Mlx1MjAxMzE1OTYpIiwiS2VpY2hcdTAxNGQgKDE1OTZcdTIwMTMxNjE1KSIsIkdlbm5hICgx''@;'; put 'put ''NjE1XHUyMDEzMTYyNCkiLCJLYW5cdTIwMTllaSAoMTYyNFx1MjAxMzE2NDQpIiwiU2hcdTAxNGRobyAoMTY0NFx1MjAxMzE2NDgpIiwiS2VpYW4gKDE2NDhcdTIwMTMxNjUyKSIsIkpcdTAxNGRcdTAxNGQgKDE2NTJcdTIwMTMxNjU1KSIsIk1laXJla2kgKDE2NTVcdTIwMTMxNjU4KSIsIk1h''@;'; put 'put ''bmppICgxNjU4XHUyMDEzMTY2MSkiLCJLYW5idW4gKDE2NjFcdTIwMTMxNjczKSIsIkVucFx1MDE0ZCAoMTY3M1x1MjAxMzE2ODEpIiwiVGVubmEgKDE2ODFcdTIwMTMxNjg0KSIsIkpcdTAxNGRreVx1MDE0ZCAoMTY4NFx1MjAxMzE2ODgpIiwiR2Vucm9rdSAoMTY4OFx1MjAxMzE3MDQpIiwi''@;'; put 'put ''SFx1MDE0ZGVpICgxNzA0XHUyMDEzMTcxMSkiLCJTaFx1MDE0ZHRva3UgKDE3MTFcdTIwMTMxNzE2KSIsIkt5XHUwMTRkaFx1MDE0ZCAoMTcxNlx1MjAxMzE3MzYpIiwiR2VuYnVuICgxNzM2XHUyMDEzMTc0MSkiLCJLYW5wXHUwMTRkICgxNzQxXHUyMDEzMTc0NCkiLCJFbmt5XHUwMTRkICgx''@;'; put 'put ''NzQ0XHUyMDEzMTc0OCkiLCJLYW5cdTIwMTllbiAoMTc0OFx1MjAxMzE3NTEpIiwiSFx1MDE0ZHJla2kgKDE3NTFcdTIwMTMxNzY0KSIsIk1laXdhICgxNzY0XHUyMDEzMTc3MikiLCJBblx1MjAxOWVpICgxNzcyXHUyMDEzMTc4MSkiLCJUZW5tZWkgKDE3ODFcdTIwMTMxNzg5KSIsIkthbnNl''@;'; put 'put ''aSAoMTc4OVx1MjAxMzE4MDEpIiwiS3lcdTAxNGR3YSAoMTgwMVx1MjAxMzE4MDQpIiwiQnVua2EgKDE4MDRcdTIwMTMxODE4KSIsIkJ1bnNlaSAoMTgxOFx1MjAxMzE4MzApIiwiVGVucFx1MDE0ZCAoMTgzMFx1MjAxMzE4NDQpIiwiS1x1MDE0ZGthICgxODQ0XHUyMDEzMTg0OCkiLCJLYWVp''@;'; put 'put ''ICgxODQ4XHUyMDEzMTg1NCkiLCJBbnNlaSAoMTg1NFx1MjAxMzE4NjApIiwiTWFuXHUyMDE5ZW4gKDE4NjBcdTIwMTMxODYxKSIsIkJ1bmt5XHUwMTZiICgxODYxXHUyMDEzMTg2NCkiLCJHZW5qaSAoMTg2NFx1MjAxMzE4NjUpIiwiS2VpXHUwMTRkICgxODY1XHUyMDEzMTg2OCkiLCJNZWlq''@;'; put 'put ''aSIsIlRhaXNoXHUwMTRkIiwiU2hcdTAxNGR3YSIsIkhlaXNlaSJdLCJsb25nIjpbIlRhaWthICg2NDVcdTIwMTM2NTApIiwiSGFrdWNoaSAoNjUwXHUyMDEzNjcxKSIsIkhha3VoXHUwMTRkICg2NzJcdTIwMTM2ODYpIiwiU2h1Y2hcdTAxNGQgKDY4Nlx1MjAxMzcwMSkiLCJUYWloXHUwMTRk''@;'; put 'put ''ICg3MDFcdTIwMTM3MDQpIiwiS2VpdW4gKDcwNFx1MjAxMzcwOCkiLCJXYWRcdTAxNGQgKDcwOFx1MjAxMzcxNSkiLCJSZWlraSAoNzE1XHUyMDEzNzE3KSIsIllcdTAxNGRyXHUwMTRkICg3MTdcdTIwMTM3MjQpIiwiSmlua2kgKDcyNFx1MjAxMzcyOSkiLCJUZW5weVx1MDE0ZCAoNzI5XHUy''@;'; put 'put ''MDEzNzQ5KSIsIlRlbnB5XHUwMTRkLWthbXBcdTAxNGQgKDc0OS03NDkpIiwiVGVucHlcdTAxNGQtc2hcdTAxNGRoXHUwMTRkICg3NDktNzU3KSIsIlRlbnB5XHUwMTRkLWhcdTAxNGRqaSAoNzU3LTc2NSkiLCJUZW5weVx1MDE0ZC1qaW5nbyAoNzY1LTc2NykiLCJKaW5nby1rZWl1biAoNzY3''@;'; put 'put ''LTc3MCkiLCJIXHUwMTRka2kgKDc3MFx1MjAxMzc4MCkiLCJUZW4tXHUwMTRkICg3ODEtNzgyKSIsIkVucnlha3UgKDc4Mlx1MjAxMzgwNikiLCJEYWlkXHUwMTRkICg4MDZcdTIwMTM4MTApIiwiS1x1MDE0ZG5pbiAoODEwXHUyMDEzODI0KSIsIlRlbmNoXHUwMTRkICg4MjRcdTIwMTM4MzQp''@;'; put 'put ''IiwiSlx1MDE0ZHdhICg4MzRcdTIwMTM4NDgpIiwiS2FqXHUwMTRkICg4NDhcdTIwMTM4NTEpIiwiTmluanUgKDg1MVx1MjAxMzg1NCkiLCJTYWlrXHUwMTRkICg4NTRcdTIwMTM4NTcpIiwiVGVuLWFuICg4NTctODU5KSIsIkpcdTAxNGRnYW4gKDg1OVx1MjAxMzg3NykiLCJHYW5neVx1MDE0''@;'; put 'put ''ZCAoODc3XHUyMDEzODg1KSIsIk5pbm5hICg4ODVcdTIwMTM4ODkpIiwiS2FucHlcdTAxNGQgKDg4OVx1MjAxMzg5OCkiLCJTaFx1MDE0ZHRhaSAoODk4XHUyMDEzOTAxKSIsIkVuZ2kgKDkwMVx1MjAxMzkyMykiLCJFbmNoXHUwMTRkICg5MjNcdTIwMTM5MzEpIiwiSlx1MDE0ZGhlaSAoOTMx''@;'; put 'put ''XHUyMDEzOTM4KSIsIlRlbmd5XHUwMTRkICg5MzhcdTIwMTM5NDcpIiwiVGVucnlha3UgKDk0N1x1MjAxMzk1NykiLCJUZW50b2t1ICg5NTdcdTIwMTM5NjEpIiwiXHUwMTRjd2EgKDk2MVx1MjAxMzk2NCkiLCJLXHUwMTRkaFx1MDE0ZCAoOTY0XHUyMDEzOTY4KSIsIkFubmEgKDk2OFx1MjAx''@;'; put 'put ''Mzk3MCkiLCJUZW5yb2t1ICg5NzBcdTIwMTM5NzMpIiwiVGVuXHUyMDE5ZW4gKDk3M1x1MjAxMzk3NikiLCJKXHUwMTRkZ2VuICg5NzZcdTIwMTM5NzgpIiwiVGVuZ2VuICg5NzhcdTIwMTM5ODMpIiwiRWlrYW4gKDk4M1x1MjAxMzk4NSkiLCJLYW5uYSAoOTg1XHUyMDEzOTg3KSIsIkVpZW4g''@;'; put 'put ''KDk4N1x1MjAxMzk4OSkiLCJFaXNvICg5ODlcdTIwMTM5OTApIiwiU2hcdTAxNGRyeWFrdSAoOTkwXHUyMDEzOTk1KSIsIkNoXHUwMTRkdG9rdSAoOTk1XHUyMDEzOTk5KSIsIkNoXHUwMTRkaFx1MDE0ZCAoOTk5XHUyMDEzMTAwNCkiLCJLYW5rXHUwMTRkICgxMDA0XHUyMDEzMTAxMikiLCJD''@;'; put 'put ''aFx1MDE0ZHdhICgxMDEyXHUyMDEzMTAxNykiLCJLYW5uaW4gKDEwMTdcdTIwMTMxMDIxKSIsIkppYW4gKDEwMjFcdTIwMTMxMDI0KSIsIk1hbmp1ICgxMDI0XHUyMDEzMTAyOCkiLCJDaFx1MDE0ZGdlbiAoMTAyOFx1MjAxMzEwMzcpIiwiQ2hcdTAxNGRyeWFrdSAoMTAzN1x1MjAxMzEwNDAp''@;'; put 'put ''IiwiQ2hcdTAxNGRreVx1MDE2YiAoMTA0MFx1MjAxMzEwNDQpIiwiS2FudG9rdSAoMTA0NFx1MjAxMzEwNDYpIiwiRWlzaFx1MDE0ZCAoMTA0Nlx1MjAxMzEwNTMpIiwiVGVuZ2kgKDEwNTNcdTIwMTMxMDU4KSIsIktcdTAxNGRoZWkgKDEwNThcdTIwMTMxMDY1KSIsIkppcnlha3UgKDEwNjVc''@;'; put 'put ''dTIwMTMxMDY5KSIsIkVua3lcdTAxNmIgKDEwNjlcdTIwMTMxMDc0KSIsIlNoXHUwMTRkaG8gKDEwNzRcdTIwMTMxMDc3KSIsIlNoXHUwMTRkcnlha3UgKDEwNzdcdTIwMTMxMDgxKSIsIkVpaFx1MDE0ZCAoMTA4MVx1MjAxMzEwODQpIiwiXHUwMTRjdG9rdSAoMTA4NFx1MjAxMzEwODcpIiwi''@;'; put 'put ''S2FuamkgKDEwODdcdTIwMTMxMDk0KSIsIkthaFx1MDE0ZCAoMTA5NFx1MjAxMzEwOTYpIiwiRWljaFx1MDE0ZCAoMTA5Nlx1MjAxMzEwOTcpIiwiSlx1MDE0ZHRva3UgKDEwOTdcdTIwMTMxMDk5KSIsIktcdTAxNGR3YSAoMTA5OVx1MjAxMzExMDQpIiwiQ2hcdTAxNGRqaSAoMTEwNFx1MjAx''@;'; put 'put ''MzExMDYpIiwiS2FzaFx1MDE0ZCAoMTEwNlx1MjAxMzExMDgpIiwiVGVubmluICgxMTA4XHUyMDEzMTExMCkiLCJUZW4tZWkgKDExMTAtMTExMykiLCJFaWt5XHUwMTZiICgxMTEzXHUyMDEzMTExOCkiLCJHZW5cdTIwMTllaSAoMTExOFx1MjAxMzExMjApIiwiSFx1MDE0ZGFuICgxMTIwXHUy''@;'; put 'put ''MDEzMTEyNCkiLCJUZW5qaSAoMTEyNFx1MjAxMzExMjYpIiwiRGFpamkgKDExMjZcdTIwMTMxMTMxKSIsIlRlbnNoXHUwMTRkICgxMTMxXHUyMDEzMTEzMikiLCJDaFx1MDE0ZHNoXHUwMTRkICgxMTMyXHUyMDEzMTEzNSkiLCJIXHUwMTRkZW4gKDExMzVcdTIwMTMxMTQxKSIsIkVpamkgKDEx''@;'; put 'put ''NDFcdTIwMTMxMTQyKSIsIktcdTAxNGRqaSAoMTE0Mlx1MjAxMzExNDQpIiwiVGVuXHUyMDE5eVx1MDE0ZCAoMTE0NFx1MjAxMzExNDUpIiwiS3lcdTAxNmJhbiAoMTE0NVx1MjAxMzExNTEpIiwiTmlucGVpICgxMTUxXHUyMDEzMTE1NCkiLCJLeVx1MDE2Ymp1ICgxMTU0XHUyMDEzMTE1Niki''@;'; put 'put ''LCJIXHUwMTRkZ2VuICgxMTU2XHUyMDEzMTE1OSkiLCJIZWlqaSAoMTE1OVx1MjAxMzExNjApIiwiRWlyeWFrdSAoMTE2MFx1MjAxMzExNjEpIiwiXHUwMTRjaG8gKDExNjFcdTIwMTMxMTYzKSIsIkNoXHUwMTRka2FuICgxMTYzXHUyMDEzMTE2NSkiLCJFaW1hbiAoMTE2NVx1MjAxMzExNjYp''@;'; put 'put ''IiwiTmluXHUyMDE5YW4gKDExNjZcdTIwMTMxMTY5KSIsIkthXHUwMTRkICgxMTY5XHUyMDEzMTE3MSkiLCJTaFx1MDE0ZGFuICgxMTcxXHUyMDEzMTE3NSkiLCJBbmdlbiAoMTE3NVx1MjAxMzExNzcpIiwiSmlzaFx1MDE0ZCAoMTE3N1x1MjAxMzExODEpIiwiWVx1MDE0ZHdhICgxMTgxXHUy''@;'; put 'put ''MDEzMTE4MikiLCJKdWVpICgxMTgyXHUyMDEzMTE4NCkiLCJHZW5yeWFrdSAoMTE4NFx1MjAxMzExODUpIiwiQnVuamkgKDExODVcdTIwMTMxMTkwKSIsIktlbmt5XHUwMTZiICgxMTkwXHUyMDEzMTE5OSkiLCJTaFx1MDE0ZGppICgxMTk5XHUyMDEzMTIwMSkiLCJLZW5uaW4gKDEyMDFcdTIw''@;'; put 'put ''MTMxMjA0KSIsIkdlbmt5XHUwMTZiICgxMjA0XHUyMDEzMTIwNikiLCJLZW5cdTIwMTllaSAoMTIwNlx1MjAxMzEyMDcpIiwiSlx1MDE0ZGdlbiAoMTIwN1x1MjAxMzEyMTEpIiwiS2Vucnlha3UgKDEyMTFcdTIwMTMxMjEzKSIsIktlbnBcdTAxNGQgKDEyMTNcdTIwMTMxMjE5KSIsIkpcdTAx''@;'; put 'put ''NGRreVx1MDE2YiAoMTIxOVx1MjAxMzEyMjIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTIyMlx1MjAxMzEyMjQpIiwiR2VubmluICgxMjI0XHUyMDEzMTIyNSkiLCJLYXJva3UgKDEyMjVcdTIwMTMxMjI3KSIsIkFudGVpICgxMjI3XHUyMDEzMTIyOSkiLCJLYW5raSAoMTIyOVx1MjAxMzEyMzIpIiwi''@;'; put 'put ''Slx1MDE0ZGVpICgxMjMyXHUyMDEzMTIzMykiLCJUZW5wdWt1ICgxMjMzXHUyMDEzMTIzNCkiLCJCdW5yeWFrdSAoMTIzNFx1MjAxMzEyMzUpIiwiS2F0ZWkgKDEyMzVcdTIwMTMxMjM4KSIsIlJ5YWt1bmluICgxMjM4XHUyMDEzMTIzOSkiLCJFblx1MjAxOVx1MDE0ZCAoMTIzOVx1MjAxMzEy''@;'; put 'put ''NDApIiwiTmluamkgKDEyNDBcdTIwMTMxMjQzKSIsIkthbmdlbiAoMTI0M1x1MjAxMzEyNDcpIiwiSFx1MDE0ZGppICgxMjQ3XHUyMDEzMTI0OSkiLCJLZW5jaFx1MDE0ZCAoMTI0OVx1MjAxMzEyNTYpIiwiS1x1MDE0ZGdlbiAoMTI1Nlx1MjAxMzEyNTcpIiwiU2hcdTAxNGRrYSAoMTI1N1x1''@;'; put 'put ''MjAxMzEyNTkpIiwiU2hcdTAxNGRnZW4gKDEyNTlcdTIwMTMxMjYwKSIsIkJ1blx1MjAxOVx1MDE0ZCAoMTI2MFx1MjAxMzEyNjEpIiwiS1x1MDE0ZGNoXHUwMTRkICgxMjYxXHUyMDEzMTI2NCkiLCJCdW5cdTIwMTllaSAoMTI2NFx1MjAxMzEyNzUpIiwiS2VuamkgKDEyNzVcdTIwMTMxMjc4''@;'; put 'put ''KSIsIktcdTAxNGRhbiAoMTI3OFx1MjAxMzEyODgpIiwiU2hcdTAxNGRcdTAxNGQgKDEyODhcdTIwMTMxMjkzKSIsIkVpbmluICgxMjkzXHUyMDEzMTI5OSkiLCJTaFx1MDE0ZGFuICgxMjk5XHUyMDEzMTMwMikiLCJLZW5nZW4gKDEzMDJcdTIwMTMxMzAzKSIsIkthZ2VuICgxMzAzXHUyMDEz''@;'; put 'put ''MTMwNikiLCJUb2t1amkgKDEzMDZcdTIwMTMxMzA4KSIsIkVua3lcdTAxNGQgKDEzMDhcdTIwMTMxMzExKSIsIlx1MDE0Y2NoXHUwMTRkICgxMzExXHUyMDEzMTMxMikiLCJTaFx1MDE0ZHdhICgxMzEyXHUyMDEzMTMxNykiLCJCdW5wXHUwMTRkICgxMzE3XHUyMDEzMTMxOSkiLCJHZW5cdTAx''@;'; put 'put ''NGQgKDEzMTlcdTIwMTMxMzIxKSIsIkdlbmtcdTAxNGQgKDEzMjFcdTIwMTMxMzI0KSIsIlNoXHUwMTRkY2hcdTAxNmIgKDEzMjRcdTIwMTMxMzI2KSIsIkthcnlha3UgKDEzMjZcdTIwMTMxMzI5KSIsIkdlbnRva3UgKDEzMjlcdTIwMTMxMzMxKSIsIkdlbmtcdTAxNGQgKDEzMzFcdTIwMTMx''@;'; put 'put ''MzM0KSIsIktlbm11ICgxMzM0XHUyMDEzMTMzNikiLCJFbmdlbiAoMTMzNlx1MjAxMzEzNDApIiwiS1x1MDE0ZGtva3UgKDEzNDBcdTIwMTMxMzQ2KSIsIlNoXHUwMTRkaGVpICgxMzQ2XHUyMDEzMTM3MCkiLCJLZW50b2t1ICgxMzcwXHUyMDEzMTM3MikiLCJCdW5jaFx1MDE2YiAoMTM3Mlx1''@;'; put 'put ''MjAxMzEzNzUpIiwiVGVuanUgKDEzNzVcdTIwMTMxMzc5KSIsIktcdTAxNGRyeWFrdSAoMTM3OVx1MjAxMzEzODEpIiwiS1x1MDE0ZHdhICgxMzgxXHUyMDEzMTM4NCkiLCJHZW5jaFx1MDE2YiAoMTM4NFx1MjAxMzEzOTIpIiwiTWVpdG9rdSAoMTM4NFx1MjAxMzEzODcpIiwiS2FrZWkgKDEz''@;'; put 'put ''ODdcdTIwMTMxMzg5KSIsIktcdTAxNGRcdTAxNGQgKDEzODlcdTIwMTMxMzkwKSIsIk1laXRva3UgKDEzOTBcdTIwMTMxMzk0KSIsIlx1MDE0Y2VpICgxMzk0XHUyMDEzMTQyOCkiLCJTaFx1MDE0ZGNoXHUwMTRkICgxNDI4XHUyMDEzMTQyOSkiLCJFaWt5XHUwMTRkICgxNDI5XHUyMDEzMTQ0''@;'; put 'put ''MSkiLCJLYWtpdHN1ICgxNDQxXHUyMDEzMTQ0NCkiLCJCdW5cdTIwMTlhbiAoMTQ0NFx1MjAxMzE0NDkpIiwiSFx1MDE0ZHRva3UgKDE0NDlcdTIwMTMxNDUyKSIsIkt5XHUwMTRkdG9rdSAoMTQ1Mlx1MjAxMzE0NTUpIiwiS1x1MDE0ZHNoXHUwMTRkICgxNDU1XHUyMDEzMTQ1NykiLCJDaFx1''@;'; put 'put ''MDE0ZHJva3UgKDE0NTdcdTIwMTMxNDYwKSIsIkthbnNoXHUwMTRkICgxNDYwXHUyMDEzMTQ2NikiLCJCdW5zaFx1MDE0ZCAoMTQ2Nlx1MjAxMzE0NjcpIiwiXHUwMTRjbmluICgxNDY3XHUyMDEzMTQ2OSkiLCJCdW5tZWkgKDE0NjlcdTIwMTMxNDg3KSIsIkNoXHUwMTRka3lcdTAxNGQgKDE0''@;'; put 'put ''ODdcdTIwMTMxNDg5KSIsIkVudG9rdSAoMTQ4OVx1MjAxMzE0OTIpIiwiTWVpXHUwMTRkICgxNDkyXHUyMDEzMTUwMSkiLCJCdW5raSAoMTUwMVx1MjAxMzE1MDQpIiwiRWlzaFx1MDE0ZCAoMTUwNFx1MjAxMzE1MjEpIiwiVGFpZWkgKDE1MjFcdTIwMTMxNTI4KSIsIkt5XHUwMTRkcm9rdSAo''@;'; put 'put ''MTUyOFx1MjAxMzE1MzIpIiwiVGVuYnVuICgxNTMyXHUyMDEzMTU1NSkiLCJLXHUwMTRkamkgKDE1NTVcdTIwMTMxNTU4KSIsIkVpcm9rdSAoMTU1OFx1MjAxMzE1NzApIiwiR2Vua2kgKDE1NzBcdTIwMTMxNTczKSIsIlRlbnNoXHUwMTRkICgxNTczXHUyMDEzMTU5MikiLCJCdW5yb2t1ICgx''@;'; put 'put ''NTkyXHUyMDEzMTU5NikiLCJLZWljaFx1MDE0ZCAoMTU5Nlx1MjAxMzE2MTUpIiwiR2VubmEgKDE2MTVcdTIwMTMxNjI0KSIsIkthblx1MjAxOWVpICgxNjI0XHUyMDEzMTY0NCkiLCJTaFx1MDE0ZGhvICgxNjQ0XHUyMDEzMTY0OCkiLCJLZWlhbiAoMTY0OFx1MjAxMzE2NTIpIiwiSlx1MDE0''@;'; put 'put ''ZFx1MDE0ZCAoMTY1Mlx1MjAxMzE2NTUpIiwiTWVpcmVraSAoMTY1NVx1MjAxMzE2NTgpIiwiTWFuamkgKDE2NThcdTIwMTMxNjYxKSIsIkthbmJ1biAoMTY2MVx1MjAxMzE2NzMpIiwiRW5wXHUwMTRkICgxNjczXHUyMDEzMTY4MSkiLCJUZW5uYSAoMTY4MVx1MjAxMzE2ODQpIiwiSlx1MDE0''@;'; put 'put ''ZGt5XHUwMTRkICgxNjg0XHUyMDEzMTY4OCkiLCJHZW5yb2t1ICgxNjg4XHUyMDEzMTcwNCkiLCJIXHUwMTRkZWkgKDE3MDRcdTIwMTMxNzExKSIsIlNoXHUwMTRkdG9rdSAoMTcxMVx1MjAxMzE3MTYpIiwiS3lcdTAxNGRoXHUwMTRkICgxNzE2XHUyMDEzMTczNikiLCJHZW5idW4gKDE3MzZc''@;'; put 'put ''dTIwMTMxNzQxKSIsIkthbnBcdTAxNGQgKDE3NDFcdTIwMTMxNzQ0KSIsIkVua3lcdTAxNGQgKDE3NDRcdTIwMTMxNzQ4KSIsIkthblx1MjAxOWVuICgxNzQ4XHUyMDEzMTc1MSkiLCJIXHUwMTRkcmVraSAoMTc1MVx1MjAxMzE3NjQpIiwiTWVpd2EgKDE3NjRcdTIwMTMxNzcyKSIsIkFuXHUy''@;'; put 'put ''MDE5ZWkgKDE3NzJcdTIwMTMxNzgxKSIsIlRlbm1laSAoMTc4MVx1MjAxMzE3ODkpIiwiS2Fuc2VpICgxNzg5XHUyMDEzMTgwMSkiLCJLeVx1MDE0ZHdhICgxODAxXHUyMDEzMTgwNCkiLCJCdW5rYSAoMTgwNFx1MjAxMzE4MTgpIiwiQnVuc2VpICgxODE4XHUyMDEzMTgzMCkiLCJUZW5wXHUw''@;'; put 'put ''MTRkICgxODMwXHUyMDEzMTg0NCkiLCJLXHUwMTRka2EgKDE4NDRcdTIwMTMxODQ4KSIsIkthZWkgKDE4NDhcdTIwMTMxODU0KSIsIkFuc2VpICgxODU0XHUyMDEzMTg2MCkiLCJNYW5cdTIwMTllbiAoMTg2MFx1MjAxMzE4NjEpIiwiQnVua3lcdTAxNmIgKDE4NjFcdTIwMTMxODY0KSIsIkdl''@;'; put 'put ''bmppICgxODY0XHUyMDEzMTg2NSkiLCJLZWlcdTAxNGQgKDE4NjVcdTIwMTMxODY4KSIsIk1laWppIiwiVGFpc2hcdTAxNGQiLCJTaFx1MDE0ZHdhIiwiSGVpc2VpIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJwZXJzaWFuIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsi''@;'; put 'put ''MSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRleSIsIkJhaG1hbiIsIkVzZmFu''@;'; put 'put ''ZCJdLCJsb25nIjpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRleSIsIkJhaG1hbiIsIkVzZmFuZCJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwi''@;'; put 'put ''UyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQVAiXSwic2hv''@;'; put 'put ''cnQiOlsiQVAiXSwibG9uZyI6WyJBUCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwicm9jIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sInNob3J0IjpbIkphbiIsIkZlYiIsIk1hciIs''@;'; put 'put ''IkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRl''@;'; put 'put ''Y2VtYmVyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2Rh''@;'; put 'put ''eSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJCZWZvcmUgUi5PLkMuIiwiTWluZ3VvIl0sInNob3J0IjpbIkJlZm9yZSBSLk8uQy4iLCJNaW5ndW8iXSwibG9uZyI6WyJCZWZvcmUgUi5PLkMuIiwiTWluZ3VvIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJw''@;'; put 'put ''bSI6IlBNIn19fX0sIm51bWJlciI6eyJudSI6WyJsYXRuIl0sInBhdHRlcm5zIjp7ImRlY2ltYWwiOnsicG9zaXRpdmVQYXR0ZXJuIjoie251bWJlcn0iLCJuZWdhdGl2ZVBhdHRlcm4iOiJ7bWludXNTaWdufXtudW1iZXJ9In0sImN1cnJlbmN5Ijp7InBvc2l0aXZlUGF0dGVybiI6IntjdXJy''@;'; put 'put ''ZW5jeX17bnVtYmVyfSIsIm5lZ2F0aXZlUGF0dGVybiI6InttaW51c1NpZ259e2N1cnJlbmN5fXtudW1iZXJ9In0sInBlcmNlbnQiOnsicG9zaXRpdmVQYXR0ZXJuIjoie251bWJlcn17cGVyY2VudFNpZ259IiwibmVnYXRpdmVQYXR0ZXJuIjoie21pbnVzU2lnbn17bnVtYmVyfXtwZXJjZW50''@;'; put 'put ''U2lnbn0ifX0sInN5bWJvbHMiOnsibGF0biI6eyJkZWNpbWFsIjoiLiIsImdyb3VwIjoiLCIsIm5hbiI6Ik5hTiIsInBsdXNTaWduIjoiKyIsIm1pbnVzU2lnbiI6Ii0iLCJwZXJjZW50U2lnbiI6IiUiLCJpbmZpbml0eSI6Ilx1MjIxZSJ9fSwiY3VycmVuY2llcyI6eyJBVUQiOiJBJCIsIkJS''@;'; put 'put ''TCI6IlIkIiwiQ0FEIjoiQ0EkIiwiQ05ZIjoiQ05ceGE1IiwiRVVSIjoiXHUyMGFjIiwiR0JQIjoiXHhhMyIsIkhLRCI6IkhLJCIsIklMUyI6Ilx1MjBhYSIsIklOUiI6Ilx1MjBiOSIsIkpQWSI6Ilx4YTUiLCJLUlciOiJcdTIwYTkiLCJNWE4iOiJNWCQiLCJOWkQiOiJOWiQiLCJUV0QiOiJO''@;'; put 'put ''VCQiLCJVU0QiOiIkIiwiVk5EIjoiXHUyMGFiIiwiWEFGIjoiRkNGQSIsIlhDRCI6IkVDJCIsIlhPRiI6IkNGQSIsIlhQRiI6IkNGUEYifX19Jyl9fSxjPT57dmFyIGw9bj0+YyhjLnM9bik7bCgyNDA1MCksbCg5NjkzNSl9XSk7'';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=runtime.402fc3cfbc7e1bd4-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlLHM9e30scD17fTtmdW5jdGlvbiByKGUpe3ZhciBhPXBbZV07aWYodm9pZCAwIT09YSlyZXR1cm4gYS5leHBvcnRzO3ZhciB0PXBbZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBzW2VdLmNhbGwodC5leHBvcnRzLHQsdC5leHBv''@;'; put 'put ''cnRzLHIpLHQubG9hZGVkPSEwLHQuZXhwb3J0c31yLm09cyxlPVtdLHIuTz0oYSx0LG8sbCk9PntpZighdCl7dmFyIGM9MS8wO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe2Zvcih2YXJbdCxvLGxdPWVbbl0sZD0hMCxmPTA7Zjx0Lmxlbmd0aDtmKyspKCExJmx8fGM+PWwpJiZPYmplY3Qua2V5''@;'; put 'put ''cyhyLk8pLmV2ZXJ5KF89PnIuT1tfXSh0W2ZdKSk/dC5zcGxpY2UoZi0tLDEpOihkPSExLGw8YyYmKGM9bCkpO2lmKGQpe2Uuc3BsaWNlKG4tLSwxKTt2YXIgdT1vKCk7dm9pZCAwIT09dSYmKGE9dSl9fXJldHVybiBhfWw9bHx8MDtmb3IodmFyIG49ZS5sZW5ndGg7bj4wJiZlW24tMV1bMl0+''@;'; put 'put ''bDtuLS0pZVtuXT1lW24tMV07ZVtuXT1bdCxvLGxdfSxyLm49ZT0+e3ZhciBhPWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiByLmQoYSx7YX0pLGF9LHIuZD0oZSxhKT0+e2Zvcih2YXIgdCBpbiBhKXIubyhhLHQpJiYhci5vKGUsdCkmJk9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OmFbdF19KX0sci51PWU9PmUrIi4yNjg5NmQ5M2UwNTZkY2I5LmpzIixyLm89KGUsYSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGEpLHIucj1lPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmlu''@;'; put 'put ''Z1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sci5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10p''@;'; put 'put ''LGUpLCgoKT0+e3ZhciBlO3IudHQ9KCk9Pih2b2lkIDA9PT1lJiYoZT17Y3JlYXRlU2NyaXB0VVJMOmE9PmF9LHR5cGVvZiB0cnVzdGVkVHlwZXM8InUiJiZ0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5JiYoZT10cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI2J1bmRsZXIiLGUp''@;'; put 'put ''KSksZSl9KSgpLHIudHU9ZT0+ci50dCgpLmNyZWF0ZVNjcmlwdFVSTChlKSxyLnA9IiIsKCgpPT57ci5iPWRvY3VtZW50LmJhc2VVUkl8fHNlbGYubG9jYXRpb24uaHJlZjt2YXIgZT17MTIxOjB9O3IuTy5qPW89PjA9PT1lW29dO3ZhciBhPShvLGwpPT57dmFyIGYsdSxbbixjLGRdPWwsaT0w''@;'; put 'put ''O2lmKG4uc29tZShiPT4wIT09ZVtiXSkpe2ZvcihmIGluIGMpci5vKGMsZikmJihyLm1bZl09Y1tmXSk7aWYoZCl2YXIgdj1kKHIpfWZvcihvJiZvKGwpO2k8bi5sZW5ndGg7aSsrKXIubyhlLHU9bltpXSkmJmVbdV0mJmVbdV1bMF0oKSxlW3VdPTA7cmV0dXJuIHIuTyh2KX0sdD1zZWxmLndl''@;'; put 'put ''YnBhY2tDaHVua2RhdGFjb250cm9sbGVyPXNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXJ8fFtdO3QuZm9yRWFjaChhLmJpbmQobnVsbCwwKSksdC5wdXNoPWEuYmluZChudWxsLHQucHVzaC5iaW5kKHQpKX0pKCl9KSgpOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=scripts.f418d7e71dbfd309-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''IWZ1bmN0aW9uKEMsUCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZ0eXBlb2YgbW9kdWxlPCJ1Ij9QKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLFApOlAoKEM9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRo''@;'; put 'put ''aXM6Q3x8c2VsZikubWFya2VkPXt9KX0odGhpcyxmdW5jdGlvbihDKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUChhLGkpe2Zvcih2YXIgdD0wO3Q8aS5sZW5ndGg7dCsrKXt2YXIgdT1pW3RdO3UuZW51bWVyYWJsZT11LmVudW1lcmFibGV8fCExLHUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJp''@;'; put 'put ''biB1JiYodS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsInN5bWJvbCI9PXR5cGVvZihlPWZ1bmN0aW9uKHIsbil7aWYoIm9iamVjdCIhPXR5cGVvZiByfHxudWxsPT09cilyZXR1cm4gcjt2YXIgcz1yW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwPT09cylyZXR1''@;'; put 'put ''cm4gU3RyaW5nKHIpO2lmKCJvYmplY3QiIT10eXBlb2Yocz1zLmNhbGwociwic3RyaW5nIikpKXJldHVybiBzO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9KGU9dS5rZXkpKT9lOlN0cmluZyhlKSx1KX12YXIgZX1m''@;'; put 'put ''dW5jdGlvbiB2KCl7cmV0dXJuKHY9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihhKXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgdCx1PWFyZ3VtZW50c1tpXTtmb3IodCBpbiB1KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkuY2FsbCh1LHQpJiYoYVt0XT11W3RdKX1yZXR1cm4gYX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBKKGEsaSl7KG51bGw9PWl8fGk+YS5sZW5ndGgpJiYoaT1hLmxlbmd0aCk7Zm9yKHZhciB0PTAsdT1uZXcgQXJyYXkoaSk7dDxpO3QrKyl1W3RdPWFbdF07cmV0dXJuIHV9''@;'; put 'put ''ZnVuY3Rpb24gVShhLGkpe3ZhciB0LHU9dHlwZW9mIFN5bWJvbDwidSImJmFbU3ltYm9sLml0ZXJhdG9yXXx8YVsiQEBpdGVyYXRvciJdO2lmKHUpcmV0dXJuKHU9dS5jYWxsKGEpKS5uZXh0LmJpbmQodSk7aWYoQXJyYXkuaXNBcnJheShhKXx8KHU9ZnVuY3Rpb24oZSxyKXt2YXIgbjtpZihl''@;'; put 'put ''KXJldHVybiJzdHJpbmciPT10eXBlb2YgZT9KKGUscik6Ik1hcCI9PT0obj0iT2JqZWN0Ij09PShuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKSkmJmUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5uYW1lOm4pfHwiU2V0Ij09PW4/QXJyYXkuZnJvbShl''@;'; put 'put ''KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP0ooZSxyKTp2b2lkIDB9KGEpKXx8aSYmYSYmIm51bWJlciI9PXR5cGVvZiBhLmxlbmd0aClyZXR1cm4gdSYmKGE9dSksdD0wLGZ1bmN0aW9uKCl7cmV0dXJuIHQ+PWEu''@;'; put 'put ''bGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTphW3QrK119fTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZl''@;'; put 'put ''IGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG9lPTA7ZnVuY3Rpb24gSyhhKXtyZXR1cm4iX19wcml2YXRlXyIrb2UrKysiXyIrYX1mdW5jdGlvbiBHKGEsaSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsaSkpcmV0dXJuIGE7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHVzZSBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpfWZ1bmN0aW9uIFEoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIs''@;'; put 'put ''aGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51''@;'; put 'put ''bGwseGh0bWw6ITF9fWZ1bmN0aW9uIFcoYSl7Qy5kZWZhdWx0cz1hfWZ1bmN0aW9uIFkoYSl7cmV0dXJuIGNlW2FdfUMuZGVmYXVsdHM9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhp''@;'; put 'put ''Z2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxs''@;'; put 'put ''LHhodG1sOiExfTt2YXIgZWU9L1smPD4iJ10vLGxlPW5ldyBSZWdFeHAoZWUuc291cmNlLCJnIiksdGU9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLERlPW5ldyBSZWdFeHAodGUuc291cmNlLCJnIiksY2U9eyImIjoiJmFtcDsiLCI8IjoiJmx0''@;'; put 'put ''OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9O2Z1bmN0aW9uIHkoYSxpKXtpZihpKXtpZihlZS50ZXN0KGEpKXJldHVybiBhLnJlcGxhY2UobGUsWSl9ZWxzZSBpZih0ZS50ZXN0KGEpKXJldHVybiBhLnJlcGxhY2UoRGUsWSk7cmV0dXJuIGF9dmFyIHBlPS8mKCMoPzpc''@;'; put 'put ''ZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2dpO2Z1bmN0aW9uIHVlKGEpe3JldHVybiBhLnJlcGxhY2UocGUsZnVuY3Rpb24oaSx0KXtyZXR1cm4iY29sb24iPT09KHQ9dC50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09dC5jaGFyQXQoMCk/IngiPT09dC5jaGFyQXQoMSk/U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0LnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK3Quc3Vic3RyaW5nKDEpKToiIn0pfXZhciBoZT0vKF58W15cW10pXF4vZztmdW5jdGlvbiBFKGEsaSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/YTphLnNvdXJjZSxpPWl8fCIi''@;'; put 'put ''O3ZhciB0PXtyZXBsYWNlOmZ1bmN0aW9uKHUsZSl7cmV0dXJuIGU9KGU9ZS5zb3VyY2V8fGUpLnJlcGxhY2UoaGUsIiQxIiksYT1hLnJlcGxhY2UodSxlKSx0fSxnZXRSZWdleDpmdW5jdGlvbigpe3JldHVybiBuZXcgUmVnRXhwKGEsaSl9fTtyZXR1cm4gdH12YXIgZ2U9L1teXHc6XS9nLGZl''@;'; put 'put ''PS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7ZnVuY3Rpb24gbmUoYSxpLHQpe2lmKGEpe3RyeXt1PWRlY29kZVVSSUNvbXBvbmVudCh1ZSh0KSkucmVwbGFjZShnZSwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09dS5pbmRleE9mKCJqYXZhc2NyaXB0''@;'; put 'put ''OiIpfHwwPT09dS5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09PXUuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH12YXIgdTtpJiYhZmUudGVzdCh0KSYmKGE9dCxNWyIgIisodT1pKV18fChNWyIgIit1XT1GZS50ZXN0KHUpP3UrIi8iOkgodSwiLyIsITApKSxpPS0xPT09KHU9TVsiICIr''@;'; put 'put ''dV0pLmluZGV4T2YoIjoiKSx0PSIvLyI9PT1hLnN1YnN0cmluZygwLDIpP2k/YTp1LnJlcGxhY2UoZGUsIiQxIikrYToiLyI9PT1hLmNoYXJBdCgwKT9pP2E6dS5yZXBsYWNlKEFlLCIkMSIpK2E6dSthKTt0cnl7dD1lbmNvZGVVUkkodCkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1''@;'; put 'put ''cm4gbnVsbH1yZXR1cm4gdH12YXIgTT17fSxGZT0vXlteOl0rOlwvKlteL10qJC8sZGU9L14oW146XSs6KVtcc1xTXSokLyxBZT0vXihbXjpdKzpcLypbXi9dKilbXHNcU10qJC8sST17ZXhlYzpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHJlKGEsaSl7dmFyIHQ9YS5yZXBsYWNlKC9cfC9nLGZ1''@;'; put 'put ''bmN0aW9uKGUscixuKXtmb3IodmFyIHM9ITEscD1yOzA8PS0tcCYmIlxcIj09PW5bcF07KXM9IXM7cmV0dXJuIHM/InwiOiIgfCJ9KS5zcGxpdCgvIFx8LyksdT0wO2lmKHRbMF0udHJpbSgpfHx0LnNoaWZ0KCksMDx0Lmxlbmd0aCYmIXRbdC5sZW5ndGgtMV0udHJpbSgpJiZ0LnBvcCgpLHQu''@;'; put 'put ''bGVuZ3RoPmkpdC5zcGxpY2UoaSk7ZWxzZSBmb3IoO3QubGVuZ3RoPGk7KXQucHVzaCgiIik7Zm9yKDt1PHQubGVuZ3RoO3UrKyl0W3VdPXRbdV0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVybiB0fWZ1bmN0aW9uIEgoYSxpLHQpe3ZhciB1PWEubGVuZ3RoO2lmKDA9PT11KXJl''@;'; put 'put ''dHVybiIiO2Zvcih2YXIgZT0wO2U8dTspe3ZhciByPWEuY2hhckF0KHUtZS0xKTtpZigociE9PWl8fHQpJiYocj09PWl8fCF0KSlicmVhaztlKyt9cmV0dXJuIGEuc2xpY2UoMCx1LWUpfWZ1bmN0aW9uIGllKGEscix0LHUpe3ZhciBlPXIuaHJlZixuPShyPXIudGl0bGU/eShyLnRpdGxlKTpu''@;'; put 'put ''dWxsLGFbMV0ucmVwbGFjZSgvXFwoW1xbXF1dKS9nLCIkMSIpKTtyZXR1cm4iISIhPT1hWzBdLmNoYXJBdCgwKT8odS5zdGF0ZS5pbkxpbms9ITAsYT17dHlwZToibGluayIscmF3OnQsaHJlZjplLHRpdGxlOnIsdGV4dDpuLHRva2Vuczp1LmlubGluZVRva2VucyhuKX0sdS5zdGF0ZS5pbkxp''@;'; put 'put ''bms9ITEsYSk6e3R5cGU6ImltYWdlIixyYXc6dCxocmVmOmUsdGl0bGU6cix0ZXh0Onkobil9fXZhciBqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSh0KXt0aGlzLm9wdGlvbnM9dHx8Qy5kZWZhdWx0c312YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5zcGFjZT1mdW5jdGlvbih0KXtpZigodD10''@;'; put 'put ''aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyh0KSkmJjA8dFswXS5sZW5ndGgpcmV0dXJue3R5cGU6InNwYWNlIixyYXc6dFswXX19LGkuY29kZT1mdW5jdGlvbihlKXt2YXIgdTtpZihlPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGUpKXJldHVybiB1PWVbMF0ucmVwbGFjZSgvXiB7''@;'; put 'put ''MSw0fS9nbSwiIikse3R5cGU6ImNvZGUiLHJhdzplWzBdLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/dTpIKHUsIlxuIil9fSxpLmZlbmNlcz1mdW5jdGlvbihzKXt2YXIgdSxlLHIsbjtpZihzPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4''@;'; put 'put ''ZWMocykpcmV0dXJuIGU9dT1zWzBdLHI9c1szXXx8IiIsZT1udWxsPT09KGU9dS5tYXRjaCgvXihccyspKD86YGBgKS8pKT9yOihuPWVbMV0sci5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24ocCl7dmFyIGc9cC5tYXRjaCgvXlxzKy8pO3JldHVybiBudWxsIT09ZyYmZ1swXS5sZW5ndGg+PW4u''@;'; put 'put ''bGVuZ3RoP3Auc2xpY2Uobi5sZW5ndGgpOnB9KS5qb2luKCJcbiIpKSx7dHlwZToiY29kZSIscmF3OnUsbGFuZzpzWzJdJiZzWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRleHQ6ZX19LGkuaGVhZGluZz1mdW5jdGlvbihyKXt2YXIgdSxlO2lm''@;'; put 'put ''KHI9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMocikpcmV0dXJuIHU9clsyXS50cmltKCksLyMkLy50ZXN0KHUpJiYoZT1IKHUsIiMiKSwhdGhpcy5vcHRpb25zLnBlZGFudGljJiZlJiYhLyAkLy50ZXN0KGUpfHwodT1lLnRyaW0oKSkpLHt0eXBlOiJoZWFkaW5nIixyYXc6clswXSxk''@;'; put 'put ''ZXB0aDpyWzFdLmxlbmd0aCx0ZXh0OnUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHUpfX0saS5ocj1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyh0KSlyZXR1cm57dHlwZToiaHIiLHJhdzp0WzBdfX0saS5ibG9ja3F1b3RlPWZ1bmN0aW9uKG4pe3ZhciB1LGUs''@;'; put 'put ''cjtpZihuPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKG4pKXJldHVybiB1PW5bMF0ucmVwbGFjZSgvXiAqPlsgXHRdPy9nbSwiIiksZT10aGlzLmxleGVyLnN0YXRlLnRvcCx0aGlzLmxleGVyLnN0YXRlLnRvcD0hMCxyPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnModSksdGhpcy5s''@;'; put 'put ''ZXhlci5zdGF0ZS50b3A9ZSx7dHlwZToiYmxvY2txdW90ZSIscmF3Om5bMF0sdG9rZW5zOnIsdGV4dDp1fX0saS5saXN0PWZ1bmN0aW9uKHQpe3ZhciB1PXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKHQpO2lmKHUpe3ZhciBlLHIsbixzLHAsZyxELG8sRixkLHgsaD0xPChrPXVbMV0udHJp''@;'; put 'put ''bSgpKS5sZW5ndGgsbD17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6aCxzdGFydDpoPytrLnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfSxrPWg/IlxcZHsxLDl9XFwiK2suc2xpY2UoLTEpOiJcXCIrazt0aGlzLm9wdGlvbnMucGVkYW50aWMmJihrPWg/azoiWyorLV0iKTtm''@;'; put 'put ''b3IodmFyIGI9bmV3IFJlZ0V4cCgiXiggezAsM30iK2srIikoKD86W1x0IF1bXlxcbl0qKT8oPzpcXG58JCkpIik7dCYmKHg9ITEsdT1iLmV4ZWModCkpJiYhdGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KHQpOyl7aWYodD10LnN1YnN0cmluZygoZT11WzBdKS5sZW5ndGgpLEQ9dVsyXS5zcGxp''@;'; put 'put ''dCgiXG4iLDEpWzBdLnJlcGxhY2UoL15cdCsvLGZ1bmN0aW9uKEwpe3JldHVybiIgIi5yZXBlYXQoMypMLmxlbmd0aCl9KSxvPXQuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KHM9MixkPUQudHJpbUxlZnQoKSk6KHM9dVsyXS5zZWFyY2goL1teIF0vKSxkPUQuc2xp''@;'; put 'put ''Y2Uocz00PHM/MTpzKSxzKz11WzFdLmxlbmd0aCkscD0hMSwhRCYmL14gKiQvLnRlc3QobykmJihlKz1vKyJcbiIsdD10LnN1YnN0cmluZyhvLmxlbmd0aCsxKSx4PSEwKSwheClmb3IodmFyIHc9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsifSg/OlsqKy1dfFxcZHsxLDl9''@;'; put 'put ''Wy4pXSkoKD86WyBcdF1bXlxcbl0qKT8oPzpcXG58JCkpIiksQT1uZXcgUmVnRXhwKCJeIHswLCIrTWF0aC5taW4oMyxzLTEpKyJ9KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSIpLEI9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsi''@;'; put 'put ''fSg/OmBgYHx+fn4pIiksXz1uZXcgUmVnRXhwKCJeIHswLCIrTWF0aC5taW4oMyxzLTEpKyJ9IyIpO3QmJihvPUY9dC5zcGxpdCgiXG4iLDEpWzBdLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKG89by5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikpLCFCLnRlc3Qobykp''@;'; put 'put ''JiYhXy50ZXN0KG8pJiYhdy50ZXN0KG8pJiYhQS50ZXN0KHQpOyl7aWYoby5zZWFyY2goL1teIF0vKT49c3x8IW8udHJpbSgpKWQrPSJcbiIrby5zbGljZShzKTtlbHNle2lmKHB8fDQ8PUQuc2VhcmNoKC9bXiBdLyl8fEIudGVzdChEKXx8Xy50ZXN0KEQpfHxBLnRlc3QoRCkpYnJlYWs7ZCs9''@;'; put 'put ''IlxuIitvfXB8fG8udHJpbSgpfHwocD0hMCksZSs9RisiXG4iLHQ9dC5zdWJzdHJpbmcoRi5sZW5ndGgrMSksRD1vLnNsaWNlKHMpfWwubG9vc2V8fChnP2wubG9vc2U9ITA6L1xuICpcbiAqJC8udGVzdChlKSYmKGc9ITApKSx0aGlzLm9wdGlvbnMuZ2ZtJiYocj0vXlxbWyB4WF1cXSAvLmV4''@;'; put 'put ''ZWMoZCkpJiYobj0iWyBdICIhPT1yWzBdLGQ9ZC5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSksbC5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzplLHRhc2s6ISFyLGNoZWNrZWQ6bixsb29zZTohMSx0ZXh0OmR9KSxsLnJhdys9ZX1sLml0ZW1zW2wuaXRlbXMubGVuZ3RoLTFd''@;'; put 'put ''LnJhdz1lLnRyaW1SaWdodCgpLGwuaXRlbXNbbC5pdGVtcy5sZW5ndGgtMV0udGV4dD1kLnRyaW1SaWdodCgpLGwucmF3PWwucmF3LnRyaW1SaWdodCgpO2Zvcih2YXIgeixhZT1sLml0ZW1zLmxlbmd0aCwkPTA7JDxhZTskKyspdGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsbC5pdGVtc1skXS50''@;'; put 'put ''b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhsLml0ZW1zWyRdLnRleHQsW10pLGwubG9vc2V8fCh6PTA8KHo9bC5pdGVtc1skXS50b2tlbnMuZmlsdGVyKGZ1bmN0aW9uKEwpe3JldHVybiJzcGFjZSI9PT1MLnR5cGV9KSkubGVuZ3RoJiZ6LnNvbWUoZnVuY3Rpb24oTCl7cmV0dXJuL1xu''@;'; put 'put ''Lipcbi8udGVzdChMLnJhdyl9KSxsLmxvb3NlPXopO2lmKGwubG9vc2UpZm9yKCQ9MDskPGFlOyQrKylsLml0ZW1zWyRdLmxvb3NlPSEwO3JldHVybiBsfX0saS5odG1sPWZ1bmN0aW9uKGUpe3ZhciB1O2lmKGU9dGhpcy5ydWxlcy5ibG9jay5odG1sLmV4ZWMoZSkpcmV0dXJuIHU9e3R5cGU6''@;'; put 'put ''Imh0bWwiLGJsb2NrOiEwLHJhdzplWzBdLHByZTohdGhpcy5vcHRpb25zLnNhbml0aXplciYmKCJwcmUiPT09ZVsxXXx8InNjcmlwdCI9PT1lWzFdfHwic3R5bGUiPT09ZVsxXSksdGV4dDplWzBdfSx0aGlzLm9wdGlvbnMuc2FuaXRpemUmJihlPXRoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhp''@;'; put 'put ''cy5vcHRpb25zLnNhbml0aXplcihlWzBdKTp5KGVbMF0pLHUudHlwZT0icGFyYWdyYXBoIix1LnRleHQ9ZSx1LnRva2Vucz10aGlzLmxleGVyLmlubGluZShlKSksdX0saS5kZWY9ZnVuY3Rpb24obil7dmFyIHUsZSxyO2lmKG49dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhuKSlyZXR1cm4g''@;'; put 'put ''dT1uWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxlPW5bMl0/blsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixyPW5bM10mJm5bM10uc3Vic3RyaW5nKDEsblszXS5sZW5ndGgtMSkucmVw''@;'; put 'put ''bGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx7dHlwZToiZGVmIix0YWc6dSxyYXc6blswXSxocmVmOmUsdGl0bGU6cn19LGkudGFibGU9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWModCkpe3ZhciB1PXt0eXBlOiJ0YWJsZSIsaGVhZGVy''@;'; put 'put ''OnJlKHRbMV0pLm1hcChmdW5jdGlvbihnKXtyZXR1cm57dGV4dDpnfX0pLGFsaWduOnRbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxyb3dzOnRbM10mJnRbM10udHJpbSgpP3RbM10ucmVwbGFjZSgvXG5bIFx0XSokLywiIikuc3BsaXQoIlxuIik6W119O2lm''@;'; put 'put ''KHUuaGVhZGVyLmxlbmd0aD09PXUuYWxpZ24ubGVuZ3RoKXt1LnJhdz10WzBdO2Zvcih2YXIgZSxyLG4scz11LmFsaWduLmxlbmd0aCxwPTA7cDxzO3ArKyl1LmFsaWduW3BdPS9eICotKzogKiQvLnRlc3QodS5hbGlnbltwXSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdCh1LmFsaWduW3Bd''@;'; put 'put ''KT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KHUuYWxpZ25bcF0pPyJsZWZ0IjpudWxsO2ZvcihzPXUucm93cy5sZW5ndGgscD0wO3A8cztwKyspdS5yb3dzW3BdPXJlKHUucm93c1twXSx1LmhlYWRlci5sZW5ndGgpLm1hcChmdW5jdGlvbihnKXtyZXR1cm57dGV4dDpnfX0pO2ZvcihzPXUu''@;'; put 'put ''aGVhZGVyLmxlbmd0aCxlPTA7ZTxzO2UrKyl1LmhlYWRlcltlXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUodS5oZWFkZXJbZV0udGV4dCk7Zm9yKHM9dS5yb3dzLmxlbmd0aCxlPTA7ZTxzO2UrKylmb3Iobj11LnJvd3NbZV0scj0wO3I8bi5sZW5ndGg7cisrKW5bcl0udG9rZW5zPXRoaXMu''@;'; put 'put ''bGV4ZXIuaW5saW5lKG5bcl0udGV4dCk7cmV0dXJuIHV9fX0saS5saGVhZGluZz1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyh0KSlyZXR1cm57dHlwZToiaGVhZGluZyIscmF3OnRbMF0sZGVwdGg6Ij0iPT09dFsyXS5jaGFyQXQoMCk/MToyLHRleHQ6''@;'; put 'put ''dFsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUodFsxXSl9fSxpLnBhcmFncmFwaD1mdW5jdGlvbihlKXt2YXIgdTtpZihlPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWMoZSkpcmV0dXJuIHU9IlxuIj09PWVbMV0uY2hhckF0KGVbMV0ubGVuZ3RoLTEpP2VbMV0uc2xpY2UoMCwt''@;'; put 'put ''MSk6ZVsxXSx7dHlwZToicGFyYWdyYXBoIixyYXc6ZVswXSx0ZXh0OnUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHUpfX0saS50ZXh0PWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWModCkpcmV0dXJue3R5cGU6InRleHQiLHJhdzp0WzBdLHRleHQ6dFswXSx0''@;'; put 'put ''b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUodFswXSl9fSxpLmVzY2FwZT1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKHQpKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzp0WzBdLHRleHQ6eSh0WzFdKX19LGkudGFnPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5y''@;'; put 'put ''dWxlcy5pbmxpbmUudGFnLmV4ZWModCkpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0''@;'; put 'put ''ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2Jk''@;'; put 'put ''fHNjcmlwdCkoXHN8PikvaS50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRleHQiOiJodG1sIixyYXc6dFswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVy''@;'; put 'put ''LnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKHRbMF0pOnkodFswXSk6dFswXX19LGkubGluaz1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLmxp''@;'; put 'put ''bmsuZXhlYyh0KSl7dmFyIHU9dFsyXS50cmltKCk7aWYoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmL148Ly50ZXN0KHUpKXtpZighLz4kLy50ZXN0KHUpKXJldHVybjt2YXIgcj1IKHUuc2xpY2UoMCwtMSksIlxcIik7aWYoKHUubGVuZ3RoLXIubGVuZ3RoKSUyPT0wKXJldHVybn1lbHNlLTE8''@;'; put 'put ''KHI9ZnVuY3Rpb24ocyxwKXtpZigtMSE9PXMuaW5kZXhPZihwWzFdKSlmb3IodmFyIGc9cy5sZW5ndGgsRD0wLG89MDtvPGc7bysrKWlmKCJcXCI9PT1zW29dKW8rKztlbHNlIGlmKHNbb109PT1wWzBdKUQrKztlbHNlIGlmKHNbb109PT1wWzFdJiYtLUQ8MClyZXR1cm4gbztyZXR1cm4tMX0o''@;'; put 'put ''dFsyXSwiKCkiKSkmJihuPSgwPT09dFswXS5pbmRleE9mKCIhIik/NTo0KSt0WzFdLmxlbmd0aCtyLHRbMl09dFsyXS5zdWJzdHJpbmcoMCxyKSx0WzBdPXRbMF0uc3Vic3RyaW5nKDAsbikudHJpbSgpLHRbM109IiIpO3I9dFsyXTt2YXIgZSxuPSIiO3JldHVybiB0aGlzLm9wdGlvbnMucGVk''@;'; put 'put ''YW50aWM/KGU9L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLy5leGVjKHIpKSYmKHI9ZVsxXSxuPWVbM10pOm49dFszXT90WzNdLnNsaWNlKDEsLTEpOiIiLHI9ci50cmltKCksaWUodCx7aHJlZjoocj0vXjwvLnRlc3Qocik/dGhpcy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50ZXN0''@;'; put 'put ''KHUpP3Iuc2xpY2UoMSk6ci5zbGljZSgxLC0xKTpyKSYmci5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRpdGxlOm4mJm4ucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKX0sdFswXSx0aGlzLmxleGVyKX19LGkucmVmbGluaz1mdW5jdGlv''@;'; put 'put ''bih0LHUpe3ZhciBlO2lmKGU9KGU9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKHQpKXx8dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWModCkpcmV0dXJuKHQ9dVsodD0oZVsyXXx8ZVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSkudG9Mb3dlckNhc2UoKV0pP2llKGUsdCxlWzBd''@;'; put 'put ''LHRoaXMubGV4ZXIpOnt0eXBlOiJ0ZXh0IixyYXc6dT1lWzBdLmNoYXJBdCgwKSx0ZXh0OnV9fSxpLmVtU3Ryb25nPWZ1bmN0aW9uKHQsdSxlKXt2b2lkIDA9PT1lJiYoZT0iIik7dmFyIHI9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWModCk7aWYociYmKCFyWzNdfHwh''@;'; put 'put ''ZS5tYXRjaCgvKD86WzAtOUEtWmEtelx4QUFceEIyXHhCM1x4QjVceEI5XHhCQVx4QkMtXHhCRVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3''@;'; put 'put ''Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MC1cdTA1ODhcdTA1RDAtXHUwNUVBXHUwNUVGLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NjAtXHUwNjY5XHUw''@;'; put 'put ''NjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDMC1cdTA3RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQw''@;'; put 'put ''LVx1MDg1OFx1MDg2MC1cdTA4NkFcdTA4NzAtXHUwODg3XHUwODg5LVx1MDg4RVx1MDhBMC1cdTA4QzlcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk2Ni1cdTA5NkZcdTA5NzEtXHUwOTgwXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5''@;'; put 'put ''QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RTYtXHUwOUYxXHUwOUY0LVx1MDlGOVx1MDlGQ1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEz''@;'; put 'put ''NVx1MEEzNlx1MEEzOFx1MEEzOVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTZGXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUx''@;'; put 'put ''XHUwQUU2LVx1MEFFRlx1MEFGOVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjY2LVx1MEI2Rlx1MEI3MS1cdTBCNzdcdTBCODNcdTBCODUt''@;'; put 'put ''XHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEJFNi1cdTBCRjJcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEt''@;'; put 'put ''XHUwQzM5XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM1RFx1MEM2MFx1MEM2MVx1MEM2Ni1cdTBDNkZcdTBDNzgtXHUwQzdFXHUwQzgwXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDRERcdTBDREVcdTBDRTBc''@;'; put 'put ''dTBDRTFcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDA0LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDU0LVx1MEQ1Nlx1MEQ1OC1cdTBENjFcdTBENjYtXHUwRDc4XHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIz''@;'; put 'put ''LVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBERTYtXHUwREVGXHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFNTAtXHUwRTU5XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg2LVx1MEU4QVx1MEU4Qy1cdTBFQTNcdTBFQTVcdTBFQTctXHUwRUIwXHUwRUIyXHUwRUIz''@;'; put 'put ''XHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEMC1cdTBFRDlcdTBFREMtXHUwRURGXHUwRjAwXHUwRjIwLVx1MEYzM1x1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFcdTEwM0YtXHUxMDQ5XHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEw''@;'; put 'put ''NjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTA5MC1cdTEwOTlcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUx''@;'; put 'put ''Mjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzY5LVx1MTM3Q1x1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y1''@;'; put 'put ''XHUxM0Y4LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcxMVx1MTcxRi1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUx''@;'; put 'put ''N0RDXHUxN0UwLVx1MTdFOVx1MTdGMC1cdTE3RjlcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3OFx1MTg4MC1cdTE4ODRcdTE4ODctXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NDYtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5''@;'; put 'put ''XHUxOUQwLVx1MTlEQVx1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQTgwLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Q1x1MUI1MC1cdTFCNTlcdTFCODMtXHUxQkEwXHUxQkFFLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNDAtXHUxQzQ5XHUx''@;'; put 'put ''QzRELVx1MUM3RFx1MUM4MC1cdTFDODhcdTFDOTAtXHUxQ0JBXHUxQ0JELVx1MUNCRlx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YzXHUxQ0Y1XHUxQ0Y2XHUxQ0ZBXHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAt''@;'; put 'put ''XHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3''@;'; put 'put ''MFx1MjA3MVx1MjA3NC1cdTIwNzlcdTIwN0YtXHUyMDg5XHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0''@;'; put 'put ''RVx1MjE1MC1cdTIxODlcdTI0NjAtXHUyNDlCXHUyNEVBLVx1MjRGRlx1Mjc3Ni1cdTI3OTNcdTJDMDAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM1x1MkNGRFx1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJE''@;'; put 'put ''QTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZc''@;'; put 'put ''dTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJGXHUzMTMxLVx1MzE4RVx1MzE5Mi1cdTMxOTVcdTMxQTAtXHUzMUJGXHUzMUYwLVx1MzFGRlx1MzIyMC1cdTMyMjlcdTMyNDgtXHUzMjRGXHUzMjUxLVx1MzI1Rlx1MzI4MC1cdTMyODlcdTMyQjEtXHUz''@;'; put 'put ''MkJGXHUzNDAwLVx1NERCRlx1NEUwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3Q0FcdUE3RDBcdUE3RDFcdUE3RDNc''@;'; put 'put ''dUE3RDUtXHVBN0Q5XHVBN0YyLVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTgzMC1cdUE4MzVcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThEMC1cdUE4RDlcdUE4RjItXHVBOEY3XHVBOEZCXHVBOEZEXHVBOEZFXHVBOTAwLVx1QTkyNVx1QTkz''@;'; put 'put ''MC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRi1cdUE5RDlcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlGRVx1QUEwMC1cdUFBMjhcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1''@;'; put 'put ''QUFCNVx1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY5''@;'; put 'put ''XHVBQjcwLVx1QUJFMlx1QUJGMC1cdUFCRjlcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVG''@;'; put 'put ''QjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYxMC1cdUZGMTlcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1c''@;'; put 'put ''dUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXXxcdUQ4MDBbXHVEQzAwLVx1REMwQlx1REMwRC1cdURDMjZcdURDMjgtXHVEQzNBXHVEQzNDXHVEQzNEXHVEQzNGLVx1REM0RFx1REM1MC1cdURDNURcdURDODAtXHVEQ0ZBXHVERDA3LVx1''@;'; put 'put ''REQzM1x1REQ0MC1cdURENzhcdUREOEFcdUREOEJcdURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REVFMS1cdURFRkJcdURGMDAtXHVERjIzXHVERjJELVx1REY0QVx1REY1MC1cdURGNzVcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4''@;'; put 'put ''MDFbXHVEQzAwLVx1REM5RFx1RENBMC1cdURDQTlcdURDQjAtXHVEQ0QzXHVEQ0Q4LVx1RENGQlx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERDcwLVx1REQ3QVx1REQ3Qy1cdUREOEFcdUREOEMtXHVERDkyXHVERDk0XHVERDk1XHVERDk3LVx1RERBMVx1RERBMy1cdUREQjFcdUREQjMt''@;'; put 'put ''XHVEREI5XHVEREJCXHVEREJDXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XHVERjgwLVx1REY4NVx1REY4Ny1cdURGQjBcdURGQjItXHVERkJBXXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVE''@;'; put 'put ''QzU1XHVEQzU4LVx1REM3Nlx1REM3OS1cdURDOUVcdURDQTctXHVEQ0FGXHVEQ0UwLVx1RENGMlx1RENGNFx1RENGNVx1RENGQi1cdUREMUJcdUREMjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCQy1cdUREQ0ZcdURERDItXHVERTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTkt''@;'; put 'put ''XHVERTM1XHVERTQwLVx1REU0OFx1REU2MC1cdURFN0VcdURFODAtXHVERTlGXHVERUMwLVx1REVDN1x1REVDOS1cdURFRTRcdURFRUItXHVERUVGXHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNTgtXHVERjcyXHVERjc4LVx1REY5MVx1REZBOS1cdURGQUZdfFx1RDgwM1tcdURDMDAt''@;'; put 'put ''XHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJcdURDRkEtXHVERDIzXHVERDMwLVx1REQzOVx1REU2MC1cdURFN0VcdURFODAtXHVERUE5XHVERUIwXHVERUIxXHVERjAwLVx1REYyN1x1REYzMC1cdURGNDVcdURGNTEtXHVERjU0XHVERjcwLVx1REY4MVx1REZCMC1cdURGQ0JcdURG''@;'; put 'put ''RTAtXHVERkY2XXxcdUQ4MDRbXHVEQzAzLVx1REMzN1x1REM1Mi1cdURDNkZcdURDNzFcdURDNzJcdURDNzVcdURDODMtXHVEQ0FGXHVEQ0QwLVx1RENFOFx1RENGMC1cdURDRjlcdUREMDMtXHVERDI2XHVERDM2LVx1REQzRlx1REQ0NFx1REQ0N1x1REQ1MC1cdURENzJcdURENzZcdUREODMt''@;'; put 'put ''XHVEREIyXHVEREMxLVx1RERDNFx1REREMC1cdUREREFcdURERENcdURERTEtXHVEREY0XHVERTAwLVx1REUxMVx1REUxMy1cdURFMkJcdURFM0ZcdURFNDBcdURFODAtXHVERTg2XHVERTg4XHVERThBLVx1REU4RFx1REU4Ri1cdURFOURcdURFOUYtXHVERUE4XHVERUIwLVx1REVERVx1REVG''@;'; put 'put ''MC1cdURFRjlcdURGMDUtXHVERjBDXHVERjBGXHVERjEwXHVERjEzLVx1REYyOFx1REYyQS1cdURGMzBcdURGMzJcdURGMzNcdURGMzUtXHVERjM5XHVERjNEXHVERjUwXHVERjVELVx1REY2MV18XHVEODA1W1x1REMwMC1cdURDMzRcdURDNDctXHVEQzRBXHVEQzUwLVx1REM1OVx1REM1Ri1c''@;'; put 'put ''dURDNjFcdURDODAtXHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVEQ0QwLVx1RENEOVx1REQ4MC1cdUREQUVcdURERDgtXHVERERCXHVERTAwLVx1REUyRlx1REU0NFx1REU1MC1cdURFNTlcdURFODAtXHVERUFBXHVERUI4XHVERUMwLVx1REVDOVx1REYwMC1cdURGMUFcdURGMzAtXHVERjNC''@;'; put 'put ''XHVERjQwLVx1REY0Nl18XHVEODA2W1x1REMwMC1cdURDMkJcdURDQTAtXHVEQ0YyXHVEQ0ZGLVx1REQwNlx1REQwOVx1REQwQy1cdUREMTNcdUREMTVcdUREMTZcdUREMTgtXHVERDJGXHVERDNGXHVERDQxXHVERDUwLVx1REQ1OVx1RERBMC1cdUREQTdcdUREQUEtXHVEREQwXHVEREUxXHVE''@;'; put 'put ''REUzXHVERTAwXHVERTBCLVx1REUzMlx1REUzQVx1REU1MFx1REU1Qy1cdURFODlcdURFOURcdURFQjAtXHVERUY4XXxcdUQ4MDdbXHVEQzAwLVx1REMwOFx1REMwQS1cdURDMkVcdURDNDBcdURDNTAtXHVEQzZDXHVEQzcyLVx1REM4Rlx1REQwMC1cdUREMDZcdUREMDhcdUREMDlcdUREMEIt''@;'; put 'put ''XHVERDMwXHVERDQ2XHVERDUwLVx1REQ1OVx1REQ2MC1cdURENjVcdURENjdcdURENjhcdURENkEtXHVERDg5XHVERDk4XHVEREEwLVx1RERBOVx1REVFMC1cdURFRjJcdURGMDJcdURGMDQtXHVERjEwXHVERjEyLVx1REYzM1x1REY1MC1cdURGNTlcdURGQjBcdURGQzAtXHVERkQ0XXxcdUQ4''@;'; put 'put ''MDhbXHVEQzAwLVx1REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAtXHVERDQzXXxcdUQ4MEJbXHVERjkwLVx1REZGMF18W1x1RDgwQ1x1RDgxQy1cdUQ4MjBcdUQ4MjJcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q1x1RDg2Ri1cdUQ4NzJcdUQ4NzQtXHVEODc5XHVEODgwLVx1RDg4''@;'; put 'put ''M1x1RDg4NS1cdUQ4ODddW1x1REMwMC1cdURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJGXHVEQzQxLVx1REM0Nl18XHVEODExW1x1REMwMC1cdURFNDZdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REU2MC1cdURFNjlcdURFNzAtXHVERUJFXHVERUMwLVx1REVDOVx1REVE''@;'; put 'put ''MC1cdURFRURcdURGMDAtXHVERjJGXHVERjQwLVx1REY0M1x1REY1MC1cdURGNTlcdURGNUItXHVERjYxXHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltcdURFNDAtXHVERTk2XHVERjAwLVx1REY0QVx1REY1MFx1REY5My1cdURGOUZcdURGRTBcdURGRTFcdURGRTNdfFx1RDgy''@;'; put 'put ''MVtcdURDMDAtXHVERkY3XXxcdUQ4MjNbXHVEQzAwLVx1RENENVx1REQwMC1cdUREMDhdfFx1RDgyQltcdURGRjAtXHVERkYzXHVERkY1LVx1REZGQlx1REZGRFx1REZGRV18XHVEODJDW1x1REMwMC1cdUREMjJcdUREMzJcdURENTAtXHVERDUyXHVERDU1XHVERDY0LVx1REQ2N1x1REQ3MC1c''@;'; put 'put ''dURFRkJdfFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4MC1cdURDODhcdURDOTAtXHVEQzk5XXxcdUQ4MzRbXHVERUMwLVx1REVEM1x1REVFMC1cdURFRjNcdURGNjAtXHVERjc4XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURDOUZcdURD''@;'; put 'put ''QTJcdURDQTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENCRC1cdURDQzNcdURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVERDFDXHVERDFFLVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1''@;'; put 'put ''REQ1MFx1REQ1Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFcdURFRkMtXHVERjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcwLVx1REY4OFx1REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQlx1REZD''@;'; put 'put ''RS1cdURGRkZdfFx1RDgzN1tcdURGMDAtXHVERjFFXHVERjI1LVx1REYyQV18XHVEODM4W1x1REMzMC1cdURDNkRcdUREMDAtXHVERDJDXHVERDM3LVx1REQzRFx1REQ0MC1cdURENDlcdURENEVcdURFOTAtXHVERUFEXHVERUMwLVx1REVFQlx1REVGMC1cdURFRjldfFx1RDgzOVtcdURDRDAt''@;'; put 'put ''XHVEQ0VCXHVEQ0YwLVx1RENGOVx1REZFMC1cdURGRTZcdURGRTgtXHVERkVCXHVERkVEXHVERkVFXHVERkYwLVx1REZGRV18XHVEODNBW1x1REMwMC1cdURDQzRcdURDQzctXHVEQ0NGXHVERDAwLVx1REQ0M1x1REQ0Qlx1REQ1MC1cdURENTldfFx1RDgzQltcdURDNzEtXHVEQ0FCXHVEQ0FE''@;'; put 'put ''LVx1RENBRlx1RENCMS1cdURDQjRcdUREMDEtXHVERDJEXHVERDJGLVx1REQzRFx1REUwMC1cdURFMDNcdURFMDUtXHVERTFGXHVERTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlcdURFM0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJcdURFNEQt''@;'; put 'put ''XHVERTRGXHVERTUxXHVERTUyXHVERTU0XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVERTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3LVx1REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVERTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4MC1cdURFODlcdURFOEItXHVERTlCXHVERUExLVx1''@;'; put 'put ''REVBM1x1REVBNS1cdURFQTlcdURFQUItXHVERUJCXXxcdUQ4M0NbXHVERDAwLVx1REQwQ118XHVEODNFW1x1REZGMC1cdURGRjldfFx1RDg2OVtcdURDMDAtXHVERURGXHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzlcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMx''@;'; put 'put ''RFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXHVERUIwLVx1REZGRl18XHVEODdBW1x1REMwMC1cdURGRTBdfFx1RDg3RVtcdURDMDAtXHVERTFEXXxcdUQ4ODRbXHVEQzAwLVx1REY0QVx1REY1MC1cdURGRkZdfFx1RDg4OFtcdURDMDAtXHVERkFGXSkvKSkmJighclsxXSYm''@;'; put 'put ''IXJbMl18fCFlfHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKGUpKSl7dmFyIG49clswXS5sZW5ndGgtMSxzPW4scD0wLGc9IioiPT09clswXVswXT90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGlt''@;'; put 'put ''VW5kO2ZvcihnLmxhc3RJbmRleD0wLHU9dS5zbGljZSgtMSp0Lmxlbmd0aCtuKTtudWxsIT0ocj1nLmV4ZWModSkpOyl7dmFyIEQsbz1yWzFdfHxyWzJdfHxyWzNdfHxyWzRdfHxyWzVdfHxyWzZdO2lmKG8paWYobz1vLmxlbmd0aCxyWzNdfHxyWzRdKXMrPW87ZWxzZSBpZigocls1XXx8cls2''@;'; put 'put ''XSkmJm4lMyYmISgobitvKSUzKSlwKz1vO2Vsc2UgaWYoISgwPChzLT1vKSkpcmV0dXJuIG89TWF0aC5taW4obyxvK3MrcCksRD10LnNsaWNlKDAsbityLmluZGV4K28rMSksTWF0aC5taW4obixvKSUyPyhvPUQuc2xpY2UoMSwtMSkse3R5cGU6ImVtIixyYXc6RCx0ZXh0Om8sdG9rZW5zOnRo''@;'; put 'put ''aXMubGV4ZXIuaW5saW5lVG9rZW5zKG8pfSk6KG89RC5zbGljZSgyLC0yKSx7dHlwZToic3Ryb25nIixyYXc6RCx0ZXh0Om8sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKG8pfSl9fX0saS5jb2Rlc3Bhbj1mdW5jdGlvbihuKXt2YXIgdSxlLHI7aWYobj10aGlzLnJ1bGVzLmlubGlu''@;'; put 'put ''ZS5jb2RlLmV4ZWMobikpcmV0dXJuIHI9blsyXS5yZXBsYWNlKC9cbi9nLCIgIiksdT0vW14gXS8udGVzdChyKSxlPS9eIC8udGVzdChyKSYmLyAkLy50ZXN0KHIpLHI9eShyPXUmJmU/ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKTpyLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzpuWzBdLHRl''@;'; put 'put ''eHQ6cn19LGkuYnI9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKHQpKXJldHVybnt0eXBlOiJiciIscmF3OnRbMF19fSxpLmRlbD1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHQpKXJldHVybnt0eXBlOiJkZWwiLHJhdzp0WzBd''@;'; put 'put ''LHRleHQ6dFsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnModFsyXSl9fSxpLmF1dG9saW5rPWZ1bmN0aW9uKHIsdSl7dmFyIGU7aWYocj10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKHIpKXJldHVybiB1PSJAIj09PXJbMl0/Im1haWx0bzoiKyhlPXkodGhpcy5vcHRp''@;'; put 'put ''b25zLm1hbmdsZT91KHJbMV0pOnJbMV0pKTplPXkoclsxXSkse3R5cGU6ImxpbmsiLHJhdzpyWzBdLHRleHQ6ZSxocmVmOnUsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmUsdGV4dDplfV19fSxpLnVybD1mdW5jdGlvbih0LHUpe3ZhciBlLHIsbixzO2lmKGU9dGhpcy5ydWxlcy5pbmxpbmUu''@;'; put 'put ''dXJsLmV4ZWModCkpe2lmKCJAIj09PWVbMl0pbj0ibWFpbHRvOiIrKHI9eSh0aGlzLm9wdGlvbnMubWFuZ2xlP3UoZVswXSk6ZVswXSkpO2Vsc2V7Zm9yKDtzPWVbMF0sZVswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoZVswXSlbMF0scyE9PWVbMF07KTtyPXkoZVswXSks''@;'; put 'put ''bj0id3d3LiI9PT1lWzFdPyJodHRwOi8vIitlWzBdOmVbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzplWzBdLHRleHQ6cixocmVmOm4sdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OnIsdGV4dDpyfV19fX0saS5pbmxpbmVUZXh0PWZ1bmN0aW9uKHQsdSl7aWYodD10aGlzLnJ1bGVzLmlubGlu''@;'; put 'put ''ZS50ZXh0LmV4ZWModCkpcmV0dXJuIHU9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIodFswXSk6eSh0WzBdKTp0WzBdOnkodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRz''@;'; put 'put ''P3UodFswXSk6dFswXSkse3R5cGU6InRleHQiLHJhdzp0WzBdLHRleHQ6dX19LGF9KCksZj17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkp''@;'; put 'put ''fH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9''@;'; put 'put ''KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRl''@;'; put 'put ''eHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4q''@;'; put 'put ''fCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xc''@;'; put 'put ''bnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/''@;'; put 'put ''OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6SSxsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhl''@;'; put 'put ''YWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8''@;'; put 'put ''XChbXigpXSpcKSkvfSxjPShmLmRlZj1FKGYuZGVmKS5yZXBsYWNlKCJsYWJlbCIsZi5fbGFiZWwpLnJlcGxhY2UoInRpdGxlIixmLl90aXRsZSkuZ2V0UmVnZXgoKSxmLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxmLmxpc3RJdGVtU3RhcnQ9RSgvXiggKikoYnVsbCkgKi8pLnJl''@;'; put 'put ''cGxhY2UoImJ1bGwiLGYuYnVsbGV0KS5nZXRSZWdleCgpLGYubGlzdD1FKGYubGlzdCkucmVwbGFjZSgvYnVsbC9nLGYuYnVsbGV0KS5yZXBsYWNlKCJociIsIlxcbisoPz1cXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpKSIpLnJlcGxhY2Uo''@;'; put 'put ''ImRlZiIsIlxcbisoPz0iK2YuZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksZi5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8''@;'; put 'put ''ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJh''@;'; put 'put ''bXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixmLl9jb21tZW50PS88IS0tKD8hLT8+KVtcc1xTXSo/KD86LS0+fCQpLyxmLmh0bWw9RShmLmh0bWwsImkiKS5yZXBsYWNlKCJjb21tZW50IixmLl9jb21tZW50''@;'; put 'put ''KS5yZXBsYWNlKCJ0YWciLGYuX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxmLmxoZWFkaW5nPUUoZi5saGVhZGluZykucmVwbGFjZSgv''@;'; put 'put ''YnVsbC9nLGYuYnVsbGV0KS5nZXRSZWdleCgpLGYucGFyYWdyYXBoPUUoZi5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJi''@;'; put 'put ''bG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxu''@;'; put 'put ''fC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsZi5fdGFnKS5nZXRSZWdleCgpLGYuYmxvY2txdW90ZT1FKGYuYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixmLnBhcmFncmFwaCkuZ2V0UmVnZXgoKSxmLm5vcm1hbD12KHt9LGYp''@;'; put 'put ''LGYuZ2ZtPXYoe30sZi5ub3JtYWwse3RhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHswLDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpcXHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0''@;'; put 'put ''bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn0pLGYuZ2ZtLnRhYmxlPUUoZi5nZm0udGFibGUpLnJlcGxhY2UoImhyIixmLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxc''@;'; put 'put ''bl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8''@;'; put 'put ''cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGYuX3RhZykuZ2V0UmVnZXgoKSxmLmdmbS5wYXJhZ3JhcGg9RShmLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixmLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIs''@;'; put 'put ''IiIpLnJlcGxhY2UoInRhYmxlIixmLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFb''@;'; put 'put ''LildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGYuX3RhZykuZ2V0UmVnZXgoKSxmLnBlZGFudGljPXYoe30sZi5ub3JtYWwse2h0bWw6RSgiXiAqKD86Y29tbWVu''@;'; put 'put ''dCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86XCJbXlwiXSpcInwnW14nXSonfFxcc1teJ1wiLz5cXHNdKikqPy8/PiAqKD86XFxuezIsfXxcXHMqJCkpIikucmVwbGFjZSgiY29tbWVudCIsZi5fY29tbWVudCkucmVwbGFj''@;'; put 'put ''ZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0Bd''@;'; put 'put ''KkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6SSxsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSsp''@;'; put 'put ''ICooPzpcbit8JCkvLHBhcmFncmFwaDpFKGYubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixmLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLGYubGhlYWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+Iiku''@;'; put 'put ''cmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfSkse2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5d''@;'; put 'put ''KnxlbWFpbCk+Lyx1cmw6SSx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNd''@;'; put 'put ''Kj9cXF1cXF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvLHJlZmxpbms6L14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLyxub2xpbms6L14hP1xbKHJlZilcXSg/OlxbXF0pPy8scmVmbGlua1NlYXJjaDoicmVmbGlua3xub2xpbmsoPyFcXCgp''@;'; put 'put ''IixlbVN0cm9uZzp7bERlbGltOi9eKD86XCorKD86KCg/IVwqKVtwdW5jdF0pfFteXHMqXSkpfF5fKyg/OigoPyFfKVtwdW5jdF0pfChbXlxzX10pKS8sckRlbGltQXN0Oi9eW15fKl0qP19fW15fKl0qP1wqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVwqKVtwdW5jdF0oXCorKSg/''@;'; put 'put ''PVtcc118JCl8W15wdW5jdFxzXShcKispKD8hXCopKD89W3B1bmN0XHNdfCQpfCg/IVwqKVtwdW5jdFxzXShcKispKD89W15wdW5jdFxzXSl8W1xzXShcKispKD8hXCopKD89W3B1bmN0XSl8KD8hXCopW3B1bmN0XShcKispKD8hXCopKD89W3B1bmN0XSl8W15wdW5jdFxzXShcKispKD89W15w''@;'; put 'put ''dW5jdFxzXSkvLHJEZWxpbVVuZDovXlteXypdKj9cKlwqW15fKl0qP19bXl8qXSo/KD89XCpcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xzXXwkKXxbXnB1bmN0XHNdKF8rKSg/IV8pKD89W3B1bmN0XHNdfCQpfCg/IV8pW3B1bmN0XHNdKF8rKSg/PVtecHVuY3Rcc10p''@;'; put 'put ''fFtcc10oXyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKS99LGNvZGU6L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxicjovXiggezIsfXxcXClcbig/IVxzKiQpLyxkZWw6SSx0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1c''@;'; put 'put ''bil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99KTtmdW5jdGlvbiBrZShhKXtyZXR1cm4gYS5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUy''@;'; put 'put ''MDEzIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9n''@;'; put 'put ''LCJcdTIwMjYiKX1mdW5jdGlvbiBzZShhKXtmb3IodmFyIGksdD0iIix1PWEubGVuZ3RoLGU9MDtlPHU7ZSsrKWk9YS5jaGFyQ29kZUF0KGUpLHQrPSImIyIrKGk9LjU8TWF0aC5yYW5kb20oKT8ieCIraS50b1N0cmluZygxNik6aSkrIjsiO3JldHVybiB0fWMuX3B1bmN0dWF0aW9uPSJcXHB7''@;'; put 'put ''UH0kKzw9PmBefH4iLGMucHVuY3R1YXRpb249RShjLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxjLmFueVB1''@;'; put 'put ''bmN0dWF0aW9uPS9cXFtwdW5jdF0vZyxjLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLGMuX2NvbW1lbnQ9RShmLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLGMuZW1TdHJvbmcubERlbGltPUUoYy5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBs''@;'; put 'put ''YWNlKC9wdW5jdC9nLGMuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGMuZW1TdHJvbmcuckRlbGltQXN0PUUoYy5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLmVtU3Ryb25nLnJEZWxpbVVuZD1FKGMuZW1TdHJv''@;'; put 'put ''bmcuckRlbGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5hbnlQdW5jdHVhdGlvbj1FKGMuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLl9lc2NhcGVzPUUoYy5f''@;'; put 'put ''ZXNjYXBlcywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLGMuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGMuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sYy5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1a''@;'; put 'put ''MC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxjLmF1dG9saW5rPUUoYy5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixjLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIixjLl9lbWFpbCku''@;'; put 'put ''Z2V0UmVnZXgoKSxjLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sYy50YWc9RShjLnRhZykucmVwbGFjZSgiY29tbWVudCIsYy5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRl''@;'; put 'put ''IixjLl9hdHRyaWJ1dGUpLmdldFJlZ2V4KCksYy5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sYy5faHJlZj0vPCg/OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLyxjLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoi''@;'; put 'put ''fCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLGMubGluaz1FKGMubGluaykucmVwbGFjZSgibGFiZWwiLGMuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixjLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsYy5fdGl0bGUpLmdldFJlZ2V4KCksYy5yZWZsaW5rPUUoYy5yZWZs''@;'; put 'put ''aW5rKS5yZXBsYWNlKCJsYWJlbCIsYy5fbGFiZWwpLnJlcGxhY2UoInJlZiIsZi5fbGFiZWwpLmdldFJlZ2V4KCksYy5ub2xpbms9RShjLm5vbGluaykucmVwbGFjZSgicmVmIixmLl9sYWJlbCkuZ2V0UmVnZXgoKSxjLnJlZmxpbmtTZWFyY2g9RShjLnJlZmxpbmtTZWFyY2gsImciKS5yZXBs''@;'; put 'put ''YWNlKCJyZWZsaW5rIixjLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsYy5ub2xpbmspLmdldFJlZ2V4KCksYy5ub3JtYWw9dih7fSxjKSxjLnBlZGFudGljPXYoe30sYy5ub3JtYWwse3N0cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8h''@;'; put 'put ''Xyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxl''@;'; put 'put ''bmRBc3Q6L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazpFKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixjLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOkUoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwi''@;'; put 'put ''LGMuX2xhYmVsKS5nZXRSZWdleCgpfSksYy5nZm09dih7fSxjLm5vcm1hbCx7ZXNjYXBlOkUoYy5lc2NhcGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10q''@;'; put 'put ''W2EtekEtWjAtOV0pKyg/IVstX10pLyx1cmw6L14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7''@;'; put 'put ''Kl8nIn4pXSsoPyEkKSkrLyxkZWw6L14ofn4/KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aq''@;'; put 'put ''fl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99KSxjLmdmbS51cmw9RShjLmdmbS51cmwsImkiKS5yZXBsYWNl''@;'; put 'put ''KCJlbWFpbCIsYy5nZm0uX2V4dGVuZGVkX2VtYWlsKS5nZXRSZWdleCgpLGMuYnJlYWtzPXYoe30sYy5nZm0se2JyOkUoYy5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6RShjLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2Uo''@;'; put 'put ''L1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX0pO3ZhciBTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1lfHxDLmRlZmF1bHRzLHRoaXMub3B0aW9ucy50b2tlbml6ZXI9dGhp''@;'; put 'put ''cy5vcHRpb25zLnRva2VuaXplcnx8bmV3IGosdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucywodGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcykuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiEx''@;'; put 'put ''LGluUmF3QmxvY2s6ITEsdG9wOiEwfSxlPXtibG9jazpmLm5vcm1hbCxpbmxpbmU6Yy5ub3JtYWx9LHRoaXMub3B0aW9ucy5wZWRhbnRpYz8oZS5ibG9jaz1mLnBlZGFudGljLGUuaW5saW5lPWMucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihlLmJsb2NrPWYuZ2ZtLGUuaW5saW5lPXRo''@;'; put 'put ''aXMub3B0aW9ucy5icmVha3M/Yy5icmVha3M6Yy5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWV9YS5sZXg9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbmV3IGEocikubGV4KGUpfSxhLmxleElubGluZT1mdW5jdGlvbihlLHIpe3JldHVybiBuZXcgYShyKS5pbmxpbmVUb2tlbnMoZSl9O3ZhciB0''@;'; put 'put ''LHU9YS5wcm90b3R5cGU7cmV0dXJuIHUubGV4PWZ1bmN0aW9uKGUpe3ZhciByO2ZvcihlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMoZSx0aGlzLnRva2Vucyk7cj10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKHIuc3JjLHIu''@;'; put 'put ''dG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9LHUuYmxvY2tUb2tlbnM9ZnVuY3Rpb24oZSxyKXt2YXIgbixzLHAsZyxEPXRoaXM7Zm9yKHZvaWQgMD09PXImJihyPVtdKSxlPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9lLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIi''@;'; put 'put ''KTplLnJlcGxhY2UoL14oICopKFx0KykvZ20sZnVuY3Rpb24oRixkLHgpe3JldHVybiBkKyIgICAgIi5yZXBlYXQoeC5sZW5ndGgpfSk7ZTspe3ZhciBvPWZ1bmN0aW9uKCl7aWYoRC5vcHRpb25zLmV4dGVuc2lvbnMmJkQub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZELm9wdGlvbnMuZXh0''@;'; put 'put ''ZW5zaW9ucy5ibG9jay5zb21lKGZ1bmN0aW9uKGwpe3JldHVybiEhKG49bC5jYWxsKHtsZXhlcjpEfSxlLHIpKSYmKGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksITApfSkpcmV0dXJuImNvbnRpbnVlIjtpZihuPUQudG9rZW5pemVyLnNwYWNlKGUpKXJldHVybiBlPWUu''@;'; put 'put ''c3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksMT09PW4ucmF3Lmxlbmd0aCYmMDxyLmxlbmd0aD9yW3IubGVuZ3RoLTFdLnJhdys9IlxuIjpyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUQudG9rZW5pemVyLmNvZGUoZSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwhKHM9clty''@;'; put 'put ''Lmxlbmd0aC0xXSl8fCJwYXJhZ3JhcGgiIT09cy50eXBlJiYidGV4dCIhPT1zLnR5cGU/ci5wdXNoKG4pOihzLnJhdys9IlxuIituLnJhdyxzLnRleHQrPSJcbiIrbi50ZXh0LEQuaW5saW5lUXVldWVbRC5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPXMudGV4dCksImNvbnRpbnVlIjtpZigo''@;'; put 'put ''bj1ELnRva2VuaXplci5mZW5jZXMoZSkpfHwobj1ELnRva2VuaXplci5oZWFkaW5nKGUpKXx8KG49RC50b2tlbml6ZXIuaHIoZSkpfHwobj1ELnRva2VuaXplci5ibG9ja3F1b3RlKGUpKXx8KG49RC50b2tlbml6ZXIubGlzdChlKSl8fChuPUQudG9rZW5pemVyLmh0bWwoZSkpKXJldHVybiBl''@;'; put 'put ''PWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci5kZWYoZSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwhKHM9cltyLmxlbmd0aC0xXSl8fCJwYXJhZ3JhcGgiIT09cy50eXBlJiYidGV4dCIhPT1zLnR5cGU/''@;'; put 'put ''RC50b2tlbnMubGlua3Nbbi50YWddfHwoRC50b2tlbnMubGlua3Nbbi50YWddPXtocmVmOm4uaHJlZix0aXRsZTpuLnRpdGxlfSk6KHMucmF3Kz0iXG4iK24ucmF3LHMudGV4dCs9IlxuIituLnJhdyxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1zLnRleHQpLCJj''@;'; put 'put ''b250aW51ZSI7aWYoKG49RC50b2tlbml6ZXIudGFibGUoZSkpfHwobj1ELnRva2VuaXplci5saGVhZGluZyhlKSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjt2YXIgRixkLHg7aWYocD1lLEQub3B0aW9ucy5leHRlbnNpb25zJiZELm9w''@;'; put 'put ''dGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrJiYoRj0xLzAsZD1lLnNsaWNlKDEpLEQub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmdW5jdGlvbihsKXsibnVtYmVyIj09dHlwZW9mKHg9bC5jYWxsKHtsZXhlcjp0aGlzfSxkKSkmJjA8PXgmJihGPU1hdGgubWluKEYs''@;'; put 'put ''eCkpfSksRjwxLzApJiYwPD1GJiYocD1lLnN1YnN0cmluZygwLEYrMSkpLEQuc3RhdGUudG9wJiYobj1ELnRva2VuaXplci5wYXJhZ3JhcGgocCkpKXJldHVybiBzPXJbci5sZW5ndGgtMV0sZyYmInBhcmFncmFwaCI9PT1zLnR5cGU/KHMucmF3Kz0iXG4iK24ucmF3LHMudGV4dCs9IlxuIitu''@;'; put 'put ''LnRleHQsRC5pbmxpbmVRdWV1ZS5wb3AoKSxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1zLnRleHQpOnIucHVzaChuKSxnPXAubGVuZ3RoIT09ZS5sZW5ndGgsZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLCJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci50''@;'; put 'put ''ZXh0KGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksKHM9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPSJcbiIrbi5yYXcscy50ZXh0Kz0iXG4iK24udGV4dCxELmlubGluZVF1ZXVlLnBvcCgpLEQuaW5saW5lUXVldWVbRC5pbmxpbmVRdWV1ZS5s''@;'; put 'put ''ZW5ndGgtMV0uc3JjPXMudGV4dCk6ci5wdXNoKG4pLCJjb250aW51ZSI7aWYoZSl7dmFyIGg9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYoRC5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihoKSwiYnJlYWsiO3Rocm93IG5ldyBFcnJvciho''@;'; put 'put ''KX19KCk7aWYoImNvbnRpbnVlIiE9PW8mJiJicmVhayI9PT1vKWJyZWFrfXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxyfSx1LmlubGluZT1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzplLHRva2VuczpyPXZvaWQgMD09PXI/W106cn0pLHJ9LHUuaW5s''@;'; put 'put ''aW5lVG9rZW5zPWZ1bmN0aW9uKGUscil7dmFyIG4scyxwLGcsRCxvLEY9dGhpcyxkPSh2b2lkIDA9PT1yJiYocj1bXSksZSk7aWYodGhpcy50b2tlbnMubGlua3Mpe3ZhciB4PU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZigwPHgubGVuZ3RoKWZvcig7bnVsbCE9KGc9dGhpcy50''@;'; put 'put ''b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhkKSk7KXguaW5jbHVkZXMoZ1swXS5zbGljZShnWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYoZD1kLnNsaWNlKDAsZy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoZ1swXS5sZW5ndGgtMikrIl0iK2Quc2xpY2UodGhp''@;'; put 'put ''cy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oZz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMoZCkpOylkPWQuc2xpY2UoMCxnLmluZGV4KSsiWyIrImEiLnJlcGVhdChnWzBdLmxlbmd0aC0yKSsi''@;'; put 'put ''XSIrZC5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oZz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhkKSk7KWQ9ZC5zbGljZSgwLGcuaW5kZXgpKyIrKyIrZC5zbGljZSh0aGlz''@;'; put 'put ''LnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2U7KXt2YXIgaD1mdW5jdGlvbigpe2lmKER8fChvPSIiKSxEPSExLEYub3B0aW9ucy5leHRlbnNpb25zJiZGLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUmJkYub3B0aW9ucy5leHRlbnNpb25z''@;'; put 'put ''LmlubGluZS5zb21lKGZ1bmN0aW9uKEEpe3JldHVybiEhKG49QS5jYWxsKHtsZXhlcjpGfSxlLHIpKSYmKGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksITApfSkpcmV0dXJuImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLmVzY2FwZShlKSlyZXR1cm4gZT1lLnN1YnN0''@;'; put 'put ''cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKSwiY29udGludWUiO2lmKG49Ri50b2tlbml6ZXIudGFnKGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksKHM9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PW4udHlwZSYmInRleHQiPT09cy50eXBlPyhzLnJhdys9bi5yYXcs''@;'; put 'put ''cy50ZXh0Kz1uLnRleHQpOnIucHVzaChuKSwiY29udGludWUiO2lmKG49Ri50b2tlbml6ZXIubGluayhlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKSwiY29udGludWUiO2lmKG49Ri50b2tlbml6ZXIucmVmbGluayhlLEYudG9rZW5zLmxpbmtzKSlyZXR1''@;'; put 'put ''cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1uLnR5cGUmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPW4ucmF3LHMudGV4dCs9bi50ZXh0KTpyLnB1c2gobiksImNvbnRpbnVlIjtpZigobj1GLnRva2VuaXplci5lbVN0cm9uZyhlLGQs''@;'; put 'put ''bykpfHwobj1GLnRva2VuaXplci5jb2Rlc3BhbihlKSl8fChuPUYudG9rZW5pemVyLmJyKGUpKXx8KG49Ri50b2tlbml6ZXIuZGVsKGUpKXx8KG49Ri50b2tlbml6ZXIuYXV0b2xpbmsoZSxzZSkpfHwhRi5zdGF0ZS5pbkxpbmsmJihuPUYudG9rZW5pemVyLnVybChlLHNlKSkpcmV0dXJuIGU9''@;'; put 'put ''ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjt2YXIgbCxrLGI7aWYocD1lLEYub3B0aW9ucy5leHRlbnNpb25zJiZGLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSYmKGw9MS8wLGs9ZS5zbGljZSgxKSxGLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFy''@;'; put 'put ''dElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKEEpeyJudW1iZXIiPT10eXBlb2YoYj1BLmNhbGwoe2xleGVyOnRoaXN9LGspKSYmMDw9YiYmKGw9TWF0aC5taW4obCxiKSl9KSxsPDEvMCkmJjA8PWwmJihwPWUuc3Vic3RyaW5nKDAsbCsxKSksbj1GLnRva2VuaXplci5pbmxpbmVUZXh0KHAsa2Up''@;'; put 'put ''KXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksIl8iIT09bi5yYXcuc2xpY2UoLTEpJiYobz1uLnJhdy5zbGljZSgtMSkpLEQ9ITAsKHM9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPW4ucmF3LHMudGV4dCs9bi50ZXh0KTpyLnB1c2gobiksImNvbnRp''@;'; put 'put ''bnVlIjtpZihlKXt2YXIgdz0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKTtpZihGLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKHcpLCJicmVhayI7dGhyb3cgbmV3IEVycm9yKHcpfX0oKTtpZigiY29udGludWUiIT09aCYmImJyZWFrIj09PWgp''@;'; put 'put ''YnJlYWt9cmV0dXJuIHJ9LHU9YSwodD1be2tleToicnVsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybntibG9jazpmLGlubGluZTpjfX19XSkmJlAodSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxhfSgpLFo9ZnVuY3Rpb24oKXtmdW5jdGlv''@;'; put 'put ''biBhKHQpe3RoaXMub3B0aW9ucz10fHxDLmRlZmF1bHRzfXZhciBpPWEucHJvdG90eXBlO3JldHVybiBpLmNvZGU9ZnVuY3Rpb24odCxuLGUpe3ZhciByO3JldHVybiBuPShufHwiIikubWF0Y2goL1xTKi8pWzBdLHRoaXMub3B0aW9ucy5oaWdobGlnaHQmJm51bGwhPShyPXRoaXMub3B0aW9u''@;'; put 'put ''cy5oaWdobGlnaHQodCxuKSkmJnIhPT10JiYoZT0hMCx0PXIpLHQ9dC5yZXBsYWNlKC9cbiQvLCIiKSsiXG4iLG4/JzxwcmU+PGNvZGUgY2xhc3M9IicrdGhpcy5vcHRpb25zLmxhbmdQcmVmaXgreShuKSsnIj4nKyhlP3Q6eSh0LCEwKSkrIjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+''@;'; put 'put ''IisoZT90OnkodCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4ifSxpLmJsb2NrcXVvdGU9ZnVuY3Rpb24odCl7cmV0dXJuIjxibG9ja3F1b3RlPlxuIit0KyI8L2Jsb2NrcXVvdGU+XG4ifSxpLmh0bWw9ZnVuY3Rpb24odCx1KXtyZXR1cm4gdH0saS5oZWFkaW5nPWZ1bmN0aW9uKHQsdSxlLHIpe3Jl''@;'; put 'put ''dHVybiB0aGlzLm9wdGlvbnMuaGVhZGVySWRzPyI8aCIrdSsnIGlkPSInKyh0aGlzLm9wdGlvbnMuaGVhZGVyUHJlZml4K3Iuc2x1ZyhlKSkrJyI+Jyt0KyI8L2giK3UrIj5cbiI6IjxoIit1KyI+Iit0KyI8L2giK3UrIj5cbiJ9LGkuaHI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25z''@;'; put 'put ''LnhodG1sPyI8aHIvPlxuIjoiPGhyPlxuIn0saS5saXN0PWZ1bmN0aW9uKHQsdSxlKXt2YXIgcj11PyJvbCI6InVsIjtyZXR1cm4iPCIrcisodSYmMSE9PWU/JyBzdGFydD0iJytlKyciJzoiIikrIj5cbiIrdCsiPC8iK3IrIj5cbiJ9LGkubGlzdGl0ZW09ZnVuY3Rpb24odCl7cmV0dXJuIjxs''@;'; put 'put ''aT4iK3QrIjwvbGk+XG4ifSxpLmNoZWNrYm94PWZ1bmN0aW9uKHQpe3JldHVybiI8aW5wdXQgIisodD8nY2hlY2tlZD0iIiAnOiIiKSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giJysodGhpcy5vcHRpb25zLnhodG1sPyIgLyI6IiIpKyI+ICJ9LGkucGFyYWdyYXBoPWZ1bmN0aW9uKHQp''@;'; put 'put ''e3JldHVybiI8cD4iK3QrIjwvcD5cbiJ9LGkudGFibGU9ZnVuY3Rpb24odCx1KXtyZXR1cm4iPHRhYmxlPlxuPHRoZWFkPlxuIit0KyI8L3RoZWFkPlxuIisodT11JiYiPHRib2R5PiIrdSsiPC90Ym9keT4iKSsiPC90YWJsZT5cbiJ9LGkudGFibGVyb3c9ZnVuY3Rpb24odCl7cmV0dXJuIjx0''@;'; put 'put ''cj5cbiIrdCsiPC90cj5cbiJ9LGkudGFibGVjZWxsPWZ1bmN0aW9uKHQsdSl7dmFyIGU9dS5oZWFkZXI/InRoIjoidGQiO3JldHVybih1LmFsaWduPyI8IitlKycgYWxpZ249IicrdS5hbGlnbisnIj4nOiI8IitlKyI+IikrdCsiPC8iK2UrIj5cbiJ9LGkuc3Ryb25nPWZ1bmN0aW9uKHQpe3Jl''@;'; put 'put ''dHVybiI8c3Ryb25nPiIrdCsiPC9zdHJvbmc+In0saS5lbT1mdW5jdGlvbih0KXtyZXR1cm4iPGVtPiIrdCsiPC9lbT4ifSxpLmNvZGVzcGFuPWZ1bmN0aW9uKHQpe3JldHVybiI8Y29kZT4iK3QrIjwvY29kZT4ifSxpLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8i''@;'; put 'put ''PGJyLz4iOiI8YnI+In0saS5kZWw9ZnVuY3Rpb24odCl7cmV0dXJuIjxkZWw+Iit0KyI8L2RlbD4ifSxpLmxpbms9ZnVuY3Rpb24odCx1LGUpe3JldHVybiBudWxsPT09KHQ9bmUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLHQpKT9lOih0PSc8YSBocmVmPSIn''@;'; put 'put ''K3QrJyInLHUmJih0Kz0nIHRpdGxlPSInK3UrJyInKSx0KyI+IitlKyI8L2E+Iil9LGkuaW1hZ2U9ZnVuY3Rpb24odCx1LGUpe3JldHVybiBudWxsPT09KHQ9bmUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLHQpKT9lOih0PSc8aW1nIHNyYz0iJyt0KyciIGFs''@;'; put 'put ''dD0iJytlKyciJyx1JiYodCs9JyB0aXRsZT0iJyt1KyciJyksdCsodGhpcy5vcHRpb25zLnhodG1sPyIvPiI6Ij4iKSl9LGkudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sYX0oKSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe312YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5zdHJvbmc9''@;'; put 'put ''ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkuZW09ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkuY29kZXNwYW49ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkuZGVsPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4g''@;'; put 'put ''dH0saS5saW5rPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4iIitlfSxpLmltYWdlPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4iIitlfSxpLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGF9KCksWD1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt0aGlzLnNlZW49e319dmFyIGk9YS5wcm90b3R5cGU7cmV0''@;'; put 'put ''dXJuIGkuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5y''@;'; put 'put ''ZXBsYWNlKC9ccy9nLCItIil9LGkuZ2V0TmV4dFNhZmVTbHVnPWZ1bmN0aW9uKHQsdSl7dmFyIGU9dCxyPTA7aWYodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGUpKWZvcihyPXRoaXMuc2Vlblt0XTtlPXQrIi0iKyArK3IsdGhpcy5zZWVuLmhhc093blByb3BlcnR5KGUpOyk7cmV0dXJuIHV8''@;'; put 'put ''fCh0aGlzLnNlZW5bdF09cix0aGlzLnNlZW5bZV09MCksZX0saS5zbHVnPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIHZvaWQgMD09PXUmJih1PXt9KSx0PXRoaXMuc2VyaWFsaXplKHQpLHRoaXMuZ2V0TmV4dFNhZmVTbHVnKHQsdS5kcnlydW4pfSxhfSgpLFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBh''@;'; put 'put ''KHQpe3RoaXMub3B0aW9ucz10fHxDLmRlZmF1bHRzLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBaLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyLHRoaXMucmVuZGVyZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50ZXh0UmVu''@;'; put 'put ''ZGVyZXI9bmV3IE4sdGhpcy5zbHVnZ2VyPW5ldyBYfWEucGFyc2U9ZnVuY3Rpb24odCx1KXtyZXR1cm4gbmV3IGEodSkucGFyc2UodCl9LGEucGFyc2VJbmxpbmU9ZnVuY3Rpb24odCx1KXtyZXR1cm4gbmV3IGEodSkucGFyc2VJbmxpbmUodCl9O3ZhciBpPWEucHJvdG90eXBlO3JldHVybiBp''@;'; put 'put ''LnBhcnNlPWZ1bmN0aW9uKHQsdSl7dm9pZCAwPT09dSYmKHU9ITApO2Zvcih2YXIgZSxyLG4scyxwLGcsRCxvLEYsZCx4LGgsbCxrLGIsdyxBPSIiLEI9dC5sZW5ndGgsXz0wO188QjtfKyspaWYobz10W19dLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9u''@;'; put 'put ''cy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tvLnR5cGVdJiYoITEhPT0odz10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sbykpfHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0''@;'; put 'put ''YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhvLnR5cGUpKSlBKz13fHwiIjtlbHNlIHN3aXRjaChvLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOkErPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNl''@;'; put 'put ''ImhlYWRpbmciOkErPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKSxvLmRlcHRoLHVlKHRoaXMucGFyc2VJbmxpbmUoby50b2tlbnMsdGhpcy50ZXh0UmVuZGVyZXIpKSx0aGlzLnNsdWdnZXIpO2NvbnRpbnVlO2Nhc2UiY29kZSI6QSs9dGhpcy5yZW5k''@;'; put 'put ''ZXJlci5jb2RlKG8udGV4dCxvLmxhbmcsby5lc2NhcGVkKTtjb250aW51ZTtjYXNlInRhYmxlIjpmb3IoZz1GPSIiLG49by5oZWFkZXIubGVuZ3RoLGU9MDtlPG47ZSsrKWcrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoby5oZWFkZXJbZV0udG9rZW5zKSx7aGVh''@;'; put 'put ''ZGVyOiEwLGFsaWduOm8uYWxpZ25bZV19KTtmb3IoRis9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhnKSxEPSIiLG49by5yb3dzLmxlbmd0aCxlPTA7ZTxuO2UrKyl7Zm9yKGc9IiIscz0ocD1vLnJvd3NbZV0pLmxlbmd0aCxyPTA7cjxzO3IrKylnKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0''@;'; put 'put ''aGlzLnBhcnNlSW5saW5lKHBbcl0udG9rZW5zKSx7aGVhZGVyOiExLGFsaWduOm8uYWxpZ25bcl19KTtEKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KGcpfUErPXRoaXMucmVuZGVyZXIudGFibGUoRixEKTtjb250aW51ZTtjYXNlImJsb2NrcXVvdGUiOkQ9dGhpcy5wYXJzZShvLnRva2Vucyks''@;'; put 'put ''QSs9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKEQpO2NvbnRpbnVlO2Nhc2UibGlzdCI6Zm9yKEY9by5vcmRlcmVkLHo9by5zdGFydCxkPW8ubG9vc2Usbj1vLml0ZW1zLmxlbmd0aCxEPSIiLGU9MDtlPG47ZSsrKWw9KGg9by5pdGVtc1tlXSkuY2hlY2tlZCxrPWgudGFzayx4PSIiLGgudGFz''@;'; put 'put ''ayYmKGI9dGhpcy5yZW5kZXJlci5jaGVja2JveChsKSxkPzA8aC50b2tlbnMubGVuZ3RoJiYicGFyYWdyYXBoIj09PWgudG9rZW5zWzBdLnR5cGU/KGgudG9rZW5zWzBdLnRleHQ9YisiICIraC50b2tlbnNbMF0udGV4dCxoLnRva2Vuc1swXS50b2tlbnMmJjA8aC50b2tlbnNbMF0udG9rZW5z''@;'; put 'put ''Lmxlbmd0aCYmInRleHQiPT09aC50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUmJihoLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD1iKyIgIitoLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmgudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHRleHQ6Yn0pOngrPWIpLHgrPXRoaXMucGFy''@;'; put 'put ''c2UoaC50b2tlbnMsZCksRCs9dGhpcy5yZW5kZXJlci5saXN0aXRlbSh4LGssbCk7QSs9dGhpcy5yZW5kZXJlci5saXN0KEQsRix6KTtjb250aW51ZTtjYXNlImh0bWwiOkErPXRoaXMucmVuZGVyZXIuaHRtbChvLnRleHQsby5ibG9jayk7Y29udGludWU7Y2FzZSJwYXJhZ3JhcGgiOkErPXRo''@;'; put 'put ''aXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VJbmxpbmUoby50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcihEPW8udG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoby50b2tlbnMpOm8udGV4dDtfKzE8QiYmInRleHQiPT09dFtfKzFdLnR5cGU7KUQrPSJcbiIrKChvPXRbKytf''@;'; put 'put ''XSkudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoby50b2tlbnMpOm8udGV4dCk7QSs9dT90aGlzLnJlbmRlcmVyLnBhcmFncmFwaChEKTpEO2NvbnRpbnVlO2RlZmF1bHQ6dmFyIHo9J1Rva2VuIHdpdGggIicrby50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5z''@;'; put 'put ''aWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcih6KTt0aHJvdyBuZXcgRXJyb3Ioeil9cmV0dXJuIEF9LGkucGFyc2VJbmxpbmU9ZnVuY3Rpb24odCx1KXt1PXV8fHRoaXMucmVuZGVyZXI7Zm9yKHZhciBlLHIsbj0iIixzPXQubGVuZ3RoLHA9MDtwPHM7cCsrKWlmKGU9dFtwXSx0aGlz''@;'; put 'put ''Lm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZS50eXBlXSYmKCExIT09KHI9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2UudHlwZV0uY2FsbCh7cGFyc2VyOnRo''@;'; put 'put ''aXN9LGUpKXx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhlLnR5cGUpKSluKz1yfHwiIjtlbHNlIHN3aXRjaChlLnR5cGUpe2Nhc2UiZXNjYXBlIjpjYXNlInRleHQiOm4rPXUudGV4''@;'; put 'put ''dChlLnRleHQpO2JyZWFrO2Nhc2UiaHRtbCI6bis9dS5odG1sKGUudGV4dCk7YnJlYWs7Y2FzZSJsaW5rIjpuKz11LmxpbmsoZS5ocmVmLGUudGl0bGUsdGhpcy5wYXJzZUlubGluZShlLnRva2Vucyx1KSk7YnJlYWs7Y2FzZSJpbWFnZSI6bis9dS5pbWFnZShlLmhyZWYsZS50aXRsZSxlLnRl''@;'; put 'put ''eHQpO2JyZWFrO2Nhc2Uic3Ryb25nIjpuKz11LnN0cm9uZyh0aGlzLnBhcnNlSW5saW5lKGUudG9rZW5zLHUpKTticmVhaztjYXNlImVtIjpuKz11LmVtKHRoaXMucGFyc2VJbmxpbmUoZS50b2tlbnMsdSkpO2JyZWFrO2Nhc2UiY29kZXNwYW4iOm4rPXUuY29kZXNwYW4oZS50ZXh0KTticmVh''@;'; put 'put ''aztjYXNlImJyIjpuKz11LmJyKCk7YnJlYWs7Y2FzZSJkZWwiOm4rPXUuZGVsKHRoaXMucGFyc2VJbmxpbmUoZS50b2tlbnMsdSkpO2JyZWFrO2RlZmF1bHQ6dmFyIGc9J1Rva2VuIHdpdGggIicrZS50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQp''@;'; put 'put ''cmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihnKTt0aHJvdyBuZXcgRXJyb3IoZyl9cmV0dXJuIG59LGF9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEodCl7dGhpcy5vcHRpb25zPXR8fEMuZGVmYXVsdHN9dmFyIGk9YS5wcm90b3R5cGU7cmV0dXJuIGkucHJlcHJvY2Vzcz1mdW5jdGlvbih0''@;'; put 'put ''KXtyZXR1cm4gdH0saS5wb3N0cHJvY2Vzcz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sYX0oKSxxPShPLnBhc3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKSxLKCJwYXJzZU1hcmtkb3duIikpLFY9Sygib25FcnJvciIpO2Z1bmN0aW9uIENlKGEsaSl7''@;'; put 'put ''dmFyIHQ9dGhpcztyZXR1cm4gZnVuY3Rpb24odSxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCk7dmFyIG4scz12KHt9LGUpLHA9KGU9dih7fSx0LmRlZmF1bHRzLHMpLEcodCxWKVtWXShlLnNpbGVudCxlLmFzeW5jLHIpKTtpZihudWxsPT11KXJldHVybiBwKG5ldyBF''@;'; put 'put ''cnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpKTtpZigic3RyaW5nIiE9dHlwZW9mIHUpcmV0dXJuIHAobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNh''@;'; put 'put ''bGwodSkrIiwgc3RyaW5nIGV4cGVjdGVkIikpO2lmKHM9ciwobj1lKSYmIW4uc2lsZW50JiYocyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBp''@;'; put 'put ''biB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChuLnNhbml0aXplfHxuLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVj''@;'; put 'put ''YXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLCFuLmhpZ2hsaWdodCYmImxh''@;'; put 'put ''bmd1YWdlLSI9PT1uLmxhbmdQcmVmaXh8fGNvbnNvbGUud2FybigibWFya2VkKCk6IGhpZ2hsaWdodCBhbmQgbGFuZ1ByZWZpeCBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRo''@;'; put 'put ''ZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1oaWdobGlnaHQuIiksbi5tYW5nbGUmJmNvbnNvbGUud2FybigibWFya2VkKCk6IG1hbmdsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXMgZGVwcmVjYXRlZCBz''@;'; put 'put ''aW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtbWFuZ2xlLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHttYW5nbGU6IGZh''@;'; put 'put ''bHNlfWAuIiksbi5iYXNlVXJsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBiYXNlVXJsIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0''@;'; put 'put ''dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1iYXNlLXVybC4iKSxuLnNtYXJ0eXBhbnRzJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzbWFydHlwYW50cyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5k''@;'; put 'put ''IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtc21hcnR5cGFudHMuIiksbi54aHRtbCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogeGh0bWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2Ug''@;'; put 'put ''dmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXhodG1sLiIpLG4uaGVhZGVySWRzfHxuLmhlYWRlclByZWZpeCkmJmNvbnNvbGUu''@;'; put 'put ''d2FybigibWFya2VkKCk6IGhlYWRlcklkcyBhbmQgaGVhZGVyUHJlZml4IHBhcmFtZXRlcnMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdh''@;'; put 'put ''cm5pbmcsIGluc3RhbGwgIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1nZm0taGVhZGluZy1pZCwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7aGVhZGVySWRzOiBmYWxzZX1gLiIpLGUuaG9va3MmJihlLmhvb2tzLm9wdGlvbnM9ZSkscil7dmFyIGcsRD1lLmhpZ2hsaWdo''@;'; put 'put ''dDt0cnl7ZS5ob29rcyYmKHU9ZS5ob29rcy5wcmVwcm9jZXNzKHUpKSxnPWEodSxlKX1jYXRjaChoKXtyZXR1cm4gcChoKX12YXIgbyxGPWZ1bmN0aW9uKGgpe3ZhciBsO2lmKCFoKXRyeXtlLndhbGtUb2tlbnMmJnQud2Fsa1Rva2VucyhnLGUud2Fsa1Rva2VucyksbD1pKGcsZSksZS5ob29r''@;'; put 'put ''cyYmKGw9ZS5ob29rcy5wb3N0cHJvY2VzcyhsKSl9Y2F0Y2goayl7aD1rfXJldHVybiBlLmhpZ2hsaWdodD1ELGg/cChoKTpyKG51bGwsbCl9O3JldHVybiFEfHxELmxlbmd0aDwzP0YoKTooZGVsZXRlIGUuaGlnaGxpZ2h0LGcubGVuZ3RoPyhvPTAsdC53YWxrVG9rZW5zKGcsZnVuY3Rpb24o''@;'; put 'put ''aCl7ImNvZGUiPT09aC50eXBlJiYobysrLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtEKGgudGV4dCxoLmxhbmcsZnVuY3Rpb24obCxrKXtpZihsKXJldHVybiBGKGwpO251bGwhPWsmJmshPT1oLnRleHQmJihoLnRleHQ9ayxoLmVzY2FwZWQ9ITApLDA9PS0tbyYmRigpfSl9LDApKX0pLHZvaWQo''@;'; put 'put ''MD09PW8mJkYoKSkpOkYoKSl9aWYoZS5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUuaG9va3M/ZS5ob29rcy5wcmVwcm9jZXNzKHUpOnUpLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGEoaCxlKX0pLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGUud2Fsa1Rva2Vucz9Qcm9taXNlLmFs''@;'; put 'put ''bCh0LndhbGtUb2tlbnMoaCxlLndhbGtUb2tlbnMpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTpofSkudGhlbihmdW5jdGlvbihoKXtyZXR1cm4gaShoLGUpfSkudGhlbihmdW5jdGlvbihoKXtyZXR1cm4gZS5ob29rcz9lLmhvb2tzLnBvc3Rwcm9jZXNzKGgpOmh9KS5jYXRjaChwKTt0''@;'; put 'put ''cnl7ZS5ob29rcyYmKHU9ZS5ob29rcy5wcmVwcm9jZXNzKHUpKTt2YXIgZD1hKHUsZSkseD0oZS53YWxrVG9rZW5zJiZ0LndhbGtUb2tlbnMoZCxlLndhbGtUb2tlbnMpLGkoZCxlKSk7cmV0dXJuIGUuaG9va3M/ZS5ob29rcy5wb3N0cHJvY2Vzcyh4KTp4fWNhdGNoKGgpe3JldHVybiBwKGgp''@;'; put 'put ''fX19ZnVuY3Rpb24gRWUoYSxpLHQpe3JldHVybiBmdW5jdGlvbih1KXt2YXIgZTtpZih1Lm1lc3NhZ2UrPSJcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLiIsYSlyZXR1cm4gZT0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+''@;'; put 'put ''Iit5KHUubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiIsaT9Qcm9taXNlLnJlc29sdmUoZSk6dD92b2lkIHQobnVsbCxlKTplO2lmKGkpcmV0dXJuIFByb21pc2UucmVqZWN0KHUpO2lmKCF0KXRocm93IHU7dCh1KX19ST1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkodGhpcyxWLHt2YWx1ZTpFZX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHEse3ZhbHVlOkNlfSksdGhpcy5kZWZhdWx0cz17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGln''@;'; put 'put ''aGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGws''@;'; put 'put ''eGh0bWw6ITF9LHRoaXMub3B0aW9ucz10aGlzLnNldE9wdGlvbnMsdGhpcy5wYXJzZT1HKHRoaXMscSlbcV0oUy5sZXgsVC5wYXJzZSksdGhpcy5wYXJzZUlubGluZT1HKHRoaXMscSlbcV0oUy5sZXhJbmxpbmUsVC5wYXJzZUlubGluZSksdGhpcy5QYXJzZXI9VCx0aGlzLnBhcnNlcj1ULnBh''@;'; put 'put ''cnNlLHRoaXMuUmVuZGVyZXI9Wix0aGlzLlRleHRSZW5kZXJlcj1OLHRoaXMuTGV4ZXI9Uyx0aGlzLmxleGVyPVMubGV4LHRoaXMuVG9rZW5pemVyPWosdGhpcy5TbHVnZ2VyPVgsdGhpcy5Ib29rcz1PLHRoaXMudXNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT1hLnByb3RvdHlwZTty''@;'; put 'put ''ZXR1cm4gaS53YWxrVG9rZW5zPWZ1bmN0aW9uKHQsdSl7Zm9yKHZhciBlLHI9dGhpcyxuPVtdLHM9VSh0KTshKGU9cygpKS5kb25lOykhZnVuY3Rpb24oKXt2YXIgcD1lLnZhbHVlO3N3aXRjaChuPW4uY29uY2F0KHUuY2FsbChyLHApKSxwLnR5cGUpe2Nhc2UidGFibGUiOmZvcih2YXIgZz1V''@;'; put 'put ''KHAuaGVhZGVyKTshKEQ9ZygpKS5kb25lOyl7dmFyIEQ9RC52YWx1ZTtuPW4uY29uY2F0KHIud2Fsa1Rva2VucyhELnRva2Vucyx1KSl9Zm9yKHZhciBvLEY9VShwLnJvd3MpOyEobz1GKCkpLmRvbmU7KWZvcih2YXIgZD1VKG8udmFsdWUpOyEoeD1kKCkpLmRvbmU7KXt2YXIgeD14LnZhbHVl''@;'; put 'put ''O249bi5jb25jYXQoci53YWxrVG9rZW5zKHgudG9rZW5zLHUpKX1icmVhaztjYXNlImxpc3QiOm49bi5jb25jYXQoci53YWxrVG9rZW5zKHAuaXRlbXMsdSkpO2JyZWFrO2RlZmF1bHQ6ci5kZWZhdWx0cy5leHRlbnNpb25zJiZyLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnIu''@;'; put 'put ''ZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1twLnR5cGVdP3IuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1twLnR5cGVdLmZvckVhY2goZnVuY3Rpb24oaCl7bj1uLmNvbmNhdChyLndhbGtUb2tlbnMocFtoXSx1KSl9KTpwLnRva2VucyYmKG49bi5jb25jYXQoci53YWxr''@;'; put 'put ''VG9rZW5zKHAudG9rZW5zLHUpKSl9fSgpO3JldHVybiBufSxpLnVzZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLHU9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fSxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248''@;'; put 'put ''ZTtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgcCxnPXYoe30scyk7aWYoZy5hc3luYz10LmRlZmF1bHRzLmFzeW5jfHxnLmFzeW5jfHwhMSxzLmV4dGVuc2lvbnMmJihzLmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlvbihsKXtpZighbC5u''@;'; put 'put ''YW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTt2YXIgaztpZihsLnJlbmRlcmVyJiYodS5yZW5kZXJlcnNbbC5uYW1lXT0oaz11LnJlbmRlcmVyc1tsLm5hbWVdKT9mdW5jdGlvbigpe2Zvcih2YXIgYj1hcmd1bWVudHMubGVuZ3RoLHc9bmV3IEFycmF5KGIp''@;'; put 'put ''LEE9MDtBPGI7QSsrKXdbQV09YXJndW1lbnRzW0FdO3ZhciBCPWwucmVuZGVyZXIuYXBwbHkodGhpcyx3KTtyZXR1cm4hMT09PUI/ay5hcHBseSh0aGlzLHcpOkJ9OmwucmVuZGVyZXIpLGwudG9rZW5pemVyKXtpZighbC5sZXZlbHx8ImJsb2NrIiE9PWwubGV2ZWwmJiJpbmxpbmUiIT09bC5s''@;'; put 'put ''ZXZlbCl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTt1W2wubGV2ZWxdP3VbbC5sZXZlbF0udW5zaGlmdChsLnRva2VuaXplcik6dVtsLmxldmVsXT1bbC50b2tlbml6ZXJdLGwuc3RhcnQmJigiYmxvY2siPT09bC5sZXZlbD91''@;'; put 'put ''LnN0YXJ0QmxvY2s/dS5zdGFydEJsb2NrLnB1c2gobC5zdGFydCk6dS5zdGFydEJsb2NrPVtsLnN0YXJ0XToiaW5saW5lIj09PWwubGV2ZWwmJih1LnN0YXJ0SW5saW5lP3Uuc3RhcnRJbmxpbmUucHVzaChsLnN0YXJ0KTp1LnN0YXJ0SW5saW5lPVtsLnN0YXJ0XSkpfWwuY2hpbGRUb2tlbnMm''@;'; put 'put ''Jih1LmNoaWxkVG9rZW5zW2wubmFtZV09bC5jaGlsZFRva2Vucyl9KSxnLmV4dGVuc2lvbnM9dSkscy5yZW5kZXJlcil7dmFyIEQsbz10LmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgWih0LmRlZmF1bHRzKTtmb3IoRCBpbiBzLnJlbmRlcmVyKSFmdW5jdGlvbihsKXt2YXIgaz1vW2xdO29bbF09''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGI9YXJndW1lbnRzLmxlbmd0aCx3PW5ldyBBcnJheShiKSxBPTA7QTxiO0ErKyl3W0FdPWFyZ3VtZW50c1tBXTt2YXIgQj1zLnJlbmRlcmVyW2xdLmFwcGx5KG8sdyk7cmV0dXJuITE9PT1CP2suYXBwbHkobyx3KTpCfX0oRCk7Zy5yZW5kZXJlcj1vfWlmKHMu''@;'; put 'put ''dG9rZW5pemVyKXt2YXIgRixkPXQuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgaih0LmRlZmF1bHRzKTtmb3IoRiBpbiBzLnRva2VuaXplcikhZnVuY3Rpb24obCl7dmFyIGs9ZFtsXTtkW2xdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsdz1uZXcgQXJyYXkoYiksQT0w''@;'; put 'put ''O0E8YjtBKyspd1tBXT1hcmd1bWVudHNbQV07dmFyIEI9cy50b2tlbml6ZXJbbF0uYXBwbHkoZCx3KTtyZXR1cm4hMT09PUI/ay5hcHBseShkLHcpOkJ9fShGKTtnLnRva2VuaXplcj1kfWlmKHMuaG9va3Mpe3ZhciB4LGg9dC5kZWZhdWx0cy5ob29rc3x8bmV3IE87Zm9yKHggaW4gcy5ob29r''@;'; put 'put ''cykhZnVuY3Rpb24obCl7dmFyIGs9aFtsXTtoW2xdPU8ucGFzc1Rocm91Z2hIb29rcy5oYXMobCk/ZnVuY3Rpb24oYil7cmV0dXJuIHQuZGVmYXVsdHMuYXN5bmM/UHJvbWlzZS5yZXNvbHZlKHMuaG9va3NbbF0uY2FsbChoLGIpKS50aGVuKGZ1bmN0aW9uKHcpe3JldHVybiBrLmNhbGwoaCx3''@;'; put 'put ''KX0pOihiPXMuaG9va3NbbF0uY2FsbChoLGIpLGsuY2FsbChoLGIpKX06ZnVuY3Rpb24oKXtmb3IodmFyIGI9YXJndW1lbnRzLmxlbmd0aCx3PW5ldyBBcnJheShiKSxBPTA7QTxiO0ErKyl3W0FdPWFyZ3VtZW50c1tBXTt2YXIgQj1zLmhvb2tzW2xdLmFwcGx5KGgsdyk7cmV0dXJuITE9PT1C''@;'; put 'put ''P2suYXBwbHkoaCx3KTpCfX0oeCk7Zy5ob29rcz1ofXMud2Fsa1Rva2VucyYmKHA9dC5kZWZhdWx0cy53YWxrVG9rZW5zLGcud2Fsa1Rva2Vucz1mdW5jdGlvbihsKXt2YXIgaz1bXTtyZXR1cm4gay5wdXNoKHMud2Fsa1Rva2Vucy5jYWxsKHRoaXMsbCkpLHA/ay5jb25jYXQocC5jYWxsKHRo''@;'; put 'put ''aXMsbCkpOmt9KSx0LmRlZmF1bHRzPXYoe30sdC5kZWZhdWx0cyxnKX0pLHRoaXN9LGkuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWZhdWx0cz12KHt9LHRoaXMuZGVmYXVsdHMsdCksdGhpc30sYX0oKTt2YXIgUj1uZXcgSShDLmRlZmF1bHRzKTtmdW5jdGlvbiBtKGEs''@;'; put 'put ''aSx0KXtyZXR1cm4gUi5wYXJzZShhLGksdCl9bS5vcHRpb25zPW0uc2V0T3B0aW9ucz1mdW5jdGlvbihhKXtyZXR1cm4gUi5zZXRPcHRpb25zKGEpLFcobS5kZWZhdWx0cz1SLmRlZmF1bHRzKSxtfSxtLmdldERlZmF1bHRzPVEsbS5kZWZhdWx0cz1DLmRlZmF1bHRzLG0udXNlPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIFIudXNlLmFwcGx5KFIsYXJndW1lbnRzKSxXKG0uZGVmYXVsdHM9Ui5kZWZhdWx0cyksbX0sbS53YWxrVG9rZW5zPWZ1bmN0aW9uKGEsaSl7cmV0dXJuIFIud2Fsa1Rva2VucyhhLGkpfSxtLnBhcnNlSW5saW5lPVIucGFyc2VJbmxpbmUsbS5QYXJzZXI9VCxtLnBhcnNlcj1U''@;'; put 'put ''LnBhcnNlLG0uUmVuZGVyZXI9WixtLlRleHRSZW5kZXJlcj1OLG0uTGV4ZXI9UyxtLmxleGVyPVMubGV4LG0uVG9rZW5pemVyPWosbS5TbHVnZ2VyPVgsbS5Ib29rcz1PO3ZhciBtZT0obS5wYXJzZT1tKS5vcHRpb25zLHhlPW0uc2V0T3B0aW9ucyxiZT1tLnVzZSx3ZT1tLndhbGtUb2tlbnMs''@;'; put 'put ''QmU9bS5wYXJzZUlubGluZSx5ZT1tLHZlPVQucGFyc2UsX2U9Uy5sZXg7Qy5Ib29rcz1PLEMuTGV4ZXI9UyxDLk1hcmtlZD1JLEMuUGFyc2VyPVQsQy5SZW5kZXJlcj1aLEMuU2x1Z2dlcj1YLEMuVGV4dFJlbmRlcmVyPU4sQy5Ub2tlbml6ZXI9aixDLmdldERlZmF1bHRzPVEsQy5sZXhlcj1f''@;'; put 'put ''ZSxDLm1hcmtlZD1tLEMub3B0aW9ucz1tZSxDLnBhcnNlPXllLEMucGFyc2VJbmxpbmU9QmUsQy5wYXJzZXI9dmUsQy5zZXRPcHRpb25zPXhlLEMudXNlPWJlLEMud2Fsa1Rva2Vucz13ZX0pOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=styles.e45854681934e986-css; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''QGNoYXJzZXQgIlVURi04IjsvKiEKICogQ29weXJpZ2h0IChjKSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLgogKgogKiBIQU5EU09OVEFCTEUgaXMgYSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLiwgYSBQb2xpc2ggY29ycG9yYXRpb24gYmFzZWQgaW4K''@;'; put 'put ''ICogR2R5bmlhLCBQb2xhbmQsIGF0IEFsZWphIFp3eWNpZXN0d2EgOTYtOTgsIHJlZ2lzdGVyZWQgYnkgdGhlIERpc3RyaWN0IENvdXJ0IGluIEdkYW5zayB1bmRlciBudW1iZXIKICogNTM4NjUxLCBFVSB0YXggSUQgbnVtYmVyOiBQTDU4NjIyOTQwMDIsIHNoYXJlIGNhcGl0YWw6IFBMTiA2''@;'; put 'put ''Miw4MDAuMDAuCiAqCiAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC0KICogbGljZW5zZWQgLSBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3Ig''@;'; put 'put ''Y29tbWVyY2lhbCBwdXJwb3NlcywgbWVhbmluZyBpbnRlbmRlZCBmb3Igb3IKICogcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LgogKgogKiBJZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkg''@;'; put 'put ''Zm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIG1lYW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nCiAqIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwKICog''@;'; put 'put ''eW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiB0aGUgImhhbmRzb250YWJsZS1ub24tY29tbWVyY2lhbC1saWNlbnNlLnBkZiIgZmlsZS4KICoKICogWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0''@;'; put 'put ''IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlCiAqIGxpY2Vuc2UgYWdyZWVtZW50LgogKgogKiBJbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUK''@;'; put 'put ''ICogY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuCiAqCiAqIFVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgSEFORFNPTkNPREUgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiCiAqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMg''@;'; put 'put ''T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTwogKiBMRUdBTCBUSEVPUlksIFNIQUxMIEhBTkRTT05DT0RFIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULAogKiBJTkRJUkVDVCwgU1BFQ0lBTCwg''@;'; put 'put ''SU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NCiAqIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuCiAqCiAqIFZlcnNpb246IDE1LjMuMAogKiBSZWxlYXNlIGRhdGU6IDI5LzA0LzIwMjUgKGJ1aWx0''@;'; put 'put ''IGF0IDI0LzA0LzIwMjUgMTA6NTk6MTEpCiAqLy5oYW5kc29udGFibGUgLnRhYmxlIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIHRke2JvcmRlci10b3A6bm9uZX0uaGFuZHNvbnRhYmxlIHRye2JhY2tncm91bmQ6I2ZmZn0uaGFuZHNvbnRhYmxlIHRke2JhY2tncm91bmQtY29sb3I6aW5oZXJp''@;'; put 'put ''dH0uaGFuZHNvbnRhYmxlIC50YWJsZSBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZSAudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLmhh''@;'; put 'put ''bmRzb250YWJsZSAudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZSAudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZSAudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGR7''@;'; put 'put ''Ym9yZGVyLXRvcDoxcHggc29saWQgI0NDQ0NDQ30uaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZHtib3JkZXI6MDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGV9LmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGgsLmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGR7Ym9yZGVy''@;'; put 'put ''LWxlZnQ6bm9uZX0uaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZCB0aDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZCB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdDoxcHggc29saWQgI0NDQ0NDQ30uaGFuZHNvbnRhYmxlIC50YWJsZT50Ym9keT50cj50ZCwu''@;'; put 'put ''aGFuZHNvbnRhYmxlIC50YWJsZT50Ym9keT50cj50aCwuaGFuZHNvbnRhYmxlIC50YWJsZT50Zm9vdD50cj50ZCwuaGFuZHNvbnRhYmxlIC50YWJsZT50Zm9vdD50cj50aCwuaGFuZHNvbnRhYmxlIC50YWJsZT50aGVhZD50cj50ZCwuaGFuZHNvbnRhYmxlIC50YWJsZT50aGVhZD50cj50aHts''@;'; put 'put ''aW5lLWhlaWdodDoyMXB4O3BhZGRpbmc6MH0uY29sLWxnLTEuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTAuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTEuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTIuaGFuZHNvbnRhYmxlLC5jb2wtbGctMi5oYW5kc29udGFibGUsLmNvbC1sZy0zLmhhbmRzb250YWJs''@;'; put 'put ''ZSwuY29sLWxnLTQuaGFuZHNvbnRhYmxlLC5jb2wtbGctNS5oYW5kc29udGFibGUsLmNvbC1sZy02LmhhbmRzb250YWJsZSwuY29sLWxnLTcuaGFuZHNvbnRhYmxlLC5jb2wtbGctOC5oYW5kc29udGFibGUsLmNvbC1sZy05LmhhbmRzb250YWJsZSwuY29sLW1kLTEuaGFuZHNvbnRhYmxlLC5j''@;'; put 'put ''b2wtbWQtMTAuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMTEuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMTIuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMi5oYW5kc29udGFibGUsLmNvbC1tZC0zLmhhbmRzb250YWJsZSwuY29sLW1kLTQuaGFuZHNvbnRhYmxlLC5jb2wtbWQtNS5oYW5kc29udGFibGUsLmNv''@;'; put 'put ''bC1tZC02LmhhbmRzb250YWJsZSwuY29sLW1kLTcuaGFuZHNvbnRhYmxlLC5jb2wtbWQtOC5oYW5kc29udGFibGUsLmNvbC1tZC05LmhhbmRzb250YWJsZSAuY29sLXNtLTEuaGFuZHNvbnRhYmxlLC5jb2wtc20tMTAuaGFuZHNvbnRhYmxlLC5jb2wtc20tMTEuaGFuZHNvbnRhYmxlLC5jb2wt''@;'; put 'put ''c20tMTIuaGFuZHNvbnRhYmxlLC5jb2wtc20tMi5oYW5kc29udGFibGUsLmNvbC1zbS0zLmhhbmRzb250YWJsZSwuY29sLXNtLTQuaGFuZHNvbnRhYmxlLC5jb2wtc20tNS5oYW5kc29udGFibGUsLmNvbC1zbS02LmhhbmRzb250YWJsZSwuY29sLXNtLTcuaGFuZHNvbnRhYmxlLC5jb2wtc20t''@;'; put 'put ''OC5oYW5kc29udGFibGUsLmNvbC1zbS05LmhhbmRzb250YWJsZSAuY29sLXhzLTEuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTAuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTEuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTIuaGFuZHNvbnRhYmxlLC5jb2wteHMtMi5oYW5kc29udGFibGUsLmNvbC14cy0z''@;'; put 'put ''LmhhbmRzb250YWJsZSwuY29sLXhzLTQuaGFuZHNvbnRhYmxlLC5jb2wteHMtNS5oYW5kc29udGFibGUsLmNvbC14cy02LmhhbmRzb250YWJsZSwuY29sLXhzLTcuaGFuZHNvbnRhYmxlLC5jb2wteHMtOC5oYW5kc29udGFibGUsLmNvbC14cy05LmhhbmRzb250YWJsZXtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''MDtwYWRkaW5nLXJpZ2h0OjB9LmhhbmRzb250YWJsZSAudGFibGUtc3RyaXBlZD50Ym9keT50cjpudGgtb2YtdHlwZSgybil7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5oYW5kc29udGFibGUgLmhpZGV7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0''@;'; put 'put ''aXZlfS5oYW5kc29udGFibGUgLnd0SGlkZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MH0uaGFuZHNvbnRhYmxlIC53dFNwcmVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjA7aGVpZ2h0OmF1dG99LmhhbmRzb250YWJsZSB0YWJsZSwuaGFuZHNvbnRhYmxlIHRib2R5LC5oYW5kc29u''@;'; put 'put ''dGFibGUgdGhlYWQsLmhhbmRzb250YWJsZSB0ZCwuaGFuZHNvbnRhYmxlIHRoLC5oYW5kc29udGFibGUgaW5wdXQsLmhhbmRzb250YWJsZSB0ZXh0YXJlYSwuaGFuZHNvbnRhYmxlIGRpdntib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96''@;'; put 'put ''LWJveC1zaXppbmc6Y29udGVudC1ib3h9LmhhbmRzb250YWJsZSBpbnB1dCwuaGFuZHNvbnRhYmxlIHRleHRhcmVhe21pbi1oZWlnaHQ6aW5pdGlhbH0uaGFuZHNvbnRhYmxlIHRhYmxlLmh0Q29yZXtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyLXNwYWNpbmc6MDttYXJnaW46MDti''@;'; put 'put ''b3JkZXItd2lkdGg6MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MDtvdXRsaW5lLXdpZHRoOjA7Y3Vyc29yOmRlZmF1bHQ7bWF4LXdpZHRoOm5vbmU7bWF4LWhlaWdodDpub25lfS5oYW5kc29udGFibGUgY29sLC5oYW5kc29udGFibGUgY29sLnJvd0hlYWRlcnt3aWR0aDo1MHB4fS5oYW5k''@;'; put 'put ''c29udGFibGUgdGgsLmhhbmRzb250YWJsZSB0ZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYztoZWlnaHQ6MjJweDtlbXB0eS1jZWxsczpzaG93O2xpbmUtaGVpZ2h0''@;'; put 'put ''OjIxcHg7cGFkZGluZzowIDRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7dmVydGljYWwtYWxpZ246dG9wO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOm5vbmU7b3V0bGluZS13aWR0aDowO3doaXRlLXNwYWNlOnByZS13cmFwfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGgsW2Rpcj1ydGxdLmhh''@;'; put 'put ''bmRzb250YWJsZSB0ZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY31b''@;'; put 'put ''ZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9LmhhbmRzb250YWJsZSB0aDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlIHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNj''@;'; put 'put ''Y2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aDpmaXJzdC1jaGlsZCxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUgLmh0X2Nsb25lX3RvcCB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxlZnQt''@;'; put 'put ''d2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRfY2xvbmVfdG9wIHRoOm50aC1jaGlsZCgyKXtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlLmh0Um93SGVhZGVycyB0''@;'; put 'put ''aGVhZCB0ciB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5odFJvd0hlYWRlcnMgdGhlYWQgdHIgdGg6bnRoLWNoaWxkKDIpe2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNo''@;'; put 'put ''aWxkIHRoLC5oYW5kc29udGFibGUgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjY30uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklu''@;'; put 'put ''bGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGQsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCwuaHRfbWFz''@;'; put 'put ''dGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHgg''@;'; put 'put ''c29saWQgI2NjY31bZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLFtkaXI9cnRsXS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhlYWQg''@;'; put 'put ''dHIgdGg6Zmlyc3QtY2hpbGQsW2Rpcj1ydGxdLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCxbZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3Jk''@;'; put 'put ''ZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaHRfbWFz''@;'; put 'put ''dGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGgs''@;'; put 'put ''Lmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKSB0aGVhZCB0ci5sYXN0Q2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyLmxhc3RDaGls''@;'; put 'put ''ZCB0aHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250YWJsZSB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNmMGYwZjA7Y29sb3I6IzIyMjt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo0MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGhlYWQgdGh7cGFkZGluZzow''@;'; put 'put ''fS5oYW5kc29udGFibGUgdGguYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjY30uaGFuZHNvbnRhYmxlIHRoZWFkIHRoIC5yZWxhdGl2ZXtwYWRkaW5nOjJweCA0cHh9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxLjF9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAud3RCb3JkZXJ7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjB9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuY3VycmVudHt6LWluZGV4OjEwfS5oYW5kc29udGFibGUgLnd0''@;'; put 'put ''Qm9yZGVyLmFyZWF7ei1pbmRleDo4fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmZpbGx7ei1pbmRleDo2fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmNvcm5lcntmb250LXNpemU6MDtjdXJzb3I6Y3Jvc3NoYWlyfS5odF9jbG9uZV9tYXN0ZXJ7ei1pbmRleDoxMDB9Lmh0X2Nsb25lX2lubGlu''@;'; put 'put ''ZV9zdGFydHt6LWluZGV4OjEyMH0uaHRfY2xvbmVfYm90dG9te3otaW5kZXg6MTMwfS5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lcnt6LWluZGV4OjE1MH0uaHRfY2xvbmVfdG9we3otaW5kZXg6MTYwfS5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lcnt6LWluZGV4''@;'; put 'put ''OjE4MH0uaGFuZHNvbnRhYmxlIGNvbC5oaWRkZW57d2lkdGg6MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSB0ci5oaWRkZW4sLmhhbmRzb250YWJsZSB0ci5oaWRkZW4gdGQsLmhhbmRzb250YWJsZSB0ci5oaWRkZW4gdGh7ZGlzcGxheTpub25lfS5odF9tYXN0ZXIsLmh0X2Nsb25lX2lubGlu''@;'; put 'put ''ZV9zdGFydCwuaHRfY2xvbmVfdG9wLC5odF9jbG9uZV9ib3R0b217b3ZlcmZsb3c6aGlkZGVufS5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmF1dG99LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZT50aGVhZCwuaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGFibGUu''@;'; put 'put ''aHRDb3JlPnRib2R5PnRyPnRoLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX2lubGluZV9zdGFydCB0YWJsZS5odENvcmU+dGhlYWR7dmlzaWJpbGl0eTpoaWRkZW59Lmh0X2Nsb25lX3RvcCAud3RIb2xkZXIsLmh0X2Nsb25lX2lubGluZV9zdGFydCAud3RIb2xkZXIsLmh0X2Nsb25lX2JvdHRv''@;'; put 'put ''bSAud3RIb2xkZXJ7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGV7cG9zaXRpb246cmVsYXRpdmU7dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbjtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2''@;'; put 'put ''ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMzczNzM3fS5oYW5kc29udGFibGUgYXtjb2xvcjojMTA0YWNjfS5oYW5kc29udGFibGUuaHRBdXRvU2l6ZXt2aXNpYmlsaXR5OmhpZGRlbjtsZWZ0Oi05OTAwMHB4O3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO3RvcDotOTkwMDBweH0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmJlYmEhaW1wb3J0YW50fS5oYW5kc29udGFibGUgdGQuaHROb1dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGQuaW52aXNpYmxlU2VsZWN0''@;'; put 'put ''aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9ue291dGxpbmU6bm9uZX0uaGFuZHNvbnRhYmxlIHRkLmludmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb257YmFja2dyb3VuZDojZmZmMH0u''@;'; put 'put ''aG90LWRpc3BsYXktbGljZW5zZS1pbmZve2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxPeHlnZW4sVWJ1bnR1LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NDAwO2Nv''@;'; put 'put ''bG9yOiMzNzM3Mzc7cGFkZGluZzo1cHggMCAzcHg7dGV4dC1hbGlnbjpsZWZ0fS5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8gYXtjb2xvcjojMTA0YWNjO2ZvbnQtc2l6ZToxMHB4fS5oYW5kc29udGFibGUgLmh0Rm9jdXNDYXRjaGVye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTE7b3Bh''@;'; put 'put ''Y2l0eTowO2JvcmRlcjowO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDowO2hlaWdodDowfS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Y3Vyc29yOmNvbC1yZXNpemU7ei1pbmRleDoyMTA7d2lkdGg6NXB4O2hlaWdodDoyNXB4fS5o''@;'; put 'put ''YW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2N1cnNvcjpyb3ctcmVzaXplO3otaW5kZXg6MjEwO2hlaWdodDo1cHg7d2lkdGg6NTBweH0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyOmhvdmVyLC5oYW5kc29udGFibGUgLm1h''@;'; put 'put ''bnVhbENvbHVtblJlc2l6ZXIuYWN0aXZlLC5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXI6aG92ZXIsLmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMzRhOWRifS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXJHdWlk''@;'; put 'put ''ZXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDp1bnNldDt0b3A6MDtiYWNrZ3JvdW5kLWNvbG9yOiMzNGE5ZGI7ZGlzcGxheTpub25lO3dpZHRoOjA7Ym9yZGVyLXJpZ2h0OjFweCBkYXNoZWQgIzc3Nztib3JkZXItbGVmdDpub25lO21hcmdpbi1sZWZ0OjVweDttYXJnaW4tcmlnaHQ6dW5zZXR9''@;'; put 'put ''W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplckd1aWRle2xlZnQ6dW5zZXQ7Ym9yZGVyLWxlZnQ6MXB4IGRhc2hlZCAjNzc3O2JvcmRlci1yaWdodDpub25lO21hcmdpbi1yaWdodDo1cHg7bWFyZ2luLWxlZnQ6dW5zZXR9LmhhbmRzb250YWJsZSAubWFudWFsUm93''@;'; put 'put ''UmVzaXplckd1aWRle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiMzNGE5ZGI7ZGlzcGxheTpub25lO2hlaWdodDowO2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjNzc3O21hcmdpbi10b3A6NXB4fS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVt''@;'; put 'put ''blJlc2l6ZXJHdWlkZS5hY3RpdmUsLmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplckd1aWRlLmFjdGl2ZXtkaXNwbGF5OmJsb2NrO3otaW5kZXg6MjA5fS5oYW5kc29udGFibGUgdGQuYXJlYSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMiwuaGFu''@;'; put 'put ''ZHNvbnRhYmxlIHRkLmFyZWEtMywuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNCwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNiwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtN3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWE6YmVmb3JlLC5o''@;'; put 'put ''YW5kc29udGFibGUgdGQuYXJlYS0xOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTM6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmUsLmhhbmRzb250YWJs''@;'; put 'put ''ZSB0ZC5hcmVhLTY6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7YmFja2dyb3VuZDojMDA1ZWZmfS5oYW5kc29udGFibGUgdGQuYXJlYTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRkLmFy''@;'; put 'put ''ZWEtMTpiZWZvcmV7b3BhY2l0eTouMn0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmV7b3BhY2l0eTouMjd9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTM6YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZXtvcGFjaXR5Oi40MX0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IHRkLmFyZWEtNTpiZWZvcmV7b3BhY2l0eTouNDd9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTY6YmVmb3Jle29wYWNpdHk6LjU0fS5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtvcGFjaXR5Oi41OH0uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmN1cnJlbnQsLmhhbmRzb250YWJsZSB0aGVh''@;'; put 'put ''ZCB0aC5jdXJyZW50e2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMnB4ICM0Yjg5ZmZ9LmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGN9LmhhbmRzb250YWJsZSB0Ym9k''@;'; put 'put ''eSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCwuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6IzhlYjBlNztjb2xvcjojMDAwfS5oYW5kc29udGFibGVJbnB1dHtib3JkZXI6bm9uZTtvdXRsaW5lLXdpZHRoOjA7bWFyZ2luOjA7cGFk''@;'; put 'put ''ZGluZzoxcHggNXB4IDA7Zm9udC1mYW1pbHk6aW5oZXJpdDtsaW5lLWhlaWdodDoyMXB4O2ZvbnQtc2l6ZTppbmhlcml0O2JveC1zaGFkb3c6MCAwIDAgMnB4ICM1MjkyZjcgaW5zZXQ7cmVzaXplOm5vbmU7ZGlzcGxheTpibG9jaztjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6MDtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOiNmZmY7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlSW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lfS5oYW5kc29udGFibGVJbnB1dEhvbGRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lmh0U2VsZWN0RWRpdG9ye3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlfS5odFNlbGVjdEVkaXRvciBzZWxlY3R7LXdlYmtpdC1hcHBlYXJhbmNlOm1lbnVsaXN0LWJ1dHRvbiFpbXBvcnRhbnQ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6MnB4IHNvbGlkICM0Yjg5ZmY7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0uaHRTZWxl''@;'; put 'put ''Y3RFZGl0b3Igc2VsZWN0OmZvY3Vze291dGxpbmU6bm9uZX0uaHRTZWxlY3RFZGl0b3IgLmh0QXV0b2NvbXBsZXRlQXJyb3d7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0RGltbWVke2NvbG9yOiM3Nzd9LmhhbmRzb250YWJsZSAuaHRTdWJtZW51e3Bvc2l0aW9uOnJlbGF0aXZlfS5o''@;'; put 'put ''YW5kc29udGFibGUgLmh0U3VibWVudSA6YWZ0ZXJ7Y29udGVudDoiXDI1YjYiO2NvbG9yOiM3Nzc7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB4O2ZvbnQtc2l6ZTo5cHh9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRTdWJtZW51IDphZnRlcntjb250ZW50OiIifVtkaXI9cnRsXS5oYW5k''@;'; put 'put ''c29udGFibGUgLmh0U3VibWVudSA6YmVmb3Jle2NvbnRlbnQ6IlwyNWMwIjtjb2xvcjojNzc3O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NXB4O2ZvbnQtc2l6ZTo5cHh9LmhhbmRzb250YWJsZSAuaHRMZWZ0e3RleHQtYWxpZ246bGVmdH0uaGFuZHNvbnRhYmxlIC5odENlbnRlcnt0ZXh0LWFs''@;'; put 'put ''aWduOmNlbnRlcn0uaGFuZHNvbnRhYmxlIC5odFJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmhhbmRzb250YWJsZSAuaHRKdXN0aWZ5e3RleHQtYWxpZ246anVzdGlmeX0uaGFuZHNvbnRhYmxlIC5odFRvcHt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmhhbmRzb250YWJsZSAuaHRNaWRkbGV7dmVydGlj''@;'; put 'put ''YWwtYWxpZ246bWlkZGxlfS5oYW5kc29udGFibGUgLmh0Qm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uaGFuZHNvbnRhYmxlIC5odFBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LmhhbmRzb250YWJsZS5saXN0Ym94e21hcmdpbjowfS5oYW5kc29udGFibGUubGlzdGJveCAuaHRfbWFzdGVy''@;'; put 'put ''IHRhYmxle2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7YmFja2dyb3VuZDojZmZmfS5oYW5kc29udGFibGUubGlzdGJveCB0aCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmxhc3Qt''@;'; put 'put ''Y2hpbGQgdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmZpcnN0LWNoaWxkIHRkLC5oYW5kc29udGFibGUubGlzdGJveCB0ZHtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5oYW5kc29udGFibGUubGlzdGJveCB0aCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGR7d2hpdGUt''@;'; put 'put ''c3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmhhbmRzb250YWJsZS5saXN0Ym94IHRkLmh0RGltbWVke2N1cnNvcjpkZWZhdWx0O2NvbG9yOmluaGVyaXQ7Zm9udC1zdHlsZTppbmhlcml0fS5oYW5kc29udGFibGUubGlzdGJveCAud3RCb3JkZXJ7dmlzaWJpbGl0eTpoaWRk''@;'; put 'put ''ZW59LmhhbmRzb250YWJsZS5saXN0Ym94IHRyIHRkLmN1cnJlbnQsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmhvdmVyIHRke2JhY2tncm91bmQ6I2VlZX0uaHRfZWRpdG9yX2hpZGRlbnt6LWluZGV4Oi0xfS5odF9lZGl0b3JfdmlzaWJsZXt6LWluZGV4OjIwMH0uaGFuZHNvbnRhYmxlIHRk''@;'; put 'put ''Lmh0U2VhcmNoUmVzdWx0e2JhY2tncm91bmQ6I2ZjZWRkOTtjb2xvcjojNTgzNzA3fS5oYW5kc29udGFibGUubW9iaWxlLC5oYW5kc29udGFibGUubW9iaWxlIC53dEhvbGRlcnstd2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6''@;'; put 'put ''bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uaGFuZHNvbnRhYmxlLm1vYmlsZSAuaGFuZHNvbnRhYmxlSW5wdXQ6Zm9jdXN7Ym94LXNoYWRvdzowIDAgMCAycHggIzUyOTJmNyBpbnNldDstd2Vi''@;'; put 'put ''a2l0LWFwcGVhcmFuY2U6bm9uZX0uaGFuZHNvbnRhYmxlIC50b3BTZWxlY3Rpb25IYW5kbGUsLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEsLmhhbmRzb250YWJsZSAuYm90dG9tU2VsZWN0aW9uSGFuZGxlLC5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhh''@;'; put 'put ''bmRsZS1IaXRBcmVhe2xlZnQ6LTEwMDAwcHg7cmlnaHQ6dW5zZXQ7dG9wOi0xMDAwMHB4O3otaW5kZXg6OTk5OX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC50b3BTZWxlY3Rpb25IYW5kbGUsW2Rpcj1ydGxdLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEsW2Rpcj1y''@;'; put 'put ''dGxdLmhhbmRzb250YWJsZSAuYm90dG9tU2VsZWN0aW9uSGFuZGxlLFtkaXI9cnRsXS5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhe3JpZ2h0Oi0xMDAwMHB4O2xlZnQ6dW5zZXR9LmhhbmRzb250YWJsZS5oaWRlLXR3ZWVue2FuaW1hdGlvbjpvcGFjaXR5LWhp''@;'; put 'put ''ZGUgLjNzO2FuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHM7LXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfS5oYW5kc29udGFibGUuc2hvdy10d2VlbnthbmltYXRpb246b3BhY2l0eS1zaG93IC4zczthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzOy13ZWJraXQtYW5p''@;'; put 'put ''bWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc30uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiNiYmI7Y3Vyc29yOmRlZmF1bHQ7d2lkdGg6MTZweDt0ZXh0LWFsaWduOmNlbnRlcn1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5odEF1dG9jb21wbGV0ZUFycm93e2Zsb2F0OmxlZnR9LmhhbmRzb250YWJsZSB0ZC5odEludmFsaWQgLmh0QXV0b2NvbXBsZXRlQXJyb3d7Y29sb3I6IzU1NX0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZCAuaHRBdXRvY29tcGxldGVBcnJvdzpob3Zlcntjb2xvcjojMWExYTFhfS5oYW5k''@;'; put 'put ''c29udGFibGUgdGQgLmh0QXV0b2NvbXBsZXRlQXJyb3c6aG92ZXJ7Y29sb3I6Izc3N30uaGFuZHNvbnRhYmxlIHRkLmFyZWEgLmh0QXV0b2NvbXBsZXRlQXJyb3d7Y29sb3I6I2QzZDNkM30uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dC5ub1ZhbHVle29wYWNpdHk6LjV9''@;'; put 'put ''LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVyTGFiZWx7Zm9udC1zaXplOmluaGVyaXQ7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlckxhYmVsLmZ1bGxXaWR0aHt3''@;'; put 'put ''aWR0aDoxMDAlfS5oYW5kc29udGFibGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9ye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7bGVmdDp1bnNldDtyaWdodDo1cHg7Ym9yZGVyOjFweCBzb2xpZCAjQTZBNkE2O2xpbmUtaGVpZ2h0OjhweDtjb2xv''@;'; put 'put ''cjojMjIyO2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTBweDt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaGFkb3c6MCAwIDAgM3B4ICNlZWU7YmFja2dyb3VuZDojZWVlO3RleHQtYWxpZ246Y2VudGVyfVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmNv''@;'; put 'put ''bGxhcHNpYmxlSW5kaWNhdG9ye3JpZ2h0OnVuc2V0O2xlZnQ6NXB4fS5oYW5kc29udGFibGVbZGlyPWx0cl0gdGhlYWQgdGg6aGFzKC5jb2xsYXBzaWJsZUluZGljYXRvcikgZGl2Lmh0UmlnaHQgc3Bhbi5jb2xIZWFkZXJ7bWFyZ2luLXJpZ2h0OjIwcHh9LmhhbmRzb250YWJsZVtkaXI9cnRs''@;'; put 'put ''XSB0aGVhZCB0aDpoYXMoLmNvbGxhcHNpYmxlSW5kaWNhdG9yKSBkaXYuaHRMZWZ0IHNwYW4uY29sSGVhZGVye21hcmdpbi1sZWZ0OjIwcHh9LmhhbmRzb250YWJsZSAuY29sdW1uU29ydGluZ3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIGRpdi5odFJpZ2h0IHNw''@;'; put 'put ''YW5bY2xhc3MqPWFzY2VuZGluZ10sLmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1kZXNjZW5kaW5nXXttYXJnaW4tcmlnaHQ6MTBweDttYXJnaW4tbGVmdDotMTBweH0uaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9YXNj''@;'; put 'put ''ZW5kaW5nXSwuaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9ZGVzY2VuZGluZ117bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6LTEwcHh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1hc2NlbmRpbmddOm9ubHkt''@;'; put 'put ''Y2hpbGQsLmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1kZXNjZW5kaW5nXTpvbmx5LWNoaWxke21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0Oi0xNXB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2Lmh0TGVmdCBzcGFuW2NsYXNzKj1hc2NlbmRp''@;'; put 'put ''bmddOm9ubHktY2hpbGQsLmhhbmRzb250YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPWRlc2NlbmRpbmddOm9ubHktY2hpbGR7bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6LTE1cHh9LmhhbmRzb250YWJsZSAuY29sdW1uU29ydGluZy5zb3J0QWN0aW9uOmhvdmVy''@;'; put 'put ''e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmJlZm9yZXt0b3A6NTAlO21hcmdpbi10b3A6LTZweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTtyaWdodDotOXB4O2xlZnQ6dW5zZXQ7Y29udGVudDoiIjtoZWlnaHQ6MTBweDt3aWR0aDo1cHg7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb24teDpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHNwYW4u''@;'; put 'put ''Y29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YmVmb3Jle3BhZGRpbmctcmlnaHQ6OHB4O3BhZGRpbmctbGVmdDowO2xlZnQ6LTlweDtyaWdodDp1bnNldDtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6bGVmdH0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuYXNjZW5kaW5n''@;'; put 'put ''OmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQW9DQU1BQUFESjd5cnBBQUFBS2xCTVZFVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS0U4''@;'; put 'put ''NklBQUFBRFhSU1RsTUFCQkVtUkdwcmxKVzcyZTc3dFRrVEt3QUFBRk5KUkVGVWVBSHR6amtTZ0NBVUJOSFBnc295OTcrdWxHWFJxSkU1TCt4a3hvWXQyVWRzTGI1YnFGSU56K2FMdXVMbjVySXUyUmtPM2ZacFdFTmltTmdpdzZpQllSVFBNTEpqR0Z4UVoxaHh4Yi94QkkxcUM4azM5Q2RLQUFB''@;'; put 'put ''QUFFbEZUa1N1UW1DQyl9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLmRlc2NlbmRpbmc6YmVmb3Jle2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBb0NBTUFBQURKN3lycEFB''@;'; put 'put ''QUFLbEJNVkVVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLRTg2SUFBQUFEWFJTVGxNQUJCRW1SR3BybEpXNzJlNzd0VGtUS3dBQUFGSkpSRUZVZUFIdHpqa1NnQ0FRUk5GbVFZVVo3bjlkS1V2cnUwVG12UEFuM2JyMFFmZ2RaNXh4Nngr''@;'; put 'put ''clFuMjNHcVRZbnExRkRjbnV6WklPMldtZWRWcUlSVnhnR0tFeWpOZ1lSaktHa1oxaEZJWjNJNzBMeU0wVnRVOEFBQUFBU1VWT1JLNUNZSUk9KX0uaHRHaG9zdFRhYmxlIC5odENvcmUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKTpiZWZvcmV7''@;'; put 'put ''Y29udGVudDoiKiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1yaWdodDoyMHB4fS5oYW5kc29udGFibGUuaHRHaG9zdFRhYmxlIHRhYmxlIHRoZWFkIHRoe2JvcmRlci1ib3R0b20td2lkdGg6MH0uaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJs''@;'; put 'put ''ZSB0Ym9keSB0ciB0aCwuaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJsZSB0Ym9keSB0ciB0ZHtib3JkZXItdG9wLXdpZHRoOjB9LmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbHtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIC5odENvbW1lbnRDZWxsOmFmdGVye2NvbnRl''@;'; put 'put ''bnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtsZWZ0OnVuc2V0O2JvcmRlci1sZWZ0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOjZweCBzb2xpZCBibGFja31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odENvbW1lbnRDZWxs''@;'; put 'put ''OmFmdGVye2xlZnQ6MDtyaWdodDp1bnNldDtib3JkZXItcmlnaHQ6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0Om5vbmV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudHN7ZGlzcGxheTpub25lO3otaW5kZXg6MTA1OTtwb3NpdGlvbjphYnNvbHV0ZX0uaHRDb21tZW50''@;'; put 'put ''c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWF7Ym94LXNoYWRvdzojMDAwMDAwMWUgMCAxcHggM3B4LCMwMDAwMDAzZCAwIDFweCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDpub25lO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6I2ZmZjt3aWR0aDoyMTVweDtoZWlnaHQ6OTBweDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweDtvdXRsaW5lOjAhaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfVtkaXI9cnRsXS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRUZXh0QXJlYXtib3Jk''@;'; put 'put ''ZXItcmlnaHQ6M3B4IHNvbGlkICNjY2M7Ym9yZGVyLWxlZnQ6bm9uZX0uaHRDb21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWE6Zm9jdXN7Ym94LXNoYWRvdzojMDAwMDAwMWUgMCAxcHggM3B4LCMwMDAwMDAzZCAwIDFweCAycHgsaW5zZXQgMCAwIDAgMXB4ICM1MjkyZjc7Ym9y''@;'; put 'put ''ZGVyLWxlZnQ6M3B4IHNvbGlkICM1MjkyZjc7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdLmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhOmZvY3Vze2JvcmRlci1yaWdodDozcHggc29saWQgIzUyOTJmNztib3JkZXItbGVmdDpub25lfS8qIQogKiBIYW5kc29udGFi''@;'; put 'put ''bGUgQ29udGV4dE1lbnUKICovLmh0Q29udGV4dE1lbnU6bm90KC5odEdob3N0VGFibGUpe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwNjB9Lmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX3RvcCwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfYm90dG9tLC5odENvbnRl''@;'; put 'put ''eHRNZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5odENvbnRleHRNZW51IC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lcntkaXNwbGF5Om5vbmV9Lmh0Q29udGV4dE1lbnUgLmh0X21h''@;'; put 'put ''c3RlciB0YWJsZS5odENvcmV7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci1ib3R0b20td2lkdGg6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtd2lkdGg6MnB4fVtkaXI9cnRsXS5odENvbnRleHRN''@;'; put 'put ''ZW51IC5odF9tYXN0ZXIgdGFibGUuaHRDb3Jle2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5odENvbnRleHRNZW51LmhhbmRzb250YWJsZTpmb2N1c3tvdXRsaW5lOm5vbmV9Lmh0Q29udGV4dE1lbnUgLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5o''@;'; put 'put ''dENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRke2JhY2tncm91bmQ6I2ZmZjtib3JkZXItd2lkdGg6MDtwYWRkaW5nOjRweCA2cHggMDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lmh0Q29udGV4dE1l''@;'; put 'put ''bnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowfVtkaXI9cnRsXS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNo''@;'; put 'put ''aWxke2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjB9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaW1tZWR7Zm9udC1zdHlsZTpub3JtYWw7Y29sb3I6IzMyMzIzMn0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5jdXJyZW50e2JhY2tn''@;'; put 'put ''cm91bmQ6I2YzZjNmM30uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MDtjdXJzb3I6ZGVmYXVsdH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVk''@;'; put 'put ''e2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ci5odEhpZGRlbntkaXNwbGF5''@;'; put 'put ''Om5vbmV9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6NnB4fVtkaXI9cnRsXS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1yaWdodDoxMHB4O21h''@;'; put 'put ''cmdpbi1sZWZ0OjZweH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHg7cmlnaHQ6MH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bh''@;'; put 'put ''bi5zZWxlY3RlZHtyaWdodDo0cHg7bGVmdDowfS5odENvbnRleHRNZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn10ZXh0YXJlYS5IYW5kc29udGFibGVDb3B5UGFzdGV7cG9zaXRpb246Zml4ZWQhaW1wb3J0YW50O3RvcDowIWltcG9ydGFudDtyaWdodDoxMDAlIWlt''@;'; put 'put ''cG9ydGFudDtvdmVyZmxvdzpoaWRkZW47b3BhY2l0eTowO291dGxpbmU6MCBub25lIWltcG9ydGFudH0vKiEKICogSGFuZHNvbnRhYmxlIERyb3Bkb3duTWVudQogKi8uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBle2JhY2tncm91bmQ6I2VlZTtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4''@;'; put 'put ''IHNvbGlkICNiYmI7Y29sb3I6I2JiYjtmb250LXNpemU6OXB4O2xpbmUtaGVpZ2h0OjlweDtwYWRkaW5nOjJweDttYXJnaW46M3B4IDFweCAwIDVweDtmbG9hdDpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBle2Zsb2F0OmxlZnR9LmhhbmRzb250YWJsZVtkaXI9cnRs''@;'; put 'put ''XSAuY2hhbmdlVHlwZXttYXJnaW46M3B4IDVweCAwIDFweH0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBlOmJlZm9yZXtjb250ZW50OiJcMjViYyAgIn0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBlOmhvdmVye2JvcmRlcjoxcHggc29saWQgIzc3Nztjb2xvcjojNzc3O2N1cnNvcjpwb2ludGVy''@;'; put 'put ''fS5odERyb3Bkb3duTWVudTpub3QoLmh0R2hvc3RUYWJsZSl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTA2MH0uaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX3RvcCwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaHREcm9wZG93bk1lbnUgLmh0X2Ns''@;'; put 'put ''b25lX2lubGluZV9zdGFydCwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5odERyb3Bkb3duTWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXJ7ZGlzcGxheTpub25lfS5odERyb3Bkb3duTWVudSB0YWJsZS5odENvcmV7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci1ib3R0b20td2lkdGg6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtd2lkdGg6MnB4fVtkaXI9cnRsXS5odERyb3Bkb3duTWVudSB0YWJsZS5odENvcmV7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItbGVmdC13aWR0aDoycHh9Lmh0RHJvcGRvd25NZW51LmhhbmRzb250YWJsZTpmb2N1c3tvdXRsaW5lOm5vbmV9Lmh0RHJvcGRvd25NZW51IC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIg''@;'; put 'put ''dGR7YmFja2dyb3VuZDojZmZmO2JvcmRlci13aWR0aDowO3BhZGRpbmc6NHB4IDZweCAwO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3Qt''@;'; put 'put ''Y2hpbGR7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfVtkaXI9cnRsXS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2Jv''@;'; put 'put ''cmRlci1yaWdodC13aWR0aDowfS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpbW1lZHtmb250LXN0eWxlOm5vcm1hbDtjb2xvcjojMzIzMjMyfS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5jdXJyZW50e2JhY2tncm91bmQ6I2U5ZTllOX0uaHREcm9wZG93''@;'; put 'put ''bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3J7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNjtoZWlnaHQ6MDtwYWRkaW5nOjA7Y3Vyc29yOmRlZmF1bHR9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWR7Y29sb3I6Izk5OX0uaHREcm9wZG93''@;'; put 'put ''bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0uaHREcm9wZG93bk1lbnU6bm90KC5odEdob3N0VGFibGUpIHRhYmxlIHRib2R5IHRyLmh0SGlkZGVue2Rpc3BsYXk6bm9uZX0uaHREcm9wZG93''@;'; put 'put ''bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6MTBweH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLXJpZ2h0OjEwcHg7bWFyZ2luLWxlZnQ6MTBw''@;'; put 'put ''eH0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4O3JpZ2h0OjB9W2Rpcj1ydGxdLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIGRpdiBzcGFuLnNlbGVjdGVk''@;'; put 'put ''e3JpZ2h0OjRweDtsZWZ0OjB9Lmh0RHJvcGRvd25NZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn0vKiEKICogSGFuZHNvbnRhYmxlIEZpbHRlcnMKICovLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51Om5vdCguaHRHaG9zdFRhYmxlKXtkaXNwbGF5Om5vbmU7cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7ei1pbmRleDoxMDcwfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfdG9wLC5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfYm90dG9tLC5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0LC5odEZpbHRlcnND''@;'; put 'put ''b25kaXRpb25zTWVudSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIsLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lcntkaXNwbGF5Om5vbmV9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlLmh0Q29yZXtib3Jk''@;'; put 'put ''ZXI6MXB4IHNvbGlkICNiYmI7Ym9yZGVyLWJvdHRvbS13aWR0aDoycHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjJweH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZHtiYWNr''@;'; put 'put ''Z3JvdW5kOiNmZmY7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJz''@;'; put 'put ''dC1jaGlsZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjB9W2Rpcj1ydGxdLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0''@;'; put 'put ''LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmN1cnJlbnR7''@;'; put 'put ''YmFja2dyb3VuZDojZTllOWU5fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQu''@;'; put 'put ''aHREaXNhYmxlZHtjb2xvcjojOTk5fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0''@;'; put 'put ''ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tbGVmdDoxMHB4O21hcmdpbi1yaWdodDoxMHB4fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHh9Lmh0RmlsdGVy''@;'; put 'put ''c0NvbmRpdGlvbnNNZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odE1lbnVGaWx0ZXJpbmd7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2M7aGVpZ2h0OjEzNXB4O292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odF9tYXN0''@;'; put 'put ''ZXIgdGFibGUgdGQuaHRDdXN0b21NZW51UmVuZGVyZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2N1cnNvcjphdXRvfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVMYWJlbHtmb250LXNpemU6Ljc1ZW19LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUFjdGlvbkJhcnt0ZXh0LWFsaWdu''@;'; put 'put ''OmNlbnRlcjtwYWRkaW5nLXRvcDoxMHB4O3BhZGRpbmctYm90dG9tOjNweH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uLmJvcmRlcntib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgI2NjYyFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlv''@;'; put 'put ''biAuaHRVSUlucHV0e3BhZGRpbmc6MCAwIDVweH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51VmFsdWV7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2MhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVWYWx1ZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoe3Bh''@;'; put 'put ''ZGRpbmc6MH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uIC5odFVJSW5wdXQgaW5wdXQsLmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVlIC5odFVJTXVsdGlwbGVTZWxlY3RTZWFyY2ggaW5wdXR7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6Ljc1ZW07''@;'; put 'put ''cGFkZGluZzo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lmh0VUlNdWx0aXBsZVNlbGVjdCAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzphdXRvfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc0FjdGl2ZSAuY2hhbmdlVHlwZXtib3JkZXI6MXB4IHNvbGlkICM1MDky''@;'; put 'put ''NzI7Y29sb3I6IzE4ODA0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNkMmUwZDl9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoxMHB4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxl''@;'; put 'put ''ZnQ6MTBweH0uaGFuZHNvbnRhYmxlIC5odFVJQ2xlYXJBbGwsLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbHtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIC5odFVJQ2xlYXJBbGwgYSwuaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0QWxsIGF7Zm9udC1zaXplOi43NWVtfS5o''@;'; put 'put ''YW5kc29udGFibGUgLmh0VUlTZWxlY3Rpb25Db250cm9sc3t0ZXh0LWFsaWduOnJpZ2h0fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3Rpb25Db250cm9sc3t0ZXh0LWFsaWduOmxlZnR9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXR7ZGlzcGxheTppbmxp''@;'; put 'put ''bmUtYmxvY2s7bWFyZ2luOjAgNXB4IDAgMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7aGVpZ2h0OjFlbX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dHttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OjB9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0e3Bh''@;'; put 'put ''ZGRpbmc6M3B4IDAgN3B4O3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dCBpbnB1dHtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNkMmQxZDF9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0SWNvbntwb3NpdGlvbjph''@;'; put 'put ''YnNvbHV0ZX0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbiBpbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Y29sb3I6IzAwMDtjdXJzb3I6cG9p''@;'; put 'put ''bnRlcjtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTouNzVlbTtmb250LXdlaWdodDo3MDA7aGVpZ2h0OjE5cHg7bWluLXdpZHRoOjY0cHh9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b24gaW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNiOWI5Yjl9LmhhbmRzb250YWJs''@;'; put 'put ''ZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PS3ttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoxMHB4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0t7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTBweH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRV''@;'; put 'put ''SUJ1dHRvbk9LIGlucHV0e2JhY2tncm91bmQtY29sb3I6IzBmOWQ1ODtib3JkZXItY29sb3I6IzE4ODA0ZTtjb2xvcjojZmZmfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0sgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOiM5MmRkOGQ7Ym9yZGVyLWNv''@;'; put 'put ''bG9yOiM3Y2I4Nzg7Y29sb3I6IzAwMH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9LIGlucHV0OmhvdmVye2JvcmRlci1jb2xvcjojMWE2ZjQ2fS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3R7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWJvdHRvbTo3cHg7cG9zaXRpb246cmVs''@;'; put 'put ''YXRpdmV9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdENhcHRpb257YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2QyZDFkMTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTouNzVlbTtmb250LXdlaWdodDo3MDA7cGFkZGlu''@;'; put 'put ''ZzozcHggMjBweCAzcHggMTBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdENhcHRpb246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JvcmRlcjoxcHggc29saWQgI2I5Yjli''@;'; put 'put ''OX0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0RHJvcGRvd246YWZ0ZXJ7Y29udGVudDoiXDI1YjIiO2ZvbnQtc2l6ZTo3cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MH0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0RHJvcGRvd246YmVmb3Jle2NvbnRlbnQ6IlwyNWJjIjtm''@;'; put 'put ''b250LXNpemU6N3B4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjhweH0uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3QgLmhhbmRzb250YWJsZSAuaHRDb3Jle2JvcmRlcjpub25lfS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdCAuaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5odENvcmUgdGQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaCBpbnB1dHtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNkMmQxZDE7cGFkZGluZzozcHh9LmhhbmRzb250YWJsZSAuaHRVSVJh''@;'; put 'put ''ZGlve2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjVweDtoZWlnaHQ6MTAwJX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW97bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6NXB4fS5oYW5kc29udGFibGUgLmh0VUlSYWRpbzpsYXN0LWNo''@;'; put 'put ''aWxke21hcmdpbi1yaWdodDowfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDouNWV4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXXttYXJnaW4tcmlnaHQ6MDttYXJn''@;'; put 'put ''aW4tbGVmdDouNWV4fS5oYW5kc29udGFibGUgLmh0VUlSYWRpbyBsYWJlbHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudU9wZXJhdG9yc3twYWRkaW5nLWJvdHRvbTo1cHh9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW57cG9zaXRp''@;'; put 'put ''b246cmVsYXRpdmV9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW46YWZ0ZXIsLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbjpiZWZvcmV7Y29sb3I6I2JiYjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2ZvbnQtc2l6ZTo1cHQ7dHJhbnNmb3JtOnRyYW5zbGF0''@;'; put 'put ''ZVkoLTUwJSl9LmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIHRoLmFmdGVySGlkZGVuQ29sdW1uIGRpdi5odExlZnR7bWFyZ2luLWxlZnQ6MTBweH0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIHRoLmJlZm9y''@;'; put 'put ''ZUhpZGRlbkNvbHVtbiBkaXYuaHRSaWdodCwuaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIHRoLmFmdGVySGlkZGVuQ29sdW1uIGRpdi5odFJpZ2h0e21hcmdpbi1yaWdodDoxMHB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gdGguYmVmb3JlSGlkZGVuQ29sdW1uIGRpdi5odExlZnR7bWFyZ2luLWxl''@;'; put 'put ''ZnQ6MTBweH0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRlcntyaWdodDoxcHg7Y29udGVudDoiXDI1YzAifVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVye3JpZ2h0OmluaXRpYWw7bGVmdDoxcHg7Y29udGVudDoiXDI1YjYi''@;'; put 'put ''fS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW46YmVmb3Jle2xlZnQ6MXB4O2NvbnRlbnQ6IlwyNWI2In1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZXtyaWdodDoxcHg7bGVmdDppbml0aWFsO2NvbnRlbnQ6IlwyNWMwIn0vKiEKICog''@;'; put 'put ''SGFuZHNvbnRhYmxlIEhpZGRlblJvd3MKICovLmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3c6YmVmb3JlLC5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Sb3c6YWZ0ZXJ7Y29sb3I6I2JiYjtmb250LXNpemU6NnB0O2xpbmUtaGVpZ2h0OjZwdDtwb3NpdGlvbjphYnNvbHV0ZTts''@;'; put 'put ''ZWZ0OjJweH0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlblJvdywuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuUm93e3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuUm93OmJlZm9yZXtjb250ZW50OiJcMjViMiI7Ym90dG9tOjJweH0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIHRoLmFmdGVySGlkZGVuUm93OmFmdGVye2NvbnRlbnQ6IlwyNWJjIjt0b3A6MnB4fS5oYW5kc29udGFibGUuaHRfX3NlbGVjdGlvbi0tcm93cyB0Ym9keSB0aC5iZWZvcmVIaWRkZW5Sb3cuaHRfX2hpZ2hsaWdodDpiZWZvcmUsLmhhbmRzb250YWJsZS5odF9fc2VsZWN0aW9uLS1y''@;'; put 'put ''b3dzIHRib2R5IHRoLmFmdGVySGlkZGVuUm93Lmh0X19oaWdobGlnaHQ6YWZ0ZXJ7Y29sb3I6I2VlZX0uaGFuZHNvbnRhYmxlIHRkLmFmdGVySGlkZGVuUm93LmZpcnN0VmlzaWJsZVJvdywuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuUm93LmZpcnN0VmlzaWJsZVJvd3tib3JkZXItdG9w''@;'; put 'put ''OjFweCBzb2xpZCAjQ0NDfS5odFJvd0hlYWRlcnMgLmh0X21hc3Rlci5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciB0aDpudGgtY2hpbGQoMiksLmh0Um93SGVhZGVycyAuaHRfbWFzdGVyLmlubmVyQm9yZGVySW5saW5lU3RhcnR+Lmh0''@;'; put 'put ''X2Nsb25lX2lubGluZV9zdGFydCB0ZDpmaXJzdC1vZi10eXBle2JvcmRlci1sZWZ0OjAgbm9uZX0uaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLmFmdGVyLXNlbGVjdGlvbi0tY29sdW1ucyB0aGVhZCB0aC5odF9faGlnaGxpZ2h0e2N1cnNvcjptb3ZlO2N1cnNvcjpncmFifS5o''@;'; put 'put ''YW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUub24tbW92aW5nLS1jb2x1bW5zICosLmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgdGhlYWQgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYmJpbmd9LmhhbmRz''@;'; put 'put ''b250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgLm1hbnVhbENvbHVtblJlc2l6ZXJ7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUt''@;'; put 'put ''LWJhY2tsaWdodHtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MTAwJTtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZXtiYWNrZ3JvdW5kOiM3NTc1NzU7d2lkdGg6MnB4O3RvcDowO21hcmdpbi1pbmxpbmUtc3RhcnQ6LTFweDttYXJn''@;'; put 'put ''aW4taW5saW5lLWVuZDowO3otaW5kZXg6MjA1fS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7YmFja2dyb3VuZDojMzQzNDM0O2JhY2tncm91bmQ6IzM0MzQzNDQwO2Rpc3BsYXk6bm9uZTt6LWluZGV4OjIwNTtwb2ludGVyLWV2ZW50czpub25lfS5oYW5k''@;'; put 'put ''c29udGFibGUub24tbW92aW5nLS1jb2x1bW5zLnNob3ctdWkgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLWNvbHVtbnMgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7ZGlzcGxheTpibG9ja30uaGFuZHNvbnRhYmxlLmh0''@;'; put 'put ''X19tYW51YWxSb3dNb3ZlLmFmdGVyLXNlbGVjdGlvbi0tcm93cyB0Ym9keSB0aC5odF9faGlnaGxpZ2h0e2N1cnNvcjptb3ZlO2N1cnNvcjpncmFifS5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzICosLmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92''@;'; put 'put ''ZS5vbi1tb3ZpbmctLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYmJpbmd9LmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MgLm1hbnVhbFJvd1Jlc2l6ZXJ7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0''@;'; put 'put ''X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5le2JhY2tncm91''@;'; put 'put ''bmQ6Izc1NzU3NTtoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW4tdG9wOi0xcHg7ei1pbmRleDoyMDV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtiYWNrZ3JvdW5kOiMzNDM0MzQ7YmFja2dyb3VuZDojMzQzNDM0NDA7ZGlzcGxheTpub25lO3otaW5kZXg6MjA1''@;'; put 'put ''O3BvaW50ZXItZXZlbnRzOm5vbmV9LmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLXJvd3Muc2hvdy11aSAuaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tcm93cyAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtkaXNwbGF5OmJsb2NrfS5o''@;'; put 'put ''YW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdOm5vdChbY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsXSk6YmVmb3Jle29wYWNpdHk6MH0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFz''@;'; put 'put ''cyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtbXVsdGlwbGVdOmJlZm9yZXtvcGFjaXR5Oi4xfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2Vs''@;'; put 'put ''bC0wXTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtMV06YmVmb3Jle29wYWNpdHk6LjJ9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dz''@;'; put 'put ''cGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTJdOmJlZm9yZXtvcGFjaXR5Oi4yN30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlT''@;'; put 'put ''ZWxlY3RlZE1lcmdlZENlbGwtM106YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC00XTpiZWZvcmV7b3BhY2l0eTouNDF9LmhhbmRzb250''@;'; put 'put ''YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTVdOmJlZm9yZXtvcGFjaXR5Oi40N30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxp''@;'; put 'put ''Z2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtNl06YmVmb3Jle29wYWNpdHk6LjU0fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC03XTpiZWZvcmV7b3Bh''@;'; put 'put ''Y2l0eTouNTh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1zb3J0LV17bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWxlZnQ6LTE1cHh9LmhhbmRzb250YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPXNvcnQtXXttYXJnaW4tbGVmdDox''@;'; put 'put ''NXB4O21hcmdpbi1yaWdodDotMTVweH0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIGRpdi5odFJpZ2h0IHNwYW5bY2xhc3MqPXNvcnQtXTpvbmx5LWNoaWxke21hcmdpbi1yaWdodDoyMHB4O21hcmdpbi1sZWZ0Oi0yMHB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2Lmh0TGVmdCBzcGFuW2Ns''@;'; put 'put ''YXNzKj1zb3J0LV06b25seS1jaGlsZHttYXJnaW4tbGVmdDoyMHB4O21hcmdpbi1yaWdodDotMjBweH0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YWZ0ZXJ7dG9wOjUwJTttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTE1cHg7bGVm''@;'; put 'put ''dDp1bnNldDtwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6dW5zZXQ7Zm9udC1zaXplOjhweDtoZWlnaHQ6OHB4O2xpbmUtaGVpZ2h0OjEuMX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YWZ0ZXJ7bGVmdDotMTVweDtyaWdodDp1bnNl''@;'; put 'put ''dDtwYWRkaW5nLXJpZ2h0OjVweDtwYWRkaW5nLWxlZnQ6dW5zZXR9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nW2NsYXNzXj1zb3J0LV06YWZ0ZXIsLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nW2NsYXNzKj0iIHNvcnQtIl06YWZ0''@;'; put 'put ''ZXJ7Y29udGVudDoiKyJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtMTphZnRlcntjb250ZW50OiIxIn0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC0yOmFmdGVye2NvbnRlbnQ6IjIifS5oYW5kc29udGFibGUg''@;'; put 'put ''c3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTM6YWZ0ZXJ7Y29udGVudDoiMyJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNDphZnRlcntjb250ZW50OiI0In0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcu''@;'; put 'put ''c29ydC01OmFmdGVye2NvbnRlbnQ6IjUifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTY6YWZ0ZXJ7Y29udGVudDoiNiJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNzphZnRlcntjb250ZW50OiI3In0uaHRH''@;'; put 'put ''aG9zdFRhYmxlIHRoIGRpdiBidXR0b24uY2hhbmdlVHlwZStzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOm5vdCguaW5kaWNhdG9yRGlzYWJsZWQpe3BhZGRpbmctcmlnaHQ6NXB4fS5oYW5kc29udGFibGUgdGhlYWQgdGguaGlkZGVuSGVhZGVyOm5vdCg6Zmlyc3Qtb2YtdHlwZSl7ZGlz''@;'; put 'put ''cGxheTpub25lfXRoZWFkIHRoLmhpZGRlbkhlYWRlclRleHQgLmNvbEhlYWRlcntvcGFjaXR5OjB9LmhhbmRzb250YWJsZSB0aC5odF9uZXN0aW5nTGV2ZWxze3RleHQtYWxpZ246bGVmdDtwYWRkaW5nLWxlZnQ6N3B4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVs''@;'; put 'put ''c3t0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctcmlnaHQ6N3B4fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHN7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMXB4O3JpZ2h0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGggZGl2''@;'; put 'put ''Lmh0X25lc3RpbmdMZXZlbHN7cmlnaHQ6MTFweDtsZWZ0OnVuc2V0fS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0xldmVscywuaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVz''@;'; put 'put ''dGluZ0xldmVsc3tyaWdodDoxMHB4O2xlZnQ6dW5zZXR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0IHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxzLFtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaGFuZHNvbnRhYmxlIHRo''@;'; put 'put ''IGRpdi5odF9uZXN0aW5nTGV2ZWxze2xlZnQ6MTBweDtyaWdodDp1bnNldH0uaGFuZHNvbnRhYmxlIHRoIHNwYW4uaHRfbmVzdGluZ0xldmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgdGggc3Bhbi5odF9uZXN0aW5nTGV2ZWxfZW1wdHl7ZGlzcGxheTppbmxpbmUtYmxv''@;'; put 'put ''Y2s7d2lkdGg6MTBweDtoZWlnaHQ6MXB4O2Zsb2F0OmxlZnR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aCBzcGFuLmh0X25lc3RpbmdMZXZlbF9lbXB0eXtmbG9hdDpyaWdodH0uaGFuZHNvbnRhYmxlIHRoIHNwYW4uaHRfbmVzdGluZ0xldmVsOmFmdGVye2NvbnRlbnQ6IlwyNTEwIjtmb250''@;'; put 'put ''LXNpemU6OXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JvdHRvbTozcHh9LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMnB4O2xlZnQ6dW5zZXQ7Y3Vyc29y''@;'; put 'put ''OnBvaW50ZXJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntsZWZ0Oi0ycHg7cmlnaHQ6dW5zZXR9LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbi5odF9uZXN0aW5nRXhwYW5kOmFmdGVye2NvbnRlbnQ6IisifS5oYW5kc29udGFibGUg''@;'; put 'put ''dGggZGl2Lmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGluZ0NvbGxhcHNlOmFmdGVye2NvbnRlbnQ6Ii0ifS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbiwuaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRz''@;'; put 'put ''b250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntyaWdodDowO2xlZnQ6dW5zZXR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0IHRoIGRpdi5odF9uZXN0aW5nQnV0dG9uLFtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFy''@;'; put 'put ''dH4uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nQnV0dG9ue2xlZnQ6MDtyaWdodDp1bnNldH0vKiEKICogUGlrYWRheQogKiBDb3B5cmlnaHQgwqkgMjAxNCBEYXZpZCBCdXNoZWxsIHwgQlNEICYgTUlUIGxpY2Vuc2UgfCBodHRwczovL2RidXNoZWxsLmNvbS8KICovLnBpa2Etc2lu''@;'; put 'put ''Z2xle3otaW5kZXg6OTk5OTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2NvbG9yOiMzMzM7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItYm90dG9tLWNvbG9yOiNiYmI7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUsSGVsdmV0aWNhLEFyaWFs''@;'; put 'put ''LHNhbnMtc2VyaWZ9LnBpa2Etc2luZ2xlOmJlZm9yZSwucGlrYS1zaW5nbGU6YWZ0ZXJ7Y29udGVudDoiICI7ZGlzcGxheTp0YWJsZX0ucGlrYS1zaW5nbGU6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucGlrYS1zaW5nbGUuaXMtaGlkZGVue2Rpc3BsYXk6bm9uZX0ucGlrYS1zaW5nbGUuaXMtYm91bmR7''@;'; put 'put ''cG9zaXRpb246YWJzb2x1dGU7Ym94LXNoYWRvdzowIDVweCAxNXB4IC01cHggIzAwMDAwMDgwfS5waWthLWxlbmRhcntmbG9hdDpsZWZ0O3dpZHRoOjI0MHB4O21hcmdpbjo4cHh9LnBpa2EtdGl0bGV7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXJ9LnBpa2EtbGFiZWx7ZGlz''@;'; put 'put ''cGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDo5OTk5O292ZXJmbG93OmhpZGRlbjttYXJnaW46MDtwYWRkaW5nOjVweCAzcHg7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtmb250LXdlaWdodDo3MDA7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5waWth''@;'; put 'put ''LXRpdGxlIHNlbGVjdHtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTg7bWFyZ2luOjA7bGVmdDowO3RvcDo1cHg7b3BhY2l0eTowfS5waWthLXByZXYsLnBpa2EtbmV4dHtkaXNwbGF5OmJsb2NrO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO291''@;'; put 'put ''dGxpbmU6bm9uZTtib3JkZXI6MDtwYWRkaW5nOjA7d2lkdGg6MjBweDtoZWlnaHQ6MzBweDt0ZXh0LWluZGVudDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50''@;'; put 'put ''ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTo3NSUgNzUlO29wYWNpdHk6LjV9LnBpa2EtcHJldjpob3ZlciwucGlrYS1uZXh0OmhvdmVye29wYWNpdHk6MX0ucGlrYS1wcmV2LC5pcy1ydGwgLnBpa2EtbmV4dHtmbG9hdDpsZWZ0O2JhY2tncm91bmQtaW1h''@;'; put 'put ''Z2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBZUNBWUFBQUFzRWo1ckFBQUFVa2xFUVZSNDJ1M1ZNUW9BSUJBRFFmOFBnaitPRDloRzJDdE9OSkIyeW1Ra0tlMEhid0FQMHh1Y0RpUVdBUklUSURFQkVuTWdNUThTOCtBcUJJbDZrS2dI''@;'; put 'put ''aVhxUXFBZUplcEJvL3ozOEovVTB1QUhsYUJrQmw5STRHd0FBQUFCSlJVNUVya0pnZ2c9PSl9LnBpa2EtbmV4dCwuaXMtcnRsIC5waWthLXByZXZ7ZmxvYXQ6cmlnaHQ7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFC''@;'; put 'put ''UUFBQUFlQ0FZQUFBQXNFajVyQUFBQVUwbEVRVlI0MnUzVk93b0FNQWdFMGR3ZkFuTmpVMjZiWWtCQ0ZHd2ZpTDlWVldvTytCSjRHZjNndHNFS0tvRkJOVENvQ0FZVndhQWlHTlFHTVVITWtqR2JnamsybUlPTnVYbzBuQzhYbkNmMUpYZ0FyVklaQVFoNVRLWUFBQUFBU1VWT1JLNUNZSUk9KX0u''@;'; put 'put ''cGlrYS1wcmV2LmlzLWRpc2FibGVkLC5waWthLW5leHQuaXMtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouMn0ucGlrYS1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2t9LnBpa2EtdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNp''@;'; put 'put ''bmc6MDtib3JkZXI6MH0ucGlrYS10YWJsZSB0aCwucGlrYS10YWJsZSB0ZHt3aWR0aDoxNC4yODU3MTQyODU3MTQyODYlO3BhZGRpbmc6MH0ucGlrYS10YWJsZSB0aHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjI1cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246''@;'; put 'put ''Y2VudGVyfS5waWthLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7Ym9yZGVyOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTtwYWRkaW5nOjVweDtjb2xvcjojNjY2O2Zv''@;'; put 'put ''bnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE1cHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojZjVmNWY1O2hlaWdodDppbml0aWFsfS5waWthLXdlZWt7Zm9udC1zaXplOjExcHg7Y29sb3I6Izk5OX0uaXMtdG9kYXkgLnBpa2EtYnV0dG9ue2NvbG9yOiMzYWY7Zm9udC13ZWlnaHQ6''@;'; put 'put ''NzAwfS5pcy1zZWxlY3RlZCAucGlrYS1idXR0b24sLmhhcy1ldmVudCAucGlrYS1idXR0b257Y29sb3I6I2ZmZjtmb250LXdlaWdodDo3MDA7YmFja2dyb3VuZDojM2FmO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggM3B4ICMxNzhmZTU7Ym9yZGVyLXJhZGl1czozcHh9Lmhhcy1ldmVudCAucGlr''@;'; put 'put ''YS1idXR0b257YmFja2dyb3VuZDojMDA1ZGE5O2JveC1zaGFkb3c6aW5zZXQgMCAxcHggM3B4ICMwMDc2Yzl9LmlzLWRpc2FibGVkIC5waWthLWJ1dHRvbiwuaXMtaW5yYW5nZSAucGlrYS1idXR0b257YmFja2dyb3VuZDojZDVlOWY3fS5pcy1zdGFydHJhbmdlIC5waWthLWJ1dHRvbntjb2xv''@;'; put 'put ''cjojZmZmO2JhY2tncm91bmQ6IzZjYjMxZDtib3gtc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czozcHh9LmlzLWVuZHJhbmdlIC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2JhY2tncm91bmQ6IzNhZjtib3gtc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czozcHh9LmlzLWRpc2FibGVkIC5waWth''@;'; put 'put ''LWJ1dHRvbntwb2ludGVyLWV2ZW50czpub25lO2N1cnNvcjpkZWZhdWx0O2NvbG9yOiM5OTk7b3BhY2l0eTouM30uaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoIC5waWthLWJ1dHRvbntjb2xvcjojOTk5O29wYWNpdHk6LjN9LmlzLXNlbGVjdGlvbi1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpu''@;'; put 'put ''b25lO2N1cnNvcjpkZWZhdWx0fS5waWthLWJ1dHRvbjpob3ZlciwucGlrYS1yb3cucGljay13aG9sZS13ZWVrOmhvdmVyIC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2JhY2tncm91bmQ6I2ZmODAwMDtib3gtc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czozcHh9LnBpa2EtdGFibGUgYWJicnti''@;'; put 'put ''b3JkZXItYm90dG9tOm5vbmU7Y3Vyc29yOmhlbHB9Y2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjA7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3J9Y2xyLWljb24gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tl''@;'; put 'put ''e3N0cm9rZTpjdXJyZW50Q29sb3J9Y2xyLWljb24uaXMtZ3JlZW4sY2xyLWljb24uaXMtc3VjY2Vzc3tmaWxsOiMyZTg1MDB9Y2xyLWljb24uaXMtZ3JlZW4gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLXN1Y2Nlc3MgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9r''@;'; put 'put ''ZTojMmU4NTAwfWNsci1pY29uLmlzLXJlZCxjbHItaWNvbi5pcy1kYW5nZXIsY2xyLWljb24uaXMtZXJyb3J7ZmlsbDojZTAyMjAwfWNsci1pY29uLmlzLXJlZCAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtZGFuZ2VyIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHIt''@;'; put 'put ''aWNvbi5pcy1lcnJvciAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNlMDIyMDB9Y2xyLWljb24uaXMtd2FybmluZ3tmaWxsOiNjMjdiMDB9Y2xyLWljb24uaXMtd2FybmluZyAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNjMjdiMDB9Y2xyLWljb24uaXMtYmx1ZSxj''@;'; put 'put ''bHItaWNvbi5pcy1pbmZve2ZpbGw6IzAwNzdiOH1jbHItaWNvbi5pcy1ibHVlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1pbmZvIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzAwNzdiOH1jbHItaWNvbi5pcy13aGl0ZSxjbHItaWNvbi5pcy1pbnZlcnNl''@;'; put 'put ''e2ZpbGw6I2ZmZn1jbHItaWNvbi5pcy13aGl0ZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtaW52ZXJzZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNmZmZ9Y2xyLWljb24uaXMtaGlnaGxpZ2h0e2ZpbGw6IzAwNzdiOH1jbHItaWNvbi5pcy1oaWdobGln''@;'; put 'put ''aHQgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uW3NoYXBlJD0iIHVwIl0gc3ZnLGNsci1pY29uW2Rpcj11cF0gc3Zne3RyYW5zZm9ybTpyb3RhdGUoMCl9Y2xyLWljb25bc2hhcGUkPSIgZG93biJdIHN2ZyxjbHItaWNvbltkaXI9ZG93bl0gc3Zne3Ry''@;'; put 'put ''YW5zZm9ybTpyb3RhdGUoMTgwZGVnKX1jbHItaWNvbltzaGFwZSQ9IiByaWdodCJdIHN2ZyxjbHItaWNvbltkaXI9cmlnaHRdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX1jbHItaWNvbltzaGFwZSQ9IiBsZWZ0Il0gc3ZnLGNsci1pY29uW2Rpcj1sZWZ0XSBzdmd7dHJhbnNmb3JtOnJv''@;'; put 'put ''dGF0ZSgyNzBkZWcpfWNsci1pY29uW2ZsaXA9aG9yaXpvbnRhbF0gc3Zne3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWCgxODBkZWcpfWNsci1pY29uW2ZsaXA9dmVydGljYWxdIHN2Z3t0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX1jbHItaWNvbiAuY2xyLWktYmFkZ2V7''@;'; put 'put ''ZmlsbDojZTAyMjAwfWNsci1pY29uIC5jbHItaS1iYWRnZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNlMDIyMDB9Y2xyLWljb24+KntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3BsYXk6YmxvY2s7cG9pbnRlci1ldmVudHM6bm9uZX1jbHItaWNvbj5zdmd7dHJhbnNpdGlv''@;'; put 'put ''bjppbmhlcml0fWNsci1pY29uPnN2ZyB0aXRsZXtkaXNwbGF5Om5vbmV9Y2xyLWljb24gLmNsci1pLXNvbGlkLGNsci1pY29uIC5jbHItaS1zb2xpZC0tYmFkZ2VkLGNsci1pY29uIC5jbHItaS1zb2xpZC0tYWxlcnRlZHtkaXNwbGF5Om5vbmV9Y2xyLWljb24gLmNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQ6bm90KC5jbHItaS1vdXRsaW5lKSxjbHItaWNvbiAuY2xyLWktb3V0bGluZS0tYmFkZ2VkOm5vdCguY2xyLWktb3V0bGluZSl7ZGlzcGxheTpub25lfWNsci1pY29uW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQgLmNsci1pLW91dGxpbmUtLWFsZXJ0ZWR7ZGlzcGxheTpibG9j''@;'; put 'put ''a31jbHItaWNvbltjbGFzcyo9aGFzLWFsZXJ0XSAuY2FuLWFsZXJ0IC5jbHItaS1vdXRsaW5lOm5vdCguY2xyLWktb3V0bGluZS0tYWxlcnRlZCl7ZGlzcGxheTpub25lfWNsci1pY29uW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UgLmNsci1pLW91dGxpbmUtLWJhZGdlZHtkaXNwbGF5''@;'; put 'put ''OmJsb2NrfWNsci1pY29uW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UgLmNsci1pLW91dGxpbmU6bm90KC5jbHItaS1vdXRsaW5lLS1iYWRnZWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZHtkaXNwbGF5OmJsb2NrfWNsci1pY29u''@;'; put 'put ''LmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWQgLmhhcy1zb2xpZCAuY2xyLWktb3V0bGluZS0tYmFkZ2Vke2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYWxlcnRlZDpub3QoLmNsci1pLXNv''@;'; put 'put ''bGlkKSxjbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYmFkZ2VkOm5vdCguY2xyLWktc29saWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1zb2xpZFtjbGFzcyo9aGFzLWJhZGdlXSAuY2FuLWJhZGdlLmhhcy1zb2xpZCAuY2xyLWktc29saWQtLWJhZGdlZHtk''@;'; put 'put ''aXNwbGF5OmJsb2NrfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLGNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLS1iYWRnZWQs''@;'; put 'put ''Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLXNvbGlkOm5vdCguY2xyLWktc29saWQtLWJhZGdlZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlk''@;'; put 'put ''IC5jbHItaS1zb2xpZC0tYWxlcnRlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLGNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlk''@;'; put 'put ''IC5jbHItaS1vdXRsaW5lLS1hbGVydGVkLGNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlkIC5jbHItaS1zb2xpZDpub3QoLmNsci1pLXNvbGlkLS1hbGVydGVkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb24uaGFzLWJhZGdlLS1zdWNjZXNzIC5j''@;'; put 'put ''bHItaS1iYWRnZXtmaWxsOiMyZTg1MDB9Y2xyLWljb24uaGFzLWJhZGdlLS1zdWNjZXNzIC5jbHItaS1iYWRnZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMyZTg1MDB9Y2xyLWljb24uaGFzLWJhZGdlLS1lcnJvciAuY2xyLWktYmFkZ2V7ZmlsbDojZTAyMjAwfWNsci1pY29u''@;'; put 'put ''Lmhhcy1iYWRnZS0tZXJyb3IgLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLWluZm8gLmNsci1pLWJhZGdle2ZpbGw6IzAwNzdiOH1jbHItaWNvbi5oYXMtYmFkZ2UtLWluZm8gLmNsci1pLWJhZGdlIC50cmFu''@;'; put 'put ''c3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzAwNzdiOH1jbHItaWNvbi5oYXMtYWxlcnQgLmNsci1pLWFsZXJ0e2ZpbGw6I2MyN2IwMH1jbHItaWNvbi5oYXMtYWxlcnQgLmNsci1pLWFsZXJ0IC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2MyN2IwMH1jbHItaWNvbiAuaXMt''@;'; put 'put ''b2ZmLXNjcmVlbntwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7Ym9yZGVyOjAhaW1wb3J0YW50O2hlaWdodDoxcHghaW1wb3J0YW50O3dpZHRoOjFweCFpbXBvcnRhbnQ7bGVmdDowIWltcG9ydGFudDt0b3A6LTFweCFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5n''@;'; put 'put ''OjAhaW1wb3J0YW50O21hcmdpbjowIDAgLTFweCFpbXBvcnRhbnR9OnJvb3R7LS1jZHMtZ2xvYmFsLWJhc2U6MjA7LS1jZHMtZ2xvYmFsLXNjYWxlLXNwYWNlOjE7LS1jZHMtZ2xvYmFsLXNjYWxlLWxheW91dC1zcGFjZToxOy0tY2RzLWdsb2JhbC1zY2FsZS10eXBvZ3JhcGh5OjE7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWxheW91dC1ncmlkLWNvbHM6MTI7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14czo1NzZweDstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXNtOjc2OHB4Oy0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgtbWQ6OTkycHg7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1sZzoxMjAw''@;'; put 'put ''cHg7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14bDoxNDQwcHg7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhzOmNhbGMoMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHM6Y2FsYyg0ICogdmFyKC0tY2RzLWludGVybmFs''@;'; put 'put ''LXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzOmNhbGMoOCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbTpjYWxjKDEyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0''@;'; put 'put ''LXNwYWNlLW1kOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGc6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bDpjYWxjKDMyICogdmFyKC0tY2Rz''@;'; put 'put ''LWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4bDpjYWxjKDQ4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4eGw6Y2FsYyg2NCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTA6Y2FsYygwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTpjYWxjKDEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0yOmNhbGMoMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2Fs''@;'; put 'put ''ZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTM6Y2FsYyg0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtNDpjYWxjKDYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS01OmNhbGMoOCAqIHZhcigtLWNkcy1p''@;'; put 'put ''bnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTY6Y2FsYygxMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTc6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTg6Y2FsYygx''@;'; put 'put ''OCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTk6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTEwOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xMTpjYWxjKDM2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTI6Y2FsYyg0OCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTEzOmNhbGMoNjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2Nh''@;'; put 'put ''bGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xNDpjYWxjKDcyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTU6Y2FsYyg5NiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrOmhzbCgwLCAwJSwg''@;'; put 'put ''MCUpOy0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZTpoc2woMCwgMCUsIDEwMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDpoc2woOTMsIDgwJSwgOTQlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwOmhzbCg5MywgODAlLCA4MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0y''@;'; put 'put ''MDA6aHNsKDkzLCA4MCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMDpoc2woOTMsIDgwJSwgNTYlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwOmhzbCg5MywgODAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDA6aHNsKDkzLCA4MCUsIDQ0JSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMDpoc2woOTMsIDgwJSwgMzclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwOmhzbCg5MywgODAlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDA6aHNsKDkzLCA4MCUsIDIzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkw''@;'; put 'put ''MDpoc2woOTMsIDgwJSwgMTclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMDpoc2woOTMsIDgwJSwgMTIlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yNTpoc2woMTk4LCAxMDAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwOmhzbCgxOTgsIDEwMCUsIDk1JSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzU6aHNsKDE5OCwgMTAwJSwgOTQlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDA6aHNsKDE5OCwgMTAwJSwgODclKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDA6aHNsKDE5OCwgMTAwJSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0z''@;'; put 'put ''MDA6aHNsKDE5OCwgMTAwJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDA6aHNsKDE5OCwgMTAwJSwgNTklKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDA6aHNsKDE5OCwgMTAwJSwgNDglKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDA6aHNsKDE5OCwgMTAwJSwgNDMl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDA6aHNsKDE5OCwgMTAwJSwgMzQlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDA6aHNsKDE5OCwgMTAwJSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDA6aHNsKDE5OCwgMTAwJSwgMjElKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS0xMDAwOmhzbCgxOTgsIDEwMCUsIDE1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDpoc2woMjgyLCAxMDAlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwOmhzbCgyODIsIDgwJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMDpoc2woMjgy''@;'; put 'put ''LCA3MyUsIDgzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDA6aHNsKDI4MiwgNjYlLCA3NCUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwOmhzbCgyODIsIDYwJSwgNjUlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMDpoc2woMjgyLCA2MCUsIDU3JSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXZpb2xldC02MDA6aHNsKDI4MiwgNjAlLCA0OSUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwOmhzbCgyODMsIDgwJSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMDpoc2woMjgyLCAxMDAlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9s''@;'; put 'put ''ZXQtOTAwOmhzbCgyODIsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwOmhzbCgyODIsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDpoc2woOSwgMTAwJSwgOTclKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDpoc2woOSwgMTAwJSwgOTQl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTIwMDpoc2woOSwgMTAwJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTMwMDpoc2woOSwgMTAwJSwgNzklKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMDpoc2woOSwgMTAwJSwgNzElKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMDpo''@;'; put 'put ''c2woOSwgMTAwJSwgNjUlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMDpoc2woOSwgMTAwJSwgNTklKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMDpoc2woOSwgMTAwJSwgNDQlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMDpoc2woOSwgMTAwJSwgMzglKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItcmVkLTkwMDpoc2woOSwgMTAwJSwgMjglKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDA6aHNsKDksIDEwMCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwOmhzbCg0MSwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwOmhzbCg0MSwgMTAw''@;'; put 'put ''JSwgOTIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMjAwOmhzbCg0MSwgMTAwJSwgODYlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMzAwOmhzbCg0MSwgMTAwJSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNDAwOmhzbCg0MSwgMTAwJSwgNzAlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3Itb2NocmUtNTAwOmhzbCg0MCwgMTAwJSwgNTklKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwOmhzbCgzOSwgMTAwJSwgNTAlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNzAwOmhzbCgzOCwgMTAwJSwgNDIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwOmhzbCgz''@;'; put 'put ''NywgMTAwJSwgMzIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwOmhzbCgzNiwgMTAwJSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwMDpoc2woMzUsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTUwOmhzbCgyMzgsIDEwMCUsIDk2JSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTEwMDpoc2woMjM4LCA1OCUsIDg4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTIwMDpoc2woMjM4LCA1MyUsIDc5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTMwMDpoc2woMjM4LCA1MiUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWxhdmVuZGVyLTQwMDpoc2woMjM4LCA1OCUsIDY0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTUwMDpoc2woMjM4LCA1OSUsIDU4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMDpoc2woMjM4LCA2MCUsIDUyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVy''@;'; put 'put ''LTcwMDpoc2woMjM4LCA2OSUsIDQ1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTgwMDpoc2woMjM4LCAxMDAlLCAzMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci05MDA6aHNsKDIzOCwgMTAwJSwgMjIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMTAwMDpoc2wo''@;'; put 'put ''MjM4LCAxMDAlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01MDpoc2woMjExLCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0xMDA6aHNsKDIxMSwgMTAwJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMjAwOmhzbCgyMTEsIDEwMCUsIDgxJSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTMwMDpoc2woMjExLCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS00MDA6aHNsKDIxMSwgMTAwJSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTAwOmhzbCgyMTEsIDEwMCUsIDU0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6''@;'; put 'put ''dXJlLTYwMDpoc2woMjExLCAxMDAlLCA0NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS03MDA6aHNsKDIxMSwgMTAwJSwgMzclKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtODAwOmhzbCgyMTEsIDEwMCUsIDI2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTkwMDpoc2woMjExLCAx''@;'; put 'put ''MDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0xMDAwOmhzbCgyMTEsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTA6aHNsKDE4NCwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDA6aHNsKDE4NCwgMTAwJSwgODYlKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItYXF1YS0yMDA6aHNsKDE4NCwgMTAwJSwgNzUlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0zMDA6aHNsKDE4NCwgMTAwJSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDA6aHNsKDE4NCwgMTAwJSwgNDglKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDA6aHNs''@;'; put 'put ''KDE4NCwgMTAwJSwgNDMlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDA6aHNsKDE4NCwgMTAwJSwgMzQlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDA6aHNsKDE4NCwgMTAwJSwgMjUlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDA6aHNsKDE4NCwgMTAwJSwgMTglKTstLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYXF1YS05MDA6aHNsKDE4NCwgMTAwJSwgMTMlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwOmhzbCgxODQsIDEwMCUsIDEwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTA6aHNsKDE2MCwgODMlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTEw''@;'; put 'put ''MDpoc2woMTYwLCA4MiUsIDg4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMjAwOmhzbCgxNjAsIDc4JSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS0zMDA6aHNsKDE2MCwgNjklLCA2NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTQwMDpoc2woMTYwLCA2OSUsIDUzJSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTAwOmhzbCgxNjAsIDY0JSwgNDUlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS02MDA6aHNsKDE2MCwgNjklLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTcwMDpoc2woMTYwLCA2NCUsIDMwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtODAw''@;'; put 'put ''OmhzbCgxNjAsIDEwMCUsIDIxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtOTAwOmhzbCgxNjAsIDcwJSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS0xMDAwOmhzbCgxNjAsIDY5JSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTUwOmhzbCg1MCwgMTAwJSwgOTUlKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTEwMDpoc2woNTAsIDEwMCUsIDg0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0yMDA6aHNsKDUwLCAxMDAlLCA3MyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwOmhzbCg1MCwgMTAwJSwgNTclKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''eWVsbG93LTQwMDpoc2woNDYsIDEwMCUsIDUyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy01MDA6aHNsKDQ0LCAxMDAlLCA0NyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNjAwOmhzbCg0MiwgMTAwJSwgNDIlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTcwMDpoc2woNDAs''@;'; put 'put ''IDEwMCUsIDM3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy04MDA6aHNsKDQwLCAxMDAlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctOTAwOmhzbCg0MCwgMTAwJSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTEwMDA6aHNsKDQwLCAxMDAlLCAxMyUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1saW1lLTUwOmhzbCg2NiwgMTAwJSwgOTQlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDA6aHNsKDY2LCA5NSUsIDgzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMjAwOmhzbCg2NiwgODUlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTMwMDpoc2wo''@;'; put 'put ''NjYsIDgwJSwgNTglKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS00MDA6aHNsKDY2LCA4MCUsIDQ4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNTAwOmhzbCg2NiwgOTAlLCA0MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTYwMDpoc2woNjYsIDkwJSwgMzYlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItbGltZS03MDA6aHNsKDY2LCAxMDAlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTgwMDpoc2woNjYsIDEwMCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtOTAwOmhzbCg2NiwgMTAwJSwgMTIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDAwOmhzbCg2Niwg''@;'; put 'put ''MTAwJSwgNyUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNTA6aHNsKDI1LCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMTAwOmhzbCgyNSwgMTAwJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTIwMDpoc2woMjUsIDk0JSwgNzglKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTMwMDpoc2woMjUsIDEwMCUsIDcyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDA6aHNsKDI1LCAxMDAlLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNTAwOmhzbCgyNSwgMTAwJSwgNDglKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItdGFuZ2VyaW5lLTYwMDpoc2woMjUsIDEwMCUsIDQxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS03MDA6aHNsKDI1LCAxMDAlLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtODAwOmhzbCgyNSwgMTAwJSwgMjUlKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''dGFuZ2VyaW5lLTkwMDpoc2woMjUsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS0xMDAwOmhzbCgyNSwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS01MDpoc2woMzQ1LCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTEw''@;'; put 'put ''MDpoc2woMzQ1LCAxMDAlLCA4NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTIwMDpoc2woMzQ1LCAxMDAlLCA3OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTMwMDpoc2woMzQ1LCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTQwMDpoc2woMzQ1LCAx''@;'; put 'put ''MDAlLCA2MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTUwMDpoc2woMzQ1LCA4MSUsIDUwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNjAwOmhzbCgzNDUsIDgzJSwgNDAlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS03MDA6aHNsKDM0NSwgOTElLCAzMSUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1tYWdlbnRhLTgwMDpoc2woMzQ1LCAxMDAlLCAyNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTkwMDpoc2woMzQ1LCAxMDAlLCAxOSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTEwMDA6aHNsKDM0NSwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItcGluay01MDpoc2woMzI0LCAxMDAlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTEwMDpoc2woMzI0LCA5NSUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMjAwOmhzbCgzMjQsIDg0JSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay0zMDA6aHNsKDMyNCwgNzgl''@;'; put 'put ''LCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTQwMDpoc2woMzI0LCA3OCUsIDYyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNTAwOmhzbCgzMjQsIDY0JSwgNTElKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay02MDA6aHNsKDMyNCwgODAlLCAzOSUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1waW5rLTcwMDpoc2woMzI0LCAxMDAlLCAzMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTgwMDpoc2woMzI0LCAxMDAlLCAyNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTkwMDpoc2woMzI0LCAxMDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTEwMDA6aHNsKDMyNCwg''@;'; put 'put ''MTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTUwOmhzbCgyODIsIDMlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwOmhzbCgyODIsIDMlLCA5MiUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMjAwOmhzbCgyODIsIDMlLCA4NCUpOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMzAwOmhzbCgyODIsIDMlLCA3NCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNDAwOmhzbCgyODIsIDMlLCA2MyUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNTAwOmhzbCgyODIsIDMlLCA1NCUpOy0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci13YXJtLWdyYXktNjAwOmhzbCgyODIsIDMlLCA0MyUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNzAwOmhzbCgyODIsIDMlLCAzNSUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktODAwOmhzbCgyODIsIDMlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdy''@;'; put 'put ''YXktOTAwOmhzbCgyODIsIDMlLCAyMCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwMDpoc2woMjgyLCAzJSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtNTA6aHNsKDIzOCwgMjAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0xMDA6aHNsKDIzOCwgMjAl''@;'; put 'put ''LCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0yMDA6aHNsKDIzOCwgMjAlLCA4MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0zMDA6aHNsKDIzOCwgMjAlLCA3MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS00MDA6aHNsKDIzOCwgMjAlLCA2MyUpOy0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1zbGF0ZS01MDA6aHNsKDIzOCwgMjMlLCA1NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS02MDA6aHNsKDIzOCwgMjQlLCA0OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS03MDA6aHNsKDIzOCwgMjglLCAzOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS04MDA6aHNsKDIz''@;'; put 'put ''OCwgMjglLCAyOSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS05MDA6aHNsKDIzOCwgMjglLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0xMDAwOmhzbCgyMzgsIDI4JSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTUwOmhzbCgyMTEsIDEwMCUsIDk3JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWljZS0xMDA6aHNsKDIxMSwgNTglLCA5MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtMjAwOmhzbCgyMTEsIDUzJSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTMwMDpoc2woMjExLCA0OSUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS00MDA6aHNsKDIxMSwg''@;'; put 'put ''NDclLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtNTAwOmhzbCgyMTEsIDQ3JSwgNTMlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTYwMDpoc2woMjExLCA1NiUsIDQ0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS03MDA6aHNsKDIxMSwgNjklLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1pY2UtODAwOmhzbCgyMTEsIDY5JSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTkwMDpoc2woMjExLCAxMDAlLCAyMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtMTAwMDpoc2woMjExLCAxMDAlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNTA6aHNsKDIxMSwg''@;'; put 'put ''MjAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktMTAwOmhzbCgyMTEsIDIwJSwgOTAlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTIwMDpoc2woMjExLCAyMCUsIDgxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0zMDA6aHNsKDIxMSwgMjAlLCA3MiUp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNDAwOmhzbCgyMTEsIDIwJSwgNjElKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwMDpoc2woMjExLCAyMCUsIDUzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS02MDA6aHNsKDIxMSwgMjAlLCA0NCUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb29sLWdyYXktNzAwOmhzbCgyMTEsIDIzJSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTgwMDpoc2woMjExLCAzMCUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS05MDA6aHNsKDIxMSwgNDAlLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb29sLWdyYXktMTAwMDpoc2woMjExLCA2MyUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbi01MDpoc2woNDEsIDIzJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTEwMDpoc2woNDEsIDIyJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTIwMDpoc2woNDEsIDI3JSwg''@;'; put 'put ''ODIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTMwMDpoc2woNDEsIDIzJSwgNjglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTQwMDpoc2woNDEsIDIzJSwgNTglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTUwMDpoc2woNDEsIDIwJSwgNDclKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTYw''@;'; put 'put ''MDpoc2woNDEsIDIwJSwgNDAlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTcwMDpoc2woNDEsIDIwJSwgMzIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTgwMDpoc2woNDEsIDIzJSwgMjYlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTkwMDpoc2woNDEsIDIzJSwgMjElKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItdGFuLTEwMDA6aHNsKDQxLCAyMiUsIDE2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yNTpoc2woMTk4LCAzMyUsIDk5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDpoc2woMTk4LCAzNiUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi0xMDA6aHNsKDE5OCwgMjAlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwOmhzbCgxOTgsIDE0JSwgODIlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMDpoc2woMTk4LCAxMCUsIDcxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi00MDA6aHNsKDE5OCwgOSUsIDU2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDA6aHNsKDE5OCwgMTAlLCA0NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwOmhzbCgxOTgsIDE0JSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTcwMDpoc2woMTk4LCAxOSUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDA6aHNsKDE5OCwgMjMlLCAyMyUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwOmhzbCgxOTgsIDI4JSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTEwMDA6aHNsKDE5OCwgMzAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTEwMDpoc2woMjAwLCAzMSUsIDEzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMDpoc2woMCwgMCUsIDEwMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTUwOmhzbCgw''@;'; put 'put ''LCAwJSwgOTglKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0xMDA6aHNsKDAsIDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTIwMDpoc2woMCwgMCUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMzAwOmhzbCgwLCAwJSwgODclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3Jh''@;'; put 'put ''eS00MDA6aHNsKDAsIDAlLCA4MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTUwMDpoc2woMCwgMCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktNjAwOmhzbCgwLCAwJSwgNTUlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS03MDA6aHNsKDAsIDAlLCA0MCUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1ncmF5LTgwMDpoc2woMCwgMCUsIDI3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktOTAwOmhzbCgwLCAwJSwgMjAlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0xMDAwOmhzbCgwLCAwJSwgMCUpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTEwMDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24t''@;'; put 'put ''ODAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktY29sb3ItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0OjMwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyOjQwMDstLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2xkOjYwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRy''@;'; put 'put ''YWJvbGQ6NjAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0wOmNhbGMoMTAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0yOmNhbGMoMTIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zOmNhbGMoMTMgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWZvbnQtc2l6ZS00OmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS01OmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS02''@;'; put 'put ''OmNhbGMoMjAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS03OmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS04OmNhbGMoMzIgKiB2YXIo''@;'; put 'put ''LS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS05OmNhbGMoNDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQi''@;'; put 'put ''LCBzYW5zLXNlcmlmOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseToiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZjstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tb25vc3BhY2UtZm9udC1mYW1pbHk6dWktbW9ub3NwYWNlLCBDb25zb2xh''@;'; put 'put ''cywgTWVubG8sIE1vbmFjbywgbW9ub3NwYWNlOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0Oi4xNDc1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0Oi4xNzAzZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQ6LjUxN2VtOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1s''@;'; put 'put ''aW5rLWNvbG9yLXZpc2l0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci02MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''bGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplOmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQ6''@;'; put 'put ''MS40Mjg1NzE0ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZzotLjAwNzE0Mjg2ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodDo0MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemU6Y2FsYyg0MCAq''@;'; put 'put ''IHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodDoxLjFlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3Bs''@;'; put 'put ''YXktZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC1zaXplOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctbGluZS1oZWlnaHQ6MS4xMjVlbTstLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1oZWFkaW5nLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtc2l6ZTpjYWxjKDMyICogdmFyKC0tY2RzLWludGVybmFsLXNj''@;'; put 'put ''YWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1saW5lLWhlaWdodDoxLjEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRsaW5lLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtd2VpZ2h0OjUw''@;'; put 'put ''MDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1mb250LXNpemU6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQ6MS4zMzMzMzNlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1s''@;'; put 'put ''ZXR0ZXItc3BhY2luZzotLjAwODMzMzMzZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplOmNhbGMoMjAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQ6MS4yZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZzotLjAxZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''c3Vic2VjdGlvbi1mb250LXNpemU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodDoxLjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nOi0u''@;'; put 'put ''MDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1l''@;'; put 'put ''c3NhZ2UtbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0OmNhbGMoNDAwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2Up''@;'; put 'put ''KSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZTpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQ6MS4yMzA3N2VtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZzotLjAwNzY5MmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodDo0MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemU6Y2FsYygxMSAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0z''@;'; put 'put ''KSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodDoxLjQ1NDU0NWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjAxODE4MmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQ6NDAwOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemU6Y2FsYygxMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNt''@;'; put 'put ''YWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZzouMDVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTkwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGFuZ2VyLWhv''@;'; put 'put ''dmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1pbnN0YW50OjBzOy0tY2RzLWdsb2JhbC1hbmlt''@;'; put 'put ''YXRpb24tZHVyYXRpb24tcXVpY2tlc3Q6LjFzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tcXVpY2tlcjouMTVzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tcXVpY2s6LjJzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2Vjb25kYXJ5Oi4zczstLWNk''@;'; put 'put ''cy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXByaW1hcnk6LjRzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2xvdzouNXM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1zbG93ZXI6LjdzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2xvd2VzdDou''@;'; put 'put ''OHM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1lYXNpbmctcHJpbWFyeTpjdWJpYy1iZXppZXIoMCwuOTksMCwuOTkpOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLXNlY29uZGFyeTpjdWJpYy1iZXppZXIoMCwgMS41LCAuNSwgMSk7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1lYXNpbmct''@;'; put 'put ''bG9vcDpjdWJpYy1iZXppZXIoLjE3LCAuNCwgLjgsIC43OSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwOmNhbGMoNCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTIwMDpjYWxjKDEyICogKDFy''@;'; put 'put ''ZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMzAwOjUwJTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMDpjYWxjKDEgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLXdpZHRoLTIwMDpjYWxjKDIgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMDpjYWxjKDMgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXdpZHRoLTQwMDpjYWxjKDQgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci10aW50OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMTAwOjAgY2FsYygoMSAvIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtYmFzZSwgMjApKSAqIDFyZW0pIGNhbGMoKDMgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSAwIGhzbGEoMTk4LCAzMCUsIDE1JSwgLjUpOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwOjAgY2FsYygoMSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSwgMjApKSAqIDFyZW0pIGNhbGMoKDMgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSAwIGhzbGEoMTk4LCAzMCUsIDE1JSwgLjMpOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwOjAgY2FsYygoMSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSAqIDFyZW0p''@;'; put 'put ''IGNhbGMoKDMgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSAwIGhzbGEoMTk4LCAzMCUsIDE1JSwgLjIpOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTA6aHNsYSgwLCAwJSwgMCUsIDApOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTEwMDpoc2xhKDAsIDAlLCAw''@;'; put 'put ''JSwgLjIpOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTIwMDpoc2xhKDAsIDAlLCAwJSwgLjQpOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMDpoc2xhKDAsIDAlLCAwJSwgLjYpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lOkhpZ2hsaWdodCBzb2xpZCAy''@;'; put 'put ''cHg7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtd2Via2l0OjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQ6MXB4Oy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi10''@;'; put 'put ''b3VjaC10YXJnZXQ6Y2FsYygzNiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWJhY2tncm91bmQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVj''@;'; put 'put ''dGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWJsdWUtNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtaG92ZXI6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxl''@;'; put 'put ''Y3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLXN1Y2Nlc3MtY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLXN1Y2Nlc3Mtc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24td2FybmluZy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''d2FybmluZy1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1k''@;'; put 'put ''YW5nZXItY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItc2Vjb25k''@;'; put 'put ''YXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFs''@;'; put 'put ''LWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LW5ldXRyYWwtc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWFwcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTI1KTstLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJh''@;'; put 'put ''Y2tkcm9wLWJhY2tncm91bmQ6aHNsYSgwLCAwJSwgMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1kYXJrOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZl''@;'; put 'put ''cnNlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1j''@;'; put 'put ''b250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZDpoc2xhKDAsIDAlLCAxMDAlLCAuNik7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mbzp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mby10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtc3Rh''@;'; put 'put ''dHVzLXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MCk7LS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3Mtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2Fybmlu''@;'; put 'put ''Zy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItZGFyazp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlz''@;'; put 'put ''YWJsZWQtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1hbHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtYWx0LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtYWx0LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTkwMCk7LS1jZHMtYWxpYXMtdXRpbGl0''@;'; put 'put ''eS1ncmF5OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHkt''@;'; put 'put ''Ymx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1ibHVlLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS04MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkt''@;'; put 'put ''ZGFyay1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyZWVuOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyZWVuLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS15''@;'; put 'put ''ZWxsb3c6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2No''@;'; put 'put ''cmUtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXNoYWRlOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTUwKTstLWNk''@;'; put 'put ''cy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQtdGludDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtODAwKTstLWNkcy1hbGlhcy12aXotYm9yZGVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0yLXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTMtYXF1YTp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC00LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1nZW5lcmFsLTYtYXF1YTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMTAwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNy12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC04LWxpbWU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1saW1lLTkwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtOS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEwLWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTEwMDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1nZW5lcmFsLTExLWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTYwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEzLXZpb2xldDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE1LWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdml6LWdlbmVyYWwtMTYtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtODAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1zdWNj''@;'; put 'put ''ZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy03MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJuaW5nLWxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3IteWVsbG93LTQwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWltbWVkaWF0ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1jcml0aWNhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXZlcml0eS1mcmVlLXNwYWNlLWZpbGw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktZnJlZS1zcGFjZS1ib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotc2VxdWVudGlhbC1ibHVlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0yMDA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRp''@;'; put 'put ''YWwtYmx1ZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS05MDA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRp''@;'; put 'put ''YWwtdmlvbGV0LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTAwOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12''@;'; put 'put ''aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9j''@;'; put 'put ''aHJlLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0zMDA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1vY2hyZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwt''@;'; put 'put ''b2NocmUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTEwMDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1vY2hyZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS00''@;'; put 'put ''MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1h''@;'; put 'put ''cXVhLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNl''@;'; put 'put ''cXVlbnRpYWwtYXF1YS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1''@;'; put 'put ''ZW50aWFsLWdyZWVuLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi03MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4t''@;'; put 'put ''OTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVu''@;'; put 'put ''dGlhbC1yZWQtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1yZWQtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXZpei1z''@;'; put 'put ''ZXF1ZW50aWFsLXJlZC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTgwMDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1k''@;'; put 'put ''aXZlcmdpbmctdmlvbGV0LWFxdWEtdi00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2lu''@;'; put 'put ''Zy12aW9sZXQtYXF1YS12LTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtdi03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xl''@;'; put 'put ''dC1hcXVhLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1h''@;'; put 'put ''LTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS03MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtOTAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1''@;'; put 'put ''ZS1qYWRlLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTQwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTYwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWphZGUtNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtODAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2lu''@;'; put 'put ''Zy1ibHVlLWdyZWVuLWItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4t''@;'; put 'put ''bmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNDAwOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTYwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVl''@;'; put 'put ''bi04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3Jl''@;'; put 'put ''ZW4tMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdy''@;'; put 'put ''ZWVuLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1n''@;'; put 'put ''cmVlbi03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''cmVkLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVk''@;'; put 'put ''LTgwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1ibGFjayk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1saWdodDozMDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyOjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2xkOjYwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMDpj''@;'; put 'put ''YWxjKDEwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTI6Y2FsYygxMiAqIHZhcigtLWNk''@;'; put 'put ''cy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMzpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS00OmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUt''@;'; put 'put ''MykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNjpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWZvbnQtc2l6ZS03OmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTg6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNp''@;'; put 'put ''emUtOTpjYWxjKDQwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5OiJD''@;'; put 'put ''bGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbW9ub3NwYWNlLWZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSwgQ29uc29sYXMsIE1lbmxvLCBNb25hY28sIG1vbm9zcGFjZTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRvcC1nYXAt''@;'; put 'put ''aGVpZ2h0Oi4xNDc1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQ6LjE3MDNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXgtaGVpZ2h0Oi41MTdlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNjAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTcwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLW9uLWNvbG9yYmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1ib2R5LWZvbnQtc2l6ZTpjYWxjKDE0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQ6MS40Mjg1NzE0ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nOi0uMDA3MTQyODZlbTst''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemU6Y2FsYyg0MCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0''@;'; put 'put ''OjEuMWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1mb250LXNpemU6Y2FsYygzMiAqIHZhcigt''@;'; put 'put ''LWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0OjEuMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkaW5nLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1mb250''@;'; put 'put ''LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXNpemU6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1saW5lLWhlaWdodDoxLjEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktaGVhZGxpbmUtbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1mb250LXNpemU6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodDoxLjMzMzMzM2VtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemU6Y2FsYygyMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZzotLjAx''@;'; put 'put ''ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlv''@;'; put 'put ''bi1saW5lLWhlaWdodDoxLjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1z''@;'; put 'put ''aXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodDoxLjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0OmNhbGMoNDAwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplOmNhbGMoMTMgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0OjEuMjMwNzdlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZzotLjAwNzY5MmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNhcHRpb24tZm9udC1zaXplOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodDoxLjQ1NDU0NWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZzou''@;'; put 'put ''MDE4MTgyZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemU6Y2FsYygxMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1z''@;'; put 'put ''bWFsbGNhcHRpb24tbGluZS1oZWlnaHQ6MS4yZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjA1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5m''@;'; put 'put ''by1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLW9jaHJlLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b246dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1pbnRlcm5h''@;'; put 'put ''bC1zY2FsZS0xOmNhbGMoKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAqIHZhcigtLWNkcy1nbG9iYWwtc2NhbGUtbGF5b3V0LXNwYWNlKSk7LS1jZHMtaW50ZXJuYWwtc2NhbGUtMjpjYWxjKCgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNjYWxlLXNwYWNlKSk7LS1jZHMtaW50ZXJuYWwtc2NhbGUtMzpjYWxjKCgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiB2YXIoLS1jZHMtZ2xvYmFsLXNjYWxlLXR5cG9ncmFwaHkpKX1odG1se2ZvbnQtc2l6ZTpjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpLzE2KSoxMDAl''@;'; put 'put ''KTtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzppbmhlcml0IWltcG9ydGFudH1bY2RzLWJhc2UtZm9udD0iMTYiXXstLWNkcy1nbG9iYWwtYmFzZToxNn1bY2RzLXRoZW1lXXtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYXBwLWJhY2tncm91bmQpO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDApfVtjZHMtY29udHJvbF0gOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDApfVtjZHMtY29udHJvbF0g''@;'; put 'put ''OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDApfVtjZHMtY29udHJvbF1bX2Rpc2FibGVkXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCl9aHRtbFtjZHMt''@;'; put 'put ''Zm9jdXMtdHJhcF17b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDt3aWR0aDoxMDB2dztoZWlnaHQ6MTAwdmh9W2Nkcy10ZXh0XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHkpO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9W2Nkcy10ZXh0''@;'; put 'put ''XVtjZHMtbGF5b3V0fj1ncmlkXTphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWdyaWRdOmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdOmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49dmVydGljYWxdOmJlZm9yZXtkaXNwbGF5Om5vbmV9W2Nkcy10ZXh0Kj1kaXNwbGF5XSxbY2RzLXRleHQqPWhlYWRpbmddLFtjZHMtdGV4dCo9aGVhZGxpbmVdLFtjZHMtdGV4dCo9c2VjdGlvbl0sW2Nkcy10ZXh0Kj1z''@;'; put 'put ''dWJzZWN0aW9uXSxbY2RzLXRleHQqPXRpdGxlXXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKX1bY2RzLXRleHQqPWJvZHldLFtjZHMtdGV4dCo9Y2Fw''@;'; put 'put ''dGlvbl0sW2Nkcy10ZXh0Kj1tZXNzYWdlXSxbY2RzLXRleHQqPXNlY29uZGFyeV0sW2Nkcy10ZXh0Kj1zbWFsbGNhcHRpb25de2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDApfVtjZHMtdGV4dCo9aW5saW5lXXt3aWR0aDphdXRvIWltcG9ydGFudDtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXdlaWdodCk7bGlu''@;'; put 'put ''ZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPWRpc3BsYXldOmJlZm9yZXtjb250ZW50OiIiO2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEp''@;'; put 'put ''ICsgLjAzN2VtKX1bY2RzLXRleHQqPWRpc3BsYXldOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1o''@;'; put 'put ''ZWFkaW5nXSxbY2RzLXRleHQqPWhlYWRsaW5lXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPWhlYWRpbmddOmJlZm9yZSxbY2RzLXRleHQqPWhlYWRsaW5lXTpiZWZvcmV7''@;'; put 'put ''Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0KSAt''@;'; put 'put ''IDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oZWFkaW5nXTphZnRlcixbY2RzLXRleHQqPWhlYWRsaW5lXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1saW5lLWhlaWdo''@;'; put 'put ''dCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXRpdGxlXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0p''@;'; put 'put ''fVtjZHMtdGV4dCo9dGl0bGVdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl17Zm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUt''@;'; put 'put ''aGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgo''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTphZnRlcntjb250ZW50OiIiO2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1z''@;'; put 'put ''dWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7''@;'; put 'put ''aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgt''@;'; put 'put ''aGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9Ym9keV17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWln''@;'; put 'put ''aHQpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9k''@;'; put 'put ''eS1saW5lLWhlaWdodCl9W2Nkcy10ZXh0Kj1ib2R5XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4xZW0pfVtjZHMtdGV4dCo9Ym9keV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWln''@;'; put 'put ''aHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1ib2R5W2Nkcy10ZXh0Kj1ib2R5XTphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTpiZWZvcmV7Y29udGVudDpub25lfVtjZHMtdGV4dCo9bWVzc2FnZV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZv''@;'; put 'put ''bnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0''@;'; put 'put ''KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNh''@;'; put 'put ''bGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNw''@;'; put 'put ''YWNpbmcpfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNlY29uZGFyeV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29u''@;'; put 'put ''ZGFyeS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9Y2FwdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRp''@;'; put 'put ''b24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1jYXB0aW9uXTpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVp''@;'; put 'put ''Z2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1jYXB0aW9uXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0''@;'; put 'put ''KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAu''@;'; put 'put ''MDQ0ZW0pfVtjZHMtdGV4dCo9c21hbGxjYXB0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9c21hbGxjYXB0aW9uXTpiZWZvcmV7''@;'; put 'put ''Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWln''@;'; put 'put ''aHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNtYWxsY2FwdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl''@;'; put 'put ''aWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIp''@;'; put 'put ''KSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IpIWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIWltcG9ydGFudDtsaW5lLWhlaWdodDppbmhlcml0IWltcG9ydGFudDtmb250LXNpemU6''@;'; put 'put ''aW5oZXJpdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTpmb2N1c3tvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCl9W2Nkcy10''@;'; put 'put ''ZXh0fj1saW5rXTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3ZlcikhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKSxbY2RzLXRleHR+PWxpbmtdW2Nkcy10ZXh0fj12aXNpdGVkXXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTp2aXNpdGVkOm5vdChbY2RzLXRleHR+PXN0YXRpY10pOmhvdmVyLFtjZHMtdGV4dH49bGlua11bY2RzLXRleHR+PXZpc2l0ZWRdOmhvdmVye2NvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpIWltcG9ydGFudH1AbWVkaWEgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKXtbY2RzLXRleHQ9bGlua106Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLW91dGxpbmUtd2Via2l0KX19W2Nkcy10ZXh0fj1jb2RlXXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfVtjZHMtZGl2aWRlcl17ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXIt''@;'; put 'put ''d2lkdGgtMTAwKTtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcikgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBpbnNldH1bY2RzLXRleHR+PWV4dHJhYm9sZF17Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZCkhaW1wb3J0YW50fVtjZHMtdGV4dH49Ym9sZF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWJvbGQpIWltcG9ydGFudH1bY2RzLXRleHR+PXNlbWlib2xkXXtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpIWltcG9ydGFudH1bY2RzLXRleHR+PW1lZGl1bV17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''dGV4dH49cmVndWxhcl17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXIpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpZ2h0XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLXRleHR+PWNhcGl0YWxpemVde3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemUhaW1wb3J0YW50fVtjZHMtdGV4dH49dXBwZXJjYXNlXXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2UhaW1wb3J0YW50fVtjZHMtdGV4dH49bG93ZXJjYXNlXXt0ZXh0LXRyYW5zZm9ybTpsb3dl''@;'; put 'put ''cmNhc2UhaW1wb3J0YW50fVtjZHMtdGV4dH49dHJ1bmNhdGVde292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpcyFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm93cmFwIWltcG9ydGFudH1bY2RzLXRleHR+PXRydW5jYXRlXTphZnRlcixbY2RzLXRleHR+PXRy''@;'; put 'put ''dW5jYXRlXTpiZWZvcmV7Y29udGVudDpub25lfVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PW1vbm9zcGFjZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1vbm9zcGFjZS1mb250LWZhbWlseSl9W2Nkcy10ZXh0fj1saGVde3BhZGRpbmc6LjA1cHggMH1b''@;'; put 'put ''Y2RzLXRleHR+PWxoZV06YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOmFmdGVye2NvbnRlbnQ6IiI7bWFyZ2luLWJvdHRvbTotLjIyMWVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWRpc2FibGUtbGhlXTphZnRlcixbY2RzLWxheW91dH49ZGlzYWJsZS1saGVdOmJlZm9yZSxbY2RzLXRleHR+PWRpc2FibGUtbGhlXTphZnRlcixbY2RzLXRleHR+PWRpc2FibGUtbGhlXTpiZWZvcmV7Y29udGVudDpub25lfVtjZHMtdGV4dCo9aDBdLFtjZHMtdGV4dCo9aDFdLFtjZHMtdGV4''@;'; put 'put ''dCo9aDJdLFtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNl''@;'; put 'put ''cmlmKTtmb250LXNpemU6MnJlbTtmb250LXdlaWdodDoyMDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS4yZW07bGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW19W2Nkcy10ZXh0Kj1oMF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpi''@;'; put 'put ''bG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjJlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5''@;'; put 'put ''OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDFdLFtjZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtc2l6ZToxLjZyZW07bGlu''@;'; put 'put ''ZS1oZWlnaHQ6MS41ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTU2ZW19W2Nkcy10ZXh0Kj1oMV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdo''@;'; put 'put ''dCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgxXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgyXSxbY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxb''@;'; put 'put ''Y2RzLXRleHQqPWg2XXtmb250LXNpemU6MS40cmVtO2xpbmUtaGVpZ2h0OjEuNzE0M2VtO2xldHRlci1zcGFjaW5nOi0uMDE3ODU3ZW19W2Nkcy10ZXh0Kj1oMl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgo''@;'; put 'put ''KDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLzIp''@;'; put 'put ''KSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTpiZWZvcmV7Y29u''@;'; put 'put ''dGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgzXTphZnRl''@;'; put 'put ''cntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oNF0sW2Nkcy10ZXh0Kj1oNV0sW2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOi45cmVtO2xpbmUtaGVpZ2h0OjEuMzMzMzMzZW07bGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6LS4wMTExMTFlbX1bY2RzLXRleHQqPWg0XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuMzMz''@;'; put 'put ''MzMzZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDRdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMzMzMzMzZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQt''@;'; put 'put ''c2l6ZTouOHJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS41ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW19W2Nkcy10ZXh0Kj1oNV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg1XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWg2XXtmb250LXNpemU6LjdyZW07''@;'; put 'put ''Zm9udC13ZWlnaHQ6NTAwO2xldHRlci1zcGFjaW5nOi0uMDMxMjVlbX1bY2RzLXRleHQqPWg2XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVp''@;'; put 'put ''Z2h0KSArIC4yNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDZdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC4yNWVtKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDBdLFtjZHMtdGV4dCo9cDFde2ZvbnQtc2l6ZToxLjJyZW07Zm9udC13ZWlnaHQ6''@;'; put 'put ''NDAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDApO2xpbmUtaGVpZ2h0OjEuMTY2NjdlbTtsZXR0ZXItc3BhY2luZzotLjAwODMzM2VtfVtjZHMtdGV4dCo9cDBdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJn''@;'; put 'put ''aW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4xNjY2N2VtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXAwXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6''@;'; put 'put ''MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxj''@;'; put 'put ''KCgxLjE2NjY3ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDFde2ZvbnQtc2l6ZTouN3JlbTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDI5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTQyODZlbX1bY2Rz''@;'; put 'put ''LXRleHQqPXAxXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuNzE0MjllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdl''@;'; put 'put ''bSl9W2Nkcy10ZXh0Kj1wMV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''YXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS43MTQyOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAyXSxbY2RzLXRleHQqPXAzXSxbY2RzLXRleHQqPXA0XSxbY2RzLXRleHQqPXA1XXtmb250''@;'; put 'put ''LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjg0NjE1ZW07bGV0dGVyLXNwYWNpbmc6LS4wMDc2OTJlbX1bY2RzLXRleHQqPXAyXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wMl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNw''@;'; put 'put ''bGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS44NDYxNWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAzXSxbY2RzLXRleHQqPXA0XSxbY2RzLXRleHQqPXA1XXtmb250LXdlaWdodDo0MDB9W2Nkcy10ZXh0Kj1wM106YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpi''@;'; put 'put ''bG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDNdOmFmdGVye2NvbnRlbnQ6IiI7ZGlz''@;'; put 'put ''cGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wNF0sW2Nkcy10ZXh0Kj1wNV17Zm9udC1zaXplOi42cmVtO2ZvbnQtd2VpZ2h0OjYwMDtsaW5lLWhlaWdodDoyZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzNl''@;'; put 'put ''bX1bY2RzLXRleHQqPXA0XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIC41ZW0pKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1w''@;'; put 'put ''NF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0''@;'; put 'put ''KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA1XXtmb250LXdlaWdodDo0MDB9W2Nkcy10ZXh0Kj1wNV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdp''@;'; put 'put ''bi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDVdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgx''@;'; put 'put ''ZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC41ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10''@;'; put 'put ''ZXh0Kj1wNl0sW2Nkcy10ZXh0Kj1wN10sW2Nkcy10ZXh0Kj1wOF17Zm9udC1zaXplOi41NXJlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS4wOTA5MDllbTtsZXR0ZXItc3BhY2luZzouMDE4MTgyZW19''@;'; put 'put ''W2Nkcy10ZXh0Kj1wNl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpICsg''@;'; put 'put ''LjAzN2VtKX1bY2RzLXRleHQqPXA2XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA3XSxbY2RzLXRleHQqPXA4XXtmb250LXdlaWdodDo0MDB9W2Nkcy10ZXh0Kj1w''@;'; put 'put ''N106YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2Rz''@;'; put 'put ''LXRleHQqPXA3XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRl''@;'; put 'put ''ci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA4XXtmb250LXNpemU6LjVyZW07bGluZS1oZWlnaHQ6MS4yZW07bGV0dGVyLXNwYWNpbmc6LjAyZW19''@;'; put 'put ''W2Nkcy10ZXh0Kj1wOF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjJlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdl''@;'; put 'put ''bSl9W2Nkcy10ZXh0Kj1wOF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''YXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfTpob3N0LDpyb290ey0tXDNiNCAxOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4eHMpOy0tXDNiNCAyOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4cyk7LS1cM2I0IDM6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHMpOy0tXDNiNCA0OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXNtKTstLVwzYjQgNTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCk7LS1c''@;'; put 'put ''M2I0IDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcpOy0tXDNiNCA3OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhsKTstLVwzYjQgODp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eGwpOy0tXDNiNCA5OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNl''@;'; put 'put ''LXh4eGwpfVtjZHMtbGF5b3V0Kj0iYWxpZ246ZmlsbCJdPip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXtm''@;'; put 'put ''bGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6ZmlsbCJdPip7ZmxleC1ncm93OjEh''@;'; put 'put ''aW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQHhzOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQHhzOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dCo9ImFsaWduQHNtOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0id3JhcEBzbTpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7Zmxl''@;'; put 'put ''eC1ncm93OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpmaWxsIl0+KntmbGV4LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAbWQ6bm9uZSJde2ZsZXgtd3JhcDpub3dy''@;'; put 'put ''YXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQG1kOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6''@;'; put 'put ''MTIwMHB4KXtbY2RzLWxheW91dCo9ImFsaWduQGxnOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcEBsZzpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpz''@;'; put 'put ''dHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6ZmlsbCJd''@;'; put 'put ''Pip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQHhsOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkB4bDpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1z''@;'; put 'put ''dGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWluLWhlaWdodDowfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49aG9yaXpvbnRhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdPltjZHMtdGV4dF17d2lkdGg6aW5pdGlhbCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ246Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJd''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVy''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7''@;'; put 'put ''YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGlj''@;'; put 'put ''YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRv''@;'; put 'put ''IWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJd''@;'; put 'put ''e2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0''@;'; put 'put ''OmF1dG8haW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpi''@;'; put 'put ''b3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il17''@;'; put 'put ''anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4czpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24t''@;'; put 'put ''aXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0''@;'; put 'put ''Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jp''@;'; put 'put ''em9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3Rh''@;'; put 'put ''cnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWdu''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl17YWxp''@;'; put 'put ''Z24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBzbTpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250''@;'; put 'put ''YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2gi''@;'; put 'put ''XXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBz''@;'; put 'put ''bTpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50''@;'; put 'put ''ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkBzbTp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpy''@;'; put 'put ''aWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQG1kOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBtZDpyZXZlcnNl''@;'; put 'put ''Il17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhv''@;'; put 'put ''cml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1n''@;'; put 'put ''cm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpz''@;'; put 'put ''dHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1b''@;'; put 'put ''Y2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDph''@;'; put 'put ''dXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVu''@;'; put 'put ''ZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRh''@;'; put 'put ''bnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl17YWxp''@;'; put 'put ''Z24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJde2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxn''@;'; put 'put ''Omhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbGc6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0''@;'; put 'put ''Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3Jv''@;'; put 'put ''dzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRh''@;'; put 'put ''bC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1o''@;'; put 'put ''b3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXXthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyQHhsOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2gi''@;'; put 'put ''XXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHhsOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdLFtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhs''@;'; put 'put ''OnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17bWFy''@;'; put 'put ''Z2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVj''@;'; put 'put ''dGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJd''@;'; put 'put ''e2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIi''@;'; put 'put ''XXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJd''@;'; put 'put ''e2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNh''@;'; put 'put ''bC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGln''@;'; put 'put ''bi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxh''@;'; put 'put ''eW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJd''@;'; put 'put ''e21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXth''@;'; put 'put ''bGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2Vu''@;'; put 'put ''dGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyQHhz''@;'; put 'put ''OnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkB4czpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeHM6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhz''@;'; put 'put ''OmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8h''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4''@;'; put 'put ''LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAc206cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1p''@;'; put 'put ''dGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnN0cmV0Y2gi''@;'; put 'put ''XT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206''@;'; put 'put ''YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XT5bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQG1kOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6''@;'; put 'put ''dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkBtZDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBtZDpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBt''@;'; put 'put ''ZDp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRh''@;'; put 'put ''bC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17''@;'; put 'put ''bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1''@;'; put 'put ''dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl17anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il17YWxpZ24taXRlbXM6Zmxl''@;'; put 'put ''eC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBsZzpyZXZlcnNlIl17Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRp''@;'; put 'put ''Y2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRj''@;'; put 'put ''aCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmNl''@;'; put 'put ''bnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSxbY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxh''@;'; put 'put ''eW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4bDpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNo''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c3RyZXRjaCJdPip7ZmxleC1ncm93''@;'; put 'put ''OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5''@;'; put 'put ''b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeGw6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AeGw6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fVtjZHMtbGF5b3V0fj1ncmlkXXtkaXNwbGF5OmdyaWQ7YWxpZ24taXRlbXM6c3RhcnQ7YWxpZ24tY29u''@;'; put 'put ''dGVudDpzdGFydDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KHZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LWdyaWQtY29scyksMWZyKTt3aWR0aDoxMDAlfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj1yb3dzXXtncmlkLXRlbXBsYXRlLXJvd3M6cmVwZWF0KDEyLGF1dG8pfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ncmlkXT5bY2RzLWxheW91dCo9cm93XXthbGlnbi1zZWxmOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJjb2xzOmF1dG8iXXtncmlkLWF1dG8tZmxvdzpjb2x1bW47Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmluaXRpYWx9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2xzQCJdPip7Z3JpZC1jb2x1bW46c3BhbiB2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMpfVtjZHMtbGF5b3V0Kj0iY29sQCJde2dyaWQtY29sdW1uOnNwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJjb2xzOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzOjEiXT4qe2dyaWQtcm93OnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJjb2xzOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzOjMiXT4qe2dyaWQt''@;'; put 'put ''Y29sdW1uOnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJyb3dzOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9zcGFu''@;'; put 'put ''IDR9W2Nkcy1sYXlvdXQqPSJjb2xzOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzOjgiXT4qe2dyaWQt''@;'; put 'put ''Y29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzOjkiXT4qe2dyaWQtcm93OnNwYW4gOS9zcGFu''@;'; put 'put ''IDl9W2Nkcy1sYXlvdXQqPSJjb2xzOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzOjExIl0+KntncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTF9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dzOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzOjEyIl0+KntncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2w6MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDoyIl17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3c6MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzozIl17Z3JpZC1yb3c6c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2w6NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo1Il17Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJyb3c6NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjYiXXtncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjciXXtncmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4g''@;'; put 'put ''OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo5Il17Z3JpZC1yb3c6c3BhbiA5L3Nw''@;'; put 'put ''YW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjEwIl17Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDoxMSJde2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6MTEiXXtncmlkLXJvdzpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''dzoxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93OnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2w6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''OnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3c6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''OnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6''@;'; put 'put ''ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0''@;'; put 'put ''LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5k''@;'; put 'put ''LTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0''@;'; put 'put ''LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTgi''@;'; put 'put ''XXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTkiXXtn''@;'; put 'put ''cmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTkiXXtn''@;'; put 'put ''cmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC0x''@;'; put 'put ''MCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVu''@;'; put 'put ''ZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpz''@;'; put 'put ''dGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93OmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvdzpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tY29udGVudDpzdGFy''@;'; put 'put ''dH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJde2FsaWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtq''@;'; put 'put ''dXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7''@;'; put 'put ''anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEiXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''MS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjMiXT4qe2dyaWQtY29sdW1uOnNwYW4gMy9zcGFu''@;'; put 'put ''IDN9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9zcGFuIDR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xzQHhzOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzQHhzOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzQHhz''@;'; put 'put ''OjgiXT4qe2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjkiXT4q''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjExIl0+Kntn''@;'; put 'put ''cmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEyIl0+''@;'; put 'put ''KntncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTJ9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dCo9ImNvbHNAc206MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAc206MSJdPip7Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbHNAc206MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAc206MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAc206MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd3NAc206MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAc206NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAc206NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAc206''@;'; put 'put ''NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAc206NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAc206NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9InJvd3NAc206NiJdPip7''@;'; put 'put ''Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAc206NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAc206NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNAc206OCJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAc206OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAc206OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAc206OSJdPip7Z3JpZC1yb3c6c3BhbiA5''@;'; put 'put ''L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAc206MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAc206MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAc206MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4g''@;'; put 'put ''MTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAc206MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAc206MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAc206MTIiXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''MTIvc3BhbiAxMn19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iY29sc0BtZDoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDoy''@;'; put 'put ''Il0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0BtZDozIl0+Kntn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo1Il0+KntncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo2Il0+KntncmlkLXJvdzpzcGFuIDYv''@;'; put 'put ''c3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0BtZDo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0BtZDo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sc0BtZDoxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93c0BtZDoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0BtZDoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0BtZDoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVk''@;'; put 'put ''aWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0Kj0iY29sc0BsZzoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoyIl0+KntncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0BsZzozIl0+KntncmlkLXJvdzpzcGFuIDMv''@;'; put 'put ''c3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sc0BsZzo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93c0BsZzo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzox''@;'; put 'put ''MCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93c0Bs''@;'; put 'put ''ZzoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVkaWEgKG1pbi13aWR0aDox''@;'; put 'put ''NDQwcHgpe1tjZHMtbGF5b3V0Kj0iY29sc0B4bDoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAy''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93c0B4bDoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0B4bDozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sc0B4bDo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93c0B4bDo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo3''@;'; put 'put ''Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo4Il0+Kntn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoxMCJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxMSJdPip7Z3JpZC1y''@;'; put 'put ''b3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2xAeHM6MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czoyIl17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czozIl17Z3JpZC1yb3c6c3BhbiAz''@;'; put 'put ''L3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czo1Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW46c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjYiXXtncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0B4czo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjciXXtncmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4czo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3Bh''@;'; put 'put ''biA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czo5Il17Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjEwIl17Z3Jp''@;'; put 'put ''ZC1yb3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czoxMSJde2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MTEiXXtncmlkLXJvdzpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQHhzOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dCo9ImNvbEBzbTox''@;'; put 'put ''Il17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BzbToyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjMiXXtncmlkLXJvdzpzcGFuIDMvc3BhbiAzIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjUiXXtncmlkLWNvbHVtbjpzcGFu''@;'; put 'put ''IDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjYiXXtn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQHNtOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206OSJde2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93QHNtOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbToxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MTAiXXtncmlkLXJvdzpzcGFuIDEw''@;'; put 'put ''L3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbToxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206''@;'; put 'put ''MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iY29sQG1kOjEiXXtncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1k''@;'; put 'put ''OjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQG1kOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NiJde2dyaWQtcm93OnNwYW4g''@;'; put 'put ''Ni9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6OCJde2dy''@;'; put 'put ''aWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dAbWQ6OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDoxMiJde2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0Kj0iY29sQGxnOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3Bh''@;'; put 'put ''biAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjIiXXtncmlkLXJv''@;'; put 'put ''dzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxn''@;'; put 'put ''OjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QGxnOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6OCJde2dyaWQtY29sdW1uOnNw''@;'; put 'put ''YW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6OSJd''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xAbGc6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIv''@;'; put 'put ''c3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0Kj0iY29sQHhsOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0B4bDoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjIiXXtncmlkLXJvdzpzcGFuIDIvc3Bh''@;'; put 'put ''biAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjQiXXtncmlkLWNv''@;'; put 'put ''bHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QHhsOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQHhsOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDgh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6OSJde2dyaWQtcm93OnNw''@;'; put 'put ''YW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xA''@;'; put 'put ''eGw6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sQHhzOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbEB4czpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMyJde2dyaWQtY29sdW1uLWVuZDoz''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtNCJde2dyaWQtY29sdW1u''@;'; put 'put ''LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtNCJde2dy''@;'; put 'put ''aWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3Rh''@;'; put 'put ''cnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEB4czplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAeHM6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0B4czplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFy''@;'; put 'put ''dDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTkiXXtncmlkLXJv''@;'; put 'put ''dy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFy''@;'; put 'put ''dC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sQHhzOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3Rh''@;'; put 'put ''cnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTEzIl17''@;'; put 'put ''Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3''@;'; put 'put ''NjhweCl7W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTEiXXtncmlkLXJvdy1z''@;'; put 'put ''dGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTIiXXtncmlk''@;'; put 'put ''LWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTMi''@;'; put 'put ''XXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dA''@;'; put 'put ''c206ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93QHNtOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2xAc206ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6''@;'; put 'put ''NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC03Il17Z3JpZC1jb2x1''@;'; put 'put ''bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC04Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVu''@;'; put 'put ''ZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''d0BzbTpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xAc206ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMTEiXXtncmlkLXJv''@;'; put 'put ''dy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQt''@;'; put 'put ''MTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2xAc206c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1k''@;'; put 'put ''OmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEBtZDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QG1kOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtNCJde2dyaWQtcm93LWVu''@;'; put 'put ''ZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtNSJde2dy''@;'; put 'put ''aWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQt''@;'; put 'put ''NiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6''@;'; put 'put ''c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9InJvd0BtZDplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xMCJde2dy''@;'; put 'put ''aWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1k''@;'; put 'put ''OmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9ImNvbEBtZDpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEzIl17Z3JpZC1jb2x1''@;'; put 'put ''bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0yIl17Z3JpZC1jb2x1bW4t''@;'; put 'put ''ZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0zIl17Z3JpZC1j''@;'; put 'put ''b2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0z''@;'; put 'put ''Il17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0Bs''@;'; put 'put ''ZzpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sQGxnOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbEBsZzpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtOCJde2dyaWQtY29sdW1u''@;'; put 'put ''LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtOCJde2dy''@;'; put 'put ''aWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3Rh''@;'; put 'put ''cnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQGxnOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbEBsZzpzdGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6''@;'; put 'put ''MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTEyIl17Z3Jp''@;'; put 'put ''ZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0''@;'; put 'put ''YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3dAbGc6ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEi''@;'; put 'put ''XXtncmlkLWNvbHVtbi1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMSJde2dyaWQtcm93LXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xIl17Z3JpZC1yb3ctZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0''@;'; put 'put ''YXJ0LTIiXXtncmlkLWNvbHVtbi1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMiJde2dyaWQtY29sdW1uLWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0yIl17Z3JpZC1yb3ctc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dAeGw6ZW5kLTIiXXtncmlkLXJvdy1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMyJde2dyaWQtY29sdW1uLXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0zIl17Z3JpZC1jb2x1bW4tZW5kOjMhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QHhsOnN0YXJ0LTMiXXtncmlkLXJvdy1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMyJde2dyaWQtcm93LWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC00Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NCFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTQiXXtncmlkLWNvbHVtbi1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNCJde2dyaWQtcm93LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC00Il17Z3JpZC1yb3ctZW5kOjQhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTUiXXtncmlkLWNvbHVtbi1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtNSJde2dyaWQtY29sdW1uLWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC01Il17Z3JpZC1yb3ct''@;'; put 'put ''c3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTUiXXtncmlkLXJvdy1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtNiJde2dyaWQtY29sdW1uLXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC02Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW4tZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTYiXXtncmlkLXJvdy1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtNiJde2dyaWQtcm93LWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC03''@;'; put 'put ''Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTciXXtncmlkLWNvbHVtbi1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNyJde2dyaWQtcm93LXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QHhsOmVuZC03Il17Z3JpZC1yb3ctZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTgiXXtncmlkLWNvbHVtbi1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtOCJde2dyaWQtY29sdW1uLWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9InJvd0B4bDpzdGFydC04Il17Z3JpZC1yb3ctc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTgiXXtncmlkLXJvdy1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtOSJde2dyaWQtY29sdW1uLXN0YXJ0OjkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC05Il17Z3JpZC1jb2x1bW4tZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTkiXXtncmlkLXJvdy1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtOSJde2dyaWQtcm93LWVuZDo5IWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xMCJde2dyaWQtY29sdW1uLXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTAiXXtncmlkLWNvbHVtbi1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEwIl17Z3JpZC1yb3ct''@;'; put 'put ''c3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMCJde2dyaWQtcm93LWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTEiXXtncmlkLWNvbHVtbi1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEx''@;'; put 'put ''Il17Z3JpZC1jb2x1bW4tZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMSJde2dyaWQtcm93LXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTEiXXtncmlkLXJvdy1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''QHhsOnN0YXJ0LTEyIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0xMiJde2dyaWQtY29sdW1uLWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMTIiXXtncmlkLXJvdy1zdGFydDoxMiFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTEyIl17Z3JpZC1yb3ctZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xMyJde2dyaWQtY29sdW1uLXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTMiXXtncmlkLWNvbHVtbi1lbmQ6''@;'; put 'put ''MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEzIl17Z3JpZC1yb3ctc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMyJde2dyaWQtcm93LWVuZDoxMyFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91''@;'; put 'put ''dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpib3R0b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24t''@;'; put 'put ''aXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGlj''@;'; put 'put ''YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49''@;'; put 'put ''Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpi''@;'; put 'put ''b3R0b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRl''@;'; put 'put ''bXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwt''@;'; put 'put ''Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0''@;'; put 'put ''b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6''@;'; put 'put ''c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkBtZDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2Vu''@;'; put 'put ''dGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1n''@;'; put 'put ''cmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWdyaWRd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9t''@;'; put 'put ''Il17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0''@;'; put 'put ''cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AbGc6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRl''@;'; put 'put ''ciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj1ncmlkXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJd''@;'; put 'put ''e2FsaWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJl''@;'; put 'put ''dGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHhsOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIi''@;'; put 'put ''XXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn19W2Nkcy1sYXlvdXR+PSJkaXNwbGF5Om5vbmUiXXtkaXNwbGF5Om5vbmUhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheTpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6Y29udGVudHMiXXtkaXNwbGF5OmNvbnRlbnRzIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6aW5saW5lIl17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAc206bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHNt''@;'; put 'put ''OmZsZXgiXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBzbTpibG9jayJde2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBzbTppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRo''@;'; put 'put ''Ojk5MnB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAbWQ6bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QG1kOmZsZXgiXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBtZDpibG9jayJde2Rpc3BsYXk6YmxvY2sh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBtZDppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QGxnOm5vbmUiXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''ZGlzcGxheUBsZzpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbGc6YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbGc6aW5saW5lIl17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEg''@;'; put 'put ''KG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj0iZGlzcGxheUB4bDpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAeGw6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmJsb2NrIl17ZGlz''@;'; put 'put ''cGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1y''@;'; put 'put ''ZWFkZXItb25seSJde3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0''@;'; put 'put ''b3A6MDtsZWZ0OjA7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9''@;'; put 'put ''ImdhcDp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXA6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Z2FwOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXA6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXA6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im06bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnh4cyJde3Bh''@;'; put 'put ''ZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4cyJde21hcmdpbjp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5nOnZhcigtLVwz''@;'; put 'put ''YjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InA6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im06eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC14Onh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFy''@;'; put 'put ''KC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Om1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6''@;'; put 'put ''bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQg''@;'; put 'put ''NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9y''@;'; put 'put ''dGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4eGwi''@;'; put 'put ''XXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14Om5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJn''@;'; put 'put ''aW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHhzIl17bWFyZ2luLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0teDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBv''@;'; put 'put ''cnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTptZCJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0teTpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1y''@;'; put 'put ''aWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4eGwiXXttYXJnaW4tbGVmdDp2YXIo''@;'; put 'put ''LS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS14Onh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwz''@;'; put 'put ''YjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10Onh4cyJd''@;'; put 'put ''e3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLWw6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6c20iXXtwYWRkaW5n''@;'; put 'put ''LXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtbDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtYjptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OmxnIl17cGFkZGluZy10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6bGciXXtw''@;'; put 'put ''YWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLWI6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnh4bCJde3BhZGRpbmct''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWI6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXI6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6''@;'; put 'put ''eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tbDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDp4cyJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1sOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS1iOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Om1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0''@;'; put 'put ''IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6bWQiXXttYXJnaW4t''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6''@;'; put 'put ''bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1yOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnh4bCJde21hcmdpbi1ib3R0''@;'; put 'put ''b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6''@;'; put 'put ''eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRh''@;'; put 'put ''bnR9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iZ2FwQHhzOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcEB4czp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJnYXBAeHM6eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcEB4czpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImdhcEB4czp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxheW91dH49InBAeHM6bm9uZSJde3BhZGRp''@;'; put 'put ''bmc6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0''@;'; put 'put ''IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6c20iXXttYXJnaW46dmFyKC0tXDNi''@;'; put 'put ''NCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOmxnIl17cGFkZGluZzp2YXIoLS1c''@;'; put 'put ''M2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eGwiXXttYXJnaW46dmFyKC0t''@;'; put 'put ''XDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeHM6eHh4bCJde3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC15QHhzOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAx''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDIpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC14QHhzOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnNtIl17cGFkZGluZy10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteUB4czptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3Bh''@;'; put 'put ''ZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4bCJde3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC15QHhzOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS15QHhzOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0''@;'; put 'put ''IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''MikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXhAeHM6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0t''@;'; put 'put ''XDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXlAeHM6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXhAeHM6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnh4eGwiXXttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC1iQHhzOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtckB4czp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eHh4cyJd''@;'; put 'put ''e3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1iQHhzOnh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czp4cyJde3BhZGRpbmct''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1sQHhzOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwz''@;'; put 'put ''YjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnNtIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6''@;'; put 'put ''bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtbEB4czptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOmxnIl17cGFkZGluZy1y''@;'; put 'put ''aWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czpsZyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC10QHhzOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0t''@;'; put 'put ''XDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6''@;'; put 'put ''eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnh4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnh4eGwi''@;'; put 'put ''XXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS1yQHhzOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS10QHhzOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6eHhz''@;'; put 'put ''Il17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnhzIl17bWFyZ2luLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''ckB4czpzbSJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6bWQiXXttYXJnaW4t''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1yQHhzOmxnIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4bCJde21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1yQHhzOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnh4bCJde21hcmdpbi1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LWJAeHM6eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJnYXBAc206bm9u''@;'; put 'put ''ZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEBzbTp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEBzbTp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNt''@;'; put 'put ''OnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAc206bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEBzbTpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXBAc206eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAc206eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEBzbTpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206bm9uZSJde21hcmdpbjowIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4cyJde21hcmdpbjp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206bWQiXXtwYWRkaW5nOnZhcigt''@;'; put 'put ''LVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTpsZyJde21hcmdpbjp2YXIo''@;'; put 'put ''LS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHhsIl17cGFkZGluZzp2''@;'; put 'put ''YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBzbTp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHh4bCJde21h''@;'; put 'put ''cmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRp''@;'; put 'put ''bmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4eHhzIl17cGFkZGluZy10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXlAc206eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7''@;'; put 'put ''cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnNtIl17''@;'; put 'put ''cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''eUBzbTpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFy''@;'; put 'put ''KC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteEBzbTp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3Bh''@;'; put 'put ''ZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7''@;'; put 'put ''bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnh4eHMiXXttYXJnaW4tdG9w''@;'; put 'put ''OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS15QHNtOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdp''@;'; put 'put ''bi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTpzbSJde21hcmdpbi1s''@;'; put 'put ''ZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0teEBzbTptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTpsZyJde21hcmdpbi10''@;'; put 'put ''b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0teUBzbTp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJn''@;'; put 'put ''aW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOnh4eGwiXXttYXJn''@;'; put 'put ''aW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtdEBzbTpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1sQHNtOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC10QHNtOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eHMi''@;'; put 'put ''XXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206c20iXXtwYWRkaW5nLWJv''@;'; put 'put ''dHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1yQHNtOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwz''@;'; put 'put ''YjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOmxn''@;'; put 'put ''Il17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtckBzbTp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4bCJde3BhZGRpbmct''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1iQHNtOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4eHhsIl17cGFkZGluZy10b3A6dmFy''@;'; put 'put ''KC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1sQHNtOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tYkBzbTpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXJAc206eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTp4eHhzIl17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLWJAc206eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAz''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOnhzIl17''@;'; put 'put ''bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1iQHNtOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1c''@;'; put 'put ''M2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206''@;'; put 'put ''bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtLWJAc206bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eGwiXXttYXJnaW4tdG9wOnZh''@;'; put 'put ''cigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''bEBzbTp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHh4bCJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tbEBzbTp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImdhcEBtZDpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eHh4cyJde2dhcDp2YXIoLS1cM2I0''@;'; put 'put ''IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEBtZDptZCJde2dh''@;'; put 'put ''cDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOmxnIl17Z2FwOnZhcigtLVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEBtZDp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9Imdh''@;'; put 'put ''cEBtZDp4eHhsIl17Z2FwOnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQG1kOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0''@;'; put 'put ''IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHhzIl17bWFyZ2luOnZhcigt''@;'; put 'put ''LVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDpzbSJde3BhZGRpbmc6dmFy''@;'; put 'put ''KC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnNtIl17bWFyZ2luOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOm1kIl17bWFyZ2luOnZh''@;'; put 'put ''cigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDpsZyJde3BhZGRpbmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4bCJde3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4eGwiXXttYXJn''@;'; put 'put ''aW46dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQG1kOnh4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOm5v''@;'; put 'put ''bmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHh4cyJde3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC15QG1kOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOm1kIl17cGFkZGluZy1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteEBtZDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4bCJde3BhZGRp''@;'; put 'put ''bmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXhAbWQ6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4eHMi''@;'; put 'put ''XXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWlt''@;'; put 'put ''cG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1k''@;'; put 'put ''OnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1k''@;'; put 'put ''OmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQg''@;'; put 'put ''NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWlt''@;'; put 'put ''cG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBt''@;'; put 'put ''ZDp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbWQ6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1c''@;'; put 'put ''M2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtckBtZDpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtdEBtZDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHh4cyJde3BhZGRp''@;'; put 'put ''bmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXJAbWQ6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4eHMiXXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWJAbWQ6eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnNtIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnNt''@;'; put 'put ''Il17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1iQG1kOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6bGciXXtwYWRkaW5nLXRv''@;'; put 'put ''cDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDpsZyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAtbEBtZDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDp4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnh4''@;'; put 'put ''bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4eHhsIl17cGFk''@;'; put 'put ''ZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tdEBtZDpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1sQG1kOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHMi''@;'; put 'put ''XXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4cyJde21hcmdpbi1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''dEBtZDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOm1kIl17bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOm1kIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS10QG1kOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eGwiXXttYXJn''@;'; put 'put ''aW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXRAbWQ6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBt''@;'; put 'put ''ZDp4eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkp''@;'; put 'put ''IWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9ImdhcEBsZzpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iZ2FwQGxnOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEBsZzptZCJde2dhcDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOmxnIl17Z2FwOnZhcigt''@;'; put 'put ''LVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEBsZzp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEBsZzp4eHhsIl17Z2FwOnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQGxnOm5v''@;'; put 'put ''bmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHh4cyJde21hcmdpbjp2YXIo''@;'; put 'put ''LS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4cyJde3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnNtIl17bWFyZ2lu''@;'; put 'put ''OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzpsZyJde3BhZGRp''@;'; put 'put ''bmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnhsIl17bWFy''@;'; put 'put ''Z2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnh4eGwi''@;'; put 'put ''XXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAteUBsZzpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4eHMiXXtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteEBsZzp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFk''@;'; put 'put ''ZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzpzbSJde3Bh''@;'; put 'put ''ZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWlt''@;'; put 'put ''cG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhA''@;'; put 'put ''bGc6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnh4bCJde3BhZGRpbmctdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteUBsZzp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDow''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6''@;'; put 'put ''dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4eHMiXXttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS14QGxnOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnNtIl17bWFyZ2luLXRvcDp2''@;'; put 'put ''YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS15QGxnOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnhsIl17bWFyZ2luLWxlZnQ6''@;'; put 'put ''dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS14QGxnOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1i''@;'; put 'put ''b3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4eHhsIl17bWFyZ2lu''@;'; put 'put ''LXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzpub25lIl17cGFkZGluZy1yaWdodDowIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1s''@;'; put 'put ''QGxnOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eHMi''@;'; put 'put ''XXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtbEBsZzp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnNtIl17cGFkZGluZy1yaWdo''@;'; put 'put ''dDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC10QGxnOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzpsZyJd''@;'; put 'put ''e3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtdEBsZzp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzp4bCJde3BhZGRpbmctYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1yQGxnOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigt''@;'; put 'put ''LVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''YkBsZzp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tckBsZzpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0tdEBsZzp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnh4eHMiXXttYXJnaW4tYm90dG9t''@;'; put 'put ''OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1yQGxnOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''MikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4cyJde21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXJAbGc6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOm1k''@;'; put 'put ''Il17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tckBsZzpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6bGciXXttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJA''@;'; put 'put ''bGc6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4eGwiXXttYXJn''@;'; put 'put ''aW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1iQGxnOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9''@;'; put 'put ''ImdhcEB4bDpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXBAeGw6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEB4bDptZCJde2dhcDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOmxnIl17Z2FwOnZhcigtLVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eGwiXXtnYXA6dmFyKC0tXDNiNCA3''@;'; put 'put ''KX1bY2RzLWxheW91dCo9ImdhcEB4bDp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEB4bDp4eHhsIl17Z2FwOnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQHhsOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDpub25lIl17''@;'; put 'put ''bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHhzIl17cGFkZGlu''@;'; put 'put ''Zzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnhzIl17bWFy''@;'; put 'put ''Z2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnNtIl17bWFyZ2luOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDptZCJde3Bh''@;'; put 'put ''ZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDpsZyJde3BhZGRpbmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOmxnIl17''@;'; put 'put ''bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnhsIl17bWFyZ2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4eGwi''@;'; put 'put ''XXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnh4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4''@;'; put 'put ''bDp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDpub25lIl17cGFkZGluZy10b3A6MCFpbXBv''@;'; put 'put ''cnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnh4eHMiXXtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJw''@;'; put 'put ''LXhAeGw6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6bWQiXXtwYWRkaW5nLXRvcDp2YXIo''@;'; put 'put ''LS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC15QHhsOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnh4bCJde3BhZGRp''@;'; put 'put ''bmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDpub25lIl17bWFyZ2luLXRvcDow''@;'; put 'put ''IWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHh4cyJd''@;'; put 'put ''e21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBv''@;'; put 'put ''cnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnNt''@;'; put 'put ''Il17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9y''@;'; put 'put ''dGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOmxn''@;'; put 'put ''Il17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6''@;'; put 'put ''eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwz''@;'; put 'put ''YjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDpub25lIl17cGFkZGluZy1ib3R0b206''@;'; put 'put ''MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHh4cyJde3BhZGRpbmct''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXRAeGw6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4eHMiXXtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtckB4bDp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnNtIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDpzbSJd''@;'; put 'put ''e3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXJAeGw6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6bWQiXXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDpsZyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWJAeGw6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''NykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnhs''@;'; put 'put ''Il17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnh4eGwiXXtwYWRk''@;'; put 'put ''aW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnh4eHMi''@;'; put 'put ''XXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tYkB4bDp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnhzIl17bWFyZ2luLXRvcDp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDp4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LWxAeGw6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6bWQiXXttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOm1kIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0tbEB4bDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4bCJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1sQHhsOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4''@;'; put 'put ''bDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXXtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOmZpbGwiXSxbY2RzLWxh''@;'; put 'put ''eW91dH49ZmlsbF17d2lkdGg6MTAwJSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6Y2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0b31bY2RzLWxheW91dH49ImNvbnRhaW5lcjp4cyJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtbGF5b3V0LXdpZHRoLXhzKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjpzbSJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXNtKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjptZCJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtbGF5b3V0LXdpZHRoLW1kKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjpsZyJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLWxnKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjp4bCJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtbGF5b3V0LXdpZHRoLXhsKX0qLDphZnRlciw6YmVmb3JlLDpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveH1bY2RzLXRoZW1lfj1kYXJrXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktY29sb3ItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29s''@;'; put 'put ''b3ItMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1ibHVlLTQwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0z''@;'; put 'put ''MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b246dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktd2FybmluZy1ob3Zl''@;'; put 'put ''cjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy02MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC00MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLW9uLWNvbG9yYmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy02MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVy''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLW9uLWNvbG9yYmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxh''@;'; put 'put ''dmVuZGVyLTMwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1hcHAtYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Y29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWlu''@;'; put 'put ''dmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZ3JvdW5kOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3ItdGludDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3Itc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMDowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDAgdmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1vcGFjaXR5LTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0zMDA6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtZGlzYWJsZWQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVj''@;'; put 'put ''dGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2Vs''@;'; put 'put ''ZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxl''@;'; put 'put ''Y3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXI6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ncmVlbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1zZWNvbmRhcnktaG92ZXI6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWFjdGl2ZTp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctc2Vjb25kYXJ5LWhvdmVyOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWFjdGl2ZTp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtc2Vjb25kYXJ5LWhv''@;'; put 'put ''dmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52''@;'; put 'put ''ZXJzZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy10aW50OnRy''@;'; put 'put ''YW5zcGFyZW50Oy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tc2hhZGU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy1zdWNjZXNzLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTQwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctdGludDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLW9jaHJlLTkwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXN0''@;'; put 'put ''YXR1cy1kYW5nZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVk''@;'; put 'put ''LTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC10''@;'; put 'put ''aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHkt''@;'; put 'put ''Z3JheS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJs''@;'; put 'put ''dWUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJs''@;'; put 'put ''dWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''YXp1cmUtMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01MCk7LS1jZHMtYWxpYXMtdXRp''@;'; put 'put ''bGl0eS1ncmVlbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3c6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93''@;'; put 'put ''LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdXRpbGl0eS1yZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdGFuZ2VyaW5lLXRpbnQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC00''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwKTstLWNkcy1hbGlhcy12aXotYm9yZGVyOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xLWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMi12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0zLWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTUtYmx1ZTp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC02LWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC03LXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1nZW5lcmFsLTgtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC05LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTAtbGltZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWxpbWUtNTApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTExLWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZ2VuZXJhbC0xMy12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNC1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTUtYXF1YTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWFxdWEtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNi1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdml6LXNldmVyaXR5LXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJuaW5nOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LXdhcm5pbmct''@;'; put 'put ''bGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktaW1tZWRpYXRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWNyaXRpY2FsOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWZyZWUtc3BhY2UtZmlsbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFs''@;'; put 'put ''LWJsdWUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXF1ZW50aWFsLWJsdWUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''dmlvbGV0LTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFs''@;'; put 'put ''LXZpb2xldC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTgwMDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZp''@;'; put 'put ''b2xldC01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1zZXF1ZW50aWFsLW9jaHJlLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS00MDA6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''b2NocmUtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTIwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''dml6LXNlcXVlbnRpYWwtb2NocmUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNTA6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1''@;'; put 'put ''YS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1''@;'; put 'put ''ZW50aWFsLWFxdWEtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNzAwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItYXF1YS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3Jl''@;'; put 'put ''ZW4tMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTMwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1n''@;'; put 'put ''cmVlbi04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwMDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXF1ZW50aWFsLXJlZC0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTQwMDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtOTAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApfTpyb290ey0tY2RzLWdsb2JhbC1iYXNlOjIwfWh0bWx7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsaW5lLWhlaWdodDox''@;'; put 'put ''LjE1Oy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCV9Ym9keXttYXJnaW46MH1hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixtYWluLG1lbnUsbmF2LHNlY3Rpb24sc3VtbWFyeXtkaXNwbGF5''@;'; put 'put ''OmJsb2NrfWF1ZGlvLGNhbnZhcyxwcm9ncmVzcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja31hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lO2hlaWdodDowfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXRlbXBsYXRlLFtoaWRkZW5de2Rpc3BsYXk6bm9uZX1h''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDpvYmplY3RzfWE6YWN0aXZlLGE6aG92ZXJ7b3V0bGluZS13aWR0aDowfWFiYnJbdGl0bGVde2JvcmRlci1ib3R0b206bm9uZTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQt''@;'; put 'put ''dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9ZGZue2ZvbnQtc3R5bGU6aXRhbGljfWgxe2ZvbnQtc2l6ZToyZW07bWFy''@;'; put 'put ''Z2luOi42N2VtIDB9bWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZjA7Y29sb3I6IzAwMH1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1Yntib3R0b206LS4yNWVt''@;'; put 'put ''fXN1cHt0b3A6LS41ZW19aW1ne2JvcmRlci1zdHlsZTpub25lfXN2Zzpub3QoOnJvb3Qpe292ZXJmbG93OmhpZGRlbn1jb2RlLGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjFlbX1maWd1cmV7bWFyZ2luOjFlbSA0MHB4fWhye2JveC1zaXppbmc6Y29udGVu''@;'; put 'put ''dC1ib3g7aGVpZ2h0OjA7b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDttYXJnaW46MH10ZXh0YXJlYXtsaW5lLWhlaWdodDoxLjE1fW9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OjcwMH1idXR0b24saW5wdXR7b3ZlcmZsb3c6''@;'; put 'put ''dmlzaWJsZX1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGh0bWwgW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1idXR0b25dOjotbW96''@;'; put 'put ''LWZvY3VzLWlubmVyLFt0eXBlPXJlc2V0XTo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1zdWJtaXRdOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH1maWVsZHNldHtib3JkZXI6MXB4IHNvbGlkIHNpbHZlcjttYXJnaW46MCAycHg7cGFkZGluZzouMzVlbSAu''@;'; put 'put ''NjI1ZW0gLjc1ZW19bGVnZW5ke2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2Rpc3BsYXk6dGFibGU7bWF4LXdpZHRoOjEwMCU7cGFkZGluZzowO3doaXRlLXNwYWNlOm5vcm1hbH10ZXh0YXJlYXtvdmVyZmxvdzphdXRvfVt0eXBlPWNoZWNrYm94XSxbdHlwZT1yYWRpb117''@;'; put 'put ''Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1bdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFt0eXBlPW51bWJlcl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZp''@;'; put 'put ''ZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdl''@;'; put 'put ''YmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OnJvb3R7LS1jbHItY29sb3ItbmV1dHJhbC0wOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1uZXV0cmFsLTUwOmhzbCgxOTgsIDAlLCA5OCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwOmhzbCgxOTgsIDAlLCA5NSUp''@;'; put 'put ''Oy0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCA5MSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMzAwOmhzbCgxOTgsIDAlLCA4NyUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwOmhzbCgxOTgsIDAlLCA4MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNTAwOmhzbCgxOTgsIDAlLCA3''@;'; put 'put ''MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwOmhzbCgxOTgsIDAlLCA1NSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwOmhzbCgxOTgsIDAlLCA0MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtODAwOmhzbCgxOTgsIDAlLCAyNyUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtOTAwOmhzbCgxOTgsIDAl''@;'; put 'put ''LCAyMCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTEwMDpoc2wo''@;'; put 'put ''MTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRy''@;'; put 'put ''YWwtNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1j''@;'; put 'put ''bHItY29sb3Itb24tbmV1dHJhbC05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3ItYWN0aW9uLTUwOmhzbCgxOTgsIDgzJSwgOTQlKTstLWNsci1jb2xvci1hY3Rpb24tMTAwOmhzbCgxOTgsIDgx''@;'; put 'put ''JSwgODglKTstLWNsci1jb2xvci1hY3Rpb24tMjAwOmhzbCgxOTgsIDc4JSwgNzglKTstLWNsci1jb2xvci1hY3Rpb24tMzAwOmhzbCgxOTgsIDY5JSwgNjklKTstLWNsci1jb2xvci1hY3Rpb24tNDAwOmhzbCgxOTgsIDY2JSwgNTclKTstLWNsci1jb2xvci1hY3Rpb24tNTAwOmhzbCgxOTgs''@;'; put 'put ''IDgwJSwgNDYlKTstLWNsci1jb2xvci1hY3Rpb24tNjAwOmhzbCgxOTgsIDEwMCUsIDMyJSk7LS1jbHItY29sb3ItYWN0aW9uLTcwMDpoc2woMTk4LCAxMDAlLCAyOCUpOy0tY2xyLWNvbG9yLWFjdGlvbi04MDA6aHNsKDE5OCwgMTAwJSwgMjQlKTstLWNsci1jb2xvci1hY3Rpb24tOTAwOmhz''@;'; put 'put ''bCgxOTgsIDEwMCUsIDIxJSk7LS1jbHItY29sb3ItYWN0aW9uLTEwMDA6aHNsKDE5OCwgMTAwJSwgMTUlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tMTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0''@;'; put 'put ''aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9y''@;'; put 'put ''LW9uLWFjdGlvbi02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi05MDA6aHNsKDE5OCwgMCUsIDEw''@;'; put 'put ''MCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTUwOmhzbCgyODIsIDEwMCUsIDk1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDI4MiwgNTklLCA4NyUpOy0tY2xyLWNvbG9y''@;'; put 'put ''LXNlY29uZGFyeS1hY3Rpb24tMjAwOmhzbCgyODIsIDUxJSwgNzglKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTMwMDpoc2woMjgyLCA0NSUsIDcwJSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDI4MiwgNDQlLCA2MiUpOy0tY2xyLWNvbG9yLXNlY29uZGFy''@;'; put 'put ''eS1hY3Rpb24tNTAwOmhzbCgyODIsIDQzJSwgNTQlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTYwMDpoc2woMjgyLCA1MCUsIDQ1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi03MDA6aHNsKDI4MiwgNjklLCAzNyUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24t''@;'; put 'put ''ODAwOmhzbCgyODIsIDEwMCUsIDI5JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi05MDA6aHNsKDI4MiwgMTAwJSwgMjIlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTEwMDA6aHNsKDI4MiwgMTAwJSwgMTQlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTUw''@;'; put 'put ''OmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMzAwOmhzbCgx''@;'; put 'put ''OTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTUwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi02MDA6aHNsKDE5OCwg''@;'; put 'put ''MCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi05MDA6aHNsKDE5OCwg''@;'; put 'put ''MCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3ItZGFuZ2VyLTUwOmhzbCg5LCAxMDAlLCA5NyUpOy0tY2xyLWNvbG9yLWRhbmdlci0xMDA6aHNsKDksIDk1JSwgOTIlKTstLWNsci1jb2xvci1kYW5nZXIt''@;'; put 'put ''MjAwOmhzbCg5LCA5MSUsIDg2JSk7LS1jbHItY29sb3ItZGFuZ2VyLTMwMDpoc2woOSwgODMlLCA3NiUpOy0tY2xyLWNvbG9yLWRhbmdlci00MDA6aHNsKDksIDg1JSwgNjclKTstLWNsci1jb2xvci1kYW5nZXItNTAwOmhzbCg5LCA4OCUsIDYxJSk7LS1jbHItY29sb3ItZGFuZ2VyLTYwMDpo''@;'; put 'put ''c2woOSwgOTIlLCA1MCUpOy0tY2xyLWNvbG9yLWRhbmdlci03MDA6aHNsKDksIDEwMCUsIDQzJSk7LS1jbHItY29sb3ItZGFuZ2VyLTgwMDpoc2woOSwgMTAwJSwgMzglKTstLWNsci1jb2xvci1kYW5nZXItOTAwOmhzbCg5LCAxMDAlLCAzMCUpOy0tY2xyLWNvbG9yLWRhbmdlci0xMDAwOmhz''@;'; put 'put ''bCg5LCAxMDAlLCAyMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci01MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2Vy''@;'; put 'put ''LTMwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2VyLTYwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9u''@;'; put 'put ''LWRhbmdlci03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0xMDAwOmhzbCgxOTgsIDAlLCAxMDAl''@;'; put 'put ''KTstLWNsci1jb2xvci13YXJuaW5nLTUwOmhzbCg0OCwgMTAwJSwgOTUlKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDpoc2woNDgsIDEwMCUsIDg5JSk7LS1jbHItY29sb3Itd2FybmluZy0yMDA6aHNsKDQ4LCAxMDAlLCA4MyUpOy0tY2xyLWNvbG9yLXdhcm5pbmctMzAwOmhzbCg0OCwgOTgl''@;'; put 'put ''LCA3MiUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNDAwOmhzbCg0OCwgOTQlLCA1NyUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNTAwOmhzbCg0OCwgOTUlLCA0OCUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNjAwOmhzbCg0NiwgMTAwJSwgNDUlKTstLWNsci1jb2xvci13YXJuaW5nLTcwMDpoc2woNDMs''@;'; put 'put ''IDEwMCUsIDQyJSk7LS1jbHItY29sb3Itd2FybmluZy04MDA6aHNsKDQxLCAxMDAlLCAzNCUpOy0tY2xyLWNvbG9yLXdhcm5pbmctOTAwOmhzbCgzOCwgMTAwJSwgMjglKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDA6aHNsKDMxLCAxMDAlLCAxOSUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmct''@;'; put 'put ''NTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1v''@;'; put 'put ''bi13YXJuaW5nLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy02MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTcwMDpoc2woMTk4LCAwJSwgMCUpOy0t''@;'; put 'put ''Y2xyLWNvbG9yLW9uLXdhcm5pbmctODAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy05MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNTA6aHNsKDkzLCA1''@;'; put 'put ''MiUsIDg4JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDA6aHNsKDkzLCA1OCUsIDc1JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0yMDA6aHNsKDkzLCA3NiUsIDQ5JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0zMDA6aHNsKDkzLCA3NyUsIDQ0JSk7LS1jbHItY29sb3Itc3VjY2Vzcy00MDA6aHNsKDkz''@;'; put 'put ''LCA3OSUsIDQwJSk7LS1jbHItY29sb3Itc3VjY2Vzcy01MDA6aHNsKDkzLCA2NyUsIDM4JSk7LS1jbHItY29sb3Itc3VjY2Vzcy02MDA6aHNsKDkzLCA4NSUsIDMyJSk7LS1jbHItY29sb3Itc3VjY2Vzcy03MDA6aHNsKDkzLCAxMDAlLCAyNiUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtODAwOmhz''@;'; put 'put ''bCg5MywgMTAwJSwgMjElKTstLWNsci1jb2xvci1zdWNjZXNzLTkwMDpoc2woOTMsIDEwMCUsIDE2JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDAwOmhzbCg5MywgMTAwJSwgMTMlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3Vj''@;'; put 'put ''Y2Vzcy0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1j''@;'; put 'put ''b2xvci1vbi1zdWNjZXNzLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtNjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtODAwOmhzbCgxOTgsIDAl''@;'; put 'put ''LCAxMDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTkwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1ncmlkLWd1dHRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTkpOy0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUpOy0tY2xyLWdyaWQtY29sdW1uLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUpOy0tY2xyLWdyaWQtcm93LW1hcmdpbjpjYWxj''@;'; put 'put ''KHZhcigtLWNsci1ncmlkLWd1dHRlci13aWR0aCkgKiAtLjUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNsb3NlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNsb3NlLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItYmFzZWZvbnQtc2l6ZToxMjUlOy0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItZ2xvYmFsLWFwcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYXBwLWJhY2tncm91bmQpOy0tY2xyLWds''@;'; put 'put ''b2JhbC1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1nbG9iYWwtb24tc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xy''@;'; put 'put ''LWdsb2JhbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHItZ2xvYmFsLWNvbnRlbnQtaGVhZGVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1nbG9iYWwtZm9udC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWdsb2JhbC1zdWNjZXNzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZ2xvYmFsLWVycm9yLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKX06cm9vdHstLWNs''@;'; put 'put ''ci1wb3BvdmVyLWJveC1zaGFkb3ctY29sb3I6cmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLW1ldHJvcG9saXMtZm9udC1mYW1pbHk6TWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWY7LS1j''@;'; put 'put ''bHItYm9keS1mb250OnZhcigtLWNsci1tZXRyb3BvbGlzLWZvbnQtZmFtaWx5KTstLWNsci1mb250OnZhcigtLWNsci1ib2R5LWZvbnQpOy0tY2xyLWRpc3BsYXktZm9udDp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZhbWlseSk7LS1jbHItZm9udC13ZWlnaHQtbGlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQpOy0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXI6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItZm9udC13ZWlnaHQtc2VtaWJvbGQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Zm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLWZvbnQtd2VpZ2h0LWJvbGQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtYm9sZCk7LS1jbHItZm9udC13ZWlnaHQtZXh0cmFib2xkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9s''@;'; put 'put ''ZCk7LS1jbHItaDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oMS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUpOy0tY2xyLWgxLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWRpc3BsYXktZm9udC13ZWlnaHQpOy0tY2xyLWgxLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgxLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpOy0tY2xyLWgxLWxldHRlci1zcGFjaW5nOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWgyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDItZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtc2l6''@;'; put 'put ''ZSk7LS1jbHItaDItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC13ZWlnaHQpOy0tY2xyLWgyLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgyLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWhlYWRsaW5lLWxpbmUtaGVpZ2h0KTstLWNsci1oMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDMtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oMy1mb250''@;'; put 'put ''LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplKTstLWNsci1oMy1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCk7LS1jbHItaDMtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1j''@;'; put 'put ''bHItaDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpOy0tY2xyLWgzLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nKTstLWNsci1oNC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWg0LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7LS1jbHItaDQtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHIt''@;'; put 'put ''aDQtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDQtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7LS1jbHItaDQtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlv''@;'; put 'put ''bi1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oNS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpOy0tY2xyLWg1LWZvbnQtd2VpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWg1LWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpOy0t''@;'; put 'put ''Y2xyLWg1LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWg2LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDYtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplKTstLWNsci1oNi1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0KTstLWNsci1oNi1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oNi1saW5lLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KTstLWNsci1oNi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxldHRlci1zcGFjaW5nKTstLWNsci1wMC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1j''@;'; put 'put ''b2xvci00NTApOy0tY2xyLXAwLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7LS1jbHItcDAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7LS1jbHItcDAtbGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7LS1jbHItcDAtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTst''@;'; put 'put ''LWNsci1wMS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpOy0tY2xyLXAxLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpOy0tY2xyLXAxLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpOy0tY2xyLXAxLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDItZm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSk7LS1jbHItcDItbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS05KTstLWNsci1wMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDMtZm9udC1zaXplOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAzLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItcDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1wMy1s''@;'; put 'put ''ZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXA0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDQtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXA0LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1wNC1saW5lLWhlaWdodDpjYWxjKDIwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItcDQt''@;'; put 'put ''bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA1LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wNS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLXA1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItcDUtbGV0dGVyLXNwYWNpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA2LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQt''@;'; put 'put ''c2l6ZSk7LS1jbHItcDYtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7LS1jbHItcDYtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7LS1jbHItcDYtbGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wNy1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9u''@;'; put 'put ''LWZvbnQtc2l6ZSk7LS1jbHItcDctZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1wNy1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpOy0tY2xy''@;'; put 'put ''LXA3LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDgtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wOC1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDgtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1wOC1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRp''@;'; put 'put ''b24tbGluZS1oZWlnaHQpOy0tY2xyLXA4LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItbGlzdC1pdGVtLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LmNsci1hbGln''@;'; put 'put ''bi1iYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi10b3B7dmVydGljYWwtYWxpZ246dG9wIWltcG9ydGFudH0uY2xyLWFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUhaW1wb3J0YW50fS5jbHItYWxpZ24tYm90dG9te3ZlcnRpY2Fs''@;'; put 'put ''LWFsaWduOmJvdHRvbSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LXRvcHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcCFpbXBvcnRhbnR9LmNsci1jbGVhcmZpeDphZnRlcntjb250ZW50''@;'; put 'put ''OiIiO2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH0uY2xyLWRpc3BsYXktYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNsci1kaXNwbGF5LWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNsci1kaXNwbGF5LWlubGluZXtkaXNwbGF5OmlubGluZSFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''ZmxleC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXdyYXAtcmV2ZXJz''@;'; put 'put ''ZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtc2hy''@;'; put 'put ''aW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1lbmR7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNs''@;'; put 'put ''ci1qdXN0aWZ5LWNvbnRlbnQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1w''@;'; put 'put ''b3J0YW50fS5jbHItYWxpZ24taXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1w''@;'; put 'put ''b3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWNlbnRlcnthbGlnbi1jb250ZW50OmNl''@;'; put 'put ''bnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc3Ry''@;'; put 'put ''ZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWVuZHthbGlnbi1z''@;'; put 'put ''ZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXN0cmV0Y2h7YWxpZ24tc2VsZjpz''@;'; put 'put ''dHJldGNoIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtc20tcm93LXJldmVyc2V7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1zbS1ub3dy''@;'; put 'put ''YXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0we2ZsZXgtZ3JvdzowIWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtc20tc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNt''@;'; put 'put ''LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMt''@;'; put 'put ''c20tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1p''@;'; put 'put ''dGVtcy1zbS1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0''@;'; put 'put ''YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWJldHdlZW57YWxpZ24tY29udGVu''@;'; put 'put ''dDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24t''@;'; put 'put ''c2VsZi1zbS1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYt''@;'; put 'put ''c20tY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH19QG1lZGlhIChtaW4t''@;'; put 'put ''d2lkdGg6NzY4cHgpey5jbHItZmxleC1tZC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1tZC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxleC1tZC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWdyb3ctMXtm''@;'; put 'put ''bGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHItZmxleC1tZC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1z''@;'; put 'put ''dGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1k''@;'; put 'put ''LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3Rh''@;'; put 'put ''cnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtYmFzZWxpbmV7YWxpZ24taXRlbXM6''@;'; put 'put ''YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtZW5k''@;'; put 'put ''e2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNs''@;'; put 'put ''ci1hbGlnbi1jb250ZW50LW1kLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1kLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtYXV0b3thbGlnbi1zZWxmOmF1dG8h''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtbGctcm93''@;'; put 'put ''e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5jbHItZmxleC1sZy1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbi1y''@;'; put 'put ''ZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbGctd3JhcHtmbGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbGctd3JhcC1yZXZlcnNle2Zs''@;'; put 'put ''ZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1sZy1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5jbHItZmxleC1sZy1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxleC1sZy1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxl''@;'; put 'put ''eC1sZy1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgtbGctc2hyaW5rLTF7ZmxleC1zaHJpbms6MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1j''@;'; put 'put ''b250ZW50LWxnLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWxnLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFj''@;'; put 'put ''ZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1z''@;'; put 'put ''LWxnLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWxnLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWdu''@;'; put 'put ''LWl0ZW1zLWxnLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9y''@;'; put 'put ''dGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1hcm91bmR7YWxp''@;'; put 'put ''Z24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLWF1dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGct''@;'; put 'put ''c3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1i''@;'; put 'put ''YXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC14bC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWZsZXgteGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgteGwtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1u''@;'; put 'put ''LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgteGwtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRh''@;'; put 'put ''bnR9LmNsci1mbGV4LXhsLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXNocmluay0we2ZsZXgtc2hyaW5rOjAh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItZmxleC14bC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC14bC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtZW5ke2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVz''@;'; put 'put ''dGlmeS1jb250ZW50LXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5k''@;'; put 'put ''IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtc3RyZXRjaHthbGlnbi1pdGVt''@;'; put 'put ''czpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1j''@;'; put 'put ''ZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fS5jbHItZmxleC14cy1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgteHMtbGFzdHtvcmRlcjoxfS5jbHItZmxleC14cy11bm9yZGVyZWR7b3JkZXI6MH0uY2xyLWZsZXgtaXRl''@;'; put 'put ''bXMteHMtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXhzLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhzLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH0uY2xyLWZsZXgteHMtdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0u''@;'; put 'put ''Y2xyLWZsZXgteHMtbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC14cy1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMteHMtbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMteHMtY2VudGVye2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhzLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMteHMtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1mbGV4LWl0ZW1zLXhzLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNl''@;'; put 'put ''LWJldHdlZW59QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1zbS1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgtc20tbGFzdHtvcmRlcjoxfS5jbHItZmxleC1zbS11bm9yZGVyZWR7b3JkZXI6MH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1pdGVtcy1zbS10''@;'; put 'put ''b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtc20tbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtc20tYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXRvcHthbGln''@;'; put 'put ''bi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LXNtLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgtc20tYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtaXRlbXMtc20tbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6Zmxl''@;'; put 'put ''eC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtc20tY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXNtLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNs''@;'; put 'put ''ci1mbGV4LWl0ZW1zLXNtLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LW1kLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgtbWQtdW5vcmRlcmVke29yZGVyOjB9''@;'; put 'put ''fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtaXRlbXMtbWQtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLW1kLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLW1kLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH19''@;'; put 'put ''QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItZmxleC1tZC10b3B7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jbHItZmxleC1tZC1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LW1kLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo3Njhw''@;'; put 'put ''eCl7LmNsci1mbGV4LWl0ZW1zLW1kLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLW1kLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1tZC1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0''@;'; put 'put ''ZW1zLW1kLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy1tZC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC1s''@;'; put 'put ''Zy1sYXN0e29yZGVyOjF9LmNsci1mbGV4LWxnLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWl0ZW1zLWxnLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1sZy1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5j''@;'; put 'put ''bHItZmxleC1pdGVtcy1sZy1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtbGctdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgtbGctbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC1sZy1ib3R0''@;'; put 'put ''b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1pdGVtcy1sZy1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1sZy1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMt''@;'; put 'put ''bGctcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy1sZy1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMtbGctYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19QG1lZGlhIChtaW4td2lkdGg6''@;'; put 'put ''MTIwMHB4KXsuY2xyLWZsZXgteGwtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LXhsLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgteGwtdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LWl0ZW1zLXhsLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0''@;'; put 'put ''fS5jbHItZmxleC1pdGVtcy14bC1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14bC1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LXhsLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1m''@;'; put 'put ''bGV4LXhsLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgteGwtYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LWl0ZW1zLXhsLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1z''@;'; put 'put ''LXhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14bC1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy14bC1iZXR3ZWVu''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX0uY2xyLWZsb2F0LXhzLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC14cy1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC14cy1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fUBtZWRpYSAobWlu''@;'; put 'put ''LXdpZHRoOjU3NnB4KXsuY2xyLWZsb2F0LXNtLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNs''@;'; put 'put ''ci1mbG9hdC1tZC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQtbWQtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQtbWQtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxvYXQtbGctbGVmdHtm''@;'; put 'put ''bG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LWxnLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0LWxnLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbG9hdC14bC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0''@;'; put 'put ''YW50fS5jbHItZmxvYXQteGwtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQteGwtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19LmNsci1pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fS5jbHItaGlkZGVuLXhzLXVwe2Rpc3BsYXk6bm9uZSFpbXBv''@;'; put 'put ''cnRhbnR9QG1lZGlhIChtYXgtd2lkdGg6NTc1Ljk4cHgpey5jbHItaGlkZGVuLXhzLWRvd257ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItaGlkZGVuLXNtLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjc2''@;'; put 'put ''Ny45OHB4KXsuY2xyLWhpZGRlbi1zbS1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWhpZGRlbi1tZC11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo5OTEuOThweCl7LmNsci1oaWRkZW4tbWQtZG93''@;'; put 'put ''bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1oaWRkZW4tbGctdXB7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6MTE5OS45OHB4KXsuY2xyLWhpZGRlbi1sZy1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9''@;'; put 'put ''fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1oaWRkZW4teGwtdXB7ZGlzcGxheTpub25lIWltcG9ydGFudH19LmNsci1oaWRkZW4teGwtZG93biwuY2xyLXZpc2libGUtcHJpbnQtYmxvY2t7ZGlzcGxheTpub25lIWltcG9ydGFudH1AbWVkaWEgcHJpbnR7LmNsci12aXNpYmxlLXBy''@;'; put 'put ''aW50LWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fX0uY2xyLXZpc2libGUtcHJpbnQtaW5saW5le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX0uY2xyLXZpc2libGUtcHJp''@;'; put 'put ''bnQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fX1AbWVkaWEgcHJpbnR7LmNsci1oaWRkZW4tcHJpbnR7ZGlzcGxheTpub25lIWltcG9y''@;'; put 'put ''dGFudH19LmNsci1jb250YWluZXJ7d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1ncmlkLWNvbnRhaW5lci1wYWRkaW5nKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmcpO21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG99LmNs''@;'; put 'put ''ci1yb3d7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1yaWdodDp2YXIoLS1jbHItZ3JpZC1yb3ctbWFyZ2luKTttYXJnaW4tbGVmdDp2YXIoLS1jbHItZ3JpZC1yb3ctbWFyZ2luKX0uY2xyLW5vLWd1dHRlcnN7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH0uY2xyLW5v''@;'; put 'put ''LWd1dHRlcnM+LmNsci1jb2wsLmNsci1uby1ndXR0ZXJzPltjbGFzcyo9Y2xyLWNvbC1de3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MH0uY2xyLWNvbC14bCwuY2xyLWNvbC14bC1hdXRvLC5jbHItY29sLXhsLTEyLC5jbHItY29sLXhsLTExLC5jbHItY29sLXhsLTEwLC5jbHItY29s''@;'; put 'put ''LXhsLTksLmNsci1jb2wteGwtOCwuY2xyLWNvbC14bC03LC5jbHItY29sLXhsLTYsLmNsci1jb2wteGwtNSwuY2xyLWNvbC14bC00LC5jbHItY29sLXhsLTMsLmNsci1jb2wteGwtMiwuY2xyLWNvbC14bC0xLC5jbHItY29sLWxnLC5jbHItY29sLWxnLWF1dG8sLmNsci1jb2wtbGctMTIsLmNs''@;'; put 'put ''ci1jb2wtbGctMTEsLmNsci1jb2wtbGctMTAsLmNsci1jb2wtbGctOSwuY2xyLWNvbC1sZy04LC5jbHItY29sLWxnLTcsLmNsci1jb2wtbGctNiwuY2xyLWNvbC1sZy01LC5jbHItY29sLWxnLTQsLmNsci1jb2wtbGctMywuY2xyLWNvbC1sZy0yLC5jbHItY29sLWxnLTEsLmNsci1jb2wtbWQs''@;'; put 'put ''LmNsci1jb2wtbWQtYXV0bywuY2xyLWNvbC1tZC0xMiwuY2xyLWNvbC1tZC0xMSwuY2xyLWNvbC1tZC0xMCwuY2xyLWNvbC1tZC05LC5jbHItY29sLW1kLTgsLmNsci1jb2wtbWQtNywuY2xyLWNvbC1tZC02LC5jbHItY29sLW1kLTUsLmNsci1jb2wtbWQtNCwuY2xyLWNvbC1tZC0zLC5jbHIt''@;'; put 'put ''Y29sLW1kLTIsLmNsci1jb2wtbWQtMSwuY2xyLWNvbC1zbSwuY2xyLWNvbC1zbS1hdXRvLC5jbHItY29sLXNtLTEyLC5jbHItY29sLXNtLTExLC5jbHItY29sLXNtLTEwLC5jbHItY29sLXNtLTksLmNsci1jb2wtc20tOCwuY2xyLWNvbC1zbS03LC5jbHItY29sLXNtLTYsLmNsci1jb2wtc20t''@;'; put 'put ''NSwuY2xyLWNvbC1zbS00LC5jbHItY29sLXNtLTMsLmNsci1jb2wtc20tMiwuY2xyLWNvbC1zbS0xLC5jbHItY29sLC5jbHItY29sLWF1dG8sLmNsci1jb2wtMTIsLmNsci1jb2wtMTEsLmNsci1jb2wtMTAsLmNsci1jb2wtOSwuY2xyLWNvbC04LC5jbHItY29sLTcsLmNsci1jb2wtNiwuY2xy''@;'; put 'put ''LWNvbC01LC5jbHItY29sLTQsLmNsci1jb2wtMywuY2xyLWNvbC0yLC5jbHItY29sLTF7d2lkdGg6MTAwJTttaW4taGVpZ2h0Oi4wNXJlbTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1ncmlkLWNvbHVtbi1wYWRkaW5nKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2xyLWdyaWQtY29sdW1uLXBhZGRp''@;'; put 'put ''bmcpfS5jbHItY29se2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC0xe2ZsZXg6MCAwIDguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9''@;'; put 'put ''LmNsci1jb2wtMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC00e2ZsZXg6MCAwIDMzLjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNv''@;'; put 'put ''bC01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLTd7ZmxleDowIDAgNTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLTh7Zmxl''@;'; put 'put ''eDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtMTB7ZmxleDowIDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLTExe2ZsZXg6MCAw''@;'; put 'put ''IDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXItZmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItMHtvcmRlcjowfS5jbHItb3JkZXIt''@;'; put 'put ''MXtvcmRlcjoxfS5jbHItb3JkZXItMntvcmRlcjoyfS5jbHItb3JkZXItM3tvcmRlcjozfS5jbHItb3JkZXItNHtvcmRlcjo0fS5jbHItb3JkZXItNXtvcmRlcjo1fS5jbHItb3JkZXItNntvcmRlcjo2fS5jbHItb3JkZXItN3tvcmRlcjo3fS5jbHItb3JkZXItOHtvcmRlcjo4fS5jbHItb3Jk''@;'; put 'put ''ZXItOXtvcmRlcjo5fS5jbHItb3JkZXItMTB7b3JkZXI6MTB9LmNsci1vcmRlci0xMXtvcmRlcjoxMX0uY2xyLW9yZGVyLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5j''@;'; put 'put ''bHItb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC03e21hcmdpbi1sZWZ0''@;'; put 'put ''OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2''@;'; put 'put ''NjY2NyV9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItY29sLXNte2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1zbS1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC1zbS0xe2ZsZXg6MCAwIDgu''@;'; put 'put ''MzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtc20tMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC1zbS00e2ZsZXg6MCAwIDMz''@;'; put 'put ''LjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLXNtLTd7ZmxleDowIDAg''@;'; put 'put ''NTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTh7ZmxleDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLXNtLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtc20tMTB7ZmxleDow''@;'; put 'put ''IDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTExe2ZsZXg6MCAwIDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXItc20t''@;'; put 'put ''Zmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1zbS1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItc20tMHtvcmRlcjowfS5jbHItb3JkZXItc20tMXtvcmRlcjoxfS5jbHItb3JkZXItc20tMntvcmRlcjoyfS5jbHItb3JkZXItc20tM3tvcmRlcjozfS5jbHItb3JkZXItc20tNHtvcmRlcjo0fS5j''@;'; put 'put ''bHItb3JkZXItc20tNXtvcmRlcjo1fS5jbHItb3JkZXItc20tNntvcmRlcjo2fS5jbHItb3JkZXItc20tN3tvcmRlcjo3fS5jbHItb3JkZXItc20tOHtvcmRlcjo4fS5jbHItb3JkZXItc20tOXtvcmRlcjo5fS5jbHItb3JkZXItc20tMTB7b3JkZXI6MTB9LmNsci1vcmRlci1zbS0xMXtvcmRl''@;'; put 'put ''cjoxMX0uY2xyLW9yZGVyLXNtLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LXNtLTB7bWFyZ2luLWxlZnQ6MH0uY2xyLW9mZnNldC1zbS0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtc20tMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1zbS0z''@;'; put 'put ''e21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC1zbS00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtc20tNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtc20tN3ttYXJnaW4tbGVm''@;'; put 'put ''dDo1OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXNtLTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LXNtLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTExe21hcmdpbi1s''@;'; put 'put ''ZWZ0OjkxLjY2NjY2NjY2NjclfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1jb2wtbWR7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLW1kLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29sLW1k''@;'; put 'put ''LTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1tZC0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29sLW1k''@;'; put 'put ''LTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1jb2wt''@;'; put 'put ''bWQtN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbWQtOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xyLWNv''@;'; put 'put ''bC1tZC0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9''@;'; put 'put ''LmNsci1vcmRlci1tZC1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLW1kLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci1tZC0we29yZGVyOjB9LmNsci1vcmRlci1tZC0xe29yZGVyOjF9LmNsci1vcmRlci1tZC0ye29yZGVyOjJ9LmNsci1vcmRlci1tZC0ze29yZGVyOjN9LmNsci1vcmRlci1t''@;'; put 'put ''ZC00e29yZGVyOjR9LmNsci1vcmRlci1tZC01e29yZGVyOjV9LmNsci1vcmRlci1tZC02e29yZGVyOjZ9LmNsci1vcmRlci1tZC03e29yZGVyOjd9LmNsci1vcmRlci1tZC04e29yZGVyOjh9LmNsci1vcmRlci1tZC05e29yZGVyOjl9LmNsci1vcmRlci1tZC0xMHtvcmRlcjoxMH0uY2xyLW9y''@;'; put 'put ''ZGVyLW1kLTExe29yZGVyOjExfS5jbHItb3JkZXItbWQtMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQtbWQtMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LW1kLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1tZC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5j''@;'; put 'put ''bHItb2Zmc2V0LW1kLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LW1kLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbWQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1tZC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC1t''@;'; put 'put ''ZC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbWQtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtbWQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQt''@;'; put 'put ''bWQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWNvbC1sZ3tmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtbGctYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5v''@;'; put 'put ''bmV9LmNsci1jb2wtbGctMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLWxnLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoy''@;'; put 'put ''NSV9LmNsci1jb2wtbGctNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRo''@;'; put 'put ''OjUwJX0uY2xyLWNvbC1sZy03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1sZy04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC1sZy05e2ZsZXg6MCAwIDc1JTttYXgtd2lk''@;'; put 'put ''dGg6NzUlfS5jbHItY29sLWxnLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC1sZy0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctMTJ7ZmxleDowIDAgMTAwJTtt''@;'; put 'put ''YXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLWxnLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItbGctbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLWxnLTB7b3JkZXI6MH0uY2xyLW9yZGVyLWxnLTF7b3JkZXI6MX0uY2xyLW9yZGVyLWxnLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLWxnLTN7b3JkZXI6''@;'; put 'put ''M30uY2xyLW9yZGVyLWxnLTR7b3JkZXI6NH0uY2xyLW9yZGVyLWxnLTV7b3JkZXI6NX0uY2xyLW9yZGVyLWxnLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLWxnLTd7b3JkZXI6N30uY2xyLW9yZGVyLWxnLTh7b3JkZXI6OH0uY2xyLW9yZGVyLWxnLTl7b3JkZXI6OX0uY2xyLW9yZGVyLWxnLTEwe29y''@;'; put 'put ''ZGVyOjEwfS5jbHItb3JkZXItbGctMTF7b3JkZXI6MTF9LmNsci1vcmRlci1sZy0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC1sZy0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQtbGctMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LWxnLTJ7bWFyZ2luLWxlZnQ6MTYu''@;'; put 'put ''NjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbGctM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQtbGctNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LWxnLTZ7bWFyZ2luLWxlZnQ6NTAl''@;'; put 'put ''fS5jbHItb2Zmc2V0LWxnLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbGctOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1sZy05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC1sZy0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMz''@;'; put 'put ''JX0uY2xyLW9mZnNldC1sZy0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWNvbC14bHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wteGwtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1''@;'; put 'put ''dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wteGwtMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLXhsLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTN7ZmxleDowIDAg''@;'; put 'put ''MjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wteGwtNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtNntmbGV4OjAg''@;'; put 'put ''MCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC14bC03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC14bC05e2ZsZXg6''@;'; put 'put ''MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLXhsLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtMTJ7''@;'; put 'put ''ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLXhsLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXIteGwtbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLXhsLTB7b3JkZXI6MH0uY2xyLW9yZGVyLXhsLTF7b3JkZXI6MX0uY2xyLW9yZGVyLXhsLTJ7b3JkZXI6Mn0uY2xyLW9y''@;'; put 'put ''ZGVyLXhsLTN7b3JkZXI6M30uY2xyLW9yZGVyLXhsLTR7b3JkZXI6NH0uY2xyLW9yZGVyLXhsLTV7b3JkZXI6NX0uY2xyLW9yZGVyLXhsLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLXhsLTd7b3JkZXI6N30uY2xyLW9yZGVyLXhsLTh7b3JkZXI6OH0uY2xyLW9yZGVyLXhsLTl7b3JkZXI6OX0uY2xy''@;'; put 'put ''LW9yZGVyLXhsLTEwe29yZGVyOjEwfS5jbHItb3JkZXIteGwtMTF7b3JkZXI6MTF9LmNsci1vcmRlci14bC0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC14bC0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQteGwtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXhsLTJ7''@;'; put 'put ''bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQteGwtM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQteGwtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXhsLTZ7''@;'; put 'put ''bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LXhsLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQteGwtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC14bC05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC14bC0xMHttYXJnaW4tbGVm''@;'; put 'put ''dDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19LmNsci1icmVhay1yb3d7d2lkdGg6MTAwJX0qLDpiZWZvcmUsOmFmdGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKXtwYWRk''@;'; put 'put ''aW5nLWxlZnQ6MDttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGUtcG9zaXRpb246b3V0c2lkZX11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKSBsaTo6bWFya2Vye2NvbG9yOnRyYW5zcGFyZW50fWxpe2NvbG9yOnZhcigtLWNsci1saXN0LWl0ZW0tY29sb3IpO2ZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9dWw6bm90KFtjZHMtbGlzdF0pLG9sOm5vdChbY2RzLWxpc3RdKXtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZTttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7cGFkZGlu''@;'; put 'put ''Zy1sZWZ0OjB9dWwubGlzdDpub3QoW2Nkcy1saXN0XSksb2wubGlzdDpub3QoW2Nkcy1saXN0XSl7bGlzdC1zdHlsZS1wb3NpdGlvbjpvdXRzaWRlO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9dWwubGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saSxvbC5saXN0''@;'; put 'put ''Om5vdChbY2RzLWxpc3RdKS5jb21wYWN0Pmxpe21hcmdpbi1ib3R0b206MH11bDpub3QoLmxpc3QtdW5zdHlsZWQpOm5vdChbY2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVkLG9sOm5vdChbY2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVke21hcmdpbi1sZWZ0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNil9bGk+dWw6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfXVsLmxpc3QtZ3JvdXA6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MH11bDpub3QoW2Nkcy1saXN0XSkubGlzdC1zcGFjZXIsb2w6''@;'; put 'put ''bm90KFtjZHMtbGlzdF0pLmxpc3Qtc3BhY2Vye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1wcmV7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMH1wcmV7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfXByZSBjb2Rle3doaXRlLXNwYWNlOnByZX1jb2RlLmNsci1jb2Rle2NvbG9yOnZhcigtLWNkcy1hbGlhcy11dGls''@;'; put 'put ''aXR5LXJlZCk7cGFkZGluZzowO2JhY2tncm91bmQ6MCAwfWgxOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oMS1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWgxLWNv''@;'; put 'put ''bG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWgxLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWgxLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDEtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1oMS1sZXR0ZXItc3BhY2luZyl9aDI6bm90''@;'; put 'put ''KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWgyLWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDItZm9udC1zaXplKTtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jbHItaDItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oMi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWgyLWxldHRlci1zcGFjaW5nKX1oMzpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDMtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oMy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMy1mb250LXdlaWdodCk7bGlu''@;'; put 'put ''ZS1oZWlnaHQ6dmFyKC0tY2xyLWgzLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDMtbGV0dGVyLXNwYWNpbmcpfWg0Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZh''@;'; put 'put ''cigtLWNsci1oNC1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWg0LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWg0LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWg0LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDQtbGluZS1oZWlnaHQpO2xldHRl''@;'; put 'put ''ci1zcGFjaW5nOnZhcigtLWNsci1oNC1sZXR0ZXItc3BhY2luZyl9aDU6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWg1LWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''aDUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItaDUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oNS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWg1LWxldHRlci1zcGFjaW5nKX1o''@;'; put 'put ''Njpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDYtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oNi1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oNi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWg2LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDYtbGV0dGVyLXNwYWNpbmcpfWJvZHk6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6MCFpbXBvcnRh''@;'; put 'put ''bnQ7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDEtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNs''@;'; put 'put ''ci1wMS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAxLWxldHRlci1zcGFjaW5nKX1ib2R5IHA6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQp''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAxLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDEt''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAwOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDA6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1w''@;'; put 'put ''MC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAwLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDAtbGV0dGVyLXNwYWNpbmcpfWJv''@;'; put 'put ''ZHkgLnAyOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDI6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMi1jb2xvcik7Zm9udC1zaXpl''@;'; put 'put ''OnZhcigtLWNsci1wMi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAyLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDItbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAzOm5vdChbY2RzLXRl''@;'; put 'put ''eHRdKSxib2R5IHAucDM6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMy1mb250''@;'; put 'put ''LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAzLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDMtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA0Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDQ6bm90''@;'; put 'put ''KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNsci1wNC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA0LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDQtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA1Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDU6bm90KFtjZHMtdGV4dF0pe21hcmdp''@;'; put 'put ''bi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNS1mb250''@;'; put 'put ''LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA1LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDUtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA2Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDY6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNi1mb250LXdlaWdodCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLXA2LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDYtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA3Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDc6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJn''@;'; put 'put ''aW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA3LWxp''@;'; put 'put ''bmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDctbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA4Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDg6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1m''@;'; put 'put ''YW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wOC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wOC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wOC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA4LWxpbmUtaGVpZ2h0KTtsZXR0ZXIt''@;'; put 'put ''c3BhY2luZzp2YXIoLS1jbHItcDgtbGV0dGVyLXNwYWNpbmcpfS50ZXh0LWxpZ2h0e2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1saWdodCl9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyIWltcG9y''@;'; put 'put ''dGFudH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9LnRleHQtanVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fWh0bWw6bm90KFtjZHMtdGV4dF0pe2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7Zm9udC1mYW1pbHk6dmFy''@;'; put 'put ''KC0tY2xyLWZvbnQpO2ZvbnQtc2l6ZTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtYmFzZSkvMTYqMTAwJSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItbGluay1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbGluay1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1saW5rLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpOy0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZp''@;'; put 'put ''c2l0ZWQpOy0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpfWh0bWx7Ym94LXNpemluZzpib3JkZXItYm94fSosOmJlZm9yZSw6YWZ0ZXJ7Ym94LXNpemluZzppbmhlcml0fWh0bWx7LW1zLW92''@;'; put 'put ''ZXJmbG93LXN0eWxlOnNjcm9sbGJhcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aW1ne3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1bcm9sZT1idXR0b25de2N1cnNvcjpwb2ludGVyfWEsYXJlYSxidXR0b24sW3JvbGU9YnV0dG9uXSxpbnB1dCxsYWJlbCxzZWxlY3Qs''@;'; put 'put ''c3VtbWFyeSx0ZXh0YXJlYXt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9ufWlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Ym9yZGVyLXJhZGl1czowfWlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkLGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1p''@;'; put 'put ''bnB1dFt0eXBlPWRhdGVdLGlucHV0W3R5cGU9dGltZV0saW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0saW5wdXRbdHlwZT1tb250aF17LXdlYmtpdC1hcHBlYXJhbmNlOmxpc3Rib3h9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWZpZWxkc2V0e21pbi13aWR0aDowO3BhZGRpbmc6MDttYXJn''@;'; put 'put ''aW46MDtib3JkZXI6MH1sZWdlbmR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmc6MDtsaW5lLWhlaWdodDppbmhlcml0fWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRse21hcmdpbi1ib3R0''@;'; put 'put ''b206MDttYXJnaW4tdG9wOjFyZW19dGFibGV7Ym9yZGVyLXNwYWNpbmc6MH0uY2xyLXNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292''@;'; put 'put ''ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowfS5hbGVydC1pY29uLC5jbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3BhZGRpbmc6MDti''@;'; put 'put ''YWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlkZGxlfS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmcsLmFsZXJ0LWljb24uaWNvbi13YXJuaW5nLC5jbHItaWNvbi5jbHItaWNvbi13YXJuaW5nLC5jbHItaWNvbi5p''@;'; put 'put ''Y29uLXdhcm5pbmd7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIwdmlld0JveCUzRCUyMjUlMjA1JTIwMjYlMjAyNiUyMiUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWlkWU1pZCUy''@;'; put 'put ''MG1lZXQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUyMHR5cGUlM0QlMjJ0ZXh0JTJG''@;'; put 'put ''Y3NzJTIyJTNFJTBBJTA5LmNsci1pLW91dGxpbmUlN0JmaWxsLXJ1bGUlM0FldmVub2RkJTNCY2xpcC1ydWxlJTNBZXZlbm9kZCUzQmZpbGwlM0ElMjM3NDc0NzQlM0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0N0aXRsZSUzRWV4Y2xhbWF0aW9uLXRyaWFuZ2xlLWxpbmUlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSUyMiUyMGQlM0QlMjJNMTglMkMyMS4zMmExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxLjMtMS4zVjE0YTEuMyUyQzEuMyUyQzAlMkMxJTJDMC0yLjYlMkMwdjZBMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMTglMkMyMS4zMlolMjIlM0UlM0MlMkZwYXRoJTNFJTNDY2lyY2xlJTIwY2xh''@;'; put 'put ''c3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTIlMjIlMjBjeCUzRCUyMjE3Ljk1JTIyJTIwY3klM0QlMjIyNC4yNyUyMiUyMHIlM0QlMjIxLjUlMjIlM0UlM0MlMkZjaXJjbGUlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMlMjIlMjBkJTNEJTIyTTMwLjMzJTJDMjUuNTQlMkMyMC41OSUyQzcuNmEzJTJDMyUyQzAlMkMwJTJDMC01LjI3JTJDMEw1LjU3JTJDMjUuNTRBMyUyQzMlMkMwJTJDMCUyQzAlMkM4LjIxJTJDMzBIMjcuNjlhMyUyQzMlMkMwJTJDMCUyQzAlMkMyLjY0LTQuNDNabS0xLjc4''@;'; put 'put ''JTJDMS45NGExJTJDMSUyQzAlMkMwJTJDMS0uODYuNDlIOC4yMWExJTJDMSUyQzAlMkMwJTJDMS0uODgtMS40OEwxNy4wNyUyQzguNTVhMSUyQzElMkMwJTJDMCUyQzElMkMxLjc2JTJDMGw5Ljc0JTJDMTcuOTRBMSUyQzElMkMwJTJDMCUyQzElMkMyOC41NSUyQzI3LjQ4WiUyMiUzRSUzQyUy''@;'; put 'put ''RnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZzdmclM0UpfS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGUsLmNsci1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3Zn''@;'; put 'put ''K3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjI1JTIwNSUyMDI2JTIwMjYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUy''@;'; put 'put ''RjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlM0UlM0NkZWZzJTNFJTNDc3R5bGUlMjB0eXBlJTNEJTIydGV4dCUyRmNzcyUyMiUzRSUwQSUwOS5jbHItaS1vdXRsaW5lJTdCZmlsbC1ydWxlJTNBZXZl''@;'; put 'put ''bm9kZCUzQmNsaXAtcnVsZSUzQWV2ZW5vZGQlM0JmaWxsJTNBaHNsKDE5OCwgMCUsIDEwMCUpJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi10cmlh''@;'; put 'put ''bmdsZS1saW5lJTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTElMjIlMjBkJTNEJTIyTTE4JTJDMjEuMzJhMS4zJTJDMS4z''@;'; put 'put ''JTJDMCUyQzAlMkMwJTJDMS4zLTEuM1YxNGExLjMlMkMxLjMlMkMwJTJDMSUyQzAtMi42JTJDMHY2QTEuMyUyQzEuMyUyQzAlMkMwJTJDMCUyQzE4JTJDMjEuMzJaJTIyJTNFJTNDJTJGcGF0aCUzRSUzQ2NpcmNsZSUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yJTIyJTIwY3glM0QlMjIxNy45NSUyMiUyMGN5JTNEJTIyMjQuMjclMjIlMjByJTNEJTIyMS41JTIyJTNFJTNDJTJGY2lyY2xlJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0zJTIyJTIwZCUzRCUyMk0zMC4zMyUyQzI1LjU0''@;'; put 'put ''JTJDMjAuNTklMkM3LjZhMyUyQzMlMkMwJTJDMCUyQzAtNS4yNyUyQzBMNS41NyUyQzI1LjU0QTMlMkMzJTJDMCUyQzAlMkMwJTJDOC4yMSUyQzMwSDI3LjY5YTMlMkMzJTJDMCUyQzAlMkMwJTJDMi42NC00LjQzWm0tMS43OCUyQzEuOTRhMSUyQzElMkMwJTJDMCUyQzEtLjg2LjQ5SDguMjFh''@;'; put 'put ''MSUyQzElMkMwJTJDMCUyQzEtLjg4LTEuNDhMMTcuMDclMkM4LjU1YTElMkMxJTJDMCUyQzAlMkMxJTJDMS43NiUyQzBsOS43NCUyQzE3Ljk0QTElMkMxJTJDMCUyQzAlMkMxJTJDMjguNTUlMkMyNy40OFolMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDJTJGc3ZnJTNFIil9LmFsZXJ0LWljb24uY2xyLXZtdy1sb2dvLC5jbHItaWNvbi5jbHItdm13LWxvZ297YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUy''@;'; put 'put ''MiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxl''@;'; put 'put ''JTNFdm0lMjBidWclM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIySGVhZGVycyUyMiUyMHN0cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxJTIyJTIwZmlsbCUzRCUyMm5v''@;'; put 'put ''bmUlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIyQ0wtSGVhZGVycy1TcGVjcyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgtMjYyLjAwMDAwMCUyQyUyMC0xNzUuMDAwMDAwKSUyMiUzRSUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMjAxJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlKDIzOC4wMDAwMDAlMkMlMjAxNjMuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ2clMjBpZCUzRCUyMnZtLWJ1ZyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgyNC43MDMxMjUlMkMlMjAxMi4wMDAwMDApJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGlkJTNEJTIy''@;'; put 'put ''UmVjdGFuZ2xlLTQyJTIyJTIwZmlsbC1vcGFjaXR5JTNEJTIyMC4yNSUyMiUyMGZpbGwlM0QlMjIlMjNEREREREQlMjIlMjBvcGFjaXR5JTNEJTIyMC42JTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyMCUyMiUyMHdpZHRoJTNEJTIyMzYlMjIlMjBoZWlnaHQlM0QlMjIzNiUyMiUyMHJ4JTNE''@;'; put 'put ''JTIyMyUyMiUzRSUzQyUyRnJlY3QlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk03LjYzOTQ4Mzc2JTJDMTMuODc2MjQwMiUyMEM3LjMyMjY1MzI0JTJDMTMuMjA5NzA4MiUyMDYuNTM5Nzgx''@;'; put 'put ''NTIlMkMxMi45MDg1MTM5JTIwNS44MDkyMzA0MiUyQzEzLjIxOTkzNCUyMEM1LjA3NzcxMDQzJTJDMTMuNTMyMjgzNyUyMDQuODA5MzI0OTUlMkMxNC4zMTAzNjkxJTIwNS4xMzk3MjAwNyUyQzE0Ljk3NjkwMTElMjBMOC4yMDcyNTk1NCUyQzIxLjM3NDQ5MjMlMjBDOC42ODk3NzIwNyUyQzIy''@;'; put 'put ''LjM3ODQ3MzUlMjA5LjE5ODQ0NDkxJTJDMjIuOTAzNzA0NCUyMDEwLjE1MjgxMjElMkMyMi45MDM3MDQ0JTIwQzExLjE3MjA5NTUlMkMyMi45MDM3MDQ0JTIwMTEuNjE2ODIwOSUyQzIyLjMzMTA2MzMlMjAxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMEMxMi4wOTgzNjQ2JTJDMjEuMzc0NDky''@;'; put 'put ''MyUyMDE0Ljc3NDQ2ODIlMkMxNS43ODQ3MzQxJTIwMTQuODAxNTk3NCUyQzE1LjcyNjE2ODUlMjBDMTQuODI4NzI2NiUyQzE1LjY2NjY3MzMlMjAxNC45MTQ5NTg4JTJDMTUuNDg2MzI4NiUyMDE1LjE4NzIxOTklMkMxNS40ODcyNTgyJTIwQzE1LjQxNzgxODIlMkMxNS40OTAwNDclMjAxNS42''@;'; put 'put ''MTA2Mjk0JTJDMTUuNjY1NzQzNyUyMDE1LjYxMDYyOTQlMkMxNS45MDE4NjUyJTIwTDE1LjYxMDYyOTQlMkMyMS4zNjk4NDQzJTIwQzE1LjYxMDYyOTQlMkMyMi4yMTIwNzMlMjAxNi4wOTc5ODY1JTJDMjIuOTAzNzA0NCUyMDE3LjAzNDkxMzQlMkMyMi45MDM3MDQ0JTIwQzE3Ljk3MTg0MDMl''@;'; put 'put ''MkMyMi45MDM3MDQ0JTIwMTguNDc4NTc1NCUyQzIyLjIxMjA3MyUyMDE4LjQ3ODU3NTQlMkMyMS4zNjk4NDQzJTIwTDE4LjQ3ODU3NTQlMkMxNi44OTY1NTAzJTIwQzE4LjQ3ODU3NTQlMkMxNi4wMzM4NzAyJTIwMTkuMTIxOTI1NCUyQzE1LjQ3NDI0MzYlMjAyMC4wMDA3MTgzJTJDMTUuNDc0''@;'; put 'put ''MjQzNiUyMEMyMC44Nzg1NDIzJTJDMTUuNDc0MjQzNiUyMDIxLjQ2Mzc1ODMlMkMxNi4wNTI0NjI0JTIwMjEuNDYzNzU4MyUyQzE2Ljg5NjU1MDMlMjBMMjEuNDYzNzU4MyUyQzIxLjM2OTg0NDMlMjBDMjEuNDYzNzU4MyUyQzIyLjIxMjA3MyUyMDIxLjk1MjA4NDIlMkMyMi45MDM3MDQ0JTIw''@;'; put 'put ''MjIuODg4MDQyMyUyQzIyLjkwMzcwNDQlMjBDMjMuODI0MDAwMyUyQzIyLjkwMzcwNDQlMjAyNC4zMzI2NzMxJTJDMjIuMjEyMDczJTIwMjQuMzMyNjczMSUyQzIxLjM2OTg0NDMlMjBMMjQuMzMyNjczMSUyQzE2Ljg5NjU1MDMlMjBDMjQuMzMyNjczMSUyQzE2LjAzMzg3MDIlMjAyNC45NzUw''@;'; put 'put ''NTQzJTJDMTUuNDc0MjQzNiUyMDI1Ljg1Mzg0NzIlMkMxNS40NzQyNDM2JTIwQzI2LjczMDcwMjMlMkMxNS40NzQyNDM2JTIwMjcuMzE2ODg3MSUyQzE2LjA1MjQ2MjQlMjAyNy4zMTY4ODcxJTJDMTYuODk2NTUwMyUyMEwyNy4zMTY4ODcxJTJDMjEuMzY5ODQ0MyUyMEMyNy4zMTY4ODcxJTJD''@;'; put 'put ''MjIuMjEyMDczJTIwMjcuODA1MjEzMSUyQzIyLjkwMzcwNDQlMjAyOC43NDIxNCUyQzIyLjkwMzcwNDQlMjBDMjkuNjc3MTI5MSUyQzIyLjkwMzcwNDQlMjAzMC4xODQ4MzMxJTJDMjIuMjEyMDczJTIwMzAuMTg0ODMzMSUyQzIxLjM2OTg0NDMlMjBMMzAuMTg0ODMzMSUyQzE2LjI3ODM1ODIl''@;'; put 'put ''MjBDMzAuMTg0ODMzMSUyQzE0LjQwNzA0ODglMjAyOC42MTgxMjA3JTJDMTMuMDk2Mjk1NiUyMDI2LjczMDcwMjMlMkMxMy4wOTYyOTU2JTIwQzI0Ljg0NTIyMTYlMkMxMy4wOTYyOTU2JTIwMjMuNjY1MTAwNiUyQzE0LjM0NzU1MzYlMjAyMy42NjUxMDA2JTJDMTQuMzQ3NTUzNiUyMEMyMy4w''@;'; put 'put ''MzcyNTMlMkMxMy41NjY2NzkzJTIwMjIuMTcyMDI0NyUyQzEzLjA5NzIyNTIlMjAyMC43MDg5ODQ3JTJDMTMuMDk3MjI1MiUyMEMxOS4xNjQ1NTclMkMxMy4wOTcyMjUyJTIwMTcuODEyOTQwNiUyQzE0LjM0NzU1MzYlMjAxNy44MTI5NDA2JTJDMTQuMzQ3NTUzNiUyMEMxNy4xODQxMjQxJTJD''@;'; put 'put ''MTMuNTY2Njc5MyUyMDE2LjExNTQyNjclMkMxMy4wOTcyMjUyJTIwMTUuMjMwODIwNCUyQzEzLjA5NzIyNTIlMjBDMTMuODYxNzYzOCUyQzEzLjA5NzIyNTIlMjAxMi43NzQ2NTcyJTJDMTMuNjc1NDQ0JTIwMTIuMTExOTI5MiUyQzE1LjEzMDI4NzElMjBMMTAuMTUyODEyMSUyQzE5LjU2MDgx''@;'; put 'put ''ODklMjBMNy42Mzk0ODM3NiUyQzEzLjg3NjI0MDIlMjIlMjBpZCUzRCUyMkZpbGwtNCUyMiUyMGZpbGwlM0QlMjIlMjNGRkZGRkYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUzQyUyRnN2ZyUzRSIpfS5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6''@;'; put 'put ''MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDouMDVyZW0haW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7''@;'; put 'put ''bWFyZ2luOjAgMCAuMDVyZW0haW1wb3J0YW50fS5jbHItcG9wb3Zlci1jb250ZW50e3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTA1MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1idG4tdmVydGljYWwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItYnRuLWhvcml6b250''@;'; put 'put ''YWwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRkaW5nOjA7LS1jbHItYnRuLXBhZGRpbmc6dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRk''@;'; put 'put ''aW5nKSB2YXIoLS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZyk7LS1jbHItYnRuLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTstLWNsci1idG4taGVpZ2h0LXNtOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItYnRuLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYnRuLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodDp2YXIoLS1jbHItYnRuLWhlaWdodC1zbSk7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3Rh''@;'; put 'put ''bmRhcmQtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQ6dmFyKC0tY2xyLWJ0bi1oZWlnaHQpOy0t''@;'; put 'put ''Y2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tcGFkZGluZzp2YXIoLS1jbHItYnRuLXBhZGRpbmcpOy0tY2xyLWJ0bi1ncm91cC1mb2N1cy1vdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7LS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LWJv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1pbmZvLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRl''@;'; put 'put ''ZmF1bHQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKTstLWNsci1idG4tZGVm''@;'; put 'put ''YXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpOy0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNr''@;'; put 'put ''ZWQtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1v''@;'; put 'put ''dXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQp''@;'; put 'put ''Oy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQp''@;'; put 'put ''Oy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLXByaW1hcnktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3Rh''@;'; put 'put ''dHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktaG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yKTstLWNsci1idG4tcHJpbWFy''@;'; put 'put ''eS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZSk7LS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1i''@;'; put 'put ''dG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYmctY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRl''@;'; put 'put ''ZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0t''@;'; put 'put ''Y2xyLWJ0bi1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWhvdmVyKTstLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDAp''@;'; put 'put ''Oy0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtYWN0aXZlKTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0t''@;'; put 'put ''Y2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1jaGVja2Vk''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNz''@;'; put 'put ''KTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5l''@;'; put 'put ''LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRu''@;'; put 'put ''LXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tc3VjY2Vz''@;'; put 'put ''cy1vdXRsaW5lLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1v''@;'; put 'put ''dXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91''@;'; put 'put ''dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1''@;'; put 'put ''cy1kYW5nZXIpOy0tY2xyLWJ0bi1kYW5nZXItYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWhvdmVyKTstLWNsci1idG4tZGFu''@;'; put 'put ''Z2VyLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmUpOy0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1k''@;'; put 'put ''aXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWNo''@;'; put 'put ''ZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xv''@;'; put 'put ''cik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFyeS1o''@;'; put 'put ''b3Zlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yKTst''@;'; put 'put ''LWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdl''@;'; put 'put ''ci1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kYW5nZXIt''@;'; put 'put ''b3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYnRuLXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5p''@;'; put 'put ''bmctaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWhvdmVyKTstLWNsci1idG4td2FybmluZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctYWN0aXZlKTstLWNsci1idG4td2FybmluZy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNs''@;'; put 'put ''ci1idG4td2FybmluZy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmct''@;'; put 'put ''ZGFyayk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LXdhcm5pbmctaG92ZXIpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmct''@;'; put 'put ''b3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGlu''@;'; put 'put ''ZS1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5l''@;'; put 'put ''LWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLW5ldXRy''@;'; put 'put ''YWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3Rp''@;'; put 'put ''dmUpOy0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbik7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJs''@;'; put 'put ''ZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1uZXV0cmFsLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1uZXV0cmFsLW91''@;'; put 'put ''dGxpbmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGlu''@;'; put 'put ''ZS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1saW5rLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLWxpbmstYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstYm9yZGVyLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNs''@;'; put 'put ''ci1idG4tbGluay1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGluay12aXNpdGVkLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCk7LS1jbHItYnRuLWxpbmstdmlzaXRlZC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1j''@;'; put 'put ''b2xvcik7LS1jbHItYnRuLWxpbmstY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tbGluay1wcmltYXJ5LWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29s''@;'; put 'put ''b3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGlu''@;'; put 'put ''ay1wcmltYXJ5LWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbGlu''@;'; put 'put ''ay1wcmltYXJ5LWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNj''@;'; put 'put ''ZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtaG92ZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJh''@;'; put 'put ''bnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1j''@;'; put 'put ''b2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayk7LS1jbHItYnRuLWxpbmstd2FybmluZy1iZy1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJh''@;'; put 'put ''bnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LXdhcm5pbmctZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2Fybmlu''@;'; put 'put ''Zy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1i''@;'; put 'put ''dG4tbGluay1kYW5nZXItaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWFj''@;'; put 'put ''dGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFu''@;'; put 'put ''c3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ib3JkZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTst''@;'; put 'put ''LWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFs''@;'; put 'put ''LWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTst''@;'; put 'put ''LWNsci1idG4taW52ZXJzZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4taW52ZXJzZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXIpOy0tY2xyLWJ0bi1pbnZlcnNlLWhv''@;'; put 'put ''dmVyLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1hY3RpdmUpOy0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1iZy1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtY2hlY2tl''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YWxpZ24taXRlbXM6Y2VudGVyO3BsYWNl''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXI6dmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgpIHNvbGlkO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xNCk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxp''@;'; put 'put ''Z246bWlkZGxlO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTtmb250LXdlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0yKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''MSk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2hlaWdodDp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQpO3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tcGFkZGluZyl9LmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46''@;'; put 'put ''aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LWNvbG9yKX0uYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNvbG9yKX0uYnRuOmhv''@;'; put 'put ''dmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXIt''@;'; put 'put ''Y29sb3IpfS5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yKX0uYnRuOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFj''@;'; put 'put ''dGl2ZS1jb2xvcil9LmJ0bi5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5kaXNhYmxlZC5idG4sLmJ0bjpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNv''@;'; put 'put ''bG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmRpc2FibGVkIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjZHMtaWNvbiwuYnRuLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjbHItaWNvbiwuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpfS5idG4gLmNsci1s''@;'; put 'put ''b2FkaW5nLWJ0bi1jb250ZW50LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biAuY2xyLWxvYWRpbmctYnRuLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uYnRuLWdyb3VwPi5idG4gY2xyLWljb24s''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKSwwKX1hLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuLC5idG4u''@;'; put 'put ''YnRuLXNlY29uZGFyeSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29uZGFyeSAuYnRuLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4t''@;'; put 'put ''c2Vjb25kYXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpfWEuYnRuIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG4gY2RzLWljb24sYS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnkgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBj''@;'; put 'put ''bHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5IC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKX1hLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmhvdmVyLC5idG4uYnRuLXNl''@;'; put 'put ''Y29uZGFyeTpob3ZlciwuYnRuLXNlY29uZGFyeSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmhvdmVyIGNkcy1pY29uLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46aG92ZXIgY2RzLWljb24sYS5idG46aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''OmhvdmVyIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIGEuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xv''@;'; put 'put ''cil9YS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46YWN0aXZlIGNkcy1pY29uLGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xv''@;'; put 'put ''cil9YS5idG4uZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0bixhLmJ0bjpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnk6ZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLXNlY29uZGFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''ZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJvcmRlci1jb2xvcil9YS5idG4uZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0biBjZHMtaWNvbixhLmJ0''@;'; put 'put ''bi5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuZGlzYWJsZWQuYnRuIGNsci1pY29uLGEuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46ZGlzYWJsZWQgY2RzLWljb24sYS5idG46ZGlzYWJsZWQg''@;'; put 'put ''Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWluZm8sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuLC5idG4taW5mbyAuYnRuLC5idG4taW5mbyAuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biwuYnRuLmJ0bi1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LmJ0biwuYnRuLXByaW1hcnkgLmJ0biwuYnRuLXByaW1hcnkg''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmlt''@;'; put 'put ''YXJ5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm8gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLWluZm8gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuIGNsci1pY29uLC5idG4taW5mbyAuYnRuIGNkcy1pY29uLC5idG4taW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjZHMtaWNvbiwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1wcmltYXJ5''@;'; put 'put ''IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZvIC5idG46aG92ZXIsLmJ0bi5idG4tcHJpbWFy''@;'; put 'put ''eTpob3ZlciwuYnRuLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1pbmZvOmhvdmVyIGNkcy1pY29uLC5idG4uYnRu''@;'; put 'put ''LWluZm86aG92ZXIgY2xyLWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5OmhvdmVyIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmhv''@;'; put 'put ''dmVyIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvIC5idG46YWN0aXZlLC5idG4uYnRuLXByaW1hcnk6YWN0aXZlLC5idG4tcHJpbWFy''@;'; put 'put ''eSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWluZm86YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm86YWN0aXZlIGNs''@;'; put 'put ''ci1pY29uLC5idG4taW5mbyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1p''@;'; put 'put ''Y29uLC5idG4tcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1pbmZvLmRpc2FibGVkLC5idG4uYnRuLWluZm86ZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG46''@;'; put 'put ''ZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29y''@;'; put 'put ''Om5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4taW5mby5kaXNhYmxlZCBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1pbmZvLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWlu''@;'; put 'put ''Zm8gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2VzcywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy5idG4sLmJ0bi1zdWNjZXNzIC5idG4sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi1zdWNjZXNzLmJ0biBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzIC5idG4gY2Rz''@;'; put 'put ''LWljb24sLmJ0bi1zdWNjZXNzIC5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''c3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0uYnRuLmJ0''@;'; put 'put ''bi1zdWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6aG92ZXIgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0u''@;'; put 'put ''YnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1hY3RpdmUtY29sb3IpfS5idG4uYnRu''@;'; put 'put ''LXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5idG4tc3VjY2VzczpkaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy5k''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1z''@;'; put 'put ''dWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJu''@;'; put 'put ''aW5nLmJ0biwuYnRuLXdhcm5pbmcgLmJ0biwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ib3JkZXItY29s''@;'; put 'put ''b3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpfS5idG4uYnRuLXdhcm5pbmcgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcuYnRuIGNkcy1p''@;'; put 'put ''Y29uLC5idG4uYnRuLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcuYnRuIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZyAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWJnLWNv''@;'; put 'put ''bG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4td2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3Zl''@;'; put 'put ''ciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4td2FybmluZy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjphY3RpdmUgY2xyLWlj''@;'; put 'put ''b257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCwuYnRuLmJ0bi13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcil9''@;'; put 'put ''LmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpfS5i''@;'; put 'put ''dG4uYnRuLWRhbmdlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLmJ0biwuYnRuLWRhbmdlciAuYnRuLC5idG4tZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyIC5i''@;'; put 'put ''dG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpfS5idG4uYnRuLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlciAu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXIgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyOmhvdmVyLC5idG4tZGFuZ2VyIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWRhbmdlci1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItaG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXI6aG92ZXIgY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjpob3ZlciBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLWRhbmdlciAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYWN0''@;'; put 'put ''aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlcjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWRhbmdlciAu''@;'; put 'put ''YnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVke2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWJvcmRl''@;'; put 'put ''ci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyIC5idG4uZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtY29sb3IpfS5i''@;'; put 'put ''dG4uYnRuLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwuYnRuLC5idG4tbmV1dHJhbCAuYnRuLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRy''@;'; put 'put ''YWwgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbCBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1uZXV0cmFsIC5idG4gY2RzLWljb24s''@;'; put 'put ''LmJ0bi1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6aG92ZXIsLmJ0bi1uZXV0cmFsIC5idG46aG92''@;'; put 'put ''ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsOmhvdmVyIGNsci1pY29uLC5i''@;'; put 'put ''dG4tbmV1dHJhbCAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUsLmJ0bi1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2xyLWljb24sLmJ0bi1uZXV0cmFs''@;'; put 'put ''IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1uZXV0cmFsIC5i''@;'; put 'put ''dG4uZGlzYWJsZWQsLmJ0bi1uZXV0cmFsIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbmV1dHJhbDpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0''@;'; put 'put ''bi1uZXV0cmFsOmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZSAuYnRuLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4s''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZS1zZWNvbmRhcnkg''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4tb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25k''@;'; put 'put ''YXJ5LW91dGxpbmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2RzLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNv''@;'; put 'put ''biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xy''@;'; put 'put ''LWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRu''@;'; put 'put ''IGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkg''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5l''@;'; put 'put ''IC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNv''@;'; put 'put ''bG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXNlY29uZGFyeSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3Zl''@;'; put 'put ''ciBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46''@;'; put 'put ''aG92ZXIgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG46aG92''@;'; put 'put ''ZXIgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''LW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4uYnRu''@;'; put 'put ''LW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29u''@;'; put 'put ''LC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4t''@;'; put 'put ''c2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLmRp''@;'; put 'put ''c2FibGVkLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuOmRp''@;'; put 'put ''c2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZTpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlz''@;'; put 'put ''YWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25k''@;'; put 'put ''YXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2RzLWljb24s''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46''@;'; put 'put ''ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxp''@;'; put 'put ''bmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUuYnRuLC5idG4tb3V0bGluZS1pbmZvIC5idG4sLmJ0bi1vdXRsaW5lLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biwuYnRuLWluZm8t''@;'; put 'put ''b3V0bGluZSAuYnRuLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biwuYnRuLXByaW1hcnktb3V0bGluZSAu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4sLmJ0bi5idG4tb3V0bGluZS1pbmZvLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8uYnRuLC5idG4uYnRuLWluZm8tb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bnti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcil9LmJ0bi5idG4t''@;'; put 'put ''cHJpbWFyeS1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS1v''@;'; put 'put ''dXRsaW5lLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvIC5idG4g''@;'; put 'put ''Y2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNsci1pY29uLC5i''@;'; put 'put ''dG4taW5mby1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8tb3V0''@;'; put 'put ''bGluZSAuYnRuIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0''@;'; put 'put ''biBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4g''@;'; put 'put ''Y2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNk''@;'; put 'put ''cy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS1pbmZvIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZv''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8tb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5i''@;'; put 'put ''dG4taW5mby1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFy''@;'; put 'put ''eS1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6aG92ZXIsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpob3ZlciwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpo''@;'; put 'put ''b3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyLC5idG4uYnRuLWluZm8tb3V0bGluZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpob3ZlciBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tcHJp''@;'; put 'put ''bWFyeS1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1wcmltYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46aG92ZXIg''@;'; put 'put ''Y2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZTphY3RpdmUsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjphY3RpdmUsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1wcmltYXJ5LW91''@;'; put 'put ''dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLWluZm86YWN0aXZlLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1p''@;'; put 'put ''bmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGlu''@;'; put 'put ''ZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmFjdGl2''@;'; put 'put ''ZSBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2''@;'; put 'put ''ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmFjdGl2ZSBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkLC5i''@;'; put 'put ''dG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1pbmZvIC5idG46ZGlzYWJsZWQsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4t''@;'; put 'put ''cHJpbWFyeS1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2Fi''@;'; put 'put ''bGVkLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkLC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpu''@;'; put 'put ''b3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWlu''@;'; put 'put ''Zm8gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRs''@;'; put 'put ''aW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJs''@;'; put 'put ''ZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWluZm8t''@;'; put 'put ''b3V0bGluZTpkaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5l''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0''@;'; put 'put ''bGluZS1zdWNjZXNzLmJ0biwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXN1Y2Nlc3MgLmJ0biwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGlu''@;'; put 'put ''ZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0''@;'; put 'put ''bGluZS1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXN1''@;'; put 'put ''Y2Nlc3Mtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zdWNj''@;'; put 'put ''ZXNzLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUt''@;'; put 'put ''c3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0''@;'; put 'put ''bi1zdWNjZXNzLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0''@;'; put 'put ''bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91''@;'; put 'put ''dGxpbmUtc3VjY2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3Mg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46''@;'; put 'put ''YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''c3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJs''@;'; put 'put ''ZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vz''@;'; put 'put ''cy1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nl''@;'; put 'put ''c3MgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1z''@;'; put 'put ''dWNjZXNzLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkIGNsci1pY29uLC5idG4tc3VjY2Vz''@;'; put 'put ''cy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24s''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''d2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtd2FybmluZywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLC5idG4td2FybmluZy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZy1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3IpO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5n''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZy5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4tb3V0bGluZS13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46aG92ZXIs''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0''@;'; put 'put ''bGluZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyIGNsci1pY29uLC5i''@;'; put 'put ''dG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUs''@;'; put 'put ''LmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5l''@;'; put 'put ''LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5i''@;'; put 'put ''dG46YWN0aXZlIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''d2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi13YXJuaW5nLW91''@;'; put 'put ''dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUuZGlzYWJsZWQgY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRp''@;'; put 'put ''c2FibGVkIGNsci1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwu''@;'; put 'put ''YnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVk''@;'; put 'put ''IGNsci1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tZGFuZ2Vy''@;'; put 'put ''LW91dGxpbmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1vdXRsaW5lLWRhbmdlci5idG4sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIgLmJ0biwuYnRuLW91dGxpbmUtZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1i''@;'; put 'put ''b3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1k''@;'; put 'put ''YW5nZXItb3V0bGluZS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxp''@;'; put 'put ''bmUtZGFuZ2VyIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGlu''@;'; put 'put ''ZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRu''@;'; put 'put ''LWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVk''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tZGFu''@;'; put 'put ''Z2VyLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlzYWJsZWQgY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRh''@;'; put 'put ''bmdlcjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyLW91''@;'; put 'put ''dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91''@;'; put 'put ''dGxpbmUtZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJh''@;'; put 'put ''bC5idG4sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1uZXV0cmFsIC5i''@;'; put 'put ''dG4sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYm9yZGVyLWNv''@;'; put 'put ''bG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1''@;'; put 'put ''dHJhbC1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJh''@;'; put 'put ''bC5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1uZXV0cmFsLW91dGxp''@;'; put 'put ''bmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5l''@;'; put 'put ''IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1v''@;'; put 'put ''dXRsaW5lOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46aG92ZXJ7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1uZXV0cmFsOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRy''@;'; put 'put ''YWwgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6YWN0aXZlLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1u''@;'; put 'put ''ZXV0cmFsLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''bmV1dHJhbDpkaXNhYmxlZCwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1v''@;'; put 'put ''dXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5k''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbC5kaXNh''@;'; put 'put ''YmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAu''@;'; put 'put ''YnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmssLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRuLC5idG4tbGluayAuYnRuLC5idG4tbGluayAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5i''@;'; put 'put ''dG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1j''@;'; put 'put ''b2xvcil9LmJ0bi5idG4tbGluayBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4gY2RzLWljb24sLmJ0bi5idG4tbGluayBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4gY2xyLWljb24sLmJ0bi1saW5r''@;'; put 'put ''IC5idG4gY2RzLWljb24sLmJ0bi1saW5rIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluayAuYnRuIGNkcy1pY29uLC5idG4tbGluayAuYnRuIGNsci1pY29uLC5idG4tbGluayAuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4uYnRuLWxpbms6aG92ZXIsLmJ0bi1saW5rIC5idG46aG92ZXJ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluazpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rOmhvdmVyIGNsci1pY29uLC5idG4tbGluayAuYnRuOmhvdmVyIGNk''@;'; put 'put ''cy1pY29uLC5idG4tbGluayAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluazphY3RpdmUsLmJ0bi1saW5rIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1j''@;'; put 'put ''b2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluazphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluazphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmFjdGl2ZSBjbHItaWNv''@;'; put 'put ''bntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkLC5idG4uYnRuLWxpbms6ZGlzYWJsZWQsLmJ0bi1saW5rIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkIGNk''@;'; put 'put ''cy1pY29uLC5idG4uYnRuLWxpbmsuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluazpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNsci1p''@;'; put 'put ''Y29uLC5idG4tbGluayAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1saW5rLXByaW1hcnkuYnRuLC5idG4tbGluay1wcmltYXJ5IC5idG4sLmJ0bi1saW5rLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkgLmJ0bntib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLXByaW1hcnktYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5IGNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5LmJ0biBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0biBjbHItaWNv''@;'; put 'put ''biwuYnRuLWxpbmstcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstcHJpbWFyeSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWNvbG9yKX0u''@;'; put 'put ''YnRuLmJ0bi1saW5rLXByaW1hcnk6aG92ZXIsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcil9LmJ0''@;'; put 'put ''bi5idG4tbGluay1wcmltYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1saW5rLXByaW1hcnktaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeTphY3RpdmUsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5i''@;'; put 'put ''dG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxlZCwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4t''@;'; put 'put ''bGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXByaW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWQg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nl''@;'; put 'put ''c3MuYnRuLC5idG4tbGluay1zdWNjZXNzIC5idG4sLmJ0bi1saW5rLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzcyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNkcy1pY29u''@;'; put 'put ''LC5idG4tbGluay1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmst''@;'; put 'put ''c3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1saW5r''@;'; put 'put ''LXN1Y2Nlc3M6aG92ZXIsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1z''@;'; put 'put ''dWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2Vzczpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nl''@;'; put 'put ''c3MtaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2VzczphY3RpdmUsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNj''@;'; put 'put ''ZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tbGluay1zdWNjZXNz''@;'; put 'put ''IC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXN1Y2Nlc3MuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1saW5rLXN1Y2Nlc3M6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0''@;'; put 'put ''bi1saW5rLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcuYnRuLC5idG4t''@;'; put 'put ''bGluay13YXJuaW5nIC5idG4sLmJ0bi1saW5rLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYm9y''@;'; put 'put ''ZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''LmJ0bi1saW5rLXdhcm5pbmcuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tbGluay13''@;'; put 'put ''YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmc6aG92''@;'; put 'put ''ZXIsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmhvdmVy''@;'; put 'put ''IGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29s''@;'; put 'put ''b3IpfS5idG4uYnRuLWxpbmstd2FybmluZzphY3RpdmUsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1j''@;'; put 'put ''b2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkLC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCwuYnRuLWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJs''@;'; put 'put ''ZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LXdhcm5pbmctZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmcuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5r''@;'; put 'put ''LXdhcm5pbmc6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXdhcm5p''@;'; put 'put ''bmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyLmJ0biwuYnRuLWxpbmstZGFuZ2VyIC5i''@;'; put 'put ''dG4sLmJ0bi1saW5rLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYm9yZGVyLWNvbG9yKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlci5idG4g''@;'; put 'put ''Y2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyLC5idG4tbGluay1kYW5nZXIgLmJ0bjpob3Zlcnti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVy''@;'; put 'put ''IGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXI6YWN0aXZlLC5idG4tbGlu''@;'; put 'put ''ay1kYW5nZXIgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1saW5rLWRhbmdlcjphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWNvbG9yKX0uYnRuLmJ0''@;'; put 'put ''bi1saW5rLWRhbmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLWRhbmdlcjpkaXNhYmxlZCwuYnRuLWxpbmstZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtY29sb3IpO2N1''@;'; put 'put ''cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXIuZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXIuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuLmRpc2FibGVkIGNk''@;'; put 'put ''cy1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJs''@;'; put 'put ''ZWQtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsLmJ0biwuYnRuLWxpbmstbmV1dHJhbCAuYnRuLC5idG4tbGluay1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWwgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuLWxpbmstbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5r''@;'; put 'put ''LW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsOmhvdmVyLC5idG4tbGluay1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1o''@;'; put 'put ''b3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpob3ZlciBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWw6YWN0aXZlLC5idG4tbGluay1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCwuYnRu''@;'; put 'put ''LmJ0bi1saW5rLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsLmRpc2FibGVkIGNkcy1pY29uLC5idG4u''@;'; put 'put ''YnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5r''@;'; put 'put ''LW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtZGlzYWJsZWQtY29sb3IpfS5i''@;'; put 'put ''dG4uYnRuLWludmVyc2UsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UuYnRuLC5idG4taW52ZXJzZSAuYnRuLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVy''@;'; put 'put ''c2UgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZSBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2xyLWljb24sLmJ0bi1pbnZlcnNlIC5idG4gY2RzLWljb24s''@;'; put 'put ''LmJ0bi1pbnZlcnNlIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZSAuYnRuIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuIGNsci1pY29uLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4uYnRuLWludmVyc2U6aG92ZXIsLmJ0bi1pbnZlcnNlIC5idG46aG92''@;'; put 'put ''ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1pbnZlcnNlOmhvdmVyIGNsci1pY29uLC5i''@;'; put 'put ''dG4taW52ZXJzZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlIC5idG46YWN0aXZle2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2xyLWljb24sLmJ0bi1pbnZlcnNl''@;'; put 'put ''IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkLC5idG4uYnRuLWludmVyc2U6ZGlzYWJsZWQsLmJ0bi1pbnZlcnNlIC5i''@;'; put 'put ''dG4uZGlzYWJsZWQsLmJ0bi1pbnZlcnNlIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWludmVyc2UuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW52ZXJzZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0''@;'; put 'put ''bi1pbnZlcnNlOmRpc2FibGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc20sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5idG4tc20gLmJ0bntmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1p''@;'; put 'put ''Ym9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVw''@;'; put 'put ''cGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmJ0bi1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJX0uYnRuLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4pIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSAwfS5idG4uYnRuLWxpbmssLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRue21hcmdpbi1yaWdodDowfS5idG4uYnRuLWxpbmsuYnRuLWludmVyc2V7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tc206bm90KC5idG4tbGluaykgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCgu''@;'; put 'put ''YnRuLWxpbmspIGNsci1pY29ue3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSksMCl9LmJ0bi1zbTpub3QoLmJ0bi1saW5rKSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46bm90KC5idG4tbGluaykgY2xy''@;'; put 'put ''LWljb24sLmJ0bi1zbTpub3QoLmJ0bi1saW5rKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46bm90KC5idG4tbGluaykgY2RzLWljb257aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1i''@;'; put 'put ''dG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUpfS5idG4taWNvbnttaW4td2lkdGg6MH0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1saW5rLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1s''@;'; put 'put ''aW5rLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAu''@;'; put 'put ''ZHJvcGRvd24tdG9nZ2xlOmhvdmVyIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlLmRpc2FibGVkLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZHtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29s''@;'; put 'put ''b3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkIGNkcy1p''@;'; put 'put ''Y29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpfS5idG4tZ3JvdXAuYnRuLXNtIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZSwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tZ3JvdXAuYnRuIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZXtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWZvbnQtc2l6ZS0xKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNl''@;'; put 'put ''LXN0YW5kYXJkLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmNoZWNrYm94LmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4sLmNoZWNrYm94LWlubGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biwucmFkaW8uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biwucmFkaW8taW5saW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby1pbmxpbmUuYnRue3BhZGRpbmc6MH0uY2hlY2ti''@;'; put 'put ''b3guYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5yYWRpby5idG4gbGFiZWwsLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVsLC5yYWRpby1pbmxpbmUuYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLWlubGluZS5idG4gbGFiZWx7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtnYXA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1pdGVtczpjZW50ZXI7cGxhY2UtY29udGVudDpjZW50ZXI7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50O3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgbGFiZWwsLmNoZWNr''@;'; put 'put ''Ym94LmJ0bjpkaXNhYmxlZCBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBsYWJlbCwucmFkaW8uYnRuLmRpc2FibGVkIGxhYmVsLC5yYWRpby5idG46ZGlzYWJsZWQgbGFiZWwsLnJhZGlvLWlubGluZS5idG4u''@;'; put 'put ''ZGlzYWJsZWQgbGFiZWwsLnJhZGlvLWlubGluZS5idG46ZGlzYWJsZWQgbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXIsLmNo''@;'; put 'put ''ZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVye2NvbnRlbnQ6bm9uZX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmJlZm9yZSwucmFk''@;'; put 'put ''aW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmFmdGVyLC5yYWRpby1pbmxpbmUuYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmJlZm9yZSwucmFkaW8taW5saW5lLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDphZnRlcntjb250ZW50Om5vbmV9LmNoZWNrYm94LmJ0biBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''ZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5j''@;'; put 'put ''ZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWx7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNv''@;'; put 'put ''biwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5i''@;'; put 'put ''dG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWx7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtYmctY29sb3IpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29u''@;'; put 'put ''LC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmRp''@;'; put 'put ''c2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0uY2hlY2tib3guYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gt''@;'; put 'put ''aW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVse3dpZHRoOjEwMCV9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4t''@;'; put 'put ''aW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2Jv''@;'; put 'put ''eC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8g''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0''@;'; put 'put ''bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0''@;'; put 'put ''biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNk''@;'; put 'put ''cy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hl''@;'; put 'put ''Y2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQr''@;'; put 'put ''bGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0''@;'; put 'put ''biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXBy''@;'; put 'put ''aW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhv''@;'; put 'put ''dmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVs''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJl''@;'; put 'put ''bCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWws''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmhvdmVyK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJl''@;'; put 'put ''bD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJl''@;'; put 'put ''bD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVy''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6''@;'; put 'put ''aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNo''@;'; put 'put ''ZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92''@;'; put 'put ''ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xh''@;'; put 'put ''YmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNo''@;'; put 'put ''ZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRs''@;'; put 'put ''aW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3Rp''@;'; put 'put ''dmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDph''@;'; put 'put ''Y3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1i''@;'; put 'put ''Zy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xh''@;'; put 'put ''YmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZl''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3Rp''@;'; put 'put ''dmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3Rp''@;'; put 'put ''dmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5j''@;'; put 'put ''aGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDph''@;'; put 'put ''Y3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2''@;'; put 'put ''ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxl''@;'; put 'put ''ZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2Jv''@;'; put 'put ''eC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vj''@;'; put 'put ''b25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVt''@;'; put 'put ''IC5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVk''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5''@;'; put 'put ''OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRl''@;'; put 'put ''bSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVj''@;'; put 'put ''a2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1p''@;'; put 'put ''Y29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2Fi''@;'; put 'put ''bGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5l''@;'; put 'put ''OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hl''@;'; put 'put ''Y2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlz''@;'; put 'put ''YWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLmRp''@;'; put 'put ''c2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpk''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHIt''@;'; put 'put ''aWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRu''@;'; put 'put ''LWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5i''@;'; put 'put ''dG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2Vk''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4u''@;'; put 'put ''YnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRu''@;'; put 'put ''LmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zdWNjZXNzIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LmNoZWNr''@;'; put 'put ''Ym94LmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hl''@;'; put 'put ''Y2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1j''@;'; put 'put ''aGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUu''@;'; put 'put ''YnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1j''@;'; put 'put ''b2xvcil9LmNoZWNrYm94LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWludmVyc2UtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbnZlcnNl''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tl''@;'; put 'put ''ZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5k''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpfS5yYWRpby5idG4gbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVse3dpZHRoOjEwMCV9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5''@;'; put 'put ''cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5i''@;'; put 'put ''dG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJh''@;'; put 'put ''ZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxp''@;'; put 'put ''bmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5y''@;'; put 'put ''YWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1j''@;'; put 'put ''aGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIr''@;'; put 'put ''bGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZv''@;'; put 'put ''LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBp''@;'; put 'put ''bnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''cHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFy''@;'; put 'put ''eSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlv''@;'; put 'put ''LmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRl''@;'; put 'put ''bSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8u''@;'; put 'put ''YnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFk''@;'; put 'put ''aW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0''@;'; put 'put ''LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5y''@;'; put 'put ''YWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''aW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''LC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vj''@;'; put 'put ''b25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFk''@;'; put 'put ''aW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJl''@;'; put 'put ''bD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFk''@;'; put 'put ''aW8uYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby5kaXNh''@;'; put 'put ''YmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXBy''@;'; put 'put ''aW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1h''@;'; put 'put ''cnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFy''@;'; put 'put ''eS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1w''@;'; put 'put ''cmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vj''@;'; put 'put ''b25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxp''@;'; put 'put ''bmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWlj''@;'; put 'put ''b24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tl''@;'; put 'put ''ZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tl''@;'; put 'put ''ZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWJn''@;'; put 'put ''LWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtYmctY29s''@;'; put 'put ''b3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtYmctY29sb3IpO2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0''@;'; put 'put ''W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0''@;'; put 'put ''biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8u''@;'; put 'put ''YnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJu''@;'; put 'put ''aW5nIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRs''@;'; put 'put ''aW5lLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtd2FybmluZyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xh''@;'; put 'put ''YmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1p''@;'; put 'put ''Y29uLC5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlv''@;'; put 'put ''LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0uYnRuLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWZsZXg7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNil9LmJ0bi1ncm91cCBjbHItZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cCBjbHItZHJvcGRvd246bGFzdC1jaGlsZCAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1''@;'; put 'put ''cyk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKX0uYnRuLWdyb3VwIC5idG57bWFyZ2luOjA7b3ZlcmZsb3c6aGlkZGVufS5idG4tZ3JvdXAgLmJ0biBsYWJlbHtoZWlnaHQ6MTAwJX0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106aG92ZXIsLmJ0bi1ncm91cCAuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVye2FwcGVhcmFuY2U6bm9uZTtvcGFjaXR5OjE7dG9wOjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtib3JkZXI6SGlnaGxpZ2h0IHNvbGlkIDJweH0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106aG92ZXI6Oi1tcy1jaGVjaywuYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06aG92ZXI6Oi1tcy1jaGVja3tkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQt''@;'; put 'put ''cmFkaXVzOjB9LmJ0bi1ncm91cCAuYnRuOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5idG4tZ3JvdXAgLmJ0bjpkaXNhYmxlZDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yaWdodDpub25lfS5idG4tZ3Jv''@;'; put 'put ''dXAgLnRvb2x0aXA6bm90KDpmaXJzdC1jaGlsZCkgLmJ0bntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKSAuYnRue2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJv''@;'; put 'put ''dHRvbS1yaWdodC1yYWRpdXM6MH0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1wcmltYXJ5Pi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1uZXV0cmFsIC50b29sdGlwOm5vdCg6bGFzdC1jaGls''@;'; put 'put ''ZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1uZXV0cmFsPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0''@;'; put 'put ''bi1kYW5nZXIgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKT4uYnRuLC5idG4tZ3JvdXAuYnRuLWRhbmdlcj4uYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4td2FybmluZyAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4td2FybmluZz4uYnRu''@;'; put 'put ''Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgpIDAgMH0uYnRuLWdyb3VwPi5idG4tZ3JvdXAtb3ZlcmZsb3d7cG9zaXRpb246cmVsYXRpdmV9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGls''@;'; put 'put ''ZCk+LmJ0bjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKSB2YXIoLS1jbHItYnRuLWJvcmRlci1yYWRpdXMpIDB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6Zmlyc3QtY2hpbGQ+LmJ0bjpmaXJzdC1jaGls''@;'; put 'put ''ZHtib3JkZXItcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyl9LmJ0bi1ncm91cCAuYnRuOm5vdChbZGlzYWJsZWRdKSsuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAudG9vbHRpcDpub3QoOmZpcnN0LWNoaWxkKSAuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1n''@;'; put 'put ''cm91cCAuYnRuOm5vdChbZGlzYWJsZWRdKSsuYnRuLWdyb3VwLW92ZXJmbG93IC5idG57Ym9yZGVyLWxlZnQ6bm9uZX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUsLmJ0bi1ncm91cC5idG4taWNvbi1saW5rLmJ0bi1saW5rIC5idG4sLmJ0bi1ncm91cC5idG4taWNvbiAu''@;'; put 'put ''YnRue21pbi13aWR0aDowfS5idG4tZ3JvdXAgLmNsci1pY29uLXRpdGxle2Rpc3BsYXk6bm9uZTt0ZXh0LXRyYW5zZm9ybTpub25lfS5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZXtkaXNwbGF5OmJsb2NrfS5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgY2RzLWljb24sLmJ0bi1ncm91cCAu''@;'; put 'put ''ZHJvcGRvd24tbWVudSBjbHItaWNvbntkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSAuY2xyLWljb24tdGl0bGV7ZGlzcGxheTppbmxpbmV9LmNoZWNrYm94LC5yYWRpb3twb3NpdGlvbjpyZWxhdGl2ZX0uY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0sLmNoZWNr''@;'; put 'put ''Ym94IGlucHV0W3R5cGU9cmFkaW9dLC5yYWRpbyBpbnB1dFt0eXBlPWNoZWNrYm94XSwucmFkaW8gaW5wdXRbdHlwZT1yYWRpb117Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2hlaWdodDowO3dpZHRoOjA7b3BhY2l0eTowfS5kcm9wZG93bi1tZW51LmNs''@;'; put 'put ''ci1idXR0b24tZ3JvdXAtbWVudXt2aXNpYmlsaXR5OnZpc2libGV9YnV0dG9uLmNsb3Nle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY2xvc2V7ZmxvYXQ6cmlnaHQ7Zm9udC1zaXplOjEuOHJlbTt0cmFu''@;'; put 'put ''c2l0aW9uOmNvbG9yIGxpbmVhciAuMnM7Zm9udC13ZWlnaHQ6MjAwO3RleHQtc2hhZG93Om5vbmU7bGluZS1oZWlnaHQ6aW5oZXJpdDtjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3IpfS5jbG9zZSBjZHMtaWNvbiwuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3Ip''@;'; put 'put ''fS5jbG9zZTpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTpob3ZlciBjZHMtaWNvbiwuY2xvc2U6aG92ZXIgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWNsb3NlLWNv''@;'; put 'put ''bG9yLWFjdGl2ZSl9LmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZSl9LmNsb3NlOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5l''@;'; put 'put ''LWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1hbGVydC1ib3JkZXJyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1i''@;'; put 'put ''b3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoOmNhbGMoMTQ0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQt''@;'; put 'put ''YWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItYWxlcnQtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yKTstLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1sZXZlbC1hbGVydC1jb2xvcik7LS1jbHIt''@;'; put 'put ''YWxlcnQtaW5mby1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludCk7LS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy1pbmZvKTstLWNsci1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9u''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''bGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50KTstLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTst''@;'; put 'put ''LWNsci1hbGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1h''@;'; put 'put ''Y3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24taG92ZXItY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXRp''@;'; put 'put ''bnQpOy0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYWxlcnQtd2FybmluZy1pY29uLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2Fy''@;'; put 'put ''bmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250''@;'; put 'put ''LWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItdGludCk7LS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hbGVydC1kYW5nZXItYm9yZGVy''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9u''@;'; put 'put ''dC1jb2xvcik7LS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1k''@;'; put 'put ''YW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtbmV1dHJhbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1hbGVydC1uZXV0cmFsLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1j''@;'; put 'put ''b2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRy''@;'; put 'put ''YWwtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtaW5mby1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtaW5m''@;'; put 'put ''by1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtd2FybmluZy1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13''@;'; put 'put ''YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5n''@;'; put 'put ''ZXIpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdl''@;'; put 'put ''ci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFu''@;'; put 'put ''Z2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0''@;'; put 'put ''cmFsKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mby1z''@;'; put 'put ''aGFkZSk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXNoYWRlKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlKTstLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3Mtc2hhZGUpOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC1zaGFkZSk7LS1jbHItYXBwLWFsZXJ0LWlu''@;'; put 'put ''Zm8tcGFnZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250LWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItNTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jb2xvci01MDApOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDAp''@;'; put 'put ''Oy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxp''@;'; put 'put ''Z2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGUpOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5hbGVydC1pY29u''@;'; put 'put ''e2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pY29uLXdyYXBwZXJ7ZGlzcGxh''@;'; put 'put ''eTppbmxpbmUtZmxleDtmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pdGVte2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTgpfS5hbGVydC1pdGVtc3tmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2Rpc3BsYXk6ZmxleH0uYWxlcnQtaXRlbT5zcGFuLC5hbGVydC10ZXh0''@;'; put 'put ''e2ZsZXg6MSAxO3RleHQtYWxpZ246bGVmdDthbGlnbi1zZWxmOmNlbnRlcn0uYWxlcnR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xp''@;'; put 'put ''bmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlv''@;'; put 'put ''bjpyb3c7d2lkdGg6YXV0bztib3JkZXItcmFkaXVzOnZhcigtLWNsci1hbGVydC1ib3JkZXJyYWRpdXMpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTti''@;'; put 'put ''YWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29s''@;'; put 'put ''b3IpfS5hbGVydCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0IC5hbGVydC1pdGVtcyAu''@;'; put 'put ''YWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0IC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRy''@;'; put 'put ''b3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9u''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZl''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZv''@;'; put 'put ''LWFjdGlvbi1jb2xvcil9LmFsZXJ0IC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0u''@;'; put 'put ''YWxlcnQgLmNsb3NlOmZvY3VzLC5hbGVydCAuY2xvc2U6aG92ZXIsLmFsZXJ0IC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0IC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmZvY3VzIGNsci1p''@;'; put 'put ''Y29uLC5hbGVydCAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0IC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXIt''@;'; put 'put ''Y29sb3IpfS5hbGVydC5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigt''@;'; put 'put ''LWNsci1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1p''@;'; put 'put ''dGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQt''@;'; put 'put ''aW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9u''@;'; put 'put ''LmJ0biwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24u''@;'; put 'put ''YnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVy''@;'; put 'put ''dC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVy''@;'; put 'put ''dC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxl''@;'; put 'put ''cnQtaW5mbyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3Zlciwu''@;'; put 'put ''YWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2''@;'; put 'put ''YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNj''@;'; put 'put ''ZXNzLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0t''@;'; put 'put ''Y2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dn''@;'; put 'put ''bGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwu''@;'; put 'put ''YWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNz''@;'; put 'put ''IC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUg''@;'; put 'put ''Y2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjph''@;'; put 'put ''Y3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNk''@;'; put 'put ''cy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIsLmFsZXJ0''@;'; put 'put ''LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNsci1p''@;'; put 'put ''Y29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0''@;'; put 'put ''aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9u''@;'; put 'put ''dC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdl''@;'; put 'put ''KSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb25zIC5k''@;'; put 'put ''cm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24sLmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0''@;'; put 'put ''LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9y''@;'; put 'put ''KX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFs''@;'; put 'put ''ZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5h''@;'; put 'put ''bGVydC13YXJuaW5nIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LXdhcm5p''@;'; put 'put ''bmcgLmNsb3NlOmhvdmVyLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJu''@;'; put 'put ''aW5nIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFs''@;'; put 'put ''ZXJ0LXdhcm5pbmcgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBh''@;'; put 'put ''Om5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRl''@;'; put 'put ''bSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQt''@;'; put 'put ''YWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0''@;'; put 'put ''aW9uLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRue2Jv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQt''@;'; put 'put ''YWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5h''@;'; put 'put ''bGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rp''@;'; put 'put ''b24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10''@;'; put 'put ''b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5j''@;'; put 'put ''bG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2xyLWlj''@;'; put 'put ''b24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBj''@;'; put 'put ''bHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LW5ldXRyYWx7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xv''@;'; put 'put ''cik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHIt''@;'; put 'put ''aWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydCAuYWxlcnQtaXRlbT5zcGFuLC5hbGVydCAuYWxlcnQtaXRlbSAuYWxlcnQtdGV4dCwuYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LWFjdGlvbnN7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTIpIDB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5hbGVydCAuYWxlcnQtaXRlbSAuY2xyLWlj''@;'; put 'put ''b24rLmFsZXJ0LXRleHR7cGFkZGluZy1sZWZ0OjB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbisuYWxlcnQtdGV4dDpiZWZvcmV7Y29udGVudDpub25lfS5hbGVydCAuYWxlcnQtYWN0aW9uc3tmbGV4OjAgMCBhdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uYWxlcnQgLmFsZXJ0LWFjdGlv''@;'; put 'put ''bnM+LmFsZXJ0LWFjdGlvbjpub3QoOmxhc3QtY2hpbGQpLC5hbGVydCAuYWxlcnQtYWN0aW9ucz4uZHJvcGRvd246bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duLWl0ZW17Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xle3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmFsZXJ0IC5hbGVydC1hY3Rpb24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3Vu''@;'; put 'put ''ZDowIDA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3IpfS5hbGVydCAuZHJvcGRvd24tdG9nZ2xlOm5vdCguYnRuKXtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQgLmNsb3Nle29yZGVyOjEwMDtmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMH0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5l''@;'; put 'put ''e2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowfS5hbGVydCAuYWxlcnQtc3Bp''@;'; put 'put ''bm5lci5zcGlubmVyLWlubGluZTpiZWZvcmUsLmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5lOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnN7cGFkZGluZy1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnM+''@;'; put 'put ''LmFsZXJ0LWFjdGlvbjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydC5hbGVydC1saWdodHdlaWdodHtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1ze3BhZGRpbmc6MH0uYWxl''@;'; put 'put ''cnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6MDttYXJnaW46MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtPnNwYW4sLmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYWxlcnQtYWN0aW9ucywuYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9LmFsZXJ0LmFsZXJ0LWxp''@;'; put 'put ''Z2h0d2VpZ2h0IC5jbG9zZXtkaXNwbGF5Om5vbmV9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0Om5vdCguYWxlcnQtc20pIC5hbGVydC1pY29ue21hcmdpbjowfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdo''@;'; put 'put ''dC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5h''@;'; put 'put ''bGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29s''@;'; put 'put ''b3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1kYW5nZXIgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxp''@;'; put 'put ''Z2h0d2VpZ2h0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2Vp''@;'; put 'put ''Z2h0LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbHttYXJnaW46MDtib3Jk''@;'; put 'put ''ZXI6MDtib3JkZXItcmFkaXVzOjA7b3ZlcmZsb3cteTphdXRvO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdp''@;'; put 'put ''ZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1j''@;'; put 'put ''b2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rp''@;'; put 'put ''b24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZv''@;'; put 'put ''LWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5k''@;'; put 'put ''cm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1''@;'; put 'put ''cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46MH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWlu''@;'; put 'put ''Zm97YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LWluZm8tYm9yZGVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQt''@;'; put 'put ''aXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rp''@;'; put 'put ''b24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRy''@;'; put 'put ''b3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1pbmZvIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xy''@;'; put 'put ''LWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNs''@;'; put 'put ''b3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1p''@;'; put 'put ''dGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''ZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlv''@;'; put 'put ''bi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjbHIt''@;'; put 'put ''aWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24t''@;'; put 'put ''Y29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9y''@;'; put 'put ''KX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5kcm9w''@;'; put 'put ''ZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxs''@;'; put 'put ''OnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNs''@;'; put 'put ''b3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNs''@;'; put 'put ''ci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1uZXV0cmFsLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJvcmRlci1jb2xvcil9''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW1zIC5hbGVy''@;'; put 'put ''dC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1hY3RpdmUt''@;'; put 'put ''Y29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''bmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0''@;'; put 'put ''cmFsIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0''@;'; put 'put ''LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1u''@;'; put 'put ''ZXV0cmFsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUg''@;'; put 'put ''Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3Nle2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZle2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''d2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRl''@;'; put 'put ''bSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2Fybmlu''@;'; put 'put ''ZyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5i''@;'; put 'put ''dG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''LmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''LmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFj''@;'; put 'put ''dGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1cywuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdh''@;'; put 'put ''cm5pbmcgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNs''@;'; put 'put ''b3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''YTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3IpfS5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3Rp''@;'; put 'put ''dmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1z''@;'; put 'put ''dWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3Nl''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZl''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2xyLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW1ze2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYWxl''@;'; put 'put ''cnQtYWN0aW9uc3twYWRkaW5nOjB9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2V7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgMH0uYWxlcnQtc20gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFs''@;'; put 'put ''ZXJ0LWljb24td3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbSAuYWxlcnQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20gLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHQsLmFsZXJ0LXNt''@;'; put 'put ''IC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjB9LmFsZXJ0LXNtIC5jbG9zZXttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0zKSAwfS5hbGVydC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LXNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YmVmb3JlLC5hbGVydC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZTphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2Vp''@;'; put 'put ''Z2h0IC5hbGVydC1pdGVtc3tnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAu''@;'; put 'put ''YWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25zLC5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7Zm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUt''@;'; put 'put ''aGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC1pY29uLXdyYXBwZXJ7ZmxleC1iYXNpczp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuY2xvc2V7ZGlzcGxheTpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpey5hbGVydCAuYWxlcnQtaXRlbXtmbGV4LXdyYXA6''@;'; put 'put ''d3JhcH0uYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7bWF4LXdpZHRoOjkwJTt3aWR0aDo5MCU7ZmxleC1iYXNpczo5MCV9LmFsZXJ0IC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze2ZsZXg6MSAwIDEwMCV9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uc3ttYXJnaW4tbGVm''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKX19LmFsZXJ0LWhpZGRlbntkaXNwbGF5Om5vbmV9LmFsZXJ0cyAuYWxlcnR7bWFyZ2luLXRvcDowfS5hbGVydHMgLmFsZXJ0cy13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmFsZXJ0cyAuYWxlcnRzLXdyYXBwZXIg''@;'; put 'put ''Y2xyLWFsZXJ0e2ZsZXg6MSAxIDEwMCV9LmFsZXJ0cy5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmct''@;'; put 'put ''Y29sb3IpfS5hbGVydHMuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItYmctY29sb3IpfS5hbGVydHMuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1iZy1jb2xvcil9LmFsZXJ0''@;'; put 'put ''cy5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEx''@;'; put 'put ''KTtmbGV4OjEgMCB2YXIoLS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtd2FybmluZy1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtZGFuZ2VyIC5hbGVydHMtcGFnZXJ7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0cy1wYWdlci1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBl''@;'; put 'put ''YXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci10ZXh0LWNv''@;'; put 'put ''bG9yKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCl9YnV0dG9uLmFsZXJ0cy1wYWdlci1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmFsZXJ0cy1wYWdlci1i''@;'; put 'put ''dXR0b24gY2RzLWljb24sLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci10ZXh0LWNvbG9yKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBj''@;'; put 'put ''bHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC13YXJuaW5nLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1kYW5nZXIgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LWRhbmdlciAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQtc3VjY2VzcyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtc3VjY2VzcyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwg''@;'; put 'put ''LmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydHMtcGFnZXItY29udHJvbHtkaXNwbGF5OmZsZXg7d2hp''@;'; put 'put ''dGUtc3BhY2U6bm93cmFwO2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uYWxlcnRzLXBhZ2VyLWNvbnRyb2w+KntkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50''@;'; put 'put ''ZXI7ZmxleDoxIDEgYXV0b306cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYXJkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWNhcmQtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1j''@;'; put 'put ''bHItY2FyZC10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhcmQtdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1czp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1jYXJkLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTst''@;'; put 'put ''LWNsci1jYXJkLWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FyZC1jbGlja2Fi''@;'; put 'put ''bGUtYm94LXNoYWRvdzowIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3IpOy0tY2xyLWNhcmQtaGVhZGVyLXRpdGxlLWNvbG9yOnZhcigtLWNsci1jYXJkLXRpdGxlLWNvbG9yKTstLWNsci1jYXJkLWNvbnRlbnQtdGl0''@;'; put 'put ''bGUtY29sb3I6dmFyKC0tY2xyLWNhcmQtdGl0bGUtY29sb3IpOy0tY2xyLWNhcmQtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5jYXJke2JveC1zaGFkb3c6dmFyKC0tY2xyLWNhcmQtYm94LXNoYWRvdyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHIt''@;'; put 'put ''Y2FyZC1ib3JkZXItcmFkaXVzKTtib3JkZXI6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1ib3JkZXItY29sb3IpfS5jYXJkLmNsaWNrYWJsZTpob3Zlcntib3gtc2hhZG93OnZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3gtc2hhZG93KTtib3Jk''@;'; put 'put ''ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1jbGlja2FibGUtYm9yZGVyLWNvbG9yKTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt0cmFuc2l0aW9uOmJvcmRlciAuMnMgZWFzZSxib3gtc2hhZG93IC4y''@;'; put 'put ''cyBlYXNlLHRyYW5zZm9ybSAuMnMgZWFzZX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyLC5jYXJkIC5jYXJkLXRpdGxlLC5jYXJkIC5jYXJkLXRleHQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2ssLmNhcmQgLmxpc3QsLmNhcmQgLmxpc3QtdW5zdHlsZWR7bWFyZ2luLXRvcDowO21hcmdpbi1i''@;'; put 'put ''b3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyOmxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtdGl0bGU6bGFzdC1jaGlsZCwuY2FyZCAuY2FyZC10ZXh0Omxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2s6bGFzdC1jaGlsZCwuY2Fy''@;'; put 'put ''ZCAubGlzdDpsYXN0LWNoaWxkLC5jYXJkIC5saXN0LXVuc3R5bGVkOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZD5pbWcsLmNhcmQtaW1nPmltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDph''@;'; put 'put ''dXRvO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LmNhcmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jYXJkLWJnLWNvbG9yKTt3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2FyZCAu''@;'; put 'put ''YWxlcnR7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNhcmQgLmJ0bi1saW5re21pbi13aWR0aDowO3BhZGRpbmc6MH0uY2FyZC5jbGlja2FibGV7Y29sb3I6aW5oZXJpdH0uY2FyZD4ubGlzdCwuY2FyZD4ubGlzdC11bnN0eWxlZHtwYWRkaW5nOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNikgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KX0uY2FyZCAubGlzdC1ncm91cHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7bGlzdC1zdHlsZTpub25lfS5jYXJkIC5saXN0LWdyb3VwLWl0ZW17Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY2FyZC1iZy1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1j''@;'; put 'put ''YXJkLWJvcmRlci1jb2xvcil9QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey5jYXJkIC5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKX19LmNhcmQtYmxv''@;'; put 'put ''Y2t7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jYXJkLWZvb3RlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTcpfWgzLmNhcmQtaGVhZGVyLC5jYXJkLWhlYWRlcntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtjb2xvcjp2YXIoLS1jbHItY2Fy''@;'; put 'put ''ZC1oZWFkZXItdGl0bGUtY29sb3IpfWg0LmNhcmQtdGl0bGUsLmNhcmQtdGl0bGV7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2Vp''@;'; put 'put ''Z2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItY2FyZC1jb250ZW50''@;'; put 'put ''LXRpdGxlLWNvbG9yKX1oMS5jYXJkLWhlYWRlcixoMS5jYXJkLXRpdGxlLGgyLmNhcmQtaGVhZGVyLGgyLmNhcmQtdGl0bGUsaDMuY2FyZC1oZWFkZXIsaDMuY2FyZC10aXRsZSxoNC5jYXJkLWhlYWRlcixoNC5jYXJkLXRpdGxlLGg1LmNhcmQtaGVhZGVyLGg1LmNhcmQtdGl0bGUsaDYuY2Fy''@;'; put 'put ''ZC1oZWFkZXIsaDYuY2FyZC10aXRsZXttYXJnaW4tdG9wOjB9LmNhcmQtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpfS5jYXJkLWltZzpmaXJzdC1jaGls''@;'; put 'put ''ZD5pbWd7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyl9LmNhcmQtaW1nOmxhc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRp''@;'; put 'put ''dXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6''@;'; put 'put ''bGFzdC1jaGlsZD5pbWd7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzKX0uY2FyZC1ibG9jayAuYnRuLC5jYXJkLWJsb2NrIC5idG4uYnRuLWxpbmssLmNhcmQtYmxvY2sgLmNhcmQtbGluaywuY2FyZC1mb290ZXIgLmJ0biwuY2FyZC1mb290ZXIgLmJ0bi5idG4t''@;'; put 'put ''bGluaywuY2FyZC1mb290ZXIgLmNhcmQtbGluaywuY2FyZC1ibG9jayAuYnRuLWdyb3VwIC5idG4sLmNhcmQtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0bnttYXJnaW46MH0uY2FyZC1oZWFkZXIsLmNhcmQtYmxvY2t7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNv''@;'; put 'put ''bGlkIHZhcigtLWNsci1jYXJkLWJvcmRlci1jb2xvcil9LmNhcmQtaGVhZGVyOmxhc3QtY2hpbGQsLmNhcmQtYmxvY2s6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmNhcmQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdp''@;'; put 'put ''ZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1kaXZpZGVyLWNvbG9yKX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVye21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7d2lk''@;'; put 'put ''dGg6YXV0b30uY2FyZC1oZWFkZXIrLmNhcmQtZGl2aWRlciwuY2FyZC1ibG9jaysuY2FyZC1kaXZpZGVye2Rpc3BsYXk6bm9uZX0uY2FyZC1tZWRpYS1ibG9ja3tkaXNwbGF5OmZsZXh9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtaW1hZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zmxl''@;'; put 'put ''eDowIDAgYXV0bztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7bWF4LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTttYXgtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyl9LmNhcmQtbWVkaWEt''@;'; put 'put ''YmxvY2sgLmNhcmQtbWVkaWEtZGVzY3JpcHRpb257Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpO21h''@;'; put 'put ''cmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtdGl0bGUsLmNhcmQtbWVkaWEtYmxvY2sgc3BhbiwuY2FyZC1tZWRpYS1ibG9jayAuY2FyZC1tZWRpYS10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jYXJkLW1lZGlhLWJs''@;'; put 'put ''b2NrLndyYXB7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jYXJkLW1lZGlhLWJsb2NrLndyYXAgLmNhcmQtbWVkaWEtZGVzY3JpcHRpb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtYmxvY2s+Lmxpc3QsLmNhcmQtYmxvY2s+Lmxpc3Qt''@;'; put 'put ''dW5zdHlsZWR7cGFkZGluZzowfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NTc2cHgpey5jYXJkLWNvbHVtbnN7Y29sdW1uLWNvdW50OjM7Y29sdW1uLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2JyZWFrLWluc2lkZTphdm9pZDtjb2x1bW4tZmlsbDpiYWxhbmNlOy13ZWJr''@;'; put 'put ''aXQtcGVyc3BlY3RpdmU6MX0uY2FyZC1jb2x1bW5zLmNhcmQtY29sdW1ucy0ye2NvbHVtbi1jb3VudDoyfS5jYXJkLWNvbHVtbnMuY2FyZC1jb2x1bW5zLTR7Y29sdW1uLWNvdW50OjR9LmNhcmQtY29sdW1ucyAuY2FyZHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS00KX0uY2FyZC1jb2x1bW5zIC5jbGlja2FibGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2FyZCAuY2hlY2tib3guYnRuIGxhYmVsLC5jYXJkIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5jYXJkIC5y''@;'; put 'put ''YWRpby5idG4gbGFiZWwsLmNhcmQgLnJhZGlvLWlubGluZS5idG4gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1uYXYtYWN0aXZl''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLW5hdi1zZWxlY3RlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbmF2LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1uYXYtc2VsZWN0ZWQtYWN0''@;'; put 'put ''aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItbmF2LWxpbmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItbmF2LWxpbmstYWN0''@;'; put 'put ''aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX1AbWVkaWEgc2NyZWVue3NlY3Rpb25bYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfX1bZGF0YS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfWJ1dHRvbi5uYXYtbGlua3tib3Jk''@;'; put 'put ''ZXItcmFkaXVzOjA7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTttaW4td2lkdGg6MH0udGFicy1vdmVyZmxvd3twb3NpdGlvbjpyZWxhdGl2ZX0udGFicy1vdmVyZmxvdyAuZHJvcGRvd24tbWVudXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMCk7Ym94LXNoYWRvdzp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO292ZXJmbG93OmhpZGRlbn0udGFicy1vdmVyZmxvdyAuYnRue2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNCk7''@;'; put 'put ''cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTApfS50YWItY29udGVudHtkaXNwbGF5OmlubGluZX1fOi1tcy1mdWxsc2NyZWVuIC50YWItY29udGVudCw6cm9vdCAu''@;'; put 'put ''dGFiLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJX0udGFicy12ZXJ0aWNhbHtkaXNwbGF5OmZsZXh9LnRhYnMtdmVydGljYWw+Lm5hdntoZWlnaHQ6YXV0bztib3gtc2hhZG93Om5vbmU7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0cmV0Y2g7bWFy''@;'; put 'put ''Z2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7b3ZlcmZsb3c6YXV0bztmbGV4LXNocmluazowO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTIpO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1saW5re3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXI6MDtmbGV4LXNocmluazowO21hcmdpbi10b3A6MDtt''@;'; put 'put ''YXJnaW4tbGVmdDowO3dpZHRoOjEwMCV9LnRhYnMtdmVydGljYWw+Lm5hdiAubmF2LWxpbmsuYnRue21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC50YWJzLXZlcnRpY2FsPi5uYXYgLm5h''@;'; put 'put ''di1saW5rOmhvdmVyOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0udGFicy1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6MTAwJX0udGFicy1hY3Rpb25zW3Bvc2l0aW9ufj1sZWZ0XXtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6c3RhcnR9LnRhYnMtYWN0aW9uc1twb3NpdGlvbn49cmlnaHRde2p1c3RpZnktY29udGVudDplbmR9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZHJvcGRvd24tYWN0aXZlLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xy''@;'; put 'put ''LWRyb3Bkb3duLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWRyb3Bkb3duLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZHJvcGRvd24tZGl2aWRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci10aW50KTstLWNsci1kcm9wZG93bi1kaXZpZGVyLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xv''@;'; put 'put ''cik7LS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1kcm9wZG93bi1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNl''@;'; put 'put ''bGVjdGVkKTstLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1m''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTstLWNsci1kcm9wZG93bi1pdGVtLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTst''@;'; put 'put ''LWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3IgKTstLWNsci1kcm9wZG93bi1pdGVtLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZHJvcGRv''@;'; put 'put ''d24taXRlbS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTst''@;'; put 'put ''LWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tc2VsZWN0aW9uLWNvbG9yICk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQt''@;'; put 'put ''c2VsZWN0ZWQtaG92ZXIpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcjp0cmFuc3BhcmVudH0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''aW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91''@;'; put 'put ''dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVye292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3RleHQtYWxpZ246bGVmdDtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9LmRyb3Bk''@;'; put 'put ''b3due3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9p''@;'; put 'put ''bnRlcn0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNsci1pY29uW3NoYXBlXj1hbmdsZV17Y29sb3I6aW5oZXJpdDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xlIGNkcy1pY29uW3NoYXBlXj1hbmdsZV17bWFyZ2luLXRvcDp1bnNldDtjb2xvcjppbmhlcml0O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRue3RleHQtb3ZlcmZs''@;'; put 'put ''b3c6dW5zZXR9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue3RyYW5zZm9ybTpub25lfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49''@;'; put 'put ''Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49YW5nbGVdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49YW5nbGVde3JpZ2h0OnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1wYWRkaW5nKX0uZHJvcGRvd24g''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7cGFkZGluZzowO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvcil9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNkcy1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dn''@;'; put 'put ''bGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1hbmdsZV17cmlnaHQ6MH0u''@;'; put 'put ''ZHJvcGRvd24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWFjdGl2ZS10ZXh0LWNvbG9yKX0uZHJvcGRvd24tbWVudT4qe2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3Bh''@;'; put 'put ''Y2U6bm93cmFwfS5kcm9wZG93bi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigx''@;'; put 'put ''cmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZHJvcGRvd24tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwKTttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Mik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIDA7dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDUwfS5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kcm9wZG93bi1oZWFkZXItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW46MH0uZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyfi5kcm9wZG93bi1pdGVtLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ+LmRyb3Bkb3duPi5kcm9w''@;'; put 'put ''ZG93bi1pdGVte3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4taW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1l''@;'; put 'put ''bnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNj''@;'; put 'put ''ZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24t''@;'; put 'put ''aXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7''@;'; put 'put ''ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRyb3Bkb3duLW1lbnUgLmJ0bi5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNv''@;'; put 'put ''bmRhcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5hY3Rp''@;'; put 'put ''dmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5hY3RpdmUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRl''@;'; put 'put ''bS5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYmctY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG46aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNv''@;'; put 'put ''bmRhcnk6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6aG92ZXIsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1wcmltYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVye2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLXNlY29uZGFyeTpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXN1Y2Nlc3M6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1z''@;'; put 'put ''dWNjZXNzOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9y''@;'; put 'put ''KX0uZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXN1Y2Nlc3M6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWxpbms6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0u''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''b3V0bGluZS1kYW5nZXI6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmFjdGl2ZS5hY3RpdmUsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06YWN0aXZlLmFjdGl2ZXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmRyb3Bkb3duLW1lbnUgLmJ0bjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWluZm86Zm9jdXMsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1vdXRsaW5lOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJu''@;'; put 'put ''aW5nOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06Zm9jdXN7ei1pbmRleDppbmhlcml0fS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVk''@;'; put 'put ''LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS13YXJuaW5nOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmlt''@;'; put 'put ''YXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZCwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtYmctY29sb3IpOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5kcm9wZG93bi1tZW51IC5idG4u''@;'; put 'put ''ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8u''@;'; put 'put ''ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25k''@;'; put 'put ''YXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQ6''@;'; put 'put ''aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmhvdmVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZDpo''@;'; put 'put ''b3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2Fi''@;'; put 'put ''bGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG46ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeTpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpk''@;'; put 'put ''aXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQ6YWN0''@;'; put 'put ''aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tcHJp''@;'; put 'put ''bWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1l''@;'; put 'put ''bnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuZHJvcGRvd24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmFj''@;'; put 'put ''dGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2''@;'; put 'put ''ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1p''@;'; put 'put ''dGVtLmFjdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LW91dGxpbmUuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3Rp''@;'; put 'put ''dmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1wcmltYXJ5LmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmRyb3Bkb3duLWl0ZW0uYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZSwu''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2Vy''@;'; put 'put ''LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1''@;'; put 'put ''Y2Nlc3MuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWZ0ZXJ7Y29udGVudDoiIjttYXNrOnVybCgiZGF0YTppbWFnZS9zdmcreG1s''@;'; put 'put ''O2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''c3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTEl''@;'; put 'put ''MjIlMjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7LXdlYmtpdC1tYXNrLXJlcGVhdDpu''@;'; put 'put ''by1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvdmVyO21hc2stc2l6ZTpjb3ZlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTYpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tbGVmdDphdXRvfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6''@;'; put 'put ''YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFm''@;'; put 'put ''dGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5LmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0''@;'; put 'put ''bi1vdXRsaW5lLWRhbmdlci5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLXByaW1hcnkuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZXhw''@;'; put 'put ''YW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5leHBhbmRhYmxlOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0taG92ZXItY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZTphY3RpdmU6''@;'; put 'put ''YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6''@;'; put 'put ''YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5k''@;'; put 'put ''YWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTphY3Rp''@;'; put 'put ''dmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWNvbG9y''@;'; put 'put ''KX0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91''@;'; put 'put ''dGxpbmUuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tb3V0bGluZS1wcmltYXJ5LmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxl''@;'; put 'put ''ZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdl''@;'; put 'put ''ci5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4td2FybmluZy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tbGluay5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3du''@;'; put 'put ''LWl0ZW0uZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4taW5mbzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUt''@;'; put 'put ''d2FybmluZzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpmb2N1cywu''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tbGluazpmb2N1cywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpmb2N1c3tvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMikpfS5kcm9wZG93bi1tZW51IC5idG4sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7LmRyb3Bkb3duLW1lbnUgLmJ0biwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX19LmRyb3Bkb3duLW1lbnUgYS5kcm9wZG93bi1pdGVte3RleHQtZGVjb3JhdGlvbjpub25lfS5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1k''@;'; put 'put ''aXZpZGVye2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLWRyb3Bkb3duLWRpdmlkZXItYm9yZGVyLXdpZHRoKTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWRpdmlkZXItY29sb3IpO21hcmdpbjp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTYpfS5idG4tZ3JvdXAtb3ZlcmZsb3cub3Blbj4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5vcGVuPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJm''@;'; put 'put ''bG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51e3Zpc2liaWxpdHk6dmlzaWJsZX0uYnRuLWdyb3VwLW92ZXJm''@;'; put 'put ''bG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwu''@;'; put 'put ''ZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXt0b3A6MTAwJTtib3R0b206YXV0bzttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1sZWZ0''@;'; put 'put ''Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwudGFi''@;'; put 'put ''cy1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cudG9wLXJp''@;'; put 'put ''Z2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24udG9wLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVu''@;'; put 'put ''dXt0b3A6YXV0bztib3R0b206MTAwJTttYXJnaW46MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMH0uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3AtbGVmdD4u''@;'; put 'put ''ZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6''@;'; put 'put ''YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRy''@;'; put 'put ''b3Bkb3duLW1lbnUsLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXtyaWdodDoxMDAlO2xlZnQ6YXV0bzttYXJnaW46MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93Lmxl''@;'; put 'put ''ZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51''@;'; put 'put ''LC50YWJzLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJv''@;'; put 'put ''dHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJv''@;'; put 'put ''cGRvd24tbWVudXtsZWZ0OjEwMCU7cmlnaHQ6YXV0bzttYXJnaW46MCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRy''@;'; put 'put ''b3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRv''@;'; put 'put ''d24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93biAuZHJvcGRvd24tbWVudXtib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcik7cG9zaXRpb246YWJzb2x1dGV9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBl''@;'; put 'put ''cj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5sZWZ0LXRv''@;'; put 'put ''cD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCAxMDAlIGF1dG8gYXV0bzttYXJnaW4tdG9wOmNhbGMoKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpIC0gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJv''@;'; put 'put ''cGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC5kcm9wZG93''@;'; put 'put ''biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCBhdXRvIGF1dG8gMTAwJTttYXJnaW4tdG9wOmNhbGMoKC0xKnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtOCkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLWxlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5k''@;'; put 'put ''cm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3Jh''@;'; put 'put ''cHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudXtpbnNldDphdXRvIDEwMCUgMCBhdXRvO21hcmdp''@;'; put 'put ''bi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJnaW4tcmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC1ib3R0b20+''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAu''@;'; put 'put ''ZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4u''@;'; put 'put ''ZHJvcGRvd24tbWVudXtpbnNldDphdXRvIGF1dG8gMCAxMDAlO21hcmdpbi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJnaW4tbGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpfTpy''@;'; put 'put ''b290IFtjZHMtdGhlbWVdey0tY2xyLWxvZ2luLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4taGludC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWxvZ2luLWZvb3Rlci1nYXA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1sb2dpbi1jb3B5cmlnaHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTst''@;'; put 'put ''LWNsci1sb2dpbi13ZWxjb21lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4tZXJyb3ItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1sb2dpbi1lcnJvci1pY29uLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcik7LS1jbHItbG9naW4tbG9nby1jb2xvcjojNzE3MTc1Oy0tY2xyLWxvZ2luLXRyYWRlbWFyay1jb2xvcjp2YXIoLS1jbHItaDItY29sb3IpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXdlaWdodDp2YXIoLS1jbHItaDItZm9udC13ZWln''@;'; put 'put ''aHQpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LWZhbWlseTp2YXIoLS1jbHItaDItZm9udC1mYW1pbHkpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXNpemU6dmFyKC0tY2xyLWgyLWZvbnQtc2l6ZSk7LS1jbHItbG9naW4tdHJhZGVtYXJrLWxldHRlci1zcGFjaW5nOnZhcigtLWNs''@;'; put 'put ''ci1oMi1sZXR0ZXItc3BhY2luZyl9OnJvb3QgW2Nkcy10aGVtZX49ZGFya117LS1jbHItbG9naW4tbG9nby1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKX0ubG9naW4td3JhcHBlcntkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDp1cmwoZGF0YTppbWFnZS9z''@;'; put 'put ''dmcreG1sO2NoYXJzZXQ9dXRmOCwlM0MlM0Z4bWwlMjB2ZXJzaW9uJTNEJTIyMS4wJTIyJTIwZW5jb2RpbmclM0QlMjJ1dGYtOCUyMiUzRiUzRSUwRCUwQSUzQyUyMURPQ1RZUEUlMjBzdmclMjBQVUJMSUMlMjAlMjItJTJGJTJGVzNDJTJGJTJGRFREJTIwU1ZHJTIwMS4xJTJGJTJGRU4lMjIl''@;'; put 'put ''MjAlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRkdyYXBoaWNzJTJGU1ZHJTJGMS4xJTJGRFREJTJGc3ZnMTEuZHRkJTIyJTNFJTBEJTBBJTNDc3ZnJTBEJTBBJTIwJTIwJTIwJTIwJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMGlkJTNEJTIybm8tYXNwZWN0''@;'; put 'put ''LXJhdGlvJTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMEQl''@;'; put 'put ''MEElMjAlMjAlMjAlMjAlMjB4JTNEJTIyMHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweSUzRCUyMjBweCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMGhlaWdodCUzRCUyMjIwNTUuNTVweCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHdpZHRoJTNEJTIyMTQ0MHB4JTIyJTBEJTBBJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjA1NS41NSUyMDE0NDAlMjIlMEQlMEElMjAlMjAlMjAlMjAlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pbllNaW4lMjBzbGljZSUyMiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2Rlc2MlM0VMb2dpbiUyMElt''@;'; put 'put ''YWdlJTNDJTJGZGVzYyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBzdHJva2UlM0QlMjJub25lJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMSUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMHRy''@;'; put 'put ''YW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODAuMDAwMDAwJTJDJTIwLTQuMDAwMDAwJTI5JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0ZBRkFGQSUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjQlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cG9seWdvbiUyMGZpbGwlM0QlMjIlMjMwMDdDQkIlMjIlMjBvcGFjaXR5JTNEJTIyMC40JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG11bHRpcGx5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMTEwOC40MyUyMDE0NDMuNjMlMjAxMTA5LjA4JTIwMTQ0My42MyUyMDQ0My40NCUy''@;'; put 'put ''MDc3Ny43NCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkzRDhDQSUyMiUyMG9wYWNpdHklM0QlMjIwLjYlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1t''@;'; put 'put ''b2RlJTNBJTIwb3ZlcmxheSUzQiUyMiUyMHBvaW50cyUzRCUyMjAuNzklMjAzMzQuOTIlMjA0NDMuNDQlMjA3NzcuNzQlMjAwLjc5JTIwMzM0LjQ5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3Bv''@;'; put 'put ''bHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDIxMS44OCUyMDAuNzklMjAzMjkuNiUyMDU5LjYyJTIwMjcwLjc3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTYwLjY1JTIwMTY5Ljc0JTIwMC43OSUyMDkuNzMlMjAwLjc5JTIwMjExLjg4JTIwOTAuMjclMjAzMDEuNDYlMjA1OS42MiUyMDI3MC43NyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NERTNFRSUyMiUyMHBvaW50cyUzRCUyMjUwMy43NyUyMDE0NDMuNjMlMjA2OTcuNDclMjAxNDQzLjYzJTIwODAzLjc0JTIwMTMzNy4zNiUyMDcwNi45MyUyMDEyNDAuNDMl''@;'; put 'put ''MjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDREUzRUUlMjIlMjBwb2ludHMlM0QlMjIxNTguMzMlMjA2OTEuMTUlMjAwLjc5JTIwODQ4LjcyJTIwMC43OSUy''@;'; put 'put ''MDE0MjcuNDMlMjA0NDcuNTIlMjA5ODAuNyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NFRERFMCUyMiUyMHBvaW50cyUzRCUyMjI1Ny43MSUyMDU5MS43''@;'; put 'put ''NSUyMDAuNzklMjAzMzQuNDklMjAwLjc5JTIwNTMzLjQyJTIwMTU4LjMzJTIwNjkxLjE1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTlDOUQ1JTIyJTIw''@;'; put 'put ''cG9pbnRzJTNEJTIyMC43OSUyMDUzMy40MiUyMDAuNzklMjA4NDguNzIlMjAxNTguMzMlMjA2OTEuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0''@;'; put 'put ''RTclMjIlMjBwb2ludHMlM0QlMjI4MDYuNDYlMjAxMTQwLjg5JTIwNTQ2Ljk0JTIwODgxLjI4JTIwNDQ3LjUyJTIwOTgwLjclMjA3MDYuOTMlMjAxMjQwLjQzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEZDNERGJTIyJTIwcG9pbnRzJTNEJTIyNDQ3LjUyJTIwOTgwLjclMjAwLjc5JTIwMTQyNy40MyUyMDAuNzklMjAxNDQzLjYzJTIwNTAzLjc3JTIwMTQ0My42MyUyMDcwNi45MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBB''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3MEMwREMlMjIlMjBwb2ludHMlM0QlMjI2MDguMjMlMjA4MTkuOTklMjA1NDYuOTQlMjA4ODEuMjglMjA4MDYuNDYlMjAxMTQwLjg5JTIwODY3LjY0JTIwMTA3''@;'; put 'put ''OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyNDIwLjA1JTIwNDI5LjM5JTIwMzE5LjAxJTIwNTMwLjQ1JTIw''@;'; put 'put ''NjA4LjIzJTIwODE5Ljk5JTIwNzA5LjMlMjA3MTguOTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2OUFGRDQlMjIlMjBwb2ludHMlM0QlMjI3MDkuMyUy''@;'; put 'put ''MDcxOC45MSUyMDYwOC4yMyUyMDgxOS45OSUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2OC43NCUyMDk3OC42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEVC''@;'; put 'put ''NUJDJTIyJTIwcG9pbnRzJTNEJTIyNjE5LjU5JTIwMjI5LjgyJTIwMzkzLjQyJTIwMy4xMiUyMDMyNy4yNyUyMDMuMTIlMjAxNjAuNjUlMjAxNjkuNzQlMjA0MjAuMDUlMjA0MjkuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RUI1QkMlMjIlMjBwb2ludHMlM0QlMjIzMTkuMDElMjA1MzAuNDUlMjAzMTkuMDElMjA1MzAuNDUlMjA5MC4yNyUyMDMwMS40NiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdDQjBDNyUyMiUyMHBvaW50cyUzRCUyMjE2MC42NSUyMDE2OS43NCUyMDU5LjYyJTIwMjcwLjc3JTIwOTAuMjclMjAzMDEuNDYlMjAzMTkuMDElMjA1MzAuNDUlMjA0MjAuMDUlMjA0MjkuMzklMjIl''@;'; put 'put ''M0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4NEM0RDIlMjIlMjBwb2ludHMlM0QlMjI1OS42MiUyMDI3MC43NyUyMDAuNzklMjAzMjkuNiUyMDAuNzklMjAzMzQu''@;'; put 'put ''NDklMjAyNTcuNzElMjA1OTEuNzUlMjAzMTkuMDElMjA1MzAuNDUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3Q0IwQzclMjIlMjBwb2ludHMlM0QlMjI1''@;'; put 'put ''MzcuNTUlMjAzLjEyJTIwMzkzLjQyJTIwMy4xMiUyMDYxOS41OSUyMDIyOS44MiUyMDY5MS43NCUyMDE1Ny42NiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUy''@;'; put 'put ''Mzg3RDFEQiUyMiUyMHBvaW50cyUzRCUyMjg0Ni4yNSUyMDMuMTIlMjA1MzcuNTUlMjAzLjEyJTIwNjkxLjc0JTIwMTU3LjY2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxs''@;'; put 'put ''JTNEJTIyJTIzQ0RFM0VFJTIyJTIwcG9pbnRzJTNEJTIyOTA5Ljg3JTIwMTQ0My42MyUyMDg1MC4xOSUyMDEzODMuODclMjA3OTAuNDMlMjAxNDQzLjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUz''@;'; put 'put ''Q3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMzE5LjAxJTIwNTMwLjQ1JTIwMjU3LjcxJTIwNTkxLjc1JTIwNDQzLjQ0JTIwNzc3Ljc0JTIwNTQ2Ljk0JTIwODgxLjI4JTIwNjA4LjIzJTIwODE5Ljk5JTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIw''@;'; put 'put ''MTA3OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyODY3LjY0JTIwMTA3OS43JTIwODA2LjQ2JTIwMTE0MC44''@;'; put 'put ''OSUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIy''@;'; put 'put ''MTA2NS41NyUyMDEwNzUuNTIlMjA5NjguNzQlMjA5NzguNiUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwl''@;'; put 'put ''M0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI5NjQuNDYlMjAxMTc2LjYzJTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIwMTA3OS43JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTIzMS4xNiUyMDE0NDMuNjMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEyNDAuMDglMjA3MDcuMjIlMjAxMTY3LjklMjA3NzkuNCUyMDEyNjQuNjglMjA4NzYuNCUyMDEzMzYuODclMjA4MDQuMjIlMjAxMjQwLjA4JTIw''@;'; put 'put ''NzA3LjIxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyOTgwLjgzJTIwNDQ3LjM5JTIwNjkxLjc0JTIwMTU3LjY2''@;'; put 'put ''JTIwNjE5LjU5JTIwMjI5LjgyJTIwOTA4LjY2JTIwNTE5LjU2JTIwOTgwLjgzJTIwNDQ3LjM5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIy''@;'; put 'put ''JTIwcG9pbnRzJTNEJTIyNzA5LjMlMjA3MTguOTElMjA5NjguNzQlMjA5NzguNiUyMDExNjcuOTElMjA3NzkuNCUyMDkwOC42NiUyMDUxOS41NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5''@;'; put 'put ''Z29uJTIwZmlsbCUzRCUyMiUyMzY5QUZENCUyMiUyMHBvaW50cyUzRCUyMjk4MC44MyUyMDQ0Ny4zOSUyMDkwOC42NiUyMDUxOS41NSUyMDExNjcuOTElMjA3NzkuNCUyMDEyNDAuMDglMjA3MDcuMjElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMDM0LjU5JTIwMy4xMiUyMDg0Ni4yNSUyMDMuMTIlMjA2OTEuNzQlMjAxNTcuNjYlMjA5ODAuODMlMjA0NDcuMzklMjAxMjI5Ljc1JTIwMTk4LjQ3JTIyJTNF''@;'; put 'put ''JTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTI0MC4wOCUyMDcwNy4yMSUyMDEzMzYuODclMjA4MDQuMjIlMjAxNTg2LjAx''@;'; put 'put ''JTIwNTU1LjA4JTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzcwQzBEQyUyMiUyMHBvaW50cyUzRCUyMjEyMjkuNzUlMjAx''@;'; put 'put ''OTguNDclMjA5ODAuODMlMjA0NDcuMzklMjAxMjQwLjA4JTIwNzA3LjIxJTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0I3''@;'; put 'put ''Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjEyOTIuMjIlMjAxMzAyLjM4JTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE0OTEuMTglMjAxMTAzLjQyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjA5NDkuNzglMjAxMjg0LjI3JTIwMTEwOS4wOCUyMDE0NDMuNjMlMjAxMTUwLjk4JTIwMTQ0My42MyUyMDExOTEuMDklMjAxNDAzLjUxJTIyJTNFJTND''@;'; put 'put ''JTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzVCOEM1JTIyJTIwcG9pbnRzJTNEJTIyMTE1MC45OCUyMDE0NDMuNjMlMjAxMjMxLjE2JTIwMTQ0My42MyUyMDExOTEuMDkl''@;'; put 'put ''MjAxNDAzLjUxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTI5Mi4yMiUyMDEzMDIuMzglMjAxMTEyLjAzJTIw''@;'; put 'put ''MTEyMi4wMiUyMDEwMTAuOTIlMjAxMjIzLjEzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2RUE0QkMlMjIlMjBwb2lu''@;'; put 'put ''dHMlM0QlMjIxMTkxLjA5JTIwMTQwMy41MSUyMDEyMzEuMTYlMjAxNDQzLjYzJTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxMjkyLjIyJTIwMTMwMi4zOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nw''@;'; put 'put ''b2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwN0NCQiUyMiUyMG9wYWNpdHklM0QlMjIwLjQlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwbXVsdGlwbHklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzgzLjMlMjA4NTAuNzUlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTQ5MS4xOCUyMDEx''@;'; put 'put ''MDMuNDIlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0I3Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjE0OTEuMTglMjAxMTAz''@;'; put 'put ''LjQyJTIwMTgzMC42MSUyMDE0NDMuNjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIz''@;'; put 'put ''NkVBNEJDJTIyJTIwcG9pbnRzJTNEJTIyMTQ5MS4xOCUyMDExMDMuNDIlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxODEyLjY1JTIwNzgxLjk1JTIwMTYzMi40NiUyMDYwMS41OSUyMDEzODMuMyUyMDg1MC43NSUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEwMzEuMjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUy''@;'; put 'put ''MDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzhDQUQ0JTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEw''@;'; put 'put ''MzEuMjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3Bv''@;'; put 'put ''bHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyODAzLjc0JTIwMTMzNy4zNiUyMDg1MC4xOSUyMDEzODMuODclMjA5NDkuNzglMjAxMjg0LjI3JTIwOTAzLjMxJTIwMTIzNy43OCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHBvaW50cyUzRCUyMjEwNjUuNTclMjAxMDc1LjUyJTIwMTExMi4wMyUyMDExMjIuMDIlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTI2NC42OSUyMDg3Ni40JTIyJTNFJTNDJTJG''@;'; put 'put ''cG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzdCOEQ5JTIyJTIwcG9pbnRzJTNEJTIyNjk3LjQ3JTIwMTQ0My42MyUyMDc5MC40MyUyMDE0NDMuNjMlMjA4NTAuMTklMjAxMzgz''@;'; put 'put ''Ljg3JTIwODAzLjc0JTIwMTMzNy4zNiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjk2NC40NiUyMDExNzYuNjMl''@;'; put 'put ''MjA5MDMuMzElMjAxMjM3Ljc4JTIwOTQ5Ljc4JTIwMTI4NC4yNyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNURCNUQ2''@;'; put 'put ''JTIyJTIwcG9pbnRzJTNEJTIyOTY0LjQ2JTIwMTE3Ni42MyUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NDkuNzglMjAxMjg0LjI3JTIwMTAxMC45MiUyMDEyMjMuMTMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMDM4LjI0NzI5NyUyQyUyMDExNDkuMjc1NDI5JTI5JTIwcm90YXRlJTI4LTQ0Ljk3MDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xMDM4LjI0NzI5NyUyQyUyMC0xMTQ5LjI3NTQy''@;'; put 'put ''OSUyOSUyMCUyMiUyMHglM0QlMjI5NjYuNzUyMjk3JTIyJTIweSUzRCUyMjExMTYuNDEwNDMlMjIlMjB3aWR0aCUzRCUyMjE0Mi45OSUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTAzOC4yNDcyOTclMkMlMjAxMTQ5LjI3NTQyOSUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTAzOC4yNDcyOTclMkMlMjAtMTE0OS4y''@;'; put 'put ''NzU0MjklMjklMjAlMjIlMjB4JTNEJTIyOTY2Ljc1MjI5NyUyMiUyMHklM0QlMjIxMTE2LjQxMDQzJTIyJTIwd2lkdGglM0QlMjIxNDIuOTklMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTAxMC45MiUyMDEyMjMuMTMlMjA5NjQuNDYlMjAxMTc2LjYzJTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEEl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjQyJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMDk2NC40''@;'; put 'put ''NiUyMDExNzYuNjMlMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzMDA3Q0JCJTIyJTIwb3BhY2l0eSUzRCUyMjAuNCUyMiUy''@;'; put 'put ''MHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBtdWx0aXBseSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMjY0LjY5JTIwODc2LjQlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTM4My4zJTIwODUwLjc1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEyNjQuNjklMjA4NzYuNCUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxMzgzLjMlMjA4NTAuNzUl''@;'; put 'put ''MjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5M0Q4Q0ElMjIlMjBvcGFjaXR5JTNEJTIyMC42JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUy''@;'; put 'put ''MG92ZXJsYXklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1REI1RDYlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQzRTYlMjIlMjBwb2ludHMlM0QlMjIyMDU2JTIwMC4xMiUyMDE2NDUuNDklMjAwLjEyJTIwMTY0OC40OSUyMDMuMTIlMjAxOTQ0LjA3JTIwMy4xMiUyMDE3OTYu''@;'; put 'put ''MjIlMjAxNTAuOTklMjAxODkzLjEyJTIwMjQ3Ljk3JTIwMjA1NC40NSUyMDg2LjY0JTIwMjA1NC40NSUyMDE3OS42JTIwMTkzOS41OCUyMDI5NC40NyUyMDIwNTYlMjA0MTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3QUI5RDklMjIlMjBwb2ludHMlM0QlMjIxNjQ4LjQ5JTIwMy4xMiUyMDE3OTYuMjIlMjAxNTAuOTklMjAxOTQ0LjA3JTIwMy4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY2QUVENCUyMiUyMHBvaW50cyUzRCUyMjIwNTQuNDUlMjA4Ni42NCUyMDE4OTMuMTIlMjAyNDcuOTclMjAxOTM5LjU4JTIwMjk0LjQ3JTIwMjA1NC40NSUyMDE3OS42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUw''@;'; put 'put ''RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTg4NC44MiUyMDcwOS43OCUyMDIwNTQuNDUlMjA4NzkuNTclMjAyMDU0LjQ1JTIwNTQwLjE1JTIyJTNFJTND''@;'; put 'put ''JTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyMTQ4OS4xNCUyMDQ1OC4xMiUyMDE0ODkuMTQlMjA0NTguMTIlMjAxMzcxLjEzJTIw''@;'; put 'put ''MzM5Ljk5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyMTc5Ni4yMiUyMDE1MC45OSUyMDE2NDguNDklMjAzLjEy''@;'; put 'put ''JTIwMTQyNS4xJTIwMy4xMiUyMDEzMDEuOTElMjAxMjYuMzElMjAxNTYxLjMlMjAzODUuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjB0''@;'; put 'put ''cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzk4Ljk1NDA2NiUyQyUyMDM4OC43OTg3ODElMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE3OTguOTU0MDY2JTJDJTIwLTM4OC43OTg3ODElMjklMjAlMjIlMjB4JTNEJTIyMTYzMi44MjQwNyUyMiUyMHklM0Ql''@;'; put 'put ''MjIzNTUuOTMzNzgxJTIyJTIwd2lkdGglM0QlMjIzMzIuMjYlMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUy''@;'; put 'put ''MiUyMHBvaW50cyUzRCUyMjE1ODYuMDElMjA1NTUuMDglMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNTczLjcxMTU3NyUyQyUyMDQ3MC42MjAyNjMlMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE1NzMuNzExNTc3JTJDJTIwLTQ3MC42MjAyNjMlMjkl''@;'; put 'put ''MjAlMjIlMjB4JTNEJTIyMTUyMi42ODE1OCUyMiUyMHklM0QlMjI0MDIuMDg1MjYzJTIyJTIwd2lkdGglM0QlMjIxMDIuMDYlMjIlMjBoZWlnaHQlM0QlMjIxMzcuMDclMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzU4LjY3Njc1OCUyQyUyMDY1NS43NjcxMjAlMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE3NTguNjc2NzU4JTJDJTIwLTY1NS43NjcxMjAl''@;'; put 'put ''MjklMjAlMjIlMjB4JTNEJTIyMTcwNy42NDY3NiUyMiUyMHklM0QlMjI1MjguMjkyMTIlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjI1NC45NSUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHBvaW50cyUzRCUyMjEzMDEuOTElMjAxMjYuMzElMjAxMTc4Ljg0JTIwMy4xMiUyMDEwMzQuNTklMjAzLjEyJTIwMTIyOS43NSUyMDE5OC40NyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzgzQzBDOCUyMiUyMHBvaW50cyUzRCUyMjE4MTIuNjUlMjA3ODEuOTUlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDIwNTQuNDUlMjA4NzkuNTclMjAxODg0LjgyJTIwNzA5Ljc4JTIyJTNF''@;'; put 'put ''JTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzN0RDNkRDJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTM5NS41MTY5MDElMkMlMjAyOTIuMjA2NTE5JTI5JTIw''@;'; put 'put ''cm90YXRlJTI4LTQ1LjAwMDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xMzk1LjUxNjkwMSUyQyUyMC0yOTIuMjA2NTE5JTI5JTIwJTIyJTIweCUzRCUyMjEzNDQuNDkxOSUyMiUyMHklM0QlMjIxMDguNzAxNTE5JTIyJTIwd2lkdGglM0QlMjIxMDIuMDUlMjIlMjBoZWlnaHQlM0QlMjIzNjcuMDEl''@;'; put 'put ''MjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM2OEI4RDUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNjQ1LjMxMzYxOSUyQyUyMDU0Mi4yNDk3NjAlMjkl''@;'; put 'put ''MjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE2NDUuMzEzNjE5JTJDJTIwLTU0Mi4yNDk3NjAlMjklMjAlMjIlMjB4JTNEJTIyMTU5NC4yODM2MiUyMiUyMHklM0QlMjI1MDkuMzg0NzYlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjY1Ljcz''@;'; put 'put ''JTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MC4wMDAwMDAlMkMlMjAzLjAw''@;'; put 'put ''MDAwMCUyOSUyMiUyMHN0cm9rZSUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjE1JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGQlM0QlMjJNMC45NSUyQzAuMTIlMjBMMC45NSUyQzg0MC4xMiUy''@;'; put 'put ''MiUyMGlkJTNEJTIyU2hhcGUlMjIlM0UlM0MlMkZwYXRoJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTND''@;'; put 'put ''JTJGc3ZnJTNFKTtiYWNrZ3JvdW5kLXNpemU6MTAwJTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNhbGMoNTgwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0ubG9naW4td3JhcHBlciAubG9naW57YmFja2dyb3VuZDp2YXIoLS1jbHIt''@;'; put 'put ''bG9naW4tYmFja2dyb3VuZC1jb2xvcik7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OmF1dG87''@;'; put 'put ''bWluLWhlaWdodDoxMDB2aDt3aWR0aDpjYWxjKDU4MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1oZWFkZXJ7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7ZmxleC1k''@;'; put 'put ''aXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciAuYWN0aW9ucywubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWhlYWRlciAuYWN0aW9uc3ttYXJnaW4tbGVmdDphdXRvfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9n''@;'; put 'put ''aW4taGVhZGVyIC5sb2dve2hlaWdodDoxNnB4O3dpZHRoOjEwMCU7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCxcICUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTA1JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDUlMjAxNiUyMiUy''@;'; put 'put ''MGZpbGwlM0QlMjJub25lJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk00NC45MzcxJTIwMTQuOEw0MC4zNTk4JTIwMi4wMDA4MkM0MC4yOTMyJTIwMS44MDA5NCUyMDQwLjIyNjYlMjAxLjYwMTA2''@;'; put 'put ''JTIwNDAuMjI2NiUyMDEuNDAxMTdDNDAuMjI2NiUyMDAuODY4MTUzJTIwNDAuNjkzJTIwMC4zNDE3OTclMjA0MS4zNTI2JTIwMC4zNDE3OTdDNDEuOTUyMiUyMDAuMzQxNzk3JTIwNDIuMzQ1MyUyMDAuNzQxNTYzJTIwNDIuNDc4NiUyMDEuMjY3OTJMNDYuMjU2NCUyMDEyLjI3NDhMNTAuMTAw''@;'; put 'put ''OCUyMDEuMjY3OTJDNTAuMzAwNyUyMDAuNzM0OSUyMDUwLjYzMzglMjAwLjM0MTc5NyUyMDUxLjIyNjglMjAwLjM0MTc5N0g1MS4zNkM1MS45NTk3JTIwMC4zNDE3OTclMjA1Mi4zNTI4JTIwMC43NDE1NjMlMjA1Mi41NTI3JTIwMS4yNjc5Mkw1Ni4zMzA1JTIwMTIuMjc0OEw2MC4xNzQ5JTIw''@;'; put 'put ''MS4yMDEyOUM2MC4zMDgyJTIwMC43MzQ5MDElMjA2MC42NDEzJTIwMC4zNDE3OTclMjA2MS4yMzQzJTIwMC4zNDE3OTdDNjEuOTAwNiUyMDAuMzQxNzk3JTIwNjIuMzYwMyUyMDAuODA4MTg4JTIwNjIuMzYwMyUyMDEuNDAxMTdDNjIuMzYwMyUyMDEuNjAxMDYlMjA2Mi4yOTM2JTIwMS44Njc1''@;'; put 'put ''NyUyMDYyLjIyNyUyMDIuMDAwODJMNTcuNTgzMSUyMDE0LjhDNTcuMzE2NiUyMDE1LjQ2NjMlMjA1Ni44NTAyJTIwMTUuNzkyOCUyMDU2LjMyMzglMjAxNS43OTI4SDU2LjI1NzJDNTUuNjU3NSUyMDE1Ljc5MjglMjA1NS4yNjQ0JTIwMTUuNDU5NiUyMDU0Ljk5NzklMjAxNC44TDUxLjI4Njgl''@;'; put 'put ''MjAzLjkyNjM2TDQ3LjUwOSUyMDE0LjhDNDcuMzA5MSUyMDE1LjQ2NjMlMjA0Ni44NDk0JTIwMTUuNzkyOCUyMDQ2LjMxNjMlMjAxNS43OTI4SDQ2LjI0OTdDNDUuNjUwMSUyMDE1Ljc5MjglMjA0NS4xOTAzJTIwMTUuNDU5NiUyMDQ0LjkyMzglMjAxNC44SDQ0LjkzNzFaJTIyJTIwZmlsbCUz''@;'; put 'put ''RCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTc4LjM1MjUlMjAxLjQ2NzhDNzguMzUyNSUyMDAuODY4MTUyJTIwNzguODE4OSUyMDAuMzQxNzk3JTIwNzkuNDc4NSUyMDAuMzQxNzk3QzgwLjEzODIlMjAwLjM0MTc5NyUyMDgwLjYwNDUlMjAwLjgwODE4NyUyMDgw''@;'; put 'put ''LjYwNDUlMjAxLjQ2NzhWNC4wNTI5NkM4MS43MzA2JTIwMS41MzQ0MyUyMDg0LjE4MjUlMjAwLjM0MTc5NyUyMDg1Ljg0MTUlMjAwLjM0MTc5N0M4Ni41MDExJTIwMC4zNDE3OTclMjA4Ni45Njc1JTIwMC44MDgxODclMjA4Ni45Njc1JTIwMS40Njc4Qzg2Ljk2NzUlMjAyLjA2NzQ1JTIwODYu''@;'; put 'put ''NTY3NyUyMDIuNTI3MTglMjA4NS45NzQ3JTIwMi41OTM4MUM4My4wNTY0JTIwMi45MjY5NSUyMDgwLjY3MTIlMjA1LjExMjM0JTIwODAuNjcxMiUyMDkuNDg5NzhWMTQuNTkzNUM4MC42NzEyJTIwMTUuMTkzMSUyMDgwLjIwNDglMjAxNS43MTk1JTIwNzkuNTQ1MiUyMDE1LjcxOTVDNzguODg1''@;'; put 'put ''NiUyMDE1LjcxOTUlMjA3OC40MTkyJTIwMTUuMTg2NCUyMDc4LjQxOTIlMjAxNC41OTM1VjEuNDYxMTQlMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNOTQuMTI5NCUyMDE1LjkyNzJDOTAuMDg1MSUyMDE1LjkyNzIlMjA4Ni43MDclMjAxMi43''@;'; put 'put ''NDI0JTIwODYuNzA3JTIwOC4xNzE3VjguMTA1MDhDODYuNzA3JTIwMy43OTQyNyUyMDg5LjY5MTklMjAwLjM0OTYwOSUyMDkzLjgwMjklMjAwLjM0OTYwOUM5OC4xODAzJTIwMC4zNDk2MDklMjAxMDAuNjk5JTIwMy45OTQxNSUyMDEwMC42OTklMjA3LjkxMTg2QzEwMC42OTklMjA4LjUxMTUx''@;'; put 'put ''JTIwMTAwLjIzMiUyMDguOTcxMjMlMjA5OS42Mzk1JTIwOC45NzEyM0g4OC44OTkxQzg5LjIzMjIlMjAxMi4yMjI3JTIwOTEuNDg0MiUyMDE0LjAwODMlMjA5NC4xMzYlMjAxNC4wMDgzQzk1Ljk5NDklMjAxNC4wMDgzJTIwOTcuMzIwOCUyMDEzLjI4MiUyMDk4LjM4MDIlMjAxMi4yODI2Qzk4''@;'; put 'put ''LjU4MDElMjAxMi4xNDk0JTIwOTguNzglMjAxMi4wMTYxJTIwOTkuMDM5OCUyMDEyLjAxNjFDOTkuNTcyOCUyMDEyLjAxNjElMjAxMDAuMDMzJTIwMTIuNDgyNSUyMDEwMC4wMzMlMjAxMi45NDIyQzEwMC4wMzMlMjAxMy4yMDg4JTIwOTkuODk5MyUyMDEzLjQ3NTMlMjA5OS42OTk0JTIwMTMu''@;'; put 'put ''NjY4NUM5OC4zMDY5JTIwMTQuOTk0NCUyMDk2LjY0NzklMjAxNS45MjA1JTIwOTQuMTI5NCUyMDE1LjkyMDVWMTUuOTI3MlpNOTguNTA2OCUyMDcuMjM4OTFDOTguMzA2OSUyMDQuNTIwNTElMjA5Ni43MTQ1JTIwMi4xMzUyMyUyMDkzLjgwMjklMjAyLjEzNTIzQzkxLjIxNzclMjAyLjEzNTIz''@;'; put 'put ''JTIwODkuMjkyMiUyMDQuMzIwNjIlMjA4OC45NjU3JTIwNy4yMzg5MUg5OC41MTM1SDk4LjUwNjhaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTYyLjM3NSUyMDExLjIxNThDNjIuMzc1JTIwNy45NjQ0JTIwNjUuMDI2OCUyMDYuMzA1Mzcl''@;'; put 'put ''MjA2OC44MDQ2JTIwNi4zMDUzN0M3MC43MzAxJTIwNi4zMDUzNyUyMDcyLjEyMjYlMjA2LjU3MTg4JTIwNzMuNDQxOSUyMDYuOTcxNjVWNi40Mzg2M0M3My40NDE5JTIwMy43MjAyMiUyMDcxLjc4MjglMjAyLjMyNzclMjA2OC45MzEyJTIwMi4zMjc3QzY3LjQwNTQlMjAyLjMyNzclMjA2Ni41''@;'; put 'put ''NDU5JTIwMi41Mjc1OCUyMDY1LjQxOTklMjAyLjk5Mzk3QzY1LjI4NjYlMjAzLjA2MDYlMjA2NS4xNTM0JTIwMy4wNjA2JTIwNjUuMDIwMSUyMDMuMDYwNkM2NC40ODcxJTIwMy4wNjA2JTIwNjQuMDI3NCUyMDIuNTk0MjElMjA2NC4wMjc0JTIwMi4wNjc4NUM2NC4wMjc0JTIwMS42MDE0NiUy''@;'; put 'put ''MDY0LjIyNzMlMjAxLjM0MTYxJTIwNjQuNjI3JTIwMS4xNDE3MkM2Ni4wODYyJTIwMC40NzU0NDclMjA2Ny4yMTIyJTIwMC4yODIyMjclMjA2OS4xMzc3JTIwMC4yODIyMjdDNzEuMjU2NSUyMDAuMjgyMjI3JTIwNzIuOTE1NSUyMDAuODE1MjUyJTIwNzMuOTc0OSUyMDEuOTQxMjZDNzQuOTY3''@;'; put 'put ''NiUyMDIuOTM0MDElMjA3NS41MDA3JTIwNC4zOTMxNiUyMDc1LjUwMDclMjA2LjMxODdWMTQuNjA3MkM3NS41MDA3JTIwMTUuMjczNSUyMDc1LjAzNDMlMjAxNS43MzMyJTIwNzQuNDQxMyUyMDE1LjczMzJDNzMuNzc1JTIwMTUuNzMzMiUyMDczLjM4MTklMjAxNS4yNjY4JTIwNzMuMzgxOSUy''@;'; put 'put ''MDE0LjY3MzhWMTMuMjE0N0M3Mi4zMjI1JTIwMTQuNjA3MiUyMDcwLjU5NjklMjAxNS43OTk4JTIwNjcuOTQ1MSUyMDE1Ljc5OThDNjUuMjI2NyUyMDE1LjkzMzElMjA2Mi4zNzUlMjAxNC4zNDA3JTIwNjIuMzc1JTIwMTEuMjIyNVYxMS4yMTU4Wk03My41MTUyJTIwMTAuMDg5OFY4LjYzMDY4''@;'; put 'put ''QzcyLjM4OTElMjA4LjI5NzU0JTIwNzAuOTMlMjA3Ljk2NDQlMjA2OS4wNzExJTIwNy45NjQ0QzY2LjIxOTQlMjA3Ljk2NDQlMjA2NC42OTM3JTIwOS4yMjM2NiUyMDY0LjY5MzclMjAxMS4wODI2VjExLjE0OTJDNjQuNjkzNyUyMDEzLjA3NDclMjA2Ni40MTkzJTIwMTQuMTM0MSUyMDY4LjQ3''@;'; put 'put ''MTQlMjAxNC4xMzQxQzcxLjI1NjUlMjAxNC4xMzQxJTIwNzMuNTA4NSUyMDEyLjQ3NTElMjA3My41MDg1JTIwMTAuMDg5OEg3My41MTUyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk00LjEwMjIyJTIwMS4yNjg2MkMzLjYzNTgzJTIwMC4y''@;'; put 'put ''MDkyMzclMjAyLjM3NjU2JTIwLTAuMzIzNzg3JTIwMS4yNTA1NSUyMDAuMjA5MjM1QzAuMTI0NTQ1JTIwMC43NDIyNTYlMjAtMC4yNzUyMTglMjAyLjAwMTUyJTIwMC4xOTExNzYlMjAzLjA2MDlMNC45NjE3MiUyMDEzLjQ3NDhDNS42ODc5NiUyMDE1LjEzMzglMjA2LjQ4NzQ5JTIwMTUuOTI2''@;'; put 'put ''NyUyMDguMDEzMjclMjAxNS45MjY3QzkuNTM5MDQlMjAxNS45MjY3JTIwMTAuMjY1MyUyMDE1LjAwMDYlMjAxMS4wNjQ4JTIwMTMuNDc0OEMxMS4wNjQ4JTIwMTMuNDc0OCUyMDE1LjI0MjQlMjA0LjM4Njc5JTIwMTUuMzA5JTIwNC4zMjY4M0MxNS4zNzU2JTIwNC4yNjAyJTIwMTUuNTA4OSUy''@;'; put 'put ''MDMuOTI3MDYlMjAxNS45MDg2JTIwMy45MjcwNkMxNi4yNDE4JTIwMy45MjcwNiUyMDE2LjU2ODMlMjA0LjE5MzU3JTIwMTYuNTY4MyUyMDQuNTkzMzRWMTMuNDgxNUMxNi41NjgzJTIwMTQuODc0JTIwMTcuMjk0NSUyMDE2JTIwMTguODIwMyUyMDE2QzIwLjM0NjElMjAxNiUyMDIxLjA3MjMl''@;'; put 'put ''MjAxNC44NzQlMjAyMS4wNzIzJTIwMTMuNDgxNVY2LjE4NTc0QzIxLjA3MjMlMjA0Ljc5MzIyJTIwMjIuMDY1JTIwMy44NjcxJTIwMjMuNDU3NiUyMDMuODY3MUMyNC44NTAxJTIwMy44NjcxJTIwMjUuNzA5NiUyMDQuNzkzMjIlMjAyNS43MDk2JTIwNi4xODU3NFYxMy40ODE1QzI1LjcwOTYl''@;'; put 'put ''MjAxNC44NzQlMjAyNi40NDI1JTIwMTYlMjAyNy45NjE2JTIwMTZDMjkuNDgwNyUyMDE2JTIwMzAuMjEzNiUyMDE0Ljg3NCUyMDMwLjIxMzYlMjAxMy40ODE1VjYuMTg1NzRDMzAuMjEzNiUyMDQuNzkzMjIlMjAzMS4yMDY0JTIwMy44NjcxJTIwMzIuNTk4OSUyMDMuODY3MUMzMy45OTE0JTIw''@;'; put 'put ''My44NjcxJTIwMzQuODUwOSUyMDQuNzkzMjIlMjAzNC44NTA5JTIwNi4xODU3NFYxMy40ODE1QzM0Ljg1MDklMjAxNC44NzQlMjAzNS41NzcxJTIwMTYlMjAzNy4xMDI5JTIwMTZDMzguNjI4NyUyMDE2JTIwMzkuMzU0OSUyMDE0Ljg3NCUyMDM5LjM1NDklMjAxMy40ODE1VjUuMTkyOTlDMzku''@;'; put 'put ''MzU0OSUyMDIuMTQxNDQlMjAzNi45MDMlMjAwLjAyMjY3ODElMjAzMy45ODQ3JTIwMC4wMjI2NzgxQzMxLjA2NjQlMjAwLjAyMjY3ODElMjAyOS4yMTQyJTIwMi4wODE0OCUyMDI5LjIxNDIlMjAyLjA4MTQ4QzI4LjA4ODIlMjAwLjgyMjIxMyUyMDI2Ljc2MjMlMjAwLjAyMjY3ODElMjAyNC41''@;'; put 'put ''MTAzJTIwMC4wMjI2NzgxQzIyLjEyNSUyMDAuMDIyNjc4MSUyMDE5Ljk5OTYlMjAyLjA4MTQ4JTIwMTkuOTk5NiUyMDIuMDgxNDhDMTkuMDA2OCUyMDAuODIyMjEzJTIwMTcuMzQ3OCUyMDAuMDIyNjc4MSUyMDE1Ljk1NTMlMjAwLjAyMjY3ODFDMTMuODM2NSUyMDAuMDIyNjc4MSUyMDEyLjEx''@;'; put 'put ''MDklMjAwLjk0ODgwNSUyMDExLjExODElMjAzLjM0MDc0TDguMDY2NTclMjAxMC41Njk4TDQuMDg4ODklMjAxLjI4ODYxTDQuMTAyMjIlMjAxLjI2ODYyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk0xMDAuODkyJTIwMi4yMDA3MUMxMDAu''@;'; put 'put ''ODkyJTIwMS4xNDEzMyUyMDEwMS42ODQlMjAwLjM0MTc5NyUyMDEwMi43NTElMjAwLjM0MTc5N0MxMDMuODE3JTIwMC4zNDE3OTclMjAxMDQuNjA5JTIwMS4yMDEyOSUyMDEwNC42MDklMjAyLjIwMDcxQzEwNC42MDklMjAzLjIwMDEzJTIwMTAzLjgxNyUyMDQuMDU5NjIlMjAxMDIuNzUxJTIw''@;'; put 'put ''NC4wNTk2MkMxMDEuNzU4JTIwNC4wNTk2MiUyMDEwMC44OTIlMjAzLjIwMDEzJTIwMTAwLjg5MiUyMDIuMjAwNzFaTTEwNC4yNyUyMDIuMjAwNzFDMTA0LjI3JTIwMS4zNDEyMSUyMDEwMy42MSUyMDAuNjc0OTM1JTIwMTAyLjc0NCUyMDAuNjc0OTM1QzEwMS44NzglMjAwLjY3NDkzNSUyMDEw''@;'; put 'put ''MS4yMTglMjAxLjQwMTE4JTIwMTAxLjIxOCUyMDIuMjAwNzFDMTAxLjIxOCUyMDMuMDYwMjElMjAxMDEuODc4JTIwMy43MjY0OCUyMDEwMi43NDQlMjAzLjcyNjQ4QzEwMy42MSUyMDMuNzI2NDglMjAxMDQuMjclMjAzLjAwMDI0JTIwMTA0LjI3JTIwMi4yMDA3MVolMjIlMjBmaWxsJTNEJTIy''@;'; put 'put ''JTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNMTAyLjA4NSUyMDEuNDAyMDNDMTAyLjA4NSUyMDEuMjY4NzclMjAxMDIuMTUyJTIwMS4yMDIxNSUyMDEwMi4yODUlMjAxLjIwMjE1SDEwMi44ODVDMTAzLjE1MSUyMDEuMjAyMTUlMjAxMDMuMjg0JTIwMS4yNjg3NyUyMDEw''@;'; put 'put ''My40MTglMjAxLjQwMjAzQzEwMy41NTElMjAxLjUzNTI4JTIwMTAzLjU1MSUyMDEuNjY4NTQlMjAxMDMuNTUxJTIwMS44MDE3OUMxMDMuNTUxJTIwMi4wNjgzJTIwMTAzLjQxOCUyMDIuMjY4MTklMjAxMDMuMjE4JTIwMi4zMzQ4MkwxMDMuNDg0JTIwMi42Njc5NkMxMDMuNTI5JTIwMi43MTIz''@;'; put 'put ''NyUyMDEwMy41NTElMjAyLjc1Njc5JTIwMTAzLjU1MSUyMDIuODAxMjFDMTAzLjU1MSUyMDIuOTM0NDYlMjAxMDMuNDg0JTIwMy4wMDEwOSUyMDEwMy4zNTElMjAzLjAwMTA5QzEwMy4yODQlMjAzLjAwMTA5JTIwMTAzLjIxOCUyMDIuOTM0NDclMjAxMDMuMTUxJTIwMi44Njc4NEwxMDIuNzUx''@;'; put 'put ''JTIwMi40MDE0NEgxMDIuNDE4VjIuODAxMjFDMTAyLjQxOCUyMDIuOTM0NDYlMjAxMDIuMzUyJTIwMy4wMDEwOSUyMDEwMi4yMTglMjAzLjAwMTA5QzEwMi4wODUlMjAzLjAwMTA5JTIwMTAyLjAxOSUyMDIuOTM0NDYlMjAxMDIuMDE5JTIwMi44MDEyMVYxLjQwODY5SDEwMi4wODVWMS40MDIw''@;'; put 'put ''M1pNMTAyLjg3OCUyMDIuMTI4MjdDMTAzLjA3OCUyMDIuMTI4MjclMjAxMDMuMjExJTIwMS45OTUwMiUyMDEwMy4yMTElMjAxLjg2MTc2QzEwMy4yMTElMjAxLjY2MTg4JTIwMTAzLjA3OCUyMDEuNTk1MjUlMjAxMDIuODc4JTIwMS41OTUyNUgxMDIuNDc4VjIuMTI4MjdIMTAyLjg3OFolMjIl''@;'; put 'put ''MjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tbG9nby1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxv''@;'; put 'put ''Z2luIC5sb2dpbi1mb290ZXJ7Z2FwOnZhcigtLWNsci1sb2dpbi1mb290ZXItZ2FwKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciBhLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZm9vdGVyIC5jb3B5cmlnaHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItbG9naW4tY29weXJpZ2h0LWNvbG9yKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWJvZHl7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVt''@;'; put 'put ''bjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDMyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1m''@;'; put 'put ''b250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1sb2dpbi10aXRsZS1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAud2VsY29tZXtjb2xvcjp2YXIoLS1jbHItbG9naW4td2VsY29tZS1jb2xvcik7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTUpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuc3VidGl0bGUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuaGludHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1sb2dpbi1oaW50LWNvbG9yKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgMH0ubG9naW4td3JhcHBlciAubG9naW4gLnRyYWRlbWFya3tjb2xvcjp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWNvbG9yKTtmb250LXdlaWdodDp2YXIoLS1j''@;'; put 'put ''bHItbG9naW4tdHJhZGVtYXJrLWZvbnQtd2VpZ2h0KTtmb250LWZhbWlseTp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXNpemUpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1sb2dpbi10cmFk''@;'; put 'put ''ZW1hcmstbGV0dGVyLXNwYWNpbmcpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAu''@;'; put 'put ''bG9naW4tZ3JvdXAgLmF1dGgtc291cmNlLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnVzZXJuYW1lLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnBhc3N3b3JkLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNoZWNrYm94LC5sb2dp''@;'; put 'put ''bi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ7bWFyZ2luOjAgMCB2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTEzKSAwfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHIt''@;'; put 'put ''c2VsZWN0LXdyYXBwZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItc2VsZWN0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQt''@;'; put 'put ''d3JhcHBlcj4uY2xyLWlucHV0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9s''@;'; put 'put ''LWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dC1ncm91cHttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dC1ncm91''@;'; put 'put ''cD4uY2xyLWlucHV0e3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmxvZ2luLXdyYXBwZXIg''@;'; put 'put ''LmxvZ2luIC5sb2dpbi1ncm91cCAudG9vbHRpcC12YWxpZGF0aW9uIC51c2VybmFtZSwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC50b29sdGlwLXZhbGlkYXRpb24gLnBhc3N3b3Jke3dpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9n''@;'; put 'put ''aW4tZ3JvdXAgLmVycm9ye2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpub25lO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sb2dpbi1l''@;'; put 'put ''cnJvci1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEw''@;'; put 'put ''MCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yOmJlZm9yZXtjb250ZW50OiIiO21hc2s6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24l''@;'; put 'put ''M0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUy''@;'; put 'put ''Mmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTNFLmNsci1pLW91dGxpbmUlN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi1jaXJjbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzZBMTIlMkMxMiUyQzAlMkMxJTJDMCUyQzMwJTJDMTglMkMxMiUyQzEyJTJDMCUyQzAlMkMwJTJDMTglMkM2Wm0wJTJDMjJBMTAlMkMxMCUyQzAlMkMxJTJDMSUyQzI4JTJDMTglMkMxMCUyQzEwJTJDMCUyQzAlMkMxJTJDMTglMkMyOFolMjIlM0Ul''@;'; put 'put ''M0MlMkZwYXRoJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwZCUzRCUyMk0xOCUyQzIwLjA3YTEuMyUyQzEuMyUyQzAlMkMwJTJDMS0xLjMtMS4zdi02YTEuMyUyQzEuMyUyQzAlMkMxJTJDMSUyQzIuNiUyQzB2NkExLjMl''@;'; put 'put ''MkMxLjMlMkMwJTJDMCUyQzElMkMxOCUyQzIwLjA3WiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGN4JTNEJTIyMTcuOTUlMjIlMjBjeSUzRCUyMjIzLjAyJTIyJTIwciUzRCUyMjEuNSUy''@;'; put 'put ''MiUzRSUzQyUyRmNpcmNsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSIpOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb3ZlcjttYXNrLXNpemU6Y292ZXI7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tZXJyb3ItaWNvbi1jb2xvcik7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSAwIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvci5hY3RpdmV7ZGlzcGxheTpmbGV4fS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yLmFjdGl2ZTpiZWZvcmV7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03''@;'; put 'put ''KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5idG57bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMDttYXgtd2lkdGg6bm9uZX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5zaWdudXB7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHkt''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246Y2VudGVyfS5sb2dpbi13cmFwcGVyIC5sb2dpbjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItYmxhY2spO29wYWNpdHk6LjE7dG9wOjA7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsubG9naW4td3JhcHBlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91''@;'; put 'put ''bmQ6dmFyKC0tY2xyLWxvZ2luLWJhY2tncm91bmQtY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbnt3aWR0aDoxMDAlO21hcmdpbi1sZWZ0OjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDIwJX0ubG9naW4td3JhcHBlciAubG9naW46YWZ0ZXJ7Y29udGVudDpub25lfX1A''@;'; put 'put ''bWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubG9naW4td3JhcHBlciAubG9naW57cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDE1JX19Lm1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMHZoO2JhY2tn''@;'; put 'put ''cm91bmQ6dmFyKC0tY2xyLWdsb2JhbC1hcHAtYmFja2dyb3VuZCl9Lm1haW4tY29udGFpbmVyIC5hbGVydC5hbGVydC1hcHAtbGV2ZWx7ZmxleDowIDAgYXV0bztvdmVyZmxvdy14OmhpZGRlbn0ubWFpbi1jb250YWluZXIgaGVhZGVyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVye2ZsZXg6MCAw''@;'; put 'put ''IHZhcigtLWNsci1oZWFkZXItaGVpZ2h0KX0ubWFpbi1jb250YWluZXIgLnN1Yi1uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXZ7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9Lm1haW4tY29udGFpbmVyIC51LW1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzttaW4taGVpZ2h0Oi4wNXJlbX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250''@;'; put 'put ''ZW50LWFyZWF7ZmxleDoxIDEgYXV0bztvdmVyZmxvdy15OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZzoxLjJyZW19Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdntmbGV4OjAgMCBhdXRvO29yZGVyOi0xfUBtZWRpYSBwcmludHsubWFpbi1jb250YWluZXJ7aGVpZ2h0OmF1dG99fWJvZHkubm8tc2Nyb2xsaW5nLGJvZHlbY2RzLWxheW91dD1uby1zY3JvbGxpbmddLGJv''@;'; put 'put ''ZHkubm8tc2Nyb2xsaW5nIC5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgLmNvbnRlbnQtYXJlYSxib2R5W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXSAubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWF7b3ZlcmZsb3c6aGlkZGVufTpyb290''@;'; put 'put ''IFtjZHMtdGhlbWVdey0tY2xyLW1vZGFsLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItbW9kYWwtY2xvc2UtY29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yKTstLWNsci1tb2RhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1tb2RhbC1jb250ZW50LWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1tb2RhbC1iYWNrZHJvcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2Ryb3AtYmFj''@;'; put 'put ''a2dyb3VuZCk7LS1jbHItbW9kYWwtc20td2lkdGg6Y2FsYygyODggKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1tb2RhbC1tZC13aWR0aDpjYWxjKDU3NiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLW1vZGFsLWxnLXdpZHRoOmNhbGMo''@;'; put 'put ''ODY0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwteGwtd2lkdGg6Y2FsYygxMTUyICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwtdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''KTstLWNsci1tb2RhbC10aXRsZS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpOy0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTstLWNsci1tb2RhbC10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1tb2RhbC10aXRsZS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXNte3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXNtLXdpZHRoKSFpbXBvcnRhbnR9LmNsci1zaWRlLXBhbmVsLXBpbm5lZC1tZHtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1tb2RhbC1t''@;'; put 'put ''ZC13aWR0aCkhaW1wb3J0YW50fS5jbHItc2lkZS1wYW5lbC1waW5uZWQtbGd7cGFkZGluZy1yaWdodDp2YXIoLS1jbHItbW9kYWwtbGctd2lkdGgpIWltcG9ydGFudH0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXhse3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXhsLXdpZHRoKSFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1tb2RhbC1ob3N0e292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLW1vZGFsLWhvc3QgLm1vZGFsLC5jbHItbW9kYWwtaG9zdCAubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGV9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRl''@;'; put 'put ''eDoxMDUwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkqMik7bWF4LXdpZHRoOjEwMCV9Lm1vZGFsIC5hbGVydCsubW9kYWwtaGVh''@;'; put 'put ''ZGVyLC5tb2RhbCAuYWxlcnQrLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFse3BhZGRpbmc6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLzIp''@;'; put 'put ''fX0ubW9kYWwgLm1vZGFsLWJvZHl7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5zaWRlLXBhbmVsIC5tb2RhbHtsZWZ0OmluaXRpYWw7cGFkZGluZzowO2hlaWdodDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVye2hlaWdodDoxMDAlfS5z''@;'; put 'put ''aWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVyIC5tb2RhbC1jb250ZW50e2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnNpZGUtcGFuZWwgLm1vZGFsIC5tb2RhbC1kaWFsb2d7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2hlaWdo''@;'; put 'put ''dDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbntpbnNldDowO3BhZGRpbmc6MH0uc2lkZS1wYW5lbCAubW9kYWwgLm1vZGFsLWJvZHktd3JhcHBlcntmbGV4OjEgMTttYXgtaGVpZ2h0OjEwMCV9Lm1vZGFsLWRpYWxvZ3twb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4''@;'; put 'put ''OjEwNTA7d2lkdGg6dmFyKC0tY2xyLW1vZGFsLW1kLXdpZHRoKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1tb2RhbC1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLWNsci1tb2RhbC1jb250ZW50LWJveC1zaGFkb3cpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbW9kYWwtYmctY29sb3IpO21heC13aWR0aDoxMDAlfS5tb2RhbC1kaWFsb2cubW9kYWwtc217d2lkdGg6dmFyKC0tY2xyLW1v''@;'; put 'put ''ZGFsLXNtLXdpZHRoKX0ubW9kYWwtZGlhbG9nLm1vZGFsLWxne3dpZHRoOnZhcigtLWNsci1tb2RhbC1sZy13aWR0aCl9Lm1vZGFsLWRpYWxvZy5tb2RhbC14bHt3aWR0aDp2YXIoLS1jbHItbW9kYWwteGwtd2lkdGgpfS5tb2RhbC1oZWFkZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXti''@;'; put 'put ''b3JkZXItYm90dG9tOm5vbmU7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgMH0ubW9kYWwtaGVhZGVyKy5tb2RhbC1mb290ZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSsubW9kYWwtZm9vdGVye3BhZGRpbmctdG9wOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0ubW9kYWwtaGVhZGVyIC5tb2RhbC10aXRsZSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxl''@;'; put 'put ''IC5tb2RhbC10aXRsZSwubW9kYWwtaGVhZGVyIC5zaWRlLXBhbmVsLXRpdGxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnNpZGUtcGFuZWwtdGl0bGV7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vj''@;'; put 'put ''dGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbjowfS5tb2RhbC1oZWFkZXIgLm1vZGFsLXRpdGxlOm5vdChbY2RzLXRleHRdKSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5tb2RhbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlciAuc2lkZS1w''@;'; put 'put ''YW5lbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuc2lkZS1wYW5lbC10aXRsZTpub3QoW2Nkcy10ZXh0XSl7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLW1vZGFsLXRpdGxl''@;'; put 'put ''LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZyl9Lm1vZGFs''@;'; put 'put ''LWhlYWRlciAuY2xvc2UsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UsLm1vZGFsLWhlYWRlciAucGlubmFibGUsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGV7Zm9udC1zaXplOmluaXRpYWw7bGluZS1oZWlnaHQ6aW5pdGlhbH0ubW9kYWwtaGVhZGVyIC5jbG9z''@;'; put 'put ''ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwt''@;'; put 'put ''aGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1tb2RhbC1jbG9zZS1jb2xvcik7aGVpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjbHIt''@;'; put 'put ''aWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBjbHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJs''@;'; put 'put ''ZTpob3ZlciBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlciBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1ob3Zlcil9Lm1vZGFsLWhlYWRlciAuY2xvc2U6aG92ZXI6YWN0aXZlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vz''@;'; put 'put ''c2libGUgLmNsb3NlOmhvdmVyOmFjdGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlcjphY3RpdmUgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2U6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlOmhvdmVyOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlcjphY3RpdmUgY2RzLWljb24sLm1vZGFsLWhlYWRlciAucGlubmFibGU6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxlOmhvdmVyOmFjdGl2''@;'; put 'put ''ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1hY3RpdmUpfS5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDttYXJnaW4tcmln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTthcHBlYXJhbmNlOm5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1vZGFsLXRpdGxlLXdyYXBwZXJ7ZmxleDoxfS5tb2RhbC10aXRsZS13cmFwcGVyIC5tb2RhbC10aXRsZSBoMywubW9kYWwtdGl0bGUtd3JhcHBlciAuc2lkZS1wYW5l''@;'; put 'put ''bC10aXRsZSBoM3ttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHktd3JhcHBlcnttYXgtaGVpZ2h0Ojcwdmg7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufS5tb2RhbC1ib2R5LXdyYXBwZXIgLm1vZGFsLWJvZHksLm1vZGFsLWJvZHktd3JhcHBlciAuc2lkZS1wYW5lbC1ib2R5e2Nv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0ubW9kYWwtYm9keS13cmFwcGVyPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHkt''@;'; put 'put ''d3JhcHBlcj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZvb3RlcntwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5tb2RhbC1mb290ZXIsLnNpZGUtcGFuZWwtZm9vdGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6ZmxleC1lbmQ7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9Lm1vZGFsLWZvb3RlciAuYnRuLC5zaWRlLXBhbmVsLWZvb3RlciAuYnRue21hcmdpbjowfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKXsu''@;'; put 'put ''bW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NTV2aH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFsLWJvZHktd3JhcHBlcnttYXgtaGVpZ2h0OjU1dmh9fS5tb2RhbC1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLW1vZGFsLWJhY2tkcm9wLWNvbG9yKTt6LWluZGV4OjEwNDB9Lm1vZGFsIC5tb2RhbC1uYXZ7ZGlzcGxheTpub25lfS5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbntwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwt''@;'; put 'put ''c2NyZWVuIC5tb2RhbC1kaWFsb2d7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjF9Lm1vZGFsLm1vZGFsLWZ1bGwtc2Ny''@;'; put 'put ''ZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MX0ubW9kYWwubW9kYWwtZnVsbC1zY3JlZW4gLm1vZGFsLWRpYWxvZyAubW9kYWwtYm9keS13cmFwcGVyLC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbiAu''@;'; put 'put ''bW9kYWwtZGlhbG9nIC5tb2RhbC1ib2R5e2ZsZXgtZ3JvdzoxO21heC1oZWlnaHQ6MTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1oZWFkZXItaGVpZ2h0OmNhbGMoNjAgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2xyLWhlYWRlci1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDAwKTstLWNsci1oZWFkZXItMi1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0t''@;'; put 'put ''Y2xyLWhlYWRlci0zLWJnLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtOTAwKTstLWNsci1oZWFkZXItNC1iZy1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTMtYmctY29sb3IpOy0tY2xyLWhlYWRlci01LWJnLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMy1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItaGVhZGVyLTYtYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvcik7LS1jbHItaGVhZGVyLTctYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci0yLWJnLWNvbG9yKTstLWNsci1oZWFkZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAp''@;'; put 'put ''Oy0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNsci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWhlYWRl''@;'; put 'put ''ci10aXRsZS1mb250LWZhbWlseTp2YXIoLS1jbHItZm9udCk7LS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1oZWFkZXItc2VhcmNoLW1hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItaGVhZGVyLXNl''@;'; put 'put ''YXJjaC1tYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1oZWFkZXItc2VhcmNoLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWhlYWRlci1zZWFyY2gtaW5wdXQtZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNs''@;'; put 'put ''ci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyKTstLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rp''@;'; put 'put ''b24tNDAwKTstLWNsci1oZWFkZXItc2VhcmNoLWJvcmRlci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCBIaWdobGlnaHQ7LS1jbHItaGVhZGVyLXNlYXJjaC1ib3JkZXItaG92ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lk''@;'; put 'put ''dGgtMTAwKSBzb2xpZCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApfWhlYWRlciwuaGVhZGVye2Rpc3BsYXk6ZmxleDtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvcik7aGVp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1oZWFkZXItaGVpZ2h0KTt3aGl0ZS1zcGFjZTpub3dyYXB9aGVhZGVyLmhlYWRlci0xLC5oZWFkZXIuaGVhZGVyLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTIsLmhlYWRlci5oZWFkZXItMntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMi1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci0zLC5oZWFkZXIuaGVhZGVyLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTMtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNCwuaGVhZGVyLmhlYWRlci00e2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWhlYWRlci00LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTUsLmhlYWRlci5oZWFkZXItNXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItNS1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci02LC5oZWFkZXIuaGVhZGVyLTZ7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItaGVhZGVyLTYtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNywuaGVhZGVyLmhlYWRlci03e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci03LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTgsLmhlYWRlci5oZWFkZXItOHtiYWNrZ3JvdW5kLWNvbG9yOiMwZjE3MWN9aGVh''@;'; put 'put ''ZGVyIC5icmFuZGluZywuaGVhZGVyIC5icmFuZGluZ3tkaXNwbGF5OmZsZXg7ZmxleDowIDAgYXV0bzttaW4td2lkdGg6Y2FsYygyMDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWhlYWRlciAuYnJhbmRpbmc+YSxo''@;'; put 'put ''ZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGluaywuaGVhZGVyIC5icmFuZGluZz5hLC5oZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGlua3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtw''@;'; put 'put ''YWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9aGVhZGVyIC5icmFuZGluZz5hOmZvY3VzLGhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLmJyYW5kaW5nPmE6Zm9jdXMsLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3Vze291dGxpbmUtb2Zmc2V0''@;'; put 'put ''OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9aGVhZGVyIC5icmFuZGluZyAuY2xyLWljb24saGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbixoZWFkZXIgLmJyYW5kaW5nIGNsci1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIC5jbHItaWNvbiwuaGVhZGVyIC5icmFuZGluZyBjZHMt''@;'; put 'put ''aWNvbiwuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbntmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX1oZWFkZXIgLmJyYW5kaW5nIC50aXRsZSwuaGVhZGVyIC5icmFuZGlu''@;'; put 'put ''ZyAudGl0bGV7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKTtmb250LWZhbWlseTp2YXIoLS1jbHItaGVhZGVyLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZh''@;'; put 'put ''cigtLWNsci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''O3RleHQtZGVjb3JhdGlvbjpub25lfWhlYWRlciAuc2V0dGluZ3MgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi10''@;'; put 'put ''ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9aGVhZGVyIC5zZXR0aW5ncyBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyBjbHIt''@;'; put 'put ''aWNvbiwuaGVhZGVyIC5zZXR0aW5ncyBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssaGVhZGVyIC5o''@;'; put 'put ''ZWFkZXItbmF2IC5uYXYtbGluayxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluaywuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5re2Rpc3BsYXk6aW5saW5lLWZsZXg7''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1j''@;'; put 'put ''b2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpob3ZlciwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLW5h''@;'; put 'put ''diAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpk''@;'; put 'put ''aXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpkaXNhYmxlZCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmRpc2Fi''@;'; put 'put ''bGVke2N1cnNvcjpub3QtYWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjZHMtaWNvbixoZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIGNkcy1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgY2xy''@;'; put 'put ''LWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2RzLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2xyLWljb24sLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNkcy1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbiwu''@;'; put 'put ''aGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjZHMtaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIGNsci1pY29ue2hl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQsaGVhZGVyIC5oZWFkZXItYWN0''@;'; put 'put ''aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0e2dh''@;'; put 'put ''cDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29u''@;'; put 'put ''LXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24t''@;'; put 'put ''dGV4dCBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNkcy1p''@;'; put 'put ''Y29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xyLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xy''@;'; put 'put ''LWljb257dHJhbnNmb3JtOm5vbmV9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYt''@;'; put 'put ''dGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0e2Rpc3BsYXk6''@;'; put 'put ''bm9uZX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHkt''@;'; put 'put ''Zm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1z''@;'; put 'put ''cGFjaW5nKX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cyxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZvY3VzLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXIt''@;'; put 'put ''bmF2IC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKX1oZWFkZXIgLmhlYWRlci1uYXYsLmhlYWRlciAuaGVhZGVyLW5hdntkaXNwbGF5OmZsZXg7Zmxl''@;'; put 'put ''eDowIDAgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9aGVhZGVyIC5oZWFkZXItbmF2OmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItbmF2OmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9aGVhZGVyIC5oZWFk''@;'; put 'put ''ZXItbmF2IC5uYXYtbGluazpmaXJzdC1vZi10eXBlLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBlLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGUsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBle3Bvc2l0''@;'; put 'put ''aW9uOnJlbGF0aXZlfWhlYWRlciAuc2V0dGluZ3MsaGVhZGVyIC5oZWFkZXItYWN0aW9ucywuaGVhZGVyIC5zZXR0aW5ncywuaGVhZGVyIC5oZWFkZXItYWN0aW9uc3tmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9aGVhZGVyIC5zZXR0aW5ncz46''@;'; put 'put ''bm90KC5kcm9wZG93bik6YmVmb3JlLGhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6YmVmb3JlLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+Om5vdCguZHJvcGRvd24pOmJlZm9yZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xlOmJlZm9yZSwuaGVhZGVyIC5zZXR0aW5ncz46bm90KC5kcm9wZG93bik6YmVmb3JlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz46bm90KC5kcm9wZG93bik6YmVmb3JlLC5oZWFkZXIgLmhlYWRl''@;'; put 'put ''ci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5k''@;'; put 'put ''cm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xle2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3Bvc2l0aW9uOnJlbGF0''@;'; put 'put ''aXZlO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xv''@;'; put 'put ''cil9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5oZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rp''@;'; put 'put ''b25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVke2N1cnNvcjpub3Qt''@;'; put 'put ''YWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1h''@;'; put 'put ''bmdsZV0pLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5v''@;'; put 'put ''dChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpu''@;'; put 'put ''b3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWlj''@;'; put 'put ''b24gY2xyLWljb246bm90KFtzaGFwZV49YW5nbGVdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRy''@;'; put 'put ''b3Bkb3duIC5kcm9wZG93bi1tZW51LC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tbWVudSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO21hcmdp''@;'; put 'put ''bi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2xlZnQ6YXV0bztyaWdodDowfWhlYWRlciAuc2VhcmNoLWJveCxoZWFkZXIgLnNlYXJjaCwuaGVhZGVyIC5zZWFyY2gtYm94LC5oZWFkZXIgLnNlYXJjaHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MCAwIGF1''@;'; put 'put ''dG87bWF4LXdpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX1oZWFkZXIgLnNlYXJjaC1ib3g6aG92ZXIsaGVhZGVyIC5zZWFyY2g6aG92ZXIsLmhl''@;'; put 'put ''YWRlciAuc2VhcmNoLWJveDpob3ZlciwuaGVhZGVyIC5zZWFyY2g6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyKX1oZWFkZXIgLnNlYXJjaC1ib3g6ZGlzYWJsZWQsaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWQsLmhlYWRlciAuc2VhcmNoLWJveDpkaXNhYmxl''@;'; put 'put ''ZCwuaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfWhlYWRlciAuc2VhcmNoLWJveDpiZWZvcmUsaGVhZGVyIC5zZWFyY2g6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaC1ib3g6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7''@;'; put 'put ''cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7dG9wOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bGVmdDphdXRvfWhlYWRlciAuc2VhcmNoLWJveD4ubmF2LWljb24saGVhZGVyIC5zZWFyY2g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaC1ib3g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaD4ubmF2LWljb257bWFyZ2luOjAgdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS00KSBjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLGhlYWRlciAuc2VhcmNoIGxhYmVsLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwsLmhlYWRlciAuc2VhcmNo''@;'; put 'put ''IGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctbGVmdDp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1nYXApO21hcmdpbi1sZWZ0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLW1hcmdpbi1sZWZ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtbWFyZ2luLXJp''@;'; put 'put ''Z2h0KTt0ZXh0LWFsaWduOmNlbnRlcn1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWw6YmVmb3JlLGhlYWRlciAuc2VhcmNoIGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2ggbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''O2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlM0UlM0Nk''@;'; put 'put ''ZWZzJTNFJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJTIzZmZmZmZmJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTNDdGl0bGUlM0VTZWFyY2glM0MlMkZ0aXRsZSUzRSUzQ2clMjBpZCUzRCUyMmljb25zJTIyJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBk''@;'; put 'put ''JTNEJTIyTTE1JTJDNC4wNUExMC45NSUyQzEwLjk1JTJDMCUyQzElMkMxJTJDNC4wNSUyQzE1JTJDMTElMkMxMSUyQzAlMkMwJTJDMSUyQzE1JTJDNC4wNU0xNSUyQzJBMTMlMkMxMyUyQzAlMkMxJTJDMCUyQzI4JTJDMTUlMkMxMyUyQzEzJTJDMCUyQzAlMkMwJTJDMTUlMkMyWiUyMiUyRiUz''@;'; put 'put ''RSUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwJTIwZCUzRCUyMk0zMy43MSUyQzMyLjI5bC03LjM3LTcuNDItMS40MiUyQzEuNDElMkM3LjM3JTJDNy40MmExJTJDMSUyQzAlMkMxJTJDMCUyQzEuNDItMS40MVolMjIlMkYlM0UlM0MlMkZnJTNFJTNDJTJGc3ZnJTNFKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1o''@;'; put 'put ''ZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbjowO21hcmdpbi1yaWdodDpjYWxjKC0xKih2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpICsgdmFyKC0t''@;'; put 'put ''Y2xyLWhlYWRlci1zZWFyY2gtZ2FwKSkpfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCBpbnB1dCxoZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dCwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsIGlucHV0LC5oZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dHtsaW5lLWhlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTkpO21hcmdpbjphdXRvfWhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF0sLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRd''@;'; put 'put ''e2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWlucHV0LWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3Bh''@;'; put 'put ''ZGRpbmc6MCAwIDAgY2FsYyh2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpICsgMip2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1nYXApKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250''@;'; put 'put ''LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIg''@;'; put 'put ''LnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLGhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGw6Zm9jdXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLGhlYWRlciAuc2Vh''@;'; put 'put ''cmNoIGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbCwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywuaGVhZGVy''@;'; put 'put ''IC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGw6Zm9jdXN7LXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMHMgNjAwMDAwcyxjb2xvciAwcyA2MDAwMDBzO3Ry''@;'; put 'put ''YW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwcyA2MDAwMDBzLGNvbG9yIDBzIDYwMDAwMHN9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLC5oZWFkZXIgLnNlYXJjaC1i''@;'; put 'put ''b3ggaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpob3ZlcixoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmhvdmVyLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpob3ZlciwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10''@;'; put 'put ''ZXh0XTpob3Zlcntib3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWhvdmVyKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVyIC5zZWFy''@;'; put 'put ''Y2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxle291dGxpbmU6MDtib3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWFjdGl2ZSl9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0''@;'; put 'put ''W3R5cGU9dGV4dF06Zm9jdXMsaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06YWN0aXZlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0''@;'; put 'put ''eXBlPXRleHRdOmZvY3VzLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06YWN0aXZle2JhY2tncm91bmQ6MCAwfWhlYWRlciAuYnJh''@;'; put 'put ''bmRpbmcrLnNlYXJjaCxoZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gtYm94LC5oZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaC1ib3h7cG9zaXRpb246cmVsYXRpdmV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7aGVhZGVyIC5zZWFy''@;'; put 'put ''Y2gtYm94LGhlYWRlciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhlYWRlciAuc2VhcmNoe2ZsZXg6MSAwIGF1dG87bWF4LXdpZHRoOm5vbmU7ZGlzcGxheTpub25lfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCxoZWFkZXIgLnNlYXJjaCBsYWJlbCwuaGVhZGVyIC5zZWFyY2gtYm94''@;'; put 'put ''IGxhYmVsLC5oZWFkZXIgLnNlYXJjaCBsYWJlbHtwYWRkaW5nOjB9fWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspe2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZv''@;'; put 'put ''bnQtd2VpZ2h0LXJlZ3VsYXIpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzpjYWxjKC0uMSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9YTpu''@;'; put 'put ''b3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGlua3tjb2xvcjp2YXIoLS1jbHItbGluay1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1h''@;'; put 'put ''Y3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazpob3Zlcntjb2xvcjp2YXIoLS1jbHItbGluay1ob3Zlci1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGlu''@;'; put 'put ''azpob3ZlciBjZHMtaWNvbixhOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hOm5vdCguYnRu''@;'; put 'put ''LC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItbGluay1hY3RpdmUtY29sb3IpfWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwu''@;'; put 'put ''YWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6YWN0aXZlIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6YWN0aXZlIGNsci1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZHtjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yKX1h''@;'; put 'put ''Om5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwu''@;'; put 'put ''Y2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZDpo''@;'; put 'put ''b3Zlcntjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yLWhvdmVyKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkOmhvdmVyIGNkcy1pY29uLGE6bm90KC5idG4s''@;'; put 'put ''Lm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQ6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcil9YS5saW5rLW5vcm1hbDpsaW5re2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1saW5rLWNvbG9yKX1hLmxpbmstaG92ZXJlZDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hLmxpbmstY2xpY2tlZDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YS5saW5rLXZpc2l0ZWQ6bGlua3tjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''bGluay12aXNpdGVkLWNvbG9yKX1hLmxpbmstdmlzaXRlZC1ob3ZlcjpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLXZpc2l0ZWQtY29sb3ItaG92ZXIpfS5uYXZ7ZGlzcGxheTpmbGV4O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtsaXN0LXN0eWxlLXR5cGU6bm9uZTthbGln''@;'; put 'put ''bi1pdGVtczpjZW50ZXI7bWFyZ2luOjA7d2lkdGg6MTAwJTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0O2dhcDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5uYXYgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5uYXYgLm5hdi1pdGVtLmFjdGl2ZT4ubmF2LWxpbmt7Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWFjdGl2ZS1jb2xvcik7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0fS5uYXYgLm5hdi1saW5re3Bvc2l0aW9uOnJlbGF0aXZlO2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtkaXNwbGF5OmlubGluZS1ibG9ja30ubmF2IC5uYXYtbGluay5idG57dGV4dC10cmFuc2Zvcm06bm9uZTttYXJnaW46MCAwIGNh''@;'; put 'put ''bGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXJhZGl1czowfS5uYXYgLm5hdi1saW5rLmRyb3Bkb3duLXRvZ2dsZXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9Lm5hdiAubmF2LWxpbmsuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29ue2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1uYXYtbGluay1jb2xvcil9Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5hdiAubmF2LWxpbms6Zm9jdXMsLm5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOmluaGVyaXR9Lm5hdiAubmF2LWxpbms6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW5hdi1hY3RpdmUtYmctY29s''@;'; put 'put ''b3IpfS5uYXYgLm5hdi1saW5rOmhvdmVyOmJlZm9yZSwubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWJvdHRvbSAuMnMgZWFzZS1pbn0ubmF2IC5uYXYtbGluazpob3ZlciwubmF2IC5uYXYtbGluazpmb2N1cywu''@;'; put 'put ''bmF2IC5uYXYtbGluazphY3RpdmUsLm5hdiAubmF2LWxpbmsuYWN0aXZle3RleHQtZGVjb3JhdGlvbjpub25lfS5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yKX0ubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5uYXYgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0ubmF2IC5uYXYtbGluay5uYXYt''@;'; put 'put ''aXRlbXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdWJuYXYtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LnN1Yi1uYXYsLnN1Ym5hdntkaXNwbGF5OmZsZXg7Ym94LXNo''@;'; put 'put ''YWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0O2JveC1zaGFkb3c6MCAtLjA1cmVtIDAgdmFyKC0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yLCBoc2woMTk4LCAwJSwg''@;'; put 'put ''ODAlKSkgaW5zZXQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN1Ym5hdi1iZy1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5zdWItbmF2IC5uYXYsLnN1Ym5hdiAubmF2''@;'; put 'put ''e2ZsZXg6MSAxIGF1dG87cGFkZGluZy1sZWZ0OjEuMnJlbX0uc3ViLW5hdiAubmF2LWl0ZW0sLnN1Yi1uYXYgLm5hdi1pdGVtIGEsLnN1Ym5hdiAubmF2LWl0ZW0sLnN1Ym5hdiAubmF2LWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZX0uc3ViLW5hdiBhc2lkZSwuc3VibmF2IGFzaWRle2Zs''@;'; put 'put ''ZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7cGFkZGluZzowIDEuMnJlbX0uc3ViLW5hdiBhc2lkZT46bGFzdC1jaGlsZCwuc3VibmF2IGFzaWRlPjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowO3Bh''@;'; put 'put ''ZGRpbmctcmlnaHQ6MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci12ZXJ0aWNhbC1uYXYtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1yaWdodC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTstLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFwc2VkLWNh''@;'; put 'put ''cmV0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY2hpbGQtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRl''@;'; put 'put ''bS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZv''@;'; put 'put ''bnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxl''@;'; put 'put ''Y3RlZC1hY3RpdmUpOy0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUpOy0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJh''@;'; put 'put ''Y2tncm91bmQtc2hhZGUtaG92ZXIpOy0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tdG9wLWxldmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24t''@;'; put 'put ''YWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LXRy''@;'; put 'put ''aWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCk7LS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItY29sbGFwc2VkLW1hcmdpbjptaXhpbnMuYmFzZWxpbmVQeCgzKTstLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLWZvbnQtd2VpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdmVydGljYWwtbmF2LWhlYWRlci1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdntkaXNwbGF5OmZsZXg7Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt3aWxsLWNoYW5nZTp3''@;'; put 'put ''aWR0aDt0cmFuc2l0aW9uOndpZHRoIC4ycyBlYXNlLWluLW91dH0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJp''@;'; put 'put ''Z2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTgpO292ZXJmbG93LXk6YXV0bztvdmVyZmxvdy14OmhpZGRlbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2s7ZmxleDowIDAgYXV0bztoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1oZWlnaHQpfS5jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudHtkaXNwbGF5OmZsZXg7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1h''@;'; put 'put ''Y3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcik7cG9zaXRpb246cmVsYXRpdmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNv''@;'; put 'put ''bHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3Ry''@;'; put 'put ''YW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNv''@;'; put 'put ''bnRlbnQuYWN0aXZlOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''di1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGlua3tmbGV4OjEgMSBhdXRvO3BhZGRpbmctbGVmdDowO21pbi13aWR0aDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257bWFyZ2luLWxlZnQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb24rLm5hdi10''@;'; put 'put ''ZXh0e3BhZGRpbmctbGVmdDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmsrLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rLmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''diAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rOmFjdGl2ZXtmb250LXdlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWZvbnQtd2VpZ2h0KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNoaWxkcmVue292ZXJmbG93LXk6aGlkZGVufS5jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2IC5uYXYtdHJpZ2dlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpO2JvcmRlcjowO2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6''@;'; put 'put ''ZSk7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSpjYWxjKDUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9''@;'; put 'put ''YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdy''@;'; put 'put ''b3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdiAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIg''@;'; put 'put ''Y2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3Zlcntjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWhvdmVyLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmUsLmNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV06YWN0aXZlLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdn''@;'; put 'put ''ZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1hY3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5j''@;'; put 'put ''bHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dl''@;'; put 'put ''ci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmds''@;'; put 'put ''ZS1kb3VibGVde2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tZGlzYWJsZWQtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciBj''@;'; put 'put ''ZHMtaWNvbnttYXJnaW4tcmlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5vbi1jb2xsYXBzZXtkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2IC5u''@;'; put 'put ''YXYtdHJpZ2dlci5vbi1jb2xsYXBzZSBjZHMtaWNvbnttYXJnaW46MH0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Y29sb3I6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpsZWZ0fS5jbHItdmVydGljYWwt''@;'; put 'put ''bmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRyaWdnZXItaWNvbntmbGV4LXNocmluazowO3dpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1zZWxmOmNlbnRlcjt0cmFuc2l0aW9uOmFs''@;'; put 'put ''bCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyLWljb257dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRy''@;'; put 'put ''aWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcik7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRleHQsLmNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0taGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1wYWRkaW5nKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2Zv''@;'; put 'put ''bnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpm''@;'; put 'put ''bGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKmNhbGMoNSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdGV4dCwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRleHR7ZmxleDoxIDEgYXV0bzt3aGl0''@;'; put 'put ''ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2Rpc3BsYXk6ZmxleDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKTtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1h''@;'; put 'put ''Y3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWhlYWRlcntwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLXBhZGRpbmcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMik7Zm9udC13ZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1oZWFkZXItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OjEuMzMzMzMzZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtfS5jbHItdmVydGljYWwtbmF2IC5uYXYtaWNvbntmbGV4OjAgMCB2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7''@;'; put 'put ''YWxpZ24tc2VsZjpjZW50ZXI7aGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmNsci12ZXJ0aWNhbC1uYXYgY2xyLXZlcnRpY2FsLW5hdi1ncm91cC1jaGlsZHJlbntkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2''@;'; put 'put ''IC5uYXYtYnRue2ZsZXg6MSAxIGF1dG87cGFkZGluZzowO21hcmdpbjowO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqY2FsYyg1KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSl9LmNsci12ZXJ0aWNhbC1uYXY+Lm5h''@;'; put 'put ''di1saW5rLC5jbHItdmVydGljYWwtbmF2IC5uYXYtY29udGVudD4ubmF2LWxpbmt7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXIgLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWljb24rLm5hdi1ncm91cC10ZXh0e3BhZGRpbmctbGVm''@;'; put 'put ''dDowfS5jbHItdmVydGljYWwtbmF2Lmhhcy1uYXYtZ3JvdXBzIC5uYXYtY29udGVudD4ubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cCAubmF2LWdyb3VwLXRleHQsLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cCAu''@;'; put 'put ''bmF2LWdyb3VwLXRyaWdnZXJ7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLXRvcC1sZXZlbC1mb250LXdlaWdodCl9LmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cC1jaGlsZHJlbiAubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFz''@;'; put 'put ''LWljb25zIC5uYXYtZ3JvdXAtY2hpbGRyZW4gLm5hdi1saW5re3BhZGRpbmc6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNoaWxkLXBhZGRpbmcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudHtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZX4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rOmhvdmVyfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaG92ZXItYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbms6YWN0''@;'; put 'put ''aXZlfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZTpob3Zlcn4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV+Lm5hdi1ncm91cC10cmlnZ2Vye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2Om5vdCguaXMtY29sbGFwc2VkKSAubmF2LWxpbmsrLm5hdi1ncm91cC10cmlnZ2Vye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3Zl''@;'; put 'put ''cmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWR7d2lkdGg6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgpO21pbi13aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aCk7bWF4''@;'; put 'put ''LXdpZHRoOmNhbGModmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgpICsgY2FsYygxNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpO2N1cnNvcjpwb2ludGVyfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1v''@;'; put 'put ''cGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtaWNvbnttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubWFpbi1jb250YWluZXI6''@;'; put 'put ''bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5re2ZsZXg6MCAwIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtbWluLXdp''@;'; put 'put ''ZHRoKX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rfi5uYXYtZ3JvdXAtdHJpZ2dl''@;'; put 'put ''cntmbGV4OjAgMCBjYWxjKHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFwc2VkLWNhcmV0LXNpemUpICsgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXJpZ2h0LW1hcmdpbikpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6''@;'; put 'put ''ZSkpKTtwb2ludGVyLWV2ZW50czpub25lfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtbGluaywubWFpbi1jb250YWluZXI6''@;'; put 'put ''bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLXRyaWdnZXJ7cGFkZGluZzowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJm''@;'; put 'put ''bG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlcntwYWRkaW5nLWxlZnQ6MH0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtj''@;'; put 'put ''bGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb24ubmF2LWdyb3VwLXRyaWdnZXItaWNvbntoZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7d2lkdGg6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW4tbGVmdDpjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1yaWdodDowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51''@;'; put 'put ''XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luOjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZs''@;'; put 'put ''b3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1ncm91cCwubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVu''@;'; put 'put ''dV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWxpbmt7ZGlzcGxheTpub25lfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29s''@;'; put 'put ''bGFwc2VkLmhhcy1pY29ucyAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2t9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25z''@;'; put 'put ''IC5uYXYtbGlua3tkaXNwbGF5OmZsZXh9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtZ3JvdXAtdGV4dCwu''@;'; put 'put ''bWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZC5oYXMtaWNvbnMgLm5hdi10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgs''@;'; put 'put ''MXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uY2xyLXZlcnRpY2FsLW5hdi5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYt''@;'; put 'put ''dHJpZ2dlcntvcmRlcjoyO21hcmdpbi10b3A6MH0uY2xyLXZlcnRpY2FsLW5hdi5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcDowO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRpdmlkZXItYm9yZGVy''@;'; put 'put ''LXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItY29sb3IpO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc2xpZGluZy1wYW5lbC10ZXh0LWNvbG9yOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItZ3JheS03MDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYmctY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1y''@;'; put 'put ''YWRpdXMtMTAwKTstLWNsci1yZXNwb25zaXZlLW5hdi1vdmVyZmxvdy1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LWhhbWJ1cmdlci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Ym9yZGVyLXJhZGl1cy0xMDApfS5jbHItbmF2LWNsb3Nle21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9yOnZhcigtLWNvbG9yKTstLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpfS5jbHItbmF2LWNsb3NlOmhv''@;'; put 'put ''dmVyLC5jbHItbmF2LWNsb3NlOmZvY3Vzey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcntkaXNwbGF5Om5vbmV9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFu''@;'; put 'put ''LC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YmFj''@;'; put 'put ''a2dyb3VuZDp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwt''@;'; put 'put ''YWxpZ246bWlkZGxlfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9w''@;'; put 'put ''OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2JvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIuYWN0aXZlPnNwYW57YmFja2dyb3VuZDow''@;'; put 'put ''IDB9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjphZnRlcntsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dHJhbnNmb3JtLW9yaWdpbjo5JTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAu''@;'; put 'put ''NnMgZWFzZX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uaGVhZGVyLW92ZXJmbG93LXRy''@;'; put 'put ''aWdnZXI+c3BhbiwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1yZXNwb25zaXZlLW5hdi10cmlnZ2VyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlk''@;'; put 'put ''ZGxlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuOmJlZm9yZSwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MH0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9wOmNhbGMoLTEqdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFue2JhY2tncm91bmQ6MCAwfS5oZWFkZXItb3Zl''@;'; put 'put ''cmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGVmdDpjYWxjKC0xKnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNCkpO3RyYW5zZm9ybS1vcmlnaW46LTMlO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2''@;'; put 'put ''ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk5MnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye2Rpc3BsYXk6''@;'; put 'put ''aW5saW5lLWJsb2NrO2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jbHItaGVhZGVyLWhlaWdodCk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1oZWlnaHQpO3BhZGRpbmc6MCAwIHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcjpmb2N1cywubWFpbi1jb250YWluZXIgLmhl''@;'; put 'put ''YWRlci1vdmVyZmxvdy10cmlnZ2VyOmZvY3Vze291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6aG92ZXIsLm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dl''@;'; put 'put ''cjpob3Zlcntjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3ItaG92ZXIpfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyOmRpc2FibGVkLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxv''@;'; put 'put ''d2VkfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjAgYXV0byAwIDA7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwMzk7aGVpZ2h0OjEwMHZoO3RyYW5zZm9ybTp0cmFu''@;'; put 'put ''c2xhdGUoY2FsYygtMSpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpmaXhlZDtpbnNldDowIDAgMCBhdXRvO2Jh''@;'; put 'put ''Y2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRleDoxMDM5O2hlaWdodDoxMDB2aDt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYsLm1haW4tY29udGFpbmVy''@;'; put 'put ''IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaH0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSBhc2lk''@;'; put 'put ''ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdntwYWRkaW5nLWxlZnQ6MDtnYXA6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtaXRlbSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTIgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtaXRlbXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWFyZ2luLXJpZ2h0OjB9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0xIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2''@;'; put 'put ''LWxldmVsLTIgLm5hdiAubmF2LWxpbmt7cGFkZGluZzp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tcGFkZGluZyk7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0''@;'; put 'put ''ZW0tY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5h''@;'; put 'put ''di1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEg''@;'; put 'put ''Lm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZv''@;'; put 'put ''cmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxp''@;'; put 'put ''bmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFj''@;'; put 'put ''dGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3Vi''@;'; put 'put ''LW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYg''@;'; put 'put ''Lm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5l''@;'; put 'put ''ciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6''@;'; put 'put ''aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxl''@;'; put 'put ''dmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmUsLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5l''@;'; put 'put ''ciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6''@;'; put 'put ''aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtib3gtc2hhZG93Om5v''@;'; put 'put ''bmV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyOm5vdCguYWN0aXZlKTpiZWZvcmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3Jl''@;'; put 'put ''LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXI6bm90KC5hY3RpdmUpOmJlZm9yZXtj''@;'; put 'put ''b250ZW50Om5vbmV9Lm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye2JvcmRlci1yaWdodDpub25lfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRy''@;'; put 'put ''aWdnZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNv''@;'; put 'put ''bG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmJyYW5kaW5ne21heC13aWR0''@;'; put 'put ''aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5ne3BhZGRpbmctbGVmdDowO21hcmdpbi1sZWZ0OmNhbGMoLTEq''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgLmNsci1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIC5sb2dvLC5t''@;'; put 'put ''YWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNkcy1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNsci1pY29ue2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIg''@;'; put 'put ''LmhlYWRlciAuYnJhbmRpbmcrLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItbmF2Ky5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLW5hdisuY2RrLXZpc3VhbGx5LWhpZGRlbisuaGVh''@;'; put 'put ''ZGVyLW92ZXJmbG93LXRyaWdnZXJ7bWFyZ2luLWxlZnQ6YXV0b30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3AsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3B7cG9zaXRp''@;'; put 'put ''b246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kKTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjEwMzh9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5j''@;'; put 'put ''bHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xy''@;'; put 'put ''LW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGlua3tmbGV4OjAgMCBhdXRvO29wYWNpdHk6MTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29s''@;'; put 'put ''b3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTEgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYu''@;'; put 'put ''Y2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAuZmEsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAu''@;'; put 'put ''aGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVu''@;'; put 'put ''dSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLmZhe2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi10ZXh0LC5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsg''@;'; put 'put ''Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgMCB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2hpdGUtc3BhY2U6bm9ybWFsO2NvbG9yOnZhcigtLWNsci1zbGlkaW5nLXBhbmVsLXRleHQtY29sb3IpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Zm9udC13ZWlnaHQ6NDAwfS5tYWlu''@;'; put 'put ''LWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0yIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ct''@;'; put 'put ''bWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAu''@;'; put 'put ''bmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6''@;'; put 'put ''YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2''@;'; put 'put ''LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2Jv''@;'; put 'put ''dHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3Jk''@;'; put 'put ''ZXItbGVmdCAuMnMgZWFzZS1pbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5o''@;'; put 'put ''ZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5l''@;'; put 'put ''ci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVu''@;'; put 'put ''dSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5r''@;'; put 'put ''LmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3Rp''@;'; put 'put ''dmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAu''@;'; put 'put ''aGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUg''@;'; put 'put ''LmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNv''@;'; put 'put ''cmF0aW9uOm5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1u''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdl''@;'; put 'put ''ci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10''@;'; put 'put ''ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlPi5uYXYtdGV4dHtjb2xvcjppbmhlcml0fS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItdmVydGljYWwt''@;'; put 'put ''bmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5Om5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmd7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbjt3aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt6LWluZGV4OjEwNDA7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmc+''@;'; put 'put ''Lm5hdi1saW5re292ZXJmbG93OmhpZGRlbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyAuY2xyLWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgLmxvZ28sLm1haW4tY29udGFpbmVy''@;'; put 'put ''Lm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1l''@;'; put 'put ''bnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWljb25bc2hhcGU9dm0tYnVnXSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbltzaGFwZT12bS1idWddLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIg''@;'; put 'put ''LmJyYW5kaW5nIC5jbHItdm13LWxvZ297YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFk''@;'; put 'put ''ZXIgLmJyYW5kaW5nIC50aXRsZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3Nle3Bvc2l0aW9uOmZpeGVk''@;'; put 'put ''O3RvcDowO3JpZ2h0OmF1dG87bGVmdDowO3otaW5kZXg6MTAzOTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5t''@;'; put 'put ''YWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFue2JhY2tncm91bmQ6MCAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1''@;'; put 'put ''cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3RyYW5zZm9ybS1vcmlnaW46OSU7dHJhbnNpdGlvbjp0cmFu''@;'; put 'put ''c2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcnt0''@;'; put 'put ''cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5v''@;'; put 'put ''cGVuLWhhbWJ1cmdlci1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbHItaGVhZGVyLWhlaWdodCkgKyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93''@;'; put 'put ''LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7dHJhbnNm''@;'; put 'put ''b3JtOnRyYW5zbGF0ZSgwKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0ye3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhl''@;'; put 'put ''ZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAu''@;'; put 'put ''NnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW57YmFja2dyb3VuZDowIDB9Lm1haW4tY29udGFpbmVyLm9w''@;'; put 'put ''ZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS05KTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0cmFuc2Zv''@;'; put 'put ''cm06cm90YXRlKDQ1ZGVnKX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFt''@;'; put 'put ''YnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Yi1uYXYuY2xyLW5h''@;'; put 'put ''di1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTE6YmVmb3Jle2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxl''@;'; put 'put ''dmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmt7d2lkdGg6MTAwJX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Bl''@;'; put 'put ''bi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0ye3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJh''@;'; put 'put ''bmRpbmd7bWF4LXdpZHRoOmNhbGMoMTQ0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6MDtvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTEsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKX0u''@;'; put 'put ''bWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2''@;'; put 'put ''LWxldmVsLTJ7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5ne3dpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lk''@;'; put 'put ''dGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246Zml4ZWQ7dG9wOjA7''@;'; put 'put ''cmlnaHQ6YXV0bztsZWZ0OjA7ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyhjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0ZXJ7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5h''@;'; put 'put ''di5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7d2lkdGg6Y2FsYygyODgqKDFy''@;'; put 'put ''ZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0''@;'; put 'put ''bzt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIu''@;'; put 'put ''b3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX19OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYmFkZ2UtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5KTstLWNsci1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLWluZm8tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItYmFkZ2UtaW5mby1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4pOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdyk7LS1jbHIt''@;'; put 'put ''YmFkZ2Utd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkKTstLWNsci1iYWRnZS1kYW5nZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3It''@;'; put 'put ''MTAwKTstLWNsci1iYWRnZS1ncmF5LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWdyYXkpOy0tY2xyLWJhZGdlLWdyYXktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1wdXJwbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXV0aWxpdHktdmlvbGV0KTstLWNsci1iYWRnZS1wdXJwbGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZSk7LS1jbHItYmFkZ2UtYmx1ZS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWJhZGdlLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0t''@;'; put 'put ''Y2xyLWJhZGdlLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZSk7LS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O3ZlcnRp''@;'; put 'put ''Y2FsLWFsaWduOm1pZGRsZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1iYWRnZS1iYWNrZ3JvdW5kLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KTtib3JkZXItcmFkaXVzOmNhbGMoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItYmFk''@;'; put 'put ''Z2UtY29sb3IpfS5iYWRnZTp2aXNpdGVke2NvbG9yOnZhcigtLWNsci1iYWRnZS1jb2xvcil9LmJhZGdlOmxpbmt7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYmFkZ2UtZ3JheS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IpfS5iYWRnZS5iYWRnZS1ncmF5''@;'; put 'put ''LC5iYWRnZS5iYWRnZS0xe2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWNvbG9yKX0uYmFkZ2UuYmFkZ2UtcHVycGxlLC5iYWRnZS5iYWRnZS0ye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1j''@;'; put 'put ''b2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcil9LmJhZGdlLmJhZGdlLWJsdWUsLmJhZGdlLmJhZGdlLTN7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWJsdWUtY29sb3IpfS5iYWRnZS5iYWRnZS1v''@;'; put 'put ''cmFuZ2UsLmJhZGdlLmJhZGdlLTR7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtbGlnaHQtYmx1ZSwuYmFkZ2UuYmFkZ2UtNXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRn''@;'; put 'put ''ZS1saWdodC1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcil9LmJhZGdlLmJhZGdlLWluZm97YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWluZm8tY29sb3IpfS5iYWRnZS5i''@;'; put 'put ''YWRnZS1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmJhZGdlLmJhZGdlLXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5iYWRnZSw6''@;'; put 'put ''cm9vdCAuYmFkZ2V7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIGNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgMH1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7LmJhZGdle3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSBjYWxjKDMq''@;'; put 'put ''KDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpIDB9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1mb250LWNvbG9yLWRhcms6dmFyKC0tY2xyLWNvbG9yLW5l''@;'; put 'put ''dXRyYWwtMTAwMCk7LS1jbHItbGFiZWwtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZGVmYXVsdC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtYmctaG92ZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1sYWJlbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1sYWJlbC1iZy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItbGFiZWwtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtZGlzYWJsZWQpOy0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1sYWJlbC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxl''@;'; put 'put ''ZCk7LS1jbHItbGFiZWwtZ3JheS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZ3JheS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtcHVycGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQpOy0tY2xyLWxhYmVsLXB1cnBsZS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1''@;'; put 'put ''ZSk7LS1jbHItbGFiZWwtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtb3JhbmdlLWJvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWxhYmVsLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxh''@;'; put 'put ''YmVsLWxpZ2h0LWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWUpOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1pbmZvLWJnLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy11dGlsaXR5LWJsdWUtdGludCk7LS1jbHItbGFiZWwtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItbGFiZWwt''@;'; put 'put ''c3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi10aW50KTstLWNsci1sYWJlbC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdXRpbGl0eS1ncmVlbik7LS1jbHItbGFiZWwtd2FybmluZy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3ctdGludCk7LS1jbHItbGFiZWwtd2FybmluZy1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFi''@;'; put 'put ''ZWwtd2FybmluZy1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93KTstLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQpOy0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQpOy0tY2xyLWxhYmVsLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5sYWJlbCxhLmxhYmVse2Zv''@;'; put 'put ''bnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01''@;'; put 'put ''KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSAwO3doaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''bGFiZWwtZm9udC1jb2xvci1saWdodCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmxhYmVsOmhhcyg+LmJhZGdlKSwubGFiZWw6aGFzKD5jZHMtaWNvbiksYS5sYWJlbDpoYXMoPi5iYWRnZSksYS5sYWJlbDpoYXMoPmNkcy1pY29uKXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMyl9LmxhYmVsIC5iYWRnZSwubGFiZWwgY2RzLWljb24sYS5sYWJlbCAuYmFkZ2UsYS5sYWJlbCBjZHMtaWNvbnttYXJnaW46MDt0ZXh0LWRlY29yYXRpb246bm9uZX0ubGFiZWw6aGFzKC5iYWRnZSksYS5sYWJlbDpoYXMoLmJhZGdlKXtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0z''@;'; put 'put ''KX0ubGFiZWwuY2xpY2thYmxlOm5vdCg6aGFzKC50ZXh0KSksYS5sYWJlbC5jbGlja2FibGU6bm90KDpoYXMoLnRleHQpKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5sYWJlbC5jbGlja2FibGU+LnRleHQsYS5sYWJlbC5jbGlja2FibGU+LnRleHR7dGV4dC1kZWNvcmF0aW9uOnVuZGVy''@;'; put 'put ''bGluZX0ubGFiZWw6dmlzaXRlZCxhLmxhYmVsOnZpc2l0ZWR7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQpfS5sYWJlbDpmb2N1cywubGFiZWw6aG92ZXIsLmxhYmVsOmFjdGl2ZSxhLmxhYmVsOmZvY3VzLGEubGFiZWw6aG92ZXIsYS5sYWJlbDphY3RpdmV7dGV4dC1k''@;'; put 'put ''ZWNvcmF0aW9uOm5vbmV9LmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTpob3ZlcixhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1ob3Zlci1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWxhYmVsLWhvdmVyLWNvbG9yKX0ubGFiZWwuY2xpY2thYmxlOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSxhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFi''@;'; put 'put ''ZWwtYmctYWN0aXZlLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX0ubGFiZWwubGFiZWwtZ3JheSwubGFiZWwubGFiZWwtMSxhLmxhYmVsLmxhYmVsLWdyYXksYS5sYWJlbC5sYWJlbC0xe2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVy''@;'; put 'put ''LXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLWdyYXktYmctY29sb3IpfS5sYWJlbC5sYWJlbC1ncmF5Pi5iYWRnZSxhLmxhYmVsLmxhYmVsLWdyYXk+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0t''@;'; put 'put ''Y2xyLWJhZGdlLWdyYXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWNvbG9yKX0ubGFiZWwubGFiZWwtcHVycGxlLC5sYWJlbC5sYWJlbC0yLGEubGFiZWwubGFiZWwtcHVycGxlLGEubGFiZWwubGFiZWwtMntib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0''@;'; put 'put ''aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLXB1cnBsZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1wdXJwbGU+LmJhZGdle2JhY2tncm91bmQ6dmFy''@;'; put 'put ''KC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcil9LmxhYmVsLmxhYmVsLWJsdWUsLmxhYmVsLmxhYmVsLTMsYS5sYWJlbC5sYWJlbC1ibHVlLGEubGFiZWwubGFiZWwtM3tib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13''@;'; put 'put ''aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1ibHVlLWJnLWNvbG9yKX0ubGFiZWwubGFiZWwtYmx1ZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1ibHVlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNs''@;'; put 'put ''ci1iYWRnZS1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtYmx1ZS1jb2xvcil9LmxhYmVsLmxhYmVsLW9yYW5nZSwubGFiZWwubGFiZWwtNCxhLmxhYmVsLmxhYmVsLW9yYW5nZSxhLmxhYmVsLmxhYmVsLTR7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgp''@;'; put 'put ''IHNvbGlkIHZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYmctY29sb3IpfS5sYWJlbC5sYWJlbC1vcmFuZ2U+LmJhZGdlLGEubGFiZWwubGFiZWwtb3JhbmdlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigt''@;'; put 'put ''LWNsci1iYWRnZS1vcmFuZ2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtY29sb3IpfS5sYWJlbC5sYWJlbC1saWdodC1ibHVlLC5sYWJlbC5sYWJlbC01LGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZSxhLmxhYmVsLmxhYmVsLTV7Ym9yZGVyOnZhcigtLWNsci1sYWJl''@;'; put 'put ''bC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1saWdodC1ibHVlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbGFiZWwtbGlnaHQtYmx1ZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLWxpZ2h0LWJsdWU+LmJhZGdlLGEubGFiZWwubGFiZWwtbGln''@;'; put 'put ''aHQtYmx1ZT4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtY29sb3IpfS5sYWJlbC5sYWJlbC1pbmZvLGEubGFiZWwubGFiZWwtaW5mb3tiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJl''@;'; put 'put ''bC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWluZm8tYm9yZGVyLWNvbG9yKX0ubGFiZWwubGFiZWwtaW5mbz4uYmFkZ2UsYS5sYWJl''@;'; put 'put ''bC5sYWJlbC1pbmZvPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtaW5mby1jb2xvcil9LmxhYmVsLmxhYmVsLXN1Y2Nlc3MsYS5sYWJlbC5sYWJlbC1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVs''@;'; put 'put ''LXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1sYWJlbC1zdWNjZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5sYWJlbC5sYWJlbC1zdWNjZXNzPi5i''@;'; put 'put ''YWRnZSxhLmxhYmVsLmxhYmVsLXN1Y2Nlc3M+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0ubGFiZWwubGFiZWwtd2FybmluZyxhLmxhYmVsLmxhYmVsLXdhcm5pbmd7YmFja2dy''@;'; put 'put ''b3VuZDp2YXIoLS1jbHItbGFiZWwtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC13YXJuaW5nLWJvcmRlci1jb2xvcil9Lmxh''@;'; put 'put ''YmVsLmxhYmVsLXdhcm5pbmc+LmJhZGdlLGEubGFiZWwubGFiZWwtd2FybmluZz4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfS5sYWJlbC5sYWJlbC1kYW5nZXIsYS5sYWJlbC5s''@;'; put 'put ''YWJlbC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJv''@;'; put 'put ''cmRlci1jb2xvcil9LmxhYmVsLmxhYmVsLWRhbmdlcj4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1kYW5nZXI+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmxhYmVsPi5iYWRnZSxhLmxh''@;'; put 'put ''YmVsPi5iYWRnZXttYXJnaW46MH0ubGFiZWwuZGlzYWJsZWQsLmxhYmVsOmRpc2FibGVkLGEubGFiZWwuZGlzYWJsZWQsYS5sYWJlbDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1j''@;'; put 'put ''b2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmxhYmVsLmRpc2FibGVkIC5iYWRnZSwubGFiZWw6ZGlzYWJsZWQgLmJhZGdlLGEubGFiZWwuZGlzYWJsZWQgLmJhZGdl''@;'; put 'put ''LGEubGFiZWw6ZGlzYWJsZWQgLmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yKX1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7LmxhYmVsLGEubGFiZWx7dmVydGljYWwtYWxpZ246Ym90dG9tfX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1wcm9ncmVz''@;'; put 'put ''cy1kZWZhdWx0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTE6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFk''@;'; put 'put ''ZSk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTM6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nKTstLWNsci1wcm9ncmVzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXNoYWRlKTstLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5wcm9ncmVzcywucHJvZ3Jlc3Mtc3RhdGlje2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdp''@;'; put 'put ''bjowO292ZXJmbG93OmhpZGRlbjttYXgtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJX0ucHJvZ3Jlc3M+cHJvZ3Jlc3N7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1v''@;'; put 'put ''ei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYmctY29sb3IpO2JvcmRlcjow''@;'; put 'put ''O2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpfS5wcm9ncmVzcz5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcil9LnByb2dyZXNzPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi1tb3otcHJvZ3Jlc3MtYmFyey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFy''@;'; put 'put ''YW5jZTpub25lO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lfS5wcm9ncmVzcz5wcm9ncmVzc1t2YWx1ZT0iMCJdOjot''@;'; put 'put ''d2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtYmFye2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcil9''@;'; put 'put ''LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWlubmVyLWVsZW1lbnR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXBy''@;'; put 'put ''b2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW47dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW47Ym9yZGVyLXJhZGl1czowfS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnBy''@;'; put 'put ''b2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLndhcm5pbmc+cHJvZ3Jlc3N7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dyZXNzLndhcm5pbmc+cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1w''@;'; put 'put ''cm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5sYWJlbGVkLC5wcm9ncmVzcy1zdGF0aWMubGFiZWxlZHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1wcm9ncmVzcy1sYWJlbC1jb2xvcil9LnByb2dyZXNzLmxhYmVsZWQ+c3BhbiwucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+c3BhbntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7bWFyZ2luLXRvcDowO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MuY29tcGFjdDpub3QoLmxhYmVsZWQpLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdDpub3QoLmxhYmVsZWQpe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5wcm9ncmVzcy5jb21wYWN0LmxhYmVsZWQ+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdC5sYWJlbGVkPi5wcm9ncmVzcy1tZXRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1mYWRlezAle29wYWNpdHk6MX10b3tv''@;'; put 'put ''cGFjaXR5OjB9fS5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlPnByb2dyZXNzW3ZhbHVlPSIxMDAiXSwucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZT5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0rc3BhbnthbmltYXRpb246Y2xyLXByb2dyZXNzLWZhZGUgLjNzIGxpbmVhciAuNXMgZm9yd2FyZHN9LnByb2dy''@;'; put 'put ''ZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzcywucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3N7dHJhbnNpdGlvbjpjb2xvciAuMXMgZWFzZS1vdXQgMXN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3M6''@;'; put 'put ''Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3M7dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1jb2xvciAuMXMgZWFzZS1vdXQgLjNzfS5wcm9n''@;'; put 'put ''cmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXstd2Via2l0LXRyYW5zaXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9LnBy''@;'; put 'put ''b2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXIsLnByb2dyZXNzLmZsYXNoPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcnstbW96LXRyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVhc2Utb3V0IC4zczt0cmFu''@;'; put 'put ''c2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3N9LnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXXtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1''@;'; put 'put ''ZT0iMTAwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZS5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0sLnByb2dyZXNzLnByb2dyZXNzLWZhZGUuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdK3NwYW57YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1mYWRlIC42cyBs''@;'; put 'put ''aW5lYXIgMXMgZm9yd2FyZHN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAwIl17Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX0ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LXdlYmtpdC1wcm9ncmVzcy12''@;'; put 'put ''YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0y''@;'; put 'put ''KX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1sb29wZXJ7MCV7bGVmdDotMTAwJX10b3tsZWZ0OjEwMCV9fS5wcm9ncmVzcy5sb29we3Bvc2l0aW9uOnJlbGF0aXZlfS5wcm9ncmVzcy5sb29wPnByb2dyZXNze292ZXJmbG93OmhpZGRlbjtjb2xvcjp0cmFuc3BhcmVudH0ucHJvZ3Jlc3MubG9v''@;'; put 'put ''cD5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wOmFmdGVye2FuaW1hdGlv''@;'; put 'put ''bjpjbHItcHJvZ3Jlc3MtbG9vcGVyIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO2NvbnRlbnQ6IiAiO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO3dp''@;'; put 'put ''ZHRoOjUwJX0ucHJvZ3Jlc3MubG9vcC5kYW5nZXI6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5sb29wLndhcm5pbmc6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTMpfS5w''@;'; put 'put ''cm9ncmVzcy5sb29wLnN1Y2Nlc3M6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy1zdGF0aWN7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOjA7d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcnti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1kZWZh''@;'; put 'put ''dWx0LWNvbG9yKTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2NvbnRlbnQ6IiAifS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jl''@;'; put 'put ''c3MtbWV0ZXJbZGF0YS12YWx1ZT0iMiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzIl06YmVmb3Jle3dpZHRoOjIlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0''@;'; put 'put ''YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjciXTpiZWZvcmV7d2lkdGg6NSV9''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEwIl06YmVm''@;'; put 'put ''b3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjExIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEyIl06YmVmb3Jle3dpZHRoOjEwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRh''@;'; put 'put ''LXZhbHVlPSIxMyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRl''@;'; put 'put ''cltkYXRhLXZhbHVlPSIxNiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNyJdOmJlZm9yZXt3aWR0aDoxNSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRp''@;'; put 'put ''Yz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjEiXTpiZWZvcmUsLnByb2dyZXNz''@;'; put 'put ''LXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjIiXTpiZWZvcmV7d2lkdGg6MjAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjIzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI0Il06''@;'; put 'put ''YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9''@;'; put 'put ''IjI3Il06YmVmb3Jle3dpZHRoOjI1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1t''@;'; put 'put ''ZXRlcltkYXRhLXZhbHVlPSIzMCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMiJdOmJlZm9yZXt3aWR0aDozMCV9LnByb2dyZXNzLXN0''@;'; put 'put ''YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzUiXTpiZWZvcmUsLnByb2dy''@;'; put 'put ''ZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzciXTpiZWZvcmV7d2lkdGg6MzUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjM4''@;'; put 'put ''Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjM5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFs''@;'; put 'put ''dWU9IjQxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQyIl06YmVmb3Jle3dpZHRoOjQwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVz''@;'; put 'put ''cy1tZXRlcltkYXRhLXZhbHVlPSI0NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5w''@;'; put 'put ''cm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NyJdOmJlZm9yZXt3aWR0aDo0NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDkiXTpiZWZvcmUsLnBy''@;'; put 'put ''b2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTIiXTpiZWZv''@;'; put 'put ''cmV7d2lkdGg6NTAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjUzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEt''@;'; put 'put ''dmFsdWU9IjU1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU3Il06YmVmb3Jle3dpZHRoOjU1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9n''@;'; put 'put ''cmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGlj''@;'; put 'put ''Pi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MiJdOmJlZm9yZXt3aWR0aDo2MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjMiXTpiZWZvcmUs''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjYiXTpi''@;'; put 'put ''ZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjciXTpiZWZvcmV7d2lkdGg6NjUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjY4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2Rh''@;'; put 'put ''dGEtdmFsdWU9IjY5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9IjcyIl06YmVmb3Jle3dpZHRoOjcwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NyJdOmJlZm9yZXt3aWR0aDo3''@;'; put 'put ''NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODAi''@;'; put 'put ''XTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODIiXTpiZWZvcmV7d2lkdGg6ODAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''W2RhdGEtdmFsdWU9IjgzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyW2RhdGEtdmFsdWU9Ijg2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg3Il06YmVmb3Jle3dpZHRoOjg1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OCJdOmJlZm9yZSwucHJvZ3Jlc3Mt''@;'; put 'put ''c3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MSJdOmJlZm9yZSwucHJv''@;'; put 'put ''Z3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MiJdOmJlZm9yZXt3aWR0aDo5MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''OTQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTYiXTpiZWZvcmV7d2lkdGg6OTUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9Ijk3Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk5Il06YmVmb3Jle3dpZHRoOjk4JX0ucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxMDAiXTpiZWZvcmV7d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+LnByb2dyZXNzLW1ldGVye3JpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5wcm9ncmVzcy1zdGF0aWMuc3VjY2Vzcz4ucHJvZ3Jlc3Mt''@;'; put 'put ''bWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3Mtc3RhdGljLndhcm5pbmc+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dy''@;'; put 'put ''ZXNzLXN0YXRpYy5kYW5nZXI+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LmNhcmQtYmxvY2sgLnByb2dyZXNzLC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWMsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcywu''@;'; put 'put ''Y2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpY3toZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7bWFyZ2luOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkgMCAwfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy50b3AsLmNhcmQt''@;'; put 'put ''YmxvY2sgLnByb2dyZXNzLXN0YXRpYy50b3AsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy50b3AsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy1zdGF0aWMudG9we21hcmdpbi10b3A6MDt0b3A6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIHZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzLCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSl9LmNhcmQtYmxvY2sgLnByb2dyZXNzPnByb2dyZXNz''@;'; put 'put ''LC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyLC5jYXJkLWZvb3RlciAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlfS5wcm9ncmVzcy1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MtYmxvY2s+KntmbGV4OjAgMCBhdXRvO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucHJvZ3Jlc3MtYmxvY2s+Omxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDow''@;'; put 'put ''fS5wcm9ncmVzcy1ibG9jaz5sYWJlbCwucHJvZ3Jlc3MtYmxvY2s+c3BhbnttYXgtd2lkdGg6MzMlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MsLnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1zdGF0aWN7ZmxleDowIDEgYXV0b30ucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLWdyb3Vwe2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6YXV0bztmbGV4OjAgMSBhdXRvO2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MtZ3JvdXAgLmNsci1yb3d7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3Mt''@;'; put 'put ''bGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1ncm91cCAuY2xyLXJvdz5bY2xhc3MqPWNsci1jb2wtXXtwYWRkaW5nLWxlZnQ6MDtw''@;'; put 'put ''YWRkaW5nLXJpZ2h0OjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2Nre21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtwYWRkaW5nOjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLWJsb2NrIC5wcm9n''@;'; put 'put ''cmVzcy1ibG9jaz5sYWJlbHttYXgtd2lkdGg6MzMlfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWN7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7''@;'; put 'put ''bWFyZ2luLXRvcDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcz4ucHJvZ3Jlc3MtbWV0ZXIsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+cHJvZ3Jl''@;'; put 'put ''c3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5wcm9ncmVzcy1ibG9jaz5sYWJlbCw6cm9vdCAucHJvZ3Jlc3MtYmxvY2s+''@;'; put 'put ''bGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc3Bpbm5lci1kZWZhdWx0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCk7LS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTstLWNsci1zcGlubmVy''@;'; put 'put ''LXNtYWxsLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTstLWNsci1zcGlubmVyLWluc2lkZS1idXR0b24tc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLXNwaW5uZXItbWVkaXVtLXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13''@;'; put 'put ''aWR0aC00MDApOy0tY2xyLXNwaW5uZXItc21hbGwtc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7LS1jbHItc3Bpbm5lci1maWxsLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGUpOy0t''@;'; put 'put ''Y2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50KTstLWNsci1zcGlubmVyLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1zcGlubmVyLWZpbGwt''@;'; put 'put ''aW52ZXJzZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludCk7LS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0zMDApOy0tY2xyLXNwaW5uZXItbWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNil9LnNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1''@;'; put 'put ''bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdl''@;'; put 'put ''aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2FuaW1hdGlvbjpzcGluIDFzIGxpbmVhciBpbmZp''@;'; put 'put ''bml0ZTttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nOjA7dGV4dC1pbmRlbnQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5zcGlubmVyOmFmdGVye2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNw''@;'; put 'put ''aW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NsaXAtcGF0aDplbGxpcHNlKDEwMCUgNTMuNSUg''@;'; put 'put ''YXQgMCAwKTtib3JkZXI6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zdHJva2Utd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zcGlubmVyLWZpbGwtY29sb3IpO2JvcmRlci1yaWdodC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRp''@;'; put 'put ''dXM6dmFyKC0tY2xyLXNwaW5uZXItYm9yZGVyLXJhZGl1cyl9LnNwaW5uZXI6YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlu''@;'; put 'put ''bmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2JvcmRlcjp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aCkgc29saWQgdmFyKC0tY2xyLXNwaW5uZXItZmls''@;'; put 'put ''bC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzKX0uc3Bpbm5lci5zcGlubmVyLW1ke2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi1oZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSl9LnNwaW5uZXIuc3Bpbm5lci1tZDpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1tZDphZnRlcntoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO3dp''@;'; put 'put ''ZHRoOnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc3Ryb2tlLXdp''@;'; put 'put ''ZHRoKX0uc3Bpbm5lci5zcGlubmVyLWlubGluZSwuc3Bpbm5lci5zcGlubmVyLXNte2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO21p''@;'; put 'put ''bi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKX0uc3Bpbm5lci5zcGlubmVyLWlubGluZTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YWZ0ZXIsLnNwaW5uZXIuc3Bpbm5lci1zbTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1zbTphZnRlcntoZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1z''@;'; put 'put ''cGlubmVyLXNtYWxsLXN0cm9rZS13aWR0aCl9LnNwaW5uZXIuc3Bpbm5lci1pbmxpbmV7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207bWFyZ2luLXJpZ2h0OnZhcigtLWNsci1zcGlubmVyLW1hcmdpbi1yaWdodCl9LnNwaW5uZXIuc3Bpbm5lci1pbnZlcnNlOmJlZm9yZXtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yKX0uc3Bpbm5lci5zcGlubmVyLWludmVyc2U6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1zcGlubmVyLWZpbGwtaW52ZXJzZS1jb2xvcik7Ym9yZGVyLXJpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1i''@;'; put 'put ''b3R0b20tY29sb3I6dHJhbnNwYXJlbnR9LnNwaW5uZXIuc3Bpbm5lci1uZXV0cmFsLTA6YmVmb3Jle2JvcmRlci1jb2xvcjojMDAwfS5zcGlubmVyLnNwaW5uZXItbmV1dHJhbC0wOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItc3Bpbm5lci1maWxsLWNvbG9yKTtib3JkZXItcmlnaHQt''@;'; put 'put ''Y29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudH0uc3Bpbm5lci5zcGlubmVyLWNoZWNre2FuaW1hdGlvbjpub25lO21hc2s6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdC''@;'; put 'put ''b3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53''@;'; put 'put ''My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMjBmb2N1c2FibGUlM0QlMjJmYWxzZSUyMiUyMGFyaWEtaGlkZGVuJTNEJTIydHJ1ZSUyMiUyMHJvbGUlM0QlMjJpbWclMjIlM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzc0NzQ3NCUyMiUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xMy43MiUyQzI3LjY5JTJDMy4yOSUyQzE3LjI3YTElMkMxJTJDMCUyQzAlMkMxJTJDMS40MS0xLjQxbDklMkM5TDMxLjI5JTJDNy4yOWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNDElMkMxLjQxWiUyMiUzRSUzQyUyRnBhdGglM0UlM0MlMkZz''@;'; put 'put ''dmclM0UpOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uc3Bpbm5lci5zcGlubmVyLWNoZWNrOmFmdGVyLC5zcGlubmVyLnNwaW5uZXItY2hlY2s6''@;'; put 'put ''YmVmb3Jle2JvcmRlcjowfS5idG4gLnNwaW5uZXJ7bWFyZ2luLXJpZ2h0OjA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNyl9LmJ0biAuc3Bpbm5lcjpiZWZvcmUsLmJ0biAuc3Bpbm5lcjphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4t''@;'; put 'put ''d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItaW5zaWRlLWJ1dHRvbi1zdHJva2Utd2lkdGgpfS5idG4taWNvbjpub3QoLmJ0bi1zbSkgLnNwaW5uZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciAuc3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVyOmJlZm9yZSwuY2xyLXRy''@;'; put 'put ''ZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVyOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTcpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoKX1Aa2V5ZnJhbWVzIHNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fTpyb290IFtjZHMtdGhlbWVdey0tY2xy''@;'; put 'put ''LXRhYmxlLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItdGFibGUtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLW5vYm9yZGVyLWJvcmRlcndpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMCk7LS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTQpOy0t''@;'; put 'put ''Y2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwt''@;'; put 'put ''Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMSk7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci10YWJsZS1oZWFkZXItY2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRhYmxlLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItdGhlYWQtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRp''@;'; put 'put ''bnQpOy0tY2xyLXRhYmxlLWhlYWRlci1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZS1mb290ZXItYm9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUt''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1j''@;'; put 'put ''b2xvci00MDApOy0tY2xyLXRhYmxlLW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDAgMCAwOy0tY2xyLXRoZWFkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGFibGUtc21hbGxwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''NCk7LS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci10YWJsZS1mb250''@;'; put 'put ''c2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci10YWJsZS1saW5laGVpZ2h0Om1peGlucy5iYXNlbGluZVB4KDE0KTstLWNsci10YWJsZS1jZWxscGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLXRhYmxlLWNvbXBh''@;'; put 'put ''Y3Qtcm93LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGluZzpjYWxjKCAodmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodCkgLSB2YXIoLS1jbHItdGFibGUtbGluZWhlaWdodCkpICogLjUgKX0udGFibGV7''@;'; put 'put ''Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxlLW1hcmdpbik7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGgsLnRhYmxlIHRke2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13''@;'; put 'put ''aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlcm93LWJvcmRlcmNvbG9yKTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOnRvcH0udGFibGUg''@;'; put 'put ''dGgubGVmdCwudGFibGUgdGQubGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRhYmxlIHRoLmxlZnQ6Zmlyc3QtY2hpbGQsLnRhYmxlIHRkLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LnRhYmxlIHRoLnJpZ2h0LC50YWJsZSB0ZC5yaWdodHt0''@;'; put 'put ''ZXh0LWFsaWduOnJpZ2h0fS50YWJsZSB0ZHttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2ZvbnQtc2l6ZTp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXdlaWdodCk7bGlu''@;'; put 'put ''ZS1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0udGFibGUgdGh7Y29sb3I6dmFyKC0tY2xyLXRoZWFkLWNvbG9yKTtmb250LXNpemU6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0''@;'; put 'put ''KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXIt''@;'; put 'put ''Ym90dG9tLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wOjAgbm9uZX0udGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowIG5vbmV9LnRhYmxl''@;'; put 'put ''IHRib2R5K3Rib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LnRhYmxlIHRoZWFkIHRoOmZpcnN0LWNoaWxke2JvcmRlci1y''@;'; put 'put ''YWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUgdGhlYWQgdGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMp''@;'; put 'put ''fS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hp''@;'; put 'put ''bGQgdGQ6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZS1jb21wYWN0IHRoLC50YWJsZS1jb21wYWN0IHRke21pbi1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qt''@;'; put 'put ''cm93LWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmcpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aGVhZCB0aHtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7ZGlzcGxheTpub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHtib3JkZXItYm90dG9t''@;'; put 'put ''OjA7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRkLC50''@;'; put 'put ''YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0ZDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJp''@;'; put 'put ''Z2h0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNo''@;'; put 'put ''aWxkIHRke2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNo''@;'; put 'put ''aWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0''@;'; put 'put ''aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGls''@;'; put 'put ''ZCB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNl''@;'; put 'put ''bGxyYWRpdXMpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRl''@;'; put 'put ''ci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtbm9ib3JkZXJ7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowfS50YWJsZS50YWJs''@;'; put 'put ''ZS1ub2JvcmRlciB0aHtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItdG9wOjAgbm9uZTtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aGVhZCB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIgdGhlYWQg''@;'; put 'put ''dGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjB9LnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoLC50YWJsZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItcmFkaXVzOjAhaW1wb3J0YW50fS50YWJsZS50YWJsZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIg''@;'; put 'put ''dGQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci10b29sdGlw''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktZm9udC13ZWlnaHQpfS50b29sdGlwe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDtvdmVyZmxvdzp2aXNpYmxlfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnR7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eTowO3RyYW5zaXRp''@;'; put 'put ''b246b3BhY2l0eSAuM3MgbGluZWFyO3doaXRlLXNwYWNlOm5vcm1hbDt6LWluZGV4OjEwNTB9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudDphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDotMjBweDtjb250ZW50OiIiO3otaW5kZXg6LTF9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudCBs''@;'; put 'put ''aXtjb2xvcjppbmhlcml0fS50b29sdGlwOmhvdmVyPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXA6Zm9jdXM+LnRvb2x0aXAtY29udGVudHt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxfS50b29sdGlwOmhvdmVyPi50b29sdGlwLWNvbnRlbnQ6ZW1wdHksLnRvb2x0aXA6Zm9jdXM+LnRv''@;'; put 'put ''b2x0aXAtY29udGVudDplbXB0eXt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjB9LnRvb2x0aXA6Zm9jdXN7b3V0bGluZTowfS50b29sdGlwOmZvY3VzPjpmaXJzdC1jaGlsZHtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0''@;'; put 'put ''KTtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSl9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3Atcmln''@;'; put 'put ''aHR7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNv''@;'; put 'put ''bG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEwMCUgNTAlO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJn''@;'; put 'put ''aW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwIC50''@;'; put 'put ''b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXIt''@;'; put 'put ''bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9t''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC10b3AtbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNv''@;'; put 'put ''bnRlbnQudG9vbHRpcC10b3AtbGVmdHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250''@;'; put 'put ''LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIDUwJSAxMDAlIGF1dG87Ym9yZGVyLWJvdHRv''@;'; put 'put ''bS1yaWdodC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtdG9wLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVu''@;'; put 'put ''dC50b29sdGlwLXRvcC1sZWZ0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7cmlnaHQ6MDt0b3A6YXV0bztsZWZ0OmF1dG87Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXJpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29s''@;'; put 'put ''dGlwLWJvdHRvbS1yaWdodHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdo''@;'; put 'put ''dCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDoxMDAlIGF1dG8gYXV0byA1MCU7Ym9yZGVyLXRvcC1sZWZ0LXJh''@;'; put 'put ''ZGl1czowO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlw''@;'; put 'put ''LWJvdHRvbS1yaWdodDpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2xlZnQ6MDtib3R0b206YXV0bztyaWdodDphdXRvO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJv''@;'; put 'put ''dHRvbS1sZWZ0e21hcmdpbjowO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItdG9v''@;'; put 'put ''bHRpcC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0KTtsaW5l''@;'; put 'put ''LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjEwMCUgNTAlIGF1dG8gYXV0bztib3JkZXItdG9wLXJpZ2h0LXJhZGl1czow''@;'; put 'put ''O21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9t''@;'; put 'put ''LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtyaWdodDowO2JvdHRvbTphdXRvO2xlZnQ6YXV0bzt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUp''@;'; put 'put ''IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1yaWdodHtwb3NpdGlvbjph''@;'; put 'put ''YnNvbHV0ZTtpbnNldDo1MCUgYXV0byBhdXRvIDEwMCU7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRv''@;'; put 'put ''b2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi1sZWZ0OmNhbGModmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXJpZ2h0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7Ym90dG9tOmF1dG87cmlnaHQ6YXV0bztsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IpO2JvcmRlci1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1sZWZ0e3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjUwJSAxMDAlIGF1dG8gYXV0bztt''@;'; put 'put ''YXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3Ip''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO21hcmdpbi1yaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpKX0udG9vbHRpcC50b29sdGlwLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6''@;'; put 'put ''MDtib3R0b206YXV0bztsZWZ0OmF1dG87cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWxlZnQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJh''@;'; put 'put ''bnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC14cz4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC14c3t3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE0KX0udG9vbHRpcC50b29sdGlwLXNtPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRv''@;'; put 'put ''b2x0aXAtY29udGVudC50b29sdGlwLXNte3dpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcC50b29sdGlwLW1kPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLW1ke3dpZHRoOmNhbGMoMjQwKigxcmVt''@;'; put 'put ''L3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcC50b29sdGlwLWxnPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWxne3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcD4uYnRuKy50b29s''@;'; put 'put ''dGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtdG9wLWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi10b3A6''@;'; put 'put ''Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1yaWdodD4uYnRuKy50b29sdGlwLWNvbnRlbnR7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pKX0udG9vbHRpcD4uY2xyLWljb257bWFyZ2luLXJpZ2h0OjB9LnRvb2x0aXA+c3Zne3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAtdHJpZ2dlcjpm''@;'; put 'put ''b2N1cysudG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6dmlzaWJsZX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1mb3Jtcy1iYXNlbGluZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLWZvcm1zLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWZvcm0t''@;'; put 'put ''ZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZm9ybXMtdGV4dC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLWludmFsaWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWZvcm1zLWludmFsaWQtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItZm9ybXMtdmFs''@;'; put 'put ''aWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1mb3Jtcy12YWxpZC10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZm9ybXMtc3VidGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDAp''@;'; put 'put ''Oy0tY2xyLWZvcm1zLXBsYWNlaG9sZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTIwMCk7LS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1mb3Jtcy1mb2N1c2VkLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXN1YnRleHQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWJvcmRlci1kaXNhYmxlZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQt''@;'; put 'put ''d2VpZ2h0LXNlbWlib2xkKTstLWNsci1mb3Jtcy1pbnB1dC1wYWRkaW5nOjAgY2FsYyg0ICogdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSAvIDMpOy0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0OmNhbGMoNCAqIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpOy0tY2xyLWZvcm1z''@;'; put 'put ''LWlucHV0LWdyb3VwLWljb24tYWN0aW9uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWhlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZm9ybXMtY2hlY2tib3gtbGFiZWwtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yKTstLWNs''@;'; put 'put ''ci1mb3Jtcy1jaGVja2JveC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7LS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtY2hlY2tlZC1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1pbmRldGVybWluYXRlLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''bGFiZWwtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3JtLWRpc2FibGVkLWJhY2tncm91''@;'; put 'put ''bmQtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWRpc2FibGVkLW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1mb3Jtcy1yYWRpby1zZWxlY3RlZC1zaGFkb3c6aW5zZXQgMCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1mb3Jtcy1yYWRpby1jaGVja2VkLWRpc2FibGVkLXNoYWRvdzppbnNldCAwIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''Y29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWV5ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlz''@;'; put 'put ''YWJsZWQpOy0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXIt''@;'; put 'put ''YmFja2dyb3VuZC1zaGFkZSk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTcpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTstLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItd2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xKTstLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yLWRpc2FibGVkOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtdGludCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5k''@;'; put 'put ''OnRyYW5zcGFyZW50Oy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy1zZWxlY3QtaG92ZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZTpjYWxjKDEwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWJhc2UpKSk7LS1jbHItZm9ybXMtc2VsZWN0LW9wdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tn''@;'; put 'put ''cm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3Jk''@;'; put 'put ''ZXItY29sb3IpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1vcHRpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXRleHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQ6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHIt''@;'; put 'put ''Zm9ybS1jb250cm9se21hcmdpbi10b3A6Y2FsYyg0KnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZvcm0tY29udHJvbCBpbnB1dDo6LW1zLXJldmVhbCwuY2xyLWZvcm0tY29u''@;'; put 'put ''dHJvbCBpbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgbGFiZWwsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQg''@;'; put 'put ''LmNsci1jb250cm9sLWxhYmVse2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dCwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXRleHRhcmVhLC5jbHItZm9ybS1jb250cm9sLWRpc2Fi''@;'; put 'put ''bGVkIC5jbHItc2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItbnVtYmVyLWlucHV0e2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItZGlzYWJsZWQtY29sb3IpfS5j''@;'; put 'put ''bHItZm9ybS1jb250cm9sLWRpc2FibGVkIGlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci10aHVtYiwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5n''@;'; put 'put ''ZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvci1kaXNhYmxlZCkpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc3VidGV4dHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4dC1kaXNhYmxlZC1j''@;'; put 'put ''b2xvcil9LmNsci1mb3JtLWNvbnRyb2wtbXVsdGl7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwfS5jbHItZm9ybS1jb250cm9sLW11bHRpIC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDoxMDAlfS5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy1sYWJlbC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb3Jtcy1sYWJlbC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItY29udHJvbC1jb250YWluZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWNsci1wMi1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNw''@;'; put 'put ''YWNpbmcpfS5jbHItY29udHJvbC1pbmxpbmV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWNvbnRyb2wtaW5saW5lIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZv''@;'; put 'put ''bnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4''@;'; put 'put ''dC1jb2xvcik7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItc3VidGV4dC5lcnJvcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC10ZXh0LWNvbG9yKX0uY2xyLXN1YnRleHQuc3VjY2Vzc3tjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtdGV4dC1jb2xv''@;'; put 'put ''cil9LmNsci1zdWJ0ZXh0LXdyYXBwZXJ7ZmxleC1iYXNpczoxMDAlO2Rpc3BsYXk6ZmxleH0uY2xyLXZhbGlkYXRlLWljb257aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1z''@;'; put 'put ''LWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtkaXNwbGF5Om5vbmV9LmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNv''@;'; put 'put ''bntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpO2ZpbGw6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWVycm9yIC5jbHItdmFsaWRhdGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm0taG9yaXpvbnRhbCAu''@;'; put 'put ''Y2xyLWZvcm0tY29udHJvbD4uY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1mb3JtLWhvcml6b250YWwgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1mb3JtLWNvbnRyb2wuY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6Y2FsYygzMip2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''YmFzZWxpbmUpKTtmbGV4LXNocmluazowO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0taG9yaXpvbnRhbC5jbHItcm93IC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDphdXRvfS5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItZm9ybS1jb250cm9se2Rpc3Bs''@;'; put 'put ''YXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1mb3JtOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1jb250cm9sLWNvbnRhaW5lci5jbHItZXJyb3I+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29uLC5jbHItZm9ybTpub3QoLmNsci1mb3JtLWNvbXBhY3Qp''@;'; put 'put ''IC5jbHItY29udHJvbC1jb250YWluZXIuY2xyLXN1Y2Nlc3M+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1j''@;'; put 'put ''b250cm9sLWxhYmVse3dpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7bWluLXdpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wuY2xyLXJvdz4uY2xyLWNvbnRyb2wtbGFiZWx7d2lk''@;'; put 'put ''dGg6YXV0bzttaW4td2lkdGg6YXV0b30uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7''@;'; put 'put ''bWFyZ2luLXRvcDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''O21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZXJyb3IgLmNsci1zdWJ0ZXh0LC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0u''@;'; put 'put ''Y2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5lcnJvciwuY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5zdWNjZXNzLC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHQuZXJyb3IsLmNsci1mb3JtLWNvbXBhY3Qg''@;'; put 'put ''LmNsci1zdWNjZXNzIC5jbHItc3VidGV4dC5zdWNjZXNze21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb24sLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUt''@;'; put 'put ''aWNvbnttYXJnaW4tbGVmdDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VidGV4dC13cmFwcGVye2ZsZXgtYmFzaXM6YXV0bztkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm17cGFkZGluZzp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHIt''@;'; put 'put ''Zm9ybS1jb250cm9sIC5jbHItY29udHJvbC1jb250YWluZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1''@;'; put 'put ''bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1udW1iZXItaW5wdXQtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94e3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tZnVs''@;'; put 'put ''bC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb21ib2JveC1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItdGV4dGFy''@;'; put 'put ''ZWEtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LWdyb3VwLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIGlucHV0LC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHRleHRhcmVhLC5jbHIt''@;'; put 'put ''Zm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHNlbGVjdHt3aWR0aDoxMDAlfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItY29tYm9ib3gsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xy''@;'; put 'put ''LWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qt''@;'; put 'put ''d3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aC5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sIC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4fS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRh''@;'; put 'put ''aW5lcntmbGV4LXdyYXA6bm93cmFwfS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2ZsZXg6MCAwIGF1dG99LmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWVycm9yIC5jbHIt''@;'; put 'put ''c2VsZWN0LXdyYXBwZXI6YWZ0ZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLXN1Y2Nlc3MgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcntyaWdodDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1m''@;'; put 'put ''dWxsLXdpZHRoOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb250cm9sLWNvbnRhaW5lcjpub3QoLmNsci1lcnJvcik6bm90KC5jbHItc3VjY2VzcykgdGV4dGFyZWF7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSkpfS5j''@;'; put 'put ''bHItZm9ybS1ncm91cHtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1yZXF1aXJlZC1tYXJrOmFmdGVye2NvbnRlbnQ6IioiO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTMpO21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpu''@;'; put 'put ''b25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lfS5jbHItY2hlY2tib3gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Zm9udC13ZWln''@;'; put 'put ''aHQ6NDAwO2Rpc3BsYXk6YmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItY2hlY2tib3gtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJv''@;'; put 'put ''bC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17cG9zaXRpb246cmVsYXRpdmU7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDB9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JvcmRlcjouMDVyZW0gc29saWQgdmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7ZGlzcGxheTpub25l''@;'; put 'put ''O2hlaWdodDpjYWxjKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpO2JvcmRlci1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KSouMTI1KSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtbWFyay1jb2xvcik7Ym9yZGVyLWJvdHRvbTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjEyNSkgc29saWQgdmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3IpO2xlZnQ6Y2FsYyhjYWxjKHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpKi41KTt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSouNSkqLjUpKSByb3RhdGUoLTQ1ZGVnKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXN7b3V0''@;'; put 'put ''bGluZTowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zm''@;'; put 'put ''c2V0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3Jle2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5j''@;'; put 'put ''bHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTpiZWZvcmUsLmNsci1jaGVja2JveC13cmFwcGVy''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGU6YmVmb3Jle2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1pbmRldGVybWluYXRlLWJvcmRlci1jb2xvcil9LmNsci1jaGVja2JveC13''@;'; put 'put ''cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1ib3JkZXItY29sb3IpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpkaXNhYmxlZCtsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkOmJlZm9yZXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpk''@;'; put 'put ''aXNhYmxlZDppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtaW5kZXRlcm1pbmF0ZS1jb2xvcik7Ym9yZGVyLWxlZnQ6bm9uZX0uY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LWlubGluZXtkaXNwbGF5OmZs''@;'; put 'put ''ZXh9LmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC1pbmxpbmUgLmNsci1jb250cm9sLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7d2lkdGg6YXV0b30uY2xyLWVycm9yIC5jbHItY2hlY2ti''@;'; put 'put ''b3gtd3JhcHBlcjpub3QoLmRhdGFncmlkLXNlbGVjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXIpIGlucHV0W3R5cGU9Y2hlY2tib3hdOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2ti''@;'; put 'put ''b3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC13cmFwcGVyLWRpc2FibGVkIC5jbHItY29udHJvbC1sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yKX0u''@;'; put 'put ''Y2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpiZWZvcmV7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItZm9ybS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNh''@;'; put 'put ''YmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBl''@;'; put 'put ''ci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBl''@;'; put 'put ''ci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06aW5kZXRlcm1pbmF0ZTphZnRlcntib3JkZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWluZGV0ZXJtaW5hdGUtY29sb3IpO2JvcmRlci1sZWZ0Om5vbmV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLWJhc2VsaW5lKSo0KX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJl''@;'; put 'put ''bHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1maWxlLXdy''@;'; put 'put ''YXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZmlsZS13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7ZGlzcGxheTpibG9ja30uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257''@;'; put 'put ''bWFyZ2luLWxlZnQ6MH0uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1maWxlLXdyYXBwZXIgLmJ0bnttYXJnaW46MH0uY2xyLWZpbGV7aGVpZ2h0OjA7d2lkdGg6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29s''@;'; put 'put ''dXRlO3otaW5kZXg6LTF9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4dHttYXJnaW4tbGVmdDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUp''@;'; put 'put ''fS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbntsaW5lLWhlaWdodDpjYWxjKHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2xpbmUtaGVpZ2h0OmNh''@;'; put 'put ''bGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse21hcmdpbi10b3A6MDtsaW5lLWhlaWdodDoxLjA4cmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFw''@;'; put 'put ''cGVyIC5idG57aGVpZ2h0OjEuMnJlbX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dHtoZWlnaHQ6MDt3''@;'; put 'put ''aWR0aDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbiwuY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtY2xlYXItYnV0''@;'; put 'put ''dG9ue21hcmdpbjowO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dC1jbGVhci1idXR0b257cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikhaW1wb3J0YW50O21pbi13aWR0aDp1bnNl''@;'; put 'put ''dDtib3JkZXI6MH0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbi10ZXh0e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS1pbnB1dC13cmFwcGVye21hcmdpbi10b3A6MH1A''@;'; put 'put ''bWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZpbGUtaW5wdXQtd3JhcHBlcnttYXJnaW4tdG9wOjB9fS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1saXN0LWl0ZW17bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUp''@;'; put 'put ''O21heC13aWR0aDo1MDBweH0uY2xyLWZpbGUtbGlzdCAuY2xyLWZpbGUtbGFiZWwtYW5kLXN0YXR1cy1pY29ue2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1sYWJlbHt3aGl0ZS1zcGFjZTp3cmFwO2hlaWdodDp1bnNldDtn''@;'; put 'put ''YXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1maWxlLWxpc3QgLmNsci1maWxlLWNsZWFyLWJ1dHRvbnttYXJnaW46MDtwYWRkaW5nOjA7''@;'; put 'put ''bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1jbGVhci1idXR0b24gY2RzLWljb257bWFyZ2luOjB9LmNsci1mb3JtLWNvbXBhY3Qg''@;'; put 'put ''LmNsci1maWxlLWxpc3QtaXRlbXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtbGlzdC1pdGVtIC5jbHItc3VidGV4dHttYXJnaW46MCFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtYnJlYWt7ZmxleC1iYXNpczoxMDAlO2hlaWdodDowfS5jbHItaW5wdXQtd3JhcHBlcnt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LWhlaWdodDp2YXIoLS1jbHItZm9ybXMtaW5wdXQtd3JhcHBlci1oZWlnaHQpfS5jbHIt''@;'; put 'put ''aW5wdXR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNv''@;'; put 'put ''bG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1wYWRkaW5nKTttYXgtaGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItaW5wdXQ6Zm9jdXN7b3V0bGluZTowfS5jbHItaW5wdXRbcmVhZG9ubHlde2JvcmRlcjowfS5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUs''@;'; put 'put ''dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSku''@;'; put 'put ''Y2xyLWZvY3VzLC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItaW5wdXQ6ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLXRleHQtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWlucHV0OmRpc2FibGVkOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3IpfS5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSl7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXpl''@;'; put 'put ''OjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSkuY2xyLWZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3Jl''@;'; put 'put ''YWRvbmx5XSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQt''@;'; put 'put ''c2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pLmNsci1mb2N1cywuY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMtd2l0aGlue2Jv''@;'; put 'put ''cmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLnJvdyAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0u''@;'; put 'put ''Y2xyLWZvcm0tY29tcGFjdCAuY2xyLWlucHV0e21heC13aWR0aDoxMDAlfS5jbHItZm9ybS1jb21wYWN0IC5jbHItaW5wdXR+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dHtib3Jk''@;'; put 'put ''ZXI6MH0uY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWlucHV0e21heC13aWR0aDpjYWxjKDEwMCUgKyB2YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKSl9OjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItY29sb3IpfS5jbHItaW5wdXQtZ3JvdXB7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNr''@;'; put 'put ''Z3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKSA5NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlO3Bvc2l0aW9uOnJl''@;'; put 'put ''bGF0aXZlO21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLWlucHV0LWdyb3VwOmZvY3VzLC5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3VzLC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20t''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXN7d2lkdGg6YXV0b30uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7bWFyZ2luLXJpZ2h0''@;'; put 'put ''OjA7bWF4LXdpZHRoOjEwMCV9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0Om5vdChbcmVhZG9ubHldKTpmb2N1c3tiYWNrZ3JvdW5kLXNpemU6MDtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIHNlbGVjdCwuY2xyLWlucHV0LWdyb3VwIC5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5j''@;'; put 'put ''bHItaW5wdXQtZ3JvdXAgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdHtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtYWRkb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXN1YnRleHQtY29sb3IpfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91''@;'; put 'put ''cC1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFw''@;'; put 'put ''cGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtwYWRkaW5nOjAgY2FsYygxLjUqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uLmNsci1pbnB1''@;'; put 'put ''dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2N1cnNvcjpwb2ludGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbiwuY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24gY2xyLWljb257Zmls''@;'; put 'put ''bDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LWdyb3VwLWljb24tYWN0aW9uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWFjdGlvbi1zaXplKTt0cmFuc2Zvcm06dHJhbnNs''@;'; put 'put ''YXRlKGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSksY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKSl9LmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQ6''@;'; put 'put ''bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1lcnJvciAuY2xyLWlu''@;'; put 'put ''cHV0LWdyb3VwOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3VwOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAw''@;'; put 'put ''JSAxMDAlfS5jbHItc3VjY2VzcyAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xv''@;'; put 'put ''cikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cDpmb2N1cywuY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1zdWNjZXNz''@;'; put 'put ''IC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyLWJvdHRvbS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbntmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWRpc2FibGVkLWNvbG9yKX0uY2xyLWlucHV0LWdyb3VwOmhhcyhpbnB1dFtyZWFkb25seV0pLC5jbHItZm9ybS1j''@;'; put 'put ''b250cm9sLXJlYWRvbmx5IC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1pbnB1dC1ncm91cDpoYXMoaW5wdXRbcmVhZG9ubHldKSAuY2xyLWlucHV0LWdyb3VwLWFjdGlvbnMsLmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dC1ncm91cCAu''@;'; put 'put ''Y2xyLWlucHV0LWdyb3VwLWFjdGlvbnN7ZGlzcGxheTpub25lfS5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItaW5wdXQtZ3JvdXB7bWF4LXdpZHRoOjEwMCU7cGFkZGluZy1yaWdodDowfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXXstd2Via2l0LWFwcGVhcmFuY2U6bm9u''@;'; put 'put ''ZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0uY2xyLXJhZGlvLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxh''@;'; put 'put ''YmVse2ZvbnQtd2VpZ2h0OjQwMDtkaXNwbGF5OmJsb2NrfS5jbHItcmFkaW8td3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05''@;'; put 'put ''KTtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmJlZm9y''@;'; put 'put ''ZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Ym9yZGVyOi4wNXJlbSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9y''@;'; put 'put ''KTtib3JkZXItcmFkaXVzOjUwJX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpiZWZvcmV7Ym9yZGVyOjA7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tc2VsZWN0ZWQtc2hhZG93KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZDpkaXNhYmxlZDpiZWZvcmV7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tY2hlY2tlZC1kaXNhYmxlZC1zaGFkb3cpfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1c3tvdXRsaW5lOjB9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5''@;'; put 'put ''cGU9cmFkaW9dOmZvY3VzOmJlZm9yZXtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkp''@;'; put 'put ''KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106ZGlzYWJsZWQrbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmRpc2Fi''@;'; put 'put ''bGVkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1yYWRpby13cmFwcGVyIC5jbHIt''@;'; put 'put ''Y29udHJvbC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVsOmVtcHR5e3BhZGRp''@;'; put 'put ''bmctbGVmdDowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXJhZGlv''@;'; put 'put ''LXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGMoNCp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJl''@;'; put 'put ''bHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1zZWxlY3Qtd3Jh''@;'; put 'put ''cHBlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3R7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNl''@;'; put 'put ''Om5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFy''@;'; put 'put ''KC0tY2xyLXAyLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNl''@;'; put 'put ''Y29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIGNhbGModmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKSArIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqMikgMCB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO2N1cnNvcjpwb2ludGVy''@;'; put 'put ''O3otaW5kZXg6Mn0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmZvY3Vze291dGxpbmU6MH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSksLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVj''@;'; put 'put ''dDpub3QoW211bHRpcGxlXSl7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6''@;'; put 'put ''ZSAuMnMgZWFzZX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMtd2l0''@;'; put 'put ''aGluLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpm''@;'; put 'put ''b2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdFttdWx0aXBsZV06Zm9jdXMsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdFtt''@;'; put 'put ''dWx0aXBsZV06Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpo''@;'; put 'put ''b3ZlciwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmUsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1ib3JkZXIt''@;'; put 'put ''Y29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmU6ZGlzYWJsZWQsLmNsci1tdWx0aXNlbGVjdC13cmFw''@;'; put 'put ''cGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZTpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uY2xyLXNlbGVjdC13''@;'; put 'put ''cmFwcGVyIHNlbGVjdDpkaXNhYmxlZCBvcHRpb24sLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2FibGVkLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9uLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2Fi''@;'; put 'put ''bGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb24sLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNl''@;'; put 'put ''bGVjdC1vcHRpb24tY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcil9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6Oi1tcy1leHBhbmQsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDo6LW1zLWV4cGFu''@;'; put 'put ''ZHtkaXNwbGF5Om5vbmV9LmNsci1zZWxlY3Qtd3JhcHBlcnttYXgtaGVpZ2h0OmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKTt0b3A6Y2FsYyguNSooNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpIC0gdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKSkpO3JpZ2h0OnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1iYXNlbGluZSk7bWFyZ2luOjA7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIl''@;'; put 'put ''M0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJTIzOWE5YTlhJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VD''@;'; put 'put ''YXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMx''@;'; put 'put ''JTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWNvbG9yKX0uY2xyLXNlbGVjdC13cmFwcGVyOmhv''@;'; put 'put ''dmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1ob3Zlci1jb2xvcil9LmNsci1lcnJvciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVyLC5jbHItc3VjY2VzcyAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3JpZ2h0OmNhbGModmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLWljb24tc2l6ZSkgKyB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH1zZWxlY3RbbXVsdGlwbGVdLHNlbGVj''@;'; put 'put ''dFtzaXplXXtwYWRkaW5nOjA7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDphdXRvO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9c2VsZWN0W211bHRpcGxlXTpob3ZlcixzZWxlY3RbbXVs''@;'; put 'put ''dGlwbGVdOmFjdGl2ZSxzZWxlY3Rbc2l6ZV06aG92ZXIsc2VsZWN0W3NpemVdOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYm9yZGVy''@;'; put 'put ''LWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbixzZWxlY3Rbc2l6ZV0gb3B0aW9ue3BhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKi41KSB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtb3B0aW9u''@;'; put 'put ''LWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbjpjaGVja2VkLHNlbGVjdFtzaXplXSBvcHRpb246Y2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tncm91bmQtY29sb3IpfS5jbHItZXJyb3Igc2Vs''@;'; put 'put ''ZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKSA5NSUpIG5vLXJl''@;'; put 'put ''cGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cywuY2xyLWVycm9yIHNlbGVjdDpub3QoW211bHRpcGxlXSkuY2xyLWZvY3VzLC5jbHItZXJyb3Igc2VsZWN0''@;'; put 'put ''Om5vdChbbXVsdGlwbGVdKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLWVycm9yIHNlbGVjdFttdWx0aXBsZV17Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1p''@;'; put 'put ''bnZhbGlkLWNvbG9yKX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtdmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1zdWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zdWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxl''@;'; put 'put ''XSkuY2xyLWZvY3VzLC5jbHItc3VjY2VzcyBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0W211bHRpcGxl''@;'; put 'put ''XXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXNlbGVjdC5kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3Jt''@;'; put 'put ''LWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ6aG92ZXI6YWZ0ZXJ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0LC5jbHItZm9ybS1jb250cm9s''@;'; put 'put ''LWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0OmhvdmVyLC5j''@;'; put 'put ''bHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVye21hcmdp''@;'; put 'put ''bi10b3A6MH0uY2xyLXRleHRhcmVhLXdyYXBwZXJ7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItdGV4dGFy''@;'; put 'put ''ZWF7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2hlaWdodDphdXRvO3Jlc2l6ZTp2ZXJ0aWNhbDtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTti''@;'; put 'put ''YWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNsci10ZXh0YXJlYTpmb2N1c3tvdXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xv''@;'; put 'put ''cjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO291dGxpbmUtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcil9LmNsci10ZXh0YXJlYTpk''@;'; put 'put ''aXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9y''@;'; put 'put ''ZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLXN1Y2Nlc3MgLmNsci10ZXh0YXJlYXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtvdXRsaW5lLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXRleHRhcmVhe2JvcmRlci1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7b3V0bGluZS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDphdXRvfS5jbHItZm9ybS1jb250cm9sLnJvdyAuY2xyLXRleHRhcmVhLXdyYXBw''@;'; put 'put ''ZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF7bWF4LXdp''@;'; put 'put ''ZHRoOjEwMCV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRvZ2dsZS1oYW5kbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci10''@;'; put 'put ''b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZik7LS1jbHItdG9nZ2xlLWhhbmRsZS1ib3JkZXItY29sb3Itb246dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtYm9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1v''@;'; put 'put ''ZmYtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2Fi''@;'; put 'put ''bGVkLW9mZi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1j''@;'; put 'put ''bHItdG9nZ2xlLWRpc2FibGVkLW9uLWJnLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LmNsci10b2dnbGUtd3JhcHBlcntwb3NpdGlvbjpyZWxh''@;'; put 'put ''dGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2p1c3RpZnktY29udGVudDpzdGFydDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xy''@;'; put 'put ''LXRvZ2dsZS13cmFwcGVyIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2ZsZXg6MSAxIGF1dG99LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XXtw''@;'; put 'put ''b3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtmbGV4OjAgMCBhdXRvO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTIwMCl9LmNsci10b2dnbGUt''@;'; put 'put ''d3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2JvcmRlcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb2ZmKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcp''@;'; put 'put ''O3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vZmYpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9y''@;'; put 'put ''ZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMzAwKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJnLWNvbG9yKTtsZWZ0OjA7''@;'; put 'put ''cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1p''@;'; put 'put ''bjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnR9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1c3tvdXRsaW5lOjB9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9uKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0''@;'; put 'put ''cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1oYW5kbGUtYm9yZGVyLWNvbG9yLW9uKTt0cmFuc2l0''@;'; put 'put ''aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnQ7bGVmdDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSk7cmlnaHQ6MH0uY2xyLXRv''@;'; put 'put ''Z2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkK2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCl7bGVmdDowfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1ib3JkZXItY29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb2ZmLWhhbmRsZS1ib3JkZXItY29sb3IpO2hlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1i''@;'; put 'put ''b3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmRpc2FibGVkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRp''@;'; put 'put ''c2FibGVkLW9uLWhhbmRsZS1ib3JkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dnbGUtd3JhcHBlci5kaXNhYmxlZCBsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci10b2dnbGUtd3Jh''@;'; put 'put ''cHBlci5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNs''@;'; put 'put ''ci10b2dnbGUtd3JhcHBlci5yaWdodC1sYWJlbHtmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9u''@;'; put 'put ''dC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNl''@;'; put 'put ''Y29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDA7bWFyZ2luLXRvcDowfS5jbHItY29udHJvbC1pbmxpbmUgLmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0''@;'; put 'put ''OjB9LmNsci10b2dnbGUtcmlnaHQgLmNsci10b2dnbGUtd3JhcHBlcntmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtcmlnaHQgbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1yYW5nZS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LWVuZDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItcmFuZ2Utd3JhcHBlciAuZmlsbC1pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7ZGlzcGxh''@;'; put 'put ''eTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yKTti''@;'; put 'put ''b3JkZXItcmFkaXVzOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6bm9uZX0uY2xyLXJhbmdle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''cmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3ItZGlzYWJsZWQpfS5jbHItcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFyYW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRo''@;'; put 'put ''dW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNz''@;'; put 'put ''LWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRp''@;'; put 'put ''dXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xy''@;'; put 'put ''LXJhbmdlOmRpc2FibGVkKy5maWxsLWlucHV0e3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpfWlucHV0W3R5cGU9cmFuZ2Vde3BhZGRpbmc6MDst''@;'; put 'put ''d2Via2l0LWFwcGVhcmFuY2U6bm9uZTtsZWZ0OjA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRl''@;'; put 'put ''ci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBw''@;'; put 'put ''ZWFyYW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1''@;'; put 'put ''dFt0eXBlPXJhbmdlXTpkaXNhYmxlZHtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvci1kaXNhYmxlZCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2Ut''@;'; put 'put ''dHJhY2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1mb3Jt''@;'; put 'put ''cy1yYW5nZS10aHVtYi1oZWlnaHQpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXR7ZGlzcGxheTpub25lfS5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVz''@;'; put 'put ''cy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlcntoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcil9aW5wdXRbdHlwZT1yYW5nZV17Ym9y''@;'; put 'put ''ZGVyOjA7bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bGVmdDowO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2t7bWFyZ2luOjA7Ym9yZGVyOjA7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yKX1pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAl''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX19XzotbXMtZnVsbHNjcmVlbiAu''@;'; put 'put ''Y2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXQsOnJvb3QgLmNsci1yYW5nZS13cmFwcGVyIC5maWxsLWlucHV0e2Rpc3BsYXk6bm9uZX1fOi1tcy1mdWxsc2NyZWVuIC5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlciw6''@;'; put 'put ''cm9vdCAuY2xyLXJhbmdlLXdyYXBwZXIucHJvZ3Jlc3MtZmlsbCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLWZpbGwtbG93ZXJ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZp''@;'; put 'put ''bGwtY29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10b29sdGlwLDpyb290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdG9vbHRpcHt2aXNpYmlsaXR5OmhpZGRlbn1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdLDpyb290IGlucHV0W3R5cGU9''@;'; put 'put ''cmFuZ2Vde2JvcmRlcjowO21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdOjot''@;'; put 'put ''bXMtdHJhY2ssOnJvb3QgaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFja3tib3JkZXI6MDttYXJnaW46MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2st''@;'; put 'put ''Y29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10aHVtYiw6cm9vdCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZp''@;'; put 'put ''bGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1dFtjbHJEYXRhbGlzdElucHV0XXtwb3NpdGlvbjpyZWxhdGl2ZX1pbnB1dFtjbHJEYXRhbGlzdElucHV0XTo6LXdl''@;'; put 'put ''YmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye29wYWNpdHk6MDtjdXJzb3I6dGV4dH0uY2xyLWlucHV0LWdyb3VwIGlucHV0W2NsckRhdGFsaXN0SW5wdXRde3otaW5kZXg6Mn0uY2xyLWlucHV0LWdyb3VwIC5jbHItZGF0YWxpc3QtY2FyZXR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjI1''@;'; put 'put ''JTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcik7Y3Vyc29yOnRleHQ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1kYXRh''@;'; put 'put ''bGlzdC1jYXJldC1pY29uLXNpemUpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItZGF0YWxpc3QtY2FyZXR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWRpc2FibGVkLWNvbG9yKX1jbHItZGF0YWxpc3QtY29udGFpbmVyIC5jbHItaW5wdXQtZ3JvdXB7cGFk''@;'; put 'put ''ZGluZy1yaWdodDowfS5jbHItaW5wdXQtd3JhcHBlciBpbnB1dFtjbHJQYXNzd29yZF0rYnV0dG9uLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy1wYXNzd29yZC1leWUtaWNvbi1jb2xvcil9LmNsci1pbnB1''@;'; put 'put ''dC13cmFwcGVyIGlucHV0W2NsclBhc3N3b3JkXStidXR0b24uY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uW2Rpc2FibGVkXSAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2ZpbGw6dmFyKC0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yKX0uY2xyLWlucHV0LXdy''@;'; put 'put ''YXBwZXIgaW5wdXRbY2xyUGFzc3dvcmRdW2Rpc2FibGVkXXtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGFzc3dvcmQtZGlzYWJsZWQtZXllLWljb24tY29sb3IpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO21heC1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0ey1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLW51bWJlci1pbnB1dDo6LXdlYmtpdC1v''@;'; put 'put ''dXRlci1zcGluLWJ1dHRvbiwuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1udW1iZXItaW5wdXQt''@;'; put 'put ''c2VwYXJhdG9ye2JhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vw''@;'; put 'put ''LWljb24tYWN0aW9ue2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13''@;'; put 'put ''aWR0aC0yMDApKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tn''@;'; put 'put ''cm91bmQtaG92ZXIpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKX0uY2xyLW51bWJlci1pbnB1dC13''@;'; put 'put ''cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp1bnNldH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYWxlbmRhci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0t''@;'; put 'put ''Y2xyLWNhbGVuZGFyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FsZW5kYXItb3B0aW9uLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY2FsZW5kYXItYWN0aXZlLW9wdGlv''@;'; put 'put ''bi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItcmFuZ2UtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxl''@;'; put 'put ''Y3RlZCk7LS1jbHItY2FsZW5kYXItYnRuLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhbGVuZGFyLXRv''@;'; put 'put ''ZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5k''@;'; put 'put ''LWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWNhbGVuZGFyLWJ0bi1waWNrZXItdHJpZ2dlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4tcGlja2VyLXRyaWdnZXItaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3ItdGV4dDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJnOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7LS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1m''@;'; put 'put ''b250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS02KTstLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pfS5kYXRlcGlja2Vye2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpO2hlaWdodDpjYWxjKCg4KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsg''@;'; put 'put ''KDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgKyA2KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0xMDApIHNvbGlkIHZhcigtLWNsci1jYWxlbmRhci1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO3otaW5kZXg6MTA1MH0uZGF0''@;'; put 'put ''ZXBpY2tlciAuZGF0ZXBpY2tlci12aWV3LW1hbmFnZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtyb3ctZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7d2lkdGg6Y2FsYyg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKX0uZGF0ZXBpY2tlci5oYXMtcmFuZ2Ut''@;'; put 'put ''b3B0aW9ue3dpZHRoOmNhbGMoKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpICsgKDIqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkgKyAoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSArIDE1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAr''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgKyAyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5kYXRlcGlja2VyLmhhcy1hY3Rpb24tYnV0dG9uc3toZWlnaHQ6Y2FsYygoOCp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkgKyAoMip2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTcpKSArICgyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpICsgNip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpICsgdmFyKC0tY2xyLWJ0bi1oZWlnaHQpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSArIHZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNSkpO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uZGF0ZXBpY2tlciAuZGF0ZXBpY2tlci1hY3Rpb25ze21pbi13aWR0aDoxMDAlO2hlaWdodDpjYWxjKHZhcigtLWNsci1idG4taGVpZ2h0KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpO2Rpc3BsYXk6ZmxleDti''@;'; put 'put ''b3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtqdXN0aWZ5LWNvbnRlbnQ6ZW5kO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Z2FwOnZhcigtLWNsci1idG4t''@;'; put 'put ''aG9yaXpvbnRhbC1tYXJnaW4pfS5kYXRlcGlja2VyIC5kYXRlcGlja2VyLWFjdGlvbnMgYnV0dG9ue21hcmdpbjowfS5jbHItZGF0ZS1yYW5nZS1waWNrZXItbmF2e3dpZHRoOmNhbGMoMTUwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDoxMDAlfS5jYWxlbmRhci1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS5j''@;'; put 'put ''YWxlbmRhci1zd2l0Y2hlcnMsLnllYXItc3dpdGNoZXJze2Rpc3BsYXk6ZmxleH0ueWVhci1zd2l0Y2hlcnN7ZmxleDowIDAgYXV0bzthbGlnbi1zZWxmOmNlbnRlcjt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKjMpfS5jYWxlbmRhci10YWJsZXtmbGV4OjEgMSBhdXRv''@;'; put 'put ''O2JvcmRlci1zcGFjaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlfXRkLmNhbGVuZGFyLWNlbGwsdGQuY2FsZW5kYXItdGFibGUgLmNhbGVuZGFyLWNlbGx7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5e2Rpc3BsYXk6aW5saW5lfS53ZWVrZGF5c3tmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTExKX0ud2Vla2RheXtmb250LXNpemU6dmFyKC0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jYWxlbmRhci1idG57aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0KTts''@;'; put 'put ''aW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2FsZW5kYXItYnRuLmluLXJhbmdle2JhY2tncm91bmQ6dmFyKC0t''@;'; put 'put ''Y2xyLWNhbGVuZGFyLXJhbmdlLWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czowfS5jYWxlbmRhci1idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yKX0uY2FsZW5kYXItYnRuOmZvY3Vze291dGxpbmU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5jYWxlbmRhci1idG46''@;'; put 'put ''YWN0aXZle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1hY3RpdmUtY29sb3ItYmcpfS5kYXktYnRue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjA7bWFyZ2luOjAhaW1wb3J0YW50O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50''@;'; put 'put ''ZXI7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0''@;'; put 'put ''ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3dpZHRoOjEwMCU7Y29sb3I6aW5oZXJpdH0uZGF5LWJ0bi5pbi1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1yYW5nZS1jZWxsLWJhY2tncm91bmQtY29sb3Ip''@;'; put 'put ''O2JvcmRlci1yYWRpdXM6MH0uZGF5LWJ0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3IpfS5kYXktYnRuOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0''@;'; put 'put ''OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5kYXktYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJn''@;'; put 'put ''KX0uZGF5LWJ0bjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5kYXktYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWFjdGl2ZS1jb2xvcil9LmRheS1idG4uaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNh''@;'; put 'put ''bGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwt''@;'; put 'put ''Zm9udC13ZWlnaHQpfS5kYXktYnRuLmlzLXNlbGVjdGVkLC5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlLC5kYXktYnRuLmlzLWVuZC1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXIt''@;'; put 'put ''YWN0aXZlLWNlbGwtY29sb3IpfS5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmRheS1idG4uaXMtZW5kLXJhbmdlOm5vdCguaXMtc3RhcnQtcmFuZ2Upe2JvcmRl''@;'; put 'put ''ci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmRheS1idG4uaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9LmRheS1idG4uaXMtZXhjbHVkZWR7ZGlz''@;'; put 'put ''cGxheTpub25lfS5kYXktYnRuLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZDowIDB9LmNhbGVuZGFyLXBpY2tlcnN7ZGlzcGxheTpmbGV4fS5zd2l0Y2hlcntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWNvbG9yKX0uc3dpdGNoZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvci10ZXh0KX0uc3dpdGNoZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0u''@;'; put 'put ''c3dpdGNoZXIgY2RzLWljb24sLnN3aXRjaGVyIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9Lm1vbnRocGlja2VyLXRyaWdnZXIsLnllYXJwaWNrZXItdHJpZ2dlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTEzKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWNvbG9yKTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1vbnRocGlja2VyLXRyaWdnZXIueWVhci1y''@;'; put 'put ''YW5nZSwueWVhcnBpY2tlci10cmlnZ2VyLnllYXItcmFuZ2V7d2lkdGg6dW5zZXQ7YWxpZ24tY29udGVudDpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5tb250aHBpY2tlciwueWVhcnBpY2tlcnttaW4taGVpZ2h0OmNhbGMoNip2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTEyKSl9Lm1vbnRocGlja2VyLC55ZWFycGlja2VyLC5kYXlwaWNrZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtoZWlnaHQ6Y2FsYyg5KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApICsgMyp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTUpKTt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS55ZWFyc3tmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnRoLC55ZWFye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4t''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtoZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7d2lkdGg6Y2FsYyguNSpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpIC0gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS03KSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5tb250aDpob3ZlciwueWVhcjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5tb250aDphY3RpdmUsLnllYXI6YWN0aXZl''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0ubW9udGguaXMtdG9kYXksLnllYXIuaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFy''@;'; put 'put ''KC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtZm9udC13ZWlnaHQpfS5tb250aC5pcy1zZWxlY3RlZCwubW9udGguaXMtc3RhcnQtcmFuZ2UsLm1vbnRoLmlzLWVuZC1yYW5n''@;'; put 'put ''ZSwueWVhci5pcy1zZWxlY3RlZCwueWVhci5pcy1zdGFydC1yYW5nZSwueWVhci5pcy1lbmQtcmFuZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWNvbG9yKX0u''@;'; put 'put ''bW9udGguaXMtc3RhcnQtcmFuZ2U6bm90KC5pcy1lbmQtcmFuZ2UpLC55ZWFyLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9Lm1vbnRoLmlzLWVuZC1yYW5nZTpub3QoLmlzLXN0''@;'; put 'put ''YXJ0LXJhbmdlKSwueWVhci5pcy1lbmQtcmFuZ2U6bm90KC5pcy1zdGFydC1yYW5nZSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0ubW9udGguaXMtc2VsZWN0ZWQ6Zm9jdXMsLnllYXIuaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2''@;'; put 'put ''YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9Lm1vbnRoLmlzLWRpc2FibGVkLC55ZWFyLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5v''@;'; put 'put ''bmV9Lm1vbnRoLmlzLWRpc2FibGVkOmhvdmVyLC55ZWFyLmlzLWRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5tb250aHMsLnllYXJze3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtmbGV4LXdyYXA6d3JhcDtkaXNwbGF5OmZsZXh9Lm1vbnRoe3RleHQtYWxpZ246Y2Vu''@;'; put 'put ''dGVyO2hlaWdodDpjYWxjKDUqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS55ZWFye3RleHQtYWxpZ246Y2VudGVyfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNvbWJvYm94LWJvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY29tYm9ib3gtaW5wdXQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1jb21ib2JveC1maWx0ZXItaGlnaGxpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWNvbWJvYm94LW1pbi13aWR0aDpjYWxjKDE2OCAqICgxcmVtIC8gdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJvYm94LW11bHRpLW1pbi13aWR0aDpjYWxjKDM2MCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJvYm94LW1pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1jb21ib2JveC1mb250''@;'; put 'put ''LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLWNvbWJvYm94LXRleHQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWNvbWJvYm94LXBhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWNv''@;'; put 'put ''bWJvYm94LXRyaWdnZXItcGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS02KTstLWNsci1jb21ib2JveC10cmlnZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtaG92ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQt''@;'; put 'put ''aG92ZXIpOy0tY2xyLWNvbWJvYm94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWNvbWJvYm94LXBpbGwtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7LS1jbHItY29t''@;'; put 'put ''Ym9ib3gtcGlsbC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDAgMDstLWNsci1jb21ib2JveC1waWxsLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWljb24tY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItY29tYm9ib3gtcGlsbC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJh''@;'; put 'put ''ZGl1cy0xMDApfS5jbHItY29tYm9ib3gtZm9ybS1jb250cm9se2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmNsci1jb21ib2JveC1mb3JtLWNvbnRyb2wgLmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZvY3VzLWluZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTt3aWR0aDowO3RyYW5zaXRpb246d2lkdGggLjJzIGVhc2U7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bGVmdDow''@;'; put 'put ''O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzKX0uY2xyLWZvY3Vze3dpZHRoOjEwMCV9LmNsci1lcnJvciAuY2xyLWZvY3Vz''@;'; put 'put ''LWluZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLWNvbWJvYm94LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIGNhbGModmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItZ2FwKSArIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNikgKyB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0KSkgMCB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLWxlZnQpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LW1pbi1oZWlnaHQpO21pbi13aWR0aDp2YXIoLS1jbHItY29tYm9i''@;'; put 'put ''b3gtbWluLXdpZHRoKTtmb250LXNpemU6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IpO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWNvbWJvYm94LWlucHV0LWJhY2tncm91bmQtY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czp2YXIoLS1jbHItY29tYm9ib3gtYm9yZGVyLXJhZGl1cyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItaW5wdXR7cGFkZGluZzowO21heC1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1dDpub3QoOmRp''@;'; put 'put ''c2FibGVkKXtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtdGV4dC1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyLm11bHRpe21pbi13aWR0aDptaW4odmFyKC0tY2xyLWNvbWJvYm94LW11bHRpLW1pbi13aWR0aCksMTAwJSk7cGFkZGluZy1ib3R0b206Y2FsYygzKigxcmVtL3ZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtYmFzZSkpKX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1dC5jbHItY29tYm9ib3gtaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13cmFwcGVyLmludmFsaWR7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1j''@;'; put 'put ''b2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItY29tYm9ib3gtaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyLWJvdHRvbTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1jb21ib2JveC1yZW1vdmUtYnRue2JhY2tncm91bmQ6MCAw''@;'; put 'put ''O2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWljb24tY29sb3IpfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5n''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1oZWlnaHQpO21hcmdpbjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1tYXJnaW4pO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94''@;'; put 'put ''LXBpbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1waWxsLWJvcmRlci1yYWRpdXMpO2JvcmRlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1ib3JkZXItY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcGFkZGluZyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5sYWJlbC1jb21ib2JveC1waWxsIC5jbHItY29tYm9ib3gtcGlsbC1jb250ZW50e2ZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtZm9udC1jb2xvcik7cGFkZGluZzowfS5jbHItY29tYm9i''@;'; put 'put ''b3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbiwuY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2xyLWljb257bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFi''@;'; put 'put ''ZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbltzaGFwZT13aW5kb3ctY2xvc2VdLC5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjbHItaWNvbltzaGFwZT13aW5kb3ctY2xvc2Vde2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3IpfS5jbHIt''@;'; put 'put ''Y29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LWlucHV0LXdyYXBwZXJ7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13cmFwcGVyOm5vdCguZGlzYWJsZWQpOmhvdmVyLC5jbHItY29tYm9ib3gtd3JhcHBlcjpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY29tYm9ib3gtaG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmNsci1jb21ib2JveC10cmlnZ2Vye3BhZGRpbmctbGVmdDp2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLWxlZnQpO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGlu''@;'; put 'put ''Zy1yaWdodCk7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjb2xvcjpjdXJyZW50Q29sb3I7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZHtjb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKX0uY2xyLWNvbWJvYm94LXRyaWdnZXI6ZGlzYWJsZWQgY2RzLWljb25bc2hhcGU9YW5nbGVdLC5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZV17Y29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1jb21ib2JveC10cmlnZ2VyIGNkcy1pY29uW3NoYXBlPWFuZ2xlXSwuY2xyLWNvbWJvYm94LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGVde2NvbG9yOnZhcigtLWNsci1jb21ib2JveC10''@;'; put 'put ''cmlnZ2VyLWZvbnQtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1jb21ib2JveC1jYXJldC1pY29uLXNpemUpO21pbi13aWR0aDp2YXIo''@;'; put 'put ''LS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKX0uY2xyLWNvbWJvYm94LW9wdGlvbnN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjA7bWluLXdpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXIt''@;'; put 'put ''c3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0yMDApO21hcmdp''@;'; put 'put ''bi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMDt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwNTA7cG9zaXRpb246c3RhdGljO21heC1oZWlnaHQ6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkp''@;'; put 'put ''O292ZXJmbG93LXk6YXV0bzt2aXNpYmlsaXR5OnZpc2libGV9LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ucy1sb2FkaW5ne3BhZGRpbmc6Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5jbHIt''@;'; put 'put ''Y29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZy10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMt''@;'; put 'put ''ZW1wdHktdGV4dHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uY2xyLWNvbWJvYm94LW9wdGlvbntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0t''@;'; put 'put ''Zm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQt''@;'; put 'put ''dHJhbnNmb3JtOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uYWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9w''@;'; put 'put ''dGlvbjpob3Zlcntjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb246aG92ZXIuYWN0aXZl''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5jbHItY29tYm9ib3gtb3B0aW9uOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjphY3RpdmUuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjpmb2N1c3t6LWlu''@;'; put 'put ''ZGV4OmluaGVyaXR9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''ZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6aG92ZXIsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDowIDB9LmNs''@;'; put 'put ''ci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6YWN0aXZlLC5jbHItY29tYm9ib3gtb3B0aW9uOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uY2xyLWZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJv''@;'; put 'put ''Ym94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbnMgLmNsci1jb21ib2JveC1vcHRpb257cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7LmNsci1jb21ib2JveC1vcHRpb25z''@;'; put 'put ''IC5jbHItY29tYm9ib3gtb3B0aW9ue3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfX0uY2xyLWNvbWJvYm94LWRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93''@;'; put 'put ''ZWR9LmNsci1jb21ib2JveC1kaXNhYmxlZCAuY2xyLWNvbWJvYm94LWlucHV0LC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC1yZW1vdmUtYnRuLC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC10cmlnZ2Vye2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWZp''@;'; put 'put ''bHRlci1oaWdobGlnaHQgYntmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1maWx0ZXItaGlnaGxpZ2h0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdGFjay12aWV3LWJvcmRlci13''@;'; put 'put ''aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmlldy10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDAp''@;'; put 'put ''Oy0tY2xyLXN0YWNrLXZpZXctcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItc3RhY2stdmlldy1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRh''@;'; put 'put ''YmxlLXJvdy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItc3RhY2stdmlldy1leHBh''@;'; put 'put ''bmRhYmxlLXJvdy1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHIt''@;'; put 'put ''c3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dy''@;'; put 'put ''b3VuZC1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1ob3Zlci1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWFj''@;'; put 'put ''dGl2ZS1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItc3RhY2stdmlldy1yb3ctZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xy''@;'; put 'put ''LXN0YWNrLXZpZXctcm93LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1oZWlnaHQ6Y2FsYygyMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLXN0YWNr''@;'; put 'put ''LXZpZXctcm93LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3Rh''@;'; put 'put ''Y2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItc3RhY2stdmlldy1iZy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLXN0YWNrLXZpZXctYmctY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWJnLWNvbG9yKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtc2l6ZTp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctZm9udC1zaXplKTstLWNsci1zdGFjay12aWV3LXN0YWNr''@;'; put 'put ''LWJsb2NrLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXJvdy1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1oZWlnaHQpOy0tY2xyLXN0YWNrLXZpZXct''@;'; put 'put ''c3RhY2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWxldHRlci1zcGFjaW5nKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLWJnLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLXJvdy1iZy1jb2xvcik7''@;'; put 'put ''LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWhvdmVyKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5k''@;'; put 'put ''ZWQtcm93LWNvbG9yKX0uc3RhY2staGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LWVuZH0uc3RhY2staGVhZGVyIC5zdGFjay10aXRsZXtkaXNwbGF5OmJsb2NrO2ZsZXg6MSAxIGF1dG87bWFyZ2luOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDA7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctdGl0bGUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1o''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9uc3tkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2ZsZXg6MCAwIGF1dG99LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9ucyAuc3RhY2stYWN0aW9ue21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX0uc3RhY2stdmlld3tvdmVyZmxvdy15OmF1dG87d29yZC13cmFwOmJyZWFrLXdvcmQ7bWFyZ2luLXRvcDowO2JvcmRl''@;'; put 'put ''cjp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItcmFkaXVzKX0uc3RhY2stdmlldyBkZCwuc3RhY2stdmlldyBkdHttYXJnaW4t''@;'; put 'put ''aW5saW5lLXN0YXJ0OjA7bWFyZ2luLWxlZnQ6MH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDtvdmVyZmxvdy15OmhpZGRlbjtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci13aWR0aCk7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20pfS5zdGFjay12aWV3Pi5zdGFjay1ibG9jazpsYXN0LWNoaWxkLC5zdGFjay12aWV3PjpsYXN0LWNoaWxkIC5zdGFjay1ibG9jazpsYXN0''@;'; put 'put ''LW9mLXR5cGV7Ym9yZGVyLWJvdHRvbTpub25lfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jaGFuZ2VkOmJlZm9yZXtjb250ZW50OiIgIjtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MDt3aWR0aDowO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xpZCB2YXIoLS1j''@;'; put 'put ''bHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xpZCB0cmFuc3BhcmVudH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stY2FyZXR7YWxpZ24tc2VsZjpjZW50ZXJ9LnN0YWNrLXZpZXcgLnN0YWNr''@;'; put 'put ''LWJsb2NrLWxhYmVse3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctY29sb3IpO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctYmctY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtd2VpZ2h0''@;'; put 'put ''KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmcpO2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stbGFiZWw6Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xKTtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zdGFjay12aWV3IC5zdGFjay12aWV3LWtleXtmbGV4OjAgMSA0MCU7bWF4LXdpZHRoOjQwJTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc3RhY2stdmll''@;'; put 'put ''dyAuc3RhY2stYmxvY2stY2FyZXR7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcik7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnR7ZmxleDoxIDEgYXV0bzt3aWR0aDo2MCU7bWFyZ2luLWJvdHRvbTowfS5zdGFj''@;'; put 'put ''ay12aWV3IC5zdGFjay1ibG9jay1jb250ZW50PjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbntmbGV4OjAgMCBhdXRvO3dpZHRoOjEw''@;'; put 'put ''MCV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9ja3tib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWNoaWxkcmVuLXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20tY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbj4uc3Rh''@;'; put 'put ''Y2stYmxvY2s6bGFzdC1jaGlsZCwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4+Omxhc3QtY2hpbGQgLnN0YWNrLWJsb2NrOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOm5vbmV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbCwuc3RhY2stdmlldyAu''@;'; put 'put ''c3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+''@;'; put 'put ''LnN0YWNrLWJsb2NrLWxhYmVse3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWNv''@;'; put 'put ''bG9yKTtjdXJzb3I6cG9pbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNr''@;'; put 'put ''Z3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nk''@;'; put 'put ''ZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBdmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yKSUzQiU3RCUzQyUyRnN0eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNF''@;'; put 'put ''Q2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0LjJhMC42OCUyQzAuNjglMkMwJTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJD''@;'; put 'put ''MSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWwsLnN0YWNr''@;'; put 'put ''LXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnR7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dCxjb2xvciAuMnMgZWFzZS1pbi1vdXR9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU6bm90KC5zdGFjay1i''@;'; put 'put ''bG9jay1leHBhbmRlZCk+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVye2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctaG92ZXIpfS5zdGFj''@;'; put 'put ''ay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlciAuc3RhY2stYmxvY2stY2FyZXR7ZmlsbDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyKX0uc3RhY2st''@;'; put 'put ''dmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZTpub3QoLnN0YWNrLWJsb2NrLWV4cGFuZGVkKT4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''c3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1iZy1hY3RpdmUpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNrLWJsb2NrLWNhcmV0e2ZpbGw6dmFyKC0tY2xy''@;'; put 'put ''LXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWx7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgp''@;'; put 'put ''O2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tKTtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC10ZXh0LWNvbG9yKTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLWJnLWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoMCl9LnN0''@;'; put 'put ''YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3IpfS5zdGFjay12aWV3IC5z''@;'; put 'put ''dGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3Zlcntjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4''@;'; put 'put ''cGFuZGVkLWhvdmVyLXJvdy1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVyIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2Nr''@;'; put 'put ''LWV4cGFuZGFibGUtaG92ZXIpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWFjdGl2ZS1yb3ctYmctY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNrLWJsb2NrLWNh''@;'; put 'put ''cmV0e2ZpbGw6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0ubW9kYWwgLnN0YWNrLXZpZXd7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IGNsci1zdGFjay1ibG9jay5zdGFjay1ibG9jay1leHBhbmRhYmxlIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7''@;'; put 'put ''Y29udGVudDpub25lfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiBjbHItc3RhY2stYmxvY2sgLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleSwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gY2xyLXN0YWNrLWJsb2NrIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmUsLnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7ZGlzcGxheTpub25l''@;'; put 'put ''fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10cmVlLWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVy''@;'; put 'put ''KTstLWNsci10cmVlLWxpbmstc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItdHJlZS1saW5rLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHIt''@;'; put 'put ''dHJlZS1ub2RlLWNhcmV0LWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0''@;'; put 'put ''aXZlKTstLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci10cmVlLW5vZGUtY2FyZXQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xv''@;'; put 'put ''cik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1ob3Zlci1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstYWN0aXZlLWNvbG9yKTstLWNs''@;'; put 'put ''ci10cmVlLW5vZGUtY2FyZXQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWRpc2FibGVkLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC10ZXh0LW9ubHktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci10''@;'; put 'put ''cmVlLW5vZGUtY29udGVudC1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLXRleHQtY29sb3IpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci10cmVlLW5vZGUtY29udGVudC1zZWxlY3RlZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0''@;'; put 'put ''ZWQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNr''@;'; put 'put ''Z3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''b3BhY2l0eS0wKX0uY2xyLXRyZWUtbm9kZXtkaXNwbGF5OmJsb2NrfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVye2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNv''@;'; put 'put ''bnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmt7cG9pbnRlci1ldmVudHM6bm9uZX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29u''@;'; put 'put ''dGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2hlY2tib3h7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmct''@;'; put 'put ''ZGlzYWJsZWQtY29sb3IpfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtbGluaywuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNv''@;'; put 'put ''bnRlbnQsLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmsgY2RzLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9k''@;'; put 'put ''ZS1saW5rIGNsci1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY29udGVudCBjZHMtaWNvbiwuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xy''@;'; put 'put ''LXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVl''@;'; put 'put ''LW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9y''@;'; put 'put ''KX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNhcmV0e2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVu''@;'; put 'put ''b2RlLWNhcmV0IGNkcy1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2FyZXQgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9k''@;'; put 'put ''ZS1jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13''@;'; put 'put ''ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRh''@;'; put 'put ''aW5lcj4uY2xyLXRyZWVub2RlLWNoZWNrYm94LmNsci1jaGVja2JveC13cmFwcGVye3dpZHRoOjEwMCU7cGFkZGluZzowIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyPi5jbHItdHJlZW5vZGUtY2hlY2tib3guY2xyLWNoZWNr''@;'; put 'put ''Ym94LXdyYXBwZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCl9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI+LmNsci10cmVlbm9kZS1jaGVja2JveC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6''@;'; put 'put ''MTAwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjB9LmNsci10cmVlLW5vZGUt''@;'; put 'put ''Y29udGVudC1jb250YWluZXI6Zm9jdXM+LmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzPi5jbHItdHJlZW5vZGUtY2hlY2tib3h7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0yMDApKTtvdXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApfS5jbHItdHJlZW5vZGUtY29udGVu''@;'; put 'put ''dHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtdGV4dC1vbmx5LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10''@;'; put 'put ''cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKSAwIDAgdmFyKC0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1cyl9LmNsci10cmVlbm9kZS1jb250ZW50OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMTApfS5jbHItdHJlZW5vZGUtY29udGVudDpub3QoOmhhcyguY2xyLXRyZWVub2RlLWxpbmspKXtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgY2RzLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IGNsci1pY29u''@;'; put 'put ''e2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUt''@;'; put 'put ''Y29udGVudC10ZXh0LW9ubHktY29sb3IpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpjaGVja2VkKXtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLXNlbGVjdGVkLWNvbG9yKX0uY2xyLXRyZWVu''@;'; put 'put ''b2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLC5jbHItdHJlZW5vZGUtY2hlY2tib3h7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcil9LmNsci10cmVlbm9k''@;'; put 'put ''ZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5r''@;'; put 'put ''OmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlbm9kZS1jaGVja2JveCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2Rl''@;'; put 'put ''LWxpbmsgY2xyLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2xyLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVye2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2ti''@;'; put 'put ''b3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVyIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29u''@;'; put 'put ''dGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazphY3RpdmUsLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YWN0aXZle2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29u''@;'; put 'put ''dGVudC1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6YWN0aXZlIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6YWN0aXZlIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmFjdGl2ZSBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJlbDphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWFjdGl2''@;'; put 'put ''ZS1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluay5hY3RpdmU6aG92ZXIsLmNsci10cmVlbm9kZS1jaGVja2JveDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF06bm90KDpkaXNhYmxlZCk6Y2hlY2tlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtaG92ZXItY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsuYWN0aXZlOmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpj''@;'; put 'put ''aGVja2VkKTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtYWN0aXZlLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0e2ZsZXg6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21hcmdpbjowO3BhZGRpbmc6MDtoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1jb2xvcil9LmNsci10cmVlbm9kZS1jYXJldDpob3Zlcntjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dHJlZS1ub2RlLWNhcmV0LWFjdGl2ZS1jb2xvcil9LmNsci10cmVlLW5vZGUtY2FyZXQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2RlLXNwaW5uZXIt''@;'; put 'put ''Y29udGFpbmVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtwYWRkaW5nOmNhbGMoKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkqLjUpfS5jbHItdHJlZW5vZGUt''@;'; put 'put ''c3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLWNoaWxk''@;'; put 'put ''cmVue21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO3dpbGwtY2hhbmdlOmhlaWdodDtvdmVyZmxvdy15OmhpZGRlbn0uY2xyLXRyZWVub2RlLWxpbmt7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXJnaW46MDtwYWRkaW5nOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpsZWZ0fS5jbHItdHJlZW5vZGUtbGluazpob3Zlciwu''@;'; put 'put ''Y2xyLXRyZWVub2RlLWxpbms6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmV9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZGF0YWdyaWQtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWRhdGFncmlkLWRlZmF1bHQtYm9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLWRhdGFncmlkLXJvdy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItNTAwKTstLWNsci1kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1pbnB1dC1ib3JkZXItZm9jdXMtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3Vu''@;'; put 'put ''ZCk7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWFj''@;'; put 'put ''dGlvbi1wb3BvdmVyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtcm93LXNl''@;'; put 'put ''bGVjdGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQtYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4t''@;'; put 'put ''c3dpdGNoLWhlYWRlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zl''@;'; put 'put ''cik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1ob3Zlci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4tYmctY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMjAwKTstLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1n''@;'; put 'put ''YXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXBhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xv''@;'; put 'put ''ci00MDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwt''@;'; put 'put ''YWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVu''@;'; put 'put ''dC1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWJvZHktdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1i''@;'; put 'put ''YWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQt''@;'; put 'put ''c2l6ZSk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlv''@;'; put 'put ''bi1saW5lLWhlaWdodCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1oZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS01KSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1j''@;'; put 'put ''b2xvcik7LS1jbHItZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZm9vdGVyLXBhZ2luYXRpb24tZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItZGF0YWdyaWQtZml4ZWQtY29sdW1uLXNpemU6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWRhdGFncmlkLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWRhdGFncmlkLWFjdGlvbi1h''@;'; put 'put ''cnJvdy1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItZGF0YWdyaWQtY29tcGFjdC1vdXRsaW5lLW9mZnNldDpjYWxjKC0xICogdG9rZW5zLiRjZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWRhdGFncmlkLWhvcml6b250YWwtcGFkZGluZzptaXhpbnMuYmFzZWxpbmVQeCg5''@;'; put 'put ''KX0uZGF0YWdyaWR7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxlLW1hcmdpbik7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0uZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQgLmRhdGFn''@;'; put 'put ''cmlkLWNlbGx7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGVyb3ctYm9yZGVyY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZyk7''@;'; put 'put ''dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnR7dGV4dC1hbGlnbjpsZWZ0fS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQ6Zmlyc3QtY2hpbGQsLmRhdGFn''@;'; put 'put ''cmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW4ucmlnaHQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLnJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlk''@;'; put 'put ''IC5kYXRhZ3JpZC1jZWxse21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7Zm9udC1zaXplOnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1ue2NvbG9yOnZhcigtLWNsci10aGVhZC1jb2xvcik7Zm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5IC5kYXRhZ3JpZC1yb3c6Zmlyc3QtY2hp''@;'; put 'put ''bGQgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Ky5kYXRhZ3JpZC1ib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LmRhdGFncmlk''@;'; put 'put ''IC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Omxhc3QtY2hpbGQgLmRhdGFncmlk''@;'; put 'put ''LXJvdzpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1jZWxsOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHk6bGFzdC1jaGlsZCAuZGF0YWdyaWQt''@;'; put 'put ''cm93Omxhc3QtY2hpbGQgLmRhdGFncmlkLWNlbGw6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4sLmRhdGFncmlkLWNv''@;'; put 'put ''bXBhY3QgLmRhdGFncmlkLWNlbGx7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLWNvbXBhY3QtcGFkZGluZyl9LmRhdGFncmlkLWhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFw''@;'; put 'put ''O3Bvc2l0aW9uOnJlbGF0aXZlfS5kYXRhZ3JpZHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbXMtb3ZlcmZsb3ctc3R5bGU6LW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO292ZXJmbG93OmF1dG87ZmxleDoxIDEgYXV0bzttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLmNkay12aXJ0dWFsLXNjcm9sbGFibGUgLmRhdGFncmlkLXJvd3N7ZmxleC1ncm93OjB9LmRhdGFncmlkLW92ZXJmbG93LWVsbGlwc2lzIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxscz4uZGF0YWdy''@;'; put 'put ''aWQtY2VsbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3JpZC1ob3Jpem9udGFsLXBhZGRpbmcp''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4dC1hbGlnbjpjZW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNl''@;'; put 'put ''Om5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTEwKX1idXR0b24uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZGF0YWdyaWQtaWNvbi1jb2xvcil9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiBzdmd7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0fS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5zcGlubmVy''@;'; put 'put ''e21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZzp2YXIoLS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1jZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LWJvdHRvbWNlbGxwYWRkaW5nKX0uZGF0YWdyaWQtaGVhZGVyLC5kYXRhZ3JpZC1ib2R5LC5kYXRhZ3JpZC1yb3csLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQtY2VsbCwuZGF0YWdyaWQtZml4ZWQtY29sdW1ue2Rpc3BsYXk6YmxvY2t9LmRhdGFncmlkLXJvd3tib3JkZXItdG9wLXN0eWxl''@;'; put 'put ''OnNvbGlkO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1yb3c6Zmlyc3Qtb2YtdHlwZXtib3JkZXItdG9wOm5vbmV9LmRhdGFncmlkLXJvdzpob3Zlciwu''@;'; put 'put ''ZGF0YWdyaWQtcm93OmhvdmVyIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1zZWxlY3RlZCwuZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkIC5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3ctc3RpY2t5e2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkOmhvdmVyLC5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6aG92ZXIgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6YWN0aXZlLC5k''@;'; put 'put ''YXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6YWN0aXZlIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmRhdGFncmlkLXJvdzphY3RpdmUsLmRhdGFncmlkLXJv''@;'; put 'put ''dzphY3RpdmUgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctc2tlbGV0b257YmFja2dyb3VuZC1jb2xvcjp1bnNldH0uZGF0YWdyaWQtcm93LmRhdGFncmlk''@;'; put 'put ''LXJvdy1za2VsZXRvbiAuZGF0YWdyaWQtcm93LXNjcm9sbGFibGUsLmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctc2tlbGV0b24gLmRhdGFncmlkLXJvdy1zdGlja3l7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWwtd3JhcHBlcntmbGV4OjEgMSBhdXRv''@;'; put 'put ''O2Rpc3BsYXk6ZmxleH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctZGV0YWlse3dpZHRoOmF1dG99LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowO2JvcmRlcjowfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRh''@;'; put 'put ''aWwgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtY29udGFpbmVye2ZvbnQtc2l6ZTp2YXIoLS1jbHItdGFibGUtZm9udHNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdHttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0t''@;'; put 'put ''Y2xyLXRhYmxlLWJvcmRlcndpZHRoKSk7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdCwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3Qg''@;'; put 'put ''aW5wdXR7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgaW5wdXR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kYXRh''@;'; put 'put ''Z3JpZC1yb3cgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0e21hcmdpbjpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAu''@;'; put 'put ''c2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXJvdy1sb2FkaW5nIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LmRh''@;'; put 'put ''dGFncmlkLXJvdy1sb2FkaW5nIC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6ZmxleDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmRhdGFncmlkLXJv''@;'; put 'put ''dy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvcik7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7cG9zaXRpb246c3RpY2t5O2xlZnQ6MDt6LWluZGV4OjUwMH0uZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbDpsYXN0LWNoaWxkOmFm''@;'; put 'put ''dGVye2NvbnRlbnQ6IiI7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3Itd2lkdGgpO2hlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXNjcm9sbGFibGV7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXB9LmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlLmlzLXJlcGxhY2Vk''@;'; put 'put ''e2ZsZXgtZGlyZWN0aW9uOnJvd30uZGF0YWdyaWQtcm93LXNjcm9sbGFibGUuaXMtcmVwbGFjZWQgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxsc3tmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSAuZGF0YWdyaWQtY29sdW1uOmxhc3QtY2hpbGQgLmRhdGFncmlkLWNvbHVt''@;'; put 'put ''bi1zZXBhcmF0b3J7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctZmxleHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uZGF0YWdyaWQtcm93LWZsZXggLmRhdGFncmlkLXJvdy1kZXRhaWx7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFw''@;'; put 'put ''fS5kYXRhZ3JpZC1yb3ctZmxleCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowfS5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMsLmRhdGFncmlkLXNjcm9sbGluZy1kZXRhaWxze2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpyb3cg''@;'; put 'put ''bm93cmFwfS5kYXRhZ3JpZC1hY3Rpb24tYmFye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtYWN0aW9uLWJhcn4uZGF0YWdyaWQtc3Bpbm5lcntoZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSk7dG9wOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWhlYWRlcntwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDo1MDE7d2lkdGg6YXV0b30uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWJvdHRvbTpub25lfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvd3tiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7ei1pbmRleDo1MDJ9LmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQtcm93Omhv''@;'; put 'put ''dmVyLC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvdzpob3ZlciAuZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZXtmbGV4LWRpcmVjdGlvbjpyb3d9''@;'; put 'put ''LmRhdGFncmlkLXRhYmxlLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDoxMDAlfS5kYXRhZ3JpZC10YWJsZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjEgMSBhdXRvfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtYm9keXt3aWR0aDphdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7ZGlzcGxheTpmbGV4O2ZsZXg6MSAx''@;'; put 'put ''IGF1dG87dmVydGljYWwtYWxpZ246dG9wO2JvcmRlcjowfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtv''@;'; put 'put ''dXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGNsci1kZy1maWx0ZXIsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLXN0cmluZy1maWx0ZXIsLmRhdGFncmlkLXRhYmxl''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLW51bWVyaWMtZmlsdGVye2Rpc3BsYXk6ZmxleDtvcmRlcjo5OTttYXJnaW4tbGVmdDphdXRvO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXR7d2lk''@;'; put 'put ''dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdy''@;'; put 'put ''aWQtZmlsdGVyLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNr''@;'; put 'put ''Z3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtmbG9hdDpyaWdodDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21pbi1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLWRhdGFncmlkLWZpbHRlci10b2dnbGUtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6''@;'; put 'put ''ZTpjb250YWlufWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNkcy1pY29uLC5kYXRhZ3JpZC10''@;'; put 'put ''YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVy''@;'; put 'put ''IGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29s''@;'; put 'put ''dW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXJlZCBjZHMtaWNvbiwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmls''@;'; put 'put ''dGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXJlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tZmxleHtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3ot''@;'; put 'put ''YXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTt0''@;'; put 'put ''ZXh0LWFsaWduOmxlZnQ7ZmxleDoxIDEgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpjZW50ZXI7ZGlzcGxheTpmbGV4fWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGV7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlk''@;'; put 'put ''LXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbi5idG57aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRp''@;'; put 'put ''dGxlIC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDpjYWxjKC0xKjEwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1uLXRpdGxlOmhvdmVy''@;'; put 'put ''e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc29ydC1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpO21h''@;'; put 'put ''cmdpbi1sZWZ0OmF1dG87aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''LXRpdGxlIC5zb3J0LWljb246aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc29ydC1pY29uOmFjdGl2ZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3J7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjAgMCBhdXRvO3dpZHRoOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7b3JkZXI6MTAwO21hcmdpbi1sZWZ0OmF1dG87aGVpZ2h0OjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNv''@;'; put 'put ''bHV0ZTtoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3ItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aCk7cmlnaHQ6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRh''@;'; put 'put ''Z3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4taGFuZGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21h''@;'; put 'put ''cmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO3JpZ2h0OmNh''@;'; put 'put ''bGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7Y3Vyc29yOmNvbC1yZXNpemU7aGVpZ2h0OmNhbGMoMTAwJSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci13aWR0aC0xMDApKTt6LWluZGV4OjUwMX1idXR0b24uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLWhhbmRsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAu''@;'; put 'put ''ZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2Vye3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2Rpc3BsYXk6bm9uZTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2hlaWdo''@;'; put 'put ''dDowO2JvcmRlci1yaWdodC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7''@;'; put 'put ''Y3Vyc29yOmNvbC1yZXNpemV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IgLmRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlci5vbi1hcnJvdy1rZXktcmVzaXple3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLW91dH0u''@;'; put 'put ''ZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZXhjZWVkZWQtbWF4e2JvcmRlci1yaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIGRvdHRlZCB2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1k''@;'; put 'put ''YXJrKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3R7bWFyZ2luOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtdGFi''@;'; put 'put ''bGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRh''@;'; put 'put ''Z3JpZC1zZWxlY3QsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1yb3ctYWN0aW9uc3ttYXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVt''@;'; put 'put ''bi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGx7ZmxleDoxIDEgYXV0bzt0ZXh0LWFsaWduOmxlZnQ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpO2JvcmRlcjowfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1maXhlZC1jb2x1bW57ZmxleDowIDAgdmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTtt''@;'; put 'put ''YXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtcm93LWFjdGlvbnN7YmFja2dyb3VuZDowIDB9LmRh''@;'; put 'put ''dGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3JpZC1ob3Jpem9udGFsLXBhZGRpbmcpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4dC1hbGlnbjpj''@;'; put 'put ''ZW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46''@;'; put 'put ''MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQt''@;'; put 'put ''Y2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGUgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGU6YWN0aXZlIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRv''@;'; put 'put ''Z2dsZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi10b2dnbGUtY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuY2xyLXRvZ2dsZS13cmFwcGVye21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93LWFjdGlvbnMsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3Bvc2l0aW9u''@;'; put 'put ''OnJlbGF0aXZlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlk''@;'; put 'put ''LXRhYmxlIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlk''@;'; put 'put ''LXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxl''@;'; put 'put ''LWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b246YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0''@;'; put 'put ''YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b246YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTt0b3A6MDtsZWZ0OjB9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXJ7ZmxleDoxIDEgYXV0bztk''@;'; put 'put ''aXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcGxhY2Vob2xkZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcik7ZGlzcGxheTpub25lO3dpZHRoOjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci5kYXRhZ3Jp''@;'; put 'put ''ZC1lbXB0eXtib3JkZXItdG9wOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''OSk7Zm9udC1zaXplOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWxpbmUtaGVpZ2h0''@;'; put 'put ''KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb2xvcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlciAuZGF0YWdyaWQtcGxhY2Vob2xk''@;'; put 'put ''ZXItaW1hZ2V7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5k''@;'; put 'put ''LWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2MCUyMDcyJTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1s''@;'; put 'put ''bnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2VsbGlwc2UlMjBpZCUzRCUyMnBhdGgtMSUyMiUyMGN4JTNEJTIyMzAlMjIlMjBjeSUz''@;'; put 'put ''RCUyMjYxLjc2NjY2NjclMjIlMjByeCUzRCUyMjE1LjQ1MTI5MDQlMjIlMjByeSUzRCUyMjQuNzMzMzMzMzMlMjIlM0UlM0MlMkZlbGxpcHNlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbWFzayUyMGlkJTNEJTIybWFzay0yJTIyJTIwbWFza0NvbnRlbnRVbml0cyUzRCUyMnVz''@;'; put 'put ''ZXJTcGFjZU9uVXNlJTIyJTIwbWFza1VuaXRzJTNEJTIyb2JqZWN0Qm91bmRpbmdCb3glMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjIwJTIyJTIwd2lkdGglM0QlMjIzMC45MDI1ODA4JTIyJTIwaGVpZ2h0JTNEJTIyOS40NjY2NjY2NyUyMiUyMGZpbGwlM0QlMjJ3aGl0ZSUyMiUzRSUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCUyMiUyM3BhdGgtMSUyMiUzRSUzQyUyRnVzZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm1hc2slM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTNDZyUyMGlkJTNEJTIyUGFnZS0xJTIyJTIwc3Ryb2tlJTNEJTIybm9uZSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjElMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwaWQl''@;'; put 'put ''M0QlMjJBcnRib2FyZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMGlkJTNEJTIyT3ZhbC0xMCUyMiUyMHN0cm9rZSUzRCUyMiUyM0MxREZFRiUyMiUyMG1hc2slM0QlMjJ1cmwoJTIzbWFzay0yKSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIu''@;'; put 'put ''OCUyMiUyMHN0cm9rZS1saW5lY2FwJTNEJTIyc3F1YXJlJTIyJTIwc3Ryb2tlLWRhc2hhcnJheSUzRCUyMjMlMkM2JTJDMyUyQzUlMjIlMjB4bGluayUzQWhyZWYlM0QlMjIlMjNwYXRoLTElMjIlM0UlM0MlMkZ1c2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''M0NwYXRoJTIwZCUzRCUyMk0zOC40NjEzNjQ3JTJDMTguMTY0MjQ1NiUyMEwzMC45ODkwMTM3JTJDMzQuOTE0MTg0NiUyMEwzMSUyQzQ3JTIwTDMyLjU5Nzc3ODMlMkM0Ni41MTY3MjM2JTIwTDMyLjU5Nzc3ODMlMkMzNC45MTQxODQ2JTIwTDUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwQzUx''@;'; put 'put ''LjA2NzMyMTglMkMxNS43NTYwNDI1JTIwNDguNjI5NTE2NiUyQzE2LjY1NDI5NjklMjA0NC45NjI4OTA2JTJDMTcuMzM5MjMzNCUyMEM0MS4yOTYyNjQ2JTJDMTguMDI0MTY5OSUyMDM4LjQ2MTM2NDclMkMxOC4xNjQyNDU2JTIwMzguNDYxMzY0NyUyQzE4LjE2NDI0NTYlMjBaJTIyJTIwaWQl''@;'; put 'put ''M0QlMjJQYXRoLTE5NSUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGQlM0QlMjJNNC43NDYzOTIyNiUyQzEyLjU2NjE4NTUlMjBMNC42MjA2NTcyNiUyQzEyLjE2MDUzNDgl''@;'; put 'put ''MjBMNS4zNTE1NDE0JTJDMTEuMTYyNTA0NCUyMEw1Ljc3NjIyMzg1JTJDMTEuMTU5OTM5JTIwTDYuMjA5MzYzMDklMkMxMi41NTczNDgxJTIwTDQuNzQ2MzkyMjYlMkMxMi41NjYxODU1JTIwWiUyME02LjIwOTM2MzA5JTJDMTIuNTU3MzQ4MSUyMEw2LjMyNTQyNjMyJTJDMTIuOTMxNzk1NCUy''@;'; put 'put ''MEwyOC40OTYzODU1JTJDMzQuODc5NjcxOCUyMEwyOC40OTYzODU1JTJDNDcuODA5NjY5MSUyMEwzMi42JTJDNDYuNDgzNjUxMyUyMEwzMi42JTJDMzQuODk5MjM2NSUyMEw1My45NzM0OTQlMkMxMi43MDM1ODEzJTIwTDUzLjk3MzQ5NCUyQzEyLjI2ODgyMDElMjBMNi4yMDkzNjMwOSUyQzEy''@;'; put 'put ''LjU1NzM0ODElMjBaJTIwTTU1LjM3MzQ5NCUyQzEwLjg2MDMzNzYlMjBMNTUuMzczNDk0JTJDMTMuMjY4MDY2NCUyMEwzNCUyQzM1LjQ2MzcyMTYlMjBMMzQlMkM0Ny41MDI1NDAxJTIwTDI3LjA5NjM4NTUlMkM0OS43MzMzMzMzJTIwTDI3LjA5NjM4NTUlMkMzNS40NjM3MjE5JTIwTDUuMDkx''@;'; put 'put ''Nzk2ODglMkMxMy42ODA1NDIlMjBMNC4zMTMyNTMwMSUyQzExLjE2ODc3NjQlMjBMNTUuMzczNDk0JTJDMTAuODYwMzM3NiUyMFolMjIlMjBpZCUzRCUyMlBhdGgtMTQ5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlM0NlbGxpcHNlJTIwaWQlM0QlMjJPdmFsLTklMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwY3glM0QlMjIzMCUyMiUyMGN5JTNEJTIyMTEuNzg1NjU0JTIyJTIwcnglM0QlMjIyNiUyMiUyMHJ5JTNEJTIyNi43ODU2NTQwMSUyMiUzRSUzQyUyRmVsbGlwc2Ul''@;'; put 'put ''M0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zMCUyQzE3LjE3MTMwOCUyMEMzNi44NzcyMTc3JTJDMTcuMTcxMzA4JTIwNDMuMzExMjI4MiUyQzE2LjQ2MTA3MDElMjA0OC4wMzEyMzcxJTJDMTUuMjI5MjEwNiUyMEM1MC4yNzc3NjEx''@;'; put 'put ''JTJDMTQuNjQyODk3NyUyMDUyLjA1MDc2MTklMkMxMy45NTc5Njc3JTIwNTMuMjIxNjIzMSUyQzEzLjIzNTQ5NzMlMjBDNTQuMTkzODU2NSUyQzEyLjYzNTU4ODYlMjA1NC42JTJDMTIuMTE3NTg5MSUyMDU0LjYlMkMxMS43ODU2NTQlMjBDNTQuNiUyQzExLjQ1MzcxODklMjA1NC4xOTM4NTY1''@;'; put 'put ''JTJDMTAuOTM1NzE5NCUyMDUzLjIyMTYyMzElMkMxMC4zMzU4MTA3JTIwQzUyLjA1MDc2MTklMkM5LjYxMzM0MDMyJTIwNTAuMjc3NzYxMSUyQzguOTI4NDEwMzQlMjA0OC4wMzEyMzcxJTJDOC4zNDIwOTc0NiUyMEM0My4zMTEyMjgyJTJDNy4xMTAyMzc5NSUyMDM2Ljg3NzIxNzclMkM2LjQl''@;'; put 'put ''MjAzMCUyQzYuNCUyMEMyMy4xMjI3ODIzJTJDNi40JTIwMTYuNjg4NzcxOCUyQzcuMTEwMjM3OTUlMjAxMS45Njg3NjI5JTJDOC4zNDIwOTc0NiUyMEM5LjcyMjIzODg2JTJDOC45Mjg0MTAzNCUyMDcuOTQ5MjM4MTQlMkM5LjYxMzM0MDMyJTIwNi43NzgzNzY4OSUyQzEwLjMzNTgxMDclMjBD''@;'; put 'put ''NS44MDYxNDM1JTJDMTAuOTM1NzE5NCUyMDUuNCUyQzExLjQ1MzcxODklMjA1LjQlMkMxMS43ODU2NTQlMjBDNS40JTJDMTIuMTE3NTg5MSUyMDUuODA2MTQzNSUyQzEyLjYzNTU4ODYlMjA2Ljc3ODM3Njg5JTJDMTMuMjM1NDk3MyUyMEM3Ljk0OTIzODE0JTJDMTMuOTU3OTY3NyUyMDkuNzIy''@;'; put 'put ''MjM4ODYlMkMxNC42NDI4OTc3JTIwMTEuOTY4NzYyOSUyQzE1LjIyOTIxMDYlMjBDMTYuNjg4NzcxOCUyQzE2LjQ2MTA3MDElMjAyMy4xMjI3ODIzJTJDMTcuMTcxMzA4JTIwMzAlMkMxNy4xNzEzMDglMjBaJTIwTTMwJTJDMTguNTcxMzA4JTIwQzE1LjY0MDU5NjUlMkMxOC41NzEzMDglMjA0''@;'; put 'put ''JTJDMTUuNTMzMjY3MiUyMDQlMkMxMS43ODU2NTQlMjBDNCUyQzguMDM4MDQwNzglMjAxNS42NDA1OTY1JTJDNSUyMDMwJTJDNSUyMEM0NC4zNTk0MDM1JTJDNSUyMDU2JTJDOC4wMzgwNDA3OCUyMDU2JTJDMTEuNzg1NjU0JTIwQzU2JTJDMTUuNTMzMjY3MiUyMDQ0LjM1OTQwMzUlMkMxOC41''@;'; put 'put ''NzEzMDglMjAzMCUyQzE4LjU3MTMwOCUyMFolMjIlMjBpZCUzRCUyMk92YWwtOS1Db3B5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0xOC4yNjA4NjQzJTJD''@;'; put 'put ''Ny4xNDU2Mjk4OCUyMEwyMi43MjczNTYlMkMxNi45MDQ3MjQxJTIwQzIyLjcyNzM1NiUyQzE2LjkwNDcyNDElMjAxNS4zMDA2NTkyJTJDMTYuMzkxMTc0MyUyMDEwLjI3NjAwMSUyQzE0Ljc1MTE1OTclMjBDNS4yNTEzNDI3NyUyQzEzLjExMTE0NSUyMDUuMzgwMzEwMDYlMkMxMS44Mjg0MzAy''@;'; put 'put ''JTIwNS4zODAzMTAwNiUyQzExLjY4ODI5MzUlMjBDNS4zODAzMTAwNiUyQzEwLjQ4MzI4MzElMjA4LjE2NjMzMTUyJTJDOS40MTg3NzcxNiUyMDExLjExNDU2MyUyQzguNTczMjQyMTklMjBDMTQuNTQ5MzE5JTJDNy41ODgxNzQ5MiUyMDE4LjI2MDg2NDMlMkM3LjE0NTYyOTg4JTIwMTguMjYw''@;'; put 'put ''ODY0MyUyQzcuMTQ1NjI5ODglMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NiUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElM0MlMkZzdmclM0Ui''@;'; put 'put ''KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4uZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbi5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1zY3JvbGxhYmxl''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5kbGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMg''@;'; put 'put ''LmRhdGFncmlkLWNlbGw6bm90KC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0KTpub3QoLmRhdGFncmlkLXJvdy1hY3Rpb25zKTpub3QoLmRhdGFncmlkLXNlbGVjdCl7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNl''@;'; put 'put ''bGx7ZGlzcGxheTpibG9jaztwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLXJvdy1y''@;'; put 'put ''ZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5kYXRhZ3JpZC1mb290ZXJ7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyBub3dyYXA7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6c3RyZXRjaDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQt''@;'; put 'put ''d2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24t''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvb3Rlci1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItcmFkaXVzLTEwMCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2xyLWRhdGFncmlkLWZvb3Rlci1wYWdpbmF0aW9u''@;'; put 'put ''LWdhcCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1zaXple2Rpc3BsYXk6YmxvY2s7ZmxleDoxIDEgYXV0bzt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1hbGlnbjpyaWdodH0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLXNpemUgLmNsci1wYWdlLXNpemUtc2VsZWN0e2ZvbnQt''@;'; put 'put ''c2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxs''@;'; put 'put ''Y2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3Zl''@;'; put 'put ''cnRpY2FsLWFsaWduOm1pZGRsZX0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9ue3doaXRlLXNwYWNlOm5vd3JhcH0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWxpc3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWQtZm9vdGVyIC5j''@;'; put 'put ''b2x1bW4tc3dpdGNoLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9ue21pbi13aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTgpO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1wYWRkaW5nKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtY29sb3IpO21hcmdpbjowfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2ds''@;'; put 'put ''ZS0tYWN0aW9uLmRpc2FibGVkLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkOmhv''@;'; put 'put ''dmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkOmhvdmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkOmFjdGl2ZSwuZGF0''@;'; put 'put ''YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpkaXNhYmxlZDphY3RpdmV7Y3Vyc29yOm5vdC1hbGxvd2VkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1kaXNhYmxlZC1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvcil9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1h''@;'; put 'put ''Y3Rpb246aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yKX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjphY3RpdmUsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1h''@;'; put 'put ''Y3Rpb246Zm9jdXN7Ym94LXNoYWRvdzpub25lO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtYWN0aXZlLWNvbG9yKTtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLWZvb3RlciAuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfS5jbHItZm9ybS1jb250cm9sLWRp''@;'; put 'put ''c2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7Y3Vyc29yOmRlZmF1bHQ7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJs''@;'; put 'put ''ZWQgLmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpfS5kYXRhZ3JpZC1zcGlubmVye3Bv''@;'; put 'put ''c2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQpO3otaW5kZXg6NTkwfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGx7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2Vs''@;'; put 'put ''bC1jb21wYWN0LXBhZGRpbmcpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtICguNSp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieSkpKX0uZGF0YWdy''@;'; put 'put ''aWQtY29tcGFjdCAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3R7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWRldGFpbC1jYXJldC5kYXRhZ3JpZC1jZWxse3BhZGRpbmc6MH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0''@;'; put 'put ''YWdyaWQtY2VsbCBjbHItaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKTt0cmFuc2Zvcm06dHJhbnNsYXRlWShj''@;'; put 'put ''YWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCBjZHMtaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1ib3R0b206''@;'; put 'put ''Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCAuYmFkZ2V7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTEpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHt0ZXh0LWFsaWduOmNlbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuc3Bpbm5lcnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmRhdGFn''@;'; put 'put ''cmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjow''@;'; put 'put ''O3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2xyLWRhdGFncmlk''@;'; put 'put ''LWNvbXBhY3Qtb3V0bGluZS1vZmZzZXQpfWJ1dHRvbi5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1j''@;'; put 'put ''YXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29ue21hcmdpbjowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFncmlkLWNlbGx7cGFkZGluZzowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFn''@;'; put 'put ''cmlkLWNvbHVtbntwYWRkaW5nLXRvcDpjYWxjKHZhcigtLWNsci10YWJsZS1jb21wYWN0LXZlcnRpY2FsLXBhZGRpbmcpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cGFkZGluZy1ib3R0b206dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGluZyl9LmRhdGFncmlk''@;'; put 'put ''LWNvbXBhY3QgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0IC5zaWducG9zdC10cmlnZ2VyIGNkcy1pY29uOm5vdChbc2hhcGU9aW5mby1jaXJjbGVdLFtzaGFwZT1leGNsYW1hdGlvbi10cmlhbmdsZV0sW3NoYXBlPWV4Y2xhbWF0aW9uLWNpcmNsZV0sW3NoYXBlPWNoZWNr''@;'; put 'put ''LWNpcmNsZV0sW3NoYXBlPWluZm9dLFtzaGFwZT1lcnJvcl0pLC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBvc3QtdHJpZ2dlciBjbHItaWNvbjpub3QoW3NoYXBlPWluZm8tY2lyY2xlXSxbc2hhcGU9ZXhjbGFtYXRpb24tdHJp''@;'; put 'put ''YW5nbGVdLFtzaGFwZT1leGNsYW1hdGlvbi1jaXJjbGVdLFtzaGFwZT1jaGVjay1jaXJjbGVdLFtzaGFwZT1pbmZvXSxbc2hhcGU9ZXJyb3JdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1jb21wYWN0''@;'; put 'put ''IC5kYXRhZ3JpZC1mb290ZXJ7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLXZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9''@;'; put 'put ''LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9u''@;'; put 'put ''e291dGxpbmUtb2Zmc2V0OnZhcigtLWNsci1kYXRhZ3JpZC1jb21wYWN0LW91dGxpbmUtb2Zmc2V0KX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyIC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVy''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7dG9wOjB9LmRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbntmbGV4OjEgMSBhdXRvO2ZsZXgtd3JhcDpub3dyYXA7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpyaWdodDttYXJnaW46YXV0byAw''@;'; put 'put ''fS5wYWdpbmF0aW9uLWxpc3R7bGlzdC1zdHlsZTpub25lO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50e2ZvbnQtc2l6ZTp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3JvdW5kOjAgMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci1yYWRpdXMtMTAwKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tY3VycmVudDpmb2N1cywucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0''@;'; put 'put ''aW9uLWN1cnJlbnQuY2xyLWZvY3Vze2JhY2tncm91bmQ6MCAwO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1mb2N1cy1jb2xvcil9LnBhZ2luYXRpb24tbGlzdD4q''@;'; put 'put ''e3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1sYXN0LC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXMsLnBhZ2luYXRpb24tbGlzdCAucGFn''@;'; put 'put ''aW5hdGlvbi1uZXh0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWlufS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3Q6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5h''@;'; put 'put ''dGlvbi1sYXN0OmRpc2FibGVkLC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXM6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1uZXh0OmRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpO2N1cnNvcjpub3QtYWxsb3dl''@;'; put 'put ''ZDtvcGFjaXR5OjF9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLXByZXZpb3Vze21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tbGFzdCwucGFnaW5h''@;'; put 'put ''dGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucGFnaW5hdGlvbi1saXN0IGJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFu''@;'; put 'put ''Y2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1idG4tY29sb3IpO2N1cnNvcjpwb2ludGVyfWJ1dHRvbi5wYWdpbmF0aW9uLWxp''@;'; put 'put ''c3QgYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm97Ym9yZGVyOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7d2lkdGg6MDtmbGV4OjAgMCBhdXRvIWltcG9ydGFudDttaW4td2lkdGg6MCFpbXBvcnRhbnQ7ZGlzcGxheTpibG9jayFpbXBvcnRh''@;'; put 'put ''bnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDt0b3A6MDtsZWZ0OjB9LmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvfS5kYXRhZ3JpZC1p''@;'; put 'put ''bm5lci13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0bzttaW4td2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3Jh''@;'; put 'put ''cHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBkaXYuZGF0YWdyaWQtdGFibGV7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcj4uY2RrLXZpcnR1YWwtc2Ny''@;'; put 'put ''b2xsYWJsZSBkaXYuZGF0YWdyaWQtdGFibGV7b3ZlcmZsb3c6dW5zZXR9LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVyIGNsci1kZy1jZWxse3dpZHRoOjEwMCUhaW1wb3J0YW50fS5kYXRhZ3JpZC1kZXRhaWwtb3Bl''@;'; put 'put ''bj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBjbHItZGctY29sdW1uOmZpcnN0LWNoaWxke3dpZHRoOmF1dG8haW1wb3J0YW50fS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItcmln''@;'; put 'put ''aHQ6bm9uZX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWlubmVyLXdyYXBwZXJ7d2lkdGg6MzQlfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVyLC5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcm93e2JvcmRlci1yaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtZm9vdGVye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmRhdGFncmlkLWRldGFpbC1v''@;'; put 'put ''cGVuIC5wYWdpbmF0aW9ue3dpZHRoOjEwMCV9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3R7dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1saXN0e21hcmdp''@;'; put 'put ''bi1yaWdodDowfS5kYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW57cG9zaXRpb246cmVsYXRpdmV9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7dG9wOmNhbGMoMTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3JpZ2h0OjB9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjphZnRlcntjb250ZW50OiIi''@;'; put 'put ''O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvcik7dG9wOmNhbGMoMTEqKDFyZW0v''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LmRhdGFncmlkLWRldGFpbC1wYW5le21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3Jk''@;'; put 'put ''ZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3IpO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFk''@;'; put 'put ''aXVzLTEwMCk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtYmctY29sb3IpO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZsZXgt''@;'; put 'put ''Z3JvdzoyO3dpZHRoOjY2JX0uZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmF1dG87aGVpZ2h0OjEwMCU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudC1wYWRkaW5nKX0u''@;'; put 'put ''ZGF0YWdyaWQtZGV0YWlsLWJvZHl7ZmxleDoxIDEgYXV0bztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLWJvZHktdGV4dC1jb2xvcil9LmRhdGFncmlkLWRldGFpbC1oZWFkZXJ7ZmxleDowIDAgYXV0bztmb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWln''@;'; put 'put ''aHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi10b3A6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyLXRp''@;'; put 'put ''dGxle2ZsZXg6MSAxIGF1dG87Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZXtmbGV4OjEgMSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtkaXNwbGF5''@;'; put 'put ''OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZSAuYnRuLmJ0bi1saW5re21pbi13aWR0aDphdXRvO21hcmdpbjowO3BhZGRpbmctcmlnaHQ6MH0uZGF0YWdyaWQtZGV0YWlsLWhlYWRlciAuZGF0''@;'; put 'put ''YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UgLmJ0bi5idG4tbGluayBjZHMtaWNvbntoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7bWluLWhlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLWNsb3NlLWNvbG9yKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0''@;'; put 'put ''e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uey13''@;'; put 'put ''ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpw''@;'; put 'put ''b2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9YnV0dG9uLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtZGV0YWlsLWNh''@;'; put 'put ''cmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmRpc2FibGVkIGNkcy1pY29uLmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0''@;'; put 'put ''YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbi5pcy1vcGVuIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbntib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJl''@;'; put 'put ''dC1pY29uLW9wZW4tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbi1vcGVuLWljb24tY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNv''@;'; put 'put ''bG9yKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0LmRhdGFncmlkLWNvbHVtbntwYWRkaW5nOnZhcigtLWNsci10YWJsZS10b3BjZWxscGFkZGluZykgdmFyKC0tY2xyLXRh''@;'; put 'put ''YmxlLWNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmcpfS5kYXRhZ3JpZC1kZXRhaWwtb3ZlcmxheS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcnt3aWR0aDowO21pbi13aWR0aDp1''@;'; put 'put ''bnNldH0uZGF0YWdyaWQtZGV0YWlsLW92ZXJsYXkgLmRhdGFncmlkLWRldGFpbC1wYW5le2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29s''@;'; put 'put ''b3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7d2lkdGg6MTAwJX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsuZGF0YWdyaWQtZGV0YWlsLW9wZW4+LmRhdGFncmlkLW91dGVyLXdyYXBwZXI+LmRhdGFncmlkLWlu''@;'; put 'put ''bmVyLXdyYXBwZXJ7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1kZXRhaWwtcGFuZXtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtYm9yZGVyLWNvbG9yKTti''@;'; put 'put ''b3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfX0uY29sdW1uLXN3aXRjaHtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJv''@;'; put 'put ''cmRlci1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdyk7d2lkdGg6Y2FsYygyNTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoxMDUwfS5jb2x1bW4t''@;'; put 'put ''c3dpdGNoIC5zd2l0Y2gtaGVhZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1''@;'; put 'put ''YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfS5jb2x1bW4tc3dp''@;'; put 'put ''dGNoIC5zd2l0Y2gtaGVhZGVyIGgxLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgyLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgzLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg0LC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg1LC5jb2x1bW4tc3dp''@;'; put 'put ''dGNoIC5zd2l0Y2gtaGVhZGVyIGg2e2NvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2Vp''@;'; put 'put ''Z2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW46MH0uY29sdW1uLXN3aXRjaCAuc3dp''@;'; put 'put ''dGNoLWhlYWRlciBidXR0b257bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXIt''@;'; put 'put ''Zm9udC1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9uIGNkcy1pY29uOmhvdmVye2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWhvdmVyLWNvbG9yKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlciBidXR0b24g''@;'; put 'put ''Y2RzLWljb246YWN0aXZle2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWFjdGl2ZS1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1jb250ZW50e21heC1oZWlnaHQ6Y2FsYygzMDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO292''@;'; put 'put ''ZXJmbG93LXk6YXV0bzttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtY29udGVudCBsaXtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpO3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5idG57bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5hY3Rpb24tcmlnaHR7ZGlzcGxheTpmbGV4O2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpmbGV4LWVuZH0uZGF0YWdyaWQtZmlsdGVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lk''@;'; put 'put ''dGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3cp''@;'; put 'put ''O2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1jbG9zZS13cmFwcGVye3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQt''@;'; put 'put ''ZmlsdGVyLWNsb3NlLXdyYXBwZXIgLmNsb3Nle2Zsb2F0Om5vbmU7Zm9udC1zaXplOnVuc2V0fS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1hcHBseXttYXJnaW4tYm90dG9tOjB9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybXtkaXNwbGF5''@;'; put 'put ''OmZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybSBpbnB1dC5kYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dHt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE1KX0uZGF0YWdyaWQtZmls''@;'; put 'put ''dGVyIC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJn''@;'; put 'put ''aW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yKTtib3gt''@;'; put 'put ''c2hhZG93OnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93KTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2ZvbnQtd2VpZ2h0OjQwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSk7Ym9yZGVyLXRvcDp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9u''@;'; put 'put ''LWFycm93LXNpemUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKTtib3JkZXIt''@;'; put 'put ''cmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcil9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTAwJTtoZWlnaHQ6''@;'; put 'put ''MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXRvcDpjYWxjKHZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTEpKSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOmNhbGModmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC13aWR0aDpjYWxjKHZhcigt''@;'; put 'put ''LWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJm''@;'; put 'put ''bG93IC5hY3Rpb24taXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0u''@;'; put 'put ''YWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3Zlcntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06aG92ZXIuYWN0aXZl''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTphY3RpdmUuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNv''@;'; put 'put ''bG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpmb2N1c3t6LWluZGV4OmluaGVyaXR9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWR7cG9p''@;'; put 'put ''bnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9''@;'; put 'put ''LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6aG92ZXIsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDowIDB9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlz''@;'; put 'put ''YWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGV7ZGlzcGxheTpibG9ja30uZGF0YWdyaWQtaG9z''@;'; put 'put ''dC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWZvb3RlciwuZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LW1hc3RlciwuZGF0YWdyaWQtaG9z''@;'; put 'put ''dC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LWNsaWNrYWJsZXtkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxle2Rpc3BsYXk6dGFibGU7dGFibGUtbGF5b3V0OmF1dG99LmRh''@;'; put 'put ''dGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXJ7ZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXB9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFn''@;'; put 'put ''cmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbntkaXNwbGF5OnRhYmxlLWNlbGw7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5k''@;'; put 'put ''YXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24taGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVy''@;'; put 'put ''LXN0eWxlOnNvbGlkO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21jZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFi''@;'; put 'put ''bGUgLmRhdGFncmlkLXJvd3tkaXNwbGF5OnRhYmxlLXJvd30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLXJvdyBjbHItZXhwYW5kYWJsZS1hbmltYXRpb257ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1o''@;'; put 'put ''b3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWJvZHktbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21jZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZC1ob3N0LmRhdGFn''@;'; put 'put ''cmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXIsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlk''@;'; put 'put ''LWZpeGVkLWNvbHVtbntkaXNwbGF5Om5vbmV9QGtleWZyYW1lcyBjbHItc2tlbGV0b24tbG9hZGluZ3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6MH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6LTIwMCV9fS5mYWRle29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2UtaW4t''@;'; put 'put ''b3V0O3dpbGwtY2hhbmdlOm9wYWNpdHl9LmZhZGUuaW57b3BhY2l0eToxfS5mYWRlRG93bntvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI1JSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlLWluLW91dCx0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdlOm9w''@;'; put 'put ''YWNpdHksdHJhbnNmb3JtfS5mYWRlRG93bi5pbntvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX0uc2tlbGV0b24tbG9hZGluZzpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNrZWxldG9uLWxvYWRpbmctZ3JhZGllbnQpO2FuaW1hdGlvbjp2YXIoLS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1za2VsZXRvbi1kdXJhdGlvbikgY2xyLXNrZWxldG9uLWxv''@;'; put 'put ''YWRpbmcgdmFyKC0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLWluLW91dCkgaW5maW5pdGU7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXdpemFy''@;'; put 'put ''ZC1tYWluLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJhY2tncm91bmQpOy0tY2xyLXdpemFyZC1tYWluLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci13aXphcmQtc3RlcG5hdi1iZ2NvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tY29sb3ItYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWNvbG9yLXNlbGVjdGVkKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7''@;'; put 'put ''LS1jbHItd2l6YXJkLXN0ZXBuYXYtYm9yZGVyLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0''@;'; put 'put ''ZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWFjdGl2ZS1iZ2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7''@;'; put 'put ''LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYmdjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYWN0aXZlLWJnY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWhvdmVyLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3Jv''@;'; put 'put ''dW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1hY3RpdmUtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWVycm9yLWljb24t''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstY29tcGxldGUtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWFjdGl2ZS1iZy1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLXBhZGRpbmc6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHItd2l6YXJkLXN0''@;'; put 'put ''ZXBuYXYtaXRlbS1lcnJvci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC10aXRsZS10ZXh0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQ6YXV0bzstLWNsci13aXph''@;'; put 'put ''cmQtaGVhZGVyLWFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvci0taG92ZXJlZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci13aXph''@;'; put 'put ''cmQtYm94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0zMDApOy0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXdpemFyZC1jb250ZW50LWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LmNsci13aXphcmQgLm1vZGFsLWRpYWxvZ3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2hhZG93OnZhcigtLWNsci13aXphcmQtYm94LXNoYWRvdyk7aGVpZ2h0OjUw''@;'; put 'put ''JTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7Ym9yZGVyLXJhZGl1czowIHZhcigtLWNsci13aXphcmQtYm9yZGVyLXJhZGl1cykgdmFyKC0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzKSAwO2JveC1zaGFkb3c6bm9uZTtwYWRkaW5nOjA7ZmxleDoyIDIgYXV0''@;'; put 'put ''bzt3aWR0aDo2NiU7aGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLXdpemFyZCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJTtw''@;'; put 'put ''YWRkaW5nOnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSAwfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZXtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXRpdGxlLXRleHQpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7''@;'; put 'put ''d2lkdGg6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwtYm9keXtmbGV4OjEgMSBhdXRvO2NvbG9yOnZhcigtLWNsci13aXphcmQtbWFpbi10ZXh0LWNvbG9yKTt3aWR0aDoxMDAlO3BhZGRpbmc6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xyLXdpemFyZCAubW9kYWwtZm9vdGVy''@;'; put 'put ''e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtmbGV4OjAgMCB2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO2hlaWdodDp2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1mb290ZXItaGVpZ2h0KTttYXgtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNsci13aXphcmQtZm9vdGVyLWhlaWdodCk7cGFkZGluZzowIHZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1idG57bWFyZ2luOjA7bWF4LXdpZHRoOjEwMCU7ZGlzcGxheTpibG9j''@;'; put 'put ''a30uY2xyLXdpemFyZCAubW9kYWwtdGl0bGUtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4OjAgMSBhdXRvO3dpZHRoOjEwMCU7b3V0bGluZTowfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZS13cmFwcGVye3dpZHRoOjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWhlYWRlci1hY3Rpb25z''@;'; put 'put ''LXdyYXBwZXJ7ZmxleDoxIDAgYXV0bztoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci13aXphcmQgLmNsci13aXphcmQt''@;'; put 'put ''aGVhZGVyLWFjdGlvbi13cmFwcGVye2Rpc3BsYXk6aW5saW5lLWZsZXh9LmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbntoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2JvcmRlcjow''@;'; put 'put ''O3BhZGRpbmc6MDttYXJnaW46MDttaW4td2lkdGg6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtsaW5lLWhlaWdodDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2NvbG9yOnZhcigtLWNsci13''@;'; put 'put ''aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvcik7dHJhbnNpdGlvbjpjb2xvciBsaW5lYXIgLjJzfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gYXtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhl''@;'; put 'put ''YWRlci1hY3Rpb246aG92ZXIsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjphY3RpdmUsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjpmb2N1c3tjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3ItLWhvdmVyZWQpfS5jbHIt''@;'; put 'put ''d2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gY2RzLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2Up''@;'; put 'put ''fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcntmbGV4OjEgMSBhdXRvO2hlaWdodDoxMDAlO3dpZHRoOjM0JTttYXgtd2lkdGg6MzQlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3JkZXI6LTE7b3ZlcmZsb3c6aGlkZGVuO292ZXJmbG93LXk6YXV0''@;'; put 'put ''bztib3JkZXItcmlnaHQ6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYmdjb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHIt''@;'; put 'put ''d2l6YXJkLWJvcmRlci1yYWRpdXMpIDAgMCB2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZzowIDAgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSB2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2Up''@;'; put 'put ''O2Rpc3BsYXk6YmxvY2s7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO3dpZHRoOjEwMCU7ZmxleDoxIDEgYXV0b30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpc3R7ZGlzcGxheTpibG9jaztib3gtc2hhZG93Om5vbmU7Y291bnRlci1yZXNldDphO3doaXRl''@;'; put 'put ''LXNwYWNlOm5vd3JhcDtoZWlnaHQ6YXV0bztsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW46MDt3aWR0aDoxMDAlfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbXtkaXNwbGF5OmJsb2NrO2JvcmRlci1sZWZ0OnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItc2l6''@;'; put 'put ''ZSkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0tYm9yZGVyLWNvbG9yKTttYXJnaW4tYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1z''@;'; put 'put ''dGVwbmF2LWJnY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSBidXR0b24uY2xyLXdpemFyZC1zdGVwbmF2LWxpbmt7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmRpc2Fi''@;'; put 'put ''bGVke2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uYWN0aXZle2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LS1hY3RpdmUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWJnY29sb3IpO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1ib3JkZXItY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtaG92ZXItYmdjb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYWN0aXZlLWJnY29s''@;'; put 'put ''b3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmst''@;'; put 'put ''aG92ZXItYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6YWN0aXZle2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJk''@;'; put 'put ''LXN0ZXBuYXYtbGluay1hY3RpdmUtYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstdGl0bGV7d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOm5vcm1hbH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1z''@;'; put 'put ''dGVwbmF2LWl0ZW0uY29tcGxldGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZlKTt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgZWFzZS1pbn0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uY29tcGxl''@;'; put 'put ''dGUgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24gY2RzLWljb257LS1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1jb21wbGV0ZS1pY29uLWNvbG9yKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uZXJyb3J7Ym9yZGVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci13aXphcmQtc3RlcG5hdi1pdGVtLWVycm9yLWJvcmRlci1jb2xvcik7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGVhc2UtaW59LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmVycm9yIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1pY29uIGNkcy1pY29uey0tY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstZXJyb3ItaWNvbi1jb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLm5vLWNsaWNrIGJ1dHRvbntwb2ludGVyLWV2ZW50czpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGlua3t3aWR0''@;'; put 'put ''aDoxMDAlO2Rpc3BsYXk6ZmxleDtwbGFjZS1jb250ZW50Om5vcm1hbDtjb2xvcjppbmhlcml0O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmxlZnQ7dGV4dC10cmFuc2Zvcm06bm9uZTttYXJnaW46MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7aGVpZ2h0OmF1dG87''@;'; put 'put ''bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTttYXgtd2lkdGg6aW5oZXJpdDtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1''@;'; put 'put ''bSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHIt''@;'; put 'put ''d2l6YXJkLXN0ZXBuYXYtbGluay1pY29ue2Rpc3BsYXk6ZmxleH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmsgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGlu''@;'; put 'put ''ay1wYWdlLW51bWJlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXRpdGxle21hcmdpbi10b3A6MDtmbGV4OjAgMCBhdXRvO2NvbG9yOnZhcigtLWNsci13aXphcmQtdGl0bGUtdGV4dCk7cGFkZGluZzp2YXIoLS1jbHItd2l6YXJkLWRl''@;'; put 'put ''ZmF1bHQtc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXg6MSAx''@;'; put 'put ''IDEwMCU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciAubW9kYWwtbmF2e2hlaWdodDphdXRvfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWZvb3Rlci1idXR0b25ze3RleHQtYWxpZ246cmlnaHQ7bWFyZ2lu''@;'; put 'put ''OjB9LmNsci13aXphcmQgLmNsci13aXphcmQtZm9vdGVyLWJ1dHRvbnMtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItd2l6YXJk''@;'; put 'put ''IC5jbHItd2l6YXJkLWJ0bi13cmFwcGVye2ZsZXg6MCAxIGF1dG99LmNsci13aXphcmQgLmNsci13aXphcmQtYnRuLXdyYXBwZXJbYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi5idG4tbGlua3twYWRkaW5nOjB9LmNsci13aXphcmQg''@;'; put 'put ''LmNsci13aXphcmQtY29udGVudHtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXBhZ2U6bm90KFthcmlhLWhpZGRlbj10cnVlXSl7ZGlzcGxheTpibG9ja30uY2xyLXdpemFyZCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZofS5jbHItd2l6YXJkIC5tb2RhbC1ib2R5LXdy''@;'; put 'put ''YXBwZXJ7bWF4LWhlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTt3aWR0aDoxMDAlfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6Y2FsYyg1MDQq''@;'; put 'put ''KDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtY29udGVudCwuY2xyLXdpemFyZC53aXphcmQtbWQgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg1MDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNl''@;'; put 'put ''KSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJk''@;'; put 'put ''LndpemFyZC1sZyAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubW9kYWwtY29udGVudCwu''@;'; put 'put ''Y2xyLXdpemFyZC53aXphcmQtbGcgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubmF2LXBhbmVsLC5jbHItd2l6YXJkLndpemFyZC1sZyAuY2xyLXdpemFy''@;'; put 'put ''ZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC14bCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZo''@;'; put 'put ''O21heC1oZWlnaHQ6bm9uZX0uY2xyLXdpemFyZC53aXphcmQteGwgLm5hdi1wYW5lbCwuY2xyLXdpemFyZC53aXphcmQteGwgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21pbi13aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMo''@;'; put 'put ''MzIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXdpemFyZCAuc3Bpbm5lcjpub3QoLnNwaW5uZXItaW5saW5lKTpub3QoLmNsci10cmVlbm9kZS1zcGlubmVyKXtsZWZ0OmNhbGMoNTAlICsgY2FsYygxMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKTtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTt0b3A6NDAlfS5jbHItd2l6YXJkLXBhZ2U+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0uY2xyLXdpemFyZC1wYWdlPjpmaXJzdC1jaGlsZD46Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZHtwYWRkaW5nLXRv''@;'; put 'put ''cDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZD4uZm9ybS1ibG9jazpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmNsci13aXphcmQtLWlubGluZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmNsci13aXphcmQtLWlubGluZT5jbHItbW9kYWw+Lm1vZGFsOmZvY3Vze291''@;'; put 'put ''dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLWNvbG9yOnRyYW5zcGFyZW50fS5jbHItd2l6YXJkLS1pbmxpbmUgY2xyLW1vZGFse2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpibG9ja30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbHtwYWRkaW5nOjA7cG9zaXRpb246c3RhdGljO2hl''@;'; put 'put ''aWdodDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbCAuY29udGVudC1jb250YWluZXJ7aGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwgLmNvbnRlbnQtY29udGFpbmVyIC5uYXYtcGFuZWx7aGVpZ2h0Ojk5JTt3aWR0aDo5OSV9LmNs''@;'; put 'put ''ci13aXphcmQtLWlubGluZSAubW9kYWwgLm1vZGFsLWNvbnRlbnR7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsIC5tb2RhbC1kaWFsb2d7bWluLWhlaWdodDoxMDAlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ei1pbmRleDphdXRvfS5jbHItd2l6YXJkLS1pbmxp''@;'; put 'put ''bmUgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1oZWFkZXIgLmNsb3Nle2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5uYXYubmF2TGlzdHtwYWRkaW5nLXRvcDowfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWRp''@;'; put 'put ''YWxvZyAubW9kYWwtY29udGVudCAubW9kYWwtYm9keSAuY29udGVudC1hcmVhe292ZXJmbG93LXk6YXV0b30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1iYWNrZHJvcHtoZWlnaHQ6MDt3aWR0aDowO2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1jb250ZW50LXdy''@;'; put 'put ''YXBwZXJ7YWxpZ24taXRlbXM6c3RyZXRjaDtoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciwuY2xyLXdpemFyZC0taW5saW5lLmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7bWluLWhlaWdodDoxMDAlO2hlaWdodDphdXRvO21heC1o''@;'; put 'put ''ZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciAuY2xyLXdpemFyZC1zdGVwbmF2LC5jbHItd2l6YXJkLS1pbmxpbmUuY2xyLXdpemFyZCAubW9kYWwtY29udGVudCAuY2xyLXdpemFyZC1zdGVwbmF2e2hlaWdodDoxMDAlfS5jbHItd2l6''@;'; put 'put ''YXJkLS1uby1zaGFkb3cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciwuY2xyLXdpemFyZC0tbm8tc2hhZG93IC5tb2RhbC1kaWFsb2d7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1uby10aXRsZSAuY2xyLXdpemFyZC10aXRsZXtkaXNwbGF5Om5vbmV9LmNsci13aXphcmQtLW5vLXRpdGxl''@;'; put 'put ''IC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEgLndpemFyZC1pbi1wYWdlLndpemFyZC1pbi1wYWdlLS1maWxsLWNvbnRlbnQtYXJlYXtkaXNwbGF5''@;'; put 'put ''OmJsb2NrO2hlaWdodDpjYWxjKDEwMCUgKyAyLjRyZW0pO21hcmdpbjotMS4ycmVtfS53aXphcmQtaW4tcGFnZSAuY2xyLXdpemFyZC1mb290ZXItYnV0dG9ucy13cmFwcGVye2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW57LmNsci13aXphcmQtcGFnZVthcmlhLWhp''@;'; put 'put ''ZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9ue21hcmdpbi10b3A6Y2FsYygtMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fTpyb290IFtjZHMtdGhlbWVdey0t''@;'; put 'put ''Y2xyLXNpZ25wb3N0LWNvbnRlbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLXNpZ25wb3N0LWNvbnRlbnQt''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1hY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItc2lnbnBvc3QtYWN0aW9uLWhvdmVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXNpZ25wb3N0LWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXNpZ25wb3N0LWJvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkgc29saWQgdmFy''@;'; put 'put ''KC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkgc29saWQgdHJhbnNwYXJlbnQ7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc2V1ZG8tYm9yZGVy''@;'; put 'put ''OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLXNpemUpIHNvbGlkIHZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLXBzdWVkby1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHNldWRvLWJvcmRlcik7LS1jbHItc2ln''@;'; put 'put ''bnBvc3QtYm9yZGVyLXNpemU6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSl9LnNpZ25wb3N0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zaWducG9zdDpob3ZlcntjdXJzb3I6cG9pbnRlcn0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKXttYXJnaW46MDtwYWRk''@;'; put 'put ''aW5nOjA7Ym9yZGVyLXdpZHRoOjA7Y29sb3I6dmFyKC0tY2xyLXNpZ25wb3N0LWFjdGlvbi1jb2xvcil9LnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2RzLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2xyLWljb257aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjZHMtaWNvbjpob3Zlciwuc2lnbnBvc3QgLnNpZ25w''@;'; put 'put ''b3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjbHItaWNvbjpob3Zlciwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKTpob3Zlcntjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWhvdmVyLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3Nl''@;'; put 'put ''KS5hY3RpdmUgY2RzLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkuYWN0aXZlIGNsci1pY29uLC5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2UpLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWFjdGl2ZS1jb2xvcil9''@;'; put 'put ''LnNpZ25wb3N0IC5zaWducG9zdC1jb250ZW50LWhlYWRlciBidXR0b257bGluZS1oZWlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lk''@;'; put 'put ''dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3''@;'; put 'put ''aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc2lnbnBvc3QtdHJpZ2dlcnttYXJnaW46MDtkaXNwbGF5OmlubGluZS1mbGV4fS5zaWducG9zdC1jb250''@;'; put 'put ''ZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xMik7bWF4LWhlaWdodDpjYWxjKDUwNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxMDUwfS5zaWducG9zdC1jb250ZW50OmhvdmVye2N1cnNvcjpkZWZhdWx0fS5zaWducG9zdC1jb250ZW50''@;'; put 'put ''IC5wb3BvdmVyLXBvaW50ZXJ7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZX0uc2lnbnBvc3QtY29udGVudCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtjb250ZW50OiIiO2hlaWdodDowO3dpZHRoOjA7cG9zaXRpb246YWJzb2x1dGV9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxl''@;'; put 'put ''ZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC50b3AtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO2JvdHRvbTpj''@;'; put 'put ''YWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5zaWducG9zdC1jb250ZW50LnRvcC1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQudG9w''@;'; put 'put ''LXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7Ym90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9''@;'; put 'put ''LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC50b3AtbWlk''@;'; put 'put ''ZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1z''@;'; put 'put ''aWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRvcC1yaWdodCAu''@;'; put 'put ''cG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jl''@;'; put 'put ''e2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlk''@;'; put 'put ''ZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO3RvcDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5z''@;'; put 'put ''aWducG9zdC1jb250ZW50LmJvdHRvbS1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2Jv''@;'; put 'put ''cmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3Qt''@;'; put 'put ''Y29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQg''@;'; put 'put ''LnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlz''@;'; put 'put ''aWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1yaWdodCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25w''@;'; put 'put ''b3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20t''@;'; put 'put ''cmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5z''@;'; put 'put ''aWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItbGVmdDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2xyLXNp''@;'; put 'put ''Z25wb3N0LWJvcmRlci1zaXplKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXIt''@;'; put 'put ''cG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcil9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRv''@;'; put 'put ''cCAucG9wb3Zlci1wb2ludGVye2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZv''@;'; put 'put ''cmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0u''@;'; put 'put ''c2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7dG9wOjUwJX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9y''@;'; put 'put ''ZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSl9''@;'; put 'put ''LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNp''@;'; put 'put ''YmxlLWJvcmRlcik7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0''@;'; put 'put ''b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50''@;'; put 'put ''LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVy''@;'; put 'put ''LXNpemUpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJl''@;'; put 'put ''Zm9yZXtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnNp''@;'; put 'put ''Z25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10''@;'; put 'put ''b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6NTAlfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3Jk''@;'; put 'put ''ZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQucmlnaHQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC1ib3R0''@;'; put 'put ''b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDt0b3A6MDtib3JkZXItcmFkaXVzOnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItcmFkaXVzKX0uc2lnbnBvc3QtY29udGVudC1oZWFkZXIgLnNpZ25w''@;'; put 'put ''b3N0LXRpdGxle2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi1yaWdodDphdXRvfS5zaWducG9zdC13cmFwe2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS03KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpIGNhbGMoMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1zaWducG9zdC1jb250ZW50''@;'; put 'put ''LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtY29udGVudC1iZy1jb2xvcik7ei1pbmRleDoxMDUwO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpjb2x1bW59LnNpZ25wb3N0LWNvbnRlbnQtYm9keXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2NvbG9yOnZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWNvbG9yKTt0ZXh0LWFsaWduOmxlZnQ7bWF4LWhlaWdodDpjYWxjKDQ1MCooMXJlbS92''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7b3ZlcmZsb3cteTphdXRvO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLWFjY29yZGlvbntkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1wYW5lbHtkaXNwbGF5OmJsb2NrfS5jbHItYWNjb3JkaW9uLWhlYWRlcntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVmdC1pbmRpY2F0b3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcik7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0O2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHNvbGlkIHZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLWNvbG9yKTtib3JkZXItYm90dG9tLXdpZHRoOjA7d2lkdGg6MTAw''@;'; put 'put ''JTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246bGVmdH0uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWhvdmVyKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLWhlYWRlcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWJhY2tncm91bmQtY29sb3IpfS5j''@;'; put 'put ''bHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPmRpdj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRl''@;'; put 'put ''ci1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZD4uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29s''@;'; put 'put ''b3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmhvdmVyLC5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVy''@;'; put 'put ''OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsOmxhc3QtY2hpbGQgLmNsci1hY2NvcmRpb24tY29udGVudCwuY2xyLWFjY29yZGlvbi1wYW5lbDpsYXN0LWNoaWxk''@;'; put 'put ''IC5jbHItYWNjb3JkaW9uLWhlYWRlcntib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3IpfS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDtm''@;'; put 'put ''bGV4OjEgMSAwO3dpZHRoOjEwMCU7Ym9yZGVyOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JhY2tncm91bmQ6MCAwO3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcjtjb2xvcjppbmhlcml0O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfUBtZWRpYSAobWlu''@;'; put 'put ''LXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2ZsZXgtZmxvdzpyb3d9fS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWQgLmNsci1hY2NvcmRp''@;'; put 'put ''b24tc3RhdHVzLC5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWQgLmNsci1hY2NvcmRpb24tdGl0bGUsLmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbjpkaXNhYmxlZCAuY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXBhbmVs''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1zdGF0dXN7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wfS5jbHItYWNjb3JkaW9uLXRpdGxle2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItYWNjb3Jk''@;'; put 'put ''aW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb24gLmNsci1hY2NvcmRpb24tdGl0bGV7bWluLXdpZHRoOnZhcigtLWNsci1hY2NvcmRpb24tc3RlcC10aXRsZS1taW4td2lkdGgpO21heC13aWR0aDpjYWxjKDI2NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7d2lkdGg6MTAwJX0uY2xy''@;'; put 'put ''LWFjY29yZGlvbi1kZXNjcmlwdGlvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6Y2FsYyg2NTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDpjYWxjKDQw''@;'; put 'put ''KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX19LmNsci1hY2NvcmRpb24tY29udGVudHtiYWNrZ3JvdW5kOnZhcigtLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jbHItYWNj''@;'; put 'put ''b3JkaW9uLWJvcmRlci1jb2xvcik7Ym9yZGVyLWJvdHRvbTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7ZGlzcGxheTpub25lfS5jbHItYWNjb3JkaW9uLWNvbnRlbnQgLmNsci1mb3JtLC5jbHItYWNjb3JkaW9uLWNvbnRlbnQubmctdHJpZ2dl''@;'; put 'put ''cntwYWRkaW5nOjB9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWNvbnRlbnR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIGNhbGMoNTQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX0uY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3Bh''@;'; put 'put ''ZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkgY2FsYyg1NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fS5jbHIt''@;'; put 'put ''YWNjb3JkaW9uLWFuZ2xle3RyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntib3gtc2hhZG93OnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWxlZnQtY3Vy''@;'; put 'put ''cmVudC1pbmRpY2F0b3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4gLmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3Jk''@;'; put 'put ''ZXItbGVmdC1jb2xvci1jb21wbGV0ZSl9LmNsci1hY2NvcmRpb24tcGFuZWwtb3BlbiAuY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvcj4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNoYWRvdzppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jbHItYWNjb3JkaW9u''@;'; put 'put ''LWJvcmRlci1sZWZ0LWNvbG9yLWVycm9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uIC5jbHItYWNjb3JkaW9uLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRl''@;'; put 'put ''cntiYWNrZ3JvdW5kOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVu''@;'; put 'put ''LWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3ItYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVh''@;'; put 'put ''ZGVyLW9wZW4tYWN0aXZlLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyIC5jbHItYWNjb3JkaW9uLWFuZ2xle3Zpc2liaWxpdHk6dmlzaWJsZTt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmNsci1hY2NvcmRpb24tcGFu''@;'; put 'put ''ZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24tY29tcGxldGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZT4uY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmlsaXR5''@;'; put 'put ''OnZpc2libGV9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZSl9LmNsci1hY2Nv''@;'; put 'put ''cmRpb24tcGFuZWwtY29tcGxldGUgLm5nLXRyaWdnZXIuY2xyLWFjY29yZGlvbi1jb250ZW50e2Rpc3BsYXk6YmxvY2t9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3I+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAg''@;'; put 'put ''dmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3I+LmNsci1hY2NvcmRpb24tZXJyb3ItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yKX0uY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1wYW5lbC1lcnJvciAuY2xyLWFjY29yZGlvbi1udW1iZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGUgLmNsci1hY2NvcmRpb24tbnVtYmVye3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRp''@;'; put 'put ''bmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFk''@;'; put 'put ''ZXIpe2JveC1zaGFkb3c6bm9uZX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbCAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFkZXIpe2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWFjY29yZGlvbi1ib3Jk''@;'; put 'put ''ZXItcmFkaXVzKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbCAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFkZXIpKy5jbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uPi5jbHItYWNjb3JkaW9uLWNv''@;'; put 'put ''bnRlbnR7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cyl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3Jt''@;'; put 'put ''cykgLmNsci1hY2NvcmRpb24tcGFuZWwrLmNsci1hY2NvcmRpb24tcGFuZWw+ZGl2W2NsYXNzKj1jbHItYWNjb3JkaW9uLXBhbmVsLV0+LmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBwZXItaGVhZGVyKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnVuc2V0O2JvcmRlci10b3At''@;'; put 'put ''cmlnaHQtcmFkaXVzOnVuc2V0fS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsOm5vdCg6bGFzdC1jaGlsZCk+ZGl2W2NsYXNzKj1jbHItYWNjb3JkaW9uLXBhbmVsLV0+LmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBw''@;'; put 'put ''ZXItaGVhZGVyKSwuY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbDpub3QoOmxhc3QtY2hpbGQpPmRpdltjbGFzcyo9Y2xyLWFjY29yZGlvbi1wYW5lbC1dPi5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVyLWhlYWRl''@;'; put 'put ''cikrLmNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24+LmNsci1hY2NvcmRpb24tY29udGVudHtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp1bnNldDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp1bnNldH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1z''@;'; put 'put ''dGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xy''@;'; put 'put ''LWFjY29yZGlvbi1jb250ZW50e3BhZGRpbmc6MH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1jb250ZW50LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWFjY29yZGlvbi1jb250ZW50LWZvbnQtc2l6ZSl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBl''@;'; put 'put ''ci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBl''@;'; put 'put ''ci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVze3dpZHRoOmF1dG99LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVzIGNkcy1pY29uLC5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9u''@;'; put 'put ''LXN0YXR1cyBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVye2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MCFpbXBvcnRh''@;'; put 'put ''bnQ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MCFpbXBvcnRhbnQ7Ym9yZGVyLWJvdHRvbTowIWltcG9ydGFudH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1hY2Nv''@;'; put 'put ''cmRpb24tdGV4dC1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1wYW5lbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1hY2NvcmRpb24tYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNl''@;'; put 'put ''bGVjdGVkKTstLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWFjY29yZGlvbi1jb250ZW50LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1j''@;'; put 'put ''bHItYWNjb3JkaW9uLWNvbnRlbnQtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTst''@;'; put 'put ''LWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKTstLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2''@;'; put 'put ''ZSk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVuLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1hY2NvcmRpb24tZXJyb3ItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1''@;'; put 'put ''cy1kYW5nZXIpOy0tY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItcmFk''@;'; put 'put ''aXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZTp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWluZGljYXRvcjppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0''@;'; put 'put ''LWN1cnJlbnQtaW5kaWNhdG9yOmluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTEzKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OmNhbGMoNTYqKDFyZW0vdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKSkpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4u''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXN7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTEyKTtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3Rl''@;'; put 'put ''cC1zdGF0dXM+LmNsci1zdGVwLWVycm9yLWljb24sLmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtc3RhdHVzPi5jbHItc3RlcC1jb21wbGV0ZS1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7cGFkZGluZzowfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXN0YXR1cz4uY2xyLXN0ZXAtZXJyb3ItaWNvbntjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXM+LmNsci1zdGVwLWNvbXBsZXRlLWljb257Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1j''@;'; put 'put ''b21wbGV0ZS1jb2xvcil9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcnttaW4td2lkdGg6dmFyKC0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aCk7bWF4LXdp''@;'; put 'put ''ZHRoOmNhbGMoMjY0KjFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSk7d2lkdGg6MTAwJTtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1m''@;'; put 'put ''b250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC10aXRsZS13cmFwcGVyPi5jbHItc3RlcC1udW1iZXJ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtOSl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcj4uY2xyLWFjY29yZGlvbi10aXRsZXttaW4td2lkdGg6aW5pdGlhbDttYXgtd2lkdGg6aW5pdGlhbDt3aWR0aDppbml0''@;'; put 'put ''aWFsO21hcmdpbi1sZWZ0OjB9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwuY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlv''@;'; put 'put ''bi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9QG1lZGlhIChtYXgtd2lkdGg6NTc2cHgp''@;'; put 'put ''ey5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRv''@;'; put 'put ''bj4uY2xyLXN0ZXAtc3RhdHVze21pbi13aWR0aDppbml0aWFsO3dpZHRoOmluaXRpYWx9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcnt3aWR0aDppbml0aWFsfS5jbHItc3Rl''@;'; put 'put ''cHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXRpdGxlLXdyYXBwZXI+LmNsci1zdGVwLW51bWJlcnttaW4td2lkdGg6aW5pdGlhbH0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLC5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OjB9fS5jbHItc3RlcHBl''@;'; put 'put ''ci1mb3JtcyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7dmlzaWJpbGl0eTpoaWRkZW59QG1lZGlhIChtYXgtd2lkdGg6NTc2cHgpey5jbHItc3RlcHBlci1mb3Jt''@;'; put 'put ''cyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7ZGlzcGxheTpub25lfX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwLWJ1dHRvbnttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9Y2xyLXN0ZXBwZXItcGFuZWwgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0x''@;'; put 'put ''MSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdGltZWxpbmUtbGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGltZWxpbmUtc3RlcC1oZWFkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''KTstLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGltZWxpbmUtc3RlcC1kZXNjcmlwdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRpbWVsaW5lLWlu''@;'; put 'put ''Y29tcGxldGUtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xy''@;'; put 'put ''LXRpbWVsaW5lLXN1Y2Nlc3Mtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRpbWVsaW5lLWVycm9yLXN0ZXAtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItdGltZWxpbmV7ZGlzcGxheTpmbGV4O3BhZGRpbmc6dmFyKC0tY2xyLXRpbWVsaW5lLXN0''@;'; put 'put ''ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTttaW4td2lkdGg6Y2FsYygxNzUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTExKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPWNpcmNsZV17Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLWluY29tcGxldGUtc3Rl''@;'; put 'put ''cC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWRvdC1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbltzaGFwZT1kb3QtY2lyY2xlXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yKX0uY2xyLXRpbWVsaW5lLXN0ZXAg''@;'; put 'put ''Y2RzLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3RhbmRhcmRde2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1zdWNjZXNzLXN0ZXAtY29sb3IpfS5jbHItdGltZWxpbmUtc3RlcCBjZHMtaWNvbltzaGFwZT1l''@;'; put 'put ''cnJvci1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtZXJyb3Itc3RlcC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXJ7bWFyZ2luOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXIsLmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YWZ0ZXIsLmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YmVmb3Jle2hlaWdodDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0uY2xyLXRpbWVsaW5lLXN0ZXA6bm90KDpsYXN0LW9mLXR5cGUpIC5jbHIt''@;'; put 'put ''dGltZWxpbmUtc3RlcC1ib2R5OmJlZm9yZXtjb250ZW50OiIiO2JhY2tncm91bmQ6dmFyKC0tY2xyLXRpbWVsaW5lLWxpbmUtY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpICsgdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpLGNhbGMoLS41Kih2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpKSl9LmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt3aGl0ZS1zcGFjZTpub3dyYXA7bWFyZ2luLWJvdHRvbTp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5n''@;'; put 'put ''KTtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1oZWFkZXItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pO2xp''@;'; put 'put ''bmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAtYm9keXtkaXNwbGF5OmZsZXg7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOmlu''@;'; put 'put ''aXRpYWw7bWluLWhlaWdodDppbml0aWFsfS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9ZG90LWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9c3Vj''@;'; put 'put ''Y2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZG90LWNpcmNs''@;'; put 'put ''ZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRde2NvbG9yOmluaGVyaXR9LmNsci10aW1lbGluZS1zdGVwLXRpdGxle21hcmdpbjp2YXIo''@;'; put 'put ''LS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwO2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRp''@;'; put 'put ''bWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xy''@;'; put 'put ''LXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb257Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb24tY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci10aW1lbGlu''@;'; put 'put ''ZS1zdGVwLWRlc2NyaXB0aW9uIGJ1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uIGltZ3t3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS01KX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOmNhbGMoMzIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVs''@;'; put 'put ''aW5lLXN0ZXB7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi1sZWZ0OjA7cG9zaXRpb246cmVsYXRpdmV9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwOm5vdCg6bGFzdC1vZi10eXBlKXttYXJnaW4tYm90dG9tOnZhcigtLWNsci10aW1lbGlu''@;'; put 'put ''ZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2FsIC5jbHItdGltZWxpbmUtc3RlcDpub3QoOmxhc3Qtb2YtdHlwZSkgLmNsci10aW1lbGluZS1zdGVwLWJvZHk6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7aGVpZ2h0OmNhbGMoMTAwJSAtICguNSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLS41Kih2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpIC0gdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykpLGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci13aWR0aC0yMDApKSl9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt0ZXh0LWFsaWduOnJpZ2h0O3doaXRlLXNwYWNlOm5vcm1hbDt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7d2lkdGg6Y2FsYyg2MCooMXJlbS92YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOmNhbGMoNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSB2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwIDB9LmNs''@;'; put 'put ''ci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6Y2FsYygxNzgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNsci10''@;'; put 'put ''aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItYnJlYWRjcnVtYi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXJ9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9''@;'; put 'put ''LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5jbHItYnJlYWRjcnVtYi1tZW51IC5jbHItYnJlYWRjcnVtYi1pdGVtOm5v''@;'; put 'put ''dCg6bGFzdC1jaGlsZCk6YWZ0ZXJ7Y29udGVudDoiLyI7bWFyZ2luOjAgdmFyKC0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZSk7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKX0uY2xyLWJyZWFkY3J1bWItbWVudSAuY2xyLWJyZWFkY3J1bWItaXRlbTpsYXN0''@;'; put 'put ''LWNoaWxke2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWV4cGFuZHttYXJnaW46MDtwYWRkaW5nOjA7Z2FwOjA7bWluLXdpZHRoOi1tb3otZml0LWNvbnRlbnQ7bWluLXdpZHRoOmZpdC1jb250''@;'; put 'put ''ZW50fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGUWdBQk1BQUFBQW04QUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFB''@;'; put 'put ''QUFCd0FBQUFjZk5INTVrZEVSVVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNhQUFBT2RqeStlamxIVTFWQ0FBQUpNQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxRQUFBQVRRQUFBR0JvUHF6clkyMWhjQUFBQ2FBQUFBSnNBQUFEbm5kREQ3RmpkblFnQUFBTURBQUFBREFB''@;'; put 'put ''QUFBOEVZNEJqR1p3WjIwQUFBdzhBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFbmdBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTZ0FBQU5uTUFBR2dVeEZJZ04yaGxZV1FBQUVqMEFBQUFOZ0FBQURZTFlZZ1VhR2hsWVFBQVNTd0FBQUFoQUFBQUpBZDJCREpvYlhSNEFBQkpVQUFBQW9nQUFBVHV1''@;'; put 'put ''UEkvRkd4dlkyRUFBRXZZQUFBQ2NnQUFBbnFKYW5Cd2JXRjRjQUFBVGt3QUFBQWdBQUFBSUFLRUFlbHVZVzFsQUFCT2JBQUFBWUlBQUFOV0xkQ0U5WEJ2YzNRQUFFL3dBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFVNVFBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJVR0FBQUFBWUFBQUFHOW5oWW1B''@;'; put 'put ''QUFBQUVBQUFBQTFGRzFhZ0FBQUFEVHdaMkdBQUFBQU5TK3B2VjQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNCYkZiVkZmN091ZmUrdi8w''@;'; put 'put ''TFdFb0xDQjBEVWhreFRXV0VTVVZHaVdNRnNWUERtRUVIWmx1Y1k2MVE3QmpaaURGS0hacWw2WXpERHBFMHFBeU1Oc0JRc1NLeXBxdk9PVWRrWTZZaFlGd0h5RFltMDduRkNQTDJ2Zk4rNkY5b3QvR0ZqOE81OTkxN3p6bmY3Ym1GQU1oaU1oWkM1dFhXTFVZQlBEMklZemorSTFDNGhtODNyVVRw''@;'; put 'put ''aW04Mk5hQjhSY09LQnM0Ry9jbG9PaU5oeCsreUdJMEptR0llaHdyVXVZNTBORnBscTByVWlvZ2Z5ZkRWL0dLYytRSktMMEJRRzdlU0EyYWpCWjhpbG5GUUhvUHpaS3djUVJHRzhXUi9qN3ZqN1hGdmZCUkQvSWsvR0hMa3Q0TjYrN2gzL3YrUHh6OGRjb1gzaGh3WitqeC9qUGNPTWJJOTdvdjNK''@;'; put 'put ''YmpJMzh1L3Ywa3cyQjV4SzdPa21NaE1UMkcyUGtjb3FnaUhxd2lQNlVUQUY0Z0lNNGtNcmlFS01Jc29aRzVuczFKckNNSDkrQkZuUGtnRVpyeUYvaGNJd1l1RTRDVkNjWkR3K0FQaGNaUUkrRE1SNFRnUjRUMGl3bWtpZ3crSURNNFFoYXplcDF3dEpySlNMTVVvbEJJcElaZEtLWGtjSzV2bDJ0''@;'; put 'put ''T29rZ3ArY3lVaGR1NzB4R29uZG5aaWJ5Y09tRWNVb0pZb3hBSWlpMFZFRVJyeGZhNlFSQkpaSkpGRkV2QVRQTXI1YlVRaGZvWk5uUDhFZnM3NTI0a2k3Q1F5MkVVVTRCZEVCcnVKQWp4SFpQQThVWUE5UkNFNmlVTHNKN0xvSXJMb0pyTG9JYko0bFJEOG1oRExUb1IzaUNMOGlVanpvcFlYdGJ4''@;'; put 'put ''NHkwdXd2QVRMaTdlOGVNdUxsekV5aHZtNlhDNG5KemtLWExXS0dackNHbGV4dHROWjA1bk16Q3htcEJHcmNEZWE4RDJzWmkzdnh6bzA0d0ZtNFVGR3Y1TVJQY2RLdnNnS0htVGxqckppeDFtcDB6ekpHYnRaeGR5M05MbGZlcS9kdzlla2lYRVBwN3IyVVhldDhiOEdVYXVOREhZSExveWNTakRJ''@;'; put 'put ''bDZlSHZCdW56aXVlOS9wbzNCdzNYenlTM3JwNGM3eDUwSkcvMkRlS2N0T0VtQ1lVWHlNY2JpVThiaU1DbGhJUkZmRW81eVJxRUZPRG1ob1VIVVNFSFVSa2xSYXJ0RmlseFNvdFZsZkZNY0xoQk9Gd2tuQTRTd1NjSXlJWktTTloxMUV5aWx3bVplU2tvbUlWRlJrdjQ3bStvaEtYRVVVWVNRd3pw''@;'; put 'put ''WXNwWFUzcExxZjArVVMrMHIzRkUrWEZrekdsdTV6Uyt6WHVMU3B2VVdVc3F2TktUeldlcW5zdk1iU3VrMmk5YVZaekVTYktkUlpueHZUclRMK2FpemxSc2VZaVQ3U3NlZkhuSzlwWkZqSXlUYTdoN3NsUHIxcEd1SWoxdXBWeExXVWtiWXhrSXg1ak5FL2dTVHlGcll4b095UFp3ZHZZeWROMjha''@;'; put 'put ''UTlQTjB4MXVBa1QzYU9KeGpGM2Nad2wvRmNjWUxwV1RIQ09rcUpxYU9FdTlUUUVyTnIySW1PUkJQSWZjeC90NnlYRm5sRU5rcTdiSlZuWkpmc2tYM1NMYS9MQVRra2grVmRPU0duNUVQNVdNNnAxNndXNjJndDE4azZWYXQwaHM3U3VWcXJkYnBJbCtqdGVvZlc2eXBkby9mb09uMUlXM1dEYnRJ''@;'; put 'put ''dHVrMDdkTGQyNm43dDBUZjBMWDFiajJpZm50VDM5U1A5eE1GRmJwZ3JjV1BkQkZmaHJuVFQzTlZ1dHJ2T0xYQTN1c1h1TnZjTmQ2ZTd5elc1SDdoNzNRUHV4KzVoMStZMnV5ZmQwMjZIZTk3dGRWM3VOZmVtKzczcmRlKzRZKzZ2N2gvdTMrNnNWMS9nUi9oU1A4NVA5Rk44cFovdXEvMGNQODh2''@;'; put 'put ''OURmN1cveFMveTIvM0svMHEvMWFmNTlmNzF2OEkzNmpiL2RiL1ROK2w5L2o5L2x1LzdvLzRBLzV3LzVkZjhLZjhoLzZqLzI1NEVNMkZJZlJvVHhNRGxORFZaZ1Jab1c1b1RiVWhVVmhTYmc5M0JIcXc2cXdKdHdUMW9XSFFtdllFRGFGTFdGYjZBaTdRMmZZSDNyQ0crR3Q4SFk0RXZyQ3lmQisr''@;'; put 'put ''Q2g4RWlHS29tRzhIVTI2azl4c1BOKzR4bmhEd21nMGJqUFAybjUvam04d3JqUysxbmhsd2xwbTl2WEdjNHdybEQ5VDVRcmpxNHlyRTBhOWNidStURzR3ZjZYeGJQUDNHcDh4ejBUang0MG5HVWZHQzF3OStTbmpwc0ZaZjVVWFk0MzVMMkY4MlhpTGNXTS95N0kwZHJQdk1uN1ZlTU9sbkdiQTdF''@;'; put 'put ''djVldU1LN2ZwZnJNOE95RlhYWUl5NXhvOGIxL2N6czlkbDJmdnZuT2F6YTFDZWxNZE5lV2NlWU9mVnRObjhWNWcvMzU1dk9Xd3hlMWxlNXRNb0J0ZzJtcW9pMzU5bXRUcTFiVTZxbWJRNmFkU3BQbk4yenAvTWFUTzczYTA1cjk2Y3hnNmEzWlBZdVpxbUdWdWJVM0s0eUorZUljM2JBYlBYV28w''@;'; put 'put ''T0pmTmRxc0FiYks5ZW0yTTNJdFh0QUgrbDJXZHlOZHA1UWRYNS92UUdYWnVubWJRaStmWldzNytlK20yKzNRc3RNNy9wSWFlMFNYbjJIT1BJUEVQWmZ6UDdib3V1MXV3M3pjNWZ1U2IrSmJrcTNuOVJwZkozck03ZDdxNy9nd2ZPVkh6VzNxWGd1MnNxczVLOFRqMjdkaVc3WVBMQ2p2QjV2c1F5''@;'; put 'put ''bUlGcTlyQ2tjNDlnMy80aWUzclN1VWZhRzdYRU92Y28vbDYxa0gyb2ppakRUZXh6bzlucGJ1SHZQa3VJY3V2bG4ySFhXOGF1MWNpMzIwUjd2YzFrUjIvbmVsdlkrYjVpdmUrcjdINHZzME8rZ2dQNERsOTBwL0ZEZTFWdXhEOGw0REYyNHZIb3NKN2F5Zk9LWEdhL20wV1FlTDJwOEQ3Y1NWN1Bi''@;'; put 'put ''bGVFc2R5cmdoRk53OVU4OVhVODVZMVl6TkVYVEx1L016NXNiSGVHR3Uzbmc4YkxqYmNaOXhtZk5TN0NsN2pQY254WE1sSWdoWktWSWhrdUl5NDkwWDhBdGxLWFdBQUFBQUVBQUFBS0FCd0FIZ0FCUkVaTVZBQUlBQVFBQUFBQS8vOEFBQUFBQUFCNDJtTmdackpnbk1EQXlzREMxTVVVd2NEQTRB''@;'; put 'put ''MmhHZU1ZUkJqTmdIeWdGQnl3TXlDQlVPOXdQd1lIQmdYVlA4elMvNDBaR0ppUE1xb3FNREJNQnNreHNUS3RCMUlLREV3QXhsY0tOZ0FBQUhqYXRaTlpVSTVSSE1aLy83ZDlFU29VOWZiMmFkTkdvaFJGOXFYSXZwU3MyYkt2MlJyckVFTkZVc2llSktNWkUxTlR0aHZ1dURWampMN1BsVnZ1REIz''@;'; put 'put ''SFYwd3p6TGh5WnQ1ejNuUE9uT2VjZVo3ZkgzQ2g2d3RCZEk5VTZwazQ1NjVTck1jbGpNT05nWlJ3aXpydTBrZ1R6YlRRSmg0U0lJTWtUQVpMbkNSSnFxUkxwa3lWSE1tVFFpbVNFaVBWZUdXOGQ0a3lqNXV0NWhQemkrVnVCVnJCVnFobHM2S3NZVmE2ZGQvbUgvbE5LWDJIeFkwZTJvOXA0NW40''@;'; put 'put ''U244eHhTYXhraWdwa2lZWmtpWFpraXNGc2tFMmErMlh4bHV0ZmNoc01kdk56NVpoQlZoQlZvaFRlNmlWOWt0YmZWUXYxSFAxVkxXclZ2VklOYXVIcWtrMXFnWlZyK3JVTlZXcmFsUzFxbEtWcWtLVnFUT3FWSjNvZk5PWjFabjAvWk9qM0ZIZ3lIZkUyQWZhL2V3K2RpKzdtOTNvK05yeHVlUHdo''@;'; put 'put ''NUIzeVYxZS9hZm1ibmc3aytDUFd3U2orOC80aDBiWFNSZGNkWGJ1ZU9DSkY5NzQ0RXN2L09oTkgvcmlUd0NCOUtNL0F3Z2lXR2M4U0tjZWlrbVlUaVFjRzRPSklKSW9vb2xoQ0xIRUVVOENpUXhsR0VrTUo1a1JqQ1NGVkVhUlJqcWpHVU1HbVl6VnpHUXhuZ2xNWkJLVG1jSlVwakdkR1dTVHcw''@;'; put 'put ''eG1rY3RzNWpDWGVjeG5BUXRaeEdKTldoNzVMS1dBWlN4bmhYNy9EbmF5bTJJT2NaelRsRk5HQmVjNVJ5VlZWSE9SR2k1eGhjdlVjcFhyM05RVS9XVDBOZzJhcFh1YXBwOXRGYXUxSGRGczRHeTNOK3Raby90ZG5QanRWdUZmSEx4QVBadFoyV05sTFpza1JvOWIyTTR4N0Rna1hQTVpLVkc2QWlL''@;'; put 'put ''NG8zY2VvR21XQkYwUDhkMW5pcHhoeExLTnZXeGxIM3M0d0VGZFMvczV3bEc5ZFpoU1RuR1MxN3FhZXJGT3ZNUmJmTmdvZnBwL3p4K1F6YXJvZU5wallNQUNISUhRa3NHU2FUMERBOU51SmxZR2h2OGh6TkwvalpsMi8vL0NkSUJKOFArWC8zNGdQZ0RJUFEwaWVOcXRWbWwzMDBZVWxieGxJeHRa''@;'; put 'put ''YUZGTHgweWNwdEhJcEJTQ0FRTkJpdTFDdWpoYkswRnBwVGhKOXdXNjBYMWY4Szk1Y3RwejZEZCtXdThiMlNhQmhKNzIxQi8wN3N5N00yK2JlV015bENCajNhOEVRaXpkTllhV2x5aTNlczJuVXhiTkJPRzJhSzc3bENwRWYvVWF2VWFqSVRlc2ZKNk1nQXhQTHJZTTAvQkMxeUZUa1FpM0hVb3Bz''@;'; put 'put ''U25vWHAweTA5ZGFNMmEvVjJsVUtGZng4NVF1QkN2WC9iek1XMDFmVUwyT3FZWEFFbFJpVkFvQ0VTZnNhSk5tTU5VZUNacGovUnd6NzlWOUFXK2FrYUQrdWg5aVJyQ3VuOUU4by9uUUNvTWdzTWkwZzBDU1VmZTNnc0NodEJMWUoxT0k0Rm5XcS91VWxTN2xwSXM0QWpKRGh6Skt3aSt4R1djM1hN''@;'; put 'put ''RWE5dGhLUE9BdlNKVUdwV2Z6VUhxaUtab3dFTTlsQ3doeTJRL3JWclFTK0RMSUI0SVdWbjNvTEE2dGJkK2hyS0llejI0WnFTUlRPUXlsSzVGeDZVYVUydGdtc3dFRGxKMTFxRWNKZG5YQWE5ek5HQnVDZDZDRk1HQkt1S2hkN1ZXdG5nSERxN2l6K1c3dSs5VGVXdlFudTVnMlhQQVFkeWdxVFJs''@;'; put 'put ''eFhYUytESXR6U3NLQ2t4MHZVUjBaTFNZbUJnNVlUbE5ZWlZqM1E5dTk2SkRTQWJVRyt0TW90aVh6d1d6ZW9VRVZwMUlWMm93V0hScFNJQXBCaDd5cnZCeEF1Z0VOOG1nRm8wR01IQnJHTmlNNkpRSVphTUF1RFhtaGFJYUNocEEwaDBiVTBwb2ZaellYZ3lrYTNKSzNIUnBWUzh2KzBtb3lhZVV4''@;'; put 'put ''UDZibkQ2dllHUGJXL1hoNEdBV01YQnEyK2N6aUpMdnhJZjRNNGtQbUpDcVJMdFQ5bUpPSGFOMG02c3RtWi9NU3l6cllTdlM4QkZlQlp3SkVVb1AvTmN6dUxkVUJCWXdOWTB3aVd4NFpGMXVtYWVwYWpTa2pObEtWTlorR3BTc3FOSUREMXcvRG9TdENtUDl6ZE5RMGhnelhiWWJ4NFp4TmQyenJP''@;'; put 'put ''TkkwanRqR2JJY21WR3l5bkVTZVdSNVJjWnJsWXlyT3NIeGN4Vm1XUjFXY1kybXB1SWZsRXlydVpmbWtpdnRZUHFOa0orK1VDNUZoS1lwazN1QUw0dERzTHVWa1Yza3pVZHE3bE5OZDVhMUVlVXdaTkdqL2gvaWVRbnpINEpkQWZDenppSS9sY2NUSFVpSStsbE9JajJVQjhiR2NSbndzbjBaOExH''@;'; put 'put ''Y1FIMHVsUkZrZlUwZkI3R2dvUEhiQjA2WEUxVk44Vm91S0hKc2MzTUlUdUFBMWNVQVZaVlNTM0JFZnliQTQrcmx1YWMxSk9qRWJaODJKaW85R3hnRSt1enN6RDZ0UEtuRmErL3NjZUdibFlTTzRuZnNhNTNsajhnK0RmNHNYWlNrK2FVNXdjS2VRQUhpOHY4TzRGVkhKb2RPcWVLVHMwUHcvVVhH''@;'; put 'put ''Q0c2Q2ZRVTJNeVlJb2locmZmT1R5U3JOWmt6VzBDaDlQQkRvcjJzRzhhVTZNSTZVbHRLaEpHZ0V0ZzY1WjBEVHE4K3l0WmxFS1VXNWl2N043S2FLWTdFVVp6SUFwS09TbXNiRHM3NlJFV2xnN3FlbjAwY0RsUnRxTG5pdzFXMVp4aGIwSDcyUEl6U3g1TjFKZXVDa3A3VVdiVUtlOHlBSU91WkU5''@;'; put 'put ''dUNhQ1cyanZzb3BpU2xpb0lqNEliUVg3N1dORUppMHpneTZCSW1SeHNySVA3WW9kT2FLQ2RnTGZldElxNzl0QzdjOTE4aUF3bTUxdTUwR1drYUx6WFJYMWFuMVYxdGdvVjYvY1RSOEgwODZ3c2VZWFJSbFBMbnZmbmhUc1Y2Y0V1UUpHVjNhLzdrbng5anZXN1VwSlB0c1hkbm5pZFVvVjhsK0FC''@;'; put 'put ''MFB1bFBjaUdrV1JzMWlsRWMrdlczZ3lSVGtveGtWekhCZjAwaDd0aWxYZm8xM1lkKzJqVmx4V1ZMSWZaZEJWZE5adXdqYytYd2pxUUNvS1dxUWlWbmc2WkQ2Ym5acndzWlM0TEVYY3MyVFhSZlFkUENFZDRyODR4TFgvNjl4eUZOeWl5aEpkYU5jSnlRZHRIeXZvclNXN2s0Y3FSbWZ0dkd4bm9o''@;'; put 'put ''MUpOK2dhZ3A1SUxqaitYdUF1anhYcEZPN3o4d2ZNWDhGMjV2Z1luUWErcXVnTXhCTG5yWUlFaXlyZTBrNm1YbEI4aEdrSjhFWFZRck1DZUFuQVpQQ3lhcGw2cGc2Z1o1YVpVd0ZZWVE2RFZlWXdXR01PZzNXMWc2NTNHZWdWSUZPalY5V09tY3o1UU1sY3dEeVQwVFhtYVhTZGVScTl4anlOYnJC''@;'; put 'put ''TkQrQjF0c25nRGJiSklHU2JEQ0xtVkFFMm1NT2d3UndHbTh4aHNLWDljb0cydFYrTTN0UitNWHBMKzhYb2JlMFhvM2UwWDR6ZTFYNHhlay83eGVoOTVQaGN0NEFmNkJGZEJQd3dnWmNBUCtLazY5RUNSamZ4akxZNXR4TEluSTgxeDJ4elBzSGk4OTFkUDlVanZlS3pCUEtLenhQSTlOdllwMDM0''@;'; put 'put ''SW9GTStES0JUUGdLM0hKM3Y2LzFTTk8vU1NEVHYwMGcwNy9EeWpiaCt3UXk0WWNFTXVGSGNDOTA5L3RKanpUOTV3UXkvWmNFTXYxWHJHd1Rma3NnRTM1UElCUHVxSjIrVEtyelo5VzFxWGVMMGxQMTI1MTMyUGtiWlRPNkxBQUFBQUVBQWYvL0FBOTQyclY5Q1hoYlY1bm9PZWRLdXBJbDJiNWFM''@;'; put 'put ''Y3Vick5YV2FtdXp2TWpYUzd3dmNiekZTUnhuYzV5MEtWM1NsaTRocExRTkZBcVVBV1pZaHI0dTBLRk1TNUsyZEtIdEZDaFEycUhMREcrQWVjTUg1UTB6TEcvWUJqb3diWDA5L3puM1hsbTI3S2J3ZlMrMUpQdnFyUC81OStVVWxhSEZ0U1QrRk9kR0hLcEFkdVJDWHRTRTBpaUh1dEFRY29tTzNu''@;'; put 'put ''eG5lemFUYkE3NjZxdXJIRUtsUVVOUVdTS3M5UWdlM3A2MGUrM0p0RGVkVFBQc2s0ZGYxYWYwR2YyazM4Q1R0UHE3MG9aMXlDYlQrRlBTczdqclAzdDY3K3Z0dmUrKzNrYVBwN2UzOTBpdjU5YjdqalI2am5qdXUrOCt6NUVqdHc0TTNIZDBvT0ZGN21kOUhyOEhmbTQ2MWpndzREc0l2dzE0T25z''@;'; put 'put ''Ymo5elE1b3p2dlBMS0I2KzhjbWQ4eFJQM3dBOUNCRTJ2L1I2ZEkrZlkzdnhpSThJWUxTS0V5a2NSSWR5U0JuT2NreHZUYURRVm1uSy9VS25sbldGcmt2TTZBdWxVSnRucXNOdDAzdjNENW9URzdiWlpxNnV0NUp4a2VkRnRzN2pkRnBzYm9iVTFOSWdmeFdQa2s1V05xQXloU2c3ZUgwRjAzaUM4''@;'; put 'put ''WFFmenVsRTl1bUgwdkhmbmJqRlVvU05JeXhGTUVGNDJZb09oZkxTODBzenh2SDdSVkViMGVtRlVnd21wSUdOdU1VQWZzQytSbmo5YTJrOXB1Q0RXSVZSZlYxc0QwN2lyWFZWT1dMQlZLUHpqYThPWVQvSmUzcHRscjJ5U3ZaSThlL0gwUy95YnpJM21HMk50c2J2Z2RhMzUyc3c3emRjcGY5MWdm''@;'; put 'put ''dml1ekYzNGE5OU5Qd2IvMHQ5TlB3Ny8wdDhGU01iV0hpVVI4Z2ZrUVNFVVI1MWlMdWIzMWRWV3U1dzJzNm5NWU9hSURpT09qQ0RDa1pzUlJ2Z1dDbWEwQkhCeG9yR21wcVo0VTl4aEZ5eGEzaEgybFdQQWtYUU1CN01PcHhERDZWUWVad0ZaSEU0ZW5nbDEySTRjem5RNWZHVFNxVUJRSUpIVWtS''@;'; put 'put ''MWl6OGxvYU9meG93ZGE5K2JFS3haRHZwbm81ZStROW9zN09rYXdlV1owNnVhNU5OZmR5MmNqclRzcmNXWDFycUhrYkZyWDJXV2NiZlZHZU9sTjkrNUpYSk8yL1o0ZmJwV3lJNm1XRG9mMEpxeE5pK0pyLzBYK2xYd0pNTVVLcHhaSEhlaUYwZk5WY0hKaEk5YVdZYXpUNGhXa1EzcURUbjhNYVRS''@;'; put 'put ''b2lXQ0tTV1k0RW03SnhCT09xK0RHM0tQbmc5QWwvcFpkRURSbC9mZ2xFK1o1Snc5bm50eWlCeUhRbG5aRFcvZGFXQkFEaVVSRGc4MkdVS0lqMFo1Sk5jUWJZcUdBcmQ1V1YxMWx0UWlWc0pueVFEbHZEMXRrNENaYkFhYTJjdXpGU2V5MVVLQjZHM1YybXlPSk5uMmZ4K3ZmL2ZWQU1EUVlpUTdD''@;'; put 'put ''ZXhSL3FGTnE3cndtMXg2SnRMV0g4ZFJBS0RnWWxiK0t0ZEdIdVFoZWpFN0VXM1pHbzVPSmxva28zclU2aFQ4NGtNNE1EbVRUQTlMeDZFUkxZaUlXbll5M1RFWVRBNW4wSVAwSzlzZWhwclhma3hQa01ZQjlHUGhQWHV5SVIvMTFOVzZYMDRETE9GTFBrSXBpUGw0Q01uYU1hb3V3S2hKcGFJaWtJ''@;'; put 'put ''Nm1HY0VOenVGRUhtS1VONnJ5TmRFL1o0bzNCTjg1TTFxbmpuWWp1ekNudjBwSU5CT0hQT3B3a2lhVjlKenVQNU83eDFFWEdFNUhoOE54YzVzcElVeWFSdkZyNmRGZHQvVVJmcmprMGZqcC90bm1vbVQrdzNMS1F1MmtnT3VpTGpJVERJODM1VVovNFR2RkExZkhoYThqeDlsaE5WNmdoRzI3dVdq''@;'; put 'put ''MDNkOHRZMS82UTZBVmlBSDZCUGtFK2lVd29PbnJlQVloaXBDeUpuUzhHSktoRTlNOTUrQk12VXRJWlgzakU3aU93SFd1QkkxVmc3Mng1bFNBNHkva2cvbzlEM3NvcXArQTlsSUhXK2JVNUhDTlB3ZGk2aDAxYW5BZ3pOcFoxQXZuWW5Qem5MN25rc0hkdTRaeDMxNDl2dU9ISHUvMjd2MzdWRHk0''@;'; put 'put ''RVlDS2c1emxjcC9iVFFUOG5JN2FzRExEWXVZVTU3MkhvZk11RkgxejFkZWpIdXROK0hmZ200SDFmUXJOSUZMdjhHSlBKSGQyeFJwZE5xMGQ0RjlZaWJvVERXSU9SRnFNVkhkWnF5UkpGYU8wWTdHNFd6UXdQWmRKTndkb2FOMCt4RTFiYWpYbmdCbkJxUWZnam0rbkd3WUQ4VzdMVjZhakh3U0lJ''@;'; put 'put ''WkxMQUp0aHp1dzA2VldDSDA4RitaNzNoUHlkajNWODJHM1RlaW9aeXJjYk1hOHFjMFhBa1ppL1Q4R2F0eHRMczB4bk13S3owdXNwS0xtVFRhczA4VnlhRWRSR25JK3dvNDNpelR1TUlPWXc2dmRtQWJ6THJhMXFhYTh4VlBHZlNhNHk4V1JBc0ZpTnYxT2hOWEZsalRYTkxqZDVzMWp0YTQ2Wnly''@;'; put 'put ''c0hJbVhSYUUxOG1FR2dpbUhpVFZtZml5aHNzK25pclEyK21CNHY2MEhGU1RsTElpQUtBRXhvT2EyWUJsNEV6WUE0dEE3blRvOWZnY2NiREszVjhkUmg3cWZSTVV5bWFKT1hmekQvM1hQNmJPUDVOK2dzZGIzTHROSG9NN1VUbHlDa0M2YUpCRmFXQU1Id1dpajJBODQzcklvMmZESnF0SU5HY05m''@;'; put 'put ''V2g0OUVFRlczK3VscXhsWTdWaG42TE8zQU1xTEZLdEROa25GMUhScUdTb2FMSDdtbkRuTFNLWTExc1A4TWdZejhIOHh1cHRrQ2ZBSmZEMklucFFSdFJtWStEQXk2V3FFY1VhV29xU0ZLODlwdTFSL0hIeVU5aFhrRXNwNE9DNU1CWHl4TlNWb1VuQjZTN0I4aFAzM3daTWZuYUFiemlHSGtTMkZz''@;'; put 'put ''OWlvaE5nRmhzeHpKWHdDRFkyUUlxZ1o0cTZ5dnJxaHlNRCtwZ0lack5mSTZrVXpIc2JhUkVBZ3dBNDNjUERyNTdhdXIwNE9EcHFmekJUT1pnUG44b2t6bVVOKzI5WjJYbDdyMTc3MTVadVdkdjU5alp1ZG4zam82ZW5aczdPOFpnVUEzdmI0QzgxeUczV0FWSHlRRzhSbVN1alFFL3h3UXJBeDBm''@;'; put 'put ''ekNZRjc1TzMxRDZZRXNtQjJaYVRxMU9JOVcrQlRlbGhQeTdVTEFhTlpiQWR3QVpDUmhnNEdidWpDc3NpWWpKR2NQcUNHcjRxblBWVC9rVlh6d2NMSEs0Q3cvbTB3S24wTnUxb3VtSm5MSHI5Y09laDNOak10L0JKcWFudFgvS1hwcHA2QTVmN3hmN1VZcTd2MU5DRDhobUdBSjVhbUQrTXVzVk9k''@;'; put 'put ''elhNNVFPQ2hoWEFNa0NTUXdzQ2NvbmpORXVBb0xBWWtKZExsS2Fkakp6RHFObm45L2o5UE8rQ2s2YWNJOW5LV0dzWXA1MnRHWG1OT2o2WVVibXdBdnhYVGtXaXZxUDV4Rmo0ME55T2diRjl6Y09SekVKVGVQSDkrU1B0QTIyZFU1Mlg5SnA2MnB1VFdYOVBVNzYzRS9kMyt2TytkQ3AwS2pHWDd0''@;'; put 'put ''b2xsTS8yWmZlbUdENkU0QzBGOEM5RFpoUVZtMDBZVUhCRXA0VjlZQVQ2NmxFQUlST2xGWm94bzlGb05nSU5DNVpLdWw2L0o0aVRBdFZZdldrQjQ5dWt6eHZ3elBpbGw0clN6eDlzd3k5SXVZNEhmNFp2a003SzU5UUdjSExDUEExVTczRUFleE1xT2FKQkdFNEszcEdHQVlrc3lwSjdJNUFhVUgy''@;'; put 'put ''allBMlVBRWsrUDBwVmZLYUFsajkrVjZTNWVhVTlQaEdKVENRbVIxc04rSVBTUTN6ZlhPZHlaLzVFcjZrOUdZOGx3MlBSeUZBb1c0V1h1bDV2U1IvSTk2eTBNMWgwd2hyOWNKWnUwT043eFc0Z0lvNEVxb2hXUTBaMHdHSTBXazZ6Z2dwaWxJY0ZxdHlpcGdhaG1xYWFrSzhST2xkNy9RRTlLTVJJ''@;'; put 'put ''V1JMbElCVExuSHlBa2tzdGhqOHM2Z2Jva1NieGU0NTJkWjNvUFgxbThOVFlPMlo5bzNPNS9abnF5M3I5RTVIWVJMei9zTGx5M3hCK01IT3dPMytzNjhrN1YvN213SzdXNGFuYjUyenBidWxNZkx3NVB0dzAzclY3V1laekIyekV3T2lwWHF3QkdZSVpOVkUraEpudUR0b3ZhRGNjTEE5NzBoNDdN''@;'; put 'put ''SWlucEhmamw2VHZESk9ydWxwVzMwUDFpUlRBb1liQklRemo5WXM5TmgwQmJqdkNGd0ZCNFJwNkFBS0dzMkpjSXhLaGNJaDBSTnBUclRYaG1tWVpHaEVEWldPVWUyUTJxUlFLZkFxd2tGbUpVL2s3V0U0WVovbko1VDJ6dlozRDNjYzZPbzkxajdYM3p2WmMwZGMwRW8rTVJFQjdpSStFV25ZbFV0''@;'; put 'put ''T1J5SzUwWWxlTHFXVSsyN1hmN3BqTHBxWmpzWmxVYnRibTJOK1puVy9CdDN0eWZsOUhZMk9ITDVCcklOSUZYejRRNnZaaTdPME9CZkkrdE5YNTExWEMwUnYwWUQ4UTJMb1dDRmxMVm9BVU9OZ3Z4emxHaTZTRmV2Nk5EWFRIQWErZm5iOURQbjVRMFNuQ2RtSDZod0lCQzRYRk92UDgzS2FUNzJM''@;'; put 'put ''NHNJT2RmQXZEQXZMa3hwT1hzVUU2UTA5ZXhnRjVEMHltNE5kQmZzQ3lSczlIUVZOeVVxYk9WaXJJMXB0V3R0N2NWRkRCZDhDa1ZvcWZMNGdXa3draGs5UGtzRlF5UWFSVE5BMVZFSkV0aEpKTitjUjMxbGlwZExMV1NIT3FuQUo3ajhsYS9EcllleFd3RGg0SnlJUy9nQXdYTUg0Y2YrRjhNa3h4''@;'; put 'put ''TjRzV3NVU21BWGQxRCtzSTZGUFd0Tjl1eHZZc2ZrNjZBWi9GWFpsWDgwOC9uV2Y3N0VOZkplWDRYd0JiZWRRbzFsTWNwMlllMkU0Y21WVllQdUdvTGxCSk9UN2xFdlMvUHZ6M1VwcTkvaVYvWng3bUhFT0x4S3JPeWNHYzJTaE9hKzNhTVh3VzVueE95bjBhWm53MTh5cWQwNzMyZS93dHdJOHE1''@;'; put 'put ''RU5aTWVVd0dTbUx4SlROY3pEeDZTS1pReG0rRm1zMFRzMll5K1h5dWJ6K0tsOVFSeGVpeXMxMXJzNU11V0k1LzB6NzNxU3ZweWs3N3cvdk85dSttRXJ1YmU4eHErQzlXaHZzOERaMitwTHg1cE10TThuSXpwenhQVVdtTlYxblpPMTJiZ2U1RjNXakNWakwrVHJBQWFIUlEvUmNnNFZvOUowZFlH''@;'; put 'put ''ZHlJKzcxWndiMTJZTGNPR1EwRUEzSUFSM2x5cm95MEMzNXcwaGhkc0JFOUhwdUNUWW82S25OVmcvdG8yQmNhN0JoSHIzZFRrM1VOZ1NZNlEyY2Z1V2luYldBcVMxVUpuQkl1N0o5TDU3WHpTT2RqbDlpM1NjWHdNYXJFa1dFeEFseGZHZ0FnSkVQQkpvQ3ZrREF4THRMdEpuR1FMQ0lPbHNkenF5''@;'; put 'put ''VFp5WmM2MGJtbEd4bGRvR1hxdEhNenFPUEhVbmNmLzdZVlYrNTRzaURSNU5Uc1dpbnZtNjJKVDdjM0hPOHZYWFFZbTR2aTRUcTY5b0RpNS9adS96RmxmMTM3Y3NmemxyYTM5RWYzR01nN2VuNHprUlA2dXFqRHg2NS9DdFhIdnpzMHNSbEdiQkRFNUdKWlAvSnZwaTNWOXY2VCs2R1FIaWhkL1pq''@;'; put 'put ''OHl2bmx2ZCtackhHNC9ZM3ZMWThhaXRMNXpNTHFiWUJkdVlOOFBaMTRQczhTUEt3R0RKZ0FNd0lZQ0NncEFha09CV3JZRlJRalVxdjE1ZnB5MlFWdVFxa09NOU0ycUFSazZ4MDdlQUFqdE9mdy9mZmY4ODk1TnpxMUt2NGpIUUdnTDRmeGo4RzQxZUNwdFdJdXNSMjRQd3dndzZvRHVTamRobk9W''@;'; put 'put ''bkVROFZqV3hPbGM3bXFMNEttdmJuUTNWamtFbDhVVmFkQXpSWGlqQVBCZ3F1cUF6bU8zS3I4SSszRnJkaTZSakxmM3BSWTdwSy9oVU1mb2VOZFBmdE0zTjlmM0czSXVNdEdTSG5kV0w3Wmw1aEw0MXI1MHF1L1gwcVBqSFIxajBtOHBINkh5NndOQXA3VW9Kb2FyWGNZeWlpUWpLcnQyYkhCaHdZ''@;'; put 'put ''TmFWQlB3QjZnTFM3TisvbnpwbWVQc3ZRY08zTHM0Y0tZbEVyb2tOMzdMeE1RdDQ3bExRcEdXTXdNbU9MbWxldzltV3lOTmlhbjNUazYrYnlyUkhHMXBnM09oY0h1RTZWZDJaclVVd01RTWNnVk1KcVBOWXJTYjdJRUc2dHV4cWxnWnhsa0YvU2hFZm43SmZZdUw5MTN5ODUvUDN6WStmdHY4L2VU''@;'; put 'put ''YzdyOCtmUGd6dXp1RzM3TnIxMDNEcTg4eCtUOEo4OFZnUGlPS2l4R1ZLMUpkU3JNSW9xdThXQnRtVm9aUjluaUJhbVdsL0ZHUVgzZmc2NlQzNFRzbEQvNFJ1ZXExdkNSMWtYTmRoZkhUTUw0Qk5Za0JkWHpLNmRpb3Fvb0JYeGlRZ1k3TWVCNGIyY3ZHUFNYZDBvUC9uUTM2VlhWTWVsNTN3bmw1''@;'; put 'put ''VUZwc0JhMExjZldFYUxSTWlkZHFFRU11WmdNN3FDYktXQ3hvRzZBUkJyeXltZWNSTmhMdnBzTkxlL0VIc0xYbGp1RkZkb0REZDhBQlh0OGxIMkQ2Uk5OMzhHSHB2K001K1FqYkVsSDFDUDJlODZpdzU2c1lUSU9pVDFGWGwwRkhwdnVsZnFrS3RCbVdtTzRXWGtsNEoxZUowcUlvNG5zcE9lRnV1''@;'; put 'put ''bTNwSmR3cWo0cyt6SHlzVnVyQVdMZDVaSE1SREo1SlVhUzlxSjBFc3VjWmFDdFFMR0xtQmNOb3BpeVRKUTZReWNuQUxxQkttMThEM1lzMFpWZ0dKYk1IVHpaRW5YdGJ3djBCRWF3elUzY3lIczFGZHJiaWY1UmlmWmQwd2h6N1lLZ3IyRDRieEZxRFhrdVlkTVBNODhiSm5sT3J4U0xMMDZTQWt3''@;'; put 'put ''YWdDUkJkKzBSODZhejBLazVOUzcrN0d0WXJuUVNkK3pucC9YamsxRXNNZnYwd0xvRnh0VlFuWll1bW96RTZrRUduUlZwQm9JdjJBNTRrQlVLa1hyRUxVRzcxUTZ3L3BhRmZySytMMzJKZE5rRmRsd0dNRXE5Z2dCUFlMMklkMW9taTlMcjBPbDJXRGYvSDZoUUpzczkvVnNmOVM0YkxkYUtiSjZS''@;'; put 'put ''a1ZFdGhWQXpMOHNwalBnNGpEdEZqZVlJTXduaURxMDlRL2t0eCtIZi9QK3hxbWVuc3YvdkFnYnYzajk4OE1YSHp1SXk0Q3NzNWVPL1MwbWNQZGs2OWIzTHl2Vk15M2pKNVFISDJJT3pOQkh3SExHTllCWkFxaDZtYlpOMlJEMXNzTjlzc1pudTVYUWcwNktnVDMxUGdQWGF2eXBhRlNWdzljR1ZQ''@;'; put 'put ''ejVVRC8wZkVGZk1uVHN5L1RNNjFIYzZESEpOd3g4emc0S3owZkRFTWJHQlY1c1FNOWF0cmlRN01QT2FCNURDSGg5Zk5wMkxmdHQxdUQ5bURzVUNRTW1HUTVFNStnelNHRlpGc01PdmNKSXJKN3lKTlkwMDc0MWQyTGFvd1dwdTRwdW02Qmw4QlNManEya1J2WWtjZ1hBQ1c5UDM4Y3VKWThGQ3FH''@;'; put 'put ''RnhGOENxSDlZRDhKTlFCcDVxbXk2Q0tLT3hOSVhlZnp5TUlWc3A3WUxWV2J4QnNZSUZCVHB0VVlFWU9YamIvNk1qRHo0a01kRkxzWlFZMmZNdlY1Ukw4WStEN05JV2M3RWQ4alVUSVV5aEk1WlhEVHUxaVFyVktGVlRVeVZza3I0SW80SXY0S0tnb2pTc3FTaUNvUW11ZCt6bWNDazc5OHYzcDBK''@;'; put 'put ''RmIweE5OZTQ5ZWZWbkhTczh0SjBMaDQ5bllVTk9lbzFkZW1Uc3hZc3lsV285NE83MlpyaXIzOUhoMlQvSlFhM1BjMitWcmFYTzVkKy9NTGlSbFBoZ0ZHQTB6SFVQMjFSVE1TdG01b3FqYTJBdDJwUmVveGYwclV2TXJFY3pLTG9XTzV3QS96a0ovTy9LSWRZcERIK1BpcmRtUnplYXpxYUtZOHEy''@;'; put 'put ''TkxBelhuaGtVc3d6enhNRXpVNmFSVzJid0o2V1Z2dU1kSGNmNzZHOHp0NHpJYTFYMUlSMmRTOHZzWU9DYUNzT1V1UTZvL0RMWG9Yd00rQWI1dXZRUEEvQ0RUZGhFdVM2ODdpSUhZQ3cvbUVrYVJrc3dWaG5sKzhBb2FGaUppWEcyZWVBVWxrb3RsYUpKTjZZL25OZUl2ZjZoYnp3eitKV3ZELzI4''@;'; put 'put ''NXh2ZjdJSGhuaUw5N0RWRmRxOStYbDRueUZCeU0rTnR3QnNOT2hnYWpwNnluL0pSTE9PYXhXSVJLRnhobFRDa2dZMk9UMkhkNUk5K05JbDU2YjhuZi9UcUpKNlg3c2MrNlFkNEh1K0dkNTg4dGdYR1BnTmo2MUd0V0szamdBZ0xERTd4QkZnRTZnbFF4b1FqQzBtLzJQblRuMDlJLzY4UFYrRy9r''@;'; put 'put ''ajRQb3gyWGZrYkhhb2V4UkZYdVUzaXV1OWtLdm9XQ204MGlzQlZuWlJjRENQOTIvSUMwRjc4aFRlTUxxNjhuU1hkWGN2V3JzdXlmV3ZzZ2JpTS9mSnRXWEJJUUMxNVRQejEzN3Fma2g2MnJWdXA3WFh0ajdWRjgxelkrVUE1MFcrMEFYcEpkb0JpMXdIeFZoZmxrLzl3eW9tb1o5ZGZTK2RENmZF''@;'; put 'put ''NWcrbWw0dGNCMFArMGh2Mng5OHh3ZFBvTS9neCtVY2V1QzdraS82QUR1enJ5V01EUDE0RjZ0ZUZndTZGQy9OUW5zZ2ZkK0wzTlgrMDAzNTBBSy9lclZWK21hcGJWM2tsMXI1Mkc2QmpiR05qNWpPZ1FQQUNSa1p2V0JuVG41WEx1SmlONGtMME5mSit0cmdwNUQ4TTNWRmhESDhxeFpwN2U3OThZ''@;'; put 'put ''cytVckZoMlgrMWdyNnd5K0lnS29CNDNhSzQxV1kwemhCSUFpZ3hkZlZham1kVmtQTldLMk9hR1Z2SmRYaVhZeFdSdlZZcDFPVkxqZVltTzZBMisrcGg1RmNQci9YYWdBNElZY2RBRlhzNm1LMkViVndMYUIrcWVFd2ZQcEUzbjBpdSt1U3pHTDd4TkxBem9GcDEvNEYxeVhsczVNOXV5YzZpSERO''@;'; put 'put ''UWVrYnV5S3RlMGRhSnlMMTlyNTlzV1NyNU02M1RWZjN0Q2E3NUpnMHlZTjhzWUFGMGkxMlZwUVJyWWJ4eWNyUmdsdkd4WFNvRGM0NXF4VWhhNlBWNDNaQlQyRGJtNXh6UVlwVFFyRlBUaFc5SHp1Uno1L283VDVjbjgvWEgrNE96U1FTTThuMGRDdzJuU2JDNEkxalk2Y0dPOVBMNUVucDM5S2RV''@;'; put 'put ''azNib2M3T2cyM1U3WDB3QzJlVUFIai9CdUM5dFEzaTJ0NEdjYnlsRGZMYkd3WUhieGhLTHZyRDdxRmdkbDg2dlM4YkduYUgvZnRUcHFGM2pZeWNHZ3I1bW1zYmNnYzdPZzdsUEhYTi9pWjY5aG1BbTJjZGJnTEg0RWFoeFFESFZHdmxySG5tejFNVTdHSzRXUUplZ2NJTkt3ZTl2a3FCYkpiTEhn''@;'; put 'put ''cXVYaFY0TnpHSUpSbjB5Sk9yTzViVG5ZT254c1p1Qk9CaDkrcFZXUXF4VE52QnpzNUQxRjRDdUJFZndNMko2cWlWQ1R5R0kwd1FFMDVEbGd2TGM0M3FpdlNIcWlxRXF1cXFhdDNWOEpjRERBTzZVcDhNc1dJdHdsTkhra1RIZTJDeCtNZ0JkN0RoK3ZiKzZ3WjNYTE5qN0IwZDBxZzJNNXVhdUxR''@;'; put 'put ''TVg2czdNQm4xMVRaN28wT254a1p2SEJ5K2RTRTkzNEwvZG5ubjFCRkdmeUFQOEJSNUJhVFZIckdzQXV1MGxSanB5SWpzREtsQk9wMTJDVFNHS21ad28wWFFmbVRIRzh0UXFBWmxWd2QwdGxMNjVZSlk1dld5MkJYUHUyVmU1Nlg4aHptR21QTllaMy9zMWx2ek16UDlxVlNrd1JHbzloRnRUa3Jo''@;'; put 'put ''YitjRzIwYzhNVWV6UjZiMStOb01xUUVZMGxqOGtMaWpycExvdElvZkUyZ1pHSjZPckZENmhvbEJzYUZ1R1ZmQm1XbEZZdzBnTytWd09JeFFIL0Q3ZlpUR3NhQ1FDN01xTWh1OG1ZQUY2UklzcU9tK2NxanpTbDlOdzJMTHdyRzZGYkgzMHE2dVMzdDdqdGJkT3B0SXpLYVQwL0g0ZEpKb3BkYmVs''@;'; put 'put ''ZlpBZld1dForL2svblM3ZU1YQWppdkVYUHFRdENjeGx3WDd2bVV1RGRCbmNCK0h0ejhBSHR0cHBNSWkrN1laRG9PeXhyeHRyaUp6REZRSndlYTFVZnVUMGpxQVVuSFhDQXE1NDhzV1d2SVQrZWhJT0orM0w3WVJvWFZQVG5vRTkvZE1CM3FEMG1OQTE2K0ZNd3llM2ZEK2NmSVZrTkVWMUFJc3VG''@;'; put 'put ''T3I2TUVKbzZvMVhWRnVOakYzcVhhVHU1UUhFYkxiNWJKWTRBVzhoRnppc2dqVjFZTEZ0Yno2Qm95Lzl0VGFCUG9JRzk5TmNiNEMrSEk1MXNCcGFZdG00amlHSnhyZ2NocU5XelBHWExSdVU3WFRZUlhZckh5SmsxWTVLcVk4NmJ3enlncmVFYTBvTS9zRnR6ZmZuMXBmeXBzL01mQnBMZDlVVHpL''@;'; put 'put ''ckw3UU5NM2dEU3dEcWV4Skc5NG9OQmczUUc2ZXlXN29hVlQ4UnJFemFZeXJvR0M4RjJGYi9ZT0xMeS9rOGJwckNWZExQZm5YMGZRRE9XaHlWNVJjOW52ZkR1S3JkVzFsaTk0NEJsSUJWeUcyNUlPQ3lGNlhFbG9acTJlN1ZhZ1ZHWExvbE1BWjFPdGVvaHNiOTVIUDNva2F2WVBWYXZUWURVRkhS''@;'; put 'put ''MGVzMi9KSzB5M2dMNytTKzZWaCtxRTJjeWcvU3Q3eDFLdDArWjYvYzMxbUVFaFA1OVUraUhXdUtkNlpBSkJWd1V0aUVrOEtmZ1pQMnQ0R1QybG1Ha2dxZkhJUjVOOW1icm92YW00NjN0amRmT3pVOGZHcHc4TWJoNFJzSE00dlo3R0ltUzkrenBwRjNEUTJkb2hJRzVFeXUvWEF1ZDZpOS9WQ3Uv''@;'; put 'put ''VkM3dko1cDREbDVXRStKYkJhS1pmTzZXS1lBc3VLTHltWVZNSCtXYkpaK1RTNHNsOGhtS2c5blFCNEtXOGhEb1VnZXJvdkNVWmt2YmljUGhZdHh3cmVRaDlyVlNTeXNDOFJsS2JSQkhtSTBEZmkxQUdzMTBTdzhPVHFyNHRlNkpnSENRN0RKT3JjbGs3UVhNT3B2VGd5MDcwMENHYjdTazR0UHA2''@;'; put 'put ''VWZFZTBsMUk0RDNlUnBHRE93cGIzcDJteHZCcERmRnk2Mk56UEY1cVpEa1V6VTJpVHMyTDU5VmRTemJ5RTkyRGV3ZnpJKzFSby8wRnkvYzZTbHIydG5kakRjTXBzeU5mbGl2UzMrWU5UdTdzczA5L3JyM1ltV3FLK3hxVnJ3NWNMaC9vRE1JL3l3eGlueVVaRG5jVEhpeERxMmI4TGRURmtpV2FU''@;'; put 'put ''T1U0Q0JUcWRxQUV4dVdodXA0UFRMZXFpZzVIMEFSNkp1L0V3V1Q5bGFxMVA5TXpQNTk3ekhWMjJwTjlvcmhaRjJQSlA3MElkeTBnT2VabE1aNDAwdzczOFJyVXpQSE0wdUdkRUNkNkd6VWYwSVVlSkNhcEtHSGRtOU5pL3pjUmJwUlpUZHlsYTVnUCtMa25HYlN0UnczRzhBQlFOUjR6SHBLVWJV''@;'; put 'put ''ZUZqZUwralZ4RWEwYWg2RWFxbXB1b0ZnWVJhRlZUWXQzVHNlZjJ6SHExa1FuaVA0VVNwRE1MQTl4Rm1oZjZtTktyeTFqZXJ0dmUwdk1oOTVmKytEK1E5K0tBOGpUdUNINkd2MURYeS9ORit3cGZFZllXeVdkMVBHYTdDR3NqbHE2Y0RZSENseWdJS3RTdkhFQXhhUE5aaDBacE84RlorNzk5N2hi''@;'; put 'put ''MzFsK05PZkhuN211ZTkvSCt0WFgzeHhWZm9qSGJkdWJZeTRZRnlCd3Rxb0o3QmtqTUVBVm9ZdW9LR2JVenliRnB1WG9hR01oZDJZWTdzb3gveGhmMld0dDdhcHZQNWYrNS81VXQrdnFzYXlqd2paQ3Flcmo1aWxMdnpzNnBPZFdTenZCZGduZmdubTNNYU9GZDdhanMzZ1B1bFpmSWYwRkI2UWpy''@;'; put 'put ''WGdUM2EwU0NzZGJOencyaDY4bHp3QkhBVmc1R0p5b0JMam9VYVdWUVFONWhXQ3hXaFNjRkF4cDRuaExnenNQMDExS1pxOTZTd25kcWNjRk9GcEdKekhwbGwvSXRzVzk4K09hRHZ5THV6ekI3ellsZS9RM2hucVQzOHdGVzJKcFc3UDlBZjFjWDFOb3ZtT2VOWmt6aVErSEU3VTZPTXd5MlZyajZL''@;'; put 'put ''N3Q3R0pxWVM5TEpWU2tvS28vMmtQM3MvV0hoTDllbWJMQ21CUk5tSTh1SjVXdDBSQk5VbXpaUWx2Q3p0QmJBVGxnSDZXeHVxemRhUVdBOWJiRzNYd0NTY1NZeXNPQkh4c3hTT3ovbmhiTmdFN2VTY3NOdnpoZU5ac3lzYnZhS2FMMVFmN003ZW5ZaTNSMUFmVC9TSDkyaHJxd2MzNE5QNkN3R1B6''@;'; put 'put ''bWlUOUVoa3VJUHk0OUVzV0phYXladGZhSFBvaUVWUjlqSzJPQ2p6WHFKcERZaVVsK2hqVGllUmtMdEFPa2g5VjRxbStZWE9DQ0dyOGRIVUgvcFVxWHg4RisyMGMxUUJsQVpkc3FLOXhWemx0VnJPMlRGYUMxQlJkV1hsbVBFaW9sdEdGaHN1OTZSaFJjM0xwV2RLa1hIckdQckNYZ0R2amwyWmpZ''@;'; put 'put ''djVJTG5ja0w4YW1HOE5WK1VadmQxVll1bW0rcjIrK0ljUjE5eHJIcnVydHZXclVLSFp4UVU5emRUMG56V3NhcXB1dlBpbmd1NFdUY3U1VUZoWWFZWEd1UGxHRW82VkpHb2ludVo0OEh0WmlBa3lUSjh6bHk1UjhtcTNCODBWdTkxcFVLOWo4UHREZnFLcmt0M3ZTV1pZdHQ5SDhyTVUweDRkRUpH''@;'; put 'put ''TkhMZ2N5ZE1kSlY3eHlJUWVjK3NVWHU3cnE2MTdNM2Q1L29sTk1SV050MGFuazdia1hOL2llSE5RVGJNUElnTUgyUUR6TE5qaXF3d1RVRkEzaGxzdFlXcmFjWCtTd1d5MXFDbmFsa1NaaHMzUjR1NXJFQnk5RzhQaTJoMTU1NVpVK2VEMzBSK3F0d3YyNVBibnJyb00zZkNsMVdiSHo2eWQ3OEJ4''@;'; put 'put ''NWdPVkJ0REl2U1pBbUNnSXlNOGZsa3BhandNS1RXMlE2VUFkS3NTTGRXdlQ3dnFvcW9kSlZKWnhUUHNrZSt1bXFwTC9MbjRDL1laVEdYOFovVjltSXcxcFV5ZUV3ZWxMeDI4emlhOGpadCtQem9ma0szVGdqdlVET3RyeGRuNCtUOXo3UmR6WkxYcTQ0SS9PNjROcExnTVBuNExSQmYwZFVmQ0p5''@;'; put 'put ''bW9yTzkxQXh4dHgyekcwYllGSUJLenBNQjFWcHFQL1cyTCtTYXp2YzlkdjBqV2tjYnRtZHkrMXVXYTBuWDF6ZEplZGkvZ1I5Q25jQTBPcEVkeEdYSUpSOVRCWWxNR2FLb0xkWVhjMU1rSis0clBURDZsTDhXV3NpZW8xbVFhSnIyZDRxblRiQVphc0J4SmVlOG1ld3JFMWdXVGVBT2czeVdITUZ6''@;'; put 'put ''YllBcnIyeXpsZ1AwR0YydWtVUGF3S1lkWHE3TmdzaXpTVjFJWmZWNS9OUndVMUJ4NkxSekxaVnRCdnF1d0xobFVtK0ZHd0xWY1VxTGJVK1I1M2RhaXV2OUNTcU5QcW92OFlYcXpBSEtSSllqY0pFRHJPYWhoU2MrN1BzM0NNOFBmY0llbHJKeHhqQi84ejRsUSsxaTluR0txZEpRK1R3QWtGMHJR''@;'; put 'put ''d2haUVlHMHVjQVVrU2V6K3QyMmEwRnZFVEZMRXhKanFKdUlaMnFmUUt6d1NHRnIzbTJ5Q0ZaNTNQU21TMnlTTmdlbU4rY3U3NnlFZFpLODNUNjBFZlJGNUQrQXNIbjVUU2RMZG9jeDg1dDJweFUyMkFlZlhHYk5pdUZObVoweHpadDVncHpIVVdmazl1UXpXMitVUmpIaUw2OXNZMmNIOEU5eEdq''@;'; put 'put ''QmdnYkZmb0h5SWliMTlRZ0RGOUxET2VnMXl3WmdrTHBGMENzVmY3WlcxcHlZR1dXcHRFRHZDb1ZCR1lGallqVmlucVpKRktBaGdDVmhVeVBuMG12N1IvRHRSQ2Q1ZnFhRTBHbENSWmYwRHZ3UjZYS2t4TDFGbHFlUVFhK0w3a3c2R05Ed09qZGdhalVObWJrcUFJL0xNZUcwQ3ZwSGFDeUt3MWZB''@;'; put 'put ''RzlLOFEvVXlPVVlSOEhURnBBTHBkd0RXN1NZMHljWkdNM05vSDRRMXA5OXVKMXB2RTl2UWlUdDFzVjVpZUhNSG1nMUZqbXpSRDQzUnRCeGp3TjhNMUdjRkE2b0dwR1VGVnZuRFpncVVaZWhXcmxDeWVHMVB1VVpmdTVrOHErWS9QcjlWamtZOHkzbnhScXB0MHgvNXpKNlNwQTJLVHl5SGd1RjNT''@;'; put 'put ''S0dCOXpOOHdrVjR1Ym5OY2ZUd05tMU9xbTJBQm03Y3BzMWNZWnlqNkNxNXpUcCtyMUV0N2NOc3JvaThuclU3dGhvSFZ4YTFPWTVzbTl1cy9RTEdlWTJ0SnlLdlorMXZTOXI4TzdUNUkxdVBQTTdSdFhzMnJnZG9xUm5lWG1DeDBscWF6YnRSMDFqVVl4b29OUlNwR2hVVjhGRmJVY05LcmV6UXpR''@;'; put 'put ''d3lwMnpkMEdmR1UxSlFqWHlncXlRUDVpdCtUazU0R1JsUlUxNitnLyt4a1BhQ3UvTzRkZlYyT2ZubEQzbFdpZ1J3WURGOXhsTmFGSjd5aVJKWXNUZzFnMVdyY3I2UGxmQ2R6VzJPNDl3MmJVNnFiZUI4WDltbXpVcWhqUms5dEUyYnVjSmNSOUZ6bS9nWFJydlFYK0t2RVIwSUE5M0RlcG9iQ1Vw''@;'; put 'put ''bEVFZ2ttSFZtblRoemUrUjIrZWVEWVR5aC9uYjc3V0drNXZQK2p1WEkrMUNjMWdkRndyVTFMb2ZKb0djK0dwYTJvN2c5SEhMNFJGY1VQdkg3L1hGL0xHZ05XbGtHdHByVkdnQWJMMXVVTDVma2tjT0pGVEpGY2tnYVUrL0hNNmtEZCs5dnZ6U1dIcDZMWjRBMjIwOUUwOE96cS84Vzh1TlQvdmtZ''@;'; put 'put ''MENnK2NmTkV5Q2ZkQW4rUm1uZnZXUHJzd1lDMzYxRExtUjFBbmZRMzZUc3JJZnh3VFQwUXFmVDlxZmROWm84MlNlTTE5UXgyTEtiTXpxbE5PY3NuU3M1N2M1dmo2UDl1MCthazJnYk84Z3ZidEprcmpITVUzYjJaVm1XOWw4M1ZxY3oxOU1aeE51VWF4QmozaEhQUUx1dXdFdVVvRksyQjVLbHcy''@;'; put 'put ''Q3FjbFU0aDRLbms1UWhvc2loRHcxL0kwT2o1NTVJTWpWTXNSYVB0cG1kbUJnZG5wQmRrbVRQRGNuR2VCUnB1RVdOR1VNS1pHZ0lDaDF0UkV5NlpXeHN2NnVSMFFhdlA0L2RFdkN3a1VaSzdIY2JwOVlJRmxYRlQvK3BNZWw4dXR5L1ZHbW5yU2UzSjdoa0k3d2pOOWUzbzZCaWZiRytmRklrNU9a''@;'; put 'put ''MUlUQ2RUTTFYdS9kbjBmRXVIcnp2WU1kb3hrbTRiSGMrdFNnQkhPVjc1TXNDeEgyUXZRWDJYeS9TOThUa0g4UDFFMGZQbjFmYVlQMURjL3VuQ2MzTnY4Zk1IQ3VNZm5TOTZ6cmtMN1kxVU93TWFndWZjWGFERFJVSEw2MEhIeE9VYWdKM0hEVXFDSGV0SkR1dktES0I0OGpvdERhT1c2VWpaQ3RJ''@;'; put 'put ''akhhL1hMWnNOUk0wR2RvMldHMDBjRlliVXR3TzBsVTdIWWdpbGU5SmlaM3NzRlV1MkpHQ0NpTlhuOWZsOS9nb0F1UnJFa3ROVFM2S3JzZ043VTJnTDBWeHpOZVpLWHBYalhIM1hldXV1R2RwN2FYSG9kZkNBdzN0NVQwbnNTN3BsSWtwRHNwUDljaFJzb0tOallHRnNQU2JibGMza2kyTmkwa3g0''@;'; put 'put ''TkJxbzdtbE5kY280bGxnVFdld3pneTZJN2tUYzA2RFJhdXhZcDAyQldxOHJxUFdxWHVQbjRTdUNkVmVnNGhUN1FsQ0tucU1icWJwSmdEWFc2a0JwZnN2V29yZTBJYlVFMEpGQ2V3MnRBZ1hKQk12TXlBcUpucThPYS81RVJZUVcwV1dTK0hDSkl0SnphZGRXa2RyR3VVUjVpUUdSMDQ5ZXM2TWtl''@;'; put 'put ''TnNZMGpSaWlwTnlUSlRpL0pCTUN6Zkl1THJ4T2FXRmU0dWVQNisyeC95bHhlMGZLSXh6OUJCN3ZrWlp3MjFzbkpmazhUOGd0eDhGZ0JtTG5oK3ZrTnYvRzN6OGhvMy9ranorZmZMekg4UEg3OWo0Y3Z1am4xbXZxMmdsZncvYVFoVHRFYTJWekt0YUMrb0FhQU0ycTZVTUQ4bDU1dzdWQlMxc3lB''@;'; put 'put ''NXppemFhcHNGaHNsTDhHQ3k1dXJxNmFGMGs0QXY0YWQ2c0twa0tpVkFCS2lEcFNkSnM3czFlZWZ4UGkrS1Z3OE5YOVhTZDZEL1dGejU4eW5td1B0c1ZEQjl5amxUTXhtT3piWm5aZUdJdVF5eGZPTER6OUVEdnRhUERKM3RtWnVhenFYQzFyN3JHRzBsNVZsOUk3bXR2MjVOSzdzbTE3MDBCdk9S''@;'; put 'put ''WUVPVTFVekt2R1ZtSCt5Q0Q0eTUyVG4zb3ZWcytQNDdPRnoxL1hua084TDJ1ZUp5bkM4L05lNHFmUDZBK1IwY3ZsM2xXSHpwTnlra2Q4NU81MFNHNXdMcUdWaXRRMXd2UzhGaXIwUjdXcVVGR0Z5MmtiVVJJcDVhRXFPMjBXczA4a0kxMmlYV1lYQkFkekNCeVYxYURjRktkYkhwcW9SWUhQY0V1''@;'; put 'put ''S2k1cXdBN0ZNdjBwTGIvNGpsck84RFhWSkozTlgxaXZZdUFLOFMwbldHN05yQVlKTFB0UXNOcmxOT3EwR2ozR1drNEpoS3duTUd6V1hEd2VUN09ueVc4SldqWm9Mc1dLQzlOYm5GaU93bWtVclFXNFprTncrTWJCNmY2RzRXNXZhUGpVNEs3QmhtRlJPdG1DVGFsOGRqR0w4V0xXNVpSZVMrYnh4''@;'; put 'put ''L2VuaHQ0MTB1SWZEaHhJRFowYWFRMk1TbS9tY1h1Zy9WRHV1KzJIYzRHQkd1azVQNXlSSEZlZ1o3MWJwakdGSmpjK3B6andzYUxuejZ2dE1iK3Z1UDBEaFhHT1RzdlBaVjg2SFdlZk1zN0hpK0p5Rjh1WitiUGljc0tmSDVmalZyWkltaW5heHdQS1BtQi9NNmpJeGs4VS9BREhGTDIrV0krV1pm''@;'; put 'put ''clpna3cvTmxMY2QyL0JQMkJROUxiU3ZoY0tjdDh3TGZPdWhyVnB6Z3E2bWhOVlUvaTVzSTdUWTRLZElGRzRFWkF4aUJvL1I1a096UzZYR0ZXMUtDdE5TNm1xcnFyMkNZTGc4RkRab2xXOE45bWdYSFFoUytqV3JKRndWbTlMdk1NdTlCY3FNR29hUGJVTjFoL2NmLzhkdGJtRXM4bjBLVmFOMGVp''@;'; put 'put ''dWJiRGpIYXdtZytaMFRaTWMwRWd6aUxCRmNRL1ZTTnlZS2lROGlVVU5uSjdYWTYyK21TWkJVNldFMXhPK1VJbnFvdXVzQUN0TnIxZGpuRW93RGRZZERvY3o0WFRBWndVMUpPUXBBeU85c1BMME5tcUlYVkEzRXloSytDSTV1aTIzb3lUcDYvQUplWDgvVjVPLzZDN2RVV1BmeHV3dm1oREd0dnlS''@;'; put 'put ''UWhhWWFpOTlnT25ZQVVYSC9rT0pyaTduWDFGNkdGRG80Wk5GZlUrcWZiRWVQYk5OMytlVnZnVHJENjdibG8rd3ZrR2w3ODBsZUVSenJiNUdub1EyZzZ4TkJXanhGbVNBTm85ekZ0b0kyaWoyTTJEb3U1R2FuM1VJYUxRYXZoa1EreXdhWXREVGFrc3RUWnpXb21VNG1zcENCWlhDNTZqam5QRTlK''@;'; put 'put ''eGx6dTkzTjdxWWdqWUFHdklycjNGdVNwNlVXd3FQTjRlbERQUnZpMCtmUDUzdldVSEdRZW5UMVMwVkpXMzhiNisxZGZXUkRtTHJneDBnVS9CakhZTmxid0JYMGo3TUYvZVBZTE5yS0I0TEwwUGUyNmF2cUxoeTBVZXBkZ0Fab3ZVc045ZXBWZ293UU1LM1hWVE5KS1lMemk0am5GWWNlWlhjVm8w''@;'; put 'put ''eVlBUUZZV1gxeERhb1JiRjZhMFMxUVhGZnJZTHdxUmp0bDVNOFdGY1pNeXVoYlE5RzdSbnEyVUNYRGtEVU11QnlxWWNVdE5JNTBtT1d6MFJ0ZnpvaFd2dy80YnprR3hSUTBHaDRFcndhMFlBK3R1VU02RUxRNnpUS04wYWdIclZ6OXdCSVFHSmxhcVlqMnEwMFpBUERoclhyUWJMSktkbVZNek9X''@;'; put 'put ''MUJ2eGVMdzN4YURadVNGZVNIQ2RydEx5YUkzZDlZWk1HVzltbVRMa1dzQ3RzWXVCdkZLT2hzbGJadWNOR2l0UG13SUp3ZU12dzkxankzQlkrTWYwV1BySE4rcXRla1pXc1Rvang4V2FGano5YjBsZk9mYU44ZkVUbTR5dEtYK25YdE1aSTdndjRVMEdNVEVkaTdUbnFsSXFoUERvc0hvaldFejFm''@;'; put 'put ''NWFTR09LMkRSME5HNmh6bTlKb1ZnNm9vbFFQMTZYUUNkV3N5TkpMamprdHkzREVlcCs2dWVEN2VsVTFYeENwaTRTYXZwNmJhYnFWdXJ5cVRxaVRScTFSa3ZjajVKK2JWWWJlcnhsc1hNQWhPcCtXWGJ5dkZicStudXJvdDZnaUg2T1VuYzI4MzN3NzArZjhOK0ZYR2FGcjJCUjViKzNpSnYvQmxh''@;'; put 'put ''S05sTkMzci9NZnVVSElHMXFiUkQ0RXVyVFRPVGlXbVZZNnpxMlhvRkdTcXZQR0JmR1RwMXFxVUFkMUNKYjRmVXV5cnRvc3l3VkV4VVIweGtic1ZVY2hrOU5vYk1OY1RMTmJub1RlcTJHMUV3M213WExaZk9ESlZXYXdvRUFrTEVqZlVnUlhpcURCdm1VSm5WUmZrcE9VLzZwSVdxTlZXVlZVNVNa''@;'; put 'put ''Zm1kVnZ5OWZMaTFGaWdVTFhxZ0hYV3QraDUvTWZWTjVTRkFnN1NTczIvV3ZldEFnL2pOL21HV000ZDJHTGFRbTZjVUpJYk41clAwendTR0c4ZjRQUVZJRWNhQVhjWlR1TnZ5WFliUE9jWXJrOG96MjlqejFrZEZwT2JjVVZ1bHBYUUQ0QUVsM08zUXB0SnBZMEZQU3EzZVZSdEk5ZHpQYW1PQStO''@;'; put 'put ''ZnhXUWNMcEp4ZEp3d2F6T3B0TGx1WXhzNWo1WjBBWTZZYVFhYnlWaG1BTTJlMHhPMXNtMVRrWmdabWUyRklqRStUWkVrYStjRjBpWDE3dGtqZnVRalhWMjRMaWJHOEpUMHlxZzRLa21va0t1TFdRNWpnMWhyTE9OMVZLanFsZXE1U3FVWXhNNHVlOEU4YUxYS3dCaFA1Y2ZIODFQNFFMUDBBbmFH''@;'; put 'put ''eEJBK0lqM1pYT3hqdmw3MU1RT01mbFVDUjlrV2ZGbXhCYW4rY1pmY0Y4N21MOW1adFNobjgzdTV2ZlJybWtlb3RvZm45eFhOZGJMZ3o5YkRhV3c5MS9NRnUxTi9EQlg1bFJNRnYvSXg5T1VTZlVXMnM4NFdiTWRqaDlCVy9tOWNqdjZ4Sk82MjBYNGx1UHkwckRPbmdMRStDK2RxQVl1L1hjd1dx''@;'; put 'put ''bEQxcEZDR2FxRGxkbXFlRFRNMmFxMDFEaHRMckpNRnNXczl2S2F5UXhwaFcxZGIvTElvWHYySC9mY2NPSERQZmhLWFBEdmxnSThpakhkL2V2L1MzZnU3Vmw4ZzJZbGJKeWZlUGFUWWxkd2JMSjgwaWRyUmxEamh4SG9kZGQweHJRRTR2VmF2V1RZWmlFNG5WMVc2Um8xOEdVZDFlc1ZsbDByNXdJ''@;'; put 'put ''cEl0YWR5Mll3djZXdU5OTk9VVTZzdjRQT2JZZEViSFhicmZMeEl5RFpzNHVoSWxyWmNoK3lwRzdxaDBmdXVrVUdXaHpuOExxL251cUdDekpXT0ZXVms0ak1iY3RYSGUzc201QnpOOFc1eFRCYSt4V21hYXY2NklvTVBzck5OSy9qN1RBbGV5SG1IOUd4blpkL1BtS0tyQWY0ZVpQaWJWdkQwQ2Jr''@;'; put 'put ''OTRPOEN3OTlaNWJteGFLNlQ2bHlBdisvZGNxNzlESDluWmZ5MXlYT3h1amkyem95eXpydEtjRi9PWmFUcm5KUFhxY1JXWTJzaXE2a1QwUnVpTTluYVVLL1I2ZDAwNmw1ZENhS2RwbGhyRlA5amRHTmNGZlRGSlJEc0R0a2cwdUt0QTZ1eFRZSFZpL2VpM3N2NDVrRHB4YnJKUWQ4dFFxdGJkSlJq''@;'; put 'put ''cXlaZnhFZFRHNndXQTVnQlB0azl1VTEwRlYrOGVwQkUwa2QyVkd3VmFCMjhQckY5VGVITjg2bVNlR3RPMnhaL2l5cERscGNxc3J6VVBKeFpUV3RMZloxR3kyK01oV3RHM0tEeERtOFpFT2Q1M1JLaXllQm8zWmR4MFlENFJUdHRHUkMvU0s5dEErS2wvWlNBdUM4Y2Vuc0JjWHl4QkZ6ODlLR1JM''@;'; put 'put ''UVBqaWFYQXRsbTVvN3UwalNXbkZhemZQazIzbUQ1UHF2UUp0SDFzRy9wOFhxVlByTThxdGFSQW43U1cxSU1lRnUxVmNMVElhUWFKWUtLWFo0MTRzRVk5NUNhRWFJcnBGU3hFUlU1UlI1V2FvTUYwT1VMd0FaRGticXdlVmpQdG9FSGM2YmZSUXd4dWFrd0xBZ2src3FrUGl4VFE0bjVHV1BTTTJJ''@;'; put 'put ''MVRXNTRRdGJ0cCtTdWV0VzV4Q2pWbHRDWTJ0Z25XZlVVMXNuNmdBWnIzSEVmUGlhNG1yT2VhN2NTZ2o5b0lNWlJFVGlKSXE5SGVYSVpwYlkvaENoQmVBRjVhMmNOeG1rV2RYTjlURWtDSnJ2ZlJHOGpwaTNVQ2NHN1pYZ21tRkhYaktKQXMwQzJPNGl3YjJ3bkFvcTZJYlNJcXVEUkQyOGt3SHdk''@;'; put 'put ''S2NEZVNYYy9hYm1qd1Yyd1JRQmxNRm1keXg2cDBmamtuaTlVc014ek5Lamo2emhJY3Bibm1QMkM2NnJ5c3E1S21FbjFXanYwbUNySGZZK2hqcGJvejg4MmVMZmhtancyZ29yanhOd3F4WlNQNlZrbmNtUFZsY1VmWjMydThBVzBWdXdZOTdQTmI5UVdMditCYnh1VkxTS20zbm1iMTFuN1VJYlk1''@;'; put 'put ''Z0NXVnc4bUM2TVBjaUhKN2hYcEhLblA3cmh0RjBNUHZxL0w2ZmZKZEZyTFhmSk0zWkZOOU5qazdlR2JLcktzcWVBeXFEbHl0VkdxVGM2d3VHMXNhRkJlQnY5cnh5UlBGZGRzczczNmE3QUM3aDYzVkFMYWlIbXM1UDZhM0VpbkovdFJmV1VpL0wzWlgrbWhOVGNoREk5UWIvWlFiYy9IWGJVcXlR''@;'; put 'put ''M1pMRnFmbTU5Y05USGZVT0xBNVNiOWd4akY4b2ZYZ0RLZmE1VndCUEZXQ0MzSStQdVY3ZTVnK3hLUHZGZVVIbkZUekErRDVyU1Y5WlIvNDg2b1BIUE9McUtqdlhDRzM0Q2c2VllJTHJFNmI0VXVYb2pNOVZESytuQU5QOFdWUjFwa1VYSlA3enFsOXdUNzk3alo5SDFENlVqL2NuVVY5VHhiNjZ0''@;'; put 'put ''RU4yL1I5WHAwWDYzc1puckw2dDF2aDdDdW9yNEJtNWRLNkJlWXJFTmF2TjNFenhLeEE1VloydllsdVUzV2J2cWlxN2FITnBXeHkvaXdlSWMrL3pacHRKNjNaL2x6WHNmVFV6alI1L3JiRnhhM0hLTlJwRUhRejBNN1ZTcFdHTWtZMnlYdTcwenVuMHNlNnlQT0xpN2NwWTR6ancrUUN2VzJSamRG''@;'; put 'put ''STh3WTAxTkZWbWtKclJpWS9WMGhJVnZiTHpJdjd4K3BDam14dGJkWVJxaDFySXVOMWRTRzcwMmtQMWRiTGMreEJkekIvU0lETjhaYjV1WnV6bmVjVjc4YTZOME91Z1lSMW16azN5NmR1WTZQU1lqNmFVYnlpeFJ6RzNIeWg4SXg3VzFuVnhmY2szOWpaR1E3RHE5cm5xM2I1L1M0eUx2OGQ3bXp5''@;'; put 'put ''dStTSGNwN3dORnBGTmlTZ2RyYUN1TXJQYUtVa0F5R3RjZ0Q1UHMrNEdVZS9tWlFyUjN3T2paSlpyZHp0VytUY3ZhSEQ2MjRwT0hRZlpKNGJtK0xKbGUrZEpWMzRESGthZHQ3TDVzM2FBSVo2NXMreVlqd0VRcERWZUJDTVZ0ak5CZk5xY1RmaEpwbVM1d0JScUZVUUExSE5UYjE0bE9yWWRCSDBh''@;'; put 'put ''Z3R6dlV0d21FT21aajRSdExQZmcyYjZPK216V0N2S2gvaHNwL29wbjBjM2ZwemxnL09vbXEycVFndllPRVN0MUt1dGxrSWV1WlAzK3BYRWNKenRQWnNoTDFmYzlHR1dJSTdYNXFSZnJ6MjhkajhxUno0MmdxdDhpMm9WWDJFc2Z1Tmx1RitRZlpBMlY0MzNEZG0zeVB5TUJmNTR2Y29mVVIvT2JN''@;'; put 'put ''TWZYMWI1SStwRFR4WHgxdlcreC9HWEw5cjNPQmFMK3M0VitoN0ZReVg4VWU3N1FLSHZVZXEzWlBjVEx0QTRRbkVNNHMwMVdRZDRjMDNSQVJKcnU2a3ZYL1pMc3piZmZGT1NZenR2U2tvYjJiKzlVaGpIREx4dWEvLzIwd1gvdG5rY2JaazcxcmVGanJFeHprdFEzd25sZmxYMG44U0FveGUvZi9n''@;'; put 'put ''ZnBEaU9kcWg5dVBhMzBZY2piMHBxbjJIOGJYU0IzQWs0MC9vd29NdlFwc3U0WFpzdTQ1YXJoaFlla2JISXFqcTlaU0Y5Z1Y2blhHMm4xeW1UVytsOXloYTNmSjh5aFNQK0ZucU1mQXFnVUlHb0xHQTFRR1NrVUFNRTY4QW4yVHBxVWZzanRlVkVYWXFaRmRheisrTFpZcXdieWo0NHh2NFdIdlZW''@;'; put 'put ''K1N6c1JwR05LM0p1dThCLzNXYXRydEoxNCt2SXB5cUQ4cnJaK3I4SzY3Y1UxazlSU3QwSXZYUHJjZHlOUC8ybjFWSDhyNzYrZUx5M04vNjQvQkh2ay9GbkdQQXFoSFlDYmdpQUcxNTQveXJEY1FIZkRBMTRlaysvWm5mUlBmM2RhQlJtK3cvNXJ2NldDcXd0bDYvUjEyT2RDWmNaZFdYRlYrOWJ6''@;'; put 'put ''UmJPYU9TV0JFTWxyeW0rc1Q5OWtZN3M5bjI1TjA5N2M4cTkvYmt0KzIxeGMzOUpYekEwTW1Oam9xamU0RDgyUHphM2E2YzRLbzRNOUNlNkUvbTJ6SmEzK2R2K2pOdjhHemI5N1N0cTI1RDVrMi82eDhPRHdjSWYwaFBxdmY5MzUvN1Uvd0hBbHY4emdQWC9LUUM5VnlpTjF2RGYwZHNtSHRaaW5B''@;'; put 'put ''aDNZeWZBTG5CdjVoT2Z5THorZGROalQ1aVZPNTNTb0dRcjdUaldMcGgxOHRGUGZDTDkyYy8yUHZHWTZldmZZTExpWjhxZGluRTBLWTdWdUlsR0IrTFBpT25OdUJvcUNqWGNzZ0dUTW95Tk5BKzhrUGx2d2thajZ1bGd0bUVzRW01dUVpeCtzUGtFcTk5TWZWU0ZlenFDWUJCUzB3SSs4cVNRYktl''@;'; put 'put ''am1VUUFaQ2Q4MFBqWGkvS1ZpMk8zTFR2MlRYSzZYWWRjUjI0WlZoTCtaejdreGNQU1oza05YcExPMTM5MFQ0SmR3OWg3Y2lqbmRIcnFjMzJYZHJKcy93TVR1VnB2dFMwM2UwS1c3emhPeXZGbHdBZDFENE5DbDJCY1Q3NHA5ako2Unl4VGRFRFY0WUFyZXdRUDRWWlg2WXZ4b1NUQXBVNnBKZGQv''@;'; put 'put ''eVdVMWEwbGlpMHRTU292QzY5NnFLUHlONVcxcndvSE81VGxCQnVDRUVsdDRnTkcvL1B5Qzhudzk5aWsvZjc3d25MKzYrUGtENm5OMDlOTGk1K3ZqOTRGYXRmNzhiS0g5c2YxSWdjRTB1UXhnUUdNRitpODFlYTBZWUZCaWlxbVFXTGZEQXB0aGNwbHNseFVEUnJITC9yTUlQb3FOTmxjRUlzVTgr''@;'; put 'put ''NHNOV1FucmE2WjJ0YndYc0wzL29tZ3ZUeGRnWXA2VDVTaE4rL2tJdTV0Q3hZV2s0SjFXcnFPZzM2L053UGZhMHUrMXE1UG9md0FQZm54NUFBQUJBQUFBQVFBQXRDY0F3bDhQUFBVQUh3UG9BQUFBQU5QQm5ZWUFBQUFBMUw2bTlmOVcvdThFV0FQRkFBQUFDQUFDQUFBQUFBQUFlTnBqWUdSZ1lE''@;'; put 'put ''NzY3ellEQTB2SC83RC9rMWtpR0lBaXlJRFJHZ0NsaGdhdkFBQUFlTnFObEUxb0UxRVVoYys3azVVTHdUOFVCU2xxRWx1YnBLMmhEYVkwbEJSYmJVclNqbllSYWtXaEN4ZGFZclc2RnRHNkV4RVhYZmtEVXZjdUJiSHVSTWdtdU5LSytFTVVXbHhrSVMwNG52dWFxWFhTZ29IRE56TzViOTY3NTUx''@;'; put 'put ''NXBvWXo0TThNVVFjb0E5ZmNSNzg4UkZUT0krN3NRRUllb0JrZjBXL0cwRVBGelF6U01veXNBZkptQ2lrczRvUzU2LzJVSjBpYkl2YktTYlJMRHc3TEJGVkFTczZoVzA1elRBRkp2YmIxSE11NkxuMFBtVE0xN0hOS2FKVXZhSkpIR0pjNTF0YklDZFlWcVNydlh5R1BCVjd2NGh3M01TYUgwT2NN''@;'; put 'put ''c0laMVRwVC8zMERlOGhacnVIYVpSa3plWTFUZkdXcEdXSjRoSXZld1hhN2ptTG1BWWE1NWhXdzNuOUVwQmUrM1NTTWpYZWlRSzNCbE45cklUbkhSeHA3RE1ra2ZzaGhDQlJtODlWN0lOZ3ppSFhMT0ZITDZYSzdaZWxmSG1LdjBjQkV4TThseFdmNmZZRzlKSEpROTdHMEErMFZZY3dkSHpGWmNK''@;'; put 'put ''T1BtSlhycCs0aWRzMGhQdUVZeml6Nnp4SnJueU5oMWpTT0tEL1E4eWZzbEpPblhxbGNieVBsT3FuL3EzVHBod1N1cmYrUVA2cHV6QlMyK2QwSEpUb3hZcW4vcnBmN1JaK25BS2V2VkJuTEtwUGJpL2l0VXZEZjBiNUQ4U24yU1M4eUY3MTFRbWd0bDF2cjdWK3FmK3F6VWZuWE9JTFYzbmQrbjVv''@;'; put 'put ''ajdZdnU5elQxVlAzUk5tMUd6cHZ0ZEo3MnFjTDNxWFJPNVFoN1hQbXdHbVFQTm9XWmhqV2NSTmhIdXZjNnIvUVZvZldWdmExeEdNdFRDZVpsYnpVNERtV1hOVXdPbjZ4bnpxZnVqSG0xQy9RWnNEblVQMWIvNnQ2QjVERkl6em14bXJCNHo4MlV5UjNWVHI1bkRYM3dHYjlSL1o1QU5udGJuWkc3''@;'; put 'put ''aFZGZlBHeXhUVHdIcFJjcTVqQlRQQkhzdW1IbHlucHlsdnlWZTgxd0t6U0JoV2hHaFlqTG5WVzArSEk0dDRlaC9pWm1CK3dlYlAvVU1lTnBOd2wxSUdnRUFBR0R6djFOUE8vVzY4KzY2WCs5dWV1ZWRkeEVSRVRKRVFpUWtZa2owRU5GRFJFUVBRMEpreEFqcElYeUlpQmdqSW1TRWhJd1lJU042''@;'; put 'put ''a0JnUnd3ZUpIaVFpSWlRaWVoZ1NNbVRzWlEvait3d0d3L0kvZTRaeUQ5S3pib3diVDR3UEpvTUpOMVZOZDJhcm1USy9OVStiRDh3MWk5RXlaOW14UEZxVDFpWHJveTFwMjdFZDJzNXM5N2FPUGRXYjZNMzIvZ1FnSUFua2dCTFFkbENPSWNlQ1k5dnh6WEhudERvbm5Cdk9sb3R6cmJwMlhYVlhH''@;'; put 'put ''MlRBTkpnRkQ4QnpzQWwyM1FQdVVmYzdkOVVEZXFZOFpVKzNMOVZYN1d0REhMUUNmWWFPdlVidm1MZmd2ZkZwdmhsZnhmZms1LzBKLzN2L3ZyOEpXK0VKZUI0K2drL2hsLzVZZjdHL2pqZ1JCQmxDMHNnSHBJVGFVUis2aU9iUklycVBIcVBuNkhXQUNqd0gvbUFlak1FR3NRU1d3UmF4UEhhSjNX''@;'; put 'put ''QXZ1QUdIY0E0ZndxZndHbjZGdC9BT0FSQTRNVTFVaU8vRUQ2SkIzQkpQeE92QUpqbEl4c2dVbVNIbnlSVXlUMjZRMjVTZDhsRVVKVkhEVkp4S1V4VWFwaGs2UW8vUUNYcVNMdE1uOUFWOVJiZm9YMHlNT1dYcVRKTjVaam9zd09Jc3h4YllYYmJFbnJBMUR1SStjVWRjbGJ2a3Jybjc0RXJ3WTdB''@;'; put 'put ''WVBPY1JQc1RIK0JTZjRSZjVQRi9rOS9rRzN4VkFJU0R3Z2liRWhiUXdKeXdMYThLbTBCUm54R1V4SnhiRUxiRWtmaFZyWXYzTllXZ3R0QlhhQzRmQ2pmQkQrRld5U3o2Smx6UXBMcVdsTDFKWEJ1V0FMTW5EY2xLZWtSZmtuRnlRZCtXU2ZDMTNJb0ZJS3BLTlZDTnRaVXlaVlRhVlBhV3NuQ29Y''@;'; put 'put ''U2xOcEtSMFZVSEZWVkVmVXhIOW0xWnhhVWMraVFKU0pqa2N6MFl3Mm9jMXBXZTFCYSt0R2ZWUWYxNmYwV1gxSlg5WFg5WVorcXovcHZ3ZUJ2MHRBdlNvQUFBQUJBQUFCUEFCWUFBb0FQd0FFQUFJQUtBQTVBSXNBQUFDREFSWUFBd0FCZU5xRmtzMU93a0FVaGM4VUpJREdLREV1R2hkOUFmbFRJ''@;'; put 'put ''ZXBTdzBaUUl3bzdFaEFFSWxBdHhZVFg4Q24wVGZ4NUFkMjRkdTNhaFlmaHRxREJrRWs3Mzh5NTk5eTUwd0tJNFFNQnFHQUV3Q0dmTVN0WVhJM1p3RExxd2dGazRBZ0hrY1NEOEFKTXZBbUhtUHNsSEVaYXhZUWpNSlhudVlodFZSRmVRa25kQzY5Z1RYMEtyeUtxdm9XZnNHNkVoSitSTkRhRVh4''@;'; put 'put ''QTI4c0t2aUJyblkzNFB3RFFxT0lDTkd3eDU0amFhYU1IbHlSNzVwSG55RkR1eFVLTnFNYTZsWS9ya0l1Y3VzL3JNN1NHT0Fock1jN1NUalk1RTVYM0hNK3BOREtoVUdaVmlSbEtQZlZ6Z0NHVWNrMlo1YkU1NXpLdGgvYWxTNHNwaFRGdWYwWnFxT3E5U2lYVEoyV2JNcVBNVDVqYzRqL0xxMUty''@;'; put 'put ''a1UrcERYZC9sM3Y5M00vSnp1ZHBEZ3VQdWw3T3RmYnUrYTV5YXpiV1gwNWVzSmxXWHV3TitDUzhtd2RtcjJkVmRUbW9tWm5ZNGEyL1NjNWxxRFZjNjMvVnZxeUIzbDlPcXhaSFJXcFluUzJHWDd5M3MrUDlLRnRlTWEyaC9SKzQ5NXpzV2Njc08ybFFjeG5SK0FHaWlndmNBQUhqYWJaTlhiQnhW''@;'; put 'put ''RklhLzM3RjMzVFpPNzcxWHgxNzN4Q2t1YThleFl5Y3VjZXpFU2NhN1kyZnhlaGZHdTNGc3VnUUNIa0R3d2pQbENSQzlDaVI0UUtKWDBYc0gwWG1rQisvY0NWNGs3c044L3htZDg1OHo5OTRoQzNlZEcyQWUvN05VbTM2UXhReXl5Y0dIbjF6eXlLZUFRZ0xNcEloWnpHWU9jNmZxNTdPQWhTeGlN''@;'; put 'put ''VXRZeWpLV3M0S1ZyR0kxYTFqTE90YXpnWTFzWWpOYjJNbzJ0bFBNRGtvb0pVZ1o1VlJRU1JYVjFMQ1RYZFN5bXozc1pSOTExTk5BSXlHYWFHWS9MUnlnbFRZTzBrNEhoemhNSjExMDA4TVJlamxLSC8wYzR6Z0RuT0FrcDdDNG5hdTRtcHU1Z1R0NG4rdTVscWY1bUR1NWpidDVubWU1aDBIQzNF''@;'; put 'put ''aUVGN0Y1amhkNGxaZDRtVmY0bGlIZTREVmU1MTZHK1lXYmVKczNlWXZUZk0rUFhNY0ZSQmxobEJoeGJpSEJSVnlJd3hncGtweGhuTzg0eXlRVFhNeWxYTUpqM01ybFhNWVZYTWtQL01Uanl0SU1aU3RIUHZuNWk3ODVKNVNyUE9WTEtsQ2hBcHFwSXMzU2JNM2hWMzdUWE0zVGZDM1FRaTNpZDk3''@;'; put 'put ''UllpM1JVaTNUY3EzZ2M3N1FTcTNTYXEzUldxM1RlbTNRUm0zaVB1N1habTNSVm0zVGRoVnJoMHI0Z3ovNWtxOVVxcURLVks0S1ZhcEsxYXJSVHUxU3JYWnJqL1pxSDArb1R2VnFVQ05mODQxQ3ZNdG5mTUNIZk1TbnZNY25hbEt6OXF0RkI5U3FOaDFVdXpwMFNJZlZxUzUxcTBkSDFNc0RQTWdq''@;'; put 'put ''UE1wRFBNdzEzS1dqUE1PVFBLVStmbGEvanVtNEJuUkNKM1ZLbGdZVlZrUzJodngxbzFiWVNjVDlscUd2YnRDeHo5Zyt5NFcvTGpHY2lOc2pmc3ZRMXhpMjBra1JnOGFwQ2l2cEQza1d0bUYrS0pKSVd1R3dIVS9tMi85S2Y4aXpzajJya1BHd1hSUTJoeE9qbzVaSkxSek9DUHd0bm52VVk0dm5F''@;'; put 'put ''elVzYk0yc0hNa0lmRzFXT0pXMGZUR0ROdE12WnRCdVhzWmRGTFpuZXNRelBkcE5ldHlGdjhPYklXRVk2RGlkaWc5YlRtbzBacVdTZ1VSbTVPczBIUnpUb1RPemc1UFpvZE4wY0F5NlROV1lDMzhxSGkwcHJReDZMUE4xbTZTa21hYkhteVpsbU5QalJPUERPYW4wTTlEem44bFNtWkcveDl2QmxH''@;'; put 'put ''RkJiempxaEZPalF6SDdiTUY0aHU3TDBCUFQydGR2WnB4MGtkOC9mZHFUMDZlZG5qaFlWdVd5TEZqcDZ4MTJyS2xyTlc3UWF4ekdYZVQxUnFLMlk0OUZ4L0xHejZ0MFhXbW92dHBqamNjR2o0MitQbU0wNFNMOU5saFNFdlJZNXJIY1k0WEhTc05nVTNZbzVTVGNvS0twSWNjcXRtTEpmTXVkeFVq''@;'; put 'put ''MzdxZGxrVFg5MmVrNFlKMGYwQ1M2M2RPeXdQdDlqRGI3bXRaNVZ2bzBUSEl5R291NHliblcyTlFlUld3bkwySjc2aCszWmJjaEFBQUFlTnBqOE43QmNDSW9ZaU1qWTEva0JzYWRIQXdjRE1rRkd4blluVFpKTWpKb2dSaWJlVGdZT1NBc01UWXdpOE5wRjdNREF5TURKNURONmJTTEFjcG1abkRa''@;'; put 'put ''cU1MWUVSaXh3YUVqWWlOemlzdEdOUkJ2RjBjREF5T0xRMGR5U0FSSVNTUVFiT2JqWU9UUjJzSDR2M1VEUys5R0pnYVh6YXdwYkF3dUxnRCtIQ1ZnQUFBQUFBRlltUFozQUFBPSkgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtc3R5bGU6bm9ybWFsfUBmb250LWZhY2V7Zm9u''@;'; put 'put ''dC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGVWtBQk1BQUFBQXBRZ0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZk5INTVrZEVS''@;'; put 'put ''VVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNYQUFBT2RqNThmRXhIVTFWQ0FBQUpMQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxNQUFBQVRRQUFBR0JvUUt6elkyMWhjQUFBQ1p3QUFBSnNBQUFEbm5kREQ3RmpkblFnQUFBTUNBQUFBREFBQUFBOEVhd0JwR1p3WjIwQUFB''@;'; put 'put ''dzRBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFblFBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTZkFBQU40d0FBSEc0LzdIR0RHaGxZV1FBQUVvSUFBQUFOZ0FBQURZTFpZZ1NhR2hsWVFBQVNrQUFBQUFoQUFBQUpBZDZCQ0JvYlhSNEFBQktaQUFBQW9ZQUFBVGFxMU0rVld4dlkyRUFBRXpzQUFB''@;'; put 'put ''Q2N3QUFBbnBON2pMbWJXRjRjQUFBVDJBQUFBQWdBQUFBSUFLRUFwRnVZVzFsQUFCUGdBQUFBWEVBQUFNUUkreDRZWEJ2YzNRQUFGRDBBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFWSmdBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJWSEFBQUFBWUFBQUFHOW5kWW1BQUFBQUVBQUFBQTFGRzFhZ0FB''@;'; put 'put ''QUFEVHdaMkdBQUFBQU5TK3B2VjQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNOYkpiVkZYN091ZmUrMzlldmdLV1VINkVnSVZnYjB4Ukdt''@;'; put 'put ''QWl5YVJoVVJ5cVNqaWthWnZiam5JUHgxMkV6RnVmNGNXZ1dVaGVIREFscEVQa3gyZ0NpWWtYR3VvWXh4ellDeWd4aFlGd0h5QlltMCtsQ1JIbjN2T2Y5c0MvUWJ1TUpENGR6NzN2dlBlYzh0K2NXQXFDQUVaZ0ttVnhYUHdONWVIb1F4M0Q4UjZCd2M3N2RPQThWYzcvUk9BZVZjK2ZNbmNQWm9E''@;'; put 'put ''OFpUV2NrN1BoZEFRTXdERlhtY1JpSmV0ZWFqa1lMYkZXSm1oSHhJK205aUY4TU5sOUF4V2NRMU1YTjVJQ0pXSWxQRWN0Z0tJL0JlVEpJanFFVXZYaXlmOFFkOFpiNFNId2NQZnlKMys5eDVQZmRlanU1ZC9iL0orT2Y5N2pDdXoyTzlIeWVQOFc3ZWhqWkVuZkd1eE5jNWovQ3Y3OUwwTjBlY1RP''@;'; put 'put ''enBCak9URmN4VzljUmlsckNZUlRoTVlZSStEd1JZUnlSdzNnaWp3bEVDWE03a1pWcUlnUkw4UlBPZkpRSXpQaEsrbDhtQks4UWdsY0p4U0hDNDAzQzR6Z1I4RmNpd2traXdydEVoTE5FRHU4VE9ad25TbGk5VDdsYVRCU2tUTXBRSXVWU1RxNlFDdkpnVnJiQXRVZFRKU1A1emZXRTJMblRFNnVk''@;'; put 'put ''Mk5tSnZaMDRZREtSUngxUmd0dUlBaHFJVXN6SGcxd2hpU1N5U0NLTEpPQnhQTW41cTRrUy9BSnJPZjlwYk9MOExVUXB0aEU1YkNmeWVJSElZUWVSeDR0RURpOFJlZXdrU3RCR2xHQVBVVUE3VVVBSFVjQmVvb0RmRUlMZkVtTFppZkEyVVlxL0VHbGUxUEtpbGhkdmVRbVdsMkI1OFpZWGIzbnhN''@;'; put 'put ''bEFHTWw5WHk5WGtKRWVCcTlZeVExV3NjUzFyTzRZMUhjZk1UR0JHNW1NQkZxSVIzOGNpMW5JcGxtRTVIbUVXSG1YMDJ4alJpNnprSzZ6Z0lWYnVPQ3Qya3BVNnk1T2N0NXRWeG4wcmt2dWxEOXM5M0NlTmpMczMxYldidW11T1ArcEdyVGJTM1IzNGJPUk1nbTYrUE52ajNUaHpVZkc4MThmajVm''@;'; put 'put ''SHl5MGZTV3hldmk5ZDFPL0kzKzBaUmFab1EwNFRpcTRURDNZVEhQVVRBTENLaUlwN2tuRVFOWW1wUVU0T2lsWWl3bFlpczBtS1ZGcXUwV0tYRjZxbzRRVGljSWh4T0V3NmZFQUVYaUVqNlNsL1d0Wi8wSS9lWC91U2tvbUlWRlJraVE3aStvZ1pYRWFYb1MvUXlwWXNwWFUzcHJxajBXNG1zMHIz''@;'; put 'put ''RkUyWGl5Wm5TWFZIcFhScjNGcFczcUhJVzFVV2xweHBQMWIyTDZGblhTYlRlTkt2RkNCUGxPb3N6Wi9wMXBsOHR4cHlvV0l1UkoxcldUUHhaUlR2TFFrNUd5M2p1bnZ6MHFtT0VEYXpYM1l4ckZpTlp6VWpXNENsRzh6UTI0QmxzWkVSYkdNbFczc1kybnJhZHA5ekwwNTFnRFU3elpCZDRnbjdj''@;'; put 'put ''YlNCM0djSVZoNW1lRlgyc281U2JPc3E1eTgyMHhPeWIyWW1PUmNQSW5jeC9oNnlRbGZLRXJKRVcyU2pQeVhiWktidWxRMTZYQTNKWWpzbzdja3JPeUFkeVRpNm8xNEtXNlFDdDFCRmFyYlU2Vmlmb0xWcW45ZHFnTS9WZXZVOW42d0p0MG9kMG1UNm16YnBLMStwNjNheXR1a1BiZEkvdTFmMTZV''@;'; put 'put ''Ti9TWTlxcHAvVTkvVkEvZG5DUjYrWEszU0EzekkxMDE3dlI3Z1kzMFUxeXQ3bHBib2E3eDMzZDNlKys1eHJkRDl6RDdoSDNVL2N6dDlxdGN4dmNzMjZyZThudGN1MXVuL3VEZThNZGNXKzdFKzd2N3AvdTMrNFRyejd2Ky9nS1A5Z1A5MVcreG8veE4vb3Yrc2wrcXAvdTcvU3ovRGY5QTM2ZVgr''@;'; put 'put ''Ui82SmY0Rlg2bGY4S3Y4UzErbzMvT2IvYzcvVzdmNFYvM0IveGhmOVMvNDAvNU0vNERmODVmQ0Q0VVFsa1lFQ3JEaUZBZGFzUFlNQ0hjRXVwQ2ZXZ0lNOE85NGI0d095d0lUZUdoc0N3OEZwckRxckEyckErYlEydllFZHJDbnJBMzdBOEh3MXZoV09nTXA4Tjc0Y1B3Y1lRb2lucnhkaXpXYmVR''@;'; put 'put ''bHhuVVpYcFV3bW94YnpMTzB5MS9rYWNZMXhqY1pQNWl3RGpWN3V2RWs0MnVWUDFPbDJuaVU4WlNFc2RCNGs3NUdialQvZU9PSjV1ODBQbStlNjR3M0dGY1o1NDBiM0d6eTg4YUx1MmQ5TXh1aithOWdURE4rMXJpcGkrV3VOSGF6NXhudk0xNTFKYWNaTVB0S25tNThyYmIvTDlhTmwrU3F2VHZH''@;'; put 'put ''bDQyZk1WN1l4Y3hldTJYdnYzT2F6L1p1dVNyRGl6Tm52c1RPMUhTSithdk5uN1hUckQ1dTlsMlp6SS9xR3IxbzIyaXFpcXcvemVxVTFMWTVxV2JTNnFSUnAvb3Mya1YvTXFmRjdFMnU2YUo2aXhwN3crejlpVjJzYVpxeFZOdXA5ckwrOUF4cDNnNmEvU09yMFo5TjUrZHNmcXFjVHB0ak55TFY3''@;'; put 'put ''U1grR3JQUHA3Yk5TVldkOWFjMzZLYU1adEtLWk8wWHpQNVc2cmY1ZGk5MHFQazNtRDlWV2xYR25tU2NOMDlQOWtmcGZiSG83akQ3c05uWmxldmlYeVhWaWZkY1ZxbnNqbE9LdDd2OS8rQkxaeXF1c1hjcCtPNnFabGFTMTZsbjE2NWhGMHhlMkJFK3g1ZFlEbU54STN0WTBybjdzRzkvZ1QwOTZk''@;'; put 'put ''eDk3WTFhYnAyN0gzK3Ztc28rVkUvMHh4M3Njd1BZNmU3azd6NHppVXJyNVVQWjliN0dyaldmYjdmaDlub2J4NDdld3ZYV3MvUGRicjN2Syt4K3I3RkQvaElIOEIyKzZNNWlzYjBxMStCZkV2QVVPL0VRdEZwUGJlTjVSYTZ5MzgwaVNQeGpVK0VTM0U5ZXdXNVhpa0hjYXlRakdvMGJlT3BKUE9V''@;'; put 'put ''MHpPRG9yMDI3ZnpRK2FteDNCdnN5Zk1oNHJ2Rm00MVJWT2JOTDhTWHU4d0MrS3puSlM0a1VwRlI2UzU4clQvUWY2ajZiS1FBQUFRQUFBQW9BSEFBZUFBRkVSa3hVQUFnQUJBQUFBQUQvL3dBQUFBQUFBSGphWTJCbWNtQ2N3TURLd01MVXhSVEJ3TURnRGFFWjR4aEVHTTJBZktBVUhMQXpJSUZR''@;'; put 'put ''NzNBL0JnY0dCZFUvek5ML2pSa1ltSTh5cWlzd01Fd0d5VEd4TXEwSFVnb01UQURKWlFwQUFBQUFlTnExazFsUWpsRWN4bi8vdDMwUktoVDE5dlpwMDBhaUZFWDJwY2krbEt6WnNxL1pHdXNRUTBWU3lKNGtveGtUVTFPMkcrNjROV09NdnMrVlcrNE1IY2RYVERQTXVISm0zblBlYzg2YzU1eDVu''@;'; put 'put ''dDhmY0tIckMwRjBqMVRxbVRqbnJsS3N4eVdNdzQyQmxIQ0xPdTdTU0JQTnROQW1IaElnZ3lSTUJrdWNKRW1xcEV1bVRKVWN5Wk5DS1pJU0k5VjRaYngzaVRLUG02M21FL09MNVc0RldzRldxR1d6b3F4aFZycDEzK1lmK1UwcGZZZkZqUjdhajJuam1maEtmekhGSnJHU0tDbVNKaG1TSmRtU0t3''@;'; put 'put ''V3lRVFpyN1pmR1c2MTl5R3d4MjgzUGxtRUZXRUZXaUZON3FKWDJTMXQ5VkMvVWMvVlV0YXRXOVVnMXE0ZXFTVFdxQmxXdjZ0UTFWYXRxVkxXcVVwV3FRcFdwTTZwVW5laDgwNW5WbWZUOWs2UGNVZURJZDhUWUI5cjk3RDUyTDd1YjNlajQydkc1NC9DSGtIZkpYVjc5cCtadWVEdVQ0STliQktQ''@;'; put 'put ''N3ovaUhSdGRKRjF4MWR1NTQ0SWtYM3ZqZ1N5Lzg2RTBmK3VKUEFJSDBvejhEQ0NKWVp6eElweDZLU1poT0pCd2JnNGtna2lpaWlXRUlzY1FSVHdLSkRHVVlTUXdubVJHTUpJVlVScEZHT3FNWlF3YVpqTlhNWkRHZUNVeGtFcE9ad2xTbU1aMFpaSlBEVEdhUnkyem1NSmQ1ekdjQkMxbkVZazFh''@;'; put 'put ''SHZrc3BZQmxMR2VGZnY4T2RyS2JZZzV4bk5PVVUwWUY1emxISlZWVWM1RWFMbkdGeTlSeWxldmMxQlQ5WlBRMkRacWxlNXFtbjIwVnE3VWQwV3pnYkxjMzYxbWorMTJjK08xVzRWOGN2RUE5bTFuWlkyVXRteVJHajF2WXpqSHNPQ1JjOHhrcFVib0NJcmlqZHg2Z2FaWUVYUS94M1dlS25HSEVz''@;'; put 'put ''bzI5YkdVZmV6akFRVjFMK3puQ1ViMTFtRkpPY1pMWHVwcDZzVTY4eEZ0ODJDaCttbi9QSDVETnF1aDQybU5nd0FMOGdkQ1p3WmxwUFFNRDAyNG1WZ2FHL3lITTB2K05tWGIvLzhKMGpFbncvNWYvZmlBK0FNOVBEVmg0MnExV2FYZlRSaFNWdkdVakcxbG9VVXZIVEp5bTBjaWtGSUlCQTBHSzdV''@;'; put 'put ''SzZPRnNyUVdtbE9FbjNCYnJSZlYvd3IzbHkyblBvTjM1YTd4dlpKb0dFbnZiVUgvVHV6THN6YjV0NVl6S1VJR1BkcndSQ0xOMDFocGFYS0xkNnphZFRGczBFNGJab3J2dVVLa1IvOVJxOVJxTWhONng4bm95QURFOHV0Z3pUOEVMWElWT1JDTGNkU2lteEtlaGVuVExUMTFvelpyOVhhVlFvVi9I''@;'; put 'put ''emxDNEVLOWY5dk14YlRWOVF2WTZwaGNBU1ZHSlVDZ0lSSit4b2syWXcxUjRKbW1QOUhEUHYxWDBCYjVxUm9QNjZIMkpHc0s2ZjBUeWorZEFLZ3lDd3lMU0RRSkpSOTdlQ3dLRzBFdGduVTRqZ1dkYXIrNVNWTHVXa2l6Z0NNa09ITWtyQ0w3RVpaemRjd1JyMjJFbzg0QzlJbFFhbFovTlFlcUlw''@;'; put 'put ''bWpBUXoyVUxDSExaRCt0V3RCTDRNc2dIZ2haV2ZlZ3NEcTF0MzZHc29oN1BiaG1wSkZNNURLVXJrWEhwUnBUYTJDYXpBUU9VblhXb1J3bDJkY0JyM00wWUc0SjNvSVV3WUVxNHFGM3RWYTJlQWNPcnVMUDVidTc3MU41YTlDZTdtRFpjOEJCM0tDcE5HWEZkZEw0TWkzTkt3b0tUSFM5UkhSa3RK''@;'; put 'put ''aVlHRGxoT1UxaGxXUGREMjczb2tOSUJ0UWI2MHlpMkpmUEJiTjZoUVJXblVoWGFqQllkR2xJZ0NrR0h2S3U4SEVDNkFRM3lhQVdqUVl3Y0dzWTJJem9sQWhsb3dDNE5lYUZvaG9LR2tEU0hSdFRTbWg5bk5oZURLUnJja3JjZEdsVkx5LzdTYWpKcDVURS9wdWNQcTlnWTl0YjllSGdZQll4Y0dy''@;'; put 'put ''YjV6T0lrdS9FaC9nemlRK1lrS3BFdTFQMllrNGRvM1NicXkyWm44eExMT3RoSzlMd0VWNEZuQWtSU2cvODF6TzR0MVFFRmpBMWpUQ0piSGhrWFc2WnA2bHFOS1NNMlVwVTFuNGFsS3lvMGdNUFhEOE9oSzBLWS8zTjAxRFNHRE5kdGh2SGhuRTEzYk9zNDBqU08yTVpzaHlaVWJMS2NSSjVaSGxG''@;'; put 'put ''eG11VmpLczZ3ZkZ6RldaWkhWWnhqYWFtNGgrVVRLdTVsK2FTSysxZytvMlFuNzVRTGtXRXBpbVRlNEF2aTBPd3U1V1JYZVROUjJydVUwMTNsclVSNVRCazBhUCtIK0o1Q2ZNZmdsMEI4TFBPSWorVnh4TWRTSWo2V1U0aVBaUUh4c1p4R2ZDeWZSbndzWnhBZlM2VkVXUjlUUjhIc2FDZzhkc0hU''@;'; put 'put ''cGNUVlUzeFdpNG9jbXh6Y3doTzRBRFZ4UUJWbFZKTGNFUi9Kc0RqNnVXNXB6VWs2TVJ0bnpZbUtqMGJHQVQ2N096TVBxMDhxY1ZyNyt4eDRadVZoSTdpZCt4cm5lV1B5RDROL2l4ZGxLVDVwVG5Cd3A1QUFlTHkvdzdnVlVjbWgwNnA0cE96US9EOVJjWUlib0o5QlRZekpnaWlLR3Q5ODVQSktz''@;'; put 'put ''MW1UTmJRS0gwOEVPaXZhd2J4cFRvd2pwU1cwcUVrYUFTMkRybG5RTk9yejdLMW1VUXBSYm1LL3Mzc3BvcGpzUlJuTWdDa281S2F4c096dnBFUmFXRHVwNmZUUndPVkcyb3VlTERWYlZuR0Z2UWZ2WThqTkxIazNVbDY0S1NudFJadFFwN3pJQWc2NWtUMjRKb0piYU8reWltSktXS2dpUGdodEJm''@;'; put 'put ''dnRZMFFtTFRPRExvRWlaSEd5c2cvdGloMDVvb0oyQXQ5NjBpcnYyMEx0ejNYeUlEQ2JuVzduUVphUm92TmRGZlZxZlZYVzJDaFhyOXhOSHdmVHpyQ3g1aGRGR1U4dWU5K2VGT3hYcHdTNUFrWlhkci91U2ZIMk85YnRTa2srMnhkMmVlSjFTaFh5WDRBSFErNlU5eUlhUlpHeldLVVJ6NjliZURK''@;'; put 'put ''Rk9TakdSWE1jRi9UU0h1MktWZCtqWGRoMzdhTldYRlpVc2g5bDBGVjAxbTdDTno1ZkNPcEFLZ3BhcENKV2VEcGtQcHVkbXZDeGxMZ3NSZHl6Wk5kRjlCMDhJUjNpdnpqRXRmL3IzSElVM0tMS0VsMW8xd25KQjIwZksraXRKYnVUaHlwR1orMjhiR2VpSFVrMzZCcUNua2d1T1A1ZTRDNlBGZWtV''@;'; put 'put ''N3ZQekI4eGZ3WGJtK0JpZEJyNnE2QXpFRXVldGdnU0xLdDdTVHFaZVVIeUVhUW53UmRWQ3N3SjRDY0JrOExKcW1YcW1EcUJubHBsVEFWaGhEb05WNWpCWVl3NkRkYldEcm5jWjZCVWdVNk5YMVk2WnpQbEF5VnpBUEpQUk5lWnBkSjE1R3IzR1BJMXVzRTBQNEhXMnllQU50c2tnWkpzTUl1WlVB''@;'; put 'put ''VGFZdzZEQkhBYWJ6R0d3cGYxeWdiYTFYNHplMUg0eGVrdjd4ZWh0N1JlamQ3UmZqTjdWZmpGNlQvdkY2SDNrK0Z5M2dCL29FVjBFL0RDQmx3QS80cVRyMFFKR04vR010am0zRXNpY2p6WEhiSE0rd2VMejNWMC8xU085NHJNRThvclBFOGowMjlpblRmZ2lnVXo0TW9GTStBcmNjbmUvci9WSTA3''@;'; put 'put ''OUpJTk8vVFNEVHY4UEtOdUg3QkRMaGh3UXk0VWR3TDNUMyswbVBOUDNuQkRMOWx3UXkvVmVzYkJOK1N5QVRmazhnRSs2b25iNU1xdk5uMWJXcGQ0dlNVL1hiblhmWStSdGxNN29zQUFBQUFRQUIvLzhBRDNqYXRYMEplR1BWZWVnNTUwcTZramZ0a21WNTBTN2JzaVRiMnJ4YnRyeEt0dXl4eCtQ''@;'; put 'put ''WlBKNWh4dU1aR0FpVEdRakxERXNJSlNTa1NVTkMyZ1JDQ0R4YWFGa213TEJNRmdoZlNpWUxKQzl0bXJSWjJyUXA5QVhTdEVsTCtzRHkrODg1OTBxeUpjOE0rYjRIWThtK091dC8vbjA1UWhWb2FUMkNQeXZZa1lDMHlJeHN5STFhVUF4MW8zNDBnV3hKeS9CQVgwOGlIbW4xZTVycWFpMTZuVVpC''@;'; put 'put ''VUVWN1FPblVPMFZ6eE93MlIyTHVXQ1Ftc25jUmZwV2YwbWYwblg0Q1QyTHk3MUliMWlFUmllSFA1bDdHL2Y4NU5Qenc4UERERHcrN25NN2g0ZUZEdzg3Ykh6N2tjaDV5UHZ6d3c4NURoMjRmRzN2NDhKamp1OEliS2FmWENmOXVQZUlhRy9NY2dOL0duSDNEcmtNM2RGbkRzOGVQUDNiOCtHeDQx''@;'; put 'put ''Umwyd2orRUNKcGYveDM2R25tQzdjMmJkQ0dNMFJKQ3FDYURDQkdXRlZnUXJNS1VRcUhRS21xOGVwMVN0QWFNRWNGdDhjV2k4VWlueFd4U3VaZjJtbUtDdzJHMU5EVlp5Qk01dzNjZFZyUERZYlk2RUZwZlIrUDRNYnhJSHRTNVVBVkNPZ0ZlbjBaMFhqKzgzQUR6MmxFVHVpSHpaT2Zzem1TelZr''@;'; put 'put ''V1FVaUNZSUx4U2lUV2Fta3lOcmxvUVJmVlNWUVZScS9VWkJTWkVTNmJzU1I5OXdENUVhdkZ3YVQrcDRhNWtJMEpOalEzMU1JMjl6bFpyaFFVYjlmbi94SVlBRmlPaVczUW4yRThpd240aUl2c1I2WWY0djZMWGFxOE5EZ2Z2Z1ovajJ1UFI5MnRQU0g5ZG8zM3VudWc5K0t1djlqOEYvL1cvMnY4''@;'; put 'put ''MC9OZi9La0F5dEg2V2hNbmJxQkY1VVJ0cVR3YmJBaTZudmE3V2FqWlVWcWpGR2tTVUFHYVNCakNRMnhCRytFTUFFaXVhYXRMckJRQ3dSd1ZvRWZQNUV4WnJMSVJqMFFHY0FQU3dXRVdmMzl5SXpRZ2UxOEJiUEJhRkJ5UjgvRWoycHIwZDAzc3YyOSs1c3l0NzFhNzJpWm5MMzVjNzNOVWJTV0l5''@;'; put 'put ''bVJxLy9Fb3hPYXpiM1QrdFg3UE5aenUyeDhYKy9wcTUvdEdhMzlUdG5NZjJkdjFQTlVPdHVaR1JVREJtZWdzV29rVGg5ZjhtYjVKbkFDT01jRHBoMUl1K2xYbXlGazRvVUltVkZSaXJsSGdWcVpCYW8xSWZRUW9GV2lhWVlrdzFnRjVZcmhLSklHaUZLWHZtU1Q5MENWK3dDNEttckorNFhJVkYw''@;'; put 'put ''U3JDMlViSzlDQUUydEp1cUh5dlhidVN2dloyaDhOa1FxaTl0NzBuSG5XRUhhRm1uNm5KMUZoWGF6VG9kYkNaR2wrTmFBNFlPRWdqblFCS1V3MTI0d2gyR3lnczNTNlYyV1NKb0UyZkQrRENaMStZYkc2WkRJWFlLLzdvY0s1MStOcDRvclUxM3RXQ1p5ZGI4aDhGMk1ORUsxNEtaVU1kTTZIUVRM''@;'; put 'put ''aDlKb2puMXJiaHUxT2RrWkZVdERPVk94aWNhUS9UejZCRk1KNktkSTdRajJCL0FtcFoveDA1U1o1RkRoUUFQak9RN0EwSHZVME45WFcxRmJoQ0lBNk1CSkttR0k2WGdWd3RHU1VRS1lNTW9GQmJtOVBaRm11TE9nUE8xamFYU3JRRWxINlYyMFgzRkU4VTd3dytzc1lUVnBWb1JiQTFLOStsSWVI''@;'; put 'put ''ekEyckJUa2x3OTlJMS9RZTdwbWNiNjRPem5jRjBZUHYyL3YzdGpVTWRvZmZuUHRjVm4ranY4RFZObmh6dUdaenZGL2ZzRCsvc1RSMTB0MHo0Z3BPQndHUmdjTm81dmpJKzMzRGwwRW15T3hLSWo5YkhXNXJqYXk5bnI1dTFaOEs5WTREendCZlFnK1JCVklPQ21TZGJBRkVxS2V0aDU0c0JDWFNJ''@;'; put 'put ''L3JrSWYrSWxTaUhUdTU2MmVBbHN4eERMc3g3UkpMcDM2dTFHbzEwdnR1RWZrZU90UnJ2ZDJIcWNCS0RId1BvT25DQmZSdFZJOVZTMUVyY0hHTXRLV05uMnJPS2p4NDZ0TkM5czM3N1F2UEN6VzI3OTZVTHJ6aGMrY08yNXhRQ2RFT2gzQi9iTGZVWG95OEhqVDNEQWhWaS9GUmpoNXNWejEzN2do''@;'; put 'put ''WjJ0Q3orOTlaYWZMYkMrdmZnNnZFUytDanNaVGc0dVRvMG4vUFZXVVEyY0tkMlBVVFVjMmlTMEF1UW5OeUVpWUNLY29peVdINlF3QlNNc28zMXpzKzBobDBNcG1nSUd0dVo0UWlYQy8yNlh6dzkvSitLRDJNOS9vMmRwdGNEL1BqODdZTTZRb1MzdFEvK2kvRTVVYWJHVi93Ylk3S0pkL1JZcjI0''@;'; put 'put ''bjc2MW8xRmhUVnRjMVdwVkpWcFZCVTFnY0RnV0I5cFVKUnBWSXByTTIxMVFvQnE3VVZGZmwyQ3RXRjJ1SHJxalhXaUVyYnFERzVHT05XVnF0ME9yMWVwMU5WSzlXaUtGUzdUSnBHclNwaTFWUmZla3NHMXhRNlNtcElGRlVpWDlLTllEckZBdUE5QUJJTGFBVllBMFVUQlo1bWZGMm5FdXNDMkUw''@;'; put 'put ''bGFveEsxZ2lwZVRIekl2ekRMUysrbUg3cEpUcmU5UHFONkNXMEgvRFBtZ1F5UitNeStnRVJlUXdVMDRBOFhBVXhKODQwVjFsQXl0VTdIY0dqb1RBVmQwRjM0MkFYSGFzTC9RcjM0aWhRYm0zU3pCQjNvWUM0ZWgwZHpPZzBPN3V3a0Z2RDBVbTJuMG1RdTgvQS9KVlVnNkJQZ0NOaWJNVVVCeXBS''@;'; put 'put ''aFVjQVZsVXNaWTlLRXJZcUwxM3grbS9XeitLSHlPc3dyejVaUXdjRllZSlA4Z2twVzhNekM3a0hGc2pyNzc2R21NenRCYjV5TFRrSHJMQUp0U1ZiZ0t1eUhYTU9na0hZc3dYb2dQWjBUYnJHV2d2am1TQ01Bb3JOUEpIRW9pRkFKa3BNalRDVDZvT1RreCtjbjRQWFcrZjc5a1dqKy9yNjlzVmkr''@;'; put 'put ''L3FxOW54eGRmV0JQWHNlV0YzOTRwNkp5VnZuNW02ZG1LQ3ZIQVoxbEJSQUIxQWhlN0lXamxJQWVLVTVoOGRZaTZmMFJnWTYwWitJNk4xUFgrZDZaREJMWnJNOUo5YTJJZGEvQXpaVkNmdXhvZGFrdjZvU3RnUFlRRWlhZ1pPeFJxckVMQ0Vtai9SV2oxOGgxZ1lHTVNWbXVucVY2STlMekZDTDRY''@;'; put 'put ''dzYzcGtZYWg3MmR1L3lKWlkrM1hlb043UDRORjdLK1laK09MQWFiZTUzZEVXQ0grcmMyemQ2WStiZU5KKy9HZUNwaC9sYjBHQ3l6MVlMYzdrd2tEU3NBd3RVdUFPVjR4V1lYYkVNQ0FxTEFkbTZyTUpLcFZWSlQ3a0ZOWHM4VG85WEZHMXcwcFM1UkRxcEhBcmdtTlVpQ2FUQ0NrVUo5TisvdFRu''@;'; put 'put ''dVB0US9zWFBmL0dSNmZQZmlVSHlIUDdybkUwT3J2Wm1lL3NXK0s4ZXFobUtSVUhTaXQyOWdBdU9oN3ZoWVp6aDhmWGdoUGpDbnI5ayswcjA3d25HaEdWNEdBUFlWd09XQ3lkWXE0RWs0clZMQ0hqQUMvZlV3Z0krSlhLMWlxckt5c3JxeUd1aktvS05yOVRyOU9LS25HcXc3cHNmNHp0d2pGWGho''@;'; put 'put ''OStwcU52ZjdQeC9DcitRR3gvLzgxL2hnN2o0T295NkFVU1BNMDRqNmt0MG1qQlhhR29FbzROelRDRjZSQW9TOElKQWxMdUUzQXFnUk5iajBScTlIQnBBbDBpa0pZOUZQNlVtTTV4SHlaOWNISXpzdkQ2ZGI5azdNalhkWDRIdHlaOFdSbWNIVi9zSDNqVlgxUkxyM040OEZodWRpOWZoQSt2VlE1''@;'; put 'put ''TUJ3YXJVTFlOQUhhNHZBK1RXZ1ZzcXREWG80TzM4ZFVTcElXZ1ZzUmFFVUZLc29MMlpGV0pqTUlScEJyMnhzYld6eHVxRnp2ZGZyVTRQZWhxVEZVSzVCaVFYRURDZVNCa0M1aUVGV0pFUktNWGNkSFJpNGF1ejJXOUkzVC9mdGF3bDRKa0x4M1RISFNyOG4wN3h2ZkdpcFdyYzRpaCtEaFE0ZTZm''@;'; put 'put ''dkt2U3QvY2FDMXVkL3RuYmxqbTZZemtmdEljTUkvQ3R1Y08wRGxEWnhqRmFPaHBtUzlBZ2lJVVJEbFBaanA4S0FGZy9aRDFVcnNqRG5Od0JTZXlOMkZ2NS83MFc2eWt1NWR1NHZxRzFHQVF5dkF3UTV3NkVFanlTR1RpZ0NIVFl0RlFKQTRoUnFBZ09HTUdLY0lCT3JyRVFyMEJMb2pIZld0OVMw''@;'; put 'put ''ZUZ3eFIxNmFockt1Y3hpSEJ4NUFuUU1vOXJOS2YvaHJDbU1rYjd4OWVTQTFNREYzUlAzREZVS1ozZUdINHhKaG5JdHd5SGhqYTFUN3VCcFVwUHV2enpjWkJxYXBxWCt3ZTJHdXUzZGFkbUc4THppZDZaeTJXdmYzZGkrMzRFNDF4cnl2ZU5CTHh4UnRJN25sSHQ5ZmY1OFRZMmVmM2Rqc1kvbTg2''@;'; put 'put ''ZTRjQmpyMUNBellFZ1cwcmdYQ1ZaQlhRWDRDOUNvSWxVeVFkNUxPSDNjTForN3hlZHZZVzZlZzVIUS9nZmt6L2xQWnZvSkRnN05JU3dVK1ZuUG9ndzRZVU8vWU9pZ0hrM09aVDU3aVErd2c5ZG5iK3NBY21RL0E2eUFzcjVlZVVmN05GNnJueHB1VEdXMVVWUWxYV0tvdEJ4d1FMNWVlR0lzRkN5''@;'; put 'put ''Z2dacS9TTzc1YWxUZTZBL0J2WWRFeDI0bld3NmJRd21ZajBRTWIzSTgwWmpKL0Q5ejhaQ1ZDNlQ2Q2RPRWNXQVM5VlQ2a0k2RkRHbU5kY2pjMEo0QkMzNGRPNHAvY1hZODgvUDg3T0lvWE9rUnI4VDRDSkluSWxteWorVWxNT0ZDU0JMRWdzbkFoVXR1c29CNmUwVC85UDRXL25ZdXpubjlLZlRN''@;'; put 'put ''T2NVMmduTWNwekNqQm5Jb2hqU3JOeUNwK0dPVi9KZGQvLy9QTmp2K2o5QlozVHZ2NDcvQnFjZnkzeW9FUXlhcW1xcEd3UFU3WXR3TVEzRmNrUXlzQ1ZXS0d3S3Fac05wdkg1dmJXZXZ3cXVoQlpEaGI0ZEEwRzI2MVliai9Yc3lmaUhHaU96bmtqZS85b1lIODBzcWRuUmkrRDk1VFMwK1ZvU2pn''@;'; put 'put ''N2c1RVQ3ZHNqYmJPOVZiY1VtYzkwblczcmR3bWpvQ2NQb2l4K0p2TmtCV2pLQnFlRHFJWGhKb09nVVBmMUVrRFFOQmhiVlJzKzBSUjlZdHFpVDdubXUzYnQ0cE0wVjJxSUFtU0NpbkpvVlFVR3JmSWdraGdnTUJhMVdsZ0d3T2pWVTlMVVFUQzhGVml6aUM2MWsrazlUdEwwaDB4Q0RZc0FIS2hh''@;'; put 'put ''STZoWEw5cFpDWVpIQnhWQ0FsS3VidDFMRkZXQVl5cHhtWFdmMlVYL1M5WW1rd2dsczhucGlURTRxd0dmcjlYcjhmbXFSSHVKOHVTaU5sYVJrQUFqcklOWmw1MHlYNVRVcWs1bXJvQUJtdURhZ01RK1JwNDg4djRYcno3MDJPSG9YQ2pVcjI2Yzc1aGNTaDNyNlJ3MVZLZjBIazlqWTdkMzZiNDlL''@;'; put 'put ''NCt2N3Z2QzNvR0RDVVBQVlNQTk85VTRIZ3Rtdy8yUms0Y2ZPL1MrRjQ4ZmVHZzVlMlU4MU93UDc1OGVPWkVLZW9hVkMyZXRUZTZXeGVHRlR5MnVQckd5NTc2bGVxZmQ2MWk3YkVyVVJucWlPenBpUXhRZkFTM0pEMERlaUtBNUJKTE5HZ3h3U1FOMUFMa29RR3VnWWx6QVRIdFRxOVVWNmdxdWp0''@;'; put 'put ''ZUMxaUF5VTl0ZmlVbDM3dGJSQlJ5bS8xYnUvOEs5OTVJbjFyYjlLejZhK3d6QWZCK01meHpHMTRGVzUwTDl5UjZRT0RDRENqZ0N5R1VsVmFja0I1V0l1ZFpQNTdMWEdmVE9wanFYM1ZWcjBkc010amFIbWluZEd3V1BFMHNLbHRrby83SVA5eVoydEhkMDlBMUZsM3B6ejJOLzkrUms5NDkvbWR5''@;'; put 'put ''MkxmbEw4a1JidGlNNjF0QzRweXUrb3gzZk5kRGVQdkNUM0xueHJxN3hITk50cU56OEtKTWhvV1NnemxaWlFYRWtMWXNLeXdZWEdqeGcwc0pIWFdoNWxNaXJDTVVIamhNUDd0Ly80TkxZTFIweDMwcGk4blFtYzNveXNlS0xkZHd5VmdYbnR2emdnVVJudkNVMGZWdG02b1BaVUV1OGcrb3lGRzR2''@;'; put 'put ''TUgzT3pDeWtQSmlZbzBBQ1UxV2x5VkJwcmpMN3dMb0U4TWdvR2NBSkNmY0NXTC92aldPUExDOC9jdXlOTnhadXoyUnVYL2dzZVdMbnZRY1AzcmR6Zk96VXpNeU5ZMnMvWjN1ZmdmbjZZTDVLRkU2MnlSeWI2bTZLSlJDYk5jV2FON05vS3JuSERWUTVvMW5pMzNxbitmUDRtdHhIOGVkelJ2d1dX''@;'; put 'put ''ZmxGK3QvVDVBbEp0NWJIMTZDV3BFOGVuM0poTnFxczJzQUhHcVNoSXpOK3pFWjF5K1BPOEVGenIvQkIrWG5kRCtmbFJMRmtKNWhKU0dnaVJLRmtCb05TZ1JoeWtXVVkyVUkxWDhiK1Fjc3h3cUc1dVVucDFCY0o5ZExEaTdueFhkallmdmZFRWp2QWlVK0ZZOTdydXZrQnRxLzZ2b0V2ei8yMnZa''@;'; put 'put ''c2ZZWGQ3M04vT2o5RGQ4RkJoejdjd21QcVRIa2s5WGdHZG5PNlgrc3UwYURNc01kMHQvRVRnbGR5U3pWMlJ6ZUpQVTNMQzNYVGJ1Yi9CYlh4Y2RCL3o4UnFwWTZWZ1gzSFRGSXlybVd5VzlxSTJHY2pGdjJiMEIxakVUQm1HMFV3NUo4c0NJSk9WZ1YySHRFYXZBcm9YVEJkWUJhV3lKei9RMUcx''@;'; put 'put ''YURQZG5zNG1EZzFYSnpxNUExOTVKL0ZxdVkrUllIOS9uM3Z3K0hja0dqVnBKbU9URnpDTW9jTSt0MFdEZ3NqNml4eEVOMEFTSTFiMVp2SGMxOTNNY1hjbTljd3pXbS9zUVBwWDdhOENmNVB0ZlplT093TGdhR0ZkSmRXRzJhRG9hSlEwSmRFcWsxT3Zwb3IyQUp4RTkwZVI2czJuQXViWFBzZjZV''@;'; put 'put ''aG41ZldKZFlabDBtdmJ3dURSaEJibjBsbk1DK0xGcEg2OW5zK2pwZGxCUC9mRzBiRWRuNy82RDh1QTh4WEc1TTJrVkNTa1kxNUVmRnNDdzNHeE0vbXMzbWR0QmorVDRKdzRqaHRlOVQva3R4K0xmL1AyeDR6blQyUGJCLy93UDdKaytuMDZjbk9lSktMT2ZBZzh2TER4Mll5SDV3S25QYk5NZGJw''@;'; put 'put ''cDlRbkQwSWU2c0N2Z05XT0t3Q1NGWEExQ1ZUQ0NUQUZtdXFUWVpxYzQxWjczT29hQkRCbWVjOVpyZk1sdlV6MkRwMk1wVTZPWFkraXpVTHE2c0w1OGdUWFN1RGd5dGRiK09oN01oSU52ZVRZaGlZYUJ3bTJVa2QrMHFpQXJOU0lOUTFXakRaRkVXZVViUFozR0p1RHZ2OGxBR0RFTGVLL21KaXBv''@;'; put 'put ''NzFlTUtmc0c0U3d1UzN6ZDdwenRudzhmNGxHVUM1VjdlN3IraThxcTRoRHlOY2YzVTQxVFBtRCtSaGxmdVhwdnFsbm1YUFlxZ1lYRVh3cW9FMWdmd0VnYUhBc2ltOEFwcUl4TjRrY3ZkNG5IcTlrZklldW1LM0gyeHVQWU9jVXZZVmtJTkg1ciswNi9HeldRYTZYTTg1QmpaODJ3bEQ3dTIzR2ZR''@;'; put 'put ''K1NRRW4rVFgvaTRUSmx3RnFJSzlxclFRa05zRkY0S0xPNXlKNTFZS2F2VUVQQlpkRnRtcW9GelJFU3RnZjl5Y0NPTzk3WDBmNHFwSEloSGZ4c3N5QldOL1JvY2xySXUxdGgySXRJNzRkQjY4NmtiaHF1dkxLL25EVW1YQkVFMVpEVzZZN3Zqc2FDZmUzaHB5SnBvNUliZDJ1N1YyN28yeXRRWURU''@;'; put 'put ''Sk5NenVHOG9iOUp5WjQ1a0NtQTMyTFJ1b0JqVDY2VCs5U3lZdEdtSmxuY0FqbndLK3B1Uk05a29CUnN3THQ2ZUdabE1IcE1zamluemt2WW84VEhzdW0weUcxL3U2MXVPWnlkdm02K2F1bU1IL21UdXFxSFZucDdWSWZyYmpqdW1PSDNMT3BHS3pxVmtOamh3VG9scGNzNERKZ25uUEpTWEFlOGdQ''@;'; put 'put ''OGg5ZndIK1lSQnBsUFBDenhreUEyTjVFVktZR0QzQldCV1U5d096b0tFdEpzclo1b0ZiR0hSS0tra2pka3ovQ2U1SzdQYnUvT3JaeGJOZjNmbXI2YSs5T0EzRC9RMXBZei9ieU9UYXMzeWRJRWZKM1l5L0FYL1VxR0JvT0g3S2dtb3ltT09id1dEUVU3akNLbUZJRFJzZFpKcTQvKy8rYmhtTHVm''@;'; put 'put ''OWg3enR6ZjRGdHVkZnhJdnoyT3JieHNRMHc5c2RnYkRWcVNOYXBCS0REUEpPVHZCQUdGdHlTeG9RajgrZCtkZUNuUDkrWGUzTU8xK0xQNUo3QzA3bWp1VGZvV0QwdzFyZ3MreWs4QzI2OXZGOGo3OVl6Nk5tS0U5eTlBUXBBRCtnVFJ3bkpIY0FQcnYxMmdQalRBMnMvNXZKLzIvckhjRC81MlNW''@;'; put 'put ''YW1SRkFMUGpaOXVhamo3NUpmdGE5NXV5R0h1dnZySi9GVDJ6aGN4VkF2MVV1NEdYdWNzV29BK1pyeU04bit3T3Bha2I5dzNRK1ZKalBDb3cvQmo4ZE1OMmJQZVRuM2U4K1FZZVA0L3Z3MHh5M3pxZ09qU1F0d09HWmx4Um1waDdqazVKMzU0d0tqUmdqUnJkZmRQK285NEdobTI1T2dpejY5VC84''@;'; put 'put ''QTExemJ2MzlaRzc5R1pqT3djYll3a2ROaHhBQmdJUnNYL3VyVElxZjZ5QkpZcEY4RC9wYVdkOHE2RGtCbjV3MGdFam1zeWFzN3NHWjYzdklWdzJmNER5dUUzU0kzeEE5c2lNLytrSFNaTU9Db2hhRWdoNDArYVpHcGFCU0t0TGN5SFJBWTZXS1VHTUxiR3lxME5zeWFxeFNvV1VKSHlYajBsT21I''@;'; put 'put ''U1V0MWxqVzB5U2I4dUpqWHRwdzFLZ3pVLzlXdmIvZTUzSlF6NWJINnpacTRLaVF4UXhuVldURVdRdmVXZ09vZ1hLNEVOOStSY2ErRXArL1BMR1V5TzVPVHJrbkE0MkhkbGdPMWt6TjlzNVBkaEg5TlFkeTM5alcxckU3MHprVGFEQU9MdG9zL1owNWIzZGt4dHdYQ2llUUZKOG5FeURyREdBTlBY''@;'; put 'put ''ZFdXMEdVSUM4NDlCb0FhWFdadkpQS0pua282VGF0ZWRBNU56ZWlxdDhHWDZZRXQ0dU1kZ2tEVVlpWmpFYUVqQzZqMDI2REpZUHMydVFaOVZPaTBzdnUwR0w5NDc0ckJ3YXVUUFVmYU14a0dnLzBlMmJhMm1ZNk8yZmIybVk3aVg3MHhtejIxR2gzOUFBNWwvdTNhSGZPQjhaYTc5NW9kRzl2NzFL''@;'; put 'put ''VTQyazc0TnpiZ0hQbGJUSGIxcmFZNVlLMjJIK2RtcHc4TlI1ZDlrYnJSbnlSeFFqODg0M1pvOTREc2FyMDZZbUpVK2xtVDZUZWtkZ1hUeXgxT1JzajNsWjZabkU0czBEK3pQUkM4WmxSMkRFd01rT2pHTW9GZEhkdWJzU1FVMlN1MXcyNGZwSFJMbUdnMGpNeitOeDZlbVpZUXZFQ2VQUmtzMjRV''@;'; put 'put ''b0VlVmtnL3VGRHV0VG5aeTVOemE2SUZvOStpcGJQWkdPRGhzWFR1MStjd0lQVFBpZ1RNem8zcHE2UU9QRndoVGhvaWdJQ3Y1WmRveXFpSTl6bUlCYmJmZVlyZlZVZ2x1OERIM3E0ZWZWbUd4WmlkZG4wcDB3bkx4d2FYYWtQTURYYVBYVFk1ZU0zcnkxdHd1OVVwbThsQUYzcXZla1U1NDZqbzhi''@;'; put 'put ''V09ucHpPbnhyNTQ1L1JsK0RONzB1azlIS2RBRnVQdHdQc3NhSGV5UW90VlNoMUdLcExtMlNyMVNLVlNMb1BHVnNzY0htaEpnU1hQSzh0UXFRTmpRd1ZjWnJYMHcxM0pDbytieFNsRjBjN2xqSnZ5ZnVZMDVFaW9NcjkwODgyWmJkdkdFL0ZXcjZaZWIzVVNaU28zZ0wrZUd1OUpPeE9hS204OTA0''@;'; put 'put ''TzNreGFBSDgzUitIYXlxbEZIVkVxTm12bXdKZjRLREExa2pvcXNVczF5V1ZRUWlYQVpNSTBGL3BwdlI1a2hySk8yUnFWdFRaYzA1cVVOeC9pckExUW5ucWtCbTJqeWViMGV5bCt4dnRpWEh0L2dTZ2M4akpYZ1ljdlFpWFQvMVI1bjQ4NzJYWWNBSlVlUDlmY2ZHOTJNa3NwYzUvQnFqNitwdDhH''@;'; put 'put ''eGZXcDdlMnp3NnZIeHF3ZGk3YnR5aDBMYm9wRnRvZEMyU0hSYmlKLzlOQ0NvQW1qWVRLTmpCaDVYWWJRRUNqdnpCdHVLVEhKQVJMM0piYUkrQ01ycTREZ2xmNTFlNG5iNGhsMGRtWW51d0dSYkptTmRpaE45WkU5UDdsazhPRGpyR1hEbm5nVzI5blpyak5IRUlMeCtrZncxNkdoYTZnWEkrL1Jy''@;'; put 'put ''S2ZMb003SkhSVnRUWGNYYytjcE43bndSVklpOURRMW1VME9EeVpmSmtJT05KdnFycVhIZjJqc3cvdm9yNjFscGZEdWxPUzNJNVJwUVFVbGFXVFNUSURCY1ZleFh3VWJ0Q2g1Q3NGZlZXUzFHUFp0VkxBa2lGRHNCVlBrVlhCWFVWbFY1dGJhbXpIaWlzSlIzZjZVUkI1UXFUd09KckgyM2grdG13''@;'; put 'put ''SnBZTExVU3VaTU9qUUxvWFdDbWlZNnZSdFpQOVVhbTdXR3E2REJSQXJCdC9zbStwNVl5R1d6ZmoydHpiL3h5NzUwQXpqYmN5TStSSHM5bllGelo5NkVyOFgxTUFaU0FXL0cyUWdUb3lZMys5S3lqanJrK09CMVpLQkVybDlXaVNsQXE5UmtGalRRWDJEV1FPanlrVFZUUWhLaFV0dUlXcGd2MHYx''@;'; put 'put ''QlhTaDkwd1c3a2N1dU5icVBicEFGdVVZUmVxZzIvUk15Y09PQ1ZQTGs5bkVsRkI3TDhKV09haWZUc05PdjI5aGFoWGFib25TaW5Xc0s5a2M2K0F0NVRudnpoWnpqYWN4QVltZldrcE5TdWx6RmYycitWNDBzSllVaWJMOXR6eTA1MDI5VVhJeW56SlpDVWNoNG9pc3VZY2RqUEpuK0o3YUwrRXN1''@;'; put 'put ''Ri9TVmNNUmkvY1hMeXh2Rk9xaGQwY3UxQVVndlNweVltVHFkVFhVdUorTDRFVncrUXBNOXRCMzFPWDE2Zm8zSmFCV0lRQ0wyZ1dGRWdHWEd4UHFjdlZkTTJOalJkZkxSTEdPaVM5RG41T1A0Z2ZTNzNXM0xtUURsOWp1cFEyMEdIMHBmVm9RbzdzeFVwTTVrTklvMnBQdnBOcXRIbWhxYUxqM1lK''@;'; put 'put ''QTExUWg5SmZUSFpkUUlkU3JzM2c2b0lTZFNEWFdhcjN6c1BMWVlCVEZicitHWjdFd1lHa1o2Sld3Skx1UzNVU0RoaXpUSGdGeFpoL2FDcmZhNHNPc09temVoTzN2UTN4aURsUG1zOWNQdDZ6SndMcytHLzZVN0NKM005cDBBYWpJT2puTDhJNmZhZ2pHVExEUWkxZ2JDTlM4TmJaTnJ1ZmZNanJD''@;'; put 'put ''WEQzRTAvK2lMTTBBVG5UelNyNjVBeUNSa0psMEhlT2gveTdka1FHWFpIZ2N2YndUSGgvcTJkNkl0UlhGKzFLaklTdW1LdHE5aWFHMnJ4MWJsTzFmU2d4T3Q5azcrbG85b0FtYWRBN3VrTmpPNmkrQjJ2Y1R1NEdmUytjYkxOZ0ZaUDVSTGlOaWtheVJBTXBBQWV3SlBkelRaVHBjRVluVmVLOE5E''@;'; put 'put ''c3ZwcGZTelVBdzBYQmVQSUczdDhZVDQ5dTJaVzYrMlduVjEydk16blFQVHFmKytJOVR1YlAxM2lvTmxUbkFud0M1R2I4VmFFS2J6RytCWVVvQ2Y3TjVZSlUvb3NvOGtySUhDMFpCMlo1YmRpcndXN1BiNUdaaGxDTE5uMHB6SHBqVUU0R3kyUzZaNlFKeXZnTWNGcGd1bnN5OXhKZ3Vub1Q5MklG''@;'; put 'put ''NGE0bFN6dW1TdlVDeTdxczNNRytGa2J1dDdOdi82cEh0UDU0QXpXd2VQMGIxRXd6aURna082Ri9xLzlKZjJQL2xucjMxWTBNZnUzWDI4ZkU3UHpvT0l5N2pCK2pQMmp2NHZ0ekJncDlPaExGWkRtR0ZxTUFLS3Qrb0Z3WEdGa2hSZ01WZ01GREVjL3BGdDlFZnNTWWlvaEUvOGJsN2QzN3p4WjJm''@;'; put 'put ''dW52bjExNTU5VldzWG52NTViWGM3K200amV0VHhBWGo2cW11V0trR3ZJWWhBYm1sb1NsZTc2ZHJ0ek84MWlPZHdlU1czS29VVFFheHdIWlJnOFZqWGtPZHU4NmxiZnluK1dmK2N0dWJkVk9KcC9YSmFsTmRrb2k1T2Z6NDJrdkpic3ozRW9lWFYySE9MWHhrK2d2N3lPSzRJL2UzK0JPNVYzRTBk''@;'; put 'put ''NlFYM3piZW16czl6c1lOck8vR2U4bnp3SFVCUmphbUFPZ3dubkN4REVsb3NDZ3hBb3htOUJhcVFpbEN1QitEYkk1UlJaM21xbHRyaU5uS2c2NGlwVTRSYXhhOXdWZ3M2RjJjVnZYM1dyRFg1L05pYTIrZjZ2UE5JN0dQZGJZbGdwMTN4VlBONnBpbXJxM2xFNkZFZFUwaTlQSFdvRTBUZzFtdVhE''@;'; put 'put ''K0xIdG5DMzBhMXR5djcrcVFFUityZjNvMlgyZHFiazE0MTg1UHBNWUsxNC9GQ092RXlCZFVNclFZZ29pbGdCYkh1NTRsS0NjcGRFbzJrQVFQS20xMHFlSWNUQ2ZYMVd2bUtMYjM5cXVuOFRvNXJiTUhXajRjU05kV0owQ2RhMnVvME1YVnpLbjVYWnpEUjF2bXgyRWl6ZW4wZERlQldmRE4rVkMv''@;'; put 'put ''aTZ2VzEzRnRJY3diaDUzSnZzUXdaS3VQbTFuZWdyeEs5ck91ejFWR0Z4SmFSYytLTXBFVFhaL28yVDB3RnJURHllU21YSkxqWEZDTjZPWGRrYlJUL1dyYXh6K0szeVRTcVEwNktLWTBOZFRhcnhXVFVWU3RKRlkvdHdhd0xVdGtIcUg5MUxPZVNseUJ3VHo4dFBxREhDTEllckd5UHhRb2l6WXgv''@;'; put 'put ''T0JmSzloM3M3ajdZbHczT09xTnRBNE9oYU83RDJkN2VyS3RaT1ppcW5qNCtPSGg4dW1xb1grbHZpblJvY2xkV2RrWk9YV25FZHhpdlRQSDhJRVQ2UVMrdlI2bGtFbzZUSnB3aGtlYTFpM2hTaVFrd1g1R3dNQkl6SFdubW1TaXlpQkluMG5wVVQzTUR3UjZnYXJIWDdJd2xXTFp2c1NzSGpwQ21L''@;'; put 'put ''WkwrdGY4N05EQ1FPRGc0ZW0xdGQvV09SSC8yVzk5S3AzMmVjNms3Um83MVNSSEtPMUxuaXYzWUZ0U2RqSnN3MHVDMEdoYUdLU2M3ck1JRTFFYlFaRmNxV0prSno0KzBtSTBHdWFSRVYwbUxTbGg1ajFsT1FJWWZSdUQ0czQrLzl0cHJjL0R6K08rbzV4dFBwbVpUSjA3QUN6NU0zZC9jL2lNTGVB''@;'; put 'put ''ODV3M0s2T3BuSDFVK1RuQUY1V1JCa1dTbFFRT0daTWxsZDFCbGJiSlIxRnYyKzIwN3o1TzNHeDZSM3NtQTNHdXJyRGZSMy9nNzQyb2FpK0lmNFJaMExCMVJJSitBQStvN2tBNTdEMTVBN0w4Vi9USE96Qm5FODl5MXlaK0pTL2NkVzBmM2N6Qi8za084WmJ1Szh6Yi8rS2w2SE05QlNXeEFocGlq''@;'; put 'put ''Y1JNWHZCNm5nWWlFQUZnTHlNU21BSmZXcWwycGJOQlpVTTNxa3ArdmdZRzdnbWdIYzByR3p1M3RYNTFvVCtmTzFYVHhHL0ZQMGwzZ0VnTmFZdEJkeEJVTFp4VXhSOG5XOENIcVhOVFphekkyTjVwODJXaXdORFJhTFpGc09yaWZSLzlBTWJuUXQyNXZPYWdJOE50SXNRalhseDJrdXJ4MWc0SUJn''@;'; put 'put ''VjF4Tk04dUFTNjhXR09sK09zd3NLSm1zQ1dEV1RWdTE0VkxhaG14R2o4ZERwVFFGSGMvaWQrWFZJNVlhQzhJcUh2bmYvcTVXVzFobmJBQU54MlEwMWVpYzBWcUZHUFEyZUlLNnFsYXJXYTgxVnVxelZKakF1VWZoM0gvR3pyMU5wT2ZlaHI0cjVaNmw4VDh5L3VSQlBjbUVxOVphcFNBOFhFa1FY''@;'; put 'put ''U3REU002d1FOcnNSNUtJODdqdE5yTXhqNWVvbUdWSldaN1V2YXFTRldQZ01MaFQ0bVBOWmZMbENud3RkMTJaakRtMkJ4YURFMjdRdVdDdE5DY3hoZjRFUFlyVVp3aCs4bEhHY011ME9ZcnJ0Mmh6UW02RFJmVFVGbTFXODIycTBXZTJhTE1uUDlkaDlGZThEZG5jNWh2NWNTclJEemEyNGZsV3du''@;'; put 'put ''bEdDd1kwbGt6cEtYdWtjRmNqREV4SURjZWdWcXhvZ0RlcWxrQTFsVUpqU3E0b01hdldvRE5BWjYzRW55cUJXV0k1QVNkR2M3SkFJUURyS2lBbjR1Uit2M3Mzdm9zMDVJdy81Ums1TkQwcm5ic1YzNXk3bGVmUUpGbk9VeHk5azZ5UHgvdytoYWlxRXdBcmJGckEzeG9NTDJrN0lQOGt4MzJhZmdJ''@;'; put 'put ''TTYycDRRWXFyWkplcEpZT0FtVXUySm9pNi9iQnFlOTRJQ2RJK0NDdHV1dFJPYnVnVTJ0QkpPSFd4WHNuQTVnNDA3Wk1jS3RPUFczaVZQbThya0o0UkRMdDZrSTlhTERPSHplUlhKajR1SVR4WitzQlFqVUpzM0V5YnRUcyt1YU5jd2xjNG9YRGhqU1RiclRsMDc2NlNERERBSlpZdnhYQzdXY0wv''@;'; put 'put ''MnhrdTRTS2MzTnptS0hwMml6WW41RGFBLzdkczBXWlBmcHpENkhyZXBvRGI2MVJ5M01mbWF1UHJXZjlZdVhHd282ak5VZUJ2bTlxcy96dU1zODdXMDhiWHMvNWtTUnNhTkZhdzlmQnhEcTgvc25FOVFFYzBNUE50bG5mUlFDc1JObW9ZUzJwTWt5NDBSU3FHVmd0dkRkcDZWalpxaG03VklHOHFD''@;'; put 'put ''cjRQWmlWRjlMTGZBNGdxSW9MUXh5L3o1TG5SVVRsOTdsdjRmRDZGRG5lbmNkdmFuL0pFdWwrbS94Tmd3SEtER0MvcGtIakovU1Z3WXZrdURFNmQwdGsrVnNKdk5yYzVpaE5idERraHQ0R3pmWFdMTnF2NU50WG9TMXUwMlpPZjZ6QjZaUlBmd21nT2ZSSi9tNEFwaFZSUHFXbitOMmlRZnFBT2Y4''@;'; put 'put ''S2FzT0tSTzJKM2ZEajJZZm92aW1mWUcvc2podVI2aE4reXVoNDNDbUpSTW9ndFdFRUNyUTMxdGlxVlVxSEJTSmxQZTZZZkNVVWZZV1UrNzdsc3I3SWQ4cG5QdGN6VlE5TWlMQmxWbVlpcWcrY2ZTdjRnQzQrRHFrb0RxbHVQYy9FaEtNT3BBVzRUOUxUNWpINGpxeEVxbEJpSTdrVEJvd1RpSGxt''@;'; put 'put ''c21EdEhFVS9Sd1pZSWVUR3kvNEY5WFpjSEl3czdReEhnTHQyWHQ4R3ZhNy94T1BBVjQ0dkFaUER1MDJtUEkzZlArQ0t4blI1WmZ1aUF4OVd6MG5GNkZMZ0wvUzMzOS90OStQNDQ4SmpjdjJRL09CWFo3OHNkaUNOMi9peTNodUZhbDRTUFQ1Zmc3T1kyUjlHL2J0SG1oTndHOFBHSkxkcnN5WTl6''@;'; put 'put ''R1AzRlpsN0RkWFkyVjU4MDEwc2J4OW1VZHhWaXpGK3B3TW9WRlphaWpmbkNZaENiV290SmE5Vlo5VDZuVHVTWklKR2liRFZ2UGx0dDlwV1NiTFhyZWJyYVRkK1VzOVVvTFd5SHVYWGtaZFJDZlY4VllFQXdGWXJtcTYzS3VlY3N2SU9YVkR4MTJ1aDFlcHdCTndzUDVuM1FvcnlFV0w1T0xGOFFS''@;'; put 'put ''VU1BMjFtdVV1d3lsc3E4bUtJcHpLbUV0OWMxMmQwOW1TVTEwZmxRYUQ1NnBKdG5NNC9UTE9aeFo4SVJTNDNHMTliNXVmSzhqZThCSEVkQWNTQW9kYWpjY3dIZ2UwL1I4L055ZXl3dUY3Zi9TdjU1ZGFyNCtabjgrSWQzRmowWDdQbjJsVGNqeGdmZ3VmQm5vSCsyb1FoS29pUEpsUWFBbmFzZU5C''@;'; put 'put ''d3pybEIzWVZXRkJwUm1VYVdrVlJzVktsS3hpdFJJSmFwVks5VWFJbGR0MkRJMWxWVUNsZVVTK1VXandTQkMwV1Iwc0xjN0dBbDJ0b2RoZ29BQnFNM3I4V29CNUhJd2VVT2VmbEdLQjQreWJJd3hJMXJ4SStkOWtCL3hnUFBRU1kvejVNaStveHZTUDBhWHJaN0wremRGb1hOM1RyYlJwSkQwRUk5''@;'; put 'put ''SEQzYkZoeGF6UlZraGlZNk9SQ0U4blR2U010THNNL2VGMnVNODl5SEpjaC9pV0pHc2J3ODdIUXFsSWdxbWlKZzNSUlJwTTFiSk9sa1FUR2tWbk5iVkxFWjdsV3hpMjJpY1ZyVU1DaEFMQURBdnB6M1B6VUtzazBxa2RjdVgxb3RxWmVHTnZmQ3BpM1ZMdHBYMG9JWVFPbFNtb3lvZkk0dWp1Sm1y''@;'; put 'put ''WjlRWm9IaVBhbGtOcHNvY1BsS2lsaVdQRFpSTC9uQXR0bXRMYktsdXpmUTF3eVg1SUs0V3djMXRMSjdyUUdsb2d0UFdWYWpNYzBwYlh5aDZmbDV1ajhXanhlM1A1TWM1ZkJsN3Z2NEt2TjNEeG5tVmovOWgzajREMExNWFBUOXE0dTMvRDd6OVh6YitxM3o4ditUUC81bStzZkY1KzhNUG9YeTlY''@;'; put 'put ''SUo4QjdTbklOcWROT3FZcTdxaG50MXFZVElhS3ZCRTVzazZHdXFVL2ZuNkRkbTM5cVNKcHIrQk5Gd3RmZ3hXYldOalk3Q3h6ZWZ4ZVdsTmdpemtaUGxtOVZHbGdkMkZrYkNLbTRNbitCOFhreWNtMHllSCtpNVBIUnhwMlhlRGZVL2NQdFhpT0dnZnQ4MjBCV1pqbmJOdHdXMFJVdldGNWJtYkox''@;'; put 'put ''TFhaaWJlbjl3Mk94Y2ZhRzQyTkRYWjJ3WWNhejlxMzVHSUxuU0dGMktKeFE1YTI4YmluNVIzYmVPOGE3RUE5M0VHeHprTzN4dkxQYWZuOTFqUjgvTnlleXhlVzl6K0svbm4xYnVMbjUvSmozLzRmWndIcHRDMXBJYjRtSS9Ramk3ajkzRFE1QS9taGtJS0VTc1Z5b01xT1hodm82RTlGMElxNXJC''@;'; put 'put ''YUxiUlRLaFdMUUVQS1pkWmhabGZTd3F4RHU2NE9oSjNzWUZSVGE3MDRtUUNNeE9KaU5teVVyUFRYYWRuZDkrUXl0aGRrODN3OC9WU2hlazNJeDE2dFlNVzI1UFU0RTJoa2ZsK2R6Vm9KdXBkNmd4NEhId2xGSHhYcmNlVjZsZTFRUm8remJhbkhGY2YxTHE3SDJjcnBjUmNjZ3VseFRxZXp4ZG5z''@;'; put 'put ''TmZnTkcvUzRZaldPYW5FS3E1RXJjUmFLNVg0QjVJakxPM25qK094SXc4S3d5d2VjYUdhc2NTR1Z1Nm5sblk0NHNLSi9YNHo0M3drbjhDZjNSaVpPcDBPdWFjOXlCQmhRMkoxOUo0NTlMdUJCMytsYVNneDM1LzdlQ2ZqRjQwd1VUM2R5L0QzTThXN2pjNHEvZjFyMC9MemNIb3NIaXR1ZnlZOXpX''@;'; put 'put ''TUpmSGdPaDQreVZ4dmxNVWJ5YjU4SU5KdnVrZ0hmNVhNT2kyUE9saEozMWYzallXVmd0bTBlWTM4Y1phUit3djEyb3lGY1R5ZnR6amtoMldyRmR4UFdiTy9QNnpaRk1jZC9MOG40ZWphVERsdlo5THE4RGFiWnp2dXRZbnhkY3pCOXRvL0NyeFNwQnBORlRyQ1JDV3NRcVJBM1p3OHllWUpjZVpX''@;'; put 'put ''U04wb2ltckZhcnpXcno2UFY2czFNdDFnV1UzQXVYOFBOYVBLNnNkQ1lxaWVCeWQzVDAxWS9rNi9Kc3ppWjdvLzdmN3YvQ0p4cTZPNXZyUDh0SzlCdzJlNk1SajdKQ1BTblBkNTRNQW4wSFVBSmZ6b211bnFwbzlaaHFhQ0lKaHpTQ1dnU3lWQWRBKzFESlpGNjJqYkxReG5UUmNTNDhSSjREdE1B''@;'; put 'put ''YVJUVVJWK1U3R0d4ZzRxdlYzR2RwWmFIY2pYbHd3ZElPQUU2dDFBdVZkaks5dDFuZTR3U1VlK2piMnRvU2JYR2Z4d2o2YWJPelFxeVhqekdlaUcybG41cjE4dG42aXRLUnlTQTlaWXUrTkNWNTlRcCs0TCtTVTVQcHNWdGJxOFkyNVNiVGZHV0dCWjh1NUNoTC9vQ1BNdnZMSjlsZi8xRml4L0g4''@;'; put 'put ''WE1vZnhpVCs4R2RGZlUvSWZiRWF2YkJGMy9OU1g0TFZYT2ZoTlkrc3IxL3FlMHNKWGRGYzNCK1JjOUJtbkxYUkNsNmhHbW1nelhOQ05XMEViU1RmRUZEc3pVak8zejBHUEtzT1B2bjdzd1lGMGFqbHNMeVBpaytNQkNWYWdZUFM1Y3VOYlJrYUVlS1h1R2p6eVRxdFc3Wm1rb0oyWVpMRG12ZDlY''@;'; put 'put ''dXI0NzJWb2lrWUd1OTNlYW0veDA0d0ZuMXNLVTdsTFVuemxDM1BRNWl5VlkwTWIwbFFlZlRRemxQdDljYTdLNU5xelJmbSsvNnN6bVZ6NzhnYnVtdmNiUnZKK3d5UG9XTG16QnYzMnpyeCtlMlFCbGZNNTRncjA0eTM2eXJxeEFHMit6dXNxZ1UvUld0SjZOSjRjMFlIS29NZjBqZys1QW9RU243''@;'; put 'put ''aUVSRkh5bmxPUnBNMHdaUW1JMDZpVXc0MG1ONjNHMGxNU2xHdFkzVEtkV1NYV1dsVFVPc05weWtHSnJpNzNnbHpoeXVpbkErakwyOERyVW1tTTlpRExnNmEzeGQyU05McGRJQ05yTUZHcVFHTVdRZG1nNVJKT1dpNlBWS0RJcVJRck5CWmFzSWI0T1dma0d3dFlkcGRYYnNvQWdBK1c2MEV6a1hV''@;'; put 'put ''K242L05GNmgxR1h4ZXQ1dFpUeHMzcE5xY1ZNMGlONktjV24wNnYwVzFXcnNod1RvRU5uQkw5a0hKd05YV1NiczJHWEVoMlJwczNUWXIvaTdMdUM3amUxYVg4VDF2dG92VWtsM0VhbnVaakcyVlpPekxaZnlvTkYrYXl0ZzBsN0VucGI2NXQyaGRNTzhMZUtNbEJza1BDZTBGSzZwQklTQUlNYWtQ''@;'; put 'put ''TmhHMVdHdWxEaU42Vnc2YTRFd2hVRWtETVlKYXNhcVI5ZkFhR2o1UUxsZW9pRkxKdy9uTFBKd3ZjWVp3dVM0VldLWFM4NDZvdEp2cHZjNzBuaWVoak1JUkRsUFhkM2dnM0orSWFVUGFVS0RGN2F5dk14dXBDN3kyU2pZUUtBNXdtOEQ2SHBPMXNhUGU3bk80TmNZNnUvRS9MaWx2ZTRldjBSWnR0''@;'; put 'put ''emI3N1VhRGZkdWxKbkdETFV1TG4vU00zL0M0d0pIMWUwdGlCeitFTmxXTTMzQjc5OGhua0pRSE00L2VCSjVocEZrVGF0QzRqRHkvUnI1V2g2ZFhjVG50MFZ1Y3JJUkxGc3lnbThxTTRVMUtHeVpkbGpNREpsZWJxOGpEa2piRjlDaFl4VHg2a2NYOG5TaVo3RGViaUVKd1luNE5VZUdVSlZORG15''@;'; put 'put ''ZGdsaHppYUFRTDNLS3RMcHVXYlpRWFpLVmx4ZktTOWtrNUFETjBhVTBXYThiTEYxZklDVml6d3pycjJ6VWkvcCsxZDZTRkFwM1F1UDFEaFRnTDhGZk5KajhyeStORzl4QmxQdDlhWDVKdm5jbGthUElZakxjWDZPNFdrTHN1b0M5R2QvaUgzR2NCei9XTUhyUFM4MCt6NTZ5K20ra1pZVW5QMEpi''@;'; put 'put ''UU9JQUVOd2gvQkcxbXBEWVdkSmEzT1N1MzRYWGk1K1J4WVB5N21FNkFpM1FDT3M0SWF6TWp0Zm1UalcxNGZRanBCeHlwcHBuRlZaVVZHakJDQlRXUksrWTNGWjlYbzJwenZ2aGNqRkVrU1poRk0rblA5YzdQWnoveWtYUWFtd09aQUo3Si9YZzhNLzVicWY2a2h1WEVPNUlObFJXaWlrcDh0VlNS''@;'; put 'put ''cjVPS1M4M3Nzam9zZ2tVa0RZcHI1akpUVTVrNWZGbHI3cHRZNzgvNDhYTHVtNjBGbmVraEJzTU9DVDcvV1FKRDdnUDVudVFEb2JyYW83d3ZuTXREN0x3NkpENUplSHQ0cmlCNnVUM0E2b1dpdVU3a1kxdHFkRzZMdWM3bi9TM3FFNmdveGhUSng1aU9TSG9oMlNRTHhobnRjcC9Ka2N0UXVWZ1ly''@;'; put 'put ''a0huUzJMdm0vdzV1T1phYnRPQUdTaDhIODdVZ0Jwb3prUCtaZ3MxeVY5dG9hRWwvSEp1SFROVUc0ejFGaFBMKytVS2dxMFFZNWRaSVEyekY5U3BDRmNSMWw3ZTk4WDkrNys0RDNEQU9EdDVPcE0rbmVaS3d1S2Y3VnYrNHY3MDJqK1RwdWxiTTVuclVranlwd2hBR2NBbE9sQVgycGJNV3JGYVJW''@;'; put 'put ''M2dUSnNCVnE5VUsxYXFORVNsa3YwVmxXS0ZVT1N4Nk94MHVSRHE3T3BNeEtLdURsZDdhek9NNVRCNGZCNXZOU3g2bytPN3dNTUx3dCt4aVpranJnWUliWEtGbGR0Ny9lZzRTNDBmdmM3ck9qa2lLUU81cTR0UzVQSDFHMnV2K25ySGVkTDhXRS92S0ZVTGlyUG04L1ZZa241d2tKMXJUTUxkcjVY''@;'; put 'put ''Z0JNK0hwdWU2d1AyZDgxSmZ3TkdEREhkakVvNit5TnZuM3FMNTAxSjcrcnlwYUs0VDhseUF1eDh1TzljVkRIY1hPTzdXODdsWW5UMWJaMXhhNTMwbGVNL3pvZWs2ZC9CMUhrTlNEbU9TMWVnUDAveUtXTFNwVWFFVTdUVHJwazRIYW9lVzVWZlViNWxmSVlyTU5XN0pld0V1SmIvaW9wM0s1bGRj''@;'; put 'put ''cE5lVytSV2wvYVQ4Q20rd21lWlhHRmgrQmZmSmwwK3c4RjNLYlFRa0hGbVowSlpMdHZqb1pSZThvK0NQZHNZRjkrYXNpOG9ERjc2MWdKOWRjRDNKY3R3SFVTN1oxSUZGVldkVG82QVVONmJIS0MrUUhpUEJ4dmFISEovdER6bysyeDk0ZkxhUzQvTUVtaTh0UFFaZk5Ka2Z2M2hncW15ZVRIaWZi''@;'; put 'put ''K3NVLyt5Q3NpUmJSdWx2dWtEU2Y0RldUOGkwQ25SK2VBdGFQUy9US2xiSDh1Zk43cWh3b2hlU09scmhqcXpWSUJtcTZDV2dVdTRmREVBenk2OW0wVjV5aXZvNXBVUXRqWm93Wlk0UXZCL0V1UjNMUjlWR3V5aVFjTk1sOVVtMmJHcE83eGtnK0ZCSkx3VzlKRnNQNjNZaUtxUm9HcUdSbXJMc0dz''@;'; put 'put ''MnlKMFhkQS9SMkRieGdMSE1ZOWRYMHlvM1FKb2luOGxkd3NIcUtKS3VuQ0tOWGtyWVdyQlphelVTakRwb0kwZVFqazhxMFRBbEtoZksyQ2t6clZ6VlhnekFETU5QNlVVRlFMS2w0RldsSmRERlk2S1BXa0pzdTFpblpXcjY5RkdFczZpWlFXRkViTUl6Q3JNckRDdENpTHBNdFFvdTR0UFREeWtn''@;'; put 'put ''QXQ1WGljSGVoSHNSYjc5V1ZSaExGOFdoeGtVakNvdmJ5R0NLN0U0WGhha0xDMVd0S2NKWFdzUHlhNmEyTFhHOGx2U1c2TGMrcGlPUnpLbzZnejVYcTBjelBmMmZlejM5a3VqajM0eHY1bkkxSzlGcEpQZ2JyeStMNUxLWUFiVzR0bHhNQ2V0bWpaZnNHQ25FS1hMTVhTZmU1ekxQN1hEeW9OOWxs''@;'; put 'put ''QnQ1VURTY0wvQlFMYWVtR0xQbCtlQlpDS0JoSTBNUGpxWFY3UFB5K0xKWkJzY2xwcytuNkYvS3B5ZHZtdGVhOFo4TnkyUWVrZTJESUUreldGMTJENU14d05sanVmVi94cFRCU3pTbXNkUTVzSUM5Nm16c0lhalJnUEtveEZyeTQ2TFpHNmFteThOUlVwdTNtWm5udmRyMVVrRVJyZWJaeWFEdWtO''@;'; put 'put ''dFRIbkMvNktlUER2dkJZRngrR1NvQUtEeTNZYkdiMVVCdGQxQnNMaVFxMk1abmpEdW5pdXFKTWthSGNXald4dWNJb2I0NHlYS2QzNVRCNjZPSDVRM2l4Qkk5NVBSSGwzYnNaTG9yb0owVTVReWZrbkNGNC9wR1N2andXZEY2T0JXRnhQeXJxdXllZmIzUVkzVmFDeCt3T0c0YnIvWklPK0ZUSitM''@;'; put 'put ''eUdoK0w2RXRjQnIwZEZmZmZJZmNITy90c3QrcDZSK2xKZjUrZUsrcDdJOTFXalUxdjBQUy9QaTlYRERHOVpiVGkxM2JYVTUwR3JER2pkRmZONXNDSW1zcDhhRlhaR1ZGcFVVKzc2TjVWYktLcjQvdExtTW0rcEhtQ0duTC9FKzJ5czlENmJCOGNPOTh4a3U4bjVPM2ZzS0Q5R3ZzNk13RWtRY2xL''@;'; put 'put ''cU1wUEdTRVJFOTJCM2RxYm44Qmc1djJQSG5kSVkwL2dnZVE2c2Nxbktvb0xRT29zMG1GUFV6MUZhRjFDTnFyeEN2c3BDMmpTemx4NlphZ3liWW5WMU1WTzRZYXFGVERmQ254WUwvTkhFNWxsQW4yTytIUitiNTRJMUI1c3JPSGFYVkd0SU5TTFR1RnF3c3hxUkxqWnFrRDRIRFcxVmlRVmdIWXY1''@;'; put 'put ''NG1iaGtpcEZpci9qNHNhK3ZrQUFmbXJkN2xyNlE2YjUzNEcrTnY2ZzFzMXJIK1l4SlgwOTZtRXJDTmZBWnJRVVk5SktWdUhCS3JVQXBvdU1Hd3Ywa3hsZS9lYXhLS1JxRWVrN0dZcWM2RGYyTlZuNjg0N3p4NWdYeWlpNXpObTVEWkYrL0VIeUZkajVNSnMzQWJJQWE1aHZ6b1R4aEJvTHJFNE56''@;'; put 'put ''bktWM2V5MEtGLzhRb1FacHExYVFKUXJKZVJBOUlzVENsbGQrYm9FWE4xazAxdXFUYldxa0c3V1hQUTdHVFFZdFRVT2ovZ0IrWjJmeHlCK2pkVzRpS2lPclVxckJJeWNvRmIzU2FNaFh4dGpGZDFlcWRnRkQvR0tsNXMvYmpqTmFHOWI3cTMxcDlZZlJ6WEl3MGF3MVpTcHVQUGt4eEkzZmpuQjQ5''@;'; put 'put ''eWZXbHR2OTczTC9hVE1aNXJua1RmSVBCS2xjSFFMSHZrOW1VZWlGSHF1aUw4VytoNEZtL2xpZlkvaTBhSytlL0o5RCtQWkVoN0orNTdKOXowTWZJN1ozdXZiYWJ5bU9OYno3anJYWWQ1ZGwzU1lkcEN4SG1hM1QwaHR2djV1anNmMTNzMUpiWGc4WVRVL1RqVTZ0RVU4NFN2NWVFTDFOQ3FiVTVw''@;'; put 'put ''Q0g5OUNQbnd2bnl1UVdwSHV2RWR2RWcyT1hQejdJTDZmQytQSXVOeEg2TG1FUGdKNU55ZjNHY2RmUnVmSUE0QXpuVThCdWt4a25yUVVmNUdLYmRNWHFmREt4MTFQY3l3eXlnNThMcWlmcDE5djBWUkx2OTZDM0U2LzM4THM0Tjl2UVgxMCtLdm9KZklnUUVFTFVFbnhPa2FTeXRjeHdqcndiV3dk''@;'; put 'put ''RGFqbjZZWWFJaStsbWwxK3c3N3JoeTNHdUtHVVRXRHNiOWRaVDYzSHdHNWMyN2dpNjVZTGZHdUx0ZGFYcmh2ZlNSN1UrZm02MmZxL0NlczM1TmRQVVVyZUNBWXMvQktleEErOHQ5cXdCOGJIT3pyR3hqcSt4Tjg2eGpuK1RBSmVqYUw5Z0J0Z2MrbmM4UHBOaHVONlRDOUpFK2wzTENrT0ZIM0gw''@;'; put 'put ''aURLd0d4djh2eXVEaTFXMXZDdlFGSmpWUld1cUZSVkZIOXRrckhhSUZSV0NzdDZqVTVVRkgvYlV1d2lIZGszSi9IZUl1MHRTTis1MUYyMlg1bHZYU3JwQzRwZmZHb3FtWlMvZldscWNXckgzR3d5azB5UGpiUVB0ZzkweGN0K0U1UHBEL2dtSnNlbXZ6MUZiUjN4OS93dFRYaWk2SS9jV2ZrN20r''@;'; put 'put ''NS96MS9lVlBhTG5BcGY2RVR2WFl6aUN1Q2RTcVI2Q3JUcjlzQWd0Z0xzZkErazdyNDc5YzQzZEU4L3E1ZnV2SXhpdmR4T1lPMzhDYXNZaEZZUFBERDY3Tk82Yjd6Q1pNVWIwcjNUWVRTVG5LcTNFd1c5dmFJUzAyOHVVSUFBSkFwaFJZTkpCY2FWdEw0bFg5QlVoU3NyWlpjTnMyMURiWUhXRnIz''@;'; put 'put ''QkN6YXIzdWl0QnZ1MmNJK1dId3hhYWh2QjJ3QXBWTlRTakVENmZWRk81ZzdHMytiWFVtYyt2R0pkeWhMbHRrTjFCMitia09xWXBqL2t3b25jR1pXQTUzSXZPajR5MThldXFrNGVIMC9WYWUyTzFQQ1JYbGJFdERpV3FtOHltMUxaeS9qMy9PQVdVb05QQUI5VVBRVktYVHZqZXZ5bS94T3NXSmtx''@;'; put 'put ''T3FEcUNNQ1ZuWG9uRWRiVzZBOHEzTHZHN3d4UlAyTXpWaXRKZTVsN3pON2pIUnp2SE5qeUNnNHB2NFRacTdoZGlwV2N6ZWVkQkdpc21UMHZ4SnI1OC9QNTUrTE54Yy9QeU0vUjRldUtueGZHVDZFUEZUMi9NOS8reUJYeXZTbno1QWFBQVkxOXFKOXBjUnN4d0tERUhKTWhVYkRGZkp0aGNnTzN6''@;'; put 'put ''WW9CSTlsbS8xMEVIOGxPMjFFRUlzbEV1NmMwdDQ2dG1mb0YrRjV3SmJxL2FDOWZ5Y09rK21EK2JoUDBlWFozazR3TEViMTdYcnF1aVg2K3ZoMCtWNVorcmx5YlFmOFAyeitjMHdBQkFBQUFBUUFBMzV2bWhsOFBQUFVBSHdQb0FBQUFBTlBCbllZQUFBQUExTDZtOWY5Ui91MEVZUVBGQUFBQUNB''@;'; put 'put ''QUNBQUFBQUFBQWVOcGpZR1JnWUQ3Njd5WURBOHZFLzRIL1cxZ1NHWUFpeUlEUkVBQ2xJQWFoQUFBQWVOcDFsRDlNVTFFVXhyOXpYZ2VpZzhIQlFTc2FEVlF0ZjZXQkttaHRKS0xTcGkzUG9ERmF3OEJrMEFnSkxrWVM0OFJBUXVLaUF5UWRESEV6Y1hGd2N0REJSQ1lIblFoTGJZaVN5QVRSNTNj''@;'; put 'put ''dUxXSmIybno1dGUvZCsrNDUzLzNlbFhYY0JqK1NwbzVSamZCbEhvTmFRRVRIME82RjBhSHpPSWtTQm1VTTU2bDJlWTQremVHaU5DQXRrNGpqTjY3SVFyQ21yOUVub3ppb2FYVHBWWnpRKzlSMXhNbCt2Y0U1ZWNUc3R4dlB1UnpUYTg4aFU3S0pROTREdE9vdkhOVlh5T3NpeDI2UWs4am9LUFdk''@;'; put 'put ''L3o4amcxWCtEbk9OWjdpbFVReDRJOGg3U2tWNC95a3lqak1jd3pwMUNtMWF3b2c5TTNRR3pmb1dMYnFBL1RxTnMzSVBPZGE4U1haSkNUMmFEZjdJSlNUMEhFN3JZL2phaEU2eVIzMTB5aDNPZmNUblpwSEdNaEpZRGo3b0VReGhCU2x2R2ltN3JnL2RlTi9teUJONnVJWTJtZUM4TE85M3M3Y2tq''@;'; put 'put ''bXVFdmVYUXBNb3hNNGpLQVl5VDdmS092alppMksxNWw1NndSbm5CV3ZhZ1ZkNGc0ZW9hUndRL01DQnhkejFHdjdhOHFxTVFTUFBQdk5zaHJBYWZ6RC95SjFYMDl1SlV4YnRxNldFTU81cC9PMlgrMFdlOWdHdk9xenJ5UHBMV2kvKy96RGY2TjBTV3FCWFcxTC90WGJVc0Y4YXM4L2VmekQvejJX''@;'; put 'put ''ajkycHJWdE41dC9Rb3RSOXdYNjFmbnVLZm1oOVcwR3kxcnR0OWwwcXR2clBjTHZZdVNBWG5aK25BWlpBNHNoNWFGYlRJdjBvMW04OWI2cTZINXl0NHFERFVnRmdwelhlYldzbE5EZStlWXB4cE9sVE5Xb2UyUGViUUw3UjF3T2JROU5QL0s3NExsc1pxMlZ6TEw3SmtLelB4WE1rVWxxUGRJNmo1''@;'; put 'put ''ZVE1Q3JQTE9hTlo2VzE1UjF3Q3R1blRmWW9GNENta1RjbTBDY1o4S2dPMU9XeUNXeWdKczZ5N09DNTFKb0RoM1NpeGFxVFJlRG9zdUh4N25jMXpwZkgvNWY3Unp3cEFBQWVOcE53bDlJR25FQUFHQXovNVNlcDZYcGVkNmR0L004cjd2VHpwKy8wMk1NMlVORWlNVHdvY2VJSVJFOVJBOGhFVEZp''@;'; put 'put ''aEVoRVJBOFJFajZFakJFU01ZYUlSSXlJaU9GRGhNUUlrUkV5aGd6cFFTU2toNzNzWVh5ZlJxTlovcWVnT1JuQUJ0YTBxdlpFKzZCOUhuUU9YZzYyZFRhZG9FdnEwcnFTcnFaSDlFdjZndjZQWWNhd1ltZ2JrOGFjTVc4OE05YU43YUg0Y0hhNGJFSk1LZE8ycVdwcW1hRjUzcHd4ZnpiWHpWMkVS''@;'; put 'put ''cWFRWGVUR3dsblNscXJsQWJXaFVUU043cU1WdEdVMVdBbHIzRHB2L1dBOXRNVnRkeVBZU0dua1pUUTUycmRIN1F2MkwvYW12ZXZJT0pwajNGalZPZU04ZG5aZElkZUJxK3hxWVRZc2dXV3dDNnp1SnR5U2U4NTk0dTdoVVh3VjM4UUxlQVgvNVVFOEs1NE56NTJuNWVrUlF3Uk9TRVNjeUpJcE1r''@;'; put 'put ''MW15QnlaSjB2a0JYbExQbEloNmkyVm90SlVoc3BSZWFyaXpYbnozcEwzd252cmZhUnBlcFhlcEhmb1E3cEluOUhucjk0eERCTmlYak5UVElxWlk1YVlEUE9SNmZtMFB0U0gremdmOE1WOVIreDdkcGxkWjdQc1BsdGdlMzZ0MytHbi9jQWY5Kzl3ZTl3eGQ4cDk0MnBjazN2aW5nUEZRRGx3R2Fn''@;'; put 'put ''SGZ2SXkvNVcvNXUvNEZ2L0V2NHczeGp2amZVRVd0b1FEb1NSVWhDdmhYdmd0OUVWRWZDTXVpR3ZpbHJnbkhvbW5ZbFdzaVQvRXR0aVRKcVVyNlY1NmxEcFNQNGdFc2FBUWpJWWNvYzZFWmdLWk9KSW41Vmw1VVY2WHMvS2hYSlRMOG1VWUM5ZkN6WEE3L0FLR0FBNGtvSUlFbUFXTFlCVjhBamVn''@;'; put 'put ''SGFFaTA1SHR5RFcwUVFEbjRBcmNnTHN3RDB1d0FyL0RCdXpBdm9JbzJIK0FrbFEybFQybG9YU2plRlNJQ2pFNkJtUFRzWExzT2xaWFVSVlhPUldvY1RXaHpxcEY5VXc5VjJ0cTR5OU1NOG1nQUFBQkFBQUJQQUJnQUFvQVFBQUVBQUlBS0FBNUFJc0FBQUNEQWJVQUF3QUJlTnFOa3MxT3dsQVFo''@;'; put 'put ''Yzl0MFlBYTQ4SzRZR0c2TU82RWdnUWlMalZzRkRRU3dTMElBcEZhTGNYRXJVL2kxdmN3eHA4WDBJMlA0RE40ZWp0VUpZMHhOK1YrZDg2Wm1kNHBBSmJ3Q0JNcWtRS3d5eWRraFdXZVFqYXdpQk5oRTJXY0NTZXdoanZoR2FUeElEekwrSWR3RW5sbENLZVFWZ1hoZVJSVVRYZ0JEWFVyL0lRVjlT''@;'; put 'put ''YjhERnQ5Q3I4Z2Fhd0t2MkxPV0EvNTNVVGFzTEVERjVlNGdZY0JldWpEaDRWN1Bubll5S0ZJYWxPMTZPdHJ6NGhjNSs0d2E4VGNDMlJRUlpkNW5xN2tZcWhkUjR6MU1PYXBSU1ZIbDYzWE5vNnhoeVpxcExpOGphbk1PSTgxNVdudzVERSswTzlqL2VqMm53NE5Say9wY3NuQlRROVlvOHM5eU8x''@;'; put 'put ''UWE1RVBxUWZhUHZmT0g3TUk1dWZ6VkVhVzYvcFhaVmZYZGFLcUdXb3V6NU9ja1dUMXFQcU1qam41aVNmTGZkTFQwVGY5N3BtTnZXV1RzVGIvYjRIRGoyWlNsUWxWdEdweEZiVldZdThjdHZpN2lVTDA5VXM0cDYrcnEzb3kzVXBVc1k0cnZ1T0Fpa2ZQOEF2Y3ZYaHpBQUFBZU5wdGsxZHNIRlVV''@;'; put 'put ''aHIvZnNYZmROazd2dlZmSFh2ZkVLUzVyeDdGakp5NXg3TVJKeHJ0alovRjZGOGE3Y1d5NkJBSWVRUERDTStVSkVMMEtKSGhBb2xmUmV3ZlJlYVFINzl3SlhpVHV3M3ovR1ozem56UDMzaUVMZDUwYllCNy9zMVNiZnBERkRMTEp3WWVmWFBMSXA0QkNBc3lraUZuTVpnNXpwK3JuczRDRkxHSXhT''@;'; put 'put ''MWpLTXBhemdwV3NZalZyV01zNjFyT0JqV3hpTTF2WXlqYTJVOHdPU2lnbFNCbmxWRkJKRmRYVXNKTmQxTEtiUGV4bEgzWFUwMEFqSVpwb1pqOHRIS0NWTmc3U1RnZUhPRXduWFhUVHd4RjZPVW9mL1J6ak9BT2M0Q1Nuc0xpZHE3aWFtN21CTzNpZjY3bVdwL21ZTzdtTnUzbWVaN21IUWNMY1NJ''@;'; put 'put ''UVhzWG1PRjNpVmwzaVpWL2lXSWQ3Z05WN25Yb2I1aFp0NG16ZDVpOU44ejQ5Y3h3VkVHV0dVR0hGdUljRkZYSWpER0NtU25HR2M3empMSkJOY3pLVmN3bVBjeXVWY3hoVmN5US84eE9QSzBneGxLMGMrK2ZtTHZ6a25sS3M4NVVzcVVLRUNtcWtpemRKc3plRlhmdE5jemROOExkQkNMZUozM3RG''@;'; put 'put ''aUxkRlNMZE55cmVCenZ0QktyZEpxcmRGYXJkTjZiZEJHYmVJKzd0ZG1iZEZXYmROMkZXdUhTdmlEUC9tU3IxU3FvTXBVcmdwVnFrclZxdEZPN1ZLdGRtdVA5bW9mVDZoTzlXcFFJMS96alVLOHkyZDh3SWQ4eEtlOHh5ZHFVclAycTBVSDFLbzJIVlM3T25SSWg5V3BMbldyUjBmVXl3TTh5Q004''@;'; put 'put ''eWtNOHpEWGNwYU04dzVNOHBUNStWcitPNmJnR2RFSW5kVXFXQmhWV1JMYUcvSFdqVnRoSnhQMldvYTl1MExIUDJEN0xoYjh1TVp5STJ5Tit5OURYR0xiU1NSR0R4cWtLSytrUGVSYTJZWDRva2toYTRiQWRUK2JiLzBwL3lMT3lQYXVROGJCZEZEYUhFNk9qbGtrdEhNNEkvQzJlZTlSamkrY1RO''@;'; put 'put ''U3hzemF3Y3lRaDhiVlk0bGJSOU1ZTTIweTltMEc1ZXhsMFV0bWQ2eERNOTJrMTYzSVcvdzVzaFlSam9PSjJLRDF0T2FqUm1wWktCUkdiazZ6UWRITk9oTTdPRGs5bWgwM1J3RExwTTFaZ0xmeW9lTFNtdERIb3M4M1dicEtTWnBzZWJKbVdZMCtORTQ4TTVxZlF6MFBPZnlWS1prYi9IMjhHVVlV''@;'; put 'put ''RnZPT3FFVTZORE1mdHN3WGlHN3N2UUU5UGExMjltbkhTUjN6OTkycFBUcDUyZU9GaFc1YklzV09uckhYYXNxV3MxYnRCckhNWmQ1UFZHb3JaamowWEg4c2JQcTNSZGFhaSsybU9OeHdhUGpiNCtZelRoSXYwMldGSVM5Rmptc2R4amhjZEt3MkJUZGlqbEpOeWdvcWtoeHlxMllzbDh5NTNGU1Bm''@;'; put 'put ''dXAyV1JOZjNaNlRoZ25SL1FKTHJkMDdMQSszMk1OdnVhMW5sVytqUk1jaklhaTdqSnVkYlkxQjVGYkNjdlludnFIN2RsdHlFQUFBQjQybVB3M3NGd0lpaGlJeU5qWCtRR3hwMGNEQndNeVFVYkdkaWROa2t5TW1pQkdKdDVPQmc1SUN3eE5qQ0x3MmtYc3dNREl3TW5rTTNwdElzQnltWm1jTm1v''@;'; put 'put ''d3RnUkdMSEJvU05pSTNPS3kwWTFFRzhYUndNREk0dERSM0pJQkVoSkpCQnM1dU5nNU5IYXdmaS9kUU5MNzBZbUJwZk5yQ2xzREM0dUFQNGNKV0FBQUFBQUFWaVk5bllBQUE9PSkgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6bm9ybWFsfUBmb250LWZhY2V7Zm9u''@;'; put 'put ''dC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGWHdBQk1BQUFBQW9PQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZktUYkxFZEVS''@;'; put 'put ''VVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNmQUFBT2RqK2hmWFJIVTFWQ0FBQUpOQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxVQUFBQVRnQUFBR0JvcWEzK1kyMWhjQUFBQ2FRQUFBSnNBQUFEbm5kREQ3RmpkblFnQUFBTUVBQUFBREFBQUFBOEVkOEJ5Mlp3WjIwQUFB''@;'; put 'put ''eEFBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFbndBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTaEFBQU9Ea0FBRzA4c05HeU5XaGxZV1FBQUVyQUFBQUFOZ0FBQURZTGE0WUhhR2hsWVFBQVN2Z0FBQUFoQUFBQUpBZUVCQ0JvYlhSNEFBQkxIQUFBQW9zQUFBVGFzbmc1UG14dlkyRUFBRTJvQUFB''@;'; put 'put ''Q2J3QUFBbnB5VlZmYWJXRjRjQUFBVUJnQUFBQWdBQUFBSUFLUkFoNXVZVzFsQUFCUU9BQUFBWVVBQUFOa0wrYUdTbkJ2YzNRQUFGSEFBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFWV1FBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJWNkFBQUFBWUFBQUFHOUcxWW1BQUFBQUVBQUFBQTFDU1l1Z0FB''@;'; put 'put ''QUFEVHdaMkdBQUFBQU5TK3BPdDQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNMYkZWVkZsMzdmTzVyM3dNc3BYeUVVZ2toVUFoV2hqQ2lD''@;'; put 'put ''S054bWxwSVJ4bXNCQTBZTlk0ZmtNOVVaS2JHeUdjVXpVanF4SkdLWkVMUU10cGdCVVRGcWtoZUNQNklJZmdKRWl3RUsyTDlBU29hSThwMTNYMGZjRXY3WnV4S1YzZjNPZmZjcy9kZTUrM3pJQURTR0lvcGtNcXFtbG9Vd05HRE1JVGxINEdCbmZPWHVua29tWHRqM1J5VXpwMHpkdzVuZy81b05K''@;'; put 'put ''NFJzZVZ6YWZSREdZYXJ4MklZYW14TFBCb3MwRlVsYUVEQWg2VG5RajR4VUgwZUphY2hxQW9ieUI0VHNRSy9JSlNCTU53RzU4a0FhVU1HUGJpekkyRTJiQTczaHZ1UjV5ZjhKdS9JN202OW4yQkFwLzgvQy8rZGQ0V092Q050ZVVmMmh0azhJODNod1hCcmhMT2Y0Ty9PQ0YxMml2RHpzSUZaTWhq''@;'; put 'put ''Q1RBOW50a1lRQmhXRXhRV0V3MWpDNC9kRWdQRkVDaGNUQlpoQUZESzNFMW1wUllSZ0tlN256QWNJejR5dm9QOUZRdkFTSVhpWk1IaVhjSGlmY05oUGVIeENCUGlVQ1BBWkVlQW9rY0kzUkFvbmlFSlc3eGV1RmhKcEtaSWlGRXF4RkpOTHBJUThrSlZOYysweFZNa3dQak9LRU4xM3ZHT2pPN2E2''@;'; put 'put ''WTZjNzlxZ2tDbEJGRktLYVNHTWFrY0Y4M01VVm9rZ0NqU1RRU0R3ZXhrck9ieVFLOFJoV2MvNFQrQy9uUDAxa3NKRklZUk5SZ09lSUZEWVRCWGllU09FRm9nQmJpRUswRW9YWVJxU1JKZExZVHFTeGcwampkVUx3SmlHYW5RQUhpQXcrSnVLOEdNMkwwYnc0ell2WHZIak5pOU84T00yTGsvN1Nu''@;'; put 'put ''L2s2Vjg0bFJ6bnlYTFdDR1JyT0dsZXd0bU5aMC9ITXpBUm1aRDRXNEsrb3c1MVl5Rm91eFRMOEEvY3hDdzh3K28yTTZIbFc4aVZXOEYxV2JqOHI5aWtyZFpRN09hRW5xNGp2TFluT2w3bFh6K0ViVXNlNGUxSmZXNm03aHZEN2J0U3FJOUg1eUR2eUpYR3NteWVQNVQwYlgrYis3Z3UvRGcrRUQ0''@;'; put 'put ''VVBuVDJTTzVGTllkUHAvNzVJakh5dXp4aVVxaVpFTldGd0RXRnhMZUZ3SGVFeGt3aW9pSldjRTZsQlZBMUcxV0RRUWdUWVFBUmFhZEZLaTFaYXROS2lkVFU0UkZnY0ppdzZDSXVmQ1krVFJDQzlwVGZyMmtmNmtQdEtYM0pVVWRHS2lneVNRVnpmWURUT0lUTG9UZlJRcFlzcTNhalNiVTdwVnhC''@;'; put 'put ''SnBUdU5KMGpFazFLbDI1elN6MmpjYVZST28wcHBWS2VVSG1zOFZ2Y3JSSDVkUjlFNjFhekpSUmdwMTJxY0tkV3ZWZjJhWE15UmlrMHU4a2pMSmhGL1V0RldzNUNTTVhJeDN4NTllbFV4d21tczE3V01heVlqYVdRa3EvQTRvM2tDVDZJSjZ4alIwNHhrQTA5akszZWI1UzUzY0hlSFdJTU83dXdr''@;'; put 'put ''ZDlDSGIrdlB0d3ppaW1XcVo0TmUybEdLdzZXMGk5bmZMcVVsYWwvS1R0UVdsSkhibWYvdHNseFd5Q095U3RiSU9sa3ZtMlNMYkpYdDhwYnNrZzlrbnh5VXcvS1ZmQ3MveWtualROb1VtWDZtMUF3MTVhYkNqRE1UekdXbXl0U1lhV2FHdWQ3Y2JHYWJCV2FSdWNjc013K2FCdk9vV1czV21xZE1p''@;'; put 'put ''OWxzV3MwMnM4UHNOTHZOSHRObTJrMkhPV0tPbTU4c2JHQjcyR0k3d0piWllYYVVIV012dEJQdDViYmFYbWxyN1hYMkJudUx2Y1BXMmIvYmUrMTk5cC8yWDdiUi9zYythWnZ0QnZ1Q2ZjVm03UnYySGZ1ZTNXc1AyRVAyQzN2TS9tQi9kc1lWdUY2dXhBMTBROXh3TjlxTmRSZTVQN2hLTjhWTmRk''@;'; put 'put ''UGRUSGVUdTgzTmN3dmQzVzZKVys1V3VFZmNLcmZHclhQcjNTYTN4VzExMjkxYmJwZjd3TzF6QjkxaDk1WDcxdjNvVG5ybjA3N0k5L09sZnFndjl4VituSi9nTC9OVnZzWlA4elA4OWY1bVA5c3Y4SXY4UFg2WmY5QTMrRWY5YXIvV1ArVmIvR2JmNnJmNUhYNm4zKzMzK0RiZjdqdjhFWC9jL3hR''@;'; put 'put ''Z0NJSWVQQjMxWmlONWlYS2xjclZ5WThSWXJOeXNubVhLS3hNOFZibENlWkx5M3lJMmc5V3VWYTVTSG1ING1Tcmx5aFhLa3lOR3ZmS3o1dFZUdGx5aVBFbjk3Y29uMUROS3VVbDVwSEpHK2M5Mk52a1o1ZnJ1bVZVL0UyTzErcnN3cGl0dlZsNThobVZXSEx2YTg1VGZWRjdabGVNTXFOMlZhNVZI''@;'; put 'put ''bU96L1kybzNtYXRzZDR5cHlpM0s5V2VZMmN0cTl2NDN4L25NZHNzakUxeWYySE1uTzFIVEplb3ZWMy9TcnRRY1BxYjJyRVRtNHlnNjJUa1YrYlA4aldwUGptMmRFMnNtcms0Y2RhelBuSjN6UjNPYTFYN1dManFsM3B6R1BsVDcvY2pPMVRUT1dLenRXSHRKZjF6Wk9HL3ZxYjFZYS9TUjZ2eHJu''@;'; put 'put ''VDlWMzlXdWMvUkV4THJ0NUs5USswU3VnaHRQcXpycGowL1FwSVJtNG9vazdlZlV2algyNjN3OUYyYXcrcHZVSHl0dFpNS3VVczZvSjU5OVhPMjdOYnFyMU42amRuTGw2bkFMK1h6bFpLV1NiNXljTzkzWjM4Q2RaeHFjcC9kUzhONVZ6cXhFdDFQSHJqMmFYVEM2WVFmNEhXOWlLWXpEUmV4aFVl''@;'; put 'put ''ZnV4YjQ5aVQwOTZ0eTk5WTVhckoyN0Qvdk9GUGFoR3FJdnJtS2Y2OGRPTjUzZmZXWVFwZHJMQjdQcnpXTFhtcys3MnhDOXZZMW5SMS9EOWRheTgvMUplOS9WN0g2dnNrTytobDI0bFRlNm82alhXK1VxZkNjZWo3TVREMEtMOXRSVzdsZmtIUDF1RmtEQ1dJVkxjQXQ1T2J0ZGh0OTF5aGpiS042''@;'; put 'put ''OUwrU3VMK2N1cjBRdFI5OVc3ZTVWUHFpc1p3YTdFNnlWd0YzSzY1VS8xcXoxVlR1RFAvSTl0K0YyU1VtQkZFcGFNdEpUZW5YZDBhOTlsNTkwQUFBQkFBQUFDZ0FjQUI0QUFVUkdURlFBQ0FBRUFBQUFBUC8vQUFBQUFBQUFlTnBqWUdaeVovekN3TXJBd3RURkZNSEF3T0FOb1JuakdFUVl6WUI4''@;'; put 'put ''QmpZR09HQm5RQUtoM3VGK0RBNE1DcXAvbUtYL0d6TXdNSjlrMUZGZ1lKZ01rbU5pWlZvUHBCUVltQUR3YlFxMUFBQjQycldUV1ZDT1VSekdmLyszZlJFcUZQWDI5bW5UUnFJVVJmYWx5TDZVck5teXI5a2E2eEJEUlZMSW5pU2pHUk5UVTdZYjdyZzFZNHkrejVWYjdnd2R4MWRNTTh5NGNtYmVj''@;'; put 'put ''OTV6enB6bm5IbWUzeDl3b2VzTFFYU1BWT3FaT09ldVVxekhKWXpEallHVWNJczY3dEpJRTgyMDBDWWVFaUNESkV3R1M1d2tTYXFrUzZaTWxSekprMElwa2hJajFYaGx2SGVKTW8rYnJlWVQ4NHZsYmdWYXdWYW9aYk9pckdGV3VuWGY1aC81VFNsOWg4V05IdHFQYWVPWitFcC9NY1Vtc1pJb0ta''@;'; put 'put ''SW1HWklsMlpJckJiSkJObXZ0bDhaYnJYM0liREhiemMrV1lRVllRVmFJVTN1b2xmWkxXMzFVTDlSejlWUzFxMWIxU0RXcmg2cEpOYW9HVmEvcTFEVlZxMnBVdGFwU2xhcENsYWt6cWxTZDZIelRtZFdaOVAyVG85eFI0TWgzeE5nSDJ2M3NQbll2dTV2ZDZQamE4Ym5qOEllUWQ4bGRYdjJuNW01''@;'; put 'put ''NE81UGdqMXNFby92UCtJZEcxMGtYWEhWMjduamdpUmZlK09CTEwvem9UUi82NGs4QWdmU2pQd01JSWxoblBFaW5Ib3BKbUU0a0hCdURpU0NTS0tLSllRaXh4QkZQQW9rTVpSaEpEQ2VaRVl3a2hWUkdrVVk2b3hsREJwbU0xY3hrTVo0SlRHUVNrNW5DVktZeG5SbGtrOE5NWnBITGJPWXdsM25N''@;'; put 'put ''WndFTFdjUmlUVm9lK1N5bGdHVXNaNFYrL3c1MnNwdGlEbkdjMDVSVFJnWG5PVWNsVlZSemtSb3VjWVhMMUhLVjY5elVGUDFrOURZTm1xVjdtcWFmYlJXcnRSM1JiT0JzdHpmcldhUDdYWno0N1ZiaFh4eThRRDJiV2RsalpTMmJKRWFQVzlqT01ldzRKRnp6R1NsUnVnSWl1S04zSHFCcGxnUmRE''@;'; put 'put ''L0hkWjRxY1ljU3lqYjFzWlI5N09NQkJYVXY3T2NKUnZYV1lVazV4a3RlNm1ucXhUcnpFVzN6WUtINmFmODhma00ycTZIamFZMkRBQXBLQk1Jd2hqR2s5QXdQVGJpWldCb2IvSWN6Uy80Mlpkdi8vd25TSlNmRC9sLzkrSUQ0QTJzOE5zbmphclZacGQ5TkdGSlc4WlNNYldXaFJTOGRNbktiUnlL''@;'; put 'put ''UVVnZ0VEUVlydFFybzRXeXRCYWFVNFNmY0Z1dEY5WC9DdmVYTGFjK2czZmxydkc5a21nWVNlOXRRZjlPN011ek52bTNsak1wUWdZOTJ2QkVJczNUV0dscGNvdDNyTnAxTVd6UVRodG1pdSs1UXFSSC8xR3IxR295RTNySHllaklBTVR5NjJETlB3UXRjaFU1RUl0eDFLS2JFcDZGNmRNdFBYV2pO''@;'; put 'put ''bXYxZHBWQ2hYOGZPVUxnUXIxLzI4ekZ0TlgxQzlqcW1Gd0JKVVlsUUtBaEVuN0dpVFpqRFZIZ21hWS8wY00rL1ZmUUZ2bXBHZy9yb2ZZa2F3cnAvUlBLUDUwQXFESUxESXRJTkFrbEgzdDRMQW9iUVMyQ2RUaU9CWjFxdjdsSlV1NWFTTE9BSXlRNGN5U3NJdnNSbG5OMXpCR3ZiWVNqemdMMGlW''@;'; put 'put ''QnFWbjgxQjZvaW1hTUJEUFpRc0ljdGtQNjFhMEV2Z3l5QWVDRmxaOTZDd09yVzNmb2F5aUhzOXVHYWtrVXprTXBTdVJjZWxHbE5yWUpyTUJBNVNkZGFoSENYWjF3R3ZjelJnYmduZWdoVEJnU3Jpb1hlMVZyWjRCdzZ1NHMvbHU3dnZVM2xyMEo3dVlObHp3RUhjb0trMFpjVjEwdmd5TGMwckNn''@;'; put 'put ''cE1kTDFFZEdTMG1KZ1lPV0U1VFdHVlk5MFBidmVpUTBnRzFCdnJUS0xZbDg4RnMzcUZCRmFkU0ZkcU1GaDBhVWlBS1FZZThxN3djUUxvQkRmSm9CYU5CakJ3YXhqWWpPaVVDR1dqQUxnMTVvV2lHZ29hUU5JZEcxTkthSDJjMkY0TXBHdHlTdHgwYVZVdkwvdEpxTW1ubE1UK201dytyMkJqMjF2''@;'; put 'put ''MTRlQmdGakZ3YXR2bk00aVM3OFNIK0RPSkQ1aVFxa1M3VS9aaVRoMmpkSnVyTFptZnpFc3M2MkVyMHZBUlhnV2NDUkZLRC96WE03aTNWQVFXTURXTk1JbHNlR1JkYnBtbnFXbzBwSXpaU2xUV2ZocVVyS2pTQXc5Y1B3NkVyUXBqL2MzVFVOSVlNMTIyRzhlR2NUWGRzNnpqU05JN1l4bXlISmxS''@;'; put 'put ''c3NweEVubGtlVVhHYTVXTXF6ckI4WE1WWmxrZFZuR05wcWJpSDVSTXE3bVg1cElyN1dENmpaQ2Z2bEF1UllTbUtaTjdnQytMUTdDN2xaRmQ1TTFIYXU1VFRYZVd0UkhsTUdUUm8vNGY0bmtKOHgrQ1hRSHdzODRpUDVYSEV4MUlpUHBaVGlJOWxBZkd4bkVaOExKOUdmQ3huRUI5THBVUlpIMU5I''@;'; put 'put ''d2V4b0tEeDJ3ZE9seE5WVGZGYUxpaHliSE56Q0U3Z0FOWEZBRldWVWt0d1JIOG13T1BxNWJtbk5TVG94RzJmTmlZcVBSc1lCUHJzN013K3JUeXB4V3Z2N0hIaG01V0VqdUozN0d1ZDVZL0lQZzMrTEYyVXBQbWxPY0hDbmtBQjR2TC9EdUJWUnlhSFRxbmlrN05EOFAxRnhnaHVnbjBGTmpNbUNL''@;'; put 'put ''SW9hMzN6azhrcXpXWk0xdEFvZlR3UTZLOXJCdkdsT2pDT2xKYlNvU1JvQkxZT3VXZEEwNnZQc3JXWlJDbEZ1WXIremV5bWltT3hGR2N5QUtTamtwckd3N08ra1JGcFlPNm5wOU5IQTVVYmFpNTRzTlZ0V2NZVzlCKzlqeU0wc2VUZFNYcmdwS2UxRm0xQ252TWdDRHJtUlBiZ21nbHRvNzdLS1lr''@;'; put 'put ''cFlxQ0krQ0cwRisrMWpSQ1l0TTRNdWdTSmtjYkt5RCsyS0hUbWlnbllDMzNyU0t1L2JRdTNQZGZJZ01KdWRidWRCbHBHaTgxMFY5V3A5VmRiWUtGZXYzRTBmQjlQT3NMSG1GMFVaVHk1NzM1NFU3RmVuQkxrQ1JsZDJ2KzVKOGZZNzF1MUtTVDdiRjNaNTRuVktGZkpmZ0FkRDdwVDNJaHBGa2JO''@;'; put 'put ''WXBSSFByMXQ0TWtVNUtNWkZjeHdYOU5JZTdZcFYzNk5kMkhmdG8xWmNWbFN5SDJYUVZYVFdic0kzUGw4STZrQXFDbHFrSWxaNE9tUSttNTJhOExHVXVDeEYzTE5rMTBYMEhUd2hIZUsvT01TMS8rdmNjaFRjb3NvU1hXalhDY2tIYlI4cjZLMGx1NU9IS2tabjdieHNaNklkU1Rmb0dvS2VTQzQ0''@;'; put 'put ''L2w3Z0xvOFY2UlR1OC9NSHpGL0JkdWI0R0owR3Zxcm9ETVFTNTYyQ0JJc3EzdEpPcGw1UWZJUnBDZkJGMVVLekFuZ0p3R1R3c21xWmVxWU9vR2VXbVZNQldHRU9nMVhtTUZoakRvTjF0WU91ZHhub0ZTQlRvMWZWanBuTStVREpYTUE4azlFMTVtbDBuWGthdmNZOGpXNndUUS9nZGJiSjRBMjJ5''@;'; put 'put ''U0JrbXd3aTVsUUJOcGpEb01FY0Jwdk1ZYkNsL1hLQnRyVmZqTjdVZmpGNlMvdkY2RzN0RjZOM3RGK00zdFYrTVhwUCs4WG9mZVQ0WExlQUgrZ1JYUVQ4TUlHWEFEL2lwT3ZSQWtZMzhZeTJPYmNTeUp5UE5jZHNjejdCNHZQZFhUL1ZJNzNpc3dUeWlzOFR5UFRiMktkTitDS0JUUGd5Z1V6NEN0''@;'; put 'put ''eHlkNyt2OVVqVHYwa2cwNzlOSU5PL3c4bzI0ZnNFTXVHSEJETGhSM0F2ZFBmN1NZODAvZWNFTXYyWEJETDlWNnhzRTM1TElCTitUeUFUN3FpZHZreXE4MmZWdGFsM2k5SlQ5ZHVkZDlqNUcyVXp1aXdBQUFBQkFBSC8vd0FQZU5xMWZRbDRaRldaNkRublZ0V3RMYW5VbnFTeTFaNmxrdHBTcWV5''@;'; put 'put ''cDdFdGw2WFJuN2U0a3ZTWHBwcUZwNklWRlFCQWJCa1ZSbkhFYnhVRVFCMWthQkZxVVpSeEdCWjQ5TGlNT09vN29tM0ZHSGJmbkcwWjBKRGZ2UCtmY1czV3pOVGpmOTZDVFZPNzl6L2FmZnovL2Y0S01hR0U5aVQ4dWVKQ0FMTWlKU3BBZjFhQVVha0VkYUFpVlpGdzluZTJ0NmFaa2JUaFFXVnJz''@;'; put 'put ''c2hZWk5BUVpZM1ZhcjlVck9wTk92ek9aOHFlU0taSDlGT0dqOHBRK296L3BHM2lTVWo3TE1LeEJPcG5DSDVmK0RuZjgzKzZlQjNwNkhuaWd4K2YxOXZUMEhPbnhubnZnaU05N3hQdkFBdzk0anh3NU56RHd3TXBBMWQ4TFArdjFCcjN3NzVhanZvR0J3RUg0Tk9CdDcvRWR1YjdaSGQxMTFWV1BY''@;'; put 'put ''SFhWcnVpcU4rcUZmd2dSTkxyK092b1dPYy9XRnN6NEVNWm9BU0ZVbUVXRUNFc2FMQWh1WVZTajBWZzBoVUZya1ZaMDE5bVRndDhWU2pVMkpSTXVwMFBubnpsVDBxY05oOHM4b1pDSG5KZDhQNnd1S3cySFM4dXFFVnBmUjMzNFhud0RlYkRJaDR3SUZRbncvU1ZFeHczQXR4dGhYQStxUk1PWkFZ''@;'; put 'put ''dU9JSzFBTUVGNDJZUU5oc0pzWVZHQklJcjZCYk9SNlBYV3JBWVRZaUdqQ0ZWV2xKZEJLMDlwU2JFYnhyZGJjLytKNVhWWVRJcCswWjltWCtrayswcUs3RXVrTC9HYnNTdnRKeUs3SXUrTlRFUXV0eCtQWFdHL0FqNjlGNTZjc1AzTmUyUHZ4UmVleno0Qy8yV2Z6ejRLLzJXZlI0Q1owUG9GMGti''@;'; put 'put ''ZVFCVW9pQ0tvUGxNYnFmTjVQYVhGYnFmTlpOU0xoWWhvQVcxa0JKYUZDVDRJNjNPajBVcXJWUUJzQlhTd3g2bFFPTzF5cHhwd3FyRVRwMkd2WFc0eEZIWldZQ2VDeDRYWWFXdEtOY0lEMG5ibXNxbDNIZWpJN2oxeUpMbXZkZXJLeGRiKzhSTlhTWmRIRTNWTnY4NjBaSzQ0S1daNml2WmxoMncv''@;'; put 'put ''S3AzZWxaeHBGanM2emJ0SE82My82Sm1id3U0YTZ3dUdGcjgwMzFaZDNXRDlKc3hEaXlMcnZ5TnI1Q25ZWFR0Z09vcmEwUC9LUGxhOGF5NVRaOEphSThZNkxWNUZPcVEzNlBSSGtVYURsZ2ltdTE4QWV5QXNtVVVpQ0JaaDFKTjlMQXhOb3Bkc2dnQ1V0Uk9YekZnVTNlS29KNVBjcGdVaEFFdWJv''@;'; put 'put ''ZTFiemM5blFyRllWWlhEZ1ZDc0xkYmExRmdWcldxb0Rqa3FIUldseFhhYnRRZ1dVeGdxRkoxMU5vN1JaQUl3NlNqRWZwekVmb1pLdjAvbmRMaVNhTlA3VHB4Lzk2bVJtdHFSV0F5K1o2UDR2YnVrOE1UcFJESVVqaWREZU85SUxUemtyNnJqOUdFaWpQYzFqRWZqdXhvYUptTHhpWG84dFRhSi83''@;'; put 'put ''SWpHdTNzaURWMFN2dnFKK0pSK2c0ZzZydnA0ODZHYUNlaXRCTmNmNTNjUUw2QXZLZ2VOYUhPVEZzOEdxNnFLUGVVbUloUklGNk1CREpDYVJzdkFldTVzbHBnT0lZWm9LQ0dCcCt2b2FraDVhdjNSU0orbmVpcTA0YkNPcitQTHFvcHJWNGF2SE0zcGQwNjBZM28ydHg4bmJZMGdOT2xrcUF2c2U5''@;'; put 'put ''MDEzSkxkcUs4Tkxxbk1UWlJQekU5MUZkWE9SR05uWlQrTWxsYzJ0TlU3M2NNWE5HeE9wbzIraHJuWW5QdHZRZjhOZjJoaG13a2txMXZIdzNzR2VpYURDejNuU0lqMFhCcDJsc2FEd2NTYTY5MVh6MmNtbXpLSUlRcG42TW55WVBJak95WklpcEYyUGJpVVdlQXdNUnRlWGtoK3FldFhyZmJhN1hF''@;'; put 'put ''OEg4c2U5MCtuOXU3UEl4b0g2M3JNN2lQUElzS2tPNkpBaTJPMVRFeGszWURnOENpeEFldnZISzFjV3JYNUo3RzJSL2Q4cTdYOWpSTlAzWHExRk5UYWRhMkZ0bzJLbTFGYU11UkVFNXovTlR1bVlSMnE5RERxZW1ucmo3MTVFelRudGZlZGN1UDlyQzJLWHdDSHlEUG80T29PWlBhT3pIVVZGM2gx''@;'; put 'put ''dWxoRVNNQ3hocU10Qml0NnJCV1M1YUFlRjFhRUVJQWVtRFA3czcyV0lQUFd5ZFNTb1NacHB2U09oSCs5L3ZDL0RmZzlRWWNEdkhma2dtM0MvNW52M0ZVQUN4QU5QRlg3TmRDREJ0WmdmbHZ0SnN3dEhlNW1aaDkzbXJVRWJ1ajJxclRXUTBhYzNHRHdXMDJ1dzBOeFdhTnNVaWp0MVk3N0VSbnRK''@;'; put 'put ''b0xLSnpSWmdnNUdXQUJBN1NXYXFLT0FnYm9EQmxzUmdwWmdFOVlUS1VKbjduQTdqTUtGdEZnRVFzdEdyMVdxOWRZQ3ZVV3ZWaWtNZnJzQldaZm90Ums0WkJpa2VnekF5aThaYUNpQVZ2TkhOVHNnNWNjbHVHMEd5MFRCMmxHSmhUSytKRkd3SnBwb0cyUUZGaEF5OEQrZUFFQmFzZVk0QzdTaWFW''@;'; put 'put ''MTJFODFZSXBxd2lSeFBMdi9tV2YyUDR1OXp6NDcvL3p6dEwrQjlXdlF0OUYxcUJDNU04REthRkNoTVdDVWdJM1NHSENBVDBWbXUyb0xQS0Z3bVRjY2poMkx4RUU5aFZPMS91RTA3YXNSL1FTMzQwN2d6dUtNRTlHT3B1bWNZVVlJWmxSRU83TjduZDVHckpkK2p6djNzdlgwZ3A1OEVjWTNVWTFQ''@;'; put 'put ''bjREVXc5aU5LVEdZa0RFZ0FCR290ZUpsc2tZMDU3UWhYdi9WK2dWOGdmd1V4clZtQ21tbnQ4TFlwL21BVkhUaGtjdWwreTRuUDMyVGltNVFKazBnTzI0aHo0QzRxMFNSVEEwUUgxc3hseElZbERPYlFGRVJLTmJLb29waUY1T0xvRy9xTkp2bEhrazFObUMvanpKU0JZd2szcGJOM2pZOWZTNmJQ''@;'; put 'put ''VGVkbm9uRlp0THAyWGg4Tm0zZTkrblYxWHYzN2J0M2RmWFQreFo2cngwZHZhYTM5NXJSMFd0N0dRNWczYmdjZExZT2VUTEZzSlVDNEd1RVMzR01MWGpVYW1lb0U4UHBwTlgvaFd0cW45cTlRdEtqdys5WW0wU3NmUlFXVlF6cktVYTFtYkRKQ01zQmFpQmtoS0dUaVQ5cWRDd2dwbk9zN2tCSUl4''@;'; put 'put ''YlhkV0ZGYW92aEpsbmNXVEJzVC9UTnZyYlJwcWFaVU4rQmoyZU9kWXpNM1l1SEpmZWViN1VzUnB1Nkd4UHQ1eHFYT3ZxdkhmcXpSVGEySDNCWkFXUFhvSzVNZTBreGpPUERtTURvTUFXbXVCSEJ5ekN5WmdtSUV5WUN1bk9KOHJ5YnNYc05xZzRFdklHZ0tKYkFMbE9oa2t4UVBRT1dtanZSdEhs''@;'; put 'put ''Nm9vejJmemhYMngwNDFOcXphMm84bSsyZDNOV2VuQXAxTFh5NC8zajdTR3ZIVE9kVncrWk1xcmN1a1dsTXBmRmUzSnlNZFVick82K0xUVGUxNzdZVjd1bHQzWmZrZE9DSGIxbkF1eEdrRzFnZlpqQXk4SWhPQzJ2QUNHek5GVUFkVTZrV3phakpaQ293RlFCUDJZcm9YSVBlTUU1YXFiWHBUMWtG''@;'; put 'put ''Zkt2MGtBbVBYWHY0OFBKdjc1bkVYNWFHNXU5NUEvZEx6OERxNDRDZkdoaWpETFZuV213Zzlnck1CR3ZBbmhsQjhCMXBRSUVMQWxuZzJuc2pjc0FjODFudEFUOUREaGc2U1JrallwaHlrZGlVSThPL09OSTF0OUt6WjAvdlpNK2dFWDlXK3FLdVo2enphRWYzcVJIejVVUDd4dHZhaGhOVmVIWHhZ''@;'; put 'put ''aVI1cUtmdldFdU9CN3BnM3p5b0d2V0Q3UU5ydHdMUkJJdUpWaU9NNkVDYWFMU0NaaFhsTktnSTgxSUVRMWtaeks2NkxPejNRdnZTUURDa0I0c015Yk9od29MeWlGdmtyQUhDT0duTDBScGxrNDhlNjh4Y1BYakg3ZGx6ZTY2Y2J3ejBSeHFuRXJqcVVJdTdOempUM1RKVldEamVqVC9mZUxDbis3''@;'; put 'put ''TDI1ejZ4K3RrREUrTmViLzkxMmJxWTlOSHFibi9IU0VkaWJKYlNIZ2dkNG1aOFU1a3BBMzJDR2RkUWVZT1puUTEyTFZnMTFGckUzcFRYQ1lMZ3I2U1A0QjlMUHpwTkpoZEgxejVKN1lnbzRDSEY4QkFHMzZNdjArM1FFWkNxSTZJS0E3SjAwQU1HTU93UGt3N1YxUlFKMWFucXhtaDlXYmdzNUt1''@;'; put 'put ''aXFJZ1lxTGphenBDUWthT3lvdHowTStpaFFrSnRpWitmN1p2c2J1L3J2YktyKzhxZXdaYnVYZjFuaDFKemsrM3R1MlpUdlh0and3SC9jSHh2cnprMjI5cXh6MVc4cTdsNUtsSS9sVzdkNVhMdmEyK2RpK0tQdHNmcU85b2I0bTJDOUpXdWhLK3BBdU9LSmwraWkrNTFHdGFZeWU5MVJSSHNzUUc0''@;'; put 'put ''VkUrMUJxeFVDenlxSmF0QTZRSXNUeEJjV1pVU1VQYWFMekFZQ0xLOWR2R3Q1aHdMMnBiK0lpL1lScGZPWmFJcmliKzRaWmN6YlBlNzJEYlgweDBuejJ6Y1piN3owa2ZvTnJQOXBtdGdlb0xvUUNlNHFjeW1NcHJOME1vZEtpMTNxTXhtaE14dXM4dFd4SlNIVHJZZ0ZPVkJ0bEVrWmZKUGZJdWlV''@;'; put 'put ''YVJUeWlmd3M1aCtKRHJ3czBEL1drVmtCZW44UG1SNEhPT244ZnNlUzlaeE9wd2hoTXdESGVxZTBCR3drZXlwb0xNQU85UDQ2OUw3OENrY0gvdkJ6RU1QelRLKzYwWlBFQWYrQlZDZWlIeVpTa3F2MURkRDRCQ1FhVmxNRTRIcTd5SXFwU21uMC8rNzhYZWtldmIxaS9uYjVtSE1FUmpUcVl3cHdK''@;'; put 'put ''anBlcHpTT3JVaitCU00rWFVwOWNoREQ4MzhZT3dIZEV6Myt1djRPN0QvVHJDVzA1bEd1MEZQeFJ1bTRsbUFnVzlTNlFrcXFMVllvM0ZyUmwwdWw5ZFZGU3oyQjNWMElqSUg1NlF4TUxaemc3LzZ4TzZqZmMwekE1Mkx0M2NkYW9yUHBRODRGTXplcXV1TzFIVk5kVjRWbjJtTVRMYWFUL3dnNzhy''@;'; put 'put ''UytVWFc3eFQ2eVgyQW13bjBvNHk1eWthTWhzNE9Jb0tRekQ3bUJ3Y3BCWWFPUWRBWWJqSmpveFliWjVFV0pMV294VWVSYU1KNlVYOFk2WFNLMzBQOUsxaUcxVUM5cXhwb25GUWF3MklOUnNHdytwYWQ2TUREYXNtMVFrZ25JTjNxenEzMWVuRVdnVXU5eExxWkFEK3JwS2NIb1o2Sm52SGhRVmhV''@;'; put 'put ''SmhRSzIwT0JVS2hBTE50aVF2aENZUlh2SkZ6dXRGdmtFaUZCTWE2eUxoTE1ZdmNyb2xUbXI5N0hWcS8rOHNubFI1YlRNOUZvaDdGaVZ6UTJXdGR6V1d1OHoyNmVMdEs0RGQ3eThyUi8zeWYyTHorNnNuRFBZc2R5eXQ1eXN0ZmVGMHpFYWdkcm02T25WeDVldnZMTFZ4MjRiM0hpeW5Ra0hLcVA3''@;'; put 'put ''R3JzUGRWWDUrL1NUYmpQdEpncXFtcW11NlkvT0xQNjZQTCtUK3d2cnlvTGVMRXh0aWNSYll4TzFNZmIyZjZWd3JmdmdSd1dRWlBXWmFvTldFUHdDRkFSa0pVR3RDaFZiV0R3VTB0R3I5Y2I5VVp1bWhhREZoV1pheGsyWVJLUlB0NStFb2ZwdjhOM3duL2svTnJrVC9HQTlDWEErNndjMHloQ0pj''@;'; put 'put ''aUhPakt0SUlsaEJCMXdqbFpEdE5TOGtJTXJJdVlXTUIzTFUycXplaXRMZlI1ZnNjdGFZaXVKVk9tWkFicFJJSHN4MDZwMTJHbFhQc3ppZ1piNVJEemUwZDEwb0VONkJOYzM5dlEwdnZScTYvQnc2NnZrZkdRODNqanNxZGpiMGpRZHd4OU0xOVUxZjFWNnFTdVI2UG9YWmcvRlFOYmVEYnhXamhv''@;'; put 'put ''eWRhVWxKcU9HR2hXS1BIVnRDUC9BZzNKVUZncUdhUGhIa3ljQmNldXU0NmI3RHgyNmYybm8xc1JnWUxHeDkweC8vNW5leHNYQVlPTFdJZlBCKzVlVzdqdllrdXdMUjRhdUhSaTRiaWdTN2t1MndMNVF2SDJaMlRkTzVpM2swTVFjWXhsTlpwUERabkthbmFFcUxVV1BRcGgxT0MwVFlCMjJ6djdx''@;'; put 'put ''eENNSER6NXk0bGYvT1hGOWYvODd4dDlQenM5OTR2RGhUODd0ejV3YUhyNDZJeG5ZMnNHQUlYMHduZ2xGTXhGRnNsRjdSck1BdXFWUWJZVXk2OTdFdzB0ZzN0aWRzcHl6ZXAyUDQ4dWxQOGNma2tUOEJ6TDVsY1Z2TDVMemkyaEQvd1pVa3drcC9WTnB4WHBWVkQ2OE1DQUQ3Wm5KTGRhclgrbDNo''@;'; put 'put ''WGI2MHFMMFhkNHAzNi83WWIrOEtKVkpnTXVBaEVwQ05GcG1QR3MxaUJFWDkwK3BKY2pFSkdoL08yeWFuN3RYWHV0Ry90MjBlU2svL2pOY0Z2dUw0YVhQSERyMG1hV1JQNDhOK2s4MDlkRU43SXZzOHorTnI1WitIVy9qVzlpYTZBdlY4eTJzOEh3Z3YrWTdHVTdEbVlCc01pNkRqVXJYUytOREZy''@;'; put 'put ''UVpsNWl1RnI2UzhKM2N1U3pkc2J5TXI2SHNoS1BTdDhsNTZUWHNnMTVvcThkWmZKTEdGVlMrQm5mVHdORVlYVjZtclFEV0NmcmpHNHovZ0lxWWFjOG9taG1zWkVrQVluSXp0QmNoaXoyb2dlWjVVeDVtUWJuc3NldTlnL1pkZGMyRHl5M0wzZVpNb3I4NnVhY2J0RlM4Ny9KMnZzNFo2T3BEYkox''@;'; put 'put ''Vm1YS0RYa3VZaHNJc0FpYndHS1hkWnVNNk1XbkZTUVAyZzJ2b24xbkdmYmRJLzQ3cjMvbGZSMkM2MHNmeGl2UjE2VGJjZVB4bDNpOElZdkNYenlNdHRSSFpwR2x2aUc0K1I1MFdhYTFXT3VrZzBFblNTaHhTdzhvaTBOemFlZFllZUFnSUlEY3ZjWnQ1T2F6S3ZEemdGUGl0SnRpQjJlWGYvbmFa''@;'; put 'put ''ZnNHY3V2RGZBdkovVG45S2JybFA4akNqNDRxTVJ5UmtTNCsyWEk4WXB1Um4vZUgzTGk5TForaVd2RUVNYTVQdzlRYVZ2WlIrZi8vL3c1ZmxBZ2VvOHVCOVM3Mm4rL3RQOTNLcEk0c2JlTHAwLzhHRm9lc0dCcTRkNGpUTGRBR2wxK093TmpQSUhQQkdZUmJBcGdLbW9ZbDhBQnlXV0ZqZ3NCVTRD''@;'; put 'put ''NTNXVUpXT0JyKzlPYm5qOUNzaTJackYzaUVZOS9UUXM4dlludDIzTC9zb09kK3ltc21zdHZ3R2p3MjB0dzlJYjZweDRLQTJmQ1pCQTloRUsxQkhScUJod0x3UG8xRkZBWjFPWjlnWnFnK0ZxZkJGTUFkeGd5S21NZVIwT08xdTJvQVY4dnVRZjdoMUxIcFYrNUtDSHVsWFBZZGFsK3R6K01FVlZ6''@;'; put 'put ''UjA5ZldHYW5KNGt2NlFtTzZiNjU5UUlTcVBwMEtZQytoTVFnTmlpa3U0akxSYVdhVEpMQTVPc3RWcXAvS0d6dFFmQnIvVHlqQ21UY3E0SXNjUFRwdy8vZGYzTERPVVNmMlBNblRoVzA0NS8vQ2IzekNzdllzaWpORjBhUDIvU0J0NUZyd0IwRkV1Si9WSENWYWhpUVpZVlRxcUdvV0RFVDlGVTk0''@;'; put 'put ''TERUZVFiUVNlVzZhbGo1M3FXTDZ4YjNSaVlmeHdjOGNWZmFQWHAxb2p5NDNCZGw5b3NPdlVtZGFySmt3bnNnYzZJZzF4cDYxaHRLMWxmeW9SSGEyT2xNYzhsZFVlaTJkdXBtMS9pczZ6Qm5BMHlld0tIaGZKdVhZOGtDR2J5TmdQdnAwZnVNVDR2MG4xdnl5RGE3Y284KzR1b0l0N29EM1l2WmtL''@;'; put 'put ''T1ppT3NYcHBUdVJ3QkJ5SytxWENpdnN6aXR6Q3Z0dXp5L0g1NXVhNStNcm9iZFBtc1R0bThmdWwweDBIbXNBMHdIZEtWOC9lTWNibGpHSUQ2ZWhZV3VhTGdxU1VoU1NYTkdDcWMwbGpvQkYxRHliZms3NS9FdjdSL1FHR1ByLzJIVkxQK2dLdlFGUENlQWo2TWxKWkR3S0NudUV3MWMwV0R4TENW''@;'; put 'put ''cVNsbXBNS0hmZ24rRTNZWDNueXdZZFBQdnpneVg5WmZ1b0xWRks4VHN6c2E1TDQxMzZJbEw3SnA1ZzhBM2xvMEVIWGhJWmpxWTJHT2EzWmJEWXJ4U3ZNRXJvMHNON3hKN0R3anE5OTdUb3NTR3ZYZiszRjYvQ2M5TmRZbFA2QVorSFRIN0RJK3k2QXZqOEdmZXRSZWFaVVIza3ZKOWhrYjl6R3pt''@;'; put 'put ''N2tQbUhMcXFSZlhmLzMzem9qL2VZb0xzQ2ZscDdIUGRLaTlKKzByeWJvYTdlaTZ5ays4eUd0bkgrZkMyblpyR3pHYWU3bWc4SnZ3dStUM2tHS3BGUDRnMnYvTmtISTRzU2F4UFg5K1BxN2NULzU3dHYwdnBKQVdQQTEvc1puUHZNRytlN0FXaHN3RUY3Ly9mb0YvTGM3eEJzRnNHZjFsK01GSG03''@;'; put 'put ''RUtBcmpoWFBqS2ZFd2FvclIyQ2dkRCtYSGM0T3dUOEZYOUlFSGZ2LzdKdkxWZ1RmUDArNFQrSlA0QzV5Mkh0Y2Q2Y3U0UUtxekNDR01US09scCtVb3grTTYxR2RQMnYxaDBmL3Q0VStPbnprekJ0cm4xOS84SnAyenRINGwyYjMrTkF4WHhmcllJVDVMdXhBQmdZUk1yVDA4Tk16M3RZdGtzSnU4''@;'; put 'put ''QW0zZHJLMFpXbEpwZjlvR1BpQWZOZTMyZHgyNGRvaDgyZkhuM0tlckI1dmhEOFFLZkJGQ04yWWN4VmpRdUVFUldNRnlyeWpYQ2pxdEJudzdCN2huVlFDczFSSHRLdk05cVFGZmt0Vmo2b3JKOU9nQnUyY3JDT1VxQnFlWVpQTVpwOGVEa0Nma0NYb3JZZGlTUU5Cdk53QlNrY3NKV0ZVSHBuS09y''@;'; put 'put ''QTNzTStYY0N0OSs5Y0d5cGZqVThmUlN5OGp1enNIT3FjRFIvYlo1Yy9kb2FxUTdRYXhuRDBrdkRvWWplN09KaWJxeW9wYXh1dUZHS1o2czczYzAxZFRFK1pySFFONU1neDZ5Z1pmeTdBV0xFVFFRbGxkWkRzUlZsTTFGV0Vya2NCcGRJdWdpOEZTOUFPVGRERVJOc2cyQk45bWw5U3FIZlRzREFv''@;'; put 'put ''enF0V0x1YjRDWkIwL1ZZYmNqWlBmWnZaNFNtRGJvbUUyaHZEQmxBS3NTd1ZQYkI1KzdvclB6aXQ2MnBZcERoeW9YMjl3ak5UVWowWWJobXByaEJtSUZGMkg4aHY1VWZDOTVSdnB0TENXMVJLZFRxYWxvZENxVm1vNXltb29BZlVoQUgrV29NUk0zQWg1S1REREpVbUJ5SWVjdGxlenNMYmt1NlMy''@;'; put 'put ''OWZ0Tkk5c2JocGtPaFhuZDNvR0VpR3AySUJucUtlOE9IbTgwak53NE4zVEJTRytvc3JVaE14eFBUaVVwUFJ6akM5NC9hRWMyNS9iTUs2djJqaUdSN3c1d0I5ZjVaOHZ1M0dZZ1JxY2pDaHB4SWxmMmpnSVdYQkdUN0o3K2wwTXg0MmdpemRmOXNJYitWN2grV0NUNlBKQ3ZadEgraytWREZVbHN2''@;'; put 'put ''MzhURnlxdlp6a1haTHBKbjF2cjN4bFA5TjR5UHY2TS9GY09XdGJzMjd4K04yYnhPd3JCL0x0aVVUS2FEMEkxamg2NWd3eEJCUTVaek01WG5MeE9kR3l4Z2Q3bTdyTFFFbWpyQmo2THpEZkJ0VXh0ZlhqcEhuZWlGS2VPRmFYZW43NXJtb2V1SCtzOE9qcDlzazQ0WjUzdTY1czI0eVRDYUdhMHF6''@;'; put 'put ''Z1FpQXplTWo3NWpJUHVlL1QyNzhSWFpycTRzcFRFdmZGc2szNEpoOTJhTVJWaW50V0trb3pFbHVsbGxTS2ZUTG9HbFZjeUNFMmhCZytWb0lpZ3FUNllVSEFNZFNKM1ZyUy9uTThhZ241MnZpYUtINndnL2xkczhGTWJwVWVmODF2WFhIeHdmSDIwdmEzSUc5T1ZGcmtxaW5aSW04T05UblowVERt''@;'; put 'put ''dVAzdVQzVUR4RzE2ZElJK0N4RXRXaGF6T1dpaUtpMCtaanM3S0lCRGtIYWtOSFZxbGh1Q1JxaU16ekRLbDJKaUp6SUZROHdrd3BJTm9FQmlLeXFncWhxcnFxMmxBQVJxd01CWU1CS2lLeFZlWjI3clYxNEkzRWt5S3FzMy9TMkh2TmFOZXBVTGhzTnJwbnFYS3h0ZmQ0UjhmeDN0YWxDcURIL3Y2''@;'; put 'put ''NXVYNmlsUkk5cTYyaHloRlB4V2h2dGo3ZWRYSnc4R1JuTXJKSHVtYnZ3TUQ4L01BQVAvdWpockNWeFNWUFBtVmpKaFBmR2pkaWJBUW1NWXRGbGloV3NNdzlidTdzYjMwTmIvSVBXYlJEZmdPTVVzQ3RQYXZENzZCaEFTcmhZTmZrUUpwVkZuTDQ5dm40d2Q3R1VFLzQwS0hpZWRpVzVMNVc2UXU0''@;'; put 'put ''dVhYWTIreVYvZ2FrMlZxMUxPczc0UHVUNUIvQWpyS2dBVDV0Vnk0b1hVd3B4U3JicVo2TUErdzVUQTJOVmRYamVXbzZXQW9MekN4U3JkMFVxUmJCQ2pqZzk1Y1UrLzNGaWNPSHliNUFjYkUvNEM0T3pLejlrWTYvL3RMNnVEeCtLVHFTTVZwQXR4WmlEY2xSdDFZMUYwRmdwS3M1b0FQTWVEU011''@;'; put 'put ''aEVBQ0lpZFBtMThDVEtGUmRGTHpTVXVweHhIRjdmRTBXVkhnSnJKdXR4RVQ4YUxDa3I4eFJXSHh6cnlFMzd6UDQzNk1hUGZRd0pycjNidVl2cytDQXVnWjRZbXRQUUZBM1BTbEoyM2NnMUk1NFEzN0xtVmF6ejFDOWh0Y0hZWDJLOGIzc3pQWDdCWjdjd2l4TlFZWWlvTVhPbXU3NTc5OUo1RGg5''@;'; put 'put ''YXV4UjdwMzc0L2RRNjJzd2ZyT1IyaXo4RjhCTlRPcDJHaXdRdzVJQ0pQd0tTS2tYalliMG9BYlg3K3lYelFaT2pRSVNvK2tiSk9vUTk0MjAvbFR5bkcyaXFNV0V5Yk1yV0xDaGJ0a2w3VUNWcXROYXVocDdac1dTQjU0SGY2VmdkdmlVNVhrbnM1ejBJMWZ1VHpXKzErdTk5aEFQbWpvbVRkaGc5''@;'; put 'put ''SkorZGUrRTcrWmpwMnNDUGVQTUMrSFQ3c0dJczN6N3B0KzlvVUNtOXRHZXBOU2M4cFA0bDJLRnpmSElzMUl4V2ZXc0cvSHJ0Z05SUE9xSFFOZHVaT2FhazhzcXE1a05IVUZ2N2tUT2hBZHBqOFppYlVpY3FNWlI1czJxMDdmTGg0VHMyRG5RM1M0MFNiRGNjVS9UTUtjOW9VOXloNXk3aUg2OUp4''@;'; put 'put ''ajlkdnpJTHBNSFRqQ0JnS3pISm9pTzZLd2ovWmNCaTVZUWplellEZEVKOU9jQU5Dc2YybXdQYXpNdHZoNkdiYmoycHlIYmd2d1B4NUE0eGl5TTQxUFpNS20yMURGY3pic05NVTlQMlA3RFRwdjhuajg5dlphZFFtbWdLYlNGblhScHNvdjY0U2xXR1NWWFFTczNLc20yeW1EVENYc0Yrc20xWFFu''@;'; put 'put ''MkMvYU5jbXNDNXZ3TXhML1Z2dFQzRGI4VWxZbHduMVhERHBxS2N1cjhyS0ZDYllNdHo4Wk1hQVU2SG92RmxLN1lBTElHV1ltTEUxSlowS0NiKzgzTFBybUhqNE1QN0h0cG5KUHVtZmlQWXdqN204amwrRThZTFUzblZnZ3AzZ0hjT3dJUHh5a1plU3paR1hJQW9FYWdQTTNnMnBRaTlZc1RTNFRx''@;'; put 'put ''WnhGMExGOHN0bkdxS3pjNUdtNW82bFBjZjJ4QS9YUmNZR3FwUHVoa1R6WVB6RWpMazZPTmdWcktpcXNwYjJkQXhNVjVVTng3eGxqbUtIeFZyWkhodWFvL1lTekhHUmZBanNwV2dtNHNZNkd1WUZzKzVXcWt2SUFqMDBBQ1NBWjNhQW0zTE1Cckw3cUJFVTVPNlZWYzR6QW9sTEQ3Q2EwbmpSMlZU''@;'; put 'put ''V1BqbytmdkQ2Nnl0ZFJlWDZFcXRqb2hQSHB0Ny8vaW5wVlkvZnBPYzVTSzhEUHJWTXZ0aGhRSktUTHlCYVpJMnBjZ2ZkeWxOWjhPYzlRQzVmUU1YN1dleGZaUVpUUmNWbVpDVVdLbGFhRlNFRHhQSkhFQ2tnWlBDdzlCSVZNbmhDenNraGRVU3I1T1Fva1F6RkJyVGFtTWR0NTZFWDEvRjc3em4r''@;'; put 'put ''VHd0ZytKekFkMU1GamNFcVJrSTF0TjhhdzdGZU9vWlR2bnpOelZNM24xMStkTjhOTis2REh0K0piNkZmYTMvRU4wczM1Mk5OTnVpYjVZQVpSUTNOSjZHZFl3eDlDMFIxS0dDejJTajFlTU9pM3g1T3V0TkowWTd2ZTkvN1QzejF1WlB2UG5maTJhOCsvenpXcjMzKzgyOUtiOUIrUzlaSFNUMzBh''@;'; put 'put ''NlhaTUNZOWdTbFRJNEhJWFZQaVBFRG43bUhFYVVWRk5vYzZMTmlGQmJhS1Fpd2VyM1dWKzBwODV0TFhMbnZnazZzLzhleHVlZEkxV21SenBZbGVPb28vdW5heEw0UDVXa0I4NHUvQm1EdkVlYXlYanZNa3NFLzZDYjVIZWcwSHBMMGorTkQ4aUhUUFBPdTNlbjB2UGtLK0NGS3JPaE1zWWNZbGFH''@;'; put 'put ''azg1UE1TbXVNR0lMTXlQMk0wWVhWUi9VMURnR2xRUmlsZ3N6Qk5LSFlYRXFlYkh4V0tsTXRFYk41Zmplc2JVeEZjdlRDaGIydDE0bEFvSE1TdWxqYjlQVFVEVGJmRjYzcnE0dWZTQTlYNmJvTzd0dm85RGVtQ3duVERIZFcxeFladUdPZXk5UXZvQ1JZMzJqay9EbXlJeTRhSGxWdzFtbis1RjYr''@;'; put 'put ''eWRRQis5Q3p1UTArcGhud1lEN0l1WnVYVGU0UW5hTzQyRVIxMWJ0QnBZWjZCa3FZWkpta1FEeUtRUDhnb1dBOXNUMjFiaXd1bUhncGhaMnViZmhkZEZCV3UxZnQzTFJ1S2E2dnZhRWdYRnFRYjNsTmQ2elowNjZzSDB1Zll3bTVMOTlmb2FlNTVDNjdHdCtGSHJTSXVXRitYZm9rTWp5UDh0UFJM''@;'; put 'put ''bGczQmM5OW4wTGVZYkxXd1V5czZRYXFRbVZIT2NwM3M5THhvby9ITERFdWVhQWkyVGZKQk9YbWc1VXdKbUZCS3ZzQmFQMzVOOFQ4dllJbU1BUzk0S1dZcXlrdEwzQzZIdmFoQVM4ejhmQXBHblpiVDdrSGNsN0ljT3A0MXptUFhORitjYmlyb1RuQS9BK0FqZzJyQlA1eUtUblVjYm0wNTBqSFZz''@;'; put 'put ''TnZiRzJodEMvVktkL2MwTnZZRWE3V1pQdlBZVlYxZFY0NFY5SFJxcTcyZHRTYnBMMHlSanBzUDJQR0M3V0FiejRGRVpBeHN5VExVbThuQVR0RmtJaVRTWEdRUkQyc3hBYUVxRW5ZY3d2d3ptbFVraXR5NVJ6enBxOHhxRHdaQXMxRGpMdWowcHRJc2UxTWQ3TkNWWTVwNlJzYldmanFVeWJTc1pB''@;'; put 'put ''YXU4d3dXVE1TYmg1NTdibTZ1b2ZhaHdYTjlsN2ZMcDJ5M0RENmtqczI2VUV1bXlZR1JBWStBaXlreXQyUkZod21ZVFdER0xSdFpqUURQZVhNNTdUYWxCcURJUktzQVdIbUZVMGtvaFMvRzhQalJlNzd5bGE4Y2hhOTdXRFFYRHc1bUIwK2NnRy80S0EzcHN2M3FJcFA0YXZJY3k5OUpzQ2hpbUNh''@;'; put 'put ''dEF2Mnl3UDZTVnFDSXdoUGJaUERRQUtQYSswaW9QaTlXVnJwZFZaWHV4OWpQS2hlWnBEKzlUdnFNL3dSNnJVRkovSC93M3hYNWNKMFdGUW00RHIwcXh6WEg4UzNrcnJjVEU2VjVPRjI0UjNxZTNOWDlkbU9pYnRGLzRlQUhoc2dyRGxsdUI5YS9BWDdQbzdEVC9nejQ0YURwRUxtSnF0VjNVUzNH''@;'; put 'put ''d3Ryc1dDUEV0QUpXekI5Nm1FdlBOd29ITG10dFhzN2c4ckd6WXpnUW4yOXQzWnRZcXlJZlhUc0tmWGVpVjlDWFFIV1o2Sm1pU2pBUUtqSW1WTW0wVFNyc0hRb0VTa3ZoNnhYNDRmZkRSem5ldTk2SjFxRkJNVHJEMW1ZQmUwVmpONUI4Vk1KTW94SmczSU9xMXB5a1NVUWd0RmZ6VXZVQU8zMEJD''@;'; put 'put ''NUNCQUdIZHRCTU0xOW5GeUcwUEJBSlVaMVBNc1FRTkZvNVE1VHpTV3BOWHExc2pKVEdyczl6djhBQnRXbXhWN2NYNlNLZzgyRkJVRUhVN0xJVTJvMjBzemVwallyRG52Mk43SHRIUlBZK2c3ekU2REsrUDRIOWxzc21MV2pQcFNxZkRyQ0g4NkkwZ09sRkdqRnhZZ2VZNWdHUjE1NjBxZHRtdE9a''@;'; put 'put ''cEVhbkhGVTNFU2FiZE9NVmxCdHVDa0xNRmltL09pOHVKTXVtcHpaaFNiT3p0TEVtNHE4dEZxSHF1SWV0R2ZvYzhoL2VNRVAvWTVKbVMzZ1RtR0hUdkFuRlZnc0lnZTNBSG04aHhNQWZyb0RqQ3J1YkZXMEwwY2hteUdlVG5YandsOWN5TU16eE1TWGdNWlpBRlRmekRUWjZYeWgybDZjTUpCOHRD''@;'; put 'put ''c05MMW0yUUFDVWJjQWRxWjh4cVBsMWhKejVXeEZObWh0a1lXU0NTUWtWakpIVWpTWkNLd0NjRkd5U2dhSnRMYm5ETDZUTkV2aXQza3F5VjEza2ZPTDBvZnhNZWtqTFBlamsrWHFwRERKbE5iV0NFUWo2aXFBTk11eEJwZlpnRzZ0bUFoYW1kenI2ZEdzZ0UvQ042UTVvUVFQWmZrdE8ydWczUTdB''@;'; put 'put ''bkQyRVJnMm9BZHRBR3lHc3VlbHR0NnFrOVVBYldnazN2R1d6VEdSekM1clhSNDVzMTVESC9Xa2NJWVVhZzdYQWRsNG5WVFU4Qm12QnNtall6SDNibnZjbThjdUxnY0dHNjNvSzlaV2JXZE05Yy9mTTVveWx5VWk0TDlxczhXN2syR2Jqa1UvTWJjeGdRb3ltV0w0UG8vRnFtUS9leVdnS3EyaHpN''@;'; put 'put ''OHd4OVBnT01HY1ZHT0NEYTNlQVdjMzFzNEpPY3BnOGphOWZwRGt6Ykt3SW44LzYrN2IwQTZJQ0oxUXd4NUJuTTh6NnJ3SEd4dVlUNGZOWlA3OEY1dDhCcG9UTmgvZXpzdjdaamZNQmZxcUZiOTluT1FUbE5MdDhvM1d4b0dkbkRBYVZlV0d4d0k5eVN4bXI4WE5Dc3dMUU5jWjhISUU1VEVtckVr''@;'; put 'put ''TUEza3FLb1BEeDEzbnkxOERBcjZaNSt0ZXorSmxjQ2hodVdNVCt0VWQ0SXRpTGkvOEFPR0Q1TFV5bXhHV1pjdThXUExHY0RZYW5oTHkzbjlraWR6YkRITU94SFdET0tqQ3d0MS9kQWVieUhFd0JlbklIbU5YY1dDdm91VTN5aStaTTNZRmZKUTVRQXJvbmRBakg2b0poNEl4d211WnN1dkdIejcw''@;'; put 'put ''N2MrNjI3dHZPZGI3NzNCM24zdDNKUG1mZWZRNnhlalVsUjRWV3VkYWpjN0ovNjhJYVVsZGJYbFppMXRHVWJLUVZSanpzcWFCNml1SHBQRzlReklJcDlMamVsZFZ0T0VFRWcwSjlwT1RpUjRJNjlYRmZwaENZdlQ0UUNkbkRkbFp4b1dSeGg4QTlUS3N5VUpNaWNya3hENDBqWHU2RlhVbnkxZVRC''@;'; put 'put ''KzViU3E1R0dJL01OamNEYVRVY2o5VWZtSkZSWmhrZTdzc0RoT0hPNnY2Sk1laUtUSmNVMzlDM2RmOUJYbVZxSjM5Z0h2TzJ0YkZ5UmZqenR3emRURHBmK01IVGRRTU8wWDdxNW51S2U1V213Zlc2V2FlSFJMZlN5R2VZWSt2RU9NR2NWR0tDRnorNEFzNXJyWndWOWFqT2ZjMXVaamRVdWovWGN4''@;'; put 'put ''bjQyNWU4MFpPcUFPclFhckYzV1lmbjRLMWVFQ1pyTDRuSlkzRVZ1YThoYkpQS3NncVFxMnltWXkzWmFlV1pMdHRPWmx0Vk05MHJMOWQ4YmFHL3ZsOVp5c1N2aUpWOERTVFgvbEJIc2Rob3VxUWZxcUFBZEFFcE1vTWRFK1hSVHZLRERjdGk2VEU1cVhNMEJxbDdQWjR6MmdEZmdyZk96WTYxY2pG''@;'; put 'put ''UlVwcHBTY28xU2lsNmdjZWF4bGlPWnpPSG1nKzAwVzNaM2U4dndjRXQ3Sk5uYjA1anNYU2JtcHVsb2RMcnBXTHBpWDNQVGRHeWU1c25PZEVhaTdaMXhtak1LdU9aNUFxOEFydnRBdnhQVXU0aTJlUzdBSG54QTlmeWlBby9GV1RYOEM3bm5CUVBxNTgvbCtsK1pVRDBYS25Qd3BoczVuOEp6NFVO''@;'; put 'put ''Z0gwWlFFbVZ3TjYvcExTc0RMSHM5WUkwNHNWSGZqSFZHQXlHaWpucDJ1aEc1aUhkSEdCT0Z5YjgyYlBONmZwNlBFd0hDb2xXR3EwaVBkS0pldDF4Z0lFcEdma20yMEdRV3FCYlBKdzNRY1pzdTJjYU1jeTJ5aGRoa1VnbU16T2FHS04rTUZnNi9aUmRnUmxRMU50YlhJOVNZYWV4cWE2bFAxaWRp''@;'; put 'put ''VWNCY25UM2dEd1FEUVV2T3JGRFMzTGRrWVBEemlVMEh2aUJ6T25EdXZQRmxmdnFiT1JuMFh0bTdkRUtWbmpIWHZWQVNXRzNiZkNJc2ZhQTNUTE0yZWxyNDJYQkxJdEV5TjVaUDI0alhSeEtxazJMcERuK2JQK0JvcXFtTnNieUVUcGFYa0VJUFpjcURXS3RwREJHZE5sVktrSzRFQzZpNEVEYTRB''@;'; put 'put ''THhtbld3V0JtaDVBQUZqUVFjY3BXT3N4MHJkZU5MRkFaRENIcXpZZFVFS0MzQTNYUm80NDlzQ3h3cmdqK1RBdFJUM3hoQ3ozaGkzQm5SL291RkdFeVh3RCtiaWxxMkdXM0gzOGE3dHNpY0NkWnNOdHhiRDJPbWVMZGtVbkw5NGZnRGwzeUhPMTh2YlBhZDgvUkhWODRzS1BCWVgxZkRQNWZwWm1X''@;'; put 'put ''SFAxNy9HenV4b1A5L2cvZC9PNFdsUUxLSjZmc3pKNFg4R3o4MnMvMi93L2gva3ozOE16KzJzZnc2L2NpK1BMOUdhcVU3eVRWUUdWdGJlakwySTFRYktscFBEYmpQaW9leGpwZlFZVHduZVd6ZGtsOUpEWHd5YUFKTlY5V053ZDh2THkydkxhd0srVUpEbTJ5c3FXTkcrN2hBMUtVTGNwaUJ5OHFt''@;'; put 'put ''TzI5by9uKzQ1a3gwOTI5dDJyT2RBYjNqZm1mTEpxb2FsL2dNVlBRVnoxY094Z1hsNjlHSDUxTktlVzRaN3o0NE9YZFUxUGpyUjJCc29yZ3luNjNyTDEzNjJsSTJPMWk4T3g4Y2pGRS84VEkvS3kwa3VML2ZtOFQzSzhMZWI0L1gwZHMvcHZqMmdlbjVSZ2NmaUZXcjRGM0xQQy9hcm56K1g2Mzls''@;'; put 'put ''bWN2ZGJuUkVybXUyZ01YY2xnSHRyRlBPekJFTFRTRU5rUDhza0w5MlNRUysxRTR3ajlCVFZBcmFWWWtrNnFscnJqNUdCOGRRWGFPRXJjR2dweVFRS1BrRnJhWDZsdndML2xLb3RDUVlMQ2tOZGMwL3IzeUVPU2xuakc1VWhXcHlOcHNEYkxZd1FMbE5ZSjNwRlpzTm5ncXFwOXZhYkNYYjJXenFB''@;'; put 'put ''N0x0YkRhdjExdmpyUTdhd3JZTk5wdmFaS01XbThadDV3YWJpeHBzWVFFRVp6ZzRjdVBRWkUvWi9oNWZDQmg2b3I5c2Z5OEl1NS9VeEtLN292ODhFZlhDSi96Qi9ZbWhHMGNpVldPaGhTU3djcjEzL0xkeGJQSUFOMzhSMkxrOUtyM2hZZnZHejJqby9zOXh1amlJdG5sTzZlSkRxdWNYRlhnczds''@;'; put 'put ''WERQNWZyWjJVM2Y4N1BIbWcvKytWKzdsYWRxL0tjckEvbnoxVzNUWmZiZXJhNlE3cmN0b2V3MjcrV00rZm9JZXpiUElXMS9zOVBZWVhWcmVseU9kdzhKK01HY0RhSlZER1hsbHhjNWlqNjJCYS9odHMvZCtYc242T0RhTHVZRGphZyszWm9tN09kc0dHU3k4YlM5VDJDRjJ4Zk4vVFNrV2t0d1VC''@;'; put 'put ''OVdJZkppQjVNYnRocXNzTEtmZWk5TTBEUFNsbWRIWTBXRnhlWEZwY0dhT3pHNGFWQkJ5MlBvYVg5WVY0S3hsVitJbTBpZ3RlZmlIZTRDOXB6ZFdIRkZlVWxaUmJwemp2dnFtaE5CTXQ0aVZpRnU5aGp4WjJzVUV6T085MURlb0JuNlUxQ1QzTUdMUE9BNlZXS2llQ0FxZFZIOUlKZUZESFcxOENV''@;'; put 'put ''bVdXMjNXdXQvRnJtNFJyb1dkUVRjVldwWkM4QngxcXY1NUZDdDNxSm5rejlWbGhRM0JhNUFkb0VQNSt4MXRiV3Btb2JRd0U3R0UxaHIxRXN5NkVsdFlQTjVMUXFpQXFwTWxoSkQwVlp5WllrMXBXck9lcCtxeVN6VWdTR3kvbzNKclBTL0ZhR3pZL2xrMXBsdi9odTVndUZaRi9vNTF0OEtwN0xT''@;'; put 'put ''WGwzUU9iZEQ2cmFubFhhWWoxNmJJZTJGK1cyQk92bk9IMnkyalhXTml5M1BiMnR6LzViOGd6QURESVlpOUFCSnJrQllKNFdNQVVDR0RsR0FwVC96bHlPNTdVZ1Qwcmh6V3NYYkJwaTBDdW56U0dxVmpBU3RHZ1pOZ2draTE0djU5RFJVeEYrTVFWUENLTFNwM1pIYUNiRmFSTW0xZDFFRVVNYld4''@;'; put 'put ''UmVzc1VHNER5Y1RpZm44YXFCYVR6UDV2RjRhajAxWVhvaUgvTEx4elgrTFdtZ3lrVWdhSE0yeGJXWkRla1U5OTkvS0NQOVVwMVQwYi8yakNvbjlHT3Q3ZTFyWDkrUVZaR0xvYlhrWW1oSDRmOXQ5aHZzdWJ0eTl0elJjYlJkL0EwYjBYZDJhS3ZZZ2dMQWZKSFh5QUhQOTdFN0ZnWXpmVVdnaUsy''@;'; put 'put ''QU8zNkdUTFA3S2VPSkMwZ1U1WUF5RmZLV0xETWtnREh0V3VYWXplR25WVFpXeW9CS1BhSmY0VE8zekpHcUFzVmh6bFVWVEU1SlR5alZpb3lIbXBtSTRqV0c5S3h5aGVYS2hsQTllbWZHUnIyS0VDWmFzQjJJQVd3Qm1nbGZCdlJSRGVhK1JxdlRMTk5ncmJMajh1MDRMR09HU1ErbXJZSUtLRnMv''@;'; put 'put ''UHJ4ZEM1cW9XaFFPaCt2REVaZlBIbXIwQjFtWVY5eTBJdDJXdEZ2cUd5QTU5ZmJIMmNMY0luVzZnbzBwdU5YZ21VbS9rYjJ1VW5laHNuS2JGYXZ5Y2NFSHcyZDRTdTQyc1ZqOU5ySFl6YjZBWHZZRldLMG1vNUZhV1dkOWVVdGJuazlMYVdTRTY2eFRjbHZwWjdUT2s3Y0YyckdRVXNUdmZ3QjR3''@;'; put 'put ''WThLVVFOcVJmZGtIUFdWUkM4cTVRb0N2UTRFRFhINVVHZWlSeFNDWHJOcXdQbDZYbEhVTG9FYnJkWHkwKzBsZnJydG9aZDZiWVUyWXAzT3l0dWdUUzNBbVk1R2FZUTIyaHB0U1NVdERaYUd1aHEvdDZ6VWFhZVIybUt6WXRyUys2aTROZXYrRTlKMmNXVlZWZGdmTURncnExei8vWlladkpOMXZy''@;'; put 'put ''SzJocEpnVGFYTFZUWDZ0dEo1d1pkNkRZaXhpdkUvajFrZlhmL1VscmoyOXdDbWxQRS85N2VPZm96SHRPTHJlOURyd01NT251ZEFzSVBuZ1NoWGVmQWNJSzR6QTE2WGw1WEx5Q2R3YVZva3FYRHE2NVJVTGVabEhXZFBxdXNjZ1FMeWtHd3IwTnpaZFJqckJYWVc3YVc1NjA0SDBRaGVKakowcW8y''@;'; put 'put ''VlRYTkxqcU5ZMGtKVlJXbXgyMlVwMkRZdjFxNU15SzJlMFNINWpIcVl6cXpDYlQ4YzUxUExuMVd2VmNFc3kyTW1IWDU5N1kveU5JRm1hZm5OVS9rekFKQjN4azF4U0paakNuNndObGZIYTkxU3h6dDQrREJOY29MK1pvQUhQZ1M2MEFlMHpuZ0EveXYzbWVGNUJlT05jZm41cDlselZqdkxkSDlV''@;'; put 'put ''MXYzV0xmd0dISXJyaGZjQXpJUU00MElYT013RkJZYlg0RDZqOUFQOVA4ejBORmJwYWRyUFlRWXpJY09jM3dqRDgvbEpMOUJJQWMzNE5KdU1CbkMxQkQxUnFwRTNGZllXb0FKbnJyQlhURkVpU1R0RkorbVZHbmJ0V3JuMTFzVkZzQUVYYXZDSTlQUGVoZDRmeXZVQ1hwYVhuTTBVbUl5aWptcGdm''@;'; put 'put ''VDR2M1FRZmkrUjZ2bHhhY0w3RXo4TitVdzViNXVlZmRMTDdzekROQzVUSHg5N0pRMk5qaHlieHdScnBKYXdMTDRUeG5QU0RtdHlaeVUzS21Rbmc4UmZiNFJwODlsZGtuNTNhV2Zkeld3bjI3MkcycjNGWnR2SFk2aEE4dHhLckFnODRmU0ZuV3ozTVpIQmNsc0dmMzJHc2k3bjRnUDQ0VXAyVHRP''@;'; put 'put ''VE9TWTZpcDdiWVpkeHZ2aXZuNHg5ZFFOdWQ1K0RDeldjc2N0dXBmUHdCRjE0bTU2R0NzSDRWOXQ2R3l1bTVmZTUyQVQzSlhTOWdvS1hVU3E0WTg5VEs3V1V1QjhzcjVZcTlKSDljbkV1dWNHSnIzZ3pxNDZwOTdma0Q5eDg4ZFA4UzZaSEVZWHAwZWJxUEsvZTVqeTh1M2J1MEtKbnhmdzJjSFJp''@;'; put 'put ''NGt0OUZDSE1XL2gzME8xMVhDNXJLVExxeFhtY2d0QUNaaFFlQWhqUmF2V2JaYkNBNm5SSUtNSWxHUVJVTVNDYjlmb1NTTGNubXBwUS80WS9YMVVCM1huc2dGQWdXd0x3M2hsSHpNbDZsdGpXYmJEcFpoUXRsUEg3YWV6b1lQTk16ek5LYmUwNEhBeWU3RlRVdVhhUEtjOGJYYnFpcjZXeEtkZkhN''@;'; put 'put ''NTQ3R1ZEdlQ1MFNkL0l5dnBKcGQxdXZIMmQ2bVpQcjk0aGE2NERtM2RHK25lV3d1Szl0K1FLZkhHZjJtWkRxOXlPR2xuOUVjWFJtZVBvL21iSWpqakg1VE12M2V2TzFZWnhqOVRuUDZ0Zkd4V08wem0yZVRQTStQYktGOW5xdEw1em5ENTNrRXlYWFRuYXh1dWd2OWQ4WVZqNVdYYVhUNkVxekJ4''@;'; put 'put ''WVZFMEJTQXVhRFpQbGNBek04bDBQa3U3dmRwOGRaVGY5czJ1UUp2M1dyYlhJRzNhclpqcnNBMkRYbXVnRGtZOGRQMEhLL1ZBRjdGSlVMTm9iZFJIazdhcnIxaW02Q3orMzJybHlvWlAzNVN0em4yYkR4MHlSSnllYjlZem5VSFdnZmpDb3U2V0FYUml1WEFrNlcwNEZDOWM2SzhjNUdOT3llS3Vp''@;'; put 'put ''VkVLekJRUGlLMEpjbWpmdFBHdldXanlpMjdEYnZ3RnEzWUVlTjIyN2ExSGQ4MVU2QzJtbTJhSHZ5WlM1MFA0TGZLTE1jdkhoemZMc0VqdmhUZU1kMTgxNHgyYzVhSE5seTVjLzY1aWpmUEtyd0pmTDI0QTI5ZVZIZ1Q2K3M0YjlZQWI5SzdBcXJRRnpNV054YVF5d3pLd0VUdklwUzNGZ0ExN0tT''@;'; put 'put ''R25ueVNHMmlRVDA0ek11Z0pzL08ySE5oRWFCTU5QWWg1TzIweU5adkE1V09iTGEwME5KWUlKaDVNdG9vNjdIU2JxTmZwRlhmWUkrckkwenNPOEQ3NzFuM3dPT205QjV1eTRIcHkxeUN3dlA1T2x0ZmZnTDZXS2E3QmVxSFdTUXg2QnlhR1hGS2ZOa2YvV28zMlZpT0dpV0xEU1ZCY2dHRmFVeWdJ''@;'; put 'put ''bWdVZHJ5emt1WHZJZ3hRczFlZmI2QTNrcHJkcWxLbmRIcDZsQnFJanFtWUN4Uk9WMncyb25oVWJ1QUZUTkxLaDJZR1N0eFlndUNuaDQvZ1cyazIwNTJzU0FtWFZSWnV6Q0p2MW8ybDFtVUtmMnhoZzlNZnVwR0EwbXBacDlJb3ROT29GRzBaZ3R1d3N0MlhKeEJaN2wrY2h0T1R5RUk1dW80ZDRy''@;'; put 'put ''UHl1WEt6ODZBaFM1VEM4bk10ek1LRy8zNUxEd05xeTgyMFdsd2VZbTdmTG93QWI3QlBidG0zUHgvcHg0VzRrMzZleGg5Mm5FYURuTTA0UVJ3V3dyWVZBNHN4Tmx0TlA4bkgxdk5NRUxRS0JZbi9Rd2U4bll0a0VtOElRbTY3ZklQZU0zamF0dCtWaUQ0NGoxOG4zY0pEejdOWU5TNmtjYlBCNTNQ''@;'; put 'put ''ZWNWRi9Ld2VjNkFIT2RBNy9JajI3aVV0cFNySWRORVRFVy9GaUg2WmxORVh2aVo1RnI0RkU4TEFkN3krUktGMXBac2sxOHQwcCtUV082dWVxVGpTRmRZNENXdUlXOW9pckV2YlVTSlptTDRwSTVGa1JTMTZVY3pydXZ3YkxOQlNxS2t3aDd4ZTRLWWZUWXluTmU4TmdXT3VLMUtGUm03bVcwSUtM''@;'; put 'put ''dnFQSmN6aXA1THZEODNWdmE4ck9IaThyWkF4Ym5rYXJ0YWk1SFpnWGRzSVdPMkIwZWpOWTZaRnRyUzU2YlhQOUJhVzJCMjFyeWVTTnZ1NnEwQmQvMzJ6dTBmVTV1UytPQkgxYTFQWnRycTBkbmQyaDdVUmtYNjlzWTNiQzZXdXBQRjlJNEJNMUlwelU3TEE3QkNtRElBV3E5ZXhoUkY2SUNlMEM1''@;'; put 'put ''N2twVkRtdklsOEYrZmt2dEs4MGJQMHd1dnMyN1BOejBMby9Qeks3Mmo0LzFrWXQzN3Q2OWZSKzUraVNDYmdXZU95MVhKOGw5cEpPaXY2dHZiTHgvZFpaYzNMMzdUcm1QRVh3RmVRNzJVYzdHTnhLYWp6OWlBQlU1dEYzK2VBRXlCNFZjTnI0Y2NtSk95Y1BqbFkyT1ZHbHB5dEZZTVZGTFJxb3FV''@;'; put 'put ''ZzZYeTVHcXFHTGpUS0tIV0t3bHhNYTVaRzc2NWt4L0picy9IeW1SYXdsR3NFT29aTFVFemF4WGVtOE96YVpmMVdJQk9IdzJWd1FxdksyS0F2WDk5VGQxZFVVaW5aMFJlb0U2L1NJai9QZElWNEkvY1B0NGp2d2VRTG9iV1ZFcm0wRzBFQlpqb2RReW9tV1ZBT3hXR01EcExKT0VBbjB6d2F1bUFp''@;'; put 'put ''Nk5YRlVnMzhPdUNqTGYwRkhoN3M4RmxoOWhVU0czSEZMbWQ3bVRkbnc3ZVFGRzdtSGpwcDNRczRGVmFUa3dIdEpqWVpBZW1KTlpxazZCZmxlVkt6U0lNTUdNUXhmb1VLMU1ISWlhZk1vVnkvU0dkSzR5L2JqQVYyeDFtK3h1YmJwbzJzaysyOXk2dEdXR2ROcXNCUVVWWHNNNytFLzlEWHcvdXZC''@;'; put 'put ''L3NGb0lFWlh5aWdFdElHZUl1cmFuN2JaY0RZVmI5QWZsb2dpY1BmQ0JRZktLNDVZUE9kN0orSzVYK3RuNmsrdGZBcVlLc0I1SytGM2tHK3UwQXJtK3hJMlhrbC9nZ1UxUFZWVjRuUWN0V1FBekp4OXZVdVFqNnNWMU84akhWeFQ1aUhyUjR3aHQwL1lZZnZvdDJ4N0RYYXEycTdtMks3aC9pM3pr''@;'; put 'put ''YlovTHRWMUJYK2YrN2ZvZ1BjOVFuNFc4K1R0dVA3ejVPOWwraUFCTW1QbkdRekxNMHd5R3FHQjRyUDN5WEQ4RlFBM2J4OXBmeU1YYUM4YlF0am1RdmVpOU8raUdWM0xuMHIwSHVPNXRSUDlHVExqanJlK0JmMVdxd1IxelNodWgvVzIwRWZSdi9sNXAwNDAvZ3k2U3p3TE5sREY2R2RwY0VNZnB4''@;'; put 'put ''YTdFeTNsczlvWDhCZmJrOWcwMzJEUGJCMzhXZlpzOENDdTJBQVppdkxhTnhISzFiVEFtL21zMlpqbTkwYW04RU9oOFF5R1R3SVJhb0RoZ1l6ZEliUnhidStOVXNHNkhhVldwUHZQNTRVZklnMFZoUGo4MnozK0dlZHB5ODZSa29reVlZdkZodkF2V1pObXBMb2pXeGJPNm9FMTE4WSszK256d3I0''@;'; put 'put ''WCtleGcrZWVudlh2akE4ZFFMZFBOT2RCM3NQVGd5Ulg3NC9zK01ocTNBSXdqa1FHVDlkNW96cXIrUDBnWFVPSXQreWZNYzR4YXNMZVIvdmtTUGRXWnNOT21NNmo5NVlpK3dDU2FUc0dRMUZJa2E5VjlLU2IxRlEvWlhUM2hya2JZVzVMK1gwckp0dTIzK1lzcVd0dUNCTkkyT1pqTEtYMDRablIy''@;'; put 'put ''ZDJiMHJrODJNRFBURnVtS2R6VTNiL2hVVngvL2dyNmhVYmZvOW9JS3RhdnFULzhJS0hza3F2NHhFcGZQSzMxdjVLL29oOGFmODRaWDg1NG1HM0I5aHlmOHhGZ3pXZlJLWDRMK2pOK1k4QVFaenJLNEx1d0YzZ2Z0MjMzMzM3amRmdEQ5eHdjRnJXUUd1UW9FVEdGdzQ3UlpyUC9qQjNaLys5T0NG''@;'; put 'put ''Sit3dnZzeDB3Uy9rTzNTamFDSXpXdVloR25ySGdJbFo2UnBRY09CYkx4c3dNV0pzb3JVT3VSb1hNMHRPNVJFUStCNUZEWkc2MmhxckxRak9vTlVlTEtEQnE5eEZRMkh3RkZubVNTclpTZktWbFRSaERKRHM5cktRS2l0dlNkdzZOUGFlRmZmTUlORU03eTladm0xRUxta1p1TmFMSzZXWFlDR3Qw''@;'; put 'put ''dmNyYnNwT3NtdDN1NjhlN0M4dUFDWGVlMWs3SzJnWjYrb3ZLN0hiK2dkbVpabmxKUTU4UGNnNTNST0UxaERZYzdkN1gwL3Y5V2FHREpneUFraGRyOVZMaExVMStwWExYV2lSNzJMUVAxVmlMOUNTMkRaM1BXMjlLNkhsOENYdVN2amozaDJ2U3BCajlpMVV4dU9ZZk9idytWd3N2NFhxTHZaY2Rj''@;'; put 'put ''N0tubC9NUFJldlE5dkJvNVdyMU0vei9mZktmaXAvZmxjTy91Z3g1VDZLUGVSZGdBTXZpZ01PcW4wMkREalk3R01waU1oN1dJSE5LSGtYODdqVWFKRTlybldrUWc5M3Y5UUlrbDJ2ZXpmblByRDVVbiticndQODdVK3AxdkZDRGg4RlIzTTUvT2c4dTNOR29ZT2sxVCttM0I2RGFkNGJ2TmR1ZmE5''@;'; put 'put ''ZG0wRC9ENUQ4RWlJQUFBQUFBUUFBQUFFQUFBOENHK3hmRHp6MUFCOEQ2QUFBQUFEVHdaMkdBQUFBQU5TK3BPdi9RLzdvQkhVRHlRQUFBQWdBQWdBQUFBQUFBSGphWTJCa1lHQSsrZThLQXdQTG92L08veXRZU2htQUlzaUEwUkFBcGZJR3F3QUFBSGphZFpRL2FKTlJGTVhQdlY4R1JSeXNXRkZz''@;'; put 'put ''YXpIV0prU2ExdGhxd2NZMHhWU1RTRnRyZzBJWGNWQVJzYUNwNHVKU3NRNHU0dVJrRUYwczZ1Ulcvd3ppNEs2VE9FbFVXbWdvV0FyMTg5eG5JakdKQ1ljZmVmbmVlL2VlZDc0bnk1Z0VQNUtsV3FrZHlNaHJER2tCUWIySURpK01pRDdFYnF4Z1NDNmhud3JMZmV6WGNTU2tDVWRrQ2pGWmo2UTg4''@;'; put 'put ''eGYwSlhvbGoyYisxNldqMktYVDFDUzZOWTllUFlVK1BjdnhQUHJjODV5ckdZNXhIZktZckdLck44VzlTdGl1ejVIVE9VUjFsYnlHdEo2bml2ejlFV21zSWFPdDJNS2FKblFmQnIzVHlIa2VGZUwvczBnNzN1UHpyRjJ2STZRTEdMRTFBd2ZRcHZQVUUyelVXNnp6Q282ejVoV3lTNzZoUjBmOFh6''@;'; put 'put ''S0J1QjdHWHAxQlZuZXlsaG11TllhSW5FTzczbVR0T1F4akNZZXc1TC9YVHFSUXdyQjNCeWtiWjUwUk40OXpaQlpaS2FGRGJuQmVqbjBtME93Tm9VVWo3RzBjMjNRZGV1UXVPcVVGRjhpd3ZNSkI4OTN0T1kyWTFTZ3ZXRXNiUWp5THVLdnJOb0w0aVFFWmNPTlIrclhIZWRWQWdTYlMvRFB2cW9R''@;'; put 'put ''MS80UDVSeTVTWDczTkNGZThxNVVHa1hFMC82cGwvdEZubmxuV2VkVkEzanhwdll6OUsvcjJqdjZseUNMMVJhL3kvQ3ZlMWNweVlUVC9xbVgrbWM5RzY5ZjJyS1gxYnZ0WGFEbml1VmkvK3FEc3k1amJwekV0YTNiZVpkS3J6NnozRTczckpuM3lxUFhoTXNnY1dBNHRDMzk1QnUweWlIYnoxdnFy''@;'; put 'put ''WThqVkVLa3dzQUhSd0NidXk5eGFkdXJJTEZ1ZTZzaDh1NHhWYU9kakh2Mkg5ZzY0SE5vWm1uL2xkOEh5V0V2THVCU1lQZE5UeFBHZFBFRWxxRGZvMXpESDRDY3JhOWF5enRQeW5ySU1lTVUvOXcxV3FjZUF4aEh6THZNZWFTcmZLWXZrSXZrSUovVXQ3d3JlUzRFQzM4TWtnbFJZNS93ZkxoOGU1''@;'; put 'put ''L0pjRzN5enlQNEdqNWZ3dEFCNDJrWENYVWdhY1FBQWNMdXVNNzh1TXp2UDIzbWZlcDk1bnYvejdrRWlRaUpDSXFJbmllSERpQmd4WXNTSWlJZ3h4aDVHUkVRUEVTSVJzWWM5REFtSkVTRWo5aEFqSWtSaWpKQWhFaElpTVVhSWpOakxZUHgrTnB0dDhaKzg3V09YclNzTFVkQTJWSVRLMEgzM1h2''@;'; put 'put ''ZFpkd09HNERBOERMK0ZEK0ZhejJqUFVrOEpZWkFVVXJSajlobjduSDNWbnJjWGUrSGV1c1B2V0hBVUhBMG43a3c1dDUwbFo4V0Z1SUJyeHJYbU9uRGR1Y1B1ZGZlcHgrdlJQZk9lRGMrSnA0R2lhQko5aWk2aE8rZ3hXa0ZiZmMvN0hyMFQzbXEvM3YvR1ovTmxmWG5mbjRHeGdaY0RGVC9sbi9l''@;'; put 'put ''WEIwY0dsd2ZQTVJpYndoYXhISFllZ0FKYVlDV3dIYmdKTkhFS1g4Q1A4WWRnSWpnYXpBWlhnaCtDRjRSR0pJa05JazhVaURPaVF0d1M3U2VqcEpma3lBUTVUbWJJQlhLTjNDVDN5U2I1R1BLR3VGQWlOQjdLaEpZcG1NSW9pVXBTazFTV3l0RVFqZElFTGRDQUhxSFRUSnBwTVIwV1lYMHN4U3Fz''@;'; put 'put ''eGFiWUtiYkVmbU92MlJyYllqc2N3azF6MTF5TmEzRWRIdUY5L0E2L3p4L3hKZjZLdndrcjRYSzRIcjZQUUJFMHdrUkFKQmxwUkRvQ0l1QkNXSGdsZEVTM2lJdUthSWtwc1NGMkpFUWFscmFrQSttejlGVzZrbXJTYnhtUmNYbENmaWZ2eW9keVFUNlZMK1VmY2xOdUswNEZVK2FVVzZXdHdxcFhK''@;'; put 'put ''VlZOVGFxVGFtWklqL1pHaWFnUUxXcXoyZ3R0WGR2U2N0b243VVM3MEw3SHROaEJyQmo3RWl2SHFyRjdIZEpSbmRHSDlCRTlyYS9xT2Iyay80cVQ4V3g4TDE0SENBQmdERXlEWjJBUnZBWWJJQThLNEF4Y2dwK2crWitCR0l5Uk5tYU5QZVBJcUJvdG81V29KOXFtMjF3MTM1dTdadG1zbW5mbWd3''@;'; put 'put ''VlpxRVZZODlhU3RXNXRXdm0vYW16QVRRQUFBUUFBQVR3QVlnQUtBRDhBQkFBQ0FDZ0FPUUNMQUFBQWtBRkJBQU1BQVhqYWhaTE5Uc0pBRklWUEN4cUloS0F4THJwcVhMaVR2eWdZWEdyY0NHb2tscDBKU0FWaXNkQVdFMS9GTnpEeFFmeDVBamMrZzB1WG5nNjNDQVlsazJhK21YdnV1VE8zQTJB''@;'; put 'put ''Tkg0aEJpeWNCSFBJYnM0Wk5yc2FzSTQxcjRSajJFQWpIVWNTVDhCS01pYzh5YzcrRUV5aHFobkFTaGxZVlhzR09Gbm1tWUdrUHdobXNhNS9DcTBqcGNlRm5iT2daNFJmazlTM2hWeVIwUy9nTmFmMXl6Tzh4R0xxREE3Z1k0QjRlZXVpZ3k1T2JlT1JYUkI0RmxFZ3RSazNxdWtyamsrdWMrOHp5''@;'; put 'put ''bVh1TExHcXdtZWNwSnhlT3FNTGRObmxFN1RtNVEzTFFwSzdBbkx3YSs3akFNUm80SWMxejJaNXhXVnpIL0ZYSjRzcWpxcWRPYWs1Vlhsek40bnhGalV0VjJJRlRPdGhUOVpya004YkRXSlZ6KzU4ZWhYME51S29neDNFMzQrd3EzLzdFTmN1WXkzV1U0MHRXaDlHQXV5UCtrVWlUNHh6VjdLdDcv''@;'; put 'put ''dFRNemIzalgzdlJyUnZrRnQ5eTZCQk1PbGFUL2gycHFNbFJVckV5ejFaZ3ZJSmR2cGpvMVpSeFE1M05DZ1BwdjAxdm45bVJheDFEN3ZRWTh4aHp2Z0hGZllWakFBQUFlTnB0azFkc0hGVVVoci9mc1hmZE5rN3Z2VmZIWHZmRUtTNXJ4N0ZqSnk1eDdNUkp4cnRqWi9GNkY4YTdjV3k2QkFJZVFQ''@;'; put 'put ''RENNK1VKRUwwS0pIaEFvbGZSZXdmUmVhUUg3OXdKWGlUdXczei9HWjN6bnpQMzNpRUxkNTBiWUI3L3MxU2JmcERGRExMSndZZWZYUExJcDRCQ0FzeWtpRm5NWmc1enArcm5zNENGTEdJeFMxaktNcGF6Z3BXc1lqVnJXTXM2MXJPQmpXeGlNMXZZeWphMlU4d09TaWdsU0JubFZGQkpGZFhVc0pO''@;'; put 'put ''ZDFMS2JQZXhsSDNYVTAwQWpJWnBvWmo4dEhLQ1ZOZzdTVGdlSE9Fd25YWFRUd3hGNk9Vb2YvUnpqT0FPYzRDU25zTGlkcTdpYW03bUJPM2lmNjdtV3AvbVlPN21OdTNtZVo3bUhRY0xjU0lRWHNYbU9GM2lWbDNpWlYvaVdJZDdnTlY3blhvYjVoWnQ0bXpkNWk5Tjh6NDljeHdWRUdXR1VHSEZ1''@;'; put 'put ''SWNGRlhJakRHQ21TbkdHYzd6akxKQk5jektWY3dtUGN5dVZjeGhWY3lRLzh4T1BLMGd4bEswYysrZm1MdnprbmxLczg1VXNxVUtFQ21xa2l6ZEpzemVGWGZ0TmN6ZE44TGRCQ0xlSjMzdEZpTGRGU0xkTnlyZUJ6dnRCS3JkSnFyZEZhcmRONmJkQkdiZUkrN3RkbWJkRldiZE4yRld1SFN2aURQ''@;'; put 'put ''L21TcjFTcW9NcFVyZ3BWcWtyVnF0Rk83Vkt0ZG11UDltb2ZUNmhPOVdwUUkxL3pqVUs4eTJkOHdJZDh4S2U4eHlkcVVyUDJxMFVIMUtvMkhWUzdPblJJaDlXcExuV3JSMGZVeXdNOHlDTTh5a004ekRYY3BhTTh3NU04cFQ1K1ZyK082YmdHZEVJbmRVcVdCaFZXUkxhRy9IV2pWdGhKeFAyV29h''@;'; put 'put ''OXUwTEhQMkQ3TGhiOHVNWnlJMnlOK3k5RFhHTGJTU1JHRHhxa0tLK2tQZVJhMllYNG9ra2hhNGJBZFQrYmIvMHAveUxPeVBhdVE4YkJkRkRhSEU2T2psa2t0SE00SS9DMmVlOVJqaStjVE5TeHN6YXdjeVFoOGJWWTRsYlI5TVlNMjB5OW0wRzVleGwwVXRtZDZ4RE05MmsxNjNJVy93NXNoWVJq''@;'; put 'put ''b09KMktEMXRPYWpSbXBaS0JSR2JrNnpRZEhOT2hNN09EazltaDAzUndETHBNMVpnTGZ5b2VMU210REhvczgzV2JwS1NacHNlYkptV1kwK05FNDhNNXFmUXowUE9meVZLWmtiL0gyOEdVWVVGdk9PcUVVNk5ETWZ0c3dYaUc3c3ZRRTlQYTEyOW1uSFNSM3o5OTJwUFRwNTJlT0ZoVzViSXNXT25y''@;'; put 'put ''SFhhc3FXczFidEJySE1aZDVQVkdvclpqajBYSDhzYlBxM1JkYWFpKzJtT054d2FQamI0K1l6VGhJdjAyV0ZJUzlGam1zZHhqaGNkS3cyQlRkaWpsSk55Z29xa2h4eXEyWXNsOHk1M0ZTUGZ1cDJXUk5mM1o2VGhnblIvUUpMcmQwN0xBKzMyTU52dWExbmxXK2pSTWNqSWFpN2pKdWRiWTFCNUZi''@;'; put 'put ''Q2N2WW52cUg3ZGx0eUVBQUFCNDJtUHczc0Z3SWloaUl5TmpYK1FHeHAwY0RCd015UVViR2RpZE5ra3lNbWlCR0p0NU9CZzVJQ3d4TmpDTHcya1hzd01ESXdNbmtNM3B0SXNCeW1abWNObW93dGdSR0xIQm9TTmlJM09LeTBZMUVHOFhSd01ESTR0RFIzSklCRWhKSkJCczV1Tmc1Tkhhd2ZpL2RR''@;'; put 'put ''Tkw3MFltQnBmTnJDbHNEQzR1QVA0Y0pXQUFBQUFBQVZpWTlHd0FBQT09KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo1MDA7Zm9udC1zdHlsZTpub3JtYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hh''@;'; put 'put ''cnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUZhRUFCTUFBQUFBb3VBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmTkg1NWtkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY1lBQUFPZGtEQ2ZwWkhVMVZDQUFB''@;'; put 'put ''SkxBQUFBQ0FBQUFBZ1JIWk1kVTlUTHpJQUFBbE1BQUFBVFFBQUFHQnBFcThKWTIxaGNBQUFDWndBQUFKc0FBQURubmRERDdGamRuUWdBQUFNQ0FBQUFEQUFBQUE4RWhFQjhXWndaMjBBQUF3NEFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FBQUVuUUFBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNmQUFB''@;'; put 'put ''T013QUFHOGtIZDdZbDJobFlXUUFBRXRJQUFBQU5nQUFBRFlMYzRnUmFHaGxZUUFBUzRBQUFBQWhBQUFBSkFlUkJDQm9iWFI0QUFCTHBBQUFBb3dBQUFUYXVZNDBKMnh2WTJFQUFFNHdBQUFDZEFBQUFuclUrN24yYldGNGNBQUFVS1FBQUFBZ0FBQUFJQUtVQTFCdVlXMWxBQUJReEFBQUFZNEFB''@;'; put 'put ''QU42TWdpSVduQnZjM1FBQUZKVUFBQURvUUFBQmlHWEZqMktjSEpsY0FBQVZmZ0FBQUNCQUFBQWpSbFFBaEIzWldKbUFBQldmQUFBQUFZQUFBQUc5bmhZbUFBQUFBRUFBQUFBMUZHMWFnQUFBQURUd1oyR0FBQUFBTlMrcHZWNDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUln''@;'; put 'put ''UkMwVFFDTFI2Y2RGUmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY05iSmJWRlg3T3VmZStYL3NWYWlubFIrZ1lJWVFoYVRvZ1RKUWdHa1k2MHhSVXhsdzFhTGJwbklNaGpESENOdWNLYzJBV0Fwcy9YU1VMUSsxMGtncXNDbmJXa1lZ''@;'; put 'put ''d1J0eENaQkxEb0RBR0ZhcHhNb1F0QnBWM3ozdmVEL3ZXdHRNKzZkUFRjKzk3MzN2T2VlNTM3Z2NCa01jNDFFTG0xTlF0UUJFOFBZaGpPUDRSS056aWJ5Ni9EeFZMdnI1OE1TcVhMRjZ5bUxOQmZ6S2F6a2pZOGJrOGhtTU1KcGpIWVR6cVhFczZHaTJ6VlNYYWdJZ1B5ZUFWZkdLVStRSXFQb0tn''@;'; put 'put ''SnQ1QURwaUo5ZmdRc1l5Q2NodWNKeU9sRXlVWXhKMmRqVHZpWitQRDhURU04Qk9mRzNEa1VML2VMbFQyK3YrdCtKRUJWM2h6d0pHakE0L0Urd1lZZVRZK0hyY24rSmovTUgvL2txRHYyK1BYNG8zeFJ1WjFMRE05Z2RuNkhLR29KaHcrVDNoTUpRSytRRVNZVHVSd0xWR0VHVVF4Y3p1VGxWcEpD''@;'; put 'put ''RmJqWjV5NWpnak0rSHI2ZHhLQ0Z3bkJId2pGUWNMak5jTGpHQkZ3aW9qd0JoSGhEQkhoTEpIRE9TS0g5NGxpVnU5RHJoWVRlU21UTWhSTHVaU1RLNlNDUElxVnpYUHR5VlRKZUQ0emlSRGJkN3BqdFIwNzI3RzNIUWZNSVlwUVF4VGpSaUtQK1VRSmx1TDdYQ0dKSkxKSUlvc2tZQ01lNC94R29o''@;'; put 'put ''aS93aWJPZndLLzVmeG5pQkpzSjNMWVFSVGg5MFFPclVRUm5pZHllSUVvd2k2aUdHMUVNWFlUZVhRUWVld2g4dGhMNVBFblF2Qm5RaXc3RVk0VEpmZ25rZVpGTFM5cWVmR1dsMkI1Q1pZWGIzbnhsaGN2STJRRTgzV2xYRWxPY2hTNGFqVXpOSUUxcm1adHA3S20wNW1aR2N6SVVpekRkN0VjMzhN''@;'; put 'put ''SzFuSTExdUNuZUpCWldNZm90ek9pNTFuSkYxbkJnNnpjTVZic0RWYnFMSGZ5dnAyc01yNjNJamxmK29DZHczMnluSEVQcHI3YXFidU44WC82VWF1TjhPK1pBVWZlSkM3MDgrVDVUenBQY1dmOHIvZ2Y4U005Snk5NzB1SXo4ZFo0NjBmL2RXZWZ0MmVVSnpqUmhKZ21GRjhoSEc0alBHNG5BaFlT''@;'; put 'put ''RVJYeEdPY2thaEJUZzVvYUZDMUVoRzFFWkpVV3E3UllwY1VxTFZaWFJSZmhjSnB3NkNZY1BpQUNMaEdSREpFaHJPdFFHVW9lSnNQSVNVWEZLaW95V2taemZVVVZyaUJLTUlRWVpFb1hVN3FhMGwxQjZWOGlza3IzRmsrVWlTZG5TbmNGcGZkbzNGdFUzcUxLV1ZTWGxaNXFQRlgzUzhUQXVrNmk5''@;'; put 'put ''YVpaTFVTWUtOZFpuRG5UcnpQOWFpSG1STVZhaUR6UnNtYml6eXJhV1JaeU1sbXU1ZHVUVDY4YVJqaWY5YnFOY1Mxa0pJMk1wQW1QTTVvbjhDU2VRak1qZW9hUmJPTnBiT051TzdqTHZkeGRGMnZReloxZDRnNkc4bTBqK0piUlhIR002VmxSYWgybFBQNEo3WExNdy9XMHhPenIyWWs2b3pIa2s4''@;'; put 'put ''ei9IbGtyNitWaGFaTE4waXhiWllmc2twZGxqK3lYQTNKSWpzZ0pPUzF2eTd2eW5seFNyM2t0MCtGYXFlTjBvbGJyTkoyaE4yaU4xdWw4cmRjNzlXNWRwTXQwcGQ2dmEvUWgzYUNQNmliZG9rOXJpN1pxbSs3V3ZmcUt2cXF2YTZlZTFHNTlSeS9vUlFjWHVVR3UzSTEwWTl4NE44bE5kbGU3bVc2''@;'; put 'put ''MnU5SE5jd3ZjN2U1cjdoNzNIYmZjclhJUHVBZmR6OTB2WEtQN3RYdlMvYzV0Y3krNGwxeUgyK2YrNnY3bURydmpyc3U5NWY3dC91cys4T3FMZkttdjhLUDhXRC9CVi9tcC9oby95OC94dGY1bWY2dGY2TC9oNy9YMytSWCtoNzdCci9Yci9jTyt5Vy8yelg2cjMrRjMrWmY5SHIvZkgvQ0gvQkYv''@;'; put 'put ''d3AvMmIvdDMvWHYrVXZBaEg4ckM4RkFaeG9XSm9UcE1DelBDRGFFbTFJWDVvVDdjR2U0T2k4S3lzRExjSDlhRWg4S0c4R2pZRkxhRXAwTkxhQTF0WVhmWUcxNEpyNGJYUTJjNEdickRPK0ZDdUJnaGlxSkJQQjJyZER1NXdYaTJjYTF4VThKWVo5eHFualhHalJtK3hYaUs4U3hqVzQxMVN1ejZ6''@;'; put 'put ''R3FUbEorcGNwVnh0ZkhjaExIYWVLZTJreHZNZjEwUDQ1VHh4Y3hUemNaVnhxWEd0N2hGNUJialZmMnpuc3ZFV0d2K1BvdzdqTnVOMS9XdzNKWEdidllTNC8zR2pYMDV6Y0FBTzZrM25xUWRuOFQ2eTE2NTZ1aVA4VlhqbmNhcmU1aDUrelQ4ZjFabWJudDRWV2JQdmV4TVRSdk1mNVg1cy9ac3kr''@;'; put 'put ''RnZ6TDRyay9uMExiMXNHMDNybS9VM21UMDN0VzFPcXBtME9tblVxVDRMZHNHZnpHazFlNmRiZVZtOUJZMTFtbjAwc1FzMVRYT1NhanZOVE5iZm1MRVBtZDFnTlRwcU9qL1ZvMEJxdGVQeWlVQmYveFN6TDZhMnpVbFZuZlduSjJoV1JqUFZtY3luOWc2ekYyV3FZSG5UU3ZNM216OVZXbFhHVHJO''@;'; put 'put ''YW1zbDhYL3U4MlQreTZHNHkrKzltWjFldWpiY2xLOGZQZmF4UzJUZk9MWnp1amsvQnZXY3FQbXYzVXZEZU5aRlpTVzZubmwyN2lsMHd1V0ZIbU1LYldBN1RjQTE3V05LNVM5bTNyMk5QVHpyM0VMdWpsbHZuSHNydlZiWHNRM1hFTU56RVBqZWNuZTVXZnZlcEp5cXRsMytHWGU4T2RxMmx2THVO''@;'; put 'put ''dGR2YmRIYjB6Vnh2Q3p2ZlhPdDlYMmIzYTJlSC9DTU80RnU4MFozRkQreFcyWVR6RXZBNE8vRm90RmhQYmVOK1JhNnc3MllSSkY1aEttekFQZVMxN0hZbEdNbDNqV2RFazNFMWR6MmJ1NXlIQlJ3OWFOcnRNajV0YkdjR1J6SjgxUGpIeHM4Wm43Q3NqVE83QkYva2UrN0Z0eVVuUlZJc2VTbVJ3''@;'; put 'put ''VkxhZDBmL0EzSUZvYmNBQVFBQUFBb0FIQUFlQUFGRVJreFVBQWdBQkFBQUFBRC8vd0FBQUFBQUFIamFZMkJtOG1XS1lHQmxZR0hxQXRJTURONFFtakdPUVlUUkRNaG5ZR2VBQXlRbUEwT29kN2dmZ3dPRGd1b2ZadW4veGd3TXpPY1lEUlVZR0NhRDVKaFltZFlES1FVR0pnQzhpUW9yQUFBQWVO''@;'; put 'put ''cTFrMWxRamxFY3huLy90MzBSS2hUMTl2WnAwMGFpRkVYMnBjaStsS3pac3EvWkd1c1FRMFZTeUo0a294a1RVMU8yRys2NE5XT012cytWVys0TUhjZFhURFBNdUhKbTNuUGVjODZjNTV4NW50OGZjS0hyQzBGMGoxVHFtVGpucmxLc3h5V013NDJCbEhDTE91N1NTQlBOdE5BbUhoSWdneVJNQmt1''@;'; put 'put ''Y0pFbXFwRXVtVEpVY3laTkNLWklTSTlWNFpieDNpVEtQbTYzbUUvT0w1VzRGV3NGV3FHV3pvcXhoVnJwMTMrWWYrVTBwZllmRmpSN2FqMm5qbWZoS2Z6SEZKckdTS0NtU0pobVNKZG1TS3dXeVFUWnI3WmZHVzYxOXlHd3gyODNQbG1FRldFRldpRk43cUpYMlMxdDlWQy9VYy9WVXRhdFc5VWcx''@;'; put 'put ''cTRlcVNUV3FCbFd2NnRRMVZhdHFWTFdxVXBXcVFwV3BNNnBVbmVoODA1blZtZlQ5azZQY1VlRElkOFRZQjlyOTdENTJMN3ViM2VqNDJ2RzU0L0NIa0hmSlhWNzlwK1p1ZUR1VDRJOWJCS1A3ei9pSFJ0ZEpGMXgxZHU1NDRJa1gzdmpnU3kvODZFMGYrdUpQQUlIMG96OERDQ0pZWnp4SXB4NktT''@;'; put 'put ''WmhPSkJ3Ymc0a2draWlpaVdFSXNjUVJUd0tKREdVWVNRd25tUkdNSklWVVJwRkdPcU1aUXdhWmpOWE1aREdlQ1V4a0VwT1p3bFNtTVowWlpKUERUR2FSeTJ6bU1KZDV6R2NCQzFuRVlrMWFIdmtzcFlCbExHZUZmdjhPZHJLYllnNXhuTk9VVTBZRjV6bEhKVlZVYzVFYUxuR0Z5OVJ5bGV2YzFC''@;'; put 'put ''VDlaUFEyRFpxbGU1cW1uMjBWcTdVZDBXemdiTGMzNjFtaisxMmMrTzFXNFY4Y3ZFQTltMW5aWTJVdG15UkdqMXZZempIc09DUmM4eGtwVWJvQ0lyaWpkeDZnYVpZRVhRL3gzV2VLbkdIRXNvMjliR1VmZXpqQVFWMUwrem5DVWIxMW1GSk9jWkxYdXBwNnNVNjh4RnQ4MkNoK21uL1BINUROcXVo''@;'; put 'put ''NDJtTmd3QUxLZ1RDRElZTnBQUU1EMDI0bVZnYUcveUhNMHYrTm1YYi8vOEowajBudy81Zi9maUErQU9ZTERncDQycTFXYVhmVFJoU1Z2R1VqRzFsb1VVdkhUSnltMGNpa0ZJSUJBMEdLN1VLNk9Gc3JRV21sT0VuM0JiclJmVi93cjNseTJuUG9OMzVhN3h2WkpvR0VudmJVSC9UdXpMc3piNXQ1''@;'; put 'put ''WXpLVUlHUGRyd1JDTE4wMWhwYVhLTGQ2emFkVEZzMEU0YlpvcnZ1VUtrUi85UnE5UnFNaE42eDhub3lBREU4dXRnelQ4RUxYSVZPUkNMY2RTaW14S2VoZW5UTFQxMW96WnI5WGFWUW9WL0h6bEM0RUs5Zjl2TXhiVFY5UXZZNnBoY0FTVkdKVUNnSVJKK3hvazJZdzFSNEptbVA5SERQdjFYMEJi''@;'; put 'put ''NXFSb1A2NkgySkdzSzZmMFR5aitkQUtneUN3eUxTRFFKSlI5N2VDd0tHMEV0Z25VNGpnV2Rhcis1U1ZMdVdraXpnQ01rT0hNa3JDTDdFWlp6ZGN3UnIyMkVvODRDOUlsUWFsWi9OUWVxSXBtakFRejJVTENITFpEK3RXdEJMNE1zZ0hnaFpXZmVnc0RxMXQzNkdzb2g3UGJobXBKRk01REtVcmtY''@;'; put 'put ''SHBScFRhMkNhekFRT1VuWFdvUndsMmRjQnIzTTBZRzRKM29JVXdZRXE0cUYzdFZhMmVBY09ydUxQNWJ1NzcxTjVhOUNlN21EWmM4QkIzS0NwTkdYRmRkTDRNaTNOS3dvS1RIUzlSSFJrdEppWUdEbGhPVTFobFdQZEQyNzNva05JQnRRYjYweWkySmZQQmJONmhRUlduVWhYYWpCWWRHbElnQ2tH''@;'; put 'put ''SHZLdThIRUM2QVEzeWFBV2pRWXdjR3NZMkl6b2xBaGxvd0M0TmVhRm9ob0tHa0RTSFJ0VFNtaDluTmhlREtScmNrcmNkR2xWTHkvN1NhakpwNVRFL3B1Y1BxOWdZOXRiOWVIZ1lCWXhjR3JiNXpPSWt1L0VoL2d6aVErWWtLcEV1MVAyWWs0ZG8zU2JxeTJabjh4TExPdGhLOUx3RVY0Rm5Ba1JT''@;'; put 'put ''Zy84MXpPNHQxUUVGakExalRDSmJIaGtYVzZacDZscU5LU00yVXBVMW40YWxLeW8wZ01QWEQ4T2hLMEtZLzNOMDFEU0dETmR0aHZIaG5FMTNiT3M0MGpTTzJNWnNoeVpVYkxLY1JKNVpIbEZ4bXVWaktzNndmRnpGV1paSFZaeGphYW00aCtVVEt1NWwrYVNLKzFnK28yUW43NVFMa1dFcGltVGU0''@;'; put 'put ''QXZpME93dTVXUlhlVE5SMnJ1VTAxM2xyVVI1VEJrMGFQK0grSjVDZk1mZ2wwQjhMUE9JaitWeHhNZFNJajZXVTRpUFpRSHhzWnhHZkN5ZlJud3NaeEFmUzZWRVdSOVRSOEhzYUNnOGRzSFRwY1RWVTN4V2k0b2NteHpjd2hPNEFEVnhRQlZsVkpMY0VSL0pzRGo2dVc1cHpVazZNUnRuelltS2ow''@;'; put 'put ''YkdBVDY3T3pNUHEwOHFjVnI3K3h4NFp1VmhJN2lkK3hybmVXUHlENE4vaXhkbEtUNXBUbkJ3cDVBQWVMeS93N2dWVWNtaDA2cDRwT3pRL0Q5UmNZSWJvSjlCVFl6SmdpaUtHdDk4NVBKS3MxbVROYlFLSDA4RU9pdmF3YnhwVG93anBTVzBxRWthQVMyRHJsblFOT3J6N0sxbVVRcFJibUsvczNz''@;'; put 'put ''cG9wanNSUm5NZ0NrbzVLYXhzT3p2cEVSYVdEdXA2ZlRSd09WRzJvdWVMRFZiVm5HRnZRZnZZOGpOTEhrM1VsNjRLU250Ulp0UXA3eklBZzY1a1QyNEpvSmJhTyt5aW1KS1dLZ2lQZ2h0QmZ2dFkwUW1MVE9ETG9FaVpIR3lzZy90aWgwNW9vSjJBdDk2MGlydjIwTHR6M1h5SURDYm5XN25RWmFS''@;'; put 'put ''b3ZOZEZmVnFmVlhXMkNoWHI5eE5Id2ZUenJDeDVoZEZHVTh1ZTkrZUZPeFhwd1M1QWtaWGRyL3VTZkgyTzlidFNraysyeGQyZWVKMVNoWHlYNEFIUSs2VTl5SWFSWkd6V0tVUno2OWJlREpGT1NqR1JYTWNGL1RTSHUyS1ZkK2pYZGgzN2FOV1hGWlVzaDlsMEZWMDFtN0NOejVmQ09wQUtncGFw''@;'; put 'put ''Q0pXZURwa1BwdWRtdkN4bExnc1JkeXpaTmRGOUIwOElSM2l2empFdGYvcjNISVUzS0xLRWwxbzF3bkpCMjBmSytpdEpidVRoeXBHWisyOGJHZWlIVWszNkJxQ25rZ3VPUDVlNEM2UEZla1U3dlB6Qjh4ZndYYm0rQmlkQnI2cTZBekVFdWV0Z2dTTEt0N1NUcVplVUh5RWFRbndSZFZDc3dKNENj''@;'; put 'put ''Qms4TEpxbVhxbURxQm5scGxUQVZoaERvTlY1akJZWXc2RGRiV0RybmNaNkJVZ1U2TlgxWTZaelBsQXlWekFQSlBSTmVacGRKMTVHcjNHUEkxdXNFMFA0SFcyeWVBTnRza2daSnNNSXVaVUFUYVl3NkRCSEFhYnpHR3dwZjF5Z2JhMVg0emUxSDR4ZWt2N3hlaHQ3UmVqZDdSZmpON1ZmakY2VC92''@;'; put 'put ''RjZIM2srRnkzZ0Ivb0VWMEUvRENCbHdBLzRxVHIwUUpHTi9HTXRqbTNFc2ljanpYSGJITSt3ZUx6M1YwLzFTTzk0ck1FOG9yUEU4ajAyOWluVGZnaWdVejRNb0ZNK0FyY2NuZS9yL1ZJMDc5SklOTy9UU0RUdjhQS051SDdCRExoaHdReTRVZHdMM1QzKzBtUE5QM25CREw5bHdReS9WZXNiQk4r''@;'; put 'put ''U3lBVGZrOGdFKzZvbmI1TXF2Tm4xYldwZDR2U1UvWGJuWGZZK1J0bE03b3NBQUFBQVFBQi8vOEFEM2phdFgwSmRGekZsV2hWdmU3M2VsT3I5NWJVMmxxOVNkMnQxdEpxdGZaK1dtenRxMjFrMlJheXNDM0oyR0JiWnJPeE1lQ1FCUUloSk01a2c0U1FZekloWUpaQUlDUXpXU1loem9KL2Z1WVBK''@;'; put 'put ''d21UU2VDZkpIK3lURDRoazhtQW52NnRxdmRhcmMwNDg4L1lVcXY3dlZ2MXF1NStiOTJxUmlZMHZaekVIeGQ4U0VENXlJMEtVUUJWb1JScVJ1Mm9EeFhLbnE2T3RwWjBZeklhQ1pZVkZYanNOcU9PSUZOdFRPKzMreVYzMGgxd0oxT0JWRElsc2I4U3ZOV3UwbXYwTDcwRFYxTGFleFdHTlVnblUv''@;'; put 'put ''amp5amR4K3h1ZFhlZTd1czZmNzZydys3dTZ1dlozK2U4NnY3L0N2OTkvL3Z4NS8vNzlkMjNkZW41dWEva1BoRjkzKzBOKytMbGpvV0xyMXVBc3ZOdnFiK3VxMkgreXlWc3pkdXpZNDhlT2pkWE0rMnY4OElNUVFWdVgzMFN2a3d0c2JpRzVBbUdNcGhGQzFrRkVpRENqdzRMZ0ZZWjBPbDIremhx''@;'; put 'put ''eTIvU1NOK1pNQ2dGUE9OWFFtS3ozdUYxaVlQUytrdTJHUktLaUxGRmRUaTRvOWIrcjhaY2xFbVgrR29TV2wxRW5Qb2NmSmhkc0ZjaUVrRTJBMTFjUmZXNEZ2TndPei9XaE10UXZiODBYQ2RJTEJCT0VENWl4MFdnZHROcnlCRWt5VEZ0TXhHQ3dEK293SWZsa0NLR3kwcEppYU9Vcktpend3dk9k''@;'; put 'put ''OXV3L3FTU0dwYVFVa0FKcDlwdE9zdCtreEg0bGVwT1ErRUh2UW5RNmVpWjZkWFMvWjM5OHpqTVA3ODdBbFhuUHQ4N0V6K0RISDk4RkNEMi82L0ZkbjROL3V4NUhnSm15NWVkSUwva3pLa0ZCRkVNSk9SYUwrc3VMQ3IwZWw5MXNNa2hXUlBDQUhpUGNEL1BDQk0vQ0JMMW9xTlJ1RndCZFFSR0lu''@;'; put 'put ''QXBIMGg1dktvRUJiV21ndGNjcmhTUHVVdXhHY05XSzNZN0dWQU5jSUwwbkR1MSs5NzYrZ2NuNStjVTl1Mis0dXFkbjROaHg1Vmc0R295LzJsalRkR1JSa3J0dHU2ZTZuZC8wN1pnWVh6UzNkMWpHOTdUYXZsSzA4eXJzRE9hZk45YVVLa2ZySy93UjI5TklqNnFXLzEyd2ttZUJzazdBY2cxcVJk''@;'; put 'put ''OGRmTEpnYktjY00yTzlDV05SaitlUmlBeEcwYkNBZERvMFF6Q2xmQjdnWDVpeFNFUVE4b1VoMytDVEVXaFNjOWttQ0VCWk8ybkdnaVhKS3czNTVPUUdMUWdCV05vTWJkeHFha29PMTlhV2w3dGNDTlcyMXJZME5wVFhsQ2NxdzY0eVYybFJnZE5odDhGa3JHR3I1STQ1S0RJN2NMSWVzT2l5NGdC''@;'; put 'put ''TzRnQkRZNkJDZExzOFNiVG1mZ2RldWZlcG9XaDB1TFp1T0JvYnFzUHYzNk9FOWl3bUVvRmdkU0tBNTRaaWNMRnVpTjRLSm1vQ0FYcHhLakZhV3plV1NJekJhelcrYW1rY2Z6WWRpemVscTJOcFpTSXhXbGM3VmxQRElBYlQ4VmdUdllVbzMvaVgvMGplUmI2RXlsRWNOYUlPdWJVMkVTNHJLUzRx''@;'; put 'put ''TUJrRlVnNjhMcEFCeXRkNEJzVE9NNmdIWVdPWUFlYXBydmI3cXh1clUvNjRQeGF2RUNWUFRCOFJBeFdjZ1hKbkJyZThqV212S0hrUm5acVhUOU9SRGtlQXJXQ3FwSGhrYXJGenZxVnZ0TGlnYnJLaFlYdk4wTGI2dnFxUzZickU5Y29uRXA3Q3RwcG9tU2t6MlJPTDlkVGxqWS9WVHJWM1R3Y3JP''@;'; put 'put ''OE9Ka1VUMWNFM3pZTGgxcUgwZ3ZrOCtUbHJpZ2NMYTBvSjRvS0o2NlMrcDNXTUZ6Y0c2Rm9Rd2xYSDBMWkJsQzNMS05xcEJHSG54a0R0SVlPQ09GVjBoQmE1eVIzeStDUEE3ZnZWdzBGZFo2UXNlN2tXMGo4YmxxL0FZK1FyS1ErSXplWHBjRzJNcUp1MWxzL0JLbjF0Y1BKZ1pIeDRleit6Nitk''@;'; put 'put ''bXovekxldGUzQ2tTTlBiT3RtYmNQUVZ0YmFTdENXWXlHUzVnZ0tUd3dQVDJRT1FnL3oyNTQ0Y3VUQ3RxNHg2T1BuWTZ4dEF1L0grOGpmb1htVWxodG1obnFhcWdDWE1JY0JBV01kUmlEVzh5TFc2OGtNOEs1SEQvb0hJT2VtSnVXT3VwcUFQeVpSUm9TQnBodlRvZ1QvQXhYaENQL1lDQlRnN3lt''@;'; put 'put ''bHZCNXZLZmF5enhvcVJLa1JicVhwUnkrN1lNVVNKU2FGZEx2Z1U2QUNPa2pnQ0w4Z0JsNTBtVVdTVnhCdzZZMUdtMDV2TFlpV1c2MmwxVjZyWG1jM2lBWnZoV1EzRTlIc3lyTzZURmdVN0M0aDRPQ2dCc2xlclM5d3V3cHFYWkloQjFvUXNRbEVZNy9ENGt1VTVoczlmclBPYURTWUhJYThQSk1v''@;'; put 'put ''bXZLc0JvZFpNcGgwMW5MUlpzZ3ZUZmdzRG9mRlZhc3JkT2M1aERJVEJUWWE4bldtZkNJYWphTE5vck1hRENZTjNsMm9xM1ZaSEJUSEhXaVdGSkkyWkVaaE9ZQjBBdGJ0QUY0SHpZRUZkQURVQVo1R2dPdGhwc1J0b2xRVXd3RnFEVlBVS2laSjRaZXUreEw4NEtJWFhsajQ4cGRwZjVubFJmUUw5''@;'; put 'put ''RUZrUlY0WnhvOTZOWjREd1FrNktNK0JTRlRrNEhvOFlTbXJUcFNIRTlYSmF4TzFOZVhsaWZiYXl1Mk50Szg2OU0rNEEvZUJ0QmJJYmtRNzJrSDVBa2FFWUVRMjJwblQ3L2JYNFR6bGo3anZFT09aZHJDWlA0SG5tNm4xcDFkQUMyTHN4WlE3ek1nVUZJQXJjaTNrSWRVNldyS1dFUy8vWnZrNS9C''@;'; put 'put ''M3lLM2l1WGJiU1RzL0NzMi9nRDZTcURHODVxNXcvUzM3MTlpWEU3R1hkOHB2a0h2SWlxTDh5RkplcmdCdlpqTG5Xd0dDbzJRQnNOakN5WmJiU0FnL1RrMkI2WXJxMWVwQ2tHaExBWEZTd1N1RkpocnVIaCsrZW5IemYwTkQ3SnV0SDQvSFIrdnF4ZUh5czNyTDdNL1B6RCsvZS9mRDgvR2QyTDNa''@;'; put 'put ''Y3YzWHI5ZTN0OUxXRDRZQVNOZzB5THlLZlhBQ2tGQUJmQTF5clk1eVBoK3hPaGpvcGtrN2FBeS9lbFB6Ni9sT2tiSERuMmFWeHhOckhZVkpobUU4Qmlzb1Jzd21tQTl4QXlBQkRKMU9IMUFHWlJzd0cyYjNCc0U0cWlHV3dwc1dsU0tPcS8vSXhrS2Q2U1c3Y1VwdmNWamsrOTJEUGRabit5ZnR4''@;'; put 'put ''V3BIbXZwdmNIcXRwcWFzZGZIZmpOUjFiYnU2K1laRTl1eFJ3R1lWblY2R00zRlpZQU0rcHdKakEwMkVJQTlTR2cwRS9BRS9XelFCendrQVEwczlRSmVCbDhsK0ZLb05CZnpBa1NZVkFaYXBra3ZYTTdraXBwS2R4N2ZBa0ZlMy9lSGQ4S0xRMzNkNDMyRDg4M05IWDExUTNIaHJZKzhtKzY5djdX''@;'; put 'put ''dHEzeXpjTVdUS3BpYXBFVTNXaUJoL0dkZkZvS2w0MWRLSjJSMlBiaE4yNnZiTjFkd1BuZzFKNDJRbDRONEcycTVhakZ2QTM4SUNvaHpsZ0JIN25IS0NPbWRoODNaRFpiTTR6NTRGTU9XeDByQ0YvQkNmdDFQTU1GR0lCbjFZZXQrQ3Q1MlptVHYzazNDeCtRUmsvZEE1SUdGRit6T2tUQXh3MXdI''@;'; put 'put ''T0tLWTRjb0F2ekxFU0F6ckVlQVk1MEFLRUR1eTRJWkpvYjlkVTRBZyt0d3U0TUJoaU93UFZSTVZRaFJhZ3dTWTFaYnJ6L3dNRFUzbzdCb2ZhUmpoMG0vTHp5VlJIZUxiUjMzVEppdVhacWNrdERTcTRONHVzV240b21yK25lZW0wTHgwRXRqRzBBNk9kREVkUW5iN0VCRHV6QVBBVllKNFN3WHFj''@;'; put 'put ''YkVFR3g2UFNDYmg1bGphc0VZOU4wUkhFeGpEQlNIQTc0b1l1aVlDaHNBRDhOcVNPaWVvT3BiSWxMaVFRZkhGbTI4eVR4SXdjN3VtN3N2L2ZlNFh0Mkh0L1ZIdWlPMVE0bGRPVlhOeGc3L0tNdGRZUDVCVGZpTHpYczYrbysxUGFWVHg1OGRHWjRwcXlzZWFFN1ZLVThXdEZjbnU1TXhqOU04WnVF''@;'; put 'put ''aVFTWS9KVEp4V0JvTUpNZXFuY3c4NzNCMXdWdmh6cVEySi95dTBFaFBLQThqUCtnL085N1NmdmkxVXNYcUg4UkJUeDBxbmhJb1I2NTB5VVMwSzREVXM3MFZTMWhnT2xqSUJEVEVwV1ZGQU9WcWNxR21tcUtoNHB5aW9lNGthcXRqVHdNRlRNNTNwV1h2Z2ZiWkNYVXgvalhrMXVITTgyZFd4YTd1''@;'; put 'put ''by8zZERYSlE3MG5CK3RHK2hzYiswWnEyOGRqWFJDd3hNYmJMVFZUclcxVDNvTFJwdWJ0OGVydFRjMmozZ0s0c3JNR1A5UVlyVXczVnNVYUJPVlNVN3kwcG9pUW9wcFM2a1FSVkE5ekhGcWhkU25RRitpdE40TEFHZ0JyT3Bpc0hzUlZUK2FCNlFXWW9TQjRCblBzZ1VacmZ4bWRZeWdZWXJUMmNG''@;'; put 'put ''Sno0UVVyVEQrb2MzYUE1ZWJhRVdqOTkrdW9MRFBxTjFNeVYxS0NreGRYVTVsVFhua0V5TXpJVGVmQTdBV3hnRzN3VXQxTmRUVWJYaUVQc3ZROHlMSllFTEo0TFI2SGpSa1JVWFV0TkNOQ05qQW9GZXBmZkVTekxNcGQyanVJdlppZEpCYUl2ZklSc2t2SURvaTZGUm1md3ZoNWZPdVR5Umpsd3pU''@;'; put 'put ''YVRrU3lHL2hRZkVZazREczVVeUYzSG5hbjhTWGxiL0JCSEpuOTBkeUREODR6dWV0QWo1RkMvQ2ZnUEFsMURENVpCbUdCQTFFdlZwalY0a1k3QnMrL2dISXlqZVFRaEJCa2g2cklpVEE4OVJ5MThGU1RVelZBLzNmZ255b2g5dnVuaFpNTE1KNCtHSTlYRzQ4QTQwbFg0NVRlcmUvREIyRThsNVM2''@;'; put 'put ''Rng5OGNPNUhzeitpNDNFdXY0bGZBZDV3SXo5cWwxczBubkFDK3d0VW1nUWRFZzdBeUxqelJyVmlWa2Q1UEI2L3B6emtEUWFaYm5TcUFpNUZWcmpldlNyS2ZXSm9iMGY5Y0dkLzlRMjluZnZUOCtQSHZCcnU3OVkxVjRZYit3YVNyZlU3Rzd1dmMrejVQeXNCTUVIeDVmY0xXOGdqU0VZajZKTHM5''@;'; put 'put ''cGVYQ1FhaEd4c05EcXd6dHJjUkVWaVlSMWpWRVBmcXNIRVMxRGhFVFZTN2lpYnFFdTVEcXVZQ3ZXQXdDRE9nZE8wR0dwWlYwVWdPaUdFd0NvYjVkMnlzQjhMVVVUVXRJUDM4NXEwa1NaeEVvaWpOc09hakVKQVZkQUlUZDQ1MER2ZHRoVmxrd3VGWUtCZ09XeVRmT3RlaWdnWWRXUVhxOGRLd2hB''@;'; put 'put ''dFNQY1Z2anRkUnp6eDcwQ2daM0xBaWJaMFg1aGEvZG5UK0MvdWJkOVhWdGx1S1J4S0QwNTBIVzJxNm5aWjVhNTdaV3U0cmJxaVkrc1QwM0JmbTlqdzQwM1lnNVdvKzF1M3ZGM0VpRnBIRERkRWJEbnhoN3NqWGp1MTllSHI4V0ZNc0VvN3RHK3MrM2wzbGJ6UDBkVFNPMm9yTEtyZTM3L2pBOXJr''@;'; put 'put ''bkR1ejV4SjZTOHBLZ0gzc25NclpZZmF5M3FycVIyeFludkx3S2Vsa0NDeHVUSzQxWXg0SjdIWEMwRHF3cnRYVVFHVkFQeDhDY1hlNnlGb0IxbFZnSUdqRmpVcXA4c2VFZVhBWS9kOCtlT0hIcUZMbXdOUDVyN0ZmK0JkQU9VUWQ1SC9TZkQ1NFA0MXJRWC9BRUVlUkZyeU42Nm5hb0NSZ0pjOCtZ''@;'; put 'put ''UHF1bzBHNHJMeTMwRi9tOWJsdUJ2U0JXYm1DT0tjTzhwcC85bUZuWkdIWTd0VGRqZUx4MVQ4TnNXMWZUL296eUdaeE10TFltdm5ReDJkbVp2RWd1eEVmcjlqZVU3RzVxM0ZHTFAxSVhDdGM5cnZ4VE9oWkwvd1BWQzlXZ2R6OEdzbFdDR3VRNkNPTlJvUmxzYVJHWVdSQXRWWDk1VmlXSjRFSUpL''@;'; put 'put ''ZzZId2pSSmxHVU5qMlpIYyttT0c4L3YyM2QrNzhDN2sxUGxVM1VkaDJYNWNFZmRsSDluL1hzR0xMT2ZuWmw1WkxhMVlWc28xblZFN2p6U0ZRMVBwRm9aYlNqdXZzVjhIemVMSkxLb1lrRzBpaXFMMmVVd3V5M3VjTG1lb2toanpoZ09xVXdZdy9heE40NCt1Vy9mazBmZlFNdDlSek9abzMxM2tn''@;'; put 'put ''czdQN2x2MzRNN2o3VWU3TzVlYUZXU0ZBY1FtWUx0dVFEcXVFYU9henFOS2hEZE5PZ1NhNjZIeWp4L00wOURVWDNpVnZXYjNlLytCN3hQZVJDL2Qra3RvaWZ0NXhlZldTUVhGcm1QcGZWdlJGVnlXT3NmZUUzSGV0WGNBTGhoUkViYU0rVXoxck05b1BWN21uYjZ4S0x5T3UrVTArMXZnVzUrMUNv''@;'; put 'put ''MzJZQmNkdkROeTdBT21BdzZwbHBScjBPTXpWYTBJbk9Sd0M5d0F2RUNQQUR6MjNOTTRub2lwZ0w0WFRoVWQyNXc5dEY5K3g2ZEhmcHczVlQ1Z1dUbU9sbStMaE1aSzM4TW4xVCtOZG5PU2RtV3pKS3l5SHRhbS9kSEdWNGpjbEQxSlErQUQwdm5UUE5KK1dndFBqR2RNZndtNFpWODlMVHl0NmRQ''@;'; put 'put ''NDBrcVZqaWsvSlJjVUg2TkM2Q1hmbWoxTFpiTHBIbUluRmlFaDNFUWlQUnpZUVJZTzlpT2Z3SllHK1VrNXZyakFlNTd3ZUJtQkdBb0wwTzlEZVU3UXpwb3Z1THF3eWlvdUQxNXVtSzdveStTN0R6VnV0QmxrZXNuZ2pYOUxmZ2xwYTduY0J1bjd5aDBkWjdOczF3dU1ScjBCQngwUElCWnhremcr''@;'; put 'put ''VXludzhIdFlkS09rMFljZ05BeE1Ib2FWMzlNK1IyT2ZQejE2ZE13dVNmeG1QSkQ1WFpjdWY4ZmVML1VxU2lGZnZYVWQyU0RwcjJocTVHR09qM1MyKzEwMENIZ2xhUWRGRkxnMUNMdzNkSTNXWHVRSThHNk1pNXBnM0c1N05xNGZCQTBCT3htb01EWTZkZGVQM1hxOWRmb21LYnhJNEQ4NzlHL1Nr''@;'; put 'put ''cnRrM3lSOFhLcDdKTUlXZGVqSTlzamhpRUZXSC80MEtsVHlqbmFYd2wrSGZwN1hTbWhjazU1V1BudmlIVzUydGw3L3Bwcnp1L3RPSlRKSE9yZ3VrZFZPck9Qek14OGRuYXg2MGluZktTTGN5elRPNVJmajdQOGxwdEdxekFLRUZVQjA5VEZTckljcG1qTmN6bnkzRmEzUFZ3dTBrUzVQNnQ3M0lH''@;'; put 'put ''c2J1N0ZzZjRidTd0djdIL2lOQzdwSEIzdC9EUzUwTExRMWJYUThpdThxNzJob2YwMWxJc0RGL1h0NVhxYTdDWjZnZWgxb1BRRUNKT3pnWTB1SjJ2b2Ryc2o3bkIxT0VKVk1OaHlyeFRKRldNWWpTNGRTWHNiVjJHRktNR0tMVjBETlVmYjltcm9VWDdXTXRXMUo1REZEeTY3TnQ0MkxBY3JzM2g2''@;'; put 'put ''bzJwa2VLeTFlejJlVGdDZXJEQ1dwRnliUitXYXhvclVkQjRBUjBTTkZVV0JNTEdFSWJ2dFFEcGs5Vk1wOThiOEVZaE43WDdWLy9LcWNYVU00OTk4NXE3VERHMjdocjZnREg2YVllMVh2Mko0RzE0c2VKUGpqY3RHMmZLZlNDLzVDcXBFZFhMQ0M1RmhBVmdzUkhJeFJqM0RIS05WaVNLaDZpREZH''@;'; put 'put ''QlZ4SHFwQ2FKTWdxM1FmaTNwVXR2cjl1WmErK1Z2YmUveWQ3V056clpsanZTTzNOL1pVSDBnbU8vdDIzbnhMKzQxajV1YkdxZW1HU0hHZzBPcXNIdTVvbldtc3E5a1RpYVpDbFZVdTM5Umt4MHlLalRXb3h2S1Nta1BKaG44ODZhRzZ5amdBOFY4QUpBYTlTaHBlUFFYaDM2SXF4LzNBSTQ5Q2Uv''@;'; put 'put ''Qi81VkkxRVk5eDd0emN5T1VLdWpTRFRCVVhEM2cwSFliOWQ0K2NUb3duRzhZVHA0YnYzbWtadVdjbnZsczUyYlNydm41WEUzNjNjdFBPZTBZNFhsMHcxbjltOFNvOFM4L2lWZENhcXNMa1dnZGNkcTUxakRRYjc4UGtuNVZmM0tQODR1NmYvSVRxWFBqOU16R3l2Z29SMHBVeWVZSytURlR2ZzdL''@;'; put 'put ''Z2F6L01sTFBKZzdadzJQVFVrbElGQkQ5Q3dJd0RoZS83MENQdi9jeUgzdmZqMDE5NEhCUzU0c0svcGIrZ09SU0Y4SEZDN0VFK3ozUWI2RWFqQ0YwVG1zdWxmSWU1YVhFNEhIYUtWeGhsQkh3MkllbE5KL0ZqYVBuRHp6NzNJYlM4Zk83WjV4N0FPNVhQdmZrbW5zUTczM3dUK2pTb2V0eUFTdVFp''@;'; put 'put ''a2NwZlZybXBrYnFETGZVWTJVaEJzK0VDNVE4Zit1clg3bFArN3huZ3dNZVZpeml0YkZNVUxlNmYxbXcreGVOSzJpc2IrMmZUWGc0N0cybWFwd0RBOENmeHJjcjdRWjIvRzU5WitxY1ovTFBGR2FXQzIvMkI1VnZ4Q1BrK2o4dzhHMFJtdGl1UHpNRE91djBEV1Bmd3c4cmI1UHZibG5ac1k3aGQv''@;'; put 'put ''dmZsNS9DUE5zbFpDdUQ3bXM3aVhUeGxTZjJRVzNIZDZ2SFFsQVViRDlNRDZuaTBiQnQxNW1qbWxZNEg1WTdIQzhZaUJYNVU5Y01QWTUzeWRqMTViTnZiRnppdGEvQ0QrTXVjSjU4UzkvZklIckFNTEFzSkk2TVoyUnZVRE1wVEl1cHhKcDJVM0JjblA3NzcwS0Zkd0R1Ly8rWTM2WnlVNVVOa1l2''@;'; put 'put ''bEZlR2c1NjJPVEhERHRRZ0lDRUxKOTZRdGJ4dmp6TXlTRHcrUVZhT3RsYlMyWXhxOEkzZURBWUl6WVU5UGVRR2J4eGgzazY1NlA4dmdpQWpKTGlKM2xNMjZYdllWWTBCV0FNWEZBRkZCV1NrUTlzSVNvaDRqUUJTZ3JCM2k5U0dpNEp1aG1hRHhRT0dqQW9vaG1WRmIyZ2Z1MEhvUUtKSVBUL0xv''@;'; put 'put ''cDJhMmxRWGlxSnhnT09JMkFXK1J4QTNKelRZUlhEWU1iYVI0a3BhMlg0YnR2dWJsNEtwSGVXZCs4dDZXdnY3MnJZeVI2L1Y3cnFLbGxTMEp1amhQN3pmdVVpeDJCU05WZ1hmMUl2TmhhM3hQWjBhaTBKU0l0cnBwZ01LNnVNNU5ac0djT1ZJcCt4S2RueXNjNndZU1JuZ3o0dEErQWhvRXBmcnVF''@;'; put 'put ''TXNsZ05xdFRxS2J3Nk5UQjFQazRWL25YQWxHUGIxV3lUdzJVL2RyYTQrYUFBSk56VzRzb1ZzRk1RVHpzY2tLTTZDeDFsaFI2WVRaMnUzTk4rakJDNWNmT01ra3JLNDc0K2NQdDdZZDdtdmVVblR4WnRxZTVmUHYyVG5saVFpYjJMYmVPakp6YVVsYzlRVjVVL3FPNlRobTh1cjkvZXJxLy8ycmdy''@;'; put 'put ''MHJBbVI1NDVYSXhXT0htTVpqbnNqSFlIODhNRGQwKzBId2dQT0h1S0kvMlJlSEhuL0ZNUk9iYUxBT24rL3BPRFZSSCtncUtxNGZqMWNQVkpZVzlWUW5PdjNFWTAxYVZqbCtUVFhhSWp3VkdRcFZvRkh1TUlDeTh5Q1ZhL2dyUjFnSXhqcFZZaXBKenJFWTBDbWk5TENBam1ucVhRak5kdHhwbVBk''@;'; put 'put ''RWM0WUNkRWcydjRYNlAxMDV5aUVhMkFxMmFlaGpsbXZhVVRRREJPb0Z3NU1XbExXUHgyaTJuUmtadTNWSWJ4K0xTdzFtaVpXVThCblR6QURGa3VaMVFnbUhtdGVsQTcrcklnZXpvMURHcjNPWDF3cDhTYjNGUklUUjFRelJHeHhqazVNcDE0dnpVYXhNbFB4QVY3eHp5RFB0dmFSNjR0WC9yTGYy''@;'; put 'put ''amkyM0tTZk53dW1FNEQ5dk0zYW05cFo2eFFQWFdVeU5EdDI0ZHVuZW1zUnR2YVVzbTI2anVBa2NiTDVEL0FZODlJNXRzV05SRG5DaFNLbElDRlNOUjFNK0F4MWJBa2gxb1dnZjBzNnZHenNkckNMSXdubzFnNUNJSVFrUlFUZlByYndJNVRLRUFXK3lUSkI5WWVPcmQyT2x5SDh1MmFmN1d2OXg0''@;'; put 'put ''NDgyRGd4TnlTYXNuWVBUbGUwcUkvb0N5RjMvNlFHUG5kbzl6eEdpcUtBSmNSNWUza3c3QWRSbUtvWTl3SG5TVVlyMWd3MFJjU1JMNzJFWGQ2b3VxbmlrSFZRa21TQ1R6TUJsaFJnS0c1dXFCa2NYSnRHd1doR3BZbUFjRlJHdkFRTXVXbHlOVUhpdVBob013bnJKd0tCU2tXaGJiVmNYQTQ4ZDJ2''@;'; put 'put ''SnJsVXF0WXJnTVVRdWVObGRXK3F4SkR1OHAycDdzT3RiVWQ2a3BmWFR3Mk50YlJQamJhUWZSS2ZkZDhTN2hzcXJDa3A3VTdtc2djN2UwOTJsRmJOYXk4YjZ5alkzUzBvMk1NNkFzZU9TbGg4Y1BSWisxMEtWc2xyUmN4MFlNck0zcG1MVWhXTkt2VTI5YU5ic09kbFlzczg2TGVBV3JtQVFKY3lH''@;'; put 'put ''bDNCbHcwUlVGVklSQ1V6NGtHN1c2WUtENDNXWGRUZTIzRHdNbVRCVmNsaVQyNXUwWDVFcTVMZFhjbGxKZEFvc0xWWEhab3B1ZmI1R2ZnditXanJYeklubXpDdklCeWtGMzFqMzB5K0tSd0N6eUkrWnpMVTlRMXliZm1XVmdXWGI4bWl5NkJON0cvcXFxa3VLcXF1T1BrU2JJdFdremZGa2RIbHQ2''@;'; put 'put ''aXoxLyt6dktJK253ZjJrK3RFaEdzb09PeWtxSFBHWXNnTUpiVzdSVUJLejRkNDNvRUFBSmlTMk9yYjRJT1lobCtuNlhJNjNIYTJlaWtkVG4rM0J5RG1CM3BZcU05MytTM2VrcE9idXRhR2ZMYmI1a04wenF4b29pNGwxN3IyYkdTRzRnQjNjMW81a3RHRml4cWxMZHpVMG5IaFZmUjNNNU5ZKzRO''@;'; put 'put ''b0RZRTNkUHM0Nm83VTFQUE9leE81cFZpNmxBeFd3Zis4MVV2My9kQS84bVRQNzhmbHlxdnZUeDhCMWl6SFgraTQ2RVZHbDhsMUw5cTQ4TXdVMTlVVGN5b0F6RG41R3A4N0pPV3pKdWErdUpLOHFZYjZBV3FsODhUK0Z2WUFYSWZRRmM5VjE1RXNCNnJGc2hERlk1K3hpQ0pnbDV2SDlUUmxXVTJK''@;'; put 'put ''ZEJJOEpuZUZlRXVFY1hDN00wcGxpNEtvSW9BOERCd3NSSFUwbG91WHMzTzliVFNKa2wrTUZsM2MxTzhQbk56VTNXZGZQS2thNmkyY2JMQXVhdEY0KzlVc3JPOVJ2bW05cGZvdDRiakRZbnFGSjlETjVOUk84ak9PTFdrV0xDQVh0SXNxWk9GY25xcWpleTVVc2o0YXAxOFhsWUlwVFZDV05zclVp''@;'; put 'put ''bXN6NUhDcHFqeUF0RnZDVEZmamZvZEV6Q3VOZm1Yd25mTXYzZ3VuMytoTHNlWmdRSDJHdTJMeGNEcDZJL0YrcU9xd3pGd3FxL3Y5TUFDK0J2eDRXcnVlSENkc0JWMC9DeU1oL29jaDVtblNFeTVQZ2Z6QUVTQit0VTUzaHJGa3BON0NFdzdySFVrYzJDdTBLbHovN1ZPblVLZW1samwwMUgvYVR2''@;'; put 'put ''NFQzd3VaMVEvbUR0Um1QdkI4RUVRVnZ2QjJla1Y1dmcxZzVweFlrNlNmWTNMdFFybXl0MmYxSlc0UC9xbDBiZFgzSjh4WlhMRis4Rm9LN3ljSUZTOWRUNXJac1VKZkJaMlppbkJEZUllSy9NUjNCb3pyM2l5MUQxNERoUU0wekNPeHFSYms3a2Z6MmEyelowOGlmOVgyOEt1QWVVdG90L1BaYWg4''@;'; put 'put ''K1UzOEEzaGVKZldSUGZCQUwwVG40Q1d6SlVBMTVWTzRVY29udmlibEU5NGc0MU9LdmFXRUt1WnYzNUpJYjlzVlN0U2xNOFB4dXFubWhybDRNamhjNFkrNW92R21nZVRSM1phcTBJNjJrZ0tmTDk4V2JJN1hEbFQ1UzZhOEJZVnVtOXVXbDErUnFSK1lvajRYakhXQmZBaDhyaG81N3NVaVRUbURh''@;'; put 'put ''M2lXMmhReVRSY3hBQnNRM3UzbDdpQnprWndWMUVjSzhYVTF1MW9UQmN4SUY5VWEwM2pCMDFvaVR3d08zbnpqalNXZWZKK3h4T25aM29tOUIrNjc3NER5SDBVVkppT3pDU0RQUHFMbmVzYVo5VVpWUFFNcVJyV2VPWEdsVjd1cUdvQ1ZVSkxyR1ZmQUZXRHJFVGs4UkcwV0c1V2QrS2g2YWRLVURY''@;'; put 'put ''RE1XNkJhUU5uZ2Z1VVNWVGE0VjYwaEF0OU5yOVVRYVZrVnpVKzBPMWowN3VUcEg4Y2RIL25RblQ4OUR1N1BlL0V0MUZpelhJOVFDKzNYNTVIc2w4OGpGWnc4Zkh6dWhrTW5uemh5NVBvajBPT244Q3o5WFhvTFg2TTh0Skx2QW8rVDE2eVpKQjNXMFpRWHpTcEEzd0xKV2FSd09CeDZscnlVQXM0''@;'; put 'put ''SVRTWkpUdnlSMjg3YzlZMFgzbjNUVFhlOThJM0hIOGVHcFljZmZsdjVNK3QzZVlnMFFiODJXcjFqTnRBaFUyWWxhdGVVVWZmU3Nmc0VkZlhCNGN4bDFBd1cyQ3hFNlFQdDNxSkFXY0xsK2VrZGYzUGZiVDl0dnVXTDFyeWR6b29FTVNxMzRUdVhYcm1QOFBwR2VIa2RucmRKdnNtK2FiNUpvdm1t''@;'; put 'put ''QkhZb2IrTEhzZkk3N0ZFR3AzRG5vU25sN3creDNPWHlMbnlZdklEOHFGSU9GYkI4SUZocTNPY3ZwM2xnbXN1Y1ZBVWJvMUc3aDlwd21vSk1nM1pKZ2JoRlFOSWdyaUZ1TDF1K2xLaW9TVGgvTm9xckcxSnhITnU3emRUYzVNYkRrVEIyTnpXYlBoWHRhenBURXgyTzF0N1czRmRwR0RaNEkrRzdK''@;'; put 'put ''b3VzNmVwM2hhczhobUZPczdubDU5RGZzZnpVNXJWODRFZk03ZHlwMWRWaGlOVjI0ZXZaUEFBL0JwWS9zdVVUMU9mSGpFY3htbFFyMGhBZXBTWG5SSExGdkdEWElnMk42VEJNSjRIQlpTTXdBUS9UVlY0d0YxS0VEajBVR2FKRE4yNmJqZUY0UXdQTWFYYmJsTUZURlg1WGRkcGFOSGxYT09LRmVW''@;'; put 'put ''VDJOZDlXQy9PcU9kUFVGNVdXbDFFS1IvQjkrR203aFBNUVVYNkRqRThoL0x6eUcxYXRRVzFoei9KVjZCZE12K2F6MVRNNk9HcVFtVlBPRW10T3VtNjEyZ0ZtemlVdmlBVC9Kdm1NV3JyUWUxL0pkbUxYcWhXV3R1Q1grVE1xbDU4amVqS01DbEU1eFVwSmNXR0J4KzEwNUZ0MDJNTFh5ZUNwTzlU''@;'; put 'put ''RUlrYkRSYXptTWtqcjNMa09wU1h1bEtEaGlCMmkxeUNFMWVBQjRLL3YyOVYrb0tWbGY4ZXUydTNsRXhXMTlZRUo1WlBwZUR4TkxISlAzdkRSVE9iSWNGNVhoeGl0NkF1YmxCZk5rZDUzYlhmaWxITjdrdFZwMHJ6cGk2Z1lkY3N5MEpJV09pR0oxazlMdUY4UGNSM0dFbUZMTWl3eW94VlBrc1NU''@;'; put 'put ''QVloWHBCWGJuYUVnbUJicTNJWGMvbFNhVlppdTB2Z2xtSmJIa2VtbGZ4enQ3bTVkNk41eVc4bU92UDVZZmRlVFQ4N05wZW8rTVhpMjUzQ2J1dEozNitBblVFNXUySU9hNVVZWFJrWThBTkdseE1LU09SRVRjSm5BdUI4d3NUME52QzZQNGxMYnMyQXowMTBMYkR1SVd5dDZoVjhtNVBqckgzamho''@;'; put 'put ''UmZPUFAvODgvZjlrbWFUY2MvZ2xzR0RCK0VGSDZJcFpVYXJEQm5DN3lNWFdXMVJQY3RDUm1oaExmQXRXMUNZMFFzVVVYaDBnK29pbXFETWpUN3FjOTd2Q3dhTENrUEJvbWVDSWZhWERORy80WUtpa1BZWGVEV0M2b2tSZjl0V2dXTTZaQk53REwybTVrVUg4TDNrM0pYa1ZHa2RVQWFQS0UrVGM0''@;'; put 'put ''TlhtbFAxU29FdkxqNndnN3ppdVpQTHNILzVaZEpPbmdCS0IyU0l3Tm1DejIzVW5ONUpMUmRMcTdQbGxEQ3pCRmp6ZCtpQ01sMVhzZlllYW0yZTY4UnRlMjdlZzh2cWQ3VzA3cWxmS2lkM0w5MEVmVGVqNzZIdjROMkF0RkxabDZNUUNGVVZvemtGdjQyNTJJdEdTMHVpMFpMdlJVdExvL1JYelJj''@;'; put 'put ''dnQ0TVpNWVBkdXBITkxkK0ZpYzVwSkR3aElZQkJ0dEo4QkRqMkFzRzZvNGl1WFFoa2ZrV2I3bVVycmVEeU1SQmdyTnMyZytGMnVnQjVuY0Zna05wcGlqbGVSMTRSWGxXUVNmZkcvTFNxTlZGVWJ5c284VHNMN1haSG5xdTh1MEFmRDVlRUU3YThCcThqUDg5bWNnMmwyWDZlT05EY3ltZ2UxMU9h''@;'; put 'put ''eDlIcmZEL1A4Z0QrSmROTGZ0UXBkNVFCNTd0Z1lHN3F6UTRnUFNJQ0xkR2ptQk0xYmNYS2F5RXlSc2hmWHVoMTJsV05SWU5pbEt1eDFCS2lsVFFZM1VLREcxUWwxcnkyTUd0Rm95blhyaTNOUW13T3JNWkh1TU5XUVZmZzdCTEVZYmVqenlQRFV3US8rWG1tYURlQU9RajZlR09ZRXhvTWx0QkRt''@;'; put 'put ''OEFjeThMa29ZOXVBbk04KzZ3NTlHRU9ROWJDdkp6dHh3eDh1UW9HYUFBK2kvQkhWbHZrUUZ2bGJqdFZqUlRsQm9SQkFSbVFqaGgwQjR5Z0Y4VnBjRFBWcFNZOWQ1UllOT2V3T2FCeHZxcWJ6S0Fvc1ZiSWtxTDFUWDQzdGd2a2tGYlFzb3dHUDREZlQ3WXR2ZlV0WHRseTU1M2t3cUx5R042aFBN''@;'; put 'put ''WnJVZHBaRFZFS0cyVi9GUmIxVVVJZ0xBZjFXSUoxdU5nQkhHekhSQkFIU3VubUtjNzkxYlFhUk1CSDRRWHBybC9KTVRKMXJzWnNZT2oyd3RoOUxCZnBnRVlKMmdoaDNXMVgzS3FVYm1sYTFVbzQ5WTdONVBqYUZpQjlBdG0vVVVPK1ZrRFRDaW5VRUlxQ0ZQcmQxUEx3ZEc0K1ZqWEZXbUZjRTRO''@;'; put 'put ''b2hRc3ZUZmwzSms3MldQVmxheVhWTy9uQWpyV2xWSFBSOEVSZGk4Ni9Xb0NiVEFjK3ZuTjFhUlh3RmF0QllueGVxY3JDQ2NaWE9JYy8xOEljUkk5dEFuTkNnd0ZaT0xvSnpQRnNQM1B3bjhHczhQbnk5MmdORDN0V25JOW4rZjNyK2dHbXhsMDVNQWZCdXErQldmNHR3QVRaZU9KOFBNdVByNE1C''@;'; put 'put ''YTRYamJEeThuN25sUjFhUEIyU3FDbDUreVdvYVNsQ2IzTHphMDVnMnNQVUpZNDZya1o4UGYwcnlpOW4rUkRjMHl3TzdZMXJKSmJDQUtXbm5KZVcwR00yZGxNRDQ0eC94Z3JTK3ZqZDI4SXEwTCtESHNsVnBPTENJaTVhK3dXdlQvbmJ4YWNBQnE3ZGhlcVZPMVN1ZldZY25Wa1BDOEZTdjB2YVQ2''@;'; put 'put ''M1RQV3BpRHVHb1RtQk1hRE5EMks1dkFITXZDNUtIbk5vRTVubjNXSEhwNmpRNmp0V0czUTd4U0FwWkFmRVpFdURZV2lvQllSTkxldEZmeTRvL2NlZWZBbldlSHo5NHhjTWVkdDUvTnZqK0wyT0t5VmpQakJSc1VSWGVwOGEwTDYwaGx4RmZrTll0NkhSaGF2VERnWTFlRm5Lc1lycXI1bGdLV1Nh''@;'; put 'put ''RWxBNTVCY2RXU0l6Z1h1Y3RSSHI2R0tPYXVEOHJXaW9xS2FFVlYyQkZ4c0IwaTJWSnpLWkN0cXFjeEl2SjRNYTk4MVZGT2lHQlBrbnd2ZWMzNXZkZnVyankrTTVFRW1UNUkzeW41UlFXNHBpa0RrbzByRDJYcWxCODJaNGozMXA2Wno4NjIxc3pYbmVxaEVsMHpyL3g2dUF4ZkV3Q3hmcVByU09k''@;'; put 'put ''RXAvSlFnTnM2VmlQQzZOdWs4c0NqNitWcERjeEI5T05OWUU1b01GbGJ0eDdtZUxZZnpZN2x5RGYzbDltejJ0Um52YkM2bjV4NksxcEhsSkJqd0JWNkhkWWZFTEc2ZkpiZFBBcG1LOS9qeXZmYXZQYXczeWF4NmpKM01xZnFLcFN0dWpwMVlhWHFTaDVqVlZmSFdoYzZ1eFphYnZwMVIwTkQrK3Rx''@;'; put 'put ''WFdLU2ZCZGtmdXBaTS9qdE5IZmxCNDRvQmFVdlFNQXhyeFZUZS9qeXNJalZsSFd4V2xZNW53WE11VDBsbTV4QmY5QWZEN0RWcm5YN0ttSTRwUlU2cFRSTFFKTmV2YTNYZG5jZmJFMG1XUFh1Y0txK3M3TStWVkhkMWxKVDAzcUtHSnQyMXRYdGJHb1lMK1FWdklkcDVlNWNZN2lxb1RHdU9EbnRl''@;'; put 'put ''YTNCSzREckhqRHVCSFZQYlhSZEFCcmNrM1A5a2dhUHBiRmMrSmV5MS9NR2NxOWZ6UFkvdHpYbnVoRE13cHRQYy9tRTY4Sjk0Q05Xb3dZa2swT0RUNXJvaWtwRk1SRFZCMzZBRzV0SUV4Wk44R0RSS0JBa2lRTmdxYzBBVTdZeEREWkw0RXlZSlFwbXVZS3ViRmZXVmVsYU1NTUdZQ3NReG8waHB1''@;'; put 'put ''Zy9Qc1VZTW9uRU5HbUFtRkNVaUhnZ3owaW85OHNUK0ZhelJhQk93MHBkQTUxeDZuSk5MRGpiWU5DS3plYmN4cGEvL25tMi81L25VV1ExZ3N6UzV2TWczYUprdU9MV3NyeTJJVnBwUnZlRnYyTVhETWx5ZVNxVlNJQ2pKYWN5cmMySmhrU3lyaFo0TEU1RG4xQXdsSi8xdXRac1VQRG1iUGxneXps''@;'; put 'put ''cjF0WlJZenZPNXNKZjVPdnNIWWZENVllNzloNWZxWU5wdXJxMmZYZFJhSC9MMnNWMzVmT0R0RHltcFk2dnd0ZFh4NU5UUTlueW1PS2llRlZsZGM2aXZQSTVPZUYzMVFSRDNBNVdndTlNYXo4YTBHTnlTUkRyZGNrUUVmVU5oVUNmQWd6QmNSNUlHTVRHUkZTalJvZ0tSR0QwbzBnRURTUXlWY1hp''@;'; put 'put ''SzE3SnNoY3NsUTlyOUFwUldJQzc3ZkxBY3NVNk9IYSt3ZjRzdUo2dDVZZVplOHZ5MUxxLzByR2x0U2o0S3dmeTEvdTFCWjNYWlRhcVQ4R210VzZ0Y2ZpR3JuWGxLbGs5RkdONnJvL3J2Mm0wd1hXcS96NlFjLzJTQm8rbDdibndGN1A5ekhIOXQvd3R0clpKKzNtWjkvOXVEdDhOQkd6THVYN1F3''@;'; put 'put ''K0YvQ2RkTFdmOHY4LzRmNWRkZmhldGgxaitIbjN1UTUrSHFXYTNOLzJTMVlydGtwNDB0cDJRUHZuQ1ljQjh2eGZCb0N4MzJWZFhBZElFY2c4WEVaRDczOHBTY1Yxek1hOEhDSWJwSFFuTlJzdTVKZU1YbHlsMFB3bTlzNzdsbGVQaGtUOHRDMTU3TzhPU1JzdDZCWTUzVDVhMGw0K09kOHZoRUo3''@;'; put 'put ''RS9kUFgyc3dQZE53MzFIc3NNRGZiWDlaY25heHFpL2I2bHYrem9rcS9hMXRsOWxZWWZVc0xzeVRpM0p5cGQrTG9qeGRzRXgrZmhqYTVUZWoyVWMvMlNCbytsZmJud0wyV3ZyKzcvWXJiL3VTbHVsenJRTmxKSStsbE8xVWYzVFFEZmEzVUZpS1h2a0E1WWZwSnRJSk5BRnZXakxGejIyWXJBKzlB''@;'; put 'put ''eXJRYWF0OGd0TllDb09YY0hHYzZQeGtxTG8xVWxmNkQ3M1g2b2ZzQmZwbitqeGFXeHBvV1h0TGN3Sm0wTjFrdHpzRmxmMXVzaU9oSUpGeFhxOURxemdhaStMTDBxckZ6ZDBKY3QzTWlYelYwMTNNaVg5ZnY5VmY3SzBEdjVzanF2dW1YU3cxeFpDZFJsUER4MFptQjRTOUcrN29vSXZCdlpXclN2''@;'; put 'put ''UnpsWC9IS3dNdG9mKzA1ZnpQY0RmeFIvY0U5OTMrbUJhT2xJYURvSkVod3JHLzFsL044OElNT1BnaERYeFg3dnB1ZkhzTFVyU3Z1ZHEyUjQ5ZlVWR2ViWEwybndXUm5tMXk5bSsxRmxXRjJQb2Yzc1VmdTVOMmZObWRlNWZUeTNWSEdUdXNQMTY4NmIxQjF1dUVDOThXMjFCSkV1VVA5M2xSMHF3''@;'; put 'put ''dnlhc3NNc1RpNnFPQUZjOWVYbXpUTFpQTlVDZW1CZGpNZDl3bk5abjNDaEo3ZnQ0V3oreW9nZTNLVHRON0orbzNGVTNaTzN2RTJvZ0hpZ0FLU3pYVzRwd3BLdUFJdVlEQmdnREFFU2t6bTJIVXZQOWhXd0ZWUzFKS3V3c05CWDZBdjY3WGE3eTArekwzcWVWRXdISW55N1hwS2pxVDZOd2QrdkNO''@;'; put 'put ''Zlh0YnZMR3JLNzk3Q24yRmRRWUZOK2MrTEVmV1Z0OVVFZjN6M2s4M2dLYkRqTk52U3A5WDdiU0MvSWFneWwwUXRjOEh3bFdLY3ZoaGpDZ3cxQ1RZSVlEVWFNalRFc1lmQkVONzhMNWx5VjNLaTJSWk1wSGJDNGhZTjBEUUhQaUlUUFVrMDBzUktBeEhwZ0ZueXdKa3krdmJrTnBtUkhQQjVQeHh2''@;'; put 'put ''RFFXY2dHQTY0L0hRVklvdWJUUXFDUVl2Wk5YU0ZjNHFEU1MvRG0zbDlnZkRjTFJ5QmY5RUtoVGtXMXhZSzArSmhodE5QYWdYRGFxN2dZeXhPREt0eDRpL1d4WnU4UHBiSzdsWlZkdS9PNWhrK3htSlYxaFliMFBsTjJsNVMyeEpzR09WOHl2WVlzcllSdGUzQ09qNk5ReHhqSmk4Q1RDK0R5UmQy''@;'; put 'put ''a0Q4aEk4QThULzVFZ1FCR3pSdUJCSnpKMXMyK0MvUkpFWXpwTmRua0FNTHJnT2JhS255WW1oV01CRDA2QVB4cnkrNzAxYWhPc0ZZd1JiVlBkRk5vdEpycVJGTkRxMXRZTDl0aUZmQUtuQ2lxQmRHNXdOVDlkdmg4dnJBdkZLTFZDdUdBdXFRVldGOWJvaFl2b053U2szZDFyS294ZWVpaGt4M0t2''@;'; put 'put ''MnVGSnAxTGY1OVRaL3YrcnFhbXBSL242aW1lVDh4azg0a0xhUDg2T25QZjdWeldkMXRRZGRtYVhDUTJvUjlzMGxieit3U0FlWXJucUVEZWg5blpHS0NOaXJFQnMxMU9lbEhIOTFXcUoyTFErbnVKU1NFZ1VSTTlwb3U0TmxxUk9McExWUHNmMEVTTURET3hVaDRqZXVVV25uSHY0ZUxFcFloY1dL''@;'; put 'put ''UXBkeVk0VEFjdHNKcmpFSXFqTTdLRFJnd2hUUFFHY0FCQnR5QzZ5YndJK0tBU1hIa2RqUFFBelZScmxGV1BOMkxsUXN5UFpGWXBwSUd5T2VOOUc3VWd0SFF1SEE3SHd6RlBoVE1jRElSWWpsdFM1K0RWVk1yYTZtWHE5eU8xZ3ZtMXJSWTZxMkk2WFoxdGRTRnpFS0l1NVM5cVFGWHN0VHBoc2ht''@;'; put 'put ''WXZzV1JVOVFNNFJXZVpYWE5HK1NoRFJ2a29kZjYrUWJWUjJCN1o1bU5pcW8yNnF2cjJ2SjZZMnFqQnJpTldsVGJLcS9UZmJlOExmQktQdkVqZmtZSHdBczF5SW9TcUFYOW1VdTd0eHBMK2pLc00wQW9wL05pSXVqb0VTNm96OGZ1aUJ2Y1VhMUN6RXlYY1FTRGJ0NklWelpoUzVKK0JzSm9xdmEx''@;'; put 'put ''ZmIxT2tuTncyL29tSml5S2R0NFFyVzBtVnlOa3BPZTg0UGxzMDh2QTAvaTdwb2Ftdld0YWFwcFR5ZnhFZmlKV0ZmQVhGN21kTlAxZFlOSDhZbm9jQUhlRjlYOUZSVFF1RFFXclFpRmpZU0JVaUlWM3JJNGVxZ3VYZGNhTEE1VjAvYnIzQ2txbElmNzZPVEI0Z3VrUnZnNndzUHp3dXJXQ253Qk1K''@;'; put 'put ''ZE1qUEVaYitBUmYwMjFhM29ZVTBBVXV1ak9Vcm5qUzQxY0k3cytlNDhJTHF6VHA5L2pabmlaTkx1aE9XRTNnRlNidnVsT1cxVkt1K2h2VWhpQjQxcmZaV3I4ZkhaTE5idXIyKzBIUXFSRUowSlZqTVljcFZPOCtQeXVzakxhbExMUlpLVkJlQXpCRnQybVZseFpCaEptZnQyR0pzbE5kbGsxN2M4''@;'; put 'put ''YytyNVlMYktGektQSG1uMnpqazFncEcxZ0t3M3hLYXZQMCtOK1czbEpucEs3bG9HK3RyTUdBampXdHlRZHJOY1Q2N0w1dSs3cDkzYlEwV0wvMEZ2UTNDbko0bnAwM21lQnlpSC9QL1grNEhtUHlPYUplZjRKZnAzdXBtWjlSby9vWnpuVXl6K0o1NFY2QUdWVmhQT2c1RHZPY0JzUDNaTCtvOVFQ''@;'; put 'put ''OWY1LzVCRGpISjZEOTNNbGdSamVHNGZzeVNCL3dVeDZ0dkxXWVRVWlJEeEpJdE4zcGF6WjY1NkU4dDdiUk95V2wwclFZMnkyNVNaOFNBUC8rMUtuRnhiY2lSeUo0aS9LZm1hTWQzOUgyZlRTdyt2QkJPYzlza2tScTZRMElhMVhpWm5oclUvZDBac3V6VjdaNSt0Z25iYkZyYXVxTGJsYjdneVV3''@;'; put 'put ''OStyemNjUDR5YUdoaytONGI1Vnk4VC9EUjhKNFF2bHRGY3F1V2QyaHJWa0JIbC9mQ05la2hQbDA0NnRpL1RHZzN4Y1pYZXRVL1dybDhIQzloTmcxZU1EcFJiVHlyQlBaOVRFRCt0d216N3FVelVNWTlxR2NkYXBNZHAxcUFUMjV6Z2ZrOGZtNWJDNWhZUkp0dEo2R3JXdlh1TlMyKzFieUhOaXE3''@;'; put 'put ''aHNDeFN2UVBiWU9vRktMbk02ZU9HRWcyU01uakhScnZWYXZ4eUxDRW1leHg4V0tlcWxyWWFJRkxwb3prUzEwY1dQN3luYnZIZXJ5L1F1emRCLzhMT2xkZXFzcmMwak9ITTd3UmZ5cFQxdzk4K21yRjVVVS9sN21zQ3pQTnpNN0JtTVdmZzcrQloxWE05b3VqM3N4alVUME9wcGUxd3NEd0VNNnZV''@;'; put 'put ''RjN3R0lrb3FpbEhNeVNTY2hKT2lTVGdRQkN5ZVprVTJNcVVCK29pMVZCZDM1bk1Cd001Y0c0VnlkcFY4eEJqdCtnVzNPT2pPcERDSGs4Tzl0NUpCdzVLdk1DODh6UlNQQzZqT1pJS0xmbDFKdmpXMWJ0ajJxc3EwM3pDdlRHbXRvVWN5bDB1VVhvdUo4NkY2cHZjWUxSTnFYeTc5UHIrSUxYUDFQ''@;'; put 'put ''YTd1QzVQelgrN1FVK1BjSDRONlh5NlNzY1hubWQxa3VyOFBSNlI5WS9QY0g0TjZYeTc4MGJQdXQyeHI4N09QOGErYlBZSG5nMnprWjFuQStzNDMxZU4wM0hlUlVmNTI1dC8zdzcyei9mZ2Q2V1MrckFHYWt2S1JiMFVoSGRmWWgxdU1BS0xra2VLOXJnZWVmNDZub05TUkpud1BQMURLS1ZOTWE2''@;'; put 'put ''Y28zcU5lVWE3OWlvZEYyTmgzRHFuVnF4ZGNPTmlqWFd0K08xR3VaUWRZU1dhZGdOVW5Fc0tHNmF5YjZDUXdKSTc2bnJOOGhwZXg4NGVKbHpBNjVmRkN2V3BMWXRzNWM3UmtDdGYyOW45ZTh5WFNlb3c2Syt2cFRveEpJaWduVGdMaUdnRnhIeVZxOFQ2Tmc2Z2JaU3FkYXViTEpPb0tObmFOMTJl''@;'; put 'put ''V0M2VHJBR1RsMG4wTUJGdnVjdlhnbjRaYXVnbDBFdkxhaDlwNHA4L0lPOW94dmhOM2xOK0hKbCt0c21wVFdMQjJreFVuYlp1djBjZVRxaHlSUEk0dVFtOG5SSmt5ZHNLT2Z5RkFSNW9tYzhsS01YNUh3dlVNUmpBWXFZNlhtVEtrVmlHa1VvNnNncG1nQlU2N09NQnNMOHMzV0VpV2NSZmlWdDVL''@;'; put 'put ''bzE0Q3A1MXJYU1VUTFpZZGpscUp3RzgxUWFUQ0FNZm1rVFd0RWdueDRYZ0dlZDY2bmhLNlhuVmF5cEl1ek1IbC9COWtPMHMvMFFDZlJ0dWFBS0c0U29teGdOTGt5TTJhSklmVmJONkhYNnN5WU1BOFhHbzJCc0FNTjBONllnNktaRnZpZVQxejRpWDNaWnNucWxqY0ZJYm51blJuSjBZM2hXV29u''@;'; put 'put ''MjV6UVRLSjdvZVFZSlZNMDJhWGdCVXpUcm9kdUVvOWR2M1BCU0FjQ3BkUnlja2xmMmNnUjhjZHZhS3N5MGFhdzVkM3ZIUklFbHhQaVBuU1hDZURTdDh1ajZYRWdKK0IwRnpQK2M1UDRudVdhZGo4cHJPRExaR282RkRXd0h6NldmeStiU3Rad0tiL3R5dGtaRXExSE1yZjlnYlZsdEFNdmJBOHdk''@;'; put 'put ''RzlXZ2dOOTAzNFp0aDFmV0FyQzFENm5ub0d4ajU2QUU2TnFOQzdRK0xSck9vL3NxQnRSVHBiUXp4MW5PWFF0MjJKYS9RTEFnRUhUeE02Wm9VTG9tYzdIbTFCVHk2UERkazdac3VzSXhmMG85UFlWY1lHZWxXTDFxZ3NKZjVIMzRXTzVSS253ZnpqWXlDM0ZNQ04zR3cza3JtRlFCWW0xZENBTjdE''@;'; put 'put ''ZmhXWFNEWlZad1N2YmJEYStQMHI1L2Y1eWxmYlVWblRjYlhIUFE3QTY2QXkwK3QyN3BVNzhyV25hUTlteE1uc3l3aXpjL2R5bk1TNTBhbmF6ZjFhSkVkMElxZDhjTDRzWVhYQytHdWRYekU5KzlRbmJtTDhZS0V2cHRUSTNSQ3F4R0M2N2V0YTh2WEtDNXBheFJZbWtBNWJZOW42NHZtMEEzcitJ''@;'; put 'put ''aWR3Y0o0clgzVGVrYStiNGJ5MmpUM2o0NmduTGJIdGJZYjVnMTUyNHRxVzVvMy9HQk8yeFBadGh2bHBuamJTOXB6c2FHQm43MUM5eVhUR0RpZjdzaWdGZjEwbnhNWlFPcW1JYktYZXR3K3h0VDV5THJSa1dWaUlEOW5HL0hURyt3ZHByWDNONU5MVjNpZWlwZWVwM0orNGVEWThOQW91WFQvNk9q''@;'; put 'put ''R2ZXVDNkUkYwRnRqeUJuVlhsOXBIT2lrRk1xTkR3Mk1IRjhpbGtaSDcxVDU2b1k5dlFIU3I3bWd3RWJxbllZQ0dHbjBiMWVEbklVdEl5TzVvVUNmTmdva254L3d0cm9haW9nWlhTL2w0alBUNnkxdGNYaTk4OExQbkRLRVhXVDRseko1ejJmcit0YnNsdEIwU0t5a09kVDlHTHdiOXh2WmpOTEZl''@;'; put 'put ''NlNaV3VpTmhIcVFVWTJFeXU0bFd1S0pkR2JuZlczQjdaMmQxUXBZVDN2SnlyOGZ2OTVEZXpnVDluT2hzOG52NFJiN1BZQnZXZzAyem94WTJnaG9yVENhZmNnejltb28rOWVRZXdPa2swNFlDdlVPbmFrZTJvRWVuN3N4UXo5K3ZXRkdJcDlwTHZNTmMvRUg3UGM3U09UNG04Smt5UnJja2FjUHZK''@;'; put 'put ''eStCWEhleDU2YnBma3dqMjkzbXhyalBnSVZlZGlqUkpEV3B3TVB6MnRFbFJCamx1eFdDSWJiWmpUNGYwY1B2MlZIYTNBTlVhU29Hc0NWUTZIQ2JIQjU5eHBDc2NXc2Y1UHpkcE4xdXM1aDlwVWE2UThoaUxpNDEzYTdTSkVQWGlkaTV0VVY4NTRVZXVMS1BocVUzT0IzWnZTaGVLUkJTTjVmZ0hj''@;'; put 'put ''ZjREcE8vOGR6QjVLOVJlWDM1dWVWdkl5c0tzaDRLK2JuenEvZTVCYk45Q2FzUG9QOEt6MStXaElKVnlqTFBUYkk4SmRjcFhGZmVvZWxLMUkwck50R1ZyMmk2RW5VRHhFWnREK0luMzdIdFFkeVMwL1o0dHUwY2JscW5LM25iaTltMmMraHJQRDVkYnFGblYrYXVuN3o5ZSs1THZQMTcxWmVJTERm''@;'; put 'put ''VE5RbWVaMmN3Rjk3K0hWOG5lL3QzS2d6UDF4L0w5cE9IcnQwa1gvOVNObCtmTjRJMnJDWHRSdS9aeEU2OGtsM0w3bGJqM0RyME0yTEJ2ZTk4N2o4OW03ajNvTlpHYUwrQ05vTGw3VGUxTmkzNEEraFY4Z1R3VFRIam1iNjFtd281enppMTFEaFBybjUzNVFzTHlOMnJ2ckdBemltRDcwZS9JQmRn''@;'; put 'put ''eHZrMDY4ajNDSkxTN0I1QmVDYitQbnRtQ2FxUXkwcXN3T3VyTm9VSlRMa0ZDNElPZHVMWDZtZnJOeDBLTHQ5a1dNR2M5M3g4K0lmQUd4RStQamJPUDhBNEhkbHhNcGV6Vk12dmpxSHplQkkvRGxDYjdMR2k1d3V3UFZacnpoZDRxajBZYkE4RTJNLzVZRnVRdjROTEhFL3R3RGRmUmg4RTJrTlFZ''@;'; put 'put ''d3ZBNng4WUQ5dnh6d0ZBb3QrUG83czc1L3R4TW1nUW52eGJYbFJWbDQvMVZ2NzFOUVlzV3JESkxKcHl2L0xHbWVjUXpHWmh4bTYwU2JyY2I4cEp2VU5EOXEwM3ZMVkVXd3ZxOStVMGI5aHVnMi9NV2RjV29wSEdvU0ZaMXI0NVoyaHk2S3FKTVhsUUh0amFVNXVwN1docTNQQmJkRnovaFcvUktW''@;'; put 'put ''L3pPWmdEVzk3NFYzL0REaDVrZitpSDRWcmxjOXIzN1h3SzNnQnM4TXEvZUVkOVAxYVQreVU4SzEvR2c4SFRyOGNSL0cxNkt0RXplb3hyWXhuc0Jkd0ZIcG05Ly83WnBZdWVwNS8xOHYzQUFCZlQ0QVFHRjBsN3BRaEFQZkpJLzdOUGV5NStqOW1EMzZubkk5ZWdIZktFRDZoV2pIVWlvV1VrR0pu''@;'; put 'put ''cHFmUTZNSGNRYlI4d1ltTEMyRXgzakdTM0NWbFlEU3RQUGNGckRVckVZOUVxdXlNRTRhSGRHY3FEVUhMbDJLY0l4STdjV1U5MmtKVmNDQzB2QTFSNy9Td3h5bllJMWI5bllPVGVlZTlZRnhHNmR4VE92M2RJM1JXVXVhNE1pOHJQOVFRSGxEZEtGN3ZuMkpIS25jZjdlajNtUWs5dnorRjJ0aWVv''@;'; put 'put ''dTZtMzBHUDI5SFlNMGU5c3dVV2tFTjhKdWs1OGh0QjlHTTdzYWUxMzBuUGFtVk1EYm8wQW10ZHY5eE5oYVluKzVwd1J4cys0TUR6cmRlYnBTZTEvL2JDSnQ4WTJQR3lDMTJIQWMwQzM0MXAxcmVBSnJUNERybjlEdmI2eVJzdXZYOHBlbDQ3blhyK29YVWR6QjNPdnY1SzkzbjBxOS9xNTdQV0Zl''@;'; put 'put ''ZTFzdEcza0hwWWpUOEM4SXdFbmhubHZYRllEczAvbVZOUGs0T0VlRm5SWmM1RnhranRkZjFKeHdtT3ZYS3lvY2RkamEzRkQ0MnlPRzRpelA1MHo5cGV5T01pN2p0dERXcnIvTlhaT2owYnZwRDJ3VlR0eEI5TjZPTGl2WDM5ZnZ6U0svaC9pRXp6NkFBRUFBQUFCQUFCVkVyVCtYdzg4OVFBZkEr''@;'; put 'put ''Z0FBQUFBMDhHZGhnQUFBQURVdnFiMS96Yis0d1NLQTg0QUFBQUlBQUlBQUFBQUFBQjQybU5nWkdCZ1B2ZnZQQU1EeStiL1p2OXpXTG9ZZ0NMSWdORVFBS2NOQnJnQUFBQjQybldVeldzVFVSVEZ6NzB6RkVFSTJFUlFRb3pHWUV4TXFrbTEwV290YVdwaUJXdnNScXhZRjFJWExsUzZVRVFGa2E1''@;'; put 'put ''RVJWMjRjMVhwMG9WS2QzYWhDQVg5QzBSUXV0Q0NDaFZLb1M2TTV6NHpFcE9hY0RqejhkNjhlMy92ek1nU1RvTS9PVXBGcVJRcU1vK1NUaUdoRTRoN1JhVDFDYlpJQjBweUJUM1VObm1BTGoyQmd4emZMeGVSbC9Yb2s5bjZWMzNKNDl2bzFGUEk4djRtdlVtZHhRNjlqbDA2aW00OWp3eVBDMjQ4''@;'; put 'put ''NStvd2l2WWMrbUZaUWRpN3hIbUxDT3NNYXZvTU9WMmgzMENWZFZUMUM4OC9vaW9oREdrYzYvUXBqdWtCbEx3enFIaytsZUg5ZTZnNmYrem14TGxXa3M4YjBoK0krRVZzMU5mWXdIbHI5QzY2NVJxT3NPWmxlazRXc0ZOcjlWOHl6cHJLU09rZFZEU0I3ZlNzamlBbEU0anBKR3NmdzRBSTlvdlU1''@;'; put 'put ''N1JBSG9LeTl3Z0R2RjdXcTI1OHhlYklmVEpjd21hWjVMd3hzcXloMDZ0eTdUd2k3RGVpSVhUSlF5UWxpWFAwbEx6Q0huSWZkR3ZlUXQ1cWxEbldzcHYzM3BHeDFUWEZQUUQyU2RsZHo1SlhnbjJGblJiL2xaL2tHc2JQMkRWSlF2VzN4by8ralpyM29rZ0g3RnFsbVFaTDQ5Y3M0MGZPZXBJeVZx''@;'; put 'put ''dkllMEczWHNpdVdlVDJ4cGpSUDFNZjlESUtmOW0xeW5KaGJ2eWFaZnlNczduMWEydTJ1dlZ1NndkdU9lSytXTC9NY3RieHNKcWEvWGpUdVdYTjlydmhaUFdKOWI0bnU3MnNINDRoKzNBWlpBNHNoKzQ4OEhIRVpBUXhZMnY5dGJseFpXK0IreUhrL0E3V3lkeGFkdHFjV2JZOHRUbno3VElXdU8y''@;'; put 'put ''UE1mcVAyenZnY21oN2FQd2E3NExsc2RVdDR6TEQ3RFdFbi9SUmFwQ2E1WmhEdklaNlQvRE1WbTlqMmxpVGRjTmIrUE85NFRPQmFVRDdrUGN1OE5zUlJhLzdMcXhGTDlVdjArUzE3TDRWOEo4akxjUFlTbkYvNjk5ZFBqek81YjZ1OHErZzhoc3BZOWZPZU5wRndsMUk0bkFBQVBDMWx0K3VNcHRP''@;'; put 'put ''OTNIK042ZWJPN2U1TlVGNmtpUGlDQi9paUFpSkhvNklPT1E0SXFLSEl5VGlrQjRPa1pDSU9FSWlJdUtJRUxtSGtPZ2hZa1FQSVJFUlIvUWdJdEpEeUNFUjkzSncvSDRRQkdYKzJZYjJ1NkN1TkV6QTMrRWorQXB1ZGYvb1B1OXVJUlpFUUpKSUR0bEg2ajBqUGNzOTV5YkJOR1k2TWI4eHA4MFo4''@;'; put 'put ''NnE1YkRZc2xLVnQ1YXpMMWpQcmkwMjBUZGoyYk5lMmhwMndqOXJuN0hsN3hRRTVFbzZDbytZVW5XUE9ySFBQV1VNaGxFUEgwVlYwRXpYUVZxK2psK3ZkNlJ2dVcrdjM5cy8zWDdxbVhHVlhlMkJpWUh2Z3dpMjZsOXpWUVc1d1kvQVNZN0VaN0FBenNJNkg4MHg3Y3A1clQ4dXJlMGU4Uzk1VEhN''@;'; put 'put ''VlQrRHBleE12NEZmN3FZMzFydnJ5djd1djRIWDdLTC91VC9nLytMU0pEckJCNW9rU1VpWFBpbG1nU3IrUjdNazFteUJVeVQ1YklNbmxOVFZPZnFTeFZvSGFwQ3ZWTXArazVlb0Zlb2RmcElsMEtKQUozZ1hyZ0dVREFBYnlBQlRJWUJudmdHRlNCQVc3QUkzaGlFc3dKYzhIVW1BZW14WFRZSlhh''@;'; put 'put ''VjNXQjMyR08yR3V3TC9nb2F3WnRnSTlqbUxKeVBBNXpCM1hNTjdpVmtDWTJIYXFGNjZEbHNDcnZDVlBpSmgzbVVmOGNmOGxXK3hqL3dMUUVTWEFJcjZNS3NVQkxLd3Fsd0tkd0tUZUZQeEJiQkl1R0lGc21LaUlpSlFJeUtDWEZNbkJUbnhjVzNxU2dVZFVXcDZJRTBMbjJVRnFWdlVrSGFsWTZr''@;'; put 'put ''TStsS1p1Vk4rVUN1eUJkeVRhN0xIY1drZUJWVzBaV2tzcUJzS0JXbEdjTmlrN0ZDN0xjS3E3S2FWRlBxalBwSi9hcm0xQzMxVUsycWhucXZOdjdURUkzU1JyVkpyYWo5MU82MHB0WWNlaGhxNnpaOVdjL3BSZDNRYi9SSC9VbC9pVnZpN3ZoVWZEYitKWjZONS84Q0RCRE15QUFCQUFBQlBBQm9B''@;'; put 'put ''QW9BUVFBRUFBSUFLQUE1QUlzQUFBQ1RBbXNBQXdBQmVOcU5rc3RPd2tBVWh2OFdOS0RHS0RIR3NPcktHQk81cWVCdFlkU3dVZFJJaEswZ0ZSckJZaWxHWGZvMmJsejZERjZld0kyUDREUDRkeml0TjJMSXBKMXY1dnpuUHpPbkJSRERPMExRd2xFQU8zeDZyR0dPcXg3ckdFZFRPSVFOM0FxSHNZ''@;'; put 'put ''Skg0U0hFOFNFOGpGa3RJaHhCUmtzSVJ4SFhUb1JIc2FUNVBtTW9hUS9DRTVqU3c4S1RpT2t6d2srWTF1ZUZuNUhTTjRWZkVOSGJ3cThZMGE5Ny9CWkNYTC9ETm15MGNRTUhGdXBvd0lXQmV6NFpwSkJHbGxSbDFLQ3VvVFFkY3BGemkxa2Q1bDRnZ1FKTTVqbkt5V1lmZkpWSmxVWGFVcnMxSEhH''@;'; put 'put ''bmppNjVRbldhbVNrMTFuR01YWlN4VCtybnRSQjQrVTZEVmpSKzFTeHg1VkJycVpNYjM4NHdXTjBTK1pRNm0wcXZLd2QwTVRsNzJUWEdLdVJEeHIzWUh1ZmFQMzN6ZXUxeXRZWWt4OVVQWjF2NXRnTFhCR00yMTM1T1I3THFqTHJjN2ZJcitab2taNzltUzkzMXEyYXk3ejM3N2YzdFpaazdWWndw''@;'; put 'put ''SHpmb1hVRTZtVmRSZ3lPcllqbWVNSTFWdmhleEhQeFBPWnhUWjZvNmpueUZmT0JZeENWdllqSGlVTlA4QkxoWmg1Y0FBSGphYlpOWGJCeFZGSWEvMzdGMzNUWk83NzFYeDE3M3hDa3VhOGV4WXljdWNlekVTY2E3WTJmeGVoZkd1M0ZzdWdRQ0hrRHd3alBsQ1JDOUNpUjRRS0pYMFhzSDBYbWtC''@;'; put 'put ''Ky9jQ1Y0azdzTjgveG1kODU4ejk5NGhDM2VkRzJBZS83TlVtMzZReFF5eXljR0huMXp5eUtlQVFnTE1wSWhaekdZT2M2ZnE1N09BaFN4aU1VdFl5aktXczRLVnJHSTFhMWpMT3RhemdZMXNZak5iMk1vMnRsUE1Ea29vSlVnWjVWUlFTUlhWMUxDVFhkU3ltejNzWlI5MTFOTkFJeUdhYUdZL0xS''@;'; put 'put ''eWdsVFlPMGs0SGh6aE1KMTEwMDhNUmVqbEtILzBjNHpnRG5PQWtwN0M0bmF1NG1wdTVnVHQ0bit1NWxxZjVtRHU1amJ0NW5tZTVoMEhDM0VpRUY3RjVqaGQ0bFpkNG1WZjRsaUhlNERWZTUxNkcrWVdiZUpzM2VZdlRmTStQWE1jRlJCbGhsQmh4YmlIQlJWeUl3eGdwa3B4aG5PODR5eVFUWE15''@;'; put 'put ''bFhNSmozTXJsWE1ZVlhNa1AvTVRqeXRJTVpTdEhQdm41aTc4NUo1U3JQT1ZMS2xDaEFwcXBJczNTYk0zaFYzN1RYTTNUZkMzUVFpM2lkOTdSWWkzUlVpM1RjcTNnYzc3UVNxM1NhcTNSV3EzVGVtM1FSbTNpUHU3WFptM1JWbTNUZGhWcmgwcjRnei81a3E5VXFxREtWSzRLVmFwSzFhclJUdTFT''@;'; put 'put ''clhacmovWnFIMCtvVHZWcVVDTmY4NDFDdk10bmZNQ0hmTVNudk1jbmFsS3o5cXRGQjlTcU5oMVV1enAwU0lmVnFTNTFxMGRIMU1zRFBNZ2pQTXBEUE13MTNLV2pQTU9UUEtVK2ZsYS9qdW00Qm5SQ0ozVktsZ1lWVmtTMmh2eDFvMWJZU2NUOWxxR3ZidEN4ejlnK3k0Vy9MakdjaU5zamZzdlEx''@;'; put 'put ''eGkyMGtrUmc4YXBDaXZwRDNrV3RtRitLSkpJV3VHd0hVL20yLzlLZjhpenNqMnJrUEd3WFJRMmh4T2pvNVpKTFJ6T0NQd3RubnZVWTR2bkV6VXNiTTJzSE1rSWZHMVdPSlcwZlRHRE50TXZadEJ1WHNaZEZMWm5lc1F6UGRwTmV0eUZ2OE9iSVdFWTZEaWRpZzliVG1vMFpxV1NnVVJtNU9zMEhS''@;'; put 'put ''elRvVE96ZzVQWm9kTjBjQXk2VE5XWUMzOHFIaTBwclF4NkxQTjFtNlNrbWFiSG15WmxtTlBqUk9QRE9hbjBNOUR6bjhsU21aRy94OXZCbEdGQmJ6anFoRk9qUXpIN2JNRjRodTdMMEJQVDJ0ZHZacHgwa2Q4L2ZkcVQwNmVkbmpoWVZ1V3lMRmpwNngxMnJLbHJOVzdRYXh6R1hlVDFScUsyWTQ5''@;'; put 'put ''RngvTEd6NnQwWFdtb3Z0cGpqY2NHajQyK1BtTTA0U0w5TmxoU0V2Ulk1ckhjWTRYSFNzTmdVM1lvNVNUY29LS3BJY2NxdG1MSmZNdWR4VWozN3FkbGtUWDkyZWs0WUowZjBDUzYzZE95d1B0OWpEYjdtdFo1VnZvMFRISXlHb3U0eWJuVzJOUWVSV3duTDJKNzZoKzNaYmNoQUFBQWVOcGo4TjdC''@;'; put 'put ''Y0NJb1lpTWpZMS9rQnNhZEhBd2NETWtGR3huWW5UWkpNakpvZ1JpYmVUZ1lPU0FzTVRZd2k4TnBGN01EQXlNREo1RE42YlNMQWNwbVpuRFpxTUxZRVJpeHdhRWpZaU56aXN0R05SQnZGMGNEQXlPTFEwZHlTQVJJU1NRUWJPYmpZT1RSMnNINHYzVURTKzlHSmdhWHphd3BiQXd1TGdEK0hDVmdB''@;'; put 'put ''QUFBQUFGWW1QWjNBQUE9KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo2MDA7Zm9udC1zdHlsZTpub3JtYWx9Y2xyLW1vZGFse2Rpc3BsYXk6bm9uZX1jbHItbW9kYWwub3BlbntkaXNwbGF5OmlubGluZX1jbHItZXhwYW5kYWJsZS1hbmltYXRpb257ZGlzcGxheTpibG9ja31jbHItc3Rh''@;'; put 'put ''Y2stYmxvY2t7ZGlzcGxheTpibG9ja31jbHItc3RhY2staGVhZGVye2Rpc3BsYXk6YmxvY2t9Y2xyLXN0YWNrLXZpZXd7ZGlzcGxheTpibG9ja306cm9vdCBbY2RzLXRoZW1lXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseTp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZh''@;'; put 'put ''bWlseSk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kOmhzbGEoMCwgMCUsIDEwMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tc2tlbGV0b24tZHVyYXRpb246NHM7LS1jZHMtZ2xvYmFsLWFu''@;'; put 'put ''aW1hdGlvbi1lYXNpbmctaW4tb3V0OmN1YmljLWJlemllciguNDIsIC4wMSwgLjU4LCAxKTstLWNkcy1hbGlhcy1vYmplY3Qtc2tlbGV0b24tbG9hZGluZy1ncmFkaWVudDpsaW5lYXItZ3JhZGllbnQoIDkwZGVnLCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQpIDAlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApIDM1JSwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKSA2NSUsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCkgMTAwJSApOy0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lOkhpZ2hsaWdodCBhdXRvIDJweDstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3Rp''@;'; put 'put ''dmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24td2FybmluZy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1j''@;'; put 'put ''bGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1z''@;'; put 'put ''aGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNr''@;'; put 'put ''Z3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKX06cm9vdCBbY2RzLXRoZW1lfj1kYXJrXXstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtd2FybmluZy1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3Rl''@;'; put 'put ''ZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''YmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1za2VsZXRvbi1sb2FkaW5nLWdyYWRpZW50OmxpbmVhci1ncmFkaWVudCggOTBkZWcsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYmFja2dyb3VuZCkgMCUsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCkgMzUlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApIDY1JSwgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKSAxMDAl''@;'; put 'put ''ICk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24t''@;'; put 'put ''OTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNo''@;'; put 'put ''YWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Y29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKX1AY2hhcnNldCAiVVRGLTgiO0Bmb250LWZhY2V7Zm9udC1mYW1pbHk6dGV4dC1zZWN1cml0''@;'; put 'put ''eS1kaXNjO3NyYzp1cmwoaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25vcHBhL3RleHQtc2VjdXJpdHkvbWFzdGVyL2Rpc3QvdGV4dC1zZWN1cml0eS1kaXNjLndvZmYpfWFwcC1lZGl0b3IgLmNhcmR7bWFyZ2luLXRvcDowO2JvcmRlcjowfWFwcC1lZGl0b3IgLmJ1dHRvbkJh''@;'; put 'put ''cntwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZWRpdG9yIC50ZXN0UmVke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjAwYyFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLmZpcnN0Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxh''@;'; put 'put ''eTpub25lfWFwcC1lZGl0b3IgaG90LXRhYmxlIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsYXBwLWVkaXRvciBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHls''@;'; put 'put ''ZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDBiMCFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA2ZSFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFj''@;'; put 'put ''aXR5Oi40fWFwcC1lZGl0b3IgaG90LXRhYmxlIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fWFwcC1lZGl0b3IgLnN1Ym1pdC1yZWFzb257bWluLWhlaWdodDoxMjBweDttYXgtaGVpZ2h0OjEyMHB4O2hlaWdodDoxMjBweH1hcHAtZWRpdG9yIC5pbmZvQmFye21hcmdpbi10b3A6MTRweDti''@;'; put 'put ''YWNrZ3JvdW5kOiM0OTU5Njc7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDtmb250LXNpemU6MTZweDtoZWlnaHQ6MzBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9YXBwLWVkaXRvciAuaW5mb0JhciBz''@;'; put 'put ''cGFue3dpZHRoOjgwJX1hcHAtZWRpdG9yIC5pbmZvQmFyOmhvdmVye2hlaWdodDp1bnNldDt3aGl0ZS1zcGFjZTpub3JtYWx9YXBwLWVkaXRvciAuaW5mb0Jhcjpob3ZlciBzcGFue3dpZHRoOnVuc2V0fWFwcC1lZGl0b3IgLnBrSGVhZGVye2JhY2tncm91bmQ6IzY4NzY4Mjtjb2xvcjojZmZm''@;'; put 'put ''O21hcmdpbjotMXB4fWFwcC1lZGl0b3IgLmhlYWRlckJhcnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKX1hcHAtZWRpdG9yIC5lcnJvci1pY29ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Y29sb3I6cmVkfWFwcC1lZGl0b3Ig''@;'; put 'put ''LmJ0bkN0cmx7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAtZWRpdG9yIC5jYXJkLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudH1hcHAtZWRpdG9yIC5oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW59YXBwLWVkaXRvciAubXktZHJvcC16''@;'; put 'put ''b25le2JvcmRlcjpzb2xpZCAxcHggbGlnaHRncmF5O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym94LXNoYWRvdzppbnNldCAwIDAgNHB4IDJweCAjYTdhNWE1MmI7aGVpZ2h0OjUwdmh9YXBwLWVkaXRvciAubnYtZmlsZS1vdmVye2JvcmRlcjpzb2xpZCAycHggZ3Jl''@;'; put 'put ''ZW59YXBwLWVkaXRvciAuZmlsZS1kcm9wLXRleHR7dGV4dC1hbGlnbjpjZW50ZXJ9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC1lZGl0b3IgLnByb2dyZXNTdGF0aWN7bWFyZ2luLXRvcDo5cHghaW1wb3J0YW50fWFwcC1lZGl0b3IgLnByb2dyZXNzLGFwcC1lZGl0''@;'; put 'put ''b3IgLnByb2dyZXNzLXN0YXRpY3t3aWR0aDpjYWxjKDEwMCUgLSAxNHB4KX19YXBwLWVkaXRvciAuaG90RWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1lZGl0b3IgLmV4Y2VsLXBhcnNpbmd7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7''@;'; put 'put ''cG9zaXRpb246cmVsYXRpdmV9YXBwLWVkaXRvciAuZXhjZWwtcGFyc2luZyAuZGV0YWlsc3ttYXJnaW46MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTQ1cHh9YXBwLWVkaXRvciAuZWRpdC1yZWNvcmQtc3Bpbm5lcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1p''@;'; put 'put ''dGVtczpjZW50ZXI7YmFja2dyb3VuZDojZmZmOTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt3aWR0aDoxMDAlO3otaW5kZXg6NTAwfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXthcHAtZWRpdG9yIC5wcm9ncmVzU3RhdGlje21hcmdpbi10b3A6MzJweCFp''@;'; put 'put ''bXBvcnRhbnR9YXBwLWVkaXRvciAuY2FyZC1ibG9jayxhcHAtZWRpdG9yIC5jYXJkLWZvb3RlcntwYWRkaW5nOjEwcHggMCAwfX1hcHAtZWRpdG9yIC5jb250ZW50LWFyZWF7cGFkZGluZzowIC44cmVtIC44cmVtIWltcG9ydGFudDtwYWRkaW5nLXRvcDowfWFwcC1lZGl0b3IgLmRyb3AtYXJl''@;'; put 'put ''YXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9YXBwLWVkaXRvciAuZHJvcC1hcmVhIHNwYW57Zm9udC1zaXpl''@;'; put 'put ''OjIwcHg7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiNkYmRiZGI7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6IzAwMH1hcHAtZWRpdG9yICNzdWJtaXRCdG4sYXBwLWVkaXRvciAjY2FuY2VsU3VibWl0QnRue3dpZHRoOjE1MHB4fWFwcC1lZGl0b3IgLnZpZXctdGFi''@;'; put 'put ''bGV7Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50O2NvbG9yOiMxYTU3YmIhaW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCl7YXBwLWVkaXRvciAuaWNvbi1jb2xsYXBzZSAudGV4dHtkaXNwbGF5Om5vbmV9fW15LWFwcCBhcHAtcmVxdWVzdHMtbW9kYWx7ei1pbmRleDoxMDAw''@;'; put 'put ''MH1teS1hcHAgaGVhZGVyLmFwcC1oZWFkZXJ7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZmZmfW15LWFwcCAubG9nbyBpbWcud2l0aG91dC10ZXh0e3dpZHRoOjMwcHh9bXktYXBwIC5sb2dvIGltZy53aXRoLXRleHR7d2lkdGg6MjEwcHh9bXktYXBwIC5oZWFkZXItaGFt''@;'; put 'put ''YnVyZ2VyLXRyaWdnZXJ7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO21hcmdpbi1sZWZ0OjEwcHh9bXktYXBwIC5kZW1vLWV4cGlyZWQtbm90aWNle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3Np''@;'; put 'put ''dGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7aGVpZ2h0OjEwMHZoIWltcG9ydGFudDt3aWR0aDoxMDB2dyFpbXBvcnRhbnQ7ei1pbmRleDoxMDU7YmFja2dyb3VuZDojMjEyMTIxODB9bXktYXBwIC5kZW1vLWV4cGlyZWQtbm90aWNlIC5leHBpcmVkLWRldGFpbHN7ZmxleC1kaXJlY3Rpb246Y29s''@;'; put 'put ''dW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjMwcHg7ei1pbmRleDoxMTA7YmFja2dyb3VuZDojMzE0MzUxfW15LWFwcCAuZGVtby1leHBpcmVkLW5vdGljZSAuZXhwaXJlZC1kZXRhaWxzIC5leHBpcmVkLW5vdGljZXtjb2xvcjojZTBlMGUwO2ZvbnQtc2l6ZToxNnB4fW15LWFwcCAu''@;'; put 'put ''ZGVtby1leHBpcmVkLW5vdGljZSAuZXhwaXJlZC1kZXRhaWxzIC5leHBpcmVkLW5vdGljZSAubWFpbHRve2NvbG9yOiM4ZGM1M2V9bXktYXBwIC5tYWluLWNvbnRhaW5lciAudXBkYXRlLWtleXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7cGFkZGluZzowIDEw''@;'; put 'put ''cHg7YmFja2dyb3VuZDojMDAwMDAwMjZ9bXktYXBwIC5hbGVydC1pY29uLXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH1teS1hcHAgLm5hdi10ZXh0e21hcmdpbi1yaWdodDoyMHB4fW15LWFwcCAuc2lkZWJhci10b2dnbGV7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6MTBweH1teS1hcHAgLnNpZGViYXItdG9nZ2xlIGNsci1pY29ue2N1cnNvcjpwb2ludGVyO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHh9bXktYXBwIGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLmRyb3Bkb3due3Bvc2l0aW9uOnVuc2V0fW15LWFwcCBoZWFk''@;'; put 'put ''ZXIgLm5hdi1saW5rOmhvdmVye2NvbG9yOiNmYWZhZmF9bXktYXBwIGhlYWRlciAubmF2LWxpbmsuYWN0aXZle2JhY2tncm91bmQ6IzFkMmYzZH1teS1hcHAgLm5vdGZ7YmFja2dyb3VuZDojMTZhNTdhO2NvbG9yOiNmZmZjZmM7Zm9udC1zaXplOjEycHh9bXktYXBwIC50b2dnbGUtc3dpdGNo''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojNjE3MTdkO2JhY2tncm91bmQtY29sb3I6IzYxNzE3ZDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfW15''@;'; put 'put ''LWFwcCAubWFpbi1jb250YWluZXJ7bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnR9bXktYXBwIC5jb250ZW50LWNvbnRhaW5lcnt6LWluZGV4OjAhaW1wb3J0YW50fW15LWFwcCAubmF2QmFyUmVzcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOiM0OTVh''@;'; put 'put ''Njc7Y29sb3I6I2ZmZn1teS1hcHAgLmFwcC1sb2FkaW5nIC5sb2FkaW5nLWxvZ297bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe215LWFwcCAubmF2QmFyUmVzcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgt''@;'; put 'put ''c3RhcnQ7YmFja2dyb3VuZDojNDk1YTY3O2NvbG9yOiNmZmZ9bXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssbXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmssbXkt''@;'; put 'put ''YXBwIC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluayxteS1hcHAgLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5re3BhZGRpbmc6MCAuNXJlbSAwIDFyZW07d2lkdGg6MTAwJTttYXgtd2lkdGg6''@;'; put 'put ''MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztib3JkZXItcmFkaXVzOi4xMjVyZW0gMCAwIC4xMjVyZW07Y29sb3I6Izk1Yzg0Yn1teS1hcHAgLmNhcmQtYmxvY2ssbXktYXBwIC5jYXJkLWZvb3RlcntwYWRkaW5nOjEwcHggMCAwfW15LWFwcCAubWFpbi1jb250''@;'; put 'put ''YWluZXJbX25nY29udGVudC1jMF0gLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdIC5jb250ZW50LWFyZWFbX25nY29udGVudC1jMF17cGFkZGluZzowcmVtfX0uaHRJbnZhbGlke2JhY2tncm91bmQ6IzAwMCFpbXBvcnRhbnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDog''@;'; put 'put ''NDgwcHgpe2gye2ZvbnQtc2l6ZTouN3JlbSFpbXBvcnRhbnR9aDN7Zm9udC1zaXplOi43cmVtfX0ubmF2LWxpbmt7cGFkZGluZzowcmVtIDFyZW19Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4tcHJpbWFyeSAuYnRuLGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuYnRuLmJ0bi1wcmltYXJ5e2Jv''@;'; put 'put ''cmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtjb2xvcjojZmZmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4tcHJpbWFyeSAuYnRuLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4uYnRuLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiM1ZTczODI7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjojNWU3MzgyO2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2xyLWljb24sYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNv''@;'; put 'put ''bixib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1wcmltYXJ5IGNkcy1pY29ue2NvbG9yOiNmZmZ9LmJ0bi1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZHtvcGFjaXR5Oi42NX0uYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xMjVyZW07Ym9yZGVyOjFweCBzb2xpZDttaW4td2lkdGg6M3JlbTttYXgtd2lkdGg6MTVyZW07d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3Rl''@;'; put 'put ''eHQtYWxpZ246Y2VudGVyO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MS41cmVtO2xldHRlci1zcGFjaW5nOi4xMmVtO2ZvbnQtc2l6ZTouNXJlbTtmb250LXdlaWdodDo1MDA7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW19''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZTpob3Zlcntib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiM0OTVhNjc7Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1pY29uLmJ0bi1kaW1tZWR7Y29sb3I6IzcyOTVhZX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0''@;'; put 'put ''bi5idG4taWNvbi5idG4tZGltbWVke2NvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4uYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzE0MzUxfS5odE1vYmlsZUVkaXRvckNvbnRhaW5lciAu''@;'; put 'put ''aW5wdXRzIHRleHRhcmVhe2ZvbnQtc2l6ZToxM3B0O2JvcmRlcjoycHggc29saWQgIzQ4NTk2Nztib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3gtc2hhZG93Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MCAwIDAgMTRweDtwYWRkaW5nOjdwdDt3aWR0''@;'; put 'put ''aDoyOTBweH0uaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLnBvc2l0aW9uQ29udHJvbHN7d2lkdGg6MzMzcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB0O3RvcDo1MHB4O2JvdHRvbTowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5odE1vYmlsZUVkaXRvckNvbnRh''@;'; put 'put ''aW5lci5hY3RpdmV7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTIwcHg7d2lkdGg6MzUwcHh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC53dEJvcmRlcntiYWNrZ3JvdW5kLWNvbG9yOiM0OTVhNjchaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuaHRfbWFzdGVyIHRyOm50aC1vZi10eXBl''@;'; put 'put ''KG9kZCk+dGR7ZmlsdGVyOmJyaWdodG5lc3MoLjk3KX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmh0X21hc3RlciAuaHREaW1tZWR7Y29sb3I6IzM3MzczNyFpbXBvcnRhbnQ7ZmlsdGVyOmJyaWdodG5lc3MoMSkhaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXIgdHI6''@;'; put 'put ''bnRoLW9mLXR5cGUob2RkKT50ZHtmaWx0ZXI6YnJpZ2h0bmVzcygxLjIpfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXI6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGUgdGJvZHkgdHIgdGgsYm9keVtjZHMtdGhlbWU9ZGFya10gLmh0X21hc3Rlcjpub3QoLmVtcHR5Q29s''@;'; put 'put ''dW1ucyl+LmhhbmRzb250YWJsZTpub3QoLmh0X2Nsb25lX3RvcCkgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGR7YmFja2dyb3VuZC1jb2xvcjojMmQ0MDQ4O2JvcmRlci1jb2xvcjojNjk3Yzg1fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgdGQsYm9keVtjZHMtdGhlbWU9ZGFy''@;'; put 'put ''a10gLmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0aCxib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRkLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmhhbmRzb250YWJsZS5odF9jbG9uZV90b3AgLnd0SGlkZXJ7Ym9yZGVy''@;'; put 'put ''LWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtiYWNrZ3JvdW5kLWNvbG9yOiMzYzU2NjI7Ym9yZGVyLWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZUlucHV0e2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''IzcwOGI5OH0uaGFuZHNvbnRhYmxlIC5oYW5kc29udGFibGUuaHRfY2xvbmVfdG9wIC53dEhpZGVye3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjA7Ym9yZGVyLWJvdHRvbTozcHggc29saWQgI2Q2ZDNkM31ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbnRlbnQtY29udGFpbmVye2JhY2tn''@;'; put 'put ''cm91bmQ6I2Y1ZjZmZn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTttYXJnaW46MDttYXJnaW4tdG9w''@;'; put 'put ''OjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1MHB4fS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290LC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZC1mb290e2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6MS41cmVtO3BhZGRp''@;'; put 'put ''bmc6MCAuNXJlbTtsaW5lLWhlaWdodDpjYWxjKDEuNXJlbSAtIDNweCk7Zm9udC1zaXplOi40NTgzM3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjB9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciwuZGF0''@;'; put 'put ''YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQtZm9vdGVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjMwcHg7dG9wOjFweH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQgLmRhdGFncmlkLWhlYWQsLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfS5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDttYXJnaW4tdG9wOi4wODMzMzNyZW07ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOi41cmVtIDA7Ym9y''@;'; put 'put ''ZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6MCAxcHggLjEyNXJlbSAjNzM3MzczNDA7bWluLXdpZHRoOjVyZW07bWF4LXdpZHRoOjE1cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9LnRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBh''@;'; put 'put ''cmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MDttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGh7Zm9udC1zaXplOi40NTgzM3JlbTtmb250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNpbmc6LjAz''@;'; put 'put ''ZW07dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXJ7bWluLWhlaWdodDowcHg7cG9zaXRpb246cmVsYXRpdmV9aG9tZS1jb21wb25lbnQgY2xy''@;'; put 'put ''LXRyZWUtbm9kZSBidXR0b257d2hpdGUtc3BhY2U6bm93cmFwfWhvbWUtY29tcG9uZW50IC5jYXJkLWJsb2Nre2hlaWdodDoxMDAlO3BhZGRpbmc6MH1ob21lLWNvbXBvbmVudCAubm8tdGFibGUtc2VsZWN0ZWR7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjEwMCV9aG9tZS1jb21wb25lbnQg''@;'; put 'put ''LnNwaW5uZXItd3JhcHBlci1mdWxscGFnZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlzLWluZm97ZmlsbDojNmE5MjM1fWFwcC1zaWRlYmFyIC5j''@;'; put 'put ''bHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2e3dpZHRoOjI3MnB4O21pbi13aWR0aDoyNzJweDtoZWlnaHQ6MTAwJTttYXgtd2lkdGg6Mzc1cHg7cG9zaXRpb246cmVsYXRpdmU7''@;'; put 'put ''Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAxZn1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2IC5zdW4tZHJvcGRvd257bWluLWhlaWdodDozNnB4fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmVle2hlaWdodDoxMDAlO292ZXJmbG93LXk6YXV0b31hcHAtc2lkZWJh''@;'; put 'put ''ciBjbHItdmVydGljYWwtbmF2LmNsb3NlZHttYXJnaW4tbGVmdDotMjcycHh9YXBwLXNpZGViYXIgY2xyLXZlcnRpY2FsLW5hdiAucmVzaXplLWhhbmRsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDotM3B4O2JvcmRlci1yaWdodDo0cHggc29saWQgIzgwYjQ0MTtj''@;'; put 'put ''dXJzb3I6Y29sLXJlc2l6ZTtvcGFjaXR5OjA7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2UtaW4tb3V0fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLnJlc2l6ZS1oYW5kbGU6aG92ZXJ7b3BhY2l0eTouNX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2IC5yZXNpemUtaGFuZGxlLnJl''@;'; put 'put ''c2l6aW5ne29wYWNpdHk6MX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2LnJlc2l6aW5ne3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLm5hdi1kaXZpZGVye2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNkM2QzZDM7bWFyZ2luLWJvdHRvbTowfWFwcC1z''@;'; put 'put ''aWRlYmFyIC5wYWdlLXRpdGxle21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3RleHQtYWxpZ246Y2VudGVyfWFwcC1zaWRlYmFyIC56ZXJvLW1hcmdpbnttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLnVzZXItbmF2LWJ0bntwYWRkaW5nOjAgMnB4fWFwcC1zaWRlYmFyICNzaWRlYmFy''@;'; put 'put ''TmF2e3otaW5kZXg6MjAwfUBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCl7YXBwLXNpZGViYXIgI3NpZGViYXJOYXZ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7dG9wOjB9fWFwcC14bG1hcCAuY2FyZHttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpj''@;'; put 'put ''b2x1bW59YXBwLXhsbWFwIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNlOm5vd3JhcH1hcHAteGxtYXAgLm5vLXRhYmxlLXNlbGVjdGVke3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC14bG1hcCAuaGVhZGVyLXJvdyAudGl0bGUtY29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50''@;'; put 'put ''ZXJ9YXBwLXhsbWFwIC5oZWFkZXItcm93IC5vcHRpb25zLWNvbHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC14bG1hcCAuc3d7bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfWFwcC14bG1hcCAudmlld2VyVGl0bGV7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLXhs''@;'; put 'put ''bWFwIC5jYXJkRmxleHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn1hcHAteGxtYXAgLmNvbnRlbnQtYXJlYXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC14bG1hcCBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOiMz''@;'; put 'put ''MDZiMDA2ZX1hcHAteGxtYXAgLmRyb3AtYXJlYXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoxcHg7Ym9yZGVyOjJweCBkYXNoZWQgI2ZmZjt6LWluZGV4Oi0xfWFwcC14bG1hcCAuZHJvcC1hcmVhIHNwYW57Zm9udC1z''@;'; put 'put ''aXplOjIwcHg7bWFyZ2luLXRvcDoyMHB4O2NvbG9yOiNmZmZ9YXBwLW11bHRpLWRhdGFzZXQgLm5vLXRhYmxlLXNlbGVjdGVke2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjB9YXBwLW11bHRpLWRhdGFzZXQgLmhlYWRlci1yb3d7cGFkZGluZzoxNXB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2QzZDNkM31h''@;'; put 'put ''cHAtbXVsdGktZGF0YXNldCAuZGF0YXNldC1pbnB1dC13cmFwcGVye21heC13aWR0aDo1MDBweDt3aWR0aDoxMDAlfWFwcC1tdWx0aS1kYXRhc2V0IC5kYXRhc2V0LWlucHV0LXdyYXBwZXIgdGV4dGFyZWF7bWluLWhlaWdodDoyMDBweDtoZWlnaHQ6MjAwcHh9YXBwLW11bHRpLWRhdGFzZXQg''@;'; put 'put ''LnN1Ym1pdC1yZWFzb257bWluLWhlaWdodDo3MHB4O21heC1oZWlnaHQ6NzBweDtoZWlnaHQ6NzBweH1hcHAtbXVsdGktZGF0YXNldCAubG9nLXdyYXBwZXJ7bWFyZ2luOjAgMTBweDtoZWlnaHQ6YXV0b31hcHAtbXVsdGktZGF0YXNldCAuZGF0YXNldC1zZWxlY3Rpb24tYWN0aW9uc3tib3Jk''@;'; put 'put ''ZXItdG9wOjFweCBzb2xpZCAjZDNkM2QzfWFwcC1tdWx0aS1kYXRhc2V0IC5saWNlbmNlLWxpbWl0LW5vdGljZXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayl9YXBwLW11bHRpLWRhdGFzZXQgLnN1Ym1pc3Npb24tcmVzdWx0c3tib3JkZXItYm90dG9tOjFweCBz''@;'; put 'put ''b2xpZCAjZDNkM2QzfXRkLm5vdC1tYXRjaGVke2JhY2tncm91bmQtY29sb3I6I2ZmMDAwMDU0fWFwcC1zdWJtaXR0ZWQgLm5vQm9yZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50IWltcG9ydGFudH1hcHAtc3VibWl0dGVkIC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxl''@;'; put 'put ''ZnQ+LnRvb2x0aXAtY29udGVudCxhcHAtc3VibWl0dGVkIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdHtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fWFwcC1zdWJtaXR0ZWQgLnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250''@;'; put 'put ''ZW50OmJlZm9yZSxhcHAtc3VibWl0dGVkIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdDpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9YXBwLXN1Ym1pdHRlZCAu''@;'; put 'put ''bm8tc3VibWl0dGVkLXRhYmxlc3toZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX1hcHAtYXBwcm92ZSAuY29sdW1uLWNlbnRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1hcHByb3ZlIC5k''@;'; put 'put ''YXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGV7b3V0bGluZTpub25lIWltcG9ydGFudH1hcHAtYXBwcm92ZSAubGlua3N7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfWFwcC1hcHByb3ZlIC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LnRv''@;'; put 'put ''b2x0aXAtY29udGVudCxhcHAtYXBwcm92ZSAudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnR7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH1hcHAtYXBwcm92ZSAudG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3Jl''@;'; put 'put ''LGFwcC1hcHByb3ZlIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdDpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9YXBwLWFwcHJvdmUgLm5vQm9yZGVye2JvcmRl''@;'; put 'put ''ci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50IWltcG9ydGFudH1hcHAtYXBwcm92ZSAuYXBwcm92YWxzLWxpc3Qtd3JhcHBlcntoZWlnaHQ6NzB2aDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''fWFwcC1hcHByb3ZlIC5ub2FwcHJvdmFscy1pbmZvLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX1hcHAtaGlzdG9yeSAucmVqZWN0ZWR7''@;'; put 'put ''Y29sb3I6I2Y4MzEyNjtmb250LXdlaWdodDo3MDB9YXBwLWhpc3RvcnkgLmFjY2VwdGVke2NvbG9yOiMzZmM0MjQ7Zm9udC13ZWlnaHQ6NzAwfWFwcC1oaXN0b3J5IC5oc0NlbGx7ZGlzcGxheTpmbGV4IWltcG9ydGFudDtmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50O2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpjZW50ZXIhaW1wb3J0YW50O2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnQ7cGFkZGluZzo3cHh9YXBwLWhpc3RvcnkgLmJ0Q2VsbHtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fWFwcC1oaXN0b3J5IC52ZXJDZW50ZXJ7''@;'; put 'put ''ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt3b3JkLWJyZWFrOmJyZWFrLWFsbH1hcHAtaGlzdG9yeSAubG9hZC1tb3JlIGlucHV0e3dpZHRoOjkwcHh9YXBwLWhpc3RvcnkgI25vRGF0YUNvbnRhaW5lcntoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX1hcHAtaGlzdG9yeSAudGFi''@;'; put 'put ''bGUtbGlua3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2ZvbnQtd2VpZ2h0OjcwMH1hcHAtdmlld2VyIC5jYXJke21hcmdpbi10b3A6MDtmbGV4OjE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1hcHAtdmlld2VyIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNl''@;'; put 'put ''Om5vd3JhcH1hcHAtdmlld2VyIC50b2dnbGUtc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlv''@;'; put 'put ''bi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn1hcHAtdmlld2VyIC5oZWFkZXItcm93IC50aXRsZS1jb2x7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtdmlld2VyIC5oZWFkZXItcm93IC5vcHRpb25zLWNvbHtkaXNwbGF5OmZsZXg7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmZsZXgtZW5kO2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtdmlld2VyIC5zd3ttYXJnaW46MXJlbSAwcmVtIC41cmVtIDFyZW19YXBwLXZpZXdlciAuaW5mb0JhcnttYXJnaW4tdG9wOjEwcHg7YmFja2dyb3VuZDojNDk1OTY3O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7cGFk''@;'; put 'put ''ZGluZzozcHg7Zm9udC1zaXplOjE2cHh9YXBwLXZpZXdlciAuZmlsdGVyU2lkZXttYXJnaW4tdG9wOjI2cHg7bWFyZ2luLWJvdHRvbToxOXB4fWFwcC12aWV3ZXIgLm9wdGlvbnMtZHJvcGRvd24gY2xyLWljb257bWFyZ2luLXJpZ2h0OjVweH1hcHAtdmlld2VyIC5kcm9wZG93bi1tZW51e3dp''@;'; put 'put ''ZHRoOjE4MHB4O21hcmdpbi10b3A6LTE4cHg7cGFkZGluZzowfWFwcC12aWV3ZXIgLmRyb3Bkb3duLW1lbnUgLmJ0bnt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9YXBwLXZpZXdlciAuY2FyZEZsZXh7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9YXBwLXZpZXdl''@;'; put 'put ''ciAubm9EYXRhe2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleDoxfWFwcC12aWV3ZXIgLmZpbHRlckJ0bntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC12aWV3ZXIg''@;'; put 'put ''LmVkaXRCdG57ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fWFwcC12aWV3ZXIgLmJ0blZpZXd7bWFyZ2luOjAhaW1wb3J0YW50fWFwcC12aWV3ZXIgLmNvbnRlbnQtYXJlYXtwYWRkaW5nOi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246''@;'; put 'put ''Y29sdW1ufWFwcC12aWV3ZXIgLmRvd25sb2FkLXNlbGVjdCAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fWFwcC12aWV3ZXIgLnJlZnJlc2gtdGFibGV7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fWFwcC12aWV3ZXIgLmxpYmluZm97cGFkZGlu''@;'; put 'put ''ZzoxMHB4IDIwcHg7b3ZlcmZsb3c6YXV0b31hcHAtdmlld2VyIGhvdC10YWJsZSAuaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxlLGFwcC12aWV3ZXIgaG90LXRhYmxlIC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodC5w''@;'; put 'put ''cmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZC1jb2xvcjojMzA2YjAwYjAhaW1wb3J0YW50fWFwcC12aWV3ZXIgaG90LXRhYmxlIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZC1jb2xvcjojMzA2YjAwNmUhaW1wb3J0YW50fWFwcC12aWV3ZXIgLm5vLXRhYmxlLXNlbGVj''@;'; put 'put ''dGVkLWluZm97YmFja2dyb3VuZDpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC12aWV3ZXIgLndlYi1xdWVyeXttYXgtaGVpZ2h0OjM1dmh9YXBwLXZpZXdlciAud2ViLXF1ZXJ5IC53ZWItcXVlcnktdGV4dHttaW4taGVpZ2h0''@;'; put 'put ''OjEwMHB4O21heC1oZWlnaHQ6MTAwcHg7d2lkdGg6MTAwJSFpbXBvcnRhbnR9YXBwLXZpZXdlciAud2ViLXF1ZXJ5IC53ZWItcXVlcnktd3JhcHBlciAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLXZpZXdlciAud2ViLXF1ZXJ5IC53ZWItcXVlcnktd3JhcHBlciBjbHIt''@;'; put 'put ''dGV4dGFyZWEtY29udGFpbmVye21hcmdpbjowIWltcG9ydGFudH1hcHAtdmlld2VyIC53ZWItcXVlcnkgLndlYi1xdWVyeS13cmFwcGVyIC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXZpZXdlciAudGFibGUtc2VhcmNoLXdyYXBwZXJ7bWFyZ2luLWxlZnQ6''@;'; put 'put ''MH1hcHAtdmlld2VyIC50YWJsZS1zZWFyY2gtd3JhcHBlciBmb3Jte3BhZGRpbmctbGVmdDowfWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pY29ue21hcmdpbi10b3A6NHB4fWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7''@;'; put 'put ''bWFyZ2luLXRvcDowfWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVyIC5jbHItY29udHJvbC1jb250YWluZXJ7bWFyZ2luLWxlZnQ6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7YXBwLXZpZXdlciAuZmlsdGVyQnRue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6Y2VudGVyfWFwcC12aWV3ZXIgLmVkaXRCdG57ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOiA1NzZweCl7YXBwLXZpZXdlciAucm93e21hcmdpbi1yaWdodDowcmVtO21hcmdpbi1sZWZ0OjByZW19fWFwcC1ncm91cCAuc2lkZWJh''@;'; put 'put ''ci1oZWlnaHR7aGVpZ2h0OjEwMCV9YXBwLWdyb3VwIC5ncm91cC1pbmZvLXRleHR7ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9YXBwLWdyb3VwIC5ncm91cC1pbmZve2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBwLWdyb3VwIC5ncm91cC1pbmZvIHRke3RleHQt''@;'; put 'put ''YWxpZ246Y2VudGVyfWFwcC1ncm91cCAuZ3JvdXAtZGF0YXtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fWFwcC1ncm91cCAuZ3JvdXAtZGF0YXttaW4taGVpZ2h0OmF1dG99YXBwLWdyb3VwIC5ncm91cC1kYXRhIGgzLGFwcC1ncm91cCAuZ3JvdXAtZGF0YSBoNXt0ZXh0LWFs''@;'; put 'put ''aWduOmNlbnRlcn1hcHAtZ3JvdXAgLmdyb3VwLWRhdGEgLm1lbWJlci10YWJsZXt3aWR0aDoxMDAlfWFwcC1ncm91cCAuZ3JvdXAtZGF0YSAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2N1cnNvcjpwb2ludGVyfWFwcC1ncm91cCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99''@;'; put 'put ''QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC1ncm91cCAuZ3JvdXAtZGF0YXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWdyb3VwIC5ncm91cC1pbmZve2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29s''@;'; put 'put ''b3I6IzMxNDM1MX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtZ3JvdXAgLmdyb3VwLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1ncm91cCAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6IzI5NDA0Yn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWdyb3VwIC5ncm91cC1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAt''@;'; put 'put ''Z3JvdXAgLmdyb3VwLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1ncm91cCAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6I2U2ZTZlNn1hcHAtdXNlciAuc2lkZWJhci1oZWlnaHR7aGVpZ2h0OjEwMCV9YXBwLXVzZXIgLnVzZXItaW5mby10ZXh0e2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fWFwcC11c2VyIC51c2VyLWluZm97Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH1hcHAt''@;'; put 'put ''dXNlciAudXNlci1pbmZvIHRke3RleHQtYWxpZ246Y2VudGVyfWFwcC11c2VyIC51c2VyLWRhdGF7Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH1hcHAtdXNlciAudXNlci1kYXRhe21pbi1oZWlnaHQ6YXV0b31hcHAtdXNlciAudXNlci1kYXRhIGgzLGFwcC11c2VyIC51c2Vy''@;'; put 'put ''LWRhdGEgaDV7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLXVzZXIgLnVzZXItdGFibGV7d2lkdGg6MTAwJX1hcHAtdXNlciAudXNlci10YWJsZSB0aGVhZHtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9YXBwLXVzZXIgLnVzZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9YXBw''@;'; put 'put ''LXVzZXIgLndpZHRoLTUwe3dpZHRoOjUwJX1hcHAtdXNlciAud2lkdGgtMzN7d2lkdGg6MzMlfWFwcC11c2VyIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdodDo1MDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7YXBwLXVzZXIgLnVz''@;'; put 'put ''ZXItZGF0YXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItZGF0YXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjk0MDRifWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci1p''@;'; put 'put ''bmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci1kYXRhe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdh''@;'; put 'put ''Nztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9YXBwLXJlcXVlc3RzLW1vZGFsey0tbGluZS1oZWlnaHQ6IDE2cHg7LS1saW5lLXRvcDog''@;'; put 'put ''MHB4fWFwcC1yZXF1ZXN0cy1tb2RhbCAubG9nLXdyYXBwZXIuc2FzbG9ne3Bvc2l0aW9uOnJlbGF0aXZlO3doaXRlLXNwYWNlOnByZTtmb250LWZhbWlseTptb25vc3BhY2V9YXBwLXJlcXVlc3RzLW1vZGFsIC5sb2ctd3JhcHBlci5zYXNsb2cgLmhpZ2hsaWdodGVkLWxpbmV7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjojZmYwM31hcHAtcmVxdWVzdHMtbW9kYWwgLmxpbmUtaGlnaGxpZ2h0LW92ZXJsYXl7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZTthbmltYXRpb246ZmFkZU91dCAzcyBmb3J3YXJkczt6LWluZGV4OjEwfWFwcC1yZXF1ZXN0''@;'; put 'put ''cy1tb2RhbCAudGVtcC1oZWlnaHQtc2V0dGVye2hlaWdodDp2YXIoLS1saW5lLWhlaWdodCl9YXBwLXJlcXVlc3RzLW1vZGFsIC5saW5lLXBvc2l0aW9uLXNldHRlcnt0b3A6dmFyKC0tbGluZS10b3ApfWFwcC1yZXF1ZXN0cy1tb2RhbCAudGVtcC1saW5lLWhlaWdodC1jYWxje3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuO2hlaWdodDphdXRvfWFwcC1yZXF1ZXN0cy1tb2RhbCAuZXJyb3ItaGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2YwMDN9YXBwLXJlcXVlc3RzLW1vZGFsIC53YXJuaW5nLWhpZ2hsaWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjAzfUBrZXlm''@;'; put 'put ''cmFtZXMgZmFkZU91dHswJXtvcGFjaXR5OjF9NzAle29wYWNpdHk6MX10b3tvcGFjaXR5OjB9fWFwcC1yZXF1ZXN0cy1tb2RhbCAuaGlnaGxpZ2h0ZWQtbGluZXtiYWNrZ3JvdW5kLWNvbG9yOiM2MWEyMjAyYn1hcHAtcmVxdWVzdHMtbW9kYWwgLmVycm9yLWxpbmV7Y29sb3I6I2UxMjIwMH1h''@;'; put 'put ''cHAtcmVxdWVzdHMtbW9kYWwgLndhcm5pbmctbGluZXtjb2xvcjojZjJhZjAwfWFwcC1yZXF1ZXN0cy1tb2RhbCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNGU0ZTQ7cGFkZGluZzowIDAgLjVyZW07bWFyZ2luLWJvdHRvbTo1cHh9YXBwLXJl''@;'; put 'put ''cXVlc3RzLW1vZGFsIC5kcm9wZG93bi1pdGVtLnNlbGVjdGVke2JhY2tncm91bmQ6I2Q4ZTNlOX1hcHAtcmVxdWVzdHMtbW9kYWwgLm5vLXJlcXN7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTAxOTYwNzg0Myk7cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246Y2VudGVyfS5y''@;'; put 'put ''ZXF1ZXN0cy1tb2RhbCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0ucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWNvbnRlbnR7cGFkZGluZzoyMHB4IDEwcHggNXB4fS53b3JrLXRhYmxlcy1kcm9wZG93''@;'; put 'put ''biBidXR0b257Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yLCAjOGM4YzhjKSFpbXBvcnRhbnR9LnN0YWNrLXZpZXd7aGVpZ2h0OmF1dG8haW1wb3J0YW50O21hc2staW1hZ2U6bm9uZSFpbXBvcnRhbnQ7LXdlYmtpdC1tYXNrLWltYWdlOm5vbmUhaW1wb3J0YW50fS5jb250ZW50IGNs''@;'; put 'put ''ci1pY29ue21hcmdpbi1ib3R0b206NXB4fS5jb250ZW50IHByZXt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDttYXgtaGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6dmlzaWJsZTtib3JkZXI6MH0uY29udGVudCAuc3RhY2stYmxvY2stbGFiZWx7d2lkdGg6MTAwJTtw''@;'; put 'put ''YWRkaW5nLWxlZnQ6LjZyZW0haW1wb3J0YW50fS5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stdmlldy1rZXl7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZXJyLWxpbmtzIC5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWF4LWhlaWdodDo1NXB4O292ZXJmbG93OmF1dG99YXBwLXN5''@;'; put 'put ''c3RlbSAuY29udGVudC1ib3h7bWF4LXdpZHRoOjEyODlweH1hcHAtc3lzdGVtIC5zeXMtaW5mbz5kaXZ7ZmxleDoxfWFwcC1zeXN0ZW0gLnN5cy1pbmZvIGRpdjpudGgtY2hpbGQoMil7bWFyZ2luOjAgMzBweH1hcHAtc3lzdGVtIC5hZG1pbi1hY3Rpb24sYXBwLXN5c3RlbSAudXNlci1hY3Rp''@;'; put 'put ''b257ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjVweCAxMHB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoxcHggc29saWQgI2RlZGVkZTttYXJnaW4tYm90dG9tOjVweH1hcHAtc3lzdGVtIC5hZG1pbi1hY3Rp''@;'; put 'put ''b24gYnV0dG9uLGFwcC1zeXN0ZW0gLnVzZXItYWN0aW9uIGJ1dHRvbnttaW4td2lkdGg6MTAycHh9YXBwLXN5c3RlbSAuZGFya3tmb250LXdlaWdodDo3MDA7bWFyZ2luLWxlZnQ6NXB4fUBtZWRpYSAobWF4LXdpZHRoOiA5OTNweCl7YXBwLXN5c3RlbSAuc3lzLWluZm8gZGl2Om50aC1jaGls''@;'; put 'put ''ZCgyKXttYXJnaW46MH1hcHAtc3lzdGVtIC5zeXMtaW5mbyBkaXZ7bWFyZ2luOjIwcHggMH19YXBwLXF1ZXJ5IC5jb250ZW50e2Rpc3BsYXk6ZmxleH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLXF1''@;'; put 'put ''ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLWxvZ2lje2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjE1cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1''@;'; put 'put ''ZXJ5e3BhZGRpbmc6MzBweCAwIDIwcHggMjBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246cmVsYXRpdmV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5Pi5jbHItcm93''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeT4uY2xyLXJvdzpub3QoOmxhc3QtY2hpbGQpe3BhZGRpbmctYm90dG9tOjE1cHg7bWFyZ2luLWJvdHRvbToxNXB4O2JvcmRlci1ib3R0b206MXB4''@;'; put 'put ''IHNvbGlkIHJnYmEoMCwwLDAsLjE2KX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7Y29sb3I6Z3JheX1hcHAtcXVlcnkgLmNvbnRl''@;'; put 'put ''bnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhcmlhYmxlLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YXJpYWJs''@;'; put 'put ''ZS1jb2wgLmRhdGFsaXN0LXdyYXBwZXJ7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhcmlhYmxlLWNvbCAuZGF0YWxpc3Qtd3JhcHBlciBpbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1j''@;'; put 'put ''b250YWluZXIgLmNsYXVzZS1xdWVyeSAub3BlcmF0b3ItY29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAub3BlcmF0b3ItY29sIGNsci1zZWxlY3QtY29udGFpbmVye2hlaWdo''@;'; put 'put ''dDo0NXB4O21hcmdpbi10b3A6MDt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3BhZGRpbmctYm90dG9tOjFweH1hcHAtcXVlcnkgLmNvbnRl''@;'; put 'put ''bnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY2hlY2tib3gtdmFsc3t3aWR0aDoxMDAlO3BhZGRpbmc6MCA1cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMyl9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAu''@;'; put 'put ''Y2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNoZWNrYm94LXZhbHMgY2xyLWNoZWNrYm94LWNvbnRhaW5lcnttYXJnaW4tdG9wOjB9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNoZWNrYm94LXZhbHMgc2VjdGlvbnttYXgt''@;'; put 'put ''aGVpZ2h0OjEyMHB4O292ZXJmbG93LXk6c2Nyb2xsfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFsc3t3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNs''@;'; put 'put ''YXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnNpbmdsZS1maWVsZC12YWxzIC5jbHItY29u''@;'; put 'put ''dHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQt''@;'; put 'put ''d3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnNpbmdsZS1maWVsZC12YWxzPmlucHV0e3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNv''@;'; put 'put ''bnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnNpbmdsZS1maWVsZC12YWxzIGlucHV0W3R5cGU9dGltZV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJh''@;'; put 'put ''bmdlLXZhbHN7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5l''@;'; put 'put ''ciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdl''@;'; put 'put ''LXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC5mcm9te21hcmdpbi1i''@;'; put 'put ''b3R0b206MTBweH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbT5pbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFs''@;'; put 'put ''dWUtY29sIC5yYW5nZS12YWxzIC5mcm9tIGlucHV0W3R5cGU9dGltZV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20sYXBwLXF1ZXJ5IC5j''@;'; put 'put ''b250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLnRve21pbi13aWR0aDoxMDBweH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbT5p''@;'; put 'put ''bnB1dCxhcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAudG8+aW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAu''@;'; put 'put ''cmFuZ2UtdmFscyAuZnJvbSBpbnB1dFt0eXBlPXRpbWVdLGFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC50byBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1x''@;'; put 'put ''dWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxze3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNvbnRhaW5zLXZhbHMgLmNs''@;'; put 'put ''ci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25l''@;'; put 'put ''fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRl''@;'; put 'put ''bnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscz5pbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIGlucHV0W3R5''@;'; put 'put ''cGU9dGltZV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC5jbGF1c2UtYnV0dG9uc3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDtmbGV4LWRpcmVjdGlvbjpy''@;'; put 'put ''b3c7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAuY2xhdXNlLWJ1dHRvbnMgYnV0dG9ue21pbi13aWR0aDphdXRvfWFwcC1xdWVyeSAuaW52YWxpZC1jbGF1c2V7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNkOTRi''@;'; put 'put ''MzF9YXBwLXF1ZXJ5IC5jbGF1c2Utcm93IGNsci1pY29ue21hcmdpbjowfWFwcC1xdWVyeSAuY2xhdXNlLXJvdzphZnRlcntwb3NpdGlvbjpyZWxhdGl2ZTtjb250ZW50OiIiO2hlaWdodDouNDE2NjdyZW07d2lkdGg6LjQxNjY3cmVtO3RvcDouMjkxNjdyZW07cmlnaHQ6LjI1cmVtO2JhY2tn''@;'; put 'put ''cm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZ1wyMDI2JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMwJTJDMSUyQzElMkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmcl''@;'; put 'put ''M0UlMEEpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luOjB9YXBwLXF1ZXJ5IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjhweDttYXJnaW46MDtib3JkZXItcmFkaXVzOjFweDtkaXNw''@;'; put 'put ''bGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLWhlaWdodDo2NnB4O3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1xdWVyeSBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gc3Bhbi5zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweDt0b3A6MTBw''@;'; put 'put ''eH1hcHAtcXVlcnkgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIGNvZGV7d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC1icmVhazpicmVhay13b3JkfWFwcC1xdWVyeSAuaW5wdXQtdmFse2JvcmRlcjowcHg7YmFja2dyb3VuZDojZmJmOGY4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9''@;'; put 'put ''YXBwLXF1ZXJ5IGNsci1kYXRlLWNvbnRhaW5lcnttYXJnaW4tdG9wOjJweCFpbXBvcnRhbnR9YXBwLXF1ZXJ5IGlucHV0W3R5cGU9dGltZV17Ym9yZGVyOjA7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjNiM2IzfWFwcC1xdWVyeSBpbnB1dFt0eXBl''@;'; put 'put ''PXRpbWVdOmZvY3Vze291dGxpbmU6bm9uZX1hcHAtcXVlcnkgLmluLXZhbHVlcy1tb2RhbCAubW9kYWwtZm9vdGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNkOGQ4ZDg7bWFyZ2luLXRvcDoxMHB4fWFwcC1xdWVyeSAucHJvZ3Jlc3MsYXBwLXF1ZXJ5IC5wcm9ncmVzcy1zdGF0aWN7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp0cmFuc3BhcmVudDt3aWR0aDoxMDAlO2hlaWdodDo0cHg7dG9wOjNweH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXF1ZXJ5IC5jbGF1c2UtbG9naWN7YmFja2dyb3VuZDojZTllOWU5fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtcXVlcnkgLmNsYXVzZS1xdWVyeXti''@;'; put 'put ''YWNrZ3JvdW5kOiNmYmY4Zjh9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXF1ZXJ5IC5saW5lLW51bWJlcnN7Ym9yZGVyLWNvbG9yOiM5ODk3OTchaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1xdWVyeSAuY2xhdXNlLWxvZ2lje2JhY2tncm91bmQ6IzE5MmEzMH1ib2R5W2Nk''@;'; put 'put ''cy10aGVtZT1kYXJrXSBhcHAtcXVlcnkgLmNsYXVzZS1xdWVyeXtiYWNrZ3JvdW5kOiMyNjNlNDh9YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHN7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZTBlMGUwfWFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGgyLGFwcC1sb2dpbiAuc2lk''@;'; put 'put ''ZUJhclByb3BzIGgzLGFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGg0LGFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGg1LGFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGlucHV0e2NvbG9yOiNlMGUwZTB9YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgYnV0dG9ue2JvcmRlci1jb2xvcjp3aGVhdCFpbXBv''@;'; put 'put ''cnRhbnR9YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgYXtjb2xvcjojZTBlMGUwfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxMDAwMH1h''@;'; put 'put ''cHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlcj4qe3BvaW50ZXItZXZlbnRzOmF1dG99YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXJ7d2lkdGg6NDAwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO2JhY2tncm91bmQ6''@;'; put 'put ''I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNkZGQ7cGFkZGluZzo0MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTQwMHB4KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2lue3ot''@;'; put 'put ''aW5kZXg6MTAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcn1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2luIC50aXRsZXtmb250LXNpemU6MzJweDtsZXR0ZXItc3BhY2luZzpu''@;'; put 'put ''b3JtYWw7bGluZS1oZWlnaHQ6MzZweH1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2luIC50aXRsZSAud2VsY29tZXttYXJnaW4tdG9wOjM2cHh9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXIgZm9y''@;'; put 'put ''bS5sb2dpbiAubG9naW4tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjQ4cHggMCAwfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFyIGZvcm0ubG9naW4gLmxvZ2luLWdyb3VwPip7bWFyZ2luOjZweCAwIDE4cHh9''@;'; put 'put ''YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZlIC5sb2dpbi1zaWRlYmFye3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7ei1pbmRleDoxMDF9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZlIC5vdmVybGF5e2Rpc3BsYXk6YmxvY2t9YXBwLWxvZ2luIC5s''@;'; put 'put ''b2dpbi1zaWRlYmFyLXdyYXBwZXIgLm92ZXJsYXl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2JhY2tncm91bmQ6IzIxMjEyMTgwO3otaW5kZXg6MTAwfWFwcC1sb2dpbiAubG9naW4tbG9nb3ttYXgtd2lkdGg6MjAwcHh9''@;'; put 'put ''LmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciwubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWlucHV0LWdyb3VwLC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC51c2VybmFtZSwubG9naW4t''@;'; put 'put ''c2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAucGFzc3dvcmR7d2lkdGg6MTAwJX0ubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWlucHV0LXdyYXBwZXIsLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgYnV0dG9ue21heC13aWR0aDpub25lfWFw''@;'; put 'put ''cC10ZXJtcyA6aG9zdHtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmNWY2ZmZ9YXBwLXRlcm1zIC5jbHItY2hlY2tib3gtd3JhcHBlci5kaXNhYmxlZHtvcGFjaXR5Oi41fWFwcC10ZXJtcyAuY2FyZHtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21hcmdp''@;'; put 'put ''bi10b3A6MH1hcHAtdGVybXMgLmNhcmQgLmNhcmQtYmxvY2t7ZmxleDoxO292ZXJmbG93OmF1dG99YXBwLXRlcm1zIC5hY2NlcHQtY2hlY2tib3h7cGFkZGluZzoxMHB4IDE1cHh9YXBwLWRlcGxveSAuY2FyZHttYXJnaW4tdG9wOjB9YXBwLWRlcGxveSAuYnRue21hcmdpbi10b3A6MTBweH1h''@;'; put 'put ''cHAtZGVwbG95IC5sb2ctd3JhcHBlcnt3aWR0aDoxMDAlO2JhY2tncm91bmQ6I2YwZjBmMDtib3JkZXI6MXB4IHNvbGlkICNjOWM5Yzk7cGFkZGluZzoxMHB4O292ZXJmbG93OmF1dG87d2hpdGUtc3BhY2U6cHJlLXdyYXB9YXBwLWRlcGxveSAjY29udGV4dHMtYnRue3BhZGRpbmc6M3B4IDAg''@;'; put 'put ''MDttaW4td2lkdGg6MzBweDttYXJnaW4tbGVmdDoxMHB4O2hlaWdodDozMHB4O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWRlcGxveSAudmFsaWRhdGlvbi1iYXJ7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6MjBweDth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXJ9YXBwLWRlcGxveSAudmFsaWRhdGlvbi1iYXIgY2xyLWljb257bWFyZ2luLXJpZ2h0OjVweH1hcHAtZGVwbG95IC5hdXRvZGVwbG95LXNlY3Rpb257cGFkZGluZzowIDE1cHh9YXBwLWRlcGxveSAuYXV0b2RlcGxveS1zZWN0aW9uIC5jbHItY2hlY2tib3gtd3Jh''@;'; put 'put ''cHBlcnttYXJnaW46MjBweCAwfWFwcC1kZXBsb3kgLmF1dG9kZXBsb3ktc2VjdGlvbiAuYnRuLWF1dG9kZXBsb3l7ZGlzcGxheTpibG9jazttYXJnaW46MTVweCAwfWFwcC1hbGVydHMgY2xyLWFsZXJ0c3tkaXNwbGF5OmJsb2NrfWFwcC1tYW51YWwtZGVwbG95IC5jbGVhci1tZW1vcnktYnV0''@;'; put 'put ''dG9ue3JpZ2h0OjEwcHg7dG9wOjJweH1hcHAtbGluZWFnZSAudG9nZ2xlLXN3aXRjaCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmJlZm9yZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBl''@;'; put 'put ''YXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9YXBwLWxpbmVhZ2UgI2dyYXBoe2hlaWdodDpjYWxjKDEwMHZoIC0gMTk1cHgpO292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7Ym9y''@;'; put 'put ''ZGVyOjFweCBzb2xpZCAjZTRlNGU0O21hcmdpbi10b3A6MTBweH1hcHAtbGluZWFnZSAuc2VsZWN0aW9uLXdyYXBwZXJ7d2lkdGg6MTAwJTttYXgtd2lkdGg6NjcwcHh9YXBwLWxpbmVhZ2UgLmNvbHVtbi1hY3RpdmV7YmFja2dyb3VuZDojZDhlM2U5O2NvbG9yOiMwMDB9YXBwLWxpbmVhZ2Ug''@;'; put 'put ''LmNvbnRlbnQtYXJlYXtwYWRkaW5nOi41cmVtIWltcG9ydGFudH1hcHAtbGluZWFnZSAuY29udGVudC1hcmVhIC5jYXJke21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDEyMHB4KX1hcHAtbGluZWFnZSAuY29udGVudC1hcmVhIC5jYXJkIC5jYXJkLWJsb2Nre3BhZGRpbmc6LjVyZW0gLjM1cmVt''@;'; put 'put ''IWltcG9ydGFudH1hcHAtbGluZWFnZSBjbHItdHJlZS1ub2RlIGJ1dHRvbnt3aGl0ZS1zcGFjZTpub3dyYXB9YXBwLWxpbmVhZ2UgLmJ0bi1ncm91cC5kaXJlY3Rpb257bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX1hcHAtbGluZWFnZSAuZ3JhcGgtcmVuZGVyLXNwaW5u''@;'; put 'put ''ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjEwcHh9YXBwLWxpbmVhZ2UgLmJpZ2xpbmVhZ2Utcm93e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGln''@;'; put 'put ''bi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToyMHB4fWFwcC1saW5lYWdlIC5tb2RhbC1mb290ZXIgcHttYXJnaW46MH1hcHAtbGluZWFnZSAubGluZWFnZS10aXRsZS13cmFwcGVye2xlZnQ6MTJweH1hcHAtbGluZWFnZSAubWF4LWRlcHRoLWlucHV0e3dpZHRoOjEwMCV9QG1lZGlhICht''@;'; put 'put ''YXgtd2lkdGg6IDc2OHB4KXthcHAtbGluZWFnZSAudG9nZ2xlLXN3aXRjaC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToyMHB4fX1kYy10cmVlIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNlOm5vd3JhcH1kYy10cmVlIGNsci10cmVlIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29u''@;'; put 'put ''dGFpbmVyOmZvY3VzIC5jbHItdHJlZW5vZGUtbGlua3tiYWNrZ3JvdW5kOiNlOGU4ZTg7YmFja2dyb3VuZDp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yLCAjZThlOGU4KTt0ZXh0LWRlY29yYXRpb246bm9uZX1hcHAtbWV0YWRhdGEgLm9iamVjdHMtY29se2hlaWdodDo3NXZoO292''@;'; put 'put ''ZXJmbG93OnNjcm9sbDtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJhZGl1czo0cHh9YXBwLW1ldGFkYXRhIC5jb2xzLWhlYWR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO3BhZGRpbmc6MTBweDtkaXNwbGF5OmZsZXh9YXBwLW1ldGFkYXRhIC5vYmplY3QtdGV4dHtkaXNwbGF5''@;'; put 'put ''OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tbGVmdDoxMHB4O2ZsZXg6MX1hcHAtbWV0YWRhdGEgLnJlcG8tZHJvcGRvd257bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjEwcHh9''@;'; put 'put ''YXBwLW1ldGFkYXRhIC5jbHItYWNjb3JkaW9uLXRpdGxle3dpZHRoOjEwMCV9YXBwLW1ldGFkYXRhIC5mbG9hdC1yaWdodHttYXJnaW46MDtmbG9hdDpyaWdodH1hcHAtbWV0YWRhdGEgLmZ1bGwtd2lkdGh7d2lkdGg6MTAwJX1hcHAtbWV0YWRhdGEgLm9iamVjdC11cml7bWFyZ2luOjVweCAw''@;'; put 'put ''IDB9YXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZy1sZWZ0OjNweDtwYWRkaW5nLXJpZ2h0OjNweH1hcHAtbWV0YWRhdGEgLm9iamVjdC1oZWFkZXI6aG92ZXJ7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czozcHh9YXBwLW1ldGFkYXRhIC5kYXRhZ3JpZC1ob3N0e2Rpc3BsYXk6dW5zZXQhaW1wb3J0YW50fWFwcC1tZXRhZGF0YSAuY2FyZHttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLW1ldGFkYXRhIC5jb250ZW50LWFy''@;'; put 'put ''ZWF7cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtbWV0YWRhdGEgLm9iamVjdC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDA1NTYwfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBh''@;'; put 'put ''cHAtbWV0YWRhdGEgLm9iamVjdHMtY29se2JhY2tncm91bmQ6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Q4ZTNlOX1hcHAtbGljZW5zaW5ne2hlaWdodDpjYWxjKDEwMCUgLSA5NnB4KTtwYWRk''@;'; put 'put ''aW5nOjIwcHh9YXBwLWxpY2Vuc2luZyAuY2FyZHttYXJnaW4tdG9wOjB9YXBwLWxpY2Vuc2luZyAua2V5LWVycm9ye2ZvbnQtc2l6ZToxNnB4fWFwcC1saWNlbnNpbmcgLm1pc3NrZXl7Y29sb3I6I2U3NGMzY31hcHAtbGljZW5zaW5nIC5saWNlbnNlLWtleS1mb3JtLGFwcC1saWNlbnNpbmcg''@;'; put 'put ''LmFjdGl2YXRpb24ta2V5LWZvcm17cGFkZGluZzowfWFwcC1saWNlbnNpbmcgLmxpY2Vuc2Uta2V5LWZvcm0gLmNsci1jb250cm9sLWNvbnRhaW5lcixhcHAtbGljZW5zaW5nIC5hY3RpdmF0aW9uLWtleS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX1hcHAtbGljZW5z''@;'; put 'put ''aW5nIC5saWNlbnNlLWtleS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEsYXBwLWxpY2Vuc2luZyAuYWN0aXZhdGlvbi1rZXktZm9ybSAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7aGVpZ2h0OjE3MHB4O21heC1oZWlnaHQ6MTcwcHg7bWlu''@;'; put 'put ''LWhlaWdodDoxNzBweDtyZXNpemU6bm9uZX1hcHAtbGljZW5zaW5nIC5hcHBseS1rZXlze2hlaWdodDo0MHB4fWFwcC1saWNlbnNpbmcgLmRyb3AtYXJlYXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzoxNXB4O2JvcmRlcjoy''@;'; put 'put ''cHggZGFzaGVkICNiMmIyYjI7Ym9yZGVyLXJhZGl1czo0cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjEwcHggMH1hcHAtbGljZW5zaW5nIGNsci10YWJzIGJ1dHRvbntib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fWFwcC12aWV3Ym94ZXMgLmxpY2VuY2Utbm90aWNle2ZvbnQtc2l6ZToxNHB4''@;'; put 'put ''O2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTouNn1hcHAtdmlld2JveGVzIGNsci1tb2RhbC5yb290LW1vZGFse3otaW5kZXg6MTMwMH1hcHAtdmlld2JveGVzIGNsci1tb2RhbC5yb290LW1vZGFsIC5tb2RhbC1ib2R5LXdyYXBwZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpfWFwcC12aWV3Ym94''@;'; put 'put ''ZXMgY2xyLW1vZGFsLnJvb3QtbW9kYWwgLm1vZGFsLWNvbnRlbnR7aGVpZ2h0Ojgwdmh9YXBwLXZpZXdib3hlcyBjbHItbW9kYWwucm9vdC1tb2RhbCAubW9kYWwtYm9keXttYXgtaGVpZ2h0OjEwMCU7aGVpZ2h0OjEwMCV9YXBwLXZpZXdib3hlcyBkYy10cmVle292ZXJmbG93OmF1dG87Zmxl''@;'; put 'put ''eDoxfWFwcC12aWV3Ym94ZXMgLnRvb2x0aXAtbG9uZ3t3b3JkLWJyZWFrOmJyZWFrLXdvcmR9YXBwLXZpZXdib3hlcyAuYWRkLW5ld3t3aWR0aDo1MCU7cGFkZGluZy1yaWdodDo1cHh9YXBwLXZpZXdib3hlcyAuYWRkLW5ldz5we21hcmdpbi1ib3R0b206MXB4fWFwcC12aWV3Ym94ZXMgLnZp''@;'; put 'put ''ZXdib3gtbGltaXQtbm90aWNle29wYWNpdHk6Ljc7Y29sb3I6I2U3NGMzY31hcHAtdmlld2JveGVzIC5jdXJyZW50bHktb3Blbnt3aWR0aDo1MCV9YXBwLXZpZXdib3hlcyAuY3VycmVudGx5LW9wZW4gLm9wZW4tdmlld2JveHtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjNweCA1cHh9YXBwLXZp''@;'; put 'put ''ZXdib3hlcyAuY3VycmVudGx5LW9wZW4gLm9wZW4tdmlld2JveC5zZWxlY3RlZHtiYWNrZ3JvdW5kOiMzYzg1MDAyZX1hcHAtdmlld2JveGVzIC52aWV3Ym94ZXMtY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Ojk5OX1hcHAtdmll''@;'; put 'put ''d2JveGVzIC52aWV3Ym94e21pbi13aWR0aDoyMDBweDttaW4taGVpZ2h0OjIwMHB4O3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtwb2ludGVyLWV2ZW50czphbGw7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXIt''@;'; put 'put ''dG9wLXJpZ2h0LXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDAgMTBweCAtM3B4ICMwMDB9YXBwLXZpZXdib3hlcyAudmlld2JveC5mb2N1c2Vke3otaW5kZXg6MTEwMDtvdXRsaW5lOm5vbmV9YXBwLXZpZXdib3hlcyAudmlld2JveCAuY29udGVudHtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCww''@;'; put 'put ''LDAsLjMwMTk2MDc4NDMpO2JhY2tncm91bmQ6I2ZmZjtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXg6MTtvdmVyZmxvdy14OmF1dG99YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZy1oYW5kbGV7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjIwcHg7YmFja2dyb3VuZC1jb2xvcjojM2M4NTAw''@;'; put 'put ''O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtjb2xvcjojZmZmO3BhZGRpbmc6MCA1cHg7cG9pbnRlci1ldmVudHM6YWxsfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxlIC50YWJsZS10aXRsZXt3aGl0ZS1zcGFjZTpwcmUt''@;'; put 'put ''d3JhcDt3b3JkLWJyZWFrOmJyZWFrLWFsbH1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnLWhhbmRsZSAuYWN0aW9uc3tkaXNwbGF5OmZsZXg7bWluLXdpZHRoOjM1cHh9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZy1oYW5kbGUgLmFjdGlvbnMgY2xyLWljb257Y3Vyc29yOnBvaW50''@;'; put 'put ''ZXI7bWFyZ2luLWxlZnQ6NXB4fWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxlIC5hY3Rpb25zIGNsci1pY29uOmhvdmVye3RyYW5zZm9ybTpzY2FsZSgxLjMpfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmNsaWNrLWljb257Y3Vyc29yOnBvaW50ZXJ9YXBwLXZpZXdib3hlcyAu''@;'; put 'put ''dmlld2JveCAuY2xpY2staWNvbjpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4zKX1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnSGFuZGxle3Bvc2l0aW9uOmFic29sdXRlfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUuY29ybmVye3dpZHRoOjE1cHg7aGVpZ2h0OjE1cHg7''@;'; put 'put ''Y3Vyc29yOm53c2UtcmVzaXplfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUucmlnaHR7d2lkdGg6MnB4O2hlaWdodDoxMDAlO2N1cnNvcjpldy1yZXNpemV9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZ0hhbmRsZS5ib3R0b217aGVpZ2h0OjJweDt3aWR0aDoxMDAlO2N1''@;'; put 'put ''cnNvcjpucy1yZXNpemV9YXBwLXZpZXdib3hlcyAuY29scy1zZWFyY2h7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjVweDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI3ODQzMTM3MjUpO2JvcmRlci1yYWRpdXM6M3B4fWFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdHtib3JkZXI6c29saWQg''@;'; put 'put ''MXB4ICNjY2M7bWluLWhlaWdodDo2MHB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOjQwMHB4O21heC13aWR0aDoxMDAlO21hcmdpbi10b3A6NXB4fWFwcC12aWV3Ym94ZXMgLmNvbC1ib3h7cGFkZGluZzoycHggMTBweDtib3JkZXItYm90''@;'; put 'put ''dG9tOnNvbGlkIDFweCAjY2NjO2NvbG9yOiMwMDAwMDBkZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOm1vdmU7Zm9udC1zaXplOjE0cHh9''@;'; put 'put ''YXBwLXZpZXdib3hlcyAuY29sLWJveC5zZWFyY2g6Zm9jdXN7YmFja2dyb3VuZDojMDAwMDAwMWF9YXBwLXZpZXdib3hlcyAuY29sLWJveC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwMjR9YXBwLXZpZXdib3hlcyAuY2RrLWRyYWctcHJldmlld3tib3gtc2l6aW5n''@;'; put 'put ''OmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCAjMDAwMywwIDhweCAxMHB4IDFweCAjMDAwMDAwMjQsMCAzcHggMTRweCAycHggIzAwMDAwMDFmO3otaW5kZXg6MTMwMCFpbXBvcnRhbnR9YXBwLXZpZXdib3hlcyAuY2RrLWRyYWctcGxhY2Vo''@;'; put 'put ''b2xkZXJ7b3BhY2l0eTowfWFwcC12aWV3Ym94ZXMgLmNkay1kcmFnLWFuaW1hdGluZ3t0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9YXBwLXZpZXdib3hlcyAuY29sLWJveDpsYXN0LWNoaWxke2JvcmRlcjpub25lfWFwcC12aWV3Ym94ZXMgLmNvbHMt''@;'; put 'put ''bGlzdC5jZGstZHJvcC1saXN0LWRyYWdnaW5nIC5jb2wtYm94Om5vdCguY2RrLWRyYWctcGxhY2Vob2xkZXIpe3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKX1hcHAtdmlld2JveGVzIC5kaXNhYmxlZHtvcGFjaXR5Oi41O3RyYW5zZm9ybTpub25lIWlt''@;'; put 'put ''cG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfWFwcC12aWV3Ym94ZXMgLmZpbHRlci1hY3RpdmV7Y29sb3I6IzAwNzJhM31hcHAtdmlld2JveGVzIGhvdC10YWJsZSAuZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlwZXtkaXNwbGF5Om5vbmV9YXBwLXZpZXdib3hlcyBo''@;'; put 'put ''b3QtdGFibGUgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSxhcHAtdmlld2JveGVzIGhvdC10YWJsZSAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMw''@;'; put 'put ''NmIwMGIwfWFwcC12aWV3Ym94ZXMgaG90LXRhYmxlIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwNmV9YXBwLXZpZXdib3hlcyBob3QtdGFibGUgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWFwcC12aWV3Ym94ZXMgaG90LXRhYmxlIHRkLnJlYWRvbmx5''@;'; put 'put ''Q2VsbHtvcGFjaXR5Oi41fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC12aWV3Ym94ZXMgLmN1cnJlbnRseS1vcGVuIC5vcGVuLXZpZXdib3g6aG92ZXJ7YmFja2dyb3VuZDojMzE0YjU3fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdHtiYWNrZ3JvdW5kOiMz''@;'; put 'put ''MTRiNTc7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6Izg1ODU4NX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtdmlld2JveGVzIC5jb2wtYm94e2JhY2tncm91bmQ6IzMxNGI1Nztib3JkZXItY29sb3I6Izg1ODU4NTtjb2xvcjppbmhlcml0fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdmll''@;'; put 'put ''d2JveGVzIC5jdXJyZW50bHktb3BlbiAub3Blbi12aWV3Ym94OmhvdmVye2JhY2tncm91bmQ6I2U4ZThlOH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXZpZXdib3hlcyAuY29scy1saXN0e2JhY2tncm91bmQ6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXZpZXdib3hlcyAuY29s''@;'; put 'put ''LWJveHtiYWNrZ3JvdW5kOiNmZmZ9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRjLWxvYy1pbnB1dC13cmFwcGVyIGlucHV0e3dpZHRoOjUwMHB4fWFwcC1hdXRvbWF0aWMtZGVwbG95IC5hdXRvLWRlcGxveXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXI7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOiMwMDA2O3otaW5kZXg6MTAwfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5zcGlubmVyLWJveHt3aWR0aDo0MDBweDtwYWRkaW5nOjIwcHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZDojZmZmO2Rpc3BsYXk6ZmxleDtq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym94LXNoYWRvdzoxcHggMXB4IDhweCAjMDAwMDAwODJ9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLnNwaW5uZXItYm94IC5idXR0b25ze2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6c3BhY2UtYmV0d2Vlbjt3aWR0aDoxMDAlfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5kZXBsb3ktc3RhdHVzLXJvd3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6ZmxleC1zdGFydH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LXN0YXR1cy1yb3cgcHtt''@;'; put 'put ''YXJnaW46MCAwIDAgMTBweH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LXN1Y2Nlc3N7Y29sb3I6IzZlY2Y0NH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LWVycm9ye2NvbG9yOiNlNzRjM2N9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS11bmRldGVybWluYXRlZHtjb2xv''@;'; put 'put ''cjojY2FjYWNhfWFwcC1hdXRvbWF0aWMtZGVwbG95IGhye2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI3MDU4ODIzNTMpfWFwcC1pbmZvLW1vZGFsIC5jbHItYWJvcnQtbW9kYWwgLm1vZGFsLXRpdGxlLXdyYXBwZXJ7d2lkdGg6MTAwJX1hcHAtaW5mby1t''@;'; put 'put ''b2RhbCAuY2xyLWFib3J0LW1vZGFsIC5tb2RhbHt6LWluZGV4OjIwNTB9YXBwLWluZm8tbW9kYWwgLm1vZGFsLXRpdGxle3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1pbmZvLW1vZGFsIC5zYXNTZXJ2aWNle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7bWFyZ2luOjB9YXBwLWlu''@;'; put 'put ''Zm8tbW9kYWwgLm1vZGFsLWZvb3Rlcntwb3NpdGlvbjpyZWxhdGl2ZX1hcHAtaW5mby1tb2RhbCAuc3lzdGV4dHtvdmVyZmxvdzphdXRvO21hcmdpbi10b3A6MjBweDtwYWRkaW5nOjEwcHggMDtib3JkZXItdG9wOjFweCBzb2xpZCAjZGNkY2RjfWFwcC1pbmZvLW1vZGFsIC5zeXN0ZXh0IHB7''@;'; put 'put ''bWFyZ2luLXRvcDowO3dvcmQtd3JhcDpicmVhay13b3JkfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29s''@;'; put 'put ''dW1uLWVudHJ5IC5uYW1lLWlucHV0LXJvd3t3aWR0aDoxMDAlO21heC13aWR0aDoyNjBweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLm5hbWUtaW5wdXQtcm93IC5jZWxsLWRlc2N7bWFyZ2luLXJpZ2h0OjMwcHg7bWFyZ2luLXRvcDoxMHB4fWFw''@;'; put 'put ''cC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSAuaW5wdXRzLXdyYXBwZXJ7ZmxleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IC5pbnB1dHMtd3JhcHBl''@;'; put 'put ''cj4qOm5vdCguZGF0ZS1maWVsZCk6bm90KGNsci1zZWxlY3QtY29udGFpbmVyKXtmbGV4OjF9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IHB7bWFyZ2luLXRvcDowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRy''@;'; put 'put ''eSAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0''@;'; put 'put ''LW1vZGFsIC5jb2x1bW4tZW50cnkgYXBwLXNvZnQtc2VsZWN0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQx''@;'; put 'put ''NjY3cmVtO21hcmdpbi1yaWdodDo2cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IGFwcC1zb2Z0LXNlbGVjdCBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBh''@;'; put 'put ''cHAtc29mdC1zZWxlY3QgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpub25lO2JvcmRlcjowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLGFwcC1l''@;'; put 'put ''ZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBhcHAtc29mdC1zZWxlY3QgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29s''@;'; put 'put ''dW1uLWVudHJ5OmZpcnN0LWNoaWxkIHA6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmRhdGUtZmllbGR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1t''@;'; put 'put ''b2RhbCAuZGF0ZS1maWVsZCB0ZXh0YXJlYXt3aWR0aDoyMzBweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5kYXRlLWZpZWxkIC5kYXRlLXBpY2tlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDo0cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2Rh''@;'; put 'put ''bCAuZGF0ZS1maWVsZCAuZGF0ZS1waWNrZXIgLmNsci1pbnB1dC1ncm91cHtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAubW9kYWwtYm9keXtwYWRkaW5nLWJvdHRvbToxMHB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwg''@;'; put 'put ''Y2xyLXNlbGVjdC1jb250YWluZXJ7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7Ym9yZGVyLXJhZGl1czouMTI1cmVtO21hcmdpbi1yaWdodDo1cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFw''@;'; put 'put ''cGVye21heC1oZWlnaHQ6dW5zZXR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3RvcDoxNXB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWlu''@;'; put 'put ''ZXIgc2VsZWN0e2hlaWdodDphdXRvO3BhZGRpbmc6MTBweCAyMHB4IDEwcHggMTBweDtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3Q6Zm9jdXN7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fWFw''@;'; put 'put ''cC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmhvdmVye2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVye3dpZHRoOjIyNHB4O2JvcmRlcjox''@;'; put 'put ''cHggc29saWQgIzk5OTtjb2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtmb250LXNpemU6LjU0MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNv''@;'; put 'put ''bnRhaW5lciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCU7Ym9yZGVyOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0e3dpZHRoOjEwMCU7Ym9yZGVyOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHIt''@;'; put 'put ''aW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLGFwcC1lZGl0LXJlY29y''@;'; put 'put ''ZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1pbnB1dC1jb250YWluZXIuaW52''@;'; put 'put ''YWxpZC1kYXRhe2JvcmRlci1jb2xvcjpyZWR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAubW9kYWwtZGlhbG9ne3dpZHRoOjgwdnd9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLWVkaXQt''@;'; put 'put ''cmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7cmVzaXplOm5vbmU7Ym9yZGVyLWNvbG9yOiM5OTl9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVh''@;'; put 'put ''LmludmFsaWQtZGF0YXtib3JkZXItY29sb3I6cmVkO291dGxpbmU6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEubm90LWNoYXJ7Zm9udC1mYW1pbHk6THVjaWRhIENvbnNvbGUsTW9uYWNvLG1vbm9zcGFjZX1hcHAt''@;'; put 'put ''ZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5nZW5lcmF0ZS1yZWNvcmQtdXJse3JpZ2h0OjQwcHg7dG9wOjQwcHg7Zm9udC1zaXplOjEycHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b257cmlnaHQ6MjVweDt0b3A6''@;'; put 'put ''NXB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtwYWRkaW5nOjAgMCAxcmVtfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWZvb3RlciAuYWxlcnR7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5wcmV2LW5leHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZWRpdC1yZWNv''@;'; put 'put ''cmQgLnByZXYtbmV4dCBwe21hcmdpbjowfWFwcC1lZGl0LXJlY29yZCAucHJldi1uZXh0IGJ1dHRvbnttYXJnaW46MCAxMHB4fWFwcC1lZGl0LXJlY29yZCAuZm9jdXNhYmxlOmZvY3Vze2JveC1zaGFkb3c6MCAwIDNweCAjNWFhMjIwfWFwcC1lZGl0LXJlY29yZCAuZW50cnktaW5wdXQtbGVm''@;'; put 'put ''dC1vZmZzZXR7bGVmdDotMzBweH1hcHAtZWRpdC1yZWNvcmQgLnZhbGlkYXRpb24taW5mby1hbGVydHt3aWR0aDozMTBweH1hcHAtYXV0b2NvbXBsZXRlIC5pbnB1dC12YWx7Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9''@;'; put 'put ''YXBwLWF1dG9jb21wbGV0ZSBpbnB1dHt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX1hcHAtYXV0b2NvbXBsZXRlIGlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXRvcDotNXB4fWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5vdmVy''@;'; put 'put ''bGF5e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxNTAwfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdHtwb3NpdGlvbjpmaXhlZDtib3gtc2hhZG93OjAgM3B4IDEwcHggLTFweCAjMDAwMDAwMmI7b3ZlcmZsb3c6YXV0bzt6LWluZGV4OjIw''@;'; put 'put ''MDB9YXBwLWF1dG9jb21wbGV0ZSAuYXV0b2NvbXBsZXRlLXdyYXBwZXIgLmRhdGFsaXN0IG9wdGlvbntwYWRkaW5nOjVweCAxMHB4O2N1cnNvcjpwb2ludGVyfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdCBvcHRpb246aG92ZXJ7YmFja2dyb3VuZDoj''@;'; put 'put ''MDAwMDAwMGZ9YXBwLWF1dG9jb21wbGV0ZSAuYXV0b2NvbXBsZXRlLXdyYXBwZXIgLmRhdGFsaXN0IG9wdGlvbi5mb2N1c2Vke2JhY2tncm91bmQ6IzAwMDAwMDBmfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5sb2FkLW1vcmV7dGV4dC1hbGlnbjpjZW50ZXI7Ym9y''@;'; put 'put ''ZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXV0b2NvbXBsZXRlIC5kYXRhbGlzdHtiYWNrZ3JvdW5kOiMyMTMzM2I7Ym9yZGVyOjFweCBzb2xpZCAjNTc1NzU3fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hdXRvY29tcGxldGUgaW5wdXR7Y29s''@;'; put 'put ''b3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXV0b2NvbXBsZXRlIC5kYXRhbGlzdCBvcHRpb257Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWF1dG9jb21wbGV0ZSAuZGF0YWxpc3R7YmFja2dyb3VuZDojZmZmfWFwcC1jb250YWN0LWxpbmsgLnVuc2V0e2Nv''@;'; put 'put ''bG9yOnVuc2V0fWFwcC1kYXRhc2V0LWluZm8gLm1vZGFsLWJvZHkgY2xyLXRhYnN7bWF4LWhlaWdodDo3MHZofWFwcC1kYXRhc2V0LWluZm8gLm1vZGFsLWJvZHkgLnRhYi1jb250ZW50e3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b31hcHAtZGF0YXNldC1pbmZvIC5tb2RhbC1ib2R5IC50YWIt''@;'; put 'put ''Y29udGVudCAuZGF0YWdyaWQtb3V0ZXItd3JhcHBlcnt3aWR0aDoxMDAlfWFwcC1kYXRhc2V0LWluZm8gY2xyLW1vZGFsIC5tb2RhbC1kaWFsb2d7aGVpZ2h0OjEwMCV9YXBwLWRhdGFzZXQtaW5mbyAuY2xpY2thYmxlLXJvd3tjdXJzb3I6cG9pbnRlcn1hcHAtZGF0YXNldC1pbmZvIC5kYXRh''@;'; put 'put ''Z3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbDpmb2N1c3tvdXRsaW5lOm5vbmU7b3V0bGluZS1vZmZzZXQ6MH1hcHAtdXBsb2FkLXN0YXRlcntkaXNwbGF5OmJsb2NrfWFwcC11cGxvYWQtc3RhdGVyIHB7bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLWFwcHJvdmUtZGV0YWlscyAubG9h''@;'; put 'put ''ZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo3NXZoO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLWFwcHJvdmUtZGV0YWlscyAubW9kYWxMYXJnZXt3aWR0aDo1MHJlbSFpbXBvcnRhbnR9YXBwLWFwcHJvdmUtZGV0YWls''@;'; put 'put ''cyAuYWRkZWRSb3d7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDksNzcsMTE3LC4yKTtib3JkZXItcmFkaXVzOjVweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5kZWxldGVkUm93e2JvcmRlcjoxcHggc29saWQgcmdiYSg3MCw3MSw3MCwuMik7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0''@;'; put 'put ''YWlscyAudXBkYXRlZFJvd3tib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSwxMTcsOSwuMik7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuY2h7YmFja2dyb3VuZDojMDAwMDAwMWE7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDEwNCwxMDAsMCwuNCk7Ym9yZGVyLXJhZGl1czo1''@;'; put 'put ''cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuY2g6aG92ZXJ7YmFja2dyb3VuZDojZmM4Nzc4NjZ9YXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0LGFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+''@;'; put 'put ''LnRvb2x0aXAtY29udGVudCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50b29sdGlwPi50b29sdGlwLWNvbnRlbnR7Zm9udC1zaXplOi41NDE2N3JlbTtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQ6IzMxNDM1MTtib3JkZXItcmFkaXVzOi4xMjVyZW07Y29s''@;'; put 'put ''b3I6I2YwZjFlYztsaW5lLWhlaWdodDouNzVyZW07bWFyZ2luOjA7cGFkZGluZzouMzc1cmVtIC41cmVtO3dpZHRoOjIzNXB4O3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OmF1dG8gYXV0byAxMDAlIDEycHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO21hcmdpbi1ib3R0b206LjY2NjY3''@;'; put 'put ''cmVtfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodDpiZWZvcmUsYXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSxhcHAtYXBwcm92ZS1kZXRhaWxz''@;'; put 'put ''IC50b29sdGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotLjM3NXJlbTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztjb250ZW50OiIiO2JvcmRlci1sZWZ0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci10b3A6LjIwODMzcmVtIHNvbGlk''@;'; put 'put ''ICMzMTQzNTE7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCB0cmFuc3BhcmVudH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZXtib3JkZXI6MHB4IHNvbGlkfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRvZ2dsZS1zd2l0''@;'; put 'put ''Y2ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlQ29udHtvdmVyZmxvdzphdXRvO21hcmdpbjoxNXB4IDEwcHggMTBweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZUNvbnQgdGR7d29yZC1icmVhazpicmVhay13b3JkfWFwcC1hcHByb3ZlLWRldGFpbHMgLmFwcHJvdmFsSW5m''@;'; put 'put ''b3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC1hcHByb3ZlLWRldGFpbHMgLmFwcHJvdmFsQmFja3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC1hcHByb3ZlLWRl''@;'; put 'put ''dGFpbHMgLmFwcHJvdmFsSW5mb3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjE1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuYXBwcm92YWxCYWNre2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi1ib3R0b206MTVweH1hcHAt''@;'; put 'put ''YXBwcm92ZS1kZXRhaWxzIC5jYXJke21hcmdpbi10b3A6MHJlbSFpbXBvcnRhbnQ7bWluLWhlaWdodDpjYWxjKDEwMHZoICsgLTBweCkhaW1wb3J0YW50fWFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlIHRkLmxlZnQsYXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGUgdGgubGVmdHt0ZXh0LWFs''@;'; put 'put ''aWduOmxlZnQ7d2lkdGg6MTUwcHghaW1wb3J0YW50O2ZsZXg6MH19YXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGUgdGQubGVmdCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZSB0aC5sZWZ0e3RleHQtYWxpZ246bGVmdDtmbGV4OjE7d2lkdGg6MzAwcHghaW1wb3J0YW50fWFwcC1hcHByb3Zl''@;'; put 'put ''LWRldGFpbHMgLnRvb2xse3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2U2YjNiMztjb2xvcjojMzE0MzUxO3RvcDowO2hlaWdodDozNnB4O3dpZHRoOjEwMCU7bGVmdDowO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH1hcHAtYXBw''@;'; put 'put ''cm92ZS1kZXRhaWxzICNhY2NlcHRCdG4sYXBwLWFwcHJvdmUtZGV0YWlscyAjcmVqZWN0QnRue3dpZHRoOjE3NXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLmZvcm1hdHRlZC12YWx1ZXMtdG9nZ2xle21pbi13aWR0aDo3NXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgY2xyLW1vZGFsIC5tb2RhbC1i''@;'; put 'put ''b2R5LXdyYXBwZXJ7b3ZlcmZsb3c6YXV0b31hcHAtYXBwcm92ZS1kZXRhaWxzIC5yb3dzLW5vdGljZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDoxMHB4O2NvbG9yOiM2YTZhNmE7Zm9udC1zaXplOjE1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAucm93cy1u''@;'; put 'put ''b3RpY2UgY2xyLWljb257bWFyZ2luOjB9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAudXBkYXRlZFJvd3tiYWNrZ3JvdW5kOiM5Mzk3MWV9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAuYWRkZWRSb3d7YmFja2dy''@;'; put 'put ''b3VuZDojNTY5OTVmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLmRlbGV0ZWRSb3d7YmFja2dyb3VuZDojOGE1YTVhfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC51cGRhdGVkUm93e2JhY2tncm91bmQ6I2Zh''@;'; put 'put ''ZmRhOH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAuYWRkZWRSb3d7YmFja2dyb3VuZDojOTJkMDlhfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC5kZWxldGVkUm93e2JhY2tncm91bmQ6I2U2YjNiM31hcHAt''@;'; put 'put ''dml5YS1hcGktZXhwbG9yZXIgLmFwaS1jb2xsZWN0aW9uLWRyb3Bkb3due21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4fWFwcC12aXlhLWFwaS1leHBsb3JlciAuanNvbi1hcmVhe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47''@;'; put 'put ''d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfWFwcC12aXlhLWFwaS1leHBsb3JlciAuanNvbi1hcmVhIGF7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5qc29uLWFyZWE+bmd4LWpzb24tdmlld2Vye2hlaWdodDoxMDAlfWFwcC12aXlhLWFw''@;'; put 'put ''aS1leHBsb3JlciAuanNvbi1hcmVhPm5neC1qc29uLXZpZXdlcj4ubmd4LWpzb24tdmlld2Vye292ZXJmbG93OmF1dG99YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5qc29uLXRvZ2dsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7bWFyZ2luOjB9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5l''@;'; put 'put ''bmRwb2ludC1icmVhZGNydW1ze21hcmdpbjowIDAgMCAxMHB4fWFwcC12aXlhLWFwaS1leHBsb3JlciAucXVlcnktcGFyYW1zIGlucHV0e3dpZHRoOjcwcHh9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvcntsaW5lLWhlaWdodDoyLjVyZW07aGVpZ2h0OjIuNXJlbTtk''@;'; put 'put ''aXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlO21hcmdpbi1yaWdodDoxMHB4fWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgLnNwaW5uZXJ7dmVydGljYWwtYWxpZ246bWlkZGxlfWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1p''@;'; put 'put ''bmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnR7bGluZS1oZWlnaHQ6MjRweDtjb2xvcjojNTY1NjU2O2N1cnNvcjphdXRvfWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcHttYXJnaW4tdG9wOjEwcHg7ZGlzcGxheTpmbGV4''@;'; put 'put ''O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcDpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHIt''@;'; put 'put ''c2lnbnBvc3QtY29udGVudCBwOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcCBzcGFue21hcmdpbi1sZWZ0OjEwcHh9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWlu''@;'; put 'put ''ZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudCBwIHNwYW4ucnVubmluZ3tjb2xvcjojZTliZjA0fWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcCBzcGFuLnN1Y2Nlc3N7Y29sb3I6IzYwYjUxNX1hcHAtbG9hZGluZy1pbmRp''@;'; put 'put ''Y2F0b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50IHAgc3Bhbi5mYWlse2NvbG9yOiNjOTIxMDB9YXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIC5leGNlbC1wYXNzd29yZC1yb290IC5tb2RhbHt6LWluZGV4OjEwNjB9YXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIC5t''@;'; put 'put ''b2RhbC1mb290ZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1hcHAtZXhjZWwtcGFzc3dvcmQtbW9kYWwgLm1vZGFsLWZvb3RlciAuYnV0dG9uc3tkaXNwbGF5OmZsZXg7Z2FwOjVweH1hcHAtc3RhZ2UgLnJlamVjdGVke2Nv''@;'; put 'put ''bG9yOiNmODMxMjY7Zm9udC13ZWlnaHQ6NzAwfWFwcC1zdGFnZSAuYWNjZXB0ZWR7Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9YXBwLXN0YWdlIC5iYXNlVGFibGVMaW5re2N1cnNvcjpwb2ludGVyO21hcmdpbi10b3A6MTBweDtjb2xvcjojMDA3Y2JifWJvZHlbY2RzLXRoZW1lPWRh''@;'; put 'put ''cmtdIGFwcC1zdGFnZSAuYmFzZVRhYmxlTGlua3tjb2xvcjojNGVjMGZmfWFwcC1zb2Z0LXNlbGVjdCAuaW5wdXQtdmFse2JvcmRlcjowcHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWFwcC1zb2Z0LXNlbGVjdCBpbnB1dHt3aWR0aDox''@;'; put 'put ''MDAlO291dGxpbmU6bm9uZX1hcHAtc29mdC1zZWxlY3QgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcnttYXJnaW4tdG9wOi01cHh9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjJweCFpbXBvcnRh''@;'; put 'put ''bnR9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lciAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi01cHh9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5k''@;'; put 'put ''aWNhdG9ye21hcmdpbi1yaWdodDoyMHB4O21hcmdpbi10b3A6LTVweH1hcHAtc29mdC1zZWxlY3QgbGFiZWwuc2Vjb25kTGFiZWxBY3RpdmUgc3Bhbjpub3QoLnZhbHVlLXR5cGUtc2VsZWN0ZWQpe3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTou''@;'; put 'put ''Nn1hcHAtc2FzanMtY29uZmlndXJhdG9yIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6NTB2d31hcHAtc2FzanMtY29uZmlndXJhdG9yIC5jbHItaW5wdXQtd3JhcHBlcnt3aWR0aDoxMDAlfWFwcC1zYXNqcy1jb25maWd1cmF0b3IgLmNsci1pbnB1dC13cmFwcGVyIGlucHV0e3dpZHRo''@;'; put 'put ''OjEwMCV9YXBwLXNhc2pzLWNvbmZpZ3VyYXRvciAudGhpblByb2dyZXNze2xlZnQ6MDtyaWdodDowO3dpZHRoOnVuc2V0O2hlaWdodDoxcHg7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtc2FzanMtY29uZmlndXJhdG9yIC50aGluUHJvZ3Jlc3M6YWZ0ZXJ7dG9wOjB9YXBwLWhlYWRlci1h''@;'; put 'put ''Y3Rpb25ze2Rpc3BsYXk6Y29udGVudHN9YXBwLWhlYWRlci1hY3Rpb25zIC5jb3B5UmlnaHR7bWFyZ2luLXRvcDoxMHB4fWFwcC1oZWFkZXItYWN0aW9ucyAuY29weVJpZ2h0IHNwYW57d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEwMCU7dGV4dC1h''@;'; put 'put ''bGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MS41fWFwcC1oZWFkZXItYWN0aW9ucyAudXNlci1uYXYtdG9nZ2xle3BhZGRpbmc6MCAxMHB4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9w''@;'; put 'put ''ZG93bntwYWRkaW5nLXJpZ2h0OjE1cHg7bGluZS1oZWlnaHQ6M3JlbTtoZWlnaHQ6M3JlbX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24+YnV0dG9uLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmFmYWZhO3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1oZWFkZXItYWN0aW9ucyAu''@;'; put 'put ''YXBwLW5hdi1kcm9wZG93bj5idXR0b24uZHJvcGRvd24tdG9nZ2xlOmFmdGVye2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO29wYWNpdHk6LjE1O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjQwcHg7dG9wOjEwcHh9YXBwLWhlYWRlci1hY3Rp''@;'; put 'put ''b25zIC5hcHAtbmF2LWRyb3Bkb3duPmJ1dHRvbi5kcm9wZG93bi10b2dnbGUgLmJhZGdlLmhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnV7Y29sb3I6IzU2NTY1NjtwYWRkaW5nLWJvdHRvbTowfWFw''@;'; put 'put ''cC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuc2VwYXJhdG9ye21hcmdpbjoxMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRy''@;'; put 'put ''b3Bkb3duLWl0ZW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjQ1cHg7bGluZS1oZWlnaHQ6NDBweH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmRyb3Bkb3duLWl0ZW0gLmJhZGdle3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNXB4O3JpZ2h0OjI2cHg7bWFyZ2luLXJpZ2h0OjB9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRlYnVnLXN3aXRjaC1pdGVte3Bh''@;'; put 'put ''ZGRpbmc6MH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0gLnRvZ2dsZS1zd2l0Y2h7bWFyZ2luOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfWFwcC1oZWFkZXItYWN0aW9u''@;'; put 'put ''cyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuY2xyLWxvZ291dHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoyMHB4O3RvcDoxNXB4fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRv''@;'; put 'put ''d24taXRlbSAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIGNsci10b2dnbGUtd3JhcHBlcnt3aWR0aDoxMDAlO21hcmdpbjowO2hl''@;'; put 'put ''aWdodDoxMDAlO3BhZGRpbmc6MTBweCAyMHB4fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSBpbnB1dHtpbnNldDowO2N1cnNvcjpwb2ludGVyfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBj''@;'; put 'put ''bHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVye3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLWhlYWRlci1hY3Rpb25zIC5kZWJ1Zy10b2dnbGUtbGFiZWx7cGFkZGluZy1sZWZ0OjQy''@;'; put 'put ''cHh9QG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KXthcHAtaGVhZGVyLWFjdGlvbnMgLnNpZGVuYXYtY29udGVudCBhLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjppbmhlcml0O3BhZGRpbmc6MTVweDtiYWNrZ3JvdW5kOiM1NjU2NTZ9fWFwcC1oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsuZC1ibG9j''@;'; put 'put ''ayBzcGFuLmJhZGdle3Bvc2l0aW9uOmFic29sdXRlfWFwcC1oZWFkZXItYWN0aW9ucyAuYXZhdGFyLWltZ3t3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi1sZWZ0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MHB4fS5jbHItaW5wdXQtd3JhcHBlci5zbWFsbC1tdCAuY2xyLWZvcm0tY29udHJv''@;'; put 'put ''bHttYXJnaW4tdG9wOjVweCFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya117c2Nyb2xsYmFyLXdpZHRoOnRoaW47c2Nyb2xsYmFyLWNvbG9yOiMzYjUyNjggIzI3Mzg0OX1ib2R5W2Nkcy10aGVtZT1kYXJrXTo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6MTFweH1ib2R5W2Nkcy10aGVt''@;'; put 'put ''ZT1kYXJrXTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2t7YmFja2dyb3VuZDojM2I1MjY4fWJvZHlbY2RzLXRoZW1lPWRhcmtdOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiMyNzM4NDk7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOjNweCBzb2xpZCAjM2I1MjY4''@;'; put 'put ''fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGNsci1pY29uLmlzLWhpZ2hsaWdodHtmaWxsOiM0ZWMwZmZ9Ym9keSxodG1se2ZvbnQtd2VpZ2h0OjQwMCFpbXBvcnRhbnQ7cGFkZGluZzowO21hcmdpbjowfWJvZHkuc2hvdWxkLWxvZ2luIGNsci1tb2RhbCxodG1sLnNob3VsZC1sb2dpbiBjbHItbW9k''@;'; put 'put ''YWx7ZGlzcGxheTpub25lIWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBidXR0b246Zm9jdXN7b3V0bGluZTpub25lfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGJ1dHRvbjpmb2N1cy12aXNpYmxle291dGxpbmU6MXB4IHNvbGlkIHJnYigyNTUsMjU1LDI1NSl9Ym9keVtjZHMtdGhlbWU9''@;'; put 'put ''bGlnaHRdIGJ1dHRvbjpmb2N1c3tvdXRsaW5lOm5vbmV9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGJ1dHRvbjpmb2N1cy12aXNpYmxle291dGxpbmU6MXB4IHNvbGlkIHJnYigwLDAsMCl9LnNlbGVjdC10YWJsZS1pY29uLC5zZWxlY3QtbGlicmFyeS1pY29ue3dpZHRoOjgwcHh9W2Nkcy10ZXh0''@;'; put 'put ''PWxhYmVsXXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwKX1bY2RzLXRleHQ9bGFiZWxMaW5rXXtsaW5lLWhlaWdodDoxLjghaW1wb3J0YW50fVtjZHMtdGV4dD1jYXB0aW9uX2NsZWFuXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNh''@;'; put 'put ''cHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQ9Y2FwdGlvbl9jbGVhbl06YWZ0ZXIsW2Nkcy10ZXh0PWNhcHRpb25fY2xlYW5dOmJlZm9yZXtkaXNwbGF5Om5vbmV9Lm1vZGFsIC5tb2RhbC1ib2R5e3BhZGRpbmc6MTVweH0ubW9kYWwgLm1vZGFsLWZv''@;'; put 'put ''b3RlcntwYWRkaW5nOjAgMTVweCAxNXB4fS5sb2ctd3JhcHBlcnttaW4taGVpZ2h0OjUwcHg7cGFkZGluZzoxMHB4O21hcmdpbi10b3A6MTBweDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtib3JkZXItcmFkaXVzOjNweDtib3JkZXI6MXB4IHNvbGlkICNlMmUyZTI7aGVpZ2h0OjQ4dmg7b3ZlcmZs''@;'; put 'put ''b3c6YXV0b30uc2xpZGVye3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjMyMHB4O21hcmdpbi1sZWZ0Ojc1cHg7bWFyZ2luLXRvcDo3MHB4O2hlaWdodDo1cHg7b3ZlcmZsb3cteDpoaWRkZW59LmxpbmV7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTouNDtiYWNrZ3JvdW5kOiM3M2Q1NDQ7d2lk''@;'; put 'put ''dGg6MTUwJTtoZWlnaHQ6NXB4fS5zdWJsaW5le3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6IzczZDU0NDtoZWlnaHQ6NXB4fS5pbmN7YW5pbWF0aW9uOmluY3JlYXNlIDJzIGluZmluaXRlfS5kZWN7YW5pbWF0aW9uOmRlY3JlYXNlIDJzIC41cyBpbmZpbml0ZX1Aa2V5ZnJhbWVzIGlu''@;'; put 'put ''Y3JlYXNlezAle2xlZnQ6LTUlO3dpZHRoOjUlfXRve2xlZnQ6MTMwJTt3aWR0aDoxMDAlfX1Aa2V5ZnJhbWVzIGRlY3JlYXNlezAle2xlZnQ6LTgwJTt3aWR0aDo4MCV9dG97bGVmdDoxMTAlO3dpZHRoOjEwJX19LmFwcC1sb2FkaW5ne2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MTAwdmg7YmFja2dyb3VuZDojMzE0MzUxO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjIwMDA7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MH0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5v''@;'; put 'put ''bmV9LmgtYXV0b3toZWlnaHQ6YXV0b30uaC11bnNldC1pe2hlaWdodDp1bnNldCFpbXBvcnRhbnR9Lm1pbi1oLTUwdmh7bWluLWhlaWdodDo1MHZofS5oLTI0dmgsLmgtMjV2aHtoZWlnaHQ6MjV2aH0uaC03MHZoe2hlaWdodDo3MHZofS5oLTgwdmh7aGVpZ2h0Ojgwdmh9LmgtMTAwe2hlaWdo''@;'; put 'put ''dDoxMDAlfS53LTUwdnd7d2lkdGg6NTB2d30udy0xMDB7d2lkdGg6MTAwJX0udy0xMDAtaXt3aWR0aDoxMDAlIWltcG9ydGFudH0udy00MHt3aWR0aDo0MCV9Lm1pbi13LTB7bWluLXdpZHRoOjBweH0ubXgtNXttYXJnaW46MCA1cHh9Lm15LTV7bWFyZ2luOjVweCAwfS5teS0xNXttYXJnaW46''@;'; put 'put ''MTVweCAwfS5teS0xMC1teC1hdXRve21hcmdpbjoxMHB4IGF1dG99Lm0tMHttYXJnaW46MCFpbXBvcnRhbnR9Lm0tMTB7bWFyZ2luOjEwcHh9Lm10LTB7bWFyZ2luLXRvcDowIWltcG9ydGFudH0ubXQtMy1uZWdhdGl2ZXttYXJnaW4tdG9wOi0zcHh9Lm10LTV7bWFyZ2luLXRvcDo1cHh9Lm10''@;'; put 'put ''LTUtaXttYXJnaW4tdG9wOjVweCFpbXBvcnRhbnR9Lm10LTJ7bWFyZ2luLXRvcDoycHh9Lm10LTItaXttYXJnaW4tdG9wOjJweCFpbXBvcnRhbnR9Lm10LTEwe21hcmdpbi10b3A6MTBweH0ubXQtMTV7bWFyZ2luLXRvcDoxNXB4fS5tdC0yMHttYXJnaW4tdG9wOjIwcHh9Lm1sLTB7bWFyZ2lu''@;'; put 'put ''LWxlZnQ6MH0ubWwtM3ttYXJnaW4tbGVmdDozcHh9Lm1sLTV7bWFyZ2luLWxlZnQ6NXB4fS5tbC01LWl7bWFyZ2luLWxlZnQ6NXB4IWltcG9ydGFudH0ubWwtMTB7bWFyZ2luLWxlZnQ6MTBweH0ubWwtMTV7bWFyZ2luLWxlZnQ6MTVweH0ubWwtMjB7bWFyZ2luLWxlZnQ6MjBweH0ubWwtMjAt''@;'; put 'put ''aXttYXJnaW4tbGVmdDoyMHB4IWltcG9ydGFudH0ubXItMHttYXJnaW4tcmlnaHQ6MH0ubXItNXttYXJnaW4tcmlnaHQ6NXB4fS5tci01aXttYXJnaW4tcmlnaHQ6NXB4IWltcG9ydGFudH0ubXItMTB7bWFyZ2luLXJpZ2h0OjEwcHh9Lm1yLTEye21hcmdpbi1yaWdodDoxMnB4fS5tci0yMHtt''@;'; put 'put ''YXJnaW4tcmlnaHQ6MjBweH0ubWItMHttYXJnaW4tYm90dG9tOjB9Lm1iLTBpe21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9Lm1iLTV7bWFyZ2luLWJvdHRvbTo1cHh9Lm1iLTEwe21hcmdpbi1ib3R0b206MTBweH0ubWItMTAtaXttYXJnaW4tYm90dG9tOjEwcHghaW1wb3J0YW50fS5tYi0x''@;'; put 'put ''NXttYXJnaW4tYm90dG9tOjE1cHh9Lm1iLTIwe21hcmdpbi1ib3R0b206MjBweH0ubWItMzB7bWFyZ2luLWJvdHRvbTozMHB4fS5wLTB7cGFkZGluZzowfS5wLTEwe3BhZGRpbmc6MTBweH0ucGItMHtwYWRkaW5nLWJvdHRvbTowfS5wYi0xMHtwYWRkaW5nLWJvdHRvbToxMHB4fS5weS01e3Bh''@;'; put 'put ''ZGRpbmc6NXB4IDB9LnB5LTEwe3BhZGRpbmc6MTBweCAwfS5iYWNrZ3JvdW5kLXRyYW5zcGFyZW50e2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LmJhY2tncm91bmQtdHJhbnNwYXJlbnQtaXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNv''@;'; put 'put ''bG9yLWdyYXl7Y29sb3I6IzVhNWE1YX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbG9yLWRhcmstZ3JheXtjb2xvcjojNDk1OTY3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY29sb3ItZGFya2VyLWdyYXl7Y29sb3I6IzMxNDM1MX0uY29sb3Itd2hpdGV7Y29sb3I6I2ZmZn0uY29sb3Itd2hp''@;'; put 'put ''dGUtaXtjb2xvcjojZmZmIWltcG9ydGFudH0uY29sb3ItZ3JlZW57Y29sb3I6IzRiOWU0Yn0uY29sb3ItZGMtZ3JlZW57Y29sb3I6IzgxYjQ0MH0uY29sb3ItcmVke2NvbG9yOiNlNDU0NTR9LmNvbG9yLW9yYW5nZXtjb2xvcjojZTY3ZTIyfS5jb2xvci1ibHVle2NvbG9yOiMzZjhjYzN9LmNv''@;'; put 'put ''bG9yLXllbGxvd3tjb2xvcjojZjFjNDBmfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLWRlZnVhbHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1kZWZhdWx0LWl7Y3Vyc29yOmRlZmF1bHQhaW1wb3J0YW50fS5iYWNrZ3JvdW5kLXRyYW5zcGFyZW50e2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dHJhbnNwYXJlbnR9LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0uZm9udC1zaXplLTE1e2ZvbnQtc2l6ZToxNXB4fS5mb250LXNp''@;'; put 'put ''emUtMTh7Zm9udC1zaXplOjE4cHh9LmZvbnQtYm9sZHtmb250LXdlaWdodDo3MDB9LmZvbnQtYm9sZC1pe2ZvbnQtd2VpZ2h0OjcwMCFpbXBvcnRhbnR9LmZvbnQtd2VpZ2h0LTMwMHtmb250LXdlaWdodDozMDB9LmZvbnQtd2VpZ2h0LTcwMHtmb250LXdlaWdodDo3MDB9LndvcmQtYnJlYWt7''@;'; put 'put ''d29yZC1icmVhazpicmVhay13b3JkfS53b3JkLWJyZWFrLWFsbHt3b3JkLWJyZWFrOmJyZWFrLWFsbH0ucG9zaXRpb24tcmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LnBvc2l0aW9uLWFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5kLW5vbmV7ZGlzcGxheTpub25lfS5kLWJsb2Nre2Rp''@;'; put 'put ''c3BsYXk6YmxvY2t9LmQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kLWZsZXh7ZGlzcGxheTpmbGV4fS5kLWNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXgtdW5zZXR7ZmxleDp1bnNldH0uYWxpZ24tc2VsZi1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZH0uYWxpZ24t''@;'; put 'put ''c2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmFsaWduLWl0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9Lmp1c3RpZnktY29udGVudC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1jb250ZW50LWNlbnRlci1pe2p1c3RpZnktY29udGVudDpjZW50''@;'; put 'put ''ZXIhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lmp1c3RpZnktY29udGVudC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0u''@;'; put 'put ''anVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5mbGV4LWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1nYXAtNXtnYXA6NXB4fS5jbHItZ2FwLTB7Z2FwOjB9Lm92ZXJmbG93LWF1dG97b3ZlcmZsb3c6YXV0b30uei1pbmRleC1oaWdo''@;'; put 'put ''ZXN0e3otaW5kZXg6MTAwMDAwMDB9LnZlcnRpY2FsLWFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lmljb24tZGMtZmlsbHtmaWxsOiM4MWI0NDB9LmRhdGFncmlkLWN1c3RvbS1mb290ZXIgLmRhdGFncmlkLW91dGVyLXdyYXBwZXIsLnRleHQtYXJlYS1mdWxsLXdpZHRoIC5j''@;'; put 'put ''bHItY29udHJvbC1jb250YWluZXIsLnRleHQtYXJlYS1mdWxsLXdpZHRoIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWF7d2lkdGg6MTAwJX0udGV4dC1hcmVhLWZ1bGwtd2lkdGggY2xyLXRleHRhcmVhLWNvbnRhaW5lcnttYXJnaW46MCFpbXBvcnRhbnR9LnRleHQtYXJlYS1mdWxs''@;'; put 'put ''LXdpZHRoIC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW46MCFpbXBvcnRhbnR9LnByb2dyZXNTdGF0aWN7bWFyZ2luLXRvcDotNnB4IWltcG9ydGFudDtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7ei1pbmRleDoxMDAwMCFpbXBvcnRhbnR9LnByb2dyZXNzLC5wcm9ncmVzcy1zdGF0''@;'; put 'put ''aWN7YmFja2dyb3VuZC1jb2xvcjojZjVmNmZlO2JvcmRlci1yYWRpdXM6MDtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6NnB4O21hcmdpbjowO21heC1oZWlnaHQ6LjU4MzMzM3JlbTttaW4taGVpZ2h0Oi4xNjY2NjdyZW07b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7d2lkdGg6Y2Fs''@;'; put 'put ''YygxMDAlIC0gNjNweCl9LnByb2dyZXNzLmxvb3A6YWZ0ZXJ7YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1sb29wZXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtjb250ZW50OiIgIjt0b3A6LjE2NjY2N3JlbTtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9j''@;'; put 'put ''aztiYWNrZ3JvdW5kLWNvbG9yOiM2MGI1MTU7d2lkdGg6NzUlfS5iYWRnZS13YXJuaW5ne2NvbG9yOiNmZmYhaW1wb3J0YW50fS5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhIC5jYXJkLWhlYWRlciBoM3ttYXJnaW4tdG9wOjEwcHh9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtw''@;'; put 'put ''YWRkaW5nOjE1cHggMTVweCAwfS5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlIGNsci1pY29ue2Rpc3BsYXk6bm9uZX0uc2hvdy1jbG9zZSAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2''@;'; put 'put ''ZTt0b3A6LTE4cHg7cmlnaHQ6LTEwcHh9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDojZDk0YjJlO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmV9LmNhcmQtaGVhZGVye2ZvbnQtd2VpZ2h0OjMwMH0uc2VsZWN0IHNlbGVjdDpmb2N1c3tib3JkZXItYm90dG9tOjFweCBz''@;'; put 'put ''b2xpZCAjNDk1OTY3O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZyx0cmFuc3BhcmVudCA5NSUsIzQ5NWE2NyAwKSBuby1yZXBlYXR9LmNsci10cmVlbm9kZS1jaGlsZHJlbnttYXJnaW4tbGVmdDouMnJlbSFpbXBvcnRhbnR9LnRhYmxlLWFjdGl2ZTpmb2N1c3tiYWNrZ3JvdW5k''@;'; put 'put ''OiNkOGUzZTl9Y2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1jb250cm9sLWNvbnRhaW5lcixjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItc2VsZWN0LXdyYXBwZXIsY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0e3dpZHRoOjEwMCV9dGJvZHl7Zm9u''@;'; put 'put ''dC13ZWlnaHQ6NDAwfWgzLGg0e2NvbG9yOiM1ODU4NTg7Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxcmVtO21hcmdpbi10b3A6MXJlbTttYXJnaW4tYm90dG9tOjB9aDEsaDJ7Y29sb3I6IzU4NTg1ODtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNw''@;'; put 'put ''YWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjJyZW07bWFyZ2luLXRvcDoxcmVtO21hcmdpbi1ib3R0b206MH1jbHItaWNvbi5pcy1pbmZve2ZpbGw6IzgwYjQ0MX0uZGF0YWdyaWQtaG9zdCwuZGF0YWdyaWQtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTotd2Vi''@;'; put 'put ''a2l0LWJveCFpbXBvcnRhbnR9LmJ0biAuY2xyLWxvYWRpbmctYnRuLWNvbnRlbnR7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uYnRuLmJ0bi1kYW5nZXIsLmJ0bi5idG4td2FybmluZ3tib3JkZXItY29sb3I6I2VmNGYyZTtiYWNrZ3JvdW5kLWNvbG9yOiNkOTRiMmU7Y29sb3I6I2ZmZn0uYnRu''@;'; put 'put ''LmJ0bi1zbTpoYXMoY2xyLWljb24pe2xpbmUtaGVpZ2h0OjJ9LmQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5jbHItZmxleC0xe2ZsZXg6MX0uY2xyLWZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZs''@;'; put 'put ''ZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uYm9yZGVyLTB7Ym9yZGVyOjB9LmJveC1zaGFkb3ctbm9uZXtib3gtc2hhZG93Om5vbmV9LmJveC1zaGFkb3ctbm9uZS1pe2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9Lmh0Q3VzdG9tSGlkZGVue2Rpc3BsYXk6bm9uZX1ib2R5W2Nkcy10aGVt''@;'; put 'put ''ZT1kYXJrXSAuaHREYXJre2JhY2tncm91bmQ6Izg4ODtjb2xvcjojZmZmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmh0RGFya3tiYWNrZ3JvdW5kOiMzYzU2NjI7Y29sb3I6I2VlZX1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIC5kYXJrVEg6bm90KC5w''@;'; put 'put ''cmltYXJ5S2V5SGVhZGVyU3R5bGUpe2JhY2tncm91bmQ6IzQ4N2Q5Njtjb2xvcjojZWVlfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmRhcmtUSC5odF9faGlnaGxpZ2h0e2JhY2tncm91bmQ6IzNiNmI4MX0uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2Nv''@;'; put 'put ''bG9yOiM4MjgyODJ9LmhhbmRzb250YWJsZS5saXN0Ym94e3BhZGRpbmc6NXB4IDAgNXB4IDVweDtib3gtc2hhZG93OjAgNHB4IDIwcHggIzAwMDAwMDcwfS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlke2JhY2tncm91bmQ6I2U2MjcwMGFkIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHJl''@;'; put 'put ''ZCFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAubnVtZXJpY0xpc3Rib3h7dGV4dC1hbGlnbjpyaWdodH0ubWFyZ2luLXRvcC0yMHttYXJnaW4tdG9wOjIwcHh9LmhpZGRlbntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS51bnZpc2libGV7dmlzaWJpbGl0eTpo''@;'; put 'put ''aWRkZW59Lm5vLWJvcmRlcnN7Ym9yZGVyOjB9LmNhcmQubm8tYm9yZGVycywuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWhlYWRlciwuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWJsb2NrLC5jYXJkLm5vLWJvcmRlcnMgLmNhcmQtZm9vdGVyLC5jYXJkLm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtaGVh''@;'; put 'put ''ZGVyLC5jYXJkLm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtYmxvY2ssLmNhcmQubm8taW5uZXItYm9yZGVycyAuY2FyZC1mb290ZXJ7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfUBtZWRpYSAobWluLXdpZHRoOiA1NzZweCl7LmQtc20tbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLXNt''@;'; put 'put ''LWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQtc20taW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1zbS1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1zbS10YWJsZXtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH0uZC1zbS10YWJs''@;'; put 'put ''ZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtc20tZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLXNtLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHIt''@;'; put 'put ''ZmxleC1zbS1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jbHItZ2FwLXNtLTV7Z2FwOjVweH0uY2xyLWdhcC1zbS0we2dhcDowfX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5kLW1kLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1tZC1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1w''@;'; put 'put ''b3J0YW50fS5kLW1kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmQtbWQtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQtbWQtdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtbWQtdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwh''@;'; put 'put ''aW1wb3J0YW50fS5kLW1kLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH0uZC1tZC1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZsZXgtbWQtcm93e2ZsZXgtZGlyZWN0aW9u''@;'; put 'put ''OnJvd30uY2xyLWdhcC1tZC01e2dhcDo1cHh9LmNsci1nYXAtbWQtMHtnYXA6MH19QG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KXsuZC1sZy1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtbGctaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH0uZC1sZy1pbmxpbmUtYmxvY2t7''@;'; put 'put ''ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLWxnLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLWxnLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fS5kLWxnLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH0uZC1sZy1mbGV4e2Rpc3Bs''@;'; put 'put ''YXk6ZmxleCFpbXBvcnRhbnR9LmQtbGctaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1nYXAtbGctNXtnYXA6NXB4''@;'; put 'put ''fS5jbHItZ2FwLWxnLTB7Z2FwOjB9fS5kYXRhZ3JpZC1ib2R5e3BhZGRpbmctYm90dG9tOjJyZW0haW1wb3J0YW50fS5hYm9ydE1zZ3t3aGl0ZS1zcGFjZTpwcmUtd3JhcDtmb250LWZhbWlseTptb25vc3BhY2V9I2dyYXBoIHN2Z3toZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5uby10YWJsZS1z''@;'; put 'put ''ZWxlY3RlZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRleDoxMDt3aWR0aDox''@;'; put 'put ''MDAlO2hlaWdodDoxMDAlO3RvcDowfS5jb3B5UmlnaHR7YmFja2dyb3VuZDojNDk1OTY3IWltcG9ydGFudDtjb2xvcjojZmZmO2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzo1cHggMCA0cHg7ei1pbmRleDox''@;'; put 'put ''MDB9Lm5hdi10cmVlPmNsci10cmVlLW5vZGUuY2xyLWV4cGFuZGVke2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1jbHItdHJlZS1ub2Rle292ZXJmbG93LXk6dmlzaWJsZX1jbHItdHJlZS1ub2RlOmZvY3Vze291dGxpbmU6bm9uZSFpbXBvcnRhbnR9Y2xyLXRyZWUtbm9kZSAuY2xy''@;'; put 'put ''LXRyZWVub2RlLWNhcmV0e3dpZHRoOmF1dG8haW1wb3J0YW50O2hlaWdodDphdXRvIWltcG9ydGFudH1jbHItdHJlZS1ub2RlIC5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXJ7cGFkZGluZzowIDhweDt3aWR0aDphdXRvO2hlaWdodDphdXRvO2FsaWduLWl0ZW1zOmNlbnRlcn1jbHIt''@;'; put 'put ''dHJlZS1ub2RlIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3Vze291dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmNsci10cmVlbm9kZS1jb250ZW50IHB7d2hpdGUtc3BhY2U6bm93cmFwfS5zZWFyY2gtbm9kZXttYXJnaW4tYm90dG9tOjVweH0udHJlZS1zZWFyY2gtd3JhcHBl''@;'; put 'put ''cntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS50cmVlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7bWFyZ2luOjB9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtib3R0b206''@;'; put 'put ''MDttYXJnaW46MCAwIDNweDtjdXJzb3I6cG9pbnRlcn0uY2xyLXRyZWUtbm9kZXtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudH0uY29udGVudC1jb250YWluZXJ7d2lkdGg6MTAwJX1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7Lnd0SG9sZGVye3dpZHRoOjEwMCUhaW1wb3J0YW50fX1p''@;'; put 'put ''bnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtjbHItdHJlZS1ub2RlLmNsci1leHBhbmRlZHtwYWRkaW5nLWJvdHRvbToyMHB4O21pbi1oZWlnaHQ6YXV0b30uY2xy''@;'; put 'put ''LXRyZWUtbm9kZXttaW4taGVpZ2h0OjI0cHh9LmNsci10cmVlbm9kZS1jaGlsZHJlbntvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50fS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IGNsci1pY29ue21pbi13aWR0aDoxNnB4O21pbi1oZWlnaHQ6''@;'; put 'put ''MTZweH0udHJlZS1zZWFyY2gtd3JhcHBlciBjbHItaWNvbntib3R0b206MnB4fS5jb250ZW50LWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0uY29udGVudC1hcmVhPi5jYXJke21hcmdpbi1ib3R0b206MjBweH0ucmVjb3JkLWVkaXQtbW9kYWwgdGV4dGFyZWF7bWluLWhlaWdodDo0MnB4fX0uYm9y''@;'; put 'put ''ZGVyLWJvdHRvbS1kaXZpZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkM2QzZDN9LmxvYWRpbmdTcGlubmVye2hlaWdodDo3MHZoO2ZsZXg6MTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyfS5k''@;'; put 'put ''aXNhYmxlLXBhc3N3b3JkLW1hbmFnZXJ7LXdlYmtpdC10ZXh0LXNlY3VyaXR5OmRpc2M7LW1vei10ZXh0LXNlY3VyaXR5OmRpc2M7dGV4dC1zZWN1cml0eTpkaXNjO2ZvbnQtZmFtaWx5OnRleHQtc2VjdXJpdHktZGlzY30ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9aHIubGlnaHR7Ym9y''@;'; put 'put ''ZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RlZGVkZX0uc3Bpbm5lcntiYWNrZ3JvdW5kOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NwaW5uZXIuMTZmNzYzY2ViYzZiNjRkZi1zdmcpIWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye2JhY2tncm91bmQ6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvY2FyZXQuNjVmMWZjMGFjYmU0YzdmZi1zdmcpIWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1kYXJr''@;'; put 'put ''XSAudGFibGUtc2VhcmNoLXdyYXBwZXJ7YmFja2dyb3VuZDojMjEzMzNifS50YWJsZS1zZWFyY2gtd3JhcHBlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO21pbi13aWR0aDoxNzBweH0udGFibGUt''@;'; put 'put ''c2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgY2xyLWljb24sLnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIC5zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE5cHg7dG9wOjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIGNsci1pY29u''@;'; put 'put ''e2N1cnNvcjpwb2ludGVyfS50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlciBbbmFtZT1zZWFyY2gtaW5wdXRde3BhZGRpbmctcmlnaHQ6MjVweH0udGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWlucHV0LWNvbnRhaW5lcnttYXJnaW4tdG9wOi01cHg7bWFyZ2luLXJpZ2h0OjB9''@;'; put 'put ''LnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXIgbGFiZWx7ZGlzcGxheTpub25lfS50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItY2hlY2tib3gtY29udGFpbmVye21hcmdpbi10b3A6MH0udGFibGUtc2VhcmNoLXdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bp''@;'; put 'put ''bi1idXR0b24sLnRhYmxlLXNlYXJjaC13cmFwcGVyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS50YWJsZS1zZWFyY2gtd3JhcHBlciBpbnB1dFt0eXBlPW51bWJlcl17LW1vei1hcHBlYXJhbmNlOnRleHRmaWVsZH0u''@;'; put 'put ''ZGMtbG9ja2VkLWNvbnRyb2x7b3BhY2l0eTouNDtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50fS5saW5rLWl0e2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9Cg=='';'; put 'run;'; put '%sasjsout(CSS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9/images; %let service=caret-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=caret.65f1fc0acbe4c7ff-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=datacontroller-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iMTY5MCIgaGVpZ2h0PSIyNDAiIHZpZXdCb3g9IjAgMCAxNjkwIDI0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwNV83KSI+CjxwYXRoIGQ9Ik0xMjQuOSA1NS4yMDAxQzEyOC4y''@;'; put 'put ''IDU1LjYwMDEgMTMxLjQgNTUuOTAwMSAxMzQuNyA1Ni4zMDAxQzE0Mi42IDU3LjQwMDEgMTUwLjMgNTguOTAwMSAxNTcuNSA2Mi42MDAxQzE1OS42IDYzLjcwMDEgMTYxLjYgNjQuOTAwMSAxNjMuMSA2Ni44MDAxQzE2NS41IDY5LjYwMDEgMTY1LjQgNzIuNjAwMSAxNjMgNzUuNDAwMUMxNjAu''@;'; put 'put ''NSA3OC4yMDAxIDE1Ny4zIDc5LjgwMDEgMTUzLjkgODEuMTAwMUMxNDYgODQuMjAwMSAxMzcuNyA4NS42MDAxIDEyOS4zIDg2LjMwMDFDMTE1LjYgODcuNDAwMSAxMDIuMSA4Ni45MDAxIDg4LjcgODMuNzAwMUM4NC4zIDgyLjcwMDEgODAgODEuMzAwMSA3Ni4xIDc5LjEwMDFDNzQuNiA3OC4z''@;'; put 'put ''MDAxIDczLjIgNzcuMzAwMSA3MS45IDc2LjEwMDFDNjguMyA3Mi42MDAxIDY4LjMgNjguOTAwMSA3MiA2NS42MDAxQzc2IDYyLjAwMDEgODAuOSA2MC4zMDAxIDg1LjkgNTguOTAwMUM5Mi45IDU2LjkwMDEgMTAwIDU1LjkwMDEgMTA3LjIgNTUuNDAwMUMxMDcuOCA1NS40MDAxIDEwOC41IDU1''@;'; put 'put ''LjYwMDEgMTA5IDU1LjEwMDFDMTE0LjIgNTUuMjAwMSAxMTkuNiA1NS4yMDAxIDEyNC45IDU1LjIwMDFaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik02OS4yMDAxIDEzNy4zQzc1LjYwMDEgMTQ1LjUgODQuNzAwMSAxNDguNSA5NC4xMDAxIDE1MC41QzExMi43IDE1NC41IDEzMS4zIDE1''@;'; put 'put ''NCAxNDkuNCAxNDcuNkMxNTUgMTQ1LjYgMTYwLjIgMTQyLjkgMTYzLjkgMTM3LjlDMTY0LjUgMTM3LjEgMTY0LjggMTM3LjUgMTY1LjEgMTM4LjFDMTY1LjcgMTM5LjQgMTY2IDE0MC43IDE2NiAxNDIuMUMxNjYgMTQ3IDE2NiAxNTIgMTY2IDE1Ni45QzE2NiAxNjAuMSAxNjQuNSAxNjIuNiAx''@;'; put 'put ''NjIuMyAxNjQuOEMxNTcuNyAxNjkuNCAxNTEuOSAxNzEuOSAxNDUuOCAxNzMuOEMxMzMuNSAxNzcuNiAxMjAuOSAxNzguNCAxMDguMiAxNzcuNUM5OC43MDAxIDE3Ni44IDg5LjUgMTc1IDgwLjggMTcxLjFDNzcuMSAxNjkuNCA3My43MDAxIDE2Ny40IDcxLjAwMDEgMTY0LjNDNjguOTAwMSAx''@;'; put 'put ''NjEuOSA2Ny44IDE1OS4yIDY3LjggMTU2QzY3LjkgMTUxLjUgNjcuOCAxNDcgNjcuOCAxNDIuNUM2Ny44IDE0MC43IDY4LjEwMDEgMTM5IDY5LjIwMDEgMTM3LjNaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik02OS4yOTk5IDEwNi40Qzc0LjU5OTkgMTEzLjUgODEuOTk5OSAxMTYuNSA4''@;'; put 'put ''OS44OTk5IDExOC42QzEwOC44IDEyMy42IDEyNy43IDEyMy41IDE0Ni40IDExNy45QzE1Mi42IDExNi4xIDE1OC40IDExMy40IDE2Mi45IDEwOC41QzE2My41IDEwNy45IDE2My45IDEwNi41IDE2NC42IDEwNi43QzE2NS42IDEwNyAxNjUuNiAxMDguNCAxNjUuOSAxMDkuNUMxNjYuMyAxMTEu''@;'; put 'put ''MiAxNjYuMSAxMTIuOSAxNjYuMSAxMTQuNkMxNjYuMSAxMTggMTY2IDEyMS4zIDE2Ni4xIDEyNC43QzE2Ni4zIDEyOC45IDE2NC42IDEzMi4yIDE2MS41IDEzNC45QzE1Ni44IDEzOS4xIDE1MS4xIDE0MS42IDE0NSAxNDMuMkMxMjQuNSAxNDguNyAxMDQuMSAxNDguNiA4My45OTk5IDE0MS42''@;'; put 'put ''Qzc5LjA5OTkgMTM5LjkgNzQuNTk5OSAxMzcuNSA3MC45OTk5IDEzMy42QzY4Ljc5OTkgMTMxLjIgNjcuNyAxMjguNCA2Ny43IDEyNS4xQzY3LjggMTIwLjcgNjcuNyAxMTYuMiA2Ny43IDExMS44QzY3LjggMTEwIDY4LjA5OTkgMTA4LjIgNjkuMjk5OSAxMDYuNFoiIGZpbGw9IiNFMEUwRTAi''@;'; put 'put ''Lz4KPHBhdGggZD0iTTY5LjEgNzYuN0M3MC42IDgxLjEgNzQuMiA4My4wOTk5IDc4IDg0Ljg5OTlDODQuOCA4OC4wOTk5IDkyLjEgODkuNiA5OS40IDkwLjVDMTEzLjkgOTIuMyAxMjguNCA5Mi4xIDE0Mi43IDg5LjFDMTQ4LjUgODcuOSAxNTQuMSA4Ni4zIDE1OS4yIDgzLjFDMTYyLjEgODEu''@;'; put 'put ''MyAxNjMuNiA3OS42IDE2NC42IDc2LjhDMTY1LjYgNzguMiAxNjUuOSA3OS43IDE2NS45IDgxLjJDMTY1LjkgODYuMiAxNjYgOTEuMSAxNjUuOSA5Ni4xQzE2NS44IDEwMC4zIDE2My40IDEwMy4zIDE2MC4zIDEwNS44QzE1NC41IDExMC40IDE0Ny43IDExMi44IDE0MC42IDExNC40QzEyMS44''@;'; put 'put ''IDExOC41IDEwMy4yIDExOC4yIDg0LjkgMTEyQzgwLjEgMTEwLjQgNzUuNSAxMDguMSA3MS44IDEwNC41QzY5IDEwMS44IDY3LjUgOTguNyA2Ny42IDk0LjdDNjcuNyA5MC40IDY3LjYgODYuMSA2Ny42IDgxLjhDNjcuOCA3OS45IDY4LjEgNzguMyA2OS4xIDc2LjdaIiBmaWxsPSIjOEVDNjNG''@;'; put 'put ''Ii8+CjxwYXRoIGQ9Ik0xODMuOSAyMTAuOUMyMDAuMiAyMTEuOCAyMDguOSAxOTEuOCAxOTcuMSAxODAuNUMxODQuNyAxNjguNiAxNjQuMyAxNzkuNyAxNjcuNSAxOTYuNUM5My44IDI0My41IC0wLjk5OTk4MSAxNzMuMiAyNiA4Ny44MDAxTDcuODAwMDIgNzUuNjAwMUMtMzMuMSAxODQuMyA5''@;'; put 'put ''Mi44IDI3Ni4yIDE4My45IDIxMC45Wk0xNzguNyAxODcuNEMxODYuMyAxNzkuNSAxOTguNCAxOTAuNSAxOTEuMyAxOTguOEMxODMuOCAyMDcuNSAxNzAuNiAxOTUuOCAxNzguNyAxODcuNFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTM1LjIgNTAuNzAwMUM0Ni45IDYxLjkwMDEgNjYu''@;'; put 'put ''MiA1Mi43MDAxIDY1LjEgMzYuNzAwMUMxMzguNyAtMTAuNyAyMzQgNTkuNTAwMSAyMDcgMTQ1LjJMMjI1LjIgMTU3LjRDMjY0LjkgNTEuODAwMSAxNDQuNCAtNDMuMjk5OSA1MS4yIDIwLjYwMDFDMzMuNyAxNy4wMDAxIDIyLjQgMzguNDAwMSAzNS4yIDUwLjcwMDFaTTUzLjYgNDMuODAwMUM0''@;'; put 'put ''NS44IDUxLjkwMDEgMzMuNSA0MC4xMDAxIDQxLjMgMzIuMDAwMUM0OS4xIDIzLjkwMDEgNjEuNCAzNS43MDAxIDUzLjYgNDMuODAwMVoiIGZpbGw9IiM4RUM2M0YiLz4KPHBhdGggZD0iTTMyMy41NzUgNDcuODg3NEMzMjMuNTc1IDQ2Ljc5MDEgMzIzLjkxNyA0NS44OTg1IDMyNC42MDMgNDUu''@;'; put 'put ''MjEyN0MzMjUuNDI2IDQ0LjM4OTcgMzI2LjM4NiA0My45NzgyIDMyNy40ODQgNDMuOTc4MkgzNjkuMDQ0QzM3OC45MiA0My45NzgyIDM4OC4wNDEgNDUuNzYxMyAzOTYuNDA4IDQ5LjMyNzZDNDA0LjkxMyA1Mi44OTM4IDQxMi4yNTEgNTcuOTAwMyA0MTguNDIzIDY0LjM0N0M0MjQuNTk2IDcw''@;'; put 'put ''LjY1NjUgNDI5LjQ2NSA3OC4yMDA1IDQzMy4wMzEgODYuOTc5QzQzNi41OTcgOTUuNzU3NSA0MzguMzggMTA1LjQyOCA0MzguMzggMTE1Ljk4OUM0MzguMzggMTI2LjU1MSA0MzYuNTk3IDEzNi4yMjEgNDMzLjAzMSAxNDQuOTk5QzQyOS40NjUgMTUzLjc3OCA0MjQuNTk2IDE2MS4zOSA0MTgu''@;'; put 'put ''NDIzIDE2Ny44MzdDNDEyLjI1MSAxNzQuMTQ2IDQwNC45MTMgMTc5LjA4NCAzOTYuNDA4IDE4Mi42NTFDMzg4LjA0MSAxODYuMjE3IDM3OC45MiAxODggMzY5LjA0NCAxODhIMzI3LjQ4NEMzMjYuMzg2IDE4OCAzMjUuNDI2IDE4Ny42NTcgMzI0LjYwMyAxODYuOTcxQzMyMy45MTcgMTg2LjE0''@;'; put 'put ''OCAzMjMuNTc1IDE4NS4xODggMzIzLjU3NSAxODQuMDkxVjQ3Ljg4NzRaTTM0OS4yOTMgNjkuMjg0OVYxNjIuNjkzSDM2OS42NjJDMzc1LjgzNCAxNjIuNjkzIDM4MS40NTggMTYxLjUyNyAzODYuNTMzIDE1OS4xOTZDMzkxLjYwOCAxNTYuODY0IDM5NS45MjggMTUzLjY0MSAzOTkuNDk1IDE0''@;'; put 'put ''OS41MjZDNDAzLjE5OCAxNDUuNDExIDQwNi4wMSAxNDAuNTQxIDQwNy45MyAxMzQuOTE4QzQwOS45ODggMTI5LjE1NyA0MTEuMDE2IDEyMi44NDcgNDExLjAxNiAxMTUuOTg5QzQxMS4wMTYgMTA5LjI2OCA0MDkuOTg4IDEwMy4wMjcgNDA3LjkzIDk3LjI2NjNDNDA2LjAxIDkxLjUwNTQgNDAz''@;'; put 'put ''LjE5OCA4Ni41Njc1IDM5OS40OTUgODIuNDUyNkMzOTUuOTI4IDc4LjMzNzcgMzkxLjYwOCA3NS4xMTQzIDM4Ni41MzMgNzIuNzgyNkMzODEuNDU4IDcwLjQ1MDggMzc1LjgzNCA2OS4yODQ5IDM2OS42NjIgNjkuMjg0OUgzNDkuMjkzWk01MzEuMDkzIDE3Ny45MThDNTI3LjM4OSAxODAuNjYy''@;'; put 'put ''IDUyMy4xMzcgMTgzLjEzMSA1MTguMzM3IDE4NS4zMjVDNTEzLjUzNiAxODcuMzgzIDUwOC43MzUgMTg4LjQxMSA1MDMuOTM1IDE4OC40MTFDNDk2LjgwMiAxODguNDExIDQ5MC4yMTggMTg3LjEwOCA0ODQuMTgzIDE4NC41MDJDNDc4LjE0OCAxODEuODk2IDQ3Mi45MzYgMTc4LjI2MSA0Njgu''@;'; put 'put ''NTQ2IDE3My41OThDNDY0LjI5NCAxNjguOTM0IDQ2MC45MzQgMTYzLjQ0OCA0NTguNDY1IDE1Ny4xMzhDNDU1Ljk5NiAxNTAuODI5IDQ1NC43NjEgMTQzLjk3IDQ1NC43NjEgMTM2LjU2NEM0NTQuNzYxIDEyOS40MzEgNDU2LjA2NCAxMjIuNzc5IDQ1OC42NzEgMTE2LjYwNkM0NjEuMjc3IDEx''@;'; put 'put ''MC4yOTcgNDY0Ljg0MyAxMDQuODEgNDY5LjM2OSAxMDAuMTQ3QzQ3My44OTYgOTUuMzQ2IDQ3OS4xMDggOTEuNTc0IDQ4NS4wMDYgODguODMwN0M0OTEuMDQxIDg2LjA4NzQgNDk3LjQ4OCA4NC43MTU4IDUwNC4zNDYgODQuNzE1OEM1MDkuMTQ3IDg0LjcxNTggNTEzLjg3OSA4NS44MTMxIDUx''@;'; put 'put ''OC41NDIgODguMDA3N0M1MjMuMjA2IDkwLjA2NTIgNTI3LjM4OSA5Mi40NjU1IDUzMS4wOTMgOTUuMjA4OFY4OS4wMzY1QzUzMS4wOTMgODcuOTM5MSA1MzEuNDM2IDg3LjA0NzYgNTMyLjEyMiA4Ni4zNjE4QzUzMi45NDUgODUuNTM4OCA1MzMuOTA1IDg1LjEyNzMgNTM1LjAwMiA4NS4xMjcz''@;'; put 'put ''SDU1MS4wNUM1NTMuNjU2IDg1LjEyNzMgNTU0Ljk1OSA4Ni40MzAzIDU1NC45NTkgODkuMDM2NVYxODQuMDkxQzU1NC45NTkgMTg2LjY5NyA1NTMuNjU2IDE4OCA1NTEuMDUgMTg4SDUzNS4wMDJDNTMzLjkwNSAxODggNTMyLjk0NSAxODcuNjU3IDUzMi4xMjIgMTg2Ljk3MUM1MzEuNDM2IDE4''@;'; put 'put ''Ni4xNDggNTMxLjA5MyAxODUuMTg4IDUzMS4wOTMgMTg0LjA5MVYxNzcuOTE4Wk00NzkuNjU3IDEzNi41NjRDNDc5LjY1NyAxNDAuMjY3IDQ4MC4zNDIgMTQzLjc2NSA0ODEuNzE0IDE0Ny4wNTdDNDgzLjA4NiAxNTAuMjExIDQ4NC45MzcgMTUzLjAyMyA0ODcuMjY5IDE1NS40OTJDNDg5LjYw''@;'; put 'put ''MSAxNTcuOTYxIDQ5Mi4yNzYgMTU5Ljk1IDQ5NS4yOTMgMTYxLjQ1OUM0OTguNDQ4IDE2Mi44MyA1MDEuNzQgMTYzLjUxNiA1MDUuMTY5IDE2My41MTZDNTA4Ljg3MiAxNjMuNTE2IDUxMi4yMzMgMTYyLjgzIDUxNS4yNTEgMTYxLjQ1OUM1MTguMjY4IDE1OS45NSA1MjAuODc0IDE1Ny45NjEg''@;'; put 'put ''NTIzLjA2OSAxNTUuNDkyQzUyNS40MDEgMTUzLjAyMyA1MjcuMTg0IDE1MC4yMTEgNTI4LjQxOCAxNDcuMDU3QzUyOS42NTMgMTQzLjc2NSA1MzAuMjcgMTQwLjI2NyA1MzAuMjcgMTM2LjU2NEM1MzAuMjcgMTMyLjg2IDUyOS42NTMgMTI5LjQzMSA1MjguNDE4IDEyNi4yNzZDNTI3LjE4NCAx''@;'; put 'put ''MjIuOTg0IDUyNS40MDEgMTIwLjEwNCA1MjMuMDY5IDExNy42MzVDNTIwLjg3NCAxMTUuMTY2IDUxOC4yNjggMTEzLjI0NiA1MTUuMjUxIDExMS44NzRDNTEyLjIzMyAxMTAuMzY1IDUwOC44NzIgMTA5LjYxMSA1MDUuMTY5IDEwOS42MTFDNTAxLjc0IDEwOS42MTEgNDk4LjQ0OCAxMTAuMzY1''@;'; put 'put ''IDQ5NS4yOTMgMTExLjg3NEM0OTIuMjc2IDExMy4yNDYgNDg5LjYwMSAxMTUuMTY2IDQ4Ny4yNjkgMTE3LjYzNUM0ODQuOTM3IDEyMC4xMDQgNDgzLjA4NiAxMjIuOTg0IDQ4MS43MTQgMTI2LjI3NkM0ODAuMzQyIDEyOS40MzEgNDc5LjY1NyAxMzIuODYgNDc5LjY1NyAxMzYuNTY0Wk01NzQu''@;'; put 'put ''NDA3IDg5LjAzNjVDNTc0LjQwNyA4Ny45MzkxIDU3NC43NSA4Ny4wNDc2IDU3NS40MzYgODYuMzYxOEM1NzYuMTIyIDg1LjUzODggNTc3LjAxMyA4NS4xMjczIDU3OC4xMTEgODUuMTI3M0g1OTMuMzM2VjU4LjE3NDZDNTkzLjMzNiA1Ny4wNzczIDU5My42NzkgNTYuMTg1OCA1OTQuMzY0IDU1''@;'; put 'put ''LjQ5OTlDNTk1LjE4NyA1NC42NzcgNTk2LjE0OCA1NC4yNjU1IDU5Ny4yNDUgNTQuMjY1NUg2MTMuMjkzQzYxNS44OTkgNTQuMjY1NSA2MTcuMjAyIDU1LjU2ODUgNjE3LjIwMiA1OC4xNzQ2Vjg1LjEyNzNINjM1LjMwOEM2MzYuNDA1IDg1LjEyNzMgNjM3LjI5NyA4NS41Mzg4IDYzNy45ODIg''@;'; put 'put ''ODYuMzYxOEM2MzguNjY4IDg3LjA0NzYgNjM5LjAxMSA4Ny45MzkxIDYzOS4wMTEgODkuMDM2NVYxMDQuMjYyQzYzOS4wMTEgMTA1LjM1OSA2MzguNjY4IDEwNi4yNSA2MzcuOTgyIDEwNi45MzZDNjM3LjI5NyAxMDcuNjIyIDYzNi40MDUgMTA3Ljk2NSA2MzUuMzA4IDEwNy45NjVINjE3LjIw''@;'; put 'put ''MlYxODQuMDkxQzYxNy4yMDIgMTg2LjY5NyA2MTUuODk5IDE4OCA2MTMuMjkzIDE4OEg1OTcuMjQ1QzU5Ni4xNDggMTg4IDU5NS4xODcgMTg3LjY1NyA1OTQuMzY0IDE4Ni45NzFDNTkzLjY3OSAxODYuMTQ4IDU5My4zMzYgMTg1LjE4OCA1OTMuMzM2IDE4NC4wOTFWMTA3Ljk2NUg1NzguMTEx''@;'; put 'put ''QzU3Ny4wMTMgMTA3Ljk2NSA1NzYuMTIyIDEwNy42MjIgNTc1LjQzNiAxMDYuOTM2QzU3NC43NSAxMDYuMjUgNTc0LjQwNyAxMDUuMzU5IDU3NC40MDcgMTA0LjI2MlY4OS4wMzY1Wk03MjkuNjkzIDE3Ny45MThDNzI1Ljk5IDE4MC42NjIgNzIxLjczOCAxODMuMTMxIDcxNi45MzcgMTg1LjMy''@;'; put 'put ''NUM3MTIuMTM3IDE4Ny4zODMgNzA3LjMzNiAxODguNDExIDcwMi41MzUgMTg4LjQxMUM2OTUuNDAzIDE4OC40MTEgNjg4LjgxOSAxODcuMTA4IDY4Mi43ODQgMTg0LjUwMkM2NzYuNzQ4IDE4MS44OTYgNjcxLjUzNiAxNzguMjYxIDY2Ny4xNDcgMTczLjU5OEM2NjIuODk1IDE2OC45MzQgNjU5''@;'; put 'put ''LjUzNCAxNjMuNDQ4IDY1Ny4wNjUgMTU3LjEzOEM2NTQuNTk2IDE1MC44MjkgNjUzLjM2MiAxNDMuOTcgNjUzLjM2MiAxMzYuNTY0QzY1My4zNjIgMTI5LjQzMSA2NTQuNjY1IDEyMi43NzkgNjU3LjI3MSAxMTYuNjA2QzY1OS44NzcgMTEwLjI5NyA2NjMuNDQzIDEwNC44MSA2NjcuOTcgMTAw''@;'; put 'put ''LjE0N0M2NzIuNDk2IDk1LjM0NiA2NzcuNzA4IDkxLjU3NCA2ODMuNjA3IDg4LjgzMDdDNjg5LjY0MiA4Ni4wODc0IDY5Ni4wODggODQuNzE1OCA3MDIuOTQ3IDg0LjcxNThDNzA3Ljc0NyA4NC43MTU4IDcxMi40NzkgODUuODEzMSA3MTcuMTQzIDg4LjAwNzdDNzIxLjgwNyA5MC4wNjUyIDcy''@;'; put 'put ''NS45OSA5Mi40NjU1IDcyOS42OTMgOTUuMjA4OFY4OS4wMzY1QzcyOS42OTMgODcuOTM5MSA3MzAuMDM2IDg3LjA0NzYgNzMwLjcyMiA4Ni4zNjE4QzczMS41NDUgODUuNTM4OCA3MzIuNTA1IDg1LjEyNzMgNzMzLjYwMyA4NS4xMjczSDc0OS42NTFDNzUyLjI1NyA4NS4xMjczIDc1My41NiA4''@;'; put 'put ''Ni40MzAzIDc1My41NiA4OS4wMzY1VjE4NC4wOTFDNzUzLjU2IDE4Ni42OTcgNzUyLjI1NyAxODggNzQ5LjY1MSAxODhINzMzLjYwM0M3MzIuNTA1IDE4OCA3MzEuNTQ1IDE4Ny42NTcgNzMwLjcyMiAxODYuOTcxQzczMC4wMzYgMTg2LjE0OCA3MjkuNjkzIDE4NS4xODggNzI5LjY5MyAxODQu''@;'; put 'put ''MDkxVjE3Ny45MThaTTY3OC4yNTcgMTM2LjU2NEM2NzguMjU3IDE0MC4yNjcgNjc4Ljk0MyAxNDMuNzY1IDY4MC4zMTUgMTQ3LjA1N0M2ODEuNjg2IDE1MC4yMTEgNjgzLjUzOCAxNTMuMDIzIDY4NS44NyAxNTUuNDkyQzY4OC4yMDEgMTU3Ljk2MSA2OTAuODc2IDE1OS45NSA2OTMuODk0IDE2''@;'; put 'put ''MS40NTlDNjk3LjA0OSAxNjIuODMgNzAwLjM0IDE2My41MTYgNzAzLjc3IDE2My41MTZDNzA3LjQ3MyAxNjMuNTE2IDcxMC44MzMgMTYyLjgzIDcxMy44NTEgMTYxLjQ1OUM3MTYuODY5IDE1OS45NSA3MTkuNDc1IDE1Ny45NjEgNzIxLjY2OSAxNTUuNDkyQzcyNC4wMDEgMTUzLjAyMyA3MjUu''@;'; put 'put ''Nzg0IDE1MC4yMTEgNzI3LjAxOSAxNDcuMDU3QzcyOC4yNTMgMTQzLjc2NSA3MjguODcgMTQwLjI2NyA3MjguODcgMTM2LjU2NEM3MjguODcgMTMyLjg2IDcyOC4yNTMgMTI5LjQzMSA3MjcuMDE5IDEyNi4yNzZDNzI1Ljc4NCAxMjIuOTg0IDcyNC4wMDEgMTIwLjEwNCA3MjEuNjY5IDExNy42''@;'; put 'put ''MzVDNzE5LjQ3NSAxMTUuMTY2IDcxNi44NjkgMTEzLjI0NiA3MTMuODUxIDExMS44NzRDNzEwLjgzMyAxMTAuMzY1IDcwNy40NzMgMTA5LjYxMSA3MDMuNzcgMTA5LjYxMUM3MDAuMzQgMTA5LjYxMSA2OTcuMDQ5IDExMC4zNjUgNjkzLjg5NCAxMTEuODc0QzY5MC44NzYgMTEzLjI0NiA2ODgu''@;'; put 'put ''MjAxIDExNS4xNjYgNjg1Ljg3IDExNy42MzVDNjgzLjUzOCAxMjAuMTA0IDY4MS42ODYgMTIyLjk4NCA2ODAuMzE1IDEyNi4yNzZDNjc4Ljk0MyAxMjkuNDMxIDY3OC4yNTcgMTMyLjg2IDY3OC4yNTcgMTM2LjU2NFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTg3My4yMDYgNzQuMjIy''@;'; put 'put ''OEM4NzIuNjU3IDc1LjA0NTggODcxLjkwMyA3NS41MjU4IDg3MC45NDMgNzUuNjYzQzg2OS45ODIgNzUuODAwMiA4NjkuMDIyIDc1LjU5NDQgODY4LjA2MiA3NS4wNDU4Qzg2NC45MDcgNzMuMTI1NSA4NjEuMTM1IDcxLjQ3OTUgODU2Ljc0NiA3MC4xMDc5Qzg1Mi4zNTcgNjguNzM2MiA4NDcu''@;'; put 'put ''ODk5IDY4LjExOSA4NDMuMzczIDY4LjI1NjJDODM3LjQ3NSA2OC4yNTYyIDgzMS45ODggNjkuNTU5MiA4MjYuOTEzIDcyLjE2NTNDODIxLjk3NSA3NC42MzQzIDgxNy42NTQgNzguMDYzNCA4MTMuOTUxIDgyLjQ1MjZDODEwLjI0OCA4Ni43MDQ3IDgwNy4zNjcgOTEuNzExMSA4MDUuMzEgOTcu''@;'; put 'put ''NDcyQzgwMy4yNTIgMTAzLjIzMyA4MDIuMjkyIDEwOS40MDUgODAyLjQyOSAxMTUuOTg5QzgwMi41NjYgMTIyLjg0NyA4MDMuNTk1IDEyOS4yMjUgODA1LjUxNSAxMzUuMTIzQzgwNy41NzMgMTQwLjg4NCA4MTAuMzg1IDE0NS44OTEgODEzLjk1MSAxNTAuMTQzQzgxNy41MTcgMTU0LjM5NSA4''@;'; put 'put ''MjEuODM4IDE1Ny43NTUgODI2LjkxMyAxNjAuMjI0QzgzMS45ODggMTYyLjU1NiA4MzcuNjggMTYzLjcyMiA4NDMuOTkgMTYzLjcyMkM4NTAuMDI1IDE2My41ODUgODU1LjUxMiAxNjIuNTU2IDg2MC40NSAxNjAuNjM2Qzg2NS41MjUgMTU4LjcxNiA4NzAuNTMxIDE1NS45NzIgODc1LjQ2OSAx''@;'; put 'put ''NTIuNDA2Qzg3Ni40MjkgMTUxLjcyIDg3Ny40NTggMTUxLjUxNCA4NzguNTU1IDE1MS43ODlDODc5LjY1MiAxNTEuOTI2IDg4MC41NDQgMTUyLjQ3NSA4ODEuMjMgMTUzLjQzNUw4OTEuMTA2IDE2OC4yNDhDODkyLjM0IDE3MC4xNjkgODkxLjk5NyAxNzEuODgzIDg5MC4wNzcgMTczLjM5MkM4''@;'; put 'put ''ODIuNTMzIDE3OS4xNTMgODc1LjE5NSAxODMuMzM2IDg2OC4wNjIgMTg1Ljk0M0M4NjAuOTMgMTg4LjU0OSA4NTIuOTc0IDE4OS44NTIgODQ0LjE5NiAxODkuODUyQzgzMy42MzQgMTg5Ljk4OSA4MjQuMTAxIDE4OC4zNDMgODE1LjU5NyAxODQuOTE0QzgwNy4yMyAxODEuMzQ4IDgwMC4wMjkg''@;'; put 'put ''MTc2LjM0MSA3OTMuOTk0IDE2OS44OTRDNzg4LjA5NiAxNjMuMzExIDc4My41MDEgMTU1LjQ5MiA3ODAuMjA5IDE0Ni40MzlDNzc3LjA1NCAxMzcuMzg3IDc3NS40MDggMTI3LjM3NCA3NzUuMjcxIDExNi40MDFDNzc1LjEzNCAxMDcuMDczIDc3Ni41NzQgOTguMDIwNyA3NzkuNTkyIDg5LjI0''@;'; put 'put ''MjJDNzgyLjc0NiA4MC4zMjY2IDc4Ny4yMDQgNzIuMzcxMSA3OTIuOTY1IDY1LjM3NTdDNzk4LjcyNiA1OC4zODA0IDgwNS43MjEgNTIuNzU2NyA4MTMuOTUxIDQ4LjUwNDZDODIyLjE4MSA0NC4yNTI1IDgzMS40MzkgNDIuMTI2NSA4NDEuNzI3IDQyLjEyNjVDODQ4LjcyMiA0MS45ODkzIDg1''@;'; put 'put ''NS41OCA0Mi44MTIzIDg2Mi4zMDEgNDQuNTk1NEM4NjkuMTU5IDQ2LjM3ODYgODc1Ljg4IDQ5LjY3MDUgODgyLjQ2NCA1NC40NzEyQzg4My40MjQgNTUuMTU3IDg4My45NzMgNTYuMDQ4NiA4ODQuMTEgNTcuMTQ1OUM4ODQuMjQ3IDU4LjEwNjEgODgzLjk3MyA1OS4wNjYyIDg4My4yODcgNjAu''@;'; put 'put ''MDI2M0w4NzMuMjA2IDc0LjIyMjhaTTkwNi4yMTIgMTM2LjU2NEM5MDYuMjEyIDEyOS4yOTQgOTA3LjUxNSAxMjIuNTA0IDkxMC4xMjEgMTE2LjE5NUM5MTIuNzI3IDEwOS44ODUgOTE2LjIyNSAxMDQuMzk5IDkyMC42MTQgOTkuNzM1MkM5MjUuMTQgOTUuMDcxNyA5MzAuNDIxIDkxLjQzNjgg''@;'; put 'put ''OTM2LjQ1NiA4OC44MzA3Qzk0Mi40OTIgODYuMDg3NCA5NDkuMDA3IDg0LjcxNTggOTU2LjAwMiA4NC43MTU4Qzk2Mi45OTggODQuNzE1OCA5NjkuNDQ0IDg2LjA4NzQgOTc1LjM0MiA4OC44MzA3Qzk4MS4zNzcgOTEuNDM2OCA5ODYuNTkgOTUuMDcxNyA5OTAuOTc5IDk5LjczNTJDOTk1LjUw''@;'; put 'put ''NSAxMDQuMzk5IDk5OS4wMDMgMTA5Ljg4NSAxMDAxLjQ3IDExNi4xOTVDMTAwNC4wOCAxMjIuNTA0IDEwMDUuMzggMTI5LjI5NCAxMDA1LjM4IDEzNi41NjRDMTAwNS4zOCAxNDMuODMzIDEwMDQuMDggMTUwLjYyMyAxMDAxLjQ3IDE1Ni45MzJDOTk5LjAwMyAxNjMuMjQyIDk5NS41MDUgMTY4''@;'; put 'put ''LjcyOSA5OTAuOTc5IDE3My4zOTJDOTg2LjU5IDE3OC4wNTYgOTgxLjM3NyAxODEuNzU5IDk3NS4zNDIgMTg0LjUwMkM5NjkuMzA3IDE4Ny4xMDggOTYyLjc5MiAxODguNDExIDk1NS43OTYgMTg4LjQxMUM5NDguODAxIDE4OC40MTEgOTQyLjI4NiAxODcuMTA4IDkzNi4yNTEgMTg0LjUwMkM5''@;'; put 'put ''MzAuMjE1IDE4MS43NTkgOTI0LjkzNSAxNzguMDU2IDkyMC40MDggMTczLjM5MkM5MTYuMDE5IDE2OC43MjkgOTEyLjUyMSAxNjMuMjQyIDkwOS45MTUgMTU2LjkzMkM5MDcuNDQ2IDE1MC42MjMgOTA2LjIxMiAxNDMuODMzIDkwNi4yMTIgMTM2LjU2NFpNOTMxLjEwNyAxMzYuNTY0QzkzMS4x''@;'; put 'put ''MDcgMTQwLjQwNCA5MzEuNzI0IDE0NC4wMzkgOTMyLjk1OSAxNDcuNDY4QzkzNC4xOTMgMTUwLjc2IDkzNS45MDggMTUzLjY0MSA5MzguMTAyIDE1Ni4xMDlDOTQwLjI5NyAxNTguNTc4IDk0Mi45MDMgMTYwLjU2NyA5NDUuOTIxIDE2Mi4wNzZDOTQ4LjkzOCAxNjMuNDQ4IDk1Mi4yMyAxNjQu''@;'; put 'put ''MTM0IDk1NS43OTYgMTY0LjEzNEM5NTkuMzYzIDE2NC4xMzQgOTYyLjY1NSAxNjMuNDQ4IDk2NS42NzIgMTYyLjA3NkM5NjguODI3IDE2MC41NjcgOTcxLjUwMiAxNTguNTc4IDk3My42OTYgMTU2LjEwOUM5NzUuODkxIDE1My42NDEgOTc3LjYwNSAxNTAuNzYgOTc4Ljg0IDE0Ny40NjhDOTgw''@;'; put 'put ''LjA3NCAxNDQuMDM5IDk4MC42OTIgMTQwLjQwNCA5ODAuNjkyIDEzNi41NjRDOTgwLjY5MiAxMzIuNzIzIDk4MC4wNzQgMTI5LjE1NyA5NzguODQgMTI1Ljg2NUM5NzcuNjA1IDEyMi40MzYgOTc1Ljg5MSAxMTkuNDg3IDk3My42OTYgMTE3LjAxOEM5NzEuNTAyIDExNC41NDkgOTY4LjgyNyAx''@;'; put 'put ''MTIuNjI5IDk2NS42NzIgMTExLjI1N0M5NjIuNjU1IDEwOS43NDggOTU5LjM2MyAxMDguOTk0IDk1NS43OTYgMTA4Ljk5NEM5NTIuMjMgMTA4Ljk5NCA5NDguOTM4IDEwOS43NDggOTQ1LjkyMSAxMTEuMjU3Qzk0Mi45MDMgMTEyLjYyOSA5NDAuMjk3IDExNC41NDkgOTM4LjEwMiAxMTcuMDE4''@;'; put 'put ''QzkzNS45MDggMTE5LjQ4NyA5MzQuMTkzIDEyMi40MzYgOTMyLjk1OSAxMjUuODY1QzkzMS43MjQgMTI5LjE1NyA5MzEuMTA3IDEzMi43MjMgOTMxLjEwNyAxMzYuNTY0Wk0xMDUwLjkgMTg0LjA5MUMxMDUwLjkgMTg2LjY5NyAxMDQ5LjU5IDE4OCAxMDQ2Ljk5IDE4OEgxMDMwLjk0QzEwMjku''@;'; put 'put ''ODQgMTg4IDEwMjguODggMTg3LjY1NyAxMDI4LjA2IDE4Ni45NzFDMTAyNy4zNyAxODYuMTQ4IDEwMjcuMDMgMTg1LjE4OCAxMDI3LjAzIDE4NC4wOTFWODkuMDM2NUMxMDI3LjAzIDg3LjkzOTEgMTAyNy4zNyA4Ny4wNDc2IDEwMjguMDYgODYuMzYxOEMxMDI4Ljg4IDg1LjUzODggMTAyOS44''@;'; put 'put ''NCA4NS4xMjczIDEwMzAuOTQgODUuMTI3M0gxMDQ2Ljk5QzEwNDkuNTkgODUuMTI3MyAxMDUwLjkgODYuNDMwMyAxMDUwLjkgODkuMDM2NVY5Ni42NDlDMTA1NC44OCA5My4zNTcxIDEwNTkuNDcgOTAuNTQ1MyAxMDY0LjY4IDg4LjIxMzVDMTA2OS44OSA4NS44ODE3IDEwNzUuMDQgODQuNzE1''@;'; put 'put ''OCAxMDgwLjExIDg0LjcxNThDMTA4NC45MSA4NC43MTU4IDEwODkuMzcgODUuNjA3NCAxMDkzLjQ5IDg3LjM5MDVDMTA5Ny42IDg5LjAzNjUgMTEwMS4xIDkxLjQzNjggMTEwMy45OCA5NC41OTE2QzExMDcgOTcuNjA5MiAxMTA5LjMzIDEwMS4xNzUgMTExMC45OCAxMDUuMjlDMTExMi42MiAx''@;'; put 'put ''MDkuNDA1IDExMTMuNDQgMTEzLjkzMiAxMTEzLjQ0IDExOC44N1YxODQuMDkxQzExMTMuNDQgMTg2LjY5NyAxMTEyLjE0IDE4OCAxMTA5LjUzIDE4OEgxMDkzLjQ5QzEwOTIuMzkgMTg4IDEwOTEuNDMgMTg3LjY1NyAxMDkwLjYxIDE4Ni45NzFDMTA4OS45MiAxODYuMTQ4IDEwODkuNTggMTg1''@;'; put 'put ''LjE4OCAxMDg5LjU4IDE4NC4wOTFWMTI2LjY4OEMxMDg5LjU4IDEyMS4wNjQgMTA4OC4yNyAxMTYuNzQ0IDEwODUuNjcgMTEzLjcyNkMxMDgzLjA2IDExMC41NzEgMTA3OS4zNiAxMDguOTk0IDEwNzQuNTYgMTA4Ljk5NEMxMDcxLjU0IDEwOC45OTQgMTA2OC41OSAxMDkuNjExIDEwNjUuNzEg''@;'; put 'put ''MTEwLjg0NUMxMDYyLjk3IDExMS45NDMgMTA2MC41IDExMy41MiAxMDU4LjMgMTE1LjU3OEMxMDU2LjI1IDExNy40OTggMTA1NC41MyAxMTkuODMgMTA1My4xNiAxMjIuNTczQzEwNTEuOTMgMTI1LjMxNiAxMDUxLjMxIDEyOC4xOTcgMTA1MS4zMSAxMzEuMjE0TDEwNTAuOSAxODQuMDkxWk0x''@;'; put 'put ''MTI3Ljg3IDg5LjAzNjVDMTEyNy44NyA4Ny45MzkxIDExMjguMjEgODcuMDQ3NiAxMTI4LjkgODYuMzYxOEMxMTI5LjU4IDg1LjUzODggMTEzMC40OCA4NS4xMjczIDExMzEuNTcgODUuMTI3M0gxMTQ2LjhWNTguMTc0NkMxMTQ2LjggNTcuMDc3MyAxMTQ3LjE0IDU2LjE4NTggMTE0Ny44MyA1''@;'; put 'put ''NS40OTk5QzExNDguNjUgNTQuNjc3IDExNDkuNjEgNTQuMjY1NSAxMTUwLjcxIDU0LjI2NTVIMTE2Ni43NkMxMTY5LjM2IDU0LjI2NTUgMTE3MC42NyA1NS41Njg1IDExNzAuNjcgNTguMTc0NlY4NS4xMjczSDExODguNzdDMTE4OS44NyA4NS4xMjczIDExOTAuNzYgODUuNTM4OCAxMTkxLjQ1''@;'; put 'put ''IDg2LjM2MThDMTE5Mi4xMyA4Ny4wNDc2IDExOTIuNDcgODcuOTM5MSAxMTkyLjQ3IDg5LjAzNjVWMTA0LjI2MkMxMTkyLjQ3IDEwNS4zNTkgMTE5Mi4xMyAxMDYuMjUgMTE5MS40NSAxMDYuOTM2QzExOTAuNzYgMTA3LjYyMiAxMTg5Ljg3IDEwNy45NjUgMTE4OC43NyAxMDcuOTY1SDExNzAu''@;'; put 'put ''NjdWMTg0LjA5MUMxMTcwLjY3IDE4Ni42OTcgMTE2OS4zNiAxODggMTE2Ni43NiAxODhIMTE1MC43MUMxMTQ5LjYxIDE4OCAxMTQ4LjY1IDE4Ny42NTcgMTE0Ny44MyAxODYuOTcxQzExNDcuMTQgMTg2LjE0OCAxMTQ2LjggMTg1LjE4OCAxMTQ2LjggMTg0LjA5MVYxMDcuOTY1SDExMzEuNTdD''@;'; put 'put ''MTEzMC40OCAxMDcuOTY1IDExMjkuNTggMTA3LjYyMiAxMTI4LjkgMTA2LjkzNkMxMTI4LjIxIDEwNi4yNSAxMTI3Ljg3IDEwNS4zNTkgMTEyNy44NyAxMDQuMjYyVjg5LjAzNjVaTTEyNzMuMjggMTA4LjE3MUMxMjcyLjg3IDEwOS4yNjggMTI3Mi4xOCAxMTAuMDIyIDEyNzEuMjIgMTEwLjQz''@;'; put 'put ''NEMxMjcwLjI2IDExMC44NDUgMTI2OS4yMyAxMTAuNzc3IDEyNjguMTQgMTEwLjIyOEMxMjY3LjA0IDEwOS42OCAxMjY1LjY3IDEwOS4yIDEyNjQuMDIgMTA4Ljc4OEMxMjYyLjUxIDEwOC4zNzcgMTI2MC44NyAxMDguMTcxIDEyNTkuMDggMTA4LjE3MUMxMjU2LjA3IDEwOC4xNzEgMTI1My4x''@;'; put 'put ''OSAxMDguNzg4IDEyNTAuNDQgMTEwLjAyMkMxMjQ3LjcgMTExLjI1NyAxMjQ1LjIzIDExMi45NzIgMTI0My4wNCAxMTUuMTY2QzEyNDAuOTggMTE3LjIyNCAxMjM5LjMzIDExOS42OTMgMTIzOC4xIDEyMi41NzNDMTIzNi44NiAxMjUuMzE2IDEyMzYuMjUgMTI4LjE5NyAxMjM2LjI1IDEzMS4y''@;'; put 'put ''MTRMMTIzNS44NCAxODQuMDkxQzEyMzUuODQgMTg1LjE4OCAxMjM1LjQ5IDE4Ni4xNDggMTIzNC44MSAxODYuOTcxQzEyMzQuMTIgMTg3LjY1NyAxMjMzLjIzIDE4OCAxMjMyLjEzIDE4OEgxMjE1Ljg4QzEyMTQuNzggMTg4IDEyMTMuODIgMTg3LjY1NyAxMjEzIDE4Ni45NzFDMTIxMi4zMSAx''@;'; put 'put ''ODYuMTQ4IDEyMTEuOTcgMTg1LjE4OCAxMjExLjk3IDE4NC4wOTFWODkuMDM2NUMxMjExLjk3IDg3LjkzOTEgMTIxMi4zMSA4Ny4wNDc2IDEyMTMgODYuMzYxOEMxMjEzLjgyIDg1LjUzODggMTIxNC43OCA4NS4xMjczIDEyMTUuODggODUuMTI3M0gxMjMyLjEzQzEyMzMuMjMgODUuMTI3MyAx''@;'; put 'put ''MjM0LjEyIDg1LjUzODggMTIzNC44MSA4Ni4zNjE4QzEyMzUuNDkgODcuMDQ3NiAxMjM1Ljg0IDg3LjkzOTEgMTIzNS44NCA4OS4wMzY1Vjk0LjU5MTZDMTIzOS44MSA5MS43MTExIDEyNDQuMDcgODkuMzc5NCAxMjQ4LjU5IDg3LjU5NjJDMTI1My4xMiA4NS42NzU5IDEyNTcuOTkgODQuNzE1''@;'; put 'put ''OCAxMjYzLjIgODQuNzE1OEMxMjY4LjU1IDg0LjcxNTggMTI3My4yMSA4NS43NDQ1IDEyNzcuMTkgODcuODAyQzEyNzkuMTEgODkuMDM2NSAxMjc5LjczIDkwLjYxMzggMTI3OS4wNCA5Mi41MzQxTDEyNzMuMjggMTA4LjE3MVpNMTI4NS4zMyAxMzYuNTY0QzEyODUuMzMgMTI5LjI5NCAxMjg2''@;'; put 'put ''LjYzIDEyMi41MDQgMTI4OS4yNCAxMTYuMTk1QzEyOTEuODUgMTA5Ljg4NSAxMjk1LjM0IDEwNC4zOTkgMTI5OS43MyA5OS43MzUyQzEzMDQuMjYgOTUuMDcxNyAxMzA5LjU0IDkxLjQzNjggMTMxNS41NyA4OC44MzA3QzEzMjEuNjEgODYuMDg3NCAxMzI4LjEyIDg0LjcxNTggMTMzNS4xMiA4''@;'; put 'put ''NC43MTU4QzEzNDIuMTIgODQuNzE1OCAxMzQ4LjU2IDg2LjA4NzQgMTM1NC40NiA4OC44MzA3QzEzNjAuNSA5MS40MzY4IDEzNjUuNzEgOTUuMDcxNyAxMzcwLjEgOTkuNzM1MkMxMzc0LjYyIDEwNC4zOTkgMTM3OC4xMiAxMDkuODg1IDEzODAuNTkgMTE2LjE5NUMxMzgzLjIgMTIyLjUwNCAx''@;'; put 'put ''Mzg0LjUgMTI5LjI5NCAxMzg0LjUgMTM2LjU2NEMxMzg0LjUgMTQzLjgzMyAxMzgzLjIgMTUwLjYyMyAxMzgwLjU5IDE1Ni45MzJDMTM3OC4xMiAxNjMuMjQyIDEzNzQuNjIgMTY4LjcyOSAxMzcwLjEgMTczLjM5MkMxMzY1LjcxIDE3OC4wNTYgMTM2MC41IDE4MS43NTkgMTM1NC40NiAxODQu''@;'; put 'put ''NTAyQzEzNDguNDMgMTg3LjEwOCAxMzQxLjkxIDE4OC40MTEgMTMzNC45MSAxODguNDExQzEzMjcuOTIgMTg4LjQxMSAxMzIxLjQgMTg3LjEwOCAxMzE1LjM3IDE4NC41MDJDMTMwOS4zMyAxODEuNzU5IDEzMDQuMDUgMTc4LjA1NiAxMjk5LjUzIDE3My4zOTJDMTI5NS4xNCAxNjguNzI5IDEy''@;'; put 'put ''OTEuNjQgMTYzLjI0MiAxMjg5LjAzIDE1Ni45MzJDMTI4Ni41NiAxNTAuNjIzIDEyODUuMzMgMTQzLjgzMyAxMjg1LjMzIDEzNi41NjRaTTEzMTAuMjMgMTM2LjU2NEMxMzEwLjIzIDE0MC40MDQgMTMxMC44NCAxNDQuMDM5IDEzMTIuMDggMTQ3LjQ2OEMxMzEzLjMxIDE1MC43NiAxMzE1LjAz''@;'; put 'put ''IDE1My42NDEgMTMxNy4yMiAxNTYuMTA5QzEzMTkuNDIgMTU4LjU3OCAxMzIyLjAyIDE2MC41NjcgMTMyNS4wNCAxNjIuMDc2QzEzMjguMDYgMTYzLjQ0OCAxMzMxLjM1IDE2NC4xMzQgMTMzNC45MSAxNjQuMTM0QzEzMzguNDggMTY0LjEzNCAxMzQxLjc3IDE2My40NDggMTM0NC43OSAxNjIu''@;'; put 'put ''MDc2QzEzNDcuOTUgMTYwLjU2NyAxMzUwLjYyIDE1OC41NzggMTM1Mi44MSAxNTYuMTA5QzEzNTUuMDEgMTUzLjY0MSAxMzU2LjcyIDE1MC43NiAxMzU3Ljk2IDE0Ny40NjhDMTM1OS4xOSAxNDQuMDM5IDEzNTkuODEgMTQwLjQwNCAxMzU5LjgxIDEzNi41NjRDMTM1OS44MSAxMzIuNzIzIDEz''@;'; put 'put ''NTkuMTkgMTI5LjE1NyAxMzU3Ljk2IDEyNS44NjVDMTM1Ni43MiAxMjIuNDM2IDEzNTUuMDEgMTE5LjQ4NyAxMzUyLjgxIDExNy4wMThDMTM1MC42MiAxMTQuNTQ5IDEzNDcuOTUgMTEyLjYyOSAxMzQ0Ljc5IDExMS4yNTdDMTM0MS43NyAxMDkuNzQ4IDEzMzguNDggMTA4Ljk5NCAxMzM0Ljkx''@;'; put 'put ''IDEwOC45OTRDMTMzMS4zNSAxMDguOTk0IDEzMjguMDYgMTA5Ljc0OCAxMzI1LjA0IDExMS4yNTdDMTMyMi4wMiAxMTIuNjI5IDEzMTkuNDIgMTE0LjU0OSAxMzE3LjIyIDExNy4wMThDMTMxNS4wMyAxMTkuNDg3IDEzMTMuMzEgMTIyLjQzNiAxMzEyLjA4IDEyNS44NjVDMTMxMC44NCAxMjku''@;'; put 'put ''MTU3IDEzMTAuMjMgMTMyLjcyMyAxMzEwLjIzIDEzNi41NjRaTTE0MDguMjEgMzcuMzk0NEMxNDA4LjIxIDM2LjI5NyAxNDA4LjU1IDM1LjQwNTUgMTQwOS4yNCAzNC43MTk3QzE0MTAuMDYgMzQuMDMzOCAxNDExLjAyIDMzLjY5MDkgMTQxMi4xMiAzMy42OTA5SDE0MjguMTZDMTQyOS4yNiAz''@;'; put 'put ''My42OTA5IDE0MzAuMTUgMzQuMDMzOCAxNDMwLjg0IDM0LjcxOTdDMTQzMS42NiAzNS40MDU1IDE0MzIuMDcgMzYuMjk3IDE0MzIuMDcgMzcuMzk0NFYxODQuMDkxQzE0MzIuMDcgMTg2LjY5NyAxNDMwLjc3IDE4OCAxNDI4LjE2IDE4OEgxNDEyLjEyQzE0MTEuMDIgMTg4IDE0MTAuMDYgMTg3''@;'; put 'put ''LjY1NyAxNDA5LjI0IDE4Ni45NzFDMTQwOC41NSAxODYuMTQ4IDE0MDguMjEgMTg1LjE4OCAxNDA4LjIxIDE4NC4wOTFWMzcuMzk0NFpNMTQ2MyAzNy4zOTQ0QzE0NjMgMzYuMjk3IDE0NjMuMzUgMzUuNDA1NSAxNDY0LjAzIDM0LjcxOTdDMTQ2NC44NSAzNC4wMzM4IDE0NjUuODEgMzMuNjkw''@;'; put 'put ''OSAxNDY2LjkxIDMzLjY5MDlIMTQ4Mi45NkMxNDg0LjA2IDMzLjY5MDkgMTQ4NC45NSAzNC4wMzM4IDE0ODUuNjMgMzQuNzE5N0MxNDg2LjQ2IDM1LjQwNTUgMTQ4Ni44NyAzNi4yOTcgMTQ4Ni44NyAzNy4zOTQ0VjE4NC4wOTFDMTQ4Ni44NyAxODYuNjk3IDE0ODUuNTcgMTg4IDE0ODIuOTYg''@;'; put 'put ''MTg4SDE0NjYuOTFDMTQ2NS44MSAxODggMTQ2NC44NSAxODcuNjU3IDE0NjQuMDMgMTg2Ljk3MUMxNDYzLjM1IDE4Ni4xNDggMTQ2MyAxODUuMTg4IDE0NjMgMTg0LjA5MVYzNy4zOTQ0Wk0xNTM3Ljc2IDE0OC4wODVDMTUzOS42OCAxNTIuODg2IDE1NDIuNTYgMTU2Ljc5NSAxNTQ2LjQgMTU5''@;'; put 'put ''LjgxM0MxNTUwLjM3IDE2Mi44MyAxNTU0LjkgMTY0LjMzOSAxNTU5Ljk4IDE2NC4zMzlDMTU2My42OCAxNjQuMzM5IDE1NjcuMjUgMTYzLjcyMiAxNTcwLjY3IDE2Mi40ODhDMTU3NC4xIDE2MS4yNTMgMTU3Ni45OCAxNTkuNTM5IDE1NzkuMzIgMTU3LjM0NEMxNTgwLjE0IDE1Ni42NTggMTU4''@;'; put 'put ''MS4wMyAxNTYuMzg0IDE1ODEuOTkgMTU2LjUyMUMxNTgzLjA5IDE1Ni41MjEgMTU4My45OCAxNTYuODY0IDE1ODQuNjcgMTU3LjU1TDE1OTYuMzkgMTY4LjY2QzE1OTcuMDggMTY5LjM0NiAxNTk3LjQyIDE3MC4yMzcgMTU5Ny40MiAxNzEuMzM1QzE1OTcuNDIgMTcyLjI5NSAxNTk3LjA4IDE3''@;'; put 'put ''My4xMTggMTU5Ni4zOSAxNzMuODA0QzE1OTEuODcgMTc4LjYwNCAxNTg2LjUyIDE4Mi4yMzkgMTU4MC4zNCAxODQuNzA4QzE1NzQuMTcgMTg3LjE3NyAxNTY3LjM4IDE4OC40MTEgMTU1OS45OCAxODguNDExQzE1NTMuMTIgMTg4LjQxMSAxNTQ2Ljc0IDE4Ny4xNzcgMTU0MC44NCAxODQuNzA4''@;'; put 'put ''QzE1MzUuMDggMTgyLjIzOSAxNTMwLjAxIDE3OC43NDEgMTUyNS42MiAxNzQuMjE1QzE1MjAuODIgMTY5LjQxNCAxNTE3LjExIDE2My43MjIgMTUxNC41MSAxNTcuMTM4QzE1MTEuOSAxNTAuNTU0IDE1MTAuNiAxNDMuNTU5IDE1MTAuNiAxMzYuMTUyQzE1MTAuNiAxMjkuMDIgMTUxMS45IDEy''@;'; put 'put ''Mi4zNjcgMTUxNC41MSAxMTYuMTk1QzE1MTcuMTEgMTA5Ljg4NSAxNTIwLjYxIDEwNC4zOTkgMTUyNSA5OS43MzUyQzE1MjkuNTMgOTUuMDcxNyAxNTM0LjgxIDkxLjQzNjggMTU0MC44NCA4OC44MzA3QzE1NDYuODggODYuMDg3NCAxNTUzLjMyIDg0LjcxNTggMTU2MC4xOCA4NC43MTU4QzE1''@;'; put 'put ''NjYuNDkgODQuNzE1OCAxNTcyLjMyIDg1Ljg4MTcgMTU3Ny42NyA4OC4yMTM1QzE1ODMuMTYgOTAuNTQ1MyAxNTg3Ljk2IDkzLjc2ODYgMTU5Mi4wNyA5Ny44ODM1QzE1OTMuODYgOTkuNTI5NSAxNTk1LjU3IDEwMS40NSAxNTk3LjIyIDEwMy42NDRDMTU5OC44NiAxMDUuODM5IDE2MDAuMyAx''@;'; put 'put ''MDguMzc3IDE2MDEuNTQgMTExLjI1N0MxNjAyLjc3IDExNC4xMzcgMTYwMy43MyAxMTcuNDk4IDE2MDQuNDIgMTIxLjMzOEMxNjA1LjI0IDEyNS4wNDIgMTYwNS42NSAxMjkuMjk0IDE2MDUuNjUgMTM0LjA5NUMxNjA1LjY1IDEzNy4zODcgMTYwNS40NSAxNDAuOTUzIDE2MDUuMDMgMTQ0Ljc5''@;'; put 'put ''M0MxNjA0Ljc2IDE0Ni45ODggMTYwMy41MyAxNDguMDg1IDE2MDEuMzMgMTQ4LjA4NUgxNTM3Ljc2Wk0xNTU5LjU2IDEwOC43ODhDMTU1My44IDEwOC43ODggMTU0OS4wNyAxMTAuMzY1IDE1NDUuMzcgMTEzLjUyQzE1NDEuNjYgMTE2LjY3NSAxNTM5LjA2IDEyMC41ODQgMTUzNy41NSAxMjUu''@;'; put 'put ''MjQ4SDE1ODAuNzZDMTU3OS4yNSAxMjAuODU4IDE1NzYuNzEgMTE3LjAxOCAxNTczLjE0IDExMy43MjZDMTU2OS43MSAxMTAuNDM0IDE1NjUuMTkgMTA4Ljc4OCAxNTU5LjU2IDEwOC43ODhaTTE2ODguNTEgMTA4LjE3MUMxNjg4LjEgMTA5LjI2OCAxNjg3LjQxIDExMC4wMjIgMTY4Ni40NSAx''@;'; put 'put ''MTAuNDM0QzE2ODUuNDkgMTEwLjg0NSAxNjg0LjQ2IDExMC43NzcgMTY4My4zNyAxMTAuMjI4QzE2ODIuMjcgMTA5LjY4IDE2ODAuOSAxMDkuMiAxNjc5LjI1IDEwOC43ODhDMTY3Ny43NCAxMDguMzc3IDE2NzYuMSAxMDguMTcxIDE2NzQuMzEgMTA4LjE3MUMxNjcxLjI5IDEwOC4xNzEgMTY2''@;'; put 'put ''OC40MSAxMDguNzg4IDE2NjUuNjcgMTEwLjAyMkMxNjYyLjkzIDExMS4yNTcgMTY2MC40NiAxMTIuOTcyIDE2NTguMjYgMTE1LjE2NkMxNjU2LjIxIDExNy4yMjQgMTY1NC41NiAxMTkuNjkzIDE2NTMuMzMgMTIyLjU3M0MxNjUyLjA5IDEyNS4zMTYgMTY1MS40NyAxMjguMTk3IDE2NTEuNDcg''@;'; put 'put ''MTMxLjIxNEwxNjUxLjA2IDE4NC4wOTFDMTY1MS4wNiAxODUuMTg4IDE2NTAuNzIgMTg2LjE0OCAxNjUwLjAzIDE4Ni45NzFDMTY0OS4zNSAxODcuNjU3IDE2NDguNDYgMTg4IDE2NDcuMzYgMTg4SDE2MzEuMTFDMTYzMC4wMSAxODggMTYyOS4wNSAxODcuNjU3IDE2MjguMjMgMTg2Ljk3MUMx''@;'; put 'put ''NjI3LjU0IDE4Ni4xNDggMTYyNy4yIDE4NS4xODggMTYyNy4yIDE4NC4wOTFWODkuMDM2NUMxNjI3LjIgODcuOTM5MSAxNjI3LjU0IDg3LjA0NzYgMTYyOC4yMyA4Ni4zNjE4QzE2MjkuMDUgODUuNTM4OCAxNjMwLjAxIDg1LjEyNzMgMTYzMS4xMSA4NS4xMjczSDE2NDcuMzZDMTY0OC40NiA4''@;'; put 'put ''NS4xMjczIDE2NDkuMzUgODUuNTM4OCAxNjUwLjAzIDg2LjM2MThDMTY1MC43MiA4Ny4wNDc2IDE2NTEuMDYgODcuOTM5MSAxNjUxLjA2IDg5LjAzNjVWOTQuNTkxNkMxNjU1LjA0IDkxLjcxMTEgMTY1OS4yOSA4OS4zNzk0IDE2NjMuODIgODcuNTk2MkMxNjY4LjM1IDg1LjY3NTkgMTY3My4y''@;'; put 'put ''MiA4NC43MTU4IDE2NzguNDMgODQuNzE1OEMxNjgzLjc4IDg0LjcxNTggMTY4OC40NCA4NS43NDQ1IDE2OTIuNDIgODcuODAyQzE2OTQuMzQgODkuMDM2NSAxNjk0Ljk2IDkwLjYxMzggMTY5NC4yNyA5Mi41MzQxTDE2ODguNTEgMTA4LjE3MVoiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVm''@;'; put 'put ''cz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDVfNyI+CjxyZWN0IHdpZHRoPSIxNjg5IiBoZWlnaHQ9IjI0MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=dc-logo-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iNzAiIGhlaWdodD0iNzAiIHZpZXdCb3g9IjAgMCA3MCA3MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwMV84KSI+CjxwYXRoIGQ9Ik0zNy41OTkzIDE2LjYyMTJDMzguNTkxNiAx''@;'; put 'put ''Ni43NDE1IDM5LjU1MzggMTYuODMxNyA0MC41NDYxIDE2Ljk1MTlDNDIuOTIxNiAxNy4yODI3IDQ1LjIzNyAxNy43MzM3IDQ3LjQwMiAxOC44NDYzQzQ4LjAzMzQgMTkuMTc3MSA0OC42MzQ4IDE5LjUzNzkgNDkuMDg1OSAyMC4xMDkyQzQ5LjgwNzUgMjAuOTUxMiA0OS43Nzc0IDIxLjg1MzMg''@;'; put 'put ''NDkuMDU1OCAyMi42OTUyQzQ4LjMwNCAyMy41MzcxIDQ3LjM0MTggMjQuMDE4MyA0Ni4zMTk1IDI0LjQwOTJDNDMuOTQ0IDI1LjM0MTMgNDEuNDQ4MiAyNS43NjIzIDM4LjkyMjQgMjUuOTcyOEMzNC44MDI5IDI2LjMwMzUgMzAuNzQzNSAyNi4xNTMyIDI2LjcxNDIgMjUuMTkxQzI1LjM5MTEg''@;'; put 'put ''MjQuODkwMyAyNC4wOTgxIDI0LjQ2OTMgMjIuOTI1NCAyMy44MDc4QzIyLjQ3NDQgMjMuNTY3MiAyMi4wNTM0IDIzLjI2NjUgMjEuNjYyNSAyMi45MDU3QzIwLjU4IDIxLjg1MzMgMjAuNTggMjAuNzQwNyAyMS42OTI2IDE5Ljc0ODRDMjIuODk1NCAxOC42NjU5IDI0LjM2ODggMTguMTU0NyAy''@;'; put 'put ''NS44NzIyIDE3LjczMzdDMjcuOTc3MSAxNy4xMzI0IDMwLjExMiAxNi44MzE3IDMyLjI3NyAxNi42ODEzQzMyLjQ1NzUgMTYuNjgxMyAzMi42Njc5IDE2Ljc0MTUgMzIuODE4MyAxNi41OTExQzM0LjM4MTkgMTYuNjIxMiAzNi4wMDU2IDE2LjYyMTIgMzcuNTk5MyAxNi42MjEyWiIgZmlsbD0i''@;'; put 'put ''I0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODUwNyA0MS4zMDgyQzIyLjc3NTEgNDMuNzczOCAyNS41MTE1IDQ0LjY3NTkgMjguMzM4IDQ1LjI3NzNDMzMuOTMwOSA0Ni40ODAxIDM5LjUyMzggNDYuMzI5NyA0NC45NjYzIDQ0LjQwNTNDNDYuNjUwMiA0My44MDM5IDQ4LjIxMzggNDIuOTkyIDQ5''@;'; put 'put ''LjMyNjQgNDEuNDg4NkM0OS41MDY4IDQxLjI0OCA0OS41OTcgNDEuMzY4MyA0OS42ODcyIDQxLjU0ODdDNDkuODY3NyA0MS45Mzk2IDQ5Ljk1NzkgNDIuMzMwNSA0OS45NTc5IDQyLjc1MTVDNDkuOTU3OSA0NC4yMjQ5IDQ5Ljk1NzkgNDUuNzI4NCA0OS45NTc5IDQ3LjIwMThDNDkuOTU3OSA0''@;'; put 'put ''OC4xNjQgNDkuNTA2OCA0OC45MTU3IDQ4Ljg0NTMgNDkuNTc3MkM0Ny40NjIxIDUwLjk2MDQgNDUuNzE4MSA1MS43MTIyIDQzLjg4MzggNTIuMjgzNUM0MC4xODUzIDUzLjQyNjEgMzYuMzk2NiA1My42NjY3IDMyLjU3NzcgNTMuMzk2MUMyOS43MjEyIDUzLjE4NTYgMjYuOTU0OCA1Mi42NDQz''@;'; put 'put ''IDI0LjMzODcgNTEuNDcxNkMyMy4yMjYxIDUwLjk2MDQgMjIuMjAzOCA1MC4zNTkxIDIxLjM5MTkgNDkuNDI2OUMyMC43NjA1IDQ4LjcwNTIgMjAuNDI5NyA0Ny44OTM0IDIwLjQyOTcgNDYuOTMxMUMyMC40NTk4IDQ1LjU3OCAyMC40Mjk3IDQ0LjIyNDkgMjAuNDI5NyA0Mi44NzE4QzIwLjQy''@;'; put 'put ''OTcgNDIuMzMwNSAyMC41MTk5IDQxLjgxOTMgMjAuODUwNyA0MS4zMDgyWiIgZmlsbD0iIzhFQzYzRiIvPgo8cGF0aCBkPSJNMjAuODgwNyAzMi4wMTY3QzIyLjQ3NDQgMzQuMTUxNiAyNC42OTk2IDM1LjA1MzcgMjcuMDc1IDM1LjY4NTJDMzIuNzU4MiAzNy4xODg2IDM4LjQ0MTMgMzcuMTU4''@;'; put 'put ''NiA0NC4wNjQzIDM1LjQ3NDdDNDUuOTI4NiAzNC45MzM0IDQ3LjY3MjYgMzQuMTIxNiA0OS4wMjU4IDMyLjY0ODJDNDkuMjA2MiAzMi40Njc3IDQ5LjMyNjUgMzIuMDQ2OCA0OS41MzY5IDMyLjEwNjlDNDkuODM3NiAzMi4xOTcxIDQ5LjgzNzYgMzIuNjE4MSA0OS45Mjc4IDMyLjk0ODhDNTAu''@;'; put 'put ''MDQ4MSAzMy40NiA0OS45ODggMzMuOTcxMiA0OS45ODggMzQuNDgyNEM0OS45ODggMzUuNTA0NyA0OS45NTc5IDM2LjQ5NyA0OS45ODggMzcuNTE5NEM1MC4wNDgxIDM4Ljc4MjMgNDkuNTM2OSAzOS43NzQ2IDQ4LjYwNDggNDAuNTg2NUM0Ny4xOTE1IDQxLjg0OTQgNDUuNDc3NiA0Mi42MDEx''@;'; put 'put ''IDQzLjY0MzMgNDMuMDgyMkMzNy40NzkxIDQ0LjczNjEgMzEuMzQ0OSA0NC43MDYgMjUuMzAwOSA0Mi42MDExQzIzLjgyNzUgNDIuMDkgMjIuNDc0NCA0MS4zNjgzIDIxLjM5MTkgNDAuMTk1NkMyMC43MzA0IDM5LjQ3MzkgMjAuMzk5NyAzOC42MzIgMjAuMzk5NyAzNy42Mzk3QzIwLjQyOTcg''@;'; put 'put ''MzYuMzE2NiAyMC4zOTk3IDM0Ljk2MzUgMjAuMzk5NyAzMy42NDA0QzIwLjQyOTcgMzMuMDk5MiAyMC41MTk5IDMyLjU1NzkgMjAuODgwNyAzMi4wMTY3WiIgZmlsbD0iI0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODIwNyAyMy4wODYxQzIxLjI3MTcgMjQuNDA5MSAyMi4zNTQyIDI1LjAxMDUg''@;'; put 'put ''MjMuNDk2OSAyNS41NTE3QzI1LjU0MTYgMjYuNTE0IDI3LjczNjYgMjYuOTY1IDI5LjkzMTcgMjcuMjM1N0MzNC4yOTE4IDI3Ljc3NjkgMzguNjUxOSAyNy43MTY4IDQyLjk1MTggMjYuODE0N0M0NC42OTU4IDI2LjQ1MzkgNDYuMzc5NyAyNS45NzI3IDQ3LjkxMzIgMjUuMDEwNUM0OC43ODUz''@;'; put 'put ''IDI0LjQ2OTMgNDkuMjM2MyAyMy45NTgxIDQ5LjUzNyAyMy4xMTYxQzQ5LjgzNzcgMjMuNTM3MSA0OS45Mjc5IDIzLjk4ODIgNDkuOTI3OSAyNC40MzkyQzQ5LjkyNzkgMjUuOTQyNyA0OS45NTggMjcuNDE2MSA0OS45Mjc5IDI4LjkxOTVDNDkuODk3OCAzMC4xODI1IDQ5LjE3NjIgMzEuMDg0''@;'; put 'put ''NSA0OC4yNDQgMzEuODM2M0M0Ni41IDMzLjIxOTUgNDQuNDU1MyAzMy45NDExIDQyLjMyMDMgMzQuNDIyM0MzNi42NjczIDM1LjY1NTEgMzEuMDc0NCAzNS41NjQ5IDI1LjU3MTcgMzMuNzAwNkMyNC4xMjgzIDMzLjIxOTUgMjIuNzQ1MSAzMi41Mjc5IDIxLjYzMjYgMzEuNDQ1NEMyMC43OTA2''@;'; put 'put ''IDMwLjYzMzUgMjAuMzM5NiAyOS43MDE0IDIwLjM2OTYgMjguNDk4NkMyMC4zOTk3IDI3LjIwNTYgMjAuMzY5NiAyNS45MTI2IDIwLjM2OTYgMjQuNjE5NkMyMC40Mjk4IDI0LjA0ODMgMjAuNTIgMjMuNTY3MiAyMC44MjA3IDIzLjA4NjFaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik01''@;'; put 'put ''NS4zNDAzIDYzLjQzOTNDNjAuMjQxNyA2My43MDk5IDYyLjg1NzcgNTcuNjk2IDU5LjMwOTUgNTQuMjk4MUM1NS41ODA5IDUwLjcxOTkgNDkuNDQ2NyA1NC4wNTc2IDUwLjQwOSA1OS4xMDkzQzI4LjI0NzggNzMuMjQxOSAtMC4yNTgwMzQgNTIuMTAzMSA3Ljg2MDcxIDI2LjQyMzhMMi4zODgw''@;'; put 'put ''OCAyMi43NTUzQy05LjkxMDMzIDU1LjQ0MDggMjcuOTQ3MSA4My4wNzQ2IDU1LjM0MDMgNjMuNDM5M1pNNTMuNzc2NyA1Ni4zNzI5QzU2LjA2MiA1My45OTc0IDU5LjcwMDQgNTcuMzA1MSA1Ny41NjU1IDU5LjgwMDlDNTUuMzEwMyA2Mi40MTY5IDUxLjM0MTEgNTguODk4OCA1My43NzY3IDU2''@;'; put 'put ''LjM3MjlaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik0xMC42MjcyIDE1LjI2ODFDMTQuMTQ1MyAxOC42MzU4IDE5Ljk0ODcgMTUuODY5NCAxOS42MTc5IDExLjA1ODNDNDEuNzQ5IC0zLjE5NDYxIDcwLjQwNTIgMTcuOTE0MiA2Mi4yODY1IDQzLjY4MzZMNjcuNzU5MSA0Ny4zNTIxQzc5''@;'; put 'put ''LjY5NjcgMTUuNTk4OCA0My40NjMgLTEyLjk5NzIgMTUuNDM4MyA2LjIxNzE1QzEwLjE3NjEgNS4xMzQ2NSA2Ljc3ODI3IDExLjU2OTUgMTAuNjI3MiAxNS4yNjgxWk0xNi4xNTk5IDEzLjE5MzNDMTMuODE0NSAxNS42Mjg5IDEwLjExNiAxMi4wODA3IDEyLjQ2MTQgOS42NDUwN0MxNC44MDY4''@;'; put 'put ''IDcuMjA5NDQgMTguNTA1NCAxMC43NTc2IDE2LjE1OTkgMTMuMTkzM1oiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDFfOCI+CjxyZWN0IHdpZHRoPSI3MCIgaGVpZ2h0PSI3MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8''@;'; put 'put ''L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=favicon-ico; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAApgAAAJ6CAYAAACMvTJAAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr+kEBJaIAJSQm+CFOnSe0c62AhJgFAiJAQVO7Ko4FpQEQFR0RUQRdcCyKIidmUR7P1hQWVlXSzYUHmTArq+dt49Z/75cufeO9+d3JkzA4CiNSsnJwtVAiCbnyeICvBmJiQmMUmP''@;'; put 'put ''AAY0AB0YAiUWW5jjFRkZCqCM9X+XdzcAIu6vWopj/ev4fxVlDlfIBgCJhDiFI2RnQ3wYAFydnSPIA4DQBfUGc/NyxHgIYlUBJAgAERfjNClWF+MUKZ4ksYmJ8oHYEwAylcUSpAGgIObNzGenwTgKYo7WfA6PD3E1xO7sdBYH4nsQT8rOngOxIhli05Tv4qT9LWbKeEwWK20cS3ORCNmXJ8zJYs3/''@;'; put 'put ''P5fjf0t2lmhsDn3YqOmCwChxznDd6jPnhIgxFeJ2fkp4BMQqEJ/ncST2YnwnXRQYK7MfZAt94JoBBgAo4LB8QyDWgpghyoz1kmFblkDiC+3RcF5eUIwMpwjmRMnio/n8rPBQWZyV6dygMVzDFfpFj9mk8vyDIIaVhh4uSI+Jl/JET+fz4sIhVoC4R5gZHSLzfVCQ7hM+ZiMQRYk5G0L8NlXgHyW1''@;'; put 'put ''wdSzhWN5YVZslmQuWAuYZ156TKDUF0vgChNCxzhwuL5+Ug4Yh8uPlXHDYHV5R8l8i3OyImX2WA03KyBKus7YAWF+9JjvlTxYYNJ1wB5lsIIjZXO9y8mLjJFyw1EQCnyAL2ACEWwpYA7IALzuwZZB+Es64g9YQADSABdYyjRjHvGSET78RoMC8CdEXCAc9/OWjHJBPtR/GddKv5YgVTKaL/HIBE8h''@;'; put 'put ''zsY1cXfcFQ+FX0/YbHEn3HnMj6k4NivRj+hLDCT6E83GebAh6yzYBID3b3QhsOfC7MRc+GM5fItHeEroJTwiXCf0EW6DOPBEEkVmNZtXKPiBOROEgT4YzV+WXcr32eHGkLU97o27Qf6QO87ANYElPgVm4oV7wNzsofZ7hqJxbt/W8sf5xKy/z0emVzBXsJexSBn/Z3zGrX6M4vPdGnFgH/KjJbYS''@;'; put 'put ''O4Sdw05iF7B2rAUwsRNYK9aFHRPj8Up4IqmEsdmiJNwyYRzemI11o/WA9ecf5mbJ5hevlzCPOy9PvBl85uTMF/DS0vOYXvA05jKD+GyrSUxbaxsnAMRnu/ToeMOQnNkI4+I3XW4HAM4lUJn2TccyAODoUwDo777pDF7Dcl8HwLEetkiQL9WJj2NAABSgCHeFBtABBsAU5mMLHIAr8AR+IBhEgBiQ''@;'; put 'put ''CGbBFU8H2ZDzXLAQLAPFoBSsA5tAJdgGdoJ6sA8cBC2gHZwEZ8El0AOug7uwLvrBCzAE3oERBEFICA2hIxqILmKEWCC2iBPijvghoUgUkogkI2kIHxEhC5HlSClShlQiO5AG5FfkKHISuYD0IreRh8gA8hr5hGIoFVVFtVFjdDLqhHqhIWgMOhNNQ3PRArQIXYNWoLXoXrQZPYleQq+jfegLdBgD''@;'; put 'put ''mDzGwPQwS8wJ88EisCQsFRNgi7ESrByrxZqwNvg/X8X6sEHsI07E6TgTt4S1GYjH4mw8F1+Mr8Yr8Xq8GT+NX8Uf4kP4VwKNoEWwILgQgggJhDTCXEIxoZywm3CEcAbum37COyKRyCCaEB3hvkwkZhAXEFcTtxL3EzuIvcTHxGESiaRBsiC5kSJILFIeqZi0hbSXdIJ0hdRP+kCWJ+uSbcn+5CQy''@;'; put 'put ''n1xILifvIR8nXyE/I4/IKckZybnIRchx5ObLrZXbJdcmd1muX26EokwxobhRYigZlGWUCkoT5QzlHuWNvLy8vryz/DR5nvxS+Qr5A/Ln5R/Kf6SqUM2pPtQZVBF1DbWO2kG9TX1Do9GMaZ60JFoebQ2tgXaK9oD2QYGuYKUQpMBRWKJQpdCscEXhpaKcopGil+IsxQLFcsVDipcVB5XklIyVfJRY''@;'; put 'put ''SouVqpSOKt1UGlamK9soRyhnK69W3qN8Qfm5CknFWMVPhaNSpLJT5ZTKYzpGN6D70Nn05fRd9DP0flWiqolqkGqGaqnqPtVu1SE1FbUpanFq89Sq1I6p9TEwhjEjiJHFWMs4yLjB+DRBe4LXBO6EVROaJlyZ8F59orqnOle9RH2/+nX1TxpMDT+NTI31Gi0a9zVxTXPNaZpzNWs0z2gOTlSd6DqR''@;'; put 'put ''PbFk4sGJd7RQLXOtKK0FWju1urSGtXW0A7RztLdon9Ie1GHoeOpk6GzUOa4zoEvXddfl6W7UPaH7B1ON6cXMYlYwTzOH9LT0AvVEejv0uvVG9E30Y/UL9ffr3zegGDgZpBpsNOg0GDLUNQwzXGjYaHjHSM7IySjdaLPROaP3xibG8cYrjFuMn5uomwSZFJg0mtwzpZl6mOaa1ppeMyOaOZllmm01''@;'; put 'put ''6zFHze3N082rzC9boBYOFjyLrRa9kwiTnCfxJ9VOumlJtfSyzLdstHxoxbAKtSq0arF6OdlwctLk9ZPPTf5qbW+dZb3L+q6Nik2wTaFNm81rW3Nbtm2V7TU7mp2/3RK7VrtXUyymcKfUTLllT7cPs19h32n/xcHRQeDQ5DDgaOiY7FjteNNJ1SnSabXTeWeCs7fzEud2548uDi55Lgdd/nK1dM10''@;'; put 'put ''3eP6fKrJVO7UXVMfu+m7sdx2uPW5M92T3be793noebA8aj0eeRp4cjx3ez7zMvPK8Nrr9dLb2lvgfcT7vY+LzyKfDl/MN8C3xLfbT8Uv1q/S74G/vn+af6P/UIB9wIKAjkBCYEjg+sCbQdpB7KCGoKFgx+BFwadDqCHRIZUhj0LNQwWhbWFoWHDYhrB74Ubh/PCWCBARFLEh4n6kSWRu5G/TiNMi''@;'; put 'put ''p1VNexplE7Uw6lw0PXp29J7odzHeMWtj7saaxopiO+MU42bENcS9j/eNL4vvS5icsCjhUqJmIi+xNYmUFJe0O2l4ut/0TdP7Z9jPKJ5xY6bJzHkzL8zSnJU169hsxdms2YeSCcnxyXuSP7MiWLWs4ZSglOqUIbYPezP7BceTs5EzwHXjlnGfpbqllqU+T3NL25A2kO6RXp4+yPPhVfJeZQRmbMt4''@;'; put 'put ''nxmRWZc5mhWftT+bnJ2cfZSvws/kn56jM2fenN4ci5zinL5cl9xNuUOCEMFuISKcKWzNU4XXnC6Rqegn0cN89/yq/A9z4+Yemqc8jz+va775/FXznxX4F/yyAF/AXtC5UG/hsoUPF3kt2rEYWZyyuHOJwZKiJf1LA5bWL6Msy1z2e6F1YVnh2+Xxy9uKtIuWFj3+KeCnxmKFYkHxzRWuK7atxFfy''@;'; put 'put ''Vnavslu1ZdXXEk7JxVLr0vLSz6vZqy/+bPNzxc+ja1LXdK91WFuzjriOv+7Geo/19WXKZQVljzeEbWjeyNxYsvHtptmbLpRPKd+2mbJZtLmvIrSidYvhlnVbPlemV16v8q7aX61Vvar6/VbO1is1njVN27S3lW77tJ23/daOgB3Ntca15TuJO/N3Pt0Vt+vcL06/NOzW3F26+0sdv66vPqr+dINj''@;'; put 'put ''Q8MerT1rG9FGUePA3hl7e/b57mttsmzasZ+xv/QAOCA68Mevyb/eOBhysPOQ06Gmw0aHq4/Qj5Q0I83zm4da0lv6WhNbe48GH+1sc2078pvVb3Xteu1Vx9SOrT1OOV50fPREwYnhjpyOwZNpJx93zu68eyrh1LXT0053nwk5c/6s/9lT57zOnTjvdr79gsuFoxedLrZccrjU3GXfdeR3+9+PdDt0''@;'; put 'put ''N192vNza49zT1ju19/gVjysnr/pePXst6Nql6+HXe2/E3rh1c8bNvlucW89vZ91+dSf/zsjdpfcI90ruK90vf6D1oPYfZv/Y3+fQd+yh78OuR9GP7j5mP37xRPjkc3/RU9rT8me6zxqe2z5vH/Af6Plj+h/9L3JejAwW/6n8Z/VL05eH//L8q2soYaj/leDV6OvVbzTe1L2d8rZzOHL4wbvsdyPv''@;'; put 'put ''Sz5ofKj/6PTx3Kf4T89G5n4mfa74Yval7WvI13uj2aOjOSwBS3IVwGBDU1MBeF0HAC0R3h16AKAoSN9eEkGk70UJAv8JS99nEnEAoM4TgNilAITCO0oNbEYQU2EvvnrHeALUzm68yUSYamcrjUWFLxjCh9HRN9oAkNoA+CIYHR3ZOjr6ZRckexuAjlzpm08sRHi/324mRt2XRobAD/JPCotuA2JA''@;'; put 'put ''n4YAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y''@;'; put 'put ''Mi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2NDwvZXhpZjpQaXhlbFhEaW1lbnNp''@;'; put 'put ''b24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42MzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSHKtHgAAABxpRE9UAAAAAgAAAAAAAAE9AAAAKAAAAT0AAAE9AACKlRxL/UIAAEAASURB''@;'; put 'put ''VHgB7L0HgNxmeqb5FVChIzuRTTZzzlESRUVSFCUqzIwmjyZnx71zWO96b89h7b31ede+27O9DjOe8eSo0USlURxpGESKYhBzzqFJdrNzqADg3g/FoppUk6zuQlWjUC+kZmXgx/OjUC++GFq25v2OcCEBEiABEiABEiABEiABjwiEKDA9IsnVkAAJkAAJkAAJkAAJuAQoMHkgkAAJkAAJkAAJkAAJ''@;'; put 'put ''eEqAAtNTnFwZCZAACZAACZAACZAABSaPARIgARIgARIgARIgAU8JUGB6ipMrIwESIAESIAESIAESoMDkMUACJEACJEACJEACJOApAQpMT3FyZSRAAiRAAiRAAiRAAhSYPAZIgARIgARIgARIgAQ8JUCB6SlOrowESIAESIAESIAESIACk8cACZAACZAACZAACZCApwQoMD3FyZWRAAmQAAmQAAmQ''@;'; put 'put ''AAlQYPIYIAESIAESIAESIAES8JQABaanOLkyEiABEiABEiABEiABCkweAyRAAiRAAiRAAiRAAp4SoMD0FCdXRgIkQAIkQAIkQAIkQIHJY4AESIAESIAESIAESMBTAhSYnuLkykiABEiABEiABEiABCgweQyQAAmQAAmQAAmQAAl4SoAC01OcXBkJkAAJkAAJkAAJkAAFJo8BEiABEiABEiABEiAB''@;'; put 'put ''TwlQYHqKkysjARIgARIgARIgARKgwOQxQAIkQAIkQAIkQAIk4CkBCkxPcXJlJEACJEACJEACJEACFJg8BkiABAJBwHEcMc2QmGFbwtGQhCM27ockEnMkHBOJRHGL52OVtlRW2VJW5UhZpT7W53G/PCTRCkdC+O+GC162EiL9vY4k4yGJ9+OvRx+HpKcTt90hSeA5Ky6SSuI+3qvvTyUMsZL4DJ6z''@;'; put 'put ''UrqFm2znhoPgiyRAAiTgbwIUmP6eH46OBEgAOiwCsRgpE4mVO64grKjCfQjDimo8rtDnRaJ4LVrmuILSjAhEo4hpiBhh/BkG/iDp8E9IHLHtNFbbdtw70KaiAhUvZbdgTFgdVog7+r/7l34yvQUR27Lxh1tszMF2kokQBCfEJv5SEKb9EKAJiNI4/vp7DOntdiBUcb/r8nN9+j5DUimIXt0AFxIg''@;'; put 'put ''ARIoIgIUmEU0WRwqCQSVQCjkSLlaFGFBrKh1ZFSDI1U16fsV+jwEZQRWyDCskZGwIWYEMi6juSAKIeH0H1ckqk7URUXdFb145U76tYL9e3mMeuPeNdJPGHqL/43LAlXHo0N0LAeC0oYYtcVSyyj+etU62mVId4dIT7uBPzwHS2lPZ0iSeN1x0uvUdXAhARIgAb8QoMD0y0xwHCQQeAJqXRRYHW2p''@;'; put 'put ''qheprrelpt6RStxW1YorLqNwU0diEJBwdeuiVkUHwtG1NEIwXjY8ptVYUHmltSesrek7KkYzQlRFqA2LZjKekr5uQ/p6HAhPU7pbRbouhaSzNS1A1U2fhBv+pu7+oDLkfpEACYw4AQrMEZ8CDoAEgkfAhFtahaRaIkc12lI7xpHqBkuqa+DOhkUyVhZ24yPThkeISFju1PLoCsmRsjYWyzRcNlhe''@;'; put 'put ''EZ5m2hKq2Ky4Lf39DuJARbph6Wxvgei8gFv86WMVpY59eQXFsr8cJwmQQFESoMAsymnjoEnAHwTUwhhBvGNlLayREJH14yAqxzpSOxqJNDVIoIFFUt3Zqh4zlkiKyDzOnWpHuN3VABxCgpMbD4r7qbiFWE+Izg5HOi4Y0nbelLaLAvEJiydc7bZF0ZnHWeGqSaAkCVBgluS0c6dJYHgEDI2VRGJN''@;'; put 'put ''TaMjDeNtaWiCoMT9asRLRitMJNVArMAsqRZJ5LjAJElz5PBIe/wpFZwqPDE/IVg89b4FV3tfry29bQ7EpiGtZwy51GxAgGrSEWM7PZ4Bro4ESo4ABWbJTTl3mASyJ2AY6tqGmISQHD0RgnICXN6Imyyv1jJABvQjxCSECvQkxWT2WP3zTgjO8GXRqZbPVMKCGx1WTrjW284ZcvEUROc5uNcvocQS''@;'; put 'put ''Xev+mTeOhASKgAAFZhFMEodIAoUiYJrpDO6GCbY0TlFBaSMZR7O7w9AfaTe3pdnZapmkcbJQ01K47ailE4LTtXSmIxtgzbSksw1CExbOC8dD0noWVk4kFdmWW6ipcGPjlkiABIqKAAVmUU0XB0sC3hIIwUJZhfjJMRMdaZzqyGgIylGjYaGshB/VdXUjfk/FJF3d3oIvprUNtHIiL70PgrPrkrgu''@;'; put 'put ''9fPHDWk5bbgC1EHNTy4kQAIkkCFAgZkhwVsSKAkC6cLkGj85biqslPirHWMj49uE5QqSEiIhpVXIr9QDKgko3MmhEMBxEtaC9e41iNbptKTjvMgFuNObj4Wk5YyJgvHIVqeFeyhU+V4SCBwBCszATSl3iASuJqBWyuo6WCinODJ+puXGUlbVaXccLVmD0jZaIogWyquh8VH2BNTCibR1vUDRxCHN''@;'; put 'put ''VG89G5LmI6ach0u9HQlEzFLPHiffSQJBIUCBGZSZ5H6QwAACZlhLBjkybrolTbNsqUctysoaFKeE21sLdWscJWMoBwDjXW8IZGI4VXAiaSgO6+YlZKU3Q2g2HzZh3Uz3aUekpzfb41pIgAR8S4AC07dTw4GRwNAIRNFGsX6CJRNm2tI0A7UoUT6orNx0M73VskQr5dB48t0eEBhg3Uyh/WUnug2p''@;'; put 'put ''G/2Mis0T6l6H0GSrSw9AcxUk4D8CFJj+mxOOiASyIqBFzmNlIg0oHzRxliXjYamsGYNWi1HUMITrW3ta00qZFUq+qRAEoCU1O91AAXgLsb49bbacg8g8cwCudIhOt8sQxWYhZoLbIIGCEKDALAhmboQEvCNgRhwZo5bKOY4rLGsaL4tKTdDR6uZMrvAONteUNwIG3OgmxKbmlHWh2PuF4yKnDkJs''@;'; put 'put ''InaztwebpdjMG3uumAQKQYACsxCUuQ0SyJGAgfqUdYipnDQbwnK2dtBBi8YyJOlQVOZIlh/3A4EQxKYmCmlocNclWDaPGXJ6ryHnjpuS6NMRMmbTD/PEMZDAUAhQYA6FFt9LAgUkoIXNq2odCEpLpsyH1XKSjXaMSNWl+7uAs8BNFZpAxrJpIcRDOwqdOWjIyX3oKoRC71aCQrPQ88HtkcBwCVBg''@;'; put 'put ''DpccP0cCeSDgxlWWizRNs2TyAhtlhWypqjHh9XYQUwnzDssJ5YE6V+lLAtCSrtiEZTMZt6UFpY9O7Ydlc78p7RCejkWx6ct546BI4DIBCkweCiTgAwLqAteC51MX2jJhnpYVciQcNhBTCWnpNvr2wSA5BBIYKQLQkvp9EPzf3+Wg7JHI8V2mnD1sSH+vCk2KzZGaGm6XBK5HgALzemT4PAnkmYBa''@;'; put 'put ''K8sqHNSpdGTGopQ0ThOpqEIcGuIqLSbr5Jk+V1+sBNxe6UgO0koJHS0O3OchObHHlEvokW7Rqlms08pxB5AABWYAJ5W75G8C2lmnZowjUxdZMnW+JbVjUboF5VtYq9Lf88bR+Y+Aljwy4UKP99pyHiWPju40ELMZln7NQqdV038TxhGVFAEKzJKabu7sSBIIwQ3eiESdOStSMnEmrJfV6SxwWitH''@;'; put 'put ''cla47UAQ0ILul62a7RccOYEMdHWht51nT/RAzC93oigJUGAW5bRx0MVCwE3agRt84hxbZt1iSeNkR6IxxlYWy/xxnMVHIGPV7O9x5PiekBzZhtqap/RijnGaxTebHHExE6DALObZ49j9S0BLDNU4Mg1u8BnLbNSwRH5CyJBkEgGWLITu33njyAJDQGM1IxFD4nFLLsB9fnir6RZyj/fCeR6i2AzM''@;'; put 'put ''RHNHfEuAAtO3U8OBFSMBrV1ZN9aWGbfYMm2hJdUNJmIrbbG1xBAXEiCBwhOAlowgA11LfV06J3L4LVOOvRWSng6kpDNOs/DzwS2WDAEKzJKZau5oPglo4s6YyYivvM2SSXNtZIObkoSwZImhfFLnuklgaARc9znEZmeL5cZoHt5uSPsFjdOkRXNoJPluErg5AQrMmzPiO0jgugS0fuW4GZbMXY4W''@;'; put 'put ''jkjciZWjtV0S9VNYEP26zPgCCYw0AW1NqVbNnk5LTqJT0MHNprSgU5BjU2iO9Nxw+8EhQIEZnLnknhSQgAlhOXGOJXPusKVpqiXhSJjxlQXkz02RgCcEEKcZRZxmX68lZw+FZP8bYTl/3EAtWgpNT/hyJSVNgAKzpKefOz9UAmbYlsnoCz5vhSVjpkBYmhSWQ2XI95OA7whonGYUYS1ICDp7JCQH''@;'; put 'put ''NoflDLoEUWj6bqY4oCIiQIFZRJPFoY4cgbSwtGXuClvGTnXcLFRN3mFG+MjNCbdMAp4TUKEZMSWVTKEdZVj2bwrJ6QNI1KNF03PUXGHwCVBgBn+OuYc5EDBNWyaiN/j8OwcIS42x5EICJBBcApeFpjZBaD4Wkn2vG3IKQpMWzeBOOffMewIUmN4z5RoDQECTdybOtGT+PbaMmwaLpbZypLAMwMxy''@;'; put 'put ''F0hgCAQgNMOwaFpWSs4dMmXvJkPOHqbQHAJBvrWECVBglvDkc9ffSUDbOTZNsWXePSlkhdtu8k6KxdHfCYrPkEApEbgsNNV1fvqQIfs3huUckoHYHaiUDgLu61AJUGAOlRjfH0gCBupY1jfZsuDelEyeq+0cEfBPYRnIueZOkcCwCVx2nSeQDHTqQEj2rtfyRrBosrzRsJHyg8ElQIEZ3LnlnmVB''@;'; put 'put ''QDvGVY+GsLwrJdOWoEB6BepYJtjOMQt0fAsJlC4BnDeiyDrv67FRsF1kz+th6WDB9tI9HrjngxKgwBwUC58MPgFHyqscmYNyQ3NQJL26lgXSgz/n3EMS8JjA5Tqa3SjYfuhNuM5RR7OnHeqTLSg9Bs3VFSMBCsxinDWOOScCkYgjU5elZCEywxuaDLZ0zIkmP0wCJJDpDNR20ZZ9KG10ZFtY+ntD''@;'; put 'put ''bjkz0iGBUiVAgVmqM1+C+62Z4ePR1nHRKiTyTLPdbo52yilBEtxlEiCBfBAw0ILSRAvKCydt2bXOlFP7kIGeUosmFxIoPQIUmKU35yW3x6GQIzWNtixamZRpC1F2BLFTKY2z5EICJEACeSBgov2kbdtyen9Idr8Wlovoc85EoDyA5ip9TYAC09fTw8HlQsBxHKmoEpm9IiXz7rCkahQTeHLhyc+S''@;'; put 'put ''AAkMgQAMl9oVqK/PkiNbDdm70ZSuNgMroEVzCBT51iImQIFZxJPHoV+fgBl2ZPI8SxbfZ8no8Yak0JHDsegOvz4xvkICJJAXApcTgdouWrJnvSFHtkckmaDIzAtrrtRXBCgwfTUdHEyuBNQdXj/OlsWrbZk83xIjZCAGiq0dc+XKz5MACeRGQOMz9e/sEZGdvzJZqD03nPx0ERCgwCyCSeIQb05A''@;'; put 'put ''3eFllSJz1R1+J93hNyfGd5AACYwEAY0B10Lth+E2370+LN1tas2kRXMk5oLbzC8BCsz88uXaC0DAzQ5HW8clq1Mybgrd4QVAzk2QAAnkQgChmFHEZ7Zd0GxzuM13hMVKUmTmgpSf9R8BCkz/zQlHlDUBR6rqHJQdSsmspbaYUbjDk3SHZ42PbyQBEhhRAuoy125iJw/Abf5KBG0nQ+I4FJojOinc''@;'; put 'put ''uGcEKDA9Q8kVFZKAGbZl6mJYLZHEUz/WcF1OwhyeQk4Bt0UCJOARgXAM2eZdlux93ZR9aDuZ6KPI9AgtVzOCBCgwRxA+Nz10Anq1XzPGkqX3Q2AugrUSotJmdvjQQfITJEACviKg3YDCpoHkH1t2vBRmEpCvZoeDGQ4BCszhUONnRoSAiRaPs27RTjwpqalnTcsRmQRulARIIK8EwijSHo/bcvAN''@;'; put 'put ''Q/agG1BPl8GWk3klzpXniwAFZr7Icr2eEXBLD421ZemDFmpbwmhpO7RaekaXKyIBEvAdgcu1M5vRcnL7iyhpdNTEOY9uc9/NEwd0QwIUmDfEwxe9IKACMYzC52ZYxIg6KMiRPlGqUEyhT6+N7Ekrpd7ud55ATbx/1rIUYi1TSOgJSxLlPbiQAAmQQCkQ0JaTyYQjBzZnrJmaFPTO82QpsOA+Fh8B''@;'; put 'put ''CszimzMfj9iRylr0/R5tS22j9v9Glne1LVG0aywrg7iEiztk4A/Fz1VLhhBCaaHDTjIBl1CfSH9XSLo6DOlqEem4COGJ1xfcjVjL+bBYYq/ZicfHU8+hkQAJ5IfAZWvmeVgzt72I2Myj6GtOa2Z+WHOtnhKgwPQUZ+mtLFpmy+iJtjTNsGTsFJFRDSh4XoVg9bD23H3bne0meOMf93YAJvdaXPUm''@;'; put 'put ''7hiGxhrph0SSKQslh9DLN3a5E8+1HxywDt4lgaESuMoIdPmBeyzqiq7cuclaBx7PKPR/ZRn4/JUneYcEciOg1sxEwpYDGw3ZtT4i8d5sD9TctstPk8BwCVBgDpdcCX/OMEUap6RkynxbJs52pLpeRAPTNZs7pRndcH3nurg60/0n1zXx80En4P7MwsqjC65R8A9a8qlKTBvK3edV/zn6HyIsbJjG''@;'; put 'put ''bbQPtS0cs3jBsWEtx3Fr41at5LbWIbzJIaxGeC3w795ie2qZN3S7JuqxYhAGLrBC+J5oOEh6fFilrlPH4W7THVD6q6KPb7I9dyf4DwngGIvgXHv2iCNbnzel5TSOYRy3XEjAjwQoMP04Kz4dU7TclikLLZl9K6yW421YFxETicLmdF37dMICMqy0QIN4U8GoVu6McIQosyAWk8i41RjeOGoHpuIh''@;'; put 'put ''3DrS3yuoJYjQix48j+cSsPYk+/FcHJ9BSEYqhYuhBGJ/ITjVUu4gBsO9LsI67SzCfF2LOwSkKkYznB6bhoBEEGdsRnDBFcNfFBb4Mlj08RetwB/CRGIVCBep1Pvpx5EY4pNjKhqwDl0PVuxqTR2PCmGNDdGteHDRll4T/w0CAW032d9tyVu/NhGfaeJYxpeCCwn4jAAFps8mxI/DiZZZKA9ky5wV''@;'; put 'put ''ttShqLmNHzsLFqCbWXn8uC8ck38JuJ5qWGhMtQhqhxNXQDoQhRCREId9PRCOiNPt6dA/Q3o7Q9Lbhdjd7hAEZVpAppAwZkNspmMt/Luvhlo8kfgWU6FZrqJTpHwUYpjxV1GTvtX7KkzLIEo1VCQMAeooJFcEqwUWd9L/+3dHObK8EdDviH5XTuwTWDPD0n4RIhPHAxcS8AsBCky/zIQPx6Fuv2mL''@;'; put 'put ''LVm80paG8WrtUdciz2A+nKqiGlLGZayu5BBEU0ZIxvtTEodY7IFw7LhgSMclke4WU7rbVVymrZBqqfS7ePRqMtRiG47ZUo4kuSokz2kC3Sgk0FXX6WMbVRVgES2DyID1U5lk3P9q7aTL3atZ8P96IugC1H7Rkm0vmHJyH3qaozIHFxLwAwEKTD/Mgu/G4Ej9OFtueTAlk7TuJMZnJyksfTdNRTCg''@;'; put 'put ''a8WkKp8UEhXUha2WyI6WkLRdCEknqgZ0tqhVEglecYMC6SZzayL+s0ItnhCdtWNQsWEc/hosiE9YPKu1aoOJUAKITjgaUrgwFFg7+Q2+CdQiflljfh3EU+zdZMquX6HtJC7IWM6oiCc0IEOnwAzIRHq1GyHDlnl32LL4viR+wMKIacsiIM2rjXM9RU/AFZSXW95p/VONdezvtaX7kiFtEJGtZwxp''@;'; put 'put ''P49yVK1wa+NH0GK5FQ/nPO1uV+tmLRoT1EN06m3NaJEKiM4o3OyaAOVgTjR2VWt/UXR6iH+kV4UvXxSxmWeQAPTmLw0kAJm4UKM1c6SnpZS3T4FZyrM/YN/VvlGF2K/lj6ZkxmK1euAZjfHiQgI3IKA/X24smFuWynETbrphheyAiGyBmLx0FsKyGS7ubtNNqLnBqvhSPgjAYhxDfGdVHcJcmhxp''@;'; put 'put ''QEmxBngnqhs07lNj+C7HVKuVk4IzHzNQ8HVqAlBvpy1bXzLk2A4YCRCXzIUERoIABeZIUPfbNmFpapxky13vs6RhgiZL0Grptynyy3jcn6rLFkoNntQMbo2RbD0bkgsnDdwidhLxk5rRzcWfBExkv1fUWq6Fc8zkdEUIbYxQVmWIaaqrFRZOCk5/Tl6WozLwHdXv5wG4zHfAZd6L5Di6zLOEx7d5''@;'; put 'put ''RoAC0zOUxbkidWNORj3LOx9LIYsVLkvEx3EhgYEEtCyQCg+9TSEWt6fTkfZzITl33ICoRBzlRRMlgSgoBzIrpvuamF4Jt7paOMdMsWTMZEfqxtjIXtc5h4XTrRnKGM5imlN3rJjXjMt8y7Ome/FHl3nRzWJRD5gCs6inL7fBa5b4zFtTcsejlphRLe9Cl3huRIPxaVcqagZzGDFc+K+/N+VaJZsh''@;'; put 'put ''KM8fxw/VGS0PRItIMGb7nXuhFk51qY+BV6NpOiycuK2qD0GspJOG1LqpyUNcioOAusy72y2UMorI8d3aGY0Xg8Uxc8U/SgrM4p/DYe2BistZt1ly57tR90UD/xlvOSyOQfmQ/uRkYiltCAi1UraeCsmZo6Y0Hwu55YLQvZNLCRKIlaeThZpm2DJuakrqmxC/WYEsdZg+U3pQMHbT90eFusy1g9Tu''@;'; put 'put ''9cgyfzWM2rIUmb6ftAAMkAIzAJM41F3IWC7veg9+HLR+HmKuuJQegbSoRNwdalFqUldXqy0X4fI+fcB04ym722mlLL2j4sZ7rO0xR9U7Mg6WzfGzYN2cYKM4PDoQIYQilaTYvDG9EX4VhoQIkvGO77Vly7Nh6URlB1TuH+FBcfNBJkCBGeTZHWTfNOZyygJb7v1gUgwUaKblchBIAX7KFZUaUwn3''@;'; put 'put ''t4rKbojKc8cMOX3QkIsn0vXzArz73DVPCaTrcI6basnEOY6MRfxmZQ36sFNsekrZ65VpYfbWs7Zsetp0Q14c9jL3GjHXd5kABWYpHQoQl2MnOXL/J+MoXaLB+7RclsL0uzaKyzGV6v7uaHPkAuIpT+6FqDxJUVkKx0Ah9rGyxpax0yyZNEBsapKQRTd6IfAPaRtmxEAdWlveRPefI1vDaP9LS+aQ''@;'; put 'put ''APLNWRGgwMwKU/G/SZM1RiFTdM2nU1LXxGzx4p/Rm++BZgebl+tTakzlRZQROr43JM2Iq+zthOLkQgJ5IqDF3sfPdCA2kzJ6CiydVZowph3BkCCUp21ytUMjoDHX2jJr16uGvPVahMk/Q8PHd2dBgAIzC0hBeEsk4sg9H0rI9KUG61wGYUKvsw9qhwjBRWmERRL9trSeFjm535BT6FHc2UpReR1s''@;'; put 'put ''fDpPBDQkR/unT5pny+R5joxusiVcpt4TaBvNRs/TdrnaLAnghBFBlvnhbSJvPIMLz27GXWdJjm/LggAFZhaQiv0tIdOWBXdZcvu7UMeQrR+LfToHHX/GWmkjYauzzZYz+005tgexVqdZlmRQYHyy4ARMXOSOmaB1d5Myaa4j1Sh9pNnNllo1qTQLPh8DNxhB7/rmo7Zs+ElE2tHSFZepA1/mfRIY''@;'; put 'put ''FgEKzGFhK6IPwYIwZoIlD34uhStVZowX0czddKjuzwAyQzVZK9HjyPlTgjp3ppsF3oc6lVxIwK8EyqscmTgrJVMWatwm2lmWw6qJJHRaNUduxsJI/ulssWT9T8Ny/miYon/kpiIwW6bADMxUDr4jkZgtqz+eRJYnyojQejk4pCJ7VqWjgSB9/QXoanfkNKyVR3cY0oI2jbZFYVlk01nSwzVwAVyH''@;'; put 'put ''UkfTITQnzUvJqAaEd+CiyUL3IFo1C39o6MVqsldkMzr/HN1hMvmn8FMQqC1SYAZqOq/eGa13Oef2FHqMj6xr3LW0wRWmrQa1OPOVnrj4BdGOIDZu1bXLgKyr5+/aR2k3eLq8UOsZR47tNOUEMsF72hlbeS0rPi4+AuXVSAqabcm0pZY0TtbYwLTQZCH3ws6lm/yD8/FbSP7ZieQfXrQWln+QtkaB''@;'; put 'put ''GaTZHLAvmjVejbIhj/xGQirqDHEKXJJIxZDGV2kP6wQsp71d6GHdJRLvgTu3HyIT/0XLbYlWog9ytYi6zGJlKJeB2owpWC8oNtOT6Ypz6EcD2eCJXlvOomblkW2mnD0CS0OcwnLAIc+7ASGgsZpjJ1syY5lmoltSUYMMdD0lqFUzIPvo+93AiScCL8nezSJvPhfmucb3E+bPAVJg+nNech6Vdty4''@;'; put 'put ''ZU1SlqyBEOlHcFOBFrVShiEq4wjcbzkpcuYQivmi1WBHiymJPtWNKpkGLhCWldodxIbVAnFZs21pQK3OCrSiS+oPCgRnKS5pYQkZDpHe22nLqQMhOYx6dRdP4ce2NJGU4mFQ0vusrQ3rxzkybbElUxdaUtOAbwXc5yx1VKDDQkUm4jKP77Ll9V9EpKdjgPepQEPgZoqbAAVmcc/fdUbvSM0YRx7+''@;'; put 'put ''Yhw9g2G9VPdznhcVRG7xXojZ0/sMObAFYghFvG1YHoayqFu/fpwtM5ba+FFBTFY9+uZCrMKPPpTVFO17XWEJayXSsdDKzcHJPR0L1XaB1sqinVQOPGcClTXIPl+QkpmwajaMS3tH3OzznNfMFdyMgJthfsyWdU9GkATknqFu9hG+TgIuAQrMAB4Iar1ctiYlS9dI3q2XerpRo6QmnTQfdWT7S2Fp''@;'; put 'put ''PmbmThXB/zWwas5HeaXpt8KVHkW5HRWaAV2Uo7rBVUZ3XLDlyM6wHNsRkq42D1gGlBl3q/QIxMrh5UAy0Jxb0Ad9CrwlmhCk9TRL4/pzxCZcM8zbmm1Z/yQMB2dwscse5iM2F8W0YQrMYpqtLMaqbqVR9Y489IW4VNZCsOTRxeyKS7hwraQjezaasvs1uLUT3lraQtBX49F+btnaFOKyUCQ+obVM''@;'; put 'put ''sgBRJG95W1g6cqlZ5Og2Q44ieae3y1uORYKDwySBrAhEoojPnO3I7FuTMm6agXhBB0ITkecBOjdkBaKAbzJxkd+DGrsbfhqRs4fx20KRWUD6xbkpCszinLfrjjoE6+U8ZI7ficzxfMZeqjBy4wO7bdn8VERO7EHrmDwtmrBUhQxTFZmzb0FGvPrdi9yY6fKDxVLFcutZWw4hcefErrD0IQmKCwmQ''@;'; put 'put ''QHYEwrgAHTsrKfOWO9I0UxNThCWOskM3rHe5ZYz6HNn48wjCdygyhwWxhD5EgRmwydYr+wc/l5CxU/LnUk6LS0O6ECO4Di6TC4i1LMQSiTmy8J6ULL7Pgi7DKIowLvOKsASwtnMQltvVFW5SWBbiAOI2AkvAxClonCs0YdmcEZKwCk26zvMy36EwEq0SjmxGdvmhNzXDnxfFeQEdgJVSYAZgEq/s''@;'; put 'put ''Ar7nTXAnP/iZZLrTVx7cRa5Aglu865LIaz8KSwuymgu5hCO2zLvDklvWQmSqi6ZIfGLuKRgGyzCslpfOQ1hu1eSdMFzh7iuFRMhtkUBgCajQbJqZkrk4RzRNh9AMo8YuXeeez7dbKxO/L9teNGT3BnT9YYMHzxkHYYUUmEGYxcv7oMk9t61NyKL7EKuYh9JEaZEUkjg6Pbz6A4+SeYbBXy2Zi1al''@;'; put 'put ''ZMkqxF1pzUyfL1q6yYSw7O2y5ehbpuxFvGp3G2MsfT5tHF4REzAhLLXkmZ4nxkxCTQZciGot4DxccxcxpRyHjgQrFfQ7Xg7JW1qQPcWL5RyJBu7jFJgBmtJYmSUPfTEp9eO1Vpz3p1I9fdhwTb/+c1MOb8tfzGU2UxKrsGXFuyyZdStiTX3aAjPdeQc1QeO2nNwVkj2vh+XSucJafLNhyfeQQFAJ''@;'; put 'put ''RMscmb4UFs3bbZQ/Q0KihtWoRTOoO1zo/cKPQhgVRHb9GtbMFyIIS6DILPQU+Hl7FJh+np2hjA1lfRon2bIW8ZfaQcfrM6ieNkKwwh14QwUmApxGfEG2fIMjqz8BQT32cku5ER9TegCZLkY2Et5PHxbZs27krL0+QcJhkMCIEiivsmX2cr0gtd2C7W63MDg/KDQ9mBb8OLhdf14X2fJcRFJJikwP''@;'; put 'put ''qAZiFRSYgZhGzei2ZeGdltz+Hu+zx93TBdwhbRcceenrUent9od7V0MCJs+zZeWH8xdzOpTDw+UEcW+A1cWTtuzeGJaTu7XYPE+4Q+HI95JAvgiMakAMN86TM2DVjKFbmK3dwqgyc8eNU5x2/dm/yZE3nmVrydyBBmMNFJjBmEe4KRy590MJmbbEkJTHLmOVR45hyIYfm3IEGc9+WlxX+buTMusW''@;'; put 'put ''xJ16vN9D2U+NszTQIrPrki374Qo/iHqWiT5/CPGh7AffSwKlQGDMJEsWrrRkEmppmoj2YSKQN7OuXX8ObxWUMUJN5DjPf95QLd61UGAW79xdNfIyxCQ+8hsJGdWIgHYEs3u1uLY3WOTOHxd58ZuIsUn566QRQmjA2Cm23A9XebgMoy1w6SI3zhLCsr/fkWNvhWT3+jBEpr8YeXUscD0kECQCBs4d''@;'; put 'put ''k+dbsuDelDSiiYPN+ExPptcVmdsui8x+ngs9gVqkK6HALNKJu3rY6N893pFH0XvcQI0yLwOLXIEJAfX6Tw05uHVkE3uu3ue3H8XKbbnjMe1THCqYFVO5uKU6oDDPHbaRRRlFq0yeTN+eFd4jgeIgEMX5Y/ZtllvaaFQd6gfTbZ7zxKnIPLLNkQ0/o7s8Z5hFvAIKzCKevMzQ1Yo3ZYElqz9uuW0b''@;'; put 'put ''M8/neqsiyoGA0oLqv/xKFMXA/SmgDJQkmTTHklWPIxazAO3LXHc4Ep60Z7iWHDoM4Z1iiY5cDzd+ngRGlEDNGJQ1WpmSqQttiURRiYP1M3OaD4rMnPAF4sMUmAGYRk12WXhPUpY/Cgueh/Uv01Y6Qw7vcGT9kzHfktIad1V1jqz9VEJqkFGuPwz5WDLZ4cm4yBG4wzU7vJPu8Hyg5jpJYMQITJqL''@;'; put 'put ''bmGrbGmcorGZ6ba0+TmjjNguFmzDaXe5g8ojYUnQXV4w7n7ZEAWmX2Yih3FoUeHbH0nK/Hu8F5haSXfTz0NyYIs/3eMZbNFyR5aDwdzbvXeTu2ECMN5qEs/FkyHZ/kpIzhz0N48MF96SAAkMnYC6zefekZL5K2wpH4WLVi3STpU5dJD4BEXmsLAF4kMUmAGYxnxlkKuwSsL1++I3TLl4yt+CykQW''@;'; put 'put ''/exbLcRi2ggT8K67jxsmgKDWODLCD2wOyT5kiMd5JR6Abw13gQRuTqBhvCVL70vJxHmGhEIoacQi7TeHNsg7IuUmzp+2bPqF1sn0Z6jVIMPmUzkSoMDMEaAfPq7i6sFPJ9CDFwXHE96IK1dY4Z+eDkH8ZUx6OvUZ/y4hw5GmGYhD/VjKLTviVaKTusW15/mR7SjT9DM/FJj37xxwZCQQRAImQpBm''@;'; put 'put ''LLPQgjclo+qRbc4koGFNcxiJP26dzKcgMhmzPiyGxfYhCsxim7FBxhuOWvIIWkQ2TEif/AZ5y5CfcuWkFldvRoLPV6OS8HtNMyQ61Y+F0P5sQmKVGL1H5YpcgYn2mEd3hGT9T6JD5sgPkAAJBINAzWhLFt+fkukLQ6ggwd7mQ55VnJbDUVP2rNeOPyhyb9GSOWSGRfYBCswim7DBhhstt+ThL6Bl''@;'; put 'put ''YlM6Vmiw9wz1ubTAFGk5HYLA1B6zfj8ZaOtIS9Z+JiWV9agF6lGiT8aCeQy9xNc9SYE51OOI7yeBIBHAmUVm3AKhiSLtNag5TGvmEGf3ssjc+Qp6l78chsh0f2mGuBK+vVgIUGAWy0zdYJz5FJitZ0Py3Ff8V2D9nTjSAvOhz6akoo4C8518+AwJkIBXBKrrbVn6QDJtzUR4DmMzh0BWRWbEkG0v''@;'; put 'put ''iux8LUKROQR0xfZWCsxim7FBxps/gRmSjouOPPuvcJH7PrGFFsxBDg0+RQIkkCcCV6yZqzU2M31Ry0zzLGFDZJpmCH3LDdm7KQyBTktmluSK6m0UmEU1XYMPNl8CU6ty9HVrDGZMutp87iJHDGbDOEce+EweYjA1yectkQ0/8W8t0MGPDD5LAiSQbwJaoP2WB5MyZb6BhECtmwmLZr43GoT1I8Zf''@;'; put 'put ''az9pjcwj2xGTaVNkBmFaB+4DBeZAGkV6Pxyx5aEvJNx+ul6X6LFwZfnSt01pPubvMkVXssg/jixyExPp0Rk+HYOJ7MctjrzxNGMwi/QrwmGTQF4JaC3iObdrbGZKyqohNFGgndbMmyPXdrsWGrCt+7EpJ/eYbsWOm3+K7ygWAhSYxTJTNxinlim6/xMJmTjHuzJFujm9ngxBrb3xnCN7N/hbXLl1''@;'; put 'put ''MG9LyZ2PiaQS1g1oDe2ltMA0ZNevUWD9ZZYpGho9vpsESotA42RLbllrSdN0GDJZziiryTfCaI7R68jL3w/LeRgyKMyzwlYUb6LALIppuvEgzbAtd70/JbNvy0MnH/TcPrHbkVe/72/3sHbeWPHuJIqtG5KMeyswbduQN5833CLrN54JvkoCJFDqBMoqHFl8XxIWTUdMXJM62gWo1KHcZP9NJP30''@;'; put 'put ''tNnyyncj0nIO4VgIS+JS/AQoMIt/DtHC0JFb1iRlyQMQmH0eiiuw0RNjb6fIc/8WlZ52f8Zh6ul7VH06/rKmwdte5GrBTCZM2fjTkBzf4+8wgQAcytwFEggMgelLUrLsAQvnJu1pjrMUVeYN59aMGnLprCO/+m5YOi6hc5LrQ7vhR/iizwlQYPp8grIZnsYfzkKbxHs+6EjKQ+udbjvjJt/8TLpN''@;'; put 'put ''YjbjKfR7NP5p6iLd/xRin7zduu5/b6/Iq9+NysXT/hTY3u4x10YCJOAVgbqxttz2CFpNzoLItBGX6U2jNa+G57v1hGOmnDtky69+GJH+bp5vfTdBQxwQBeYQgfnx7WplGzvNkgeRQe31VZ8KLMH3XAuuP/81f/aRjVU6svKDCZmEfsGexl9i121kp3deMOSFb0alr8ul4cdDgGMiARLwKYFIzJYl''@;'; put 'put ''91sy73Y77TJnP/MbzlQELSWPbLdlw0+jCHfiOfeGsHz+IgWmzycom+G5LuJaWx75rYSUVyGD0aM2iZlt61fcMQy4iQ05vM1fbmIND5g4x5b7HkcqojvQzKhzv1XhrijPHRZ5+btltD7kjpRrIIGSJTBjqSXLHkxIdQ1a+mopI7rMr3ssqMjc/ZojW55nIfbrQiqCFygwi2CSshmilip68DNJGTfD''@;'; put 'put ''20xy3bar26C22lF0/UXEYvb1+sd1UV5ly6rHUzJ+BrLHk976n1RgOo4m94Rkyy+ZQZ7Nccj3kAAJXJ9Aw3hL7niXJWOm4dzCLPPrg8K5N4wE0zeeDcme11mI/fqg/P0KBaa/5yfr0bmJPmhdtmSNt4k+mQGoyDTwhd+9AVeVz/ojozwctWXeHYhxethGLTVvxaXutwpMK2nKhp8bcmynFtfkQgIk''@;'; put 'put ''QAK5ESivcuTWB1Poaa4mTC3Mnk6mzG2twft0CIXY1Rv36x+H5cQu1sgsxhmmwCzGWRtkzCHECk6cY8n9n7TcvriDvCXnp1RwpZBEs+7JMIrijqyr3EBi09jplqx+3JJIOU7QiGvyclFB7YBpT1tIXvhWVLpa/WO19XI/uS4SIIHCE9DEzPl3oTA7yhnFyrQwuwY6cbmWgNbI7O9B0s93Y3L+JM7K''@;'; put 'put ''LF90LSJfP6bA9PX0ZD84BwE9laMcefS34lJZmz5hZf/p7N6poktwVdndgbqYyKpu1XplI7FA+NWORtzlR1NS16SdIPJjvdST2ckDIq99P4pYTHfvR2JvuU0SIIGAEpg8z5LbHk1KTR0MmWrJpMp8x0xr+aL2Zlte/nYU5Ys0jZXn4ndA8ukTFJg+nZjhDEvL9dz5GAr8rvC24PrAsehXOwRvcds5''@;'; put 'put ''kVd+UHjLnpvQVOPI3R/WuMuQp1njV+0ndtS2UGD9BS3PxPjLgWx4nwRIwDsC9eNtxGUmpXEqXMJsMTkoWC1fdOZAunxRwkc5AIMOlk9eIUCBeQVF8d9RN/mkuSlZrW7yVP72xxWZcF20nhH59RMR6WgplCXTkaoanIzfl5IpKEnkZceed9BS9zgKy7/4rYh0Fmz/3jEKPkECJFACBCqqHVkOkTlt''@;'; put 'put ''gVox2cd8sCnXzPK9G2wk/kTFStGKORgjvz1Hgem3GclxPLEKWx76XELqx6OjDVqU5WvRr7eB9l7t523Z+POInD+e5yQYCL66RojLxyzXcplPcZnOHg/Jsd0hWfcjf/dgz9f8cr0kQAKFJRCGB2oJkn8WrHDgJWLyzzvo40dHW0puedqQPZuQ9GNRZL6Dkc+eoMD02YTkOhzNJl9wT0pufxQtDvs9''@;'; put 'put ''bmtzzeD06x0yQxJHp5vtr5hycLOZl1hF3afxsyxZjo4YdY1m3tzimd1TgZlE9vj6Hxlycn+ehXNmo7wlARIoeQIaS6/JP8vWpCQaS2dR589MUHy4NbNcDSevPmHK6f0oX8TYeF9PIgWmr6dn6IPTGMWaelse/iKKro/KT7LPwFG515D40odMQ07stuWtVyJyqdkbl7nuSwVKeiy4OyVz7rQliqtX''@;'; put 'put ''C7Xj8rm41kts4PzxEILK/dm5KJ/7z3WTAAmMPIGpC1NoMWlJFRI3NfGHyT9vz4lmlne3O27ST1uza+Z4+0Xe8xUBCkxfTYc3g1GL37I1SVmqNTHzbMXMjFi/5uq+6Oly0OZLO/6Y0o4Wi8NZ9Cq+rMKRKYttmb/CkoYmxFuqsPS4Q9FgY1OBaVumbHo6JIe2jmwppsHGx+dIgARKg8DYqZabtFk7''@;'; put 'put ''BpZMnBMpMt+ed7dn+REk/XwPPct7hvc78/baeC9fBCgw80V2BNebtmI6sGLGC2LFzOxq2poJoYmC7D2djpw7EoJV05ALJw3p6775SSActqWmEYlK82yZutCS+rFoqYazaj5jSTNj19u3rZfIkEcZpmT85mMe+HneJwESIAEvCdQi7vzO9yZk7FT1RjH5ZyBbTfrZ97otm59m0s9ALn66T4Hpp9nw''@;'; put 'put ''cCxqxVy4MinLHy6cFTMz/IzQDEdM16Xd02FLx0VDLp0LSRcys/s6ULBdswDxv1oqK5EZXoOr9PpxKRk1Wp8Lu20fbY+Lp2fGd71bFZippCGvo3PP0Z20Xl6PE58nARIoHAGtb3zH+xIyeTbiD1Esk5bMy+xxvlZjxuanUEpuM+IxbTzBxVcEKDB9NR3eDqa8yhLtT94wAbGLeShGns1o3a88EoFM''@;'; put 'put ''xGkauNWAdW3/lWlboaLObQmG522M0RrwWjbr9+o9Og5VvCf2oVPRE7giZoaiV2i5HhIggRwJxModuf3daC+5BP4piswrNPW3I5VAPOZ30pVMKL6voPHFHQpMX0xDfgahdTG1U8R9H0VdTFV0qu64vIOAaktNRuzvFjem5+JpZo6/AxKfIAESGFEC4YgttzyclHnLNXQH53Sez935cDv9nLNQsxiN''@;'; put 'put ''P+AhY6efET1Mr9o4BeZVOIL3QLv7rHg3Tkp3Ft5VXiw03dhLx0SpJUd2vca6l8UybxwnCZQaAQM9zJfej1qZKx107WWtzMz8azzmke22rPsxvE9J1x2VeYm3I0iAAnME4Rdi05p9WFVrywOfTko9srFHylVeiH0dzjZccYl/zh5Cz3G0vkwmeHIaDkd+hgRIoHAEFt+XlCWrIDKRGCn4n8ZMEc0s''@;'; put 'put ''3/KsyO4NiMdkiFPhDsYbbIkC8wZwgvKSiqix0xCP+cmkGFHtd8vTkc6tKyXhbepsDcmr349I23lmjQflmOd+kEDQCWh94KWrUxBW2FOKTLSWAwa0SH75e2FpPqxF2IN+BPh//ygw/T9HnowwBNfK3Nu1rpqNDG6ejTLiMtlnyIZfaJF4Zo17cqBxJSRAAgUjMHdFSm590JJwGdQUGreVuqbSWszt''@;'; put 'put ''zZfjMdsQj6nWFS4jRoACc8TQF37DWrrotoeSsmgV4zH1vGPbhux4OSS71kUKPxncIgmQAAl4QGDO7SoyUxIp05Oam87pwVqLdxUaj3l4q8j6n2iZPHqlRnImKTBHkv4IbDuCTMS7PpCSmbeUrshMX9Qasvf1kLz5HFwpaWf5CMwGN0kCJEACuROYudSSWx9NSlk5RabS1MzyTfBM7d9ssj5m7ofX''@;'; put 'put ''sNdAgTlsdMX7wRiKm9/zwbhMXWRKsg9+lRJaXHEZMuTgmyJbnkGvcS34zoUESIAEipzADIjM2ygy3VkMoeZyot+Wl74ZlYunYcXUOnRcCk6AArPgyEd+g5pZXlntyL0fTMnEBbBklojIzIjLA2868uYzUYrLkT8UOQISIAEPCajIXA6RGaMlU8KwYjYftVGEPSpxxNpzKTwBCszCM/fNFssqtM9t''@;'; put 'put ''SqYvhciMBzdC3L121fMLYi73bArJjhfRipKWS98chxwICZCAdwRmL08i1t6WSAwpPyWezxkpN2XnKyJbcc63WbrIu4MsyzVRYGYJKqhvi8RsWf4ICrHfYUhS20lqq8YALSouQ2G4S/pCsvNVCMz1iMlhzGWAZpi7QgIkcC2B2Uj8Wb4W2eWlLjLxA6C/Aa+gdNHpAzj301V+7aGS18cUmHnFWxwr''@;'; put 'put ''1+4QC1ehptp9Fgr3hlBLLBgiU13i2v+8sxVXsC+F5fhOtoAsjiOSoyQBEsiVwLw7U3LLAxCZ0dK2ZBooXdRxwZEXvhGWbpYuyvWwGtLnKTCHhCu4b9a+5VPmw5r5rqRUN5iS6i/e5B+9YtWiuyEDMTiHHXkDmeKXmikug3v0cs9IgAQGI7BoJTr+rEZWtVnavcu1dNH+zQ4yyyMoXeT+QgyGi895''@;'; put 'put ''TIAC02Ogxb06R2pGO67LfMoCwy3IXmxdf9JWS0P6ey3Z97oJl3gY7R8Z4F3cxyVHTwIkMFwCy9YkZNFKXHCjd3nJdrdRTYmfgQ1PhuUoPFmOTZE53ONpKJ+jwBwKrRJ5rxlG158Vliy6NylVdWFJFEECkJ4uNNZS/zt7xJEdr4Tl/HFaLUvkkOVukgAJXIeAeqdueyQl8+/Q0KfSFZka/tVzyZbn''@;'; put 'put ''vxaTjrb0b8V1kPFpjwhQYHoEMnirgTVzjCOL0et2+gJLzBgyrxP+yzR3hSXiLA0jJK3NNoqnm3JsO7PEg3c8co9IgASGSyAMo8GK9yTRYANrcEpXZKqr/BDK1G34aZhdfoZ7MA3hcxSYQ4BVim/Vq9+maZYsXGlJ0wyRMAKmkz4QmpkEHu01237RQmuwiBzaZkpfN10fpXiccp9JgARuTEArhtzz''@;'; put 'put ''vqRMXghfsVOiMZn4eTDg2Fr3o4gc22mgXTB/L2581OT2KgVmbvxK5tMqNCfMsmT27ZaMn25LWRWshChrVMiMc/dUAGtlOJyOD209I3J0uylHdyPmsptxliVzMHJHSYAEhkWgrMqWVR+GsQDncG24UYoxma6rvB2u8q/SVT6sg2gIH6LAHAIsvhUEIDRHN9kybYktk+ZYSAoKiQmrppWyxbIQ4+Nx''@;'; put 'put ''hSO1VGrbL9PUq01HutstaT4CNzhEZfNRCM0khSWPSxIgARLIlsCoBlvuezwpdeP0E6UpMtVVfnCLIxt/Rld5tsfNcN5HgTkcavyMSyBaZsvYqRYsm46MnWbLqDpHohVht7CtWjZtXB6rKMxGdLrWSRWTiKXUP42p1Of6+1LS0x5y+8meOWzKeYjK3i733ZwFEiABEiCBYRAYM9GSe2DJHFWvzTWy''@;'; put 'put ''OkUPYys+/oj7WyPy6ydMOb4rzALseZoqCsw8gS211ZphW2qRFNQwERbOCZogZEtljQXBaUg0elkwuuLxajKIN0c4kCOWbUsi4UiyV2ClDElHiyGXzhnSciYkXbifiFNUXk2OjwYSMFDzNAwrNy5RUI5FZHRDndy+dKHMnzVDImHt3uSxaX3gxod5Xy+++uNxaWvvlIuX2uVSe4f719HZJV3dvdLb''@;'; put 'put ''1y/JVGqYa+fHSODGBCbMSSEmMyWxKnxncCz67xty4/Hn+mq6ALstL349Kl34zdF4fi7eEqDA9JYn13aFAKyZZSLlVY7EKhGzWRnCYwdJQmqlvPwmCMsEit4m+0TiPSE3QaevN4Qi76GSO9ldwcY7VwhEI2EpLyuTyspyqa6skKqKChlVXSU1+jeqSirdx5VSWV4uFeVlUlYWc+PK9ODR12trRiG0''@;'; put 'put ''wt+lqvRHTf/S8XC4wEomXdHZB3HZ1dMrnV09V4Rna1uHtLa1u4K0HSK0o6tb+vrj8BLgKo0LCQyDwOzbknLHY9o8N23GLDWRqa7yXevQ6Q3NOCz2Kh/GEXTjj1Bg3pgPXyUBEsgDARVV5RCEVRCOdRCC9bU1Mrq+VhrqavBXi/t1MqqqQioqyt33RSMRicViCJ1IX53orYqyjLjK3Opzum7L0ixZ''@;'; put 'put ''jS8rrp9MHbsuun96X28z9zP7k0gkICz7pfuyAG3r6JQWWEBbLrXJxdY2aYEIVSGqVlAK0DwcvAFb5a1rE7J4FTzliKMvrm+LBxOhXzdo6xe/G0bXN3WVe7BOruIKAQrMKyh4hwRIwEsCGRFZW1Mto+vqZFxjgzSNHSONcF+Paah3LZGjqiulDMIxIx71MyoWM38qqgaKRy/HV6zrGihC1UKrj/U2''@;'; put 'put ''I0DjcLurAO3p7RMVn2r5PH+xVc5daHFvVYy2dXTABU/rZ7EeA16O2zRtuftDSZmxBImUSVyYebnyIliXGTXQlMOWl78VlXhfxr1WBAMvgiFSYBbBJHGIJOB3AmWxqGt5HNc4WiY2jXX/xo8bA2FZ67q1K2GJjMAKqWIoIxoHWhn1OS7eEFDGmb+MAM1YfJV5b1+fdHR2w9XeIc0trdJ8oVVOnjmH''@;'; put 'put ''2xbXEtoJ17sm6HEpHQLlFbas/lRSGicjJh4JmqU2+2G4yrc866C1cERsuso9O/ApMD1DyRWRQPAJqHDReMfG0fUyeUKTTJ3YJFMmjod1crTUw9VdVVWJOqXqakq7p1NIUsncp4j0x/Ghc6iCU8Vnxv2uVmIVnl0Qly2weJ5tviAnIDpVeJ7BfbWCJhJJf+wAR5EXAnWNttz/qbhU1cKKV2JJP1q5''@;'; put 'put ''JN6L2phfj0lbs/rNmfDjxUFGgekFRa6DBAJKQOuPumJyfJPMnj5Fpk+ZKBOaGiEma9z4SBUoKk7UMpZxawcUReB3KyM8M+JTH+sFQndPj7S0tsups81y7NQZOXryNIRnsys6dd65BIfARGSWr/xQSsIxSCyYMUvJkqkJP4e3ObL+J0j4YX1lTw5qCkxPMHIlJBAMAhoPqa7tGRCSc2ZMdW/Hjhnt''@;'; put 'put ''urnVMqkiUkWH3tIiGYw5v9leqODMiE691Uz3ru4eOXseVs7T52T/4WNy5Php93F/PHGz1fF1nxOYf1dSlj+KQWqinM/H6unw1GgJ4+2vfxCRE3s0iZBWzFz5UmDmSpCfJ4EiJhBBKaAmuLfnzJgmC+bMkOmTJ7iJOFWVle5eqYUqY50s4t3k0D0mkBGc6mbXRa2c5xHLqdbNvYeOysGjJ1yLZzLJ''@;'; put 'put ''Op4eo8/76mC4lrseS8isFYiXLrGkH+1K13rGkRe/EZG+Hib85HqwUWDmSpCfJ4EiIqDCoHZUtcycOkkWz5sl82ZPlwnjGmGhrHYTQzLWSbVQciGBbAnocaV/auXWpau7G3GcF+UAhObOvQdcwdmK7HUmD2VLdGTfF9Okn4+lZNx0xFKXWNKPusrffF5k12vw2DDhJ6cDkQIzJ3z8MAn4n0AYVqYJ''@;'; put 'put ''yOxWQblo7iyZOW2SWyZIxQAtlP6fv2Ic4UALpx5jrajRefj4KXkLYvOtvYeQOHQeoRaM3/Tz3NaNtWXNpxNSOQomzRJK+rmS8PNvSPi5oG5yusqHe5xSYA6XHD9HAj4moGWDpk+eKEsXznWF5dRJ49HdZpQbN6lWSv3R50IChSKgrvRM1rq2wjx64rRs27VPtu/e72aqsyVmoWZiaNuZujAl934w''@;'; put 'put ''JYZGQpRQ0o9aMQ9uEdn4M1OsFF3lQztq3n43BebbLHiPBIqagCbozJo2WW5dPF+WQVhORLZ3BdopDkzMKeod5OADQSDjStcsdY3d1AShzdt3ytad+5AodJEXPz6b5VseTMqS+9DwoJQ6/cBoqVn0L34nLOeOoOwaI4aGdVRSYA4LGz9EAv4gEIGbW62Ty5culOVL5rs1KcvRm1stlGqpZKa3P+aJ''@;'; put 'put ''oxicQEZs6u0ltLfUBKGNW3a41k3ttc5l5AmEI7bc9/GkTJoFT7lVOkXYw+jwc/awIy9/JyLJOK2YwzkSKTCHQ42fIYERJKCWH+3ZfRsslXctXyrzZk1HT+9KisoRnBNuOncC6kLPlMI6fe68vLF9l6x/Y7scO3lG6ELPnW8ua6hpQDzm5+JSXQOhVULxmNpGcsOThhzcmk5ey4VhKX6WArMUZ537''@;'; put 'put ''XJQE1Fo5fcoEuXfFrXLHrYtRXmiMux+ZzO+i3CkOmgQGIaBCU/+0beXOvQflVxvfkB1aevCmAABAAElEQVR7DqDbUP8g7+ZThSAwBfGYKy/HY5ZKJ1EjHJL2CyLPfCkKKyaTfYZ6nFFgDpUY308CBSagsZWL5s6UB1beIUsXzHWLnmuxaybqFHgiuLmCE1DXufaw1+P9CLLQX9nwhmx88y25hD7q''@;'; put 'put ''XApPYPkjSVl4T2nFY2rCz6anRfasixQeeJFvkQKzyCeQww8ugfKyGJJ15snDq+9yywvFIDT1h5Y1KoM759yzwQloWIgKTV1Oo2WlCs3XXn9TzrdcYpzx4Mjy8mwkBlf5JxOoj4ki7CVSHzNkhqS305an/6VM+rpoxRzKgUWBORRafC8JFIBALBqFpXKOvOuBlbJ4/mxR17gKSybsFAA+N+F7Auo6''@;'; put 'put ''13jNc8g4f3n9ZvkVxKYKTV54FWbqRk+w5IFPpSRaoZnWpZH0E4UVc8erIm8+RyvmUI4yCsyh0OJ7SSCPBMJh0+39/dja1XLnbUtEhSaFZR6Bc9VFTWCg0Hz+1Q2u2Gxto+u8EJM6D/3Kby+hfuUh5DYlEf77zJcj0tGSbo9aCM7Fvg0KzGKfQY6/6AmoZXJ0fa08ev+9cIffLXW1NXSFF/2scgcK''@;'; put 'put ''RSAjNI8cPylPvfCabHhzh/T09hVq8yW5nZDhyH2PJ2XKotLpV65WzL2bHNn402hJzvlwdpoCczjU+BkS8IiAWimXLZwjH3r3Wpk/e4Zbu5LJOx7B5WpKikAU3yX97mzduVd+9PQLbv9ztqPM3yEwCqWLHkQryap6xCWWQOkihAHj+HLkuX+NSus5WjGzObIoMLOhxPeQQB4INNTVymNr75NH7r9H''@;'; put 'put ''KivKJZFI5GErXCUJlA4BTQZSodmGLPNfvPCq/Oz5X0k8zu9Vvo6AGUstufsDqZKJxYzETDm83ZbXfhjLF9JArZcCM1DTyZ0pBgKaoDAbLR0//eHH3CQetbrQalkMM8cxFguBTN9zzTT/9pNPSfPF1mIZelGNEw5yuefDSZmxVLPKLW1XHuhFrZgw1srzX4vIhRO0Yt5ssikwb0aIr5OAhwQ0kWfV''@;'; put 'put ''HbfJJz7wLhnXOBrWlbiHa+eqSIAEMgTUmqmlvbR+5pe+9YTsP3xMUriY4+Itgeo6uMo/m5Tqeqy3BFzlasU8tsuSV74DK6YqTi7XJUCBeV00fIEEvCUQi0Vlzd23y+c/9n7R4umaIc6FBEggvwRUZGqf8y9/50nZtHUn207mAfeMZXCVvw+uctgwS8GKCWUJK2ZYmo/Tinmjw4kC80Z0+BoJeERA''@;'; put 'put ''i6Z/8NEH5MPvWYuL3hBd4h5x5WpIIBsCWqS9vz8uX/nuk/Iq3ObxBC/usuGW7XtUWN77kYRMX2KUhKs8gh7lJ/Y78vI3Y4EX1NkeA4O9jwJzMCp8jgQ8JFBRXiYff/+j8v5H1rhZ4iwI7SFcrooEsiSg5YwS8Bp8+Vs/ktc2UWRmiS3rt2lW+drPJaRyFNzGQS/Ajl1EF1N5/uthOXcknDWjUnsj''@;'; put 'put ''BWapzTj3t6AEVFx+BFbLjzz2sJslzm48BcXPjZHAVQRUZKol8x++9j26y68i482DOSuScud7oC8R6xp0V3kmFvNlxGKqV4rLOwlQYL6TCZ8hAU8IaI3Lh+67S37jEx9029jRcukJVq6EBHIioO7yVsRk/o9//JocOHJcLNvOaX388NsETBRgX/2JhEyYg+dQMzLIIjOtKRGL+XVTmo/Rivn2UfD2''@;'; put 'put ''PQrMt1nwHgl4RkDLpGgB9T/+3c+5CT0sQ+QZWq6IBHImoIk/ew8ekb/556/LBfQx5+IdgdETkVX+qYREyrVXOayZ3q3ad2tSK+bRncgo/y6tmINNDgXmYFT4HAnkSGDsmAb5T//uczJ35nSWIsqRJT9OAvkgUF5eLk+i48/3fvqs9Pah0TQXzwgsezApS1c5Ylt2oAUmksk13FR++dWIXDzFjPJr''@;'; put 'put ''DyAKzGuJ8DEJ5EhAM8Y/gIzxT37w3Yj34g9Xjjj5cRLICwEDWRra5ee//f1XZM+Bw3SVe0g5Vo6En8/HpX4cFBgiEIJuxTy41ZZ1P2J3n2sPIQrMa4nwMQnkQECDvSdPaJK/+KPfltH1dW7WeA6r40dJgATySKCsrEx+jYzyf/za96WrpzePWyq9VU9ZmJKVH7bFgMIMssDUWEwb8abPfDkql5pp''@;'; put 'put ''xRx4pFNgDqTB+ySQI4EyFFPX/uKf++j7ab3MkSU/TgL5JqAXhFoT8//6/74s+w4dpRXTQ+BaG3PVRxMydVHwa2NGy0zZvcGRTb+Iekiw+FdFgVn8c8g98BGBuppqxF5+Hj3G5zD20kfzwqGQwPUIaCzmD372nDzx1POMxbwepGE+39DkyJrPxKVME36wjqBaMkOoiRnvE3nmX6LS1YYHXFwCFJg8''@;'; put 'put ''EEjAIwIa0zVz6kS4x39XKivK3dJEHq2aqyEBEsgTgSjKie3ef0j++n99Vdo7u/O0ldJd7S0PJGXJaiT8pILtKlcr5raXHNn2Iq2YmaOdAjNDgrckkCOBCIo43718qfzRb3+GsZc5suTHSaBQBLSkWHtnl/zZ3/yTnDxzDlnBQbWzFYro1dupqHTkQST81DZqsGJwa2MaZkh6Omx56p9i0t9LK6Ye''@;'; put 'put ''BRSYV38X+IgEhk1AC6u/a8298kUUVo/H48NeDz9IAiRQOAIah5lMpeSvkE2+e/9hSaELDRdvCcy+LSV3vg/p5AEvW6RWzA0/Fdm3KeItwCJdGwVmkU4ch+0/Am6Cz0Or5XOPv48JPv6bHo6IBK5LQK2Y/x2dfd7YsQveBwrM64Ia5gtmxJEHUHy9aTriMAPc4ccMh6TlnC3PfqlMrJRGnZb2QoFZ''@;'; put 'put ''2vPPvfeQQBm6g7z7wZXyeWSQ04LpIViuigTySEAtmPr31//r3+TNnXsoMPPEeuJsC1nlKQmbwXWTK7pw1JCXv2PIiT1sH0mBmacvE1dbegSi6HG86s7b5A9+45OSSCRKDwD3mASKkIAm5/X3x+Wv/kELrh9hqaI8zaHa81Z9NB74skUqME/td+SFb0TdC5c84SyK1VJgFsU0cZDFQMDED9WCOTPk''@;'; put 'put ''T3//NyUajTBZoBgmjWMseQLqHr/Y2iZ//rf/JGeaL5Q8j3wCGDPJQp9yWDHLkEgV1FwqKGkH4abPfSUqLWdKO9mHAjOf3yauu+QINI6ulz/7g9+UaZMnSjKZLLn95w6TQLERiCG05c0du+X/+fK3pLOLZYryPX93PpaQ2XdgK8ngli1i4fX0UUSBme9vE9dfUgQqysvkU+hB/n70Iu/rQ+VdLiRA''@;'; put 'put ''Ar4moO0iv/KdJ+WZl9ehqw9DW/I9WTVjbHnoiwkB9sAWXw8ZIenrseVplCzq7SpdKyYFZr6/TVx/SRFQN/nCuTPlT2HF1LqYrKlXUtPPnS0yAmF8R1svtclf/M8vy4nTZ/l9LdD8LX8oKQtXBrv4uloxX/+5yJ6NpVuyiAKzQF8obqZ0CFRXVcjvfPojsvruFSxXVDrTzj0tQgLaJvJHaBH5fbSK''@;'; put 'put ''7O3rL8I9KM4hV9fBivmFuFSMMiSEwvZBDMc0IyG5eNqW576MkkVWaZYsosAszu8nR+1jAgZKnsydNc1N9qmqrMDJhXX1fDxdHFqJEtAWkafPNst/Q4H1U7jlUlgCyx5MytL7gm3F1LqYz3/DlLOHSrNkEQVmYb9T3FqJENCi6+9F0fXPfOS9rIlZInPO3SweApnal//wb9+TdZu3SYIJeQWfvMpa''@;'; put 'put ''Wx6GFbOyJrhWzEjMlEPbbPn1E7GC8/XDBikw/TALHEMgCdSOqpbf+8LH5a7ly5jwE8gZ5k4VKwFN7PnZcy/Lt3/8NF3jIziJSx9IyLL70KI8oC0kQ8jviSPX8+l/jkh3uzmCpEdm0xSYI8OdWy0BAmolmTCuUf74dz8rM6dNoSWzBOacu+h/Ahp3ueGN7fKPX/++tHV0+n/AAR5hZQ2smF/shxXT''@;'; put 'put ''DGwsppvs8zSSfdaVXrJPSQnMD73rAdmyY4+cOHMuwF9Z7pqfCGhW+ewZU+SPfuszMh5iky0k/TQ7HEupEVBxuX33Pvm7f/22nG+5VGq778v9dWMxVyEWM6BWTDfZ55TIs/8axT6WVrJPyQjM8WPHyD/+1X+Wvv6EfPvJp+T51zayJIUvTzfBG1QYnULmzZ4uv//FT8j4sRSZwZth7lExEFC3+Ft7''@;'; put 'put ''9ovGXZ670MLzv08mzc0o/3xCKmpQFzOgDX4MeMd/+bWINB8tLTd5yQhMtV5+8RMfcntEa+2z19/cIV//4c/k9Dm2BvPJeSbQw3AtmdOnyP+OmMypkybQkhno2ebO+YmAhqqouNy09S350reekOaLrX4aHscCAssfRl3Me4ObUa5u8r0bHdn482hJzXdJCEztNfs3f/IHKB0z3RWYOsN6wmlta5fv''@;'; put 'put ''wJr53K82lHxT+pI66vO0sxH0152xJCnHdoYR2P3O7g36Qzd5wjhYMj8pc2dOc49FFmLP02RwtSQAAnru17/nX90Az9XTcqm9Y9BzvXaXKa+25eJJU6xUabkx/XCg1IL/WmSUl5WHAtndxzBD0ttpyy/+MSb9ve/8bfDDHORjDCUhMOfOnCr//f/8A5ffwB90PfGoNXPd5q3yjSd+LufOt+SDMddZ''@;'; put 'put ''AgQM05GJsyy58wO2rH/ClDOHr+8Kmdg0Vj72vkdk5R23um461sksgQOEu1hwApFIBCFRcbeQ+lMvvubev94glqxOyrRFlrz6g6i0X1CBSZF5PVb5ev6u9yZk1gqsPaA9yrVk0Ws/FDm8vXSSfUpCYH7+8ffKR977yHVLxag1s6X1knznx8/IL3Glq5YmLiQwFAKxCkfu/WBCpi4wZd8blqz/cfSG''@;'; put 'put ''x9Go6ip5cOUd8oFH1khdbQ2tmUOBzfeSwA0I6Pk7Fou5RdS/8t0fyzYk9aRS1292ECt35IHP9kvT1LDseMWRt16NSDLO34AbIM7LS6MnWbL2UykJwxMUxNY+4aghJ/fa8tK3UBOzRDRG4AWmFrz+u7/8Y5kAq1EqlbruF2OgNfPrP/gZ43SuS4ovXEsghMj0xsmWrPl0SiJRuEK6Q/Lq90y5eOr6''@;'; put 'put ''VkxdRzhsytwZ0+Tx9z4kSxfMdVd7o2P02u3yMQmQwNUE1GqpHoFNW3fKE2gBefTkmZsm88y9PSnLH4U7PWJLd6sjL34rIh0t6sakyLyabn4fqXdx9ccSMmURuKfswGlM1ZSJhCPP/EtMOltLw00eeIF5y6J58pf/4XdvKC4Hfm20jEXzhYuuNfOldZsGvsT7JDAogUjMkYX3pOSWtTgvxtVSEpKj''@;'; put 'put ''O0TW/ySKk+TNf6SqqyplzT0r5D1rV0lT4xj3WKXbfFDUfJIEBiWQMRBo68cfP/uSrEedy55eVLi+yVJWKXL/J/pl9ER8a2E4MyKGbPyZATcmYjGTN//u3mT1fHmIBCbOsWTVRy0JG8ETmIrCrYn5FGpiri8NN3ngBea/++zj+OFefV33+GDHv8ZlGqhfqLGZas1kvbTBKPG5DIGySlvu+2hKmmYI''@;'; put 'put ''fpRs1/uRiBsQmIac2pddD1rtXz5pQpO8a829surO20RFZxLt62zbzmyGtyRAAtcQ0PO09hS/1NYhr76+RZ59ZZ2cbb54U6tlZjWL79N+2BCXhoXPwKuAOLkj20U2/cIcNFEv8zne5oeAiVj2Bz6TkHHTMRm4Vse/gVrCkZCcO+7IL/81lpXxodh3PtACs6qyHO7x/ySNo+tdt8lQJ0utmWebL8Ca''@;'; put 'put ''+bS8suGNoX6c7y8FAjB71DXa8iBOiuXVhjj2ZZsljB8Xz4TkV99DokFX9u6QCC5utDD7u9aslOVLF0hlRQWFZikcR9zHIRFQYanu8O6eXrf80DMvr5MjJ07dMNby2g2MnoALQ7hkK0bhO+uEXDGj2b7tLY689I0oWvtl/729dt18PHwCs29NyR3vx4V6EAuv43fBxm/Ecyi63nr2xiFUwyfon08G''@;'; put 'put ''WmDeccsi+bM//O0rpYmGg12tmRo0/hqujr/xw1/IxUttw1kNPxNQAiE3e9yW1R9PYA9x9rh8yZ2O4Tbk4JtqDYkM+Wo1Go3Iwjkz5dH775FlCPMoRyIaLZoBPYi4W1kTyLjCu7p75I0du+S5V9bL4WOnJAFr/1AWDWu57/G4NM3UsjiOa710P2+EJNXryAvfjkjrGVwwQnhyKSyBWLm2j0xIbaOq''@;'; put 'put ''McxNYTef962pm/zN5wUJZcF3kwdaYGrnlEfuv3dI7vHrHV1qzTxx+qzbBUjje7iQgBIwI47Mvg1X3O9xXPf4QCoqMq2UIVtfCsm+jcM7mcSQpDYf9VvXrrpLNJ5Ys89VaDJGcyBp3g8yAb3A1wt9FZda7WPz9l3y8vrNrrBM3iBx83pMVFAufzQpc+9QcZl2jV95r6snHSTpReXUIQjMEmvtd4XD''@;'; put 'put ''CN9ZtgahC6uhL5GwFTSBaYZD8G7Z8uyXymDNdA+4Eaadv80HVmBWV1W42eNjGobnHh8MuZ7kUjjgX8HJ7Xs/fRaF2jsGexufKyECboLPyqTc8kBIkv1Xl0JxTx34p79fZPPTYTmOAuzDXdR1PnPaJFl91+1yx62LZXR9nRufqVnnA2u7Dnf9/BwJ+I1Axg2ucch6cb9u8zY3eefc+Yti5RCbvOje''@;'; put 'put ''pCy5X4uwXyMuLwMwIADW/ciU47tZdH2kjgktvP4QCq/HKnARAIUZKJGJ3wS1y/7yKzFUGgl2GEZgBaYX7vHBvlx6Na1B5afOnHM7Q6zfQmvmYJxK5blImQ1xaSGLHPWB3Qzyq/fcFZk4h/ShdNHrPzfl1P7hi0xds7acHNc4Wu5evtT907aTGoumQpNWzavZ81HxERhorezs6pY9Bw7LrzdtRS3L''@;'; put 'put ''/aKPc13m3YlqD2uQpQwXuSB/bjDhYmom+c8NObLNlBQzyXNFPqzP60XzqscTMn0JrMioYTrYPA1rxT75kLrJt73oyLaXgt06MrAC8w/gHn/YI/f4YMdkxpr5MkoZfe+nz7ktyAZ7H58LNoEoijQvfwTuttthwRxEYOreuyIT8dx9+H3c8kxEju3yJri7sqJcFs+b5XYEWjh31lVWTWafB/u4C9re''@;'; put 'put ''qftbL5QSiYScPnferWP5OnqHHz911vUa5bq/Wqt28aqULFrliBmGsryOuNTtqMDc9DTip7ewVFGu3HP5/CQtWfQxS8xQ8EoWqZu85QxqYn45hjAA9xciF1S+/WwgBab+8P79fx1+9ni2s5WxZh4/dcatm7nxTRQ/5FJSBKIISF/xrhTiMK8vMBWInkJCSCCI9zuy5dmwHNkRfjuxIEdiGavmbUvm''@;'; put 'put ''y+1LF7lZ6FWVlVdc6BSbOQLmx/NCIJOwo8fnRcRW7oCV8nUUSN8Nq6XWsNTzqxeLdupZtjYps2+FuzWEMJYbiEvdHgWmF9RzX0cYhe8f+kJSGiYgy/8mc5b71gq8Bj20YaV9FuWKWpBMFtQlkALztsXz5S9QXF2TIQqxqDVTg83Vmvn9n/2S1sxCQPfJNrIVmDpc9+cS5xKtkXkAVa/2rotIf583''@;'; put 'put ''P6IZHBqrOWVik9yK74AmBU2fPFGqUFNTf8TVhU43eoYUbwtNQAXjwLhKTdjZd/g4ROVbsnv/YWnr6HSPUy/HpaWIboWHYfy0ECxFsIRl4WulwPRyBnJb16KVCbl1LdKyApjs42aT/xLZ5L8aXgJobmQL8+lACszf+fRH5L0P3+9J9ni205CxZh5FLTbtab5p285sP8r3FTGBoQjMzG4asGTqD93p''@;'; put 'put ''QyI70fc4X4HeGbG5ZMEcWTp/jkyfMtHte67HaiZmkwlCmVnhbT4I6LGmF+DuRTgu+NVSue/QMXlz5x5XVLZeakclmixU3xAHZ6B82PRFKVn2kC1V1TBaarmbLDdDgTlE2Hl8+6gGLVkUlzJN9sF2spzCPI7Iu1WbKLp+/pgtz32lDPvlraHBu1HmtqbACcwYEnD+7i//o0wcP879Ec0Nz9A/rXFE''@;'; put 'put ''ccQRaZvJH8CaqVflXIJLYDgCU2ngd9d1mfd02LL39bAc3prfziFhxLiNbqiTeTOnydKFc2X29CkydkyDVKD8llo3VXDqLQVncI/VQuxZxkqp7m+1Vvb29sq5Cy2umNwOF/jBo8elvbM7r8dZ3ThbFt6bkinz1d0N3+oQO8JQYBbiSMluG3o+uu+jCZmq/ckDVnhdfwOslCNPfykq7Re8icvPjmrh''@;'; put 'put ''3hU4gTl/9nT56//8++4JbKR+LAdaM7/15FPyxvbdhZtRbqmgBIYrMHWQes0aQucQB7XQzp90ZPc6U84eNGHR0Vfyu1SUl8nUieNl7qxpbp1NzUYfXV8rZSjoPtCdPlLfofzuPdfuFYFrBaWGJV1qa5ejJ8+4sZR7Dx51Swz19ce92uR11xOrcGTWLRYS7lJS3aAu8eytlgNXSoE5kMbI35+yICUr''@;'; put 'put ''P2KLgeDZIFkwlay6yTf+AuFSG4LpJg+cwPzEBx6VT33osYK6x6/3FXStmfGEvPDaRvnhL57HlXvX9d7K54uUQKTMkVsfTMmCuwcvU5TNbumVrLaoS8RD6F0usm+TKRdOGp4lOdxsDCoStID7ZFj9Z02fLLOnTZGpk8ZLQ10N4jer3I9r7KYKT1o5b0Yz2K9nBKW6vNVCqVnfbe0dyPy+ANf3UcRU''@;'; put 'put ''HpWjJ85IB851+XB9D0YXxlKZNC8lc++0ZNxkvAPfJ0fF5WBvzuI5CswsIBXwLVGUglM3ee1YnBMD1tknHDXk5P50a1LXrVVAroXYVKAEptp9/vbP/73MnTm9YAk+N5ukjDXz8LETbt3MLW/tudlH+HoREUjXwYRL7h7numWKst0dFZpm2EA5IwdFnpEIhDIpl86NTIZheVlMxo8d48Ztzpw62b0d''@;'; put 'put ''B5e6CtFYLOZ6CCg6s53Z4nxfRkxm3N26Fz09PUhi7HRLCR08clwOHjvpWijbO7pyKn4+HEIGSg81TrNlHoTlxFmOhBHTZqdyt3JRYA5nNvL7mdseTsqiex1P5je/Ix3a2kM4vff3iTzzTzHp7lAFE6wlUAJzEiww/++f/xEKoaP3c7YR3QWaz0yNt2fRO/eJp17wpGhwgYbOzdyAgJcCM7MZTQIK''@;'; put 'put ''oU5ab7stpw5qPb6wtJ5GweHMG0bgVksh1cOiqaJTrZuanT5p/FjEcY6WqsoKt/mADku/d5nuQmrt5OJ/AiokrxWTOo+9fX2uJbL5QivqUZ6RIydOywk0mGhGTKWWERqpc6y2ehwz2YErPCkT54VEyxDZiGXz6pRPgem/Y7ZxkiUPfDYpEfSpGMnzYD7IRGDF/NX3DTmaQ6e3fIzLi3UGSmA+uuZe''@;'; put 'put ''+b0vfMIX7vHBJidjzTx09IR880e/kG274A/lUtQE8iEwFYhey2rdTG1b19dty2kIzcNbDblwIoxSQ/5ApolDtTXVEJ2NSKobK9MQx6kCtHF0HZ4fJeWI51RXqgqRgcIz89gfe1E6o8iISL3NWCV1LtTN3dvX77q6my+2yqmzzXLyjP6dkwstl6Srp9cNjRhpUobhyNgptsxCjOXEWSJllegknsyu''@;'; put 'put ''9NBQxk6BORRahXmvzv3azyVk7FTIy4DVxNQ4zP2bHVn/k+B19QmUwPyT3/ui3LPiVvR+RvNnHy9qzexH0Pvzl2MzvWiB5uPdDfTQ8iUwB0JzXefoLpLAYX3huCOHUKT9LARn3OMamgO3Odz7Kl40gaihrtYVm01oazmhqdFtbzkG/dNrRlVJGVzs6mbX92bEprrb9T5jPIdHXlnqonGRumQEZOZ5''@;'; put 'put ''tSr3wSLpCkm4s1U4nm9pdV3dZ5svuI870IqxHzHjflsiMVvGz7JlJhJ4xk8NSaRMs2+9F5aZ/TZhUdryTEj2bcbFHFtFZrCM+O2ilUnUxNT42mC1jtT4+84WR57655gkE8FykwdGYNYgNuzv/usfuz9sxVBMWk/8+iOrcUxf/+HPZMeeAyP+BeYAhk6gEAIzMyrVEBqjaSHQvf2cI0d3m3Jyjykd''@;'; put 'put ''LSMTp5kZVza3eryXxaJSO6ra/Y5qiaTG0fVuqSTNXq+HxVNd7eUQp2r5VIGUEUeZ5KKMyz1zq4I0yEtm/3UfM8JRb/VPX8u8nrFCqiVSs7XV4qgXrS2oMdlyqc0Vjxdb2+QiHmvyTWd3jy8skjebu+p6W6bMtWTKEktGNxk49vMrLDPjCcdMefM5ZPa+jl7kCf9/tzLjDvpt3Vh09vl8XKLlOBEG''@;'; put 'put ''7KuvrUyf+2oUyZ3BKlcUGIG5fMkC+S9/9Du+Se7J9svuWjPjcXnucmxmF07+XIqHQCEFZoaKXuMaEJp6UurucKT5aMhNCmo+HpaED62amXHf6DaGuOnKigokEVVKHcTmOMR2ahZ7fe0o192uF5DaAlato5qApK73KGreZsTWwHVnrKAZATpQkGaeG/j+wZ4b+PpQ7mdE37WfGSgIM2Ix81zm8cDP''@;'; put 'put ''6Jj1QlnL/miXsP7+hPQn4q4FsqurxxWJrSgHpHV222CRbEPiTXtnp3R190ovPDhxH1oiB+7f9e5HY46MnmzL9IUpWC0dqarViEsk76gr/Hof8vh5V2D+MiR7NxoUmB6zzWV1eiRoHOb4GfCRB9BNvgVdfd4KWFefwAjML3zs/fLh9zzk2/jLG32x9IdGfyw1NpPWzBuR8t9rIyEwMxRcZwoMLOEw''@;'; put 'put ''LC1wGbZfQJmj/SGUvQhJ+9mwpHwSq5kZby63KsJUhKq4VAtnNdpfVsPiWVUFUYpSSlUQn3rfFaF4PSNEowhH0e9WBIxUlCorXZcmLelt5k+/g3o/I/oGik59buAy8DV9Xh8PFLV6P/Onr6UwESoSUyoY9RaP47ioVGujuqTVbd0HUaiJM92wPnbjtqcHf3Bp62N9Xl+PJ5KucLQCljylZYZqYZ2a''@;'; put 'put ''NM+SSbNTUjcOc4VwNHWDj4SQoMAceLT76/78u5Ny+yPBc5NruaLThxx54d9w4F9zvvHXDAxtNIEQmJps8D/+5Pdljo/KEw1tGtLvVmumZm4+89Kv5cfPvoQfF9Qv4OJrAmmBaaFM0fDrYHqxg65VE3GayAtC2QtbWs+F5PQ+Q84eNqT9IkoUW1eLJC+26fd1qDDUdpkqKvU2ghRUFZb6PVOxqm54''@;'; put 'put ''FaDu87hv4P1agSKzpD+f/mzmpG+hm4i6ogfWeFQxmYD40+fSVseUKyRVTCaT6fsqKlVgaiykPqf3rxWqme2Wwi2mREY1WjIB1qjxc2wZPR5JO2gHiOiPglorB2NNgTkYFX88VzvalrVfSCDBCzoMx0qhrNr53ntN6OzvseVpxGH2dAYnLCMQAnPCuEb5n//lPyCmMVr0J233Rw0/egcQm/nNJ34u''@;'; put 'put ''b+09mO9jm+vPgUAELr0lq5KyZE1Ikv3+MBnqBbDGamoqerzHgtg05MzBkJw7Epa2i5p5W3piM4cp5kc9IqDflfomW5qmOzJ+puVaLcsrTJyzCxNbme1uUGBmS6rw70u7yRNwk2PbASy6/tK3EFe/LzhxmIEQmA+uvEP+/W99xvfZ40P5OqpbT62Z2gHoyadfHMpH+d4CEtAfzcWrUrJ0DSyYPhGY''@;'; put 'put ''A3dfC/maprp+ITZh2VSBqTGb546giPtZXDX3BudqeeB+8/7IE4CxGDGUSNCZ5EBUWtKI2pVV9WiPF0NNV3i/1Rqst35bKDD9NiNXj2cB3OTLH4X1El6BoFgwdQ+1XNHO1xx549nglCsKhMD8w9/8pKxddXegBKYecGFYMl9EKaO//+p33dgwfY6Lvwj4XWAOpKV2SwNudBWdVkqk+5JaN9EH/Sha''@;'; put 'put ''U54ypas13a5y4Gd4nwSyJaDHVeUoGzGUtluvcgySdWrHiJRXIeMdFzl2ErGqKiqzXeEIvY8Cc4TAZ7lZtYKv/SyyycuC5Ykx0YnqwklHnv0SOqW5lZCzBOLjtxW9wFS3+N/9xX9EoedxbnyTj1kPeWgaj/S3//w12bRt15A/yw8UhkAxCcyBRNxTM+qvhdWVDh9lf78tXZccaT1jysVTIbdzUOcl''@;'; put 'put ''uP3jeJ0LCQxCIBKxpbJORMvHjJlkS8MEW0aNTgvKsApKnMDUSjkSiTqDDDfrpygws0Y1Im8Moej6Q59Lyli0CRVEJfn9giVbSOplSiYcNw6z81IwzrtFLzBnTp0kf/Onf+hmgAYpaF5jMc+jq8b/8X//vVuKJNuDlO8rLIFiFZjXUnKtmxCb2jlIY5v6+yzp7RBkpqvgNORSc0g6kKXe14NEjBJM''@;'; put 'put ''GLqWV6k9Nk0HiRW21DSK1I+33VjKukZHKmsdtGpEghQuVhyrOAXltXNJgXktEf89Xnp/0g1LCpqbPIIarK98PyTH3kLR1wAsRS8w3/3ASvnfPv/xoixPdKPjx0TW67pNW+Vv/+UbN3obXxthAkERmNdi1KvpEESDxm+qjcCCe7OvB3U320XamtPCU0VnF660412oF+iP/KZrd4OPh0HAjDhSUenA''@;'; put 'put ''GgkX91gISlgoa/Cn1spyFLlWV55mkLkxlBCVmqQTpIUC0/+zOXZKSh74TEq0GkGQDj+Nw9y93pZNT8X8PwlZjLDoBeYf/+5nZfXdKwIXf2mgbMo/ff378sJrr2cxjXzLSBEIqsC8lqdKCoHW1DI/IbVyQlWkIDrjKK3RC4HZAfd6J8ohdeBPYzl7ukIS70bXIQrPa1H65rEBq2SsDFbIOojJBgdi''@;'; put 'put ''0pEaiMpR9RCYNfoa6oWqmMTVhpPCRYbW38T/QfpBH2wyKDAHo+Kv5yJRRx7+YhzxvojvxbkoKMdkJg7zuf+fvesAkKo6u2fq9mVhadKLgKggCAFEaVKEqMRobFEsPxr9TTEaY/1jS6ImakSCYk9ETSxYwQIiUhRQmoICgvTey9Zpb/7zvWUImIXd2ZnZeffufbq8KW/uu/fcO/PO+8r5ns6gI8n+''@;'; put 'put ''1XUW8HH2RmmCKaLLj933ezRv2kS7+EvRwLzzobHYuIXmIrM5FoG6QjArmwD750/4x0FLp1g9o3Svh4KWrcVZVuShm53Ec7cbxXtJPPe6+Jxu9mLGGpW5qRXJUHb5kNlShoDA62WsZEZuFHkFTMKhS1tIZB5JZC6JZQWRpP4nM7tFi0+skTHLpFy1dblwxwOwIZjxoJW+Y08bGUKnXiSXCiSOVRcl''@;'; put 'put ''+b6yYBfjMP38vVQ/DlNpgqlr/KVUFFm6fBXueeTJCqtBdVenOa7WEajLBPNoYNuUkf8cQTxJVSxaM0XKKcj6AeXllEg6IJZOkHSSgPJx7HmAcZ6BUrpgwxWE52jnMa/bxkXGP1rIzAIyKD6dXc9Cdj7lgbjPpUs7u4DPs/leLv8yaYEWFQFexYRISka3JBJC3NwGzEMIGIJ5CApHP2jNcqIDLuJN''@;'; put 'put ''alQvuSKp6jPtJephLlNfD1Npgnn24H749ejL9Iu/9HjxxqQpeOnNyY7+gpvOAYZgxrcKbIMl/7H1Oe1/SJLYhCTo8TrBKjcspxikXFIp7ISiAPfltHiW0Q1fStIpj4OyLwHCAR7HYyMhciT+CWkSd64OmwzD440yy59/JI9+ksPMbBJJEsUsWiOz+ZdLi2RmHl3ZfD2DsZHiNpQkATevSzaJFFxp''@;'; put 'put ''JRZhIEnAERZpiGTVq8MQzKoxcsIRObx5GnFNObLzeNMka90JnUpCHyQOc/H0KBZOUV8PU2mCefN1ozC0f1/t4i/FRfXHMU+bKj5J+LKmugkhmKcMDOOUMyusc6k+n+7t2/SQ/0hWslw13EJC+X/sdYtEyWKN6jCJU9gmli6EKe0RJNkM0TIaLHfzMd30tJAG5LVyPqbUUohup3CQf6xiJMdLNSPL''@;'; put 'put ''kox4WvKoCRqReCe2Lao60YNZ8rYqRXXjoFi3znb3sxmGT9N6K8/lsdQ4j3I8/GNiqNTY9rIapawbL//8GSSG3EsspJe6fhlZFnx8LNZGv7zG432Mg/SQPHp9UkedbUs9UG5CqKOMixQrpC1YLiRdl6tsGhe6IZhpBD/OUw+5IoDmHfghfgl0Wfpiwdy8ysJHz2dU/KbEiYmTDleWYEr9cYm/bNOy''@;'; put 'put ''uXbxl9t27MKtfx6DomKaaczmaAQqapFbrEUuRMZktNTWZNkU6yDREtIlm9t+zndihFRelAMlN4XMS3JU5B8hZBYJakQIWUTqtHMvx9jvSz3sCqJm8T2JKY0eg2TKRY2foLWRpxViKScUQsm+CMEUUul2W/Zzed8jfeSf/X6MLB68Mh66QNp9kc4c7JP9gP2wXzH/pBoBQzBTjXDy2u/SP4Qew+Sm''@;'; put 'put ''UB83ufw2lBywMOmJDOUrrSlLMFtSWP3Ru2+GlFTUSf9S5IlmzV2AR556MXnfQtNSyhAwBDNl0Ka04UOe9IMPSPsqyOhhZz10zGGvHevhD62HRzw/+OSI147VmHkvbQgYgpk26OM+cdM2EQweRbkihpJocwNm34O68OFzXmxfz7tShTdlCeaAPj1w269G0w1G35dGm8gTPfvyREyeNkujUek7FEMw''@;'; put 'put ''9Z1bM7K6iYAhmOrMu4SUDL8myJKkZGW8e9OFZEoc5udvA8vnMZ5G4U1ZgnntZefjgrOHaZXgIzFcpWXluPvhJ/D9uo0KL6u603VDMOvOXJuR1g0EDMFUa54HXBxA2y5URtBIrkiS9VYuiGL2RLUTfZQlmA/e8Rt0PbETs0gZua/JJgRz3cbNuOPBsSgr18syq8kU/dcw/FlR/GhECCf0krrdJgbz''@;'; put 'put ''vwAyLxgEFEPA6/dg/ocuLJ/rsZPCFOt+netu59NC6H22XnGYHhaz2L05iklPZVYk8Ck6q0oSzHp5uXj8/ttQvyCfgfkVwfCK4n9EtyX+8pPZ8/D4c68c8bp54lwE/HTR9D47jI49DcF07iyZnhkEqo+AaIXOm+zGyvkeW22g+p80R6YDgYYtwxh2ZYRqC/q4yEUpIlAaweTxWSzPa0eIpwPahM+p''@;'; put 'put ''JME8sWM7PHjHjXZyj04JPqY8ZMLrudYbEILZ55wwOvQwBLPWwTcnNAikAAFDMFMAagqbrIjDDDAOk7IMGsVhyjqc+k9KFq2kFIWim5IEU0eB9Vj85f/9dRzWrN+k6HKqe932Z0dxxnkhtGEMUDhoXOR1bwWYEeuGgCGY6s3ogEuCaHMy+61RHKYk+sybBHzzmbqJPkoSzBuvuQzDB52hlcC6ib9U''@;'; put 'put ''70dNemwIpprzZnptEDgaAoZgHg0Z577e5Ywwegyni1wjPUxJ9Fm1MIpZb6ib6KMcwfRQVfmvf7gJndq3ZVk5lvLQZBP3uOhfPvr0BE1GVDeGYRPMn8rds9tYMOvGlJtRao6AIZjqTfBx7cMYfFmElbP0icOURJ+ddGZ+8JSfxR/UjMNUjmAW1q9nJ/jk5eZol+Dz3CsT8d7Umep9u+twjyX+p+95''@;'; put 'put ''EbTtKqUIjYu8Di8FM3RNEDAEU72JzM5jXfJrA8gpYF1yTeIwJdGnvJgVfcZnoPQA40sV3JQjmCd1bI8H77zRJpc6JfgEgyHc99hTWLZyjYLLqO522ZYpGh7GCb1Zi9zIFNXdhWBGrg0CQjDnvOPG94tNFrkqk0oVTAy5OohmbSm1XvG/Kl0/ej9ptJTQuY+eZ0WfdWpW9FGOYOqY4OOm23/rjp24''@;'; put 'put ''7U9jsL+o+OgLzrzjOAR8GVF0HRhGtzNJMMuNBdNxE2Q6ZBCIEwE3XZOzJ3qwbikJZlhN12ScQ9bicNEjPvmMKKywpVVFn5lvuLBqgZqZ5MoRzBuuvBgjzxqkVQUfIZiLli7D/Y89o1VddS1+taoYhMcfRaeeYfQ517jIq4DKvG0QUAMBcsqZr3qx8TsPrIghmGpMGnB89zBOv4C62Jplki+ZGcWX''@;'; put 'put ''H6iZ6KMcwdSxgo+XAusTJ0/Fi29Qk8BsSiHgZlB5i44WBl7KilKKBmIrBbjprEEglQiQT4aZOzp9At2SGzy84TcEM5VwJ7PtwuYRnHVVCF41uVilUHj9bmxYbmHahMxK33f6i0oRzLycbIy5/1Y0KmyACOUItNlcbjz61D/x2ZeLtRlSnRmIK4rCJhaGXhWEP4eB2BYDgMxmEDAIKImAy+NCyd4o''@;'; put 'put ''Ba79OLBbyKUhmKpMpCRcjvhFAPUK+TusSaKPm+tx306WjHwyQ8mqUkoRzLYtm+ORu2+mFIHcWepzIS8pLYMIrK/buEWV77Lp52EIZDGD8czLgmjc0s2YLX1Klx42RPPQIFAnEJAEn62rgRl0kZeXqJm5WycmqpJBCicYdgUTfTryTd7o68AQmOODQAB4/wk/ivaptx6VIpin9+yGu377CwJOxDXZ''@;'; put 'put ''JEts/aYtuOPBsSgtK9dkVHVrGL5MCz2GRnDSGSbRp27NvBmtbgiIuPXS2cDiaR6qQqh3QddtPuIdT8/hQXTpR36pUaKPWDE/et6DbWvVS/RRimBe+pPhuPLi87RK8PEw/nLO/MV4aNwL8X6XzPEOQUDiMFt3ttDvYgZvGQOmQ2bFdMMgED8C4iKf9ZoH65eZBJ/40Uv/Jzr0CKPvT/VL9Jn5OjPJ''@;'; put 'put ''FxqCmdIV9rvrRmFI/75alYj0eLx4/b2P8PJb76cUO9N46hAQ10y9BhYGM8C8XqGLmac6OGdSh5dp2SDgRASEXBbtAab904v9eyjYbeIvnThNx+xT41YRDL0yDK9XDxe5DFZqki+eHsXCKeplLyljwRQpn7/e9Vuc0KGdViUiwQSfvz39ImZ/seiYXxzzprMR8GVY1MKMoOsAI7ju7JkyvTMIVI6A''@;'; put 'put ''jxfyZZ8DC6bSPV5u3OOVo+TsV7Pzo/gxE32y85mexft8HW71JWxj9WILM17LcDb4lfROGYKZn5eLscwgb1C/QKsMcom7/MNfn8CaDSw6ajZlEXDx16xxS1oxR1EmQxQljKtc2bk0Ha+DCDCZwmKEy7SXvdixnu5xy2SPq7gK3O4oho8OoFEr9p6/wToQTEk827HBYk3yTOXGowzBbN3iODx69+9o''@;'; put 'put ''+vZqk0EuCT5bd+zCrX/8G4pKSlX8Pps+H4aAP9tCn7ND6NDDbcpGHoaLeWgQcDoCYiVasySKOW97ESgz1kunz9ex+tf/oiDancLikeGIcoSssnFJkk8RpbMmM5M8oJhlXRmC2bt7F9x98/UIBilorckmcktffbsC9zwyXhvSrMnU1GgYYsVs0pqSRZeH4MvgD5zRxKwRjuZDBoFaRcDNuOkwxdVf''@;'; put 'put ''8WLrGje/t8Z6Wav4J/lk3QeHcMogWi+pla2DBVOkisIh0cIUbVa1apIrQzBHDhuIG666RKsMcjcJ5kfTP8P4Ca8n+StmmksXAiJZdOqQCE6mVIapTZ6uWTDnNQhUHwE79nIukyg+8iFYbshl9ZFz5pHtu1WUjHRZ+tQkFyvmlBc8vAFSK5NcGYJ5/agLcd6IwVoRTJEoeu6ViXhv6kxnflNNr2qA''@;'; put 'put ''QBT5hYzFvCKEgoZGeL0GAJqPGARqDQG3102rkIXpL/uwb4e4xg3BrDXwU3Sixi0PZpL79Mok//RVMNnHlyLUUtOsMgTznpuvQ+9TT9FKZD1CF+pD457Dgq+XpWZ2TatpQcDWxTw5gv4XhCtcNDr4adKCpDmpQSCFCJBLCp2c/ZYX67/xsAqXIZcpRLvWms6tz0Sfa8qRnVshNKXDz69IFc2fEsXX''@;'; put 'put ''09WSKlKCYEpijyT4tG/TUiuJIikRKRV8Nm7ZVmtfPnOi2kHAli0aEkbXfi6T8FM7kJuzGATiQkASe5bMAr76xFTtiQs4hx/s9Vn48bVBFDQlwdSkJrkQzGVzLcx5Ry2pIiUIZv16+Xjsvt+jQUE9bSSKJIN809btuP2BMSguKXP4V9Z0ryYIZLNG+ek/C6JVJ7mARWrShPmMQcAgkAIEhFyu+9bC''@;'; put 'put ''3Ld9KC02WeMpgDh9TZJUDtWsJrnX78b65VF8MsEQzKQvrNbNKVF07y3wMilGqqbosIlw/JLlK3H3w09qMyYd5iWpY2BWeUFDCwMuCaGwmQfhoCGZScXXNGYQqAECQi63r4tg1kRm5e4St7hxjdcARkd/pO/IIDr0Zhc1qUnu8bqwa4tFqSLRwlRnvSphwTy1S2fcd8sNCIepJaHJJgk+02bNxdjn''@;'; put 'put ''/6XJiMwwKkNApIsatrDQ/8IQ8iXpJ2QU2CvDybxmEKgNBLx+D/ZstTDrDS/2bhODRW2c1ZyjthE4ZVAI3QfrI1UkWeTFey28R6miYJk6UkVKEMxhA07DzdddqVcGOWuQ/+vt9/Hqux/V9nfPnK+WEZDqEo1bR9DvggjyCt3GklnL+JvTGQQEgRi5/OwtD3ZvFnKpjiXIzGB8CBzfPYTTz+fdgyZS''@;'; put 'put ''RS5qtQbKK8TWi/epE9KhBMH8+U9H4IoLf6IVwXTRRT72uVcw/fMv4/vmmKOVRMAuJdkqgr4kmQWNXIgEjSVTyYk0nVYSAdstznJ7c5gxvne7sVwqOYlxdLpZ+zDOvCwCj0cTqSK5F6LqzPvP+LF7i7FgxrEUqj70N6N/jh8P7q8VwQyFwvjT488wDnNV1QCYI7RAQEhmg+Oi6H9RGPWbMDzIkEwt''@;'; put 'put ''5tUMwsEI8MIs5HLjCgvzJnkZc2m0Lh08W0nrWoPGFoaOLkdGFudbkzAIDzVbP37Rg00rDcFM2kKRhu5lichep3bVSgOzqLgEdz40lpnkO5KKlWnM6QjQXU5LZo/hFpq1ZbUficnU5AfQ6cib/tUtBMSt6GHs2spFUSya4kPJAcrWSN09s2mPQBYVPEZcG0BugVsrqaJP/02x9a/UEVt3vIvcQ1fy''@;'; put 'put ''o/f8Dse3ba2NBqb8yG3dvhO3PfA4DhQVa/9lNwP8IQKs9tMwiu7UyWzfBRDBfVO3/IcYmecGgZojINYeqd+8ZIYb384RBQd14tZqPmrzyRgCumphzpsUxTefqSO27niCmZuTjTHUwGzcsFArDczvVq+jBfPv2owp9sU2++ojIHfZJ54W5p8Fb4bJMK8+cuZIg8DRERDNwOK9UXw13Y3vF3thRYzV''@;'; put 'put ''8uho6fmOzPiQ/wmgWRu6hyr+V36gIrb+9Ywo5n9oCGbSJrNRYX2bYObm5DAhTI/ECJEomjv/Kzw47vmk4WQaSj8CYm1v0awJ2rZqjhlzFlSrQ76MKFqfFEG3MyOsYe6i1cW4zKsFnDnIIPADBFx0h4tLfOv3Liyc5sbOjW56Bqoml16vB5kZfpSUlhtN4h9gqvLTARcH0LaLC9GIpUUUkhDMFV9E''@;'; put 'put ''8dlbhmAmbV22a9UCD//hJv5w6COy7vX58MG0WRg/4fWk4WQaSj8CebS2//LqS9H1xI544PFn8c1331erU5L8U9jcQrfBEbTsJO5yJgxGTGBmtcAzBxkEiICHVstwuYXl8zx0ibtRVlS9RIiC/Dxcf8WFOOH4tviUih6vT5qKsvKAwVQDBHqfG0LnPvw91URs3cc1vvYbC9NfyVRmdhzvIu92Uif8''@;'; put 'put ''8dZf6SWyTg3MV96ajNfem6LMQjEdPTYCcgN0Conlnb++Bn6/D6vXbcBD417A9l17jv3Bw97NzLHQqVfEdpln5Rlr5mHQmIcGgUoRsBN5pMrJJuDrT1l+d5WXxQyqtlpKYxILf93lP8MIKpR4mBAk1dXGv/gapsycg2AwVOn5zIvqIKCb2LrX58bWtRY+eCZDmWQ1xxPMAX164HZetMvLy9VZ2VX0''@;'; put 'put ''VFzk41jBZyor+ZhNDwTycrN5sboQg/v1sdeqXKwWLlmGR5+eQNdb9WvNu6nb1riVha5nhtGsHbGhIdNYM/VYI2YUyUVArJahsiizxF1Y9pkXxfuEWFaPXEpPenU7GTdeezmyMyvqO2dkZGD5ytWUj3sWe/cfSG5nTWu1jkCnPmGcdq5YMCNauMilXORuVqGaJOUiFSkS4HiCOXLYANxw1aVaaWBK''@;'; put 'put ''1vDDT/4DXyxeWutfOnPC5CMglpDj27TEPZTTys/LtRO35DVxcn8yex6efmkiQnGWOc3IjuL4U5kA1NdCfn0XPy9M07jNkz97pkXVEHDzQis0cttaF5bMcnPvqbbVMjZWuSEUb8MJHXgXd7BepHxng6EQ7vvbU1ixai3VHfSI+Y+Nua7t23Zl9bQLI3BpUs1HykUe2BXFJJaLDCmiiuB4gjnqgnNw''@;'; put 'put ''Gf/KyqpvBXL6FykQDOLuh5/EyjXrnd5V079qIJDh97MQQD9ce9kFR2i1ygXL4sXrnQ8/wUtvvh93AoHEZtZrZOFkksy23SIUjBbpFZMEVI0pMYdoiIC4w70kl/sZdbJirgurFnkRKK2+xTIGiZcepNGXnIezBp0BNnnE99LP7/LY517GjLkLEDBu8hhkSu5bdIxgwCVheDWp5uPmYi0psjD5yQyU''@;'; put 'put ''Fashu+V4gvnLqy7GucMGaUUwi0tKcceDjxuRdSV/tv6702K1vImutt6VFAMQkhlmFuMbk6bUOObW66sQZz/xDAvN20fh8Zn4zP+eBfOKtgjwwuojsSwttrBmCTNp57ntijw1cRN6GSt9+QVn85oykHGXzDI/aL2MYZeZmYm3PpjGGPn3UVqmT1hWbHx1ad+oZQRDrwzDx99PHXw/dj3yAOuRj/Mz''@;'; put 'put ''HMQQzKSs5VtvuAqDTu+tTQymEI7tO3eTYI7Fnn37k4KRaSS9CDRv2hj33fK/aNKoYaXJaBKPKdaQf7/9Ad7+aHqNOyuSRs07RHBCHwtNGKfpYdC3sWjWGE7zQacjQOuij2s8QJ63aQWwfK4HOze7a6xrGSOXI88aRMslQ1h+QC4FDonDXPj1t3j4qRdNEQynr48q+lef5SKHjQ6wXKSYqas4WIG3''@;'; put 'put ''uWS59hmDSQvmvp3VU0lI97Acb8G8/5Yb0JPB2IGAHtIRQjA3bN6G2x8YY+6Q0736k3B+uWh16dwBd914LV0xR5fSknkPMdj8dVoyJ07+uNKLW3W748uwKGdkoSMzzpu2isJtiGZ1oTPHqYDAQYtlIGhh80oXvvvCg+3r44+zPHyoonV5+fnnYCQtl+JqrIxcyvHiPhcDwL2PPmk8TIcDqODj3PoW''@;'; put 'put ''hl8TQHZuRcyu8hyTBJMLFx8+68fOTYZgJrwk5aL88P/dhM4d21M2Iphwe05oQKxZK75fa6r4OGEyktAHv89LC3sv/Gb0ZVWuUZl7SfZ5mfGYk6bOSDiJQCyazWjR7HCqhaZto8jIFHc83UFGQzMJM2uaqG0ERCjdy78A9Sw3r3Tju/nuhImljCGLWeJXXTQSwwaeweQgfj8qsVzGxirXnHAkgj+N''@;'; put 'put ''eQZLl69K+Dsaa9fsax+B7FxaMK8pR34Djzb1yOXm6KMXvHZiW+0jGv8ZHW3B9FOQXMpEtmrRTJs65EIyFi1dbmcqxj9d5hNOQ0AuXucNPxNXXDiyWmEcMv+lFHKe/PEMWjKn0XWe+I2Tx2ehUXOgffewbdnMLmB8DnOBwhQY1sE15LQ5N/1JLgKSFS4ZsqX7o9hIV/iqhR7s3kKLZVhMNolt9evl''@;'; put 'put ''4xfUuuzbsxuJJSu6HINcxs7k43XnEbrIP/9ycdzqD7E2zD79CPgzoxhOF3lBE1owOe/KWzAJqdfrxscT3Nj4nTf9AFejB44mmLE65EeLbavG+Bx3iGhgzp63AA+Pf9FxfTMdih+B7KxMJg2cg/N/PKTaiWhCMoOhMGbOnW8nE+zdXxT/iSv5hJtZ53mFFlqdGEGbkyw0aFbxg2SsmpWAZV5KLwK0''@;'; put 'put ''xEhGuFSt2rvTwoZvPFi7xI19u6pX3rE6nZfY6F//z6U4sdPxjF2jFmI1yKW0K3GYT00QwfW5DM1K/AawOn01xyQfAY/HwohfhNDguCgJph732r4MDz55xYV1Sw3BTHjFyN3nY/f+Hg3q17O1BRNu0AENCMGc8unneOKfrzqgN6YLiSKQk52F0Zeeb8sUxSOlJSRTJIwWUYz9pTcnY93GLYl25YjP''@;'; put 'put ''+/xRNG1DsnlSGMd1iCJfrJo0CEWMC/0InMyTWkSA68/jcdNaCQTKLGynjuXapR5sWulBeYn0I3GLZWw0XTt3pFfhXHRq36bSxLvYcZXtJZP8H6+9g/emfIpyQzArg0iJ19zuKM66OojGbcguNXHmSD3yT19zYTUlulTYHG3BbNqoEI/ddyvESmRpInorQeQig/GP195VYX2YPlaBQG5OFq4fddGh''@;'; put 'put ''Cj5VHH7E2xLvJURz3aYteHniZHz51TdHvJ+MJzwFsvMYo9neQuvOEVYJiiKnHpOR+J8hm8lA2LRRFQLi/pYqJKJ4sG8H6N7zYMO3buzZVvOM8KOdUxLthvY/DRecPQSNGzaokWEiKyuLcdKT8eb7/eqQVQAACklJREFUH5u65EcDWoHX5bdvyNUBNBOCqYkF08vqVQunulgW1afADPCWsfvgnxJ6''@;'; put 'put ''Z24tmzWlBfMWO7Ovuu4NZ47kP73ysA75y29OYjbx1P+8aB4pi4AQTCkROYQXtZqWM5Wbjn0HiuzEn/c/mR1Xacl4gJM7+uwCSh21i6A5s9AbtSTZzHezri3jNY1lMx4ozbHHQoDrSZIRhFTSM40DuyPYtoakcrkbO9Z5bNkhublK9taEBokLzxmK/n16IjPDXyNyKX0SgvnqOx/aig9GCzPZs1S7''@;'; put 'put ''7Q0eFUCLjjwnq6A5lujEAYkQzK8/BUmmP45Ppe9QRxPMDm1b4S93/da28mhDMEkmnv/Xm3h3yoz0zbo5c9IQSAbBlM54aHkRQfZFS5fh37y4rV63MWl9rKwhqRKUW2DZ7qPmrHjRRMhmfTf7IVpr4krXxKdU2eDNa8lHgHzRS/e3i+tHLJVFrLazbb0bm1eIxJCLLnAhlMknlbGB/KjbSbjkJyNw''@;'; put 'put ''PK8ZDLZMyOMlLvIXX3+Xv9GfGgtmDGBF9wMvDaL1yew8Ex51IJhy07ZmCTDztQwlZsTRBPNkBmf/+fZfJ/Rj4bRZcPMKPu6Ff+HjWfOc1jXTnxogkCyCKacWq44QzW07dtmC7J/M/iIpWeZVDotkMzsnioYUb2/GSkGN20RQ0BDwM6Bc4kSNK71KBOveAeSKHlopXbzgybotL4ngwE4Xtq0jqfze''@;'; put 'put ''hV3U6Qva1X1TRyoF9IYNCmxtyyH9ToPUFw9TBizRzcRgJoqgcz7f/6IA2nVlMhlvmHUhmGtJMGcYgpn4Iut+8gm4//e/TMqPRuK9SVIL/DF+7JmXMGvewiQ1aJpJJwLJJJixcdjWTIqyL6Q1U0TZv1u9LvZWyvfiKfDz5rheEwvHtWGiEN3pDZqSgNZjcgbzhKK0bobpbhKXk9nqEALkieL2lnhK''@;'; put 'put ''qYITCkVQvBfYs9Vtk8rt61gjfIe4xLlIamHz0RPUp0dXnD9iMNq1aZmw1fLwLksW+fP/fgvvT5vNJB89CnwcPr669LjfzwJo300fginfvx0bLXzwdJYS0+hoC2afU7vgDzddX6WAtRJIH+xkhBfmR8b/A/MWLVWp26avR0EgFQRTTiVWIYnN3L13H6ZSLmXKjM+xa8++o/QidS+LKz0730LDFrCz''@;'; put 'put ''0huyvm+9hlFk5njZR8Y1GcKZOvDT2TJ5oodrMGahDAdIKA+4sG8bbOukuL33bmcZx1LpZGqtlD+EoWO71rb27I9Y4U10aEOh0A8PSei5EMzxL76GqbOMTFFCQDrgw6f/JIjje3F98oZdh1tiqUe+b3sU747LdAC6VXfB0QSzX+9Tcedvrq1x8kTVw6/9IyS27YG/P2eLrdf+2c0Zk41AqghmrJ9i''@;'; put 'put ''zSSTw9oNmyjOPhOfz/8qrSVG3R5qbTaIorA566G3tlDYzEJ+IQlnNqtliIWToZtyExUVC6cOv+ixidB5z+tvzN3NKEqGJEVRXkZCua/CKrlroxs7t7hwYAflhMTtHa1dQhmD/rgmDTGc1XjOPP1HqF9Qz/ZspSI23xDMGOLq7/UkmBYJprFgJrw6B/btidt/dU21BawTPmEtNBAMhvDnsc9iCcuQ''@;'; put 'put ''mU19BEQH80pW8Rl51qCUrlOpLiJlJpetXE2iOctOBgpwLaV7k8x0qfnboFnUzkovpKhxfkOL9X9JWvwkx5JwIUlDQjjlz2zpReAwy6SQSU4Ps7ojKD0AFO12UTqI8ZMkk/tpnSzex9Km1BlPRcZ3PCA0KqxPUtkLQ/r1QdPGDW3B9Iikp6doMwQzRcCmoVkdCeaebRYmPWEIZsLL6dyhA3DDVZdo''@;'; put 'put ''ZcGUyhD3/m0865GvSxgf00D6ERCCOepn59ouu3iE1mvS85jbXMSfly5fSbf5HCz6ZjlDSNJPNGPjEbd5JhOG6jVm0hDJZgNaOAv4OKcea6XnuCuqt5DViGtdEojEWmYsnTH0krinkdGOmZREHJJKWTuSrBUoJZlk4ajivR6SSdDl7aE2pcu2VgbL5fzpsU5WNnLRsTyjV3ebWIpknWzJSOKp7FyH''@;'; put 'put ''v2YI5uFoqP1YO4LJ73HRnijeGmNc5AmvzCt44b7kvBEs16VPoLUEjd/76HgmbqxPGB/TQPoRqE2CGRutkAWxaArR/Pa7VbYigdS3Lym103Zjhzlm76FbPTu/wrJZ0ISkk0lD+SxpmZ3PsnzZJJ5ZjOdkb+08T0M8qz9vBE3WAjkk5YEq9hJOYZFIBmmVDLA6TvEBNy2TJJI7hUhWWClLi2iZtH9S''@;'; put 'put ''BXXnbVLiUbxX/Xv3QDM+lq02iGUMCUMwY0iov9eNYNozwq/thLsNwUx4dV5+/tn4Of90IZhyMSgpLcVdf3mCpQE3J4yPaSD9CKSDYMZGHSOaYQawr1q7HjPmzMcXi5di526m9zp8q7B0WsirD+QyhrOAiUOSPJRNd3tWLvd5kuQkuoq0wNnedYnrFI97RXyn7Wy3/3H4QBPpnhBHfl4C+2WuxRIp''@;'; put 'put ''Gdzyori2g4EwiSRd3NSYLGECTvFexknSzX1gF5/TvV28HwiVixtcWnH25vV60LFtawxifGUvJu80LGxgy9PVJrGMIWQIZgwJ9fdaEkxOy4R7DMFMeHVeP+pCnDtsoDZZ5IZgJrwkHNdAOgnm4WCIRVPI19YdO/ElFQpmfbEQq9dvpls0dbFqh58/WY/dZJMZWYzrbGAhpwB2QlEuqw/JX1ZexXte''@;'; put 'put ''/rb6M4SAMsbTdv/y7CSf4nIXd7vtdudLkmh0iIMeepCsntawnQp+KIZGEsWKJzZpFPIozJH/S1ejtEJGKA4dDFh2HKSQyDJaHktJJEuYfFMkfxQzL9vvRlkp3d+2/KM0qtZWkJ+HHl07YwCr73Tu0A45Odl2Vng6SwMbgqnWGjpWb3UkmPLdePm+7GMN2zHvOTqL/LZfXo1+dJMkW4YiXegbgpku''@;'; put 'put ''5FN3XqcQzNgIRdpI6puXlJRiBfUzP/tyERZ/s0IJq2ZsDEfbe9wWvJkuZqxbdpxnZh5Y6lIsnizvl2sxxlNc7i5kZFjw8zi3Nwo3S/b6xBIqBE6EPIWQygliXIxsTnhpbLMpaex5bB978/B97PPc07Z46B2bOMozeUnalsdCfvmogjQKcZQ/un2ZQBMKuEgiKVROklhezOxtksgyurbLikgoiyus''@;'; put 'put ''k4EyN49hW9Z/ziPNqrpl+P2suNMSfXt2Q8+uJ+I4usE9nBv5nU9FVni8OBmCGS9izj1eN4JpyxTtoEzR340FM+FVd9sNJJh9DMFMGEjTQMoQcBrBjA005j6XC/b2nbuxdMUqzF3wFZYzuexAEZmLphsdwjap9Aqx9FnwMdnSz8fezCh8/E32ZXDPMr4iJu/xR1k5ifGs3FeQUVZSYla820twyAxt''@;'; put 'put ''PkqSam+yO8jvLBI9SyyGfC4Z8lZIpH1IGENCHGlN5D4UdiMc4D7oIpEkiWR4bDggRNFCJFiRnS1xkHK8fPZQ4/JQw02sza2aH4ceXTrbLvC2rVsgmzW/xcKeDjf4sSA2BPNY6Kj1npYEc7s6MkX/DwAA///r8VITAABAAElEQVTsXQd8FNX2/rZl0xMSSkLovXcBBUSKgNg7dkXF8tRn74o+n/7V''@;'; put 'put ''J4oFsIMdO4KCFEFA6b33HkpIAklI22z5nzNhNcQkpGyZuXvmR5jd2Zk7937nzsw3p5q6DrrUA50uj919C/r17o6ioiKd9rBq3TKZTMjNy8NTr4zDnv2pVTtY9tYlAlGREbjhigtxybCByM/P12UfLRYLbDYbHHQdHTpyFBu2bMfS1euxbdc+ZGXn6LLPeuqUx/P3LZKvYVkqh4DNakXD+kno2rEN''@;'; put 'put ''undqh6YNUxAXGwO32w2n04mSuFauxcDsZbfbMX7SZMxeuASFhY7AnFTO4hcEzrrUgVY9TPA4Xfj7KvbLqQLSqMlswvEjbvz0TkRAzlfTk5iEYNYUwsofLwSz8lgZZU8jEMySWFrpoc9/TDaPpKVj07adWLl+M7Zs3430Y8d1+9AvOQb5rF8EIiPC0aRhfXTt0Aad27VGo5QkxMbEaPOKSSWTS70v''@;'; put 'put ''YWFheOvDz/H74hUodKih3NA75v7q39lXFaJZJyKYLrc6BPMwEcxxQjBrPGdEg1ljCKUBPyNgNIJZEg6vZtPlciE94xh2k1Z93aZt2Eikc//Bw8gvKCy5u3wWBP6BgNlsRp3EWmjVtDE6t2+NNi2aoH69OoiIiADPK/4zAqksOTDW9o/94DMsWLJKexEr+Zt8NhYCqhFMs8WEQzs9mDkx3BCCEA1m''@;'; put 'put ''AMUkGswAgh2gUxmZYJaEiIkCP1h5yc8vQOrhNGzfvZfM6TvIlL4XR9IzyKzpKnmIfA5RBGKjozTTd8e2LdG2RVM0bZSChFrx4BcWJpRGd2kqJpifE8FcKQTT4HN84PWFaNiaBuH2KKHBtFhN2L0O+P1ruyEko2uC+fg9I9G3ZzfD37C8M0EIphcJddaqEMzSEuGHLBMG1j5l5+QQ4TyKrTt3Y8uO''@;'; put 'put ''Pdi5dz+Oph9DEZk8ZVEfAZ7jKUl10apZY7Rv3QLNGqeQ1jIBEeHhf/lTGk1LWZHUhGBWhI5xfmMf33NvdCClFfVZIYK5YzWw8DshmDWeiQ/dcQMG9OmlHMF8+tVx2L1PgnxqPEF00ICqBLMktKzdZLLp1VDlnMjFwSNp2LF7P5FOIpx79iMtI1NM6iVBM/Bn1lAmk5mbCWXblqyhbKCZwSPJ7M0v''@;'; put 'put ''yayhZE2lqosQTDUkazYRwbzFgaSmFN5Drr8qBPlYw8xYPRdYPTvMEELStQbzRorOHXHJeRTJp44vWKHDgefGTNA0QYaYIdLJChEIBYJZGoCShJO1BCeIcGZQgNCeAweJbB7Ajj37cODgERyjCHWViUhpXIz4nSO9E2vFUTBOMmkmG6Bl00ZaYE5iQi1NQ8lj4uAc/guVRQimGpI2W9wYdqsTtRu4''@;'; put 'put ''QVxTCYJps1uwdAawYX6xO5PeJaVrgnndZcNx3WUXqEUwKe3Fc68LwdT7hVHZ/oUiwSyNDWu1WLvJ0em8sIaL0x8dPpqB/amHsWvfAeyjNWs9s7JPiGm9NIAB+m61WlArNlbTTnKkd/MmDdGI0ghxkA6nD2L58QsDk8lQfjEQghmgCenn01htHgy/vRDxSSYimGr4YIaFWzB3sgm7Vhffa/0MYY2b''@;'; put 'put ''1zXBHHHxMNx45UVKEUwOlPjvm+9jLUXrymJ8BIRgli3DklpO3oOtEGxaT888rkWoc5T6vtRDREIzadsx5FFgkV7zIpY9Qv1uZRyjoyJRKy4WKcl10TC5Hho1SKZ1EmonxFPaoGhwKh5emEjyn0o+lDWVjBDMmiKoj+PDI9wYQgSzVh2zMj6YNjKRz/nCjL0bhGDWeJYN6tsTj9w9UrcJrKszQCfl''@;'; put 'put ''43pl3EdYsXZTdQ6XY3SGgBDMyguEtZys7WRNGa9ZU8YR68ezs8nEnqVFrh+k6PVDaRk4cOgwjmXlaMQzlLVpFaHLGsmoyEjEk/axXp0ELT0Qpwhi/8m6tRO07fw7486LkMmK0Pz7N56f/5swCYtXrBVt+9+wGO5TZCyZyG8rRHS8WRkNJkeRz/7EigPbiq9pvQtF1xrMc87qgcfvuU0pgumBCWPe''@;'; put 'put ''nYQ/l6/R+9yQ/lUCASGYlQCpgl2YaHq1nbzmPyaeeVTxKic3D8eJZLJ/J6dJOkLazqOUrzPzeJZmgj+Rl48CcjlRlYCaCRu7PQycvDyOkpXXio9BnYQEjUzWq5NI60QkkJYymoJyOKLba+JmDaaXTIpWuILJV85PrMEc894n+HPZGklTVA5GRtgcm1hMMMMjyUROHVYhyMdMlXx+/ciKw3uEYNZ4''@;'; put 'put ''Dp7ZvTOevn8UHBQYo8piogfo2A+oSsSi5aoMKaTHIQTTP+Jnoukln17iyWdi4sTm9gJKAp9P66ycE5pfJ6+PZ2VrWk/2/8wmczyb5HM1Ekr7ExFl4soWhGCag1mbGGazajlHw4k88vyJJi0jm7TjYqKIRMaRaTuGtI+x2nf2jeR9IohkhlMJQ68WmIkjj4fXPB4hkr6bh2Ii9x2WwWwpIcmNoSML''@;'; put 'put ''YQsneqkCu2SWTOmWfnk/DBkHhWDWeG717NIBzz54pzJpihgQC5lf3vn4S8yav7jG+EgDwUdACGZwZFCagHrJqJdwMeniYCPO2lBU5NQIJn9mX08Hlf/LLyjQCCoTVS4HWEBklbfzvk4isbzmsAD2mebPbs8/SxxyBLaNyKJ2bpOZ/Bpt8G5j8sg1re20LSLcjgj+TNtY08i/8TZtX/rdTv6QrH3k''@;'; put 'put ''MXmXkuPwEkghkV50/LsWgulffAPVer0mLgy+wUnXlhoBPmTQoPuRBz+PD0NWuhDMGs+jTu1a4b+P3qOUCYwJ5qTJU/DDjN9qjI80EHwEhGAGXwYV9cBL2pgEekko7+/dXvJzSQLn/exdl3cObpMX77rkZz7We7xXa1p6XXIfrSH5L+gICMEMugh80oGGrV045xonOB+mEgpMMo8X5rkwbUI4co//''@;'; put 'put ''/TLqE7D81IiufTA50e8rT92v3by9N2o/4RCwZi0WKyb/NB1f/kjJrGQxPAJMMDlf68XDBirlK2x4wcgABIFqIlBMMKUWeTXh081hLbq60OcyKgjALiS66VX1O8L+l7nZRDDHhaMgTwhm9ZE8eWRjSq3x+uiHNb8jVQgmm8J+mjkPH375Q43xkQaCjwD7zo0ccQnOG9iP/AILgt8h6YEgIAjUCAFO''@;'; put 'put ''4fQ2uTHN+3OZ5j5Ro8bk4KAh0LZPEXqdR+6X5PKiBMG0mJCV4cbP4+wocgjBrPHESq5XG2Ofe0TzZVKFYLKJfM6CxXjroy9rjI80EHwEoqMicOcNV2FQv95CMIMvDumBIFBjBNh3dsInX2MW3acLKThMFmMi0PXcInTpT0FwFNinAsHkFEUZB4Fp5IPp8RS75uhdMro2kXNSYNZgciSl13dJ74Ce''@;'; put 'put ''rn9MMBctW42Xx318ul3ldwMgwATzjuuvxOCzzxSCaQB5SRcFgdMhwATzwy++xy+/LdSCxE63v/yuTwTOutiBlj05MkYNDabVZkbqTjd+/dB+is+3PtEv7pWuCSZXnHjjuYeplFmCMoE+HFywZsMWKhf57l8BAHqeINK3ihEQglkxPvKrIGA0BMIp0n/S11M0VyZObyWLMRE4Z0QhGndkgqmGBpPr''@;'; put 'put ''kO9a78K8L8INIxBdE0zO+zb2+Ueo3Fk9LeebYVCtoKNMMLfv2ovHX3pTS4dSwa7ykwEQEBO5AYQkXRQEqoBAREQEvvjhZ3z/yxwtrVUVDpVddYKAiYziw251oG4TMo5ThjEVTORch3zTYg8WTSku86oTqCvshq4JJnsZjP3Po2jepBHloiuqcCBG+ZHTmaRSObzHXxpLiaDzjNJt6Wc5CMRSFZV7''@;'; put 'put ''Rl6Dvj27aQnAy9lNNgsCgoBBEGCCOXnKdHwzbZYQTIPIrHQ3w+xEMG8vQHxddcpEMsFcTdkNV86ylR6ubr/rmmAyai89fi86t2+jTDUfJphHMzLx1CvvIC09U7cTQzpWOQRioiM1H0wJ8qkcXrKXIKB3BESDqXcJnb5/UXFEMKkOeVQc5b/lfLSnP0T3ezDBXDwV2PinEEyfCeup+25D317dlQqg''@;'; put 'put ''4GoiTDD37E/1GU7SUHAQ4DRFt15zKYYN6KvUHA0OmnJWQSD4CLAP5kTywZxK6eTEBzP48qhOD5QrE0kgMMGc+6UJu9ZaqwNJUI7RvQbz37ddp+UYzM/PDwpA/jgpl5574c33sX7zdn80L20GEIFIqhF93aXDcfkFQyTRegBxl1MJAv5CwJumaOb8RVr5UH+dR9r1HwIprVwYQFV8LGY1tJeMFKcp''@;'; put 'put ''mjXJgtTtQjB9NnNuufpiXH3xeWo9vKlu8evvfYKFS1f5DCdpKDgIcF3pi4acg1tGXCoazOCIQM4qCPgUAYvFglfHT8SSleskENOnyAausZbdXDiLq/gokgMTHJDipjrk74ch86Ax6pCztHWvwbxs+CCMojyDKmkwORcm51mbOut3loEsBkbARrLs07MrHr7zJmUC0QwsDum6IFAjBDjLR0FhIZ4f''@;'; put 'put ''8y627txD/IRCkGUxHAJdBjjQZRDFkitSxcdEZSId+S5MHW+cOuQ8aXRPMAf26YlH/zVSKYLJ5SK/+3k2PvmWPHZlMTQCFnogtWnZFM8+cAfsVGJOlYpThhaKdF4QqCYCfG9OPXxEI5iH0tKr2YocFmwE+lxciBY9qZyiIknWzVQmMueYm+qQ2+EoMEaZSJ4DuieYZ3Ruj9EP3aWUdog1mPMXLceY''@;'; put 'put ''9z4N9nUo568hAkwo69VJxHM0RxulJCs1T2sIjRwuCBgOAfa/XLpqHd744HNk55wwXP+lw4QA3ZMH3+hASiv6TGZlFSLI2f/yaKobv5AG06PZy40had0TzJZNG+HVpx/QSiOpoh2Saj7GuDgq28sYiiT/1y3XoP+ZPcQPs7KgyX6CgA4R4Ajyz7//GT9Mn4P8gkId9lC6dDoEbGFunHebA/FJ6qQo''@;'; put 'put ''soaZsW+TG3M+M04VH5aT7glmct3aeIOq+UTQha9KPXLOhbn3wEGtmo/cxE53u9D/72FhNgzpfxbuvulqSbauf3FJDwWBMhHg+zL7XL7wxntYv2WHMuWJyxyswhuj492UZL0QkdFEMGmcKmgwi6v4uKmKj91QktM9wVSxHrkkWzfUNXLazrI8mzSoj/88cjfiYmPkwXRaxGQHQUB/CISRD/XWnbvx''@;'; put 'put ''0lsfIj3zuP46KD2qFAJ1G7lw7o1OWG1qmMd50Ewwl88A1v5unCTr3G/dE0x2un599ENo1rihUv5tHKk4+rUJ2EZ1yWUxPgJsJueSkWf3FjO58aUpIwhFBMQ8robUm3Z2ot/lbqrg41ZCe8lSYYI5bzKwc7UQTJ/PUtYM9ejcQSnzI/keY8y7n2DRijU+x0saDDwCVsqd17t7Jzxy181aJLkq/sKB''@;'; put 'put ''R1LOKAgEHgHOfclBPc+9/i527tkv2SACLwKfnVG1FEUMDEeRz/zYgkO7jJNknfutew0md/KBUddj6Dl9lUpVxJHkH335PX6a+TsPURYFEIgn8/hjlFKrc/vWSr0MKSAaGYIgUCECXH/859nztRKRuXnqVI2rcNCK/tj3CkpR1NUMjyIpisgDC04nJVkfH4asdOMkWefpZQiCeeMVF+Lay85XjmBO''@;'; put 'put ''/20B3v30W0Uv89AbFidd70tJ1x8YdYMWkCZazNCbAzJi4yHAWT2YVD5P2svt5LLkpjQ3shgTAbPJg3NHOpDUhGRIOfJVkKSZkqznZrsx9R07CvONkwOTZ5AhCOawAX1w/+03KEUw+aa2ct0m/IciFmVRBwEO8vn3rdfizB5dJGWROmKVkSiMAGsvv5n6Kyb/9Cvy8gsUHqn6Q4uMdmMopSiKSVAn''@;'; put 'put ''RRHnwEw74MH0CXYizBwXb5zFEARTxWTrTDD37E+VVEXGuVYq1VNvZZ8n770NMdFRElFeKdRkJ0EgOAhw5Piefal46e0PqYJPWnA6IWf1GQKJ9V0YeksRrGE+azLoDdnsFuxc68bvXxkrRREDZwiC2bRRCl575kGwI7ZKZses7Bw88fLbOHTkaNAnsXTAdwiE28Nw0ZBzcPPVl4gvpu9glZYEAZ8i''@;'; put 'put ''wC/5bA7nYMulq9ajyOn0afvSWOARaNqJIsivUC+CfM1cN1bMFILplxmVEB+Lsc8/ivi4WKU0Qi6XWzORr9u8zS+4SaPBQyAuJhr3UHWffr27K+XaETxE5cyCgG8R4LREP/wyG1/8OF1M476FNmitdR1UhM4DyPfS5VLC/5KB5BRFC74zYdtyY0WQc98NocG0Wi2UC/Nh5XJhmkkj++6n32DG3D9Y''@;'; put 'put ''FrIohAAnX29Yvx4evfsWbd4WUt5TWQQBQUAfCLDf5bLV6zGWao5nHs/SR6ekFzVGoP8IB5p0oGZIeaNCgA8DYuEURZOsOLjDWBHk3HdDEEzu6OgH70Cvbp2VMjlyEvmfZs7Fh1/+yEOURTEE2B+zXavmeOjOG1EnMQEOh0OxEcpwBAHjIWC327F73wG8Om4i9h08rJTblfGk4bseW60erURkQjIR''@;'; put 'put ''G2KXKhBMTlFU5OAURXZkZxorgpwlaxiCeecNV+KS8wYpZW5kH6BV6zdr6TF8d5lJS3pCgLXv3Tq0xX0UWc4uHkVFRXrqnvRFEAgpBJhcss/7axMmaVXUuPa4LGogEJdIAT63FSE8kogNDUkFgskJ1rPTPZhGBLPIYawIcp5VhiGYHDRx980jlCKYbEZNPXQEj744VsvDpsZlLqMojQDnx+zZtYPm''@;'; put 'put ''k8mR5UIySyMk3wUB/yPA5DItPUMzi6/fskMpf37/o6f/MzRs7UL/a12wUAJMFcglI24NMyN1u5uq+ITrXwBl9NAwBJMf0KMfvEs5MyMn+H361XcoZdHBMsQjm1RBgEkml5K8+6arEU11y50SsaqKaGUcBkCAyeVBSkP01kdfYuO2nUIuDSCzqnax09lF6DZEvQCfjYs8WPyTMfMuGYZgNk5Jxmuj''@;'; put 'put ''HwI/qFVKVQSTmdJkTMIfy1ZX9XqS/Q2GAJvLu3dsh/tuuw5cVlJ8Mg0mQOmuIRHgaPFde/fjzQ+/0OqMi1nckGI8bafPvqoQzTqZKIJcHQ0mR5D/SSEam5fYTjt+Pe5gGIIZEx2ppSriYAkXpSBQZeHcnt9Mm4nPv/9FlSHJOCpAgOV9Vo/OuIVyZNarkygkswKs5CdBoCYIsAsSay5Xk5/7BMrW''@;'; put 'put ''cYDckZRSTtQEHMWOtdrcOI8q+NRSKMCHRcRVfGZOtFAEufFSFHH/DUMw+Wbx8pP/Roc2LZV6KHOqomWr1uHFtz5kecgSAgiwJrND6xa49ZpL0bxJI20+y4MvBAQvQwwYAvwix0GUs+Yvwmff/aylIuJniCxqIlCrrhtDbimEPYpkrIgDJk9Xx8kI8hwDRpDzTDMMweTO3k+mxaED+ipV45lvevxm''@;'; put 'put ''/ZgE+rCIQ2bhh1+TBvVx/eXnU/qtTppPplsiWkNG/jJQ/yFgs9lQSCnBfp49H19NmYGCQkkP5j+09dFyk44unH2li9ITqWMe5/yXmUc9+GWcnZ4Pxnw5MhTBvHz4YNx+/RVKRZLz5ZlfUIhnKNBn594D+rhapRcBQyAhPg6XDhuA88/tjzB6MEqEecCglxMpiAD7W3Iwz+SfZuDP5WukQo+CMi5r''@;'; put 'put ''SN2HOdCpH+B2qkMwuQb57vUuzP3CmBHkLCdDEcwzOrfHcw/frZSJXBMCabPe+fhLzFm4tKxrR7YpjkBkRDj5ZXbBiIuHoX5SXTGZKy5vGZ7vEfCaxNnf8vMffsGOPfuV8tX3PWLqtMi6vcE3FyKlOVnH3R5VLORaichVczxYNduYEeQ8wwxFMBsk18WYZx/SHLdV8lnjij5sznnv8+/UuepDcSRU''@;'; put 'put ''PiIyGrBHeHAsrWpVF7jqT7MmDXHVhUPQm0zmvEgqo1CcRDLmqiLAgTw5J3K1e+jPcxbgWFZ2VZtATIIbucdNcLuNaYqs8oAVOiAixo3htxciKt5MJnJ1CCZrMOd+YSItpjEDfHiKGYpghtvDMPY/jyIlqZ5SD1/2x9uwZTue/d94KqEqlSWMeu8LI2LZY0gREhsAcz+zIje7aiSTx82J2Af17YlL''@;'; put 'put ''hg2kKPPaWmlUlV6mjCpb6bf+EGCtJf9t3LpTM4nzPdRR5KxyR9v3caLbQDc2Lzdh7TwrigqFZFYZxCAeUL+FCwOvddJcUIdccoCP00n+l+/acbyKyoogiuIfpzYUweTeP/fQXVQVpaNSNck50CfzeBae+L+3cORoxj+EJBv0j4DZ7EG9JnSju8EJm82CPRtclL+MyntV42FlpYdmk4b1cRn5HPfu''@;'; put 'put ''1lHT2EvOTP3PAelhYBDg+yVrLdMzMjF97h+YMXchjmefqNbJG7Zxos9lbkREe5B/woM5E8OQfpie7h4hmdUCNAgHdepPCdbPVSvB+t8lIsOoRGTVFRVBEEOZpzQcwbzl6otx9cXnKRfo4yLfkVfHf4xlqzeUKSjZqG8EwiLc6HVBEVp1N8Pp4DytFmxe5sGK6bZqm93YN5P9ji85byBaNWtC7biV''@;'; put 'put ''0tzrW6LSOz0iEBZGD1yqgrVk5VpM+XUe+Vruo2uienmR4+q4cc7VDsTVI1MeGY6sZJJcORvY8IcVzmq8GOoRL9X7xNadQdc50LAdjdSljgaTS0Tu2+TGnM+MG+DDc89wBLP/mT3w+D23KpWqiAXBpp5vplLCdXJQl8VgCJDvZWKyB+fe5IA9kipJ0MsCmzjcHnJ9WACsmmOj79XTiPANNCE+FoP7''@;'; put 'put ''9cYwStHFQUAcaa5SsQGDSVu6GwQEOPUQL9t27sGUmfOwYu3GGkWIs580V35JbmEq9tuj3IlmqxkZB9zk9xZWLfeWIMAS8qeMiPJg6KgCxNZSy/+SK/gYPcCHJ6fhCGbTRil47ZkHNUKmkm8a+2FyBOTzb7wn1SYMdtu02jxo09uFnsM9J7WXxQNgTulykVznmLDxz5qV+mKCmlS3Ns4lojmQfDTZ''@;'; put 'put ''P1OIpsEminS3yghwACS/fO/Zn4qZvy/C74uWIyuneuZw78nZV6/XRQ607EYXKOdN9Cbm1r56MO/LMKTuNFPJweq9FHrPI2v/I5DczIVB16vlf8mo2UiDOecLM/ZuMG6AD4/DcAQzItyOt//7OOrWTlRKi8MEIi09A0++/DbSM4+zbGQxCAL2SA/6XlGExm1NpxJM7j+5z7C5bdVvZDJfXPObhZnm''@;'; put 'put ''SXK9OhQI1EsjmnwdsOlc8mcaZLJINyuFAGss+aV7/8HD+G3hEsz7cznSjx2v8cs32RfQdYgLHfuQTZzs4n+Ry5O94sjdNfM8WPc75aQVM3mlZBXMnTqdTf6XQ9Tyv2TFRFGRGz9PsCM73RJMeGt8bsMRTB7x8w/fhTO6qBXow+MSP0xGwWiLh1KckJnmZgeiEujxRX5AJRdNB8Ik00Ekc45vSCa3''@;'; put 'put ''z0SzLtUyH3DWGejfuzsaplARXlqYaKqk2dcGJf+FBAL8ks3EkufvvtRDRCqX4ffFK7QXbp/MaWq30wAnugwgbmly/YNcMsgWmxkHd3ow/ysbCvKMG1wRChOG58TgG4rQoDXdcxXKf8n1xzMPE8EcH05KNGNr0Q1JMG+68kJcc+n5ygX6sDno22mz8Ol300Lh/qDEGE0UPZ7cnMw0lCbDxC+bp/JL''@;'; put 'put ''bYx/k0yQZsSKdQss1fbJLAu0WnGx6EWZFdg/uVWzRoiKitKStYufZlloyTa9IcCaSiaW/HK0ffc+zP1jKRZTEM+xrBzfdZXISEfSdnUeaILFSuSynGxwJirPl5flxsyJrD3iK9fYD3jfAai/liJjPTjvtgIl819uX+XBgm+Mm2DdO1sMSTDP6tEZT99/h1KpilggfKNdv3k7Rr8m+TC9E1Tva4vV''@;'; put 'put ''jRZdPTjrUhdcZNYob/GSTDf7ZM4in8wlpKkpf/fymqlwu53yxLZp3gRnk0azW8e2mp8mv+Vzwnapc14hdPJjgBFgbaXXvzIrOwfrNm/TzOBrN22tUfBOWcMwUxBex/5OdDqH7rEWijin666M98DiQ+lCdVMqzTmfW5G2x1LtDBBl9UO2+RaBhq1d6H+ti/J1qFMekhHiAJ9FP5mwaVHNXap8i3jV''@;'; put 'put ''WzMkwUyhSNoxox9COOVC84nppOq4+e2IbHJgf+Llt6ie7lG/nUMa9h0C1jA3OvR1o/sQD/lsnT5diuZfU2imFEaUDmU+JXX2Q44zflFJIK1m907t0Lt7J7Rp0RRxsTHatSJk03eyl5aqjgAH7Hi1lexfuWTlOixasQZ7ySRe3XRDFfXCaiWfy3OL0LY36SLNREQq8VLHOQgXfGulXLZmuA1uoqwI''@;'; put 'put ''G6P/1p2KWnTq71Gq/jgrzPkZMeNDG9L2Gtv/kueXIQmm1WrB66MfRrPGDdULbqDZNfaDzzB/8UqjX/8h0X+b3Y0ug1zodDb5P1aCYDIoZrNJ863ZtdaDNXMpJUqWpt/0C16sJapfrzbl0+ygEc4WTRsimkzootn0C9zSaBkIMKnkechz7iglR2dt5eIVa7GeKu+cyM0v4wjfbLJTbtqe5zvRvAsH''@;'; put 'put ''i/8zoKe8s7Af5uKpZmxfaSGrhP+uzfLOL9tPjwAXthhyi4OKW7D/ZQUa6dM3pas9+NnALho/jbejUAEfYEMSTJ4RD4y6HkP691EvHybdiGfO+wPjJn2tq4kvnSkbAVs4lYccWoR2Z5oqTTC5JQ7S8dDfIQooWDXbivRU/7+t2mxWNEiuh64d2qAHJXBv3rgBYmNiNPM5+2uKz2bZMpatVUOAzd9e''@;'; put 'put ''v0p2zcik6O+tO/dqfpVMKtMzjlFMRrlG6qqdrJy942q7Nc1lk/acl7by5JKbY4K55Gczti0XglkOvEHfXKuuG0NHFiKM8g6TB0T5Lg9B72nVOqAlWN9CFaU+sVftQJ3ubViCef7gs3HvyGuVC/ThmzPnfHvqlXeQm+e/t3udzkfDdUur4HO+C616VF6D6R0kiVozhxyn6qBrfrNhz3qOWg2MxoSt''@;'; put 'put ''AClJ9dClfSt069AWzZs0REKteC34iIMtmBio5n7ixV3WvkeACaVXU8llTdMzj2Hz9t1YRbl9N2zdoZFKF82pQCz1W7rQdZATtVPoWiqZ57KSJxeCWUmggrhb6zOc6H0xMUt6Mfbvq0pgB8n+lytm0vNgbs3yJge21+WfzbAEs2XTRnj16Qe0B6JqD0IHPeD/QwnXN27dWb7k5BddIFBMMJ1EMKum''@;'; put 'put ''wfR2numkyWJGYQGwdRkF//xhJdNIYEimtw9c+7x2YjzatWxGwUHtNJ/NOom1wGX5mGiK36YXKVl7EeAXYS+h5G3ZFKiTejgNm7bv0kzg23fto/rgOQF9SbGRP3TrXi6yJrgRGUfc0lm90oFCML1S1u/6bCrx2awjydhFL8L67WaVe8YpimZNsiJ1u/8tWlXuXDUOMCzB5DrNY59/hKqb1FHOtGe1''@;'; put 'put ''2vDlDz/jq59+rYZI5ZBAIlBTguntK/vesH7n8A56e51HEaz7gnODYeIQExWJFvQC16ltK7Rv3RwN69fTTOn8G5NNNqWr9lLnlYOsy0agNKHMy8ujwhCZVAt8PzZs2YEtO3cj9VAanDQ3grEkJLvQ+RwXGrbhSHEK/CiVj7YqfRKCWRW0Ar+vVh7y9kLEUt5hE7laqEIwNf/LEx5MfYdysOYG5/7v''@;'; put 'put ''a2kalmAyEE/eexv6UUqWggJS/yi0sGZg3aZtkq7IADL1FcHkoWomcyKaudkeqvpjIR8wKxwFgdVmloacTenJ9BLHkegdiGy2ataYqmglIDIyUttVzOmlEVPju9fkzfciXphQHqUKYzuJUG7ZsZt8KvfgwKEjPk8pVFX0wuweNOvGWksX4hIo3oMTbteQcQjBrKoUArt/wzYunHONi4qkqaW9ZP/L''@;'; put 'put ''A9s9mPUR5b/kh4ECi6EJ5mXDB2HU9Vcq54fJ84r9L5+kdEX7Ug8rMM3UHYIvCSajVGwyJ20mqTMP7TRpSdmP7NbP2yxbDlij2apZE3Ro0wKNqYIQm9O9hNNrTpe8m8aZ86ydZELJkd78mWV3Ijf3Lw0lm7u37dqDg0eOBp1QlkQ1qYkL7fu6kNKyWGvJVbRqyC215oVglkRZf597nU9pp84iWTvV''@;'; put 'put ''Ipia/+Vsyiwyx/gJ1r2zxtAEsy1pVV5+6n7NXKeayc5MmoP3P/8Ov8xZ4JWVrHWIgK8JpneI/AKrmUxygZ2rKG/mUgtyj+uvdF0x4UzSgoT4emzSsD7qJiYgOjpKIy18XXpJp2rXqFdWRlp7yaRXQ8l9ZwtQ5vEsHEpLx+59qUQm92prNoGzP7jelthE8rXs7USLTh6Ex3Bi9JprLUuOUQhmSTT0''@;'; put 'put ''9Zn9bIfdVoRaSR6loscZZfa//HWiBYd2GD/BunfWGJpgRoTb8eZ/HlXSD5NNU0tXrcOLb33olZWsdYiARjAvoCjy7lWPIq/McLR0RsQrjx/xYAuZzXett1A6JP0RTe9YwsJsqFc7USOazRo1IOLZgPJw1kV8XAyiTprVhXR60fLvmkkkE0rWTPJnxj0/Px9czCGNUgVxvW/2odx74KBW2CEnN0/T''@;'; put 'put ''Xvq3V9VvPTLGg+bdnGjZ3YXYRHoD46I8NbWHl9EdIZhlgKKTTay1HnorJ74k4ZO62hcaaz0MjZUJuTluTHvHjgIF8l96MTU0weRBPH7PSKrBfIZyfpg8No7CfOKlN3H4KOWxkUWXCIRFUB7MYWSy6VW9KPLKDIrN5mYreRyRf9nh3cCmJfSWu81KmsHKHB3cfZjgcNBQvTqJaNygvkY8G6UkIalO''@;'; put 'put ''bdSKj0VEePhfSbg5eIjNs/wn2s7KyY3x9f55Tdz8nbXGOSdywWUYj6RnYP/BIxqh5PVh0lTydn+Qs8r1ump7Rca40aQjlWQlX8uEJL4aSGPpI3N4WT0RglkWKvrYxgE+nSkFVQt6ybCRxk/TXuujazXqBftf7t/swexP1ch/6QXD8ATz/EH9cO+t1ynph2kircP4iZMxa8Fir7xkrTMEbOFUJnIw''@;'; put 'put ''+4L5R4NZcrjEGyg1jJmqVwEHd5JGc4mV/DSZePJD1zgLEyA2rdemvJv1k+qgQf0kNKDyr/Xr1aFcnHGIJfM6+3R6A0zKIp6hREC9BJLXjIlXM8kYFBYWIr+gEMezsin35HHNzM3BN4fSjpJWMo1M39na78aZHX/3NCrOgyYdqBJPNzcS6nHcAxMK//vdCcH8WwZ6/dSwjZPK8zqRkMzJ8DmrhV57''@;'; put 'put ''Wrl+sf/lkp+pfPBCNfJfekdteILJ1Ug4HybfeFV76FjItPXnslV4ZdxEr7xkrTMEmGB2G8z1yCtXi9wX3WeiyfWSnQ4mmiZsW2GmtfGrjjBxioqMQEJ8HFUcqktazkQkE+nkqHXeVkw8I2Cn/Jxcz9q7lNR68j2Av3sXvd4TmCx5Fx43L7z2/nl/Y3LtJZEnKJL7GBHGjGNZWgAOm7bTqPRiJn1n''@;'; put 'put ''a0dBIU0IBRau0tK0swuNO7gQz6bwABFLL3RCML1I6HsdGU3azMFFaNHVQ1aQk764+u5y2b3jKU5a+V8+CEP6fv0EdJbd2aptNTzBDKPyd2889ygaNUjWzEJVG76+9+aH0DHSTIiZXL9yCgbB9KLBHMVCpvMiCnJI28vBQFbs32pSooatd4zetY3SJcWQZjMuNgbx9JdIms7aCbU04plApva4mGiq''@;'; put 'put ''sR6paUbt9jCNhPJLJ5uNy3r59JJQ75rPw2S0NCEt/d3bn5IEkbfxd++2kp+95LHkcUwavflEC6nqDRPD/PwCMIHMzsklbWSOdt0zkeTgG/7LIr/JE+QjydrK8vrkPYcR11abB3WbuNG8E0eFU6L0WNLMk1YqGJHCQjCNNYMatXORNpMCf+oZU5vJyoKsdPK/HGeHs0i//vXVmRWGJ5g86H/dfDUu''@;'; put 'put ''HDJASTM5R5OPm/gVZs0XM3l1Jri/jwkmwfSOzUs02Ucz85AHezZasWeDGdnpat2svOMta82kjgOMIux2RETYERURoRFSJp2sFY0mk3tUZLj2OZyCA8PD7LDbbRoRDSNtKNdp54pGxSZoYu6kU7CSO4LJVBwcU/qcHipB6C196KJqIpxgnMkqE8aiIqdGGjkC2+Eo0ohhHkVq5xGJ5PRjubn5Gplk''@;'; put 'put ''H8lcCrrJzy/U9udjVSSPpbHzfuexxtYGGrV2olEHN+o0AKw2E1xkBueqA8GyegrB9ErIOOsICgDrOqgIzbu66aXSWL6ZbB7fstSDP35QJz2Rd+YoQTD79eqGJyjpOpuSVFtYA7J8zQYtmjyUHj5GkaMeCKYXK6ZFHAxkMnm0ZO0HdwB7N9hweI856AnbvX3U41ozS5/UQHJiea8Gkgkn/8YE3ruw''@;'; put 'put ''rxd/dxKpZELJf05nMbnk65MDZ+Q69aJV9poDNeo2pcCd9i4kkdYyKo4NhEQKivzvX1l2j07dKgTzVDyM9I3dKrqR2TwhyQJnoTHqlNvsFvw+2YSda9RJT+SdM0oQTA4WGEvpitiEVtLk5R2k0des6eCk6weoFJss+kJATwTTi4zGh0h5yWTJSdqgY4c9ZDrnKEULfSYzUnCq+Xm7J+sQRMBO2RZq''@;'; put 'put ''N3ShUVsXkpt6EFObEruzHzGR82BqK8sShRDMslAxzrbIWNJmDihCs+7km0kujXqONOeXVUcBmcfH23HiuFr+lzxjlCCYPJD/PnoPunZsSyYpNRzdeUzehYN9Pv7yB0yZOc+7SdY6QUCPBLMkNEw2zTYKHqEPBfkeZBwksrnFgoM7zMhKM14EesmxyWd9I2CPcCMxxU31wd1IIlIZVxfkisAmcDJ/''@;'; put 'put ''kwY4WCbw06EmBPN0CBnjd9aQdzuXk7LrV5tppXtz6g43Zn4cbgxQq9hLZQjm5cMH4XZFy0aymW795u0YPWYCaZ9E/VTFOe7X3fVOMEsOnt+WOSiI1/m5bvLXBFIp+vwwpTo6dpi0SYo5mJccu3wODAIRFNlbhzSV9VuRprIxaSrrkC8rkUoPkUq3jkllSXSEYJZEw9ifo0ib2UWLNGfXFv/mT60O''@;'; put 'put ''Uux/uWw6sG7+31kxqtOOXo9RhmC2aNJQS1fEZExFHyiONH1uzHhs3blXr3MpJPtlJIJZUkAUu0IBLcVks7DAQ9pMN47s4zJlZqQftCA/m/ZmJiqLIFABAmZ6aEcnUIBOIw9SWri0dXQtrh5E2nHKbmAUUllyiEIwS6KhxuemlJ2g60AH4pOscOnFN5Nur8xVZnB6ogPqmcd55ihDMNkhf8zoh9GM''@;'; put 'put ''8mJyChDVFk638t3Ps/HJt1NVG5qhx2NUglkSdKaRHBzE6TI4gvdElgfHDgKHiXCm7aUUGkctcOQL2SyJWSh/DrNT4vPk4rRCyRSsUyuJ0grF0MsKvdyzzy/8WGUnELgLwQwEyoE/Byfu7zLIQXkzi9+d/VkNqjKj49rjmQfd+PldO1km1cz4oQzBZIHeft1luPz8IUqmK+LIVq7Q8diLY7VUJ5WZ''@;'; put 'put ''wLKP/xFQgWCWREmjkScDhEDaqaJCIpzHgczDZqRRNPpRIp45aRby5xTCWRI3lT9brGTqTiBC2chNuSpJS9mAtJbxQFg4WYuYT5LpW2+BOjWRhxDMmqCn/2ObdXGSNpOS+NelF6IgajPZPL5uoQfLflYvPZF3FihFMLt2aIP/PPIvJTWYLDBO5THm3Un4c/kar/xkHWQEVCOYpeFkGmkizSb7bvIM''@;'; put 'put ''1Agnmc+z0kxITyXfTfrLPEI+nTkSnV4aO6N+t1DS8xgikAn1XahHhDKhvgfxtT2wRxancOJyjW6Daykrko0QzIrQUeO36HjOm+lAsy5cICE4vpmswZz1iQWp29RLT+SdJUoRTK5vPPb5R5BUt46SwTBSOtI7bfWzVp1glkZa01sS4SxOQu6hlzkPCvJIy5lJVaeOmJBxqDhgiJO8F+ZSbkOPaDpL''@;'; put 'put ''Y6i372GUQiiW/CgTUzxIbOBCYhJpKBPdlLDeqr1c/OVLqdewbx8DKgTTx4DqtDn2f+TE7F0GOlErwNpMdkfKyXRReqJwSlOkpnmcxa4UweQB3XfrtRg+6GwlzeQ8vmzKifn0K+9g/8HD/FWWICMQagSzNNwafaT7o4UTktMbOXmta1rO/FwP+XJyKiQyrx+yaBrP7Ayg8ASlDJFECKVhDNh3WxgR''@;'; put 'put ''R4qsja9DZDKZfCmJVMbVoWTnsVQJyU6CpHxWXkLJeYRChFOegr8QzFPgUP5LTLwbXSmdUdPOpM2kGR8I30xOrr51uRt/fG9XGl/lCGbvbp3wzAN3KJkPk2eixWLFVz/+gq9++lXpiWmUwYU6wSxLTsVaTpqrFKruJZ1OqtLCpDM/x4wcIprHj5roz4wT6SbkZpnIp7PYn6+s9mRb1RFgGYRFeqim''@;'; put 'put ''txtxiUQoiUzWqgf67CKCaUJ4JLk9aBk3in0oA/FQrfoognOEEMzg4B7Ms7I2s0U3NzqfQ5HmdSnS3OHfKkC2MDN++9xCZX3VjB73ylI5ghkbE423qKpPAlX3UTFnJKdh2rX3AJ5+9R0J9vHO4iCuhWBWDnyNdNJ/mj/nyfRIXDvdUeBCYR75cJ4gjecxC9VPNyE7kzSeR4E88vUszJP8nBUhzJmk''@;'; put 'put ''7EQkwyn/ZEwtN9X2Jo0k/XFQTjRpZsKjiWhGUI112pG1kRyQw2QyVLWTFWHp/U0IpheJ0FvzNcR5M5uTNpMvEn+8eJnJSpCbQ9Hj4+z00q2ueZxnj3IEkwf14KgbcG7/s1BQUMBflVs42Oe18ROxaOVa5cZmtAEJwayZxDTiSf5IXGnIfJJ4sjahiKI7CylSvZh8msjcToTzGK/NRDxNyMuh30gj''@;'; put 'put ''6ijg1Eqc+7Zm/dDz0VarmyK2vRpJUO1uIo/0IGQzd2QcmbxjSCNJfpQ2ikq1EJDs9soPRibwHv5TGBt/yE0Ipj9QNU6bfP9p1d2FzuSbGZtIwYs+1mayeXz7ag8WfK1u9LhX2koSzL49u+LJ+25HYWGhd5xKrS2U83PZ6vV48a0PtUStSg3OYIMRgukfgWnEk8gSE08T/ceaT20b3fxdFFjkKKIA''@;'; put 'put ''o0JaEwktIC1nYS4R0BO8JvJJnwv5cz7V+c2jYCN6z3QXAUVURZbJqJuy6gR7sVg84GhtK7lg2aiIhz2SNY2kcYwCIqI8RBpZKwnKL0mfo9ywhpOPZDiRSDKtWdnXlTWSRBw5kTlxSPogRNJXMhWC6Sskjd1OLAW6dSVtZpOOxb6ZnDnBFwtfw3O/NGP3enWjx704KUkwVTeTc07M/IJCPENm8h17''@;'; put 'put ''9ntlKesgICAEMwig0ynZNMz/kccIrTk2hQNUtI9ah1hz52QtHqXUcRK5dDrY1E5rqsHgJKLppHdPRyFpP3k7fS+i7S6NgNJvRRTo4mLNKFei0WgtkTn6TqTW42Zyx6cgOwKd30JKiGLjs4c0sNDIn4nyRtro2WGmtSXMQ8EznOaJCCSRSSsF2dh4bad9iFjy8RZaM2nkVFCsgSxun87ABJLZsLbm''@;'; put 'put ''UwqJ1ITr5/+EYPoZYEM1z76ZLnQf4iKXE7NmWalJ90PJPM44KUkweWD333Ydhg7oq6yZnCv7TJ05Dx98+QMPV5YgISAEM0jAV/K0XiLKuzN385I3vtFrX0qQUt6n3OUkuWPS99dCTZj5BNzUaRbtMI0rMkktboSTlGufuNHif6dpRX4OBAJCMAOBsrHOEVvbhZ7nFaFRe28J1OJruKqj0Mzjq8g8''@;'; put 'put ''/o365nHGRlmC2bNLB4x+6C5lo8lZe3I0IxNP/N9bSM+kUiuyBAUBJpjdB7vQvi9pwchvUBZBQBAwNgJCMI0tP3/1ni0VrXq5tLyZ0XGWat3vrSfN43tCwDzOclCWYEaE2/EmRZOrmnSdhWcmm9ykb6bgxxlz+assQUCA/eJ60Jtt216mat1wgtBlOaUgIAhUgIAQzArAkZ8oUwNpM4cVoXEHCgA6''@;'; put 'put ''WdWqMrBo5vFsF6a+E07+4ezbo/6iLMFk0Y26/nJcNvxcZZOuF6cs2o+nKPF6Xr6aEfN6vwQ5MKPXBS6KOhQNpt5lJf0TBCqDgBDMyqAU2vuwNrPNmS50HcB5ZSvnm8m1x7cspeTqP6idXL3kzFCaYHZo3QIvPn4v+cazc3z1fCZKgqXLz2Qqf/ujLzH3z2W67J7qndII5vlOtOohGkzVZS3jCw0E''@;'; put 'put ''hGCGhpx9Mcr4ui6yYDnRuK2ZggApo8NJ/+qy2uZ5NfsTEw5spai+EFmUJphWSuczZvRDaN6kEYqKKIRUwYVTFq3btA3PjZlAUbPiAxhoEQvBDDTicj5BwL8ICMH0L76qte7VZnYZ6KK0YmVrM7n2+PEMN34ZF07p0ioRFagISEoTTJbR1RcNxS0jLlXWTM5jdNFb0yvvfITlazfyV1kCiIAQzACC''@;'; put 'put ''LacSBAKAgBDMAICs4Clq1SvWZjZq809tJpvH1/7uxvIZoWMeZxErTzAb1k/StJhhlHROVTM5+2IuX7MBL739UXHePAUvXr0OSQimXiUj/RIEqoeAEMzq4SZHEaEyedD2TCdVAXIjMvqkNvOkwvLXD2xI26927fHSc0B5gskDfo7SFfXs2lHZyj48Rgdlin7xzQ+wbvM2/ipLgBAQghkgoOU0gkCA''@;'; put 'put ''EBCCGSCgFT5NfD0neg53oSFpMznH7eE9Tkx/P7y4UIPC4y49tJAgmOec2QOP3XOrsknXWahW0tDOX7Qcr737SWkZy3c/IhBGNaB7Dneg9Rll+9748dTStCAgCPgBASGYfgA1BJs0m0mb2ceJHkM8WDXHhPXzQye4xyvukCCYMVGRGEs5MeskJsClaCAMJ14vKHRQsM94bNmxxytfWfsZAZud69W6''@;'; put 'put ''0LGfpCnyM9TSvCAQEASYYC6aYsbO1RatbGhATionURaBhCQXCnJNyMsJjdyXJQUZEgSTBzzqOsqJeb66OTF5jBYqH7lwyQr8b4JoMRmPQCxcW7rdWW70GEa1r6WSTyAgl3MIAn5FgCN+F3xnwd71lEj7ZC16v55QGhcEFEUgZAhm6+aN8fKT95MTLiUVUDQnJo8tv6AQz78+QbSYAbpgLVYPmnZy''@;'; put 'put ''oe/lLridiuZaDRCWchpBIOgIcECGy4PfvrLh4A5LyPnMBR1/6YBSCIQMweT7xouP34fO7VsrW5+cZ6ZoMQN7fXLUYFITFwbd4ITZSucWjhlYAcjZBAFfImA2wZHrwZxPwpB+mJ4aHn5yyCIICALVQSBkCCaDc+7ZvfHgHTcpHewjWszqXAbVP4a14XGJHgy6yYHYRNKOk/ZDFkFAEDAmAmwezzxC''@;'; put 'put ''GsxJYcgNQZ85Y0pNeq1XBEKKYMZER2Hs848oHezDE421mH8sXan5YqrqDqCnC8oe6cZZlzrRtIMJTodUU9KTbKQvgkBVELDZLdi+0oMlv1jhyAu9oIyqYCX7CgKnQyCkCCaDMfLqi3HVxecpXdmHx+mg0pj/pbyY6zdv56+y+BEBi82DNj1d6HWhBPr4EWZpWhDwOwKWMDMWUwT59lUU4FMk5nG/''@;'; put 'put ''Ay4nUBqBkCOYjRsk47VnHoLNZlU22IdnLNcoX0GlIzn5usvtVnoSB3twFFuFhBQXhtzogC2CtB5UulMWQUAQMBgC5H9ZmOsm/0s7MsT/0mDCk+7qEYGQI5gshGfuH4Uze3RRurIPj5NrlL82YSKWrFrPX2XxIwL2SA/6XuZA4/ZmMZP7EWdpWhDwFwJWMo/vWushDaYVhfliHvcXztJu6CAQkgTz''@;'; put 'put ''jC7tMfrBu1BEZmSVF9Zibtq2E6PHTCAy7VB5qEEfm8XiQeOObvS7oogCfYLeHemAICAIVBUBskTM/9qK/VstlHJMzONVhU/2FwRKIxCSBNNGQTD/e+YBtGjaWHmSSYk/MX7SZMxesKS07OW7jxGIjHVj4DUO1GlsJv8tcUvwMbzSnCDgNwSsYRak7nBj4WQb8nJFe+k3oKXhkEIgJAkmS/j8Qf1w''@;'; put 'put ''763XKR/sYzabsS/1MJ58+S3knMgNqckd6MFarG406+JGn0vccLuEYAYafzmfIFAtBEhZyfrKBd9YsXczaS+lek+1YJSDBIHSCIQswYyNicYbzz2sfMoiFrjVasNn303FN9NmlZa/fPcxAhFRbpx9VRFSWokvpo+hleYEAb8gwKmJdorvpV+wlUZDG4GQJZgs9puuvBDXXHq+8lpMTr6ecSwLz7z6''@;'; put 'put ''Dg4eORraM97PozebqbJPMzcGjHDCaqdCIBJR7mfEpXlBoPoImCixegFV7vntUxsyDpops4j4XlYfTTlSEDgVgZAmmMn1auP10Q8jMiICbsVT+VhtNsya9yfenvjVqTNAvvkcAZvdg479i9B1oAlFhRLx43OApUFBwBcIEJdkF6Jl083YulzyXvoCUmlDECiJQEgTTAbivpHXYPjg/iGhxSygSPKX''@;'; put 'put ''3voQ6zZvKzkH5LMfEIiIJlP5lU40aC0k0w/wSpOCQI0RsIVbsHWZmwimDQ5JS1RjPKUBQaA0AiFPMFs0aYhXnn4AFnqTVb2sIqctWrtxK14Y+75W6af0ZJDvvkNAS76e7EL/EUVUq5yiyp0S9OM7dKUlQaBmCHDOy8O73FhAaYlysswU5COm8ZohKkcLAv9EIOQJJkPyxL234uzePVBQUPBPhBTb''@;'; put 'put ''YiIizWmLZs1frNjI9Dcck8WNBi0oAfvlRbBHmig6VSr86E9K0qNQQ8BqM+NYugfzJ1tx7JCFFAuhhoCMVxAIDAJCMAnnTm1b4oVH79E0mKprMTng58jRDDxNAT9HM44FZpaF8FksVg+atHfiTEpdZLFR0I+QzBCeDTL0YCNgIXJ54hhpLr+x4eh+M/nei+Yy2DKR86uLgBBMki2Trucfugs9unRQ''@;'; put 'put ''vnwkT2ULJZr/Zc4CvPfZt+rObB2NzGLzoHlnJ3qeLyRTR2KRroQYAkwuc7Pc+PMHGw7uJJcoIZchNgNkuIFGQAjmScTP6EzlI4lkql4+kofLhJoDfl586wOs37w90HMuJM/HJLMFkcwzLnBTXlKIuTwkZ4EMOlgIcKWe7AyXRi4P7xFyGSw5yHlDCwEhmCflzUE+/33sHnRu3yY0tJgn65Q///q7''@;'; put 'put ''yC8oDK1ZH6TRcqWf5p3d6HkB5cgkbYpU+wmSIOS0IYUAJ1LPPOzBoh8sSCOzuOS6DCnxy2CDiIAQzBLg9+7WEc88cCccDkeJrep+tFismPTNFPww/Td1B6mzkZktHrTs7kS3QW6Ex5ikZrnO5CPdUQsBTkV0aJcHi6dYcDxNAnrUkq6MRu8ICMEsISGr1YIXH7sXHdq0DAmSyabyrJwTGP2/8dhz''@;'; put 'put ''4GAJJOSjPxFgc3mDVk50H+ZBfG3A6ZAURv7EW9oOQQTMXCLXjN0bgGU/W8n3koN5JKAnBGeCDDmICAjBLAV+nzO64Mn7bg8JgslDt5JD4OIVa/DK+ElwuaTqTKnp4LevXFIyMcWF7kPdSGkOFHGeTOGZfsNbGg4dBMxU/pErs21facWKmRYUFRDblEUQEAQCjoAQzFKQh5oWk4cvuTFLTYIAfo2O''@;'; put 'put ''d1NZSSdadKfgH4skZA8g9HIqBRGwhJlReAJY+7sZO1bRZ6nQo6CUZUhGQUAIZhmSCqWIch4+1+NNS8/E6DHjcfDw0TIQkU3+RMAW7kbTjm50PseF2AQqLVlEqkxJ/uxPyKVt1RAwm8gaY0LaXmD1b1SlZze/rIlJXDUxy3iMhYAQzDLkxRHlLzz6L3Tp0DYkIsoZAqvNhoVLVmDMu5/CReYlWQKL''@;'; put 'put ''AJvMayW50GWACw3aerRUUm6nsMzASkHOZkQEOL+lk17Ktq0wY9NCK7KPc+FHIZdGlKX0WS0EhGCWI89uHdviOcqLGUp+iZqpfCKVkVwgZSTLmRZ+32yPcKNZFxfa9/EgjgKAioqIZLqFaPodeDmB4RAwkdbSQlrLzEMerJ1nwf6tRDQd4m9pOEFKh5VFQAhmOaLlCOvRD9yBXt07h0SNcoaBTeVc''@;'; put 'put ''PnL0a+ORejitHGRks78RMJkouryeG+37utCknRu2CDL3idnc37BL+0ZBgJSTNtJaFuR5yM8S2LTIhpxjrLEUraVRRCj9DA0EhGBWIOd2rZrhxcfv025bqtco98LApvIlWlT5RDidElXuxSUYa05nVL+5Cx36uFGvKZnNSWOjEc1gdEbOKQjoAAE2h7sp2wWXetz4hw1H9oB8LUVrqQPRSBcEgX8g''@;'; put 'put ''IATzH5CcuuGRu27GzJmaHAAAQABJREFUwL69QkaLyaM3U5Wfj778HlNnzT8VDPkWFATCIjxo0tGFNj1dqF3fRJVI+KEqfrJBEYacNCgImMkUbqYXrIyDbmxabMXeDRY4CkRjGRRhyEkFgUoiIATzNEA1bpCM/z3zIOxhYVputdPsrsTP7B5wIjcPXEZy++59SozJ6INgDXpUjAdNO7nQsqcbCfWI''@;'; put 'put ''aBLHFKJpdMlK/ytCgHNaMrnMJo+drStN2LnKgtxsCuGhe5QsgoAgoG8EhGBWQj533nAlLjlvEPLz8yuxtxq7WEiLuXHrTrww9j3k5ReoMSglRuFBRAzQrFNx7syEJB4Umc5ZoymxQEpIWAYBCt4xw2QBso+Sn+VqM3autiCHosPhEWIp80MQMAoCQjArIanaCfF447lHERcbHVJR5Vzl5/tfZlO9''@;'; put 'put ''8qmVQEl2CSQCHmKTkdFAo/YutOjGpnOP9lB2cmojiToPpCjkXL5CgLgjl3fk96TjR4hYrjFhzzoK4DlOG4RY+gplaUcQCBgCQjArCfWVF5yLW6+9PKS0mGyGKipy4vX3P8PilWsriZTsFmgErHY3GrR0o0VXCgZq5kF4uAlOF1FQ+pNFENA7Ahy8xknSucBAxgFg51rysdxoQT5V5JHIcL1LT/on''@;'; put 'put ''CJSPgBDM8rE55ZeoyAi8Pvph1E+qS9HVzlN+U/kLpy46cjQDz1LqosNp6SoP1fBjs1jdVN/cg+aURzOltQextdikCJqvYj43vHBVGwBrK6k0KsgMXpDjQepOE3atMVMFHqodXihmcNXELeMJTQSEYFZB7sMG9MF9t14XMtV9vNCwqXzZ6vV4ZdxEOIqKvJtlrVMEOI9mVJwbjdpRUFAHJ5FOyhto''@;'; put 'put ''59J5HkrxIlpNnYotJLploqAdK/3xS8+xI8C+TRbs3WTG8aNkGncJsQyJSSCDDBkEhGBWQdSsxXzm/jvQqV2rkCOZFosVX02ZTn8zqoCY7BpsBDiXZr1GLjSmWucpLUirSbXOObErk02P+GoGWzwhcX4mlRb6Y2169nEPDpO2cs96M9UNp1RDoq0MiTkggwxNBIRgVkHubC7mEpJP/fv2kEq+zhCx''@;'; put 'put ''P2aho4hqlX+CZWs2VAE12VUXCJBWMzIKSGnlQsN2LiQ14mh0Cz3zPaRNoie/kE1diEmVTvxFKulOmZvlwtH9ZuzbbMYhSpCel03aSlGkqyJqGYcgUC4CQjDLhabsH8JsVvzr5hEYOqBvSAX8MBqcuoj9MJ8bMwEHjxwtGyDZqnsETGb2z3Sjfis3GrYmv80GoIh0fuh7RLOpe+nptIOkoORE6Fwb''@;'; put 'put ''nPOz5ma7SUNpxoHt5Fe5g/LqZvH8op1kEQQEgZBBQAhmNUTdKCUJLz52X8ilLWKo2B9z5bpN5I/5MfILCquBnhyiJwTMFjabE9lsSWUpW7hQpwFpOkmzCdJ4aj6brNkUbZOeRKafvnD0N5m+TRSrwyVMsylPZdpe4OAOC47sNp3UVAqp1I/ApCeCQGAREIJZDbytVgsuGz4YI0dcGnJaTIaLSeZP''@;'; put 'put ''M+fhgy++l4oa1Zg/ej2ENZvRpNms19iDlJaUW5PIZkw8aaVsxVopTn0kpnS9Si8A/SKuaCFSyZV12JG3MNeJYxScc2SviUilGZmpFhTkcT+EVAZAGnIKQUD3CAjBrKaI4mNjMPrBO9GqeRM4HI5qtmLMw9gfk5VaEyZNxqwFS4w5COl1xQiQBjM8Akio70Jy8+JAobh6QEQUVVgh/uBxUfoj1m6K''@;'; put 'put ''72bFOBr5V5Izm721co3sg13gQm4O56okUrnHqhHLLCKYbon+NrKUpe+CgN8QEIJZTWjNdMPt1a0THvvXLVoL7L8WSguTzByqV/7yOx9pJSVDaeyhOFY2pcfU8mh5Nus1cSGxvhuxtSlQKNKqmdO1uuic3J2vg9C6FNSZDkQoWUNpIg0lX9/OQiKUWR5kHjHj6D6O+jbheJoZhfm0o2gp1ZG7jEQQ''@;'; put 'put ''8BMCQjBrACwH/Nw78lqc2/+skDSVc9DP/oOH8Z833tOSsdcASjnUYAhY2Jye6CENp5v8NilQiEpVxhHhDI8ivzwbabWIaHIlIRcFfIiWU4fC9WonmVCSDyWXYszPd5LfpAnHDpmQTlrK9FQzsohcFhQU/67DUYR8l2z0DLKH2RAVGYnwsDDY6LM3RJ/f85xUia2ALGx5efnII0G6tAsy5GETAAKE''@;'; put 'put ''gBDMGgLdILkeBfzcg4Ra8SFV4ccLG/tjrli7Aa+OnyRBP15QQnBtJpN6RCyRzLpEOpPcSEj2IJ4+R9E2O5nVuRQgazfZtM7k0y3BQ4GbJV7NJAXkEJ8kBTOVZSTtZP4JD7IzyHfysBkZRCozD1JKoWNmFGkeP6yllEVPCERGhCO5Xh00bVgfjVOStapyibXiEBsTjXA7kUubjYKuLKf4xTtdLi1n''@;'; put 'put ''M6eYyzmRi6MZx5B6OA17DxzCngMHkXoojdLPhZaLl55kqnpfhGDWUMKsxbtgcD/ceePV9KbPr/qht1jpxjZ9zgK8+9m3xSbS0INARlwGAnRpIDKWTOl1PKhFZDO+jovM6rQt3kWaTjPCqLoQ+/hpxJMt66zxZLWLmNnLQPM0m5gPklmb85lzDkr6qBENFwFamOdEfq4ZJ46xiZs0lEQos2idTd8d''@;'; put 'put ''eZKT8jTIBvXnlKQ66NS2FTrSX/PGDVA7IR6RpK3U/ODpOuGyxcXXT7F7Cn/m30ou/J3/OI+z94/3O0GEMy0jE1t27Maq9ZuxadtOHMvKKXmofBYEaoSAEMwawVd8MFf4efLe29CVkrAXFoZm6h6z2YJJ30zBjzPm+gBRaUJVBLiMpT2CUiGRZpPJZkxtIqAUuR5di4hnHJnYIz2w2oGwMCs9FAkF''@;'; put 'put ''IpyauZ3LqdNDkasPMQcNOT/Pk5yBrdmshmRizqZtjWjQJlehm4Jw3CjIp0TmWUBOOnCctJM5FISTfYzzUrJPJTdyKvng5mTRFwJ1EmuhZ5cO6Nm1I1o0aYha8XGanIuoTK/b7dauA1/0mOcOK0hY8+kiTWdaegY2bNmBhUtXYc2mrRS8KmWBfYFzKLchBNMH0ucLtW2Lpnj+4bvpwWjTbgI+aNZQ''@;'; put 'put ''TTAGRU6XVulnyap1huq7dFYPCHioXjpgJ4IZGcPkk9ZUTz2GSGcEE0+qQsS/hdE+VkqbZAujaHZW19GiEVEioExENULqjWw/SUY1Qso7/vWBv+hgOcn1NNqnMcdi4sg9I2WTRiR5SNqYyHeuyEF/RBId+R7SSBKJzLTgxHHgRCYlMifTdl6OCQW5bP7mFoRIMgpGWfjlqW3LZhjS/0x07dAGdWsn''@;'; put 'put ''aqSSM5Twb4FYmGyGkR8nE9mde/bhtz+WYQGRzeNZ2VpfAtEHOYdaCAjB9JE8beSLOOKSYbjusgtCMuCHYWTzy5GjGXiNyklu27XXR8hKM4IA0SUKKgqz0194MdEMjy4OKIqIdmvEMyKKfqO/cCagtI+VYh2sNjcsYTwvKfDISuZBzh+vqf0IUeJff1Ew/nCSyBWv6H/vM927Pp0QvI1p7RZ/0f7X''@;'; put 'put ''iGNx+381xc0T+eWAC05m73KaKFE5iEB6UFRABJL+ColA5hFZzD9Bf2S1zM+hYBtaF1AEtyOfgze49eLznK5r8rt+EeAX887tWmH4oH4aseRgHTZ7s0YxmAsTTSace/enYubvizB74RLNhzOYfZJzGw8BIZg+lBnnxnz2wTvQunnTkMuN6YWRSebOPfvx2nuf4OBhKSfpxUXWgUKATOyUUslMWk6L''@;'; put 'put ''1Wtu98BC5NQWRppPIp62cLdmhrfa6Hfaj9dc4pD3N1PWJYvVreV+5Ie/2UwklROLk2n/L9JZciisPiUNk5MIosftLbdJJmviBy4igW4nkUH6c1EchYO0j07vmrSMHFtRVGAm0zURy0Iz7c8+deyTKsSxJMSqfm7VrDEuHjqA0t11RGREhPbMCJS2srKYchAnm9B37d2Pb6fNwvwlK0PSQldZvGS/''@;'; put 'put ''UxEQgnkqHjX6xuSqS/vWeOb+UZpJQW83ixoNrgoHm+nNd82GLXjj/c9wPFucxqsAnewqCAgCiiOQQD6VlwwbgHPPPlOLAGeTtN6fFUwyeVm+ZgM++24adu8/qPs+Kz6NDDE8IZg+FhObym+66kJcccHQkDWVs+aHTZELl67EOxO/QkGhpMHw8TST5gQBQcCACPTs0h7XX34hmlFEOJvBOWjHSEsE''@;'; put 'put ''aVozMo/h66kz8ctvCzQ3DyP1X/oaWASEYPoBb35Dff7hu+gm0jBkTeVMMjnWYua8P/DR5B/J9BdcnyI/iFmaFAQEAUGgUgjEREXi6ouHYSgV5QgnR2H2szTqwr6Z/Dd/8Qp8TPf29EyKNJNFECgDASGYZYBS001cRrJbp7Z46r7bQ9pUziTTRSzzh+mz8cUP02sKqxwvCAgCgoDhEGhCidFvu/Yy''@;'; put 'put ''dGrXmvx03YbTWpYHOOfj3LZzN97++Cts371PTOblARXC24Vg+kn4xabyi8hUPiRkTeUMLfulchWJz7+fhqmz5vsJbWlWEBAEBAH9IdCzaweMvPoSpFDFNyNrLctD1m63I/PYcYz/5GssXbWeFArGMvmXNy7Z7hsEhGD6BscyW0mIj6WAH4oqb9E0ZBOwMzCsyWQ/zI+/+hGzFiwuEyvZKAgIAoKA''@;'; put 'put ''SggMpZyWN1x5EeKolKOK5NIrK44053KT73/+nZY7M9gplrz9knXwERCC6UcZsPauU9uWeJqiylmjaTSHbl9Cw1icyM3TyklypQhZBAFBQBBQFYFLKP3QNZcO12qEh8J9n30yWXv5yTc/YdpsDv4Rn3tV53ZVxiUEsypoVWNfq9WCERcNw/VXXBjSpnKGjknm8ewTGEeR5cso3YUsgoAgIAiohsDl''@;'; put 'put ''wwdT0Y3zEGYLLaUC39/ZWvXBF99j+tw/hGSqNrGrMR4hmNUAraqHRHOt8vu4Vnk7FBQUVPVwpfbnmxBHHY6bNBmr1m9WamwyGEFAEAhtBM6nijw3XXWxRi71ntvSH5Li+zuXbB1P9/d5fy6HUzSZ/oDZMG0KwQyAqPitrkWThnjuobsQEx0V8m92bE5JS8/E2A8+x4atOwIgATmFICAICAL+RaBf''@;'; put 'put ''r26468arqCpPeEhHVPP93UGBnS+P+wir1m3WCKd/kZfW9YqAEMwASYYvuvMG9MFdN10NI1Ru8Dcs/KZ7mOqWv/3Rl0Iy/Q22tC8ICAJ+RaBdq2Z4cNSNqJNYK6R97b0gc+WfoxmZ+M/r72HPAan648Ul1NZCMAMocbs9DPfecg0GU4mw/Pz8AJ5Zn6cSkqlPuUivBAFBoPII1E1MwKP/uhktmzYW''@;'; put 'put ''clkCtvDwcGzYvA0vvvWhlAwugUsofRSCGWBp162dgP88fDcapiSHbJWfkpALySyJhnwWBAQBIyHAQZysNDj7zB4wUcdD0e+yInlxMvYfZ8yhFHVT4KCa67KEFgJCMAMsbyZUXdq31oJ+Qj11kRd6L8l8hypCrN+y3btZ1oKAICAI6BqB4QP74pYRl1IaOouQyzIkxfEH/Pfau59g0fI1koi9DIxU''@;'; put 'put ''3iQEMwjS5bdeTmVxM1V4CPWoci/8TDKPUODP2x99QSRTAn+8uMhaEBAE9IlAY7JCPUHZQZLqJAq5rEBE7I+ZevgInnl1nBbcWcGu8pNiCAjBDJJAOdLw4TtvwllndBV/zJMy8EaXc9kxSWEUpIkppxUEBIHTImCloM37br1WM41zffFgLawd5Psm//HCL+q8eE31XEGIk557v2s/BuE/MZUHAXQd''@;'; put 'put ''nFIIZhCFkJJUF6MfvBP1ac2R5bJAu1FmUG3bdz/9FktXrxdIBAFBQBDQHQK9u3XCv2+7nir12ALeNyaVYWFh2nlzc3ORcSxLyy3M981cDh71gPplR1xsNNjnPyEuFvHxcZqp2ks4A91p7jPnxHxuzARs3Loz6IQ30OMP1fMJwQyi5M100XXr1BZP3Hsb+I04FEqKVQZufhs/np2jVYSQspKVQUz2''@;'; put 'put ''EQQEgUAhEBFux1P/vh0d2rREILWXrJ1kYpmbl4ct23dr1dA2Uh7hQ2npyMsvu4BHGJmnE2rFUYR7I3Tt0Aad27VGUt3aGsELtFKDo8qXrFyLl9/5WKtdHih5yXmCh4AQzOBhr52Z/TEvO2+Q5igu/ph/C4Nvply7/NNvp2Hm/EV//yCfBAFBQBAIIgID+5yBO2+8OqDVeuykkTxB2so/l63Gr78v''@;'; put 'put ''ws49+6tVJacWaTP7nNGFUuX1RvMmjTSCHKi64azF5OW/b74vCdiDOH8DeWohmIFEu5xzhVN+TPbnGdi3t/hjlsCISWZ+QSG+mjIdP838vcQv8lEQEAQEgcAjwNrLp/89Cu1aN2dHR793wOtfuYzchb6dNgvbdu2tFrEs3dEoKl88qG9PXDx0IJLr1UFhYWHpXfzyXbSYfoFVt40KwdSJaGonxGul''@;'; put 'put ''JJs1bhiwi10nQ6+wG0wyi5wuTPn1NyKav4Z8mc0KwZIfBQFBwK8IsPbvnluuRUR4mN/9CNkczlacyT/NwIy5f6LADySQ4wBGjrgEvbp3hpPiAPwdDMRaTK5V/ixFlG/cJr6Yfp2sOmhcCKYOhMBd4AuvXctmmm8P1ytnZ2xZihFgkukmZcHM3//AJ99M1bSago0gIAgIAoFEwEL3oYfvugm9u3Wm''@;'; put 'put ''0/pXe8km8dRDR/DuZ99g7aZt9Dxw+W2o7P9/1UVDtdR57LLl71iAiIgITJs1j3zsf5Dk636Tqj4aFoKpDzloveAb2MC+vXDvyGu0i9zfb5M6Gvppu8IE3ET4LFq+Gu999p2UHjstYrKDICAI+BKBZo0a4On7b0cCRWT7897M5HL3vgMY+8Hnmq8la/wCsZxLfpm3XnMZRaD7VzvLZv9Minh/7KU3''@;'; put 'put ''ceRoRiCGJucIEgJCMIMEfHmn5eo+119+Pq6++DzxxywFEpNMM92c1m7coqUxSj2cVmoP+SoICAKCgH8QuPLCIRhB92WL2eQ3gllMLlPx+vufEslM9bs2sTRS/Xp1IxeAEVqaI39qMnmcbxKB/u2PpT7xKS09DvmuDwSEYOpDDqf0gh3JOQl7n57dhGSegkzxFyuR8J1792MCJWTfunNvGXvIJkFA''@;'; put 'put ''EBAEfIcAp/th7WXHtq38FtzDFW/SqJrZa+9OwtYde4JWVvG8AX1w+/VXgNPo+UtTy8E+fyxdqZWQLHRIDmjfzVR9tSQEU1/y+Ks3nCD32QfugAT9/AXJKR+YZPLN+IMvvseSVetO+U2+CAKCgCDgSwSaNUohgnkHmcdj/UK6ioMZnZpZfOmq9RTYGFwf/Fsp8OcSSp/nr1gANpMfy8rGoy+8rpUI''@;'; put 'put ''9qWspC39ICAEUz+yOKUnbA5u3byJFvQTHxvjtwv9lJMa7AvfpHLz8im6fAamzZ7vlxu/wSCR7goCgoAfEBg+qB9uufoS2CgIxh9aPTYZfzN1Jr6ZNrPcpOl+GFa5TXIp46dPJpP3V55M1tj+39sfUvL1dUHT1pYLgPzgEwSEYPoERv80wkE/Z/borJnLmXD60yfGPyPwf6v85u9yufHLbwvw5Y/T''@;'; put 'put ''JcLc/5DLGQSBkEPg/tuvR/8ze/jFPM7kchOl7HmFKtwczTymG2zbtmiKZ6mUMbts+YNUc33yb6b+qhXTCLbGVjegK9YRIZg6FyinjbhoyDm47drL4XA4/HKh6xyC03ZPizA3mbF8zQa89/m3OJqhn5v0aTsvOwgCgoCuEeCk5Oyu1KpZY5/3k+9dHCM+5t1PNFcff6Yjqk7n77zxSgwfdDZcfjDZ''@;'; put 'put ''M7Feu3Ernn99AuX4dFSne3KMzhEQgqlzAXH32MH81msuxcXDBkrQTzny4hs1m8x37NmH9ymN0eYdu8vZUzYLAoKAIFB5BBqlJBHBvBOJVNPb1wuTrKXkQ/4GRVRn55zwdfM1bq9Bcl28+Ph9iIuJ9rlyg+/XGZSu6NEX3tCV5rbGoEkDfyEgBPMvKPT9gd+iH7rjRpx1RlchmRWIioN/+KbFCdnn''@;'; put 'put ''LVpewZ7ykyAgCAgCp0egZ9cOuP/2GxDpY1NxseXFhP9NmEQkM/iBPeUh8a+br8bQAX19rsXk8bvcbjz18ltaNhB/mOHLG5NsDwwCQjADg7NPzlInoRaevO82tKGKPwUFBT5pU8VG+M24kNwJps76nXx8ZmmfVRynjEkQEAT8j8CF5/bHTVddDKvF7FMtHge57KJ0ay+88b6uNXidKDXTMw+MovFb''@;'; put 'put ''fA42l8N8+Z2PqIDGGgn08Tm6wW9QCGbwZVDpHvAbX+MGyRTdNwrJ9epoPpmVPjjEduTgHyrAiaWr12Hi5Ck4lJYeYgjIcAUBQcAXCNxM5JJJpsXHBJNLJn7/y2x88cMvuogcLw8rDvJ5iczkzRo38HmgKWPwwRff4aeZ8/xaDrO8scl2/yIgBNO/+Pq8dSZOHdq0wBP33IroqEhJX1QBwl6/zL0H''@;'; put 'put ''DuKjr37E6g1bKthbfhIEBAFB4J8I+COC3Gsef21CcXCP3qOo777pKgwb2M/nZnKOJP/u51mY9PVPQc/9+U/Jy5aaIiAEs6YIBuF4b/qiB0fdCI4y91eesiAMzS+nZL/ME7l5Wo45NptzWiNZBAFBQBA4HQJMBB/71y3o1bXj6Xat0u+sKOCgnudff5eqkh3wqem9Sh2p5M5D+5+Ju2+5Bm6Xq5JH''@;'; put 'put ''VG431mDOnPcHxk2aDEdRcJPLV67HsldVEBCCWRW0dLQv+xlySa9RVNKL82OKg3TFwuEbOqcDWUjlyT79dpqkMqoYLvlVEBAECAF+gX/qvtvRuX1rcrjx3cL+l3v3H8Tzb7yrVSTzXcv+aalD6xZaqiabzerTE3DJyAWLV2i116VkpE+h1UVjQjB1IYbqdYJvflddOBTXX36B5MisBIQlTeYfk1/m''@;'; put 'put ''qvWbK3GU7CIICAKhioA9jGuQjyK3pJY+TbLO6Yk2bNmOl976EMezc3QPb0pSXfzfE/chJjrKp31lHJavXo+XKNCnUHJh+hRbPTQmBFMPUqhBH2xk/h1JdWMvHT5Y0hdVEkc2meecyNWizH+cMVeizCuJm+wmCIQaAlwycTRVs/F1knUmVivXbaQURZ/oMv9laTnXrZ2AFx+7B3USE3xqLWMcVq3b''@;'; put 'put ''hBfefF8IZmnQFfguBFMBIfJb9j0jr8G5Z58lJLOS8mSTOWs0V6zdiE/IZM6BQLIIAoKAIFASAbs9DKMpyXqblk19aiL3Eqv/UQWfLANoMGsnxGsaTH8QzOVrSIP5tmgwS847VT4LwVREkjEUUf7AqBskEXsV5cm+UEeOZuCrKTPw28Ilmp9mFZuQ3QUBQUBRBNhC9PT9t6Mj5YL0pQ8m53/cvH0X''@;'; put 'put ''/jv2fUOYyJPqJGoEs1Z8nE81mJoP5hLywXzvU7IkFSk6i0J3WEIwFZJ9QnwsHqRqPz06dxBNZhXkyiZzThOycMlKfE456aSWeRXAk10FAYURYEvHE/eMpHtqe5+Oku85Bw+n4bkxEwyRo7c55cB84dF7wDkxfblwFPnsBYvw9kdfShS5L4HVSVtCMHUiCF91oy75yDxKaTXaU9SfVPupPKolA4C+''@;'; put 'put ''/HEGFq1YU/mDZU9BQBBQFgEu0duvV3fS3PkuvRkT1/yCQox+bTy279oLt4dzXOh36d2tIx65eyTMvlTj0nA5D+aUGb/hwy9/kDyY+hV/tXsmBLPa0On3wOR6temt+za0bNZYSGYVxcSaBQeZamaTufzrn37FsazsKrYguwsCgoBKCIy67nKtFreF2JUv08GxmfzNDz/H74tWkPZO3+bhay4ehmsu''@;'; put 'put ''PZ9yCPs2VyVrMCdO/hHfT58jlXxUumhOjkUIpoJC5SE1rJ9ECYJHonmThkIyqyhj1mYy0dxFCZC//PEXLFm1vootyO6CgCCgCgJXnD8YIy4Z7vNa5Ox/OGPuQnDKNC4EodeF74fPUi3ybh3b+bxUJGMwhgKd5v25TGqR63UC1KBfQjBrAJ6eD+WbQtOG9TWS2TAlmVJAFOq5u7rsG5NMdjyf9+dS''@;'; put 'put ''qgI0S3wzdSkl6ZQg4F8EzjmzB+666Wpwtg5fajD5/nLoyFGMHjOe1un+HUQNWq9fr44W4BMbE12DVv55KD+jGM/nxryL9ZQTlAuGyKIWAkIw1ZLnKaPhC5idsx+5+xZNoykk8xR4KvWFfaX478DBI/h66q+YT1Un9O0tValhyU6CgCBQSQRaNG2Ep/99O+J8TLD49Gwmf4vN5HRf0WsU9aXnDcTN''@;'; put 'put ''V1/i8zKRfF/lfMSPvTgWqRTwJIt6CAjBVE+mp4yISWbLpg3x+D23ol6d2lrFn1N2kC+VQoBLc7roDXvR8jVaTfO9Bw5V6jjZSRAQBIyLQDSlf7vsvEE4b2BfhFNOTF8vnA9z3aateGXcRF36e3Oi+f9S9Di7Wvlaw8gp4rbt2oOnXn5bC3jyNbbSXvAREIIZfBn4vQdMMts0b0KazJuFZNYQbb4p''@;'; put 'put ''pqVnYurMeZg5f5HcGGuIpxwuCOgVgTMoNdHVFNzSiu6dbpfLp+bxkmPml9e3KE3PAkqTprdgn6HnnIW7bx7hc+0lj58DfGb9/ifemThZd+MuKR/5XH0EhGBWHztDHamRzBZEMu+6GUl164hPZg2kxw8EKgOETVt3kNl8JlZv2FKD1uRQQUAQ0BMCyeRzePnwQeh/5hla3sciP0d480vr7n2pePGt''@;'; put 'put ''D3A4TT++mLXiYvDfx+5Fg+R6Ptdesrw5wOftj76gF/XFFJ3u0tMUkL74CAEhmD4C0gjNFJPMpnjozhtRv15dIZk1FBo/GPLyC8gvczl+/HUuJU4+WsMW5XBBQBAIFgJsAh/crzcuGnIO6ifV1UiPr83C5Y2NydZPZBX57LtpyM3LL2+3gG6/44Yrcf7gs+GiIhS+XvhZxOngnnz5LeykbB2+DJ7y''@;'; put 'put ''dV+lveojIASz+tgZ8ki+sDm6/FFKYdRIostrLEN2VOdoUNY88APitz+W6uYBUePBSQOCQIgg0LVDG1x5wRB0aNtSKwnp9AOpqghKvi9z8OA4MhfrwVTet2dXPHD7DbBYzH4hf/xyvp38L59+dZzcLyuaGAb/TQimwQVYne4Xk8wUPEo+mY0bpkiezOqAWOoYNpubiGxuofrC3/08G8vWbPDLjbnU''@;'; put 'put ''aeWrICAI1ACBFNJUXkbmcK7UExUZEdQgSH5Rzco5gf+Nn4gNW3cGzWzcjDKPcNR8Yq14v5jGWVzsfzl5ynR88cN0qeBTg/mr90OFYOpdQn7sH2swH77zJs2JPT9fH2YZPw43IE3zmzk76i9ZuQ5TyGy+jcrAySIICAL6QoBzOg45u7dmAq5D5XXZBzBQ5vCKkOC0RVyj/PX3PtXuHZy5IpBLUt3a''@;'; put 'put ''ePLeW9G0UQOqrON70ziPxautfZa0lxvIj13M44GUcGDPJQQzsHjr7mwNkutqppD2bVpCSKbvxMMPimzSRsylChU/z1mgJVT2XevSkiAgCFQHgTCbVdNWXjz0HDRrXJx6R28BJpy6KPXQEYybNJkSkO8ImCYzqU4i+effhDYtmvqNXLLM+N64eftOqsM+Qczj1ZnEBjpGCKaBhOWvrtatnYB/33Yd''@;'; put 'put ''undqLyTThyB7/TPT0jMwY96flJJjEY5n5/jwDNKUICAIVAYB1pp169hWy2nZoU0L8i20wN/R4ZXpV3n7MAk7npWtlZFcuHSV39P4cEGO+269Tst36W9c2Dz+3qffYBq9ePtLS1oerrI9sAgIwQws3ro8G5so2N/m3pHX4KwzuiIvT791cXUJ4Gk6xQ8zJpv7KDn7dKo9zFpNjj6XRRAQBPyPAGvk''@;'; put 'put ''WGPZs2tHSpZuD6qfZVVGyz6ZTjLd/zr3D3z3yxxkHDtelcMrvW+fM7rgtmsvA7sK+Jtc8r2QX7Ife/ENXZfHrDR4smOFCAjBrBCe0PoxNjoKo66/AoPPPlML/BHfGN/Knx8YnD9z/aZtmtl85bpNVB7O4duTSGuCgCCgIcABPJefPxhMoGKiow2Zlo01r2wy37V3P76dNguLVqz1mTYzsVacptEd''@;'; put 'put ''RlWKbHRvCoSrQGRkJH6cPgcfffWjBPeEwHUqBDMEhFyVIUaE23HzVRfjQsoF5yDyIySzKuhVbl8OBOK6wxu2bMMvcxZizcatPntoVK4HspcgoC4C7EvI+SwH9OlJRSVqa2ZYPQTw1ARxNpmzOZmDYmaQRnPV+s3VtoJwAvVzzjoDwwb0BZNwbjcQ93m24uQXFODJ/3sbu/enBuScNcFcjq05AkIw''@;'; put 'put ''a46hci3w2+wIKpF21UVDtchKo9+c9Sgg1kywRrOw0IF1m7dppvO1G7cJ0dSjsKRPhkCAfckHEakcROSSiSXftwKhlQsUOHzP8BLNfamHsHzNRo1o7j1wENkncivsRgxZp5pRZPgZXdqhV7dOSKZqbkwqA+kDydrLKTNYezlF7nMVSkudH4VgqiNLn46EfWXOH9QPI0dcojnEB/JG5NOB6LyxkkRz''@;'; put 'put ''/Zbt+HXeH1R6cquYznUuN+mefhDg0o79e3fXtHKskeNF9fsVW0H4Hl1YWIj0zGOaP+Pho+nIPJ5N7k2FGgZ2qkwUHxuDFMoUUp8wYj97NrczNoHGh/vKWTWefPltMDmWJTQQEIIZGnKu1igtZNLoRzfuO6lkWHRUpN8dwKvVSUUOYqJZbDp3YPO2XZj5+59YSWYwvZSNUwRmGYZCCDCZPOesHhqx''@;'; put 'put ''DIZGTg9Q8n3Dm63C+9lr7ubv/Jk1uUwog6nN5cjxT7+dim+mzaS+SN1xPcydQPRBCGYgUDbwOfjm1ZHSejww6gbUrZ1oSEd5I8HPDwU2nbtcbkq0vAe/LVyCxZS0nSt8yCIICAJAEyp1O6hvL3A5Q458DrSpV2RQNQTYrM9BSs/+bzyOUeolWUIHASGYoSPrao+USQ+XD7v/tuvRslljyZVZbST/''@;'; put 'put ''v73zfI7qStP4u2NQzhEhDBJCEogcTDAGG9tg43EoxxnP7Hpqy7sftnb/jN2q/bjhw1ZN7Uxt7YTd8YzHM2MccMAYE2whkEgiCOWcc8Sw+z6HObjBwghJ3X3vPc+tajrQ995zfu9t9dPvecPMd7RC84Z6IBqaWgW18L746pR0dPfO/CB8JwkEhABWU0qKlpnkna0b1kqGZkDDIxdNr1xA0IZ1GsaL''@;'; put 'put ''qmf453//mcaMnhf8PePmDgEKTHdsPeeZ5moQ/d//9eumntyEZgPapZg5H5gH+E4CWDrHhoLtKFNy+ESFegRaPNHa7jsHzv8kgTkSQFWLdatKNHFnm7lHi0fUamTi4RzBRmh3LI2jLNHP//cPLEsUIeZeOg0Fppes4YOxJCclyJs/fFH2PbaTf+gjbC8EyuM2qIWKkXn+2bGT2kquZtblSiI8fJ6O''@;'; put 'put ''BGZMICMtVbZvXmeSd0qKCiRGf2RBWPJH7YwRRv2NSCiq1rJK//Rv/8ml8ahbIzoDoMCMDndfn3WBipwfaAmjV5/bxwzzKFgScbEmIUhLHNVqbBOWz788fVY6uXweBWvwlPNFANf1siV5snvbJtNRDJnPWGJFggqF5XxRjsxxEEeOH8L/+K8/lcu1jbRfZLB77iwUmJ4ziT8GhJioPTsf0hZjL2uX''@;'; put 'put ''jETftF/zB92ZjzJ0+RzFl7/4qlIuXq1Te1yb+UH4ThKIIoHEhHiz/L17+yZzn67eS8RWRrqUThQRBOrU+KGASMt/+ekvzI/f65rFzs1NAhSYbtp9XmaNPyRlxcvlH7SH+bIli017yXk5MA9y3wSsVxOdMmrqGk2sZnnlOSYF3TdJ7hAJArhel2h9xh2b18vDWzYYzyWyjRlfGQn64TsHPM740ftf''@;'; put 'put ''v/mDvPPhIZYkCh9qXxyZAtMXZvL2IFGP7u/eeE22bFjDHuZRNpXNPscwenr75Iz2PT92ssp4NYdHxqI8Op7edQKpmqSzrqxEdm3dJKtLiwTeSiTsQFhy8zcB/O3Bj4Tfaq3LX779HpN6/G3OeRk9Bea8YORBUIj9J68+L89o9x+WD/HG9QAvEf7gT2pP+aaWdm0rV21iNeubWk0vdG+MkqMIOoFY''@;'; put 'put ''vQaLly+V7dqicMv61bJYf5AijpveyuBYHuISST1/PHhIfs5WkMEx7BxnQoE5R4Dc/RsCyHB+af/j2sP8aUF5EXolvmET7UdYtoJ9RkZHTYmjijMXpOJstbZt62AtwWgbJ4Dnx7W2dPEi7X29Wm9rTB3d+Lg4xlYG0NY2POft9z5Wz+UB/ngNoI1nOyUKzNmS437TElio2YPwUrz5oxclf1Eu4zKn''@;'; put 'put ''pRS9F+0SOr4UhjTLs1braZZrAeTK85ektaOLYjN6pvH9mSEqES6zcc1K2bZxrRRpc4ZkXRK3rQqZCe57E39rAsgWh31//c778rbWu2QbyG8hcvoFCkynzR+eyUO8oNzI32qG+ca1q0x7SX65hIf1XI4KO+ELAqJzcGhI6nTpHJnolXprae+SKcbFzQWvE/suWABRmWtE5ZZ1ZVJUsERSU1JMWRpk''@;'; put 'put ''gbMgenAvAyyJoxTRz/7nHa3JWy7MFg+urWc7MwrM2ZLjfvckkJaSLD984WnZ//gjAjHDsiP3RBa1N4SKTSyjN2rM5pnqy3K2ukaFZ4surTNBKGrG8diJEf6CqhEbVpeaskLLl+ZLin7W8SOSotJjxgrDcPCDFB16rtQ2yH/892/kYk0961yGgXMQDkmBGQQrengOsTELtV7mVvmrV56T9NQU4830''@;'; put 'put ''8HA5NCVgl9Gx5DkxOSntunR+8Wq9VOkyek19k3T39tNb4diVgs46JZqos76s1GR/L87NkURN7LMJffRUunFBIJYbtv74yAn51e/fk76BITcmzlnOigAF5qywcaf7IYCi7KXa7u1vfvyyrNK6mZMqWrhkfj8Eo/temyAEMdE/MGgSg85pq8pqFZ0NzW0yNDwS3QHy7PNOICE+TutU5srKFYXqpSw2''@;'; put 'put ''STpZGemmxiGuAybwzTtyTx8QPzZRkaJOO4f9SksQoXMYl8Q9bTJPDI4C0xNmcGMQGWkp8uOXvi97d++41QLOjZkHZ5Z2KR33KH/Uo97MOk0UunClVi6p4Gxp75TRsfHgTNiRmcTGxkhuVoZ6KZfJ6pIiLSu0TPJyssxSKBBg6RvCkptbBPA5R6xlX/+AfHj4mLz70efqtRw0f7/dIsHZzoYABeZs''@;'; put 'put ''qHGfWROI0SXzx3XJ/A1dMk/jkvmsOXplR3g2kCiEDV2E+voHpb65VfsPN5iOQk2t7TI4PEqPtVcM9udxwEOZl5NtknJWFhWqhzJf8rT3d3JSkhEP9FJ6zGARHo71WGLF4mj5aTnw8RFpauvg5zjCdvD76Sgw/W5BH44fS+YrCpfKm6+/KGtXlZg+5ozh8qEhpxmyFZyI40QoBL6g2rp65KrGbiJL''@;'; put 'put ''vUFv3X39MjY+Mc3efCkcBFA6LC012Sx5o3QQPntL8/MkOyNN4ygTbwlKeCkZuhIOC/jjmPBWIhwGn93O7h45Vl6psZZfSqP+SOR14Q8bem2UFJhes4hD40HbuFef2yfPPrnb/GGb0iVXbsEiAMFpb/CKjY6NSa96OVvUG4JMdXg72zp7pKun14hOfpHNzf5IqkvRz9Vi9UYi03u5CkoUPM9SMYkV''@;'; put 'put ''AwgIbHbJm7znxtvPe0NIhopK1MW9VFsvxyvOyFenz0n/IBN4/GxfL4ydAtMLVnB4DPCubN+8Tt7QNpMP6hfhhC6z8ksvuBcEvtSs4MSXG0TnmIrOAf1y69J4zpa2TmlW8Qnh2dM3IAODwybWM7hEZjczMExNTpTM9DRT3BwFzvH5yc/LEZQHS9UbkjLwWQJj3LhKMDvWft4LnzdsVkziusFj3PC3''@;'; put 'put ''Fj/2EENddeGS3i7rj71u/v31s8E9NnYKTI8ZxMXh4I/d4twsLWX0vDyydaP5AwcPCzc3CIR++UF0YsPyOmpvDmqGeo8uqXd290q7LrV39fSZ5/0qPPH/ExOTckNFVBA3FDFP0HqDKUk3hWROVros0sSb3KxMyc3OlJzMdI2ZTDRJGBAOEJP43EBIUkwG8YqYfk74/MAzjR8ReGw3++Niauqaad84''@;'; put 'put ''rPVtkaCDzxKqP9Q2NEurCkoUSw/dz+7PexKYKwEKzLkS5P7zRgCZrHt3bTfF2TPUMwORwc1dAhCbuEE8WeGJL1FcF4jhHFHP59DQiC7lDZsvzl7NdMVjLO2hdBIE6PjklHk/vmS9IkQhHGNUEMSqhzEx4aaATE1JUs9jinokU029WNwjbhLL3YkqMuM1KcfGx1nhYIUknnNzkwCuCfyo+Ojz43Li''@;'; put 'put ''lJYOun7jz2IRnusbxvs/rj/CEJoyqp8ZfA64kUCkCFBgRoo0zzMjAkgAQtzYT157QTZpm0kbKzajnfkmZwhAcMLrYsUnnkNoWfEFETqpX6ao14iySRMqNEfHx81jPMeXLrLecQ8vKEouTU5eM+0xv1YRaz2B+JK+doc3HefAeRcuXCDf+4ub48DjGL3hCx/38XFxEqcdb+JURCYkxBmRiMxteCQT''@;'; put 'put ''9Tn+Hx1xIDLNvnqPY2Kz8wgVkPRIOnNpz2iiuPZRPqi1o9MUPD9WXsXWrjMixzdFkgAFZiRp81wzJgDPzvef2CUv7n/CxJPRmzljdHyjEsAXsF32s2IUz60n1ApSC8uKOjy3wi70Mf4/dMOxIAjtOUIf4zX7OvbBYysQ7zx26HlDj8/HJHA3AigLhmvq2MlKFZfvm5jlO6/Pu+3L10kgkgQoMCNJ''@;'; put 'put ''m+e6LwK2A9BfvvKs9j1eSW/mfdHjm+eLQKhYDD0mv9RDafBxJAjEqee7V2OS33r3Izl4+LjxvEfivDwHCcyGAAXmbKhxn4gSSNKex888/oi89MyTJiaN3syI4ufJSIAEokwAHnJ4Lk9WnZNf/O6A1De1slVjlG3C09+bAAXmvRnxHR4gcMub+bJ6M9esNBmTiJPjRgIkQAJBJoBYSzQseOeDQ/Le''@;'; put 'put ''p0dM3HCQ58u5BYcABWZwbOnETJAosV+9mS+rNzM9LdVkCHOp0gnTc5Ik4BQBeCzhuTx19oL88u0D2g2rmV5Lp64A/0+WAtP/NnRuBt/TAPdCzTR//YX9pkg7ACBbmBsJkAAJ+J0AYn7htUSs5e8/+FQ+OHSUXku/G9XR8VNgOmr4IEwbbfEe2/GQaTe5RLuYIDbTZusGYX6cAwmQgFsEUOYKW3nl''@;'; put 'put ''OVN+CAXRr2vhfG4k4EcCFJh+tBrHfIsAfu0v0q4mLz3zhOx5eKvWHIw3QvPWG/iABEiABDxOwHotO7Rb1VvvHpRPj37FougetxmHd28CFJj3ZsR3+IAAuqOsLyuRHzz/tKxZWcwkIB/YjEMkARIQ0zN+SkN8Dh8/KW+/94kWT+8yxfbJhgT8ToAC0+8W5PhvI4CSRvse3SEvPLVHcrRnM5bNmQR0''@;'; put 'put ''GyI+IQES8AABJPBgSbymrkF+/c4HmsxT/a2uUR4YJodAArMmQIE5a3Tc0asE0KUlf1GOvPLsXtm1daO27IvjsrlXjcVxkYBjBOxy+ODQsBz4+HN5V2+DwyOOUeB0XSBAgemClR2d481l81J57bl9Ztkcnkxmmzt6MXDaJOABAjHacx71e8urzstbfzoodY0tTOLxgF04hPAQoMAMD1ce1UME4uNi''@;'; put 'put ''Zc/OrfLi048Lss0hMq9fv+6hEXIoJEACQSZgl8PrGpvlt9rm8XjFGUHcJTcSCDIBCswgW5dzu0UAy1JZGWny3N5HNUbzYUlNSWZ85i06fEACJBAOAnY5HJ14Dnzyuda0PCb9g0PhOBWPSQKeI0CB6TmTcEDhJICWkwVL8403c+dDG0xB46mpKSYChRM6j00CDhJAsXQkGR4trzQF0xu1puUNDdPh''@;'; put 'put ''RgKuEKDAdMXSnOdtBBCfuVbLGaF+5vqyUtOSDUKTGwmQAAnMhYAtln7uUo387sBHcqb6isZdMiRnLky5rz8JUGD6024c9TwRiNEyIfBkPv/UY1JaVGg6ATERaJ7g8jAk4BAB2zsc3Xf++OEh+fzLCpmY5I9Why4BTvUOAhSYdwDhUzcJoH7mozu2yLNP7pZlSxazULublwFnTQL3TcAm8KALz4ef''@;'; put 'put ''HZWDh4/LgJYg4kYCrhOgwHT9CuD8byOQnpoiTzyyTZ7es1Py83JNSRGUFeFGAiRAAqEEUG8XZYcGNGnnM+3CgySe9s4exnOHQuJjpwlQYDptfk5+OgI243yfdgTau3uH5GZnUWhOB4qvkYCDBGxm+MjomCbwnJZ3PzosjS3trGfp4LXAKX83AQrM7+bD/3WYAL5IcjLTZa8KTXg1F+VkU2g6fD1w''@;'; put 'put ''6m4TwN8DeCzHxyfkq8pzRljW1DfJ16yp6/aFwdnflQAF5l3R8D9I4CYBKzSf3L1dnty1nUKTFwYJOETACstJrTJx6swF+ZN6LC9cqWOzBoeuAU51dgQoMGfHjXs5SOAboQmP5lYjNNERiDGaDl4MnHLgCYQKy9NnqzXG8oig9BBLDgXe9JzgPBGgwJwnkDyMOwTwxZOVniZ7VGTCo7lEk4HQ55x1''@;'; put 'put ''NN25BjjT4BLA5xtF0ie0SDo8lhCW5y9fpbAMrsk5szARoMAME1ge1g0CyDrftW2jaT9Z8GC+ILOUnYHcsD1nGSwCNit8VJN3KtRj+f6nX0h1TS2FZbDMzNlEkAAFZgRh81TBJADvJepoPrxlvXo0d8jKFQWCbh4o2H7jxo1gTpqzIoGAELB1LIeGRzR556wc/Oy4XKptYIxlQOzLaUSPAAVm9Njz''@;'; put 'put ''zAEkgM5A68qKZf+eXeY+KTHRCE3EanIjARLwDgF03sGtp7dPjlWckU+OnJD6plaWG/KOiTgSnxOgwPS5ATl8bxJY8MADUlTwoInR3L5prWRlZhiPCNtQetNeHJUbBBBfidUF3Le0dcjhExV6OykdXb1cbXDjEuAsI0iAAjOCsHkq9wjgiyw3O1N2b98sj27fIgUPLjYQIDSxtM6NBEgg/AQQXwlh''@;'; put 'put ''iZWEK3UNcuhouRyvqJL+QbZ0DD99nsFVAhSYrlqe8444gcSEeNm8dpU8pW0oVxYVSEJCApfPI24FntAlAnYZfHhkVM5drJFPvvhSKs9fMhniLnHgXEkgGgQoMKNBned0mkBsbIwKzEL1am6SzevKJCcr03gz6dV0+rLg5OeJAFYNICzhtezo6jaeyiNfnpbahmbGV84TYx6GBGZCgAJzJpT4HhII''@;'; put 'put ''A4Hv6Rdhji6fb9u4VnY+tEGKC5dKXFwcvZphYM1DBp8AssEhLPFDrb6pRfuEV8mhY+W6DD7EcJTgm58z9CABCkwPGoVDco9AnBZ2XlVcaEodbVm/2ng1QQFdgljqyL3rgTOeGYHQpJ3+gSE5e/GyHD5+UjvuXJUx7RnOjQRIIHoEKDCjx55nJoFvEcCyXmZ6qmzSWM1Htm6UUo3VTE5KMskJEJtM''@;'; put 'put ''DPoWMr7gIAFbuxL9wesbW8wy+IlTZ6W9q4f1Kx28HjhlbxKgwPSmXTgqEpCFutyHrHMsoW9ZXybLtFMQPJ0QmsiGpdjkReISAfz4whI4tq6eXjl97qIcO1kl1VdqNWlnyiUUnCsJ+IIABaYvzMRBuk4gThODykqKZOvGNbJpzSrJy82+FW/GIu6uXx3Bnb8VlVgKHxwalktX61VUVkrV+cvSp7GV''@;'; put 'put ''DB8Jru05M/8ToMD0vw05A4cI4Is2JSnRiE0UcF+7qtjEa2LJEMkNFJsOXQwBnarNAsc1PTI6KnWNrVJedU4qqi5Ia2cXe4MH1O6cVvAIUGAGz6ackSME4N1JS0mSNSuLZeuGNbK6dIVkZ6aLFZvw7nAZ3ZGLwefTDBWV45qc09jSJhVnL0jFmQuaEd4mU/rjiRsJkIC/CFBg+steHC0JTEsAYjM9''@;'; put 'put ''NUU9m8tNbc3VupyODkIxMTEmZpMJQtNi44tRJGCXv3E/Nj4uTS3tJq7y1NlqqW1slskpisoomoenJoE5E6DAnDNCHoAEvEXALqOXriiQDWWluoxeIvmLsiU+Pt7ErLH0kbfs5dJo4F3HDaJyeGREvZOtGk95SSovXDa1KykqXboaONegE6DADLqFOT/nCSTEx0nh0nxZp0JzfVmJLM3PkzT1dkKI''@;'; put 'put ''MiPd+csjrABwjUFQIvsb8cEoen61vkmqLlySM9VXpLW9S65pVQRuJEACwSNAgRk8m3JGJHBXAviyz8vJMvU1N6wplZLCZZoklGG8mxAAuDF28674+B8zIGC9lLjH0nen1qa8VNtglr+v1DVKT28/WzbOgCPfQgJ+J0CB6XcLcvwkMAcCSYkJUrBksSYIFZlbgdbaRCwnPE4QmlZ0zuEU3DXgBEJj''@;'; put 'put ''KXG99PYPmCSdcxdrtEZlndQ3t7KrTsCvAU6PBKYjQIE5HRW+RgIOEnhA4+Iy0lJl+bIlJlmoWL2bDy7OlXR9Dd4oKzjp4XTw4giZMq4FKyohKFGfsqW9Uy6rlxJFz6/WN0vfwCC9lCHM+JAEXCRAgemi1TlnEpgBAQjOLC17VKjdhFYVL5cVBUuN4ExNSZZY7SgUKjjxmFvwCCCG0opJ3CNmF4Ky''@;'; put 'put ''raNLrmgsJQqfI+O7s7uPNViDZ37OiATmRIACc074uDMJuEMAghPicmn+IikuXGo8nVhSz8pIk8SEBJM0hLqbNkudNTj9dW1YMQkhCS8ltomJCeONhIfyakOz1NQ1mWzvnn71UKr3khsJkAAJ3I0ABebdyPB1EiCBexJAhnp2ZoYs1yx1LK0jnjMvN0sLwCdLgopOiBV4NyE6ITjp6bwn0oi84U4x''@;'; put 'put ''ieeTk5MyNDyifb77pKm1QwVlk/FOtnV0y8jYOG0XEcvwJCQQHAIUmMGxJWdCAlEnAKGSlBhv2lcuW5JnBCc8nrlZmaY0UrK2uUQCEcSm9XZSeIbPbLCHFZM2dhK8xzW7e3h0zIjJ5rYOaWhuM4k5EJMoJfQ1vZPhMwqPTAKOEKDAdMTQnCYJRJNAfFysZKanaomkbI3jXCRL8nLU05ltWlumJCdJ''@;'; put 'put ''ghaBh/DEFhrbCTGEzd6bJ/znNgJWROLeikg8BjN4JYdHRmVA4yY7u3tNMg4EZasKSTyHx/I642dv48knJEAC80OAAnN+OPIoJEAC90kAIigxId6URUJbS9wW6/I6vJ2LsrM03jNJ63PGSZwmFEE4WdEEAYobBJRdcg+qAMWc7YZwg9AbXrcicnxiUkbHxjRecsh4Jds6u6S9s0c6e3qlW+tODg6N''@;'; put 'put ''sJ+3Bcl7EiCBiBCgwIwIZp6EBEjgfgjEag/1m+IzWT2faZKtxeCzNZkIZZTS01KMKE1U8QkBivei5zrEV6ggs0IU57VC1N7bsURSmIaODefHeO09/g83+xpex9gQu3rt2jX1RE7JmIpItFccGBzWWpOD0t7VLT19A0ZEwkMJEQmhGck5mQnwHxIgARKYhgAF5jRQ+BIJkIC3CSzU5XQkGOGGzPZU''@;'; put 'put ''XWZPSU785rHGeiLeEyIV74EXFPvExcbIAwu0daF6RO1ysvUKWvEZej+dWMP/W0FoKVnxaAUi7u178H57g2DEkvS1qWvGo4je2xMqHkc1iQZdbxAXiWVrCEbcQzTi8Yi+Pqr/Pz4xZUSnPS/vSYAESMCrBCgwvWoZjosESGBeCCxcuMCIy9iYhcbTiXsIzjiNC41diNcW3hSqRqQmmQx4/D/EaXJS''@;'; put 'put ''wm1jwGspKlzhKYQAvKFeRgjJGzf+T8Xh6E2hqGJxSOMecYNAnND3jmu5nyn1REJM4jY5NSVTt0TmlJb8YR3R20DzCQmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQ''@;'; put 'put ''AAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfs''@;'; put 'put ''wdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4i+ZHtw4AAADdSURBVAAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAF''@;'; put 'put ''prfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8J/D97oVzdCcK8fgAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=select-library-png; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAAdsAAAG7CAYAAACLjj9uAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQecVNW9x0+7907dQhNLYmLLS4wmStmOYIslGk0sicanRo0JILALqIltLXRYECtJjGkmKinGhiCwC1soorFEk5iosWEBtszutFvOee8uDM7OzrLT596Z/37ey8rOOf/y/Z+Z39x7T8EIfoAA''@;'; put 'put ''EAACQAAIAIGsEsBZtQ7GgQAQAAJAAAgAAQRiC4MACAABIAAEgECWCYDYZhkwmAcCQAAIAAEgAGILYwAIAAEgAASAQJYJpC229zVP9Zgxjo4JtMur82vH/yyQ5fjBfJ4IPL6v7rHuL5pyf1+eQgK3RUYg8tkzdfL9foyReKjtB96ran/ZW2QYIF2bEBggtg83X+EIGOIPCvZ8HSOKMSYYIRxp0/8b''@;'; put 'put ''7/u3+aL5GkYYMSq7zVf6Xx7+R+xtsu/X8O2HaiESNmEGmfbPABOp2MtU3ilkknBtIoUxO8QWyGY5p4CpoLqkPV5j3qRpv18Tpqsbql8gMcChEJF/7/2973XzlxBYGOb/EkxoiPted1J+/pVTfhVK2CE0BAI5IDDgHXl/6yXlSO79d8jwjcyBb3ABBIAAEMgoAZm4exzcfcTV1as7M2oYjAGBNAkM''@;'; put 'put ''ENtVO84ZJTj+d0DvKUvTLnQHAkAACOScgEScPRhrR06v2LAn587BIRA4AIEBYvtA+/ljkMTfDOrdpUANCAABIGA3AhJxdGscHdlQvRaubO1WvAKPd5DYYln8O6B1lRR43pAeEAACBUgAxLYAi1ogKQ0SWyKjt/xaZ/8MY/gBAkAACNiJAIitnapVXLHGEVv8tl/b4y4uDHuz5ULXCGZSsrmbEyIN''@;'; put 'put ''oYXMmdoCcZ5sf2h/YAKMKC6zhcG1MCWSMhyvvfVQg8O1K4bXI+ySyVXn4f4le2bfyH8n2v+zWcOJ9tjfLt505/2fT+bqB0YU53BWTbGlGjtiat0zXcO1hdeBQC4JDBTbV84fI+nSB77wJ3EFRwjBBSIXC52/SBDSdSUsJE6Exknu1gXE0JGT8K0ZoQPGqTn35pHsNw1/dEw2WWUqO4M5rZkadKay''@;'; put 'put ''dAihIe6xDFWjRGqR69zTeUOnzM10uo+dFOSpsU8n8H19NWPoz4Z4ddAMOuS4FIgwGUvHIkyfoYTJ8cIDsc1A0cBEVggMElvFcH7SHfowrjMhOHeotHTalBabSEpWmIFRIAAE8kRgUVuNVwj1A5m64s4rAbHNU2HA7bAEkhZb3ucsmfuNdQMuIIb1Ag2AABAAAhkgsHJrRYlfNd5TmDvuigkQ2wxA''@;'; put 'put ''BhNZIQBimxWsYBQIAIFsENh7ZRv+QKbuoa5se6jGvgjPbLNBH2ymQwDENh160BcIAIGcEth3G/lDmbq88RxLxNGjK+Ev1J/Q0p3TwMAZEBiGAIgtDBEgAARsQwDE1jalgkBjCIDYwpAAAkDANgRAbG1TKggUxBbGABAAAnYlcF/zZE8v8++E28h2rWDxxp3sla3B+5ylMBu5eAcMZA4E8kkgEbGV''@;'; put 'put ''mXH4tePX9+QzTvANBGIJgNjCmAACQMA2BPaKbWCnTJ1DTpACsbVNOYsqUBDboio3JAsE7E1g7zNbzRTbuHuLmbORQWztXeNCjR7EtlArC3kBgQIkAGJbgEUtkpRAbIuk0JAmECgEAuYOUgFNfHiAK9tumRlfgGe2hVDtwsoBxLaw6gnZAIGCJrBwx7hSFKQfgNgWdJkLMjkQ24IsKyQFBAqTwMId''@;'; put 'put ''p5aioO+AYqsr4S/CDlKFWX87ZzVIbIk69Hm2QnBY+mPnakPsQMDmBEyxxUHfB9LQE6S6QWxtXuQCDT+pw+NBbAt0FEBaQMAmBEBsbVIoCHMQgQFiu/KlM0crhvMdv7Yn7tncILYwgoAAEMgngeXNk8tUFngfrmzzWQXwnQoBENtUqEEfIAAE8kIAxDYv2MFpBgiA2GYAIpgAAkAgNwQWtNaWE6S+''@;'; put 'put ''B1e2ueENXjJHII7YOt72a51xd2eB28iZAw+WgAAQSJ4AiG3yzKCHNQiA2FqjDhAFEAACCRBIRGypxo6YWvdMVwLmoAkQyBkBENucoQZHQAAIpEugqaNqhGYY7x7oNjKIbbqUoX82CIDYZoMq2AQCQCArBEBss4IVjOaAAIhtDiCDCyAABDJDAMQ2MxzBSu4JgNjmnjl4BAJAIEUCw4ktI0o30yR4''@;'; put 'put ''ZpsiX+iWPQKw9Cd7bMEyEAACGSYAYpthoGAuZwRAbHOGGhwBASCQLgEQ23QJQv98EQCxzRd58AsEgEDSBIZb+gO3kZNGCh1yRADENkegwQ0QAALpEwCxTZ8hWMgPARDb/HAHr0AACKRAYLi9keHKNgWo0CUnBEBsc4IZnAABIJAJAiC2maAINvJBAMQ2H9TBJxAAAikRGO48W7iyTQkrdMoBARDb''@;'; put 'put ''HEAGF0AACGSGAIhtZjiCldwTALHNPXPwCASAQIoE4DZyiuCgW94JgNjmvQQQABAAAokSALFNlBS0sxqBeGL7X7+2xxUvUCE4533OkrnfWOe3WiIQDxAAAoVPAJb+FH6NCzVDENtCrSzkBQQKkEACO0h1MU06Es6zLcDi2zwlEFubFxDCBwLFRMAUW9Uw3pWp0xMvb0YUENtiGhA2yhWe2dqoWBAq''@;'; put 'put ''ECh2AkubJ4/SWeCdA4mtoahH1J/Q0l3srCB/axEYILardpwzCgnJfGbrhme21ioURAMEgABCKzfXjQ7g8NsgtjAa7EYgabE1JHro9RNbPrZbohAvEAAC9iewYuspB4W13v9IQ95GljsNRTsSrmztX+tCyyCO2LJ3/Fpn3OchQgguU8/Vugg0myCECDPzt65JmBKOdSwG2IuGZb4eD57BiYj+OxN4''@;'; put 'put ''wL8TAR7tdyg/FEv9/g3tsxjJUDHta3sg3xRzbIi9sUf/94Cchdb/Oo/JMZGcYttEx2ocIL5ILNG/k/UXySvSj+7LI9pOdE5UGrpmRpy+w8UTqVVsvcx/J8phf+w4/rgbLoZEXo/lFMsr0bpH84sen0ONgdj6m7WObWvoQ78XE8ktmTaUDa7//vdGVP0jPA40Xky/aoxzrCKdMF01BNYkIh2v8/Bf''@;'; put 'put ''GJEd8WJkRO5UmDji2vHre5LJAdoCgWwTGPAmvXfb+SMZQe8EtE7vUI650DUuuGG+jhGO9B9SZLOdQPbs788twy5E1JeJaGzmn9PwaZqK/poSMR35W/Trsa+llWF0PmkZSrGzFYde0t8XU8g9l3mnnE9KHcWAgRz5h+j/MUFJ1BF3aaL5mim2cGWbwnCCLlknEEdsxdsBrask657BARAAAkAgwwRA''@;'; put 'put ''bDMMFMxljACIbcZQgiEgAATyTcAUW6bJR8E623xXAvzHEhi09Ec2lLcCWteQt5EBIRAAAkDAqgQYUToJNo6ZXrFhj1VjhLiKk8AAsb1v+1ljKVbePNAz2+LEBFkDASBgBwLmphYKU465dvxTu+0QL8RYPAQGiO09L517iFO43vOFP6LFgwAyBQJAoFAImGJLsHE0XNkWSkULJ48BYnt/6yXlsuTa''@;'; put 'put ''iAzjYC6M/hnH5gxZbE483v8TmdaKzcnIOMw+HqMagSGJOIwxHxGkGHivmajpttF2Y2dWpjSJMeWqiIHzeFO2k0zHgUyH7jl8bEPPBk6UYprzWhNNJRk8SbYdyCCBvIfHmmQEiTVPY7Z5lIPk6pW6z/iFHfq9OhDqvqnD/XHvrc/e2cTmMiHe/2+MCRVIZwGy86Ch+DHiQJI28j2EEUci+nNoYI/I''@;'; put 'put ''yoiA3vOqgpzfmzZldV9iNYFWQCA3BAa9b3/zymXu3s4Q9o5wCPO3GYZXdfS/OYIjnf2//WqXKA+7he4Mlwpm/KtP/aR0qHCduPyLP6564r+ZTEcIhO9Zc6Y8lM2xh3vEx+/27c9txllrwpn0D7aAQKERWPnsmUpiOR0V0+w//f8233MXHbs6donssCZXbf72wV34g3/J1Bl3nohC3bsJL5kQFMYn''@;'; put 'put ''pjHzc8e9y69ddNFqI/I54HUehLsUf//73RfepTVOadGHdQwNgECOCST3JTkmOFOYQ1r4gz71k7Kh4lZlqexGWGCe47KCOyBgDwKL2mq8nIffV5g77hd2B/N2hiV2ZP0JT8Bex/YoKUQ5BIE0xfZ0d0grfb9P/bR8KMI4jMvrp8Cm4DACgQAQGExg4fPjSoWC31OYO+7afhcr6eZhfgQs5YHRY3cC''@;'; put 'put ''aYntkldOd5fqZR/2hYe+jQxia/chAvEDgewRMMUWOfB7Mo0vtk5W2mMIeuT0ir/AUp7slQEs54BAWmL7m1dOd4dAbHNQJnABBAqTwHBXtk5W6jMEPQLEtjDrX0xZZUBsy3f2hT8ecntHuLItpuEEuQKB5AgkILY9hIijYN1sclyhtfUIgNharyYQERAoGgIgtkVT6qJPFMS26IcAAAAC+SOwvHly''@;'; put 'put ''WZj1vXugZ7ZwZZu/+oDnzBEAsc0cS7AEBIBAkgRAbJMEBs1tSwDE1ralg8CBgP0J7BVb/3sydcXd1MKcjQxXtvavM2QwYBvG5HGYs5HD+siPesM7hzwlCCZIJc8VegCBYiEAYlsslYY8076yBbGFQQQEgECqBBa01pZjFH4XrmxTJQj97EIAxNYulYI4gUABEgCxLcCiQkpxCYDYwsAAAkAgbwSa''@;'; put 'put ''OqpGqIb+X7iyzVsJwHGOCIDY5gg0uAECQGAwARBbGBXFQgDEtlgqDXkCAQsSGF5svT2EYNhByoK1g5CSIwBimxwvaA0EgEAGCczfNnEkUcU7Q99GBrHNIG4wlUcCaYntfa9f6JFDbCcs/cljBcE1ELAxgUTE1hASnPpj4xpD6HsJpC22Uoh8CAcRwHACAkAgFQKJiC3cRk6FLPSxGgEQW6tVBOIB''@;'; put 'put ''AkVEYGnzuFE6I2/DbeQiKnqRpgpiW6SFh7SBgBUIJHJlC7eRrVApiCFdAiC26RKE/kAACKRMIJErWxDblPFCRwsRALG1UDEgFCBQbARAbIut4sWbL4ht8dYeMgcCeSewT2zfkqmrJF4wLlbSrQt21PSKv+zJe7AQABBIg0BaYmue+hPSy3fCbOQ0KgBdgUARE9j7zJa/PdTh8SC2RTw4Cix1ENsC''@;'; put 'put ''KyikAwTsRADE1k7VgljTIQBimw496AsEgEBaBEBs08IHnW1EAMTWRsWKF2pTR5VT455yig2JEnlQPSWuCm3f3xnhg17XVSOtMRAbU7wYBrXBg+PIVBkMQUSsLYOr/X9jMu3/rfO9bUw2kbaRv/W3IxwLxgjWGcdqYM+0KS19mYoP7AwkAGILI6JYCKT1QQvPbPM/TJZvOfm2oNYz08E85fmPprAi''@;'; put 'put ''0IyQ3+s4+JefuqQ5jceuVgsrO2tkA2JrjTpAFNknAGKbfcZZ9XDvtnNWqobvuqw6KWLjpY7DfutV1KsvArHNyigwxRaH+dsKc8Ns5KwQBqNWIQBia5VKpBjHA9u/dXdQ756RYnfoNgyBcvlzD6nI9eNrx/9MA1iZJwBim3mmYNGaBEBsrVmXhKMCsU0YVUoNS5SDf26IkmkgtinhG7YTiO2wiKBB''@;'; put 'put ''gRAAsbV5Ie9/4byVIa0LbiNnqY5eeewD14x/bGqWzBe9WRDboh8CRQMAxNbmpQaxzW4BPdLoe3444Y9wmz5LmEFsswQWzFqOAIit5UqSXEDDiS1BLIQx1QXi+5a5YGH+RHmJHQMxS2f6/zloOU1yUVquNUYIY4wRFoIzgQznUBG62Ii7fzTxL7Msl0GBBARiWyCFhDSGJQBiOywiazc40DNbc+kK''@;'; put 'put ''w55zZtduaLZ2FvmLblnb5EpMxJahxbZ8xY8mPlGfvwgL2zOIbWHXF7L7jACIrc1Hw4HEVgjOdcG/ckNt+79snmbWwl/RVvMlTtg/h3LgpGXLf1zx14asBVDkhhMR24CuHtlQvbazyFFB+jYnAGJr8wI+sP28FUG9a+ZQaXCdHztnUusbNk8za+Eva609BlM65JcRh1TaNHXCk7OzFkCRGx5ObB3M''@;'; put 'put ''2x3SNRDbIh8nhZA+iK3Nqzjc0h8d83HXV7W+ZPM0sxY+iG3W0CZkeFixlbxdIU07Cq5sE8IJjSxMAMTWwsVJJLThJkgZQjtubk3H3xOxVYxtFrXVfEk6wG1khZUumzbxyTnFyCYXOYPY5oIy+LACARBbK1QhjRhAbNOAhxBa2jH5fwgS/xjKCohtenyH6w1iOxwheL1QCIDY2rySILbpFXD5lklf''@;'; put 'put ''FgIP+UwbxDY9vsP1BrEdjhC8XigEQGxtXslV2867x290TR8qDbiNfOACL91c9xXCyOtDXtmS0mXTKuE2crbeJiC22SILdq1GAMTWahVJMp5V2759j9/YM6TYqlz/6o217UOKSZLuCq75kvbJX6VYvAa3kfNTWhDb/HAHr7knAGKbe+YZ9Qhimx7Opo5JxyGEXwWxTY9jqr1BbFMlB/3sRgDE1m4V''@;'; put 'put ''i4kXxDa9Ai7ZWnc85eQVENv0OKbau6mjakRY194Z6jxbByz9SRUt9LMYARBbixUk2XBAbJMlNrD9stbar2FKXx7KCmxqkR7f4XrDle1whOD1QiEAYmvzSoLYplfA4a5sYbvG9PgO1xvEdjhC8HqhEACxtXklQWzTKyCIbXr80u0Nt5HTJQj97UIAxNYulRoizuHW2cJs5AMXeLjZyC4Gp/5k8y0C''@;'; put 'put ''YptNumDbSgRAbK1UjRRiAbFNAVpUl6a2mmMRYUNuZwm3kdPjO1xvENvhCMHrhUIAxNbmlRxObGFTi/SubEFss/sGAbHNLl+wbh0CILbWqUVKkQx36g9C4viG6s1DbtqQktMC6jTcbWQQ2+wWG8Q2u3zBunUIgNhapxYpRXL/9nOXh/SeWUN1hvNsD4x1uO0aHVJ509QJT8B5timNzuE7gdgOzwha''@;'; put 'put ''FAYBEFub1/GBbec0BQ1ffbw0DK5rmJOvw+HxQxd5uCtbOIggu28QENvs8gXr1iEAYmudWqQUyX1bz1ka5r64V14G18Iy9f6vykWLadyzz0OYOuLWXSI61jgT8QKJvGb+jn59qPYpJRPTKdbXgWwyEj+n+H38/X/WeVhwrtRoPPTHoWwr1Lt4WsXTN2QiH7AxmACILYyKYiEAYmvzSt+37axFYcN/''@;'; put 'put ''/VBpECwhgpjNs8xe+BzpiAttSAcycS+YXvnsT7MXQXFb3ie2byvMXRqPBGzXWNzjo5CyB7G1eTVXbjtzoW4E4MorS3WUqGPedRVrb86S+aI3C2Jb9EOgaACA2Nq81CC22S0gJY47Z1auvTW7XorXOoht8da+2DIHsbV5xe/bevbSMO+D2bJZqiPFyu0zq9Y1Zsl80ZsFsS36IVA0AEBsbV7qVdu/''@;'; put 'put ''c79f3/1jm6dh2fAJke+YVfn8bZYN0OaBgdjavIAQfsIEQGwTRmXNhr986bJHukPvXWLN6OwflUy9S6ZXPD3kBDT7Z5jfDEBs88sfvOeOAIht7lhnxdN9289dGtQ6Z2bFeJEb1Yxgr0PyLquvaplX5Ciylj6IbdbQgmGLEQCxtVhBkg3n8ccvpG+M3iWVKOH+WvrCStx1ssnaLfb2Jk/WXcbH9nn0''@;'; put 'put ''iy5abRQ7j2zlD2KbLbJg12oEQGytVhGIBwgUEQEQ2yIqdpGnCmJb5AMA0gcC+SQAYptP+uA7lwRAbHNJG3wBASAwgACILQyIYiEAYlsslYY8gYAFCYDYWrAoEFJWCKQttmF95Ee94Z3eoaLDYVxeP6WlOyvRg1EgAARsTQDE1tblg+CTIABimwQsaAoEgEBmCYDYZpYnWLMuARBb69YGIgMCBU8A''@;'; put 'put ''xLbgSwwJ7iOQdbFVZansxvHre4A4EAACQCCWAIgtjIliIQBiWyyVhjyBgAUJgNhasCgQUlYIgNhmBSsYBQJAIBECILaJUII2hUAAxLYQqgg5AAGbEtgrturbCvOUxkvBIXm7Qpp2VEP12k6bpghhA4F+AiC2MBCAABDIGwEQ27yhB8c5JgBim2Pg4A4IAIHPCIDYwmgoFgIgtsVSacgTCFiQQCJi''@;'; put 'put ''i0LiyKl1z3RZMHwICQgkTADENmFU0BAIAIFMEwCxzTRRsGdVAiC2Vq0MxAUEioAAiG0RFBlS7CcAYgsDAQgAgbwRALHNG3pwnGMCILY5Bg7ugAAQ+IwAiC2MhmIhAGJbLJWGPIGABQmA2FqwKBBSVgiA2GYFKxgFAkAgEQIgtolQgjaFQADEthCqCDkAAZsSWNBaW45E8J0D7SAFS39sWlwIewAB''@;'; put 'put ''EFsYEEAACOSNAIht3tCD4xwTALHNMXBwBwSAwGcEQGxhNBQLARDbYqk05AkELEjAfGar6upbMvOUxQvPPIgAbiNbsHAQUtIEQGyTRgYdgAAQyBSBRMQWTv3JFG2wk08CILb5pA++gUCREwCxLfIBUETpg9gWUbEh1cEEVm49s4RpvZTLClENJhyGX/Riod9Q294LvLJPAMQ2+4zBgzUIgNhaow4Q''@;'; put 'put ''RY4IPNB++hjElK8KjC+gmNb4Qp8ezpHOorYuFQghPsL5hY+ccsm/e4IfvEwRXa0K450ZlWt8OQqzaNyA2BZNqYs+0ayLLQ7j8vopLd1FTxoA5I1AY/NkNkJhxxGqzPaFPj5DorKbEtmRaEA6V4MOWrITY/J7QvD90yY++3GifaHdgQmA2MIIKRYCILbFUukizNMU2TKZnhAwfHdSTGol6nCni0Ei''@;'; put 'put ''zg8RMn6DdHTvdbXP70zXXrH3B7Et9hFQPPmD2BZPrYsq06U7Jo+iKp2ncf9ljCjOeMlzYWgG1zSBuIEQEv3/hzAmmFKCmUwwNW8vx/3Rufa2g7l/rLDO5mvHv6gVFdwMJgtim0GYYMrSBEBsLV0eCC4VAstbTzmCE+0xjPH42P5CCNGn7Xnfzcr+GtT61hHD8cJNp277JLrd0uZxo8JYP06RPZOJ''@;'; put 'put ''YBcLJI7BGMd9r0jE/Qw39Btn1qz7eyqxFnsfENtiHwHFkz+IbfHUuigyXdo6uRYT47cYky9EJ8yFoUvE2RxSux8Mcve6xiktfYkAWbVjnBTQvIeGdf+tAolvK9RdGttPM0J+Fy19REP6HQ3VGz9MxC602UsAxBZGQrEQALEtlkoXQZ53d0w5RQjyMMf656LTDWm+lwlVfurylW+ccdaacKoozK0F''@;'; put 'put ''GeFXqnrgJ06pdFSsHdXw90jY9XNFkhZOr9iwJ1U/xdQPxLaYql3cuYLYFnf9Cyb7pe2TJgW1zt+75ZGHRpIyuKZS6rgHh/hdmZwRv3j75LFM53cZXP8+JZISCzGk9b7mlcfM2FPi7Wg8drVaMJCzkAiIbRaggklLEgCxtWRZIKhkCCzfMvkLYS3wnMycX4r004xwgAvjbnffqNvTuZo9UBxL2iee''@;'; put 'put ''rBt8oUQdJ8ROpjK4FlZoyTpMjDv2BLSXG6e06MnkVCxtQWyLpdKQJ4gtjAFbEzB3gBJC/7Mh1FOirmjDlEjfa6je9JdcJLe4teqbjCrLEeJHmrOZo30KwTlC9A+c8VvmVmx+Jxfx2MkHiK2dqgWxpkMAxDYdetA3rwSEQLipfVITwmhmZLYwF7pGBLmpobZ1SS6DW/nsmYrfs/smgfRpDlYyItY3''@;'; put 'put ''RnQXIWRxSA+ugq0gP6OTiNhyLh09veIv8Aw8lwMafGWcQNpiq+ojPvaFP/IMFRnsIJXxmoHBfQTuaTvtEA1rbyAs9s8QFgI90Vu26+LGY9/Iy7PSxc0TxiJKZguMpkrU4YotFuf6fzGhd3K347G5X1vnL/ZigtgW+wgonvxBbIun1gWX6d1bTr1N5+ptkavakO7rZNR5yvU1HS/nO9llrbXH+I3u''@;'; put 'put ''+zzyyFNjYxGCG4bgWyXsmHvohyO2X3TRanNTjaL8AbEtyrIXZdIgtkVZdvsn3dTxjREyZVtUo++YSDaaoTXdUNcx2yrZPf74hfSdQ94/m2JpMcFk/+StSHw6Dwcl4nqaCH7HzJqWotwUY/62iSNJ2PjPgQ6Ph9vIVhnREEc6BEBs06EHffNGYPmWyVcIIR7+TGjD78tCqqif1PpR3oIawvHy5sll''@;'; put 'put ''OlNvF5hfE2/rSCzIJ5hIi0pD6gNXTmkJWS3+bMZjB7E1vzT5R++SAmNGM9ITLCUyoiaTsC5zt673EM2nvYuQDjPOszlS7G8bxNb+NSy6DMxdnQQ6/OGAuufSSPIC4ftmV7dMtzKMee3jv+okJTcIrl8ab/tHr3zwS0Gts2ns+6WPFsutZSuLbf9Zx5LzK5KQr/Yqoyo6g+8frBp9I7m5lTYWiGIF''@;'; put 'put ''OZjX71XGfCiE+lpfuGsdIupz145/+j0rj0OILT8EQGzzwx28pkHAPGSAhMULCKP+LRnN7RIxIt+9vm7L02mYzUnXRoGIs73mJCx4E6Py12OdmttKKrRkrUaCNzRMbH49J0Hl0YkVxfbe7eccSxGZRbF8mk/debB5KEUiiMx9t7nQwxJ17qBIukUTPdsaqrcEE+kLbQqfAIht4de44DK8u+O0UzQR''@;'; put 'put ''WEMwk8zkJOJ4WSBykp0Od29snuxwSoGLQ1rf7V5l9OGxRVKNgE+h7l/qQl4wt2bdpwVXxH0JWUVsV+04xxXS1QqJOqf7QjtPlamzJB3m5hK0gNbziVcZvVx3Satg5nk6NAujL4htYdSxqLJYseXUei60pqikf3vYB2OutOOtV1NsREi9DmMyw8G85YOudDl/n1HncoLpQ3b6MpHogLSC2C7fcvKJ''@;'; put 'put ''BEkLQ3p39VBnHhtC1wyuBnQeDplHMyKECMVMokR2mM/hhzqO0dzUhGBpi8Ska6dPXFvwdyoSrXsxtgOxLcaq2zzne7Z+49caD/1vJA0h0NTZNZsesHNai9urjwypvgedUukkSgbftlT1wBtO5r3GIfe8UEjn5+ZTbBtfv1Au83WfgYRYypF2dOz4Mbfc1Hn4n5jQjbqubuE88CZj7p2qEQ66VSY0''@;'; put 'put ''6nAgWTvIMPRjFNk7zjDUixiRv0CJNOi2c0jv63TS0lk91ZMeacSN3M5jFWJPjQCIbWrcoFeeCJi3+whyPtGrfnLafrFFxjmzq9ss/7x2OGTm81xl87hTKVWWUcyOjTeJihHpCYTETddVbPgHxv2n3dv6J19ia7L2ttfcbSDjqtgZ4poR6iOYNYeMvntvOemVdYkCNm06Wk88TWalDVyoUyI7m1UV''@;'; put 'put ''AAAgAElEQVSPOaL7O5n3J9zfd++0BI94TNQ3tLM+ARBb69cIIowi8FDbuV5VxpuCevcJ+8WW46rZtS1bCwVUY/NkprDg/wqhLY13a1k1Ar0Sdq5yCj5/al1bl53zzpfY3rP1zDmq0bcIY0Ki+WlG8In//wbTGKrd/lojRildgZqi6+o4+YsOwpbrInxOtP3+OVRIPC8bnstmTFqzy861g9iTIwBi''@;'; put 'put ''mxwvaJ1nAqbY6or0vF/bXREJhRN0+pzKTc/nObSMu5+/uW40Fv6ZCJPpCht8aD0S+CNMyJ0UK4/Y9XluPsR2efvJjboI3Rh9PGJQ9+2WsGNqqVN9IlO36c0vTW7ZuLJEPqjRr+06JHqAOGhpW5j3zayv2vhSxgcOGLQkARBbS5YFghqKgHkbmWL3477wR2dH2hhCmzm3pmNloVJb2l59eEDtfNAt''@;'; put 'put ''jz4NY9K/oUL0T0jzvexio2d2q2qH3TZWyLXYLu845Tydh39DCfVGGPapu9+nhF1z06RX1mZjDK1om/IlHRuPEowHLPXCiP4LCfrd+prn8769aDbyBpsDCYDYwoiwFYGHmyc7VM+In/m1PZdFAidIvm1W9fN32CqRFIJd0Fo5WQh9kUwdJ8bOftWMUEAizieRwHc11NpnfW4uxfbebacc0xvuXacw''@;'; put 'put ''5/6lVn3q7vfccsl5s6u3/C2FkiTcpamj6lCK3Q8aQvtmdCcnK31D4331nRWT1sPEqYRx2rIhiK0ty1bcQd+99bRbDK7uF1cH8z76qdt5eeOxq/Ny0k8uq2Ee5Rf0dl6iGoF5bnnEwbG+da4GJaSswowunFW54ZNcxpaKr1yJrbmu2S1pj1PC9j9DVY1ApyDkez+p2ZbwJKhUcoz0WbL2dLfh7n5E''@;'; put 'put ''Js5vRdtR9cBup1x6dVfF+qdSfU6cTlzQNzcEQGxzwxm8ZJDAPS+cW6NpPW0Rk2Gt70M3HnNCMU04adwxzuX0k1sZc14fb9ayEOJDIUij7HP+dsZZa8IZxJ9RU7kSW3MtbUjzNSvMvX+zCpWH5t5Yu21pRhMaxtjCHeNKcUh+RCLy/scgZhenVN4Z0rtvqK9q+UUu4wFfuSMAYps71uApQwTu237W''@;'; put 'put ''WH+46wVG5cNMk+bGAUiwc2bXNj+bIRe2MbO8tfYIv+h9yMXKJscGbR7lF9b9bzho+bSG2g2tVkwqF2Lb1FHlNDhdTQndL3CcG+sNJL59Q217b665LGqr8eqG/16nVLp/rbgZQ1jv6ypxHHz5tIlPP5XrmMBf9gmA2GafMXjIMAHzVqpWGnwUY3FexDRG9A/11RsvybArW5gzD2boCbHTCGKLCWHH''@;'; put 'put ''xga97yi/ZwzEb5lT3fJPKyWVC7FdufXMSiH0pwyhjjJz14xgH8POc2fXbmrOFwvzJKF3D9l5Bcbogej1uOY+3xJx3H3Yh2NuteOOaPniaQe/ILZ2qBLEOIjA0vbJFxAsVkdecEnl7wlNr/5x9dMfFiuuBa215YgHZgssfuRgJSNjOZhH+SFMFypG6NdWWZ+bbbE1l994JON3hJCLIzy4MDb0qeyb''@;'; put 'put ''jRY4zvCOluOnUkxud0ql/V8EzB/zQAOFuhtxMNgEm18Uzrs5LbG97/ULPUqIfuQLf+QZCgkO4/L6KS3dhYMMMrECAfNWnEyU1wQy9s8slYiy4LrKdT+1Qnz5jGFRW80hEqa3GUK7nBJZiY3F4Oo7FEm3M5/70Xw/z8222N7TdtohksPbElD39G/HaAqZYQR/cP2kF36VzxpF+17WVlMZ0H1/jp3w''@;'; put 'put ''hgV5UmD5yobqtZ1WiRXiSJ1AWmL7m1dOd6v6iI9BbFMvAPRMnUBT++SlCPMGhHD/OCaIfcyRGN9QvbFor26jaZpLhQgSyxmRj4/dKclsJxHns9wI3TCjuuX1fG39mG2xXd5+8skq9/9Voo7+CwLOjY8IMY602tF3d246/mQhxG898ogBm1+4pPLHdN47bXrFhj2pv1OgpxUIgNhaoQoQQ0oEFm+f''@;'; put 'put ''PFaEgy9K1BH1AYU3MeI81647KqUE4gCd+p8NHvrhN83nuRjjY2Kb9i8Vwo4nOSO3zq7Y8Gam/Q9nL+tiu2XyFZzzX0ZmbBPMtjql7kmZ2iVquPySeX3e5nEH6zzY4pVHD6hTWO/7m8JKz4EvkcnQtF5bEFvr1QQiSoLA4s2V1xHKmiKbPJh7zzLCVh38/sjrYILJZyAX7ji1lISC1ziZd7bGg2Nj''@;'; put 'put ''ETPs8AnEHyQGuvu62ud3JlGCtJpmW2zv3XrG3SoPzjCDNGdnU8QWdVefdItVN5CYt7XiIAd3PI4RmjQArMCvCY4vm13X/EpawKFz3giA2OYNPTjOBAFzZnK4xPdnSthZEXvmczmK6Z3dYXGn3bYvzASTA9lYumPyKKLyOw2uXxm9N3Ckj/k8l2B5gUcpeeTa8U8Fsh1PU0fVCFVX35KZpyyeL4fk''@;'; put 'put ''7eJcOnp6xV9Suo26tK1mEyGsX7h0roawoGfOrWtryXZe6dhfubWipC+s/tkhlZwSbSegdX3slkedDfspp0M3f31BbPPHHjxniMDSzRVfMbB4UqLOI6NNKswzhxHyQC5EI0Op5MzMoraKKRJx3s6FVhnvKDgHK2kJ6b2LfKWjN2ZzZ65siq05E3mky7FdM4L9J0RpPBwQyJh4Y+0Llj/E3ZwAKLj2''@;'; put 'put ''S5k5L4geFJoe2ClL7svrq1rW52ywgKOMEMi62KqyVHbj+PU9GYkWjACBIQgs6qiaKHT9TzJz9W90EfXzHJbYtPoJG94GeIMJLGmv/hbD8jKO+BF430SzSCvzljzF8p8QN26ZWdP8ZjYmUWVTbJc3Ty7zoV2veZVR/WNCNYJ9MqWHN1RvscXsXnOXMNkvHlaY+4LoCW4hvbdLwq6r5tS2PZGNmsD7''@;'; put 'put ''JDsEQGyzwxWs5oHAkvbqKg8b85ug0XVUtHsnK/MFjb5FmhG6Jx87BuUBRVIuTVEK08BcQuhsFmepEMVSJ0XSYr/huz/T/LIptnufB6N/yczZv+aYC6NXptphMyq3+ZIClOfGS9qrF1Is3RAdhvnFgRF56pyatt/mOTxwnyABENsEQUEzexBY2lo7LqB3/tGjjP5CdMTmc1yB0DaZOX809t2Sv8Pk''@;'; put 'put ''qcH1NI/y6wl9usKrjD6DEdkxkB/nmhH6p1sZ03BdxTMZO4oum2Jr7kOs9al/c8sjvmjmYu7OpEieI+1wQEM0e3NG+b9G/+N2tzLypoGCG/C5pRGzrqtc+7A93p3FHWVaYpvIphZwG7m4B1g+sjc/wANq8A8uufT0WP/mB67O1Y2KVHq91bYuzAerWJ/mB/s7h+w8StV9D7rlEYP2Wza4Fg7pfa94''@;'; put 'put ''pPJZPdWbtqV7So1Zq5CuvuXIwgSpvc9sPa2a0Vtp5mnGrgt+xk/qtlp6glS8cSAEwkvbKk/RRPgxBysZEWnDBTcEN37DMZ6Z6bsOVhiPhRQDiG0hVRNy2U/APFJNIl0zEcJzorfCizQIar7dXmXMQp2jh2GHnsEDxxQqiXRfpPHQ/BLloP27dEVa7r1KLPmdQfC82RPXvZ/q0DNv9aKw/h8H82Zl''@;'; put 'put ''NvKy9snrMRb9s3r7D6zA5OaGqk0L7fqsc17bCWcig//aKZWNjmbuZGW/MkTfHNj8ItWRmP1+ILbZZwwe8khg5ea60WHCmzBGF8ebddsb/vS/HmXk9R45+IQVNzrII7p+1+YkHUeAXG4Izdy/d8AHvPl6UPftlqjzQdznWTj3G+v8yca7T2z/7WDe8nh90136c++2by5Tjd6GiG2C5I1OufMMO9d6''@;'; put 'put ''0eaqiRjjPzIqfS6aGcG0WaKOS6ZNfPbjZOsA7bNPAMQ2+4zBgwUILNg04WKBjUUK9Xx+8PmvQsjU+3vV0Bsbqtf+xwLhWi6Epo6qQ33hzgc88ugzIxuIRAepGaF/O2nJNWM/KGtL5nn40uZxo1Qq3syW2C7pqJlFBG2K1Nwjj3ozRAK1M05cs8tykJMIaMGmqhM04XvSI++daR35YcjRShm9CAQ3''@;'; put 'put ''CZg5agpimyPQ4Cb/BMyj6LqD7PtcGHcozB27RKj/mZ5MvL/QmViUzq3R/GeanQgaBSKujuov6kbotw7mrYr1woVhnp/7moOUXZHoTkfZFtvlraccEeDd25ySp/9Unf7lTES6ZFbVhseyQyl3Vhc3TxgrKyXPcqT3ryOO/AiB/05k+i1Y7pa7WiTiCcQ2EUrQpqAI3Nc82RNk+lUCi9soYYNuX4Z0''@;'; put 'put ''X6dMvQ8jhSycM75ld0Eln4FkGl//iqx0ur6vG+G7Yk+qMc2bz3MZcTwkGfyuGZNaD3gFOextZObp5EI+JtUdpMxafyI+XFPmOKR2b+pCOGjpQ/oefXq+TzzKQCnQgi2VX8CaYa4vPzHankLdrxp66Nszaja+lQk/YCN9AiC26TMECzYlsLi9+kgh+DyCyHnxti6kWPkHEfguEg4/CeeKDi7y/M11''@;'; put 'put ''oykO34gQvlaiDndsC8GN9xBh87lb/t3cr8V/nrt3NnLYnCAV/5ltmmJrxtTUMeWksN77V4W5S81/q0aw10VHnjOjes0mmw7dAWGb5xhrRvczHnnkgLsNYd3/scxc35ldvbmjEPK0ew4gtnavIMSfNoElrbUVfm3Xg15lzHEYExprkAu+hWF2u1P2bbTzxJq0QQ1hYEHrieNcbOT1quH/VuyXFnMG''@;'; put 'put ''sFsa1ebXulf2quKZ2APbTaEQIvBWNsXWnJnulIJ/lIjj7EgKGNFWQ+bfLpQ7F+aXFs0Qj0hUOSO6TBiRnYLz7zbUbmrNVv3BbmIEQGwT4wStioDAgs0Tr8ZI3CEz18Gx6ZrPc12sfDXi+u27qqretuqpMfks0+L26tMJJsuxIP+DMSaxsUjEtUY39J/2VNe8GuGXC7E141jWVnOWwPhJgun+L1OE''@;'; put 'put ''KD+ZWbFukV2XAcXyNW+Z+1loFSXSd6O3dwxqPbsVWnrJnNpNz+dzfBS7bxDbYh8BkP8AAuZVUKmDzmBYWqTx4CA6BtdVSpV7ZIIXwJrGwYPH3HxhSVvVDIdUcr3OQwMOQjdby8TZKzD5hSHCi8ydnHIltk0dVc6wrj+qMNe5n13dkk4h8PcaajauK5S3gTl+FeJfpEiu/mMFIz/79lO+fG5d21OF''@;'; put 'put ''kqvd8gCxtVvFIN6cEGhqm3IspdIKQ4RPjeeQYvkfHImbe0rKn87mqTg5STYLTpY2Tx6FJe0mXWhXS9TpiXVBhLQbYX67QfE6NdyzPfI8Nbadg3k6KSFfunb8U2lPVGvqmHxUQOtsc0nlB0X8+NXOD71s1Cmzapv/lQUMeTFpzhp3bJ5wHSL4LjmKvWr4fRJx3N5Q3ba8UK7m8wI4RacZEFv2sS+8''@;'; put 'put ''c9DkiEg8sF1jipWBbnknYJ6Vq5b4LvA6xs7xq7u/HhuQeWvZq4x50q91roBJKIPLZX7oO9snnuikJbNUHro43vrcEnns33rCO78Wfdsz2pIptjrj/5OJdbHmVffi9vHTKHasiL6dzLDjhTAOXD23svXVvA+6DAVg5jq/ddxZQmgPRX+5MJ+hUywtdso9t8L8gwzBTtAMiG2CoKBZ8RIwb0ES5Lwq''@;'; put 'put ''bPhvlqhj/1VRhEhY9/cokvfXOhULrp/YArv3xBkq5vm5BtcXSMRxAiVMjm1iHhOB8eCPI1NssaZ9+cc16z7NxAg03cxrOf5hh1xy6UDxF68yJF8xo3r93zLhxyo2FrR8fULQ6HukzHno0dExYST9FhMx126HMliFaypxZEBs6Ue+8EeDbhPBlW0q5YA+ViZgbv0YxGojQujyeEtdAlr3J25pxK2U''@;'; put 'put ''OB6dUbnGVse45YK7uT7X3V12GhZkMSH0K/F8xoquQj17NEGPnVX55CeZinHJ2tPdyB1sxFjUR1/h+tXOj1ys/OqGms1rCuk2610dVYeqwV3PlDkP/Vo0w6Dme8Ell15UX9Xy30yxBTtDEwCxhdEBBJIksHhTxdGESYsxwufEWyqEEHqJc3RzX82mtemeipNkaLZo3j9ZSdNuYlS5nhImHegqV6Gu''@;'; put 'put ''PZqQMiq2pj8zht5Qz30eZeTl0bewVSOwW6auH9ZXbSqog9nnr584MoA+3TTCdfix0bxVI/ASI95vz6nZ+K4tBo+Ng8y62OIwLq+f0tJtY0YQOhAYRMB8Hlm6dUpVX2jXg25l5FdjG3Bh6DpXN8nU9aOG6hbYbznOGFq0teKwcMj/kEceOegoRLO5eZVLMetm1FExveLZNzM9DPceJ/juFUKg5TJ1''@;'; put 'put ''evffjTOCfTJ1Lmmo3nRHpn3m015jR9UIovke90ij+k9Bivz4wp++5XGOvXhOZfOL+Yyv0H1nXWwFUz4P+8wW+jAq3vzMU3HcquuH3NB+IlFlTCyJ/ue5zP1LrPMl9ZNaPypeUvEzN/er7vTTOl0Eb1GYu4IRxRnb0iONaNG5eqvfob001E5UqXI1vzQprePPZ0S+hxJp//pq88uSQypZperGrYV0''@;'; put 'put ''BOOStce7NQdbKDPXj6KfWQdV325Z8lztr259Cu7GpDqaDtwvbbGVQ2xnb3jn/m+Fse6cdNTNqtHVzAUWCOlI54QjpO1vRjDDBIth49jbP7Uf077Z/0B+eAIxIMRQtA0ujP6YCKb99s38DvRDhsjhQLlxoQuTUWqZJ9crkTokYzHRmpk5xtqlFAvDENj8HfsaFyTlsRBriwhdmHGa/0/ZQF+Gvndc''@;'; put 'put ''mn8XuggbQuv3S6W97bBBuUG4y/xNiDzSLZXcEzA6B9ymi/jrCX/yjlsecYcQ+E9wyPfgUWSKnret9qiA0fOASyqfEnsyk87VkGYEX3PL5dd1h8SLjVNaDvxmS2agmptetNYe4zd6nvLII46J7hrUul50OMvOnz1xc8pn9iYZSk6aL2mbdJHB/atk5tl/jrBmhAKcG8vd/tF3FsK+0TkBmYSTtD7E''@;'; put 'put ''73v9Qo8UIh/2hT8uScInNAUCBUHA3OCCC10TiHMkhCEzd/8H11Aza/cl/TIWeF6Pip6O3bqwIKCkmUT/phjtFWf+/x3kOymRv0Zits/sP+QAy09QxO+cVdue0bWx5jGCQrBHMCYnDUhDoH8ILK4utOVdi9omfNvFRt+rcf+AHdOwIE0uxXfLteNfDKRZTugeRSAtsX2o7Vyv4XR+AGILYwoIDCZw''@;'; put 'put ''INHVudqqMM9VMyqe/08hzXzN5DhYvLnyalUE73JJZYOWW5lbEDLiWEV1x4o5UzJ3MtPCHaeW4qD/DxKVz4zOxZyp7JZHn9dQvXF7JnPMty1zSZaqBx6JPb0JI/YzSuS5MKs+cxUCsc0cS7AEBOISGEp0heAGxcoDKtPnwfrc+INnefPkMo0Gb2LMMSe2hUDmFg3G+xSRBb7yPb9sPPYNNRNDcNWO''@;'; put 'put ''ca6ekHI3I9LV0fZUPbCbYuUHhbbl4cK2CcfqRvgvLql8/1pcIYT5DOVZB+eXTa1r68oE12K3kZbYrtx6ZolDKnkfrmyLfRhB/sMRONBVbkDrv2q61SW5f3/t+Kfg1l0MTPPW8sptk47qC/t+7pRKB97iRQiZh9aHNN8rCi2ZOreubdtwtUjkdXPiVk+A/YRSpTH6+XFY7+uhVJl1fU3HrxKxY5c2''@;'; put 'put ''C1qPKw+ogfZy52Ffjo5ZcL2dY/e352ZoUxG78MhGnGmJ7f2vnl3ONM9/QWyzURqwWYgEhhJdUzAwpi8jTu7AJPR8Q/WWwacgFCKQJHIyt88MebtPE0jcJVFlwAYNphnVCPQy7HiSIL6gobb99SRMD3FHAuGFrRMuR0jcrTD3/nkpmhHsY9g5v1fDSzI9USvdmNPpv7R53CiV8tUOVjI52g7F0lZD''@;'; put 'put ''6JfBErZ06CKUnti2nl3OXO53+sKf9B/KDD9AAAgkRmDoW8tC6FzdrEhlM7orKv8OR/kN5mluSKHq4gpDhG53SqWjY1uYJ9zI1PNL2RCLZkxq3ZVYRYZuNX/T+LM4Uh92SeUDlnYx5LhPR6iglgat3FpRsifQvbrUMXbA2ueg1vsPr1J+wYzKDW+ky7NY+6clto+/fqHc2+uZjwQ7VOehgMG1/dPx''@;'; put 'put ''zecpGCPOhcHNJyscC47NBwFcCIT2HnWJScySn30LOvi+qHB/W/Mn+mhMbq61OeDSD3Mhh9mL76uqQGb7yL8QwnGX4Jiv7/UjCBeYkwOyEQktFRrK1/DDbaB9My7eH/fev8fw6P/33vzi5zacv4G5D9c68rrge7+skf3+P4uLR/GOtfdZtAf2FLv8I7o1RnE20jXzx8l/gRQC7V3CFTVm9udojmOT''@;'; put 'put ''O+HmkBYYmaPYHJjmX7kwiPl6/184xsKclcwFNgxz3COM+/9t/t18HWHOkWE6IkTCzpGE0Ckc952IKXXFkjCvnmTi/JmOlEVwCy/+OJm3teIgWcU3C4KvYkQetD7XMNR3EKY3+8s7/5ju89xFbRPH64b6hFMqPTQ6GoPrz0rM8YNC2mN471pc+pBDKrk4OldVD7zHsPvSOXUtbYl+RkC7zwikJbYA''@;'; put 'put ''EggAgfQILG+tPULF+nyKpQtil7mYlmXqfksYxq17qqoehavc+KwXbppQzTFvUqhrQrzTgyTiWKMb4Z/Oqm55JZ2Z3/PaJ3yda6E1bnnE2AGRcNKuyOKCaQV0CIW5jzXb47jXxbzXROca0vu6FFL2ndm1G5rTG/nF1xvEtvhqDhlbjIB5mdzUVns0pqQJIXx2bHi8f9YyfRlhdGN9Vct6i4VviXAa''@;'; put 'put ''myczWQqeLmNpGcH0f2KDMrimIsQeVRi5aUZlywepBr2obfyXKHauJZgcPsAGxlslQ/rOdbXP70zVttX6mdtZ/mfsW3co1H1jzP7RPoW6L6+vbnnCajFbOR4QWytXB2IrKgL9h363T7hA17X5Lrn0yNjkdR4OysT1a4H5IjipJf7QmL9t4kgc1mZyIX7slEpHxbYigu5GGN0uwvx3qe7ZPr914jG6''@;'; put 'put ''7n/Wo4waUCOK5W2c8UvqJ2x4u5AG7rxNX/shxnShg3nLI3mZm4s4qffmztLy+xuPXZ2RJVeFxCxeLiC2hV5hyM92BMwj4ISr59L/n9xwR7zzc0O6r1Mh3l9i4lxQSPv2ZrJQi9pqDkHCuEEg4wqZugbtcKfp4f9IVJmPsPpoKjO/mzqqRggh/RFjPCU6blUPviUT75UNtRtaM5lPvm0t6qiaGFK7''@;'; put 'put ''V3vlMZ8fEIsQf2KG+8czJq1JeyJavnPMtn8Q22wTBvtAIEUCi5orDjOodgfB7EKZOgedGU2x8g+OtJuFCK1JRTBSDMtW3ea3jqvwsPL6sBE4jxJJiQ3eyUo3B7Sulb1lY59K9grN3G3Kw5UHVb3vu9F2Zer+WNX6ZvpqTv5jIT1nn7d53IkSlh5nVBlwRS+E2ECpdGkhTRLLxiAHsc0GVbAJBDJI''@;'; put 'put ''wDw/lzK2RCD8zejDziMuhBDbERY/7a1qbYYTW+KDX9xa9U1KpGUY4wEHDZitzZ28ZOp+Thf63Pqq9f9IpnTmMiSElZ8Jblwy8Lmmv8fBSq/trqxbXUiCu3hz5YmaCD0ZOytbIq6NQkXfhSvcoUcPiG0y7yxoCwTyRMCcRLWg9YTvCCEWO6XSL8aGYS6vo9Txc86NOxuqN36YpzAt7baxebLDzfSZ''@;'; put 'put ''DsnboPHAoOMQGVZ6EDLuC3N6dzLLrczarNgy5XaB+C3RACiW/aoevHNuXdsiS4NJMrhlHVUnKKT81yr3H7f/Cx8SwsVGNOuq/7JCmiSWJJoDNgexzSRNsAUEskxg34YO30eI3y4z54DTWkzX5vNcmbh/5pCUpdMrNuzJcji2NL98c93BgpJGQ2iXx7u1zDl/n2ByW0PNpocTTdCc3FbWcfJVBtIe''@;'; put 'put ''jL7C7d8ZTOD5vTWtjYV012FFa83nVcz/xIg8PpoRQcoOZPDvzKpb/16i7IqlHYhtsVQa8iwoAndtmvA5hNSbJaJcKlGnOzY5guTXMRLzVTf5a6YPXC8EkOaylncOee9kwY0FMnOPi83JPDxewZ61GtJ/0lC9/rVEcu6/+7B5wmyJyvMoYfL+qz7BDUbdt3QFQwW1veOC1glHcK79zimVVkXzYdjx''@;'; put 'put ''gi7QJQ3Va/+TCLdiaQNiWyyVhjwLkoD5PNenf/zzEuXgiYwog3ZR0oW6yck8c/Z4yl5NdgJQQQKLSco8cKAzIF2uc/8dLqn8IIxx9PZs5n7LPRJ2/tyQybJET2ZauHn8d3WuLnfJ5QM2v5CQc6mGREHNIF+4Y1wp8pOHZcl1fjTasO7/l4OWXllfs2FLMYyjRHIEsU2EErQBAhYnsGjz+IlhI/gr''@;'; put 'put ''jzJqwKktZtgG18IaV5sdzHMdbCYfv5DmnsBhg16hGcFbHaxkZGyrsN7XRZG8otSlLk3kUPUl7dVf9Yf3PFHiGDtg5q5f71rvoJ5L59Z0fGrxIZVweOaRhL6gdC+lypXRnfrU3R84SMn3r5+0ZVPCxgq4IYhtARcXUisuAuYEIIJ23cSoY7qDecpisw9qPbtc8qjbekL6w41TWkLFRSexbJe2Vx/e''@;'; put 'put ''G9p9b4njoLPibf0Y0nr/rtCSaxpqWrYNt/WjudtUUPU9U+I4eODmF4g9g3X1ykwckpBYVtlvZW7vKO9WlijMOz367oCq93XLzPm9huq257IfhbU9gNhauz4QHRBImkDj1ooSWdXvkqjjRxQzKdqAOWvZr3V+4JZG3Iax/hiszx2M13ye++6hH345pAfvd0sldbEtDK5rQa1rh1sZNW129ea/HahA''@;'; put 'put ''5uYXfrXvGbc8ojK6XXfwo9fKXYecW0g7gZmTxOTN46+UqHw/JdL+Z9aaEfQzosztrW5dVUiTxJJ9Y4LYJksM2gMBmxBY2loxzqfuub/MeejE2JDNCUAGN7bIxDOjvub5l22SUk7DNO8UyKT3YpX7G0uUg74Q61ztP5nJ9RA2jEX1k1o/Giq4Ba215f7wB8+OcB0+QHBDat/rTlp2bn1dYW3vuKB1''@;'; put 'put ''whmaEfi5Rx51WISJ+ShDYd57///IqztmVK7x5bSQFnEGYmuRQkAYQCAbBCKCYYjwTW555NGDBcPf45DKH2WGsWBa9cb3hrs1mo0YrW7TfJ4b1ND3VSNwy6ATfxBCAa37E4k4H+SI3f2TurauePksaqvxYkrSxfgAACAASURBVMxXMSx/L/p187mmWy65eHb1lg6rc0gmvsXt1V9HHP2eUWnAHAIh''@;'; put 'put ''+DqMpR8U41pwENtkRhC0BQI2JRCZAIQFuZ0QOuh5rvlsjVHvQwLJi5PZ0MGmOFIKe97mcQczTOcIJK6Rqcsba0Q31LcpkZdKNPTIjMptg67eVj57phL0di6mhE0lmLFI/6DWvUvGjmv8ddueKqTbrEs3V3wlYPj/6FFGDhBcSuTNBjcuKTbBBbFN6W0HnYCAPQks2TTpi5jxJoSQufXj/g/8SDaM''@;'; put 'put ''OP7JuT73kA9GrLnootXmUffwE0PAZBgW3ebh6nXxGAY130tuVvKjmdWbdsS7U7C4tWImJmxJ9PP0sO7voVhqCNRu+VUhCe6CLZVfCAb3PFfmOORL0RgNrr/gQK7zimm3KRBb+CgBAkVGoH/zhfbxZ5bIB9+m6r5Bz3PNvYI98pinekN7ls2pa2krMjwJpWtOBnK3VZ6NCVsc7/xcc+coiqQ/c67d''@;'; put 'put ''PLuu7c1Yo/Pbxp+FOP9d9LF1OldDFEt3z67ZfGNCQdik0bJNEz5nEGoeYDDgmbVC3X/ThXbxzMrn/22TVNIKE8Q2LXzQGQjYl8C+25qXCCHmxdv60fzwd7CS3xoM3VY/fu2QE4DsSyD9yM3jEHVn1w0IiRkKc5fGWlSNgI9ix88Upt4Ze2t5cdvEOoMbf1WYZ/85seZsccTFQ706m9o4pUVPP0Jr''@;'; put 'put ''WGjcMc6F+wJrvPKYSdER9am73y2XDz3juup1/7RGpNmLAsQ2e2zBMhCwBYEl7dVjsKA/EsiYQYk0aEMHmXreMWeXCiSvgvNz45d0wabxJyjMeZ3G1Ysk6hiwfaYQQnjlg17waZ+u6Csd86fonbzu3PTVb0vEdb9MnQdFLJvtGZFX4C7pJzPOWhO2xSBKIEhz3kBIE79j1HlOzC3ltxBml82t2VTQ''@;'; put 'put ''u02B2CYwSKAJECgGAuazSM7C87Ag5zMiO2JzJpi9KhC+3SU5n7t2/FOBYmCSTI7m7fmFm080D5OfJzHX+HjPc2XqeU7j+k31VWtfithe0F49QVW7HvcqYwYsL+KCP+Zg8rRCOlDCFNy+cPjnDqn0omi2GLH/IoyvrK9a35IMczu1BbG1U7UgViCQAwLLOiadIBGlSefq5Fh35rNILowOiuTbejXc''@;'; put 'put ''Wki3OjOJdklr1fmEyAsxRoPOzzW4GsKIPWogftMNte07Tb+L26uPZEL6MyLo+Og4VD2w1iGXXF5IB7Objy/Cpb3zKaYNA3P1d8vM/YOG6k1/yWQtrGILxNYqlYA4gICFCPTvonTIB1cHdd/NbnnkoRjhQZ8VEnE9jLBx53UV696xUOiWCWXv89w9N2CErpPjbJ8phPgQYXRnb+nuhxuPfUM1t4pU''@;'; put 'put ''9fBTDsmz/5xYMxku+EYu0UsTPQjBMgAOEIi5vSPahZZ4pZHTo7fFNIxwH2POy2dVNv+l0NZ8g9jaYWRCjEAgxwTua57s8TFdcjDHWJkoD4aNvgETWyLhBHXf7hL54LtIMPDQtCktfTkO0xbuFrXVHEIQ/wlC5IfRR++ZwZszvzUj/B9MyPU31G59sn89tM4eo4SdEZ2cX+38u5O4Lp4zadsbtkg6''@;'; put 'put ''wSAXt1Z9U+Ohh51SyahIF3NiHsOsya0EGq8d/6KWoCnLNwOxtXyJIEAgkH0C5qH0WHIdjHV8iUydp6p68JiA3ikTRKhEnSXxNuWPRMUFN9fjbndK7plhvefvsN9y/Hot3DShWkPh+Q7qqYw9tN7gahghspoJfFtQVntQ0HjQIXsuiLbEhf5PxPH359S1vZj9EZE7D+as7KDe9zuvPPrz0V4pVn5n''@;'; put 'put ''CDyzUCblgdjmbkyBJyBgOQKLt08eS3R0BUXk0rDRd7hMnYN2Rko0aI2HA1ig7UwpnX7Yf0v+CZtiDCZn3j51drlOEhzFPbQ+pPv2IIR+rQi2QjDlZoTQD6InWgW0ro8d1PuDObXtaxKtix3aLW6f8PWQau42NXrACUkIoY0Sly8rhM0vQGztMBIhRiCQYQLmrU2BtBu5oV7skErHZNK8agR7HVLp''@;'; put 'put ''7wUjt8P63PhkzdvFvaHgtQLjOS6pbBD/oNb1osxKV7lY6aVho/ekaCtBrXePQj0//PzOg/5aSF9o5neM+x83HvFrQ6gDNlqRqWcD14PXzqjZ+FYmx2mubYHY5po4+AMCeSRw77ZTRmq6qPdrXde65M+ekw28Xdk/41gzN1gIG71dGDGdIGwwqqCw0ScTzCSZukowItT8b4wHT54y7VGsPDSzat3V''@;'; put 'put ''eUzX8q7NI/hUQ5+LEZ4uUacnNmAHLQmPdh+lvO/bv1Kov4nOw0GB8NJgzZbGQtresf9Oi6Y9RjCtQ1GT8mTmek1F/HsNE9e+bvmiDhEgiK1dKwdxA4EkCSzZWne8P/Dx417l4GPiCWRA6/rEr3W+7iCe+72O8mZfWPF9ZddoYbp548LV4iurL9z/efHG6F1YYf7PEyHOkqn74pDhPy56B6WQ3rvH''@;'; put 'put ''6SyfWD+hsI6PSxJ5ws3vajthvDD4CrdUVpNoJ4Nrqsycd82s3HBnon3s0G5p87hRkmPkbw0RHjBJzC2NfDNs+C6fUbl+qx3yiI0RxNaOVYOYgUASBMznhI7OkukI8dvlmKsn81xbzQhvxgg3obDRFmJef7JrZxubJzOF6V6Mtat0IzTXvOpVqHNZV+XGWwvpqisJ5Ck1Neuk7Hacr/LgwtgNLoYy''@;'; put 'put ''aN59oJj+zCn3ziikmbvmhD1faHdrieOQcdG564b6jkMq++aMyjW2m5UNYpvS2wI6AQF7EDDXelKvdpvBw+ZWjEp01J3B918rlUbf4jecaxuntIQykZG59aOmB8+h1PX4DbXtvZmwWWw2FrQeV24Y6DqM6QynVDpo+8x4PDAiqyVKflxIu02Zt9g5Z48RQk6Nzplz423GHJfPqlxvq0MyQGyL7Z0M''@;'; put 'put ''+RYNgVU7xkm7/NoKhXqvoYRJkcQ1I+QnWJ7HtN4H6qe83F00QGyW6F2bJnwuZHQu8UgjzjTvFgwbvhAbCZevnFW3/r1h29qkgbneu5v6fuVk3u9Eh9wb3vXfcuWQb8+oXv83m6SCQGztUimIEwgkSeDuradeqevafZggZ6RrSPN9igid89O6Hb9N0hw0zxOBZa21xwQN34NDnZ8bHZYvtPNfZfJh''@;'; put 'put ''35pV2/yvPIWbcbfm7XVP18hpAhkLKZHkiIM+ddd7Hlb+nYba9h0Zd5oFgyC2WYAKJoFAvgksaau5SCD+K0bk/UJLsfyGqgd/MLeubVu+4wP/yROYt+nEi7jQVrjl8rHRM3VjLYW0vjddxHHarLr2grnCNXNc0l73XYzE7wimNJKzwY1XEeanza3p+DR5orntAWKbW97gDQhknUBTx6nHhbWu5xTJ''@;'; put 'put ''c0jEmWYE35ao8r2G6tbtWQ8AHGSNgHkurBIgNxOMr4u3VOgzEdLeogh/1y5XfYkCW9JePQMjvNRcchbpw4jjibHvlVxg9TXHILaJVhnaAQEbEFjUVuNFQntOos7qSLi6oX6AiXT53JrNG22QAoSYAAHzlCBV6/2FSx4x6GSmSPeQ7utUSOnZs2tbbLlUZigMTe2TViCMZ0ZeN/eXVojrkulVax9P''@;'; put 'put ''AF3emoDY5g09OAYCmSewcus3Zuk8tDzqCkelWPpRQ82mhzPvDSzmk4C55Mophc5CAt3BiHRcvP2rg5pvt0ceOW1m1XpLC1EyHJe8crqb+3paJOoYH3V1+09K6JRpE5/9OBlbuWwLYptL2uALCGSRwPId3zhYC/k6GJH3H0IeUPc8r4QPOX/uN9b5s+gaTOeZwOL26u8wrCxBiH8xNhS/uucDh1Qy''@;'; put 'put ''zg7PNRPFuLS1dpwuws/LzFUe6eNk5cs+mfD16xtxI0/UTi7bgdjmkjb4AgJZJLByyzdu0EVoYcQFQfRtgfVv1ldt/kcW3YJpixAw91sOavQ2jMVURmRHJCyKpUe6QvrVmVpLbZF00dKOutsJIrdG4lH14Kdeh+tr0ya2WPLqFsTWKiMH4gACaRBYsfWUg/pCu7e65LL9V7Wc85vm1LbOT8MsdLUh''@;'; put 'put ''gaaOkw9FwrhVIHENpfJWhsU5hbTZRaQki7ZOPkyova/JzFMW+ZtM3OdNr3z2r1YsG4itFasCMQGBJAk0tU26imOximDSvywirPs/8CqlXy/ED9kk0RRl85XPnqmoJb6TCaEfNFRvfq0QIew9rtD7Z4k4zo7k55VH/+Ka8X+8xor5gthasSoQExBIgoC5U5Qv5FhHCds/M5Vz/Z6+mvZZsDdxEiCh''@;'; put 'put ''qe0ILGmdPJlS0RwJ3COP/rceDFZMrXumy2rJgNharSIQDxBIksDyzXUHh1HwFZm5R5tdzdNgGJYm19ds2pKkKWgOBGxFYOGOU0tFoOsthXn695DWjFCfh42aOK3qGcvNUwCxtdXQgmCBwGACK7ee8hW/2tMROeLOr3budMueiQ3VWz4EXkCgkAmYt8v18uA2JMTXInliwi6sr9zwR6vlDWJrtYpA''@;'; put 'put ''PEAgSQJNHafMNHhw8Wf7xuK/1Fe1fAdj1H8WLfwAgUIl8PjjF9LdXwzfG9J6fhTJUZZK7pk+4akZVssZxNZqFYF4gECSBO7ectpjhlAv2nsLWVcxQj+cU9v+6yTNQHMgYEsCyztOnsWFtiyyqUeZ47C1PzjxkQEHz1shMRBbK1QBYgACaRBYsHn8PxXm/pJpQjUCPkKkE6+v6XgrDZPQFQjYhsCK''@;'; put 'put ''LVMqdK61EUyZGbSEXe/Jkuf4a8ev7rFSEiC2VqoGxAIEUiDwsxcu+HuftuvYvWIb7MWYT7ihdkfBHLGWAhLoUkQE7mk77ZAQCrxDCes/fk/V/d2YlB97Q+3zO62EAcTWStWAWIBAkgRWbj2zBAn+mi5Cn49c2WIsf/mG2nZLfdAkmRY0BwIJE1i149RSzZDeVI3AGLOTQMLcmrRudvVmSx0sD2Kb''@;'; put 'put ''cEmhIRCwHgHzgyagin8IpB9sRhfW/T0COY/+6aTWXdaLFiICApknYB7IcKh3zKu96idfNq0bXA0z6rikvqr5z5n3lrpFENvU2UFPIJB3AsubJ5fJLu/LYcN3eOTKVuLoq7NPeuH9vAcHAQCBHBBoFI1k1AsvPq/qvpMj7hhx1M+oXLsiB+4TdgFimzAqaAgErEdg+d8ml/GA8TLGJCK2veZxa3Nq''@;'; put 'put ''Ot61XrQQERDIPAEhEL532xmLNR6cE7HukEoemjrhqasz7y11iyC2qbODnkAg7wQaX79QLvd1bzKEWmkGo/NwUCB69g217fu3sMt7kBAAEMgygbu3nHK5ztWH8L69wZ1SecePJzxRk2W3SZkHsU0KFzQGAtYjsHLr6ct1Hp4ViYwjfsec6tbbrBcpRAQEskNgWdspUwwUeDZytKBLGvnOx32dxzRO''@;'; put 'put ''adGz4zF5qyC2yTODHkDAUgRWbvvG/4Y034OMyE4zMG4Y22fXtlXCDlKWKhMEk0UCTW1TjtWEf6tEnR7TjUzcPk2RD68/4YnuLLpNyjSIbVK4oDEQsB6BRZsnniew+I1MXV4zurDWt4s6vcdfb9FDtK1HECKyO4FFbTWHCB5+XWbuvWfbCtQnCflL11lorS2Ird1HGcRf9ATMDxoZs1aB0RH9V7ZC''@;'; put 'put ''1wjH5zbUtT1X9HAAQFEQ2Lve3Nihi/DRZsI6V0MKcZ4ys3pjh1UAgNhapRIQBxBIkYC5zpDgPU965BFn9n+pF0L8/1Xusj0VlTc04kaeolnoBgRsRWD+5nEvOZjnBDNo85hJh1Ry7nUVz621ShIgtlapBMQBBNIgsLjtpDouAs9EbiX3qXs+cLhGTYBbyWlAha62InDftrN/ETb6rooErVDvvbsm''@;'; put 'put ''jp9plS+cILa2Gk4QLBCIT2DVjnGu3rCrhWAyIdKCYmXejMp1t8BEKRg1xUBg+ZbJNwkh7orkOsJ5+NP/7X7vfKvMSAaxLYZRCDkWBYFl7bUNGNNlkWRDum+PRx4xaUblhjeKAgAkWdQEVmw95XhV929lROmflW9wfecoTTryyiktISuAAbG1QhUgBiCQAQIrtp5ykISdm8NG7zERcwSR58JcveiG''@;'; put 'put ''2vbeDLgAE0DAsgSWtdZ+TUdqW2T5T7njc592hd76QkP1lqAVggaxtUIVIAYgkCECTR0n34iQsSBijgvDoITdVl/VMi9DLsAMELAkgRVbKw4KqOobDlYywgzQHPsuufSYqROeedsKAYPYWqEKEAMQyBCBJa+c7qaB8FNIoCkRk4bguyim/9tQ3QJLgTLEGcxYj8Dyv51XVmI4X+tRdx5mRicENwgi''@;'; put 'put ''dfU1m7ZYIVoQWytUAWIAAhkkcPfW044Oqp3bZebZu8AfIeRXO99xOcecMbtiw5sZdAWmgIBlCJhrbcN69z8pkfuPmzTFVsKu6hnVa7dbIUgQWytUAWIAAhkm0NQ26SoD6fdTIskR0wTR17Hg351Z0/L3DLsDc0Ag7wQebp7sCLlL1gb1nkl7xVYIJyuZM7Xi6aa8B4cQArG1QhUgBiCQYQJL2ydN''@;'; put 'put ''EsJ4lhLmjjatUO+rWJDLplY++WqGXYI5IJB3AvduP3u5qvftP5SjxHHoYwb/12XXjn9Ry3dwILb5rgD4BwIZIrDy2TMVURaqlZjn0t7wroslqrjimQ7rfe8rjpIzGyY2v54h12AGCFiCwAPbzvlm0PA9FRXMe4y4jptRucaX7wBBbPNdAfAPBDJAYOXWyYcFtNBKjMTpEnUMuJqNmNeMUMDJSj/F''@;'; put 'put ''mP5V13pX1te1WWKWZgbSBxNAoJ/AkrZJV1GCfxHBUeI4pNMX6jy6oXptZ74RgdjmuwLgHwikSWBp+0kTEDIeIpgeF2vK4FqYEcd7Ahl/MAReXaKw9384br0PdpVKEzp0tySBFe0nTQjxwHqZukoiATqR97AfVz/9Yb4DBrHNdwXAPxBIg0BT+6TT/VrnL93yyEOjzZgiq7CSP2s8cG9v6e4djce+''@;'; put 'put ''oabhBroCAVsQMO/waIa+A2N6UCRgQtjXZlVuyPscBRBbWwwhCBIIDCawuL36CsNQVyjMXRp51ZyBGTb6PpCQ43p/XcfjjRjBqT8weIqGwP+1d+fxdZTl4sDfbWbOknOSphuUTQGvCAoCaZOcpG3SdKOKChcKondB0UopaZO2FMX7MaJQuiVtCkJBFC4XvbYISIHSLUmzF1IuXBblB1xRsC2U7Ged''@;'; put 'put ''mfd9f59JOSEcWrKd/Tz5w4+fnJnnfZ7vTHkyc2bet7q1MNene593qrnnhIu2sdySpTOeOJBoBGi2iT4CMD4IjEGgpqXkqhDvf2Dou7TW1SzG6GEbs/9kWf7+zjGEhV1AIKUFpES4tn3+PVyGbvy42bo3L52xsyLRhUGzTfQRgPFBYJQCm1tLF3iNzoccyoRTwrsGzb4uhbhuPOvw1D8uXryDjzIk''@;'; put 'put ''bA4CaSNQ0zrvdon0/wgX5GAT6/wm/XqlZ0dC50iGZps2pxgUkgkCte1l53cHj+x0qZPPHtJoO6XES2+b/eL2TDCAGkHgswQ2tcz+Acbo/vA2kxznvNiv9M++6YId3kTKQbNNpD6MDQKjENjYUTIJBY3thLDBeY91HuinxPat1UWNdaMIBZuCQNoKVLeWLBTS3EkwZVaRE9TT/hpQ0aVLL/xddyKL''@;'; put 'put ''hmabSH0YGwRGIbClde5ajoxbw7sIaRoCyeW3FLXeO4owsCkIpLXAuuaiPCTNvQq1DcwNzojtQ405L1yS9/iRRBYOzTaR+jA2CIxQoKap+Gwv7212qrkDk6xbPwYPPnZL8cHF8M7sCBFhs4wQ2NAyfwqSvpcoYQP/Vgwe8CrYWVBZnNgZ06DZZsTpB0WmssD27VfTw2f0VnERvA1jPPBvNmh6X2NU''@;'; put 'put ''++YtRa1vp3JtkDsIRFugpr4kR7HbD+rC/0/h2BjjeRWFDfuiPdZo4kGzHY0WbAsCCRCobi7J06WvTqUOlzW8zv19Gsm6rqKo/pkEpANDgkBSC2zruNwR0P0NApnTP05Urqj0NG5JZOLQbBOpD2ODwAgEatsW/tSUgV+EN+0NHu3QnNkLf5L/PLxLOwI/2CSzBKw7QZ2fMx8MmF3/Fq6cEdvm8oLd''@;'; put 'put ''CX3XFpptZp2HUG2KCVS3LshVCNpviOBXrdSF5Bwj5ZqVRfV/TLFSIF0QiJvAlra5VVwaPwsP6FQm/veS6Y9/O24JnGAgaLaJ1IexQWAYgZqW0q9JLJ4Ob6Zz/1GVsrxKT1vCJ1aHgwcCySqwuXX21QKhwffOnUruCwibJUvydvoTlTM020TJw7ggMAKB2vb5600RWj14O4xqz5m8/8pKT1tCZ8MZ''@;'; put 'put ''QeqwCQgkTGBTc0kBpaRNyOOTqdmY67BqGl+5IYFL7UGzTdjpAAODwGcLbHh5vhP3BeoIJTPCW0okf7TS07gN7EAABE4ucE/rgnNNLN7k8vhiV7rp7XGoU6xF5N9LlBs020TJw7ggMIzA+vqSU0K485BTzZ1mbWrNf0yw4+JbZ7b8HfBAAAROLrCt4/JJvlDfSwijgaUnDR70qcReXFHU8FKi3KDZ''@;'; put 'put ''JkoexgWB4ZptY8ElAhn7wyv7EMTeCIng9DXFLf2ABwIgcHKB39aX2PSs3J0+o3NueCsu5A2rixsfTJQbNNtEycO4IDCMwJ0H8hZRQnco1OawNnUpU59j3g+uuL60IQh4IAACJxeoqi9hkx3OmhD3LgtvxbC6qbxw76pEuUGzTZQ8jAsCwwhsbC66khA2+IqPylxPiQl8cfkXdoUADwRA4LMFatvm''@;'; put 'put ''3qiL0FaCCbW21Iht100Fuxclyg2abaLkYVwQGEZgQ4vneoqV34Q3s7MJv3vfqVxfdcGO4099wA8IgMBJBba0ly4yuP4kwUyxNlKo41W/oXjWFD+VkK9hoNnCyQoCSSqwsanwh4Sqg08eO5SJD2L8txuX5B0ykjRlSAsEkkZgQ4unEEnUQImiWkm51FPe7dd7vlqZoNd/oNkmzakBiYDAJwU2tBRf''@;'; put 'put ''TzEdvLJ1sOz/OurUvg9XtnCmgMDwAtWtc04T0niTYGK3tg6Z3u4skvvlm4v3Hh5+7+hvAc02+qYQEQSiInBX84zrFKz9J/7oO6cJ2unPdIf0qys9O2BCi6gIQ5B0FrirY2624T36mlOdOPD6j24G+h006+LyorqErJQFzTadzzaoLaUFtrSUfNnP+xs1ljXh+F/m/sMuzX3hsvz9sABBSh9ZSD4e''@;'; put 'put ''AlUSEVfr7IMYozxrPFPoQRvL+mZ5wd498Rg/cgxotolQhzFBYAQCm9vLpgZCPYc0JWvgL3MphUBCXrJyZvPLI9gdNgGBjBaQEuFtHVc85De6/jUMgSX9eUVRXVUiYKDZJkIdxgSBEQhYt8HsBmnkMnTh4OaYXFNZWD84wfoIwsAmIJCRAlazvfeFy9cHzb7Bd2tt1P3I0vydg803njDQbOOpDWOB''@;'; put 'put ''wCgEqupLbE7FeIIStnBwN4lqK4sOLB9FGNgUBDJWoLqt5Eec61sGn0jWpuz7waU75iUCBJptItRhTBAYocD6Fs8tDCvrwpvbmbuhlwS+dWvevt4RhoDNQCBjBapbS87Vue9FlTpcFoLf7PmbG02bXj5r17F4o0Czjbc4jAcCoxDY2Fpynmn6W1Vm/+ghKW+3xtxXVHrqD4wiDGwKAhkpsK656IsY''@;'; put 'put ''8ecZ0dwWgFs91R8S3muPTc97pgpXiXiiQLONpzaMBQKjFNjWcanj/f7gnixtUlF4V4rV6uWFe1eOMhRsDgIZJ7ChxTPF4MG/2Jhr4I9V60dIbmrUtVbqaGs8r3Ch2Wbc6QcFp5rA1raFJYYM1Ifz9htdRxzKhAWVnsZXUq0WyBcE4imwffvV9G/TDu+hhM2JHNend75rV3M32UPkwZtKG7yxzgua''@;'; put 'put ''bayFIT4IjFOgtj3f3eXrbnTbT70oHIoR+z1dLlclzCY1TlzYPe0FNljvqxvHttmZ62JGtIHZpIb+BE1fm5O5V3WHxItVMVxRC5pt2p9qUGA6CGxsLrpMIvkEJYpm1WMthq0xx3UrCuufSof6oAYQiKVA1Wvnq1k9ORcFDd99DjXnksixrFvLIdPf5FZyly8r3PcqxkhGOx9ottEWhXggECOBn+77''@;'; put 'put ''fFuu48yCwatbrL5uULxw5Yw978ZoSAgLAmklsLG+ZBJS+A8Vqq3k0siNLE6j7k5T6A8KBW2uyNt9JJrFQ7ONpibEAoEYCmxoKsjnyNyjUufAk5XWj5S8KUubsHBJ3k5/DIeG0CCQVgLrmoumEYRuJ5hcjzEhny6O/ZUS/Ivy/H0PResqF5ptWp1CUEw6C1gz4qxvzr9bobalQ+tkxP4IDQSXxuMh''@;'; put 'put ''j3T2hdoyS8CaOzm7teTCPv2Du13a5MGn/T/+Q1YIU5gvOdmEpcsKnz04Xh1otuMVhP1BII4C1m2wfnT02Wxt6vShw1Kk3a87UeXqi/b44pgODAUCKS9gzdRmU3zfIJLeyah2TmRBBg/5bcz9uOTGL1cU178x1oKh2Y5VDvYDgQQJ1LSVfM7kxnZK2CcaLkH0SYlFRUVhwzsJSg2GBYGUFVjXXOSS''@;'; put 'put ''wriZy9AKu5IzObKQgNn3YZaaW2swfu+qvIYPR1soNNvRisH2IJAEAlbD7Qkc3pttO/Xcoen49Z43s5SJN/ToorWqtMFMglQhBRBIKYFNB6afYRL6M4LxdylRB57+/+QPeYthdocpvX+o9LSNeG1paLYpdRpAsiDwscDa+kvO1dSsnQjj84a6CGmaWNIHMWG/qPTU/QPMQAAERi+wtiV/PpXs5wTj''@;'; put 'put ''6QRTOjSCtdylS52836d3bzntH5OeW7x4Bx9uBGi2wwnB5yCQxAIbWuZPMXnXkxpzFkam6Te6j7qVU+9Apv8P5bOa4j7xehKzQWogMCKBqvoSZleCi4Qw1mos6/zInaQU3MbcT5jE+Pny6Xte/ayg0GxHRA4bgUDyClS3FtrtbOr2gNn99cgshRQ8aPZ8MMl+9n2G7v/1zcV7DydvJZAZCCSngPVv''@;'; put 'put ''THB6FSZkLcb4tMgsTTHwENVjCOm3lRc0vHeiKqDZJuexhaxAYMQC9zy/cLrk+DFd+s882U7WbS8hRSu2KVeM5eGOEScDdT3IRAAAH41JREFUG4JAGgtsODDr8338H7/KUibNVKjN+ek/btEbDjVnWdAIvljp2d019HNotml8YkBp6S1wV8fcbLuJ1wSMnqUqdWSfqFrd9PYw6viQIuUPQjG3rZzR''@;'; put 'put ''CLNNpfdpAdXFWMB6PzeraeZ5Pt55f5Y6sfCEk2JI/GebMuHGpTOeGFwKE5ptjA8MhAeBWAhsbJx5viTiXkrYrE//dc1NjNBfpJS/IUTbDg9JxeIIQEwQQGh9c8E1GNF1BJMzIpuuQpzPkID/2vBkM9Bs4YwBgRQTqG4uylOY+2FD+D/xwIaUUtqYqz1g9PyGI/SHNcUt/SlWGqQLAiknUNt+mZsS''@;'; put 'put ''tj9k9uUNJi9Rv8q065bl73k6/Dtotil3aCHhTBaoaZtZ5A31bHequdOGOoRM7+s26r6lN+f9vVUXvK5nshHUDgLxFNjaOvcrXrP3gMYcgwvUa9T902MzLl1bhasENNt4Hg0YCwSiILC+saAoJHyfarSmNJ5UOF1aMaspqquURCFlCAECaS9wR8NX/mRXc78RLlRI8Q7Scqavytv5iVmm4Mo27U8F''@;'; put 'put ''KDAdBNa3eM4JGN11LnXK4BPHOvf3M2Jf79J81UvyDsGqP+lwoKGGlBLY1FxSYEr/XoXas6zEheScYmVphaf+/shCoNmm1KGFZDNRwHrqWPq6ntMU1+Batjr396nYXllZ3PhgJppAzSCQaIGBd28FOUCGzFGuEeeuY/kzvj709jHcRk70kYLxQWAEAtayelsOzl0nhLE6vLk1a40p+G1rZrauG0EI''@;'; put 'put ''2AQEQCAGAhubi9YSwm79uJkSH8ZK2YrCPSdcjg+ubGNwECAkCERLYENbSQk3fX9SqWNwwXiM6dYVBXXLo7WodbRyhTggkCkCtY2XTSYqPqgL3+c/brZ0e4Wn7pqTGUCzzZSzA+pMOYGB21SS7SSYlIWT7wu9/5aTuOevnv38X1OuIEgYBNJE4O62RZUh4d2IMR7oodw0OylBsyuLW16DZpsmBxnK''@;'; put 'put ''yByBmrbZl5nceIISZWCZL4MHfQqyfbty5oGdmaMAlYJAcglsap5dasrAU+GHoqzsFOpYc3P+rvWflSlc2SbXcYRsQGBAoOq1q9Wcvu4/CmkMLi7Ahfm42xa8dkneIQOYQAAE4i9g3W1ixPV7U4S+GR7detVH5Vkzymft+syVtaDZxv94wYggMKzAxpZZs0wReFqlDpe1sTU7FMaytNLTNDjX6rBB''@;'; put 'put ''YAMQAIGoCmxunXO1LgIPM6LarcBCcpNhbdkKz/5tww0EzXY4IfgcBBIgsPX5y/7DMP23h4fm0njTp6sXVpU2BBOQDgwJAhkvsP75klMUk+yRiH8ljKFSx06nP7D4+hH8u4Rmm/GnEAAkm8C2jssdAd1/QCBzYK5V61UfhPAvVxY1ViVbrpAPCGSKQHVraTVCoiJcL5bYiwiZXVFY9+JIDKDZjkQJ''@;'; put 'put ''tgGBOApsbi79IsfmQYzJwLJ5pggFKFGLVnoa/yeOacBQIAACHwnc3TLnLMqymgO89/QwCsHq4z1B45qq0gZzJFDQbEeiBNuAQBwFNrXOuklKuYVgQq1hQ6b3HY2p51d62gJxTAOGAgEQ+EhgS9v8X3EZujEMIkyzkzBaWulpfGWkSNBsRyoF24FAnATu71h8p1d//8fh4bgwn1hd3HJlnIaHYUAA''@;'; put 'put ''BIYI1LbOvTjAvc0K1RzWr62vdVSadevNBbs2jgYKmu1otGBbEIixgDU9Y237vBe41C+1hjJ40M+w4+qVxfXPxnhoCA8CIBAhYL2CN8nbv13ngcFXfUxpvCk0x/Rb8/b1jgYMmu1otGBbEIixwK+avjYBqeTlIO87wxrq+IIDquezZqaJcUoQHgQyVmBzW9k1XOiP4o++0uHC0BViLx/Jqz6RaNBs''@;'; put 'put ''M/Y0gsKTUWBbx9zsgC4PCWSe81Gz7VeofTY8HJWMRwtySmeBmvqSHKShRonk4Ks+jNie7HK5r6m6YIc+2tqh2Y5WDLYHgRgKWLeRH37pXx7vCvz9W9YwQgouhbxt9cxmWOEnhu4QGgQiBWrb5pebMrQl/HshzE5G1a+tKKw/4ao+wwlCsx1OCD4HgTgKWM3214eueaBfP/r98LAY0Y0VnrrBJfbi''@;'; put 'put ''mA4MBQIZKVDTNvdLCtGe07n3zEEAiR7p0/H3RvqqD9xGzshTB4pOJYHa9vnrTREabK42ln3P0hlPLUulGiBXEEhVgSpZRZwtu5+kRL08XINpBo8qijanorDxz2OtC65sxyoH+4FAjAS2tJf9kAtzcK5Vm+Les3T6zgUxGg7CggAIDBGobp0zQ+f9e4euIa1grfLmwj0144GCZjsePdgXBGIgsKW1''@;'; put 'put ''tCwkAjsZ0QYmO7dR9+tL83deEIOhICQIgECEwNa2+Y8bMnTF4FWtNN600ey88oJdfePBgmY7Hj3YFwRiIFDTVHx2SAYOqSwrxwqvm/6eLM197rL8/Z0xGA5CggAIfCRgveqjc/9DjKg261fWqj5EkhsqixsfHi8SNNvxCsL+IBBlgbs65maTQH87o7bzrNBcGCGGldKKogNtUR4KwoEACHwksK65''@;'; put 'put ''yKUS1iwRujCMohHXrpsKnl4UDSRottFQhBggEGWBjS0znyCYDLz+M/CD6S/7Cmb9rApXiSgPBeFAAAQQQrXtC1bq3L8uPCc5kqifYm3hcs+e1mgAQbONhiLEAIEoC2xuLVnCpbgXYzzwb5QRewfqwsXli3aFojwUhAOBjBeobl1wbsD8oM3O3JMG/75FdHuFp+6aaOFAs42WJMQBgSgKbG4u+qKP''@;'; put 'put ''+5rsSvZkK6w1uYWKtenlnn2wzF4UnSEUCFTVl7AJGruHI+OHYQ2Th95XmFo6nld9ImWh2cK5BgJJKLB9+9X06Jm995si9L1weobQnwkY2lVVpQ3BJEwZUgKBlBTY3DY/3+D9DfSjh6KsIihWypcX7tsazYKg2UZTE2KBQBQFNjYXfUci+SAlimaFtRaRV6ijuKKw7sUoDgOhQCBjBapeO19VP9Se''@;'; put 'put ''tinueYN/1HL9DYUiT6WnrSuaMNBso6kJsUAgigK17fluIbJ2CWR6Pr66De3KsRlXLck75I/iUBAKBDJSoKZlzhxd+HYq1DawVq2QpoER+eHKoqaHog0CzTbaohAPBKIosKHF8wOC6H0YE/Lx1W3WdysK9z0exWEgFAhknMDdB8smhri+GyMysHa09aPRrGcdft8/Xx+Dr2qg2WbcKQYFp5JAdWuh''@;'; put 'put ''XQj2FCFkbjjvgNF7jFHnojXFLR2pVAvkCgLJJLC1fd5yQ4RqEDr+xL+C7ZILlL+i6LkXYpEnNNtYqEJMEIiiwKam4osCon+PQ8mZMhgWo3aT4itumdFwNIpDQSgQyAiBmsaZp/plb4ddmTAtXDAj9j91BYLWA4hmLBCg2cZCFWKCQJQF1rd45mOJngo/LGWF183AQQ2r11XMbP6/KA8H4UAgrQXu''@;'; put 'put ''aV94a4D7fhmewIJz4xgj6vyKooaXYlU4NNtYyUJcEIiywNrGSx7RmOu7Q8MSRNtMJL63ytPwlygPB+FAIC0FNreV5vv0nqftyvEJLKz5jxmx3bKicN+4VvUZDgua7XBC8DkIJImA9XSyN6Q/NvQ1BSs1r975bo596ne6Zsxsgekck+RgQRpJKVD77GWa33Vsl0qdpeEEdTPwukPFheUFB8e1qs9w''@;'; put 'put ''BUOzHU4IPgeBJBKwGm7IINspVT+xvq3Bgz5GbNswtt1R6dkd1fcDk6h8SAUExiVQ3Vw2ExGzMRxESiEQxj9Y6Wn8zbgCj2BnaLYjQIJNQCCZBO6pL8nqpj2/cbDsq4fmJaWUAaP3Lac2cXlFYd2uZMoZcgGBRAtUty7IFdy3i1A6I5wLI9qTGtO+syRvZ8zfW4dmm+gzAMYHgTEIWDPfKB/afkAw''@;'; put 'put ''uUNjzuyhIbgwdEbtBzAS/7GisP7gGMLDLiCQdgKbmmduwISsChcmhNmpMvvXywv2tcejWGi28VCGMUAgRgJ3tl56ntd37NFcx5kXEkzZ0GGsW8uUqI+rSPl5eVHd2zFKAcKCQNILbG6aeyZTWL0uAmcPJivRI306/l6sXvWJRIFmm/SnCSQIAsMLrG2avlDnvm0udfKZkVvrpreHYHU7o+4fw/e5''@;'; put 'put ''w1vCFuklYC3q0XmWfmuA9/wyXJlhBo+oilYWzVV9hlODZjucEHwOAikisKHFM8VndG91sOxvMKLZItMO6L3/59BylvS6P2isuuB1PUXKgjRBYFwCNW2zLwuZvt+r9PjXLdazDYxoq5YX7q0eV+BR7gzNdpRgsDkIJLvAhgOzPi9o6CGF2GZF5mr9h8arH3s5S8m9cWVxS1y+q0p2L8gvvQXuPrjo''@;'; put 'put ''KZ37Lg9XyYXxFiXywkpPWyCelUOzjac2jAUCcRIYWDqsy75MCHPNJ6Z5/Gh8U+hBjNAfNKb9tLyg4b04pQXDgEBcBWray64yTP8j7KO1arkwDULoj+Lxqk9kodBs43roYTAQiK9AdWthLhdoFZfGTSp1uiNHD5p9XRgpv2M05xeri/Z8EN/sYDQQiJ1AbePMyZyxOonEl8OjDMx/7HItrrpgR9y/''@;'; put 'put ''RoFmG7tjDZFBIGkE1rUVfMmGs1eHzN5rGdHskYm5tFP+0qcfrRUO7T9XX7THlzSJQyIgMAYBKRHe3Dpzo0B4BcZ4YHlKJGQfxsrCiqL9bWMIOe5doNmOmxACgEDqCGxsKiomlNVKKS4Kr5E7NHtKtH0cyx+f/rec/1m8eAdPncogUxD4WKC2Zc45CnM0BHj/6eHfEkR+t8JT/51EOUGzTZQ8jAsC''@;'; put 'put ''CRKw1sjlgnzfpU29zW90nhKZBkYkoFLnw6bsq15e0PhmgtKEYUFgzAK17fPvM0VoSTiAyUPvY0WZv7qg6X/HHHScO0KzHScg7A4CqSpwV8fcbKYbtxGEVp+wBon8hCq/IF1KTfmiXaFUrRPyziyB2ta5F/vNnjqVOXMGr2qxUhnrVX2GU4ZmO5wQfA4CaSxgfbe1sdVzAcOOm00R+HdKmBpZrlOd''@;'; put 'put ''8qpf/3CrRMFH4v26RBrTQ2kxEPhtfYmtz679FxfBfw6H58J8267Y8pfl7++MwZAjDgnNdsRUsCEIpLfAxpZZsxCSGwgmgxO1hyu21vxUaVajQObPVhTsa05vCaguVQW2tJddGzL9vw2/6mPVQST94YqiugcSXRM020QfARgfBJJIwHo/19U7ZT7FZK2QfPCViaFNF0uyExP0s4rCxlcxRjKJ0odU''@;'; put 'put ''MlhgY0fJJBISexHGXw0zKMT+lCF6r02GOzLQbDP45ITSQeBkAlbTdfa4fyyEXK1QmzNyOylFn8ocWzEyaxJ9ew6OIghYAjVtc2+U0vhVWIMiJUQoLr45f29HMghBs02GowA5gECSCmxuL5saNPu3qcT+zROlaHLjQ4bpzyuLm+5O0hIgrQwQqHmh7GzG2W5DBM8dbLZY++Op72ZfkyyvsEGzzYAT''@;'; put 'put ''EUoEgfEIWKumvDPt7wv8oa7Nbvu0L5zgKpcr1NHKublmhWd/O9xaHo827DtagSpZRRzNu/7IqO1b4X2tVX0UwuZVFre8Ntp4sdoemm2sZCEuCKSZQFXHpQ5H0HZ50OzelKVOPi2yPFOE/Bipj1HCflLpqftHmpUP5SSpwOaWsukh4W1QqM1hpWjNf6xgddWKovraZEoZmm0yHQ3IBQRSQKCmviRH''@;'; put 'put ''Z97lXPJyG3PnRqasm4EjCrNVG6r6wK15+3pToCRIMUUFql67Wp3U3/+oLgJXhUsImt7/zeauoptKG7zJVBY022Q6GpALCKSQQHVr4WlevX+rnbkXUaJokan79e43XbapK7pdOfsSMfF7ClFCqmMUqGkrvVJK8cfw7tYrakjKG1YVtzw8xpAx2w2abcxoITAIZIbAXQcKPZSSaoLp9MFJ34eUzoi9''@;'; put 'put ''wRT6morCuhfg+9zMOCfiUWV164JcJAP7h77qw7D6uCm9302GV30iDaDZxuOsgDFAIM0FqupLmFPVvxYw+u7OUicOTv4eLptL01CIfadEbGVF4XPvpDkHlBcHgdrWuStMZNQMXtUK3s2wtmBF0f4X4jD8qIeAZjtqMtgBBEDgZAK17fnugIErJRKVKrW7Irfj3PjQruTcpwteU+nZ3QWSIDAWgS3t''@;'; put 'put ''877QFzxS5xzyh521qs+09yb9a7K86gNXtmM5srAPCIDAqAQ2HZh1hk92VmvUeZlC7Z+aFCNg9r3t0iYuDxiBxjXFLf2jCg4bZ7zA5tay+wQyh67qcxQryoJEruoz3EGBK9vhhOBzEACBMQusb/GcY4rQvRpxlJ1o/VxfqPNVhzK1/IzDuY3JekUy5uJhx5gIVLfOmaHzvj0qdWZbA0gpBCO21csL''@;'; put 'put ''91bHZMAoBYVmGyVICAMCIHBygXWNhd8ypO9eO8uZijH+xH93TBEKEET/QAX5Se/MsvercJUASxA4kYC1StXaxot32xT3vPDnhjD+n2qo+RWlDT3JrAbNNpmPDuQGAmkksK65yCWlvhwhdItKHZ/6PtdqugiRR20se2V5wa6+NCodSomSQO3BsplBw7+bEdVuheTCCGGEv7+quOXRKA0RszDQbGNG''@;'; put 'put ''C4FBAAROJHBX8/QLODfW2Zh7UeRVrpRSOtXJL+umd3VXMNRQVdpggiIIWAK17Ze5De6rxxhfEhZhxPbkKX93X5UKX0FAs4XzGARAIO4C1u3ADS1FxQih9YywgsgErCsWhdrrJZK3VRTWvRj3BGHApBOoaS27SUi9Nvzdv+SylxJlXrK+6hMJCM026U4pSAgEMkfAmm/ZFqT/kqVMWq1z3zmRlQvB''@;'; put 'put ''ezTmepibwXtXFNe/kTkyUOlQAWv1qb7g0eez1Elnhn9PMP3vFYV1304VKWi2qXKkIE8QSGOBDS/Pd6L+wBohQxUKtWdFlmpy/RgjyjpGnQ/A97lpfCKcoDTrLkjtwbkruTA2hD82TP9hhdkXVnoaX0kVDWi2qXKkIE8QyACBtU3Tz7Yz90qDB26gRFEjS87WTvlLd+hozcrCAw/A1I8ZcEIMLAo/''@;'; put 'put ''5xK/0b3bztyTwhUzzJaXF+5PqlV9hjsa0GyHE4LPQQAE4ipQJRFxNhdMx4TVEkxnRA4upeCU2Oq4aa5eObP+5bgmB4PFVaCqvsRmo96nVeYsCw8sBP8rsrEZq/IaPoxrMuMcDJrtOAFhdxAAgdgIDKyfG2DftSu5qw3hPzdyFOv7XIU4fi2wfk9FYQPMtxybw5DQqFta55UFeO8Tn5j6E9MbKwvr''@;'; put 'put ''7ktoYmMYHJrtGNBgFxAAgfgJHF8/138Tl0blidbPtb7PtTFnLTJC28pnNR2LX2YwUiwF7j5YNtFvBJ5mRBl8Wl2lzp1Ov3/x9aUNwViOHYvY0GxjoQoxQQAEoi5Q0zjz1BAO3E2wsogR1RY5QEDvPqxR11a7qdydbAuHRx0jAwJWt5QuFUjfTDBTrHIxwj6KtDnlnt3Pp2L50GxT8ahBziCQwQJ3''@;'; put 'put ''NE4vCxgfbM6xnfklggmNpFCw41UuzdtJD3uqfNGuUAZTpWzp1lUtF6iJS/NL4SIYsf+pK7/gylSdzhOabcqejpA4CGSugPUQla0p/3JTBu5zKBNOiZSQUgpT6B2a4vzBioL9/5u5UqlXufWqz9bnF67STe+dBFM2UIGUfZTSOcsL6g+lXkXHM4Zmm6pHDvIGARBAd3Vcmh3o7d+sKa5v2ljWhEgS''@;'; put 'put ''U4T8EuGn7dj+k/KiureBLPkFNjXPLjVlcKdCbQNLM3JhGip13Jrsq/oMJwvNdjgh+BwEQCDpBTa350/1Br13KTRrsUJtjsiEDR706dz/ikPN+WmW6m9bknfIn/RFZWCCtc9epuEJ/PeGDF0RLt9a1UchrsJKz+6uVCaBZpvKRw9yBwEQ+ITAna2XnodNtAYhfIXGjq93OvTHWuhAIvEGRuheVdof''@;'; put 'put ''6zSMD2Cxg+Q5iba2LSwJ8J5nGNEG/mDiwtQp1Zan4qs+karQbJPnPINMQAAEoiSwscVzltforrZT98ITXelaw1hXuypxPE0xXecKmX9OxddJosSVFGFqOhacinT9OYnEheGENJr1rN9mLF590R5fUiQ5jiSg2Y4DD3YFARBIbgFr+kck5BpMyHXqCeZcDmdPEH1bYvSIoOw3ldP3vAdTQcb/uFa3''@;'; put 'put ''lW5BUpSHR7ZW9dG0rG8sm/FsY/yzif6I0GyjbwoRQQAEkkjAerp17fMzclFQ/6lE6Lt2JXtwjt3INK2l/UwResfO3A8yibf7ZKhrTXFLfxKV85mpbOu4VEFogsPgklGT0n5FJ0qQY8NGpSqoNBnnPOgOrSl+Kqlqqmlb+DkbVVsCZu+0cIGMKDtQl/Iv6fL6FjTbVPlXBHmCAAiMW6Cm/qs5QUYW''@;'; put 'put ''S4GWKcx+Hv1owoQTBbZuMzOiee1swh6d+/YRotQhhPoSueqQtToS9WGNEFNBBtaoSs5lRPsCRuSrNuY+3eDGNJ17J+tmX5YuQkQiMfjfeOvr6ix1IpcSfTjBfvobhgh1h8y+twSnj9k4f+/7CWzAW9rm3cul/qPwcRCCd2GpzEmnua+h2Y77ny8EAAEQSDUB6wqwL+T6Ijd9twtszj7RNJCRNenc''@;'; put 'put ''3ysl8mVrU17RpdGgUdtugxvHOBPcFpKcaNkhtd8Zur70oVFPJfjb+n+3CaVLkURTuNqnmcLGpGEQQlm2RMY/SYRnEMIulFKc1hN8b6r1/inGmFKsapQo2nj8rT8qnGruMYU46rjQd0rM2xl5v3NJ3iFjPHFHum/twdKL/KH+BpU5c6x9pBRCpVlrluXv2pROt/Oh2Y70jIDtQAAE0lLAem0oYPCv''@;'; put 'put ''ZSmTvu03ugsUavvUeronK1zngT400Bwcerbt9KMqdbzNkfG+Yfr/RiR52RB6jySoH3MhqEKkkIIhRBWExCSKqWYI/iWHkjNBIvk5hm2nBY3eM3pC/3CZIjgwmQNGhI4mn2gcoJDp7861n9FkysCvHb7A3lg+OFZVX8Im2tTtQ1/14cJ8i9vsebfm7euNRj3JEgOabbIcCcgDBEAg4QLr22d9AZv8''@;'; put 'put ''KkbUqwwRPJ9gqhBMPzUlZMITPUkC1lWhRFJYyxBKJCUa+P9yYGuMMbb+9/gUl4RghMnx3534R0huutUp9Qb3387YsYOxuNKtaS+7yjSDj1LCBtYutr4zZ0hdVlHc8OtkNR5rXtBsxyoH+4EACKStgDUdJGooUR1KYI6N5SySUi7SuXfaeG/ZRgvMakoKcXQRjI5QqrXrPHCYmwGvIQIfcsTfZcT9''@;'; put 'put ''jkqFty+k9Q0dU3X4s4lunG5yfiYjyufsWm5xQO8rUqnttJPlZjVujblekdy4Mytk7IzWla61Vu0EGz3EpXl+eGyNZj2zdMYzl6fT7eNwbdBso3X2QxwQAIG0FahuLbRjk+UEcahAY7ZLNOK+pD/0/vkCmW6F2LMoUQauzKL1Y32Pago9YGMuL6XqEYbYC0He9xZC6GVpsne5U+2agLqNI/azzaoL''@;'; put 'put ''duhjHdd6UrumrdCGOT3VIPhrutFf7lCzP7V2sBXfutKVUh60kewbb/Y8+8pYxwzvt6Vt3o9MEfrV4NW1RP0atS+6qeC55vHGTsb9odkm41GBnEAABJJeYFvHpY5OTu1KCJ/GEf+8JORUjdpzGVJPVZnrLILIWbrpzzFkUDOFQax7uAgjoRG7oSouv5DysJDme7rpPyIx7xZcD5hC9yLMj1JC/mow''@;'; put 'put ''ckTpyQn6VD0Ur1muqjouddh86ldVpvxbkPdfdaIHx3Qe6Lez7EelKdeumLnv72M5UJuen3+GItB+U4S+EN7fetWnK2BeF69ax5L3ePaBZjsePdgXBEAABE4isH371fRvX+y1aQFKeSBANGbikMmkrhhcIdPMSs+OQDLjbW4qOjMgA9WUqJeFp08cmm/Q9Ha5tMm/lBI/OJrXoSyXI2f0buUydGM4''@;'; put 'put ''nmEGj6jUvqiiqOGlZDYZT27QbMejB/uCAAiAQJoLbGjxfJkRezUXoTknelgMY/Yywfhn3QHzmZFclVqv+vhC/QeGzl3NkFJR7tm3OZ0podmm89GF2kAABEAgSgJ3NU9fnKNN+7HP6L4Io08/xexUpjweNHo3Lffsaf2sIbe0z3+Mi9A/h7cRUrzjEO5Lls58pjtKqSZlGGi2SXlYICkQAAEQSD6B''@;'; put 'put ''qtfOV909U2/gUv8FJSw3MsOBp6Spcxsj4vZl+fs7Iz+vaSm7ypC+h4felsaILKnw1N+ffNVGNyNottH1hGggAAIgkPYCNU3FZ+vIvINgcuWJnsRmxPYGFuh2A/U9UelpG/hu+q6OudlKSK/HGF8cBlKw9kSnO/va8TxRnSrY0GxT5UhBniAAAiCQZALVzUV5PaEPfuXSJl8U2XSPvyok2jWSXY4I''@;'; put 'put ''elsI/dumDN1tTTU5UIZEfUgST2Vx/WtJVlZM0oFmGxNWCAoCIAACmSOwvrloZsjsfcCpTvxiZNVCCm5Xcv6uYtXdb3w4Mfw5Repjyz17r84UJWi2mXKkoU4QAAEQiKGA9X2u2mnfyIhyAyOa/bOGEoJ3U0qKKgob/xzDlJIqNDTbpDockAwIgAAIpK6ANSPVXe0FZxFTriWYXnGy6S0Voq64uWDv''@;'; put 'put ''ltStdPSZQ7MdvRnsAQIgAAIg8BkC1sQV7007fJ7A5E6CyTeGbqrz4OvI7vKk26o+w50Q0GyHE4LPQQAEQAAExiRgLaGXpfAbhDRvZ1SdTJGiE8wW3Fz4XMOYAqbwTtBsU/jgQeogAAIgkAoCtY0zJyNVu19KkhXktivXFD/Vnwp5RzNHaLbR1IRYIAACIAACIHACAWi2cFqAAAiAAAiAQIwFoNnG''@;'; put 'put ''GBjCgwAIgAAIgAA0WzgHQAAEQAAEQCDGAtBsYwwM4UEABEAABEAAmi2cAyAAAiAAAiAQYwFotjEGhvAgAAIgAAIg8P8BcbF+IvaVe9EAAAAASUVORK5CYII='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=select-table-png; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAAdsAAAGTCAYAAABgcbg1AAAAAXNSR0IArs4c6QAAIABJREFUeF7sXQecVNXVv+WVmdm+gKBgRY3GLxqlLNsQY4nGoFGDGhOjsVNEqiXFoKJIEdTYiCWxRlEESyAWBNkCKGpMYo0FQRTp26a89+69X+7Mzu7b2ZmdXnb2zC+R3Zl7zzn3f+7b/9xyzsEIXoAAIAAI''@;'; put 'put ''AAKAACCQVgRwWqWDcEAAEAAEAAFAABBA3ch2ycYrSpqdjKrEgYvaAbK4JuSPJvP6/3Ux3f9vKl4mc3eTZZTELr+ItfVoSwstiOsLhdbk67G9Sl1xyQvg1n2ModjZ5bppwAaVOvz/KsToprMnn4Tqi4ZnpDEnMtZY50QsmMQqK1y74Jij+dPeN3S8oX4I+iKIfbBvLM9FT+ON5p9oczwWnOJ9Duwy''@;'; put 'put ''48EwFltiwTw4/+1z30van4e2wPPgpSZWiO7/mfk8hGjU+8uj798Trw3QHhDIBAIdf8SXNI5zGq7yvzrVku8TTDVKVAUjQjHCGOMAKQuBhP+39pdAnWSNEepGekKIsEQopKT2V6BfZ7PgL+3v2PrHy++ddgYNxn57O3nLbn9ksANy4mVY+xgjjdWPKeq0E0mspS4/3lii0q7b3kb2acdPCG63O4Bd''@;'; put 'put ''AKcgrl3ADTPILoC09+wJFzkf4p2Ydrvi7Rtve2ybWz341P9R13FiTNpxD37WPu3lgNvHTBBCAcjlmKQfgvPePtcDHgg/90Nt6vrciK4PQ+dzFvwp3ocgMJs6n7Uu6mP1ZWzPSUB06PPck/+6zv1g/y7zyz9e+R/p1/Z574deyDe4fI+zgF6iMeH9zBJt55x71H2t8c4baA8IpBuBjgfxkbfO39+H''@;'; put 'put ''PJ95rL1aupWCfEAAEAAEUo1AodYfKaR4n0uO+8uOVMsGeYBAsgh0kO3ijecNFcL7kdvcqyYrFPoDAoAAIJBpBCTZEoP0u6zq2d2Z1g36AIFoCHSQ7QPvnXMYstiHbnOPEq0TfA4IAAKAQK4hIMnW8njLJ9T+Hc5tc805YE/nUeRD74w71OLmR0C2MCsAAUCgNyIgybaNsrKpxy7f2xvtB5vzG4GQ''@;'; put 'put ''bWTfx0C2+e1wGB0gkK8IANnmq2fzY1ydF6TePvsQA/FPgGzzw7EwCkCgryEAZNvXPN67xttBtg9uGHcwI+anPZEt46ZPIG4PN+kI7rFf2O8MeuiIVEggZKF3AZmgte34+4Mwgj93hPtQouo9yWXcMgViZrsT8hTj2EJoAlEncUUl2RoHfmyfw1KOdAcmWNHsoW7hfGFxn0eIQPhJ11e4EKmYxxJO''@;'; put 'put ''VbzjS3BKZr2b/ZnwuyXwH0ykXyhRI0ZLANlm3XdgQA8IdPzBuf+9nx2ELfTfnshWI/opFmL/kvKIYfBW3ddBvJrbhYVmyEBEpFIW01+9tiRcozGas+RixmhbECf5r0GcWPXKfzlWiY5VpBSVuoY8tcP9+bHhYBIyxhbT3zBFvGp5GZN4mIrV5Y++Thn29uALzd3pJ8OWrCNW/4WzK9axJ+H6HrtG''@;'; put 'put ''sz34ueHhGKGCgKz2f4KChWEShVFKNO2nnBv3RiJcl1q6wmDGTB9r2okNjRPdx32MCoelCK9idTwD0g9B2T35I3Rgdv/YP7P7Kls4pkJvpLlify6kHtlOqBpRGR4qBK+PpFuSbekXRDn33GfDfPlJhcUgAxBIHAHbme24A4QwP+95G7loyLSql7cmrg56xorAkg/GaYgPeuXrln+NCU+2nCMujpxe''@;'; put 'put ''W/9prDKhXXwILGo4sZIh31qCadgb+i6t/MGrhi+7Ij6p0DpRBO7ZcGI/g1k7gWwTRRD6ZROBDrK9960z96cYf9ET2apcG3x1zWvfZNPgvqJ78cYr1BKHvvKb5n+dGIlsGWKHX1vd+HlfwSTT47yjfswoga16gikNp7tA7f/IlSOWXpppu/qqPiDbvur5/Bh3XGSLEB0yreoNWNlmwPexkC3G1vem''@;'; put 'put ''Va37LAPm9EkVd647ocLiZkMksi3UBz1+xbBnft0nwcnCoBc2/rgcIe8uWNlmAXxQmTQCnRek1p89hFH+Zc/byEC2SSMeo4BYyJZwcdjU2vovYhQJzeJEAMg2TsDS3BzINs0Ag/i0ItB5Qapx3GCsmpuAbNOKd8zCJdkWadqKba3/PinSNjK38KEzj1/7ZcxCoWFcCATI1mogmITdRi5S933i8hFP''@;'; put 'put ''XxiXUGicMAJAtglDBx1zAIEOsn343TP2Mxn5Csg2B7yCEAKyzb4fgGyz7wO7BUC2ueUPsCY+BGy3kc/eVwi+Gcg2PgDT1RrINl3Ixi43Ktlqg568fPgzv4pdIrRMBgEg22TQg77ZRiAusoXbyJlzF5Bt5rCOpCkq2cI2ckadBGSbUbhBWYoRsN1GHjeIYnMLhP6kGOEExQHZJghcCrtFuyAFZ7Yp''@;'; put 'put ''BDsGUUC2MYAETXIWASDbHHVNLGRrEHPoDZXrN+XoEHq9WQsba0dyIRoh9Cc3XAlkmxt+ACsSQwDINjHc0t7LH/qj6Su/aY2c1ALINr1uWNBw/AiE2Dog2/TiHKt0INtYkYJ2uYiALc72jIGMkq9hGzk33BRLnC2QbXp9BWSbXnzjlQ5kGy9i0D6XEOiMs33/rH2wIbYC2eaGe4Bss++HhfVjhnNs''@;'; put 'put ''rY+0si3SBj52+fAlF2Xf0r5hAZBt3/Bzvo4SyDZHPQtkm33HANlm3wd2C4Bsc8sfYE18CADZxodXxloD2WYM6oiKgGyz7wMg29zyAViTOAJAtoljl9aeQLZphTcm4QvqaoYhguQ2ctgSe7CNHBOMKWsEK9uUQQmCsoAAkG0WQI9FJZBtLCiltw2QbXrxjVc6kG28iEH7XEKgg2wfeXfcAIOZ30C6''@;'; put 'put ''xtxwD5Bt9v0QC9ludYrLZx31rJF9a/PfAiDb/PdxPo8QyDZHvRsL2ULVn/Q6LxrZFmoDH/sGyDa9TrBJB7LNGNSgKA0IANmmAdRUiASyTQWKycmIRrbyzBZWtslhHE9vINt40IK2uYYAkG2ueaTdHiDb7Dtm0bra4xgXGyJdkIKVbWZ9BGSbWbxBW2oRALJNLZ4pkxZI16it+AaKx6cM03gFAdnG''@;'; put 'put ''i1h62wPZphdfkJ5eBGwl9sb2F4J+Cxek0gt4rNJjKUQAZ7axoplYu2hkW6QNeHSrE18BF6QSwzfeXkC28SIG7XMJgVCylbeR1cgG0iHTqt7YmksDyFdbgGyz71kg2+z7wG4BkG1u+QOsiQ8BINv48MpYa0m2xZr6929b/3NyOKVCcA4r2/S6A8g2vfjGK/2+upoyL6W7I/Ur1Pqj0i+Icu65z7J4''@;'; put 'put ''ZUN7QCDdCADZphvhBOXHQraEi8Om1tZ/kaAK6BYFASDb3JoisLLNLX+ANfEhAGQbH14Zaw1kmzGoIyqKRrZwGzmzPgKyzSzeoC21CADZphbPlEmTZFuoKS9/1/rBKZG2kWFlmzK4wwoCsk0vvvFKB7KNFzFon0sIANnmkjdstgDZZt8x0cgWbiNn1keSbE3WtEWluiucZjizzaw/QFt8CADZxodX''@;'; put 'put ''xlr7byPr9KVtLR/+GFa2GYO9i6JoZAvbyJn1y8LGynKT8S0qdQDZZhZ60JYCBIBsUwBiOkT4yValL21rA7JNB76xyIyWrhHINhYUU9emnWw3q9RRACvb1OEKkjKDAJBtZnCOW4sk2wKVvri97cNTYWUbN3wp6RCNbGEbOSUwxyxkTl1NGUGmXNkC2caMGjTMFQSAbHPFEyF2+M9sVfLCd20fnQZk''@;'; put 'put ''mx0nAdlmB/dIWmFlm1v+AGviQyA0N/JWyCAVH4Dpag1kmy5kY5cLZBs7VploCSvbTKAMOtKFAJBtupBNUm6AbPHy79o+/kmklS1kkEoS5CjdgWzTi2+80oFs40UM2ucSAkC2ueQNmy2zVo9RhpZ/74UdQLZZ8xCQbdagD6sYtpFzyx9gTXwIANnGh1fGWkuyPbTf4cu3t35yOqxsMwZ7F0VAttnB''@;'; put 'put ''PZJWINvc8gdYEx8CQLbx4ZWx1n6yLTts2Xb3pz8Fss0Y7EC22YE6Jq2wjRwTTNAoRxGA4vE56hgg2+w7Bla22feB3QJY2eaWP8Ca+BDoINv73z9rH2wIeRtZiSwC6tnGB2/irSXZHlJ22LKdsLJNHMQkewLZJglgirsD2aYYUBCXUQSAbDMKd+zK/Bekyg5/fof7k7GwjRw7bqlsCWSbSjSTlwVk''@;'; put 'put ''mzyGICF7CADZZg/7HjX7ybZ06NIdns/OALLNjpOAbLODeyStQLa55Q+wJj4EgGzjwytjrYFsMwZ1REXRyBZyI2fWR0C2mcUbtKUWgQ6yfXD9GQMZJV/DmW1qAU5UGpBtosilrl80si3SBj621Skun3XUs0bqtIIkWNnCHMhHBIBsc9SrsZCtQcyhN1Su35SjQ+j1ZkUj20J90OPfOPhlQLaZcTWs''@;'; put 'put ''bDODM2hJDwJAtunBNWmpQLZJQ5i0gKj1bIFsk8Y4HgEQZxsPWtA21xDoINt73xo3iGJzC2wj54aL/KE/5UOf29n22ZnhLBKCc1jZptdX0ci2SN33ia0udimsbNPrh6B0INvM4Axa0oMAkG16cE1aaiDO9pBnd7o//xmQbdJwJiQAyDYh2NLWCcg2bdCC4AwgAGSbAZATUSHJ9uDSQ5bs8nx+ViSy''@;'; put 'put ''FYgdMqO68atE5EOf6Ajc0Tj6WCH4WwTTsIleirRBT2518ktgZRsdy1S0ALJNBYogI1sIANlmC/koev1kW3LwM7u8X5wNZJsdJwHZZgf3SFqBbHPLH2BNfAgA2caHV8ZaS7I9qPTAv+32bPo5kG3GYO+iaF5D1Q8JIm/DyjY7+IdqDZCtsVmlzsJwFhVq/VHpF0Q599xnWW5YDFYAAp0IANnm6GyQ''@;'; put 'put ''ZHtgyYFP7fFuGgdkmx0nzV9fezRmfCPBihrOArgglVm/ANlmFm/QlloEOsh28caz9xWCb+7pNrLKtcFX17z2TWpNAGnhEAiQ7f5P7PFuPi8S2ZqcH3x9bcNmQDA9CMxvqPo/jPC7kcgW4mzTg3vP28iwss0s6qAtVQjERbZYc+w3dfgr36ZKOciJjIAk2/1Lhjze5N1yfiSyRRY+aPrxa7cAjulB''@;'; put 'put ''YGF99VEco/cirmy1AY9udeIr4IJUevAPlbpo9ZhSn+LerFFnEWwjZwZz0JI6BDrI9k/vnrGfyshXPa1sgWxTB3w0SbGsbC1qHHjdqA1fR5MFnyeGwIK1td8XlP+TRthGLlT7P3zFiKWXJSYdesWLQIBs2zZr1AVkGy940D7rCHSQ7cPvnrGfGYVsdQXvO3Hkmm1Zt7oPGBDLBSmMrQOmVa3b2gfg''@;'; put 'put ''yMoQo5Gtk5YvHl+x7KqsGNcHlQLZ9kGn59GQO6v+NI4bjFVzU08rWyDbzHl+8cYrVAe1nukpzhbINr3+8JMt4f+kJPwFKZ0W3TOx4uWr02sFSA8iIC9IYWR81dM2sukkRROPerYVUAMEcg2BuMgWITpkWtUbsJLKgBeXfDBO85qlS3e6P/1pOHWQrjH9Tmgn2/coUbRw2oBs0+8Du4ZYbiO3UVY2''@;'; put 'put ''9djlezNrGWgDBKIjYCtEcPYQRvmXPa9sC46dOHLFP6OLhRbJIrB44y/6l+oDlmxtef+E8GQrOBbqmGk1q+qS1QX9wyOwaMOPfsQs3z8i3kbWBj7WpO6dMPOYV9sAw/QjcMdbp+wvTPcXkeKeZZwtkG36/QAaEkMgLrLdt+ioeoLoToQRoVjjAnFLqsWIYowQQVj+gxFGol0u6W6Vv03Xl79T4GXr''@;'; put 'put ''3963vX1Qkuho2ylHdhYo8LtNFiLtfYOfoYCB/pdApJsdgf7C1sYvV4SDFiPuf18g/2D9P3PBROB3/z+c+xswgREWDAkufw7IE0LI/wsmm8i+8j2pnbQLxEIw4bWafrrLvckRybXl+gH/UTXnJyp2StAxwYpAwmYvlqBggiUSApF2QDDCfn/J//n/L/9DMMWys+wSwJi0YxEQYrdB4tn+RrvdkSef''@;'; put 'put ''HGg7PAGQbK8gtp3zpdu8CHg07EsgbvNNpz8k9n4/Ci4hbveHH2/5s+DyJb+pMCE448iyuLDkz1z6hSP5m8kopophef5vr2/LsZFGV6wP2uNUyl4XmPsoUUm7ukBCBakOYyx4YADEP4ElthjLH7EgBBGB/S9E/S7wf+b/3f84BeazdF7AT4Hf2ueo9GH3Z6LjHX/D0Gci+DwE5m1QVvfnMej/yF7t''@;'; put 'put ''/CSIe/BZCPrajr8EQ45Ytg08E50+CkriyD9RuPSDQEz+y2RDizHGkeGzuEm5YEV7PJvC5gqXcoBsY/EYtMkWArakFmfuTzH+oueqP9kyE/QCAoAAINAzAkC2MENyGQEg21z2DtgGCAACMSMAZBszVNAwCwjYklqMO0AI83NY2WbBC6ASEAAEkkYAyDZpCEFAGhEAsk0juCAaEAAEMocAkG3msAZN''@;'; put 'put ''8SMAZBs/ZtADEAAEchABINscdAqY1IEAkC1MBkAAEMgLBIBs88KNeTuIuMiWCybDGsKGwkRAKErbeETlrQ9sAwtGLwXeihRPGOwgwyMECkQYwSsVCHQJM8IYExoIu4n84sIyAyE/tmYhoVLhevcoNBVDyTsZgWejp2cCyDbvnJ5XA4rrNjJB6kU+3Po2FVhgRjkjnDFOBCUcMyywxhixsIqDv4ci''@;'; put 'put ''RU015G+MgSyiYIVbCbMuUwNxpdQMxPYGfw/qDr4faktou2helWMO10aOP/i+IsyOnxkPtGdq5+d+OwUWEqugPPlzwH6OiUooshRCFItyoZaVOYY83OTbemg4vfIP/P/+8MzmzFwqKPNhxjgjCsOW1UG+FhGYklDMw480aEcnbjxpPqAkGG8dkBrExD9eIrD8PbSN3To5l6L5JdLndl9EkxG0K2iL''@;'; put 'put ''oJRgRnVC1fM4YtdHIlyK9dWM+f5oMW8gX7hCOTM4U7WAz02DY+RASDE4tjQi5L/yfemXAAaB8dmxl/Mgmr3dnqsQnOPtn6n2dv+HezaCz4HdHvn8yGdFCKxoRDlOIPRUJHuheHymPAl6EkEgLrKFeraJQJxYH1mI4ODSoc/t8nx2Zniy5VxgetSMqjUfJ6YBekVDYNG62uMYF+sJpmGLxytEnz95''@;'; put 'put ''1KvXRpMDn6cGgXs2nNjPYNZOINvU4AlSMotAB9k+uD56ukYg28w5J0C2By/Z5fnirEhkyxA7/Nrqxs8zZ1Xf0nRHXc0xgoi3I6VrVIlzwdWj/jGzb6GSvdEubKwsNxnfrFJHQTgrYGWbPd+A5ugIdJDt/TFU/QGyjQ5oqlq0r2yX7vJ8dkYksuUWPnTm8Wu/TJVOkNMVgYWNo3/ABXsnEtnqSsFd''@;'; put 'put ''E0eumAK4ZQaBQCECcwuQbWbwBi2pRaCDbNuLx8sSe2G3zKRaINvUgt+TNEm2Q8sOf36H+5OxkcjWIObQGyrXb8qcVX1LUzSy1WjxnyZVvDS5b6GSvdEC2WYPe9CcPAK228hn7ysE/wrINnlQUyFBku0hZYct66nEnkDskBnVjV+lQh/I6I7A/PW1R2PGN0Zc2UI924xOm1hK7JV+QZRzz302UAwC''@;'; put 'put ''XoBADiEAZJtDzrCbIsn20H6HL9/e+snpkVa2QLbpdV7gzBZtjBRuAvVs04t/qHQg28ziDdpSiwCQbWrxTJk0SbaHlR/x4ndtH50WiWxhGzllcIcVBGSbXnzjlQ5kGy9i0D6XEAgl2809FSKAM9vMuW7xxivUIpW+uK3tw1OBbDOHu13TvIaqHxJE3o60stWUknsnjXxxUnas63ta4cy27/k8n0YM''@;'; put 'put ''ZJuj3pRkW6gpL3/X+sEpQLbZcdIdjaOPFYK/FYlsHUrJvROAbDPmHCDbjEENitKAAJBtGkBNhUhJtsWa+vdvW/9zMpBtKhCNX0Y0snUqxfeNH/nSxPglQ49EEACyTQQ16JMrCNgySI0bRLG5BbaRc8M1/m1kTVuxrfXfJwHZZscn0cjWoZTcP2HkixOyY13f0wpk2/d8nk8jBrLNUW8C2WbfMVHJ''@;'; put 'put ''Vi19YMKIF8Zn39K+YQGQbd/wc76OEsg2Rz0rybbEoa/8pvlfJ8LKNjtOas+NvCHimS2QbUYdA2SbUbhBWYoRALJNMaCpEgdkmyokE5cTjWydtHTx+IoXrkpcA/SMBwHIjRwPWtA21xCIi2wRokOmVb2xNdcGkY/2LPlgnMbFoBWwss2ed6OTbfni8RXLgGwz5CIg2wwBDWrSggCQbVpgTV5oLGQL''@;'; put 'put ''hQiSx7knCdHI1qWU/fmqkcuvTK8VID2IAJAtzIXejACQbY56z7+NrGkrvunhNjKQbXqdF5VstfIHrxq+7Ir0WgHSgWxhDuQDAkC2OerFWG4jA9mm13nRbiO7gGzT64AQ6bCyzSjcoCzFCNiKx58xkFHydU9xtnBmm2L0exAXS1ILINv0+iMa2TqV8ofGj1x2eXqtAOmwsoU5kA8IANnmqBeBbLPv''@;'; put 'put ''GCDb7PvAbgGsbHPLH2BNfAgA2caHV8ZaB8hWefnbHnIjw8o2ve4IkC3bEKmerUvt9/BVI56/LL1WgHRY2cIcyAcEgGxz1Iv+M1udvrSt5cMfhzNRCM6BbNPrvEDVH/xWJLJ1Kv0eGj/yedhGTq8bOqTDyjZDQIOatCAAZJsWWJMX2l5i76VtbUC2yaOZmIRAPVvxNqxsE8Mv1b2AbFONKMjLJAJA''@;'; put 'put ''tplEOw5dkmwLVPri9h7q2cLKNg5AE2g6f33t0ZjxjUC2CYCXhi5AtmkAFURmDIFQspVVf9TI2iGDVKY8469nq5IXvmv76DTYRs4U6l31LGwc/QMu2DuRt5HhNnImPQNkm0m0QVeqEQCyTTWiKZInydal4uU72j7+CZBtikCNU8zC+uqjOEbvAdnGCVyamgPZpglYEJsRBIBsMwJz/Er828gaWra9''@;'; put 'put ''9ZPTgWzjxy8VPW6vrz6KYvQexUrY3R6Is00FyrHLALKNHStomXsIANnmnk/8FvnJVhHPb3d/+lMg2+w4acHa2u8Lyv8JZJsd/EO1Atnmhh/AisQQALJNDLe095q1eowytOzw53e4PxkLZJt2uMMqmLtu1JGE0fcpCb+ydSnlD141EnIjZ8o7QLaZQhr0pAMBINt0oJoCmX6yLR26dIfnszOAbFMA''@;'; put 'put ''aAIigGwTAC2NXYBs0wguiE47AkC2aYc4MQVAtonhlspeCxorjxCcyJWtFk4ulNhLJdrRZQXIln2lUmdhuNaFWn9U+gVRzj33WRZdGrQABDKLAJBtZvGOWZsk20PKhz63s+2zM2FlGzNsKW04t776ewShfwHZphTWhIUB2SYMHXTMAQSAbHPACeFM8JNt2dBnd7o/+xmQbXacdEddzeEc839TooZd''@;'; put 'put ''2Tpp+eLxFcuuyo51fU/rnLqaMoKMzbCy7Xu+z4cRA9nmqBf9ZFt6yLM7PZ9HJFuDmENvqFy/KUeH0OvNmvdmxWGY0v9EIluHWvrAhBEvjO/1A+0lAwCy7SWOAjPDIgBkm6MTI3Bme8iSHZ7Pz4q0sgWyTa/z5jVUDcUCfUCJqofTBGSbXvxDpQPZZhZv0JZaBIBsU4tnyqRJsj249JAlu4BsU4Zp''@;'; put 'put ''vILmvznyYESVj4Bs40UuPe2BbNODK0jNDAJAtpnBOW4tAbI9eMkuzxewso0bvdR0mLNu1EEKwx9TosHKNjWQJiUFyDYp+KBzlhEAss2yAyKp95NtycHP7PJ+cTZsI2fHSQsaqg7kQnysEM0RdhtZKbl/wsgXJ2THur6nFci27/k8n0YMZJuj3gSyzb5j5q6uGIJV8t8eyPbe/pv0ayCuMzO+kmSL''@;'; put 'put ''kfGVRp1F4TRCnG1m/ABaEkMAyDYx3NLeC7aR0w5xh4L5759SoDdRl6X4NKEoBFsWVzkVFjW/bzHj5UhntrpScNfEkSumZM7Svq2pnWw3a5DUom9PhF46eiDbHHUckG36HDNLzCIDGxv7W0T7vqpovyCIVDf5vh3MhRVS3QcjhWgFGHc8Jl2MUnHBoqsrV0xLn6Ug2Y4AkC3Mh96MAJBtjnovFrIV''@;'; put 'put ''iB0yo7rxqxwdQs6ZJVewDq9yJEF4SpN326kq1QsjrVojGS+EQEHydaglD/T/Up8E28iZcTVsI2cGZ9CSHgQ6yPb+98/aBxvia7e5J2ztzoB6OmRa1Rtb02MKSLUjAGSbuvmwZMk4um1Ia42F2uZa3DhaIbozWemSdAv1gV9YyHPRxOEv1ycrD/pHRwDINjpG0CJ3EQCyzVHfANmmxjF3rj9xoEDo''@;'; put 'put ''JsNs/ZVKHQXhpDJuGVyYBhfMFIhzhBDGiGCMqUKxqkfKjSxlCcG/cinlV5q7jDWTf7LSlxqrQUo4BIBsYV70ZgTiIluVa4Ovrnntm9484N5ieyy3kWEbuWdv3t140rEM878IwY4JbSkJ1sfa9jiUwic8vj1rsa69r7jJXspNS7ZlRFWwohRZ1HdMobLPGCZ8Yy1hHBjuZjLjps+plrwqkHXzwK9K''@;'; put 'put ''34Nt5fQ8ZUC26cEVpGYGASDbzOAct5ZAIYKDnt7p/vKccJ2F4BzINjKsi9adeJLg1sMIowPsrSQxqsS5xme1PkQ8npUzf/yvtlids7BxzKEm89wskBgb7kasxX0ehRY8qDIyd1d19bZZeJZcJcMrRQgA2aYISBCTFQSAbLMCe3SlkmwPKjvo6d09kK3J+cHX1zZsji6tb7W4a/3JP6FIeczg7n7B''@;'; put 'put ''kQshuMHcnyjYcd3M2vqXkkFkwcYx/bHJrzTNthmaUlgaKstkPrdCtD9h7Jw3reqV3cnogr6dCADZwmzozQjERbZwQSpzrvaTbemBf9vt2fRzWNnGjvuC9cefbBqtz+hKYVkn0cpzWDzfYZDZE09Y0xq7tJ5bzq2v3k8j+u1MGBcQTGloa8Nq+8ipFF+2p/KN9bMwglVuksAD2SYJIHTPKgJAtlmF''@;'; put 'put ''P7LywAWpA5/a5dk0Dsg2NifdWXfSASbyrKFUOTjYw+I+N+Pm7TeMfueW2KTE32pufcUJROBFhGhH45CgXC4sU8H6S4yJm6fXrn4/funQI4gAkC3Mhd6MAJBtjnovcEHqwKd2eYFsY3HRotVjSlWXc4XB3JXB9gZra1Kx64LpNWtXxCIjmTYy/HZBfc3PKFXvQIh3kH1QpiRdgtSlCKM/TKsqLbZ5''@;'; put 'put ''AAAgAElEQVRa81kyuvpqXyDbvur5/Bh3XGQLt5Ez53Qg2/iwvqvxpMWWMC63ryyFYNOnV9cvjE9Scq3vXl9R7DHFbwUS4zXqKg6VhhHdoSqOuw2L3QfnufFhDWQbH17QOrcQiCuDFJBt5pwHZ7axY333+tOGGFbre4SQ/sFeBCkrzQI6buYxr8Z82zh2jdFb3rZhZD9ikt9hIa5UqcNl7yGQvK7F''@;'; put 'put ''vlKwfptZqDyVLRujjyK3WgTI1veVRl1QiCC3XAPWxIBAXGQLF6RiQDRFTRZvvEJ1EOPpXd4vI5bY4xY+dObxa79MkcpeK+bet8Yu8FnN04MD8FltTQrVTptZ3bgum4OSW8sL62sO8/K2R5xqcXWoLVwwC2H0jiL0q6+pWrURYySyaW+u617YWFluMGsTkG2uewrsC4dAXGSrENf+k0et/BqgTD8C''@;'; put 'put ''kmyd1Fqy0/P5z8Jpk3G2DLHDr61u/Dz91uSuhvsbTtmHaIXvtJm7hgStFEjc01K59ppcuQF894rTdKOkdSzByrxw57kyPpdifSm3xI3w5SnyXJNkazL2lQpVf3L3gQTLIiLQQbb3vjVuEMXm5p5yI2u04HuTKlZ8CnimH4G/rB7jUMuPXLa97cNTI5Etwnj49Kq176XfmtzVcO+Gn17rtZpuw5j4''@;'; put 'put ''Q284t7bpyDUsFzOdSbIQnNxkCvOicDVZiVB2CiJu1i3jiQm19XtyF/XsWCbjm5HP+pZgqoSzIN31bOVOxf31p5eqql7AEHYylfvtoCaxGLG82GG1jv/B3/fCDkV25keua42LbIv0fW8yedsGwRBjwuBCcMEx98vAmGKCBOaYYsyE/z2CSYd8jgPv2YMRWTs63QIUQ1CTMv3yBOvYZpPvhf4eCra0''@;'; put 'put ''Jx0O4Ah32+4T7bYREfiMCy4E7WzXxdYw/YPYBfs7qKvIQUsW7fR+vn94shXCoRT92RLGiwJhU7aRNhBBbBgFfEMxIXYZnAfw9L8oQkF/hfrMP44wfgu1J+ifoI9C/SX9HBxXt75+vIIzAaEgZhKvAM4MCYGEBJTL8bVjyhnFuu4qdpLia5t8X1cF5QqE751etWZSOvyeKplz6iqGOajraoH4ReFk''@;'; put 'put ''Fqj9PjKYd7XAbIVg5h7DP7dMRLDAghHCMcIEUyw4IfK9gJ86fSoZQH4elB18RoO/y2fVrjfcc+KfI1HmRk94yPkf6XP7c2Gfe/45jLAgRPqey1oPQm7fCMFMpCJEGTlYYPZYJLnpIFtJsA+v+3GZ0It/SDC9wKmU/rDJ+93BbdYOnTOG5RQlSOMurcwo1vfZLBD/3GLeNwXz/H2X1vodnMen6qnp''@;'; put 'put ''/XI6HrrFG8/eVyZV77nqT+8fcG8ZgUyKTzDtoQJTbxlJcnbK9IqBP8L+v92hf8AFxaozGNpqccOLED/n2poNaQ/1SW5Ugd5z6ytOxogsoFj9QWh8rvzcYqaJMJdfpOzkiG2/Br7odvkYoXjLBqZiLKmU0ZPPw+WmDupOJdkubBzn1LDnSIrJVYiQMa3Gd0Mo0WKuFmUwT7OmuN5xKcVz3KbvHbh5''@;'; put 'put ''nsoZ0jtlAdn2Tr+B1WEQ0GnhB8jdNiqVWaLSDfSsjcNcDrf6S0u4b3GpZQPD6bPX0E23Pb1ZfirIdvHGsS6DmbWaUjhhj3vzCeG2++PFyG3u3Vag9rvD4L7F19U0tMTbH9rnBwIdZPund8/YT2VkE6xs88OxfXEUClGfmTzq9fN749gXrB7WnynKHwTiF4eLzwXCje7VZMn2rvWnDEMCzfaxluOV''@;'; put 'put ''CKtYIYSwhOHh3PT5t7f9WwtYIVhVKVZ0SlStB0vXaFS5clLFKrj3Et2dedcilGzlNnLYywd5N3IYUK9HoDsB4SnTqtbc1ZsHtqiu5hC3aH3UQYsqg5e+7OMB0o3s3UTJVsa093PqZyKE7zC558BQDXJbW2CxmSCl3sfa1mJufc4x30QJbvVZVLiQ6vAq7oHYoocV6v0rTOY5lxJlcDj/eazmnU61''@;'; put 'put ''ZMaQLQOegFKMvflJjd92INv4MYMeOYJAKPFwbp0zo6bh+RwxLykz5jVUnUMEuRljfAQOueAmBQPpdoc3EbKVRFugmvMF4leGrmZN5nUrWFtrIu9fMNJWxroFLI8GnF71VI26rjKstiqVOgrs1spQL00p+QPnzfdNq1rnSWqiQOdegwCQba9xFRgaikA3smVW7Yzahvp8QWphY6XTYugSk3tnOdXi''@;'; put 'put ''juxYsNIN7+F4yXbJknF02wHNV/uslrn27V/GLUMg9IZA1k3X1WxYn8x8mrd+9GEKx7O5YOeEVobigr2iUP2iKaNWfZeMDujbOxAAsu0dfuqTVsqchh0DxzKODHcJWQklW8HF6ZkoOpBpZ8g0hQQZv8eYjFeI3u1GrB0HSRT+AJowq+HArebA3eVwW5yZHleq9cVDtv7sXg211zNk3Wi/4WxYbXsJ''@;'; put 'put ''Vq+5tnZdxBCjROyeW1d1Yalz37ltxs597f1dSnmDlzdPmDJq1b8SkQt9eg8CcZGtigseNkXbJ0gG2GLBhJDBtpbhDzYLhGe0x9wG4mv9zRD2x8v5fydcYN4Zeyvfw7a4hWD/UPj8f2fDvPziQ16YhIuBDcT8Be0MdpF2SZuCv3eMIyRGEHfEnYSTHWuKPVnOlCDcoY8iab9//FgQLCjFWEYTEhUT''@;'; put 'put ''SnXqGOCgJVe1GNs7CqB3HaoQKil4jTHPGxayWoRgjGNuII4shDmX8Yq43R/y54A/Om2VIZuiPUbT7oOOPu1+kp91vNfuq6A/pL+C/gzKCJ0Dof6Rc8L+nt0nQX8E5oycYkhI1Pw2SHukYv+HiDq1ogOKtIGTdns2l3T4E/Ebp1fVpa2UXrYf6wUNVQd6rNZHnUpJDWlP4mG3iSDFawnfrYbl/ZfA''@;'; put 'put ''FqNIUbhAJibM4DL2XYblYqRiQXSM/JGrCsEyNFsG7WKKBCYEyzhegQnvjCfiBAl7nLQMeu58ZgLPZjAeW/5MOMGcdvbHtudUzvQuNrOuz4/sJ9tLV/vnV/uzT5Di1KnjSB9r+3UkP8RDtgvX/WgsZ+ZThJDCoDyv1bxLxerlM2vfWpYOX8vzeIvwZylWj+v6DNBPKMFnTx616sN06AWZuYFAXGSL''@;'; put 'put ''Ncd+U4e/8m1umJ7/Vjz49nmPtJjbfhP2i4ZM10jxEdeOWvvf/Eci/AgXv33O023mzvOCn+qKa8HEkStn5jsec9cMPxkr2kKKlaPC1c8lSFnq4+7f3VD79hf5hMV9dTVlHkJ2hYtJluOMlWz9dY+xZyMlyoAgPh6zaYdGCsfOrK3fkE7MbltbO6BIcz1ucu+P7XqcStknHqvpymlVq99Mp36QnT0E''@;'; put 'put ''QuNsZbrGiLeRCVEGwflC5pz10Mbz/tJsbLs4EtkiCx80/fi1WzJnUW5pWtgwejrCeEHQqmJ90Evu4uZxkw9b6U+Ekc8vuQ06t6HyCs69tzmU4vLQsTJuGjotfNRQjd/OGL5mZz5gIWsW+xT35kixr7GS7cLGMa8hJE4KYmJxs0WGXF1Xsz4jl+vmv39KAW71LCWYdCFcxs0WlTgvmFK16uV88BeM''@;'; put 'put ''oSsCQLY5PCMeeuf8x5t93/4KyDa8k+6sr/6egdh7wXNMk/l2OEXZUZNHr9yRw25NqWm3bxxWItrQDZjQiVpIgn55SoI5+e5/pxJzplSuujulirMgLEC2bbLEXrc6wbGubBetO+lIw2p5235DWAh807SqNTdlMqdxoO4xflKl+k/tUBbq+7S0+XZOmVq1+pEsQAwq04hAaG7kLT2tbHUF7ztx5Jpt''@;'; put 'put ''abQHRNsQePjdX/2tybslbJIGWfXHosaB143a0GerMN2+8aQS1ef7AmPiX9nJg16FOs++ZtQrL/S1ibSwsfLQVl/T/YX6gI4VWxADmYjBYG0fOdTyK6ZWvtbQW7GR/kaeps3JkO3Cxh+9jhA7MYgBRqTBp9HTrx/+elOmcZn/ytEFPl3c7dLKL7HrNpi7xUFLxk2pev2VTNsE+tKHQAfZPrj+jIGM''@;'; put 'put ''kq+BbNMHdryS//LuhUv2eDePi7Syxdg6YFrVuq3xys2n9netO+VVJnwnB8ek0YKX+C4xbvJP8n8rOdSPizcOU3d58ckO7LoTYXxY6OfyprJGClZalF07vRdmMUp2ZXvn+lOPVjCpN1ibv/i8xQ2PQvSzp1Wt+Ue2nolZApGidTW/sph5v0odrqAdMsaXIHX+zNr6WdmyDfSmFoEOsr3//bP2wYbY''@;'; put 'put ''2hPZwgWp1IIfTdqj7168tKfi8UC2CN297uSLLWH8JYhlsWPQd8J0V15e8dKX0fDN18/9pETdN3BkXe5QispCx6lgRzOhdD73isW9acu9nWzlytZPlqGvaGe2d647ZQUXvtOC/VTifNdttYyJNVlFuuaLPH+/Ze0PLlexNk9XCjtv1wvOHbTkVkXBt185/CV3uvSD3MwgAGSbGZwT0vLYe5cu3+n5''@;'; put 'put ''7MxIK9u+vo0scZHF45lC/2Mwd8fNUodScu/2tuYps05YYyUEfJ50mt9QtQ9BZBbGdHzYOcTZZqroc00nfbQ3lIKT8cYYGV8lckHq7ndPG1CE+v97j3dzZ7EHgWdMq15zR664e279yOEm8/3dpZbuE7RJHgFggZebyLoo218KcgWn3moHkG0Oe+7xf1724g73f8dGItu+fhs5iMud6068iwtrcvB3''@;'; put 'put ''ih07VayfOGHUi30+UYBcNd2+duQJAvM5DqVgZLi5pCuFr3HGbxq4pXB9LufrbU/usVkNuQgWHFNPK9t71p9yssdqfSlYflAI8R1hzmOnjs6tUMbZb/5gNBfsyUJtwBA74TqUoqd9zJoEpfpy+A92FNM6yPaRd8cNMJj5DWwj544zgWxj88W9b40Z1OrzvatSrSM7j0YK3scEnTpx5Aq40Pc/GGet''@;'; put 'put ''HuMoUs1TOMJzKKHfD0VW1gLWSMEKxNlvp9Ss/iQ25DPbKhmyvXvdKeMt4bsvaDHBSuNeLztx1glrvJkdRXRtMnlJi2/HyyWO/f7P3tpjNr2tKfv8dGb1q9ujS4EWuYYAkG2ueaTdHpkg/ZCyw5btdH/aJTSg89su5ybnB19f27A5R4eQUbMWNv7oei6M2fb8sy6l7Am3pV4xrepZSPbe7g0ZKkS8''@;'; put 'put ''2uUOpXiaxb1dUgfKJgQpuzBBf2Zc3Dut6o2cunyXDNne/9bP/uqx9lzUQbZEnT9l1OvXZnSSxqFsbn31fhSTvxFMRtu7CSHe5YhcNLN6zX/iEAdNcwABINsccEI4EyTZHtrv8OXbWz85PdznMvQHyLYTGVn022O2vMyFOCH4LhfMctCSu3YWuX4766hnjRx1dVbMunP9iQOZZd7EkPHrcPmWObc2''@;'; put 'put ''YUJvL9TaHr9y+Ds5cTknGbK9e90p71jC15EmkSD11FwPrVnYWFnuY9Zynbpq7ZOk2bvtC5fe75xrqxv/mZXJA0oTQgDINiHY0t8JyDZ+jO+oqzmGY/EiJcoBwd6yFqlLLb7B7eB/7g2XgOIfdXI95q0dcTylzpsFEtXh8i07SNHrBvLMcyp711w5/J1AsfQsvST5mIx9lciZ7QNvn/WJ29x9uDTd''@;'; put 'put ''ZN42lWo/mlZV91aWhhKzWvkFQyX8MYLVLjtcPrN1K6GOC6+tbliTyWQcMRsODbshAGSbo5MiFrIViB0yo7rxqxwdQlbMmreuthpZ5lKF6p23Tv2W0FUqIlN3VdZ8MAvPkvUN4NWOwN0rTtON4ubTEca3EkyPCAVGfmGh1PkyYvyP02pWf5At4BIl23tXjylsIq1bHGpBqbTdYG3NRC/83rW9JEGP''@;'; put 'put ''zDbVZpiP6Erh2f6yHO0vWThBVwrGT6usfw4IN1uzMna9QLaxY5XRlkC2icN9x9raEwtdAx9tM3YMtktRifNbxn0PKJTcO6li1a7ENeRnT3mei930dwjjCaEFz+WIMSLfUarfYTHxcDZuxSYa+iP7KYhvolT1p3lkzGpSVcf3elue9/n11fMIpjPshRjkFweVOK+ZVlX3KBBubj+XQLY56h8/2ZYd''@;'; put 'put ''vny7O/KZLaxsIztvXn11rcGan3Gp5d0uASGENmrUOVmlOzZme2s0F6ffvIaqoR6j6V6XWjImGCpjt9Ni3o8Ltf4zrF389Uxm6kqUbGWaR+Jxf6VQ1Z8wwmSe1gKtaNikXphF69Y3j1mgUdckSjQ96BOZ3tFFy6bs9hlP5eLt6lyc49mwyVaIYGx/Iei3EPqTDTd01xkg28OWbe/hNrJBzKE3VK7f''@;'; put 'put ''lBsW554V/j/OwnhRU5w1odbJwvQWN9c4ievKydVvfJ571mffornrRh3JTPOvOi0YLgvLhlrkNlveK9RKxu8ddfzbmdiaT5RsFzZWOov0A95p8W07MjgGFevnX1356jPZRzl+CxY21pxqMnOpPb2jlCK4eMxCbBIkv4gf00z0iItsVa4NvrrmtW8yYVhf1wFkm5oZIONLncQ9SxAxIVyaP6/VvLtI''@;'; put 'put ''22+OT2n7a76UoksNcgEpsz74vubYVXARE6Ys5dcvXP1cBy15EjE0a1L1irTeHwiQrU9W/Yk7XeO9G8Zu9LHmYUFsnErJHYRsvaG37mzMqTvuVILUboRbqPZ7TODmyVdmobBCKuddPsoCss1RrwLZptYxc+urizSiPyIQ+3m3VS4Swm3s/tqllM+cXrO2V652UotWd2nyEpW7aPdlQrBbdaWgI39v''@;'; put 'put ''sGXgEpXjHiTU29J1npsM2T688fyHmoxvLw3aq9OiOuRu/cnEE9a0phu7dMmf82blsZSI5QrVO27fy9pXBKsNXDjPn1b1ck7FSacLh94iF8g2Rz0VC9lyCx868/i1fTbhfryukxVWHHUjLmDImu1Uig8M7c8FZw6l9BnBfLdcXfXqx/HK7wvtb68bdoDbar6nVN+vWxpRWT/XYr7/FjnKp0wYsXJl''@;'; put 'put ''qvFoJ9tNiZTYu2v9KXMY910ftKnUMXiTz+OpGF+9rFdnY7q9fsRRXqPphWLHvkPteKvE1aAI8avxlf+AY6ZUT8QE5QHZJghcursB2aYP4Vkbh7mcXvXXgrM/aIprv1BNcpWmK8V/xZjPvbriVfgyEwKQ/0tLw4gjBeMP6WrhqO5fWphlWG3vF6r9Lp9c9fp7qfJkMmS76O0TD7G87vcp1QqlPTIp''@;'; put 'put ''jK4UXDKp4h+Ppsq+bMlZ2Fg5GCP9BYFExza5tAUj/AEl9NzJo1Z9mC3bQG8nAnGRLUJ0SK6lcMtXZwLZpt+zcmtZRcpVjJvXUUXtF6pRJj/QqPNBhavz4a5Cd38EznOLLzV5240FWvmg0BYW93k0WvioMH03Tx1d922yHpVki4T3y3Db2FJ2T4UIAoXa8bsurdSf2EK+CtT+j/t2uC/P5I3qZDGI''@;'; put 'put ''1P/2uuoDkDCWa4rrWHsbjRa8L5hx4dVVr/87XbpBbmwIhJKtLESgRu4KZBsbrMm3ArJNHsNYJcx7s+IwQfFslejnhuujEOcnBKM5ptv7wtQT1uyNVW5faXfb2toBCrb+KBC/OGx8rkDfKIrjLmooD06o/fueRHFJhmylzoWNJxxvce8/FKI55O8GczcV6gPOmDRyxdpEbcqlfrKkomG1vexUS0fY''@;'; put 'put ''7fKaLd8UqCW/vqZq9apcsrev2QJkm6MeX7zxCrVAwc9vd38csRABnNmm1nkL64+vdVt7H3FppYeGSubCMglW/q0QZY6u7H2ht95iTS1indJkKb95DRUVBbT8WkO4zwqnp1Qf8n6LueM+r+X423U1L7bEa4u/eDxt+VJTCv2ZoEJf0YrHL1kyjm4Zsv0NjFBHcn+M6DqdGadPqK1P+EtAvONIZ/u7''@;'; put 'put ''19YO8GH2OKXqj+16MCLfcI4un16zekU69YPsyAgA2ebo7ACyzY5jAreWtUkW902npPvWsixFV6D2W2IS67YpI/6Rk6XosoNcQOvijcPUZsP5UwWpCwTih4SzxamUreKI3bBjxLB34onPTZZspS3zG2pPR4I/T4miBW1TSeEtuzxtN886YY2VTexSpVveSXC51UcURT/PLtNjNu8s0EovnVK5+sVU''@;'; put 'put ''6QI5sSMAZBs7VhltCWSbUbi7KVuwcUx/Byu402e1/BJ3pqPtaOezWvc4lJLHKOELJo9a83V2rc097TJrE/X6rtAV19RwpfwU7GhSqf6UwT2Lrhn12n9jGYEkWw9t/sKhFJWFax9tZSv7yHPmgj1lL1CinBqUQZDahAm96JpRr7wQix29oY0/vpx6F1GqXEYwVYI2y3zKBWr5dIe69ynYncmsJ4Fs''@;'; put 'put ''M4t3zNr8ZKuhZT2V2INt5JjhTKjhXY0/qjK4dzXBihaOcKVQhegfC85vcWjO5VcOfyknStElNNg0dfKX8mPGHy1uXKhSh/8msP2FEf1OUxx3Gm3uB6Kdh8vczdwtvkyGbKXuRevGHNRm7Gq0p/JsNXZtKdIH/Xhq5esfpQmKjIuVuwx7vcoMjMiNwXNqaYT/tj0puG23z5wH6R0z5xYg28xhHZcm''@;'; put 'put ''INu44EpL4/nra49GFnsrmB9YyIPJMKtc+cerRB/0ktdqWqyre9+EFUN3d8ytrxjloEVTfax1bLj6uaX64Hfcxt4HsNf9dKREEwGyRV86lMKEV7ZBy+bVVVxDiLrAvupzKCX/NLn3smtGvfpOWiZUloTOqRs5Dgv2Z/tZNxfMdKjFf24zmm6A9I6ZcQyQbWZwjlsLkG3ckKW8w/y1tUcjwt6mRO04''@;'; put 'put ''35NKIpGuPM91KcVPCSxmQ3xueHfMq6s8lSNztkqcP8SY0NBWLrV8tSV8s/hOsSE0JEduI3tp66ZEQn9C9ciMWE2urQ861eILCKYddhBMP6aEXnh1xWsbUz6hsijwtrXDqy3uW1KolXeJK3epZSuYcF81ceSrW7JoXp9QDWSbo24Gss2+Y9qL0b9lv0wTtCoS4crP3eaebcXqgFm+AvoEFKzv7kdJ''@;'; put 'put ''dN7SljNUpM0TiB0U2kJ+adGJ62VMldm7R1b+O3iJyn9BSmnbnEhu5HCzqf38djbGZBqxEX+bsfubArXsN9Oq176a/VmYOgvmvzn6YA/f+UqhPuAwu1ST+T4qpCVnTKx65bPUaQNJoQgA2ebonJBk61Lx8h1tH/8knIkyAw6c2abXefMaqn6IBZZkGzb2XCUFzxJC93cbu44LXf1Kywim/yGC3mah''@;'; put 'put ''1uXTqtZ50mtt75Mu42YpMq5ngl8ZbrWKEd2hE+c9mJkPjK9+dbskW0Nxb1Gps9vZrxx9LBekQlGSF4kUtPsBh1b8S/uWso+5tzvU4omDN5cvO/fcZ1nvQze8xTL5hdfcubrYMSjkpjj+r44LzpxY+fe8ObPONZ8B2eaaR9rtAbLNvmPmras9jnC+nuDwZIuRdotVgOeqHlbV6t31gFMtOghj0q0U''@;'; put 'put ''ncmNtS5SNmlX5cgP4gl1yT4CmbFgTl3NIaa1589OtXR0uC82QvAtFKvzKKfPe1DLfxWiu8JZlgjZBuXMr6++FCFxr71+rzyLV4h6a5MPz8mXsCA5XpnfGmN9uUrULtmmvGbT9kLHwJ9PrnilLjOe71tagGxz1N+SbAtVvPw7WNlmzUML6mqGISLWRSJbhejzJ4969VppoIxtLPDpl3HOfqtSx8BQ''@;'; put 'put ''o+WFFJ0W/oWZ1q1Tal/fnLVB5bDiW9cMPxkTMVujjmPDYV7mOODjPd7NR0QaQjJkK2XOWTv8HJU67iOY7mPX4VTKHm013dfOrH61VxctsI9J1vi1OH7wf2fU59u30DlnpkacF+2urH4Gvhim9mEJIVvyjdvcC+kaU4txQtKAbBOCLaWdFjQcPwIh1mjfXrQrUIjrjsmjVs6wv3fv6jGFbYpnASHa''@;'; put 'put ''ZfY/YsE2/tWD1n8WwuqTk0etbE6pwXkibEHjmCNMq/kxjRbKovUdf6OCw4t0Xp4s2Ur5i+pOPMQjmt5wKAVdqkK5jb3/LHaUjc23mOpF68b8knP2mH1HRgjBkeD3t1SfNBkIN3UPFZBt6rBMqaQA2ZIXvmv76LRwguHMNqVwhxW2sLF2JBeiISLZUufCyRX/mB6u89z66u8RhG6jRDk79HNZik7B''@;'; put 'put ''2gcCidlTKldB/dwIrpzXUHWOgtQ5CKMuF3oika4kW4GaSpMtnC7jcAlSn2HCGGk3jSDyscXMX82orc+r0KAFDTUXFqgD7vRYu8s7xyuERov+wgWfCl8KU/O3Bsg2NTimXAqQbcohjVvgnXUnVFjErI9EtiouWHR15YppkQTLsNyFDWMq2sydjxTq/Y7sRrqCcyZYg0pdV+ZTMoW4ge6hg7zAVKAZ''@;'; put 'put ''VzDmuylSTuTgSleSbRtlZVOPXZ50sQiZAUvx+p4nhPzIbl6rsXOLQy//2bWVde+mcpzZlrWw4YQzfaz1L7ri6hLD7FCKnkY+MSGZAhLZHluu6AeyzRVPhNgBZJt9x9y57oQKi0cmW10puGviyBVTolkqCcOleH4tELo53HmuP9SFFv3FomjOdIh3jLDLUFluMH4jRuLScLeRJeE6lCKkUMeRVw5f''@;'; put 'put ''+nE0n8TyuTwS8GniPoTRhfb2XrNlm6o4LptZ3fj3WOT0ljYLGqpGmMz3nK4UHmC3WaHOemyy86DMZHKeBLJNDr+09QayTRu0MQuORrYaLf7TpIqXJscqUK6WkLt5Dsb41+FK0bnN3d8WaANuobjtycmjNsB5bgiwcqdg0brKoV7T95hDLaoMh7vgfLOuFV04ccSKOoyRiNU3kdr5V9aqeSMlyg32''@;'; put 'put ''NibzuQlRp8ysrnswWR251H9RXc0hzWz36iJtQBfCJUh5jxDtjMmjVkIe8AQdBmSbIHDp7gZkm26Eo8uPRrZOUnzf+FEvTYwuqWuLhY2VP2CczAp3nssFswii/8IIz3HpLVDKLwy4MimGUdx8OsZUfnHpKAYfbBpMisE4nzWtZvUH8fontL2/fGB9xXiB+O32hBoyNEjFrtl7q16/bRZGPFk9udJ/''@;'; put 'put ''YWPloUIoz2BMjrPb5KBF7wsufgGxuIl5Csg2MdzS3gvINu0QR1UQjWwdaukDE0a8MD6qoDANZJL4Fl9BpdvYdV+h3v+o0CaMWyYTxlqXWjx58qhVHyaiI9/7zH/llAJc4LnC4K2/cyjF/ULHazJPq0KcfyTw2c8AACAASURBVOZIn5ts2I6fcNeOOMtC5gNOtWRAUJescyyPAEwubphW9crufMHc''@;'; put 'put ''X2GJtKx2qIU/7Lqi93xeqAwYC4Qbv6fjIluVa4Nh3z5+kBPp4U/XqNIXt7d92FEKzC4HbiMngmp8faKRrVMpf2j8yGWXxye1a2t5LuhRzcuZsK4Ld55rWK17VVLwEOFi4dTRdd8moytf+857a8wgjeHbuGAXI9Q9VMhixhcqdczVfOKpSEUOYsVmfsPISsMyn3OqxV1yDCMkVmHNeeHU4a/kjY9k''@;'; put 'put ''hi+d4ucRImPs+BiWZ7Ouui6dWrnm9Vhxg3YIAdnm6CyQZFuk0he3AdlmzUPRyLZA7f/IlSOWXpoKA2WoEOe+3xNMfhbuApAs5Yc4noMIWQ6hGOERv72x8seIWbepxHlsaHyu3ClwaaVrOOM3DdxSuD6ZFIxz6o4bZjLvC4XagMF2SwjSGpmCz8+nS25z66uLFEwfxxifaR+rz2prcmllF1wz6rUV''@;'; put 'put ''qZj/fUEGkG2OejkWsjWIOfSGyvWbcnQIvd6saGRbpA149PLhz12cyoEurK8ejqljDuPGCaFJMeSWJUL0HYrobJfe/CqU8uuOvMyMxDgZS4l2O0L84NAWFve5FaQvJ4jcPKVm9SeJ+u62upGHE4SWa9TZJaSLYPVdSsjP86nqk8RUcOVuhNEl9uQXBnM3O9XSSXsqXnsyn86sE50T0foB2UZDKEuf''@;'; put 'put ''A9lmCXib2mhJLQr1QY9/c9yRF6c6y468AetUPL9g3JjlUIu73AqV5skLQE61bAli1pxdPuOzfMrbmyqv3722doCbmDcIbl6sh6l/SwTdqSj6Imqxh2SRg0T03vLmDw8zrZalpc4hP7D3V6nrPcLJL/PtXPP2N0dcjwj+nWYrBGFxn0dXim/cU1Ry96yjnjUSwbGv9Okg27vfHTdAY8bWntI1wplt''@;'; put 'put ''5qbFkg/GaZbV/4WetpEFYofMqG78KnNW9S1N0ci2SBv05FYnvyRdf2TkFh4ldCLi/DpCaGko+l6rZZdTKXuCK/SOfNq6TOUsk1VudKLcZHDvuHDhVoybnyvUdYfmtR5P5Dx3YWNlucXE05RoJ9m3rg3m+dxJS399TdWrjakcT7Zl3VF//Ale1vSM/ZKYtIlztgQ5lIkzhq/ZmW0bc1U/kG2OegbI''@;'; put 'put ''NvuOiZYbudgx+Kli3fzNuWn+Rj+voWooQmIOEuinCtGcocioxPkpFmQ+9rqfToQwso90+i2YVz+y1qX0m+yxmsbaK/sENReq/RpazZ33NfvI87NOWOONx6LbNw4r0c3Suzg3L8QYd1R9Uolzq8HarmmpqluWT9us89bVVmtCeY4jPqgrTniNrqBfTBy5Zls8+PWVtkC2OeppINvsO2Zh/ZjhHFvr''@;'; put 'put ''IqVrLNH3e7rIYV2UbrINIiHPcxXqmm9wb224IgcY4XcQJn9o8vLXYGs5/PxZ2Hj8WYxbswkmR4SWQ2TcMhSivyy4uLG5+viP4jke8Ce/UIz7CKEX2eV6rZY9Gim8rLV67fJ8ItwFddU1hvAsdShFXSokKdixSuXigkS35rP/1KfPAiDb9GGblGRJtobV/4WeQn9gGzkpiKN2jka2xfrgZ4od5q8z''@;'; put 'put ''RbbSYBmfu9en/4pbvlt0tbDLbVj/dp6wTIdS8rTB2M3NlZVfxEMYUQHJkwYLVo/pLxTrUodaNNXk7m7lEAlSdxGCHjF9xp+mH792SzzDXlBf/VuO+B8UojmC/QhWWi1mzDngm0Fzk7kFHY8dmWh725qRlUWO8sUm93Q5s3YqZXXMbL5wUvUbcMRlcwSQbSZmZQI6JNmaVr/lPVX9AbJNANg4ukSr''@;'; put 'put ''ZyvJ1l2856LJh630xSE2JU3lSqpYF1fL+rnhznMNq22vQgsf1hibO3l03Y6UKM0zIQsbfzSYYHSLxX2/Clc/V3C2WRB6a6sPPxLPTsEddTW/Zth6QCF61y1/IWY3V639Yz6tcO+oqzkcEbIUY/x/9ukhb2UjC50FtZs7UQGyzdE/IAGyLV/WU/F4CP1Jr/MWras9jnG+PlLx+BJ98NNtxXsuzgbZ''@;'; put 'put ''dmwtN1Yeagk8nyI6FmNCQxHRaMHnnLGbd1dWPgGr3PDzZX7dqJM4EvMVoh8Trn6uTgpf93HP76ZWvvF2rPmW59QNm0CxuiCUcDXs/MNOr3dBvOfC6Z3pyUlf0Fh5BGfiWYXqXQhXo4Xvc8EvmDxqJWRAQ7akFnAbObkJl+re/gxSGlq2vfWT08PJlhmkgGxTjXpXeXc0jj5WCLYhEtnKC1Luoj2X''@;'; put 'put ''ZJNsgxbPbzi+ss27fXGxc58uW3qBz4VAiL7nIPpvJoz6x7/Si1rvlD7rg+9rzj3FlzDuu9WhFNvqugbGI3NWO2jJY6Zi/T7WLFG3r/3hmQhrj2vUWdSJihA6Lb631SS/va7mxZbeiVZ3qwPZpsgyhPDx9k85Y18rquMXU0a9Xp8vY010HLCyTRS5NPeTZOui7Lkdns/OiES2sI2cXifMX197NGZ8''@;'; put 'put ''YySylXG23uLmy3OBbCUSswQihetqT7ZM78Oa6gpznssZ50adQp2XT6ta81l60eud0mX6TLdmTWTc9zt70YHglxZ5iYpSxz2GSm65fvjrTdFGKW+Su307Xyl27Ds02FYIIQzuqVedBWfnU6hMoCQh+ivC4hw7LvJIQ1eLL5ha+cbKaHjl8+dxkS3WHPvF+q0un0HLxNgk2TpV9uzOts+6pEnrfGA5''@;'; put 'put ''Nzk/+Prahs2ZsKcv6pjfUPV/GOF3I5FtgTrgkW9deHy64mwTxVz+0WtWWmZjRC7pThgIecymnQVq/5s4ok/lU/L8RPEK10+eRbZae+4p0vuf3P1zIQzL+6mmF10+rWJVXTS9t7x59MGG1bqizLn/Efa2Oil43ce9F0+remNrNBm95fNZq8coDsWzWKOOS7oQLnM360rhb6ZWrn6+t4wl1XYC2aYa''@;'; put 'put ''0RTJ869sFb50h/u/YyOtbIFsUwR2BDELG0f/gAv2TiSydWnlD25zKpNyjWyDw7lnw4n9DMu6B2F0fugQueCszdy1tUQdNJvQtmegfm73SSCJo0ixjjKEsVhXnBWhLRg3DbfV9E+HUjrxupqGjT3NxtvW1g5gfO8LBVp5lzq8e73ffliuDT47mdSR6X0K4pe+ZMk4umm/r6cihG6x38o2mbdNU1w3''@;'; put 'put ''Tq1cvTB+qb2/RwfZ3v/+Wftgg3/dUwYpWNlmzuEBskVLd7g/iUi2sI2cXn9E20Z2KCX3Thj54qT0WpG89LsaTzix1dz7oFMt7pYrWJ5FCiHeVhXHVVNGrYLz3DBwy5vfuuK5wGAtfwwtqi6by5SFKnb+1RDG7OtqGr6J5DFJuG2+LS/2KzhwlL2N12j9QNOKfj6jas3HyXs7NyTIkoRzGyp/gYT1''@;'; put 'put ''gH13RX7J0xTXXT6HuHHmMa+25Ya1mbEiLrJViGv/yaNWfp0Z0/q2lrv/e5rez3PQi9+1fnhKpJUts/AR1x6/9r99G6n0jT4QZ2s2RlrZynq221ubro4nLCR91vYsWdYnJbo+zWPtvlRTXCHl4RAymLvFoZQ8TjhfOLn6jc+zZWcu65XpMzEWFxtW2+9camm3+Fyf1bpHIY4HsKkunHFC+LSF8185''@;'; put 'put ''ugC5Cv5KqfZz+1jbjF1bC7SyX06rqnszlzGI17YFDaNHK8TxLBe+juQXQgiOkHhdV7QLJlWs2hWvzN7aPi6ydan9xpm89R1BKUG+QGihhVW/DEp4h6wgGBbu/l6gbaBPtl7UDG+XtIepRATtCrazvxePzQo3RU8BmLpNmEVU7Nen6YgJUxTj0tICvd8jW1v+8/3wZCu4QhxTEBb/wIxxO9bh8I3k''@;'; put 'put ''i2jjybavotkX7XPGzQ5/yraKICL4nv9nDXd8LkzWnmov4Bmd0rEeq2V+uGxN8vNS5+B6w/BcyxjbYREPZlzOna4et+MXaks426VNoe/bbfQ/c7YxKX6dnS/L9hzqluIfD1YUji2LW5wIrtMinSsTLGFexYSvI7VgUIIkDJUWPEKZuAPq54afXfMbqvZhzLgOYXx5uDNxWT+XEm2BJawnrqtp6Hbj''@;'; put 'put ''+O4Vp+m+kj0LKdYn2DXIs3RdcY2fUd34XLR53Zs+n19XU8GEsUxTnPva7VawusYS9Jy+cm8gLrINbDlxFr+jZehBrr1kkWlpV/di052W2j8P/pzsWHrS568vHMRKUKJ2ZKGJhB7jpk/4x5HaV+q+DdnHm3o7kxl1ONDs4yZY1cPFXdp1ymdC/r/rnLG38EtMHZzdfd35ZUHu3XWdXna98hKsbCsU''@;'; put 'put ''ohfIcclfQ9p3GE6x8m/O0c20SXtp8k8yn7QjGb9mqu+CtbXfd/PdfypQ+42x50QO6m8z9mws1vpfs+/X/TaEZo6S58FOpW0CQvhWe/1ig7U1q8R5fUvprodnHfVh3lTRWdhY+YNm354Xi/WBB3X5csiMtxxC+WlfSLwSF9lmahKDHkAAEMgcApFIV5byK9b3e8nH9t7vUPbWQ/3c7j6Rq1R30c5T''@;'; put 'put ''CFZuU4jWJamDbC3r5xKsv4gYv2XG6LpuyR1urx9+GmPscada3C8oXX55w4LciYl547SqdZ7MzYT0apr3ZsVhiuJYijDqEguuEH2jQN4LrhmV30diXW4jq8zY6jH3qumFHKQDAoBALiIQiXQN5m5y0JLHmWLMmz4yvlzBuTjOdNh09/qKYq9JbubI/I1GC4pDdfi354lzseVw3B4an3v7myNGCyxe''@;'; put 'put ''0pXOfjJpDUL4rxibk/KJcBetrd3Xg9r+7lCKjrVj1Grs3FzgHHTy9IpVn6bDP7kgs3Nl23DWPkjlWzzWXi0XDAMbAAFAIDsIRCJdnRZ+6bVaHlaZ+HNf2PZLBP05dccNc+DCySYyxnXLjYwQKtb3e6fZu31Bgb53qX2n4NY3jzlXpQUPKEQtC+qVhOtUSx+iBE29cvhL7kTsycU+d64/cSBj5jMY''@;'; put 'put ''d802JQT6inN23sza+g25aHeyNnWQ7b1v/WQQQepXQLbJQgr9AYHej0BP57kYkX9igWY79cKV+UQCqfTavIaKUyxm3aJR5zCCaZec1bIyk4odL3Bs3jh4y8BPg+e5c+oqhvmspudCzzUxpi9SrF84edTK5lTamE1ZMga8zdf6mKo4fmK3g2L9aySs866peqMxm/alQ7eNbM/cnyD0GZBtOmAGmYBA''@;'; put 'put ''70QgEun6L4Vh9A7i9KZWE0P93DDuDdS49Z2GMb4FY3pkaP1cGZ9LBPkbU7U/XjdqjT+kclFdzSGC0mUIoaPtImUsNCHk3KmVazb1zpnU3WqZ/GLLkB13YSQm2j/1Wi27VFI4YWbN2iX5MlY5jg6yXbxx3AGMez/2Ws1dy0Ll02hhLIAAIJBSBBi3TF0tfJQb7BYopxYeWnme2+IzpyHEJznVko6L''@;'; put 'put ''UMHWFjO+RIjOdlvKU7Ia0Jy6EYcIzl9wqIVdLlwpxPEOo9a5U0es+iKlTsyiMJnPW3nzqPt1pfQ3lCgd94UMy9PkUEuv3G9LyXP5UgO4c2X7wbhCl1d/AGEyCCMZdcwRwYpCEVUxIQQJTAIlvGTQACFEYIwwIQh3DWsQQoaucCHjCrgU5P+5M5Yxkl+7hmFkIEQEd4TYdDNJCNZzKI1/jN1fojNs''@;'; put 'put ''xx/BYy/HxQWPKBMjiU/7xxK99l/8sRo4ACPnXTEhBOP2wI2gI7AI8UUkrIP62uOeutgl38visxdRtYzTSsSuwBixnJb+WK9QGbzDl/4AqsDnsnkgBktI7NsvqwiB5Lyw+0H6gMr/kKA/2r/BRsfQb073lwzIke8G50BAXsD/AnMZIM6FkJNBcIQ5978vAs0xQfJxk591jBPL4cu5wjEm/gdR/kuo''@;'; put 'put ''//32lz9sRVBFzjXGDS9HvCPkRCN6kVMp2adQ22e/7W2f9m/yhU/j6zWbthdo+8zeU1yyOFfTVyYyf1LZ59a1w/ZViToTIzKRErXb3RiDuT/GgvzBU7vh+ZI1Y4oN1feUSrTT7DaYzLdZI/r5U6vfXJdK27Ita97ainMwoU9SotrTDyBC1DudivN3+XBcEf2PQra9APoBAUAgYwg81DiunGraYIHE''@;'; put 'put ''LynVTvWYzUe4rV1d/gD2ZIwQaCOlzkv3Voz6D9TPDY/U3LXDRxrCXOBSiqtDt5YDMdv0OY7M3xNDa+KK93GF6qfaJRGsbGaMnTe9Zs36jE2MDCiaUzdqDOe+5+xhUFKtTgqeRR73JRNPWNOaATPSpgLINm3QgmBAoPcg8KcNYw+mhFzJmfEzg7u/l4zl/rW24I26ql8yKY9DOZLBSPadV1d5KsZk''@;'; put 'put ''PiVKt/hcf7IUbj5MSMEcjShzLeE7z67PazXvduDii6fVvvlSsnbkUv85bw4/liHjJZda1qVEJMFqgyzdN2XUqu9yyd54bAGyjQctaAsI5BkCd68/bQjj3ttM7v05xaojWsaseIYvCUOjroeRQf8wefTKHfH07SttZ20c5lJarMkKVa7TlMJS+7jlcYDPbP1PgV52j4uWXd5i7hjelXBbdzvV4svz''@;'; put 'put ''rWzdbauHHVHo6Pe0JXzH2MfrUEtXM+659OqKV7/sjfMDyLY3eg1sBgSSRODutacNQBr/rdvYc5mmOAsjiTOs1r1MpmlFnBOkcIKpUKiOfFar6r+8gQgJJYlQWbpS8uSATfpF+XLRJUnow3afU1dTRoR5o6o4poQ2kF9a/ld/GPd3HUy3NL/b5WMZRoQQWVSku3+fTxm+5q6vGKJyx1KE0Ej7gBXq''@;'; put 'put ''eI9x9supla9/lA4/pFMmkG060QXZgEAOInB3449H7vFtebJQ6z803ErWbe7d5rNaP3IpJYtVjlcRXWtr9umi3PO1QOgw/4h2Oz24WPfhZs3ArraCwQgbp1Kq/txgnmN0paAkOGyDeVp0pfzoqZX/yJuQlXS51F+Wbu2IWkzIXSp1/DBWPZKMKXHc6lL33JpvhOsU5X+1hPvELitcpfgDg7VeOqVy''@;'; put 'put ''da9KfgFkG+uMhnaAQB4gML9h9CzOvdPtye+Dw/IxTx3B5E4ulNU+S2mJt3SgTK7vKFIKFK/vGou7p8oV7/8KHcyaMmrNzfab+XkAY1qHIPMte4p3ne+z2mYXav2HxKJMEq5K9L8y4Z6cT+kdF6we079NfPtakWNQly8fpuX9zKWUjL266tVeUwMYyDaWmQxtAIFejsD8908p0D3oNpN5rw5dzTZ5''@;'; put 'put ''vv3IpZf/3mM6Vsg4z1QMVf6RtFT3OV7T9WiqZKbCrt4kQ24tC942DWNyta4UduwW9DQGjNQXmGZdNmN4+Hq6vWn8QVtvXV8xULXIEwrRTrLbzzn/XKHKL3vLChfItjfOPrAZEIgDgVliFnE1rHxUIY5f2buZzNOmEsftPs7vvaG2fk8cIqFpBhGYW1+9n8fY9WenWjxGpc6CaKoxIm9iRn+dT0lG''@;'; put 'put ''5EUytZU9qquFZ9nTX7b4tn9VqA84a3rV2vei4ZLtz4Fss+0B0A8IpBEBeQ54z1unX8K5+RATnYXtPWbTdxjR64zR7zw+C8ukGPDKdQRk/VyfaH3QoRRVRrs13uT99jOXs/yM6yrX97qLRJH8MOuD72uFu0vGc4xuV4jWUeu71dj5ta4UnHVdzVsbc9mHQLa57B2wDRBIEoGFDbXnG9z3Z406i2yi''@;'; put 'put ''3uXCvGpGdePbSYqH7hlGwF8/t3jvxabV+sf/b+/M46Oqzj5+lrvMloSEHbVaW1srVqwEkswkmMgmuFYL1drW2triAoEEBKy+bbq4QIAkIChql7eLWql1QUDCkpA9CO5Lbat1X1izzXKXc87bG3rzxoBCktnnmX9aP3PP8/ye77nkN3fmnPO4lazRn5c+qLe/Icuuixb7mt6MssyIpitvyPuOQOLB''@;'; put 'put ''3l2VOGevYkZmLDw/fltAgtlG9LaA4EAgdgQqG3xf1bjZIEuOYbYKzez6J6Xq7MW+phdipwwyD5ZAeaN3BGOhhQKROb1Xf/eNa3LjTSKUHywqqG0YbM54Gr+sIW8uQWQlJVLPsZcycTwhDpGrimdu+f+vcOJINJhtHE0GSAEC4SKwtqbQ00X9z8iSy2fHZJx9LLj5rcWTWhrDlQfixJbA8l05Z2gi''@;'; put 'put ''cL9Tzijo28rPVtalH/zALQ37VrId71je4LNO31r0//e3qTultGvn5j7zSGxn5djZwWzjcVZAExAYJIGKpsk3C2TeY4exjlAkmF5f4q357SBDw/A4JFBen/fN/zQi+QXF0llHGsZ8+hU02g845IybFnp3bYhD+QOSVL51mttwHNjmkNPy7AAydf2TYDzp5ombPx5Q0AgOArONIFwIDQRiQWBdfX5m''@;'; put 'put ''F2bPSUQ5zc4fNNsbnJJzWjLtwYwF23jOaS0gSjs87JsyVctNoZ/SV2unvv9dtxgxflFR8mwLKq/LOcdEvFaVXJl2vQ7qufOmnE23xdtcgdnG24yAHiAwSAKrm6f/1BShO+wwBElvc8Smlnpr/zXI0DA8AQisrisYHqLmbYLz62Xq6N4qZPWJJFj5M22Tfxyvv2kOFO2KxvxfEUxvt8ebTDukyO6z''@;'; put 'put ''4q1pAZjtQGcYxgGBOCRwT+MFp3aa7Y2q7OnumiIEZ0yYSxfnN6+IQ7kgKYIEVjXlnUSxa5nOQrMwwnWmw/Gtpdnb2yOYMiahVzVdcJJutr9in9HNuKkTpHxzYX7N5pgI+oykYLbxNBugBQgMksC61otLQ6xzpR0moLe95VJcE0q9zYcGGRqGJyAB66tl10HXBKHQd5bktr6fgCWckOTyeu8zlMrT''@;'; put 'put ''7YvdcuZv50x44kcnNDhKF4HZRgk0pAECkSawqinPiZGzViDW0ynFYMFlSwp2L410bogPBGJJoLJx0iSOUS1CuNvT3PLQfyHckT0njp7kwWxjeYdAbiAQRgJ3tk4cSjT+uiK5h1thGdc1hHH2Lb6mV8KYBkIBgbgjYP1OHUChN5T/LpQyuRZQkPO8Bfk1b8SLWDDbeJkJ0AEEBkmgvKXgHG5oTfb5''@;'; put 'put ''uX790IcOOe0bt/ia9g0yNAwHAnFNYP2eS1y6abxo8OCXLaHWVjeJKFfNz9v+aLwIB7ONl5kAHUBgkASqmqcuZkJf1hMG06dL83ZeMsiwMBwIxD0B6wzwe/dc+kDIaO/5ndYhpd1708Snb4oX8WC28TIToAMIDILA+j3jZc5OfiLI2mZaYbjgDBF6w6K82gcHERaGAoGEIVDZMmUp58ZdtuDhzi/W''@;'; put 'put ''mW1vT78uTG0jBwsCzHawBGE8EIgDAla/Wt7Z8cp/Goh3H2Rhcj2kIMe58fSbVRxgAglJTKCycdokjrVddolOacghZJCv3eh7PC5+RgGzTeKbD0pLHQLWWcjO9JNebtPe7zZba3EUQ2T80vzGV1OHAlSaygTWNEwd4xdtryvUlf7fD5xBj5p19k0TNr0VD1zAbONhFkADEBgkgdUtM9Iplv6usY7u''@;'; put 'put ''tmvWky2j4mu35rW8PcjQMBwIJASBVU3TsyQiXja5NsYSjJGkUypNKc7ZWh8PBYDZxsMsgAYgMEgC6/dMyQga+A0u9JG22QpEvrQkv/HDQYaG4UAgIQhYK5IRkpv8+sFxtmBVSr/u5okbfx8PBYDZxsMsgAYgMEgC1pOtSh2v+41D3Z/qrSdbWdCxJQUNcfEV2iDLg+FA4LgEyl6dpWR2tD/GhHax''@;'; put 'put ''fXG6MvrX12c/8j/HHRyFC8BsowAZUgCBSBNY1uBLk4n8GkLiZCsX44amSNLX5+fW/TPSuSE+EIgXAlUtU+/8z3qFW209Q92nP3ntuN9dHg/6wGzjYRZAAxAYJIGymkLHUKej0eDB86xQXJgGQerFpb6d1YMMDcOBQMIQqGiefI0Q5p9swVnO017xK4G8m8du6Ip1EWC2sZ4ByA8EwkRgXevF60Ks''@;'; put 'put ''80Y7nISVlcV52xaFKTyEAQJxT2Bl0ySvEKKOYEItsUMcJ30SMIJj5+Y8fjDW4sFsYz0DkB8IhInA2taLfqSxrp5DLDAiL5V4a3oWi4QpDYQBAnFLoKI+/3QNac/b238cNL2LUvkrc7L/9lGsRYPZxnoGID8QCBOB8gbfbILJwxgT0v1VMjeDArtPu8VXHReb+sNUJoQBAp9JYEXN+GEaYX93yhlD''@;'; put 'put ''rYswokFVdsbFXlswW7hxgUCSELD2GcqYvGaIQPf2Hy6YSTCaXepteDxJSoQygMDnErBW5ROMX9KZ/9Qj/wZMQ6LuixbkVm+LNTow21jPAOQHAmEi8LuaQsd+SauXqJJth1Soa83cnC3FYUoBYYBAXBOw9tp2am0vE0xOtz9wuqWhs2/MeTLmHzjBbOP61gFxQKB/BFY1Tb4QIXOLPSpotH/icI6Y''@;'; put 'put ''sHBi9Xv9iwRXA4HEJHBv62V/CLK279nq3fKw++dMeGxOrKsBs431DEB+IBBGAtYZyaZDbmVCP8sKK5AQElbL5+dtWxLGNBAKCMQtgarmaWVMaD+3BY50f23HNePumxJrwWC2sZ4ByA8EwkygovH8xQKjnr62JtcCijrkvAUTnnkjzKkgHBCIOwKrm6ZPNFGo1RZGCG1zSu6T5mRvDMRSLJhtLOlD''@;'; put 'put ''biAQAQLr6vMzkZLZGmIdZ9jhJeKoDZpdly7Jb+yMQEoICQTihkBFc4FPCNJgCxrh/krnoWDg5OLcP3fEUiSYbSzpQ24gECECK5uKbsWI32mHF0IImaq/Ks7d1vP1WoRSQ1ggEFMCFXUFozUUfE2R3EMsIYwbwaHKF776w4mPxHTdAphtTG8LSA4EIkPAaiaPuwKPE0yn2hkoVvxCiCsXeLdvjUxW''@;'; put 'put ''iAoEYk+goqZwiDtt+PNd+r7/9nY2dCyYd1FB695YqgOzjSV9yA0EIkhg+e7CUUbw8EtOechwO43fOPyuU86avshb+/cIpobQQCBmBKy9tkHj4CsydZ5y5MnW1CmSfaX5tXtiJqr7gA14AQEgkLQEltXnfE+mjj98qkCBXsYIf7/EV/tC0hYOhaUsAWu/ecDp2qhxf/cKZCE4l6lrYXHu1spYQgGz''@;'; put 'put ''jSV9yA0EIkzA2ncrhP4ExkTtnUqhnhcpkX9yQ/YTz2KMRIRlQHggEFUClc1T7+ZC79nulqaM+OuPszfMiqqIPsnAbGNJuzpOogAAIABJREFUH3IDgQgQsNrtpcvG2YQ4vxMwDv/AIXsyj5UmZHT826WOvHxB7jMvRUAGhAQCMSOwumnG+SYK1NoChOBvd+r0jLKiWjNWosBsY0Ue8gKBCBAob/SO''@;'; put 'put ''YJzdi5GYJlOn51gpDBbsUojnQ4LpFs3Q1i4+HxrMR2AqIGQMCSxvyJkpEccmW0KaMvqg3vnxaTcX1casry2YbQxvCEgNBMJJYEXj+RM40u+TsNLdQL73y+RaECP6Bsb0Mcz5RhOLt2DPbTjpQ6x4IrB816QzOAnuVagrzdJl3f8SyTi51Lv1UKx0gtnGijzkBQJhIiAEwhUN518c5O2/ccoZPSuP''@;'; put 'put ''j/yR0UMSdTzMuXZvl6q9Wpa9N6an6ISpZAgDBD6XgHWwS4iS1xHC3R2wGDc0WeCvLChofDdW6MBsY0Ue8gKBMBCwjLa8yXst50aV3TDbCmsdYvGf32vfVqnntsUFzQ+HIRWEAAIJQ2BZgy/NZP6XnHJGz15bB/GMm+etjtmWNzDbhLl9QCgQOJpARUPRFZro+l1vo2Xc0AmWH2IyvnXxxNqPgRsQ''@;'; put 'put ''SDUCZa/OUkYH+B/8xoFv99SO6a9L83b+T6xYgNnGijzkBQKDJLCq8YJpOmv/iyJ5uo+ls14GC/kl4rxhoa/2T4MMD8OBQEITWLt7ZqVm+ufbRcjEvWle7uaLY1UUmG2syENeIDAIAiuaCs8M6gd3upWs0XYYnQW7kOA/XjppzyODCA1DgUBSEKhsnlzMhVllF5PpOHn3def9OSdWxYHZxoo85AUC''@;'; put 'put ''AyRw954pGVIo+BQh0iQ7hGb621XivqQ0f1f9AMPCMCCQVARWNRZdhjB/wi4qQx39jinYuDnZG9pjUSiYbSyoQ04gMAgClU0X3MWEuRhjTKww1kpLhsz5S/N3rx9EWBgKBJKKwIqWwnxJ0Houjpxj4ZSGhJDJvnyj9+kPYlEomG0sqENOIDBAApUNRV/tYodqXfKQUXYIxvW/nfrhybNnz97ABhgW''@;'; put 'put ''hgGBpCNQ8ezk07GJnufCTLeK48I03MqQ826csOmVWBQLZhsL6pATCAyQwJrmC8sMEezpSWuw0FuYqxfCKVADBArDkpZAxfOXD3Ex/IpfP3TSEbNlpoN6Lpub+8zmWBQNZhsL6pATCAyAwIr6/PEa79zklId0b9Q3ua6pkusH83N3wIKoAfCEIclNYP2eS1y6aTQZPDjOqtTaey4Reen8vB3LY1E5''@;'; put 'put ''mG0sqENOIDAAAqubp91uCu1X9tAu/cBrTpkW3eJ7ad8AwsEQIJDUBNbvGS9z/oUHguaha+1C3XLW+jkTHr8hFoWD2caCOuQEAv0ksK7+okyuiFqd+c+xhloHV0hYuabEV/vXfoaCy4FAyhCobL7gV//5+vh2u+Asxxc3/uC8318aCwBgtrGgDjmBQD8JVLZMudIwgw9RIinWUM3s+pAQx4Ql+Y0f''@;'; put 'put ''9jMUXA4EUoZARfPka4Qwew54yVJPeYUFO7w/yn+qM9oQwGyjTRzyAYEBELhn98X36GbnzfZQUxgPZ6jatXOy9xoDCAdDgEBKEKhsLspBCLdwcWShvkvK2icM9PUbfY9H/acXMNuUuOWgyEQmsH7PlAzNoC2mCJ1p1WG1C+OM/WDp+c8+msh1gXYgEGkCFXUFo3WsvyJTR5aVy9r+QxXHmSUTdrwV''@;'; put 'put ''6dx944PZRps45AMC/SRQ0Vx4mmZ2vaBQd4Y11K8f+sgphp6zqKj2QD9DweVAIKUIrK0p9Phl7WWJKN3df6ztP4rkvqA4Z2vUT1oDs02pWw+KTUQClY2TJunC2CoRxWHpZ9x8lhJ+fqm3OZiI9YBmIBAtAqs3z1Cdw92bOo39k62cQgiuSmk/nZuzaVm0NNh5wGyjTRzyAYF+Eihv9H6XYvmP9jCF''@;'; put 'put ''ev46N2fTrH6GgcuBQMoRKBNlZOSzz1cEzbZiu3iPMuL3P8necF20YYDZRps45AMC/SRQ1Tz1eib0B+xhEpE3FOdun93PMHA5EEhJAn3//WSoo5t+NP4RX7RhgNlGmzjkAwL9JFDVMmUR40a5PUym7j/My9ncs1G/n+HgciCQUgQqWyZP5dystotOV0a8fX32hi9GGwKYbbSJQz4g0E8Clc2Tf8qF''@;'; put 'put ''eYc9zCGlPXjTxKd/3M8wcDkQSEkCK+p9+YRKPQuiMh2nfcIDh8+I9l5bMNuUvP2g6EQiUNU8uZQJc6WtWaFpDx3wOK8rG7tBT6Q6QCsQiAUBazW/yYyXKZE8Vn5rRbJE1ZMX5O74JJp6wGyjSRtyAYEBEChv8P0IIbTOPj0qTR65sdMQ3y71boDVyAPgCUNSi0BFTeGQIG1/0yGlH9lryzmThHr6''@;'; put 'put ''goLt70aTBJhtNGlDLiAwAAIrmgrPNJm/VaGu7r6cmtn1nioNO7fUu/XQAMLBECCQUgRWNeU5kVAaEEbnWYULwTnF0swF3pqt0QQBZhtN2pALCAyAwPLdhaOEFnpZpuowa7hudrXJ2JmzsKDhHwMIB0OAQEoRePTRWfSTL3StNHhgfrfZou5We3fPz93x02iCALONJm3IBQQGQMDq+CMU3KqxzjOs''@;'; put 'put ''4SbXQ5TQWQu9DU8PIBwMAQIpR6CiqXCRQKJnRb9LHva3GyY8dmU0QYDZRpM25AICAyBgNcEOGoGtXJj59nDO2PJFBQ1LBhAOhgCBlCOwoiH3GkLUnu4/QxwntfzwvIfyogkCzDaatCEXEBgggYrmwp8LIcrs4U4pY1fI33F5SVFt2wBDwjAgkDIEKuunfMHA/n9QoqhW0ZrZtS/LNWbsnOyNUTtf''@;'; put 'put ''HMw2ZW43KDSRCVS1TBsfNDp2KlTtXiSls0CHiw65tNi7bVci1wXagUA0CKxo9J7KOHtepo5MK1+GOiakmV1X35Sz8Ylo5LdygNlGizTkAQKDILCswZfm1/Y/PcQ5epIdRiHO1QeCoYVlRbXmIELDUCCQ9ASsFckBw/+WS84cZRers2CHRx66kuvo3uJJW/ZHGgKYbaQJQ3wgECYCFc1FPs30b1Go''@;'; put 'put ''M80KGTI7Djllz9SSvPrnwpQCwgCBpCRQVlMouSX9aUrl6X0LDBiHPnJKGStkajxYnNvaESkAYLaRIgtxgUCYCVTUnDvkEO+qzXSeNM4OLRPXAweDwZvg6TbMsCFc0hFY1uD7qma0/a8qeb4uU4erb4EhM7DbLWWWHNb058qKakPhBgBmG26iEA8IRJDAquai2SYL/l4iqtNKYzAtoMqe7y/I3f5Y''@;'; put 'put ''BNNCaCCQFASEQLiy6fzcgNmxzimnjUMIH+WBQaOzziFnLSjN2/4CxkiEq3Aw23CRhDhAIAoErKPn2sXH29MdI8fb6QiSXpKEuHSub+c7UZAAKYBAwhO4s3XiUKpL18tEni+wGIX7mK5K0w5yod+vSfqqRdm1YVmxDGab8LcNFJBqBJY3F/iYEdysSu7ulcndLy4andhxxY2+6n2pxgPqBQIDJWCt''@;'; put 'put ''UuYC3Y6Q+K5EFEffOARLbxMk3am5xEO3jKv2DzSPNQ7MdjD0YCwQiBGB5fV590hUubl3eoW6/0h0PP+mgk2HYyQL0gKBhCSwqsE31m+2/9YlZ03A+Oivlk2m7VXl9DnFOdXPDfSrZTDbhLw1QHSqE7h7z/iMYEdXdYZj1ESbhXXmqyp5fm/4A6Vw2EWq3yFQ/0AI3N0wYTbm9A5ZUr/cd7wQgsvU''@;'; put 'put ''+RfMxS/neav/3t/4YLb9JQbXA4E4IXDH9pyRskqelqiS3WO4QgiFurYZXP9hqXfnB3EiFWQAgYQhsLolJz1o4FKM0WJ7IWJv8ToLdqYpQ1czDVX1Z38umG3C3AIgFAgcTWBZg2+MX/9kxxDHSWf2fjdotr/pVob9YEHu9gbgBgSAQP8JLN816Qwi4V8KYV5h95Lu/aGWEvkdgpQ7TdH2p1Jv83F7''@;'; put 'put ''S4PZ9n8OYAQQiCsCdzXlfZky8YhE1Z4VypZAg4X8quR+lGD+s+Lc2vfjSjSIAQIJQMBqz/fvMe9dJGHldozxhL6SueAsUx29q0Pft6bEW/u5Rz+C2SbAhINEIHA8AtZWBjMU/ItHzprc99qQ2XXIIw//BaWhR2+eWPvx8WLB+0AACHyaQFlNocMta1dwwctk6uhuddn7xbihOaS0pwRGdxTnbH3x''@;'; put 'put ''WPzAbOGuAgJJQuDuPVMy0oXrzyGj/aK+JVmLpzTTf3iE60sPBFnb+nk51f9OkrKhDCAQNQJrawo9IUVcTTD5lUB8ZN/E1rdJDinjcS6xn5dM2PFW7/fBbKM2TZAICESWwL3PXjyRmWyDLgJf+LxMlCgvOCQyc0721o8iqwiiA4HkJLCqKe/LHaHDD7iUzNxj7c8VAv3dqaSXhgy9tdS79ZBFAcw2''@;'; put 'put ''Oe8FqCqFCKyrvyjTkMylQfPwjXaTgr7l62ZXm0RdBxXq/JtA4oH5udv+mUKIoFQgEHYCR37P/fAbutm+1q0M7dmCZycyuR7EiP7DrWTOv2nixl1gtmGfAggIBKJHoKJxch7GaC1H5jeO+upYCCFT9V1TmPcLKv/RQ9SDc7I3BqKnDjIBgeQnsH7PeFeX5rkGI/4zhMnJfSt2ShlbjZDxPTDb5L8X''@;'; put 'put ''oMIkJVDVMnWmg6bf5zcOnNK7ROsTdZoy8pWAceARJ0e/u6mgAU6UStJ7AMqKHwIVe6aPdiPPti79wFhbFRa4y6mkffeGCRufBLONn7kCJUDghAmsaZ56qd9s+4NCXRm9B+lm4DVC5RJHe8au4plbtBMOCBcCASAwKAKrm6ZPDPH2Gomo3e37uGDMIaeXzZ24+dfWf4PZDgovDAYC0SdQ0Vh0kcY7''@;'; put 'put ''/6xQd4/RWvv9OGIbXZLz+rk5Ow5GXxVkBAKpS8DaGuSS/Fsk6iq0KXDB3zZV9dyl2dvbwWxT996AyhOUQFXjtLO7zE+2O+UhPdsOdBbskqjjDqXNXQFPswk6sSA7oQlUtUwv0sz2TfbxjlwwUyaO0vl529f0fKWc0BWCeCCQQgRW7CkcxkKhapmoPYuhrH19hMjzbvE1/C6FUECpQCBuCNzbOG2E''@;'; put 'put ''gdlOE5k9v9VKxPmkyduv7n2MI3yNHDdTBkKAwGcTEALhe1ovXG7w4CL7KiE4Rwj/cqGv7hfADggAgdgQqGgqukcg3tPuEgsSoJjmF3u3P99bEZhtbOYHsgKBfhFY2TC5yBSdT8rUmWYPlInz/oPB0PyyotpQv4LBxUAACISFQHnjtBEeSdkbZJ09W34k4niiOHfrN/smALMNC3IIAgQiR6D7iDhV''@;'; put 'put ''bMIITbKzdGr73nHTYTMXTap/LXKZITIQAAKfR2Bt68WLNda5zL7G2uojMPeWeuteBrOFewcIJBiBiqbJlxs88LB9LJzOAh2EyLMW+5qqE6wUkAsEkoZAeeOkCwzm3+CQPFlWUdaiKFVy3zYvZ+vyYxUJT7ZJM/VQSDISWNWU55RJ5lMG90+x6+OCP7HQW38FxkgkY81QExCIdwLWVp8sp/KwybXL''@;'; put 'put ''ba2Ms39LhnReSVFtG5htvM8g6AMCfQisaio432D6Jpk63NZb1ulQBCmXLcrftQ1gAQEgEBsCVS2TrzKY9keCqWQpYNw0JCLNLfHuuv+zFMGTbWzmCrICgRMiUNU87TYmtO4TaI78ozb+JRnKhM/69HxCQeEiIAAEBkxg5e5pp8icbzO58VU7iEKdG2W6/8o52XsNMNsBo4WBQCA2BH5XU+g4JPPt''@;'; put 'put ''mGCfrYAIcucCX81tsVEEWYEAEKhsumANR2xuDwmBOglRpy7Iq279PDrwZAv3DhCIUwIV9ZNPZ1jbQwjNtCTqLNCpUMeUUm/97jiVDLKAQFITWN0y4yyZyNuCZvuYXh+A/zLmg2HXzJ69gYHZJvX0Q3HJSmBZo/c6LMS6nlXIRugDQeSv3wpdfJJ1yqGuOCawfs942WQjH9SY//u2TJNpn2DimHKL''@;'; put 'put ''r/aV40mHJ9vjEYL3gUCMCNy3+5JFfqPtbowJtSRwzjYqHWmz4PzjGE0IpE1pAlVN07xBdniLQl3p3f8eBTMl4lq8IK+64kTAgNmeCCW4BgjEgMDKxvydGNMiOzUV8uXzfdufjIEUSAkEUprA6s0zVGko/WuIdV7c81QrjH96OMk50X7RYLYpfQtB8fFKoHzrNDfxaI0Yo3GWRpNrAUqU/IXeuk+d''@;'; put 'put ''txqv+kEXEEgmAlWt067Vja71lMjqkada0yCC3liaX/ebE60TzPZEScF1QCCKBKxP0n73vlpV9uRaaRk3dAk7C0t8O5qjKANSAYGUJ1DZMnkk4mIHR6ynq49MnE8ZvP2q3l19jgcKzPZ4hOB9IBAjAmtaZ6wxWKBni4EQ4vaFvro7YiQH0gKBlCRwT/OFpboIrrSLF5y3YSJPL/Xu7NeuADDblLx9''@;'; put 'put ''oOhEILCmdfqvDRbq2VMrEUdlce7WkkTQDhqBQDIQuKd15lcwwtUa6zrVrocgeYNTOXzN5x1gcazawWyT4Y6AGpKSQEVz4c+FEGV2cW45a/2cCY/fkJTFQlFAIM4IWD2kVzblbySYXmRLM5m+jyLHtIUFNS/2Vy6YbX+JwfVAIEoEVjYWfJcL9qC9KMMjDd8p+w9cdB30r43SDECaVCawumVKbtDo''@;'; put 'put ''3G6fSy6EEDJWSou92ysHwgXMdiDUYAwQiAKB5XUFPoH1apk6XFa6dGXUOwzxcXOyN7RHIT2kAAIpTeCe3TOe1M3ApTYEnYVeV02nd6DnkoPZpvTtBMXHM4EVjd5TTa6/pFB39yZ6gwXbZeoZW+rd+UE86wZtQCDRCVQ2T/62wQK/p0Rx9NQi0A9Lfbt+N9DawGwHSg7GAYEIE1hXn59pSM43mNCH''@;'; put 'put ''W6msr7Ewki4s9e2EpvERZg/hU5fAPa2ThxqM1Qgkvm5TUGnaZoniWXOyNwYGSgbMdqDkYBwQiAKBquZp1UxoU+1UElFWFuduWxSF1JACCKQkgTXN00p0HlqBMSbdAATqlIkyY17etsbBAAGzHQw9GAsEIkygsmn6XI5Ca+w0CnW/6DfaC5bkN3ZGODWEBwIpR8DqtBXgh1qdcvqwng+4WPnbofQh''@;'; put 'put ''V5eN3aAPBgiY7WDowVggEGECVY2FZwd5V4NC3RlWKoMFuxx0yPT53uqmCKeG8EAg5QhUtUz5DePGD+3CGTMOSJJjeknezucGCwPMdrAEYTwQiCCBsppCaYQ7408hs+3bPX8AuFmd7sj65mB+P4qgZAgNBBKSgLXVJ2C0b7W7+lhFqJL71psmbF6GMRKDLQrMdrAEYTwQiDCBVQ2TfsQxu5dgSbZS''@;'; put 'put ''aaa/PUMZNumm3GdeinBqCA8EUobAsvqJ9TJ15vf6UPsvD3b7bvRV7wsHBDDbcFCEGEAgggSsVclcSd+pM/+5PX8IkLllmCZfAQdcRBA8hE4ZAhXNUwpNFnjGPkCGcVOnVJ1fmrfzvnBBALMNF0mIAwQiSKCiuaiUcWMZwVSy0jBuaAp1fX9+3vZHI5gWQgOBpCewum7GcJMGtiKMvmEXK2PX04Zo''@;'; put 'put ''m92frj7HAwVmezxC8D4QiAMC6/eMd/k1z9MIo55m8n790EcuxfOthd5mWCwVB3MEEhKTwNqWC5eGmP8OjEn3Vh+rqw9CdMbC/NqWcFYEZhtOmhALCESQQHl9fo7OuzY65YzuQy6sF8XSiyY1Llk4se69CKaG0EAgKQks3104Sg8efsElDxlpFyghecMhzfxOWVGtGc6iwWzDSRNiAYEIE6hsmXKl''@;'; put 'put ''yUKP2F8nW+lMpj+HufytW86v+3eE00N4IJBUBNa0Tl2sm9pd9gEWJtP2SVSZUuqteznchYLZhpsoxAMCESRQ9uosxXn4/T/KRJndOw1Byh5dsKsW+3a+GcH0EBoIJA2BypbJ5wT0thqH5Mmyi5KpY8m8nK3LI1EkmG0kqEJMIBBBAssafGkCmU8rxDGpd5oO/ZO30qVR3y7x1e4Nx77ACJYAoYFA''@;'; put 'put ''zAncXZ+9U6HunjUQjJtvojT3uFvGVfsjIQ7MNhJUISYQiDCBu/dMyZBCob8SQqf0TmWtUqZEXoeQ49el3q2HIiwDwgOBhCRgHWBhML0JY9ztgVaTD4LpDSXemvsjVRCYbaTIQlwgEGEC5Vunubmz7VFZcs7smypotL/llrKuW+DbWRdhGRAeCCQUgdV1BcOZRLYLhM6xhTto2tZ9Huelgz3/+PNA''@;'; put 'put ''gNkm1G0CYoHApwms3jxDDbgPlCCCb1Oo09P7XSE4o1ja9p+9DD9b4Nv1LLADAqlOQAiEK5oKKxAW83tYCNyFEZ1W4tvRHEk+YLaRpAuxgUCUCCyvyz3vsPbhg8PdX+zZmG+n7j4NhyhPCEletHBiNWwRitKcQJr4I7B2d+EoJFy7NeY/xVaHkfzoSe9nfmf27A0skorBbCNJF2IDgSgSKHv1LMV5''@;'; put 'put ''OP1ik4Xu670X15Zgci1AkLyBK3Tp4om1H0dRGqQCAjEnYD3V3rvnkltDRscdPR9EmbEfU2XSIm/t3yMtEMw20oQhPhCIMoHKlpyRXaHQgy5lyMXHSh0yO99Jk4YtIJq+/eai2q4oy4N0QCAmBCqaC6cYTNsoEcVhC5CxWjovr7oiGoLAbKNBGXIAgSgTsD7FVzUWfcUkxv8SRHP6pmfcNIJG2z/S''@;'; put 'put ''naNK2nJ27CjDiEdZIqQDAlEjsH7PeNlko57QWFfPYsJIb/XpWxyYbdSmGxIBgegTWFtT6OmS/SWMm/MdUvrQo01X12Ti3oIJXnw4x/dmGS4D043+NEHGCBOobJ78bZOH/mi3qfzvVp/rS7w1v41w6p7wYLbRIg15gEAMCdzZOnGobKhLTR78sSq5M/pK0VmgQyGOJxGWby317vwghlIhNRAIK4E1''@;'; put 'put ''DVPHcCp2MGGcaQdWiXvL/jT35ZHc6gNPtmGdRggGBBKLwN0NE8aqJL3Y4P7vSUR19lU/xHHKv7r0g/cFTfn+JflPdSZWdaAWCHyaQJkoI0Oa66o4YnPtdzAifozR5AV5Na3R5AVPttGkDbmAQJwQWNVUcD5CZJUQ4lz7EPbe0hTqrkPY/J8Dfr0p3N1P4gQByEgBAqsbZ3xJluW6oNk+xi6XYvWx''@;'; put 'put ''+XnV34p2+WC20SYO+YBAnBDoPoHK3XldmjJsccjs6Nl32OsJIOhWsv5imv6Km3KfeSlOZIMMIHBCBKyn2qHNTfcaSPuJPYBzdljG0qT5vtpXTihIGC8Csw0jTAgFBBKRgHXOsqqJn+m88ydyn1OorHo45wcdkms1wubauTk7DiZijaA59QisaZ2a7dfbdijUlW5VL4TgMnUuLs7dujIWNMBsY0Ed''@;'; put 'put ''cgKBOCRwd4NvrEfKWBQ0266mRFb7SsxQxvyjXf9oHULa/aXe5mAclgCSgEA3gVVNeU6ZZm4wmP8iG4nBjH8Ip2vi0uzt7bHABGYbC+qQEwjEMYGVDecXISyWCyS+QTChfaUqxNNoIm1pW9Bsgd9z43giU1haVeu0axnTft/z9bEwDSLoj0vz6/43VljAbGNFHvICgTgnsKr5/Etk7Fxh8OBX+krl''@;'; put 'put ''ghkSkbdxwZaW5NW9Av1z43wyU0jePa2ThzKO6pkwv2aXLRPHU/Nyt14WSwxgtrGkD7mBQJwTKH9xmpv4g7eZTJt3rN9zMSJBgukyJuga6J8b55OZIvJWN19YbIpglV0uFiQgMC4q9e7cHUsEYLaxpA+5gUCCEFjW4BuDEL9fIvJMjI403O79MljoY5mqd5d663r+yCVIaSAziQhUtUw9Q8bqjhDr''@;'; put 'put ''7FldT5Hy1/nebbNiXSaYbaxnAPIDgQQhYJ23fHfDhMma3rYu3TnmjL6yrSPwVMndojNtQayfIhIEKcgMIwGrt7OW3vUEJeTCnrACdSJB8krza14NY6oBhQKzHRA2GAQEUpdAWU2hpNLgZQbvqvAow47an2v1z5Ww8jhiZknJpPqPUpcUVB5NAquaLpios67tCnWm2XkV6lw8N+eZ8mjq+KxcYLbx''@;'; put 'put ''MAugAQgkIIFlDb40wULzEcG3KNTdvZfx0y/sJ5jeGZLx2lhtt0hArCB5AATKagodWU7HIyYP9iyCYpz9W+VpOcWTtuwfQMiwDwGzDTtSCAgEUovA8prCUSFy6D6PnHnM1Z5+/fA/3UpWcUdebTW08kuteyNa1R7p6qP9iWAqWTkZN3QJKTeX5Nc+GC0Nx8sDZns8QvA+EAACxyVg/Z5b3jgxHyO5''@;'; put 'put ''nBLpGP1zDV2hzjqB+O3zc2t2w1ah4yKFC06QwLr6/EydKg0csbPsIRJ1blTp/ivnZO81TjBMxC8Ds404YkgABFKHwJFFKh2XhcyOCreS1XP4u03A5FqAIvlvskRvLc6tfT91yEClkSJQ1TJ1vsFCK3sOYBG4kxA8NdpdfY5XH5jt8QjB+0AACPSbwF31+ZkE6QsFEvPss2l7B2HcOKSQtLWGoq1e''@;'; put 'put ''lF17oN8JYAAQQAhVNBee1qUdaHArQ0+ygVhdfQ6H9Kvi7XQzMFu4ZYEAEIgYAWt/rma236dS92SZOlx9EwWNjn+nKyMXBFhnzZL8RuifG7GZSM7Aq5oK70VI3GBXZ5ihjyXsunBhQc2L8VYxmG28zQjoAQJJSKCiPv90Hem/lYhagDEhfUvs0g6+7paH3nzKhyPqZs/ewJIQAZQUZgKVzUU5QaNz''@;'; put 'put ''qyq5M6zQXHCmUNeSWHX1OV55YLbHIwTvAwEgEDYCyxt839bMjlWf8XtukCD5b5TS2096b/h7YLphw550gcpePUtRDzq3qJLnArs4LsTbbuTIudFXvS8eCwazjcdZAU1AIIkJdP+eK4xbEBbFMnW6+5aqm/42SuTHEE776S1x+ocziacnIUqrapo6WeNdGyWiOI881ZoGxcrcEm/N/fFaAJhtvM4M''@;'; put 'put ''6AICSU7grvqc8RixcooV77H657rkzBd0pi1JCwbrriuqDSU5DijvBAms2FM4jBpouxBinD1EJu5NBj88K577LIPZnuAEw2VAAAhEhkB5o/cCiuVyIfi5x/o9V5XSmgyk3zrm7YxG+Go5MnOQSFHXtMxYZPDA/x/BKEQHEvLFpfk76uO5DjDbeJ4d0AYEUoSAddyeW9ZuSFNHLQkYh0b1LZsgSVel''@;'; put 'put ''9IeDKFBeMmHra3AoRorcGH3KXNZSeLLCjMD4AAALhklEQVQW2t/U+0xuq6sPbpO+WzxzixbPVMBs43l2QBsQSDECa2sKPSFF/I9ArNQ+eq83AoIkTSbOCo0b5dA/N8VuDoRQZfPUn3Kh32FXbjLtE4qk6QsLGuJuq0/f2QGzTb37FSoGAnFPYNmu3K+5HVm3a2bX1Rgf3T830/mFN7u0g2vm5W6G''@;'; put 'put ''/rlxP5vhEVjVMm180Di8Q6Gu7q0+CAlBiVoyP3dbQtwDYLbhuQ8gChAAAmEmYJ23XNU0qQARaS0X7Oy+4a3+uS4la69p+hfMy9vWGOb0EC7OCNxVl12jSu5CW5YQ4l1Vks+bm7PjYJxJPaYcMNtEmCXQCARSmMCqpjwnE+LHHnnELUGz/eS+KAiSdbeS9YhfdNy5YMIzb6QwqqQtfXXr5IKQ4d8q''@;'; put 'put ''EbV7q4/J9RDFSvFC364HEqVoMNtEmSnQCQRSnMDqlpx0zZAXM6TPV6jT0xcHRiQoEccKoaM18dLDNMWnLCzlW119ggRvx5icZwdUafozEkVXzsneGAhLkigEAbONAmRIAQSAQPgIVLbkjNQN8YBEnZccK6rOAh0Sdi0zHTI0rQ8f9phFsrr6mCy0yt4WhhHxYyHPXOCrrouZqAEkBrMdADQYAgSA''@;'; put 'put ''QGwJWL/nLqufODNotlVmOEZ/+VhqVOp5nXHjDhrSn7y5qLYrtooh+0AIlDdOG6EQvosJ40x7vEKdG92B0OxEO+gEzHYgdwCMAQJAIC4IdP+ey9iFIRZc51ayjtqfa4nk3HxepWmlI99Lq4dDMeJi2k5YxLrWi5YEzY477adaxoz9MlIvWVBQ03rCQeLkQjDbOJkIkAEEgMDACayoGT+sU3RVOSXP''@;'; put 'put ''TEXyDOkb6b8LaqpV2fHToCrevmVctX/g2WBkNAgsb/AVcB56qvd8SsSx6FBOXkUZLuPR0BDOHGC24aQJsYAAEIgpgYq6gtFdon2FTByXHmsRlWW6JtdedytDbw+ZgXrooRvT6frc5FXNU/7KhHGlfZHJ2VuyIY0vKapti1/Vn60MzDYRZw00AwEg8LkE7t6V93VMxW1CsJkKdaX1vZhxU8eE/Atj''@;'; put 'put ''6TcKkx4Z+eGQT+Ar5vi5qVa3TMnVzECt3aCCcdOQSHx39TkePTDb4xGC94EAEEhYAlbT+k7WVqlS9wUydRzVzs8qLGR2HFJp2haKXFWyHnodFlPFdrorWyaP5MzcijDq6eqjUs8zGjt0RTx39TkeNTDb4xGC94EAEEh4Aivqcs5iGC3igl2hSu7/Hvf36bKsnqgESW9hgh8mWH5Id+IP4bfd6E/9''@;'; put 'put ''qqYL1iDE5tqZKZI1KkTRXN+O5uirCV9GMNvwsYRIQAAIxDmBZQ2+MUwEf4YFvkqVPMc0XasELphpMv0dh5z2W0rowwpVP0mUAxTW7xkvK51pNICGS1LaYerXHR5V0ok9NViTu0yZM1WSTIQ+NDLfOp3Hy1foFc0XnuakanPAbOtZWW5t9ZHp/ivnZO814vz2+lx5YLaJPHugHQgAgQERuLN14lBq''@;'; put 'put ''8O9xjn5CifxFiSiOzwrEBWecm++7lMxtIda5iZquVpdLabeMKtoGUCbKyOi9G6llpgeyFCoHmYdil4th7RTM8akYo7EuKeNUk7HTTB4cFTQ73IzrMsLCMtvuv/dCCO6WMzWMSGe6Y9TrGvd/4Nf3v0q5a7OJ2z48+f2T9ViZ7z0tM36j88AP7bng3DyIhDJ9UUHN3gFNdBwNArONo8kAKUAACESf''@;'; put 'put ''QHldwTkMB39BsDxdIkr32buf97IaIBg89PEQx+iXQ2Zgl0zlzQiZBw3OdM4DHW5FN62nxddmjRX92aJiGelZG17Fh0/PJFrGewR1onQcMGXmUCVFmE7G6TlEoBxKlXOY4Ke0h97NIogqEnWmEUzo8XQf730hOFcl97syce/UTP8mzFhLNBeOrW6dPk43A3t712Jt9SnO3bryeNoT4X0w20SYJdAI''@;'; put 'put ''BIBAxAlYx0AaJrrao4z+jt848I1j9dP9PBFHjolU/WnqiI8cNO1NnQU/0HnnmxiRF02EOxSBAowbAssSJwxTJoTEEc8iWFYQ5mNV6swiWDqVEPVk3ew8rUPfN5RxXZWp46hzoCMOAyGkM39bmjJyu879a9tDqKGsqNaMVF7rg8aIZ/duCpkdF9o5hODvcI9zbLL8bg5mG6m7B+ICASCQsASWt0w6''@;'; put 'put ''g3B2pYxd15g8dBZCVlfdo/vqxmOBAgmBRI8ygf77HwYLdlj/X6au9CPvdv/5x9b/YPT5taUpI3aGjM5fReoUrqqWaVeZLPSQzdj69oAiac4C386E6epzvHsBzPZ4hOB9IAAEUpaAdQbzL16bJbsOvzvFpQyfyUxtBkP66fECRDe72hQprR0jtE+W0p43WPAjQ/i7DFM7wDF/28XlN3Widmn5De29''@;'; put 'put ''Nac35w3RGP8iY9rpquQ+TZU92UH9cJ5Mnad8Vm3Wb70ydT1nCv2XHSG+JVxPulZXH0N2NDNufNXOrVLP5v0e1zfLxm7Q44X1YHWA2Q6WIIwHAkAgZQiU1RRK6So6jQk91yVnTfDIQ70HAm+fihAfap/fG24Y1lOeRJRPKJU/RAjV+fWDb1Ikv0EpfR8Zos3lChwY7Ipi60PF/XvHS22G/GVqSjN1''@;'; put 'put ''EZjnkNJOPVYtXDAmOGqVZc+NC3KfeWmw9Va1TL2Zcf2eXs/inZSSovm5ib8oqjcbMNvB3ikwHggAgZQlYJnvqeg0qd35XgY32Sk6D54pSdLJEnFmqcQ5XMKOUQLxMRrzp+ksqDJhUowwwRhxmTg1RXL5KZIOcSz2cW7sN5jexkWgyxCsTTD2Eab0X7JKP2nvpIdHp3WyaK1+Xr15hhpKPzhRpWlz''@;'; put 'put ''TK5fhY+xAItxQ3NKQx5CLPSLub6d7wzkJljTMHUMkmmdwYJfssdLyPHkqPfTr4zViuiB1HEiY8BsT4QSXAMEgAAQ6CcBa9EPqq0lZ40YTvz79hM9LY10HNR6/ubStE4uDR/C1fZTeOZbh+Nmr2vfMlc0XnCqybsqJaJcQjA9atVz0Gjfn66OucPgh+/vzwlPFp+s3c3rTRa63s4pOD+MhFS0sKDm''@;'; put 'put ''xX7ijvvLwWzjfopAIBAAAkAgtgS6vz6Xja9yTO5ECF3Ud6uRdQgIwfQlgskvnHLHlhN5Al/dMvkszQw+Z59/bFUoU7V0Xk51RWyrjUx2MNvIcIWoQAAIAIGkI2CdTtUeVC73qCOWhMy28X0L7P5qWc56LGR2rO/SSdNnLaKy4ujmsEcNHrq856lWiHc9asbXEuWkrv5OLphtf4nB9UAACACBFCew''@;'; put 'put ''qinPaXBxreD8Z4rkHN0Xh8GCXQ4p4086xz+/xVe9r+/7lU0XzDK49idKJMV6r3urD5ZvXODdsT5Z0YLZJuvMQl1AAAgAgQgTWN7o/RLnxi8xwpfK1HnU4RsKdb+JEP+VTOUN9hNrRU3hEKTieoH42bY8mbg3iUPiyuKZW7QIS45ZeDDbmKGHxEAACACBxCdg/Z7rlI1sv7ZvXbpjxNkES3LfqgTC''@;'; put 'put ''zzqJ+0Yqaf8KGeT7TGir7WswIn4kRH6Jr/aFxKfx2RWA2Sbz7EJtQAAIAIEoESh79SzFczhzssb89zjljKMO/rAWUXnU4Z/I2JHern2YZsuSiPpEcW71N6MkM2ZpwGxjhh4SAwEgAASSj8CKmsJhTArdiRC/+lhfLX+qYoE6COUFC3LrB304RryTBLON9xkCfUAACACBBCRQ3ug9myD5Lia0yRJR''@;'; put 'put ''j+qmZLUuVKlj4bzcbVUJWF6/JYPZ9hsZDAACQAAIAIETJVDRWHguxnSlKfTze+/PNTl7y21I424uqu060ViJfB2YbSLPHmgHAkAACCQAAWtfrV9PX8C4toQSeShFikGwdNm8vC1bEkB+WCSC2YYFIwQBAkAACACB4xFY0zrtizJx/wYh7NJZcFpx7paO441JlvfBbJNlJqEOIAAEgEACELDORB69''@;'; put 'put ''d68jWU+K+qwp+D9J1vEz+kjcvQAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner.16f763cebc6b64df-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; options notes; data _null_; format url $256.; rc=METADATA_GETURI("Stored Process Web App",url); url=coalescec(url,"localhost/SASStoredProcess"); urlEscaped = tranwrd(trim(url)," ","%20"); putlog "NOTE: SASjs Streaming App Created! Check it out here:" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; putlog "NOTE- " urlEscaped +(-1) "?_program=&appLoc/services/clickme" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; run;